From 45ab15d4b5a11f45175c679361e5ab0222544698 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 10 Sep 2025 14:40:48 -0400 Subject: [PATCH 001/137] add WAMR dependency --- BUILD.md | 1 + CMakeLists.txt | 1 + cmake/RippledCore.cmake | 6 + conan.lock | 3 +- conanfile.py | 4 + external/wamr/conandata.yml | 6 + external/wamr/conanfile.py | 92 +++ external/wamr/patches/ripp_metering.patch | 901 ++++++++++++++++++++++ 8 files changed, 1013 insertions(+), 1 deletion(-) create mode 100644 external/wamr/conandata.yml create mode 100644 external/wamr/conanfile.py create mode 100644 external/wamr/patches/ripp_metering.patch diff --git a/BUILD.md b/BUILD.md index 6b1594bb5e..0b1da3703c 100644 --- a/BUILD.md +++ b/BUILD.md @@ -147,6 +147,7 @@ git sparse-checkout set recipes/snappy git sparse-checkout add recipes/soci git fetch origin master git checkout master +conan export --version 2.4.1 external/wamr # TODO: needs to be added to the conan center index conan export --version 1.1.10 recipes/snappy/all conan export --version 4.0.3 recipes/soci/all rm -rf .git diff --git a/CMakeLists.txt b/CMakeLists.txt index c71fb68599..022f45e395 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -120,6 +120,7 @@ endif() find_package(nudb REQUIRED) find_package(date REQUIRED) find_package(xxHash REQUIRED) +find_package(wamr REQUIRED) target_link_libraries(ripple_libs INTERFACE ed25519::ed25519 diff --git a/cmake/RippledCore.cmake b/cmake/RippledCore.cmake index 7d3561675a..1c86c8a481 100644 --- a/cmake/RippledCore.cmake +++ b/cmake/RippledCore.cmake @@ -65,8 +65,14 @@ target_link_libraries(xrpl.imports.main xrpl.libpb xxHash::xxhash $<$:antithesis-sdk-cpp> + wamr::wamr ) +if (WIN32) + target_link_libraries(xrpl.imports.main INTERFACE ntdll) +endif() + + include(add_module) include(target_link_modules) diff --git a/conan.lock b/conan.lock index 0f11f086b4..2726749ffd 100644 --- a/conan.lock +++ b/conan.lock @@ -3,6 +3,7 @@ "requires": [ "zlib/1.3.1#b8bc2603263cf7eccbd6e17e66b0ed76%1756234269.497", "xxhash/0.8.3#681d36a0a6111fc56e5e45ea182c19cc%1756234289.683", + "wamr/2.4.1#731b101bc8fa06d84e5c84edb4dc41a5%1756223745.11", "sqlite3/3.49.1#8631739a4c9b93bd3d6b753bac548a63%1756234266.869", "soci/4.0.3#a9f8d773cd33e356b5879a4b0564f287%1756234262.318", "snappy/1.1.10#968fef506ff261592ec30c574d4a7809%1756234314.246", @@ -53,4 +54,4 @@ ] }, "config_requires": [] -} \ No newline at end of file +} diff --git a/conanfile.py b/conanfile.py index 01f61c5d4e..b6ce2e35a9 100644 --- a/conanfile.py +++ b/conanfile.py @@ -2,6 +2,7 @@ from conan import ConanFile, __version__ as conan_version from conan.tools.cmake import CMake, CMakeToolchain, cmake_layout import re + class Xrpl(ConanFile): name = 'xrpl' @@ -30,6 +31,7 @@ class Xrpl(ConanFile): 'openssl/3.5.2', 'soci/4.0.3', 'zlib/1.3.1', + 'wamr/2.4.1', ] test_requires = [ @@ -133,6 +135,7 @@ class Xrpl(ConanFile): self.folders.generators = 'build/generators' generators = 'CMakeDeps' + def generate(self): tc = CMakeToolchain(self) tc.variables['tests'] = self.options.tests @@ -190,6 +193,7 @@ class Xrpl(ConanFile): 'protobuf::libprotobuf', 'soci::soci', 'sqlite3::sqlite', + 'wamr::wamr', 'xxhash::xxhash', 'zlib::zlib', ] diff --git a/external/wamr/conandata.yml b/external/wamr/conandata.yml new file mode 100644 index 0000000000..d475ad987c --- /dev/null +++ b/external/wamr/conandata.yml @@ -0,0 +1,6 @@ +patches: + 2.4.1: + - patch_description: add metering to iwasm interpreter + patch_file: patches/ripp_metering.patch + patch_type: conan + diff --git a/external/wamr/conanfile.py b/external/wamr/conanfile.py new file mode 100644 index 0000000000..429c509795 --- /dev/null +++ b/external/wamr/conanfile.py @@ -0,0 +1,92 @@ +from conan import ConanFile, tools +from conan.tools.cmake import CMake, CMakeToolchain, CMakeDeps, cmake_layout +from conan.tools.files import ( + apply_conandata_patches, + export_conandata_patches, + # get, +) +from conan.tools.scm import Git + +# import os + +required_conan_version = ">=1.55.0" + + +class WamrConan(ConanFile): + name = "wamr" + version = "2.4.1" + license = "Apache License v2.0" + url = "https://github.com/bytecodealliance/wasm-micro-runtime.git" + description = "Webassembly micro runtime" + package_type = "library" + settings = "os", "compiler", "build_type", "arch" + options = {"shared": [True, False], "fPIC": [True, False]} + default_options = {"shared": False, "fPIC": True} + # requires = [("llvm/20.1.1@")] + + def export_sources(self): + export_conandata_patches(self) + pass + + # def build_requirements(self): + # self.tool_requires("llvm/20.1.1") + + def config_options(self): + if self.settings.os == "Windows": + del self.options.fPIC + + def layout(self): + cmake_layout(self, src_folder="src") + + def source(self): + git = Git(self) + git.fetch_commit( + url="https://github.com/bytecodealliance/wasm-micro-runtime.git", + commit="b124f70345d712bead5c0c2393acb2dc583511de", + ) + # get(self, **self.conan_data["sources"][self.version], strip_root=True) + + def generate(self): + tc = CMakeToolchain(self) + + tc.variables["WAMR_BUILD_INTERP"] = 1 + tc.variables["WAMR_BUILD_FAST_INTERP"] = 1 + tc.variables["WAMR_BUILD_INSTRUCTION_METERING"] = 1 + tc.variables["WAMR_BUILD_AOT"] = 0 + tc.variables["WAMR_BUILD_JIT"] = 0 + tc.variables["WAMR_BUILD_FAST_JIT"] = 0 + tc.variables["WAMR_BUILD_SIMD"] = 0 + tc.variables["WAMR_BUILD_LIB_PTHREAD"] = 0 + tc.variables["WAMR_BUILD_LIB_WASI_THREADS"] = 0 + tc.variables["WAMR_BUILD_TAIL_CALL"] = 1 + tc.variables["WAMR_BUILD_BULK_MEMORY"] = 0 + tc.variables["WAMR_DISABLE_HW_BOUND_CHECK"] = 1 + tc.variables["WAMR_DISABLE_STACK_HW_BOUND_CHECK"] = 1 + tc.variables["WAMR_BH_LOG"] = "wamr_log_to_rippled" + + tc.generate() + + # This generates "foo-config.cmake" and "bar-config.cmake" in self.generators_folder + deps = CMakeDeps(self) + deps.generate() + + def build(self): + apply_conandata_patches(self) + cmake = CMake(self) + cmake.verbose = True + cmake.configure() + cmake.build() + # self.run(f'echo {self.source_folder}') + # Explicit way: + # self.run('cmake %s/hello %s' % (self.source_folder, cmake.command_line)) + # self.run("cmake --build . %s" % cmake.build_config) + + def package(self): + cmake = CMake(self) + cmake.verbose = True + cmake.install() + + def package_info(self): + self.cpp_info.libs = ["iwasm"] + self.cpp_info.names["cmake_find_package"] = "wamr" + self.cpp_info.names["cmake_find_package_multi"] = "wamr" diff --git a/external/wamr/patches/ripp_metering.patch b/external/wamr/patches/ripp_metering.patch new file mode 100644 index 0000000000..2e8ec70d7a --- /dev/null +++ b/external/wamr/patches/ripp_metering.patch @@ -0,0 +1,901 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 4b28fa89..7d523a3d 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -1,7 +1,7 @@ + # Copyright (C) 2019 Intel Corporation. All rights reserved. + # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +-cmake_minimum_required (VERSION 3.14) ++cmake_minimum_required (VERSION 3.20) + + option(BUILD_SHARED_LIBS "Build using shared libraries" OFF) + +@@ -170,7 +170,7 @@ if (MINGW) + endif () + + if (WIN32) +- target_link_libraries(vmlib PRIVATE ntdll) ++ target_link_libraries(vmlib PUBLIC ntdll) + endif() + + set (WAMR_PUBLIC_HEADERS +diff --git a/core/iwasm/aot/aot_runtime.c b/core/iwasm/aot/aot_runtime.c +index d2621fb2..6c96a844 100644 +--- a/core/iwasm/aot/aot_runtime.c ++++ b/core/iwasm/aot/aot_runtime.c +@@ -5611,7 +5611,7 @@ aot_resolve_import_func(AOTModule *module, AOTImportFunc *import_func) + import_func->func_ptr_linked = wasm_native_resolve_symbol( + import_func->module_name, import_func->func_name, + import_func->func_type, &import_func->signature, +- &import_func->attachment, &import_func->call_conv_raw); ++ &import_func->attachment, NULL, &import_func->call_conv_raw); + #if WASM_ENABLE_MULTI_MODULE != 0 + if (!import_func->func_ptr_linked) { + if (!wasm_runtime_is_built_in_module(import_func->module_name)) { +diff --git a/core/iwasm/common/wasm_c_api.c b/core/iwasm/common/wasm_c_api.c +index 269ec577..34eb7c34 100644 +--- a/core/iwasm/common/wasm_c_api.c ++++ b/core/iwasm/common/wasm_c_api.c +@@ -3242,10 +3242,20 @@ wasm_func_copy(const wasm_func_t *func) + + cloned->func_idx_rt = func->func_idx_rt; + cloned->inst_comm_rt = func->inst_comm_rt; ++ cloned->gas = func->gas; + + RETURN_OBJ(cloned, wasm_func_delete) + } + ++uint32_t ++wasm_func_set_gas(wasm_func_t *func, uint32_t gas) ++{ ++ if(!func) return 0; ++ ++ func->gas = gas; ++ return gas; ++} ++ + own wasm_functype_t * + wasm_func_type(const wasm_func_t *func) + { +@@ -4998,11 +5008,11 @@ wasm_instance_new_with_args_ex(wasm_store_t *store, const wasm_module_t *module, + goto failed; + } + ++ WASMModuleInstance *wasm_module_inst = NULL; + /* create the c-api func import list */ + #if WASM_ENABLE_INTERP != 0 + if (instance->inst_comm_rt->module_type == Wasm_Module_Bytecode) { +- WASMModuleInstance *wasm_module_inst = +- (WASMModuleInstance *)instance->inst_comm_rt; ++ wasm_module_inst = (WASMModuleInstance *)instance->inst_comm_rt; + p_func_imports = &(wasm_module_inst->c_api_func_imports); + import_func_count = MODULE_INTERP(module)->import_function_count; + } +@@ -5052,6 +5062,13 @@ wasm_instance_new_with_args_ex(wasm_store_t *store, const wasm_module_t *module, + } + bh_assert(func_import->func_ptr_linked); + ++ // fill gas ++ if(wasm_module_inst) { ++ WASMFunctionInstance *fi = wasm_module_inst->e->functions + func_host->func_idx_rt; ++ if(fi) fi->gas = func_host->gas; ++ } ++ ++ + func_import++; + } + +@@ -5389,3 +5406,8 @@ wasm_instance_get_wasm_func_exec_time(const wasm_instance_t *instance, + return -1.0; + #endif + } ++ ++wasm_exec_env_t wasm_instance_exec_env(const wasm_instance_t *instance) ++{ ++ return wasm_runtime_get_exec_env_singleton(instance->inst_comm_rt); ++} +diff --git a/core/iwasm/common/wasm_c_api_internal.h b/core/iwasm/common/wasm_c_api_internal.h +index 49a17a96..19a85980 100644 +--- a/core/iwasm/common/wasm_c_api_internal.h ++++ b/core/iwasm/common/wasm_c_api_internal.h +@@ -142,6 +142,10 @@ struct wasm_func_t { + void (*finalizer)(void *); + } cb_env; + } u; ++ ++ // gas cost for import func ++ uint32 gas; ++ + /* + * an index in both functions runtime instance lists + * of interpreter mode and aot mode +diff --git a/core/iwasm/common/wasm_exec_env.c b/core/iwasm/common/wasm_exec_env.c +index 47752950..5f26d886 100644 +--- a/core/iwasm/common/wasm_exec_env.c ++++ b/core/iwasm/common/wasm_exec_env.c +@@ -86,7 +86,7 @@ wasm_exec_env_create_internal(struct WASMModuleInstanceCommon *module_inst, + #endif + + #if WASM_ENABLE_INSTRUCTION_METERING != 0 +- exec_env->instructions_to_execute = -1; ++ exec_env->instructions_to_execute = INT64_MAX; + #endif + + return exec_env; +diff --git a/core/iwasm/common/wasm_exec_env.h b/core/iwasm/common/wasm_exec_env.h +index 5d80312f..b2ecce2e 100644 +--- a/core/iwasm/common/wasm_exec_env.h ++++ b/core/iwasm/common/wasm_exec_env.h +@@ -89,7 +89,7 @@ typedef struct WASMExecEnv { + + #if WASM_ENABLE_INSTRUCTION_METERING != 0 + /* instructions to execute */ +- int instructions_to_execute; ++ int64 instructions_to_execute; + #endif + + #if WASM_ENABLE_FAST_JIT != 0 +diff --git a/core/iwasm/common/wasm_native.c b/core/iwasm/common/wasm_native.c +index 060bb2c3..9221c36a 100644 +--- a/core/iwasm/common/wasm_native.c ++++ b/core/iwasm/common/wasm_native.c +@@ -180,9 +180,9 @@ native_symbol_cmp(const void *native_symbol1, const void *native_symbol2) + ((const NativeSymbol *)native_symbol2)->symbol); + } + +-static void * ++static NativeSymbol * + lookup_symbol(NativeSymbol *native_symbols, uint32 n_native_symbols, +- const char *symbol, const char **p_signature, void **p_attachment) ++ const char *symbol) + { + NativeSymbol *native_symbol, key = { 0 }; + +@@ -190,9 +190,7 @@ lookup_symbol(NativeSymbol *native_symbols, uint32 n_native_symbols, + + if ((native_symbol = bsearch(&key, native_symbols, n_native_symbols, + sizeof(NativeSymbol), native_symbol_cmp))) { +- *p_signature = native_symbol->signature; +- *p_attachment = native_symbol->attachment; +- return native_symbol->func_ptr; ++ return native_symbol; + } + + return NULL; +@@ -205,25 +203,36 @@ lookup_symbol(NativeSymbol *native_symbols, uint32 n_native_symbols, + void * + wasm_native_resolve_symbol(const char *module_name, const char *field_name, + const WASMFuncType *func_type, +- const char **p_signature, void **p_attachment, ++ const char **p_signature, void **p_attachment, uint32_t *gas, + bool *p_call_conv_raw) + { + NativeSymbolsNode *node, *node_next; + const char *signature = NULL; + void *func_ptr = NULL, *attachment = NULL; ++ NativeSymbol *native_symbol = NULL; + + node = g_native_symbols_list; + while (node) { + node_next = node->next; + if (!strcmp(node->module_name, module_name)) { +- if ((func_ptr = ++ if ((native_symbol = + lookup_symbol(node->native_symbols, node->n_native_symbols, +- field_name, &signature, &attachment)) ++ field_name)) + || (field_name[0] == '_' +- && (func_ptr = lookup_symbol( ++ && (native_symbol = lookup_symbol( + node->native_symbols, node->n_native_symbols, +- field_name + 1, &signature, &attachment)))) +- break; ++ field_name + 1)))) ++ { ++ func_ptr = native_symbol->func_ptr; ++ if(func_ptr) ++ { ++ if(gas) ++ *gas = native_symbol->gas; ++ signature = native_symbol->signature; ++ attachment = native_symbol->attachment; ++ break; ++ } ++ } + } + node = node_next; + } +diff --git a/core/iwasm/common/wasm_native.h b/core/iwasm/common/wasm_native.h +index 9a6afee1..0fe4739f 100644 +--- a/core/iwasm/common/wasm_native.h ++++ b/core/iwasm/common/wasm_native.h +@@ -52,7 +52,7 @@ wasm_native_lookup_libc_builtin_global(const char *module_name, + void * + wasm_native_resolve_symbol(const char *module_name, const char *field_name, + const WASMFuncType *func_type, +- const char **p_signature, void **p_attachment, ++ const char **p_signature, void **p_attachment, uint32_t *gas, + bool *p_call_conv_raw); + + bool +diff --git a/core/iwasm/common/wasm_runtime_common.c b/core/iwasm/common/wasm_runtime_common.c +index 943b46fc..d026777e 100644 +--- a/core/iwasm/common/wasm_runtime_common.c ++++ b/core/iwasm/common/wasm_runtime_common.c +@@ -2344,10 +2344,18 @@ wasm_runtime_access_exce_check_guard_page() + #if WASM_ENABLE_INSTRUCTION_METERING != 0 + void + wasm_runtime_set_instruction_count_limit(WASMExecEnv *exec_env, +- int instructions_to_execute) ++ int64 instructions_to_execute) + { ++ if(instructions_to_execute == -1) ++ instructions_to_execute = INT64_MAX; + exec_env->instructions_to_execute = instructions_to_execute; + } ++ ++int64 ++wasm_runtime_get_instruction_count_limit(WASMExecEnv *exec_env) ++{ ++ return exec_env->instructions_to_execute; ++} + #endif + + WASMFuncType * +@@ -7412,7 +7420,7 @@ wasm_runtime_is_import_func_linked(const char *module_name, + const char *func_name) + { + return wasm_native_resolve_symbol(module_name, func_name, NULL, NULL, NULL, +- NULL); ++ NULL, NULL); + } + + bool +@@ -7869,13 +7877,14 @@ wasm_runtime_get_module_name(wasm_module_t module) + bool + wasm_runtime_detect_native_stack_overflow(WASMExecEnv *exec_env) + { ++#if WASM_DISABLE_STACK_HW_BOUND_CHECK == 0 + uint8 *boundary = exec_env->native_stack_boundary; + RECORD_STACK_USAGE(exec_env, (uint8 *)&boundary); + if (boundary == NULL) { + /* the platform doesn't support os_thread_get_stack_boundary */ + return true; + } +-#if defined(OS_ENABLE_HW_BOUND_CHECK) && WASM_DISABLE_STACK_HW_BOUND_CHECK == 0 ++#if defined(OS_ENABLE_HW_BOUND_CHECK) + uint32 page_size = os_getpagesize(); + uint32 guard_page_count = STACK_OVERFLOW_CHECK_GUARD_PAGE_COUNT; + boundary = boundary + page_size * guard_page_count; +@@ -7885,6 +7894,7 @@ wasm_runtime_detect_native_stack_overflow(WASMExecEnv *exec_env) + "native stack overflow"); + return false; + } ++#endif + return true; + } + +@@ -7907,7 +7917,7 @@ wasm_runtime_detect_native_stack_overflow_size(WASMExecEnv *exec_env, + boundary = boundary - WASM_STACK_GUARD_SIZE + requested_size; + if ((uint8 *)&boundary < boundary) { + wasm_runtime_set_exception(wasm_runtime_get_module_inst(exec_env), +- "native stack overflow"); ++ "native s stack overflow"); + return false; + } + return true; +diff --git a/core/iwasm/common/wasm_runtime_common.h b/core/iwasm/common/wasm_runtime_common.h +index 324620be..54155a0c 100644 +--- a/core/iwasm/common/wasm_runtime_common.h ++++ b/core/iwasm/common/wasm_runtime_common.h +@@ -833,7 +833,10 @@ wasm_runtime_set_native_stack_boundary(WASMExecEnv *exec_env, + /* See wasm_export.h for description */ + WASM_RUNTIME_API_EXTERN void + wasm_runtime_set_instruction_count_limit(WASMExecEnv *exec_env, +- int instructions_to_execute); ++ int64 instructions_to_execute); ++WASM_RUNTIME_API_EXTERN int64 ++wasm_runtime_get_instruction_count_limit(WASMExecEnv *exec_env); ++ + #endif + + #if WASM_CONFIGURABLE_BOUNDS_CHECKS != 0 +diff --git a/core/iwasm/include/lib_export.h b/core/iwasm/include/lib_export.h +index 0ca668f5..93bcf807 100644 +--- a/core/iwasm/include/lib_export.h ++++ b/core/iwasm/include/lib_export.h +@@ -24,6 +24,8 @@ typedef struct NativeSymbol { + /* attachment which can be retrieved in native API by + calling wasm_runtime_get_function_attachment(exec_env) */ + void *attachment; ++ // gas cost for import func ++ uint32_t gas; + } NativeSymbol; + + /* clang-format off */ +diff --git a/core/iwasm/include/wasm_c_api.h b/core/iwasm/include/wasm_c_api.h +index 241a0eec..1141744c 100644 +--- a/core/iwasm/include/wasm_c_api.h ++++ b/core/iwasm/include/wasm_c_api.h +@@ -19,8 +19,10 @@ + #if defined(_MSC_BUILD) + #if defined(COMPILING_WASM_RUNTIME_API) + #define WASM_API_EXTERN __declspec(dllexport) +-#else ++#elif defined(_DLL) + #define WASM_API_EXTERN __declspec(dllimport) ++#else ++#define WASM_API_EXTERN + #endif + #else + #define WASM_API_EXTERN +@@ -592,6 +594,8 @@ WASM_API_EXTERN size_t wasm_func_result_arity(const wasm_func_t*); + WASM_API_EXTERN own wasm_trap_t* wasm_func_call( + const wasm_func_t*, const wasm_val_vec_t* args, wasm_val_vec_t* results); + ++WASM_API_EXTERN own uint32_t wasm_func_set_gas(wasm_func_t*, uint32_t); ++ + + // Global Instances + +@@ -701,6 +705,11 @@ WASM_API_EXTERN double wasm_instance_sum_wasm_exec_time(const wasm_instance_t*); + // func_name. If the function is not found, return 0. + WASM_API_EXTERN double wasm_instance_get_wasm_func_exec_time(const wasm_instance_t*, const char *); + ++struct WASMExecEnv; ++typedef struct WASMExecEnv *wasm_exec_env_t; ++ ++WASM_API_EXTERN wasm_exec_env_t wasm_instance_exec_env(const wasm_instance_t*); ++ + /////////////////////////////////////////////////////////////////////////////// + // Convenience + +diff --git a/core/iwasm/include/wasm_export.h b/core/iwasm/include/wasm_export.h +index 81efb8f6..f752a970 100644 +--- a/core/iwasm/include/wasm_export.h ++++ b/core/iwasm/include/wasm_export.h +@@ -20,8 +20,10 @@ + #if defined(_MSC_BUILD) + #if defined(COMPILING_WASM_RUNTIME_API) + #define WASM_RUNTIME_API_EXTERN __declspec(dllexport) +-#else ++#elif defined(_DLL) + #define WASM_RUNTIME_API_EXTERN __declspec(dllimport) ++#else ++#define WASM_RUNTIME_API_EXTERN + #endif + #elif defined(__GNUC__) || defined(__clang__) + #define WASM_RUNTIME_API_EXTERN __attribute__((visibility("default"))) +@@ -1874,7 +1876,14 @@ wasm_runtime_set_native_stack_boundary(wasm_exec_env_t exec_env, + */ + WASM_RUNTIME_API_EXTERN void + wasm_runtime_set_instruction_count_limit(wasm_exec_env_t exec_env, +- int instruction_count); ++ int64_t instruction_count); ++ ++WASM_RUNTIME_API_EXTERN int64_t ++wasm_runtime_get_instruction_count_limit(wasm_exec_env_t exec_env); ++ ++WASM_RUNTIME_API_EXTERN void ++wasm_runtime_set_instruction_schedule(wasm_exec_env_t exec_env, ++ int64_t const *instructions_schedule); + + /** + * Dump runtime memory consumption, including: +diff --git a/core/iwasm/interpreter/wasm.h b/core/iwasm/interpreter/wasm.h +index 0dd73958..b7cad5f2 100644 +--- a/core/iwasm/interpreter/wasm.h ++++ b/core/iwasm/interpreter/wasm.h +@@ -617,6 +617,9 @@ typedef struct WASMFunctionImport { + WASMModule *import_module; + WASMFunction *import_func_linked; + #endif ++ // gas cost for import func ++ uint32 gas; ++ + } WASMFunctionImport; + + #if WASM_ENABLE_TAGS != 0 +diff --git a/core/iwasm/interpreter/wasm_interp_classic.c b/core/iwasm/interpreter/wasm_interp_classic.c +index edc473f2..55071613 100644 +--- a/core/iwasm/interpreter/wasm_interp_classic.c ++++ b/core/iwasm/interpreter/wasm_interp_classic.c +@@ -1547,13 +1547,14 @@ get_global_addr(uint8 *global_data, WASMGlobalInstance *global) + } + + #if WASM_ENABLE_INSTRUCTION_METERING != 0 +-#define CHECK_INSTRUCTION_LIMIT() \ +- if (instructions_left == 0) { \ +- wasm_set_exception(module, "instruction limit exceeded"); \ +- goto got_exception; \ +- } \ +- else if (instructions_left > 0) \ +- instructions_left--; ++#define CHECK_INSTRUCTION_LIMIT() \ ++ do { \ ++ --instructions_left; \ ++ if (instructions_left < 0) { \ ++ wasm_set_exception(module, "instruction limit exceeded"); \ ++ goto got_exception; \ ++ } \ ++ } while (0) + #else + #define CHECK_INSTRUCTION_LIMIT() (void)0 + #endif +@@ -1603,10 +1604,9 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, + uint32 cache_index, type_index, param_cell_num, cell_num; + + #if WASM_ENABLE_INSTRUCTION_METERING != 0 +- int instructions_left = -1; +- if (exec_env) { ++ int64 instructions_left = INT64_MAX; ++ if (exec_env) + instructions_left = exec_env->instructions_to_execute; +- } + #endif + + #if WASM_ENABLE_EXCE_HANDLING != 0 +@@ -6849,6 +6849,11 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, + FREE_FRAME(exec_env, frame); + wasm_exec_env_set_cur_frame(exec_env, prev_frame); + ++#if WASM_ENABLE_INSTRUCTION_METERING != 0 ++ if(exec_env) ++ exec_env->instructions_to_execute = instructions_left; ++#endif ++ + if (!prev_frame->ip) { + /* Called from native. */ + return; +@@ -6889,6 +6894,12 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, + } + #endif + SYNC_ALL_TO_FRAME(); ++ ++#if WASM_ENABLE_INSTRUCTION_METERING != 0 ++ if(exec_env) ++ exec_env->instructions_to_execute = instructions_left; ++#endif ++ + return; + + #if WASM_ENABLE_LABELS_AS_VALUES == 0 +diff --git a/core/iwasm/interpreter/wasm_interp_fast.c b/core/iwasm/interpreter/wasm_interp_fast.c +index 36d4538f..4d03603e 100644 +--- a/core/iwasm/interpreter/wasm_interp_fast.c ++++ b/core/iwasm/interpreter/wasm_interp_fast.c +@@ -90,14 +90,14 @@ typedef float64 CellType_F64; + } while (0) + + #if WASM_ENABLE_INSTRUCTION_METERING != 0 +-#define CHECK_INSTRUCTION_LIMIT() \ +- if (instructions_left == 0) { \ +- wasm_set_exception(module, "instruction limit exceeded"); \ +- goto got_exception; \ +- } \ +- else if (instructions_left > 0) \ +- instructions_left--; +- ++#define CHECK_INSTRUCTION_LIMIT() \ ++ do { \ ++ --instructions_left; \ ++ if (instructions_left < 0) { \ ++ wasm_set_exception(module, "instruction limit exceeded"); \ ++ goto got_exception; \ ++ } \ ++ } while (0) + #else + #define CHECK_INSTRUCTION_LIMIT() (void)0 + #endif +@@ -1438,7 +1438,6 @@ wasm_interp_dump_op_count() + do { \ + const void *p_label_addr = *(void **)frame_ip; \ + frame_ip += sizeof(void *); \ +- CHECK_INSTRUCTION_LIMIT(); \ + goto *p_label_addr; \ + } while (0) + #else +@@ -1450,7 +1449,6 @@ wasm_interp_dump_op_count() + /* int32 relative offset was emitted in 64-bit target */ \ + p_label_addr = label_base + (int32)LOAD_U32_WITH_2U16S(frame_ip); \ + frame_ip += sizeof(int32); \ +- CHECK_INSTRUCTION_LIMIT(); \ + goto *p_label_addr; \ + } while (0) + #else +@@ -1461,17 +1459,18 @@ wasm_interp_dump_op_count() + /* uint32 label address was emitted in 32-bit target */ \ + p_label_addr = (void *)(uintptr_t)LOAD_U32_WITH_2U16S(frame_ip); \ + frame_ip += sizeof(int32); \ +- CHECK_INSTRUCTION_LIMIT(); \ + goto *p_label_addr; \ + } while (0) + #endif + #endif /* end of WASM_CPU_SUPPORTS_UNALIGNED_ADDR_ACCESS */ +-#define HANDLE_OP_END() FETCH_OPCODE_AND_DISPATCH() ++#define HANDLE_OP_END() CHECK_INSTRUCTION_LIMIT(); FETCH_OPCODE_AND_DISPATCH() + + #else /* else of WASM_ENABLE_LABELS_AS_VALUES */ + + #define HANDLE_OP(opcode) case opcode: +-#define HANDLE_OP_END() continue ++#define HANDLE_OP_END() \ ++ CHECK_INSTRUCTION_LIMIT(); \ ++ continue + + #endif /* end of WASM_ENABLE_LABELS_AS_VALUES */ + +@@ -1540,10 +1539,9 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, + uint8 opcode = 0, local_type, *global_addr; + + #if WASM_ENABLE_INSTRUCTION_METERING != 0 +- int instructions_left = -1; +- if (exec_env) { ++ int64 instructions_left = INT64_MAX; ++ if (exec_env) + instructions_left = exec_env->instructions_to_execute; +- } + #endif + #if !defined(OS_ENABLE_HW_BOUND_CHECK) \ + || WASM_CPU_SUPPORTS_UNALIGNED_ADDR_ACCESS == 0 +@@ -4012,7 +4010,15 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, + } + + /* constant instructions */ ++#ifdef ENABLE_FLOAT_POINT + HANDLE_OP(WASM_OP_F64_CONST) ++#else ++ HANDLE_OP(WASM_OP_F64_CONST) ++ { ++ wasm_set_exception(module, "opcode disabled"); ++ goto got_exception; ++ } ++#endif + HANDLE_OP(WASM_OP_I64_CONST) + { + uint8 *orig_ip = frame_ip; +@@ -4025,7 +4031,15 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, + HANDLE_OP_END(); + } + ++#ifdef ENABLE_FLOAT_POINT ++ HANDLE_OP(WASM_OP_F32_CONST) ++#else + HANDLE_OP(WASM_OP_F32_CONST) ++ { ++ wasm_set_exception(module, "opcode disabled"); ++ goto got_exception; ++ } ++#endif + HANDLE_OP(WASM_OP_I32_CONST) + { + uint8 *orig_ip = frame_ip; +@@ -4172,6 +4186,8 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, + HANDLE_OP_END(); + } + ++#ifdef ENABLE_FLOAT_POINT ++ + /* comparison instructions of f32 */ + HANDLE_OP(WASM_OP_F32_EQ) + { +@@ -4245,6 +4261,24 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, + DEF_OP_CMP(float64, F64, >=); + HANDLE_OP_END(); + } ++#else ++ HANDLE_OP(WASM_OP_F32_EQ) ++ HANDLE_OP(WASM_OP_F32_NE) ++ HANDLE_OP(WASM_OP_F32_LT) ++ HANDLE_OP(WASM_OP_F32_GT) ++ HANDLE_OP(WASM_OP_F32_LE) ++ HANDLE_OP(WASM_OP_F32_GE) ++ HANDLE_OP(WASM_OP_F64_EQ) ++ HANDLE_OP(WASM_OP_F64_NE) ++ HANDLE_OP(WASM_OP_F64_LT) ++ HANDLE_OP(WASM_OP_F64_GT) ++ HANDLE_OP(WASM_OP_F64_LE) ++ HANDLE_OP(WASM_OP_F64_GE) ++ { ++ wasm_set_exception(module, "opcode disabled"); ++ goto got_exception; ++ } ++#endif + + /* numeric instructions of i32 */ + HANDLE_OP(WASM_OP_I32_CLZ) +@@ -4573,6 +4607,8 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, + HANDLE_OP_END(); + } + ++#ifdef ENABLE_FLOAT_POINT ++ + /* numeric instructions of f32 */ + HANDLE_OP(WASM_OP_F32_ABS) + { +@@ -4784,6 +4820,43 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, + HANDLE_OP_END(); + } + ++#else ++ ++ HANDLE_OP(WASM_OP_F32_ABS) ++ HANDLE_OP(WASM_OP_F32_NEG) ++ HANDLE_OP(WASM_OP_F32_CEIL) ++ HANDLE_OP(WASM_OP_F32_FLOOR) ++ HANDLE_OP(WASM_OP_F32_TRUNC) ++ HANDLE_OP(WASM_OP_F32_NEAREST) ++ HANDLE_OP(WASM_OP_F32_SQRT) ++ HANDLE_OP(WASM_OP_F32_ADD) ++ HANDLE_OP(WASM_OP_F32_SUB) ++ HANDLE_OP(WASM_OP_F32_MUL) ++ HANDLE_OP(WASM_OP_F32_DIV) ++ HANDLE_OP(WASM_OP_F32_MIN) ++ HANDLE_OP(WASM_OP_F32_MAX) ++ HANDLE_OP(WASM_OP_F32_COPYSIGN) ++ HANDLE_OP(WASM_OP_F64_ABS) ++ HANDLE_OP(WASM_OP_F64_NEG) ++ HANDLE_OP(WASM_OP_F64_CEIL) ++ HANDLE_OP(WASM_OP_F64_FLOOR) ++ HANDLE_OP(WASM_OP_F64_TRUNC) ++ HANDLE_OP(WASM_OP_F64_NEAREST) ++ HANDLE_OP(WASM_OP_F64_SQRT) ++ HANDLE_OP(WASM_OP_F64_ADD) ++ HANDLE_OP(WASM_OP_F64_SUB) ++ HANDLE_OP(WASM_OP_F64_MUL) ++ HANDLE_OP(WASM_OP_F64_DIV) ++ HANDLE_OP(WASM_OP_F64_MIN) ++ HANDLE_OP(WASM_OP_F64_MAX) ++ HANDLE_OP(WASM_OP_F64_COPYSIGN) ++ { ++ wasm_set_exception(module, "opcode disabled"); ++ goto got_exception; ++ } ++ ++#endif //ENABLE_FLOAT_POINT ++ + /* conversions of i32 */ + HANDLE_OP(WASM_OP_I32_WRAP_I64) + { +@@ -4792,6 +4865,8 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, + HANDLE_OP_END(); + } + ++ ++#ifdef ENABLE_FLOAT_POINT + HANDLE_OP(WASM_OP_I32_TRUNC_S_F32) + { + /* We don't use INT32_MIN/INT32_MAX/UINT32_MIN/UINT32_MAX, +@@ -4821,6 +4896,19 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, + HANDLE_OP_END(); + } + ++#else ++ ++ HANDLE_OP(WASM_OP_I32_TRUNC_S_F32) ++ HANDLE_OP(WASM_OP_I32_TRUNC_U_F32) ++ HANDLE_OP(WASM_OP_I32_TRUNC_S_F64) ++ HANDLE_OP(WASM_OP_I32_TRUNC_U_F64) ++ { ++ wasm_set_exception(module, "opcode disabled"); ++ goto got_exception; ++ } ++ ++#endif //ENABLE_FLOAT_POINT ++ + /* conversions of i64 */ + HANDLE_OP(WASM_OP_I64_EXTEND_S_I32) + { +@@ -4834,6 +4922,8 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, + HANDLE_OP_END(); + } + ++#ifdef ENABLE_FLOAT_POINT ++ + HANDLE_OP(WASM_OP_I64_TRUNC_S_F32) + { + DEF_OP_TRUNC_F32(-9223373136366403584.0f, +@@ -4937,6 +5027,32 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, + HANDLE_OP_END(); + } + ++#else ++ HANDLE_OP(WASM_OP_I64_TRUNC_S_F32) ++ HANDLE_OP(WASM_OP_I64_TRUNC_U_F32) ++ HANDLE_OP(WASM_OP_I64_TRUNC_S_F64) ++ HANDLE_OP(WASM_OP_I64_TRUNC_U_F64) ++ HANDLE_OP(WASM_OP_F32_CONVERT_S_I32) ++ HANDLE_OP(WASM_OP_F32_CONVERT_U_I32) ++ HANDLE_OP(WASM_OP_F32_CONVERT_S_I64) ++ HANDLE_OP(WASM_OP_F32_CONVERT_U_I64) ++ HANDLE_OP(WASM_OP_F32_DEMOTE_F64) ++ HANDLE_OP(WASM_OP_F64_CONVERT_S_I32) ++ HANDLE_OP(WASM_OP_F64_CONVERT_U_I32) ++ HANDLE_OP(WASM_OP_F64_CONVERT_S_I64) ++ HANDLE_OP(WASM_OP_F64_CONVERT_U_I64) ++ HANDLE_OP(WASM_OP_F64_PROMOTE_F32) ++ HANDLE_OP(WASM_OP_I32_REINTERPRET_F32) ++ HANDLE_OP(WASM_OP_F32_REINTERPRET_I32) ++ HANDLE_OP(WASM_OP_I64_REINTERPRET_F64) ++ HANDLE_OP(WASM_OP_F64_REINTERPRET_I64) ++ { ++ wasm_set_exception(module, "opcode disabled"); ++ goto got_exception; ++ } ++ ++#endif //ENABLE_FLOAT_POINT ++ + HANDLE_OP(EXT_OP_COPY_STACK_TOP) + { + addr1 = GET_OFFSET(); +@@ -5108,6 +5224,8 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, + { + GET_OPCODE(); + switch (opcode) { ++ ++#ifdef ENABLE_FLOAT_POINT + case WASM_OP_I32_TRUNC_SAT_S_F32: + DEF_OP_TRUNC_SAT_F32(-2147483904.0f, 2147483648.0f, + true, true); +@@ -5140,6 +5258,9 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, + DEF_OP_TRUNC_SAT_F64(-1.0, 18446744073709551616.0, + false, false); + break; ++ ++#endif ++ + #if WASM_ENABLE_BULK_MEMORY != 0 + case WASM_OP_MEMORY_INIT: + { +@@ -7672,6 +7793,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, + { + wasm_interp_call_func_native(module, exec_env, cur_func, + prev_frame); ++ instructions_left -= cur_func->gas; + } + + #if WASM_ENABLE_TAIL_CALL != 0 || WASM_ENABLE_GC != 0 +@@ -7784,6 +7906,11 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, + FREE_FRAME(exec_env, frame); + wasm_exec_env_set_cur_frame(exec_env, (WASMRuntimeFrame *)prev_frame); + ++#if WASM_ENABLE_INSTRUCTION_METERING != 0 ++ if (exec_env) ++ exec_env->instructions_to_execute = instructions_left; ++#endif ++ + if (!prev_frame->ip) + /* Called from native. */ + return; +@@ -7812,6 +7939,10 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, + + got_exception: + SYNC_ALL_TO_FRAME(); ++#if WASM_ENABLE_INSTRUCTION_METERING != 0 ++ if (exec_env) ++ exec_env->instructions_to_execute = instructions_left; ++#endif + return; + + #if WASM_ENABLE_LABELS_AS_VALUES == 0 +diff --git a/core/iwasm/interpreter/wasm_mini_loader.c b/core/iwasm/interpreter/wasm_mini_loader.c +index 771538a1..d6e6a6b8 100644 +--- a/core/iwasm/interpreter/wasm_mini_loader.c ++++ b/core/iwasm/interpreter/wasm_mini_loader.c +@@ -805,6 +805,7 @@ load_function_import(const uint8 **p_buf, const uint8 *buf_end, + const char *linked_signature = NULL; + void *linked_attachment = NULL; + bool linked_call_conv_raw = false; ++ uint32_t gas = 0; + + read_leb_uint32(p, p_end, declare_type_index); + *p_buf = p; +@@ -816,7 +817,7 @@ load_function_import(const uint8 **p_buf, const uint8 *buf_end, + /* check built-in modules */ + linked_func = wasm_native_resolve_symbol( + sub_module_name, function_name, declare_func_type, &linked_signature, +- &linked_attachment, &linked_call_conv_raw); ++ &linked_attachment, &gas, &linked_call_conv_raw); + + function->module_name = (char *)sub_module_name; + function->field_name = (char *)function_name; +@@ -825,6 +826,7 @@ load_function_import(const uint8 **p_buf, const uint8 *buf_end, + function->signature = linked_signature; + function->attachment = linked_attachment; + function->call_conv_raw = linked_call_conv_raw; ++ function->gas = gas; + return true; + } + +diff --git a/core/iwasm/interpreter/wasm_runtime.c b/core/iwasm/interpreter/wasm_runtime.c +index b4aa483d..2d74e469 100644 +--- a/core/iwasm/interpreter/wasm_runtime.c ++++ b/core/iwasm/interpreter/wasm_runtime.c +@@ -168,7 +168,7 @@ wasm_resolve_import_func(const WASMModule *module, WASMFunctionImport *function) + #endif + function->func_ptr_linked = wasm_native_resolve_symbol( + function->module_name, function->field_name, function->func_type, +- &function->signature, &function->attachment, &function->call_conv_raw); ++ &function->signature, &function->attachment, &function->gas, &function->call_conv_raw); + + if (function->func_ptr_linked) { + return true; +@@ -820,6 +820,7 @@ functions_instantiate(const WASMModule *module, WASMModuleInstance *module_inst, + function->param_count = + (uint16)function->u.func_import->func_type->param_count; + function->param_types = function->u.func_import->func_type->types; ++ function->gas = import->u.function.gas; + function->local_cell_num = 0; + function->local_count = 0; + function->local_types = NULL; +diff --git a/core/iwasm/interpreter/wasm_runtime.h b/core/iwasm/interpreter/wasm_runtime.h +index 16c670f0..5ddac567 100644 +--- a/core/iwasm/interpreter/wasm_runtime.h ++++ b/core/iwasm/interpreter/wasm_runtime.h +@@ -237,6 +237,10 @@ struct WASMFunctionInstance { + WASMFunctionImport *func_import; + WASMFunction *func; + } u; ++ ++ // gas cost for import func ++ uint32 gas; ++ + #if WASM_ENABLE_MULTI_MODULE != 0 + WASMModuleInstance *import_module_inst; + WASMFunctionInstance *import_func_inst; +diff --git a/core/iwasm/libraries/libc-builtin/libc_builtin_wrapper.c b/core/iwasm/libraries/libc-builtin/libc_builtin_wrapper.c +index a68c0749..cafb6915 100644 +--- a/core/iwasm/libraries/libc-builtin/libc_builtin_wrapper.c ++++ b/core/iwasm/libraries/libc-builtin/libc_builtin_wrapper.c +@@ -1038,16 +1038,16 @@ print_f64_wrapper(wasm_exec_env_t exec_env, double f64) + + /* clang-format off */ + #define REG_NATIVE_FUNC(func_name, signature) \ +- { #func_name, func_name##_wrapper, signature, NULL } ++ { #func_name, func_name##_wrapper, signature, NULL, 0 } + /* clang-format on */ + + static NativeSymbol native_symbols_libc_builtin[] = { + REG_NATIVE_FUNC(printf, "($*)i"), + REG_NATIVE_FUNC(sprintf, "($$*)i"), + REG_NATIVE_FUNC(snprintf, "(*~$*)i"), +- { "vprintf", printf_wrapper, "($*)i", NULL }, +- { "vsprintf", sprintf_wrapper, "($$*)i", NULL }, +- { "vsnprintf", snprintf_wrapper, "(*~$*)i", NULL }, ++ { "vprintf", printf_wrapper, "($*)i", NULL, 0 }, ++ { "vsprintf", sprintf_wrapper, "($$*)i", NULL, 0 }, ++ { "vsnprintf", snprintf_wrapper, "(*~$*)i", NULL, 0 }, + REG_NATIVE_FUNC(puts, "($)i"), + REG_NATIVE_FUNC(putchar, "(i)i"), + REG_NATIVE_FUNC(memcmp, "(**~)i"), +diff --git a/core/iwasm/libraries/libc-wasi/libc_wasi_wrapper.c b/core/iwasm/libraries/libc-wasi/libc_wasi_wrapper.c +index f7dfea0b..c01e80a9 100644 +--- a/core/iwasm/libraries/libc-wasi/libc_wasi_wrapper.c ++++ b/core/iwasm/libraries/libc-wasi/libc_wasi_wrapper.c +@@ -2269,7 +2269,7 @@ wasi_sched_yield(wasm_exec_env_t exec_env) + + /* clang-format off */ + #define REG_NATIVE_FUNC(func_name, signature) \ +- { #func_name, wasi_##func_name, signature, NULL } ++ { #func_name, wasi_##func_name, signature, NULL, 0 } + /* clang-format on */ + + static NativeSymbol native_symbols_libc_wasi[] = { +diff --git a/core/shared/platform/include/platform_wasi_types.h b/core/shared/platform/include/platform_wasi_types.h +index ac1a95ea..e23b500e 100644 +--- a/core/shared/platform/include/platform_wasi_types.h ++++ b/core/shared/platform/include/platform_wasi_types.h +@@ -36,7 +36,11 @@ extern "C" { + #if WASM_ENABLE_UVWASI != 0 || WASM_ENABLE_LIBC_WASI == 0 + #define assert_wasi_layout(expr, message) /* nothing */ + #else +-#define assert_wasi_layout(expr, message) _Static_assert(expr, message) ++ #ifndef _MSC_VER ++ #define assert_wasi_layout(expr, message) _Static_assert(expr, message) ++ #else ++ #define assert_wasi_layout(expr, message) static_assert(expr, message) ++ #endif + #endif + + assert_wasi_layout(_Alignof(int8_t) == 1, "non-wasi data layout"); From dbc9dd5bfc15adc21ed8a75340b8734c8e9b3945 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 10 Sep 2025 14:56:08 -0400 Subject: [PATCH 002/137] Add WAMR integration code --- src/xrpld/app/wasm/HostFunc.h | 59 ++ src/xrpld/app/wasm/ParamsHelper.h | 272 +++++++ src/xrpld/app/wasm/WamrVM.h | 327 ++++++++ src/xrpld/app/wasm/WasmVM.h | 111 +++ src/xrpld/app/wasm/detail/WamrVM.cpp | 1070 ++++++++++++++++++++++++++ src/xrpld/app/wasm/detail/WasmVM.cpp | 164 ++++ 6 files changed, 2003 insertions(+) create mode 100644 src/xrpld/app/wasm/HostFunc.h create mode 100644 src/xrpld/app/wasm/ParamsHelper.h create mode 100644 src/xrpld/app/wasm/WamrVM.h create mode 100644 src/xrpld/app/wasm/WasmVM.h create mode 100644 src/xrpld/app/wasm/detail/WamrVM.cpp create mode 100644 src/xrpld/app/wasm/detail/WasmVM.cpp diff --git a/src/xrpld/app/wasm/HostFunc.h b/src/xrpld/app/wasm/HostFunc.h new file mode 100644 index 0000000000..b7ea5c7e85 --- /dev/null +++ b/src/xrpld/app/wasm/HostFunc.h @@ -0,0 +1,59 @@ +//------------------------------------------------------------------------------ +/* + This file is part of rippled: https://github.com/ripple/rippled + Copyright (c) 2025 Ripple Labs Inc. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ +//============================================================================== + +#pragma once + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace ripple { + +struct HostFunctions +{ + // LCOV_EXCL_START + virtual void + setRT(void const*) + { + } + + virtual void const* + getRT() const + { + return nullptr; + } + + virtual beast::Journal + getJournal() + { + return beast::Journal{beast::Journal::getNullSink()}; + } + + virtual ~HostFunctions() = default; + // LCOV_EXCL_STOP +}; + +} // namespace ripple diff --git a/src/xrpld/app/wasm/ParamsHelper.h b/src/xrpld/app/wasm/ParamsHelper.h new file mode 100644 index 0000000000..8bdf11e618 --- /dev/null +++ b/src/xrpld/app/wasm/ParamsHelper.h @@ -0,0 +1,272 @@ +//------------------------------------------------------------------------------ +/* + This file is part of rippled: https://github.com/ripple/rippled + Copyright (c) 2025 Ripple Labs Inc. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ +//============================================================================== +#pragma once + +#include + +#include +#include +#include +#include + +#include +#include +#include + +namespace bft = boost::function_types; + +namespace ripple { + +using Bytes = std::vector; +using Hash = ripple::uint256; + +struct wmem +{ + std::uint8_t* p = nullptr; + std::size_t s = 0; +}; + +template +struct WasmResult +{ + T result; + int64_t cost; +}; +typedef WasmResult EscrowResult; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +enum WasmTypes { WT_I32, WT_I64, WT_F32, WT_F64, WT_U8V }; + +struct WasmImportFunc +{ + std::string name; + std::optional result; + std::vector params; + void* udata = nullptr; + // wasm_func_callback_with_env_t + void* wrap = nullptr; + uint32_t gas = 0; +}; + +#define WASM_IMPORT_FUNC(v, f, ...) \ + WasmImpFunc( \ + v, #f, reinterpret_cast(&f##_wrap), ##__VA_ARGS__) + +#define WASM_IMPORT_FUNC2(v, f, n, ...) \ + WasmImpFunc( \ + v, n, reinterpret_cast(&f##_wrap), ##__VA_ARGS__) + +template +void +WasmImpArgs(WasmImportFunc& e) +{ + if constexpr (N < C) + { + using at = typename boost::mpl::at_c::type; + if constexpr (std::is_pointer_v) + e.params.push_back(WT_I32); + else if constexpr (std::is_same_v) + e.params.push_back(WT_I32); + else if constexpr (std::is_same_v) + e.params.push_back(WT_I64); + else if constexpr (std::is_same_v) + e.params.push_back(WT_F32); + else if constexpr (std::is_same_v) + e.params.push_back(WT_F64); + else + static_assert(std::is_pointer_v, "Unsupported argument type"); + + return WasmImpArgs(e); + } + return; +} + +template +void +WasmImpRet(WasmImportFunc& e) +{ + if constexpr (std::is_pointer_v) + e.result = WT_I32; + else if constexpr (std::is_same_v) + e.result = WT_I32; + else if constexpr (std::is_same_v) + e.result = WT_I64; + else if constexpr (std::is_same_v) + e.result = WT_F32; + else if constexpr (std::is_same_v) + e.result = WT_F64; + else if constexpr (std::is_void_v) + e.result.reset(); +#if (defined(__GNUC__) && (__GNUC__ >= 14)) || \ + ((defined(__clang_major__)) && (__clang_major__ >= 18)) + else + static_assert(false, "Unsupported return type"); +#endif +} + +template +void +WasmImpFuncHelper(WasmImportFunc& e) +{ + using rt = typename bft::result_type::type; + using pt = typename bft::parameter_types::type; + // typename boost::mpl::at_c::type + + WasmImpRet(e); + WasmImpArgs<0, bft::function_arity::value, pt>(e); + // WasmImpWrap(e, std::forward(f)); +} + +template +void +WasmImpFunc( + std::vector& v, + std::string_view imp_name, + void* f_wrap, + void* data = nullptr, + uint32_t gas = 0) +{ + WasmImportFunc e; + e.name = imp_name; + e.udata = data; + e.wrap = f_wrap; + e.gas = gas; + WasmImpFuncHelper(e); + v.push_back(std::move(e)); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +struct WasmParamVec +{ + std::uint8_t const* d = nullptr; + std::int32_t sz = 0; +}; + +struct WasmParam +{ + WasmTypes type = WT_I32; + union + { + std::int32_t i32; + std::int64_t i64 = 0; + float f32; + double f64; + WasmParamVec u8v; + } of; +}; + +template +inline void +wasmParamsHlp(std::vector& v, std::int32_t p, Types&&... args) +{ + v.push_back({.type = WT_I32, .of = {.i32 = p}}); + wasmParamsHlp(v, std::forward(args)...); +} + +template +inline void +wasmParamsHlp(std::vector& v, std::int64_t p, Types&&... args) +{ + v.push_back({.type = WT_I64, .of = {.i64 = p}}); + wasmParamsHlp(v, std::forward(args)...); +} + +template +inline void +wasmParamsHlp(std::vector& v, float p, Types&&... args) +{ + v.push_back({.type = WT_F32, .of = {.f32 = p}}); + wasmParamsHlp(v, std::forward(args)...); +} + +template +inline void +wasmParamsHlp(std::vector& v, double p, Types&&... args) +{ + v.push_back({.type = WT_F64, .of = {.f64 = p}}); + wasmParamsHlp(v, std::forward(args)...); +} + +template +inline void +wasmParamsHlp( + std::vector& v, + std::uint8_t const* dt, + std::int32_t sz, + Types&&... args) +{ + v.push_back({.type = WT_U8V, .of = {.u8v = {.d = dt, .sz = sz}}}); + wasmParamsHlp(v, std::forward(args)...); +} + +template +inline void +wasmParamsHlp(std::vector& v, Bytes const& p, Types&&... args) +{ + wasmParamsHlp( + v, + p.data(), + static_cast(p.size()), + std::forward(args)...); +} + +template +inline void +wasmParamsHlp( + std::vector& v, + std::string_view const& p, + Types&&... args) +{ + wasmParamsHlp( + v, + reinterpret_cast(p.data()), + static_cast(p.size()), + std::forward(args)...); +} + +template +inline void +wasmParamsHlp(std::vector& v, std::string const& p, Types&&... args) +{ + wasmParamsHlp( + v, + reinterpret_cast(p.c_str()), + static_cast(p.size()), + std::forward(args)...); +} + +inline void +wasmParamsHlp(std::vector& v) +{ + return; +} + +template +inline std::vector +wasmParams(Types&&... args) +{ + std::vector v; + v.reserve(sizeof...(args)); + wasmParamsHlp(v, std::forward(args)...); + return v; +} + +} // namespace ripple diff --git a/src/xrpld/app/wasm/WamrVM.h b/src/xrpld/app/wasm/WamrVM.h new file mode 100644 index 0000000000..a32257feb6 --- /dev/null +++ b/src/xrpld/app/wasm/WamrVM.h @@ -0,0 +1,327 @@ +//------------------------------------------------------------------------------ +/* + This file is part of rippled: https://github.com/ripple/rippled + Copyright (c) 2023 Ripple Labs Inc. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ +//============================================================================== +#pragma once + +#include + +#include +#include + +namespace ripple { + +struct WamrResult +{ + wasm_val_vec_t r; + bool f; // failure flag + + WamrResult(unsigned N = 0) : r{0, nullptr, 0, 0, nullptr}, f(false) + { + if (N) + wasm_val_vec_new_uninitialized(&r, N); + } + + ~WamrResult() + { + if (r.size) + wasm_val_vec_delete(&r); + } + + WamrResult(WamrResult const&) = delete; + WamrResult& + operator=(WamrResult const&) = delete; + + WamrResult(WamrResult&& o) + { + *this = std::move(o); + } + + WamrResult& + operator=(WamrResult&& o) + { + r = o.r; + o.r = {0, nullptr, 0, 0, nullptr}; + f = o.f; + o.f = false; + return *this; + } + // operator wasm_val_vec_t &() {return r;} +}; + +using ModulePtr = std::unique_ptr; +using InstancePtr = + std::unique_ptr; + +using FuncInfo = std::pair; + +struct InstanceWrapper +{ + wasm_extern_vec_t exports_; + InstancePtr instance_; + wasm_exec_env_t execEnv_ = nullptr; + beast::Journal j_ = beast::Journal(beast::Journal::getNullSink()); + +private: + static InstancePtr + init( + wasm_store_t* s, + wasm_module_t* m, + int32_t maxPages, + wasm_extern_vec_t* expt, + wasm_extern_vec_t const& imports, + beast::Journal j); + +public: + InstanceWrapper(); + + InstanceWrapper(InstanceWrapper&& o); + + InstanceWrapper& + operator=(InstanceWrapper&& o); + + InstanceWrapper( + wasm_store_t* s, + wasm_module_t* m, + int32_t maxPages, + int64_t gas, + wasm_extern_vec_t const& imports, + beast::Journal j); + + ~InstanceWrapper(); + + operator bool() const; + + FuncInfo + getFunc( + std::string_view funcName, + wasm_exporttype_vec_t const& export_types) const; + + wmem + getMem() const; + + std::int64_t + getGas() const; +}; + +struct ModuleWrapper +{ + ModulePtr module_; + InstanceWrapper instanceWrap_; + wasm_exporttype_vec_t exportTypes_; + beast::Journal j_ = beast::Journal(beast::Journal::getNullSink()); + +private: + static ModulePtr + init(wasm_store_t* s, Bytes const& wasmBin, beast::Journal j); + +public: + ModuleWrapper(); + ModuleWrapper(ModuleWrapper&& o); + ModuleWrapper& + operator=(ModuleWrapper&& o); + ModuleWrapper( + wasm_store_t* s, + Bytes const& wasmBin, + bool instantiate, + int32_t maxPages, + int64_t gas, + std::vector const& imports, + beast::Journal j); + ~ModuleWrapper(); + + operator bool() const; + + FuncInfo + getFunc(std::string_view funcName) const; + wmem + getMem() const; + + InstanceWrapper const& + getInstance(int i = 0) const; + + int + addInstance( + wasm_store_t* s, + int32_t maxPages, + int64_t gas, + wasm_extern_vec_t const& imports = WASM_EMPTY_VEC); + + std::int64_t + getGas(); + +private: + static void + makeImpParams(wasm_valtype_vec_t& v, WasmImportFunc const& imp); + static void + makeImpReturn(wasm_valtype_vec_t& v, WasmImportFunc const& imp); + wasm_extern_vec_t + buildImports(wasm_store_t* s, std::vector const& imports); +}; + +class WamrEngine +{ + std::unique_ptr engine_; + std::unique_ptr store_; + std::unique_ptr moduleWrap_; + std::int32_t defMaxPages_ = -1; + beast::Journal j_ = beast::Journal(beast::Journal::getNullSink()); + + std::mutex m_; // 1 instance mutex + +public: + WamrEngine(); + ~WamrEngine() = default; + + Expected, TER> + run(Bytes const& wasmCode, + std::string_view funcName, + std::vector const& params, + std::vector const& imports, + HostFunctions* hfs, + int64_t gas, + beast::Journal j); + + NotTEC + check( + Bytes const& wasmCode, + std::string_view funcName, + std::vector const& params, + std::vector const& imports, + beast::Journal j); + + std::int32_t + initMaxPages(std::int32_t def); + + std::int64_t + getGas(); + + // Host functions helper functionality + wasm_trap_t* + newTrap(std::string_view msg); + + beast::Journal + getJournal() const; + +private: + InstanceWrapper const& + getRT(int m = 0, int i = 0); + + wmem + getMem() const; + + int32_t + allocate(int32_t size); + + Expected, TER> + runHlp( + Bytes const& wasmCode, + std::string_view funcName, + std::vector const& params, + std::vector const& imports, + HostFunctions* hfs, + int64_t gas); + + NotTEC + checkHlp( + Bytes const& wasmCode, + std::string_view funcName, + std::vector const& params, + std::vector const& imports); + + int + addModule( + Bytes const& wasmCode, + bool instantiate, + int64_t gas, + std::vector const& imports); + void + clearModules(); + + // int addInstance(); + + int32_t + runFunc(std::string_view const funcName, int32_t p); + + int32_t + makeModule( + Bytes const& wasmCode, + wasm_extern_vec_t const& imports = WASM_EMPTY_VEC); + + FuncInfo + getFunc(std::string_view funcName); + + std::vector + convertParams(std::vector const& params); + + static int + compareParamTypes( + wasm_valtype_vec_t const* ftp, + std::vector const& p); + + static void + add_param(std::vector& in, int32_t p); + static void + add_param(std::vector& in, int64_t p); + + template + inline WamrResult + call(std::string_view func, Types&&... args); + + template + inline WamrResult + call(FuncInfo const& f, Types&&... args); + + template + inline WamrResult + call(FuncInfo const& f, std::vector& in); + + template + inline WamrResult + call( + FuncInfo const& f, + std::vector& in, + std::int32_t p, + Types&&... args); + + template + inline WamrResult + call( + FuncInfo const& f, + std::vector& in, + std::int64_t p, + Types&&... args); + + template + inline WamrResult + call( + FuncInfo const& f, + std::vector& in, + uint8_t const* d, + std::size_t sz, + Types&&... args); + + template + inline WamrResult + call( + FuncInfo const& f, + std::vector& in, + Bytes const& p, + Types&&... args); +}; + +} // namespace ripple diff --git a/src/xrpld/app/wasm/WasmVM.h b/src/xrpld/app/wasm/WasmVM.h new file mode 100644 index 0000000000..32eb239f60 --- /dev/null +++ b/src/xrpld/app/wasm/WasmVM.h @@ -0,0 +1,111 @@ +//------------------------------------------------------------------------------ +/* + This file is part of rippled: https://github.com/ripple/rippled + Copyright (c) 2025 Ripple Labs Inc. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ +//============================================================================== +#pragma once + +#include + +#include + +namespace ripple { + +static std::string_view const W_ENV = "env"; +static std::string_view const W_HOST_LIB = "host_lib"; +static std::string_view const W_MEM = "memory"; +static std::string_view const W_STORE = "store"; +static std::string_view const W_LOAD = "load"; +static std::string_view const W_SIZE = "size"; +static std::string_view const W_ALLOC = "allocate"; +static std::string_view const W_DEALLOC = "deallocate"; +static std::string_view const W_PROC_EXIT = "proc_exit"; + +static std::string_view const ESCROW_FUNCTION_NAME = "finish"; + +uint32_t const MAX_PAGES = 128; // 8MB = 64KB*128 + +class WamrEngine; +class WasmEngine +{ + std::unique_ptr const impl; + + WasmEngine(); + + WasmEngine(WasmEngine const&) = delete; + WasmEngine(WasmEngine&&) = delete; + WasmEngine& + operator=(WasmEngine const&) = delete; + WasmEngine& + operator=(WasmEngine&&) = delete; + +public: + ~WasmEngine() = default; + + static WasmEngine& + instance(); + + Expected, TER> + run(Bytes const& wasmCode, + std::string_view funcName = {}, + std::vector const& params = {}, + std::vector const& imports = {}, + HostFunctions* hfs = nullptr, + int64_t gasLimit = -1, + beast::Journal j = beast::Journal{beast::Journal::getNullSink()}); + + NotTEC + check( + Bytes const& wasmCode, + std::string_view funcName, + std::vector const& params = {}, + std::vector const& imports = {}, + beast::Journal j = beast::Journal{beast::Journal::getNullSink()}); + + std::int32_t + initMaxPages(std::int32_t def); + + // Host functions helper functionality + void* + newTrap(std::string_view msg = {}); + + beast::Journal + getJournal() const; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +std::vector +createWasmImport(HostFunctions* hfs); + +Expected +runEscrowWasm( + Bytes const& wasmCode, + std::string_view funcName = ESCROW_FUNCTION_NAME, + std::vector const& params = {}, + HostFunctions* hfs = nullptr, + int64_t gasLimit = -1, + beast::Journal j = beast::Journal(beast::Journal::getNullSink())); + +NotTEC +preflightEscrowWasm( + Bytes const& wasmCode, + std::string_view funcName = ESCROW_FUNCTION_NAME, + std::vector const& params = {}, + HostFunctions* hfs = nullptr, + beast::Journal j = beast::Journal(beast::Journal::getNullSink())); + +} // namespace ripple diff --git a/src/xrpld/app/wasm/detail/WamrVM.cpp b/src/xrpld/app/wasm/detail/WamrVM.cpp new file mode 100644 index 0000000000..e47a618f12 --- /dev/null +++ b/src/xrpld/app/wasm/detail/WamrVM.cpp @@ -0,0 +1,1070 @@ +//------------------------------------------------------------------------------ +/* + This file is part of rippled: https://github.com/ripple/rippled + Copyright (c) 2020 Ripple Labs Inc. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ +//============================================================================== + +#include + +#include + +#include +#include + +#ifdef _DEBUG +// #define DEBUG_OUTPUT 1 +// #define DEBUG_OUTPUT_WAMR 1 +#endif + +// #define SHOW_CALL_TIME 1 + +namespace ripple { + +namespace { + +// LCOV_EXCL_START +static log_level_t +getLogLevel(beast::severities::Severity severity) +{ + using namespace beast::severities; + switch (severity) + { + case kTrace: + return WASM_LOG_LEVEL_VERBOSE; + case kDebug: + return WASM_LOG_LEVEL_DEBUG; + case kInfo: + case kWarning: + return WASM_LOG_LEVEL_WARNING; + case kError: + return WASM_LOG_LEVEL_ERROR; + default: + UNREACHABLE("WAMR invalid severity"); + [[fallthrough]]; + case kFatal: + case kNone: + break; + } + + return WASM_LOG_LEVEL_FATAL; +} + +static beast::severities::Severity +getLogLevel(uint32_t severity) +{ + using namespace beast::severities; + switch (severity) + { + case WASM_LOG_LEVEL_VERBOSE: + return kTrace; + case WASM_LOG_LEVEL_DEBUG: + return kDebug; + case WASM_LOG_LEVEL_WARNING: + return kWarning; + case WASM_LOG_LEVEL_ERROR: + return kError; + default: + UNREACHABLE("WAMR invalid reverse severity"); + [[fallthrough]]; + case WASM_LOG_LEVEL_FATAL: + break; + } + + return kFatal; +} + +// This function is called from WAMR to log messages. +extern "C" void +wamr_log_to_rippled( + uint32_t logLevel, + char const* file, + int line, + char const* fmt, + ...) +{ + beast::Journal j = WasmEngine::instance().getJournal(); + + std::ostringstream oss; + + // Format the variadic args + if (file) + { + oss << "WAMR (" << file << ":" << line << "): "; + } + else + { + oss << "WAMR: "; + } + + va_list args; + va_start(args, fmt); + + char formatted[4096]; + vsnprintf(formatted, sizeof(formatted), fmt, args); + formatted[sizeof(formatted) - 1] = '\0'; + + va_end(args); + + oss << formatted; + + j.stream(getLogLevel(logLevel)) << oss.str(); +#ifdef DEBUG_OUTPUT_WAMR + std::cerr << oss.str() << std::endl; +#endif +} + +void +print_wasm_error(std::string_view msg, wasm_trap_t* trap, beast::Journal jlog) +{ +#ifdef DEBUG_OUTPUT + auto& j = std::cerr; +#else + auto j = jlog.warn(); +#endif + + wasm_byte_vec_t error_message WASM_EMPTY_VEC; + + if (trap) + wasm_trap_message(trap, &error_message); + + if (error_message.num_elems) + { + error_message.data[error_message.num_elems - 1] = 0; // just in case + j << "WAMR Error: " << msg << ", " << error_message.data; + } + else + j << "WAMR Error: " << msg; + + if (error_message.size) + wasm_byte_vec_delete(&error_message); + wasm_trap_delete(trap); + +#ifdef DEBUG_OUTPUT + j << std::endl; +#endif +} +// LCOV_EXCL_STOP + +} // namespace + +InstancePtr +InstanceWrapper::init( + wasm_store_t* s, + wasm_module_t* m, + int32_t maxPages, + wasm_extern_vec_t* expt, + wasm_extern_vec_t const& imports, + beast::Journal j) +{ + wasm_trap_t* trap = nullptr; + InstantiationArgs inst_args{ + 128 * 1024, + 256 * 1024, + static_cast(maxPages > 0 ? maxPages : 0)}; + + InstancePtr mi = InstancePtr( + wasm_instance_new_with_args_ex(s, m, &imports, &trap, &inst_args), + &wasm_instance_delete); + + if (!mi || trap) + { + print_wasm_error("can't create instance", trap, j); + throw std::runtime_error("can't create instance"); + } + wasm_instance_exports(mi.get(), expt); + return mi; +} + +InstanceWrapper::InstanceWrapper() + : exports_{0, nullptr, 0, 0, nullptr} + , instance_(nullptr, &wasm_instance_delete) +{ +} + +InstanceWrapper::InstanceWrapper(InstanceWrapper&& o) + : exports_{0, nullptr, 0, 0, nullptr} + , instance_(nullptr, &wasm_instance_delete) +{ + *this = std::move(o); +} + +InstanceWrapper::InstanceWrapper( + wasm_store_t* s, + wasm_module_t* m, + int32_t maxPages, + int64_t gas, + wasm_extern_vec_t const& imports, + beast::Journal j) + : exports_ WASM_EMPTY_VEC + , instance_(init(s, m, maxPages, &exports_, imports, j)) + , execEnv_(wasm_instance_exec_env(instance_.get())) + , j_(j) +{ + wasm_runtime_set_instruction_count_limit(execEnv_, gas); +} + +InstanceWrapper::~InstanceWrapper() +{ + if (exports_.size) + wasm_extern_vec_delete(&exports_); +} + +InstanceWrapper& +InstanceWrapper::operator=(InstanceWrapper&& o) +{ + if (this == &o) + return *this; + + if (exports_.size) + wasm_extern_vec_delete(&exports_); + exports_ = o.exports_; + o.exports_ = {0, nullptr, 0, 0, nullptr}; + + instance_ = std::move(o.instance_); + execEnv_ = o.execEnv_; + o.execEnv_ = nullptr; + + j_ = o.j_; + + return *this; +} + +InstanceWrapper::operator bool() const +{ + return static_cast(instance_); +} + +FuncInfo +InstanceWrapper::getFunc( + std::string_view funcName, + wasm_exporttype_vec_t const& export_types) const +{ + wasm_func_t* f = nullptr; + wasm_functype_t* ft = nullptr; + + if (!instance_) + throw std::runtime_error("no instance"); + + if (!export_types.num_elems) + throw std::runtime_error("no export"); + if (export_types.num_elems != exports_.num_elems) + throw std::runtime_error("invalid export"); + + for (unsigned i = 0; i < export_types.num_elems; ++i) + { + auto const* exp_type(export_types.data[i]); + + wasm_name_t const* name = wasm_exporttype_name(exp_type); + wasm_externtype_t const* exn_type = wasm_exporttype_type(exp_type); + if (wasm_externtype_kind(exn_type) == WASM_EXTERN_FUNC) + { + if (funcName == std::string_view(name->data, name->size - 1)) + { + auto* exn(exports_.data[i]); + if (wasm_extern_kind(exn) != WASM_EXTERN_FUNC) + throw std::runtime_error("invalid export"); + + ft = wasm_externtype_as_functype( + const_cast(exn_type)); + f = wasm_extern_as_func(exn); + break; + } + } + } + + if (!f || !ft) + throw std::runtime_error( + "can't find function <" + std::string(funcName) + ">"); + + return {f, ft}; +} + +wmem +InstanceWrapper::getMem() const +{ + if (!instance_) + throw std::runtime_error("no instance"); + + wasm_memory_t* mem = nullptr; + for (unsigned i = 0; i < exports_.num_elems; ++i) + { + auto* e(exports_.data[i]); + if (wasm_extern_kind(e) == WASM_EXTERN_MEMORY) + { + mem = wasm_extern_as_memory(e); + break; + } + } + + if (!mem) + throw std::runtime_error("no memory exported"); + + return { + reinterpret_cast(wasm_memory_data(mem)), + wasm_memory_data_size(mem)}; +} + +std::int64_t +InstanceWrapper::getGas() const +{ + return execEnv_ ? wasm_runtime_get_instruction_count_limit(execEnv_) : 0; +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +ModulePtr +ModuleWrapper::init(wasm_store_t* s, Bytes const& wasmBin, beast::Journal j) +{ + wasm_byte_vec_t const code{ + wasmBin.size(), + (char*)(wasmBin.data()), + wasmBin.size(), + sizeof(std::remove_reference_t::value_type), + nullptr}; + ModulePtr m = ModulePtr(wasm_module_new(s, &code), &wasm_module_delete); + if (!m) + throw std::runtime_error("can't create module"); + + return m; +} + +ModuleWrapper::ModuleWrapper() + : module_(nullptr, &wasm_module_delete) + , exportTypes_{0, nullptr, 0, 0, nullptr} +{ +} + +ModuleWrapper::ModuleWrapper(ModuleWrapper&& o) + : module_(nullptr, &wasm_module_delete) + , exportTypes_{0, nullptr, 0, 0, nullptr} +{ + *this = std::move(o); +} + +ModuleWrapper::ModuleWrapper( + wasm_store_t* s, + Bytes const& wasmBin, + bool instantiate, + int32_t maxPages, + int64_t gas, + std::vector const& imports, + beast::Journal j) + : module_(init(s, wasmBin, j)) + , exportTypes_{0, nullptr, 0, 0, nullptr} + , j_(j) +{ + wasm_module_exports(module_.get(), &exportTypes_); + if (instantiate) + { + auto wimports = buildImports(s, imports); + addInstance(s, maxPages, gas, wimports); + } +} + +ModuleWrapper::~ModuleWrapper() +{ + if (exportTypes_.size) + wasm_exporttype_vec_delete(&exportTypes_); +} + +ModuleWrapper& +ModuleWrapper::operator=(ModuleWrapper&& o) +{ + if (this == &o) + return *this; + + module_ = std::move(o.module_); + instanceWrap_ = std::move(o.instanceWrap_); + if (exportTypes_.size) + wasm_exporttype_vec_delete(&exportTypes_); + exportTypes_ = o.exportTypes_; + o.exportTypes_ = {0, nullptr, 0, 0, nullptr}; + j_ = o.j_; + + return *this; +} + +ModuleWrapper::operator bool() const +{ + return instanceWrap_; +} + +void +ModuleWrapper::makeImpParams(wasm_valtype_vec_t& v, WasmImportFunc const& imp) +{ + auto const paramSize = imp.params.size(); + + if (paramSize) + { + wasm_valtype_vec_new(&v, paramSize, nullptr); + v.num_elems = paramSize; + } + else + v = WASM_EMPTY_VEC; + for (unsigned i = 0; i < paramSize; ++i) + { + auto const vt = imp.params[i]; + switch (vt) + { + case WT_I32: + v.data[i] = wasm_valtype_new_i32(); + break; + case WT_I64: + v.data[i] = wasm_valtype_new_i64(); + break; + case WT_F32: + v.data[i] = wasm_valtype_new_f32(); + break; + case WT_F64: + v.data[i] = wasm_valtype_new_f64(); + break; + default: + throw std::runtime_error("invalid import type"); + } + } +} + +void +ModuleWrapper::makeImpReturn(wasm_valtype_vec_t& v, WasmImportFunc const& imp) +{ + if (imp.result) + { + wasm_valtype_vec_new(&v, 1, nullptr); + v.num_elems = 1; + switch (*imp.result) + { + case WT_I32: + v.data[0] = wasm_valtype_new_i32(); + break; + case WT_I64: + v.data[0] = wasm_valtype_new_i64(); + break; + case WT_F32: + v.data[0] = wasm_valtype_new_f32(); + break; + case WT_F64: + v.data[0] = wasm_valtype_new_f64(); + break; + default: + throw std::runtime_error("invalid return type"); + } + } + else + v = WASM_EMPTY_VEC; +} + +wasm_extern_vec_t +ModuleWrapper::buildImports( + wasm_store_t* s, + std::vector const& imports) +{ + wasm_importtype_vec_t importTypes = WASM_EMPTY_VEC; + wasm_module_imports(module_.get(), &importTypes); + std:: + unique_ptr + itDeleter(&importTypes, &wasm_importtype_vec_delete); + + wasm_extern_vec_t wimports = WASM_EMPTY_VEC; + if (!importTypes.num_elems) + return wimports; + + wasm_extern_vec_new(&wimports, importTypes.size, nullptr); + wimports.num_elems = importTypes.num_elems; + + unsigned impCnt = 0; + for (unsigned i = 0; i < importTypes.num_elems; ++i) + { + wasm_importtype_t const* importtype = importTypes.data[i]; + if (wasm_importtype_is_linked(importtype)) + { + // create a placeholder + wimports.data[i] = wasm_extern_new_empty( + s, wasm_externtype_kind(wasm_importtype_type(importtype))); + ++impCnt; + continue; + } + + // wasm_name_t const* mn = wasm_importtype_module(importtype); + // auto modName = std::string_view(mn->data, mn->num_elems - 1); + wasm_name_t const* fn = wasm_importtype_name(importtype); + auto fieldName = std::string_view(fn->data, fn->num_elems - 1); + + // for multi-module support + // if ((W_ENV != modName) && (W_HOST_LIB != modName)) + // continue; + + bool impSet = false; + for (auto const& imp : imports) + { + if (imp.name != fieldName) + continue; + + wasm_valtype_vec_t params, results; + makeImpReturn(results, imp); + makeImpParams(params, imp); + + using ftype_ptr = std:: + unique_ptr; + ftype_ptr ftype( + wasm_functype_new(¶ms, &results), &wasm_functype_delete); + wasm_func_t* func = wasm_func_new_with_env( + s, + ftype.get(), + reinterpret_cast(imp.wrap), + imp.udata, + nullptr); + if (!func) + { + // LCOV_EXCL_START + throw std::runtime_error( + "can't create import function " + imp.name); + // LCOV_EXCL_STOP + } + + if (imp.gas && !wasm_func_set_gas(func, imp.gas)) + { + // LCOV_EXCL_START + throw std::runtime_error( + "can't set gas for import function " + imp.name); + // LCOV_EXCL_STOP + } + + wimports.data[i] = wasm_func_as_extern(func); + ++impCnt; + impSet = true; + + break; + } + + if (!impSet) + { + print_wasm_error( + std::string("Import not found: ") + fieldName.data(), + nullptr, + j_); + } + } + + if (impCnt != importTypes.num_elems) + { + print_wasm_error( + std::string("Imports not finished: ") + std::to_string(impCnt) + + "/" + std::to_string(importTypes.num_elems), + nullptr, + j_); + } + + return wimports; +} + +FuncInfo +ModuleWrapper::getFunc(std::string_view funcName) const +{ + return instanceWrap_.getFunc(funcName, exportTypes_); +} + +wmem +ModuleWrapper::getMem() const +{ + return instanceWrap_.getMem(); +} + +InstanceWrapper const& +ModuleWrapper::getInstance(int) const +{ + return instanceWrap_; +} + +int +ModuleWrapper::addInstance( + wasm_store_t* s, + int32_t maxPages, + int64_t gas, + wasm_extern_vec_t const& imports) +{ + instanceWrap_ = {s, module_.get(), maxPages, gas, imports, j_}; + return 0; +} + +// int +// my_module_t::delInstance(int i) +// { +// if (i >= mod_inst.size()) +// return -1; +// if (!mod_inst[i]) +// mod_inst[i] = my_mod_inst_t(); +// return i; +// } + +std::int64_t +ModuleWrapper::getGas() +{ + return instanceWrap_.getGas(); +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// void +// WamrEngine::clearModules() +// { +// modules.clear(); +// store.reset(); // to free the memory before creating new store +// store = {wasm_store_new(engine.get()), &wasm_store_delete}; +// } + +WamrEngine::WamrEngine() + : engine_(wasm_engine_new(), &wasm_engine_delete) + , store_(nullptr, &wasm_store_delete) +{ + wasm_runtime_set_default_running_mode(Mode_Interp); + wasm_runtime_set_log_level(WASM_LOG_LEVEL_FATAL); + // wasm_runtime_set_log_level(WASM_LOG_LEVEL_VERBOSE); +} + +int +WamrEngine::addModule( + Bytes const& wasmCode, + bool instantiate, + int64_t gas, + std::vector const& imports) +{ + moduleWrap_.reset(); + store_.reset(); // to free the memory before creating new store + store_ = {wasm_store_new(engine_.get()), &wasm_store_delete}; + moduleWrap_ = std::make_unique( + store_.get(), wasmCode, instantiate, defMaxPages_, gas, imports, j_); + + if (!moduleWrap_) + throw std::runtime_error("can't create module wrapper"); + + return moduleWrap_ ? 0 : -1; +} + +// int +// WamrEngine::addInstance() +// { +// return module->addInstance(store.get(), defMaxPages); +// } + +FuncInfo +WamrEngine::getFunc(std::string_view funcName) +{ + return moduleWrap_->getFunc(funcName); +} + +std::vector +WamrEngine::convertParams(std::vector const& params) +{ + std::vector v; + v.reserve(params.size()); + for (auto const& p : params) + { + switch (p.type) + { + case WT_I32: + v.push_back(WASM_I32_VAL(p.of.i32)); + break; + case WT_I64: + v.push_back(WASM_I64_VAL(p.of.i64)); + break; + case WT_F32: + v.push_back(WASM_F32_VAL(p.of.f32)); + break; + case WT_F64: + v.push_back(WASM_F64_VAL(p.of.f64)); + break; + case WT_U8V: { + auto const sz = p.of.u8v.sz; + auto const ptr = allocate(sz); + auto mem = getMem(); + memcpy(mem.p + ptr, p.of.u8v.d, sz); + + v.push_back(WASM_I32_VAL(ptr)); + v.push_back(WASM_I32_VAL(sz)); + } + break; + default: + throw std::runtime_error( + "unknown parameter type: " + std::to_string(p.type)); + break; + } + } + + return v; +} + +int +WamrEngine::compareParamTypes( + wasm_valtype_vec_t const* ftp, + std::vector const& p) +{ + if (ftp->num_elems != p.size()) + return std::min(ftp->num_elems, p.size()); + + for (unsigned i = 0; i < ftp->num_elems; ++i) + { + auto const t1 = wasm_valtype_kind(ftp->data[i]); + auto const t2 = p[i].kind; + if (t1 != t2) + return i; + } + + return -1; +} + +void +WamrEngine::add_param(std::vector& in, int32_t p) +{ + in.emplace_back(); + auto& el(in.back()); + memset(&el, 0, sizeof(el)); + el = WASM_I32_VAL(p); // WASM_I32; +} + +void +WamrEngine::add_param(std::vector& in, int64_t p) +{ + in.emplace_back(); + auto& el(in.back()); + el = WASM_I64_VAL(p); +} + +template +WamrResult +WamrEngine::call(std::string_view func, Types&&... args) +{ + // Lookup our export function + auto f = getFunc(func); + return call(f, std::forward(args)...); +} + +template +WamrResult +WamrEngine::call(FuncInfo const& f, Types&&... args) +{ + std::vector in; + return call(f, in, std::forward(args)...); +} + +#ifdef SHOW_CALL_TIME +static inline uint64_t +usecs() +{ + uint64_t x = + std::chrono::duration_cast( + std::chrono::high_resolution_clock::now().time_since_epoch()) + .count(); + return x; +} +#endif + +template +WamrResult +WamrEngine::call(FuncInfo const& f, std::vector& in) +{ + // wasm_val_t rs[1] = {WASM_I32_VAL(0)}; + WamrResult ret(NR); + // if (NR) { wasm_val_vec_new_uninitialized(&ret, NR); // + // wasm_val_vec_new(&ret, NR, &rs[0]); // ret = WASM_ARRAY_VEC(rs); } + + wasm_val_vec_t const inv = in.empty() + ? wasm_val_vec_t WASM_EMPTY_VEC + : wasm_val_vec_t{ + in.size(), + in.data(), + in.size(), + sizeof(std::remove_reference_t::value_type), + nullptr}; + +#ifdef SHOW_CALL_TIME + auto const start = usecs(); +#endif + + wasm_trap_t* trap = wasm_func_call(f.first, &inv, &ret.r); + +#ifdef SHOW_CALL_TIME + auto const finish = usecs(); + auto const delta_ms = (finish - start) / 1000; + std::cout << "wasm_func_call: " << delta_ms << "ms" << std::endl; +#endif + + if (trap) + { + ret.f = true; + print_wasm_error("failure to call func", trap, j_); + } + + // assert(results[0].kind == WASM_I32); + // if (NR) printf("Result P5: %d\n", ret[0].of.i32); + + return ret; +} + +template +WamrResult +WamrEngine::call( + FuncInfo const& f, + std::vector& in, + std::int32_t p, + Types&&... args) +{ + add_param(in, p); + return call(f, in, std::forward(args)...); +} + +template +WamrResult +WamrEngine::call( + FuncInfo const& f, + std::vector& in, + std::int64_t p, + Types&&... args) +{ + add_param(in, p); + return call(f, in, std::forward(args)...); +} + +template +WamrResult +WamrEngine::call( + FuncInfo const& f, + std::vector& in, + uint8_t const* d, + std::size_t sz, + Types&&... args) +{ + auto const ptr = allocate(sz); + auto mem = getMem(); + memcpy(mem.p + ptr, d, sz); + + add_param(in, ptr); + add_param(in, static_cast(sz)); + return call(f, in, std::forward(args)...); +} + +template +WamrResult +WamrEngine::call( + FuncInfo const& f, + std::vector& in, + Bytes const& p, + Types&&... args) +{ + return call(f, in, p.data(), p.size(), std::forward(args)...); +} + +Expected, TER> +WamrEngine::run( + Bytes const& wasmCode, + std::string_view funcName, + std::vector const& params, + std::vector const& imports, + HostFunctions* hfs, + int64_t gas, + beast::Journal j) +{ + j_ = j; + wasm_runtime_set_log_level( + std::min(getLogLevel(j_.sink().threshold()), WASM_LOG_LEVEL_ERROR)); + try + { + return runHlp(wasmCode, funcName, params, imports, hfs, gas); + } + catch (std::exception const& e) + { + print_wasm_error(std::string("exception: ") + e.what(), nullptr, j_); + } + catch (...) + { + print_wasm_error(std::string("exception: unknown"), nullptr, j_); + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected, TER> +WamrEngine::runHlp( + Bytes const& wasmCode, + std::string_view funcName, + std::vector const& params, + std::vector const& imports, + HostFunctions* hfs, + int64_t gas) +{ + // currently only 1 module support, possible parallel UT run + std::lock_guard lg(m_); + + // Create and instantiate the module. + if (!wasmCode.empty()) + { + [[maybe_unused]] int const m = addModule(wasmCode, true, gas, imports); + } + + if (!moduleWrap_ || !moduleWrap_->instanceWrap_) + throw std::runtime_error("no instance"); + + if (hfs) + hfs->setRT(&getRT()); + + // Call main + auto const f = getFunc(!funcName.empty() ? funcName : "_start"); + auto const* ftp = wasm_functype_params(f.second); + + // not const because passed directly to wamr function (which accept non + // const) + auto p = convertParams(params); + + if (int const comp = compareParamTypes(ftp, p); comp >= 0) + throw std::runtime_error( + "invalid parameter type #" + std::to_string(comp)); + + auto const res = call<1>(f, p); + + if (res.f) + throw std::runtime_error("<" + std::string(funcName) + "> failure"); + else if (!res.r.num_elems) + throw std::runtime_error( + "<" + std::string(funcName) + "> return nothing"); + + assert(res.r.data[0].kind == WASM_I32); + if (gas == -1) + gas = std::numeric_limits::max(); + WasmResult const ret{ + res.r.data[0].of.i32, gas - moduleWrap_->getGas()}; + + // #ifdef DEBUG_OUTPUT + // auto& j = std::cerr; + // #else + // auto j = j_.debug(); + // #endif + // j << "WAMR Res: " << ret.result << " cost: " << ret.cost << std::endl; + + return ret; +} + +NotTEC +WamrEngine::check( + Bytes const& wasmCode, + std::string_view funcName, + std::vector const& params, + std::vector const& imports, + beast::Journal j) +{ + j_ = j; + wasm_runtime_set_log_level( + std::min(getLogLevel(j_.sink().threshold()), WASM_LOG_LEVEL_ERROR)); + try + { + return checkHlp(wasmCode, funcName, params, imports); + } + catch (std::exception const& e) + { + print_wasm_error(std::string("exception: ") + e.what(), nullptr, j_); + } + catch (...) + { + print_wasm_error(std::string("exception: unknown"), nullptr, j_); + } + + return temBAD_WASM; +} + +NotTEC +WamrEngine::checkHlp( + Bytes const& wasmCode, + std::string_view funcName, + std::vector const& params, + std::vector const& imports) +{ + // currently only 1 module support, possible parallel UT run + std::lock_guard lg(m_); + + // Create and instantiate the module. + if (wasmCode.empty()) + throw std::runtime_error("empty nodule"); + + int const m = addModule(wasmCode, true, -1, imports); + if ((m < 0) || !moduleWrap_ || !moduleWrap_->instanceWrap_) + throw std::runtime_error("no instance"); + + // Looking for a func and compare parameter types + auto const f = getFunc(!funcName.empty() ? funcName : "_start"); + auto const* ftp = wasm_functype_params(f.second); + auto const p = convertParams(params); + + if (int const comp = compareParamTypes(ftp, p); comp >= 0) + throw std::runtime_error( + "invalid parameter type #" + std::to_string(comp)); + + return tesSUCCESS; +} + +std::int32_t +WamrEngine::initMaxPages(std::int32_t def) +{ + defMaxPages_ = def; + return def; +} + +std::int64_t +WamrEngine::getGas() +{ + return moduleWrap_ ? moduleWrap_->getGas() : 0; +} + +wmem +WamrEngine::getMem() const +{ + return moduleWrap_ ? moduleWrap_->getMem() : wmem(); +} + +InstanceWrapper const& +WamrEngine::getRT(int m, int i) +{ + if (!moduleWrap_) + throw std::runtime_error("no module"); + return moduleWrap_->getInstance(i); +} + +int32_t +WamrEngine::allocate(int32_t sz) +{ + auto res = call<1>(W_ALLOC, static_cast(sz)); + + if (res.f || !res.r.num_elems || (res.r.data[0].kind != WASM_I32) || + !res.r.data[0].of.i32) + throw std::runtime_error( + "can't allocate memory, " + std::to_string(sz) + " bytes"); + return res.r.data[0].of.i32; +} + +wasm_trap_t* +WamrEngine::newTrap(std::string_view txt) +{ + wasm_message_t msg = WASM_EMPTY_VEC; + + if (!txt.empty()) + wasm_name_new(&msg, txt.size(), txt.data()); + + return wasm_trap_new(store_.get(), &msg); +} + +beast::Journal +WamrEngine::getJournal() const +{ + return j_; +} + +} // namespace ripple diff --git a/src/xrpld/app/wasm/detail/WasmVM.cpp b/src/xrpld/app/wasm/detail/WasmVM.cpp new file mode 100644 index 0000000000..e13b5885cf --- /dev/null +++ b/src/xrpld/app/wasm/detail/WasmVM.cpp @@ -0,0 +1,164 @@ +//------------------------------------------------------------------------------ +/* + This file is part of rippled: https://github.com/ripple/rippled + Copyright (c) 2025 Ripple Labs Inc. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ +//============================================================================== + +#ifdef _DEBUG +// #define DEBUG_OUTPUT 1 +#endif + +#include +#include +#include + +#include +#include +#include +#include + +#include + +namespace ripple { + +std::vector +createWasmImport(HostFunctions* hfs) +{ + std::vector i; + + // Add host functions here + + return i; +} + +Expected +runEscrowWasm( + Bytes const& wasmCode, + std::string_view funcName, + std::vector const& params, + HostFunctions* hfs, + int64_t gasLimit, + beast::Journal j) +{ + // create VM and set cost limit + auto& vm = WasmEngine::instance(); + vm.initMaxPages(MAX_PAGES); + + auto const ret = vm.run( + wasmCode, + funcName, + params, + createWasmImport(hfs), + hfs, + gasLimit, + hfs ? hfs->getJournal() : j); + + // std::cout << "runEscrowWasm, mod size: " << wasmCode.size() + // << ", gasLimit: " << gasLimit << ", funcName: " << funcName; + + if (!ret) + { +#ifdef DEBUG_OUTPUT + std::cout << ", error: " << ret.error() << std::endl; +#endif + return Unexpected(ret.error()); + } + +#ifdef DEBUG_OUTPUT + std::cout << ", ret: " << ret->result << ", gas spent: " << ret->cost + << std::endl; +#endif + return EscrowResult{ret->result, ret->cost}; +} + +NotTEC +preflightEscrowWasm( + Bytes const& wasmCode, + std::string_view funcName, + std::vector const& params, + HostFunctions* hfs, + beast::Journal j) +{ + // create VM and set cost limit + auto& vm = WasmEngine::instance(); + vm.initMaxPages(MAX_PAGES); + + auto const ret = vm.check( + wasmCode, + funcName, + params, + createWasmImport(hfs), + hfs ? hfs->getJournal() : j); + + return ret; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +WasmEngine::WasmEngine() : impl(std::make_unique()) +{ +} + +WasmEngine& +WasmEngine::instance() +{ + static WasmEngine e; + return e; +} + +Expected, TER> +WasmEngine::run( + Bytes const& wasmCode, + std::string_view funcName, + std::vector const& params, + std::vector const& imports, + HostFunctions* hfs, + int64_t gasLimit, + beast::Journal j) +{ + return impl->run(wasmCode, funcName, params, imports, hfs, gasLimit, j); +} + +NotTEC +WasmEngine::check( + Bytes const& wasmCode, + std::string_view funcName, + std::vector const& params, + std::vector const& imports, + beast::Journal j) +{ + return impl->check(wasmCode, funcName, params, imports, j); +} + +std::int32_t +WasmEngine::initMaxPages(std::int32_t def) +{ + return impl->initMaxPages(def); +} + +void* +WasmEngine::newTrap(std::string_view msg) +{ + return impl->newTrap(msg); +} + +beast::Journal +WasmEngine::getJournal() const +{ + return impl->getJournal(); +} + +} // namespace ripple From 83418644f7bcba2ee2a084401268d6ab68653610 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 10 Sep 2025 14:56:21 -0400 Subject: [PATCH 003/137] add host functions --- src/xrpld/app/wasm/HostFunc.h | 467 ++++ src/xrpld/app/wasm/HostFuncImpl.h | 297 +++ src/xrpld/app/wasm/HostFuncWrapper.h | 567 +++++ src/xrpld/app/wasm/detail/HostFuncImpl.cpp | 1347 +++++++++++ src/xrpld/app/wasm/detail/HostFuncWrapper.cpp | 2065 +++++++++++++++++ src/xrpld/app/wasm/detail/WasmVM.cpp | 82 +- 6 files changed, 4824 insertions(+), 1 deletion(-) create mode 100644 src/xrpld/app/wasm/HostFuncImpl.h create mode 100644 src/xrpld/app/wasm/HostFuncWrapper.h create mode 100644 src/xrpld/app/wasm/detail/HostFuncImpl.cpp create mode 100644 src/xrpld/app/wasm/detail/HostFuncWrapper.cpp diff --git a/src/xrpld/app/wasm/HostFunc.h b/src/xrpld/app/wasm/HostFunc.h index b7ea5c7e85..f1332462a4 100644 --- a/src/xrpld/app/wasm/HostFunc.h +++ b/src/xrpld/app/wasm/HostFunc.h @@ -32,6 +32,71 @@ namespace ripple { +enum class HostFunctionError : int32_t { + INTERNAL = -1, + FIELD_NOT_FOUND = -2, + BUFFER_TOO_SMALL = -3, + NO_ARRAY = -4, + NOT_LEAF_FIELD = -5, + LOCATOR_MALFORMED = -6, + SLOT_OUT_RANGE = -7, + SLOTS_FULL = -8, + EMPTY_SLOT = -9, + LEDGER_OBJ_NOT_FOUND = -10, + DECODING = -11, + DATA_FIELD_TOO_LARGE = -12, + POINTER_OUT_OF_BOUNDS = -13, + NO_MEM_EXPORTED = -14, + INVALID_PARAMS = -15, + INVALID_ACCOUNT = -16, + INVALID_FIELD = -17, + INDEX_OUT_OF_BOUNDS = -18, + FLOAT_INPUT_MALFORMED = -19, + FLOAT_COMPUTATION_ERROR = -20, +}; + +inline int32_t +HfErrorToInt(HostFunctionError e) +{ + return static_cast(e); +} + +std::string +floatToString(Slice const& data); + +Expected +floatFromIntImpl(int64_t x, int32_t mode); + +Expected +floatFromUintImpl(uint64_t x, int32_t mode); + +Expected +floatSetImpl(int64_t mantissa, int32_t exponent, int32_t mode); + +Expected +floatCompareImpl(Slice const& x, Slice const& y); + +Expected +floatAddImpl(Slice const& x, Slice const& y, int32_t mode); + +Expected +floatSubtractImpl(Slice const& x, Slice const& y, int32_t mode); + +Expected +floatMultiplyImpl(Slice const& x, Slice const& y, int32_t mode); + +Expected +floatDivideImpl(Slice const& x, Slice const& y, int32_t mode); + +Expected +floatRootImpl(Slice const& x, int32_t n, int32_t mode); + +Expected +floatPowerImpl(Slice const& x, int32_t n, int32_t mode); + +Expected +floatLogImpl(Slice const& x, int32_t mode); + struct HostFunctions { // LCOV_EXCL_START @@ -52,6 +117,408 @@ struct HostFunctions return beast::Journal{beast::Journal::getNullSink()}; } + virtual Expected + getLedgerSqn() + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + getParentLedgerTime() + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + getParentLedgerHash() + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + getLedgerAccountHash() + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + getLedgerTransactionHash() + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + getBaseFee() + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + isAmendmentEnabled(uint256 const& amendmentId) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + isAmendmentEnabled(std::string_view const& amendmentName) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + cacheLedgerObj(uint256 const& objId, int32_t cacheIdx) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + getTxField(SField const& fname) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + getCurrentLedgerObjField(SField const& fname) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + getLedgerObjField(int32_t cacheIdx, SField const& fname) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + getTxNestedField(Slice const& locator) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + getCurrentLedgerObjNestedField(Slice const& locator) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + getLedgerObjNestedField(int32_t cacheIdx, Slice const& locator) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + getTxArrayLen(SField const& fname) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + getCurrentLedgerObjArrayLen(SField const& fname) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + getLedgerObjArrayLen(int32_t cacheIdx, SField const& fname) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + getTxNestedArrayLen(Slice const& locator) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + getCurrentLedgerObjNestedArrayLen(Slice const& locator) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + getLedgerObjNestedArrayLen(int32_t cacheIdx, Slice const& locator) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + updateData(Slice const& data) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + checkSignature( + Slice const& message, + Slice const& signature, + Slice const& pubkey) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + computeSha512HalfHash(Slice const& data) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + accountKeylet(AccountID const& account) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + ammKeylet(Asset const& issue1, Asset const& issue2) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + checkKeylet(AccountID const& account, std::uint32_t seq) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + credentialKeylet( + AccountID const& subject, + AccountID const& issuer, + Slice const& credentialType) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + didKeylet(AccountID const& account) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + delegateKeylet(AccountID const& account, AccountID const& authorize) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + depositPreauthKeylet(AccountID const& account, AccountID const& authorize) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + escrowKeylet(AccountID const& account, std::uint32_t seq) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + lineKeylet( + AccountID const& account1, + AccountID const& account2, + Currency const& currency) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + mptIssuanceKeylet(AccountID const& issuer, std::uint32_t seq) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + mptokenKeylet(MPTID const& mptid, AccountID const& holder) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + nftOfferKeylet(AccountID const& account, std::uint32_t seq) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + offerKeylet(AccountID const& account, std::uint32_t seq) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + oracleKeylet(AccountID const& account, std::uint32_t docId) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + paychanKeylet( + AccountID const& account, + AccountID const& destination, + std::uint32_t seq) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + permissionedDomainKeylet(AccountID const& account, std::uint32_t seq) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + signersKeylet(AccountID const& account) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + ticketKeylet(AccountID const& account, std::uint32_t seq) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + vaultKeylet(AccountID const& account, std::uint32_t seq) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + getNFT(AccountID const& account, uint256 const& nftId) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + getNFTIssuer(uint256 const& nftId) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + getNFTTaxon(uint256 const& nftId) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + getNFTFlags(uint256 const& nftId) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + getNFTTransferFee(uint256 const& nftId) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + getNFTSerial(uint256 const& nftId) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + trace(std::string_view const& msg, Slice const& data, bool asHex) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + traceNum(std::string_view const& msg, int64_t data) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + traceAccount(std::string_view const& msg, AccountID const& account) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + traceFloat(std::string_view const& msg, Slice const& data) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + traceAmount(std::string_view const& msg, STAmount const& amount) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + floatFromInt(int64_t x, int32_t mode) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + floatFromUint(uint64_t x, int32_t mode) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + floatSet(int64_t mantissa, int32_t exponent, int32_t mode) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + floatCompare(Slice const& x, Slice const& y) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + floatAdd(Slice const& x, Slice const& y, int32_t mode) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + floatSubtract(Slice const& x, Slice const& y, int32_t mode) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + floatMultiply(Slice const& x, Slice const& y, int32_t mode) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + floatDivide(Slice const& x, Slice const& y, int32_t mode) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + floatRoot(Slice const& x, int32_t n, int32_t mode) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + floatPower(Slice const& x, int32_t n, int32_t mode) + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + floatLog(Slice const& x, int32_t mode) + { + return Unexpected(HostFunctionError::INTERNAL); + } + virtual ~HostFunctions() = default; // LCOV_EXCL_STOP }; diff --git a/src/xrpld/app/wasm/HostFuncImpl.h b/src/xrpld/app/wasm/HostFuncImpl.h new file mode 100644 index 0000000000..5539a5ef40 --- /dev/null +++ b/src/xrpld/app/wasm/HostFuncImpl.h @@ -0,0 +1,297 @@ +//------------------------------------------------------------------------------ +/* + This file is part of rippled: https://github.com/ripple/rippled + Copyright (c) 2023 Ripple Labs Inc. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ +//============================================================================== + +#pragma once + +#include +#include + +namespace ripple { +class WasmHostFunctionsImpl : public HostFunctions +{ + ApplyContext& ctx; + Keylet leKey; + std::shared_ptr currentLedgerObj = nullptr; + bool isLedgerObjCached = false; + + static int constexpr MAX_CACHE = 256; + std::array, MAX_CACHE> cache; + std::optional data_; + + void const* rt_ = nullptr; + + Expected, HostFunctionError> + getCurrentLedgerObj() + { + if (!isLedgerObjCached) + { + isLedgerObjCached = true; + currentLedgerObj = ctx.view().read(leKey); + } + if (currentLedgerObj) + return currentLedgerObj; + return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); + } + + Expected + normalizeCacheIndex(int32_t cacheIdx); + +public: + WasmHostFunctionsImpl(ApplyContext& ctx, Keylet const& leKey) + : ctx(ctx), leKey(leKey) + { + } + + virtual void + setRT(void const* rt) override + { + rt_ = rt; + } + + virtual void const* + getRT() const override + { + return rt_; + } + + beast::Journal + getJournal() override + { + return ctx.journal; + } + + std::optional const& + getData() const + { + return data_; + } + + Expected + getLedgerSqn() override; + + Expected + getParentLedgerTime() override; + + Expected + getParentLedgerHash() override; + + Expected + getLedgerAccountHash() override; + + Expected + getLedgerTransactionHash() override; + + Expected + getBaseFee() override; + + Expected + isAmendmentEnabled(uint256 const& amendmentId) override; + + Expected + isAmendmentEnabled(std::string_view const& amendmentName) override; + + Expected + cacheLedgerObj(uint256 const& objId, int32_t cacheIdx) override; + + Expected + getTxField(SField const& fname) override; + + Expected + getCurrentLedgerObjField(SField const& fname) override; + + Expected + getLedgerObjField(int32_t cacheIdx, SField const& fname) override; + + Expected + getTxNestedField(Slice const& locator) override; + + Expected + getCurrentLedgerObjNestedField(Slice const& locator) override; + + Expected + getLedgerObjNestedField(int32_t cacheIdx, Slice const& locator) override; + + Expected + getTxArrayLen(SField const& fname) override; + + Expected + getCurrentLedgerObjArrayLen(SField const& fname) override; + + Expected + getLedgerObjArrayLen(int32_t cacheIdx, SField const& fname) override; + + Expected + getTxNestedArrayLen(Slice const& locator) override; + + Expected + getCurrentLedgerObjNestedArrayLen(Slice const& locator) override; + + Expected + getLedgerObjNestedArrayLen(int32_t cacheIdx, Slice const& locator) override; + + Expected + updateData(Slice const& data) override; + + Expected + checkSignature( + Slice const& message, + Slice const& signature, + Slice const& pubkey) override; + + Expected + computeSha512HalfHash(Slice const& data) override; + + Expected + accountKeylet(AccountID const& account) override; + + Expected + ammKeylet(Asset const& issue1, Asset const& issue2) override; + + Expected + checkKeylet(AccountID const& account, std::uint32_t seq) override; + + Expected + credentialKeylet( + AccountID const& subject, + AccountID const& issuer, + Slice const& credentialType) override; + + Expected + didKeylet(AccountID const& account) override; + + Expected + delegateKeylet(AccountID const& account, AccountID const& authorize) + override; + + Expected + depositPreauthKeylet(AccountID const& account, AccountID const& authorize) + override; + + Expected + escrowKeylet(AccountID const& account, std::uint32_t seq) override; + + Expected + lineKeylet( + AccountID const& account1, + AccountID const& account2, + Currency const& currency) override; + + Expected + mptIssuanceKeylet(AccountID const& issuer, std::uint32_t seq) override; + + Expected + mptokenKeylet(MPTID const& mptid, AccountID const& holder) override; + + Expected + nftOfferKeylet(AccountID const& account, std::uint32_t seq) override; + + Expected + offerKeylet(AccountID const& account, std::uint32_t seq) override; + + Expected + oracleKeylet(AccountID const& account, std::uint32_t docId) override; + + Expected + paychanKeylet( + AccountID const& account, + AccountID const& destination, + std::uint32_t seq) override; + + Expected + permissionedDomainKeylet(AccountID const& account, std::uint32_t seq) + override; + + Expected + signersKeylet(AccountID const& account) override; + + Expected + ticketKeylet(AccountID const& account, std::uint32_t seq) override; + + Expected + vaultKeylet(AccountID const& account, std::uint32_t seq) override; + + Expected + getNFT(AccountID const& account, uint256 const& nftId) override; + + Expected + getNFTIssuer(uint256 const& nftId) override; + + Expected + getNFTTaxon(uint256 const& nftId) override; + + Expected + getNFTFlags(uint256 const& nftId) override; + + Expected + getNFTTransferFee(uint256 const& nftId) override; + + Expected + getNFTSerial(uint256 const& nftId) override; + + Expected + trace(std::string_view const& msg, Slice const& data, bool asHex) override; + + Expected + traceNum(std::string_view const& msg, int64_t data) override; + + Expected + traceAccount(std::string_view const& msg, AccountID const& account) + override; + + Expected + traceFloat(std::string_view const& msg, Slice const& data) override; + + Expected + traceAmount(std::string_view const& msg, STAmount const& amount) override; + + Expected + floatFromInt(int64_t x, int32_t mode) override; + + Expected + floatFromUint(uint64_t x, int32_t mode) override; + + Expected + floatSet(int64_t mantissa, int32_t exponent, int32_t mode) override; + + Expected + floatCompare(Slice const& x, Slice const& y) override; + + Expected + floatAdd(Slice const& x, Slice const& y, int32_t mode) override; + + Expected + floatSubtract(Slice const& x, Slice const& y, int32_t mode) override; + + Expected + floatMultiply(Slice const& x, Slice const& y, int32_t mode) override; + + Expected + floatDivide(Slice const& x, Slice const& y, int32_t mode) override; + + Expected + floatRoot(Slice const& x, int32_t n, int32_t mode) override; + + Expected + floatPower(Slice const& x, int32_t n, int32_t mode) override; + + Expected + floatLog(Slice const& x, int32_t mode) override; +}; + +} // namespace ripple diff --git a/src/xrpld/app/wasm/HostFuncWrapper.h b/src/xrpld/app/wasm/HostFuncWrapper.h new file mode 100644 index 0000000000..dc0524d611 --- /dev/null +++ b/src/xrpld/app/wasm/HostFuncWrapper.h @@ -0,0 +1,567 @@ +//------------------------------------------------------------------------------ +/* + This file is part of rippled: https://github.com/ripple/rippled + Copyright (c) 2025 Ripple Labs Inc. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ +//============================================================================== + +#pragma once + +#include + +namespace ripple { + +using getLedgerSqn_proto = int32_t(); +wasm_trap_t* +getLedgerSqn_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using getParentLedgerTime_proto = int32_t(); +wasm_trap_t* +getParentLedgerTime_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using getParentLedgerHash_proto = int32_t(uint8_t*, int32_t); +wasm_trap_t* +getParentLedgerHash_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using getLedgerAccountHash_proto = int32_t(uint8_t*, int32_t); +wasm_trap_t* +getLedgerAccountHash_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using getLedgerTransactionHash_proto = int32_t(uint8_t*, int32_t); +wasm_trap_t* +getLedgerTransactionHash_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using getBaseFee_proto = int32_t(); +wasm_trap_t* +getBaseFee_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using isAmendmentEnabled_proto = int32_t(uint8_t const*, int32_t); +wasm_trap_t* +isAmendmentEnabled_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using cacheLedgerObj_proto = int32_t(uint8_t const*, int32_t, int32_t); +wasm_trap_t* +cacheLedgerObj_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using getTxField_proto = int32_t(int32_t, uint8_t*, int32_t); +wasm_trap_t* +getTxField_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using getCurrentLedgerObjField_proto = int32_t(int32_t, uint8_t*, int32_t); +wasm_trap_t* +getCurrentLedgerObjField_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using getLedgerObjField_proto = int32_t(int32_t, int32_t, uint8_t*, int32_t); +wasm_trap_t* +getLedgerObjField_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using getTxNestedField_proto = + int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); +wasm_trap_t* +getTxNestedField_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using getCurrentLedgerObjNestedField_proto = + int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); +wasm_trap_t* +getCurrentLedgerObjNestedField_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using getLedgerObjNestedField_proto = + int32_t(int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); +wasm_trap_t* +getLedgerObjNestedField_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using getTxArrayLen_proto = int32_t(int32_t); +wasm_trap_t* +getTxArrayLen_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using getCurrentLedgerObjArrayLen_proto = int32_t(int32_t); +wasm_trap_t* +getCurrentLedgerObjArrayLen_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using getLedgerObjArrayLen_proto = int32_t(int32_t, int32_t); +wasm_trap_t* +getLedgerObjArrayLen_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using getTxNestedArrayLen_proto = int32_t(uint8_t const*, int32_t); +wasm_trap_t* +getTxNestedArrayLen_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using getCurrentLedgerObjNestedArrayLen_proto = + int32_t(uint8_t const*, int32_t); +wasm_trap_t* +getCurrentLedgerObjNestedArrayLen_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using getLedgerObjNestedArrayLen_proto = + int32_t(int32_t, uint8_t const*, int32_t); +wasm_trap_t* +getLedgerObjNestedArrayLen_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using updateData_proto = int32_t(uint8_t const*, int32_t); +wasm_trap_t* +updateData_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using checkSignature_proto = int32_t( + uint8_t const*, + int32_t, + uint8_t const*, + int32_t, + uint8_t const*, + int32_t); +wasm_trap_t* +checkSignature_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using computeSha512HalfHash_proto = + int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); +wasm_trap_t* +computeSha512HalfHash_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using accountKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); +wasm_trap_t* +accountKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using ammKeylet_proto = int32_t( + uint8_t const*, + int32_t, + uint8_t const*, + int32_t, + uint8_t*, + int32_t); +wasm_trap_t* +ammKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using checkKeylet_proto = + int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +wasm_trap_t* +checkKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using credentialKeylet_proto = int32_t( + uint8_t const*, + int32_t, + uint8_t const*, + int32_t, + uint8_t const*, + int32_t, + uint8_t*, + int32_t); +wasm_trap_t* +credentialKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using delegateKeylet_proto = int32_t( + uint8_t const*, + int32_t, + uint8_t const*, + int32_t, + uint8_t*, + int32_t); +wasm_trap_t* +delegateKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using depositPreauthKeylet_proto = int32_t( + uint8_t const*, + int32_t, + uint8_t const*, + int32_t, + uint8_t*, + int32_t); +wasm_trap_t* +depositPreauthKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using didKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); +wasm_trap_t* +didKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using escrowKeylet_proto = + int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +wasm_trap_t* +escrowKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using lineKeylet_proto = int32_t( + uint8_t const*, + int32_t, + uint8_t const*, + int32_t, + uint8_t const*, + int32_t, + uint8_t*, + int32_t); +wasm_trap_t* +lineKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using mptIssuanceKeylet_proto = + int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +wasm_trap_t* +mptIssuanceKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using mptokenKeylet_proto = int32_t( + uint8_t const*, + int32_t, + uint8_t const*, + int32_t, + uint8_t*, + int32_t); +wasm_trap_t* +mptokenKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using nftOfferKeylet_proto = + int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +wasm_trap_t* +nftOfferKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using offerKeylet_proto = + int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +wasm_trap_t* +offerKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using oracleKeylet_proto = + int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +wasm_trap_t* +oracleKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using paychanKeylet_proto = int32_t( + uint8_t const*, + int32_t, + uint8_t const*, + int32_t, + int32_t, + uint8_t*, + int32_t); +wasm_trap_t* +paychanKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using permissionedDomainKeylet_proto = + int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +wasm_trap_t* +permissionedDomainKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using signersKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); +wasm_trap_t* +signersKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using ticketKeylet_proto = + int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +wasm_trap_t* +ticketKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using vaultKeylet_proto = + int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +wasm_trap_t* +vaultKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using getNFT_proto = int32_t( + uint8_t const*, + int32_t, + uint8_t const*, + int32_t, + uint8_t*, + int32_t); +wasm_trap_t* +getNFT_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); + +using getNFTIssuer_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); +wasm_trap_t* +getNFTIssuer_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using getNFTTaxon_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); +wasm_trap_t* +getNFTTaxon_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using getNFTFlags_proto = int32_t(uint8_t const*, int32_t); +wasm_trap_t* +getNFTFlags_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using getNFTTransferFee_proto = int32_t(uint8_t const*, int32_t); +wasm_trap_t* +getNFTTransferFee_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using getNFTSerial_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); +wasm_trap_t* +getNFTSerial_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using trace_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, int32_t); +wasm_trap_t* +trace_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); + +using traceNum_proto = int32_t(uint8_t const*, int32_t, int64_t); +wasm_trap_t* +traceNum_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); + +using traceAccount_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t); +wasm_trap_t* +traceAccount_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using traceFloat_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t); +wasm_trap_t* +traceFloat_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using traceAmount_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t); +wasm_trap_t* +traceAmount_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using floatFromInt_proto = int32_t(int64_t, uint8_t*, int32_t, int32_t); +wasm_trap_t* +floatFromInt_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using floatFromUint_proto = + int32_t(uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); +wasm_trap_t* +floatFromUint_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using floatSet_proto = int32_t(int32_t, int64_t, uint8_t*, int32_t, int32_t); +wasm_trap_t* +floatSet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); + +using floatCompare_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t); +wasm_trap_t* +floatCompare_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using floatAdd_proto = int32_t( + uint8_t const*, + int32_t, + uint8_t const*, + int32_t, + uint8_t*, + int32_t, + int32_t); +wasm_trap_t* +floatAdd_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); + +using floatSubtract_proto = int32_t( + uint8_t const*, + int32_t, + uint8_t const*, + int32_t, + uint8_t*, + int32_t, + int32_t); +wasm_trap_t* +floatSubtract_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using floatMultiply_proto = int32_t( + uint8_t const*, + int32_t, + uint8_t const*, + int32_t, + uint8_t*, + int32_t, + int32_t); +wasm_trap_t* +floatMultiply_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using floatDivide_proto = int32_t( + uint8_t const*, + int32_t, + uint8_t const*, + int32_t, + uint8_t*, + int32_t, + int32_t); +wasm_trap_t* +floatDivide_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using floatRoot_proto = + int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t, int32_t); +wasm_trap_t* +floatRoot_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using floatPower_proto = + int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t, int32_t); +wasm_trap_t* +floatPower_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results); + +using floatLog_proto = + int32_t(uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); +wasm_trap_t* +floatLog_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); + +} // namespace ripple diff --git a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp new file mode 100644 index 0000000000..4b585acdcd --- /dev/null +++ b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp @@ -0,0 +1,1347 @@ +//------------------------------------------------------------------------------ +/* + This file is part of rippled: https://github.com/ripple/rippled + Copyright (c) 2012, 2013 Ripple Labs Inc. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ +//============================================================================== + +#include +#include +#include + +#include +#include + +#ifdef _DEBUG +// #define DEBUG_OUTPUT 1 +// #define DEBUG_OUTPUT_WAMR 1 +#endif + +namespace ripple { + +Expected +WasmHostFunctionsImpl::getLedgerSqn() +{ + auto seq = ctx.view().seq(); + if (seq > std::numeric_limits::max()) + return Unexpected(HostFunctionError::INTERNAL); // LCOV_EXCL_LINE + return static_cast(seq); +} + +Expected +WasmHostFunctionsImpl::getParentLedgerTime() +{ + auto time = ctx.view().parentCloseTime().time_since_epoch().count(); + if (time > std::numeric_limits::max()) + return Unexpected(HostFunctionError::INTERNAL); + return static_cast(time); +} + +Expected +WasmHostFunctionsImpl::getParentLedgerHash() +{ + return ctx.view().info().parentHash; +} + +Expected +WasmHostFunctionsImpl::getLedgerAccountHash() +{ + return ctx.view().info().accountHash; +} + +Expected +WasmHostFunctionsImpl::getLedgerTransactionHash() +{ + return ctx.view().info().txHash; +} + +Expected +WasmHostFunctionsImpl::getBaseFee() +{ + auto fee = ctx.view().fees().base.drops(); + if (fee > std::numeric_limits::max()) + return Unexpected(HostFunctionError::INTERNAL); + return static_cast(fee); +} + +Expected +WasmHostFunctionsImpl::isAmendmentEnabled(uint256 const& amendmentId) +{ + return ctx.view().rules().enabled(amendmentId); +} + +Expected +WasmHostFunctionsImpl::isAmendmentEnabled(std::string_view const& amendmentName) +{ + auto const& table = ctx.app.getAmendmentTable(); + auto const amendment = table.find(std::string(amendmentName)); + return ctx.view().rules().enabled(amendment); +} + +Expected +WasmHostFunctionsImpl::normalizeCacheIndex(int32_t cacheIdx) +{ + --cacheIdx; + if (cacheIdx < 0 || cacheIdx >= MAX_CACHE) + return Unexpected(HostFunctionError::SLOT_OUT_RANGE); + if (!cache[cacheIdx]) + return Unexpected(HostFunctionError::EMPTY_SLOT); + return cacheIdx; +} + +Expected +WasmHostFunctionsImpl::cacheLedgerObj(uint256 const& objId, int32_t cacheIdx) +{ + auto const& keylet = keylet::unchecked(objId); + if (cacheIdx < 0 || cacheIdx > MAX_CACHE) + return Unexpected(HostFunctionError::SLOT_OUT_RANGE); + + if (cacheIdx == 0) + { + for (cacheIdx = 0; cacheIdx < MAX_CACHE; ++cacheIdx) + if (!cache[cacheIdx]) + break; + } + else + { + cacheIdx--; // convert to 0-based index + } + + if (cacheIdx >= MAX_CACHE) + return Unexpected(HostFunctionError::SLOTS_FULL); + + cache[cacheIdx] = ctx.view().read(keylet); + if (!cache[cacheIdx]) + return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); + return cacheIdx + 1; // return 1-based index +} + +static Expected +getAnyFieldData(STBase const* obj) +{ + // auto const& fname = obj.getFName(); + if (!obj) + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + + auto const stype = obj->getSType(); + switch (stype) + { + // LCOV_EXCL_START + case STI_UNKNOWN: + case STI_NOTPRESENT: + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + break; + // LCOV_EXCL_STOP + case STI_OBJECT: + case STI_ARRAY: + return Unexpected(HostFunctionError::NOT_LEAF_FIELD); + break; + case STI_ACCOUNT: { + auto const* account(static_cast(obj)); + auto const& data = account->value(); + return Bytes{data.begin(), data.end()}; + } + break; + case STI_AMOUNT: + // will be processed by serializer + break; + case STI_ISSUE: { + auto const* issue(static_cast(obj)); + Asset const& asset(issue->value()); + // XRP and IOU will be processed by serializer + if (asset.holds()) + { + // MPT + auto const& mptIssue = asset.get(); + auto const& mptID = mptIssue.getMptID(); + return Bytes{mptID.cbegin(), mptID.cend()}; + } + } + break; + case STI_VL: { + auto const* vl(static_cast(obj)); + auto const& data = vl->value(); + return Bytes{data.begin(), data.end()}; + } + break; + case STI_UINT16: { + auto const& num(static_cast const*>(obj)); + std::uint16_t const data = num->value(); + auto const* b = reinterpret_cast(&data); + auto const* e = reinterpret_cast(&data + 1); + return Bytes{b, e}; + } + case STI_UINT32: { + auto const* num(static_cast const*>(obj)); + std::uint32_t const data = num->value(); + auto const* b = reinterpret_cast(&data); + auto const* e = reinterpret_cast(&data + 1); + return Bytes{b, e}; + } + break; + default: + break; // default to serializer + } + + Serializer msg; + obj->add(msg); + auto const data = msg.getData(); + + return data; +} + +Expected +WasmHostFunctionsImpl::getTxField(SField const& fname) +{ + return getAnyFieldData(ctx.tx.peekAtPField(fname)); +} + +Expected +WasmHostFunctionsImpl::getCurrentLedgerObjField(SField const& fname) +{ + auto const sle = getCurrentLedgerObj(); + if (!sle.has_value()) + return Unexpected(sle.error()); + return getAnyFieldData(sle.value()->peekAtPField(fname)); +} + +Expected +WasmHostFunctionsImpl::getLedgerObjField(int32_t cacheIdx, SField const& fname) +{ + auto const normalizedIdx = normalizeCacheIndex(cacheIdx); + if (!normalizedIdx.has_value()) + return Unexpected(normalizedIdx.error()); + return getAnyFieldData(cache[normalizedIdx.value()]->peekAtPField(fname)); +} + +static inline bool +noField(STBase const* field) +{ + return !field || (STI_NOTPRESENT == field->getSType()) || + (STI_UNKNOWN == field->getSType()); +} + +static Expected +locateField(STObject const& obj, Slice const& locator) +{ + if (locator.empty() || (locator.size() & 3)) // must be multiple of 4 + return Unexpected(HostFunctionError::LOCATOR_MALFORMED); + + int32_t const* locPtr = reinterpret_cast(locator.data()); + int32_t const locSize = locator.size() / 4; + STBase const* field = nullptr; + auto const& knownSFields = SField::getKnownCodeToField(); + + { + int32_t const sfieldCode = locPtr[0]; + auto const it = knownSFields.find(sfieldCode); + if (it == knownSFields.end()) + return Unexpected(HostFunctionError::INVALID_FIELD); + + auto const& fname(*it->second); + field = obj.peekAtPField(fname); + if (noField(field)) + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + } + + for (int i = 1; i < locSize; ++i) + { + int32_t const sfieldCode = locPtr[i]; + + if (STI_ARRAY == field->getSType()) + { + auto const* arr = static_cast(field); + if (sfieldCode >= arr->size()) + return Unexpected(HostFunctionError::INDEX_OUT_OF_BOUNDS); + field = &(arr->operator[](sfieldCode)); + } + else if (STI_OBJECT == field->getSType()) + { + auto const* o = static_cast(field); + + auto const it = knownSFields.find(sfieldCode); + if (it == knownSFields.end()) + return Unexpected(HostFunctionError::INVALID_FIELD); + + auto const& fname(*it->second); + field = o->peekAtPField(fname); + } + else // simple field must be the last one + { + return Unexpected(HostFunctionError::LOCATOR_MALFORMED); + } + + if (noField(field)) + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + } + + return field; +} + +Expected +WasmHostFunctionsImpl::getTxNestedField(Slice const& locator) +{ + auto const r = locateField(ctx.tx, locator); + if (!r) + return Unexpected(r.error()); + + return getAnyFieldData(r.value()); +} + +Expected +WasmHostFunctionsImpl::getCurrentLedgerObjNestedField(Slice const& locator) +{ + auto const sle = getCurrentLedgerObj(); + if (!sle.has_value()) + return Unexpected(sle.error()); + + auto const r = locateField(*sle.value(), locator); + if (!r) + return Unexpected(r.error()); + + return getAnyFieldData(r.value()); +} + +Expected +WasmHostFunctionsImpl::getLedgerObjNestedField( + int32_t cacheIdx, + Slice const& locator) +{ + auto const normalizedIdx = normalizeCacheIndex(cacheIdx); + if (!normalizedIdx.has_value()) + return Unexpected(normalizedIdx.error()); + + auto const r = locateField(*cache[normalizedIdx.value()], locator); + if (!r) + return Unexpected(r.error()); + + return getAnyFieldData(r.value()); +} + +Expected +WasmHostFunctionsImpl::getTxArrayLen(SField const& fname) +{ + if (fname.fieldType != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); + + auto const* field = ctx.tx.peekAtPField(fname); + if (noField(field)) + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + + if (field->getSType() != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); // LCOV_EXCL_LINE + int32_t const sz = static_cast(field)->size(); + + return sz; +} + +Expected +WasmHostFunctionsImpl::getCurrentLedgerObjArrayLen(SField const& fname) +{ + if (fname.fieldType != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); + + auto const sle = getCurrentLedgerObj(); + if (!sle.has_value()) + return Unexpected(sle.error()); + + auto const* field = sle.value()->peekAtPField(fname); + if (noField(field)) + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + + if (field->getSType() != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); // LCOV_EXCL_LINE + int32_t const sz = static_cast(field)->size(); + + return sz; +} + +Expected +WasmHostFunctionsImpl::getLedgerObjArrayLen( + int32_t cacheIdx, + SField const& fname) +{ + if (fname.fieldType != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); + + auto const normalizedIdx = normalizeCacheIndex(cacheIdx); + if (!normalizedIdx.has_value()) + return Unexpected(normalizedIdx.error()); + + auto const* field = cache[normalizedIdx.value()]->peekAtPField(fname); + if (noField(field)) + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + + if (field->getSType() != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); // LCOV_EXCL_LINE + + int32_t const sz = static_cast(field)->size(); + + return sz; +} + +Expected +WasmHostFunctionsImpl::getTxNestedArrayLen(Slice const& locator) +{ + auto const r = locateField(ctx.tx, locator); + if (!r) + return Unexpected(r.error()); + + auto const* field = r.value(); + if (field->getSType() != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); + int32_t const sz = static_cast(field)->size(); + + return sz; +} + +Expected +WasmHostFunctionsImpl::getCurrentLedgerObjNestedArrayLen(Slice const& locator) +{ + auto const sle = getCurrentLedgerObj(); + if (!sle.has_value()) + return Unexpected(sle.error()); + auto const r = locateField(*sle.value(), locator); + if (!r) + return Unexpected(r.error()); + + auto const* field = r.value(); + if (field->getSType() != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); + int32_t const sz = static_cast(field)->size(); + + return sz; +} + +Expected +WasmHostFunctionsImpl::getLedgerObjNestedArrayLen( + int32_t cacheIdx, + Slice const& locator) +{ + auto const normalizedIdx = normalizeCacheIndex(cacheIdx); + if (!normalizedIdx.has_value()) + return Unexpected(normalizedIdx.error()); + + auto const r = locateField(*cache[normalizedIdx.value()], locator); + if (!r) + return Unexpected(r.error()); + + auto const* field = r.value(); + if (field->getSType() != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); + int32_t const sz = static_cast(field)->size(); + + return sz; +} + +Expected +WasmHostFunctionsImpl::updateData(Slice const& data) +{ + if (data.size() > maxWasmDataLength) + { + return Unexpected(HostFunctionError::DATA_FIELD_TOO_LARGE); + } + data_ = Bytes(data.begin(), data.end()); + return 0; +} + +Expected +WasmHostFunctionsImpl::checkSignature( + Slice const& message, + Slice const& signature, + Slice const& pubkey) +{ + if (!publicKeyType(pubkey)) + return Unexpected(HostFunctionError::INVALID_PARAMS); + + PublicKey const pk(pubkey); + return verify(pk, message, signature, /*canonical*/ true); +} + +Expected +WasmHostFunctionsImpl::computeSha512HalfHash(Slice const& data) +{ + auto const hash = sha512Half(data); + return hash; +} + +Expected +WasmHostFunctionsImpl::accountKeylet(AccountID const& account) +{ + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::account(account); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::ammKeylet(Asset const& issue1, Asset const& issue2) +{ + if (issue1 == issue2) + return Unexpected(HostFunctionError::INVALID_PARAMS); + + // note: this should be removed with the MPT DEX amendment + if (issue1.holds() || issue2.holds()) + return Unexpected(HostFunctionError::INVALID_PARAMS); + + auto const keylet = keylet::amm(issue1, issue2); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::checkKeylet(AccountID const& account, std::uint32_t seq) +{ + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::check(account, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::credentialKeylet( + AccountID const& subject, + AccountID const& issuer, + Slice const& credentialType) +{ + if (!subject || !issuer) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + + if (credentialType.empty() || + credentialType.size() > maxCredentialTypeLength) + return Unexpected(HostFunctionError::INVALID_PARAMS); + + auto const keylet = keylet::credential(subject, issuer, credentialType); + + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::didKeylet(AccountID const& account) +{ + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::did(account); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::delegateKeylet( + AccountID const& account, + AccountID const& authorize) +{ + if (!account || !authorize) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + if (account == authorize) + return Unexpected(HostFunctionError::INVALID_PARAMS); + auto const keylet = keylet::delegate(account, authorize); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::depositPreauthKeylet( + AccountID const& account, + AccountID const& authorize) +{ + if (!account || !authorize) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + if (account == authorize) + return Unexpected(HostFunctionError::INVALID_PARAMS); + auto const keylet = keylet::depositPreauth(account, authorize); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::escrowKeylet(AccountID const& account, std::uint32_t seq) +{ + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::escrow(account, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::lineKeylet( + AccountID const& account1, + AccountID const& account2, + Currency const& currency) +{ + if (!account1 || !account2) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + if (account1 == account2) + return Unexpected(HostFunctionError::INVALID_PARAMS); + if (currency.isZero()) + return Unexpected(HostFunctionError::INVALID_PARAMS); + + auto const keylet = keylet::line(account1, account2, currency); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::mptIssuanceKeylet( + AccountID const& issuer, + std::uint32_t seq) +{ + if (!issuer) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + + auto const keylet = keylet::mptIssuance(seq, issuer); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::mptokenKeylet( + MPTID const& mptid, + AccountID const& holder) +{ + if (!mptid) + return Unexpected(HostFunctionError::INVALID_PARAMS); + if (!holder) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + + auto const keylet = keylet::mptoken(mptid, holder); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::nftOfferKeylet( + AccountID const& account, + std::uint32_t seq) +{ + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::nftoffer(account, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::offerKeylet(AccountID const& account, std::uint32_t seq) +{ + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::offer(account, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::oracleKeylet( + AccountID const& account, + std::uint32_t documentId) +{ + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::oracle(account, documentId); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::paychanKeylet( + AccountID const& account, + AccountID const& destination, + std::uint32_t seq) +{ + if (!account || !destination) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + if (account == destination) + return Unexpected(HostFunctionError::INVALID_PARAMS); + auto const keylet = keylet::payChan(account, destination, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::permissionedDomainKeylet( + AccountID const& account, + std::uint32_t seq) +{ + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::permissionedDomain(account, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::signersKeylet(AccountID const& account) +{ + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::signers(account); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::ticketKeylet(AccountID const& account, std::uint32_t seq) +{ + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::ticket(account, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::vaultKeylet(AccountID const& account, std::uint32_t seq) +{ + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::vault(account, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::getNFT(AccountID const& account, uint256 const& nftId) +{ + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + + if (!nftId) + return Unexpected(HostFunctionError::INVALID_PARAMS); + + auto obj = nft::findToken(ctx.view(), account, nftId); + if (!obj) + return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); + + auto ouri = obj->at(~sfURI); + if (!ouri) + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + + Slice const s = ouri->value(); + return Bytes(s.begin(), s.end()); +} + +Expected +WasmHostFunctionsImpl::getNFTIssuer(uint256 const& nftId) +{ + auto const issuer = nft::getIssuer(nftId); + if (!issuer) + return Unexpected(HostFunctionError::INVALID_PARAMS); + + return Bytes{issuer.begin(), issuer.end()}; +} + +Expected +WasmHostFunctionsImpl::getNFTTaxon(uint256 const& nftId) +{ + return nft::toUInt32(nft::getTaxon(nftId)); +} + +Expected +WasmHostFunctionsImpl::getNFTFlags(uint256 const& nftId) +{ + return nft::getFlags(nftId); +} + +Expected +WasmHostFunctionsImpl::getNFTTransferFee(uint256 const& nftId) +{ + return nft::getTransferFee(nftId); +} + +Expected +WasmHostFunctionsImpl::getNFTSerial(uint256 const& nftId) +{ + return nft::getSerial(nftId); +} + +Expected +WasmHostFunctionsImpl::trace( + std::string_view const& msg, + Slice const& data, + bool asHex) +{ +#ifdef DEBUG_OUTPUT + auto j = getJournal().error(); +#else + auto j = getJournal().trace(); +#endif + if (!asHex) + { + j << "WAMR TRACE (" << leKey.key << "): " << msg << " " + << std::string_view( + reinterpret_cast(data.data()), data.size()); + } + else + { + std::string hex; + hex.reserve(data.size() * 2); + boost::algorithm::hex( + data.begin(), data.end(), std::back_inserter(hex)); + j << "WAMR DEV TRACE (" << leKey.key << "): " << msg << " " << hex; + } + + return msg.size() + data.size() * (asHex ? 2 : 1); +} + +Expected +WasmHostFunctionsImpl::traceNum(std::string_view const& msg, int64_t data) +{ +#ifdef DEBUG_OUTPUT + auto j = getJournal().error(); +#else + auto j = getJournal().trace(); +#endif + j << "WAMR TRACE NUM(" << leKey.key << "): " << msg << " " << data; + return msg.size() + sizeof(data); +} + +Expected +WasmHostFunctionsImpl::traceAccount( + std::string_view const& msg, + AccountID const& account) +{ +#ifdef DEBUG_OUTPUT + auto j = getJournal().error(); +#else + auto j = getJournal().trace(); +#endif + + auto const accountStr = toBase58(account); + + j << "WAMR TRACE ACCOUNT(" << leKey.key << "): " << msg << " " + << accountStr; + return msg.size() + accountStr.size(); +} + +Expected +WasmHostFunctionsImpl::traceFloat( + std::string_view const& msg, + Slice const& data) +{ +#ifdef DEBUG_OUTPUT + auto j = getJournal().error(); +#else + auto j = getJournal().trace(); +#endif + auto const s = floatToString(data); + j << "WAMR TRACE FLOAT(" << leKey.key << "): " << msg << " " << s; + return msg.size() + s.size(); +} + +Expected +WasmHostFunctionsImpl::traceAmount( + std::string_view const& msg, + STAmount const& amount) +{ +#ifdef DEBUG_OUTPUT + auto j = getJournal().error(); +#else + auto j = getJournal().trace(); +#endif + auto const amountStr = amount.getFullText(); + j << "WAMR TRACE AMOUNT(" << leKey.key << "): " << msg << " " << amountStr; + return msg.size() + amountStr.size(); +} + +Expected +WasmHostFunctionsImpl::floatFromInt(int64_t x, int32_t mode) +{ + return floatFromIntImpl(x, mode); +} + +Expected +WasmHostFunctionsImpl::floatFromUint(uint64_t x, int32_t mode) +{ + return floatFromUintImpl(x, mode); +} + +Expected +WasmHostFunctionsImpl::floatSet( + int64_t mantissa, + int32_t exponent, + int32_t mode) +{ + return floatSetImpl(mantissa, exponent, mode); +} + +Expected +WasmHostFunctionsImpl::floatCompare(Slice const& x, Slice const& y) +{ + return floatCompareImpl(x, y); +} + +Expected +WasmHostFunctionsImpl::floatAdd(Slice const& x, Slice const& y, int32_t mode) +{ + return floatAddImpl(x, y, mode); +} + +Expected +WasmHostFunctionsImpl::floatSubtract( + Slice const& x, + Slice const& y, + int32_t mode) +{ + return floatSubtractImpl(x, y, mode); +} + +Expected +WasmHostFunctionsImpl::floatMultiply( + Slice const& x, + Slice const& y, + int32_t mode) +{ + return floatMultiplyImpl(x, y, mode); +} + +Expected +WasmHostFunctionsImpl::floatDivide(Slice const& x, Slice const& y, int32_t mode) +{ + return floatDivideImpl(x, y, mode); +} + +Expected +WasmHostFunctionsImpl::floatRoot(Slice const& x, int32_t n, int32_t mode) +{ + return floatRootImpl(x, n, mode); +} + +Expected +WasmHostFunctionsImpl::floatPower(Slice const& x, int32_t n, int32_t mode) +{ + return floatPowerImpl(x, n, mode); +} + +Expected +WasmHostFunctionsImpl::floatLog(Slice const& x, int32_t mode) +{ + return floatLogImpl(x, mode); +} + +class Number2 : public Number +{ +protected: + static Bytes const FLOAT_NULL; + + bool good_; + +public: + Number2(Slice const& data) : Number(), good_(false) + { + if (data.size() != 8) + return; + + if (std::ranges::equal(FLOAT_NULL, data)) + { + good_ = true; + return; + } + + uint64_t const v = SerialIter(data).get64(); + if (!(v & STAmount::cIssuedCurrency)) + return; + + int64_t const neg = (v & STAmount::cPositive) ? 1 : -1; + int32_t const e = static_cast((v >> (64 - 10)) & 0xFFull); + if (e < 1 || e > 177) + return; + + int64_t const m = neg * static_cast(v & ((1ull << 54) - 1)); + if (!m) + return; + + Number x(m, e + IOUAmount::minExponent - 1); + *static_cast(this) = x; + good_ = true; + } + + Number2() : Number(), good_(true) + { + } + + Number2(int64_t x) : Number(x), good_(true) + { + } + + Number2(uint64_t x) : Number(0), good_(false) + { + using mtype = std::invoke_result_t; + if (x <= std::numeric_limits::max()) + *this = Number(x); + else + *this = Number(x / 10, 1) + Number(x % 10); + + good_ = true; + } + + Number2(int64_t mantissa, int32_t exponent) + : Number(mantissa, exponent), good_(true) + { + } + + Number2(Number const& n) : Number(n), good_(true) + { + } + + operator bool() const + { + return good_; + } + + Expected + toBytes() const + { + uint64_t v = mantissa() >= 0 ? STAmount::cPositive : 0; + v |= STAmount::cIssuedCurrency; + + uint64_t const absM = mantissa() >= 0 ? mantissa() : -mantissa(); + if (!absM) + { + using etype = + std::invoke_result_t; + if (exponent() != std::numeric_limits::lowest()) + { + return Unexpected( + HostFunctionError:: + FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_LINE + } + return FLOAT_NULL; + } + else if (absM > ((1ull << 54) - 1)) + { + return Unexpected( + HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_LINE + } + else if (exponent() > IOUAmount::maxExponent) + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + else if (exponent() < IOUAmount::minExponent) + return FLOAT_NULL; + + int const e = exponent() - IOUAmount::minExponent + 1; //+97 + v |= absM; + v |= ((uint64_t)e) << 54; + + Serializer msg; + msg.add64(v); + auto const data = msg.getData(); + +#ifdef DEBUG_OUTPUT + std::cout << "m: " << std::setw(20) << mantissa() + << ", e: " << std::setw(12) << exponent() << ", hex: "; + std::cout << std::hex << std::uppercase << std::setfill('0'); + for (auto const& c : data) + std::cout << std::setw(2) << (unsigned)c << " "; + std::cout << std::dec << std::setfill(' ') << std::endl; +#endif + + return data; + } +}; + +Bytes const Number2::FLOAT_NULL = + {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +struct SetRound +{ + Number::rounding_mode oldMode_; + bool good_; + + SetRound(int32_t mode) : oldMode_(Number::getround()), good_(false) + { + if (mode < Number::rounding_mode::to_nearest || + mode > Number::rounding_mode::upward) + return; + + Number::setround(static_cast(mode)); + good_ = true; + } + + ~SetRound() + { + Number::setround(oldMode_); + } + + operator bool() const + { + return good_; + } +}; + +std::string +floatToString(Slice const& data) +{ + Number2 const num(data); + if (!num) + { + std::string hex; + hex.reserve(data.size() * 2); + boost::algorithm::hex( + data.begin(), data.end(), std::back_inserter(hex)); + return "Invalid data: " + hex; + } + + auto const s = to_string(num); + return s; +} + +Expected +floatFromIntImpl(int64_t x, int32_t mode) +{ + try + { + SetRound rm(mode); + if (!rm) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + Number2 num(x); + return num.toBytes(); + } + // LCOV_EXCL_START + catch (...) + { + } + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + // LCOV_EXCL_STOP +} + +Expected +floatFromUintImpl(uint64_t x, int32_t mode) +{ + try + { + SetRound rm(mode); + if (!rm) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + Number2 num(x); + return num.toBytes(); + } + // LCOV_EXCL_START + catch (...) + { + } + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + // LCOV_EXCL_STOP +} + +Expected +floatSetImpl(int64_t mantissa, int32_t exponent, int32_t mode) +{ + try + { + SetRound rm(mode); + if (!rm) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + Number2 num(mantissa, exponent); + return num.toBytes(); + } + catch (...) + { + } + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); +} + +Expected +floatCompareImpl(Slice const& x, Slice const& y) +{ + try + { + Number2 xx(x); + if (!xx) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + Number2 yy(y); + if (!yy) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return xx < yy ? 2 : (xx == yy ? 0 : 1); + } + // LCOV_EXCL_START + catch (...) + { + } + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + // LCOV_EXCL_STOP +} + +Expected +floatAddImpl(Slice const& x, Slice const& y, int32_t mode) +{ + try + { + SetRound rm(mode); + if (!rm) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + Number2 xx(x); + if (!xx) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + Number2 yy(y); + if (!yy) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + Number2 res = xx + yy; + + return res.toBytes(); + } + // LCOV_EXCL_START + catch (...) + { + } + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + // LCOV_EXCL_STOP +} + +Expected +floatSubtractImpl(Slice const& x, Slice const& y, int32_t mode) +{ + try + { + SetRound rm(mode); + if (!rm) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + Number2 xx(x); + if (!xx) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + Number2 yy(y); + if (!yy) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + Number2 res = xx - yy; + + return res.toBytes(); + } + // LCOV_EXCL_START + catch (...) + { + } + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + // LCOV_EXCL_STOP +} + +Expected +floatMultiplyImpl(Slice const& x, Slice const& y, int32_t mode) +{ + try + { + SetRound rm(mode); + if (!rm) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + Number2 xx(x); + if (!xx) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + Number2 yy(y); + if (!yy) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + Number2 res = xx * yy; + + return res.toBytes(); + } + // LCOV_EXCL_START + catch (...) + { + } + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + // LCOV_EXCL_STOP +} + +Expected +floatDivideImpl(Slice const& x, Slice const& y, int32_t mode) +{ + try + { + SetRound rm(mode); + if (!rm) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + Number2 xx(x); + if (!xx) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + Number2 yy(y); + if (!yy) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + Number2 res = xx / yy; + + return res.toBytes(); + } + catch (...) + { + } + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); +} + +Expected +floatRootImpl(Slice const& x, int32_t n, int32_t mode) +{ + try + { + if (n < 1) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + SetRound rm(mode); + if (!rm) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + Number2 xx(x); + if (!xx) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + Number2 res(root(xx, n)); + + return res.toBytes(); + } + // LCOV_EXCL_START + catch (...) + { + } + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + // LCOV_EXCL_STOP +} + +Expected +floatPowerImpl(Slice const& x, int32_t n, int32_t mode) +{ + try + { + if (n < 0) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + SetRound rm(mode); + if (!rm) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + Number2 xx(x); + if (!xx) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + if (xx == Number() && !n) + return Unexpected(HostFunctionError::INVALID_PARAMS); + + Number2 res(power(xx, n, 1)); + + return res.toBytes(); + } + catch (...) + { + } + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); +} + +Expected +floatLogImpl(Slice const& x, int32_t mode) +{ + try + { + SetRound rm(mode); + if (!rm) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + Number2 xx(x); + if (!xx) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + Number2 res(lg(xx)); + + return res.toBytes(); + } + // LCOV_EXCL_START + catch (...) + { + } + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + // LCOV_EXCL_STOP +} + +} // namespace ripple diff --git a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp new file mode 100644 index 0000000000..1bd9622a4c --- /dev/null +++ b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp @@ -0,0 +1,2065 @@ +//------------------------------------------------------------------------------ +/* + This file is part of rippled: https://github.com/ripple/rippled + Copyright (c) 2012, 2013 Ripple Labs Inc. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ +//============================================================================== + +#include +#include +#include +#include + +#include +#include +#include + +namespace ripple { + +using SFieldCRef = std::reference_wrapper; + +static int32_t +setData( + InstanceWrapper const* runtime, + int32_t dst, + int32_t dstSize, + uint8_t const* src, + int32_t srcSize) +{ + if (!srcSize) + return 0; // LCOV_EXCL_LINE + + if (dst < 0 || dstSize < 0 || !src || srcSize < 0) + return HfErrorToInt(HostFunctionError::INVALID_PARAMS); + + auto memory = runtime ? runtime->getMem() : wmem(); + + // LCOV_EXCL_START + if (!memory.s) + return HfErrorToInt(HostFunctionError::NO_MEM_EXPORTED); + // LCOV_EXCL_STOP + if (dst + dstSize > memory.s) + return HfErrorToInt(HostFunctionError::POINTER_OUT_OF_BOUNDS); + if (srcSize > dstSize) + return HfErrorToInt(HostFunctionError::BUFFER_TOO_SMALL); + + memcpy(memory.p + dst, src, srcSize); + + return srcSize; +} + +template +Expected +getDataInt32(IW const* _runtime, wasm_val_vec_t const* params, int32_t& i) +{ + auto const result = params->data[i].of.i32; + i++; + return result; +} + +template +Expected +getDataInt64(IW const* _runtime, wasm_val_vec_t const* params, int32_t& i) +{ + auto const result = params->data[i].of.i64; + i++; + return result; +} + +template +Expected +getDataUInt64(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) +{ + auto const r = getDataSlice(runtime, params, i); + if (!r) + return Unexpected(r.error()); + if (r->size() != sizeof(uint64_t)) + return Unexpected(HostFunctionError::INVALID_PARAMS); + + return *reinterpret_cast(r->data()); +} + +template +Expected +getDataSField(IW const* _runtime, wasm_val_vec_t const* params, int32_t& i) +{ + auto const& m = SField::getKnownCodeToField(); + auto const it = m.find(params->data[i].of.i32); + if (it == m.end()) + { + return Unexpected(HostFunctionError::INVALID_FIELD); + } + i++; + return *it->second; +} + +template +Expected +getDataSlice(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) +{ + auto const ptr = params->data[i].of.i32; + auto const size = params->data[i + 1].of.i32; + if (ptr < 0 || size < 0) + return Unexpected(HostFunctionError::INVALID_PARAMS); + + if (!size) + return Slice(); + + if (size > maxWasmDataLength) + return Unexpected(HostFunctionError::DATA_FIELD_TOO_LARGE); + + auto memory = runtime ? runtime->getMem() : wmem(); + // LCOV_EXCL_START + if (!memory.s) + return Unexpected(HostFunctionError::NO_MEM_EXPORTED); + // LCOV_EXCL_STOP + + if (ptr + size > memory.s) + return Unexpected(HostFunctionError::POINTER_OUT_OF_BOUNDS); + + Slice data(memory.p + ptr, size); + i += 2; + return data; +} + +template +Expected +getDataUInt256(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) +{ + auto const slice = getDataSlice(runtime, params, i); + if (!slice) + { + return Unexpected(slice.error()); + } + + if (slice->size() != uint256::bytes) + { + return Unexpected(HostFunctionError::INVALID_PARAMS); + } + return uint256::fromVoid(slice->data()); +} + +template +Expected +getDataAccountID(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) +{ + auto const slice = getDataSlice(runtime, params, i); + if (!slice) + { + return Unexpected(slice.error()); + } + + if (slice->size() != AccountID::bytes) + { + return Unexpected(HostFunctionError::INVALID_PARAMS); + } + + return AccountID::fromVoid(slice->data()); +} + +template +static Expected +getDataCurrency(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) +{ + auto const slice = getDataSlice(runtime, params, i); + if (!slice) + { + return Unexpected(slice.error()); + } + + if (slice->size() != Currency::bytes) + { + return Unexpected(HostFunctionError::INVALID_PARAMS); + } + + return Currency::fromVoid(slice->data()); +} + +template +static Expected +getDataAsset(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) +{ + auto const slice = getDataSlice(runtime, params, i); + if (!slice) + { + return Unexpected(slice.error()); + } + + if (slice->size() == MPTID::bytes) + { + auto const mptid = MPTID::fromVoid(slice->data()); + return Asset{mptid}; + } + + if (slice->size() == Currency::bytes) + { + auto const currency = Currency::fromVoid(slice->data()); + auto const issue = Issue{currency, xrpAccount()}; + if (!issue.native()) + return Unexpected(HostFunctionError::INVALID_PARAMS); + return Asset{issue}; + } + + if (slice->size() == (AccountID::bytes + Currency::bytes)) + { + auto const issue = Issue( + Currency::fromVoid(slice->data()), + AccountID::fromVoid(slice->data() + Currency::bytes)); + + if (issue.native()) + return Unexpected(HostFunctionError::INVALID_PARAMS); + return Asset{issue}; + } + + return Unexpected(HostFunctionError::INVALID_PARAMS); +} + +template +Expected +getDataString(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) +{ + auto const slice = getDataSlice(runtime, params, i); + if (!slice) + return Unexpected(slice.error()); + return std::string_view( + reinterpret_cast(slice->data()), slice->size()); +} + +std::nullptr_t +hfResult(wasm_val_vec_t* results, int32_t value) +{ + results->data[0] = WASM_I32_VAL(value); + results->num_elems = 1; + return nullptr; +} + +std::nullptr_t +hfResult(wasm_val_vec_t* results, HostFunctionError value) +{ + results->data[0] = WASM_I32_VAL(HfErrorToInt(value)); + results->num_elems = 1; + return nullptr; +} + +template +std::nullptr_t +returnResult( + InstanceWrapper const* runtime, + wasm_val_vec_t const* params, + wasm_val_vec_t* results, + Expected const& res, + int32_t index) +{ + if (!res) + { + return hfResult(results, res.error()); + } + + using t = std::decay_t; + if constexpr (std::is_same_v) + { + return hfResult( + results, + setData( + runtime, + params->data[index].of.i32, + params->data[index + 1].of.i32, + res->data(), + res->size())); + } + else if constexpr (std::is_same_v) + { + return hfResult( + results, + setData( + runtime, + params->data[index].of.i32, + params->data[index + 1].of.i32, + res->data(), + res->size())); + } + else if constexpr (std::is_same_v) + { + return hfResult(results, res.value()); + } + else if constexpr (std::is_same_v) + { + auto const resultValue = res.value(); + return hfResult( + results, + setData( + runtime, + params->data[index].of.i32, + params->data[index + 1].of.i32, + reinterpret_cast(&resultValue), + static_cast(sizeof(resultValue)))); + } + else + { + static_assert( + [] { return false; }(), "Unhandled return type in returnResult"); + } +} + +wasm_trap_t* +getLedgerSqn_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + return returnResult(runtime, params, results, hf->getLedgerSqn(), index); +} + +wasm_trap_t* +getParentLedgerTime_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + return returnResult( + runtime, params, results, hf->getParentLedgerTime(), index); +} + +wasm_trap_t* +getParentLedgerHash_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + return returnResult( + runtime, params, results, hf->getParentLedgerHash(), index); +} + +wasm_trap_t* +getLedgerAccountHash_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + return returnResult( + runtime, params, results, hf->getLedgerAccountHash(), index); +} + +wasm_trap_t* +getLedgerTransactionHash_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + return returnResult( + runtime, params, results, hf->getLedgerTransactionHash(), index); +} + +wasm_trap_t* +getBaseFee_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + return returnResult(runtime, params, results, hf->getBaseFee(), index); +} + +wasm_trap_t* +isAmendmentEnabled_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const slice = getDataSlice(runtime, params, index); + if (!slice) + { + return hfResult(results, slice.error()); + } + + if (slice->size() == uint256::bytes) + { + if (auto ret = hf->isAmendmentEnabled(uint256::fromVoid(slice->data())); + *ret == 1) + { + return returnResult(runtime, params, results, ret, index); + } + } + + if (slice->size() > 64) + { + return hfResult(results, HostFunctionError::DATA_FIELD_TOO_LARGE); + } + + auto const str = std::string_view( + reinterpret_cast(slice->data()), slice->size()); + return returnResult( + runtime, params, results, hf->isAmendmentEnabled(str), index); +} + +wasm_trap_t* +cacheLedgerObj_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const id = getDataUInt256(runtime, params, index); + if (!id) + { + return hfResult(results, id.error()); + } + + auto const cache = getDataInt32(runtime, params, index); + if (!cache) + { + return hfResult(results, cache.error()); // LCOV_EXCL_LINE + } + + return returnResult( + runtime, params, results, hf->cacheLedgerObj(*id, *cache), index); +} + +wasm_trap_t* +getTxField_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const fname = getDataSField(runtime, params, index); + if (!fname) + { + return hfResult(results, fname.error()); + } + return returnResult( + runtime, params, results, hf->getTxField(*fname), index); +} + +wasm_trap_t* +getCurrentLedgerObjField_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const fname = getDataSField(runtime, params, index); + if (!fname) + { + return hfResult(results, fname.error()); + } + + return returnResult( + runtime, params, results, hf->getCurrentLedgerObjField(*fname), index); +} + +wasm_trap_t* +getLedgerObjField_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const cache = getDataInt32(runtime, params, index); + if (!cache) + { + return hfResult(results, cache.error()); // LCOV_EXCL_LINE + } + + auto const fname = getDataSField(runtime, params, index); + if (!fname) + { + return hfResult(results, fname.error()); + } + + return returnResult( + runtime, params, results, hf->getLedgerObjField(*cache, *fname), index); +} + +wasm_trap_t* +getTxNestedField_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const bytes = getDataSlice(runtime, params, index); + if (!bytes) + { + return hfResult(results, bytes.error()); + } + + return returnResult( + runtime, params, results, hf->getTxNestedField(*bytes), index); +} + +wasm_trap_t* +getCurrentLedgerObjNestedField_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const bytes = getDataSlice(runtime, params, index); + if (!bytes) + { + return hfResult(results, bytes.error()); + } + return returnResult( + runtime, + params, + results, + hf->getCurrentLedgerObjNestedField(*bytes), + index); +} + +wasm_trap_t* +getLedgerObjNestedField_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const cache = getDataInt32(runtime, params, index); + if (!cache) + { + return hfResult(results, cache.error()); // LCOV_EXCL_LINE + } + + auto const bytes = getDataSlice(runtime, params, index); + if (!bytes) + { + return hfResult(results, bytes.error()); + } + + return returnResult( + runtime, + params, + results, + hf->getLedgerObjNestedField(*cache, *bytes), + index); +} + +wasm_trap_t* +getTxArrayLen_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const fname = getDataSField(runtime, params, index); + if (!fname) + { + return hfResult(results, fname.error()); + } + + return returnResult( + runtime, params, results, hf->getTxArrayLen(*fname), index); +} + +wasm_trap_t* +getCurrentLedgerObjArrayLen_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const fname = getDataSField(runtime, params, index); + if (!fname) + { + return hfResult(results, fname.error()); + } + + return returnResult( + runtime, + params, + results, + hf->getCurrentLedgerObjArrayLen(*fname), + index); +} + +wasm_trap_t* +getLedgerObjArrayLen_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const cache = getDataInt32(runtime, params, index); + if (!cache) + { + return hfResult(results, cache.error()); // LCOV_EXCL_LINE + } + + auto const fname = getDataSField(runtime, params, index); + if (!fname) + { + return hfResult(results, fname.error()); + } + + return returnResult( + runtime, + params, + results, + hf->getLedgerObjArrayLen(*cache, *fname), + index); +} + +wasm_trap_t* +getTxNestedArrayLen_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const bytes = getDataSlice(runtime, params, index); + if (!bytes) + { + return hfResult(results, bytes.error()); + } + + return returnResult( + runtime, params, results, hf->getTxNestedArrayLen(*bytes), index); +} + +wasm_trap_t* +getCurrentLedgerObjNestedArrayLen_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const bytes = getDataSlice(runtime, params, index); + if (!bytes) + { + return hfResult(results, bytes.error()); + } + + return returnResult( + runtime, + params, + results, + hf->getCurrentLedgerObjNestedArrayLen(*bytes), + index); +} +wasm_trap_t* +getLedgerObjNestedArrayLen_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const cache = getDataInt32(runtime, params, index); + if (!cache) + { + return hfResult(results, cache.error()); // LCOV_EXCL_LINE + } + + auto const bytes = getDataSlice(runtime, params, index); + if (!bytes) + { + return hfResult(results, bytes.error()); + } + return returnResult( + runtime, + params, + results, + hf->getLedgerObjNestedArrayLen(*cache, *bytes), + index); +} + +wasm_trap_t* +updateData_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const bytes = getDataSlice(runtime, params, index); + if (!bytes) + { + return hfResult(results, bytes.error()); + } + + return returnResult( + runtime, params, results, hf->updateData(*bytes), index); +} + +wasm_trap_t* +checkSignature_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const message = getDataSlice(runtime, params, index); + if (!message) + { + return hfResult(results, message.error()); + } + + auto const signature = getDataSlice(runtime, params, index); + if (!signature) + { + return hfResult(results, signature.error()); + } + + auto const pubkey = getDataSlice(runtime, params, index); + if (!pubkey) + { + return hfResult(results, pubkey.error()); + } + + return returnResult( + runtime, + params, + results, + hf->checkSignature(*message, *signature, *pubkey), + index); +} + +wasm_trap_t* +computeSha512HalfHash_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const bytes = getDataSlice(runtime, params, index); + if (!bytes) + { + return hfResult(results, bytes.error()); + } + return returnResult( + runtime, params, results, hf->computeSha512HalfHash(*bytes), index); +} + +wasm_trap_t* +accountKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const acc = getDataAccountID(runtime, params, index); + if (!acc) + { + return hfResult(results, acc.error()); + } + + return returnResult( + runtime, params, results, hf->accountKeylet(*acc), index); +} + +wasm_trap_t* +ammKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const issue1 = getDataAsset(runtime, params, index); + if (!issue1) + { + return hfResult(results, issue1.error()); + } + + auto const issue2 = getDataAsset(runtime, params, index); + if (!issue2) + { + return hfResult(results, issue2.error()); + } + + return returnResult( + runtime, + params, + results, + hf->ammKeylet(issue1.value(), issue2.value()), + index); +} + +wasm_trap_t* +checkKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const acc = getDataAccountID(runtime, params, index); + if (!acc) + { + return hfResult(results, acc.error()); + } + + auto const seq = getDataInt32(runtime, params, index); + if (!seq) + { + return hfResult(results, seq.error()); // LCOV_EXCL_LINE + } + + return returnResult( + runtime, params, results, hf->checkKeylet(acc.value(), *seq), index); +} + +wasm_trap_t* +credentialKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const subj = getDataAccountID(runtime, params, index); + if (!subj) + { + return hfResult(results, subj.error()); + } + + auto const iss = getDataAccountID(runtime, params, index); + if (!iss) + { + return hfResult(results, iss.error()); + } + + auto const credType = getDataSlice(runtime, params, index); + if (!credType) + { + return hfResult(results, credType.error()); + } + + return returnResult( + runtime, + params, + results, + hf->credentialKeylet(*subj, *iss, *credType), + index); +} + +wasm_trap_t* +delegateKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const acc = getDataAccountID(runtime, params, index); + if (!acc) + { + return hfResult(results, acc.error()); + } + + auto const authorize = getDataAccountID(runtime, params, index); + if (!authorize) + { + return hfResult(results, authorize.error()); + } + + return returnResult( + runtime, + params, + results, + hf->delegateKeylet(acc.value(), authorize.value()), + index); +} + +wasm_trap_t* +depositPreauthKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const acc = getDataAccountID(runtime, params, index); + if (!acc) + { + return hfResult(results, acc.error()); + } + + auto const authorize = getDataAccountID(runtime, params, index); + if (!authorize) + { + return hfResult(results, authorize.error()); + } + + return returnResult( + runtime, + params, + results, + hf->depositPreauthKeylet(acc.value(), authorize.value()), + index); +} + +wasm_trap_t* +didKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const acc = getDataAccountID(runtime, params, index); + if (!acc) + { + return hfResult(results, acc.error()); + } + + return returnResult( + runtime, params, results, hf->didKeylet(acc.value()), index); +} + +wasm_trap_t* +escrowKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const acc = getDataAccountID(runtime, params, index); + if (!acc) + { + return hfResult(results, acc.error()); + } + + auto const seq = getDataInt32(runtime, params, index); + if (!seq) + { + return hfResult(results, seq.error()); // LCOV_EXCL_LINE + } + + return returnResult( + runtime, params, results, hf->escrowKeylet(*acc, *seq), index); +} + +wasm_trap_t* +lineKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const acc1 = getDataAccountID(runtime, params, index); + if (!acc1) + { + return hfResult(results, acc1.error()); + } + + auto const acc2 = getDataAccountID(runtime, params, index); + if (!acc2) + { + return hfResult(results, acc2.error()); + } + + auto const currency = getDataCurrency(runtime, params, index); + if (!currency) + { + return hfResult(results, currency.error()); + } + + return returnResult( + runtime, + params, + results, + hf->lineKeylet(acc1.value(), acc2.value(), currency.value()), + index); +} + +wasm_trap_t* +mptIssuanceKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const acc = getDataAccountID(runtime, params, index); + if (!acc) + { + return hfResult(results, acc.error()); + } + + auto const seq = getDataInt32(runtime, params, index); + if (!seq) + { + return hfResult(results, seq.error()); // LCOV_EXCL_LINE + } + + return returnResult( + runtime, + params, + results, + hf->mptIssuanceKeylet(acc.value(), seq.value()), + index); +} + +wasm_trap_t* +mptokenKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const slice = getDataSlice(runtime, params, index); + if (!slice) + { + return hfResult(results, slice.error()); + } + + if (slice->size() != MPTID::bytes) + { + return hfResult(results, HostFunctionError::INVALID_PARAMS); + } + auto const mptid = MPTID::fromVoid(slice->data()); + + auto const holder = getDataAccountID(runtime, params, index); + if (!holder) + { + return hfResult(results, holder.error()); + } + + return returnResult( + runtime, + params, + results, + hf->mptokenKeylet(mptid, holder.value()), + index); +} + +wasm_trap_t* +nftOfferKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const acc = getDataAccountID(runtime, params, index); + if (!acc) + { + return hfResult(results, acc.error()); + } + + auto const seq = getDataInt32(runtime, params, index); + if (!seq) + { + return hfResult(results, seq.error()); // LCOV_EXCL_LINE + } + + return returnResult( + runtime, + params, + results, + hf->nftOfferKeylet(acc.value(), seq.value()), + index); +} + +wasm_trap_t* +offerKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const acc = getDataAccountID(runtime, params, index); + if (!acc) + { + return hfResult(results, acc.error()); + } + + auto const seq = getDataInt32(runtime, params, index); + if (!seq) + { + return hfResult(results, seq.error()); // LCOV_EXCL_LINE + } + + return returnResult( + runtime, + params, + results, + hf->offerKeylet(acc.value(), seq.value()), + index); +} + +wasm_trap_t* +oracleKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const acc = getDataAccountID(runtime, params, index); + if (!acc) + { + return hfResult(results, acc.error()); + } + + auto const documentId = getDataInt32(runtime, params, index); + if (!documentId) + { + return hfResult(results, documentId.error()); // LCOV_EXCL_LINE + } + return returnResult( + runtime, params, results, hf->oracleKeylet(*acc, *documentId), index); +} + +wasm_trap_t* +paychanKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const acc = getDataAccountID(runtime, params, index); + if (!acc) + { + return hfResult(results, acc.error()); + } + + auto const dest = getDataAccountID(runtime, params, index); + if (!dest) + { + return hfResult(results, dest.error()); + } + + auto const seq = getDataInt32(runtime, params, index); + if (!seq) + { + return hfResult(results, seq.error()); // LCOV_EXCL_LINE + } + + return returnResult( + runtime, + params, + results, + hf->paychanKeylet(acc.value(), dest.value(), seq.value()), + index); +} + +wasm_trap_t* +permissionedDomainKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const acc = getDataAccountID(runtime, params, index); + if (!acc) + { + return hfResult(results, acc.error()); + } + + auto const seq = getDataInt32(runtime, params, index); + if (!seq) + { + return hfResult(results, seq.error()); // LCOV_EXCL_LINE + } + + return returnResult( + runtime, + params, + results, + hf->permissionedDomainKeylet(acc.value(), seq.value()), + index); +} + +wasm_trap_t* +signersKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const acc = getDataAccountID(runtime, params, index); + if (!acc) + { + return hfResult(results, acc.error()); + } + + return returnResult( + runtime, params, results, hf->signersKeylet(acc.value()), index); +} + +wasm_trap_t* +ticketKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const acc = getDataAccountID(runtime, params, index); + if (!acc) + { + return hfResult(results, acc.error()); + } + + auto const seq = getDataInt32(runtime, params, index); + if (!seq) + { + return hfResult(results, seq.error()); // LCOV_EXCL_LINE + } + + return returnResult( + runtime, + params, + results, + hf->ticketKeylet(acc.value(), seq.value()), + index); +} + +wasm_trap_t* +vaultKeylet_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const acc = getDataAccountID(runtime, params, index); + if (!acc) + { + return hfResult(results, acc.error()); + } + + auto const seq = getDataInt32(runtime, params, index); + if (!seq) + { + return hfResult(results, seq.error()); // LCOV_EXCL_LINE + } + + return returnResult( + runtime, + params, + results, + hf->vaultKeylet(acc.value(), seq.value()), + index); +} + +wasm_trap_t* +getNFT_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const acc = getDataAccountID(runtime, params, index); + if (!acc) + { + return hfResult(results, acc.error()); + } + + auto const nftId = getDataUInt256(runtime, params, index); + if (!nftId) + { + return hfResult(results, nftId.error()); + } + + return returnResult( + runtime, params, results, hf->getNFT(*acc, *nftId), index); +} + +wasm_trap_t* +getNFTIssuer_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const nftId = getDataUInt256(runtime, params, index); + if (!nftId) + { + return hfResult(results, nftId.error()); + } + + return returnResult( + runtime, params, results, hf->getNFTIssuer(*nftId), index); +} + +wasm_trap_t* +getNFTTaxon_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const nftId = getDataUInt256(runtime, params, index); + if (!nftId) + { + return hfResult(results, nftId.error()); + } + + return returnResult( + runtime, params, results, hf->getNFTTaxon(*nftId), index); +} + +wasm_trap_t* +getNFTFlags_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const nftId = getDataUInt256(runtime, params, index); + if (!nftId) + { + return hfResult(results, nftId.error()); + } + + return returnResult( + runtime, params, results, hf->getNFTFlags(*nftId), index); +} + +wasm_trap_t* +getNFTTransferFee_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const nftId = getDataUInt256(runtime, params, index); + if (!nftId) + { + return hfResult(results, nftId.error()); + } + + return returnResult( + runtime, params, results, hf->getNFTTransferFee(*nftId), index); +} + +wasm_trap_t* +getNFTSerial_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + auto const nftId = getDataUInt256(runtime, params, index); + if (!nftId) + { + return hfResult(results, nftId.error()); + } + + return returnResult( + runtime, params, results, hf->getNFTSerial(*nftId), index); +} + +wasm_trap_t* +trace_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + + if (params->data[1].of.i32 + params->data[3].of.i32 > maxWasmDataLength) + { + return hfResult(results, HostFunctionError::DATA_FIELD_TOO_LARGE); + } + + auto const msg = getDataString(runtime, params, index); + if (!msg) + { + return hfResult(results, msg.error()); + } + + auto const data = getDataSlice(runtime, params, index); + if (!data) + { + return hfResult(results, data.error()); + } + + auto const asHex = getDataInt32(runtime, params, index); + if (!asHex) + { + return hfResult(results, asHex.error()); // LCOV_EXCL_LINE + } + + return returnResult( + runtime, params, results, hf->trace(*msg, *data, *asHex), index); +} + +wasm_trap_t* +traceNum_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + int index = 0; + if (params->data[1].of.i32 > maxWasmDataLength) + { + return hfResult(results, HostFunctionError::DATA_FIELD_TOO_LARGE); + } + + auto const msg = getDataString(runtime, params, index); + if (!msg) + { + return hfResult(results, msg.error()); + } + + auto const number = getDataInt64(runtime, params, index); + if (!number) + { + return hfResult(results, number.error()); // LCOV_EXCL_LINE + } + + return returnResult( + runtime, params, results, hf->traceNum(*msg, *number), index); +} + +wasm_trap_t* +traceAccount_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + + if (params->data[1].of.i32 > maxWasmDataLength) + return hfResult(results, HostFunctionError::DATA_FIELD_TOO_LARGE); + + int i = 0; + auto const msg = getDataString(runtime, params, i); + if (!msg) + return hfResult(results, msg.error()); + + auto const account = getDataAccountID(runtime, params, i); + if (!account) + return hfResult(results, account.error()); + + return returnResult( + runtime, params, results, hf->traceAccount(*msg, *account), i); +} + +wasm_trap_t* +traceFloat_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + + if (params->data[1].of.i32 > maxWasmDataLength) + return hfResult(results, HostFunctionError::DATA_FIELD_TOO_LARGE); + + int i = 0; + auto const msg = getDataString(runtime, params, i); + if (!msg) + return hfResult(results, msg.error()); + + auto const number = getDataSlice(runtime, params, i); + if (!number) + return hfResult(results, number.error()); + + return returnResult( + runtime, params, results, hf->traceFloat(*msg, *number), i); +} + +wasm_trap_t* +traceAmount_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + + if (params->data[1].of.i32 > maxWasmDataLength) + return hfResult(results, HostFunctionError::DATA_FIELD_TOO_LARGE); + + int i = 0; + auto const msg = getDataString(runtime, params, i); + if (!msg) + return hfResult(results, msg.error()); + + auto const amountSliceOpt = getDataSlice(runtime, params, i); + if (!amountSliceOpt) + return hfResult(results, amountSliceOpt.error()); + + auto const amountSlice = amountSliceOpt.value(); + auto serialIter = SerialIter(amountSlice); + + std::optional amount; + try + { + amount = STAmount(serialIter, sfGeneric); + } + catch (std::exception const&) + { + amount = std::nullopt; + } + if (!amount || !amount.value()) + return hfResult(results, HostFunctionError::INVALID_PARAMS); + + return returnResult( + runtime, params, results, hf->traceAmount(*msg, *amount), i); +} + +wasm_trap_t* +floatFromInt_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + + int i = 0; + auto const x = getDataInt64(runtime, params, i); + if (!x) + return hfResult(results, x.error()); + + i = 3; + auto const rounding = getDataInt32(runtime, params, i); + if (!rounding) + return hfResult(results, rounding.error()); + + i = 1; + return returnResult( + runtime, params, results, hf->floatFromInt(*x, *rounding), i); +} + +wasm_trap_t* +floatFromUint_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + + int i = 0; + auto const x = getDataUInt64(runtime, params, i); + if (!x) + return hfResult(results, x.error()); + + i = 4; + auto const rounding = getDataInt32(runtime, params, i); + if (!rounding) + return hfResult(results, rounding.error()); + + i = 2; + return returnResult( + runtime, params, results, hf->floatFromUint(*x, *rounding), i); +} + +wasm_trap_t* +floatSet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + + int i = 0; + auto const exp = getDataInt32(runtime, params, i); + if (!exp) + return hfResult(results, exp.error()); + + auto const mant = getDataInt64(runtime, params, i); + if (!mant) + return hfResult(results, mant.error()); + + i = 4; + auto const rounding = getDataInt32(runtime, params, i); + if (!rounding) + return hfResult(results, rounding.error()); + + i = 2; + return returnResult( + runtime, params, results, hf->floatSet(*mant, *exp, *rounding), i); +} + +wasm_trap_t* +floatCompare_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + + int i = 0; + auto const x = getDataSlice(runtime, params, i); + if (!x) + return hfResult(results, x.error()); + + auto const y = getDataSlice(runtime, params, i); + if (!y) + return hfResult(results, y.error()); + + return returnResult(runtime, params, results, hf->floatCompare(*x, *y), i); +} + +wasm_trap_t* +floatAdd_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + + int i = 0; + auto const x = getDataSlice(runtime, params, i); + if (!x) + return hfResult(results, x.error()); + + auto const y = getDataSlice(runtime, params, i); + if (!y) + return hfResult(results, y.error()); + + i = 6; + auto const rounding = getDataInt32(runtime, params, i); + if (!rounding) + return hfResult(results, rounding.error()); + + i = 4; + return returnResult( + runtime, params, results, hf->floatAdd(*x, *y, *rounding), i); +} + +wasm_trap_t* +floatSubtract_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + + int i = 0; + auto const x = getDataSlice(runtime, params, i); + if (!x) + return hfResult(results, x.error()); + + auto const y = getDataSlice(runtime, params, i); + if (!y) + return hfResult(results, y.error()); + + i = 6; + auto const rounding = getDataInt32(runtime, params, i); + if (!rounding) + return hfResult(results, rounding.error()); + + i = 4; + return returnResult( + runtime, params, results, hf->floatSubtract(*x, *y, *rounding), i); +} + +wasm_trap_t* +floatMultiply_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + + int i = 0; + auto const x = getDataSlice(runtime, params, i); + if (!x) + return hfResult(results, x.error()); + + auto const y = getDataSlice(runtime, params, i); + if (!y) + return hfResult(results, y.error()); + + i = 6; + auto const rounding = getDataInt32(runtime, params, i); + if (!rounding) + return hfResult(results, rounding.error()); + + i = 4; + return returnResult( + runtime, params, results, hf->floatMultiply(*x, *y, *rounding), i); +} + +wasm_trap_t* +floatDivide_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + + int i = 0; + auto const x = getDataSlice(runtime, params, i); + if (!x) + return hfResult(results, x.error()); + + auto const y = getDataSlice(runtime, params, i); + if (!y) + return hfResult(results, y.error()); + + i = 6; + auto const rounding = getDataInt32(runtime, params, i); + if (!rounding) + return hfResult(results, rounding.error()); + + i = 4; + return returnResult( + runtime, params, results, hf->floatDivide(*x, *y, *rounding), i); +} + +wasm_trap_t* +floatRoot_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + + int i = 0; + auto const x = getDataSlice(runtime, params, i); + if (!x) + return hfResult(results, x.error()); + + auto const n = getDataInt32(runtime, params, i); + if (!n) + return hfResult(results, n.error()); + + i = 5; + auto const rounding = getDataInt32(runtime, params, i); + if (!rounding) + return hfResult(results, rounding.error()); + + i = 3; + return returnResult( + runtime, params, results, hf->floatRoot(*x, *n, *rounding), i); +} + +wasm_trap_t* +floatPower_wrap( + void* env, + wasm_val_vec_t const* params, + wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + + int i = 0; + auto const x = getDataSlice(runtime, params, i); + if (!x) + return hfResult(results, x.error()); + + auto const n = getDataInt32(runtime, params, i); + if (!n) + return hfResult(results, n.error()); + + i = 5; + auto const rounding = getDataInt32(runtime, params, i); + if (!rounding) + return hfResult(results, rounding.error()); + + i = 3; + return returnResult( + runtime, params, results, hf->floatPower(*x, *n, *rounding), i); +} + +wasm_trap_t* +floatLog_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +{ + auto* hf = reinterpret_cast(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + + int i = 0; + auto const x = getDataSlice(runtime, params, i); + if (!x) + return hfResult(results, x.error()); + + i = 4; + auto const rounding = getDataInt32(runtime, params, i); + if (!rounding) + return hfResult(results, rounding.error()); + + i = 2; + return returnResult( + runtime, params, results, hf->floatLog(*x, *rounding), i); +} + +// LCOV_EXCL_START +namespace test { + +class MockInstanceWrapper +{ + wmem mem_; + +public: + MockInstanceWrapper(wmem memory) : mem_(memory) + { + } + + // Mock methods to simulate the behavior of InstanceWrapper + wmem + getMem() const + { + return mem_; + } +}; + +bool +testGetDataIncrement() +{ + wasm_val_t values[4]; + + std::array buffer = { + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'}; + MockInstanceWrapper runtime(wmem{buffer.data(), buffer.size()}); + + { + // test int32_t + wasm_val_vec_t params = {1, &values[0], 1, sizeof(wasm_val_t), nullptr}; + + values[0] = WASM_I32_VAL(42); + + int index = 0; + auto const result = getDataInt32(&runtime, ¶ms, index); + if (!result || result.value() != 42 || index != 1) + return false; + } + + { + // test int64_t + wasm_val_vec_t params = {1, &values[0], 1, sizeof(wasm_val_t), nullptr}; + + values[0] = WASM_I64_VAL(1234); + + int index = 0; + auto const result = getDataInt64(&runtime, ¶ms, index); + if (!result || result.value() != 1234 || index != 1) + return false; + } + + { + // test SFieldCRef + wasm_val_vec_t params = {1, &values[0], 1, sizeof(wasm_val_t), nullptr}; + + values[0] = WASM_I32_VAL(sfAccount.fieldCode); + + int index = 0; + auto const result = getDataSField(&runtime, ¶ms, index); + if (!result || result.value().get() != sfAccount || index != 1) + return false; + } + + { + // test Slice + wasm_val_vec_t params = {2, &values[0], 2, sizeof(wasm_val_t), nullptr}; + + values[0] = WASM_I32_VAL(0); + values[1] = WASM_I32_VAL(3); + + int index = 0; + auto const result = getDataSlice(&runtime, ¶ms, index); + if (!result || result.value() != Slice(buffer.data(), 3) || index != 2) + return false; + } + + { + // test string + wasm_val_vec_t params = {2, &values[0], 2, sizeof(wasm_val_t), nullptr}; + + values[0] = WASM_I32_VAL(0); + values[1] = WASM_I32_VAL(5); + + int index = 0; + auto const result = getDataString(&runtime, ¶ms, index); + if (!result || + result.value() != + std::string_view( + reinterpret_cast(buffer.data()), 5) || + index != 2) + return false; + } + + { + // test account + AccountID const id(calcAccountID( + generateKeyPair(KeyType::secp256k1, generateSeed("alice")).first)); + + wasm_val_vec_t params = {2, &values[0], 2, sizeof(wasm_val_t), nullptr}; + + values[0] = WASM_I32_VAL(0); + values[1] = WASM_I32_VAL(id.bytes); + memcpy(&buffer[0], id.data(), id.bytes); + + int index = 0; + auto const result = getDataAccountID(&runtime, ¶ms, index); + if (!result || result.value() != id || index != 2) + return false; + } + + { + // test uint256 + + Hash h1 = sha512Half(Slice(buffer.data(), 8)); + wasm_val_vec_t params = {2, &values[0], 2, sizeof(wasm_val_t), nullptr}; + + values[0] = WASM_I32_VAL(0); + values[1] = WASM_I32_VAL(h1.bytes); + memcpy(&buffer[0], h1.data(), h1.bytes); + + int index = 0; + auto const result = getDataUInt256(&runtime, ¶ms, index); + if (!result || result.value() != h1 || index != 2) + return false; + } + + { + // test Currency + + Currency const c = xrpCurrency(); + wasm_val_vec_t params = {2, &values[0], 2, sizeof(wasm_val_t), nullptr}; + + values[0] = WASM_I32_VAL(0); + values[1] = WASM_I32_VAL(c.bytes); + memcpy(&buffer[0], c.data(), c.bytes); + + int index = 0; + auto const result = getDataCurrency(&runtime, ¶ms, index); + if (!result || result.value() != c || index != 2) + return false; + } + + return true; +} + +} // namespace test +// LCOV_EXCL_STOP + +} // namespace ripple diff --git a/src/xrpld/app/wasm/detail/WasmVM.cpp b/src/xrpld/app/wasm/detail/WasmVM.cpp index e13b5885cf..d9dd67860d 100644 --- a/src/xrpld/app/wasm/detail/WasmVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmVM.cpp @@ -34,12 +34,92 @@ namespace ripple { +static void +setCommonHostFunctions(HostFunctions* hfs, std::vector& i) +{ + // clang-format off + WASM_IMPORT_FUNC2(i, getLedgerSqn, "get_ledger_sqn", hfs, 60); + WASM_IMPORT_FUNC2(i, getParentLedgerTime, "get_parent_ledger_time", hfs, 60); + WASM_IMPORT_FUNC2(i, getParentLedgerHash, "get_parent_ledger_hash", hfs, 60); + WASM_IMPORT_FUNC2(i, getLedgerAccountHash, "get_ledger_account_hash", hfs, 60); + WASM_IMPORT_FUNC2(i, getLedgerTransactionHash, "get_ledger_tx_hash", hfs, 60); + WASM_IMPORT_FUNC2(i, getBaseFee, "get_base_fee", hfs, 60); + WASM_IMPORT_FUNC2(i, isAmendmentEnabled, "amendment_enabled", hfs, 60); + + WASM_IMPORT_FUNC2(i, cacheLedgerObj, "cache_ledger_obj", hfs, 5000); + WASM_IMPORT_FUNC2(i, getTxField, "get_tx_field", hfs, 70); + WASM_IMPORT_FUNC2(i, getCurrentLedgerObjField, "get_current_ledger_obj_field", hfs, 70); + WASM_IMPORT_FUNC2(i, getLedgerObjField, "get_ledger_obj_field", hfs, 70); + WASM_IMPORT_FUNC2(i, getTxNestedField, "get_tx_nested_field", hfs, 110); + WASM_IMPORT_FUNC2(i, getCurrentLedgerObjNestedField, "get_current_ledger_obj_nested_field", hfs, 110); + WASM_IMPORT_FUNC2(i, getLedgerObjNestedField, "get_ledger_obj_nested_field", hfs, 110); + WASM_IMPORT_FUNC2(i, getTxArrayLen, "get_tx_array_len", hfs, 40); + WASM_IMPORT_FUNC2(i, getCurrentLedgerObjArrayLen, "get_current_ledger_obj_array_len", hfs, 40); + WASM_IMPORT_FUNC2(i, getLedgerObjArrayLen, "get_ledger_obj_array_len", hfs, 40); + WASM_IMPORT_FUNC2(i, getTxNestedArrayLen, "get_tx_nested_array_len", hfs, 70); + WASM_IMPORT_FUNC2(i, getCurrentLedgerObjNestedArrayLen, "get_current_ledger_obj_nested_array_len", hfs, 70); + WASM_IMPORT_FUNC2(i, getLedgerObjNestedArrayLen, "get_ledger_obj_nested_array_len", hfs, 70); + + WASM_IMPORT_FUNC2(i, checkSignature, "check_sig", hfs, 2000); + WASM_IMPORT_FUNC2(i, computeSha512HalfHash, "compute_sha512_half", hfs, 2000); + + WASM_IMPORT_FUNC2(i, accountKeylet, "account_keylet", hfs, 350); + WASM_IMPORT_FUNC2(i, ammKeylet, "amm_keylet", hfs, 350); + WASM_IMPORT_FUNC2(i, checkKeylet, "check_keylet", hfs, 350); + WASM_IMPORT_FUNC2(i, credentialKeylet, "credential_keylet", hfs, 350); + WASM_IMPORT_FUNC2(i, delegateKeylet, "delegate_keylet", hfs, 350); + WASM_IMPORT_FUNC2(i, depositPreauthKeylet, "deposit_preauth_keylet", hfs, 350); + WASM_IMPORT_FUNC2(i, didKeylet, "did_keylet", hfs, 350); + WASM_IMPORT_FUNC2(i, escrowKeylet, "escrow_keylet", hfs, 350); + WASM_IMPORT_FUNC2(i, lineKeylet, "line_keylet", hfs, 350); + WASM_IMPORT_FUNC2(i, mptIssuanceKeylet, "mpt_issuance_keylet", hfs, 350); + WASM_IMPORT_FUNC2(i, mptokenKeylet, "mptoken_keylet", hfs, 350); + WASM_IMPORT_FUNC2(i, nftOfferKeylet, "nft_offer_keylet", hfs, 350); + WASM_IMPORT_FUNC2(i, offerKeylet, "offer_keylet", hfs, 350); + WASM_IMPORT_FUNC2(i, oracleKeylet, "oracle_keylet", hfs, 350); + WASM_IMPORT_FUNC2(i, paychanKeylet, "paychan_keylet", hfs, 350); + WASM_IMPORT_FUNC2(i, permissionedDomainKeylet, "permissioned_domain_keylet", hfs, 350); + WASM_IMPORT_FUNC2(i, signersKeylet, "signers_keylet", hfs, 350); + WASM_IMPORT_FUNC2(i, ticketKeylet, "ticket_keylet", hfs, 350); + WASM_IMPORT_FUNC2(i, vaultKeylet, "vault_keylet", hfs, 350); + + WASM_IMPORT_FUNC2(i, getNFT, "get_nft", hfs, 1000); + WASM_IMPORT_FUNC2(i, getNFTIssuer, "get_nft_issuer", hfs, 60); + WASM_IMPORT_FUNC2(i, getNFTTaxon, "get_nft_taxon", hfs, 60); + WASM_IMPORT_FUNC2(i, getNFTFlags, "get_nft_flags", hfs, 60); + WASM_IMPORT_FUNC2(i, getNFTTransferFee, "get_nft_transfer_fee", hfs, 60); + WASM_IMPORT_FUNC2(i, getNFTSerial, "get_nft_serial", hfs, 60); + + WASM_IMPORT_FUNC (i, trace, hfs, 500); + WASM_IMPORT_FUNC2(i, traceNum, "trace_num", hfs, 500); + WASM_IMPORT_FUNC2(i, traceAccount, "trace_account", hfs, 500); + WASM_IMPORT_FUNC2(i, traceFloat, "trace_opaque_float", hfs, 500); + WASM_IMPORT_FUNC2(i, traceAmount, "trace_amount", hfs, 500); + + WASM_IMPORT_FUNC2(i, floatFromInt, "float_from_int", hfs, 1000); + WASM_IMPORT_FUNC2(i, floatFromUint, "float_from_uint", hfs, 1000); + WASM_IMPORT_FUNC2(i, floatSet, "float_set", hfs, 1000); + WASM_IMPORT_FUNC2(i, floatCompare, "float_compare", hfs, 1000); + WASM_IMPORT_FUNC2(i, floatAdd, "float_add", hfs, 1000); + WASM_IMPORT_FUNC2(i, floatSubtract, "float_subtract", hfs, 1000); + WASM_IMPORT_FUNC2(i, floatMultiply, "float_multiply", hfs, 1000); + WASM_IMPORT_FUNC2(i, floatDivide, "float_divide", hfs, 1000); + WASM_IMPORT_FUNC2(i, floatRoot, "float_root", hfs, 1000); + WASM_IMPORT_FUNC2(i, floatPower, "float_pow", hfs, 1000); + WASM_IMPORT_FUNC2(i, floatLog, "float_log", hfs, 1000); + // clang-format on +} + std::vector createWasmImport(HostFunctions* hfs) { std::vector i; - // Add host functions here + if (hfs) + { + setCommonHostFunctions(hfs, i); + WASM_IMPORT_FUNC2(i, updateData, "update_data", hfs, 1000); + } return i; } From bfc048e3fe8489e1c659a01c78b401af350d29d4 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 10 Sep 2025 14:57:23 -0400 Subject: [PATCH 004/137] add tests --- src/test/app/Wasm_test.cpp | 731 ++ .../wasm_fixtures/wasm_fixtures/.gitignore | 3 + .../all_host_functions/Cargo.lock | 15 + .../all_host_functions/Cargo.toml | 21 + .../all_host_functions/src/lib.rs | 772 ++ .../wasm_fixtures/all_keylets/Cargo.lock | 15 + .../wasm_fixtures/all_keylets/Cargo.toml | 21 + .../wasm_fixtures/all_keylets/src/lib.rs | 179 + .../app/wasm_fixtures/wasm_fixtures/b58.c | 73 + .../wasm_fixtures/codecov_tests/Cargo.lock | 15 + .../wasm_fixtures/codecov_tests/Cargo.toml | 18 + .../codecov_tests/src/host_bindings_loose.rs | 56 + .../wasm_fixtures/codecov_tests/src/lib.rs | 1244 ++ .../wasm_fixtures/copyFixtures.py | 134 + .../wasm_fixtures/disableFloat.wat | 34 + .../app/wasm_fixtures/wasm_fixtures/fib.c | 12 + .../wasm_fixtures/wasm_fixtures/fixtures.cpp | 10330 ++++++++++++++++ .../wasm_fixtures/wasm_fixtures/fixtures.h | 52 + .../wasm_fixtures/float_tests/Cargo.lock | 15 + .../wasm_fixtures/float_tests/Cargo.toml | 21 + .../wasm_fixtures/float_tests/src/lib.rs | 460 + .../wasm_fixtures/wasm_fixtures/ledgerSqn.c | 27 + .../wasm_fixtures/wasm_fixtures/sha512Pure.c | 145 + .../wasm_fixtures/sp1/Cargo.lock | 1384 +++ .../wasm_fixtures/sp1/Cargo.toml | 16 + .../wasm_fixtures/sp1/src/lib.rs | 37 + .../wasm_fixtures/zk_proof/Cargo.lock | 106 + .../wasm_fixtures/zk_proof/Cargo.toml | 19 + .../wasm_fixtures/zk_proof/src/lib.rs | 254 + 29 files changed, 16209 insertions(+) create mode 100644 src/test/app/Wasm_test.cpp create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/.gitignore create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/all_host_functions/Cargo.lock create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/all_host_functions/Cargo.toml create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/all_host_functions/src/lib.rs create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/all_keylets/Cargo.lock create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/all_keylets/Cargo.toml create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/all_keylets/src/lib.rs create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/b58.c create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/codecov_tests/Cargo.lock create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/codecov_tests/Cargo.toml create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/codecov_tests/src/host_bindings_loose.rs create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/codecov_tests/src/lib.rs create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/copyFixtures.py create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/disableFloat.wat create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/fib.c create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/fixtures.cpp create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/fixtures.h create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/float_tests/Cargo.lock create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/float_tests/Cargo.toml create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/float_tests/src/lib.rs create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/ledgerSqn.c create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/sha512Pure.c create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/sp1/Cargo.lock create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/sp1/Cargo.toml create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/sp1/src/lib.rs create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/zk_proof/Cargo.lock create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/zk_proof/Cargo.toml create mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/zk_proof/src/lib.rs diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp new file mode 100644 index 0000000000..a48e16f1eb --- /dev/null +++ b/src/test/app/Wasm_test.cpp @@ -0,0 +1,731 @@ +//------------------------------------------------------------------------------ +/* + This file is part of rippled: https://github.com/ripple/rippled + Copyright (c) 2025 Ripple Labs Inc. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ +//============================================================================== + +#ifdef _DEBUG +// #define DEBUG_OUTPUT 1 +#endif + +#include + +#include +#include + +namespace ripple { +namespace test { + +bool +testGetDataIncrement(); + +using Add_proto = int32_t(int32_t, int32_t); +static wasm_trap_t* +Add(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +{ + int32_t Val1 = params->data[0].of.i32; + int32_t Val2 = params->data[1].of.i32; + // printf("Host function \"Add\": %d + %d\n", Val1, Val2); + results->data[0] = WASM_I32_VAL(Val1 + Val2); + return nullptr; +} + +struct Wasm_test : public beast::unit_test::suite +{ + void + testGetDataHelperFunctions() + { + testcase("getData helper functions"); + BEAST_EXPECT(testGetDataIncrement()); + } + + void + testWasmLib() + { + testcase("wasmtime lib test"); + // clang-format off + /* The WASM module buffer. */ + Bytes const wasm = {/* WASM header */ + 0x00, 0x61, 0x73, 0x6D, 0x01, 0x00, 0x00, 0x00, + /* Type section */ + 0x01, 0x07, 0x01, + /* function type {i32, i32} -> {i32} */ + 0x60, 0x02, 0x7F, 0x7F, 0x01, 0x7F, + /* Import section */ + 0x02, 0x13, 0x01, + /* module name: "extern" */ + 0x06, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6E, + /* extern name: "func-add" */ + 0x08, 0x66, 0x75, 0x6E, 0x63, 0x2D, 0x61, 0x64, 0x64, + /* import desc: func 0 */ + 0x00, 0x00, + /* Function section */ + 0x03, 0x02, 0x01, 0x00, + /* Export section */ + 0x07, 0x0A, 0x01, + /* export name: "addTwo" */ + 0x06, 0x61, 0x64, 0x64, 0x54, 0x77, 0x6F, + /* export desc: func 0 */ + 0x00, 0x01, + /* Code section */ + 0x0A, 0x0A, 0x01, + /* code body */ + 0x08, 0x00, 0x20, 0x00, 0x20, 0x01, 0x10, 0x00, 0x0B}; + // clang-format on + auto& vm = WasmEngine::instance(); + + std::vector imports; + WasmImpFunc( + imports, "func-add", reinterpret_cast(&Add)); + + auto re = vm.run(wasm, "addTwo", wasmParams(1234, 5678), imports); + + // if (res) printf("invokeAdd get the result: %d\n", res.value()); + + if (BEAST_EXPECT(re.has_value())) + { + BEAST_EXPECTS(re->result == 6'912, std::to_string(re->result)); + BEAST_EXPECTS(re->cost == 2, std::to_string(re->cost)); + } + } + + void + testBadWasm() + { + testcase("bad wasm test"); + + using namespace test::jtx; + + Env env{*this}; + HostFunctions hfs; + + { + auto wasmHex = "00000000"; + auto wasmStr = boost::algorithm::unhex(std::string(wasmHex)); + std::vector wasm(wasmStr.begin(), wasmStr.end()); + std::string funcName("mock_escrow"); + + auto re = runEscrowWasm(wasm, funcName, {}, &hfs, 15, env.journal); + BEAST_EXPECT(!re); + } + + { + auto wasmHex = "00112233445566778899AA"; + auto wasmStr = boost::algorithm::unhex(std::string(wasmHex)); + std::vector wasm(wasmStr.begin(), wasmStr.end()); + std::string funcName("mock_escrow"); + + auto const re = + preflightEscrowWasm(wasm, funcName, {}, &hfs, env.journal); + BEAST_EXPECT(!isTesSuccess(re)); + } + + { + // FinishFunction wrong function name + // pub fn bad() -> bool { + // unsafe { host_lib::getLedgerSqn() >= 5 } + // } + auto const badWasmHex = + "0061736d010000000105016000017f02190108686f73745f6c69620c6765" + "744c656467657253716e00000302010005030100100611027f00418080c0" + "000b7f00418080c0000b072b04066d656d6f727902000362616400010a5f" + "5f646174615f656e6403000b5f5f686561705f6261736503010a09010700" + "100041044a0b004d0970726f64756365727302086c616e67756167650104" + "52757374000c70726f6365737365642d6279010572757374631d312e3835" + "2e31202834656231363132353020323032352d30332d31352900490f7461" + "726765745f6665617475726573042b0f6d757461626c652d676c6f62616c" + "732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a" + "6d756c746976616c7565"; + auto wasmStr = boost::algorithm::unhex(std::string(badWasmHex)); + std::vector wasm(wasmStr.begin(), wasmStr.end()); + + auto const re = preflightEscrowWasm( + wasm, ESCROW_FUNCTION_NAME, {}, &hfs, env.journal); + BEAST_EXPECT(!isTesSuccess(re)); + } + } + + void + testWasmLedgerSqn() + { + testcase("Wasm get ledger sequence"); + + auto wasmStr = boost::algorithm::unhex(ledgerSqnWasmHex); + Bytes wasm(wasmStr.begin(), wasmStr.end()); + + using namespace test::jtx; + + Env env{*this}; + TestLedgerDataProvider hf(&env); + + std::vector imports; + WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn", &hf, 33); + auto& engine = WasmEngine::instance(); + + auto re = engine.run( + wasm, + ESCROW_FUNCTION_NAME, + {}, + imports, + &hf, + 1'000'000, + env.journal); + + // code takes 11 gas + 1 getLedgerSqn call + if (BEAST_EXPECT(re.has_value())) + { + BEAST_EXPECTS(re->result == 0, std::to_string(re->result)); + BEAST_EXPECTS(re->cost == 39, std::to_string(re->cost)); + } + + env.close(); + env.close(); + + // empty module - run the same instance + re = engine.run( + {}, ESCROW_FUNCTION_NAME, {}, imports, &hf, 1'000'000, env.journal); + + // code takes 22 gas + 2 getLedgerSqn calls + if (BEAST_EXPECT(re.has_value())) + { + BEAST_EXPECTS(re->result == 5, std::to_string(re->result)); + BEAST_EXPECTS(re->cost == 78, std::to_string(re->cost)); + } + } + + void + testWasmFib() + { + testcase("Wasm fibo"); + + auto const ws = boost::algorithm::unhex(fibWasmHex); + Bytes const wasm(ws.begin(), ws.end()); + auto& engine = WasmEngine::instance(); + + auto const re = engine.run(wasm, "fib", wasmParams(10)); + + if (BEAST_EXPECT(re.has_value())) + { + BEAST_EXPECTS(re->result == 55, std::to_string(re->result)); + BEAST_EXPECTS(re->cost == 755, std::to_string(re->cost)); + } + } + + void + testWasmSha() + { + testcase("Wasm sha"); + + auto const ws = boost::algorithm::unhex(sha512PureWasmHex); + Bytes const wasm(ws.begin(), ws.end()); + auto& engine = WasmEngine::instance(); + + auto const re = + engine.run(wasm, "sha512_process", wasmParams(sha512PureWasmHex)); + + if (BEAST_EXPECT(re.has_value())) + { + BEAST_EXPECTS(re->result == 34'432, std::to_string(re->result)); + BEAST_EXPECTS(re->cost == 157'452, std::to_string(re->cost)); + } + } + + void + testWasmB58() + { + testcase("Wasm base58"); + auto const ws = boost::algorithm::unhex(b58WasmHex); + Bytes const wasm(ws.begin(), ws.end()); + auto& engine = WasmEngine::instance(); + + Bytes outb; + outb.resize(1024); + + auto const minsz = std::min( + static_cast(512), + static_cast(b58WasmHex.size())); + auto const s = std::string_view(b58WasmHex.c_str(), minsz); + + auto const re = engine.run(wasm, "b58enco", wasmParams(outb, s)); + + if (BEAST_EXPECT(re.has_value())) + { + BEAST_EXPECTS(re->result == 700, std::to_string(re->result)); + BEAST_EXPECTS(re->cost == 3'066'129, std::to_string(re->cost)); + } + } + + void + testWasmSP1Verifier() + { + testcase("Wasm sp1 zkproof verifier"); + auto const ws = boost::algorithm::unhex(sp1WasmHex); + Bytes const wasm(ws.begin(), ws.end()); + auto& engine = WasmEngine::instance(); + + auto const re = engine.run(wasm, "sp1_groth16_verifier"); + + if (BEAST_EXPECT(re.has_value())) + { + BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); + BEAST_EXPECTS( + re->cost == 4'191'711'969ll, std::to_string(re->cost)); + } + } + + void + testWasmBG16Verifier() + { + testcase("Wasm BG16 zkproof verifier"); + auto const ws = boost::algorithm::unhex(zkProofWasmHex); + Bytes const wasm(ws.begin(), ws.end()); + auto& engine = WasmEngine::instance(); + + auto const re = engine.run(wasm, "bellman_groth16_test"); + + if (BEAST_EXPECT(re.has_value())) + { + BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); + BEAST_EXPECTS(re->cost == 332'205'984, std::to_string(re->cost)); + } + } + + void + testHFCost() + { + testcase("wasm test host functions cost"); + + using namespace test::jtx; + + Env env(*this); + { + std::string const wasmHex = allHostFunctionsWasmHex; + std::string const wasmStr = boost::algorithm::unhex(wasmHex); + std::vector const wasm(wasmStr.begin(), wasmStr.end()); + + auto& engine = WasmEngine::instance(); + + TestHostFunctions hfs(env, 0); + std::vector imp = createWasmImport(&hfs); + for (auto& i : imp) + i.gas = 0; + + auto re = engine.run( + wasm, + ESCROW_FUNCTION_NAME, + {}, + imp, + &hfs, + 1'000'000, + env.journal); + + if (BEAST_EXPECT(re.has_value())) + { + BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); + BEAST_EXPECTS(re->cost == 847, std::to_string(re->cost)); + } + + env.close(); + } + + env.close(); + env.close(); + env.close(); + env.close(); + env.close(); + + { + std::string const wasmHex = allHostFunctionsWasmHex; + std::string const wasmStr = boost::algorithm::unhex(wasmHex); + std::vector const wasm(wasmStr.begin(), wasmStr.end()); + + auto& engine = WasmEngine::instance(); + + TestHostFunctions hfs(env, 0); + std::vector const imp = createWasmImport(&hfs); + + auto re = engine.run( + wasm, + ESCROW_FUNCTION_NAME, + {}, + imp, + &hfs, + 1'000'000, + env.journal); + + if (BEAST_EXPECT(re.has_value())) + { + BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); + BEAST_EXPECTS(re->cost == 40'107, std::to_string(re->cost)); + } + + env.close(); + } + } + + void + testEscrowWasmDN() + { + testcase("escrow wasm devnet test"); + + std::string const wasmStr = + boost::algorithm::unhex(allHostFunctionsWasmHex); + std::vector wasm(wasmStr.begin(), wasmStr.end()); + + using namespace test::jtx; + Env env{*this}; + { + TestHostFunctions nfs(env, 0); + auto re = + runEscrowWasm(wasm, ESCROW_FUNCTION_NAME, {}, &nfs, 100'000); + if (BEAST_EXPECT(re.has_value())) + { + BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); + BEAST_EXPECTS(re->cost == 40'107, std::to_string(re->cost)); + } + } + + { // fail because trying to access nonexistent field + struct BadTestHostFunctions : public TestHostFunctions + { + explicit BadTestHostFunctions(Env& env) : TestHostFunctions(env) + { + } + Expected + getTxField(SField const& fname) override + { + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + } + }; + BadTestHostFunctions nfs(env); + auto re = + runEscrowWasm(wasm, ESCROW_FUNCTION_NAME, {}, &nfs, 100'000); + if (BEAST_EXPECT(re.has_value())) + { + BEAST_EXPECTS(re->result == -201, std::to_string(re->result)); + BEAST_EXPECTS(re->cost == 4'806, std::to_string(re->cost)); + } + } + + { // fail because trying to allocate more than MAX_PAGES memory + struct BadTestHostFunctions : public TestHostFunctions + { + explicit BadTestHostFunctions(Env& env) : TestHostFunctions(env) + { + } + Expected + getTxField(SField const& fname) override + { + return Bytes((MAX_PAGES + 1) * 64 * 1024, 1); + } + }; + BadTestHostFunctions nfs(env); + auto re = + runEscrowWasm(wasm, ESCROW_FUNCTION_NAME, {}, &nfs, 100'000); + if (BEAST_EXPECT(re.has_value())) + { + BEAST_EXPECTS(re->result == -201, std::to_string(re->result)); + BEAST_EXPECTS(re->cost == 4'806, std::to_string(re->cost)); + } + } + + { // fail because recursion too deep + + auto const wasmStr = boost::algorithm::unhex(deepRecursionHex); + std::vector wasm(wasmStr.begin(), wasmStr.end()); + + TestHostFunctionsSink nfs(env); + std::string funcName("recursive"); + auto re = runEscrowWasm(wasm, funcName, {}, &nfs, 1'000'000'000); + BEAST_EXPECT(!re && re.error()); + // std::cout << "bad case (deep recursion) result " << re.error() + // << std::endl; + + auto const& sink = nfs.getSink(); + auto countSubstr = [](std::string const& str, + std::string const& substr) { + std::size_t pos = 0; + int occurrences = 0; + while ((pos = str.find(substr, pos)) != std::string::npos) + { + occurrences++; + pos += substr.length(); + } + return occurrences; + }; + + auto const s = sink.messages().str(); + BEAST_EXPECT( + countSubstr(s, "WAMR Error: failure to call func") == 1); + BEAST_EXPECT( + countSubstr(s, "Exception: wasm operand stack overflow") > 0); + } + + { + auto wasmStr = boost::algorithm::unhex(ledgerSqnWasmHex); + Bytes wasm(wasmStr.begin(), wasmStr.end()); + TestLedgerDataProvider ledgerDataProvider(&env); + + std::vector imports; + WASM_IMPORT_FUNC2( + imports, getLedgerSqn, "get_ledger_sqn2", &ledgerDataProvider); + + auto& engine = WasmEngine::instance(); + + auto re = engine.run( + wasm, + ESCROW_FUNCTION_NAME, + {}, + imports, + nullptr, + 1'000'000, + env.journal); + + // expected import not provided + BEAST_EXPECT(!re); + } + } + + void + testFloat() + { + testcase("float point"); + + std::string const funcName("finish"); + + using namespace test::jtx; + + Env env(*this); + { + std::string const wasmHex = floatTestsWasmHex; + std::string const wasmStr = boost::algorithm::unhex(wasmHex); + std::vector const wasm(wasmStr.begin(), wasmStr.end()); + + TestHostFunctions hf(env, 0); + auto re = runEscrowWasm(wasm, funcName, {}, &hf, 100'000); + if (BEAST_EXPECT(re.has_value())) + { + BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); + BEAST_EXPECTS(re->cost == 91'412, std::to_string(re->cost)); + } + env.close(); + } + + { + std::string const wasmHex = float0Hex; + std::string const wasmStr = boost::algorithm::unhex(wasmHex); + std::vector const wasm(wasmStr.begin(), wasmStr.end()); + + TestHostFunctions hf(env, 0); + auto re = runEscrowWasm(wasm, funcName, {}, &hf, 100'000); + if (BEAST_EXPECT(re.has_value())) + { + BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); + BEAST_EXPECTS(re->cost == 6'533, std::to_string(re->cost)); + } + env.close(); + } + } + + void + perfTest() + { + testcase("Perf test host functions"); + + using namespace jtx; + using namespace std::chrono; + + // std::string const funcName("test"); + auto const& wasmHex = hfPerfTest; + // auto const& wasmHex = opcCallPerfTest; + std::string const wasmStr = boost::algorithm::unhex(wasmHex); + std::vector const wasm(wasmStr.begin(), wasmStr.end()); + + std::string const credType = "abcde"; + std::string const credType2 = "fghijk"; + std::string const credType3 = "0123456"; + // char const uri[] = "uri"; + + Account const alan{"alan"}; + Account const bob{"bob"}; + Account const issuer{"issuer"}; + + { + Env env(*this); + // Env env(*this, envconfig(), {}, nullptr, + // beast::severities::kTrace); + env.fund(XRP(5000), alan, bob, issuer); + env.close(); + + // // create escrow + // auto const seq = env.seq(alan); + // auto const k = keylet::escrow(alan, seq); + // // auto const allowance = 3'600; + // auto escrowCreate = escrow::create(alan, bob, XRP(1000)); + // XRPAmount txnFees = env.current()->fees().base + 1000; + // env(escrowCreate, + // escrow::finish_function(wasmHex), + // escrow::finish_time(env.now() + 11s), + // escrow::cancel_time(env.now() + 100s), + // escrow::data("1000000000"), // 1000 XRP in drops + // memodata("memo1234567"), + // memodata("2memo1234567"), + // fee(txnFees)); + + // // create depositPreauth + // auto const k = keylet::depositPreauth( + // bob, + // {{issuer.id(), makeSlice(credType)}, + // {issuer.id(), makeSlice(credType2)}, + // {issuer.id(), makeSlice(credType3)}}); + // env(deposit::authCredentials( + // bob, + // {{issuer, credType}, + // {issuer, credType2}, + // {issuer, credType3}})); + + // cREATE nft + [[maybe_unused]] uint256 const nft0{ + token::getNextID(env, alan, 0u)}; + env(token::mint(alan, 0u)); + auto const k = keylet::nftoffer(alan, 0); + [[maybe_unused]] uint256 const nft1{ + token::getNextID(env, alan, 0u)}; + + env(token::mint(alan, 0u), + token::uri( + "https://github.com/XRPLF/XRPL-Standards/discussions/" + "279?id=github.com/XRPLF/XRPL-Standards/discussions/" + "279&ut=github.com/XRPLF/XRPL-Standards/discussions/" + "279&sid=github.com/XRPLF/XRPL-Standards/discussions/" + "279&aot=github.com/XRPLF/XRPL-Standards/disc")); + [[maybe_unused]] uint256 const nft2{ + token::getNextID(env, alan, 0u)}; + env(token::mint(alan, 0u)); + env.close(); + + PerfHostFunctions nfs(env, k, env.tx()); + + auto re = runEscrowWasm(wasm, ESCROW_FUNCTION_NAME, {}, &nfs); + if (BEAST_EXPECT(re.has_value())) + { + BEAST_EXPECT(re->result); + std::cout << "Res: " << re->result << " cost: " << re->cost + << std::endl; + } + + // env(escrow::finish(alan, alan, seq), + // escrow::comp_allowance(allowance), + // fee(txnFees), + // ter(tesSUCCESS)); + + env.close(); + } + } + + void + testCodecovWasm() + { + testcase("Codecov wasm test"); + + using namespace test::jtx; + + Env env{*this}; + + auto const wasmStr = boost::algorithm::unhex(codecovTestsWasmHex); + Bytes const wasm(wasmStr.begin(), wasmStr.end()); + TestHostFunctions hfs(env, 0); + + auto const allowance = 121'895; + auto re = runEscrowWasm( + wasm, ESCROW_FUNCTION_NAME, {}, &hfs, allowance, env.journal); + + if (BEAST_EXPECT(re.has_value())) + { + BEAST_EXPECT(re->result); + BEAST_EXPECTS(re->cost == allowance, std::to_string(re->cost)); + } + } + + void + testDisabledFloat() + { + testcase("disabled float"); + + using namespace test::jtx; + Env env{*this}; + + auto const wasmStr = boost::algorithm::unhex(disabledFloatHex); + Bytes wasm(wasmStr.begin(), wasmStr.end()); + std::string const funcName("finish"); + TestHostFunctions hfs(env, 0); + + { + // f32 set constant, opcode disabled exception + auto const re = + runEscrowWasm(wasm, funcName, {}, &hfs, 1'000'000, env.journal); + if (BEAST_EXPECT(!re.has_value())) + { + BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); + } + } + + { + // f32 add, can't create module exception + wasm[0x117] = 0x92; + auto const re = + runEscrowWasm(wasm, funcName, {}, &hfs, 1'000'000, env.journal); + if (BEAST_EXPECT(!re.has_value())) + { + BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); + } + } + } + + void + run() override + { + using namespace test::jtx; + + testGetDataHelperFunctions(); + testWasmLib(); + testBadWasm(); + testWasmLedgerSqn(); + + testWasmFib(); + testWasmSha(); + testWasmB58(); + + // runing too long + // testWasmSP1Verifier(); + testWasmBG16Verifier(); + + testHFCost(); + + testEscrowWasmDN(); + testFloat(); + + testCodecovWasm(); + testDisabledFloat(); + + // perfTest(); + } +}; + +BEAST_DEFINE_TESTSUITE(Wasm, app, ripple); + +} // namespace test +} // namespace ripple diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/.gitignore b/src/test/app/wasm_fixtures/wasm_fixtures/.gitignore new file mode 100644 index 0000000000..08b2e8a256 --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/.gitignore @@ -0,0 +1,3 @@ +**/target +**/debug +*.wasm diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/all_host_functions/Cargo.lock b/src/test/app/wasm_fixtures/wasm_fixtures/all_host_functions/Cargo.lock new file mode 100644 index 0000000000..7f6a6bc717 --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/all_host_functions/Cargo.lock @@ -0,0 +1,15 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "all_host_functions" +version = "0.1.0" +dependencies = [ + "xrpl-std", +] + +[[package]] +name = "xrpl-std" +version = "0.5.1-devnet5" +source = "git+https://github.com/ripple/craft.git?branch=last-hfs2#ec4a3fb2ea45a7f27b7190976d37d3596e2ec29e" diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/all_host_functions/Cargo.toml b/src/test/app/wasm_fixtures/wasm_fixtures/all_host_functions/Cargo.toml new file mode 100644 index 0000000000..959056f374 --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/all_host_functions/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "all_host_functions" +version = "0.1.0" +edition = "2024" + +# This empty workspace definition keeps this project independent of the parent workspace +[workspace] + +[lib] +crate-type = ["cdylib"] + +[dependencies] +xrpl-std = { git = "https://github.com/ripple/craft.git", branch = "last-hfs2", package = "xrpl-std" } + +[profile.dev] +panic = "abort" + +[profile.release] +panic = "abort" +opt-level = "z" +lto = true diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/all_host_functions/src/lib.rs b/src/test/app/wasm_fixtures/wasm_fixtures/all_host_functions/src/lib.rs new file mode 100644 index 0000000000..c8a27aed87 --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/all_host_functions/src/lib.rs @@ -0,0 +1,772 @@ +#![cfg_attr(target_arch = "wasm32", no_std)] + +#[cfg(not(target_arch = "wasm32"))] +extern crate std; + +// +// Host Functions Test +// Tests 26 host functions (across 7 categories) +// +// With craft you can run this test with: +// craft test --project host_functions_test --test-case host_functions_test +// +// Amount Format Update: +// - XRP amounts now return as 8-byte serialized rippled objects +// - IOU and MPT amounts return in variable-length serialized format +// - Format details: https://xrpl.org/docs/references/protocol/binary-format#amount-fields +// +// Error Code Ranges: +// -100 to -199: Ledger Header Functions (3 functions) +// -200 to -299: Transaction Data Functions (5 functions) +// -300 to -399: Current Ledger Object Functions (4 functions) +// -400 to -499: Any Ledger Object Functions (5 functions) +// -500 to -599: Keylet Generation Functions (4 functions) +// -600 to -699: Utility Functions (4 functions) +// -700 to -799: Data Update Functions (1 function) +// + +use xrpl_std::core::current_tx::escrow_finish::EscrowFinish; +use xrpl_std::core::current_tx::traits::TransactionCommonFields; +use xrpl_std::host; +use xrpl_std::host::trace::{trace, trace_account_buf, trace_data, trace_num, DataRepr}; +use xrpl_std::sfield; + +#[unsafe(no_mangle)] +pub extern "C" fn finish() -> i32 { + let _ = trace("=== HOST FUNCTIONS TEST ==="); + let _ = trace("Testing 26 host functions"); + + // Category 1: Ledger Header Data Functions (3 functions) + // Error range: -100 to -199 + match test_ledger_header_functions() { + 0 => (), + err => return err, + } + + // Category 2: Transaction Data Functions (5 functions) + // Error range: -200 to -299 + match test_transaction_data_functions() { + 0 => (), + err => return err, + } + + // Category 3: Current Ledger Object Functions (4 functions) + // Error range: -300 to -399 + match test_current_ledger_object_functions() { + 0 => (), + err => return err, + } + + // Category 4: Any Ledger Object Functions (5 functions) + // Error range: -400 to -499 + match test_any_ledger_object_functions() { + 0 => (), + err => return err, + } + + // Category 5: Keylet Generation Functions (4 functions) + // Error range: -500 to -599 + match test_keylet_generation_functions() { + 0 => (), + err => return err, + } + + // Category 6: Utility Functions (4 functions) + // Error range: -600 to -699 + match test_utility_functions() { + 0 => (), + err => return err, + } + + // Category 7: Data Update Functions (1 function) + // Error range: -700 to -799 + match test_data_update_functions() { + 0 => (), + err => return err, + } + + let _ = trace("SUCCESS: All host function tests passed!"); + 1 // Success return code for WASM finish function +} + +/// Test Category 1: Ledger Header Data Functions (3 functions) +/// - get_ledger_sqn() - Get ledger sequence number +/// - get_parent_ledger_time() - Get parent ledger timestamp +/// - get_parent_ledger_hash() - Get parent ledger hash +fn test_ledger_header_functions() -> i32 { + let _ = trace("--- Category 1: Ledger Header Functions ---"); + + // Test 1.1: get_ledger_sqn() - should return current ledger sequence number + let sqn_result = unsafe { host::get_ledger_sqn() }; + + if sqn_result <= 0 { + let _ = trace_num("ERROR: get_ledger_sqn failed:", sqn_result as i64); + return -101; // Ledger sequence number test failed + } + let _ = trace_num("Ledger sequence number:", sqn_result as i64); + + // Test 1.2: get_parent_ledger_time() - should return parent ledger timestamp + let time_result = unsafe { host::get_parent_ledger_time() }; + + if time_result <= 0 { + let _ = trace_num("ERROR: get_parent_ledger_time failed:", time_result as i64); + return -102; // Parent ledger time test failed + } + let _ = trace_num("Parent ledger time:", time_result as i64); + + // Test 1.3: get_parent_ledger_hash() - should return parent ledger hash (32 bytes) + let mut hash_buffer = [0u8; 32]; + let hash_result = + unsafe { host::get_parent_ledger_hash(hash_buffer.as_mut_ptr(), hash_buffer.len()) }; + + if hash_result != 32 { + let _ = trace_num( + "ERROR: get_parent_ledger_hash wrong length:", + hash_result as i64, + ); + return -103; // Parent ledger hash test failed - should be exactly 32 bytes + } + let _ = trace_data("Parent ledger hash:", &hash_buffer, DataRepr::AsHex); + + let _ = trace("SUCCESS: Ledger header functions"); + 0 +} + +/// Test Category 2: Transaction Data Functions (5 functions) +/// Tests all functions for accessing current transaction data +fn test_transaction_data_functions() -> i32 { + let _ = trace("--- Category 2: Transaction Data Functions ---"); + + // Test 2.1: get_tx_field() - Basic transaction field access + // Test with Account field (required, 20 bytes) + let mut account_buffer = [0u8; 20]; + let account_len = unsafe { + host::get_tx_field( + sfield::Account, + account_buffer.as_mut_ptr(), + account_buffer.len(), + ) + }; + + if account_len != 20 { + let _ = trace_num( + "ERROR: get_tx_field(Account) wrong length:", + account_len as i64, + ); + return -201; // Basic transaction field test failed + } + let _ = trace_account_buf("Transaction Account:", &account_buffer); + + // Test with Fee field (XRP amount - 8 bytes in new serialized format) + // New format: XRP amounts are always 8 bytes (positive: value | cPositive flag, negative: just value) + let mut fee_buffer = [0u8; 8]; + let fee_len = + unsafe { host::get_tx_field(sfield::Fee, fee_buffer.as_mut_ptr(), fee_buffer.len()) }; + + if fee_len != 8 { + let _ = trace_num( + "ERROR: get_tx_field(Fee) wrong length (expected 8 bytes for XRP):", + fee_len as i64, + ); + return -202; // Fee field test failed - XRP amounts should be exactly 8 bytes + } + let _ = trace_num("Transaction Fee length:", fee_len as i64); + let _ = trace_data( + "Transaction Fee (serialized XRP amount):", + &fee_buffer, + DataRepr::AsHex, + ); + + // Test with Sequence field (required, 4 bytes uint32) + let mut seq_buffer = [0u8; 4]; + let seq_len = + unsafe { host::get_tx_field(sfield::Sequence, seq_buffer.as_mut_ptr(), seq_buffer.len()) }; + + if seq_len != 4 { + let _ = trace_num( + "ERROR: get_tx_field(Sequence) wrong length:", + seq_len as i64, + ); + return -203; // Sequence field test failed + } + let _ = trace_data("Transaction Sequence:", &seq_buffer, DataRepr::AsHex); + + // NOTE: get_tx_field2() through get_tx_field6() have been deprecated. + // Use get_tx_field() with appropriate parameters for all transaction field access. + + // Test 2.2: get_tx_nested_field() - Nested field access with locator + let locator = [0x01, 0x00]; // Simple locator for first element + let mut nested_buffer = [0u8; 32]; + let nested_result = unsafe { + host::get_tx_nested_field( + locator.as_ptr(), + locator.len(), + nested_buffer.as_mut_ptr(), + nested_buffer.len(), + ) + }; + + if nested_result < 0 { + let _ = trace_num( + "INFO: get_tx_nested_field not applicable:", + nested_result as i64, + ); + // Expected - locator may not match transaction structure + } else { + let _ = trace_num("Nested field length:", nested_result as i64); + let _ = trace_data( + "Nested field:", + &nested_buffer[..nested_result as usize], + DataRepr::AsHex, + ); + } + + // Test 2.3: get_tx_array_len() - Get array length + let signers_len = unsafe { host::get_tx_array_len(sfield::Signers) }; + let _ = trace_num("Signers array length:", signers_len as i64); + + let memos_len = unsafe { host::get_tx_array_len(sfield::Memos) }; + let _ = trace_num("Memos array length:", memos_len as i64); + + // Test 2.4: get_tx_nested_array_len() - Get nested array length with locator + let nested_array_len = + unsafe { host::get_tx_nested_array_len(locator.as_ptr(), locator.len()) }; + + if nested_array_len < 0 { + let _ = trace_num( + "INFO: get_tx_nested_array_len not applicable:", + nested_array_len as i64, + ); + } else { + let _ = trace_num("Nested array length:", nested_array_len as i64); + } + + let _ = trace("SUCCESS: Transaction data functions"); + 0 +} + +/// Test Category 3: Current Ledger Object Functions (4 functions) +/// Tests functions that access the current ledger object being processed +fn test_current_ledger_object_functions() -> i32 { + let _ = trace("--- Category 3: Current Ledger Object Functions ---"); + + // Test 3.1: get_current_ledger_obj_field() - Access field from current ledger object + // Test with Balance field (XRP amount - 8 bytes in new serialized format) + let mut balance_buffer = [0u8; 8]; + let balance_result = unsafe { + host::get_current_ledger_obj_field( + sfield::Balance, + balance_buffer.as_mut_ptr(), + balance_buffer.len(), + ) + }; + + if balance_result <= 0 { + let _ = trace_num( + "INFO: get_current_ledger_obj_field(Balance) failed (may be expected):", + balance_result as i64, + ); + // This might fail if current ledger object doesn't have balance field + } else if balance_result == 8 { + let _ = trace_num( + "Current object balance length (XRP amount):", + balance_result as i64, + ); + let _ = trace_data( + "Current object balance (serialized XRP amount):", + &balance_buffer, + DataRepr::AsHex, + ); + } else { + let _ = trace_num( + "Current object balance length (non-XRP amount):", + balance_result as i64, + ); + let _ = trace_data( + "Current object balance:", + &balance_buffer[..balance_result as usize], + DataRepr::AsHex, + ); + } + + // Test with Account field + let mut current_account_buffer = [0u8; 20]; + let current_account_result = unsafe { + host::get_current_ledger_obj_field( + sfield::Account, + current_account_buffer.as_mut_ptr(), + current_account_buffer.len(), + ) + }; + + if current_account_result <= 0 { + let _ = trace_num( + "INFO: get_current_ledger_obj_field(Account) failed:", + current_account_result as i64, + ); + } else { + let _ = trace_account_buf("Current ledger object account:", ¤t_account_buffer); + } + + // Test 3.2: get_current_ledger_obj_nested_field() - Nested field access + let locator = [0x01, 0x00]; // Simple locator + let mut current_nested_buffer = [0u8; 32]; + let current_nested_result = unsafe { + host::get_current_ledger_obj_nested_field( + locator.as_ptr(), + locator.len(), + current_nested_buffer.as_mut_ptr(), + current_nested_buffer.len(), + ) + }; + + if current_nested_result < 0 { + let _ = trace_num( + "INFO: get_current_ledger_obj_nested_field not applicable:", + current_nested_result as i64, + ); + } else { + let _ = trace_num("Current nested field length:", current_nested_result as i64); + let _ = trace_data( + "Current nested field:", + ¤t_nested_buffer[..current_nested_result as usize], + DataRepr::AsHex, + ); + } + + // Test 3.3: get_current_ledger_obj_array_len() - Array length in current object + let current_array_len = unsafe { host::get_current_ledger_obj_array_len(sfield::Signers) }; + let _ = trace_num( + "Current object Signers array length:", + current_array_len as i64, + ); + + // Test 3.4: get_current_ledger_obj_nested_array_len() - Nested array length + let current_nested_array_len = + unsafe { host::get_current_ledger_obj_nested_array_len(locator.as_ptr(), locator.len()) }; + + if current_nested_array_len < 0 { + let _ = trace_num( + "INFO: get_current_ledger_obj_nested_array_len not applicable:", + current_nested_array_len as i64, + ); + } else { + let _ = trace_num( + "Current nested array length:", + current_nested_array_len as i64, + ); + } + + let _ = trace("SUCCESS: Current ledger object functions"); + 0 +} + +/// Test Category 4: Any Ledger Object Functions (5 functions) +/// Tests functions that work with cached ledger objects +fn test_any_ledger_object_functions() -> i32 { + let _ = trace("--- Category 4: Any Ledger Object Functions ---"); + + // First we need to cache a ledger object to test the other functions + // Get the account from transaction and generate its keylet + let escrow_finish = EscrowFinish; + let account_id = escrow_finish.get_account().unwrap(); + + // Test 4.1: cache_ledger_obj() - Cache a ledger object + let mut keylet_buffer = [0u8; 32]; + let keylet_result = unsafe { + host::account_keylet( + account_id.0.as_ptr(), + account_id.0.len(), + keylet_buffer.as_mut_ptr(), + keylet_buffer.len(), + ) + }; + + if keylet_result != 32 { + let _ = trace_num( + "ERROR: account_keylet failed for caching test:", + keylet_result as i64, + ); + return -401; // Keylet generation failed for caching test + } + + let cache_result = + unsafe { host::cache_ledger_obj(keylet_buffer.as_ptr(), keylet_result as usize, 0) }; + + if cache_result <= 0 { + let _ = trace_num( + "INFO: cache_ledger_obj failed (expected with test fixtures):", + cache_result as i64, + ); + // Test fixtures may not contain the account object - this is expected + // We'll test the interface but expect failures + + // Test 4.2-4.5 with invalid slot (should fail gracefully) + let mut test_buffer = [0u8; 32]; + + // Test get_ledger_obj_field with invalid slot + let field_result = unsafe { + host::get_ledger_obj_field( + 1, + sfield::Balance, + test_buffer.as_mut_ptr(), + test_buffer.len(), + ) + }; + if field_result < 0 { + let _ = trace_num( + "INFO: get_ledger_obj_field failed as expected (no cached object):", + field_result as i64, + ); + } + + // Test get_ledger_obj_nested_field with invalid slot + let locator = [0x01, 0x00]; + let nested_result = unsafe { + host::get_ledger_obj_nested_field( + 1, + locator.as_ptr(), + locator.len(), + test_buffer.as_mut_ptr(), + test_buffer.len(), + ) + }; + if nested_result < 0 { + let _ = trace_num( + "INFO: get_ledger_obj_nested_field failed as expected:", + nested_result as i64, + ); + } + + // Test get_ledger_obj_array_len with invalid slot + let array_result = unsafe { host::get_ledger_obj_array_len(1, sfield::Signers) }; + if array_result < 0 { + let _ = trace_num( + "INFO: get_ledger_obj_array_len failed as expected:", + array_result as i64, + ); + } + + // Test get_ledger_obj_nested_array_len with invalid slot + let nested_array_result = + unsafe { host::get_ledger_obj_nested_array_len(1, locator.as_ptr(), locator.len()) }; + if nested_array_result < 0 { + let _ = trace_num( + "INFO: get_ledger_obj_nested_array_len failed as expected:", + nested_array_result as i64, + ); + } + + let _ = trace("SUCCESS: Any ledger object functions (interface tested)"); + return 0; + } + + // If we successfully cached an object, test the access functions + let slot = cache_result; + let _ = trace_num("Successfully cached object in slot:", slot as i64); + + // Test 4.2: get_ledger_obj_field() - Access field from cached object + let mut cached_balance_buffer = [0u8; 8]; + let cached_balance_result = unsafe { + host::get_ledger_obj_field( + slot, + sfield::Balance, + cached_balance_buffer.as_mut_ptr(), + cached_balance_buffer.len(), + ) + }; + + if cached_balance_result <= 0 { + let _ = trace_num( + "INFO: get_ledger_obj_field(Balance) failed:", + cached_balance_result as i64, + ); + } else if cached_balance_result == 8 { + let _ = trace_num( + "Cached object balance length (XRP amount):", + cached_balance_result as i64, + ); + let _ = trace_data( + "Cached object balance (serialized XRP amount):", + &cached_balance_buffer, + DataRepr::AsHex, + ); + } else { + let _ = trace_num( + "Cached object balance length (non-XRP amount):", + cached_balance_result as i64, + ); + let _ = trace_data( + "Cached object balance:", + &cached_balance_buffer[..cached_balance_result as usize], + DataRepr::AsHex, + ); + } + + // Test 4.3: get_ledger_obj_nested_field() - Nested field from cached object + let locator = [0x01, 0x00]; + let mut cached_nested_buffer = [0u8; 32]; + let cached_nested_result = unsafe { + host::get_ledger_obj_nested_field( + slot, + locator.as_ptr(), + locator.len(), + cached_nested_buffer.as_mut_ptr(), + cached_nested_buffer.len(), + ) + }; + + if cached_nested_result < 0 { + let _ = trace_num( + "INFO: get_ledger_obj_nested_field not applicable:", + cached_nested_result as i64, + ); + } else { + let _ = trace_num("Cached nested field length:", cached_nested_result as i64); + let _ = trace_data( + "Cached nested field:", + &cached_nested_buffer[..cached_nested_result as usize], + DataRepr::AsHex, + ); + } + + // Test 4.4: get_ledger_obj_array_len() - Array length from cached object + let cached_array_len = unsafe { host::get_ledger_obj_array_len(slot, sfield::Signers) }; + let _ = trace_num( + "Cached object Signers array length:", + cached_array_len as i64, + ); + + // Test 4.5: get_ledger_obj_nested_array_len() - Nested array length from cached object + let cached_nested_array_len = + unsafe { host::get_ledger_obj_nested_array_len(slot, locator.as_ptr(), locator.len()) }; + + if cached_nested_array_len < 0 { + let _ = trace_num( + "INFO: get_ledger_obj_nested_array_len not applicable:", + cached_nested_array_len as i64, + ); + } else { + let _ = trace_num( + "Cached nested array length:", + cached_nested_array_len as i64, + ); + } + + let _ = trace("SUCCESS: Any ledger object functions"); + 0 +} + +/// Test Category 5: Keylet Generation Functions (4 functions) +/// Tests keylet generation functions for different ledger entry types +fn test_keylet_generation_functions() -> i32 { + let _ = trace("--- Category 5: Keylet Generation Functions ---"); + + let escrow_finish = EscrowFinish; + let account_id = escrow_finish.get_account().unwrap(); + + // Test 5.1: account_keylet() - Generate keylet for account + let mut account_keylet_buffer = [0u8; 32]; + let account_keylet_result = unsafe { + host::account_keylet( + account_id.0.as_ptr(), + account_id.0.len(), + account_keylet_buffer.as_mut_ptr(), + account_keylet_buffer.len(), + ) + }; + + if account_keylet_result != 32 { + let _ = trace_num( + "ERROR: account_keylet failed:", + account_keylet_result as i64, + ); + return -501; // Account keylet generation failed + } + let _ = trace_data("Account keylet:", &account_keylet_buffer, DataRepr::AsHex); + + // Test 5.2: credential_keylet() - Generate keylet for credential + let mut credential_keylet_buffer = [0u8; 32]; + let credential_keylet_result = unsafe { + host::credential_keylet( + account_id.0.as_ptr(), // Subject + account_id.0.len(), + account_id.0.as_ptr(), // Issuer - same account for test + account_id.0.len(), + b"TestType".as_ptr(), // Credential type + 9usize, // Length of "TestType" + credential_keylet_buffer.as_mut_ptr(), + credential_keylet_buffer.len(), + ) + }; + + if credential_keylet_result <= 0 { + let _ = trace_num( + "INFO: credential_keylet failed (expected - interface issue):", + credential_keylet_result as i64, + ); + // This is expected to fail due to unusual parameter types + } else { + let _ = trace_data( + "Credential keylet:", + &credential_keylet_buffer[..credential_keylet_result as usize], + DataRepr::AsHex, + ); + } + + // Test 5.3: escrow_keylet() - Generate keylet for escrow + let mut escrow_keylet_buffer = [0u8; 32]; + let escrow_keylet_result = unsafe { + host::escrow_keylet( + account_id.0.as_ptr(), + account_id.0.len(), + 1000, // Sequence number + escrow_keylet_buffer.as_mut_ptr(), + escrow_keylet_buffer.len(), + ) + }; + + if escrow_keylet_result != 32 { + let _ = trace_num("ERROR: escrow_keylet failed:", escrow_keylet_result as i64); + return -503; // Escrow keylet generation failed + } + let _ = trace_data("Escrow keylet:", &escrow_keylet_buffer, DataRepr::AsHex); + + // Test 5.4: oracle_keylet() - Generate keylet for oracle + let mut oracle_keylet_buffer = [0u8; 32]; + let oracle_keylet_result = unsafe { + host::oracle_keylet( + account_id.0.as_ptr(), + account_id.0.len(), + 42, // Document ID + oracle_keylet_buffer.as_mut_ptr(), + oracle_keylet_buffer.len(), + ) + }; + + if oracle_keylet_result != 32 { + let _ = trace_num("ERROR: oracle_keylet failed:", oracle_keylet_result as i64); + return -504; // Oracle keylet generation failed + } + let _ = trace_data("Oracle keylet:", &oracle_keylet_buffer, DataRepr::AsHex); + + let _ = trace("SUCCESS: Keylet generation functions"); + 0 +} + +/// Test Category 6: Utility Functions (4 functions) +/// Tests utility functions for hashing, NFT access, and tracing +fn test_utility_functions() -> i32 { + let _ = trace("--- Category 6: Utility Functions ---"); + + // Test 6.1: compute_sha512_half() - SHA512 hash computation (first 32 bytes) + let test_data = b"Hello, XRPL WASM world!"; + let mut hash_output = [0u8; 32]; + let hash_result = unsafe { + host::compute_sha512_half( + test_data.as_ptr(), + test_data.len(), + hash_output.as_mut_ptr(), + hash_output.len(), + ) + }; + + if hash_result != 32 { + let _ = trace_num("ERROR: compute_sha512_half failed:", hash_result as i64); + return -601; // SHA512 half computation failed + } + let _ = trace_data("Input data:", test_data, DataRepr::AsHex); + let _ = trace_data("SHA512 half hash:", &hash_output, DataRepr::AsHex); + + // Test 6.2: get_nft() - NFT data retrieval + let escrow_finish = EscrowFinish; + let account_id = escrow_finish.get_account().unwrap(); + let nft_id = [0u8; 32]; // Dummy NFT ID for testing + let mut nft_buffer = [0u8; 256]; + let nft_result = unsafe { + host::get_nft( + account_id.0.as_ptr(), + account_id.0.len(), + nft_id.as_ptr(), + nft_id.len(), + nft_buffer.as_mut_ptr(), + nft_buffer.len(), + ) + }; + + if nft_result <= 0 { + let _ = trace_num( + "INFO: get_nft failed (expected - no such NFT):", + nft_result as i64, + ); + // This is expected - test account likely doesn't own the dummy NFT + } else { + let _ = trace_num("NFT data length:", nft_result as i64); + let _ = trace_data( + "NFT data:", + &nft_buffer[..nft_result as usize], + DataRepr::AsHex, + ); + } + + // Test 6.3: trace() - Debug logging with data + let trace_message = b"Test trace message"; + let trace_data_payload = b"payload"; + let trace_result = unsafe { + host::trace( + trace_message.as_ptr(), + trace_message.len(), + trace_data_payload.as_ptr(), + trace_data_payload.len(), + 1, // as_hex = true + ) + }; + + if trace_result < 0 { + let _ = trace_num("ERROR: trace() failed:", trace_result as i64); + return -603; // Trace function failed + } + let _ = trace_num("Trace function bytes written:", trace_result as i64); + + // Test 6.4: trace_num() - Debug logging with number + let test_number = 42i64; + let trace_num_result = trace_num("Test number trace", test_number); + + use xrpl_std::host::Result; + match trace_num_result { + Result::Ok(_) => { + let _ = trace_num("Trace_num function succeeded", 0); + } + Result::Err(_) => { + let _ = trace_num("ERROR: trace_num() failed:", -604); + return -604; // Trace number function failed + } + } + + let _ = trace("SUCCESS: Utility functions"); + 0 +} + +/// Test Category 7: Data Update Functions (1 function) +/// Tests the function for modifying the current ledger entry +fn test_data_update_functions() -> i32 { + let _ = trace("--- Category 7: Data Update Functions ---"); + + // Test 7.1: update_data() - Update current ledger entry data + let update_payload = b"Updated ledger entry data from WASM test"; + + let update_result = unsafe { host::update_data(update_payload.as_ptr(), update_payload.len()) }; + + if update_result != 0 { + let _ = trace_num("ERROR: update_data failed:", update_result as i64); + return -701; // Data update failed + } + + let _ = trace_data( + "Successfully updated ledger entry with:", + update_payload, + DataRepr::AsHex, + ); + let _ = trace("SUCCESS: Data update functions"); + 0 +} diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/all_keylets/Cargo.lock b/src/test/app/wasm_fixtures/wasm_fixtures/all_keylets/Cargo.lock new file mode 100644 index 0000000000..3491dc00fa --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/all_keylets/Cargo.lock @@ -0,0 +1,15 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "all_keylets" +version = "0.0.1" +dependencies = [ + "xrpl-std", +] + +[[package]] +name = "xrpl-std" +version = "0.5.1-devnet5" +source = "git+https://github.com/ripple/craft.git?branch=lastdevnet#c3a92273195a211ac9b41d641b0d20f60f982bb2" diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/all_keylets/Cargo.toml b/src/test/app/wasm_fixtures/wasm_fixtures/all_keylets/Cargo.toml new file mode 100644 index 0000000000..620e28fceb --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/all_keylets/Cargo.toml @@ -0,0 +1,21 @@ +[package] +edition = "2024" +name = "all_keylets" +version = "0.0.1" + +# This empty workspace definition keeps this project independent of the parent workspace +[workspace] + +[lib] +crate-type = ["cdylib"] + +[profile.release] +lto = true +opt-level = 's' +panic = "abort" + +[dependencies] +xrpl-std = { git = "https://github.com/ripple/craft.git", branch = "lastdevnet", package = "xrpl-std" } + +[profile.dev] +panic = "abort" diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/all_keylets/src/lib.rs b/src/test/app/wasm_fixtures/wasm_fixtures/all_keylets/src/lib.rs new file mode 100644 index 0000000000..970db7bd50 --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/all_keylets/src/lib.rs @@ -0,0 +1,179 @@ +#![cfg_attr(target_arch = "wasm32", no_std)] + +#[cfg(not(target_arch = "wasm32"))] +extern crate std; + +use crate::host::{Error, Result, Result::Err, Result::Ok}; +use xrpl_std::core::ledger_objects::current_escrow::CurrentEscrow; +use xrpl_std::core::ledger_objects::current_escrow::get_current_escrow; +use xrpl_std::core::ledger_objects::ledger_object; +use xrpl_std::core::ledger_objects::traits::CurrentEscrowFields; +use xrpl_std::core::types::amount::asset::{Asset, IouAsset, XrpAsset}; +use xrpl_std::core::types::amount::currency_code::CurrencyCode; +use xrpl_std::core::types::amount::mpt_id::MptId; +use xrpl_std::core::types::keylets; +use xrpl_std::host; +use xrpl_std::host::trace::{DataRepr, trace, trace_account, trace_data, trace_num}; +use xrpl_std::sfield; + +#[unsafe(no_mangle)] +pub fn object_exists( + keylet_result: Result, + keylet_type: &str, + field: i32, +) -> Result { + match keylet_result { + Ok(keylet) => { + let _ = trace_data(keylet_type, &keylet, DataRepr::AsHex); + + let slot = unsafe { host::cache_ledger_obj(keylet.as_ptr(), keylet.len(), 0) }; + if slot <= 0 { + let _ = trace_num("Error: ", slot.into()); + return Err(Error::from_code(slot)); + } + if field == 0 { + let new_field = sfield::PreviousTxnID; + let _ = trace_num("Getting field: ", new_field.into()); + match ledger_object::get_hash_256_field(slot, new_field) { + Ok(data) => { + let _ = trace_data("Field data: ", &data.0, DataRepr::AsHex); + } + Err(result_code) => { + let _ = trace_num("Error getting field: ", result_code.into()); + return Err(result_code); + } + } + } else { + let _ = trace_num("Getting field: ", field.into()); + match ledger_object::get_account_id_field(slot, field) { + Ok(data) => { + let _ = trace_data("Field data: ", &data.0, DataRepr::AsHex); + } + Err(result_code) => { + let _ = trace_num("Error getting field: ", result_code.into()); + return Err(result_code); + } + } + } + + Ok(true) + } + Err(error) => { + let _ = trace_num("Error getting keylet: ", error.into()); + Err(error) + } + } +} + +#[unsafe(no_mangle)] +pub extern "C" fn finish() -> i32 { + let _ = trace("$$$$$ STARTING WASM EXECUTION $$$$$"); + + let escrow: CurrentEscrow = get_current_escrow(); + + let account = escrow.get_account().unwrap_or_panic(); + let _ = trace_account("Account:", &account); + + let destination = escrow.get_destination().unwrap_or_panic(); + let _ = trace_account("Destination:", &destination); + + let mut seq = 5; + + macro_rules! check_object_exists { + ($keylet:expr, $type:expr, $field:expr) => { + match object_exists($keylet, $type, $field) { + Ok(_exists) => { + // false isn't returned + let _ = trace(concat!( + $type, + " object exists, proceeding with escrow finish." + )); + } + Err(error) => { + let _ = trace_num("Current seq value:", seq.try_into().unwrap()); + return error.code(); + } + } + }; + } + + let account_keylet = keylets::account_keylet(&account); + check_object_exists!(account_keylet, "Account", sfield::Account); + + let currency_code: &[u8; 3] = b"USD"; + let currency: CurrencyCode = CurrencyCode::from(*currency_code); + let line_keylet = keylets::line_keylet(&account, &destination, ¤cy); + check_object_exists!(line_keylet, "Trustline", sfield::Generic); + seq += 1; + + let asset1 = Asset::XRP(XrpAsset {}); + let asset2 = Asset::IOU(IouAsset::new(destination, currency)); + check_object_exists!( + keylets::amm_keylet(&asset1, &asset2), + "AMM", + sfield::Account + ); + + let check_keylet = keylets::check_keylet(&account, seq); + check_object_exists!(check_keylet, "Check", sfield::Account); + seq += 1; + + let cred_type: &[u8] = b"termsandconditions"; + let credential_keylet = keylets::credential_keylet(&account, &account, cred_type); + check_object_exists!(credential_keylet, "Credential", sfield::Subject); + seq += 1; + + let delegate_keylet = keylets::delegate_keylet(&account, &destination); + check_object_exists!(delegate_keylet, "Delegate", sfield::Account); + seq += 1; + + let deposit_preauth_keylet = keylets::deposit_preauth_keylet(&account, &destination); + check_object_exists!(deposit_preauth_keylet, "DepositPreauth", sfield::Account); + seq += 1; + + let did_keylet = keylets::did_keylet(&account); + check_object_exists!(did_keylet, "DID", sfield::Account); + seq += 1; + + let escrow_keylet = keylets::escrow_keylet(&account, seq); + check_object_exists!(escrow_keylet, "Escrow", sfield::Account); + seq += 1; + + let mpt_issuance_keylet = keylets::mpt_issuance_keylet(&account, seq); + let mpt_id = MptId::new(seq.try_into().unwrap(), account); + check_object_exists!(mpt_issuance_keylet, "MPTIssuance", sfield::Issuer); + seq += 1; + + let mptoken_keylet = keylets::mptoken_keylet(&mpt_id, &destination); + check_object_exists!(mptoken_keylet, "MPToken", sfield::Account); + + let nft_offer_keylet = keylets::nft_offer_keylet(&destination, 6); + check_object_exists!(nft_offer_keylet, "NFTokenOffer", sfield::Owner); + + let offer_keylet = keylets::offer_keylet(&account, seq); + check_object_exists!(offer_keylet, "Offer", sfield::Account); + seq += 1; + + let paychan_keylet = keylets::paychan_keylet(&account, &destination, seq); + check_object_exists!(paychan_keylet, "PayChannel", sfield::Account); + seq += 1; + + let pd_keylet = keylets::permissioned_domain_keylet(&account, seq); + check_object_exists!(pd_keylet, "PermissionedDomain", sfield::Owner); + seq += 1; + + let signers_keylet = keylets::signers_keylet(&account); + check_object_exists!(signers_keylet, "SignerList", sfield::Generic); + seq += 1; + + seq += 1; // ticket sequence number is one greater + let ticket_keylet = keylets::ticket_keylet(&account, seq); + check_object_exists!(ticket_keylet, "Ticket", sfield::Account); + seq += 1; + + let vault_keylet = keylets::vault_keylet(&account, seq); + check_object_exists!(vault_keylet, "Vault", sfield::Account); + // seq += 1; + + 1 // All keylets exist, finish the escrow. +} diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/b58.c b/src/test/app/wasm_fixtures/wasm_fixtures/b58.c new file mode 100644 index 0000000000..00b6178ec0 --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/b58.c @@ -0,0 +1,73 @@ +#include + +static char const b58digits_ordered[] = + "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; + +uint8_t e_data[32 * 1024]; + +void* +allocate(int sz) +{ + static int idx = 0; + if (idx >= 32) + return 0; + if (sz > 1024) + return 0; + return &e_data[idx++ << 10]; +} + +void +deallocate(void* p) +{ +} + +extern int32_t +b58enco(char* b58, int32_t b58sz, void const* data, int32_t binsz) +{ + uint8_t const* bin = data; + int32_t carry; + int32_t i, j, high, zcount = 0; + int32_t size; + + while (zcount < binsz && !bin[zcount]) + ++zcount; + + size = (binsz - zcount) * 138 / 100 + 1; + uint8_t* buf = allocate(size); + if (!buf) + return 0; + // memset(buf, 0, size); + for (i = 0; i < size; ++i) + buf[i] = 0; + + for (i = zcount, high = size - 1; i < binsz; ++i, high = j) + { + for (carry = bin[i], j = size - 1; (j > high) || carry; --j) + { + carry += 256 * buf[j]; + buf[j] = carry % 58; + carry /= 58; + if (!j) + break; + } + } + + for (j = 0; j < size && !buf[j]; ++j) + ; + + if (b58sz <= zcount + size - j) + return 0; + + if (zcount) + { + // memset(b58, '1', zcount); + for (i = 0; i < zcount; ++i) + b58[i] = '1'; + } + + for (i = zcount; j < size; ++i, ++j) + b58[i] = b58digits_ordered[buf[j]]; + b58[i] = '\0'; + + return i + 1; +} diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/codecov_tests/Cargo.lock b/src/test/app/wasm_fixtures/wasm_fixtures/codecov_tests/Cargo.lock new file mode 100644 index 0000000000..704846d35a --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/codecov_tests/Cargo.lock @@ -0,0 +1,15 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "codecov_tests" +version = "0.0.1" +dependencies = [ + "xrpl-std", +] + +[[package]] +name = "xrpl-std" +version = "0.5.1-devnet5" +source = "git+https://github.com/ripple/craft.git?branch=last-hfs2#ec4a3fb2ea45a7f27b7190976d37d3596e2ec29e" diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/codecov_tests/Cargo.toml b/src/test/app/wasm_fixtures/wasm_fixtures/codecov_tests/Cargo.toml new file mode 100644 index 0000000000..52ca804bc0 --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/codecov_tests/Cargo.toml @@ -0,0 +1,18 @@ +[package] +edition = "2024" +name = "codecov_tests" +version = "0.0.1" + +# This empty workspace definition keeps this project independent of the parent workspace +[workspace] + +[lib] +crate-type = ["cdylib"] + +[profile.release] +lto = true +opt-level = 's' +panic = "abort" + +[dependencies] +xrpl-std = { git = "https://github.com/ripple/craft.git", branch = "last-hfs2", package = "xrpl-std" } diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/codecov_tests/src/host_bindings_loose.rs b/src/test/app/wasm_fixtures/wasm_fixtures/codecov_tests/src/host_bindings_loose.rs new file mode 100644 index 0000000000..706add2ed7 --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/codecov_tests/src/host_bindings_loose.rs @@ -0,0 +1,56 @@ +//TODO add docs after discussing the interface +//Note that Craft currently does not honor the rounding modes +#[allow(unused)] +pub const FLOAT_ROUNDING_MODES_TO_NEAREST: i32 = 0; +#[allow(unused)] +pub const FLOAT_ROUNDING_MODES_TOWARDS_ZERO: i32 = 1; +#[allow(unused)] +pub const FLOAT_ROUNDING_MODES_DOWNWARD: i32 = 2; +#[allow(unused)] +pub const FLOAT_ROUNDING_MODES_UPWARD: i32 = 3; + +// pub enum RippledRoundingModes{ +// ToNearest = 0, +// TowardsZero = 1, +// DOWNWARD = 2, +// UPWARD = 3 +// } + +#[allow(unused)] +#[link(wasm_import_module = "host_lib")] +unsafe extern "C" { + pub fn get_parent_ledger_hash(out_buff_ptr: i32, out_buff_len: i32) -> i32; + + pub fn cache_ledger_obj(keylet_ptr: i32, keylet_len: i32, cache_num: i32) -> i32; + + pub fn get_tx_nested_array_len(locator_ptr: i32, locator_len: i32) -> i32; + + pub fn account_keylet( + account_ptr: i32, + account_len: i32, + out_buff_ptr: *mut u8, + out_buff_len: usize, + ) -> i32; + + pub fn amm_keylet( + issue1_ptr: *const u8, + issue1_len: usize, + issue2_ptr: i32, + issue2_len: i32, + out_buff_ptr: *mut u8, + out_buff_len: usize, + ) -> i32; + + pub fn line_keylet( + account1_ptr: *const u8, + account1_len: usize, + account2_ptr: *const u8, + account2_len: usize, + currency_ptr: i32, + currency_len: i32, + out_buff_ptr: *mut u8, + out_buff_len: usize, + ) -> i32; + + pub fn trace_num(msg_read_ptr: i32, msg_read_len: i32, number: i64) -> i32; +} diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/codecov_tests/src/lib.rs b/src/test/app/wasm_fixtures/wasm_fixtures/codecov_tests/src/lib.rs new file mode 100644 index 0000000000..36c61fe439 --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/codecov_tests/src/lib.rs @@ -0,0 +1,1244 @@ +#![cfg_attr(target_arch = "wasm32", no_std)] + +#[cfg(not(target_arch = "wasm32"))] +extern crate std; + +use core::panic; +use xrpl_std::core::current_tx::escrow_finish::{get_current_escrow_finish, EscrowFinish}; +use xrpl_std::core::current_tx::traits::TransactionCommonFields; +use xrpl_std::core::error_codes; +use xrpl_std::core::locator::Locator; +use xrpl_std::core::types::amount::asset::Asset; +use xrpl_std::core::types::amount::asset::XrpAsset; +use xrpl_std::core::types::amount::mpt_id::MptId; +use xrpl_std::core::types::keylets; +use xrpl_std::host; +use xrpl_std::host::trace::{trace, trace_num as trace_number}; +use xrpl_std::sfield; + +mod host_bindings_loose; +include!("host_bindings_loose.rs"); + +fn check_result(result: i32, expected: i32, test_name: &'static str) { + match result { + code if code == expected => { + let _ = trace_number(test_name, code.into()); + } + code if code >= 0 => { + let _ = trace(test_name); + let _ = trace_number("TEST FAILED", code.into()); + panic!("Unexpected success code: {}", code); + } + code => { + let _ = trace(test_name); + let _ = trace_number("TEST FAILED", code.into()); + panic!("Error code: {}", code); + } + } +} + +fn with_buffer(mut f: F) -> R +where + F: FnMut(*mut u8, usize) -> R, +{ + let mut buf = [0u8; N]; + f(buf.as_mut_ptr(), buf.len()) +} + +#[unsafe(no_mangle)] +pub extern "C" fn finish() -> i32 { + let _ = trace("$$$$$ STARTING WASM EXECUTION $$$$$"); + + // ######################################## + // Step #1: Test all host function happy paths + // Note: not testing all the keylet functions, + // that's in a separate test file. + // ######################################## + check_result(unsafe { host::get_ledger_sqn() }, 12345, "get_ledger_sqn"); + check_result( + unsafe { host::get_parent_ledger_time() }, + 67890, + "get_parent_ledger_time", + ); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { host::get_parent_ledger_hash(ptr, len) }, + 32, + "get_parent_ledger_hash", + ); + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { host::get_ledger_account_hash(ptr, len) }, + 32, + "get_ledger_account_hash", + ); + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { host::get_ledger_tx_hash(ptr, len) }, + 32, + "get_ledger_tx_hash", + ); + }); + check_result(unsafe { host::get_base_fee() }, 10, "get_base_fee"); + let amendment_name: &[u8] = b"test_amendment"; + let amendment_id: [u8; 32] = [1; 32]; + check_result( + unsafe { host::amendment_enabled(amendment_name.as_ptr(), amendment_name.len()) }, + 1, + "amendment_enabled", + ); + check_result( + unsafe { host::amendment_enabled(amendment_id.as_ptr(), amendment_id.len()) }, + 1, + "amendment_enabled", + ); + let tx: EscrowFinish = get_current_escrow_finish(); + let account = tx.get_account().unwrap_or_panic(); // get_tx_field under the hood + let keylet = keylets::account_keylet(&account).unwrap_or_panic(); // account_keylet under the hood + check_result( + unsafe { host::cache_ledger_obj(keylet.as_ptr(), keylet.len(), 0) }, + 1, + "cache_ledger_obj", + ); + with_buffer::<20, _, _>(|ptr, len| { + check_result( + unsafe { host::get_current_ledger_obj_field(sfield::Account, ptr, len) }, + 20, + "get_current_ledger_obj_field", + ); + }); + with_buffer::<20, _, _>(|ptr, len| { + check_result( + unsafe { host::get_ledger_obj_field(1, sfield::Account, ptr, len) }, + 20, + "get_ledger_obj_field", + ); + }); + let mut locator = Locator::new(); + locator.pack(sfield::Account); + with_buffer::<20, _, _>(|ptr, len| { + check_result( + unsafe { host::get_tx_nested_field(locator.as_ptr(), locator.len(), ptr, len) }, + 20, + "get_tx_nested_field", + ); + }); + with_buffer::<20, _, _>(|ptr, len| { + check_result( + unsafe { + host::get_current_ledger_obj_nested_field(locator.as_ptr(), locator.len(), ptr, len) + }, + 20, + "get_current_ledger_obj_nested_field", + ); + }); + with_buffer::<20, _, _>(|ptr, len| { + check_result( + unsafe { + host::get_ledger_obj_nested_field(1, locator.as_ptr(), locator.len(), ptr, len) + }, + 20, + "get_ledger_obj_nested_field", + ); + }); + check_result( + unsafe { host::get_tx_array_len(sfield::Memos) }, + 32, + "get_tx_array_len", + ); + check_result( + unsafe { host::get_current_ledger_obj_array_len(sfield::Memos) }, + 32, + "get_current_ledger_obj_array_len", + ); + check_result( + unsafe { host::get_ledger_obj_array_len(1, sfield::Memos) }, + 32, + "get_ledger_obj_array_len", + ); + check_result( + unsafe { host::get_tx_nested_array_len(locator.as_ptr(), locator.len()) }, + 32, + "get_tx_nested_array_len", + ); + check_result( + unsafe { host::get_current_ledger_obj_nested_array_len(locator.as_ptr(), locator.len()) }, + 32, + "get_current_ledger_obj_nested_array_len", + ); + check_result( + unsafe { host::get_ledger_obj_nested_array_len(1, locator.as_ptr(), locator.len()) }, + 32, + "get_ledger_obj_nested_array_len", + ); + check_result( + unsafe { host::update_data(account.0.as_ptr(), account.0.len()) }, + 0, + "update_data", + ); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { host::compute_sha512_half(locator.as_ptr(), locator.len(), ptr, len) }, + 32, + "compute_sha512_half", + ); + }); + let message: &[u8] = b"test message"; + let pubkey: &[u8] = b"test pubkey"; //tx.get_public_key().unwrap_or_panic(); + let signature: &[u8] = b"test signature"; + check_result( + unsafe { + host::check_sig( + message.as_ptr(), + message.len(), + pubkey.as_ptr(), + pubkey.len(), + signature.as_ptr(), + signature.len(), + ) + }, + 1, + "check_sig", + ); + + let nft_id: [u8; 32] = amendment_id; + with_buffer::<18, _, _>(|ptr, len| { + check_result( + unsafe { + host::get_nft( + account.0.as_ptr(), + account.0.len(), + nft_id.as_ptr(), + nft_id.len(), + ptr, + len, + ) + }, + 18, + "get_nft", + ) + }); + with_buffer::<20, _, _>(|ptr, len| { + check_result( + unsafe { host::get_nft_issuer(nft_id.as_ptr(), nft_id.len(), ptr, len) }, + 20, + "get_nft_issuer", + ) + }); + with_buffer::<4, _, _>(|ptr, len| { + check_result( + unsafe { host::get_nft_taxon(nft_id.as_ptr(), nft_id.len(), ptr, len) }, + 4, + "get_nft_taxon", + ) + }); + check_result( + unsafe { host::get_nft_flags(nft_id.as_ptr(), nft_id.len()) }, + 8, + "get_nft_flags", + ); + check_result( + unsafe { host::get_nft_transfer_fee(nft_id.as_ptr(), nft_id.len()) }, + 10, + "get_nft_transfer_fee", + ); + with_buffer::<4, _, _>(|ptr, len| { + check_result( + unsafe { host::get_nft_serial(nft_id.as_ptr(), nft_id.len(), ptr, len) }, + 4, + "get_nft_serial", + ) + }); + let message = "testing trace"; + check_result( + unsafe { + host::trace_account( + message.as_ptr(), + message.len(), + account.0.as_ptr(), + account.0.len(), + ) + }, + 47, + "trace_account", + ); + let amount = &[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F]; // 95 drops of XRP + check_result( + unsafe { + host::trace_amount( + message.as_ptr(), + message.len(), + amount.as_ptr(), + amount.len(), + ) + }, + 19, + "trace_amount", + ); + + // ######################################## + // Step #2: Test set_data edge cases + // ######################################## + check_result( + unsafe { host_bindings_loose::get_parent_ledger_hash(-1, 4) }, + error_codes::INVALID_PARAMS, + "get_parent_ledger_hash_neg_ptr", + ); + with_buffer::<4, _, _>(|ptr, _len| { + check_result( + unsafe { host_bindings_loose::get_parent_ledger_hash(ptr as i32, -1) }, + error_codes::INVALID_PARAMS, + "get_parent_ledger_hash_neg_len", + ) + }); + with_buffer::<3, _, _>(|ptr, len| { + check_result( + unsafe { host_bindings_loose::get_parent_ledger_hash(ptr as i32, len as i32) }, + error_codes::BUFFER_TOO_SMALL, + "get_parent_ledger_hash_buf_too_small", + ) + }); + with_buffer::<4, _, _>(|ptr, _len| { + check_result( + unsafe { host_bindings_loose::get_parent_ledger_hash(ptr as i32, 1_000_000_000) }, + error_codes::POINTER_OUT_OF_BOUNDS, + "get_parent_ledger_hash_len_too_long", + ) + }); + let message = "testing trace"; + check_result( + unsafe { + host::trace_account( + message.as_ptr(), + message.len(), + account.0.as_ptr(), + account.0.len(), + ) + }, + 47, + "trace_account", + ); + let amount = &[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F]; // 95 drops of XRP + check_result( + unsafe { + host::trace_amount( + message.as_ptr(), + message.len(), + amount.as_ptr(), + amount.len(), + ) + }, + 19, + "trace_amount", + ); + + // ######################################## + // Step #3: Test getData[Type] edge cases + // ######################################## + + // SField + check_result( + unsafe { host::get_tx_array_len(2) }, // not a valid SField value + error_codes::INVALID_FIELD, + "get_tx_array_len_invalid_sfield", + ); + + // Slice + check_result( + unsafe { host_bindings_loose::get_tx_nested_array_len(-1, locator.len() as i32) }, + error_codes::INVALID_PARAMS, + "get_tx_nested_array_len_neg_ptr", + ); + check_result( + unsafe { host_bindings_loose::get_tx_nested_array_len(locator.as_ptr() as i32, -1) }, + error_codes::INVALID_PARAMS, + "get_tx_nested_array_len_neg_len", + ); + let long_len = 4 * 1024 + 1; + check_result( + unsafe { + host_bindings_loose::get_tx_nested_array_len(locator.as_ptr() as i32, long_len as i32) + }, + error_codes::DATA_FIELD_TOO_LARGE, + "get_tx_nested_array_len_too_long", + ); + check_result( + unsafe { + host_bindings_loose::get_tx_nested_array_len( + locator.as_ptr() as i32 + 1_000_000_000, + locator.len() as i32, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "get_tx_nested_array_len_ptr_oob", + ); + + // uint256 + check_result( + unsafe { + host_bindings_loose::cache_ledger_obj( + locator.as_ptr() as i32 + 1_000_000_000, + locator.len() as i32, + 1, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "cache_ledger_obj_ptr_oob", + ); + check_result( + unsafe { + host_bindings_loose::cache_ledger_obj(locator.as_ptr() as i32, locator.len() as i32, 1) + }, + error_codes::INVALID_PARAMS, + "cache_ledger_obj_wrong_len", + ); + + // AccountID + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host_bindings_loose::account_keylet( + locator.as_ptr() as i32 + 1_000_000_000, + locator.len() as i32, + ptr, + len, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "account_keylet_len_oob", + ) + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host_bindings_loose::account_keylet( + locator.as_ptr() as i32, + locator.len() as i32, + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "account_keylet_wrong_len", + ) + }); + + // Currency + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host_bindings_loose::line_keylet( + account.0.as_ptr(), + account.0.len(), + account.0.as_ptr(), + account.0.len(), + locator.as_ptr() as i32 + 1_000_000_000, + locator.len() as i32, + ptr, + len, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "line_keylet_len_oob_currency", + ) + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host_bindings_loose::line_keylet( + account.0.as_ptr(), + account.0.len(), + account.0.as_ptr(), + account.0.len(), + locator.as_ptr() as i32, + locator.len() as i32, + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "line_keylet_wrong_len_currency", + ) + }); + + // Asset + let asset1_bytes = Asset::XRP(XrpAsset {}).as_bytes(); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host_bindings_loose::amm_keylet( + asset1_bytes.as_ptr(), + asset1_bytes.len(), + locator.as_ptr() as i32 + 1_000_000_000, + locator.len() as i32, + ptr, + len, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "amm_keylet_len_oob_asset2", + ) + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host_bindings_loose::amm_keylet( + asset1_bytes.as_ptr(), + asset1_bytes.len(), + locator.as_ptr() as i32, + locator.len() as i32, + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "amm_keylet_len_wrong_len_asset2", + ) + }); + let currency: &[u8] = b"USD00000000000000000"; // 20 bytes + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host_bindings_loose::amm_keylet( + asset1_bytes.as_ptr(), + asset1_bytes.len(), + currency.as_ptr() as i32, + currency.len() as i32, + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "amm_keylet_len_wrong_non_xrp_currency_len", + ) + }); + let mptid = MptId::new(1, account); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::amm_keylet( + mptid.as_ptr(), + mptid.len(), + asset1_bytes.as_ptr(), + asset1_bytes.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "amm_keylet_mpt", + ) + }); + + // string + check_result( + unsafe { + host_bindings_loose::trace_num( + locator.as_ptr() as i32 + 1_000_000_000, + locator.len() as i32, + 42, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "trace_num_oob_str", + ); + + // ######################################## + // Step #4: Test other host function edge cases + // ######################################## + + // invalid SFields + + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { host::get_tx_field(2, ptr, len) }, + error_codes::INVALID_FIELD, + "get_tx_field_invalid_sfield", + ); + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { host::get_current_ledger_obj_field(2, ptr, len) }, + error_codes::INVALID_FIELD, + "get_current_ledger_obj_field_invalid_sfield", + ); + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { host::get_ledger_obj_field(1, 2, ptr, len) }, + error_codes::INVALID_FIELD, + "get_ledger_obj_field_invalid_sfield", + ); + }); + check_result( + unsafe { host::get_tx_array_len(2) }, + error_codes::INVALID_FIELD, + "get_tx_array_len_invalid_sfield", + ); + check_result( + unsafe { host::get_current_ledger_obj_array_len(2) }, + error_codes::INVALID_FIELD, + "get_current_ledger_obj_array_len_invalid_sfield", + ); + check_result( + unsafe { host::get_ledger_obj_array_len(1, 2) }, + error_codes::INVALID_FIELD, + "get_ledger_obj_array_len_invalid_sfield", + ); + + // invalid Slice + + check_result( + unsafe { host::amendment_enabled(amendment_name.as_ptr(), long_len) }, + error_codes::DATA_FIELD_TOO_LARGE, + "amendment_enabled_too_big_slice", + ); + check_result( + unsafe { host::amendment_enabled(amendment_name.as_ptr(), 65) }, + error_codes::DATA_FIELD_TOO_LARGE, + "amendment_enabled_too_long", + ); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { host::get_tx_nested_field(locator.as_ptr(), long_len, ptr, len) }, + error_codes::DATA_FIELD_TOO_LARGE, + "get_tx_nested_field_too_big_slice", + ); + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::get_current_ledger_obj_nested_field(locator.as_ptr(), long_len, ptr, len) + }, + error_codes::DATA_FIELD_TOO_LARGE, + "get_current_ledger_obj_nested_field_too_big_slice", + ); + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { host::get_ledger_obj_nested_field(1, locator.as_ptr(), long_len, ptr, len) }, + error_codes::DATA_FIELD_TOO_LARGE, + "get_ledger_obj_nested_field_too_big_slice", + ); + }); + check_result( + unsafe { host::get_tx_nested_array_len(locator.as_ptr(), long_len) }, + error_codes::DATA_FIELD_TOO_LARGE, + "get_tx_nested_array_len_too_big_slice", + ); + check_result( + unsafe { host::get_current_ledger_obj_nested_array_len(locator.as_ptr(), long_len) }, + error_codes::DATA_FIELD_TOO_LARGE, + "get_current_ledger_obj_nested_array_len_too_big_slice", + ); + check_result( + unsafe { host::get_ledger_obj_nested_array_len(1, locator.as_ptr(), long_len) }, + error_codes::DATA_FIELD_TOO_LARGE, + "get_ledger_obj_nested_array_len_too_big_slice", + ); + check_result( + unsafe { host::update_data(locator.as_ptr(), long_len) }, + error_codes::DATA_FIELD_TOO_LARGE, + "update_data_too_big_slice", + ); + check_result( + unsafe { + host::check_sig( + message.as_ptr(), + long_len, + pubkey.as_ptr(), + pubkey.len(), + signature.as_ptr(), + signature.len(), + ) + }, + error_codes::DATA_FIELD_TOO_LARGE, + "check_sig", + ); + check_result( + unsafe { + host::check_sig( + message.as_ptr(), + message.len(), + pubkey.as_ptr(), + long_len, + signature.as_ptr(), + signature.len(), + ) + }, + error_codes::DATA_FIELD_TOO_LARGE, + "check_sig", + ); + check_result( + unsafe { + host::check_sig( + message.as_ptr(), + message.len(), + pubkey.as_ptr(), + pubkey.len(), + signature.as_ptr(), + long_len, + ) + }, + error_codes::DATA_FIELD_TOO_LARGE, + "check_sig", + ); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { host::compute_sha512_half(locator.as_ptr(), long_len, ptr, len) }, + error_codes::DATA_FIELD_TOO_LARGE, + "compute_sha512_half_too_big_slice", + ); + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::amm_keylet( + asset1_bytes.as_ptr(), + long_len, + asset1_bytes.as_ptr(), + asset1_bytes.len(), + ptr, + len, + ) + }, + error_codes::DATA_FIELD_TOO_LARGE, + "amm_keylet_too_big_slice", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::credential_keylet( + account.0.as_ptr(), + account.0.len(), + account.0.as_ptr(), + account.0.len(), + locator.as_ptr(), + long_len, + ptr, + len, + ) + }, + error_codes::DATA_FIELD_TOO_LARGE, + "credential_keylet_too_big_slice", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::mptoken_keylet( + mptid.as_ptr(), + long_len, + account.0.as_ptr(), + account.0.len(), + ptr, + len, + ) + }, + error_codes::DATA_FIELD_TOO_LARGE, + "mptoken_keylet_too_big_slice_mptid", + ) + }); + check_result( + unsafe { + host::trace( + message.as_ptr(), + message.len(), + locator.as_ptr().wrapping_add(1_000_000_000), + locator.len(), + 0, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "trace_oob_slice", + ); + check_result( + unsafe { + host::trace_amount( + message.as_ptr(), + message.len(), + locator.as_ptr().wrapping_add(1_000_000_000), + locator.len(), + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "trace_amount_oob_slice", + ); + + // invalid UInt256 + + check_result( + unsafe { host::cache_ledger_obj(locator.as_ptr(), locator.len(), 0) }, + error_codes::INVALID_PARAMS, + "cache_ledger_obj_wrong_size_uint256", + ); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::get_nft( + account.0.as_ptr(), + account.0.len(), + locator.as_ptr(), + locator.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "get_nft_wrong_size_uint256", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { host::get_nft_issuer(locator.as_ptr(), locator.len(), ptr, len) }, + error_codes::INVALID_PARAMS, + "get_nft_issuer_wrong_size_uint256", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { host::get_nft_taxon(locator.as_ptr(), locator.len(), ptr, len) }, + error_codes::INVALID_PARAMS, + "get_nft_taxon_wrong_size_uint256", + ) + }); + check_result( + unsafe { host::get_nft_flags(locator.as_ptr(), locator.len()) }, + error_codes::INVALID_PARAMS, + "get_nft_flags_wrong_size_uint256", + ); + check_result( + unsafe { host::get_nft_transfer_fee(locator.as_ptr(), locator.len()) }, + error_codes::INVALID_PARAMS, + "get_nft_transfer_fee_wrong_size_uint256", + ); + with_buffer::<4, _, _>(|ptr, len| { + check_result( + unsafe { host::get_nft_serial(locator.as_ptr(), locator.len(), ptr, len) }, + error_codes::INVALID_PARAMS, + "get_nft_serial_wrong_size_uint256", + ) + }); + + // invalid AccountID + + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { host::account_keylet(locator.as_ptr(), locator.len(), ptr, len) }, + error_codes::INVALID_PARAMS, + "account_keylet_wrong_size_accountid", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { host::check_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) }, + error_codes::INVALID_PARAMS, + "check_keylet_wrong_size_accountid", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::credential_keylet( + locator.as_ptr(), // invalid AccountID size + locator.len(), + account.0.as_ptr(), + account.0.len(), + locator.as_ptr(), // valid slice size + locator.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "credential_keylet_wrong_size_accountid1", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::credential_keylet( + account.0.as_ptr(), + account.0.len(), + locator.as_ptr(), // invalid AccountID size + locator.len(), + locator.as_ptr(), // valid slice size + locator.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "credential_keylet_wrong_size_accountid2", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::delegate_keylet( + locator.as_ptr(), // invalid AccountID size + locator.len(), + account.0.as_ptr(), + account.0.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "delegate_keylet_wrong_size_accountid1", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::delegate_keylet( + account.0.as_ptr(), + account.0.len(), + locator.as_ptr(), // invalid AccountID size + locator.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "delegate_keylet_wrong_size_accountid2", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::deposit_preauth_keylet( + locator.as_ptr(), // invalid AccountID size + locator.len(), + account.0.as_ptr(), + account.0.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "deposit_preauth_keylet_wrong_size_accountid1", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::deposit_preauth_keylet( + account.0.as_ptr(), + account.0.len(), + locator.as_ptr(), // invalid AccountID size + locator.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "deposit_preauth_keylet_wrong_size_accountid2", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { host::did_keylet(locator.as_ptr(), locator.len(), ptr, len) }, + error_codes::INVALID_PARAMS, + "did_keylet_wrong_size_accountid", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { host::escrow_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) }, + error_codes::INVALID_PARAMS, + "escrow_keylet_wrong_size_accountid", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::line_keylet( + locator.as_ptr(), // invalid AccountID size + locator.len(), + account.0.as_ptr(), + account.0.len(), + currency.as_ptr(), + currency.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "line_keylet_wrong_size_accountid1", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::line_keylet( + account.0.as_ptr(), + account.0.len(), + locator.as_ptr(), // invalid AccountID size + locator.len(), + currency.as_ptr(), + currency.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "line_keylet_wrong_size_accountid2", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { host::mpt_issuance_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) }, + error_codes::INVALID_PARAMS, + "mpt_issuance_keylet_wrong_size_accountid", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::mptoken_keylet( + mptid.as_ptr(), + mptid.len(), + locator.as_ptr(), + locator.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "mptoken_keylet_wrong_size_accountid", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { host::nft_offer_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) }, + error_codes::INVALID_PARAMS, + "nft_offer_keylet_wrong_size_accountid", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { host::offer_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) }, + error_codes::INVALID_PARAMS, + "offer_keylet_wrong_size_accountid", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { host::oracle_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) }, + error_codes::INVALID_PARAMS, + "oracle_keylet_wrong_size_accountid", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::paychan_keylet( + locator.as_ptr(), // invalid AccountID size + locator.len(), + account.0.as_ptr(), + account.0.len(), + 1, + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "paychan_keylet_wrong_size_accountid1", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::paychan_keylet( + account.0.as_ptr(), + account.0.len(), + locator.as_ptr(), // invalid AccountID size + locator.len(), + 1, + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "paychan_keylet_wrong_size_accountid2", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::permissioned_domain_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) + }, + error_codes::INVALID_PARAMS, + "permissioned_domain_keylet_wrong_size_accountid", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { host::signers_keylet(locator.as_ptr(), locator.len(), ptr, len) }, + error_codes::INVALID_PARAMS, + "signers_keylet_wrong_size_accountid", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { host::ticket_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) }, + error_codes::INVALID_PARAMS, + "ticket_keylet_wrong_size_accountid", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { host::vault_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) }, + error_codes::INVALID_PARAMS, + "vault_keylet_wrong_size_accountid", + ) + }); + let uint256: &[u8] = b"00000000000000000000000000000001"; + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::get_nft( + locator.as_ptr(), + locator.len(), + uint256.as_ptr(), + uint256.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "get_nft_wrong_size_accountid", + ) + }); + check_result( + unsafe { + host::trace_account( + message.as_ptr(), + message.len(), + locator.as_ptr(), + locator.len(), + ) + }, + error_codes::INVALID_PARAMS, + "trace_account_wrong_size_accountid", + ); + + // invalid Currency was already tested above + // invalid string + + check_result( + unsafe { + host::trace( + message.as_ptr().wrapping_add(1_000_000_000), + message.len(), + uint256.as_ptr(), + uint256.len(), + 0, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "trace_oob_string", + ); + check_result( + unsafe { + host::trace_account( + message.as_ptr().wrapping_add(1_000_000_000), + message.len(), + account.0.as_ptr(), + account.0.len(), + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "trace_account_oob_string", + ); + check_result( + unsafe { + host::trace_amount( + message.as_ptr().wrapping_add(1_000_000_000), + message.len(), + amount.as_ptr(), + amount.len(), + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "trace_amount_oob_string", + ); + + // trace too large + + check_result( + unsafe { + host::trace( + locator.as_ptr(), + locator.len(), + locator.as_ptr(), + long_len, + 0, + ) + }, + error_codes::DATA_FIELD_TOO_LARGE, + "trace_too_long", + ); + check_result( + unsafe { host::trace_num(locator.as_ptr(), long_len, 1) }, + error_codes::DATA_FIELD_TOO_LARGE, + "trace_num_too_long", + ); + check_result( + unsafe { + host::trace_account( + message.as_ptr(), + long_len, + account.0.as_ptr(), + account.0.len(), + ) + }, + error_codes::DATA_FIELD_TOO_LARGE, + "trace_account_too_long", + ); + check_result( + unsafe { host::trace_amount(message.as_ptr(), long_len, amount.as_ptr(), amount.len()) }, + error_codes::DATA_FIELD_TOO_LARGE, + "trace_account_too_long", + ); + + // trace amount errors + + check_result( + unsafe { + host::trace_amount( + message.as_ptr(), + message.len(), + locator.as_ptr(), + locator.len(), + ) + }, + error_codes::INVALID_PARAMS, + "trace_amount_wrong_length", + ); + + // other misc errors + + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::mptoken_keylet( + locator.as_ptr(), + locator.len(), + account.0.as_ptr(), + account.0.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "mptoken_keylet_mptid_wrong_length", + ) + }); + + 1 // <-- If we get here, finish the escrow. +} diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/copyFixtures.py b/src/test/app/wasm_fixtures/wasm_fixtures/copyFixtures.py new file mode 100644 index 0000000000..eb1b6d0f9e --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/copyFixtures.py @@ -0,0 +1,134 @@ +import os +import sys +import subprocess +import re + +OPT = "-Oz" + + +def update_fixture(project_name, wasm): + fixture_name = ( + re.sub(r"_([a-z])", lambda m: m.group(1).upper(), project_name) + "WasmHex" + ) + print(f"Updating fixture: {fixture_name}") + + cpp_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "fixtures.cpp")) + h_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "fixtures.h")) + with open(cpp_path, "r", encoding="utf8") as f: + cpp_content = f.read() + + pattern = rf'extern std::string const {fixture_name} =[ \n]+"[^;]*;' + if re.search(pattern, cpp_content, flags=re.MULTILINE): + updated_cpp_content = re.sub( + pattern, + f'extern std::string const {fixture_name} = "{wasm}";', + cpp_content, + flags=re.MULTILINE, + ) + else: + with open(h_path, "r", encoding="utf8") as f: + h_content = f.read() + updated_h_content = ( + h_content.rstrip() + f"\n\n extern std::string const {fixture_name};\n" + ) + with open(h_path, "w", encoding="utf8") as f: + f.write(updated_h_content) + updated_cpp_content = ( + cpp_content.rstrip() + + f'\n\nextern std::string const {fixture_name} = "{wasm}";\n' + ) + + with open(cpp_path, "w", encoding="utf8") as f: + f.write(updated_cpp_content) + + +def process_rust(project_name): + project_path = os.path.abspath( + os.path.join(os.path.dirname(__file__), project_name) + ) + wasm_location = f"target/wasm32-unknown-unknown/release/{project_name}.wasm" + build_cmd = ( + f"(cd {project_path} " + f"&& cargo build --target wasm32-unknown-unknown --release " + f"&& wasm-opt {wasm_location} {OPT} -o {wasm_location}" + ")" + ) + try: + result = subprocess.run( + build_cmd, shell=True, check=True, capture_output=True, text=True + ) + print(f"stdout: {result.stdout}") + if result.stderr: + print(f"stderr: {result.stderr}") + print(f"WASM file for {project_name} has been built and optimized.") + except subprocess.CalledProcessError as e: + print(f"exec error: {e}") + sys.exit(1) + + src_path = os.path.abspath( + os.path.join( + os.path.dirname(__file__), + f"{project_name}/target/wasm32-unknown-unknown/release/{project_name}.wasm", + ) + ) + with open(src_path, "rb") as f: + data = f.read() + wasm = data.hex() + update_fixture(project_name, wasm) + + +def process_c(project_name): + project_path = os.path.abspath( + os.path.join(os.path.dirname(__file__), f"{project_name}.c") + ) + wasm_path = os.path.abspath( + os.path.join(os.path.dirname(__file__), f"{project_name}.wasm") + ) + build_cmd = ( + f"$CC --sysroot=$SYSROOT -I$SYSROOT/include/wasm32-wasi " + f"-O3 -ffast-math --target=wasm32 -fno-exceptions -fno-threadsafe-statics -fvisibility=default -Wl,--export-all -Wl,--no-entry -Wl,--allow-undefined -DNDEBUG --no-standard-libraries -fno-builtin-memset " + f"-o {wasm_path} {project_path}" + f"&& wasm-opt {wasm_path} {OPT} -o {wasm_path}" + ) + try: + result = subprocess.run( + build_cmd, shell=True, check=True, capture_output=True, text=True + ) + print(f"stdout: {result.stdout}") + if result.stderr: + print(f"stderr: {result.stderr}") + print( + f"WASM file for {project_name} has been built with WASI support using clang." + ) + except subprocess.CalledProcessError as e: + print(f"exec error: {e}") + sys.exit(1) + + with open(wasm_path, "rb") as f: + data = f.read() + wasm = data.hex() + update_fixture(project_name, wasm) + + +if __name__ == "__main__": + if len(sys.argv) > 2: + print("Usage: python copyFixtures.py []") + sys.exit(1) + if len(sys.argv) == 2: + if os.path.isdir(os.path.join(os.path.dirname(__file__), sys.argv[1])): + process_rust(sys.argv[1]) + else: + process_c(sys.argv[1]) + print("Fixture has been processed.") + else: + dirs = [ + d + for d in os.listdir(os.path.dirname(__file__)) + if os.path.isdir(os.path.join(os.path.dirname(__file__), d)) + ] + c_files = [f for f in os.listdir(os.path.dirname(__file__)) if f.endswith(".c")] + for d in dirs: + process_rust(d) + for c in c_files: + process_c(c[:-2]) + print("All fixtures have been processed.") diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/disableFloat.wat b/src/test/app/wasm_fixtures/wasm_fixtures/disableFloat.wat new file mode 100644 index 0000000000..035a849e30 --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/disableFloat.wat @@ -0,0 +1,34 @@ +(module + (type (;0;) (func)) + (type (;1;) (func (result i32))) + (func (;0;) (type 0)) + (func (;1;) (type 1) (result i32) + f32.const -2048 + f32.const 2050 + f32.sub + drop + i32.const 1) + (memory (;0;) 2) + (global (;0;) i32 (i32.const 1024)) + (global (;1;) i32 (i32.const 1024)) + (global (;2;) i32 (i32.const 2048)) + (global (;3;) i32 (i32.const 2048)) + (global (;4;) i32 (i32.const 67584)) + (global (;5;) i32 (i32.const 1024)) + (global (;6;) i32 (i32.const 67584)) + (global (;7;) i32 (i32.const 131072)) + (global (;8;) i32 (i32.const 0)) + (global (;9;) i32 (i32.const 1)) + (export "memory" (memory 0)) + (export "__wasm_call_ctors" (func 0)) + (export "finish" (func 1)) + (export "buf" (global 0)) + (export "__dso_handle" (global 1)) + (export "__data_end" (global 2)) + (export "__stack_low" (global 3)) + (export "__stack_high" (global 4)) + (export "__global_base" (global 5)) + (export "__heap_base" (global 6)) + (export "__heap_end" (global 7)) + (export "__memory_base" (global 8)) + (export "__table_base" (global 9))) diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/fib.c b/src/test/app/wasm_fixtures/wasm_fixtures/fib.c new file mode 100644 index 0000000000..4410923054 --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/fib.c @@ -0,0 +1,12 @@ +// typedef long long mint; +typedef int mint; + +mint +fib(mint n) +{ + if (!n) + return 0; + if (n <= 2) + return 1; + return fib(n - 1) + fib(n - 2); +} diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/wasm_fixtures/fixtures.cpp new file mode 100644 index 0000000000..ec91496428 --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/fixtures.cpp @@ -0,0 +1,10330 @@ +//------------------------------------------------------------------------------ +/* + This file is part of rippled: https://github.com/ripple/rippled + Copyright (c) 2025 Ripple Labs Inc. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ +//============================================================================== + +// TODO: consider moving these to separate files (and figure out the build) + +#include + +extern std::string const fibWasmHex = + "0061736d0100000001090260000060017f017f0303020001071b02115f5f" + "7761736d5f63616c6c5f63746f727300000366696200010a440202000b3f" + "01017f200045044041000f0b2000410348044041010f0b200041026a2100" + "0340200041036b100120016a2101200041026b220041044a0d000b200141" + "016a0b"; + +extern std::string const b58WasmHex = + "0061736d0100000001150460000060017f017f60017f0060047f7f7f7f01" + "7f0305040001020305030100020607017f0041d0080b074906066d656d6f" + "72790200115f5f7761736d5f63616c6c5f63746f7273000008616c6c6f63" + "617465000106655f6461746103000a6465616c6c6f636174650002076235" + "38656e636f00030ae8050402000b3401017f024020004180084a0d0041c0" + "082802002200411f4a0d0041c008200041016a3602002000410a7441d008" + "6a21010b20010b02000baa0501097f41d088060240200341004c0d000340" + "200220066a2d00000d012003200641016a2206470d000b200321060b2003" + "20066b220c418a016c41e4006d220741106a4170716b21090240200c4100" + "480d00200741016a220a410771210541002104200741074f0440200a41f8" + "ffff1f71210a0340200420096a4200370300200a200441086a2204470d00" + "0b0b2005450d00200420096a21040340200441003a0000200441016a2104" + "200541016b22050d000b0b200320064a0440200621052007210403402002" + "20056a2d0000210802402004220a20074e0440200721042008450d010b20" + "0721040340200420096a220b200b2d000041087420086a220b200b413a6d" + "2208413a6c6b3a00002004450440410021040c020b200441016b2204200a" + "4a0d00200b413a6b418d7f490d000b0b200541016a22052003470d000b0b" + "200741016a22022103410021040240200c4100480d000340200420096a2d" + "00000d012002200441016a2204470d000b200221040b2001200320066a20" + "046b4a047f02402006450d002006410771210841002105200641084f0440" + "200641787121010340200020056a42b1e2c48993a6cc9831370000200120" + "0541086a2205470d000b0b2008450d00200020056a21050340200541313a" + "0000200541016a2105200841016b22080d000b0b0240200420074a0d0020" + "0420076a410171047f200405200020066a200420096a2d00004180086a2d" + "00003a0000200641016a2106200441016a0b210520042007460d00200520" + "096a2101200720056b2102200020066a2103417f21040340200320046a22" + "0741016a200120046a220541016a2d00004180086a2d00003a0000200741" + "026a200541026a2d00004180086a2d00003a00002002200441026a220447" + "0d000b200420066a41016a21060b200020066a41003a0000200641016a05" + "41000b0b0b4101004180080b3a3132333435363738394142434445464748" + "4a4b4c4d4e505152535455565758595a6162636465666768696a6b6d6e6f" + "707172737475767778797a00490f7461726765745f666561747572657304" + "2b0f6d757461626c652d676c6f62616c732b087369676e2d6578742b0f72" + "65666572656e63652d74797065732b0a6d756c746976616c7565"; + +extern std::string const sha512PureWasmHex = + "0061736d0100000001130460000060017f017f60017f0060027f7f017f03" + "05040001020305030100020607017f0041800d0b075006066d656d6f7279" + "0200115f5f7761736d5f63616c6c5f63746f7273000008616c6c6f636174" + "65000106655f6461746103000a6465616c6c6f6361746500020e73686135" + "31325f70726f6365737300030aa4060402000b0f0041800d410020004180" + "80024d1b0b02000b8b0602147e037f200141ff006a41ff014f044041c08c" + "06211620014180016d41016bac210b41808d02290300210c41888d022903" + "00210d41908d02290300210e41988d02290300210f41a08d022903002110" + "41a88d02290300211141b08d02290300211241b88d022903002113034041" + "002101200c21092013210a201221082011210520102103200f2115200e21" + "06200d2102034020022107200120166a200020016a290000220242388620" + "024280fe0383422886842002428080fc0783421886200242808080f80f83" + "4208868484200242088842808080f80f832002421888428080fc07838420" + "024228884280fe03832002423888848484220237030020014180086a2903" + "00200a200322044232892004422e89852004421789857c2008220a200442" + "7f858320052208200483847c7c20027c2203200922024224892002421e89" + "85200242198985200220072006221485832006200783857c7c2109200320" + "157c2103200421052006211520072106200141086a2201418001470d000b" + "200020016a21004180092117411e210103402002210620162001410e6b41" + "0f714103746a221820182903002016200141056b410f714103746a290300" + "20162001410d6b410f714103746a2903002202423f892002423889852002" + "420788857c7c20162001410f714103746a2903002202422d892002420389" + "852002420688857c22023703002017290300200a20032205423289200542" + "2e89852005421789857c2005427f852008832004200583847c7c20027c22" + "03200922024224892002421e898520024219898520022006200785832006" + "200783857c7c2109200320147c2103201741086a21172008210a20042108" + "200521042007211420062107200141016a220141de00470d000b41b88d02" + "200a20137c221337030041b08d02200820127c221237030041a88d022004" + "20117c221137030041a08d02200320107c221037030041988d02200f2014" + "7c220f37030041908d022007200e7c220e37030041888d022002200d7c22" + "0d37030041808d022009200c7c220c370300200b420052200b42017d210b" + "0d000b0b41808d020b0b880501004180080b800522ae28d7982f8a42cd65" + "ef23914437712f3b4deccffbc0b5bcdb8981a5dbb5e938b548f35bc25639" + "19d005b6f111f1599b4f19afa4823f9218816ddad55e1cab420203a398aa" + "07d8be6f7045015b83128cb2e44ebe853124e2b4ffd5c37d0c556f897bf2" + "745dbe72b196163bfeb1de803512c725a706dc9b942669cf74f19bc1d24a" + "f19ec1699be4e3254f388647beefb5d58c8bc69dc10f659cac77cca10c24" + "75022b596f2ce92d83e4a66eaa84744ad4fb41bddca9b05cb5531183da88" + "f976abdf66ee52513e981032b42d6dc631a83f21fb98c82703b0e40eefbe" + "c77f59bfc28fa83df30be0c625a70a934791a7d56f8203e05163ca06706e" + "0e0a67292914fc2fd246850ab72726c9265c38211b2eed2ac45afc6d2c4d" + "dfb3959d130d3853de63af8b54730a65a8b2773cbb0a6a76e6aeed472ec9" + "c2813b358214852c72926403f14ca1e8bfa2013042bc4b661aa89197f8d0" + "708b4bc230be5406a3516cc71852efd619e892d110a96555240699d62a20" + "715785350ef4b8d1bb3270a06a10c8d0d2b816c1a41953ab4151086c371e" + "99eb8edf4c774827a8489be1b5bcb034635ac9c5b30c1c39cb8a41e34aaa" + "d84e73e363774fca9c5ba3b8b2d6f36f2e68fcb2ef5dee828f74602f1743" + "6f63a57872abf0a11478c884ec39641a0802c78c281e6323faffbe90e9bd" + "82deeb6c50a41579c6b2f7a3f9be2b5372e3f27871c69c6126eace3e27ca" + "07c2c021c7b886d11eebe0cdd67ddaea78d16eee7f4f7df5ba6f1772aa67" + "f006a698c8a2c57d630aae0df9be04983f111b471c13350b711b847d0423" + "f577db289324c7407babca32bcbec9150abe9e3c4c0d109cc4671d43b642" + "3ecbbed4c54c2a7e65fc9c297f59ecfad63aab6fcb5f1758474a8c19446c" + "00490f7461726765745f6665617475726573042b0f6d757461626c652d67" + "6c6f62616c732b087369676e2d6578742b0f7265666572656e63652d7479" + "7065732b0a6d756c746976616c7565"; + +extern std::string const zkProofWasmHex = + "0061736d0100000001600f60037f7f7f017f60027f7f017f60027f7f0060" + "037f7f7f0060000060057f7f7f7f7f0060047f7f7f7f0060067f7f7f7f7f" + "7f0060017f017f6000017f60017f0060047f7f7f7f017f60027e7e017f60" + "057f7f7f7f7f017f60057f7e7e7e7e00038c018a01030402030202020302" + "030505030206020601000006010606070303080202020302090208020202" + "030a0806020a030b06060202030302020303030203030203020202010302" + "030203060a02000202080a020c0807010d02030206060102020803080302" + "030202020a02060303020a03020301010a0d030101010001010301020604" + "0a0a020200000e000004050170010e0e05030100110619037f01418080c0" + "000b7f0041bd97c0000b7f0041c097c0000b075d06066d656d6f72790200" + "08616c6c6f63617465001b13646573657269616c697a655f67315f776173" + "6d001c1462656c6c6d616e5f67726f746831365f7465737400210a5f5f64" + "6174615f656e6403010b5f5f686561705f6261736503020914010041010b" + "0d15767778717e830111547d137a7b0ad6f3048a014b01017f0240024002" + "4020010d00410021010c010b2002450d01200120026e2203200320026c20" + "01476a21010b2000200136020820004101360204200020013602000f0b10" + "8180808000000b4701017f23808080800041206b22002480808080002000" + "41003602182000410136020c200041e090c0800036020820004204370210" + "200041086a41fc82c0800010a480808000000b0f002000200141e8001083" + "808080000b170002402000450d002001200020026c108d808080000b0b0e" + "002000200141011083808080000b0f002000200141a0021083808080000b" + "0e002000200141201083808080000b4201017f0240200028020822032000" + "280200470d00200020021088808080000b2000280204200341e8006c6a20" + "0141e8001086818080001a2000200341016a3602080b5a01017f23808080" + "800041106b2202248080808000200241086a20002000280200410141e800" + "108b80808000024020022802082200418180808078460d00200020022802" + "0c2001108c80808000000b200241106a2480808080000b6401027f238080" + "80800041106b2203248080808000200341086a20024101410141f081c080" + "00108a8080800020032802082104200328020c2001200210868180800021" + "01200020023602082000200136020420002004360200200341106a248080" + "8080000b6401017f23808080800041106b2205248080808000200541046a" + "200120022003108e8080800020052802082103024020052802040d002000" + "200528020c36020420002003360200200541106a2480808080000f0b2003" + "200528020c2004108c80808000000bfd0102037f017e2380808080004110" + "6b22052480808080004100210602400240200220036a22032002490d0020" + "0441076a417871ad2001280200220741017422022003200220034b1b2202" + "4104200241044b1b2203ad7e2208422088a70d002008a7220241f8ffffff" + "074b0d01024002402007450d00024020040d00200541086a4108200210d7" + "80808000200528020821040c020b2001280204200720046c200210cb8080" + "800021040c010b20054108200210d780808000200528020021040b024020" + "040d00410821060c020b2001200336020020012004360204418180808078" + "21060b0b2000200236020420002006360200200541106a2480808080000b" + "1200024020000d00200210cf808080000b000b6c01027f02400240200041" + "7c6a2802002202417871220341044108200241037122021b20016a490d00" + "02402002450d002003200141276a4b0d020b200010c9808080000f0b41e9" + "92c08000419893c0800010ca80808000000b41a893c0800041d893c08000" + "10ca80808000000bc70103017f017e017f23808080800041106b22042480" + "8080800002400240200220036a417f6a410020026b71ad2001ad7e220542" + "2088a70d002005a7220341808080807820026b4b0d00024020030d002000" + "200236020841002102200041003602040c020b200441086a2002200310d7" + "80808000024020042802082206450d002000200636020820002001360204" + "410021020c020b2000200336020820002002360204410121020c010b2000" + "4100360204410121020b20002002360200200441106a2480808080000b88" + "0303017f097e017f23808080800041306b22022480808080002002420042" + "002001290330220342abd5feffffffbfffb97f56ad7d2204200129033822" + "057d220642ffffcf8aebffffd51e7c220720052003842001290340220884" + "20012903482209842001290350220a842001290358220b8450220c1b3703" + "082002420042abd5feffffffbfffb97f20037d200c1b3703002002420020" + "042004200554ad7d2007200654ad7c423f87220320087d220442a4ecc3b5" + "8fd4b498e7007c2205200c1b3703102002420020032003200854ad7d2005" + "200454ad7c423f87220320097d220442bfa5949ccff0d2bbe4007c220520" + "0c1b3703182002420020032003200954ad7d2005200454ad7c423f872203" + "200a7d220442d7d9ae9ae4f6e98dcb007c2205200c1b3703202002420020" + "032003200a54ad7d2005200454ad7c423f87200b7d429acdffcba3bdc480" + "1a7c200c1b370328200041306a200241e086c0800020012d0060220c1090" + "80808000200020014130108681808000200c3a0060200241306a24808080" + "80000b9e0101027e20002002290328200129032822048542002003ad42ff" + "01837d220583200485370328200020022903202001290320220485200583" + "200485370320200020022903182001290318220485200583200485370318" + "200020022903102001290310220485200583200485370310200020022903" + "082001290308220485200583200485370308200020022903002001290300" + "2204852005832004853703000bec0201057f23808080800041c0006b2202" + "248080808000410121030240200128021c2204418082c080004111200128" + "0220220528020c220611808080800080808080000d000240024020012d00" + "144104710d0041012103200441fa8ec08000410120061180808080008080" + "8080000d02200141e091c080004102109280808000450d010c020b200441" + "fb8ec080004102200611808080800080808080000d014101210320024101" + "3a0017200241186a41086a200141086a290200370300200241186a41106a" + "200141106a290200370300200241186a41186a200141186a280200360200" + "2002200536020c20022004360208200241dc8ec080003602382002200129" + "02003703182002200241176a3602102002200241086a360234200241186a" + "41e091c0800041021092808080000d01200241086a41f88ec08000410210" + "93808080000d010b200441ec8cc080004101200611808080800080808080" + "0021030b200241c0006a24808080800020030bbf0b010b7f024002400240" + "200028020022032000280208220472450d0002402004410171450d002001" + "20026a210502400240200028020c22060d0041002107200121080c010b41" + "00210741002109200121080340200822042005460d020240024020042c00" + "002208417f4c0d00200441016a21080c010b0240200841604f0d00200441" + "026a21080c010b0240200841704f0d00200441036a21080c010b20044104" + "6a21080b200820046b20076a21072006200941016a2209470d000b0b2008" + "2005460d00024020082c00002204417f4a0d0020044160491a0b02400240" + "2007450d00024020072002490d0020072002460d01410021040c020b2001" + "20076a2c000041404e0d00410021040c010b200121040b2007200220041b" + "21022004200120041b21010b024020030d00200028021c20012002200028" + "022028020c11808080800080808080000f0b2000280204210a0240200241" + "10490d0020022001200141036a417c7122076b22096a220b410371210341" + "00210641002104024020012007460d004100210402402009417c4b0d0041" + "0021044100210503402004200120056a22082c000041bf7f4a6a20084101" + "6a2c000041bf7f4a6a200841026a2c000041bf7f4a6a200841036a2c0000" + "41bf7f4a6a2104200541046a22050d000b0b200121080340200420082c00" + "0041bf7f4a6a2104200841016a2108200941016a22090d000b0b02402003" + "450d002007200b417c716a22082c000041bf7f4a210620034101460d0020" + "0620082c000141bf7f4a6a210620034102460d00200620082c000241bf7f" + "4a6a21060b200b4102762105200620046a21060340200721032005450d04" + "200541c001200541c001491b220b410371210c200b410274210d41002108" + "024020054104490d002003200d41f007716a210941002108200321040340" + "200428020c2207417f734107762007410676724181828408712004280208" + "2207417f7341077620074106767241818284087120042802042207417f73" + "41077620074106767241818284087120042802002207417f734107762007" + "4106767241818284087120086a6a6a6a2108200441106a22042009470d00" + "0b0b2005200b6b21052003200d6a2107200841087641ff81fc0771200841" + "ff81fc07716a418180046c41107620066a2106200c450d000b2003200b41" + "fc01714102746a22082802002204417f7341077620044106767241818284" + "08712104200c4101460d0220082802042207417f73410776200741067672" + "41818284087120046a2104200c4102460d0220082802082208417f734107" + "7620084106767241818284087120046a21040c020b024020020d00410021" + "060c030b2002410371210802400240200241044f0d004100210641002109" + "0c010b41002106200121042002410c71220921070340200620042c000041" + "bf7f4a6a200441016a2c000041bf7f4a6a200441026a2c000041bf7f4a6a" + "200441036a2c000041bf7f4a6a2106200441046a21042007417c6a22070d" + "000b0b2008450d02200120096a21040340200620042c000041bf7f4a6a21" + "06200441016a21042008417f6a22080d000c030b0b200028021c20012002" + "200028022028020c11808080800080808080000f0b200441087641ff811c" + "71200441ff81fc07716a418180046c41107620066a21060b02400240200a" + "20064d0d00200a20066b2105024002400240410020002d00182204200441" + "03461b22040e03020001020b20052104410021050c010b20054101762104" + "200541016a41017621050b200441016a2104200028021021092000280220" + "2108200028021c210703402004417f6a2204450d02200720092008280210" + "1181808080008080808000450d000b41010f0b200028021c200120022000" + "28022028020c11808080800080808080000f0b0240200720012002200828" + "020c1180808080008080808000450d0041010f0b41002104034002402005" + "2004470d0020052005490f0b200441016a21042007200920082802101181" + "808080008080808000450d000b2004417f6a2005490bdf04010c7f200141" + "7f6a21032000280204210420002802002105200028020821064100210741" + "002108410021094100210a02400340200a4101710d010240024020092002" + "4b0d000340200120096a210a0240024002400240200220096b220b41074b" + "0d0020022009470d01200221090c050b02400240200a41036a417c71220c" + "200a6b220d450d00410021000340200a20006a2d0000410a460d05200d20" + "0041016a2200470d000b200d200b41786a220e4d0d010c030b200b41786a" + "210e0b03404180828408200c2802002200418a94a8d000736b2000724180" + "828408200c41046a2802002200418a94a8d000736b200072714180818284" + "7871418081828478470d02200c41086a210c200d41086a220d200e4d0d00" + "0c020b0b410021000340200a20006a2d0000410a460d02200b200041016a" + "2200470d000b200221090c030b0240200d200b470d00200221090c030b20" + "0a200d6a210c2002200d6b20096b210b4100210002400340200c20006a2d" + "0000410a460d01200b200041016a2200470d000b200221090c030b200020" + "0d6a21000b200020096a220c41016a21090240200c20024f0d00200a2000" + "6a2d0000410a470d004100210a2009210d200921000c030b200920024d0d" + "000b0b20082002460d024101210a2008210d200221000b0240024020062d" + "0000450d00200541f48ec080004104200428020c11808080800080808080" + "000d010b200020086b210b4100210c024020002008460d00200320006a2d" + "0000410a46210c0b200120086a21002006200c3a0000200d210820052000" + "200b200428020c1180808080008080808000450d010b0b410121070b2007" + "0ba80101017f23808080800041306b220424808080800020042003360208" + "20042002360204200420012d00c80122033a000f024020034101460d0020" + "04420137021c200441013602142004419482c08000360210200441818080" + "800036022c2004200441286a3602182004200441046a3602282004410f6a" + "41c886c08000200441106a419c82c08000109680808000000b2000200141" + "c8011086818080001a200441306a2480808080000b140020012000280200" + "20002802041092808080000b4401017f23808080800041106b2204248080" + "8080002004200136020c20042000360208200441086a41b886c080002004" + "410c6a41b886c080002002200310d380808000000ba70101017f23808080" + "800041306b22042480808080002004200336020820042002360204200420" + "012d006822033a000f024020034101460d002004420137021c2004410136" + "02142004419482c08000360210200441818080800036022c200420044128" + "6a3602182004200441046a3602282004410f6a41c886c08000200441106a" + "419c82c08000109680808000000b2000200141e8001086818080001a2004" + "41306a2480808080000b45000240024020042003490d0020022004490d01" + "2000200420036b3602042000200120036a3602000f0b2003200420051099" + "80808000000b200420022005109a80808000000b0f0020002001200210fc" + "80808000000b0f0020002001200210f580808000000b4001017f23808080" + "800041106b2201248080808000200141086a200041014101419883c08000" + "108a80808000200128020c2100200141106a24808080800020000b9a0101" + "017f23808080800041b0016b2202248080808000200241086a2001280204" + "20012802084100413041a883c080001098808080000240200228020c4130" + "460d00200241106a41b883c08000109d80808000000b20024180016a2002" + "28020841301089818080001a200241106a20024180016a109e8080800020" + "00200241106a41c883c080004118109780808000200241b0016a24808080" + "80000b970101017f23808080800041c0006b22022480808080002002412b" + "36020c200241f880c08000360208200241e880c080003602142002200036" + "02102002410236021c200241cc8ec0800036021820024202370224200241" + "8280808000ad422086200241106aad843703382002418380808000ad4220" + "86200241086aad843703302002200241306a360220200241186a200110a4" + "80808000000ba50801077f23808080800041c0086b220224808080800020" + "012d0000220341077610a3808080002104200341067641017110a3808080" + "002105200341057641017110a3808080002106200241a0066a2001413010" + "86818080001a200220022d00a006411f713a00a006200241e8006a200241" + "a0066a10dc80808000200241b0076a410041301085818080001a200241c0" + "026a200241b0076a200241e8006a20022d00980122071090808080002002" + "4190056a10a8808080002002200520047110a380808000200610d2808080" + "007110a380808000200241c0026a10a9808080007110a38080800022013a" + "00f805200110d2808080002108200241a0066a200241c0026a10bd808080" + "0020024180046a200241a0066a200241c0026a10a780808000200241e007" + "6a20024180046a418089c0800010b98080800020024180046a200241e007" + "6a41c087c0800010df80808000200241a0066a20024180046a10bd808080" + "00200241a0066a200241e0076a10db808080002103200241f0026a200241" + "80046a41301086818080001a200220033a00a00320024100413010858180" + "800022024190086a2002200241f0026a2003109080808000200241a0066a" + "20024190086a10b28080800020024180046a41306a20024190086a200241" + "a0066a200620024190086a10de808080007310a380808000109080808000" + "20024180046a200241c0026a41301086818080001a20032004200510d280" + "8080007110a3808080007110a3808080002103200241a0066a2002418004" + "6a41e0001086818080001a200220033a008807200220053a008007200241" + "d0016a20024190056a200241a0066a200810aa8080800020022007200120" + "03200173410020086b71737110a3808080003a00b802200241e8006a10a8" + "808080002002200241e8006a200241d0016a20022d00b802220310aa8080" + "8000200241a0066a200210a58080800020024190056a200241a0066a10e4" + "8080800020024180046a20024190056a10e480808000200241f0026a2002" + "4180046a10e58080800020024190056a200241e8001086818080001a2002" + "4190056a41b089c0800010dd80808000200241a0066a20024190056a10a5" + "80808000200241b0076a200241f0026a200241a0066a41e0006a220510a7" + "80808000200241e0076a200241a0066a200241f0026a41e0006a220110a7" + "8080800020024190086a200241f0026a41306a200510a780808000200241" + "80046a200241a0066a41306a200110a7808080002003200110a980808000" + "2201200510a98080800022057110a380808000200110d280808000200510" + "d2808080007110a380808000200241b0076a200241e0076a10db80808000" + "7110a38080800020024190086a20024180046a10db808080007110a38080" + "80007210a3808080007110a38080800021052000200241e8001086818080" + "0020053a0068200241c0086a2480808080000b970101017f238080808000" + "41c0026b2203248080808000200341086a20012002410041e00041e083c0" + "80001098808080000240200328020c41e000460d00200341106a41f083c0" + "8000109d80808000000b200341e0016a200328020841e000108981808000" + "1a200341106a200341e0016a10a0808080002000200341106a41c883c080" + "004118109480808000200341c0026a2480808080000bff1d02137f017e23" + "808080800041a0276b220224808080800020012d0000220341077610a380" + "8080002104200341067641017110a3808080002105200341057641017110" + "a380808000210620024180106a200141301086818080001a200220022d00" + "8010411f713a008010200241a0216a20024180106a10dc80808000200241" + "80226a200141306a10dc80808000200241e01f6a41004130108581808000" + "1a200241801f6a200241e01f6a200241a0216a20022d00d0212207109080" + "80800020022d00b0222101200241c0206a410041301085818080001a2002" + "41e0226a200241c0206a20024180226a2001109080808000200241e0226a" + "41306a200241801f6a41301086818080001a200241e00d6a10e780808000" + "2002200520047110a380808000200610d2808080007110a3808080002002" + "41e0226a10e0808080007110a38080800022033a00a80f200310d2808080" + "00210820024180106a200241e0226a10ba80808000200241c00b6a200241" + "80106a200241e0226a10b380808000200241c0236a200241c00b6a41e089" + "c0800010bc80808000200241c0236a10e08080800021032002410041e000" + "108581808000220220033a0060200310d2808080002109200241a0246a20" + "0241c0236a41a088c0800010e38080800020024180106a200241a0246a10" + "ba8080800020024180256a20024180106a200241c0236a10b38080800020" + "0241e0256a200241a0246a200241c0236a10b38080800020024180106a20" + "0241e0256a41306a10b28080800020024180106a41306a200241e0256a41" + "30108681808000210a200241d0016a41306a410041301085818080001a20" + "0241d0016a41e086c0800041301086818080001a200241c0266a200241d0" + "016a10e28080800020024180256a200241c0266a10c28080800021032002" + "41c00b6a20024180106a41e0001086818080001a200220033a00a00c2003" + "10d280808000210b200a41004130108581808000210320024180106a41e0" + "86c0800041301086818080001a20024180076a20024180256a2002418010" + "6a10bc8080800020024198036a20024180076a41d088c0800010e3808080" + "0020024180106a20024198036a200241e0256a10b3808080002002410110" + "a3808080003a00e01020024180076a200241c00b6a20024180106a200b10" + "da80808000200241c00b6a410041e0001085818080001a20024198036a20" + "0241c00b6a20024180076a20022d00e007220a10b0808080002002418010" + "6a20024198036a10ba80808000200a20024180106a200241c0236a10c280" + "8080007110a380808000210a20024180106a20024198036a41e000108681" + "8080001a2002200a3a00e01020024180076a200220024180106a200910da" + "808080002002410041e00010858180800022024198036a20022002418007" + "6a20022d00e007220910b08080800020024180106a20024198036a10e280" + "808000200241c00b6a41e0006a220b20024198036a20024180106a200620" + "024198036a41306a220a10de80808000200a10a98080800020024198036a" + "10de808080007110a3808080007210a3808080007310a38080800010b080" + "808000200241c00b6a200241e0226a41e0001086818080001a2009200420" + "0510d2808080007110a3808080007110a380808000210420024180106a20" + "0241c00b6a41c0011086818080001a200220043a00c811200220053a00c0" + "11200241c00b6a200241e00d6a20024180106a200810d980808000200120" + "0420022d00a80f220573410020086b712005737110a38080800021012002" + "200241c00b6a41c801108681808000220241cc016a200241c00b6a41cc01" + "6a280000360000200220022800890d3600c9012002200120077110a38080" + "8000220c3a00c80120024198036a10e780808000200241d0016a20024198" + "036a2002200c10d980808000200241e0046a200241d0016a10e880808000" + "200241c00b6a410041301085818080001a200242ba8a92abf1a7dbf21437" + "03980c200242e8a0ee96fe89bcf2143703900c200242a4a0a0f4c7f1c686" + "a27f3703880c200242acfced84e38c82c4d0003703800c200242d5cb9694" + "b3cac8f92a3703f80b200242c38bd5b3c8bcf286897f3703f00b200242d2" + "8ff6dfdbdddf950e3703b80e2002429df8bab6e9ac96d12d3703b00e2002" + "42a7a9d3d3fd9088e5513703a80e200242f1fdbada86bba3842f3703a00e" + "200242fcfcc9d492d8f78b5c3703980e200242da9f8cd5a5f4e9e7fb0037" + "03900e200242c8bd89ecc7dfe4ea0b3703880e200242b9e1f3e3fac9d3bc" + "1d3703800e20024298fcc0c8d1dfcad6927f3703f80d200242b2ee88db88" + "999194383703f00d200242838386b6d8a788cac2003703e80d200242d1b5" + "f2aada8bd6973e3703e00d2003200241e0046a41306a10b2808080002002" + "4180106a200241e0046a41301086818080001a20024180076a2002418010" + "6a200241c00b6a10b3808080002003200241f0056a10b280808000200241" + "80106a200241e0046a41e0006a220141301086818080001a20024180076a" + "41e0006a220d20024180106a200241e00d6a10b3808080002003200241d0" + "066a10b28080800020024180106a200241e0046a41c0016a220541301086" + "818080001a20024180076a41c0016a20024180106a41e000108681808000" + "210e2003410041301085818080001a20024180106a41e086c08000413010" + "86818080001a200241a0096a410041e0001085818080001a200241a0096a" + "41e0006a20024180106a41e0001086818080002109200241a0096a41c001" + "6a410041e000108581808000210a200241c0266a41306a210f2002418010" + "6a41e0006a2110200241e00d6a41e0006a211120024180106a41c0016a21" + "12200241c00b6a41c0016a2113200241e00d6a41c0016a21144280808280" + "8080a080e9002115024003402015500d01200241e0196a200110ba808080" + "00200241c01a6a200241e0196a200241e0196a10bc80808000200241a01b" + "6a200241c01a6a200241c01a6a10bc80808000200241801c6a200241a01b" + "6a200241a01b6a10bc80808000200241e01c6a2001200510b38080800020" + "0241c01d6a200510ba80808000200241a01e6a200241c01d6a41c08ac080" + "0010b380808000200241801f6a200241a01e6a200241801c6a10b3808080" + "00200241e01f6a200241e0196a200241a01e6a10bc80808000200241c020" + "6a200241e01c6a200241801c6a10b380808000200241a0216a200241a01e" + "6a200241a01e6a10bc8080800020024180226a200241a0216a200241a01e" + "6a10bc80808000200241e0226a200241e0196a20024180226a10bb808080" + "00200241c0236a200241e0226a200241e01f6a10b380808000200241a024" + "6a200241801f6a200241c0236a10bc8080800020024180256a200241e004" + "6a200110b380808000200241e0256a200241e0226a20024180256a10b380" + "808000200241e00d6a200241e0256a200241e0256a10bc80808000201120" + "0241a0246a41e00010868180800021082014200241c0206a41e000108681" + "8080002107200f410041301085818080001a200241c0266a41e086c08000" + "41301086818080001a20024180106a410041e0001085818080001a201020" + "0241c0266a41e00010868180800021042012410041e00010858180800021" + "06200241c00b6a200241e00d6a20024180106a200510e080808000220310" + "b080808000200b20082004200310b080808000201320072006200310b080" + "808000200241e0046a200241c00b6a41a0021086818080001a0240201542" + "0183500d00200241a0126a200241a0096a200241e0046a10b38080800020" + "024180136a2009200110b380808000200241e0136a200a200510b3808080" + "00200241c0146a200241a0096a200910bc80808000200241a0156a200241" + "e0046a200110bc8080800020024180166a200241c0146a200241a0156a10" + "b380808000200241e0166a200241a0126a20024180136a10bc8080800020" + "0241c0176a20024180166a200241e0166a10bb80808000200241a0186a20" + "09200a10bc8080800020024180196a2001200510bc80808000200241e019" + "6a200241a0186a20024180196a10b380808000200241c01a6a2002418013" + "6a200241e0136a10bc80808000200241a01b6a200241e0196a200241c01a" + "6a10bb80808000200241801c6a200241a0096a200a10bc80808000200241" + "e01c6a200241e0046a200510bc80808000200241c01d6a200241801c6a20" + "0241e01c6a10b380808000200241a01e6a200241a0126a200241e0136a10" + "bc80808000200241801f6a200241c01d6a200241a01e6a10bb8080800020" + "0241e01f6a200241a0126a200241a0126a10bc80808000200241c0206a20" + "0241e01f6a200241a0126a10bc80808000200241a0216a200241e0136a41" + "c08ac0800010b38080800020024180226a20024180136a200241a0216a10" + "bc80808000200241e0226a20024180136a200241a0216a10bb8080800020" + "0241c0236a200241801f6a41c08ac0800010b380808000200241a0246a20" + "0241a01b6a200241c0236a10b38080800020024180256a200241c0176a20" + "0241e0226a10b38080800020024180106a20024180256a200241a0246a10" + "bb80808000200241e0256a200241c0236a200241c0206a10b38080800020" + "0241c0266a200241e0226a20024180226a10b3808080002004200241c026" + "6a200241e0256a10bc80808000200241c00b6a200241c0206a200241c017" + "6a10b380808000200241e00d6a20024180226a200241a01b6a10b3808080" + "002006200241e00d6a200241c00b6a10bc80808000200241a0096a200241" + "80106a41a0021086818080001a0b201542018821150c000b0b2002418010" + "6a41e0006a200910e28080800020024180106a41c0016a200a41e0001086" + "818080001a20024180106a200241a0096a41e0001086818080001a200241" + "a0096a20024180106a41a0021086818080001a200241c0266a2002418007" + "6a200241a0096a41c0016a220110b380808000200241c00b6a200241a009" + "6a200e10b380808000200241e00d6a200d200110b3808080002002418010" + "6a200241a0096a41e0006a200e10b380808000200e10e080808000220520" + "0110e08080800022017110a380808000200510d280808000200110d28080" + "80007110a380808000200241c0266a200241c00b6a10c2808080007110a3" + "80808000200241e00d6a20024180106a10c2808080007110a38080800072" + "10a380808000200c7110a38080800021012000200241d0016a41c8011086" + "8180800020013a00c801200241a0276a2480808080000ba0d50103097f25" + "7e347f23808080800041e0ec006b2200248080808000200042d2b4bbf88c" + "a0d28d053700f40c2000428dcfdee5fd81c2bb0c3700ec0c200042afbed3" + "efd9fc81acea003700e40c20004283c4c699c3e0e5bf313700dc0c200042" + "869e99a9baa4ebe5e5003700d40c2000428dbfe3e0ae86d0a7b27f3700cc" + "0c200042908484d9e8fa99f80e3700c40c2000428bdfe7adc3a8cae04f37" + "00bc0c200042d687f295e888f880cd003700b40c20004281ddcf86b5f2d0" + "cf633700ac0c200042aef2a7aaae91d5accb003700a40c200042eb8fbebf" + "aee5caf4967f37009c0c200042b9b3d69fbf86ace8bb7f3700940c200042" + "d4fa86d5a0e3d296a87f37008c0c200042c5eddc9291a0c9e3a27f370084" + "0c2000428594fecef0de91d0643700fc0b20004289ae81b0d7a1feb5d300" + "3700f40b200042d4f18391eaffb8ed2e3700ec0b2000428cc8d9c6afddd3" + "d2ca003700e40b200042bca4908cdbc4caa54e3700dc0b200042b9cfe7bf" + "d99fbcbd563700d40b200042a4f788c3999fcac2c6003700cc0b200042b7" + "93c2cbbcbec3ee8e7f3700c40b200042a188aeeaaf8e90ba9b7f3700bc0b" + "200042c1fb969fd3cb97a0f5003700b40b200042ff9ce790fc9fe0fa6837" + "00ac0b200042b2dcb096dfcda7b9293700a40b200042a9e3f3c0c2c5cf85" + "2a37009c0b200042ad95c395bdd085ec393700940b200042c1f0c9e1f6d5" + "88e04537008c0b200042cfe1a7fed79ab1b2da003700840b200042d38490" + "85a5b6dff17d3700fc0a200042daf4a7a781f39dc7f8003700f40a200042" + "b88d9b949dd3aa86713700ec0a20004286b08ace96d5b8e0493700e40a20" + "0042e291f4f2d7e689e0443700dc0a200042c188fdead38de5d7f1003700" + "d40a200042fec2c2f2fb858b84283700cc0a200042fe8ebfddfaafafefec" + "003700c40a20004291f5b996b996cbc8bf7f3700bc0a200042b497cfc0d9" + "e3f284043700b40a2000428c9691f2e7bca4ec2d3700ac0a20004287e0c3" + "c29eccb3d21c3700a40a200042c8bbf68fceb0ad9eda0037009c0a200042" + "85c5e3e89284a997fd003700940a20004297bd8ec1effea3935437008c0a" + "200042eea8f8adc2cdbed9bb7f3700840a200042f5a3a4828bfd9ac1ac7f" + "3700fc09200042a087bbac98e0e282827f3700f4092000429a8683e6d8cc" + "ddd7113700ec09200042f0e1a982ee8890e33b3700e40920004286f6f2ba" + "80bf8bc3d5003700dc0920004297cfaad29bac9ec8243700d409200042c9" + "d3b292ffc082e01e3700cc09200042a9a3ffacc691beef6a3700c4092000" + "42a2d1f7c2ff94dce2543700bc09200042c78cfef2b8eabef8713700b409" + "20004286edaddda1fbf6baa37f3700ac09200042fdddbb9dedd1e9ef3337" + "00a409200042c6b2d8f2a9dae59d9f7f37009c09200042b59fb2d0b3e4cf" + "e32337009409200042c5c8c2fe9f869487c00037008c09200042ee91eb8f" + "c9a9c69cd1003700840920004283afa5ac9ded86b7253700fc08200042be" + "b9e4bccb88c99f3c3700f408200042c4d7d7c08b8db9e7f5003700ec0820" + "0042bf948bc7d7b1b0fcc1003700e4082000429a9ed5eea2d281c0e70037" + "00dc08200042acf185b19c87b3c3dd003700d40820004294bcf3c5dec192" + "ebb67f3700cc082000429db89ddb8fc9add13b3700c408200042e99baac8" + "a8faa582817f3700bc08200042daccdaad88c1f9b35b3700b408200042b5" + "d48be3dada8f8b223700ac08200042bdfdafd8a0e7aee4d8003700a40820" + "0042b9a7fddeeba08a8a3e37009c08200042e893cdd1ffdb94af08370094" + "08200042b58bef84d587bf842937008c08200042f4d8c597c3f6bd9f5a37" + "008408200042b3ccedc1b3d5cb987f3700fc07200042e0a38ecbbad9b6b8" + "b97f3700f407200042918cc8bfb089f7ab2f3700ec07200042dca8f8e4f3" + "82aee38f7f3700e407200042a3bfc29bc5d8edebca003700dc072000428e" + "81e4d981f589f1283700d40720004296f48083b9fcdab5b67f3700cc0720" + "0042cf938386a9d3d78a023700c4072000429687f1eff8ebacafef003700" + "bc072000429ef0afffc392fc88163700b407200042dbcda6cadfc8f38797" + "7f3700ac07200042cec2c1f9b5a7ec8e773700a407200042a5c192ecc6ad" + "99ef8f7f37009c07200042fd908df7cd8eeaab1837009407200042b18585" + "d2b981fac47637008c072000428af4e7cfa4fac8c4d70037008407200042" + "d6e7eeadc1c4f395a07f3700fc06200042a394d5b790978ebcec003700f4" + "0620004284f5dcaa92b5c09f663700ec06200042dcbedda48ae58eebe000" + "3700e406200042ac8bc7ea9baff0cf1b3700dc06200041940d6a42003700" + "002000418c0d6a4200370000200041840d6a4200370000200042003700fc" + "0c2000419c0d6a200041dc066a4130108980808000200041a80d6a200041" + "9c0d6a109c80808000200041940e6a200041dc066a41306a413010898080" + "8000200041a00e6a200041940e6a109c808080002000418c0f6a200041dc" + "066a41e0006a41e000108980808000200041980f6a20002802900f200028" + "02940f109f80808000200041e4106a2000419c086a41e000108980808000" + "200041f0106a20002802e81020002802ec10109f80808000200041bc126a" + "200041fc086a4130108980808000200041c8126a200041bc126a109c8080" + "8000200041b4136a200041ac096a41e000108980808000200041c0136a20" + "002802b81320002802bc13109f8080800020004188156a2000418c0a6a41" + "900110898080800020004194156a41086a22014100360200200042808080" + "80800137029415200041d0066a200028028c152202200028029015220341" + "004130418084c08000109880808000200041a0156a20002802d006200028" + "02d406108980808000200041b0156a200041a0156a109c80808000200041" + "94156a200041b0156a419084c08000108780808000200041c8066a200220" + "03413041e00041a084c08000109880808000200041b0156a20002802c806" + "20002802cc0610898080800020002802a01520002802a415108480808000" + "200041a0156a41086a2204200041b0156a41086a22052802003602002000" + "20002902b0153703a015200041b0156a200041a0156a109c808080002000" + "4194156a200041b0156a41b084c08000108780808000200041c0066a2002" + "200341e00041900141c084c08000109880808000200041b0156a20002802" + "c00620002802c40610898080800020002802a01520002802a41510848080" + "800020042005280200360200200020002902b0153703a015200041b0156a" + "200041a0156a109c8080800020004194156a200041b0156a41d084c08000" + "108780808000200041c81c6a200128020036020020002000290294153703" + "c01c200041b0156a200041a80d6a41e8001086818080001a200041b0156a" + "41e8006a200041a00e6a41e8001086818080001a20004180176a20004198" + "0f6a41c8011086818080002106200041c8186a200041f0106a41c8011086" + "818080002107200041901a6a200041c8126a41e8001086818080001a2000" + "41f81a6a200041c0136a41c8011086818080002108200041f8326a200041" + "9c0b6a109e80808000200041d01c6a200041f8326a41e084c08000411710" + "9780808000200041f8326a200041cc0b6a10a080808000200041b81d6a20" + "0041f8326a41f784c080004117109480808000200041f8326a200041ac0c" + "6a109e80808000200041801f6a200041f8326a418e85c080004117109780" + "808000200041e81f6a200041d01c6a41e8001086818080001a200041e81f" + "6a41e8006a200041b81d6a41c8011086818080001a20004198226a200041" + "801f6a41e8001086818080001a200041a0e8006a41c00041201080808080" + "0002400240024002400240024020002802a4684101470d00200041b8066a" + "20002802a8684108412041d880c08000108a80808000200041003602c85b" + "200020002802bc0622033602c45b200020002802b80622023602c05b2000" + "41f8326a41c0004120108080808000024020002802fc324101470d004100" + "21050240200220002802803322014f0d00200041b0066a200041c0db006a" + "410020014120108b8080800020002802b0062202418180808078470d0520" + "002802c45b210320002802c85b21050b200041dc0c6a2102200320054105" + "746a210341c000210103402001450d03200041b0046a2002290000220942" + "0042edb8ca9f8fb2facc494200108781808000200041c0046a2009420042" + "a3b8c9bcb8b9bbb62b4200108781808000200041d0046a20094200428ff3" + "d092e792c5e9054200108781808000200041e0046a200942004291fee7fa" + "99bbb6a4074200108781808000200041f0056a2002290008220a420042ed" + "b8ca9f8fb2facc49420010878180800020004180066a200a420042a3b8c9" + "bcb8b9bbb62b420010878180800020004190066a200a4200428ff3d092e7" + "92c5e9054200108781808000200041a0066a200a42004291fee7fa99bbb6" + "a4074200108781808000200041b0056a2002290010220b420042edb8ca9f" + "8fb2facc494200108781808000200041c0056a200b420042a3b8c9bcb8b9" + "bbb62b4200108781808000200041d0056a200b4200428ff3d092e792c5e9" + "054200108781808000200041e0056a200b42004291fee7fa99bbb6a40742" + "00108781808000200041f0046a2002290018220c420042edb8ca9f8fb2fa" + "cc49420010878180800020004180056a200c420042a3b8c9bcb8b9bbb62b" + "420010878180800020004190056a200c4200428ff3d092e792c5e9054200" + "108781808000200041a0056a200c42004291fee7fa99bbb6a40742001087" + "81808000200041a0046a20002903b004220d42ffffffff6f7e220e420042" + "8180808070420010878180800020004190046a200e420042feb7f9ffaf80" + "e9ded3004200108781808000200041c0036a200e42004285b087cd8081f6" + "9c334200108781808000200041f0026a200e420042c8faf5ccb2eae9f6f3" + "00420010878180800020004180046a20002903f005220f20002903c00422" + "10200041b0046a41086a2903007c22117c22122000290390047c22132000" + "41a0046a41086a290300200d20002903a004220e7c200e54ad7c7c220d42" + "ffffffff6f7e220e42004281808080704200108781808000200041f0036a" + "200e420042feb7f9ffaf80e9ded3004200108781808000200041e0036a20" + "0e42004285b087cd8081f69c334200108781808000200041d0036a200e42" + "0042c8faf5ccb2eae9f6f3004200108781808000200041b0036a20004190" + "046a41086a2903002013201254ad7c200d201354ad7c221420002903c003" + "7c2213200041c0046a41086a2903002011201054ad7c221520002903d004" + "7c22102000290380067c2211200041f0056a41086a2903002012200f54ad" + "7c7c221220002903b0057c22167c220f20002903f0037c22172000418004" + "6a41086a290300200029038004220e200d7c200e54ad7c7c220d42ffffff" + "ff6f7e220e42004281808080704200108781808000200041a0036a200e42" + "0042feb7f9ffaf80e9ded300420010878180800020004190036a200e4200" + "4285b087cd8081f69c33420010878180800020004180036a200e420042c8" + "faf5ccb2eae9f6f3004200108781808000200041e0026a200041f0036a41" + "086a2903002017200f54ad7c200d201754ad7c221820002903e0037c2217" + "200041c0036a41086a2903002013201454ad7c200f201354ad7c22192000" + "2903f0027c2213200041d0046a41086a2903002010201554ad7c221a2000" + "2903e0047c220f2000290390067c221420004180066a41086a2903002011" + "201054ad7c2012201154ad7c7c221020002903c0057c2211200041b0056a" + "41086a2903002016201254ad7c7c221220002903f0047c221b7c221c7c22" + "1520002903a0037c2216200041b0036a41086a29030020002903b003220e" + "200d7c200e54ad7c7c220d42ffffffff6f7e220e42004281808080704200" + "108781808000200041d0026a200e420042feb7f9ffaf80e9ded300420010" + "8781808000200041c0026a200e42004285b087cd8081f69c334200108781" + "808000200041b0026a200e420042c8faf5ccb2eae9f6f300420010878180" + "8000200041d0036a41086a290300211d20004180056a41086a290300211e" + "200041d0056a41086a290300211f200041a0066a41086a29030021202000" + "2903e00521212000290390052122200029038003212320004180036a4108" + "6a290300212420004190036a41086a290300212520004190056a41086a29" + "03002126200041e0056a41086a290300212720002903a005212820002903" + "b0022129200041b0026a41086a290300212a20002903c002212b200041c0" + "026a41086a290300212c200020002903d002222d200041e0046a41086a29" + "0300200f201a54ad7c221a20002903a0067c220e20004190066a41086a29" + "03002014200f54ad7c2010201454ad7c7c220f20002903d0057c22142000" + "41c0056a41086a2903002011201054ad7c2012201154ad7c7c2210200029" + "0380057c2211200041f0046a41086a290300201b201254ad7c7c22122000" + "41f0026a41086a2903002013201954ad7c201c201354ad7c7c2213200029" + "03d0037c2219200041e0036a41086a2903002017201854ad7c2015201754" + "ad7c7c22172000290390037c2218200041a0036a41086a29030020162015" + "54ad7c200d201654ad7c7c22167c2215200041e0026a41086a2903002000" + "2903e002221b200d7c201b54ad7c7c221b3703f8322000202b2023202220" + "212020200e201a54ad7c200f200e54ad7c221a7c220e201f2014200f54ad" + "7c2010201454ad7c7c220d7c220f201e2011201054ad7c2012201154ad7c" + "7c22102013201254ad7c2212201d2019201354ad7c2017201954ad7c7c22" + "137c221120252018201754ad7c2016201854ad7c7c22177c2214200041d0" + "026a41086a2903002015202d54ad7c201b201554ad7c7c22153703803320" + "0020292012201054ad2013201254ad7c221620282027200e201a54ad7c20" + "0d200e54ad7c22197c220e2026200f200d54ad7c2010200f54ad7c7c2210" + "7c221220242011201354ad7c2017201154ad7c7c22137c220d202c201420" + "1754ad7c2015201454ad7c7c22113703883320002012201654ad20132012" + "54ad7c200041a0056a41086a290300200e201954ad7c2010200e54ad7c7c" + "202a200d201354ad7c2011200d54ad7c7c37039033200041a0e8006a2000" + "41f8326a10a28080800020002903a068210e20002903a868211220002903" + "b068211320002903b868210d200942ffffffff0f7c200954ad427f7c2209" + "2009200a7c220a200954ad7c200a4282c88680d0ff96a1ac7f7c200a54ad" + "7c427f7c423f872209200b20097c2209200b54ad7c200942fbcff8b2fffe" + "89e34c7c200954ad7c427f7c423f872209200c20097c2209200c54ad7c20" + "0942b8858ab3cd9596898c7f7c200954ad7ca741016a41017110a3808080" + "0021042000411836028457200041a585c0800036028057200020043a00c0" + "52200441ff01714101470d04200341186a200d370300200341106a201337" + "0300200341086a20123703002003200e370300200341206a210320054101" + "6a210520022001412020014120491b22046a2102200120046b21010c000b" + "0b2000410036028833200041013602fc32200041d085c080003602f83220" + "00420437028033200041f8326a41d880c0800010a480808000000b200041" + "0036028833200041013602fc32200041d085c080003602f8322000420437" + "028033200041f8326a41d880c0800010a480808000000b20002802c45b21" + "2e20002802c05b212f200541016a20002802c81c470d0220004180236a20" + "002802c41c220210a580808000200241e8006a2130200041d4d2006a2131" + "200041c0d2006a41086a2132200041a0ce006a2133200041c0db006a4130" + "6a2134200041a0dc006a2135410021040340024020042005470d00200041" + "f8326a20004180236a41e0006a10a68080800041002102200041a0e8006a" + "410041301085818080001a200041c0db006a200041a0e8006a200041f832" + "6a20002d00a833109080808000200041a0e8006a20004180236a200041c0" + "db006a10a780808000200041a0e8006a41306a20004180236a41306a2000" + "41c0db006a10a7808080002000410010a3808080003a008069200041f832" + "6a10a88080800020004190246a200041a0e8006a200041f8326a200041c0" + "db006a10a98080800010aa80808000200041f8246a200041b81d6a10ab80" + "80800020004188256a200710ab8080800020004198256a200810ab808080" + "00200041a8256a200610ab80808000200041b82e6a20004190246a108f80" + "808000200041c0376a200041801f6a108f80808000200041803c6a200041" + "b0156a108f808080002000200041a8256a3602942a2000200041803c6a36" + "02902a200020004198256a36028c2a2000200041c0376a3602882a200020" + "004188256a3602842a2000200041b82e6a3602802a2000200041f8246a36" + "02fc292000200041e81f6a3602f829200042043702c4642000200041f829" + "6a3602c064200041b8256a10ac80808000200041f8326a41a0026a210520" + "0041b8256a41a0026a213620004180d7006a41c0016a213320004180d700" + "6a41e0006a2134200041c0db006a41e0036a2135200041a0e8006a41e003" + "6a2132200041c0db006a4180036a2106200041a0e8006a4180036a210720" + "0041c0db006a41a0026a2108200041a0e8006a41a0026a2131200041c0d2" + "006a41c0016a2137200041c0d2006a41e0006a2138200041c0db006a41c0" + "016a2139200041a0e8006a41c0016a213a200041c0db006a41e0006a213b" + "200041a0e8006a41e0006a213c41c000213d034002400240203d450d0020" + "02410171210342808082808080a080e900203d417f6a223d413f71ad88a7" + "21022003450d02200041f8326a200041b8256a41c0041086818080001a20" + "0041b8256a200041c0e4006a200041f8326a10ad80808000200241017145" + "0d01200041c0db006a200041b8256a41c0041086818080001a20002802c4" + "64410374210120002802c064210320002802c8642130024003402001450d" + "01200328020422042d000c20032802002d00607210a38080800021022000" + "41a0e8006a200041c0db006a200441046a280200200441086a2802002030" + "41dc8cc0800010ae80808000200328020010af80808000200041c0d2006a" + "200041a0e8006a200041c0db006a200210b0808080002038203c203b2002" + "10b0808080002037203a2039200210b08080800020004180d7006a203120" + "08200210b080808000203420072006200210b08080800020332032203520" + "0210b080808000200041f8326a200041c0d2006a41a0021086818080001a" + "200520004180d7006a41a0021086818080001a200041c0db006a200041f8" + "326a41c0041086818080001a200141786a2101200341086a21030c000b0b" + "2000203041016a3602c864200041b8256a200041c0db006a41c004108681" + "8080001a0c010b200041f8326a200041b8256a41c0041086818080001a20" + "0041b8256a200041c0e4006a200041f8326a10ad80808000200041f8326a" + "41a0026a223e203610b180808000200041f8326a200041b8256a41a00210" + "86818080001a200041b8256a200041f8326a41c0041086818080001a2000" + "41f8296a200041b8256a41c0041086818080001a200041c0d2006a41306a" + "2230200041b8256a41306a10b280808000200041c0d2006a200041b8256a" + "41301086818080001a200041c0db006a41306a2201200041b8256a419001" + "6a10b280808000200041c0db006a200041b8256a41e0006a413010868180" + "80001a200041a0e8006a41306a2203200041b8256a41f0016a10b2808080" + "00200041a0e8006a200041b8256a41c0016a41301086818080001a200041" + "f8326a410041301085818080001a200042c18e8ea3d58c88f8183703d033" + "200042d2a1c19ee8addffc033703c8332000429e97eb8de0d783db8e7f37" + "03c03320004295b7949cfdd590b8d8003703b833200042d2cbb6fee1c8c8" + "d5dd003703b033200042f1e0c7b3c8bcf2814d3703a83320004180d7006a" + "41e0006a2232200041c0db006a200041f8326a10b380808000200041f832" + "6a41306a410041301085818080002105200042ba8a92abf1a7dbf2143703" + "a033200042e8a0ee96fe89bcf21437039833200042a4a0a0f4c7f1c686a2" + "7f37039033200042acfced84e38c82c4d00037038833200042d5cb9694b3" + "cac8f92a37038033200042c38bd5b3c8bcf286897f3703f83220004180d7" + "006a41c0016a2204200041a0e8006a200041f8326a10b380808000200041" + "80d7006a200041c0d2006a41e0001086818080001a20004180ce006a4130" + "6a2202200041b8256a41d0026a10b28080800020004180ce006a200041b8" + "256a41a0026a41301086818080001a2030200041b8256a41b0036a10b280" + "808000200041c0d2006a200041b8256a4180036a41301086818080001a20" + "03200041b8256a4190046a10b280808000200041a0e8006a200041b8256a" + "41e0036a41301086818080001a200041f8326a410041301085818080001a" + "200042c18e8ea3d58c88f8183703d033200042d2a1c19ee8addffc033703" + "c8332000429e97eb8de0d783db8e7f3703c03320004295b7949cfdd590b8" + "d8003703b833200042d2cbb6fee1c8c8d5dd003703b033200042f1e0c7b3" + "c8bcf2814d3703a833200041c0db006a41e0006a2235200041c0d2006a20" + "0041f8326a10b3808080002005410041301085818080002133200042ba8a" + "92abf1a7dbf2143703a033200042e8a0ee96fe89bcf21437039833200042" + "a4a0a0f4c7f1c686a27f37039033200042acfced84e38c82c4d000370388" + "33200042d5cb9694b3cac8f92a37038033200042c38bd5b3c8bcf286897f" + "3703f832200041c0db006a41c0016a223b200041a0e8006a200041f8326a" + "10b380808000200041c0db006a20004180ce006a41e0001086818080001a" + "200042afff91c4a8fbbb87113703f86820004289bd83adbef9849c2e3703" + "f068200042d0d1a385a497e78d413703e86820004294a7e7acc2baa5a44f" + "3703e068200042ecf9a5e2bf8da8a1d8003703d868200042c6ac97e7d4d5" + "9afbb27f3703d068200042ebcded87fbc188f9083703c868200042cd9cab" + "eda5fde4f11c3703c068200042eed3f096abd9ebada37f3703b868200042" + "8fc5dc88cd998ff4977f3703b0682000429386aaa8abf2d7b4463703a868" + "200042e5a8e798abaaa584073703a068200041a0e8006a41e0006a410041" + "c0011085818080002108203e200041c0db006a200041a0e8006a10b48080" + "8000200041f8326a20004180d7006a41a0021086818080001a2002203310" + "b28080800020004180ce006a200041f8326a41301086818080001a200041" + "80d7006a41306a2207200041f8326a4190016a10b28080800020004180d7" + "006a200041f8326a41e0006a223f41301086818080001a2001200041f832" + "6a41f0016a10b280808000200041c0db006a200041f8326a41c0016a2240" + "41301086818080001a200041a0e8006a410041301085818080001a200042" + "c18e8ea3d58c88f8183703f868200042d2a1c19ee8addffc033703f06820" + "00429e97eb8de0d783db8e7f3703e86820004295b7949cfdd590b8d80037" + "03e068200042d2cbb6fee1c8c8d5dd003703d868200042f1e0c7b3c8bcf2" + "814d3703d068200041c0d2006a41e0006a223820004180d7006a200041a0" + "e8006a10b3808080002003410041301085818080002103200042ba8a92ab" + "f1a7dbf2143703c868200042e8a0ee96fe89bcf2143703c068200042a4a0" + "a0f4c7f1c686a27f3703b868200042acfced84e38c82c4d0003703b06820" + "0042d5cb9694b3cac8f92a3703a868200042c38bd5b3c8bcf286897f3703" + "a068200041c0d2006a41c0016a2234200041c0db006a200041a0e8006a10" + "b380808000200041c0d2006a20004180ce006a41e0001086818080001a20" + "0041c0c9006a41306a2205200041f8326a41d0026a10b280808000200041" + "c0c9006a203e41301086818080001a2002200041f8326a41b0036a10b280" + "80800020004180ce006a200041f8326a4180036a22414130108681808000" + "1a2001200041f8326a4190046a10b280808000200041c0db006a200041f8" + "326a41e0036a224241301086818080001a200041a0e8006a410041301085" + "818080001a200042c18e8ea3d58c88f8183703f868200042d2a1c19ee8ad" + "dffc033703f0682000429e97eb8de0d783db8e7f3703e86820004295b794" + "9cfdd590b8d8003703e068200042d2cbb6fee1c8c8d5dd003703d8682000" + "42f1e0c7b3c8bcf2814d3703d068203220004180ce006a200041a0e8006a" + "10b3808080002003410041301085818080002143200042ba8a92abf1a7db" + "f2143703c868200042e8a0ee96fe89bcf2143703c068200042a4a0a0f4c7" + "f1c686a27f3703b868200042acfced84e38c82c4d0003703b068200042d5" + "cb9694b3cac8f92a3703a868200042c38bd5b3c8bcf286897f3703a06820" + "04200041c0db006a200041a0e8006a10b38080800020004180d7006a2000" + "41c0c9006a41e0001086818080001a200042afff91c4a8fbbb8711370398" + "5c20004289bd83adbef9849c2e3703905c200042d0d1a385a497e78d4137" + "03885c20004294a7e7acc2baa5a44f3703805c200042ecf9a5e2bf8da8a1" + "d8003703f85b200042c6ac97e7d4d59afbb27f3703f05b200042ebcded87" + "fbc188f9083703e85b200042cd9cabeda5fde4f11c3703e05b200042eed3" + "f096abd9ebada37f3703d85b2000428fc5dc88cd998ff4977f3703d05b20" + "00429386aaa8abf2d7b4463703c85b200042e5a8e798abaaa584073703c0" + "5b2035410041c001108581808000213c200041a0e8006a41a0026a220320" + "004180d7006a200041c0db006a10b480808000200041a0e8006a200041c0" + "d2006a41a0021086818080001a2005204310b280808000200041c0c9006a" + "200041a0e8006a41301086818080001a2030200041a0e8006a4190016a22" + "4410b280808000200041c0d2006a200841301086818080001a2007200041" + "a0e8006a41f0016a224510b28080800020004180d7006a200041a0e8006a" + "41c0016a223a41301086818080001a200041c0db006a4100413010858180" + "80001a200042c18e8ea3d58c88f8183703985c200042d2a1c19ee8addffc" + "033703905c2000429e97eb8de0d783db8e7f3703885c20004295b7949cfd" + "d590b8d8003703805c200042d2cbb6fee1c8c8d5dd003703f85b200042f1" + "e0c7b3c8bcf2814d3703f05b20004180ce006a41e0006a2236200041c0d2" + "006a200041c0db006a10b380808000200141004130108581808000210120" + "0042ba8a92abf1a7dbf2143703e85b200042e8a0ee96fe89bcf2143703e0" + "5b200042a4a0a0f4c7f1c686a27f3703d85b200042acfced84e38c82c4d0" + "003703d05b200042d5cb9694b3cac8f92a3703c85b200042c38bd5b3c8bc" + "f286897f3703c05b20004180ce006a41c0016a224620004180d7006a2000" + "41c0db006a10b38080800020004180ce006a200041c0c9006a41e0001086" + "818080001a20004180c5006a41306a2231200041a0e8006a41d0026a2247" + "10b28080800020004180c5006a200341301086818080001a2005200041a0" + "e8006a41b0036a224810b280808000200041c0c9006a200041a0e8006a41" + "80036a224941301086818080001a2007200041a0e8006a4190046a224a10" + "b28080800020004180d7006a200041a0e8006a41e0036a224b4130108681" + "8080001a200041c0db006a410041301085818080001a200042c18e8ea3d5" + "8c88f8183703985c200042d2a1c19ee8addffc033703905c2000429e97eb" + "8de0d783db8e7f3703885c20004295b7949cfdd590b8d8003703805c2000" + "42d2cbb6fee1c8c8d5dd003703f85b200042f1e0c7b3c8bcf2814d3703f0" + "5b2038200041c0c9006a200041c0db006a10b38080800020014100413010" + "85818080002135200042ba8a92abf1a7dbf2143703e85b200042e8a0ee96" + "fe89bcf2143703e05b200042a4a0a0f4c7f1c686a27f3703d85b200042ac" + "fced84e38c82c4d0003703d05b200042d5cb9694b3cac8f92a3703c85b20" + "0042c38bd5b3c8bcf286897f3703c05b203420004180d7006a200041c0db" + "006a10b380808000200041c0d2006a20004180c5006a41e0001086818080" + "001a200042afff91c4a8fbbb87113703d85720004289bd83adbef9849c2e" + "3703d057200042d0d1a385a497e78d413703c85720004294a7e7acc2baa5" + "a44f3703c057200042ecf9a5e2bf8da8a1d8003703b857200042c6ac97e7" + "d4d59afbb27f3703b057200042ebcded87fbc188f9083703a857200042cd" + "9cabeda5fde4f11c3703a057200042eed3f096abd9ebada37f3703985720" + "00428fc5dc88cd998ff4977f370390572000429386aaa8abf2d7b4463703" + "8857200042e5a8e798abaaa58407370380572032410041c0011085818080" + "00213d200041c0db006a41a0026a2232200041c0d2006a20004180d7006a" + "10b480808000200041c0db006a20004180ce006a41a0021086818080001a" + "2031203510b28080800020004180c5006a200041c0db006a413010868180" + "80001a2002200041c0db006a4190016a224c10b28080800020004180ce00" + "6a203c41301086818080001a2030200041c0db006a41f0016a224d10b280" + "808000200041c0d2006a203b41301086818080001a20004180d7006a4100" + "41301085818080001a200042c18e8ea3d58c88f8183703d857200042d2a1" + "c19ee8addffc033703d0572000429e97eb8de0d783db8e7f3703c8572000" + "4295b7949cfdd590b8d8003703c057200042d2cbb6fee1c8c8d5dd003703" + "b857200042f1e0c7b3c8bcf2814d3703b057200041c0c9006a41e0006a22" + "0620004180ce006a20004180d7006a10b380808000200741004130108581" + "8080002101200042ba8a92abf1a7dbf2143703a857200042e8a0ee96fe89" + "bcf2143703a057200042a4a0a0f4c7f1c686a27f37039857200042acfced" + "84e38c82c4d00037039057200042d5cb9694b3cac8f92a37038857200042" + "c38bd5b3c8bcf286897f37038057200041c0c9006a41c0016a2207200041" + "c0d2006a20004180d7006a10b380808000200041c0c9006a20004180c500" + "6a41e0001086818080001a200041c0c0006a41306a2237200041c0db006a" + "41d0026a224e10b280808000200041c0c0006a203241301086818080001a" + "2031200041c0db006a41b0036a224f10b28080800020004180c5006a2000" + "41c0db006a4180036a225041301086818080001a2030200041c0db006a41" + "90046a225110b280808000200041c0d2006a200041c0db006a41e0036a22" + "5241301086818080001a20004180d7006a410041301085818080001a2000" + "42c18e8ea3d58c88f8183703d857200042d2a1c19ee8addffc033703d057" + "2000429e97eb8de0d783db8e7f3703c85720004295b7949cfdd590b8d800" + "3703c057200042d2cbb6fee1c8c8d5dd003703b857200042f1e0c7b3c8bc" + "f2814d3703b057203620004180c5006a20004180d7006a10b38080800020" + "01410041301085818080002101200042ba8a92abf1a7dbf2143703a85720" + "0042e8a0ee96fe89bcf2143703a057200042a4a0a0f4c7f1c686a27f3703" + "9857200042acfced84e38c82c4d00037039057200042d5cb9694b3cac8f9" + "2a37038857200042c38bd5b3c8bcf286897f370380572046200041c0d200" + "6a20004180d7006a10b38080800020004180ce006a200041c0c0006a41e0" + "001086818080001a200042afff91c4a8fbbb87113703985320004289bd83" + "adbef9849c2e37039053200042d0d1a385a497e78d413703885320004294" + "a7e7acc2baa5a44f37038053200042ecf9a5e2bf8da8a1d8003703f85220" + "0042c6ac97e7d4d59afbb27f3703f052200042ebcded87fbc188f9083703" + "e852200042cd9cabeda5fde4f11c3703e052200042eed3f096abd9ebada3" + "7f3703d8522000428fc5dc88cd998ff4977f3703d0522000429386aaa8ab" + "f2d7b4463703c852200042e5a8e798abaaa584073703c0522038410041c0" + "01108581808000213820004180d7006a41a0026a225320004180ce006a20" + "0041c0d2006a10b48080800020004180d7006a200041c0c9006a41a00210" + "86818080001a2037200110b280808000200041c0c0006a20004180d7006a" + "41301086818080001a200520004180d7006a4190016a10b2808080002000" + "41c0c9006a203d41301086818080001a200220004180d7006a41f0016a10" + "b28080800020004180ce006a200441301086818080001a200041c0d2006a" + "410041301085818080001a200042c18e8ea3d58c88f81837039853200042" + "d2a1c19ee8addffc03370390532000429e97eb8de0d783db8e7f37038853" + "20004295b7949cfdd590b8d80037038053200042d2cbb6fee1c8c8d5dd00" + "3703f852200042f1e0c7b3c8bcf2814d3703f05220004180c5006a41e000" + "6a2254200041c0c9006a200041c0d2006a10b38080800020304100413010" + "85818080002139200042ba8a92abf1a7dbf2143703e852200042e8a0ee96" + "fe89bcf2143703e052200042a4a0a0f4c7f1c686a27f3703d852200042ac" + "fced84e38c82c4d0003703d052200042d5cb9694b3cac8f92a3703c85220" + "0042c38bd5b3c8bcf286897f3703c05220004180c5006a41c0016a225520" + "004180ce006a200041c0d2006a10b38080800020004180c5006a200041c0" + "c0006a41e0001086818080001a200041803c6a41306a223020004180d700" + "6a41d0026a10b280808000200041803c6a205341301086818080001a2037" + "20004180d7006a41b0036a10b280808000200041c0c0006a20004180d700" + "6a4180036a41301086818080001a200220004180d7006a4190046a10b280" + "80800020004180ce006a20004180d7006a41e0036a41301086818080001a" + "200041c0d2006a410041301085818080001a200042c18e8ea3d58c88f818" + "37039853200042d2a1c19ee8addffc03370390532000429e97eb8de0d783" + "db8e7f3703885320004295b7949cfdd590b8d80037038053200042d2cbb6" + "fee1c8c8d5dd003703f852200042f1e0c7b3c8bcf2814d3703f052200620" + "0041c0c0006a200041c0d2006a10b3808080002039410041301085818080" + "002139200042ba8a92abf1a7dbf2143703e852200042e8a0ee96fe89bcf2" + "143703e052200042a4a0a0f4c7f1c686a27f3703d852200042acfced84e3" + "8c82c4d0003703d052200042d5cb9694b3cac8f92a3703c852200042c38b" + "d5b3c8bcf286897f3703c052200720004180ce006a200041c0d2006a10b3" + "80808000200041c0c9006a200041803c6a41e0001086818080001a200042" + "afff91c4a8fbbb87113703d84e20004289bd83adbef9849c2e3703d04e20" + "0042d0d1a385a497e78d413703c84e20004294a7e7acc2baa5a44f3703c0" + "4e200042ecf9a5e2bf8da8a1d8003703b84e200042c6ac97e7d4d59afbb2" + "7f3703b04e200042ebcded87fbc188f9083703a84e200042cd9cabeda5fd" + "e4f11c3703a04e200042eed3f096abd9ebada37f3703984e2000428fc5dc" + "88cd998ff4977f3703904e2000429386aaa8abf2d7b4463703884e200042" + "e5a8e798abaaa584073703804e2036410041c00110858180800021362000" + "41c0d2006a41a0026a2256200041c0c9006a20004180ce006a10b4808080" + "00200041c0d2006a20004180c5006a41a0021086818080001a2030203910" + "b280808000200041803c6a200041c0d2006a41301086818080001a203720" + "0041c0d2006a4190016a225710b280808000200041c0c0006a2038413010" + "86818080001a2005200041c0d2006a41f0016a225810b280808000200041" + "c0c9006a203441301086818080001a20004180ce006a4100413010858180" + "80001a200042c18e8ea3d58c88f8183703d84e200042d2a1c19ee8addffc" + "033703d04e2000429e97eb8de0d783db8e7f3703c84e20004295b7949cfd" + "d590b8d8003703c04e200042d2cbb6fee1c8c8d5dd003703b84e200042f1" + "e0c7b3c8bcf2814d3703b04e2054200041c0c0006a20004180ce006a10b3" + "808080002002410041301085818080002102200042ba8a92abf1a7dbf214" + "3703a84e200042e8a0ee96fe89bcf2143703a04e200042a4a0a0f4c7f1c6" + "86a27f3703984e200042acfced84e38c82c4d0003703904e200042d5cb96" + "94b3cac8f92a3703884e200042c38bd5b3c8bcf286897f3703804e205520" + "0041c0c9006a20004180ce006a10b38080800020004180c5006a20004180" + "3c6a41e0001086818080001a200041c0376a41306a2259200041c0d2006a" + "41d0026a225a10b280808000200041c0376a205641301086818080001a20" + "30200041c0d2006a41b0036a225b10b280808000200041803c6a200041c0" + "d2006a4180036a225c41301086818080001a2037200041c0d2006a419004" + "6a225d10b280808000200041c0c0006a200041c0d2006a41e0036a225e41" + "301086818080001a20004180ce006a410041301085818080001a200042c1" + "8e8ea3d58c88f8183703d84e200042d2a1c19ee8addffc033703d04e2000" + "429e97eb8de0d783db8e7f3703c84e20004295b7949cfdd590b8d8003703" + "c04e200042d2cbb6fee1c8c8d5dd003703b84e200042f1e0c7b3c8bcf281" + "4d3703b04e2006200041803c6a20004180ce006a10b38080800020024100" + "4130108581808000215f200042ba8a92abf1a7dbf2143703a84e200042e8" + "a0ee96fe89bcf2143703a04e200042a4a0a0f4c7f1c686a27f3703984e20" + "0042acfced84e38c82c4d0003703904e200042d5cb9694b3cac8f92a3703" + "884e200042c38bd5b3c8bcf286897f3703804e2007200041c0c0006a2000" + "4180ce006a10b380808000200041c0c9006a200041c0376a41e000108681" + "8080001a200042afff91c4a8fbbb87113703d84e20004289bd83adbef984" + "9c2e3703d04e200042d0d1a385a497e78d413703c84e20004294a7e7acc2" + "baa5a44f3703c04e200042ecf9a5e2bf8da8a1d8003703b84e200042c6ac" + "97e7d4d59afbb27f3703b04e200042ebcded87fbc188f9083703a84e2000" + "42cd9cabeda5fde4f11c3703a04e200042eed3f096abd9ebada37f370398" + "4e2000428fc5dc88cd998ff4977f3703904e2000429386aaa8abf2d7b446" + "3703884e200042e5a8e798abaaa584073703804e2036410041c001108581" + "8080002160200041b82e6a41a0026a200041c0c9006a20004180ce006a10" + "b480808000200041b82e6a20004180c5006a41a0021086818080001a2000" + "41a0e8006a200041f8296a10b58080800020004180ce006a200041f8296a" + "41a0026a226110b580808000200041f8326a20004180ce006a10b6808080" + "00200041c0c9006a200041a0e8006a200041f8326a10b780808000200041" + "f8326a2006200710b38080800020004180e0006a200041f8326a203310b8" + "8080800020004180e0006a41306a2230200041f8326a203310b980808000" + "200041f8326a200041c0c9006a10ba80808000200041a0e2006a200041f8" + "326a20004180e0006a10bb80808000200041f8326a200710ba8080800020" + "0041c0e4006a200041f8326a203310b880808000200041c0e4006a41306a" + "2236200041f8326a203310b980808000200041f8326a200041c0c9006a20" + "0610b380808000200041c0376a200041c0e4006a200041f8326a10bb8080" + "8000200041803c6a200610ba80808000200041f8326a200041c0c9006a20" + "0710b380808000200041c0c0006a200041803c6a200041f8326a10bb8080" + "8000200041a0e8006a2006200041c0c0006a10b380808000200041f8326a" + "2007200041c0376a10b380808000200041c0db006a200041a0e8006a2000" + "41f8326a10bc8080800020004180c5006a200041c0db006a203510b88080" + "80002031200041c0db006a203510b980808000200041f8326a200041c0c9" + "006a200041a0e2006a10b380808000200041c0d2006a20004180c5006a20" + "0041f8326a10bc80808000200041a0e8006a200041c0d2006a10bd808080" + "00200041f8326a203910bd80808000200041e0e6006a200041a0e8006a20" + "0041f8326a10b980808000200041c0db006a200041e0e6006a10a6808080" + "0020004180d7006a410041301085818080001a200041c0e7006a20004180" + "d7006a200041c0db006a20002d00f05b2202109080808000200041f8326a" + "200041c0d2006a200041c0e7006a10a780808000200041a0e8006a200041" + "c0e7006a10b28080800020332039200041a0e8006a10a780808000200041" + "a0e8006a200041f8326a41e0001086818080001a200020023a0080692000" + "4180d7006a410041e0001085818080001a200041c0db006a20004180d700" + "6a200041a0e8006a200210b080808000200041f8326a200041c0db006a20" + "0041a0e2006a10b380808000203f200041c0db006a200041c0376a10b380" + "8080002040200041c0db006a200041c0c0006a10b380808000200041c0db" + "006a200041f8326a41a0021086818080001a200020023a00e05d20004180" + "d7006a410041a0021085818080001a200041c0d2006a20004180d7006a20" + "0041c0db006a200210b0808080002038203d203c200210b0808080002034" + "2004203b200210b080808000200041a0e8006a200041f8296a200041c0d2" + "006a10b480808000200041f8326a200041c0d2006a10b180808000200320" + "61200041f8326a10b480808000200041f8326a200041a0e8006a41c00410" + "86818080001a200020023a00b837200041803c6a410041c0041085818080" + "001a200041c0db006a200041803c6a200041f8326a200210b08080800020" + "3c200041803c6a41e0006a203f200210b080808000203b200041803c6a41" + "c0016a2040200210b080808000200041a0e8006a200041803c6a41a0026a" + "203e200210b0808080002008200041803c6a4180036a2041200210b08080" + "8000203a200041803c6a41e0036a2042200210b080808000200041c0376a" + "200041c0db006a41a0021086818080001a200041c0376a41a0026a200041" + "a0e8006a41a0021086818080002161200041c0c0006a200041b82e6a2000" + "41c0376a10be80808000200041c0376a200041c0c0006a41c00410868180" + "80001a205f203710b28080800020004180ce006a200041c0c0006a413010" + "86818080001a2001200041c0c0006a4190016a10b28080800020004180d7" + "006a200041c0c0006a41e0006a41301086818080001a2035200041c0c000" + "6a41f0016a10b280808000200041c0db006a200041c0c0006a41c0016a41" + "301086818080001a200041a0e8006a410041301085818080001a200042c1" + "8e8ea3d58c88f8183703f868200042d2a1c19ee8addffc033703f0682000" + "429e97eb8de0d783db8e7f3703e86820004295b7949cfdd590b8d8003703" + "e068200042d2cbb6fee1c8c8d5dd003703d868200042f1e0c7b3c8bcf281" + "4d3703d068203820004180d7006a200041a0e8006a10b380808000204341" + "0041301085818080002133200042ba8a92abf1a7dbf2143703c868200042" + "e8a0ee96fe89bcf2143703c068200042a4a0a0f4c7f1c686a27f3703b868" + "200042acfced84e38c82c4d0003703b068200042d5cb9694b3cac8f92a37" + "03a868200042c38bd5b3c8bcf286897f3703a0682034200041c0db006a20" + "0041a0e8006a10b380808000200041c0d2006a20004180ce006a41e00010" + "86818080001a2005200041c0c0006a41d0026a10b280808000200041c0c9" + "006a200041c0c0006a41a0026a223741301086818080001a205f200041c0" + "c0006a41b0036a10b28080800020004180ce006a200041c0c0006a418003" + "6a41301086818080001a2035200041c0c0006a4190046a10b28080800020" + "0041c0db006a200041c0c0006a41e0036a41301086818080001a200041a0" + "e8006a410041301085818080001a200042c18e8ea3d58c88f8183703f868" + "200042d2a1c19ee8addffc033703f0682000429e97eb8de0d783db8e7f37" + "03e86820004295b7949cfdd590b8d8003703e068200042d2cbb6fee1c8c8" + "d5dd003703d868200042f1e0c7b3c8bcf2814d3703d068203d20004180ce" + "006a200041a0e8006a10b380808000203341004130108581808000210620" + "0042ba8a92abf1a7dbf2143703c868200042e8a0ee96fe89bcf2143703c0" + "68200042a4a0a0f4c7f1c686a27f3703b868200042acfced84e38c82c4d0" + "003703b068200042d5cb9694b3cac8f92a3703a868200042c38bd5b3c8bc" + "f286897f3703a0682004200041c0db006a200041a0e8006a10b380808000" + "20004180d7006a200041c0c9006a41e0001086818080001a200042afff91" + "c4a8fbbb87113703985c20004289bd83adbef9849c2e3703905c200042d0" + "d1a385a497e78d413703885c20004294a7e7acc2baa5a44f3703805c2000" + "42ecf9a5e2bf8da8a1d8003703f85b200042c6ac97e7d4d59afbb27f3703" + "f05b200042ebcded87fbc188f9083703e85b200042cd9cabeda5fde4f11c" + "3703e05b200042eed3f096abd9ebada37f3703d85b2000428fc5dc88cd99" + "8ff4977f3703d05b2000429386aaa8abf2d7b4463703c85b200042e5a8e7" + "98abaaa584073703c05b203c410041c00110858180800021432003200041" + "80d7006a200041c0db006a10b480808000200041a0e8006a200041c0d200" + "6a41a0021086818080001a2005200610b280808000200041c0c9006a2000" + "41a0e8006a41301086818080001a2039204410b280808000200041c0d200" + "6a200841301086818080001a2001204510b28080800020004180d7006a20" + "3a41301086818080001a200041c0db006a410041301085818080001a2000" + "42c18e8ea3d58c88f8183703985c200042d2a1c19ee8addffc033703905c" + "2000429e97eb8de0d783db8e7f3703885c20004295b7949cfdd590b8d800" + "3703805c200042d2cbb6fee1c8c8d5dd003703f85b200042f1e0c7b3c8bc" + "f2814d3703f05b2060200041c0d2006a200041c0db006a10b38080800020" + "35410041301085818080002133200042ba8a92abf1a7dbf2143703e85b20" + "0042e8a0ee96fe89bcf2143703e05b200042a4a0a0f4c7f1c686a27f3703" + "d85b200042acfced84e38c82c4d0003703d05b200042d5cb9694b3cac8f9" + "2a3703c85b200042c38bd5b3c8bcf286897f3703c05b204620004180d700" + "6a200041c0db006a10b38080800020004180ce006a200041c0c9006a41e0" + "001086818080001a2031204710b28080800020004180c5006a2003413010" + "86818080001a2005204810b280808000200041c0c9006a20494130108681" + "8080001a2001204a10b28080800020004180d7006a204b41301086818080" + "001a200041c0db006a410041301085818080001a200042c18e8ea3d58c88" + "f8183703985c200042d2a1c19ee8addffc033703905c2000429e97eb8de0" + "d783db8e7f3703885c20004295b7949cfdd590b8d8003703805c200042d2" + "cbb6fee1c8c8d5dd003703f85b200042f1e0c7b3c8bcf2814d3703f05b20" + "38200041c0c9006a200041c0db006a10b380808000203341004130108581" + "8080002133200042ba8a92abf1a7dbf2143703e85b200042e8a0ee96fe89" + "bcf2143703e05b200042a4a0a0f4c7f1c686a27f3703d85b200042acfced" + "84e38c82c4d0003703d05b200042d5cb9694b3cac8f92a3703c85b200042" + "c38bd5b3c8bcf286897f3703c05b203420004180d7006a200041c0db006a" + "10b380808000200041c0d2006a20004180c5006a41e0001086818080001a" + "200042afff91c4a8fbbb87113703d85720004289bd83adbef9849c2e3703" + "d057200042d0d1a385a497e78d413703c85720004294a7e7acc2baa5a44f" + "3703c057200042ecf9a5e2bf8da8a1d8003703b857200042c6ac97e7d4d5" + "9afbb27f3703b057200042ebcded87fbc188f9083703a857200042cd9cab" + "eda5fde4f11c3703a057200042eed3f096abd9ebada37f37039857200042" + "8fc5dc88cd998ff4977f370390572000429386aaa8abf2d7b44637038857" + "200042e5a8e798abaaa5840737038057203d410041c00110858180800021" + "072032200041c0d2006a20004180d7006a10b480808000200041c0db006a" + "20004180ce006a41a0021086818080001a200041c0c0006a200041c0db00" + "6a41c0041086818080001a200041c0c0006a200041c0376a10bf80808000" + "200041a0e8006a200041c0c0006a10c0808080002032200310b180808000" + "200041c0db006a200041a0e8006a41a0021086818080001a200041c0376a" + "200041c0db006a41c0041086818080001a20004180c5006a200041c0c000" + "6a10c180808000200041c0c9006a20004180c5006a10c080808000200041" + "80ce006a200041c0376a20004180c5006a10be80808000200041c0376a20" + "004180ce006a10c180808000200041b82e6a200041c0376a10c180808000" + "200041c0d2006a200041b82e6a10c180808000200041c0d2006a200041c0" + "c9006a10bf80808000200041c0c9006a200041c0d2006a10c18080800020" + "0320004180ce006a41a0026a10b180808000200041a0e8006a20004180ce" + "006a41a0021086818080001a20004180ce006a200041a0e8006a41c00410" + "86818080001a200041a0e8006a20004180ce006a200041c0c0006a10be80" + "808000200041c0c9006a200041a0e8006a10bf808080002003203710b180" + "808000200041a0e8006a200041c0c0006a41a0021086818080001a200041" + "80ce006a200041a0e8006a41c0041086818080001a200041c0376a200041" + "c0c0006a10bf80808000200041a0e2006a41306a2205205910b280808000" + "200041a0e2006a200041c0376a41301086818080001a2001200041c0376a" + "4190016a10b28080800020004180d7006a200041c0376a41e0006a413010" + "86818080001a2033200041c0376a41f0016a10b280808000200041c0db00" + "6a200041c0376a41c0016a41301086818080001a200041a0e8006a410041" + "301085818080001a200042c18e8ea3d58c88f8183703f868200042d2a1c1" + "9ee8addffc033703f0682000429e97eb8de0d783db8e7f3703e868200042" + "95b7949cfdd590b8d8003703e068200042d2cbb6fee1c8c8d5dd003703d8" + "68200042f1e0c7b3c8bcf2814d3703d068200041c0e4006a41e0006a2237" + "20004180d7006a200041a0e8006a10b38080800020064100413010858180" + "80002106200042ba8a92abf1a7dbf2143703c868200042e8a0ee96fe89bc" + "f2143703c068200042a4a0a0f4c7f1c686a27f3703b868200042acfced84" + "e38c82c4d0003703b068200042d5cb9694b3cac8f92a3703a868200042c3" + "8bd5b3c8bcf286897f3703a068200041c0e4006a41c0016a2235200041c0" + "db006a200041a0e8006a10b380808000200041c0e4006a200041a0e2006a" + "41e0001086818080001a2030200041c0376a41d0026a10b2808080002000" + "4180e0006a206141301086818080001a2005200041c0376a41b0036a10b2" + "80808000200041a0e2006a200041c0376a4180036a41301086818080001a" + "2033200041c0376a4190046a10b280808000200041c0db006a200041c037" + "6a41e0036a41301086818080001a200041a0e8006a410041301085818080" + "001a200042c18e8ea3d58c88f8183703f868200042d2a1c19ee8addffc03" + "3703f0682000429e97eb8de0d783db8e7f3703e86820004295b7949cfdd5" + "90b8d8003703e068200042d2cbb6fee1c8c8d5dd003703d868200042f1e0" + "c7b3c8bcf2814d3703d0682007200041a0e2006a200041a0e8006a10b380" + "808000200641004130108581808000213c200042ba8a92abf1a7dbf21437" + "03c868200042e8a0ee96fe89bcf2143703c068200042a4a0a0f4c7f1c686" + "a27f3703b868200042acfced84e38c82c4d0003703b068200042d5cb9694" + "b3cac8f92a3703a868200042c38bd5b3c8bcf286897f3703a06820042000" + "41c0db006a200041a0e8006a10b38080800020004180d7006a20004180e0" + "006a41e0001086818080001a200042afff91c4a8fbbb87113703985c2000" + "4289bd83adbef9849c2e3703905c200042d0d1a385a497e78d413703885c" + "20004294a7e7acc2baa5a44f3703805c200042ecf9a5e2bf8da8a1d80037" + "03f85b200042c6ac97e7d4d59afbb27f3703f05b200042ebcded87fbc188" + "f9083703e85b200042cd9cabeda5fde4f11c3703e05b200042eed3f096ab" + "d9ebada37f3703d85b2000428fc5dc88cd998ff4977f3703d05b20004293" + "86aaa8abf2d7b4463703c85b200042e5a8e798abaaa584073703c05b2043" + "410041c001108581808000213d200320004180d7006a200041c0db006a10" + "b480808000200041a0e8006a200041c0e4006a41a0021086818080001a20" + "30203c10b28080800020004180e0006a200041a0e8006a41301086818080" + "001a2036204410b280808000200041c0e4006a200841301086818080001a" + "2001204510b28080800020004180d7006a203a41301086818080001a2000" + "41c0db006a410041301085818080001a200042c18e8ea3d58c88f8183703" + "985c200042d2a1c19ee8addffc033703905c2000429e97eb8de0d783db8e" + "7f3703885c20004295b7949cfdd590b8d8003703805c200042d2cbb6fee1" + "c8c8d5dd003703f85b200042f1e0c7b3c8bcf2814d3703f05b200041a0e2" + "006a41e0006a2243200041c0e4006a200041c0db006a10b3808080002033" + "410041301085818080002133200042ba8a92abf1a7dbf2143703e85b2000" + "42e8a0ee96fe89bcf2143703e05b200042a4a0a0f4c7f1c686a27f3703d8" + "5b200042acfced84e38c82c4d0003703d05b200042d5cb9694b3cac8f92a" + "3703c85b200042c38bd5b3c8bcf286897f3703c05b200041a0e2006a41c0" + "016a224620004180d7006a200041c0db006a10b380808000200041a0e200" + "6a20004180e0006a41e0001086818080001a200041c0e7006a41306a2206" + "204710b280808000200041c0e7006a200341301086818080001a20302048" + "10b28080800020004180e0006a204941301086818080001a2001204a10b2" + "8080800020004180d7006a204b41301086818080001a200041c0db006a41" + "0041301085818080001a200042c18e8ea3d58c88f8183703985c200042d2" + "a1c19ee8addffc033703905c2000429e97eb8de0d783db8e7f3703885c20" + "004295b7949cfdd590b8d8003703805c200042d2cbb6fee1c8c8d5dd0037" + "03f85b200042f1e0c7b3c8bcf2814d3703f05b203720004180e0006a2000" + "41c0db006a10b3808080002033410041301085818080002133200042ba8a" + "92abf1a7dbf2143703e85b200042e8a0ee96fe89bcf2143703e05b200042" + "a4a0a0f4c7f1c686a27f3703d85b200042acfced84e38c82c4d0003703d0" + "5b200042d5cb9694b3cac8f92a3703c85b200042c38bd5b3c8bcf286897f" + "3703c05b203520004180d7006a200041c0db006a10b380808000200041c0" + "e4006a200041c0e7006a41e0001086818080001a200042afff91c4a8fbbb" + "87113703d85720004289bd83adbef9849c2e3703d057200042d0d1a385a4" + "97e78d413703c85720004294a7e7acc2baa5a44f3703c057200042ecf9a5" + "e2bf8da8a1d8003703b857200042c6ac97e7d4d59afbb27f3703b0572000" + "42ebcded87fbc188f9083703a857200042cd9cabeda5fde4f11c3703a057" + "200042eed3f096abd9ebada37f370398572000428fc5dc88cd998ff4977f" + "370390572000429386aaa8abf2d7b44637038857200042e5a8e798abaaa5" + "8407370380572007410041c00110858180800021072032200041c0e4006a" + "20004180d7006a10b480808000200041c0db006a200041a0e2006a41a002" + "1086818080001a2006203310b280808000200041c0e7006a200041c0db00" + "6a41301086818080001a2005204c10b280808000200041a0e2006a203d41" + "301086818080001a2036204d10b280808000200041c0e4006a203b413010" + "86818080001a20004180d7006a410041301085818080001a200042c18e8e" + "a3d58c88f8183703d857200042d2a1c19ee8addffc033703d0572000429e" + "97eb8de0d783db8e7f3703c85720004295b7949cfdd590b8d8003703c057" + "200042d2cbb6fee1c8c8d5dd003703b857200042f1e0c7b3c8bcf2814d37" + "03b05720004180e0006a41e0006a200041a0e2006a20004180d7006a10b3" + "808080002001410041301085818080002101200042ba8a92abf1a7dbf214" + "3703a857200042e8a0ee96fe89bcf2143703a057200042a4a0a0f4c7f1c6" + "86a27f37039857200042acfced84e38c82c4d00037039057200042d5cb96" + "94b3cac8f92a37038857200042c38bd5b3c8bcf286897f37038057200041" + "80e0006a41c0016a200041c0e4006a20004180d7006a10b3808080002000" + "4180e0006a200041c0e7006a41e0001086818080001a200041e0e6006a41" + "306a204e10b280808000200041e0e6006a203241301086818080001a2006" + "204f10b280808000200041c0e7006a205041301086818080001a20362051" + "10b280808000200041c0e4006a205241301086818080001a20004180d700" + "6a410041301085818080001a200042c18e8ea3d58c88f8183703d8572000" + "42d2a1c19ee8addffc033703d0572000429e97eb8de0d783db8e7f3703c8" + "5720004295b7949cfdd590b8d8003703c057200042d2cbb6fee1c8c8d5dd" + "003703b857200042f1e0c7b3c8bcf2814d3703b0572043200041c0e7006a" + "20004180d7006a10b3808080002001410041301085818080002101200042" + "ba8a92abf1a7dbf2143703a857200042e8a0ee96fe89bcf2143703a05720" + "0042a4a0a0f4c7f1c686a27f37039857200042acfced84e38c82c4d00037" + "039057200042d5cb9694b3cac8f92a37038857200042c38bd5b3c8bcf286" + "897f370380572046200041c0e4006a20004180d7006a10b3808080002000" + "41a0e2006a200041e0e6006a41e0001086818080001a200042afff91c4a8" + "fbbb87113703986520004289bd83adbef9849c2e37039065200042d0d1a3" + "85a497e78d413703886520004294a7e7acc2baa5a44f37038065200042ec" + "f9a5e2bf8da8a1d8003703f864200042c6ac97e7d4d59afbb27f3703f064" + "200042ebcded87fbc188f9083703e864200042cd9cabeda5fde4f11c3703" + "e064200042eed3f096abd9ebada37f3703d8642000428fc5dc88cd998ff4" + "977f3703d0642000429386aaa8abf2d7b4463703c864200042e5a8e798ab" + "aaa584073703c0642037410041c00110858180800021372053200041a0e2" + "006a200041c0e4006a10b48080800020004180d7006a20004180e0006a41" + "a0021086818080001a200041c0376a20004180d7006a41c0041086818080" + "001a200041c0d2006a20004180ce006a10bf808080002005203910b28080" + "8000200041a0e2006a200041c0d2006a41301086818080001a2001205710" + "b28080800020004180d7006a203841301086818080001a2033205810b280" + "808000200041c0db006a203441301086818080001a200041a0e8006a4100" + "41301085818080001a200042c18e8ea3d58c88f8183703f868200042d2a1" + "c19ee8addffc033703f0682000429e97eb8de0d783db8e7f3703e8682000" + "4295b7949cfdd590b8d8003703e068200042d2cbb6fee1c8c8d5dd003703" + "d868200042f1e0c7b3c8bcf2814d3703d068203720004180d7006a200041" + "a0e8006a10b380808000203c410041301085818080002134200042ba8a92" + "abf1a7dbf2143703c868200042e8a0ee96fe89bcf2143703c068200042a4" + "a0a0f4c7f1c686a27f3703b868200042acfced84e38c82c4d0003703b068" + "200042d5cb9694b3cac8f92a3703a868200042c38bd5b3c8bcf286897f37" + "03a0682035200041c0db006a200041a0e8006a10b380808000200041c0e4" + "006a200041a0e2006a41e0001086818080001a2030205a10b28080800020" + "004180e0006a205641301086818080001a2005205b10b280808000200041" + "a0e2006a205c41301086818080001a2033205d10b280808000200041c0db" + "006a205e41301086818080001a200041a0e8006a41004130108581808000" + "1a200042c18e8ea3d58c88f8183703f868200042d2a1c19ee8addffc0337" + "03f0682000429e97eb8de0d783db8e7f3703e86820004295b7949cfdd590" + "b8d8003703e068200042d2cbb6fee1c8c8d5dd003703d868200042f1e0c7" + "b3c8bcf2814d3703d0682007200041a0e2006a200041a0e8006a10b38080" + "80002034410041301085818080002134200042ba8a92abf1a7dbf2143703" + "c868200042e8a0ee96fe89bcf2143703c068200042a4a0a0f4c7f1c686a2" + "7f3703b868200042acfced84e38c82c4d0003703b068200042d5cb9694b3" + "cac8f92a3703a868200042c38bd5b3c8bcf286897f3703a0682004200041" + "c0db006a200041a0e8006a10b38080800020004180d7006a20004180e000" + "6a41e0001086818080001a200042afff91c4a8fbbb87113703985c200042" + "89bd83adbef9849c2e3703905c200042d0d1a385a497e78d413703885c20" + "004294a7e7acc2baa5a44f3703805c200042ecf9a5e2bf8da8a1d8003703" + "f85b200042c6ac97e7d4d59afbb27f3703f05b200042ebcded87fbc188f9" + "083703e85b200042cd9cabeda5fde4f11c3703e05b200042eed3f096abd9" + "ebada37f3703d85b2000428fc5dc88cd998ff4977f3703d05b2000429386" + "aaa8abf2d7b4463703c85b200042e5a8e798abaaa584073703c05b203d41" + "0041c0011085818080002138200320004180d7006a200041c0db006a10b4" + "80808000200041a0e8006a200041c0e4006a41a0021086818080001a2000" + "41c0d2006a200041a0e8006a41c0041086818080001a20004180c5006a20" + "0041b82e6a10bf808080002005203110b280808000200041a0e2006a2000" + "4180c5006a41301086818080001a200120004180c5006a4190016a10b280" + "80800020004180d7006a205441301086818080001a203320004180c5006a" + "41f0016a10b280808000200041c0db006a205541301086818080001a2000" + "41a0e8006a410041301085818080001a200042c18e8ea3d58c88f8183703" + "f868200042d2a1c19ee8addffc033703f0682000429e97eb8de0d783db8e" + "7f3703e86820004295b7949cfdd590b8d8003703e068200042d2cbb6fee1" + "c8c8d5dd003703d868200042f1e0c7b3c8bcf2814d3703d0682037200041" + "80d7006a200041a0e8006a10b38080800020344100413010858180800021" + "34200042ba8a92abf1a7dbf2143703c868200042e8a0ee96fe89bcf21437" + "03c068200042a4a0a0f4c7f1c686a27f3703b868200042acfced84e38c82" + "c4d0003703b068200042d5cb9694b3cac8f92a3703a868200042c38bd5b3" + "c8bcf286897f3703a0682035200041c0db006a200041a0e8006a10b38080" + "8000200041c0e4006a200041a0e2006a41e0001086818080001a20302000" + "4180c5006a41d0026a10b28080800020004180e0006a20004180c5006a41" + "a0026a41301086818080001a200520004180c5006a41b0036a10b2808080" + "00200041a0e2006a20004180c5006a4180036a41301086818080001a2033" + "20004180c5006a4190046a10b280808000200041c0db006a20004180c500" + "6a41e0036a41301086818080001a200041a0e8006a410041301085818080" + "001a200042c18e8ea3d58c88f8183703f868200042d2a1c19ee8addffc03" + "3703f0682000429e97eb8de0d783db8e7f3703e86820004295b7949cfdd5" + "90b8d8003703e068200042d2cbb6fee1c8c8d5dd003703d868200042f1e0" + "c7b3c8bcf2814d3703d0682007200041a0e2006a200041a0e8006a10b380" + "8080002034410041301085818080002105200042ba8a92abf1a7dbf21437" + "03c868200042e8a0ee96fe89bcf2143703c068200042a4a0a0f4c7f1c686" + "a27f3703b868200042acfced84e38c82c4d0003703b068200042d5cb9694" + "b3cac8f92a3703a868200042c38bd5b3c8bcf286897f3703a06820042000" + "41c0db006a200041a0e8006a10b38080800020004180d7006a20004180e0" + "006a41e0001086818080001a200042afff91c4a8fbbb87113703985c2000" + "4289bd83adbef9849c2e3703905c200042d0d1a385a497e78d413703885c" + "20004294a7e7acc2baa5a44f3703805c200042ecf9a5e2bf8da8a1d80037" + "03f85b200042c6ac97e7d4d59afbb27f3703f05b200042ebcded87fbc188" + "f9083703e85b200042cd9cabeda5fde4f11c3703e05b200042eed3f096ab" + "d9ebada37f3703d85b2000428fc5dc88cd998ff4977f3703d05b20004293" + "86aaa8abf2d7b4463703c85b200042e5a8e798abaaa584073703c05b2038" + "410041c0011085818080001a200320004180d7006a200041c0db006a10b4" + "80808000200041a0e8006a200041c0e4006a41a0021086818080001a2030" + "200510b28080800020004180e0006a200041a0e8006a4130108681808000" + "1a2036204410b280808000200041c0e4006a200841301086818080001a20" + "01204510b28080800020004180d7006a203a41301086818080001a200041" + "c0db006a410041301085818080001a200042c18e8ea3d58c88f818370398" + "5c200042d2a1c19ee8addffc033703905c2000429e97eb8de0d783db8e7f" + "3703885c20004295b7949cfdd590b8d8003703805c200042d2cbb6fee1c8" + "c8d5dd003703f85b200042f1e0c7b3c8bcf2814d3703f05b2043200041c0" + "e4006a200041c0db006a10b3808080002033410041301085818080002104" + "200042ba8a92abf1a7dbf2143703e85b200042e8a0ee96fe89bcf2143703" + "e05b200042a4a0a0f4c7f1c686a27f3703d85b200042acfced84e38c82c4" + "d0003703d05b200042d5cb9694b3cac8f92a3703c85b200042c38bd5b3c8" + "bcf286897f3703c05b204620004180d7006a200041c0db006a10b3808080" + "00200041a0e2006a20004180e0006a41e0001086818080001a2006204710" + "b280808000200041c0e7006a200341301086818080001a2030204810b280" + "80800020004180e0006a204941301086818080001a2001204a10b2808080" + "0020004180d7006a204b41301086818080001a200041c0db006a41004130" + "1085818080001a200042c18e8ea3d58c88f8183703985c200042d2a1c19e" + "e8addffc033703905c2000429e97eb8de0d783db8e7f3703885c20004295" + "b7949cfdd590b8d8003703805c200042d2cbb6fee1c8c8d5dd003703f85b" + "200042f1e0c7b3c8bcf2814d3703f05b203720004180e0006a200041c0db" + "006a10b3808080002004410041301085818080001a200042ba8a92abf1a7" + "dbf2143703e85b200042e8a0ee96fe89bcf2143703e05b200042a4a0a0f4" + "c7f1c686a27f3703d85b200042acfced84e38c82c4d0003703d05b200042" + "d5cb9694b3cac8f92a3703c85b200042c38bd5b3c8bcf286897f3703c05b" + "203520004180d7006a200041c0db006a10b380808000200041c0e4006a20" + "0041c0e7006a41e0001086818080001a200042afff91c4a8fbbb87113703" + "d85720004289bd83adbef9849c2e3703d057200042d0d1a385a497e78d41" + "3703c85720004294a7e7acc2baa5a44f3703c057200042ecf9a5e2bf8da8" + "a1d8003703b857200042c6ac97e7d4d59afbb27f3703b057200042ebcded" + "87fbc188f9083703a857200042cd9cabeda5fde4f11c3703a057200042ee" + "d3f096abd9ebada37f370398572000428fc5dc88cd998ff4977f37039057" + "2000429386aaa8abf2d7b44637038857200042e5a8e798abaaa584073703" + "80572007410041c0011085818080001a2032200041c0e4006a20004180d7" + "006a10b480808000200041c0db006a200041a0e2006a41a0021086818080" + "001a20004180c5006a200041c0db006a41c0041086818080001a20004180" + "c5006a200041c0376a10bf8080800020004180c5006a200041c0d2006a10" + "bf80808000200041f8296a20004180c5006a200041c0c9006a10be808080" + "00200020023a00a068024020024101470d00200041a0e8006a200041f829" + "6a41c0041086818080001a200041f8326a10ac80808000200041a0e8006a" + "200041f8326a10c2808080002008203f10c2808080007110a38080800020" + "3a204010c2808080007110a3808080002003203e10c28080800020492041" + "10c2808080007110a380808000204b204210c2808080007110a380808000" + "7110a380808000210220002802a82520002802ac25108580808000200028" + "029825200028029c25108580808000200028028825200028028c25108580" + "80800020002802f82420002802fc24108580808000202f202e1086808080" + "0020002802c01c20002802c41c10828080800020002802a01520002802a4" + "15108480808000200028028815200028028c1510848080800020002802b4" + "1320002802b81310848080800020002802bc1220002802c0121084808080" + "0020002802e41020002802e810108480808000200028028c0f2000280290" + "0f10848080800020002802940e20002802980e108480808000200028029c" + "0d20002802a00d108480808000200241ff017141004721020c080b200041" + "003602f832200041a0e8006a41c886c08000200041f8326a41cc86c08000" + "109680808000000b200041c0c0006a200041b8256a203610b48080800020" + "004180c5006a200041b8256a203610c380808000200041c0c9006a203610" + "b68080800020004180ce006a200041c0c9006a200041b8256a10c3808080" + "00200041c0d2006a20004180ce006a20004180c5006a10b4808080002000" + "4180d7006a200041c0d2006a200041c0c0006a10b780808000200041c0db" + "006a200041c0c0006a200041c0c0006a10c380808000200041a0e8006a20" + "0041c0c0006a10b680808000200041f8326a20004180d7006a200041a0e8" + "006a10b7808080002005200041c0db006a41a0021086818080001a200041" + "b8256a200041f8326a41c0041086818080001a410121020c000b0b200041" + "80d7006a2030200441e8006c6a10a580808000200041a0026a202e200441" + "05746a2202290300220c42ffffffff6f7e22094200428180808070420010" + "878180800020004190026a2009420042feb7f9ffaf80e9ded30042001087" + "8180800020004180026a200942004285b087cd8081f69c33420010878180" + "8000200041f0016a2009420042c8faf5ccb2eae9f6f30042001087818080" + "00200041e0016a200029039002220e20022903087c220b200041a0026a41" + "086a290300200c20002903a00222097c200954ad7c7c220c42ffffffff6f" + "7e220942004281808080704200108781808000200041d0016a2009420042" + "feb7f9ffaf80e9ded300420010878180800020004180016a200942004285" + "b087cd8081f69c334200108781808000200041306a2009420042c8faf5cc" + "b2eae9f6f3004200108781808000200041c0016a20002903d00122132000" + "29038002221220022903107c220a20004190026a41086a290300200b200e" + "54ad7c200c200b54ad7c7c220d7c220b200041e0016a41086a2903002000" + "2903e0012209200c7c200954ad7c7c220c42ffffffff6f7e220942004281" + "808080704200108781808000200041b0016a2009420042feb7f9ffaf80e9" + "ded3004200108781808000200041a0016a200942004285b087cd8081f69c" + "33420010878180800020004190016a2009420042c8faf5ccb2eae9f6f300" + "4200108781808000200041f0006a20002903b001221020002903f0012211" + "20022903187c220e20004180026a41086a290300200a201254ad7c200d20" + "0a54ad7c7c220a2000290380017c2212200041d0016a41086a290300200b" + "201354ad7c200c200b54ad7c7c22137c220b200041c0016a41086a290300" + "20002903c0012209200c7c200954ad7c7c220c42ffffffff6f7e22094200" + "4281808080704200108781808000200041e0006a2009420042feb7f9ffaf" + "80e9ded3004200108781808000200041d0006a200942004285b087cd8081" + "f69c334200108781808000200041c0006a2009420042c8faf5ccb2eae9f6" + "f3004200108781808000200041a0016a41086a290300210d200041306a41" + "086a290300210f200029039001211720002903502114200041d0006a4108" + "6a2903002115200020002903602216200041f0016a41086a290300200e20" + "1154ad7c200a200e54ad7c221120002903307c220920004180016a41086a" + "2903002012200a54ad7c2013201254ad7c7c220a20002903a0017c220e20" + "0041b0016a41086a290300200b201054ad7c200c200b54ad7c7c22127c22" + "0b200041f0006a41086a29030020002903702213200c7c201354ad7c7c22" + "133703f832200020142017200f2009201154ad7c200a200954ad7c22107c" + "2209200d200e200a54ad7c2012200e54ad7c7c220c7c220a200041e0006a" + "41086a290300200b201654ad7c2013200b54ad7c7c220b37038033200020" + "004190016a41086a2903002009201054ad7c200c200954ad7c220e200029" + "03407c22092015200a200c54ad7c200b200a54ad7c7c220b370388332000" + "200041c0006a41086a2903002009200e54ad7c200b200954ad7c37039033" + "200041a0e8006a200041f8326a10a280808000200020002903b868370398" + "4e200020002903b0683703904e200020002903a8683703884e2000200029" + "03a0683703804e200041c0db006a410041301085818080001a2035410041" + "301085818080001a203441e086c0800041301086818080001a4101210220" + "0041013602e052200041003602d452200041003602c852200020333602c4" + "52200020004180ce006a3602c05203400240024020020d00200041086a20" + "0041c0d2006a10c48080800020002d0009210120002d000821030c010b20" + "0041003602e0520240024020002802c852450d00200041286a2002203210" + "c58080800020002802280d01200028022c21020b024020002802c0522201" + "450d0020002802c45221030340024020032001470d00200020033602c452" + "0c020b2000428080808080013702cc5220002003417f6a22033602c85220" + "0041206a2002203210c580808000024020002802200d0020002802242102" + "0c010b0b200020033602c4520c010b200041003602c852024020002802d4" + "52450d00200041186a2002203110c58080800020002802180d0120002802" + "1c21020b41002103200041003602d45220020d010b200041106a200041c0" + "d2006a10c48080800020002d0011210120002d001021030b024020034101" + "71450d00200041f8326a200041c0db006a10c680808000200041c0db006a" + "200041f8326a4190011086818080001a200041f8326a200041c0db006a20" + "004180d7006a10c780808000200041a0e8006a200041c0db006a200041f8" + "326a200110c880808000200041c0db006a200041a0e8006a419001108681" + "8080001a20002802e05221020c010b0b200041a0e8006a200041c0db006a" + "4190011086818080001a200041f8326a20004180236a200041a0e8006a10" + "c78080800020004180236a200041f8326a4190011086818080001a200441" + "016a21040c000b0b2000420137028433200041013602fc322000419482c0" + "80003602f83220004181808080003602a4682000200041a0e8006a360280" + "33200020004180d7006a3602a068200041c0d2006a41c886c08000200041" + "f8326a419c82c08000109680808000000b200220002802b40641b092c080" + "00108c80808000000b202f202e10868080800020002802c01c20002802c4" + "1c10828080800020002802a01520002802a4151084808080002000280288" + "15200028028c1510848080800020002802b41320002802b8131084808080" + "0020002802bc1220002802c01210848080800020002802e41020002802e8" + "10108480808000200028028c0f20002802900f1084808080002000280294" + "0e20002802980e108480808000200028029c0d20002802a00d1084808080" + "00410021020b200041e0ec006a24808080800020020ba60201087e200020" + "01290300220242ffffffff0f7c2203200254ad427f7c2202200220012903" + "0822047c2202200454ad7c20024282c88680d0ff96a1ac7f7c2204200254" + "ad7c427f7c423f8722022002200129031022057c2202200554ad7c200242" + "fbcff8b2fffe89e34c7c2205200254ad7c427f7c423f8722022002200129" + "031822067c2202200654ad7c200242b8858ab3cd9596898c7f7c22062002" + "54ad7c427f7c220242818080807083220720037c22083703002000200242" + "feb7f9ffaf80e9ded30083220920047c22032008200754ad7c2207370308" + "200020024285b087cd8081f69c3383220820057c22042003200954ad2007" + "200354ad7c7c22033703102000200242c8faf5ccb2eae9f6f3008320067c" + "2004200854ad2003200454ad7c7c3703180b1901017f2380808080004110" + "6b220120003a000f20012d000f0b3601017f23808080800041106b220224" + "8080808000200241013b010c200220013602082002200036020420024104" + "6a10f380808000000b6501017f23808080800041306b2202248080808000" + "200041306a200141306a41301086818080001a200041e0006a41e086c080" + "00200241004130108581808000220220012d006010908080800020002001" + "41301086818080001a200241306a2480808080000b25002000200141f087" + "c0800010df808080002000200110a98080800010d2808080003a00300be7" + "2502017f4c7e23808080800041b0096b2203248080808000200341c0046a" + "200229030022044200200129030022054200108781808000200341d0046a" + "20022903082206420020054200108781808000200341e0046a2002290310" + "2207420020054200108781808000200341f0046a20022903182208420020" + "05420010878180800020034180056a200229032022094200200542001087" + "8180800020034190056a2002290328220a42002005420010878180800020" + "0341a0056a20012903082205420020044200108781808000200341f0056a" + "2005420020064200108781808000200341c0066a20054200200742001087" + "8180800020034190076a2005420020084200108781808000200341e0076a" + "2005420020094200108781808000200341b0086a20054200200a42001087" + "81808000200341b0056a2001290310220542002004420010878180800020" + "034180066a2005420020064200108781808000200341d0066a2005420020" + "074200108781808000200341a0076a200542002008420010878180800020" + "0341f0076a2005420020094200108781808000200341c0086a2005420020" + "0a4200108781808000200341c0056a200129031822054200200442001087" + "8180800020034190066a2005420020064200108781808000200341e0066a" + "2005420020074200108781808000200341b0076a20054200200842001087" + "8180800020034180086a2005420020094200108781808000200341d0086a" + "20054200200a4200108781808000200341d0056a20012903202205420020" + "044200108781808000200341a0066a200542002006420010878180800020" + "0341f0066a2005420020074200108781808000200341c0076a2005420020" + "08420010878180800020034190086a200542002009420010878180800020" + "0341e0086a20054200200a4200108781808000200341e0056a2001290328" + "2205420020044200108781808000200341b0066a20054200200642001087" + "8180800020034180076a2005420020074200108781808000200341d0076a" + "2005420020084200108781808000200341a0086a20054200200942001087" + "81808000200341f0086a20054200200a4200108781808000200341b0046a" + "20032903c004220542fdfff3ffcffffff9897f7e2204420042abd5feffff" + "ffbfffb97f4200108781808000200341a0046a2004420042ffffcf8aebff" + "ffd51e4200108781808000200341b0036a2004420042a4ecc3b58fd4b498" + "e7004200108781808000200341c0026a2004420042bfa5949ccff0d2bbe4" + "004200108781808000200341d0016a2004420042d7d9ae9ae4f6e98dcb00" + "4200108781808000200341e0006a20044200429acdffcba3bdc4801a4200" + "10878180800020034190046a200341b0046a41086a290300200520032903" + "b00422047c200454ad7c220720032903a0047c220520032903a005220820" + "032903d0042209200341c0046a41086a2903007c220a7c220b7c220642fd" + "fff3ffcffffff9897f7e2204420042abd5feffffffbfffb97f4200108781" + "80800020034180046a2004420042ffffcf8aebffffd51e42001087818080" + "00200341f0036a2004420042a4ecc3b58fd4b498e7004200108781808000" + "200341e0036a2004420042bfa5949ccff0d2bbe400420010878180800020" + "0341d0036a2004420042d7d9ae9ae4f6e98dcb0042001087818080002003" + "41c0036a20044200429acdffcba3bdc4801a4200108781808000200341a0" + "036a200341a0046a41086a2903002005200754ad7c2006200554ad7c220c" + "20032903b0037c220520032903f005220d200341d0046a41086a29030020" + "0a200954ad7c220e20032903e0047c220f7c2207200341a0056a41086a29" + "0300200b200854ad7c7c220820032903b0057c22107c2209200329038004" + "7c220a20034190046a41086a290300200329039004220420067c200454ad" + "7c7c220642fdfff3ffcffffff9897f7e2204420042abd5feffffffbfffb9" + "7f420010878180800020034190036a2004420042ffffcf8aebffffd51e42" + "0010878180800020034180036a2004420042a4ecc3b58fd4b498e7004200" + "108781808000200341f0026a2004420042bfa5949ccff0d2bbe400420010" + "8781808000200341e0026a2004420042d7d9ae9ae4f6e98dcb0042001087" + "81808000200341d0026a20044200429acdffcba3bdc4801a420010878180" + "8000200341b0026a20034180046a41086a290300200a200954ad7c200620" + "0a54ad7c221120032903f0037c220a200341b0036a41086a290300200520" + "0c54ad7c2009200554ad7c221220032903c0027c2205200341e0046a4108" + "6a290300200f200e54ad7c220f20032903f0047c220920032903c0067c22" + "0b200341f0056a41086a2903002007200d54ad7c2008200754ad7c7c2207" + "2003290380067c220c200341b0056a41086a2903002010200854ad7c7c22" + "0820032903c0057c22107c22137c220d2003290390037c220e200341a003" + "6a41086a29030020032903a003220420067c200454ad7c7c220642fdfff3" + "ffcffffff9897f7e2204420042abd5feffffffbfffb97f42001087818080" + "00200341a0026a2004420042ffffcf8aebffffd51e420010878180800020" + "034190026a2004420042a4ecc3b58fd4b498e70042001087818080002003" + "4180026a2004420042bfa5949ccff0d2bbe4004200108781808000200341" + "f0016a2004420042d7d9ae9ae4f6e98dcb004200108781808000200341e0" + "016a20044200429acdffcba3bdc4801a4200108781808000200341c0016a" + "20034190036a41086a290300200e200d54ad7c2006200e54ad7c22142003" + "290380037c220e200341f0036a41086a290300200a201154ad7c200d200a" + "54ad7c221520032903e0037c220a200341c0026a41086a29030020052012" + "54ad7c2013200554ad7c221220032903d0017c2205200341f0046a41086a" + "2903002009200f54ad7c22132003290380057c220d2003290390077c220f" + "200341c0066a41086a290300200b200954ad7c2007200b54ad7c7c220920" + "032903d0067c220b20034180066a41086a290300200c200754ad7c200820" + "0c54ad7c7c22072003290390067c220c200341c0056a41086a2903002010" + "200854ad7c7c220820032903d0057c22167c22177c22187c221020032903" + "a0027c2211200341b0026a41086a29030020032903b002220420067c2004" + "54ad7c7c220642fdfff3ffcffffff9897f7e2204420042abd5feffffffbf" + "ffb97f4200108781808000200341b0016a2004420042ffffcf8aebffffd5" + "1e4200108781808000200341a0016a2004420042a4ecc3b58fd4b498e700" + "420010878180800020034190016a2004420042bfa5949ccff0d2bbe40042" + "0010878180800020034180016a2004420042d7d9ae9ae4f6e98dcb004200" + "108781808000200341f0006a20044200429acdffcba3bdc4801a42001087" + "81808000200341d0006a200341a0026a41086a2903002011201054ad7c20" + "06201154ad7c22192003290390027c221120034180036a41086a29030020" + "0e201454ad7c2010200e54ad7c221a20032903f0027c220e200341e0036a" + "41086a290300200a201554ad7c2018200a54ad7c221820032903d0037c22" + "0a200341d0016a41086a2903002005201254ad7c2017200554ad7c221520" + "032903607c220520034180056a41086a290300200d201354ad7c22172003" + "290390057c221020032903e0077c221220034190076a41086a290300200f" + "200d54ad7c2009200f54ad7c7c220d20032903a0077c220f200341d0066a" + "41086a290300200b200954ad7c2007200b54ad7c7c220920032903e0067c" + "220b20034190066a41086a290300200c200754ad7c2008200c54ad7c7c22" + "0720032903a0067c220c200341d0056a41086a2903002016200854ad7c7c" + "220820032903e0057c22167c221b7c221c7c221d7c221320032903b0017c" + "2214200341c0016a41086a29030020032903c001220420067c200454ad7c" + "7c220642fdfff3ffcffffff9897f7e2204420042abd5feffffffbfffb97f" + "4200108781808000200341c0006a2004420042ffffcf8aebffffd51e4200" + "108781808000200341306a2004420042a4ecc3b58fd4b498e70042001087" + "81808000200341206a2004420042bfa5949ccff0d2bbe400420010878180" + "8000200341106a2004420042d7d9ae9ae4f6e98dcb004200108781808000" + "200320044200429acdffcba3bdc4801a4200108781808000200341c0036a" + "41086a290300211e200341b0066a41086a290300211f200341f0066a4108" + "6a2903002120200341b0076a41086a2903002121200341f0076a41086a29" + "03002122200341b0086a41086a290300212320032903c008212420032903" + "8008212520032903c0072126200329038007212720032903d00221282003" + "41d0026a41086a2903002129200341e0026a41086a290300212a20034180" + "076a41086a290300212b200341c0076a41086a290300212c20034180086a" + "41086a290300212d200341c0086a41086a290300212e20032903d008212f" + "200329039008213020032903d007213120032903e0012132200341e0016a" + "41086a290300213320032903f0012134200341f0016a41086a2903002135" + "20034180026a41086a2903002136200341d0076a41086a29030021372003" + "4190086a41086a2903002138200341d0086a41086a290300213920032903" + "e008213a20032903a008213b2003290370213c200341f0006a41086a2903" + "00213d200329038001213e20034180016a41086a290300213f2003290390" + "01214020034190016a41086a2903002141200341a0016a41086a29030021" + "42200341a0086a41086a2903002143200341e0086a41086a290300214420" + "032903f008214520032903002146200341086a2903002147200329031021" + "48200341106a41086a29030021492003290320214a200341206a41086a29" + "0300214b2003290330214c200341306a41086a290300214d200320032903" + "40224e20034190056a41086a2903002010201754ad7c224f20032903b008" + "7c2204200341e0076a41086a2903002012201054ad7c200d201254ad7c7c" + "221020032903f0077c2212200341a0076a41086a290300200f200d54ad7c" + "2009200f54ad7c7c220d20032903b0077c220f200341e0066a41086a2903" + "00200b200954ad7c2007200b54ad7c7c220920032903f0067c220b200341" + "a0066a41086a290300200c200754ad7c2008200c54ad7c7c220720032903" + "b0067c220c200341e0056a41086a2903002016200854ad7c7c2208200341" + "e0006a41086a2903002005201554ad7c201b200554ad7c7c220520032903" + "c0037c2215200341d0036a41086a290300200a201854ad7c201c200a54ad" + "7c7c220a20032903e0027c2216200341f0026a41086a290300200e201a54" + "ad7c201d200e54ad7c7c220e2003290380027c221720034190026a41086a" + "2903002011201954ad7c2013201154ad7c7c221120032903a0017c221820" + "0341b0016a41086a2903002014201354ad7c2006201454ad7c7c22197c22" + "13200341d0006a41086a2903002003290350221420067c201454ad7c7c22" + "1a370380092003204c204020342028202720262025202420232004204f54" + "ad7c2010200454ad7c221b7c220420222012201054ad7c200d201254ad7c" + "7c22067c22102021200f200d54ad7c2009200f54ad7c7c220d7c220f2020" + "200b200954ad7c2007200b54ad7c7c22097c220b201f200c200754ad7c20" + "08200c54ad7c7c22072005200854ad7c2208201e2015200554ad7c200a20" + "1554ad7c7c22057c220c202a2016200a54ad7c200e201654ad7c7c220a7c" + "221220362017200e54ad7c2011201754ad7c7c220e7c2214204220182011" + "54ad7c2019201854ad7c7c22117c2215200341c0006a41086a2903002013" + "204e54ad7c201a201354ad7c7c2213370388092003204a203e2032200820" + "0754ad2005200854ad7c221620312030202f202e2004201b54ad7c200620" + "0454ad7c22177c2204202d2010200654ad7c200d201054ad7c7c22067c22" + "08202c200f200d54ad7c2009200f54ad7c7c220d7c220f202b200b200954" + "ad7c2007200b54ad7c7c22107c22072029200c200554ad7c200a200c54ad" + "7c7c22057c220920352012200a54ad7c200e201254ad7c7c220a7c220b20" + "412014200e54ad7c2011201454ad7c7c220c7c220e204d2015201154ad7c" + "2013201554ad7c7c22113703900920032048203c2007201654ad20052007" + "54ad7c2212203b203a20392004201754ad7c2006200454ad7c22137c2204" + "20382008200654ad7c200d200854ad7c7c22067c22072037200f200d54ad" + "7c2010200f54ad7c7c220d7c220820332009200554ad7c200a200954ad7c" + "7c22057c2209203f200b200a54ad7c200c200b54ad7c7c220a7c220b204b" + "200e200c54ad7c2011200e54ad7c7c220c37039809200320462008201254" + "ad2005200854ad7c2208204520442004201354ad7c2006200454ad7c220e" + "7c220420432007200654ad7c200d200754ad7c7c220d7c2206203d200920" + "0554ad7c200a200954ad7c7c22057c22072049200b200a54ad7c200c200b" + "54ad7c7c22093703a00920032006200854ad2005200654ad7c200341f008" + "6a41086a2903002004200e54ad7c200d200454ad7c7c20472007200554ad" + "7c2009200754ad7c7c3703a809200020034180096a10d680808000200341" + "b0096a2480808080000b3701017f20004100413010858180800021004101" + "10a3808080002101200041306a41e086c0800041301086818080001a2000" + "20013a00600b3a01017f23808080800041306b2201248080808000200020" + "0141004130108581808000220110db808080002100200141306a24808080" + "800020000b42002000200120022003109080808000200041306a20014130" + "6a200241306a2003109080808000200020022d006020012d006022027341" + "0020036b712002733a00600bd80d010b7f23808080800041c0176b220224" + "808080800020012d00c0012103410021042002410010a3808080003a0088" + "03200242f2b7f89e96d4f0950b37038003200242ed95f3a18a8ad68b6737" + "03f802200242bac6f6c9ec89d7a4f9003703f002200242a0d793dfa38deb" + "d6867f3703e802200242dcc3d1d8a2e189d5183703e002200242dde092fb" + "ad92bfe0ad7f3703d802200242e5b583f4e7b1ffc1003703d002200242a2" + "cbbc87dfaeeae9073703c802200242df92b5f096bdedf7bb7f3703c00220" + "0242dac6a9d0caada1f3673703b802200242dab8daf1f5c3bebed9003703" + "b002200242ca98a58286dfc2b9cc003703a802200242f3db839b97c18ac9" + "113703a002200242c78ad690efa1bbdb4237039802200242e7e686aac8d9" + "ad8d1b3703900220024286f099948ec3dfd83b37038802200242c3c1b5e6" + "dbb3b1d0aa7f3703800220024286ec8ff1d98ef0d4a57f3703f801200242" + "d7f9c29aa4b2e4c0053703f001200242ebec8cc3b1ecedb3ef003703e801" + "200242e9ddf2d1d1b3a6ca987f3703e00120024280cbabf1d3f6a4d4a17f" + "3703d8012002429aacd2bde8e4fefab37f3703d0012002429094d094a0f4" + "a3f9753703c80120022001200241c8016a200310d980808000200241c005" + "6a200210e880808000200241c8016a41c400410841a002108e8080800020" + "022802cc0121010240024020022802c8014101460d0020022802d0012105" + "200241c8016a200241c0056a41a0021086818080001a200241c8016a41a0" + "026a200241c8011086818080002106200241003602b805200220053602b4" + "05200220013602b005200241c0056a41c0016a2107200241c0056a41e000" + "6a2108200241c8016a41e0006a2109200241c8046a210a200241c8016a41" + "c0016a2105200241b0056a210b413f2101024003402001417f460d014280" + "8082808080a080e9002001413f71ad88a7210c0240024020044101710d00" + "200c21040c010b41012104200241c8016a10ed80808000200c410171450d" + "00200241e0076a200510ba80808000200241c0086a200a10ba8080800020" + "0241a0096a200241e0076a200610b380808000200241e0166a200a200510" + "bc8080800020024180166a200241e0166a10ba80808000200241a0156a20" + "024180166a200241c0086a10bb8080800020024180166a200241a0156a20" + "0241e0076a10bb80808000200241800a6a20024180166a200241e0076a10" + "b380808000200241e00a6a200241a0096a200241c8016a10bb8080800020" + "0241c00b6a200241e00a6a10ba80808000200241a00c6a200241c00b6a20" + "0241c00b6a10bc80808000200241800d6a200241a00c6a200241a00c6a10" + "bc80808000200241e00d6a200241800d6a200241e00a6a10b38080800020" + "0241e0166a200241800a6a200910bb80808000200241c00e6a200241e016" + "6a200910bb80808000200241a00f6a200241c00e6a200610b38080800020" + "024180106a200241800d6a200241c8016a10b380808000200241e0166a20" + "0241c00e6a10ba8080800020024180166a200241e0166a200241e00d6a10" + "bb80808000200241e0166a20024180166a20024180106a10bb8080800020" + "0241c8016a200241e0166a20024180106a10bb80808000200241e0166a20" + "05200241e00a6a10bc8080800020024180166a200241e0166a10ba808080" + "00200241a0156a20024180166a200241e0076a10bb808080002005200241" + "a0156a200241c00b6a10bb80808000200241e0106a200a200510bc808080" + "00200241e0166a20024180106a200241c8016a10bb80808000200241c011" + "6a200241e0166a200241c00e6a10b380808000200241a0126a2009200241" + "e00d6a10b38080800020024180136a200241a0126a200241a0126a10bc80" + "8080002009200241c0116a20024180136a10bb80808000200241e0166a20" + "0241e0106a10ba80808000200241e0136a200241e0166a200241c0086a10" + "bb80808000200241c0146a200510ba80808000200241a0156a200241e013" + "6a200241c0146a10bb80808000200241e0166a200241a00f6a200241a00f" + "6a10bc8080800020024180166a200241e0166a200241a0156a10bb808080" + "00200241c0056a2005200510bc80808000200241e0166a200241c00e6a10" + "e2808080002008200241e0166a200241e0166a10bc808080002007200241" + "80166a41e0001086818080001a200b200241c0056a41bc8cc0800010ee80" + "8080000b2001417f6a21010c000b0b200241c8016a10ed80808000200220" + "022802b80522013602e016200141c400470d01200020033a000c2000200b" + "290200370200200041086a200b41086a280200360200200241c0176a2480" + "808080000f0b200120022802d00141888cc08000108c80808000000b2002" + "41003602c005200241e0166a200241c0056a10ef80808000000b8e010101" + "7f2380808080004180036b2201248080808000200141a0026a41306a4100" + "41301085818080001a200141a0026a41e086c0800041301086818080001a" + "2001200141a0026a41e000108681808000220141e0006a410041c0011085" + "818080001a200041a0026a410041a0021085818080001a2000200141a002" + "1086818080001a20014180036a2480808080000bd70301157f2380808080" + "0041c00d6b2203248080808000200241e0036a210420024180036a210520" + "0241a0026a2106200241c0016a2107200241e0006a210820012802044103" + "742109200341c0046a41a0026a210a200341a00b6a41c0016a210b200341" + "a00b6a41e0006a210c200341e0036a210d20034180036a210e200341a002" + "6a210f20034180096a41c0016a211020034180096a41e0006a2111200341" + "c0016a2112200341e0006a21132001280200211420012802082115034002" + "4020090d002001201541016a3602082000200241c0041086818080001a20" + "0341c00d6a2480808080000f0b201428020422162d000c20142802002d00" + "607210a380808000211720032002201641046a280200201641086a280200" + "201541cc8cc0800010ae80808000201428020010af808080002003418009" + "6a20032002201710b080808000201120132008201710b080808000201020" + "122007201710b080808000200341a00b6a200f2006201710b08080800020" + "0c200e2005201710b080808000200b200d2004201710b080808000200341" + "c0046a20034180096a41a0021086818080001a200a200341a00b6a41a002" + "1086818080001a2002200341c0046a41c0041086818080001a200941786a" + "2109201441086a21140c000b0b22000240200120024b0d00200220012003" + "10f080808000000b2000200241a0026c6a0bd60301027f23808080800041" + "e00f6b22042480808080002004200241e000108681808000220441e0006a" + "200241e0006a41e0001086818080001a2004200341306a220510dd808080" + "00200441306a200510dd80808000200441e0006a200310dd808080002004" + "41e0006a41306a200310dd80808000200441c0016a2001200241c0016a22" + "02200441e0006a10e980808000200441c00d6a200141e0036a200410b380" + "808000200441a00b6a200441c00d6a200441c00d6a41306a220310b88080" + "8000200441a00b6a41306a200441c00d6a200310b980808000200441e003" + "6a41e0006a200141a0026a2203200410b380808000200441e0036a41c001" + "6a20014180036a200410b380808000200441e0036a200441a00b6a41e000" + "1086818080001a20044180066a200441e0006a200410bc80808000200441" + "e0066a2003200110c38080800020044180096a200441e0066a2002200441" + "80066a10e980808000200441c00d6a20044180096a200441c0016a10b780" + "808000200441a00b6a200441c00d6a200441e0036a10b780808000200441" + "c00d6a200441e0036a10b6808080002000200441c00d6a200441c0016a10" + "c380808000200041a0026a200441a00b6a41a0021086818080001a200441" + "e00f6a2480808080000b2700200020012002200310908080800020004130" + "6a200141306a200241306a20031090808080000b30002000200110e28080" + "8000200041e0006a200141e0006a10e280808000200041c0016a200141c0" + "016a10e2808080000bbd0201097e2000420042002001290300220242abd5" + "feffffffbfffb97f56ad7d2203200129030822047d220542ffffcf8aebff" + "ffd51e7c2206200420028420012903102207842001290318220884200129" + "03202209842001290328220a845022011b3703082000420042abd5feffff" + "ffbfffb97f20027d20011b3703002000420020032003200454ad7d200620" + "0554ad7c423f87220220077d220342a4ecc3b58fd4b498e7007c22042001" + "1b3703102000420020022002200754ad7d2004200354ad7c423f87220220" + "087d220342bfa5949ccff0d2bbe4007c220420011b370318200042002002" + "2002200854ad7d2004200354ad7c423f87220220097d220342d7d9ae9ae4" + "f6e98dcb007c220420011b3703202000420020022002200954ad7d200420" + "0354ad7c423f87200a7d429acdffcba3bdc4801a7c20011b3703280bc701" + "01057f23808080800041c0016b2203248080808000200341306a22042001" + "41306a220510b280808000200320014130108681808000220341e0006a41" + "306a200241306a220641301086818080002107200341e0006a2002413010" + "86818080001a20002003200341e0006a10e1808080002004200541301086" + "818080001a200320014130108681808000220341e0006a20064130108681" + "8080001a2007200241301086818080001a200041306a2003200341e0006a" + "10e180808000200341c0016a2480808080000bcd0b01167f238080808000" + "41a0086b22032480808080002003200241e0006a220420024190016a2205" + "10b980808000200341306a2004200510b880808000200341e0006a200241" + "c0016a2206200241f0016a220710b98080800020034190016a2006200710" + "b880808000200341e0036a41306a2208200141306a220910b28080800020" + "0341e0036a41e0006a200141e0006a220a4130108681808000210b200341" + "e0036a4190016a220c20014190016a220d10b280808000200341e0036a41" + "c0016a200141c0016a220e4130108681808000210f200341e0036a41f001" + "6a2210200141f0016a221110b280808000200341e0036a20014130108681" + "8080001a20034180066a41306a200241306a221241301086818080002113" + "20034180066a200241301086818080001a20034180066a41e0006a200341" + "90016a4130108681808000211420034180066a4190016a200341e0006a41" + "30108681808000211520034180066a41c0016a200341306a413010868180" + "8000211620034180066a41f0016a200341301086818080002117200341c0" + "016a200341e0036a20034180066a10ea8080800020082009413010868180" + "80002108200b200a41301086818080002118200c200d4130108681808000" + "210b200f200e4130108681808000210f201020114130108681808000210c" + "200341e0036a200141301086818080001a20034180066a20124130108681" + "8080001a20132002413010868180800021102014200341e0006a41301086" + "818080002113201520034190016a41301086818080002114201620034130" + "10868180800021152017200341306a41301086818080002116200341c001" + "6a41306a200341e0036a20034180066a10ea808080002008200910b28080" + "80002018200a41301086818080002117200b200d10b280808000200f200e" + "4130108681808000210f200c201110b280808000200341e0036a20014130" + "1086818080001a20034180066a200441301086818080001a201020054130" + "108681808000211020142012413010868180800021142013200241301086" + "818080002113201520034190016a413010868180800021152016200341e0" + "006a41301086818080002116200341a0026a200341e0036a20034180066a" + "10ea8080800020082009413010868180800021082017200a413010868180" + "80002117200b200d4130108681808000210b200f200e4130108681808000" + "210f200c20114130108681808000210c200341e0036a2001413010868180" + "80001a20034180066a200541301086818080001a20102004413010868180" + "800021102013201241301086818080002113201420024130108681808000" + "21142015200341e0006a41301086818080002115201620034190016a4130" + "1086818080002116200341a0026a41306a200341e0036a20034180066a10" + "ea808080002008200910b2808080002017200a4130108681808000211720" + "0b200d10b280808000200f200e4130108681808000210f200c201110b280" + "808000200341e0036a200141301086818080001a20034180066a20064130" + "1086818080001a2010200741301086818080002110201320044130108681" + "808000211320142005413010868180800021142016201241301086818080" + "002116201520024130108681808000211520034180036a200341e0036a20" + "034180066a10ea808080002008200941301086818080001a2017200a4130" + "1086818080001a200b200d41301086818080001a200f200e413010868180" + "80001a200c201141301086818080001a200341e0036a2001413010868180" + "80001a20034180066a200741301086818080001a20102006413010868180" + "80001a2013200541301086818080001a2014200441301086818080001a20" + "15201241301086818080001a2016200241301086818080001a2003418003" + "6a41306a200341e0036a20034180066a10ea808080002000200341c0016a" + "41e000108681808000220241e0006a200341a0026a41e000108681808000" + "1a200241c0016a20034180036a41e0001086818080001a200341a0086a24" + "80808080000bb30301027f23808080800041e0066b220224808080800020" + "02200110ba80808000200241e0006a2001200141e0006a220310b3808080" + "00200241c0016a200241e0006a200241e0006a10bc808080002002418006" + "6a2001200310bb80808000200241a0056a20024180066a200141c0016a22" + "0110bc80808000200241a0026a200241a0056a10ba808080002002418003" + "6a2003200110b380808000200241e0036a20024180036a20024180036a10" + "bc80808000200241c0046a200110ba8080800020024180066a200241e003" + "6a200241e0036a41306a220110b88080800020024180066a41306a220320" + "0241e0036a200110b980808000200020024180066a200210bc8080800020" + "024180066a200241c0046a200241c0046a41306a220110b8808080002003" + "200241c0046a200110b980808000200041e0006a20024180066a200241c0" + "016a10bc8080800020024180066a200241c0016a200241a0026a10bc8080" + "8000200241a0056a20024180066a200241e0036a10bc8080800020024180" + "066a200241a0056a200210bb80808000200041c0016a20024180066a2002" + "41c0046a10bb80808000200241e0066a2480808080000b7c01037f238080" + "80800041e0006b22022480808080002002200141c0016a2203200141f001" + "6a220410b880808000200241306a2003200410b980808000200041c0016a" + "200141e0006a41e0001086818080001a2000200241e00010868180800041" + "e0006a200141e0001086818080001a200241e0006a2480808080000b3e00" + "20002001200210bb80808000200041e0006a200141e0006a200241e0006a" + "10bb80808000200041c0016a200141c0016a200241c0016a10bb80808000" + "0b3601017f23808080800041306b22032480808080002003200210b28080" + "800020002003200110b980808000200341306a2480808080000b87020201" + "7f0c7e23808080800041306b220324808080800020012903082104200229" + "030821052002290328210620012903282107200229032021082001290320" + "21092002290318210a2001290318210b2002290310210c2001290310210d" + "20032002290300220e20012903007c220f3703002003200520047c220420" + "0f200e54ad7c220e3703082003200c200d7c220d2004200554ad200e2004" + "54ad7c7c22043703102003200a200b7c2205200d200c54ad2004200d54ad" + "7c7c22043703182003200820097c220c2005200a54ad2004200554ad7c7c" + "22053703202003200620077c200c200854ad2005200c54ad7c7c37032820" + "00200310d680808000200341306a2480808080000b7401027f2380808080" + "004190016b220224808080800020022001200141306a220310b980808000" + "200241306a2001200310b880808000200241e0006a2001200110b9808080" + "0020002002200241306a10a780808000200041306a200241e0006a200310" + "a78080800020024190016a2480808080000b230020002001200210b88080" + "8000200041306a200141306a200241306a10b8808080000b230020002001" + "200210b980808000200041306a200141306a200241306a10b9808080000b" + "c71f02017f3b7e23808080800041c0076b2202248080808000200241c004" + "6a200129030822034200200129030022044200108781808000200241d004" + "6a20012903102205420020044200108781808000200241e0046a20012903" + "182206420020044200108781808000200241f0046a200129032022074200" + "2004420010878180800020024180056a2001290328220842002004420010" + "8781808000200241a0056a2005420020034200108781808000200241b005" + "6a2006420020034200108781808000200241c0056a200742002003420010" + "8781808000200241d0056a2008420020034200108781808000200241f005" + "6a200642002005420010878180800020024180066a200742002005420010" + "878180800020024190066a2008420020054200108781808000200241b006" + "6a2007420020064200108781808000200241c0066a200842002006420010" + "8781808000200241e0066a20084200200742001087818080002002419005" + "6a2004420020044200108781808000200241e0056a200342002003420010" + "8781808000200241a0066a2005420020054200108781808000200241d006" + "6a2006420020064200108781808000200241f0066a200742002007420010" + "878180800020024180076a2008420020084200108781808000200241b004" + "6a200229039005220642fdfff3ffcffffff9897f7e2203420042abd5feff" + "ffffbfffb97f4200108781808000200241a0046a2003420042ffffcf8aeb" + "ffffd51e420010878180800020024190046a2003420042a4ecc3b58fd4b4" + "98e700420010878180800020024180046a2003420042bfa5949ccff0d2bb" + "e4004200108781808000200241f0036a2003420042d7d9ae9ae4f6e98dcb" + "004200108781808000200241e0036a20034200429acdffcba3bdc4801a42" + "00108781808000200241d0036a20024190056a41086a2903002209200229" + "03c00422084201867c220420022903a0047c2205200241b0046a41086a29" + "030020022903b00422032006427d837c200354ad7c7c220642fdfff3ffcf" + "fffff9897f7e2203420042abd5feffffffbfffb97f420010878180800020" + "0241c0036a2003420042ffffcf8aebffffd51e4200108781808000200241" + "d0026a2003420042a4ecc3b58fd4b498e7004200108781808000200241e0" + "016a2003420042bfa5949ccff0d2bbe4004200108781808000200241f000" + "6a2003420042d7d9ae9ae4f6e98dcb004200108781808000200220034200" + "429acdffcba3bdc4801a4200108781808000200241b0036a20022903c003" + "220a20022903e005220b20022903d004220c200241c0046a41086a290300" + "7c22074201862008423f88847c22082004200954ad7c2209200229039004" + "7c220d200241a0046a41086a2903002005200454ad7c2006200554ad7c7c" + "220e7c2204200241d0036a41086a29030020022903d003220320067c2003" + "54ad7c7c220542fdfff3ffcffffff9897f7e2203420042abd5feffffffbf" + "ffb97f4200108781808000200241a0036a2003420042ffffcf8aebffffd5" + "1e420010878180800020024190036a2003420042a4ecc3b58fd4b498e700" + "420010878180800020024180036a2003420042bfa5949ccff0d2bbe40042" + "00108781808000200241f0026a2003420042d7d9ae9ae4f6e98dcb004200" + "108781808000200241e0026a20034200429acdffcba3bdc4801a42001087" + "81808000200241c0026a20022903a003220f200241e0056a41086a290300" + "2008200b54ad7c2009200854ad7c2210200241d0046a41086a2903002007" + "200c54ad7c220c20022903e0047c220620022903a0057c22084201862007" + "423f88847c22072002290380047c220b20024190046a41086a290300200d" + "200954ad7c200e200d54ad7c7c220920022903d0027c220d200241c0036a" + "41086a2903002004200a54ad7c2005200454ad7c7c220a7c2204200241b0" + "036a41086a29030020022903b003220320057c200354ad7c7c220542fdff" + "f3ffcffffff9897f7e2203420042abd5feffffffbfffb97f420010878180" + "8000200241b0026a2003420042ffffcf8aebffffd51e4200108781808000" + "200241a0026a2003420042a4ecc3b58fd4b498e700420010878180800020" + "024190026a2003420042bfa5949ccff0d2bbe40042001087818080002002" + "4180026a2003420042d7d9ae9ae4f6e98dcb004200108781808000200241" + "f0016a20034200429acdffcba3bdc4801a4200108781808000200241d001" + "6a20022903b0022211200241d0026a41086a290300200d200954ad7c200a" + "200d54ad7c221220022903e0017c220d20024180046a41086a290300200b" + "200754ad7c2009200b54ad7c221320022903f0037c22092007201054ad22" + "0e20022903a0067c2207200241e0046a41086a2903002006200c54ad7c22" + "1020022903f0047c220b20022903b0057c220a200241a0056a41086a2903" + "002008200654ad7c7c22064201862008423f88847c22147c22157c220820" + "02290390037c220c200241a0036a41086a2903002004200f54ad7c200520" + "0454ad7c7c22167c2204200241c0026a41086a29030020022903c0022203" + "20057c200354ad7c7c220542fdfff3ffcffffff9897f7e2203420042abd5" + "feffffffbfffb97f4200108781808000200241c0016a2003420042ffffcf" + "8aebffffd51e4200108781808000200241b0016a2003420042a4ecc3b58f" + "d4b498e7004200108781808000200241a0016a2003420042bfa5949ccff0" + "d2bbe400420010878180800020024190016a2003420042d7d9ae9ae4f6e9" + "8dcb00420010878180800020024180016a20034200429acdffcba3bdc480" + "1a4200108781808000200241e0006a20022903c0012217200241a0066a41" + "086a2903002007200e54ad7c2014200754ad7c2214200241f0046a41086a" + "290300200b201054ad7c22182002290380057c220720022903c0057c220e" + "200241b0056a41086a290300200a200b54ad7c2006200a54ad7c7c220b20" + "022903f0057c220a4201862006423f88847c220620022903e0037c220f20" + "0241f0036a41086a2903002009201354ad7c2015200954ad7c7c22092002" + "2903707c2210200241e0016a41086a290300200d201254ad7c2008200d54" + "ad7c7c220d2002290380037c221220024190036a41086a290300200c2008" + "54ad7c2016200c54ad7c7c220820022903a0027c220c200241b0026a4108" + "6a2903002004201154ad7c2005200454ad7c7c22157c2204200241d0016a" + "41086a29030020022903d001220320057c200354ad7c7c220542fdfff3ff" + "cffffff9897f7e2203420042abd5feffffffbfffb97f4200108781808000" + "200241d0006a2003420042ffffcf8aebffffd51e42001087818080002002" + "41c0006a2003420042a4ecc3b58fd4b498e7004200108781808000200241" + "306a2003420042bfa5949ccff0d2bbe4004200108781808000200241206a" + "2003420042d7d9ae9ae4f6e98dcb004200108781808000200241106a2003" + "4200429acdffcba3bdc4801a4200108781808000200241086a2903002116" + "200241d0066a41086a290300211920024180066a41086a290300211a2002" + "41d0056a41086a290300211b200229039006211c20022903b006211d2002" + "2903e002211e200241e0026a41086a290300211f200241f0026a41086a29" + "03002120200241b0066a41086a290300212120024190066a41086a290300" + "212220022903c006212320022903f006210320022903f0012124200241f0" + "016a41086a2903002125200229038002212620024180026a41086a290300" + "212720024190026a41086a2903002128200241c0066a41086a2903002129" + "20022903e006212a200241f0066a41086a290300212b200229038001212c" + "20024180016a41086a290300212d200229039001212e20024190016a4108" + "6a290300212f20022903a0012130200241a0016a41086a29030021312002" + "41b0016a41086a2903002132200241e0066a41086a290300213320022903" + "8007211120022903102134200241106a41086a2903002135200229032021" + "36200241206a41086a290300213720022903302138200241306a41086a29" + "030021392002290340213a200241c0006a41086a290300213b2002200229" + "0350223c2006201454ad223d20022903d0067c221320024180056a41086a" + "2903002007201854ad7c221820022903d0057c2214200241c0056a41086a" + "290300200e200754ad7c200b200e54ad7c7c22072002290380067c220e20" + "0241f0056a41086a290300200a200b54ad7c7c220b420186200a423f8884" + "7c220a200241e0036a41086a290300200f200654ad7c2009200f54ad7c7c" + "220620022903007c220f200241f0006a41086a2903002010200954ad7c20" + "0d201054ad7c7c220920022903f0027c221020024180036a41086a290300" + "2012200d54ad7c2008201254ad7c7c220d2002290390027c2212200241a0" + "026a41086a290300200c200854ad7c2015200c54ad7c7c220820022903b0" + "017c220c200241c0016a41086a2903002004201754ad7c2005200454ad7c" + "7c22157c2204200241e0006a41086a2903002002290360221720057c2017" + "54ad7c7c2217370390072002203a20302026201e20192013203d54ad7c20" + "0a201354ad7c2213201d201c201b2014201854ad7c2007201454ad7c2214" + "7c2205201a200e200754ad7c200b200e54ad7c7c22077c220e420186200b" + "423f88847c220b2006200a54ad7c220a2016200f200654ad7c2009200f54" + "ad7c7c22067c220f20202010200954ad7c200d201054ad7c7c22097c2210" + "20282012200d54ad7c2008201254ad7c7c220d7c22122032200c200854ad" + "7c2015200c54ad7c7c22087c220c200241d0006a41086a2903002004203c" + "54ad7c2017200454ad7c7c22153703980720022038202e2024200a200b54" + "ad2006200a54ad7c22162003202320222005201454ad7c2007200554ad7c" + "22147c22042021200e200754ad7c7c2205420186200e423f88847c220720" + "0b201354ad7c22137c220b201f200f200654ad7c2009200f54ad7c7c2206" + "7c220a20272010200954ad7c200d201054ad7c7c22097c220e2031201220" + "0d54ad7c2008201254ad7c7c220d7c220f203b200c200854ad7c2015200c" + "54ad7c7c220c3703a00720022036202c200b201654ad2006200b54ad7c22" + "0b202b2007200354ad7c2013200754ad7c2210202a20292004201454ad7c" + "2005200454ad7c22127c22034201862005423f88847c22137c2204202520" + "0a200654ad7c2009200a54ad7c7c22057c2206202f200e200954ad7c200d" + "200e54ad7c7c22077c22082039200f200d54ad7c200c200f54ad7c7c2209" + "3703a807200220342004200b54ad2005200454ad7c220d20112033200320" + "1254ad7c220b4201862003423f88847c22032013201054ad7c220a7c2204" + "202d2006200554ad7c2007200654ad7c7c22057c220620372008200754ad" + "7c2009200854ad7c7c22073703b00720022004200d54ad2005200454ad7c" + "200b423f8820024180076a41086a2903002003201154ad7c200a200354ad" + "7c7c7c20352006200554ad7c2007200654ad7c7c3703b807200020024190" + "076a10d680808000200241c0076a2480808080000be60101037f23808080" + "80004180126b220324808080800020032001200210b480808000200341a0" + "026a200141a0026a2204200241a0026a220510b480808000200341c0046a" + "2002200510c380808000200341e0066a2004200110c38080800020034180" + "096a200341e0066a200341c0046a10b480808000200341a00b6a20034180" + "096a200310b780808000200341c00d6a200341a00b6a200341a0026a10b7" + "80808000200341e00f6a200341a0026a10b6808080002000200341e00f6a" + "200310c380808000200041a0026a200341c00d6a41a0021086818080001a" + "20034180126a2480808080000b3c01017f23808080800041c0046b220224" + "808080800020022000200110be808080002000200241c004108681808000" + "1a200241c0046a2480808080000bd80701077f23808080800041c00d6b22" + "022480808080002002200141e000108681808000220241e0006a200141e0" + "006a220341e0001086818080001a200241c0016a200141c0016a220441e0" + "001086818080001a200241a0026a200141a0026a220541e0001086818080" + "001a20024180036a20014180036a220641e0001086818080001a200241e0" + "036a200141e0036a220741e0001086818080001a200241a00b6a20012006" + "10eb80808000200241c0046a200241a00b6a41e0001086818080001a2002" + "41a0056a200241a00b6a41e0006a220841e0001086818080001a20022002" + "41c0046a200110bb80808000200241a00b6a2002200210bc808080002002" + "200241a00b6a200241c0046a10bc8080800020024180036a200241a0056a" + "200610bc80808000200241a00b6a20024180036a20024180036a10bc8080" + "800020024180036a200241a00b6a200241a0056a10bc80808000200241a0" + "0b6a2005200410eb8080800020024180066a200241a00b6a41e000108681" + "8080001a200241e0066a200841e0001086818080001a200241a00b6a2003" + "200710eb80808000200241c0076a200241a00b6a41e0001086818080001a" + "200241a0086a200841e0001086818080001a200241e0006a20024180066a" + "200310bb80808000200241a00b6a200241e0006a200241e0006a10bc8080" + "8000200241e0006a200241a00b6a20024180066a10bc80808000200241e0" + "036a200241e0066a200710bc80808000200241a00b6a200241e0036a2002" + "41e0036a10bc80808000200241e0036a200241a00b6a200241e0066a10bc" + "80808000200241a00b6a200241a0086a200241a0086a41306a220110b880" + "808000200241a00b6a41306a200241a0086a200110b98080800020024180" + "066a200241a00b6a41e0001086818080001a200241a0026a20024180066a" + "200510bc80808000200241a00b6a200241a0026a200241a0026a10bc8080" + "8000200241a0026a200241a00b6a20024180066a10bc80808000200241c0" + "016a200241c0076a200410bb80808000200241a00b6a200241c0016a2002" + "41c0016a10bc80808000200241c0016a200241a00b6a200241c0076a10bc" + "8080800020024180096a200241e0001086818080001a20024180096a41e0" + "006a200241e0006a41e0001086818080001a20024180096a41c0016a2002" + "41c0016a41e0001086818080001a200241a00b6a200241a0026a41e00010" + "86818080001a200820024180036a41e0001086818080001a200241a00b6a" + "41c0016a200241e0036a41e0001086818080001a200020024180096a41a0" + "0210868180800041a0026a200241a00b6a41a0021086818080001a200241" + "c00d6a2480808080000bcd0102037f017e2380808080004180096b220224" + "8080808000200210ac8080800041002103413f2104034002400240024020" + "04417f460d0042012004413f71ad8642808084808080c080528321052003" + "4101710d01200542005221030c020b200041a0026a200241a0026a10b180" + "8080002000200241a0021086818080001a20024180096a2480808080000f" + "0b200241c0046a200210c0808080002002200241c0046a41c00410868180" + "80001a410121030b02402005500d002002200110bf808080000b2004417f" + "6a21040c000b0b23002000200110db80808000200041306a200141306a10" + "db808080007110a3808080000b3e0020002001200210bc80808000200041" + "e0006a200141e0006a200241e0006a10bc80808000200041c0016a200141" + "c0016a200241c0016a10bc808080000bbc0101047f23808080800041106b" + "2202248080808000200141086a21030340200241086a200310e680808000" + "02400240024020022d0008450d0020022d00092101410121040c010b0240" + "20012802002204450d00200420012802042205470d020b2002200141146a" + "10e68080800020022d0001210120022d000021040b200020013a00012000" + "20044101713a0000200241106a2480808080000f0b200142808080808001" + "37020c20012005417f6a2204360208200120043602040c000b0b6f01057f" + "23808080800041106b220324808080800041002104410121054100210602" + "400340200120062207460d01200341086a200210d080808000200741016a" + "210620032d00080d000b200120076b2104410021050b2000200436020420" + "002005360200200341106a2480808080000bf50401037f23808080800041" + "b0096b22022480808080002002200141306a220310bd8080800020024130" + "6a2002200210b980808000200241e0006a200241306a200241306a10b980" + "80800020024190016a200241e0006a200241e0006a10b980808000200241" + "c0016a2003200141e0006a220410a780808000200241f0016a200410bd80" + "808000200241d0086a200241f0016a200241f0016a10b980808000200241" + "80096a200241d0086a200241d0086a10b980808000200241c0076a200241" + "80096a20024180096a10b980808000200241a0026a200241c0076a200241" + "80096a10b980808000200241d0026a200241a0026a20024190016a10a780" + "80800020024180036a2002200241a0026a10b980808000200241b0036a20" + "0241c0016a20024190016a10a780808000200241e0036a200241a0026a20" + "0241a0026a10b98080800020024190046a200241e0036a200241a0026a10" + "b980808000200241c0046a200220024190046a10b880808000200241f004" + "6a200241c0046a20024180036a10a780808000200241a0056a200241d002" + "6a200241f0046a10b980808000200241d0056a2001200310a78080800020" + "024180066a200241c0046a200241d0056a10a780808000200241b0066a20" + "024180066a20024180066a10b980808000200241b0066a41306a200241a0" + "056a41301086818080001a200241b0066a41e0006a200241b0036a413010" + "86818080001a200241c0076a410041301085818080001a200241c0076a41" + "e0006a410041301085818080001a200241c0076a41306a41e086c0800041" + "301086818080001a2000200241b0066a200241c0076a200410a980808000" + "10c880808000200241b0096a2480808080000bf60601057f238080808000" + "41900d6b220324808080800020032001200210a780808000200341306a20" + "0141306a2204200241306a220510a780808000200341e0006a200141e000" + "6a2206200241e0006a220710a78080800020034190016a2001200410b980" + "808000200341c0016a2002200510b980808000200341f0016a2003419001" + "6a200341c0016a10a780808000200341a0026a2003200341306a10b98080" + "8000200341d0026a200341f0016a200341a0026a10b88080800020034180" + "036a2004200610b980808000200341b0036a2005200710b9808080002003" + "41e0036a20034180036a200341b0036a10a78080800020034190046a2003" + "41306a200341e0006a10b980808000200341c0046a200341e0036a200341" + "90046a10b880808000200341f0046a2001200610b980808000200341a005" + "6a2002200710b980808000200341d0056a200341f0046a200341a0056a10" + "a78080800020034180066a2003200341e0006a10b980808000200341b006" + "6a200341d0056a20034180066a10b880808000200341e0066a2003200310" + "b98080800020034190076a200341e0066a200310b980808000200341800c" + "6a200341e0006a200341e0006a10b980808000200341b00c6a200341800c" + "6a200341800c6a10b980808000200341e00c6a200341b00c6a200341b00c" + "6a10b980808000200341c0076a200341e00c6a200341b00c6a10b9808080" + "00200341f0076a200341306a200341c0076a10b980808000200341a0086a" + "200341306a200341c0076a10b880808000200341a00b6a200341b0066a20" + "0341b0066a10b980808000200341d00b6a200341a00b6a200341a00b6a10" + "b980808000200341e00c6a200341d00b6a200341d00b6a10b98080800020" + "0341d0086a200341e00c6a200341d00b6a10b98080800020034180096a20" + "0341c0046a200341d0086a10a780808000200341b0096a200341d0026a20" + "0341a0086a10a7808080002000200341b0096a20034180096a10b8808080" + "00200341e0096a200341d0086a20034190076a10a780808000200341900a" + "6a200341a0086a200341f0076a10a780808000200041306a200341900a6a" + "200341e0096a10b980808000200341c00a6a20034190076a200341d0026a" + "10a780808000200341f00a6a200341f0076a200341c0046a10a780808000" + "200041e0006a200341f00a6a200341c00a6a10b980808000200341900d6a" + "2480808080000b41002000200120022003109080808000200041306a2001" + "41306a200241306a2003109080808000200041e0006a200141e0006a2002" + "41e0006a20031090808080000bbe0601057f200041786a22012000417c6a" + "280200220241787122006a21030240024020024101710d00200241027145" + "0d012001280200220220006a21000240200120026b2201410028029c97c0" + "8000470d0020032802044103714103470d014100200036029497c0800020" + "032003280204417e7136020420012000410172360204200320003602000f" + "0b2001200210cc808080000b024002400240024002400240200328020422" + "024102710d00200341002802a097c08000460d022003410028029c97c080" + "00460d0320032002417871220210cc808080002001200220006a22004101" + "72360204200120006a20003602002001410028029c97c08000470d014100" + "200036029497c080000f0b20032002417e71360204200120004101723602" + "04200120006a20003602000b2000418002490d0220012000108481808000" + "41002101410041002802b497c08000417f6a22003602b497c0800020000d" + "04024041002802fc94c080002200450d00410021010340200141016a2101" + "200028020822000d000b0b4100200141ff1f200141ff1f4b1b3602b497c0" + "80000f0b410020013602a097c080004100410028029897c0800020006a22" + "0036029897c080002001200041017236020402402001410028029c97c080" + "00470d004100410036029497c080004100410036029c97c080000b200041" + "002802ac97c0800022044d0d0341002802a097c080002200450d03410021" + "02410028029897c0800022054129490d0241f494c0800021010340024020" + "01280200220320004b0d002000200320012802046a490d040b2001280208" + "21010c000b0b4100200136029c97c080004100410028029497c080002000" + "6a220036029497c0800020012000410172360204200120006a2000360200" + "0f0b200041f80171418495c080006a210302400240410028028c97c08000" + "220241012000410376742200710d004100200220007236028c97c0800020" + "0321000c010b200328020821000b200320013602082000200136020c2001" + "200336020c200120003602080f0b024041002802fc94c080002201450d00" + "410021020340200241016a2102200128020822010d000b0b4100200241ff" + "1f200241ff1f4b1b3602b497c08000200520044d0d004100417f3602ac97" + "c080000b0b4d01017f23808080800041206b220224808080800020024100" + "36021020024101360204200242043702082002412e36021c200220003602" + "182002200241186a3602002002200110a480808000000b800601057f0240" + "024002402000417c6a220328020022044178712205410441082004410371" + "22061b20016a490d0002402006450d002005200141276a4b0d020b411020" + "02410b6a4178712002410b491b210102400240024020060d002001418002" + "490d0120052001410472490d01200520016b418180084f0d010c020b2000" + "41786a220720056a21060240024002400240200520014f0d002006410028" + "02a097c08000460d032006410028029c97c08000460d0220062802042204" + "4102710d042004417871220420056a22052001490d042006200410cc8080" + "8000200520016b22024110490d0120032001200328020041017172410272" + "360200200720016a22012002410372360204200720056a22052005280204" + "4101723602042001200210cd8080800020000f0b200520016b2202410f4d" + "0d0420032001200441017172410272360200200720016a22052002410372" + "360204200620062802044101723602042005200210cd8080800020000f0b" + "20032005200328020041017172410272360200200720056a220220022802" + "0441017236020420000f0b410028029497c0800020056a22052001490d01" + "02400240200520016b2202410f4b0d002003200441017120057241027236" + "0200200720056a2202200228020441017236020441002102410021010c01" + "0b20032001200441017172410272360200200720016a2201200241017236" + "0204200720056a2205200236020020052005280204417e713602040b4100" + "200136029c97c080004100200236029497c0800020000f0b410028029897" + "c0800020056a220520014b0d040b0240200210ce8080800022050d004100" + "0f0b20052000417c4178200328020022014103711b20014178716a220120" + "0220012002491b1086818080002102200010c980808000200221000b2000" + "0f0b41e992c08000419893c0800010ca80808000000b41a893c0800041d8" + "93c0800010ca80808000000b200320012004410171724102723602002007" + "20016a2202200520016b22054101723602044100200536029897c0800041" + "0020023602a097c0800020000b820301047f200028020c21020240024002" + "402001418002490d002000280218210302400240024020022000470d0020" + "0041144110200028021422021b6a28020022010d01410021020c020b2000" + "2802082201200236020c200220013602080c010b200041146a200041106a" + "20021b21040340200421052001220241146a200241106a20022802142201" + "1b210420024114411020011b6a28020022010d000b200541003602000b20" + "03450d020240200028021c41027441f493c080006a22012802002000460d" + "0020034110411420032802102000461b6a20023602002002450d030c020b" + "2001200236020020020d014100410028029097c08000417e200028021c77" + "7136029097c080000c020b0240200220002802082204460d002004200236" + "020c200220043602080f0b4100410028028c97c08000417e200141037677" + "7136028c97c080000f0b20022003360218024020002802102201450d0020" + "022001360210200120023602180b20002802142201450d00200220013602" + "14200120023602180f0b0ba00401027f200020016a210202400240200028" + "020422034101710d002003410271450d012000280200220320016a210102" + "40200020036b2200410028029c97c08000470d0020022802044103714103" + "470d014100200136029497c0800020022002280204417e71360204200020" + "01410172360204200220013602000c020b2000200310cc808080000b0240" + "024002400240200228020422034102710d00200241002802a097c0800046" + "0d022002410028029c97c08000460d0320022003417871220310cc808080" + "002000200320016a2201410172360204200020016a200136020020004100" + "28029c97c08000470d014100200136029497c080000f0b20022003417e71" + "36020420002001410172360204200020016a20013602000b024020014180" + "02490d00200020011084818080000f0b200141f80171418495c080006a21" + "0202400240410028028c97c08000220341012001410376742201710d0041" + "00200320017236028c97c08000200221010c010b200228020821010b2002" + "20003602082001200036020c2000200236020c200020013602080f0b4100" + "20003602a097c080004100410028029897c0800020016a220136029897c0" + "8000200020014101723602042000410028029c97c08000470d0141004100" + "36029497c080004100410036029c97c080000f0b4100200036029c97c080" + "004100410028029497c0800020016a220136029497c08000200020014101" + "72360204200020016a20013602000f0b0bc12502087f017e024002400240" + "02400240024002400240200041f4014b0d00410028028c97c08000220141" + "102000410b6a41f803712000410b491b220241037622037622004103710d" + "012002410028029497c080004d0d0720000d02410028029097c080002200" + "0d030c070b2000410b6a22034178712102410028029097c080002204450d" + "06411f21050240200041f4ffff074b0d002002410620034108766722006b" + "7641017120004101746b413e6a21050b410020026b210302402005410274" + "41f493c080006a28020022010d0041002100410021060c040b4100210020" + "024100411920054101766b2005411f461b74210741002106034002402001" + "220128020441787122082002490d00200820026b220820034f0d00200821" + "032001210620080d004100210320012106200121000c060b200128021422" + "082000200820012007411d764104716a41106a2802002201471b20002008" + "1b2100200741017421072001450d040c000b0b024002402000417f734101" + "7120036a22074103742200418495c080006a22022000418c95c080006a28" + "020022032802082206460d002006200236020c200220063602080c010b41" + "002001417e2007777136028c97c080000b20032000410372360204200320" + "006a22002000280204410172360204200341086a0f0b0240024020002003" + "7441022003742200410020006b72716822084103742203418495c080006a" + "22062003418c95c080006a28020022002802082207460d00200720063602" + "0c200620073602080c010b41002001417e2008777136028c97c080000b20" + "002002410372360204200020026a2207200320026b220241017236020420" + "0020036a20023602000240410028029497c080002201450d002001417871" + "418495c080006a2106410028029c97c08000210302400240410028028c97" + "c08000220841012001410376742201710d004100200820017236028c97c0" + "8000200621010c010b200628020821010b20062003360208200120033602" + "0c2003200636020c200320013602080b4100200736029c97c08000410020" + "0236029497c08000200041086a0f0b20006841027441f493c080006a2802" + "00220628020441787120026b210320062101024002400340024020062802" + "1022000d00200628021422000d0020012802182105024002400240200128" + "020c22002001470d00200141144110200128021422001b6a28020022060d" + "01410021000c020b20012802082206200036020c200020063602080c010b" + "200141146a200141106a20001b21070340200721082006220041146a2000" + "41106a200028021422061b210720004114411020061b6a28020022060d00" + "0b200841003602000b2005450d030240200128021c41027441f493c08000" + "6a22062802002001460d0020054110411420052802102001461b6a200036" + "02002000450d040c030b2006200036020020000d024100410028029097c0" + "8000417e200128021c777136029097c080000c030b200028020441787120" + "026b22062003200620034922061b21032000200120061b2101200021060c" + "000b0b20002005360218024020012802102206450d002000200636021020" + "0620003602180b20012802142206450d0020002006360214200620003602" + "180b02400240024020034110490d0020012002410372360204200120026a" + "22022003410172360204200220036a2003360200410028029497c0800022" + "07450d012007417871418495c080006a2106410028029c97c08000210002" + "400240410028028c97c08000220841012007410376742207710d00410020" + "0820077236028c97c08000200621070c010b200628020821070b20062000" + "3602082007200036020c2000200636020c200020073602080c010b200120" + "0320026a2200410372360204200120006a22002000280204410172360204" + "0c010b4100200236029c97c080004100200336029497c080000b20014108" + "6a0f0b024020002006720d004100210641022005742200410020006b7220" + "04712200450d0320006841027441f493c080006a28020021000b2000450d" + "010b0340200020062000280204417871220120026b220820034922051b21" + "04200120024921072008200320051b21080240200028021022010d002000" + "28021421010b2006200420071b21062003200820071b2103200121002001" + "0d000b0b2006450d000240410028029497c0800022002002490d00200320" + "0020026b4f0d010b20062802182105024002400240200628020c22002006" + "470d00200641144110200628021422001b6a28020022010d01410021000c" + "020b20062802082201200036020c200020013602080c010b200641146a20" + "0641106a20001b21070340200721082001220041146a200041106a200028" + "021422011b210720004114411020011b6a28020022010d000b2008410036" + "02000b02402005450d0002400240200628021c41027441f493c080006a22" + "012802002006460d0020054110411420052802102006461b6a2000360200" + "2000450d020c010b2001200036020020000d004100410028029097c08000" + "417e200628021c777136029097c080000c010b2000200536021802402006" + "2802102201450d0020002001360210200120003602180b20062802142201" + "450d0020002001360214200120003602180b0240024020034110490d0020" + "062002410372360204200620026a22002003410172360204200020036a20" + "0336020002402003418002490d00200020031084818080000c020b200341" + "f80171418495c080006a210202400240410028028c97c080002201410120" + "03410376742203710d004100200120037236028c97c08000200221030c01" + "0b200228020821030b200220003602082003200036020c2000200236020c" + "200020033602080c010b2006200320026a2200410372360204200620006a" + "220020002802044101723602040b200641086a0f0b024002400240024002" + "4002400240410028029497c08000220020024f0d000240410028029897c0" + "8000220020024b0d0041002100200241af80046a22064110764000220341" + "7f4622070d0720034110742201450d07410041002802a497c08000410020" + "064180807c7120071b22086a22003602a497c08000410041002802a897c0" + "800022032000200320004b1b3602a897c0800002400240024041002802a0" + "97c080002203450d0041f494c08000210003402000280200220620002802" + "0422076a2001460d02200028020822000d000c030b0b0240024041002802" + "b097c080002200450d00200020014d0d010b410020013602b097c080000b" + "410041ff1f3602b497c08000410020083602f894c08000410020013602f4" + "94c080004100418495c0800036029095c080004100418c95c08000360298" + "95c080004100418495c0800036028c95c080004100419495c080003602a0" + "95c080004100418c95c0800036029495c080004100419c95c080003602a8" + "95c080004100419495c0800036029c95c08000410041a495c080003602b0" + "95c080004100419c95c080003602a495c08000410041ac95c080003602b8" + "95c08000410041a495c080003602ac95c08000410041b495c080003602c0" + "95c08000410041ac95c080003602b495c08000410041bc95c080003602c8" + "95c08000410041b495c080003602bc95c080004100410036028095c08000" + "410041c495c080003602d095c08000410041bc95c080003602c495c08000" + "410041c495c080003602cc95c08000410041cc95c080003602d895c08000" + "410041cc95c080003602d495c08000410041d495c080003602e095c08000" + "410041d495c080003602dc95c08000410041dc95c080003602e895c08000" + "410041dc95c080003602e495c08000410041e495c080003602f095c08000" + "410041e495c080003602ec95c08000410041ec95c080003602f895c08000" + "410041ec95c080003602f495c08000410041f495c0800036028096c08000" + "410041f495c080003602fc95c08000410041fc95c0800036028896c08000" + "410041fc95c0800036028496c080004100418496c0800036029096c08000" + "4100418c96c0800036029896c080004100418496c0800036028c96c08000" + "4100419496c080003602a096c080004100418c96c0800036029496c08000" + "4100419c96c080003602a896c080004100419496c0800036029c96c08000" + "410041a496c080003602b096c080004100419c96c080003602a496c08000" + "410041ac96c080003602b896c08000410041a496c080003602ac96c08000" + "410041b496c080003602c096c08000410041ac96c080003602b496c08000" + "410041bc96c080003602c896c08000410041b496c080003602bc96c08000" + "410041c496c080003602d096c08000410041bc96c080003602c496c08000" + "410041cc96c080003602d896c08000410041c496c080003602cc96c08000" + "410041d496c080003602e096c08000410041cc96c080003602d496c08000" + "410041dc96c080003602e896c08000410041d496c080003602dc96c08000" + "410041e496c080003602f096c08000410041dc96c080003602e496c08000" + "410041ec96c080003602f896c08000410041e496c080003602ec96c08000" + "410041f496c0800036028097c08000410041ec96c080003602f496c08000" + "410041fc96c0800036028897c08000410041f496c080003602fc96c08000" + "410020013602a097c08000410041fc96c0800036028497c0800041002008" + "41586a220036029897c0800020012000410172360204200120006a412836" + "0204410041808080013602ac97c080000c080b200320014f0d0020062003" + "4b0d00200028020c450d030b410041002802b097c0800022002001200020" + "01491b3602b097c08000200120086a210641f494c0800021000240024002" + "400340200028020022072006460d01200028020822000d000c020b0b2000" + "28020c450d010b41f494c080002100024003400240200028020022062003" + "4b0d002003200620002802046a2206490d020b200028020821000c000b0b" + "410020013602a097c080004100200841586a220036029897c08000200120" + "00410172360204200120006a4128360204410041808080013602ac97c080" + "002003200641606a41787141786a22002000200341106a491b2207411b36" + "020441002902f494c080002109200741106a41002902fc94c08000370200" + "20072009370208410020083602f894c08000410020013602f494c0800041" + "00200741086a3602fc94c080004100410036028095c080002007411c6a21" + "00034020004107360200200041046a22002006490d000b20072003460d07" + "20072007280204417e713602042003200720036b22004101723602042007" + "200036020002402000418002490d00200320001084818080000c080b2000" + "41f80171418495c080006a210602400240410028028c97c0800022014101" + "2000410376742200710d004100200120007236028c97c08000200621000c" + "010b200628020821000b200620033602082000200336020c200320063602" + "0c200320003602080c070b200020013602002000200028020420086a3602" + "04200120024103723602042007410f6a41787141786a2206200120026a22" + "006b2103200641002802a097c08000460d032006410028029c97c0800046" + "0d040240200628020422024103714101470d0020062002417871220210cc" + "80808000200220036a2103200620026a220628020421020b20062002417e" + "7136020420002003410172360204200020036a2003360200024020034180" + "02490d00200020031084818080000c060b200341f80171418495c080006a" + "210202400240410028028c97c08000220641012003410376742203710d00" + "4100200620037236028c97c08000200221030c010b200228020821030b20" + "0220003602082003200036020c2000200236020c200020033602080c050b" + "4100200020026b220336029897c08000410041002802a097c08000220020" + "026a22063602a097c0800020062003410172360204200020024103723602" + "04200041086a21000c060b410028029c97c0800021030240024020002002" + "6b2206410f4b0d004100410036029c97c080004100410036029497c08000" + "20032000410372360204200320006a220020002802044101723602040c01" + "0b4100200636029497c080004100200320026a220136029c97c080002001" + "2006410172360204200320006a2006360200200320024103723602040b20" + "0341086a0f0b2000200720086a360204410041002802a097c08000220041" + "0f6a417871220341786a22063602a097c080004100200020036b41002802" + "9897c0800020086a22036a41086a220136029897c0800020062001410172" + "360204200020036a4128360204410041808080013602ac97c080000c030b" + "410020003602a097c080004100410028029897c0800020036a2203360298" + "97c08000200020034101723602040c010b4100200036029c97c080004100" + "410028029497c0800020036a220336029497c08000200020034101723602" + "04200020036a20033602000b200141086a0f0b41002100410028029897c0" + "8000220320024d0d004100200320026b220336029897c080004100410028" + "02a097c08000220020026a22063602a097c0800020062003410172360204" + "20002002410372360204200041086a0f0b20000b4301017f238080808000" + "41206b2201248080808000200141003602182001410136020c200141d085" + "c0800036020820014204370210200141086a200010a480808000000b4e01" + "037f024020012802042202200128020822034e0d0020012003417f6a2204" + "36020820012802002d000020044107717641017110a38080800021040b20" + "0020043a0001200020022003483a00000b18002001200085220042002000" + "7d84427f5510a3808080000b10002000417f7341017110a3808080000bf2" + "0202017f017e23808080800041f0006b2206248080808000200620013602" + "0c2006200036020820062003360214200620023602102006410236021c20" + "0641c08dc08000360218024020042802000d002006410336025c200641f4" + "8dc08000360258200642033702642006418280808000ad42208622072006" + "41106aad8437034820062007200641086aad843703402006418380808000" + "ad422086200641186aad843703382006200641386a360260200641d8006a" + "200510a480808000000b200641206a41106a200441106a29020037030020" + "0641206a41086a200441086a290200370300200620042902003703202006" + "410436025c200641a88ec080003602582006420437026420064182808080" + "00ad4220862207200641106aad8437035020062007200641086aad843703" + "482006418480808000ad422086200641206aad8437034020064183808080" + "00ad422086200641186aad843703382006200641386a360260200641d800" + "6a200510a480808000000bb30301037f2380808080004180016b22022480" + "8080800020002802002100024002400240200128021422034110710d0020" + "03412071450d0120002d0000210341810121000340200220006a417e6a20" + "03410f712204413072200441376a2004410a491b3a0000200341ff017122" + "0441047621032000417f6a21002004410f4b0d000b200141fd8ec0800041" + "02200220006a417f6a41810120006b10d58080800021000c020b20002d00" + "00210341810121000340200220006a417e6a2003410f7122044130722004" + "41d7006a2004410a491b3a0000200341ff0171220441047621032000417f" + "6a21002004410f4b0d000b200141fd8ec080004102200220006a417f6a41" + "810120006b10d58080800021000c010b024002400240024020002d000022" + "0341e400490d002002200341e4006e2204419c7f6c20036a41ff01714101" + "7441ff8ec080006a2f00003b0001410021000c010b410221002003410a4f" + "0d01200321040b200220006a20044130723a00000c010b41012100200220" + "0341017441ff8ec080006a2f00003b00010b200141014100200220006a20" + "0041037310d58080800021000b20024180016a24808080800020000bb605" + "01087f20002802142205410171220620046a21070240024020054104710d" + "00410021010c010b0240024020020d00410021080c010b02402002410371" + "22090d000c010b410021082001210a03402008200a2c000041bf7f4a6a21" + "08200a41016a210a2009417f6a22090d000b0b200820076a21070b412b41" + "8080c40020061b2106024020002802000d000240200028021c220a200028" + "0220220820062001200210f480808000450d0041010f0b200a2003200420" + "0828020c11808080800080808080000f0b02400240024002402000280204" + "220a20074b0d00200028021c220a2000280220220820062001200210f480" + "808000450d0141010f0b2005410871450d01200028021021052000413036" + "021020002d0018210b4101210c200041013a0018200028021c2208200028" + "0220220920062001200210f4808080000d02200a20076b41016a210a0240" + "0340200a417f6a220a450d01200841302009280210118180808000808080" + "8000450d000b41010f0b0240200820032004200928020c11808080800080" + "80808000450d0041010f0b2000200b3a00182000200536021041000f0b20" + "0a20032004200828020c1180808080008080808000210c0c010b200a2007" + "6b2105024002400240410120002d0018220a200a4103461b220a0e030200" + "01020b2005210a410021050c010b2005410176210a200541016a41017621" + "050b200a41016a210a2000280210210720002802202108200028021c2109" + "02400340200a417f6a220a450d0120092007200828021011818080800080" + "80808000450d000b41010f0b4101210c2009200820062001200210f48080" + "80000d00200920032004200828020c11808080800080808080000d004100" + "210a034002402005200a470d0020052005490f0b200a41016a210a200920" + "0720082802101181808080008080808000450d000b200a417f6a2005490f" + "0b200c0be802010d7e2000200129032822022001290300220342d5aa8180" + "8080c080c6007c2204200354ad427f7c22052005200129030822067c2205" + "200654ad7c2005428180b0f5948080aa617c2207200554ad7c427f7c423f" + "8722052005200129031022087c2205200854ad7c200542dc93bccaf0abcb" + "e7987f7c2209200554ad7c427f7c423f87220520052001290318220a7c22" + "05200a54ad7c200542c1daebe3b08fadc49b7f7c220b200554ad7c427f7c" + "423f87220520052001290320220c7c2205200c54ad7c200542a9a6d1e59b" + "8996f2b47f7c220d200554ad7c427f7c423f872205200220057c22052002" + "54ad7c200542e6b280b4dcc2bbff657c220e200554ad7c2205427f7c2202" + "83420020057d2205200e83843703282000200c2002832005200d83843703" + "202000200a2002832005200b838437031820002008200283200520098384" + "370310200020062002832005200783843703082000200320028320052004" + "83843703000b2c0002402002450d0041002d00e893c080001a200210ce80" + "80800021010b20002002360204200020013602000b5a01017f2380808080" + "0041106b2202248080808000200241086a20002000280200410141a00210" + "8b80808000024020022802082200418180808078460d002000200228020c" + "2001108c80808000000b200241106a2480808080000b4800200020012002" + "200310b080808000200041e0006a200141e0006a200241e0006a200310b0" + "80808000200020022d00c00120012d00c001220273410020036b71200273" + "3a00c0010b2b00200020012002200310b080808000200020022d00602001" + "2d0060220273410020036b712002733a00600b8501002000290300200129" + "030010d1808080002000290308200129030810d1808080007110a3808080" + "002000290310200129031010d1808080007110a380808000200029031820" + "0129031810d1808080007110a3808080002000290320200129032010d180" + "8080007110a3808080002000290328200129032810d1808080007110a380" + "8080000bda0602017f067e23808080800041306b22022480808080002002" + "2001290000220342388620034280fe0383422886842003428080fc078342" + "1886200342808080f80f834208868484200342088842808080f80f832003" + "421888428080fc07838420034228884280fe038320034238888484842204" + "37032820022001290008220342388620034280fe03834228868420034280" + "80fc0783421886200342808080f80f834208868484200342088842808080" + "f80f832003421888428080fc07838420034228884280fe03832003423888" + "848484220537032020022001290010220342388620034280fe0383422886" + "842003428080fc0783421886200342808080f80f83420886848420034208" + "8842808080f80f832003421888428080fc07838420034228884280fe0383" + "2003423888848484220637031820022001290018220342388620034280fe" + "0383422886842003428080fc0783421886200342808080f80f8342088684" + "84200342088842808080f80f832003421888428080fc0783842003422888" + "4280fe038320034238888484842207370310200220012900202203423886" + "20034280fe0383422886842003428080fc0783421886200342808080f80f" + "834208868484200342088842808080f80f832003421888428080fc078384" + "20034228884280fe03832003423888848484220837030820022001290028" + "220342388620034280fe0383422886842003428080fc0783421886200342" + "808080f80f834208868484200342088842808080f80f8320034218884280" + "80fc07838420034228884280fe0383200342388884848422033703002002" + "419087c0800010dd80808000200342d5aa81808080c080c6007c200354ad" + "427f7c2203200820037c2203200854ad7c2003428180b0f5948080aa617c" + "200354ad7c427f7c423f872203200720037c2203200754ad7c200342dc93" + "bccaf0abcbe7987f7c200354ad7c427f7c423f872203200620037c220320" + "0654ad7c200342c1daebe3b08fadc49b7f7c200354ad7c427f7c423f8722" + "03200520037c2203200554ad7c200342a9a6d1e59b8996f2b47f7c200354" + "ad7c427f7c423f872203200420037c2203200454ad7c200342e6b280b4dc" + "c2bbff657c200354ad7ca741016a41017110a38080800021012000200241" + "3010868180800020013a0030200241306a2480808080000b3901017f2380" + "8080800041306b220224808080800020022000200110a780808000200020" + "0241301086818080001a200241306a2480808080000b9b1602017f177e23" + "808080800041a0056b2201248080808000200141b0046a20002903002202" + "42fdfff3ffcffffff9897f7e2203420042abd5feffffffbfffb97f420010" + "8781808000200141a0046a2003420042ffffcf8aebffffd51e4200108781" + "80800020014190046a2003420042a4ecc3b58fd4b498e700420010878180" + "800020014180046a2003420042bfa5949ccff0d2bbe40042001087818080" + "00200141f0036a2003420042d7d9ae9ae4f6e98dcb004200108781808000" + "200141e0036a20034200429acdffcba3bdc4801a42001087818080002001" + "41d0036a20012903a004220420002903087c2205200141b0046a41086a29" + "0300200220012903b00422037c200354ad7c7c220242fdfff3ffcffffff9" + "897f7e2203420042abd5feffffffbfffb97f4200108781808000200141c0" + "036a2003420042ffffcf8aebffffd51e4200108781808000200141d0026a" + "2003420042a4ecc3b58fd4b498e7004200108781808000200141e0016a20" + "03420042bfa5949ccff0d2bbe4004200108781808000200141f0006a2003" + "420042d7d9ae9ae4f6e98dcb004200108781808000200120034200429acd" + "ffcba3bdc4801a4200108781808000200141b0036a20012903c003220620" + "0129039004220720002903107c2208200141a0046a41086a290300200520" + "0454ad7c2002200554ad7c7c22097c2205200141d0036a41086a29030020" + "012903d003220320027c200354ad7c7c220242fdfff3ffcffffff9897f7e" + "2203420042abd5feffffffbfffb97f4200108781808000200141a0036a20" + "03420042ffffcf8aebffffd51e420010878180800020014190036a200342" + "0042a4ecc3b58fd4b498e700420010878180800020014180036a20034200" + "42bfa5949ccff0d2bbe4004200108781808000200141f0026a2003420042" + "d7d9ae9ae4f6e98dcb004200108781808000200141e0026a20034200429a" + "cdffcba3bdc4801a4200108781808000200141c0026a20012903a003220a" + "200129038004220b20002903187c220420014190046a41086a2903002008" + "200754ad7c2009200854ad7c7c220820012903d0027c2207200141c0036a" + "41086a2903002005200654ad7c2002200554ad7c7c220c7c2205200141b0" + "036a41086a29030020012903b003220320027c200354ad7c7c220242fdff" + "f3ffcffffff9897f7e2203420042abd5feffffffbfffb97f420010878180" + "8000200141b0026a2003420042ffffcf8aebffffd51e4200108781808000" + "200141a0026a2003420042a4ecc3b58fd4b498e700420010878180800020" + "014190026a2003420042bfa5949ccff0d2bbe40042001087818080002001" + "4180026a2003420042d7d9ae9ae4f6e98dcb004200108781808000200141" + "f0016a20034200429acdffcba3bdc4801a4200108781808000200141d001" + "6a20012903b002220d20012903f003220e20002903207c22062001418004" + "6a41086a2903002004200b54ad7c2008200454ad7c7c220420012903e001" + "7c2209200141d0026a41086a2903002007200854ad7c200c200754ad7c7c" + "22082001290390037c2207200141a0036a41086a2903002005200a54ad7c" + "2002200554ad7c7c220c7c2205200141c0026a41086a29030020012903c0" + "02220320027c200354ad7c7c220242fdfff3ffcffffff9897f7e22034200" + "42abd5feffffffbfffb97f4200108781808000200141c0016a2003420042" + "ffffcf8aebffffd51e4200108781808000200141b0016a2003420042a4ec" + "c3b58fd4b498e7004200108781808000200141a0016a2003420042bfa594" + "9ccff0d2bbe400420010878180800020014190016a2003420042d7d9ae9a" + "e4f6e98dcb00420010878180800020014180016a20034200429acdffcba3" + "bdc4801a4200108781808000200141e0006a20012903c001220f20012903" + "e003221020002903287c220a200141f0036a41086a2903002006200e54ad" + "7c2004200654ad7c7c220620012903707c220b200141e0016a41086a2903" + "002009200454ad7c2008200954ad7c7c22042001290380037c2209200141" + "90036a41086a2903002007200854ad7c200c200754ad7c7c220820012903" + "a0027c2207200141b0026a41086a2903002005200d54ad7c2002200554ad" + "7c7c220c7c2205200141d0016a41086a29030020012903d001220320027c" + "200354ad7c7c220242fdfff3ffcffffff9897f7e2203420042abd5feffff" + "ffbfffb97f4200108781808000200141d0006a2003420042ffffcf8aebff" + "ffd51e4200108781808000200141c0006a2003420042a4ecc3b58fd4b498" + "e7004200108781808000200141306a2003420042bfa5949ccff0d2bbe400" + "4200108781808000200141206a2003420042d7d9ae9ae4f6e98dcb004200" + "108781808000200141106a20034200429acdffcba3bdc4801a4200108781" + "808000200141b0016a41086a290300210d20014190026a41086a29030021" + "0e200141f0026a41086a2903002111200141086a290300211220012903e0" + "022113200129038002211420012903a001211520012903402116200141c0" + "006a41086a2903002117200120012903502218200141e0036a41086a2903" + "00200a201054ad7c2006200a54ad7c221020012903007c2203200141f000" + "6a41086a290300200b200654ad7c2004200b54ad7c7c220620012903f002" + "7c220a20014180036a41086a2903002009200454ad7c2008200954ad7c7c" + "22042001290390027c2209200141a0026a41086a2903002007200854ad7c" + "200c200754ad7c7c220820012903b0017c2207200141c0016a41086a2903" + "002005200f54ad7c2002200554ad7c7c220b7c2205200141e0006a41086a" + "2903002001290360220c20027c200c54ad7c7c220c3703f0042001201620" + "152014201320122003201054ad7c2006200354ad7c220f7c22032011200a" + "200654ad7c2004200a54ad7c7c22027c2206200e2009200454ad7c200820" + "0954ad7c7c22047c2209200d2007200854ad7c200b200754ad7c7c22087c" + "2207200141d0006a41086a2903002005201854ad7c200c200554ad7c7c22" + "0a3703f8042001200141e0026a41086a2903002003200f54ad7c20022003" + "54ad7c220b20012903f0017c220320014180026a41086a29030020062002" + "54ad7c2004200654ad7c7c22052001290390017c2202200141a0016a4108" + "6a2903002009200454ad7c2008200954ad7c7c220420012903307c220620" + "172007200854ad7c200a200754ad7c7c2208370380052001200141f0016a" + "41086a2903002003200b54ad7c2005200354ad7c22072001290380017c22" + "0320014190016a41086a2903002002200554ad7c2004200254ad7c7c2205" + "20012903207c2202200141306a41086a2903002006200454ad7c20082006" + "54ad7c7c220837038805200120014180016a41086a2903002003200754ad" + "7c2005200354ad7c220420012903107c2203200141206a41086a29030020" + "02200554ad7c2008200254ad7c7c2205370390052001200141106a41086a" + "2903002003200454ad7c2005200354ad7c37039805200141c0046a200141" + "f0046a10d68080800020012903c004220342aad580808080a080237c2003" + "54ad427f7c2203200320012903c80422057c2203200554ad7c2003428180" + "d8ba8a8080d5707c200354ad7c427f7c423f872203200320012903d00422" + "057c2203200554ad7c200342ee899ea5f8d5e5b3cc007c200354ad7c427f" + "7c423f872203200320012903d80422057c2203200554ad7c200342a1edf5" + "b1d8c796e2cd007c200354ad7c427f7c423f872203200320012903e00422" + "057c2203200554ad7c20034295d3e8f2cd848bb95a7c200354ad7c427f7c" + "423f872203200320012903e80422057c2203200554ad7c200342b399809a" + "aee1ddff727c200354ad7ca741016a41017110a38080800010d280808000" + "2100200141a0056a24808080800020000bb60103037f017e017f23808080" + "800041e0006b2203248080808000200341e086c080004130108681808000" + "2104200241306a21050240034020052002460d01200541786a2205290300" + "2106413f210303402003417f460d01200441306a200410bd808080002004" + "200441306a41301086818080002107024020062003413f71ad8842018350" + "0d002007200110dd808080000b2003417f6a21030c000b0b0b2000200441" + "301086818080001a200441e0006a2480808080000b1c00200010a9808080" + "00200041306a10a9808080007110a3808080000bf50706027f067e027f01" + "7e017f027e23808080800041f0016b220324808080800041002104420021" + "05420021064200210742002108420021094200210a02400340200441054b" + "0d01200420044106496a210b200120044103746a210c4200210d41a07f21" + "0e02400340200e450d01200341b0016a2002200e6a220441e0006a290300" + "4200200c200e6a41e0006a290300220f4200108781808000200341a0016a" + "200441e8006a2903004200200f420010878180800020034190016a200441" + "f0006a2903004200200f420010878180800020034180016a200441f8006a" + "2903004200200f4200108781808000200341f0006a20044180016a290300" + "4200200f4200108781808000200341e0006a20044188016a290300420020" + "0f4200108781808000200d200341e0006a41086a29030020032903602210" + "200a7c220f201054ad7c200f200341f0006a41086a290300200329037022" + "1020097c220a201054ad7c200a20034180016a41086a2903002003290380" + "01221020087c2209201054ad7c200920034190016a41086a290300200329" + "039001221020077c2208201054ad7c2008200341a0016a41086a29030020" + "032903a001221020067c2207201054ad7c2007200341b0016a41086a2903" + "0020032903b001220620057c2205200654ad7c7c2206200754ad7c7c2207" + "200854ad7c7c2208200954ad7c7c2209200a54ad7c7c220a200f54ad7c7c" + "210d200e41306a210e0c000b0b200341d0006a200542fdfff3ffcffffff9" + "897f7e220f420042abd5feffffffbfffb97f4200108781808000200341c0" + "006a200f420042ffffcf8aebffffd51e4200108781808000200341306a20" + "0f420042a4ecc3b58fd4b498e7004200108781808000200341206a200f42" + "0042bfa5949ccff0d2bbe4004200108781808000200341106a200f420042" + "d7d9ae9ae4f6e98dcb0042001087818080002003200f4200429acdffcba3" + "bdc4801a4200108781808000200d200341086a2903002003290300221020" + "0a7c220f201054ad7c200f200341106a41086a2903002003290310221020" + "097c220a201054ad7c200a200341206a41086a2903002003290320221020" + "087c2209201054ad7c2009200341306a41086a2903002003290330221020" + "077c2208201054ad7c2008200341c0006a41086a29030020032903402210" + "20067c2207201054ad7c2007200341d0006a41086a290300200329035022" + "0620057c200654ad7c7c2205200754ad7c7c2206200854ad7c7c22072009" + "54ad7c7c2208200a54ad7c7c2209200f54ad7c7c210a200b21040c000b0b" + "2003200a3703e801200320093703e001200320083703d801200320073703" + "d001200320063703c801200320053703c0012000200341c0016a10d68080" + "8000200341f0016a2480808080000b1c002000200110b280808000200041" + "306a200141306a10b2808080000be20103037f017e017f23808080800041" + "c0016b2203248080808000200341306a410041301085818080001a200341" + "e086c0800041301086818080002104200241306a21050240034020052002" + "460d01200541786a22052903002106413f210303402003417f460d012004" + "41e0006a200410ba808080002004200441e0006a41e00010868180800021" + "07024020062003413f71ad88420183500d00200741e0006a2007200110b3" + "808080002007200741e0006a41e0001086818080001a0b2003417f6a2103" + "0c000b0b0b2000200441e0001086818080001a200441c0016a2480808080" + "000b900202017f017e23808080800041b0036b2202248080808000200241" + "004130108581808000220241e0006a410041301085818080001a20024130" + "6a41e086c0800041301086818080001a20024190016a2001419001108681" + "8080001a42808082808080a080e90021030240034020034200510d012002" + "41a0026a20024190016a10c68080800020024190016a200241a0026a4190" + "011086818080001a02402003420183500d00200241a0026a200220024190" + "016a10c7808080002002200241a0026a4190011086818080001a0b200342" + "018821030c000b0b200241a0026a200210e58080800020002002200241a0" + "026a41900110868180800022024190011086818080001a200241b0036a24" + "80808080000b3400200041306a200141306a10b280808000200041e0006a" + "200141e0006a41301086818080001a2000200141301086818080001a0b6b" + "01037f23808080800041106b22022480808080000240024020012802000d" + "00410021030c010b200241086a200110d0808080004101210320022d0009" + "210420022d00080d0041002103200141003602000b200020043a00012000" + "20033a0000200241106a2480808080000b7501027f23808080800041e000" + "6b2201248080808000200141306a410041301085818080001a200141e086" + "c0800041301086818080002101410110a38080800021022000410041e000" + "108581808000220041e0006a200141e0001086818080001a200020023a00" + "c001200141e0006a2480808080000b920101017f23808080800041c0016b" + "2202248080808000200041e0006a200141e0006a41e0001086818080001a" + "200241306a410041301085818080001a200241e086c08000413010868180" + "8000220241e0006a410041e0001085818080001a200041c0016a20022002" + "41e0006a20012d00c00110b0808080002000200141e0001086818080001a" + "200241c0016a2480808080000baa0201047f23808080800041e0036b2204" + "24808080800020042001200210b380808000200441e0006a200141e0006a" + "2205200310b38080800020044180036a200141c0016a2206200310b38080" + "8000200441a0026a20044180036a20044180036a41306a220710b8808080" + "00200441a0026a41306a20044180036a200710b9808080002000200441a0" + "026a200410bc80808000200441a0026a2002200310bc8080800020044180" + "036a2001200510bc80808000200441c0016a200441a0026a20044180036a" + "10b38080800020044180036a200441c0016a200410bb80808000200041e0" + "006a20044180036a200441e0006a10bb8080800020044180036a20062002" + "10b380808000200041c0016a20044180036a200441e0006a10bc80808000" + "200441e0036a2480808080000bf50706027f067e027f017e017f027e2380" + "8080800041f0016b22032480808080004100210442002105420021064200" + "210742002108420021094200210a02400340200441054b0d012004200441" + "06496a210b200120044103746a210c4200210d41e07d210e02400340200e" + "450d01200341b0016a2002200e6a220441a0026a2903004200200c200e6a" + "41a0026a290300220f4200108781808000200341a0016a200441a8026a29" + "03004200200f420010878180800020034190016a200441b0026a29030042" + "00200f420010878180800020034180016a200441b8026a2903004200200f" + "4200108781808000200341f0006a200441c0026a2903004200200f420010" + "8781808000200341e0006a200441c8026a2903004200200f420010878180" + "8000200d200341e0006a41086a29030020032903602210200a7c220f2010" + "54ad7c200f200341f0006a41086a2903002003290370221020097c220a20" + "1054ad7c200a20034180016a41086a290300200329038001221020087c22" + "09201054ad7c200920034190016a41086a29030020032903900122102007" + "7c2208201054ad7c2008200341a0016a41086a29030020032903a0012210" + "20067c2207201054ad7c2007200341b0016a41086a29030020032903b001" + "220620057c2205200654ad7c7c2206200754ad7c7c2207200854ad7c7c22" + "08200954ad7c7c2209200a54ad7c7c220a200f54ad7c7c210d200e41306a" + "210e0c000b0b200341d0006a200542fdfff3ffcffffff9897f7e220f4200" + "42abd5feffffffbfffb97f4200108781808000200341c0006a200f420042" + "ffffcf8aebffffd51e4200108781808000200341306a200f420042a4ecc3" + "b58fd4b498e7004200108781808000200341206a200f420042bfa5949ccf" + "f0d2bbe4004200108781808000200341106a200f420042d7d9ae9ae4f6e9" + "8dcb0042001087818080002003200f4200429acdffcba3bdc4801a420010" + "8781808000200d200341086a29030020032903002210200a7c220f201054" + "ad7c200f200341106a41086a2903002003290310221020097c220a201054" + "ad7c200a200341206a41086a2903002003290320221020087c2209201054" + "ad7c2009200341306a41086a2903002003290330221020077c2208201054" + "ad7c2008200341c0006a41086a2903002003290340221020067c22072010" + "54ad7c2007200341d0006a41086a2903002003290350220620057c200654" + "ad7c7c2205200754ad7c7c2206200854ad7c7c2207200954ad7c7c220820" + "0a54ad7c7c2209200f54ad7c7c210a200b21040c000b0b2003200a3703e8" + "01200320093703e001200320083703d801200320073703d0012003200637" + "03c801200320053703c0012000200341c0016a10d680808000200341f001" + "6a2480808080000bdc0101027f2380808080004180036b22032480808080" + "002003200110ba80808000200341e0006a200210ba80808000200341c001" + "6a200341e0006a200341e0006a41306a220410b880808000200341c0016a" + "41306a200341e0006a200410b9808080002000200341c0016a200310bc80" + "808000200341c0016a2001200210bc80808000200341a0026a200341c001" + "6a10ba80808000200341c0016a200341a0026a41e0001086818080001a20" + "0341c0016a200310ec80808000200041e0006a200341c0016a200341e000" + "6a10bb8080800020034180036a2480808080000b3c01017f238080808000" + "41e0006b220224808080800020022000200110bb808080002000200241e0" + "001086818080001a200241e0006a2480808080000b9f0701037f23808080" + "800041a0116b2201248080808000200141a0026a200010ba808080002001" + "4180036a200041e0006a220210ba80808000200141e0036a20014180036a" + "10ba80808000200141c0106a20014180036a200010bc80808000200141e0" + "0f6a200141c0106a10ba80808000200141800f6a200141e00f6a200141a0" + "026a10bb80808000200141c0046a200141800f6a200141e0036a10bb8080" + "8000200141a0056a200141c0046a200141c0046a10bc80808000200141c0" + "106a200141a0026a200141a0026a10bc8080800020014180066a200141c0" + "106a200141a0026a10bc80808000200141e0066a200020014180066a10bc" + "80808000200141c0076a20014180066a10ba80808000200141a0086a2000" + "41c0016a220310ba80808000200141c0106a200141c0076a200141a0056a" + "10bb80808000200141e00f6a200141c0106a200141a0056a10bb80808000" + "2000200141e00f6a41e0001086818080002100200141c0106a2003200210" + "bc80808000200141e00f6a200141c0106a10ba80808000200141800f6a20" + "0141e00f6a20014180036a10bb80808000200141e00f6a200141800f6a20" + "0141a0086a10bb808080002003200141e00f6a41e0001086818080002103" + "200141c0106a200141a0056a200010bb80808000200141e00f6a200141c0" + "106a20014180066a10b3808080002002200141e00f6a41e0001086818080" + "00210220014180096a200141e0036a200141e0036a10bc80808000200141" + "e0096a20014180096a20014180096a10bc80808000200141c00a6a200141" + "e0096a200141e0096a10bc808080002002200141c00a6a10ec8080800020" + "0141a00b6a20014180066a200141a0086a10b380808000200141800c6a20" + "0141a00b6a200141a00b6a10bc80808000200141e00c6a200141800c6a10" + "e280808000200141c0106a200141e0066a10ba80808000200141e00f6a20" + "0141c0106a200141a0026a10bb80808000200141c00d6a200141e00f6a20" + "0141c0076a10bb80808000200141a00e6a20014180036a20014180036a10" + "bc80808000200141800f6a200141a00e6a200141a00e6a10bc8080800020" + "0141e00f6a200141c00d6a200141800f6a10bb80808000200141c0106a20" + "03200141a0086a10b3808080002001200141c0106a200141c0106a10bc80" + "808000200141e0006a200141e00c6a41e0001086818080001a200141c001" + "6a200141e00f6a41e0001086818080001a200041e8036a200141ac8cc080" + "0010ee80808000200141a0116a2480808080000b4201017f024020002802" + "0822032000280200470d002000200210d8808080000b2000280204200341" + "a0026c6a200141a0021086818080001a2000200341016a3602080b4c0101" + "7f23808080800041106b2202248080808000200241988cc0800036020c20" + "022000360208200241086a41b08dc080002002410c6a41b08dc080002001" + "419c8cc0800010d380808000000b7902017f017e23808080800041306b22" + "0324808080800020032001360204200320003602002003410236020c2003" + "41a08dc08000360208200342023702142003418580808000ad4220862204" + "2003ad8437032820032004200341046aad843703202003200341206a3602" + "10200341086a200210a480808000000b0f002000280200200110f2808080" + "000be10201067f23808080800041106b2202248080808000410a21030240" + "024020004190ce004f0d00200021040c010b410a21030340200241066a20" + "036a2205417c6a20004190ce006e220441f0b1036c20006a220641ffff03" + "7141e4006e220741017441ff8ec080006a2f00003b00002005417e6a2007" + "419c7f6c20066a41ffff037141017441ff8ec080006a2f00003b00002003" + "417c6a2103200041ffc1d72f4b21052004210020050d000b0b0240024020" + "0441e3004b0d00200421000c010b200241066a2003417e6a22036a200441" + "ffff037141e4006e2200419c7f6c20046a41ffff037141017441ff8ec080" + "006a2f00003b00000b024002402000410a490d00200241066a2003417e6a" + "22036a200041017441ff8ec080006a2f00003b00000c010b200241066a20" + "03417f6a22036a20004130723a00000b200141014100200241066a20036a" + "410a20036b10d5808080002100200241106a24808080800020000b380201" + "7f017e23808080800041106b220124808080800020002902002102200120" + "0036020c20012002370204200141046a108181808000000b490002402002" + "418080c400460d002000200220012802101181808080008080808000450d" + "0041010f0b024020030d0041000f0b200020032004200128020c11808080" + "800080808080000b7902017f017e23808080800041306b22032480808080" + "0020032001360204200320003602002003410236020c2003419c91c08000" + "360208200342023702142003418580808000ad4220862204200341046aad" + "84370328200320042003ad843703202003200341206a360210200341086a" + "200210a480808000000b1c0020002802002001200028020428020c118180" + "80800080808080000b14002001200028020020002802041092808080000b" + "1400200128021c2001280220200010f9808080000bbb05010a7f23808080" + "800041306b22032480808080002003200136022c20032000360228200341" + "033a00242003422037021c41002104200341003602142003410036020c02" + "400240024002400240200228021022050d00200228020c2200450d012002" + "280208220120004103746a21062000417f6a41ffffffff017141016a2104" + "2002280200210003400240200041046a2802002207450d00200328022820" + "002802002007200328022c28020c11808080800080808080000d040b2001" + "2802002003410c6a200141046a28020011818080800080808080000d0320" + "0041086a2100200141086a22012006470d000c020b0b2002280214220145" + "0d00200141057421082001417f6a41ffffff3f7141016a21042002280208" + "2109200228020021004100210703400240200041046a2802002201450d00" + "200328022820002802002001200328022c28020c11808080800080808080" + "000d030b2003200520076a220141106a28020036021c20032001411c6a2d" + "00003a00242003200141186a2802003602202001410c6a28020021064100" + "210a4100210b024002400240200141086a2802000e03010002010b200641" + "0374210c4100210b2009200c6a220c2802000d01200c28020421060b4101" + "210b0b200320063602102003200b36020c200141046a2802002106024002" + "40024020012802000e03010002010b2006410374210b2009200b6a220b28" + "02000d01200b28020421060b4101210a0b200320063602182003200a3602" + "142009200141146a2802004103746a22012802002003410c6a200141046a" + "28020011818080800080808080000d02200041086a21002008200741206a" + "2207470d000b0b200420022802044f0d0120032802282002280200200441" + "03746a22012802002001280204200328022c28020c118080808000808080" + "8000450d010b410121010c010b410021010b200341306a24808080800020" + "010b6001027f20002802042102200028020021030240200028020822002d" + "0000450d00200341f48ec080004104200228020c11808080800080808080" + "00450d0041010f0b20002001410a463a0000200320012002280210118180" + "80800080808080000b1200200041dc8ec08000200110f9808080000b7902" + "017f017e23808080800041306b2203248080808000200320013602042003" + "20003602002003410236020c200341d091c0800036020820034202370214" + "2003418580808000ad4220862204200341046aad84370328200320042003" + "ad843703202003200341206a360210200341086a200210a480808000000b" + "ab0201037f2380808080004180016b220224808080800020002802002100" + "024002400240200128021422034110710d0020034120710d012000280200" + "200110f28080800021000c020b2000280200210041810121030340200220" + "036a417e6a2000410f712204413072200441d7006a2004410a491b3a0000" + "2003417f6a21032000410f4b21042000410476210020040d000b200141fd" + "8ec080004102200220036a417f6a41810120036b10d58080800021000c01" + "0b2000280200210041810121030340200220036a417e6a2000410f712204" + "413072200441376a2004410a491b3a00002003417f6a21032000410f4b21" + "042000410476210020040d000b200141fd8ec080004102200220036a417f" + "6a41810120036b10d58080800021000b20024180016a2480808080002000" + "0b0900200041003602000b990101027f23808080800041106b2204248080" + "808000410041002802f093c08000220541016a3602f093c0800002402005" + "4100480d000240024041002d00bc97c080000d00410041002802b897c080" + "0041016a3602b897c0800041002802ec93c08000417f4a0d010c020b2004" + "41086a200020011182808080008080808000000b410041003a00bc97c080" + "002002450d00108081808000000b000b0300000b0b002000108281808000" + "000bba0101037f23808080800041106b2201248080808000200028020022" + "0228020c2103024002400240024020022802040e020001020b20030d0141" + "012102410021030c020b20030d0020022802002202280204210320022802" + "0021020c010b20014180808080783602002001200036020c200141868080" + "8000200028020822002d000820002d000910ff80808000000b2001200336" + "0204200120023602002001418780808000200028020822002d000820002d" + "000910ff80808000000b0c00200020012902003703000bc30201047f411f" + "21020240200141ffffff074b0d002001410620014108766722026b764101" + "7120024101746b413e6a21020b200042003702102000200236021c200241" + "027441f493c080006a21030240410028029097c080004101200274220471" + "0d0020032000360200200020033602182000200036020c20002000360208" + "4100410028029097c0800020047236029097c080000f0b02400240024020" + "0328020022042802044178712001470d00200421020c010b200141004119" + "20024101766b2002411f461b742103034020042003411d764104716a4110" + "6a22052802002202450d0220034101742103200221042002280204417871" + "2001470d000b0b20022802082203200036020c2002200036020820004100" + "3602182000200236020c200020033602080f0b2005200036020020002004" + "3602182000200036020c200020003602080baa0301057f02400240200241" + "104f0d00200021030c010b02402000410020006b41037122046a22052000" + "4d0d002004417f6a21062000210302402004450d00200421072000210303" + "40200320013a0000200341016a21032007417f6a22070d000b0b20064107" + "490d000340200320013a0000200341076a20013a0000200341066a20013a" + "0000200341056a20013a0000200341046a20013a0000200341036a20013a" + "0000200341026a20013a0000200341016a20013a0000200341086a220320" + "05470d000b0b024020052005200220046b2202417c716a22034f0d002001" + "41ff017141818284086c2107034020052007360200200541046a22052003" + "490d000b0b200241037121020b02402003200320026a22074f0d00200241" + "7f6a2104024020024107712205450d000340200320013a0000200341016a" + "21032005417f6a22050d000b0b20044107490d000340200320013a000020" + "0341076a20013a0000200341066a20013a0000200341056a20013a000020" + "0341046a20013a0000200341036a20013a0000200341026a20013a000020" + "0341016a20013a0000200341086a22032007470d000b0b20000ba5050108" + "7f02400240200241104f0d00200021030c010b02402000410020006b4103" + "7122046a220520004d0d002004417f6a2106200021032001210702402004" + "450d002004210820002103200121070340200320072d00003a0000200741" + "016a2107200341016a21032008417f6a22080d000b0b20064107490d0003" + "40200320072d00003a0000200341016a200741016a2d00003a0000200341" + "026a200741026a2d00003a0000200341036a200741036a2d00003a000020" + "0341046a200741046a2d00003a0000200341056a200741056a2d00003a00" + "00200341066a200741066a2d00003a0000200341076a200741076a2d0000" + "3a0000200741086a2107200341086a22032005470d000b0b200520022004" + "6b2208417c7122066a210302400240200120046a22074103710d00200520" + "034f0d0120072101034020052001280200360200200141046a2101200541" + "046a22052003490d000c020b0b200520034f0d0020074103742202411871" + "21042007417c71220941046a2101410020026b411871210a200928020021" + "0203402005200220047620012802002202200a7472360200200141046a21" + "01200541046a22052003490d000b0b20084103712102200720066a21010b" + "02402003200320026a22054f0d002002417f6a2108024020024107712207" + "450d000340200320012d00003a0000200141016a2101200341016a210320" + "07417f6a22070d000b0b20084107490d000340200320012d00003a000020" + "0341016a200141016a2d00003a0000200341026a200141026a2d00003a00" + "00200341036a200141036a2d00003a0000200341046a200141046a2d0000" + "3a0000200341056a200141056a2d00003a0000200341066a200141066a2d" + "00003a0000200341076a200141076a2d00003a0000200141086a21012003" + "41086a22032005470d000b0b20000b6e01067e2000200342ffffffff0f83" + "2205200142ffffffff0f8322067e22072003422088220820067e22062005" + "200142208822097e7c22054220867c220a3703002000200820097e200520" + "0654ad4220862005422088847c200a200754ad7c200420017e200320027e" + "7c7c3703080bea0901087f024002400240200020016b20024f0d00200120" + "026a2103200020026a210420024110490d014100200441037122056b2106" + "02402004417c71220720044f0d002005417f6a21080240024020050d0020" + "0321090c010b2005210a2003210903402004417f6a22042009417f6a2209" + "2d00003a0000200a417f6a220a0d000b0b20084103490d002009417c6a21" + "0903402004417f6a200941036a2d00003a00002004417e6a200941026a2d" + "00003a00002004417d6a200941016a2d00003a00002004417c6a22042009" + "2d00003a00002009417c6a210920072004490d000b0b2007200220056b22" + "09417c7122026b2104410020026b210a02400240200320066a2203410371" + "0d00200420074f0d01200920016a417c6a210103402007417c6a22072001" + "2802003602002001417c6a210120042007490d000c020b0b200420074f0d" + "002003410374220241187121052003417c712208417c6a2101410020026b" + "41187121062008280200210203402007417c6a2207200220067420012802" + "002202200576723602002001417c6a210120042007490d000b0b20094103" + "7121022003200a6a21030c010b02400240200241104f0d00200021040c01" + "0b02402000410020006b410371220a6a220920004d0d00200a417f6a2105" + "20002104200121070240200a450d00200a21032000210420012107034020" + "0420072d00003a0000200741016a2107200441016a21042003417f6a2203" + "0d000b0b20054107490d000340200420072d00003a0000200441016a2007" + "41016a2d00003a0000200441026a200741026a2d00003a0000200441036a" + "200741036a2d00003a0000200441046a200741046a2d00003a0000200441" + "056a200741056a2d00003a0000200441066a200741066a2d00003a000020" + "0441076a200741076a2d00003a0000200741086a2107200441086a220420" + "09470d000b0b20092002200a6b2203417c7122056a210402400240200120" + "0a6a22074103710d00200920044f0d012007210103402009200128020036" + "0200200141046a2101200941046a22092004490d000c020b0b200920044f" + "0d0020074103742202411871210a2007417c71220841046a210141002002" + "6b411871210620082802002102034020092002200a762001280200220220" + "067472360200200141046a2101200941046a22092004490d000b0b200341" + "03712102200720056a21010b2004200420026a22094f0d012002417f6a21" + "03024020024107712207450d000340200420012d00003a0000200141016a" + "2101200441016a21042007417f6a22070d000b0b20034107490d01034020" + "0420012d00003a0000200441016a200141016a2d00003a0000200441026a" + "200141026a2d00003a0000200441036a200141036a2d00003a0000200441" + "046a200141046a2d00003a0000200441056a200141056a2d00003a000020" + "0441066a200141066a2d00003a0000200441076a200141076a2d00003a00" + "00200141086a2101200441086a22042009470d000c020b0b200420026b22" + "0720044f0d002002417f6a2109024020024103712201450d000340200441" + "7f6a22042003417f6a22032d00003a00002001417f6a22010d000b0b2009" + "4103490d002003417c6a210103402004417f6a200141036a2d00003a0000" + "2004417e6a200141026a2d00003a00002004417d6a200141016a2d00003a" + "00002004417c6a220420012d00003a00002001417c6a210120072004490d" + "000b0b20000b0e002000200120021088818080000b0bf2130100418080c0" + "000be8132f72757374632f34656231363132353065333430633866343866" + "3636653262393239656634613562656437633138312f6c6962726172792f" + "636f72652f7372632f697465722f7472616974732f6974657261746f722e" + "72730000100058000000b307000009000000000000000000000001000000" + "0800000063616c6c65642060526573756c743a3a756e7772617028296020" + "6f6e20616e2060457272602076616c75652f72757374632f346562313631" + "323530653334306338663438663636653262393239656634613562656437" + "633138312f6c6962726172792f616c6c6f632f7372632f736c6963652e72" + "73000000a30010004a000000a10000001900000054727946726f6d536c69" + "63654572726f720000000100000000000000d80210005e000000b4020000" + "090000002f72757374632f34656231363132353065333430633866343866" + "3636653262393239656634613562656437633138312f6c6962726172792f" + "636f72652f7372632f736c6963652f697465722e727300002c0110004e00" + "0000f6050000150000007372632f6c69622e727300008c0110000a000000" + "1f000000160000008c0110000a00000028000000310000008c0110000a00" + "000028000000440000004661696c656420746f20646573657269616c697a" + "6520766b8c0110000a0000002f000000310000008c0110000a0000002f00" + "0000440000008c0110000a000000620000001f0000008c0110000a000000" + "630000000a0000008c0110000a00000064000000170000008c0110000a00" + "0000650000000a0000008c0110000a00000066000000170000008c011000" + "0a000000670000000a0000004661696c656420746f20646573657269616c" + "697a6520614661696c656420746f20646573657269616c697a6520624661" + "696c656420746f20646573657269616c697a652063496e76616c69642062" + "7974657320666f72205363616c61726361706163697479206f766572666c" + "6f770000bd021000110000002f686f6d652f6f706964736b6f706e79692f" + "2e636172676f2f72656769737472792f7372632f696e6465782e63726174" + "65732e696f2d313934396366386336623562353537662f737562746c652d" + "322e362e312f7372632f6c69622e72730000000000000400000004000000" + "0900000001000000d80210005e000000bd0200000900000000000000fdff" + "02000000097602000cc40b00f4ebba58c7535798485f455752705358ce77" + "6dec56a2971a075c93e480fac35ef6154617341c341fdff4f104d109a6e6" + "760ad5b6954c6c47e58dc0839d93a988eb672d9519b5853e799aaae3ca92" + "e58f9811abeaffffffbf7feeffff54acffffaa07893dac3da834ccd9af44" + "e13ce1d21dd935ebd290ede9c692a6f95f8e7a448006a9aafffffffffeb9" + "ffff53b1feffab1e24f6b0f6a0d23067bf1285f3844b7764d7ac4b43b6a7" + "1b4b9ae67f39ea11011aaaeaffffffbf7feeffff54acffffaa07893dac3d" + "a834ccd9af44e13ce1d21dd935ebd290ede9c692a6f95f8e7a44800655d5" + "ffffff7fffdcffffa958ffff550f127b587b506998b35f89c279c2a53bb2" + "6bd6a521dbd38d254df3bf1cf588000df3ff0c00000027aa0a0034fc3200" + "cc537f800a6b7ae98f47d724bae6be7ed3b12fab78bf3b73c98e7ede833d" + "5145d609e8648a791b36f1302a5ace7eabddb8f3f77715c63acaa8169b02" + "fd74f82f6ac26e1c706066b7363660611b24aba41b05f3ff0c00000027aa" + "0a0034fc3200cc537f800a6b7ae98f47d724bae6be7ed3b12fab78bf3b73" + "c98e7ede833d5145d609f3ff0c00000027aa0a0034fc3200cc537f800a6b" + "7ae98f47d724bae6be7ed3b12fab78bf3b73c98e7ede833d5145d6092e55" + "270000007644200048439a00b8dc598b6e4acee97e6fc65ba9c0b73003b1" + "b7541efbfcb14061e1b40b7f09be81032e55270000007644200048439a00" + "b8dc598b6e4acee97e6fc65ba9c0b73003b1b7541efbfcb14061e1b40b7f" + "09be81032f686f6d652f6f706964736b6f706e79692f2e636172676f2f72" + "656769737472792f7372632f696e6465782e6372617465732e696f2d3139" + "34396366386336623562353537662f626c7331325f3338312d302e382e30" + "2f7372632f70616972696e67732e72730000a00510006600000016020000" + "1500000044000000a0051000660000001b02000009000000a00510006600" + "0000050200001d000000a005100066000000090200001d000000a0051000" + "660000003802000032000000a00510006600000044020000320000002969" + "6e646578206f7574206f6620626f756e64733a20746865206c656e206973" + "20206275742074686520696e64657820697320006d061000200000008d06" + "1000120000000000000004000000040000000a0000003d3d617373657274" + "696f6e20606c6566742020726967687460206661696c65640a20206c6566" + "743a200a2072696768743a200000c206100010000000d206100017000000" + "e90610000900000020726967687460206661696c65643a200a20206c6566" + "743a20000000c2061000100000000c071000100000001c07100009000000" + "e9061000090000003a200000010000000000000048071000020000000000" + "00000c000000040000000b0000000c0000000d000000202020202c0a2828" + "0a3078303030313032303330343035303630373038303931303131313231" + "333134313531363137313831393230323132323233323432353236323732" + "383239333033313332333333343335333633373338333934303431343234" + "333434343534363437343834393530353135323533353435353536353735" + "383539363036313632363336343635363636373638363937303731373237" + "333734373537363737373837393830383138323833383438353836383738" + "3838393930393139323933393439353936393739383939617474656d7074" + "20746f20646976696465206279207a65726f4708100019000000206f7574" + "206f662072616e676520666f7220736c696365206f66206c656e67746820" + "72616e676520656e6420696e6465782000008a0810001000000068081000" + "22000000736c69636520696e646578207374617274732061742020627574" + "20656e64732061742000ac08100016000000c20810000d00000028292f72" + "757374632f34656231363132353065333430633866343866363665326239" + "3239656634613562656437633138312f6c6962726172792f616c6c6f632f" + "7372632f7261775f7665632e72730000e20810004c000000280200001100" + "00002f727573742f646570732f646c6d616c6c6f632d302e322e372f7372" + "632f646c6d616c6c6f632e7273617373657274696f6e206661696c65643a" + "207073697a65203e3d2073697a65202b206d696e5f6f7665726865616400" + "4009100029000000a804000009000000617373657274696f6e206661696c" + "65643a207073697a65203c3d2073697a65202b206d61785f6f7665726865" + "616400004009100029000000ae0400000d00000000c94e046e616d65000e" + "0d7761736d5f6c69622e7761736d01914e8a01008a015f5a4e3130325f24" + "4c5424636f72652e2e697465722e2e61646170746572732e2e6d61702e2e" + "4d6170244c5424492443244624475424247532302461732475323024636f" + "72652e2e697465722e2e7472616974732e2e6974657261746f722e2e4974" + "657261746f72244754243973697a655f68696e7431376833383630386236" + "62663263303736666145014c5f5a4e34636f72653970616e69636b696e67" + "313170616e69635f636f6e7374323370616e69635f636f6e73745f646976" + "5f62795f7a65726f3137683033346433623765633138373166373545024d" + "5f5a4e34636f726533707472343364726f705f696e5f706c616365244c54" + "247761736d5f6c69622e2e566572696679696e674b657924475424313768" + "393064303131346662343063613937644503475f5a4e35616c6c6f633772" + "61775f7665633230526177566563496e6e6572244c542441244754243130" + "6465616c6c6f636174653137683235303163353461663065323831336145" + "04505f5a4e34636f726533707472343664726f705f696e5f706c61636524" + "4c5424616c6c6f632e2e7665632e2e566563244c54247538244754242447" + "5424313768663462323737666433376462353031654505565f5a4e34636f" + "726533707472353264726f705f696e5f706c616365244c5424626c733132" + "5f3338312e2e70616972696e67732e2e4732507265706172656424475424" + "313768623964653634383231343939353539344506675f5a4e34636f7265" + "33707472363964726f705f696e5f706c616365244c5424616c6c6f632e2e" + "7665632e2e566563244c5424626c7331325f3338312e2e7363616c61722e" + "2e5363616c61722447542424475424313768376265333235646130373238" + "386634384507385f5a4e35616c6c6f63337665633136566563244c542454" + "244324412447542434707573683137686236356465366561306165303964" + "31374508435f5a4e35616c6c6f63377261775f7665633139526177566563" + "244c54245424432441244754243867726f775f6f6e653137686531306535" + "65303538376531393262664509495f5a4e35616c6c6f6335736c69636532" + "395f244c5424696d706c2475323024247535622454247535642424475424" + "36746f5f76656331376836333665656464383765653761373437450a4d5f" + "5a4e35616c6c6f63377261775f7665633230526177566563496e6e657224" + "4c542441244754243136776974685f63617061636974795f696e31376861" + "653336636161393636356566343833450b4b5f5a4e35616c6c6f63377261" + "775f7665633230526177566563496e6e6572244c54244124475424313467" + "726f775f616d6f7274697a65643137686439353064656131373163323030" + "3035450c335f5a4e35616c6c6f63377261775f766563313268616e646c65" + "5f6572726f7231376863613161646630343635323765396532450d0e5f5f" + "727573745f6465616c6c6f630e4c5f5a4e35616c6c6f63377261775f7665" + "633230526177566563496e6e6572244c5424412447542431357472795f61" + "6c6c6f636174655f696e3137686534626630623334333637646136646345" + "0f5e5f5a4e36355f244c5424626c7331325f3338312e2e67312e2e473141" + "6666696e65247532302461732475323024636f72652e2e6f70732e2e6172" + "6974682e2e4e656724475424336e65673137683434323138626332316532" + "65356663314510725f5a4e36395f244c5424626c7331325f3338312e2e66" + "702e2e4670247532302461732475323024737562746c652e2e436f6e6469" + "74696f6e616c6c7953656c65637461626c65244754243138636f6e646974" + "696f6e616c5f73656c656374313768386165306466613830666434313139" + "364511605f5a4e36375f244c5424636f72652e2e61727261792e2e547279" + "46726f6d536c6963654572726f72247532302461732475323024636f7265" + "2e2e666d742e2e44656275672447542433666d7431376863303634386262" + "31393264393231376545122e5f5a4e34636f726533666d7439466f726d61" + "747465723370616431376833316663303133336231396665333065451367" + "5f5a4e36385f244c5424636f72652e2e666d742e2e6275696c646572732e" + "2e50616441646170746572247532302461732475323024636f72652e2e66" + "6d742e2e5772697465244754243977726974655f73747231376834353537" + "3732653638643462343039364514385f5a4e36737562746c65313743744f" + "7074696f6e244c5424542447542436657870656374313768623863663632" + "323139313530313333334515495f5a4e34345f244c542424524624542475" + "32302461732475323024636f72652e2e666d742e2e446973706c61792447" + "542433666d74313768353633396538653836623831393165364516355f5a" + "4e34636f72653970616e69636b696e6731336173736572745f6661696c65" + "64313768393337633632373834633734396537664517385f5a4e36737562" + "746c65313743744f7074696f6e244c542454244754243665787065637431" + "3768633764316533383030323138386237654518705f5a4e38315f244c54" + "24616c6c6f632e2e7665632e2e566563244c542454244324412447542424" + "7532302461732475323024636f72652e2e6f70732e2e696e6465782e2e49" + "6e646578244c542449244754242447542435696e64657831376862376565" + "6135613738316438393239374519405f5a4e34636f726535736c69636535" + "696e6465783232736c6963655f696e6465785f6f726465725f6661696c31" + "376866663036393161306536326561633864451a425f5a4e34636f726535" + "736c69636535696e6465783234736c6963655f656e645f696e6465785f6c" + "656e5f6661696c31376861383936346133343065666132346537451b0861" + "6c6c6f636174651c13646573657269616c697a655f67315f7761736d1d32" + "5f5a4e34636f726536726573756c743133756e777261705f6661696c6564" + "31376861313838333239383461636266333830451e3e5f5a4e39626c7331" + "325f333831326731384731416666696e65313566726f6d5f636f6d707265" + "7373656431376832333963336331363436646339303436451f355f5a4e38" + "7761736d5f6c69623139646573657269616c697a655f67325f7761736d31" + "37683530336430613839336365653362666645203e5f5a4e39626c733132" + "5f333831326732384732416666696e65313566726f6d5f636f6d70726573" + "7365643137686333616566303334336638323663626245211462656c6c6d" + "616e5f67726f746831365f7465737422335f5a4e39626c7331325f333831" + "367363616c6172365363616c617233737562313768656363643066636134" + "373035653937364523285f5a4e36737562746c6539626c61636b5f626f78" + "313768633661663135363636663731396234384524305f5a4e34636f7265" + "3970616e69636b696e673970616e69635f666d7431376862393162616461" + "636536656538323837452585015f5a4e3130325f244c5424626c7331325f" + "3338312e2e67312e2e473150726f6a656374697665247532302461732475" + "323024636f72652e2e636f6e766572742e2e46726f6d244c542424524624" + "626c7331325f3338312e2e67312e2e4731416666696e6524475424244754" + "243466726f6d3137686634356430353636343237373335316445262e5f5a" + "4e39626c7331325f33383132667032467036696e76657274313768366335" + "3632643539653638646633633245272b5f5a4e39626c7331325f33383132" + "6670324670336d756c313768646666623336663036373139613633374528" + "365f5a4e39626c7331325f333831326731384731416666696e6538696465" + "6e746974793137686236366162643638326233626339356345292f5f5a4e" + "39626c7331325f3338313266703246703769735f7a65726f313768333962" + "31303634343730313433376536452a785f5a4e37355f244c5424626c7331" + "325f3338312e2e67312e2e4731416666696e652475323024617324753230" + "24737562746c652e2e436f6e646974696f6e616c6c7953656c6563746162" + "6c65244754243138636f6e646974696f6e616c5f73656c65637431376833" + "323735393935653930646636613863452b85015f5a4e3130325f244c5424" + "626c7331325f3338312e2e70616972696e67732e2e473250726570617265" + "64247532302461732475323024636f72652e2e636f6e766572742e2e4672" + "6f6d244c5424626c7331325f3338312e2e67322e2e4732416666696e6524" + "475424244754243466726f6d313768353930643863663565363536346465" + "66452c2f5f5a4e39626c7331325f33383134667031323446703132336f6e" + "6531376839346666616330666264306163343332452d90015f5a4e313033" + "5f244c5424626c7331325f3338312e2e70616972696e67732e2e6d756c74" + "695f6d696c6c65725f6c6f6f702e2e416464657224753230246173247532" + "3024626c7331325f3338312e2e70616972696e67732e2e4d696c6c65724c" + "6f6f70447269766572244754243133646f75626c696e675f737465703137" + "6833346536393232613038346336343933452e705f5a4e38315f244c5424" + "616c6c6f632e2e7665632e2e566563244c54245424432441244754242475" + "32302461732475323024636f72652e2e6f70732e2e696e6465782e2e496e" + "646578244c542449244754242447542435696e6465783137686539346538" + "6262303063326535366564452f2e5f5a4e39626c7331325f333831387061" + "6972696e677333656c6c3137683264393865303762336132336635313345" + "30745f5a4e37315f244c5424626c7331325f3338312e2e6670322e2e4670" + "32247532302461732475323024737562746c652e2e436f6e646974696f6e" + "616c6c7953656c65637461626c65244754243138636f6e646974696f6e61" + "6c5f73656c6563743137686366633738633362393036656661383945315a" + "5f5a4e36315f244c5424626c7331325f3338312e2e6670362e2e46703624" + "7532302461732475323024636f72652e2e6f70732e2e61726974682e2e4e" + "656724475424336e65673137686230666536353636326461326334343345" + "322b5f5a4e39626c7331325f333831326670324670336e65673137683861" + "363566633733316133386134393745332d5f5a4e39626c7331325f333831" + "3366703233467032336d756c313768326433373464346666306563343037" + "6245345a5f5a4e36315f244c5424626c7331325f3338312e2e6670362e2e" + "467036247532302461732475323024636f72652e2e6f70732e2e61726974" + "682e2e4d756c24475424336d756c31376865613934393735323931313764" + "3166634535305f5a4e39626c7331325f3338313366703633467036367371" + "756172653137683866633831663539663666313530643145363c5f5a4e39" + "626c7331325f333831336670363346703631376d756c5f62795f6e6f6e72" + "6573696475653137686432663865613131393236643732653945375a5f5a" + "4e36315f244c5424626c7331325f3338312e2e6670362e2e467036247532" + "302461732475323024636f72652e2e6f70732e2e61726974682e2e537562" + "24475424337375623137686137396663636566323762323631323445382b" + "5f5a4e39626c7331325f3338313266703246703373756231376865646439" + "32336439323032346633366445392b5f5a4e39626c7331325f3338313266" + "703246703361646431376863366562626430363731666432643965453a30" + "5f5a4e39626c7331325f3338313366703233467032367371756172653137" + "6865663238666434623836356230653732453b2d5f5a4e39626c7331325f" + "333831336670323346703233737562313768636330663365343532313765" + "61393964453c2d5f5a4e39626c7331325f33383133667032334670323361" + "646431376864363030363832376137333934646563453d2e5f5a4e39626c" + "7331325f3338313266703246703673717561726531376835616337663530" + "666666393136623065453e605f5a4e36375f244c542424524624626c7331" + "325f3338312e2e667031322e2e4670313224753230246173247532302463" + "6f72652e2e6f70732e2e61726974682e2e4d756c24475424336d756c3137" + "6863613137343239383666636366353565453f6a5f5a4e36395f244c5424" + "626c7331325f3338312e2e667031322e2e46703132247532302461732475" + "323024636f72652e2e6f70732e2e61726974682e2e4d756c41737369676e" + "2447542431306d756c5f61737369676e3137683037326534616130343436" + "63356334314540655f5a4e39626c7331325f3338313870616972696e6773" + "31364d696c6c65724c6f6f70526573756c74323066696e616c5f6578706f" + "6e656e74696174696f6e31376379636c6f746f6d69635f73717561726531" + "3768613463633461633966316338323538644541635f5a4e39626c733132" + "5f3338313870616972696e677331364d696c6c65724c6f6f70526573756c" + "74323066696e616c5f6578706f6e656e74696174696f6e31356379636f6c" + "6f746f6d69635f6578703137686166636437313637356662666432373645" + "425d5f5a4e36325f244c5424626c7331325f3338312e2e6670322e2e4670" + "32247532302461732475323024737562746c652e2e436f6e7374616e7454" + "696d654571244754243563745f6571313768316264323735363036643361" + "6461366445435a5f5a4e36315f244c5424626c7331325f3338312e2e6670" + "362e2e467036247532302461732475323024636f72652e2e6f70732e2e61" + "726974682e2e416464244754243361646431376835343330336164316564" + "646333613837454491015f5a4e3131345f244c5424636f72652e2e697465" + "722e2e61646170746572732e2e666c617474656e2e2e466c61744d617024" + "4c542449244324552443244624475424247532302461732475323024636f" + "72652e2e697465722e2e7472616974732e2e6974657261746f722e2e4974" + "657261746f7224475424346e657874313768633964373737363930666232" + "373033334545385f5a4e34636f7265336f70733866756e6374696f6e3546" + "6e4d75743863616c6c5f6d75743137686638313366653737616237633761" + "35634546395f5a4e39626c7331325f3338313267313132473150726f6a65" + "637469766536646f75626c65313768386366636435343461313633326664" + "384547365f5a4e39626c7331325f3338313267313132473150726f6a6563" + "74697665336164643137686338666437656633383137383263636145487c" + "5f5a4e37395f244c5424626c7331325f3338312e2e67312e2e473150726f" + "6a656374697665247532302461732475323024737562746c652e2e436f6e" + "646974696f6e616c6c7953656c65637461626c65244754243138636f6e64" + "6974696f6e616c5f73656c65637431376839346663383463303336386533" + "3262334549415f5a4e38646c6d616c6c6f6338646c6d616c6c6f63313744" + "6c6d616c6c6f63244c542441244754243466726565313768623937643238" + "61316165313165356635454a2c5f5a4e34636f72653970616e69636b696e" + "673570616e696331376832323065356136376635653365303666454b0e5f" + "5f727573745f7265616c6c6f634c4a5f5a4e38646c6d616c6c6f6338646c" + "6d616c6c6f633137446c6d616c6c6f63244c542441244754243132756e6c" + "696e6b5f6368756e6b31376831623634356162376339333032303939454d" + "4b5f5a4e38646c6d616c6c6f6338646c6d616c6c6f633137446c6d616c6c" + "6f63244c542441244754243133646973706f73655f6368756e6b31376832" + "633732313930393066616265323362454e435f5a4e38646c6d616c6c6f63" + "38646c6d616c6c6f633137446c6d616c6c6f63244c54244124475424366d" + "616c6c6f6331376863663263663139323661376530646165454f385f5a4e" + "35616c6c6f63377261775f766563313763617061636974795f6f76657266" + "6c6f7731376863393936333961626361313337633131455085015f5a4e31" + "30325f244c5424636f72652e2e697465722e2e61646170746572732e2e6d" + "61702e2e4d6170244c542449244324462447542424753230246173247532" + "3024636f72652e2e697465722e2e7472616974732e2e6974657261746f72" + "2e2e4974657261746f7224475424346e6578743137683161356136633566" + "303263666237373445514d5f5a4e34365f244c5424753634247532302461" + "732475323024737562746c652e2e436f6e7374616e7454696d6545712447" + "54243563745f657131376839613065366130383065643661303532455253" + "5f5a4e35345f244c5424737562746c652e2e43686f696365247532302461" + "732475323024636f72652e2e6f70732e2e6269742e2e4e6f742447542433" + "6e6f743137686532353261643837343163616538663445533b5f5a4e3463" + "6f72653970616e69636b696e6731396173736572745f6661696c65645f69" + "6e6e6572313768363939386636356530343630623966324554475f5a4e34" + "325f244c54242452462454247532302461732475323024636f72652e2e66" + "6d742e2e44656275672447542433666d7431376866396562386538303434" + "3436393737334555385f5a4e34636f726533666d7439466f726d61747465" + "7231327061645f696e74656772616c313768336538303336383966363939" + "303466334556335f5a4e39626c7331325f33383132667032467031307375" + "6274726163745f7031376833353337643137643839306564373430455736" + "5f5a4e35616c6c6f6335616c6c6f6336476c6f62616c3130616c6c6f635f" + "696d706c313768636263383565313966363066396565314558435f5a4e35" + "616c6c6f63377261775f7665633139526177566563244c54245424432441" + "244754243867726f775f6f6e653137683761366133613131343862316565" + "66624559785f5a4e37355f244c5424626c7331325f3338312e2e67322e2e" + "4732416666696e65247532302461732475323024737562746c652e2e436f" + "6e646974696f6e616c6c7953656c65637461626c65244754243138636f6e" + "646974696f6e616c5f73656c656374313768346631633532376163323663" + "39393332455a7a5f5a4e37375f244c5424737562746c652e2e43744f7074" + "696f6e244c54245424475424247532302461732475323024737562746c65" + "2e2e436f6e646974696f6e616c6c7953656c65637461626c652447542431" + "38636f6e646974696f6e616c5f73656c6563743137686230353564346638" + "6331363261313862455b5b5f5a4e36305f244c5424626c7331325f333831" + "2e2e66702e2e4670247532302461732475323024737562746c652e2e436f" + "6e7374616e7454696d654571244754243563745f65713137683764613737" + "3038613961336631623237455c335f5a4e39626c7331325f333831326670" + "324670313066726f6d5f6279746573313768663632643265653863383835" + "61616633455d665f5a4e36355f244c5424626c7331325f3338312e2e6670" + "2e2e4670247532302461732475323024636f72652e2e6f70732e2e617269" + "74682e2e4d756c41737369676e2447542431306d756c5f61737369676e31" + "376862613864393933386331336334313962455e425f5a4e39626c733132" + "5f33383132667032467032356c657869636f67726170686963616c6c795f" + "6c61726765737431376864623239383362653765626662373630455f345f" + "5a4e39626c7331325f3338313266703246703131706f775f76617274696d" + "65313768386339643861353637336531663765654560315f5a4e39626c73" + "31325f33383133667032334670323769735f7a65726f3137683232633162" + "33626231383039373337664561385f5a4e39626c7331325f333831326670" + "324670313573756d5f6f665f70726f647563747331376864373831613962" + "66366162336638386645622d5f5a4e39626c7331325f3338313366703233" + "467032336e6567313768336535623432323139303537623839334563365f" + "5a4e39626c7331325f33383133667032334670323131706f775f76617274" + "696d653137683839356266623030643732663461646145643b5f5a4e3962" + "6c7331325f3338313267313132473150726f6a656374697665386d756c5f" + "62795f78313768313830336335636330383333313036354565665f5a4e37" + "335f244c542424524624626c7331325f3338312e2e67312e2e473150726f" + "6a656374697665247532302461732475323024636f72652e2e6f70732e2e" + "61726974682e2e4e656724475424336e6567313768363961333962383136" + "613036626237614566455f5a4e34636f7265346974657238616461707465" + "727337666c617474656e3137616e645f7468656e5f6f725f636c65617231" + "3768373932316661373530366638613637624567365f5a4e39626c733132" + "5f333831326732384732416666696e65386964656e746974793137683532" + "3261303037353662633832613639456885015f5a4e3130325f244c542462" + "6c7331325f3338312e2e67322e2e473250726f6a65637469766524753230" + "2461732475323024636f72652e2e636f6e766572742e2e46726f6d244c54" + "2424524624626c7331325f3338312e2e67322e2e4732416666696e652447" + "5424244754243466726f6d31376831393034396666373534383632623533" + "4569335f5a4e39626c7331325f3338313366703633467036396d756c5f62" + "795f303131376837316231356266356135313961376133456a385f5a4e39" + "626c7331325f333831326670324670313573756d5f6f665f70726f647563" + "747331376862306665663033383436356461336561456b5e5f5a4e39626c" + "7331325f3338313870616972696e677331364d696c6c65724c6f6f705265" + "73756c74323066696e616c5f6578706f6e656e74696174696f6e31306670" + "345f73717561726531376835333530613232303537323261303037456c68" + "5f5a4e36375f244c5424626c7331325f3338312e2e6670322e2e46703224" + "7532302461732475323024636f72652e2e6f70732e2e61726974682e2e53" + "756241737369676e2447542431307375625f61737369676e313768656138" + "64663864303262303833343633456dd5015f5a4e3137325f244c5424244c" + "5424626c7331325f3338312e2e70616972696e67732e2e47325072657061" + "726564247532302461732475323024636f72652e2e636f6e766572742e2e" + "46726f6d244c5424626c7331325f3338312e2e67322e2e4732416666696e" + "6524475424244754242e2e66726f6d2e2e41646465722475323024617324" + "75323024626c7331325f3338312e2e70616972696e67732e2e4d696c6c65" + "724c6f6f70447269766572244754243133646f75626c696e675f73746570" + "31376833303230646632373566636537643064456e385f5a4e35616c6c6f" + "63337665633136566563244c542454244324412447542434707573683137" + "6836633466633030383766393064366561456f355f5a4e34636f72653970" + "616e69636b696e6731336173736572745f6661696c656431376838396134" + "30623862613963643736636345703a5f5a4e34636f72653970616e69636b" + "696e67313870616e69635f626f756e64735f636865636b31376835613339" + "3334316633393435306165354571625f5a4e34636f726533666d74336e75" + "6d33696d7035325f244c5424696d706c2475323024636f72652e2e666d74" + "2e2e446973706c61792475323024666f7224753230247533322447542433" + "666d74313768646131373032323936653330396138624572445f5a4e3463" + "6f726533666d74336e756d33696d7032315f244c5424696d706c24753230" + "2475333224475424345f666d743137686531613333633761616434313031" + "3465457311727573745f626567696e5f756e77696e6474465f5a4e34636f" + "726533666d7439466f726d617474657231327061645f696e74656772616c" + "313277726974655f70726566697831376865323164633232613535336139" + "3935324575535f5a4e34636f726535736c69636535696e6465783234736c" + "6963655f656e645f696e6465785f6c656e5f6661696c38646f5f70616e69" + "633772756e74696d65313768623465303239633465666136373431314576" + "475f5a4e34325f244c54242452462454247532302461732475323024636f" + "72652e2e666d742e2e44656275672447542433666d743137683763663234" + "64633163663734653663354577495f5a4e34345f244c5424245246245424" + "7532302461732475323024636f72652e2e666d742e2e446973706c617924" + "47542433666d74313768363963313766643162653433346236384578585f" + "5a4e35395f244c5424636f72652e2e666d742e2e417267756d656e747324" + "7532302461732475323024636f72652e2e666d742e2e446973706c617924" + "47542433666d74313768356530663632333530333933336330664579265f" + "5a4e34636f726533666d7435777269746531376862633530306361396130" + "663033323632457a695f5a4e36385f244c5424636f72652e2e666d742e2e" + "6275696c646572732e2e5061644164617074657224753230246173247532" + "3024636f72652e2e666d742e2e577269746524475424313077726974655f" + "6368617231376837323761393336343062616631636662457b305f5a4e34" + "636f726533666d743557726974653977726974655f666d74313768653264" + "32326663306535326231396336457c515f5a4e34636f726535736c696365" + "35696e6465783232736c6963655f696e6465785f6f726465725f6661696c" + "38646f5f70616e69633772756e74696d6531376836346563303433376262" + "666263656363457d475f5a4e34325f244c54242452462454247532302461" + "732475323024636f72652e2e666d742e2e44656275672447542433666d74" + "31376837396432393730376137363931633337457e375f5a4e34636f7265" + "3570616e6963313250616e69635061796c6f61643661735f737472313768" + "33653762626665396537333233373036457f3b5f5a4e337374643970616e" + "69636b696e673230727573745f70616e69635f776974685f686f6f6b3137" + "68396561303139313462356439323635394580010a727573745f70616e69" + "638101455f5a4e3373746433737973396261636b747261636532365f5f72" + "7573745f656e645f73686f72745f6261636b747261636531376865376239" + "323038656534343338376436458201585f5a4e337374643970616e69636b" + "696e673139626567696e5f70616e69635f68616e646c657232385f247537" + "62242475376224636c6f7375726524753764242475376424313768393666" + "3161333534313164393334366245830183015f5a4e39395f244c54247374" + "642e2e70616e69636b696e672e2e626567696e5f70616e69635f68616e64" + "6c65722e2e5374617469635374725061796c6f6164247532302461732475" + "323024636f72652e2e70616e69632e2e50616e69635061796c6f61642447" + "54243661735f737472313768653362376630636337353061633833394584" + "01505f5a4e38646c6d616c6c6f6338646c6d616c6c6f633137446c6d616c" + "6c6f63244c542441244754243138696e736572745f6c617267655f636875" + "6e6b31376866646432333135363766663933346634458501066d656d7365" + "748601066d656d6370798701085f5f6d756c7469338801365f5a4e313763" + "6f6d70696c65725f6275696c74696e73336d656d376d656d6d6f76653137" + "6830343030366431613866396435653532458901076d656d6d6f76650712" + "01000f5f5f737461636b5f706f696e746572090a0100072e726f64617461" + "004d0970726f64756365727302086c616e6775616765010452757374000c" + "70726f6365737365642d6279010572757374631d312e38352e3120283465" + "6231363132353020323032352d30332d31352900490f7461726765745f66" + "65617475726573042b0a6d756c746976616c75652b0f6d757461626c652d" + "676c6f62616c732b0f7265666572656e63652d74797065732b087369676e" + "2d657874"; + +extern std::string const sp1WasmHex = + "0061736d0100000001630f60027f7f0060037f7f7f0060027f7f017f6003" + "7f7f7f017f60017f0060047f7f7f7f0060017f017f60057f7f7f7f7f0060" + "047f7f7f7f017f6000017f60077f7e7e7e7e7e7e0060000060097f7e7e7e" + "7e7e7e7e7e0060037f7e7e0060047f7e7e7f000351500906010004010001" + "000000060100000001010107040800000000000102080202040101000505" + "00010502000a0b0c00010100000100000401040000010100000101000200" + "0100000107010202030d0e000405017001080805030100110619037f0141" + "8080c0000b7f0041b0abc0000b7f0041b0abc0000b073c04066d656d6f72" + "790200147370315f67726f746831365f766572696669657200000a5f5f64" + "6174615f656e6403010b5f5f686561705f626173650302090d010041010b" + "071c1f1e323429420a81c10950add60202537f2d7e230041c0206b220124" + "0041e8a5c0002d0000410247044041e8a5c00041e8a5c0002d0000220541" + "0120051b3a00000240200504400340024002400240200541016b0e030005" + "01020b034041e8a5c0002d000022054101460d000b02400240200541016b" + "0e03000601030b000b41a49bc000412641cc9bc0001011000b41a89ac000" + "410d41949bc0001011000b41e8a5c00041e8a5c0002d0000220541012005" + "1b3a000020050d000b0b41e8a5c00041023a000041e4a5c000418c033602" + "0041e0a5c00041e892c0003602000b0b41bda9c0002d00001a41e4a5c000" + "280200211241e0a5c000280200211f024002400240024002400240024002" + "400240024002400240024002400240024002400240024002400240024002" + "400240024002404184021001220a450d00200a41c1befe827c3600800220" + "0a42e5979c9b97e3c7eb897f3700f801200a42cbb091f7e585f1e3d30037" + "00f001200a4285cca8c2988cc0acd0003700e801200a42c29391f580c1f3" + "da093700e001200a42d1f9cfc9da8dc8bcb37f3700d801200a42c1a5a5db" + "99d68fcfc8003700d001200a42a4e6aeaa96968ae30c3700c801200a42bb" + "86f4fee5c1aa8eab7f3700c001200a42ecff83a2ceee9ae7173700b80120" + "0a429fc5d69be5fafb80763700b001200a42bcd1e08deea2cfa58b7f3700" + "a801200a42aeb3eac1cda3e3c0bf7f3700a001200a42e2d8abdbae8cd3ae" + "5c37009801200a42eafbbf9fa891deb20437009001200a42afd29dfa8281" + "ecce9f7f37008801200a42b799d9dcb883f8df3b37008001200a42b3c1c2" + "a8e0a2cbc0cc00370078200a4295af8cdda2f981d269370070200a42f4eb" + "86b4cfc69bc339370068200a42f8e5b7c0c1e199bff000370060200a42c1" + "e7c485b4aac3c28c7f370058200a42f3e7ec98bff992d83b370050200a42" + "e880deac81addbc8967f370048200a4288c5f6c6eba0ef9844370040200a" + "42bdb2cf80ada892e5ec00370038200a42f887b4d9f0accbdb4c37003020" + "0a42e1c6ffa3c2dec48dcb00370028200a42fc81d7948085c1fc2c370020" + "200a42f79d8ff3bcb283ece500370018200a42beb6d5a58deadbe2d90037" + "0010200a4291c09b97b2989bf3b97f370008200a4291ec82edf9a3afba48" + "37000041bda9c0002d00001a41e0001001221d450d00201d420037000020" + "1d4200370020201d41053a001f201d4200370040201d41053a003f201d41" + "083a005f201d41176a4200370000201d41106a4200370000201d41086a42" + "00370000201d41286a4200370000201d41306a4200370000201d41376a42" + "00370000201d41c8006a4200370000201d41d0006a4200370000201d41d7" + "006a420037000041bda9c0002d00001a41c20010012205450d0020054180" + "80c00041c200104c2152200141a00f6a201f20121002024020012802a00f" + "200a280000470d002001418280c4003602e01c2001410036029c03200142" + "c080808020370294032001205241026a360290032001200141e01c6a3602" + "a003200141106a20014190036a100320012d0010044020012d0011210502" + "4020012802a003280200418280c400470d00200128029403450d00200128" + "029803450d040b41bda9c0002d00001a410810012202450d02200141d000" + "6a2116200a41e4016a2109200a41c4016a2122200a41a4016a2120200220" + "053a0000200141013602a80c200120023602a40c200141083602a00c2001" + "41b00f6a200141a0036a280200360200200141a80f6a20014198036a2902" + "0037030020012001290290033703a00f4101210503400240200141086a20" + "0141a00f6a100320012d0008450d0020012d0009210620012802a00c2005" + "460440024020012802b00f280200418280c400470d0020012802a40f450d" + "0020012802a80f450d070b230041206b220f240002404108200141a00c6a" + "220e280200220c4101742208200541016a220220022008491b2202200241" + "084d1b220241004e047f200f200c047f200f200c36021c200f200e280204" + "36021441010541000b360218200f41086a41012002200f41146a1028200f" + "2802084101470d01200f2802101a200f28020c0541000b41c096c0001019" + "000b200f28020c210c200e2002360200200e200c360204200f41206a2400" + "20012802a40c21020b200220056a20063a00002001200541016a22053602" + "a80c0c010b0b20012802a00c210220012802a40c210620012802e01c4182" + "80c4004704402002450d02200641046b2802002205417871221241044108" + "200541037122051b20026a490d05200541002012200241276a4b1b0d0620" + "0610040c020b2002418080808078460d0102400240024002402005412046" + "0440200141a80f6a2205200641176a290000370300200141b00f6a222320" + "06411f6a2d00003a00002001200629000f3703a00f200628000b21242006" + "28000721262006280003213520062d0002212d20062d0001214720062d00" + "00214820020440200641046b2802002208417871220c4104410820084103" + "7122081b20026a490d0c20084100200c200241276a4b1b0d0d200610040b" + "200141206a22062005290300370300200141286a220520232d00003a0000" + "200120012903a00f370318200141f0006a201d41e0001002200141c7006a" + "2006290300370000200141cf006a20052d00003a0000201641086a200141" + "f8006a290000370000201641106a20014180016a29000037000020164118" + "6a20014188016a290000370000200120012d0070411f713a007020162001" + "2900703700002001202436003b2001202636003720012035360033200120" + "2d3a0032200120473a0031200120483a00302001200129031837003f200a" + "290014225742388620574280fe0383422886842057428080fc0783421886" + "205742808080f80f834208868484205742088842808080f80f8320574218" + "88428080fc07838420574228884280fe03832057423888848484215e200a" + "411c6a290000225742388620574280fe0383422886842057428080fc0783" + "421886205742808080f80f834208868484205742088842808080f80f8320" + "57421888428080fc07838420574228884280fe0383205742388884848421" + "65417f200a290004225742b0c8b99297bc8cd02985200a410c6a29000022" + "5842b8a195b29bb0a0acdd008584420052205842388620584280fe038342" + "2886842058428080fc0783421886205842808080f80f8342088684842058" + "42088842808080f80f832058421888428080fc07838420584228884280fe" + "03832058423888848484225842ddb0858ce8b691a8b87f54205742388620" + "574280fe0383422886842057428080fc0783421886205742808080f80f83" + "4208868484205742088842808080f80f832057421888428080fc07838420" + "574228884280fe03832057423888848484225742a9c0c689aece93b23054" + "205742a9c0c689aece93b230511b1b2205417f470440200541ff01710d07" + "206542c6faf3c3ed82a3903c56205e428d95c7c396d2dac0977f56205e42" + "8d95c7c396d2dac0977f511b0d070b200120583703b018200120653703a0" + "18200120573703b8182001205e3703a818200a2900342257423886205742" + "80fe0383422886842057428080fc0783421886205742808080f80f834208" + "868484205742088842808080f80f832057421888428080fc078384205742" + "28884280fe03832057423888848484215e200a413c6a2900002257423886" + "20574280fe0383422886842057428080fc0783421886205742808080f80f" + "834208868484205742088842808080f80f832057421888428080fc078384" + "20574228884280fe038320574238888484842165417f200a290024225742" + "b0c8b99297bc8cd02985200a412c6a290000225842b8a195b29bb0a0acdd" + "008584420052205842388620584280fe0383422886842058428080fc0783" + "421886205842808080f80f834208868484205842088842808080f80f8320" + "58421888428080fc07838420584228884280fe0383205842388884848422" + "5842ddb0858ce8b691a8b87f54205742388620574280fe03834228868420" + "57428080fc0783421886205742808080f80f834208868484205742088842" + "808080f80f832057421888428080fc07838420574228884280fe03832057" + "423888848484225742a9c0c689aece93b23054205742a9c0c689aece93b2" + "30511b1b2205417f470440200541ff01710d07206542c6faf3c3ed82a390" + "3c56205e428d95c7c396d2dac0977f56205e428d95c7c396d2dac0977f51" + "1b0d070b200120583703d01a200120653703c01a200120573703d81a2001" + "205e3703c81a200141e0066a200141a0186a200141c01a6a100520012d00" + "e0060d06200141e50c6a2205200141a8076a290300370000200141dd0c6a" + "2206200141a0076a290300370000200141d50c6a220220014198076a2903" + "00370000200141cd0c6a222320014190076a290300370000200141c50c6a" + "222420014188076a290300370000200141bd0c6a222620014180076a2903" + "00370000200141b50c6a2235200141f8066a290300370000200120012903" + "f0063700ad0c200141a51d6a222d20052900003700002001419d1d6a2205" + "2006290000370000200141951d6a220620022900003700002001418d1d6a" + "22022023290000370000200141851d6a22232024290000370000200141fd" + "1c6a22242026290000370000200141f51c6a222620352900003700002001" + "20012900ad0c3700ed1c200141d80a6a202d290000370300200141d00a6a" + "2005290000370300200141c80a6a2006290000370300200141c00a6a2002" + "290000370300200141b80a6a2023290000370300200141b00a6a20242900" + "00370300200120262900003703a80a200120012900ed1c3703a00a200a29" + "0054225742388620574280fe0383422886842057428080fc078342188620" + "5742808080f80f834208868484205742088842808080f80f832057421888" + "428080fc07838420574228884280fe038320574238888484842165200a41" + "dc006a290000225742388620574280fe0383422886842057428080fc0783" + "421886205742808080f80f834208868484205742088842808080f80f8320" + "57421888428080fc07838420574228884280fe0383205742388884848421" + "6a417f200a290044225742b0c8b99297bc8cd02985200a41cc006a290000" + "225842b8a195b29bb0a0acdd008584420052205842388620584280fe0383" + "422886842058428080fc0783421886205842808080f80f83420886848420" + "5842088842808080f80f832058421888428080fc07838420584228884280" + "fe03832058423888848484226242ddb0858ce8b691a8b87f542057423886" + "20574280fe0383422886842057428080fc0783421886205742808080f80f" + "834208868484205742088842808080f80f832057421888428080fc078384" + "20574228884280fe03832057423888848484225e42a9c0c689aece93b230" + "54205e42a9c0c689aece93b230511b1b2205417f470440200541ff01710d" + "07206a42c6faf3c3ed82a3903c562065428d95c7c396d2dac0977f562065" + "428d95c7c396d2dac0977f511b0d070b200a290074225742388620574280" + "fe0383422886842057428080fc0783421886205742808080f80f83420886" + "8484205742088842808080f80f832057421888428080fc07838420574228" + "884280fe03832057423888848484215a200a41fc006a2900002257423886" + "20574280fe0383422886842057428080fc0783421886205742808080f80f" + "834208868484205742088842808080f80f832057421888428080fc078384" + "20574228884280fe03832057423888848484215c417f200a290064225742" + "b0c8b99297bc8cd02985200a41ec006a290000225842b8a195b29bb0a0ac" + "dd008584420052205842388620584280fe0383422886842058428080fc07" + "83421886205842808080f80f834208868484205842088842808080f80f83" + "2058421888428080fc07838420584228884280fe03832058423888848484" + "225942ddb0858ce8b691a8b87f54205742388620574280fe038342288684" + "2057428080fc0783421886205742808080f80f8342088684842057420888" + "42808080f80f832057421888428080fc07838420574228884280fe038320" + "57423888848484225442a9c0c689aece93b23054205442a9c0c689aece93" + "b230511b1b2205417f470440200541ff01710d07205c42c6faf3c3ed82a3" + "903c56205a428d95c7c396d2dac0977f56205a428d95c7c396d2dac0977f" + "511b0d070b200a29009401225742388620574280fe038342288684205742" + "8080fc0783421886205742808080f80f8342088684842057420888428080" + "80f80f832057421888428080fc07838420574228884280fe038320574238" + "88848484215b200a419c016a290000225742388620574280fe0383422886" + "842057428080fc0783421886205742808080f80f83420886848420574208" + "8842808080f80f832057421888428080fc07838420574228884280fe0383" + "20574238888484842161417f200a29008401225742b0c8b99297bc8cd029" + "85200a418c016a290000225842b8a195b29bb0a0acdd0085844200522058" + "42388620584280fe0383422886842058428080fc07834218862058428080" + "80f80f834208868484205842088842808080f80f832058421888428080fc" + "07838420584228884280fe03832058423888848484225842ddb0858ce8b6" + "91a8b87f54205742388620574280fe0383422886842057428080fc078342" + "1886205742808080f80f834208868484205742088842808080f80f832057" + "421888428080fc07838420574228884280fe038320574238888484842257" + "42a9c0c689aece93b23054205742a9c0c689aece93b230511b1b2205417f" + "470440200541ff01710d07206142c6faf3c3ed82a3903c56205b428d95c7" + "c396d2dac0977f56205b428d95c7c396d2dac0977f511b0d070b200141e0" + "066a2020100620012d00e0060d06200141f51c6a200141f8066a29030022" + "53370000200141b80b6a20014188076a290300370300200141b00b6a2001" + "4180076a290300370300200120012903f0063703a00b200120533703a80b" + "200120623703900b2001206a3703800b200120593703f00a2001205c3703" + "e00a2001205e3703980b200120653703880b200120543703f80a2001205a" + "3703e80a200120573703d80b200120583703d00b2001205b3703c80b2001" + "20613703c00b200141e0066a200141e00a6a200141a00b6a100720012d00" + "e0060d06200141801f6a200141ad186a200141cd1a6a200141ee1c6a2001" + "41ae0c6a200141f0066a418001104c418001104c418001104c418001104c" + "418001104c1a200141e0066a2022100620012d00e0060d06200141b5186a" + "2205200141f8066a22062903002257370000200141f80a6a20014188076a" + "2202290300370300200141f00a6a20014180076a22202903003703002001" + "20012903f0063703e00a200120573703e80a200141e0066a200910062001" + "2d00e0060d06200520062903002257370000200141b80b6a200229030037" + "0300200141b00b6a2020290300370300200120012903f0063703a00b2001" + "20573703a80b200141e0066a200141e00a6a200141a00b6a100520012d00" + "e0060d06200141e50c6a2205200141a8076a290300370000200141dd0c6a" + "2206200141a0076a290300370000200141d50c6a220220014198076a2903" + "00370000200141cd0c6a222020014190076a290300370000200141c50c6a" + "222220014188076a290300370000200141bd0c6a220920014180076a2903" + "00370000200141b50c6a2223200141f8066a290300370000200120012903" + "f0063700ad0c200141a51d6a222420052900003700002001419d1d6a2205" + "2006290000370000200141951d6a220620022900003700002001418d1d6a" + "22022020290000370000200141851d6a22202022290000370000200141fd" + "1c6a22222009290000370000200141f51c6a220920232900003700002001" + "20012900ad0c3700ed1c200141d8086a2024290000370300200141d0086a" + "2005290000370300200141c8086a2006290000370300200141c0086a2002" + "290000370300200141b8086a2020290000370300200141b0086a20222900" + "00370300200141a8086a2009290000370300200120012900ed1c3703a008" + "200141e8076a20012903a80a370300200141f0076a200141b00a6a290300" + "370300200141f8076a200141b80a6a29030037030020014180086a200141" + "c00a6a29030037030020014188086a200141c80a6a290300370300200141" + "90086a200141d00a6a29030037030020014198086a200141d80a6a290300" + "370300200120012903a00a3703e007200141e0066a200141801f6a418001" + "104c1a20014190016a2001419d036a200141ad0f6a200141e0066a418002" + "104c418002104c418002104c1a2012411f4d0d0f200141a00f6a201f1008" + "20012d00a00f0d06200141e50c6a200141e80f6a29030022573700002001" + "41dd0c6a200141e00f6a2903002258370000200141d50c6a200141d80f6a" + "290300225e370000200141cd0c6a200141d00f6a29030022653700002001" + "41f00b6a200141c00f6a290300370300200141f80b6a200141c80f6a2903" + "00370300200141800c6a2065370300200141880c6a205e37030020014190" + "0c6a2058370300200141980c6a2057370300200120012903b00f3703e00b" + "2001200141b80f6a2903003703e80b201241ff004d0d10200141a00f6a20" + "1f41406b100920012d00a00f0d06200141a0186a200141ad0c6a200141b0" + "0f6a418001104c418001104c1a201241bf014d0d11200141a00f6a201f41" + "80016a100920012d00a00f0d06200141c01a6a200141ad0c6a200141b00f" + "6a418001104c418001104c1a2012419f024d0d12200141a00f6a201f41e0" + "016a100920012d00a00f0d06200141e01c6a200141ad0c6a200141b00f6a" + "418001104c418001104c1a201241a002460d13201241a102460d14201241" + "a2024d0d15201241a302460d16201f2d00a0022105201f2d00a102210620" + "1f2d00a3022102201f2d00a202212041002126200141003602a80b200142" + "8080808080023702a00b2005200641087472202041107472200241187472" + "220504404101200541187420054180fe03714108747220054108764180fe" + "0371200541187672722205200541014d1b210c200141ad0c6a2105200141" + "b00f6a210641a40221024100212241102108410021200340202041f6ffff" + "3f460d19200241206a220920124b0d1a200141a00f6a2002201f6a100820" + "012d00a00f0d0320052006290000370000200541386a2202200641386a29" + "0000370000200541306a2223200641306a290000370000200541286a2224" + "200641286a290000370000200541206a2226200641206a29000037000020" + "0541186a2235200641186a290000370000200541106a222d200641106a29" + "0000370000200541086a2247200641086a290000370000200141901f6a22" + "48202d290000370300200141981f6a222d2035290000370300200141a01f" + "6a22352026290000370300200141a81f6a22262024290000370300200141" + "b01f6a22242023290000370300200141b81f6a2223200229000037030020" + "0120052900003703801f200120472900003703881f20012802a00b202046" + "044041002108230041206b2203240002400240200141a00b6a221b280200" + "220f417f460d00200f4101742202200f41016a220e2002200e4b1b220241" + "ffffff1f4b0d0041042002200241044d1b2202410674220e41f0ffffff07" + "4b0d002003200f047f2003200f41067436021c2003201b28020436021441" + "100541000b360218200341086a4110200e200341146a1028200328020841" + "01470d0120032802101a200328020c21080b200841dc90c0001019000b20" + "0328020c210f201b2002360200201b200f360204200341206a2400200128" + "02a40b21080b200820226a220220012903801f370300200241386a202329" + "0300370300200241306a2024290300370300200241286a20262903003703" + "00200241206a2035290300370300200241186a202d290300370300200241" + "106a2048290300370300200241086a20012903881f370300200120204101" + "6a22203602a80b202241406b212220092102200c2020470d000b20012802" + "a00b21260b20012902a40b216a200141a00c6a200141a0186a100a200141" + "a00d6a200141e01c6a418001104c1a200141a00e6a200141c01a6a418001" + "104c1a200141d6126a200141980c6a290300370100200141ce126a200141" + "900c6a290300370100200141c6126a200141880c6a290300370100200141" + "be126a200141800c6a290300370100200141b6126a200141f80b6a290300" + "370100200141ae126a200141f00b6a290300370100200141a6126a200129" + "03e80b370100200120012903e00b37019e1220012d00a00c210520012d00" + "a10c2106200141a00f6a200141a00c6a41027241fe02104c1a200141e006" + "6a200141a00f6a41be03104c1a2026418080808078460d0620014190036a" + "410272200141e0066a41be03104c1a200120263602d006200120063a0091" + "03200120053a0090034100210241bda9c0002d00001a2001206a3702d406" + "41c000100b2220450d07206a4220882262a72122206aa72135200141b00f" + "6a2105200141306a2106410021120340230041206b22092400200941186a" + "221b2006290000225342388620534280fe0383422886842053428080fc07" + "83421886205342808080f80f834208868484205342088842808080f80f83" + "2053421888428080fc07838420534228884280fe03832053423888848484" + "370300200941106a2208200641086a290000225342388620534280fe0383" + "422886842053428080fc0783421886205342808080f80f83420886848420" + "5342088842808080f80f832053421888428080fc07838420534228884280" + "fe0383205342388884848437030020092006290010225342388620534280" + "fe0383422886842053428080fc0783421886205342808080f80f83420886" + "8484205342088842808080f80f832053421888428080fc07838420534228" + "884280fe038320534238888484843703082009200641186a290000225342" + "388620534280fe0383422886842053428080fc0783421886205342808080" + "f80f834208868484205342088842808080f80f832053421888428080fc07" + "838420534228884280fe0383205342388884848437030020094201420042" + "0042004281808080bfb2fdf0c3004291e1e5cd8789fa9928102b200141a0" + "0f6a220c41003a0000200c41286a201b290300370300200c41206a200829" + "0300370300200c41186a2009290308370300200c20092903003703102009" + "41206a240020012d00a00f4101460d1a200141f8066a200541186a290300" + "2257370300200141f0066a200541106a2903002258370300200120052903" + "00225e3703e0062001200541086a29030022653703e80620202012410574" + "6a220641186a2057370300200641106a2058370300200641086a20653703" + "002006205e370300410121122002410171211f4101210220162106201f45" + "0d000b206a42ffffffffffffffff03560d1a2022410674220541f1ffffff" + "074f0d1a2005450d0341bda9c0002d00001a2005100b2206450d07200620" + "352005104c211220624203520d02206a428080808010540d042001419006" + "6a212d20014190056a214720014190046a2148200141f81a6a221f201241" + "386a290300370300200141f01a6a2216201241306a290300370300200141" + "e81a6a2222201241286a290300370300200141e01a6a2209201241206a29" + "0300370300200141d81a6a2223201241186a290300370300200141d01a6a" + "2224201241106a290300370300200120122903003703c01a200120124108" + "6a2903003703c81a2020210541c00021060340200141d80c6a201f290300" + "370300200141d00c6a2016290300370300200141c80c6a20222903003703" + "00200141c00c6a2009290300370300200141b80c6a202329030037030020" + "0141b00c6a2024290300370300200120012903c81a3703a80c2001200129" + "03c01a3703a00c200120053602e00c2001200620126a22023602e40c2001" + "41e01c6a21312002210c4100212e41002136230041a0046b220424002004" + "41306a212b20044180036a2137200441e0036a210f200441f0016a210e20" + "0441c0026a211b200441e0026a2108200441b0026a2149200441d0026a21" + "4a41ff012141034002402004204141ff0071104f2005204141037641f0ff" + "ffff01716a22422903002004290300832159204241086a29030020044108" + "6a29030083215302400240027f0240024002400240024020364101714504" + "4041002053205984500d061a200441e0006a200441206a29030037030020" + "0441e8006a200441286a290300370300200441f0006a202b290300370300" + "200441f8006a200441386a29030037030020044180016a200441406b2903" + "0037030020044188016a200441c8006a2903003703002004200429031037" + "035020042004290318370358202e0d010c030b202e450d0120044188026a" + "200441c8006a222e29030037030020044180026a200441406b2250290300" + "370300200441f8016a200441386a2203290300370300200e202b29030037" + "0300200441e8016a200441286a2236290300370300200441e0016a200441" + "206a2242290300370300200420042903183703d801200420042903103703" + "d001200441d8036a224b4200370300200441d0036a220242003703002004" + "42003703f803200442003703f003200442003703e803200442013703e003" + "200442003703c803200442003703c003024002400240200441d0016a2004" + "41c0036a104a450440200e200f104a450d010b204b420037030020024200" + "370300200442003703f803200442003703f003200442003703e803200442" + "013703e003200442003703c803200442003703c003027f0240200441d001" + "6a200441c0036a104a450440200e200f104a450d010b2049202b29030037" + "0300204941186a202b41186a290300370300204941106a202b41106a2903" + "00370300204941086a202b41086a290300370300200441a0026a20422903" + "00370300200441a8026a2036290300370300200420042903103703900220" + "0420042903183703980220082102204a0c010b204a4200370300200441a0" + "026a4200370300200441a8026a4200370300204a41086a4200370300204a" + "41106a4200370300204a41186a4200370300200442003703900220044200" + "37039802201b210220490b214b2002420037030820024200370300204b42" + "00370308204b4201370300200441c0036a20044190026a20044190026a10" + "40200441f0026a200441c0036a104120042802f002410171450d01200441" + "c8016a203741386a290300370300200441c0016a203741306a2903003703" + "00200441b8016a203741286a290300370300200441b0016a203741206a29" + "0300370300200441a8016a203741186a290300370300200441a0016a2037" + "41106a29030037030020042037290300370390012004203741086a290300" + "370398010c020b200441a0016a2042290300370300200441a8016a203629" + "0300370300200441b0016a202b290300370300200441b8016a2003290300" + "370300200441c0016a2050290300370300200441c8016a202e2903003703" + "00200420042903103703900120042004290318370398010c010b41c4a0c0" + "00412041e4a0c0001021000b2042200441a0016a29030037030020362004" + "41a8016a290300370300202b200441b0016a2903003703002003200441b8" + "016a2903003703002050200441c0016a290300370300202e200441c8016a" + "290300370300200420042903900137031020042004290398013703182053" + "205984500d04200441e0006a2042290300370300200441e8006a20362903" + "00370300200441f0006a202b290300370300200441f8006a200329030037" + "030020044180016a205029030037030020044188016a202e290300370300" + "20042004290310370350200420042903183703580b200441c0036a200441" + "d0006a200c100c0c020b20532059844200520d002041450d044101213641" + "00212e0c050b200441f8036a200c41386a290300370300200441f0036a20" + "0c41306a290300370300200441e8036a200c41286a290300370300200f20" + "0c41206a290300370300200441d8036a200c41186a290300370300200441" + "d0036a200c41106a2903003703002004200c2903003703c0032004200c41" + "086a2903003703c8030b200441c8006a200441f8036a2903003703002004" + "41406b200441f0036a290300370300200441386a200441e8036a29030037" + "0300202b200f290300370300200441286a200441d8036a29030037030020" + "0441206a200441d0036a290300370300200420042903c803370318200420" + "042903c0033703100b4101212e41010b213620410d01202e0d020b4184a1" + "c0001020000b204141016b21410c010b0b20312004290310370300203141" + "086a2004290318370300203141386a200441c8006a290300370300203141" + "306a200441406b290300370300203141286a200441386a29030037030020" + "3141206a200441306a290300370300203141186a200441286a2903003703" + "00203141106a200441206a290300370300200441a0046a2400200541206a" + "2105200141c01a6a200141a00c6a200141e01c6a100c200641406b220641" + "c001470d000b200141b00f6a2205200141c01a6a100d201241c001100e20" + "0141c01a6a200141ed066a200541e000104c41e000104c1a200141e0066a" + "20014190026a100d200141a0186a21024200215c42002154420021532001" + "41e0066a220541386a2903002161200541286a290300215b200529033021" + "592005290320215e027e200529034022652005290350226a84200541c800" + "6a2903002262200541d8006a290300225a84845004402059215c20612154" + "205b2153205e0c010b42002059205e84205b20618484500d001a427f4200" + "427f4200205e42788342c7faf3c3ed82a3903c561b225c205b205c56ad7d" + "205c205b7d225b42f3eab8bce9ada5bfe8007d2253205b54ad7c42017c22" + "5b20597d225442a4cffaf397c9eed7c7007d225c205454ad2059205b56ad" + "7d427f511b20617d42a9c0c689aece93b2307c215442c7faf3c3ed82a390" + "3c205e7d0b21612002206a370350200220653703402002205c3703302002" + "20613703202002205a370358200220623703482002205437033820022053" + "37032820022005290300370300200241186a200541186a29030037030020" + "0241106a200541106a290300370300200241086a200541086a2903003703" + "0020014180196a20014190016a100f200141a01b6a2047100f200141e01c" + "6a200141d0026a100d200141c01d6a2048100f200141e0066a202d100d20" + "0141801f6a20014190036a100f200141c0076a2108420021654200215b42" + "00215c42002153024002400240200141801f6a2202290380012002418801" + "6a290300844200520d0020022903900120024198016a290300844200520d" + "0020022903a001200241a8016a290300844200520d0020022903b0012002" + "41b8016a29030084500d010b200241f8006a2903002159200241e8006a29" + "0300215e2002290370215420022903602161200229035022582002290340" + "226a84200241d8006a290300225a200241c8006a29030022628484420052" + "0440427f4200427f4200206a42788342c7faf3c3ed82a3903c561b226520" + "62206556ad7d206520627d226542f3eab8bce9ada5bfe8007d2253206554" + "ad7c42017c225c20587d225b42a4cffaf397c9eed7c7007d2265205b54ad" + "2058205c56ad7d427f511b205a7d42a9c0c689aece93b2307c215c42c7fa" + "f3c3ed82a3903c206a7d215b0b420021584200216a420021624200215a20" + "542061842059205e84844200520440427f4200427f4200206142788342c7" + "faf3c3ed82a3903c561b22582058205e54ad7d2058205e7d225e42f3eab8" + "bce9ada5bfe8007d226a205e54ad7c42017c225e20547d225842a4cffaf3" + "97c9eed7c7007d2262205854ad2054205e56ad7d427f511b20597d42a9c0" + "c689aece93b2307c215a42c7faf3c3ed82a3903c20617d21580b20082002" + "4180016a22052903003703800120082002290300370300200841b8016a20" + "0541386a290300370300200841b0016a200541306a290300370300200841" + "a8016a200541286a290300370300200841a0016a200541206a2903003703" + "0020084198016a200541186a29030037030020084190016a200541106a29" + "030037030020084188016a200541086a290300370300200841086a200241" + "086a290300370300200841106a200241106a290300370300200841186a20" + "0241186a290300370300200841206a200241206a29030037030020084128" + "6a200241286a290300370300200841306a200241306a2903003703002008" + "41386a200241386a2903003703002008205a370378200820623703702008" + "206a370368200820583703602008205c3703582008206537035020082053" + "3703482008205b3703400c010b2008200241c001104c1a0b200141a00f6a" + "200141a0186a41a002104c1a200141c0116a200141c01a6a41a002104c1a" + "200141e0136a200141e01c6a41a002104c1a20014180166a200141e0066a" + "41a002104c1a200141a00c6a2131230041b0d1006b220024002000410036" + "023820004280808080800237023020004100360244200042808080808002" + "37023c41102133200041306a10362000280234223b200141a00f6a220341" + "e000104c1a20004101360238200341e0006a2102200028023c4504402000" + "413c6a1038200028024021330b2033200241c001104c1a200341a0026a21" + "022000410136024420002802304101460440200041306a10362000280234" + "213b0b203b41e0006a200241e000104c1a2000410236023820034180036a" + "2102200028023c41014604402000413c6a1038200028024021330b203341" + "c0016a200241c001104c1a200341c0046a21022000410236024420002802" + "304102460440200041306a10362000280234213b0b203b41c0016a200241" + "e000104c1a20004103360238200341a0056a2102200028023c4102460440" + "2000413c6a1038200028024021330b20334180036a200241c001104c1a20" + "0341e0066a21022000410336024420002802304103460440200041306a10" + "362000280234213b0b203b41a0026a200241e000104c1a20004104360238" + "200341c0076a2103200028023c41034604402000413c6a10382000280240" + "21330b203341c0046a200341c001104c1a20004104360244200041003602" + "502000428080808080023702482000410036025c20004280808080800237" + "025420004180046a2151200041e00d6a2104200041b0076a212c20004190" + "c1006a2143200041d0c0006a2128200041f0c0006a2144200041c00d6a21" + "0b200041d0286a2106200041d01f6a211820004180c7006a212b200041b0" + "c7006a2107200041c0c7006a213c200041f0c6006a2102200041800e6a21" + "2d200041903b6a213d200041f03a6a2127200041d03a6a213e200041f00d" + "6a213f200041b00d6a221041086a212e200041f8c6006a214c200041b8c7" + "006a214d20004188c7006a214e200041c8c7006a211220004198c7006a21" + "1f200041d8c7006a2122200041a8c7006a2123200041e8c7006a21244110" + "2138411021050340200041e0006a203b204f41e0006c6a22031041200041" + "b0016a2033204f41c0016c6a220d104502402000280260410171450d0020" + "002802b001410171450d00200041a00d6a2003104120002802a00d410171" + "45044041a4a3c0001020000b200041f8026a2211201041386a2903003703" + "00200041f0026a2213201041306a290300370300200041e8026a22092010" + "41286a290300370300200041e0026a2215201041206a2903003703002000" + "41d8026a220f201041186a290300370300200041d0026a2225201041106a" + "290300370300200020102903003703c0022000202e2903003703c8022000" + "280248203946044041002108230041206b220e240002400240200041c800" + "6a221b280200220c417f460d00200c4101742205200c41016a2216200520" + "164b1b220541ffffff1f4b0d0041042005200541044d1b22054106742216" + "41f0ffffff074b0d00200e200c047f200e200c41067436021c200e201b28" + "020436021441100541000b360218200e41086a2016200e41146a1037200e" + "2802084101470d01200e2802101a200e28020c21080b200841b4a3c00010" + "19000b200e28020c210c201b2005360200201b200c360204200e41206a24" + "00200028024c21050b200520394106746a220320002903c0023703002003" + "41386a2011290300370300200341306a2013290300370300200341286a20" + "09290300370300200341206a2015290300370300200341186a200f290300" + "370300200341106a2025290300370300200341086a20002903c802370300" + "2000203941016a2239360250200041a00d6a200d10450240024020002802" + "a00d4101710440200041b03a6a2010418001104c1a200041d80d6a222542" + "00370300200041d00d6a223a4200370300200041c80d6a22294200370300" + "200b4200370300200041b80d6a220d420037030020104200370300203f42" + "00370300203f41086a4200370300203f41106a4200370300203f41186a42" + "00370300203f41206a4200370300203f41286a4200370300200042003703" + "e80d200042013703e00d200042003703a80d200042003703a00d027f0240" + "0240200041b03a6a200041a00d6a104a0d00203e200b104a0d0020272004" + "104a0d00203d202d104a450d010b203c4200370300200220272903003703" + "00203c41086a4200370300203c41106a4200370300203c41186a42003703" + "00203c41206a4200370300203c41286a4200370300200241386a20274138" + "6a290300370300200241306a202741306a290300370300200241286a2027" + "41286a290300370300200241206a202741206a290300370300200241186a" + "202741186a290300370300200241106a202741106a290300370300200241" + "086a202741086a290300370300200041e8c6006a200041e83a6a29030037" + "0300200041e0c6006a200041e03a6a290300370300200041d8c6006a2000" + "41d83a6a290300370300200041d0c6006a203e290300370300200041c8c6" + "006a200041c83a6a290300370300200041c0c6006a200041c03a6a290300" + "370300200020002903b83a3703b846200020002903b03a3703b04620070c" + "010b200041c0c6006a4200370300200041c8c6006a4200370300200041d0" + "c6006a4200370300200041d8c6006a4200370300200041e0c6006a420037" + "0300200041e8c6006a4200370300200042003703b046200042003703b846" + "202b41f000104b1a20020b220342003703082003420137030041bda9c000" + "2d00001a41809901100b221e450d0141002109200041003602b819200020" + "1e3602b419200041e6003602b019200041b03d6a200041b03a6a100a4140" + "212a0340200041a00d6a200041b0c6006a2002102f200041c8c3006a2215" + "200d290300370300200041c0c3006a220f20102903003703002000200029" + "03a80d3703b843200020002903a00d3703b043200041b0c3006a42a4fdf9" + "e1b6c191889e7f42c6cae3a18ba9ade04b42aed88286b4db88945c4294a0" + "e38497e789991842c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b" + "200041a8076a2211200b41186a221b290300370300200041a0076a221320" + "0b41106a22342903003703002000200b41086a2240290300370398072000" + "200b2903003703900720004190076a42a4fdf9e1b6c191889e7f42c6cae3" + "a18ba9ade04b42aed88286b4db88945c4294a0e38497e789991842c7faf3" + "c3ed82a3903c428d95c7c396d2dac0977f102b200041c81f6a2015290300" + "370300200041c01f6a200f29030037030020182000290390073703002018" + "41086a200029039807370300201841106a2013290300370300201841186a" + "2011290300370300200020002903b8433703b81f200020002903b0433703" + "b01f200041e8346a2203200241386a290300370300200041e0346a200241" + "306a290300370300200041d8346a2232200241286a290300370300200041" + "d0346a200241206a290300370300200041c8346a220e200241186a290300" + "370300200041c0346a200241106a2903003703002000200241086a290300" + "3703b834200020022903003703b034200041b0346a20022002102f200041" + "e8376a2219200741386a290300370300200041e0376a200741306a290300" + "370300200041d8376a221a200741286a290300370300200041d0376a2007" + "41206a290300370300200041c8376a222f200741186a2903003703002000" + "41c0376a2230200741106a2903003703002000200741086a2903003703b8" + "37200020072903003703b037200041b0376a20072007102f20002903b837" + "226942018620002903b037226b423f88842155206b420186215402400240" + "027e203029030022664201862069423f8884225342ddb0858ce8b691a8b8" + "7f85202f290300227820787c2066423f887c225642a9c0c689aece93b230" + "8584500440205442c7faf3c3ed82a3903c542055428d95c7c396d2dac097" + "7f542055428d95c7c396d2dac0977f511b450d0242a9c0c689aece93b230" + "215642ddb0858ce8b691a8b87f0c010b205342deb0858ce8b691a8b87f54" + "205642a9c0c689aece93b23054205642a9c0c689aece93b230511b450d01" + "20530b215a2054215f205521580c010b205620532055205442c7faf3c3ed" + "82a3903c7d225f20545aad22547d225942f3eab8bce9ada5bfe8007c2258" + "205954ad2054205556ad7d7c2255205354ad205542a2cffaf397c9eed7c7" + "007c225a205554ad7c50ad7d42a9c0c689aece93b2307d21560b201a2903" + "00226742018620002903d037226f423f88842154206f4201862153024002" + "4020002903e037225e4201862067423f8884225942ddb0858ce8b691a8b8" + "7f852019290300227720777c205e423f887c225542a9c0c689aece93b230" + "8584500440205342c7faf3c3ed82a3903c542054428d95c7c396d2dac097" + "7f542054428d95c7c396d2dac0977f511b450d0142a9c0c689aece93b230" + "215542ddb0858ce8b691a8b87f21602053215b205421700c020b205942de" + "b0858ce8b691a8b87f54205542a9c0c689aece93b23054205542a9c0c689" + "aece93b230511b450d002053215b20542170205921600c010b2055205920" + "54205342c7faf3c3ed82a3903c7d225b20535aad22537d226042f3eab8bc" + "e9ada5bfe8007c2270206054ad2053205456ad7d7c2254205954ad205442" + "a2cffaf397c9eed7c7007c2260205454ad7c50ad7d42a9c0c689aece93b2" + "307d21550b02400240027e205a20667c225a205820697c2254206954ad20" + "54205f206b7c2259206b54ad7c2253205454ad7c7c225442ddb0858ce8b6" + "91a8b87f85205a206654ad2054205a54ad7c205620787c7c225642a9c0c6" + "89aece93b2308584500440205942c7faf3c3ed82a3903c542053428d95c7" + "c396d2dac0977f542053428d95c7c396d2dac0977f511b450d0242a9c0c6" + "89aece93b230215642ddb0858ce8b691a8b87f0c010b205442deb0858ce8" + "b691a8b87f54205642a9c0c689aece93b23054205642a9c0c689aece93b2" + "30511b450d0120540b215f205921582053215c0c010b2056205420532059" + "42c7faf3c3ed82a3903c7d225820595aad22597d225a42f3eab8bce9ada5" + "bfe8007c225c205a54ad2053205954ad7d7c2253205454ad205342a2cffa" + "f397c9eed7c7007c225f205354ad7c50ad7d42a9c0c689aece93b2307d21" + "560b02400240205e20607c225a206720707c2254206754ad2054205b206f" + "7c2259206f54ad7c2253205454ad7c7c225442ddb0858ce8b691a8b87f85" + "205a205e54ad2054205a54ad7c205520777c7c225542a9c0c689aece93b2" + "308584500440205942c7faf3c3ed82a3903c542053428d95c7c396d2dac0" + "977f542053428d95c7c396d2dac0977f511b450d0142a9c0c689aece93b2" + "30215542ddb0858ce8b691a8b87f21542059215a205321590c020b205442" + "deb0858ce8b691a8b87f54205542a9c0c689aece93b23054205542a9c0c6" + "89aece93b230511b450d002059215a205321590c010b2055205420532059" + "42c7faf3c3ed82a3903c7d225a20595aad22607d225b42f3eab8bce9ada5" + "bfe8007c2259205b54ad2053206054ad7d7c2253205454ad205342a2cffa" + "f397c9eed7c7007c2254205354ad7c50ad7d42a9c0c689aece93b2307d21" + "550b200020543703e0222000205a3703d0222000205f3703c02220002058" + "3703b022200020553703e822200020593703d822200020563703c8222000" + "205c3703b822200042d4fdc3d783f6c4cb003703d80d200042f4fbe3f6de" + "f5ab964d3703d00d200042d2b0b4a9ce90e8a7a77f3703c80d200042d2ab" + "8caee8a0afd1643703c00d200042aed5e2f58ca8a78a2b3703b80d200042" + "c3d581df919386df817f3703b00d200042a3dfefced5bcb1dab57f3703a8" + "0d200042e5f184a5c2dbf9b3323703a00d200041b0256a200041a00d6a20" + "0041b0226a102f20002903b825226442018620002903b025226e423f8884" + "2155206e420186215402400240027e20002903c02522704201862064423f" + "8884225342ddb0858ce8b691a8b87f85200041c8256a2219290300226020" + "607c2070423f887c225642a9c0c689aece93b2308584500440205442c7fa" + "f3c3ed82a3903c542055428d95c7c396d2dac0977f542055428d95c7c396" + "d2dac0977f511b450d0242a9c0c689aece93b230215642ddb0858ce8b691" + "a8b87f0c010b205342deb0858ce8b691a8b87f54205642a9c0c689aece93" + "b23054205642a9c0c689aece93b230511b450d0120530b215a2054215f20" + "5521580c010b205620532055205442c7faf3c3ed82a3903c7d225f20545a" + "ad22547d225942f3eab8bce9ada5bfe8007c2258205954ad2054205556ad" + "7d7c2255205354ad205542a2cffaf397c9eed7c7007c225a205554ad7c50" + "ad7d42a9c0c689aece93b2307d21560b200041d8256a221a290300227142" + "018620002903d0252265423f888421542065420186215302400240200029" + "03e025225c4201862071423f8884225942ddb0858ce8b691a8b87f852000" + "41e8256a2217290300225b205b7c205c423f887c225542a9c0c689aece93" + "b2308584500440205342c7faf3c3ed82a3903c542054428d95c7c396d2da" + "c0977f542054428d95c7c396d2dac0977f511b450d0142a9c0c689aece93" + "b230215542ddb0858ce8b691a8b87f21682053216c205421730c020b2059" + "42deb0858ce8b691a8b87f54205542a9c0c689aece93b23054205542a9c0" + "c689aece93b230511b450d002053216c20542173205921680c010b205520" + "592054205342c7faf3c3ed82a3903c7d226c20535aad22537d226842f3ea" + "b8bce9ada5bfe8007c2273206854ad2053205456ad7d7c2254205954ad20" + "5442a2cffaf397c9eed7c7007c2268205454ad7c50ad7d42a9c0c689aece" + "93b2307d21550b02400240027e205a20707c225a205820647c2254206454" + "ad2054205f206e7c2259206e54ad7c2253205454ad7c7c225442ddb0858c" + "e8b691a8b87f85205a207054ad2054205a54ad7c205620607c7c225a42a9" + "c0c689aece93b2308584500440205942c7faf3c3ed82a3903c542053428d" + "95c7c396d2dac0977f542053428d95c7c396d2dac0977f511b450d0242a9" + "c0c689aece93b230215a42ddb0858ce8b691a8b87f0c010b205442deb085" + "8ce8b691a8b87f54205a42a9c0c689aece93b23054205a42a9c0c689aece" + "93b230511b450d0120540b21742059217d2053216a0c010b205a20542053" + "205942c7faf3c3ed82a3903c7d227d20595aad22567d225942f3eab8bce9" + "ada5bfe8007c226a205954ad2053205654ad7d7c2256205454ad205642a2" + "cffaf397c9eed7c7007c2274205654ad7c50ad7d42a9c0c689aece93b230" + "7d215a0b02400240205c20687c2259207120737c2256207154ad20562065" + "206c7c2253206554ad7c2254205654ad7c7c225642ddb0858ce8b691a8b8" + "7f852059205c54ad2056205954ad7c2055205b7c7c225f42a9c0c689aece" + "93b2308584500440205342c7faf3c3ed82a3903c542054428d95c7c396d2" + "dac0977f542054428d95c7c396d2dac0977f511b450d0142a9c0c689aece" + "93b230215f42ddb0858ce8b691a8b87f21732053217b205421790c020b20" + "5642deb0858ce8b691a8b87f54205f42a9c0c689aece93b23054205f42a9" + "c0c689aece93b230511b450d002053217b20542179205621730c010b205f" + "20562054205342c7faf3c3ed82a3903c7d227b20535aad22557d225342f3" + "eab8bce9ada5bfe8007c2279205354ad2054205554ad7d7c2255205654ad" + "205542a2cffaf397c9eed7c7007c2273205554ad7c50ad7d42a9c0c689ae" + "ce93b2307d215f0b02400240027e207420002903c03422547c2256206a20" + "002903b83422537c2255206a54ad2055207d20002903b03422587c226820" + "7d54ad7c2259205554ad7c7c225542ddb0858ce8b691a8b87f8520562074" + "54ad2055205654ad7c205a200e29030022567c7c226d42a9c0c689aece93" + "b2308584500440206842c7faf3c3ed82a3903c542059428d95c7c396d2da" + "c0977f542059428d95c7c396d2dac0977f511b450d0242a9c0c689aece93" + "b230216d42ddb0858ce8b691a8b87f0c010b205542deb0858ce8b691a8b8" + "7f54206d42a9c0c689aece93b23054206d42a9c0c689aece93b230511b45" + "0d0120550b2172206821752059217a0c010b206d20552059206842c7faf3" + "c3ed82a3903c7d227520685aad22687d226c42f3eab8bce9ada5bfe8007c" + "227a206c54ad2059206854ad7d7c2259205554ad205942a2cffaf397c9ee" + "d7c7007c2272205954ad7c50ad7d42a9c0c689aece93b2307d216d0b0240" + "0240207320002903e03422597c22552079203229030022687c2263207954" + "ad2063207b20002903d034226c7c2261207b54ad7c2262206354ad7c7c22" + "5d42ddb0858ce8b691a8b87f852055207354ad2055205d56ad7c205f2003" + "29030022557c7c226342a9c0c689aece93b2308584500440206142c7faf3" + "c3ed82a3903c542062428d95c7c396d2dac0977f542062428d95c7c396d2" + "dac0977f511b450d0142a9c0c689aece93b230216342ddb0858ce8b691a8" + "b87f215d20612157206221610c020b205d42deb0858ce8b691a8b87f5420" + "6342a9c0c689aece93b23054206342a9c0c689aece93b230511b450d0020" + "612157206221610c010b2063205d2062206142c7faf3c3ed82a3903c7d22" + "5720615aad227c7d227642f3eab8bce9ada5bfe8007c2261207654ad2062" + "207c54ad7d7c2262205d54ad206242a2cffaf397c9eed7c7007c225d2062" + "54ad7c50ad7d42a9c0c689aece93b2307d21630b2011206d370300201320" + "723703002000207a37039807200020753703900720004190076a42a4fdf9" + "e1b6c191889e7f42c6cae3a18ba9ade04b42aed88286b4db88945c4294a0" + "e38497e789991842c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b" + "200d20633703002010205d370300200020613703a80d200020573703a00d" + "200041a00d6a42a4fdf9e1b6c191889e7f42c6cae3a18ba9ade04b42aed8" + "8286b4db88945c4294a0e38497e789991842c7faf3c3ed82a3903c428d95" + "c7c396d2dac0977f102b200041c8286a22032011290300370300200041c0" + "286a220e2013290300370300200620002903a00d370300200641086a2000" + "2903a80d370300200641106a2010290300370300200641186a200d290300" + "37030020002000290398073703b82820002000290390073703b028024002" + "40027e20002903c04722612000290380477c226d204d290300225d204c29" + "03007c2263205d54ad206320002903b047225d20002903f0467c2262205d" + "54ad7c225d206354ad7c7c226342ddb0858ce8b691a8b87f852061206d56" + "ad2063206d54ad7c2012290300204e2903007c7c226d42a9c0c689aece93" + "b2308584500440206242c7faf3c3ed82a3903c54205d428d95c7c396d2da" + "c0977f54205d428d95c7c396d2dac0977f511b450d0242a9c0c689aece93" + "b230216d42ddb0858ce8b691a8b87f0c010b206342deb0858ce8b691a8b8" + "7f54206d42a9c0c689aece93b23054206d42a9c0c689aece93b230511b45" + "0d0120630b217220622175205d217a0c010b206d2063205d206242c7faf3" + "c3ed82a3903c7d227520625aad22627d226142f3eab8bce9ada5bfe8007c" + "227a206154ad205d206254ad7d7c225d206354ad205d42a2cffaf397c9ee" + "d7c7007c2272205d54ad7c50ad7d42a9c0c689aece93b2307d216d0b0240" + "024020002903e047225720002903a0477c226320222903002262201f2903" + "007c225d206254ad205d20002903d04722622000290390477c2261206254" + "ad7c2262205d54ad7c7c225d42ddb0858ce8b691a8b87f852057206356ad" + "205d206354ad7c202429030020232903007c7c226342a9c0c689aece93b2" + "308584500440206142c7faf3c3ed82a3903c542062428d95c7c396d2dac0" + "977f542062428d95c7c396d2dac0977f511b450d0142a9c0c689aece93b2" + "30216342ddb0858ce8b691a8b87f215d20612157206221610c020b205d42" + "deb0858ce8b691a8b87f54206342a9c0c689aece93b23054206342a9c0c6" + "89aece93b230511b450d0020612157206221610c010b2063205d20622061" + "42c7faf3c3ed82a3903c7d225720615aad227c7d227642f3eab8bce9ada5" + "bfe8007c2261207654ad2062207c54ad7d7c2262205d54ad206242a2cffa" + "f397c9eed7c7007c225d206254ad7c50ad7d42a9c0c689aece93b2307d21" + "630b200d206d3703002010207237030020292061370300200b2057370300" + "203a205d37030020252063370300200041c0c0006a224520723703002000" + "41c8c0006a2232206d37030020282057370300200041d8c0006a22142061" + "370300200041e0c0006a205d370300200041e8c0006a221c206337030020" + "0020753703a00d200020753703b0402000207a3703a80d2000207a3703b8" + "40200041b0c0006a200041a00d6a200041a00d6a102f02400240027e2054" + "20667c226d205320697c2262206954ad20622058206b7c2263206b54ad7c" + "225d206254ad7c7c226b42ddb0858ce8b691a8b87f852066206d56ad206b" + "206d54ad7c205620787c7c226942a9c0c689aece93b23085845004402063" + "42c7faf3c3ed82a3903c54205d428d95c7c396d2dac0977f54205d428d95" + "c7c396d2dac0977f511b450d0242a9c0c689aece93b230216942ddb0858c" + "e8b691a8b87f0c010b206b42deb0858ce8b691a8b87f54206942a9c0c689" + "aece93b23054206942a9c0c689aece93b230511b450d01206b0b216d2063" + "2178205d21630c010b2069206b205d206342c7faf3c3ed82a3903c7d2278" + "20635aad22667d226d42f3eab8bce9ada5bfe8007c2263206d54ad205d20" + "6654ad7d7c2266206b54ad206642a2cffaf397c9eed7c7007c226d206654" + "ad7c50ad7d42a9c0c689aece93b2307d21690b024002402059205e7c226b" + "206720687c2266206754ad2066206c206f7c225d206f54ad7c2267206654" + "ad7c7c226642ddb0858ce8b691a8b87f85205e206b56ad2066206b54ad7c" + "205520777c7c226b42a9c0c689aece93b2308584500440205d42c7faf3c3" + "ed82a3903c542067428d95c7c396d2dac0977f542067428d95c7c396d2da" + "c0977f511b450d0142a9c0c689aece93b230216b42ddb0858ce8b691a8b8" + "7f216f205d21772067215e0c020b206642deb0858ce8b691a8b87f54206b" + "42a9c0c689aece93b23054206b42a9c0c689aece93b230511b450d00205d" + "21772067215e2066216f0c010b206b20662067205d42c7faf3c3ed82a390" + "3c7d2277205d5aad226f7d225d42f3eab8bce9ada5bfe8007c225e205d54" + "ad2067206f54ad7d7c2267206654ad206742a2cffaf397c9eed7c7007c22" + "6f206754ad7c50ad7d42a9c0c689aece93b2307d216b0b20002903b84021" + "5d20002903b040216102400240417f20002903c0402267206d8520322903" + "002266206985844200522067206d54206620695420662069511b1b222141" + "7f470440202141ff01710d01206120785a205d20635a205d2063511b0d01" + "0b20662067205d206142c7faf3c3ed82a3903c7c2262206154ad7c226120" + "5d54ad206142f3eab8bce9ada5bfe8007d225d206154ad7c7c2261206754" + "ad7c206142a3cffaf397c9eed7c7007d2275206154ad7c42a9c0c689aece" + "93b2307c21660c010b20672175206121620b205d20637d227a2062207854" + "ad225754ad217c205d206354ad21762014290300215d20002903d0402172" + "02400240417f20002903e0402263206f85201c2903002267206b85844200" + "522063206f542067206b542067206b511b1b2214417f470440201441ff01" + "710d01207220775a205d205e5a205d205e511b0d010b20672063205d2072" + "42c7faf3c3ed82a3903c7c2261207254ad7c2272205d54ad207242f3eab8" + "bce9ada5bfe8007d225d207254ad7c7c2272206354ad7c207242a3cffaf3" + "97c9eed7c7007d227e207254ad7c42a9c0c689aece93b2307c21670c010b" + "2063217e207221610b206d427f85216d2076207c7c2172206f427f852163" + "205d205e54ad205d205e7d225d2061207754ad227c54ad7c217602400240" + "417f20542070852056206085844200522054207056205620605620562060" + "511b1b2214417f470440201441ff01710d012058206e5820532064582053" + "2064511b0d010b206020702064206e42c7faf3c3ed82a3903c7c225e206e" + "54ad7c226f206454ad206f42f3eab8bce9ada5bfe8007d226e206f54ad7c" + "7c2264207054ad206442a3cffaf397c9eed7c7007d2270206454ad7c7c42" + "a9c0c689aece93b2307c21600c010b206e215e2064216e0b206d20757c21" + "64420120727d21722063207e7c216f420120767d2175206020567d205442" + "7f85227620707c2260207654ad206042012053206e56ad7d206e20537d22" + "702058205e56ad226e54ad7d7c227f206054ad7c50ad7d21762070206e7d" + "216e205e20587d217e02400240417f2059205c852055205b858442005220" + "59205c562055205b562055205b511b1b2214417f470440201441ff01710d" + "012065206c5a206820715820682071511b0d010b205b205c2071206542c7" + "faf3c3ed82a3903c7c225e206554ad7c2260207154ad206042f3eab8bce9" + "ada5bfe8007d2271206054ad7c7c2260205c54ad206042a3cffaf397c9ee" + "d7c7007d225c206054ad7c7c42a9c0c689aece93b2307c215b0c010b2065" + "215e0b206420727c2160206f20757c2170200f200041c0c6006a29030037" + "03002015200041c8c6006a290300370300200041d0c3006a200041d0c600" + "6a290300370300200041d8c3006a2214200041d8c6006a29030037030020" + "0041e0c3006a200041e0c6006a290300370300200041e8c3006a221c2000" + "41e8c6006a2903003703002000207f3703c02b2000207e3703b02b200020" + "002903b0463703b043200020002903b8463703b8432000205e206c7d3703" + "d02b200020763703c82b2000206e3703b82b2000207120687d226e205e20" + "6c54ad225e7d3703d82b20002059427f852265205c7c225c420120682071" + "56ad7d205e206e56ad7d7c22713703e02b2000205b20557d205c207156ad" + "205c206554ad7c50ad7d3703e82b200041b0c3006a200041b0c6006a2000" + "41b0c6006a102f200041c8076a22212017290300370300200041c0076a20" + "0041e0256a290300370300200041b8076a2217201a290300370300202c20" + "0041d0256a290300370300201120192903003703002013200041c0256a29" + "0300370300200020002903b82537039807200020002903b0253703900720" + "004190076a200041b0256a200041b0256a102f0240417f20542074852056" + "205a858442005220542074542056205a542056205a511b1b2219417f4704" + "40201941ff01710d012058207d5a2053206a5a2053206a511b0d010b2056" + "20542053205842c7faf3c3ed82a3903c7c225b205854ad7c2258205354ad" + "205842f3eab8bce9ada5bfe8007d225c205854ad7c7c2253205454ad2053" + "42a3cffaf397c9eed7c7007d2254205354ad7c7c42a9c0c689aece93b230" + "7c2156205b2158205c21530b2064206d5421192060206454211a2063206f" + "56210c206f20705621162056205a7d2074427f85225a20547c2256205a54" + "ad205642012053206a54ad7d2053206a7d22542058207d54ad225354ad7d" + "7c225a205654ad7c50ad7d215b205420537d21532058207d7d2158024002" + "40417f20592073852055205f858442005220592073542055205f54205520" + "5f511b1b2208417f470440200841ff01710d01206c207b5a206820795a20" + "682079511b0d010b205520592068206c42c7faf3c3ed82a3903c7c225620" + "6c54ad7c225c206854ad205c42f3eab8bce9ada5bfe8007d2254205c54ad" + "7c7c225c205954ad205c42a3cffaf397c9eed7c7007d2259205c54ad7c7c" + "42a9c0c689aece93b2307c21550c010b206c2156206821540b2019ad215c" + "201aad2164200cad21712016ad216c2000205a3703c031200020583703b0" + "3120002056207b7d3703d0312000205b3703c831200020533703b8312000" + "205420797d22532056207b54ad225a7d3703d83120002073427f85225820" + "597c225642012054207954ad7d2053205a54ad7d7c22543703e031200020" + "55205f7d2054205654ad2056205854ad7c50ad7d3703e831200041b0c600" + "6a200041b01f6a200041b0316a102f2010200e290300370300200d200329" + "0300370300200b20062903003703002029200041d8286a29030037030020" + "3a200041e0286a2903003703002025200041e8286a290300370300200020" + "002903b0283703a00d200020002903b8283703a80d200041a00d6a200041" + "b0286a200041b0286a102f20002903980722544201862000290390072253" + "423f888421552053420186215a02400240027e20002903a0072259420186" + "2054423f8884225f42ddb0858ce8b691a8b87f852011290300226820687c" + "2059423f887c225642a9c0c689aece93b2308584500440205a42c7faf3c3" + "ed82a3903c542055428d95c7c396d2dac0977f542055428d95c7c396d2da" + "c0977f511b450d0242a9c0c689aece93b230215642ddb0858ce8b691a8b8" + "7f0c010b205f42deb0858ce8b691a8b87f54205642a9c0c689aece93b230" + "54205642a9c0c689aece93b230511b450d01205f0b216f205a215e205521" + "740c010b2056205f2055205a42c7faf3c3ed82a3903c7d225e205a5aad22" + "5a7d225842f3eab8bce9ada5bfe8007c2274205854ad2055205a54ad7d7c" + "2255205f54ad205542a2cffaf397c9eed7c7007c226f205554ad7c50ad7d" + "42a9c0c689aece93b2307d21560b205c20647c2173206c20717c216c2017" + "290300225a42018620002903b007225f423f8884215b205f420186215c02" + "40024020002903c0072258420186205a423f8884226442ddb0858ce8b691" + "a8b87f852021290300227120717c2058423f887c225542a9c0c689aece93" + "b2308584500440205c42c7faf3c3ed82a3903c54205b428d95c7c396d2da" + "c0977f54205b428d95c7c396d2dac0977f511b450d0142a9c0c689aece93" + "b230215542ddb0858ce8b691a8b87f216e205c2165205b216a0c020b2064" + "42deb0858ce8b691a8b87f54205542a9c0c689aece93b23054205542a9c0" + "c689aece93b230511b450d00205c2165205b216a2064216e0c010b205520" + "64205b205c42c7faf3c3ed82a3903c7d2265205c5aad225c7d226e42f3ea" + "b8bce9ada5bfe8007c226a206e54ad205b205c54ad7d7c225b206454ad20" + "5b42a2cffaf397c9eed7c7007c226e205b54ad7c50ad7d42a9c0c689aece" + "93b2307d21550b2073502103206c50210e02400240027e2059206f7c225b" + "205420747c2264205454ad20642053205e7c225c205354ad7c2253206454" + "ad7c7c225442ddb0858ce8b691a8b87f852059205b56ad2054205b54ad7c" + "205620687c7c225642a9c0c689aece93b2308584500440205c42c7faf3c3" + "ed82a3903c542053428d95c7c396d2dac0977f542053428d95c7c396d2da" + "c0977f511b450d0242a9c0c689aece93b230215642ddb0858ce8b691a8b8" + "7f0c010b205442deb0858ce8b691a8b87f54205642a9c0c689aece93b230" + "54205642a9c0c689aece93b230511b450d0120540b215b205c2164205321" + "5c0c010b205620542053205c42c7faf3c3ed82a3903c7d2264205c5aad22" + "597d225b42f3eab8bce9ada5bfe8007c225c205b54ad2053205954ad7d7c" + "2253205454ad205342a2cffaf397c9eed7c7007c225b205354ad7c50ad7d" + "42a9c0c689aece93b2307d21560b2003ad2168206620697d216c200ead21" + "662067206b7d2167024002402058206e7c2269205a206a7c2254205a54ad" + "2054205f20657c2259205f54ad7c2253205454ad7c7c225442ddb0858ce8" + "b691a8b87f852058206956ad2054206954ad7c205520717c7c225542a9c0" + "c689aece93b2308584500440205942c7faf3c3ed82a3903c542053428d95" + "c7c396d2dac0977f542053428d95c7c396d2dac0977f511b450d0142a9c0" + "c689aece93b230215542ddb0858ce8b691a8b87f215a2059217120532169" + "0c020b205442deb0858ce8b691a8b87f54205542a9c0c689aece93b23054" + "205542a9c0c689aece93b230511b450d0020592171205321692054215a0c" + "010b205520542053205942c7faf3c3ed82a3903c7d227120595aad22597d" + "225a42f3eab8bce9ada5bfe8007c2269205a54ad2053205954ad7d7c2253" + "205454ad205342a2cffaf397c9eed7c7007c225a205354ad7c50ad7d42a9" + "c0c689aece93b2307d21550b206c20687d216b207a20577d215320672066" + "7d2168205d207c7d215920002903a80d215820002903a00d216602400240" + "417f20002903b00d225f205b85200d290300225420568584420052205b20" + "5f56205420565420542056511b1b2203417f470440200341ff01710d0120" + "642066582058205c5a2058205c511b0d010b2054205f2058206642c7faf3" + "c3ed82a3903c7c226c206654ad7c2267205854ad206742f3eab8bce9ada5" + "bfe8007d2266206754ad7c7c2258205f54ad7c205842a3cffaf397c9eed7" + "c7007d2267205854ad7c42a9c0c689aece93b2307c21540c010b205f2167" + "2066216c205821660b206220787d215f206120777d2158205420567d205b" + "427f85225420677c2256205454ad2056205c206656ad2066205c7d225420" + "64206c56ad225b54ad7c7d42017c2266205654ad7c50ad7d21672054205b" + "7d216f206c20647d216c2029290300215b20002903c00d21640240024041" + "7f20002903d00d2254205a8520252903002256205585844200522054205a" + "54205520565620552056511b1b2203417f470440200341ff01710d012064" + "20715a205b20695a205b2069511b0d010b20562054205b206442c7faf3c3" + "ed82a3903c7c225c206454ad7c2264205b54ad206442f3eab8bce9ada5bf" + "e8007d225b206454ad7c7c2264205454ad7c206442a3cffaf397c9eed7c7" + "007d2254206454ad7c42a9c0c689aece93b2307c21560c010b2064215c0b" + "20002066370380472000206c3703f0462000205c20717d37039047200020" + "67370388472000206f3703f8462000205b20697d2264205c207154ad225c" + "7d370398472000205a427f85225a20547c2254205b206954ad205c206456" + "ad7c7d42017c225b3703a0472000205620557d2054205a54ad2054205b56" + "ad7c50ad7d3703a847200020683703e831200020703703e0312000205937" + "03d831200020583703d031200020603703c0312000206b3703c831200020" + "5f3703b031200020533703b8312007200041b0346a200041b0316a102f42" + "002164200042003703e831200042003703e031200042003703d831200042" + "013703d031200042003703c831200042003703c031200042003703b83120" + "0042093703b031200041b02e6a200041b0316a200041b02b6a102f420021" + "714200216c4200216642002167205f2060842053206b8484420052044042" + "c7faf3c3ed82a3903c205f7d2166427f4200427f4200205f42788342c7fa" + "f3c3ed82a3903c561b22562053205656ad7d205620537d225642f3eab8bc" + "e9ada5bfe8007d2267205654ad7c42017c225620607d225542a4cffaf397" + "c9eed7c7007d2271205554ad2056206054ad7d427f511b206b7d42a9c0c6" + "89aece93b2307c216c0b4200216b4200216f4200215e2058207084205920" + "688484420052044042c7faf3c3ed82a3903c20587d2164427f4200427f42" + "00205842788342c7faf3c3ed82a3903c561b22562056205954ad7d205620" + "597d225642f3eab8bce9ada5bfe8007d226b205654ad7c42017c22562070" + "7d225542a4cffaf397c9eed7c7007d226f205554ad2056207054ad7d427f" + "511b20687d42a9c0c689aece93b2307c215e0b20002903b8432254420186" + "20002903b0432253423f888421552053420186215a02400240027e200029" + "03c04322594201862054423f8884225f42ddb0858ce8b691a8b87f852015" + "290300227020707c2059423f887c225642a9c0c689aece93b23085845004" + "40205a42c7faf3c3ed82a3903c542055428d95c7c396d2dac0977f542055" + "428d95c7c396d2dac0977f511b450d0242a9c0c689aece93b230215642dd" + "b0858ce8b691a8b87f0c010b205f42deb0858ce8b691a8b87f54205642a9" + "c0c689aece93b23054205642a9c0c689aece93b230511b450d01205f0b21" + "68205a2174205521730c010b2056205f2055205a42c7faf3c3ed82a3903c" + "7d2274205a5aad225a7d225842f3eab8bce9ada5bfe8007c2273205854ad" + "2055205a54ad7d7c2255205f54ad205542a2cffaf397c9eed7c7007c2268" + "205554ad7c50ad7d42a9c0c689aece93b2307d21560b2014290300225a42" + "018620002903d043225f423f88842160205f420186215b02400240200029" + "03e0432258420186205a423f8884226942ddb0858ce8b691a8b87f85201c" + "290300225c205c7c2058423f887c225542a9c0c689aece93b23085845004" + "40205b42c7faf3c3ed82a3903c542060428d95c7c396d2dac0977f542060" + "428d95c7c396d2dac0977f511b450d0142a9c0c689aece93b230215542dd" + "b0858ce8b691a8b87f216e205b21652060216a0c020b206942deb0858ce8" + "b691a8b87f54205542a9c0c689aece93b23054205542a9c0c689aece93b2" + "30511b450d00205b21652060216a2069216e0c010b205520692060205b42" + "c7faf3c3ed82a3903c7d2265205b5aad225b7d226e42f3eab8bce9ada5bf" + "e8007c226a206e54ad205b206056ad7d7c2260206954ad206042a2cffaf3" + "97c9eed7c7007c226e206054ad7c50ad7d42a9c0c689aece93b2307d2155" + "0b02400240027e205920687c225b205420737c2269205454ad2069205320" + "747c2260205354ad7c2253206954ad7c7c225442ddb0858ce8b691a8b87f" + "852059205b56ad2054205b54ad7c205620707c7c225642a9c0c689aece93" + "b2308584500440206042c7faf3c3ed82a3903c542053428d95c7c396d2da" + "c0977f542053428d95c7c396d2dac0977f511b450d0242a9c0c689aece93" + "b230215642ddb0858ce8b691a8b87f0c010b205442deb0858ce8b691a8b8" + "7f54205642a9c0c689aece93b23054205642a9c0c689aece93b230511b45" + "0d0120540b215b20602170205321690c010b205620542053206042c7faf3" + "c3ed82a3903c7d227020605aad22597d226042f3eab8bce9ada5bfe8007c" + "2269206054ad2053205954ad7d7c2253205454ad205342a2cffaf397c9ee" + "d7c7007c225b205354ad7c50ad7d42a9c0c689aece93b2307d21560b0240" + "02402058206e7c2260205a206a7c2254205a54ad2054205f20657c225920" + "5f54ad7c2253205454ad7c7c225442ddb0858ce8b691a8b87f8520582060" + "56ad2054206054ad7c2055205c7c7c225542a9c0c689aece93b230858450" + "0440205942c7faf3c3ed82a3903c542053428d95c7c396d2dac0977f5420" + "53428d95c7c396d2dac0977f511b450d0142a9c0c689aece93b230215542" + "ddb0858ce8b691a8b87f21542059215a205321590c020b205442deb0858c" + "e8b691a8b87f54205542a9c0c689aece93b23054205542a9c0c689aece93" + "b230511b450d002059215a205321590c010b205520542053205942c7faf3" + "c3ed82a3903c7d225a20595aad225f7d225842f3eab8bce9ada5bfe8007c" + "2259205854ad2053205f54ad7d7c2253205454ad205342a2cffaf397c9ee" + "d7c7007c2254205354ad7c50ad7d42a9c0c689aece93b2307d21550b2000" + "41e81c6a2203200041e82e6a290300370300200041e01c6a220e200041e0" + "2e6a290300370300200041d81c6a2219200041d82e6a2903003703002000" + "41d01c6a221a200041d02e6a290300370300200041c81c6a2217200041c8" + "2e6a290300370300200041c01c6a2214200041c02e6a2903003703002000" + "20002903b82e3703b81c200020002903b02e3703b01c20002802b0192009" + "460440200041b0196a41c4a2c000103920002802b419211e0b2017290300" + "21532019290300215f2003290300215820002903b81c2160201e200941c0" + "016c6a220320553703b80120142903002155201a290300215c200e290300" + "216820002903b01c2174200320543703b001200320593703a8012003205a" + "3703a00120032056370398012003205b3703900120032069370388012003" + "2070370380012003205e3703782003206f3703702003206b370368200320" + "643703602003206c37035820032071370350200320673703482003206637" + "034020032074370300200341386a2058370300200341306a206837030020" + "0341286a205f370300200341206a205c370300200341186a205337030020" + "0341106a2055370300200341086a20603703002000200941016a22033602" + "b81902400240200041b0196a027f02400240202a41e4a1c0006a2d000041" + "016b0e03000401040b200041b0c9006a200041b0c6006a200041b03a6a10" + "49200041b0c9006a210e200320002802b019470d0241d4a2c0000c010b20" + "0041b0ce006a200041b0c6006a200041b03d6a1049200041b0ce006a210e" + "200320002802b019470d0141e4a2c0000b103920002802b419211e0b201e" + "200341c0016c6a200e41c001104c1a2000200941026a22033602b8190b20" + "032109202a41016a222a0d000b200042a0dcae8f86aaf9e4163703c80720" + "0042948fe8babd91b3d2cb003703c007200042cebbf2dbd0c38ad7323703" + "b807200042a297bfa0c6a3f5b2163703b007200042f7a3e4fb84f3d1d92f" + "3703a807200042c3e2e6aacf87fb85cc003703a0072000428ce68c968ce2" + "b0c6b77f37039807200042bdaabdbbf1aae5f1997f370390072015203e41" + "186a290300370300200f203e41106a2903003703002000203e41086a2903" + "003703b8432000203e2903003703b043200041b0c3006a42c6faf3c3ed82" + "a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689" + "aece93b23042c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b200d" + "200041c83a6a2903003703002010200041c03a6a290300370300200b2000" + "2903b043370300204020002903b8433703002034200f290300370300201b" + "2015290300370300200020002903b83a3703a80d200020002903b03a3703" + "a00d200041b0c0006a20004190076a200041a00d6a102f2000429a8984e2" + "ca978fe0073703c807200042abdee5e3feb4ad82073703c007200042d2b7" + "89fd98b99fc0213703b807200042e3e18eb1b2ecdfe9827f3703b0072000" + "42dcebebc4d4e0bc9e063703a807200042b9f38bb78bd3b1af5c3703a007" + "20004298b3a5ceda9db8d55b37039807200042daa6808de7a880aa5c3703" + "90072015203d41186a290300370300200f203d41106a2903003703002000" + "203d41086a2903003703b8432000203d2903003703b043200041b0c3006a" + "42c6faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8" + "b87f42a9c0c689aece93b23042c7faf3c3ed82a3903c428d95c7c396d2da" + "c0977f102b200d202741186a2903003703002010202741106a2903003703" + "00200b20002903b043370300204020002903b8433703002034200f290300" + "370300201b20152903003703002000202741086a2903003703a80d200020" + "272903003703a00d204420004190076a200041a00d6a102f200042a0dcae" + "8f86aaf9e4163703e843200042948fe8babd91b3d2cb003703e043200042" + "cebbf2dbd0c38ad7323703d843200042a297bfa0c6a3f5b2163703d04320" + "0042f7a3e4fb84f3d1d92f3703c843200042c3e2e6aacf87fb85cc003703" + "c0432000428ce68c968ce2b0c6b77f3703b843200042bdaabdbbf1aae5f1" + "997f3703b043202f202841186a2903003703002030202841106a29030037" + "03002000202841086a2903003703b837200020282903003703b037200041" + "b0376a42c6faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8" + "b691a8b87f42a9c0c689aece93b23042c7faf3c3ed82a3903c428d95c7c3" + "96d2dac0977f102b2011203229030037030020132045290300370300202c" + "20002903b037370300202c41086a220d20002903b837370300202c41106a" + "22092030290300370300202c41186a2215202f2903003703002000200029" + "03b84037039807200020002903b04037039007200041a00d6a200041b0c3" + "006a20004190076a102f2000429a8984e2ca978fe0073703e843200042ab" + "dee5e3feb4ad82073703e043200042d2b789fd98b99fc0213703d8432000" + "42e3e18eb1b2ecdfe9827f3703d043200042dcebebc4d4e0bc9e063703c8" + "43200042b9f38bb78bd3b1af5c3703c04320004298b3a5ceda9db8d55b37" + "03b843200042daa6808de7a880aa5c3703b043202f204341186a29030037" + "03002030204341106a2903003703002000204341086a2903003703b83720" + "0020432903003703b037200041b0376a42c6faf3c3ed82a3903c428d95c7" + "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b23042c7" + "faf3c3ed82a3903c428d95c7c396d2dac0977f102b2011204441186a2903" + "003703002013204441106a290300370300202c20002903b037370300200d" + "20002903b837370300200920302903003703002015202f29030037030020" + "00204441086a2903003703980720002044290300370390072004200041b0" + "c3006a20004190076a102f200041b0c3006a200041a00d6a100a20004190" + "076a200041b0c6006a200041b0c0006a104920002802b019221120034604" + "40200041b0196a41a4a2c000103920002802b019211120002802b419211e" + "0b201e200341c0016c6a20004190076a41c001104c1a2000200341016a22" + "0d3602b819200041a00d6a200041b0c6006a200041b0c3006a1049200d20" + "11470d02200041b0196a41b4a2c000103920002802b419211e0c020b41c4" + "a3c00010200b000b201e200d41c0016c6a200041a00d6a41c001104c1a20" + "0041b8196a220d200341026a36020020004180036a200041b03a6a418001" + "104c1a205141086a200d280200360200205120002902b019370200200028" + "025420464604404100211b230041206b220e240002400240200041d4006a" + "22162802002209417f460d00410420094101742208200941016a220c2008" + "200c4b1b2208200841044d1b220cad4290017e22534220884200520d0020" + "53a7220841f0ffffff074b0d00200e2009047f200e20094190016c36021c" + "200e201628020436021441100541000b360218200e41086a2008200e4114" + "6a1037200e2802084101470d01200e2802101a200e28020c211b0b201b41" + "d4a3c0001019000b200e28020c21092016200c3602002016200936020420" + "0e41206a2400200028025821380b203820464190016c6a20004180036a41" + "9001104c1a2000204641016a224636025c0b204f41016a224f4104470d00" + "0b0240024002400240024002400240024002400240024002402046450440" + "2000280254210320004190076a41f002104b1a20030d010c020b41002118" + "200041a0076a41f002104b1a200042003703980720004201370390072046" + "2039203920464b1b210820384184016a211b200041e00e6a2134200041b0" + "cf006a2119200041f0ce006a211a200041f0c3006a2114200041b0c4006a" + "2121200041b0ca006a2140200041f0c9006a2145200041b0c7006a214c20" + "004190086a212c200041f0c6006a214d200041d0076a212820004190096a" + "211c200041d0096a214e200041d0086a2117200041d0ce006a2110200041" + "d0c9006a21134100210c0240024002400340200041b0c3006a2000419007" + "6a2017103b200042003703e849200042003703e049200042003703d84920" + "0042013703d049200042003703c849200042003703c049200042003703b8" + "49200042093703b049200041b0ce006a204e200041b0c9006a102f201941" + "386a2203201c41386a290300370300201941306a2202201c41306a290300" + "370300201941286a2207201c41286a290300370300201941206a220b201c" + "41206a290300370300201941186a220d201c41186a290300370300201941" + "106a2211201c41106a290300370300201941086a2206201c41086a290300" + "3703002019201c290300370300201a2017290300370300201a41086a2209" + "201741086a290300370300201a41106a2215201741106a29030037030020" + "1a41186a220f201741186a290300370300201a41206a2225201741206a29" + "0300370300201a41286a2229201741286a290300370300201a41306a222a" + "201741306a290300370300201a41386a221e201741386a29030037030020" + "0041b0c6006a200041b0ce006a20004190076a1030204d201a2028103020" + "4c2019202c1030200041b0ce006a201741c001104c1a200041b0c9006a20" + "004190076a2017103020452028201a10302040202c20191030200041b0ce" + "006a200041b0c6006a200041b0c9006a103b200041b0c9006a200041b0ce" + "006a200041b0c3006a103c200042003703e846200042003703e046200042" + "003703d846200042013703d046200042003703c846200042003703c04620" + "0042003703b846200042093703b046200041b0ce006a2021200041b0c600" + "6a102f201a20002903b043370300200920002903b8433703002015200041" + "c0c3006a290300370300200f200041c8c3006a2903003703002025200041" + "d0c3006a2903003703002029200041d8c3006a290300370300202a200041" + "e0c3006a290300370300201e200041e8c3006a2903003703002003201441" + "386a2903003703002002201441306a2903003703002007201441286a2903" + "00370300200b201441206a290300370300200d201441186a290300370300" + "2011201441106a2903003703002006201441086a29030037030020192014" + "290300370300200041a00d6a200041b0c9006a200041b0ce006a103c2000" + "41b0ce006a200041b0c3006a200041b0c3006a1030201a20142014103020" + "192021202110302034200041b0ce006a41c001104c1a20004190076a2000" + "41a00d6a418003104c1a200c41016a2116201b2106200521022008210f02" + "7f02402039450440200c41a4a1c0006a2d00000d01201841016a21182016" + "220c41c000460d040c030b02400340200641046a280200220320184b0440" + "200241386a2903002156200241306a2903002155200241286a2903002154" + "200241206a2903002153200041c8ce006a220d2006280200201841c0016c" + "6a220341d8006a290300370300200041c0ce006a2211200341d0006a2903" + "003703002000200341c8006a2903003703b84e200020032903403703b04e" + "200041b0ce006a205320542055205642c7faf3c3ed82a3903c428d95c7c3" + "96d2dac0977f102b200041b80d6a2207200341f8006a2903003703002000" + "41b00d6a220b200341f0006a2903003703002000200341e8006a29030037" + "03a80d200020032903603703a00d200041a00d6a205320542055205642c7" + "faf3c3ed82a3903c428d95c7c396d2dac0977f102b200041c8c9006a2225" + "200d290300370300200041c0c9006a222920112903003703002013200029" + "03a00d370300201341086a222a20002903a80d370300201341106a221e20" + "0b290300370300201341186a222f2007290300370300200020002903b84e" + "3703b849200020002903b04e3703b049200241186a290300215620024110" + "6a2903002155200241086a290300215420022903002153200041c8c6006a" + "220920034198016a290300370300200041c0c6006a221520034190016a29" + "0300370300200020034188016a2903003703b84620002003290380013703" + "b046200041b0c6006a205320542055205642c7faf3c3ed82a3903c428d95" + "c7c396d2dac0977f102b2007200341b8016a290300370300200b200341b0" + "016a2903003703002000200341a8016a2903003703a80d200020032903a0" + "013703a00d200041a00d6a205320542055205642c7faf3c3ed82a3903c42" + "8d95c7c396d2dac0977f102b200d20092903003703002011201529030037" + "0300201020002903a00d370300201041086a223020002903a80d37030020" + "1041106a223a200b290300370300201041186a2232200729030037030020" + "0020002903b8463703b84e200020002903b0463703b04e200041a00d6a20" + "004190076a2003200041b0c9006a200041b0ce006a104820004190076a20" + "0041a00d6a418003104c1a20064190016a2106200241406b2102200f4101" + "6b220f0d010c020b0b201820034194a2c0001010000b201b210620052102" + "2008210e201841016a220f200c41a4a1c0006a2d0000450d011a03402006" + "41046a2802002203200f4b0440200241386a2903002156200241306a2903" + "002155200241286a2903002154200241206a2903002153200d2006280200" + "200f41c0016c6a220341d8006a2903003703002011200341d0006a290300" + "3703002000200341c8006a2903003703b84e200020032903403703b04e20" + "0041b0ce006a205320542055205642c7faf3c3ed82a3903c428d95c7c396" + "d2dac0977f102b2007200341f8006a290300370300200b200341f0006a29" + "03003703002000200341e8006a2903003703a80d200020032903603703a0" + "0d200041a00d6a205320542055205642c7faf3c3ed82a3903c428d95c7c3" + "96d2dac0977f102b2025200d290300370300202920112903003703002013" + "20002903a00d370300202a20002903a80d370300201e200b290300370300" + "202f2007290300370300200020002903b84e3703b849200020002903b04e" + "3703b049200241186a2903002156200241106a2903002155200241086a29" + "0300215420022903002153200920034198016a2903003703002015200341" + "90016a290300370300200020034188016a2903003703b846200020032903" + "80013703b046200041b0c6006a205320542055205642c7faf3c3ed82a390" + "3c428d95c7c396d2dac0977f102b2007200341b8016a290300370300200b" + "200341b0016a2903003703002000200341a8016a2903003703a80d200020" + "032903a0013703a00d200041a00d6a205320542055205642c7faf3c3ed82" + "a3903c428d95c7c396d2dac0977f102b200d200929030037030020112015" + "290300370300201020002903a00d370300203020002903a80d370300203a" + "200b29030037030020322007290300370300200020002903b8463703b84e" + "200020002903b0463703b04e200041a00d6a20004190076a2003200041b0" + "c9006a200041b0ce006a104820004190076a200041a00d6a418003104c1a" + "20064190016a2106200241406b2102200e41016b220e0d010c020b0b200f" + "20034184a2c0001010000b201841026a0b21182016220c41c000470d000b" + "2039450d0020384184016a2107200041d0ce006a210b200041d0c9006a21" + "0d201841c0016c2125200521022008210903402018200741046a28020022" + "034f0d02200241386a2903002156200241306a2903002155200241286a29" + "03002154200241206a2903002153200041c8ce006a221320072802002025" + "6a220341d8006a290300370300200041c0ce006a2206200341d0006a2903" + "003703002000200341c8006a2903003703b84e200020032903403703b04e" + "200041b0ce006a205320542055205642c7faf3c3ed82a3903c428d95c7c3" + "96d2dac0977f102b200041b80d6a2211200341f8006a2903003703002000" + "41b00d6a2210200341f0006a2903003703002000200341e8006a29030037" + "03a80d200020032903603703a00d200041a00d6a205320542055205642c7" + "faf3c3ed82a3903c428d95c7c396d2dac0977f102b200041c8c9006a2013" + "290300370300200041c0c9006a2006290300370300200d20002903a00d37" + "0300200d41086a20002903a80d370300200d41106a201029030037030020" + "0d41186a2011290300370300200020002903b84e3703b849200020002903" + "b04e3703b049200241186a2903002156200241106a290300215520024108" + "6a290300215420022903002153200041c8c6006a221520034198016a2903" + "00370300200041c0c6006a220f20034190016a2903003703002000200341" + "88016a2903003703b84620002003290380013703b046200041b0c6006a20" + "5320542055205642c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b" + "2011200341b8016a2903003703002010200341b0016a2903003703002000" + "200341a8016a2903003703a80d200020032903a0013703a00d200041a00d" + "6a205320542055205642c7faf3c3ed82a3903c428d95c7c396d2dac0977f" + "102b201320152903003703002006200f290300370300200b20002903a00d" + "370300200b41086a20002903a80d370300200b41106a2010290300370300" + "200b41186a2011290300370300200020002903b8463703b84e2000200029" + "03b0463703b04e200041a00d6a20004190076a2003200041b0c9006a2000" + "41b0ce006a104820004190076a200041a00d6a418003104c1a2007419001" + "6a2107200241406b2102200941016b22090d000b20384184016a21072000" + "41d0ce006a210b200041d0c9006a210d201841016a221841c0016c210f20" + "05210203402018200741046a28020022034f0d03200241386a2903002156" + "200241306a2903002155200241286a2903002154200241206a2903002153" + "200041c8ce006a22132007280200200f6a220341d8006a29030037030020" + "0041c0ce006a2206200341d0006a2903003703002000200341c8006a2903" + "003703b84e200020032903403703b04e200041b0ce006a20532054205520" + "5642c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b200041b80d6a" + "2211200341f8006a290300370300200041b00d6a2210200341f0006a2903" + "003703002000200341e8006a2903003703a80d200020032903603703a00d" + "200041a00d6a205320542055205642c7faf3c3ed82a3903c428d95c7c396" + "d2dac0977f102b200041c8c9006a2013290300370300200041c0c9006a20" + "06290300370300200d20002903a00d370300200d41086a20002903a80d37" + "0300200d41106a2010290300370300200d41186a20112903003703002000" + "20002903b84e3703b849200020002903b04e3703b049200241186a290300" + "2156200241106a2903002155200241086a29030021542002290300215320" + "0041c8c6006a220920034198016a290300370300200041c0c6006a221520" + "034190016a290300370300200020034188016a2903003703b84620002003" + "290380013703b046200041b0c6006a205320542055205642c7faf3c3ed82" + "a3903c428d95c7c396d2dac0977f102b2011200341b8016a290300370300" + "2010200341b0016a2903003703002000200341a8016a2903003703a80d20" + "0020032903a0013703a00d200041a00d6a205320542055205642c7faf3c3" + "ed82a3903c428d95c7c396d2dac0977f102b201320092903003703002006" + "2015290300370300200b20002903a00d370300200b41086a20002903a80d" + "370300200b41106a2010290300370300200b41186a201129030037030020" + "0020002903b8463703b84e200020002903b0463703b04e200041a00d6a20" + "004190076a2003200041b0c9006a200041b0ce006a104820004190076a20" + "0041a00d6a418003104c1a20074190016a2107200241406b210220084101" + "6b22080d000b0b20004190046a20004190076a418003104c1a200041b03d" + "6a20004190046a103d200041b03a6a200041d0056a221f103d2000420037" + "03e834200042003703e034200042003703d834200042013703d034200042" + "003703c834200042003703c034200042003703b834200042093703b03420" + "0041b0ce006a200041b03b6a200041b0346a102f200041b8cf006a223620" + "0041f83a6a290300370300200041c0cf006a2237200041803b6a29030037" + "0300200041c8cf006a2242200041883b6a290300370300200041d0cf006a" + "2241200041903b6a290300370300200041d8cf006a2247200041983b6a29" + "0300370300200041e0cf006a2248200041a03b6a290300370300200041e8" + "cf006a224b200041a83b6a290300370300200041f8ce006a222220002903" + "b83a37030020004180cf006a2223200041c03a6a22492903003703002000" + "4188cf006a2224200041c83a6a224a29030037030020004190cf006a224f" + "200041d03a6a225029030037030020004198cf006a2227200041d83a6a22" + "39290300370300200041a0cf006a223f200041e03a6a223c290300370300" + "200041a8cf006a223e200041e83a6a2244290300370300200020002903f0" + "3a3703b04f200020002903b03a3703f04e200041b0376a200041b03d6a20" + "0041b0ce006a103c200041e8106a2217200041e8376a220f290300370300" + "200041e0106a2214200041e0376a2225290300370300200041d8106a221c" + "200041d8376a2229290300370300200041d0106a2221200041d0376a222a" + "290300370300200041c8106a220c200041c8376a221e2903003703002000" + "41c0106a2216200041c0376a222f290300370300200020002903b8373703" + "b810200020002903b0373703b010200041b0106a200041b0376a200041b0" + "376a102f200041e8136a2208200041a8386a222c290300370300200041e0" + "136a2228200041a0386a221b290300370300200041d8136a223420004198" + "386a2240290300370300200041d0136a224520004190386a224c29030037" + "0300200041c8136a221020004188386a224d290300370300200041c0136a" + "221320004180386a224e290300370300200041c0316a2230200041c0386a" + "223d290300370300200041c8316a223a200041c8386a2243290300370300" + "200041d0316a2232200041d0386a2251290300370300200041d8316a220e" + "200041d8386a2204290300370300200041e0316a2219200041e0386a222e" + "290300370300200041e8316a221a200041e8386a222d2903003703002000" + "200041f8376a22122903003703b813200020002903f0373703b013200020" + "002903b0383703b0312000200041b8386a222b2903003703b831200041b0" + "136a200041f0376a2215200041b0386a2218102f200042003703e8342000" + "42003703e034200042003703d834200042013703d034200042003703c834" + "200042003703c034200042003703b834200042093703b034200041b0ce00" + "6a200041b0136a200041b0346a102f2008200041e8ce006a220329030037" + "03002028200041e0ce006a22022903003703002034200041d8ce006a2207" + "2903003703002045200041d0ce006a220d2903003703002010200041c8ce" + "006a22112903003703002013200041c0ce006a220b290300370300200020" + "002903b84e3703b813200020002903b04e3703b013200041b80a6a220620" + "0c290300370300200041b00a6a22092016290300370300200020002903b8" + "103703a80a200020002903b0103703a00a200041a00a6a20002903b01320" + "002903b8132013290300201029030042c7faf3c3ed82a3903c428d95c7c3" + "96d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20" + "0041c83d6a22132017290300370300200041c03d6a221020142903003703" + "002000201c2903003703b83d200020212903003703b03d200041b03d6a20" + "4529030020342903002028290300200829030042c7faf3c3ed82a3903c42" + "8d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b2" + "30102d201120062903002256370300200b20092903002255370300200d20" + "002903b03d2254370300200220102903002253370300200720002903b83d" + "225937030020032013290300225a370300200020002903a80a225f3703b8" + "4e200020002903a00a22583703b04e2017205a3703002014205337030020" + "1c205937030020212054370300200c205637030020162055370300200020" + "5f3703b810200020583703b010200041e8166a2217202d29030037030020" + "0041e0166a2214202e290300370300200041d8166a221c20042903003703" + "00200041d0166a22212051290300370300200041c8166a220c2043290300" + "370300200041c0166a2216203d2903003703002000202b2903003703b816" + "200020002903b0383703b016200041b0166a20182018102f200041b0ce00" + "6a200041b0166a200041b0346a102f201720032903003703002014200229" + "0300370300201c20072903003703002021200d290300370300200c201129" + "03003703002016200b290300370300200041c0196a2208202f2903003703" + "00200041c8196a2228201e290300370300200041d0196a2234202a290300" + "370300200041d8196a22452029290300370300200041e0196a223d202529" + "0300370300200041e8196a2243200f290300370300200020002903b84e37" + "03b816200020002903b04e3703b016200020002903b0373703b019200020" + "002903b8373703b819200041e8226a202c290300370300200041e0226a20" + "1b290300370300200041d8226a2040290300370300200041d0226a204c29" + "0300370300200041c8226a204d290300370300200041c0226a204e290300" + "370300200020122903003703b822200020002903f0373703b022200041b0" + "196a200041b0376a2015102f2006200c2903003703002009201629030037" + "0300200020002903b8163703a80a200020002903b0163703a00a200041a0" + "0a6a20002903b01920002903b8192008290300202829030042c7faf3c3ed" + "82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c6" + "89aece93b230102d20132017290300370300201020142903003703002000" + "201c2903003703b83d200020212903003703b03d200041b03d6a20342903" + "002045290300203d290300204329030042c7faf3c3ed82a3903c428d95c7" + "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d" + "201120062903002256370300200b20092903002255370300200d20002903" + "b03d2254370300200220102903002253370300200720002903b83d225937" + "030020032013290300225a370300200020002903a80a225f3703b84e2000" + "20002903a00a22583703b04e2017205a37030020142053370300201c2059" + "37030020212054370300200c2056370300201620553703002000205f3703" + "b816200020583703b016200041e81c6a2217202c290300370300200041e0" + "1c6a2214201b290300370300200041d81c6a221c20402903003703002000" + "41d01c6a2221204c290300370300200041c81c6a220c204d290300370300" + "200041c01c6a2216204e290300370300200020122903003703b81c200020" + "002903f0373703b01c200041b01c6a20152015102f200041e81f6a220820" + "0f290300370300200041e01f6a222c2025290300370300200041d81f6a22" + "282029290300370300200041d01f6a221b202a290300370300200041c81f" + "6a2234201e290300370300200041c01f6a2240202f290300370300200020" + "002903b8373703b81f200020002903b0373703b01f200041b01f6a200041" + "b0376a2018102f2006200c29030037030020092016290300370300200020" + "002903b81c3703a80a200020002903b01c3703a00a200041a00a6a200029" + "03b01f20002903b81f2040290300203429030042c7faf3c3ed82a3903c42" + "8d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b2" + "30102d20132017290300370300201020142903003703002000201c290300" + "3703b83d200020212903003703b03d200041b03d6a201b29030020282903" + "00202c290300200829030042c7faf3c3ed82a3903c428d95c7c396d2dac0" + "977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2011200629" + "03002256370300200b20092903002255370300200d20002903b03d225437" + "0300200220102903002253370300200720002903b83d2259370300200320" + "13290300225a370300200020002903a80a225f3703b84e200020002903a0" + "0a22583703b04e2017205a37030020142053370300201c20593703002021" + "2054370300200c2056370300201620553703002000205f3703b81c200020" + "583703b01c200041b0316a2018200041b0166a102f200041b0226a201520" + "0041b01c6a102f200041b0ce006a200041b0316a200041b0226a1030201a" + "200329030037030020192002290300370300200e20072903003703002032" + "200d290300370300203a20112903003703002030200b2903003703002000" + "20002903b84e3703b831200020002903b04e3703b031200041b0ce006a20" + "0041b0316a200041b0346a102f201a200329030037030020192002290300" + "370300200e20072903003703002032200d290300370300203a2011290300" + "3703002030200b290300370300200041c0256a202f290300370300200041" + "c8256a201e290300370300200041d0256a202a290300370300200041d825" + "6a2029290300370300200041e0256a2025290300370300200041e8256a20" + "0f290300370300200020002903b84e3703b831200020002903b04e3703b0" + "31200020002903b0373703b025200020002903b8373703b825200041b025" + "6a200041b0376a200041b0106a102f200041b0ce006a200041b0316a2000" + "41b0256a1030201a200329030037030020192002290300370300200e2007" + "2903003703002032200d290300370300203a20112903003703002030200b" + "290300370300200020002903b84e3703b831200020002903b04e3703b031" + "200041b03d6a200041b0316a103120002802b03d4101710440200041e82e" + "6a2206200041f83d6a22092903002256370300200041e02e6a2229200041" + "f03d6a222a2903002255370300200041d82e6a221e200041e83d6a221529" + "03002254370300200041d02e6a222f200041e03d6a221829030022533703" + "00200041c82e6a2230200041d83d6a220f2903002259370300200041c02e" + "6a223a200041d03d6a2225290300225a370300200041c0286a2232205a37" + "0300200041c8286a220e2059370300200041d0286a221920533703002000" + "41d8286a221a2054370300200041e0286a22172055370300200041e8286a" + "22142056370300200020002903c03d22563703b02e200020563703b02820" + "00201329030022563703b82e200020563703b828200041b0286a20102000" + "41b0106a102f200041e82b6a221c2009290300370300200041e02b6a2221" + "202a290300370300200041d82b6a222a2015290300370300200041d02b6a" + "220c2018290300370300200041c82b6a2216200f290300370300200041c0" + "2b6a22082025290300370300200020132903003703b82b200020002903c0" + "3d3703b02b200041b02b6a2010200041b0166a102f200041b02e6a201020" + "0041b01c6a102f2003201429030037030020022017290300370300200720" + "1a290300370300200d20192903003703002011200e290300370300200b20" + "32290300370300202220002903b82b370300202320082903003703002024" + "2016290300370300204f200c2903003703002027202a290300370300203f" + "2021290300370300203e201c290300370300200020002903b8283703b84e" + "200020002903b0283703b04e200020002903b02b3703f04e204b20062903" + "00370300204820292903003703002047201e2903003703002041202f2903" + "00370300204220302903003703002037203a290300370300203620002903" + "b82e370300200020002903b02e3703b04f200041c0c0006a200041b0ce00" + "6a41c001104c2106200042003703b840200042013703b040200041b0ce00" + "6a20004190046a2006103b200041b03d6a201f2006103b200041f0cf006a" + "200041b03d6a103e200041b00d6a200041b0ce006a418003104c21292000" + "42003703a80d200042013703a00d200041f0c4006a201f103e200041b0c3" + "006a20004190046a41c001104c1a200041b0c6006a200041b0c3006a2029" + "103f200742003703002002420037030020034200370300200042a9c0c689" + "aece93b2303703c84e200042b099b385febcf6b6de003703c04e200042bd" + "dcd9dcfbd3c1c7423703b84e200042c8faf383d69cd1de643703b04e2000" + "42003703d04e200041b0c0006a200041f0c6006a200041b0ce006a102f20" + "0742003703002002420037030020034200370300200042003703c84e2000" + "42ac97d286eaf99af1d9003703c04e200042cfb8ede69afe98f9543703b8" + "4e200042feffffbf97e6d1b1d7003703b04e200042003703d04e200041b0" + "3e6a200041b0c7006a200041b0ce006a102f2010200041c0c6006a290300" + "3703002013200041c8c6006a2903003703002025200041d0c6006a290300" + "370300200f200041d8c6006a2903003703002018200041e0c6006a290300" + "3703002015200041e8c6006a290300370300200920002903b84037030020" + "0041803e6a2006290300370300200041883e6a200041c8c0006a29030037" + "0300200041903e6a200041d0c0006a290300370300200041983e6a200041" + "d8c0006a2210290300370300200041a03e6a200041e0c0006a2213290300" + "370300200041a83e6a200041e8c0006a2206290300370300200020002903" + "b0463703b03d200020002903b8463703b83d200020002903b0403703f03d" + "200742003703002002420037030020034200370300200042a9c0c689aece" + "93b2303703c84e200042b099b385febcf6b6de003703c04e200042bddcd9" + "dcfbd3c1c7423703b84e200042c8faf383d69cd1de643703b04e20004200" + "3703d04e200041b03a6a200041b0c8006a200041b0ce006a102f20104200" + "3703002013420037030020064200370300200042003703c840200042ac97" + "d286eaf99af1d9003703c040200042cfb8ede69afe98f9543703b8402000" + "42feffffbf97e6d1b1d7003703b040200042003703d040200041b0cf006a" + "2210200041f0c8006a200041b0c0006a102f200b20004180c8006a290300" + "370300201120004188c8006a290300370300200d20004190c8006a290300" + "370300200720004198c8006a2903003703002002200041a0c8006a290300" + "3703002003200041a8c8006a290300370300202220002903b83a37030020" + "2320492903003703002024204a290300370300204f205029030037030020" + "272039290300370300203f203c290300370300203e204429030037030020" + "0020002903f0473703b04e2000200041f8c7006a2903003703b84e200020" + "002903b03a3703f04e20394200370300203c420037030020444200370300" + "200042a9c0c689aece93b2303703c83a200042b099b385febcf6b6de0037" + "03c03a200042bddcd9dcfbd3c1c7423703b83a200042c9faf383d69cd1de" + "643703b03a200042003703d03a200041b0c0006a200041b0ce006a200041" + "b03a6a102f200041f0c0006a200041f0ce006a200041b03a6a102f200041" + "b0c1006a2010200041b03a6a102f200041b0c9006a200041b03d6a41c001" + "104c1a200041f0ca006a200041b0c0006a41c001104c1a200041a0076a22" + "0d200041b0c9006a200041b0c6006a103f20004200370398072000420137" + "039007200041a00a6a200d418003104c1a200042003703c8492000420037" + "03c049200042003703b849200042f193a4d3c4d6e4f4c4003703b0494100" + "2107200b41f002104b1a200042003703b84e200042013703b04e41ff0121" + "03200041286a210b0340200041206a200341ff0071104f200b2903002000" + "41b0c9006a200341037641f0ffffff01716a220229030883215620002903" + "20200229030083215520074101710440200041a00d6a200041b0ce006a10" + "46200041b0ce006a200041a00d6a418003104c1a0b205520568442005204" + "40200041a00d6a200d200041b0ce006a103f200041b0ce006a200041a00d" + "6a418003104c1a410121070b200341016b2203417f470d000b200041f011" + "6a200041f0cf006a103e200041b0106a200041b0ce006a41c001104c1a20" + "0041b0136a200041b0106a1046200041b0166a200041b0136a1046200041" + "b0196a200041b0166a200041b0136a103f200042003703c8492000420037" + "03c049200042003703b849200042f193a4d3c4d6e4f4c4003703b0494100" + "2107200041c0ce006a41f002104b1a200042003703b84e200042013703b0" + "4e41ff012103200041186a210b0340200041106a200341ff0071104f200b" + "290300200041b0c9006a200341037641f0ffffff01716a22022903088321" + "562000290310200229030083215520074101710440200041a00d6a200041" + "b0ce006a1046200041b0ce006a200041a00d6a418003104c1a0b20552056" + "844200520440200041a00d6a200041b0196a200041b0ce006a103f200041" + "b0ce006a200041a00d6a418003104c1a410121070b200341016b2203417f" + "470d000b200041f01d6a200041f0cf006a103e200041b01c6a200041b0ce" + "006a41c001104c1a200041b01f6a200041b01c6a1046200042003703c849" + "200042003703c049200042003703b849200042f193a4d3c4d6e4f4c40037" + "03b04941002107200041c0ce006a41f002104b1a200042003703b84e2000" + "42013703b04e41ff012103200041086a210b03402000200341ff0071104f" + "200b290300200041b0c9006a200341037641f0ffffff01716a2202290308" + "8321562000290300200229030083215520074101710440200041a00d6a20" + "0041b0ce006a1046200041b0ce006a200041a00d6a418003104c1a0b2055" + "2056844200520440200041a00d6a200041b01f6a200041b0ce006a103f20" + "0041b0ce006a200041a00d6a418003104c1a410121070b200341016b2203" + "417f470d000b200041f0236a2203200041f0cf006a2211103e200041b022" + "6a200041b0ce006a41c001104c1a200041f0266a200041f01a6a103e2000" + "41b0256a200041b0196a41c001104c1a200041f0296a2003103e200041b0" + "286a200041b0226a41c001104c1a200041b02b6a200041b0286a200041b0" + "1c6a103f200041b02e6a200041b02b6a200041b0256a103f200041b0316a" + "200041b02e6a200041b0136a103f200041b0346a200041b02e6a200041b0" + "1c6a103f200041b0376a200d200041b0346a103f200041b03a6a200041b0" + "316a41011047200041a00d6a200041f0326a41011047200042e6cfeba7bb" + "dee5b4243703e8492000428e97d490e19f9f99a67f3703e049200042e58f" + "bbf7f8cee4bcf4003703d849200042acc5cd87f88bbcae4a3703d0492000" + "42dfcf96c3c2e3adc2123703c849200042e0969ab7d7fbe7dc683703c049" + "200042f6c2bcc982c187a9dc003703b849200042f0c8a7e6adbbcd855637" + "03b049200041b0ce006a200041a00d6a200041b0c9006a102f200041f0ce" + "006a2210200041e00d6a220d200041b0c9006a102f200041b0cf006a2213" + "200041a00e6a2203200041b0c9006a102f200041f03b6a200041b0ce006a" + "41c001104c1a200041b03d6a200041b03a6a200041b0376a103f200041c8" + "0d6a22024200370300200041d00d6a22074200370300200041d80d6a220b" + "4200370300200042a9c0c689aece93b2303703b80d200042b099b385febc" + "f6b6de003703b00d200042bddcd9dcfbd3c1c7423703a80d200042c8faf3" + "83d69cd1de643703a00d200042003703c00d200041b0ce006a200041f02e" + "6a200041a00d6a102f2002420037030020074200370300200b4200370300" + "200042003703b80d200042ac97d286eaf99af1d9003703b00d200042cfb8" + "ede69afe98f9543703a80d200042feffffbf97e6d1b1d7003703a00d2000" + "42003703c00d200041b0ca006a200041b02f6a200041a00d6a102f200041" + "c0c9006a200041c02e6a290300370300200041c8c9006a200041c82e6a29" + "0300370300200041d0c9006a200041d02e6a290300370300200041d8c900" + "6a200041d82e6a290300370300200041e0c9006a200041e02e6a29030037" + "0300200041e8c9006a200041e82e6a290300370300200041f8c9006a2000" + "2903b84e37030020004180ca006a200041c0ce006a290300370300200041" + "88ca006a200041c8ce006a29030037030020004190ca006a200041d0ce00" + "6a29030037030020004198ca006a200041d8ce006a220629030037030020" + "0041a0ca006a200041e0ce006a2209290300370300200041a8ca006a2000" + "41e8ce006a2215290300370300200020002903b02e3703b0492000200029" + "03b82e3703b849200020002903b04e3703f0492002420037030020074200" + "370300200b4200370300200042a9c0c689aece93b2303703b80d200042b0" + "99b385febcf6b6de003703b00d200042bddcd9dcfbd3c1c7423703a80d20" + "0042c8faf383d69cd1de643703a00d200042003703c00d200041b0c6006a" + "200041b0306a200041a00d6a102f20064200370300200942003703002015" + "4200370300200042003703c84e200042ac97d286eaf99af1d9003703c04e" + "200042cfb8ede69afe98f9543703b84e200042feffffbf97e6d1b1d70037" + "03b04e200042003703d04e2003200041f0306a200041b0ce006a102f2000" + "41b00d6a220620004180306a290300370300200041b80d6a220920004188" + "306a290300370300200041c00d6a221520004190306a2903003703002002" + "20004198306a2903003703002007200041a0306a290300370300200b2000" + "41a8306a290300370300200041e80d6a20002903b846370300200041f00d" + "6a200041c0c6006a290300370300200041f80d6a200041c8c6006a290300" + "370300200041800e6a200041d0c6006a290300370300200041880e6a2000" + "41d8c6006a2202290300370300200041900e6a200041e0c6006a22072903" + "00370300200041980e6a200041e8c6006a220b2903003703002000200029" + "03f02f3703a00d2000200041f82f6a2903003703a80d200020002903b046" + "3703e00d2002420037030020074200370300200b4200370300200042a9c0" + "c689aece93b2303703c846200042b099b385febcf6b6de003703c0462000" + "42bddcd9dcfbd3c1c7423703b846200042c9faf383d69cd1de643703b046" + "200042003703d046200041b0ce006a200041a00d6a200041b0c6006a102f" + "2010200d200041b0c6006a102f20132003200041b0c6006a102f200041b0" + "c0006a200041b0c9006a41c001104c1a200041f0c1006a200041b0ce006a" + "41c001104c1a200041b0c3006a200041b0c0006a200041b03d6a103f2000" + "41f0c7006a200041e00b6a103e200041b0c6006a200041a00a6a41c00110" + "4c1a200041b0c9006a200041b0c6006a200041b0316a103f200041b0ce00" + "6a200041b0c9006a41031047200041a00d6a200041f0ca006a4103104720" + "0042f3fa9ddfe096fed5003703a84e2000429da7d8abb3dcfbe5063703a0" + "4e200042ecf3d0beb9bce981ff003703984e200042818283a6bfc5aacaf6" + "003703904e200042bbc98be4fcb9a0ee193703884e20004290d5b285cd91" + "d8f46f3703804e200042caa4d7f2dbf1aca6897f3703f84d200042ffccd2" + "f691a7dfb7683703f04d200041b0cc006a200041a00d6a200041f0cd006a" + "102f200041f0cc006a200d200041f0cd006a102f200041b0cd006a200320" + "0041f0cd006a102f2011200041b0cc006a41c001104c1a2006200041b0ce" + "006a200041b0c3006a103f2009290300215620002903b00d215520004190" + "076a201541f002104c1a20384184016a2103024002400240024002400240" + "0340200341046b280200220204402003280200220b41046b280200220741" + "7871220d200241c0016c220241044108200741037122071b72490d022007" + "4100200d20024127724b1b0d03200b10040b20034190016a210320464101" + "6b22460d000b200028025422030440203841046b28020022024178712207" + "20034190016c220341044108200241037122021b72490d03200241002007" + "200341276a4b1b0d04203810040b20002802482203450d0b200541046b28" + "0200220241787122072003410674220341044108200241037122021b7249" + "0d0420024100200720034127724b1b0d05200510040c0b0b41f996c00041" + "2e41a897c0001011000b41b897c000412e41e897c0001011000b41f996c0" + "00412e41a897c0001011000b41b897c000412e41e897c0001011000b41f9" + "96c000412e41a897c0001011000b41b897c000412e41e897c0001011000b" + "41f4a2c000411f4194a3c0001021000b2018200341f4a1c0001010000b20" + "18200341e4a1c0001010000b203841046b28020022024178712207200341" + "90016c220341044108200241037122021b72490d02200241002007200341" + "276a4b1b0d03203810040b200028024822030440200541046b2802002202" + "41787122072003410674220341044108200241037122021b72490d042002" + "4100200720034127724b1b0d05200510040b42002156420121550b203120" + "5637030820312055370300203141106a20004190076a41f002104c1a2000" + "28023c22030440203341046b28020022024178712207200341c0016c2203" + "41044108200241037122021b72490d0520024100200720034127724b1b0d" + "06203310040b200028023022030440203b41046b28020022024178712207" + "200341e0006c220341044108200241037122021b72490d07200241002007" + "200341276a4b1b0d08203b10040b200041b0d1006a24000c080b41f996c0" + "00412e41a897c0001011000b41b897c000412e41e897c0001011000b41f9" + "96c000412e41a897c0001011000b41b897c000412e41e897c0001011000b" + "41f996c000412e41a897c0001011000b41b897c000412e41e897c0001011" + "000b41f996c000412e41a897c0001011000b41b897c000412e41e897c000" + "1011000b200141f0066a41f002104b1a200142003703e806200142013703" + "e006200141a00c6a200141e0066a104a0d03200141c00c6a20014180076a" + "104a0d03200141e00c6a200141a0076a104a0d03200141800d6a200141c0" + "076a104a0d03200141a00d6a200141e0076a104a0d03200141c00d6a2001" + "4180086a104a0d03200141e00d6a200141a0086a104a0d03200141800e6a" + "200141c0086a104a0d03200141a00e6a200141e0086a104a0d03200141c0" + "0e6a20014180096a104a0d03200141e00e6a200141a0096a104a0d032001" + "41800f6a200141c0096a104a1a0c030b2002450d05200641046b28020022" + "05417871221241044108200541037122051b20026a490d0c200541002012" + "200241276a4b1b0d0d200610040c050b20012802a00b2205450d04200820" + "05410674100e0c040b206a428080808010540d0020122005100e0b202041" + "c000100e2026450d0220352026410674100e0c020b4100410041dc91c000" + "1010000b20012802e01c1a0b205241046b2802002205417871220641c600" + "41ca00200541037122051b490d1420054100200641ea004f1b0d15205210" + "04201d41046b280200220541787141e40041e800200541037122061b490d" + "162006410020054188014f1b0d17201d1004200a41046b28020022054178" + "71221d418802418c02200541037122051b490d1820054100201d41ac024f" + "1b0d19200a1004200141c0206a240041010f0b000b230041206b22052400" + "200541003602182005410136020c200541a099c000360208200542043702" + "10200541086a41f88bc000101a000b41f996c000412e41a897c000101100" + "0b41b897c000412e41e897c0001011000b41f996c000412e41a897c00010" + "11000b41b897c000412e41e897c0001011000b41f996c000412e41a897c0" + "001011000b41b897c000412e41e897c0001011000b4120201241cc8fc000" + "1012000b418001201241dc8fc0001012000b41c001201241ec8fc0001012" + "000b41a002201241fc8fc0001012000b41a00241a002418c90c000101000" + "0b41a10241a102419c90c0001010000b41a20241a20241ac90c000101000" + "0b41a30241a30241bc90c0001010000b230041306b220224002002410436" + "0204200241643602002002410236020c200241b884c00036020820024202" + "3702142002200241046aad4280808080108437032820022002ad42808080" + "8010843703202002200241206a360210200241086a41cc90c000101a000b" + "2009201241cc90c0001012000b200120012d00a10f3a00e00641b89cc000" + "412b200141e0066a41988ec00041d892c0001013000b41a89cc000101400" + "0b41f996c000412e41a897c0001011000b41b897c000412e41e897c00010" + "11000b41f996c000412e41a897c0001011000b41b897c000412e41e897c0" + "001011000b41f996c000412e41a897c0001011000b41b897c000412e41e8" + "97c0001011000b962502087f017e02400240024002400240024002402000" + "41f4014d0440418ca9c000280200220341102000410b6a41f80371200041" + "0b491b220441037622017622004103710d0120044194a9c0002802004d0d" + "0720000d024190a9c00028020022000d030c070b2000410b6a2201417871" + "21044190a9c0002802002208450d06411f2107200041f4ffff074d044020" + "04410620014108766722006b7641017120004101746b413e6a21070b4100" + "20046b2101200741027441f4a5c0006a2802002203450440410021000c04" + "0b410021002004411920074101766b41002007411f471b74210503400240" + "200328020441787122062004490d00200620046b220620014f0d00200321" + "02200622010d0041002101200321000c060b200328021422062000200620" + "032005411d764104716a41106a2802002203471b200020061b2100200541" + "0174210520030d000b0c030b02402000417f7341017120016a2205410374" + "22004184a7c0006a22042000418ca7c0006a280200220128020822024704" + "402002200436020c200420023602080c010b418ca9c0002003417e200577" + "713602000b20012000410372360204200020016a22002000280204410172" + "360204200141086a0f0b0240200020017441022001742200410020006b72" + "7168220641037422014184a7c0006a22022001418ca7c0006a2802002200" + "28020822054704402005200236020c200220053602080c010b418ca9c000" + "2003417e200677713602000b20002004410372360204200020046a220520" + "0120046b2204410172360204200020016a20043602004194a9c000280200" + "2203044020034178714184a7c0006a2102419ca9c0002802002101027f41" + "8ca9c00028020022064101200341037674220371450440418ca9c0002003" + "20067236020020020c010b20022802080b21032002200136020820032001" + "36020c2001200236020c200120033602080b419ca9c00020053602004194" + "a9c0002004360200200041086a0f0b20006841027441f4a5c0006a280200" + "220228020441787120046b21012002210302400340024002402002280210" + "22000d00200228021422000d002003280218210702400240200320032802" + "0c2200460440200341144110200328021422001b6a28020022020d014100" + "21000c020b20032802082202200036020c200020023602080c010b200341" + "146a200341106a20001b21050340200521062002220041146a200041106a" + "200028021422021b210520004114411020021b6a28020022020d000b2006" + "41003602000b2007450d032003200328021c41027441f4a5c0006a220228" + "020047044020074110411420072802102003461b6a20003602002000450d" + "040c020b2002200036020020000d014190a9c0004190a9c000280200417e" + "200328021c77713602000c030b200028020441787120046b220220012001" + "20024b22021b21012000200320021b2103200021020c010b0b2000200736" + "021820032802102202044020002002360210200220003602180b20032802" + "142202450d0020002002360214200220003602180b02400240200141104f" + "044020032004410372360204200320046a22042001410172360204200120" + "046a20013602004194a9c0002802002205450d0120054178714184a7c000" + "6a2102419ca9c0002802002100027f418ca9c00028020022064101200541" + "037674220571450440418ca9c000200520067236020020020c010b200228" + "02080b2105200220003602082005200036020c2000200236020c20002005" + "3602080c010b2003200120046a2200410372360204200020036a22002000" + "2802044101723602040c010b419ca9c00020043602004194a9c000200136" + "02000b200341086a0f0b2000200272450440410021024102200774220041" + "0020006b722008712200450d0320006841027441f4a5c0006a2802002100" + "0b2000450d010b03402002200020022000280204417871220320046b2206" + "20014922071b200320044922051b210220012006200120071b20051b2101" + "20002802102203047f20030520002802140b22000d000b0b2002450d0020" + "044194a9c00028020022004d2001200020046b4f710d0020022802182107" + "024002402002200228020c2200460440200241144110200228021422001b" + "6a28020022030d01410021000c020b20022802082203200036020c200020" + "033602080c010b200241146a200241106a20001b21050340200521062003" + "220041146a200041106a200028021422031b210520004114411020031b6a" + "28020022030d000b200641003602000b02402007450d0002402002200228" + "021c41027441f4a5c0006a22032802004704402007411041142007280210" + "2002461b6a20003602002000450d020c010b2003200036020020000d0041" + "90a9c0004190a9c000280200417e200228021c77713602000c010b200020" + "0736021820022802102203044020002003360210200320003602180b2002" + "2802142203450d0020002003360214200320003602180b0240200141104f" + "044020022004410372360204200220046a22042001410172360204200120" + "046a200136020020014180024f0440411f210020044200370210200141ff" + "ffff074d04402001410620014108766722006b7641017120004101746b41" + "3e6a21000b2004200036021c200041027441f4a5c0006a21034101200074" + "22054190a9c0002802007145044020032004360200200420033602182004" + "200436020c200420043602084190a9c0004190a9c0002802002005723602" + "000c030b0240024020012003280200220528020441787146044020052100" + "0c010b2001411920004101766b41002000411f471b742103034020052003" + "411d764104716a41106a22062802002200450d0220034101742103200021" + "0520002802044178712001470d000b0b20002802082201200436020c2000" + "2004360208200441003602182004200036020c200420013602080c030b20" + "062004360200200420053602182004200436020c200420043602080c020b" + "200141f801714184a7c0006a2100027f418ca9c000280200220341012001" + "41037674220171450440418ca9c000200120037236020020000c010b2000" + "2802080b2101200020043602082001200436020c2004200036020c200420" + "013602080c010b2002200120046a2200410372360204200020026a220020" + "002802044101723602040b200241086a0f0b024002400240024002400240" + "20044194a9c00028020022004b044020044198a9c00028020022004f0440" + "41002100200441af80046a220241107640002201417f4622050d07200141" + "10742203450d0741a4a9c000410020024180807c7120051b220641a4a9c0" + "002802006a220036020041a8a9c00041a8a9c00028020022012000200020" + "01491b3602000240024041a0a9c0002802002201044041f4a6c000210003" + "4020002802002202200028020422056a2003460d02200028020822000d00" + "0b0c020b41b0a9c00028020022004100200020034d1b45044041b0a9c000" + "20033602000b41b4a9c00041ff1f36020041f8a6c000200636020041f4a6" + "c00020033602004190a7c0004184a7c0003602004198a7c000418ca7c000" + "360200418ca7c0004184a7c00036020041a0a7c0004194a7c00036020041" + "94a7c000418ca7c00036020041a8a7c000419ca7c000360200419ca7c000" + "4194a7c00036020041b0a7c00041a4a7c00036020041a4a7c000419ca7c0" + "0036020041b8a7c00041aca7c00036020041aca7c00041a4a7c000360200" + "41c0a7c00041b4a7c00036020041b4a7c00041aca7c00036020041c8a7c0" + "0041bca7c00036020041bca7c00041b4a7c0003602004180a7c000410036" + "020041d0a7c00041c4a7c00036020041c4a7c00041bca7c00036020041cc" + "a7c00041c4a7c00036020041d8a7c00041cca7c00036020041d4a7c00041" + "cca7c00036020041e0a7c00041d4a7c00036020041dca7c00041d4a7c000" + "36020041e8a7c00041dca7c00036020041e4a7c00041dca7c00036020041" + "f0a7c00041e4a7c00036020041eca7c00041e4a7c00036020041f8a7c000" + "41eca7c00036020041f4a7c00041eca7c0003602004180a8c00041f4a7c0" + "0036020041fca7c00041f4a7c0003602004188a8c00041fca7c000360200" + "4184a8c00041fca7c0003602004190a8c0004184a8c0003602004198a8c0" + "00418ca8c000360200418ca8c0004184a8c00036020041a0a8c0004194a8" + "c0003602004194a8c000418ca8c00036020041a8a8c000419ca8c0003602" + "00419ca8c0004194a8c00036020041b0a8c00041a4a8c00036020041a4a8" + "c000419ca8c00036020041b8a8c00041aca8c00036020041aca8c00041a4" + "a8c00036020041c0a8c00041b4a8c00036020041b4a8c00041aca8c00036" + "020041c8a8c00041bca8c00036020041bca8c00041b4a8c00036020041d0" + "a8c00041c4a8c00036020041c4a8c00041bca8c00036020041d8a8c00041" + "cca8c00036020041cca8c00041c4a8c00036020041e0a8c00041d4a8c000" + "36020041d4a8c00041cca8c00036020041e8a8c00041dca8c00036020041" + "dca8c00041d4a8c00036020041f0a8c00041e4a8c00036020041e4a8c000" + "41dca8c00036020041f8a8c00041eca8c00036020041eca8c00041e4a8c0" + "003602004180a9c00041f4a8c00036020041f4a8c00041eca8c000360200" + "4188a9c00041fca8c00036020041fca8c00041f4a8c00036020041a0a9c0" + "0020033602004184a9c00041fca8c0003602004198a9c000200641286b22" + "0036020020032000410172360204200020036a412836020441aca9c00041" + "808080013602000c080b200120034f0d0020012002490d00200028020c45" + "0d030b41b0a9c00041b0a9c0002802002200200320002003491b36020020" + "0320066a210241f4a6c00021000240024003402002200028020022054704" + "40200028020822000d010c020b0b200028020c450d010b41f4a6c0002100" + "034002402001200028020022024f04402001200220002802046a2202490d" + "010b200028020821000c010b0b41a0a9c00020033602004198a9c0002006" + "41286b220036020020032000410172360204200020036a412836020441ac" + "a9c00041808080013602002001200241206b41787141086b220020002001" + "41106a491b2205411b36020441f4a6c0002902002109200541106a41fca6" + "c0002902003702002005200937020841f8a6c000200636020041f4a6c000" + "200336020041fca6c000200541086a3602004180a7c00041003602002005" + "411c6a2100034020004107360200200041046a22002002490d000b200120" + "05460d0720052005280204417e713602042001200520016b220041017236" + "02042005200036020020004180024f04402001200010350c080b200041f8" + "01714184a7c0006a2102027f418ca9c00028020022034101200041037674" + "220071450440418ca9c000200020037236020020020c010b20022802080b" + "2100200220013602082000200136020c2001200236020c20012000360208" + "0c070b200020033602002000200028020420066a36020420032004410372" + "3602042005410f6a41787141086b2202200320046a22006b2101200241a0" + "a9c000280200460d032002419ca9c000280200460d042002280204220441" + "037141014604402002200441787122041016200120046a2101200220046a" + "220228020421040b20022004417e71360204200020014101723602042000" + "20016a200136020020014180024f04402000200110350c060b200141f801" + "714184a7c0006a2104027f418ca9c0002802002202410120014103767422" + "0171450440418ca9c000200120027236020020040c010b20042802080b21" + "01200420003602082001200036020c2000200436020c200020013602080c" + "050b4198a9c000200020046b220136020041a0a9c00041a0a9c000280200" + "220020046a22023602002002200141017236020420002004410372360204" + "200041086a21000c060b419ca9c00028020021010240200020046b220241" + "0f4d0440419ca9c00041003602004194a9c0004100360200200120004103" + "72360204200020016a220020002802044101723602040c010b4194a9c000" + "2002360200419ca9c000200120046a220336020020032002410172360204" + "200020016a2002360200200120044103723602040b200141086a0f0b2000" + "200520066a36020441a0a9c00041a0a9c0002802002200410f6a41787122" + "0141086b22023602004198a9c000200020016b4198a9c00028020020066a" + "22016a41086a220336020020022003410172360204200020016a41283602" + "0441aca9c00041808080013602000c030b41a0a9c00020003602004198a9" + "c0004198a9c00028020020016a2201360200200020014101723602040c01" + "0b419ca9c00020003602004194a9c0004194a9c00028020020016a220136" + "020020002001410172360204200020016a20013602000b200341086a0f0b" + "410021004198a9c000280200220120044d0d004198a9c000200120046b22" + "0136020041a0a9c00041a0a9c000280200220020046a2202360200200220" + "0141017236020420002004410372360204200041086a0f0b20000bc60602" + "037f037e230041a0026b22032400200341286a41c100104b210420034118" + "6a41f08bc000290300370300200341106a41e88bc0002903003703002003" + "41086a41e08bc00029030037030020034200370320200341d88bc0002903" + "003703000240200241c0004f0440200320024106762205ad370320200320" + "01200510272004200120024140716a2002413f712202104c1a0c010b2004" + "20012002104c1a0b200320023a0068200341f0006a200341f000104c1a20" + "034198016a220120032d00d80122026a22044180013a00002002ad220742" + "3b862003290390012206420986220820074203868422074280fe03834228" + "86842007428080fc0783421886200742808080f80f834208868484200642" + "018642808080f80f832006420f88428080fc0783842006421f884280fe03" + "8320084238888484842106024002402002413f470440200441016a200241" + "3f73104b1a200241387341074b0d010b200341f0006a2001410110272003" + "4190026a420037030020034188026a420037030020034180026a42003703" + "00200341f8016a4200370300200341f0016a4200370300200341e8016a42" + "00370300200342003703e0012003200637039802200341f0006a200341e0" + "016a410110270c010b200320063703d001200341f0006a2001410110270b" + "2000200328028c01220241187420024180fe037141087472200241087641" + "80fe03712002411876727236001c20002003280288012202411874200241" + "80fe03714108747220024108764180fe0371200241187672723600182000" + "200328028401220241187420024180fe03714108747220024108764180fe" + "0371200241187672723600142000200328028001220241187420024180fe" + "03714108747220024108764180fe03712002411876727236001020002003" + "28027c220241187420024180fe03714108747220024108764180fe037120" + "02411876727236000c20002003280278220241187420024180fe03714108" + "747220024108764180fe0371200241187672723600082000200328027422" + "0241187420024180fe03714108747220024108764180fe03712002411876" + "727236000420002003280270220241187420024180fe0371410874722002" + "4108764180fe037120024118767272360000200341a0026a24000bee0201" + "077f024020012802042202450440410021020c010b200128021021062001" + "200220022001280208220320022003491b22046b36020420012001280200" + "220720046a360200027f0240024002400240027f02400240024020030440" + "200128020c2208410174210520072d0000220241c1006b41ff0171410649" + "0d01200241e1006b41ff01714106490d02200241306b220341ff0171410a" + "490d0320050c040b4100410041848bc0001010000b200241376b21030c01" + "0b200241d7006b21030b20044101460d0320072d0001220241c1006b41ff" + "01714106490d01200241e1006b41ff01714106490d02200241306b220441" + "ff0171410a490d0420054101720b21032006200241ff0171360200200620" + "0541807e71200341ff01717236020441000c040b200241376b21040c020b" + "200241d7006b21040c010b4101410141948bc0001010000b200420034104" + "7472210341010b21022001200841016a36020c0b200020033a0001200020" + "023a00000bb40801057f200041086b2201200041046b2802002203417871" + "22006a21020240024020034101710d002003410271450d01200128020022" + "0320006a2100200120036b2201419ca9c000280200460440200228020441" + "03714103470d014194a9c000200036020020022002280204417e71360204" + "20012000410172360204200220003602000f0b2001200310160b02400240" + "0240024002400240024020022802042203410271450440200241a0a9c000" + "280200460d022002419ca9c000280200460d032002200341787122031016" + "2001200020036a2200410172360204200020016a20003602002001419ca9" + "c000280200470d014194a9c00020003602000f0b20022003417e71360204" + "20012000410172360204200020016a20003602000b2000418002490d0241" + "1f210220014200370210200041ffffff074d044020004106200041087667" + "22026b7641017120024101746b413e6a21020b2001200236021c20024102" + "7441f4a5c0006a2103410120027422044190a9c000280200710d03200320" + "01360200200120033602182001200136020c200120013602084190a9c000" + "4190a9c0002802002004723602000c040b41a0a9c00020013602004198a9" + "c0004198a9c00028020020006a220036020020012000410172360204419c" + "a9c00028020020014604404194a9c0004100360200419ca9c00041003602" + "000b200041aca9c00028020022044d0d0541a0a9c0002802002200450d05" + "410021034198a9c00028020022054129490d0441f4a6c000210103402000" + "200128020022024f04402000200220012802046a490d060b200128020821" + "010c000b000b419ca9c00020013602004194a9c0004194a9c00028020020" + "006a220036020020012000410172360204200020016a20003602000f0b20" + "0041f801714184a7c0006a2102027f418ca9c00028020022034101200041" + "037674220071450440418ca9c000200020037236020020020c010b200228" + "02080b2100200220013602082000200136020c2001200236020c20012000" + "3602080f0b02400240200020032802002204280204417871460440200421" + "020c010b2000411920024101766b41002002411f471b7421030340200420" + "03411d764104716a41106a22052802002202450d02200341017421032002" + "210420022802044178712000470d000b0b20022802082200200136020c20" + "022001360208200141003602182001200236020c200120003602080c010b" + "20052001360200200120043602182001200136020c200120013602080b41" + "00210141b4a9c00041b4a9c00028020041016b220036020020000d0141fc" + "a6c000280200220004400340200141016a2101200028020822000d000b0b" + "41b4a9c00041ff1f2001200141ff1f4d1b3602000f0b41fca6c000280200" + "220104400340200341016a2103200128020822010d000b0b41b4a9c00041" + "ff1f2003200341ff1f4d1b360200200420054f0d0041aca9c000417f3602" + "000b0b810802077f067e230041c0026b2203240020034198026a20024118" + "6a290300220a37030020034190026a200241106a290300220d3703002003" + "200241086a290300220b3703880220032002290300220c3703800242ddb0" + "858ce8b691a8b87f210e20034180026a200c200b200d200a42c7faf3c3ed" + "82a3903c428d95c7c396d2dac0977f102b200341b0026a2204200141106a" + "290300220a370300200341b8026a2205200141186a290300220d37030020" + "032001290300220b3703a0022003200141086a290300220c3703a8022003" + "41a0026a200b200c200a200d42c7faf3c3ed82a3903c428d95c7c396d2da" + "c0977f102b200341a0026a200b200c200a200d42c7faf3c3ed82a3903c42" + "8d95c7c396d2dac0977f102b02400240024020032903a002220a42037c22" + "0c200a54ad220a20032903a8027c220b200a54ad220a20042903007c220d" + "42ddb0858ce8b691a8b87f852005290300200a200d56ad7c220a42a9c0c6" + "89aece93b2308584500440200c42c7faf3c3ed82a3903c54200b428d95c7" + "c396d2dac0977f54200b428d95c7c396d2dac0977f511b450d0242a9c0c6" + "89aece93b230210a0c010b200d42deb0858ce8b691a8b87f54200a42a9c0" + "c689aece93b23054200a42a9c0c689aece93b230511b450d01200d210e0b" + "200c210f200b210c0c010b200a200d200b200c42c7faf3c3ed82a3903c7d" + "220f200c5aad220e7d220a42f3eab8bce9ada5bfe8007c220c200a54ad20" + "0b200e54ad7d7c220b200d54ad200b42a2cffaf397c9eed7c7007c220e20" + "0b54ad7c50ad7d42a9c0c689aece93b2307d210a0b2003200e3703b00120" + "03200f3703a0012003200a3703b8012003200c3703a8012000027f200341" + "80026a200341a0016a104a45044020034180016a22042002290300370100" + "20034198016a2205200241186a29030037010020034190016a2206200241" + "106a29030037010020034188016a2207200241086a290300370100200341" + "f8006a2202200141186a290300370100200341f0006a2208200141106a29" + "0300370100200341e8006a2209200141086a290300370100200320012903" + "00370160200341ca006a22012005290100370100200341c2006a22052006" + "2901003701002003413a6a22062007290100370100200341326a22072004" + "2901003701002003412a6a22042002290100370100200341226a22022008" + "2901003701002003411a6a22082009290100370100200320032901603701" + "12200041c8006a2001290100370100200041406b20052901003701002000" + "41386a2006290100370100200041306a2007290100370100200041286a20" + "04290100370100200041206a2002290100370100200041186a2008290100" + "3701002000200329011237011041000c010b200041003a000141010b3a00" + "00200341c0026a24000baa0401047e2001290010220242388620024280fe" + "0383422886842002428080fc0783421886200242808080f80f8342088684" + "84200242088842808080f80f832002421888428080fc0783842002422888" + "4280fe038320024238888484842104200141186a29000022024238862002" + "4280fe0383422886842002428080fc0783421886200242808080f80f8342" + "08868484200242088842808080f80f832002421888428080fc0783842002" + "4228884280fe0383200242388884848421050240417f2001290000220242" + "b0c8b99297bc8cd02985200141086a290000220342b8a195b29bb0a0acdd" + "008584420052200342388620034280fe0383422886842003428080fc0783" + "421886200342808080f80f834208868484200342088842808080f80f8320" + "03421888428080fc07838420034228884280fe0383200342388884848422" + "0342ddb0858ce8b691a8b87f54200242388620024280fe03834228868420" + "02428080fc0783421886200242808080f80f834208868484200242088842" + "808080f80f832002421888428080fc07838420024228884280fe03832002" + "423888848484220242a9c0c689aece93b23054200242a9c0c689aece93b2" + "30511b1b2201417f470440200141ff01710d01200542c6faf3c3ed82a390" + "3c562004428d95c7c396d2dac0977f562004428d95c7c396d2dac0977f51" + "1b0d010b2000200337032020002005370310200020023703282000200437" + "0318200041003a00000f0b200041023a0001200041013a00000bb40c0204" + "7f027e230041d0066b2203240020034188036a200241386a290300370300" + "20034180036a200241306a290300370300200341f8026a200241286a2903" + "00370300200341f0026a2204200241206a290300370300200341e8026a20" + "0241186a290300370300200341e0026a200241106a290300370300200320" + "022903003703d0022003200241086a2903003703d802200341d0026a2002" + "2002102f200341a0036a200141106a290300370300200341a8036a200141" + "186a290300370300200341b0036a200141206a290300370300200341b803" + "6a200141286a290300370300200341c0036a200141306a29030037030020" + "0341c8036a200141386a2903003703002003200129030037039003200320" + "0141086a2903003703980320034190036a20012001102f200341d0006a20" + "034190036a2001102f200342d4fdc3d783f6c4cb003703c805200342f4fb" + "e3f6def5ab964d3703c005200342d2b0b4a9ce90e8a7a77f3703b8052003" + "42d2ab8caee8a0afd1643703b005200342aed5e2f58ca8a78a2b3703a805" + "200342c3d581df919386df817f3703a005200342a3dfefced5bcb1dab57f" + "37039805200342e5f184a5c2dbf9b33237039005200341106a200341d000" + "6a20034190056a103002400240200341d0026a200341106a104a45044020" + "04200341306a104a450d010b200041013b01000c010b200341c8026a4200" + "370300200341c0026a4200370300200341b8026a4200370300200341b002" + "6a4200370300200341a8026a4200370300200341a0016a200141106a2903" + "00370300200341a8016a200141186a290300370300200341b0016a200141" + "206a290300370300200341b8016a200141286a290300370300200341c001" + "6a200141306a290300370300200341c8016a200141386a29030037030020" + "0342003703a00220032001290300370390012003200141086a2903003703" + "980120034188026a200241386a29030037030020034180026a200241306a" + "290300370300200341f8016a200241286a290300370300200341f0016a20" + "0241206a290300370300200341e8016a200241186a290300370300200341" + "e0016a200241106a290300370300200341d8016a200241086a2903003703" + "0020034201370390022003420037039802200320022903003703d0012003" + "41e0036a4200370300200341e8036a4200370300200341f0036a42003703" + "00200341f8036a420037030020034180046a420037030020034188046a42" + "00370300200342003703d003200342003703d803200342a9c0c689aece93" + "b230370368200342ddb0858ce8b691a8b87f37036020034291e1e5cd8789" + "fa992837035820034280808080bfb2fdf0c300370350200341a0046a41f0" + "00104b1a2003420037039804200342013703900441ff0121040340200320" + "0441ff0071104f200341086a290300200341d0006a200441037641f0ffff" + "ff01716a2206290308832107200329030020062903008321082005044020" + "034190056a200341d0036a1043200341d0036a20034190056a41c001104c" + "1a0b2007200884420052044020034190056a200341d0036a20034190016a" + "1044200341d0036a20034190056a41c001104c1a410121050b200441016b" + "2204417f470d000b20034190056a200341d0036a20034190016a10440240" + "20032903900620034198066a290300844200520d0020032903a006200341" + "a8066a290300844200520d0020032903b006200341b8066a290300844200" + "520d0020032903c006200341c8066a290300844200520d00200341c8056a" + "200141386a290300370300200341c0056a200141306a2903003703002003" + "41b8056a200141286a290300370300200341b0056a200141206a29030037" + "0300200341a8056a200141186a290300370300200341a0056a200141106a" + "290300370300200341d8056a200241086a290300370300200341e0056a20" + "0241106a290300370300200341e8056a200241186a290300370300200341" + "f0056a200241206a290300370300200341f8056a200241286a2903003703" + "0020034180066a200241306a29030037030020034188066a200241386a29" + "03003703002003200129030037039005200320022903003703d005200320" + "0141086a29030037039805200041106a20034190056a418001104c1a2000" + "41003a00000c010b20004181023b01000b200341d0066a24000ba8150207" + "7f137e230041a0016b22022400200241106a2001102a20022d0011210620" + "022d001021072000027f024020022d0030220841c101470440200235011a" + "2109200233011e210a2002290112211620022903202114200241d8006a22" + "01200241286a29030022173703002002201437035020022009200a422086" + "842219421086201642308884220937034820022007ad42ff018320164210" + "862006ad42ff01834208868484220a37034042ddb0858ce8b691a8b87f21" + "0f200241406b200a20092014201742c7faf3c3ed82a3903c428d95c7c396" + "d2dac0977f102b200241406b200a20092014201742c7faf3c3ed82a3903c" + "428d95c7c396d2dac0977f102b0240024002402002290340220942037c22" + "0b200954ad220920022903487c220a200954ad220c20022903507c220942" + "ddb0858ce8b691a8b87f8520012903002009200c54ad7c220e42a9c0c689" + "aece93b2308584500440200b42c7faf3c3ed82a3903c54200a428d95c7c3" + "96d2dac0977f54200a428d95c7c396d2dac0977f511b450d0242a9c0c689" + "aece93b230210e0c010b200942deb0858ce8b691a8b87f54200e42a9c0c6" + "89aece93b23054200e42a9c0c689aece93b230511b450d012009210f0b20" + "0b2110200a210d0c010b200e2009200a200b42c7faf3c3ed82a3903c7d22" + "10200b5aad220b7d220c42f3eab8bce9ada5bfe8007c220d200c54ad200a" + "200b54ad7d7c220a200954ad200a42a2cffaf397c9eed7c7007c220f200a" + "54ad7c50ad7d42a9c0c689aece93b2307d210e0b4190aac0002d00004102" + "470440230041e0006b220324004190aac0004190aac0002d000022044101" + "20041b3a00000240200404400340024002400240200441ff017141016b0e" + "03000501020b03404190aac0002d000022044101460d000b024002402004" + "41016b0e03000601030b000b41a49bc000412641cc9bc0001011000b41a8" + "9ac000410d41949bc0001011000b4190aac0004190aac0002d0000220441" + "0120041b3a000020040d000b0b200341186a220442a9c0c689aece93b230" + "370300200341106a220542ddb0858ce8b691a8b87f3703002003428d95c7" + "c396d2dac0977f370308200342c4faf3c3ed82a3903c370300200341386a" + "220142003703002003420037033020034200370328200342043703202003" + "42a9c0c689aece93b230370358200342ddb0858ce8b691a8b87f37035020" + "03428d95c7c396d2dac0977f370348200342c7faf3c3ed82a3903c370340" + "200341206a200341406b103a200320032903202003290328200329033020" + "0129030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b4190aa" + "c00041023a00004188aac00020042903003703004180aac0002005290300" + "37030041f8a9c000200329030837030041f0a9c00020032903003703000b" + "200341e0006a24000b20024198016a4188aac00029030037030020024190" + "016a4180aac000290300370300200241f8a9c00029030037038801200241" + "f0a9c00029030037038001420021094201210a41ff0121014200210b4200" + "210c0340200220024180016a200141037641f0ffffff01716a2205290300" + "2005290308200141ff0071104e200241286a2205200b3703002002200937" + "03202002200c3703182002200a370310200241106a200a200c2009200b42" + "c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2005290300210b20" + "0229032021092002290318210c2002290310210a20022802004101710440" + "2005200b370300200220093703202002200a3703102002200c3703182002" + "41106a2010200d200f200e42c7faf3c3ed82a3903c428d95c7c396d2dac0" + "977f102b2005290300210b2002290318210c200229032021092002290310" + "210a0b200141016b2201417f470d000b200241286a2201200b3703002002" + "20093703202002200c3703182002200a370310200241106a2010200d200f" + "200e42c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2002200b37" + "0378200220093703702002200c3703682002200a370360200241e0006a20" + "02290310220e2002290318220b2002290320220c2001290300220a42c7fa" + "f3c3ed82a3903c428d95c7c396d2dac0977f102b41e0a9c0002d00004102" + "470440102c0b20024198016a41d8a9c00029030037030020024190016a41" + "d0a9c000290300370300200241c8a9c00029030037038801200241c0a9c0" + "002903003703800141e0a9c0002d00004102470440102c0b20024180016a" + "420142004200420041c0a9c00029030041c8a9c00029030041d0a9c00029" + "030041d8a9c000290300102d2002290388012110200229038001210d0240" + "0240417f200229039001220f42ddb0858ce8b691a8b87f8520024198016a" + "290300220942a9c0c689aece93b2308584420052200f42ddb0858ce8b691" + "a8b87f54200942a9c0c689aece93b23054200942a9c0c689aece93b23051" + "1b1b2201417f470440200141ff01710d01200d42c7faf3c3ed82a3903c54" + "2010428d95c7c396d2dac0977f542010428d95c7c396d2dac0977f511b45" + "0d010b2002200f3703202002200d37031020022009370328200220103703" + "18027e0240200241e0006a200241106a104a0440420021104200210f4200" + "2109200c200e84200a200b8484420052044042c7faf3c3ed82a3903c200e" + "7d2115427f4200427f4200200e42788342c7faf3c3ed82a3903c561b2209" + "2009200b54ad7d2009200b7d220942f3eab8bce9ada5bfe8007d22102009" + "54ad7c42017c2209200c7d220d42a4cffaf397c9eed7c7007d220f200d54" + "ad2009200c54ad7d427f511b200a7d42a9c0c689aece93b2307c21090b20" + "0e201554200b201054200b2010511b200c200f542009200a562009200a51" + "1b200c200f852009200a8584221b501b4101460d0120152111200f211220" + "09210d200e211a200b2118200c210f200a210920100c020b200041033a00" + "010c050b200e2111200c2112200a210d2015211a20102118200b0b211302" + "40024002400240417f201b420052200f2012562009200d562009200d511b" + "1b2201047f2001052011201a54201320185420132018511b0d01200e2015" + "85200b201085844200520b4101460d010b200841c001470d014200210942" + "00210a4200210b4200210c2011201284200d20138484500d04427f420042" + "7f4200201142788342c7faf3c3ed82a3903c561b22092009201354ad7d20" + "0920137d220942f3eab8bce9ada5bfe8007d220a200954ad7c42017c2209" + "20127d220c42a4cffaf397c9eed7c7007d220b200c54ad2009201254ad7d" + "427f511b200d7d42a9c0c689aece93b2307c210c42c7faf3c3ed82a3903c" + "20117d21090c040b2008418001460d010b201121092013210a2012210b20" + "0d210c0c020b420021094200210a4200210b4200210c2011201284200d20" + "138484500d01427f4200427f4200201142788342c7faf3c3ed82a3903c56" + "1b22092009201354ad7d200920137d220942f3eab8bce9ada5bfe8007d22" + "0a200954ad7c42017c220920127d220c42a4cffaf397c9eed7c7007d220b" + "200c54ad2009201254ad7d427f511b200d7d42a9c0c689aece93b2307c21" + "0c42c7faf3c3ed82a3903c20117d21090c010b41e09dc0001020000b2000" + "2014370320200020163701122000200b3703402000200937033020002006" + "3a0011200020073a0010200020193e011a200020173703282000200c3703" + "482000200a3703382000411e6a20194220883d010041000c020b20002006" + "3a0002200020073a00010b41010b3a0000200241a0016a24000ba02f0208" + "7f187e230041c0086b22022400200241f0046a2001102a20022d00f10421" + "0620022d00f0042107024002400240024020022d009005220941c1014704" + "4020024198016a220520022901fa04370300200241a6016a220420024188" + "056a2203290100370100200241a0016a220820024182056a290100370300" + "200220022901f20437039001200241f0046a200141206a102e20022d00f0" + "04450440200241d5076a2003290300220c37000020024188016a20024198" + "056a290300220b37030020024180016a20024190056a290300220a370300" + "200241c8006a200b370300200241406b200a370300200220022903800522" + "0b3703702002200c3703782002200b3703302002200c370338200220063a" + "0051200220073a0050200241e8006a22012004290100370100200241e200" + "6a2008290300370100200241da006a200529030037010020022002290390" + "01370152200941c000460d0220024180026a200241406b29030037030020" + "024188026a200241c8006a29030037030020024190026a200241d0006a29" + "030037030020024198026a200241d8006a290300370300200241a0026a20" + "0241e0006a290300370300200241a8026a20012903003703002002200229" + "03303703f001200220022903383703f801200241f0016a200241306a2002" + "41306a102f20024180086a200241f0016a200241306a102f200242d4fdc3" + "d783f6c4cb003703a805200242f4fbe3f6def5ab964d3703a005200242d2" + "b0b4a9ce90e8a7a77f37039805200242d2ab8caee8a0afd1643703900520" + "0242aed5e2f58ca8a78a2b37038805200242c3d581df919386df817f3703" + "8005200242a3dfefced5bcb1dab57f3703f804200242e5f184a5c2dbf9b3" + "323703f004200241b0016a20024180086a200241f0046a103041f0aac000" + "2d00004102470440230041e0006b2203240041f0aac00041f0aac0002d00" + "002204410120041b3a00000240200404400340024002400240200441ff01" + "7141016b0e03000501020b034041f0aac0002d000022044101460d000b02" + "400240200441016b0e03000601030b000b41a49bc000412641cc9bc00010" + "11000b41a89ac000410d41949bc0001011000b41f0aac00041f0aac0002d" + "00002204410120041b3a000020040d000b0b200341186a220442a9c0c689" + "aece93b230370300200341106a220842ddb0858ce8b691a8b87f37030020" + "03428d95c7c396d2dac0977f370308200342c4faf3c3ed82a3903c370300" + "200341386a22014200370300200342003703302003420037032820034204" + "370320200342a9c0c689aece93b230370358200342ddb0858ce8b691a8b8" + "7f3703502003428d95c7c396d2dac0977f370348200342c7faf3c3ed82a3" + "903c370340200341206a200341406b103a20032003290320200329032820" + "03290330200129030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f" + "102b41f0aac00041023a000041e8aac000200429030037030041e0aac000" + "200829030037030041d8aac000200329030837030041d0aac00020032903" + "003703000b200341e0006a24000b200241c8046a41e8aac0002903003703" + "00200241c0046a41e0aac000290300370300200241d8aac0002903003703" + "b804200241d0aac0002903003703b0044200210c4201210b41ff01210120" + "0241a8076a2104200241b8076a21034200210a0340200241206a200241b0" + "046a200141037641f0ffffff01716a22052903002005290308200141ff00" + "71104e2002200a3703f8072002200c3703f0072002200f3703e807200220" + "0e3703e0072002200d3703d807200220103703d007200220113703c80720" + "02200b3703c0072002200a3703b8082002200c3703b0082002200f3703a8" + "082002200e3703a0082002200d3703980820022010370390082002201137" + "0388082002200b370380082002280220210520024180076a200241c0076a" + "20024180086a102f20024198076a290300210d2004290300210f20032903" + "00210a2002290388072111200229038007210b2002290390072110200229" + "03a007210e20022903b007210c200541017104402002200a3703b8082002" + "200c3703b0082002200f3703a8082002200e3703a0082002200d37039808" + "200220103703900820022011370388082002200b37038008200241c0076a" + "20024180086a200241b0016a102f200241e8076a290300210f200241f807" + "6a290300210a20022903c007210b20022903d007211020022903e007210e" + "20022903f007210c20022903c8072111200241d8076a290300210d0b2001" + "41016b2201417f470d000b2002200c3703e0022002200e3703d002200220" + "103703c0022002200b3703b0022002200a3703e8022002200f3703d80220" + "02200d3703c802200220113703b802200241f0026a200241b0026a200241" + "b0016a102f200241b0036a200241b0026a200241f0026a102f41c0aac000" + "2d0000410247044041c0aac00041c0aac0002d00002201410120011b3a00" + "000240200104400340024002400240200141016b0e03000501020b034041" + "c0aac0002d000022014101460d000b02400240200141016b0e0300060103" + "0b000b41a49bc000412641cc9bc0001011000b41a89ac000410d41949bc0" + "001011000b41c0aac00041c0aac0002d00002201410120011b3a00002001" + "0d000b0b41b8aac00042a9c0c689aece93b23037030041b0aac00042ddb0" + "858ce8b691a8b87f37030041a8aac000428d95c7c396d2dac0977f370300" + "41a0aac00042c7faf3c3ed82a3903c37030041c0aac00041023a00000b0b" + "200241d8066a41b8aac000290300370300200241d0066a41b0aac0002903" + "00370300200241a8aac0002903003703c806200241a0aac0002903003703" + "c0064200210c4201210b41ff012101200241a8076a2104200241b8076a21" + "034200210a4200210e4200210f420021104200210d420021110340200241" + "106a200241c0066a200141037641f0ffffff01716a220529030020052903" + "08200141ff0071104e2002200a3703f8072002200c3703f0072002200f37" + "03e8072002200e3703e0072002200d3703d807200220103703d007200220" + "113703c8072002200b3703c0072002200a3703b8082002200c3703b00820" + "02200f3703a8082002200e3703a0082002200d3703980820022010370390" + "0820022011370388082002200b370380082002280210210520024180076a" + "200241c0076a20024180086a102f20024198076a290300210d2004290300" + "210f2003290300210a2002290388072111200229038007210b2002290390" + "07211020022903a007210e20022903b007210c200541017104402002200a" + "3703b8082002200c3703b0082002200f3703a8082002200e3703a0082002" + "200d37039808200220103703900820022011370388082002200b37038008" + "200241c0076a20024180086a200241b0036a102f200241e8076a29030021" + "0f200241f8076a290300210a20022903c007210b20022903d00721102002" + "2903e007210e20022903f007210c20022903c8072111200241d8076a2903" + "00210d0b200141016b2201417f470d000b2002200c3703b0082002200e37" + "03a00820022010370390082002200b370380082002200a3703b808200220" + "0f3703a8082002200d370398082002201137038808200241f0036a200241" + "80086a200241b0036a102f200241a8086a22014200370300200241b0086a" + "22054200370300200241b8086a22044200370300200242a9c0c689aece93" + "b23037039808200242ddb0858ce8b691a8b87f370390082002428d95c7c3" + "96d2dac0977f37038808200242c6faf3c3ed82a3903c3703800820024200" + "3703a008200241a0086a21030240200241f0036a20024180086a104a4504" + "4020024190046a2003104a450d010b200142003703002005420037030020" + "044200370300200242a9c0c689aece93b23037039808200242ddb0858ce8" + "b691a8b87f370390082002428d95c7c396d2dac0977f37038808200242c6" + "faf3c3ed82a3903c37038008200242003703a008200241b0036a20024180" + "086a104a450440200241d0036a2003104a450d050b4200210c2002419808" + "6a4200370300200241a0086a4200370300200241a8086a42003703002002" + "41b0086a4200370300200241b8086a420037030020024200370388084201" + "210b20024201370380082002420037039008200241c0066a200241b0036a" + "20024180086a103041a0abc0002d00004102470440230041e0006b220324" + "0041a0abc00041a0abc0002d00002204410120041b3a0000024020040440" + "0340024002400240200441ff017141016b0e03000501020b034041a0abc0" + "002d000022044101460d000b02400240200441016b0e03000601030b000b" + "41a49bc000412641cc9bc0001011000b41a89ac000410d41949bc0001011" + "000b41a0abc00041a0abc0002d00002204410120041b3a000020040d000b" + "0b200341186a220442a9c0c689aece93b230370300200341106a220842dd" + "b0858ce8b691a8b87f3703002003428d95c7c396d2dac0977f3703082003" + "42c6faf3c3ed82a3903c370300200341386a220142003703002003420037" + "03302003420037032820034202370320200342a9c0c689aece93b2303703" + "58200342ddb0858ce8b691a8b87f3703502003428d95c7c396d2dac0977f" + "370348200342c7faf3c3ed82a3903c370340200341206a200341406b103a" + "2003200329032020032903282003290330200129030042c7faf3c3ed82a3" + "903c428d95c7c396d2dac0977f102b41a0abc00041023a00004198abc000" + "20042903003703004190abc00020082903003703004188abc00020032903" + "083703004180abc00020032903003703000b200341e0006a24000b200241" + "e8046a4198abc000290300370300200241e0046a4190abc0002903003703" + "0020024188abc0002903003703d80420024180abc0002903003703d00441" + "ff012101200241a8076a2104200241b8076a21034200210a4200210e4200" + "210f420021104200210d4200211103402002200241d0046a200141037641" + "f0ffffff01716a22052903002005290308200141ff0071104e2002200a37" + "03f8072002200c3703f0072002200f3703e8072002200e3703e007200220" + "0d3703d807200220103703d007200220113703c8072002200b3703c00720" + "02200a3703b8082002200c3703b0082002200f3703a8082002200e3703a0" + "082002200d37039808200220103703900820022011370388082002200b37" + "0380082002280200210520024180076a200241c0076a20024180086a102f" + "20024198076a290300210d2004290300210f2003290300210a2002290388" + "072111200229038007210b200229039007211020022903a007210e200229" + "03b007210c200541017104402002200a3703b8082002200c3703b0082002" + "200f3703a8082002200e3703a0082002200d370398082002201037039008" + "20022011370388082002200b37038008200241c0076a20024180086a2002" + "41c0066a102f200241e8076a290300210f200241f8076a290300210a2002" + "2903c007210b20022903d007211020022903e007210e20022903f007210c" + "20022903c8072111200241d8076a290300210d0b200141016b2201417f47" + "0d000b2002200c3703b0062002200e3703a0062002201037039006200220" + "0b370380062002200a3703b8062002200f3703a8062002200d3703980620" + "0220113703880620024180056a20024180066a200241f0026a102f0c050b" + "20004181063b01000c050b200020022d00f1043a0002200041810a3b0100" + "0c040b200020063a0002200020073a0001200041013a00000c030b200241" + "f8066a4200370300200241f0066a4200370300200241e8066a4200370300" + "200241e0066a4200370300200241d8066a4200370300200242003703d006" + "200242003703c806200242013703c006200242ba90b590b9f2a4c7193703" + "f807200242a5baed8ff3f6afb0f2003703f00720024292cea7adb3a692d5" + "713703e807200242c2a5ccf7fab6a1f2977f3703e007200242f6bcfc90f1" + "ddb780183703d807200242f988f1f2e58c80b5c2003703d007200242ddb5" + "fbbacfdac8a1e7003703c807200242ededcbcccdabafefc6003703c00720" + "0241f0046a200241c0066a10310240024020022802f00441017104402002" + "41b8086a2201200241b8056a2205290300370300200241b0086a200241b0" + "056a2204290300370300200241a8086a2203200241a8056a220629030037" + "0300200241a0086a200241a0056a29030037030020024198086a20024198" + "056a220729030037030020024190086a20024190056a2903003703002002" + "20022903800537038008200220024188056a290300370388082002418006" + "6a200241c0076a20024180086a102f200242f5e0ffc285baa283093703f8" + "0720024295e7b0c8d6b5a6cf6c3703f007200242f39dce85b7a6cca5bc7f" + "3703e807200242dbae8a89cddbb6d6d5003703e007200242ebdbb1dcddd4" + "97e4123703d8072002428f81adee88b0dcd5ca003703d007200242fba68f" + "e290edf9e8633703c807200242aafbe9b79680b3f3cc003703c007200241" + "f0046a200241c0066a103120022802f004410171450d0120012005290300" + "370300200241b0086a200429030037030020032006290300370300200241" + "a0086a200241a0056a29030037030020024198086a200729030037030020" + "024190086a20024190056a29030037030020022002290380053703800820" + "0220024188056a2903003703880820024180076a200241c0076a20024180" + "086a102f200241f0046a20024180066a20024180076a100720022d00f004" + "4101460d02200041106a20024180056a418001104c1a200041003a00000c" + "050b41f09dc000412c41989fc0001021000b41f09dc000412c41989fc000" + "1021000b200220022d00f1043a00800841b89cc000412b20024180086a41" + "a89fc00041b4a0c0001013000b20024198086a420037030020024190086a" + "4200370300200242003703b808200242003703b008200242003703a80820" + "0242013703a0082002420037038808200242003703800820024180056a20" + "024180086a200241f0026a102f0b200241a8056a290300210e200241b805" + "6a290300210c20022903a005210f20022903b005210b200229039005220d" + "20022903800522158420024198056a290300221220024188056a29030022" + "1384844200520440427f4200427f4200201542788342c7faf3c3ed82a390" + "3c561b220a200a201354ad7d200a20137d220a42f3eab8bce9ada5bfe800" + "7d2217200a54ad7c42017c220a200d7d221042a4cffaf397c9eed7c7007d" + "2218201054ad200a200d54ad7d427f511b20127d42a9c0c689aece93b230" + "7c211642c7faf3c3ed82a3903c20157d21190b4200211142002110420021" + "0a200b200f84200c200e84844200520440427f4200427f4200200f427883" + "42c7faf3c3ed82a3903c561b220a200a200e54ad7d200a200e7d220a42f3" + "eab8bce9ada5bfe8007d2211200a54ad7c42017c220a200b7d221442a4cf" + "faf397c9eed7c7007d2210201454ad200a200b54ad7d427f511b200c7d42" + "a9c0c689aece93b2307c210a42c7faf3c3ed82a3903c200f7d21140b0240" + "0240417f200b201085200a200c8584420052200b201054200a200c56200a" + "200c511b1b2201450440200f201454200e201154200e2011511b0d01200f" + "201485200e2011858442005221010b2019211c2017211d2018211a201621" + "1b2014211e2011211f20102120200a21210240200141ff01710e02000201" + "0b027e200d20188520122016858450044020152019542013201754201320" + "17511b0d02200d211a20120c010b200d20185a201220165a20122016511b" + "450d0120160b211b0c010b2015211c2013211d200d211a2012211b200f21" + "1e200e211f200b2120200c212120192115201721132018210d2016211220" + "14210f2011210e2010210b200a210c0b200041186a200229037837030020" + "0020022903703703102000200229039001370132200041286a2002418801" + "6a290300370300200041206a20024180016a2903003703002000413a6a20" + "024198016a290300370100200041c2006a200241a0016a29030037010020" + "0041c8006a200241a6016a29010037010020094180014604402000202037" + "0380012000201e3703702000201a3703602000201c370350200020063a00" + "31200020073a0030200041003a000020002021370388012000201f370378" + "2000201b3703682000201d3703580c010b2000200b370380012000200f37" + "03702000200d37036020002015370350200020063a0031200020073a0030" + "200041003a00002000200c370388012000200e3703782000201237036820" + "0020133703580b200241c0086a24000b9f0602027f0c7e23004180016b22" + "022400200241386a4200370300200241306a4200370300200241286a4200" + "370300200241206a22034200370300200241186a4200370300200241106a" + "4200370300200241d8006a4200370300200241e0006a4200370300200241" + "e8006a4200370300200241f0006a4200370300200241f8006a4200370300" + "200242003703482002420137034020024200370308200242003703002002" + "420037035002400240024020012002104a0d00200141206a2003104a0d00" + "200141406b200241406b104a0d00200141e0006a200241e0006a104a450d" + "010b200141f8006a290300210e200141e8006a2903002106200129037021" + "0c2001290360210d200129035022042001290340220884200141d8006a29" + "0300220b200141c8006a290300220984844200520440427f4200427f4200" + "200842788342c7faf3c3ed82a3903c561b22052005200954ad7d20052009" + "7d220542f3eab8bce9ada5bfe8007d220f200554ad7c42017c220a20047d" + "220742a4cffaf397c9eed7c7007d2205200754ad2004200a56ad7d427f51" + "1b200b7d42a9c0c689aece93b2307c210a42c7faf3c3ed82a3903c20087d" + "21070b4200210442002108420021094200210b200c200d842006200e8484" + "4200520440427f4200427f4200200d42788342c7faf3c3ed82a3903c561b" + "22042004200654ad7d200420067d220642f3eab8bce9ada5bfe8007d2208" + "200654ad7c42017c2206200c7d220442a4cffaf397c9eed7c7007d220920" + "0454ad2006200c54ad7d427f511b200e7d42a9c0c689aece93b2307c210b" + "42c7faf3c3ed82a3903c200d7d21040b2000200937037020002004370360" + "20002005370350200020073703402000200b370378200020083703682000" + "200a3703582000200f37034820002001290300370300200041386a200141" + "386a290300370300200041306a200141306a290300370300200041286a20" + "0141286a290300370300200041206a200141206a29030037030020004118" + "6a200141186a290300370300200041106a200141106a2903003703002000" + "41086a200141086a2903003703000c010b20002001418001104c1a0b2002" + "4180016a24000bc10201067f41102000410b6a4178712000410b491b2204" + "411c6a1001220045044041000f0b200041086b210102402000410f714504" + "40200121000c010b200041046b220528020022064178712000410f6a4170" + "7141086b2200200020016b4111494104746a220020016b22026b21032006" + "410371044020002003200028020441017172410272360204200020036a22" + "032003280204410172360204200520022005280200410171724102723602" + "00200120026a220320032802044101723602042001200210170c010b2001" + "2802002101200020033602042000200120026a3602000b02402000280204" + "2201410371450d0020014178712202200441106a4d0d0020002004200141" + "017172410272360204200020046a2201200220046b220441037236020420" + "0020026a220220022802044101723602042001200410170b200041086a0b" + "de0a01047f230041f0026b22032400200341a8026a220442003703002003" + "41a0026a22054200370300200342003703c802200342003703c002200342" + "003703b802200342013703b0022003420037039802200342003703900220" + "0341b0026a21060240024002400240200120034190026a104a4504402001" + "41206a2006104a450d010b20044200370300200542003703002003420037" + "03c802200342003703c002200342003703b802200342013703b002200342" + "00370398022003420037039002200220034190026a104a45044020024120" + "6a2006104a450d020b200341206a2104200341406b2105200341a8026a42" + "00370300200341a0026a4200370300200342003703c802200342003703c0" + "02200342003703b802200342013703b00220034200370398022003420037" + "039002027f0240200120034190026a104a450440200141206a200341b002" + "6a104a450d010b20042001290320370300200441186a200141386a290300" + "370300200441106a200141306a290300370300200441086a200141286a29" + "0300370300200341106a200141106a290300370300200341186a20014118" + "6a290300370300200320012903003703002003200141086a290300370308" + "200341d0006a0c010b20054200370300200341106a420037030020034118" + "6a4200370300200541086a4200370300200541106a420037030020054118" + "6a4200370300200342003703002003420037030820042105200341306a0b" + "210620034180016a2101200341a0016a2104200642003703082006420037" + "03002005420037030820054201370300200341a8026a4200370300200341" + "a0026a4200370300200342003703c802200342003703c002200342003703" + "b802200342013703b00220034200370398022003420037039002027f0240" + "200220034190026a104a450440200241206a200341b0026a104a450d010b" + "20012002290320370300200141186a200241386a29030037030020014110" + "6a200241306a290300370300200141086a200241286a2903003703002003" + "41f0006a200241106a290300370300200341f8006a200241186a29030037" + "0300200320022903003703602003200241086a290300370368200341b001" + "6a0c010b20044200370300200341f0006a4200370300200341f8006a4200" + "370300200441086a4200370300200441106a4200370300200441186a4200" + "37030020034200370360200342003703682001210420034190016a0b2205" + "420037030820054200370300200442003703082004420137030020034190" + "026a2003200341e0006a1040200341c0016a20034190026a104120032802" + "c001410171450d02200020032903d001370300200041386a20034188026a" + "290300370300200041306a20034180026a290300370300200041286a2003" + "41f8016a290300370300200041206a200341f0016a290300370300200041" + "186a200341e8016a290300370300200041106a200341e0016a2903003703" + "00200041086a200341d8016a2903003703000c030b200020022903003703" + "00200041386a200241386a290300370300200041306a200241306a290300" + "370300200041286a200241286a290300370300200041206a200241206a29" + "0300370300200041186a200241186a290300370300200041106a20024110" + "6a290300370300200041086a200241086a2903003703000c020b20002001" + "290300370300200041386a200141386a290300370300200041306a200141" + "306a290300370300200041286a200141286a290300370300200041206a20" + "0141206a290300370300200041186a200141186a29030037030020004110" + "6a200141106a290300370300200041086a200141086a2903003703000c01" + "0b41c4a0c000412041f4a0c0001021000b200341f0026a24000bf2020201" + "7f067e230041e0006b22022400200241386a4200370300200241306a4200" + "370300200242003703582002420037035020024200370348420121042002" + "42013703402002420037032820024200370320027e02402001200241206a" + "104a450440200141206a200241406b104a450d010b200241106a20014110" + "6a290300370300200241186a200141186a29030037030020022001290300" + "3703002002200141086a290300370308200141286a290300210520012903" + "30210620012903202107200141386a2903000c010b42002104200241106a" + "4200370300200241186a4200370300200242003703002002420037030842" + "01210742000b210820004200370358200042003703502000200437034020" + "002006370330200020073703202000200229030037030020002003370348" + "2000200837033820002005370328200041086a2002290308370300200041" + "186a200241186a290300370300200041106a200241106a29030037030020" + "0241e0006a24000b5b01027f0240200041046b2802002202417871220341" + "044108200241037122021b20016a4f0440200241002003200141276a4b1b" + "0d01200010040f0b41f996c000412e41a897c0001011000b41b897c00041" + "2e41e897c0001011000bc30802027f047e230041a0026b22022400200241" + "d8016a4200370300200241d0016a4200370300200241c8016a4200370300" + "200241c0016a22034200370300200241b8016a4200370300200241b0016a" + "4200370300200241f8016a420037030020024180026a4200370300200241" + "88026a420037030020024190026a420037030020024198026a4200370300" + "200242003703e80142012105200242013703e001200242003703a8012002" + "42003703a001200242003703f0010240024002402001200241a0016a104a" + "0d00200141206a2003104a0d00200141406b200241e0016a104a0d002001" + "41e0006a20024180026a104a450d010b200241106a420037030020024118" + "6a4200370300200241206a4200370300200241286a420037030020024140" + "6b200141e0006a290300370300200241c8006a200141e8006a2903003703" + "00200241d0006a200141f0006a290300370300200241d8006a200141f800" + "6a2903003703002002420037030020024200370308200220012903503703" + "302002200141d8006a290300370338200141c8006a290300210620012903" + "40210720024198016a200141386a29030037030020024190016a20014130" + "6a29030037030020024188016a200141286a29030037030020024180016a" + "200141206a290300370300200241f8006a200141186a2903003703002002" + "41f0006a200141106a2903003703002002200141086a2903003703682002" + "20012903003703600c010b42002105200241f0006a4200370300200241f8" + "006a420037030020024180016a420037030020024188016a420037030020" + "024190016a420037030020024198016a4200370300200241406b42003703" + "00200241c8006a4200370300200241d0006a4200370300200241d8006a42" + "00370300200241106a4200370300200241186a4200370300200241206a42" + "00370300200241286a420037030020024200370360200242003703682002" + "420037033020024200370338200242003703002002420037030842012107" + "0b2000200737034020002002290360370300200020022903303703502000" + "2006370348200041086a2002290368370300200041d8006a200229033837" + "0300200041386a20024198016a290300370300200041306a20024190016a" + "290300370300200041286a20024188016a290300370300200041206a2002" + "4180016a290300370300200041186a200241f8006a290300370300200041" + "106a200241f0006a290300370300200041e0006a200241406b2903003703" + "00200041e8006a200241c8006a290300370300200041f0006a200241d000" + "6a290300370300200041f8006a200241d8006a2903003703002000200437" + "0388012000200537038001200020022903003703900120004198016a2002" + "290308370300200041a0016a200241106a290300370300200041a8016a20" + "0241186a290300370300200041b0016a200241206a290300370300200041" + "b8016a200241286a290300370300200241a0026a24000b6802017f017e23" + "0041306b2203240020032001360204200320003602002003410236020c20" + "0341c481c00036020820034202370214200342808080801022042003ad84" + "37032820032004200341046aad843703202003200341206a360210200341" + "086a2002101a000b4101017f230041206b22032400200341003602102003" + "4101360204200342043702082003200136021c2003200036021820032003" + "41186a36020020032002101a000b6801017f230041306b22032400200320" + "01360204200320003602002003410236020c2003418484c0003602082003" + "42023702142003200341046aad4280808080108437032820032003ad4280" + "80808010843703202003200341206a360210200341086a2002101a000b79" + "01017f230041406a220524002005200136020c2005200036020820052003" + "360214200520023602102005410236021c200541d881c000360218200542" + "023702242005200541106aad428080808020843703382005200541086aad" + "428080808030843703302005200541306a360220200541186a2004101a00" + "0b3601017f230041206b22012400200141003602182001410136020c2001" + "41d480c00036020820014204370210200141086a2000101a000bcc060105" + "7f0240024002400240200041046b22062802002207417871220441044108" + "200741037122051b20016a4f044020054100200141276a22082004491b0d" + "0102400240200241094f04402003100b22040d0141000f0b41102003410b" + "6a4178712003410b491b2101024020054504402001418002490d01200420" + "01410472490d01200420016b418180084f0d010c030b200041086b220220" + "046a2105024002400240200120044b0440200541a0a9c000280200460d03" + "2005419ca9c000280200460d02200528020422074102710d042007417871" + "220720046a22042001490d04200520071016200420016b22034110490d01" + "20062001200628020041017172410272360200200120026a220120034103" + "72360204200220046a220420042802044101723602042001200310172000" + "0f0b200420016b2203410f4d0d0520062001200741017172410272360200" + "200120026a22012003410372360204200520052802044101723602042001" + "2003101720000f0b20062004200628020041017172410272360200200220" + "046a2201200128020441017236020420000f0b4194a9c00028020020046a" + "22042001490d010240200420016b2203410f4d0440200620074101712004" + "72410272360200200220046a220120012802044101723602044100210341" + "0021010c010b20062001200741017172410272360200200120026a220120" + "03410172360204200220046a2204200336020020042004280204417e7136" + "02040b419ca9c00020013602004194a9c000200336020020000f0b4198a9" + "c00028020020046a220420014b0d070b20031001220145044041000f0b20" + "012000417c4178200628020022044103711b20044178716a220420032003" + "20044b1b104c21012000100420010f0b200420002001200320012003491b" + "104c210420062802002203417871220541044108200341037122031b2001" + "6a490d0320034100200520084b1b0d0420001004200421000b20000f0b41" + "f996c000412e41a897c0001011000b41b897c000412e41e897c000101100" + "0b41f996c000412e41a897c0001011000b41b897c000412e41e897c00010" + "11000b20062001200741017172410272360200200120026a220320042001" + "6b22014101723602044198a9c000200136020041a0a9c000200336020020" + "000bf10201047f200028020c21020240024020014180024f044020002802" + "1821040240024020002002460440200041144110200028021422021b6a28" + "020022010d01410021020c020b20002802082201200236020c2002200136" + "02080c010b200041146a200041106a20021b210303402003210520012202" + "41146a200241106a200228021422011b210320024114411020011b6a2802" + "0022010d000b200541003602000b2004450d022000200028021c41027441" + "f4a5c0006a220128020047044020044110411420042802102000461b6a20" + "023602002002450d030c020b2001200236020020020d014190a9c0004190" + "a9c000280200417e200028021c77713602000c020b200028020822032002" + "4704402003200236020c200220033602080f0b418ca9c000418ca9c00028" + "0200417e200141037677713602000f0b2002200436021820002802102201" + "044020022001360210200120023602180b20002802142201450d00200220" + "01360214200120023602180b0ba90601047f200020016a21020240024020" + "0028020422034101710d002003410271450d012000280200220320016a21" + "01200020036b2200419ca9c0002802004604402002280204410371410347" + "0d014194a9c000200136020020022002280204417e713602042000200141" + "0172360204200220013602000c020b2000200310160b0240024002402002" + "2802042203410271450440200241a0a9c000280200460d022002419ca9c0" + "00280200460d0320022003417871220310162000200120036a2201410172" + "360204200020016a20013602002000419ca9c000280200470d014194a9c0" + "0020013602000f0b20022003417e71360204200020014101723602042000" + "20016a20013602000b20014180024f0440411f2102200042003702102001" + "41ffffff074d04402001410620014108766722026b764101712002410174" + "6b413e6a21020b2000200236021c200241027441f4a5c0006a2103410120" + "027422044190a9c000280200714504402003200036020020002003360218" + "2000200036020c200020003602084190a9c0004190a9c000280200200472" + "3602000f0b02400240200120032802002204280204417871460440200421" + "020c010b2001411920024101766b41002002411f471b7421030340200420" + "03411d764104716a41106a22052802002202450d02200341017421032002" + "210420022802044178712001470d000b0b20022802082201200036020c20" + "022000360208200041003602182000200236020c200020013602080f0b20" + "052000360200200020043602182000200036020c200020003602080f0b20" + "0141f801714184a7c0006a2102027f418ca9c00028020022034101200141" + "037674220171450440418ca9c000200120037236020020020c010b200228" + "02080b2101200220003602082001200036020c2000200236020c20002001" + "3602080f0b41a0a9c00020003602004198a9c0004198a9c0002802002001" + "6a2201360200200020014101723602042000419ca9c000280200470d0141" + "94a9c0004100360200419ca9c00041003602000f0b419ca9c00020003602" + "004194a9c0004194a9c00028020020016a22013602002000200141017236" + "0204200020016a20013602000b0b8e0201057f230041206b220324002000" + "2802002202417f460440410020011019000b410820024101742204200241" + "016a2205200420054b1b2204200441084d1b220441004804404100200110" + "19000b20032002047f2003200236021c2003200028020436021441010541" + "000b360218200341086a2105027f0240200341146a220228020404402002" + "280208220645044041bda9c0002d00001a0c020b20022802002006410120" + "0410150c020b41bda9c0002d00001a0b200410010b210220052004360208" + "20052002410120021b360204200520024536020020032802084101460440" + "20032802101a200328020c20011019000b200328020c2102200020043602" + "0020002002360204200341206a24000b0d002000450440200110140b000b" + "f40102027f017e230041106b22022400200241013b010c20022001360208" + "20022000360204230041106b22002400200241046a220129020021042000" + "200136020c20002004370204230041106b22022400200041046a22012802" + "00220028020c2103024002400240024020002802040e020001020b20030d" + "0141012100410021030c020b20030d002000280200220028020421032000" + "28020021000c010b20024180808080783602002002200136020c20012802" + "0822012d0008210020012d00091a2002410420001033000b200220033602" + "0420022000360200200128020822012d0008210020012d00091a20024105" + "20001033000b6801017f230041306b220324002003200136020420032000" + "3602002003410236020c200341e483c00036020820034202370214200320" + "0341046aad4280808080108437032820032003ad42808080801084370320" + "2003200341206a360210200341086a2002101a000bcf06010b7f20002802" + "002102230041106b22072400410a2103024020024190ce00490440200221" + "000c010b0340200741066a20036a220441046b20024190ce006e220041f0" + "b1036c20026a220541ffff037141e4006e220641017441e881c0006a2f00" + "003b0000200441026b2006419c7f6c20056a41ffff037141017441e881c0" + "006a2f00003b0000200341046b2103200241ffc1d72f4b21042000210220" + "040d000b0b0240200041e3004d0440200021020c010b200341026b220320" + "0741066a6a200041ffff037141e4006e2202419c7f6c20006a41ffff0371" + "41017441e881c0006a2f00003b00000b02402002410a4f0440200341026b" + "2203200741066a6a200241017441e881c0006a2f00003b00000c010b2003" + "41016b2203200741066a6a20024130723a00000b027f200741066a20036a" + "210941012108410a20036b220a2001280214220241017122056a21062008" + "410020024104711b2108412b418080c40020051b21052001280200450440" + "4101200128021c22002001280220220320052008101d0d011a2000200920" + "0a200328020c1103000c010b0240024002402006200128020422004f0440" + "200128021c22002001280220220320052008101d450d0141010c040b2002" + "410871450d01200128021021022001413036021020012d0018210c410121" + "0b200141013a0018200128021c22032001280220220420052008101d0d02" + "200020066b41016a210002400340200041016b2200450d01200341302004" + "280210110200450d000b41010c040b410120032009200a200428020c1103" + "000d031a2001200c3a00182001200236021041000c030b20002009200a20" + "0328020c110300210b0c010b200020066b2102024002400240410120012d" + "0018220020004103461b220041016b0e020001020b20022100410021020c" + "010b20024101762100200241016a41017621020b200041016a2100200128" + "0210210620012802202103200128021c210402400340200041016b220045" + "0d01200420062003280210110200450d000b41010c020b4101210b200420" + "0320052008101d0d0020042009200a200328020c1103000d004100210003" + "40410020002002460d021a200041016a2100200420062003280210110200" + "450d000b200041016b2002490c010b200b0b2102200741106a240020020b" + "380002402002418080c400460d00200020022001280210110200450d0041" + "010f0b200345044041000f0b200020034100200128020c1103000bfd0a01" + "0c7f20002802042107200028020021030240024020012802002209200128" + "0208220072044002402000410171450d00200320076a2106024020012802" + "0c2205450440200321020c010b200321020340200222002006460d02027f" + "200041016a20002c0000220241004e0d001a200041026a20024160490d00" + "1a200041036a20024170490d001a200041046a0b220220006b20046a2104" + "2005200841016a2208470d000b0b20022006460d0020022c00001a200420" + "07027f02402004450d00200420074f044020042007460d0141000c020b20" + "0320046a2c000041404e0d0041000c010b20030b22001b21072000200320" + "001b21030b2009450440200128021c20032007200128022028020c110300" + "0f0b2001280204210c200741104f044020072003200341036a417c712204" + "6b22086a220a41037121094100210541002100200320044704402008417c" + "4d04404100210603402000200320066a22022c000041bf7f4a6a20024101" + "6a2c000041bf7f4a6a200241026a2c000041bf7f4a6a200241036a2c0000" + "41bf7f4a6a2100200641046a22060d000b0b200321020340200020022c00" + "0041bf7f4a6a2100200241016a2102200841016a22080d000b0b02402009" + "450d002004200a417c716a22022c000041bf7f4a210520094101460d0020" + "0520022c000141bf7f4a6a210520094102460d00200520022c000241bf7f" + "4a6a21050b200a4102762106200020056a21050340200421092006450d04" + "41c0012006200641c0014f1b220a410371210b200a410274210d41002102" + "200641044f04402004200d41f007716a2108200421000340200028020c22" + "04417f7341077620044106767241818284087120002802082204417f7341" + "077620044106767241818284087120002802042204417f73410776200441" + "06767241818284087120002802002204417f734107762004410676724181" + "8284087120026a6a6a6a2102200041106a22002008470d000b0b2006200a" + "6b21062009200d6a2104200241087641ff81fc0771200241ff81fc07716a" + "418180046c41107620056a2105200b450d000b2009200a41fc0171410274" + "6a22022802002200417f734107762000410676724181828408712100200b" + "4101460d0220022802042204417f73410776200441067672418182840871" + "20006a2100200b4102460d0220022802082202417f734107762002410676" + "7241818284087120006a21000c020b2007450440410021050c030b200741" + "03712102027f200741044904404100210041000c010b20032c000041bf7f" + "4a20032c000141bf7f4a6a20032c000241bf7f4a6a20032c000341bf7f4a" + "6a22052007410c7122004104460d001a200520032c000441bf7f4a6a2003" + "2c000541bf7f4a6a20032c000641bf7f4a6a20032c000741bf7f4a6a2205" + "20004108460d001a200520032c000841bf7f4a6a20032c000941bf7f4a6a" + "20032c000a41bf7f4a6a20032c000b41bf7f4a6a0b21052002450d022000" + "20036a21000340200520002c000041bf7f4a6a2105200041016a21002002" + "41016b22020d000b0c020b200128021c20032007200128022028020c1103" + "000f0b200041087641ff811c71200041ff81fc07716a418180046c411076" + "20056a21050b02402005200c490440200c20056b21060240024002402001" + "2d00182200410020004103471b220041016b0e020001020b200621004100" + "21060c010b20064101762100200641016a41017621060b200041016a2100" + "2001280210210820012802202102200128021c21040340200041016b2200" + "450d02200420082002280210110200450d000b41010f0b200128021c2003" + "2007200128022028020c1103000f0b200420032007200228020c11030004" + "4041010f0b4100210003402000200646044041000f0b200041016a210020" + "0420082002280210110200450d000b200041016b2006490b140020002802" + "002001200028020428020c1102000b0e0041e480c000412b20001011000b" + "5901017f230041306b220324002003200136020c20032000360208200341" + "01360214200341dc80c0003602102003420137021c2003200341086aad42" + "8080808030843703282003200341286a360218200341106a2002101a000b" + "7f01017f027f0240027f0240200228020404402002280208220345044020" + "01450d0441bda9c0002d00001a0c020b200228020020034104200110150c" + "020b2001450d0241bda9c0002d00001a0b200110010b2202410420021b21" + "032002450c010b4104210341000b21022000200136020820002003360204" + "200020023602000bdd0101087f230041206b220224002000280200220341" + "7f460440410020011019000b20034101742204200341016a220620042006" + "4b1b220441ffffffff034b0440410020011019000b024041042004200441" + "044d1b2207410274220641fcffffff074d047f4100210420022003047f20" + "02200341027436021c2002200028020436021441040520040b3602182002" + "41086a2006200241146a102220022802084101470d012002280210210520" + "0228020c0520050b210820052109200820011019000b200228020c210320" + "00200736020020002003360204200241206a24000bd10d021c7f077e2300" + "41206b220c2400200341016b211102400240024002402003044020034102" + "6b210520034101460d0402402001280208221420036b221941016a220e41" + "ffffffff034b0d00200e410274220441fdffffff074f0d00200220114102" + "746a2802002115200220054102746a3502002123027f2004450440410421" + "0b41000c010b41bda9c0002d00001a20041001220b450d05200b41046b2d" + "00004103710440200b2004104b1a0b200e0b21102001280200211a201421" + "09200e044020012802042212200941027420034102746b6a211320034101" + "7121162003417e71210d201241086b211b201241046b211c42002015ad22" + "2242208622247d2125200e210f0340024020090440201c20094102742204" + "6a22050d010b41ec87c0001020000b027f0240200941024f044020052802" + "0021052004201b6a350200212120082015490d012005ad2008ad7c212041" + "7f0c020b417f417e20141b410141fc87c0001010000b2005ad2008ad4220" + "868422202020202280222620227e7d21202026a70b21070240202042ffff" + "ffff0f560d00202520204220867c20217c21210340202120247c22212007" + "ad20237e5a0d01200741016b2107202020227c2220428080808010540d00" + "0b0b02400240024002402009200f41016b220f4f0440200f410274211720" + "09200f460d04201220176a21182007ad212102400240201145044042ffff" + "ffff0f2120410021060c010b4100210642ffffffff0f2120201321042002" + "210503402004202020043502007c202120053502007e7d42ffffffff1f7d" + "22203e0200200441046a220a200a35020020204220887c2021200541046a" + "3502007e7d42ffffffff1f7d22203e020020204220882120200441086a21" + "04200541086a2105200d200641026a2206470d000b2016450d010b201820" + "0641027422046a2205202020053502007c2021200220046a3502007e7d42" + "ffffffff1f7d22203e0200202042208821200b20082020a7417f734f0d04" + "20114504404100210a410021080c030b41002104410021084100210a0340" + "200420136a22052005280200221d200220046a221e2802006a220620086a" + "2208360200200541046a22052005280200221f201e41046a2802006a2205" + "2006201d49200620084b726a22063602002005201f49200520064b722108" + "200441086a2104200d200a41026a220a470d000b0c010b200f2009418c88" + "c000101b000b2016450d010b2018200a41027422046a2205200528020020" + "0220046a2802006a20086a3602000b200741016b21070b200b20176a2007" + "3602002001200941016b2209360208201341046b2113201220094102746a" + "2802002108200f0d000b0b2009201a460440200141dc87c00010230b2001" + "200941016a220d3602082001280204220a200941027422046a2008360200" + "20080d03200d41ffffffff0371210702400340200721052004417c460d01" + "200541016b21072004200a6a2106200441046b21042006280200450d000b" + "2005200d4b0d040c030b410021050c020b41cc87c0001014000b20114100" + "41ac87c0001010000b200120053602082005210d0b024002400240024002" + "40200d200128020022044102764f0d002004200d490d012004450d002004" + "41027421040240200d450440200a41046b28020022054178712207410441" + "08200541037122051b20046a490d04200541002007200441276a4b1b0d05" + "200a1004410421040c010b200a20044104200d41027410152204450d060b" + "2001200d360200200120043602040b41002106200e450d03200b200e4102" + "746a41046b2802000440200e21060c040b201441027420034102746b2104" + "201941026a210503402004417c460d04200541016b21052004200b6a2107" + "200441046b21042007280200450d000b200e20052005200e4b1b21060c03" + "0b200c4100360218200c410136020c200c41ec84c000360208200c420437" + "0210200c41086a41f484c000101a000b41f996c000412e41a897c0001011" + "000b41b897c000412e41e897c0001011000b024002400240024020104102" + "7620064d0440201021040c010b200620104b0d01410021042010450d0020" + "1041027421052006450440200b41046b2802002207417871220a41044108" + "200741037122071b20056a490d0320074100200a200541276a4b1b0d0420" + "0b10044104210b0c010b200b20054104200622044102741015220b450d04" + "0b200020063602082000200b360204200020043602002000200129020037" + "020c200041146a200141086a280200360200200c41206a24000f0b200c41" + "00360218200c410136020c200c41ec84c000360208200c4204370210200c" + "41086a41f484c000101a000b41f996c000412e41a897c0001011000b41b8" + "97c000412e41e897c00010110b000b2005410141bc87c0001010000be609" + "010c7f230041306b220724002001280200210c0240024002400240024002" + "400240024002400240024002400240024020024504402001280204210b20" + "0c418080808078470d02200b41086a280200220441ffffffff034d044020" + "04410274220641fdffffff07490d020b41a89cc0001014000b2001280204" + "220b2001200c418080808078461b2208280208220941feffffff014f0d04" + "41bda9c0002d00001a200941026a220141027410012205450d0720054100" + "360200200720053602102007200136020c41012101200741013602142008" + "2802082206410274210d200828020421082006200941016a4b0440200741" + "0c6a2105230041206b22042400024002402006417f460d00200528020022" + "09410174220a200641016a22012001200a491b220141ffffffff034b0d00" + "41042001200141044d1b220f410274220a41fcffffff074b0d0020042009" + "047f2004200941027436021c2004200528020436021441040541000b3602" + "18200441086a200a200441146a102220042802084101470d012004280210" + "1a200428020c210e0b200e41c096c0001019000b200428020c2101200520" + "0f36020020052001360204200441206a2400200728021021052007280214" + "21010b200520014102746a2008200d104c1a2007200120066a2204360214" + "0c030b200b41046a28020021092006450440410421054100210141042009" + "2006104c1a0c020b41bda9c0002d00001a20042101200610012205450d06" + "200520092006104c1a0c010b20012802082104200c2101200b21050b2007" + "2004360214200720053602102007200136020c0b200341ff0171450d0202" + "40200220044d044020022004470d01200221040c040b2002410041c889c0" + "00101b000b20044102742109200241027421012003411f71210841002003" + "6b411f71210d410021030340200120056a22062006280200220620087420" + "03723602002006200d7621032009200141046a2201470d000b0c010b41a8" + "89c00010140c020b2003450d00200728020c20044604402007410c6a41b8" + "89c0001023200728021021050b200520044102746a200336020020072004" + "41016a22043602140b41002108200728020c210a02402004450d00200520" + "0441027422016a41046b2802000440200421080c010b200541046b210d20" + "0441ffffffff037121030340200321062001450d01200641016b21032001" + "200d6a2109200141046b21012009280200450d000b200420062004200649" + "1b21080b0240200a41027620084d0440200a21010c010b2008200a4b0d02" + "41002101200a450d00200a41027421032008450440200541046b28020022" + "06417871220941044108200641037122061b20036a490d04200641002009" + "200341276a4b1b0d0520051004410421050c010b20052003410420082201" + "41027410152205450d010b20002008360208200020053602042000200136" + "02002002450d06200c41808080807872418080808078460d06200b41046b" + "28020022014178712203200c410274220641044108200141037122011b6a" + "490d04200141002003200641276a4b1b0d05200b10040c060b000b200741" + "003602282007410136021c200741ec84c000360218200742043702202007" + "41186a41f484c000101a000b41f996c000412e41a897c0001011000b41b8" + "97c000412e41e897c0001011000b41f996c000412e41a897c0001011000b" + "41b897c000412e41e897c0001011000b200741306a24000bc60201027f41" + "bda9c0002d00001a024002400240412010012202450d0020022001290000" + "370200200220012900083702082002200129001037021020022001280018" + "3602182002200128001c220336021c410821012000027f410820030d001a" + "41082002411c6a2802000d001a4107200241186a2802000d001a41062002" + "41146a2802000d001a4105200241106a2802000d001a41042002410c6a28" + "02000d001a4103200241086a2802000d001a4102200241046a2802000d00" + "1a2002280200450440200241046b28020022014178714124412820014103" + "7122031b490d0320034100200141c8004f1b0d0420021004410421024100" + "210141000c010b200241204104410410152202450d014101210141010b36" + "020820002002360204200020013602000f0b000b41f996c000412e41a897" + "c0001011000b41b897c000412e41e897c0001011000bcc3e01227f200120" + "024106746a2124200028021c21222000280218211f2000280214211e2000" + "280210211b200028020c2123200028020821202000280204211d20002802" + "002102034020022001280000220341187420034180fe0371410874722003" + "4108764180fe03712003411876727222152022201b411a77201b41157773" + "201b410777736a201e201f73201b71201f736a6a4198dfa894046a220420" + "1d202073200271201d202071732002411e772002411377732002410a7773" + "6a6a2203411e772003411377732003410a777320032002201d7371200220" + "1d71736a201f2001280004220541187420054180fe037141087472200541" + "08764180fe03712005411876727222136a200420236a2207201b201e7371" + "201e736a2007411a772007411577732007410777736a419189dd89076a22" + "066a2205411e772005411377732005410a77732005200220037371200220" + "0371736a201e2001280008220441187420044180fe037141087472200441" + "08764180fe03712004411876727222146a200620206a220c2007201b7371" + "201b736a200c411a77200c41157773200c410777736a41b188fcd1046b22" + "0d6a2204411e772004411377732004410a77732004200320057371200320" + "0571736a201b200128000c220641187420064180fe037141087472200641" + "08764180fe03712006411876727222116a200d201d6a220d2007200c7371" + "2007736a200d411a77200d41157773200d410777736a41dbc8a8b2016b22" + "086a2206411e772006411377732006410a77732006200420057371200420" + "0571736a20072001280010220f411874200f4180fe037141087472200f41" + "08764180fe0371200f411876727222166a200220086a220f200c200d7371" + "200c736a200f411a77200f41157773200f410777736a41db84dbca036a22" + "096a2207411e772007411377732007410a77732007200420067371200420" + "0671736a2001280014220841187420084180fe0371410874722008410876" + "4180fe0371200841187672722218200c6a200320096a220c200d200f7371" + "200d736a200c411a77200c41157773200c410777736a41f1a3c4cf056a22" + "096a2203411e772003411377732003410a77732003200620077371200620" + "0771736a2001280018220841187420084180fe0371410874722008410876" + "4180fe0371200841187672722219200d6a200520096a220d200c200f7371" + "200f736a200d411a77200d41157773200d410777736a41dcfa81ee066b22" + "096a2205411e772005411377732005410a77732005200320077371200320" + "0771736a200128001c220841187420084180fe0371410874722008410876" + "4180fe037120084118767272221a200f6a200420096a220f200c200d7371" + "200c736a200f411a77200f41157773200f410777736a41abc28ea7056b22" + "096a2204411e772004411377732004410a77732004200320057371200320" + "0571736a2001280020220841187420084180fe0371410874722008410876" + "4180fe0371200841187672722202200c6a200620096a220c200d200f7371" + "200d736a200c411a77200c41157773200c410777736a41e8aae1bf026b22" + "096a2206411e772006411377732006410a77732006200420057371200420" + "0571736a2001280024220841187420084180fe0371410874722008410876" + "4180fe037120084118767272220a200d6a200720096a220d200c200f7371" + "200f736a200d411a77200d41157773200d410777736a4181b68d94016a22" + "096a2207411e772007411377732007410a77732007200420067371200420" + "0671736a2001280028220841187420084180fe0371410874722008410876" + "4180fe037120084118767272220b200f6a200320096a220f200c200d7371" + "200c736a200f411a77200f41157773200f410777736a41be8bc6a1026a22" + "096a2203411e772003411377732003410a77732003200620077371200620" + "0771736a200128002c220841187420084180fe0371410874722008410876" + "4180fe0371200841187672722210200c6a200520096a2208200d200f7371" + "200d736a2008411a772008411577732008410777736a41c3fbb1a8056a22" + "096a2205411e772005411377732005410a77732005200320077371200320" + "0771736a2001280030220c411874200c4180fe037141087472200c410876" + "4180fe0371200c4118767272221c200d6a200420096a22092008200f7371" + "200f736a2009411a772009411577732009410777736a41f4baf995076a22" + "0d6a2204411e772004411377732004410a77732004200320057371200320" + "0571736a2001280034220c411874200c4180fe037141087472200c410876" + "4180fe0371200c41187672722221200f6a2006200d6a220e200820097371" + "2008736a200e411a77200e41157773200e410777736a41829c85f9076b22" + "0d6a2206411e772006411377732006410a77732006200420057371200420" + "0571736a2001280038220c411874200c4180fe037141087472200c410876" + "4180fe0371200c4118767272220c20086a2007200d6a22122009200e7371" + "2009736a2012411a772012411577732012410777736a41d9f28fa1066b22" + "0f6a2207411e772007411377732007410a77732007200420067371200420" + "0671736a200128003c220d411874200d4180fe037141087472200d410876" + "4180fe0371200d4118767272220d20096a2003200f6a2217200e20127371" + "200e736a2017411a772017411577732017410777736a418c9d90f3036b22" + "086a2203411e772003411377732003410a77732003200620077371200620" + "0771736a20134119772013410e777320134103767320156a200a6a200c41" + "0f77200c410d7773200c410a76736a220f200e6a200520086a2215201220" + "1773712012736a2015411a772015411577732015410777736a41bfac92db" + "016b22096a2205411e772005411377732005410a77732005200320077371" + "2003200771736a20144119772014410e777320144103767320136a200b6a" + "200d410f77200d410d7773200d410a76736a220820126a200420096a2213" + "2015201773712017736a2013411a772013411577732013410777736a41fa" + "f08682016b220e6a2204411e772004411377732004410a77732004200320" + "0573712003200571736a20114119772011410e777320114103767320146a" + "20106a200f410f77200f410d7773200f410a76736a220920176a2006200e" + "6a22142013201573712015736a2014411a77201441157773201441077773" + "6a41c6bb86fe006a22126a2206411e772006411377732006410a77732006" + "2004200573712004200571736a20164119772016410e7773201641037673" + "20116a201c6a2008410f772008410d77732008410a76736a220e20156a20" + "0720126a22112013201473712013736a2011411a77201141157773201141" + "0777736a41ccc3b2a0026a22176a2207411e772007411377732007410a77" + "7320072004200673712004200671736a20184119772018410e7773201841" + "03767320166a20216a2009410f772009410d77732009410a76736a221220" + "136a200320176a22162011201473712014736a2016411a77201641157773" + "2016410777736a41efd8a4ef026a22156a2203411e772003411377732003" + "410a777320032006200773712006200771736a20194119772019410e7773" + "20194103767320186a200c6a200e410f77200e410d7773200e410a76736a" + "221720146a200520156a22182011201673712011736a2018411a77201841" + "1577732018410777736a41aa89d2d3046a22136a2205411e772005411377" + "732005410a777320052003200773712003200771736a201a411977201a41" + "0e7773201a4103767320196a200d6a2012410f772012410d77732012410a" + "76736a221520116a200420136a22192016201873712016736a2019411a77" + "2019411577732019410777736a41dcd3c2e5056a22146a2204411e772004" + "411377732004410a777320042003200573712003200571736a2002411977" + "2002410e7773200241037673201a6a200f6a2017410f772017410d777320" + "17410a76736a221320166a200620146a221a2018201973712018736a201a" + "411a77201a41157773201a410777736a41da91e6b7076a22116a2206411e" + "772006411377732006410a777320062004200573712004200571736a200a" + "411977200a410e7773200a4103767320026a20086a2015410f772015410d" + "77732015410a76736a221420186a200720116a22022019201a7371201973" + "6a2002411a772002411577732002410777736a41aedd86be066b22166a22" + "07411e772007411377732007410a77732007200420067371200420067173" + "6a200b411977200b410e7773200b41037673200a6a20096a2013410f7720" + "13410d77732013410a76736a221120196a200320166a220a2002201a7371" + "201a736a200a411a77200a41157773200a410777736a4193f3b8be056b22" + "186a2203411e772003411377732003410a77732003200620077371200620" + "0771736a20104119772010410e7773201041037673200b6a200e6a201441" + "0f772014410d77732014410a76736a2216201a6a200520186a220b200220" + "0a73712002736a200b411a77200b41157773200b410777736a41b8b0f3ff" + "046b22196a2205411e772005411377732005410a77732005200320077371" + "2003200771736a201c411977201c410e7773201c4103767320106a20126a" + "2011410f772011410d77732011410a76736a221820026a200420196a2202" + "200a200b7371200a736a2002411a772002411577732002410777736a41b9" + "809a85046b221a6a2204411e772004411377732004410a77732004200320" + "0573712003200571736a20214119772021410e7773202141037673201c6a" + "20176a2016410f772016410d77732016410a76736a2219200a6a2006201a" + "6a220a2002200b7371200b736a200a411a77200a41157773200a41077773" + "6a418de8ffc8036b22106a2206411e772006411377732006410a77732006" + "2004200573712004200571736a200c411977200c410e7773200c41037673" + "20216a20156a2018410f772018410d77732018410a76736a221a200b6a20" + "0720106a220b2002200a73712002736a200b411a77200b41157773200b41" + "0777736a41b9dde1d2026b22106a2207411e772007411377732007410a77" + "7320072004200673712004200671736a200d411977200d410e7773200d41" + "037673200c6a20136a2019410f772019410d77732019410a76736a220c20" + "026a200320106a2202200a200b7371200a736a2002411a77200241157773" + "2002410777736a41d1c6a9366a22106a2203411e77200341137773200341" + "0a777320032006200773712006200771736a200f411977200f410e777320" + "0f41037673200d6a20146a201a410f77201a410d7773201a410a76736a22" + "0d200a6a200520106a220a2002200b7371200b736a200a411a77200a4115" + "7773200a410777736a41e7d2a4a1016a22106a2205411e77200541137773" + "2005410a777320052003200773712003200771736a20084119772008410e" + "7773200841037673200f6a20116a200c410f77200c410d7773200c410a76" + "736a220f200b6a200420106a220b2002200a73712002736a200b411a7720" + "0b41157773200b410777736a418595dcbd026a22106a2204411e77200441" + "1377732004410a777320042003200573712003200571736a200941197720" + "09410e777320094103767320086a20166a200d410f77200d410d7773200d" + "410a76736a220820026a200620106a2202200a200b7371200a736a200241" + "1a772002411577732002410777736a41b8c2ecf0026a22106a2206411e77" + "2006411377732006410a777320062004200573712004200571736a200e41" + "1977200e410e7773200e4103767320096a20186a200f410f77200f410d77" + "73200f410a76736a2209200a6a200720106a220a2002200b7371200b736a" + "200a411a77200a41157773200a410777736a41fcdbb1e9046a22106a2207" + "411e772007411377732007410a777320072004200673712004200671736a" + "20124119772012410e7773201241037673200e6a20196a2008410f772008" + "410d77732008410a76736a220e200b6a200320106a220b2002200a737120" + "02736a200b411a77200b41157773200b410777736a41939ae099056a2210" + "6a2203411e772003411377732003410a7773200320062007737120062007" + "71736a20174119772017410e777320174103767320126a201a6a2009410f" + "772009410d77732009410a76736a221220026a200520106a2202200a200b" + "7371200a736a2002411a772002411577732002410777736a41d4e6a9a806" + "6a22106a2205411e772005411377732005410a7773200520032007737120" + "03200771736a20154119772015410e777320154103767320176a200c6a20" + "0e410f77200e410d7773200e410a76736a2217200a6a200420106a220a20" + "02200b7371200b736a200a411a77200a41157773200a410777736a41bb95" + "a8b3076a22106a2204411e772004411377732004410a7773200420032005" + "73712003200571736a20134119772013410e777320134103767320156a20" + "0d6a2012410f772012410d77732012410a76736a2215200b6a200620106a" + "220b2002200a73712002736a200b411a77200b41157773200b410777736a" + "41d2edf4f1076b22106a2206411e772006411377732006410a7773200620" + "04200573712004200571736a20144119772014410e777320144103767320" + "136a200f6a2017410f772017410d77732017410a76736a221320026a2007" + "20106a2202200a200b7371200a736a2002411a7720024115777320024107" + "77736a41fba6b7ec066b22106a2207411e772007411377732007410a7773" + "20072004200673712004200671736a20114119772011410e777320114103" + "767320146a20086a2015410f772015410d77732015410a76736a2214200a" + "6a200320106a220a2002200b7371200b736a200a411a77200a4115777320" + "0a410777736a41dfae80ea056b22106a2203411e77200341137773200341" + "0a777320032006200773712006200771736a20164119772016410e777320" + "164103767320116a20096a2013410f772013410d77732013410a76736a22" + "11200b6a200520106a220b2002200a73712002736a200b411a77200b4115" + "7773200b410777736a41b5b396bf056b22106a2205411e77200541137773" + "2005410a777320052003200773712003200771736a20184119772018410e" + "777320184103767320166a200e6a2014410f772014410d77732014410a76" + "736a221620026a200420106a2202200a200b7371200a736a2002411a7720" + "02411577732002410777736a4190e9d1ed036b22106a2204411e77200441" + "1377732004410a777320042003200573712003200571736a201941197720" + "19410e777320194103767320186a20126a2011410f772011410d77732011" + "410a76736a2218200a6a200620106a220a2002200b7371200b736a200a41" + "1a77200a41157773200a410777736a41dddccec4036b22106a2206411e77" + "2006411377732006410a777320062004200573712004200571736a201a41" + "1977201a410e7773201a4103767320196a20176a2016410f772016410d77" + "732016410a76736a2219200b6a200720106a220b2002200a73712002736a" + "200b411a77200b41157773200b410777736a41e7afb4f3026b22106a2207" + "411e772007411377732007410a777320072004200673712004200671736a" + "200c411977200c410e7773200c41037673201a6a20156a2018410f772018" + "410d77732018410a76736a221a20026a200320106a2202200a200b737120" + "0a736a2002411a772002411577732002410777736a41dcf39bcb026b2210" + "6a2203411e772003411377732003410a7773200320062007737120062007" + "71736a200d411977200d410e7773200d41037673200c6a20136a2019410f" + "772019410d77732019410a76736a220c200a6a200520106a220a2002200b" + "7371200b736a200a411a77200a41157773200a410777736a41fb94c7df00" + "6b22106a2205411e772005411377732005410a7773200520032007737120" + "03200771736a200f411977200f410e7773200f41037673200d6a20146a20" + "1a410f77201a410d7773201a410a76736a220d200b6a200420106a220b20" + "02200a73712002736a200b411a77200b41157773200b410777736a41f0c0" + "aa83016a22106a2204411e772004411377732004410a7773200420032005" + "73712003200571736a20084119772008410e7773200841037673200f6a20" + "116a200c410f77200c410d7773200c410a76736a220f20026a200620106a" + "2202200a200b7371200a736a2002411a772002411577732002410777736a" + "41968293cd016a221c6a2206411e772006411377732006410a7773200620" + "04200573712004200571736a20094119772009410e777320094103767320" + "086a20166a200d410f77200d410d7773200d410a76736a2210200a6a2007" + "201c6a22082002200b7371200b736a2008411a7720084115777320084107" + "77736a4188d8ddf1016a221c6a2207411e772007411377732007410a7773" + "20072004200673712004200671736a200e411977200e410e7773200e4103" + "767320096a20186a200f410f77200f410d7773200f410a76736a220a200b" + "6a2003201c6a22092002200873712002736a2009411a7720094115777320" + "09410777736a41cceea1ba026a221c6a2203411e77200341137773200341" + "0a777320032006200773712006200771736a20124119772012410e777320" + "1241037673200e6a20196a2010410f772010410d77732010410a76736a22" + "0b20026a2005201c6a220e2008200973712008736a200e411a77200e4115" + "7773200e410777736a41b5f9c2a5036a22026a2205411e77200541137773" + "2005410a777320052003200773712003200771736a20174119772017410e" + "777320174103767320126a201a6a200a410f77200a410d7773200a410a76" + "736a221220086a200220046a22082009200e73712009736a2008411a7720" + "08411577732008410777736a41b399f0c8036a22026a2204411e77200441" + "1377732004410a777320042003200573712003200571736a201541197720" + "15410e777320154103767320176a200c6a200b410f77200b410d7773200b" + "410a76736a221720096a200220066a22092008200e7371200e736a200941" + "1a772009411577732009410777736a41cad4e2f6046a22026a2206411e77" + "2006411377732006410a777320062004200573712004200571736a201341" + "19772013410e777320134103767320156a200d6a2012410f772012410d77" + "732012410a76736a2215200e6a200220076a220e2008200973712008736a" + "200e411a77200e41157773200e410777736a41cf94f3dc056a22026a2207" + "411e772007411377732007410a777320072004200673712004200671736a" + "20144119772014410e777320144103767320136a200f6a2017410f772017" + "410d77732017410a76736a221320086a200220036a22082009200e737120" + "09736a2008411a772008411577732008410777736a41f3dfb9c1066a2202" + "6a2203411e772003411377732003410a7773200320062007737120062007" + "71736a20114119772011410e777320114103767320146a20106a2015410f" + "772015410d77732015410a76736a221420096a200220056a22092008200e" + "7371200e736a2009411a772009411577732009410777736a41ee85bea407" + "6a22026a2205411e772005411377732005410a7773200520032007737120" + "03200771736a20164119772016410e777320164103767320116a200a6a20" + "13410f772013410d77732013410a76736a2211200e6a200220046a220e20" + "08200973712008736a200e411a77200e41157773200e410777736a41efc6" + "95c5076a22026a2204411e772004411377732004410a7773200420032005" + "73712003200571736a20184119772018410e777320184103767320166a20" + "0b6a2014410f772014410d77732014410a76736a221620086a200220066a" + "22082009200e73712009736a2008411a772008411577732008410777736a" + "41ec8fded9076b22026a2206411e772006411377732006410a7773200620" + "04200573712004200571736a20194119772019410e777320194103767320" + "186a20126a2011410f772011410d77732011410a76736a221220096a2002" + "20076a22092008200e7371200e736a2009411a7720094115777320094107" + "77736a41f8fbe399076b22116a2207411e772007411377732007410a7773" + "20072004200673712004200671736a201a411977201a410e7773201a4103" + "767320196a20176a2016410f772016410d77732016410a76736a2217200e" + "6a200320116a220e2008200973712008736a200e411a77200e4115777320" + "0e410777736a41868084fa066b22116a2203411e77200341137773200341" + "0a777320032006200773712006200771736a200c411977200c410e777320" + "0c41037673201a6a20156a2012410f772012410d77732012410a76736a22" + "1220086a200520116a22052009200e73712009736a2005411a7720054115" + "77732005410777736a4195a6bedd056b22156a2208411e77200841137773" + "2008410a777320082003200773712003200771736a200c200d411977200d" + "410e7773200d410376736a20136a2017410f772017410d77732017410a76" + "736a20096a200420156a22042005200e7371200e736a2004411a77200441" + "1577732004410777736a4189b89988046b22096a220c2003200873712003" + "200871736a200c411e77200c41137773200c410a77736a200d200f411977" + "200f410e7773200f410376736a20146a2012410f772012410d7773201241" + "0a76736a200e6a200620096a22062004200573712005736a2006411a7720" + "06411577732006410777736a418e8ebacc036b220d6a2102200c201d6a21" + "1d2007201b6a200d6a211b200820206a21202006201e6a211e200320236a" + "21232004201f6a211f200520226a2122200141406b22012024470d000b20" + "00202236021c2000201f3602182000201e3602142000201b360210200020" + "2336020c200020203602082000201d360204200020023602000b89010101" + "7f027f0240200328020404402003280208220445044020012002450d031a" + "41bda9c0002d00001a20014109490d022002100b0c030b20032802002004" + "2001200210150c020b20012002450d011a41bda9c0002d00001a20014109" + "490d002002100b0c010b200210010b210320002002360208200020032001" + "20031b36020420002003453602000b3000200128021c20002d0000410274" + "220041b4a5c0006a280200200041a8a5c0006a280200200128022028020c" + "1103000bfc0402037f017e23004180016b220224000240024020012d0000" + "220441c00171220341c000470440200241186a200141186a290000370300" + "200241106a200141106a290000370300200241086a200141086a29000037" + "030020022001290000220537030020022005a7413f713a0000200241406b" + "2002102e20022d0040450d01200220022d00413a007f41a88ec000411f20" + "0241ff006a41988ec00041c88ec0001013000b02402004413f710d002001" + "2d00010d0020012d00020d0020012d00030d0020012d00040d0020012d00" + "050d0020012d00060d0020012d00070d0020012d00080d0020012d00090d" + "0020012d000a0d0020012d000b0d0020012d000c0d0020012d000d0d0020" + "012d000e0d0020012d000f0d0020012d00100d0020012d00110d0020012d" + "00120d0020012d00130d0020012d00140d0020012d00150d0020012d0016" + "0d0020012d00170d0020012d00180d0020012d00190d0020012d001a0d00" + "20012d001b0d0020012d001c0d0020012d001d0d0020012d001e0d002001" + "2d001f0d00200041c1013a0020200041033a00000c020b20004200370300" + "200041c0003a0020200041186a4200370300200041106a42003703002000" + "41086a42003703000c010b200241386a200241e8006a2903003703002002" + "41306a200241e0006a290300370300200220022903503703202002200241" + "d8006a2903003703282003044020002002290320370300200020033a0020" + "200041086a2002290328370300200041186a200241386a29030037030020" + "0041106a200241306a2903003703000c010b200241003602502002410136" + "0244200241a88cc00036024020024204370248200241406b419c8dc00010" + "1a000b20024180016a24000bf90a02057f097e23004190036b2207240020" + "00290300220c200041086a290300220d8450047e420005200741f0016a20" + "0c2001104d20074190026a200d2001104d200741e0016a200c2002104d20" + "074180026a200d2002104d200741b0016a200c2003104d200741a0016a20" + "0d2003104d200741d0016a200c2004104d200741c0016a200d2004104d20" + "072903f0012112200741c8016a290300200741a8016a290300220d200729" + "03c0017c220c200d54ad7c200c200741d8016a2903007c220d200c54ad7c" + "200d20072903d001220e20072903a0017c220c200e54ad200c2007418802" + "6a29030020074198026a290300220f2007290380027c220e200f54ad7c20" + "0e200741e8016a2903007c220f200e54ad7c200f20072903e00122102007" + "290390027c220e201054ad200e200741f8016a2903007c2213200e54ad7c" + "7c2210200f54ad7c7c2211200c54ad7c2011200741b8016a290300201020" + "072903b0017c220e201054ad7c7c220f201154ad7c7c2210200d54ad7c0b" + "21112000290310220c200041186a290300220d8450047e420005200741f0" + "006a200c2001104d20074190016a200d2001104d200741e0006a200c2002" + "104d20074180016a200d2002104d200741306a200c2003104d200741206a" + "200d2003104d200741d0006a200c2004104d200741406b200d2004104d20" + "0741c8006a290300200741286a290300220320072903407c2204200354ad" + "7c2004200741d8006a2903007c2203200454ad7c20032007290350220220" + "117c2204200254ad200420072903207c2202200454ad7c20022007418801" + "6a29030020074198016a29030022012007290380017c2204200154ad7c20" + "04200741e8006a2903007c2201200454ad7c20012007290360220c200f7c" + "2204200c54ad20042007290390017c220c200454ad7c200c200741f8006a" + "29030020072903702204200e7c220e200454ad7c7c220f200c54ad7c7c22" + "0c200154ad7c7c2204200254ad7c2004200741386a290300200729033022" + "0120107c2202200154ad7c2002200c7c2210200254ad7c7c2211200454ad" + "7c7c2214200354ad7c0b2104200720143703d002200720103703c0022007" + "200e3703b002200720123703a002200720043703d802200720113703c802" + "2007200f3703b802200720133703a80220074188036a4200370300200741" + "80036a4200370300200741f8026a4200370300200742003703f002200741" + "f0026a210a41ff032109420021034200210442002101420021024201210d" + "0340200741106a2009410776410474220b200741a0026a6a220829030020" + "08290308200941ff00712208104e2004423f88210c20044201862003423f" + "888421042007290310420183200342018684210302400240024002400240" + "200c200142018684220c42ddb0858ce8b691a8b87f852002420186200142" + "3f8884220242a9c0c689aece93b230858450044020032005542004200654" + "20042006511b450d0142ddb0858ce8b691a8b87f210142a9c0c689aece93" + "b23021020c020b200c42ddb0858ce8b691a8b87f58200242a9c0c689aece" + "93b23058200242a9c0c689aece93b230511b450d00200c21010c010b2002" + "42a9c0c689aece93b2307d200c42a3cffaf397c9eed7c7007c2202200420" + "0654ad200420067d22042003200554ad220f54ad7c7d220142017c221020" + "0254ad200c42ddb0858ce8b691a8b87f54ad7d2010420052ad7c50ad7d21" + "022004200f7d2104200320057d2103200941016a41810249200d42005271" + "0d014200210d0b2009450d010c020b4201210d20072008104f200a200b6a" + "22082008290300200729030084370300200841086a220820082903002007" + "41086a2903008437030020090d010b200020023703182000200137031020" + "0020043703082000200337030020074190036a24000f0b200941016b2109" + "0c000b000beb0101017f41e0a9c00041e0a9c0002d00002200410120001b" + "3a00000240200004400340024002400240200041016b0e03000501020b03" + "4041e0a9c0002d000022004101460d000b02400240200041016b0e030006" + "01030b000b41a49bc000412641cc9bc0001011000b41a89ac000410d4194" + "9bc0001011000b41e0a9c00041e0a9c0002d00002200410120001b3a0000" + "20000d000b0b41d8a9c00042a9c0c689aece93b23037030041d0a9c00042" + "ddb0858ce8b691a8b87f37030041c8a9c000428d95c7c396d2dac0977f37" + "030041c0a9c00042c7faf3c3ed82a3903c37030041e0a9c00041023a0000" + "0b0b840202047e017f200041086a29030021092000290300210a0240417f" + "2000290310220b200385200041186a290300220c20048584420052200320" + "0b562004200c562004200c511b1b220d417f470440200d41ff01710d0120" + "01200a58200220095820022009511b0d010b20072007200b7c220756ad20" + "07200620097c220b200654ad200b2005200a7c220a200554ad7c2209200b" + "54ad7c7c220b200754ad7c2008200c7c7c210c0b2000200a20017d370300" + "2000200920027d22072001200a56ad22017d37030820002003427f852203" + "200b7c220a2002200956ad2001200756ad7c7d42017c2209370310200020" + "0c20047d2003200a56ad2009200a54ad7c50ad7d3703180bbe3c020e7f04" + "7e23004180016b2203240041bda9c0002d00001a0240412010012202450d" + "00200242a9c0c689aece93b230370018200242ddb0858ce8b691a8b87f37" + "00102002428d95c7c396d2dac0977f370008200242c7faf3c3ed82a3903c" + "3700002003200210262000027f0240024002400240024002400240024002" + "40024002400240024002400240027f024002400240024002400240024002" + "7f02400240027f0240024002400240024002400240024002400240024002" + "400240024002400240024002400240200241046b28020022044178714124" + "4128200441037122051b4f044020054100200441c8004f1b0d0120021004" + "41bda9c0002d00001a412010012202450d30200241186a2204200141186a" + "290000370000200220012900002210370000200241106a2205200141106a" + "290000370000200241086a2208200141086a29000037000020022002411f" + "6a22012d00003a0000200120103c000020022d0001210120022002411e6a" + "22072d00003a0001200720013a00002002411d6a22012d00002107200120" + "022d00023a0000200220073a00022002411c6a22012d0000210720012002" + "2d00033a0000200220073a00032002411b6a22012d00002107200120022d" + "00043a0000200220073a00042002411a6a22012d00002107200120022d00" + "053a0000200220073a0005200241196a22012d00002107200120022d0006" + "3a0000200220073a000620042d00002101200420022d00073a0000200220" + "013a0007200241176a22012d00002104200120082d00003a000020082004" + "3a0000200241166a22012d00002104200120022d00093a0000200220043a" + "0009200241156a22012d00002104200120022d000a3a0000200220043a00" + "0a200241146a22012d00002104200120022d000b3a0000200220043a000b" + "200241136a22012d00002104200120022d000c3a0000200220043a000c20" + "0241126a22012d00002104200120022d000d3a0000200220043a000d2002" + "41116a22012d00002104200120022d000e3a0000200220043a000e20052d" + "00002101200520022d000f3a0000200220013a000f2003410c6a20021026" + "200241046b280200220141787141244128200141037122041b490d022004" + "4100200141c8004f1b0d032002100420032802082202450d120240024002" + "40200241016b220241feffffff0371450440200241ffffffff0371220441" + "016a2205410371210142002110200328020422082102200441034f044020" + "0541fcffffff07712104034020104280017c2110200241106a2102200441" + "046b22040d000b0b2001450d020340200235020020108620117c21112010" + "42207c2110200241046a2102200141016b22010d000b2011428080808010" + "540d010b200341406b200341146a2802003602002003200329020c370338" + "200341d0006a200341086a28020022043602002003200329020037034820" + "04450d0720032802402207450440200341206a418098c000280200220236" + "02002003412c6a2002360200200341f897c0002902002210370318200320" + "10370224200328024822020440200328024c220441046b28020022014178" + "7122052002410274220241044108200141037122011b6a490d0a20014100" + "2005200241276a4b1b0d0b200410040b20032802382202450d2520032802" + "3c220441046b280200220141787122052002410274220241044108200141" + "037122011b6a490d0b200141002005200241276a4b1b0d0c200410040c25" + "0b0240027f02400240024020044101460440200328024c220c2802002202" + "4101470d012003412c6a418098c000280200360200200341206a20034114" + "6a2802003602002003200329020c370318200341f897c000290200370224" + "20032802482202450d2a200c41046b280200220141787122042002410274" + "220241044108200141037122011b6a490d12200141002004200241276a4b" + "1b0d13200c10040c2a0b200328024c210c200328023c210b0240417f2004" + "200747200420074b1b22050d0020074102742102200b41046b2106200441" + "02742101200c41046b2109200420076b21070340200204402001450d0720" + "0220066a2105200120096a2108200241046b2102200141046b2101417f20" + "082802002208200528020022054720052008491b2205450d010c020b0b41" + "7f4100200741ffffffff03711b21050b200541ff01710e020204010b2002" + "450d1220074102742101200328023c2109200241ffff034d044020094104" + "6b2106410021040340200120066a22052005280200220541107622082008" + "20044110747220026e220420026c6b411074200541ffff03717222052002" + "6e22082004411074723602002005200220086c6b2104200141046b22010d" + "000b0c280b2002ad2110200741ffffffff036a220541ffffffff03712202" + "45044042002111200120096a0c270b200241016a41feffffff0771210120" + "0741027420096a41086b2102420021110340200241046a22042004350200" + "201142208684221120108022123e0200200220023502002011201020127e" + "7d42208684221120108022123e02002011201020127e7d2111200241086b" + "2102200141026b22010d000b0c250b2003412c6a200341146a2802003602" + "002003200329020c370224200341186a0c010b2003410036024020032802" + "38047f200b05200341386a418c87c0001023200328023c0b410136020020" + "0341406b4101360200200341206a41013602002003200329033837031820" + "0341246a0b220241086a418098c000280200360200200241f897c0002902" + "0037020020032802482202450d25200c41046b2802002201417871220420" + "02410274220241044108200141037122011b6a490d102001410020042002" + "41276a4b1b0d11200c10040c250b200c20044102746a41046b2202450d20" + "20022802002202672208450440200341f8006a200341146a280200360200" + "2003200329020c370370200341186a200341f0006a200c20041024200328" + "02482202450d25200c41046b280200220141787122042002410274220241" + "044108200141037122011b6a490d12200141002004200241276a4b1b0d13" + "200c10040c250b024002402003280238418080808078470d00200b280208" + "0d002003410036026c20034280808080c0003702640c010b200341e4006a" + "2003410c6a2002452008411f7110250b200341186a200341e4006a027f02" + "402003280248418080808078470d00200c2802080d004100210420034100" + "3602704100210541040c010b200341f0006a20032002452008411f711025" + "200328027021042003280278210520032802740b220120051024200341e0" + "006a200341206a28020036020020032003290218370358200328022c2105" + "200328022821092003280224210c20040440200141046b28020022074178" + "7122062004410274220441044108200741037122071b6a490d1420074100" + "2006200441276a4b1b0d15200110040b02400240200c4180808080784604" + "404100210120092802080d0141042105410021040c220b41002101200545" + "0d20200520024522044d0d20200520046b210b20020d0102400240200b41" + "0274220a20092206200620044102746a22056b4b04402005200a6a210120" + "06200a6a2106200a4110490d0141002006410371220d6b210e0240200641" + "7c71220220064f0d00200d41016b210f0240200d450440200121040c010b" + "200d2107200121040340200641016b2206200441016b22042d00003a0000" + "200741016b22070d000b0b200f4103490d00200441046b21040340200641" + "016b200441036a2d00003a0000200641026b200441026a2d00003a000020" + "0641036b200441016a2d00003a0000200641046b220620042d00003a0000" + "200441046b210420022006490d000b0b2002200a200d6b2204417c71220a" + "6b21064100200a6b210702402001200e6a2201410371450440200220064d" + "0d01200420056a41046b21050340200241046b2202200528020036020020" + "0541046b2105200220064b0d000b0c010b200220064d0d00200141037422" + "0a411871210d2001417c71220f41046b21054100200a6b411871210e200f" + "280200210a0340200241046b2202200a200e742005280200220a200d7672" + "360200200541046b2105200220064b0d000b0b2004410371210a20012007" + "6a21010c010b200a41104f044002402006410020066b41037122076a2204" + "20064d0d00200741016b210d200521022007044020072101034020062002" + "2d00003a0000200241016a2102200641016a2106200141016b22010d000b" + "0b200d4107490d000340200620022d00003a0000200641016a200241016a" + "2d00003a0000200641026a200241026a2d00003a0000200641036a200241" + "036a2d00003a0000200641046a200241046a2d00003a0000200641056a20" + "0241056a2d00003a0000200641066a200241066a2d00003a000020064107" + "6a200241076a2d00003a0000200241086a2102200641086a22062004470d" + "000b0b2004200a20076b2201417c71220d6a21060240200520076a220241" + "0371450440200420064f0d01200221050340200420052802003602002005" + "41046a2105200441046a22042006490d000b0c010b200420064f0d002002" + "410374220a41187121072002417c71220f41046a21054100200a6b411871" + "210e200f280200210a03402004200a2007762005280200220a200e747236" + "0200200541046a2105200441046a22042006490d000b0b2001410371210a" + "2002200d6a21050b20062006200a6a22044f0d01200a41016b2101200a41" + "0771220204400340200620052d00003a0000200541016a2105200641016a" + "2106200241016b22020d000b0b20014107490d010340200620052d00003a" + "0000200641016a200541016a2d00003a0000200641026a200541026a2d00" + "003a0000200641036a200541036a2d00003a0000200641046a200541046a" + "2d00003a0000200641056a200541056a2d00003a0000200641066a200541" + "066a2d00003a0000200641076a200541076a2d00003a0000200541086a21" + "05200641086a22062004470d000b0c010b2006200a6b220220064f0d0020" + "0a41016b2104200a410371220504400340200641016b2206200141016b22" + "012d00003a0000200541016b22050d000b0b20044103490d00200141046b" + "21050340200641016b200541036a2d00003a0000200641026b200541026a" + "2d00003a0000200641036b200541016a2d00003a0000200641046b220620" + "052d00003a0000200541046b210520022006490d000b0b0c010b41042105" + "200941046a28020021072009280208220420024522024d04402004410274" + "21022004044041bda9c0002d00001a200210012205450d360b2005200720" + "02104c1a0c210b41bda9c0002d00001a200420026b220b41027422011001" + "2209450d342009200720024102746a2001104c1a200b210c0b2008411f71" + "2201450d1c200b450440410021010c1e0b41002105410020086b411f7121" + "042009200b4102746a2102200b41016b41ffffffff0371220741016a2206" + "410371210820074103490d1b200641fcffffff077121070340200241046b" + "220620062802002206200176200572360200200241086b22052006200474" + "20052802002205200176723602002002410c6b2206200520047420062802" + "00220620017672360200200241106b220220062004742002280200220520" + "01767236020020052004742105200741046b22070d000b0c1b0b2011500d" + "14200328021421022003280210210502402011428080045a04402002450d" + "0320024102742104200241ffffffff036a220741ffffffff037122020d01" + "42002110200420056a0c180b2002450d022011a721040c180b200241016a" + "41feffffff07712101200420056a41086b21024200211003402002350200" + "200241046a35020020104220868420118242208684201182211020024108" + "6b2102200141026b22010d000b0c150b2003280210210520032802142202" + "0d160b410421074100210241000c170b41f996c000412e41a897c0001011" + "000b41b897c000412e41e897c0001011000b41f996c000412e41a897c000" + "1011000b41b897c000412e41e897c0001011000b20034100360228200341" + "0136021c200341a099c00036021820034204370220200341186a41fc86c0" + "00101a000b41f996c000412e41a897c0001011000b41b897c000412e41e8" + "97c0001011000b41f996c000412e41a897c0001011000b41b897c000412e" + "41e897c0001011000b41f996c000412e41a897c0001011000b41b897c000" + "412e41e897c0001011000b200341003602282003410136021c200341a099" + "c00036021820034204370220200341186a41ec86c000101a000b41f996c0" + "00412e41a897c0001011000b41b897c000412e41e897c0001011000b41f9" + "96c000412e41a897c0001011000b41b897c000412e41e897c0001011000b" + "41f996c000412e41a897c0001011000b41b897c000412e41e897c0001011" + "000b200341003602282003410136021c200341a099c00036021820034204" + "370220200341186a41989ac000101a000b200241086a0b21022007410171" + "047e201005200241046b3502002010422086842011820ba721010c010b20" + "0241027421024100210103402001411074200241046b220220056a280200" + "220141107672200470411074200141ffff037172200470210120020d000b" + "0b41002102200341206a418098c000280200360200200341f897c0002902" + "0037031820014504404104210741000c010b200341186a41f498c0001023" + "200328021c220720013602004101210220032802180b210a024002400240" + "0240200328020022010440200841046b2802002204417871220620014102" + "74220141044108200441037122041b6a490d01200441002006200141276a" + "4b1b0d02200810040b200328020c2201450d0e200541046b280200220441" + "787122082001410274220141044108200441037122041b6a490d02200441" + "002008200141276a4b1b0d03200510040c0e0b41f996c000412e41a897c0" + "001011000b41b897c000412e41e897c0001011000b41f996c000412e41a8" + "97c0001011000b41b897c000412e41e897c0001011000b2008450d002002" + "41046b21020340200220022802002207200176200572360200200241046b" + "210220072004742105200841016b22080d000b0b41002101200b450d0020" + "09200b41027422026a41046b2802000440200b21010c010b200941046b21" + "07200b41ffffffff037121040340200421052002450d01200441016b2104" + "200220076a2108200241046b21022008280200450d000b200b2005200520" + "0b4b1b21010b2001200c4102764f0d00024002402001200c4d0440410021" + "04200c450440200921050c050b200c41027421022001450440200941046b" + "2802002205417871220841044108200541037122051b20026a490d022005" + "41002008200241276a4b1b0d0320091004410421050c050b200121042009" + "200241042001410274101522050d040c180b200341003602282003410136" + "021c200341ec84c00036021820034204370220200341186a41f484c00010" + "1a000b41f996c000412e41a897c0001011000b41b897c000412e41e897c0" + "001011000b200c2104200921050b200341206a200341e0006a2802003602" + "00200320032903583703182003200136022c200320053602282003200436" + "02240c040b419c87c0001020000b200241086a0b21022005410171047e20" + "1105200241046b22022002350200201142208684221120108022123e0200" + "2011201020127e7d0ba721040b2003280238210b02402009200741027422" + "026a41046b2802000d00200941046b210620072101034020012105200245" + "0440410021070c020b200541016b2101200220066a2108200241046b2102" + "2008280200450d000b20072005200520074b1b21070b0240200b41027620" + "074d0440200b21020c010b2007200b4b0d0341002102200b450d00200b41" + "027421012007450440200941046b28020022054178712208410441082005" + "41037122051b20016a490d05200541002008200141276a4b1b0d06200910" + "04410421090c010b2009200141042007220241027410152209450d100b20" + "034100360250200404402003280248047f200c05200341c8006a41dc86c0" + "001023200328024c0b2004360200200341013602500b2003412c6a200341" + "d0006a280200360200200320032903483702242003200936021c20032002" + "3602180b200328022c2102200328022821072003280224210a2003280218" + "2201450d00200328021c220541046b280200220441787122082001410274" + "220141044108200441037122041b6a490d04200441002008200141276a4b" + "1b0d05200510040b200245044041bda9c0002d00001a4101210d41011001" + "2204450d0e200441003a0000410121010c080b4100210102402002ad4205" + "86200720024102746a41046b28020067ad7d221042038820104207834200" + "52ad7c221050044041012104410021050c010b41bda9c0002d00001a2010" + "a7220510012204450d0e0b200341003602202003200436021c2003200536" + "02182007200241016b22054102746a210920050440200241027441046b21" + "06410021020340200220076a280200210120032802182002460440200341" + "186a41ac88c0001018200328021c21040b200220046a20013a0000200320" + "0241016a2205360220200141087621082003280218200546044020034118" + "6a41ac88c0001018200328021c21040b200220046a41016a20083a000020" + "03200541016a220536022020014110762108200328021820054604402003" + "41186a41ac88c0001018200328021c21040b200220046a41026a20083a00" + "002003200541016a22053602202001411876210120032802182005460440" + "200341186a41ac88c0001018200328021c21040b200220046a41036a2001" + "3a00002003200541016a2205360220200241046a21012005210220012006" + "470d000b0b20092802002202450d05034020032802182001460440200341" + "186a419c88c00010180b200328021c220420016a20023a00002003200141" + "016a2201360220200241ff014b21052002410876210220050d000b0c060b" + "200341003602282003410136021c200341ec84c000360218200342043702" + "20200341186a41f484c000101a000b41f996c000412e41a897c000101100" + "0b41b897c000412e41e897c0001011000b41f996c000412e41a897c00010" + "11000b41b897c000412e41e897c0001011000b200328021c21040b200328" + "0218210d200141014b0d010b200341306a4200370300200341286a420037" + "0300200341206a4200370300200342003703180c010b200120046a210c41" + "002102200141017622084101470440200141016b2105200841feffffff07" + "71210b0340200420056a22062d000021092006200220046a22082d00003a" + "0000200820093a0000200c2002417e736a22062d00002109200620084101" + "6a22082d00003a0000200820093a0000200541026b2105200b200241026a" + "2202470d000b0b20014102710440200220046a22052d000021082005200c" + "2002417f736a22022d00003a0000200220083a00000b200341306a420037" + "0300200341286a4200370300200341206a42003703002003420037031820" + "0141204b0d010b200320016b41386a20042001104c1a2003290328221042" + "388620104280fe0383422886842010428080fc0783421886201042808080" + "f80f834208868484201042088842808080f80f832010421888428080fc07" + "838420104228884280fe038320104238888484842112200341306a290300" + "221042388620104280fe0383422886842010428080fc0783421886201042" + "808080f80f834208868484201042088842808080f80f8320104218884280" + "80fc07838420104228884280fe038320104238888484842113417f200329" + "0318221042b0c8b99297bc8cd02985200341206a290300221142b8a195b2" + "9bb0a0acdd008584420052201142388620114280fe038342288684201142" + "8080fc0783421886201142808080f80f8342088684842011420888428080" + "80f80f832011421888428080fc07838420114228884280fe038320114238" + "88848484221142ddb0858ce8b691a8b87f54201042388620104280fe0383" + "422886842010428080fc0783421886201042808080f80f83420886848420" + "1042088842808080f80f832010421888428080fc07838420104228884280" + "fe03832010423888848484221042a9c0c689aece93b23054201042a9c0c6" + "89aece93b230511b1b2202417f47044041022101200241ff01710d022013" + "42c7faf3c3ed82a3903c542012428d95c7c396d2dac0977f542012428d95" + "c7c396d2dac0977f511b450d020b20002011370320200020133703102000" + "20103703282000201237031841000c020b410021010b200020013a000141" + "010b3a00000240024002400240200a0440200741046b2802002202417871" + "2201200a410274220541044108200241037122021b6a490d012002410020" + "01200541276a4b1b0d02200710040b200d0440200441046b280200220241" + "7871220141044108200241037122021b200d6a490d03200241002001200d" + "41276a4b1b0d04200410040b20034180016a24000f0b41f996c000412e41" + "a897c0001011000b41b897c000412e41e897c0001011000b41f996c00041" + "2e41a897c0001011000b41b897c000412e41e897c0001011000b000bc80d" + "02057f167e230041e0006b22032400200341386a2204200141186a290300" + "370300200341306a2205200141106a290300370300200320012903003703" + "202003200141086a29030037032842ddb0858ce8b691a8b87f2112200341" + "206a20022903002219200241086a290300221a2002290310221b20024118" + "6a290300221c42c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b20" + "042903002113200529030021142003290320211520032903282116200341" + "106a2206200141306a290300370300200341186a2207200141386a290300" + "370300200320012903203703002003200141286a29030037030820032002" + "290320220e200241286a290300220c20022903302211200241386a290300" + "221d42c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2004200729" + "030037030020052006290300370300200320032903083703282003200329" + "0300370320200341206a42c6faf3c3ed82a3903c428d95c7c396d2dac097" + "7f42ddb0858ce8b691a8b87f42a9c0c689aece93b23042c7faf3c3ed82a3" + "903c428d95c7c396d2dac0977f102b02400240024020142005290300220b" + "7c220d2016200329032822087c2209200854ad2009201520032903202208" + "7c220a200854ad7c2208200954ad7c7c220942ddb0858ce8b691a8b87f85" + "200b200d56ad2009200d54ad7c201320042903007c7c220d42a9c0c689ae" + "ce93b2308584500440200a42c7faf3c3ed82a3903c542008428d95c7c396" + "d2dac0977f542008428d95c7c396d2dac0977f511b450d0242a9c0c689ae" + "ce93b230210d0c010b200942deb0858ce8b691a8b87f54200d42a9c0c689" + "aece93b23054200d42a9c0c689aece93b230511b450d01200921120b200a" + "2117200821180c010b200d20092008200a42c7faf3c3ed82a3903c7d2217" + "200a5aad220a7d220b42f3eab8bce9ada5bfe8007c2218200b54ad200820" + "0a54ad7d7c2208200954ad200842a2cffaf397c9eed7c7007c2212200854" + "ad7c50ad7d42a9c0c689aece93b2307d210d0b42ddb0858ce8b691a8b87f" + "210f024002402001290330221020012903107c2209200141286a29030022" + "0a200141086a2903007c2208200a54ad20082001290320220a2001290300" + "7c220b200a54ad7c220a200854ad7c7c220842ddb0858ce8b691a8b87f85" + "2009201054ad2008200954ad7c200141386a290300200141186a2903007c" + "7c220942a9c0c689aece93b2308584500440200b42c7faf3c3ed82a3903c" + "54200a428d95c7c396d2dac0977f54200a428d95c7c396d2dac0977f511b" + "450d01200b2110200a210b42a9c0c689aece93b23021090c020b200842de" + "b0858ce8b691a8b87f54200942a9c0c689aece93b23054200942a9c0c689" + "aece93b230511b450d00200b2110200a210b2008210f0c010b2009200820" + "0a200b42c7faf3c3ed82a3903c7d2210200b5aad220f7d220942f3eab8bc" + "e9ada5bfe8007c220b200954ad200a200f54ad7d7c220a200854ad200a42" + "a2cffaf397c9eed7c7007c220f200a54ad7c50ad7d42a9c0c689aece93b2" + "307d21090b2003200f37035020032010370340200320093703582003200b" + "37034842ddb0858ce8b691a8b87f210b024002402011201b7c2209200c20" + "1a7c2208200c54ad2008200e20197c220c200e54ad7c220a200854ad7c7c" + "220842ddb0858ce8b691a8b87f852009201154ad2008200954ad7c201c20" + "1d7c7c220942a9c0c689aece93b2308584500440200c42c7faf3c3ed82a3" + "903c54200a428d95c7c396d2dac0977f54200a428d95c7c396d2dac0977f" + "511b450d01200c210e200a210c42a9c0c689aece93b23021090c020b2008" + "42deb0858ce8b691a8b87f54200942a9c0c689aece93b23054200942a9c0" + "c689aece93b230511b450d00200c210e200a210c2008210b0c010b200920" + "08200a200c42c7faf3c3ed82a3903c7d220e200c5aad22117d220b42f3ea" + "b8bce9ada5bfe8007c220c200b54ad200a201154ad7d7c220a200854ad20" + "0a42a2cffaf397c9eed7c7007c220b200a54ad7c50ad7d42a9c0c689aece" + "93b2307d21090b200341406b200e200c200b200942c7faf3c3ed82a3903c" + "428d95c7c396d2dac0977f102b200341406b201520162014201342c7faf3" + "c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9" + "c0c689aece93b230102d200341406b200329030020032903082003290310" + "200341186a29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42" + "ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2000200d37031820" + "002012370310200020183703082000201737030020002003290340370320" + "200041286a2003290348370300200041306a200341d0006a290300370300" + "200041386a200341d8006a290300370300200341e0006a24000ba706010a" + "7e42ddb0858ce8b691a8b87f210a02400240024020022903102206200129" + "03107c2207200241086a2903002203200141086a2903007c2204200354ad" + "20042002290300220320012903007c2205200354ad7c2203200454ad7c7c" + "220442ddb0858ce8b691a8b87f852006200756ad2004200754ad7c200241" + "186a290300200141186a2903007c7c220742a9c0c689aece93b230858450" + "0440200542c7faf3c3ed82a3903c542003428d95c7c396d2dac0977f5420" + "03428d95c7c396d2dac0977f511b450d0242a9c0c689aece93b23021070c" + "010b200442deb0858ce8b691a8b87f54200742a9c0c689aece93b2305420" + "0742a9c0c689aece93b230511b450d012004210a0b2005210b2003210c0c" + "010b200720042003200542c7faf3c3ed82a3903c7d220b20055aad22057d" + "220642f3eab8bce9ada5bfe8007c220c200654ad2003200554ad7d7c2203" + "200454ad200342a2cffaf397c9eed7c7007c220a200354ad7c50ad7d42a9" + "c0c689aece93b2307d21070b42ddb0858ce8b691a8b87f21080240024020" + "02290330220920012903307c2204200241286a2903002205200141286a29" + "03007c2203200554ad20032002290320220520012903207c2206200554ad" + "7c2205200354ad7c7c220342ddb0858ce8b691a8b87f852004200954ad20" + "03200454ad7c200241386a290300200141386a2903007c7c220442a9c0c6" + "89aece93b2308584500440200642c7faf3c3ed82a3903c542005428d95c7" + "c396d2dac0977f542005428d95c7c396d2dac0977f511b450d0120062109" + "2005210642a9c0c689aece93b23021040c020b200342deb0858ce8b691a8" + "b87f54200442a9c0c689aece93b23054200442a9c0c689aece93b230511b" + "450d002006210920052106200321080c010b200420032005200642c7faf3" + "c3ed82a3903c7d220920065aad22087d220442f3eab8bce9ada5bfe8007c" + "2206200454ad2005200854ad7d7c2205200354ad200542a2cffaf397c9ee" + "d7c7007c2208200554ad7c50ad7d42a9c0c689aece93b2307d21040b2000" + "2008370330200020093703202000200a3703102000200b37030020002004" + "37033820002006370328200020073703182000200c3703080bf10802087f" + "087e23004180016b22022400200141386a290300210e200141286a290300" + "210b200141186a2203290300210d2001290330210f2001290320210a2001" + "290310210c02400240024020012903002210200141086a22042903002211" + "844200520d00200c200d844200520d00200a200b844200520d00200e200f" + "84500d010b200241186a22052003290300370300200241106a2206200141" + "106a22072903003703002002200429030037030820022001290300370300" + "200220102011200c200d42c7faf3c3ed82a3903c428d95c7c396d2dac097" + "7f102b200241386a2204200141206a220341186a29030037030020024130" + "6a2208200341106a22092903003703002002200341086a29030037032820" + "022003290300370320200241206a200a200b200f200e42c7faf3c3ed82a3" + "903c428d95c7c396d2dac0977f102b200241206a42c6faf3c3ed82a3903c" + "428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93" + "b23042c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2002200229" + "032020022903282008290300200429030042c7faf3c3ed82a3903c428d95" + "c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b23010" + "2d2000027e2002290300220d2006290300220c842002290308220b200529" + "0300220a84845004404200210f42000c010b200241d8006a2204200a3703" + "002002200c3703502002200d3703402002200b370348200242a9c0c689ae" + "ce93b230370378200242ddb0858ce8b691a8b87f3703702002428d95c7c3" + "96d2dac0977f370368200242c7faf3c3ed82a3903c370360200241406b20" + "0241e0006a103a2004290300210d2002290348210c2002290340210b2002" + "290350210a200241d0006a20072903003703002004200141186a29030037" + "0300200220012903003703402002200141086a290300370348200241406b" + "200b200c200a200d42c7faf3c3ed82a3903c428d95c7c396d2dac0977f10" + "2b200241f8006a2201200341186a290300370300200241f0006a22042009" + "2903003703002002200341086a2903003703682002200329030037036020" + "0241e0006a200b200c200a200d42c7faf3c3ed82a3903c428d95c7c396d2" + "dac0977f102b2004290300220c20022903602210842001290300220e2002" + "290368220b84845004404200210c4200210b4200210a4200210e4200210f" + "42010c010b4200210f427f4200427f4200201042788342c7faf3c3ed82a3" + "903c561b220a200a200b54ad7d200a200b7d220a42f3eab8bce9ada5bfe8" + "007d220b200a54ad7c42017c2211200c7d220d42a4cffaf397c9eed7c700" + "7d220a200d54ad200c201156ad7d427f511b200e7d42a9c0c689aece93b2" + "307c210e42c7faf3c3ed82a3903c20107d210c42010b3703002000200a37" + "03402000200c370330200020022903403703102000200f3703082000200e" + "3703482000200b370338200041186a2002290348370300200041206a2002" + "41d0006a290300370300200041286a200241d8006a2903003703000c010b" + "20004200370308200042003703000b20024180016a24000b090020004100" + "3602000b7b01027f230041106b2203240041f0a5c00041f0a5c000280200" + "220441016a360200024020044100480d00024041bca9c0002d0000450440" + "41b8a9c00041b8a9c00028020041016a36020041eca5c00028020041004e" + "0d010c020b200341086a20002001110000000b41bca9c00041003a000020" + "02450d00000b000b0c00200020012902003703000bba0201047f411f2102" + "20004200370210200141ffffff074d04402001410620014108766722026b" + "7641017120024101746b413e6a21020b2000200236021c200241027441f4" + "a5c0006a2103410120027422044190a9c000280200714504402003200036" + "0200200020033602182000200036020c200020003602084190a9c0004190" + "a9c0002802002004723602000f0b02400240200120032802002204280204" + "417871460440200421020c010b2001411920024101766b41002002411f47" + "1b742103034020042003411d764104716a41106a22052802002202450d02" + "200341017421032002210420022802044178712001470d000b0b20022802" + "082203200036020c20022000360208200041003602182000200236020c20" + "0020033602080f0b20052000360200200020043602182000200036020c20" + "0020003602080bd20102067f017e230041206b2201240002400240200028" + "02002203417f460d00410420034101742202200341016a2204200220044b" + "1b2202200241044d1b2204ad42e0007e22074220884200520d002007a722" + "0641f0ffffff074b0d004100210220012003047f2001200341e0006c3602" + "1c2001200028020436021441100520020b360218200141086a2006200141" + "146a103720012802084101470d0120012802102102200128020c21050b20" + "0541dca4c0001019000b200128020c210320002004360200200020033602" + "04200141206a24000b7f01017f027f0240027f0240200228020404402002" + "28020822034504402001450d0441bda9c0002d00001a0c020b2002280200" + "20034110200110150c020b2001450d0241bda9c0002d00001a0b2001100b" + "0b2202411020021b21032002450c010b4110210341000b21022000200136" + "020820002003360204200020023602000bd20102067f017e230041206b22" + "0124000240024020002802002203417f460d004104200341017422022003" + "41016a2204200220044b1b2202200241044d1b2204ad42c0017e22074220" + "884200520d002007a7220641f0ffffff074b0d004100210220012003047f" + "2001200341c0016c36021c2001200028020436021441100520020b360218" + "200141086a2006200141146a103720012802084101470d01200128021021" + "02200128020c21050b200541eca4c0001019000b200128020c2103200020" + "0436020020002003360204200141206a24000bdd0102067f017e23004120" + "6b2202240020002802002204417f460440410020011019000b4104200441" + "01742203200441016a2205200320054b1b2203200341044d1b2205ad42c0" + "017e22084220884200520440410020011019000b02402008a7220741f0ff" + "ffff074d04404100210320022004047f2002200441c0016c36021c200220" + "0028020436021441100520030b360218200241086a2007200241146a1037" + "20022802084101470d01200228020c2106200228021021030b2006200110" + "19000b200228020c21042000200536020020002004360204200241206a24" + "000b830b02037f167e230041c0016b22022400200241186a220320004118" + "6a290300370300200241106a2204200041106a2903003703002002200029" + "03003703002002200041086a290300370308200241386a200141186a2903" + "002218370300200241306a200141106a2903002213370300200220014108" + "6a2903002214370328200220012903002215370320200242003703582002" + "42003703502002420037034820024201370340200241f8006a2201420037" + "0300200241f0006a42003703002002420037036820024200370360200329" + "0300210e2004290300210f2002290308210a200229030021072013211020" + "182111201521082014210b03400240200242003703980120024200370390" + "0120024200370388012002420137038001200220024180016a104a450440" + "200241406b21010c010b200241b8016a20024198016a2903003703002002" + "41b0016a20024190016a29030037030020022002290388013703a8012002" + "2002290380013703a001200241206a200241a0016a104a450440200241e0" + "006a21010c010b200241d8006a2903002112200229035021052002290348" + "21162002290340210d2007a74101714504400340200a423f862007420188" + "8421070240200da74101714504402016423f86200d42018884210d200542" + "3f8620164201888421160c010b200520137c2209201420167c2205201454" + "ad2005200d20157c220d201554ad7c2206200554ad7c7c2205423f862006" + "4201888421162006423f86200d42018884210d2009201354ad2005200954" + "ad7c201220187c7c21120b200f423f86200a42018884210a200e423f8620" + "0f42018884210f200e420188210e2012423f862005420188842105201242" + "018821122007420183500d000b2002200f3703102002200e3703180b2002" + "20053703502002200d370340200220073703002002201237035820022016" + "3703482002200a3703082001290300210920022903702106200229036821" + "172002290360210c2008a74101714504400340200b423f86200842018884" + "21080240200c420183a70440200620137c2219201420177c2206201454ad" + "2006200c20157c221a201554ad7c220c200654ad7c7c2206423f86200c42" + "0188842117200c423f86201a42018884210c2013201956ad2006201954ad" + "7c200920187c7c21090c010b2017423f86200c42018884210c2006423f86" + "20174201888421170b2010423f86200b42018884210b2011423f86201042" + "0188842110201142018821112009423f8620064201888421062009420188" + "21092008420183500d000b20022010370330200220113703380b20022006" + "3703702002200c3703602002200837032020022009370378200220173703" + "682002200b37032802400240200f201085200e2011858450044020072008" + "54200a200b54200a200b511b0d010c020b200f201056200e201156200e20" + "11511b0d010b2002200820077d427e8322063703202002200b200a7d2209" + "2007200856ad22087d220c37032820024201200a200b56ad2008200956ad" + "7c7d2208200f7d220b20107c220942017d221037033020022011200e7d20" + "09420052ad2009200b54ad2008200f54ad7d7c50ad7d2211370338200241" + "e0006a200d2016200520122015201420132018102d20062108200c210b0c" + "020b2002200720087d427e8322123703002002200a200b7d220520072008" + "54ad22077d220d37030820024201200a200b54ad2005200754ad7c7d2207" + "200f7c220520107d220a42017d220f3703102002200e20117d200a420052" + "ad2005200754ad2005201054ad7d7c50ad7d220e370318200241406b200c" + "2017200620092015201420132018102d20122107200d210a0c010b0b2000" + "2001290300370300200041186a200141186a290300370300200041106a20" + "0141106a290300370300200041086a200141086a290300370300200241c0" + "016a24000bc92602357f187e230041c0066b22032400200341386a222b20" + "0141386a2226290300370300200341306a222c200141306a220e29030037" + "0300200341286a222d200141286a220f290300370300200341206a222e20" + "0141206a2210290300370300200341186a222f200141186a221129030037" + "0300200341106a2230200141106a22122903003703002003200129030037" + "03002003200141086a2227290300370308200320012002102f200341f800" + "6a2214200141f8006a2204290300370300200341f0006a2215200141f000" + "6a2205290300370300200341e8006a2216200141e8006a22062903003703" + "00200341e0006a2217200141e0006a2207290300370300200341d8006a22" + "0a200141d8006a2208290300370300200341d0006a220b200141d0006a22" + "092903003703002003200141c8006a220c29030037034820032001290340" + "370340200341406b200141406b2213200241406b2228102f200341b8016a" + "2220200141b8016a290300370300200341b0016a2221200141b0016a2903" + "00370300200341a8016a2222200141a8016a290300370300200341a0016a" + "2223200141a0016a29030037030020034198016a222420014198016a2903" + "0037030020034190016a222520014190016a290300370300200320014188" + "016a2903003703880120032001290380013703800120034180016a200141" + "80016a222920024180016a222a102f200341f8016a221820042903003703" + "00200341f0016a22192005290300370300200341e8016a221a2006290300" + "370300200341e0016a221b2007290300370300200341d8016a221c200829" + "0300370300200341d0016a221d20092903003703002003200c2903003703" + "c801200320012903403703c001200341c0016a201320291030200341b802" + "6a200241f8006a290300370300200341b0026a200241f0006a2903003703" + "00200341a8026a200241e8006a290300370300200341a0026a200241e000" + "6a29030037030020034198026a200241d8006a2903003703002003419002" + "6a200241d0006a2903003703002003200241c8006a290300370388022003" + "20022903403703800220034180026a2028202a1030200341c0056a200341" + "c0016a20034180026a102f2018200341f8056a2204290300370300201920" + "0341f0056a2205290300370300201a200341e8056a220629030037030020" + "1b200341e0056a2207290300370300201c200341d8056a22082903003703" + "00201d200341d0056a2209290300370300200320032903c8053703c80120" + "0320032903c0053703c00120034198066a220c201c290300370300200341" + "90066a220d201d290300370300200320032903c801370388062003200329" + "03c0013703800620034180066a2003290340223820032903482239200b29" + "0300223a200a290300223b42c7faf3c3ed82a3903c428d95c7c396d2dac0" + "977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200341b806" + "6a220a2018290300370300200341b0066a220b2019290300370300200320" + "1a2903003703a8062003201b2903003703a006200341a0066a2017290300" + "223c2016290300223d2015290300223e2014290300223f42c7faf3c3ed82" + "a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689" + "aece93b230102d2008200c29030022403703002009200d29030022413703" + "00200720032903a00622423703002005200b290300224337030020062003" + "2903a80622443703002004200a2903002245370300200320032903880622" + "463703c805200320032903800622473703c0052018204537030020192043" + "370300201a2044370300201b2042370300201c2040370300201d20413703" + "00200320463703c801200320473703c001200c201c290300370300200d20" + "1d290300370300200320032903c80137038806200320032903c001370380" + "0620034180066a2003290380012003290388012025290300202429030042" + "c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b8" + "7f42a9c0c689aece93b230102d200a2018290300370300200b2019290300" + "3703002003201a2903003703a8062003201b2903003703a006200341a006" + "6a202329030020222903002021290300202029030042c7faf3c3ed82a390" + "3c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece" + "93b230102d2008200c29030022403703002009200d290300224137030020" + "0720032903a00622423703002005200b2903002243370300200620032903" + "a80622443703002004200a29030022453703002003200329038806224637" + "03c805200320032903800622473703c00520182045370300201920433703" + "00201a2044370300201b2042370300201c2040370300201d204137030020" + "0320463703c801200320473703c001200342003703b805200342003703b0" + "05200342003703a805200342013703a00520034200370398052003420037" + "03900520034200370388052003420937038005200341c0056a200341c001" + "6a20034180056a102f201820042903003703002019200529030037030020" + "1a2006290300370300201b2007290300370300201c200829030037030020" + "1d2009290300370300200320032903c8053703c801200320032903c00537" + "03c001200341c0056a200341c0016a200310302018200429030037030020" + "192005290300370300201a2006290300370300201b200729030037030020" + "1c2008290300370300201d2009290300370300200320032903c8053703c8" + "01200320032903c0053703c001200341d0026a2214201229030037030020" + "0341d8026a22152011290300370300200341e0026a221620102903003703" + "00200341e8026a2217200f290300370300200341f0026a221e200e290300" + "370300200341f8026a221f2026290300370300200320012903003703c002" + "200320272903003703c802200341c0026a200120131030200341b8036a20" + "0241386a2231290300370300200341b0036a200241306a22322903003703" + "00200341a8036a200241286a2233290300370300200341a0036a20024120" + "6a223429030037030020034198036a200241186a22352903003703002003" + "4190036a200241106a22362903003703002003200241086a223729030037" + "038803200320022903003703800320034180036a200220281030200341c0" + "056a200341c0026a20034180036a102f201f2004290300370300201e2005" + "290300370300201720062903003703002016200729030037030020152008" + "29030037030020142009290300370300200320032903c8053703c8022003" + "20032903c0053703c002200c2015290300370300200d2014290300370300" + "200320032903c80237038806200320032903c0023703800620034180066a" + "200329030022402003290308224120302903002242202f290300224342c7" + "faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f" + "42a9c0c689aece93b230102d200a201f290300370300200b201e29030037" + "0300200320172903003703a806200320162903003703a006200341a0066a" + "202e2903002244202d2903002245202c2903002246202b290300224742c7" + "faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f" + "42a9c0c689aece93b230102d2008200c29030022483703002009200d2903" + "002249370300200720032903a006224a3703002005200b290300224b3703" + "00200620032903a806224c3703002004200a290300224d37030020032003" + "29038806224e3703c8052003200329038006224f3703c005201f204d3703" + "00201e204b3703002017204c3703002016204a3703002015204837030020" + "1420493703002003204e3703c8022003204f3703c002200c201529030037" + "0300200d2014290300370300200320032903c80237038806200320032903" + "c0023703800620034180066a20382039203a203b42c7faf3c3ed82a3903c" + "428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93" + "b230102d200a201f290300370300200b201e290300370300200320172903" + "003703a806200320162903003703a006200341a0066a203c203d203e203f" + "42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8" + "b87f42a9c0c689aece93b230102d2008200c29030022383703002009200d" + "2903002239370300200720032903a006223a3703002005200b290300223b" + "370300200620032903a806223c3703002004200a290300223d3703002003" + "200329038806223e3703c8052003200329038006223f3703c005201f203d" + "370300201e203b3703002017203c3703002016203a370300201520383703" + "00201420393703002003203e3703c8022003203f3703c002200341f8036a" + "2020290300370300200341f0036a2021290300370300200341e8036a2022" + "290300370300200341e0036a2023290300370300200341d8036a20242903" + "00370300200341d0036a202529030037030020032003290388013703c803" + "20032003290380013703c003200341c0036a20034180016a20034180056a" + "102f200341c0056a200341c0026a200341c0036a1030201f200429030037" + "0300201e2005290300370300201720062903003703002016200729030037" + "03002015200829030037030020142009290300370300200320032903c805" + "3703c802200320032903c0053703c00220034190046a2213201229030037" + "030020034198046a22122011290300370300200341a0046a221120102903" + "00370300200341a8046a2210200f290300370300200341b0046a220f200e" + "290300370300200341b8046a220e20262903003703002003200129030037" + "038004200320272903003703880420034180046a200120291030200341f8" + "046a2031290300370300200341f0046a2032290300370300200341e8046a" + "2033290300370300200341e0046a2034290300370300200341d8046a2035" + "290300370300200341d0046a2036290300370300200320372903003703c8" + "04200320022903003703c004200341c0046a2002202a1030200341c0056a" + "20034180046a200341c0046a102f200e2004290300370300200f20052903" + "003703002010200629030037030020112007290300370300201220082903" + "0037030020132009290300370300200320032903c8053703880420032003" + "2903c00537038004200c2012290300370300200d20132903003703002003" + "2003290388043703880620032003290380043703800620034180066a2040" + "20412042204342c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0" + "858ce8b691a8b87f42a9c0c689aece93b230102d200a200e290300370300" + "200b200f290300370300200320102903003703a806200320112903003703" + "a006200341a0066a204420452046204742c7faf3c3ed82a3903c428d95c7" + "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d" + "2008200c29030022383703002009200d2903002239370300200720032903" + "a006223a3703002005200b290300223b370300200620032903a806223c37" + "03002004200a290300223d3703002003200329038806223e3703c8052003" + "200329038006223f3703c005200e203d370300200f203b3703002010203c" + "3703002011203a37030020122038370300201320393703002003203e3703" + "88042003203f37038004200341c0056a20034180046a200341406b103020" + "0e2004290300370300200f20052903003703002010200629030037030020" + "112007290300370300201220082903003703002013200929030037030020" + "0320032903c80537038804200320032903c00537038004200c2012290300" + "370300200d20132903003703002003200329038804370388062003200329" + "0380043703800620034180066a2003290380012003290388012025290300" + "202429030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb085" + "8ce8b691a8b87f42a9c0c689aece93b230102d200a200e29030037030020" + "0b200f290300370300200320102903003703a806200320112903003703a0" + "06200341a0066a202329030020222903002021290300202029030042c7fa" + "f3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42" + "a9c0c689aece93b230102d2008200c29030022383703002009200d290300" + "2239370300200720032903a006223a3703002005200b290300223b370300" + "200620032903a806223c3703002004200a290300223d3703002003200329" + "038806223e3703c8052003200329038006223f3703c005200e203d370300" + "200f203b3703002010203c3703002011203a370300201220383703002013" + "20393703002003203e370388042003203f37038004200041386a20182903" + "00370300200041306a2019290300370300200041286a201a290300370300" + "200041206a201b290300370300200041186a201c29030037030020004110" + "6a201d290300370300200041086a20032903c801370300200020032903c0" + "01370300200020032903c002370340200041c8006a20032903c802370300" + "200041d0006a2014290300370300200041d8006a20152903003703002000" + "41e0006a2016290300370300200041e8006a2017290300370300200041f0" + "006a201e290300370300200041f8006a201f290300370300200041b8016a" + "200e290300370300200041b0016a200f290300370300200041a8016a2010" + "290300370300200041a0016a201129030037030020004198016a20122903" + "0037030020004190016a201329030037030020004188016a200329038804" + "370300200020032903800437038001200341c0066a24000b830c02137f04" + "7e23004180026b22032400200341d8006a2207200141186a290300370300" + "200341d0006a2208200141106a2903003703002003200141086a29030037" + "034820032001290300370340200341406b2002290300200241086a290300" + "2002290310200241186a29030042c7faf3c3ed82a3903c428d95c7c396d2" + "dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200341" + "98016a2204200141386a29030037030020034190016a2205200141306a29" + "03003703002003200141286a290300370388012003200129032037038001" + "20034180016a2002290320200241286a2903002002290330200241386a29" + "030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b6" + "91a8b87f42a9c0c689aece93b230102d200341186a220b20072903003703" + "00200341106a220c2008290300370300200341206a220d20032903800137" + "0300200341286a220e200329038801370300200341306a220f2005290300" + "370300200341386a22102004290300370300200320032903483703082003" + "2003290340370300200241f8006a2903002116200241e8006a2903002117" + "2002290370211820022903602119200341f8016a2209200141d8006a2903" + "00370300200341f0016a2206200141d0006a2903003703002003200141c8" + "006a2903003703e801200320012903403703e001200341e0016a20022903" + "40200241c8006a2903002002290350200241d8006a29030042c7faf3c3ed" + "82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c6" + "89aece93b230102d2004200141f8006a2903003703002005200141f0006a" + "2903003703002003200141e8006a29030037038801200320012903603703" + "800120034180016a201920172018201642c7faf3c3ed82a3903c428d95c7" + "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d" + "2007200929030037030020082006290300370300200341e0006a22112003" + "29038001370300200341e8006a2212200329038801370300200341f0006a" + "22132005290300370300200341f8006a2214200429030037030020032003" + "2903e801370348200320032903e001370340200241b8016a290300211620" + "0241a8016a290300211720022903b001211820022903a0012119200341d8" + "016a220a20014198016a290300370300200341d0016a221520014190016a" + "290300370300200320014188016a2903003703c801200320012903800137" + "03c001200341c0016a20022903800120024188016a290300200229039001" + "20024198016a29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f" + "42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2009200141b801" + "6a2903003703002006200141b0016a2903003703002003200141a8016a29" + "03003703e801200320012903a0013703e001200341e0016a201920172018" + "201642c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b6" + "91a8b87f42a9c0c689aece93b230102d2004200a29030037030020052015" + "290300370300200341a0016a220120032903e001370300200341a8016a22" + "0220032903e801370300200341b0016a220a2006290300370300200341b8" + "016a22062009290300370300200320032903c80137038801200320032903" + "c00137038001200041386a2010290300370300200041306a200f29030037" + "0300200041286a200e290300370300200041206a200d2903003703002000" + "41186a200b290300370300200041106a200c290300370300200041086a20" + "032903083703002000200329030037030020002003290340370340200041" + "c8006a2003290348370300200041d0006a2008290300370300200041d800" + "6a2007290300370300200041e0006a2011290300370300200041e8006a20" + "12290300370300200041f0006a2013290300370300200041f8006a201429" + "0300370300200041b8016a2006290300370300200041b0016a200a290300" + "370300200041a8016a2002290300370300200041a0016a20012903003703" + "0020004198016a200429030037030020004190016a200529030037030020" + "004188016a20032903880137030020002003290380013703800120034180" + "026a24000bf11902287f087e23004180056b22022400200241386a222420" + "0141386a220a290300370300200241306a2225200141306a220329030037" + "0300200241286a2226200141286a2204290300370300200241206a222720" + "0141206a2205290300370300200241186a2228200141186a220f29030037" + "0300200241106a2229200141106a22062903003703002002200129030037" + "03002002200141086a2207290300370308200220012001102f200241f800" + "6a2210200a290300370300200241f0006a22112003290300370300200241" + "e8006a22122004290300370300200241e0006a2213200529030037030020" + "0241d8006a2214200f290300370300200241d0006a221520062903003703" + "002002200729030037034820022001290300370340200241406b20012001" + "41406b2218102f20024180046a200241406b200241406b10302010200241" + "b8046a220b2903003703002011200241b0046a220c290300370300201220" + "0241a8046a220d2903003703002013200241a0046a220e29030037030020" + "1420024198046a2208290300370300201520024190046a22092903003703" + "0020022002290388043703482002200229038004370340200141f8006a22" + "19290300212a200141f0006a221a290300212b200141e8006a221b290300" + "212c200141e0006a221c290300212d200241f8046a2217200f2903003703" + "00200241f0046a220f2006290300370300200220072903003703e8042002" + "20012903003703e004200241e0046a2001290340200141c8006a221d2903" + "00200141d0006a221e290300200141d8006a221f29030042c7faf3c3ed82" + "a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689" + "aece93b230102d2008200a29030037030020092003290300370300200220" + "0429030037038804200220052903003703800420024180046a202d202c20" + "2b202a42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8" + "b691a8b87f42a9c0c689aece93b230102d20024198036a22032017290300" + "37030020024190036a2204200f290300370300200241a0036a2205200229" + "038004370300200241a8036a2206200229038804370300200241b0036a22" + "072009290300370300200241b8036a221620082903003703002002200229" + "03e80437038803200220022903e0043703800320024180046a2002418003" + "6a20014180016a220a10302016200b2903003703002007200c2903003703" + "002006200d2903003703002005200e290300370300200320082903003703" + "002004200929030037030020022002290388043703880320022002290380" + "043703800320024180046a20024180036a20024180036a102f2016200b29" + "03003703002007200c2903003703002006200d2903003703002005200e29" + "030037030020032008290300370300200420092903003703002002200229" + "0388043703880320022002290380043703800320024190016a2203201e29" + "030037030020024198016a2204201f290300370300200241a0016a220520" + "1c290300370300200241a8016a2206201b290300370300200241b0016a22" + "07201a290300370300200241b8016a221620192903003703002002200129" + "0340370380012002201d2903003703880120024180016a2018200a102f20" + "024180046a20024180016a20024180016a10302016200b29030037030020" + "07200c2903003703002006200d2903003703002005200e29030037030020" + "042008290300370300200320092903003703002002200229038804370388" + "01200220022903800437038001200241d0016a221820014190016a290300" + "370300200241d8016a221920014198016a290300370300200241e0016a22" + "1a200141a0016a290300370300200241e8016a221b200141a8016a290300" + "370300200241f0016a221c200141b0016a290300370300200241f8016a22" + "1d200141b8016a29030037030020022001290380013703c0012002200141" + "88016a2903003703c801200241c0016a200a200a102f200241b8026a221e" + "2016290300370300200241b0026a22162007290300370300200241a8026a" + "22072006290300370300200241a0026a2206200529030037030020024198" + "026a2205200429030037030020024190026a220420032903003703002002" + "42003703f803200242003703f003200242003703e803200242013703e003" + "200242003703d803200242003703d003200242003703c803200242093703" + "c00320022002290388013703880220022002290380013703800220024180" + "026a20024180016a200241c0036a102f20024180046a20024180026a2002" + "1030201e200b2903003703002016200c2903003703002007200d29030037" + "03002006200e290300370300200520082903003703002004200929030037" + "0300200241d0026a22032018290300370300200241d8026a221f20192903" + "00370300200241e0026a2220201a290300370300200241e8026a2221201b" + "290300370300200241f0026a2222201c290300370300200241f8026a2223" + "201d29030037030020022002290388043703880220022002290380043703" + "8002200220022903c0013703c002200220022903c8013703c802200241c0" + "026a200241c0016a200241c0036a102f20024180046a200241c0026a2002" + "41406b10302023200b2903003703002022200c2903003703002021200d29" + "03003703002020200e290300370300201f20082903003703002003200929" + "030037030020022002290388043703c80220022002290380043703c00220" + "024180046a200241406b20024180036a10302010200b2903003703002011" + "200c2903003703002012200d2903003703002013200e2903003703002014" + "200829030037030020152009290300370300200220022903880437034820" + "0220022903800437034020024180046a200241406b20024180016a103020" + "10200b2903003703002011200c2903003703002012200d29030037030020" + "13200e290300370300201420082903003703002015200929030037030020" + "022002290388043703482002200229038004370340200241d8046a220120" + "14290300370300200241d0046a220a201529030037030020022002290348" + "3703c804200220022903403703c004200241c0046a200229030020022903" + "082029290300202829030042c7faf3c3ed82a3903c428d95c7c396d2dac0" + "977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2017201029" + "0300370300200f2011290300370300200220122903003703e80420022013" + "2903003703e004200241e0046a2027290300202629030020252903002024" + "29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8" + "b691a8b87f42a9c0c689aece93b230102d20082001290300222a37030020" + "09200a290300222b370300200e20022903e004222c370300200c200f2903" + "00222d370300200d20022903e804222e370300200b2017290300222f3703" + "00200220022903c804223037038804200220022903c00422313703800420" + "10202f3703002011202d3703002012202e3703002013202c370300201420" + "2a3703002015202b37030020022030370348200220313703402001201429" + "0300370300200a2015290300370300200220022903483703c80420022002" + "2903403703c004200241c0046a20022903c00120022903c8012018290300" + "201929030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb085" + "8ce8b691a8b87f42a9c0c689aece93b230102d2017201029030037030020" + "0f2011290300370300200220122903003703e804200220132903003703e0" + "04200241e0046a201a290300201b290300201c290300201d29030042c7fa" + "f3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42" + "a9c0c689aece93b230102d20082001290300222a3703002009200a290300" + "222b370300200e20022903e004222c370300200c200f290300222d370300" + "200d20022903e804222e370300200b2017290300222f3703002002200229" + "03c804223037038804200220022903c0042231370380042010202f370300" + "2011202d3703002012202e3703002013202c3703002014202a3703002015" + "202b3703002002203037034820022031370340200041386a201e29030037" + "0300200041306a2016290300370300200041286a20072903003703002000" + "41206a2006290300370300200041186a2005290300370300200041106a20" + "04290300370300200041086a200229038802370300200020022903800237" + "0300200020022903c002370340200041c8006a20022903c8023703002000" + "41d0006a2003290300370300200041d8006a201f290300370300200041e0" + "006a2020290300370300200041e8006a2021290300370300200041f0006a" + "2022290300370300200041f8006a2023290300370300200041b8016a2010" + "290300370300200041b0016a2011290300370300200041a8016a20122903" + "00370300200041a0016a201329030037030020004198016a201429030037" + "030020004190016a201529030037030020004188016a2002290348370300" + "200020022903403703800120024180056a24000bfe09011d7e2001290310" + "22022001290300220484200141186a2903002215200141086a2903002203" + "8484420052044042c7faf3c3ed82a3903c20047d2118427f4200427f4200" + "200442788342c7faf3c3ed82a3903c561b220b2003200b56ad7d200b2003" + "7d220342f3eab8bce9ada5bfe8007d2219200354ad7c42017c220320027d" + "220c42a4cffaf397c9eed7c7007d220b200c54ad2002200356ad7d427f51" + "1b20157d42a9c0c689aece93b2307c210c0b420021152001290330220220" + "01290320220484200141386a2903002208200141286a2903002203848442" + "00520440427f4200427f4200200442788342c7faf3c3ed82a3903c561b22" + "062003200656ad7d200620037d220342f3eab8bce9ada5bfe8007d221520" + "0354ad7c42017c220320027d220642a4cffaf397c9eed7c7007d221a2006" + "54ad2002200356ad7d427f511b20087d42a9c0c689aece93b2307c211b42" + "c7faf3c3ed82a3903c20047d21060b200141f8006a2903002108200141e8" + "006a290300210220012903702104200129036021032001290350220e2001" + "290340220f84200141d8006a2903002205200141c8006a29030022108484" + "4200520440427f4200427f4200200f42788342c7faf3c3ed82a3903c561b" + "22092009201054ad7d200920107d220942f3eab8bce9ada5bfe8007d221c" + "200954ad7c42017c2216200e7d220d42a4cffaf397c9eed7c7007d220920" + "0d54ad200e201656ad7d427f511b20057d42a9c0c689aece93b2307c2116" + "42c7faf3c3ed82a3903c200f7d210d0b4200210e4200210f420021102003" + "2004842002200884844200520440427f4200427f4200200342788342c7fa" + "f3c3ed82a3903c561b22072002200756ad7d200720027d220242f3eab8bc" + "e9ada5bfe8007d220e200254ad7c42017c220220047d220742a4cffaf397" + "c9eed7c7007d220f200754ad2002200454ad7d427f511b20087d42a9c0c6" + "89aece93b2307c211042c7faf3c3ed82a3903c20037d21070b200141b801" + "6a2903002108200141a8016a290300210220012903b001210420012903a0" + "01210342002105200129039001221220012903800122138420014198016a" + "290300221e20014188016a290300221484844200520440427f4200427f42" + "00201342788342c7faf3c3ed82a3903c561b220a200a201454ad7d200a20" + "147d220a42f3eab8bce9ada5bfe8007d221d200a54ad7c42017c22172012" + "7d221142a4cffaf397c9eed7c7007d220a201154ad2012201756ad7d427f" + "511b201e7d42a9c0c689aece93b2307c211742c7faf3c3ed82a3903c2013" + "7d21110b4200211242002113420021142003200484200220088484420052" + "0440427f4200427f4200200342788342c7faf3c3ed82a3903c561b220520" + "02200556ad7d200520027d220242f3eab8bce9ada5bfe8007d2212200254" + "ad7c42017c220220047d220542a4cffaf397c9eed7c7007d2213200554ad" + "2002200454ad7d427f511b20087d42a9c0c689aece93b2307c211442c7fa" + "f3c3ed82a3903c20037d21050b200020133703b001200020053703a00120" + "00200a3703900120002011370380012000200f3703702000200737036020" + "0020093703502000200d3703402000201a37033020002006370320200020" + "0b37031020002018370300200020143703b801200020123703a801200020" + "17370398012000201d37038801200020103703782000200e370368200020" + "163703582000201c3703482000201b370338200020153703282000200c37" + "0318200020193703080b960501057f230041800c6b220324002003200120" + "02103b20034180036a200141c0016a220441c001104c1a200341c0046a20" + "0241c0016a220541c001104c1a200341c0016a20042005103b2003420037" + "03b809200342003703b009200342003703a809200342013703a009200342" + "003703980920034200370390092003420037038809200342093703800920" + "0341c00a6a200341c0026a20034180096a102f200341c80b6a2003418802" + "6a290300370300200341d00b6a20034190026a290300370300200341d80b" + "6a20034198026a290300370300200341e00b6a200341a0026a2903003703" + "00200341e80b6a200341a8026a290300370300200341f00b6a200341b002" + "6a290300370300200341f80b6a200341b8026a290300370300200341880b" + "6a20032903c801370300200341900b6a200341d0016a2903003703002003" + "41980b6a200341d8016a290300370300200341a00b6a200341e0016a2903" + "00370300200341a80b6a200341e8016a290300370300200341b00b6a2003" + "41f0016a290300370300200341b80b6a200341f8016a2903003703002003" + "2003290380023703c00b200320032903c0013703800b20034180066a2003" + "41c00a6a20031030200341c0066a200341800b6a2206200341406b103020" + "034180076a200341c00b6a220720034180016a103020034180096a200120" + "041030200341c0096a200141406b200341c0036a1030200341800a6a2001" + "4180016a20034180046a1030200341c00a6a200220051030200620024140" + "6b20034180056a1030200720024180016a200341c0056a1030200341c007" + "6a20034180096a200341c00a6a103b200341c00a6a200341c0076a200310" + "3c200041c0016a200341c00a6a200341c0016a103c200020034180066a41" + "c001104c1a200341800c6a24000bd741020e7f227e230041c0036b220324" + "0002400240200129034022212001290350222084200141c8006a29030022" + "23200141d8006a2903002222848442005204402002290340221d20022903" + "50221584200241c8006a2903002224200241d8006a290300221e8484500d" + "01200341f8016a2204200141406b220641186a2205290300370300200341" + "f0016a2208200641106a220b290300370300200320062903003703e00120" + "03200641086a220c2903003703e801200341e0016a202120232020202242" + "c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b20034198026a2209" + "200241406b220741186a220d29030037030020034190026a220a20074110" + "6a220e2903003703002003200741086a220f290300370388022003200729" + "03003703800220034180026a201d20242015201e42c7faf3c3ed82a3903c" + "428d95c7c396d2dac0977f102b200341186a2210200141186a2903003703" + "00200341106a200141106a2903003703002003200141086a290300370308" + "20032001290300370300200320032903800222162003290388022219200a" + "29030022252009290300222842c7faf3c3ed82a3903c428d95c7c396d2da" + "c0977f102b200341386a2209200241186a290300370300200341306a220a" + "200241106a2903003703002003200241086a290300370328200320022903" + "00370320200341206a20032903e001222c20032903e80122302008290300" + "22312004290300223242c7faf3c3ed82a3903c428d95c7c396d2dac0977f" + "102b200341b8036a22042005290300370300200341b0036a2205200b2903" + "003703002003200c2903003703a803200320062903003703a003200341a0" + "036a202c20302031203242c7faf3c3ed82a3903c428d95c7c396d2dac097" + "7f102b200429030021132005290300211f20032903a803211c20032903a0" + "0321172004200d2903003703002005200e2903003703002003200f290300" + "3703a803200320072903003703a003200341a0036a201620192025202842" + "c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2004290300211220" + "05290300211420032903a803211120032903a003211a200341d0006a2001" + "41306a290300370300200341d8006a2206200141386a2903003703002003" + "20012903203703402003200141286a290300370348200341406b201a2011" + "2014201242c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b200341" + "f8006a2207200241386a290300370300200341f0006a2208200241306a29" + "03003703002003200241286a290300370368200320022903203703602003" + "41e0006a2017201c201f201342c7faf3c3ed82a3903c428d95c7c396d2da" + "c0977f102b02402003200341206a104a450440200341406b200341e0006a" + "104a450d010b200420092903003703002005200a29030037030020032003" + "2903283703a803200320032903203703a003200341a0036a200329030020" + "032903082003290310201029030042c7faf3c3ed82a3903c428d95c7c396" + "d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2004" + "290300211f2005290300211c20032903a003211720032903a80321122004" + "200729030037030020052008290300370300200320032903683703a80320" + "0320032903603703a003200341a0036a2003290340200329034820032903" + "50200629030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0" + "858ce8b691a8b87f42a9c0c689aece93b230102d20124201862017423f88" + "842114201742018621112004290300211a2005290300211b20032903a803" + "211820032903a003212602400240201c4201862012423f8884222942ddb0" + "858ce8b691a8b87f85201f201f7c201c423f887c221342a9c0c689aece93" + "b2308584500440201142c7faf3c3ed82a3903c542014428d95c7c396d2da" + "c0977f542014428d95c7c396d2dac0977f511b450d0142a9c0c689aece93" + "b230211342ddb0858ce8b691a8b87f21292011212a201421110c020b2029" + "42deb0858ce8b691a8b87f54201342a9c0c689aece93b23054201342a9c0" + "c689aece93b230511b450d002011212a201421110c010b20132029201420" + "1142c7faf3c3ed82a3903c7d222a20115aad222d7d222742f3eab8bce9ad" + "a5bfe8007c2211202754ad2014202d54ad7d7c2214202954ad201442a2cf" + "faf397c9eed7c7007c2229201454ad7c50ad7d42a9c0c689aece93b2307d" + "21130b200341b8036a22012013370300200320293703b0032003202a3703" + "a003200320113703a80342ddb0858ce8b691a8b87f2114200341a0036a20" + "2a20112029201342c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b" + "2003201f3703d8012003201c3703d001200320123703c801200320173703" + "c001200341c0016a20032903a003222920032903a803222a20032903b003" + "222d2001290300222742c7faf3c3ed82a3903c428d95c7c396d2dac0977f" + "102b20184201862026423f888421112026420186212602400240201b4201" + "862018423f8884221842ddb0858ce8b691a8b87f85201a201a7c201b423f" + "887c221342a9c0c689aece93b2308584500440202642c7faf3c3ed82a390" + "3c542011428d95c7c396d2dac0977f542011428d95c7c396d2dac0977f51" + "1b450d012026211a2011211b42a9c0c689aece93b23021130c020b201842" + "deb0858ce8b691a8b87f54201342a9c0c689aece93b23054201342a9c0c6" + "89aece93b230511b450d002026211a2011211b201821140c010b20132018" + "2011202642c7faf3c3ed82a3903c7d221a20265aad22147d222642f3eab8" + "bce9ada5bfe8007c221b202654ad2011201454ad7d7c2211201854ad2011" + "42a2cffaf397c9eed7c7007c2214201154ad7c50ad7d42a9c0c689aece93" + "b2307d21130b20034198016a2201200341186a2903003703002003419001" + "6a2202200341106a29030037030020032003290308370388012003200329" + "03003703800142ddb0858ce8b691a8b87f212e20034180016a2029202a20" + "2d202742c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b200341b8" + "036a2204200341d8006a290300370300200341b0036a2205200341d0006a" + "290300370300200320032903483703a803200320032903403703a0032003" + "41a0036a20032903c001221120032903c801221820032903d00122272003" + "41d8016a290300222b42c7faf3c3ed82a3903c428d95c7c396d2dac0977f" + "102b200320133703b802200320143703b0022003201b3703a8022003201a" + "3703a002200429030021262005290300212920032903a803212a20032903" + "a003212d200341a0026a201a201b2014201342c7faf3c3ed82a3903c428d" + "95c7c396d2dac0977f102b200341a0026a201120182027202b42c7faf3c3" + "ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0" + "c689aece93b230102d200329038801222b4201862003290380012211423f" + "88842118201142018621270240024020022903002211420186202b423f88" + "84222b42ddb0858ce8b691a8b87f852011423f882001290300221120117c" + "7c221142a9c0c689aece93b2308584500440202742c7faf3c3ed82a3903c" + "542018428d95c7c396d2dac0977f542018428d95c7c396d2dac0977f511b" + "450d012027212f2018212742a9c0c689aece93b23021110c020b202b42de" + "b0858ce8b691a8b87f54201142a9c0c689aece93b23054201142a9c0c689" + "aece93b230511b450d002027212f20182127202b212e0c010b2011202b20" + "18202742c7faf3c3ed82a3903c7d222f20275aad222e7d221142f3eab8bc" + "e9ada5bfe8007c2227201154ad2018202e54ad7d7c2218202b54ad201842" + "a2cffaf397c9eed7c7007c222e201854ad7c50ad7d42a9c0c689aece93b2" + "307d21110b42ddb0858ce8b691a8b87f2118200341a0026a202f2027202e" + "201142c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b6" + "91a8b87f42a9c0c689aece93b230102d200320133703b801200320143703" + "b0012003201b3703a8012003201a3703a00120034180016a20032903a002" + "20032903a80220032903b002200341b8026a29030042c7faf3c3ed82a390" + "3c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece" + "93b230102d200341a0016a20032903800120032903880120032903900120" + "034198016a29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f10" + "2b202a420186202d423f88842114202d4201862111024002402029420186" + "202a423f8884221a42ddb0858ce8b691a8b87f85202620267c2029423f88" + "7c221342a9c0c689aece93b2308584500440201142c7faf3c3ed82a3903c" + "542014428d95c7c396d2dac0977f542014428d95c7c396d2dac0977f511b" + "450d012011211b2014211142a9c0c689aece93b23021130c020b201a42de" + "b0858ce8b691a8b87f54201342a9c0c689aece93b23054201342a9c0c689" + "aece93b230511b450d002011211b20142111201a21180c010b2013201a20" + "14201142c7faf3c3ed82a3903c7d221b20115aad22187d222642f3eab8bc" + "e9ada5bfe8007c2211202654ad2014201854ad7d7c2214201a54ad201442" + "a2cffaf397c9eed7c7007c2218201454ad7c50ad7d42a9c0c689aece93b2" + "307d21130b42ddb0858ce8b691a8b87f2114200341a0016a201b20112018" + "201342c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b6" + "91a8b87f42a9c0c689aece93b230102d02400240201520207c2213202320" + "247c2220202454ad2020201d20217c2224201d54ad7c2223202054ad7c7c" + "222042ddb0858ce8b691a8b87f852013201554ad2013202056ad7c201e20" + "227c7c222142a9c0c689aece93b2308584500440202442c7faf3c3ed82a3" + "903c542023428d95c7c396d2dac0977f542023428d95c7c396d2dac0977f" + "511b450d01202421222023211342a9c0c689aece93b23021210c020b2020" + "42deb0858ce8b691a8b87f54202142a9c0c689aece93b23054202142a9c0" + "c689aece93b230511b450d002024212220232113202021140c010b202120" + "202023202442c7faf3c3ed82a3903c7d222220245aad221d7d221542f3ea" + "b8bce9ada5bfe8007c2213201554ad201d202356ad7d7c2223202054ad20" + "2342a2cffaf397c9eed7c7007c2214202354ad7c50ad7d42a9c0c689aece" + "93b2307d21210b200341d8026a22012021370300200341d0026a22022014" + "370300200320223703c002200320133703c802200341c0026a2022201320" + "14202142c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b200341c0" + "026a202c20302031203242c7faf3c3ed82a3903c428d95c7c396d2dac097" + "7f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200341c0026a" + "201620192025202842c7faf3c3ed82a3903c428d95c7c396d2dac0977f42" + "ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200341c0026a2017" + "2012201c201f42c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b20" + "0041186a200341b8026a290300370300200041106a200341b0026a290300" + "370300200041086a20032903a802370300200020032903a0023703002000" + "20032903a001370320200041286a20032903a801370300200041306a2003" + "41b0016a290300370300200041386a200341b8016a290300370300200020" + "032903c002370340200041c8006a20032903c802370300200041d0006a20" + "02290300370300200041d8006a20012903003703000c030b200341b8036a" + "2204200141186a290300221b370300200341b0036a2205200141106a2903" + "0022183703002003200141086a29030022163703a8032003200129030022" + "193703a00342ddb0858ce8b691a8b87f2112200341a0036a201920162018" + "201b42c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2004290300" + "211d2005290300211520032903a803212420032903a003211f2004200141" + "206a220241186a2903003703002005200241106a29030037030020032002" + "41086a2903003703a803200320022903003703a003200341a0036a200129" + "0320200141286a2903002001290330200141386a29030042c7faf3c3ed82" + "a3903c428d95c7c396d2dac0977f102b2005290300211320032903a00321" + "1c20032903a8032117200420042903002225370300200320133703b00320" + "0320173703a8032003201c3703a003200341a0036a201c20172013202542" + "c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2004290300211420" + "032903b003211e20032903a803211120032903a003211a02400240024020" + "1320187c2218201620177c2216201754ad20162019201c7c2219201c54ad" + "7c2217201654ad7c7c221c42ddb0858ce8b691a8b87f852013201856ad20" + "18201c56ad7c201b20257c7c221342a9c0c689aece93b230858450044020" + "1942c7faf3c3ed82a3903c542017428d95c7c396d2dac0977f542017428d" + "95c7c396d2dac0977f511b450d0242a9c0c689aece93b23021130c010b20" + "1c42deb0858ce8b691a8b87f54201342a9c0c689aece93b23054201342a9" + "c0c689aece93b230511b450d01201c21120b2019211b201721180c010b20" + "13201c2017201942c7faf3c3ed82a3903c7d221b20195aad22127d221642" + "f3eab8bce9ada5bfe8007c2218201654ad2012201756ad7d7c2217201c54" + "ad201742a2cffaf397c9eed7c7007c2212201754ad7c50ad7d42a9c0c689" + "aece93b2307d21130b200341b8036a22012013370300200341b0036a2204" + "20123703002003201b3703a003200320183703a80342ddb0858ce8b691a8" + "b87f211c200341a0036a201b20182012201342c7faf3c3ed82a3903c428d" + "95c7c396d2dac0977f102b20034198036a22052001290300370300200341" + "90036a22062004290300370300200320032903a803370388032003200329" + "03a0033703800320034180036a201f20242015201d42c7faf3c3ed82a390" + "3c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece" + "93b230102d20012005290300370300200420062903003703002003200329" + "0388033703a80320032003290380033703a003200341a0036a201a201120" + "1e201442c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8" + "b691a8b87f42a9c0c689aece93b230102d20032903a803221b4201862003" + "2903a0032213423f88842117201342018621120240024002402004290300" + "2213420186201b423f8884221642ddb0858ce8b691a8b87f852013423f88" + "2001290300221320137c7c221342a9c0c689aece93b23085845004402012" + "42c7faf3c3ed82a3903c542017428d95c7c396d2dac0977f542017428d95" + "c7c396d2dac0977f511b450d0242a9c0c689aece93b23021130c010b2016" + "42deb0858ce8b691a8b87f54201342a9c0c689aece93b23054201342a9c0" + "c689aece93b230511b450d012016211c0b2012211b201721180c010b2013" + "20162017201242c7faf3c3ed82a3903c7d221b20125aad221c7d221242f3" + "eab8bce9ada5bfe8007c2218201254ad2017201c54ad7d7c2217201654ad" + "201742a2cffaf397c9eed7c7007c221c201754ad7c50ad7d42a9c0c689ae" + "ce93b2307d21130b2024420186201f423f8884211742ddb0858ce8b691a8" + "b87f2116201f42018621190240024020154201862024423f8884222842dd" + "b0858ce8b691a8b87f85201d201d7c2015423f887c221242a9c0c689aece" + "93b2308584500440201942c7faf3c3ed82a3903c542017428d95c7c396d2" + "dac0977f542017428d95c7c396d2dac0977f511b450d0120192125201721" + "1942a9c0c689aece93b23021120c020b202842deb0858ce8b691a8b87f54" + "201242a9c0c689aece93b23054201242a9c0c689aece93b230511b450d00" + "2019212520172119202821160c010b201220282017201942c7faf3c3ed82" + "a3903c7d222520195aad22167d222c42f3eab8bce9ada5bfe8007c221920" + "2c54ad2016201756ad7d7c2217202854ad201742a2cffaf397c9eed7c700" + "7c2216201754ad7c50ad7d42a9c0c689aece93b2307d21120b42ddb0858c" + "e8b691a8b87f211702400240201520167c2228201920247c2215201954ad" + "2015201f20257c221f202554ad7c2219201554ad7c7c221542ddb0858ce8" + "b691a8b87f852016202856ad2015202854ad7c2012201d7c7c221d42a9c0" + "c689aece93b2308584500440201f42c7faf3c3ed82a3903c542019428d95" + "c7c396d2dac0977f542019428d95c7c396d2dac0977f511b450d01201f21" + "242019211f42a9c0c689aece93b230211d0c020b201542deb0858ce8b691" + "a8b87f54201d42a9c0c689aece93b23054201d42a9c0c689aece93b23051" + "1b450d00201f21242019211f201521170c010b201d20152019201f42c7fa" + "f3c3ed82a3903c7d2224201f5aad22177d221242f3eab8bce9ada5bfe800" + "7c221f201254ad2017201956ad7d7c2212201554ad201242a2cffaf397c9" + "eed7c7007c2217201254ad7c50ad7d42a9c0c689aece93b2307d211d0b20" + "0320173703b003200320243703a0032003201d3703b8032003201f3703a8" + "0342ddb0858ce8b691a8b87f2119200341a0036a2024201f2017201d42c7" + "faf3c3ed82a3903c428d95c7c396d2dac0977f102b2018420186201b423f" + "88842112201b420186211602400240201c4201862018423f8884222542dd" + "b0858ce8b691a8b87f85201320137c201c423f887c221542a9c0c689aece" + "93b2308584500440201642c7faf3c3ed82a3903c542012428d95c7c396d2" + "dac0977f542012428d95c7c396d2dac0977f511b450d0120162128201221" + "1642a9c0c689aece93b23021150c020b202542deb0858ce8b691a8b87f54" + "201542a9c0c689aece93b23054201542a9c0c689aece93b230511b450d00" + "2016212820122116202521190c010b201520252012201642c7faf3c3ed82" + "a3903c7d222820165aad22197d222c42f3eab8bce9ada5bfe8007c221620" + "2c54ad2012201954ad7d7c2212202554ad201242a2cffaf397c9eed7c700" + "7c2219201254ad7c50ad7d42a9c0c689aece93b2307d21150b42ddb0858c" + "e8b691a8b87f2112200341a0036a202820162019201542c7faf3c3ed82a3" + "903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689ae" + "ce93b230102d2011420186201a423f88842116201a420186211a02400240" + "201e4201862011423f8884221942ddb0858ce8b691a8b87f85201420147c" + "201e423f887c221542a9c0c689aece93b2308584500440201a42c7faf3c3" + "ed82a3903c542016428d95c7c396d2dac0977f542016428d95c7c396d2da" + "c0977f511b450d01201a21112016211a42a9c0c689aece93b23021150c02" + "0b201942deb0858ce8b691a8b87f54201542a9c0c689aece93b230542015" + "42a9c0c689aece93b230511b450d00201a21112016211a201921120c010b" + "201520192016201a42c7faf3c3ed82a3903c7d2211201a5aad22127d2214" + "42f3eab8bce9ada5bfe8007c221a201454ad2012201656ad7d7c22142019" + "54ad201442a2cffaf397c9eed7c7007c2212201454ad7c50ad7d42a9c0c6" + "89aece93b2307d21150b201a4201862011423f8884211e42ddb0858ce8b6" + "91a8b87f211420114201862111024002402012420186201a423f88842216" + "42ddb0858ce8b691a8b87f85201520157c2012423f887c221542a9c0c689" + "aece93b2308584500440201142c7faf3c3ed82a3903c54201e428d95c7c3" + "96d2dac0977f54201e428d95c7c396d2dac0977f511b450d012011211a20" + "1e211142a9c0c689aece93b23021150c020b201642deb0858ce8b691a8b8" + "7f54201542a9c0c689aece93b23054201542a9c0c689aece93b230511b45" + "0d002011211a201e2111201621140c010b20152016201e201142c7faf3c3" + "ed82a3903c7d221a20115aad22127d221442f3eab8bce9ada5bfe8007c22" + "11201454ad2012201e56ad7d7c2212201654ad201242a2cffaf397c9eed7" + "c7007c2214201254ad7c50ad7d42a9c0c689aece93b2307d21150b201142" + "0186201a423f8884211242ddb0858ce8b691a8b87f2116201a420186211e" + "0240024020144201862011423f8884221142ddb0858ce8b691a8b87f8520" + "1520157c2014423f887c221542a9c0c689aece93b2308584500440201e42" + "c7faf3c3ed82a3903c542012428d95c7c396d2dac0977f542012428d95c7" + "c396d2dac0977f511b450d01201e21142012211e42a9c0c689aece93b230" + "21150c020b201142deb0858ce8b691a8b87f54201542a9c0c689aece93b2" + "3054201542a9c0c689aece93b230511b450d00201e21142012211e201121" + "160c010b201520112012201e42c7faf3c3ed82a3903c7d2214201e5aad22" + "1a7d221642f3eab8bce9ada5bfe8007c221e201654ad2012201a54ad7d7c" + "2212201154ad201242a2cffaf397c9eed7c7007c2216201254ad7c50ad7d" + "42a9c0c689aece93b2307d21150b20034198036a2201200241186a290300" + "37030020034190036a2204200241106a2903003703002003200229030037" + "0380032003200241086a2903003703880342ddb0858ce8b691a8b87f2112" + "20034180036a202120232020202242c7faf3c3ed82a3903c428d95c7c396" + "d2dac0977f102b2003201d3703f802200320173703f0022003201f3703e8" + "02200320243703e002200129030021212004290300212320032903800321" + "22200329038803211d200120133703002003201c37039003200320183703" + "88032003201b3703800320034180036a20032903a00320032903a8032003" + "2903b003200341b8036a29030042c7faf3c3ed82a3903c428d95c7c396d2" + "dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200341" + "e0026a200329038003200329038803200329039003200129030042c7faf3" + "c3ed82a3903c428d95c7c396d2dac0977f102b200341e0026a2014201e20" + "16201542c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8" + "b691a8b87f42a9c0c689aece93b230102d201d4201862022423f88842120" + "20224201862122024002402023420186201d423f8884221342ddb0858ce8" + "b691a8b87f85202120217c2023423f887c222142a9c0c689aece93b23085" + "84500440202242c7faf3c3ed82a3903c542020428d95c7c396d2dac0977f" + "542020428d95c7c396d2dac0977f511b450d01202221232020212242a9c0" + "c689aece93b23021210c020b201342deb0858ce8b691a8b87f54202142a9" + "c0c689aece93b23054202142a9c0c689aece93b230511b450d0020222123" + "20202122201321120c010b202120132020202242c7faf3c3ed82a3903c7d" + "222320225aad221d7d221542f3eab8bce9ada5bfe8007c2222201554ad20" + "1d202056ad7d7c2220201354ad202042a2cffaf397c9eed7c7007c221220" + "2054ad7c50ad7d42a9c0c689aece93b2307d21210b200020123703502000" + "2023370340200020032903a003370300200020032903e002370320200020" + "2137035820002022370348200041086a20032903a803370300200041286a" + "20032903e802370300200041186a200341b8036a29030037030020004110" + "6a200341b0036a290300370300200041306a200341f0026a290300370300" + "200041386a200341f8026a2903003703000c020b2000200241e000104c1a" + "0c010b2000200141e000104c1a0b200341c0036a24000b970802067f087e" + "230041a0016b220224000240200129034022082001290350220984200141" + "c8006a290300220a200141d8006a290300220b8484420052044020024200" + "370318200242003703102002420037030820024201370300024020014140" + "6b2002104a450440200241206a2001290320220837030020002001290300" + "2209370310200041306a2008370300200241386a200141386a2903002208" + "370300200241306a200141306a290300220a370300200241286a20014128" + "6a290300220b370300200241106a200141106a290300220c370300200241" + "186a200141186a290300220d370300200041186a200141086a290300220e" + "370300200041206a200c370300200041286a200d370300200041386a200b" + "370300200041406b200a370300200041c8006a2008370300200220093703" + "002002200e3703080c010b20024198016a2204200b370300200220093703" + "900120022008370380012002200a37038801200242a9c0c689aece93b230" + "370318200242ddb0858ce8b691a8b87f3703102002428d95c7c396d2dac0" + "977f370308200242c7faf3c3ed82a3903c37030020024180016a2002103a" + "20022903800121082002290388012109200229039001210a200241186a22" + "032004290300220b3703002002200a370310200220093703082002200837" + "0300200220082009200a200b42c7faf3c3ed82a3903c428d95c7c396d2da" + "c0977f102b2003290300210c2002290310210d2002290308210e20022903" + "00210f200241d0006a2204200141106a290300370300200241d8006a2205" + "200141186a290300370300200220012903003703402002200141086a2903" + "00370348200241406b200f200e200d200c42c7faf3c3ed82a3903c428d95" + "c7c396d2dac0977f102b200241f8006a2206200141386a29030037030020" + "0241f0006a2207200141306a2903003703002002200141286a2903003703" + "68200220012903203703602003200b3703002002200a3703102002200937" + "0308200220083703002002200f200e200d200c42c7faf3c3ed82a3903c42" + "8d95c7c396d2dac0977f102b200241e0006a200229030020022903082002" + "290310200329030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f10" + "2b200320052903002208370300200241106a200429030022093703002002" + "41206a2002290360220a370300200241286a2002290368220b3703002002" + "41306a2007290300220c370300200241386a2006290300220d3703002000" + "2002290340220e370310200041186a2002290348220f370300200041206a" + "2009370300200041286a2008370300200041306a200a370300200041386a" + "200b370300200041406b200c370300200041c8006a200d3703002002200f" + "3703082002200e3703000b20004200370308200042013703000c010b2000" + "4200370308200042003703000b200241a0016a24000b3000200128021c20" + "002d0000410274220041cca5c0006a280200200041c0a5c0006a28020020" + "0128022028020c1103000bf917021d7f087e23004180066b220224002002" + "41b8036a2208200141386a290300370300200241b0036a2209200141306a" + "290300370300200241a8036a2213200141286a290300370300200241a003" + "6a2214200141206a29030037030020024198036a2203200141186a290300" + "37030020024190036a2204200141106a2903003703002002200129030037" + "0380032002200141086a2903003703880320024180036a20012001102f20" + "0241f8036a2205200141f8006a290300370300200241f0036a2206200141" + "f0006a290300370300200241e8036a2207200141e8006a29030037030020" + "0241e0036a220a200141e0006a290300370300200241d8036a220b200141" + "d8006a290300370300200241d0036a220c200141d0006a29030037030020" + "02200141c8006a2903003703c803200220012903403703c003200241c003" + "6a200141406b221e201e102f200241b8046a221520052903003703002002" + "41b0046a22162006290300370300200241a8046a22172007290300370300" + "200241a0046a2218200a29030037030020024198046a2219200b29030037" + "030020024190046a221a200c290300370300200220022903c80337038804" + "200220022903c0033703800420024180046a200241c0036a200241c0036a" + "102f200241c0026a2001200241c0036a1030200241f8046a221b200241f8" + "026a2205290300370300200241f0046a220e200241f0026a220a29030037" + "0300200241e8046a220f200241e8026a2206290300370300200241e0046a" + "2210200241e0026a220c290300370300200241d8046a220d200241d8026a" + "2207290300370300200241d0046a2211200241d0026a220b290300370300" + "200220022903c8023703c804200220022903c0023703c004200241c0046a" + "200241c0026a200241c0026a102f200241d8056a2212200d290300370300" + "200241d0056a220d2011290300370300200220022903c8043703c8052002" + "20022903c0043703c005200241c0056a2002290380032002290388032004" + "290300200329030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42" + "ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200241f8056a2203" + "201b290300370300200241f0056a2204200e2903003703002002200f2903" + "003703e805200220102903003703e005200241e0056a2014290300201329" + "03002009290300200829030042c7faf3c3ed82a3903c428d95c7c396d2da" + "c0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20024198" + "026a2208201229030037030020024190026a2209200d2903003703002002" + "41a8026a221320022903e805370300200241b0026a221420042903003703" + "00200241b8026a221b2003290300370300200220022903c8053703880220" + "0220022903c00537038002200220022903e0053703a00220122008290300" + "370300200d200929030037030020022002290388023703c8052002200229" + "0380023703c005200241c0056a200229038004200229038804201a290300" + "201929030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb085" + "8ce8b691a8b87f42a9c0c689aece93b230102d2003201b29030037030020" + "042014290300370300200220132903003703e805200220022903a0023703" + "e005200241e0056a201829030020172903002016290300201529030042c7" + "faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f" + "42a9c0c689aece93b230102d200241186a22152012290300370300200241" + "106a2216200d290300370300200241206a221720022903e0053703002002" + "41286a221820022903e805370300200241306a2219200429030037030020" + "0241386a221a2003290300370300200220022903c8053703082002200229" + "03c005370300200241c0026a200220021030201a20052903003703002019" + "200a290300370300201820062903003703002017200c2903003703002015" + "20072903003703002016200b290300370300200220022903c80237030820" + "0220022903c002370300200241c0026a20024180036a20024180036a1030" + "200241406b200241c0026a20024180036a103020024190056a220e200241" + "d0006a29030037030020024198056a220f200241d8006a29030037030020" + "0241a0056a2210200241e0006a290300370300200241a8056a2211200241" + "e8006a290300370300200241b0056a221c200241f0006a29030037030020" + "0241b8056a221d200241f8006a2903003703002002200229034037038005" + "200220022903483703880520024180056a200241406b200241406b102f20" + "0241c0026a2002200210302003200f2903003703002004200e2903003703" + "0020022002290388053703e80520022002290380053703e005200241e005" + "6a20022903c00220022903c80220022903d002200729030042c7faf3c3ed" + "82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c6" + "89aece93b230102d2008201d2903003703002009201c2903003703002002" + "201129030037038802200220102903003703800220024180026a20022903" + "e002200629030020022903f002200529030042c7faf3c3ed82a3903c428d" + "95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230" + "102d2008290300211f200929030021202003290300212120042903002122" + "2002290388022123200229038002212420022903e805212520022903e005" + "212620024180016a20024180046a20024180046a1030200241c0026a2002" + "4180016a20024180016a1030200241b8016a220e20052903003703002002" + "41b0016a220f200a290300370300200241a8016a22102006290300370300" + "200241a0016a2211200c29030037030020024198016a221c200729030037" + "030020024190016a221d200b290300370300200220022903c80237038801" + "200220022903c00237038001200241c0026a20024180016a20024180016a" + "1030200e2005290300370300200f200a2903003703002010200629030037" + "03002011200c290300370300201c2007290300370300201d200b29030037" + "0300200220022903c80237038801200220022903c00237038001200241c0" + "016a201e20014180016a102f200320152903003703002004201629030037" + "0300200220022903083703e805200220022903003703e005200241e0056a" + "202620252022202142c7faf3c3ed82a3903c428d95c7c396d2dac0977f42" + "ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2008201a29030037" + "030020092019290300370300200220182903003703880220022017290300" + "3703800220024180026a202420232020201f42c7faf3c3ed82a3903c428d" + "95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230" + "102d20072003290300370300200b20042903003703002006200229038802" + "370300200a200929030037030020052008290300370300200220022903e8" + "053703c802200220022903e0053703c00220022002290380023703e00220" + "024180026a200241406b200241c0026a102f20122008290300370300200d" + "200929030037030020022002290388023703c80520022002290380023703" + "c005200241c0056a200229038001200229038801201d290300201c290300" + "42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8" + "b87f42a9c0c689aece93b230102d2003201b290300370300200420142903" + "00370300200220132903003703e805200220022903a0023703e005200241" + "e0056a20112903002010290300200f290300200e29030042c7faf3c3ed82" + "a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689" + "aece93b230102d20072012290300370300200b200d290300370300200c20" + "022903e005370300200620022903e805370300200a200429030037030020" + "052003290300370300200220022903c8053703c802200220022903c00537" + "03c00220004180016a200241c0016a200241c0016a10302000201f370338" + "200020203703302000202337032820002024370320200020213703182000" + "20223703102000202537030820002026370300200020022903c002370340" + "200041c8006a20022903c802370300200041d0006a200b29030037030020" + "0041d8006a2007290300370300200041e0006a200c290300370300200041" + "e8006a2006290300370300200041f0006a200a290300370300200041f800" + "6a200529030037030020024180066a24000bbd21021c7f087e230041800b" + "6b22032400024002400240024020012903800120014188016a2903008442" + "00520d0020012903900120014198016a290300844200520d0020012903a0" + "01200141a8016a290300844200520d0020012903b001200141b8016a2903" + "0084500d010b024020022903800120024188016a290300844200520d0020" + "022903900120024198016a290300844200520d0020022903a001200241a8" + "016a290300844200520d0020022903b001200241b8016a29030084500d02" + "0b200341b8086a221420014180016a220441386a290300370300200341b0" + "086a200441306a290300370300200341a8086a2215200441286a29030037" + "0300200341a0086a200441206a29030037030020034198086a2216200441" + "186a29030037030020034190086a200441106a2903003703002003200429" + "0300370380082003200441086a2903003703880820034180086a20042004" + "102f200341f8086a221720024180016a220541386a290300370300200341" + "f0086a200541306a290300370300200341e8086a2218200541286a290300" + "370300200341e0086a200541206a290300370300200341d8086a22192005" + "41186a290300370300200341d0086a200541106a29030037030020032005" + "41086a2903003703c808200320052903003703c008200341c0086a200520" + "05102f20032001200341c0086a102f200341406b200220034180086a102f" + "20034180016a200420034180086a102f200341c0016a2005200341c0086a" + "102f20034180026a200141406b200341c0016a102f200341c0026a200241" + "406b20034180016a102f024002402003200341406b104a0d00200341206a" + "200341e0006a104a0d0020034180026a200341c0026a104a0d00200341a0" + "026a200341e0026a104a450d010b200341386a290300211f200341286a29" + "03002120200329033021212003290320212220034198076a2201200341d8" + "006a29030037030020034190076a2202200341d0006a2903003703002003" + "200329034837038807200320032903403703800720034180076a20032903" + "0020032903082003290310200341186a29030042c7faf3c3ed82a3903c42" + "8d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b2" + "30102d200341d8076a2206200341f8006a290300370300200341d0076a22" + "09200341f0006a2903003703002003200341e8006a2903003703c8072003" + "20032903603703c007200341c0076a202220202021201f42c7faf3c3ed82" + "a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689" + "aece93b230102d20034198036a200129030037030020034190036a200229" + "0300370300200341a8036a20032903c807370300200341b0036a20092903" + "00370300200341b8036a2006290300370300200320032903880737038803" + "200320032903800737038003200320032903c0073703a003200341b8026a" + "290300211f200341a8026a290300212020032903b002212120032903a002" + "21222001200341d8026a2903003703002002200341d0026a290300370300" + "200320032903c80237038807200320032903c0023703800720034180076a" + "20032903800220032903880220032903900220034198026a29030042c7fa" + "f3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42" + "a9c0c689aece93b230102d2006200341f8026a2903003703002009200341" + "f0026a2903003703002003200341e8026a2903003703c807200320032903" + "e0023703c007200341c0076a202220202021201f42c7faf3c3ed82a3903c" + "428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93" + "b230102d200341d8036a2001290300370300200341d0036a200229030037" + "0300200341e8036a20032903c807370300200341f0036a20092903003703" + "00200341f8036a200629030037030020032003290388073703c803200320" + "03290380073703c003200320032903c0073703e003200341c0076a200341" + "80036a20034180036a1030200341b8096a200341f8076a220c2903003703" + "00200341b0096a200341f0076a2211290300370300200341a8096a200341" + "e8076a220d290300370300200341a0096a200341e0076a221a2903003703" + "0020034198096a200629030037030020034190096a200929030037030020" + "0320032903c80737038809200320032903c0073703800920034180096a20" + "0341c0076a200341c0076a102f20034180046a20034180036a2003418009" + "6a102f200341c0046a200341c0036a200341c0036a103020034180056a20" + "0320034180096a102f200341c0056a20034180026a20034180046a102f20" + "0341d0096a220a200341d0046a290300370300200341d8096a2207200341" + "d8046a290300370300200341e0096a220b200341e0046a29030037030020" + "0341e8096a220e200341e8046a290300370300200341f0096a220f200341" + "f0046a290300370300200341f8096a2210200341f8046a29030037030020" + "0320032903c0043703c009200320032903c8043703c809200341c0096a20" + "0341c0046a200341c0046a102f200341d8066a2208200729030037030020" + "0341d0066a2207200a290300370300200320032903c8093703c806200320" + "032903c0093703c006200341c0066a200329038004200329038804200329" + "03900420034198046a29030042c7faf3c3ed82a3903c428d95c7c396d2da" + "c0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20062010" + "2903003703002009200f2903003703002003200e2903003703c807200320" + "0b2903003703c007200341c0076a20032903a004200341a8046a29030020" + "032903b004200341b8046a29030042c7faf3c3ed82a3903c428d95c7c396" + "d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2001" + "200829030037030020022007290300370300200341a8076a220e20032903" + "c807370300200341b0076a220f2009290300370300200341b8076a221020" + "06290300370300200320032903c80637038807200320032903c006370380" + "07200320032903c0073703a007200341c0076a20034180056a2003418005" + "6a103020034198066a2212200129030037030020034190066a2213200229" + "030037030020032003290388073703880620032003290380073703800620" + "034180066a20032903c00720032903c80720032903d007200629030042c7" + "faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f" + "42a9c0c689aece93b230102d200820102903003703002007200f29030037" + "03002003200e2903003703c806200320032903a0073703c006200341c006" + "6a20032903e007200d29030020032903f007200c29030042c7faf3c3ed82" + "a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689" + "aece93b230102d2008290300211f20072903002120201229030021212013" + "290300212220032903c806212320032903c0062124200329038806212520" + "03290380062126200820034198056a290300370300200720034190056a29" + "030037030020032003290388053703c80620032003290380053703c00620" + "0341c0066a202620252022202142c7faf3c3ed82a3903c428d95c7c396d2" + "dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200120" + "0341b8056a2903003703002002200341b0056a2903003703002003200341" + "a8056a29030037038807200320032903a0053703800720034180076a2024" + "20232020201f42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0" + "858ce8b691a8b87f42a9c0c689aece93b230102d20062008290300370300" + "20092007290300370300200d200329038807370300201120022903003703" + "00200c2001290300370300200320032903c8063703c807200320032903c0" + "063703c00720032003290380073703e00720034180076a200341c0046a20" + "0341c0076a102f200341c0076a200341c0056a200341c0056a1030200341" + "f80a6a220a2001290300370300200341f00a6a220b200229030037030020" + "032003290388073703e80a20032003290380073703e00a200341e00a6a20" + "032903c00720032903c80720032903d007200629030042c7faf3c3ed82a3" + "903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689ae" + "ce93b230102d200820102903003703002007200f2903003703002003200e" + "2903003703c806200320032903a0073703c006200341c0066a20032903e0" + "07200d29030020032903f007200c29030042c7faf3c3ed82a3903c428d95" + "c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b23010" + "2d2012200a2903003703002013200b290300370300200341a0066a221b20" + "032903c006370300200341a8066a221c20032903c806370300200341b006" + "6a221d2007290300370300200341b8066a221e2008290300370300200320" + "032903e80a37038806200320032903e00a37038006200341c0076a200420" + "051030200341b80a6a2204200c290300370300200341b00a6a2205201129" + "0300370300200341a80a6a220c200d290300370300200341a00a6a220d20" + "1a290300370300200341980a6a22112006290300370300200341900a6a22" + "062009290300370300200320032903c8073703880a200320032903c00737" + "03800a200341800a6a200341c0076a200341c0076a102f200a2011290300" + "370300200b2006290300370300200320032903880a3703e80a2003200329" + "03800a3703e00a200341e00a6a2003290380082003290388082003290390" + "08201629030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0" + "858ce8b691a8b87f42a9c0c689aece93b230102d20082004290300370300" + "200720052903003703002003200c2903003703c8062003200d2903003703" + "c006200341c0066a20032903a008201529030020032903b0082014290300" + "42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8" + "b87f42a9c0c689aece93b230102d2001200a2903003703002002200b2903" + "00370300200e20032903c806370300200f20072903003703002010200829" + "0300370300200320032903e80a37038807200320032903e00a3703800720" + "0320032903c0063703a007200341d80a6a22042001290300370300200341" + "d00a6a2201200229030037030020032003290388073703c80a2003200329" + "0380073703c00a200341c00a6a20032903c00820032903c80820032903d0" + "08201929030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0" + "858ce8b691a8b87f42a9c0c689aece93b230102d200a2010290300370300" + "200b200f2903003703002003200e2903003703e80a200320032903a00737" + "03e00a200341e00a6a20032903e008201829030020032903f00820172903" + "0042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691" + "a8b87f42a9c0c689aece93b230102d200820042903003703002007200129" + "0300370300200341e8066a20032903e80a370300200341f0066a200b2903" + "00370300200341f8066a200a290300370300200320032903c80a3703c806" + "200320032903c00a3703c006200320032903e00a3703e00620004180016a" + "200341c0066a20034180036a102f2000201f370338200020203703302000" + "202337032820002024370320200020213703182000202237031020002025" + "370308200020263703002000200329038006370340200041c8006a200329" + "038806370300200041d0006a2013290300370300200041d8006a20122903" + "00370300200041e0006a201b290300370300200041e8006a201c29030037" + "0300200041f0006a201d290300370300200041f8006a201e290300370300" + "0c030b2000200110430c020b2000200241c001104c1a0c010b2000200141" + "c001104c1a0b200341800b6a24000bf50602037f067e230041c0026b2202" + "24000240024002400240024020012903800120014188016a290300844200" + "520d0020012903900120014198016a290300844200520d0020012903a001" + "200141a8016a290300844200520d0020012903b001200141b8016a290300" + "84500d010b200241d8006a4200370300200241e0006a2204420037030020" + "0241e8006a4200370300200241f0006a4200370300200241f8006a420037" + "030020024200370348200242013703402002420037035020014180016a22" + "03200241406b104a450440200141a0016a2004104a450d020b200241406b" + "200310312002280240410171450d02200241386a20024188016a29030022" + "05370300200241306a20024180016a22032903002206370300200241286a" + "200241f8006a2903002207370300200241206a200241f0006a2903002208" + "370300200241186a200241e8006a2903002209370300200241106a200241" + "e0006a290300220a37030020024190026a200a37030020024198026a2009" + "370300200241a0026a2008370300200241a8026a2007370300200241b002" + "6a2006370300200241b8026a200537030020022002290350220537030020" + "02200241d8006a2903002206370308200220053703800220022006370388" + "0220024180026a20022002102f200241406b200120024180026a102f2002" + "41c0016a200220024180026a102f2003200141406b200241c0016a102f20" + "0041106a200241406b418001104c1a20004200370308200042013703000c" + "030b20004200370308200042003703000c020b200241b8016a200141f800" + "6a290300370300200241b0016a200141f0006a290300370300200241a801" + "6a200141e8006a290300370300200241a0016a200141e0006a2903003703" + "0020024198016a200141d8006a29030037030020024190016a200141d000" + "6a29030037030020024188016a200141c8006a290300370300200241d000" + "6a200141106a290300370300200241d8006a200141186a29030037030020" + "0241e0006a200141206a290300370300200241e8006a200141286a290300" + "370300200241f0006a200141306a290300370300200241f8006a20014138" + "6a2903003703002002200129034037038001200220012903003703402002" + "200141086a290300370348200041106a200241406b418001104c1a200042" + "00370308200042013703000c010b4194a1c0001020000b200241c0026a24" + "000bd64502497f107e230041a00f6b22022400200241386a223f200141f8" + "006a220e290300370300200241306a2240200141f0006a220f2903003703" + "00200241286a2241200141e8006a2210290300370300200241206a224220" + "0141e0006a2211290300370300200241186a2243200141d8006a22122903" + "00370300200241106a2244200141d0006a22202903003703002002200129" + "03403703002002200141c8006a2221290300370308200141a8016a222329" + "03002153200141a0016a22242903002154200141b8016a22252903002155" + "200141b0016a2230290300215620014188016a2235290300215720014198" + "016a2236290300215820014190016a22372903002159200129038001215a" + "200241f8006a200141f8016a2213290300370300200241f0006a200141f0" + "016a2214290300370300200241e8006a200141e8016a2215290300370300" + "200241e0006a200141e0016a2216290300370300200241d8006a200141d8" + "016a2217290300370300200241d0006a200141d0016a220d290300370300" + "20024190016a20014190026a220429030037030020024198016a20014198" + "026a2206290300370300200241a0016a200141a0026a2207290300370300" + "200241a8016a200141a8026a2208290300370300200241b0016a200141b0" + "026a2205290300370300200241b8016a200141b8026a2209290300370300" + "2002200141c8016a2222290300370348200220012903c001370340200220" + "012903800237038001200220014188026a220a29030037038801200241f8" + "016a200141f8026a2238290300370300200241f0016a200141f0026a2245" + "290300370300200241e8016a200141e8026a2246290300370300200241e0" + "016a200141e0026a2247290300370300200241d8016a200141d8026a2248" + "290300370300200241d0016a200141d0026a2249290300370300200241b8" + "026a2226200141386a2231290300370300200241b0026a2227200141306a" + "2232290300370300200241a8026a2228200141286a223a29030037030020" + "0241a0026a2229200141206a223b29030037030020024198026a222a2001" + "41186a223c29030037030020024190026a222b200141106a223d29030037" + "03002002200141c8026a224a2903003703c801200220012903c0023703c0" + "012002200141086a223e2903003703880220022001290300370380022002" + "4180026a200120014180026a2203102f200241f8026a2219203129030037" + "0300200241f0026a221a2032290300370300200241e8026a221b203a2903" + "00370300200241e0026a221c203b290300370300200241d8026a221d203c" + "290300370300200241d0026a221e203d2903003703002002203e29030037" + "03c802200220012903003703c002200241c0026a200120031030200241b8" + "036a220b2009290300370300200241b0036a220920052903003703002002" + "41a8036a22052008290300370300200241a0036a220c2007290300370300" + "20024198036a2218200629030037030020024190036a221f200429030037" + "0300200242003703b80d200242003703b00d200242003703a80d20024201" + "3703a00d200242003703980d200242003703900d200242003703880d2002" + "42093703800d2002200a2903003703880320022001290380023703800320" + "024180036a2003200241800d6a102f200241c00b6a20024180036a200110" + "30200b200241f80b6a22062903003703002009200241f00b6a2207290300" + "3703002005200241e80b6a2208290300370300200c200241e00b6a220529" + "03003703002018200241d80b6a2203290300370300201f200241d00b6a22" + "04290300370300200220022903c80b37038803200220022903c00b370380" + "03200241c00b6a200241c0026a20024180036a102f201920062903003703" + "00201a2007290300370300201b2008290300370300201c20052903003703" + "00201d2003290300370300201e2004290300370300200220022903c80b37" + "03c802200220022903c00b3703c002200241980f6a220b201d2903003703" + "00200241900f6a220c201e290300370300200220022903c8023703880f20" + "0220022903c0023703800f200241800f6a20022903800220022903880220" + "2b290300202a29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f" + "42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200241980a6a22" + "092019290300370300200241900a6a220a201a2903003703002002201b29" + "03003703880a2002201c2903003703800a200241800a6a20292903002028" + "2903002027290300202629030042c7faf3c3ed82a3903c428d95c7c396d2" + "dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200320" + "0b290300224b3703002004200c290300224c370300200520022903800a22" + "4d3703002007200a290300224e370300200820022903880a224f37030020" + "0620092903002250370300200220022903880f22513703c80b2002200229" + "03800f22523703c00b20192050370300201a204e370300201b204f370300" + "201c204d370300201d204b370300201e204c370300200220513703c80220" + "0220523703c002200241c0036a20024180026a200241800d6a102f200b20" + "1d290300370300200c201e290300370300200220022903c8023703880f20" + "0220022903c0023703800f200241800f6a20022903c00320022903c80320" + "022903d003200241d8036a29030042c7faf3c3ed82a3903c428d95c7c396" + "d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2009" + "2019290300370300200a201a2903003703002002201b2903003703880a20" + "02201c2903003703800a200241800a6a20022903e003200241e8036a2903" + "0020022903f003200241f8036a29030042c7faf3c3ed82a3903c428d95c7" + "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d" + "2003200b290300224b3703002004200c290300224c370300200520022903" + "800a224d3703002007200a290300224e370300200820022903880a224f37" + "0300200620092903002250370300200220022903880f22513703c80b2002" + "20022903800f22523703c00b20192050370300201a204e370300201b204f" + "370300201c204d370300201d204b370300201e204c370300200220513703" + "c802200220523703c002200241c00b6a20024180026a20024180026a1030" + "202620062903003703002027200729030037030020282008290300370300" + "20292005290300370300202a2003290300370300202b2004290300370300" + "200220022903c80b37038802200220022903c00b3703800220024190046a" + "221f200d29030037030020024198046a222c2017290300370300200241a0" + "046a222d2016290300370300200241a8046a222e20152903003703002002" + "41b0046a222f2014290300370300200241b8046a22392013290300370300" + "200220012903c00137038004200220222903003703880420024180046a20" + "0141c0016a223320014180016a2234102f200241f8046a22182013290300" + "370300200241f0046a22132014290300370300200241e8046a2214201529" + "0300370300200241e0046a22152016290300370300200241d8046a221620" + "17290300370300200241d0046a2217200d29030037030020022022290300" + "3703c804200220012903c0013703c004200241c0046a2033203410302002" + "41b8056a220d2025290300370300200241b0056a22222030290300370300" + "200241a8056a22252023290300370300200241a0056a2223202429030037" + "030020024198056a2224203629030037030020024190056a223020372903" + "003703002002203529030037038805200220012903800137038005200241" + "80056a2034200241800d6a102f200241c00b6a20024180056a2033103020" + "0d2006290300370300202220072903003703002025200829030037030020" + "232005290300370300202420032903003703002030200429030037030020" + "0220022903c80b37038805200220022903c00b37038005200241c00b6a20" + "0241c0046a20024180056a102f2018200629030037030020132007290300" + "370300201420082903003703002015200529030037030020162003290300" + "37030020172004290300370300200220022903c80b3703c8042002200229" + "03c00b3703c004200b2016290300370300200c2017290300370300200220" + "022903c8043703880f200220022903c0043703800f200241800f6a200229" + "038004200229038804201f290300202c29030042c7faf3c3ed82a3903c42" + "8d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b2" + "30102d20092018290300370300200a201329030037030020022014290300" + "3703880a200220152903003703800a200241800a6a202d290300202e2903" + "00202f290300203929030042c7faf3c3ed82a3903c428d95c7c396d2dac0" + "977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2003200b29" + "0300224b3703002004200c290300224c370300200520022903800a224d37" + "03002007200a290300224e370300200820022903880a224f370300200620" + "092903002250370300200220022903880f22513703c80b20022002290380" + "0f22523703c00b201820503703002013204e3703002014204f3703002015" + "204d3703002016204b3703002017204c370300200220513703c804200220" + "523703c004200241c0056a20024180046a200241800d6a102f200b201629" + "0300370300200c2017290300370300200220022903c8043703880f200220" + "022903c0043703800f200241800f6a20022903c00520022903c805200229" + "03d005200241d8056a29030042c7faf3c3ed82a3903c428d95c7c396d2da" + "c0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20092018" + "290300370300200a2013290300370300200220142903003703880a200220" + "152903003703800a200241800a6a20022903e005200241e8056a29030020" + "022903f005200241f8056a29030042c7faf3c3ed82a3903c428d95c7c396" + "d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2003" + "200b290300224b3703002004200c290300224c370300200520022903800a" + "224d3703002007200a290300224e370300200820022903880a224f370300" + "200620092903002250370300200220022903880f22513703c80b20022002" + "2903800f22523703c00b201820503703002013204e3703002014204f3703" + "002015204d3703002016204b3703002017204c370300200220513703c804" + "200220523703c004200241c00b6a20024180046a20024180046a10302039" + "2006290300370300202f2007290300370300202e2008290300370300202d" + "2005290300370300202c2003290300370300201f20042903003703002002" + "20022903c80b37038804200220022903c00b3703800420024190066a2222" + "202029030037030020024198066a22332012290300370300200241a0066a" + "22342011290300370300200241a8066a22232010290300370300200241b0" + "066a2224200f290300370300200241b8066a2225200e2903003703002002" + "200129034037038006200220212903003703880620024180066a20014140" + "6b200141c0026a2230102f200241f8066a220d200e290300370300200241" + "f0066a220e200f290300370300200241e8066a220f201029030037030020" + "0241e0066a22102011290300370300200241d8066a221120122903003703" + "00200241d0066a22122020290300370300200220212903003703c8062002" + "20012903403703c006200241c0066a200220301030200241b8076a222020" + "38290300370300200241b0076a22212045290300370300200241a8076a22" + "352046290300370300200241a0076a223620472903003703002002419807" + "6a2237204829030037030020024190076a22382049290300370300200220" + "4a29030037038807200220012903c0023703800720024180076a20302002" + "41800d6a102f200241c00b6a20024180076a200210302020200629030037" + "030020212007290300370300203520082903003703002036200529030037" + "03002037200329030037030020382004290300370300200220022903c80b" + "37038807200220022903c00b37038007200241c00b6a200241c0066a2002" + "4180076a102f200d2006290300370300200e2007290300370300200f2008" + "290300370300201020052903003703002011200329030037030020122004" + "290300370300200220022903c80b3703c806200220022903c00b3703c006" + "200b2011290300370300200c2012290300370300200220022903c8063703" + "880f200220022903c0063703800f200241800f6a20022903800620022903" + "88062022290300203329030042c7faf3c3ed82a3903c428d95c7c396d2da" + "c0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2009200d" + "290300370300200a200e2903003703002002200f2903003703880a200220" + "102903003703800a200241800a6a20342903002023290300202429030020" + "2529030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858c" + "e8b691a8b87f42a9c0c689aece93b230102d2003200b290300224b370300" + "2004200c290300224c370300200520022903800a224d3703002007200a29" + "0300224e370300200820022903880a224f37030020062009290300225037" + "0300200220022903880f22513703c80b200220022903800f22523703c00b" + "200d2050370300200e204e370300200f204f3703002010204d3703002011" + "204b3703002012204c370300200220513703c806200220523703c0062002" + "41c0076a20024180066a200241800d6a102f200b2011290300370300200c" + "2012290300370300200220022903c8063703880f200220022903c0063703" + "800f200241800f6a20022903c00720022903c80720022903d007200241d8" + "076a29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb085" + "8ce8b691a8b87f42a9c0c689aece93b230102d2009200d29030037030020" + "0a200e2903003703002002200f2903003703880a20022010290300370380" + "0a200241800a6a20022903e007200241e8076a29030020022903f0072002" + "41f8076a29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42dd" + "b0858ce8b691a8b87f42a9c0c689aece93b230102d2003200b290300224b" + "3703002004200c290300224c370300200520022903800a224d3703002007" + "200a290300224e370300200820022903880a224f37030020062009290300" + "2250370300200220022903880f22513703c80b200220022903800f225237" + "03c00b200d2050370300200e204e370300200f204f3703002010204d3703" + "002011204b3703002012204c370300200220513703c806200220523703c0" + "06200241c00b6a20024180066a20024180066a1030202520062903003703" + "002024200729030037030020232008290300370300203420052903003703" + "002033200329030037030020222004290300370300200220022903c80b37" + "038806200220022903c00b370380062009201d290300370300200a201e29" + "0300370300200220022903c8023703880a200220022903c0023703800a20" + "0241800a6a2001290300203e290300203d290300203c29030042c7faf3c3" + "ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0" + "c689aece93b230102d200320192903003703002004201a29030037030020" + "02201b2903003703c80b2002201c2903003703c00b200241c00b6a203b29" + "0300203a2903002032290300203129030042c7faf3c3ed82a3903c428d95" + "c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b23010" + "2d200241d80d6a221c2009290300370300200241d00d6a221d200a290300" + "370300200241e00d6a221e20022903c00b370300200241e80d6a22202002" + "2903c80b370300200241f00d6a22212004290300370300200241f80d6a22" + "312003290300370300200220022903880a3703c80d200220022903800a37" + "03c00d200241c00b6a200241c00d6a200241c00d6a103020312006290300" + "3703002021200729030037030020202008290300370300201e2005290300" + "370300201c2003290300370300201d2004290300370300200220022903c8" + "0b3703c80d200220022903c00b3703c00d200241c00b6a200241c00d6a20" + "0241c0026a10302031200629030037030020212007290300370300202020" + "08290300370300201e2005290300370300201c2003290300370300201d20" + "0429030037030020024190086a2232202b29030037030020024198086a22" + "2b202a290300370300200241a0086a222a2029290300370300200241a808" + "6a22292028290300370300200241b0086a22282027290300370300200241" + "b8086a22272026290300370300200220022903c80b3703c80d2002200229" + "03c00b3703c00d2002200229038002370380082002200229038802370388" + "0820024180086a20024180026a20024180016a1030200241c00b6a200241" + "80086a20024180086a103020272006290300370300202820072903003703" + "0020292008290300370300202a2005290300370300202b20032903003703" + "0020322004290300370300200220022903c80b37038808200220022903c0" + "0b37038008200241c00b6a20024180086a20024180026a10302027200629" + "03003703002028200729030037030020292008290300370300202a200529" + "0300370300202b200329030037030020322004290300370300200241d008" + "6a22012022290300370300200241d8086a220b2033290300370300200241" + "e0086a220c2034290300370300200241e8086a2219202329030037030020" + "0241f0086a221a2024290300370300200241f8086a221b20252903003703" + "00200220022903c80b37038808200220022903c00b370380082002200229" + "0380063703c00820022002290388063703c808200241c0086a2002418006" + "6a200241800d6a102f200241c00b6a200241c0086a200241406b1030201b" + "2006290300370300201a200729030037030020192008290300370300200c" + "2005290300370300200b2003290300370300200120042903003703002002" + "20022903c80b3703c808200220022903c00b3703c008200241c00b6a2002" + "41c0086a200241c0086a1030201b2006290300370300201a200729030037" + "030020192008290300370300200c2005290300370300200b200329030037" + "030020012004290300370300200220022903c80b3703c808200220022903" + "c00b3703c00820024180096a20024180066a200241800d6a102f200241c0" + "0b6a200241c0086a20024180096a1030201b2006290300370300201a2007" + "29030037030020192008290300370300200c2005290300370300200b2003" + "29030037030020012004290300370300200220022903c80b3703c8082002" + "20022903c00b3703c00820092011290300370300200a2012290300370300" + "200220022903c8063703880a200220022903c0063703800a200241800a6a" + "205a20572059205842c7faf3c3ed82a3903c428d95c7c396d2dac0977f42" + "ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2003200d29030037" + "03002004200e2903003703002002200f2903003703c80b20022010290300" + "3703c00b200241c00b6a205420532056205542c7faf3c3ed82a3903c428d" + "95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230" + "102d200241980e6a220d2009290300370300200241900e6a220e200a2903" + "00370300200241a00e6a220f20022903c00b370300200241a80e6a221020" + "022903c80b370300200241b00e6a22112004290300370300200241b80e6a" + "22122003290300370300200220022903880a3703880e200220022903800a" + "3703800e200241c00b6a200241800e6a200241800e6a1030201220062903" + "003703002011200729030037030020102008290300370300200f20052903" + "00370300200d2003290300370300200e2004290300370300200220022903" + "c80b3703880e200220022903c00b3703800e200241c00b6a200241800e6a" + "200241c0066a103020122006290300370300201120072903003703002010" + "2008290300370300200f2005290300370300200d2003290300370300200e" + "2004290300370300200220022903c80b3703880e200220022903c00b3703" + "800e20092016290300370300200a2017290300370300200220022903c804" + "3703880a200220022903c0043703800a200241800a6a2002290300200229" + "03082044290300204329030042c7faf3c3ed82a3903c428d95c7c396d2da" + "c0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20032018" + "29030037030020042013290300370300200220142903003703c80b200220" + "152903003703c00b200241c00b6a20422903002041290300204029030020" + "3f29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858c" + "e8b691a8b87f42a9c0c689aece93b230102d200241d80e6a221820092903" + "00370300200241d00e6a2213200a290300370300200241e00e6a22142002" + "2903c00b370300200241e80e6a221520022903c80b370300200241f00e6a" + "22162004290300370300200241f80e6a2217200329030037030020022002" + "2903880a3703c80e200220022903800a3703c00e200241c00b6a200241c0" + "0e6a200241c00e6a10302017200629030037030020162007290300370300" + "201520082903003703002014200529030037030020182003290300370300" + "20132004290300370300200220022903c80b3703c80e200220022903c00b" + "3703c00e200241c00b6a200241c00e6a200241c0046a1030201720062903" + "003703002016200729030037030020152008290300370300201420052903" + "003703002018200329030037030020132004290300370300200241d0096a" + "2226201f290300370300200241d8096a221f202c290300370300200241e0" + "096a222c202d290300370300200241e8096a222d202e2903003703002002" + "41f0096a222e202f290300370300200241f8096a222f2039290300370300" + "200220022903c80b3703c80e200220022903c00b3703c00e200220022903" + "80043703c00920022002290388043703c809200241c0096a20024180046a" + "200241c0016a1030200241c00b6a200241c0096a200241c0096a1030202f" + "2006290300370300202e2007290300370300202d2008290300370300202c" + "2005290300370300201f2003290300370300202620042903003703002002" + "20022903c80b3703c809200220022903c00b3703c009200241c00b6a2002" + "41c0096a20024180046a1030202f2006290300370300202e200729030037" + "0300202d2008290300370300202c2005290300370300201f200329030037" + "030020262004290300370300200220022903c80b3703c809200220022903" + "c00b3703c009200241b80a6a2031290300370300200241b00a6a20212903" + "00370300200241a80a6a2020290300370300200241a00a6a201e29030037" + "03002009201c290300370300200a201d290300370300200220022903c80d" + "3703880a200220022903c00d3703800a200241c80a6a20022903c80e3703" + "00200241d00a6a2013290300370300200241d80a6a201829030037030020" + "0241e00a6a2014290300370300200241e80a6a2015290300370300200241" + "f00a6a2016290300370300200241f80a6a20172903003703002002200229" + "03c00e3703c00a200241b80b6a2012290300370300200241b00b6a201129" + "0300370300200241a80b6a2010290300370300200241a00b6a200f290300" + "370300200241980b6a200d290300370300200241900b6a200e2903003703" + "00200241880b6a20022903880e370300200220022903800e3703800b2006" + "201b2903003703002007201a290300370300200820192903003703002005" + "200c2903003703002003200b290300370300200420012903003703002002" + "20022903c8083703c80b200220022903c0083703c00b200241880c6a2002" + "29038808370300200241900c6a2032290300370300200241980c6a202b29" + "0300370300200241a00c6a202a290300370300200241a80c6a2029290300" + "370300200241b00c6a2028290300370300200241b80c6a20272903003703" + "0020022002290380083703800c200241f80c6a202f290300370300200241" + "f00c6a202e290300370300200241e80c6a202d290300370300200241e00c" + "6a202c290300370300200241d80c6a201f290300370300200241d00c6a20" + "26290300370300200241c80c6a20022903c809370300200220022903c009" + "3703c00c2000200241800a6a41c001104c41c0016a200241c00b6a41c001" + "104c1a200241a00f6a24000bcc1101047f23004180026b22032400024020" + "024101712206450440200341386a200141386a290300370300200341306a" + "200141306a290300370300200341286a200141286a290300370300200341" + "206a200141206a290300370300200341186a200141186a29030037030020" + "0341106a200141106a290300370300200320012903003703002003200141" + "086a29030037030820034190016a200141d0006a29030037030020034198" + "016a200141d8006a290300370300200341a0016a200141e0006a29030037" + "0300200341a8016a200141e8006a290300370300200341b0016a200141f0" + "006a290300370300200341b8016a200141f8006a29030037030020032001" + "290340370380012003200141c8006a290300370388010c010b200341d801" + "6a2204200141386a290300370300200341d0016a2205200141306a290300" + "370300200320012903203703c0012003200141286a2903003703c8012003" + "41c0016a42c6faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858c" + "e8b691a8b87f42a9c0c689aece93b23042c7faf3c3ed82a3903c428d95c7" + "c396d2dac0977f102b200341186a200141186a290300370300200341106a" + "200141106a290300370300200341286a20032903c801370300200341306a" + "2005290300370300200341386a20042903003703002003200141086a2903" + "0037030820032001290300370300200320032903c0013703202004200141" + "f8006a2903003703002005200141f0006a2903003703002003200141e800" + "6a2903003703c801200320012903603703c001200341c0016a42c6faf3c3" + "ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0" + "c689aece93b23042c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b" + "20034198016a200141d8006a29030037030020034190016a200141d0006a" + "290300370300200341a8016a20032903c801370300200341b0016a200529" + "0300370300200341b8016a20042903003703002003200141c8006a290300" + "370388012003200129034037038001200320032903c0013703a0010b0240" + "0240024002402002410670220441026b0e020102000b200342a0dcae8f86" + "aaf9e4163703f801200342948fe8babd91b3d2cb003703f001200342cebb" + "f2dbd0c38ad7323703e801200342a297bfa0c6a3f5b2163703e001200342" + "f7a3e4fb84f3d1d92f3703d801200342c3e2e6aacf87fb85cc003703d001" + "2003428ce68c968ce2b0c6b77f3703c801200342bdaabdbbf1aae5f1997f" + "3703c0010c020b200341e0016a22024200370300200241086a4200370300" + "200241106a4200370300200241186a4200370300200342a9c0c689aece93" + "b2303703d801200342b099b385febcf6b6de003703d001200342bddcd9dc" + "fbd3c1c7423703c801200342c8faf383d69cd1de643703c0010c010b2003" + "42efecc59e9bc8f7f8043703f801200342cf9298e1decdc3f9a97f3703f0" + "01200342b1ccfcc7f9b7ccef0f3703e801200342de8d96d5bae5aa863837" + "03e0012003428aded7ba8b8fb8ab083703d801200342accbfcacf98ec7ff" + "ba7f3703d001200342d385a5ebd5a7ffaf807f3703c801200342edf6f3de" + "87dd9bbafb003703c0010b20014180016a2102200341406b20034180016a" + "200341c0016a102f02402006450440200341b8016a200241386a29030037" + "0300200341b0016a200241306a290300370300200341a8016a200241286a" + "290300370300200341a0016a200241206a29030037030020034198016a20" + "0241186a29030037030020034190016a200241106a290300370300200320" + "02290300370380012003200241086a290300370388010c010b200341d801" + "6a2206200141b8016a290300370300200341d0016a2205200141b0016a29" + "0300370300200320012903a0013703c0012003200141a8016a2903003703" + "c801200341c0016a42c6faf3c3ed82a3903c428d95c7c396d2dac0977f42" + "ddb0858ce8b691a8b87f42a9c0c689aece93b23042c7faf3c3ed82a3903c" + "428d95c7c396d2dac0977f102b20034198016a200241186a290300370300" + "20034190016a200241106a290300370300200341a8016a20032903c80137" + "0300200341b0016a2005290300370300200341b8016a2006290300370300" + "2003200241086a2903003703880120032002290300370380012003200329" + "03c0013703a0010b0240024002400240200441026b0e020102000b200342" + "ee95f6bfbedb978a2c3703f80120034292b9acd88396a09d9f7f3703f001" + "200342e38efbdea1ddf4c2363703e801200342a682aee99ce2d19d413703" + "e00120034281d0baa7e6ebd3da053703d80120034284bde0d0f596f0f980" + "7f3703d001200342f2d8d3f4fbbed999533703c801200342e2cefa90d9ea" + "87c5847f3703c0010c020b200341e0016a22014200370300200141086a42" + "00370300200141106a4200370300200141186a4200370300200342003703" + "d801200342ac97d286eaf99af1d9003703d001200342cfb8ede69afe98f9" + "543703c801200342feffffbf97e6d1b1d7003703c0010c010b2003429294" + "c48c9eb3faea233703f80120034284bac8e6f0ddbdd87e3703f001200342" + "e5adfe9b87c1a7a5a47f3703e8012003429fc7b098d7b3fbf1df003703e0" + "01200342ab9b828ee18ce3e20b3703d801200342ce88c9adfb9eb8df1937" + "03d001200342cbd7c1add7a8c299663703c801200342e6e0afe6c3d7a48d" + "0e3703c0010b20004180016a20034180016a200341c0016a102f20004138" + "6a200341386a290300370300200041306a200341306a2903003703002000" + "41286a200341286a290300370300200041206a200341206a290300370300" + "200041186a200341186a290300370300200041106a200341106a29030037" + "0300200041086a2003290308370300200020032903003703002000200329" + "0340370340200041c8006a2003290348370300200041d0006a200341d000" + "6a290300370300200041d8006a200341d8006a290300370300200041e000" + "6a200341e0006a290300370300200041e8006a200341e8006a2903003703" + "00200041f0006a200341f0006a290300370300200041f8006a200341f800" + "6a29030037030020034180026a24000bbd46027c7f107e230041e00b6b22" + "052400200541b8016a2234200141b8016a2235290300370300200541b001" + "6a2236200141b0016a2237290300370300200541a8016a2238200141a801" + "6a2239290300370300200541a0016a223a200141a0016a223b2903003703" + "0020054198016a223c20014198016a223d29030037030020054190016a22" + "3e20014190016a223f290300370300200541d0016a222e200141d0016a22" + "4f290300370300200541d8016a222f200141d8016a225029030037030020" + "0541e0016a2230200141e0016a2251290300370300200541e8016a223120" + "0141e8016a2252290300370300200541f0016a2232200141f0016a225329" + "0300370300200541f8016a2233200141f8016a2254290300370300200520" + "012903800137038001200520012903c0013703c001200520014188016a22" + "40290300370388012005200141c8016a22552903003703c801200541b802" + "6a2256200141f8026a2220290300370300200541b0026a2257200141f002" + "6a2221290300370300200541a8026a2258200141e8026a22282903003703" + "00200541a0026a2259200141e0026a222929030037030020054198026a22" + "5a200141d8026a222a29030037030020054190026a225b200141d0026a22" + "2b290300370300200541d0026a2241200141106a22062903003703002005" + "41d8026a2242200141186a2207290300370300200541e0026a2243200141" + "206a2208290300370300200541e8026a2244200141286a22092903003703" + "00200541f0026a2245200141306a220a290300370300200541f8026a2246" + "200141386a220b2903003703002005200141c8026a222c29030037038802" + "200520012903c00237038002200520012903003703c0022005200141086a" + "220c2903003703c802200541c0026a20012002102f200541b8036a225c20" + "35290300370300200541b0036a225d2037290300370300200541a8036a22" + "5e2039290300370300200541a0036a225f203b2903003703002005419803" + "6a2260203d29030037030020054190036a2261203f290300370300200520" + "402903003703880320052001290380013703800320054180036a20014180" + "016a220d2004102f200541f8036a2262200141b8026a2903003703002005" + "41f0036a2263200141b0026a290300370300200541e8036a2264200141a8" + "026a290300370300200541e0036a2265200141a0026a2903003703002005" + "41d8036a226620014198026a290300370300200541d0036a226720014190" + "026a290300370300200520014188026a2903003703c80320052001290380" + "023703c003200541c0036a20014180026a22472003102f200541b8046a22" + "68200b290300370300200541b0046a2269200a290300370300200541a804" + "6a226a2009290300370300200541a0046a226b2008290300370300200541" + "98046a226c200729030037030020054190046a226d200629030037030020" + "05200c29030037038804200520012903003703800420054180046a200120" + "471030200541f8046a226e200b290300370300200541f0046a226f200a29" + "0300370300200541e8046a22702009290300370300200541e0046a227120" + "08290300370300200541d8046a22722007290300370300200541d0046a22" + "7320062903003703002005200c2903003703c804200520012903003703c0" + "04200541c0046a2001200d1030200541b8056a2248200141f8006a221229" + "0300370300200541b0056a2249200141f0006a2213290300370300200541" + "a8056a224a200141e8006a2214290300370300200541a0056a224b200141" + "e0006a221529030037030020054198056a224c200141d8006a221c290300" + "37030020054190056a224d200141d0006a221d2903003703002005200141" + "c8006a221e29030037038805200520012903403703800520054180056a20" + "0141406b221f200141c0016a22741030200541c0096a20054180056a2001" + "41c0026a222d10302048200541f8096a220c2903003703002049200541f0" + "096a220d290300370300204a200541e8096a220e290300370300204b2005" + "41e0096a220f290300370300204c200541d8096a2210290300370300204d" + "200541d0096a2211290300370300200520052903c8093703880520052005" + "2903c00937038005200541d0056a2222201d290300370300200541d8056a" + "2223201c290300370300200541e0056a22242015290300370300200541e8" + "056a22252014290300370300200541f0056a222620132903003703002005" + "41f8056a22272012290300370300200520012903403703c0052005201e29" + "03003703c805200541c0056a201f2004102f200541b8066a221620272903" + "00370300200541b0066a22172026290300370300200541a8066a22182025" + "290300370300200541a0066a2219202429030037030020054198066a221a" + "202329030037030020054190066a221b2022290300370300200520052903" + "c80537038806200520052903c0053703800620054180066a200541c0056a" + "200541c0036a1030200542003703b80b200542003703b00b200542003703" + "a80b200542013703a00b200542003703980b200542003703900b20054200" + "3703880b200542093703800b200541c0096a20054180066a200541800b6a" + "102f2016200c2903003703002017200d2903003703002018200e29030037" + "03002019200f290300370300201a2010290300370300201b201129030037" + "0300200520052903c80937038806200520052903c00937038006200541c0" + "096a20054180066a200541c0026a10302016200c29030022810137030020" + "17200d2903002282013703002018200e2903002283013703002019200f29" + "0300228401370300201a2010290300228501370300201b20112903002286" + "01370300200541106a2275208601370300200541186a2276208501370300" + "200541206a2277208401370300200541286a227820830137030020054130" + "6a2279208201370300200541386a227a208101370300200520052903c809" + "22810137038806200520052903c009228201370380062005208201370300" + "2005208101370308200541f8066a22062020290300370300200541f0066a" + "22072021290300370300200541e8066a22082028290300370300200541e0" + "066a22092029290300370300200541d8066a220a202a2903003703002005" + "41d0066a220b202b2903003703002005202c2903003703c8062005200129" + "03c0023703c006200541c0066a202d2003102f200541c0096a200541c005" + "6a200541c0066a10302027200c2903003703002026200d29030037030020" + "25200e2903003703002024200f2903003703002023201029030037030020" + "222011290300370300200520052903c8093703c805200520052903c00937" + "03c005200541c0096a200541c0066a20054180036a10302006200c290300" + "2281013703002007200d2903002282013703002008200e29030022830137" + "03002009200f290300228401370300200a2010290300228501370300200b" + "2011290300228601370300201b208601370300201a208501370300201920" + "840137030020182083013703002017208201370300201620810137030020" + "0520052903c8092281013703c806200520052903c0092282013703c00620" + "052082013703800620052081013703880620054180066a200541c0066a20" + "0541800b6a102f2006201229030037030020072013290300370300200820" + "1429030037030020092015290300370300200a201c290300370300200b20" + "1d2903003703002005201e2903003703c806200520012903403703c00620" + "0541c0066a201f2002102f200541c0096a200541c0056a200541c0066a10" + "302027200c2903003703002026200d2903003703002025200e2903003703" + "002024200f29030037030020232010290300370300202220112903003703" + "00200520052903c8093703c805200520052903c0093703c005200541c009" + "6a20054180066a200541c0066a10302016200c2903002281013703002017" + "200d2903002282013703002018200e2903002283013703002019200f2903" + "00228401370300201a2010290300228501370300201b2011290300228601" + "370300200541d0006a227b208601370300200541d8006a227c2085013703" + "00200541e0006a227d208401370300200541e8006a227e20830137030020" + "0541f0006a227f208201370300200541f8006a2280012081013703002005" + "20052903c80922810137038806200520052903c009228201370380062005" + "2082013703402005208101370348200541b8076a221c200241386a222829" + "0300370300200541b0076a221d200241306a2229290300370300200541a8" + "076a221e200241286a222a290300370300200541a0076a221f200241206a" + "222b29030037030020054198076a2220200241186a222c29030037030020" + "054190076a2221200241106a222d2903003703002005200241086a224e29" + "030037038807200520022903003703800720054180076a20022004103020" + "06206e2903003703002007206f2903003703002008207029030037030020" + "092071290300370300200a2072290300370300200b207329030037030020" + "0520052903c8043703c806200520052903c0043703c006200541c0066a20" + "0541c0046a20054180076a102f200541d80b6a2214200a29030037030020" + "0541d00b6a2215200b290300370300200520052903c8063703c80b200520" + "052903c0063703c00b200541c00b6a20052903c00220052903c802204129" + "0300204229030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42dd" + "b0858ce8b691a8b87f42a9c0c689aece93b230102d20054198086a221220" + "0629030037030020054190086a2213200729030037030020052008290300" + "37038808200520092903003703800820054180086a204329030020442903" + "002045290300204629030042c7faf3c3ed82a3903c428d95c7c396d2dac0" + "977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2010201429" + "030022810137030020112015290300228201370300200f20052903800822" + "8301370300200d2013290300228401370300200e20052903880822850137" + "0300200c2012290300228601370300200520052903c80b2287013703c809" + "200520052903c00b2288013703c009200620860137030020072084013703" + "0020082085013703002009208301370300200a208101370300200b208201" + "37030020052087013703c80620052088013703c0062014200a2903003703" + "002015200b290300370300200520052903c8063703c80b200520052903c0" + "063703c00b200541c00b6a20052903800322810120052903880322820120" + "61290300228301206029030022840142c7faf3c3ed82a3903c428d95c7c3" + "96d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20" + "122006290300370300201320072903003703002005200829030037038808" + "200520092903003703800820054180086a205f290300228501205e290300" + "228601205d290300228701205c29030022880142c7faf3c3ed82a3903c42" + "8d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b2" + "30102d2010201429030022890137030020112015290300228a0137030020" + "0f200529038008228b01370300200d2013290300228c01370300200e2005" + "29038808228d01370300200c2012290300228e01370300200520052903c8" + "0b228f013703c809200520052903c00b2290013703c0092006208e013703" + "002007208c013703002008208d013703002009208b01370300200a208901" + "370300200b208a013703002005208f013703c80620052090013703c00620" + "162054290300370300201720532903003703002018205229030037030020" + "192051290300370300201a2050290300370300201b204f29030037030020" + "05205529030037038806200520012903c0013703800620054180066a2074" + "2003102f200541c0096a200541c0056a20054180066a10302027200c2903" + "003703002026200d2903003703002025200e2903003703002024200f2903" + "003703002023201029030037030020222011290300370300200520052903" + "c8093703c805200520052903c0093703c005200541c0096a200541c0066a" + "20054180066a10302006200c2903003703002007200d2903003703002008" + "200e2903003703002009200f290300370300200a2010290300370300200b" + "2011290300370300200520052903c8093703c806200520052903c0093703" + "c0062021203f2903003703002020203d290300370300201f203b29030037" + "0300201e2039290300370300201d2037290300370300201c203529030037" + "030020052001290380013703800720052040290300370388072005418007" + "6a20054180016a2047103020342006290300370300203620072903003703" + "0020382008290300370300203a2009290300370300203c200a2903003703" + "00203e200b290300370300200541d0076a200441106a2903003703002005" + "41d8076a200441186a290300370300200541e0076a200441206a29030037" + "0300200541e8076a200441286a290300370300200541f0076a200441306a" + "290300370300200541f8076a200441386a290300370300200520052903c8" + "0637038801200520052903c00637038001200520042903003703c0072005" + "200441086a2903003703c807200541c0076a2004200310302006201c2903" + "003703002007201d2903003703002008201e2903003703002009201f2903" + "00370300200a2020290300370300200b2021290300370300200520052903" + "88073703c80620052005290380073703c006200541c0066a20054180076a" + "200541c0076a102f2014200a2903003703002015200b2903003703002005" + "20052903c8063703c80b200520052903c0063703c00b200541c00b6a2081" + "0120820120830120840142c7faf3c3ed82a3903c428d95c7c396d2dac097" + "7f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d201220062903" + "003703002013200729030037030020052008290300370388082005200929" + "03003703800820054180086a20850120860120870120880142c7faf3c3ed" + "82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c6" + "89aece93b230102d20102014290300228101370300201120152903002282" + "01370300200f200529038008228301370300200d20132903002284013703" + "00200e200529038808228501370300200c20122903002286013703002005" + "20052903c80b2287013703c809200520052903c00b2288013703c0092006" + "208601370300200720840137030020082085013703002009208301370300" + "200a208101370300200b20820137030020052087013703c8062005208801" + "3703c0062014200a2903003703002015200b290300370300200520052903" + "c8063703c80b200520052903c0063703c00b200541c00b6a20052903c003" + "22810120052903c8032282012067290300228301206629030022840142c7" + "faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f" + "42a9c0c689aece93b230102d201220062903003703002013200729030037" + "03002005200829030037038808200520092903003703800820054180086a" + "206529030022850120642903002286012063290300228701206229030022" + "880142c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b6" + "91a8b87f42a9c0c689aece93b230102d2010201429030022890137030020" + "112015290300228a01370300200f200529038008228b01370300200d2013" + "290300228c01370300200e200529038808228d01370300200c2012290300" + "228e01370300200520052903c80b228f013703c809200520052903c00b22" + "90013703c0092006208e013703002007208c013703002008208d01370300" + "2009208b01370300200a208901370300200b208a013703002005208f0137" + "03c80620052090013703c006201620062903003703002017200729030037" + "03002018200829030037030020192009290300370300201a200a29030037" + "0300201b200b290300370300200520052903c80637038806200520052903" + "c0063703800620054180066a200541c0066a200541800b6a102f20062033" + "290300370300200720322903003703002008203129030037030020092030" + "290300370300200a202f290300370300200b202e29030037030020052005" + "2903c8013703c806200520052903c0013703c006200541c0066a200541c0" + "016a2002102f200541c0096a200541c0056a200541c0066a10302027200c" + "2903003703002026200d2903003703002025200e2903003703002024200f" + "290300370300202320102903003703002022201129030037030020052005" + "2903c8093703c805200520052903c0093703c005200541c0096a20054180" + "066a200541c0066a10302016200c2903002289013703002017200d290300" + "228a013703002018200e290300228b013703002019200f290300228c0137" + "0300201a2010290300228d01370300201b2011290300228e01370300202e" + "208e01370300202f208d013703002030208c013703002031208b01370300" + "2032208a013703002033208901370300200520052903c809228901370388" + "06200520052903c009228a01370380062005208a013703c0012005208901" + "3703c8012006205629030037030020072057290300370300200820582903" + "0037030020092059290300370300200a205a290300370300200b205b2903" + "0037030020052005290388023703c80620052005290380023703c0062005" + "41c0066a20054180026a2004102f200541c0096a200541c0056a200541c0" + "066a10302027200c2903003703002026200d2903003703002025200e2903" + "003703002024200f29030037030020232010290300370300202220112903" + "00370300201b200b290300370300201a200a290300370300201920092903" + "003703002018200829030037030020172007290300370300201620062903" + "00370300200520052903c8093703c805200520052903c0093703c0052005" + "20052903c00637038006200520052903c8063703880620054180066a2005" + "41c0066a200541800b6a102f201c2028290300370300201d202929030037" + "0300201e202a290300370300201f202b2903003703002020202c29030037" + "03002021202d2903003703002005204e2903003703880720052002290300" + "3703800720054180076a2002200310302006206829030037030020072069" + "2903003703002008206a2903003703002009206b290300370300200a206c" + "290300370300200b206d29030037030020052005290388043703c8062005" + "2005290380043703c006200541c0066a20054180046a20054180076a102f" + "2014200a2903003703002015200b290300370300200520052903c8063703" + "c80b200520052903c0063703c00b200541c00b6a20052903c00220052903" + "c8022041290300204229030042c7faf3c3ed82a3903c428d95c7c396d2da" + "c0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20122006" + "290300370300201320072903003703002005200829030037038808200520" + "092903003703800820054180086a20432903002044290300204529030020" + "4629030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858c" + "e8b691a8b87f42a9c0c689aece93b230102d201020142903002289013703" + "0020112015290300228a01370300200f200529038008228b01370300200d" + "2013290300228c01370300200e200529038808228d01370300200c201229" + "0300228e01370300200520052903c80b228f013703c809200520052903c0" + "0b2290013703c0092006208e013703002007208c013703002008208d0137" + "03002009208b01370300200a208901370300200b208a013703002005208f" + "013703c80620052090013703c0062014200a2903003703002015200b2903" + "00370300200520052903c8063703c80b200520052903c0063703c00b2005" + "41c00b6a20810120820120830120840142c7faf3c3ed82a3903c428d95c7" + "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d" + "201220062903003703002013200729030037030020052008290300370388" + "08200520092903003703800820054180086a208501208601208701208801" + "42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8" + "b87f42a9c0c689aece93b230102d20102014290300228101370300201120" + "15290300228201370300200f200529038008228301370300200d20132903" + "00228401370300200e200529038808228501370300200c20122903002286" + "01370300200520052903c80b2287013703c809200520052903c00b228801" + "3703c0092006208601370300200720840137030020082085013703002009" + "208301370300200a208101370300200b20820137030020052087013703c8" + "0620052088013703c006200541c0096a20054180066a200541c0066a1030" + "2016200c2903003703002017200d2903003703002018200e290300370300" + "2019200f290300370300201a2010290300370300201b2011290300370300" + "200520052903c80937038806200520052903c009370380062021202d2903" + "003703002020202c290300370300201f202b290300370300201e202a2903" + "00370300201d2029290300370300201c2028290300370300200520022903" + "00370380072005204e2903003703880720054180076a2002200410302005" + "41c0096a20054180076a20031030201c200c290300370300201d200d2903" + "00370300201e200e290300370300201f200f290300370300202020102903" + "0037030020212011290300370300200b204d290300370300200a204c2903" + "003703002009204b2903003703002008204a290300370300200720492903" + "0037030020062048290300370300200520052903c8093703880720052005" + "2903c0093703800720052005290380053703c00620052005290388053703" + "c806200541c0066a20054180056a20054180076a102f2014200a29030037" + "03002015200b290300370300200520052903c8063703c80b200520052903" + "c0063703c00b200541c00b6a20052903c00520052903c805202229030020" + "2329030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858c" + "e8b691a8b87f42a9c0c689aece93b230102d201220062903003703002013" + "200729030037030020052008290300370388082005200929030037038008" + "20054180086a202429030020252903002026290300202729030042c7faf3" + "c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9" + "c0c689aece93b230102d2010201429030022810137030020112015290300" + "228201370300200f200529038008228301370300200d2013290300228401" + "370300200e200529038808228501370300200c2012290300228601370300" + "200520052903c80b2287013703c809200520052903c00b2288013703c009" + "200620860137030020072084013703002008208501370300200920830137" + "0300200a208101370300200b20820137030020052087013703c806200520" + "88013703c006200541b8086a207a290300370300200541b0086a20792903" + "00370300200541a8086a2078290300370300200541a0086a207729030037" + "030020122076290300370300201320752903003703002005200529030837" + "0388082005200529030037038008200541c8086a20052903483703002005" + "41d0086a207b290300370300200541d8086a207c290300370300200541e0" + "086a207d290300370300200541e8086a207e290300370300200541f0086a" + "207f290300370300200541f8086a20800129030037030020052005290340" + "3703c008200541b8096a2034290300370300200541b0096a203629030037" + "0300200541a8096a2038290300370300200541a0096a203a290300370300" + "20054198096a203c29030037030020054190096a203e2903003703002005" + "4188096a200529038801370300200520052903800137038009200c203329" + "0300370300200d2032290300370300200e2031290300370300200f203029" + "03003703002010202f2903003703002011202e2903003703002005200529" + "03c8013703c809200520052903c0013703c009200541880a6a2005290388" + "06370300200541900a6a201b290300370300200541980a6a201a29030037" + "0300200541a00a6a2019290300370300200541a80a6a2018290300370300" + "200541b00a6a2017290300370300200541b80a6a20162903003703002005" + "2005290380063703800a200541f80a6a2006290300370300200541f00a6a" + "2007290300370300200541e80a6a2008290300370300200541e00a6a2009" + "290300370300200541d80a6a200a290300370300200541d00a6a200b2903" + "00370300200541c80a6a20052903c806370300200520052903c0063703c0" + "0a200020054180086a41c001104c41c0016a200541c0096a41c001104c1a" + "200541e00b6a24000ba21d02297f0d7e23004180066b2203240020034180" + "046a20014180016a22162002102f20034198036a2204200141186a220c29" + "030037030020034190036a2205200141106a220d29030037030020032001" + "41086a220f29030037038803200320012903003703800320034180036a20" + "032903800420032903880420032903900420034198046a220929030042c7" + "faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f" + "42a9c0c689aece93b230102d200341d8036a2206200141386a2210290300" + "370300200341d0036a2207200141306a2211290300370300200320014128" + "6a22122903003703c8032003200141206a22172903003703c003200341c0" + "036a20032903a004200341a8046a220a29030020032903b004200341b804" + "6a220b29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0" + "858ce8b691a8b87f42a9c0c689aece93b230102d200341186a220e200429" + "0300370300200341106a22082005290300370300200341206a2213200329" + "03c003370300200341286a221420032903c803370300200341306a221520" + "07290300370300200341386a221820062903003703002003200329038803" + "370308200320032903800337030020034180046a2016200241406b221f10" + "2f2004200141d8006a22202903003703002005200141d0006a2221290300" + "3703002003200141c8006a22222903003703880320032001290340370380" + "0320034180036a2003290380042003290388042003290390042009290300" + "42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8" + "b87f42a9c0c689aece93b230102d2006200141f8006a2223290300370300" + "2007200141f0006a22242903003703002003200141e8006a222529030037" + "03c8032003200141e0006a22262903003703c003200341c0036a20032903" + "a004200a29030020032903b004200b29030042c7faf3c3ed82a3903c428d" + "95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230" + "102d200341d8006a22192004290300370300200341d0006a221a20052903" + "00370300200341e0006a221b20032903c003370300200341e8006a221c20" + "032903c803370300200341f0006a221d2007290300370300200341f8006a" + "221e20062903003703002003200329038803370348200320032903800337" + "0340200341f8046a2018290300370300200341f0046a2015290300370300" + "200341e8046a2014290300370300200341e0046a20132903003703002003" + "41d8046a200e290300370300200341d0046a200829030037030020032003" + "2903083703c804200320032903003703c004200341c0046a20032003102f" + "200341b8056a201e290300370300200341b0056a201d2903003703002003" + "41a8056a201c290300370300200341a0056a201b29030037030020034198" + "056a201929030037030020034190056a201a290300370300200320032903" + "4837038805200320032903403703800520034180056a200341406b200341" + "406b102f20034180016a2003200341c0046a102f200341c0016a20012003" + "41c0046a102f20034180046a201620034180056a102f200341c0036a2003" + "4180046a20034180016a103020034180046a200341c0016a200341c0016a" + "1030200341d8026a220e2006290300370300200341d0026a220820072903" + "00370300200320032903c8033703c802200320032903c0033703c0022003" + "41c0026a200329038004200329038804200329039004200929030042c7fa" + "f3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42" + "a9c0c689aece93b230102d2004200341f8036a2213290300370300200520" + "0341f0036a22142903003703002003200341e8036a221529030037038803" + "200320032903e0033703800320034180036a20032903a004200a29030020" + "032903b004200b29030042c7faf3c3ed82a3903c428d95c7c396d2dac097" + "7f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20034198026a" + "2218200e29030037030020034190026a22272008290300370300200341a8" + "026a2228200329038803370300200341b0026a2229200529030037030020" + "0341b8026a222a2004290300370300200320032903c80237038802200320" + "032903c0023703800220032003290380033703a00220034180046a200320" + "034180026a102f2010200b2903003703002011200341b0046a2210290300" + "3703002012200a2903003703002017200341a0046a222b29030037030020" + "0c2009290300370300200d20034190046a2211290300370300200f200329" + "03880437030020012003290380043703002004200341d8016a2903003703" + "002005200341d0016a290300370300200320032903c80137038803200320" + "032903c0013703800320034180036a200329038002200329038802202729" + "0300201829030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42dd" + "b0858ce8b691a8b87f42a9c0c689aece93b230102d2006200341f8016a29" + "03003703002007200341f0016a2903003703002003200341e8016a290300" + "3703c803200320032903e0013703c003200341c0036a20032903a0022028" + "2903002029290300202a29030042c7faf3c3ed82a3903c428d95c7c396d2" + "dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200920" + "0429030037030020112005290300370300200a20032903c8033703002010" + "2007290300370300200b2006290300370300200320032903880337038804" + "200320032903800337038004200320032903c0033703a004200341c0036a" + "200341406b20034180046a102f20034180046a20034180016a200141406b" + "102f200341f8056a220c2006290300370300200341f0056a220d20072903" + "00370300200320032903c8033703e805200320032903c0033703e0052003" + "41e0056a200329038004200329038804200329039004200929030042c7fa" + "f3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42" + "a9c0c689aece93b230102d200e2013290300370300200820142903003703" + "00200320152903003703c802200320032903e0033703c002200341c0026a" + "20032903a004200a29030020032903b004200b29030042c7faf3c3ed82a3" + "903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689ae" + "ce93b230102d2004200c2903003703002005200d290300370300200341a0" + "036a221720032903c002370300200341a8036a220f20032903c802370300" + "200341b0036a22122008290300370300200341b8036a2208200e29030037" + "0300200320032903e80537038803200320032903e0053703800320232008" + "290300370300202420122903003703002025200f29030037030020262017" + "290300370300202020042903003703002021200529030037030020222003" + "29038803370300200120032903800337034020034180046a201620034180" + "016a102f200141b8016a200b290300370300200141b0016a201029030037" + "0300200141a8016a200a290300370300200141a0016a202b290300370300" + "20014198016a200929030037030020014190016a20112903003703002001" + "4188016a2003290388043703002001200329038004370380012003420037" + "03f802200342003703f002200342003703e802200342013703e002200342" + "003703d802200342003703d002200342003703c802200342093703c00220" + "0341c0036a200341406b2002102f20034180046a2003201f102f200341d8" + "056a22012006290300370300200341d0056a220620072903003703002003" + "20032903c8033703c805200320032903c0033703c005200341c0056a2003" + "29038004200329038804200329039004200929030042c7faf3c3ed82a390" + "3c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece" + "93b230102d200c2013290300370300200d20142903003703002003201529" + "03003703e805200320032903e0033703e005200341e0056a20032903a004" + "200a29030020032903b004200b29030042c7faf3c3ed82a3903c428d95c7" + "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d" + "2004200129030037030020052006290300370300200f20032903e8053703" + "002012200d2903003703002008200c290300370300200320032903c80537" + "038803200320032903c00537038003200320032903e0053703a003200341" + "80046a200341c0026a20034180036a102f201e2903002136201d29030021" + "34201c290300212d201b2903002135201a29030022302003290340223184" + "201929030022382003290348223284844200520440427f4200427f420020" + "3142788342c7faf3c3ed82a3903c561b222e202e203254ad7d202e20327d" + "222e42f3eab8bce9ada5bfe8007d2237202e54ad7c42017c223320307d22" + "2f42a4cffaf397c9eed7c7007d222e202f54ad2030203356ad7d427f511b" + "20387d42a9c0c689aece93b2307c213342c7faf3c3ed82a3903c20317d21" + "2f0b4200213042002131420021322034203584202d203684844200520440" + "427f4200427f4200203542788342c7faf3c3ed82a3903c561b222c202c20" + "2d54ad7d202c202d7d222d42f3eab8bce9ada5bfe8007d2230202d54ad7c" + "42017c222d20347d222c42a4cffaf397c9eed7c7007d2231202c54ad202d" + "203454ad7d427f511b20367d42a9c0c689aece93b2307c213242c7faf3c3" + "ed82a3903c20357d212c0b20002003290380043703002000200329030037" + "0340200041086a200329038804370300200041c8006a2003290308370300" + "200041386a200341b8046a290300370300200041306a200341b0046a2903" + "00370300200041286a200341a8046a290300370300200041206a200341a0" + "046a290300370300200041186a20034198046a290300370300200041106a" + "20034190046a290300370300200041d0006a200341106a29030037030020" + "0041d8006a200341186a290300370300200041e0006a200341206a290300" + "370300200041e8006a200341286a290300370300200041f0006a20034130" + "6a290300370300200041f8006a200341386a290300370300200020323703" + "b801200020313703b001200020303703a8012000202c3703a00120002033" + "370398012000202e3703900120002037370388012000202f370380012003" + "4180066a24000b4201047f412021020240034020002d0000220320012d00" + "002204460440200041016a2100200141016a2101200241016b22020d010c" + "020b0b200320046b21050b20050b8a0301047f0240200141104904402000" + "21020c010b02402000410020006b41037122046a220320004d0d00200021" + "0220040440200421050340200241003a0000200241016a2102200541016b" + "22050d000b0b200441016b4107490d000340200241003a0000200241076a" + "41003a0000200241066a41003a0000200241056a41003a0000200241046a" + "41003a0000200241036a41003a0000200241026a41003a0000200241016a" + "41003a0000200241086a22022003470d000b0b2003200120046b2201417c" + "716a220220034b0440034020034100360200200341046a22032002490d00" + "0b0b200141037121010b02402002200120026a22054f0d00200141016b21" + "042001410771220304400340200241003a0000200241016a210220034101" + "6b22030d000b0b20044107490d000340200241003a0000200241076a4100" + "3a0000200241066a41003a0000200241056a41003a0000200241046a4100" + "3a0000200241036a41003a0000200241026a41003a0000200241016a4100" + "3a0000200241086a22022005470d000b0b20000b940501087f0240200241" + "10490440200021030c010b02402000410020006b41037122066a22052000" + "4d0d00200641016b21082000210320012104200604402006210703402003" + "20042d00003a0000200441016a2104200341016a2103200741016b22070d" + "000b0b20084107490d000340200320042d00003a0000200341016a200441" + "016a2d00003a0000200341026a200441026a2d00003a0000200341036a20" + "0441036a2d00003a0000200341046a200441046a2d00003a000020034105" + "6a200441056a2d00003a0000200341066a200441066a2d00003a00002003" + "41076a200441076a2d00003a0000200441086a2104200341086a22032005" + "470d000b0b2005200220066b2207417c7122086a21030240200120066a22" + "04410371450440200320054d0d0120042101034020052001280200360200" + "200141046a2101200541046a22052003490d000b0c010b200320054d0d00" + "2004410374220241187121062004417c71220941046a2101410020026b41" + "1871210a2009280200210203402005200220067620012802002202200a74" + "72360200200141046a2101200541046a22052003490d000b0b2007410371" + "2102200420086a21010b02402003200220036a22054f0d00200241016b21" + "072002410771220404400340200320012d00003a0000200141016a210120" + "0341016a2103200441016b22040d000b0b20074107490d00034020032001" + "2d00003a0000200341016a200141016a2d00003a0000200341026a200141" + "026a2d00003a0000200341036a200141036a2d00003a0000200341046a20" + "0141046a2d00003a0000200341056a200141056a2d00003a000020034106" + "6a200141066a2d00003a0000200341076a200141076a2d00003a00002001" + "41086a2101200341086a22032005470d000b0b20000b6201047e20002002" + "42ffffffff0f832203200142ffffffff0f8322047e220520024220882202" + "20047e22042003200142208822017e7c22034220867c2206370300200020" + "05200656ad200120027e2003200454ad4220862003422088847c7c370308" + "0b5601017e0240200341c000714504402003450d012002410020036b413f" + "71ad8620012003413f71ad220488842101200220048821020c010b200220" + "03413f71ad882101420021020b20002001370300200020023703080b5a01" + "027e420121020240200141c000714504402001450d0142002001413f71ad" + "2202864201410020016b413f71ad88842103420120028621020c010b4201" + "2001413f71ad862103420021020b20002002370300200020033703080b0b" + "e1250100418080c0000bd725307830306165613865396338336337336437" + "343033363932336465316234613636643138353437643538656565346561" + "6366656537303233356564323931393534636361706163697479206f7665" + "72666c6f77004200100011000000010000000000000063616c6c65642060" + "4f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e656020" + "76616c7565696e646578206f7574206f6620626f756e64733a2074686520" + "6c656e20697320206275742074686520696e646578206973200000008f00" + "100020000000af001000120000003a2000000100000000000000d4001000" + "020000003030303130323033303430353036303730383039313031313132" + "313331343135313631373138313932303231323232333234323532363237" + "323832393330333133323333333433353336333733383339343034313432" + "343334343435343634373438343935303531353235333534353535363537" + "353835393630363136323633363436353636363736383639373037313732" + "373337343735373637373738373938303831383238333834383538363837" + "38383839393039313932393339343935393639373938393972616e676520" + "737461727420696e64657820206f7574206f662072616e676520666f7220" + "736c696365206f66206c656e67746820b001100012000000c20110002200" + "000072616e676520656e6420696e64657820f401100010000000c2011000" + "22000000736c69636520696e646578207374617274732061742020627574" + "20656e6473206174200014021000160000002a0210000d00000054726965" + "6420746f20736872696e6b20746f2061206c617267657220636170616369" + "74794802100024000000f40a10004c000000b3020000090000002f686f6d" + "652f6f706964736b6f706e79692f2e636172676f2f72656769737472792f" + "7372632f696e6465782e6372617465732e696f2d31393439636638633662" + "3562353537662f6e756d2d626967696e742d302e342e362f7372632f6269" + "6775696e742e72732f686f6d652f6f706964736b6f706e79692f2e636172" + "676f2f72656769737472792f7372632f696e6465782e6372617465732e69" + "6f2d313934396366386336623562353537662f6e756d2d626967696e742d" + "302e342e362f7372632f62696775696e742f6164646974696f6e2e727300" + "0000ea0210006f000000890000001b000000a80c10006f00000057000000" + "09000000a80c10006f000000a3000000090000008402100066000000ad00" + "000013000000a80c10006f000000c40000001f000000a80c10006f000000" + "150100000e000000a80c10006f000000160100000e000000a80c10006f00" + "00001a0100000f000000a80c10006f000000510100000c000000a80c1000" + "6f0000002001000021000000a80c10006f0000002101000018000000a80c" + "10006f000000420100003c000000040c10006e0000006d0200000d000000" + "040c10006e00000066020000110000002f686f6d652f6f706964736b6f70" + "6e79692f2e636172676f2f72656769737472792f7372632f696e6465782e" + "6372617465732e696f2d313934396366386336623562353537662f6e756d" + "2d626967696e742d302e342e362f7372632f62696775696e742f73686966" + "742e72733c0410006c0000001e0000001c0000003c0410006c0000002e00" + "0000120000003c0410006c00000028000000190000002f72757374632f34" + "656231363132353065333430633866343866363665326239323965663461" + "3562656437633138312f6c6962726172792f636f72652f7372632f736c69" + "63652f697465722e72732f686f6d652f6f706964736b6f706e79692f2e63" + "6172676f2f72656769737472792f7372632f696e6465782e637261746573" + "2e696f2d313934396366386336623562353537662f6865782d302e342e33" + "2f7372632f6c69622e7273000000260510005b000000c700000025000000" + "260510005b000000c7000000410000004e6f744d656d626572496e76616c" + "6964536c6963654c656e677468496e76616c696455353132456e636f6469" + "6e6700000000000067e6096a85ae67bb72f36e3c3af54fa57f520e518c68" + "059babd9831f19cde05bd80410004e000000f605000015000000496e7661" + "6c696420636f6d7072657373656420706f696e7420666c61670000000806" + "10001d0000002f686f6d652f6f706964736b6f706e79692f2e636172676f" + "2f72656769737472792f7372632f696e6465782e6372617465732e696f2d" + "313934396366386336623562353537662f7370312d76657269666965722d" + "342e312e332f7372632f636f6e7374616e74732e72730000300610006a00" + "00001f000000120000002f686f6d652f6f706964736b6f706e79692f2e63" + "6172676f2f72656769737472792f7372632f696e6465782e637261746573" + "2e696f2d313934396366386336623562353537662f7370312d7665726966" + "6965722d342e312e332f7372632f636f6e7665727465722e727300000000" + "00000100000001000000060000004661696c656420746f20636f6e766572" + "74207820627974657320746f20467100ac0610006a0000001f0000003700" + "00002f686f6d652f6f706964736b6f706e79692f2e636172676f2f726567" + "69737472792f7372632f696e6465782e6372617465732e696f2d31393439" + "6366386336623562353537662f7370312d76657269666965722d342e312e" + "332f7372632f67726f746831362f636f6e7665727465722e727300005807" + "100072000000290000003e00000058071000720000002a0000003d000000" + "58071000720000002b0000003e00000058071000720000002c0000003e00" + "000058071000720000002e0000002500000058071000720000002e000000" + "3200000058071000720000002e0000003f00000058071000720000002e00" + "00004c0000005807100072000000320000003f0000005807100072000000" + "330000000b0000002f686f6d652f6f706964736b6f706e79692f2e636172" + "676f2f72656769737472792f7372632f696e6465782e6372617465732e69" + "6f2d313934396366386336623562353537662f7370312d76657269666965" + "722d342e312e332f7372632f67726f746831362f7665726966792e727300" + "6c0810006f0000002d000000160000002f686f6d652f6f706964736b6f70" + "6e79692f2e636172676f2f72656769737472792f7372632f696e6465782e" + "6372617465732e696f2d313934396366386336623562353537662f737031" + "2d76657269666965722d342e312e332f7372632f67726f746831362f6d6f" + "642e7273ec0810006c0000006d00000044000000ad4d9aa7e302d9df4174" + "9d5507949d05dbea33fbb16c643b22f599a2be6df2e2e1a1575c2e494d36" + "13e95e43b622318d9225c820e46acd08e8c987b44051195bc967032fcbf7" + "76d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847" + "ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab998e" + "9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2" + "1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992" + "f6edc980d3486a83b99e6c876acec4d309746e28cd96fa8e01864daa8459" + "9384f354a62eabe81511aa8e3034cbd75d42e708aa4ed80303fb0e4fb90c" + "d0ff6e9092132b65c9ae2605f3ef5540d3a64503c84fe5e1d9ec6eb1bd3a" + "906bbc80830e8e5400000003ced6e0c13f353262ae2dbbe49ce6a0b67576" + "d38aaf5958564be7648356830ef7db611b8f696f28ffb6250c7ffac66efb" + "d638d97f0d6c843c23691c3af532c9e3a974086bde6c91267b201137cfe6" + "ee8cd50ff0a3da861e808503e7df4da87b8d00000000000000002f727573" + "74632f346562313631323530653334306338663438663636653262393239" + "656634613562656437633138312f6c6962726172792f616c6c6f632f7372" + "632f7261775f7665632e7273f40a10004c00000028020000110000002f72" + "7573742f646570732f646c6d616c6c6f632d302e322e372f7372632f646c" + "6d616c6c6f632e7273617373657274696f6e206661696c65643a20707369" + "7a65203e3d2073697a65202b206d696e5f6f7665726865616400500b1000" + "29000000a804000009000000617373657274696f6e206661696c65643a20" + "7073697a65203c3d2073697a65202b206d61785f6f766572686561640000" + "500b100029000000ae0400000d0000000000000004000000000000002f68" + "6f6d652f6f706964736b6f706e79692f2e636172676f2f72656769737472" + "792f7372632f696e6465782e6372617465732e696f2d3139343963663863" + "36623562353537662f6e756d2d626967696e742d302e342e362f7372632f" + "62696775696e742f636f6e766572742e72730000040c10006e000000f001" + "000016000000617474656d707420746f20646976696465206279207a6572" + "6f000000840c1000190000002f686f6d652f6f706964736b6f706e79692f" + "2e636172676f2f72656769737472792f7372632f696e6465782e63726174" + "65732e696f2d313934396366386336623562353537662f6e756d2d626967" + "696e742d302e342e362f7372632f62696775696e742f6469766973696f6e" + "2e727300a80c10006f00000070000000090000004f6e63652070616e6963" + "6b65642f686f6d652f6f706964736b6f706e79692f2e636172676f2f7265" + "6769737472792f7372632f696e6465782e6372617465732e696f2d313934" + "396366386336623562353537662f7370696e2d302e392e382f7372632f6f" + "6e63652e72730000350d10005d000000e60000002a0000004f6e63652070" + "726576696f75736c7920706f69736f6e656420627920612070616e69636b" + "65640000350d10005d0000004e010000250000002f72757374632f346562" + "313631323530653334306338663438663636653262393239656634613562" + "656437633138312f6c6962726172792f616c6c6f632f7372632f736c6963" + "652e72730000dc0d10004a000000a10000001900000063616c6c65642060" + "526573756c743a3a756e77726170282960206f6e20616e20604572726020" + "76616c75652f686f6d652f6f706964736b6f706e79692f2e636172676f2f" + "72656769737472792f7372632f696e6465782e6372617465732e696f2d31" + "3934396366386336623562353537662f7375627374726174652d626e2d73" + "756363696e63742d302e362e302d76342d72632e382f7372632f6669656c" + "64732f66702e72730000630e10007b000000e9020000230000004661696c" + "656420746f20636f6d707574652074686520696e7665727365206f662074" + "68652064697669736f722f686f6d652f6f706964736b6f706e79692f2e63" + "6172676f2f72656769737472792f7372632f696e6465782e637261746573" + "2e696f2d313934396366386336623562353537662f737562737472617465" + "2d626e2d73756363696e63742d302e362e302d76342d72632e382f737263" + "2f6669656c64732f6671322e72731c0f10007c000000430100000e000000" + "000000000100000001000000070000002f686f6d652f6f706964736b6f70" + "6e79692f2e636172676f2f72656769737472792f7372632f696e6465782e" + "6372617465732e696f2d313934396366386336623562353537662f737562" + "7374726174652d626e2d73756363696e63742d302e362e302d76342d7263" + "2e382f7372632f67726f7570732f6d6f642e7273b80f10007c000000b100" + "00002c000000556e61626c6520746f20636f6e7665727420473120746f20" + "416666696e654731b80f10007c0000000001000012000000b80f10007c00" + "00002001000012000000b80f10007c000000400100000d000000b80f1000" + "7c0000006b01000029000000010001000000030003000000030001000300" + "000300000000000100000300010000030000000003000100000003000300" + "00010000000300000300010001000000b80f10007c000000150300002600" + "0000b80f10007c0000001003000026000000b80f10007c00000008030000" + "2e000000b80f10007c000000020300002a000000b80f10007c0000009b03" + "000010000000b80f10007c0000009c03000010000000b80f10007c000000" + "8f03000014000000b80f10007c0000009203000018000000b80f10007c00" + "000095030000180000006d696c6c6572206c6f6f702063616e6e6f742070" + "726f64756365207a65726f00b80f10007c000000221100000a000000b80f" + "10007c000000191100002a000000b80f10007c0000001911000017000000" + "b80f10007c0000001a1100002e000000b80f10007c0000001a1100001b00" + "00002f686f6d652f6f706964736b6f706e79692f2e636172676f2f726567" + "69737472792f7372632f696e6465782e6372617465732e696f2d31393439" + "6366386336623562353537662f7375627374726174652d626e2d73756363" + "696e63742d302e362e302d76342d72632e382f7372632f6c69622e727300" + "0000e4111000750000003b0300000c000000e4111000750000003c030000" + "0c0000004e6f744f6e43757276654e6f74496e53756267726f7570496e76" + "616c6964496e7075744c656e677468000000120000001300000009000000" + "ad051000bf051000a40510000a0000000d000000120000007c1210008612" + "1000931210004d0970726f64756365727302086c616e6775616765010452" + "757374000c70726f6365737365642d6279010572757374631d312e38352e" + "31202834656231363132353020323032352d30332d31352900490f746172" + "6765745f6665617475726573042b0f6d757461626c652d676c6f62616c73" + "2b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d" + "756c746976616c7565"; + +extern std::string const ledgerSqnWasmHex = + "0061736d010000000108026000017f60000002160103656e760e6765745f6c65646765725f" + "73716e000003030201000503010002063e0a7f004180080b7f004180080b7f004180100b7f" + "004180100b7f00418090040b7f004180080b7f00418090040b7f00418080080b7f0041000b" + "7f0041010b07b0010d066d656d6f72790200115f5f7761736d5f63616c6c5f63746f727300" + "010666696e69736800020362756603000c5f5f64736f5f68616e646c6503010a5f5f646174" + "615f656e6403020b5f5f737461636b5f6c6f7703030c5f5f737461636b5f6869676803040d" + "5f5f676c6f62616c5f6261736503050b5f5f686561705f6261736503060a5f5f686561705f" + "656e6403070d5f5f6d656d6f72795f6261736503080c5f5f7461626c655f6261736503090a" + "150202000b1001017f100022004100200041044b1b0b007f0970726f647563657273010c70" + "726f6365737365642d62790105636c616e675f31392e312e352d776173692d73646b202868" + "747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a6563742061" + "62346235613264623538323935386166316565333038613739306366646234326264323437" + "32302900490f7461726765745f6665617475726573042b0f6d757461626c652d676c6f6261" + "6c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976" + "616c7565"; + +extern std::string const allHostFunctionsWasmHex = + "0061736d0100000001540c60047f7f7f7f017f60027f7f017f60037f7f7f017f60057f7f7f" + "7f7f017f6000017f60017f017f60037f7f7f0060037f7f7e017f60087f7f7f7f7f7f7f7f01" + "7f60067f7f7f7f7f7f017f60017f0060027f7f0002ae061a08686f73745f6c69620c676574" + "5f74785f6669656c64000208686f73745f6c69620974726163655f6e756d000708686f7374" + "5f6c6962057472616365000308686f73745f6c69620e6765745f6c65646765725f73716e00" + "0408686f73745f6c6962166765745f706172656e745f6c65646765725f74696d6500040868" + "6f73745f6c6962166765745f706172656e745f6c65646765725f68617368000108686f7374" + "5f6c69620d74726163655f6163636f756e74000008686f73745f6c6962136765745f74785f" + "6e65737465645f6669656c64000008686f73745f6c6962106765745f74785f61727261795f" + "6c656e000508686f73745f6c6962176765745f74785f6e65737465645f61727261795f6c65" + "6e000108686f73745f6c69621c6765745f63757272656e745f6c65646765725f6f626a5f66" + "69656c64000208686f73745f6c6962236765745f63757272656e745f6c65646765725f6f62" + "6a5f6e65737465645f6669656c64000008686f73745f6c6962206765745f63757272656e74" + "5f6c65646765725f6f626a5f61727261795f6c656e000508686f73745f6c6962276765745f" + "63757272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e0001" + "08686f73745f6c69620e6163636f756e745f6b65796c6574000008686f73745f6c69621063" + "616368655f6c65646765725f6f626a000208686f73745f6c6962146765745f6c6564676572" + "5f6f626a5f6669656c64000008686f73745f6c69621b6765745f6c65646765725f6f626a5f" + "6e65737465645f6669656c64000308686f73745f6c6962186765745f6c65646765725f6f62" + "6a5f61727261795f6c656e000108686f73745f6c69621f6765745f6c65646765725f6f626a" + "5f6e65737465645f61727261795f6c656e000208686f73745f6c69621163726564656e7469" + "616c5f6b65796c6574000808686f73745f6c69620d657363726f775f6b65796c6574000308" + "686f73745f6c69620d6f7261636c655f6b65796c6574000308686f73745f6c696213636f6d" + "707574655f7368613531325f68616c66000008686f73745f6c6962076765745f6e66740009" + "08686f73745f6c69620b7570646174655f64617461000103060506060a0b04050301001106" + "19037f01418080c0000b7f0041af99c0000b7f0041b099c0000b072e04066d656d6f727902" + "000666696e697368001e0a5f5f646174615f656e6403010b5f5f686561705f626173650302" + "0a801c051900200241094f0440000b20002002360204200020013602000b1900200241214f" + "0440000b20002002360204200020013602000b970101057f230041206b2201240020014118" + "6a22044100360200200141106a220542003703002001420037030802404181802020014108" + "6a4114100022034114470440024020034100480440200020033602040c010b2000417f3602" + "040b410121020c010b20002001290308370001200041116a2004280200360000200041096a" + "20052903003700000b200020023a0000200141206a24000b450020012d0000450440200020" + "01290001370000200041106a200141116a280000360000200041086a200141096a29000037" + "00000f0b418080c000410b20013402041001000bea1901097f230041b0036b22002400418b" + "80c000411b41004100410010021a41a680c000411941004100410010021a41e780c000412b" + "41004100410010021a027f02400240024002400240024002401003220141004a0440419281" + "c00041172001ad10011a1004220141004c0d0141a981c00041132001ad10011a200041c801" + "6a22034200370300200041c0016a22054200370300200041b8016a22044200370300200042" + "003703b001200041b0016a22064120100522014120470d0241bc81c0004113200641204101" + "10021a41cf81c000412041004100410010021a41dc82c000412e41004100410010021a2000" + "41a0016a410036020020004198016a42003703002000420037039001418180202000419001" + "6a22024114100022014114470d03418a83c00041142002411410061a200042003703704188" + "8018200041f0006a22024108100022014108470d04419e83c0004117420810011a41b583c0" + "00412820024108410110021a2000410036025041848008200041d0006a2202410410002201" + "4104470d0541dd83c000411520024104410110021a200041013b003c200342003703002005" + "420037030020044200370300200042003703b00102402000413c6a41022006412010072201" + "41004e044041f283c00041142001ad10011a200041306a20062001101b418684c000410d20" + "002802302000280234410110021a0c010b419384c00041292001ac10011a0b41bc84c00041" + "154183803c1008ac10011a41d184c00041134189803c1008ac10011a02402000413c6a4102" + "1009220141004e044041e484c00041142001ad10011a0c010b41f884c000412d2001ac1001" + "1a0b41a585c000412341004100410010021a41de86c000413341004100410010021a200042" + "0037037041828018200041f0006a22014108100a220241004c0d0620024108460440419187" + "c000412b420810011a41bc87c000412f20014108410110021a0c080b41eb87c000412f2002" + "ad10011a200041286a200041f0006a2002101a419a88c00041172000280228200028022c41" + "0110021a0c070b41bf82c000411d2001ac10011a419b7f0c070b419a82c00041252001ac10" + "011a419a7f0c060b41ef81c000412b2001ac10011a41997f0c050b41b486c000412a2001ac" + "10011a41b77e0c040b41f385c00041c1002001ac10011a41b67e0c030b41c885c000412b20" + "01ac10011a41b57e0c020b41b188c00041c5002002ac10011a0b200041a0016a4100360200" + "20004198016a4200370300200042003703900102404181802020004190016a22024114100a" + "220141004a044041f688c000411e2002411410061a0c010b419489c00041332001ac10011a" + "0b200041013b0050200041c8016a4200370300200041c0016a4200370300200041b8016a42" + "00370300200042003703b0010240200041d0006a4102200041b0016a22014120100b220241" + "004e044041c789c000411c2002ad10011a200041206a20012002101b41e389c00041152000" + "2802202000280224410110021a0c010b41f889c00041392002ac10011a0b41b18ac0004124" + "4183803c100cac10011a0240200041d0006a4102100d220141004e044041d58ac000411c20" + "01ad10011a0c010b41f18ac000413d2001ac10011a0b41ae8bc00041284100410041001002" + "1a41d68bc000412f41004100410010021a200041b0016a2202101c200041f0006a22012002" + "101d200041a8016a4200370300200041a0016a420037030020004198016a42003703002000" + "420037039001024002400240024002402001411420004190016a22024120100e2201412046" + "0440200241204100100f220441004a044041858cc00041232004ad10011a20004200370350" + "200441828018200041d0006a220141081010220241004c0d022002410846044041a88cc000" + "412a420810011a41d28cc000412e20014108410110021a0c060b41808dc000412e2002ad10" + "011a200041186a200041d0006a2002101a41ae8dc00041162000280218200028021c410110" + "021a0c050b41e68fc000413c2004ac10011a200041c8016a4200370300200041c0016a4200" + "370300200041b8016a4200370300200042003703b001410141828018200041b0016a412010" + "1022014100480d020c030b41ba92c000412e2001ac10011a41ef7c0c050b41c48dc000412b" + "2002ac10011a0c020b41a290c00041c1002001ac10011a0b200041013b00504101200041d0" + "006a4102200041b0016a412010112201410048044041e390c00041352001ac10011a0b4101" + "4183803c101222014100480440419891c00041322001ac10011a0b4101200041d0006a4102" + "10132201410048044041ca91c00041392001ac10011a0b418392c000413741004100410010" + "021a0c010b200041013b003c200041c8016a4200370300200041c0016a4200370300200041" + "b8016a4200370300200042003703b001024020042000413c6a4102200041b0016a22014120" + "1011220241004e044041ef8dc000411b2002ad10011a200041106a20012002101b418a8ec0" + "00411420002802102000280214410110021a0c010b419e8ec00041312002ac10011a0b41cf" + "8ec000412320044183803c1012ac10011a024020042000413c6a41021013220141004e0440" + "41f28ec000411b2001ad10011a0c010b418d8fc00041352001ac10011a0b41c28fc0004124" + "41004100410010021a0b41e892c000412f41004100410010021a200041b0016a2201101c20" + "00413c6a22042001101d200041e8006a4200370300200041e0006a4200370300200041d800" + "6a42003703002000420037035002400240024002400240024020044114200041d0006a2202" + "4120100e22014120460440419793c000410f20024120410110021a20004188016a42003703" + "0020004180016a4200370300200041f8006a42003703002000420037037002402004411420" + "04411441a693c0004109200041f0006a220141201014220241004a0440200041086a200120" + "02101b41ae93c00041122000280208200028020c410110021a0c010b41c093c000413c2002" + "ac10011a0b200041a8016a22084200370300200041a0016a2203420037030020004198016a" + "2205420037030020004200370390012000413c6a2202411441e80720004190016a22074120" + "101522014120470d0141fc93c000410e20074120410110021a200041c8016a420037030020" + "0041c0016a4200370300200041b8016a4200370300200042003703b00120024114412a2000" + "41b0016a22044120101622014120470d02418a94c000410e20044120410110021a419894c0" + "00412441004100410010021a419195c000412541004100410010021a20004188016a420037" + "030020004180016a4200370300200041f8006a42003703002000420037037041b695c00041" + "17200041f0006a22024120101722014120470d0341cd95c000410b41b695c0004117410110" + "021a41d895c000411120024120410110021a2004101c200041d0006a22062004101d200842" + "00370300200342003703002005420037030020004200370390010240200422032003410020" + "036b41037122026a22054f0d0020020440200221010340200341003a0000200341016a2103" + "200141016b22010d000b0b200241016b4107490d000340200341003a0000200341076a4100" + "3a0000200341066a41003a0000200341056a41003a0000200341046a41003a000020034103" + "6a41003a0000200341026a41003a0000200341016a41003a0000200341086a22032005470d" + "000b0b200541800220026b2201417c716a220320054b044003402005410036020020054104" + "6a22052003490d000b0b024020032001410371220120036a22024f0d002001220504400340" + "200341003a0000200341016a2103200541016b22050d000b0b200141016b4107490d000340" + "200341003a0000200341076a41003a0000200341066a41003a0000200341056a41003a0000" + "200341046a41003a0000200341036a41003a0000200341026a41003a0000200341016a4100" + "3a0000200341086a22032002470d000b0b0240200641142007412020044180021018220141" + "004a044041e995c00041102001ad10011a20014181024f0d0641f995c00041092004200141" + "0110021a0c010b418296c000412e2001ac10011a0b41b096c000411241c296c00041074101" + "100222014100480d0541c996c000411d2001ad10011a41e696c0004111422a10014100480d" + "0641f796c000411c420010011a419397c000411a41004100410010021a41ff97c000412941" + "004100410010021a41a898c00041281019220145044041d098c000412741a898c000412841" + "0110021a41f798c000411e41004100410010021a41bf80c000412841004100410010021a41" + "010c080b419599c000411a2001ac10011a41c37a0c070b41f494c000411d2001ac10011a41" + "8b7c0c060b41d894c000411c2001ac10011a41897c0c050b41bc94c000411c2001ac10011a" + "41887c0c040b41dd97c00041222001ac10011a41a77b0c030b000b41c797c00041162001ac" + "10011a41a57b0c010b41ad97c000411a42a47b10011a41a47b0b200041b0036a24000b0bb9" + "190100418080c0000baf196572726f725f636f64653d3d3d3d20484f53542046554e435449" + "4f4e532054455354203d3d3d54657374696e6720323620686f73742066756e6374696f6e73" + "535543434553533a20416c6c20686f73742066756e6374696f6e2074657374732070617373" + "6564212d2d2d2043617465676f727920313a204c6564676572204865616465722046756e63" + "74696f6e73202d2d2d4c65646765722073657175656e6365206e756d6265723a506172656e" + "74206c65646765722074696d653a506172656e74206c656467657220686173683a53554343" + "4553533a204c6564676572206865616465722066756e6374696f6e734552524f523a206765" + "745f706172656e745f6c65646765725f686173682077726f6e67206c656e6774683a455252" + "4f523a206765745f706172656e745f6c65646765725f74696d65206661696c65643a455252" + "4f523a206765745f6c65646765725f73716e206661696c65643a2d2d2d2043617465676f72" + "7920323a205472616e73616374696f6e20446174612046756e6374696f6e73202d2d2d5472" + "616e73616374696f6e204163636f756e743a5472616e73616374696f6e20466565206c656e" + "6774683a5472616e73616374696f6e20466565202873657269616c697a6564205852502061" + "6d6f756e74293a5472616e73616374696f6e2053657175656e63653a4e6573746564206669" + "656c64206c656e6774683a4e6573746564206669656c643a494e464f3a206765745f74785f" + "6e65737465645f6669656c64206e6f74206170706c696361626c653a5369676e6572732061" + "72726179206c656e6774683a4d656d6f73206172726179206c656e6774683a4e6573746564" + "206172726179206c656e6774683a494e464f3a206765745f74785f6e65737465645f617272" + "61795f6c656e206e6f74206170706c696361626c653a535543434553533a205472616e7361" + "6374696f6e20646174612066756e6374696f6e734552524f523a206765745f74785f666965" + "6c642853657175656e6365292077726f6e67206c656e6774683a4552524f523a206765745f" + "74785f6669656c6428466565292077726f6e67206c656e6774682028657870656374656420" + "3820627974657320666f7220585250293a4552524f523a206765745f74785f6669656c6428" + "4163636f756e74292077726f6e67206c656e6774683a2d2d2d2043617465676f727920333a" + "2043757272656e74204c6564676572204f626a6563742046756e6374696f6e73202d2d2d43" + "757272656e74206f626a6563742062616c616e6365206c656e677468202858525020616d6f" + "756e74293a43757272656e74206f626a6563742062616c616e6365202873657269616c697a" + "65642058525020616d6f756e74293a43757272656e74206f626a6563742062616c616e6365" + "206c656e67746820286e6f6e2d58525020616d6f756e74293a43757272656e74206f626a65" + "63742062616c616e63653a494e464f3a206765745f63757272656e745f6c65646765725f6f" + "626a5f6669656c642842616c616e636529206661696c656420286d61792062652065787065" + "63746564293a43757272656e74206c6564676572206f626a656374206163636f756e743a49" + "4e464f3a206765745f63757272656e745f6c65646765725f6f626a5f6669656c6428416363" + "6f756e7429206661696c65643a43757272656e74206e6573746564206669656c64206c656e" + "6774683a43757272656e74206e6573746564206669656c643a494e464f3a206765745f6375" + "7272656e745f6c65646765725f6f626a5f6e65737465645f6669656c64206e6f7420617070" + "6c696361626c653a43757272656e74206f626a656374205369676e65727320617272617920" + "6c656e6774683a43757272656e74206e6573746564206172726179206c656e6774683a494e" + "464f3a206765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f617272" + "61795f6c656e206e6f74206170706c696361626c653a535543434553533a2043757272656e" + "74206c6564676572206f626a6563742066756e6374696f6e732d2d2d2043617465676f7279" + "20343a20416e79204c6564676572204f626a6563742046756e6374696f6e73202d2d2d5375" + "636365737366756c6c7920636163686564206f626a65637420696e20736c6f743a43616368" + "6564206f626a6563742062616c616e6365206c656e677468202858525020616d6f756e7429" + "3a436163686564206f626a6563742062616c616e6365202873657269616c697a6564205852" + "5020616d6f756e74293a436163686564206f626a6563742062616c616e6365206c656e6774" + "6820286e6f6e2d58525020616d6f756e74293a436163686564206f626a6563742062616c61" + "6e63653a494e464f3a206765745f6c65646765725f6f626a5f6669656c642842616c616e63" + "6529206661696c65643a436163686564206e6573746564206669656c64206c656e6774683a" + "436163686564206e6573746564206669656c643a494e464f3a206765745f6c65646765725f" + "6f626a5f6e65737465645f6669656c64206e6f74206170706c696361626c653a4361636865" + "64206f626a656374205369676e657273206172726179206c656e6774683a43616368656420" + "6e6573746564206172726179206c656e6774683a494e464f3a206765745f6c65646765725f" + "6f626a5f6e65737465645f61727261795f6c656e206e6f74206170706c696361626c653a53" + "5543434553533a20416e79206c6564676572206f626a6563742066756e6374696f6e73494e" + "464f3a2063616368655f6c65646765725f6f626a206661696c656420286578706563746564" + "20776974682074657374206669787475726573293a494e464f3a206765745f6c6564676572" + "5f6f626a5f6669656c64206661696c656420617320657870656374656420286e6f20636163" + "686564206f626a656374293a494e464f3a206765745f6c65646765725f6f626a5f6e657374" + "65645f6669656c64206661696c65642061732065787065637465643a494e464f3a20676574" + "5f6c65646765725f6f626a5f61727261795f6c656e206661696c6564206173206578706563" + "7465643a494e464f3a206765745f6c65646765725f6f626a5f6e65737465645f6172726179" + "5f6c656e206661696c65642061732065787065637465643a535543434553533a20416e7920" + "6c6564676572206f626a6563742066756e6374696f6e732028696e74657266616365207465" + "73746564294552524f523a206163636f756e745f6b65796c6574206661696c656420666f72" + "2063616368696e6720746573743a2d2d2d2043617465676f727920353a204b65796c657420" + "47656e65726174696f6e2046756e6374696f6e73202d2d2d4163636f756e74206b65796c65" + "743a546573745479706543726564656e7469616c206b65796c65743a494e464f3a20637265" + "64656e7469616c5f6b65796c6574206661696c656420286578706563746564202d20696e74" + "657266616365206973737565293a457363726f77206b65796c65743a4f7261636c65206b65" + "796c65743a535543434553533a204b65796c65742067656e65726174696f6e2066756e6374" + "696f6e734552524f523a206f7261636c655f6b65796c6574206661696c65643a4552524f52" + "3a20657363726f775f6b65796c6574206661696c65643a4552524f523a206163636f756e74" + "5f6b65796c6574206661696c65643a2d2d2d2043617465676f727920363a205574696c6974" + "792046756e6374696f6e73202d2d2d48656c6c6f2c205852504c205741534d20776f726c64" + "21496e70757420646174613a5348413531322068616c6620686173683a4e46542064617461" + "206c656e6774683a4e465420646174613a494e464f3a206765745f6e6674206661696c6564" + "20286578706563746564202d206e6f2073756368204e4654293a5465737420747261636520" + "6d6573736167657061796c6f616454726163652066756e6374696f6e206279746573207772" + "697474656e3a54657374206e756d62657220747261636554726163655f6e756d2066756e63" + "74696f6e20737563636565646564535543434553533a205574696c6974792066756e637469" + "6f6e734552524f523a2074726163655f6e756d2829206661696c65643a4552524f523a2074" + "726163652829206661696c65643a4552524f523a20636f6d707574655f7368613531325f68" + "616c66206661696c65643a2d2d2d2043617465676f727920373a2044617461205570646174" + "652046756e6374696f6e73202d2d2d55706461746564206c656467657220656e7472792064" + "6174612066726f6d205741534d20746573745375636365737366756c6c7920757064617465" + "64206c656467657220656e74727920776974683a535543434553533a204461746120757064" + "6174652066756e6374696f6e734552524f523a207570646174655f64617461206661696c65" + "643a004d0970726f64756365727302086c616e6775616765010452757374000c70726f6365" + "737365642d6279010572757374631d312e38352e3120283465623136313235302032303235" + "2d30332d31352900490f7461726765745f6665617475726573042b0f6d757461626c652d67" + "6c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d75" + "6c746976616c7565"; + +extern std::string const deepRecursionHex = + "0061736d01000000013f0b60017f0060037f7f7f017f60027f7f017f60027f" + "7f0060000060037f7f7f006000017f60037e7f7f017f60047f7f7f7f017f60" + "017f017f60047f7f7f7f00032f2e0302040400030501030302020600030302" + "0700080301050202020404090202000a0a0102020403030300000a03010405" + "017001101005030100110619037f01418080c0000b7f0041b49ac0000b7f00" + "41c09ac0000b073905066d656d6f7279020005726563757200000972656375" + "7273697665000c0a5f5f646174615f656e6403010b5f5f686561705f626173" + "6503020915010041010b0f010a0b1e10171819262c1d1f2223240a927c2ea7" + "0704017f017e027f017e23808080800041e0006b2202248080808000200220" + "003602040240200041004c0d002001200128020041016a3602002000417f6a" + "20011080808080000b2002410236020c2002418480c0800036020820024201" + "37021420024181808080003602242002200241206a3602102002200241046a" + "3602202002410636022c2002419490c08000360228024041002d00c096c080" + "004103460d001082808080000b0240024002400240024041002903a89ac080" + "0022034200520d00024041002802b09ac0800022000d001083808080004100" + "2802b09ac0800021000b20002000280200220141016a3602002001417f4c0d" + "012000450d02200020002802002201417f6a36020020002903082103200141" + "01470d0020001084808080000b0240024002402003410029039896c0800051" + "0d0041002d00a496c08000210141012100410041013a00a496c08000200220" + "013a00382001450d012002420037025420024281808080c00037024c200241" + "bc91c08000360248200241386a200241c8006a108580808000000b02404100" + "2802a096c080002200417f460d00200041016a21000c020b419c92c0800041" + "2641e092c08000108680808000000b4100200337039896c080000b41002000" + "3602a096c080002002419896c0800036023041042100200241043a00382002" + "200241306a360240200241386a41c085c08000200241086a10878080800021" + "0120022d003821040240024020010d00420021034117200441ff0171764101" + "710d01200228023c220028020021010240200041046a280200220428020022" + "05450d002001200511808080800080808080000b024020042802042204450d" + "00200120041088808080000b2000410c108880808000410421000c010b2004" + "41ff01714104460d032002290338220642807e8321032006a721000b200228" + "023022012001280208417f6a2204360208024020040d00200141003a000c20" + "0142003703000b200041ff01714104470d03200241e0006a2480808080000f" + "0b000b418087c0800041de0041f487c08000108680808000000b2002410036" + "02582002410136024c2002418491c0800036024820024204370250200241c8" + "006a418c91c08000108980808000000b200220032000ad42ff018384370330" + "2002410236024c200241f48fc0800036024820024202370254200241828080" + "8000ad422086200241306aad843703402002418380808000ad422086200241" + "286aad843703382002200241386a360250200241c8006a418490c080001089" + "80808000000b2701017f200028020022002000411f7522027320026bad2000" + "417f73411f7620011091808080000bf10101027f23808080800041206b2200" + "248080808000024002400240024041002d00c096c080000e0400000301000b" + "410041023a00c096c0800041002d009096c080001a418008109c8080800022" + "01450d01410041033a00c096c08000410020013602b096c080004100428080" + "80808080013703a896c080004100420037039896c08000410041003a00b896" + "c08000410041003602b496c08000410041003a00a496c08000410041003602" + "a096c080000b200041206a2480808080000f0b000b20004100360218200041" + "0136020c200041bc93c0800036020820004204370210200041086a418c92c0" + "8000108980808000000bf90103027f037e017f23808080800041206b220024" + "808080800041002d009096c080001a0240024002404120109c808080002201" + "450d0020014102360210200142818080801037030041002903d096c0800021" + "0203402002427f510d024100200242017c220341002903d096c08000220420" + "0420025122051b3703d096c08000200421022005450d000b410020033703a8" + "9ac080002001200337030841002802b09ac08000450d022000410036021820" + "00410136020c200041c484c0800036020820004204370210200041086a419c" + "85c080001089808080000b000b109b80808000000b410020013602b09ac080" + "00200041206a2480808080000b5b01027f024020002802104101470d002000" + "280214220141003a000020002802182202450d00200120021088808080000b" + "02402000417f460d00200020002802042201417f6a36020420014101470d00" + "200041201088808080000b0b3a01017f23808080800041106b220224808080" + "8000200241ac85c0800036020c20022000360208200241086a2002410c6a20" + "01109680808000000b6a01017f23808080800041306b220324808080800020" + "03200136020c2003200036020820034101360214200341d488c08000360210" + "2003420137021c2003418380808000ad422086200341086aad843703282003" + "200341286a360218200341106a2002108980808000000bbf05010a7f238080" + "80800041306b2203248080808000200341033a002c2003412036021c410021" + "04200341003602282003200136022420032000360220200341003602142003" + "410036020c02400240024002400240200228021022050d00200228020c2200" + "450d0120022802082101200041037421062000417f6a41ffffffff01714101" + "6a21042002280200210003400240200041046a2802002207450d0020032802" + "2020002802002007200328022428020c11818080800080808080000d040b20" + "012802002003410c6a200128020411828080800080808080000d0320014108" + "6a2101200041086a2100200641786a22060d000c020b0b2002280214220145" + "0d00200141057421082001417f6a41ffffff3f7141016a2104200228020821" + "09200228020021004100210603400240200041046a2802002201450d002003" + "28022020002802002001200328022428020c11818080800080808080000d03" + "0b2003200520066a220141106a28020036021c20032001411c6a2d00003a00" + "2c2003200141186a2802003602282001410c6a28020021074100210a410021" + "0b024002400240200141086a2802000e03010002010b2007410374210c4100" + "210b2009200c6a220c2802040d01200c28020021070b4101210b0b20032007" + "3602102003200b36020c200141046a28020021070240024002402001280200" + "0e03010002010b2007410374210b2009200b6a220b2802040d01200b280200" + "21070b4101210a0b200320073602182003200a3602142009200141146a2802" + "004103746a22012802002003410c6a20012802041182808080008080808000" + "0d02200041086a21002008200641206a2206470d000b0b200420022802044f" + "0d012003280220200228020020044103746a22012802002001280204200328" + "022428020c1181808080008080808000450d010b410121010c010b41002101" + "0b200341306a24808080800020010b6c01027f024002402000417c6a280200" + "2202417871220341044108200241037122021b20016a490d0002402002450d" + "002003200141276a4b0d020b2000108d808080000f0b418186c0800041b086" + "c08000108e80808000000b41c086c0800041f086c08000108e80808000000b" + "5601017f23808080800041206b2202248080808000200241106a200041106a" + "290200370300200241086a200041086a290200370300200241013b011c2002" + "2001360218200220002902003703002002109280808000000be50301017f23" + "808080800041c0006b22022480808080000240024002400240024002402000" + "2d00000e0400010203000b2002200028020436020441002d009096c080001a" + "4114109c808080002200450d04200041106a410028008093c0800036000020" + "0041086a41002900f892c08000370000200041002900f092c0800037000020" + "0241143602102002200036020c200241143602082002410336022c200241a0" + "8fc08000360228200242023702342002418180808000ad422086200241046a" + "ad843703202002418480808000ad422086200241086aad8437031820022002" + "41186a36023020012802142001280218200241286a10878080800021002002" + "2802082201450d03200228020c20011088808080000c030b20002d00012100" + "2002410136022c200241d488c0800036022820024201370234200241838080" + "8000ad422086200241186aad8437030820022000410274220041c493c08000" + "6a28020036021c2002200041e894c080006a2802003602182002200241086a" + "36023020012802142001280218200241286a10878080800021000c020b2001" + "20002802042200280200200028020410958080800021000c010b2000280204" + "220028020020012000280204280210118280808000808080800021000b2002" + "41c0006a24808080800020000f0b000b140020012000280200200028020410" + "95808080000b3f01027f23808080800041106b220024808080800020004100" + "36020c41a08d062000410c6a108080808000200028020c2101200041106a24" + "808080800020010bbe0601057f200041786a22012000417c6a280200220241" + "787122006a21030240024020024101710d002002410271450d012001280200" + "220220006a21000240200120026b220141002802809ac08000470d00200328" + "02044103714103470d01410020003602f899c0800020032003280204417e71" + "36020420012000410172360204200320003602000f0b2001200210a8808080" + "000b024002400240024002400240200328020422024102710d002003410028" + "02849ac08000460d02200341002802809ac08000460d032003200241787122" + "0210a8808080002001200220006a2200410172360204200120006a20003602" + "00200141002802809ac08000470d01410020003602f899c080000f0b200320" + "02417e7136020420012000410172360204200120006a20003602000b200041" + "8002490d022001200010a78080800041002101410041002802989ac0800041" + "7f6a22003602989ac0800020000d04024041002802e097c080002200450d00" + "410021010340200141016a2101200028020822000d000b0b4100200141ff1f" + "200141ff1f4b1b3602989ac080000f0b410020013602849ac0800041004100" + "2802fc99c0800020006a22003602fc99c08000200120004101723602040240" + "200141002802809ac08000470d00410041003602f899c08000410041003602" + "809ac080000b200041002802909ac0800022044d0d0341002802849ac08000" + "2200450d034100210241002802fc99c0800022054129490d0241d897c08000" + "2101034002402001280200220320004b0d002000200320012802046a490d04" + "0b200128020821010c000b0b410020013602809ac08000410041002802f899" + "c0800020006a22003602f899c0800020012000410172360204200120006a20" + "003602000f0b200041f8017141e897c080006a21030240024041002802f099" + "c08000220241012000410376742200710d00410020022000723602f099c080" + "00200321000c010b200328020821000b200320013602082000200136020c20" + "01200336020c200120003602080f0b024041002802e097c080002201450d00" + "410021020340200241016a2102200128020822010d000b0b4100200241ff1f" + "200241ff1f4b1b3602989ac08000200520044d0d004100417f3602909ac080" + "000b0b4d01017f23808080800041206b220224808080800020024100360210" + "20024101360204200242043702082002412e36021c20022000360218200220" + "0241186a36020020022001108980808000000b7d02017f017e238080808000" + "41306b22022480808080002002200036020020022001360204200241023602" + "0c2002418484c08000360208200242023702142002418580808000ad422086" + "2203200241046aad84370328200220032002ad843703202002200241206a36" + "0210200241086a41b083c08000108980808000000b11002000350200410120" + "011091808080000bdf0703027f017e097f23808080800041306b2203248080" + "808000412721040240024020004290ce005a0d00200021050c010b41272104" + "0340200341096a20046a2206417c6a20004290ce0080220542f0b1037e2000" + "7ca7220741ffff037141e4006e220841017441c481c080006a2f00003b0000" + "2006417e6a2008419c7f6c20076a41ffff037141017441c481c080006a2f00" + "003b00002004417c6a2104200042ffc1d72f5621062005210020060d000b0b" + "02400240200542e300560d002005a721060c010b200341096a2004417e6a22" + "046a2005a7220741ffff037141e4006e2206419c7f6c20076a41ffff037141" + "017441c481c080006a2f00003b00000b024002402006410a490d0020034109" + "6a2004417e6a22046a200641017441c481c080006a2f00003b00000c010b20" + "0341096a2004417f6a22046a20064130723a00000b412720046b2109024002" + "4020010d00412820046b2107200228021c2106412d21010c010b412b418080" + "c400200228021c220641017122071b2101200720096a21070b200341096a20" + "046a210a2006410471410276210b0240024020022802000d00024020022802" + "142204200228021822062001200b109380808000450d00410121040c020b20" + "04200a2009200628020c118180808000808080800021040c010b0240024002" + "402002280204220c20074b0d0020022802142204200228021822062001200b" + "109380808000450d01410121040c030b2006410871450d012002280210210d" + "2002413036021020022d0020210e41012104200241013a0020200228021422" + "06200228021822082001200b1093808080000d02200c20076b41016a210402" + "4003402004417f6a2204450d01200641302008280210118280808000808080" + "8000450d000b410121040c030b02402006200a2009200828020c1181808080" + "008080808000450d00410121040c030b2002200e3a00202002200d36021041" + "0021040c020b2004200a2009200628020c118180808000808080800021040c" + "010b200c20076b210c02400240024020022d002022040e0402000100020b20" + "0c21044100210c0c010b200c4101762104200c41016a410176210c0b200441" + "016a2104200228021021082002280218210620022802142107024003402004" + "417f6a2204450d012007200820062802101182808080008080808000450d00" + "0b410121040c010b41012104200720062001200b1093808080000d00200720" + "0a2009200628020c11818080800080808080000d004100210403400240200c" + "2004470d00200c200c4921040c020b200441016a2104200720082006280210" + "1182808080008080808000450d000b2004417f6a200c4921040b200341306a" + "24808080800020040b5d01027f23808080800041206b220124808080800020" + "002802182102200141106a200041106a290200370300200141086a20004108" + "6a2902003703002001200036021c2001200236021820012000290200370300" + "200110a980808000000b490002402002418080c400460d0020002002200128" + "02101182808080008080808000450d0041010f0b024020030d0041000f0b20" + "0020034100200128020c11818080800080808080000b7d02017f017e238080" + "80800041306b22022480808080002002200036020020022001360204200241" + "0236020c200241a484c08000360208200242023702142002418580808000ad" + "4220862203200241046aad84370328200220032002ad843703202002200241" + "206a360210200241086a41c083c08000108980808000000bc20b010b7f2000" + "28020821030240024002400240200028020022040d002003410171450d010b" + "02402003410171450d00200120026a210502400240200028020c22060d0041" + "002107200121080c010b410021074100210920012108034020082203200546" + "0d020240024020032c00002208417f4c0d00200341016a21080c010b024020" + "0841604f0d00200341026a21080c010b0240200841704f0d00200341036a21" + "080c010b200341046a21080b200820036b20076a21072006200941016a2209" + "470d000b0b20082005460d00024020082c00002203417f4a0d002003416049" + "1a0b024002402007450d000240200720024f0d00200120076a2c000041bf7f" + "4a0d01410021030c020b20072002460d00410021030c010b200121030b2007" + "200220031b21022003200120031b21010b024020040d002000280214200120" + "02200028021828020c11818080800080808080000f0b2000280204210a0240" + "20024110490d0020022001200141036a417c7122076b22096a220b41037121" + "044100210641002103024020012007460d004100210302402009417c4b0d00" + "410021034100210503402003200120056a22082c000041bf7f4a6a20084101" + "6a2c000041bf7f4a6a200841026a2c000041bf7f4a6a200841036a2c000041" + "bf7f4a6a2103200541046a22050d000b0b200121080340200320082c000041" + "bf7f4a6a2103200841016a2108200941016a22090d000b0b02402004450d00" + "2007200b417c716a22082c000041bf7f4a210620044101460d00200620082c" + "000141bf7f4a6a210620044102460d00200620082c000241bf7f4a6a21060b" + "200b4102762105200620036a21060340200721042005450d04200541c00120" + "0541c001491b220b410371210c200b410274210d4100210802402005410449" + "0d002004200d41f007716a210941002108200421030340200328020c220741" + "7f7341077620074106767241818284087120032802082207417f7341077620" + "074106767241818284087120032802042207417f7341077620074106767241" + "818284087120032802002207417f7341077620074106767241818284087120" + "086a6a6a6a2108200341106a22032009470d000b0b2005200b6b2105200420" + "0d6a2107200841087641ff81fc0771200841ff81fc07716a418180046c4110" + "7620066a2106200c450d000b2004200b41fc01714102746a22082802002203" + "417f734107762003410676724181828408712103200c4101460d0220082802" + "042207417f7341077620074106767241818284087120036a2103200c410246" + "0d0220082802082208417f7341077620084106767241818284087120036a21" + "030c020b024020020d00410021060c030b2002410371210802400240200241" + "044f0d0041002106410021090c010b41002106200121032002410c71220921" + "070340200620032c000041bf7f4a6a200341016a2c000041bf7f4a6a200341" + "026a2c000041bf7f4a6a200341036a2c000041bf7f4a6a2106200341046a21" + "032007417c6a22070d000b0b2008450d02200120096a21030340200620032c" + "000041bf7f4a6a2106200341016a21032008417f6a22080d000c030b0b2000" + "28021420012002200028021828020c11818080800080808080000f0b200341" + "087641ff811c71200341ff81fc07716a418180046c41107620066a21060b02" + "400240200a20064d0d00200a20066b21054100210302400240024020002d00" + "200e0402000102020b20052103410021050c010b2005410176210320054101" + "6a41017621050b200341016a21032000280210210920002802182108200028" + "0214210703402003417f6a2203450d02200720092008280210118280808000" + "8080808000450d000b41010f0b200028021420012002200028021828020c11" + "818080800080808080000f0b0240200720012002200828020c118180808000" + "8080808000450d0041010f0b410021030340024020052003470d0020052005" + "490f0b200341016a2103200720092008280210118280808000808080800045" + "0d000b2003417f6a2005490b820302017f017e23808080800041f0006b2203" + "248080808000200341b085c0800036020c20032000360208200341b085c080" + "00360214200320013602102003410236021c200341bc80c080003602180240" + "20022802000d002003410336025c200341f080c08000360258200342033702" + "642003418680808000ad4220862204200341106aad84370348200320042003" + "41086aad843703402003418380808000ad422086200341186aad8437033820" + "03200341386a360260200341d8006a41e891c08000108980808000000b2003" + "41206a41106a200241106a290200370300200341206a41086a200241086a29" + "0200370300200320022902003703202003410436025c200341a481c0800036" + "0258200342043702642003418680808000ad4220862204200341106aad8437" + "035020032004200341086aad843703482003418780808000ad422086200341" + "206aad843703402003418380808000ad422086200341186aad843703382003" + "200341386a360260200341d8006a41e891c08000108980808000000b1c0020" + "002802002001200028020428020c11828080800080808080000b1400200128" + "0214200128021820001087808080000b22002001280214419480c08000410e" + "200128021828020c11818080800080808080000b6001017f23808080800041" + "306b22002480808080002000410136020c200041b480c08000360208200042" + "013702142000418880808000ad4220862000412f6aad843703202000200041" + "206a360210200041086a41cc8fc08000108980808000000b4701017f238080" + "80800041206b2200248080808000200041003602182000410136020c200041" + "bc88c0800036020820004204370210200041086a41c488c080001089808080" + "00000bcb2502087f017e02400240024002400240024002400240200041f501" + "490d0041002101200041cdff7b4f0d052000410b6a22014178712102410028" + "02f499c080002203450d04411f21040240200041f4ffff074b0d0020024106" + "20014108766722006b7641017120004101746b413e6a21040b410020026b21" + "010240200441027441d896c080006a28020022050d0041002100410021060c" + "020b4100210020024100411920044101766b2004411f461b74210741002106" + "034002402005220528020441787122082002490d00200820026b220820014f" + "0d00200821012005210620080d004100210120052106200521000c040b2005" + "28021422082000200820052007411d764104716a41106a2802002205471b20" + "0020081b2100200741017421072005450d020c000b0b024041002802f099c0" + "8000220541102000410b6a41f803712000410b491b22024103762201762200" + "410371450d00024002402000417f7341017120016a2207410374220041e897" + "c080006a2201200041f097c080006a28020022022802082206460d00200620" + "0136020c200120063602080c010b41002005417e200777713602f099c08000" + "0b20022000410372360204200220006a220020002802044101723602042002" + "41086a0f0b200241002802f899c080004d0d0302400240024020000d004100" + "2802f499c080002200450d0620006841027441d896c080006a280200220628" + "020441787120026b21012006210503400240200628021022000d0020062802" + "1422000d0020052802182104024002400240200528020c22002005470d0020" + "0541144110200528021422001b6a28020022060d01410021000c020b200528" + "02082206200036020c200020063602080c010b200541146a200541106a2000" + "1b21070340200721082006220041146a200041106a200028021422061b2107" + "20004114411020061b6a28020022060d000b200841003602000b2004450d04" + "0240200528021c41027441d896c080006a22062802002005460d0020044110" + "411420042802102005461b6a20003602002000450d050c040b200620003602" + "0020000d03410041002802f499c08000417e200528021c77713602f499c080" + "000c040b200028020441787120026b22062001200620014922061b21012000" + "200520061b2105200021060c000b0b02400240200020017441022001742200" + "410020006b7271682208410374220141e897c080006a2206200141f097c080" + "006a28020022002802082207460d002007200636020c200620073602080c01" + "0b41002005417e200877713602f099c080000b200020024103723602042000" + "20026a2207200120026b2206410172360204200020016a2006360200024041" + "002802f899c080002205450d00200541787141e897c080006a210141002802" + "809ac0800021020240024041002802f099c080002208410120054103767422" + "05710d00410020082005723602f099c08000200121050c010b200128020821" + "050b200120023602082005200236020c2002200136020c200220053602080b" + "410020073602809ac08000410020063602f899c08000200041086a0f0b2000" + "2004360218024020052802102206450d002000200636021020062000360218" + "0b20052802142206450d0020002006360214200620003602180b0240024002" + "4020014110490d0020052002410372360204200520026a2202200141017236" + "0204200220016a200136020041002802f899c080002207450d012007417871" + "41e897c080006a210641002802809ac0800021000240024041002802f099c0" + "8000220841012007410376742207710d00410020082007723602f099c08000" + "200621070c010b200628020821070b200620003602082007200036020c2000" + "200636020c200020073602080c010b2005200120026a220041037236020420" + "0520006a220020002802044101723602040c010b410020023602809ac08000" + "410020013602f899c080000b200541086a0f0b024020002006720d00410021" + "0641022004742200410020006b722003712200450d0320006841027441d896" + "c080006a28020021000b2000450d010b034020002006200028020441787122" + "0520026b220820014922041b2103200520024921072008200120041b210802" + "40200028021022050d00200028021421050b2006200320071b210620012008" + "20071b21012005210020050d000b0b2006450d00024041002802f899c08000" + "22002002490d002001200020026b4f0d010b20062802182104024002400240" + "200628020c22002006470d00200641144110200628021422001b6a28020022" + "050d01410021000c020b20062802082205200036020c200020053602080c01" + "0b200641146a200641106a20001b21070340200721082005220041146a2000" + "41106a200028021422051b210720004114411020051b6a28020022050d000b" + "200841003602000b2004450d030240200628021c41027441d896c080006a22" + "052802002006460d0020044110411420042802102006461b6a200036020020" + "00450d040c030b2005200036020020000d02410041002802f499c08000417e" + "200628021c77713602f499c080000c030b0240024002400240024002404100" + "2802f899c08000220020024f0d00024041002802fc99c08000220020024b0d" + "0041002101200241af80046a220641107640002200417f4622070d07200041" + "10742205450d07410041002802889ac08000410020064180807c7120071b22" + "086a22003602889ac080004100410028028c9ac0800022012000200120004b" + "1b36028c9ac0800002400240024041002802849ac080002201450d0041d897" + "c080002100034020002802002206200028020422076a2005460d0220002802" + "0822000d000c030b0b0240024041002802949ac080002200450d0020002005" + "4d0d010b410020053602949ac080000b410041ff1f3602989ac08000410020" + "083602dc97c08000410020053602d897c08000410041e897c080003602f497" + "c08000410041f097c080003602fc97c08000410041e897c080003602f097c0" + "8000410041f897c0800036028498c08000410041f097c080003602f897c080" + "004100418098c0800036028c98c08000410041f897c0800036028098c08000" + "4100418898c0800036029498c080004100418098c0800036028898c0800041" + "00419098c0800036029c98c080004100418898c0800036029098c080004100" + "419898c080003602a498c080004100419098c0800036029898c08000410041" + "a098c080003602ac98c080004100419898c080003602a098c0800041004100" + "3602e497c08000410041a898c080003602b498c08000410041a098c0800036" + "02a898c08000410041a898c080003602b098c08000410041b098c080003602" + "bc98c08000410041b098c080003602b898c08000410041b898c080003602c4" + "98c08000410041b898c080003602c098c08000410041c098c080003602cc98" + "c08000410041c098c080003602c898c08000410041c898c080003602d498c0" + "8000410041c898c080003602d098c08000410041d098c080003602dc98c080" + "00410041d098c080003602d898c08000410041d898c080003602e498c08000" + "410041d898c080003602e098c08000410041e098c080003602ec98c0800041" + "0041e098c080003602e898c08000410041e898c080003602f498c080004100" + "41f098c080003602fc98c08000410041e898c080003602f098c08000410041" + "f898c0800036028499c08000410041f098c080003602f898c0800041004180" + "99c0800036028c99c08000410041f898c0800036028099c080004100418899" + "c0800036029499c080004100418099c0800036028899c080004100419099c0" + "800036029c99c080004100418899c0800036029099c080004100419899c080" + "003602a499c080004100419099c0800036029899c08000410041a099c08000" + "3602ac99c080004100419899c080003602a099c08000410041a899c0800036" + "02b499c08000410041a099c080003602a899c08000410041b099c080003602" + "bc99c08000410041a899c080003602b099c08000410041b899c080003602c4" + "99c08000410041b099c080003602b899c08000410041c099c080003602cc99" + "c08000410041b899c080003602c099c08000410041c899c080003602d499c0" + "8000410041c099c080003602c899c08000410041d099c080003602dc99c080" + "00410041c899c080003602d099c08000410041d899c080003602e499c08000" + "410041d099c080003602d899c08000410041e099c080003602ec99c0800041" + "0041d899c080003602e099c08000410020053602849ac08000410041e099c0" + "80003602e899c080004100200841586a22003602fc99c08000200520004101" + "72360204200520006a4128360204410041808080013602909ac080000c080b" + "200120054f0d00200620014b0d00200028020c450d030b410041002802949a" + "c080002200200520002005491b3602949ac08000200520086a210641d897c0" + "800021000240024002400340200028020022072006460d0120002802082200" + "0d000c020b0b200028020c450d010b41d897c0800021000240034002402000" + "280200220620014b0d002001200620002802046a2206490d020b2000280208" + "21000c000b0b410020053602849ac080004100200841586a22003602fc99c0" + "800020052000410172360204200520006a4128360204410041808080013602" + "909ac080002001200641606a41787141786a22002000200141106a491b2207" + "411b36020441002902d897c080002109200741106a41002902e097c0800037" + "020020072009370208410020083602dc97c08000410020053602d897c08000" + "4100200741086a3602e097c08000410041003602e497c080002007411c6a21" + "00034020004107360200200041046a22002006490d000b20072001460d0720" + "072007280204417e713602042001200720016b220041017236020420072000" + "36020002402000418002490d002001200010a7808080000c080b200041f801" + "7141e897c080006a21060240024041002802f099c080002205410120004103" + "76742200710d00410020052000723602f099c08000200621000c010b200628" + "020821000b200620013602082000200136020c2001200636020c2001200036" + "02080c070b200020053602002000200028020420086a360204200520024103" + "723602042007410f6a41787141786a2201200520026a22006b210220014100" + "2802849ac08000460d03200141002802809ac08000460d0402402001280204" + "22064103714101470d0020012006417871220610a880808000200620026a21" + "02200120066a220128020421060b20012006417e7136020420002002410172" + "360204200020026a200236020002402002418002490d002000200210a78080" + "80000c060b200241f8017141e897c080006a21010240024041002802f099c0" + "8000220641012002410376742202710d00410020062002723602f099c08000" + "200121020c010b200128020821020b200120003602082002200036020c2000" + "200136020c200020023602080c050b4100200020026b22013602fc99c08000" + "410041002802849ac08000220020026a22063602849ac08000200620014101" + "7236020420002002410372360204200041086a21010c060b41002802809ac0" + "8000210102400240200020026b2206410f4b0d00410041003602809ac08000" + "410041003602f899c0800020012000410372360204200120006a2200200028" + "02044101723602040c010b410020063602f899c080004100200120026a2205" + "3602809ac0800020052006410172360204200120006a200636020020012002" + "4103723602040b200141086a0f0b2000200720086a36020441004100280284" + "9ac080002200410f6a417871220141786a22063602849ac080004100200020" + "016b41002802fc99c0800020086a22016a41086a22053602fc99c080002006" + "2005410172360204200020016a4128360204410041808080013602909ac080" + "000c030b410020003602849ac08000410041002802fc99c0800020026a2202" + "3602fc99c08000200020024101723602040c010b410020003602809ac08000" + "410041002802f899c0800020026a22023602f899c080002000200241017236" + "0204200020026a20023602000b200541086a0f0b4100210141002802fc99c0" + "8000220020024d0d004100200020026b22013602fc99c08000410041002802" + "849ac08000220020026a22063602849ac08000200620014101723602042000" + "2002410372360204200041086a0f0b20010f0b200020043602180240200628" + "02102205450d0020002005360210200520003602180b20062802142205450d" + "0020002005360214200520003602180b0240024020014110490d0020062002" + "410372360204200620026a22002001410172360204200020016a2001360200" + "02402001418002490d002000200110a7808080000c020b200141f8017141e8" + "97c080006a21020240024041002802f099c080002205410120014103767422" + "01710d00410020052001723602f099c08000200221010c010b200228020821" + "010b200220003602082001200036020c2000200236020c200020013602080c" + "010b2006200120026a2200410372360204200620006a220020002802044101" + "723602040b200641086a0b3000024020002802002d00000d002001418c83c0" + "800041051095808080000f0b2001419183c0800041041095808080000b1400" + "2001200028020420002802081095808080000b7001037f2000280204210102" + "40024020002d0000220041044b0d0020004103470d010b2001280200210002" + "40200141046a28020022022802002203450d00200020031180808080008080" + "8080000b024020022802042202450d00200020021088808080000b2001410c" + "1088808080000b0bab08010a7f23808080800041206b220424808080800002" + "40024002400240024020012802100d002001417f3602102003410020032002" + "41036a417c7120026b22056b41077120032005491b22066b21072003200649" + "0d0102402006450d0002400240200220036a2208417f6a22092d0000410a47" + "0d002006417f6a21060c010b200220076a220a2009460d0102402008417e6a" + "22092d0000410a470d002006417e6a21060c010b200a2009460d0102402008" + "417d6a22092d0000410a470d002006417d6a21060c010b200a2009460d0102" + "402008417c6a22092d0000410a470d002006417c6a21060c010b200a200946" + "0d0102402008417b6a22092d0000410a470d002006417b6a21060c010b200a" + "2009460d0102402008417a6a22092d0000410a470d002006417a6a21060c01" + "0b200a2009460d010240200841796a22092d0000410a470d00200641796a21" + "060c010b200a2009460d01200641787221060b200620076a41016a21060c04" + "0b20052003200320054b1b210b410020066b21082002417c6a210c2006417f" + "7320026a210a02400340200a21052008210620072209200b4d0d0120064178" + "6a2108200541786a210a41808284082002200941786a22076a280200220d41" + "8a94a8d000736b200d724180828408200c20096a280200220d418a94a8d000" + "736b200d727141808182847871418081828478460d000b0b200920034b0d02" + "02400340200320066a450d012006417f6a2106200520036a21092005417f6a" + "210520092d0000410a470d000b200320066a41016a21060c040b0240024020" + "01411c6a28020022060d00410021060c010b2006200141186a2802006a417f" + "6a2d0000410a470d0041002106200141003a00202001411c6a41003602000b" + "0240200128021420066b20034b0d002000200141146a2002200310a1808080" + "000c050b200128021820066a2002200310ad808080001a200041043a000020" + "01411c6a200620036a3602000c040b109a80808000000b20072003108f8080" + "8000000b20092003109480808000000b0240200320064f0d00200441003602" + "182004410136020c2004418c89c0800036020820044204370210200441086a" + "419489c08000108980808000000b02402001411c6a2802002205450d000240" + "0240200128021420056b20064d0d00200141186a28020020056a2002200610" + "ad808080001a2001411c6a200520066a22053602000c010b200441086a2001" + "41146a2002200610a180808000024020042d00084104460d00200020042903" + "083702000c030b2001411c6a28020021050b2005450d00200141003a002020" + "01411c6a41003602000b200220066a210502402001280214200320066b2206" + "4b0d002000200141146a2005200610a1808080000c010b200141186a280200" + "2005200610ad808080001a200041043a00002001411c6a20063602000b2001" + "200128021041016a360210200441206a2480808080000b7101027f20012802" + "002104024020012802082205450d00200420056b20034f0d00410021052001" + "4100360208200141003a000c0b0240200420034d0d00200128020420056a20" + "02200310ad808080001a200041043a00002001200520036a3602080f0b2000" + "4204370200200141003a000c0bc90103027f017e027f23808080800041106b" + "2203248080808000200341086a20002802082802002001200210a080808000" + "024020032d000822024104460d002000280204210420032903082105024002" + "4020002d0000220141044b0d0020014103470d010b20042802002101024020" + "0441046a28020022062802002207450d002001200711808080800080808080" + "000b024020062802042206450d00200120061088808080000b2004410c1088" + "808080000b200020053702000b200341106a24808080800020024104470b9c" + "0303027f017e037f23808080800041106b2202248080808000200241003602" + "0402400240024002402001418001490d002001418010490d01200141808004" + "4f0d0220022001413f71418001723a000620022001410c7641e001723a0004" + "20022001410676413f71418001723a0005410321010c030b200220013a0004" + "410121010c020b20022001413f71418001723a00052002200141067641c001" + "723a0004410221010c010b20022001413f71418001723a0007200220014112" + "7641f001723a000420022001410676413f71418001723a000620022001410c" + "76413f71418001723a0005410421010b200241086a20002802082802002002" + "41046a200110a080808000024020022d000822014104460d00200028020421" + "03200229030821040240024020002d0000220541044b0d0020054103470d01" + "0b200328020021050240200341046a28020022062802002207450d00200520" + "0711808080800080808080000b024020062802042206450d00200520061088" + "808080000b2003410c1088808080000b200020043702000b200241106a2480" + "8080800020014104470b1200200041c085c0800020011087808080000b0300" + "000b0900200041003602000bc30201047f411f21020240200141ffffff074b" + "0d002001410620014108766722026b7641017120024101746b413e6a21020b" + "200042003702102000200236021c200241027441d896c080006a2103024041" + "002802f499c0800041012002742204710d0020032000360200200020033602" + "182000200036020c20002000360208410041002802f499c080002004723602" + "f499c080000f0b024002400240200328020022042802044178712001470d00" + "200421020c010b20014100411920024101766b2002411f461b742103034020" + "042003411d764104716a41106a22052802002202450d022003410174210320" + "02210420022802044178712001470d000b0b20022802082203200036020c20" + "022000360208200041003602182000200236020c200020033602080f0b2005" + "2000360200200020043602182000200036020c200020003602080b82030104" + "7f200028020c21020240024002402001418002490d00200028021821030240" + "0240024020022000470d00200041144110200028021422021b6a2802002201" + "0d01410021020c020b20002802082201200236020c200220013602080c010b" + "200041146a200041106a20021b21040340200421052001220241146a200241" + "106a200228021422011b210420024114411020011b6a28020022010d000b20" + "0541003602000b2003450d020240200028021c41027441d896c080006a2201" + "2802002000460d0020034110411420032802102000461b6a20023602002002" + "450d030c020b2001200236020020020d01410041002802f499c08000417e20" + "0028021c77713602f499c080000c020b0240200220002802082204460d0020" + "04200236020c200220043602080f0b410041002802f099c08000417e200141" + "037677713602f099c080000f0b20022003360218024020002802102201450d" + "0020022001360210200120023602180b20002802142201450d002002200136" + "0214200120023602180f0b0b0b00200010aa80808000000bb50101037f2380" + "8080800041106b2201248080808000200028020c2102024002400240024020" + "002802040e020001020b20020d0141012102410021030c020b20020d002000" + "28020022022802042103200228020021020c010b2001418080808078360200" + "2001200036020c2001418980808000200028021c22002d001c20002d001d10" + "ab80808000000b20012003360204200120023602002001418a808080002000" + "28021c22002d001c20002d001d10ab80808000000b990101027f2380808080" + "0041106b2204248080808000410041002802cc96c08000220541016a3602cc" + "96c08000024020054100480d000240024041002d00a09ac080000d00410041" + "0028029c9ac0800041016a36029c9ac0800041002802c896c08000417f4a0d" + "010c020b200441086a200020011183808080008080808000000b410041003a" + "00a09ac080002002450d0010a580808000000b000b0c002000200129020037" + "03000bc10201087f02400240200241104f0d00200021030c010b2000410020" + "006b41037122046a210502402004450d002000210320012106034020032006" + "2d00003a0000200641016a2106200341016a22032005490d000b0b20052002" + "20046b2207417c7122086a210302400240200120046a2209410371450d0020" + "084101480d012009410374220641187121022009417c71220a41046a210141" + "0020066b4118712104200a2802002106034020052006200276200128020022" + "0620047472360200200141046a2101200541046a22052003490d000c020b0b" + "20084101480d0020092101034020052001280200360200200141046a210120" + "0541046a22052003490d000b0b20074103712102200920086a21010b024020" + "02450d00200320026a21050340200320012d00003a0000200141016a210120" + "0341016a22032005490d000b0b20000b0b96160100418080c0000b8c160a00" + "000001000000000000000000100001000000426f72726f774d75744572726f" + "72616c726561647920626f72726f7765643a2022001000120000003d3d6173" + "73657274696f6e20606c6566742020726967687460206661696c65640a2020" + "6c6566743a200a2072696768743a2000003e001000100000004e0010001700" + "0000650010000900000020726967687460206661696c65643a200a20206c65" + "66743a200000003e0010001000000088001000100000009800100009000000" + "65001000090000003030303130323033303430353036303730383039313031" + "31313231333134313531363137313831393230323132323233323432353236" + "32373238323933303331333233333334333533363337333833393430343134" + "32343334343435343634373438343935303531353235333534353535363537" + "35383539363036313632363336343635363636373638363937303731373237" + "33373437353736373737383739383038313832383338343835383638373838" + "3839393039313932393339343935393639373938393966616c736574727565" + "636f72652f7372632f736c6963652f6d656d6368722e727300000095011000" + "18000000830000001e00000095011000180000009f0000000900000072616e" + "676520737461727420696e64657820206f7574206f662072616e676520666f" + "7220736c696365206f66206c656e67746820d001100012000000e201100022" + "00000072616e676520656e6420696e646578201402100010000000e2011000" + "220000007265656e7472616e7420696e69740000340210000e0000002f7275" + "7374632f633266373463336639323861656235303366313562346539656635" + "373738653737663330353862382f6c6962726172792f636f72652f7372632f" + "63656c6c2f6f6e63652e72730000004c0210004d0000002301000042000000" + "000000000000000004000000040000000b0000000c0000000c000000040000" + "000d0000000e0000000f0000002f727573742f646570732f646c6d616c6c6f" + "632d302e322e362f7372632f646c6d616c6c6f632e7273617373657274696f" + "6e206661696c65643a207073697a65203e3d2073697a65202b206d696e5f6f" + "7665726865616400d802100029000000a80400000900000061737365727469" + "6f6e206661696c65643a207073697a65203c3d2073697a65202b206d61785f" + "6f766572686561640000d802100029000000ae0400000d000000757365206f" + "66207374643a3a7468726561643a3a63757272656e742829206973206e6f74" + "20706f737369626c6520616674657220746865207468726561642773206c6f" + "63616c206461746120686173206265656e2064657374726f7965647374642f" + "7372632f7468726561642f6d6f642e727300de03100015000000f102000013" + "0000006661696c656420746f2067656e657261746520756e69717565207468" + "726561642049443a2062697473706163652065786861757374656400040410" + "0037000000de03100015000000c40400000d00000001000000000000007374" + "642f7372632f696f2f62756666657265642f6c696e65777269746572736869" + "6d2e72736d6964203e206c656e000081041000090000005c04100025000000" + "0f01000029000000656e74697479206e6f7420666f756e647065726d697373" + "696f6e2064656e696564636f6e6e656374696f6e2072656675736564636f6e" + "6e656374696f6e207265736574686f737420756e726561636861626c656e65" + "74776f726b20756e726561636861626c65636f6e6e656374696f6e2061626f" + "727465646e6f7420636f6e6e65637465646164647265737320696e20757365" + "61646472657373206e6f7420617661696c61626c656e6574776f726b20646f" + "776e62726f6b656e2070697065656e7469747920616c726561647920657869" + "7374736f7065726174696f6e20776f756c6420626c6f636b6e6f7420612064" + "69726563746f727969732061206469726563746f72796469726563746f7279" + "206e6f7420656d707479726561642d6f6e6c792066696c6573797374656d20" + "6f722073746f72616765206d656469756d66696c6573797374656d206c6f6f" + "70206f7220696e646972656374696f6e206c696d69742028652e672e207379" + "6d6c696e6b206c6f6f70297374616c65206e6574776f726b2066696c652068" + "616e646c65696e76616c696420696e70757420706172616d65746572696e76" + "616c6964206461746174696d6564206f75747772697465207a65726f6e6f20" + "73746f726167652073706163657365656b206f6e20756e7365656b61626c65" + "2066696c6566696c6573797374656d2071756f746120657863656564656466" + "696c6520746f6f206c617267657265736f7572636520627573796578656375" + "7461626c652066696c652062757379646561646c6f636b63726f73732d6465" + "76696365206c696e6b206f722072656e616d65746f6f206d616e79206c696e" + "6b73696e76616c69642066696c656e616d65617267756d656e74206c697374" + "20746f6f206c6f6e676f7065726174696f6e20696e74657272757074656475" + "6e737570706f72746564756e657870656374656420656e64206f662066696c" + "656f7574206f66206d656d6f72796f74686572206572726f72756e63617465" + "676f72697a6564206572726f7220286f73206572726f722029000000010000" + "0000000000910710000b0000009c071000010000007374642f7372632f696f" + "2f737464696f2e727300b8071000130000002c030000140000006661696c65" + "64207072696e74696e6720746f203a20000000dc07100013000000ef071000" + "02000000b8071000130000005d040000090000007374646f75747374642f73" + "72632f696f2f6d6f642e72736120666f726d617474696e6720747261697420" + "696d706c656d656e746174696f6e2072657475726e656420616e206572726f" + "72207768656e2074686520756e6465726c79696e672073747265616d206469" + "64206e6f740000002b081000560000001a0810001100000028070000150000" + "0063616e6e6f74207265637572736976656c792061637175697265206d7574" + "65789c081000200000007374642f7372632f7379732f73796e632f6d757465" + "782f6e6f5f746872656164732e7273c4081000240000001400000009000000" + "7374642f7372632f73796e632f6f6e63652e7273f808100014000000d90000" + "00140000006c6f636b20636f756e74206f766572666c6f7720696e20726565" + "6e7472616e74206d757465787374642f7372632f73796e632f7265656e7472" + "616e745f6c6f636b2e7273420910001e000000220100002d0000006f706572" + "6174696f6e207375636365737366756c6f6e652d74696d6520696e69746961" + "6c697a6174696f6e206d6179206e6f7420626520706572666f726d65642072" + "65637572736976656c79840910003800000010000000110000001200000010" + "0000001000000013000000120000000d0000000e000000150000000c000000" + "0b00000015000000150000000f0000000e0000001300000026000000380000" + "0019000000170000000c000000090000000a00000010000000170000001900" + "00000e0000000d00000014000000080000001b0000000e0000001000000016" + "000000150000000b000000160000000d0000000b00000013000000a4041000" + "b4041000c5041000d7041000e7041000f70410000a0510001c051000290510" + "00370510004c0510005805100063051000780510008d0510009c051000aa05" + "1000bd051000e30510001b061000340610004b06100057061000600610006a" + "0610007a06100091061000aa061000b8061000c5061000d9061000e1061000" + "fc0610000a0710001a07100030071000450710005007100066071000730710" + "007e071000009118046e616d65000e0d7761736d5f6c69622e7761736d01d9" + "172e0005726563757201625f5a4e34636f726533666d74336e756d33696d70" + "35325f244c5424696d706c2475323024636f72652e2e666d742e2e44697370" + "6c61792475323024666f7224753230246933322447542433666d7431376863" + "6564393063376136333963303164644502495f5a4e337374643473796e6339" + "6f6e63655f6c6f636b31374f6e63654c6f636b244c54245424475424313069" + "6e697469616c697a6531376837663563353038646139653162303962450342" + "5f5a4e34636f72653463656c6c346f6e636531374f6e636543656c6c244c54" + "245424475424387472795f696e697431376863653633626632323835313931" + "65373145043e5f5a4e35616c6c6f633473796e633136417263244c54245424" + "432441244754243964726f705f736c6f773137686565396163636361643963" + "63313036394505355f5a4e34636f72653970616e69636b696e673133617373" + "6572745f6661696c6564313768323332363266326333633738623661624506" + "325f5a4e34636f7265366f7074696f6e31336578706563745f6661696c6564" + "313768663038613939653264373333366336614507265f5a4e34636f726533" + "666d743577726974653137683933353534653462653731663263376145080e" + "5f5f727573745f6465616c6c6f6309305f5a4e34636f72653970616e69636b" + "696e673970616e69635f666d74313768363534306363623264356664633361" + "62450a595f5a4e36305f244c54247374642e2e696f2e2e6572726f722e2e45" + "72726f72247532302461732475323024636f72652e2e666d742e2e44697370" + "6c61792447542433666d743137683930323731633762326136636538333945" + "0b495f5a4e34345f244c54242452462454247532302461732475323024636f" + "72652e2e666d742e2e446973706c61792447542433666d7431376837666634" + "643062383630396332343732450c097265637572736976650d415f5a4e3864" + "6c6d616c6c6f6338646c6d616c6c6f633137446c6d616c6c6f63244c542441" + "24475424346672656531376833393833346161616165336538393436450e2c" + "5f5a4e34636f72653970616e69636b696e673570616e696331376830346565" + "623931376464393363323239450f445f5a4e34636f726535736c6963653569" + "6e6465783236736c6963655f73746172745f696e6465785f6c656e5f666169" + "6c313768663931613361666538376231643434334510625f5a4e34636f7265" + "33666d74336e756d33696d7035325f244c5424696d706c2475323024636f72" + "652e2e666d742e2e446973706c61792475323024666f722475323024753332" + "2447542433666d74313768626633653032323834383365333735614511305f" + "5a4e34636f726533666d74336e756d33696d7037666d745f75363431376864" + "353231666136656636613036373261451211727573745f626567696e5f756e" + "77696e6413465f5a4e34636f726533666d7439466f726d6174746572313270" + "61645f696e74656772616c313277726974655f707265666978313768613961" + "343332383062363030366431324514425f5a4e34636f726535736c69636535" + "696e6465783234736c6963655f656e645f696e6465785f6c656e5f6661696c" + "3137683038386235366532393962656161616645152e5f5a4e34636f726533" + "666d7439466f726d6174746572337061643137683437363961653338393337" + "346363353145163b5f5a4e34636f72653970616e69636b696e673139617373" + "6572745f6661696c65645f696e6e6572313768366637653332353764383461" + "353034324517475f5a4e34325f244c54242452462454247532302461732475" + "323024636f72652e2e666d742e2e44656275672447542433666d7431376833" + "6136626161316262343761643230344518585f5a4e35395f244c5424636f72" + "652e2e666d742e2e417267756d656e7473247532302461732475323024636f" + "72652e2e666d742e2e446973706c61792447542433666d7431376836386133" + "65386535303963616663363445195c5f5a4e36335f244c5424636f72652e2e" + "63656c6c2e2e426f72726f774d75744572726f722475323024617324753230" + "24636f72652e2e666d742e2e44656275672447542433666d74313768313564" + "33643334333462646463636338451a395f5a4e34636f72653463656c6c3232" + "70616e69635f616c72656164795f626f72726f776564313768333134623532" + "61316263343662666534451b395f5a4e337374643674687265616438546872" + "6561644964336e657739657868617573746564313768333336626637613134" + "38383034346338451c435f5a4e38646c6d616c6c6f6338646c6d616c6c6f63" + "3137446c6d616c6c6f63244c54244124475424366d616c6c6f633137686536" + "3539333961346338393763633135451d475f5a4e34325f244c542424524624" + "54247532302461732475323024636f72652e2e666d742e2e44656275672447" + "542433666d7431376865313837343338386530376266653235451e595f5a4e" + "36305f244c5424616c6c6f632e2e737472696e672e2e537472696e67247532" + "302461732475323024636f72652e2e666d742e2e446973706c617924475424" + "33666d7431376863653432323661613166373236633163451f7a5f5a4e3463" + "6f726533707472383864726f705f696e5f706c616365244c54247374642e2e" + "696f2e2e57726974652e2e77726974655f666d742e2e41646170746572244c" + "5424616c6c6f632e2e7665632e2e566563244c542475382447542424475424" + "24475424313768313636646336316162303333346331654520605f5a4e3631" + "5f244c54247374642e2e696f2e2e737464696f2e2e5374646f75744c6f636b" + "2475323024617324753230247374642e2e696f2e2e57726974652447542439" + "77726974655f616c6c31376832346238323631303436316432353666452155" + "5f5a4e3373746432696f386275666665726564396275667772697465723138" + "427566577269746572244c54245724475424313477726974655f616c6c5f63" + "6f6c64313768353834626462626165623066623162624522735f5a4e38305f" + "244c54247374642e2e696f2e2e57726974652e2e77726974655f666d742e2e" + "41646170746572244c54245424475424247532302461732475323024636f72" + "652e2e666d742e2e5772697465244754243977726974655f73747231376837" + "6661636635626330656663643830384523325f5a4e34636f726533666d7435" + "5772697465313077726974655f636861723137686630623362653165633139" + "64653565374524305f5a4e34636f726533666d743557726974653977726974" + "655f666d743137686638383038663064663065343531336445250a72757374" + "5f70616e696326375f5a4e34636f72653570616e6963313250616e69635061" + "796c6f61643661735f73747231376836313439663134326439613265303265" + "4527505f5a4e38646c6d616c6c6f6338646c6d616c6c6f633137446c6d616c" + "6c6f63244c542441244754243138696e736572745f6c617267655f6368756e" + "6b3137686566653835316132373538326461376245284a5f5a4e38646c6d61" + "6c6c6f6338646c6d616c6c6f633137446c6d616c6c6f63244c542441244754" + "243132756e6c696e6b5f6368756e6b31376839333465336463333833626235" + "3861334529455f5a4e3373746433737973396261636b747261636532365f5f" + "727573745f656e645f73686f72745f6261636b747261636531376834646333" + "646534376432323032316239452a585f5a4e337374643970616e69636b696e" + "673139626567696e5f70616e69635f68616e646c657232385f247537622424" + "75376224636c6f737572652475376424247537642431376865313761333937" + "376638396331313738452b3b5f5a4e337374643970616e69636b696e673230" + "727573745f70616e69635f776974685f686f6f6b3137683737366537396339" + "6636353931626535452c83015f5a4e39395f244c54247374642e2e70616e69" + "636b696e672e2e626567696e5f70616e69635f68616e646c65722e2e537461" + "7469635374725061796c6f6164247532302461732475323024636f72652e2e" + "70616e69632e2e50616e69635061796c6f6164244754243661735f73747231" + "376865623366373232643232346534326638452d066d656d63707907120100" + "0f5f5f737461636b5f706f696e746572090a0100072e726f64617461005509" + "70726f64756365727302086c616e6775616765010452757374000c70726f63" + "65737365642d62790105727573746325312e38332e302d6e696768746c7920" + "2863326637346333663920323032342d30392d30392900490f746172676574" + "5f6665617475726573042b0a6d756c746976616c75652b0f6d757461626c65" + "2d676c6f62616c732b0f7265666572656e63652d74797065732b087369676e" + "2d657874"; + +extern std::string const hfPerfTest = + "0061736d0100000001180460037f7f7e017f60057f7f7f7f7f017f600000" + "6000017f021d0203656e760974726163655f6e756d000003656e76057472" + "616365000103030202030503010002068601167f0041a0090b7f0041a011" + "0b7f0041e0080b7f0041a0080b7f0041c0080b7f004180080b7f00418408" + "0b7f004188080b7f00418c080b7f004190080b7f004194080b7f00419808" + "0b7f004180090b7f004180080b7f0041e0110b7f0041e0110b7f0041e091" + "040b7f004180080b7f0041e091040b7f00418080080b7f0041000b7f0041" + "010b07c50219066d656d6f72790200115f5f7761736d5f63616c6c5f6374" + "6f727300020666696e6973680003036275660300076c6f635f6275660301" + "036d73670302086572725f686561640303096572725f646174613103040a" + "53465f4163636f756e7403050e53465f44657374696e6174696f6e030608" + "53465f4d656d6f7303070753465f4d656d6f03080b53465f4d656d6f4461" + "746103090753465f44617461030a1753465f417574686f72697a65437265" + "64656e7469616c73030b066163635f6964030c0c5f5f64736f5f68616e64" + "6c65030d0a5f5f646174615f656e64030e0b5f5f737461636b5f6c6f7703" + "0f0c5f5f737461636b5f6869676803100d5f5f676c6f62616c5f62617365" + "03110b5f5f686561705f6261736503120a5f5f686561705f656e6403130d" + "5f5f6d656d6f72795f6261736503140c5f5f7461626c655f626173650315" + "0aa2010202000b9c0102017f017e41807821000340200041a0116a420037" + "0300200041086a22000d000b41d811420037030041d011420037030041c8" + "11420037030041c011420037030041b811420037030041b0114200370300" + "41a811428d801c37030041a011429a803c3703000240034041e008411020" + "0110004118460440200142017c220142c0843d520d010c020b0b41a00841" + "1441c0084113410010011a0b41010b0b840104004180080b340100080003" + "00080009000f000a000e000d0007001b0007001a000f0000000000676574" + "5f6c65646765725f73716e206572726f720041c0080b13696e76616c6964" + "2072657475726e2073697a650041e0080b104e6577206163636f756e7420" + "69643a20004180090b14fc4f9afac9f1a8db807fda7dc9247bb557569d58" + "007f0970726f647563657273010c70726f6365737365642d62790105636c" + "616e675f31392e312e352d776173692d73646b202868747470733a2f2f67" + "69746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a656374206162" + "346235613264623538323935386166316565333038613739306366646234" + "32626432343732302900490f7461726765745f6665617475726573042b0f" + "6d757461626c652d676c6f62616c732b087369676e2d6578742b0f726566" + "6572656e63652d74797065732b0a6d756c746976616c7565"; + +extern std::string const allKeyletsWasmHex = + "0061736d0100000001530a60057f7f7f7f7f017f60047f7f7f7f017f60067f7f7f7f7f7f01" + "7f60037f7f7f017f60087f7f7f7f7f7f7f7f017f60037f7f7e017f60077f7f7f7f7f7f7f01" + "7f60057f7f7f7f7f006000017f60037f7f7f000284051808686f73745f6c69620574726163" + "65000008686f73745f6c69621063616368655f6c65646765725f6f626a000308686f73745f" + "6c69620974726163655f6e756d000508686f73745f6c6962146765745f6c65646765725f6f" + "626a5f6669656c64000108686f73745f6c69621c6765745f63757272656e745f6c65646765" + "725f6f626a5f6669656c64000308686f73745f6c69620d74726163655f6163636f756e7400" + "0108686f73745f6c69620e6163636f756e745f6b65796c6574000108686f73745f6c69620b" + "6c696e655f6b65796c6574000408686f73745f6c69620a616d6d5f6b65796c657400020868" + "6f73745f6c69620c636865636b5f6b65796c6574000008686f73745f6c6962116372656465" + "6e7469616c5f6b65796c6574000408686f73745f6c69620f64656c65676174655f6b65796c" + "6574000208686f73745f6c6962166465706f7369745f707265617574685f6b65796c657400" + "0208686f73745f6c69620a6469645f6b65796c6574000108686f73745f6c69620d65736372" + "6f775f6b65796c6574000008686f73745f6c6962136d70745f69737375616e63655f6b6579" + "6c6574000008686f73745f6c69620e6d70746f6b656e5f6b65796c6574000208686f73745f" + "6c6962106e66745f6f666665725f6b65796c6574000008686f73745f6c69620c6f66666572" + "5f6b65796c6574000008686f73745f6c69620e7061796368616e5f6b65796c657400060868" + "6f73745f6c69621a7065726d697373696f6e65645f646f6d61696e5f6b65796c6574000008" + "686f73745f6c69620e7369676e6572735f6b65796c6574000108686f73745f6c69620d7469" + "636b65745f6b65796c6574000008686f73745f6c69620c7661756c745f6b65796c65740000" + "03040307080905030100110619037f01418080c0000b7f0041958bc0000b7f0041a08bc000" + "0b073e05066d656d6f727902000d6f626a6563745f65786973747300180666696e69736800" + "190a5f5f646174615f656e6403010b5f5f686561705f6261736503020a8d33038d0602057f" + "037e230041f0006b220524000240024020012d0000450440200541186a200141196a290000" + "370300200541106a200141116a290000370300200541086a200141096a2900003703002005" + "20012900013703002002200320054120410110001a2005412041001001220141004c0d0102" + "4002400240024002402004450440418b80c000410f4285801410021a200541d8006a420037" + "0300200541d0006a4200370300200541c8006a420037030020054200370340200141858014" + "200541406b22064120100322014120470d01200541286a200541cf006a2201290000220a37" + "0300200541306a200541d7006a2202290000220b370300200541386a200541df006a22032d" + "000022043a000020052005290047220c37032020052f014021072005280142210820052d00" + "4621092001200a3700002002200b370000200320043a0000200520093a0046200520083601" + "42200520073b01402005200c370047419a80c000410c20064120410110001a0c030b418b80" + "c000410f2004ac10021a200541d0006a4100360200200541c8006a42003703002005420037" + "034020012004200541406b411410032201417e47044020014114460d02200141004e0d0441" + "998ac00041172001ac10021a0c050b417e21010c040b41a680c0004115417f20012001417f" + "4e1b2201ac10021a200041013a0000200020013602040c060b200520052900473703602005" + "200541cc006a2201290000370065200520052f014022023b016e2005200529036037032020" + "05200529006537002520052800432103200520052d00423a0042200520023b014020052003" + "3600432001200529002537000020052005290320370047419a80c000410c200541406b4114" + "410110001a0b20004180023b01000c040b41b08ac0004131421410021a41e18ac000412020" + "01ad10021a417321010b41a680c00041152001ac10021a200041013a000020002001360204" + "0c020b41c280c000411620012802042201ac10021a200041013a0000200020013602040c01" + "0b41bb80c00041072001ac10021a200041013a0000200020013602040b200541f0006a2400" + "0bfc27020a7f027e23004180076b2200240041d880c000412341004100410010001a200041" + "98016a2204410036020020004190016a22034200370300200042003703880102402000027f" + "02404181802020004188016a22024114100422014114460440200041066a20002d008a013a" + "00002000200029008f013703e001200020004194016a22052900003700e501200041106a20" + "002900e501370000200020002f0188013b01042000200028008b01360007200020002903e0" + "0137000b41fb80c0004108200041046a2208411410051a2004410036020020034200370300" + "20004200370388014183802020024114100422014114470d032000411a6a20002d008a013a" + "00002000200029008f013703e001200020052900003700e501200041246a20002900e50137" + "0000200020002f0188013b01182000200028008b0136001b200020002903e00137001f4183" + "81c000410c200041186a411410051a200041a0016a22054200370300200442003703002003" + "420037030020004200370388012008411420024120100622014120460d0102402001410048" + "0440200020013602300c010b2000417f3602300b41010c020b0c020b200041c5006a200529" + "03003700002000413d6a2004290300370000200041356a2003290300370000200020002903" + "880137002d41000b3a002c20004188016a22042000412c6a418f81c0004107418180201018" + "0240024020002d00880145044041002101419681c000413541004100410010001a200041de" + "006a41c4003a0000200041d8006a4100360200200041e3006a41003a0000200041d5a6013b" + "015c200042003703502000410036005f200041a0016a2203420037030020004198016a2202" + "420037030020004190016a220542003703002000420037038801200041046a411420004118" + "6a4114200041d0006a41142004412010072204412047044002402004410048044020002004" + "3602680c010b2000417f3602680b410121010c020b200041fd006a20032903003700002000" + "41f5006a2002290300370000200041ed006a20052903003700002000200029038801370065" + "0c010b200028028c01210141878ac0004112420510021a0c010b200020013a006420004188" + "016a200041e4006a41cb81c000410941001018024020002d00880145044041d481c0004137" + "41004100410010001a200041f0016a200041286a2201280100360200200041e8016a200041" + "206a2202290100370300200041fc016a200041d8006a290300220a37020020004184026a20" + "0041e0006a2802002203360200200020002901183703e00120002000290350220b3702f401" + "200041e8066a22042003360200200041e0066a2203200a3703002000200b3703d806200041" + "f4066a2002290100370200200041fc066a2001280100360200200020002901183702ec0620" + "004188026a200041d8066a22014128101a2000418c016a200041e0016a41d000101a200041" + "0136028801200041f0066a2202420037030020044200370300200342003703002000420037" + "03d80641818bc0004114200041b4016a412820014120100822014120470440024020014100" + "480440200020013602e4010c010b2000417f3602e4010b410121010c020b200041f9016a20" + "02290300370000200041f1016a2004290300370000200041e9016a20032903003700002000" + "20002903d8063700e101410021010c010b200028028c01210141878ac0004112420510021a" + "0c010b200020013a00e001200041b4026a200041e0016a2204418b82c00041034181802010" + "18024020002d00b40245044041002101418e82c000413141004100410010001a200041f801" + "6a22034200370300200041f0016a22024200370300200041e8016a22054200370300200042" + "003703e001200041046a411441062004412010092204412047044002402004410048044020" + "0020043602c0020c010b2000417f3602c0020b410121010c020b200041d5026a2003290300" + "370000200041cd026a2002290300370000200041c5026a2005290300370000200020002903" + "e0013700bd020c010b20002802b802210141878ac0004112420610021a0c010b200020013a" + "00bc02200041e0016a2204200041bc026a41bf82c0004105418180201018024020002d00e0" + "014504404100210141c482c000413341004100410010001a200041f8016a22034200370300" + "200041f0016a22024200370300200041e8016a22054200370300200042003703e001200041" + "046a220841142008411441f782c000411220044120100a2204412047044002402004410048" + "0440200020043602e4020c010b2000417f3602e4020b410121010c020b200041f9026a2003" + "290300370000200041f1026a2002290300370000200041e9026a2005290300370000200020" + "002903e0013700e1020c010b20002802e401210141878ac0004112420610021a0c010b2000" + "20013a00e002200041e0016a2204200041e0026a418983c000410a41988020101802402000" + "2d00e00145044041002101419383c000413841004100410010001a200041f8016a22034200" + "370300200041f0016a22024200370300200041e8016a22054200370300200042003703e001" + "200041046a4114200041186a411420044120100b2204412047044002402004410048044020" + "002004360288030c010b2000417f360288030b410121010c020b2000419d036a2003290300" + "37000020004195036a20022903003700002000418d036a2005290300370000200020002903" + "e001370085030c010b20002802e401210141878ac0004112420710021a0c010b200020013a" + "008403200041e0016a220520004184036a41cb83c000410841818020101802400240024002" + "40024002400240024002400240024020002d00e00145044041d383c0004136410041004100" + "10001a230041206b22032400200341186a22064200370300200341106a2207420037030020" + "0341086a2209420037030020034200370300200041a8036a2201027f200041046a22044114" + "200041186a2208411420034120100c22024120470440024020024100480440200120023602" + "040c010b2001417f3602040b41010c010b20012003290300370001200141196a2006290300" + "370000200141116a2007290300370000200141096a200929030037000041000b3a00002003" + "41206a240020052001418984c000410e41818020101820002d00e0010d01419784c000413c" + "41004100410010001a230041206b22032400200341186a22064200370300200341106a2207" + "4200370300200341086a2209420037030020034200370300200041cc036a2201027f200441" + "1420034120100d22024120470440024020024100480440200120023602040c010b2001417f" + "3602040b41010c010b20012003290300370001200141196a2006290300370000200141116a" + "2007290300370000200141096a200929030037000041000b3a0000200341206a2400200520" + "0141d384c000410341818020101820002d00e0010d0241d684c00041314100410041001000" + "1a230041206b22032400200341186a22064200370300200341106a22074200370300200341" + "086a2209420037030020034200370300200041f0036a2201027f20044114410b2003412010" + "0e22024120470440024020024100480440200120023602040c010b2001417f3602040b4101" + "0c010b20012003290300370001200141196a2006290300370000200141116a200729030037" + "0000200141096a200929030037000041000b3a0000200341206a240020052001418785c000" + "410641818020101820002d00e0010d03418d85c000413441004100410010001a230041206b" + "22032400200341186a22064200370300200341106a22074200370300200341086a22094200" + "3703002003420037030020004194046a2201027f20044114410c20034120100f2202412047" + "0440024020024100480440200120023602040c010b2001417f3602040b41010c010b200120" + "03290300370001200141196a2006290300370000200141116a200729030037000020014109" + "6a200929030037000041000b3a0000200341206a2400200041f4016a200041146a28010036" + "0200200041ec016a2000410c6a290100370200200020002901043702e401200041808080e0" + "003602e001200041d8066a2203200141c185c000410b41848020101820002d00d8060d0441" + "cc85c000413941004100410010001a230041206b22012400200141186a2206420037030020" + "0141106a22074200370300200141086a2209420037030020014200370300200041b8046a22" + "02027f20054118200841142001412010102205412047044002402005410048044020022005" + "3602040c010b2002417f3602040b41010c010b20022001290300370001200241196a200629" + "0300370000200241116a2007290300370000200241096a200929030037000041000b3a0000" + "200141206a240020032002418586c000410741818020101820002d00d8060d05418c86c000" + "413541004100410010001a230041206b22012400200141186a22064200370300200141106a" + "22074200370300200141086a2209420037030020014200370300200041dc046a2202027f20" + "084114410620014120101122054120470440024020054100480440200220053602040c010b" + "2002417f3602040b41010c010b20022001290300370001200241196a200629030037000020" + "0241116a2007290300370000200241096a200929030037000041000b3a0000200141206a24" + "002003200241c186c000410c41828020101820002d00d8060d0641cd86c000413a41004100" + "410010001a230041206b22012400200141186a22064200370300200141106a220742003703" + "00200141086a220942003703002001420037030020004180056a2202027f20044114410d20" + "014120101222054120470440024020054100480440200220053602040c010b2002417f3602" + "040b41010c010b20022001290300370001200241196a2006290300370000200241116a2007" + "290300370000200241096a200929030037000041000b3a0000200141206a24002003200241" + "8787c000410541818020101820002d00d8060d07418c87c000413341004100410010001a23" + "0041206b22012400200141186a22064200370300200141106a22074200370300200141086a" + "2209420037030020014200370300200041a4056a2202027f2004411420084114410e200141" + "20101322054120470440024020054100480440200220053602040c010b2002417f3602040b" + "41010c010b20022001290300370001200241196a2006290300370000200241116a20072903" + "00370000200241096a200929030037000041000b3a0000200141206a24002003200241bf87" + "c000410a41818020101820002d00d8060d0841c987c000413841004100410010001a230041" + "206b22012400200141186a22084200370300200141106a22064200370300200141086a2207" + "420037030020014200370300200041c8056a2202027f20044114410f200141201014220541" + "20470440024020054100480440200220053602040c010b2002417f3602040b41010c010b20" + "022001290300370001200241196a2008290300370000200241116a20062903003700002002" + "41096a200729030037000041000b3a0000200141206a240020032002418188c00041124182" + "8020101820002d00d8060d09419388c00041c00041004100410010001a230041206b220124" + "00200141186a22084200370300200141106a22064200370300200141086a22074200370300" + "20014200370300200041ec056a2202027f2004411420014120101522054120470440024020" + "054100480440200220053602040c010b2002417f3602040b41010c010b2002200129030037" + "0001200241196a2008290300370000200241116a2006290300370000200241096a20072903" + "0037000041000b3a0000200141206a24002003200241d388c000410a4100101820002d00d8" + "060d0a41dd88c000413841004100410010001a230041206b22012400200141186a22084200" + "370300200141106a22064200370300200141086a2207420037030020014200370300200041" + "90066a2202027f200441144112200141201016220541204704400240200541004804402002" + "20053602040c010b2002417f3602040b41010c010b20022001290300370001200241196a20" + "08290300370000200241116a2006290300370000200241096a200729030037000041000b3a" + "0000200141206a240020032002419589c000410641818020101820002d00d8060d0b419b89" + "c000413441004100410010001a230041206b22012400200141186a22054200370300200141" + "106a22084200370300200141086a2206420037030020014200370300200041b4066a220202" + "7f20044114411320014120101722044120470440024020044100480440200220043602040c" + "010b2002417f3602040b41010c010b20022001290300370001200241196a20052903003700" + "00200241116a2008290300370000200241096a200629030037000041000b3a000020014120" + "6a24002003200241cf89c000410541818020101820002d00d80645044041d489c000413341" + "004100410010001a410121010c0d0b20002802dc06210141878ac0004112421310021a0c0c" + "0b20002802e401210141878ac0004112420810021a0c0b0b20002802e401210141878ac000" + "4112420910021a0c0a0b20002802e401210141878ac0004112420a10021a0c090b20002802" + "e401210141878ac0004112420b10021a0c080b20002802dc06210141878ac0004112420c10" + "021a0c070b20002802dc06210141878ac0004112420d10021a0c060b20002802dc06210141" + "878ac0004112420d10021a0c050b20002802dc06210141878ac0004112420d10021a0c040b" + "20002802dc06210141878ac0004112420e10021a0c030b20002802dc06210141878ac00041" + "12420f10021a0c020b20002802dc06210141878ac0004112421010021a0c010b20002802dc" + "06210141878ac0004112421210021a0b20004180076a240020010f0b418080c000410b417f" + "20012001417f4e1bac1002000bfd0401067f200241104f044002402000410020006b410371" + "22056a220420004d0d002001210320050440200521060340200020032d00003a0000200341" + "016a2103200041016a2100200641016b22060d000b0b200541016b4107490d000340200020" + "032d00003a0000200041016a200341016a2d00003a0000200041026a200341026a2d00003a" + "0000200041036a200341036a2d00003a0000200041046a200341046a2d00003a0000200041" + "056a200341056a2d00003a0000200041066a200341066a2d00003a0000200041076a200341" + "076a2d00003a0000200341086a2103200041086a22002004470d000b0b2004200220056b22" + "07417c7122086a21000240200120056a2206410371450440200020044d0d01200621010340" + "20042001280200360200200141046a2101200441046a22042000490d000b0c010b20002004" + "4d0d002006410374220541187121032006417c71220241046a2101410020056b4118712105" + "200228020021020340200420022003762001280200220220057472360200200141046a2101" + "200441046a22042000490d000b0b20074103712102200620086a21010b0240200020002002" + "6a22064f0d002002410771220304400340200020012d00003a0000200141016a2101200041" + "016a2100200341016b22030d000b0b200241016b4107490d000340200020012d00003a0000" + "200041016a200141016a2d00003a0000200041026a200141026a2d00003a0000200041036a" + "200141036a2d00003a0000200041046a200141046a2d00003a0000200041056a200141056a" + "2d00003a0000200041066a200141066a2d00003a0000200041076a200141076a2d00003a00" + "00200141086a2101200041086a22002006470d000b0b0b0b8b0b0100418080c0000b810b65" + "72726f725f636f64653d47657474696e67206669656c643a204669656c6420646174613a20" + "4572726f722067657474696e67206669656c643a204572726f723a204572726f7220676574" + "74696e67206b65796c65743a202424242424205354415254494e47205741534d2045584543" + "5554494f4e2024242424244163636f756e743a44657374696e6174696f6e3a4163636f756e" + "744163636f756e74206f626a656374206578697374732c2070726f63656564696e67207769" + "746820657363726f772066696e6973682e54727573746c696e6554727573746c696e65206f" + "626a656374206578697374732c2070726f63656564696e67207769746820657363726f7720" + "66696e6973682e414d4d414d4d206f626a656374206578697374732c2070726f6365656469" + "6e67207769746820657363726f772066696e6973682e436865636b436865636b206f626a65" + "6374206578697374732c2070726f63656564696e67207769746820657363726f772066696e" + "6973682e7465726d73616e64636f6e646974696f6e7343726564656e7469616c4372656465" + "6e7469616c206f626a656374206578697374732c2070726f63656564696e67207769746820" + "657363726f772066696e6973682e44656c656761746544656c6567617465206f626a656374" + "206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973" + "682e4465706f736974507265617574684465706f73697450726561757468206f626a656374" + "206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973" + "682e444944444944206f626a656374206578697374732c2070726f63656564696e67207769" + "746820657363726f772066696e6973682e457363726f77457363726f77206f626a65637420" + "6578697374732c2070726f63656564696e67207769746820657363726f772066696e697368" + "2e4d505449737375616e63654d505449737375616e6365206f626a65637420657869737473" + "2c2070726f63656564696e67207769746820657363726f772066696e6973682e4d50546f6b" + "656e4d50546f6b656e206f626a656374206578697374732c2070726f63656564696e672077" + "69746820657363726f772066696e6973682e4e46546f6b656e4f666665724e46546f6b656e" + "4f66666572206f626a656374206578697374732c2070726f63656564696e67207769746820" + "657363726f772066696e6973682e4f666665724f66666572206f626a656374206578697374" + "732c2070726f63656564696e67207769746820657363726f772066696e6973682e50617943" + "68616e6e656c5061794368616e6e656c206f626a656374206578697374732c2070726f6365" + "6564696e67207769746820657363726f772066696e6973682e5065726d697373696f6e6564" + "446f6d61696e5065726d697373696f6e6564446f6d61696e206f626a656374206578697374" + "732c2070726f63656564696e67207769746820657363726f772066696e6973682e5369676e" + "65724c6973745369676e65724c697374206f626a656374206578697374732c2070726f6365" + "6564696e67207769746820657363726f772066696e6973682e5469636b65745469636b6574" + "206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f" + "772066696e6973682e5661756c745661756c74206f626a656374206578697374732c207072" + "6f63656564696e67207769746820657363726f772066696e6973682e43757272656e742073" + "65712076616c75653a456e636f756e7465726564206572726f725f636f64653a4279746520" + "61727261792077617320657870656374656420746f20686176652074686973206d616e7920" + "62797465733a2042797465206172726179206861642074686973206d616e79206279746573" + "3a20004d0970726f64756365727302086c616e6775616765010452757374000c70726f6365" + "737365642d6279010572757374631d312e38352e3120283465623136313235302032303235" + "2d30332d31352900490f7461726765745f6665617475726573042b0f6d757461626c652d67" + "6c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d75" + "6c746976616c7565"; + +extern std::string const codecovTestsWasmHex = + "0061736d0100000001570b60047f7f7f7f017f60057f7f7f7f7f017f60027f7f017f60067f" + "7f7f7f7f7f017f6000017f60037f7f7f017f60017f017f60087f7f7f7f7f7f7f7f017f6003" + "7f7f7e017f60077f7f7f7f7f7f7f017f60047f7f7f7f0002e70b3408686f73745f6c696205" + "7472616365000108686f73745f6c69620974726163655f6e756d000808686f73745f6c6962" + "0e6765745f6c65646765725f73716e000408686f73745f6c6962166765745f706172656e74" + "5f6c65646765725f74696d65000408686f73745f6c6962166765745f706172656e745f6c65" + "646765725f68617368000208686f73745f6c6962176765745f6c65646765725f6163636f75" + "6e745f68617368000208686f73745f6c6962126765745f6c65646765725f74785f68617368" + "000208686f73745f6c69620c6765745f626173655f666565000408686f73745f6c69621161" + "6d656e646d656e745f656e61626c6564000208686f73745f6c69620c6765745f74785f6669" + "656c64000508686f73745f6c69620e6163636f756e745f6b65796c6574000008686f73745f" + "6c69621063616368655f6c65646765725f6f626a000508686f73745f6c69621c6765745f63" + "757272656e745f6c65646765725f6f626a5f6669656c64000508686f73745f6c6962146765" + "745f6c65646765725f6f626a5f6669656c64000008686f73745f6c6962136765745f74785f" + "6e65737465645f6669656c64000008686f73745f6c6962236765745f63757272656e745f6c" + "65646765725f6f626a5f6e65737465645f6669656c64000008686f73745f6c69621b676574" + "5f6c65646765725f6f626a5f6e65737465645f6669656c64000108686f73745f6c69621067" + "65745f74785f61727261795f6c656e000608686f73745f6c6962206765745f63757272656e" + "745f6c65646765725f6f626a5f61727261795f6c656e000608686f73745f6c696218676574" + "5f6c65646765725f6f626a5f61727261795f6c656e000208686f73745f6c6962176765745f" + "74785f6e65737465645f61727261795f6c656e000208686f73745f6c6962276765745f6375" + "7272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e00020868" + "6f73745f6c69621f6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c" + "656e000508686f73745f6c69620b7570646174655f64617461000208686f73745f6c696213" + "636f6d707574655f7368613531325f68616c66000008686f73745f6c696209636865636b5f" + "736967000308686f73745f6c6962076765745f6e6674000308686f73745f6c69620e676574" + "5f6e66745f697373756572000008686f73745f6c69620d6765745f6e66745f7461786f6e00" + "0008686f73745f6c69620d6765745f6e66745f666c616773000208686f73745f6c69621467" + "65745f6e66745f7472616e736665725f666565000208686f73745f6c69620e6765745f6e66" + "745f73657269616c000008686f73745f6c69620d74726163655f6163636f756e7400000868" + "6f73745f6c69620c74726163655f616d6f756e74000008686f73745f6c69620b6c696e655f" + "6b65796c6574000708686f73745f6c69620a616d6d5f6b65796c6574000308686f73745f6c" + "69621163726564656e7469616c5f6b65796c6574000708686f73745f6c69620e6d70746f6b" + "656e5f6b65796c6574000308686f73745f6c69620c636865636b5f6b65796c657400010868" + "6f73745f6c69620f64656c65676174655f6b65796c6574000308686f73745f6c6962166465" + "706f7369745f707265617574685f6b65796c6574000308686f73745f6c69620a6469645f6b" + "65796c6574000008686f73745f6c69620d657363726f775f6b65796c6574000108686f7374" + "5f6c6962136d70745f69737375616e63655f6b65796c6574000108686f73745f6c6962106e" + "66745f6f666665725f6b65796c6574000108686f73745f6c69620c6f666665725f6b65796c" + "6574000108686f73745f6c69620d6f7261636c655f6b65796c6574000108686f73745f6c69" + "620e7061796368616e5f6b65796c6574000908686f73745f6c69621a7065726d697373696f" + "6e65645f646f6d61696e5f6b65796c6574000108686f73745f6c69620e7369676e6572735f" + "6b65796c6574000008686f73745f6c69620d7469636b65745f6b65796c6574000108686f73" + "745f6c69620c7661756c745f6b65796c657400010303020a0405030100110619037f014180" + "80c0000b7f0041959ac0000b7f0041a09ac0000b072e04066d656d6f727902000666696e69" + "736800350a5f5f646174615f656e6403010b5f5f686561705f6261736503020a8026024600" + "0240200020014704402002200341004100410010001a20004100480d01418b80c000410b20" + "00ad1001000b200220032000ac10011a0f0b418b80c000410b2000ac1001000bb62502087f" + "027e230041f0016b22002400419680c000412341004100410010001a100241b9e00041b980" + "c000410e1034100341b2920441c780c00041161034200041f8006a22044200370300200041" + "f0006a22034200370300200041e8006a2202420037030020004200370360200041e0006a22" + "0141201004412041e48ac00041161034200442003703002003420037030020024200370300" + "20004200370360200141201005412041fa8ac0004117103420044200370300200342003703" + "002002420037030020004200370360200141201006412041918bc000411210341007410a41" + "dd80c000410c1034200041206a428182848890a0c08001370300200041186a428182848890" + "a0c08001370300200041106a428182848890a0c080013703002000428182848890a0c08001" + "37030841e980c000410e1008410141f780c00041111034200041086a41201008410141f780" + "c0004111103420034100360200200242003703002000420037036002404181802020014114" + "1009220541144604402000412e6a20002d00623a0000200020002900673703c80120002000" + "41ec006a2900003700cd01200041386a20002900cd01370000200020002f01603b012c2000" + "200028006336002f200020002903c801370033200442003703002003420037030020024200" + "370300200042003703602000412c6a411420014120100a22044120470d01200041c2006a20" + "002d00623a0000200041d0016a200041ef006a2900002208370300200041d8016a200041f7" + "006a2900002209370300200041cf006a2008370000200041d7006a2009370000200041df00" + "6a200041ff006a2d00003a0000200020002f01603b01402000200028006336004320002000" + "290067370047200041406b41204100100b4101418881c00041101034200341003602002002" + "4200370300200042003703604181802020014114100c411441a38bc000411c103420034100" + "360200200242003703002000420037036041014181802020014114100d411441bf8bc00041" + "14103402402001410020016b41037122036a220220014d0d00200304402003210403402001" + "41003a0000200141016a2101200441016b22040d000b0b200341016b4107490d0003402001" + "41003a0000200141076a41003a0000200141066a41003a0000200141056a41003a00002001" + "41046a41003a0000200141036a41003a0000200141026a41003a0000200141016a41003a00" + "00200141086a22012002470d000b0b200241c40020036b2203417c716a220120024b044003" + "4020024100360200200241046a22022001490d000b0b024020012003410371220320016a22" + "044f0d002003220204400340200141003a0000200141016a2101200241016b22020d000b0b" + "200341016b4107490d000340200141003a0000200141076a41003a0000200141066a41003a" + "0000200141056a41003a0000200141046a41003a0000200141036a41003a0000200141026a" + "41003a0000200141016a41003a0000200141086a22012004470d000b0b2000418180203602" + "c801410021010340200741c000490440200041e0006a20076a200041c8016a20016a2d0000" + "3a0000200020002802a00141016a22073602a001200141016a22014104470d010b0b200041" + "d8016a22024100360200200041d0016a22054200370300200042003703c801200041e0006a" + "22012007200041c8016a22044114100e411441d38bc0004113103420024100360200200542" + "00370300200042003703c801200120002802a00120044114100f411441e68bc00041231034" + "2002410036020020054200370300200042003703c8014101200120002802a0012004411410" + "10411441898cc000411b10344189803c10114120419881c000411010344189803c10124120" + "41a881c0004120103441014189803c1013412041c881c00041181034200120002802a00110" + "14412041e081c00041171034200120002802a0011015412041f781c0004127103441012001" + "20002802a00110164120419e82c000411f10342000412c6a220341141017410041bd82c000" + "410b1034200041e0016a220742003703002002420037030020054200370300200042003703" + "c801200120002802a001200441201018412041a48cc0004113103441c882c000410c41d482" + "c000410b41df82c000410e1019410141ed82c00041091034200041c0016a200041206a2903" + "00370300200041b8016a200041186a290300370300200041b0016a200041106a2903003703" + "00200020002903083703a801200241003b010020054200370300200042003703c801200341" + "14200041a8016a2206412020044112101a411241b78cc00041071034200241003602002005" + "4200370300200042003703c8012006412020044114101b411441be8cc000410e1034200041" + "003602c8012006412020044104101c410441cc8cc000410d103420064120101d410841f682" + "c000410d103420064120101e410a418383c00041141034200041003602c801200641202004" + "4104101f410441d98cc000410e1034419783c000410d200341141020412f41a483c000410d" + "1034419783c000410d41b183c00041081021411341b983c000410c1034417f410410044171" + "41c583c000411e1034200041003602c8012004417f1004417141e78cc000411e1034200041" + "ca016a41003a0000200041003b01c801200441031004417d41858dc0004124103420004100" + "3602c8012004418094ebdc031004417341a98dc00041231034419783c000410d2003411410" + "20412f41a483c000410d1034419783c000410d41b183c00041081021411341b983c000410c" + "103441021011416f41e383c000411f1034417f20002802a00110144171418284c000411f10" + "342001417f1014417141a184c000411f103420014181201014417441c084c0004120103420" + "0041e094ebdc036a220620002802a0011014417341e084c000411f1034200620002802a001" + "4101100b417341ff84c00041181034200120002802a0014101100b4171419785c000411a10" + "34200742003703002002420037030020054200370300200042003703c801200620002802a0" + "0120044120100a417341cc8dc0004116103420074200370300200242003703002005420037" + "0300200042003703c801200120002802a00120044120100a417141e28dc000411810342007" + "42003703002002420037030020054200370300200042003703c80120034114200341142006" + "20002802a001200441201022417341fa8dc000411c10342007420037030020024200370300" + "20054200370300200042003703c8012003411420034114200120002802a001200441201022" + "417141968ec000411e10342007420037030020024200370300200542003703002000420037" + "03c80141819ac0004114200620002802a001200441201023417341b48ec000411910342007" + "42003703002002420037030020054200370300200042003703c80141819ac0004114200120" + "002802a001200441201023417141cd8ec000411f1034200742003703002002420037030020" + "054200370300200042003703c80141819ac000411441b185c0004114200441201023417141" + "ec8ec00041291034200041dc016a2000413c6a280100360200200041d4016a200041346a29" + "01003702002000200029012c3702cc01200041808080083602c801200041003b01ec012004" + "411841819ac0004114200041ec016a220241021023417141958fc000410e10342006200028" + "02a001422a1001417341c585c00041111034200041003b01ec014102200241021009416f41" + "a38fc000411b1034200041003b01ec01410220024102100c416f41be8fc000412b10342000" + "41003b01ec014101410220024102100d416f41e98fc0004123103441021011416f41e383c0" + "00411f103441021012416f41d685c000412f1034410141021013416f418586c00041271034" + "41e980c0004181201008417441ac86c000411f103441e980c00041c1001008417441cb86c0" + "00411a1034200041003b01ec01200141812020024102100e4174418c90c000412110342000" + "41003b01ec01200141812020024102100f417441ad90c00041311034200041003b01ec0141" + "012001418120200241021010417441de90c0004129103420014181201014417441e586c000" + "41251034200141812010154174418a87c00041351034410120014181201016417441bf87c0" + "00412d103420014181201017417441ec87c00041191034419783c00041812041d482c00041" + "0b41df82c000410e1019417441ed82c00041091034419783c000410d41d482c00041812041" + "df82c000410e1019417441ed82c00041091034419783c000410d41d482c000410b41df82c0" + "004181201019417441ed82c00041091034200041003b01ec01200141812020024102101841" + "74418791c00041211034200041003b01ec0141819ac00041812041819ac000411420024102" + "1023417441a891c00041181034200041003b01ec0120034114200341142001418120200241" + "021024417441c091c000411f1034200041003b01ec01200441812020034114200241021025" + "417441df91c00041221034419783c000410d200620002802a001410010004173418588c000" + "410f1034419783c000410d200620002802a00110214173419488c000411610342001200028" + "02a0014100100b417141aa88c00041231034200041003b01ec0120034114200120002802a0" + "0120024102101a4171418192c000411a1034200041003b01ec01200120002802a001200241" + "02101b4171419b92c00041211034200041003b01ec01200120002802a00120024102101c41" + "7141bc92c00041201034200120002802a001101d417141cd88c00041201034200120002802" + "a001101e417141ed88c00041271034200041003602ec01200120002802a00120024104101f" + "417141dc92c00041211034200041003b01ec01200120002802a00120024102100a417141fd" + "92c00041231034200041003b01ec01200120002802a0014101200241021026417141a093c0" + "0041211034200041003b01ec01200120002802a00122052003411420012005200241021024" + "417141c193c00041271034200041003b01ec0120034114200120002802a001220520012005" + "200241021024417141e893c00041271034200041003b01ec01200120002802a00120034114" + "2002410210274171418f94c00041251034200041003b01ec0120034114200120002802a001" + "200241021027417141b494c00041251034200041003b01ec01200120002802a00120034114" + "200241021028417141d994c000412c1034200041003b01ec0120034114200120002802a001" + "2002410210284171418595c000412c1034200041003b01ec01200120002802a00120024102" + "1029417141b195c000411f1034200041003b01ec01200120002802a001410120024102102a" + "417141d095c00041221034200041003b01ec01200120002802a0012003411441b185c00041" + "14200241021022417141f295c00041211034200041003b01ec0120034114200120002802a0" + "0141b185c00041142002410210224171419396c00041211034200041003b01ec0120012000" + "2802a001410120024102102b417141b496c00041281034200041003b01ec01200441182001" + "20002802a001200241021025417141dc96c00041231034200041003b01ec01200120002802" + "a001410120024102102c417141ff96c00041251034200041003b01ec01200120002802a001" + "410120024102102d417141a497c00041211034200041003b01ec01200120002802a0014101" + "20024102102e417141c597c00041221034200041003b01ec01200120002802a00120034114" + "410120024102102f417141e797c00041241034200041003b01ec0120034114200120002802" + "a001410120024102102f4171418b98c00041241034200041003b01ec01200120002802a001" + "4101200241021030417141af98c000412f1034200041003b01ec01200120002802a0012002" + "41021031417141de98c00041231034200041003b01ec01200120002802a001410120024102" + "10324171418199c00041221034200041003b01ec01200120002802a0014101200241021033" + "417141a399c00041211034200041003b01ec01200120002802a001419489c0004120200241" + "02101a417141c499c000411c1034419783c000410d200120002802a0011020417141b489c0" + "0041221034419797abdd03410d419489c000412041001000417341d689c000411010344197" + "97abdd03410d200341141020417341e689c00041181034419797abdd03410d41b183c00041" + "081021417341fe89c00041171034200120002802a001200141812041001000417441958ac0" + "00410e1034200141812042011001417441a38ac00041121034419783c00041812020034114" + "1020417441b58ac00041161034419783c00041812041b183c00041081021417441b58ac000" + "41161034419783c000410d200120002802a0011021417141cb8ac00041191034200041003b" + "01ec01200120002802a00120034114200241021025417141e099c00041211034200041f001" + "6a240041010f0b418080c000410b417f20052005417f4e1bac1001000b418080c000410b41" + "7f20042004417f4e1bac1001000b0b8b1a0100418080c0000b811a6572726f725f636f6465" + "3d54455354204641494c45442424242424205354415254494e47205741534d204558454355" + "54494f4e2024242424246765745f6c65646765725f73716e6765745f706172656e745f6c65" + "646765725f74696d656765745f626173655f666565746573745f616d656e646d656e74616d" + "656e646d656e745f656e61626c656463616368655f6c65646765725f6f626a6765745f7478" + "5f61727261795f6c656e6765745f63757272656e745f6c65646765725f6f626a5f61727261" + "795f6c656e6765745f6c65646765725f6f626a5f61727261795f6c656e6765745f74785f6e" + "65737465645f61727261795f6c656e6765745f63757272656e745f6c65646765725f6f626a" + "5f6e65737465645f61727261795f6c656e6765745f6c65646765725f6f626a5f6e65737465" + "645f61727261795f6c656e7570646174655f6461746174657374206d657373616765746573" + "74207075626b657974657374207369676e6174757265636865636b5f7369676765745f6e66" + "745f666c6167736765745f6e66745f7472616e736665725f66656574657374696e67207472" + "61636574726163655f6163636f756e74400000000000005f74726163655f616d6f756e7467" + "65745f706172656e745f6c65646765725f686173685f6e65675f7074726765745f74785f61" + "727261795f6c656e5f696e76616c69645f736669656c646765745f74785f6e65737465645f" + "61727261795f6c656e5f6e65675f7074726765745f74785f6e65737465645f61727261795f" + "6c656e5f6e65675f6c656e6765745f74785f6e65737465645f61727261795f6c656e5f746f" + "6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f7074725f6f6f62" + "63616368655f6c65646765725f6f626a5f7074725f6f6f6263616368655f6c65646765725f" + "6f626a5f77726f6e675f6c656e555344303030303030303030303030303030303074726163" + "655f6e756d5f6f6f625f7374726765745f63757272656e745f6c65646765725f6f626a5f61" + "727261795f6c656e5f696e76616c69645f736669656c646765745f6c65646765725f6f626a" + "5f61727261795f6c656e5f696e76616c69645f736669656c64616d656e646d656e745f656e" + "61626c65645f746f6f5f6269675f736c696365616d656e646d656e745f656e61626c65645f" + "746f6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f746f6f5f62" + "69675f736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e6573746564" + "5f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f6c65646765725f6f62" + "6a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963657570646174" + "655f646174615f746f6f5f6269675f736c69636574726163655f6f6f625f736c6963657472" + "6163655f616d6f756e745f6f6f625f736c69636563616368655f6c65646765725f6f626a5f" + "77726f6e675f73697a655f75696e743235366765745f6e66745f666c6167735f77726f6e67" + "5f73697a655f75696e743235366765745f6e66745f7472616e736665725f6665655f77726f" + "6e675f73697a655f75696e7432353630303030303030303030303030303030303030303030" + "3030303030303030303174726163655f6163636f756e745f77726f6e675f73697a655f6163" + "636f756e74696474726163655f6f6f625f737472696e6774726163655f6163636f756e745f" + "6f6f625f737472696e6774726163655f616d6f756e745f6f6f625f737472696e6774726163" + "655f746f6f5f6c6f6e6774726163655f6e756d5f746f6f5f6c6f6e6774726163655f616363" + "6f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f77726f6e675f6c656e6774" + "686765745f706172656e745f6c65646765725f686173686765745f6c65646765725f616363" + "6f756e745f686173686765745f6c65646765725f74785f686173686765745f63757272656e" + "745f6c65646765725f6f626a5f6669656c646765745f6c65646765725f6f626a5f6669656c" + "646765745f74785f6e65737465645f6669656c646765745f63757272656e745f6c65646765" + "725f6f626a5f6e65737465645f6669656c646765745f6c65646765725f6f626a5f6e657374" + "65645f6669656c64636f6d707574655f7368613531325f68616c666765745f6e6674676574" + "5f6e66745f6973737565726765745f6e66745f7461786f6e6765745f6e66745f7365726961" + "6c6765745f706172656e745f6c65646765725f686173685f6e65675f6c656e6765745f7061" + "72656e745f6c65646765725f686173685f6275665f746f6f5f736d616c6c6765745f706172" + "656e745f6c65646765725f686173685f6c656e5f746f6f5f6c6f6e676163636f756e745f6b" + "65796c65745f6c656e5f6f6f626163636f756e745f6b65796c65745f77726f6e675f6c656e" + "6c696e655f6b65796c65745f6c656e5f6f6f625f63757272656e63796c696e655f6b65796c" + "65745f77726f6e675f6c656e5f63757272656e6379616d6d5f6b65796c65745f6c656e5f6f" + "6f625f617373657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6c656e5f617373" + "657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6e6f6e5f7872705f6375727265" + "6e63795f6c656e616d6d5f6b65796c65745f6d70746765745f74785f6669656c645f696e76" + "616c69645f736669656c646765745f63757272656e745f6c65646765725f6f626a5f666965" + "6c645f696e76616c69645f736669656c646765745f6c65646765725f6f626a5f6669656c64" + "5f696e76616c69645f736669656c646765745f74785f6e65737465645f6669656c645f746f" + "6f5f6269675f736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e6573" + "7465645f6669656c645f746f6f5f6269675f736c6963656765745f6c65646765725f6f626a" + "5f6e65737465645f6669656c645f746f6f5f6269675f736c696365636f6d707574655f7368" + "613531325f68616c665f746f6f5f6269675f736c696365616d6d5f6b65796c65745f746f6f" + "5f6269675f736c69636563726564656e7469616c5f6b65796c65745f746f6f5f6269675f73" + "6c6963656d70746f6b656e5f6b65796c65745f746f6f5f6269675f736c6963655f6d707469" + "646765745f6e66745f77726f6e675f73697a655f75696e743235366765745f6e66745f6973" + "737565725f77726f6e675f73697a655f75696e743235366765745f6e66745f7461786f6e5f" + "77726f6e675f73697a655f75696e743235366765745f6e66745f73657269616c5f77726f6e" + "675f73697a655f75696e743235366163636f756e745f6b65796c65745f77726f6e675f7369" + "7a655f6163636f756e746964636865636b5f6b65796c65745f77726f6e675f73697a655f61" + "63636f756e74696463726564656e7469616c5f6b65796c65745f77726f6e675f73697a655f" + "6163636f756e7469643163726564656e7469616c5f6b65796c65745f77726f6e675f73697a" + "655f6163636f756e7469643264656c65676174655f6b65796c65745f77726f6e675f73697a" + "655f6163636f756e7469643164656c65676174655f6b65796c65745f77726f6e675f73697a" + "655f6163636f756e746964326465706f7369745f707265617574685f6b65796c65745f7772" + "6f6e675f73697a655f6163636f756e746964316465706f7369745f707265617574685f6b65" + "796c65745f77726f6e675f73697a655f6163636f756e746964326469645f6b65796c65745f" + "77726f6e675f73697a655f6163636f756e746964657363726f775f6b65796c65745f77726f" + "6e675f73697a655f6163636f756e7469646c696e655f6b65796c65745f77726f6e675f7369" + "7a655f6163636f756e746964316c696e655f6b65796c65745f77726f6e675f73697a655f61" + "63636f756e746964326d70745f69737375616e63655f6b65796c65745f77726f6e675f7369" + "7a655f6163636f756e7469646d70746f6b656e5f6b65796c65745f77726f6e675f73697a65" + "5f6163636f756e7469646e66745f6f666665725f6b65796c65745f77726f6e675f73697a65" + "5f6163636f756e7469646f666665725f6b65796c65745f77726f6e675f73697a655f616363" + "6f756e7469646f7261636c655f6b65796c65745f77726f6e675f73697a655f6163636f756e" + "7469647061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e7469" + "64317061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e746964" + "327065726d697373696f6e65645f646f6d61696e5f6b65796c65745f77726f6e675f73697a" + "655f6163636f756e7469647369676e6572735f6b65796c65745f77726f6e675f73697a655f" + "6163636f756e7469647469636b65745f6b65796c65745f77726f6e675f73697a655f616363" + "6f756e7469647661756c745f6b65796c65745f77726f6e675f73697a655f6163636f756e74" + "69646765745f6e66745f77726f6e675f73697a655f6163636f756e7469646d70746f6b656e" + "5f6b65796c65745f6d707469645f77726f6e675f6c656e677468004d0970726f6475636572" + "7302086c616e6775616765010452757374000c70726f6365737365642d6279010572757374" + "631d312e38352e31202834656231363132353020323032352d30332d31352900490f746172" + "6765745f6665617475726573042b0f6d757461626c652d676c6f62616c732b087369676e2d" + "6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; + +extern std::string const floatTestsWasmHex = + "0061736d0100000001430860057f7f7f7f7f017f60047e7f7f7f017f60047f7f7f7f017f60" + "057f7e7f7f7f017f60077f7f7f7f7f7f7f017f60067f7f7f7f7f7f017f60037f7f7e017f60" + "00017f02c9020e08686f73745f6c6962057472616365000008686f73745f6c69620e666c6f" + "61745f66726f6d5f696e74000108686f73745f6c69620f666c6f61745f66726f6d5f75696e" + "74000008686f73745f6c69621274726163655f6f70617175655f666c6f6174000208686f73" + "745f6c696209666c6f61745f736574000308686f73745f6c69620d666c6f61745f636f6d70" + "617265000208686f73745f6c696209666c6f61745f616464000408686f73745f6c69620e66" + "6c6f61745f7375627472616374000408686f73745f6c69620e666c6f61745f6d756c746970" + "6c79000408686f73745f6c69620c666c6f61745f646976696465000408686f73745f6c6962" + "09666c6f61745f706f77000508686f73745f6c69620974726163655f6e756d000608686f73" + "745f6c69620a666c6f61745f726f6f74000508686f73745f6c696209666c6f61745f6c6f67" + "00000302010705030100110619037f01418080c0000b7f0041b48ac0000b7f0041c08ac000" + "0b072e04066d656d6f727902000666696e697368000e0a5f5f646174615f656e6403010b5f" + "5f686561705f6261736503020acf1301cc1301027f23808080800041206b22002480808080" + "00418080c08000411d4100410041001080808080001a2000420037031002400240428ce000" + "200041106a410841001081808080004108470d00419d80c080004117200041106a41084101" + "1080808080001a0c010b41b480c08000411e4100410041001080808080001a0b2000428ce0" + "0037031802400240200041186a4108200041106a410841001082808080004108470d0041d2" + "80c080004117200041106a41081083808080001a0c010b41e980c08000411e410041004100" + "1080808080001a0b02400240410242fb00200041106a410841001084808080004108470d00" + "418781c080004121200041106a41081083808080001a0c010b41a881c08000412641004100" + "41001080808080001a0b41ce81c08000411541e381c0800041081083808080001a41f381c0" + "8000411641eb81c0800041081083808080001a418982c08000411b41004100410010808080" + "80001a20004200370318024002404201200041186a410841001081808080004108470d0041" + "a482c08000410f200041186a41081083808080001a0c010b41b382c0800041164100410041" + "001080808080001a0b02400240200041186a410841e381c0800041081085808080000d0041" + "c982c08000411b4100410041001080808080001a0c010b41e482c08000411b410041004100" + "1080808080001a0b02400240200041186a410841eb81c0800041081085808080004101470d" + "0041ff82c0800041234100410041001080808080001a0c010b41a283c08000412441004100" + "41001080808080001a0b0240024041eb81c080004108200041186a41081085808080004102" + "470d0041c683c0800041234100410041001080808080001a0c010b41e983c0800041244100" + "410041001080808080001a0b418d84c0800041204100410041001080808080001a200042d4" + "87b6f4c7d4b1c000370310410921010340200041106a410841e381c080004108200041106a" + "410841001086808080001a2001417f6a22010d000b20004200370318420a200041186a4108" + "41001081808080001a02400240200041186a4108200041106a41081085808080000d0041ad" + "84c0800041144100410041001080808080001a0c010b41c184c08000411341004100410010" + "80808080001a0b410b21010340200041106a410841e381c080004108200041106a41084100" + "1087808080001a2001417f6a22010d000b02400240200041106a410841eb81c08000410810" + "85808080000d0041d484c0800041194100410041001080808080001a0c010b41ed84c08000" + "41184100410041001080808080001a0b418585c0800041234100410041001080808080001a" + "20004200370300420a2000410841001081808080001a200042d487b6f4c7d4b1c000370308" + "410621010340200041086a410820004108200041086a410841001088808080001a2001417f" + "6a22010d000b2000420037031042c0843d200041106a410841001081808080001a02400240" + "200041106a4108200041086a41081085808080000d0041a885c08000411941004100410010" + "80808080001a0c010b41c185c0800041184100410041001080808080001a0b410721010340" + "200041086a410820004108200041086a410841001089808080001a2001417f6a22010d000b" + "20004200370318417f4201200041186a410841001084808080001a02400240200041086a41" + "08200041186a41081085808080000d0041d985c0800041174100410041001080808080001a" + "0c010b41f085c0800041164100410041001080808080001a0b418686c08000411741004100" + "41001080808080001a2000420037030841e381c0800041084103200041086a41084100108a" + "808080001a419d86c080004112200041086a41081083808080001a41eb81c0800041084106" + "200041086a41084100108a808080001a41af86c080004118200041086a4108108380808000" + "1a200042003703104209200041106a410841001081808080001a200041106a410841022000" + "41086a41084100108a808080001a41c786c080004114200041086a41081083808080001a20" + "0041106a41084100200041086a41084100108a808080001a41db86c080004117200041086a" + "41081083808080001a200042003703184200200041186a410841001081808080001a200041" + "186a41084102200041086a41084100108a808080001a41f286c080004114200041086a4108" + "1083808080001a418687c080004138200041186a41084100200041086a41084100108a8080" + "8000ac108b808080001a41be87c0800041184100410041001080808080001a200042003703" + "084209200041086a410841001081808080001a20004200370310200041086a410841022000" + "41106a41084100108c808080001a41d687c080004112200041106a41081083808080001a20" + "0041086a41084103200041106a41084100108c808080001a41e887c080004112200041106a" + "41081083808080001a2000420037031842c0843d200041186a410841001081808080001a20" + "0041186a41084103200041106a41084100108c808080001a41fa87c080004118200041106a" + "41081083808080001a200041186a41084106200041106a41084100108c808080001a419288" + "c08000411c200041106a41081083808080001a41ae88c08000411741004100410010808080" + "80001a2000420037031042c0843d200041106a410841001081808080001a20004200370318" + "200041106a4108200041186a41084100108d808080001a41c588c080004114200041186a41" + "081083808080001a41d988c08000411a4100410041001080808080001a2000420037031841" + "e381c08000410841eb81c080004108200041186a410841001088808080001a0240024041eb" + "81c080004108200041186a41081085808080000d0041f388c0800041164100410041001080" + "808080001a0c010b418989c0800041154100410041001080808080001a0b41eb81c0800041" + "0841eb81c080004108200041186a410841001088808080001a0240024041e381c080004108" + "200041186a41081085808080000d00419e89c0800041174100410041001080808080001a0c" + "010b41b589c0800041164100410041001080808080001a0b41cb89c08000411a4100410041" + "001080808080001a2000420037031020004200370318420a200041186a4108410010818080" + "80001a41e381c080004108200041186a4108200041106a410841001089808080001a41e589" + "c080004119200041106a41081083808080001a41e381c080004108200041106a4108200041" + "106a410841001089808080001a41fe89c08000410f200041106a41081083808080001a0240" + "0240200041186a4108200041106a41081085808080000d00418d8ac0800041144100410041" + "001080808080001a0c010b41a18ac0800041134100410041001080808080001a0b20004120" + "6a24808080800041010b0bbe0a0100418080c0000bb40a0a24242420746573745f666c6f61" + "745f66726f6d5f7761736d202424242020666c6f61742066726f6d20693634203132333030" + "3a2020666c6f61742066726f6d206936342031323330303a206661696c65642020666c6f61" + "742066726f6d207536342031323330303a2020666c6f61742066726f6d2075363420313233" + "30303a206661696c65642020666c6f61742066726f6d2065787020322c206d616e74697373" + "61203132333a2020666c6f61742066726f6d2065787020322c206d616e746973736120333a" + "206661696c65642020666c6f61742066726f6d20636f6e737420313ad4838d7ea4c6800094" + "838d7ea4c680002020666c6f61742066726f6d20636f6e7374202d313a0a24242420746573" + "745f666c6f61745f636f6d70617265202424242020666c6f61742066726f6d20313a202066" + "6c6f61742066726f6d20313a206661696c65642020666c6f61742066726f6d2031203d3d20" + "464c4f41545f4f4e452020666c6f61742066726f6d203120213d20464c4f41545f4f4e4520" + "20666c6f61742066726f6d2031203e20464c4f41545f4e454741544956455f4f4e45202066" + "6c6f61742066726f6d203120213e20464c4f41545f4e454741544956455f4f4e452020464c" + "4f41545f4e454741544956455f4f4e45203c20666c6f61742066726f6d20312020464c4f41" + "545f4e454741544956455f4f4e4520213c20666c6f61742066726f6d20310a242424207465" + "73745f666c6f61745f6164645f737562747261637420242424202072657065617465642061" + "64643a20676f6f6420207265706561746564206164643a2062616420207265706561746564" + "2073756274726163743a20676f6f64202072657065617465642073756274726163743a2062" + "61640a24242420746573745f666c6f61745f6d756c7469706c795f64697669646520242424" + "20207265706561746564206d756c7469706c793a20676f6f6420207265706561746564206d" + "756c7469706c793a2062616420207265706561746564206469766964653a20676f6f642020" + "7265706561746564206469766964653a206261640a24242420746573745f666c6f61745f70" + "6f77202424242020666c6f61742063756265206f6620313a2020666c6f6174203674682070" + "6f776572206f66202d313a2020666c6f617420737175617265206f6620393a2020666c6f61" + "742030746820706f776572206f6620393a2020666c6f617420737175617265206f6620303a" + "2020666c6f61742030746820706f776572206f6620302028657870656374696e6720494e56" + "414c49445f504152414d53206572726f72293a0a24242420746573745f666c6f61745f726f" + "6f74202424242020666c6f61742073717274206f6620393a2020666c6f6174206362727420" + "6f6620393a2020666c6f61742063627274206f6620313030303030303a2020666c6f617420" + "36746820726f6f74206f6620313030303030303a0a24242420746573745f666c6f61745f6c" + "6f672024242420206c6f675f3130206f6620313030303030303a0a24242420746573745f66" + "6c6f61745f6e65676174652024242420206e656761746520636f6e737420313a20676f6f64" + "20206e656761746520636f6e737420313a2062616420206e656761746520636f6e7374202d" + "313a20676f6f6420206e656761746520636f6e7374202d313a206261640a24242420746573" + "745f666c6f61745f696e76657274202424242020696e76657274206120666c6f6174206672" + "6f6d2031303a2020696e7665727420616761696e3a2020696e766572742074776963653a20" + "676f6f642020696e766572742074776963653a20626164009c06046e616d65001110666c6f" + "61745f74657374732e7761736d01e1050f002b5f5a4e387872706c5f73746434686f737435" + "7472616365313768303332393563316538663365373233614501355f5a4e387872706c5f73" + "746434686f73743134666c6f61745f66726f6d5f696e743137683032306436373439326164" + "39346333304502365f5a4e387872706c5f73746434686f73743135666c6f61745f66726f6d" + "5f75696e74313768346166373638366538353062383432364503395f5a4e387872706c5f73" + "746434686f7374313874726163655f6f70617175655f666c6f617431376831396639386666" + "35663362313932336245042f5f5a4e387872706c5f73746434686f737439666c6f61745f73" + "6574313768323964346230383964626561326664624505345f5a4e387872706c5f73746434" + "686f73743133666c6f61745f636f6d70617265313768346362313239626634623330373233" + "6445062f5f5a4e387872706c5f73746434686f737439666c6f61745f616464313768383661" + "336165636435336234643937374507355f5a4e387872706c5f73746434686f73743134666c" + "6f61745f7375627472616374313768653033313036323931393464333931364508355f5a4e" + "387872706c5f73746434686f73743134666c6f61745f6d756c7469706c7931376830323839" + "3337633039656534323630644509335f5a4e387872706c5f73746434686f73743132666c6f" + "61745f64697669646531376834363036323038303562623237353632450a2f5f5a4e387872" + "706c5f73746434686f737439666c6f61745f706f7731376833326463303662646430303338" + "626331450b2f5f5a4e387872706c5f73746434686f73743974726163655f6e756d31376830" + "336535336633646539393463633033450c315f5a4e387872706c5f73746434686f73743130" + "666c6f61745f726f6f7431376863656632313139376565656136653630450d2f5f5a4e3878" + "72706c5f73746434686f737439666c6f61745f6c6f67313768323530663038303633353663" + "35653639450e0666696e697368071201000f5f5f737461636b5f706f696e746572090a0100" + "072e726f64617461004d0970726f64756365727302086c616e677561676501045275737400" + "0c70726f6365737365642d6279010572757374631d312e38382e3020283662303062633338" + "3820323032352d30362d3233290094010f7461726765745f6665617475726573082b0b6275" + "6c6b2d6d656d6f72792b0f62756c6b2d6d656d6f72792d6f70742b1663616c6c2d696e6469" + "726563742d6f7665726c6f6e672b0a6d756c746976616c75652b0f6d757461626c652d676c" + "6f62616c732b136e6f6e7472617070696e672d6670746f696e742b0f7265666572656e6365" + "2d74797065732b087369676e2d657874"; + +extern std::string const float0Hex = + "0061736d0100000001290560057f7f7f7f7f017f60047e7f7f7f017f6007" + "7f7f7f7f7f7f7f017f60047f7f7f7f017f6000017f025f0408686f73745f" + "6c6962057472616365000008686f73745f6c69620e666c6f61745f66726f" + "6d5f696e74000108686f73745f6c69620e666c6f61745f73756274726163" + "74000208686f73745f6c69620d666c6f61745f636f6d7061726500030302" + "010405030100110619037f01418080c0000b7f00419281c0000b7f0041a0" + "81c0000b072e04066d656d6f727902000666696e69736800040a5f5f6461" + "74615f656e6403010b5f5f686561705f6261736503020abe0201bb020101" + "7f23808080800041206b2200248080808000418080c08000411541004100" + "41001080808080001a200042003703084200200041086a41084100108180" + "8080001a20004200370310420a200041106a410841001081808080001a20" + "0042003703180240200041106a4108200041106a4108200041186a410841" + "001082808080004108460d00419580c08000411541004100410010808080" + "80001a0b02400240200041086a4108200041186a41081083808080000d00" + "41aa80c0800041174100410041001080808080001a0c010b41c180c08000" + "41164100410041001080808080001a0b02400240200041086a410841d780" + "c0800041081083808080000d0041df80c08000411a410041004100108080" + "8080001a0c010b41f980c0800041194100410041001080808080001a0b20" + "0041206a24808080800041010b0b9c010100418080c0000b92010a242424" + "20746573745f666c6f61745f30202424242020666c6f61742031302d3130" + "3a206661696c65642020666c6f6174203020636f6d706172653a20676f6f" + "642020666c6f6174203020636f6d706172653a2062616480000000000000" + "002020464c4f41545f5a45524f20636f6d706172653a20676f6f64202046" + "4c4f41545f5a45524f20636f6d706172653a20626164009502046e616d65" + "001110666c6f61745f74657374732e7761736d01da0105002b5f5a4e3878" + "72706c5f73746434686f7374357472616365313768616338383262323664" + "656162656436364501355f5a4e387872706c5f73746434686f7374313466" + "6c6f61745f66726f6d5f696e743137683032343066386533613839643139" + "39654502355f5a4e387872706c5f73746434686f73743134666c6f61745f" + "737562747261637431376864363430633135323334353432393563450334" + "5f5a4e387872706c5f73746434686f73743133666c6f61745f636f6d7061" + "72653137683663386465656231323864393638386645040666696e697368" + "071201000f5f5f737461636b5f706f696e746572090a0100072e726f6461" + "7461004d0970726f64756365727302086c616e6775616765010452757374" + "000c70726f6365737365642d6279010572757374631d312e38392e302028" + "32393438333838336520323032352d30382d3034290094010f7461726765" + "745f6665617475726573082b0b62756c6b2d6d656d6f72792b0f62756c6b" + "2d6d656d6f72792d6f70742b1663616c6c2d696e6469726563742d6f7665" + "726c6f6e672b0a6d756c746976616c75652b0f6d757461626c652d676c6f" + "62616c732b136e6f6e7472617070696e672d6670746f696e742b0f726566" + "6572656e63652d74797065732b087369676e2d657874"; + +extern std::string const disabledFloatHex = + "0061736d010000000108026000006000017f03030200010503010002063e" + "0a7f004180080b7f004180080b7f004180100b7f004180100b7f00418090" + "040b7f004180080b7f00418090040b7f00418080080b7f0041000b7f0041" + "010b07b0010d066d656d6f72790200115f5f7761736d5f63616c6c5f6374" + "6f727300000666696e69736800010362756603000c5f5f64736f5f68616e" + "646c6503010a5f5f646174615f656e6403020b5f5f737461636b5f6c6f77" + "03030c5f5f737461636b5f6869676803040d5f5f676c6f62616c5f626173" + "6503050b5f5f686561705f6261736503060a5f5f686561705f656e640307" + "0d5f5f6d656d6f72795f6261736503080c5f5f7461626c655f6261736503" + "090a150202000b100043000000c54300200045921a41010b"; diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/fixtures.h b/src/test/app/wasm_fixtures/wasm_fixtures/fixtures.h new file mode 100644 index 0000000000..0e7e3785ea --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/fixtures.h @@ -0,0 +1,52 @@ +//------------------------------------------------------------------------------ +/* + This file is part of rippled: https://github.com/ripple/rippled + Copyright (c) 2025 Ripple Labs Inc. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ +//============================================================================== + +#pragma once + +// TODO: consider moving these to separate files (and figure out the build) + +#include + +extern std::string const ledgerSqnWasmHex; + +extern std::string const allHostFunctionsWasmHex; + +extern std::string const deepRecursionHex; + +extern std::string const fibWasmHex; + +extern std::string const b58WasmHex; + +extern std::string const sha512PureWasmHex; + +extern std::string const zkProofWasmHex; + +extern std::string const sp1WasmHex; + +extern std::string const hfPerfTest; + +extern std::string const allKeyletsWasmHex; + +extern std::string const codecovTestsWasmHex; + +extern std::string const floatTestsWasmHex; + +extern std::string const float0Hex; + +extern std::string const disabledFloatHex; diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/float_tests/Cargo.lock b/src/test/app/wasm_fixtures/wasm_fixtures/float_tests/Cargo.lock new file mode 100644 index 0000000000..972bf3ce61 --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/float_tests/Cargo.lock @@ -0,0 +1,15 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "float_tests" +version = "0.0.1" +dependencies = [ + "xrpl-std", +] + +[[package]] +name = "xrpl-std" +version = "0.0.1" +source = "git+https://github.com/ripple/craft.git?branch=main#94fb247e0c21b9e7fecb91ce71ef7f74ef4a7931" diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/float_tests/Cargo.toml b/src/test/app/wasm_fixtures/wasm_fixtures/float_tests/Cargo.toml new file mode 100644 index 0000000000..b4dec2aa50 --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/float_tests/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "float_tests" +version = "0.0.1" +edition = "2024" + +# This empty workspace definition keeps this project independent of the parent workspace +[workspace] + +[lib] +crate-type = ["cdylib"] + +[profile.release] +lto = true +opt-level = 's' +panic = "abort" + +[dependencies] +xrpl-std = { git = "https://github.com/ripple/craft.git", branch = "main", package = "xrpl-std" } + +[profile.dev] +panic = "abort" diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/float_tests/src/lib.rs b/src/test/app/wasm_fixtures/wasm_fixtures/float_tests/src/lib.rs new file mode 100644 index 0000000000..9688ebd602 --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/float_tests/src/lib.rs @@ -0,0 +1,460 @@ +#![allow(unused_imports)] +#![allow(unused_variables)] +#![cfg_attr(target_arch = "wasm32", no_std)] + +#[cfg(not(target_arch = "wasm32"))] +extern crate std; + +use xrpl_std::core::locator::Locator; +use xrpl_std::decode_hex_32; +use xrpl_std::host::trace::DataRepr::AsHex; +use xrpl_std::host::trace::{trace, trace_data, trace_float, trace_num, DataRepr}; +use xrpl_std::host::{ + cache_ledger_obj, float_add, float_compare, float_divide, float_from_int, float_from_uint, + float_log, float_multiply, float_pow, float_root, float_set, float_subtract, + get_ledger_obj_array_len, get_ledger_obj_field, get_ledger_obj_nested_field, + trace_opaque_float, FLOAT_NEGATIVE_ONE, FLOAT_ONE, FLOAT_ROUNDING_MODES_TO_NEAREST, +}; +use xrpl_std::sfield; +use xrpl_std::sfield::{ + Account, AccountTxnID, Balance, Domain, EmailHash, Flags, LedgerEntryType, MessageKey, + OwnerCount, PreviousTxnID, PreviousTxnLgrSeq, RegularKey, Sequence, TicketCount, TransferRate, +}; + +fn test_float_from_wasm() { + let _ = trace("\n$$$ test_float_from_wasm $$$"); + + let mut f: [u8; 8] = [0u8; 8]; + if 8 == unsafe { float_from_int(12300, f.as_mut_ptr(), 8, FLOAT_ROUNDING_MODES_TO_NEAREST) } { + let _ = trace_float(" float from i64 12300:", &f); + let _ = trace_data(" float from i64 12300 as HEX:", &f, AsHex); + } else { + let _ = trace(" float from i64 12300: failed"); + } + + let u64_value: u64 = 12300; + if 8 == unsafe { + float_from_uint( + &u64_value as *const u64 as *const u8, + 8, + f.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + } { + let _ = trace_float(" float from u64 12300:", &f); + } else { + let _ = trace(" float from u64 12300: failed"); + } + + if 8 == unsafe { float_set(2, 123, f.as_mut_ptr(), 8, FLOAT_ROUNDING_MODES_TO_NEAREST) } { + let _ = trace_float(" float from exp 2, mantissa 123:", &f); + } else { + let _ = trace(" float from exp 2, mantissa 3: failed"); + } + + let _ = trace_float(" float from const 1:", &FLOAT_ONE); + let _ = trace_float(" float from const -1:", &FLOAT_NEGATIVE_ONE); +} + +fn test_float_compare() { + let _ = trace("\n$$$ test_float_compare $$$"); + + let mut f1: [u8; 8] = [0u8; 8]; + if 8 != unsafe { float_from_int(1, f1.as_mut_ptr(), 8, FLOAT_ROUNDING_MODES_TO_NEAREST) } { + let _ = trace(" float from 1: failed"); + } else { + let _ = trace_float(" float from 1:", &f1); + } + + if 0 == unsafe { float_compare(f1.as_ptr(), 8, FLOAT_ONE.as_ptr(), 8) } { + let _ = trace(" float from 1 == FLOAT_ONE"); + } else { + let _ = trace(" float from 1 != FLOAT_ONE"); + } + + if 1 == unsafe { float_compare(f1.as_ptr(), 8, FLOAT_NEGATIVE_ONE.as_ptr(), 8) } { + let _ = trace(" float from 1 > FLOAT_NEGATIVE_ONE"); + } else { + let _ = trace(" float from 1 !> FLOAT_NEGATIVE_ONE"); + } + + if 2 == unsafe { float_compare(FLOAT_NEGATIVE_ONE.as_ptr(), 8, f1.as_ptr(), 8) } { + let _ = trace(" FLOAT_NEGATIVE_ONE < float from 1"); + } else { + let _ = trace(" FLOAT_NEGATIVE_ONE !< float from 1"); + } +} + +fn test_float_add_subtract() { + let _ = trace("\n$$$ test_float_add_subtract $$$"); + + let mut f_compute: [u8; 8] = FLOAT_ONE; + for i in 0..9 { + unsafe { + float_add( + f_compute.as_ptr(), + 8, + FLOAT_ONE.as_ptr(), + 8, + f_compute.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }; + // let _ = trace_float(" float:", &f_compute); + } + let mut f10: [u8; 8] = [0u8; 8]; + if 8 != unsafe { float_from_int(10, f10.as_mut_ptr(), 8, FLOAT_ROUNDING_MODES_TO_NEAREST) } { + // let _ = trace(" float from 10: failed"); + } + if 0 == unsafe { float_compare(f10.as_ptr(), 8, f_compute.as_ptr(), 8) } { + let _ = trace(" repeated add: good"); + } else { + let _ = trace(" repeated add: bad"); + } + + for i in 0..11 { + unsafe { + float_subtract( + f_compute.as_ptr(), + 8, + FLOAT_ONE.as_ptr(), + 8, + f_compute.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }; + } + if 0 == unsafe { float_compare(f_compute.as_ptr(), 8, FLOAT_NEGATIVE_ONE.as_ptr(), 8) } { + let _ = trace(" repeated subtract: good"); + } else { + let _ = trace(" repeated subtract: bad"); + } +} + +fn test_float_multiply_divide() { + let _ = trace("\n$$$ test_float_multiply_divide $$$"); + + let mut f10: [u8; 8] = [0u8; 8]; + unsafe { float_from_int(10, f10.as_mut_ptr(), 8, FLOAT_ROUNDING_MODES_TO_NEAREST) }; + let mut f_compute: [u8; 8] = FLOAT_ONE; + for i in 0..6 { + unsafe { + float_multiply( + f_compute.as_ptr(), + 8, + f10.as_ptr(), + 8, + f_compute.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }; + // let _ = trace_float(" float:", &f_compute); + } + let mut f1000000: [u8; 8] = [0u8; 8]; + unsafe { + float_from_int( + 1000000, + f1000000.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }; + + if 0 == unsafe { float_compare(f1000000.as_ptr(), 8, f_compute.as_ptr(), 8) } { + let _ = trace(" repeated multiply: good"); + } else { + let _ = trace(" repeated multiply: bad"); + } + + for i in 0..7 { + unsafe { + float_divide( + f_compute.as_ptr(), + 8, + f10.as_ptr(), + 8, + f_compute.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }; + } + let mut f01: [u8; 8] = [0u8; 8]; + unsafe { float_set(-1, 1, f01.as_mut_ptr(), 8, FLOAT_ROUNDING_MODES_TO_NEAREST) }; + + if 0 == unsafe { float_compare(f_compute.as_ptr(), 8, f01.as_ptr(), 8) } { + let _ = trace(" repeated divide: good"); + } else { + let _ = trace(" repeated divide: bad"); + } +} + +fn test_float_pow() { + let _ = trace("\n$$$ test_float_pow $$$"); + + let mut f_compute: [u8; 8] = [0u8; 8]; + unsafe { + float_pow( + FLOAT_ONE.as_ptr(), + 8, + 3, + f_compute.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }; + let _ = trace_float(" float cube of 1:", &f_compute); + + unsafe { + float_pow( + FLOAT_NEGATIVE_ONE.as_ptr(), + 8, + 6, + f_compute.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }; + let _ = trace_float(" float 6th power of -1:", &f_compute); + + let mut f9: [u8; 8] = [0u8; 8]; + unsafe { float_from_int(9, f9.as_mut_ptr(), 8, FLOAT_ROUNDING_MODES_TO_NEAREST) }; + unsafe { + float_pow( + f9.as_ptr(), + 8, + 2, + f_compute.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }; + let _ = trace_float(" float square of 9:", &f_compute); + + unsafe { + float_pow( + f9.as_ptr(), + 8, + 0, + f_compute.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }; + let _ = trace_float(" float 0th power of 9:", &f_compute); + + let mut f0: [u8; 8] = [0u8; 8]; + unsafe { float_from_int(0, f0.as_mut_ptr(), 8, FLOAT_ROUNDING_MODES_TO_NEAREST) }; + unsafe { + float_pow( + f0.as_ptr(), + 8, + 2, + f_compute.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }; + let _ = trace_float(" float square of 0:", &f_compute); + + let r = unsafe { + float_pow( + f0.as_ptr(), + 8, + 0, + f_compute.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }; + let _ = trace_num( + " float 0th power of 0 (expecting INVALID_PARAMS error):", + r as i64, + ); +} + +fn test_float_root() { + let _ = trace("\n$$$ test_float_root $$$"); + + let mut f9: [u8; 8] = [0u8; 8]; + unsafe { float_from_int(9, f9.as_mut_ptr(), 8, FLOAT_ROUNDING_MODES_TO_NEAREST) }; + let mut f_compute: [u8; 8] = [0u8; 8]; + unsafe { + float_root( + f9.as_ptr(), + 8, + 2, + f_compute.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }; + let _ = trace_float(" float sqrt of 9:", &f_compute); + unsafe { + float_root( + f9.as_ptr(), + 8, + 3, + f_compute.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }; + let _ = trace_float(" float cbrt of 9:", &f_compute); + + let mut f1000000: [u8; 8] = [0u8; 8]; + unsafe { + float_from_int( + 1000000, + f1000000.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }; + unsafe { + float_root( + f1000000.as_ptr(), + 8, + 3, + f_compute.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }; + let _ = trace_float(" float cbrt of 1000000:", &f_compute); + unsafe { + float_root( + f1000000.as_ptr(), + 8, + 6, + f_compute.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }; + let _ = trace_float(" float 6th root of 1000000:", &f_compute); +} + +fn test_float_log() { + let _ = trace("\n$$$ test_float_log $$$"); + + let mut f1000000: [u8; 8] = [0u8; 8]; + unsafe { + float_from_int( + 1000000, + f1000000.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }; + let mut f_compute: [u8; 8] = [0u8; 8]; + unsafe { + float_log( + f1000000.as_ptr(), + 8, + f_compute.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }; + let _ = trace_float(" log_10 of 1000000:", &f_compute); +} + +fn test_float_negate() { + let _ = trace("\n$$$ test_float_negate $$$"); + + let mut f_compute: [u8; 8] = [0u8; 8]; + unsafe { + float_multiply( + FLOAT_ONE.as_ptr(), + 8, + FLOAT_NEGATIVE_ONE.as_ptr(), + 8, + f_compute.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }; + // let _ = trace_float(" float:", &f_compute); + if 0 == unsafe { float_compare(FLOAT_NEGATIVE_ONE.as_ptr(), 8, f_compute.as_ptr(), 8) } { + let _ = trace(" negate const 1: good"); + } else { + let _ = trace(" negate const 1: bad"); + } + + unsafe { + float_multiply( + FLOAT_NEGATIVE_ONE.as_ptr(), + 8, + FLOAT_NEGATIVE_ONE.as_ptr(), + 8, + f_compute.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }; + // let _ = trace_float(" float:", &f_compute); + if 0 == unsafe { float_compare(FLOAT_ONE.as_ptr(), 8, f_compute.as_ptr(), 8) } { + let _ = trace(" negate const -1: good"); + } else { + let _ = trace(" negate const -1: bad"); + } +} + +fn test_float_invert() { + let _ = trace("\n$$$ test_float_invert $$$"); + + let mut f_compute: [u8; 8] = [0u8; 8]; + let mut f10: [u8; 8] = [0u8; 8]; + unsafe { float_from_int(10, f10.as_mut_ptr(), 8, FLOAT_ROUNDING_MODES_TO_NEAREST) }; + unsafe { + float_divide( + FLOAT_ONE.as_ptr(), + 8, + f10.as_ptr(), + 8, + f_compute.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }; + let _ = trace_float(" invert a float from 10:", &f_compute); + unsafe { + float_divide( + FLOAT_ONE.as_ptr(), + 8, + f_compute.as_ptr(), + 8, + f_compute.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }; + let _ = trace_float(" invert again:", &f_compute); + + // if f10's value is 7, then invert twice won't match the original value + if 0 == unsafe { float_compare(f10.as_ptr(), 8, f_compute.as_ptr(), 8) } { + let _ = trace(" invert twice: good"); + } else { + let _ = trace(" invert twice: bad"); + } +} + +#[unsafe(no_mangle)] +pub extern "C" fn finish() -> i32 { + test_float_from_wasm(); + test_float_compare(); + test_float_add_subtract(); + test_float_multiply_divide(); + test_float_pow(); + test_float_root(); + test_float_log(); + test_float_negate(); + test_float_invert(); + + 1 +} diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/ledgerSqn.c b/src/test/app/wasm_fixtures/wasm_fixtures/ledgerSqn.c new file mode 100644 index 0000000000..3458b02872 --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/ledgerSqn.c @@ -0,0 +1,27 @@ +#include + +int32_t +get_ledger_sqn(); +// int32_t trace(uint8_t const*, int32_t, uint8_t const*, int32_t, int32_t); +// int32_t trace_num(uint8_t const*, int32_t, int64_t); + +// uint8_t buf[1024]; + +// char const test_res[] = "sqn: "; +// char const test_name[] = "TEST get_ledger_sqn"; + +int +finish() +{ + // trace((uint8_t const *)test_name, sizeof(test_name) - 1, 0, 0, 0); + + // memset(buf, 0, sizeof(buf)); + // for(int i = 0; i < sizeof(buf); ++i) buf[i] = 0; + + int x = get_ledger_sqn(); + // if (x >= 0) + // x = *((int32_t*)buf); + // trace_num((uint8_t const *)test`_res, sizeof(test_res) - 1, x); + + return x < 0 ? x : (x >= 5 ? x : 0); +} diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/sha512Pure.c b/src/test/app/wasm_fixtures/wasm_fixtures/sha512Pure.c new file mode 100644 index 0000000000..fe82aa2a65 --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/sha512Pure.c @@ -0,0 +1,145 @@ +#include +#include + +static uint64_t const K512[] = { + 0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, + 0xe9b5dba58189dbbc, 0x3956c25bf348b538, 0x59f111f1b605d019, + 0x923f82a4af194f9b, 0xab1c5ed5da6d8118, 0xd807aa98a3030242, + 0x12835b0145706fbe, 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2, + 0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235, + 0xc19bf174cf692694, 0xe49b69c19ef14ad2, 0xefbe4786384f25e3, + 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65, 0x2de92c6f592b0275, + 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5, + 0x983e5152ee66dfab, 0xa831c66d2db43210, 0xb00327c898fb213f, + 0xbf597fc7beef0ee4, 0xc6e00bf33da88fc2, 0xd5a79147930aa725, + 0x06ca6351e003826f, 0x142929670a0e6e70, 0x27b70a8546d22ffc, + 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed, 0x53380d139d95b3df, + 0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, + 0x92722c851482353b, 0xa2bfe8a14cf10364, 0xa81a664bbc423001, + 0xc24b8b70d0f89791, 0xc76c51a30654be30, 0xd192e819d6ef5218, + 0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8, + 0x19a4c116b8d2d0c8, 0x1e376c085141ab53, 0x2748774cdf8eeb99, + 0x34b0bcb5e19b48a8, 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, + 0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3, 0x748f82ee5defb2fc, + 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec, + 0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, + 0xc67178f2e372532b, 0xca273eceea26619c, 0xd186b8c721c0c207, + 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178, 0x06f067aa72176fba, + 0x0a637dc5a2c898a6, 0x113f9804bef90dae, 0x1b710b35131c471b, + 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc, + 0x431d67c49c100d4c, 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, + 0x5fcb6fab3ad6faec, 0x6c44198c4a475817}; + +#define ROTATE(x, y) (((x) >> (y)) | ((x) << (64 - (y)))) +#define Sigma0(x) (ROTATE((x), 28) ^ ROTATE((x), 34) ^ ROTATE((x), 39)) +#define Sigma1(x) (ROTATE((x), 14) ^ ROTATE((x), 18) ^ ROTATE((x), 41)) +#define sigma0(x) (ROTATE((x), 1) ^ ROTATE((x), 8) ^ ((x) >> 7)) +#define sigma1(x) (ROTATE((x), 19) ^ ROTATE((x), 61) ^ ((x) >> 6)) + +#define Ch(x, y, z) (((x) & (y)) ^ ((~(x)) & (z))) +#define Maj(x, y, z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) + +static inline uint64_t +B2U64(uint8_t val, uint8_t sh) +{ + return ((uint64_t)val) << sh; +} + +void* +allocate(int sz) +{ + return malloc(sz); +} +void +deallocate(void* p) +{ + free(p); +} + +uint8_t e_data[32 * 1024]; + +uint8_t* +sha512_process(uint8_t const* data, int32_t length) +{ + static uint64_t state[8] = {0, 0, 0, 0, 0, 0, 0, 0}; + + uint64_t a, b, c, d, e, f, g, h, s0, s1, T1, T2; + uint64_t X[16]; + + uint64_t blocks = length / 128; + while (blocks--) + { + a = state[0]; + b = state[1]; + c = state[2]; + d = state[3]; + e = state[4]; + f = state[5]; + g = state[6]; + h = state[7]; + + unsigned i; + for (i = 0; i < 16; i++) + { + X[i] = B2U64(data[0], 56) | B2U64(data[1], 48) | + B2U64(data[2], 40) | B2U64(data[3], 32) | B2U64(data[4], 24) | + B2U64(data[5], 16) | B2U64(data[6], 8) | B2U64(data[7], 0); + data += 8; + + T1 = h; + T1 += Sigma1(e); + T1 += Ch(e, f, g); + T1 += K512[i]; + T1 += X[i]; + + T2 = Sigma0(a); + T2 += Maj(a, b, c); + + h = g; + g = f; + f = e; + e = d + T1; + d = c; + c = b; + b = a; + a = T1 + T2; + } + + for (i = 16; i < 80; i++) + { + s0 = X[(i + 1) & 0x0f]; + s0 = sigma0(s0); + s1 = X[(i + 14) & 0x0f]; + s1 = sigma1(s1); + + T1 = X[i & 0xf] += s0 + s1 + X[(i + 9) & 0xf]; + T1 += h + Sigma1(e) + Ch(e, f, g) + K512[i]; + T2 = Sigma0(a) + Maj(a, b, c); + + h = g; + g = f; + f = e; + e = d + T1; + d = c; + c = b; + b = a; + a = T1 + T2; + } + + state[0] += a; + state[1] += b; + state[2] += c; + state[3] += d; + state[4] += e; + state[5] += f; + state[6] += g; + state[7] += h; + } + + return (uint8_t*)(state); +} + +// int main () +//{ +// return 0; +// } diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/sp1/Cargo.lock b/src/test/app/wasm_fixtures/wasm_fixtures/sp1/Cargo.lock new file mode 100644 index 0000000000..4374624cd2 --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/sp1/Cargo.lock @@ -0,0 +1,1384 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anstream" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" + +[[package]] +name = "anstyle-parse" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" +dependencies = [ + "windows-sys 0.60.2", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.60.2", +] + +[[package]] +name = "anyhow" +version = "1.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" + +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitflags" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" + +[[package]] +name = "blake3" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bumpalo" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + +[[package]] +name = "bytemuck" +version = "1.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f154e572231cb6ba2bd1176980827e3d5dc04cc183a75dea38109fbdd672d29" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "camino" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "cc" +version = "1.2.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3a42d84bb6b69d3a8b3eaacf0d88f179e1929695e1ad012b6cf64d9caaa5fd2" +dependencies = [ + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" + +[[package]] +name = "chrono" +version = "0.4.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "windows-link", +] + +[[package]] +name = "clap" +version = "4.5.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50fd97c9dc2399518aa331917ac6f274280ec5eb34e555dd291899745c48ec6f" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c35b5830294e1fa0462034af85cc95225a4cb07092c088c55bda3147cfcd8f65" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" + +[[package]] +name = "colorchoice" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", + "subtle", +] + +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest", + "ff", + "generic-array", + "group", + "hkdf", + "rand_core", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "ff" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +dependencies = [ + "rand_core", + "subtle", +] + +[[package]] +name = "gcd" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core", + "subtle", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "js-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] + +[[package]] +name = "libc" +version = "0.2.174" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" + +[[package]] +name = "libredox" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" +dependencies = [ + "bitflags", + "libc", +] + +[[package]] +name = "log" +version = "0.4.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" + +[[package]] +name = "memchr" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "p3-baby-bear" +version = "0.2.2-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49ecc3edc6fb8186268e05031c26a8b2b1e567957d63adcae1026d55d6bb189b" +dependencies = [ + "num-bigint", + "p3-field", + "p3-mds", + "p3-poseidon2", + "p3-symmetric", + "rand", + "serde", +] + +[[package]] +name = "p3-dft" +version = "0.2.2-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eece7b035978976138622b116fefe6c4cc372b1ce70739c40e7a351a9bb68f1f" +dependencies = [ + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "tracing", +] + +[[package]] +name = "p3-field" +version = "0.2.2-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f0edf3fde4fd0d1455e901fc871c558010ae18db6e68f1b0fa111391855316" +dependencies = [ + "itertools", + "num-bigint", + "num-traits", + "p3-util", + "rand", + "serde", +] + +[[package]] +name = "p3-matrix" +version = "0.2.2-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60961b4d7ffd2e8412ce4e66e213de610356df71cc4e396519c856a664138a27" +dependencies = [ + "itertools", + "p3-field", + "p3-maybe-rayon", + "p3-util", + "rand", + "serde", + "tracing", +] + +[[package]] +name = "p3-maybe-rayon" +version = "0.2.2-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bbe762738c382c9483410f52348ab9de41bb42c391e8171643a71486cf1ef8f" + +[[package]] +name = "p3-mds" +version = "0.2.2-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4127956cc6c783b7d021c5c42d5d89456d5f3bda4a7b165fcc2a3fd4e78fbede" +dependencies = [ + "itertools", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-symmetric", + "p3-util", + "rand", +] + +[[package]] +name = "p3-poseidon2" +version = "0.2.2-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be09497da406a98e89dc05c1ce539eeef29541bad61a5b2108a44ffe94dd0b4c" +dependencies = [ + "gcd", + "p3-field", + "p3-mds", + "p3-symmetric", + "rand", + "serde", +] + +[[package]] +name = "p3-symmetric" +version = "0.2.2-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e7d954033f657d48490344ca4b3dbcc054962a0e92831b736666bb2f5e5820b" +dependencies = [ + "itertools", + "p3-field", + "serde", +] + +[[package]] +name = "p3-util" +version = "0.2.2-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a6ce0b6bee23fd54e05306f6752ae80b0b71a91166553ab39d7899801497237" +dependencies = [ + "serde", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro2" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom", + "libredox", + "thiserror 1.0.69", +] + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustversion" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "subtle", + "zeroize", +] + +[[package]] +name = "semver" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +dependencies = [ + "serde", +] + +[[package]] +name = "serde" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.142" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "sp1" +version = "0.0.1" +dependencies = [ + "sp1-verifier", +] + +[[package]] +name = "sp1-build" +version = "4.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05372b4e3eecca255ba8e385f8dc294861a3b4ea0b0a9946873e39941011db4c" +dependencies = [ + "anyhow", + "cargo_metadata", + "chrono", + "clap", + "dirs", +] + +[[package]] +name = "sp1-lib" +version = "4.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e166e94b13146c65de433cf29acc1030f021414fbebfc24cd4eeaeb787ba3443" +dependencies = [ + "bincode", + "elliptic-curve", + "serde", + "sp1-primitives", +] + +[[package]] +name = "sp1-primitives" +version = "4.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a85ffe9606bd2cc93575ce608f063ca08521cee9bdebf611914c5b2d90d7412" +dependencies = [ + "bincode", + "blake3", + "cfg-if", + "hex", + "lazy_static", + "num-bigint", + "p3-baby-bear", + "p3-field", + "p3-poseidon2", + "p3-symmetric", + "serde", + "sha2", +] + +[[package]] +name = "sp1-verifier" +version = "4.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d94a7db4a54984acf4d64c6ba55c4698104f02ef213cc21882e233b4409e7155" +dependencies = [ + "blake3", + "cfg-if", + "hex", + "lazy_static", + "sha2", + "sp1-build", + "substrate-bn-succinct", + "thiserror 2.0.12", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "substrate-bn-succinct" +version = "0.6.0-v4.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ac8ce0a40e721f790e2ef99beab32b99b3121c58edaaa140ffd8f1795a6af7" +dependencies = [ + "bytemuck", + "byteorder", + "cfg-if", + "crunchy", + "lazy_static", + "num-bigint", + "rand", + "rustc-hex", + "sp1-lib", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "2.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +dependencies = [ + "thiserror-impl 2.0.12", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +dependencies = [ + "once_cell", +] + +[[package]] +name = "typenum" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" + +[[package]] +name = "unicode-ident" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasm-bindgen" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "windows-core" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.59.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.3", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.53.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" + +[[package]] +name = "zerocopy" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/sp1/Cargo.toml b/src/test/app/wasm_fixtures/wasm_fixtures/sp1/Cargo.toml new file mode 100644 index 0000000000..d730160aea --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/sp1/Cargo.toml @@ -0,0 +1,16 @@ +[package] +edition = "2021" +name = "sp1" +version = "0.0.1" + +[lib] +crate-type = ["cdylib"] + +[dependencies] +sp1-verifier = "4.1.3" + +[profile.release] +opt-level = 3 # "z" for size or "3" for speed +lto = true # Link Time Optimization +codegen-units = 1 # Single unit = better optimization +panic = "abort" # Smaller binary, faster execution diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/sp1/src/lib.rs b/src/test/app/wasm_fixtures/wasm_fixtures/sp1/src/lib.rs new file mode 100644 index 0000000000..f918e4f42d --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/sp1/src/lib.rs @@ -0,0 +1,37 @@ +use sp1_verifier::Groth16Verifier; + +#[no_mangle] +pub fn sp1_groth16_verifier() -> bool { + let groth16_vk = *sp1_verifier::GROTH16_VK_BYTES; + + let proof: Vec = vec![ + 17, 182, 160, 157, 31, 189, 116, 200, 17, 224, 230, 34, 195, 108, 230, 185, 62, 91, 181, + 212, 80, 111, 197, 89, 247, 206, 99, 206, 147, 13, 216, 101, 252, 192, 149, 2, 40, 4, 249, + 44, 97, 227, 127, 36, 244, 18, 27, 75, 248, 3, 45, 11, 103, 45, 183, 204, 61, 217, 19, 208, + 66, 73, 202, 108, 136, 162, 221, 184, 6, 189, 49, 196, 104, 128, 151, 21, 104, 109, 145, + 150, 243, 51, 27, 243, 203, 75, 176, 59, 193, 51, 177, 64, 83, 13, 133, 140, 248, 242, 13, + 24, 12, 103, 126, 112, 244, 181, 129, 246, 52, 110, 134, 57, 149, 23, 163, 43, 202, 7, 164, + 233, 179, 160, 16, 5, 22, 45, 129, 76, 183, 76, 150, 139, 27, 224, 191, 59, 47, 105, 71, + 47, 8, 176, 157, 159, 234, 253, 239, 131, 138, 120, 101, 4, 98, 236, 106, 235, 98, 76, 93, + 220, 174, 153, 58, 216, 28, 141, 129, 191, 188, 40, 184, 225, 22, 61, 75, 139, 159, 162, + 117, 83, 214, 239, 1, 246, 236, 255, 64, 228, 116, 107, 206, 23, 59, 3, 221, 95, 14, 170, + 28, 171, 36, 179, 75, 101, 177, 40, 198, 12, 193, 82, 105, 155, 177, 62, 158, 72, 209, 252, + 51, 169, 109, 32, 121, 179, 194, 73, 164, 14, 8, 206, 181, 9, 5, 38, 74, 136, 97, 0, 89, + 80, 75, 88, 228, 94, 46, 196, 199, 83, 229, 11, 103, 115, 25, 31, 215, 137, 65, 159, 95, + 192, + ]; + + let sp1_public_values = vec![ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 8, + ]; + + let sp1_vkey_hash: String = + "0x00aea8e9c83c73d74036923de1b4a66d18547d58eee4eacfee70235ed291954c".to_string(); + + let _ = Groth16Verifier::verify(&proof, &sp1_public_values, &sp1_vkey_hash, groth16_vk); + + true +} diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/zk_proof/Cargo.lock b/src/test/app/wasm_fixtures/wasm_fixtures/zk_proof/Cargo.lock new file mode 100644 index 0000000000..f042837723 --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/zk_proof/Cargo.lock @@ -0,0 +1,106 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "bls12_381" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7bc6d6292be3a19e6379786dac800f551e5865a5bb51ebbe3064ab80433f403" +dependencies = [ + "ff", + "group", + "pairing", + "rand_core", + "subtle", +] + +[[package]] +name = "ff" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +dependencies = [ + "bitvec", + "rand_core", + "subtle", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core", + "subtle", +] + +[[package]] +name = "pairing" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" +dependencies = [ + "group", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "zk_proof" +version = "0.0.1" +dependencies = [ + "bls12_381", + "group", +] diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/zk_proof/Cargo.toml b/src/test/app/wasm_fixtures/wasm_fixtures/zk_proof/Cargo.toml new file mode 100644 index 0000000000..3e556d4317 --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/zk_proof/Cargo.toml @@ -0,0 +1,19 @@ +[package] +edition = "2021" +name = "zk_proof" +version = "0.0.1" + +[lib] +crate-type = ["cdylib"] + +[dependencies] +# bellman = "=0.14.0" +bls12_381 = "=0.8.0" +group = "0.13.0" + +[profile.release] +# opt-level = 3 # Optimize for time +opt-level = "z" # Optimize for size +lto = true # Enable Link Time Optimization +codegen-units = 1 +panic = "abort" # Remove unnecessary panic machinery diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/zk_proof/src/lib.rs b/src/test/app/wasm_fixtures/wasm_fixtures/zk_proof/src/lib.rs new file mode 100644 index 0000000000..4d44d8e342 --- /dev/null +++ b/src/test/app/wasm_fixtures/wasm_fixtures/zk_proof/src/lib.rs @@ -0,0 +1,254 @@ +use bls12_381::multi_miller_loop; +use bls12_381::Scalar; +use bls12_381::{G1Affine, G2Affine, G2Prepared}; +use group::prime::PrimeCurveAffine; +use group::Curve; + +use std::mem; +use std::os::raw::c_void; +// use std::time::{Instant}; + +// Groth16 proof struct +pub struct Proof { + pub a: G1Affine, + pub b: G2Affine, + pub c: G1Affine, +} + +// Groth16 verification key struct +pub struct VerifyingKey { + pub alpha_g1: G1Affine, + pub beta_g1: G1Affine, + pub beta_g2: G2Affine, + pub gamma_g2: G2Affine, + pub delta_g1: G1Affine, + pub delta_g2: G2Affine, + pub ic: Vec, +} + +#[no_mangle] +pub extern "C" fn allocate(size: usize) -> *mut c_void { + let mut buffer = Vec::with_capacity(size); + let pointer = buffer.as_mut_ptr(); + mem::forget(buffer); + pointer as *mut c_void + // } +} + +#[no_mangle] +fn deserialize_g1_wasm(buffer: &mut Vec) -> G1Affine { + let d_g1 = G1Affine::from_compressed(&buffer[0..48].try_into().unwrap()) + .expect("Failed to deserialize vk"); + + d_g1 +} + +fn deserialize_g2_wasm(buffer: &mut Vec) -> G2Affine { + let d_g2 = G2Affine::from_compressed(&buffer[0..96].try_into().unwrap()) + .expect("Failed to deserialize vk"); + + d_g2 +} + +#[no_mangle] +// pub extern fn bellman_groth16_test(pointer: *mut u8, capacity: usize) -> bool { +pub extern "C" fn bellman_groth16_test() -> bool { + // let mut bytes = Vec::new(); + // unsafe { + // // println!("Test in vm {:?}", pointer); + // let v = Vec::from_raw_parts(pointer, capacity, capacity); //TODO no need to deallocate?? + // bytes.extend_from_slice(&v); + // } + + // Hardcode the input bytes for testing in different WASM VMs + // let bytes = [172, 197, 81, 189, 121, 193, 159, 27, 92, 95, 151, 164, 40, 59, 214, 96, 132, 58, 87, 37, 169, 1, 63, 230, 35, 74, 245, 6, 185, 56, 120, 108, 214, 179, 187, 21, 36, 206, 43, 160, 10, 250, 249, 73, 210, 35, 137, 87, 177, 66, 65, 154, 11, 232, 137, 246, 125, 72, 227, 222, 116, 168, 87, 24, 165, 160, 132, 109, 108, 101, 222, 143, 78, 97, 48, 95, 59, 177, 29, 247, 219, 166, 73, 249, 69, 206, 15, 151, 30, 248, 235, 63, 148, 240, 17, 22, 150, 67, 252, 141, 95, 179, 94, 111, 207, 201, 192, 144, 154, 94, 21, 2, 22, 58, 96, 144, 227, 107, 107, 182, 142, 0, 57, 27, 168, 39, 226, 40, 163, 159, 112, 83, 196, 182, 215, 74, 92, 20, 158, 60, 23, 184, 198, 143, 17, 6, 242, 7, 75, 220, 87, 47, 224, 145, 99, 169, 203, 218, 112, 185, 51, 102, 59, 56, 171, 46, 49, 255, 116, 108, 241, 50, 180, 247, 62, 218, 181, 197, 155, 80, 61, 252, 8, 41, 232, 73, 51, 250, 223, 82, 94, 8, 185, 83, 223, 187, 6, 41, 20, 62, 189, 254, 11, 11, 58, 187, 200, 88, 53, 234, 98, 172, 213, 62, 22, 34, 90, 166, 182, 133, 8, 230, 103, 219, 233, 141, 10, 137, 210, 151, 4, 129, 29, 92, 103, 251, 72, 182, 162, 59, 20, 222, 188, 232, 13, 74, 214, 182, 172, 120, 33, 198, 57, 204, 134, 93, 26, 79, 213, 45, 146, 6, 128, 103, 63, 202, 226, 120, 141, 193, 248, 65, 196, 235, 21, 184, 104, 228, 206, 117, 190, 28, 153, 183, 68, 36, 63, 60, 131, 87, 137, 213, 105, 27, 110, 37, 238, 200, 250, 145, 76, 25, 57, 81, 69, 164, 208, 255, 49, 80, 14, 64, 181, 143, 12, 58, 35, 63, 199, 35, 70, 25, 86, 158, 210, 150, 59, 159, 253, 238, 174, 211, 142, 166, 223, 51, 134, 118, 171, 27, 218, 219, 117, 163, 71, 134, 95, 142, 83, 251, 240, 241, 162, 232, 93, 248, 167, 112, 197, 212, 169, 209, 159, 101, 140, 248, 222, 234, 201, 169, 76, 242, 7, 10, 192, 30, 151, 167, 74, 186, 97, 121, 144, 36, 6, 187, 92, 7, 248, 45, 134, 85, 240, 112, 74, 224, 70, 64, 198, 59, 26, 195, 192, 140, 101, 118, 175, 17, 160, 195, 142, 133, 1, 139, 5, 130, 245, 17, 73, 176, 232, 107, 130, 172, 110, 20, 190, 37, 108, 250, 178, 187, 151, 158, 35, 248, 246, 143, 38, 212, 133, 226, 24, 45, 33, 164, 46, 125, 200, 157, 253, 225, 132, 181, 60, 90, 7, 240, 80, 232, 97, 206, 164, 28, 12, 75, 68, 126, 230, 145, 216, 45, 180, 203, 19, 152, 29, 203, 9, 4, 145, 122, 206, 146, 179, 44, 145, 191, 126, 199, 175, 171, 127, 189, 222, 108, 126, 161, 80, 190, 47, 44, 8, 40, 65, 68, 95, 61, 109, 148, 175, 113, 226, 8, 93, 126, 53, 39, 192, 196, 6, 152, 194, 105, 169, 226, 192, 201, 184, 198, 134, 210, 153, 170, 12, 241, 90, 250, 233, 20, 152, 119, 142, 120, 83, 2, 164, 80, 178, 125, 227, 253, 207, 240, 201, 127, 213, 196, 100, 90, 65, 120, 50, 108, 175, 34, 192, 197, 173, 202, 176, 210, 131, 22, 216, 57, 169, 241, 28, 40, 44, 62, 11, 42, 50, 46, 204, 242, 109, 158, 114, 41, 127, 206, 25, 194, 255, 128, 245, 232, 193, 189, 229, 51, 93, 94, 64, 117, 33, 132, 75, 253, 114, 64, 116, 155, 183, 137, 112, 201, 243, 13, 221, 142, 164, 59, 98, 152, 249, 40, 133, 70, 185, 231, 249, 151, 253, 240, 122, 214, 60, 18, 132, 177, 37, 42, 75, 206, 12, 100, 214, 248, 234, 78, 165, 74, 212, 248, 32, 162, 254, 227, 218, 46, 9, 87, 0, 118, 13, 249, 107, 83, 5, 138, 223, 9, 247, 70, 160, 228, 197, 54, 87, 18, 1, 37, 199, 162, 84, 189, 161, 10, 26, 75, 45, 168, 185, 153, 245, 243, 51, 176, 208, 187, 235, 135, 239, 231, 42, 43, 233, 150, 46, 249, 73, 229, 138, 84, 89, 75, 129, 238, 211, 80, 147, 67, 159, 227, 214, 131, 188, 130, 70, 224, 1, 77, 139, 239, 185, 53, 68, 41, 193, 207, 16, 2, 33, 139, 214, 103, 240, 14, 141, 223, 24, 236, 50, 64, 79, 178, 6, 79, 38, 165, 35, 173, 203, 101, 3, 162, 49, 51, 4, 151, 127, 49, 47, 223, 244, 157, 229, 7, 88, 106, 141, 167, 183, 220, 15, 8, 119, 12, 82, 218, 14, 207, 0, 73, 27, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + let bytes = [ + 147, 235, 138, 182, 249, 146, 149, 28, 58, 36, 144, 99, 188, 155, 153, 135, 239, 79, 76, + 109, 152, 156, 202, 1, 153, 84, 239, 184, 69, 145, 133, 48, 156, 80, 122, 227, 231, 161, + 137, 232, 67, 183, 34, 186, 230, 135, 25, 90, 136, 201, 110, 134, 208, 93, 78, 82, 153, + 239, 208, 236, 160, 231, 192, 150, 215, 128, 193, 255, 107, 39, 133, 12, 136, 148, 119, 17, + 59, 198, 100, 49, 37, 89, 132, 205, 45, 79, 151, 112, 247, 140, 94, 179, 215, 165, 52, 182, + 153, 68, 204, 210, 218, 156, 69, 74, 192, 30, 160, 13, 80, 188, 23, 112, 21, 124, 91, 147, + 21, 140, 217, 226, 248, 60, 182, 119, 18, 34, 32, 41, 181, 128, 165, 97, 168, 76, 98, 44, + 114, 122, 128, 215, 68, 156, 18, 91, 5, 33, 22, 141, 249, 137, 49, 252, 82, 122, 206, 58, + 183, 108, 176, 15, 38, 183, 87, 254, 34, 102, 195, 78, 166, 227, 96, 180, 137, 173, 131, + 178, 179, 25, 89, 159, 5, 73, 125, 24, 25, 86, 227, 19, 184, 117, 228, 173, 150, 1, 82, + 142, 48, 251, 236, 132, 73, 79, 201, 165, 192, 191, 195, 60, 100, 198, 251, 187, 161, 220, + 63, 143, 38, 21, 189, 219, 194, 100, 64, 186, 102, 7, 186, 213, 227, 92, 228, 52, 181, 171, + 223, 222, 218, 206, 221, 22, 15, 46, 77, 175, 34, 43, 221, 110, 21, 89, 149, 213, 68, 242, + 140, 185, 176, 73, 88, 216, 75, 237, 209, 10, 75, 251, 152, 101, 15, 146, 168, 27, 81, 8, + 61, 76, 103, 230, 171, 23, 144, 171, 6, 118, 157, 233, 234, 214, 132, 106, 30, 171, 121, + 77, 147, 175, 170, 62, 48, 251, 12, 221, 202, 109, 80, 97, 180, 27, 45, 87, 162, 19, 168, + 152, 27, 205, 113, 91, 83, 52, 99, 109, 17, 149, 189, 244, 174, 164, 192, 79, 133, 111, + 195, 215, 232, 129, 166, 204, 3, 169, 248, 49, 18, 190, 198, 145, 177, 169, 10, 4, 66, 134, + 46, 11, 163, 170, 94, 230, 234, 234, 43, 122, 51, 230, 100, 106, 149, 228, 208, 217, 87, + 231, 125, 170, 47, 143, 151, 45, 208, 64, 91, 10, 188, 136, 15, 155, 131, 200, 141, 243, + 200, 5, 109, 22, 98, 189, 193, 44, 40, 95, 126, 145, 234, 190, 205, 179, 172, 224, 147, + 253, 238, 162, 157, 60, 126, 9, 174, 34, 16, 161, 197, 60, 243, 211, 241, 78, 114, 51, 167, + 214, 53, 149, 172, 56, 149, 32, 66, 123, 48, 240, 179, 53, 154, 29, 134, 34, 141, 204, 168, + 184, 158, 165, 115, 241, 119, 228, 11, 35, 82, 186, 132, 103, 65, 243, 215, 31, 105, 201, + 191, 155, 210, 53, 194, 76, 63, 199, 181, 28, 138, 181, 181, 211, 145, 15, 139, 244, 38, + 56, 159, 161, 95, 46, 147, 141, 163, 221, 88, 167, 134, 73, 45, 70, 98, 98, 167, 55, 52, + 234, 110, 150, 79, 248, 157, 167, 84, 210, 89, 10, 193, 169, 32, 40, 218, 7, 236, 206, 85, + 178, 174, 157, 132, 181, 192, 119, 60, 205, 46, 217, 120, 97, 59, 82, 121, 11, 189, 21, + 213, 176, 255, 225, 57, 76, 239, 38, 99, 226, 55, 98, 227, 10, 45, 193, 69, 255, 247, 39, + 121, 86, 150, 6, 220, 98, 41, 132, 237, 189, 169, 110, 213, 115, 33, 228, 197, 61, 219, + 202, 58, 54, 70, 223, 179, 208, 139, 232, 103, 76, 165, 169, 68, 6, 148, 47, 244, 26, 203, + 186, 110, 69, 44, 175, 128, 119, 212, 188, 167, 223, 87, 119, 238, 199, 201, 61, 78, 96, + 175, 0, 156, 145, 196, 253, 162, 175, 172, 227, 80, 251, 96, 61, 189, 35, 13, 97, 22, 157, + 86, 249, 128, 148, 172, 66, 80, 172, 208, 222, 131, 0, 207, 80, 163, 27, 155, 113, 57, 186, + 246, 139, 111, 71, 117, 152, 184, 60, 1, 230, 44, 169, 213, 88, 82, 156, 194, 234, 41, 183, + 87, 36, 175, 154, 156, 128, 59, 187, 208, 101, 9, 51, 205, 42, 174, 29, 215, 43, 150, 183, + 129, 125, 2, 84, 210, 149, 245, 126, 140, 166, 255, 134, 116, 162, 107, 82, 178, 158, 38, + 11, 135, 91, 224, 157, 112, 189, 164, 250, 1, 215, 49, 21, 214, 211, 73, 243, 251, 58, 198, + 1, 165, 196, 122, 13, 238, 252, 227, 229, 149, 47, 13, 173, 171, 176, 185, 220, 82, 96, + 163, 4, 36, 199, 152, 88, 3, 162, 49, 51, 4, 151, 127, 49, 47, 223, 244, 157, 229, 7, 88, + 106, 141, 167, 183, 220, 15, 8, 119, 12, 82, 218, 14, 207, 0, 73, 27, 5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + ]; + + // ***** Test deserialization and reconstruction of vk ***** + // let start_key_recons = Instant::now(); + // println!("Start verification key reconstruction"); + + // alpha_g1 + let mut vec_alpha_g1 = bytes[0..48].to_vec(); + let r_alpha_g1 = deserialize_g1_wasm(&mut vec_alpha_g1); + + // beta_g1 + let mut vec_beta_g1 = bytes[48..96].to_vec(); + let r_beta_g1 = deserialize_g1_wasm(&mut vec_beta_g1); + + // beta_g2 + let mut vec_beta_g2 = bytes[96..192].to_vec(); + let r_beta_g2 = deserialize_g2_wasm(&mut vec_beta_g2); + + // gamma_g2 + let mut vec_gamma_g2 = bytes[192..288].to_vec(); + let r_gamma_g2 = deserialize_g2_wasm(&mut vec_gamma_g2); + + // delta_g1 + let mut vec_delta_g1 = bytes[288..336].to_vec(); + let r_delta_g1 = deserialize_g1_wasm(&mut vec_delta_g1); + + // delta_g2 + let mut vec_delta_g2 = bytes[336..432].to_vec(); + let r_delta_g2 = deserialize_g2_wasm(&mut vec_delta_g2); + + // ic + let vec_ic = bytes[432..576].to_vec(); + // println!("\nic vector: {:?}", vec_ic); + let mut r_ic: Vec = Vec::new(); + let mut vec_ic_de = vec_ic[0..48].to_vec(); + r_ic.push(deserialize_g1_wasm(&mut vec_ic_de)); + vec_ic_de = vec_ic[48..96].to_vec(); + r_ic.push(deserialize_g1_wasm(&mut vec_ic_de)); + vec_ic_de = vec_ic[96..144].to_vec(); + r_ic.push(deserialize_g1_wasm(&mut vec_ic_de)); + + // Reconstruct vk + // replace following if using bellman::{groth16, groth16::Proof}; + // let deserialized_vk = groth16::VerifyingKey:: { + let deserialized_vk = VerifyingKey { + alpha_g1: r_alpha_g1, + beta_g1: r_beta_g1, + beta_g2: r_beta_g2, + gamma_g2: r_gamma_g2, + delta_g1: r_delta_g1, + delta_g2: r_delta_g2, + ic: r_ic, + }; + + // Uncomment following if using bellman::{groth16, groth16::Proof}; + // let pvk = groth16::prepare_verifying_key(&deserialized_vk); + // println!("Key reconstruction time: {:?}", start_key_recons.elapsed()); + + // ***** Reconstruct proof ***** + // let start_proof_recons = Instant::now(); + + // proof.g1 + let r_a = G1Affine::from_compressed(&bytes[576..624].try_into().unwrap()) + .expect("Failed to deserialize a"); + // proof.g2 + let r_b = G2Affine::from_compressed(&bytes[624..720].try_into().unwrap()) + .expect("Failed to deserialize b"); + // proof.g1 + let r_c = G1Affine::from_compressed(&bytes[720..768].try_into().unwrap()) + .expect("Failed to deserialize c"); + + // Replace following if using bellman::{groth16, groth16::Proof}; + // let r_proof: Proof = Proof{a: r_a, b: r_b, c: r_c}; + let r_proof: Proof = Proof { + a: r_a, + b: r_b, + c: r_c, + }; + // println!("Proof reconstruction time: {:?}", start_proof_recons.elapsed()); + + // ***** Reconstruct input ***** + // let start_input_recons = Instant::now(); + + let last_64_bytes = &bytes[bytes.len() - 64..]; + + let r_inputs: Vec = last_64_bytes + .chunks(32) // Each Scalar in bls12_381 uses 32 bytes + .map(|chunk| { + Scalar::from_bytes(chunk.try_into().unwrap()).expect("Invalid bytes for Scalar") + }) + .collect(); + + // println!("Input reconstruction time: {:?}", start_input_recons.elapsed()); + + /***** proof verification *****/ + // uncomment following if bellman groth16 is used + // assert!(groth16::verify_proof(&pvk, &r_proof, &r_inputs).is_ok()); + // let start_verify = Instant::now(); + + // Ensure the number of inputs matches the vk.ic length minus 1 (for IC[0]) + if (r_inputs.len() + 1) != deserialized_vk.ic.len() { + return false; + } + + /***** Compute linear combination: input_acc = IC[0] + sum(input[i] * IC[i+1]) *****/ + let mut acc = deserialized_vk.ic[0].to_curve(); // Convert G1Affine to G1Projective + + // Computes multi-scalar multiplication, + // which is a weighted sum of elliptic curve points. + // In Groth16, this builds the point: + // acc = IC₀ + input₁ × IC₁ + input₂ × IC₂ + ... + inputₙ × ICₙ + // Where: ICᵢ are fixed elliptic curve points (from the verifying key). + // inputᵢ are the public inputs to the circuit. + // Example: public_inputs = [x₁, x₂], vk.ic = [IC₀, IC₁, IC₂], acc = IC₀ + x₁ * IC₁ + x₂ * IC₂ + // This binds the public inputs to the proof + for (input, ic_point) in r_inputs.iter().zip(&deserialized_vk.ic[1..]) { + acc += ic_point.to_curve() * input; + } + + let acc_affine = acc.to_affine(); // converts the point acc from projective form back to affine form. + + // Preparing G2 elements for pairing by converting them into G2Prepared format. + let proof_b_prepared = G2Prepared::from(r_proof.b); + let gamma_g2_prepared = G2Prepared::from(deserialized_vk.gamma_g2); + let delta_g2_prepared = G2Prepared::from(deserialized_vk.delta_g2); + let beta_g2_prepared = G2Prepared::from(deserialized_vk.beta_g2); + + // Compute required product of pairings in their Miller loop form + // Groth16 verifier checks if e(A, B) * e(acc, γ)⁻¹ * e(C, δ)⁻¹ * e(α, β)⁻¹ == 1 + // which boils down to + // let start_miller = Instant::now(); + let ml_result = multi_miller_loop(&[ + (&r_proof.a, &proof_b_prepared), // e(A,B) + (&(-acc_affine), &gamma_g2_prepared), // e(acc, γ)⁻¹ + (&(-r_proof.c), &delta_g2_prepared), // e(C, δ)⁻¹ + (&(-deserialized_vk.alpha_g1), &beta_g2_prepared), //e(α, β)⁻¹ + ]); + // println!("Miller time: {:?}", start_miller.elapsed()); + + // let start_final = Instant::now(); + let result = ml_result.final_exponentiation(); + // println!("Final time: {:?}", start_final.elapsed()); + // println!("Proof verification time: {:?}", start_verify.elapsed()); + + // true + result == bls12_381::Gt::identity() +} From 51a9f106d1359b710ad44208cda8da0514f0fb69 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 10 Sep 2025 14:59:09 -0400 Subject: [PATCH 005/137] CODEOWNERS --- .github/CODEOWNERS | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index bc4fe2febd..24620f8d7c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,8 +1,2 @@ # Allow anyone to review any change by default. * - -# Require the rpc-reviewers team to review changes to the rpc code. -include/xrpl/protocol/ @xrplf/rpc-reviewers -src/libxrpl/protocol/ @xrplf/rpc-reviewers -src/xrpld/rpc/ @xrplf/rpc-reviewers -src/xrpld/app/misc/ @xrplf/rpc-reviewers From f03c3aafe425cdb1aa872e3b94852d2b3f41a1d8 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 10 Sep 2025 15:02:48 -0400 Subject: [PATCH 006/137] misc host function files --- include/xrpl/basics/Number.h | 4 + src/libxrpl/basics/Number.cpp | 42 + src/libxrpl/protocol/IOUAmount.cpp | 10 +- src/test/app/HostFuncImpl_test.cpp | 2983 ++++++++++++++++++++++++++++ src/test/app/TestHostFunctions.h | 1049 ++++++++++ 5 files changed, 4080 insertions(+), 8 deletions(-) create mode 100644 src/test/app/HostFuncImpl_test.cpp create mode 100644 src/test/app/TestHostFunctions.h diff --git a/include/xrpl/basics/Number.h b/include/xrpl/basics/Number.h index 41c60d30a1..71deda889d 100644 --- a/include/xrpl/basics/Number.h +++ b/include/xrpl/basics/Number.h @@ -360,6 +360,10 @@ abs(Number x) noexcept Number power(Number const& f, unsigned n); +// logarithm with base 10 +Number +lg(Number const& value); + // Returns f^(1/d) // Uses Newton–Raphson iterations until the result stops changing // to find the root of the polynomial g(x) = x^d - f diff --git a/src/libxrpl/basics/Number.cpp b/src/libxrpl/basics/Number.cpp index f43288b57b..50583cc290 100644 --- a/src/libxrpl/basics/Number.cpp +++ b/src/libxrpl/basics/Number.cpp @@ -623,6 +623,48 @@ power(Number const& f, unsigned n) return r; } +// Continued fraction approximation of ln(x) +static Number +ln(Number const& x, unsigned iterations = 50) +{ + if (x <= 0) + throw std::runtime_error("Not positive value"); + + Number const z = (x - 1) / (x + 1); + Number const zz = z * z; + Number denom = Number(1, -10); + + // Construct the fraction from the bottom up + for (int i = iterations; i > 0; --i) + { + Number k(2 * i - 1); + denom = k - (i * i * zz / denom); + } + + auto const r = 2 * z / denom; + return r; +} + +Number +lg(Number const& x) +{ + static Number const ln10 = ln(Number(10)); + + if (x <= Number(10)) + { + auto const r = ln(x) / ln10; + return r; + } + + // ln(x) = ln(normX * 10^norm) = ln(normX) + norm * ln(10) + int diffExp = 15 + x.exponent(); + Number const normalX = x / Number(1, diffExp); // (1 <= normalX < 10) + auto const lnX = ln(normalX) + diffExp * ln10; + + auto const r = lnX / ln10; + return r; +} + // Returns f^(1/d) // Uses Newton–Raphson iterations until the result stops changing // to find the non-negative root of the polynomial g(x) = x^d - f diff --git a/src/libxrpl/protocol/IOUAmount.cpp b/src/libxrpl/protocol/IOUAmount.cpp index 9bd1ceb5eb..b4f3f18e2e 100644 --- a/src/libxrpl/protocol/IOUAmount.cpp +++ b/src/libxrpl/protocol/IOUAmount.cpp @@ -58,13 +58,6 @@ setSTNumberSwitchover(bool v) *getStaticSTNumberSwitchover() = v; } -/* The range for the mantissa when normalized */ -static std::int64_t constexpr minMantissa = 1000000000000000ull; -static std::int64_t constexpr maxMantissa = 9999999999999999ull; -/* The range for the exponent when normalized */ -static int constexpr minExponent = -96; -static int constexpr maxExponent = 80; - IOUAmount IOUAmount::minPositiveAmount() { @@ -312,7 +305,8 @@ mulRatio( { if (!result) { - return IOUAmount(-minMantissa, minExponent); + return IOUAmount( + -IOUAmount::minMantissa, IOUAmount::minExponent); } // This subtraction cannot underflow because `result` is not zero return IOUAmount(result.mantissa() - 1, result.exponent()); diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp new file mode 100644 index 0000000000..a198ba4af4 --- /dev/null +++ b/src/test/app/HostFuncImpl_test.cpp @@ -0,0 +1,2983 @@ +//------------------------------------------------------------------------------ +/* + This file is part of rippled: https://github.com/ripple/rippled + Copyright (c) 2025 Ripple Labs Inc. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ +//============================================================================== + +#include + +#include + +namespace ripple { +namespace test { + +static Bytes +toBytes(std::uint8_t value) +{ + return {value}; +} + +static Bytes +toBytes(std::uint16_t value) +{ + auto const* b = reinterpret_cast(&value); + auto const* e = reinterpret_cast(&value + 1); + return Bytes{b, e}; +} + +static Bytes +toBytes(std::uint32_t value) +{ + auto const* b = reinterpret_cast(&value); + auto const* e = reinterpret_cast(&value + 1); + return Bytes{b, e}; +} + +static Bytes +toBytes(Asset const& asset) +{ + if (asset.holds()) + { + Serializer s; + auto const& issue = asset.get(); + s.addBitString(issue.currency); + if (!isXRP(issue.currency)) + s.addBitString(issue.account); + auto const data = s.getData(); + return data; + } + + auto const& mptIssue = asset.get(); + auto const& mptID = mptIssue.getMptID(); + return Bytes{mptID.cbegin(), mptID.cend()}; +} + +static Bytes +toBytes(STAmount const& amount) +{ + Serializer msg; + amount.add(msg); + auto const data = msg.getData(); + + return data; +} + +static ApplyContext +createApplyContext( + test::jtx::Env& env, + OpenView& ov, + STTx const& tx = STTx(ttESCROW_FINISH, [](STObject&) {})) +{ + ApplyContext ac{ + env.app(), + ov, + tx, + tesSUCCESS, + env.current()->fees().base, + tapNONE, + env.journal}; + return ac; +} + +struct HostFuncImpl_test : public beast::unit_test::suite +{ + void + testGetLedgerSqn() + { + testcase("getLedgerSqn"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto const result = hfs.getLedgerSqn(); + if (BEAST_EXPECT(result.has_value())) + BEAST_EXPECT(result.value() == env.current()->info().seq); + } + + void + testGetParentLedgerTime() + { + testcase("getParentLedgerTime"); + using namespace test::jtx; + + Env env{*this}; + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + + { + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + auto const result = hfs.getParentLedgerTime(); + if (BEAST_EXPECT(result.has_value())) + BEAST_EXPECT( + result.value() == + env.current() + ->parentCloseTime() + .time_since_epoch() + .count()); + } + + env.close( + env.now() + + std::chrono::seconds(std::numeric_limits::max() - 1)); + { + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + auto const result = hfs.getParentLedgerTime(); + if (BEAST_EXPECTS( + !result.has_value(), std::to_string(result.value()))) + BEAST_EXPECT(result.error() == HostFunctionError::INTERNAL); + } + } + + void + testGetParentLedgerHash() + { + testcase("getParentLedgerHash"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto const result = hfs.getParentLedgerHash(); + if (BEAST_EXPECT(result.has_value())) + BEAST_EXPECT(result.value() == env.current()->info().parentHash); + } + + void + testGetLedgerAccountHash() + { + testcase("getLedgerAccountHash"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto const result = hfs.getLedgerAccountHash(); + if (BEAST_EXPECT(result.has_value())) + BEAST_EXPECT(result.value() == env.current()->info().accountHash); + } + + void + testGetLedgerTransactionHash() + { + testcase("getLedgerTransactionHash"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto const result = hfs.getLedgerTransactionHash(); + if (BEAST_EXPECT(result.has_value())) + BEAST_EXPECT(result.value() == env.current()->info().txHash); + } + + void + testGetBaseFee() + { + testcase("getBaseFee"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto const result = hfs.getBaseFee(); + if (BEAST_EXPECT(result.has_value())) + BEAST_EXPECT(result.value() == env.current()->fees().base.drops()); + + { + Env env2( + *this, + envconfig([](std::unique_ptr cfg) { + cfg->FEES.reference_fee = + static_cast( + std::numeric_limits::max()) + + 1; + return cfg; + }), + testable_amendments()); + // Run past the flag ledger so that a Fee change vote occurs and + // updates FeeSettings. (It also activates all supported + // amendments.) + for (auto i = env.current()->seq(); i <= 257; ++i) + env.close(); + + OpenView ov2{*env2.current()}; + ApplyContext ac2 = createApplyContext(env2, ov2); + WasmHostFunctionsImpl hfs2(ac2, dummyEscrow); + auto const result2 = hfs2.getBaseFee(); + if (BEAST_EXPECT(!result2.has_value())) + BEAST_EXPECT(result2.error() == HostFunctionError::INTERNAL); + } + } + + void + testIsAmendmentEnabled() + { + testcase("isAmendmentEnabled"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + // Use featureSmartEscrow for testing + auto const amendmentId = featureSmartEscrow; + + // Test by id + { + auto const result = hfs.isAmendmentEnabled(amendmentId); + BEAST_EXPECT(result.has_value()); + BEAST_EXPECT(result.value() == 1); + } + + // Test by name + std::string const amendmentName = "SmartEscrow"; + { + auto const result = hfs.isAmendmentEnabled(amendmentName); + BEAST_EXPECT(result.has_value()); + BEAST_EXPECT(result.value() == 1); + } + + // Test with a fake amendment id (all zeros) + uint256 fakeId; + { + auto const result = hfs.isAmendmentEnabled(fakeId); + BEAST_EXPECT(result.has_value()); + BEAST_EXPECT(result.value() == 0); + } + + // Test with a fake amendment name + std::string fakeName = "FakeAmendment"; + { + auto const result = hfs.isAmendmentEnabled(fakeName); + BEAST_EXPECT(result.has_value()); + BEAST_EXPECT(result.value() == 0); + } + } + + void + testCacheLedgerObj() + { + testcase("cacheLedgerObj"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = keylet::escrow(env.master, 2); + auto const accountKeylet = keylet::account(env.master); + { + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + BEAST_EXPECT( + hfs.cacheLedgerObj(accountKeylet.key, -1).error() == + HostFunctionError::SLOT_OUT_RANGE); + BEAST_EXPECT( + hfs.cacheLedgerObj(accountKeylet.key, 257).error() == + HostFunctionError::SLOT_OUT_RANGE); + BEAST_EXPECT( + hfs.cacheLedgerObj(dummyEscrow.key, 0).error() == + HostFunctionError::LEDGER_OBJ_NOT_FOUND); + BEAST_EXPECT(hfs.cacheLedgerObj(accountKeylet.key, 0).value() == 1); + + for (int i = 1; i <= 256; ++i) + { + auto const result = hfs.cacheLedgerObj(accountKeylet.key, i); + BEAST_EXPECT(result.has_value() && result.value() == i); + } + BEAST_EXPECT( + hfs.cacheLedgerObj(accountKeylet.key, 0).error() == + HostFunctionError::SLOTS_FULL); + } + + { + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + for (int i = 1; i <= 256; ++i) + { + auto const result = hfs.cacheLedgerObj(accountKeylet.key, 0); + BEAST_EXPECT(result.has_value() && result.value() == i); + } + BEAST_EXPECT( + hfs.cacheLedgerObj(accountKeylet.key, 0).error() == + HostFunctionError::SLOTS_FULL); + } + } + + void + testGetTxField() + { + testcase("getTxField"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + STTx const stx = STTx(ttESCROW_FINISH, [&](auto& obj) { + obj.setAccountID(sfAccount, env.master.id()); + obj.setAccountID(sfOwner, env.master.id()); + obj.setFieldU32(sfOfferSequence, env.seq(env.master)); + obj.setFieldU32(sfComputationAllowance, 1000); + obj.setFieldArray(sfMemos, STArray{}); + }); + ApplyContext ac = createApplyContext(env, ov, stx); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + + { + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + auto const account = hfs.getTxField(sfAccount); + BEAST_EXPECT( + account && std::ranges::equal(*account, env.master.id())); + + auto const owner = hfs.getTxField(sfOwner); + BEAST_EXPECT(owner && std::ranges::equal(*owner, env.master.id())); + + auto const txType = hfs.getTxField(sfTransactionType); + BEAST_EXPECT(txType && *txType == toBytes(ttESCROW_FINISH)); + + auto const offerSeq = hfs.getTxField(sfOfferSequence); + BEAST_EXPECT(offerSeq && *offerSeq == toBytes(env.seq(env.master))); + + auto const compAllowance = hfs.getTxField(sfComputationAllowance); + std::uint32_t const expectedAllowance = 1000; + BEAST_EXPECT( + compAllowance && *compAllowance == toBytes(expectedAllowance)); + + auto const notPresent = hfs.getTxField(sfDestination); + if (BEAST_EXPECT(!notPresent.has_value())) + BEAST_EXPECT( + notPresent.error() == HostFunctionError::FIELD_NOT_FOUND); + + auto const memos = hfs.getTxField(sfMemos); + if (BEAST_EXPECT(!memos.has_value())) + BEAST_EXPECT( + memos.error() == HostFunctionError::NOT_LEAF_FIELD); + + auto const nonField = hfs.getTxField(sfInvalid); + if (BEAST_EXPECT(!nonField.has_value())) + BEAST_EXPECT( + nonField.error() == HostFunctionError::FIELD_NOT_FOUND); + + auto const nonField2 = hfs.getTxField(sfGeneric); + if (BEAST_EXPECT(!nonField2.has_value())) + BEAST_EXPECT( + nonField2.error() == HostFunctionError::FIELD_NOT_FOUND); + } + + { + auto const iouAsset = env.master["USD"]; + STTx const stx2 = STTx(ttAMM_DEPOSIT, [&](auto& obj) { + obj.setAccountID(sfAccount, env.master.id()); + obj.setFieldIssue(sfAsset, STIssue{sfAsset, xrpIssue()}); + obj.setFieldIssue( + sfAsset2, STIssue{sfAsset2, iouAsset.issue()}); + }); + ApplyContext ac2 = createApplyContext(env, ov, stx2); + WasmHostFunctionsImpl hfs(ac2, dummyEscrow); + + auto const asset = hfs.getTxField(sfAsset); + std::vector expectedAsset(20, 0); + BEAST_EXPECT(asset && *asset == expectedAsset); + + auto const asset2 = hfs.getTxField(sfAsset2); + BEAST_EXPECT(asset2 && *asset2 == toBytes(Asset(iouAsset))); + } + + { + auto const iouAsset = env.master["GBP"]; + auto const mptId = makeMptID(1, env.master); + STTx const stx2 = STTx(ttAMM_DEPOSIT, [&](auto& obj) { + obj.setAccountID(sfAccount, env.master.id()); + obj.setFieldIssue(sfAsset, STIssue{sfAsset, iouAsset.issue()}); + obj.setFieldIssue(sfAsset2, STIssue{sfAsset2, MPTIssue{mptId}}); + }); + ApplyContext ac2 = createApplyContext(env, ov, stx2); + WasmHostFunctionsImpl hfs(ac2, dummyEscrow); + + auto const asset = hfs.getTxField(sfAsset); + if (BEAST_EXPECT(asset.has_value())) + { + BEAST_EXPECT(*asset == toBytes(Asset(iouAsset))); + } + + auto const asset2 = hfs.getTxField(sfAsset2); + if (BEAST_EXPECT(asset2.has_value())) + { + BEAST_EXPECT(*asset2 == toBytes(Asset(mptId))); + } + } + + { + std::uint8_t const expectedScale = 8; + STTx const stx2 = STTx(ttMPTOKEN_ISSUANCE_CREATE, [&](auto& obj) { + obj.setAccountID(sfAccount, env.master.id()); + obj.setFieldU8(sfAssetScale, expectedScale); + }); + ApplyContext ac2 = createApplyContext(env, ov, stx2); + WasmHostFunctionsImpl hfs(ac2, dummyEscrow); + + auto const actualScale = hfs.getTxField(sfAssetScale); + if (BEAST_EXPECT(actualScale.has_value())) + { + BEAST_EXPECT( + std::ranges::equal(*actualScale, toBytes(expectedScale))); + } + } + } + + void + testGetCurrentLedgerObjField() + { + testcase("getCurrentLedgerObjField"); + using namespace test::jtx; + using namespace std::chrono; + + Env env{*this}; + + // Fund the account and create an escrow so the ledger object exists + env(escrow::create(env.master, env.master, XRP(100)), + escrow::finish_time(env.now() + 1s)); + env.close(); + + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + // Find the escrow ledger object + auto const escrowKeylet = + keylet::escrow(env.master, env.seq(env.master) - 1); + BEAST_EXPECT(env.le(escrowKeylet)); + + WasmHostFunctionsImpl hfs(ac, escrowKeylet); + + // Should return the Account field from the escrow ledger object + auto const account = hfs.getCurrentLedgerObjField(sfAccount); + if (BEAST_EXPECTS( + account.has_value(), + std::to_string(static_cast(account.error())))) + BEAST_EXPECT(std::ranges::equal(*account, env.master.id())); + + // Should return the Amount field from the escrow ledger object + auto const amountField = hfs.getCurrentLedgerObjField(sfAmount); + if (BEAST_EXPECT(amountField.has_value())) + { + BEAST_EXPECT(*amountField == toBytes(XRP(100))); + } + + // Should return nullopt for a field not present + auto const notPresent = hfs.getCurrentLedgerObjField(sfOwner); + BEAST_EXPECT( + !notPresent.has_value() && + notPresent.error() == HostFunctionError::FIELD_NOT_FOUND); + + { + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master) + 5); + WasmHostFunctionsImpl hfs2(ac, dummyEscrow); + auto const account = hfs2.getCurrentLedgerObjField(sfAccount); + if (BEAST_EXPECT(!account.has_value())) + { + BEAST_EXPECT( + account.error() == HostFunctionError::LEDGER_OBJ_NOT_FOUND); + } + } + } + + void + testGetLedgerObjField() + { + testcase("getLedgerObjField"); + using namespace test::jtx; + using namespace std::chrono; + + Env env{*this}; + // Fund the account and create an escrow so the ledger object exists + env(escrow::create(env.master, env.master, XRP(100)), + escrow::finish_time(env.now() + 1s)); + env.close(); + + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const accountKeylet = keylet::account(env.master.id()); + auto const escrowKeylet = + keylet::escrow(env.master.id(), env.seq(env.master) - 1); + WasmHostFunctionsImpl hfs(ac, escrowKeylet); + + // Cache the escrow ledger object in slot 1 + auto cacheResult = hfs.cacheLedgerObj(accountKeylet.key, 1); + BEAST_EXPECT(cacheResult.has_value() && cacheResult.value() == 1); + + // Should return the Account field from the cached ledger object + auto const account = hfs.getLedgerObjField(1, sfAccount); + if (BEAST_EXPECTS( + account.has_value(), + std::to_string(static_cast(account.error())))) + BEAST_EXPECT(std::ranges::equal(*account, env.master.id())); + + // Should return the Balance field from the cached ledger object + auto const balanceField = hfs.getLedgerObjField(1, sfBalance); + if (BEAST_EXPECT(balanceField.has_value())) + { + BEAST_EXPECT(*balanceField == toBytes(env.balance(env.master))); + } + + // Should return error for slot out of range + auto const outOfRange = hfs.getLedgerObjField(0, sfAccount); + BEAST_EXPECT( + !outOfRange.has_value() && + outOfRange.error() == HostFunctionError::SLOT_OUT_RANGE); + + auto const tooHigh = hfs.getLedgerObjField(257, sfAccount); + BEAST_EXPECT( + !tooHigh.has_value() && + tooHigh.error() == HostFunctionError::SLOT_OUT_RANGE); + + // Should return error for empty slot + auto const emptySlot = hfs.getLedgerObjField(2, sfAccount); + BEAST_EXPECT( + !emptySlot.has_value() && + emptySlot.error() == HostFunctionError::EMPTY_SLOT); + + // Should return error for field not present + auto const notPresent = hfs.getLedgerObjField(1, sfOwner); + BEAST_EXPECT( + !notPresent.has_value() && + notPresent.error() == HostFunctionError::FIELD_NOT_FOUND); + } + + void + testGetTxNestedField() + { + testcase("getTxNestedField"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + + // Create a transaction with a nested array field + STTx const stx = STTx(ttESCROW_FINISH, [&](auto& obj) { + obj.setAccountID(sfAccount, env.master.id()); + STArray memos; + STObject memoObj(sfMemo); + memoObj.setFieldVL(sfMemoData, Slice("hello", 5)); + memos.push_back(memoObj); + obj.setFieldArray(sfMemos, memos); + }); + + ApplyContext ac = createApplyContext(env, ov, stx); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + { + // Locator for sfMemos[0].sfMemo.sfMemoData + // Locator is a sequence of int32_t codes: + // [sfMemos.fieldCode, 0, sfMemoData.fieldCode] + std::vector locatorVec = { + sfMemos.fieldCode, 0, sfMemoData.fieldCode}; + Slice locator( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); + + auto const result = hfs.getTxNestedField(locator); + if (BEAST_EXPECTS( + result.has_value(), + std::to_string(static_cast(result.error())))) + { + std::string memoData( + result.value().begin(), result.value().end()); + BEAST_EXPECT(memoData == "hello"); + } + } + + { + // can use the nested locator for base fields too + std::vector locatorVec = {sfAccount.fieldCode}; + Slice locator( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); + + auto const account = hfs.getTxNestedField(locator); + if (BEAST_EXPECTS( + account.has_value(), + std::to_string(static_cast(account.error())))) + { + BEAST_EXPECT(std::ranges::equal(*account, env.master.id())); + } + } + + auto expectError = [&](std::vector const& locatorVec, + HostFunctionError expectedError) { + Slice locator( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); + auto const result = hfs.getTxNestedField(locator); + if (BEAST_EXPECT(!result.has_value())) + BEAST_EXPECTS( + result.error() == expectedError, + std::to_string(static_cast(result.error()))); + }; + // Locator for non-existent base field + expectError( + {sfSigners.fieldCode, // sfSigners does not exist + 0, + sfAccount.fieldCode}, + HostFunctionError::FIELD_NOT_FOUND); + + // Locator for non-existent index + expectError( + {sfMemos.fieldCode, + 1, // index 1 does not exist + sfMemoData.fieldCode}, + HostFunctionError::INDEX_OUT_OF_BOUNDS); + + // Locator for non-existent nested field + expectError( + {sfMemos.fieldCode, + 0, + sfURI.fieldCode}, // sfURI does not exist in the memo + HostFunctionError::FIELD_NOT_FOUND); + + // Locator for non-existent base sfield + expectError( + {field_code(20000, 20000), // nonexistent SField code + 0, + sfAccount.fieldCode}, + HostFunctionError::INVALID_FIELD); + + // Locator for non-existent nested sfield + expectError( + {sfMemos.fieldCode, // nonexistent SField code + 0, + field_code(20000, 20000)}, + HostFunctionError::INVALID_FIELD); + + // Locator for STArray + expectError({sfMemos.fieldCode}, HostFunctionError::NOT_LEAF_FIELD); + + // Locator for nesting into non-array/object field + expectError( + {sfAccount.fieldCode, // sfAccount is not an array or object + 0, + sfAccount.fieldCode}, + HostFunctionError::LOCATOR_MALFORMED); + + // Locator for empty locator + expectError({}, HostFunctionError::LOCATOR_MALFORMED); + + // Locator for malformed locator (not multiple of 4) + { + std::vector locatorVec = {sfMemos.fieldCode}; + Slice malformedLocator( + reinterpret_cast(locatorVec.data()), 3); + auto const malformedResult = hfs.getTxNestedField(malformedLocator); + BEAST_EXPECT( + !malformedResult.has_value() && + malformedResult.error() == + HostFunctionError::LOCATOR_MALFORMED); + } + } + + void + testGetCurrentLedgerObjNestedField() + { + testcase("getCurrentLedgerObjNestedField"); + using namespace test::jtx; + + Env env{*this}; + Account const alice("alice"); + Account const becky("becky"); + // Create a SignerList for env.master + env(signers(env.master, 2, {{alice, 1}, {becky, 1}})); + + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + // Find the signer ledger object + auto const signerKeylet = keylet::signers(env.master.id()); + BEAST_EXPECT(env.le(signerKeylet)); + + WasmHostFunctionsImpl hfs(ac, signerKeylet); + + // Locator for base field + std::vector baseLocator = {sfSignerQuorum.fieldCode}; + Slice baseLocatorSlice( + reinterpret_cast(baseLocator.data()), + baseLocator.size() * sizeof(int32_t)); + auto const signerQuorum = + hfs.getCurrentLedgerObjNestedField(baseLocatorSlice); + if (BEAST_EXPECTS( + signerQuorum.has_value(), + std::to_string(static_cast(signerQuorum.error())))) + { + BEAST_EXPECT(*signerQuorum == toBytes(static_cast(2))); + } + + auto expectError = [&](std::vector const& locatorVec, + HostFunctionError expectedError) { + Slice locator( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); + auto const result = hfs.getCurrentLedgerObjNestedField(locator); + if (BEAST_EXPECT(!result.has_value())) + BEAST_EXPECTS( + result.error() == expectedError, + std::to_string(static_cast(result.error()))); + }; + // Locator for non-existent base field + expectError( + {sfSigners.fieldCode, // sfSigners does not exist + 0, + sfAccount.fieldCode}, + HostFunctionError::FIELD_NOT_FOUND); + // Locator for nesting into non-array/object field + expectError( + {sfSignerQuorum + .fieldCode, // sfSignerQuorum is not an array or object + 0, + sfAccount.fieldCode}, + HostFunctionError::LOCATOR_MALFORMED); + + // Locator for empty locator + Slice emptyLocator(nullptr, 0); + auto const emptyResult = + hfs.getCurrentLedgerObjNestedField(emptyLocator); + BEAST_EXPECT( + !emptyResult.has_value() && + emptyResult.error() == HostFunctionError::LOCATOR_MALFORMED); + + // Locator for malformed locator (not multiple of 4) + std::vector malformedLocatorVec = {sfMemos.fieldCode}; + Slice malformedLocator( + reinterpret_cast(malformedLocatorVec.data()), 3); + auto const malformedResult = + hfs.getCurrentLedgerObjNestedField(malformedLocator); + BEAST_EXPECT( + !malformedResult.has_value() && + malformedResult.error() == HostFunctionError::LOCATOR_MALFORMED); + + { + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master) + 5); + WasmHostFunctionsImpl dummyHfs(ac, dummyEscrow); + std::vector const locatorVec = {sfAccount.fieldCode}; + Slice locator( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); + auto const result = + dummyHfs.getCurrentLedgerObjNestedField(locator); + if (BEAST_EXPECT(!result.has_value())) + BEAST_EXPECTS( + result.error() == HostFunctionError::LEDGER_OBJ_NOT_FOUND, + std::to_string(static_cast(result.error()))); + } + } + + void + testGetLedgerObjNestedField() + { + testcase("getLedgerObjNestedField"); + using namespace test::jtx; + + Env env{*this}; + Account const alice("alice"); + Account const becky("becky"); + // Create a SignerList for env.master + env(signers(env.master, 2, {{alice, 1}, {becky, 1}})); + env.close(); + + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + // Cache the SignerList ledger object in slot 1 + auto const signerListKeylet = keylet::signers(env.master.id()); + auto cacheResult = hfs.cacheLedgerObj(signerListKeylet.key, 1); + BEAST_EXPECT(cacheResult.has_value() && cacheResult.value() == 1); + + // Locator for sfSignerEntries[0].sfAccount + { + std::vector const locatorVec = { + sfSignerEntries.fieldCode, 0, sfAccount.fieldCode}; + Slice locator( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); + + auto const result = hfs.getLedgerObjNestedField(1, locator); + if (BEAST_EXPECTS( + result.has_value(), + std::to_string(static_cast(result.error())))) + { + BEAST_EXPECT(std::ranges::equal(*result, alice.id())); + } + } + + // Locator for sfSignerEntries[1].sfAccount + { + std::vector const locatorVec = { + sfSignerEntries.fieldCode, 1, sfAccount.fieldCode}; + Slice const locator = Slice( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); + auto const result2 = hfs.getLedgerObjNestedField(1, locator); + if (BEAST_EXPECTS( + result2.has_value(), + std::to_string(static_cast(result2.error())))) + { + BEAST_EXPECT(std::ranges::equal(*result2, becky.id())); + } + } + + // Locator for sfSignerEntries[0].sfSignerWeight + { + std::vector const locatorVec = { + sfSignerEntries.fieldCode, 0, sfSignerWeight.fieldCode}; + Slice const locator = Slice( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); + auto const weightResult = hfs.getLedgerObjNestedField(1, locator); + if (BEAST_EXPECTS( + weightResult.has_value(), + std::to_string(static_cast(weightResult.error())))) + { + // Should be 1 + auto const expected = toBytes(static_cast(1)); + BEAST_EXPECT(*weightResult == expected); + } + } + + // Locator for base field sfSignerQuorum + { + std::vector const locatorVec = {sfSignerQuorum.fieldCode}; + Slice const locator = Slice( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); + auto const quorumResult = hfs.getLedgerObjNestedField(1, locator); + if (BEAST_EXPECTS( + quorumResult.has_value(), + std::to_string(static_cast(quorumResult.error())))) + { + auto const expected = toBytes(static_cast(2)); + BEAST_EXPECT(*quorumResult == expected); + } + } + + // Helper for error checks + auto expectError = [&](std::vector const& locatorVec, + HostFunctionError expectedError, + int slot = 1) { + Slice const locator( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); + auto const result = hfs.getLedgerObjNestedField(slot, locator); + if (BEAST_EXPECT(!result.has_value())) + BEAST_EXPECTS( + result.error() == expectedError, + std::to_string(static_cast(result.error()))); + }; + + // Error: base field not found + expectError( + {sfSigners.fieldCode, // sfSigners does not exist + 0, + sfAccount.fieldCode}, + HostFunctionError::FIELD_NOT_FOUND); + + // Error: index out of bounds + expectError( + {sfSignerEntries.fieldCode, + 2, // index 2 does not exist + sfAccount.fieldCode}, + HostFunctionError::INDEX_OUT_OF_BOUNDS); + + // Error: nested field not found + expectError( + { + sfSignerEntries.fieldCode, + 0, + sfDestination.fieldCode // sfDestination does not exist + }, + HostFunctionError::FIELD_NOT_FOUND); + + // Error: invalid field code + expectError( + {field_code(99999, 99999), 0, sfAccount.fieldCode}, + HostFunctionError::INVALID_FIELD); + + // Error: invalid nested field code + expectError( + {sfSignerEntries.fieldCode, 0, field_code(99999, 99999)}, + HostFunctionError::INVALID_FIELD); + + // Error: slot out of range + expectError( + {sfSignerQuorum.fieldCode}, HostFunctionError::SLOT_OUT_RANGE, 0); + expectError( + {sfSignerQuorum.fieldCode}, HostFunctionError::SLOT_OUT_RANGE, 257); + + // Error: empty slot + expectError( + {sfSignerQuorum.fieldCode}, HostFunctionError::EMPTY_SLOT, 2); + + // Error: locator for STArray (not leaf field) + expectError( + {sfSignerEntries.fieldCode}, HostFunctionError::NOT_LEAF_FIELD); + + // Error: nesting into non-array/object field + expectError( + {sfSignerQuorum.fieldCode, 0, sfAccount.fieldCode}, + HostFunctionError::LOCATOR_MALFORMED); + + // Error: empty locator + expectError({}, HostFunctionError::LOCATOR_MALFORMED); + + // Error: locator malformed (not multiple of 4) + std::vector const locatorVec = {sfSignerEntries.fieldCode}; + Slice const locator = + Slice(reinterpret_cast(locatorVec.data()), 3); + auto const malformed = hfs.getLedgerObjNestedField(1, locator); + BEAST_EXPECT( + !malformed.has_value() && + malformed.error() == HostFunctionError::LOCATOR_MALFORMED); + } + + void + testGetTxArrayLen() + { + testcase("getTxArrayLen"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + + // Transaction with an array field + STTx stx = STTx(ttESCROW_FINISH, [&](auto& obj) { + obj.setAccountID(sfAccount, env.master.id()); + STArray memos; + { + STObject memoObj(sfMemo); + memoObj.setFieldVL(sfMemoData, Slice("hello", 5)); + memos.push_back(memoObj); + } + { + STObject memoObj(sfMemo); + memoObj.setFieldVL(sfMemoData, Slice("world", 5)); + memos.push_back(memoObj); + } + obj.setFieldArray(sfMemos, memos); + }); + + ApplyContext ac = createApplyContext(env, ov, stx); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + // Should return 1 for sfMemos + auto const memosLen = hfs.getTxArrayLen(sfMemos); + if (BEAST_EXPECT(memosLen.has_value())) + BEAST_EXPECT(memosLen.value() == 2); + + // Should return error for non-array field + auto const notArray = hfs.getTxArrayLen(sfAccount); + if (BEAST_EXPECT(!notArray.has_value())) + BEAST_EXPECT(notArray.error() == HostFunctionError::NO_ARRAY); + + // Should return error for missing array field + auto const missingArray = hfs.getTxArrayLen(sfSigners); + if (BEAST_EXPECT(!missingArray.has_value())) + BEAST_EXPECT( + missingArray.error() == HostFunctionError::FIELD_NOT_FOUND); + } + + void + testGetCurrentLedgerObjArrayLen() + { + testcase("getCurrentLedgerObjArrayLen"); + using namespace test::jtx; + + Env env{*this}; + Account const alice("alice"); + Account const becky("becky"); + // Create a SignerList for env.master + env(signers(env.master, 2, {{alice, 1}, {becky, 1}})); + env.close(); + + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const signerKeylet = keylet::signers(env.master.id()); + WasmHostFunctionsImpl hfs(ac, signerKeylet); + + auto const entriesLen = + hfs.getCurrentLedgerObjArrayLen(sfSignerEntries); + if (BEAST_EXPECT(entriesLen.has_value())) + BEAST_EXPECT(entriesLen.value() == 2); + + auto const arrLen = hfs.getCurrentLedgerObjArrayLen(sfMemos); + if (BEAST_EXPECT(!arrLen.has_value())) + BEAST_EXPECT(arrLen.error() == HostFunctionError::FIELD_NOT_FOUND); + + // Should return NO_ARRAY for non-array field + auto const notArray = hfs.getCurrentLedgerObjArrayLen(sfAccount); + if (BEAST_EXPECT(!notArray.has_value())) + BEAST_EXPECT(notArray.error() == HostFunctionError::NO_ARRAY); + + { + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master) + 5); + WasmHostFunctionsImpl dummyHfs(ac, dummyEscrow); + auto const len = dummyHfs.getCurrentLedgerObjArrayLen(sfMemos); + if (BEAST_EXPECT(!len.has_value())) + BEAST_EXPECT( + len.error() == HostFunctionError::LEDGER_OBJ_NOT_FOUND); + } + } + + void + testGetLedgerObjArrayLen() + { + testcase("getLedgerObjArrayLen"); + using namespace test::jtx; + + Env env{*this}; + Account const alice("alice"); + Account const becky("becky"); + // Create a SignerList for env.master + env(signers(env.master, 2, {{alice, 1}, {becky, 1}})); + env.close(); + + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto const signerListKeylet = keylet::signers(env.master.id()); + auto cacheResult = hfs.cacheLedgerObj(signerListKeylet.key, 1); + BEAST_EXPECT(cacheResult.has_value() && cacheResult.value() == 1); + + { + auto const arrLen = hfs.getLedgerObjArrayLen(1, sfSignerEntries); + if (BEAST_EXPECT(arrLen.has_value())) + // Should return 2 for sfSignerEntries + BEAST_EXPECT(arrLen.value() == 2); + } + { + auto const arrLen = hfs.getLedgerObjArrayLen(0, sfSignerEntries); + if (BEAST_EXPECT(!arrLen.has_value())) + BEAST_EXPECT( + arrLen.error() == HostFunctionError::SLOT_OUT_RANGE); + } + + { + // Should return error for non-array field + auto const notArray = hfs.getLedgerObjArrayLen(1, sfAccount); + if (BEAST_EXPECT(!notArray.has_value())) + BEAST_EXPECT(notArray.error() == HostFunctionError::NO_ARRAY); + } + + { + // Should return error for empty slot + auto const emptySlot = hfs.getLedgerObjArrayLen(2, sfSignerEntries); + if (BEAST_EXPECT(!emptySlot.has_value())) + BEAST_EXPECT( + emptySlot.error() == HostFunctionError::EMPTY_SLOT); + } + + { + // Should return error for missing array field + auto const missingArray = hfs.getLedgerObjArrayLen(1, sfMemos); + if (BEAST_EXPECT(!missingArray.has_value())) + BEAST_EXPECT( + missingArray.error() == HostFunctionError::FIELD_NOT_FOUND); + } + } + + void + testGetTxNestedArrayLen() + { + testcase("getTxNestedArrayLen"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + + STTx stx = STTx(ttESCROW_FINISH, [&](auto& obj) { + STArray memos; + STObject memoObj(sfMemo); + memoObj.setFieldVL(sfMemoData, Slice("hello", 5)); + memos.push_back(memoObj); + obj.setFieldArray(sfMemos, memos); + }); + + ApplyContext ac = createApplyContext(env, ov, stx); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + // Helper for error checks + auto expectError = [&](std::vector const& locatorVec, + HostFunctionError expectedError, + int slot = 1) { + Slice const locator( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); + auto const result = hfs.getTxNestedArrayLen(locator); + if (BEAST_EXPECT(!result.has_value())) + BEAST_EXPECTS( + result.error() == expectedError, + std::to_string(static_cast(result.error()))); + }; + + // Locator for sfMemos + { + std::vector locatorVec = {sfMemos.fieldCode}; + Slice locator( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); + auto const arrLen = hfs.getTxNestedArrayLen(locator); + BEAST_EXPECT(arrLen.has_value() && arrLen.value() == 1); + } + + // Error: non-array field + expectError({sfAccount.fieldCode}, HostFunctionError::NO_ARRAY); + + // Error: missing field + expectError({sfSigners.fieldCode}, HostFunctionError::FIELD_NOT_FOUND); + } + + void + testGetCurrentLedgerObjNestedArrayLen() + { + testcase("getCurrentLedgerObjNestedArrayLen"); + using namespace test::jtx; + + Env env{*this}; + Account const alice("alice"); + Account const becky("becky"); + // Create a SignerList for env.master + env(signers(env.master, 2, {{alice, 1}, {becky, 1}})); + env.close(); + + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const signerKeylet = keylet::signers(env.master.id()); + WasmHostFunctionsImpl hfs(ac, signerKeylet); + + // Helper for error checks + auto expectError = [&](std::vector const& locatorVec, + HostFunctionError expectedError, + int slot = 1) { + Slice const locator( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); + auto const result = hfs.getCurrentLedgerObjNestedArrayLen(locator); + if (BEAST_EXPECT(!result.has_value())) + BEAST_EXPECTS( + result.error() == expectedError, + std::to_string(static_cast(result.error()))); + }; + + // Locator for sfSignerEntries + { + std::vector locatorVec = {sfSignerEntries.fieldCode}; + Slice locator( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); + auto const arrLen = hfs.getCurrentLedgerObjNestedArrayLen(locator); + BEAST_EXPECT(arrLen.has_value() && arrLen.value() == 2); + } + + // Error: non-array field + expectError({sfSignerQuorum.fieldCode}, HostFunctionError::NO_ARRAY); + + // Error: missing field + expectError({sfSigners.fieldCode}, HostFunctionError::FIELD_NOT_FOUND); + + { + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master) + 5); + WasmHostFunctionsImpl dummyHfs(ac, dummyEscrow); + std::vector locatorVec = {sfAccount.fieldCode}; + Slice const locator( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); + auto const result = + dummyHfs.getCurrentLedgerObjNestedArrayLen(locator); + if (BEAST_EXPECT(!result.has_value())) + BEAST_EXPECTS( + result.error() == HostFunctionError::LEDGER_OBJ_NOT_FOUND, + std::to_string(static_cast(result.error()))); + } + } + + void + testGetLedgerObjNestedArrayLen() + { + testcase("getLedgerObjNestedArrayLen"); + using namespace test::jtx; + + Env env{*this}; + Account const alice("alice"); + Account const becky("becky"); + env(signers(env.master, 2, {{alice, 1}, {becky, 1}})); + env.close(); + + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto const signerListKeylet = keylet::signers(env.master.id()); + auto cacheResult = hfs.cacheLedgerObj(signerListKeylet.key, 1); + BEAST_EXPECT(cacheResult.has_value() && cacheResult.value() == 1); + + // Locator for sfSignerEntries + std::vector locatorVec = {sfSignerEntries.fieldCode}; + Slice locator( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); + auto const arrLen = hfs.getLedgerObjNestedArrayLen(1, locator); + if (BEAST_EXPECT(arrLen.has_value())) + BEAST_EXPECT(arrLen.value() == 2); + + // Helper for error checks + auto expectError = [&](std::vector const& locatorVec, + HostFunctionError expectedError, + int slot = 1) { + Slice const locator( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); + auto const result = hfs.getLedgerObjNestedArrayLen(slot, locator); + if (BEAST_EXPECT(!result.has_value())) + BEAST_EXPECTS( + result.error() == expectedError, + std::to_string(static_cast(result.error()))); + }; + + // Error: non-array field + expectError({sfSignerQuorum.fieldCode}, HostFunctionError::NO_ARRAY); + + // Error: missing field + expectError({sfSigners.fieldCode}, HostFunctionError::FIELD_NOT_FOUND); + + // Slot out of range + expectError(locatorVec, HostFunctionError::SLOT_OUT_RANGE, 0); + expectError(locatorVec, HostFunctionError::SLOT_OUT_RANGE, 257); + + // Empty slot + expectError(locatorVec, HostFunctionError::EMPTY_SLOT, 2); + + // Error: empty locator + expectError({}, HostFunctionError::LOCATOR_MALFORMED); + + // Error: locator malformed (not multiple of 4) + Slice malformedLocator( + reinterpret_cast(locator.data()), 3); + auto const malformed = + hfs.getLedgerObjNestedArrayLen(1, malformedLocator); + BEAST_EXPECT( + !malformed.has_value() && + malformed.error() == HostFunctionError::LOCATOR_MALFORMED); + + // Error: locator for non-STArray field + expectError( + {sfSignerQuorum.fieldCode, 0, sfAccount.fieldCode}, + HostFunctionError::LOCATOR_MALFORMED); + } + + void + testUpdateData() + { + testcase("updateData"); + using namespace test::jtx; + + Env env{*this}; + env(escrow::create(env.master, env.master, XRP(100)), + escrow::finish_time(env.now() + std::chrono::seconds(1))); + env.close(); + + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const escrowKeylet = + keylet::escrow(env.master, env.seq(env.master) - 1); + WasmHostFunctionsImpl hfs(ac, escrowKeylet); + + // Should succeed for small data + std::vector data(10, 0x42); + auto const result = hfs.updateData(Slice(data.data(), data.size())); + BEAST_EXPECT(result.has_value() && result.value() == 0); + + // Should fail for too large data + std::vector bigData( + 1024 * 1024 + 1, 0x42); // > maxWasmDataLength + auto const tooBig = + hfs.updateData(Slice(bigData.data(), bigData.size())); + if (BEAST_EXPECT(!tooBig.has_value())) + BEAST_EXPECT( + tooBig.error() == HostFunctionError::DATA_FIELD_TOO_LARGE); + } + + void + testCheckSignature() + { + testcase("checkSignature"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + // Generate a keypair and sign a message + auto const kp = generateKeyPair(KeyType::secp256k1, randomSeed()); + PublicKey const& pk = kp.first; + SecretKey const& sk = kp.second; + std::string const& message = "hello signature"; + auto const sig = sign(pk, sk, Slice(message.data(), message.size())); + + // Should succeed for valid signature + { + auto const result = hfs.checkSignature( + Slice(message.data(), message.size()), + Slice(sig.data(), sig.size()), + Slice(pk.data(), pk.size())); + BEAST_EXPECT(result.has_value()); + BEAST_EXPECT(result.value() == 1); + } + + // Should fail for invalid signature + { + std::string badSig(sig.size(), 0xFF); + auto const result = hfs.checkSignature( + Slice(message.data(), message.size()), + Slice(badSig.data(), badSig.size()), + Slice(pk.data(), pk.size())); + BEAST_EXPECT(result.has_value()); + BEAST_EXPECT(result.value() == 0); + } + + // Should fail for invalid public key + { + std::string badPk(pk.size(), 0x00); + auto const result = hfs.checkSignature( + Slice(message.data(), message.size()), + Slice(sig.data(), sig.size()), + Slice(badPk.data(), badPk.size())); + BEAST_EXPECT(!result.has_value()); + BEAST_EXPECT(result.error() == HostFunctionError::INVALID_PARAMS); + } + + // Should fail for empty public key + { + auto const result = hfs.checkSignature( + Slice(message.data(), message.size()), + Slice(sig.data(), sig.size()), + Slice(nullptr, 0)); + BEAST_EXPECT(!result.has_value()); + BEAST_EXPECT(result.error() == HostFunctionError::INVALID_PARAMS); + } + + // Should fail for empty signature + { + auto const result = hfs.checkSignature( + Slice(message.data(), message.size()), + Slice(nullptr, 0), + Slice(pk.data(), pk.size())); + BEAST_EXPECT(result.has_value()); + BEAST_EXPECT(result.value() == 0); + } + + // Should fail for empty message + { + auto const result = hfs.checkSignature( + Slice(nullptr, 0), + Slice(sig.data(), sig.size()), + Slice(pk.data(), pk.size())); + BEAST_EXPECT(result.has_value()); + BEAST_EXPECT(result.value() == 0); + } + } + + void + testComputeSha512HalfHash() + { + testcase("computeSha512HalfHash"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + std::string data = "hello world"; + auto const result = + hfs.computeSha512HalfHash(Slice(data.data(), data.size())); + BEAST_EXPECT(result.has_value()); + + // Should match direct call to sha512Half + auto expected = sha512Half(Slice(data.data(), data.size())); + BEAST_EXPECT(result.value() == expected); + } + + void + testKeyletFunctions() + { + testcase("keylet functions"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto compareKeylet = [](std::vector const& bytes, + Keylet const& kl) { + return std::ranges::equal(bytes, kl.key); + }; +// Lambda to compare a Bytes (std::vector) to a keylet +#define COMPARE_KEYLET(hfsFunc, keyletFunc, ...) \ + { \ + auto actual = hfs.hfsFunc(__VA_ARGS__); \ + auto expected = keyletFunc(__VA_ARGS__); \ + if (BEAST_EXPECT(actual.has_value())) \ + { \ + BEAST_EXPECT(compareKeylet(actual.value(), expected)); \ + } \ + } +#define COMPARE_KEYLET_FAIL(hfsFunc, expected, ...) \ + { \ + auto actual = hfs.hfsFunc(__VA_ARGS__); \ + if (BEAST_EXPECT(!actual.has_value())) \ + { \ + BEAST_EXPECTS( \ + actual.error() == expected, \ + std::to_string(HfErrorToInt(actual.error()))); \ + } \ + } + + COMPARE_KEYLET(accountKeylet, keylet::account, env.master.id()); + COMPARE_KEYLET_FAIL( + accountKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount()); + + COMPARE_KEYLET( + ammKeylet, keylet::amm, xrpIssue(), env.master["USD"].issue()); + COMPARE_KEYLET_FAIL( + ammKeylet, + HostFunctionError::INVALID_PARAMS, + xrpIssue(), + xrpIssue()); + COMPARE_KEYLET_FAIL( + ammKeylet, + HostFunctionError::INVALID_PARAMS, + makeMptID(1, env.master.id()), + xrpIssue()); + + COMPARE_KEYLET(checkKeylet, keylet::check, env.master.id(), 1); + COMPARE_KEYLET_FAIL( + checkKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); + + std::string const credType = "test"; + COMPARE_KEYLET( + credentialKeylet, + keylet::credential, + env.master.id(), + env.master.id(), + Slice(credType.data(), credType.size())); + + Account const alice("alice"); + constexpr std::string_view longCredType = + "abcdefghijklmnopqrstuvwxyz01234567890qwertyuiop[]" + "asdfghjkl;'zxcvbnm8237tr28weufwldebvfv8734t07p"; + static_assert(longCredType.size() > maxCredentialTypeLength); + COMPARE_KEYLET_FAIL( + credentialKeylet, + HostFunctionError::INVALID_PARAMS, + env.master.id(), + alice.id(), + Slice(longCredType.data(), longCredType.size())); + COMPARE_KEYLET_FAIL( + credentialKeylet, + HostFunctionError::INVALID_ACCOUNT, + xrpAccount(), + alice.id(), + Slice(credType.data(), credType.size())); + COMPARE_KEYLET_FAIL( + credentialKeylet, + HostFunctionError::INVALID_ACCOUNT, + env.master.id(), + xrpAccount(), + Slice(credType.data(), credType.size())); + + COMPARE_KEYLET(didKeylet, keylet::did, env.master.id()); + COMPARE_KEYLET_FAIL( + didKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount()); + + COMPARE_KEYLET( + delegateKeylet, keylet::delegate, env.master.id(), alice.id()); + COMPARE_KEYLET_FAIL( + delegateKeylet, + HostFunctionError::INVALID_PARAMS, + env.master.id(), + env.master.id()); + COMPARE_KEYLET_FAIL( + delegateKeylet, + HostFunctionError::INVALID_ACCOUNT, + env.master.id(), + xrpAccount()); + COMPARE_KEYLET_FAIL( + delegateKeylet, + HostFunctionError::INVALID_ACCOUNT, + xrpAccount(), + env.master.id()); + + COMPARE_KEYLET( + depositPreauthKeylet, + keylet::depositPreauth, + env.master.id(), + alice.id()); + COMPARE_KEYLET_FAIL( + depositPreauthKeylet, + HostFunctionError::INVALID_PARAMS, + env.master.id(), + env.master.id()); + COMPARE_KEYLET_FAIL( + depositPreauthKeylet, + HostFunctionError::INVALID_ACCOUNT, + env.master.id(), + xrpAccount()); + COMPARE_KEYLET_FAIL( + depositPreauthKeylet, + HostFunctionError::INVALID_ACCOUNT, + xrpAccount(), + env.master.id()); + + COMPARE_KEYLET(escrowKeylet, keylet::escrow, env.master.id(), 1); + COMPARE_KEYLET_FAIL( + escrowKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); + + Currency usd = to_currency("USD"); + COMPARE_KEYLET( + lineKeylet, keylet::line, env.master.id(), alice.id(), usd); + COMPARE_KEYLET_FAIL( + lineKeylet, + HostFunctionError::INVALID_PARAMS, + env.master.id(), + env.master.id(), + usd); + COMPARE_KEYLET_FAIL( + lineKeylet, + HostFunctionError::INVALID_ACCOUNT, + env.master.id(), + xrpAccount(), + usd); + COMPARE_KEYLET_FAIL( + lineKeylet, + HostFunctionError::INVALID_ACCOUNT, + xrpAccount(), + env.master.id(), + usd); + COMPARE_KEYLET_FAIL( + lineKeylet, + HostFunctionError::INVALID_PARAMS, + env.master.id(), + alice.id(), + to_currency("")); + + { + auto actual = hfs.mptIssuanceKeylet(env.master.id(), 1); + auto expected = keylet::mptIssuance(1, env.master.id()); + if (BEAST_EXPECT(actual.has_value())) + { + BEAST_EXPECT(compareKeylet(actual.value(), expected)); + } + } + { + auto actual = hfs.mptIssuanceKeylet(xrpAccount(), 1); + if (BEAST_EXPECT(!actual.has_value())) + BEAST_EXPECT( + actual.error() == HostFunctionError::INVALID_ACCOUNT); + } + + auto const sampleMPTID = makeMptID(1, env.master.id()); + COMPARE_KEYLET(mptokenKeylet, keylet::mptoken, sampleMPTID, alice.id()); + COMPARE_KEYLET_FAIL( + mptokenKeylet, + HostFunctionError::INVALID_PARAMS, + MPTID{}, + alice.id()); + COMPARE_KEYLET_FAIL( + mptokenKeylet, + HostFunctionError::INVALID_ACCOUNT, + sampleMPTID, + xrpAccount()); + + COMPARE_KEYLET(nftOfferKeylet, keylet::nftoffer, env.master.id(), 1); + COMPARE_KEYLET_FAIL( + nftOfferKeylet, + HostFunctionError::INVALID_ACCOUNT, + xrpAccount(), + 1); + + COMPARE_KEYLET(offerKeylet, keylet::offer, env.master.id(), 1); + COMPARE_KEYLET_FAIL( + offerKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); + + COMPARE_KEYLET(oracleKeylet, keylet::oracle, env.master.id(), 1); + COMPARE_KEYLET_FAIL( + oracleKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); + + COMPARE_KEYLET( + paychanKeylet, keylet::payChan, env.master.id(), alice.id(), 1); + COMPARE_KEYLET_FAIL( + paychanKeylet, + HostFunctionError::INVALID_PARAMS, + env.master.id(), + env.master.id(), + 1); + COMPARE_KEYLET_FAIL( + paychanKeylet, + HostFunctionError::INVALID_ACCOUNT, + env.master.id(), + xrpAccount(), + 1); + COMPARE_KEYLET_FAIL( + paychanKeylet, + HostFunctionError::INVALID_ACCOUNT, + xrpAccount(), + env.master.id(), + 1); + + COMPARE_KEYLET( + permissionedDomainKeylet, + keylet::permissionedDomain, + env.master.id(), + 1); + COMPARE_KEYLET_FAIL( + permissionedDomainKeylet, + HostFunctionError::INVALID_ACCOUNT, + xrpAccount(), + 1); + + COMPARE_KEYLET(signersKeylet, keylet::signers, env.master.id()); + COMPARE_KEYLET_FAIL( + signersKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount()); + + COMPARE_KEYLET(ticketKeylet, keylet::ticket, env.master.id(), 1); + COMPARE_KEYLET_FAIL( + ticketKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); + + COMPARE_KEYLET(vaultKeylet, keylet::vault, env.master.id(), 1); + COMPARE_KEYLET_FAIL( + vaultKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); + } + + void + testGetNFT() + { + testcase("getNFT"); + using namespace test::jtx; + + Env env{*this}; + Account const alice("alice"); + env.fund(XRP(1000), alice); + env.close(); + + // Mint NFT for alice + uint256 const nftId = token::getNextID(env, alice, 0u, 0u); + std::string const uri = "https://example.com/nft"; + env(token::mint(alice), token::uri(uri)); + env.close(); + uint256 const nftId2 = token::getNextID(env, alice, 0u, 0u); + env(token::mint(alice)); + env.close(); + + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const dummyEscrow = keylet::escrow(alice, env.seq(alice)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + // Should succeed for valid NFT + { + auto const result = hfs.getNFT(alice.id(), nftId); + if (BEAST_EXPECT(result.has_value())) + BEAST_EXPECT(std::ranges::equal(*result, uri)); + } + + // Should fail for invalid account + { + auto const result = hfs.getNFT(xrpAccount(), nftId); + if (BEAST_EXPECT(!result.has_value())) + BEAST_EXPECT( + result.error() == HostFunctionError::INVALID_ACCOUNT); + } + + // Should fail for invalid nftId + { + auto const result = hfs.getNFT(alice.id(), uint256()); + if (BEAST_EXPECT(!result.has_value())) + BEAST_EXPECT( + result.error() == HostFunctionError::INVALID_PARAMS); + } + + // Should fail for invalid nftId + { + auto const badId = token::getNextID(env, alice, 0u, 1u); + auto const result = hfs.getNFT(alice.id(), badId); + if (BEAST_EXPECT(!result.has_value())) + BEAST_EXPECT( + result.error() == HostFunctionError::LEDGER_OBJ_NOT_FOUND); + } + + { + auto const result = hfs.getNFT(alice.id(), nftId2); + if (BEAST_EXPECT(!result.has_value())) + BEAST_EXPECT( + result.error() == HostFunctionError::FIELD_NOT_FOUND); + } + } + + void + testGetNFTIssuer() + { + testcase("getNFTIssuer"); + using namespace test::jtx; + + Env env{*this}; + // Mint NFT for env.master + uint32_t const taxon = 12345; + uint256 const nftId = token::getNextID(env, env.master, taxon); + env(token::mint(env.master, taxon)); + env.close(); + + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + // Should succeed for valid NFT id + { + auto const result = hfs.getNFTIssuer(nftId); + if (BEAST_EXPECT(result.has_value())) + BEAST_EXPECT(std::ranges::equal(*result, env.master.id())); + } + + // Should fail for zero NFT id + { + auto const result = hfs.getNFTIssuer(uint256()); + if (BEAST_EXPECT(!result.has_value())) + BEAST_EXPECT( + result.error() == HostFunctionError::INVALID_PARAMS); + } + } + + void + testGetNFTTaxon() + { + testcase("getNFTTaxon"); + using namespace test::jtx; + + Env env{*this}; + + uint32_t const taxon = 54321; + uint256 const nftId = token::getNextID(env, env.master, taxon); + env(token::mint(env.master, taxon)); + env.close(); + + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto const result = hfs.getNFTTaxon(nftId); + if (BEAST_EXPECT(result.has_value())) + BEAST_EXPECT(result.value() == taxon); + } + + void + testGetNFTFlags() + { + testcase("getNFTFlags"); + using namespace test::jtx; + + Env env{*this}; + + // Mint NFT with default flags + uint256 const nftId = + token::getNextID(env, env.master, 0u, tfTransferable); + env(token::mint(env.master, 0), txflags(tfTransferable)); + env.close(); + + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + { + auto const result = hfs.getNFTFlags(nftId); + if (BEAST_EXPECT(result.has_value())) + BEAST_EXPECT(result.value() == tfTransferable); + } + + // Should return 0 for zero NFT id + { + auto const result = hfs.getNFTFlags(uint256()); + if (BEAST_EXPECT(result.has_value())) + BEAST_EXPECT(result.value() == 0); + } + } + + void + testGetNFTTransferFee() + { + testcase("getNFTTransferFee"); + using namespace test::jtx; + + Env env{*this}; + + uint16_t const transferFee = 250; + uint256 const nftId = + token::getNextID(env, env.master, 0u, tfTransferable, transferFee); + env(token::mint(env.master, 0), + token::xferFee(transferFee), + txflags(tfTransferable)); + env.close(); + + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + { + auto const result = hfs.getNFTTransferFee(nftId); + if (BEAST_EXPECT(result.has_value())) + BEAST_EXPECT(result.value() == transferFee); + } + + // Should return 0 for zero NFT id + { + auto const result = hfs.getNFTTransferFee(uint256()); + if (BEAST_EXPECT(result.has_value())) + BEAST_EXPECT(result.value() == 0); + } + } + + void + testGetNFTSerial() + { + testcase("getNFTSerial"); + using namespace test::jtx; + + Env env{*this}; + + // Mint NFT with serial 0 + uint256 const nftId = token::getNextID(env, env.master, 0u); + auto const serial = env.seq(env.master); + env(token::mint(env.master)); + env.close(); + + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + { + auto const result = hfs.getNFTSerial(nftId); + if (BEAST_EXPECT(result.has_value())) + BEAST_EXPECT(result.value() == serial); + } + + // Should return 0 for zero NFT id + { + auto const result = hfs.getNFTSerial(uint256()); + if (BEAST_EXPECT(result.has_value())) + BEAST_EXPECT(result.value() == 0); + } + } + + void + testTrace() + { + testcase("trace"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + std::string msg = "test trace"; + std::string data = "abc"; + auto const slice = Slice(data.data(), data.size()); + auto const result = hfs.trace(msg, slice, false); + BEAST_EXPECT(result.has_value()); + BEAST_EXPECT(result.value() == msg.size() + data.size()); + + auto const resultHex = hfs.trace(msg, slice, true); + BEAST_EXPECT(resultHex.has_value()); + BEAST_EXPECT(resultHex.value() == msg.size() + data.size() * 2); + } + + void + testTraceNum() + { + testcase("traceNum"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + std::string msg = "trace number"; + int64_t num = 123456789; + auto const result = hfs.traceNum(msg, num); + BEAST_EXPECT(result.has_value()); + BEAST_EXPECT(result.value() == msg.size() + sizeof(num)); + } + + void + testTraceAccount() + { + testcase("traceAccount"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + std::string msg = "trace account"; + // Valid account + { + auto const result = hfs.traceAccount(msg, env.master.id()); + if (BEAST_EXPECT(result.has_value())) + BEAST_EXPECT( + result.value() == + msg.size() + toBase58(env.master.id()).size()); + } + } + + void + testTraceAmount() + { + testcase("traceAmount"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + std::string msg = "trace amount"; + STAmount amount = XRP(12345); + { + auto const result = hfs.traceAmount(msg, amount); + if (BEAST_EXPECT(result.has_value())) + BEAST_EXPECT( + result.value() == msg.size() + amount.getFullText().size()); + } + + // IOU amount + Account const alice("alice"); + env.fund(XRP(1000), alice); + env.close(); + STAmount iouAmount = env.master["USD"](100); + { + auto const result = hfs.traceAmount(msg, iouAmount); + if (BEAST_EXPECT(result.has_value())) + BEAST_EXPECT( + result.value() == + msg.size() + iouAmount.getFullText().size()); + } + + // MPT amount + { + auto const mptId = makeMptID(42, env.master.id()); + Asset mptAsset = Asset(mptId); + STAmount mptAmount(mptAsset, 123456); + auto const result = hfs.traceAmount(msg, mptAmount); + if (BEAST_EXPECT(result.has_value())) + BEAST_EXPECT( + result.value() == + msg.size() + mptAmount.getFullText().size()); + } + } + + // clang-format off + + int const normalExp = 15; + + Bytes const floatIntMin = {0x99, 0x20, 0xc4, 0x9b, 0xa5, 0xe3, 0x53, 0xf8}; // -2^63 + Bytes const floatIntZero = {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // 0 + Bytes const floatIntMax = {0xd9, 0x20, 0xc4, 0x9b, 0xa5, 0xe3, 0x53, 0xf8}; // 2^63-1 + Bytes const floatUIntMax = {0xd9, 0x46, 0x8d, 0xb8, 0xba, 0xc7, 0x10, 0xcb}; // 2^64 + Bytes const floatMaxExp = {0xEC, 0x43, 0x8D, 0x7E, 0xA4, 0xC6, 0x80, 0x00}; // 1e(80+15) + Bytes const floatPreMaxExp = {0xEC, 0x03, 0x8D, 0x7E, 0xA4, 0xC6, 0x80, 0x00}; // 1e(79+15) + Bytes const floatMinusMaxExp = {0xAC, 0x43, 0x8D, 0x7E, 0xA4, 0xC6, 0x80, 0x00}; // -1e(80+15) + Bytes const floatMaxIOU = {0xEC, 0x63, 0x86, 0xF2, 0x6F, 0xC0, 0xFF, 0xFF}; // 1e(81+15)-1 + Bytes const floatMinExp = {0xC0, 0x43, 0x8D, 0x7E, 0xA4, 0xC6, 0x80, 0x00}; // 1e-96 + Bytes const float1 = {0xD4, 0x83, 0x8D, 0x7E, 0xA4, 0xC6, 0x80, 0x00}; // 1 + Bytes const floatMinus1 = {0x94, 0x83, 0x8D, 0x7E, 0xA4, 0xC6, 0x80, 0x00}; // -1 + Bytes const float1More = {0xD4, 0x83, 0x8D, 0x7E, 0xA4, 0xC6, 0x80, 0x01}; // 1.000 000 000 000 001 + Bytes const float2 = {0xD4, 0x87, 0x1A, 0xFD, 0x49, 0x8D, 0x00, 0x00}; // 2 + Bytes const float10 = {0xD4, 0xC3, 0x8D, 0x7E, 0xA4, 0xC6, 0x80, 0x00}; // 10 + Bytes const floatInvalidZero = {0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // INVALID + + std::string const invalid = "invalid_data"; + + // clang-format on + + void + testFloatTrace() + { + testcase("FloatTrace"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + std::string msg = "trace float"; + + { + auto const result = hfs.traceFloat(msg, makeSlice(invalid)); + BEAST_EXPECT( + result && + *result == + msg.size() + 14 /* error msg size*/ + invalid.size() * 2); + } + + { + auto const result = hfs.traceFloat(msg, makeSlice(floatMaxExp)); + BEAST_EXPECT( + result && *result == msg.size() + 19 /* string represenation*/); + } + } + + void + testFloatFromInt() + { + testcase("FloatFromInt"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + { + auto const result = + hfs.floatFromInt(std::numeric_limits::min(), -1); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = + hfs.floatFromInt(std::numeric_limits::min(), 4); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = + hfs.floatFromInt(std::numeric_limits::min(), 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntMin); + } + + { + auto const result = hfs.floatFromInt(0, 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); + } + + { + auto const result = + hfs.floatFromInt(std::numeric_limits::max(), 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntMax); + } + } + + void + testFloatFromUint() + { + testcase("FloatFromUint"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + { + auto const result = + hfs.floatFromUint(std::numeric_limits::min(), -1); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = + hfs.floatFromUint(std::numeric_limits::min(), 4); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = hfs.floatFromUint(0, 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); + } + + { + auto const result = + hfs.floatFromUint(std::numeric_limits::max(), 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatUIntMax); + } + } + + void + testFloatSet() + { + testcase("FloatSet"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + { + auto const result = hfs.floatSet(1, 0, -1); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = hfs.floatSet(1, 0, 4); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = + hfs.floatSet(1, Number::maxExponent + normalExp + 1, 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == + HostFunctionError::FLOAT_COMPUTATION_ERROR); + } + + { + auto const result = + hfs.floatSet(1, IOUAmount::maxExponent + normalExp + 1, 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == + HostFunctionError::FLOAT_COMPUTATION_ERROR); + } + + { + auto const result = + hfs.floatSet(1, IOUAmount::minExponent + normalExp - 1, 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); + } + + { + auto const result = + hfs.floatSet(1, IOUAmount::maxExponent + normalExp, 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMaxExp); + } + + { + auto const result = + hfs.floatSet(-1, IOUAmount::maxExponent + normalExp, 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMinusMaxExp); + } + + { + auto const result = + hfs.floatSet(1, IOUAmount::maxExponent + normalExp - 1, 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatPreMaxExp); + } + + { + auto const result = + hfs.floatSet(IOUAmount::maxMantissa, IOUAmount::maxExponent, 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMaxIOU); + } + + { + auto const result = + hfs.floatSet(1, IOUAmount::minExponent + normalExp, 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMinExp); + } + + { + auto const result = hfs.floatSet(10, -1, 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == float1); + } + } + + void + testFloatCompare() + { + testcase("FloatCompare"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + { + auto const result = hfs.floatCompare(Slice(), Slice()); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = + hfs.floatCompare(makeSlice(floatInvalidZero), Slice()); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = + hfs.floatCompare(makeSlice(float1), makeSlice(invalid)); + BEAST_EXPECT( + !result && + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto x = floatMaxExp; + // exp = 81 + 97 = 178 + x[1] |= 0x80; + x[1] &= 0xBF; + auto const result = + hfs.floatCompare(makeSlice(x), makeSlice(floatMaxExp)); + BEAST_EXPECT( + !result && + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = hfs.floatCompare( + makeSlice(floatIntMin), makeSlice(floatIntZero)); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == 2); + } + + { + auto const result = hfs.floatCompare( + makeSlice(floatIntMax), makeSlice(floatIntZero)); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == 1); + } + + { + auto const result = + hfs.floatCompare(makeSlice(float1), makeSlice(float1)); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == 0); + } + } + + void + testFloatAdd() + { + testcase("floatAdd"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + { + auto const result = hfs.floatAdd(Slice(), Slice(), -1); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = hfs.floatAdd(Slice(), Slice(), 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = + hfs.floatAdd(makeSlice(float1), makeSlice(invalid), 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = + hfs.floatAdd(makeSlice(floatMaxIOU), makeSlice(floatMaxExp), 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == + HostFunctionError::FLOAT_COMPUTATION_ERROR); + } + + { + auto const result = hfs.floatAdd( + makeSlice(floatIntMin), makeSlice(floatIntZero), 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntMin); + } + + { + auto const result = + hfs.floatAdd(makeSlice(floatIntMax), makeSlice(floatIntMin), 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); + } + } + + void + testFloatSubtract() + { + testcase("floatSubtract"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + { + auto const result = hfs.floatSubtract(Slice(), Slice(), -1); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = hfs.floatSubtract(Slice(), Slice(), 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = + hfs.floatSubtract(makeSlice(float1), makeSlice(invalid), 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = hfs.floatSubtract( + makeSlice(floatMaxIOU), makeSlice(floatMinusMaxExp), 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == + HostFunctionError::FLOAT_COMPUTATION_ERROR); + } + + { + auto const result = hfs.floatSubtract( + makeSlice(floatIntMin), makeSlice(floatIntZero), 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntMin); + } + + { + auto const result = hfs.floatSubtract( + makeSlice(floatIntZero), makeSlice(float1), 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMinus1); + } + } + + void + testFloatMultiply() + { + testcase("floatMultiply"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + { + auto const result = hfs.floatMultiply(Slice(), Slice(), -1); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = hfs.floatMultiply(Slice(), Slice(), 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = + hfs.floatMultiply(makeSlice(float1), makeSlice(invalid), 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = hfs.floatMultiply( + makeSlice(floatMaxIOU), makeSlice(float1More), 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == + HostFunctionError::FLOAT_COMPUTATION_ERROR); + } + + { + auto const result = + hfs.floatMultiply(makeSlice(float1), makeSlice(float1), 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == float1); + } + + { + auto const result = hfs.floatMultiply( + makeSlice(floatIntZero), makeSlice(floatMaxIOU), 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); + } + + { + auto const result = hfs.floatMultiply( + makeSlice(float10), makeSlice(floatPreMaxExp), 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMaxExp); + } + } + + void + testFloatDivide() + { + testcase("floatDivide"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + { + auto const result = hfs.floatDivide(Slice(), Slice(), -1); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = hfs.floatDivide(Slice(), Slice(), 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = + hfs.floatDivide(makeSlice(float1), makeSlice(invalid), 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = + hfs.floatDivide(makeSlice(float1), makeSlice(floatIntZero), 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == + HostFunctionError::FLOAT_COMPUTATION_ERROR); + } + + { + auto const y = hfs.floatSet( + IOUAmount::maxMantissa, -normalExp - 1, 0); // 0.9999999... + if (BEAST_EXPECT(y)) + { + auto const result = + hfs.floatDivide(makeSlice(floatMaxIOU), makeSlice(*y), 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == + HostFunctionError::FLOAT_COMPUTATION_ERROR); + } + } + + { + auto const result = + hfs.floatDivide(makeSlice(floatIntZero), makeSlice(float1), 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); + } + + { + auto const result = + hfs.floatDivide(makeSlice(floatMaxExp), makeSlice(float10), 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatPreMaxExp); + } + } + + void + testFloatRoot() + { + testcase("floatRoot"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + { + auto const result = hfs.floatRoot(Slice(), 2, -1); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = hfs.floatRoot(makeSlice(invalid), 3, 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = hfs.floatRoot(makeSlice(float1), -2, 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = hfs.floatRoot(makeSlice(floatIntZero), 2, 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); + } + + { + auto const result = hfs.floatRoot(makeSlice(floatMaxIOU), 1, 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMaxIOU); + } + + { + auto const x = hfs.floatSet(100, 0, 0); // 100 + if (BEAST_EXPECT(x)) + { + auto const result = hfs.floatRoot(makeSlice(*x), 2, 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == float10); + } + } + + { + auto const x = hfs.floatSet(1000, 0, 0); // 1000 + if (BEAST_EXPECT(x)) + { + auto const result = hfs.floatRoot(makeSlice(*x), 3, 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == float10); + } + } + + { + auto const x = hfs.floatSet(1, -2, 0); // 0.01 + auto const y = hfs.floatSet(1, -1, 0); // 0.1 + if (BEAST_EXPECT(x && y)) + { + auto const result = hfs.floatRoot(makeSlice(*x), 2, 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == *y); + } + } + } + + void + testFloatPower() + { + testcase("floatPower"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + { + auto const result = hfs.floatPower(Slice(), 2, -1); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = hfs.floatPower(makeSlice(invalid), 3, 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = hfs.floatPower(makeSlice(float1), -2, 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = hfs.floatPower(makeSlice(floatMaxIOU), 2, 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == + HostFunctionError::FLOAT_COMPUTATION_ERROR); + } + + { + auto const result = + hfs.floatPower(makeSlice(floatMaxIOU), 40000, 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == + HostFunctionError::FLOAT_COMPUTATION_ERROR); + } + + { + auto const result = hfs.floatPower(makeSlice(floatMaxIOU), 0, 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == float1); + } + + { + auto const result = hfs.floatPower(makeSlice(floatMaxIOU), 1, 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMaxIOU); + } + + { + auto const x = hfs.floatSet(100, 0, 0); // 100 + if (BEAST_EXPECT(x)) + { + auto const result = hfs.floatPower(makeSlice(float10), 2, 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == *x); + } + } + + { + auto const x = hfs.floatSet(1, -1, 0); // 0.1 + auto const y = hfs.floatSet(1, -2, 0); // 0.01 + if (BEAST_EXPECT(x && y)) + { + auto const result = hfs.floatPower(makeSlice(*x), 2, 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == *y); + } + } + } + + void + testFloatLog() + { + testcase("floatLog"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + { + auto const result = hfs.floatLog(Slice(), -1); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = hfs.floatLog(makeSlice(invalid), 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const x = + hfs.floatSet(9'500'000'000'000'001, -14, 0); // almost 80+15 + if (BEAST_EXPECT(x)) + { + auto const result = hfs.floatLog(makeSlice(floatMaxExp), 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == *x); + } + } + + { + auto const x = hfs.floatSet(100, 0, 0); // 100 + if (BEAST_EXPECT(x)) + { + auto const result = hfs.floatLog(makeSlice(*x), 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == float2); + } + } + + { + auto const x = hfs.floatSet(1000, 0, 0); // 1000 + auto const y = hfs.floatSet(3, 0, 0); // 0.1 + if (BEAST_EXPECT(x && y)) + { + auto const result = hfs.floatLog(makeSlice(*x), 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == *y); + } + } + + { + auto const x = hfs.floatSet(1, -2, 0); // 0.01 + auto const y = + hfs.floatSet(-1999999993734431, -15, 0); // almost -2 + if (BEAST_EXPECT(x && y)) + { + auto const result = hfs.floatLog(makeSlice(*x), 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == *y); + } + } + } + + void + testFloatNonIOU() + { + testcase("Float Xrp+Mpt"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto const y = hfs.floatSet(20, 0, 0); + if (!BEAST_EXPECT(y)) + return; + + Bytes x(8); + + // XRP + memset(x.data(), 0, x.size()); + x[0] = 0x40; + x[7] = 10; + + { + auto const result = + hfs.floatCompare(makeSlice(x), makeSlice(float10)); + BEAST_EXPECT( + !result && + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = + hfs.floatAdd(makeSlice(float10), makeSlice(x), 0); + BEAST_EXPECT( + !result && + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + // MPT + memset(x.data(), 0, x.size()); + x[0] = 0x60; + x[7] = 10; + + { + auto const result = + hfs.floatCompare(makeSlice(x), makeSlice(float10)); + BEAST_EXPECT( + !result && + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = + hfs.floatAdd(makeSlice(float10), makeSlice(x), 0); + BEAST_EXPECT( + !result && + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + } + + void + testFloats() + { + testFloatFromInt(); + testFloatFromUint(); + testFloatSet(); + testFloatCompare(); + testFloatAdd(); + testFloatSubtract(); + testFloatMultiply(); + testFloatDivide(); + testFloatRoot(); + testFloatPower(); + testFloatLog(); + testFloatNonIOU(); + testFloatTrace(); + } + + void + run() override + { + testGetLedgerSqn(); + testGetParentLedgerTime(); + testGetParentLedgerHash(); + testGetLedgerAccountHash(); + testGetLedgerTransactionHash(); + testGetBaseFee(); + testIsAmendmentEnabled(); + testCacheLedgerObj(); + testGetTxField(); + testGetCurrentLedgerObjField(); + testGetLedgerObjField(); + testGetTxNestedField(); + testGetCurrentLedgerObjNestedField(); + testGetLedgerObjNestedField(); + testGetTxArrayLen(); + testGetCurrentLedgerObjArrayLen(); + testGetLedgerObjArrayLen(); + testGetTxNestedArrayLen(); + testGetCurrentLedgerObjNestedArrayLen(); + testGetLedgerObjNestedArrayLen(); + testUpdateData(); + testCheckSignature(); + testComputeSha512HalfHash(); + testKeyletFunctions(); + testGetNFT(); + testGetNFTIssuer(); + testGetNFTTaxon(); + testGetNFTFlags(); + testGetNFTTransferFee(); + testGetNFTSerial(); + testTrace(); + testTraceNum(); + testTraceAccount(); + testTraceAmount(); + testFloats(); + } +}; + +BEAST_DEFINE_TESTSUITE(HostFuncImpl, app, ripple); + +} // namespace test +} // namespace ripple diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h new file mode 100644 index 0000000000..ae4db59b0d --- /dev/null +++ b/src/test/app/TestHostFunctions.h @@ -0,0 +1,1049 @@ +//------------------------------------------------------------------------------ +/* + This file is part of rippled: https://github.com/ripple/rippled + Copyright (c) 2025 Ripple Labs Inc. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ +//============================================================================== + +#include +#include + +#include +#include +#include +#include +#include + +namespace ripple { + +namespace test { + +struct TestLedgerDataProvider : public HostFunctions +{ + jtx::Env* env_; + void const* rt_ = nullptr; + +public: + TestLedgerDataProvider(jtx::Env* env) : env_(env) + { + } + + virtual void + setRT(void const* rt) override + { + rt_ = rt; + } + + virtual void const* + getRT() const override + { + return rt_; + } + + Expected + getLedgerSqn() override + { + return env_->current()->seq(); + } +}; + +struct TestHostFunctions : public HostFunctions +{ + test::jtx::Env& env_; + AccountID accountID_; + Bytes data_; + int clock_drift_ = 0; + void const* rt_ = nullptr; + +public: + TestHostFunctions(test::jtx::Env& env, int cd = 0) + : env_(env), clock_drift_(cd) + { + accountID_ = env_.master.id(); + std::string t = "10000"; + data_ = Bytes{t.begin(), t.end()}; + } + + virtual void + setRT(void const* rt) override + { + rt_ = rt; + } + + virtual void const* + getRT() const override + { + return rt_; + } + + beast::Journal + getJournal() override + { + return env_.journal; + } + + Expected + getLedgerSqn() override + { + return 12345; + } + + Expected + getParentLedgerTime() override + { + return 67890; + } + + Expected + getParentLedgerHash() override + { + return env_.current()->info().parentHash; + } + + Expected + getLedgerAccountHash() override + { + return env_.current()->info().accountHash; + } + + Expected + getLedgerTransactionHash() override + { + return env_.current()->info().txHash; + } + + Expected + getBaseFee() override + { + return 10; + } + + Expected + isAmendmentEnabled(uint256 const& amendmentId) override + { + return 1; + } + + Expected + isAmendmentEnabled(std::string_view const& amendmentName) override + { + return 1; + } + + virtual Expected + cacheLedgerObj(uint256 const& objId, int32_t cacheIdx) override + { + return 1; + } + + Expected + getTxField(SField const& fname) override + { + if (fname == sfAccount) + return Bytes(accountID_.begin(), accountID_.end()); + else if (fname == sfFee) + { + int64_t x = 235; + uint8_t const* p = reinterpret_cast(&x); + return Bytes{p, p + sizeof(x)}; + } + else if (fname == sfSequence) + { + auto const x = getLedgerSqn(); + if (!x) + return Unexpected(x.error()); + std::uint32_t const data = x.value(); + auto const* b = reinterpret_cast(&data); + auto const* e = reinterpret_cast(&data + 1); + return Bytes{b, e}; + } + return Bytes(); + } + + Expected + getCurrentLedgerObjField(SField const& fname) override + { + auto const& sn = fname.getName(); + if (sn == "Destination" || sn == "Account") + return Bytes(accountID_.begin(), accountID_.end()); + else if (sn == "Data") + return data_; + else if (sn == "FinishAfter") + { + auto t = + env_.current()->parentCloseTime().time_since_epoch().count(); + std::string s = std::to_string(t); + return Bytes{s.begin(), s.end()}; + } + + return Unexpected(HostFunctionError::INTERNAL); + } + + Expected + getLedgerObjField(int32_t cacheIdx, SField const& fname) override + { + if (fname == sfBalance) + { + int64_t x = 10'000; + uint8_t const* p = reinterpret_cast(&x); + return Bytes{p, p + sizeof(x)}; + } + else if (fname == sfAccount) + { + return Bytes(accountID_.begin(), accountID_.end()); + } + return data_; + } + + Expected + getTxNestedField(Slice const& locator) override + { + if (locator.size() == 4) + { + int32_t const* l = reinterpret_cast(locator.data()); + int32_t const sfield = l[0]; + if (sfield == sfAccount.fieldCode) + { + return Bytes(accountID_.begin(), accountID_.end()); + } + } + uint8_t const a[] = {0x2b, 0x6a, 0x23, 0x2a, 0xa4, 0xc4, 0xbe, 0x41, + 0xbf, 0x49, 0xd2, 0x45, 0x9f, 0xa4, 0xa0, 0x34, + 0x7e, 0x1b, 0x54, 0x3a, 0x4c, 0x92, 0xfc, 0xee, + 0x08, 0x21, 0xc0, 0x20, 0x1e, 0x2e, 0x9a, 0x00}; + return Bytes(&a[0], &a[sizeof(a)]); + } + + Expected + getCurrentLedgerObjNestedField(Slice const& locator) override + { + if (locator.size() == 4) + { + int32_t const* l = reinterpret_cast(locator.data()); + int32_t const sfield = l[0]; + if (sfield == sfAccount.fieldCode) + { + return Bytes(accountID_.begin(), accountID_.end()); + } + } + uint8_t const a[] = {0x2b, 0x6a, 0x23, 0x2a, 0xa4, 0xc4, 0xbe, 0x41, + 0xbf, 0x49, 0xd2, 0x45, 0x9f, 0xa4, 0xa0, 0x34, + 0x7e, 0x1b, 0x54, 0x3a, 0x4c, 0x92, 0xfc, 0xee, + 0x08, 0x21, 0xc0, 0x20, 0x1e, 0x2e, 0x9a, 0x00}; + return Bytes(&a[0], &a[sizeof(a)]); + } + + Expected + getLedgerObjNestedField(int32_t cacheIdx, Slice const& locator) override + { + if (locator.size() == 4) + { + int32_t const* l = reinterpret_cast(locator.data()); + int32_t const sfield = l[0]; + if (sfield == sfAccount.fieldCode) + { + return Bytes(accountID_.begin(), accountID_.end()); + } + } + uint8_t const a[] = {0x2b, 0x6a, 0x23, 0x2a, 0xa4, 0xc4, 0xbe, 0x41, + 0xbf, 0x49, 0xd2, 0x45, 0x9f, 0xa4, 0xa0, 0x34, + 0x7e, 0x1b, 0x54, 0x3a, 0x4c, 0x92, 0xfc, 0xee, + 0x08, 0x21, 0xc0, 0x20, 0x1e, 0x2e, 0x9a, 0x00}; + return Bytes(&a[0], &a[sizeof(a)]); + } + + Expected + getTxArrayLen(SField const& fname) override + { + return 32; + } + + Expected + getCurrentLedgerObjArrayLen(SField const& fname) override + { + return 32; + } + + Expected + getLedgerObjArrayLen(int32_t cacheIdx, SField const& fname) override + { + return 32; + } + + Expected + getTxNestedArrayLen(Slice const& locator) override + { + return 32; + } + + Expected + getCurrentLedgerObjNestedArrayLen(Slice const& locator) override + { + return 32; + } + + Expected + getLedgerObjNestedArrayLen(int32_t cacheIdx, Slice const& locator) override + { + return 32; + } + + Expected + updateData(Slice const& data) override + { + return 0; + } + + Expected + checkSignature( + Slice const& message, + Slice const& signature, + Slice const& pubkey) override + { + return 1; + } + + Expected + computeSha512HalfHash(Slice const& data) override + { + return env_.current()->info().parentHash; + } + + Expected + accountKeylet(AccountID const& account) override + { + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::account(account); + return Bytes{keylet.key.begin(), keylet.key.end()}; + } + + Expected + ammKeylet(Asset const& issue1, Asset const& issue2) override + { + if (issue1 == issue2) + return Unexpected(HostFunctionError::INVALID_PARAMS); + if (issue1.holds() || issue2.holds()) + return Unexpected(HostFunctionError::INVALID_PARAMS); + auto const keylet = keylet::amm(issue1, issue2); + return Bytes{keylet.key.begin(), keylet.key.end()}; + } + + Expected + credentialKeylet( + AccountID const& subject, + AccountID const& issuer, + Slice const& credentialType) override + { + if (!subject || !issuer || credentialType.empty() || + credentialType.size() > maxCredentialTypeLength) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::credential(subject, issuer, credentialType); + return Bytes{keylet.key.begin(), keylet.key.end()}; + } + + Expected + escrowKeylet(AccountID const& account, std::uint32_t seq) override + { + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::escrow(account, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; + } + + Expected + oracleKeylet(AccountID const& account, std::uint32_t documentId) override + { + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::oracle(account, documentId); + return Bytes{keylet.key.begin(), keylet.key.end()}; + } + + Expected + getNFT(AccountID const& account, uint256 const& nftId) override + { + if (!account || !nftId) + { + return Unexpected(HostFunctionError::INVALID_PARAMS); + } + + std::string s = "https://ripple.com"; + return Bytes(s.begin(), s.end()); + } + + Expected + getNFTIssuer(uint256 const& nftId) override + { + return Bytes(accountID_.begin(), accountID_.end()); + } + + Expected + getNFTTaxon(uint256 const& nftId) override + { + return 4; + } + + Expected + getNFTFlags(uint256 const& nftId) override + { + return 8; + } + + Expected + getNFTTransferFee(uint256 const& nftId) override + { + return 10; + } + + Expected + getNFTSerial(uint256 const& nftId) override + { + return 4; + } + + Expected + trace(std::string_view const& msg, Slice const& data, bool asHex) override + { +#ifdef DEBUG_OUTPUT + auto& j = std::cerr; +#else + auto j = getJournal().trace(); +#endif + if (!asHex) + { + j << "WAMR TRACE: " << msg << " " + << std::string_view( + reinterpret_cast(data.data()), data.size()); + } + else + { + std::string hex; + hex.reserve(data.size() * 2); + boost::algorithm::hex( + data.begin(), data.end(), std::back_inserter(hex)); + j << "WAMR DEV TRACE: " << msg << " " << hex; + } + +#ifdef DEBUG_OUTPUT + j << std::endl; +#endif + + return msg.size() + data.size() * (asHex ? 2 : 1); + } + + Expected + traceNum(std::string_view const& msg, int64_t data) override + { +#ifdef DEBUG_OUTPUT + auto& j = std::cerr; +#else + auto j = getJournal().trace(); +#endif + j << "WAMR TRACE NUM: " << msg << " " << data; + +#ifdef DEBUG_OUTPUT + j << std::endl; +#endif + return msg.size() + sizeof(data); + } + + Expected + traceAccount(std::string_view const& msg, AccountID const& account) override + { +#ifdef DEBUG_OUTPUT + auto j = getJournal().error(); +#else + auto j = getJournal().trace(); +#endif + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + + auto const accountStr = toBase58(account); + + j << "WAMR TRACE ACCOUNT: " << msg << " " << accountStr; + return msg.size() + accountStr.size(); + } + + Expected + traceFloat(std::string_view const& msg, Slice const& data) override + { +#ifdef DEBUG_OUTPUT + auto& j = std::cerr; +#else + auto j = getJournal().trace(); +#endif + auto const s = floatToString(data); + j << "WAMR TRACE FLOAT: " << msg << " " << s; + +#ifdef DEBUG_OUTPUT + j << std::endl; +#endif + return msg.size() + s.size(); + } + + Expected + traceAmount(std::string_view const& msg, STAmount const& amount) override + { +#ifdef DEBUG_OUTPUT + auto j = getJournal().error(); +#else + auto j = getJournal().trace(); +#endif + auto const amountStr = amount.getFullText(); + j << "WAMR TRACE AMOUNT: " << msg << " " << amountStr; + return msg.size() + amountStr.size(); + } + + Expected + floatFromInt(int64_t x, int32_t mode) override + { + return floatFromIntImpl(x, mode); + } + + Expected + floatFromUint(uint64_t x, int32_t mode) override + { + return floatFromUintImpl(x, mode); + } + + Expected + floatSet(int64_t mantissa, int32_t exponent, int32_t mode) override + { + return floatSetImpl(mantissa, exponent, mode); + } + + Expected + floatCompare(Slice const& x, Slice const& y) override + { + return floatCompareImpl(x, y); + } + + Expected + floatAdd(Slice const& x, Slice const& y, int32_t mode) override + { + return floatAddImpl(x, y, mode); + } + + Expected + floatSubtract(Slice const& x, Slice const& y, int32_t mode) override + { + return floatSubtractImpl(x, y, mode); + } + + Expected + floatMultiply(Slice const& x, Slice const& y, int32_t mode) override + { + return floatMultiplyImpl(x, y, mode); + } + + Expected + floatDivide(Slice const& x, Slice const& y, int32_t mode) override + { + return floatDivideImpl(x, y, mode); + } + + Expected + floatRoot(Slice const& x, int32_t n, int32_t mode) override + { + return floatRootImpl(x, n, mode); + } + + Expected + floatPower(Slice const& x, int32_t n, int32_t mode) override + { + return floatPowerImpl(x, n, mode); + } + + Expected + floatLog(Slice const& x, int32_t mode) override + { + return floatLogImpl(x, mode); + } +}; + +struct TestHostFunctionsSink : public TestHostFunctions +{ + test::StreamSink sink_; + beast::Journal jlog_; + void const* rt_ = nullptr; + +public: + explicit TestHostFunctionsSink(test::jtx::Env& env, int cd = 0) + : TestHostFunctions(env, cd) + , sink_(beast::severities::kDebug) + , jlog_(sink_) + { + } + + test::StreamSink& + getSink() + { + return sink_; + } + + beast::Journal + getJournal() override + { + return jlog_; + } +}; + +struct PerfHostFunctions : public TestHostFunctions +{ + Keylet leKey; + static int constexpr MAX_CACHE = 256; + std::array, MAX_CACHE> cache; + std::shared_ptr tx_; + + void const* rt_ = nullptr; + +public: + PerfHostFunctions( + test::jtx::Env& env, + Keylet const& k, + std::shared_ptr&& tx) + : TestHostFunctions(env), leKey(k), tx_(std::move(tx)) + { + } + + virtual Expected + cacheLedgerObj(uint256 const&, int32_t cacheIdx) override + { + static int32_t intIdx = 0; + + if (cacheIdx < 0 || cacheIdx > MAX_CACHE) + return Unexpected(HostFunctionError::SLOT_OUT_RANGE); + + if (!cacheIdx) + { + for (cacheIdx = 0; cacheIdx < MAX_CACHE; ++cacheIdx) + if (!cache[cacheIdx]) + break; + if (cacheIdx >= MAX_CACHE) + cacheIdx = intIdx++ % MAX_CACHE; + } + else + --cacheIdx; + + if (cacheIdx >= MAX_CACHE) + return Unexpected(HostFunctionError::SLOTS_FULL); + + cache[cacheIdx] = env_.le(leKey); + if (!cache[cacheIdx]) + return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); + return cacheIdx + 1; + } + + static Bytes + getAnyFieldData(STBase const& obj) + { + // auto const& fname = obj.getFName(); + auto const stype = obj.getSType(); + switch (stype) + { + case STI_UNKNOWN: + case STI_NOTPRESENT: + return {}; + break; + case STI_ACCOUNT: { + auto const& super(static_cast(obj)); + auto const& data = super.value(); + return {data.begin(), data.end()}; + } + break; + case STI_AMOUNT: { + auto const& super(static_cast(obj)); + int64_t const data = super.xrp().drops(); + auto const* b = reinterpret_cast(&data); + auto const* e = reinterpret_cast(&data + 1); + return {b, e}; + } + break; + case STI_VL: { + auto const& super(static_cast(obj)); + auto const& data = super.value(); + return {data.begin(), data.end()}; + } + break; + case STI_UINT256: { + auto const& super(static_cast const&>(obj)); + auto const& data = super.value(); + return {data.begin(), data.end()}; + } + break; + case STI_UINT32: { + auto const& super( + static_cast const&>(obj)); + std::uint32_t const data = super.value(); + auto const* b = reinterpret_cast(&data); + auto const* e = reinterpret_cast(&data + 1); + return {b, e}; + } + break; + default: + break; + } + + Serializer msg; + obj.add(msg); + + return msg.getData(); + } + + Expected + getTxField(SField const& fname) override + { + auto const* field = tx_->peekAtPField(fname); + if (!field) + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + if ((STI_OBJECT == field->getSType()) || + (STI_ARRAY == field->getSType())) + return Unexpected(HostFunctionError::NOT_LEAF_FIELD); + + return getAnyFieldData(*field); + } + + Expected + getCurrentLedgerObjField(SField const& fname) override + { + auto const sle = env_.le(leKey); + if (!sle) + return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); + + auto const* field = sle->peekAtPField(fname); + if (!field) + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + if ((STI_OBJECT == field->getSType()) || + (STI_ARRAY == field->getSType())) + return Unexpected(HostFunctionError::NOT_LEAF_FIELD); + + return getAnyFieldData(*field); + } + + Expected + getLedgerObjField(int32_t cacheIdx, SField const& fname) override + { + --cacheIdx; + if (cacheIdx < 0 || cacheIdx >= MAX_CACHE) + return Unexpected(HostFunctionError::SLOT_OUT_RANGE); + + if (!cache[cacheIdx]) + { + // return Unexpected(HostFunctionError::INVALID_SLOT); + cache[cacheIdx] = env_.le(leKey); + } + + auto const* field = cache[cacheIdx]->peekAtPField(fname); + if (!field) + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + if ((STI_OBJECT == field->getSType()) || + (STI_ARRAY == field->getSType())) + return Unexpected(HostFunctionError::NOT_LEAF_FIELD); + + return getAnyFieldData(*field); + } + + static Expected + locateField(STObject const& obj, Slice const& loc) + { + if (loc.empty() || (loc.size() & 3)) // must be multiple of 4 + return Unexpected(HostFunctionError::LOCATOR_MALFORMED); + + int32_t const* l = reinterpret_cast(loc.data()); + int32_t const sz = loc.size() / 4; + STBase const* field = nullptr; + auto const& m = SField::getKnownCodeToField(); + + { + int32_t const c = l[0]; + auto const it = m.find(c); + if (it == m.end()) + return Unexpected(HostFunctionError::LOCATOR_MALFORMED); + auto const& fname(*it->second); + + field = obj.peekAtPField(fname); + if (!field || (STI_NOTPRESENT == field->getSType())) + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + } + + for (int i = 1; i < sz; ++i) + { + int32_t const c = l[i]; + + if (STI_ARRAY == field->getSType()) + { + auto const* arr = static_cast(field); + if (c >= arr->size()) + return Unexpected(HostFunctionError::LOCATOR_MALFORMED); + field = &(arr->operator[](c)); + } + else if (STI_OBJECT == field->getSType()) + { + auto const* o = static_cast(field); + + auto const it = m.find(c); + if (it == m.end()) + return Unexpected(HostFunctionError::LOCATOR_MALFORMED); + auto const& fname(*it->second); + + field = o->peekAtPField(fname); + } + else // simple field must be the last one + { + return Unexpected(HostFunctionError::LOCATOR_MALFORMED); + } + + if (!field || (STI_NOTPRESENT == field->getSType())) + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + } + + return field; + } + + Expected + getTxNestedField(Slice const& locator) override + { + // std::cout << tx_->getJson(JsonOptions::none).toStyledString() << + // std::endl; + auto const r = locateField(*tx_, locator); + if (!r) + return Unexpected(r.error()); + + auto const* field = r.value(); + if ((STI_OBJECT == field->getSType()) || + (STI_ARRAY == field->getSType())) + return Unexpected(HostFunctionError::NOT_LEAF_FIELD); + + return getAnyFieldData(*field); + } + + Expected + getCurrentLedgerObjNestedField(Slice const& locator) override + { + auto const sle = env_.le(leKey); + if (!sle) + return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); + + auto const r = locateField(*sle, locator); + if (!r) + return Unexpected(r.error()); + + auto const* field = r.value(); + if ((STI_OBJECT == field->getSType()) || + (STI_ARRAY == field->getSType())) + return Unexpected(HostFunctionError::NOT_LEAF_FIELD); + + return getAnyFieldData(*field); + } + + Expected + getLedgerObjNestedField(int32_t cacheIdx, Slice const& locator) override + { + --cacheIdx; + if (cacheIdx < 0 || cacheIdx >= MAX_CACHE) + return Unexpected(HostFunctionError::SLOT_OUT_RANGE); + + if (!cache[cacheIdx]) + { + // return Unexpected(HostFunctionError::INVALID_SLOT); + cache[cacheIdx] = env_.le(leKey); + } + + auto const r = locateField(*cache[cacheIdx], locator); + if (!r) + return Unexpected(r.error()); + + auto const* field = r.value(); + if ((STI_OBJECT == field->getSType()) || + (STI_ARRAY == field->getSType())) + return Unexpected(HostFunctionError::NOT_LEAF_FIELD); + + return getAnyFieldData(*field); + } + + Expected + getTxArrayLen(SField const& fname) override + { + if (fname.fieldType != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); + + auto const* field = tx_->peekAtPField(fname); + if (!field) + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + + if (field->getSType() != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); + int32_t const sz = static_cast(field)->size(); + + return sz; + } + + Expected + getCurrentLedgerObjArrayLen(SField const& fname) override + { + if (fname.fieldType != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); + + auto const sle = env_.le(leKey); + if (!sle) + return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); + + auto const* field = sle->peekAtPField(fname); + if (!field) + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + + if (field->getSType() != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); + int32_t const sz = static_cast(field)->size(); + + return sz; + } + + Expected + getLedgerObjArrayLen(int32_t cacheIdx, SField const& fname) override + { + if (fname.fieldType != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); + + if (cacheIdx < 0 || cacheIdx >= MAX_CACHE) + return Unexpected(HostFunctionError::SLOT_OUT_RANGE); + + if (!cache[cacheIdx]) + { + // return Unexpected(HostFunctionError::INVALID_SLOT); + cache[cacheIdx] = env_.le(leKey); + } + + auto const* field = cache[cacheIdx]->peekAtPField(fname); + if (!field) + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + + if (field->getSType() != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); + int32_t const sz = static_cast(field)->size(); + + return sz; + } + + Expected + getTxNestedArrayLen(Slice const& locator) override + { + auto const r = locateField(*tx_, locator); + if (!r) + return Unexpected(r.error()); + auto const* field = r.value(); + + if (field->getSType() != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); + int32_t const sz = static_cast(field)->size(); + + return sz; + } + + Expected + getCurrentLedgerObjNestedArrayLen(Slice const& locator) override + { + auto const sle = env_.le(leKey); + if (!sle) + return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); + auto const r = locateField(*sle, locator); + if (!r) + return Unexpected(r.error()); + auto const* field = r.value(); + + if (field->getSType() != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); + int32_t const sz = static_cast(field)->size(); + + return sz; + } + + Expected + getLedgerObjNestedArrayLen(int32_t cacheIdx, Slice const& locator) override + { + --cacheIdx; + if (cacheIdx < 0 || cacheIdx >= MAX_CACHE) + return Unexpected(HostFunctionError::SLOT_OUT_RANGE); + + if (!cache[cacheIdx]) + { + // return Unexpected(HostFunctionError::INVALID_SLOT); + cache[cacheIdx] = env_.le(leKey); + } + + auto const r = locateField(*cache[cacheIdx], locator); + if (!r) + return Unexpected(r.error()); + + auto const* field = r.value(); + + if (field->getSType() != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); + int32_t const sz = static_cast(field)->size(); + + return sz; + } + + Expected + updateData(Slice const& data) override + { + ripple::detail::ApplyViewBase v( + env_.app().openLedger().current().get(), tapNONE); + + auto sle = v.peek(leKey); + if (!sle) + return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); + + sle->setFieldVL(sfData, data); + v.update(sle); + + return data.size(); + } + + Expected + computeSha512HalfHash(Slice const& data) override + { + auto const hash = sha512Half(data); + return hash; + } + + Expected + getNFT(AccountID const& account, uint256 const& nftId) override + { + if (!account || !nftId) + { + getJournal().trace() << "WAMR getNFT: Invalid account or NFT ID"; + return Unexpected(HostFunctionError::INVALID_PARAMS); + } + + auto obj = nft::findToken(*env_.current(), account, nftId); + if (!obj) + { + getJournal().trace() << "WAMR getNFT: NFT not found"; + return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); + } + + auto ouri = obj->at(~sfURI); + if (!ouri) + return Bytes(); + + Slice const s = ouri->value(); + return Bytes(s.begin(), s.end()); + } +}; + +} // namespace test +} // namespace ripple From b1d70db63b415c9ee9116085043ee2cd4af3eec8 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 10 Sep 2025 15:05:06 -0400 Subject: [PATCH 007/137] limits --- include/xrpl/protocol/Protocol.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/include/xrpl/protocol/Protocol.h b/include/xrpl/protocol/Protocol.h index a0fcfee34c..d52ae2dfc1 100644 --- a/include/xrpl/protocol/Protocol.h +++ b/include/xrpl/protocol/Protocol.h @@ -133,6 +133,13 @@ std::uint8_t constexpr vaultMaximumIOUScale = 18; * another vault; counted from 0 */ std::uint8_t constexpr maxAssetCheckDepth = 5; +/** The maximum length of a Data field in Escrow object that can be updated by + * Wasm code */ +std::size_t constexpr maxWasmDataLength = 4 * 1024; + +/** The maximum length of a parameters passed from Wasm code*/ +std::size_t constexpr maxWasmParamLength = 1024; + /** A ledger index. */ using LedgerIndex = std::uint32_t; From 129aa4bfaa8cd116c9e88855b900ef12de03ce38 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 11 Sep 2025 13:18:42 -0400 Subject: [PATCH 008/137] bring out IOUAmount.h --- include/xrpl/protocol/IOUAmount.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/include/xrpl/protocol/IOUAmount.h b/include/xrpl/protocol/IOUAmount.h index 93fba4150d..c9838a6a80 100644 --- a/include/xrpl/protocol/IOUAmount.h +++ b/include/xrpl/protocol/IOUAmount.h @@ -58,6 +58,13 @@ private: normalize(); public: + /* The range for the mantissa when normalized */ + static std::int64_t constexpr minMantissa = 1000000000000000ull; + static std::int64_t constexpr maxMantissa = 9999999999999999ull; + /* The range for the exponent when normalized */ + static int constexpr minExponent = -96; + static int constexpr maxExponent = 80; + IOUAmount() = default; explicit IOUAmount(Number const& other); IOUAmount(beast::Zero); From 2de848885504087f9220321df7f8fb34f0130150 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 11 Sep 2025 16:02:17 -0400 Subject: [PATCH 009/137] add temBAD_WASM --- include/xrpl/protocol/TER.h | 2 ++ src/libxrpl/protocol/TER.cpp | 1 + 2 files changed, 3 insertions(+) diff --git a/include/xrpl/protocol/TER.h b/include/xrpl/protocol/TER.h index 9ace6b80f8..2df3e72575 100644 --- a/include/xrpl/protocol/TER.h +++ b/include/xrpl/protocol/TER.h @@ -141,6 +141,8 @@ enum TEMcodes : TERUnderlyingType { temARRAY_TOO_LARGE, temBAD_TRANSFER_FEE, temINVALID_INNER_BATCH, + + temBAD_WASM, }; //------------------------------------------------------------------------------ diff --git a/src/libxrpl/protocol/TER.cpp b/src/libxrpl/protocol/TER.cpp index a396949afe..5d62643a13 100644 --- a/src/libxrpl/protocol/TER.cpp +++ b/src/libxrpl/protocol/TER.cpp @@ -220,6 +220,7 @@ transResults() MAKE_ERROR(temARRAY_TOO_LARGE, "Malformed: Array is too large."), MAKE_ERROR(temBAD_TRANSFER_FEE, "Malformed: Transfer fee is outside valid range."), MAKE_ERROR(temINVALID_INNER_BATCH, "Malformed: Invalid inner batch transaction."), + MAKE_ERROR(temBAD_WASM, "Malformed: Provided WASM code is invalid."), MAKE_ERROR(terRETRY, "Retry transaction."), MAKE_ERROR(terFUNDS_SPENT, "DEPRECATED."), From a15d65f7a2c194fc446ab8a79a481d779a13a072 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 11 Sep 2025 16:20:33 -0400 Subject: [PATCH 010/137] update tests --- src/test/app/HostFuncImpl_test.cpp | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index a198ba4af4..f75ad1aa72 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -264,8 +264,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); - // Use featureSmartEscrow for testing - auto const amendmentId = featureSmartEscrow; + // Use featureTokenEscrow for testing + auto const amendmentId = featureTokenEscrow; // Test by id { @@ -275,7 +275,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite } // Test by name - std::string const amendmentName = "SmartEscrow"; + std::string const amendmentName = "TokenEscrow"; { auto const result = hfs.isAmendmentEnabled(amendmentName); BEAST_EXPECT(result.has_value()); @@ -360,7 +360,6 @@ struct HostFuncImpl_test : public beast::unit_test::suite obj.setAccountID(sfAccount, env.master.id()); obj.setAccountID(sfOwner, env.master.id()); obj.setFieldU32(sfOfferSequence, env.seq(env.master)); - obj.setFieldU32(sfComputationAllowance, 1000); obj.setFieldArray(sfMemos, STArray{}); }); ApplyContext ac = createApplyContext(env, ov, stx); @@ -382,11 +381,6 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const offerSeq = hfs.getTxField(sfOfferSequence); BEAST_EXPECT(offerSeq && *offerSeq == toBytes(env.seq(env.master))); - auto const compAllowance = hfs.getTxField(sfComputationAllowance); - std::uint32_t const expectedAllowance = 1000; - BEAST_EXPECT( - compAllowance && *compAllowance == toBytes(expectedAllowance)); - auto const notPresent = hfs.getTxField(sfDestination); if (BEAST_EXPECT(!notPresent.has_value())) BEAST_EXPECT( From bf32dc2e727c3839a323e39c1eafd4f0f1731a02 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 11 Sep 2025 16:28:11 -0400 Subject: [PATCH 011/137] add fixtures files --- src/test/app/wasm_fixtures/fixtures.cpp | 10330 ++++++++++++++++++++++ src/test/app/wasm_fixtures/fixtures.h | 52 + 2 files changed, 10382 insertions(+) create mode 100644 src/test/app/wasm_fixtures/fixtures.cpp create mode 100644 src/test/app/wasm_fixtures/fixtures.h diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp new file mode 100644 index 0000000000..ec91496428 --- /dev/null +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -0,0 +1,10330 @@ +//------------------------------------------------------------------------------ +/* + This file is part of rippled: https://github.com/ripple/rippled + Copyright (c) 2025 Ripple Labs Inc. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ +//============================================================================== + +// TODO: consider moving these to separate files (and figure out the build) + +#include + +extern std::string const fibWasmHex = + "0061736d0100000001090260000060017f017f0303020001071b02115f5f" + "7761736d5f63616c6c5f63746f727300000366696200010a440202000b3f" + "01017f200045044041000f0b2000410348044041010f0b200041026a2100" + "0340200041036b100120016a2101200041026b220041044a0d000b200141" + "016a0b"; + +extern std::string const b58WasmHex = + "0061736d0100000001150460000060017f017f60017f0060047f7f7f7f01" + "7f0305040001020305030100020607017f0041d0080b074906066d656d6f" + "72790200115f5f7761736d5f63616c6c5f63746f7273000008616c6c6f63" + "617465000106655f6461746103000a6465616c6c6f636174650002076235" + "38656e636f00030ae8050402000b3401017f024020004180084a0d0041c0" + "082802002200411f4a0d0041c008200041016a3602002000410a7441d008" + "6a21010b20010b02000baa0501097f41d088060240200341004c0d000340" + "200220066a2d00000d012003200641016a2206470d000b200321060b2003" + "20066b220c418a016c41e4006d220741106a4170716b21090240200c4100" + "480d00200741016a220a410771210541002104200741074f0440200a41f8" + "ffff1f71210a0340200420096a4200370300200a200441086a2204470d00" + "0b0b2005450d00200420096a21040340200441003a0000200441016a2104" + "200541016b22050d000b0b200320064a0440200621052007210403402002" + "20056a2d0000210802402004220a20074e0440200721042008450d010b20" + "0721040340200420096a220b200b2d000041087420086a220b200b413a6d" + "2208413a6c6b3a00002004450440410021040c020b200441016b2204200a" + "4a0d00200b413a6b418d7f490d000b0b200541016a22052003470d000b0b" + "200741016a22022103410021040240200c4100480d000340200420096a2d" + "00000d012002200441016a2204470d000b200221040b2001200320066a20" + "046b4a047f02402006450d002006410771210841002105200641084f0440" + "200641787121010340200020056a42b1e2c48993a6cc9831370000200120" + "0541086a2205470d000b0b2008450d00200020056a21050340200541313a" + "0000200541016a2105200841016b22080d000b0b0240200420074a0d0020" + "0420076a410171047f200405200020066a200420096a2d00004180086a2d" + "00003a0000200641016a2106200441016a0b210520042007460d00200520" + "096a2101200720056b2102200020066a2103417f21040340200320046a22" + "0741016a200120046a220541016a2d00004180086a2d00003a0000200741" + "026a200541026a2d00004180086a2d00003a00002002200441026a220447" + "0d000b200420066a41016a21060b200020066a41003a0000200641016a05" + "41000b0b0b4101004180080b3a3132333435363738394142434445464748" + "4a4b4c4d4e505152535455565758595a6162636465666768696a6b6d6e6f" + "707172737475767778797a00490f7461726765745f666561747572657304" + "2b0f6d757461626c652d676c6f62616c732b087369676e2d6578742b0f72" + "65666572656e63652d74797065732b0a6d756c746976616c7565"; + +extern std::string const sha512PureWasmHex = + "0061736d0100000001130460000060017f017f60017f0060027f7f017f03" + "05040001020305030100020607017f0041800d0b075006066d656d6f7279" + "0200115f5f7761736d5f63616c6c5f63746f7273000008616c6c6f636174" + "65000106655f6461746103000a6465616c6c6f6361746500020e73686135" + "31325f70726f6365737300030aa4060402000b0f0041800d410020004180" + "80024d1b0b02000b8b0602147e037f200141ff006a41ff014f044041c08c" + "06211620014180016d41016bac210b41808d02290300210c41888d022903" + "00210d41908d02290300210e41988d02290300210f41a08d022903002110" + "41a88d02290300211141b08d02290300211241b88d022903002113034041" + "002101200c21092013210a201221082011210520102103200f2115200e21" + "06200d2102034020022107200120166a200020016a290000220242388620" + "024280fe0383422886842002428080fc0783421886200242808080f80f83" + "4208868484200242088842808080f80f832002421888428080fc07838420" + "024228884280fe03832002423888848484220237030020014180086a2903" + "00200a200322044232892004422e89852004421789857c2008220a200442" + "7f858320052208200483847c7c20027c2203200922024224892002421e89" + "85200242198985200220072006221485832006200783857c7c2109200320" + "157c2103200421052006211520072106200141086a2201418001470d000b" + "200020016a21004180092117411e210103402002210620162001410e6b41" + "0f714103746a221820182903002016200141056b410f714103746a290300" + "20162001410d6b410f714103746a2903002202423f892002423889852002" + "420788857c7c20162001410f714103746a2903002202422d892002420389" + "852002420688857c22023703002017290300200a20032205423289200542" + "2e89852005421789857c2005427f852008832004200583847c7c20027c22" + "03200922024224892002421e898520024219898520022006200785832006" + "200783857c7c2109200320147c2103201741086a21172008210a20042108" + "200521042007211420062107200141016a220141de00470d000b41b88d02" + "200a20137c221337030041b08d02200820127c221237030041a88d022004" + "20117c221137030041a08d02200320107c221037030041988d02200f2014" + "7c220f37030041908d022007200e7c220e37030041888d022002200d7c22" + "0d37030041808d022009200c7c220c370300200b420052200b42017d210b" + "0d000b0b41808d020b0b880501004180080b800522ae28d7982f8a42cd65" + "ef23914437712f3b4deccffbc0b5bcdb8981a5dbb5e938b548f35bc25639" + "19d005b6f111f1599b4f19afa4823f9218816ddad55e1cab420203a398aa" + "07d8be6f7045015b83128cb2e44ebe853124e2b4ffd5c37d0c556f897bf2" + "745dbe72b196163bfeb1de803512c725a706dc9b942669cf74f19bc1d24a" + "f19ec1699be4e3254f388647beefb5d58c8bc69dc10f659cac77cca10c24" + "75022b596f2ce92d83e4a66eaa84744ad4fb41bddca9b05cb5531183da88" + "f976abdf66ee52513e981032b42d6dc631a83f21fb98c82703b0e40eefbe" + "c77f59bfc28fa83df30be0c625a70a934791a7d56f8203e05163ca06706e" + "0e0a67292914fc2fd246850ab72726c9265c38211b2eed2ac45afc6d2c4d" + "dfb3959d130d3853de63af8b54730a65a8b2773cbb0a6a76e6aeed472ec9" + "c2813b358214852c72926403f14ca1e8bfa2013042bc4b661aa89197f8d0" + "708b4bc230be5406a3516cc71852efd619e892d110a96555240699d62a20" + "715785350ef4b8d1bb3270a06a10c8d0d2b816c1a41953ab4151086c371e" + "99eb8edf4c774827a8489be1b5bcb034635ac9c5b30c1c39cb8a41e34aaa" + "d84e73e363774fca9c5ba3b8b2d6f36f2e68fcb2ef5dee828f74602f1743" + "6f63a57872abf0a11478c884ec39641a0802c78c281e6323faffbe90e9bd" + "82deeb6c50a41579c6b2f7a3f9be2b5372e3f27871c69c6126eace3e27ca" + "07c2c021c7b886d11eebe0cdd67ddaea78d16eee7f4f7df5ba6f1772aa67" + "f006a698c8a2c57d630aae0df9be04983f111b471c13350b711b847d0423" + "f577db289324c7407babca32bcbec9150abe9e3c4c0d109cc4671d43b642" + "3ecbbed4c54c2a7e65fc9c297f59ecfad63aab6fcb5f1758474a8c19446c" + "00490f7461726765745f6665617475726573042b0f6d757461626c652d67" + "6c6f62616c732b087369676e2d6578742b0f7265666572656e63652d7479" + "7065732b0a6d756c746976616c7565"; + +extern std::string const zkProofWasmHex = + "0061736d0100000001600f60037f7f7f017f60027f7f017f60027f7f0060" + "037f7f7f0060000060057f7f7f7f7f0060047f7f7f7f0060067f7f7f7f7f" + "7f0060017f017f6000017f60017f0060047f7f7f7f017f60027e7e017f60" + "057f7f7f7f7f017f60057f7e7e7e7e00038c018a01030402030202020302" + "030505030206020601000006010606070303080202020302090208020202" + "030a0806020a030b06060202030302020303030203030203020202010302" + "030203060a02000202080a020c0807010d02030206060102020803080302" + "030202020a02060303020a03020301010a0d030101010001010301020604" + "0a0a020200000e000004050170010e0e05030100110619037f01418080c0" + "000b7f0041bd97c0000b7f0041c097c0000b075d06066d656d6f72790200" + "08616c6c6f63617465001b13646573657269616c697a655f67315f776173" + "6d001c1462656c6c6d616e5f67726f746831365f7465737400210a5f5f64" + "6174615f656e6403010b5f5f686561705f6261736503020914010041010b" + "0d15767778717e830111547d137a7b0ad6f3048a014b01017f0240024002" + "4020010d00410021010c010b2002450d01200120026e2203200320026c20" + "01476a21010b2000200136020820004101360204200020013602000f0b10" + "8180808000000b4701017f23808080800041206b22002480808080002000" + "41003602182000410136020c200041e090c0800036020820004204370210" + "200041086a41fc82c0800010a480808000000b0f002000200141e8001083" + "808080000b170002402000450d002001200020026c108d808080000b0b0e" + "002000200141011083808080000b0f002000200141a0021083808080000b" + "0e002000200141201083808080000b4201017f0240200028020822032000" + "280200470d00200020021088808080000b2000280204200341e8006c6a20" + "0141e8001086818080001a2000200341016a3602080b5a01017f23808080" + "800041106b2202248080808000200241086a20002000280200410141e800" + "108b80808000024020022802082200418180808078460d00200020022802" + "0c2001108c80808000000b200241106a2480808080000b6401027f238080" + "80800041106b2203248080808000200341086a20024101410141f081c080" + "00108a8080800020032802082104200328020c2001200210868180800021" + "01200020023602082000200136020420002004360200200341106a248080" + "8080000b6401017f23808080800041106b2205248080808000200541046a" + "200120022003108e8080800020052802082103024020052802040d002000" + "200528020c36020420002003360200200541106a2480808080000f0b2003" + "200528020c2004108c80808000000bfd0102037f017e2380808080004110" + "6b22052480808080004100210602400240200220036a22032002490d0020" + "0441076a417871ad2001280200220741017422022003200220034b1b2202" + "4104200241044b1b2203ad7e2208422088a70d002008a7220241f8ffffff" + "074b0d01024002402007450d00024020040d00200541086a4108200210d7" + "80808000200528020821040c020b2001280204200720046c200210cb8080" + "800021040c010b20054108200210d780808000200528020021040b024020" + "040d00410821060c020b2001200336020020012004360204418180808078" + "21060b0b2000200236020420002006360200200541106a2480808080000b" + "1200024020000d00200210cf808080000b000b6c01027f02400240200041" + "7c6a2802002202417871220341044108200241037122021b20016a490d00" + "02402002450d002003200141276a4b0d020b200010c9808080000f0b41e9" + "92c08000419893c0800010ca80808000000b41a893c0800041d893c08000" + "10ca80808000000bc70103017f017e017f23808080800041106b22042480" + "8080800002400240200220036a417f6a410020026b71ad2001ad7e220542" + "2088a70d002005a7220341808080807820026b4b0d00024020030d002000" + "200236020841002102200041003602040c020b200441086a2002200310d7" + "80808000024020042802082206450d002000200636020820002001360204" + "410021020c020b2000200336020820002002360204410121020c010b2000" + "4100360204410121020b20002002360200200441106a2480808080000b88" + "0303017f097e017f23808080800041306b22022480808080002002420042" + "002001290330220342abd5feffffffbfffb97f56ad7d2204200129033822" + "057d220642ffffcf8aebffffd51e7c220720052003842001290340220884" + "20012903482209842001290350220a842001290358220b8450220c1b3703" + "082002420042abd5feffffffbfffb97f20037d200c1b3703002002420020" + "042004200554ad7d2007200654ad7c423f87220320087d220442a4ecc3b5" + "8fd4b498e7007c2205200c1b3703102002420020032003200854ad7d2005" + "200454ad7c423f87220320097d220442bfa5949ccff0d2bbe4007c220520" + "0c1b3703182002420020032003200954ad7d2005200454ad7c423f872203" + "200a7d220442d7d9ae9ae4f6e98dcb007c2205200c1b3703202002420020" + "032003200a54ad7d2005200454ad7c423f87200b7d429acdffcba3bdc480" + "1a7c200c1b370328200041306a200241e086c0800020012d0060220c1090" + "80808000200020014130108681808000200c3a0060200241306a24808080" + "80000b9e0101027e20002002290328200129032822048542002003ad42ff" + "01837d220583200485370328200020022903202001290320220485200583" + "200485370320200020022903182001290318220485200583200485370318" + "200020022903102001290310220485200583200485370310200020022903" + "082001290308220485200583200485370308200020022903002001290300" + "2204852005832004853703000bec0201057f23808080800041c0006b2202" + "248080808000410121030240200128021c2204418082c080004111200128" + "0220220528020c220611808080800080808080000d000240024020012d00" + "144104710d0041012103200441fa8ec08000410120061180808080008080" + "8080000d02200141e091c080004102109280808000450d010c020b200441" + "fb8ec080004102200611808080800080808080000d014101210320024101" + "3a0017200241186a41086a200141086a290200370300200241186a41106a" + "200141106a290200370300200241186a41186a200141186a280200360200" + "2002200536020c20022004360208200241dc8ec080003602382002200129" + "02003703182002200241176a3602102002200241086a360234200241186a" + "41e091c0800041021092808080000d01200241086a41f88ec08000410210" + "93808080000d010b200441ec8cc080004101200611808080800080808080" + "0021030b200241c0006a24808080800020030bbf0b010b7f024002400240" + "200028020022032000280208220472450d0002402004410171450d002001" + "20026a210502400240200028020c22060d0041002107200121080c010b41" + "00210741002109200121080340200822042005460d020240024020042c00" + "002208417f4c0d00200441016a21080c010b0240200841604f0d00200441" + "026a21080c010b0240200841704f0d00200441036a21080c010b20044104" + "6a21080b200820046b20076a21072006200941016a2209470d000b0b2008" + "2005460d00024020082c00002204417f4a0d0020044160491a0b02400240" + "2007450d00024020072002490d0020072002460d01410021040c020b2001" + "20076a2c000041404e0d00410021040c010b200121040b2007200220041b" + "21022004200120041b21010b024020030d00200028021c20012002200028" + "022028020c11808080800080808080000f0b2000280204210a0240200241" + "10490d0020022001200141036a417c7122076b22096a220b410371210341" + "00210641002104024020012007460d004100210402402009417c4b0d0041" + "0021044100210503402004200120056a22082c000041bf7f4a6a20084101" + "6a2c000041bf7f4a6a200841026a2c000041bf7f4a6a200841036a2c0000" + "41bf7f4a6a2104200541046a22050d000b0b200121080340200420082c00" + "0041bf7f4a6a2104200841016a2108200941016a22090d000b0b02402003" + "450d002007200b417c716a22082c000041bf7f4a210620034101460d0020" + "0620082c000141bf7f4a6a210620034102460d00200620082c000241bf7f" + "4a6a21060b200b4102762105200620046a21060340200721032005450d04" + "200541c001200541c001491b220b410371210c200b410274210d41002108" + "024020054104490d002003200d41f007716a210941002108200321040340" + "200428020c2207417f734107762007410676724181828408712004280208" + "2207417f7341077620074106767241818284087120042802042207417f73" + "41077620074106767241818284087120042802002207417f734107762007" + "4106767241818284087120086a6a6a6a2108200441106a22042009470d00" + "0b0b2005200b6b21052003200d6a2107200841087641ff81fc0771200841" + "ff81fc07716a418180046c41107620066a2106200c450d000b2003200b41" + "fc01714102746a22082802002204417f7341077620044106767241818284" + "08712104200c4101460d0220082802042207417f73410776200741067672" + "41818284087120046a2104200c4102460d0220082802082208417f734107" + "7620084106767241818284087120046a21040c020b024020020d00410021" + "060c030b2002410371210802400240200241044f0d004100210641002109" + "0c010b41002106200121042002410c71220921070340200620042c000041" + "bf7f4a6a200441016a2c000041bf7f4a6a200441026a2c000041bf7f4a6a" + "200441036a2c000041bf7f4a6a2106200441046a21042007417c6a22070d" + "000b0b2008450d02200120096a21040340200620042c000041bf7f4a6a21" + "06200441016a21042008417f6a22080d000c030b0b200028021c20012002" + "200028022028020c11808080800080808080000f0b200441087641ff811c" + "71200441ff81fc07716a418180046c41107620066a21060b02400240200a" + "20064d0d00200a20066b2105024002400240410020002d00182204200441" + "03461b22040e03020001020b20052104410021050c010b20054101762104" + "200541016a41017621050b200441016a2104200028021021092000280220" + "2108200028021c210703402004417f6a2204450d02200720092008280210" + "1181808080008080808000450d000b41010f0b200028021c200120022000" + "28022028020c11808080800080808080000f0b0240200720012002200828" + "020c1180808080008080808000450d0041010f0b41002104034002402005" + "2004470d0020052005490f0b200441016a21042007200920082802101181" + "808080008080808000450d000b2004417f6a2005490bdf04010c7f200141" + "7f6a21032000280204210420002802002105200028020821064100210741" + "002108410021094100210a02400340200a4101710d010240024020092002" + "4b0d000340200120096a210a0240024002400240200220096b220b41074b" + "0d0020022009470d01200221090c050b02400240200a41036a417c71220c" + "200a6b220d450d00410021000340200a20006a2d0000410a460d05200d20" + "0041016a2200470d000b200d200b41786a220e4d0d010c030b200b41786a" + "210e0b03404180828408200c2802002200418a94a8d000736b2000724180" + "828408200c41046a2802002200418a94a8d000736b200072714180818284" + "7871418081828478470d02200c41086a210c200d41086a220d200e4d0d00" + "0c020b0b410021000340200a20006a2d0000410a460d02200b200041016a" + "2200470d000b200221090c030b0240200d200b470d00200221090c030b20" + "0a200d6a210c2002200d6b20096b210b4100210002400340200c20006a2d" + "0000410a460d01200b200041016a2200470d000b200221090c030b200020" + "0d6a21000b200020096a220c41016a21090240200c20024f0d00200a2000" + "6a2d0000410a470d004100210a2009210d200921000c030b200920024d0d" + "000b0b20082002460d024101210a2008210d200221000b0240024020062d" + "0000450d00200541f48ec080004104200428020c11808080800080808080" + "000d010b200020086b210b4100210c024020002008460d00200320006a2d" + "0000410a46210c0b200120086a21002006200c3a0000200d210820052000" + "200b200428020c1180808080008080808000450d010b0b410121070b2007" + "0ba80101017f23808080800041306b220424808080800020042003360208" + "20042002360204200420012d00c80122033a000f024020034101460d0020" + "04420137021c200441013602142004419482c08000360210200441818080" + "800036022c2004200441286a3602182004200441046a3602282004410f6a" + "41c886c08000200441106a419c82c08000109680808000000b2000200141" + "c8011086818080001a200441306a2480808080000b140020012000280200" + "20002802041092808080000b4401017f23808080800041106b2204248080" + "8080002004200136020c20042000360208200441086a41b886c080002004" + "410c6a41b886c080002002200310d380808000000ba70101017f23808080" + "800041306b22042480808080002004200336020820042002360204200420" + "012d006822033a000f024020034101460d002004420137021c2004410136" + "02142004419482c08000360210200441818080800036022c200420044128" + "6a3602182004200441046a3602282004410f6a41c886c08000200441106a" + "419c82c08000109680808000000b2000200141e8001086818080001a2004" + "41306a2480808080000b45000240024020042003490d0020022004490d01" + "2000200420036b3602042000200120036a3602000f0b2003200420051099" + "80808000000b200420022005109a80808000000b0f0020002001200210fc" + "80808000000b0f0020002001200210f580808000000b4001017f23808080" + "800041106b2201248080808000200141086a200041014101419883c08000" + "108a80808000200128020c2100200141106a24808080800020000b9a0101" + "017f23808080800041b0016b2202248080808000200241086a2001280204" + "20012802084100413041a883c080001098808080000240200228020c4130" + "460d00200241106a41b883c08000109d80808000000b20024180016a2002" + "28020841301089818080001a200241106a20024180016a109e8080800020" + "00200241106a41c883c080004118109780808000200241b0016a24808080" + "80000b970101017f23808080800041c0006b22022480808080002002412b" + "36020c200241f880c08000360208200241e880c080003602142002200036" + "02102002410236021c200241cc8ec0800036021820024202370224200241" + "8280808000ad422086200241106aad843703382002418380808000ad4220" + "86200241086aad843703302002200241306a360220200241186a200110a4" + "80808000000ba50801077f23808080800041c0086b220224808080800020" + "012d0000220341077610a3808080002104200341067641017110a3808080" + "002105200341057641017110a3808080002106200241a0066a2001413010" + "86818080001a200220022d00a006411f713a00a006200241e8006a200241" + "a0066a10dc80808000200241b0076a410041301085818080001a200241c0" + "026a200241b0076a200241e8006a20022d00980122071090808080002002" + "4190056a10a8808080002002200520047110a380808000200610d2808080" + "007110a380808000200241c0026a10a9808080007110a38080800022013a" + "00f805200110d2808080002108200241a0066a200241c0026a10bd808080" + "0020024180046a200241a0066a200241c0026a10a780808000200241e007" + "6a20024180046a418089c0800010b98080800020024180046a200241e007" + "6a41c087c0800010df80808000200241a0066a20024180046a10bd808080" + "00200241a0066a200241e0076a10db808080002103200241f0026a200241" + "80046a41301086818080001a200220033a00a00320024100413010858180" + "800022024190086a2002200241f0026a2003109080808000200241a0066a" + "20024190086a10b28080800020024180046a41306a20024190086a200241" + "a0066a200620024190086a10de808080007310a380808000109080808000" + "20024180046a200241c0026a41301086818080001a20032004200510d280" + "8080007110a3808080007110a3808080002103200241a0066a2002418004" + "6a41e0001086818080001a200220033a008807200220053a008007200241" + "d0016a20024190056a200241a0066a200810aa8080800020022007200120" + "03200173410020086b71737110a3808080003a00b802200241e8006a10a8" + "808080002002200241e8006a200241d0016a20022d00b802220310aa8080" + "8000200241a0066a200210a58080800020024190056a200241a0066a10e4" + "8080800020024180046a20024190056a10e480808000200241f0026a2002" + "4180046a10e58080800020024190056a200241e8001086818080001a2002" + "4190056a41b089c0800010dd80808000200241a0066a20024190056a10a5" + "80808000200241b0076a200241f0026a200241a0066a41e0006a220510a7" + "80808000200241e0076a200241a0066a200241f0026a41e0006a220110a7" + "8080800020024190086a200241f0026a41306a200510a780808000200241" + "80046a200241a0066a41306a200110a7808080002003200110a980808000" + "2201200510a98080800022057110a380808000200110d280808000200510" + "d2808080007110a380808000200241b0076a200241e0076a10db80808000" + "7110a38080800020024190086a20024180046a10db808080007110a38080" + "80007210a3808080007110a38080800021052000200241e8001086818080" + "0020053a0068200241c0086a2480808080000b970101017f238080808000" + "41c0026b2203248080808000200341086a20012002410041e00041e083c0" + "80001098808080000240200328020c41e000460d00200341106a41f083c0" + "8000109d80808000000b200341e0016a200328020841e000108981808000" + "1a200341106a200341e0016a10a0808080002000200341106a41c883c080" + "004118109480808000200341c0026a2480808080000bff1d02137f017e23" + "808080800041a0276b220224808080800020012d0000220341077610a380" + "8080002104200341067641017110a3808080002105200341057641017110" + "a380808000210620024180106a200141301086818080001a200220022d00" + "8010411f713a008010200241a0216a20024180106a10dc80808000200241" + "80226a200141306a10dc80808000200241e01f6a41004130108581808000" + "1a200241801f6a200241e01f6a200241a0216a20022d00d0212207109080" + "80800020022d00b0222101200241c0206a410041301085818080001a2002" + "41e0226a200241c0206a20024180226a2001109080808000200241e0226a" + "41306a200241801f6a41301086818080001a200241e00d6a10e780808000" + "2002200520047110a380808000200610d2808080007110a3808080002002" + "41e0226a10e0808080007110a38080800022033a00a80f200310d2808080" + "00210820024180106a200241e0226a10ba80808000200241c00b6a200241" + "80106a200241e0226a10b380808000200241c0236a200241c00b6a41e089" + "c0800010bc80808000200241c0236a10e08080800021032002410041e000" + "108581808000220220033a0060200310d2808080002109200241a0246a20" + "0241c0236a41a088c0800010e38080800020024180106a200241a0246a10" + "ba8080800020024180256a20024180106a200241c0236a10b38080800020" + "0241e0256a200241a0246a200241c0236a10b38080800020024180106a20" + "0241e0256a41306a10b28080800020024180106a41306a200241e0256a41" + "30108681808000210a200241d0016a41306a410041301085818080001a20" + "0241d0016a41e086c0800041301086818080001a200241c0266a200241d0" + "016a10e28080800020024180256a200241c0266a10c28080800021032002" + "41c00b6a20024180106a41e0001086818080001a200220033a00a00c2003" + "10d280808000210b200a41004130108581808000210320024180106a41e0" + "86c0800041301086818080001a20024180076a20024180256a2002418010" + "6a10bc8080800020024198036a20024180076a41d088c0800010e3808080" + "0020024180106a20024198036a200241e0256a10b3808080002002410110" + "a3808080003a00e01020024180076a200241c00b6a20024180106a200b10" + "da80808000200241c00b6a410041e0001085818080001a20024198036a20" + "0241c00b6a20024180076a20022d00e007220a10b0808080002002418010" + "6a20024198036a10ba80808000200a20024180106a200241c0236a10c280" + "8080007110a380808000210a20024180106a20024198036a41e000108681" + "8080001a2002200a3a00e01020024180076a200220024180106a200910da" + "808080002002410041e00010858180800022024198036a20022002418007" + "6a20022d00e007220910b08080800020024180106a20024198036a10e280" + "808000200241c00b6a41e0006a220b20024198036a20024180106a200620" + "024198036a41306a220a10de80808000200a10a98080800020024198036a" + "10de808080007110a3808080007210a3808080007310a38080800010b080" + "808000200241c00b6a200241e0226a41e0001086818080001a2009200420" + "0510d2808080007110a3808080007110a380808000210420024180106a20" + "0241c00b6a41c0011086818080001a200220043a00c811200220053a00c0" + "11200241c00b6a200241e00d6a20024180106a200810d980808000200120" + "0420022d00a80f220573410020086b712005737110a38080800021012002" + "200241c00b6a41c801108681808000220241cc016a200241c00b6a41cc01" + "6a280000360000200220022800890d3600c9012002200120077110a38080" + "8000220c3a00c80120024198036a10e780808000200241d0016a20024198" + "036a2002200c10d980808000200241e0046a200241d0016a10e880808000" + "200241c00b6a410041301085818080001a200242ba8a92abf1a7dbf21437" + "03980c200242e8a0ee96fe89bcf2143703900c200242a4a0a0f4c7f1c686" + "a27f3703880c200242acfced84e38c82c4d0003703800c200242d5cb9694" + "b3cac8f92a3703f80b200242c38bd5b3c8bcf286897f3703f00b200242d2" + "8ff6dfdbdddf950e3703b80e2002429df8bab6e9ac96d12d3703b00e2002" + "42a7a9d3d3fd9088e5513703a80e200242f1fdbada86bba3842f3703a00e" + "200242fcfcc9d492d8f78b5c3703980e200242da9f8cd5a5f4e9e7fb0037" + "03900e200242c8bd89ecc7dfe4ea0b3703880e200242b9e1f3e3fac9d3bc" + "1d3703800e20024298fcc0c8d1dfcad6927f3703f80d200242b2ee88db88" + "999194383703f00d200242838386b6d8a788cac2003703e80d200242d1b5" + "f2aada8bd6973e3703e00d2003200241e0046a41306a10b2808080002002" + "4180106a200241e0046a41301086818080001a20024180076a2002418010" + "6a200241c00b6a10b3808080002003200241f0056a10b280808000200241" + "80106a200241e0046a41e0006a220141301086818080001a20024180076a" + "41e0006a220d20024180106a200241e00d6a10b3808080002003200241d0" + "066a10b28080800020024180106a200241e0046a41c0016a220541301086" + "818080001a20024180076a41c0016a20024180106a41e000108681808000" + "210e2003410041301085818080001a20024180106a41e086c08000413010" + "86818080001a200241a0096a410041e0001085818080001a200241a0096a" + "41e0006a20024180106a41e0001086818080002109200241a0096a41c001" + "6a410041e000108581808000210a200241c0266a41306a210f2002418010" + "6a41e0006a2110200241e00d6a41e0006a211120024180106a41c0016a21" + "12200241c00b6a41c0016a2113200241e00d6a41c0016a21144280808280" + "8080a080e9002115024003402015500d01200241e0196a200110ba808080" + "00200241c01a6a200241e0196a200241e0196a10bc80808000200241a01b" + "6a200241c01a6a200241c01a6a10bc80808000200241801c6a200241a01b" + "6a200241a01b6a10bc80808000200241e01c6a2001200510b38080800020" + "0241c01d6a200510ba80808000200241a01e6a200241c01d6a41c08ac080" + "0010b380808000200241801f6a200241a01e6a200241801c6a10b3808080" + "00200241e01f6a200241e0196a200241a01e6a10bc80808000200241c020" + "6a200241e01c6a200241801c6a10b380808000200241a0216a200241a01e" + "6a200241a01e6a10bc8080800020024180226a200241a0216a200241a01e" + "6a10bc80808000200241e0226a200241e0196a20024180226a10bb808080" + "00200241c0236a200241e0226a200241e01f6a10b380808000200241a024" + "6a200241801f6a200241c0236a10bc8080800020024180256a200241e004" + "6a200110b380808000200241e0256a200241e0226a20024180256a10b380" + "808000200241e00d6a200241e0256a200241e0256a10bc80808000201120" + "0241a0246a41e00010868180800021082014200241c0206a41e000108681" + "8080002107200f410041301085818080001a200241c0266a41e086c08000" + "41301086818080001a20024180106a410041e0001085818080001a201020" + "0241c0266a41e00010868180800021042012410041e00010858180800021" + "06200241c00b6a200241e00d6a20024180106a200510e080808000220310" + "b080808000200b20082004200310b080808000201320072006200310b080" + "808000200241e0046a200241c00b6a41a0021086818080001a0240201542" + "0183500d00200241a0126a200241a0096a200241e0046a10b38080800020" + "024180136a2009200110b380808000200241e0136a200a200510b3808080" + "00200241c0146a200241a0096a200910bc80808000200241a0156a200241" + "e0046a200110bc8080800020024180166a200241c0146a200241a0156a10" + "b380808000200241e0166a200241a0126a20024180136a10bc8080800020" + "0241c0176a20024180166a200241e0166a10bb80808000200241a0186a20" + "09200a10bc8080800020024180196a2001200510bc80808000200241e019" + "6a200241a0186a20024180196a10b380808000200241c01a6a2002418013" + "6a200241e0136a10bc80808000200241a01b6a200241e0196a200241c01a" + "6a10bb80808000200241801c6a200241a0096a200a10bc80808000200241" + "e01c6a200241e0046a200510bc80808000200241c01d6a200241801c6a20" + "0241e01c6a10b380808000200241a01e6a200241a0126a200241e0136a10" + "bc80808000200241801f6a200241c01d6a200241a01e6a10bb8080800020" + "0241e01f6a200241a0126a200241a0126a10bc80808000200241c0206a20" + "0241e01f6a200241a0126a10bc80808000200241a0216a200241e0136a41" + "c08ac0800010b38080800020024180226a20024180136a200241a0216a10" + "bc80808000200241e0226a20024180136a200241a0216a10bb8080800020" + "0241c0236a200241801f6a41c08ac0800010b380808000200241a0246a20" + "0241a01b6a200241c0236a10b38080800020024180256a200241c0176a20" + "0241e0226a10b38080800020024180106a20024180256a200241a0246a10" + "bb80808000200241e0256a200241c0236a200241c0206a10b38080800020" + "0241c0266a200241e0226a20024180226a10b3808080002004200241c026" + "6a200241e0256a10bc80808000200241c00b6a200241c0206a200241c017" + "6a10b380808000200241e00d6a20024180226a200241a01b6a10b3808080" + "002006200241e00d6a200241c00b6a10bc80808000200241a0096a200241" + "80106a41a0021086818080001a0b201542018821150c000b0b2002418010" + "6a41e0006a200910e28080800020024180106a41c0016a200a41e0001086" + "818080001a20024180106a200241a0096a41e0001086818080001a200241" + "a0096a20024180106a41a0021086818080001a200241c0266a2002418007" + "6a200241a0096a41c0016a220110b380808000200241c00b6a200241a009" + "6a200e10b380808000200241e00d6a200d200110b3808080002002418010" + "6a200241a0096a41e0006a200e10b380808000200e10e080808000220520" + "0110e08080800022017110a380808000200510d280808000200110d28080" + "80007110a380808000200241c0266a200241c00b6a10c2808080007110a3" + "80808000200241e00d6a20024180106a10c2808080007110a38080800072" + "10a380808000200c7110a38080800021012000200241d0016a41c8011086" + "8180800020013a00c801200241a0276a2480808080000ba0d50103097f25" + "7e347f23808080800041e0ec006b2200248080808000200042d2b4bbf88c" + "a0d28d053700f40c2000428dcfdee5fd81c2bb0c3700ec0c200042afbed3" + "efd9fc81acea003700e40c20004283c4c699c3e0e5bf313700dc0c200042" + "869e99a9baa4ebe5e5003700d40c2000428dbfe3e0ae86d0a7b27f3700cc" + "0c200042908484d9e8fa99f80e3700c40c2000428bdfe7adc3a8cae04f37" + "00bc0c200042d687f295e888f880cd003700b40c20004281ddcf86b5f2d0" + "cf633700ac0c200042aef2a7aaae91d5accb003700a40c200042eb8fbebf" + "aee5caf4967f37009c0c200042b9b3d69fbf86ace8bb7f3700940c200042" + "d4fa86d5a0e3d296a87f37008c0c200042c5eddc9291a0c9e3a27f370084" + "0c2000428594fecef0de91d0643700fc0b20004289ae81b0d7a1feb5d300" + "3700f40b200042d4f18391eaffb8ed2e3700ec0b2000428cc8d9c6afddd3" + "d2ca003700e40b200042bca4908cdbc4caa54e3700dc0b200042b9cfe7bf" + "d99fbcbd563700d40b200042a4f788c3999fcac2c6003700cc0b200042b7" + "93c2cbbcbec3ee8e7f3700c40b200042a188aeeaaf8e90ba9b7f3700bc0b" + "200042c1fb969fd3cb97a0f5003700b40b200042ff9ce790fc9fe0fa6837" + "00ac0b200042b2dcb096dfcda7b9293700a40b200042a9e3f3c0c2c5cf85" + "2a37009c0b200042ad95c395bdd085ec393700940b200042c1f0c9e1f6d5" + "88e04537008c0b200042cfe1a7fed79ab1b2da003700840b200042d38490" + "85a5b6dff17d3700fc0a200042daf4a7a781f39dc7f8003700f40a200042" + "b88d9b949dd3aa86713700ec0a20004286b08ace96d5b8e0493700e40a20" + "0042e291f4f2d7e689e0443700dc0a200042c188fdead38de5d7f1003700" + "d40a200042fec2c2f2fb858b84283700cc0a200042fe8ebfddfaafafefec" + "003700c40a20004291f5b996b996cbc8bf7f3700bc0a200042b497cfc0d9" + "e3f284043700b40a2000428c9691f2e7bca4ec2d3700ac0a20004287e0c3" + "c29eccb3d21c3700a40a200042c8bbf68fceb0ad9eda0037009c0a200042" + "85c5e3e89284a997fd003700940a20004297bd8ec1effea3935437008c0a" + "200042eea8f8adc2cdbed9bb7f3700840a200042f5a3a4828bfd9ac1ac7f" + "3700fc09200042a087bbac98e0e282827f3700f4092000429a8683e6d8cc" + "ddd7113700ec09200042f0e1a982ee8890e33b3700e40920004286f6f2ba" + "80bf8bc3d5003700dc0920004297cfaad29bac9ec8243700d409200042c9" + "d3b292ffc082e01e3700cc09200042a9a3ffacc691beef6a3700c4092000" + "42a2d1f7c2ff94dce2543700bc09200042c78cfef2b8eabef8713700b409" + "20004286edaddda1fbf6baa37f3700ac09200042fdddbb9dedd1e9ef3337" + "00a409200042c6b2d8f2a9dae59d9f7f37009c09200042b59fb2d0b3e4cf" + "e32337009409200042c5c8c2fe9f869487c00037008c09200042ee91eb8f" + "c9a9c69cd1003700840920004283afa5ac9ded86b7253700fc08200042be" + "b9e4bccb88c99f3c3700f408200042c4d7d7c08b8db9e7f5003700ec0820" + "0042bf948bc7d7b1b0fcc1003700e4082000429a9ed5eea2d281c0e70037" + "00dc08200042acf185b19c87b3c3dd003700d40820004294bcf3c5dec192" + "ebb67f3700cc082000429db89ddb8fc9add13b3700c408200042e99baac8" + "a8faa582817f3700bc08200042daccdaad88c1f9b35b3700b408200042b5" + "d48be3dada8f8b223700ac08200042bdfdafd8a0e7aee4d8003700a40820" + "0042b9a7fddeeba08a8a3e37009c08200042e893cdd1ffdb94af08370094" + "08200042b58bef84d587bf842937008c08200042f4d8c597c3f6bd9f5a37" + "008408200042b3ccedc1b3d5cb987f3700fc07200042e0a38ecbbad9b6b8" + "b97f3700f407200042918cc8bfb089f7ab2f3700ec07200042dca8f8e4f3" + "82aee38f7f3700e407200042a3bfc29bc5d8edebca003700dc072000428e" + "81e4d981f589f1283700d40720004296f48083b9fcdab5b67f3700cc0720" + "0042cf938386a9d3d78a023700c4072000429687f1eff8ebacafef003700" + "bc072000429ef0afffc392fc88163700b407200042dbcda6cadfc8f38797" + "7f3700ac07200042cec2c1f9b5a7ec8e773700a407200042a5c192ecc6ad" + "99ef8f7f37009c07200042fd908df7cd8eeaab1837009407200042b18585" + "d2b981fac47637008c072000428af4e7cfa4fac8c4d70037008407200042" + "d6e7eeadc1c4f395a07f3700fc06200042a394d5b790978ebcec003700f4" + "0620004284f5dcaa92b5c09f663700ec06200042dcbedda48ae58eebe000" + "3700e406200042ac8bc7ea9baff0cf1b3700dc06200041940d6a42003700" + "002000418c0d6a4200370000200041840d6a4200370000200042003700fc" + "0c2000419c0d6a200041dc066a4130108980808000200041a80d6a200041" + "9c0d6a109c80808000200041940e6a200041dc066a41306a413010898080" + "8000200041a00e6a200041940e6a109c808080002000418c0f6a200041dc" + "066a41e0006a41e000108980808000200041980f6a20002802900f200028" + "02940f109f80808000200041e4106a2000419c086a41e000108980808000" + "200041f0106a20002802e81020002802ec10109f80808000200041bc126a" + "200041fc086a4130108980808000200041c8126a200041bc126a109c8080" + "8000200041b4136a200041ac096a41e000108980808000200041c0136a20" + "002802b81320002802bc13109f8080800020004188156a2000418c0a6a41" + "900110898080800020004194156a41086a22014100360200200042808080" + "80800137029415200041d0066a200028028c152202200028029015220341" + "004130418084c08000109880808000200041a0156a20002802d006200028" + "02d406108980808000200041b0156a200041a0156a109c80808000200041" + "94156a200041b0156a419084c08000108780808000200041c8066a200220" + "03413041e00041a084c08000109880808000200041b0156a20002802c806" + "20002802cc0610898080800020002802a01520002802a415108480808000" + "200041a0156a41086a2204200041b0156a41086a22052802003602002000" + "20002902b0153703a015200041b0156a200041a0156a109c808080002000" + "4194156a200041b0156a41b084c08000108780808000200041c0066a2002" + "200341e00041900141c084c08000109880808000200041b0156a20002802" + "c00620002802c40610898080800020002802a01520002802a41510848080" + "800020042005280200360200200020002902b0153703a015200041b0156a" + "200041a0156a109c8080800020004194156a200041b0156a41d084c08000" + "108780808000200041c81c6a200128020036020020002000290294153703" + "c01c200041b0156a200041a80d6a41e8001086818080001a200041b0156a" + "41e8006a200041a00e6a41e8001086818080001a20004180176a20004198" + "0f6a41c8011086818080002106200041c8186a200041f0106a41c8011086" + "818080002107200041901a6a200041c8126a41e8001086818080001a2000" + "41f81a6a200041c0136a41c8011086818080002108200041f8326a200041" + "9c0b6a109e80808000200041d01c6a200041f8326a41e084c08000411710" + "9780808000200041f8326a200041cc0b6a10a080808000200041b81d6a20" + "0041f8326a41f784c080004117109480808000200041f8326a200041ac0c" + "6a109e80808000200041801f6a200041f8326a418e85c080004117109780" + "808000200041e81f6a200041d01c6a41e8001086818080001a200041e81f" + "6a41e8006a200041b81d6a41c8011086818080001a20004198226a200041" + "801f6a41e8001086818080001a200041a0e8006a41c00041201080808080" + "0002400240024002400240024020002802a4684101470d00200041b8066a" + "20002802a8684108412041d880c08000108a80808000200041003602c85b" + "200020002802bc0622033602c45b200020002802b80622023602c05b2000" + "41f8326a41c0004120108080808000024020002802fc324101470d004100" + "21050240200220002802803322014f0d00200041b0066a200041c0db006a" + "410020014120108b8080800020002802b0062202418180808078470d0520" + "002802c45b210320002802c85b21050b200041dc0c6a2102200320054105" + "746a210341c000210103402001450d03200041b0046a2002290000220942" + "0042edb8ca9f8fb2facc494200108781808000200041c0046a2009420042" + "a3b8c9bcb8b9bbb62b4200108781808000200041d0046a20094200428ff3" + "d092e792c5e9054200108781808000200041e0046a200942004291fee7fa" + "99bbb6a4074200108781808000200041f0056a2002290008220a420042ed" + "b8ca9f8fb2facc49420010878180800020004180066a200a420042a3b8c9" + "bcb8b9bbb62b420010878180800020004190066a200a4200428ff3d092e7" + "92c5e9054200108781808000200041a0066a200a42004291fee7fa99bbb6" + "a4074200108781808000200041b0056a2002290010220b420042edb8ca9f" + "8fb2facc494200108781808000200041c0056a200b420042a3b8c9bcb8b9" + "bbb62b4200108781808000200041d0056a200b4200428ff3d092e792c5e9" + "054200108781808000200041e0056a200b42004291fee7fa99bbb6a40742" + "00108781808000200041f0046a2002290018220c420042edb8ca9f8fb2fa" + "cc49420010878180800020004180056a200c420042a3b8c9bcb8b9bbb62b" + "420010878180800020004190056a200c4200428ff3d092e792c5e9054200" + "108781808000200041a0056a200c42004291fee7fa99bbb6a40742001087" + "81808000200041a0046a20002903b004220d42ffffffff6f7e220e420042" + "8180808070420010878180800020004190046a200e420042feb7f9ffaf80" + "e9ded3004200108781808000200041c0036a200e42004285b087cd8081f6" + "9c334200108781808000200041f0026a200e420042c8faf5ccb2eae9f6f3" + "00420010878180800020004180046a20002903f005220f20002903c00422" + "10200041b0046a41086a2903007c22117c22122000290390047c22132000" + "41a0046a41086a290300200d20002903a004220e7c200e54ad7c7c220d42" + "ffffffff6f7e220e42004281808080704200108781808000200041f0036a" + "200e420042feb7f9ffaf80e9ded3004200108781808000200041e0036a20" + "0e42004285b087cd8081f69c334200108781808000200041d0036a200e42" + "0042c8faf5ccb2eae9f6f3004200108781808000200041b0036a20004190" + "046a41086a2903002013201254ad7c200d201354ad7c221420002903c003" + "7c2213200041c0046a41086a2903002011201054ad7c221520002903d004" + "7c22102000290380067c2211200041f0056a41086a2903002012200f54ad" + "7c7c221220002903b0057c22167c220f20002903f0037c22172000418004" + "6a41086a290300200029038004220e200d7c200e54ad7c7c220d42ffffff" + "ff6f7e220e42004281808080704200108781808000200041a0036a200e42" + "0042feb7f9ffaf80e9ded300420010878180800020004190036a200e4200" + "4285b087cd8081f69c33420010878180800020004180036a200e420042c8" + "faf5ccb2eae9f6f3004200108781808000200041e0026a200041f0036a41" + "086a2903002017200f54ad7c200d201754ad7c221820002903e0037c2217" + "200041c0036a41086a2903002013201454ad7c200f201354ad7c22192000" + "2903f0027c2213200041d0046a41086a2903002010201554ad7c221a2000" + "2903e0047c220f2000290390067c221420004180066a41086a2903002011" + "201054ad7c2012201154ad7c7c221020002903c0057c2211200041b0056a" + "41086a2903002016201254ad7c7c221220002903f0047c221b7c221c7c22" + "1520002903a0037c2216200041b0036a41086a29030020002903b003220e" + "200d7c200e54ad7c7c220d42ffffffff6f7e220e42004281808080704200" + "108781808000200041d0026a200e420042feb7f9ffaf80e9ded300420010" + "8781808000200041c0026a200e42004285b087cd8081f69c334200108781" + "808000200041b0026a200e420042c8faf5ccb2eae9f6f300420010878180" + "8000200041d0036a41086a290300211d20004180056a41086a290300211e" + "200041d0056a41086a290300211f200041a0066a41086a29030021202000" + "2903e00521212000290390052122200029038003212320004180036a4108" + "6a290300212420004190036a41086a290300212520004190056a41086a29" + "03002126200041e0056a41086a290300212720002903a005212820002903" + "b0022129200041b0026a41086a290300212a20002903c002212b200041c0" + "026a41086a290300212c200020002903d002222d200041e0046a41086a29" + "0300200f201a54ad7c221a20002903a0067c220e20004190066a41086a29" + "03002014200f54ad7c2010201454ad7c7c220f20002903d0057c22142000" + "41c0056a41086a2903002011201054ad7c2012201154ad7c7c2210200029" + "0380057c2211200041f0046a41086a290300201b201254ad7c7c22122000" + "41f0026a41086a2903002013201954ad7c201c201354ad7c7c2213200029" + "03d0037c2219200041e0036a41086a2903002017201854ad7c2015201754" + "ad7c7c22172000290390037c2218200041a0036a41086a29030020162015" + "54ad7c200d201654ad7c7c22167c2215200041e0026a41086a2903002000" + "2903e002221b200d7c201b54ad7c7c221b3703f8322000202b2023202220" + "212020200e201a54ad7c200f200e54ad7c221a7c220e201f2014200f54ad" + "7c2010201454ad7c7c220d7c220f201e2011201054ad7c2012201154ad7c" + "7c22102013201254ad7c2212201d2019201354ad7c2017201954ad7c7c22" + "137c221120252018201754ad7c2016201854ad7c7c22177c2214200041d0" + "026a41086a2903002015202d54ad7c201b201554ad7c7c22153703803320" + "0020292012201054ad2013201254ad7c221620282027200e201a54ad7c20" + "0d200e54ad7c22197c220e2026200f200d54ad7c2010200f54ad7c7c2210" + "7c221220242011201354ad7c2017201154ad7c7c22137c220d202c201420" + "1754ad7c2015201454ad7c7c22113703883320002012201654ad20132012" + "54ad7c200041a0056a41086a290300200e201954ad7c2010200e54ad7c7c" + "202a200d201354ad7c2011200d54ad7c7c37039033200041a0e8006a2000" + "41f8326a10a28080800020002903a068210e20002903a868211220002903" + "b068211320002903b868210d200942ffffffff0f7c200954ad427f7c2209" + "2009200a7c220a200954ad7c200a4282c88680d0ff96a1ac7f7c200a54ad" + "7c427f7c423f872209200b20097c2209200b54ad7c200942fbcff8b2fffe" + "89e34c7c200954ad7c427f7c423f872209200c20097c2209200c54ad7c20" + "0942b8858ab3cd9596898c7f7c200954ad7ca741016a41017110a3808080" + "0021042000411836028457200041a585c0800036028057200020043a00c0" + "52200441ff01714101470d04200341186a200d370300200341106a201337" + "0300200341086a20123703002003200e370300200341206a210320054101" + "6a210520022001412020014120491b22046a2102200120046b21010c000b" + "0b2000410036028833200041013602fc32200041d085c080003602f83220" + "00420437028033200041f8326a41d880c0800010a480808000000b200041" + "0036028833200041013602fc32200041d085c080003602f8322000420437" + "028033200041f8326a41d880c0800010a480808000000b20002802c45b21" + "2e20002802c05b212f200541016a20002802c81c470d0220004180236a20" + "002802c41c220210a580808000200241e8006a2130200041d4d2006a2131" + "200041c0d2006a41086a2132200041a0ce006a2133200041c0db006a4130" + "6a2134200041a0dc006a2135410021040340024020042005470d00200041" + "f8326a20004180236a41e0006a10a68080800041002102200041a0e8006a" + "410041301085818080001a200041c0db006a200041a0e8006a200041f832" + "6a20002d00a833109080808000200041a0e8006a20004180236a200041c0" + "db006a10a780808000200041a0e8006a41306a20004180236a41306a2000" + "41c0db006a10a7808080002000410010a3808080003a008069200041f832" + "6a10a88080800020004190246a200041a0e8006a200041f8326a200041c0" + "db006a10a98080800010aa80808000200041f8246a200041b81d6a10ab80" + "80800020004188256a200710ab8080800020004198256a200810ab808080" + "00200041a8256a200610ab80808000200041b82e6a20004190246a108f80" + "808000200041c0376a200041801f6a108f80808000200041803c6a200041" + "b0156a108f808080002000200041a8256a3602942a2000200041803c6a36" + "02902a200020004198256a36028c2a2000200041c0376a3602882a200020" + "004188256a3602842a2000200041b82e6a3602802a2000200041f8246a36" + "02fc292000200041e81f6a3602f829200042043702c4642000200041f829" + "6a3602c064200041b8256a10ac80808000200041f8326a41a0026a210520" + "0041b8256a41a0026a213620004180d7006a41c0016a213320004180d700" + "6a41e0006a2134200041c0db006a41e0036a2135200041a0e8006a41e003" + "6a2132200041c0db006a4180036a2106200041a0e8006a4180036a210720" + "0041c0db006a41a0026a2108200041a0e8006a41a0026a2131200041c0d2" + "006a41c0016a2137200041c0d2006a41e0006a2138200041c0db006a41c0" + "016a2139200041a0e8006a41c0016a213a200041c0db006a41e0006a213b" + "200041a0e8006a41e0006a213c41c000213d034002400240203d450d0020" + "02410171210342808082808080a080e900203d417f6a223d413f71ad88a7" + "21022003450d02200041f8326a200041b8256a41c0041086818080001a20" + "0041b8256a200041c0e4006a200041f8326a10ad80808000200241017145" + "0d01200041c0db006a200041b8256a41c0041086818080001a20002802c4" + "64410374210120002802c064210320002802c8642130024003402001450d" + "01200328020422042d000c20032802002d00607210a38080800021022000" + "41a0e8006a200041c0db006a200441046a280200200441086a2802002030" + "41dc8cc0800010ae80808000200328020010af80808000200041c0d2006a" + "200041a0e8006a200041c0db006a200210b0808080002038203c203b2002" + "10b0808080002037203a2039200210b08080800020004180d7006a203120" + "08200210b080808000203420072006200210b08080800020332032203520" + "0210b080808000200041f8326a200041c0d2006a41a0021086818080001a" + "200520004180d7006a41a0021086818080001a200041c0db006a200041f8" + "326a41c0041086818080001a200141786a2101200341086a21030c000b0b" + "2000203041016a3602c864200041b8256a200041c0db006a41c004108681" + "8080001a0c010b200041f8326a200041b8256a41c0041086818080001a20" + "0041b8256a200041c0e4006a200041f8326a10ad80808000200041f8326a" + "41a0026a223e203610b180808000200041f8326a200041b8256a41a00210" + "86818080001a200041b8256a200041f8326a41c0041086818080001a2000" + "41f8296a200041b8256a41c0041086818080001a200041c0d2006a41306a" + "2230200041b8256a41306a10b280808000200041c0d2006a200041b8256a" + "41301086818080001a200041c0db006a41306a2201200041b8256a419001" + "6a10b280808000200041c0db006a200041b8256a41e0006a413010868180" + "80001a200041a0e8006a41306a2203200041b8256a41f0016a10b2808080" + "00200041a0e8006a200041b8256a41c0016a41301086818080001a200041" + "f8326a410041301085818080001a200042c18e8ea3d58c88f8183703d033" + "200042d2a1c19ee8addffc033703c8332000429e97eb8de0d783db8e7f37" + "03c03320004295b7949cfdd590b8d8003703b833200042d2cbb6fee1c8c8" + "d5dd003703b033200042f1e0c7b3c8bcf2814d3703a83320004180d7006a" + "41e0006a2232200041c0db006a200041f8326a10b380808000200041f832" + "6a41306a410041301085818080002105200042ba8a92abf1a7dbf2143703" + "a033200042e8a0ee96fe89bcf21437039833200042a4a0a0f4c7f1c686a2" + "7f37039033200042acfced84e38c82c4d00037038833200042d5cb9694b3" + "cac8f92a37038033200042c38bd5b3c8bcf286897f3703f83220004180d7" + "006a41c0016a2204200041a0e8006a200041f8326a10b380808000200041" + "80d7006a200041c0d2006a41e0001086818080001a20004180ce006a4130" + "6a2202200041b8256a41d0026a10b28080800020004180ce006a200041b8" + "256a41a0026a41301086818080001a2030200041b8256a41b0036a10b280" + "808000200041c0d2006a200041b8256a4180036a41301086818080001a20" + "03200041b8256a4190046a10b280808000200041a0e8006a200041b8256a" + "41e0036a41301086818080001a200041f8326a410041301085818080001a" + "200042c18e8ea3d58c88f8183703d033200042d2a1c19ee8addffc033703" + "c8332000429e97eb8de0d783db8e7f3703c03320004295b7949cfdd590b8" + "d8003703b833200042d2cbb6fee1c8c8d5dd003703b033200042f1e0c7b3" + "c8bcf2814d3703a833200041c0db006a41e0006a2235200041c0d2006a20" + "0041f8326a10b3808080002005410041301085818080002133200042ba8a" + "92abf1a7dbf2143703a033200042e8a0ee96fe89bcf21437039833200042" + "a4a0a0f4c7f1c686a27f37039033200042acfced84e38c82c4d000370388" + "33200042d5cb9694b3cac8f92a37038033200042c38bd5b3c8bcf286897f" + "3703f832200041c0db006a41c0016a223b200041a0e8006a200041f8326a" + "10b380808000200041c0db006a20004180ce006a41e0001086818080001a" + "200042afff91c4a8fbbb87113703f86820004289bd83adbef9849c2e3703" + "f068200042d0d1a385a497e78d413703e86820004294a7e7acc2baa5a44f" + "3703e068200042ecf9a5e2bf8da8a1d8003703d868200042c6ac97e7d4d5" + "9afbb27f3703d068200042ebcded87fbc188f9083703c868200042cd9cab" + "eda5fde4f11c3703c068200042eed3f096abd9ebada37f3703b868200042" + "8fc5dc88cd998ff4977f3703b0682000429386aaa8abf2d7b4463703a868" + "200042e5a8e798abaaa584073703a068200041a0e8006a41e0006a410041" + "c0011085818080002108203e200041c0db006a200041a0e8006a10b48080" + "8000200041f8326a20004180d7006a41a0021086818080001a2002203310" + "b28080800020004180ce006a200041f8326a41301086818080001a200041" + "80d7006a41306a2207200041f8326a4190016a10b28080800020004180d7" + "006a200041f8326a41e0006a223f41301086818080001a2001200041f832" + "6a41f0016a10b280808000200041c0db006a200041f8326a41c0016a2240" + "41301086818080001a200041a0e8006a410041301085818080001a200042" + "c18e8ea3d58c88f8183703f868200042d2a1c19ee8addffc033703f06820" + "00429e97eb8de0d783db8e7f3703e86820004295b7949cfdd590b8d80037" + "03e068200042d2cbb6fee1c8c8d5dd003703d868200042f1e0c7b3c8bcf2" + "814d3703d068200041c0d2006a41e0006a223820004180d7006a200041a0" + "e8006a10b3808080002003410041301085818080002103200042ba8a92ab" + "f1a7dbf2143703c868200042e8a0ee96fe89bcf2143703c068200042a4a0" + "a0f4c7f1c686a27f3703b868200042acfced84e38c82c4d0003703b06820" + "0042d5cb9694b3cac8f92a3703a868200042c38bd5b3c8bcf286897f3703" + "a068200041c0d2006a41c0016a2234200041c0db006a200041a0e8006a10" + "b380808000200041c0d2006a20004180ce006a41e0001086818080001a20" + "0041c0c9006a41306a2205200041f8326a41d0026a10b280808000200041" + "c0c9006a203e41301086818080001a2002200041f8326a41b0036a10b280" + "80800020004180ce006a200041f8326a4180036a22414130108681808000" + "1a2001200041f8326a4190046a10b280808000200041c0db006a200041f8" + "326a41e0036a224241301086818080001a200041a0e8006a410041301085" + "818080001a200042c18e8ea3d58c88f8183703f868200042d2a1c19ee8ad" + "dffc033703f0682000429e97eb8de0d783db8e7f3703e86820004295b794" + "9cfdd590b8d8003703e068200042d2cbb6fee1c8c8d5dd003703d8682000" + "42f1e0c7b3c8bcf2814d3703d068203220004180ce006a200041a0e8006a" + "10b3808080002003410041301085818080002143200042ba8a92abf1a7db" + "f2143703c868200042e8a0ee96fe89bcf2143703c068200042a4a0a0f4c7" + "f1c686a27f3703b868200042acfced84e38c82c4d0003703b068200042d5" + "cb9694b3cac8f92a3703a868200042c38bd5b3c8bcf286897f3703a06820" + "04200041c0db006a200041a0e8006a10b38080800020004180d7006a2000" + "41c0c9006a41e0001086818080001a200042afff91c4a8fbbb8711370398" + "5c20004289bd83adbef9849c2e3703905c200042d0d1a385a497e78d4137" + "03885c20004294a7e7acc2baa5a44f3703805c200042ecf9a5e2bf8da8a1" + "d8003703f85b200042c6ac97e7d4d59afbb27f3703f05b200042ebcded87" + "fbc188f9083703e85b200042cd9cabeda5fde4f11c3703e05b200042eed3" + "f096abd9ebada37f3703d85b2000428fc5dc88cd998ff4977f3703d05b20" + "00429386aaa8abf2d7b4463703c85b200042e5a8e798abaaa584073703c0" + "5b2035410041c001108581808000213c200041a0e8006a41a0026a220320" + "004180d7006a200041c0db006a10b480808000200041a0e8006a200041c0" + "d2006a41a0021086818080001a2005204310b280808000200041c0c9006a" + "200041a0e8006a41301086818080001a2030200041a0e8006a4190016a22" + "4410b280808000200041c0d2006a200841301086818080001a2007200041" + "a0e8006a41f0016a224510b28080800020004180d7006a200041a0e8006a" + "41c0016a223a41301086818080001a200041c0db006a4100413010858180" + "80001a200042c18e8ea3d58c88f8183703985c200042d2a1c19ee8addffc" + "033703905c2000429e97eb8de0d783db8e7f3703885c20004295b7949cfd" + "d590b8d8003703805c200042d2cbb6fee1c8c8d5dd003703f85b200042f1" + "e0c7b3c8bcf2814d3703f05b20004180ce006a41e0006a2236200041c0d2" + "006a200041c0db006a10b380808000200141004130108581808000210120" + "0042ba8a92abf1a7dbf2143703e85b200042e8a0ee96fe89bcf2143703e0" + "5b200042a4a0a0f4c7f1c686a27f3703d85b200042acfced84e38c82c4d0" + "003703d05b200042d5cb9694b3cac8f92a3703c85b200042c38bd5b3c8bc" + "f286897f3703c05b20004180ce006a41c0016a224620004180d7006a2000" + "41c0db006a10b38080800020004180ce006a200041c0c9006a41e0001086" + "818080001a20004180c5006a41306a2231200041a0e8006a41d0026a2247" + "10b28080800020004180c5006a200341301086818080001a2005200041a0" + "e8006a41b0036a224810b280808000200041c0c9006a200041a0e8006a41" + "80036a224941301086818080001a2007200041a0e8006a4190046a224a10" + "b28080800020004180d7006a200041a0e8006a41e0036a224b4130108681" + "8080001a200041c0db006a410041301085818080001a200042c18e8ea3d5" + "8c88f8183703985c200042d2a1c19ee8addffc033703905c2000429e97eb" + "8de0d783db8e7f3703885c20004295b7949cfdd590b8d8003703805c2000" + "42d2cbb6fee1c8c8d5dd003703f85b200042f1e0c7b3c8bcf2814d3703f0" + "5b2038200041c0c9006a200041c0db006a10b38080800020014100413010" + "85818080002135200042ba8a92abf1a7dbf2143703e85b200042e8a0ee96" + "fe89bcf2143703e05b200042a4a0a0f4c7f1c686a27f3703d85b200042ac" + "fced84e38c82c4d0003703d05b200042d5cb9694b3cac8f92a3703c85b20" + "0042c38bd5b3c8bcf286897f3703c05b203420004180d7006a200041c0db" + "006a10b380808000200041c0d2006a20004180c5006a41e0001086818080" + "001a200042afff91c4a8fbbb87113703d85720004289bd83adbef9849c2e" + "3703d057200042d0d1a385a497e78d413703c85720004294a7e7acc2baa5" + "a44f3703c057200042ecf9a5e2bf8da8a1d8003703b857200042c6ac97e7" + "d4d59afbb27f3703b057200042ebcded87fbc188f9083703a857200042cd" + "9cabeda5fde4f11c3703a057200042eed3f096abd9ebada37f3703985720" + "00428fc5dc88cd998ff4977f370390572000429386aaa8abf2d7b4463703" + "8857200042e5a8e798abaaa58407370380572032410041c0011085818080" + "00213d200041c0db006a41a0026a2232200041c0d2006a20004180d7006a" + "10b480808000200041c0db006a20004180ce006a41a0021086818080001a" + "2031203510b28080800020004180c5006a200041c0db006a413010868180" + "80001a2002200041c0db006a4190016a224c10b28080800020004180ce00" + "6a203c41301086818080001a2030200041c0db006a41f0016a224d10b280" + "808000200041c0d2006a203b41301086818080001a20004180d7006a4100" + "41301085818080001a200042c18e8ea3d58c88f8183703d857200042d2a1" + "c19ee8addffc033703d0572000429e97eb8de0d783db8e7f3703c8572000" + "4295b7949cfdd590b8d8003703c057200042d2cbb6fee1c8c8d5dd003703" + "b857200042f1e0c7b3c8bcf2814d3703b057200041c0c9006a41e0006a22" + "0620004180ce006a20004180d7006a10b380808000200741004130108581" + "8080002101200042ba8a92abf1a7dbf2143703a857200042e8a0ee96fe89" + "bcf2143703a057200042a4a0a0f4c7f1c686a27f37039857200042acfced" + "84e38c82c4d00037039057200042d5cb9694b3cac8f92a37038857200042" + "c38bd5b3c8bcf286897f37038057200041c0c9006a41c0016a2207200041" + "c0d2006a20004180d7006a10b380808000200041c0c9006a20004180c500" + "6a41e0001086818080001a200041c0c0006a41306a2237200041c0db006a" + "41d0026a224e10b280808000200041c0c0006a203241301086818080001a" + "2031200041c0db006a41b0036a224f10b28080800020004180c5006a2000" + "41c0db006a4180036a225041301086818080001a2030200041c0db006a41" + "90046a225110b280808000200041c0d2006a200041c0db006a41e0036a22" + "5241301086818080001a20004180d7006a410041301085818080001a2000" + "42c18e8ea3d58c88f8183703d857200042d2a1c19ee8addffc033703d057" + "2000429e97eb8de0d783db8e7f3703c85720004295b7949cfdd590b8d800" + "3703c057200042d2cbb6fee1c8c8d5dd003703b857200042f1e0c7b3c8bc" + "f2814d3703b057203620004180c5006a20004180d7006a10b38080800020" + "01410041301085818080002101200042ba8a92abf1a7dbf2143703a85720" + "0042e8a0ee96fe89bcf2143703a057200042a4a0a0f4c7f1c686a27f3703" + "9857200042acfced84e38c82c4d00037039057200042d5cb9694b3cac8f9" + "2a37038857200042c38bd5b3c8bcf286897f370380572046200041c0d200" + "6a20004180d7006a10b38080800020004180ce006a200041c0c0006a41e0" + "001086818080001a200042afff91c4a8fbbb87113703985320004289bd83" + "adbef9849c2e37039053200042d0d1a385a497e78d413703885320004294" + "a7e7acc2baa5a44f37038053200042ecf9a5e2bf8da8a1d8003703f85220" + "0042c6ac97e7d4d59afbb27f3703f052200042ebcded87fbc188f9083703" + "e852200042cd9cabeda5fde4f11c3703e052200042eed3f096abd9ebada3" + "7f3703d8522000428fc5dc88cd998ff4977f3703d0522000429386aaa8ab" + "f2d7b4463703c852200042e5a8e798abaaa584073703c0522038410041c0" + "01108581808000213820004180d7006a41a0026a225320004180ce006a20" + "0041c0d2006a10b48080800020004180d7006a200041c0c9006a41a00210" + "86818080001a2037200110b280808000200041c0c0006a20004180d7006a" + "41301086818080001a200520004180d7006a4190016a10b2808080002000" + "41c0c9006a203d41301086818080001a200220004180d7006a41f0016a10" + "b28080800020004180ce006a200441301086818080001a200041c0d2006a" + "410041301085818080001a200042c18e8ea3d58c88f81837039853200042" + "d2a1c19ee8addffc03370390532000429e97eb8de0d783db8e7f37038853" + "20004295b7949cfdd590b8d80037038053200042d2cbb6fee1c8c8d5dd00" + "3703f852200042f1e0c7b3c8bcf2814d3703f05220004180c5006a41e000" + "6a2254200041c0c9006a200041c0d2006a10b38080800020304100413010" + "85818080002139200042ba8a92abf1a7dbf2143703e852200042e8a0ee96" + "fe89bcf2143703e052200042a4a0a0f4c7f1c686a27f3703d852200042ac" + "fced84e38c82c4d0003703d052200042d5cb9694b3cac8f92a3703c85220" + "0042c38bd5b3c8bcf286897f3703c05220004180c5006a41c0016a225520" + "004180ce006a200041c0d2006a10b38080800020004180c5006a200041c0" + "c0006a41e0001086818080001a200041803c6a41306a223020004180d700" + "6a41d0026a10b280808000200041803c6a205341301086818080001a2037" + "20004180d7006a41b0036a10b280808000200041c0c0006a20004180d700" + "6a4180036a41301086818080001a200220004180d7006a4190046a10b280" + "80800020004180ce006a20004180d7006a41e0036a41301086818080001a" + "200041c0d2006a410041301085818080001a200042c18e8ea3d58c88f818" + "37039853200042d2a1c19ee8addffc03370390532000429e97eb8de0d783" + "db8e7f3703885320004295b7949cfdd590b8d80037038053200042d2cbb6" + "fee1c8c8d5dd003703f852200042f1e0c7b3c8bcf2814d3703f052200620" + "0041c0c0006a200041c0d2006a10b3808080002039410041301085818080" + "002139200042ba8a92abf1a7dbf2143703e852200042e8a0ee96fe89bcf2" + "143703e052200042a4a0a0f4c7f1c686a27f3703d852200042acfced84e3" + "8c82c4d0003703d052200042d5cb9694b3cac8f92a3703c852200042c38b" + "d5b3c8bcf286897f3703c052200720004180ce006a200041c0d2006a10b3" + "80808000200041c0c9006a200041803c6a41e0001086818080001a200042" + "afff91c4a8fbbb87113703d84e20004289bd83adbef9849c2e3703d04e20" + "0042d0d1a385a497e78d413703c84e20004294a7e7acc2baa5a44f3703c0" + "4e200042ecf9a5e2bf8da8a1d8003703b84e200042c6ac97e7d4d59afbb2" + "7f3703b04e200042ebcded87fbc188f9083703a84e200042cd9cabeda5fd" + "e4f11c3703a04e200042eed3f096abd9ebada37f3703984e2000428fc5dc" + "88cd998ff4977f3703904e2000429386aaa8abf2d7b4463703884e200042" + "e5a8e798abaaa584073703804e2036410041c00110858180800021362000" + "41c0d2006a41a0026a2256200041c0c9006a20004180ce006a10b4808080" + "00200041c0d2006a20004180c5006a41a0021086818080001a2030203910" + "b280808000200041803c6a200041c0d2006a41301086818080001a203720" + "0041c0d2006a4190016a225710b280808000200041c0c0006a2038413010" + "86818080001a2005200041c0d2006a41f0016a225810b280808000200041" + "c0c9006a203441301086818080001a20004180ce006a4100413010858180" + "80001a200042c18e8ea3d58c88f8183703d84e200042d2a1c19ee8addffc" + "033703d04e2000429e97eb8de0d783db8e7f3703c84e20004295b7949cfd" + "d590b8d8003703c04e200042d2cbb6fee1c8c8d5dd003703b84e200042f1" + "e0c7b3c8bcf2814d3703b04e2054200041c0c0006a20004180ce006a10b3" + "808080002002410041301085818080002102200042ba8a92abf1a7dbf214" + "3703a84e200042e8a0ee96fe89bcf2143703a04e200042a4a0a0f4c7f1c6" + "86a27f3703984e200042acfced84e38c82c4d0003703904e200042d5cb96" + "94b3cac8f92a3703884e200042c38bd5b3c8bcf286897f3703804e205520" + "0041c0c9006a20004180ce006a10b38080800020004180c5006a20004180" + "3c6a41e0001086818080001a200041c0376a41306a2259200041c0d2006a" + "41d0026a225a10b280808000200041c0376a205641301086818080001a20" + "30200041c0d2006a41b0036a225b10b280808000200041803c6a200041c0" + "d2006a4180036a225c41301086818080001a2037200041c0d2006a419004" + "6a225d10b280808000200041c0c0006a200041c0d2006a41e0036a225e41" + "301086818080001a20004180ce006a410041301085818080001a200042c1" + "8e8ea3d58c88f8183703d84e200042d2a1c19ee8addffc033703d04e2000" + "429e97eb8de0d783db8e7f3703c84e20004295b7949cfdd590b8d8003703" + "c04e200042d2cbb6fee1c8c8d5dd003703b84e200042f1e0c7b3c8bcf281" + "4d3703b04e2006200041803c6a20004180ce006a10b38080800020024100" + "4130108581808000215f200042ba8a92abf1a7dbf2143703a84e200042e8" + "a0ee96fe89bcf2143703a04e200042a4a0a0f4c7f1c686a27f3703984e20" + "0042acfced84e38c82c4d0003703904e200042d5cb9694b3cac8f92a3703" + "884e200042c38bd5b3c8bcf286897f3703804e2007200041c0c0006a2000" + "4180ce006a10b380808000200041c0c9006a200041c0376a41e000108681" + "8080001a200042afff91c4a8fbbb87113703d84e20004289bd83adbef984" + "9c2e3703d04e200042d0d1a385a497e78d413703c84e20004294a7e7acc2" + "baa5a44f3703c04e200042ecf9a5e2bf8da8a1d8003703b84e200042c6ac" + "97e7d4d59afbb27f3703b04e200042ebcded87fbc188f9083703a84e2000" + "42cd9cabeda5fde4f11c3703a04e200042eed3f096abd9ebada37f370398" + "4e2000428fc5dc88cd998ff4977f3703904e2000429386aaa8abf2d7b446" + "3703884e200042e5a8e798abaaa584073703804e2036410041c001108581" + "8080002160200041b82e6a41a0026a200041c0c9006a20004180ce006a10" + "b480808000200041b82e6a20004180c5006a41a0021086818080001a2000" + "41a0e8006a200041f8296a10b58080800020004180ce006a200041f8296a" + "41a0026a226110b580808000200041f8326a20004180ce006a10b6808080" + "00200041c0c9006a200041a0e8006a200041f8326a10b780808000200041" + "f8326a2006200710b38080800020004180e0006a200041f8326a203310b8" + "8080800020004180e0006a41306a2230200041f8326a203310b980808000" + "200041f8326a200041c0c9006a10ba80808000200041a0e2006a200041f8" + "326a20004180e0006a10bb80808000200041f8326a200710ba8080800020" + "0041c0e4006a200041f8326a203310b880808000200041c0e4006a41306a" + "2236200041f8326a203310b980808000200041f8326a200041c0c9006a20" + "0610b380808000200041c0376a200041c0e4006a200041f8326a10bb8080" + "8000200041803c6a200610ba80808000200041f8326a200041c0c9006a20" + "0710b380808000200041c0c0006a200041803c6a200041f8326a10bb8080" + "8000200041a0e8006a2006200041c0c0006a10b380808000200041f8326a" + "2007200041c0376a10b380808000200041c0db006a200041a0e8006a2000" + "41f8326a10bc8080800020004180c5006a200041c0db006a203510b88080" + "80002031200041c0db006a203510b980808000200041f8326a200041c0c9" + "006a200041a0e2006a10b380808000200041c0d2006a20004180c5006a20" + "0041f8326a10bc80808000200041a0e8006a200041c0d2006a10bd808080" + "00200041f8326a203910bd80808000200041e0e6006a200041a0e8006a20" + "0041f8326a10b980808000200041c0db006a200041e0e6006a10a6808080" + "0020004180d7006a410041301085818080001a200041c0e7006a20004180" + "d7006a200041c0db006a20002d00f05b2202109080808000200041f8326a" + "200041c0d2006a200041c0e7006a10a780808000200041a0e8006a200041" + "c0e7006a10b28080800020332039200041a0e8006a10a780808000200041" + "a0e8006a200041f8326a41e0001086818080001a200020023a0080692000" + "4180d7006a410041e0001085818080001a200041c0db006a20004180d700" + "6a200041a0e8006a200210b080808000200041f8326a200041c0db006a20" + "0041a0e2006a10b380808000203f200041c0db006a200041c0376a10b380" + "8080002040200041c0db006a200041c0c0006a10b380808000200041c0db" + "006a200041f8326a41a0021086818080001a200020023a00e05d20004180" + "d7006a410041a0021085818080001a200041c0d2006a20004180d7006a20" + "0041c0db006a200210b0808080002038203d203c200210b0808080002034" + "2004203b200210b080808000200041a0e8006a200041f8296a200041c0d2" + "006a10b480808000200041f8326a200041c0d2006a10b180808000200320" + "61200041f8326a10b480808000200041f8326a200041a0e8006a41c00410" + "86818080001a200020023a00b837200041803c6a410041c0041085818080" + "001a200041c0db006a200041803c6a200041f8326a200210b08080800020" + "3c200041803c6a41e0006a203f200210b080808000203b200041803c6a41" + "c0016a2040200210b080808000200041a0e8006a200041803c6a41a0026a" + "203e200210b0808080002008200041803c6a4180036a2041200210b08080" + "8000203a200041803c6a41e0036a2042200210b080808000200041c0376a" + "200041c0db006a41a0021086818080001a200041c0376a41a0026a200041" + "a0e8006a41a0021086818080002161200041c0c0006a200041b82e6a2000" + "41c0376a10be80808000200041c0376a200041c0c0006a41c00410868180" + "80001a205f203710b28080800020004180ce006a200041c0c0006a413010" + "86818080001a2001200041c0c0006a4190016a10b28080800020004180d7" + "006a200041c0c0006a41e0006a41301086818080001a2035200041c0c000" + "6a41f0016a10b280808000200041c0db006a200041c0c0006a41c0016a41" + "301086818080001a200041a0e8006a410041301085818080001a200042c1" + "8e8ea3d58c88f8183703f868200042d2a1c19ee8addffc033703f0682000" + "429e97eb8de0d783db8e7f3703e86820004295b7949cfdd590b8d8003703" + "e068200042d2cbb6fee1c8c8d5dd003703d868200042f1e0c7b3c8bcf281" + "4d3703d068203820004180d7006a200041a0e8006a10b380808000204341" + "0041301085818080002133200042ba8a92abf1a7dbf2143703c868200042" + "e8a0ee96fe89bcf2143703c068200042a4a0a0f4c7f1c686a27f3703b868" + "200042acfced84e38c82c4d0003703b068200042d5cb9694b3cac8f92a37" + "03a868200042c38bd5b3c8bcf286897f3703a0682034200041c0db006a20" + "0041a0e8006a10b380808000200041c0d2006a20004180ce006a41e00010" + "86818080001a2005200041c0c0006a41d0026a10b280808000200041c0c9" + "006a200041c0c0006a41a0026a223741301086818080001a205f200041c0" + "c0006a41b0036a10b28080800020004180ce006a200041c0c0006a418003" + "6a41301086818080001a2035200041c0c0006a4190046a10b28080800020" + "0041c0db006a200041c0c0006a41e0036a41301086818080001a200041a0" + "e8006a410041301085818080001a200042c18e8ea3d58c88f8183703f868" + "200042d2a1c19ee8addffc033703f0682000429e97eb8de0d783db8e7f37" + "03e86820004295b7949cfdd590b8d8003703e068200042d2cbb6fee1c8c8" + "d5dd003703d868200042f1e0c7b3c8bcf2814d3703d068203d20004180ce" + "006a200041a0e8006a10b380808000203341004130108581808000210620" + "0042ba8a92abf1a7dbf2143703c868200042e8a0ee96fe89bcf2143703c0" + "68200042a4a0a0f4c7f1c686a27f3703b868200042acfced84e38c82c4d0" + "003703b068200042d5cb9694b3cac8f92a3703a868200042c38bd5b3c8bc" + "f286897f3703a0682004200041c0db006a200041a0e8006a10b380808000" + "20004180d7006a200041c0c9006a41e0001086818080001a200042afff91" + "c4a8fbbb87113703985c20004289bd83adbef9849c2e3703905c200042d0" + "d1a385a497e78d413703885c20004294a7e7acc2baa5a44f3703805c2000" + "42ecf9a5e2bf8da8a1d8003703f85b200042c6ac97e7d4d59afbb27f3703" + "f05b200042ebcded87fbc188f9083703e85b200042cd9cabeda5fde4f11c" + "3703e05b200042eed3f096abd9ebada37f3703d85b2000428fc5dc88cd99" + "8ff4977f3703d05b2000429386aaa8abf2d7b4463703c85b200042e5a8e7" + "98abaaa584073703c05b203c410041c00110858180800021432003200041" + "80d7006a200041c0db006a10b480808000200041a0e8006a200041c0d200" + "6a41a0021086818080001a2005200610b280808000200041c0c9006a2000" + "41a0e8006a41301086818080001a2039204410b280808000200041c0d200" + "6a200841301086818080001a2001204510b28080800020004180d7006a20" + "3a41301086818080001a200041c0db006a410041301085818080001a2000" + "42c18e8ea3d58c88f8183703985c200042d2a1c19ee8addffc033703905c" + "2000429e97eb8de0d783db8e7f3703885c20004295b7949cfdd590b8d800" + "3703805c200042d2cbb6fee1c8c8d5dd003703f85b200042f1e0c7b3c8bc" + "f2814d3703f05b2060200041c0d2006a200041c0db006a10b38080800020" + "35410041301085818080002133200042ba8a92abf1a7dbf2143703e85b20" + "0042e8a0ee96fe89bcf2143703e05b200042a4a0a0f4c7f1c686a27f3703" + "d85b200042acfced84e38c82c4d0003703d05b200042d5cb9694b3cac8f9" + "2a3703c85b200042c38bd5b3c8bcf286897f3703c05b204620004180d700" + "6a200041c0db006a10b38080800020004180ce006a200041c0c9006a41e0" + "001086818080001a2031204710b28080800020004180c5006a2003413010" + "86818080001a2005204810b280808000200041c0c9006a20494130108681" + "8080001a2001204a10b28080800020004180d7006a204b41301086818080" + "001a200041c0db006a410041301085818080001a200042c18e8ea3d58c88" + "f8183703985c200042d2a1c19ee8addffc033703905c2000429e97eb8de0" + "d783db8e7f3703885c20004295b7949cfdd590b8d8003703805c200042d2" + "cbb6fee1c8c8d5dd003703f85b200042f1e0c7b3c8bcf2814d3703f05b20" + "38200041c0c9006a200041c0db006a10b380808000203341004130108581" + "8080002133200042ba8a92abf1a7dbf2143703e85b200042e8a0ee96fe89" + "bcf2143703e05b200042a4a0a0f4c7f1c686a27f3703d85b200042acfced" + "84e38c82c4d0003703d05b200042d5cb9694b3cac8f92a3703c85b200042" + "c38bd5b3c8bcf286897f3703c05b203420004180d7006a200041c0db006a" + "10b380808000200041c0d2006a20004180c5006a41e0001086818080001a" + "200042afff91c4a8fbbb87113703d85720004289bd83adbef9849c2e3703" + "d057200042d0d1a385a497e78d413703c85720004294a7e7acc2baa5a44f" + "3703c057200042ecf9a5e2bf8da8a1d8003703b857200042c6ac97e7d4d5" + "9afbb27f3703b057200042ebcded87fbc188f9083703a857200042cd9cab" + "eda5fde4f11c3703a057200042eed3f096abd9ebada37f37039857200042" + "8fc5dc88cd998ff4977f370390572000429386aaa8abf2d7b44637038857" + "200042e5a8e798abaaa5840737038057203d410041c00110858180800021" + "072032200041c0d2006a20004180d7006a10b480808000200041c0db006a" + "20004180ce006a41a0021086818080001a200041c0c0006a200041c0db00" + "6a41c0041086818080001a200041c0c0006a200041c0376a10bf80808000" + "200041a0e8006a200041c0c0006a10c0808080002032200310b180808000" + "200041c0db006a200041a0e8006a41a0021086818080001a200041c0376a" + "200041c0db006a41c0041086818080001a20004180c5006a200041c0c000" + "6a10c180808000200041c0c9006a20004180c5006a10c080808000200041" + "80ce006a200041c0376a20004180c5006a10be80808000200041c0376a20" + "004180ce006a10c180808000200041b82e6a200041c0376a10c180808000" + "200041c0d2006a200041b82e6a10c180808000200041c0d2006a200041c0" + "c9006a10bf80808000200041c0c9006a200041c0d2006a10c18080800020" + "0320004180ce006a41a0026a10b180808000200041a0e8006a20004180ce" + "006a41a0021086818080001a20004180ce006a200041a0e8006a41c00410" + "86818080001a200041a0e8006a20004180ce006a200041c0c0006a10be80" + "808000200041c0c9006a200041a0e8006a10bf808080002003203710b180" + "808000200041a0e8006a200041c0c0006a41a0021086818080001a200041" + "80ce006a200041a0e8006a41c0041086818080001a200041c0376a200041" + "c0c0006a10bf80808000200041a0e2006a41306a2205205910b280808000" + "200041a0e2006a200041c0376a41301086818080001a2001200041c0376a" + "4190016a10b28080800020004180d7006a200041c0376a41e0006a413010" + "86818080001a2033200041c0376a41f0016a10b280808000200041c0db00" + "6a200041c0376a41c0016a41301086818080001a200041a0e8006a410041" + "301085818080001a200042c18e8ea3d58c88f8183703f868200042d2a1c1" + "9ee8addffc033703f0682000429e97eb8de0d783db8e7f3703e868200042" + "95b7949cfdd590b8d8003703e068200042d2cbb6fee1c8c8d5dd003703d8" + "68200042f1e0c7b3c8bcf2814d3703d068200041c0e4006a41e0006a2237" + "20004180d7006a200041a0e8006a10b38080800020064100413010858180" + "80002106200042ba8a92abf1a7dbf2143703c868200042e8a0ee96fe89bc" + "f2143703c068200042a4a0a0f4c7f1c686a27f3703b868200042acfced84" + "e38c82c4d0003703b068200042d5cb9694b3cac8f92a3703a868200042c3" + "8bd5b3c8bcf286897f3703a068200041c0e4006a41c0016a2235200041c0" + "db006a200041a0e8006a10b380808000200041c0e4006a200041a0e2006a" + "41e0001086818080001a2030200041c0376a41d0026a10b2808080002000" + "4180e0006a206141301086818080001a2005200041c0376a41b0036a10b2" + "80808000200041a0e2006a200041c0376a4180036a41301086818080001a" + "2033200041c0376a4190046a10b280808000200041c0db006a200041c037" + "6a41e0036a41301086818080001a200041a0e8006a410041301085818080" + "001a200042c18e8ea3d58c88f8183703f868200042d2a1c19ee8addffc03" + "3703f0682000429e97eb8de0d783db8e7f3703e86820004295b7949cfdd5" + "90b8d8003703e068200042d2cbb6fee1c8c8d5dd003703d868200042f1e0" + "c7b3c8bcf2814d3703d0682007200041a0e2006a200041a0e8006a10b380" + "808000200641004130108581808000213c200042ba8a92abf1a7dbf21437" + "03c868200042e8a0ee96fe89bcf2143703c068200042a4a0a0f4c7f1c686" + "a27f3703b868200042acfced84e38c82c4d0003703b068200042d5cb9694" + "b3cac8f92a3703a868200042c38bd5b3c8bcf286897f3703a06820042000" + "41c0db006a200041a0e8006a10b38080800020004180d7006a20004180e0" + "006a41e0001086818080001a200042afff91c4a8fbbb87113703985c2000" + "4289bd83adbef9849c2e3703905c200042d0d1a385a497e78d413703885c" + "20004294a7e7acc2baa5a44f3703805c200042ecf9a5e2bf8da8a1d80037" + "03f85b200042c6ac97e7d4d59afbb27f3703f05b200042ebcded87fbc188" + "f9083703e85b200042cd9cabeda5fde4f11c3703e05b200042eed3f096ab" + "d9ebada37f3703d85b2000428fc5dc88cd998ff4977f3703d05b20004293" + "86aaa8abf2d7b4463703c85b200042e5a8e798abaaa584073703c05b2043" + "410041c001108581808000213d200320004180d7006a200041c0db006a10" + "b480808000200041a0e8006a200041c0e4006a41a0021086818080001a20" + "30203c10b28080800020004180e0006a200041a0e8006a41301086818080" + "001a2036204410b280808000200041c0e4006a200841301086818080001a" + "2001204510b28080800020004180d7006a203a41301086818080001a2000" + "41c0db006a410041301085818080001a200042c18e8ea3d58c88f8183703" + "985c200042d2a1c19ee8addffc033703905c2000429e97eb8de0d783db8e" + "7f3703885c20004295b7949cfdd590b8d8003703805c200042d2cbb6fee1" + "c8c8d5dd003703f85b200042f1e0c7b3c8bcf2814d3703f05b200041a0e2" + "006a41e0006a2243200041c0e4006a200041c0db006a10b3808080002033" + "410041301085818080002133200042ba8a92abf1a7dbf2143703e85b2000" + "42e8a0ee96fe89bcf2143703e05b200042a4a0a0f4c7f1c686a27f3703d8" + "5b200042acfced84e38c82c4d0003703d05b200042d5cb9694b3cac8f92a" + "3703c85b200042c38bd5b3c8bcf286897f3703c05b200041a0e2006a41c0" + "016a224620004180d7006a200041c0db006a10b380808000200041a0e200" + "6a20004180e0006a41e0001086818080001a200041c0e7006a41306a2206" + "204710b280808000200041c0e7006a200341301086818080001a20302048" + "10b28080800020004180e0006a204941301086818080001a2001204a10b2" + "8080800020004180d7006a204b41301086818080001a200041c0db006a41" + "0041301085818080001a200042c18e8ea3d58c88f8183703985c200042d2" + "a1c19ee8addffc033703905c2000429e97eb8de0d783db8e7f3703885c20" + "004295b7949cfdd590b8d8003703805c200042d2cbb6fee1c8c8d5dd0037" + "03f85b200042f1e0c7b3c8bcf2814d3703f05b203720004180e0006a2000" + "41c0db006a10b3808080002033410041301085818080002133200042ba8a" + "92abf1a7dbf2143703e85b200042e8a0ee96fe89bcf2143703e05b200042" + "a4a0a0f4c7f1c686a27f3703d85b200042acfced84e38c82c4d0003703d0" + "5b200042d5cb9694b3cac8f92a3703c85b200042c38bd5b3c8bcf286897f" + "3703c05b203520004180d7006a200041c0db006a10b380808000200041c0" + "e4006a200041c0e7006a41e0001086818080001a200042afff91c4a8fbbb" + "87113703d85720004289bd83adbef9849c2e3703d057200042d0d1a385a4" + "97e78d413703c85720004294a7e7acc2baa5a44f3703c057200042ecf9a5" + "e2bf8da8a1d8003703b857200042c6ac97e7d4d59afbb27f3703b0572000" + "42ebcded87fbc188f9083703a857200042cd9cabeda5fde4f11c3703a057" + "200042eed3f096abd9ebada37f370398572000428fc5dc88cd998ff4977f" + "370390572000429386aaa8abf2d7b44637038857200042e5a8e798abaaa5" + "8407370380572007410041c00110858180800021072032200041c0e4006a" + "20004180d7006a10b480808000200041c0db006a200041a0e2006a41a002" + "1086818080001a2006203310b280808000200041c0e7006a200041c0db00" + "6a41301086818080001a2005204c10b280808000200041a0e2006a203d41" + "301086818080001a2036204d10b280808000200041c0e4006a203b413010" + "86818080001a20004180d7006a410041301085818080001a200042c18e8e" + "a3d58c88f8183703d857200042d2a1c19ee8addffc033703d0572000429e" + "97eb8de0d783db8e7f3703c85720004295b7949cfdd590b8d8003703c057" + "200042d2cbb6fee1c8c8d5dd003703b857200042f1e0c7b3c8bcf2814d37" + "03b05720004180e0006a41e0006a200041a0e2006a20004180d7006a10b3" + "808080002001410041301085818080002101200042ba8a92abf1a7dbf214" + "3703a857200042e8a0ee96fe89bcf2143703a057200042a4a0a0f4c7f1c6" + "86a27f37039857200042acfced84e38c82c4d00037039057200042d5cb96" + "94b3cac8f92a37038857200042c38bd5b3c8bcf286897f37038057200041" + "80e0006a41c0016a200041c0e4006a20004180d7006a10b3808080002000" + "4180e0006a200041c0e7006a41e0001086818080001a200041e0e6006a41" + "306a204e10b280808000200041e0e6006a203241301086818080001a2006" + "204f10b280808000200041c0e7006a205041301086818080001a20362051" + "10b280808000200041c0e4006a205241301086818080001a20004180d700" + "6a410041301085818080001a200042c18e8ea3d58c88f8183703d8572000" + "42d2a1c19ee8addffc033703d0572000429e97eb8de0d783db8e7f3703c8" + "5720004295b7949cfdd590b8d8003703c057200042d2cbb6fee1c8c8d5dd" + "003703b857200042f1e0c7b3c8bcf2814d3703b0572043200041c0e7006a" + "20004180d7006a10b3808080002001410041301085818080002101200042" + "ba8a92abf1a7dbf2143703a857200042e8a0ee96fe89bcf2143703a05720" + "0042a4a0a0f4c7f1c686a27f37039857200042acfced84e38c82c4d00037" + "039057200042d5cb9694b3cac8f92a37038857200042c38bd5b3c8bcf286" + "897f370380572046200041c0e4006a20004180d7006a10b3808080002000" + "41a0e2006a200041e0e6006a41e0001086818080001a200042afff91c4a8" + "fbbb87113703986520004289bd83adbef9849c2e37039065200042d0d1a3" + "85a497e78d413703886520004294a7e7acc2baa5a44f37038065200042ec" + "f9a5e2bf8da8a1d8003703f864200042c6ac97e7d4d59afbb27f3703f064" + "200042ebcded87fbc188f9083703e864200042cd9cabeda5fde4f11c3703" + "e064200042eed3f096abd9ebada37f3703d8642000428fc5dc88cd998ff4" + "977f3703d0642000429386aaa8abf2d7b4463703c864200042e5a8e798ab" + "aaa584073703c0642037410041c00110858180800021372053200041a0e2" + "006a200041c0e4006a10b48080800020004180d7006a20004180e0006a41" + "a0021086818080001a200041c0376a20004180d7006a41c0041086818080" + "001a200041c0d2006a20004180ce006a10bf808080002005203910b28080" + "8000200041a0e2006a200041c0d2006a41301086818080001a2001205710" + "b28080800020004180d7006a203841301086818080001a2033205810b280" + "808000200041c0db006a203441301086818080001a200041a0e8006a4100" + "41301085818080001a200042c18e8ea3d58c88f8183703f868200042d2a1" + "c19ee8addffc033703f0682000429e97eb8de0d783db8e7f3703e8682000" + "4295b7949cfdd590b8d8003703e068200042d2cbb6fee1c8c8d5dd003703" + "d868200042f1e0c7b3c8bcf2814d3703d068203720004180d7006a200041" + "a0e8006a10b380808000203c410041301085818080002134200042ba8a92" + "abf1a7dbf2143703c868200042e8a0ee96fe89bcf2143703c068200042a4" + "a0a0f4c7f1c686a27f3703b868200042acfced84e38c82c4d0003703b068" + "200042d5cb9694b3cac8f92a3703a868200042c38bd5b3c8bcf286897f37" + "03a0682035200041c0db006a200041a0e8006a10b380808000200041c0e4" + "006a200041a0e2006a41e0001086818080001a2030205a10b28080800020" + "004180e0006a205641301086818080001a2005205b10b280808000200041" + "a0e2006a205c41301086818080001a2033205d10b280808000200041c0db" + "006a205e41301086818080001a200041a0e8006a41004130108581808000" + "1a200042c18e8ea3d58c88f8183703f868200042d2a1c19ee8addffc0337" + "03f0682000429e97eb8de0d783db8e7f3703e86820004295b7949cfdd590" + "b8d8003703e068200042d2cbb6fee1c8c8d5dd003703d868200042f1e0c7" + "b3c8bcf2814d3703d0682007200041a0e2006a200041a0e8006a10b38080" + "80002034410041301085818080002134200042ba8a92abf1a7dbf2143703" + "c868200042e8a0ee96fe89bcf2143703c068200042a4a0a0f4c7f1c686a2" + "7f3703b868200042acfced84e38c82c4d0003703b068200042d5cb9694b3" + "cac8f92a3703a868200042c38bd5b3c8bcf286897f3703a0682004200041" + "c0db006a200041a0e8006a10b38080800020004180d7006a20004180e000" + "6a41e0001086818080001a200042afff91c4a8fbbb87113703985c200042" + "89bd83adbef9849c2e3703905c200042d0d1a385a497e78d413703885c20" + "004294a7e7acc2baa5a44f3703805c200042ecf9a5e2bf8da8a1d8003703" + "f85b200042c6ac97e7d4d59afbb27f3703f05b200042ebcded87fbc188f9" + "083703e85b200042cd9cabeda5fde4f11c3703e05b200042eed3f096abd9" + "ebada37f3703d85b2000428fc5dc88cd998ff4977f3703d05b2000429386" + "aaa8abf2d7b4463703c85b200042e5a8e798abaaa584073703c05b203d41" + "0041c0011085818080002138200320004180d7006a200041c0db006a10b4" + "80808000200041a0e8006a200041c0e4006a41a0021086818080001a2000" + "41c0d2006a200041a0e8006a41c0041086818080001a20004180c5006a20" + "0041b82e6a10bf808080002005203110b280808000200041a0e2006a2000" + "4180c5006a41301086818080001a200120004180c5006a4190016a10b280" + "80800020004180d7006a205441301086818080001a203320004180c5006a" + "41f0016a10b280808000200041c0db006a205541301086818080001a2000" + "41a0e8006a410041301085818080001a200042c18e8ea3d58c88f8183703" + "f868200042d2a1c19ee8addffc033703f0682000429e97eb8de0d783db8e" + "7f3703e86820004295b7949cfdd590b8d8003703e068200042d2cbb6fee1" + "c8c8d5dd003703d868200042f1e0c7b3c8bcf2814d3703d0682037200041" + "80d7006a200041a0e8006a10b38080800020344100413010858180800021" + "34200042ba8a92abf1a7dbf2143703c868200042e8a0ee96fe89bcf21437" + "03c068200042a4a0a0f4c7f1c686a27f3703b868200042acfced84e38c82" + "c4d0003703b068200042d5cb9694b3cac8f92a3703a868200042c38bd5b3" + "c8bcf286897f3703a0682035200041c0db006a200041a0e8006a10b38080" + "8000200041c0e4006a200041a0e2006a41e0001086818080001a20302000" + "4180c5006a41d0026a10b28080800020004180e0006a20004180c5006a41" + "a0026a41301086818080001a200520004180c5006a41b0036a10b2808080" + "00200041a0e2006a20004180c5006a4180036a41301086818080001a2033" + "20004180c5006a4190046a10b280808000200041c0db006a20004180c500" + "6a41e0036a41301086818080001a200041a0e8006a410041301085818080" + "001a200042c18e8ea3d58c88f8183703f868200042d2a1c19ee8addffc03" + "3703f0682000429e97eb8de0d783db8e7f3703e86820004295b7949cfdd5" + "90b8d8003703e068200042d2cbb6fee1c8c8d5dd003703d868200042f1e0" + "c7b3c8bcf2814d3703d0682007200041a0e2006a200041a0e8006a10b380" + "8080002034410041301085818080002105200042ba8a92abf1a7dbf21437" + "03c868200042e8a0ee96fe89bcf2143703c068200042a4a0a0f4c7f1c686" + "a27f3703b868200042acfced84e38c82c4d0003703b068200042d5cb9694" + "b3cac8f92a3703a868200042c38bd5b3c8bcf286897f3703a06820042000" + "41c0db006a200041a0e8006a10b38080800020004180d7006a20004180e0" + "006a41e0001086818080001a200042afff91c4a8fbbb87113703985c2000" + "4289bd83adbef9849c2e3703905c200042d0d1a385a497e78d413703885c" + "20004294a7e7acc2baa5a44f3703805c200042ecf9a5e2bf8da8a1d80037" + "03f85b200042c6ac97e7d4d59afbb27f3703f05b200042ebcded87fbc188" + "f9083703e85b200042cd9cabeda5fde4f11c3703e05b200042eed3f096ab" + "d9ebada37f3703d85b2000428fc5dc88cd998ff4977f3703d05b20004293" + "86aaa8abf2d7b4463703c85b200042e5a8e798abaaa584073703c05b2038" + "410041c0011085818080001a200320004180d7006a200041c0db006a10b4" + "80808000200041a0e8006a200041c0e4006a41a0021086818080001a2030" + "200510b28080800020004180e0006a200041a0e8006a4130108681808000" + "1a2036204410b280808000200041c0e4006a200841301086818080001a20" + "01204510b28080800020004180d7006a203a41301086818080001a200041" + "c0db006a410041301085818080001a200042c18e8ea3d58c88f818370398" + "5c200042d2a1c19ee8addffc033703905c2000429e97eb8de0d783db8e7f" + "3703885c20004295b7949cfdd590b8d8003703805c200042d2cbb6fee1c8" + "c8d5dd003703f85b200042f1e0c7b3c8bcf2814d3703f05b2043200041c0" + "e4006a200041c0db006a10b3808080002033410041301085818080002104" + "200042ba8a92abf1a7dbf2143703e85b200042e8a0ee96fe89bcf2143703" + "e05b200042a4a0a0f4c7f1c686a27f3703d85b200042acfced84e38c82c4" + "d0003703d05b200042d5cb9694b3cac8f92a3703c85b200042c38bd5b3c8" + "bcf286897f3703c05b204620004180d7006a200041c0db006a10b3808080" + "00200041a0e2006a20004180e0006a41e0001086818080001a2006204710" + "b280808000200041c0e7006a200341301086818080001a2030204810b280" + "80800020004180e0006a204941301086818080001a2001204a10b2808080" + "0020004180d7006a204b41301086818080001a200041c0db006a41004130" + "1085818080001a200042c18e8ea3d58c88f8183703985c200042d2a1c19e" + "e8addffc033703905c2000429e97eb8de0d783db8e7f3703885c20004295" + "b7949cfdd590b8d8003703805c200042d2cbb6fee1c8c8d5dd003703f85b" + "200042f1e0c7b3c8bcf2814d3703f05b203720004180e0006a200041c0db" + "006a10b3808080002004410041301085818080001a200042ba8a92abf1a7" + "dbf2143703e85b200042e8a0ee96fe89bcf2143703e05b200042a4a0a0f4" + "c7f1c686a27f3703d85b200042acfced84e38c82c4d0003703d05b200042" + "d5cb9694b3cac8f92a3703c85b200042c38bd5b3c8bcf286897f3703c05b" + "203520004180d7006a200041c0db006a10b380808000200041c0e4006a20" + "0041c0e7006a41e0001086818080001a200042afff91c4a8fbbb87113703" + "d85720004289bd83adbef9849c2e3703d057200042d0d1a385a497e78d41" + "3703c85720004294a7e7acc2baa5a44f3703c057200042ecf9a5e2bf8da8" + "a1d8003703b857200042c6ac97e7d4d59afbb27f3703b057200042ebcded" + "87fbc188f9083703a857200042cd9cabeda5fde4f11c3703a057200042ee" + "d3f096abd9ebada37f370398572000428fc5dc88cd998ff4977f37039057" + "2000429386aaa8abf2d7b44637038857200042e5a8e798abaaa584073703" + "80572007410041c0011085818080001a2032200041c0e4006a20004180d7" + "006a10b480808000200041c0db006a200041a0e2006a41a0021086818080" + "001a20004180c5006a200041c0db006a41c0041086818080001a20004180" + "c5006a200041c0376a10bf8080800020004180c5006a200041c0d2006a10" + "bf80808000200041f8296a20004180c5006a200041c0c9006a10be808080" + "00200020023a00a068024020024101470d00200041a0e8006a200041f829" + "6a41c0041086818080001a200041f8326a10ac80808000200041a0e8006a" + "200041f8326a10c2808080002008203f10c2808080007110a38080800020" + "3a204010c2808080007110a3808080002003203e10c28080800020492041" + "10c2808080007110a380808000204b204210c2808080007110a380808000" + "7110a380808000210220002802a82520002802ac25108580808000200028" + "029825200028029c25108580808000200028028825200028028c25108580" + "80800020002802f82420002802fc24108580808000202f202e1086808080" + "0020002802c01c20002802c41c10828080800020002802a01520002802a4" + "15108480808000200028028815200028028c1510848080800020002802b4" + "1320002802b81310848080800020002802bc1220002802c0121084808080" + "0020002802e41020002802e810108480808000200028028c0f2000280290" + "0f10848080800020002802940e20002802980e108480808000200028029c" + "0d20002802a00d108480808000200241ff017141004721020c080b200041" + "003602f832200041a0e8006a41c886c08000200041f8326a41cc86c08000" + "109680808000000b200041c0c0006a200041b8256a203610b48080800020" + "004180c5006a200041b8256a203610c380808000200041c0c9006a203610" + "b68080800020004180ce006a200041c0c9006a200041b8256a10c3808080" + "00200041c0d2006a20004180ce006a20004180c5006a10b4808080002000" + "4180d7006a200041c0d2006a200041c0c0006a10b780808000200041c0db" + "006a200041c0c0006a200041c0c0006a10c380808000200041a0e8006a20" + "0041c0c0006a10b680808000200041f8326a20004180d7006a200041a0e8" + "006a10b7808080002005200041c0db006a41a0021086818080001a200041" + "b8256a200041f8326a41c0041086818080001a410121020c000b0b200041" + "80d7006a2030200441e8006c6a10a580808000200041a0026a202e200441" + "05746a2202290300220c42ffffffff6f7e22094200428180808070420010" + "878180800020004190026a2009420042feb7f9ffaf80e9ded30042001087" + "8180800020004180026a200942004285b087cd8081f69c33420010878180" + "8000200041f0016a2009420042c8faf5ccb2eae9f6f30042001087818080" + "00200041e0016a200029039002220e20022903087c220b200041a0026a41" + "086a290300200c20002903a00222097c200954ad7c7c220c42ffffffff6f" + "7e220942004281808080704200108781808000200041d0016a2009420042" + "feb7f9ffaf80e9ded300420010878180800020004180016a200942004285" + "b087cd8081f69c334200108781808000200041306a2009420042c8faf5cc" + "b2eae9f6f3004200108781808000200041c0016a20002903d00122132000" + "29038002221220022903107c220a20004190026a41086a290300200b200e" + "54ad7c200c200b54ad7c7c220d7c220b200041e0016a41086a2903002000" + "2903e0012209200c7c200954ad7c7c220c42ffffffff6f7e220942004281" + "808080704200108781808000200041b0016a2009420042feb7f9ffaf80e9" + "ded3004200108781808000200041a0016a200942004285b087cd8081f69c" + "33420010878180800020004190016a2009420042c8faf5ccb2eae9f6f300" + "4200108781808000200041f0006a20002903b001221020002903f0012211" + "20022903187c220e20004180026a41086a290300200a201254ad7c200d20" + "0a54ad7c7c220a2000290380017c2212200041d0016a41086a290300200b" + "201354ad7c200c200b54ad7c7c22137c220b200041c0016a41086a290300" + "20002903c0012209200c7c200954ad7c7c220c42ffffffff6f7e22094200" + "4281808080704200108781808000200041e0006a2009420042feb7f9ffaf" + "80e9ded3004200108781808000200041d0006a200942004285b087cd8081" + "f69c334200108781808000200041c0006a2009420042c8faf5ccb2eae9f6" + "f3004200108781808000200041a0016a41086a290300210d200041306a41" + "086a290300210f200029039001211720002903502114200041d0006a4108" + "6a2903002115200020002903602216200041f0016a41086a290300200e20" + "1154ad7c200a200e54ad7c221120002903307c220920004180016a41086a" + "2903002012200a54ad7c2013201254ad7c7c220a20002903a0017c220e20" + "0041b0016a41086a290300200b201054ad7c200c200b54ad7c7c22127c22" + "0b200041f0006a41086a29030020002903702213200c7c201354ad7c7c22" + "133703f832200020142017200f2009201154ad7c200a200954ad7c22107c" + "2209200d200e200a54ad7c2012200e54ad7c7c220c7c220a200041e0006a" + "41086a290300200b201654ad7c2013200b54ad7c7c220b37038033200020" + "004190016a41086a2903002009201054ad7c200c200954ad7c220e200029" + "03407c22092015200a200c54ad7c200b200a54ad7c7c220b370388332000" + "200041c0006a41086a2903002009200e54ad7c200b200954ad7c37039033" + "200041a0e8006a200041f8326a10a280808000200020002903b868370398" + "4e200020002903b0683703904e200020002903a8683703884e2000200029" + "03a0683703804e200041c0db006a410041301085818080001a2035410041" + "301085818080001a203441e086c0800041301086818080001a4101210220" + "0041013602e052200041003602d452200041003602c852200020333602c4" + "52200020004180ce006a3602c05203400240024020020d00200041086a20" + "0041c0d2006a10c48080800020002d0009210120002d000821030c010b20" + "0041003602e0520240024020002802c852450d00200041286a2002203210" + "c58080800020002802280d01200028022c21020b024020002802c0522201" + "450d0020002802c45221030340024020032001470d00200020033602c452" + "0c020b2000428080808080013702cc5220002003417f6a22033602c85220" + "0041206a2002203210c580808000024020002802200d0020002802242102" + "0c010b0b200020033602c4520c010b200041003602c852024020002802d4" + "52450d00200041186a2002203110c58080800020002802180d0120002802" + "1c21020b41002103200041003602d45220020d010b200041106a200041c0" + "d2006a10c48080800020002d0011210120002d001021030b024020034101" + "71450d00200041f8326a200041c0db006a10c680808000200041c0db006a" + "200041f8326a4190011086818080001a200041f8326a200041c0db006a20" + "004180d7006a10c780808000200041a0e8006a200041c0db006a200041f8" + "326a200110c880808000200041c0db006a200041a0e8006a419001108681" + "8080001a20002802e05221020c010b0b200041a0e8006a200041c0db006a" + "4190011086818080001a200041f8326a20004180236a200041a0e8006a10" + "c78080800020004180236a200041f8326a4190011086818080001a200441" + "016a21040c000b0b2000420137028433200041013602fc322000419482c0" + "80003602f83220004181808080003602a4682000200041a0e8006a360280" + "33200020004180d7006a3602a068200041c0d2006a41c886c08000200041" + "f8326a419c82c08000109680808000000b200220002802b40641b092c080" + "00108c80808000000b202f202e10868080800020002802c01c20002802c4" + "1c10828080800020002802a01520002802a4151084808080002000280288" + "15200028028c1510848080800020002802b41320002802b8131084808080" + "0020002802bc1220002802c01210848080800020002802e41020002802e8" + "10108480808000200028028c0f20002802900f1084808080002000280294" + "0e20002802980e108480808000200028029c0d20002802a00d1084808080" + "00410021020b200041e0ec006a24808080800020020ba60201087e200020" + "01290300220242ffffffff0f7c2203200254ad427f7c2202200220012903" + "0822047c2202200454ad7c20024282c88680d0ff96a1ac7f7c2204200254" + "ad7c427f7c423f8722022002200129031022057c2202200554ad7c200242" + "fbcff8b2fffe89e34c7c2205200254ad7c427f7c423f8722022002200129" + "031822067c2202200654ad7c200242b8858ab3cd9596898c7f7c22062002" + "54ad7c427f7c220242818080807083220720037c22083703002000200242" + "feb7f9ffaf80e9ded30083220920047c22032008200754ad7c2207370308" + "200020024285b087cd8081f69c3383220820057c22042003200954ad2007" + "200354ad7c7c22033703102000200242c8faf5ccb2eae9f6f3008320067c" + "2004200854ad2003200454ad7c7c3703180b1901017f2380808080004110" + "6b220120003a000f20012d000f0b3601017f23808080800041106b220224" + "8080808000200241013b010c200220013602082002200036020420024104" + "6a10f380808000000b6501017f23808080800041306b2202248080808000" + "200041306a200141306a41301086818080001a200041e0006a41e086c080" + "00200241004130108581808000220220012d006010908080800020002001" + "41301086818080001a200241306a2480808080000b25002000200141f087" + "c0800010df808080002000200110a98080800010d2808080003a00300be7" + "2502017f4c7e23808080800041b0096b2203248080808000200341c0046a" + "200229030022044200200129030022054200108781808000200341d0046a" + "20022903082206420020054200108781808000200341e0046a2002290310" + "2207420020054200108781808000200341f0046a20022903182208420020" + "05420010878180800020034180056a200229032022094200200542001087" + "8180800020034190056a2002290328220a42002005420010878180800020" + "0341a0056a20012903082205420020044200108781808000200341f0056a" + "2005420020064200108781808000200341c0066a20054200200742001087" + "8180800020034190076a2005420020084200108781808000200341e0076a" + "2005420020094200108781808000200341b0086a20054200200a42001087" + "81808000200341b0056a2001290310220542002004420010878180800020" + "034180066a2005420020064200108781808000200341d0066a2005420020" + "074200108781808000200341a0076a200542002008420010878180800020" + "0341f0076a2005420020094200108781808000200341c0086a2005420020" + "0a4200108781808000200341c0056a200129031822054200200442001087" + "8180800020034190066a2005420020064200108781808000200341e0066a" + "2005420020074200108781808000200341b0076a20054200200842001087" + "8180800020034180086a2005420020094200108781808000200341d0086a" + "20054200200a4200108781808000200341d0056a20012903202205420020" + "044200108781808000200341a0066a200542002006420010878180800020" + "0341f0066a2005420020074200108781808000200341c0076a2005420020" + "08420010878180800020034190086a200542002009420010878180800020" + "0341e0086a20054200200a4200108781808000200341e0056a2001290328" + "2205420020044200108781808000200341b0066a20054200200642001087" + "8180800020034180076a2005420020074200108781808000200341d0076a" + "2005420020084200108781808000200341a0086a20054200200942001087" + "81808000200341f0086a20054200200a4200108781808000200341b0046a" + "20032903c004220542fdfff3ffcffffff9897f7e2204420042abd5feffff" + "ffbfffb97f4200108781808000200341a0046a2004420042ffffcf8aebff" + "ffd51e4200108781808000200341b0036a2004420042a4ecc3b58fd4b498" + "e7004200108781808000200341c0026a2004420042bfa5949ccff0d2bbe4" + "004200108781808000200341d0016a2004420042d7d9ae9ae4f6e98dcb00" + "4200108781808000200341e0006a20044200429acdffcba3bdc4801a4200" + "10878180800020034190046a200341b0046a41086a290300200520032903" + "b00422047c200454ad7c220720032903a0047c220520032903a005220820" + "032903d0042209200341c0046a41086a2903007c220a7c220b7c220642fd" + "fff3ffcffffff9897f7e2204420042abd5feffffffbfffb97f4200108781" + "80800020034180046a2004420042ffffcf8aebffffd51e42001087818080" + "00200341f0036a2004420042a4ecc3b58fd4b498e7004200108781808000" + "200341e0036a2004420042bfa5949ccff0d2bbe400420010878180800020" + "0341d0036a2004420042d7d9ae9ae4f6e98dcb0042001087818080002003" + "41c0036a20044200429acdffcba3bdc4801a4200108781808000200341a0" + "036a200341a0046a41086a2903002005200754ad7c2006200554ad7c220c" + "20032903b0037c220520032903f005220d200341d0046a41086a29030020" + "0a200954ad7c220e20032903e0047c220f7c2207200341a0056a41086a29" + "0300200b200854ad7c7c220820032903b0057c22107c2209200329038004" + "7c220a20034190046a41086a290300200329039004220420067c200454ad" + "7c7c220642fdfff3ffcffffff9897f7e2204420042abd5feffffffbfffb9" + "7f420010878180800020034190036a2004420042ffffcf8aebffffd51e42" + "0010878180800020034180036a2004420042a4ecc3b58fd4b498e7004200" + "108781808000200341f0026a2004420042bfa5949ccff0d2bbe400420010" + "8781808000200341e0026a2004420042d7d9ae9ae4f6e98dcb0042001087" + "81808000200341d0026a20044200429acdffcba3bdc4801a420010878180" + "8000200341b0026a20034180046a41086a290300200a200954ad7c200620" + "0a54ad7c221120032903f0037c220a200341b0036a41086a290300200520" + "0c54ad7c2009200554ad7c221220032903c0027c2205200341e0046a4108" + "6a290300200f200e54ad7c220f20032903f0047c220920032903c0067c22" + "0b200341f0056a41086a2903002007200d54ad7c2008200754ad7c7c2207" + "2003290380067c220c200341b0056a41086a2903002010200854ad7c7c22" + "0820032903c0057c22107c22137c220d2003290390037c220e200341a003" + "6a41086a29030020032903a003220420067c200454ad7c7c220642fdfff3" + "ffcffffff9897f7e2204420042abd5feffffffbfffb97f42001087818080" + "00200341a0026a2004420042ffffcf8aebffffd51e420010878180800020" + "034190026a2004420042a4ecc3b58fd4b498e70042001087818080002003" + "4180026a2004420042bfa5949ccff0d2bbe4004200108781808000200341" + "f0016a2004420042d7d9ae9ae4f6e98dcb004200108781808000200341e0" + "016a20044200429acdffcba3bdc4801a4200108781808000200341c0016a" + "20034190036a41086a290300200e200d54ad7c2006200e54ad7c22142003" + "290380037c220e200341f0036a41086a290300200a201154ad7c200d200a" + "54ad7c221520032903e0037c220a200341c0026a41086a29030020052012" + "54ad7c2013200554ad7c221220032903d0017c2205200341f0046a41086a" + "2903002009200f54ad7c22132003290380057c220d2003290390077c220f" + "200341c0066a41086a290300200b200954ad7c2007200b54ad7c7c220920" + "032903d0067c220b20034180066a41086a290300200c200754ad7c200820" + "0c54ad7c7c22072003290390067c220c200341c0056a41086a2903002010" + "200854ad7c7c220820032903d0057c22167c22177c22187c221020032903" + "a0027c2211200341b0026a41086a29030020032903b002220420067c2004" + "54ad7c7c220642fdfff3ffcffffff9897f7e2204420042abd5feffffffbf" + "ffb97f4200108781808000200341b0016a2004420042ffffcf8aebffffd5" + "1e4200108781808000200341a0016a2004420042a4ecc3b58fd4b498e700" + "420010878180800020034190016a2004420042bfa5949ccff0d2bbe40042" + "0010878180800020034180016a2004420042d7d9ae9ae4f6e98dcb004200" + "108781808000200341f0006a20044200429acdffcba3bdc4801a42001087" + "81808000200341d0006a200341a0026a41086a2903002011201054ad7c20" + "06201154ad7c22192003290390027c221120034180036a41086a29030020" + "0e201454ad7c2010200e54ad7c221a20032903f0027c220e200341e0036a" + "41086a290300200a201554ad7c2018200a54ad7c221820032903d0037c22" + "0a200341d0016a41086a2903002005201254ad7c2017200554ad7c221520" + "032903607c220520034180056a41086a290300200d201354ad7c22172003" + "290390057c221020032903e0077c221220034190076a41086a290300200f" + "200d54ad7c2009200f54ad7c7c220d20032903a0077c220f200341d0066a" + "41086a290300200b200954ad7c2007200b54ad7c7c220920032903e0067c" + "220b20034190066a41086a290300200c200754ad7c2008200c54ad7c7c22" + "0720032903a0067c220c200341d0056a41086a2903002016200854ad7c7c" + "220820032903e0057c22167c221b7c221c7c221d7c221320032903b0017c" + "2214200341c0016a41086a29030020032903c001220420067c200454ad7c" + "7c220642fdfff3ffcffffff9897f7e2204420042abd5feffffffbfffb97f" + "4200108781808000200341c0006a2004420042ffffcf8aebffffd51e4200" + "108781808000200341306a2004420042a4ecc3b58fd4b498e70042001087" + "81808000200341206a2004420042bfa5949ccff0d2bbe400420010878180" + "8000200341106a2004420042d7d9ae9ae4f6e98dcb004200108781808000" + "200320044200429acdffcba3bdc4801a4200108781808000200341c0036a" + "41086a290300211e200341b0066a41086a290300211f200341f0066a4108" + "6a2903002120200341b0076a41086a2903002121200341f0076a41086a29" + "03002122200341b0086a41086a290300212320032903c008212420032903" + "8008212520032903c0072126200329038007212720032903d00221282003" + "41d0026a41086a2903002129200341e0026a41086a290300212a20034180" + "076a41086a290300212b200341c0076a41086a290300212c20034180086a" + "41086a290300212d200341c0086a41086a290300212e20032903d008212f" + "200329039008213020032903d007213120032903e0012132200341e0016a" + "41086a290300213320032903f0012134200341f0016a41086a2903002135" + "20034180026a41086a2903002136200341d0076a41086a29030021372003" + "4190086a41086a2903002138200341d0086a41086a290300213920032903" + "e008213a20032903a008213b2003290370213c200341f0006a41086a2903" + "00213d200329038001213e20034180016a41086a290300213f2003290390" + "01214020034190016a41086a2903002141200341a0016a41086a29030021" + "42200341a0086a41086a2903002143200341e0086a41086a290300214420" + "032903f008214520032903002146200341086a2903002147200329031021" + "48200341106a41086a29030021492003290320214a200341206a41086a29" + "0300214b2003290330214c200341306a41086a290300214d200320032903" + "40224e20034190056a41086a2903002010201754ad7c224f20032903b008" + "7c2204200341e0076a41086a2903002012201054ad7c200d201254ad7c7c" + "221020032903f0077c2212200341a0076a41086a290300200f200d54ad7c" + "2009200f54ad7c7c220d20032903b0077c220f200341e0066a41086a2903" + "00200b200954ad7c2007200b54ad7c7c220920032903f0067c220b200341" + "a0066a41086a290300200c200754ad7c2008200c54ad7c7c220720032903" + "b0067c220c200341e0056a41086a2903002016200854ad7c7c2208200341" + "e0006a41086a2903002005201554ad7c201b200554ad7c7c220520032903" + "c0037c2215200341d0036a41086a290300200a201854ad7c201c200a54ad" + "7c7c220a20032903e0027c2216200341f0026a41086a290300200e201a54" + "ad7c201d200e54ad7c7c220e2003290380027c221720034190026a41086a" + "2903002011201954ad7c2013201154ad7c7c221120032903a0017c221820" + "0341b0016a41086a2903002014201354ad7c2006201454ad7c7c22197c22" + "13200341d0006a41086a2903002003290350221420067c201454ad7c7c22" + "1a370380092003204c204020342028202720262025202420232004204f54" + "ad7c2010200454ad7c221b7c220420222012201054ad7c200d201254ad7c" + "7c22067c22102021200f200d54ad7c2009200f54ad7c7c220d7c220f2020" + "200b200954ad7c2007200b54ad7c7c22097c220b201f200c200754ad7c20" + "08200c54ad7c7c22072005200854ad7c2208201e2015200554ad7c200a20" + "1554ad7c7c22057c220c202a2016200a54ad7c200e201654ad7c7c220a7c" + "221220362017200e54ad7c2011201754ad7c7c220e7c2214204220182011" + "54ad7c2019201854ad7c7c22117c2215200341c0006a41086a2903002013" + "204e54ad7c201a201354ad7c7c2213370388092003204a203e2032200820" + "0754ad2005200854ad7c221620312030202f202e2004201b54ad7c200620" + "0454ad7c22177c2204202d2010200654ad7c200d201054ad7c7c22067c22" + "08202c200f200d54ad7c2009200f54ad7c7c220d7c220f202b200b200954" + "ad7c2007200b54ad7c7c22107c22072029200c200554ad7c200a200c54ad" + "7c7c22057c220920352012200a54ad7c200e201254ad7c7c220a7c220b20" + "412014200e54ad7c2011201454ad7c7c220c7c220e204d2015201154ad7c" + "2013201554ad7c7c22113703900920032048203c2007201654ad20052007" + "54ad7c2212203b203a20392004201754ad7c2006200454ad7c22137c2204" + "20382008200654ad7c200d200854ad7c7c22067c22072037200f200d54ad" + "7c2010200f54ad7c7c220d7c220820332009200554ad7c200a200954ad7c" + "7c22057c2209203f200b200a54ad7c200c200b54ad7c7c220a7c220b204b" + "200e200c54ad7c2011200e54ad7c7c220c37039809200320462008201254" + "ad2005200854ad7c2208204520442004201354ad7c2006200454ad7c220e" + "7c220420432007200654ad7c200d200754ad7c7c220d7c2206203d200920" + "0554ad7c200a200954ad7c7c22057c22072049200b200a54ad7c200c200b" + "54ad7c7c22093703a00920032006200854ad2005200654ad7c200341f008" + "6a41086a2903002004200e54ad7c200d200454ad7c7c20472007200554ad" + "7c2009200754ad7c7c3703a809200020034180096a10d680808000200341" + "b0096a2480808080000b3701017f20004100413010858180800021004101" + "10a3808080002101200041306a41e086c0800041301086818080001a2000" + "20013a00600b3a01017f23808080800041306b2201248080808000200020" + "0141004130108581808000220110db808080002100200141306a24808080" + "800020000b42002000200120022003109080808000200041306a20014130" + "6a200241306a2003109080808000200020022d006020012d006022027341" + "0020036b712002733a00600bd80d010b7f23808080800041c0176b220224" + "808080800020012d00c0012103410021042002410010a3808080003a0088" + "03200242f2b7f89e96d4f0950b37038003200242ed95f3a18a8ad68b6737" + "03f802200242bac6f6c9ec89d7a4f9003703f002200242a0d793dfa38deb" + "d6867f3703e802200242dcc3d1d8a2e189d5183703e002200242dde092fb" + "ad92bfe0ad7f3703d802200242e5b583f4e7b1ffc1003703d002200242a2" + "cbbc87dfaeeae9073703c802200242df92b5f096bdedf7bb7f3703c00220" + "0242dac6a9d0caada1f3673703b802200242dab8daf1f5c3bebed9003703" + "b002200242ca98a58286dfc2b9cc003703a802200242f3db839b97c18ac9" + "113703a002200242c78ad690efa1bbdb4237039802200242e7e686aac8d9" + "ad8d1b3703900220024286f099948ec3dfd83b37038802200242c3c1b5e6" + "dbb3b1d0aa7f3703800220024286ec8ff1d98ef0d4a57f3703f801200242" + "d7f9c29aa4b2e4c0053703f001200242ebec8cc3b1ecedb3ef003703e801" + "200242e9ddf2d1d1b3a6ca987f3703e00120024280cbabf1d3f6a4d4a17f" + "3703d8012002429aacd2bde8e4fefab37f3703d0012002429094d094a0f4" + "a3f9753703c80120022001200241c8016a200310d980808000200241c005" + "6a200210e880808000200241c8016a41c400410841a002108e8080800020" + "022802cc0121010240024020022802c8014101460d0020022802d0012105" + "200241c8016a200241c0056a41a0021086818080001a200241c8016a41a0" + "026a200241c8011086818080002106200241003602b805200220053602b4" + "05200220013602b005200241c0056a41c0016a2107200241c0056a41e000" + "6a2108200241c8016a41e0006a2109200241c8046a210a200241c8016a41" + "c0016a2105200241b0056a210b413f2101024003402001417f460d014280" + "8082808080a080e9002001413f71ad88a7210c0240024020044101710d00" + "200c21040c010b41012104200241c8016a10ed80808000200c410171450d" + "00200241e0076a200510ba80808000200241c0086a200a10ba8080800020" + "0241a0096a200241e0076a200610b380808000200241e0166a200a200510" + "bc8080800020024180166a200241e0166a10ba80808000200241a0156a20" + "024180166a200241c0086a10bb8080800020024180166a200241a0156a20" + "0241e0076a10bb80808000200241800a6a20024180166a200241e0076a10" + "b380808000200241e00a6a200241a0096a200241c8016a10bb8080800020" + "0241c00b6a200241e00a6a10ba80808000200241a00c6a200241c00b6a20" + "0241c00b6a10bc80808000200241800d6a200241a00c6a200241a00c6a10" + "bc80808000200241e00d6a200241800d6a200241e00a6a10b38080800020" + "0241e0166a200241800a6a200910bb80808000200241c00e6a200241e016" + "6a200910bb80808000200241a00f6a200241c00e6a200610b38080800020" + "024180106a200241800d6a200241c8016a10b380808000200241e0166a20" + "0241c00e6a10ba8080800020024180166a200241e0166a200241e00d6a10" + "bb80808000200241e0166a20024180166a20024180106a10bb8080800020" + "0241c8016a200241e0166a20024180106a10bb80808000200241e0166a20" + "05200241e00a6a10bc8080800020024180166a200241e0166a10ba808080" + "00200241a0156a20024180166a200241e0076a10bb808080002005200241" + "a0156a200241c00b6a10bb80808000200241e0106a200a200510bc808080" + "00200241e0166a20024180106a200241c8016a10bb80808000200241c011" + "6a200241e0166a200241c00e6a10b380808000200241a0126a2009200241" + "e00d6a10b38080800020024180136a200241a0126a200241a0126a10bc80" + "8080002009200241c0116a20024180136a10bb80808000200241e0166a20" + "0241e0106a10ba80808000200241e0136a200241e0166a200241c0086a10" + "bb80808000200241c0146a200510ba80808000200241a0156a200241e013" + "6a200241c0146a10bb80808000200241e0166a200241a00f6a200241a00f" + "6a10bc8080800020024180166a200241e0166a200241a0156a10bb808080" + "00200241c0056a2005200510bc80808000200241e0166a200241c00e6a10" + "e2808080002008200241e0166a200241e0166a10bc808080002007200241" + "80166a41e0001086818080001a200b200241c0056a41bc8cc0800010ee80" + "8080000b2001417f6a21010c000b0b200241c8016a10ed80808000200220" + "022802b80522013602e016200141c400470d01200020033a000c2000200b" + "290200370200200041086a200b41086a280200360200200241c0176a2480" + "808080000f0b200120022802d00141888cc08000108c80808000000b2002" + "41003602c005200241e0166a200241c0056a10ef80808000000b8e010101" + "7f2380808080004180036b2201248080808000200141a0026a41306a4100" + "41301085818080001a200141a0026a41e086c0800041301086818080001a" + "2001200141a0026a41e000108681808000220141e0006a410041c0011085" + "818080001a200041a0026a410041a0021085818080001a2000200141a002" + "1086818080001a20014180036a2480808080000bd70301157f2380808080" + "0041c00d6b2203248080808000200241e0036a210420024180036a210520" + "0241a0026a2106200241c0016a2107200241e0006a210820012802044103" + "742109200341c0046a41a0026a210a200341a00b6a41c0016a210b200341" + "a00b6a41e0006a210c200341e0036a210d20034180036a210e200341a002" + "6a210f20034180096a41c0016a211020034180096a41e0006a2111200341" + "c0016a2112200341e0006a21132001280200211420012802082115034002" + "4020090d002001201541016a3602082000200241c0041086818080001a20" + "0341c00d6a2480808080000f0b201428020422162d000c20142802002d00" + "607210a380808000211720032002201641046a280200201641086a280200" + "201541cc8cc0800010ae80808000201428020010af808080002003418009" + "6a20032002201710b080808000201120132008201710b080808000201020" + "122007201710b080808000200341a00b6a200f2006201710b08080800020" + "0c200e2005201710b080808000200b200d2004201710b080808000200341" + "c0046a20034180096a41a0021086818080001a200a200341a00b6a41a002" + "1086818080001a2002200341c0046a41c0041086818080001a200941786a" + "2109201441086a21140c000b0b22000240200120024b0d00200220012003" + "10f080808000000b2000200241a0026c6a0bd60301027f23808080800041" + "e00f6b22042480808080002004200241e000108681808000220441e0006a" + "200241e0006a41e0001086818080001a2004200341306a220510dd808080" + "00200441306a200510dd80808000200441e0006a200310dd808080002004" + "41e0006a41306a200310dd80808000200441c0016a2001200241c0016a22" + "02200441e0006a10e980808000200441c00d6a200141e0036a200410b380" + "808000200441a00b6a200441c00d6a200441c00d6a41306a220310b88080" + "8000200441a00b6a41306a200441c00d6a200310b980808000200441e003" + "6a41e0006a200141a0026a2203200410b380808000200441e0036a41c001" + "6a20014180036a200410b380808000200441e0036a200441a00b6a41e000" + "1086818080001a20044180066a200441e0006a200410bc80808000200441" + "e0066a2003200110c38080800020044180096a200441e0066a2002200441" + "80066a10e980808000200441c00d6a20044180096a200441c0016a10b780" + "808000200441a00b6a200441c00d6a200441e0036a10b780808000200441" + "c00d6a200441e0036a10b6808080002000200441c00d6a200441c0016a10" + "c380808000200041a0026a200441a00b6a41a0021086818080001a200441" + "e00f6a2480808080000b2700200020012002200310908080800020004130" + "6a200141306a200241306a20031090808080000b30002000200110e28080" + "8000200041e0006a200141e0006a10e280808000200041c0016a200141c0" + "016a10e2808080000bbd0201097e2000420042002001290300220242abd5" + "feffffffbfffb97f56ad7d2203200129030822047d220542ffffcf8aebff" + "ffd51e7c2206200420028420012903102207842001290318220884200129" + "03202209842001290328220a845022011b3703082000420042abd5feffff" + "ffbfffb97f20027d20011b3703002000420020032003200454ad7d200620" + "0554ad7c423f87220220077d220342a4ecc3b58fd4b498e7007c22042001" + "1b3703102000420020022002200754ad7d2004200354ad7c423f87220220" + "087d220342bfa5949ccff0d2bbe4007c220420011b370318200042002002" + "2002200854ad7d2004200354ad7c423f87220220097d220342d7d9ae9ae4" + "f6e98dcb007c220420011b3703202000420020022002200954ad7d200420" + "0354ad7c423f87200a7d429acdffcba3bdc4801a7c20011b3703280bc701" + "01057f23808080800041c0016b2203248080808000200341306a22042001" + "41306a220510b280808000200320014130108681808000220341e0006a41" + "306a200241306a220641301086818080002107200341e0006a2002413010" + "86818080001a20002003200341e0006a10e1808080002004200541301086" + "818080001a200320014130108681808000220341e0006a20064130108681" + "8080001a2007200241301086818080001a200041306a2003200341e0006a" + "10e180808000200341c0016a2480808080000bcd0b01167f238080808000" + "41a0086b22032480808080002003200241e0006a220420024190016a2205" + "10b980808000200341306a2004200510b880808000200341e0006a200241" + "c0016a2206200241f0016a220710b98080800020034190016a2006200710" + "b880808000200341e0036a41306a2208200141306a220910b28080800020" + "0341e0036a41e0006a200141e0006a220a4130108681808000210b200341" + "e0036a4190016a220c20014190016a220d10b280808000200341e0036a41" + "c0016a200141c0016a220e4130108681808000210f200341e0036a41f001" + "6a2210200141f0016a221110b280808000200341e0036a20014130108681" + "8080001a20034180066a41306a200241306a221241301086818080002113" + "20034180066a200241301086818080001a20034180066a41e0006a200341" + "90016a4130108681808000211420034180066a4190016a200341e0006a41" + "30108681808000211520034180066a41c0016a200341306a413010868180" + "8000211620034180066a41f0016a200341301086818080002117200341c0" + "016a200341e0036a20034180066a10ea8080800020082009413010868180" + "80002108200b200a41301086818080002118200c200d4130108681808000" + "210b200f200e4130108681808000210f201020114130108681808000210c" + "200341e0036a200141301086818080001a20034180066a20124130108681" + "8080001a20132002413010868180800021102014200341e0006a41301086" + "818080002113201520034190016a41301086818080002114201620034130" + "10868180800021152017200341306a41301086818080002116200341c001" + "6a41306a200341e0036a20034180066a10ea808080002008200910b28080" + "80002018200a41301086818080002117200b200d10b280808000200f200e" + "4130108681808000210f200c201110b280808000200341e0036a20014130" + "1086818080001a20034180066a200441301086818080001a201020054130" + "108681808000211020142012413010868180800021142013200241301086" + "818080002113201520034190016a413010868180800021152016200341e0" + "006a41301086818080002116200341a0026a200341e0036a20034180066a" + "10ea8080800020082009413010868180800021082017200a413010868180" + "80002117200b200d4130108681808000210b200f200e4130108681808000" + "210f200c20114130108681808000210c200341e0036a2001413010868180" + "80001a20034180066a200541301086818080001a20102004413010868180" + "800021102013201241301086818080002113201420024130108681808000" + "21142015200341e0006a41301086818080002115201620034190016a4130" + "1086818080002116200341a0026a41306a200341e0036a20034180066a10" + "ea808080002008200910b2808080002017200a4130108681808000211720" + "0b200d10b280808000200f200e4130108681808000210f200c201110b280" + "808000200341e0036a200141301086818080001a20034180066a20064130" + "1086818080001a2010200741301086818080002110201320044130108681" + "808000211320142005413010868180800021142016201241301086818080" + "002116201520024130108681808000211520034180036a200341e0036a20" + "034180066a10ea808080002008200941301086818080001a2017200a4130" + "1086818080001a200b200d41301086818080001a200f200e413010868180" + "80001a200c201141301086818080001a200341e0036a2001413010868180" + "80001a20034180066a200741301086818080001a20102006413010868180" + "80001a2013200541301086818080001a2014200441301086818080001a20" + "15201241301086818080001a2016200241301086818080001a2003418003" + "6a41306a200341e0036a20034180066a10ea808080002000200341c0016a" + "41e000108681808000220241e0006a200341a0026a41e000108681808000" + "1a200241c0016a20034180036a41e0001086818080001a200341a0086a24" + "80808080000bb30301027f23808080800041e0066b220224808080800020" + "02200110ba80808000200241e0006a2001200141e0006a220310b3808080" + "00200241c0016a200241e0006a200241e0006a10bc808080002002418006" + "6a2001200310bb80808000200241a0056a20024180066a200141c0016a22" + "0110bc80808000200241a0026a200241a0056a10ba808080002002418003" + "6a2003200110b380808000200241e0036a20024180036a20024180036a10" + "bc80808000200241c0046a200110ba8080800020024180066a200241e003" + "6a200241e0036a41306a220110b88080800020024180066a41306a220320" + "0241e0036a200110b980808000200020024180066a200210bc8080800020" + "024180066a200241c0046a200241c0046a41306a220110b8808080002003" + "200241c0046a200110b980808000200041e0006a20024180066a200241c0" + "016a10bc8080800020024180066a200241c0016a200241a0026a10bc8080" + "8000200241a0056a20024180066a200241e0036a10bc8080800020024180" + "066a200241a0056a200210bb80808000200041c0016a20024180066a2002" + "41c0046a10bb80808000200241e0066a2480808080000b7c01037f238080" + "80800041e0006b22022480808080002002200141c0016a2203200141f001" + "6a220410b880808000200241306a2003200410b980808000200041c0016a" + "200141e0006a41e0001086818080001a2000200241e00010868180800041" + "e0006a200141e0001086818080001a200241e0006a2480808080000b3e00" + "20002001200210bb80808000200041e0006a200141e0006a200241e0006a" + "10bb80808000200041c0016a200141c0016a200241c0016a10bb80808000" + "0b3601017f23808080800041306b22032480808080002003200210b28080" + "800020002003200110b980808000200341306a2480808080000b87020201" + "7f0c7e23808080800041306b220324808080800020012903082104200229" + "030821052002290328210620012903282107200229032021082001290320" + "21092002290318210a2001290318210b2002290310210c2001290310210d" + "20032002290300220e20012903007c220f3703002003200520047c220420" + "0f200e54ad7c220e3703082003200c200d7c220d2004200554ad200e2004" + "54ad7c7c22043703102003200a200b7c2205200d200c54ad2004200d54ad" + "7c7c22043703182003200820097c220c2005200a54ad2004200554ad7c7c" + "22053703202003200620077c200c200854ad2005200c54ad7c7c37032820" + "00200310d680808000200341306a2480808080000b7401027f2380808080" + "004190016b220224808080800020022001200141306a220310b980808000" + "200241306a2001200310b880808000200241e0006a2001200110b9808080" + "0020002002200241306a10a780808000200041306a200241e0006a200310" + "a78080800020024190016a2480808080000b230020002001200210b88080" + "8000200041306a200141306a200241306a10b8808080000b230020002001" + "200210b980808000200041306a200141306a200241306a10b9808080000b" + "c71f02017f3b7e23808080800041c0076b2202248080808000200241c004" + "6a200129030822034200200129030022044200108781808000200241d004" + "6a20012903102205420020044200108781808000200241e0046a20012903" + "182206420020044200108781808000200241f0046a200129032022074200" + "2004420010878180800020024180056a2001290328220842002004420010" + "8781808000200241a0056a2005420020034200108781808000200241b005" + "6a2006420020034200108781808000200241c0056a200742002003420010" + "8781808000200241d0056a2008420020034200108781808000200241f005" + "6a200642002005420010878180800020024180066a200742002005420010" + "878180800020024190066a2008420020054200108781808000200241b006" + "6a2007420020064200108781808000200241c0066a200842002006420010" + "8781808000200241e0066a20084200200742001087818080002002419005" + "6a2004420020044200108781808000200241e0056a200342002003420010" + "8781808000200241a0066a2005420020054200108781808000200241d006" + "6a2006420020064200108781808000200241f0066a200742002007420010" + "878180800020024180076a2008420020084200108781808000200241b004" + "6a200229039005220642fdfff3ffcffffff9897f7e2203420042abd5feff" + "ffffbfffb97f4200108781808000200241a0046a2003420042ffffcf8aeb" + "ffffd51e420010878180800020024190046a2003420042a4ecc3b58fd4b4" + "98e700420010878180800020024180046a2003420042bfa5949ccff0d2bb" + "e4004200108781808000200241f0036a2003420042d7d9ae9ae4f6e98dcb" + "004200108781808000200241e0036a20034200429acdffcba3bdc4801a42" + "00108781808000200241d0036a20024190056a41086a2903002209200229" + "03c00422084201867c220420022903a0047c2205200241b0046a41086a29" + "030020022903b00422032006427d837c200354ad7c7c220642fdfff3ffcf" + "fffff9897f7e2203420042abd5feffffffbfffb97f420010878180800020" + "0241c0036a2003420042ffffcf8aebffffd51e4200108781808000200241" + "d0026a2003420042a4ecc3b58fd4b498e7004200108781808000200241e0" + "016a2003420042bfa5949ccff0d2bbe4004200108781808000200241f000" + "6a2003420042d7d9ae9ae4f6e98dcb004200108781808000200220034200" + "429acdffcba3bdc4801a4200108781808000200241b0036a20022903c003" + "220a20022903e005220b20022903d004220c200241c0046a41086a290300" + "7c22074201862008423f88847c22082004200954ad7c2209200229039004" + "7c220d200241a0046a41086a2903002005200454ad7c2006200554ad7c7c" + "220e7c2204200241d0036a41086a29030020022903d003220320067c2003" + "54ad7c7c220542fdfff3ffcffffff9897f7e2203420042abd5feffffffbf" + "ffb97f4200108781808000200241a0036a2003420042ffffcf8aebffffd5" + "1e420010878180800020024190036a2003420042a4ecc3b58fd4b498e700" + "420010878180800020024180036a2003420042bfa5949ccff0d2bbe40042" + "00108781808000200241f0026a2003420042d7d9ae9ae4f6e98dcb004200" + "108781808000200241e0026a20034200429acdffcba3bdc4801a42001087" + "81808000200241c0026a20022903a003220f200241e0056a41086a290300" + "2008200b54ad7c2009200854ad7c2210200241d0046a41086a2903002007" + "200c54ad7c220c20022903e0047c220620022903a0057c22084201862007" + "423f88847c22072002290380047c220b20024190046a41086a290300200d" + "200954ad7c200e200d54ad7c7c220920022903d0027c220d200241c0036a" + "41086a2903002004200a54ad7c2005200454ad7c7c220a7c2204200241b0" + "036a41086a29030020022903b003220320057c200354ad7c7c220542fdff" + "f3ffcffffff9897f7e2203420042abd5feffffffbfffb97f420010878180" + "8000200241b0026a2003420042ffffcf8aebffffd51e4200108781808000" + "200241a0026a2003420042a4ecc3b58fd4b498e700420010878180800020" + "024190026a2003420042bfa5949ccff0d2bbe40042001087818080002002" + "4180026a2003420042d7d9ae9ae4f6e98dcb004200108781808000200241" + "f0016a20034200429acdffcba3bdc4801a4200108781808000200241d001" + "6a20022903b0022211200241d0026a41086a290300200d200954ad7c200a" + "200d54ad7c221220022903e0017c220d20024180046a41086a290300200b" + "200754ad7c2009200b54ad7c221320022903f0037c22092007201054ad22" + "0e20022903a0067c2207200241e0046a41086a2903002006200c54ad7c22" + "1020022903f0047c220b20022903b0057c220a200241a0056a41086a2903" + "002008200654ad7c7c22064201862008423f88847c22147c22157c220820" + "02290390037c220c200241a0036a41086a2903002004200f54ad7c200520" + "0454ad7c7c22167c2204200241c0026a41086a29030020022903c0022203" + "20057c200354ad7c7c220542fdfff3ffcffffff9897f7e2203420042abd5" + "feffffffbfffb97f4200108781808000200241c0016a2003420042ffffcf" + "8aebffffd51e4200108781808000200241b0016a2003420042a4ecc3b58f" + "d4b498e7004200108781808000200241a0016a2003420042bfa5949ccff0" + "d2bbe400420010878180800020024190016a2003420042d7d9ae9ae4f6e9" + "8dcb00420010878180800020024180016a20034200429acdffcba3bdc480" + "1a4200108781808000200241e0006a20022903c0012217200241a0066a41" + "086a2903002007200e54ad7c2014200754ad7c2214200241f0046a41086a" + "290300200b201054ad7c22182002290380057c220720022903c0057c220e" + "200241b0056a41086a290300200a200b54ad7c2006200a54ad7c7c220b20" + "022903f0057c220a4201862006423f88847c220620022903e0037c220f20" + "0241f0036a41086a2903002009201354ad7c2015200954ad7c7c22092002" + "2903707c2210200241e0016a41086a290300200d201254ad7c2008200d54" + "ad7c7c220d2002290380037c221220024190036a41086a290300200c2008" + "54ad7c2016200c54ad7c7c220820022903a0027c220c200241b0026a4108" + "6a2903002004201154ad7c2005200454ad7c7c22157c2204200241d0016a" + "41086a29030020022903d001220320057c200354ad7c7c220542fdfff3ff" + "cffffff9897f7e2203420042abd5feffffffbfffb97f4200108781808000" + "200241d0006a2003420042ffffcf8aebffffd51e42001087818080002002" + "41c0006a2003420042a4ecc3b58fd4b498e7004200108781808000200241" + "306a2003420042bfa5949ccff0d2bbe4004200108781808000200241206a" + "2003420042d7d9ae9ae4f6e98dcb004200108781808000200241106a2003" + "4200429acdffcba3bdc4801a4200108781808000200241086a2903002116" + "200241d0066a41086a290300211920024180066a41086a290300211a2002" + "41d0056a41086a290300211b200229039006211c20022903b006211d2002" + "2903e002211e200241e0026a41086a290300211f200241f0026a41086a29" + "03002120200241b0066a41086a290300212120024190066a41086a290300" + "212220022903c006212320022903f006210320022903f0012124200241f0" + "016a41086a2903002125200229038002212620024180026a41086a290300" + "212720024190026a41086a2903002128200241c0066a41086a2903002129" + "20022903e006212a200241f0066a41086a290300212b200229038001212c" + "20024180016a41086a290300212d200229039001212e20024190016a4108" + "6a290300212f20022903a0012130200241a0016a41086a29030021312002" + "41b0016a41086a2903002132200241e0066a41086a290300213320022903" + "8007211120022903102134200241106a41086a2903002135200229032021" + "36200241206a41086a290300213720022903302138200241306a41086a29" + "030021392002290340213a200241c0006a41086a290300213b2002200229" + "0350223c2006201454ad223d20022903d0067c221320024180056a41086a" + "2903002007201854ad7c221820022903d0057c2214200241c0056a41086a" + "290300200e200754ad7c200b200e54ad7c7c22072002290380067c220e20" + "0241f0056a41086a290300200a200b54ad7c7c220b420186200a423f8884" + "7c220a200241e0036a41086a290300200f200654ad7c2009200f54ad7c7c" + "220620022903007c220f200241f0006a41086a2903002010200954ad7c20" + "0d201054ad7c7c220920022903f0027c221020024180036a41086a290300" + "2012200d54ad7c2008201254ad7c7c220d2002290390027c2212200241a0" + "026a41086a290300200c200854ad7c2015200c54ad7c7c220820022903b0" + "017c220c200241c0016a41086a2903002004201754ad7c2005200454ad7c" + "7c22157c2204200241e0006a41086a2903002002290360221720057c2017" + "54ad7c7c2217370390072002203a20302026201e20192013203d54ad7c20" + "0a201354ad7c2213201d201c201b2014201854ad7c2007201454ad7c2214" + "7c2205201a200e200754ad7c200b200e54ad7c7c22077c220e420186200b" + "423f88847c220b2006200a54ad7c220a2016200f200654ad7c2009200f54" + "ad7c7c22067c220f20202010200954ad7c200d201054ad7c7c22097c2210" + "20282012200d54ad7c2008201254ad7c7c220d7c22122032200c200854ad" + "7c2015200c54ad7c7c22087c220c200241d0006a41086a2903002004203c" + "54ad7c2017200454ad7c7c22153703980720022038202e2024200a200b54" + "ad2006200a54ad7c22162003202320222005201454ad7c2007200554ad7c" + "22147c22042021200e200754ad7c7c2205420186200e423f88847c220720" + "0b201354ad7c22137c220b201f200f200654ad7c2009200f54ad7c7c2206" + "7c220a20272010200954ad7c200d201054ad7c7c22097c220e2031201220" + "0d54ad7c2008201254ad7c7c220d7c220f203b200c200854ad7c2015200c" + "54ad7c7c220c3703a00720022036202c200b201654ad2006200b54ad7c22" + "0b202b2007200354ad7c2013200754ad7c2210202a20292004201454ad7c" + "2005200454ad7c22127c22034201862005423f88847c22137c2204202520" + "0a200654ad7c2009200a54ad7c7c22057c2206202f200e200954ad7c200d" + "200e54ad7c7c22077c22082039200f200d54ad7c200c200f54ad7c7c2209" + "3703a807200220342004200b54ad2005200454ad7c220d20112033200320" + "1254ad7c220b4201862003423f88847c22032013201054ad7c220a7c2204" + "202d2006200554ad7c2007200654ad7c7c22057c220620372008200754ad" + "7c2009200854ad7c7c22073703b00720022004200d54ad2005200454ad7c" + "200b423f8820024180076a41086a2903002003201154ad7c200a200354ad" + "7c7c7c20352006200554ad7c2007200654ad7c7c3703b807200020024190" + "076a10d680808000200241c0076a2480808080000be60101037f23808080" + "80004180126b220324808080800020032001200210b480808000200341a0" + "026a200141a0026a2204200241a0026a220510b480808000200341c0046a" + "2002200510c380808000200341e0066a2004200110c38080800020034180" + "096a200341e0066a200341c0046a10b480808000200341a00b6a20034180" + "096a200310b780808000200341c00d6a200341a00b6a200341a0026a10b7" + "80808000200341e00f6a200341a0026a10b6808080002000200341e00f6a" + "200310c380808000200041a0026a200341c00d6a41a0021086818080001a" + "20034180126a2480808080000b3c01017f23808080800041c0046b220224" + "808080800020022000200110be808080002000200241c004108681808000" + "1a200241c0046a2480808080000bd80701077f23808080800041c00d6b22" + "022480808080002002200141e000108681808000220241e0006a200141e0" + "006a220341e0001086818080001a200241c0016a200141c0016a220441e0" + "001086818080001a200241a0026a200141a0026a220541e0001086818080" + "001a20024180036a20014180036a220641e0001086818080001a200241e0" + "036a200141e0036a220741e0001086818080001a200241a00b6a20012006" + "10eb80808000200241c0046a200241a00b6a41e0001086818080001a2002" + "41a0056a200241a00b6a41e0006a220841e0001086818080001a20022002" + "41c0046a200110bb80808000200241a00b6a2002200210bc808080002002" + "200241a00b6a200241c0046a10bc8080800020024180036a200241a0056a" + "200610bc80808000200241a00b6a20024180036a20024180036a10bc8080" + "800020024180036a200241a00b6a200241a0056a10bc80808000200241a0" + "0b6a2005200410eb8080800020024180066a200241a00b6a41e000108681" + "8080001a200241e0066a200841e0001086818080001a200241a00b6a2003" + "200710eb80808000200241c0076a200241a00b6a41e0001086818080001a" + "200241a0086a200841e0001086818080001a200241e0006a20024180066a" + "200310bb80808000200241a00b6a200241e0006a200241e0006a10bc8080" + "8000200241e0006a200241a00b6a20024180066a10bc80808000200241e0" + "036a200241e0066a200710bc80808000200241a00b6a200241e0036a2002" + "41e0036a10bc80808000200241e0036a200241a00b6a200241e0066a10bc" + "80808000200241a00b6a200241a0086a200241a0086a41306a220110b880" + "808000200241a00b6a41306a200241a0086a200110b98080800020024180" + "066a200241a00b6a41e0001086818080001a200241a0026a20024180066a" + "200510bc80808000200241a00b6a200241a0026a200241a0026a10bc8080" + "8000200241a0026a200241a00b6a20024180066a10bc80808000200241c0" + "016a200241c0076a200410bb80808000200241a00b6a200241c0016a2002" + "41c0016a10bc80808000200241c0016a200241a00b6a200241c0076a10bc" + "8080800020024180096a200241e0001086818080001a20024180096a41e0" + "006a200241e0006a41e0001086818080001a20024180096a41c0016a2002" + "41c0016a41e0001086818080001a200241a00b6a200241a0026a41e00010" + "86818080001a200820024180036a41e0001086818080001a200241a00b6a" + "41c0016a200241e0036a41e0001086818080001a200020024180096a41a0" + "0210868180800041a0026a200241a00b6a41a0021086818080001a200241" + "c00d6a2480808080000bcd0102037f017e2380808080004180096b220224" + "8080808000200210ac8080800041002103413f2104034002400240024020" + "04417f460d0042012004413f71ad8642808084808080c080528321052003" + "4101710d01200542005221030c020b200041a0026a200241a0026a10b180" + "8080002000200241a0021086818080001a20024180096a2480808080000f" + "0b200241c0046a200210c0808080002002200241c0046a41c00410868180" + "80001a410121030b02402005500d002002200110bf808080000b2004417f" + "6a21040c000b0b23002000200110db80808000200041306a200141306a10" + "db808080007110a3808080000b3e0020002001200210bc80808000200041" + "e0006a200141e0006a200241e0006a10bc80808000200041c0016a200141" + "c0016a200241c0016a10bc808080000bbc0101047f23808080800041106b" + "2202248080808000200141086a21030340200241086a200310e680808000" + "02400240024020022d0008450d0020022d00092101410121040c010b0240" + "20012802002204450d00200420012802042205470d020b2002200141146a" + "10e68080800020022d0001210120022d000021040b200020013a00012000" + "20044101713a0000200241106a2480808080000f0b200142808080808001" + "37020c20012005417f6a2204360208200120043602040c000b0b6f01057f" + "23808080800041106b220324808080800041002104410121054100210602" + "400340200120062207460d01200341086a200210d080808000200741016a" + "210620032d00080d000b200120076b2104410021050b2000200436020420" + "002005360200200341106a2480808080000bf50401037f23808080800041" + "b0096b22022480808080002002200141306a220310bd8080800020024130" + "6a2002200210b980808000200241e0006a200241306a200241306a10b980" + "80800020024190016a200241e0006a200241e0006a10b980808000200241" + "c0016a2003200141e0006a220410a780808000200241f0016a200410bd80" + "808000200241d0086a200241f0016a200241f0016a10b980808000200241" + "80096a200241d0086a200241d0086a10b980808000200241c0076a200241" + "80096a20024180096a10b980808000200241a0026a200241c0076a200241" + "80096a10b980808000200241d0026a200241a0026a20024190016a10a780" + "80800020024180036a2002200241a0026a10b980808000200241b0036a20" + "0241c0016a20024190016a10a780808000200241e0036a200241a0026a20" + "0241a0026a10b98080800020024190046a200241e0036a200241a0026a10" + "b980808000200241c0046a200220024190046a10b880808000200241f004" + "6a200241c0046a20024180036a10a780808000200241a0056a200241d002" + "6a200241f0046a10b980808000200241d0056a2001200310a78080800020" + "024180066a200241c0046a200241d0056a10a780808000200241b0066a20" + "024180066a20024180066a10b980808000200241b0066a41306a200241a0" + "056a41301086818080001a200241b0066a41e0006a200241b0036a413010" + "86818080001a200241c0076a410041301085818080001a200241c0076a41" + "e0006a410041301085818080001a200241c0076a41306a41e086c0800041" + "301086818080001a2000200241b0066a200241c0076a200410a980808000" + "10c880808000200241b0096a2480808080000bf60601057f238080808000" + "41900d6b220324808080800020032001200210a780808000200341306a20" + "0141306a2204200241306a220510a780808000200341e0006a200141e000" + "6a2206200241e0006a220710a78080800020034190016a2001200410b980" + "808000200341c0016a2002200510b980808000200341f0016a2003419001" + "6a200341c0016a10a780808000200341a0026a2003200341306a10b98080" + "8000200341d0026a200341f0016a200341a0026a10b88080800020034180" + "036a2004200610b980808000200341b0036a2005200710b9808080002003" + "41e0036a20034180036a200341b0036a10a78080800020034190046a2003" + "41306a200341e0006a10b980808000200341c0046a200341e0036a200341" + "90046a10b880808000200341f0046a2001200610b980808000200341a005" + "6a2002200710b980808000200341d0056a200341f0046a200341a0056a10" + "a78080800020034180066a2003200341e0006a10b980808000200341b006" + "6a200341d0056a20034180066a10b880808000200341e0066a2003200310" + "b98080800020034190076a200341e0066a200310b980808000200341800c" + "6a200341e0006a200341e0006a10b980808000200341b00c6a200341800c" + "6a200341800c6a10b980808000200341e00c6a200341b00c6a200341b00c" + "6a10b980808000200341c0076a200341e00c6a200341b00c6a10b9808080" + "00200341f0076a200341306a200341c0076a10b980808000200341a0086a" + "200341306a200341c0076a10b880808000200341a00b6a200341b0066a20" + "0341b0066a10b980808000200341d00b6a200341a00b6a200341a00b6a10" + "b980808000200341e00c6a200341d00b6a200341d00b6a10b98080800020" + "0341d0086a200341e00c6a200341d00b6a10b98080800020034180096a20" + "0341c0046a200341d0086a10a780808000200341b0096a200341d0026a20" + "0341a0086a10a7808080002000200341b0096a20034180096a10b8808080" + "00200341e0096a200341d0086a20034190076a10a780808000200341900a" + "6a200341a0086a200341f0076a10a780808000200041306a200341900a6a" + "200341e0096a10b980808000200341c00a6a20034190076a200341d0026a" + "10a780808000200341f00a6a200341f0076a200341c0046a10a780808000" + "200041e0006a200341f00a6a200341c00a6a10b980808000200341900d6a" + "2480808080000b41002000200120022003109080808000200041306a2001" + "41306a200241306a2003109080808000200041e0006a200141e0006a2002" + "41e0006a20031090808080000bbe0601057f200041786a22012000417c6a" + "280200220241787122006a21030240024020024101710d00200241027145" + "0d012001280200220220006a21000240200120026b2201410028029c97c0" + "8000470d0020032802044103714103470d014100200036029497c0800020" + "032003280204417e7136020420012000410172360204200320003602000f" + "0b2001200210cc808080000b024002400240024002400240200328020422" + "024102710d00200341002802a097c08000460d022003410028029c97c080" + "00460d0320032002417871220210cc808080002001200220006a22004101" + "72360204200120006a20003602002001410028029c97c08000470d014100" + "200036029497c080000f0b20032002417e71360204200120004101723602" + "04200120006a20003602000b2000418002490d0220012000108481808000" + "41002101410041002802b497c08000417f6a22003602b497c0800020000d" + "04024041002802fc94c080002200450d00410021010340200141016a2101" + "200028020822000d000b0b4100200141ff1f200141ff1f4b1b3602b497c0" + "80000f0b410020013602a097c080004100410028029897c0800020006a22" + "0036029897c080002001200041017236020402402001410028029c97c080" + "00470d004100410036029497c080004100410036029c97c080000b200041" + "002802ac97c0800022044d0d0341002802a097c080002200450d03410021" + "02410028029897c0800022054129490d0241f494c0800021010340024020" + "01280200220320004b0d002000200320012802046a490d040b2001280208" + "21010c000b0b4100200136029c97c080004100410028029497c080002000" + "6a220036029497c0800020012000410172360204200120006a2000360200" + "0f0b200041f80171418495c080006a210302400240410028028c97c08000" + "220241012000410376742200710d004100200220007236028c97c0800020" + "0321000c010b200328020821000b200320013602082000200136020c2001" + "200336020c200120003602080f0b024041002802fc94c080002201450d00" + "410021020340200241016a2102200128020822010d000b0b4100200241ff" + "1f200241ff1f4b1b3602b497c08000200520044d0d004100417f3602ac97" + "c080000b0b4d01017f23808080800041206b220224808080800020024100" + "36021020024101360204200242043702082002412e36021c200220003602" + "182002200241186a3602002002200110a480808000000b800601057f0240" + "024002402000417c6a220328020022044178712205410441082004410371" + "22061b20016a490d0002402006450d002005200141276a4b0d020b411020" + "02410b6a4178712002410b491b210102400240024020060d002001418002" + "490d0120052001410472490d01200520016b418180084f0d010c020b2000" + "41786a220720056a21060240024002400240200520014f0d002006410028" + "02a097c08000460d032006410028029c97c08000460d0220062802042204" + "4102710d042004417871220420056a22052001490d042006200410cc8080" + "8000200520016b22024110490d0120032001200328020041017172410272" + "360200200720016a22012002410372360204200720056a22052005280204" + "4101723602042001200210cd8080800020000f0b200520016b2202410f4d" + "0d0420032001200441017172410272360200200720016a22052002410372" + "360204200620062802044101723602042005200210cd8080800020000f0b" + "20032005200328020041017172410272360200200720056a220220022802" + "0441017236020420000f0b410028029497c0800020056a22052001490d01" + "02400240200520016b2202410f4b0d002003200441017120057241027236" + "0200200720056a2202200228020441017236020441002102410021010c01" + "0b20032001200441017172410272360200200720016a2201200241017236" + "0204200720056a2205200236020020052005280204417e713602040b4100" + "200136029c97c080004100200236029497c0800020000f0b410028029897" + "c0800020056a220520014b0d040b0240200210ce8080800022050d004100" + "0f0b20052000417c4178200328020022014103711b20014178716a220120" + "0220012002491b1086818080002102200010c980808000200221000b2000" + "0f0b41e992c08000419893c0800010ca80808000000b41a893c0800041d8" + "93c0800010ca80808000000b200320012004410171724102723602002007" + "20016a2202200520016b22054101723602044100200536029897c0800041" + "0020023602a097c0800020000b820301047f200028020c21020240024002" + "402001418002490d002000280218210302400240024020022000470d0020" + "0041144110200028021422021b6a28020022010d01410021020c020b2000" + "2802082201200236020c200220013602080c010b200041146a200041106a" + "20021b21040340200421052001220241146a200241106a20022802142201" + "1b210420024114411020011b6a28020022010d000b200541003602000b20" + "03450d020240200028021c41027441f493c080006a22012802002000460d" + "0020034110411420032802102000461b6a20023602002002450d030c020b" + "2001200236020020020d014100410028029097c08000417e200028021c77" + "7136029097c080000c020b0240200220002802082204460d002004200236" + "020c200220043602080f0b4100410028028c97c08000417e200141037677" + "7136028c97c080000f0b20022003360218024020002802102201450d0020" + "022001360210200120023602180b20002802142201450d00200220013602" + "14200120023602180f0b0ba00401027f200020016a210202400240200028" + "020422034101710d002003410271450d012000280200220320016a210102" + "40200020036b2200410028029c97c08000470d0020022802044103714103" + "470d014100200136029497c0800020022002280204417e71360204200020" + "01410172360204200220013602000c020b2000200310cc808080000b0240" + "024002400240200228020422034102710d00200241002802a097c0800046" + "0d022002410028029c97c08000460d0320022003417871220310cc808080" + "002000200320016a2201410172360204200020016a200136020020004100" + "28029c97c08000470d014100200136029497c080000f0b20022003417e71" + "36020420002001410172360204200020016a20013602000b024020014180" + "02490d00200020011084818080000f0b200141f80171418495c080006a21" + "0202400240410028028c97c08000220341012001410376742201710d0041" + "00200320017236028c97c08000200221010c010b200228020821010b2002" + "20003602082001200036020c2000200236020c200020013602080f0b4100" + "20003602a097c080004100410028029897c0800020016a220136029897c0" + "8000200020014101723602042000410028029c97c08000470d0141004100" + "36029497c080004100410036029c97c080000f0b4100200036029c97c080" + "004100410028029497c0800020016a220136029497c08000200020014101" + "72360204200020016a20013602000f0b0bc12502087f017e024002400240" + "02400240024002400240200041f4014b0d00410028028c97c08000220141" + "102000410b6a41f803712000410b491b220241037622037622004103710d" + "012002410028029497c080004d0d0720000d02410028029097c080002200" + "0d030c070b2000410b6a22034178712102410028029097c080002204450d" + "06411f21050240200041f4ffff074b0d002002410620034108766722006b" + "7641017120004101746b413e6a21050b410020026b210302402005410274" + "41f493c080006a28020022010d0041002100410021060c040b4100210020" + "024100411920054101766b2005411f461b74210741002106034002402001" + "220128020441787122082002490d00200820026b220820034f0d00200821" + "032001210620080d004100210320012106200121000c060b200128021422" + "082000200820012007411d764104716a41106a2802002201471b20002008" + "1b2100200741017421072001450d040c000b0b024002402000417f734101" + "7120036a22074103742200418495c080006a22022000418c95c080006a28" + "020022032802082206460d002006200236020c200220063602080c010b41" + "002001417e2007777136028c97c080000b20032000410372360204200320" + "006a22002000280204410172360204200341086a0f0b0240024020002003" + "7441022003742200410020006b72716822084103742203418495c080006a" + "22062003418c95c080006a28020022002802082207460d00200720063602" + "0c200620073602080c010b41002001417e2008777136028c97c080000b20" + "002002410372360204200020026a2207200320026b220241017236020420" + "0020036a20023602000240410028029497c080002201450d002001417871" + "418495c080006a2106410028029c97c08000210302400240410028028c97" + "c08000220841012001410376742201710d004100200820017236028c97c0" + "8000200621010c010b200628020821010b20062003360208200120033602" + "0c2003200636020c200320013602080b4100200736029c97c08000410020" + "0236029497c08000200041086a0f0b20006841027441f493c080006a2802" + "00220628020441787120026b210320062101024002400340024020062802" + "1022000d00200628021422000d0020012802182105024002400240200128" + "020c22002001470d00200141144110200128021422001b6a28020022060d" + "01410021000c020b20012802082206200036020c200020063602080c010b" + "200141146a200141106a20001b21070340200721082006220041146a2000" + "41106a200028021422061b210720004114411020061b6a28020022060d00" + "0b200841003602000b2005450d030240200128021c41027441f493c08000" + "6a22062802002001460d0020054110411420052802102001461b6a200036" + "02002000450d040c030b2006200036020020000d024100410028029097c0" + "8000417e200128021c777136029097c080000c030b200028020441787120" + "026b22062003200620034922061b21032000200120061b2101200021060c" + "000b0b20002005360218024020012802102206450d002000200636021020" + "0620003602180b20012802142206450d0020002006360214200620003602" + "180b02400240024020034110490d0020012002410372360204200120026a" + "22022003410172360204200220036a2003360200410028029497c0800022" + "07450d012007417871418495c080006a2106410028029c97c08000210002" + "400240410028028c97c08000220841012007410376742207710d00410020" + "0820077236028c97c08000200621070c010b200628020821070b20062000" + "3602082007200036020c2000200636020c200020073602080c010b200120" + "0320026a2200410372360204200120006a22002000280204410172360204" + "0c010b4100200236029c97c080004100200336029497c080000b20014108" + "6a0f0b024020002006720d004100210641022005742200410020006b7220" + "04712200450d0320006841027441f493c080006a28020021000b2000450d" + "010b0340200020062000280204417871220120026b220820034922051b21" + "04200120024921072008200320051b21080240200028021022010d002000" + "28021421010b2006200420071b21062003200820071b2103200121002001" + "0d000b0b2006450d000240410028029497c0800022002002490d00200320" + "0020026b4f0d010b20062802182105024002400240200628020c22002006" + "470d00200641144110200628021422001b6a28020022010d01410021000c" + "020b20062802082201200036020c200020013602080c010b200641146a20" + "0641106a20001b21070340200721082001220041146a200041106a200028" + "021422011b210720004114411020011b6a28020022010d000b2008410036" + "02000b02402005450d0002400240200628021c41027441f493c080006a22" + "012802002006460d0020054110411420052802102006461b6a2000360200" + "2000450d020c010b2001200036020020000d004100410028029097c08000" + "417e200628021c777136029097c080000c010b2000200536021802402006" + "2802102201450d0020002001360210200120003602180b20062802142201" + "450d0020002001360214200120003602180b0240024020034110490d0020" + "062002410372360204200620026a22002003410172360204200020036a20" + "0336020002402003418002490d00200020031084818080000c020b200341" + "f80171418495c080006a210202400240410028028c97c080002201410120" + "03410376742203710d004100200120037236028c97c08000200221030c01" + "0b200228020821030b200220003602082003200036020c2000200236020c" + "200020033602080c010b2006200320026a2200410372360204200620006a" + "220020002802044101723602040b200641086a0f0b024002400240024002" + "4002400240410028029497c08000220020024f0d000240410028029897c0" + "8000220020024b0d0041002100200241af80046a22064110764000220341" + "7f4622070d0720034110742201450d07410041002802a497c08000410020" + "064180807c7120071b22086a22003602a497c08000410041002802a897c0" + "800022032000200320004b1b3602a897c0800002400240024041002802a0" + "97c080002203450d0041f494c08000210003402000280200220620002802" + "0422076a2001460d02200028020822000d000c030b0b0240024041002802" + "b097c080002200450d00200020014d0d010b410020013602b097c080000b" + "410041ff1f3602b497c08000410020083602f894c08000410020013602f4" + "94c080004100418495c0800036029095c080004100418c95c08000360298" + "95c080004100418495c0800036028c95c080004100419495c080003602a0" + "95c080004100418c95c0800036029495c080004100419c95c080003602a8" + "95c080004100419495c0800036029c95c08000410041a495c080003602b0" + "95c080004100419c95c080003602a495c08000410041ac95c080003602b8" + "95c08000410041a495c080003602ac95c08000410041b495c080003602c0" + "95c08000410041ac95c080003602b495c08000410041bc95c080003602c8" + "95c08000410041b495c080003602bc95c080004100410036028095c08000" + "410041c495c080003602d095c08000410041bc95c080003602c495c08000" + "410041c495c080003602cc95c08000410041cc95c080003602d895c08000" + "410041cc95c080003602d495c08000410041d495c080003602e095c08000" + "410041d495c080003602dc95c08000410041dc95c080003602e895c08000" + "410041dc95c080003602e495c08000410041e495c080003602f095c08000" + "410041e495c080003602ec95c08000410041ec95c080003602f895c08000" + "410041ec95c080003602f495c08000410041f495c0800036028096c08000" + "410041f495c080003602fc95c08000410041fc95c0800036028896c08000" + "410041fc95c0800036028496c080004100418496c0800036029096c08000" + "4100418c96c0800036029896c080004100418496c0800036028c96c08000" + "4100419496c080003602a096c080004100418c96c0800036029496c08000" + "4100419c96c080003602a896c080004100419496c0800036029c96c08000" + "410041a496c080003602b096c080004100419c96c080003602a496c08000" + "410041ac96c080003602b896c08000410041a496c080003602ac96c08000" + "410041b496c080003602c096c08000410041ac96c080003602b496c08000" + "410041bc96c080003602c896c08000410041b496c080003602bc96c08000" + "410041c496c080003602d096c08000410041bc96c080003602c496c08000" + "410041cc96c080003602d896c08000410041c496c080003602cc96c08000" + "410041d496c080003602e096c08000410041cc96c080003602d496c08000" + "410041dc96c080003602e896c08000410041d496c080003602dc96c08000" + "410041e496c080003602f096c08000410041dc96c080003602e496c08000" + "410041ec96c080003602f896c08000410041e496c080003602ec96c08000" + "410041f496c0800036028097c08000410041ec96c080003602f496c08000" + "410041fc96c0800036028897c08000410041f496c080003602fc96c08000" + "410020013602a097c08000410041fc96c0800036028497c0800041002008" + "41586a220036029897c0800020012000410172360204200120006a412836" + "0204410041808080013602ac97c080000c080b200320014f0d0020062003" + "4b0d00200028020c450d030b410041002802b097c0800022002001200020" + "01491b3602b097c08000200120086a210641f494c0800021000240024002" + "400340200028020022072006460d01200028020822000d000c020b0b2000" + "28020c450d010b41f494c080002100024003400240200028020022062003" + "4b0d002003200620002802046a2206490d020b200028020821000c000b0b" + "410020013602a097c080004100200841586a220036029897c08000200120" + "00410172360204200120006a4128360204410041808080013602ac97c080" + "002003200641606a41787141786a22002000200341106a491b2207411b36" + "020441002902f494c080002109200741106a41002902fc94c08000370200" + "20072009370208410020083602f894c08000410020013602f494c0800041" + "00200741086a3602fc94c080004100410036028095c080002007411c6a21" + "00034020004107360200200041046a22002006490d000b20072003460d07" + "20072007280204417e713602042003200720036b22004101723602042007" + "200036020002402000418002490d00200320001084818080000c080b2000" + "41f80171418495c080006a210602400240410028028c97c0800022014101" + "2000410376742200710d004100200120007236028c97c08000200621000c" + "010b200628020821000b200620033602082000200336020c200320063602" + "0c200320003602080c070b200020013602002000200028020420086a3602" + "04200120024103723602042007410f6a41787141786a2206200120026a22" + "006b2103200641002802a097c08000460d032006410028029c97c0800046" + "0d040240200628020422024103714101470d0020062002417871220210cc" + "80808000200220036a2103200620026a220628020421020b20062002417e" + "7136020420002003410172360204200020036a2003360200024020034180" + "02490d00200020031084818080000c060b200341f80171418495c080006a" + "210202400240410028028c97c08000220641012003410376742203710d00" + "4100200620037236028c97c08000200221030c010b200228020821030b20" + "0220003602082003200036020c2000200236020c200020033602080c050b" + "4100200020026b220336029897c08000410041002802a097c08000220020" + "026a22063602a097c0800020062003410172360204200020024103723602" + "04200041086a21000c060b410028029c97c0800021030240024020002002" + "6b2206410f4b0d004100410036029c97c080004100410036029497c08000" + "20032000410372360204200320006a220020002802044101723602040c01" + "0b4100200636029497c080004100200320026a220136029c97c080002001" + "2006410172360204200320006a2006360200200320024103723602040b20" + "0341086a0f0b2000200720086a360204410041002802a097c08000220041" + "0f6a417871220341786a22063602a097c080004100200020036b41002802" + "9897c0800020086a22036a41086a220136029897c0800020062001410172" + "360204200020036a4128360204410041808080013602ac97c080000c030b" + "410020003602a097c080004100410028029897c0800020036a2203360298" + "97c08000200020034101723602040c010b4100200036029c97c080004100" + "410028029497c0800020036a220336029497c08000200020034101723602" + "04200020036a20033602000b200141086a0f0b41002100410028029897c0" + "8000220320024d0d004100200320026b220336029897c080004100410028" + "02a097c08000220020026a22063602a097c0800020062003410172360204" + "20002002410372360204200041086a0f0b20000b4301017f238080808000" + "41206b2201248080808000200141003602182001410136020c200141d085" + "c0800036020820014204370210200141086a200010a480808000000b4e01" + "037f024020012802042202200128020822034e0d0020012003417f6a2204" + "36020820012802002d000020044107717641017110a38080800021040b20" + "0020043a0001200020022003483a00000b18002001200085220042002000" + "7d84427f5510a3808080000b10002000417f7341017110a3808080000bf2" + "0202017f017e23808080800041f0006b2206248080808000200620013602" + "0c2006200036020820062003360214200620023602102006410236021c20" + "0641c08dc08000360218024020042802000d002006410336025c200641f4" + "8dc08000360258200642033702642006418280808000ad42208622072006" + "41106aad8437034820062007200641086aad843703402006418380808000" + "ad422086200641186aad843703382006200641386a360260200641d8006a" + "200510a480808000000b200641206a41106a200441106a29020037030020" + "0641206a41086a200441086a290200370300200620042902003703202006" + "410436025c200641a88ec080003602582006420437026420064182808080" + "00ad4220862207200641106aad8437035020062007200641086aad843703" + "482006418480808000ad422086200641206aad8437034020064183808080" + "00ad422086200641186aad843703382006200641386a360260200641d800" + "6a200510a480808000000bb30301037f2380808080004180016b22022480" + "8080800020002802002100024002400240200128021422034110710d0020" + "03412071450d0120002d0000210341810121000340200220006a417e6a20" + "03410f712204413072200441376a2004410a491b3a0000200341ff017122" + "0441047621032000417f6a21002004410f4b0d000b200141fd8ec0800041" + "02200220006a417f6a41810120006b10d58080800021000c020b20002d00" + "00210341810121000340200220006a417e6a2003410f7122044130722004" + "41d7006a2004410a491b3a0000200341ff0171220441047621032000417f" + "6a21002004410f4b0d000b200141fd8ec080004102200220006a417f6a41" + "810120006b10d58080800021000c010b024002400240024020002d000022" + "0341e400490d002002200341e4006e2204419c7f6c20036a41ff01714101" + "7441ff8ec080006a2f00003b0001410021000c010b410221002003410a4f" + "0d01200321040b200220006a20044130723a00000c010b41012100200220" + "0341017441ff8ec080006a2f00003b00010b200141014100200220006a20" + "0041037310d58080800021000b20024180016a24808080800020000bb605" + "01087f20002802142205410171220620046a21070240024020054104710d" + "00410021010c010b0240024020020d00410021080c010b02402002410371" + "22090d000c010b410021082001210a03402008200a2c000041bf7f4a6a21" + "08200a41016a210a2009417f6a22090d000b0b200820076a21070b412b41" + "8080c40020061b2106024020002802000d000240200028021c220a200028" + "0220220820062001200210f480808000450d0041010f0b200a2003200420" + "0828020c11808080800080808080000f0b02400240024002402000280204" + "220a20074b0d00200028021c220a2000280220220820062001200210f480" + "808000450d0141010f0b2005410871450d01200028021021052000413036" + "021020002d0018210b4101210c200041013a0018200028021c2208200028" + "0220220920062001200210f4808080000d02200a20076b41016a210a0240" + "0340200a417f6a220a450d01200841302009280210118180808000808080" + "8000450d000b41010f0b0240200820032004200928020c11808080800080" + "80808000450d0041010f0b2000200b3a00182000200536021041000f0b20" + "0a20032004200828020c1180808080008080808000210c0c010b200a2007" + "6b2105024002400240410120002d0018220a200a4103461b220a0e030200" + "01020b2005210a410021050c010b2005410176210a200541016a41017621" + "050b200a41016a210a2000280210210720002802202108200028021c2109" + "02400340200a417f6a220a450d0120092007200828021011818080800080" + "80808000450d000b41010f0b4101210c2009200820062001200210f48080" + "80000d00200920032004200828020c11808080800080808080000d004100" + "210a034002402005200a470d0020052005490f0b200a41016a210a200920" + "0720082802101181808080008080808000450d000b200a417f6a2005490f" + "0b200c0be802010d7e2000200129032822022001290300220342d5aa8180" + "8080c080c6007c2204200354ad427f7c22052005200129030822067c2205" + "200654ad7c2005428180b0f5948080aa617c2207200554ad7c427f7c423f" + "8722052005200129031022087c2205200854ad7c200542dc93bccaf0abcb" + "e7987f7c2209200554ad7c427f7c423f87220520052001290318220a7c22" + "05200a54ad7c200542c1daebe3b08fadc49b7f7c220b200554ad7c427f7c" + "423f87220520052001290320220c7c2205200c54ad7c200542a9a6d1e59b" + "8996f2b47f7c220d200554ad7c427f7c423f872205200220057c22052002" + "54ad7c200542e6b280b4dcc2bbff657c220e200554ad7c2205427f7c2202" + "83420020057d2205200e83843703282000200c2002832005200d83843703" + "202000200a2002832005200b838437031820002008200283200520098384" + "370310200020062002832005200783843703082000200320028320052004" + "83843703000b2c0002402002450d0041002d00e893c080001a200210ce80" + "80800021010b20002002360204200020013602000b5a01017f2380808080" + "0041106b2202248080808000200241086a20002000280200410141a00210" + "8b80808000024020022802082200418180808078460d002000200228020c" + "2001108c80808000000b200241106a2480808080000b4800200020012002" + "200310b080808000200041e0006a200141e0006a200241e0006a200310b0" + "80808000200020022d00c00120012d00c001220273410020036b71200273" + "3a00c0010b2b00200020012002200310b080808000200020022d00602001" + "2d0060220273410020036b712002733a00600b8501002000290300200129" + "030010d1808080002000290308200129030810d1808080007110a3808080" + "002000290310200129031010d1808080007110a380808000200029031820" + "0129031810d1808080007110a3808080002000290320200129032010d180" + "8080007110a3808080002000290328200129032810d1808080007110a380" + "8080000bda0602017f067e23808080800041306b22022480808080002002" + "2001290000220342388620034280fe0383422886842003428080fc078342" + "1886200342808080f80f834208868484200342088842808080f80f832003" + "421888428080fc07838420034228884280fe038320034238888484842204" + "37032820022001290008220342388620034280fe03834228868420034280" + "80fc0783421886200342808080f80f834208868484200342088842808080" + "f80f832003421888428080fc07838420034228884280fe03832003423888" + "848484220537032020022001290010220342388620034280fe0383422886" + "842003428080fc0783421886200342808080f80f83420886848420034208" + "8842808080f80f832003421888428080fc07838420034228884280fe0383" + "2003423888848484220637031820022001290018220342388620034280fe" + "0383422886842003428080fc0783421886200342808080f80f8342088684" + "84200342088842808080f80f832003421888428080fc0783842003422888" + "4280fe038320034238888484842207370310200220012900202203423886" + "20034280fe0383422886842003428080fc0783421886200342808080f80f" + "834208868484200342088842808080f80f832003421888428080fc078384" + "20034228884280fe03832003423888848484220837030820022001290028" + "220342388620034280fe0383422886842003428080fc0783421886200342" + "808080f80f834208868484200342088842808080f80f8320034218884280" + "80fc07838420034228884280fe0383200342388884848422033703002002" + "419087c0800010dd80808000200342d5aa81808080c080c6007c200354ad" + "427f7c2203200820037c2203200854ad7c2003428180b0f5948080aa617c" + "200354ad7c427f7c423f872203200720037c2203200754ad7c200342dc93" + "bccaf0abcbe7987f7c200354ad7c427f7c423f872203200620037c220320" + "0654ad7c200342c1daebe3b08fadc49b7f7c200354ad7c427f7c423f8722" + "03200520037c2203200554ad7c200342a9a6d1e59b8996f2b47f7c200354" + "ad7c427f7c423f872203200420037c2203200454ad7c200342e6b280b4dc" + "c2bbff657c200354ad7ca741016a41017110a38080800021012000200241" + "3010868180800020013a0030200241306a2480808080000b3901017f2380" + "8080800041306b220224808080800020022000200110a780808000200020" + "0241301086818080001a200241306a2480808080000b9b1602017f177e23" + "808080800041a0056b2201248080808000200141b0046a20002903002202" + "42fdfff3ffcffffff9897f7e2203420042abd5feffffffbfffb97f420010" + "8781808000200141a0046a2003420042ffffcf8aebffffd51e4200108781" + "80800020014190046a2003420042a4ecc3b58fd4b498e700420010878180" + "800020014180046a2003420042bfa5949ccff0d2bbe40042001087818080" + "00200141f0036a2003420042d7d9ae9ae4f6e98dcb004200108781808000" + "200141e0036a20034200429acdffcba3bdc4801a42001087818080002001" + "41d0036a20012903a004220420002903087c2205200141b0046a41086a29" + "0300200220012903b00422037c200354ad7c7c220242fdfff3ffcffffff9" + "897f7e2203420042abd5feffffffbfffb97f4200108781808000200141c0" + "036a2003420042ffffcf8aebffffd51e4200108781808000200141d0026a" + "2003420042a4ecc3b58fd4b498e7004200108781808000200141e0016a20" + "03420042bfa5949ccff0d2bbe4004200108781808000200141f0006a2003" + "420042d7d9ae9ae4f6e98dcb004200108781808000200120034200429acd" + "ffcba3bdc4801a4200108781808000200141b0036a20012903c003220620" + "0129039004220720002903107c2208200141a0046a41086a290300200520" + "0454ad7c2002200554ad7c7c22097c2205200141d0036a41086a29030020" + "012903d003220320027c200354ad7c7c220242fdfff3ffcffffff9897f7e" + "2203420042abd5feffffffbfffb97f4200108781808000200141a0036a20" + "03420042ffffcf8aebffffd51e420010878180800020014190036a200342" + "0042a4ecc3b58fd4b498e700420010878180800020014180036a20034200" + "42bfa5949ccff0d2bbe4004200108781808000200141f0026a2003420042" + "d7d9ae9ae4f6e98dcb004200108781808000200141e0026a20034200429a" + "cdffcba3bdc4801a4200108781808000200141c0026a20012903a003220a" + "200129038004220b20002903187c220420014190046a41086a2903002008" + "200754ad7c2009200854ad7c7c220820012903d0027c2207200141c0036a" + "41086a2903002005200654ad7c2002200554ad7c7c220c7c2205200141b0" + "036a41086a29030020012903b003220320027c200354ad7c7c220242fdff" + "f3ffcffffff9897f7e2203420042abd5feffffffbfffb97f420010878180" + "8000200141b0026a2003420042ffffcf8aebffffd51e4200108781808000" + "200141a0026a2003420042a4ecc3b58fd4b498e700420010878180800020" + "014190026a2003420042bfa5949ccff0d2bbe40042001087818080002001" + "4180026a2003420042d7d9ae9ae4f6e98dcb004200108781808000200141" + "f0016a20034200429acdffcba3bdc4801a4200108781808000200141d001" + "6a20012903b002220d20012903f003220e20002903207c22062001418004" + "6a41086a2903002004200b54ad7c2008200454ad7c7c220420012903e001" + "7c2209200141d0026a41086a2903002007200854ad7c200c200754ad7c7c" + "22082001290390037c2207200141a0036a41086a2903002005200a54ad7c" + "2002200554ad7c7c220c7c2205200141c0026a41086a29030020012903c0" + "02220320027c200354ad7c7c220242fdfff3ffcffffff9897f7e22034200" + "42abd5feffffffbfffb97f4200108781808000200141c0016a2003420042" + "ffffcf8aebffffd51e4200108781808000200141b0016a2003420042a4ec" + "c3b58fd4b498e7004200108781808000200141a0016a2003420042bfa594" + "9ccff0d2bbe400420010878180800020014190016a2003420042d7d9ae9a" + "e4f6e98dcb00420010878180800020014180016a20034200429acdffcba3" + "bdc4801a4200108781808000200141e0006a20012903c001220f20012903" + "e003221020002903287c220a200141f0036a41086a2903002006200e54ad" + "7c2004200654ad7c7c220620012903707c220b200141e0016a41086a2903" + "002009200454ad7c2008200954ad7c7c22042001290380037c2209200141" + "90036a41086a2903002007200854ad7c200c200754ad7c7c220820012903" + "a0027c2207200141b0026a41086a2903002005200d54ad7c2002200554ad" + "7c7c220c7c2205200141d0016a41086a29030020012903d001220320027c" + "200354ad7c7c220242fdfff3ffcffffff9897f7e2203420042abd5feffff" + "ffbfffb97f4200108781808000200141d0006a2003420042ffffcf8aebff" + "ffd51e4200108781808000200141c0006a2003420042a4ecc3b58fd4b498" + "e7004200108781808000200141306a2003420042bfa5949ccff0d2bbe400" + "4200108781808000200141206a2003420042d7d9ae9ae4f6e98dcb004200" + "108781808000200141106a20034200429acdffcba3bdc4801a4200108781" + "808000200141b0016a41086a290300210d20014190026a41086a29030021" + "0e200141f0026a41086a2903002111200141086a290300211220012903e0" + "022113200129038002211420012903a001211520012903402116200141c0" + "006a41086a2903002117200120012903502218200141e0036a41086a2903" + "00200a201054ad7c2006200a54ad7c221020012903007c2203200141f000" + "6a41086a290300200b200654ad7c2004200b54ad7c7c220620012903f002" + "7c220a20014180036a41086a2903002009200454ad7c2008200954ad7c7c" + "22042001290390027c2209200141a0026a41086a2903002007200854ad7c" + "200c200754ad7c7c220820012903b0017c2207200141c0016a41086a2903" + "002005200f54ad7c2002200554ad7c7c220b7c2205200141e0006a41086a" + "2903002001290360220c20027c200c54ad7c7c220c3703f0042001201620" + "152014201320122003201054ad7c2006200354ad7c220f7c22032011200a" + "200654ad7c2004200a54ad7c7c22027c2206200e2009200454ad7c200820" + "0954ad7c7c22047c2209200d2007200854ad7c200b200754ad7c7c22087c" + "2207200141d0006a41086a2903002005201854ad7c200c200554ad7c7c22" + "0a3703f8042001200141e0026a41086a2903002003200f54ad7c20022003" + "54ad7c220b20012903f0017c220320014180026a41086a29030020062002" + "54ad7c2004200654ad7c7c22052001290390017c2202200141a0016a4108" + "6a2903002009200454ad7c2008200954ad7c7c220420012903307c220620" + "172007200854ad7c200a200754ad7c7c2208370380052001200141f0016a" + "41086a2903002003200b54ad7c2005200354ad7c22072001290380017c22" + "0320014190016a41086a2903002002200554ad7c2004200254ad7c7c2205" + "20012903207c2202200141306a41086a2903002006200454ad7c20082006" + "54ad7c7c220837038805200120014180016a41086a2903002003200754ad" + "7c2005200354ad7c220420012903107c2203200141206a41086a29030020" + "02200554ad7c2008200254ad7c7c2205370390052001200141106a41086a" + "2903002003200454ad7c2005200354ad7c37039805200141c0046a200141" + "f0046a10d68080800020012903c004220342aad580808080a080237c2003" + "54ad427f7c2203200320012903c80422057c2203200554ad7c2003428180" + "d8ba8a8080d5707c200354ad7c427f7c423f872203200320012903d00422" + "057c2203200554ad7c200342ee899ea5f8d5e5b3cc007c200354ad7c427f" + "7c423f872203200320012903d80422057c2203200554ad7c200342a1edf5" + "b1d8c796e2cd007c200354ad7c427f7c423f872203200320012903e00422" + "057c2203200554ad7c20034295d3e8f2cd848bb95a7c200354ad7c427f7c" + "423f872203200320012903e80422057c2203200554ad7c200342b399809a" + "aee1ddff727c200354ad7ca741016a41017110a38080800010d280808000" + "2100200141a0056a24808080800020000bb60103037f017e017f23808080" + "800041e0006b2203248080808000200341e086c080004130108681808000" + "2104200241306a21050240034020052002460d01200541786a2205290300" + "2106413f210303402003417f460d01200441306a200410bd808080002004" + "200441306a41301086818080002107024020062003413f71ad8842018350" + "0d002007200110dd808080000b2003417f6a21030c000b0b0b2000200441" + "301086818080001a200441e0006a2480808080000b1c00200010a9808080" + "00200041306a10a9808080007110a3808080000bf50706027f067e027f01" + "7e017f027e23808080800041f0016b220324808080800041002104420021" + "05420021064200210742002108420021094200210a02400340200441054b" + "0d01200420044106496a210b200120044103746a210c4200210d41a07f21" + "0e02400340200e450d01200341b0016a2002200e6a220441e0006a290300" + "4200200c200e6a41e0006a290300220f4200108781808000200341a0016a" + "200441e8006a2903004200200f420010878180800020034190016a200441" + "f0006a2903004200200f420010878180800020034180016a200441f8006a" + "2903004200200f4200108781808000200341f0006a20044180016a290300" + "4200200f4200108781808000200341e0006a20044188016a290300420020" + "0f4200108781808000200d200341e0006a41086a29030020032903602210" + "200a7c220f201054ad7c200f200341f0006a41086a290300200329037022" + "1020097c220a201054ad7c200a20034180016a41086a2903002003290380" + "01221020087c2209201054ad7c200920034190016a41086a290300200329" + "039001221020077c2208201054ad7c2008200341a0016a41086a29030020" + "032903a001221020067c2207201054ad7c2007200341b0016a41086a2903" + "0020032903b001220620057c2205200654ad7c7c2206200754ad7c7c2207" + "200854ad7c7c2208200954ad7c7c2209200a54ad7c7c220a200f54ad7c7c" + "210d200e41306a210e0c000b0b200341d0006a200542fdfff3ffcffffff9" + "897f7e220f420042abd5feffffffbfffb97f4200108781808000200341c0" + "006a200f420042ffffcf8aebffffd51e4200108781808000200341306a20" + "0f420042a4ecc3b58fd4b498e7004200108781808000200341206a200f42" + "0042bfa5949ccff0d2bbe4004200108781808000200341106a200f420042" + "d7d9ae9ae4f6e98dcb0042001087818080002003200f4200429acdffcba3" + "bdc4801a4200108781808000200d200341086a2903002003290300221020" + "0a7c220f201054ad7c200f200341106a41086a2903002003290310221020" + "097c220a201054ad7c200a200341206a41086a2903002003290320221020" + "087c2209201054ad7c2009200341306a41086a2903002003290330221020" + "077c2208201054ad7c2008200341c0006a41086a29030020032903402210" + "20067c2207201054ad7c2007200341d0006a41086a290300200329035022" + "0620057c200654ad7c7c2205200754ad7c7c2206200854ad7c7c22072009" + "54ad7c7c2208200a54ad7c7c2209200f54ad7c7c210a200b21040c000b0b" + "2003200a3703e801200320093703e001200320083703d801200320073703" + "d001200320063703c801200320053703c0012000200341c0016a10d68080" + "8000200341f0016a2480808080000b1c002000200110b280808000200041" + "306a200141306a10b2808080000be20103037f017e017f23808080800041" + "c0016b2203248080808000200341306a410041301085818080001a200341" + "e086c0800041301086818080002104200241306a21050240034020052002" + "460d01200541786a22052903002106413f210303402003417f460d012004" + "41e0006a200410ba808080002004200441e0006a41e00010868180800021" + "07024020062003413f71ad88420183500d00200741e0006a2007200110b3" + "808080002007200741e0006a41e0001086818080001a0b2003417f6a2103" + "0c000b0b0b2000200441e0001086818080001a200441c0016a2480808080" + "000b900202017f017e23808080800041b0036b2202248080808000200241" + "004130108581808000220241e0006a410041301085818080001a20024130" + "6a41e086c0800041301086818080001a20024190016a2001419001108681" + "8080001a42808082808080a080e90021030240034020034200510d012002" + "41a0026a20024190016a10c68080800020024190016a200241a0026a4190" + "011086818080001a02402003420183500d00200241a0026a200220024190" + "016a10c7808080002002200241a0026a4190011086818080001a0b200342" + "018821030c000b0b200241a0026a200210e58080800020002002200241a0" + "026a41900110868180800022024190011086818080001a200241b0036a24" + "80808080000b3400200041306a200141306a10b280808000200041e0006a" + "200141e0006a41301086818080001a2000200141301086818080001a0b6b" + "01037f23808080800041106b22022480808080000240024020012802000d" + "00410021030c010b200241086a200110d0808080004101210320022d0009" + "210420022d00080d0041002103200141003602000b200020043a00012000" + "20033a0000200241106a2480808080000b7501027f23808080800041e000" + "6b2201248080808000200141306a410041301085818080001a200141e086" + "c0800041301086818080002101410110a38080800021022000410041e000" + "108581808000220041e0006a200141e0001086818080001a200020023a00" + "c001200141e0006a2480808080000b920101017f23808080800041c0016b" + "2202248080808000200041e0006a200141e0006a41e0001086818080001a" + "200241306a410041301085818080001a200241e086c08000413010868180" + "8000220241e0006a410041e0001085818080001a200041c0016a20022002" + "41e0006a20012d00c00110b0808080002000200141e0001086818080001a" + "200241c0016a2480808080000baa0201047f23808080800041e0036b2204" + "24808080800020042001200210b380808000200441e0006a200141e0006a" + "2205200310b38080800020044180036a200141c0016a2206200310b38080" + "8000200441a0026a20044180036a20044180036a41306a220710b8808080" + "00200441a0026a41306a20044180036a200710b9808080002000200441a0" + "026a200410bc80808000200441a0026a2002200310bc8080800020044180" + "036a2001200510bc80808000200441c0016a200441a0026a20044180036a" + "10b38080800020044180036a200441c0016a200410bb80808000200041e0" + "006a20044180036a200441e0006a10bb8080800020044180036a20062002" + "10b380808000200041c0016a20044180036a200441e0006a10bc80808000" + "200441e0036a2480808080000bf50706027f067e027f017e017f027e2380" + "8080800041f0016b22032480808080004100210442002105420021064200" + "210742002108420021094200210a02400340200441054b0d012004200441" + "06496a210b200120044103746a210c4200210d41e07d210e02400340200e" + "450d01200341b0016a2002200e6a220441a0026a2903004200200c200e6a" + "41a0026a290300220f4200108781808000200341a0016a200441a8026a29" + "03004200200f420010878180800020034190016a200441b0026a29030042" + "00200f420010878180800020034180016a200441b8026a2903004200200f" + "4200108781808000200341f0006a200441c0026a2903004200200f420010" + "8781808000200341e0006a200441c8026a2903004200200f420010878180" + "8000200d200341e0006a41086a29030020032903602210200a7c220f2010" + "54ad7c200f200341f0006a41086a2903002003290370221020097c220a20" + "1054ad7c200a20034180016a41086a290300200329038001221020087c22" + "09201054ad7c200920034190016a41086a29030020032903900122102007" + "7c2208201054ad7c2008200341a0016a41086a29030020032903a0012210" + "20067c2207201054ad7c2007200341b0016a41086a29030020032903b001" + "220620057c2205200654ad7c7c2206200754ad7c7c2207200854ad7c7c22" + "08200954ad7c7c2209200a54ad7c7c220a200f54ad7c7c210d200e41306a" + "210e0c000b0b200341d0006a200542fdfff3ffcffffff9897f7e220f4200" + "42abd5feffffffbfffb97f4200108781808000200341c0006a200f420042" + "ffffcf8aebffffd51e4200108781808000200341306a200f420042a4ecc3" + "b58fd4b498e7004200108781808000200341206a200f420042bfa5949ccf" + "f0d2bbe4004200108781808000200341106a200f420042d7d9ae9ae4f6e9" + "8dcb0042001087818080002003200f4200429acdffcba3bdc4801a420010" + "8781808000200d200341086a29030020032903002210200a7c220f201054" + "ad7c200f200341106a41086a2903002003290310221020097c220a201054" + "ad7c200a200341206a41086a2903002003290320221020087c2209201054" + "ad7c2009200341306a41086a2903002003290330221020077c2208201054" + "ad7c2008200341c0006a41086a2903002003290340221020067c22072010" + "54ad7c2007200341d0006a41086a2903002003290350220620057c200654" + "ad7c7c2205200754ad7c7c2206200854ad7c7c2207200954ad7c7c220820" + "0a54ad7c7c2209200f54ad7c7c210a200b21040c000b0b2003200a3703e8" + "01200320093703e001200320083703d801200320073703d0012003200637" + "03c801200320053703c0012000200341c0016a10d680808000200341f001" + "6a2480808080000bdc0101027f2380808080004180036b22032480808080" + "002003200110ba80808000200341e0006a200210ba80808000200341c001" + "6a200341e0006a200341e0006a41306a220410b880808000200341c0016a" + "41306a200341e0006a200410b9808080002000200341c0016a200310bc80" + "808000200341c0016a2001200210bc80808000200341a0026a200341c001" + "6a10ba80808000200341c0016a200341a0026a41e0001086818080001a20" + "0341c0016a200310ec80808000200041e0006a200341c0016a200341e000" + "6a10bb8080800020034180036a2480808080000b3c01017f238080808000" + "41e0006b220224808080800020022000200110bb808080002000200241e0" + "001086818080001a200241e0006a2480808080000b9f0701037f23808080" + "800041a0116b2201248080808000200141a0026a200010ba808080002001" + "4180036a200041e0006a220210ba80808000200141e0036a20014180036a" + "10ba80808000200141c0106a20014180036a200010bc80808000200141e0" + "0f6a200141c0106a10ba80808000200141800f6a200141e00f6a200141a0" + "026a10bb80808000200141c0046a200141800f6a200141e0036a10bb8080" + "8000200141a0056a200141c0046a200141c0046a10bc80808000200141c0" + "106a200141a0026a200141a0026a10bc8080800020014180066a200141c0" + "106a200141a0026a10bc80808000200141e0066a200020014180066a10bc" + "80808000200141c0076a20014180066a10ba80808000200141a0086a2000" + "41c0016a220310ba80808000200141c0106a200141c0076a200141a0056a" + "10bb80808000200141e00f6a200141c0106a200141a0056a10bb80808000" + "2000200141e00f6a41e0001086818080002100200141c0106a2003200210" + "bc80808000200141e00f6a200141c0106a10ba80808000200141800f6a20" + "0141e00f6a20014180036a10bb80808000200141e00f6a200141800f6a20" + "0141a0086a10bb808080002003200141e00f6a41e0001086818080002103" + "200141c0106a200141a0056a200010bb80808000200141e00f6a200141c0" + "106a20014180066a10b3808080002002200141e00f6a41e0001086818080" + "00210220014180096a200141e0036a200141e0036a10bc80808000200141" + "e0096a20014180096a20014180096a10bc80808000200141c00a6a200141" + "e0096a200141e0096a10bc808080002002200141c00a6a10ec8080800020" + "0141a00b6a20014180066a200141a0086a10b380808000200141800c6a20" + "0141a00b6a200141a00b6a10bc80808000200141e00c6a200141800c6a10" + "e280808000200141c0106a200141e0066a10ba80808000200141e00f6a20" + "0141c0106a200141a0026a10bb80808000200141c00d6a200141e00f6a20" + "0141c0076a10bb80808000200141a00e6a20014180036a20014180036a10" + "bc80808000200141800f6a200141a00e6a200141a00e6a10bc8080800020" + "0141e00f6a200141c00d6a200141800f6a10bb80808000200141c0106a20" + "03200141a0086a10b3808080002001200141c0106a200141c0106a10bc80" + "808000200141e0006a200141e00c6a41e0001086818080001a200141c001" + "6a200141e00f6a41e0001086818080001a200041e8036a200141ac8cc080" + "0010ee80808000200141a0116a2480808080000b4201017f024020002802" + "0822032000280200470d002000200210d8808080000b2000280204200341" + "a0026c6a200141a0021086818080001a2000200341016a3602080b4c0101" + "7f23808080800041106b2202248080808000200241988cc0800036020c20" + "022000360208200241086a41b08dc080002002410c6a41b08dc080002001" + "419c8cc0800010d380808000000b7902017f017e23808080800041306b22" + "0324808080800020032001360204200320003602002003410236020c2003" + "41a08dc08000360208200342023702142003418580808000ad4220862204" + "2003ad8437032820032004200341046aad843703202003200341206a3602" + "10200341086a200210a480808000000b0f002000280200200110f2808080" + "000be10201067f23808080800041106b2202248080808000410a21030240" + "024020004190ce004f0d00200021040c010b410a21030340200241066a20" + "036a2205417c6a20004190ce006e220441f0b1036c20006a220641ffff03" + "7141e4006e220741017441ff8ec080006a2f00003b00002005417e6a2007" + "419c7f6c20066a41ffff037141017441ff8ec080006a2f00003b00002003" + "417c6a2103200041ffc1d72f4b21052004210020050d000b0b0240024020" + "0441e3004b0d00200421000c010b200241066a2003417e6a22036a200441" + "ffff037141e4006e2200419c7f6c20046a41ffff037141017441ff8ec080" + "006a2f00003b00000b024002402000410a490d00200241066a2003417e6a" + "22036a200041017441ff8ec080006a2f00003b00000c010b200241066a20" + "03417f6a22036a20004130723a00000b200141014100200241066a20036a" + "410a20036b10d5808080002100200241106a24808080800020000b380201" + "7f017e23808080800041106b220124808080800020002902002102200120" + "0036020c20012002370204200141046a108181808000000b490002402002" + "418080c400460d002000200220012802101181808080008080808000450d" + "0041010f0b024020030d0041000f0b200020032004200128020c11808080" + "800080808080000b7902017f017e23808080800041306b22032480808080" + "0020032001360204200320003602002003410236020c2003419c91c08000" + "360208200342023702142003418580808000ad4220862204200341046aad" + "84370328200320042003ad843703202003200341206a360210200341086a" + "200210a480808000000b1c0020002802002001200028020428020c118180" + "80800080808080000b14002001200028020020002802041092808080000b" + "1400200128021c2001280220200010f9808080000bbb05010a7f23808080" + "800041306b22032480808080002003200136022c20032000360228200341" + "033a00242003422037021c41002104200341003602142003410036020c02" + "400240024002400240200228021022050d00200228020c2200450d012002" + "280208220120004103746a21062000417f6a41ffffffff017141016a2104" + "2002280200210003400240200041046a2802002207450d00200328022820" + "002802002007200328022c28020c11808080800080808080000d040b2001" + "2802002003410c6a200141046a28020011818080800080808080000d0320" + "0041086a2100200141086a22012006470d000c020b0b2002280214220145" + "0d00200141057421082001417f6a41ffffff3f7141016a21042002280208" + "2109200228020021004100210703400240200041046a2802002201450d00" + "200328022820002802002001200328022c28020c11808080800080808080" + "000d030b2003200520076a220141106a28020036021c20032001411c6a2d" + "00003a00242003200141186a2802003602202001410c6a28020021064100" + "210a4100210b024002400240200141086a2802000e03010002010b200641" + "0374210c4100210b2009200c6a220c2802000d01200c28020421060b4101" + "210b0b200320063602102003200b36020c200141046a2802002106024002" + "40024020012802000e03010002010b2006410374210b2009200b6a220b28" + "02000d01200b28020421060b4101210a0b200320063602182003200a3602" + "142009200141146a2802004103746a22012802002003410c6a200141046a" + "28020011818080800080808080000d02200041086a21002008200741206a" + "2207470d000b0b200420022802044f0d0120032802282002280200200441" + "03746a22012802002001280204200328022c28020c118080808000808080" + "8000450d010b410121010c010b410021010b200341306a24808080800020" + "010b6001027f20002802042102200028020021030240200028020822002d" + "0000450d00200341f48ec080004104200228020c11808080800080808080" + "00450d0041010f0b20002001410a463a0000200320012002280210118180" + "80800080808080000b1200200041dc8ec08000200110f9808080000b7902" + "017f017e23808080800041306b2203248080808000200320013602042003" + "20003602002003410236020c200341d091c0800036020820034202370214" + "2003418580808000ad4220862204200341046aad84370328200320042003" + "ad843703202003200341206a360210200341086a200210a480808000000b" + "ab0201037f2380808080004180016b220224808080800020002802002100" + "024002400240200128021422034110710d0020034120710d012000280200" + "200110f28080800021000c020b2000280200210041810121030340200220" + "036a417e6a2000410f712204413072200441d7006a2004410a491b3a0000" + "2003417f6a21032000410f4b21042000410476210020040d000b200141fd" + "8ec080004102200220036a417f6a41810120036b10d58080800021000c01" + "0b2000280200210041810121030340200220036a417e6a2000410f712204" + "413072200441376a2004410a491b3a00002003417f6a21032000410f4b21" + "042000410476210020040d000b200141fd8ec080004102200220036a417f" + "6a41810120036b10d58080800021000b20024180016a2480808080002000" + "0b0900200041003602000b990101027f23808080800041106b2204248080" + "808000410041002802f093c08000220541016a3602f093c0800002402005" + "4100480d000240024041002d00bc97c080000d00410041002802b897c080" + "0041016a3602b897c0800041002802ec93c08000417f4a0d010c020b2004" + "41086a200020011182808080008080808000000b410041003a00bc97c080" + "002002450d00108081808000000b000b0300000b0b002000108281808000" + "000bba0101037f23808080800041106b2201248080808000200028020022" + "0228020c2103024002400240024020022802040e020001020b20030d0141" + "012102410021030c020b20030d0020022802002202280204210320022802" + "0021020c010b20014180808080783602002001200036020c200141868080" + "8000200028020822002d000820002d000910ff80808000000b2001200336" + "0204200120023602002001418780808000200028020822002d000820002d" + "000910ff80808000000b0c00200020012902003703000bc30201047f411f" + "21020240200141ffffff074b0d002001410620014108766722026b764101" + "7120024101746b413e6a21020b200042003702102000200236021c200241" + "027441f493c080006a21030240410028029097c080004101200274220471" + "0d0020032000360200200020033602182000200036020c20002000360208" + "4100410028029097c0800020047236029097c080000f0b02400240024020" + "0328020022042802044178712001470d00200421020c010b200141004119" + "20024101766b2002411f461b742103034020042003411d764104716a4110" + "6a22052802002202450d0220034101742103200221042002280204417871" + "2001470d000b0b20022802082203200036020c2002200036020820004100" + "3602182000200236020c200020033602080f0b2005200036020020002004" + "3602182000200036020c200020003602080baa0301057f02400240200241" + "104f0d00200021030c010b02402000410020006b41037122046a22052000" + "4d0d002004417f6a21062000210302402004450d00200421072000210303" + "40200320013a0000200341016a21032007417f6a22070d000b0b20064107" + "490d000340200320013a0000200341076a20013a0000200341066a20013a" + "0000200341056a20013a0000200341046a20013a0000200341036a20013a" + "0000200341026a20013a0000200341016a20013a0000200341086a220320" + "05470d000b0b024020052005200220046b2202417c716a22034f0d002001" + "41ff017141818284086c2107034020052007360200200541046a22052003" + "490d000b0b200241037121020b02402003200320026a22074f0d00200241" + "7f6a2104024020024107712205450d000340200320013a0000200341016a" + "21032005417f6a22050d000b0b20044107490d000340200320013a000020" + "0341076a20013a0000200341066a20013a0000200341056a20013a000020" + "0341046a20013a0000200341036a20013a0000200341026a20013a000020" + "0341016a20013a0000200341086a22032007470d000b0b20000ba5050108" + "7f02400240200241104f0d00200021030c010b02402000410020006b4103" + "7122046a220520004d0d002004417f6a2106200021032001210702402004" + "450d002004210820002103200121070340200320072d00003a0000200741" + "016a2107200341016a21032008417f6a22080d000b0b20064107490d0003" + "40200320072d00003a0000200341016a200741016a2d00003a0000200341" + "026a200741026a2d00003a0000200341036a200741036a2d00003a000020" + "0341046a200741046a2d00003a0000200341056a200741056a2d00003a00" + "00200341066a200741066a2d00003a0000200341076a200741076a2d0000" + "3a0000200741086a2107200341086a22032005470d000b0b200520022004" + "6b2208417c7122066a210302400240200120046a22074103710d00200520" + "034f0d0120072101034020052001280200360200200141046a2101200541" + "046a22052003490d000c020b0b200520034f0d0020074103742202411871" + "21042007417c71220941046a2101410020026b411871210a200928020021" + "0203402005200220047620012802002202200a7472360200200141046a21" + "01200541046a22052003490d000b0b20084103712102200720066a21010b" + "02402003200320026a22054f0d002002417f6a2108024020024107712207" + "450d000340200320012d00003a0000200141016a2101200341016a210320" + "07417f6a22070d000b0b20084107490d000340200320012d00003a000020" + "0341016a200141016a2d00003a0000200341026a200141026a2d00003a00" + "00200341036a200141036a2d00003a0000200341046a200141046a2d0000" + "3a0000200341056a200141056a2d00003a0000200341066a200141066a2d" + "00003a0000200341076a200141076a2d00003a0000200141086a21012003" + "41086a22032005470d000b0b20000b6e01067e2000200342ffffffff0f83" + "2205200142ffffffff0f8322067e22072003422088220820067e22062005" + "200142208822097e7c22054220867c220a3703002000200820097e200520" + "0654ad4220862005422088847c200a200754ad7c200420017e200320027e" + "7c7c3703080bea0901087f024002400240200020016b20024f0d00200120" + "026a2103200020026a210420024110490d014100200441037122056b2106" + "02402004417c71220720044f0d002005417f6a21080240024020050d0020" + "0321090c010b2005210a2003210903402004417f6a22042009417f6a2209" + "2d00003a0000200a417f6a220a0d000b0b20084103490d002009417c6a21" + "0903402004417f6a200941036a2d00003a00002004417e6a200941026a2d" + "00003a00002004417d6a200941016a2d00003a00002004417c6a22042009" + "2d00003a00002009417c6a210920072004490d000b0b2007200220056b22" + "09417c7122026b2104410020026b210a02400240200320066a2203410371" + "0d00200420074f0d01200920016a417c6a210103402007417c6a22072001" + "2802003602002001417c6a210120042007490d000c020b0b200420074f0d" + "002003410374220241187121052003417c712208417c6a2101410020026b" + "41187121062008280200210203402007417c6a2207200220067420012802" + "002202200576723602002001417c6a210120042007490d000b0b20094103" + "7121022003200a6a21030c010b02400240200241104f0d00200021040c01" + "0b02402000410020006b410371220a6a220920004d0d00200a417f6a2105" + "20002104200121070240200a450d00200a21032000210420012107034020" + "0420072d00003a0000200741016a2107200441016a21042003417f6a2203" + "0d000b0b20054107490d000340200420072d00003a0000200441016a2007" + "41016a2d00003a0000200441026a200741026a2d00003a0000200441036a" + "200741036a2d00003a0000200441046a200741046a2d00003a0000200441" + "056a200741056a2d00003a0000200441066a200741066a2d00003a000020" + "0441076a200741076a2d00003a0000200741086a2107200441086a220420" + "09470d000b0b20092002200a6b2203417c7122056a210402400240200120" + "0a6a22074103710d00200920044f0d012007210103402009200128020036" + "0200200141046a2101200941046a22092004490d000c020b0b200920044f" + "0d0020074103742202411871210a2007417c71220841046a210141002002" + "6b411871210620082802002102034020092002200a762001280200220220" + "067472360200200141046a2101200941046a22092004490d000b0b200341" + "03712102200720056a21010b2004200420026a22094f0d012002417f6a21" + "03024020024107712207450d000340200420012d00003a0000200141016a" + "2101200441016a21042007417f6a22070d000b0b20034107490d01034020" + "0420012d00003a0000200441016a200141016a2d00003a0000200441026a" + "200141026a2d00003a0000200441036a200141036a2d00003a0000200441" + "046a200141046a2d00003a0000200441056a200141056a2d00003a000020" + "0441066a200141066a2d00003a0000200441076a200141076a2d00003a00" + "00200141086a2101200441086a22042009470d000c020b0b200420026b22" + "0720044f0d002002417f6a2109024020024103712201450d000340200441" + "7f6a22042003417f6a22032d00003a00002001417f6a22010d000b0b2009" + "4103490d002003417c6a210103402004417f6a200141036a2d00003a0000" + "2004417e6a200141026a2d00003a00002004417d6a200141016a2d00003a" + "00002004417c6a220420012d00003a00002001417c6a210120072004490d" + "000b0b20000b0e002000200120021088818080000b0bf2130100418080c0" + "000be8132f72757374632f34656231363132353065333430633866343866" + "3636653262393239656634613562656437633138312f6c6962726172792f" + "636f72652f7372632f697465722f7472616974732f6974657261746f722e" + "72730000100058000000b307000009000000000000000000000001000000" + "0800000063616c6c65642060526573756c743a3a756e7772617028296020" + "6f6e20616e2060457272602076616c75652f72757374632f346562313631" + "323530653334306338663438663636653262393239656634613562656437" + "633138312f6c6962726172792f616c6c6f632f7372632f736c6963652e72" + "73000000a30010004a000000a10000001900000054727946726f6d536c69" + "63654572726f720000000100000000000000d80210005e000000b4020000" + "090000002f72757374632f34656231363132353065333430633866343866" + "3636653262393239656634613562656437633138312f6c6962726172792f" + "636f72652f7372632f736c6963652f697465722e727300002c0110004e00" + "0000f6050000150000007372632f6c69622e727300008c0110000a000000" + "1f000000160000008c0110000a00000028000000310000008c0110000a00" + "000028000000440000004661696c656420746f20646573657269616c697a" + "6520766b8c0110000a0000002f000000310000008c0110000a0000002f00" + "0000440000008c0110000a000000620000001f0000008c0110000a000000" + "630000000a0000008c0110000a00000064000000170000008c0110000a00" + "0000650000000a0000008c0110000a00000066000000170000008c011000" + "0a000000670000000a0000004661696c656420746f20646573657269616c" + "697a6520614661696c656420746f20646573657269616c697a6520624661" + "696c656420746f20646573657269616c697a652063496e76616c69642062" + "7974657320666f72205363616c61726361706163697479206f766572666c" + "6f770000bd021000110000002f686f6d652f6f706964736b6f706e79692f" + "2e636172676f2f72656769737472792f7372632f696e6465782e63726174" + "65732e696f2d313934396366386336623562353537662f737562746c652d" + "322e362e312f7372632f6c69622e72730000000000000400000004000000" + "0900000001000000d80210005e000000bd0200000900000000000000fdff" + "02000000097602000cc40b00f4ebba58c7535798485f455752705358ce77" + "6dec56a2971a075c93e480fac35ef6154617341c341fdff4f104d109a6e6" + "760ad5b6954c6c47e58dc0839d93a988eb672d9519b5853e799aaae3ca92" + "e58f9811abeaffffffbf7feeffff54acffffaa07893dac3da834ccd9af44" + "e13ce1d21dd935ebd290ede9c692a6f95f8e7a448006a9aafffffffffeb9" + "ffff53b1feffab1e24f6b0f6a0d23067bf1285f3844b7764d7ac4b43b6a7" + "1b4b9ae67f39ea11011aaaeaffffffbf7feeffff54acffffaa07893dac3d" + "a834ccd9af44e13ce1d21dd935ebd290ede9c692a6f95f8e7a44800655d5" + "ffffff7fffdcffffa958ffff550f127b587b506998b35f89c279c2a53bb2" + "6bd6a521dbd38d254df3bf1cf588000df3ff0c00000027aa0a0034fc3200" + "cc537f800a6b7ae98f47d724bae6be7ed3b12fab78bf3b73c98e7ede833d" + "5145d609e8648a791b36f1302a5ace7eabddb8f3f77715c63acaa8169b02" + "fd74f82f6ac26e1c706066b7363660611b24aba41b05f3ff0c00000027aa" + "0a0034fc3200cc537f800a6b7ae98f47d724bae6be7ed3b12fab78bf3b73" + "c98e7ede833d5145d609f3ff0c00000027aa0a0034fc3200cc537f800a6b" + "7ae98f47d724bae6be7ed3b12fab78bf3b73c98e7ede833d5145d6092e55" + "270000007644200048439a00b8dc598b6e4acee97e6fc65ba9c0b73003b1" + "b7541efbfcb14061e1b40b7f09be81032e55270000007644200048439a00" + "b8dc598b6e4acee97e6fc65ba9c0b73003b1b7541efbfcb14061e1b40b7f" + "09be81032f686f6d652f6f706964736b6f706e79692f2e636172676f2f72" + "656769737472792f7372632f696e6465782e6372617465732e696f2d3139" + "34396366386336623562353537662f626c7331325f3338312d302e382e30" + "2f7372632f70616972696e67732e72730000a00510006600000016020000" + "1500000044000000a0051000660000001b02000009000000a00510006600" + "0000050200001d000000a005100066000000090200001d000000a0051000" + "660000003802000032000000a00510006600000044020000320000002969" + "6e646578206f7574206f6620626f756e64733a20746865206c656e206973" + "20206275742074686520696e64657820697320006d061000200000008d06" + "1000120000000000000004000000040000000a0000003d3d617373657274" + "696f6e20606c6566742020726967687460206661696c65640a20206c6566" + "743a200a2072696768743a200000c206100010000000d206100017000000" + "e90610000900000020726967687460206661696c65643a200a20206c6566" + "743a20000000c2061000100000000c071000100000001c07100009000000" + "e9061000090000003a200000010000000000000048071000020000000000" + "00000c000000040000000b0000000c0000000d000000202020202c0a2828" + "0a3078303030313032303330343035303630373038303931303131313231" + "333134313531363137313831393230323132323233323432353236323732" + "383239333033313332333333343335333633373338333934303431343234" + "333434343534363437343834393530353135323533353435353536353735" + "383539363036313632363336343635363636373638363937303731373237" + "333734373537363737373837393830383138323833383438353836383738" + "3838393930393139323933393439353936393739383939617474656d7074" + "20746f20646976696465206279207a65726f4708100019000000206f7574" + "206f662072616e676520666f7220736c696365206f66206c656e67746820" + "72616e676520656e6420696e6465782000008a0810001000000068081000" + "22000000736c69636520696e646578207374617274732061742020627574" + "20656e64732061742000ac08100016000000c20810000d00000028292f72" + "757374632f34656231363132353065333430633866343866363665326239" + "3239656634613562656437633138312f6c6962726172792f616c6c6f632f" + "7372632f7261775f7665632e72730000e20810004c000000280200001100" + "00002f727573742f646570732f646c6d616c6c6f632d302e322e372f7372" + "632f646c6d616c6c6f632e7273617373657274696f6e206661696c65643a" + "207073697a65203e3d2073697a65202b206d696e5f6f7665726865616400" + "4009100029000000a804000009000000617373657274696f6e206661696c" + "65643a207073697a65203c3d2073697a65202b206d61785f6f7665726865" + "616400004009100029000000ae0400000d00000000c94e046e616d65000e" + "0d7761736d5f6c69622e7761736d01914e8a01008a015f5a4e3130325f24" + "4c5424636f72652e2e697465722e2e61646170746572732e2e6d61702e2e" + "4d6170244c5424492443244624475424247532302461732475323024636f" + "72652e2e697465722e2e7472616974732e2e6974657261746f722e2e4974" + "657261746f72244754243973697a655f68696e7431376833383630386236" + "62663263303736666145014c5f5a4e34636f72653970616e69636b696e67" + "313170616e69635f636f6e7374323370616e69635f636f6e73745f646976" + "5f62795f7a65726f3137683033346433623765633138373166373545024d" + "5f5a4e34636f726533707472343364726f705f696e5f706c616365244c54" + "247761736d5f6c69622e2e566572696679696e674b657924475424313768" + "393064303131346662343063613937644503475f5a4e35616c6c6f633772" + "61775f7665633230526177566563496e6e6572244c542441244754243130" + "6465616c6c6f636174653137683235303163353461663065323831336145" + "04505f5a4e34636f726533707472343664726f705f696e5f706c61636524" + "4c5424616c6c6f632e2e7665632e2e566563244c54247538244754242447" + "5424313768663462323737666433376462353031654505565f5a4e34636f" + "726533707472353264726f705f696e5f706c616365244c5424626c733132" + "5f3338312e2e70616972696e67732e2e4732507265706172656424475424" + "313768623964653634383231343939353539344506675f5a4e34636f7265" + "33707472363964726f705f696e5f706c616365244c5424616c6c6f632e2e" + "7665632e2e566563244c5424626c7331325f3338312e2e7363616c61722e" + "2e5363616c61722447542424475424313768376265333235646130373238" + "386634384507385f5a4e35616c6c6f63337665633136566563244c542454" + "244324412447542434707573683137686236356465366561306165303964" + "31374508435f5a4e35616c6c6f63377261775f7665633139526177566563" + "244c54245424432441244754243867726f775f6f6e653137686531306535" + "65303538376531393262664509495f5a4e35616c6c6f6335736c69636532" + "395f244c5424696d706c2475323024247535622454247535642424475424" + "36746f5f76656331376836333665656464383765653761373437450a4d5f" + "5a4e35616c6c6f63377261775f7665633230526177566563496e6e657224" + "4c542441244754243136776974685f63617061636974795f696e31376861" + "653336636161393636356566343833450b4b5f5a4e35616c6c6f63377261" + "775f7665633230526177566563496e6e6572244c54244124475424313467" + "726f775f616d6f7274697a65643137686439353064656131373163323030" + "3035450c335f5a4e35616c6c6f63377261775f766563313268616e646c65" + "5f6572726f7231376863613161646630343635323765396532450d0e5f5f" + "727573745f6465616c6c6f630e4c5f5a4e35616c6c6f63377261775f7665" + "633230526177566563496e6e6572244c5424412447542431357472795f61" + "6c6c6f636174655f696e3137686534626630623334333637646136646345" + "0f5e5f5a4e36355f244c5424626c7331325f3338312e2e67312e2e473141" + "6666696e65247532302461732475323024636f72652e2e6f70732e2e6172" + "6974682e2e4e656724475424336e65673137683434323138626332316532" + "65356663314510725f5a4e36395f244c5424626c7331325f3338312e2e66" + "702e2e4670247532302461732475323024737562746c652e2e436f6e6469" + "74696f6e616c6c7953656c65637461626c65244754243138636f6e646974" + "696f6e616c5f73656c656374313768386165306466613830666434313139" + "364511605f5a4e36375f244c5424636f72652e2e61727261792e2e547279" + "46726f6d536c6963654572726f72247532302461732475323024636f7265" + "2e2e666d742e2e44656275672447542433666d7431376863303634386262" + "31393264393231376545122e5f5a4e34636f726533666d7439466f726d61" + "747465723370616431376833316663303133336231396665333065451367" + "5f5a4e36385f244c5424636f72652e2e666d742e2e6275696c646572732e" + "2e50616441646170746572247532302461732475323024636f72652e2e66" + "6d742e2e5772697465244754243977726974655f73747231376834353537" + "3732653638643462343039364514385f5a4e36737562746c65313743744f" + "7074696f6e244c5424542447542436657870656374313768623863663632" + "323139313530313333334515495f5a4e34345f244c542424524624542475" + "32302461732475323024636f72652e2e666d742e2e446973706c61792447" + "542433666d74313768353633396538653836623831393165364516355f5a" + "4e34636f72653970616e69636b696e6731336173736572745f6661696c65" + "64313768393337633632373834633734396537664517385f5a4e36737562" + "746c65313743744f7074696f6e244c542454244754243665787065637431" + "3768633764316533383030323138386237654518705f5a4e38315f244c54" + "24616c6c6f632e2e7665632e2e566563244c542454244324412447542424" + "7532302461732475323024636f72652e2e6f70732e2e696e6465782e2e49" + "6e646578244c542449244754242447542435696e64657831376862376565" + "6135613738316438393239374519405f5a4e34636f726535736c69636535" + "696e6465783232736c6963655f696e6465785f6f726465725f6661696c31" + "376866663036393161306536326561633864451a425f5a4e34636f726535" + "736c69636535696e6465783234736c6963655f656e645f696e6465785f6c" + "656e5f6661696c31376861383936346133343065666132346537451b0861" + "6c6c6f636174651c13646573657269616c697a655f67315f7761736d1d32" + "5f5a4e34636f726536726573756c743133756e777261705f6661696c6564" + "31376861313838333239383461636266333830451e3e5f5a4e39626c7331" + "325f333831326731384731416666696e65313566726f6d5f636f6d707265" + "7373656431376832333963336331363436646339303436451f355f5a4e38" + "7761736d5f6c69623139646573657269616c697a655f67325f7761736d31" + "37683530336430613839336365653362666645203e5f5a4e39626c733132" + "5f333831326732384732416666696e65313566726f6d5f636f6d70726573" + "7365643137686333616566303334336638323663626245211462656c6c6d" + "616e5f67726f746831365f7465737422335f5a4e39626c7331325f333831" + "367363616c6172365363616c617233737562313768656363643066636134" + "373035653937364523285f5a4e36737562746c6539626c61636b5f626f78" + "313768633661663135363636663731396234384524305f5a4e34636f7265" + "3970616e69636b696e673970616e69635f666d7431376862393162616461" + "636536656538323837452585015f5a4e3130325f244c5424626c7331325f" + "3338312e2e67312e2e473150726f6a656374697665247532302461732475" + "323024636f72652e2e636f6e766572742e2e46726f6d244c542424524624" + "626c7331325f3338312e2e67312e2e4731416666696e6524475424244754" + "243466726f6d3137686634356430353636343237373335316445262e5f5a" + "4e39626c7331325f33383132667032467036696e76657274313768366335" + "3632643539653638646633633245272b5f5a4e39626c7331325f33383132" + "6670324670336d756c313768646666623336663036373139613633374528" + "365f5a4e39626c7331325f333831326731384731416666696e6538696465" + "6e746974793137686236366162643638326233626339356345292f5f5a4e" + "39626c7331325f3338313266703246703769735f7a65726f313768333962" + "31303634343730313433376536452a785f5a4e37355f244c5424626c7331" + "325f3338312e2e67312e2e4731416666696e652475323024617324753230" + "24737562746c652e2e436f6e646974696f6e616c6c7953656c6563746162" + "6c65244754243138636f6e646974696f6e616c5f73656c65637431376833" + "323735393935653930646636613863452b85015f5a4e3130325f244c5424" + "626c7331325f3338312e2e70616972696e67732e2e473250726570617265" + "64247532302461732475323024636f72652e2e636f6e766572742e2e4672" + "6f6d244c5424626c7331325f3338312e2e67322e2e4732416666696e6524" + "475424244754243466726f6d313768353930643863663565363536346465" + "66452c2f5f5a4e39626c7331325f33383134667031323446703132336f6e" + "6531376839346666616330666264306163343332452d90015f5a4e313033" + "5f244c5424626c7331325f3338312e2e70616972696e67732e2e6d756c74" + "695f6d696c6c65725f6c6f6f702e2e416464657224753230246173247532" + "3024626c7331325f3338312e2e70616972696e67732e2e4d696c6c65724c" + "6f6f70447269766572244754243133646f75626c696e675f737465703137" + "6833346536393232613038346336343933452e705f5a4e38315f244c5424" + "616c6c6f632e2e7665632e2e566563244c54245424432441244754242475" + "32302461732475323024636f72652e2e6f70732e2e696e6465782e2e496e" + "646578244c542449244754242447542435696e6465783137686539346538" + "6262303063326535366564452f2e5f5a4e39626c7331325f333831387061" + "6972696e677333656c6c3137683264393865303762336132336635313345" + "30745f5a4e37315f244c5424626c7331325f3338312e2e6670322e2e4670" + "32247532302461732475323024737562746c652e2e436f6e646974696f6e" + "616c6c7953656c65637461626c65244754243138636f6e646974696f6e61" + "6c5f73656c6563743137686366633738633362393036656661383945315a" + "5f5a4e36315f244c5424626c7331325f3338312e2e6670362e2e46703624" + "7532302461732475323024636f72652e2e6f70732e2e61726974682e2e4e" + "656724475424336e65673137686230666536353636326461326334343345" + "322b5f5a4e39626c7331325f333831326670324670336e65673137683861" + "363566633733316133386134393745332d5f5a4e39626c7331325f333831" + "3366703233467032336d756c313768326433373464346666306563343037" + "6245345a5f5a4e36315f244c5424626c7331325f3338312e2e6670362e2e" + "467036247532302461732475323024636f72652e2e6f70732e2e61726974" + "682e2e4d756c24475424336d756c31376865613934393735323931313764" + "3166634535305f5a4e39626c7331325f3338313366703633467036367371" + "756172653137683866633831663539663666313530643145363c5f5a4e39" + "626c7331325f333831336670363346703631376d756c5f62795f6e6f6e72" + "6573696475653137686432663865613131393236643732653945375a5f5a" + "4e36315f244c5424626c7331325f3338312e2e6670362e2e467036247532" + "302461732475323024636f72652e2e6f70732e2e61726974682e2e537562" + "24475424337375623137686137396663636566323762323631323445382b" + "5f5a4e39626c7331325f3338313266703246703373756231376865646439" + "32336439323032346633366445392b5f5a4e39626c7331325f3338313266" + "703246703361646431376863366562626430363731666432643965453a30" + "5f5a4e39626c7331325f3338313366703233467032367371756172653137" + "6865663238666434623836356230653732453b2d5f5a4e39626c7331325f" + "333831336670323346703233737562313768636330663365343532313765" + "61393964453c2d5f5a4e39626c7331325f33383133667032334670323361" + "646431376864363030363832376137333934646563453d2e5f5a4e39626c" + "7331325f3338313266703246703673717561726531376835616337663530" + "666666393136623065453e605f5a4e36375f244c542424524624626c7331" + "325f3338312e2e667031322e2e4670313224753230246173247532302463" + "6f72652e2e6f70732e2e61726974682e2e4d756c24475424336d756c3137" + "6863613137343239383666636366353565453f6a5f5a4e36395f244c5424" + "626c7331325f3338312e2e667031322e2e46703132247532302461732475" + "323024636f72652e2e6f70732e2e61726974682e2e4d756c41737369676e" + "2447542431306d756c5f61737369676e3137683037326534616130343436" + "63356334314540655f5a4e39626c7331325f3338313870616972696e6773" + "31364d696c6c65724c6f6f70526573756c74323066696e616c5f6578706f" + "6e656e74696174696f6e31376379636c6f746f6d69635f73717561726531" + "3768613463633461633966316338323538644541635f5a4e39626c733132" + "5f3338313870616972696e677331364d696c6c65724c6f6f70526573756c" + "74323066696e616c5f6578706f6e656e74696174696f6e31356379636f6c" + "6f746f6d69635f6578703137686166636437313637356662666432373645" + "425d5f5a4e36325f244c5424626c7331325f3338312e2e6670322e2e4670" + "32247532302461732475323024737562746c652e2e436f6e7374616e7454" + "696d654571244754243563745f6571313768316264323735363036643361" + "6461366445435a5f5a4e36315f244c5424626c7331325f3338312e2e6670" + "362e2e467036247532302461732475323024636f72652e2e6f70732e2e61" + "726974682e2e416464244754243361646431376835343330336164316564" + "646333613837454491015f5a4e3131345f244c5424636f72652e2e697465" + "722e2e61646170746572732e2e666c617474656e2e2e466c61744d617024" + "4c542449244324552443244624475424247532302461732475323024636f" + "72652e2e697465722e2e7472616974732e2e6974657261746f722e2e4974" + "657261746f7224475424346e657874313768633964373737363930666232" + "373033334545385f5a4e34636f7265336f70733866756e6374696f6e3546" + "6e4d75743863616c6c5f6d75743137686638313366653737616237633761" + "35634546395f5a4e39626c7331325f3338313267313132473150726f6a65" + "637469766536646f75626c65313768386366636435343461313633326664" + "384547365f5a4e39626c7331325f3338313267313132473150726f6a6563" + "74697665336164643137686338666437656633383137383263636145487c" + "5f5a4e37395f244c5424626c7331325f3338312e2e67312e2e473150726f" + "6a656374697665247532302461732475323024737562746c652e2e436f6e" + "646974696f6e616c6c7953656c65637461626c65244754243138636f6e64" + "6974696f6e616c5f73656c65637431376839346663383463303336386533" + "3262334549415f5a4e38646c6d616c6c6f6338646c6d616c6c6f63313744" + "6c6d616c6c6f63244c542441244754243466726565313768623937643238" + "61316165313165356635454a2c5f5a4e34636f72653970616e69636b696e" + "673570616e696331376832323065356136376635653365303666454b0e5f" + "5f727573745f7265616c6c6f634c4a5f5a4e38646c6d616c6c6f6338646c" + "6d616c6c6f633137446c6d616c6c6f63244c542441244754243132756e6c" + "696e6b5f6368756e6b31376831623634356162376339333032303939454d" + "4b5f5a4e38646c6d616c6c6f6338646c6d616c6c6f633137446c6d616c6c" + "6f63244c542441244754243133646973706f73655f6368756e6b31376832" + "633732313930393066616265323362454e435f5a4e38646c6d616c6c6f63" + "38646c6d616c6c6f633137446c6d616c6c6f63244c54244124475424366d" + "616c6c6f6331376863663263663139323661376530646165454f385f5a4e" + "35616c6c6f63377261775f766563313763617061636974795f6f76657266" + "6c6f7731376863393936333961626361313337633131455085015f5a4e31" + "30325f244c5424636f72652e2e697465722e2e61646170746572732e2e6d" + "61702e2e4d6170244c542449244324462447542424753230246173247532" + "3024636f72652e2e697465722e2e7472616974732e2e6974657261746f72" + "2e2e4974657261746f7224475424346e6578743137683161356136633566" + "303263666237373445514d5f5a4e34365f244c5424753634247532302461" + "732475323024737562746c652e2e436f6e7374616e7454696d6545712447" + "54243563745f657131376839613065366130383065643661303532455253" + "5f5a4e35345f244c5424737562746c652e2e43686f696365247532302461" + "732475323024636f72652e2e6f70732e2e6269742e2e4e6f742447542433" + "6e6f743137686532353261643837343163616538663445533b5f5a4e3463" + "6f72653970616e69636b696e6731396173736572745f6661696c65645f69" + "6e6e6572313768363939386636356530343630623966324554475f5a4e34" + "325f244c54242452462454247532302461732475323024636f72652e2e66" + "6d742e2e44656275672447542433666d7431376866396562386538303434" + "3436393737334555385f5a4e34636f726533666d7439466f726d61747465" + "7231327061645f696e74656772616c313768336538303336383966363939" + "303466334556335f5a4e39626c7331325f33383132667032467031307375" + "6274726163745f7031376833353337643137643839306564373430455736" + "5f5a4e35616c6c6f6335616c6c6f6336476c6f62616c3130616c6c6f635f" + "696d706c313768636263383565313966363066396565314558435f5a4e35" + "616c6c6f63377261775f7665633139526177566563244c54245424432441" + "244754243867726f775f6f6e653137683761366133613131343862316565" + "66624559785f5a4e37355f244c5424626c7331325f3338312e2e67322e2e" + "4732416666696e65247532302461732475323024737562746c652e2e436f" + "6e646974696f6e616c6c7953656c65637461626c65244754243138636f6e" + "646974696f6e616c5f73656c656374313768346631633532376163323663" + "39393332455a7a5f5a4e37375f244c5424737562746c652e2e43744f7074" + "696f6e244c54245424475424247532302461732475323024737562746c65" + "2e2e436f6e646974696f6e616c6c7953656c65637461626c652447542431" + "38636f6e646974696f6e616c5f73656c6563743137686230353564346638" + "6331363261313862455b5b5f5a4e36305f244c5424626c7331325f333831" + "2e2e66702e2e4670247532302461732475323024737562746c652e2e436f" + "6e7374616e7454696d654571244754243563745f65713137683764613737" + "3038613961336631623237455c335f5a4e39626c7331325f333831326670" + "324670313066726f6d5f6279746573313768663632643265653863383835" + "61616633455d665f5a4e36355f244c5424626c7331325f3338312e2e6670" + "2e2e4670247532302461732475323024636f72652e2e6f70732e2e617269" + "74682e2e4d756c41737369676e2447542431306d756c5f61737369676e31" + "376862613864393933386331336334313962455e425f5a4e39626c733132" + "5f33383132667032467032356c657869636f67726170686963616c6c795f" + "6c61726765737431376864623239383362653765626662373630455f345f" + "5a4e39626c7331325f3338313266703246703131706f775f76617274696d" + "65313768386339643861353637336531663765654560315f5a4e39626c73" + "31325f33383133667032334670323769735f7a65726f3137683232633162" + "33626231383039373337664561385f5a4e39626c7331325f333831326670" + "324670313573756d5f6f665f70726f647563747331376864373831613962" + "66366162336638386645622d5f5a4e39626c7331325f3338313366703233" + "467032336e6567313768336535623432323139303537623839334563365f" + "5a4e39626c7331325f33383133667032334670323131706f775f76617274" + "696d653137683839356266623030643732663461646145643b5f5a4e3962" + "6c7331325f3338313267313132473150726f6a656374697665386d756c5f" + "62795f78313768313830336335636330383333313036354565665f5a4e37" + "335f244c542424524624626c7331325f3338312e2e67312e2e473150726f" + "6a656374697665247532302461732475323024636f72652e2e6f70732e2e" + "61726974682e2e4e656724475424336e6567313768363961333962383136" + "613036626237614566455f5a4e34636f7265346974657238616461707465" + "727337666c617474656e3137616e645f7468656e5f6f725f636c65617231" + "3768373932316661373530366638613637624567365f5a4e39626c733132" + "5f333831326732384732416666696e65386964656e746974793137683532" + "3261303037353662633832613639456885015f5a4e3130325f244c542462" + "6c7331325f3338312e2e67322e2e473250726f6a65637469766524753230" + "2461732475323024636f72652e2e636f6e766572742e2e46726f6d244c54" + "2424524624626c7331325f3338312e2e67322e2e4732416666696e652447" + "5424244754243466726f6d31376831393034396666373534383632623533" + "4569335f5a4e39626c7331325f3338313366703633467036396d756c5f62" + "795f303131376837316231356266356135313961376133456a385f5a4e39" + "626c7331325f333831326670324670313573756d5f6f665f70726f647563" + "747331376862306665663033383436356461336561456b5e5f5a4e39626c" + "7331325f3338313870616972696e677331364d696c6c65724c6f6f705265" + "73756c74323066696e616c5f6578706f6e656e74696174696f6e31306670" + "345f73717561726531376835333530613232303537323261303037456c68" + "5f5a4e36375f244c5424626c7331325f3338312e2e6670322e2e46703224" + "7532302461732475323024636f72652e2e6f70732e2e61726974682e2e53" + "756241737369676e2447542431307375625f61737369676e313768656138" + "64663864303262303833343633456dd5015f5a4e3137325f244c5424244c" + "5424626c7331325f3338312e2e70616972696e67732e2e47325072657061" + "726564247532302461732475323024636f72652e2e636f6e766572742e2e" + "46726f6d244c5424626c7331325f3338312e2e67322e2e4732416666696e" + "6524475424244754242e2e66726f6d2e2e41646465722475323024617324" + "75323024626c7331325f3338312e2e70616972696e67732e2e4d696c6c65" + "724c6f6f70447269766572244754243133646f75626c696e675f73746570" + "31376833303230646632373566636537643064456e385f5a4e35616c6c6f" + "63337665633136566563244c542454244324412447542434707573683137" + "6836633466633030383766393064366561456f355f5a4e34636f72653970" + "616e69636b696e6731336173736572745f6661696c656431376838396134" + "30623862613963643736636345703a5f5a4e34636f72653970616e69636b" + "696e67313870616e69635f626f756e64735f636865636b31376835613339" + "3334316633393435306165354571625f5a4e34636f726533666d74336e75" + "6d33696d7035325f244c5424696d706c2475323024636f72652e2e666d74" + "2e2e446973706c61792475323024666f7224753230247533322447542433" + "666d74313768646131373032323936653330396138624572445f5a4e3463" + "6f726533666d74336e756d33696d7032315f244c5424696d706c24753230" + "2475333224475424345f666d743137686531613333633761616434313031" + "3465457311727573745f626567696e5f756e77696e6474465f5a4e34636f" + "726533666d7439466f726d617474657231327061645f696e74656772616c" + "313277726974655f70726566697831376865323164633232613535336139" + "3935324575535f5a4e34636f726535736c69636535696e6465783234736c" + "6963655f656e645f696e6465785f6c656e5f6661696c38646f5f70616e69" + "633772756e74696d65313768623465303239633465666136373431314576" + "475f5a4e34325f244c54242452462454247532302461732475323024636f" + "72652e2e666d742e2e44656275672447542433666d743137683763663234" + "64633163663734653663354577495f5a4e34345f244c5424245246245424" + "7532302461732475323024636f72652e2e666d742e2e446973706c617924" + "47542433666d74313768363963313766643162653433346236384578585f" + "5a4e35395f244c5424636f72652e2e666d742e2e417267756d656e747324" + "7532302461732475323024636f72652e2e666d742e2e446973706c617924" + "47542433666d74313768356530663632333530333933336330664579265f" + "5a4e34636f726533666d7435777269746531376862633530306361396130" + "663033323632457a695f5a4e36385f244c5424636f72652e2e666d742e2e" + "6275696c646572732e2e5061644164617074657224753230246173247532" + "3024636f72652e2e666d742e2e577269746524475424313077726974655f" + "6368617231376837323761393336343062616631636662457b305f5a4e34" + "636f726533666d743557726974653977726974655f666d74313768653264" + "32326663306535326231396336457c515f5a4e34636f726535736c696365" + "35696e6465783232736c6963655f696e6465785f6f726465725f6661696c" + "38646f5f70616e69633772756e74696d6531376836346563303433376262" + "666263656363457d475f5a4e34325f244c54242452462454247532302461" + "732475323024636f72652e2e666d742e2e44656275672447542433666d74" + "31376837396432393730376137363931633337457e375f5a4e34636f7265" + "3570616e6963313250616e69635061796c6f61643661735f737472313768" + "33653762626665396537333233373036457f3b5f5a4e337374643970616e" + "69636b696e673230727573745f70616e69635f776974685f686f6f6b3137" + "68396561303139313462356439323635394580010a727573745f70616e69" + "638101455f5a4e3373746433737973396261636b747261636532365f5f72" + "7573745f656e645f73686f72745f6261636b747261636531376865376239" + "323038656534343338376436458201585f5a4e337374643970616e69636b" + "696e673139626567696e5f70616e69635f68616e646c657232385f247537" + "62242475376224636c6f7375726524753764242475376424313768393666" + "3161333534313164393334366245830183015f5a4e39395f244c54247374" + "642e2e70616e69636b696e672e2e626567696e5f70616e69635f68616e64" + "6c65722e2e5374617469635374725061796c6f6164247532302461732475" + "323024636f72652e2e70616e69632e2e50616e69635061796c6f61642447" + "54243661735f737472313768653362376630636337353061633833394584" + "01505f5a4e38646c6d616c6c6f6338646c6d616c6c6f633137446c6d616c" + "6c6f63244c542441244754243138696e736572745f6c617267655f636875" + "6e6b31376866646432333135363766663933346634458501066d656d7365" + "748601066d656d6370798701085f5f6d756c7469338801365f5a4e313763" + "6f6d70696c65725f6275696c74696e73336d656d376d656d6d6f76653137" + "6830343030366431613866396435653532458901076d656d6d6f76650712" + "01000f5f5f737461636b5f706f696e746572090a0100072e726f64617461" + "004d0970726f64756365727302086c616e6775616765010452757374000c" + "70726f6365737365642d6279010572757374631d312e38352e3120283465" + "6231363132353020323032352d30332d31352900490f7461726765745f66" + "65617475726573042b0a6d756c746976616c75652b0f6d757461626c652d" + "676c6f62616c732b0f7265666572656e63652d74797065732b087369676e" + "2d657874"; + +extern std::string const sp1WasmHex = + "0061736d0100000001630f60027f7f0060037f7f7f0060027f7f017f6003" + "7f7f7f017f60017f0060047f7f7f7f0060017f017f60057f7f7f7f7f0060" + "047f7f7f7f017f6000017f60077f7e7e7e7e7e7e0060000060097f7e7e7e" + "7e7e7e7e7e0060037f7e7e0060047f7e7e7f000351500906010004010001" + "000000060100000001010107040800000000000102080202040101000505" + "00010502000a0b0c00010100000100000401040000010100000101000200" + "0100000107010202030d0e000405017001080805030100110619037f0141" + "8080c0000b7f0041b0abc0000b7f0041b0abc0000b073c04066d656d6f72" + "790200147370315f67726f746831365f766572696669657200000a5f5f64" + "6174615f656e6403010b5f5f686561705f626173650302090d010041010b" + "071c1f1e323429420a81c10950add60202537f2d7e230041c0206b220124" + "0041e8a5c0002d0000410247044041e8a5c00041e8a5c0002d0000220541" + "0120051b3a00000240200504400340024002400240200541016b0e030005" + "01020b034041e8a5c0002d000022054101460d000b02400240200541016b" + "0e03000601030b000b41a49bc000412641cc9bc0001011000b41a89ac000" + "410d41949bc0001011000b41e8a5c00041e8a5c0002d0000220541012005" + "1b3a000020050d000b0b41e8a5c00041023a000041e4a5c000418c033602" + "0041e0a5c00041e892c0003602000b0b41bda9c0002d00001a41e4a5c000" + "280200211241e0a5c000280200211f024002400240024002400240024002" + "400240024002400240024002400240024002400240024002400240024002" + "400240024002404184021001220a450d00200a41c1befe827c3600800220" + "0a42e5979c9b97e3c7eb897f3700f801200a42cbb091f7e585f1e3d30037" + "00f001200a4285cca8c2988cc0acd0003700e801200a42c29391f580c1f3" + "da093700e001200a42d1f9cfc9da8dc8bcb37f3700d801200a42c1a5a5db" + "99d68fcfc8003700d001200a42a4e6aeaa96968ae30c3700c801200a42bb" + "86f4fee5c1aa8eab7f3700c001200a42ecff83a2ceee9ae7173700b80120" + "0a429fc5d69be5fafb80763700b001200a42bcd1e08deea2cfa58b7f3700" + "a801200a42aeb3eac1cda3e3c0bf7f3700a001200a42e2d8abdbae8cd3ae" + "5c37009801200a42eafbbf9fa891deb20437009001200a42afd29dfa8281" + "ecce9f7f37008801200a42b799d9dcb883f8df3b37008001200a42b3c1c2" + "a8e0a2cbc0cc00370078200a4295af8cdda2f981d269370070200a42f4eb" + "86b4cfc69bc339370068200a42f8e5b7c0c1e199bff000370060200a42c1" + "e7c485b4aac3c28c7f370058200a42f3e7ec98bff992d83b370050200a42" + "e880deac81addbc8967f370048200a4288c5f6c6eba0ef9844370040200a" + "42bdb2cf80ada892e5ec00370038200a42f887b4d9f0accbdb4c37003020" + "0a42e1c6ffa3c2dec48dcb00370028200a42fc81d7948085c1fc2c370020" + "200a42f79d8ff3bcb283ece500370018200a42beb6d5a58deadbe2d90037" + "0010200a4291c09b97b2989bf3b97f370008200a4291ec82edf9a3afba48" + "37000041bda9c0002d00001a41e0001001221d450d00201d420037000020" + "1d4200370020201d41053a001f201d4200370040201d41053a003f201d41" + "083a005f201d41176a4200370000201d41106a4200370000201d41086a42" + "00370000201d41286a4200370000201d41306a4200370000201d41376a42" + "00370000201d41c8006a4200370000201d41d0006a4200370000201d41d7" + "006a420037000041bda9c0002d00001a41c20010012205450d0020054180" + "80c00041c200104c2152200141a00f6a201f20121002024020012802a00f" + "200a280000470d002001418280c4003602e01c2001410036029c03200142" + "c080808020370294032001205241026a360290032001200141e01c6a3602" + "a003200141106a20014190036a100320012d0010044020012d0011210502" + "4020012802a003280200418280c400470d00200128029403450d00200128" + "029803450d040b41bda9c0002d00001a410810012202450d02200141d000" + "6a2116200a41e4016a2109200a41c4016a2122200a41a4016a2120200220" + "053a0000200141013602a80c200120023602a40c200141083602a00c2001" + "41b00f6a200141a0036a280200360200200141a80f6a20014198036a2902" + "0037030020012001290290033703a00f4101210503400240200141086a20" + "0141a00f6a100320012d0008450d0020012d0009210620012802a00c2005" + "460440024020012802b00f280200418280c400470d0020012802a40f450d" + "0020012802a80f450d070b230041206b220f240002404108200141a00c6a" + "220e280200220c4101742208200541016a220220022008491b2202200241" + "084d1b220241004e047f200f200c047f200f200c36021c200f200e280204" + "36021441010541000b360218200f41086a41012002200f41146a1028200f" + "2802084101470d01200f2802101a200f28020c0541000b41c096c0001019" + "000b200f28020c210c200e2002360200200e200c360204200f41206a2400" + "20012802a40c21020b200220056a20063a00002001200541016a22053602" + "a80c0c010b0b20012802a00c210220012802a40c210620012802e01c4182" + "80c4004704402002450d02200641046b2802002205417871221241044108" + "200541037122051b20026a490d05200541002012200241276a4b1b0d0620" + "0610040c020b2002418080808078460d0102400240024002402005412046" + "0440200141a80f6a2205200641176a290000370300200141b00f6a222320" + "06411f6a2d00003a00002001200629000f3703a00f200628000b21242006" + "28000721262006280003213520062d0002212d20062d0001214720062d00" + "00214820020440200641046b2802002208417871220c4104410820084103" + "7122081b20026a490d0c20084100200c200241276a4b1b0d0d200610040b" + "200141206a22062005290300370300200141286a220520232d00003a0000" + "200120012903a00f370318200141f0006a201d41e0001002200141c7006a" + "2006290300370000200141cf006a20052d00003a0000201641086a200141" + "f8006a290000370000201641106a20014180016a29000037000020164118" + "6a20014188016a290000370000200120012d0070411f713a007020162001" + "2900703700002001202436003b2001202636003720012035360033200120" + "2d3a0032200120473a0031200120483a00302001200129031837003f200a" + "290014225742388620574280fe0383422886842057428080fc0783421886" + "205742808080f80f834208868484205742088842808080f80f8320574218" + "88428080fc07838420574228884280fe03832057423888848484215e200a" + "411c6a290000225742388620574280fe0383422886842057428080fc0783" + "421886205742808080f80f834208868484205742088842808080f80f8320" + "57421888428080fc07838420574228884280fe0383205742388884848421" + "65417f200a290004225742b0c8b99297bc8cd02985200a410c6a29000022" + "5842b8a195b29bb0a0acdd008584420052205842388620584280fe038342" + "2886842058428080fc0783421886205842808080f80f8342088684842058" + "42088842808080f80f832058421888428080fc07838420584228884280fe" + "03832058423888848484225842ddb0858ce8b691a8b87f54205742388620" + "574280fe0383422886842057428080fc0783421886205742808080f80f83" + "4208868484205742088842808080f80f832057421888428080fc07838420" + "574228884280fe03832057423888848484225742a9c0c689aece93b23054" + "205742a9c0c689aece93b230511b1b2205417f470440200541ff01710d07" + "206542c6faf3c3ed82a3903c56205e428d95c7c396d2dac0977f56205e42" + "8d95c7c396d2dac0977f511b0d070b200120583703b018200120653703a0" + "18200120573703b8182001205e3703a818200a2900342257423886205742" + "80fe0383422886842057428080fc0783421886205742808080f80f834208" + "868484205742088842808080f80f832057421888428080fc078384205742" + "28884280fe03832057423888848484215e200a413c6a2900002257423886" + "20574280fe0383422886842057428080fc0783421886205742808080f80f" + "834208868484205742088842808080f80f832057421888428080fc078384" + "20574228884280fe038320574238888484842165417f200a290024225742" + "b0c8b99297bc8cd02985200a412c6a290000225842b8a195b29bb0a0acdd" + "008584420052205842388620584280fe0383422886842058428080fc0783" + "421886205842808080f80f834208868484205842088842808080f80f8320" + "58421888428080fc07838420584228884280fe0383205842388884848422" + "5842ddb0858ce8b691a8b87f54205742388620574280fe03834228868420" + "57428080fc0783421886205742808080f80f834208868484205742088842" + "808080f80f832057421888428080fc07838420574228884280fe03832057" + "423888848484225742a9c0c689aece93b23054205742a9c0c689aece93b2" + "30511b1b2205417f470440200541ff01710d07206542c6faf3c3ed82a390" + "3c56205e428d95c7c396d2dac0977f56205e428d95c7c396d2dac0977f51" + "1b0d070b200120583703d01a200120653703c01a200120573703d81a2001" + "205e3703c81a200141e0066a200141a0186a200141c01a6a100520012d00" + "e0060d06200141e50c6a2205200141a8076a290300370000200141dd0c6a" + "2206200141a0076a290300370000200141d50c6a220220014198076a2903" + "00370000200141cd0c6a222320014190076a290300370000200141c50c6a" + "222420014188076a290300370000200141bd0c6a222620014180076a2903" + "00370000200141b50c6a2235200141f8066a290300370000200120012903" + "f0063700ad0c200141a51d6a222d20052900003700002001419d1d6a2205" + "2006290000370000200141951d6a220620022900003700002001418d1d6a" + "22022023290000370000200141851d6a22232024290000370000200141fd" + "1c6a22242026290000370000200141f51c6a222620352900003700002001" + "20012900ad0c3700ed1c200141d80a6a202d290000370300200141d00a6a" + "2005290000370300200141c80a6a2006290000370300200141c00a6a2002" + "290000370300200141b80a6a2023290000370300200141b00a6a20242900" + "00370300200120262900003703a80a200120012900ed1c3703a00a200a29" + "0054225742388620574280fe0383422886842057428080fc078342188620" + "5742808080f80f834208868484205742088842808080f80f832057421888" + "428080fc07838420574228884280fe038320574238888484842165200a41" + "dc006a290000225742388620574280fe0383422886842057428080fc0783" + "421886205742808080f80f834208868484205742088842808080f80f8320" + "57421888428080fc07838420574228884280fe0383205742388884848421" + "6a417f200a290044225742b0c8b99297bc8cd02985200a41cc006a290000" + "225842b8a195b29bb0a0acdd008584420052205842388620584280fe0383" + "422886842058428080fc0783421886205842808080f80f83420886848420" + "5842088842808080f80f832058421888428080fc07838420584228884280" + "fe03832058423888848484226242ddb0858ce8b691a8b87f542057423886" + "20574280fe0383422886842057428080fc0783421886205742808080f80f" + "834208868484205742088842808080f80f832057421888428080fc078384" + "20574228884280fe03832057423888848484225e42a9c0c689aece93b230" + "54205e42a9c0c689aece93b230511b1b2205417f470440200541ff01710d" + "07206a42c6faf3c3ed82a3903c562065428d95c7c396d2dac0977f562065" + "428d95c7c396d2dac0977f511b0d070b200a290074225742388620574280" + "fe0383422886842057428080fc0783421886205742808080f80f83420886" + "8484205742088842808080f80f832057421888428080fc07838420574228" + "884280fe03832057423888848484215a200a41fc006a2900002257423886" + "20574280fe0383422886842057428080fc0783421886205742808080f80f" + "834208868484205742088842808080f80f832057421888428080fc078384" + "20574228884280fe03832057423888848484215c417f200a290064225742" + "b0c8b99297bc8cd02985200a41ec006a290000225842b8a195b29bb0a0ac" + "dd008584420052205842388620584280fe0383422886842058428080fc07" + "83421886205842808080f80f834208868484205842088842808080f80f83" + "2058421888428080fc07838420584228884280fe03832058423888848484" + "225942ddb0858ce8b691a8b87f54205742388620574280fe038342288684" + "2057428080fc0783421886205742808080f80f8342088684842057420888" + "42808080f80f832057421888428080fc07838420574228884280fe038320" + "57423888848484225442a9c0c689aece93b23054205442a9c0c689aece93" + "b230511b1b2205417f470440200541ff01710d07205c42c6faf3c3ed82a3" + "903c56205a428d95c7c396d2dac0977f56205a428d95c7c396d2dac0977f" + "511b0d070b200a29009401225742388620574280fe038342288684205742" + "8080fc0783421886205742808080f80f8342088684842057420888428080" + "80f80f832057421888428080fc07838420574228884280fe038320574238" + "88848484215b200a419c016a290000225742388620574280fe0383422886" + "842057428080fc0783421886205742808080f80f83420886848420574208" + "8842808080f80f832057421888428080fc07838420574228884280fe0383" + "20574238888484842161417f200a29008401225742b0c8b99297bc8cd029" + "85200a418c016a290000225842b8a195b29bb0a0acdd0085844200522058" + "42388620584280fe0383422886842058428080fc07834218862058428080" + "80f80f834208868484205842088842808080f80f832058421888428080fc" + "07838420584228884280fe03832058423888848484225842ddb0858ce8b6" + "91a8b87f54205742388620574280fe0383422886842057428080fc078342" + "1886205742808080f80f834208868484205742088842808080f80f832057" + "421888428080fc07838420574228884280fe038320574238888484842257" + "42a9c0c689aece93b23054205742a9c0c689aece93b230511b1b2205417f" + "470440200541ff01710d07206142c6faf3c3ed82a3903c56205b428d95c7" + "c396d2dac0977f56205b428d95c7c396d2dac0977f511b0d070b200141e0" + "066a2020100620012d00e0060d06200141f51c6a200141f8066a29030022" + "53370000200141b80b6a20014188076a290300370300200141b00b6a2001" + "4180076a290300370300200120012903f0063703a00b200120533703a80b" + "200120623703900b2001206a3703800b200120593703f00a2001205c3703" + "e00a2001205e3703980b200120653703880b200120543703f80a2001205a" + "3703e80a200120573703d80b200120583703d00b2001205b3703c80b2001" + "20613703c00b200141e0066a200141e00a6a200141a00b6a100720012d00" + "e0060d06200141801f6a200141ad186a200141cd1a6a200141ee1c6a2001" + "41ae0c6a200141f0066a418001104c418001104c418001104c418001104c" + "418001104c1a200141e0066a2022100620012d00e0060d06200141b5186a" + "2205200141f8066a22062903002257370000200141f80a6a20014188076a" + "2202290300370300200141f00a6a20014180076a22202903003703002001" + "20012903f0063703e00a200120573703e80a200141e0066a200910062001" + "2d00e0060d06200520062903002257370000200141b80b6a200229030037" + "0300200141b00b6a2020290300370300200120012903f0063703a00b2001" + "20573703a80b200141e0066a200141e00a6a200141a00b6a100520012d00" + "e0060d06200141e50c6a2205200141a8076a290300370000200141dd0c6a" + "2206200141a0076a290300370000200141d50c6a220220014198076a2903" + "00370000200141cd0c6a222020014190076a290300370000200141c50c6a" + "222220014188076a290300370000200141bd0c6a220920014180076a2903" + "00370000200141b50c6a2223200141f8066a290300370000200120012903" + "f0063700ad0c200141a51d6a222420052900003700002001419d1d6a2205" + "2006290000370000200141951d6a220620022900003700002001418d1d6a" + "22022020290000370000200141851d6a22202022290000370000200141fd" + "1c6a22222009290000370000200141f51c6a220920232900003700002001" + "20012900ad0c3700ed1c200141d8086a2024290000370300200141d0086a" + "2005290000370300200141c8086a2006290000370300200141c0086a2002" + "290000370300200141b8086a2020290000370300200141b0086a20222900" + "00370300200141a8086a2009290000370300200120012900ed1c3703a008" + "200141e8076a20012903a80a370300200141f0076a200141b00a6a290300" + "370300200141f8076a200141b80a6a29030037030020014180086a200141" + "c00a6a29030037030020014188086a200141c80a6a290300370300200141" + "90086a200141d00a6a29030037030020014198086a200141d80a6a290300" + "370300200120012903a00a3703e007200141e0066a200141801f6a418001" + "104c1a20014190016a2001419d036a200141ad0f6a200141e0066a418002" + "104c418002104c418002104c1a2012411f4d0d0f200141a00f6a201f1008" + "20012d00a00f0d06200141e50c6a200141e80f6a29030022573700002001" + "41dd0c6a200141e00f6a2903002258370000200141d50c6a200141d80f6a" + "290300225e370000200141cd0c6a200141d00f6a29030022653700002001" + "41f00b6a200141c00f6a290300370300200141f80b6a200141c80f6a2903" + "00370300200141800c6a2065370300200141880c6a205e37030020014190" + "0c6a2058370300200141980c6a2057370300200120012903b00f3703e00b" + "2001200141b80f6a2903003703e80b201241ff004d0d10200141a00f6a20" + "1f41406b100920012d00a00f0d06200141a0186a200141ad0c6a200141b0" + "0f6a418001104c418001104c1a201241bf014d0d11200141a00f6a201f41" + "80016a100920012d00a00f0d06200141c01a6a200141ad0c6a200141b00f" + "6a418001104c418001104c1a2012419f024d0d12200141a00f6a201f41e0" + "016a100920012d00a00f0d06200141e01c6a200141ad0c6a200141b00f6a" + "418001104c418001104c1a201241a002460d13201241a102460d14201241" + "a2024d0d15201241a302460d16201f2d00a0022105201f2d00a102210620" + "1f2d00a3022102201f2d00a202212041002126200141003602a80b200142" + "8080808080023702a00b2005200641087472202041107472200241187472" + "220504404101200541187420054180fe03714108747220054108764180fe" + "0371200541187672722205200541014d1b210c200141ad0c6a2105200141" + "b00f6a210641a40221024100212241102108410021200340202041f6ffff" + "3f460d19200241206a220920124b0d1a200141a00f6a2002201f6a100820" + "012d00a00f0d0320052006290000370000200541386a2202200641386a29" + "0000370000200541306a2223200641306a290000370000200541286a2224" + "200641286a290000370000200541206a2226200641206a29000037000020" + "0541186a2235200641186a290000370000200541106a222d200641106a29" + "0000370000200541086a2247200641086a290000370000200141901f6a22" + "48202d290000370300200141981f6a222d2035290000370300200141a01f" + "6a22352026290000370300200141a81f6a22262024290000370300200141" + "b01f6a22242023290000370300200141b81f6a2223200229000037030020" + "0120052900003703801f200120472900003703881f20012802a00b202046" + "044041002108230041206b2203240002400240200141a00b6a221b280200" + "220f417f460d00200f4101742202200f41016a220e2002200e4b1b220241" + "ffffff1f4b0d0041042002200241044d1b2202410674220e41f0ffffff07" + "4b0d002003200f047f2003200f41067436021c2003201b28020436021441" + "100541000b360218200341086a4110200e200341146a1028200328020841" + "01470d0120032802101a200328020c21080b200841dc90c0001019000b20" + "0328020c210f201b2002360200201b200f360204200341206a2400200128" + "02a40b21080b200820226a220220012903801f370300200241386a202329" + "0300370300200241306a2024290300370300200241286a20262903003703" + "00200241206a2035290300370300200241186a202d290300370300200241" + "106a2048290300370300200241086a20012903881f370300200120204101" + "6a22203602a80b202241406b212220092102200c2020470d000b20012802" + "a00b21260b20012902a40b216a200141a00c6a200141a0186a100a200141" + "a00d6a200141e01c6a418001104c1a200141a00e6a200141c01a6a418001" + "104c1a200141d6126a200141980c6a290300370100200141ce126a200141" + "900c6a290300370100200141c6126a200141880c6a290300370100200141" + "be126a200141800c6a290300370100200141b6126a200141f80b6a290300" + "370100200141ae126a200141f00b6a290300370100200141a6126a200129" + "03e80b370100200120012903e00b37019e1220012d00a00c210520012d00" + "a10c2106200141a00f6a200141a00c6a41027241fe02104c1a200141e006" + "6a200141a00f6a41be03104c1a2026418080808078460d0620014190036a" + "410272200141e0066a41be03104c1a200120263602d006200120063a0091" + "03200120053a0090034100210241bda9c0002d00001a2001206a3702d406" + "41c000100b2220450d07206a4220882262a72122206aa72135200141b00f" + "6a2105200141306a2106410021120340230041206b22092400200941186a" + "221b2006290000225342388620534280fe0383422886842053428080fc07" + "83421886205342808080f80f834208868484205342088842808080f80f83" + "2053421888428080fc07838420534228884280fe03832053423888848484" + "370300200941106a2208200641086a290000225342388620534280fe0383" + "422886842053428080fc0783421886205342808080f80f83420886848420" + "5342088842808080f80f832053421888428080fc07838420534228884280" + "fe0383205342388884848437030020092006290010225342388620534280" + "fe0383422886842053428080fc0783421886205342808080f80f83420886" + "8484205342088842808080f80f832053421888428080fc07838420534228" + "884280fe038320534238888484843703082009200641186a290000225342" + "388620534280fe0383422886842053428080fc0783421886205342808080" + "f80f834208868484205342088842808080f80f832053421888428080fc07" + "838420534228884280fe0383205342388884848437030020094201420042" + "0042004281808080bfb2fdf0c3004291e1e5cd8789fa9928102b200141a0" + "0f6a220c41003a0000200c41286a201b290300370300200c41206a200829" + "0300370300200c41186a2009290308370300200c20092903003703102009" + "41206a240020012d00a00f4101460d1a200141f8066a200541186a290300" + "2257370300200141f0066a200541106a2903002258370300200120052903" + "00225e3703e0062001200541086a29030022653703e80620202012410574" + "6a220641186a2057370300200641106a2058370300200641086a20653703" + "002006205e370300410121122002410171211f4101210220162106201f45" + "0d000b206a42ffffffffffffffff03560d1a2022410674220541f1ffffff" + "074f0d1a2005450d0341bda9c0002d00001a2005100b2206450d07200620" + "352005104c211220624203520d02206a428080808010540d042001419006" + "6a212d20014190056a214720014190046a2148200141f81a6a221f201241" + "386a290300370300200141f01a6a2216201241306a290300370300200141" + "e81a6a2222201241286a290300370300200141e01a6a2209201241206a29" + "0300370300200141d81a6a2223201241186a290300370300200141d01a6a" + "2224201241106a290300370300200120122903003703c01a200120124108" + "6a2903003703c81a2020210541c00021060340200141d80c6a201f290300" + "370300200141d00c6a2016290300370300200141c80c6a20222903003703" + "00200141c00c6a2009290300370300200141b80c6a202329030037030020" + "0141b00c6a2024290300370300200120012903c81a3703a80c2001200129" + "03c01a3703a00c200120053602e00c2001200620126a22023602e40c2001" + "41e01c6a21312002210c4100212e41002136230041a0046b220424002004" + "41306a212b20044180036a2137200441e0036a210f200441f0016a210e20" + "0441c0026a211b200441e0026a2108200441b0026a2149200441d0026a21" + "4a41ff012141034002402004204141ff0071104f2005204141037641f0ff" + "ffff01716a22422903002004290300832159204241086a29030020044108" + "6a29030083215302400240027f0240024002400240024020364101714504" + "4041002053205984500d061a200441e0006a200441206a29030037030020" + "0441e8006a200441286a290300370300200441f0006a202b290300370300" + "200441f8006a200441386a29030037030020044180016a200441406b2903" + "0037030020044188016a200441c8006a2903003703002004200429031037" + "035020042004290318370358202e0d010c030b202e450d0120044188026a" + "200441c8006a222e29030037030020044180026a200441406b2250290300" + "370300200441f8016a200441386a2203290300370300200e202b29030037" + "0300200441e8016a200441286a2236290300370300200441e0016a200441" + "206a2242290300370300200420042903183703d801200420042903103703" + "d001200441d8036a224b4200370300200441d0036a220242003703002004" + "42003703f803200442003703f003200442003703e803200442013703e003" + "200442003703c803200442003703c003024002400240200441d0016a2004" + "41c0036a104a450440200e200f104a450d010b204b420037030020024200" + "370300200442003703f803200442003703f003200442003703e803200442" + "013703e003200442003703c803200442003703c003027f0240200441d001" + "6a200441c0036a104a450440200e200f104a450d010b2049202b29030037" + "0300204941186a202b41186a290300370300204941106a202b41106a2903" + "00370300204941086a202b41086a290300370300200441a0026a20422903" + "00370300200441a8026a2036290300370300200420042903103703900220" + "0420042903183703980220082102204a0c010b204a4200370300200441a0" + "026a4200370300200441a8026a4200370300204a41086a4200370300204a" + "41106a4200370300204a41186a4200370300200442003703900220044200" + "37039802201b210220490b214b2002420037030820024200370300204b42" + "00370308204b4201370300200441c0036a20044190026a20044190026a10" + "40200441f0026a200441c0036a104120042802f002410171450d01200441" + "c8016a203741386a290300370300200441c0016a203741306a2903003703" + "00200441b8016a203741286a290300370300200441b0016a203741206a29" + "0300370300200441a8016a203741186a290300370300200441a0016a2037" + "41106a29030037030020042037290300370390012004203741086a290300" + "370398010c020b200441a0016a2042290300370300200441a8016a203629" + "0300370300200441b0016a202b290300370300200441b8016a2003290300" + "370300200441c0016a2050290300370300200441c8016a202e2903003703" + "00200420042903103703900120042004290318370398010c010b41c4a0c0" + "00412041e4a0c0001021000b2042200441a0016a29030037030020362004" + "41a8016a290300370300202b200441b0016a2903003703002003200441b8" + "016a2903003703002050200441c0016a290300370300202e200441c8016a" + "290300370300200420042903900137031020042004290398013703182053" + "205984500d04200441e0006a2042290300370300200441e8006a20362903" + "00370300200441f0006a202b290300370300200441f8006a200329030037" + "030020044180016a205029030037030020044188016a202e290300370300" + "20042004290310370350200420042903183703580b200441c0036a200441" + "d0006a200c100c0c020b20532059844200520d002041450d044101213641" + "00212e0c050b200441f8036a200c41386a290300370300200441f0036a20" + "0c41306a290300370300200441e8036a200c41286a290300370300200f20" + "0c41206a290300370300200441d8036a200c41186a290300370300200441" + "d0036a200c41106a2903003703002004200c2903003703c0032004200c41" + "086a2903003703c8030b200441c8006a200441f8036a2903003703002004" + "41406b200441f0036a290300370300200441386a200441e8036a29030037" + "0300202b200f290300370300200441286a200441d8036a29030037030020" + "0441206a200441d0036a290300370300200420042903c803370318200420" + "042903c0033703100b4101212e41010b213620410d01202e0d020b4184a1" + "c0001020000b204141016b21410c010b0b20312004290310370300203141" + "086a2004290318370300203141386a200441c8006a290300370300203141" + "306a200441406b290300370300203141286a200441386a29030037030020" + "3141206a200441306a290300370300203141186a200441286a2903003703" + "00203141106a200441206a290300370300200441a0046a2400200541206a" + "2105200141c01a6a200141a00c6a200141e01c6a100c200641406b220641" + "c001470d000b200141b00f6a2205200141c01a6a100d201241c001100e20" + "0141c01a6a200141ed066a200541e000104c41e000104c1a200141e0066a" + "20014190026a100d200141a0186a21024200215c42002154420021532001" + "41e0066a220541386a2903002161200541286a290300215b200529033021" + "592005290320215e027e200529034022652005290350226a84200541c800" + "6a2903002262200541d8006a290300225a84845004402059215c20612154" + "205b2153205e0c010b42002059205e84205b20618484500d001a427f4200" + "427f4200205e42788342c7faf3c3ed82a3903c561b225c205b205c56ad7d" + "205c205b7d225b42f3eab8bce9ada5bfe8007d2253205b54ad7c42017c22" + "5b20597d225442a4cffaf397c9eed7c7007d225c205454ad2059205b56ad" + "7d427f511b20617d42a9c0c689aece93b2307c215442c7faf3c3ed82a390" + "3c205e7d0b21612002206a370350200220653703402002205c3703302002" + "20613703202002205a370358200220623703482002205437033820022053" + "37032820022005290300370300200241186a200541186a29030037030020" + "0241106a200541106a290300370300200241086a200541086a2903003703" + "0020014180196a20014190016a100f200141a01b6a2047100f200141e01c" + "6a200141d0026a100d200141c01d6a2048100f200141e0066a202d100d20" + "0141801f6a20014190036a100f200141c0076a2108420021654200215b42" + "00215c42002153024002400240200141801f6a2202290380012002418801" + "6a290300844200520d0020022903900120024198016a290300844200520d" + "0020022903a001200241a8016a290300844200520d0020022903b0012002" + "41b8016a29030084500d010b200241f8006a2903002159200241e8006a29" + "0300215e2002290370215420022903602161200229035022582002290340" + "226a84200241d8006a290300225a200241c8006a29030022628484420052" + "0440427f4200427f4200206a42788342c7faf3c3ed82a3903c561b226520" + "62206556ad7d206520627d226542f3eab8bce9ada5bfe8007d2253206554" + "ad7c42017c225c20587d225b42a4cffaf397c9eed7c7007d2265205b54ad" + "2058205c56ad7d427f511b205a7d42a9c0c689aece93b2307c215c42c7fa" + "f3c3ed82a3903c206a7d215b0b420021584200216a420021624200215a20" + "542061842059205e84844200520440427f4200427f4200206142788342c7" + "faf3c3ed82a3903c561b22582058205e54ad7d2058205e7d225e42f3eab8" + "bce9ada5bfe8007d226a205e54ad7c42017c225e20547d225842a4cffaf3" + "97c9eed7c7007d2262205854ad2054205e56ad7d427f511b20597d42a9c0" + "c689aece93b2307c215a42c7faf3c3ed82a3903c20617d21580b20082002" + "4180016a22052903003703800120082002290300370300200841b8016a20" + "0541386a290300370300200841b0016a200541306a290300370300200841" + "a8016a200541286a290300370300200841a0016a200541206a2903003703" + "0020084198016a200541186a29030037030020084190016a200541106a29" + "030037030020084188016a200541086a290300370300200841086a200241" + "086a290300370300200841106a200241106a290300370300200841186a20" + "0241186a290300370300200841206a200241206a29030037030020084128" + "6a200241286a290300370300200841306a200241306a2903003703002008" + "41386a200241386a2903003703002008205a370378200820623703702008" + "206a370368200820583703602008205c3703582008206537035020082053" + "3703482008205b3703400c010b2008200241c001104c1a0b200141a00f6a" + "200141a0186a41a002104c1a200141c0116a200141c01a6a41a002104c1a" + "200141e0136a200141e01c6a41a002104c1a20014180166a200141e0066a" + "41a002104c1a200141a00c6a2131230041b0d1006b220024002000410036" + "023820004280808080800237023020004100360244200042808080808002" + "37023c41102133200041306a10362000280234223b200141a00f6a220341" + "e000104c1a20004101360238200341e0006a2102200028023c4504402000" + "413c6a1038200028024021330b2033200241c001104c1a200341a0026a21" + "022000410136024420002802304101460440200041306a10362000280234" + "213b0b203b41e0006a200241e000104c1a2000410236023820034180036a" + "2102200028023c41014604402000413c6a1038200028024021330b203341" + "c0016a200241c001104c1a200341c0046a21022000410236024420002802" + "304102460440200041306a10362000280234213b0b203b41c0016a200241" + "e000104c1a20004103360238200341a0056a2102200028023c4102460440" + "2000413c6a1038200028024021330b20334180036a200241c001104c1a20" + "0341e0066a21022000410336024420002802304103460440200041306a10" + "362000280234213b0b203b41a0026a200241e000104c1a20004104360238" + "200341c0076a2103200028023c41034604402000413c6a10382000280240" + "21330b203341c0046a200341c001104c1a20004104360244200041003602" + "502000428080808080023702482000410036025c20004280808080800237" + "025420004180046a2151200041e00d6a2104200041b0076a212c20004190" + "c1006a2143200041d0c0006a2128200041f0c0006a2144200041c00d6a21" + "0b200041d0286a2106200041d01f6a211820004180c7006a212b200041b0" + "c7006a2107200041c0c7006a213c200041f0c6006a2102200041800e6a21" + "2d200041903b6a213d200041f03a6a2127200041d03a6a213e200041f00d" + "6a213f200041b00d6a221041086a212e200041f8c6006a214c200041b8c7" + "006a214d20004188c7006a214e200041c8c7006a211220004198c7006a21" + "1f200041d8c7006a2122200041a8c7006a2123200041e8c7006a21244110" + "2138411021050340200041e0006a203b204f41e0006c6a22031041200041" + "b0016a2033204f41c0016c6a220d104502402000280260410171450d0020" + "002802b001410171450d00200041a00d6a2003104120002802a00d410171" + "45044041a4a3c0001020000b200041f8026a2211201041386a2903003703" + "00200041f0026a2213201041306a290300370300200041e8026a22092010" + "41286a290300370300200041e0026a2215201041206a2903003703002000" + "41d8026a220f201041186a290300370300200041d0026a2225201041106a" + "290300370300200020102903003703c0022000202e2903003703c8022000" + "280248203946044041002108230041206b220e240002400240200041c800" + "6a221b280200220c417f460d00200c4101742205200c41016a2216200520" + "164b1b220541ffffff1f4b0d0041042005200541044d1b22054106742216" + "41f0ffffff074b0d00200e200c047f200e200c41067436021c200e201b28" + "020436021441100541000b360218200e41086a2016200e41146a1037200e" + "2802084101470d01200e2802101a200e28020c21080b200841b4a3c00010" + "19000b200e28020c210c201b2005360200201b200c360204200e41206a24" + "00200028024c21050b200520394106746a220320002903c0023703002003" + "41386a2011290300370300200341306a2013290300370300200341286a20" + "09290300370300200341206a2015290300370300200341186a200f290300" + "370300200341106a2025290300370300200341086a20002903c802370300" + "2000203941016a2239360250200041a00d6a200d10450240024020002802" + "a00d4101710440200041b03a6a2010418001104c1a200041d80d6a222542" + "00370300200041d00d6a223a4200370300200041c80d6a22294200370300" + "200b4200370300200041b80d6a220d420037030020104200370300203f42" + "00370300203f41086a4200370300203f41106a4200370300203f41186a42" + "00370300203f41206a4200370300203f41286a4200370300200042003703" + "e80d200042013703e00d200042003703a80d200042003703a00d027f0240" + "0240200041b03a6a200041a00d6a104a0d00203e200b104a0d0020272004" + "104a0d00203d202d104a450d010b203c4200370300200220272903003703" + "00203c41086a4200370300203c41106a4200370300203c41186a42003703" + "00203c41206a4200370300203c41286a4200370300200241386a20274138" + "6a290300370300200241306a202741306a290300370300200241286a2027" + "41286a290300370300200241206a202741206a290300370300200241186a" + "202741186a290300370300200241106a202741106a290300370300200241" + "086a202741086a290300370300200041e8c6006a200041e83a6a29030037" + "0300200041e0c6006a200041e03a6a290300370300200041d8c6006a2000" + "41d83a6a290300370300200041d0c6006a203e290300370300200041c8c6" + "006a200041c83a6a290300370300200041c0c6006a200041c03a6a290300" + "370300200020002903b83a3703b846200020002903b03a3703b04620070c" + "010b200041c0c6006a4200370300200041c8c6006a4200370300200041d0" + "c6006a4200370300200041d8c6006a4200370300200041e0c6006a420037" + "0300200041e8c6006a4200370300200042003703b046200042003703b846" + "202b41f000104b1a20020b220342003703082003420137030041bda9c000" + "2d00001a41809901100b221e450d0141002109200041003602b819200020" + "1e3602b419200041e6003602b019200041b03d6a200041b03a6a100a4140" + "212a0340200041a00d6a200041b0c6006a2002102f200041c8c3006a2215" + "200d290300370300200041c0c3006a220f20102903003703002000200029" + "03a80d3703b843200020002903a00d3703b043200041b0c3006a42a4fdf9" + "e1b6c191889e7f42c6cae3a18ba9ade04b42aed88286b4db88945c4294a0" + "e38497e789991842c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b" + "200041a8076a2211200b41186a221b290300370300200041a0076a221320" + "0b41106a22342903003703002000200b41086a2240290300370398072000" + "200b2903003703900720004190076a42a4fdf9e1b6c191889e7f42c6cae3" + "a18ba9ade04b42aed88286b4db88945c4294a0e38497e789991842c7faf3" + "c3ed82a3903c428d95c7c396d2dac0977f102b200041c81f6a2015290300" + "370300200041c01f6a200f29030037030020182000290390073703002018" + "41086a200029039807370300201841106a2013290300370300201841186a" + "2011290300370300200020002903b8433703b81f200020002903b0433703" + "b01f200041e8346a2203200241386a290300370300200041e0346a200241" + "306a290300370300200041d8346a2232200241286a290300370300200041" + "d0346a200241206a290300370300200041c8346a220e200241186a290300" + "370300200041c0346a200241106a2903003703002000200241086a290300" + "3703b834200020022903003703b034200041b0346a20022002102f200041" + "e8376a2219200741386a290300370300200041e0376a200741306a290300" + "370300200041d8376a221a200741286a290300370300200041d0376a2007" + "41206a290300370300200041c8376a222f200741186a2903003703002000" + "41c0376a2230200741106a2903003703002000200741086a2903003703b8" + "37200020072903003703b037200041b0376a20072007102f20002903b837" + "226942018620002903b037226b423f88842155206b420186215402400240" + "027e203029030022664201862069423f8884225342ddb0858ce8b691a8b8" + "7f85202f290300227820787c2066423f887c225642a9c0c689aece93b230" + "8584500440205442c7faf3c3ed82a3903c542055428d95c7c396d2dac097" + "7f542055428d95c7c396d2dac0977f511b450d0242a9c0c689aece93b230" + "215642ddb0858ce8b691a8b87f0c010b205342deb0858ce8b691a8b87f54" + "205642a9c0c689aece93b23054205642a9c0c689aece93b230511b450d01" + "20530b215a2054215f205521580c010b205620532055205442c7faf3c3ed" + "82a3903c7d225f20545aad22547d225942f3eab8bce9ada5bfe8007c2258" + "205954ad2054205556ad7d7c2255205354ad205542a2cffaf397c9eed7c7" + "007c225a205554ad7c50ad7d42a9c0c689aece93b2307d21560b201a2903" + "00226742018620002903d037226f423f88842154206f4201862153024002" + "4020002903e037225e4201862067423f8884225942ddb0858ce8b691a8b8" + "7f852019290300227720777c205e423f887c225542a9c0c689aece93b230" + "8584500440205342c7faf3c3ed82a3903c542054428d95c7c396d2dac097" + "7f542054428d95c7c396d2dac0977f511b450d0142a9c0c689aece93b230" + "215542ddb0858ce8b691a8b87f21602053215b205421700c020b205942de" + "b0858ce8b691a8b87f54205542a9c0c689aece93b23054205542a9c0c689" + "aece93b230511b450d002053215b20542170205921600c010b2055205920" + "54205342c7faf3c3ed82a3903c7d225b20535aad22537d226042f3eab8bc" + "e9ada5bfe8007c2270206054ad2053205456ad7d7c2254205954ad205442" + "a2cffaf397c9eed7c7007c2260205454ad7c50ad7d42a9c0c689aece93b2" + "307d21550b02400240027e205a20667c225a205820697c2254206954ad20" + "54205f206b7c2259206b54ad7c2253205454ad7c7c225442ddb0858ce8b6" + "91a8b87f85205a206654ad2054205a54ad7c205620787c7c225642a9c0c6" + "89aece93b2308584500440205942c7faf3c3ed82a3903c542053428d95c7" + "c396d2dac0977f542053428d95c7c396d2dac0977f511b450d0242a9c0c6" + "89aece93b230215642ddb0858ce8b691a8b87f0c010b205442deb0858ce8" + "b691a8b87f54205642a9c0c689aece93b23054205642a9c0c689aece93b2" + "30511b450d0120540b215f205921582053215c0c010b2056205420532059" + "42c7faf3c3ed82a3903c7d225820595aad22597d225a42f3eab8bce9ada5" + "bfe8007c225c205a54ad2053205954ad7d7c2253205454ad205342a2cffa" + "f397c9eed7c7007c225f205354ad7c50ad7d42a9c0c689aece93b2307d21" + "560b02400240205e20607c225a206720707c2254206754ad2054205b206f" + "7c2259206f54ad7c2253205454ad7c7c225442ddb0858ce8b691a8b87f85" + "205a205e54ad2054205a54ad7c205520777c7c225542a9c0c689aece93b2" + "308584500440205942c7faf3c3ed82a3903c542053428d95c7c396d2dac0" + "977f542053428d95c7c396d2dac0977f511b450d0142a9c0c689aece93b2" + "30215542ddb0858ce8b691a8b87f21542059215a205321590c020b205442" + "deb0858ce8b691a8b87f54205542a9c0c689aece93b23054205542a9c0c6" + "89aece93b230511b450d002059215a205321590c010b2055205420532059" + "42c7faf3c3ed82a3903c7d225a20595aad22607d225b42f3eab8bce9ada5" + "bfe8007c2259205b54ad2053206054ad7d7c2253205454ad205342a2cffa" + "f397c9eed7c7007c2254205354ad7c50ad7d42a9c0c689aece93b2307d21" + "550b200020543703e0222000205a3703d0222000205f3703c02220002058" + "3703b022200020553703e822200020593703d822200020563703c8222000" + "205c3703b822200042d4fdc3d783f6c4cb003703d80d200042f4fbe3f6de" + "f5ab964d3703d00d200042d2b0b4a9ce90e8a7a77f3703c80d200042d2ab" + "8caee8a0afd1643703c00d200042aed5e2f58ca8a78a2b3703b80d200042" + "c3d581df919386df817f3703b00d200042a3dfefced5bcb1dab57f3703a8" + "0d200042e5f184a5c2dbf9b3323703a00d200041b0256a200041a00d6a20" + "0041b0226a102f20002903b825226442018620002903b025226e423f8884" + "2155206e420186215402400240027e20002903c02522704201862064423f" + "8884225342ddb0858ce8b691a8b87f85200041c8256a2219290300226020" + "607c2070423f887c225642a9c0c689aece93b2308584500440205442c7fa" + "f3c3ed82a3903c542055428d95c7c396d2dac0977f542055428d95c7c396" + "d2dac0977f511b450d0242a9c0c689aece93b230215642ddb0858ce8b691" + "a8b87f0c010b205342deb0858ce8b691a8b87f54205642a9c0c689aece93" + "b23054205642a9c0c689aece93b230511b450d0120530b215a2054215f20" + "5521580c010b205620532055205442c7faf3c3ed82a3903c7d225f20545a" + "ad22547d225942f3eab8bce9ada5bfe8007c2258205954ad2054205556ad" + "7d7c2255205354ad205542a2cffaf397c9eed7c7007c225a205554ad7c50" + "ad7d42a9c0c689aece93b2307d21560b200041d8256a221a290300227142" + "018620002903d0252265423f888421542065420186215302400240200029" + "03e025225c4201862071423f8884225942ddb0858ce8b691a8b87f852000" + "41e8256a2217290300225b205b7c205c423f887c225542a9c0c689aece93" + "b2308584500440205342c7faf3c3ed82a3903c542054428d95c7c396d2da" + "c0977f542054428d95c7c396d2dac0977f511b450d0142a9c0c689aece93" + "b230215542ddb0858ce8b691a8b87f21682053216c205421730c020b2059" + "42deb0858ce8b691a8b87f54205542a9c0c689aece93b23054205542a9c0" + "c689aece93b230511b450d002053216c20542173205921680c010b205520" + "592054205342c7faf3c3ed82a3903c7d226c20535aad22537d226842f3ea" + "b8bce9ada5bfe8007c2273206854ad2053205456ad7d7c2254205954ad20" + "5442a2cffaf397c9eed7c7007c2268205454ad7c50ad7d42a9c0c689aece" + "93b2307d21550b02400240027e205a20707c225a205820647c2254206454" + "ad2054205f206e7c2259206e54ad7c2253205454ad7c7c225442ddb0858c" + "e8b691a8b87f85205a207054ad2054205a54ad7c205620607c7c225a42a9" + "c0c689aece93b2308584500440205942c7faf3c3ed82a3903c542053428d" + "95c7c396d2dac0977f542053428d95c7c396d2dac0977f511b450d0242a9" + "c0c689aece93b230215a42ddb0858ce8b691a8b87f0c010b205442deb085" + "8ce8b691a8b87f54205a42a9c0c689aece93b23054205a42a9c0c689aece" + "93b230511b450d0120540b21742059217d2053216a0c010b205a20542053" + "205942c7faf3c3ed82a3903c7d227d20595aad22567d225942f3eab8bce9" + "ada5bfe8007c226a205954ad2053205654ad7d7c2256205454ad205642a2" + "cffaf397c9eed7c7007c2274205654ad7c50ad7d42a9c0c689aece93b230" + "7d215a0b02400240205c20687c2259207120737c2256207154ad20562065" + "206c7c2253206554ad7c2254205654ad7c7c225642ddb0858ce8b691a8b8" + "7f852059205c54ad2056205954ad7c2055205b7c7c225f42a9c0c689aece" + "93b2308584500440205342c7faf3c3ed82a3903c542054428d95c7c396d2" + "dac0977f542054428d95c7c396d2dac0977f511b450d0142a9c0c689aece" + "93b230215f42ddb0858ce8b691a8b87f21732053217b205421790c020b20" + "5642deb0858ce8b691a8b87f54205f42a9c0c689aece93b23054205f42a9" + "c0c689aece93b230511b450d002053217b20542179205621730c010b205f" + "20562054205342c7faf3c3ed82a3903c7d227b20535aad22557d225342f3" + "eab8bce9ada5bfe8007c2279205354ad2054205554ad7d7c2255205654ad" + "205542a2cffaf397c9eed7c7007c2273205554ad7c50ad7d42a9c0c689ae" + "ce93b2307d215f0b02400240027e207420002903c03422547c2256206a20" + "002903b83422537c2255206a54ad2055207d20002903b03422587c226820" + "7d54ad7c2259205554ad7c7c225542ddb0858ce8b691a8b87f8520562074" + "54ad2055205654ad7c205a200e29030022567c7c226d42a9c0c689aece93" + "b2308584500440206842c7faf3c3ed82a3903c542059428d95c7c396d2da" + "c0977f542059428d95c7c396d2dac0977f511b450d0242a9c0c689aece93" + "b230216d42ddb0858ce8b691a8b87f0c010b205542deb0858ce8b691a8b8" + "7f54206d42a9c0c689aece93b23054206d42a9c0c689aece93b230511b45" + "0d0120550b2172206821752059217a0c010b206d20552059206842c7faf3" + "c3ed82a3903c7d227520685aad22687d226c42f3eab8bce9ada5bfe8007c" + "227a206c54ad2059206854ad7d7c2259205554ad205942a2cffaf397c9ee" + "d7c7007c2272205954ad7c50ad7d42a9c0c689aece93b2307d216d0b0240" + "0240207320002903e03422597c22552079203229030022687c2263207954" + "ad2063207b20002903d034226c7c2261207b54ad7c2262206354ad7c7c22" + "5d42ddb0858ce8b691a8b87f852055207354ad2055205d56ad7c205f2003" + "29030022557c7c226342a9c0c689aece93b2308584500440206142c7faf3" + "c3ed82a3903c542062428d95c7c396d2dac0977f542062428d95c7c396d2" + "dac0977f511b450d0142a9c0c689aece93b230216342ddb0858ce8b691a8" + "b87f215d20612157206221610c020b205d42deb0858ce8b691a8b87f5420" + "6342a9c0c689aece93b23054206342a9c0c689aece93b230511b450d0020" + "612157206221610c010b2063205d2062206142c7faf3c3ed82a3903c7d22" + "5720615aad227c7d227642f3eab8bce9ada5bfe8007c2261207654ad2062" + "207c54ad7d7c2262205d54ad206242a2cffaf397c9eed7c7007c225d2062" + "54ad7c50ad7d42a9c0c689aece93b2307d21630b2011206d370300201320" + "723703002000207a37039807200020753703900720004190076a42a4fdf9" + "e1b6c191889e7f42c6cae3a18ba9ade04b42aed88286b4db88945c4294a0" + "e38497e789991842c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b" + "200d20633703002010205d370300200020613703a80d200020573703a00d" + "200041a00d6a42a4fdf9e1b6c191889e7f42c6cae3a18ba9ade04b42aed8" + "8286b4db88945c4294a0e38497e789991842c7faf3c3ed82a3903c428d95" + "c7c396d2dac0977f102b200041c8286a22032011290300370300200041c0" + "286a220e2013290300370300200620002903a00d370300200641086a2000" + "2903a80d370300200641106a2010290300370300200641186a200d290300" + "37030020002000290398073703b82820002000290390073703b028024002" + "40027e20002903c04722612000290380477c226d204d290300225d204c29" + "03007c2263205d54ad206320002903b047225d20002903f0467c2262205d" + "54ad7c225d206354ad7c7c226342ddb0858ce8b691a8b87f852061206d56" + "ad2063206d54ad7c2012290300204e2903007c7c226d42a9c0c689aece93" + "b2308584500440206242c7faf3c3ed82a3903c54205d428d95c7c396d2da" + "c0977f54205d428d95c7c396d2dac0977f511b450d0242a9c0c689aece93" + "b230216d42ddb0858ce8b691a8b87f0c010b206342deb0858ce8b691a8b8" + "7f54206d42a9c0c689aece93b23054206d42a9c0c689aece93b230511b45" + "0d0120630b217220622175205d217a0c010b206d2063205d206242c7faf3" + "c3ed82a3903c7d227520625aad22627d226142f3eab8bce9ada5bfe8007c" + "227a206154ad205d206254ad7d7c225d206354ad205d42a2cffaf397c9ee" + "d7c7007c2272205d54ad7c50ad7d42a9c0c689aece93b2307d216d0b0240" + "024020002903e047225720002903a0477c226320222903002262201f2903" + "007c225d206254ad205d20002903d04722622000290390477c2261206254" + "ad7c2262205d54ad7c7c225d42ddb0858ce8b691a8b87f852057206356ad" + "205d206354ad7c202429030020232903007c7c226342a9c0c689aece93b2" + "308584500440206142c7faf3c3ed82a3903c542062428d95c7c396d2dac0" + "977f542062428d95c7c396d2dac0977f511b450d0142a9c0c689aece93b2" + "30216342ddb0858ce8b691a8b87f215d20612157206221610c020b205d42" + "deb0858ce8b691a8b87f54206342a9c0c689aece93b23054206342a9c0c6" + "89aece93b230511b450d0020612157206221610c010b2063205d20622061" + "42c7faf3c3ed82a3903c7d225720615aad227c7d227642f3eab8bce9ada5" + "bfe8007c2261207654ad2062207c54ad7d7c2262205d54ad206242a2cffa" + "f397c9eed7c7007c225d206254ad7c50ad7d42a9c0c689aece93b2307d21" + "630b200d206d3703002010207237030020292061370300200b2057370300" + "203a205d37030020252063370300200041c0c0006a224520723703002000" + "41c8c0006a2232206d37030020282057370300200041d8c0006a22142061" + "370300200041e0c0006a205d370300200041e8c0006a221c206337030020" + "0020753703a00d200020753703b0402000207a3703a80d2000207a3703b8" + "40200041b0c0006a200041a00d6a200041a00d6a102f02400240027e2054" + "20667c226d205320697c2262206954ad20622058206b7c2263206b54ad7c" + "225d206254ad7c7c226b42ddb0858ce8b691a8b87f852066206d56ad206b" + "206d54ad7c205620787c7c226942a9c0c689aece93b23085845004402063" + "42c7faf3c3ed82a3903c54205d428d95c7c396d2dac0977f54205d428d95" + "c7c396d2dac0977f511b450d0242a9c0c689aece93b230216942ddb0858c" + "e8b691a8b87f0c010b206b42deb0858ce8b691a8b87f54206942a9c0c689" + "aece93b23054206942a9c0c689aece93b230511b450d01206b0b216d2063" + "2178205d21630c010b2069206b205d206342c7faf3c3ed82a3903c7d2278" + "20635aad22667d226d42f3eab8bce9ada5bfe8007c2263206d54ad205d20" + "6654ad7d7c2266206b54ad206642a2cffaf397c9eed7c7007c226d206654" + "ad7c50ad7d42a9c0c689aece93b2307d21690b024002402059205e7c226b" + "206720687c2266206754ad2066206c206f7c225d206f54ad7c2267206654" + "ad7c7c226642ddb0858ce8b691a8b87f85205e206b56ad2066206b54ad7c" + "205520777c7c226b42a9c0c689aece93b2308584500440205d42c7faf3c3" + "ed82a3903c542067428d95c7c396d2dac0977f542067428d95c7c396d2da" + "c0977f511b450d0142a9c0c689aece93b230216b42ddb0858ce8b691a8b8" + "7f216f205d21772067215e0c020b206642deb0858ce8b691a8b87f54206b" + "42a9c0c689aece93b23054206b42a9c0c689aece93b230511b450d00205d" + "21772067215e2066216f0c010b206b20662067205d42c7faf3c3ed82a390" + "3c7d2277205d5aad226f7d225d42f3eab8bce9ada5bfe8007c225e205d54" + "ad2067206f54ad7d7c2267206654ad206742a2cffaf397c9eed7c7007c22" + "6f206754ad7c50ad7d42a9c0c689aece93b2307d216b0b20002903b84021" + "5d20002903b040216102400240417f20002903c0402267206d8520322903" + "002266206985844200522067206d54206620695420662069511b1b222141" + "7f470440202141ff01710d01206120785a205d20635a205d2063511b0d01" + "0b20662067205d206142c7faf3c3ed82a3903c7c2262206154ad7c226120" + "5d54ad206142f3eab8bce9ada5bfe8007d225d206154ad7c7c2261206754" + "ad7c206142a3cffaf397c9eed7c7007d2275206154ad7c42a9c0c689aece" + "93b2307c21660c010b20672175206121620b205d20637d227a2062207854" + "ad225754ad217c205d206354ad21762014290300215d20002903d0402172" + "02400240417f20002903e0402263206f85201c2903002267206b85844200" + "522063206f542067206b542067206b511b1b2214417f470440201441ff01" + "710d01207220775a205d205e5a205d205e511b0d010b20672063205d2072" + "42c7faf3c3ed82a3903c7c2261207254ad7c2272205d54ad207242f3eab8" + "bce9ada5bfe8007d225d207254ad7c7c2272206354ad7c207242a3cffaf3" + "97c9eed7c7007d227e207254ad7c42a9c0c689aece93b2307c21670c010b" + "2063217e207221610b206d427f85216d2076207c7c2172206f427f852163" + "205d205e54ad205d205e7d225d2061207754ad227c54ad7c217602400240" + "417f20542070852056206085844200522054207056205620605620562060" + "511b1b2214417f470440201441ff01710d012058206e5820532064582053" + "2064511b0d010b206020702064206e42c7faf3c3ed82a3903c7c225e206e" + "54ad7c226f206454ad206f42f3eab8bce9ada5bfe8007d226e206f54ad7c" + "7c2264207054ad206442a3cffaf397c9eed7c7007d2270206454ad7c7c42" + "a9c0c689aece93b2307c21600c010b206e215e2064216e0b206d20757c21" + "64420120727d21722063207e7c216f420120767d2175206020567d205442" + "7f85227620707c2260207654ad206042012053206e56ad7d206e20537d22" + "702058205e56ad226e54ad7d7c227f206054ad7c50ad7d21762070206e7d" + "216e205e20587d217e02400240417f2059205c852055205b858442005220" + "59205c562055205b562055205b511b1b2214417f470440201441ff01710d" + "012065206c5a206820715820682071511b0d010b205b205c2071206542c7" + "faf3c3ed82a3903c7c225e206554ad7c2260207154ad206042f3eab8bce9" + "ada5bfe8007d2271206054ad7c7c2260205c54ad206042a3cffaf397c9ee" + "d7c7007d225c206054ad7c7c42a9c0c689aece93b2307c215b0c010b2065" + "215e0b206420727c2160206f20757c2170200f200041c0c6006a29030037" + "03002015200041c8c6006a290300370300200041d0c3006a200041d0c600" + "6a290300370300200041d8c3006a2214200041d8c6006a29030037030020" + "0041e0c3006a200041e0c6006a290300370300200041e8c3006a221c2000" + "41e8c6006a2903003703002000207f3703c02b2000207e3703b02b200020" + "002903b0463703b043200020002903b8463703b8432000205e206c7d3703" + "d02b200020763703c82b2000206e3703b82b2000207120687d226e205e20" + "6c54ad225e7d3703d82b20002059427f852265205c7c225c420120682071" + "56ad7d205e206e56ad7d7c22713703e02b2000205b20557d205c207156ad" + "205c206554ad7c50ad7d3703e82b200041b0c3006a200041b0c6006a2000" + "41b0c6006a102f200041c8076a22212017290300370300200041c0076a20" + "0041e0256a290300370300200041b8076a2217201a290300370300202c20" + "0041d0256a290300370300201120192903003703002013200041c0256a29" + "0300370300200020002903b82537039807200020002903b0253703900720" + "004190076a200041b0256a200041b0256a102f0240417f20542074852056" + "205a858442005220542074542056205a542056205a511b1b2219417f4704" + "40201941ff01710d012058207d5a2053206a5a2053206a511b0d010b2056" + "20542053205842c7faf3c3ed82a3903c7c225b205854ad7c2258205354ad" + "205842f3eab8bce9ada5bfe8007d225c205854ad7c7c2253205454ad2053" + "42a3cffaf397c9eed7c7007d2254205354ad7c7c42a9c0c689aece93b230" + "7c2156205b2158205c21530b2064206d5421192060206454211a2063206f" + "56210c206f20705621162056205a7d2074427f85225a20547c2256205a54" + "ad205642012053206a54ad7d2053206a7d22542058207d54ad225354ad7d" + "7c225a205654ad7c50ad7d215b205420537d21532058207d7d2158024002" + "40417f20592073852055205f858442005220592073542055205f54205520" + "5f511b1b2208417f470440200841ff01710d01206c207b5a206820795a20" + "682079511b0d010b205520592068206c42c7faf3c3ed82a3903c7c225620" + "6c54ad7c225c206854ad205c42f3eab8bce9ada5bfe8007d2254205c54ad" + "7c7c225c205954ad205c42a3cffaf397c9eed7c7007d2259205c54ad7c7c" + "42a9c0c689aece93b2307c21550c010b206c2156206821540b2019ad215c" + "201aad2164200cad21712016ad216c2000205a3703c031200020583703b0" + "3120002056207b7d3703d0312000205b3703c831200020533703b8312000" + "205420797d22532056207b54ad225a7d3703d83120002073427f85225820" + "597c225642012054207954ad7d2053205a54ad7d7c22543703e031200020" + "55205f7d2054205654ad2056205854ad7c50ad7d3703e831200041b0c600" + "6a200041b01f6a200041b0316a102f2010200e290300370300200d200329" + "0300370300200b20062903003703002029200041d8286a29030037030020" + "3a200041e0286a2903003703002025200041e8286a290300370300200020" + "002903b0283703a00d200020002903b8283703a80d200041a00d6a200041" + "b0286a200041b0286a102f20002903980722544201862000290390072253" + "423f888421552053420186215a02400240027e20002903a0072259420186" + "2054423f8884225f42ddb0858ce8b691a8b87f852011290300226820687c" + "2059423f887c225642a9c0c689aece93b2308584500440205a42c7faf3c3" + "ed82a3903c542055428d95c7c396d2dac0977f542055428d95c7c396d2da" + "c0977f511b450d0242a9c0c689aece93b230215642ddb0858ce8b691a8b8" + "7f0c010b205f42deb0858ce8b691a8b87f54205642a9c0c689aece93b230" + "54205642a9c0c689aece93b230511b450d01205f0b216f205a215e205521" + "740c010b2056205f2055205a42c7faf3c3ed82a3903c7d225e205a5aad22" + "5a7d225842f3eab8bce9ada5bfe8007c2274205854ad2055205a54ad7d7c" + "2255205f54ad205542a2cffaf397c9eed7c7007c226f205554ad7c50ad7d" + "42a9c0c689aece93b2307d21560b205c20647c2173206c20717c216c2017" + "290300225a42018620002903b007225f423f8884215b205f420186215c02" + "40024020002903c0072258420186205a423f8884226442ddb0858ce8b691" + "a8b87f852021290300227120717c2058423f887c225542a9c0c689aece93" + "b2308584500440205c42c7faf3c3ed82a3903c54205b428d95c7c396d2da" + "c0977f54205b428d95c7c396d2dac0977f511b450d0142a9c0c689aece93" + "b230215542ddb0858ce8b691a8b87f216e205c2165205b216a0c020b2064" + "42deb0858ce8b691a8b87f54205542a9c0c689aece93b23054205542a9c0" + "c689aece93b230511b450d00205c2165205b216a2064216e0c010b205520" + "64205b205c42c7faf3c3ed82a3903c7d2265205c5aad225c7d226e42f3ea" + "b8bce9ada5bfe8007c226a206e54ad205b205c54ad7d7c225b206454ad20" + "5b42a2cffaf397c9eed7c7007c226e205b54ad7c50ad7d42a9c0c689aece" + "93b2307d21550b2073502103206c50210e02400240027e2059206f7c225b" + "205420747c2264205454ad20642053205e7c225c205354ad7c2253206454" + "ad7c7c225442ddb0858ce8b691a8b87f852059205b56ad2054205b54ad7c" + "205620687c7c225642a9c0c689aece93b2308584500440205c42c7faf3c3" + "ed82a3903c542053428d95c7c396d2dac0977f542053428d95c7c396d2da" + "c0977f511b450d0242a9c0c689aece93b230215642ddb0858ce8b691a8b8" + "7f0c010b205442deb0858ce8b691a8b87f54205642a9c0c689aece93b230" + "54205642a9c0c689aece93b230511b450d0120540b215b205c2164205321" + "5c0c010b205620542053205c42c7faf3c3ed82a3903c7d2264205c5aad22" + "597d225b42f3eab8bce9ada5bfe8007c225c205b54ad2053205954ad7d7c" + "2253205454ad205342a2cffaf397c9eed7c7007c225b205354ad7c50ad7d" + "42a9c0c689aece93b2307d21560b2003ad2168206620697d216c200ead21" + "662067206b7d2167024002402058206e7c2269205a206a7c2254205a54ad" + "2054205f20657c2259205f54ad7c2253205454ad7c7c225442ddb0858ce8" + "b691a8b87f852058206956ad2054206954ad7c205520717c7c225542a9c0" + "c689aece93b2308584500440205942c7faf3c3ed82a3903c542053428d95" + "c7c396d2dac0977f542053428d95c7c396d2dac0977f511b450d0142a9c0" + "c689aece93b230215542ddb0858ce8b691a8b87f215a2059217120532169" + "0c020b205442deb0858ce8b691a8b87f54205542a9c0c689aece93b23054" + "205542a9c0c689aece93b230511b450d0020592171205321692054215a0c" + "010b205520542053205942c7faf3c3ed82a3903c7d227120595aad22597d" + "225a42f3eab8bce9ada5bfe8007c2269205a54ad2053205954ad7d7c2253" + "205454ad205342a2cffaf397c9eed7c7007c225a205354ad7c50ad7d42a9" + "c0c689aece93b2307d21550b206c20687d216b207a20577d215320672066" + "7d2168205d207c7d215920002903a80d215820002903a00d216602400240" + "417f20002903b00d225f205b85200d290300225420568584420052205b20" + "5f56205420565420542056511b1b2203417f470440200341ff01710d0120" + "642066582058205c5a2058205c511b0d010b2054205f2058206642c7faf3" + "c3ed82a3903c7c226c206654ad7c2267205854ad206742f3eab8bce9ada5" + "bfe8007d2266206754ad7c7c2258205f54ad7c205842a3cffaf397c9eed7" + "c7007d2267205854ad7c42a9c0c689aece93b2307c21540c010b205f2167" + "2066216c205821660b206220787d215f206120777d2158205420567d205b" + "427f85225420677c2256205454ad2056205c206656ad2066205c7d225420" + "64206c56ad225b54ad7c7d42017c2266205654ad7c50ad7d21672054205b" + "7d216f206c20647d216c2029290300215b20002903c00d21640240024041" + "7f20002903d00d2254205a8520252903002256205585844200522054205a" + "54205520565620552056511b1b2203417f470440200341ff01710d012064" + "20715a205b20695a205b2069511b0d010b20562054205b206442c7faf3c3" + "ed82a3903c7c225c206454ad7c2264205b54ad206442f3eab8bce9ada5bf" + "e8007d225b206454ad7c7c2264205454ad7c206442a3cffaf397c9eed7c7" + "007d2254206454ad7c42a9c0c689aece93b2307c21560c010b2064215c0b" + "20002066370380472000206c3703f0462000205c20717d37039047200020" + "67370388472000206f3703f8462000205b20697d2264205c207154ad225c" + "7d370398472000205a427f85225a20547c2254205b206954ad205c206456" + "ad7c7d42017c225b3703a0472000205620557d2054205a54ad2054205b56" + "ad7c50ad7d3703a847200020683703e831200020703703e0312000205937" + "03d831200020583703d031200020603703c0312000206b3703c831200020" + "5f3703b031200020533703b8312007200041b0346a200041b0316a102f42" + "002164200042003703e831200042003703e031200042003703d831200042" + "013703d031200042003703c831200042003703c031200042003703b83120" + "0042093703b031200041b02e6a200041b0316a200041b02b6a102f420021" + "714200216c4200216642002167205f2060842053206b8484420052044042" + "c7faf3c3ed82a3903c205f7d2166427f4200427f4200205f42788342c7fa" + "f3c3ed82a3903c561b22562053205656ad7d205620537d225642f3eab8bc" + "e9ada5bfe8007d2267205654ad7c42017c225620607d225542a4cffaf397" + "c9eed7c7007d2271205554ad2056206054ad7d427f511b206b7d42a9c0c6" + "89aece93b2307c216c0b4200216b4200216f4200215e2058207084205920" + "688484420052044042c7faf3c3ed82a3903c20587d2164427f4200427f42" + "00205842788342c7faf3c3ed82a3903c561b22562056205954ad7d205620" + "597d225642f3eab8bce9ada5bfe8007d226b205654ad7c42017c22562070" + "7d225542a4cffaf397c9eed7c7007d226f205554ad2056207054ad7d427f" + "511b20687d42a9c0c689aece93b2307c215e0b20002903b8432254420186" + "20002903b0432253423f888421552053420186215a02400240027e200029" + "03c04322594201862054423f8884225f42ddb0858ce8b691a8b87f852015" + "290300227020707c2059423f887c225642a9c0c689aece93b23085845004" + "40205a42c7faf3c3ed82a3903c542055428d95c7c396d2dac0977f542055" + "428d95c7c396d2dac0977f511b450d0242a9c0c689aece93b230215642dd" + "b0858ce8b691a8b87f0c010b205f42deb0858ce8b691a8b87f54205642a9" + "c0c689aece93b23054205642a9c0c689aece93b230511b450d01205f0b21" + "68205a2174205521730c010b2056205f2055205a42c7faf3c3ed82a3903c" + "7d2274205a5aad225a7d225842f3eab8bce9ada5bfe8007c2273205854ad" + "2055205a54ad7d7c2255205f54ad205542a2cffaf397c9eed7c7007c2268" + "205554ad7c50ad7d42a9c0c689aece93b2307d21560b2014290300225a42" + "018620002903d043225f423f88842160205f420186215b02400240200029" + "03e0432258420186205a423f8884226942ddb0858ce8b691a8b87f85201c" + "290300225c205c7c2058423f887c225542a9c0c689aece93b23085845004" + "40205b42c7faf3c3ed82a3903c542060428d95c7c396d2dac0977f542060" + "428d95c7c396d2dac0977f511b450d0142a9c0c689aece93b230215542dd" + "b0858ce8b691a8b87f216e205b21652060216a0c020b206942deb0858ce8" + "b691a8b87f54205542a9c0c689aece93b23054205542a9c0c689aece93b2" + "30511b450d00205b21652060216a2069216e0c010b205520692060205b42" + "c7faf3c3ed82a3903c7d2265205b5aad225b7d226e42f3eab8bce9ada5bf" + "e8007c226a206e54ad205b206056ad7d7c2260206954ad206042a2cffaf3" + "97c9eed7c7007c226e206054ad7c50ad7d42a9c0c689aece93b2307d2155" + "0b02400240027e205920687c225b205420737c2269205454ad2069205320" + "747c2260205354ad7c2253206954ad7c7c225442ddb0858ce8b691a8b87f" + "852059205b56ad2054205b54ad7c205620707c7c225642a9c0c689aece93" + "b2308584500440206042c7faf3c3ed82a3903c542053428d95c7c396d2da" + "c0977f542053428d95c7c396d2dac0977f511b450d0242a9c0c689aece93" + "b230215642ddb0858ce8b691a8b87f0c010b205442deb0858ce8b691a8b8" + "7f54205642a9c0c689aece93b23054205642a9c0c689aece93b230511b45" + "0d0120540b215b20602170205321690c010b205620542053206042c7faf3" + "c3ed82a3903c7d227020605aad22597d226042f3eab8bce9ada5bfe8007c" + "2269206054ad2053205954ad7d7c2253205454ad205342a2cffaf397c9ee" + "d7c7007c225b205354ad7c50ad7d42a9c0c689aece93b2307d21560b0240" + "02402058206e7c2260205a206a7c2254205a54ad2054205f20657c225920" + "5f54ad7c2253205454ad7c7c225442ddb0858ce8b691a8b87f8520582060" + "56ad2054206054ad7c2055205c7c7c225542a9c0c689aece93b230858450" + "0440205942c7faf3c3ed82a3903c542053428d95c7c396d2dac0977f5420" + "53428d95c7c396d2dac0977f511b450d0142a9c0c689aece93b230215542" + "ddb0858ce8b691a8b87f21542059215a205321590c020b205442deb0858c" + "e8b691a8b87f54205542a9c0c689aece93b23054205542a9c0c689aece93" + "b230511b450d002059215a205321590c010b205520542053205942c7faf3" + "c3ed82a3903c7d225a20595aad225f7d225842f3eab8bce9ada5bfe8007c" + "2259205854ad2053205f54ad7d7c2253205454ad205342a2cffaf397c9ee" + "d7c7007c2254205354ad7c50ad7d42a9c0c689aece93b2307d21550b2000" + "41e81c6a2203200041e82e6a290300370300200041e01c6a220e200041e0" + "2e6a290300370300200041d81c6a2219200041d82e6a2903003703002000" + "41d01c6a221a200041d02e6a290300370300200041c81c6a2217200041c8" + "2e6a290300370300200041c01c6a2214200041c02e6a2903003703002000" + "20002903b82e3703b81c200020002903b02e3703b01c20002802b0192009" + "460440200041b0196a41c4a2c000103920002802b419211e0b2017290300" + "21532019290300215f2003290300215820002903b81c2160201e200941c0" + "016c6a220320553703b80120142903002155201a290300215c200e290300" + "216820002903b01c2174200320543703b001200320593703a8012003205a" + "3703a00120032056370398012003205b3703900120032069370388012003" + "2070370380012003205e3703782003206f3703702003206b370368200320" + "643703602003206c37035820032071370350200320673703482003206637" + "034020032074370300200341386a2058370300200341306a206837030020" + "0341286a205f370300200341206a205c370300200341186a205337030020" + "0341106a2055370300200341086a20603703002000200941016a22033602" + "b81902400240200041b0196a027f02400240202a41e4a1c0006a2d000041" + "016b0e03000401040b200041b0c9006a200041b0c6006a200041b03a6a10" + "49200041b0c9006a210e200320002802b019470d0241d4a2c0000c010b20" + "0041b0ce006a200041b0c6006a200041b03d6a1049200041b0ce006a210e" + "200320002802b019470d0141e4a2c0000b103920002802b419211e0b201e" + "200341c0016c6a200e41c001104c1a2000200941026a22033602b8190b20" + "032109202a41016a222a0d000b200042a0dcae8f86aaf9e4163703c80720" + "0042948fe8babd91b3d2cb003703c007200042cebbf2dbd0c38ad7323703" + "b807200042a297bfa0c6a3f5b2163703b007200042f7a3e4fb84f3d1d92f" + "3703a807200042c3e2e6aacf87fb85cc003703a0072000428ce68c968ce2" + "b0c6b77f37039807200042bdaabdbbf1aae5f1997f370390072015203e41" + "186a290300370300200f203e41106a2903003703002000203e41086a2903" + "003703b8432000203e2903003703b043200041b0c3006a42c6faf3c3ed82" + "a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689" + "aece93b23042c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b200d" + "200041c83a6a2903003703002010200041c03a6a290300370300200b2000" + "2903b043370300204020002903b8433703002034200f290300370300201b" + "2015290300370300200020002903b83a3703a80d200020002903b03a3703" + "a00d200041b0c0006a20004190076a200041a00d6a102f2000429a8984e2" + "ca978fe0073703c807200042abdee5e3feb4ad82073703c007200042d2b7" + "89fd98b99fc0213703b807200042e3e18eb1b2ecdfe9827f3703b0072000" + "42dcebebc4d4e0bc9e063703a807200042b9f38bb78bd3b1af5c3703a007" + "20004298b3a5ceda9db8d55b37039807200042daa6808de7a880aa5c3703" + "90072015203d41186a290300370300200f203d41106a2903003703002000" + "203d41086a2903003703b8432000203d2903003703b043200041b0c3006a" + "42c6faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8" + "b87f42a9c0c689aece93b23042c7faf3c3ed82a3903c428d95c7c396d2da" + "c0977f102b200d202741186a2903003703002010202741106a2903003703" + "00200b20002903b043370300204020002903b8433703002034200f290300" + "370300201b20152903003703002000202741086a2903003703a80d200020" + "272903003703a00d204420004190076a200041a00d6a102f200042a0dcae" + "8f86aaf9e4163703e843200042948fe8babd91b3d2cb003703e043200042" + "cebbf2dbd0c38ad7323703d843200042a297bfa0c6a3f5b2163703d04320" + "0042f7a3e4fb84f3d1d92f3703c843200042c3e2e6aacf87fb85cc003703" + "c0432000428ce68c968ce2b0c6b77f3703b843200042bdaabdbbf1aae5f1" + "997f3703b043202f202841186a2903003703002030202841106a29030037" + "03002000202841086a2903003703b837200020282903003703b037200041" + "b0376a42c6faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8" + "b691a8b87f42a9c0c689aece93b23042c7faf3c3ed82a3903c428d95c7c3" + "96d2dac0977f102b2011203229030037030020132045290300370300202c" + "20002903b037370300202c41086a220d20002903b837370300202c41106a" + "22092030290300370300202c41186a2215202f2903003703002000200029" + "03b84037039807200020002903b04037039007200041a00d6a200041b0c3" + "006a20004190076a102f2000429a8984e2ca978fe0073703e843200042ab" + "dee5e3feb4ad82073703e043200042d2b789fd98b99fc0213703d8432000" + "42e3e18eb1b2ecdfe9827f3703d043200042dcebebc4d4e0bc9e063703c8" + "43200042b9f38bb78bd3b1af5c3703c04320004298b3a5ceda9db8d55b37" + "03b843200042daa6808de7a880aa5c3703b043202f204341186a29030037" + "03002030204341106a2903003703002000204341086a2903003703b83720" + "0020432903003703b037200041b0376a42c6faf3c3ed82a3903c428d95c7" + "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b23042c7" + "faf3c3ed82a3903c428d95c7c396d2dac0977f102b2011204441186a2903" + "003703002013204441106a290300370300202c20002903b037370300200d" + "20002903b837370300200920302903003703002015202f29030037030020" + "00204441086a2903003703980720002044290300370390072004200041b0" + "c3006a20004190076a102f200041b0c3006a200041a00d6a100a20004190" + "076a200041b0c6006a200041b0c0006a104920002802b019221120034604" + "40200041b0196a41a4a2c000103920002802b019211120002802b419211e" + "0b201e200341c0016c6a20004190076a41c001104c1a2000200341016a22" + "0d3602b819200041a00d6a200041b0c6006a200041b0c3006a1049200d20" + "11470d02200041b0196a41b4a2c000103920002802b419211e0c020b41c4" + "a3c00010200b000b201e200d41c0016c6a200041a00d6a41c001104c1a20" + "0041b8196a220d200341026a36020020004180036a200041b03a6a418001" + "104c1a205141086a200d280200360200205120002902b019370200200028" + "025420464604404100211b230041206b220e240002400240200041d4006a" + "22162802002209417f460d00410420094101742208200941016a220c2008" + "200c4b1b2208200841044d1b220cad4290017e22534220884200520d0020" + "53a7220841f0ffffff074b0d00200e2009047f200e20094190016c36021c" + "200e201628020436021441100541000b360218200e41086a2008200e4114" + "6a1037200e2802084101470d01200e2802101a200e28020c211b0b201b41" + "d4a3c0001019000b200e28020c21092016200c3602002016200936020420" + "0e41206a2400200028025821380b203820464190016c6a20004180036a41" + "9001104c1a2000204641016a224636025c0b204f41016a224f4104470d00" + "0b0240024002400240024002400240024002400240024002402046450440" + "2000280254210320004190076a41f002104b1a20030d010c020b41002118" + "200041a0076a41f002104b1a200042003703980720004201370390072046" + "2039203920464b1b210820384184016a211b200041e00e6a2134200041b0" + "cf006a2119200041f0ce006a211a200041f0c3006a2114200041b0c4006a" + "2121200041b0ca006a2140200041f0c9006a2145200041b0c7006a214c20" + "004190086a212c200041f0c6006a214d200041d0076a212820004190096a" + "211c200041d0096a214e200041d0086a2117200041d0ce006a2110200041" + "d0c9006a21134100210c0240024002400340200041b0c3006a2000419007" + "6a2017103b200042003703e849200042003703e049200042003703d84920" + "0042013703d049200042003703c849200042003703c049200042003703b8" + "49200042093703b049200041b0ce006a204e200041b0c9006a102f201941" + "386a2203201c41386a290300370300201941306a2202201c41306a290300" + "370300201941286a2207201c41286a290300370300201941206a220b201c" + "41206a290300370300201941186a220d201c41186a290300370300201941" + "106a2211201c41106a290300370300201941086a2206201c41086a290300" + "3703002019201c290300370300201a2017290300370300201a41086a2209" + "201741086a290300370300201a41106a2215201741106a29030037030020" + "1a41186a220f201741186a290300370300201a41206a2225201741206a29" + "0300370300201a41286a2229201741286a290300370300201a41306a222a" + "201741306a290300370300201a41386a221e201741386a29030037030020" + "0041b0c6006a200041b0ce006a20004190076a1030204d201a2028103020" + "4c2019202c1030200041b0ce006a201741c001104c1a200041b0c9006a20" + "004190076a2017103020452028201a10302040202c20191030200041b0ce" + "006a200041b0c6006a200041b0c9006a103b200041b0c9006a200041b0ce" + "006a200041b0c3006a103c200042003703e846200042003703e046200042" + "003703d846200042013703d046200042003703c846200042003703c04620" + "0042003703b846200042093703b046200041b0ce006a2021200041b0c600" + "6a102f201a20002903b043370300200920002903b8433703002015200041" + "c0c3006a290300370300200f200041c8c3006a2903003703002025200041" + "d0c3006a2903003703002029200041d8c3006a290300370300202a200041" + "e0c3006a290300370300201e200041e8c3006a2903003703002003201441" + "386a2903003703002002201441306a2903003703002007201441286a2903" + "00370300200b201441206a290300370300200d201441186a290300370300" + "2011201441106a2903003703002006201441086a29030037030020192014" + "290300370300200041a00d6a200041b0c9006a200041b0ce006a103c2000" + "41b0ce006a200041b0c3006a200041b0c3006a1030201a20142014103020" + "192021202110302034200041b0ce006a41c001104c1a20004190076a2000" + "41a00d6a418003104c1a200c41016a2116201b2106200521022008210f02" + "7f02402039450440200c41a4a1c0006a2d00000d01201841016a21182016" + "220c41c000460d040c030b02400340200641046a280200220320184b0440" + "200241386a2903002156200241306a2903002155200241286a2903002154" + "200241206a2903002153200041c8ce006a220d2006280200201841c0016c" + "6a220341d8006a290300370300200041c0ce006a2211200341d0006a2903" + "003703002000200341c8006a2903003703b84e200020032903403703b04e" + "200041b0ce006a205320542055205642c7faf3c3ed82a3903c428d95c7c3" + "96d2dac0977f102b200041b80d6a2207200341f8006a2903003703002000" + "41b00d6a220b200341f0006a2903003703002000200341e8006a29030037" + "03a80d200020032903603703a00d200041a00d6a205320542055205642c7" + "faf3c3ed82a3903c428d95c7c396d2dac0977f102b200041c8c9006a2225" + "200d290300370300200041c0c9006a222920112903003703002013200029" + "03a00d370300201341086a222a20002903a80d370300201341106a221e20" + "0b290300370300201341186a222f2007290300370300200020002903b84e" + "3703b849200020002903b04e3703b049200241186a290300215620024110" + "6a2903002155200241086a290300215420022903002153200041c8c6006a" + "220920034198016a290300370300200041c0c6006a221520034190016a29" + "0300370300200020034188016a2903003703b84620002003290380013703" + "b046200041b0c6006a205320542055205642c7faf3c3ed82a3903c428d95" + "c7c396d2dac0977f102b2007200341b8016a290300370300200b200341b0" + "016a2903003703002000200341a8016a2903003703a80d200020032903a0" + "013703a00d200041a00d6a205320542055205642c7faf3c3ed82a3903c42" + "8d95c7c396d2dac0977f102b200d20092903003703002011201529030037" + "0300201020002903a00d370300201041086a223020002903a80d37030020" + "1041106a223a200b290300370300201041186a2232200729030037030020" + "0020002903b8463703b84e200020002903b0463703b04e200041a00d6a20" + "004190076a2003200041b0c9006a200041b0ce006a104820004190076a20" + "0041a00d6a418003104c1a20064190016a2106200241406b2102200f4101" + "6b220f0d010c020b0b201820034194a2c0001010000b201b210620052102" + "2008210e201841016a220f200c41a4a1c0006a2d0000450d011a03402006" + "41046a2802002203200f4b0440200241386a2903002156200241306a2903" + "002155200241286a2903002154200241206a2903002153200d2006280200" + "200f41c0016c6a220341d8006a2903003703002011200341d0006a290300" + "3703002000200341c8006a2903003703b84e200020032903403703b04e20" + "0041b0ce006a205320542055205642c7faf3c3ed82a3903c428d95c7c396" + "d2dac0977f102b2007200341f8006a290300370300200b200341f0006a29" + "03003703002000200341e8006a2903003703a80d200020032903603703a0" + "0d200041a00d6a205320542055205642c7faf3c3ed82a3903c428d95c7c3" + "96d2dac0977f102b2025200d290300370300202920112903003703002013" + "20002903a00d370300202a20002903a80d370300201e200b290300370300" + "202f2007290300370300200020002903b84e3703b849200020002903b04e" + "3703b049200241186a2903002156200241106a2903002155200241086a29" + "0300215420022903002153200920034198016a2903003703002015200341" + "90016a290300370300200020034188016a2903003703b846200020032903" + "80013703b046200041b0c6006a205320542055205642c7faf3c3ed82a390" + "3c428d95c7c396d2dac0977f102b2007200341b8016a290300370300200b" + "200341b0016a2903003703002000200341a8016a2903003703a80d200020" + "032903a0013703a00d200041a00d6a205320542055205642c7faf3c3ed82" + "a3903c428d95c7c396d2dac0977f102b200d200929030037030020112015" + "290300370300201020002903a00d370300203020002903a80d370300203a" + "200b29030037030020322007290300370300200020002903b8463703b84e" + "200020002903b0463703b04e200041a00d6a20004190076a2003200041b0" + "c9006a200041b0ce006a104820004190076a200041a00d6a418003104c1a" + "20064190016a2106200241406b2102200e41016b220e0d010c020b0b200f" + "20034184a2c0001010000b201841026a0b21182016220c41c000470d000b" + "2039450d0020384184016a2107200041d0ce006a210b200041d0c9006a21" + "0d201841c0016c2125200521022008210903402018200741046a28020022" + "034f0d02200241386a2903002156200241306a2903002155200241286a29" + "03002154200241206a2903002153200041c8ce006a221320072802002025" + "6a220341d8006a290300370300200041c0ce006a2206200341d0006a2903" + "003703002000200341c8006a2903003703b84e200020032903403703b04e" + "200041b0ce006a205320542055205642c7faf3c3ed82a3903c428d95c7c3" + "96d2dac0977f102b200041b80d6a2211200341f8006a2903003703002000" + "41b00d6a2210200341f0006a2903003703002000200341e8006a29030037" + "03a80d200020032903603703a00d200041a00d6a205320542055205642c7" + "faf3c3ed82a3903c428d95c7c396d2dac0977f102b200041c8c9006a2013" + "290300370300200041c0c9006a2006290300370300200d20002903a00d37" + "0300200d41086a20002903a80d370300200d41106a201029030037030020" + "0d41186a2011290300370300200020002903b84e3703b849200020002903" + "b04e3703b049200241186a2903002156200241106a290300215520024108" + "6a290300215420022903002153200041c8c6006a221520034198016a2903" + "00370300200041c0c6006a220f20034190016a2903003703002000200341" + "88016a2903003703b84620002003290380013703b046200041b0c6006a20" + "5320542055205642c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b" + "2011200341b8016a2903003703002010200341b0016a2903003703002000" + "200341a8016a2903003703a80d200020032903a0013703a00d200041a00d" + "6a205320542055205642c7faf3c3ed82a3903c428d95c7c396d2dac0977f" + "102b201320152903003703002006200f290300370300200b20002903a00d" + "370300200b41086a20002903a80d370300200b41106a2010290300370300" + "200b41186a2011290300370300200020002903b8463703b84e2000200029" + "03b0463703b04e200041a00d6a20004190076a2003200041b0c9006a2000" + "41b0ce006a104820004190076a200041a00d6a418003104c1a2007419001" + "6a2107200241406b2102200941016b22090d000b20384184016a21072000" + "41d0ce006a210b200041d0c9006a210d201841016a221841c0016c210f20" + "05210203402018200741046a28020022034f0d03200241386a2903002156" + "200241306a2903002155200241286a2903002154200241206a2903002153" + "200041c8ce006a22132007280200200f6a220341d8006a29030037030020" + "0041c0ce006a2206200341d0006a2903003703002000200341c8006a2903" + "003703b84e200020032903403703b04e200041b0ce006a20532054205520" + "5642c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b200041b80d6a" + "2211200341f8006a290300370300200041b00d6a2210200341f0006a2903" + "003703002000200341e8006a2903003703a80d200020032903603703a00d" + "200041a00d6a205320542055205642c7faf3c3ed82a3903c428d95c7c396" + "d2dac0977f102b200041c8c9006a2013290300370300200041c0c9006a20" + "06290300370300200d20002903a00d370300200d41086a20002903a80d37" + "0300200d41106a2010290300370300200d41186a20112903003703002000" + "20002903b84e3703b849200020002903b04e3703b049200241186a290300" + "2156200241106a2903002155200241086a29030021542002290300215320" + "0041c8c6006a220920034198016a290300370300200041c0c6006a221520" + "034190016a290300370300200020034188016a2903003703b84620002003" + "290380013703b046200041b0c6006a205320542055205642c7faf3c3ed82" + "a3903c428d95c7c396d2dac0977f102b2011200341b8016a290300370300" + "2010200341b0016a2903003703002000200341a8016a2903003703a80d20" + "0020032903a0013703a00d200041a00d6a205320542055205642c7faf3c3" + "ed82a3903c428d95c7c396d2dac0977f102b201320092903003703002006" + "2015290300370300200b20002903a00d370300200b41086a20002903a80d" + "370300200b41106a2010290300370300200b41186a201129030037030020" + "0020002903b8463703b84e200020002903b0463703b04e200041a00d6a20" + "004190076a2003200041b0c9006a200041b0ce006a104820004190076a20" + "0041a00d6a418003104c1a20074190016a2107200241406b210220084101" + "6b22080d000b0b20004190046a20004190076a418003104c1a200041b03d" + "6a20004190046a103d200041b03a6a200041d0056a221f103d2000420037" + "03e834200042003703e034200042003703d834200042013703d034200042" + "003703c834200042003703c034200042003703b834200042093703b03420" + "0041b0ce006a200041b03b6a200041b0346a102f200041b8cf006a223620" + "0041f83a6a290300370300200041c0cf006a2237200041803b6a29030037" + "0300200041c8cf006a2242200041883b6a290300370300200041d0cf006a" + "2241200041903b6a290300370300200041d8cf006a2247200041983b6a29" + "0300370300200041e0cf006a2248200041a03b6a290300370300200041e8" + "cf006a224b200041a83b6a290300370300200041f8ce006a222220002903" + "b83a37030020004180cf006a2223200041c03a6a22492903003703002000" + "4188cf006a2224200041c83a6a224a29030037030020004190cf006a224f" + "200041d03a6a225029030037030020004198cf006a2227200041d83a6a22" + "39290300370300200041a0cf006a223f200041e03a6a223c290300370300" + "200041a8cf006a223e200041e83a6a2244290300370300200020002903f0" + "3a3703b04f200020002903b03a3703f04e200041b0376a200041b03d6a20" + "0041b0ce006a103c200041e8106a2217200041e8376a220f290300370300" + "200041e0106a2214200041e0376a2225290300370300200041d8106a221c" + "200041d8376a2229290300370300200041d0106a2221200041d0376a222a" + "290300370300200041c8106a220c200041c8376a221e2903003703002000" + "41c0106a2216200041c0376a222f290300370300200020002903b8373703" + "b810200020002903b0373703b010200041b0106a200041b0376a200041b0" + "376a102f200041e8136a2208200041a8386a222c290300370300200041e0" + "136a2228200041a0386a221b290300370300200041d8136a223420004198" + "386a2240290300370300200041d0136a224520004190386a224c29030037" + "0300200041c8136a221020004188386a224d290300370300200041c0136a" + "221320004180386a224e290300370300200041c0316a2230200041c0386a" + "223d290300370300200041c8316a223a200041c8386a2243290300370300" + "200041d0316a2232200041d0386a2251290300370300200041d8316a220e" + "200041d8386a2204290300370300200041e0316a2219200041e0386a222e" + "290300370300200041e8316a221a200041e8386a222d2903003703002000" + "200041f8376a22122903003703b813200020002903f0373703b013200020" + "002903b0383703b0312000200041b8386a222b2903003703b831200041b0" + "136a200041f0376a2215200041b0386a2218102f200042003703e8342000" + "42003703e034200042003703d834200042013703d034200042003703c834" + "200042003703c034200042003703b834200042093703b034200041b0ce00" + "6a200041b0136a200041b0346a102f2008200041e8ce006a220329030037" + "03002028200041e0ce006a22022903003703002034200041d8ce006a2207" + "2903003703002045200041d0ce006a220d2903003703002010200041c8ce" + "006a22112903003703002013200041c0ce006a220b290300370300200020" + "002903b84e3703b813200020002903b04e3703b013200041b80a6a220620" + "0c290300370300200041b00a6a22092016290300370300200020002903b8" + "103703a80a200020002903b0103703a00a200041a00a6a20002903b01320" + "002903b8132013290300201029030042c7faf3c3ed82a3903c428d95c7c3" + "96d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20" + "0041c83d6a22132017290300370300200041c03d6a221020142903003703" + "002000201c2903003703b83d200020212903003703b03d200041b03d6a20" + "4529030020342903002028290300200829030042c7faf3c3ed82a3903c42" + "8d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b2" + "30102d201120062903002256370300200b20092903002255370300200d20" + "002903b03d2254370300200220102903002253370300200720002903b83d" + "225937030020032013290300225a370300200020002903a80a225f3703b8" + "4e200020002903a00a22583703b04e2017205a3703002014205337030020" + "1c205937030020212054370300200c205637030020162055370300200020" + "5f3703b810200020583703b010200041e8166a2217202d29030037030020" + "0041e0166a2214202e290300370300200041d8166a221c20042903003703" + "00200041d0166a22212051290300370300200041c8166a220c2043290300" + "370300200041c0166a2216203d2903003703002000202b2903003703b816" + "200020002903b0383703b016200041b0166a20182018102f200041b0ce00" + "6a200041b0166a200041b0346a102f201720032903003703002014200229" + "0300370300201c20072903003703002021200d290300370300200c201129" + "03003703002016200b290300370300200041c0196a2208202f2903003703" + "00200041c8196a2228201e290300370300200041d0196a2234202a290300" + "370300200041d8196a22452029290300370300200041e0196a223d202529" + "0300370300200041e8196a2243200f290300370300200020002903b84e37" + "03b816200020002903b04e3703b016200020002903b0373703b019200020" + "002903b8373703b819200041e8226a202c290300370300200041e0226a20" + "1b290300370300200041d8226a2040290300370300200041d0226a204c29" + "0300370300200041c8226a204d290300370300200041c0226a204e290300" + "370300200020122903003703b822200020002903f0373703b022200041b0" + "196a200041b0376a2015102f2006200c2903003703002009201629030037" + "0300200020002903b8163703a80a200020002903b0163703a00a200041a0" + "0a6a20002903b01920002903b8192008290300202829030042c7faf3c3ed" + "82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c6" + "89aece93b230102d20132017290300370300201020142903003703002000" + "201c2903003703b83d200020212903003703b03d200041b03d6a20342903" + "002045290300203d290300204329030042c7faf3c3ed82a3903c428d95c7" + "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d" + "201120062903002256370300200b20092903002255370300200d20002903" + "b03d2254370300200220102903002253370300200720002903b83d225937" + "030020032013290300225a370300200020002903a80a225f3703b84e2000" + "20002903a00a22583703b04e2017205a37030020142053370300201c2059" + "37030020212054370300200c2056370300201620553703002000205f3703" + "b816200020583703b016200041e81c6a2217202c290300370300200041e0" + "1c6a2214201b290300370300200041d81c6a221c20402903003703002000" + "41d01c6a2221204c290300370300200041c81c6a220c204d290300370300" + "200041c01c6a2216204e290300370300200020122903003703b81c200020" + "002903f0373703b01c200041b01c6a20152015102f200041e81f6a220820" + "0f290300370300200041e01f6a222c2025290300370300200041d81f6a22" + "282029290300370300200041d01f6a221b202a290300370300200041c81f" + "6a2234201e290300370300200041c01f6a2240202f290300370300200020" + "002903b8373703b81f200020002903b0373703b01f200041b01f6a200041" + "b0376a2018102f2006200c29030037030020092016290300370300200020" + "002903b81c3703a80a200020002903b01c3703a00a200041a00a6a200029" + "03b01f20002903b81f2040290300203429030042c7faf3c3ed82a3903c42" + "8d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b2" + "30102d20132017290300370300201020142903003703002000201c290300" + "3703b83d200020212903003703b03d200041b03d6a201b29030020282903" + "00202c290300200829030042c7faf3c3ed82a3903c428d95c7c396d2dac0" + "977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2011200629" + "03002256370300200b20092903002255370300200d20002903b03d225437" + "0300200220102903002253370300200720002903b83d2259370300200320" + "13290300225a370300200020002903a80a225f3703b84e200020002903a0" + "0a22583703b04e2017205a37030020142053370300201c20593703002021" + "2054370300200c2056370300201620553703002000205f3703b81c200020" + "583703b01c200041b0316a2018200041b0166a102f200041b0226a201520" + "0041b01c6a102f200041b0ce006a200041b0316a200041b0226a1030201a" + "200329030037030020192002290300370300200e20072903003703002032" + "200d290300370300203a20112903003703002030200b2903003703002000" + "20002903b84e3703b831200020002903b04e3703b031200041b0ce006a20" + "0041b0316a200041b0346a102f201a200329030037030020192002290300" + "370300200e20072903003703002032200d290300370300203a2011290300" + "3703002030200b290300370300200041c0256a202f290300370300200041" + "c8256a201e290300370300200041d0256a202a290300370300200041d825" + "6a2029290300370300200041e0256a2025290300370300200041e8256a20" + "0f290300370300200020002903b84e3703b831200020002903b04e3703b0" + "31200020002903b0373703b025200020002903b8373703b825200041b025" + "6a200041b0376a200041b0106a102f200041b0ce006a200041b0316a2000" + "41b0256a1030201a200329030037030020192002290300370300200e2007" + "2903003703002032200d290300370300203a20112903003703002030200b" + "290300370300200020002903b84e3703b831200020002903b04e3703b031" + "200041b03d6a200041b0316a103120002802b03d4101710440200041e82e" + "6a2206200041f83d6a22092903002256370300200041e02e6a2229200041" + "f03d6a222a2903002255370300200041d82e6a221e200041e83d6a221529" + "03002254370300200041d02e6a222f200041e03d6a221829030022533703" + "00200041c82e6a2230200041d83d6a220f2903002259370300200041c02e" + "6a223a200041d03d6a2225290300225a370300200041c0286a2232205a37" + "0300200041c8286a220e2059370300200041d0286a221920533703002000" + "41d8286a221a2054370300200041e0286a22172055370300200041e8286a" + "22142056370300200020002903c03d22563703b02e200020563703b02820" + "00201329030022563703b82e200020563703b828200041b0286a20102000" + "41b0106a102f200041e82b6a221c2009290300370300200041e02b6a2221" + "202a290300370300200041d82b6a222a2015290300370300200041d02b6a" + "220c2018290300370300200041c82b6a2216200f290300370300200041c0" + "2b6a22082025290300370300200020132903003703b82b200020002903c0" + "3d3703b02b200041b02b6a2010200041b0166a102f200041b02e6a201020" + "0041b01c6a102f2003201429030037030020022017290300370300200720" + "1a290300370300200d20192903003703002011200e290300370300200b20" + "32290300370300202220002903b82b370300202320082903003703002024" + "2016290300370300204f200c2903003703002027202a290300370300203f" + "2021290300370300203e201c290300370300200020002903b8283703b84e" + "200020002903b0283703b04e200020002903b02b3703f04e204b20062903" + "00370300204820292903003703002047201e2903003703002041202f2903" + "00370300204220302903003703002037203a290300370300203620002903" + "b82e370300200020002903b02e3703b04f200041c0c0006a200041b0ce00" + "6a41c001104c2106200042003703b840200042013703b040200041b0ce00" + "6a20004190046a2006103b200041b03d6a201f2006103b200041f0cf006a" + "200041b03d6a103e200041b00d6a200041b0ce006a418003104c21292000" + "42003703a80d200042013703a00d200041f0c4006a201f103e200041b0c3" + "006a20004190046a41c001104c1a200041b0c6006a200041b0c3006a2029" + "103f200742003703002002420037030020034200370300200042a9c0c689" + "aece93b2303703c84e200042b099b385febcf6b6de003703c04e200042bd" + "dcd9dcfbd3c1c7423703b84e200042c8faf383d69cd1de643703b04e2000" + "42003703d04e200041b0c0006a200041f0c6006a200041b0ce006a102f20" + "0742003703002002420037030020034200370300200042003703c84e2000" + "42ac97d286eaf99af1d9003703c04e200042cfb8ede69afe98f9543703b8" + "4e200042feffffbf97e6d1b1d7003703b04e200042003703d04e200041b0" + "3e6a200041b0c7006a200041b0ce006a102f2010200041c0c6006a290300" + "3703002013200041c8c6006a2903003703002025200041d0c6006a290300" + "370300200f200041d8c6006a2903003703002018200041e0c6006a290300" + "3703002015200041e8c6006a290300370300200920002903b84037030020" + "0041803e6a2006290300370300200041883e6a200041c8c0006a29030037" + "0300200041903e6a200041d0c0006a290300370300200041983e6a200041" + "d8c0006a2210290300370300200041a03e6a200041e0c0006a2213290300" + "370300200041a83e6a200041e8c0006a2206290300370300200020002903" + "b0463703b03d200020002903b8463703b83d200020002903b0403703f03d" + "200742003703002002420037030020034200370300200042a9c0c689aece" + "93b2303703c84e200042b099b385febcf6b6de003703c04e200042bddcd9" + "dcfbd3c1c7423703b84e200042c8faf383d69cd1de643703b04e20004200" + "3703d04e200041b03a6a200041b0c8006a200041b0ce006a102f20104200" + "3703002013420037030020064200370300200042003703c840200042ac97" + "d286eaf99af1d9003703c040200042cfb8ede69afe98f9543703b8402000" + "42feffffbf97e6d1b1d7003703b040200042003703d040200041b0cf006a" + "2210200041f0c8006a200041b0c0006a102f200b20004180c8006a290300" + "370300201120004188c8006a290300370300200d20004190c8006a290300" + "370300200720004198c8006a2903003703002002200041a0c8006a290300" + "3703002003200041a8c8006a290300370300202220002903b83a37030020" + "2320492903003703002024204a290300370300204f205029030037030020" + "272039290300370300203f203c290300370300203e204429030037030020" + "0020002903f0473703b04e2000200041f8c7006a2903003703b84e200020" + "002903b03a3703f04e20394200370300203c420037030020444200370300" + "200042a9c0c689aece93b2303703c83a200042b099b385febcf6b6de0037" + "03c03a200042bddcd9dcfbd3c1c7423703b83a200042c9faf383d69cd1de" + "643703b03a200042003703d03a200041b0c0006a200041b0ce006a200041" + "b03a6a102f200041f0c0006a200041f0ce006a200041b03a6a102f200041" + "b0c1006a2010200041b03a6a102f200041b0c9006a200041b03d6a41c001" + "104c1a200041f0ca006a200041b0c0006a41c001104c1a200041a0076a22" + "0d200041b0c9006a200041b0c6006a103f20004200370398072000420137" + "039007200041a00a6a200d418003104c1a200042003703c8492000420037" + "03c049200042003703b849200042f193a4d3c4d6e4f4c4003703b0494100" + "2107200b41f002104b1a200042003703b84e200042013703b04e41ff0121" + "03200041286a210b0340200041206a200341ff0071104f200b2903002000" + "41b0c9006a200341037641f0ffffff01716a220229030883215620002903" + "20200229030083215520074101710440200041a00d6a200041b0ce006a10" + "46200041b0ce006a200041a00d6a418003104c1a0b205520568442005204" + "40200041a00d6a200d200041b0ce006a103f200041b0ce006a200041a00d" + "6a418003104c1a410121070b200341016b2203417f470d000b200041f011" + "6a200041f0cf006a103e200041b0106a200041b0ce006a41c001104c1a20" + "0041b0136a200041b0106a1046200041b0166a200041b0136a1046200041" + "b0196a200041b0166a200041b0136a103f200042003703c8492000420037" + "03c049200042003703b849200042f193a4d3c4d6e4f4c4003703b0494100" + "2107200041c0ce006a41f002104b1a200042003703b84e200042013703b0" + "4e41ff012103200041186a210b0340200041106a200341ff0071104f200b" + "290300200041b0c9006a200341037641f0ffffff01716a22022903088321" + "562000290310200229030083215520074101710440200041a00d6a200041" + "b0ce006a1046200041b0ce006a200041a00d6a418003104c1a0b20552056" + "844200520440200041a00d6a200041b0196a200041b0ce006a103f200041" + "b0ce006a200041a00d6a418003104c1a410121070b200341016b2203417f" + "470d000b200041f01d6a200041f0cf006a103e200041b01c6a200041b0ce" + "006a41c001104c1a200041b01f6a200041b01c6a1046200042003703c849" + "200042003703c049200042003703b849200042f193a4d3c4d6e4f4c40037" + "03b04941002107200041c0ce006a41f002104b1a200042003703b84e2000" + "42013703b04e41ff012103200041086a210b03402000200341ff0071104f" + "200b290300200041b0c9006a200341037641f0ffffff01716a2202290308" + "8321562000290300200229030083215520074101710440200041a00d6a20" + "0041b0ce006a1046200041b0ce006a200041a00d6a418003104c1a0b2055" + "2056844200520440200041a00d6a200041b01f6a200041b0ce006a103f20" + "0041b0ce006a200041a00d6a418003104c1a410121070b200341016b2203" + "417f470d000b200041f0236a2203200041f0cf006a2211103e200041b022" + "6a200041b0ce006a41c001104c1a200041f0266a200041f01a6a103e2000" + "41b0256a200041b0196a41c001104c1a200041f0296a2003103e200041b0" + "286a200041b0226a41c001104c1a200041b02b6a200041b0286a200041b0" + "1c6a103f200041b02e6a200041b02b6a200041b0256a103f200041b0316a" + "200041b02e6a200041b0136a103f200041b0346a200041b02e6a200041b0" + "1c6a103f200041b0376a200d200041b0346a103f200041b03a6a200041b0" + "316a41011047200041a00d6a200041f0326a41011047200042e6cfeba7bb" + "dee5b4243703e8492000428e97d490e19f9f99a67f3703e049200042e58f" + "bbf7f8cee4bcf4003703d849200042acc5cd87f88bbcae4a3703d0492000" + "42dfcf96c3c2e3adc2123703c849200042e0969ab7d7fbe7dc683703c049" + "200042f6c2bcc982c187a9dc003703b849200042f0c8a7e6adbbcd855637" + "03b049200041b0ce006a200041a00d6a200041b0c9006a102f200041f0ce" + "006a2210200041e00d6a220d200041b0c9006a102f200041b0cf006a2213" + "200041a00e6a2203200041b0c9006a102f200041f03b6a200041b0ce006a" + "41c001104c1a200041b03d6a200041b03a6a200041b0376a103f200041c8" + "0d6a22024200370300200041d00d6a22074200370300200041d80d6a220b" + "4200370300200042a9c0c689aece93b2303703b80d200042b099b385febc" + "f6b6de003703b00d200042bddcd9dcfbd3c1c7423703a80d200042c8faf3" + "83d69cd1de643703a00d200042003703c00d200041b0ce006a200041f02e" + "6a200041a00d6a102f2002420037030020074200370300200b4200370300" + "200042003703b80d200042ac97d286eaf99af1d9003703b00d200042cfb8" + "ede69afe98f9543703a80d200042feffffbf97e6d1b1d7003703a00d2000" + "42003703c00d200041b0ca006a200041b02f6a200041a00d6a102f200041" + "c0c9006a200041c02e6a290300370300200041c8c9006a200041c82e6a29" + "0300370300200041d0c9006a200041d02e6a290300370300200041d8c900" + "6a200041d82e6a290300370300200041e0c9006a200041e02e6a29030037" + "0300200041e8c9006a200041e82e6a290300370300200041f8c9006a2000" + "2903b84e37030020004180ca006a200041c0ce006a290300370300200041" + "88ca006a200041c8ce006a29030037030020004190ca006a200041d0ce00" + "6a29030037030020004198ca006a200041d8ce006a220629030037030020" + "0041a0ca006a200041e0ce006a2209290300370300200041a8ca006a2000" + "41e8ce006a2215290300370300200020002903b02e3703b0492000200029" + "03b82e3703b849200020002903b04e3703f0492002420037030020074200" + "370300200b4200370300200042a9c0c689aece93b2303703b80d200042b0" + "99b385febcf6b6de003703b00d200042bddcd9dcfbd3c1c7423703a80d20" + "0042c8faf383d69cd1de643703a00d200042003703c00d200041b0c6006a" + "200041b0306a200041a00d6a102f20064200370300200942003703002015" + "4200370300200042003703c84e200042ac97d286eaf99af1d9003703c04e" + "200042cfb8ede69afe98f9543703b84e200042feffffbf97e6d1b1d70037" + "03b04e200042003703d04e2003200041f0306a200041b0ce006a102f2000" + "41b00d6a220620004180306a290300370300200041b80d6a220920004188" + "306a290300370300200041c00d6a221520004190306a2903003703002002" + "20004198306a2903003703002007200041a0306a290300370300200b2000" + "41a8306a290300370300200041e80d6a20002903b846370300200041f00d" + "6a200041c0c6006a290300370300200041f80d6a200041c8c6006a290300" + "370300200041800e6a200041d0c6006a290300370300200041880e6a2000" + "41d8c6006a2202290300370300200041900e6a200041e0c6006a22072903" + "00370300200041980e6a200041e8c6006a220b2903003703002000200029" + "03f02f3703a00d2000200041f82f6a2903003703a80d200020002903b046" + "3703e00d2002420037030020074200370300200b4200370300200042a9c0" + "c689aece93b2303703c846200042b099b385febcf6b6de003703c0462000" + "42bddcd9dcfbd3c1c7423703b846200042c9faf383d69cd1de643703b046" + "200042003703d046200041b0ce006a200041a00d6a200041b0c6006a102f" + "2010200d200041b0c6006a102f20132003200041b0c6006a102f200041b0" + "c0006a200041b0c9006a41c001104c1a200041f0c1006a200041b0ce006a" + "41c001104c1a200041b0c3006a200041b0c0006a200041b03d6a103f2000" + "41f0c7006a200041e00b6a103e200041b0c6006a200041a00a6a41c00110" + "4c1a200041b0c9006a200041b0c6006a200041b0316a103f200041b0ce00" + "6a200041b0c9006a41031047200041a00d6a200041f0ca006a4103104720" + "0042f3fa9ddfe096fed5003703a84e2000429da7d8abb3dcfbe5063703a0" + "4e200042ecf3d0beb9bce981ff003703984e200042818283a6bfc5aacaf6" + "003703904e200042bbc98be4fcb9a0ee193703884e20004290d5b285cd91" + "d8f46f3703804e200042caa4d7f2dbf1aca6897f3703f84d200042ffccd2" + "f691a7dfb7683703f04d200041b0cc006a200041a00d6a200041f0cd006a" + "102f200041f0cc006a200d200041f0cd006a102f200041b0cd006a200320" + "0041f0cd006a102f2011200041b0cc006a41c001104c1a2006200041b0ce" + "006a200041b0c3006a103f2009290300215620002903b00d215520004190" + "076a201541f002104c1a20384184016a2103024002400240024002400240" + "0340200341046b280200220204402003280200220b41046b280200220741" + "7871220d200241c0016c220241044108200741037122071b72490d022007" + "4100200d20024127724b1b0d03200b10040b20034190016a210320464101" + "6b22460d000b200028025422030440203841046b28020022024178712207" + "20034190016c220341044108200241037122021b72490d03200241002007" + "200341276a4b1b0d04203810040b20002802482203450d0b200541046b28" + "0200220241787122072003410674220341044108200241037122021b7249" + "0d0420024100200720034127724b1b0d05200510040c0b0b41f996c00041" + "2e41a897c0001011000b41b897c000412e41e897c0001011000b41f996c0" + "00412e41a897c0001011000b41b897c000412e41e897c0001011000b41f9" + "96c000412e41a897c0001011000b41b897c000412e41e897c0001011000b" + "41f4a2c000411f4194a3c0001021000b2018200341f4a1c0001010000b20" + "18200341e4a1c0001010000b203841046b28020022024178712207200341" + "90016c220341044108200241037122021b72490d02200241002007200341" + "276a4b1b0d03203810040b200028024822030440200541046b2802002202" + "41787122072003410674220341044108200241037122021b72490d042002" + "4100200720034127724b1b0d05200510040b42002156420121550b203120" + "5637030820312055370300203141106a20004190076a41f002104c1a2000" + "28023c22030440203341046b28020022024178712207200341c0016c2203" + "41044108200241037122021b72490d0520024100200720034127724b1b0d" + "06203310040b200028023022030440203b41046b28020022024178712207" + "200341e0006c220341044108200241037122021b72490d07200241002007" + "200341276a4b1b0d08203b10040b200041b0d1006a24000c080b41f996c0" + "00412e41a897c0001011000b41b897c000412e41e897c0001011000b41f9" + "96c000412e41a897c0001011000b41b897c000412e41e897c0001011000b" + "41f996c000412e41a897c0001011000b41b897c000412e41e897c0001011" + "000b41f996c000412e41a897c0001011000b41b897c000412e41e897c000" + "1011000b200141f0066a41f002104b1a200142003703e806200142013703" + "e006200141a00c6a200141e0066a104a0d03200141c00c6a20014180076a" + "104a0d03200141e00c6a200141a0076a104a0d03200141800d6a200141c0" + "076a104a0d03200141a00d6a200141e0076a104a0d03200141c00d6a2001" + "4180086a104a0d03200141e00d6a200141a0086a104a0d03200141800e6a" + "200141c0086a104a0d03200141a00e6a200141e0086a104a0d03200141c0" + "0e6a20014180096a104a0d03200141e00e6a200141a0096a104a0d032001" + "41800f6a200141c0096a104a1a0c030b2002450d05200641046b28020022" + "05417871221241044108200541037122051b20026a490d0c200541002012" + "200241276a4b1b0d0d200610040c050b20012802a00b2205450d04200820" + "05410674100e0c040b206a428080808010540d0020122005100e0b202041" + "c000100e2026450d0220352026410674100e0c020b4100410041dc91c000" + "1010000b20012802e01c1a0b205241046b2802002205417871220641c600" + "41ca00200541037122051b490d1420054100200641ea004f1b0d15205210" + "04201d41046b280200220541787141e40041e800200541037122061b490d" + "162006410020054188014f1b0d17201d1004200a41046b28020022054178" + "71221d418802418c02200541037122051b490d1820054100201d41ac024f" + "1b0d19200a1004200141c0206a240041010f0b000b230041206b22052400" + "200541003602182005410136020c200541a099c000360208200542043702" + "10200541086a41f88bc000101a000b41f996c000412e41a897c000101100" + "0b41b897c000412e41e897c0001011000b41f996c000412e41a897c00010" + "11000b41b897c000412e41e897c0001011000b41f996c000412e41a897c0" + "001011000b41b897c000412e41e897c0001011000b4120201241cc8fc000" + "1012000b418001201241dc8fc0001012000b41c001201241ec8fc0001012" + "000b41a002201241fc8fc0001012000b41a00241a002418c90c000101000" + "0b41a10241a102419c90c0001010000b41a20241a20241ac90c000101000" + "0b41a30241a30241bc90c0001010000b230041306b220224002002410436" + "0204200241643602002002410236020c200241b884c00036020820024202" + "3702142002200241046aad4280808080108437032820022002ad42808080" + "8010843703202002200241206a360210200241086a41cc90c000101a000b" + "2009201241cc90c0001012000b200120012d00a10f3a00e00641b89cc000" + "412b200141e0066a41988ec00041d892c0001013000b41a89cc000101400" + "0b41f996c000412e41a897c0001011000b41b897c000412e41e897c00010" + "11000b41f996c000412e41a897c0001011000b41b897c000412e41e897c0" + "001011000b41f996c000412e41a897c0001011000b41b897c000412e41e8" + "97c0001011000b962502087f017e02400240024002400240024002402000" + "41f4014d0440418ca9c000280200220341102000410b6a41f80371200041" + "0b491b220441037622017622004103710d0120044194a9c0002802004d0d" + "0720000d024190a9c00028020022000d030c070b2000410b6a2201417871" + "21044190a9c0002802002208450d06411f2107200041f4ffff074d044020" + "04410620014108766722006b7641017120004101746b413e6a21070b4100" + "20046b2101200741027441f4a5c0006a2802002203450440410021000c04" + "0b410021002004411920074101766b41002007411f471b74210503400240" + "200328020441787122062004490d00200620046b220620014f0d00200321" + "02200622010d0041002101200321000c060b200328021422062000200620" + "032005411d764104716a41106a2802002203471b200020061b2100200541" + "0174210520030d000b0c030b02402000417f7341017120016a2205410374" + "22004184a7c0006a22042000418ca7c0006a280200220128020822024704" + "402002200436020c200420023602080c010b418ca9c0002003417e200577" + "713602000b20012000410372360204200020016a22002000280204410172" + "360204200141086a0f0b0240200020017441022001742200410020006b72" + "7168220641037422014184a7c0006a22022001418ca7c0006a2802002200" + "28020822054704402005200236020c200220053602080c010b418ca9c000" + "2003417e200677713602000b20002004410372360204200020046a220520" + "0120046b2204410172360204200020016a20043602004194a9c000280200" + "2203044020034178714184a7c0006a2102419ca9c0002802002101027f41" + "8ca9c00028020022064101200341037674220371450440418ca9c0002003" + "20067236020020020c010b20022802080b21032002200136020820032001" + "36020c2001200236020c200120033602080b419ca9c00020053602004194" + "a9c0002004360200200041086a0f0b20006841027441f4a5c0006a280200" + "220228020441787120046b21012002210302400340024002402002280210" + "22000d00200228021422000d002003280218210702400240200320032802" + "0c2200460440200341144110200328021422001b6a28020022020d014100" + "21000c020b20032802082202200036020c200020023602080c010b200341" + "146a200341106a20001b21050340200521062002220041146a200041106a" + "200028021422021b210520004114411020021b6a28020022020d000b2006" + "41003602000b2007450d032003200328021c41027441f4a5c0006a220228" + "020047044020074110411420072802102003461b6a20003602002000450d" + "040c020b2002200036020020000d014190a9c0004190a9c000280200417e" + "200328021c77713602000c030b200028020441787120046b220220012001" + "20024b22021b21012000200320021b2103200021020c010b0b2000200736" + "021820032802102202044020002002360210200220003602180b20032802" + "142202450d0020002002360214200220003602180b02400240200141104f" + "044020032004410372360204200320046a22042001410172360204200120" + "046a20013602004194a9c0002802002205450d0120054178714184a7c000" + "6a2102419ca9c0002802002100027f418ca9c00028020022064101200541" + "037674220571450440418ca9c000200520067236020020020c010b200228" + "02080b2105200220003602082005200036020c2000200236020c20002005" + "3602080c010b2003200120046a2200410372360204200020036a22002000" + "2802044101723602040c010b419ca9c00020043602004194a9c000200136" + "02000b200341086a0f0b2000200272450440410021024102200774220041" + "0020006b722008712200450d0320006841027441f4a5c0006a2802002100" + "0b2000450d010b03402002200020022000280204417871220320046b2206" + "20014922071b200320044922051b210220012006200120071b20051b2101" + "20002802102203047f20030520002802140b22000d000b0b2002450d0020" + "044194a9c00028020022004d2001200020046b4f710d0020022802182107" + "024002402002200228020c2200460440200241144110200228021422001b" + "6a28020022030d01410021000c020b20022802082203200036020c200020" + "033602080c010b200241146a200241106a20001b21050340200521062003" + "220041146a200041106a200028021422031b210520004114411020031b6a" + "28020022030d000b200641003602000b02402007450d0002402002200228" + "021c41027441f4a5c0006a22032802004704402007411041142007280210" + "2002461b6a20003602002000450d020c010b2003200036020020000d0041" + "90a9c0004190a9c000280200417e200228021c77713602000c010b200020" + "0736021820022802102203044020002003360210200320003602180b2002" + "2802142203450d0020002003360214200320003602180b0240200141104f" + "044020022004410372360204200220046a22042001410172360204200120" + "046a200136020020014180024f0440411f210020044200370210200141ff" + "ffff074d04402001410620014108766722006b7641017120004101746b41" + "3e6a21000b2004200036021c200041027441f4a5c0006a21034101200074" + "22054190a9c0002802007145044020032004360200200420033602182004" + "200436020c200420043602084190a9c0004190a9c0002802002005723602" + "000c030b0240024020012003280200220528020441787146044020052100" + "0c010b2001411920004101766b41002000411f471b742103034020052003" + "411d764104716a41106a22062802002200450d0220034101742103200021" + "0520002802044178712001470d000b0b20002802082201200436020c2000" + "2004360208200441003602182004200036020c200420013602080c030b20" + "062004360200200420053602182004200436020c200420043602080c020b" + "200141f801714184a7c0006a2100027f418ca9c000280200220341012001" + "41037674220171450440418ca9c000200120037236020020000c010b2000" + "2802080b2101200020043602082001200436020c2004200036020c200420" + "013602080c010b2002200120046a2200410372360204200020026a220020" + "002802044101723602040b200241086a0f0b024002400240024002400240" + "20044194a9c00028020022004b044020044198a9c00028020022004f0440" + "41002100200441af80046a220241107640002201417f4622050d07200141" + "10742203450d0741a4a9c000410020024180807c7120051b220641a4a9c0" + "002802006a220036020041a8a9c00041a8a9c00028020022012000200020" + "01491b3602000240024041a0a9c0002802002201044041f4a6c000210003" + "4020002802002202200028020422056a2003460d02200028020822000d00" + "0b0c020b41b0a9c00028020022004100200020034d1b45044041b0a9c000" + "20033602000b41b4a9c00041ff1f36020041f8a6c000200636020041f4a6" + "c00020033602004190a7c0004184a7c0003602004198a7c000418ca7c000" + "360200418ca7c0004184a7c00036020041a0a7c0004194a7c00036020041" + "94a7c000418ca7c00036020041a8a7c000419ca7c000360200419ca7c000" + "4194a7c00036020041b0a7c00041a4a7c00036020041a4a7c000419ca7c0" + "0036020041b8a7c00041aca7c00036020041aca7c00041a4a7c000360200" + "41c0a7c00041b4a7c00036020041b4a7c00041aca7c00036020041c8a7c0" + "0041bca7c00036020041bca7c00041b4a7c0003602004180a7c000410036" + "020041d0a7c00041c4a7c00036020041c4a7c00041bca7c00036020041cc" + "a7c00041c4a7c00036020041d8a7c00041cca7c00036020041d4a7c00041" + "cca7c00036020041e0a7c00041d4a7c00036020041dca7c00041d4a7c000" + "36020041e8a7c00041dca7c00036020041e4a7c00041dca7c00036020041" + "f0a7c00041e4a7c00036020041eca7c00041e4a7c00036020041f8a7c000" + "41eca7c00036020041f4a7c00041eca7c0003602004180a8c00041f4a7c0" + "0036020041fca7c00041f4a7c0003602004188a8c00041fca7c000360200" + "4184a8c00041fca7c0003602004190a8c0004184a8c0003602004198a8c0" + "00418ca8c000360200418ca8c0004184a8c00036020041a0a8c0004194a8" + "c0003602004194a8c000418ca8c00036020041a8a8c000419ca8c0003602" + "00419ca8c0004194a8c00036020041b0a8c00041a4a8c00036020041a4a8" + "c000419ca8c00036020041b8a8c00041aca8c00036020041aca8c00041a4" + "a8c00036020041c0a8c00041b4a8c00036020041b4a8c00041aca8c00036" + "020041c8a8c00041bca8c00036020041bca8c00041b4a8c00036020041d0" + "a8c00041c4a8c00036020041c4a8c00041bca8c00036020041d8a8c00041" + "cca8c00036020041cca8c00041c4a8c00036020041e0a8c00041d4a8c000" + "36020041d4a8c00041cca8c00036020041e8a8c00041dca8c00036020041" + "dca8c00041d4a8c00036020041f0a8c00041e4a8c00036020041e4a8c000" + "41dca8c00036020041f8a8c00041eca8c00036020041eca8c00041e4a8c0" + "003602004180a9c00041f4a8c00036020041f4a8c00041eca8c000360200" + "4188a9c00041fca8c00036020041fca8c00041f4a8c00036020041a0a9c0" + "0020033602004184a9c00041fca8c0003602004198a9c000200641286b22" + "0036020020032000410172360204200020036a412836020441aca9c00041" + "808080013602000c080b200120034f0d0020012002490d00200028020c45" + "0d030b41b0a9c00041b0a9c0002802002200200320002003491b36020020" + "0320066a210241f4a6c00021000240024003402002200028020022054704" + "40200028020822000d010c020b0b200028020c450d010b41f4a6c0002100" + "034002402001200028020022024f04402001200220002802046a2202490d" + "010b200028020821000c010b0b41a0a9c00020033602004198a9c0002006" + "41286b220036020020032000410172360204200020036a412836020441ac" + "a9c00041808080013602002001200241206b41787141086b220020002001" + "41106a491b2205411b36020441f4a6c0002902002109200541106a41fca6" + "c0002902003702002005200937020841f8a6c000200636020041f4a6c000" + "200336020041fca6c000200541086a3602004180a7c00041003602002005" + "411c6a2100034020004107360200200041046a22002002490d000b200120" + "05460d0720052005280204417e713602042001200520016b220041017236" + "02042005200036020020004180024f04402001200010350c080b200041f8" + "01714184a7c0006a2102027f418ca9c00028020022034101200041037674" + "220071450440418ca9c000200020037236020020020c010b20022802080b" + "2100200220013602082000200136020c2001200236020c20012000360208" + "0c070b200020033602002000200028020420066a36020420032004410372" + "3602042005410f6a41787141086b2202200320046a22006b2101200241a0" + "a9c000280200460d032002419ca9c000280200460d042002280204220441" + "037141014604402002200441787122041016200120046a2101200220046a" + "220228020421040b20022004417e71360204200020014101723602042000" + "20016a200136020020014180024f04402000200110350c060b200141f801" + "714184a7c0006a2104027f418ca9c0002802002202410120014103767422" + "0171450440418ca9c000200120027236020020040c010b20042802080b21" + "01200420003602082001200036020c2000200436020c200020013602080c" + "050b4198a9c000200020046b220136020041a0a9c00041a0a9c000280200" + "220020046a22023602002002200141017236020420002004410372360204" + "200041086a21000c060b419ca9c00028020021010240200020046b220241" + "0f4d0440419ca9c00041003602004194a9c0004100360200200120004103" + "72360204200020016a220020002802044101723602040c010b4194a9c000" + "2002360200419ca9c000200120046a220336020020032002410172360204" + "200020016a2002360200200120044103723602040b200141086a0f0b2000" + "200520066a36020441a0a9c00041a0a9c0002802002200410f6a41787122" + "0141086b22023602004198a9c000200020016b4198a9c00028020020066a" + "22016a41086a220336020020022003410172360204200020016a41283602" + "0441aca9c00041808080013602000c030b41a0a9c00020003602004198a9" + "c0004198a9c00028020020016a2201360200200020014101723602040c01" + "0b419ca9c00020003602004194a9c0004194a9c00028020020016a220136" + "020020002001410172360204200020016a20013602000b200341086a0f0b" + "410021004198a9c000280200220120044d0d004198a9c000200120046b22" + "0136020041a0a9c00041a0a9c000280200220020046a2202360200200220" + "0141017236020420002004410372360204200041086a0f0b20000bc60602" + "037f037e230041a0026b22032400200341286a41c100104b210420034118" + "6a41f08bc000290300370300200341106a41e88bc0002903003703002003" + "41086a41e08bc00029030037030020034200370320200341d88bc0002903" + "003703000240200241c0004f0440200320024106762205ad370320200320" + "01200510272004200120024140716a2002413f712202104c1a0c010b2004" + "20012002104c1a0b200320023a0068200341f0006a200341f000104c1a20" + "034198016a220120032d00d80122026a22044180013a00002002ad220742" + "3b862003290390012206420986220820074203868422074280fe03834228" + "86842007428080fc0783421886200742808080f80f834208868484200642" + "018642808080f80f832006420f88428080fc0783842006421f884280fe03" + "8320084238888484842106024002402002413f470440200441016a200241" + "3f73104b1a200241387341074b0d010b200341f0006a2001410110272003" + "4190026a420037030020034188026a420037030020034180026a42003703" + "00200341f8016a4200370300200341f0016a4200370300200341e8016a42" + "00370300200342003703e0012003200637039802200341f0006a200341e0" + "016a410110270c010b200320063703d001200341f0006a2001410110270b" + "2000200328028c01220241187420024180fe037141087472200241087641" + "80fe03712002411876727236001c20002003280288012202411874200241" + "80fe03714108747220024108764180fe0371200241187672723600182000" + "200328028401220241187420024180fe03714108747220024108764180fe" + "0371200241187672723600142000200328028001220241187420024180fe" + "03714108747220024108764180fe03712002411876727236001020002003" + "28027c220241187420024180fe03714108747220024108764180fe037120" + "02411876727236000c20002003280278220241187420024180fe03714108" + "747220024108764180fe0371200241187672723600082000200328027422" + "0241187420024180fe03714108747220024108764180fe03712002411876" + "727236000420002003280270220241187420024180fe0371410874722002" + "4108764180fe037120024118767272360000200341a0026a24000bee0201" + "077f024020012802042202450440410021020c010b200128021021062001" + "200220022001280208220320022003491b22046b36020420012001280200" + "220720046a360200027f0240024002400240027f02400240024020030440" + "200128020c2208410174210520072d0000220241c1006b41ff0171410649" + "0d01200241e1006b41ff01714106490d02200241306b220341ff0171410a" + "490d0320050c040b4100410041848bc0001010000b200241376b21030c01" + "0b200241d7006b21030b20044101460d0320072d0001220241c1006b41ff" + "01714106490d01200241e1006b41ff01714106490d02200241306b220441" + "ff0171410a490d0420054101720b21032006200241ff0171360200200620" + "0541807e71200341ff01717236020441000c040b200241376b21040c020b" + "200241d7006b21040c010b4101410141948bc0001010000b200420034104" + "7472210341010b21022001200841016a36020c0b200020033a0001200020" + "023a00000bb40801057f200041086b2201200041046b2802002203417871" + "22006a21020240024020034101710d002003410271450d01200128020022" + "0320006a2100200120036b2201419ca9c000280200460440200228020441" + "03714103470d014194a9c000200036020020022002280204417e71360204" + "20012000410172360204200220003602000f0b2001200310160b02400240" + "0240024002400240024020022802042203410271450440200241a0a9c000" + "280200460d022002419ca9c000280200460d032002200341787122031016" + "2001200020036a2200410172360204200020016a20003602002001419ca9" + "c000280200470d014194a9c00020003602000f0b20022003417e71360204" + "20012000410172360204200020016a20003602000b2000418002490d0241" + "1f210220014200370210200041ffffff074d044020004106200041087667" + "22026b7641017120024101746b413e6a21020b2001200236021c20024102" + "7441f4a5c0006a2103410120027422044190a9c000280200710d03200320" + "01360200200120033602182001200136020c200120013602084190a9c000" + "4190a9c0002802002004723602000c040b41a0a9c00020013602004198a9" + "c0004198a9c00028020020006a220036020020012000410172360204419c" + "a9c00028020020014604404194a9c0004100360200419ca9c00041003602" + "000b200041aca9c00028020022044d0d0541a0a9c0002802002200450d05" + "410021034198a9c00028020022054129490d0441f4a6c000210103402000" + "200128020022024f04402000200220012802046a490d060b200128020821" + "010c000b000b419ca9c00020013602004194a9c0004194a9c00028020020" + "006a220036020020012000410172360204200020016a20003602000f0b20" + "0041f801714184a7c0006a2102027f418ca9c00028020022034101200041" + "037674220071450440418ca9c000200020037236020020020c010b200228" + "02080b2100200220013602082000200136020c2001200236020c20012000" + "3602080f0b02400240200020032802002204280204417871460440200421" + "020c010b2000411920024101766b41002002411f471b7421030340200420" + "03411d764104716a41106a22052802002202450d02200341017421032002" + "210420022802044178712000470d000b0b20022802082200200136020c20" + "022001360208200141003602182001200236020c200120003602080c010b" + "20052001360200200120043602182001200136020c200120013602080b41" + "00210141b4a9c00041b4a9c00028020041016b220036020020000d0141fc" + "a6c000280200220004400340200141016a2101200028020822000d000b0b" + "41b4a9c00041ff1f2001200141ff1f4d1b3602000f0b41fca6c000280200" + "220104400340200341016a2103200128020822010d000b0b41b4a9c00041" + "ff1f2003200341ff1f4d1b360200200420054f0d0041aca9c000417f3602" + "000b0b810802077f067e230041c0026b2203240020034198026a20024118" + "6a290300220a37030020034190026a200241106a290300220d3703002003" + "200241086a290300220b3703880220032002290300220c3703800242ddb0" + "858ce8b691a8b87f210e20034180026a200c200b200d200a42c7faf3c3ed" + "82a3903c428d95c7c396d2dac0977f102b200341b0026a2204200141106a" + "290300220a370300200341b8026a2205200141186a290300220d37030020" + "032001290300220b3703a0022003200141086a290300220c3703a8022003" + "41a0026a200b200c200a200d42c7faf3c3ed82a3903c428d95c7c396d2da" + "c0977f102b200341a0026a200b200c200a200d42c7faf3c3ed82a3903c42" + "8d95c7c396d2dac0977f102b02400240024020032903a002220a42037c22" + "0c200a54ad220a20032903a8027c220b200a54ad220a20042903007c220d" + "42ddb0858ce8b691a8b87f852005290300200a200d56ad7c220a42a9c0c6" + "89aece93b2308584500440200c42c7faf3c3ed82a3903c54200b428d95c7" + "c396d2dac0977f54200b428d95c7c396d2dac0977f511b450d0242a9c0c6" + "89aece93b230210a0c010b200d42deb0858ce8b691a8b87f54200a42a9c0" + "c689aece93b23054200a42a9c0c689aece93b230511b450d01200d210e0b" + "200c210f200b210c0c010b200a200d200b200c42c7faf3c3ed82a3903c7d" + "220f200c5aad220e7d220a42f3eab8bce9ada5bfe8007c220c200a54ad20" + "0b200e54ad7d7c220b200d54ad200b42a2cffaf397c9eed7c7007c220e20" + "0b54ad7c50ad7d42a9c0c689aece93b2307d210a0b2003200e3703b00120" + "03200f3703a0012003200a3703b8012003200c3703a8012000027f200341" + "80026a200341a0016a104a45044020034180016a22042002290300370100" + "20034198016a2205200241186a29030037010020034190016a2206200241" + "106a29030037010020034188016a2207200241086a290300370100200341" + "f8006a2202200141186a290300370100200341f0006a2208200141106a29" + "0300370100200341e8006a2209200141086a290300370100200320012903" + "00370160200341ca006a22012005290100370100200341c2006a22052006" + "2901003701002003413a6a22062007290100370100200341326a22072004" + "2901003701002003412a6a22042002290100370100200341226a22022008" + "2901003701002003411a6a22082009290100370100200320032901603701" + "12200041c8006a2001290100370100200041406b20052901003701002000" + "41386a2006290100370100200041306a2007290100370100200041286a20" + "04290100370100200041206a2002290100370100200041186a2008290100" + "3701002000200329011237011041000c010b200041003a000141010b3a00" + "00200341c0026a24000baa0401047e2001290010220242388620024280fe" + "0383422886842002428080fc0783421886200242808080f80f8342088684" + "84200242088842808080f80f832002421888428080fc0783842002422888" + "4280fe038320024238888484842104200141186a29000022024238862002" + "4280fe0383422886842002428080fc0783421886200242808080f80f8342" + "08868484200242088842808080f80f832002421888428080fc0783842002" + "4228884280fe0383200242388884848421050240417f2001290000220242" + "b0c8b99297bc8cd02985200141086a290000220342b8a195b29bb0a0acdd" + "008584420052200342388620034280fe0383422886842003428080fc0783" + "421886200342808080f80f834208868484200342088842808080f80f8320" + "03421888428080fc07838420034228884280fe0383200342388884848422" + "0342ddb0858ce8b691a8b87f54200242388620024280fe03834228868420" + "02428080fc0783421886200242808080f80f834208868484200242088842" + "808080f80f832002421888428080fc07838420024228884280fe03832002" + "423888848484220242a9c0c689aece93b23054200242a9c0c689aece93b2" + "30511b1b2201417f470440200141ff01710d01200542c6faf3c3ed82a390" + "3c562004428d95c7c396d2dac0977f562004428d95c7c396d2dac0977f51" + "1b0d010b2000200337032020002005370310200020023703282000200437" + "0318200041003a00000f0b200041023a0001200041013a00000bb40c0204" + "7f027e230041d0066b2203240020034188036a200241386a290300370300" + "20034180036a200241306a290300370300200341f8026a200241286a2903" + "00370300200341f0026a2204200241206a290300370300200341e8026a20" + "0241186a290300370300200341e0026a200241106a290300370300200320" + "022903003703d0022003200241086a2903003703d802200341d0026a2002" + "2002102f200341a0036a200141106a290300370300200341a8036a200141" + "186a290300370300200341b0036a200141206a290300370300200341b803" + "6a200141286a290300370300200341c0036a200141306a29030037030020" + "0341c8036a200141386a2903003703002003200129030037039003200320" + "0141086a2903003703980320034190036a20012001102f200341d0006a20" + "034190036a2001102f200342d4fdc3d783f6c4cb003703c805200342f4fb" + "e3f6def5ab964d3703c005200342d2b0b4a9ce90e8a7a77f3703b8052003" + "42d2ab8caee8a0afd1643703b005200342aed5e2f58ca8a78a2b3703a805" + "200342c3d581df919386df817f3703a005200342a3dfefced5bcb1dab57f" + "37039805200342e5f184a5c2dbf9b33237039005200341106a200341d000" + "6a20034190056a103002400240200341d0026a200341106a104a45044020" + "04200341306a104a450d010b200041013b01000c010b200341c8026a4200" + "370300200341c0026a4200370300200341b8026a4200370300200341b002" + "6a4200370300200341a8026a4200370300200341a0016a200141106a2903" + "00370300200341a8016a200141186a290300370300200341b0016a200141" + "206a290300370300200341b8016a200141286a290300370300200341c001" + "6a200141306a290300370300200341c8016a200141386a29030037030020" + "0342003703a00220032001290300370390012003200141086a2903003703" + "980120034188026a200241386a29030037030020034180026a200241306a" + "290300370300200341f8016a200241286a290300370300200341f0016a20" + "0241206a290300370300200341e8016a200241186a290300370300200341" + "e0016a200241106a290300370300200341d8016a200241086a2903003703" + "0020034201370390022003420037039802200320022903003703d0012003" + "41e0036a4200370300200341e8036a4200370300200341f0036a42003703" + "00200341f8036a420037030020034180046a420037030020034188046a42" + "00370300200342003703d003200342003703d803200342a9c0c689aece93" + "b230370368200342ddb0858ce8b691a8b87f37036020034291e1e5cd8789" + "fa992837035820034280808080bfb2fdf0c300370350200341a0046a41f0" + "00104b1a2003420037039804200342013703900441ff0121040340200320" + "0441ff0071104f200341086a290300200341d0006a200441037641f0ffff" + "ff01716a2206290308832107200329030020062903008321082005044020" + "034190056a200341d0036a1043200341d0036a20034190056a41c001104c" + "1a0b2007200884420052044020034190056a200341d0036a20034190016a" + "1044200341d0036a20034190056a41c001104c1a410121050b200441016b" + "2204417f470d000b20034190056a200341d0036a20034190016a10440240" + "20032903900620034198066a290300844200520d0020032903a006200341" + "a8066a290300844200520d0020032903b006200341b8066a290300844200" + "520d0020032903c006200341c8066a290300844200520d00200341c8056a" + "200141386a290300370300200341c0056a200141306a2903003703002003" + "41b8056a200141286a290300370300200341b0056a200141206a29030037" + "0300200341a8056a200141186a290300370300200341a0056a200141106a" + "290300370300200341d8056a200241086a290300370300200341e0056a20" + "0241106a290300370300200341e8056a200241186a290300370300200341" + "f0056a200241206a290300370300200341f8056a200241286a2903003703" + "0020034180066a200241306a29030037030020034188066a200241386a29" + "03003703002003200129030037039005200320022903003703d005200320" + "0141086a29030037039805200041106a20034190056a418001104c1a2000" + "41003a00000c010b20004181023b01000b200341d0066a24000ba8150207" + "7f137e230041a0016b22022400200241106a2001102a20022d0011210620" + "022d001021072000027f024020022d0030220841c101470440200235011a" + "2109200233011e210a2002290112211620022903202114200241d8006a22" + "01200241286a29030022173703002002201437035020022009200a422086" + "842219421086201642308884220937034820022007ad42ff018320164210" + "862006ad42ff01834208868484220a37034042ddb0858ce8b691a8b87f21" + "0f200241406b200a20092014201742c7faf3c3ed82a3903c428d95c7c396" + "d2dac0977f102b200241406b200a20092014201742c7faf3c3ed82a3903c" + "428d95c7c396d2dac0977f102b0240024002402002290340220942037c22" + "0b200954ad220920022903487c220a200954ad220c20022903507c220942" + "ddb0858ce8b691a8b87f8520012903002009200c54ad7c220e42a9c0c689" + "aece93b2308584500440200b42c7faf3c3ed82a3903c54200a428d95c7c3" + "96d2dac0977f54200a428d95c7c396d2dac0977f511b450d0242a9c0c689" + "aece93b230210e0c010b200942deb0858ce8b691a8b87f54200e42a9c0c6" + "89aece93b23054200e42a9c0c689aece93b230511b450d012009210f0b20" + "0b2110200a210d0c010b200e2009200a200b42c7faf3c3ed82a3903c7d22" + "10200b5aad220b7d220c42f3eab8bce9ada5bfe8007c220d200c54ad200a" + "200b54ad7d7c220a200954ad200a42a2cffaf397c9eed7c7007c220f200a" + "54ad7c50ad7d42a9c0c689aece93b2307d210e0b4190aac0002d00004102" + "470440230041e0006b220324004190aac0004190aac0002d000022044101" + "20041b3a00000240200404400340024002400240200441ff017141016b0e" + "03000501020b03404190aac0002d000022044101460d000b024002402004" + "41016b0e03000601030b000b41a49bc000412641cc9bc0001011000b41a8" + "9ac000410d41949bc0001011000b4190aac0004190aac0002d0000220441" + "0120041b3a000020040d000b0b200341186a220442a9c0c689aece93b230" + "370300200341106a220542ddb0858ce8b691a8b87f3703002003428d95c7" + "c396d2dac0977f370308200342c4faf3c3ed82a3903c370300200341386a" + "220142003703002003420037033020034200370328200342043703202003" + "42a9c0c689aece93b230370358200342ddb0858ce8b691a8b87f37035020" + "03428d95c7c396d2dac0977f370348200342c7faf3c3ed82a3903c370340" + "200341206a200341406b103a200320032903202003290328200329033020" + "0129030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b4190aa" + "c00041023a00004188aac00020042903003703004180aac0002005290300" + "37030041f8a9c000200329030837030041f0a9c00020032903003703000b" + "200341e0006a24000b20024198016a4188aac00029030037030020024190" + "016a4180aac000290300370300200241f8a9c00029030037038801200241" + "f0a9c00029030037038001420021094201210a41ff0121014200210b4200" + "210c0340200220024180016a200141037641f0ffffff01716a2205290300" + "2005290308200141ff0071104e200241286a2205200b3703002002200937" + "03202002200c3703182002200a370310200241106a200a200c2009200b42" + "c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2005290300210b20" + "0229032021092002290318210c2002290310210a20022802004101710440" + "2005200b370300200220093703202002200a3703102002200c3703182002" + "41106a2010200d200f200e42c7faf3c3ed82a3903c428d95c7c396d2dac0" + "977f102b2005290300210b2002290318210c200229032021092002290310" + "210a0b200141016b2201417f470d000b200241286a2201200b3703002002" + "20093703202002200c3703182002200a370310200241106a2010200d200f" + "200e42c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2002200b37" + "0378200220093703702002200c3703682002200a370360200241e0006a20" + "02290310220e2002290318220b2002290320220c2001290300220a42c7fa" + "f3c3ed82a3903c428d95c7c396d2dac0977f102b41e0a9c0002d00004102" + "470440102c0b20024198016a41d8a9c00029030037030020024190016a41" + "d0a9c000290300370300200241c8a9c00029030037038801200241c0a9c0" + "002903003703800141e0a9c0002d00004102470440102c0b20024180016a" + "420142004200420041c0a9c00029030041c8a9c00029030041d0a9c00029" + "030041d8a9c000290300102d2002290388012110200229038001210d0240" + "0240417f200229039001220f42ddb0858ce8b691a8b87f8520024198016a" + "290300220942a9c0c689aece93b2308584420052200f42ddb0858ce8b691" + "a8b87f54200942a9c0c689aece93b23054200942a9c0c689aece93b23051" + "1b1b2201417f470440200141ff01710d01200d42c7faf3c3ed82a3903c54" + "2010428d95c7c396d2dac0977f542010428d95c7c396d2dac0977f511b45" + "0d010b2002200f3703202002200d37031020022009370328200220103703" + "18027e0240200241e0006a200241106a104a0440420021104200210f4200" + "2109200c200e84200a200b8484420052044042c7faf3c3ed82a3903c200e" + "7d2115427f4200427f4200200e42788342c7faf3c3ed82a3903c561b2209" + "2009200b54ad7d2009200b7d220942f3eab8bce9ada5bfe8007d22102009" + "54ad7c42017c2209200c7d220d42a4cffaf397c9eed7c7007d220f200d54" + "ad2009200c54ad7d427f511b200a7d42a9c0c689aece93b2307c21090b20" + "0e201554200b201054200b2010511b200c200f542009200a562009200a51" + "1b200c200f852009200a8584221b501b4101460d0120152111200f211220" + "09210d200e211a200b2118200c210f200a210920100c020b200041033a00" + "010c050b200e2111200c2112200a210d2015211a20102118200b0b211302" + "40024002400240417f201b420052200f2012562009200d562009200d511b" + "1b2201047f2001052011201a54201320185420132018511b0d01200e2015" + "85200b201085844200520b4101460d010b200841c001470d014200210942" + "00210a4200210b4200210c2011201284200d20138484500d04427f420042" + "7f4200201142788342c7faf3c3ed82a3903c561b22092009201354ad7d20" + "0920137d220942f3eab8bce9ada5bfe8007d220a200954ad7c42017c2209" + "20127d220c42a4cffaf397c9eed7c7007d220b200c54ad2009201254ad7d" + "427f511b200d7d42a9c0c689aece93b2307c210c42c7faf3c3ed82a3903c" + "20117d21090c040b2008418001460d010b201121092013210a2012210b20" + "0d210c0c020b420021094200210a4200210b4200210c2011201284200d20" + "138484500d01427f4200427f4200201142788342c7faf3c3ed82a3903c56" + "1b22092009201354ad7d200920137d220942f3eab8bce9ada5bfe8007d22" + "0a200954ad7c42017c220920127d220c42a4cffaf397c9eed7c7007d220b" + "200c54ad2009201254ad7d427f511b200d7d42a9c0c689aece93b2307c21" + "0c42c7faf3c3ed82a3903c20117d21090c010b41e09dc0001020000b2000" + "2014370320200020163701122000200b3703402000200937033020002006" + "3a0011200020073a0010200020193e011a200020173703282000200c3703" + "482000200a3703382000411e6a20194220883d010041000c020b20002006" + "3a0002200020073a00010b41010b3a0000200241a0016a24000ba02f0208" + "7f187e230041c0086b22022400200241f0046a2001102a20022d00f10421" + "0620022d00f0042107024002400240024020022d009005220941c1014704" + "4020024198016a220520022901fa04370300200241a6016a220420024188" + "056a2203290100370100200241a0016a220820024182056a290100370300" + "200220022901f20437039001200241f0046a200141206a102e20022d00f0" + "04450440200241d5076a2003290300220c37000020024188016a20024198" + "056a290300220b37030020024180016a20024190056a290300220a370300" + "200241c8006a200b370300200241406b200a370300200220022903800522" + "0b3703702002200c3703782002200b3703302002200c370338200220063a" + "0051200220073a0050200241e8006a22012004290100370100200241e200" + "6a2008290300370100200241da006a200529030037010020022002290390" + "01370152200941c000460d0220024180026a200241406b29030037030020" + "024188026a200241c8006a29030037030020024190026a200241d0006a29" + "030037030020024198026a200241d8006a290300370300200241a0026a20" + "0241e0006a290300370300200241a8026a20012903003703002002200229" + "03303703f001200220022903383703f801200241f0016a200241306a2002" + "41306a102f20024180086a200241f0016a200241306a102f200242d4fdc3" + "d783f6c4cb003703a805200242f4fbe3f6def5ab964d3703a005200242d2" + "b0b4a9ce90e8a7a77f37039805200242d2ab8caee8a0afd1643703900520" + "0242aed5e2f58ca8a78a2b37038805200242c3d581df919386df817f3703" + "8005200242a3dfefced5bcb1dab57f3703f804200242e5f184a5c2dbf9b3" + "323703f004200241b0016a20024180086a200241f0046a103041f0aac000" + "2d00004102470440230041e0006b2203240041f0aac00041f0aac0002d00" + "002204410120041b3a00000240200404400340024002400240200441ff01" + "7141016b0e03000501020b034041f0aac0002d000022044101460d000b02" + "400240200441016b0e03000601030b000b41a49bc000412641cc9bc00010" + "11000b41a89ac000410d41949bc0001011000b41f0aac00041f0aac0002d" + "00002204410120041b3a000020040d000b0b200341186a220442a9c0c689" + "aece93b230370300200341106a220842ddb0858ce8b691a8b87f37030020" + "03428d95c7c396d2dac0977f370308200342c4faf3c3ed82a3903c370300" + "200341386a22014200370300200342003703302003420037032820034204" + "370320200342a9c0c689aece93b230370358200342ddb0858ce8b691a8b8" + "7f3703502003428d95c7c396d2dac0977f370348200342c7faf3c3ed82a3" + "903c370340200341206a200341406b103a20032003290320200329032820" + "03290330200129030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f" + "102b41f0aac00041023a000041e8aac000200429030037030041e0aac000" + "200829030037030041d8aac000200329030837030041d0aac00020032903" + "003703000b200341e0006a24000b200241c8046a41e8aac0002903003703" + "00200241c0046a41e0aac000290300370300200241d8aac0002903003703" + "b804200241d0aac0002903003703b0044200210c4201210b41ff01210120" + "0241a8076a2104200241b8076a21034200210a0340200241206a200241b0" + "046a200141037641f0ffffff01716a22052903002005290308200141ff00" + "71104e2002200a3703f8072002200c3703f0072002200f3703e807200220" + "0e3703e0072002200d3703d807200220103703d007200220113703c80720" + "02200b3703c0072002200a3703b8082002200c3703b0082002200f3703a8" + "082002200e3703a0082002200d3703980820022010370390082002201137" + "0388082002200b370380082002280220210520024180076a200241c0076a" + "20024180086a102f20024198076a290300210d2004290300210f20032903" + "00210a2002290388072111200229038007210b2002290390072110200229" + "03a007210e20022903b007210c200541017104402002200a3703b8082002" + "200c3703b0082002200f3703a8082002200e3703a0082002200d37039808" + "200220103703900820022011370388082002200b37038008200241c0076a" + "20024180086a200241b0016a102f200241e8076a290300210f200241f807" + "6a290300210a20022903c007210b20022903d007211020022903e007210e" + "20022903f007210c20022903c8072111200241d8076a290300210d0b2001" + "41016b2201417f470d000b2002200c3703e0022002200e3703d002200220" + "103703c0022002200b3703b0022002200a3703e8022002200f3703d80220" + "02200d3703c802200220113703b802200241f0026a200241b0026a200241" + "b0016a102f200241b0036a200241b0026a200241f0026a102f41c0aac000" + "2d0000410247044041c0aac00041c0aac0002d00002201410120011b3a00" + "000240200104400340024002400240200141016b0e03000501020b034041" + "c0aac0002d000022014101460d000b02400240200141016b0e0300060103" + "0b000b41a49bc000412641cc9bc0001011000b41a89ac000410d41949bc0" + "001011000b41c0aac00041c0aac0002d00002201410120011b3a00002001" + "0d000b0b41b8aac00042a9c0c689aece93b23037030041b0aac00042ddb0" + "858ce8b691a8b87f37030041a8aac000428d95c7c396d2dac0977f370300" + "41a0aac00042c7faf3c3ed82a3903c37030041c0aac00041023a00000b0b" + "200241d8066a41b8aac000290300370300200241d0066a41b0aac0002903" + "00370300200241a8aac0002903003703c806200241a0aac0002903003703" + "c0064200210c4201210b41ff012101200241a8076a2104200241b8076a21" + "034200210a4200210e4200210f420021104200210d420021110340200241" + "106a200241c0066a200141037641f0ffffff01716a220529030020052903" + "08200141ff0071104e2002200a3703f8072002200c3703f0072002200f37" + "03e8072002200e3703e0072002200d3703d807200220103703d007200220" + "113703c8072002200b3703c0072002200a3703b8082002200c3703b00820" + "02200f3703a8082002200e3703a0082002200d3703980820022010370390" + "0820022011370388082002200b370380082002280210210520024180076a" + "200241c0076a20024180086a102f20024198076a290300210d2004290300" + "210f2003290300210a2002290388072111200229038007210b2002290390" + "07211020022903a007210e20022903b007210c200541017104402002200a" + "3703b8082002200c3703b0082002200f3703a8082002200e3703a0082002" + "200d37039808200220103703900820022011370388082002200b37038008" + "200241c0076a20024180086a200241b0036a102f200241e8076a29030021" + "0f200241f8076a290300210a20022903c007210b20022903d00721102002" + "2903e007210e20022903f007210c20022903c8072111200241d8076a2903" + "00210d0b200141016b2201417f470d000b2002200c3703b0082002200e37" + "03a00820022010370390082002200b370380082002200a3703b808200220" + "0f3703a8082002200d370398082002201137038808200241f0036a200241" + "80086a200241b0036a102f200241a8086a22014200370300200241b0086a" + "22054200370300200241b8086a22044200370300200242a9c0c689aece93" + "b23037039808200242ddb0858ce8b691a8b87f370390082002428d95c7c3" + "96d2dac0977f37038808200242c6faf3c3ed82a3903c3703800820024200" + "3703a008200241a0086a21030240200241f0036a20024180086a104a4504" + "4020024190046a2003104a450d010b200142003703002005420037030020" + "044200370300200242a9c0c689aece93b23037039808200242ddb0858ce8" + "b691a8b87f370390082002428d95c7c396d2dac0977f37038808200242c6" + "faf3c3ed82a3903c37038008200242003703a008200241b0036a20024180" + "086a104a450440200241d0036a2003104a450d050b4200210c2002419808" + "6a4200370300200241a0086a4200370300200241a8086a42003703002002" + "41b0086a4200370300200241b8086a420037030020024200370388084201" + "210b20024201370380082002420037039008200241c0066a200241b0036a" + "20024180086a103041a0abc0002d00004102470440230041e0006b220324" + "0041a0abc00041a0abc0002d00002204410120041b3a0000024020040440" + "0340024002400240200441ff017141016b0e03000501020b034041a0abc0" + "002d000022044101460d000b02400240200441016b0e03000601030b000b" + "41a49bc000412641cc9bc0001011000b41a89ac000410d41949bc0001011" + "000b41a0abc00041a0abc0002d00002204410120041b3a000020040d000b" + "0b200341186a220442a9c0c689aece93b230370300200341106a220842dd" + "b0858ce8b691a8b87f3703002003428d95c7c396d2dac0977f3703082003" + "42c6faf3c3ed82a3903c370300200341386a220142003703002003420037" + "03302003420037032820034202370320200342a9c0c689aece93b2303703" + "58200342ddb0858ce8b691a8b87f3703502003428d95c7c396d2dac0977f" + "370348200342c7faf3c3ed82a3903c370340200341206a200341406b103a" + "2003200329032020032903282003290330200129030042c7faf3c3ed82a3" + "903c428d95c7c396d2dac0977f102b41a0abc00041023a00004198abc000" + "20042903003703004190abc00020082903003703004188abc00020032903" + "083703004180abc00020032903003703000b200341e0006a24000b200241" + "e8046a4198abc000290300370300200241e0046a4190abc0002903003703" + "0020024188abc0002903003703d80420024180abc0002903003703d00441" + "ff012101200241a8076a2104200241b8076a21034200210a4200210e4200" + "210f420021104200210d4200211103402002200241d0046a200141037641" + "f0ffffff01716a22052903002005290308200141ff0071104e2002200a37" + "03f8072002200c3703f0072002200f3703e8072002200e3703e007200220" + "0d3703d807200220103703d007200220113703c8072002200b3703c00720" + "02200a3703b8082002200c3703b0082002200f3703a8082002200e3703a0" + "082002200d37039808200220103703900820022011370388082002200b37" + "0380082002280200210520024180076a200241c0076a20024180086a102f" + "20024198076a290300210d2004290300210f2003290300210a2002290388" + "072111200229038007210b200229039007211020022903a007210e200229" + "03b007210c200541017104402002200a3703b8082002200c3703b0082002" + "200f3703a8082002200e3703a0082002200d370398082002201037039008" + "20022011370388082002200b37038008200241c0076a20024180086a2002" + "41c0066a102f200241e8076a290300210f200241f8076a290300210a2002" + "2903c007210b20022903d007211020022903e007210e20022903f007210c" + "20022903c8072111200241d8076a290300210d0b200141016b2201417f47" + "0d000b2002200c3703b0062002200e3703a0062002201037039006200220" + "0b370380062002200a3703b8062002200f3703a8062002200d3703980620" + "0220113703880620024180056a20024180066a200241f0026a102f0c050b" + "20004181063b01000c050b200020022d00f1043a0002200041810a3b0100" + "0c040b200020063a0002200020073a0001200041013a00000c030b200241" + "f8066a4200370300200241f0066a4200370300200241e8066a4200370300" + "200241e0066a4200370300200241d8066a4200370300200242003703d006" + "200242003703c806200242013703c006200242ba90b590b9f2a4c7193703" + "f807200242a5baed8ff3f6afb0f2003703f00720024292cea7adb3a692d5" + "713703e807200242c2a5ccf7fab6a1f2977f3703e007200242f6bcfc90f1" + "ddb780183703d807200242f988f1f2e58c80b5c2003703d007200242ddb5" + "fbbacfdac8a1e7003703c807200242ededcbcccdabafefc6003703c00720" + "0241f0046a200241c0066a10310240024020022802f00441017104402002" + "41b8086a2201200241b8056a2205290300370300200241b0086a200241b0" + "056a2204290300370300200241a8086a2203200241a8056a220629030037" + "0300200241a0086a200241a0056a29030037030020024198086a20024198" + "056a220729030037030020024190086a20024190056a2903003703002002" + "20022903800537038008200220024188056a290300370388082002418006" + "6a200241c0076a20024180086a102f200242f5e0ffc285baa283093703f8" + "0720024295e7b0c8d6b5a6cf6c3703f007200242f39dce85b7a6cca5bc7f" + "3703e807200242dbae8a89cddbb6d6d5003703e007200242ebdbb1dcddd4" + "97e4123703d8072002428f81adee88b0dcd5ca003703d007200242fba68f" + "e290edf9e8633703c807200242aafbe9b79680b3f3cc003703c007200241" + "f0046a200241c0066a103120022802f004410171450d0120012005290300" + "370300200241b0086a200429030037030020032006290300370300200241" + "a0086a200241a0056a29030037030020024198086a200729030037030020" + "024190086a20024190056a29030037030020022002290380053703800820" + "0220024188056a2903003703880820024180076a200241c0076a20024180" + "086a102f200241f0046a20024180066a20024180076a100720022d00f004" + "4101460d02200041106a20024180056a418001104c1a200041003a00000c" + "050b41f09dc000412c41989fc0001021000b41f09dc000412c41989fc000" + "1021000b200220022d00f1043a00800841b89cc000412b20024180086a41" + "a89fc00041b4a0c0001013000b20024198086a420037030020024190086a" + "4200370300200242003703b808200242003703b008200242003703a80820" + "0242013703a0082002420037038808200242003703800820024180056a20" + "024180086a200241f0026a102f0b200241a8056a290300210e200241b805" + "6a290300210c20022903a005210f20022903b005210b200229039005220d" + "20022903800522158420024198056a290300221220024188056a29030022" + "1384844200520440427f4200427f4200201542788342c7faf3c3ed82a390" + "3c561b220a200a201354ad7d200a20137d220a42f3eab8bce9ada5bfe800" + "7d2217200a54ad7c42017c220a200d7d221042a4cffaf397c9eed7c7007d" + "2218201054ad200a200d54ad7d427f511b20127d42a9c0c689aece93b230" + "7c211642c7faf3c3ed82a3903c20157d21190b4200211142002110420021" + "0a200b200f84200c200e84844200520440427f4200427f4200200f427883" + "42c7faf3c3ed82a3903c561b220a200a200e54ad7d200a200e7d220a42f3" + "eab8bce9ada5bfe8007d2211200a54ad7c42017c220a200b7d221442a4cf" + "faf397c9eed7c7007d2210201454ad200a200b54ad7d427f511b200c7d42" + "a9c0c689aece93b2307c210a42c7faf3c3ed82a3903c200f7d21140b0240" + "0240417f200b201085200a200c8584420052200b201054200a200c56200a" + "200c511b1b2201450440200f201454200e201154200e2011511b0d01200f" + "201485200e2011858442005221010b2019211c2017211d2018211a201621" + "1b2014211e2011211f20102120200a21210240200141ff01710e02000201" + "0b027e200d20188520122016858450044020152019542013201754201320" + "17511b0d02200d211a20120c010b200d20185a201220165a20122016511b" + "450d0120160b211b0c010b2015211c2013211d200d211a2012211b200f21" + "1e200e211f200b2120200c212120192115201721132018210d2016211220" + "14210f2011210e2010210b200a210c0b200041186a200229037837030020" + "0020022903703703102000200229039001370132200041286a2002418801" + "6a290300370300200041206a20024180016a2903003703002000413a6a20" + "024198016a290300370100200041c2006a200241a0016a29030037010020" + "0041c8006a200241a6016a29010037010020094180014604402000202037" + "0380012000201e3703702000201a3703602000201c370350200020063a00" + "31200020073a0030200041003a000020002021370388012000201f370378" + "2000201b3703682000201d3703580c010b2000200b370380012000200f37" + "03702000200d37036020002015370350200020063a0031200020073a0030" + "200041003a00002000200c370388012000200e3703782000201237036820" + "0020133703580b200241c0086a24000b9f0602027f0c7e23004180016b22" + "022400200241386a4200370300200241306a4200370300200241286a4200" + "370300200241206a22034200370300200241186a4200370300200241106a" + "4200370300200241d8006a4200370300200241e0006a4200370300200241" + "e8006a4200370300200241f0006a4200370300200241f8006a4200370300" + "200242003703482002420137034020024200370308200242003703002002" + "420037035002400240024020012002104a0d00200141206a2003104a0d00" + "200141406b200241406b104a0d00200141e0006a200241e0006a104a450d" + "010b200141f8006a290300210e200141e8006a2903002106200129037021" + "0c2001290360210d200129035022042001290340220884200141d8006a29" + "0300220b200141c8006a290300220984844200520440427f4200427f4200" + "200842788342c7faf3c3ed82a3903c561b22052005200954ad7d20052009" + "7d220542f3eab8bce9ada5bfe8007d220f200554ad7c42017c220a20047d" + "220742a4cffaf397c9eed7c7007d2205200754ad2004200a56ad7d427f51" + "1b200b7d42a9c0c689aece93b2307c210a42c7faf3c3ed82a3903c20087d" + "21070b4200210442002108420021094200210b200c200d842006200e8484" + "4200520440427f4200427f4200200d42788342c7faf3c3ed82a3903c561b" + "22042004200654ad7d200420067d220642f3eab8bce9ada5bfe8007d2208" + "200654ad7c42017c2206200c7d220442a4cffaf397c9eed7c7007d220920" + "0454ad2006200c54ad7d427f511b200e7d42a9c0c689aece93b2307c210b" + "42c7faf3c3ed82a3903c200d7d21040b2000200937037020002004370360" + "20002005370350200020073703402000200b370378200020083703682000" + "200a3703582000200f37034820002001290300370300200041386a200141" + "386a290300370300200041306a200141306a290300370300200041286a20" + "0141286a290300370300200041206a200141206a29030037030020004118" + "6a200141186a290300370300200041106a200141106a2903003703002000" + "41086a200141086a2903003703000c010b20002001418001104c1a0b2002" + "4180016a24000bc10201067f41102000410b6a4178712000410b491b2204" + "411c6a1001220045044041000f0b200041086b210102402000410f714504" + "40200121000c010b200041046b220528020022064178712000410f6a4170" + "7141086b2200200020016b4111494104746a220020016b22026b21032006" + "410371044020002003200028020441017172410272360204200020036a22" + "032003280204410172360204200520022005280200410171724102723602" + "00200120026a220320032802044101723602042001200210170c010b2001" + "2802002101200020033602042000200120026a3602000b02402000280204" + "2201410371450d0020014178712202200441106a4d0d0020002004200141" + "017172410272360204200020046a2201200220046b220441037236020420" + "0020026a220220022802044101723602042001200410170b200041086a0b" + "de0a01047f230041f0026b22032400200341a8026a220442003703002003" + "41a0026a22054200370300200342003703c802200342003703c002200342" + "003703b802200342013703b0022003420037039802200342003703900220" + "0341b0026a21060240024002400240200120034190026a104a4504402001" + "41206a2006104a450d010b20044200370300200542003703002003420037" + "03c802200342003703c002200342003703b802200342013703b002200342" + "00370398022003420037039002200220034190026a104a45044020024120" + "6a2006104a450d020b200341206a2104200341406b2105200341a8026a42" + "00370300200341a0026a4200370300200342003703c802200342003703c0" + "02200342003703b802200342013703b00220034200370398022003420037" + "039002027f0240200120034190026a104a450440200141206a200341b002" + "6a104a450d010b20042001290320370300200441186a200141386a290300" + "370300200441106a200141306a290300370300200441086a200141286a29" + "0300370300200341106a200141106a290300370300200341186a20014118" + "6a290300370300200320012903003703002003200141086a290300370308" + "200341d0006a0c010b20054200370300200341106a420037030020034118" + "6a4200370300200541086a4200370300200541106a420037030020054118" + "6a4200370300200342003703002003420037030820042105200341306a0b" + "210620034180016a2101200341a0016a2104200642003703082006420037" + "03002005420037030820054201370300200341a8026a4200370300200341" + "a0026a4200370300200342003703c802200342003703c002200342003703" + "b802200342013703b00220034200370398022003420037039002027f0240" + "200220034190026a104a450440200241206a200341b0026a104a450d010b" + "20012002290320370300200141186a200241386a29030037030020014110" + "6a200241306a290300370300200141086a200241286a2903003703002003" + "41f0006a200241106a290300370300200341f8006a200241186a29030037" + "0300200320022903003703602003200241086a290300370368200341b001" + "6a0c010b20044200370300200341f0006a4200370300200341f8006a4200" + "370300200441086a4200370300200441106a4200370300200441186a4200" + "37030020034200370360200342003703682001210420034190016a0b2205" + "420037030820054200370300200442003703082004420137030020034190" + "026a2003200341e0006a1040200341c0016a20034190026a104120032802" + "c001410171450d02200020032903d001370300200041386a20034188026a" + "290300370300200041306a20034180026a290300370300200041286a2003" + "41f8016a290300370300200041206a200341f0016a290300370300200041" + "186a200341e8016a290300370300200041106a200341e0016a2903003703" + "00200041086a200341d8016a2903003703000c030b200020022903003703" + "00200041386a200241386a290300370300200041306a200241306a290300" + "370300200041286a200241286a290300370300200041206a200241206a29" + "0300370300200041186a200241186a290300370300200041106a20024110" + "6a290300370300200041086a200241086a2903003703000c020b20002001" + "290300370300200041386a200141386a290300370300200041306a200141" + "306a290300370300200041286a200141286a290300370300200041206a20" + "0141206a290300370300200041186a200141186a29030037030020004110" + "6a200141106a290300370300200041086a200141086a2903003703000c01" + "0b41c4a0c000412041f4a0c0001021000b200341f0026a24000bf2020201" + "7f067e230041e0006b22022400200241386a4200370300200241306a4200" + "370300200242003703582002420037035020024200370348420121042002" + "42013703402002420037032820024200370320027e02402001200241206a" + "104a450440200141206a200241406b104a450d010b200241106a20014110" + "6a290300370300200241186a200141186a29030037030020022001290300" + "3703002002200141086a290300370308200141286a290300210520012903" + "30210620012903202107200141386a2903000c010b42002104200241106a" + "4200370300200241186a4200370300200242003703002002420037030842" + "01210742000b210820004200370358200042003703502000200437034020" + "002006370330200020073703202000200229030037030020002003370348" + "2000200837033820002005370328200041086a2002290308370300200041" + "186a200241186a290300370300200041106a200241106a29030037030020" + "0241e0006a24000b5b01027f0240200041046b2802002202417871220341" + "044108200241037122021b20016a4f0440200241002003200141276a4b1b" + "0d01200010040f0b41f996c000412e41a897c0001011000b41b897c00041" + "2e41e897c0001011000bc30802027f047e230041a0026b22022400200241" + "d8016a4200370300200241d0016a4200370300200241c8016a4200370300" + "200241c0016a22034200370300200241b8016a4200370300200241b0016a" + "4200370300200241f8016a420037030020024180026a4200370300200241" + "88026a420037030020024190026a420037030020024198026a4200370300" + "200242003703e80142012105200242013703e001200242003703a8012002" + "42003703a001200242003703f0010240024002402001200241a0016a104a" + "0d00200141206a2003104a0d00200141406b200241e0016a104a0d002001" + "41e0006a20024180026a104a450d010b200241106a420037030020024118" + "6a4200370300200241206a4200370300200241286a420037030020024140" + "6b200141e0006a290300370300200241c8006a200141e8006a2903003703" + "00200241d0006a200141f0006a290300370300200241d8006a200141f800" + "6a2903003703002002420037030020024200370308200220012903503703" + "302002200141d8006a290300370338200141c8006a290300210620012903" + "40210720024198016a200141386a29030037030020024190016a20014130" + "6a29030037030020024188016a200141286a29030037030020024180016a" + "200141206a290300370300200241f8006a200141186a2903003703002002" + "41f0006a200141106a2903003703002002200141086a2903003703682002" + "20012903003703600c010b42002105200241f0006a4200370300200241f8" + "006a420037030020024180016a420037030020024188016a420037030020" + "024190016a420037030020024198016a4200370300200241406b42003703" + "00200241c8006a4200370300200241d0006a4200370300200241d8006a42" + "00370300200241106a4200370300200241186a4200370300200241206a42" + "00370300200241286a420037030020024200370360200242003703682002" + "420037033020024200370338200242003703002002420037030842012107" + "0b2000200737034020002002290360370300200020022903303703502000" + "2006370348200041086a2002290368370300200041d8006a200229033837" + "0300200041386a20024198016a290300370300200041306a20024190016a" + "290300370300200041286a20024188016a290300370300200041206a2002" + "4180016a290300370300200041186a200241f8006a290300370300200041" + "106a200241f0006a290300370300200041e0006a200241406b2903003703" + "00200041e8006a200241c8006a290300370300200041f0006a200241d000" + "6a290300370300200041f8006a200241d8006a2903003703002000200437" + "0388012000200537038001200020022903003703900120004198016a2002" + "290308370300200041a0016a200241106a290300370300200041a8016a20" + "0241186a290300370300200041b0016a200241206a290300370300200041" + "b8016a200241286a290300370300200241a0026a24000b6802017f017e23" + "0041306b2203240020032001360204200320003602002003410236020c20" + "0341c481c00036020820034202370214200342808080801022042003ad84" + "37032820032004200341046aad843703202003200341206a360210200341" + "086a2002101a000b4101017f230041206b22032400200341003602102003" + "4101360204200342043702082003200136021c2003200036021820032003" + "41186a36020020032002101a000b6801017f230041306b22032400200320" + "01360204200320003602002003410236020c2003418484c0003602082003" + "42023702142003200341046aad4280808080108437032820032003ad4280" + "80808010843703202003200341206a360210200341086a2002101a000b79" + "01017f230041406a220524002005200136020c2005200036020820052003" + "360214200520023602102005410236021c200541d881c000360218200542" + "023702242005200541106aad428080808020843703382005200541086aad" + "428080808030843703302005200541306a360220200541186a2004101a00" + "0b3601017f230041206b22012400200141003602182001410136020c2001" + "41d480c00036020820014204370210200141086a2000101a000bcc060105" + "7f0240024002400240200041046b22062802002207417871220441044108" + "200741037122051b20016a4f044020054100200141276a22082004491b0d" + "0102400240200241094f04402003100b22040d0141000f0b41102003410b" + "6a4178712003410b491b2101024020054504402001418002490d01200420" + "01410472490d01200420016b418180084f0d010c030b200041086b220220" + "046a2105024002400240200120044b0440200541a0a9c000280200460d03" + "2005419ca9c000280200460d02200528020422074102710d042007417871" + "220720046a22042001490d04200520071016200420016b22034110490d01" + "20062001200628020041017172410272360200200120026a220120034103" + "72360204200220046a220420042802044101723602042001200310172000" + "0f0b200420016b2203410f4d0d0520062001200741017172410272360200" + "200120026a22012003410372360204200520052802044101723602042001" + "2003101720000f0b20062004200628020041017172410272360200200220" + "046a2201200128020441017236020420000f0b4194a9c00028020020046a" + "22042001490d010240200420016b2203410f4d0440200620074101712004" + "72410272360200200220046a220120012802044101723602044100210341" + "0021010c010b20062001200741017172410272360200200120026a220120" + "03410172360204200220046a2204200336020020042004280204417e7136" + "02040b419ca9c00020013602004194a9c000200336020020000f0b4198a9" + "c00028020020046a220420014b0d070b20031001220145044041000f0b20" + "012000417c4178200628020022044103711b20044178716a220420032003" + "20044b1b104c21012000100420010f0b200420002001200320012003491b" + "104c210420062802002203417871220541044108200341037122031b2001" + "6a490d0320034100200520084b1b0d0420001004200421000b20000f0b41" + "f996c000412e41a897c0001011000b41b897c000412e41e897c000101100" + "0b41f996c000412e41a897c0001011000b41b897c000412e41e897c00010" + "11000b20062001200741017172410272360200200120026a220320042001" + "6b22014101723602044198a9c000200136020041a0a9c000200336020020" + "000bf10201047f200028020c21020240024020014180024f044020002802" + "1821040240024020002002460440200041144110200028021422021b6a28" + "020022010d01410021020c020b20002802082201200236020c2002200136" + "02080c010b200041146a200041106a20021b210303402003210520012202" + "41146a200241106a200228021422011b210320024114411020011b6a2802" + "0022010d000b200541003602000b2004450d022000200028021c41027441" + "f4a5c0006a220128020047044020044110411420042802102000461b6a20" + "023602002002450d030c020b2001200236020020020d014190a9c0004190" + "a9c000280200417e200028021c77713602000c020b200028020822032002" + "4704402003200236020c200220033602080f0b418ca9c000418ca9c00028" + "0200417e200141037677713602000f0b2002200436021820002802102201" + "044020022001360210200120023602180b20002802142201450d00200220" + "01360214200120023602180b0ba90601047f200020016a21020240024020" + "0028020422034101710d002003410271450d012000280200220320016a21" + "01200020036b2200419ca9c0002802004604402002280204410371410347" + "0d014194a9c000200136020020022002280204417e713602042000200141" + "0172360204200220013602000c020b2000200310160b0240024002402002" + "2802042203410271450440200241a0a9c000280200460d022002419ca9c0" + "00280200460d0320022003417871220310162000200120036a2201410172" + "360204200020016a20013602002000419ca9c000280200470d014194a9c0" + "0020013602000f0b20022003417e71360204200020014101723602042000" + "20016a20013602000b20014180024f0440411f2102200042003702102001" + "41ffffff074d04402001410620014108766722026b764101712002410174" + "6b413e6a21020b2000200236021c200241027441f4a5c0006a2103410120" + "027422044190a9c000280200714504402003200036020020002003360218" + "2000200036020c200020003602084190a9c0004190a9c000280200200472" + "3602000f0b02400240200120032802002204280204417871460440200421" + "020c010b2001411920024101766b41002002411f471b7421030340200420" + "03411d764104716a41106a22052802002202450d02200341017421032002" + "210420022802044178712001470d000b0b20022802082201200036020c20" + "022000360208200041003602182000200236020c200020013602080f0b20" + "052000360200200020043602182000200036020c200020003602080f0b20" + "0141f801714184a7c0006a2102027f418ca9c00028020022034101200141" + "037674220171450440418ca9c000200120037236020020020c010b200228" + "02080b2101200220003602082001200036020c2000200236020c20002001" + "3602080f0b41a0a9c00020003602004198a9c0004198a9c0002802002001" + "6a2201360200200020014101723602042000419ca9c000280200470d0141" + "94a9c0004100360200419ca9c00041003602000f0b419ca9c00020003602" + "004194a9c0004194a9c00028020020016a22013602002000200141017236" + "0204200020016a20013602000b0b8e0201057f230041206b220324002000" + "2802002202417f460440410020011019000b410820024101742204200241" + "016a2205200420054b1b2204200441084d1b220441004804404100200110" + "19000b20032002047f2003200236021c2003200028020436021441010541" + "000b360218200341086a2105027f0240200341146a220228020404402002" + "280208220645044041bda9c0002d00001a0c020b20022802002006410120" + "0410150c020b41bda9c0002d00001a0b200410010b210220052004360208" + "20052002410120021b360204200520024536020020032802084101460440" + "20032802101a200328020c20011019000b200328020c2102200020043602" + "0020002002360204200341206a24000b0d002000450440200110140b000b" + "f40102027f017e230041106b22022400200241013b010c20022001360208" + "20022000360204230041106b22002400200241046a220129020021042000" + "200136020c20002004370204230041106b22022400200041046a22012802" + "00220028020c2103024002400240024020002802040e020001020b20030d" + "0141012100410021030c020b20030d002000280200220028020421032000" + "28020021000c010b20024180808080783602002002200136020c20012802" + "0822012d0008210020012d00091a2002410420001033000b200220033602" + "0420022000360200200128020822012d0008210020012d00091a20024105" + "20001033000b6801017f230041306b220324002003200136020420032000" + "3602002003410236020c200341e483c00036020820034202370214200320" + "0341046aad4280808080108437032820032003ad42808080801084370320" + "2003200341206a360210200341086a2002101a000bcf06010b7f20002802" + "002102230041106b22072400410a2103024020024190ce00490440200221" + "000c010b0340200741066a20036a220441046b20024190ce006e220041f0" + "b1036c20026a220541ffff037141e4006e220641017441e881c0006a2f00" + "003b0000200441026b2006419c7f6c20056a41ffff037141017441e881c0" + "006a2f00003b0000200341046b2103200241ffc1d72f4b21042000210220" + "040d000b0b0240200041e3004d0440200021020c010b200341026b220320" + "0741066a6a200041ffff037141e4006e2202419c7f6c20006a41ffff0371" + "41017441e881c0006a2f00003b00000b02402002410a4f0440200341026b" + "2203200741066a6a200241017441e881c0006a2f00003b00000c010b2003" + "41016b2203200741066a6a20024130723a00000b027f200741066a20036a" + "210941012108410a20036b220a2001280214220241017122056a21062008" + "410020024104711b2108412b418080c40020051b21052001280200450440" + "4101200128021c22002001280220220320052008101d0d011a2000200920" + "0a200328020c1103000c010b0240024002402006200128020422004f0440" + "200128021c22002001280220220320052008101d450d0141010c040b2002" + "410871450d01200128021021022001413036021020012d0018210c410121" + "0b200141013a0018200128021c22032001280220220420052008101d0d02" + "200020066b41016a210002400340200041016b2200450d01200341302004" + "280210110200450d000b41010c040b410120032009200a200428020c1103" + "000d031a2001200c3a00182001200236021041000c030b20002009200a20" + "0328020c110300210b0c010b200020066b2102024002400240410120012d" + "0018220020004103461b220041016b0e020001020b20022100410021020c" + "010b20024101762100200241016a41017621020b200041016a2100200128" + "0210210620012802202103200128021c210402400340200041016b220045" + "0d01200420062003280210110200450d000b41010c020b4101210b200420" + "0320052008101d0d0020042009200a200328020c1103000d004100210003" + "40410020002002460d021a200041016a2100200420062003280210110200" + "450d000b200041016b2002490c010b200b0b2102200741106a240020020b" + "380002402002418080c400460d00200020022001280210110200450d0041" + "010f0b200345044041000f0b200020034100200128020c1103000bfd0a01" + "0c7f20002802042107200028020021030240024020012802002209200128" + "0208220072044002402000410171450d00200320076a2106024020012802" + "0c2205450440200321020c010b200321020340200222002006460d02027f" + "200041016a20002c0000220241004e0d001a200041026a20024160490d00" + "1a200041036a20024170490d001a200041046a0b220220006b20046a2104" + "2005200841016a2208470d000b0b20022006460d0020022c00001a200420" + "07027f02402004450d00200420074f044020042007460d0141000c020b20" + "0320046a2c000041404e0d0041000c010b20030b22001b21072000200320" + "001b21030b2009450440200128021c20032007200128022028020c110300" + "0f0b2001280204210c200741104f044020072003200341036a417c712204" + "6b22086a220a41037121094100210541002100200320044704402008417c" + "4d04404100210603402000200320066a22022c000041bf7f4a6a20024101" + "6a2c000041bf7f4a6a200241026a2c000041bf7f4a6a200241036a2c0000" + "41bf7f4a6a2100200641046a22060d000b0b200321020340200020022c00" + "0041bf7f4a6a2100200241016a2102200841016a22080d000b0b02402009" + "450d002004200a417c716a22022c000041bf7f4a210520094101460d0020" + "0520022c000141bf7f4a6a210520094102460d00200520022c000241bf7f" + "4a6a21050b200a4102762106200020056a21050340200421092006450d04" + "41c0012006200641c0014f1b220a410371210b200a410274210d41002102" + "200641044f04402004200d41f007716a2108200421000340200028020c22" + "04417f7341077620044106767241818284087120002802082204417f7341" + "077620044106767241818284087120002802042204417f73410776200441" + "06767241818284087120002802002204417f734107762004410676724181" + "8284087120026a6a6a6a2102200041106a22002008470d000b0b2006200a" + "6b21062009200d6a2104200241087641ff81fc0771200241ff81fc07716a" + "418180046c41107620056a2105200b450d000b2009200a41fc0171410274" + "6a22022802002200417f734107762000410676724181828408712100200b" + "4101460d0220022802042204417f73410776200441067672418182840871" + "20006a2100200b4102460d0220022802082202417f734107762002410676" + "7241818284087120006a21000c020b2007450440410021050c030b200741" + "03712102027f200741044904404100210041000c010b20032c000041bf7f" + "4a20032c000141bf7f4a6a20032c000241bf7f4a6a20032c000341bf7f4a" + "6a22052007410c7122004104460d001a200520032c000441bf7f4a6a2003" + "2c000541bf7f4a6a20032c000641bf7f4a6a20032c000741bf7f4a6a2205" + "20004108460d001a200520032c000841bf7f4a6a20032c000941bf7f4a6a" + "20032c000a41bf7f4a6a20032c000b41bf7f4a6a0b21052002450d022000" + "20036a21000340200520002c000041bf7f4a6a2105200041016a21002002" + "41016b22020d000b0c020b200128021c20032007200128022028020c1103" + "000f0b200041087641ff811c71200041ff81fc07716a418180046c411076" + "20056a21050b02402005200c490440200c20056b21060240024002402001" + "2d00182200410020004103471b220041016b0e020001020b200621004100" + "21060c010b20064101762100200641016a41017621060b200041016a2100" + "2001280210210820012802202102200128021c21040340200041016b2200" + "450d02200420082002280210110200450d000b41010f0b200128021c2003" + "2007200128022028020c1103000f0b200420032007200228020c11030004" + "4041010f0b4100210003402000200646044041000f0b200041016a210020" + "0420082002280210110200450d000b200041016b2006490b140020002802" + "002001200028020428020c1102000b0e0041e480c000412b20001011000b" + "5901017f230041306b220324002003200136020c20032000360208200341" + "01360214200341dc80c0003602102003420137021c2003200341086aad42" + "8080808030843703282003200341286a360218200341106a2002101a000b" + "7f01017f027f0240027f0240200228020404402002280208220345044020" + "01450d0441bda9c0002d00001a0c020b200228020020034104200110150c" + "020b2001450d0241bda9c0002d00001a0b200110010b2202410420021b21" + "032002450c010b4104210341000b21022000200136020820002003360204" + "200020023602000bdd0101087f230041206b220224002000280200220341" + "7f460440410020011019000b20034101742204200341016a220620042006" + "4b1b220441ffffffff034b0440410020011019000b024041042004200441" + "044d1b2207410274220641fcffffff074d047f4100210420022003047f20" + "02200341027436021c2002200028020436021441040520040b3602182002" + "41086a2006200241146a102220022802084101470d012002280210210520" + "0228020c0520050b210820052109200820011019000b200228020c210320" + "00200736020020002003360204200241206a24000bd10d021c7f077e2300" + "41206b220c2400200341016b211102400240024002402003044020034102" + "6b210520034101460d0402402001280208221420036b221941016a220e41" + "ffffffff034b0d00200e410274220441fdffffff074f0d00200220114102" + "746a2802002115200220054102746a3502002123027f2004450440410421" + "0b41000c010b41bda9c0002d00001a20041001220b450d05200b41046b2d" + "00004103710440200b2004104b1a0b200e0b21102001280200211a201421" + "09200e044020012802042212200941027420034102746b6a211320034101" + "7121162003417e71210d201241086b211b201241046b211c42002015ad22" + "2242208622247d2125200e210f0340024020090440201c20094102742204" + "6a22050d010b41ec87c0001020000b027f0240200941024f044020052802" + "0021052004201b6a350200212120082015490d012005ad2008ad7c212041" + "7f0c020b417f417e20141b410141fc87c0001010000b2005ad2008ad4220" + "868422202020202280222620227e7d21202026a70b21070240202042ffff" + "ffff0f560d00202520204220867c20217c21210340202120247c22212007" + "ad20237e5a0d01200741016b2107202020227c2220428080808010540d00" + "0b0b02400240024002402009200f41016b220f4f0440200f410274211720" + "09200f460d04201220176a21182007ad212102400240201145044042ffff" + "ffff0f2120410021060c010b4100210642ffffffff0f2120201321042002" + "210503402004202020043502007c202120053502007e7d42ffffffff1f7d" + "22203e0200200441046a220a200a35020020204220887c2021200541046a" + "3502007e7d42ffffffff1f7d22203e020020204220882120200441086a21" + "04200541086a2105200d200641026a2206470d000b2016450d010b201820" + "0641027422046a2205202020053502007c2021200220046a3502007e7d42" + "ffffffff1f7d22203e0200202042208821200b20082020a7417f734f0d04" + "20114504404100210a410021080c030b41002104410021084100210a0340" + "200420136a22052005280200221d200220046a221e2802006a220620086a" + "2208360200200541046a22052005280200221f201e41046a2802006a2205" + "2006201d49200620084b726a22063602002005201f49200520064b722108" + "200441086a2104200d200a41026a220a470d000b0c010b200f2009418c88" + "c000101b000b2016450d010b2018200a41027422046a2205200528020020" + "0220046a2802006a20086a3602000b200741016b21070b200b20176a2007" + "3602002001200941016b2209360208201341046b2113201220094102746a" + "2802002108200f0d000b0b2009201a460440200141dc87c00010230b2001" + "200941016a220d3602082001280204220a200941027422046a2008360200" + "20080d03200d41ffffffff0371210702400340200721052004417c460d01" + "200541016b21072004200a6a2106200441046b21042006280200450d000b" + "2005200d4b0d040c030b410021050c020b41cc87c0001014000b20114100" + "41ac87c0001010000b200120053602082005210d0b024002400240024002" + "40200d200128020022044102764f0d002004200d490d012004450d002004" + "41027421040240200d450440200a41046b28020022054178712207410441" + "08200541037122051b20046a490d04200541002007200441276a4b1b0d05" + "200a1004410421040c010b200a20044104200d41027410152204450d060b" + "2001200d360200200120043602040b41002106200e450d03200b200e4102" + "746a41046b2802000440200e21060c040b201441027420034102746b2104" + "201941026a210503402004417c460d04200541016b21052004200b6a2107" + "200441046b21042007280200450d000b200e20052005200e4b1b21060c03" + "0b200c4100360218200c410136020c200c41ec84c000360208200c420437" + "0210200c41086a41f484c000101a000b41f996c000412e41a897c0001011" + "000b41b897c000412e41e897c0001011000b024002400240024020104102" + "7620064d0440201021040c010b200620104b0d01410021042010450d0020" + "1041027421052006450440200b41046b2802002207417871220a41044108" + "200741037122071b20056a490d0320074100200a200541276a4b1b0d0420" + "0b10044104210b0c010b200b20054104200622044102741015220b450d04" + "0b200020063602082000200b360204200020043602002000200129020037" + "020c200041146a200141086a280200360200200c41206a24000f0b200c41" + "00360218200c410136020c200c41ec84c000360208200c4204370210200c" + "41086a41f484c000101a000b41f996c000412e41a897c0001011000b41b8" + "97c000412e41e897c00010110b000b2005410141bc87c0001010000be609" + "010c7f230041306b220724002001280200210c0240024002400240024002" + "400240024002400240024002400240024020024504402001280204210b20" + "0c418080808078470d02200b41086a280200220441ffffffff034d044020" + "04410274220641fdffffff07490d020b41a89cc0001014000b2001280204" + "220b2001200c418080808078461b2208280208220941feffffff014f0d04" + "41bda9c0002d00001a200941026a220141027410012205450d0720054100" + "360200200720053602102007200136020c41012101200741013602142008" + "2802082206410274210d200828020421082006200941016a4b0440200741" + "0c6a2105230041206b22042400024002402006417f460d00200528020022" + "09410174220a200641016a22012001200a491b220141ffffffff034b0d00" + "41042001200141044d1b220f410274220a41fcffffff074b0d0020042009" + "047f2004200941027436021c2004200528020436021441040541000b3602" + "18200441086a200a200441146a102220042802084101470d012004280210" + "1a200428020c210e0b200e41c096c0001019000b200428020c2101200520" + "0f36020020052001360204200441206a2400200728021021052007280214" + "21010b200520014102746a2008200d104c1a2007200120066a2204360214" + "0c030b200b41046a28020021092006450440410421054100210141042009" + "2006104c1a0c020b41bda9c0002d00001a20042101200610012205450d06" + "200520092006104c1a0c010b20012802082104200c2101200b21050b2007" + "2004360214200720053602102007200136020c0b200341ff0171450d0202" + "40200220044d044020022004470d01200221040c040b2002410041c889c0" + "00101b000b20044102742109200241027421012003411f71210841002003" + "6b411f71210d410021030340200120056a22062006280200220620087420" + "03723602002006200d7621032009200141046a2201470d000b0c010b41a8" + "89c00010140c020b2003450d00200728020c20044604402007410c6a41b8" + "89c0001023200728021021050b200520044102746a200336020020072004" + "41016a22043602140b41002108200728020c210a02402004450d00200520" + "0441027422016a41046b2802000440200421080c010b200541046b210d20" + "0441ffffffff037121030340200321062001450d01200641016b21032001" + "200d6a2109200141046b21012009280200450d000b200420062004200649" + "1b21080b0240200a41027620084d0440200a21010c010b2008200a4b0d02" + "41002101200a450d00200a41027421032008450440200541046b28020022" + "06417871220941044108200641037122061b20036a490d04200641002009" + "200341276a4b1b0d0520051004410421050c010b20052003410420082201" + "41027410152205450d010b20002008360208200020053602042000200136" + "02002002450d06200c41808080807872418080808078460d06200b41046b" + "28020022014178712203200c410274220641044108200141037122011b6a" + "490d04200141002003200641276a4b1b0d05200b10040c060b000b200741" + "003602282007410136021c200741ec84c000360218200742043702202007" + "41186a41f484c000101a000b41f996c000412e41a897c0001011000b41b8" + "97c000412e41e897c0001011000b41f996c000412e41a897c0001011000b" + "41b897c000412e41e897c0001011000b200741306a24000bc60201027f41" + "bda9c0002d00001a024002400240412010012202450d0020022001290000" + "370200200220012900083702082002200129001037021020022001280018" + "3602182002200128001c220336021c410821012000027f410820030d001a" + "41082002411c6a2802000d001a4107200241186a2802000d001a41062002" + "41146a2802000d001a4105200241106a2802000d001a41042002410c6a28" + "02000d001a4103200241086a2802000d001a4102200241046a2802000d00" + "1a2002280200450440200241046b28020022014178714124412820014103" + "7122031b490d0320034100200141c8004f1b0d0420021004410421024100" + "210141000c010b200241204104410410152202450d014101210141010b36" + "020820002002360204200020013602000f0b000b41f996c000412e41a897" + "c0001011000b41b897c000412e41e897c0001011000bcc3e01227f200120" + "024106746a2124200028021c21222000280218211f2000280214211e2000" + "280210211b200028020c2123200028020821202000280204211d20002802" + "002102034020022001280000220341187420034180fe0371410874722003" + "4108764180fe03712003411876727222152022201b411a77201b41157773" + "201b410777736a201e201f73201b71201f736a6a4198dfa894046a220420" + "1d202073200271201d202071732002411e772002411377732002410a7773" + "6a6a2203411e772003411377732003410a777320032002201d7371200220" + "1d71736a201f2001280004220541187420054180fe037141087472200541" + "08764180fe03712005411876727222136a200420236a2207201b201e7371" + "201e736a2007411a772007411577732007410777736a419189dd89076a22" + "066a2205411e772005411377732005410a77732005200220037371200220" + "0371736a201e2001280008220441187420044180fe037141087472200441" + "08764180fe03712004411876727222146a200620206a220c2007201b7371" + "201b736a200c411a77200c41157773200c410777736a41b188fcd1046b22" + "0d6a2204411e772004411377732004410a77732004200320057371200320" + "0571736a201b200128000c220641187420064180fe037141087472200641" + "08764180fe03712006411876727222116a200d201d6a220d2007200c7371" + "2007736a200d411a77200d41157773200d410777736a41dbc8a8b2016b22" + "086a2206411e772006411377732006410a77732006200420057371200420" + "0571736a20072001280010220f411874200f4180fe037141087472200f41" + "08764180fe0371200f411876727222166a200220086a220f200c200d7371" + "200c736a200f411a77200f41157773200f410777736a41db84dbca036a22" + "096a2207411e772007411377732007410a77732007200420067371200420" + "0671736a2001280014220841187420084180fe0371410874722008410876" + "4180fe0371200841187672722218200c6a200320096a220c200d200f7371" + "200d736a200c411a77200c41157773200c410777736a41f1a3c4cf056a22" + "096a2203411e772003411377732003410a77732003200620077371200620" + "0771736a2001280018220841187420084180fe0371410874722008410876" + "4180fe0371200841187672722219200d6a200520096a220d200c200f7371" + "200f736a200d411a77200d41157773200d410777736a41dcfa81ee066b22" + "096a2205411e772005411377732005410a77732005200320077371200320" + "0771736a200128001c220841187420084180fe0371410874722008410876" + "4180fe037120084118767272221a200f6a200420096a220f200c200d7371" + "200c736a200f411a77200f41157773200f410777736a41abc28ea7056b22" + "096a2204411e772004411377732004410a77732004200320057371200320" + "0571736a2001280020220841187420084180fe0371410874722008410876" + "4180fe0371200841187672722202200c6a200620096a220c200d200f7371" + "200d736a200c411a77200c41157773200c410777736a41e8aae1bf026b22" + "096a2206411e772006411377732006410a77732006200420057371200420" + "0571736a2001280024220841187420084180fe0371410874722008410876" + "4180fe037120084118767272220a200d6a200720096a220d200c200f7371" + "200f736a200d411a77200d41157773200d410777736a4181b68d94016a22" + "096a2207411e772007411377732007410a77732007200420067371200420" + "0671736a2001280028220841187420084180fe0371410874722008410876" + "4180fe037120084118767272220b200f6a200320096a220f200c200d7371" + "200c736a200f411a77200f41157773200f410777736a41be8bc6a1026a22" + "096a2203411e772003411377732003410a77732003200620077371200620" + "0771736a200128002c220841187420084180fe0371410874722008410876" + "4180fe0371200841187672722210200c6a200520096a2208200d200f7371" + "200d736a2008411a772008411577732008410777736a41c3fbb1a8056a22" + "096a2205411e772005411377732005410a77732005200320077371200320" + "0771736a2001280030220c411874200c4180fe037141087472200c410876" + "4180fe0371200c4118767272221c200d6a200420096a22092008200f7371" + "200f736a2009411a772009411577732009410777736a41f4baf995076a22" + "0d6a2204411e772004411377732004410a77732004200320057371200320" + "0571736a2001280034220c411874200c4180fe037141087472200c410876" + "4180fe0371200c41187672722221200f6a2006200d6a220e200820097371" + "2008736a200e411a77200e41157773200e410777736a41829c85f9076b22" + "0d6a2206411e772006411377732006410a77732006200420057371200420" + "0571736a2001280038220c411874200c4180fe037141087472200c410876" + "4180fe0371200c4118767272220c20086a2007200d6a22122009200e7371" + "2009736a2012411a772012411577732012410777736a41d9f28fa1066b22" + "0f6a2207411e772007411377732007410a77732007200420067371200420" + "0671736a200128003c220d411874200d4180fe037141087472200d410876" + "4180fe0371200d4118767272220d20096a2003200f6a2217200e20127371" + "200e736a2017411a772017411577732017410777736a418c9d90f3036b22" + "086a2203411e772003411377732003410a77732003200620077371200620" + "0771736a20134119772013410e777320134103767320156a200a6a200c41" + "0f77200c410d7773200c410a76736a220f200e6a200520086a2215201220" + "1773712012736a2015411a772015411577732015410777736a41bfac92db" + "016b22096a2205411e772005411377732005410a77732005200320077371" + "2003200771736a20144119772014410e777320144103767320136a200b6a" + "200d410f77200d410d7773200d410a76736a220820126a200420096a2213" + "2015201773712017736a2013411a772013411577732013410777736a41fa" + "f08682016b220e6a2204411e772004411377732004410a77732004200320" + "0573712003200571736a20114119772011410e777320114103767320146a" + "20106a200f410f77200f410d7773200f410a76736a220920176a2006200e" + "6a22142013201573712015736a2014411a77201441157773201441077773" + "6a41c6bb86fe006a22126a2206411e772006411377732006410a77732006" + "2004200573712004200571736a20164119772016410e7773201641037673" + "20116a201c6a2008410f772008410d77732008410a76736a220e20156a20" + "0720126a22112013201473712013736a2011411a77201141157773201141" + "0777736a41ccc3b2a0026a22176a2207411e772007411377732007410a77" + "7320072004200673712004200671736a20184119772018410e7773201841" + "03767320166a20216a2009410f772009410d77732009410a76736a221220" + "136a200320176a22162011201473712014736a2016411a77201641157773" + "2016410777736a41efd8a4ef026a22156a2203411e772003411377732003" + "410a777320032006200773712006200771736a20194119772019410e7773" + "20194103767320186a200c6a200e410f77200e410d7773200e410a76736a" + "221720146a200520156a22182011201673712011736a2018411a77201841" + "1577732018410777736a41aa89d2d3046a22136a2205411e772005411377" + "732005410a777320052003200773712003200771736a201a411977201a41" + "0e7773201a4103767320196a200d6a2012410f772012410d77732012410a" + "76736a221520116a200420136a22192016201873712016736a2019411a77" + "2019411577732019410777736a41dcd3c2e5056a22146a2204411e772004" + "411377732004410a777320042003200573712003200571736a2002411977" + "2002410e7773200241037673201a6a200f6a2017410f772017410d777320" + "17410a76736a221320166a200620146a221a2018201973712018736a201a" + "411a77201a41157773201a410777736a41da91e6b7076a22116a2206411e" + "772006411377732006410a777320062004200573712004200571736a200a" + "411977200a410e7773200a4103767320026a20086a2015410f772015410d" + "77732015410a76736a221420186a200720116a22022019201a7371201973" + "6a2002411a772002411577732002410777736a41aedd86be066b22166a22" + "07411e772007411377732007410a77732007200420067371200420067173" + "6a200b411977200b410e7773200b41037673200a6a20096a2013410f7720" + "13410d77732013410a76736a221120196a200320166a220a2002201a7371" + "201a736a200a411a77200a41157773200a410777736a4193f3b8be056b22" + "186a2203411e772003411377732003410a77732003200620077371200620" + "0771736a20104119772010410e7773201041037673200b6a200e6a201441" + "0f772014410d77732014410a76736a2216201a6a200520186a220b200220" + "0a73712002736a200b411a77200b41157773200b410777736a41b8b0f3ff" + "046b22196a2205411e772005411377732005410a77732005200320077371" + "2003200771736a201c411977201c410e7773201c4103767320106a20126a" + "2011410f772011410d77732011410a76736a221820026a200420196a2202" + "200a200b7371200a736a2002411a772002411577732002410777736a41b9" + "809a85046b221a6a2204411e772004411377732004410a77732004200320" + "0573712003200571736a20214119772021410e7773202141037673201c6a" + "20176a2016410f772016410d77732016410a76736a2219200a6a2006201a" + "6a220a2002200b7371200b736a200a411a77200a41157773200a41077773" + "6a418de8ffc8036b22106a2206411e772006411377732006410a77732006" + "2004200573712004200571736a200c411977200c410e7773200c41037673" + "20216a20156a2018410f772018410d77732018410a76736a221a200b6a20" + "0720106a220b2002200a73712002736a200b411a77200b41157773200b41" + "0777736a41b9dde1d2026b22106a2207411e772007411377732007410a77" + "7320072004200673712004200671736a200d411977200d410e7773200d41" + "037673200c6a20136a2019410f772019410d77732019410a76736a220c20" + "026a200320106a2202200a200b7371200a736a2002411a77200241157773" + "2002410777736a41d1c6a9366a22106a2203411e77200341137773200341" + "0a777320032006200773712006200771736a200f411977200f410e777320" + "0f41037673200d6a20146a201a410f77201a410d7773201a410a76736a22" + "0d200a6a200520106a220a2002200b7371200b736a200a411a77200a4115" + "7773200a410777736a41e7d2a4a1016a22106a2205411e77200541137773" + "2005410a777320052003200773712003200771736a20084119772008410e" + "7773200841037673200f6a20116a200c410f77200c410d7773200c410a76" + "736a220f200b6a200420106a220b2002200a73712002736a200b411a7720" + "0b41157773200b410777736a418595dcbd026a22106a2204411e77200441" + "1377732004410a777320042003200573712003200571736a200941197720" + "09410e777320094103767320086a20166a200d410f77200d410d7773200d" + "410a76736a220820026a200620106a2202200a200b7371200a736a200241" + "1a772002411577732002410777736a41b8c2ecf0026a22106a2206411e77" + "2006411377732006410a777320062004200573712004200571736a200e41" + "1977200e410e7773200e4103767320096a20186a200f410f77200f410d77" + "73200f410a76736a2209200a6a200720106a220a2002200b7371200b736a" + "200a411a77200a41157773200a410777736a41fcdbb1e9046a22106a2207" + "411e772007411377732007410a777320072004200673712004200671736a" + "20124119772012410e7773201241037673200e6a20196a2008410f772008" + "410d77732008410a76736a220e200b6a200320106a220b2002200a737120" + "02736a200b411a77200b41157773200b410777736a41939ae099056a2210" + "6a2203411e772003411377732003410a7773200320062007737120062007" + "71736a20174119772017410e777320174103767320126a201a6a2009410f" + "772009410d77732009410a76736a221220026a200520106a2202200a200b" + "7371200a736a2002411a772002411577732002410777736a41d4e6a9a806" + "6a22106a2205411e772005411377732005410a7773200520032007737120" + "03200771736a20154119772015410e777320154103767320176a200c6a20" + "0e410f77200e410d7773200e410a76736a2217200a6a200420106a220a20" + "02200b7371200b736a200a411a77200a41157773200a410777736a41bb95" + "a8b3076a22106a2204411e772004411377732004410a7773200420032005" + "73712003200571736a20134119772013410e777320134103767320156a20" + "0d6a2012410f772012410d77732012410a76736a2215200b6a200620106a" + "220b2002200a73712002736a200b411a77200b41157773200b410777736a" + "41d2edf4f1076b22106a2206411e772006411377732006410a7773200620" + "04200573712004200571736a20144119772014410e777320144103767320" + "136a200f6a2017410f772017410d77732017410a76736a221320026a2007" + "20106a2202200a200b7371200a736a2002411a7720024115777320024107" + "77736a41fba6b7ec066b22106a2207411e772007411377732007410a7773" + "20072004200673712004200671736a20114119772011410e777320114103" + "767320146a20086a2015410f772015410d77732015410a76736a2214200a" + "6a200320106a220a2002200b7371200b736a200a411a77200a4115777320" + "0a410777736a41dfae80ea056b22106a2203411e77200341137773200341" + "0a777320032006200773712006200771736a20164119772016410e777320" + "164103767320116a20096a2013410f772013410d77732013410a76736a22" + "11200b6a200520106a220b2002200a73712002736a200b411a77200b4115" + "7773200b410777736a41b5b396bf056b22106a2205411e77200541137773" + "2005410a777320052003200773712003200771736a20184119772018410e" + "777320184103767320166a200e6a2014410f772014410d77732014410a76" + "736a221620026a200420106a2202200a200b7371200a736a2002411a7720" + "02411577732002410777736a4190e9d1ed036b22106a2204411e77200441" + "1377732004410a777320042003200573712003200571736a201941197720" + "19410e777320194103767320186a20126a2011410f772011410d77732011" + "410a76736a2218200a6a200620106a220a2002200b7371200b736a200a41" + "1a77200a41157773200a410777736a41dddccec4036b22106a2206411e77" + "2006411377732006410a777320062004200573712004200571736a201a41" + "1977201a410e7773201a4103767320196a20176a2016410f772016410d77" + "732016410a76736a2219200b6a200720106a220b2002200a73712002736a" + "200b411a77200b41157773200b410777736a41e7afb4f3026b22106a2207" + "411e772007411377732007410a777320072004200673712004200671736a" + "200c411977200c410e7773200c41037673201a6a20156a2018410f772018" + "410d77732018410a76736a221a20026a200320106a2202200a200b737120" + "0a736a2002411a772002411577732002410777736a41dcf39bcb026b2210" + "6a2203411e772003411377732003410a7773200320062007737120062007" + "71736a200d411977200d410e7773200d41037673200c6a20136a2019410f" + "772019410d77732019410a76736a220c200a6a200520106a220a2002200b" + "7371200b736a200a411a77200a41157773200a410777736a41fb94c7df00" + "6b22106a2205411e772005411377732005410a7773200520032007737120" + "03200771736a200f411977200f410e7773200f41037673200d6a20146a20" + "1a410f77201a410d7773201a410a76736a220d200b6a200420106a220b20" + "02200a73712002736a200b411a77200b41157773200b410777736a41f0c0" + "aa83016a22106a2204411e772004411377732004410a7773200420032005" + "73712003200571736a20084119772008410e7773200841037673200f6a20" + "116a200c410f77200c410d7773200c410a76736a220f20026a200620106a" + "2202200a200b7371200a736a2002411a772002411577732002410777736a" + "41968293cd016a221c6a2206411e772006411377732006410a7773200620" + "04200573712004200571736a20094119772009410e777320094103767320" + "086a20166a200d410f77200d410d7773200d410a76736a2210200a6a2007" + "201c6a22082002200b7371200b736a2008411a7720084115777320084107" + "77736a4188d8ddf1016a221c6a2207411e772007411377732007410a7773" + "20072004200673712004200671736a200e411977200e410e7773200e4103" + "767320096a20186a200f410f77200f410d7773200f410a76736a220a200b" + "6a2003201c6a22092002200873712002736a2009411a7720094115777320" + "09410777736a41cceea1ba026a221c6a2203411e77200341137773200341" + "0a777320032006200773712006200771736a20124119772012410e777320" + "1241037673200e6a20196a2010410f772010410d77732010410a76736a22" + "0b20026a2005201c6a220e2008200973712008736a200e411a77200e4115" + "7773200e410777736a41b5f9c2a5036a22026a2205411e77200541137773" + "2005410a777320052003200773712003200771736a20174119772017410e" + "777320174103767320126a201a6a200a410f77200a410d7773200a410a76" + "736a221220086a200220046a22082009200e73712009736a2008411a7720" + "08411577732008410777736a41b399f0c8036a22026a2204411e77200441" + "1377732004410a777320042003200573712003200571736a201541197720" + "15410e777320154103767320176a200c6a200b410f77200b410d7773200b" + "410a76736a221720096a200220066a22092008200e7371200e736a200941" + "1a772009411577732009410777736a41cad4e2f6046a22026a2206411e77" + "2006411377732006410a777320062004200573712004200571736a201341" + "19772013410e777320134103767320156a200d6a2012410f772012410d77" + "732012410a76736a2215200e6a200220076a220e2008200973712008736a" + "200e411a77200e41157773200e410777736a41cf94f3dc056a22026a2207" + "411e772007411377732007410a777320072004200673712004200671736a" + "20144119772014410e777320144103767320136a200f6a2017410f772017" + "410d77732017410a76736a221320086a200220036a22082009200e737120" + "09736a2008411a772008411577732008410777736a41f3dfb9c1066a2202" + "6a2203411e772003411377732003410a7773200320062007737120062007" + "71736a20114119772011410e777320114103767320146a20106a2015410f" + "772015410d77732015410a76736a221420096a200220056a22092008200e" + "7371200e736a2009411a772009411577732009410777736a41ee85bea407" + "6a22026a2205411e772005411377732005410a7773200520032007737120" + "03200771736a20164119772016410e777320164103767320116a200a6a20" + "13410f772013410d77732013410a76736a2211200e6a200220046a220e20" + "08200973712008736a200e411a77200e41157773200e410777736a41efc6" + "95c5076a22026a2204411e772004411377732004410a7773200420032005" + "73712003200571736a20184119772018410e777320184103767320166a20" + "0b6a2014410f772014410d77732014410a76736a221620086a200220066a" + "22082009200e73712009736a2008411a772008411577732008410777736a" + "41ec8fded9076b22026a2206411e772006411377732006410a7773200620" + "04200573712004200571736a20194119772019410e777320194103767320" + "186a20126a2011410f772011410d77732011410a76736a221220096a2002" + "20076a22092008200e7371200e736a2009411a7720094115777320094107" + "77736a41f8fbe399076b22116a2207411e772007411377732007410a7773" + "20072004200673712004200671736a201a411977201a410e7773201a4103" + "767320196a20176a2016410f772016410d77732016410a76736a2217200e" + "6a200320116a220e2008200973712008736a200e411a77200e4115777320" + "0e410777736a41868084fa066b22116a2203411e77200341137773200341" + "0a777320032006200773712006200771736a200c411977200c410e777320" + "0c41037673201a6a20156a2012410f772012410d77732012410a76736a22" + "1220086a200520116a22052009200e73712009736a2005411a7720054115" + "77732005410777736a4195a6bedd056b22156a2208411e77200841137773" + "2008410a777320082003200773712003200771736a200c200d411977200d" + "410e7773200d410376736a20136a2017410f772017410d77732017410a76" + "736a20096a200420156a22042005200e7371200e736a2004411a77200441" + "1577732004410777736a4189b89988046b22096a220c2003200873712003" + "200871736a200c411e77200c41137773200c410a77736a200d200f411977" + "200f410e7773200f410376736a20146a2012410f772012410d7773201241" + "0a76736a200e6a200620096a22062004200573712005736a2006411a7720" + "06411577732006410777736a418e8ebacc036b220d6a2102200c201d6a21" + "1d2007201b6a200d6a211b200820206a21202006201e6a211e200320236a" + "21232004201f6a211f200520226a2122200141406b22012024470d000b20" + "00202236021c2000201f3602182000201e3602142000201b360210200020" + "2336020c200020203602082000201d360204200020023602000b89010101" + "7f027f0240200328020404402003280208220445044020012002450d031a" + "41bda9c0002d00001a20014109490d022002100b0c030b20032802002004" + "2001200210150c020b20012002450d011a41bda9c0002d00001a20014109" + "490d002002100b0c010b200210010b210320002002360208200020032001" + "20031b36020420002003453602000b3000200128021c20002d0000410274" + "220041b4a5c0006a280200200041a8a5c0006a280200200128022028020c" + "1103000bfc0402037f017e23004180016b220224000240024020012d0000" + "220441c00171220341c000470440200241186a200141186a290000370300" + "200241106a200141106a290000370300200241086a200141086a29000037" + "030020022001290000220537030020022005a7413f713a0000200241406b" + "2002102e20022d0040450d01200220022d00413a007f41a88ec000411f20" + "0241ff006a41988ec00041c88ec0001013000b02402004413f710d002001" + "2d00010d0020012d00020d0020012d00030d0020012d00040d0020012d00" + "050d0020012d00060d0020012d00070d0020012d00080d0020012d00090d" + "0020012d000a0d0020012d000b0d0020012d000c0d0020012d000d0d0020" + "012d000e0d0020012d000f0d0020012d00100d0020012d00110d0020012d" + "00120d0020012d00130d0020012d00140d0020012d00150d0020012d0016" + "0d0020012d00170d0020012d00180d0020012d00190d0020012d001a0d00" + "20012d001b0d0020012d001c0d0020012d001d0d0020012d001e0d002001" + "2d001f0d00200041c1013a0020200041033a00000c020b20004200370300" + "200041c0003a0020200041186a4200370300200041106a42003703002000" + "41086a42003703000c010b200241386a200241e8006a2903003703002002" + "41306a200241e0006a290300370300200220022903503703202002200241" + "d8006a2903003703282003044020002002290320370300200020033a0020" + "200041086a2002290328370300200041186a200241386a29030037030020" + "0041106a200241306a2903003703000c010b200241003602502002410136" + "0244200241a88cc00036024020024204370248200241406b419c8dc00010" + "1a000b20024180016a24000bf90a02057f097e23004190036b2207240020" + "00290300220c200041086a290300220d8450047e420005200741f0016a20" + "0c2001104d20074190026a200d2001104d200741e0016a200c2002104d20" + "074180026a200d2002104d200741b0016a200c2003104d200741a0016a20" + "0d2003104d200741d0016a200c2004104d200741c0016a200d2004104d20" + "072903f0012112200741c8016a290300200741a8016a290300220d200729" + "03c0017c220c200d54ad7c200c200741d8016a2903007c220d200c54ad7c" + "200d20072903d001220e20072903a0017c220c200e54ad200c2007418802" + "6a29030020074198026a290300220f2007290380027c220e200f54ad7c20" + "0e200741e8016a2903007c220f200e54ad7c200f20072903e00122102007" + "290390027c220e201054ad200e200741f8016a2903007c2213200e54ad7c" + "7c2210200f54ad7c7c2211200c54ad7c2011200741b8016a290300201020" + "072903b0017c220e201054ad7c7c220f201154ad7c7c2210200d54ad7c0b" + "21112000290310220c200041186a290300220d8450047e420005200741f0" + "006a200c2001104d20074190016a200d2001104d200741e0006a200c2002" + "104d20074180016a200d2002104d200741306a200c2003104d200741206a" + "200d2003104d200741d0006a200c2004104d200741406b200d2004104d20" + "0741c8006a290300200741286a290300220320072903407c2204200354ad" + "7c2004200741d8006a2903007c2203200454ad7c20032007290350220220" + "117c2204200254ad200420072903207c2202200454ad7c20022007418801" + "6a29030020074198016a29030022012007290380017c2204200154ad7c20" + "04200741e8006a2903007c2201200454ad7c20012007290360220c200f7c" + "2204200c54ad20042007290390017c220c200454ad7c200c200741f8006a" + "29030020072903702204200e7c220e200454ad7c7c220f200c54ad7c7c22" + "0c200154ad7c7c2204200254ad7c2004200741386a290300200729033022" + "0120107c2202200154ad7c2002200c7c2210200254ad7c7c2211200454ad" + "7c7c2214200354ad7c0b2104200720143703d002200720103703c0022007" + "200e3703b002200720123703a002200720043703d802200720113703c802" + "2007200f3703b802200720133703a80220074188036a4200370300200741" + "80036a4200370300200741f8026a4200370300200742003703f002200741" + "f0026a210a41ff032109420021034200210442002101420021024201210d" + "0340200741106a2009410776410474220b200741a0026a6a220829030020" + "08290308200941ff00712208104e2004423f88210c20044201862003423f" + "888421042007290310420183200342018684210302400240024002400240" + "200c200142018684220c42ddb0858ce8b691a8b87f852002420186200142" + "3f8884220242a9c0c689aece93b230858450044020032005542004200654" + "20042006511b450d0142ddb0858ce8b691a8b87f210142a9c0c689aece93" + "b23021020c020b200c42ddb0858ce8b691a8b87f58200242a9c0c689aece" + "93b23058200242a9c0c689aece93b230511b450d00200c21010c010b2002" + "42a9c0c689aece93b2307d200c42a3cffaf397c9eed7c7007c2202200420" + "0654ad200420067d22042003200554ad220f54ad7c7d220142017c221020" + "0254ad200c42ddb0858ce8b691a8b87f54ad7d2010420052ad7c50ad7d21" + "022004200f7d2104200320057d2103200941016a41810249200d42005271" + "0d014200210d0b2009450d010c020b4201210d20072008104f200a200b6a" + "22082008290300200729030084370300200841086a220820082903002007" + "41086a2903008437030020090d010b200020023703182000200137031020" + "0020043703082000200337030020074190036a24000f0b200941016b2109" + "0c000b000beb0101017f41e0a9c00041e0a9c0002d00002200410120001b" + "3a00000240200004400340024002400240200041016b0e03000501020b03" + "4041e0a9c0002d000022004101460d000b02400240200041016b0e030006" + "01030b000b41a49bc000412641cc9bc0001011000b41a89ac000410d4194" + "9bc0001011000b41e0a9c00041e0a9c0002d00002200410120001b3a0000" + "20000d000b0b41d8a9c00042a9c0c689aece93b23037030041d0a9c00042" + "ddb0858ce8b691a8b87f37030041c8a9c000428d95c7c396d2dac0977f37" + "030041c0a9c00042c7faf3c3ed82a3903c37030041e0a9c00041023a0000" + "0b0b840202047e017f200041086a29030021092000290300210a0240417f" + "2000290310220b200385200041186a290300220c20048584420052200320" + "0b562004200c562004200c511b1b220d417f470440200d41ff01710d0120" + "01200a58200220095820022009511b0d010b20072007200b7c220756ad20" + "07200620097c220b200654ad200b2005200a7c220a200554ad7c2209200b" + "54ad7c7c220b200754ad7c2008200c7c7c210c0b2000200a20017d370300" + "2000200920027d22072001200a56ad22017d37030820002003427f852203" + "200b7c220a2002200956ad2001200756ad7c7d42017c2209370310200020" + "0c20047d2003200a56ad2009200a54ad7c50ad7d3703180bbe3c020e7f04" + "7e23004180016b2203240041bda9c0002d00001a0240412010012202450d" + "00200242a9c0c689aece93b230370018200242ddb0858ce8b691a8b87f37" + "00102002428d95c7c396d2dac0977f370008200242c7faf3c3ed82a3903c" + "3700002003200210262000027f0240024002400240024002400240024002" + "40024002400240024002400240027f024002400240024002400240024002" + "7f02400240027f0240024002400240024002400240024002400240024002" + "400240024002400240024002400240200241046b28020022044178714124" + "4128200441037122051b4f044020054100200441c8004f1b0d0120021004" + "41bda9c0002d00001a412010012202450d30200241186a2204200141186a" + "290000370000200220012900002210370000200241106a2205200141106a" + "290000370000200241086a2208200141086a29000037000020022002411f" + "6a22012d00003a0000200120103c000020022d0001210120022002411e6a" + "22072d00003a0001200720013a00002002411d6a22012d00002107200120" + "022d00023a0000200220073a00022002411c6a22012d0000210720012002" + "2d00033a0000200220073a00032002411b6a22012d00002107200120022d" + "00043a0000200220073a00042002411a6a22012d00002107200120022d00" + "053a0000200220073a0005200241196a22012d00002107200120022d0006" + "3a0000200220073a000620042d00002101200420022d00073a0000200220" + "013a0007200241176a22012d00002104200120082d00003a000020082004" + "3a0000200241166a22012d00002104200120022d00093a0000200220043a" + "0009200241156a22012d00002104200120022d000a3a0000200220043a00" + "0a200241146a22012d00002104200120022d000b3a0000200220043a000b" + "200241136a22012d00002104200120022d000c3a0000200220043a000c20" + "0241126a22012d00002104200120022d000d3a0000200220043a000d2002" + "41116a22012d00002104200120022d000e3a0000200220043a000e20052d" + "00002101200520022d000f3a0000200220013a000f2003410c6a20021026" + "200241046b280200220141787141244128200141037122041b490d022004" + "4100200141c8004f1b0d032002100420032802082202450d120240024002" + "40200241016b220241feffffff0371450440200241ffffffff0371220441" + "016a2205410371210142002110200328020422082102200441034f044020" + "0541fcffffff07712104034020104280017c2110200241106a2102200441" + "046b22040d000b0b2001450d020340200235020020108620117c21112010" + "42207c2110200241046a2102200141016b22010d000b2011428080808010" + "540d010b200341406b200341146a2802003602002003200329020c370338" + "200341d0006a200341086a28020022043602002003200329020037034820" + "04450d0720032802402207450440200341206a418098c000280200220236" + "02002003412c6a2002360200200341f897c0002902002210370318200320" + "10370224200328024822020440200328024c220441046b28020022014178" + "7122052002410274220241044108200141037122011b6a490d0a20014100" + "2005200241276a4b1b0d0b200410040b20032802382202450d2520032802" + "3c220441046b280200220141787122052002410274220241044108200141" + "037122011b6a490d0b200141002005200241276a4b1b0d0c200410040c25" + "0b0240027f02400240024020044101460440200328024c220c2802002202" + "4101470d012003412c6a418098c000280200360200200341206a20034114" + "6a2802003602002003200329020c370318200341f897c000290200370224" + "20032802482202450d2a200c41046b280200220141787122042002410274" + "220241044108200141037122011b6a490d12200141002004200241276a4b" + "1b0d13200c10040c2a0b200328024c210c200328023c210b0240417f2004" + "200747200420074b1b22050d0020074102742102200b41046b2106200441" + "02742101200c41046b2109200420076b21070340200204402001450d0720" + "0220066a2105200120096a2108200241046b2102200141046b2101417f20" + "082802002208200528020022054720052008491b2205450d010c020b0b41" + "7f4100200741ffffffff03711b21050b200541ff01710e020204010b2002" + "450d1220074102742101200328023c2109200241ffff034d044020094104" + "6b2106410021040340200120066a22052005280200220541107622082008" + "20044110747220026e220420026c6b411074200541ffff03717222052002" + "6e22082004411074723602002005200220086c6b2104200141046b22010d" + "000b0c280b2002ad2110200741ffffffff036a220541ffffffff03712202" + "45044042002111200120096a0c270b200241016a41feffffff0771210120" + "0741027420096a41086b2102420021110340200241046a22042004350200" + "201142208684221120108022123e0200200220023502002011201020127e" + "7d42208684221120108022123e02002011201020127e7d2111200241086b" + "2102200141026b22010d000b0c250b2003412c6a200341146a2802003602" + "002003200329020c370224200341186a0c010b2003410036024020032802" + "38047f200b05200341386a418c87c0001023200328023c0b410136020020" + "0341406b4101360200200341206a41013602002003200329033837031820" + "0341246a0b220241086a418098c000280200360200200241f897c0002902" + "0037020020032802482202450d25200c41046b2802002201417871220420" + "02410274220241044108200141037122011b6a490d102001410020042002" + "41276a4b1b0d11200c10040c250b200c20044102746a41046b2202450d20" + "20022802002202672208450440200341f8006a200341146a280200360200" + "2003200329020c370370200341186a200341f0006a200c20041024200328" + "02482202450d25200c41046b280200220141787122042002410274220241" + "044108200141037122011b6a490d12200141002004200241276a4b1b0d13" + "200c10040c250b024002402003280238418080808078470d00200b280208" + "0d002003410036026c20034280808080c0003702640c010b200341e4006a" + "2003410c6a2002452008411f7110250b200341186a200341e4006a027f02" + "402003280248418080808078470d00200c2802080d004100210420034100" + "3602704100210541040c010b200341f0006a20032002452008411f711025" + "200328027021042003280278210520032802740b220120051024200341e0" + "006a200341206a28020036020020032003290218370358200328022c2105" + "200328022821092003280224210c20040440200141046b28020022074178" + "7122062004410274220441044108200741037122071b6a490d1420074100" + "2006200441276a4b1b0d15200110040b02400240200c4180808080784604" + "404100210120092802080d0141042105410021040c220b41002101200545" + "0d20200520024522044d0d20200520046b210b20020d0102400240200b41" + "0274220a20092206200620044102746a22056b4b04402005200a6a210120" + "06200a6a2106200a4110490d0141002006410371220d6b210e0240200641" + "7c71220220064f0d00200d41016b210f0240200d450440200121040c010b" + "200d2107200121040340200641016b2206200441016b22042d00003a0000" + "200741016b22070d000b0b200f4103490d00200441046b21040340200641" + "016b200441036a2d00003a0000200641026b200441026a2d00003a000020" + "0641036b200441016a2d00003a0000200641046b220620042d00003a0000" + "200441046b210420022006490d000b0b2002200a200d6b2204417c71220a" + "6b21064100200a6b210702402001200e6a2201410371450440200220064d" + "0d01200420056a41046b21050340200241046b2202200528020036020020" + "0541046b2105200220064b0d000b0c010b200220064d0d00200141037422" + "0a411871210d2001417c71220f41046b21054100200a6b411871210e200f" + "280200210a0340200241046b2202200a200e742005280200220a200d7672" + "360200200541046b2105200220064b0d000b0b2004410371210a20012007" + "6a21010c010b200a41104f044002402006410020066b41037122076a2204" + "20064d0d00200741016b210d200521022007044020072101034020062002" + "2d00003a0000200241016a2102200641016a2106200141016b22010d000b" + "0b200d4107490d000340200620022d00003a0000200641016a200241016a" + "2d00003a0000200641026a200241026a2d00003a0000200641036a200241" + "036a2d00003a0000200641046a200241046a2d00003a0000200641056a20" + "0241056a2d00003a0000200641066a200241066a2d00003a000020064107" + "6a200241076a2d00003a0000200241086a2102200641086a22062004470d" + "000b0b2004200a20076b2201417c71220d6a21060240200520076a220241" + "0371450440200420064f0d01200221050340200420052802003602002005" + "41046a2105200441046a22042006490d000b0c010b200420064f0d002002" + "410374220a41187121072002417c71220f41046a21054100200a6b411871" + "210e200f280200210a03402004200a2007762005280200220a200e747236" + "0200200541046a2105200441046a22042006490d000b0b2001410371210a" + "2002200d6a21050b20062006200a6a22044f0d01200a41016b2101200a41" + "0771220204400340200620052d00003a0000200541016a2105200641016a" + "2106200241016b22020d000b0b20014107490d010340200620052d00003a" + "0000200641016a200541016a2d00003a0000200641026a200541026a2d00" + "003a0000200641036a200541036a2d00003a0000200641046a200541046a" + "2d00003a0000200641056a200541056a2d00003a0000200641066a200541" + "066a2d00003a0000200641076a200541076a2d00003a0000200541086a21" + "05200641086a22062004470d000b0c010b2006200a6b220220064f0d0020" + "0a41016b2104200a410371220504400340200641016b2206200141016b22" + "012d00003a0000200541016b22050d000b0b20044103490d00200141046b" + "21050340200641016b200541036a2d00003a0000200641026b200541026a" + "2d00003a0000200641036b200541016a2d00003a0000200641046b220620" + "052d00003a0000200541046b210520022006490d000b0b0c010b41042105" + "200941046a28020021072009280208220420024522024d04402004410274" + "21022004044041bda9c0002d00001a200210012205450d360b2005200720" + "02104c1a0c210b41bda9c0002d00001a200420026b220b41027422011001" + "2209450d342009200720024102746a2001104c1a200b210c0b2008411f71" + "2201450d1c200b450440410021010c1e0b41002105410020086b411f7121" + "042009200b4102746a2102200b41016b41ffffffff0371220741016a2206" + "410371210820074103490d1b200641fcffffff077121070340200241046b" + "220620062802002206200176200572360200200241086b22052006200474" + "20052802002205200176723602002002410c6b2206200520047420062802" + "00220620017672360200200241106b220220062004742002280200220520" + "01767236020020052004742105200741046b22070d000b0c1b0b2011500d" + "14200328021421022003280210210502402011428080045a04402002450d" + "0320024102742104200241ffffffff036a220741ffffffff037122020d01" + "42002110200420056a0c180b2002450d022011a721040c180b200241016a" + "41feffffff07712101200420056a41086b21024200211003402002350200" + "200241046a35020020104220868420118242208684201182211020024108" + "6b2102200141026b22010d000b0c150b2003280210210520032802142202" + "0d160b410421074100210241000c170b41f996c000412e41a897c0001011" + "000b41b897c000412e41e897c0001011000b41f996c000412e41a897c000" + "1011000b41b897c000412e41e897c0001011000b20034100360228200341" + "0136021c200341a099c00036021820034204370220200341186a41fc86c0" + "00101a000b41f996c000412e41a897c0001011000b41b897c000412e41e8" + "97c0001011000b41f996c000412e41a897c0001011000b41b897c000412e" + "41e897c0001011000b41f996c000412e41a897c0001011000b41b897c000" + "412e41e897c0001011000b200341003602282003410136021c200341a099" + "c00036021820034204370220200341186a41ec86c000101a000b41f996c0" + "00412e41a897c0001011000b41b897c000412e41e897c0001011000b41f9" + "96c000412e41a897c0001011000b41b897c000412e41e897c0001011000b" + "41f996c000412e41a897c0001011000b41b897c000412e41e897c0001011" + "000b200341003602282003410136021c200341a099c00036021820034204" + "370220200341186a41989ac000101a000b200241086a0b21022007410171" + "047e201005200241046b3502002010422086842011820ba721010c010b20" + "0241027421024100210103402001411074200241046b220220056a280200" + "220141107672200470411074200141ffff037172200470210120020d000b" + "0b41002102200341206a418098c000280200360200200341f897c0002902" + "0037031820014504404104210741000c010b200341186a41f498c0001023" + "200328021c220720013602004101210220032802180b210a024002400240" + "0240200328020022010440200841046b2802002204417871220620014102" + "74220141044108200441037122041b6a490d01200441002006200141276a" + "4b1b0d02200810040b200328020c2201450d0e200541046b280200220441" + "787122082001410274220141044108200441037122041b6a490d02200441" + "002008200141276a4b1b0d03200510040c0e0b41f996c000412e41a897c0" + "001011000b41b897c000412e41e897c0001011000b41f996c000412e41a8" + "97c0001011000b41b897c000412e41e897c0001011000b2008450d002002" + "41046b21020340200220022802002207200176200572360200200241046b" + "210220072004742105200841016b22080d000b0b41002101200b450d0020" + "09200b41027422026a41046b2802000440200b21010c010b200941046b21" + "07200b41ffffffff037121040340200421052002450d01200441016b2104" + "200220076a2108200241046b21022008280200450d000b200b2005200520" + "0b4b1b21010b2001200c4102764f0d00024002402001200c4d0440410021" + "04200c450440200921050c050b200c41027421022001450440200941046b" + "2802002205417871220841044108200541037122051b20026a490d022005" + "41002008200241276a4b1b0d0320091004410421050c050b200121042009" + "200241042001410274101522050d040c180b200341003602282003410136" + "021c200341ec84c00036021820034204370220200341186a41f484c00010" + "1a000b41f996c000412e41a897c0001011000b41b897c000412e41e897c0" + "001011000b200c2104200921050b200341206a200341e0006a2802003602" + "00200320032903583703182003200136022c200320053602282003200436" + "02240c040b419c87c0001020000b200241086a0b21022005410171047e20" + "1105200241046b22022002350200201142208684221120108022123e0200" + "2011201020127e7d0ba721040b2003280238210b02402009200741027422" + "026a41046b2802000d00200941046b210620072101034020012105200245" + "0440410021070c020b200541016b2101200220066a2108200241046b2102" + "2008280200450d000b20072005200520074b1b21070b0240200b41027620" + "074d0440200b21020c010b2007200b4b0d0341002102200b450d00200b41" + "027421012007450440200941046b28020022054178712208410441082005" + "41037122051b20016a490d05200541002008200141276a4b1b0d06200910" + "04410421090c010b2009200141042007220241027410152209450d100b20" + "034100360250200404402003280248047f200c05200341c8006a41dc86c0" + "001023200328024c0b2004360200200341013602500b2003412c6a200341" + "d0006a280200360200200320032903483702242003200936021c20032002" + "3602180b200328022c2102200328022821072003280224210a2003280218" + "2201450d00200328021c220541046b280200220441787122082001410274" + "220141044108200441037122041b6a490d04200441002008200141276a4b" + "1b0d05200510040b200245044041bda9c0002d00001a4101210d41011001" + "2204450d0e200441003a0000410121010c080b4100210102402002ad4205" + "86200720024102746a41046b28020067ad7d221042038820104207834200" + "52ad7c221050044041012104410021050c010b41bda9c0002d00001a2010" + "a7220510012204450d0e0b200341003602202003200436021c2003200536" + "02182007200241016b22054102746a210920050440200241027441046b21" + "06410021020340200220076a280200210120032802182002460440200341" + "186a41ac88c0001018200328021c21040b200220046a20013a0000200320" + "0241016a2205360220200141087621082003280218200546044020034118" + "6a41ac88c0001018200328021c21040b200220046a41016a20083a000020" + "03200541016a220536022020014110762108200328021820054604402003" + "41186a41ac88c0001018200328021c21040b200220046a41026a20083a00" + "002003200541016a22053602202001411876210120032802182005460440" + "200341186a41ac88c0001018200328021c21040b200220046a41036a2001" + "3a00002003200541016a2205360220200241046a21012005210220012006" + "470d000b0b20092802002202450d05034020032802182001460440200341" + "186a419c88c00010180b200328021c220420016a20023a00002003200141" + "016a2201360220200241ff014b21052002410876210220050d000b0c060b" + "200341003602282003410136021c200341ec84c000360218200342043702" + "20200341186a41f484c000101a000b41f996c000412e41a897c000101100" + "0b41b897c000412e41e897c0001011000b41f996c000412e41a897c00010" + "11000b41b897c000412e41e897c0001011000b200328021c21040b200328" + "0218210d200141014b0d010b200341306a4200370300200341286a420037" + "0300200341206a4200370300200342003703180c010b200120046a210c41" + "002102200141017622084101470440200141016b2105200841feffffff07" + "71210b0340200420056a22062d000021092006200220046a22082d00003a" + "0000200820093a0000200c2002417e736a22062d00002109200620084101" + "6a22082d00003a0000200820093a0000200541026b2105200b200241026a" + "2202470d000b0b20014102710440200220046a22052d000021082005200c" + "2002417f736a22022d00003a0000200220083a00000b200341306a420037" + "0300200341286a4200370300200341206a42003703002003420037031820" + "0141204b0d010b200320016b41386a20042001104c1a2003290328221042" + "388620104280fe0383422886842010428080fc0783421886201042808080" + "f80f834208868484201042088842808080f80f832010421888428080fc07" + "838420104228884280fe038320104238888484842112200341306a290300" + "221042388620104280fe0383422886842010428080fc0783421886201042" + "808080f80f834208868484201042088842808080f80f8320104218884280" + "80fc07838420104228884280fe038320104238888484842113417f200329" + "0318221042b0c8b99297bc8cd02985200341206a290300221142b8a195b2" + "9bb0a0acdd008584420052201142388620114280fe038342288684201142" + "8080fc0783421886201142808080f80f8342088684842011420888428080" + "80f80f832011421888428080fc07838420114228884280fe038320114238" + "88848484221142ddb0858ce8b691a8b87f54201042388620104280fe0383" + "422886842010428080fc0783421886201042808080f80f83420886848420" + "1042088842808080f80f832010421888428080fc07838420104228884280" + "fe03832010423888848484221042a9c0c689aece93b23054201042a9c0c6" + "89aece93b230511b1b2202417f47044041022101200241ff01710d022013" + "42c7faf3c3ed82a3903c542012428d95c7c396d2dac0977f542012428d95" + "c7c396d2dac0977f511b450d020b20002011370320200020133703102000" + "20103703282000201237031841000c020b410021010b200020013a000141" + "010b3a00000240024002400240200a0440200741046b2802002202417871" + "2201200a410274220541044108200241037122021b6a490d012002410020" + "01200541276a4b1b0d02200710040b200d0440200441046b280200220241" + "7871220141044108200241037122021b200d6a490d03200241002001200d" + "41276a4b1b0d04200410040b20034180016a24000f0b41f996c000412e41" + "a897c0001011000b41b897c000412e41e897c0001011000b41f996c00041" + "2e41a897c0001011000b41b897c000412e41e897c0001011000b000bc80d" + "02057f167e230041e0006b22032400200341386a2204200141186a290300" + "370300200341306a2205200141106a290300370300200320012903003703" + "202003200141086a29030037032842ddb0858ce8b691a8b87f2112200341" + "206a20022903002219200241086a290300221a2002290310221b20024118" + "6a290300221c42c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b20" + "042903002113200529030021142003290320211520032903282116200341" + "106a2206200141306a290300370300200341186a2207200141386a290300" + "370300200320012903203703002003200141286a29030037030820032002" + "290320220e200241286a290300220c20022903302211200241386a290300" + "221d42c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2004200729" + "030037030020052006290300370300200320032903083703282003200329" + "0300370320200341206a42c6faf3c3ed82a3903c428d95c7c396d2dac097" + "7f42ddb0858ce8b691a8b87f42a9c0c689aece93b23042c7faf3c3ed82a3" + "903c428d95c7c396d2dac0977f102b02400240024020142005290300220b" + "7c220d2016200329032822087c2209200854ad2009201520032903202208" + "7c220a200854ad7c2208200954ad7c7c220942ddb0858ce8b691a8b87f85" + "200b200d56ad2009200d54ad7c201320042903007c7c220d42a9c0c689ae" + "ce93b2308584500440200a42c7faf3c3ed82a3903c542008428d95c7c396" + "d2dac0977f542008428d95c7c396d2dac0977f511b450d0242a9c0c689ae" + "ce93b230210d0c010b200942deb0858ce8b691a8b87f54200d42a9c0c689" + "aece93b23054200d42a9c0c689aece93b230511b450d01200921120b200a" + "2117200821180c010b200d20092008200a42c7faf3c3ed82a3903c7d2217" + "200a5aad220a7d220b42f3eab8bce9ada5bfe8007c2218200b54ad200820" + "0a54ad7d7c2208200954ad200842a2cffaf397c9eed7c7007c2212200854" + "ad7c50ad7d42a9c0c689aece93b2307d210d0b42ddb0858ce8b691a8b87f" + "210f024002402001290330221020012903107c2209200141286a29030022" + "0a200141086a2903007c2208200a54ad20082001290320220a2001290300" + "7c220b200a54ad7c220a200854ad7c7c220842ddb0858ce8b691a8b87f85" + "2009201054ad2008200954ad7c200141386a290300200141186a2903007c" + "7c220942a9c0c689aece93b2308584500440200b42c7faf3c3ed82a3903c" + "54200a428d95c7c396d2dac0977f54200a428d95c7c396d2dac0977f511b" + "450d01200b2110200a210b42a9c0c689aece93b23021090c020b200842de" + "b0858ce8b691a8b87f54200942a9c0c689aece93b23054200942a9c0c689" + "aece93b230511b450d00200b2110200a210b2008210f0c010b2009200820" + "0a200b42c7faf3c3ed82a3903c7d2210200b5aad220f7d220942f3eab8bc" + "e9ada5bfe8007c220b200954ad200a200f54ad7d7c220a200854ad200a42" + "a2cffaf397c9eed7c7007c220f200a54ad7c50ad7d42a9c0c689aece93b2" + "307d21090b2003200f37035020032010370340200320093703582003200b" + "37034842ddb0858ce8b691a8b87f210b024002402011201b7c2209200c20" + "1a7c2208200c54ad2008200e20197c220c200e54ad7c220a200854ad7c7c" + "220842ddb0858ce8b691a8b87f852009201154ad2008200954ad7c201c20" + "1d7c7c220942a9c0c689aece93b2308584500440200c42c7faf3c3ed82a3" + "903c54200a428d95c7c396d2dac0977f54200a428d95c7c396d2dac0977f" + "511b450d01200c210e200a210c42a9c0c689aece93b23021090c020b2008" + "42deb0858ce8b691a8b87f54200942a9c0c689aece93b23054200942a9c0" + "c689aece93b230511b450d00200c210e200a210c2008210b0c010b200920" + "08200a200c42c7faf3c3ed82a3903c7d220e200c5aad22117d220b42f3ea" + "b8bce9ada5bfe8007c220c200b54ad200a201154ad7d7c220a200854ad20" + "0a42a2cffaf397c9eed7c7007c220b200a54ad7c50ad7d42a9c0c689aece" + "93b2307d21090b200341406b200e200c200b200942c7faf3c3ed82a3903c" + "428d95c7c396d2dac0977f102b200341406b201520162014201342c7faf3" + "c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9" + "c0c689aece93b230102d200341406b200329030020032903082003290310" + "200341186a29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42" + "ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2000200d37031820" + "002012370310200020183703082000201737030020002003290340370320" + "200041286a2003290348370300200041306a200341d0006a290300370300" + "200041386a200341d8006a290300370300200341e0006a24000ba706010a" + "7e42ddb0858ce8b691a8b87f210a02400240024020022903102206200129" + "03107c2207200241086a2903002203200141086a2903007c2204200354ad" + "20042002290300220320012903007c2205200354ad7c2203200454ad7c7c" + "220442ddb0858ce8b691a8b87f852006200756ad2004200754ad7c200241" + "186a290300200141186a2903007c7c220742a9c0c689aece93b230858450" + "0440200542c7faf3c3ed82a3903c542003428d95c7c396d2dac0977f5420" + "03428d95c7c396d2dac0977f511b450d0242a9c0c689aece93b23021070c" + "010b200442deb0858ce8b691a8b87f54200742a9c0c689aece93b2305420" + "0742a9c0c689aece93b230511b450d012004210a0b2005210b2003210c0c" + "010b200720042003200542c7faf3c3ed82a3903c7d220b20055aad22057d" + "220642f3eab8bce9ada5bfe8007c220c200654ad2003200554ad7d7c2203" + "200454ad200342a2cffaf397c9eed7c7007c220a200354ad7c50ad7d42a9" + "c0c689aece93b2307d21070b42ddb0858ce8b691a8b87f21080240024020" + "02290330220920012903307c2204200241286a2903002205200141286a29" + "03007c2203200554ad20032002290320220520012903207c2206200554ad" + "7c2205200354ad7c7c220342ddb0858ce8b691a8b87f852004200954ad20" + "03200454ad7c200241386a290300200141386a2903007c7c220442a9c0c6" + "89aece93b2308584500440200642c7faf3c3ed82a3903c542005428d95c7" + "c396d2dac0977f542005428d95c7c396d2dac0977f511b450d0120062109" + "2005210642a9c0c689aece93b23021040c020b200342deb0858ce8b691a8" + "b87f54200442a9c0c689aece93b23054200442a9c0c689aece93b230511b" + "450d002006210920052106200321080c010b200420032005200642c7faf3" + "c3ed82a3903c7d220920065aad22087d220442f3eab8bce9ada5bfe8007c" + "2206200454ad2005200854ad7d7c2205200354ad200542a2cffaf397c9ee" + "d7c7007c2208200554ad7c50ad7d42a9c0c689aece93b2307d21040b2000" + "2008370330200020093703202000200a3703102000200b37030020002004" + "37033820002006370328200020073703182000200c3703080bf10802087f" + "087e23004180016b22022400200141386a290300210e200141286a290300" + "210b200141186a2203290300210d2001290330210f2001290320210a2001" + "290310210c02400240024020012903002210200141086a22042903002211" + "844200520d00200c200d844200520d00200a200b844200520d00200e200f" + "84500d010b200241186a22052003290300370300200241106a2206200141" + "106a22072903003703002002200429030037030820022001290300370300" + "200220102011200c200d42c7faf3c3ed82a3903c428d95c7c396d2dac097" + "7f102b200241386a2204200141206a220341186a29030037030020024130" + "6a2208200341106a22092903003703002002200341086a29030037032820" + "022003290300370320200241206a200a200b200f200e42c7faf3c3ed82a3" + "903c428d95c7c396d2dac0977f102b200241206a42c6faf3c3ed82a3903c" + "428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93" + "b23042c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2002200229" + "032020022903282008290300200429030042c7faf3c3ed82a3903c428d95" + "c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b23010" + "2d2000027e2002290300220d2006290300220c842002290308220b200529" + "0300220a84845004404200210f42000c010b200241d8006a2204200a3703" + "002002200c3703502002200d3703402002200b370348200242a9c0c689ae" + "ce93b230370378200242ddb0858ce8b691a8b87f3703702002428d95c7c3" + "96d2dac0977f370368200242c7faf3c3ed82a3903c370360200241406b20" + "0241e0006a103a2004290300210d2002290348210c2002290340210b2002" + "290350210a200241d0006a20072903003703002004200141186a29030037" + "0300200220012903003703402002200141086a290300370348200241406b" + "200b200c200a200d42c7faf3c3ed82a3903c428d95c7c396d2dac0977f10" + "2b200241f8006a2201200341186a290300370300200241f0006a22042009" + "2903003703002002200341086a2903003703682002200329030037036020" + "0241e0006a200b200c200a200d42c7faf3c3ed82a3903c428d95c7c396d2" + "dac0977f102b2004290300220c20022903602210842001290300220e2002" + "290368220b84845004404200210c4200210b4200210a4200210e4200210f" + "42010c010b4200210f427f4200427f4200201042788342c7faf3c3ed82a3" + "903c561b220a200a200b54ad7d200a200b7d220a42f3eab8bce9ada5bfe8" + "007d220b200a54ad7c42017c2211200c7d220d42a4cffaf397c9eed7c700" + "7d220a200d54ad200c201156ad7d427f511b200e7d42a9c0c689aece93b2" + "307c210e42c7faf3c3ed82a3903c20107d210c42010b3703002000200a37" + "03402000200c370330200020022903403703102000200f3703082000200e" + "3703482000200b370338200041186a2002290348370300200041206a2002" + "41d0006a290300370300200041286a200241d8006a2903003703000c010b" + "20004200370308200042003703000b20024180016a24000b090020004100" + "3602000b7b01027f230041106b2203240041f0a5c00041f0a5c000280200" + "220441016a360200024020044100480d00024041bca9c0002d0000450440" + "41b8a9c00041b8a9c00028020041016a36020041eca5c00028020041004e" + "0d010c020b200341086a20002001110000000b41bca9c00041003a000020" + "02450d00000b000b0c00200020012902003703000bba0201047f411f2102" + "20004200370210200141ffffff074d04402001410620014108766722026b" + "7641017120024101746b413e6a21020b2000200236021c200241027441f4" + "a5c0006a2103410120027422044190a9c000280200714504402003200036" + "0200200020033602182000200036020c200020003602084190a9c0004190" + "a9c0002802002004723602000f0b02400240200120032802002204280204" + "417871460440200421020c010b2001411920024101766b41002002411f47" + "1b742103034020042003411d764104716a41106a22052802002202450d02" + "200341017421032002210420022802044178712001470d000b0b20022802" + "082203200036020c20022000360208200041003602182000200236020c20" + "0020033602080f0b20052000360200200020043602182000200036020c20" + "0020003602080bd20102067f017e230041206b2201240002400240200028" + "02002203417f460d00410420034101742202200341016a2204200220044b" + "1b2202200241044d1b2204ad42e0007e22074220884200520d002007a722" + "0641f0ffffff074b0d004100210220012003047f2001200341e0006c3602" + "1c2001200028020436021441100520020b360218200141086a2006200141" + "146a103720012802084101470d0120012802102102200128020c21050b20" + "0541dca4c0001019000b200128020c210320002004360200200020033602" + "04200141206a24000b7f01017f027f0240027f0240200228020404402002" + "28020822034504402001450d0441bda9c0002d00001a0c020b2002280200" + "20034110200110150c020b2001450d0241bda9c0002d00001a0b2001100b" + "0b2202411020021b21032002450c010b4110210341000b21022000200136" + "020820002003360204200020023602000bd20102067f017e230041206b22" + "0124000240024020002802002203417f460d004104200341017422022003" + "41016a2204200220044b1b2202200241044d1b2204ad42c0017e22074220" + "884200520d002007a7220641f0ffffff074b0d004100210220012003047f" + "2001200341c0016c36021c2001200028020436021441100520020b360218" + "200141086a2006200141146a103720012802084101470d01200128021021" + "02200128020c21050b200541eca4c0001019000b200128020c2103200020" + "0436020020002003360204200141206a24000bdd0102067f017e23004120" + "6b2202240020002802002204417f460440410020011019000b4104200441" + "01742203200441016a2205200320054b1b2203200341044d1b2205ad42c0" + "017e22084220884200520440410020011019000b02402008a7220741f0ff" + "ffff074d04404100210320022004047f2002200441c0016c36021c200220" + "0028020436021441100520030b360218200241086a2007200241146a1037" + "20022802084101470d01200228020c2106200228021021030b2006200110" + "19000b200228020c21042000200536020020002004360204200241206a24" + "000b830b02037f167e230041c0016b22022400200241186a220320004118" + "6a290300370300200241106a2204200041106a2903003703002002200029" + "03003703002002200041086a290300370308200241386a200141186a2903" + "002218370300200241306a200141106a2903002213370300200220014108" + "6a2903002214370328200220012903002215370320200242003703582002" + "42003703502002420037034820024201370340200241f8006a2201420037" + "0300200241f0006a42003703002002420037036820024200370360200329" + "0300210e2004290300210f2002290308210a200229030021072013211020" + "182111201521082014210b03400240200242003703980120024200370390" + "0120024200370388012002420137038001200220024180016a104a450440" + "200241406b21010c010b200241b8016a20024198016a2903003703002002" + "41b0016a20024190016a29030037030020022002290388013703a8012002" + "2002290380013703a001200241206a200241a0016a104a450440200241e0" + "006a21010c010b200241d8006a2903002112200229035021052002290348" + "21162002290340210d2007a74101714504400340200a423f862007420188" + "8421070240200da74101714504402016423f86200d42018884210d200542" + "3f8620164201888421160c010b200520137c2209201420167c2205201454" + "ad2005200d20157c220d201554ad7c2206200554ad7c7c2205423f862006" + "4201888421162006423f86200d42018884210d2009201354ad2005200954" + "ad7c201220187c7c21120b200f423f86200a42018884210a200e423f8620" + "0f42018884210f200e420188210e2012423f862005420188842105201242" + "018821122007420183500d000b2002200f3703102002200e3703180b2002" + "20053703502002200d370340200220073703002002201237035820022016" + "3703482002200a3703082001290300210920022903702106200229036821" + "172002290360210c2008a74101714504400340200b423f86200842018884" + "21080240200c420183a70440200620137c2219201420177c2206201454ad" + "2006200c20157c221a201554ad7c220c200654ad7c7c2206423f86200c42" + "0188842117200c423f86201a42018884210c2013201956ad2006201954ad" + "7c200920187c7c21090c010b2017423f86200c42018884210c2006423f86" + "20174201888421170b2010423f86200b42018884210b2011423f86201042" + "0188842110201142018821112009423f8620064201888421062009420188" + "21092008420183500d000b20022010370330200220113703380b20022006" + "3703702002200c3703602002200837032020022009370378200220173703" + "682002200b37032802400240200f201085200e2011858450044020072008" + "54200a200b54200a200b511b0d010c020b200f201056200e201156200e20" + "11511b0d010b2002200820077d427e8322063703202002200b200a7d2209" + "2007200856ad22087d220c37032820024201200a200b56ad2008200956ad" + "7c7d2208200f7d220b20107c220942017d221037033020022011200e7d20" + "09420052ad2009200b54ad2008200f54ad7d7c50ad7d2211370338200241" + "e0006a200d2016200520122015201420132018102d20062108200c210b0c" + "020b2002200720087d427e8322123703002002200a200b7d220520072008" + "54ad22077d220d37030820024201200a200b54ad2005200754ad7c7d2207" + "200f7c220520107d220a42017d220f3703102002200e20117d200a420052" + "ad2005200754ad2005201054ad7d7c50ad7d220e370318200241406b200c" + "2017200620092015201420132018102d20122107200d210a0c010b0b2000" + "2001290300370300200041186a200141186a290300370300200041106a20" + "0141106a290300370300200041086a200141086a290300370300200241c0" + "016a24000bc92602357f187e230041c0066b22032400200341386a222b20" + "0141386a2226290300370300200341306a222c200141306a220e29030037" + "0300200341286a222d200141286a220f290300370300200341206a222e20" + "0141206a2210290300370300200341186a222f200141186a221129030037" + "0300200341106a2230200141106a22122903003703002003200129030037" + "03002003200141086a2227290300370308200320012002102f200341f800" + "6a2214200141f8006a2204290300370300200341f0006a2215200141f000" + "6a2205290300370300200341e8006a2216200141e8006a22062903003703" + "00200341e0006a2217200141e0006a2207290300370300200341d8006a22" + "0a200141d8006a2208290300370300200341d0006a220b200141d0006a22" + "092903003703002003200141c8006a220c29030037034820032001290340" + "370340200341406b200141406b2213200241406b2228102f200341b8016a" + "2220200141b8016a290300370300200341b0016a2221200141b0016a2903" + "00370300200341a8016a2222200141a8016a290300370300200341a0016a" + "2223200141a0016a29030037030020034198016a222420014198016a2903" + "0037030020034190016a222520014190016a290300370300200320014188" + "016a2903003703880120032001290380013703800120034180016a200141" + "80016a222920024180016a222a102f200341f8016a221820042903003703" + "00200341f0016a22192005290300370300200341e8016a221a2006290300" + "370300200341e0016a221b2007290300370300200341d8016a221c200829" + "0300370300200341d0016a221d20092903003703002003200c2903003703" + "c801200320012903403703c001200341c0016a201320291030200341b802" + "6a200241f8006a290300370300200341b0026a200241f0006a2903003703" + "00200341a8026a200241e8006a290300370300200341a0026a200241e000" + "6a29030037030020034198026a200241d8006a2903003703002003419002" + "6a200241d0006a2903003703002003200241c8006a290300370388022003" + "20022903403703800220034180026a2028202a1030200341c0056a200341" + "c0016a20034180026a102f2018200341f8056a2204290300370300201920" + "0341f0056a2205290300370300201a200341e8056a220629030037030020" + "1b200341e0056a2207290300370300201c200341d8056a22082903003703" + "00201d200341d0056a2209290300370300200320032903c8053703c80120" + "0320032903c0053703c00120034198066a220c201c290300370300200341" + "90066a220d201d290300370300200320032903c801370388062003200329" + "03c0013703800620034180066a2003290340223820032903482239200b29" + "0300223a200a290300223b42c7faf3c3ed82a3903c428d95c7c396d2dac0" + "977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200341b806" + "6a220a2018290300370300200341b0066a220b2019290300370300200320" + "1a2903003703a8062003201b2903003703a006200341a0066a2017290300" + "223c2016290300223d2015290300223e2014290300223f42c7faf3c3ed82" + "a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689" + "aece93b230102d2008200c29030022403703002009200d29030022413703" + "00200720032903a00622423703002005200b290300224337030020062003" + "2903a80622443703002004200a2903002245370300200320032903880622" + "463703c805200320032903800622473703c0052018204537030020192043" + "370300201a2044370300201b2042370300201c2040370300201d20413703" + "00200320463703c801200320473703c001200c201c290300370300200d20" + "1d290300370300200320032903c80137038806200320032903c001370380" + "0620034180066a2003290380012003290388012025290300202429030042" + "c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b8" + "7f42a9c0c689aece93b230102d200a2018290300370300200b2019290300" + "3703002003201a2903003703a8062003201b2903003703a006200341a006" + "6a202329030020222903002021290300202029030042c7faf3c3ed82a390" + "3c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece" + "93b230102d2008200c29030022403703002009200d290300224137030020" + "0720032903a00622423703002005200b2903002243370300200620032903" + "a80622443703002004200a29030022453703002003200329038806224637" + "03c805200320032903800622473703c00520182045370300201920433703" + "00201a2044370300201b2042370300201c2040370300201d204137030020" + "0320463703c801200320473703c001200342003703b805200342003703b0" + "05200342003703a805200342013703a00520034200370398052003420037" + "03900520034200370388052003420937038005200341c0056a200341c001" + "6a20034180056a102f201820042903003703002019200529030037030020" + "1a2006290300370300201b2007290300370300201c200829030037030020" + "1d2009290300370300200320032903c8053703c801200320032903c00537" + "03c001200341c0056a200341c0016a200310302018200429030037030020" + "192005290300370300201a2006290300370300201b200729030037030020" + "1c2008290300370300201d2009290300370300200320032903c8053703c8" + "01200320032903c0053703c001200341d0026a2214201229030037030020" + "0341d8026a22152011290300370300200341e0026a221620102903003703" + "00200341e8026a2217200f290300370300200341f0026a221e200e290300" + "370300200341f8026a221f2026290300370300200320012903003703c002" + "200320272903003703c802200341c0026a200120131030200341b8036a20" + "0241386a2231290300370300200341b0036a200241306a22322903003703" + "00200341a8036a200241286a2233290300370300200341a0036a20024120" + "6a223429030037030020034198036a200241186a22352903003703002003" + "4190036a200241106a22362903003703002003200241086a223729030037" + "038803200320022903003703800320034180036a200220281030200341c0" + "056a200341c0026a20034180036a102f201f2004290300370300201e2005" + "290300370300201720062903003703002016200729030037030020152008" + "29030037030020142009290300370300200320032903c8053703c8022003" + "20032903c0053703c002200c2015290300370300200d2014290300370300" + "200320032903c80237038806200320032903c0023703800620034180066a" + "200329030022402003290308224120302903002242202f290300224342c7" + "faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f" + "42a9c0c689aece93b230102d200a201f290300370300200b201e29030037" + "0300200320172903003703a806200320162903003703a006200341a0066a" + "202e2903002244202d2903002245202c2903002246202b290300224742c7" + "faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f" + "42a9c0c689aece93b230102d2008200c29030022483703002009200d2903" + "002249370300200720032903a006224a3703002005200b290300224b3703" + "00200620032903a806224c3703002004200a290300224d37030020032003" + "29038806224e3703c8052003200329038006224f3703c005201f204d3703" + "00201e204b3703002017204c3703002016204a3703002015204837030020" + "1420493703002003204e3703c8022003204f3703c002200c201529030037" + "0300200d2014290300370300200320032903c80237038806200320032903" + "c0023703800620034180066a20382039203a203b42c7faf3c3ed82a3903c" + "428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93" + "b230102d200a201f290300370300200b201e290300370300200320172903" + "003703a806200320162903003703a006200341a0066a203c203d203e203f" + "42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8" + "b87f42a9c0c689aece93b230102d2008200c29030022383703002009200d" + "2903002239370300200720032903a006223a3703002005200b290300223b" + "370300200620032903a806223c3703002004200a290300223d3703002003" + "200329038806223e3703c8052003200329038006223f3703c005201f203d" + "370300201e203b3703002017203c3703002016203a370300201520383703" + "00201420393703002003203e3703c8022003203f3703c002200341f8036a" + "2020290300370300200341f0036a2021290300370300200341e8036a2022" + "290300370300200341e0036a2023290300370300200341d8036a20242903" + "00370300200341d0036a202529030037030020032003290388013703c803" + "20032003290380013703c003200341c0036a20034180016a20034180056a" + "102f200341c0056a200341c0026a200341c0036a1030201f200429030037" + "0300201e2005290300370300201720062903003703002016200729030037" + "03002015200829030037030020142009290300370300200320032903c805" + "3703c802200320032903c0053703c00220034190046a2213201229030037" + "030020034198046a22122011290300370300200341a0046a221120102903" + "00370300200341a8046a2210200f290300370300200341b0046a220f200e" + "290300370300200341b8046a220e20262903003703002003200129030037" + "038004200320272903003703880420034180046a200120291030200341f8" + "046a2031290300370300200341f0046a2032290300370300200341e8046a" + "2033290300370300200341e0046a2034290300370300200341d8046a2035" + "290300370300200341d0046a2036290300370300200320372903003703c8" + "04200320022903003703c004200341c0046a2002202a1030200341c0056a" + "20034180046a200341c0046a102f200e2004290300370300200f20052903" + "003703002010200629030037030020112007290300370300201220082903" + "0037030020132009290300370300200320032903c8053703880420032003" + "2903c00537038004200c2012290300370300200d20132903003703002003" + "2003290388043703880620032003290380043703800620034180066a2040" + "20412042204342c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0" + "858ce8b691a8b87f42a9c0c689aece93b230102d200a200e290300370300" + "200b200f290300370300200320102903003703a806200320112903003703" + "a006200341a0066a204420452046204742c7faf3c3ed82a3903c428d95c7" + "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d" + "2008200c29030022383703002009200d2903002239370300200720032903" + "a006223a3703002005200b290300223b370300200620032903a806223c37" + "03002004200a290300223d3703002003200329038806223e3703c8052003" + "200329038006223f3703c005200e203d370300200f203b3703002010203c" + "3703002011203a37030020122038370300201320393703002003203e3703" + "88042003203f37038004200341c0056a20034180046a200341406b103020" + "0e2004290300370300200f20052903003703002010200629030037030020" + "112007290300370300201220082903003703002013200929030037030020" + "0320032903c80537038804200320032903c00537038004200c2012290300" + "370300200d20132903003703002003200329038804370388062003200329" + "0380043703800620034180066a2003290380012003290388012025290300" + "202429030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb085" + "8ce8b691a8b87f42a9c0c689aece93b230102d200a200e29030037030020" + "0b200f290300370300200320102903003703a806200320112903003703a0" + "06200341a0066a202329030020222903002021290300202029030042c7fa" + "f3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42" + "a9c0c689aece93b230102d2008200c29030022383703002009200d290300" + "2239370300200720032903a006223a3703002005200b290300223b370300" + "200620032903a806223c3703002004200a290300223d3703002003200329" + "038806223e3703c8052003200329038006223f3703c005200e203d370300" + "200f203b3703002010203c3703002011203a370300201220383703002013" + "20393703002003203e370388042003203f37038004200041386a20182903" + "00370300200041306a2019290300370300200041286a201a290300370300" + "200041206a201b290300370300200041186a201c29030037030020004110" + "6a201d290300370300200041086a20032903c801370300200020032903c0" + "01370300200020032903c002370340200041c8006a20032903c802370300" + "200041d0006a2014290300370300200041d8006a20152903003703002000" + "41e0006a2016290300370300200041e8006a2017290300370300200041f0" + "006a201e290300370300200041f8006a201f290300370300200041b8016a" + "200e290300370300200041b0016a200f290300370300200041a8016a2010" + "290300370300200041a0016a201129030037030020004198016a20122903" + "0037030020004190016a201329030037030020004188016a200329038804" + "370300200020032903800437038001200341c0066a24000b830c02137f04" + "7e23004180026b22032400200341d8006a2207200141186a290300370300" + "200341d0006a2208200141106a2903003703002003200141086a29030037" + "034820032001290300370340200341406b2002290300200241086a290300" + "2002290310200241186a29030042c7faf3c3ed82a3903c428d95c7c396d2" + "dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200341" + "98016a2204200141386a29030037030020034190016a2205200141306a29" + "03003703002003200141286a290300370388012003200129032037038001" + "20034180016a2002290320200241286a2903002002290330200241386a29" + "030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b6" + "91a8b87f42a9c0c689aece93b230102d200341186a220b20072903003703" + "00200341106a220c2008290300370300200341206a220d20032903800137" + "0300200341286a220e200329038801370300200341306a220f2005290300" + "370300200341386a22102004290300370300200320032903483703082003" + "2003290340370300200241f8006a2903002116200241e8006a2903002117" + "2002290370211820022903602119200341f8016a2209200141d8006a2903" + "00370300200341f0016a2206200141d0006a2903003703002003200141c8" + "006a2903003703e801200320012903403703e001200341e0016a20022903" + "40200241c8006a2903002002290350200241d8006a29030042c7faf3c3ed" + "82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c6" + "89aece93b230102d2004200141f8006a2903003703002005200141f0006a" + "2903003703002003200141e8006a29030037038801200320012903603703" + "800120034180016a201920172018201642c7faf3c3ed82a3903c428d95c7" + "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d" + "2007200929030037030020082006290300370300200341e0006a22112003" + "29038001370300200341e8006a2212200329038801370300200341f0006a" + "22132005290300370300200341f8006a2214200429030037030020032003" + "2903e801370348200320032903e001370340200241b8016a290300211620" + "0241a8016a290300211720022903b001211820022903a0012119200341d8" + "016a220a20014198016a290300370300200341d0016a221520014190016a" + "290300370300200320014188016a2903003703c801200320012903800137" + "03c001200341c0016a20022903800120024188016a290300200229039001" + "20024198016a29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f" + "42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2009200141b801" + "6a2903003703002006200141b0016a2903003703002003200141a8016a29" + "03003703e801200320012903a0013703e001200341e0016a201920172018" + "201642c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b6" + "91a8b87f42a9c0c689aece93b230102d2004200a29030037030020052015" + "290300370300200341a0016a220120032903e001370300200341a8016a22" + "0220032903e801370300200341b0016a220a2006290300370300200341b8" + "016a22062009290300370300200320032903c80137038801200320032903" + "c00137038001200041386a2010290300370300200041306a200f29030037" + "0300200041286a200e290300370300200041206a200d2903003703002000" + "41186a200b290300370300200041106a200c290300370300200041086a20" + "032903083703002000200329030037030020002003290340370340200041" + "c8006a2003290348370300200041d0006a2008290300370300200041d800" + "6a2007290300370300200041e0006a2011290300370300200041e8006a20" + "12290300370300200041f0006a2013290300370300200041f8006a201429" + "0300370300200041b8016a2006290300370300200041b0016a200a290300" + "370300200041a8016a2002290300370300200041a0016a20012903003703" + "0020004198016a200429030037030020004190016a200529030037030020" + "004188016a20032903880137030020002003290380013703800120034180" + "026a24000bf11902287f087e23004180056b22022400200241386a222420" + "0141386a220a290300370300200241306a2225200141306a220329030037" + "0300200241286a2226200141286a2204290300370300200241206a222720" + "0141206a2205290300370300200241186a2228200141186a220f29030037" + "0300200241106a2229200141106a22062903003703002002200129030037" + "03002002200141086a2207290300370308200220012001102f200241f800" + "6a2210200a290300370300200241f0006a22112003290300370300200241" + "e8006a22122004290300370300200241e0006a2213200529030037030020" + "0241d8006a2214200f290300370300200241d0006a221520062903003703" + "002002200729030037034820022001290300370340200241406b20012001" + "41406b2218102f20024180046a200241406b200241406b10302010200241" + "b8046a220b2903003703002011200241b0046a220c290300370300201220" + "0241a8046a220d2903003703002013200241a0046a220e29030037030020" + "1420024198046a2208290300370300201520024190046a22092903003703" + "0020022002290388043703482002200229038004370340200141f8006a22" + "19290300212a200141f0006a221a290300212b200141e8006a221b290300" + "212c200141e0006a221c290300212d200241f8046a2217200f2903003703" + "00200241f0046a220f2006290300370300200220072903003703e8042002" + "20012903003703e004200241e0046a2001290340200141c8006a221d2903" + "00200141d0006a221e290300200141d8006a221f29030042c7faf3c3ed82" + "a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689" + "aece93b230102d2008200a29030037030020092003290300370300200220" + "0429030037038804200220052903003703800420024180046a202d202c20" + "2b202a42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8" + "b691a8b87f42a9c0c689aece93b230102d20024198036a22032017290300" + "37030020024190036a2204200f290300370300200241a0036a2205200229" + "038004370300200241a8036a2206200229038804370300200241b0036a22" + "072009290300370300200241b8036a221620082903003703002002200229" + "03e80437038803200220022903e0043703800320024180046a2002418003" + "6a20014180016a220a10302016200b2903003703002007200c2903003703" + "002006200d2903003703002005200e290300370300200320082903003703" + "002004200929030037030020022002290388043703880320022002290380" + "043703800320024180046a20024180036a20024180036a102f2016200b29" + "03003703002007200c2903003703002006200d2903003703002005200e29" + "030037030020032008290300370300200420092903003703002002200229" + "0388043703880320022002290380043703800320024190016a2203201e29" + "030037030020024198016a2204201f290300370300200241a0016a220520" + "1c290300370300200241a8016a2206201b290300370300200241b0016a22" + "07201a290300370300200241b8016a221620192903003703002002200129" + "0340370380012002201d2903003703880120024180016a2018200a102f20" + "024180046a20024180016a20024180016a10302016200b29030037030020" + "07200c2903003703002006200d2903003703002005200e29030037030020" + "042008290300370300200320092903003703002002200229038804370388" + "01200220022903800437038001200241d0016a221820014190016a290300" + "370300200241d8016a221920014198016a290300370300200241e0016a22" + "1a200141a0016a290300370300200241e8016a221b200141a8016a290300" + "370300200241f0016a221c200141b0016a290300370300200241f8016a22" + "1d200141b8016a29030037030020022001290380013703c0012002200141" + "88016a2903003703c801200241c0016a200a200a102f200241b8026a221e" + "2016290300370300200241b0026a22162007290300370300200241a8026a" + "22072006290300370300200241a0026a2206200529030037030020024198" + "026a2205200429030037030020024190026a220420032903003703002002" + "42003703f803200242003703f003200242003703e803200242013703e003" + "200242003703d803200242003703d003200242003703c803200242093703" + "c00320022002290388013703880220022002290380013703800220024180" + "026a20024180016a200241c0036a102f20024180046a20024180026a2002" + "1030201e200b2903003703002016200c2903003703002007200d29030037" + "03002006200e290300370300200520082903003703002004200929030037" + "0300200241d0026a22032018290300370300200241d8026a221f20192903" + "00370300200241e0026a2220201a290300370300200241e8026a2221201b" + "290300370300200241f0026a2222201c290300370300200241f8026a2223" + "201d29030037030020022002290388043703880220022002290380043703" + "8002200220022903c0013703c002200220022903c8013703c802200241c0" + "026a200241c0016a200241c0036a102f20024180046a200241c0026a2002" + "41406b10302023200b2903003703002022200c2903003703002021200d29" + "03003703002020200e290300370300201f20082903003703002003200929" + "030037030020022002290388043703c80220022002290380043703c00220" + "024180046a200241406b20024180036a10302010200b2903003703002011" + "200c2903003703002012200d2903003703002013200e2903003703002014" + "200829030037030020152009290300370300200220022903880437034820" + "0220022903800437034020024180046a200241406b20024180016a103020" + "10200b2903003703002011200c2903003703002012200d29030037030020" + "13200e290300370300201420082903003703002015200929030037030020" + "022002290388043703482002200229038004370340200241d8046a220120" + "14290300370300200241d0046a220a201529030037030020022002290348" + "3703c804200220022903403703c004200241c0046a200229030020022903" + "082029290300202829030042c7faf3c3ed82a3903c428d95c7c396d2dac0" + "977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2017201029" + "0300370300200f2011290300370300200220122903003703e80420022013" + "2903003703e004200241e0046a2027290300202629030020252903002024" + "29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8" + "b691a8b87f42a9c0c689aece93b230102d20082001290300222a37030020" + "09200a290300222b370300200e20022903e004222c370300200c200f2903" + "00222d370300200d20022903e804222e370300200b2017290300222f3703" + "00200220022903c804223037038804200220022903c00422313703800420" + "10202f3703002011202d3703002012202e3703002013202c370300201420" + "2a3703002015202b37030020022030370348200220313703402001201429" + "0300370300200a2015290300370300200220022903483703c80420022002" + "2903403703c004200241c0046a20022903c00120022903c8012018290300" + "201929030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb085" + "8ce8b691a8b87f42a9c0c689aece93b230102d2017201029030037030020" + "0f2011290300370300200220122903003703e804200220132903003703e0" + "04200241e0046a201a290300201b290300201c290300201d29030042c7fa" + "f3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42" + "a9c0c689aece93b230102d20082001290300222a3703002009200a290300" + "222b370300200e20022903e004222c370300200c200f290300222d370300" + "200d20022903e804222e370300200b2017290300222f3703002002200229" + "03c804223037038804200220022903c0042231370380042010202f370300" + "2011202d3703002012202e3703002013202c3703002014202a3703002015" + "202b3703002002203037034820022031370340200041386a201e29030037" + "0300200041306a2016290300370300200041286a20072903003703002000" + "41206a2006290300370300200041186a2005290300370300200041106a20" + "04290300370300200041086a200229038802370300200020022903800237" + "0300200020022903c002370340200041c8006a20022903c8023703002000" + "41d0006a2003290300370300200041d8006a201f290300370300200041e0" + "006a2020290300370300200041e8006a2021290300370300200041f0006a" + "2022290300370300200041f8006a2023290300370300200041b8016a2010" + "290300370300200041b0016a2011290300370300200041a8016a20122903" + "00370300200041a0016a201329030037030020004198016a201429030037" + "030020004190016a201529030037030020004188016a2002290348370300" + "200020022903403703800120024180056a24000bfe09011d7e2001290310" + "22022001290300220484200141186a2903002215200141086a2903002203" + "8484420052044042c7faf3c3ed82a3903c20047d2118427f4200427f4200" + "200442788342c7faf3c3ed82a3903c561b220b2003200b56ad7d200b2003" + "7d220342f3eab8bce9ada5bfe8007d2219200354ad7c42017c220320027d" + "220c42a4cffaf397c9eed7c7007d220b200c54ad2002200356ad7d427f51" + "1b20157d42a9c0c689aece93b2307c210c0b420021152001290330220220" + "01290320220484200141386a2903002208200141286a2903002203848442" + "00520440427f4200427f4200200442788342c7faf3c3ed82a3903c561b22" + "062003200656ad7d200620037d220342f3eab8bce9ada5bfe8007d221520" + "0354ad7c42017c220320027d220642a4cffaf397c9eed7c7007d221a2006" + "54ad2002200356ad7d427f511b20087d42a9c0c689aece93b2307c211b42" + "c7faf3c3ed82a3903c20047d21060b200141f8006a2903002108200141e8" + "006a290300210220012903702104200129036021032001290350220e2001" + "290340220f84200141d8006a2903002205200141c8006a29030022108484" + "4200520440427f4200427f4200200f42788342c7faf3c3ed82a3903c561b" + "22092009201054ad7d200920107d220942f3eab8bce9ada5bfe8007d221c" + "200954ad7c42017c2216200e7d220d42a4cffaf397c9eed7c7007d220920" + "0d54ad200e201656ad7d427f511b20057d42a9c0c689aece93b2307c2116" + "42c7faf3c3ed82a3903c200f7d210d0b4200210e4200210f420021102003" + "2004842002200884844200520440427f4200427f4200200342788342c7fa" + "f3c3ed82a3903c561b22072002200756ad7d200720027d220242f3eab8bc" + "e9ada5bfe8007d220e200254ad7c42017c220220047d220742a4cffaf397" + "c9eed7c7007d220f200754ad2002200454ad7d427f511b20087d42a9c0c6" + "89aece93b2307c211042c7faf3c3ed82a3903c20037d21070b200141b801" + "6a2903002108200141a8016a290300210220012903b001210420012903a0" + "01210342002105200129039001221220012903800122138420014198016a" + "290300221e20014188016a290300221484844200520440427f4200427f42" + "00201342788342c7faf3c3ed82a3903c561b220a200a201454ad7d200a20" + "147d220a42f3eab8bce9ada5bfe8007d221d200a54ad7c42017c22172012" + "7d221142a4cffaf397c9eed7c7007d220a201154ad2012201756ad7d427f" + "511b201e7d42a9c0c689aece93b2307c211742c7faf3c3ed82a3903c2013" + "7d21110b4200211242002113420021142003200484200220088484420052" + "0440427f4200427f4200200342788342c7faf3c3ed82a3903c561b220520" + "02200556ad7d200520027d220242f3eab8bce9ada5bfe8007d2212200254" + "ad7c42017c220220047d220542a4cffaf397c9eed7c7007d2213200554ad" + "2002200454ad7d427f511b20087d42a9c0c689aece93b2307c211442c7fa" + "f3c3ed82a3903c20037d21050b200020133703b001200020053703a00120" + "00200a3703900120002011370380012000200f3703702000200737036020" + "0020093703502000200d3703402000201a37033020002006370320200020" + "0b37031020002018370300200020143703b801200020123703a801200020" + "17370398012000201d37038801200020103703782000200e370368200020" + "163703582000201c3703482000201b370338200020153703282000200c37" + "0318200020193703080b960501057f230041800c6b220324002003200120" + "02103b20034180036a200141c0016a220441c001104c1a200341c0046a20" + "0241c0016a220541c001104c1a200341c0016a20042005103b2003420037" + "03b809200342003703b009200342003703a809200342013703a009200342" + "003703980920034200370390092003420037038809200342093703800920" + "0341c00a6a200341c0026a20034180096a102f200341c80b6a2003418802" + "6a290300370300200341d00b6a20034190026a290300370300200341d80b" + "6a20034198026a290300370300200341e00b6a200341a0026a2903003703" + "00200341e80b6a200341a8026a290300370300200341f00b6a200341b002" + "6a290300370300200341f80b6a200341b8026a290300370300200341880b" + "6a20032903c801370300200341900b6a200341d0016a2903003703002003" + "41980b6a200341d8016a290300370300200341a00b6a200341e0016a2903" + "00370300200341a80b6a200341e8016a290300370300200341b00b6a2003" + "41f0016a290300370300200341b80b6a200341f8016a2903003703002003" + "2003290380023703c00b200320032903c0013703800b20034180066a2003" + "41c00a6a20031030200341c0066a200341800b6a2206200341406b103020" + "034180076a200341c00b6a220720034180016a103020034180096a200120" + "041030200341c0096a200141406b200341c0036a1030200341800a6a2001" + "4180016a20034180046a1030200341c00a6a200220051030200620024140" + "6b20034180056a1030200720024180016a200341c0056a1030200341c007" + "6a20034180096a200341c00a6a103b200341c00a6a200341c0076a200310" + "3c200041c0016a200341c00a6a200341c0016a103c200020034180066a41" + "c001104c1a200341800c6a24000bd741020e7f227e230041c0036b220324" + "0002400240200129034022212001290350222084200141c8006a29030022" + "23200141d8006a2903002222848442005204402002290340221d20022903" + "50221584200241c8006a2903002224200241d8006a290300221e8484500d" + "01200341f8016a2204200141406b220641186a2205290300370300200341" + "f0016a2208200641106a220b290300370300200320062903003703e00120" + "03200641086a220c2903003703e801200341e0016a202120232020202242" + "c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b20034198026a2209" + "200241406b220741186a220d29030037030020034190026a220a20074110" + "6a220e2903003703002003200741086a220f290300370388022003200729" + "03003703800220034180026a201d20242015201e42c7faf3c3ed82a3903c" + "428d95c7c396d2dac0977f102b200341186a2210200141186a2903003703" + "00200341106a200141106a2903003703002003200141086a290300370308" + "20032001290300370300200320032903800222162003290388022219200a" + "29030022252009290300222842c7faf3c3ed82a3903c428d95c7c396d2da" + "c0977f102b200341386a2209200241186a290300370300200341306a220a" + "200241106a2903003703002003200241086a290300370328200320022903" + "00370320200341206a20032903e001222c20032903e80122302008290300" + "22312004290300223242c7faf3c3ed82a3903c428d95c7c396d2dac0977f" + "102b200341b8036a22042005290300370300200341b0036a2205200b2903" + "003703002003200c2903003703a803200320062903003703a003200341a0" + "036a202c20302031203242c7faf3c3ed82a3903c428d95c7c396d2dac097" + "7f102b200429030021132005290300211f20032903a803211c20032903a0" + "0321172004200d2903003703002005200e2903003703002003200f290300" + "3703a803200320072903003703a003200341a0036a201620192025202842" + "c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2004290300211220" + "05290300211420032903a803211120032903a003211a200341d0006a2001" + "41306a290300370300200341d8006a2206200141386a2903003703002003" + "20012903203703402003200141286a290300370348200341406b201a2011" + "2014201242c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b200341" + "f8006a2207200241386a290300370300200341f0006a2208200241306a29" + "03003703002003200241286a290300370368200320022903203703602003" + "41e0006a2017201c201f201342c7faf3c3ed82a3903c428d95c7c396d2da" + "c0977f102b02402003200341206a104a450440200341406b200341e0006a" + "104a450d010b200420092903003703002005200a29030037030020032003" + "2903283703a803200320032903203703a003200341a0036a200329030020" + "032903082003290310201029030042c7faf3c3ed82a3903c428d95c7c396" + "d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2004" + "290300211f2005290300211c20032903a003211720032903a80321122004" + "200729030037030020052008290300370300200320032903683703a80320" + "0320032903603703a003200341a0036a2003290340200329034820032903" + "50200629030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0" + "858ce8b691a8b87f42a9c0c689aece93b230102d20124201862017423f88" + "842114201742018621112004290300211a2005290300211b20032903a803" + "211820032903a003212602400240201c4201862012423f8884222942ddb0" + "858ce8b691a8b87f85201f201f7c201c423f887c221342a9c0c689aece93" + "b2308584500440201142c7faf3c3ed82a3903c542014428d95c7c396d2da" + "c0977f542014428d95c7c396d2dac0977f511b450d0142a9c0c689aece93" + "b230211342ddb0858ce8b691a8b87f21292011212a201421110c020b2029" + "42deb0858ce8b691a8b87f54201342a9c0c689aece93b23054201342a9c0" + "c689aece93b230511b450d002011212a201421110c010b20132029201420" + "1142c7faf3c3ed82a3903c7d222a20115aad222d7d222742f3eab8bce9ad" + "a5bfe8007c2211202754ad2014202d54ad7d7c2214202954ad201442a2cf" + "faf397c9eed7c7007c2229201454ad7c50ad7d42a9c0c689aece93b2307d" + "21130b200341b8036a22012013370300200320293703b0032003202a3703" + "a003200320113703a80342ddb0858ce8b691a8b87f2114200341a0036a20" + "2a20112029201342c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b" + "2003201f3703d8012003201c3703d001200320123703c801200320173703" + "c001200341c0016a20032903a003222920032903a803222a20032903b003" + "222d2001290300222742c7faf3c3ed82a3903c428d95c7c396d2dac0977f" + "102b20184201862026423f888421112026420186212602400240201b4201" + "862018423f8884221842ddb0858ce8b691a8b87f85201a201a7c201b423f" + "887c221342a9c0c689aece93b2308584500440202642c7faf3c3ed82a390" + "3c542011428d95c7c396d2dac0977f542011428d95c7c396d2dac0977f51" + "1b450d012026211a2011211b42a9c0c689aece93b23021130c020b201842" + "deb0858ce8b691a8b87f54201342a9c0c689aece93b23054201342a9c0c6" + "89aece93b230511b450d002026211a2011211b201821140c010b20132018" + "2011202642c7faf3c3ed82a3903c7d221a20265aad22147d222642f3eab8" + "bce9ada5bfe8007c221b202654ad2011201454ad7d7c2211201854ad2011" + "42a2cffaf397c9eed7c7007c2214201154ad7c50ad7d42a9c0c689aece93" + "b2307d21130b20034198016a2201200341186a2903003703002003419001" + "6a2202200341106a29030037030020032003290308370388012003200329" + "03003703800142ddb0858ce8b691a8b87f212e20034180016a2029202a20" + "2d202742c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b200341b8" + "036a2204200341d8006a290300370300200341b0036a2205200341d0006a" + "290300370300200320032903483703a803200320032903403703a0032003" + "41a0036a20032903c001221120032903c801221820032903d00122272003" + "41d8016a290300222b42c7faf3c3ed82a3903c428d95c7c396d2dac0977f" + "102b200320133703b802200320143703b0022003201b3703a8022003201a" + "3703a002200429030021262005290300212920032903a803212a20032903" + "a003212d200341a0026a201a201b2014201342c7faf3c3ed82a3903c428d" + "95c7c396d2dac0977f102b200341a0026a201120182027202b42c7faf3c3" + "ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0" + "c689aece93b230102d200329038801222b4201862003290380012211423f" + "88842118201142018621270240024020022903002211420186202b423f88" + "84222b42ddb0858ce8b691a8b87f852011423f882001290300221120117c" + "7c221142a9c0c689aece93b2308584500440202742c7faf3c3ed82a3903c" + "542018428d95c7c396d2dac0977f542018428d95c7c396d2dac0977f511b" + "450d012027212f2018212742a9c0c689aece93b23021110c020b202b42de" + "b0858ce8b691a8b87f54201142a9c0c689aece93b23054201142a9c0c689" + "aece93b230511b450d002027212f20182127202b212e0c010b2011202b20" + "18202742c7faf3c3ed82a3903c7d222f20275aad222e7d221142f3eab8bc" + "e9ada5bfe8007c2227201154ad2018202e54ad7d7c2218202b54ad201842" + "a2cffaf397c9eed7c7007c222e201854ad7c50ad7d42a9c0c689aece93b2" + "307d21110b42ddb0858ce8b691a8b87f2118200341a0026a202f2027202e" + "201142c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b6" + "91a8b87f42a9c0c689aece93b230102d200320133703b801200320143703" + "b0012003201b3703a8012003201a3703a00120034180016a20032903a002" + "20032903a80220032903b002200341b8026a29030042c7faf3c3ed82a390" + "3c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece" + "93b230102d200341a0016a20032903800120032903880120032903900120" + "034198016a29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f10" + "2b202a420186202d423f88842114202d4201862111024002402029420186" + "202a423f8884221a42ddb0858ce8b691a8b87f85202620267c2029423f88" + "7c221342a9c0c689aece93b2308584500440201142c7faf3c3ed82a3903c" + "542014428d95c7c396d2dac0977f542014428d95c7c396d2dac0977f511b" + "450d012011211b2014211142a9c0c689aece93b23021130c020b201a42de" + "b0858ce8b691a8b87f54201342a9c0c689aece93b23054201342a9c0c689" + "aece93b230511b450d002011211b20142111201a21180c010b2013201a20" + "14201142c7faf3c3ed82a3903c7d221b20115aad22187d222642f3eab8bc" + "e9ada5bfe8007c2211202654ad2014201854ad7d7c2214201a54ad201442" + "a2cffaf397c9eed7c7007c2218201454ad7c50ad7d42a9c0c689aece93b2" + "307d21130b42ddb0858ce8b691a8b87f2114200341a0016a201b20112018" + "201342c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b6" + "91a8b87f42a9c0c689aece93b230102d02400240201520207c2213202320" + "247c2220202454ad2020201d20217c2224201d54ad7c2223202054ad7c7c" + "222042ddb0858ce8b691a8b87f852013201554ad2013202056ad7c201e20" + "227c7c222142a9c0c689aece93b2308584500440202442c7faf3c3ed82a3" + "903c542023428d95c7c396d2dac0977f542023428d95c7c396d2dac0977f" + "511b450d01202421222023211342a9c0c689aece93b23021210c020b2020" + "42deb0858ce8b691a8b87f54202142a9c0c689aece93b23054202142a9c0" + "c689aece93b230511b450d002024212220232113202021140c010b202120" + "202023202442c7faf3c3ed82a3903c7d222220245aad221d7d221542f3ea" + "b8bce9ada5bfe8007c2213201554ad201d202356ad7d7c2223202054ad20" + "2342a2cffaf397c9eed7c7007c2214202354ad7c50ad7d42a9c0c689aece" + "93b2307d21210b200341d8026a22012021370300200341d0026a22022014" + "370300200320223703c002200320133703c802200341c0026a2022201320" + "14202142c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b200341c0" + "026a202c20302031203242c7faf3c3ed82a3903c428d95c7c396d2dac097" + "7f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200341c0026a" + "201620192025202842c7faf3c3ed82a3903c428d95c7c396d2dac0977f42" + "ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200341c0026a2017" + "2012201c201f42c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b20" + "0041186a200341b8026a290300370300200041106a200341b0026a290300" + "370300200041086a20032903a802370300200020032903a0023703002000" + "20032903a001370320200041286a20032903a801370300200041306a2003" + "41b0016a290300370300200041386a200341b8016a290300370300200020" + "032903c002370340200041c8006a20032903c802370300200041d0006a20" + "02290300370300200041d8006a20012903003703000c030b200341b8036a" + "2204200141186a290300221b370300200341b0036a2205200141106a2903" + "0022183703002003200141086a29030022163703a8032003200129030022" + "193703a00342ddb0858ce8b691a8b87f2112200341a0036a201920162018" + "201b42c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2004290300" + "211d2005290300211520032903a803212420032903a003211f2004200141" + "206a220241186a2903003703002005200241106a29030037030020032002" + "41086a2903003703a803200320022903003703a003200341a0036a200129" + "0320200141286a2903002001290330200141386a29030042c7faf3c3ed82" + "a3903c428d95c7c396d2dac0977f102b2005290300211320032903a00321" + "1c20032903a8032117200420042903002225370300200320133703b00320" + "0320173703a8032003201c3703a003200341a0036a201c20172013202542" + "c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2004290300211420" + "032903b003211e20032903a803211120032903a003211a02400240024020" + "1320187c2218201620177c2216201754ad20162019201c7c2219201c54ad" + "7c2217201654ad7c7c221c42ddb0858ce8b691a8b87f852013201856ad20" + "18201c56ad7c201b20257c7c221342a9c0c689aece93b230858450044020" + "1942c7faf3c3ed82a3903c542017428d95c7c396d2dac0977f542017428d" + "95c7c396d2dac0977f511b450d0242a9c0c689aece93b23021130c010b20" + "1c42deb0858ce8b691a8b87f54201342a9c0c689aece93b23054201342a9" + "c0c689aece93b230511b450d01201c21120b2019211b201721180c010b20" + "13201c2017201942c7faf3c3ed82a3903c7d221b20195aad22127d221642" + "f3eab8bce9ada5bfe8007c2218201654ad2012201756ad7d7c2217201c54" + "ad201742a2cffaf397c9eed7c7007c2212201754ad7c50ad7d42a9c0c689" + "aece93b2307d21130b200341b8036a22012013370300200341b0036a2204" + "20123703002003201b3703a003200320183703a80342ddb0858ce8b691a8" + "b87f211c200341a0036a201b20182012201342c7faf3c3ed82a3903c428d" + "95c7c396d2dac0977f102b20034198036a22052001290300370300200341" + "90036a22062004290300370300200320032903a803370388032003200329" + "03a0033703800320034180036a201f20242015201d42c7faf3c3ed82a390" + "3c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece" + "93b230102d20012005290300370300200420062903003703002003200329" + "0388033703a80320032003290380033703a003200341a0036a201a201120" + "1e201442c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8" + "b691a8b87f42a9c0c689aece93b230102d20032903a803221b4201862003" + "2903a0032213423f88842117201342018621120240024002402004290300" + "2213420186201b423f8884221642ddb0858ce8b691a8b87f852013423f88" + "2001290300221320137c7c221342a9c0c689aece93b23085845004402012" + "42c7faf3c3ed82a3903c542017428d95c7c396d2dac0977f542017428d95" + "c7c396d2dac0977f511b450d0242a9c0c689aece93b23021130c010b2016" + "42deb0858ce8b691a8b87f54201342a9c0c689aece93b23054201342a9c0" + "c689aece93b230511b450d012016211c0b2012211b201721180c010b2013" + "20162017201242c7faf3c3ed82a3903c7d221b20125aad221c7d221242f3" + "eab8bce9ada5bfe8007c2218201254ad2017201c54ad7d7c2217201654ad" + "201742a2cffaf397c9eed7c7007c221c201754ad7c50ad7d42a9c0c689ae" + "ce93b2307d21130b2024420186201f423f8884211742ddb0858ce8b691a8" + "b87f2116201f42018621190240024020154201862024423f8884222842dd" + "b0858ce8b691a8b87f85201d201d7c2015423f887c221242a9c0c689aece" + "93b2308584500440201942c7faf3c3ed82a3903c542017428d95c7c396d2" + "dac0977f542017428d95c7c396d2dac0977f511b450d0120192125201721" + "1942a9c0c689aece93b23021120c020b202842deb0858ce8b691a8b87f54" + "201242a9c0c689aece93b23054201242a9c0c689aece93b230511b450d00" + "2019212520172119202821160c010b201220282017201942c7faf3c3ed82" + "a3903c7d222520195aad22167d222c42f3eab8bce9ada5bfe8007c221920" + "2c54ad2016201756ad7d7c2217202854ad201742a2cffaf397c9eed7c700" + "7c2216201754ad7c50ad7d42a9c0c689aece93b2307d21120b42ddb0858c" + "e8b691a8b87f211702400240201520167c2228201920247c2215201954ad" + "2015201f20257c221f202554ad7c2219201554ad7c7c221542ddb0858ce8" + "b691a8b87f852016202856ad2015202854ad7c2012201d7c7c221d42a9c0" + "c689aece93b2308584500440201f42c7faf3c3ed82a3903c542019428d95" + "c7c396d2dac0977f542019428d95c7c396d2dac0977f511b450d01201f21" + "242019211f42a9c0c689aece93b230211d0c020b201542deb0858ce8b691" + "a8b87f54201d42a9c0c689aece93b23054201d42a9c0c689aece93b23051" + "1b450d00201f21242019211f201521170c010b201d20152019201f42c7fa" + "f3c3ed82a3903c7d2224201f5aad22177d221242f3eab8bce9ada5bfe800" + "7c221f201254ad2017201956ad7d7c2212201554ad201242a2cffaf397c9" + "eed7c7007c2217201254ad7c50ad7d42a9c0c689aece93b2307d211d0b20" + "0320173703b003200320243703a0032003201d3703b8032003201f3703a8" + "0342ddb0858ce8b691a8b87f2119200341a0036a2024201f2017201d42c7" + "faf3c3ed82a3903c428d95c7c396d2dac0977f102b2018420186201b423f" + "88842112201b420186211602400240201c4201862018423f8884222542dd" + "b0858ce8b691a8b87f85201320137c201c423f887c221542a9c0c689aece" + "93b2308584500440201642c7faf3c3ed82a3903c542012428d95c7c396d2" + "dac0977f542012428d95c7c396d2dac0977f511b450d0120162128201221" + "1642a9c0c689aece93b23021150c020b202542deb0858ce8b691a8b87f54" + "201542a9c0c689aece93b23054201542a9c0c689aece93b230511b450d00" + "2016212820122116202521190c010b201520252012201642c7faf3c3ed82" + "a3903c7d222820165aad22197d222c42f3eab8bce9ada5bfe8007c221620" + "2c54ad2012201954ad7d7c2212202554ad201242a2cffaf397c9eed7c700" + "7c2219201254ad7c50ad7d42a9c0c689aece93b2307d21150b42ddb0858c" + "e8b691a8b87f2112200341a0036a202820162019201542c7faf3c3ed82a3" + "903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689ae" + "ce93b230102d2011420186201a423f88842116201a420186211a02400240" + "201e4201862011423f8884221942ddb0858ce8b691a8b87f85201420147c" + "201e423f887c221542a9c0c689aece93b2308584500440201a42c7faf3c3" + "ed82a3903c542016428d95c7c396d2dac0977f542016428d95c7c396d2da" + "c0977f511b450d01201a21112016211a42a9c0c689aece93b23021150c02" + "0b201942deb0858ce8b691a8b87f54201542a9c0c689aece93b230542015" + "42a9c0c689aece93b230511b450d00201a21112016211a201921120c010b" + "201520192016201a42c7faf3c3ed82a3903c7d2211201a5aad22127d2214" + "42f3eab8bce9ada5bfe8007c221a201454ad2012201656ad7d7c22142019" + "54ad201442a2cffaf397c9eed7c7007c2212201454ad7c50ad7d42a9c0c6" + "89aece93b2307d21150b201a4201862011423f8884211e42ddb0858ce8b6" + "91a8b87f211420114201862111024002402012420186201a423f88842216" + "42ddb0858ce8b691a8b87f85201520157c2012423f887c221542a9c0c689" + "aece93b2308584500440201142c7faf3c3ed82a3903c54201e428d95c7c3" + "96d2dac0977f54201e428d95c7c396d2dac0977f511b450d012011211a20" + "1e211142a9c0c689aece93b23021150c020b201642deb0858ce8b691a8b8" + "7f54201542a9c0c689aece93b23054201542a9c0c689aece93b230511b45" + "0d002011211a201e2111201621140c010b20152016201e201142c7faf3c3" + "ed82a3903c7d221a20115aad22127d221442f3eab8bce9ada5bfe8007c22" + "11201454ad2012201e56ad7d7c2212201654ad201242a2cffaf397c9eed7" + "c7007c2214201254ad7c50ad7d42a9c0c689aece93b2307d21150b201142" + "0186201a423f8884211242ddb0858ce8b691a8b87f2116201a420186211e" + "0240024020144201862011423f8884221142ddb0858ce8b691a8b87f8520" + "1520157c2014423f887c221542a9c0c689aece93b2308584500440201e42" + "c7faf3c3ed82a3903c542012428d95c7c396d2dac0977f542012428d95c7" + "c396d2dac0977f511b450d01201e21142012211e42a9c0c689aece93b230" + "21150c020b201142deb0858ce8b691a8b87f54201542a9c0c689aece93b2" + "3054201542a9c0c689aece93b230511b450d00201e21142012211e201121" + "160c010b201520112012201e42c7faf3c3ed82a3903c7d2214201e5aad22" + "1a7d221642f3eab8bce9ada5bfe8007c221e201654ad2012201a54ad7d7c" + "2212201154ad201242a2cffaf397c9eed7c7007c2216201254ad7c50ad7d" + "42a9c0c689aece93b2307d21150b20034198036a2201200241186a290300" + "37030020034190036a2204200241106a2903003703002003200229030037" + "0380032003200241086a2903003703880342ddb0858ce8b691a8b87f2112" + "20034180036a202120232020202242c7faf3c3ed82a3903c428d95c7c396" + "d2dac0977f102b2003201d3703f802200320173703f0022003201f3703e8" + "02200320243703e002200129030021212004290300212320032903800321" + "22200329038803211d200120133703002003201c37039003200320183703" + "88032003201b3703800320034180036a20032903a00320032903a8032003" + "2903b003200341b8036a29030042c7faf3c3ed82a3903c428d95c7c396d2" + "dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200341" + "e0026a200329038003200329038803200329039003200129030042c7faf3" + "c3ed82a3903c428d95c7c396d2dac0977f102b200341e0026a2014201e20" + "16201542c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8" + "b691a8b87f42a9c0c689aece93b230102d201d4201862022423f88842120" + "20224201862122024002402023420186201d423f8884221342ddb0858ce8" + "b691a8b87f85202120217c2023423f887c222142a9c0c689aece93b23085" + "84500440202242c7faf3c3ed82a3903c542020428d95c7c396d2dac0977f" + "542020428d95c7c396d2dac0977f511b450d01202221232020212242a9c0" + "c689aece93b23021210c020b201342deb0858ce8b691a8b87f54202142a9" + "c0c689aece93b23054202142a9c0c689aece93b230511b450d0020222123" + "20202122201321120c010b202120132020202242c7faf3c3ed82a3903c7d" + "222320225aad221d7d221542f3eab8bce9ada5bfe8007c2222201554ad20" + "1d202056ad7d7c2220201354ad202042a2cffaf397c9eed7c7007c221220" + "2054ad7c50ad7d42a9c0c689aece93b2307d21210b200020123703502000" + "2023370340200020032903a003370300200020032903e002370320200020" + "2137035820002022370348200041086a20032903a803370300200041286a" + "20032903e802370300200041186a200341b8036a29030037030020004110" + "6a200341b0036a290300370300200041306a200341f0026a290300370300" + "200041386a200341f8026a2903003703000c020b2000200241e000104c1a" + "0c010b2000200141e000104c1a0b200341c0036a24000b970802067f087e" + "230041a0016b220224000240200129034022082001290350220984200141" + "c8006a290300220a200141d8006a290300220b8484420052044020024200" + "370318200242003703102002420037030820024201370300024020014140" + "6b2002104a450440200241206a2001290320220837030020002001290300" + "2209370310200041306a2008370300200241386a200141386a2903002208" + "370300200241306a200141306a290300220a370300200241286a20014128" + "6a290300220b370300200241106a200141106a290300220c370300200241" + "186a200141186a290300220d370300200041186a200141086a290300220e" + "370300200041206a200c370300200041286a200d370300200041386a200b" + "370300200041406b200a370300200041c8006a2008370300200220093703" + "002002200e3703080c010b20024198016a2204200b370300200220093703" + "900120022008370380012002200a37038801200242a9c0c689aece93b230" + "370318200242ddb0858ce8b691a8b87f3703102002428d95c7c396d2dac0" + "977f370308200242c7faf3c3ed82a3903c37030020024180016a2002103a" + "20022903800121082002290388012109200229039001210a200241186a22" + "032004290300220b3703002002200a370310200220093703082002200837" + "0300200220082009200a200b42c7faf3c3ed82a3903c428d95c7c396d2da" + "c0977f102b2003290300210c2002290310210d2002290308210e20022903" + "00210f200241d0006a2204200141106a290300370300200241d8006a2205" + "200141186a290300370300200220012903003703402002200141086a2903" + "00370348200241406b200f200e200d200c42c7faf3c3ed82a3903c428d95" + "c7c396d2dac0977f102b200241f8006a2206200141386a29030037030020" + "0241f0006a2207200141306a2903003703002002200141286a2903003703" + "68200220012903203703602003200b3703002002200a3703102002200937" + "0308200220083703002002200f200e200d200c42c7faf3c3ed82a3903c42" + "8d95c7c396d2dac0977f102b200241e0006a200229030020022903082002" + "290310200329030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f10" + "2b200320052903002208370300200241106a200429030022093703002002" + "41206a2002290360220a370300200241286a2002290368220b3703002002" + "41306a2007290300220c370300200241386a2006290300220d3703002000" + "2002290340220e370310200041186a2002290348220f370300200041206a" + "2009370300200041286a2008370300200041306a200a370300200041386a" + "200b370300200041406b200c370300200041c8006a200d3703002002200f" + "3703082002200e3703000b20004200370308200042013703000c010b2000" + "4200370308200042003703000b200241a0016a24000b3000200128021c20" + "002d0000410274220041cca5c0006a280200200041c0a5c0006a28020020" + "0128022028020c1103000bf917021d7f087e23004180066b220224002002" + "41b8036a2208200141386a290300370300200241b0036a2209200141306a" + "290300370300200241a8036a2213200141286a290300370300200241a003" + "6a2214200141206a29030037030020024198036a2203200141186a290300" + "37030020024190036a2204200141106a2903003703002002200129030037" + "0380032002200141086a2903003703880320024180036a20012001102f20" + "0241f8036a2205200141f8006a290300370300200241f0036a2206200141" + "f0006a290300370300200241e8036a2207200141e8006a29030037030020" + "0241e0036a220a200141e0006a290300370300200241d8036a220b200141" + "d8006a290300370300200241d0036a220c200141d0006a29030037030020" + "02200141c8006a2903003703c803200220012903403703c003200241c003" + "6a200141406b221e201e102f200241b8046a221520052903003703002002" + "41b0046a22162006290300370300200241a8046a22172007290300370300" + "200241a0046a2218200a29030037030020024198046a2219200b29030037" + "030020024190046a221a200c290300370300200220022903c80337038804" + "200220022903c0033703800420024180046a200241c0036a200241c0036a" + "102f200241c0026a2001200241c0036a1030200241f8046a221b200241f8" + "026a2205290300370300200241f0046a220e200241f0026a220a29030037" + "0300200241e8046a220f200241e8026a2206290300370300200241e0046a" + "2210200241e0026a220c290300370300200241d8046a220d200241d8026a" + "2207290300370300200241d0046a2211200241d0026a220b290300370300" + "200220022903c8023703c804200220022903c0023703c004200241c0046a" + "200241c0026a200241c0026a102f200241d8056a2212200d290300370300" + "200241d0056a220d2011290300370300200220022903c8043703c8052002" + "20022903c0043703c005200241c0056a2002290380032002290388032004" + "290300200329030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42" + "ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200241f8056a2203" + "201b290300370300200241f0056a2204200e2903003703002002200f2903" + "003703e805200220102903003703e005200241e0056a2014290300201329" + "03002009290300200829030042c7faf3c3ed82a3903c428d95c7c396d2da" + "c0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20024198" + "026a2208201229030037030020024190026a2209200d2903003703002002" + "41a8026a221320022903e805370300200241b0026a221420042903003703" + "00200241b8026a221b2003290300370300200220022903c8053703880220" + "0220022903c00537038002200220022903e0053703a00220122008290300" + "370300200d200929030037030020022002290388023703c8052002200229" + "0380023703c005200241c0056a200229038004200229038804201a290300" + "201929030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb085" + "8ce8b691a8b87f42a9c0c689aece93b230102d2003201b29030037030020" + "042014290300370300200220132903003703e805200220022903a0023703" + "e005200241e0056a201829030020172903002016290300201529030042c7" + "faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f" + "42a9c0c689aece93b230102d200241186a22152012290300370300200241" + "106a2216200d290300370300200241206a221720022903e0053703002002" + "41286a221820022903e805370300200241306a2219200429030037030020" + "0241386a221a2003290300370300200220022903c8053703082002200229" + "03c005370300200241c0026a200220021030201a20052903003703002019" + "200a290300370300201820062903003703002017200c2903003703002015" + "20072903003703002016200b290300370300200220022903c80237030820" + "0220022903c002370300200241c0026a20024180036a20024180036a1030" + "200241406b200241c0026a20024180036a103020024190056a220e200241" + "d0006a29030037030020024198056a220f200241d8006a29030037030020" + "0241a0056a2210200241e0006a290300370300200241a8056a2211200241" + "e8006a290300370300200241b0056a221c200241f0006a29030037030020" + "0241b8056a221d200241f8006a2903003703002002200229034037038005" + "200220022903483703880520024180056a200241406b200241406b102f20" + "0241c0026a2002200210302003200f2903003703002004200e2903003703" + "0020022002290388053703e80520022002290380053703e005200241e005" + "6a20022903c00220022903c80220022903d002200729030042c7faf3c3ed" + "82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c6" + "89aece93b230102d2008201d2903003703002009201c2903003703002002" + "201129030037038802200220102903003703800220024180026a20022903" + "e002200629030020022903f002200529030042c7faf3c3ed82a3903c428d" + "95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230" + "102d2008290300211f200929030021202003290300212120042903002122" + "2002290388022123200229038002212420022903e805212520022903e005" + "212620024180016a20024180046a20024180046a1030200241c0026a2002" + "4180016a20024180016a1030200241b8016a220e20052903003703002002" + "41b0016a220f200a290300370300200241a8016a22102006290300370300" + "200241a0016a2211200c29030037030020024198016a221c200729030037" + "030020024190016a221d200b290300370300200220022903c80237038801" + "200220022903c00237038001200241c0026a20024180016a20024180016a" + "1030200e2005290300370300200f200a2903003703002010200629030037" + "03002011200c290300370300201c2007290300370300201d200b29030037" + "0300200220022903c80237038801200220022903c00237038001200241c0" + "016a201e20014180016a102f200320152903003703002004201629030037" + "0300200220022903083703e805200220022903003703e005200241e0056a" + "202620252022202142c7faf3c3ed82a3903c428d95c7c396d2dac0977f42" + "ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2008201a29030037" + "030020092019290300370300200220182903003703880220022017290300" + "3703800220024180026a202420232020201f42c7faf3c3ed82a3903c428d" + "95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230" + "102d20072003290300370300200b20042903003703002006200229038802" + "370300200a200929030037030020052008290300370300200220022903e8" + "053703c802200220022903e0053703c00220022002290380023703e00220" + "024180026a200241406b200241c0026a102f20122008290300370300200d" + "200929030037030020022002290388023703c80520022002290380023703" + "c005200241c0056a200229038001200229038801201d290300201c290300" + "42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8" + "b87f42a9c0c689aece93b230102d2003201b290300370300200420142903" + "00370300200220132903003703e805200220022903a0023703e005200241" + "e0056a20112903002010290300200f290300200e29030042c7faf3c3ed82" + "a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689" + "aece93b230102d20072012290300370300200b200d290300370300200c20" + "022903e005370300200620022903e805370300200a200429030037030020" + "052003290300370300200220022903c8053703c802200220022903c00537" + "03c00220004180016a200241c0016a200241c0016a10302000201f370338" + "200020203703302000202337032820002024370320200020213703182000" + "20223703102000202537030820002026370300200020022903c002370340" + "200041c8006a20022903c802370300200041d0006a200b29030037030020" + "0041d8006a2007290300370300200041e0006a200c290300370300200041" + "e8006a2006290300370300200041f0006a200a290300370300200041f800" + "6a200529030037030020024180066a24000bbd21021c7f087e230041800b" + "6b22032400024002400240024020012903800120014188016a2903008442" + "00520d0020012903900120014198016a290300844200520d0020012903a0" + "01200141a8016a290300844200520d0020012903b001200141b8016a2903" + "0084500d010b024020022903800120024188016a290300844200520d0020" + "022903900120024198016a290300844200520d0020022903a001200241a8" + "016a290300844200520d0020022903b001200241b8016a29030084500d02" + "0b200341b8086a221420014180016a220441386a290300370300200341b0" + "086a200441306a290300370300200341a8086a2215200441286a29030037" + "0300200341a0086a200441206a29030037030020034198086a2216200441" + "186a29030037030020034190086a200441106a2903003703002003200429" + "0300370380082003200441086a2903003703880820034180086a20042004" + "102f200341f8086a221720024180016a220541386a290300370300200341" + "f0086a200541306a290300370300200341e8086a2218200541286a290300" + "370300200341e0086a200541206a290300370300200341d8086a22192005" + "41186a290300370300200341d0086a200541106a29030037030020032005" + "41086a2903003703c808200320052903003703c008200341c0086a200520" + "05102f20032001200341c0086a102f200341406b200220034180086a102f" + "20034180016a200420034180086a102f200341c0016a2005200341c0086a" + "102f20034180026a200141406b200341c0016a102f200341c0026a200241" + "406b20034180016a102f024002402003200341406b104a0d00200341206a" + "200341e0006a104a0d0020034180026a200341c0026a104a0d00200341a0" + "026a200341e0026a104a450d010b200341386a290300211f200341286a29" + "03002120200329033021212003290320212220034198076a2201200341d8" + "006a29030037030020034190076a2202200341d0006a2903003703002003" + "200329034837038807200320032903403703800720034180076a20032903" + "0020032903082003290310200341186a29030042c7faf3c3ed82a3903c42" + "8d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b2" + "30102d200341d8076a2206200341f8006a290300370300200341d0076a22" + "09200341f0006a2903003703002003200341e8006a2903003703c8072003" + "20032903603703c007200341c0076a202220202021201f42c7faf3c3ed82" + "a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689" + "aece93b230102d20034198036a200129030037030020034190036a200229" + "0300370300200341a8036a20032903c807370300200341b0036a20092903" + "00370300200341b8036a2006290300370300200320032903880737038803" + "200320032903800737038003200320032903c0073703a003200341b8026a" + "290300211f200341a8026a290300212020032903b002212120032903a002" + "21222001200341d8026a2903003703002002200341d0026a290300370300" + "200320032903c80237038807200320032903c0023703800720034180076a" + "20032903800220032903880220032903900220034198026a29030042c7fa" + "f3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42" + "a9c0c689aece93b230102d2006200341f8026a2903003703002009200341" + "f0026a2903003703002003200341e8026a2903003703c807200320032903" + "e0023703c007200341c0076a202220202021201f42c7faf3c3ed82a3903c" + "428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93" + "b230102d200341d8036a2001290300370300200341d0036a200229030037" + "0300200341e8036a20032903c807370300200341f0036a20092903003703" + "00200341f8036a200629030037030020032003290388073703c803200320" + "03290380073703c003200320032903c0073703e003200341c0076a200341" + "80036a20034180036a1030200341b8096a200341f8076a220c2903003703" + "00200341b0096a200341f0076a2211290300370300200341a8096a200341" + "e8076a220d290300370300200341a0096a200341e0076a221a2903003703" + "0020034198096a200629030037030020034190096a200929030037030020" + "0320032903c80737038809200320032903c0073703800920034180096a20" + "0341c0076a200341c0076a102f20034180046a20034180036a2003418009" + "6a102f200341c0046a200341c0036a200341c0036a103020034180056a20" + "0320034180096a102f200341c0056a20034180026a20034180046a102f20" + "0341d0096a220a200341d0046a290300370300200341d8096a2207200341" + "d8046a290300370300200341e0096a220b200341e0046a29030037030020" + "0341e8096a220e200341e8046a290300370300200341f0096a220f200341" + "f0046a290300370300200341f8096a2210200341f8046a29030037030020" + "0320032903c0043703c009200320032903c8043703c809200341c0096a20" + "0341c0046a200341c0046a102f200341d8066a2208200729030037030020" + "0341d0066a2207200a290300370300200320032903c8093703c806200320" + "032903c0093703c006200341c0066a200329038004200329038804200329" + "03900420034198046a29030042c7faf3c3ed82a3903c428d95c7c396d2da" + "c0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20062010" + "2903003703002009200f2903003703002003200e2903003703c807200320" + "0b2903003703c007200341c0076a20032903a004200341a8046a29030020" + "032903b004200341b8046a29030042c7faf3c3ed82a3903c428d95c7c396" + "d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2001" + "200829030037030020022007290300370300200341a8076a220e20032903" + "c807370300200341b0076a220f2009290300370300200341b8076a221020" + "06290300370300200320032903c80637038807200320032903c006370380" + "07200320032903c0073703a007200341c0076a20034180056a2003418005" + "6a103020034198066a2212200129030037030020034190066a2213200229" + "030037030020032003290388073703880620032003290380073703800620" + "034180066a20032903c00720032903c80720032903d007200629030042c7" + "faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f" + "42a9c0c689aece93b230102d200820102903003703002007200f29030037" + "03002003200e2903003703c806200320032903a0073703c006200341c006" + "6a20032903e007200d29030020032903f007200c29030042c7faf3c3ed82" + "a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689" + "aece93b230102d2008290300211f20072903002120201229030021212013" + "290300212220032903c806212320032903c0062124200329038806212520" + "03290380062126200820034198056a290300370300200720034190056a29" + "030037030020032003290388053703c80620032003290380053703c00620" + "0341c0066a202620252022202142c7faf3c3ed82a3903c428d95c7c396d2" + "dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200120" + "0341b8056a2903003703002002200341b0056a2903003703002003200341" + "a8056a29030037038807200320032903a0053703800720034180076a2024" + "20232020201f42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0" + "858ce8b691a8b87f42a9c0c689aece93b230102d20062008290300370300" + "20092007290300370300200d200329038807370300201120022903003703" + "00200c2001290300370300200320032903c8063703c807200320032903c0" + "063703c00720032003290380073703e00720034180076a200341c0046a20" + "0341c0076a102f200341c0076a200341c0056a200341c0056a1030200341" + "f80a6a220a2001290300370300200341f00a6a220b200229030037030020" + "032003290388073703e80a20032003290380073703e00a200341e00a6a20" + "032903c00720032903c80720032903d007200629030042c7faf3c3ed82a3" + "903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689ae" + "ce93b230102d200820102903003703002007200f2903003703002003200e" + "2903003703c806200320032903a0073703c006200341c0066a20032903e0" + "07200d29030020032903f007200c29030042c7faf3c3ed82a3903c428d95" + "c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b23010" + "2d2012200a2903003703002013200b290300370300200341a0066a221b20" + "032903c006370300200341a8066a221c20032903c806370300200341b006" + "6a221d2007290300370300200341b8066a221e2008290300370300200320" + "032903e80a37038806200320032903e00a37038006200341c0076a200420" + "051030200341b80a6a2204200c290300370300200341b00a6a2205201129" + "0300370300200341a80a6a220c200d290300370300200341a00a6a220d20" + "1a290300370300200341980a6a22112006290300370300200341900a6a22" + "062009290300370300200320032903c8073703880a200320032903c00737" + "03800a200341800a6a200341c0076a200341c0076a102f200a2011290300" + "370300200b2006290300370300200320032903880a3703e80a2003200329" + "03800a3703e00a200341e00a6a2003290380082003290388082003290390" + "08201629030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0" + "858ce8b691a8b87f42a9c0c689aece93b230102d20082004290300370300" + "200720052903003703002003200c2903003703c8062003200d2903003703" + "c006200341c0066a20032903a008201529030020032903b0082014290300" + "42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8" + "b87f42a9c0c689aece93b230102d2001200a2903003703002002200b2903" + "00370300200e20032903c806370300200f20072903003703002010200829" + "0300370300200320032903e80a37038807200320032903e00a3703800720" + "0320032903c0063703a007200341d80a6a22042001290300370300200341" + "d00a6a2201200229030037030020032003290388073703c80a2003200329" + "0380073703c00a200341c00a6a20032903c00820032903c80820032903d0" + "08201929030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0" + "858ce8b691a8b87f42a9c0c689aece93b230102d200a2010290300370300" + "200b200f2903003703002003200e2903003703e80a200320032903a00737" + "03e00a200341e00a6a20032903e008201829030020032903f00820172903" + "0042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691" + "a8b87f42a9c0c689aece93b230102d200820042903003703002007200129" + "0300370300200341e8066a20032903e80a370300200341f0066a200b2903" + "00370300200341f8066a200a290300370300200320032903c80a3703c806" + "200320032903c00a3703c006200320032903e00a3703e00620004180016a" + "200341c0066a20034180036a102f2000201f370338200020203703302000" + "202337032820002024370320200020213703182000202237031020002025" + "370308200020263703002000200329038006370340200041c8006a200329" + "038806370300200041d0006a2013290300370300200041d8006a20122903" + "00370300200041e0006a201b290300370300200041e8006a201c29030037" + "0300200041f0006a201d290300370300200041f8006a201e290300370300" + "0c030b2000200110430c020b2000200241c001104c1a0c010b2000200141" + "c001104c1a0b200341800b6a24000bf50602037f067e230041c0026b2202" + "24000240024002400240024020012903800120014188016a290300844200" + "520d0020012903900120014198016a290300844200520d0020012903a001" + "200141a8016a290300844200520d0020012903b001200141b8016a290300" + "84500d010b200241d8006a4200370300200241e0006a2204420037030020" + "0241e8006a4200370300200241f0006a4200370300200241f8006a420037" + "030020024200370348200242013703402002420037035020014180016a22" + "03200241406b104a450440200141a0016a2004104a450d020b200241406b" + "200310312002280240410171450d02200241386a20024188016a29030022" + "05370300200241306a20024180016a22032903002206370300200241286a" + "200241f8006a2903002207370300200241206a200241f0006a2903002208" + "370300200241186a200241e8006a2903002209370300200241106a200241" + "e0006a290300220a37030020024190026a200a37030020024198026a2009" + "370300200241a0026a2008370300200241a8026a2007370300200241b002" + "6a2006370300200241b8026a200537030020022002290350220537030020" + "02200241d8006a2903002206370308200220053703800220022006370388" + "0220024180026a20022002102f200241406b200120024180026a102f2002" + "41c0016a200220024180026a102f2003200141406b200241c0016a102f20" + "0041106a200241406b418001104c1a20004200370308200042013703000c" + "030b20004200370308200042003703000c020b200241b8016a200141f800" + "6a290300370300200241b0016a200141f0006a290300370300200241a801" + "6a200141e8006a290300370300200241a0016a200141e0006a2903003703" + "0020024198016a200141d8006a29030037030020024190016a200141d000" + "6a29030037030020024188016a200141c8006a290300370300200241d000" + "6a200141106a290300370300200241d8006a200141186a29030037030020" + "0241e0006a200141206a290300370300200241e8006a200141286a290300" + "370300200241f0006a200141306a290300370300200241f8006a20014138" + "6a2903003703002002200129034037038001200220012903003703402002" + "200141086a290300370348200041106a200241406b418001104c1a200042" + "00370308200042013703000c010b4194a1c0001020000b200241c0026a24" + "000bd64502497f107e230041a00f6b22022400200241386a223f200141f8" + "006a220e290300370300200241306a2240200141f0006a220f2903003703" + "00200241286a2241200141e8006a2210290300370300200241206a224220" + "0141e0006a2211290300370300200241186a2243200141d8006a22122903" + "00370300200241106a2244200141d0006a22202903003703002002200129" + "03403703002002200141c8006a2221290300370308200141a8016a222329" + "03002153200141a0016a22242903002154200141b8016a22252903002155" + "200141b0016a2230290300215620014188016a2235290300215720014198" + "016a2236290300215820014190016a22372903002159200129038001215a" + "200241f8006a200141f8016a2213290300370300200241f0006a200141f0" + "016a2214290300370300200241e8006a200141e8016a2215290300370300" + "200241e0006a200141e0016a2216290300370300200241d8006a200141d8" + "016a2217290300370300200241d0006a200141d0016a220d290300370300" + "20024190016a20014190026a220429030037030020024198016a20014198" + "026a2206290300370300200241a0016a200141a0026a2207290300370300" + "200241a8016a200141a8026a2208290300370300200241b0016a200141b0" + "026a2205290300370300200241b8016a200141b8026a2209290300370300" + "2002200141c8016a2222290300370348200220012903c001370340200220" + "012903800237038001200220014188026a220a29030037038801200241f8" + "016a200141f8026a2238290300370300200241f0016a200141f0026a2245" + "290300370300200241e8016a200141e8026a2246290300370300200241e0" + "016a200141e0026a2247290300370300200241d8016a200141d8026a2248" + "290300370300200241d0016a200141d0026a2249290300370300200241b8" + "026a2226200141386a2231290300370300200241b0026a2227200141306a" + "2232290300370300200241a8026a2228200141286a223a29030037030020" + "0241a0026a2229200141206a223b29030037030020024198026a222a2001" + "41186a223c29030037030020024190026a222b200141106a223d29030037" + "03002002200141c8026a224a2903003703c801200220012903c0023703c0" + "012002200141086a223e2903003703880220022001290300370380022002" + "4180026a200120014180026a2203102f200241f8026a2219203129030037" + "0300200241f0026a221a2032290300370300200241e8026a221b203a2903" + "00370300200241e0026a221c203b290300370300200241d8026a221d203c" + "290300370300200241d0026a221e203d2903003703002002203e29030037" + "03c802200220012903003703c002200241c0026a200120031030200241b8" + "036a220b2009290300370300200241b0036a220920052903003703002002" + "41a8036a22052008290300370300200241a0036a220c2007290300370300" + "20024198036a2218200629030037030020024190036a221f200429030037" + "0300200242003703b80d200242003703b00d200242003703a80d20024201" + "3703a00d200242003703980d200242003703900d200242003703880d2002" + "42093703800d2002200a2903003703880320022001290380023703800320" + "024180036a2003200241800d6a102f200241c00b6a20024180036a200110" + "30200b200241f80b6a22062903003703002009200241f00b6a2207290300" + "3703002005200241e80b6a2208290300370300200c200241e00b6a220529" + "03003703002018200241d80b6a2203290300370300201f200241d00b6a22" + "04290300370300200220022903c80b37038803200220022903c00b370380" + "03200241c00b6a200241c0026a20024180036a102f201920062903003703" + "00201a2007290300370300201b2008290300370300201c20052903003703" + "00201d2003290300370300201e2004290300370300200220022903c80b37" + "03c802200220022903c00b3703c002200241980f6a220b201d2903003703" + "00200241900f6a220c201e290300370300200220022903c8023703880f20" + "0220022903c0023703800f200241800f6a20022903800220022903880220" + "2b290300202a29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f" + "42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200241980a6a22" + "092019290300370300200241900a6a220a201a2903003703002002201b29" + "03003703880a2002201c2903003703800a200241800a6a20292903002028" + "2903002027290300202629030042c7faf3c3ed82a3903c428d95c7c396d2" + "dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200320" + "0b290300224b3703002004200c290300224c370300200520022903800a22" + "4d3703002007200a290300224e370300200820022903880a224f37030020" + "0620092903002250370300200220022903880f22513703c80b2002200229" + "03800f22523703c00b20192050370300201a204e370300201b204f370300" + "201c204d370300201d204b370300201e204c370300200220513703c80220" + "0220523703c002200241c0036a20024180026a200241800d6a102f200b20" + "1d290300370300200c201e290300370300200220022903c8023703880f20" + "0220022903c0023703800f200241800f6a20022903c00320022903c80320" + "022903d003200241d8036a29030042c7faf3c3ed82a3903c428d95c7c396" + "d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2009" + "2019290300370300200a201a2903003703002002201b2903003703880a20" + "02201c2903003703800a200241800a6a20022903e003200241e8036a2903" + "0020022903f003200241f8036a29030042c7faf3c3ed82a3903c428d95c7" + "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d" + "2003200b290300224b3703002004200c290300224c370300200520022903" + "800a224d3703002007200a290300224e370300200820022903880a224f37" + "0300200620092903002250370300200220022903880f22513703c80b2002" + "20022903800f22523703c00b20192050370300201a204e370300201b204f" + "370300201c204d370300201d204b370300201e204c370300200220513703" + "c802200220523703c002200241c00b6a20024180026a20024180026a1030" + "202620062903003703002027200729030037030020282008290300370300" + "20292005290300370300202a2003290300370300202b2004290300370300" + "200220022903c80b37038802200220022903c00b3703800220024190046a" + "221f200d29030037030020024198046a222c2017290300370300200241a0" + "046a222d2016290300370300200241a8046a222e20152903003703002002" + "41b0046a222f2014290300370300200241b8046a22392013290300370300" + "200220012903c00137038004200220222903003703880420024180046a20" + "0141c0016a223320014180016a2234102f200241f8046a22182013290300" + "370300200241f0046a22132014290300370300200241e8046a2214201529" + "0300370300200241e0046a22152016290300370300200241d8046a221620" + "17290300370300200241d0046a2217200d29030037030020022022290300" + "3703c804200220012903c0013703c004200241c0046a2033203410302002" + "41b8056a220d2025290300370300200241b0056a22222030290300370300" + "200241a8056a22252023290300370300200241a0056a2223202429030037" + "030020024198056a2224203629030037030020024190056a223020372903" + "003703002002203529030037038805200220012903800137038005200241" + "80056a2034200241800d6a102f200241c00b6a20024180056a2033103020" + "0d2006290300370300202220072903003703002025200829030037030020" + "232005290300370300202420032903003703002030200429030037030020" + "0220022903c80b37038805200220022903c00b37038005200241c00b6a20" + "0241c0046a20024180056a102f2018200629030037030020132007290300" + "370300201420082903003703002015200529030037030020162003290300" + "37030020172004290300370300200220022903c80b3703c8042002200229" + "03c00b3703c004200b2016290300370300200c2017290300370300200220" + "022903c8043703880f200220022903c0043703800f200241800f6a200229" + "038004200229038804201f290300202c29030042c7faf3c3ed82a3903c42" + "8d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b2" + "30102d20092018290300370300200a201329030037030020022014290300" + "3703880a200220152903003703800a200241800a6a202d290300202e2903" + "00202f290300203929030042c7faf3c3ed82a3903c428d95c7c396d2dac0" + "977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2003200b29" + "0300224b3703002004200c290300224c370300200520022903800a224d37" + "03002007200a290300224e370300200820022903880a224f370300200620" + "092903002250370300200220022903880f22513703c80b20022002290380" + "0f22523703c00b201820503703002013204e3703002014204f3703002015" + "204d3703002016204b3703002017204c370300200220513703c804200220" + "523703c004200241c0056a20024180046a200241800d6a102f200b201629" + "0300370300200c2017290300370300200220022903c8043703880f200220" + "022903c0043703800f200241800f6a20022903c00520022903c805200229" + "03d005200241d8056a29030042c7faf3c3ed82a3903c428d95c7c396d2da" + "c0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20092018" + "290300370300200a2013290300370300200220142903003703880a200220" + "152903003703800a200241800a6a20022903e005200241e8056a29030020" + "022903f005200241f8056a29030042c7faf3c3ed82a3903c428d95c7c396" + "d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2003" + "200b290300224b3703002004200c290300224c370300200520022903800a" + "224d3703002007200a290300224e370300200820022903880a224f370300" + "200620092903002250370300200220022903880f22513703c80b20022002" + "2903800f22523703c00b201820503703002013204e3703002014204f3703" + "002015204d3703002016204b3703002017204c370300200220513703c804" + "200220523703c004200241c00b6a20024180046a20024180046a10302039" + "2006290300370300202f2007290300370300202e2008290300370300202d" + "2005290300370300202c2003290300370300201f20042903003703002002" + "20022903c80b37038804200220022903c00b3703800420024190066a2222" + "202029030037030020024198066a22332012290300370300200241a0066a" + "22342011290300370300200241a8066a22232010290300370300200241b0" + "066a2224200f290300370300200241b8066a2225200e2903003703002002" + "200129034037038006200220212903003703880620024180066a20014140" + "6b200141c0026a2230102f200241f8066a220d200e290300370300200241" + "f0066a220e200f290300370300200241e8066a220f201029030037030020" + "0241e0066a22102011290300370300200241d8066a221120122903003703" + "00200241d0066a22122020290300370300200220212903003703c8062002" + "20012903403703c006200241c0066a200220301030200241b8076a222020" + "38290300370300200241b0076a22212045290300370300200241a8076a22" + "352046290300370300200241a0076a223620472903003703002002419807" + "6a2237204829030037030020024190076a22382049290300370300200220" + "4a29030037038807200220012903c0023703800720024180076a20302002" + "41800d6a102f200241c00b6a20024180076a200210302020200629030037" + "030020212007290300370300203520082903003703002036200529030037" + "03002037200329030037030020382004290300370300200220022903c80b" + "37038807200220022903c00b37038007200241c00b6a200241c0066a2002" + "4180076a102f200d2006290300370300200e2007290300370300200f2008" + "290300370300201020052903003703002011200329030037030020122004" + "290300370300200220022903c80b3703c806200220022903c00b3703c006" + "200b2011290300370300200c2012290300370300200220022903c8063703" + "880f200220022903c0063703800f200241800f6a20022903800620022903" + "88062022290300203329030042c7faf3c3ed82a3903c428d95c7c396d2da" + "c0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2009200d" + "290300370300200a200e2903003703002002200f2903003703880a200220" + "102903003703800a200241800a6a20342903002023290300202429030020" + "2529030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858c" + "e8b691a8b87f42a9c0c689aece93b230102d2003200b290300224b370300" + "2004200c290300224c370300200520022903800a224d3703002007200a29" + "0300224e370300200820022903880a224f37030020062009290300225037" + "0300200220022903880f22513703c80b200220022903800f22523703c00b" + "200d2050370300200e204e370300200f204f3703002010204d3703002011" + "204b3703002012204c370300200220513703c806200220523703c0062002" + "41c0076a20024180066a200241800d6a102f200b2011290300370300200c" + "2012290300370300200220022903c8063703880f200220022903c0063703" + "800f200241800f6a20022903c00720022903c80720022903d007200241d8" + "076a29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb085" + "8ce8b691a8b87f42a9c0c689aece93b230102d2009200d29030037030020" + "0a200e2903003703002002200f2903003703880a20022010290300370380" + "0a200241800a6a20022903e007200241e8076a29030020022903f0072002" + "41f8076a29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42dd" + "b0858ce8b691a8b87f42a9c0c689aece93b230102d2003200b290300224b" + "3703002004200c290300224c370300200520022903800a224d3703002007" + "200a290300224e370300200820022903880a224f37030020062009290300" + "2250370300200220022903880f22513703c80b200220022903800f225237" + "03c00b200d2050370300200e204e370300200f204f3703002010204d3703" + "002011204b3703002012204c370300200220513703c806200220523703c0" + "06200241c00b6a20024180066a20024180066a1030202520062903003703" + "002024200729030037030020232008290300370300203420052903003703" + "002033200329030037030020222004290300370300200220022903c80b37" + "038806200220022903c00b370380062009201d290300370300200a201e29" + "0300370300200220022903c8023703880a200220022903c0023703800a20" + "0241800a6a2001290300203e290300203d290300203c29030042c7faf3c3" + "ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0" + "c689aece93b230102d200320192903003703002004201a29030037030020" + "02201b2903003703c80b2002201c2903003703c00b200241c00b6a203b29" + "0300203a2903002032290300203129030042c7faf3c3ed82a3903c428d95" + "c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b23010" + "2d200241d80d6a221c2009290300370300200241d00d6a221d200a290300" + "370300200241e00d6a221e20022903c00b370300200241e80d6a22202002" + "2903c80b370300200241f00d6a22212004290300370300200241f80d6a22" + "312003290300370300200220022903880a3703c80d200220022903800a37" + "03c00d200241c00b6a200241c00d6a200241c00d6a103020312006290300" + "3703002021200729030037030020202008290300370300201e2005290300" + "370300201c2003290300370300201d2004290300370300200220022903c8" + "0b3703c80d200220022903c00b3703c00d200241c00b6a200241c00d6a20" + "0241c0026a10302031200629030037030020212007290300370300202020" + "08290300370300201e2005290300370300201c2003290300370300201d20" + "0429030037030020024190086a2232202b29030037030020024198086a22" + "2b202a290300370300200241a0086a222a2029290300370300200241a808" + "6a22292028290300370300200241b0086a22282027290300370300200241" + "b8086a22272026290300370300200220022903c80b3703c80d2002200229" + "03c00b3703c00d2002200229038002370380082002200229038802370388" + "0820024180086a20024180026a20024180016a1030200241c00b6a200241" + "80086a20024180086a103020272006290300370300202820072903003703" + "0020292008290300370300202a2005290300370300202b20032903003703" + "0020322004290300370300200220022903c80b37038808200220022903c0" + "0b37038008200241c00b6a20024180086a20024180026a10302027200629" + "03003703002028200729030037030020292008290300370300202a200529" + "0300370300202b200329030037030020322004290300370300200241d008" + "6a22012022290300370300200241d8086a220b2033290300370300200241" + "e0086a220c2034290300370300200241e8086a2219202329030037030020" + "0241f0086a221a2024290300370300200241f8086a221b20252903003703" + "00200220022903c80b37038808200220022903c00b370380082002200229" + "0380063703c00820022002290388063703c808200241c0086a2002418006" + "6a200241800d6a102f200241c00b6a200241c0086a200241406b1030201b" + "2006290300370300201a200729030037030020192008290300370300200c" + "2005290300370300200b2003290300370300200120042903003703002002" + "20022903c80b3703c808200220022903c00b3703c008200241c00b6a2002" + "41c0086a200241c0086a1030201b2006290300370300201a200729030037" + "030020192008290300370300200c2005290300370300200b200329030037" + "030020012004290300370300200220022903c80b3703c808200220022903" + "c00b3703c00820024180096a20024180066a200241800d6a102f200241c0" + "0b6a200241c0086a20024180096a1030201b2006290300370300201a2007" + "29030037030020192008290300370300200c2005290300370300200b2003" + "29030037030020012004290300370300200220022903c80b3703c8082002" + "20022903c00b3703c00820092011290300370300200a2012290300370300" + "200220022903c8063703880a200220022903c0063703800a200241800a6a" + "205a20572059205842c7faf3c3ed82a3903c428d95c7c396d2dac0977f42" + "ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2003200d29030037" + "03002004200e2903003703002002200f2903003703c80b20022010290300" + "3703c00b200241c00b6a205420532056205542c7faf3c3ed82a3903c428d" + "95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230" + "102d200241980e6a220d2009290300370300200241900e6a220e200a2903" + "00370300200241a00e6a220f20022903c00b370300200241a80e6a221020" + "022903c80b370300200241b00e6a22112004290300370300200241b80e6a" + "22122003290300370300200220022903880a3703880e200220022903800a" + "3703800e200241c00b6a200241800e6a200241800e6a1030201220062903" + "003703002011200729030037030020102008290300370300200f20052903" + "00370300200d2003290300370300200e2004290300370300200220022903" + "c80b3703880e200220022903c00b3703800e200241c00b6a200241800e6a" + "200241c0066a103020122006290300370300201120072903003703002010" + "2008290300370300200f2005290300370300200d2003290300370300200e" + "2004290300370300200220022903c80b3703880e200220022903c00b3703" + "800e20092016290300370300200a2017290300370300200220022903c804" + "3703880a200220022903c0043703800a200241800a6a2002290300200229" + "03082044290300204329030042c7faf3c3ed82a3903c428d95c7c396d2da" + "c0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20032018" + "29030037030020042013290300370300200220142903003703c80b200220" + "152903003703c00b200241c00b6a20422903002041290300204029030020" + "3f29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858c" + "e8b691a8b87f42a9c0c689aece93b230102d200241d80e6a221820092903" + "00370300200241d00e6a2213200a290300370300200241e00e6a22142002" + "2903c00b370300200241e80e6a221520022903c80b370300200241f00e6a" + "22162004290300370300200241f80e6a2217200329030037030020022002" + "2903880a3703c80e200220022903800a3703c00e200241c00b6a200241c0" + "0e6a200241c00e6a10302017200629030037030020162007290300370300" + "201520082903003703002014200529030037030020182003290300370300" + "20132004290300370300200220022903c80b3703c80e200220022903c00b" + "3703c00e200241c00b6a200241c00e6a200241c0046a1030201720062903" + "003703002016200729030037030020152008290300370300201420052903" + "003703002018200329030037030020132004290300370300200241d0096a" + "2226201f290300370300200241d8096a221f202c290300370300200241e0" + "096a222c202d290300370300200241e8096a222d202e2903003703002002" + "41f0096a222e202f290300370300200241f8096a222f2039290300370300" + "200220022903c80b3703c80e200220022903c00b3703c00e200220022903" + "80043703c00920022002290388043703c809200241c0096a20024180046a" + "200241c0016a1030200241c00b6a200241c0096a200241c0096a1030202f" + "2006290300370300202e2007290300370300202d2008290300370300202c" + "2005290300370300201f2003290300370300202620042903003703002002" + "20022903c80b3703c809200220022903c00b3703c009200241c00b6a2002" + "41c0096a20024180046a1030202f2006290300370300202e200729030037" + "0300202d2008290300370300202c2005290300370300201f200329030037" + "030020262004290300370300200220022903c80b3703c809200220022903" + "c00b3703c009200241b80a6a2031290300370300200241b00a6a20212903" + "00370300200241a80a6a2020290300370300200241a00a6a201e29030037" + "03002009201c290300370300200a201d290300370300200220022903c80d" + "3703880a200220022903c00d3703800a200241c80a6a20022903c80e3703" + "00200241d00a6a2013290300370300200241d80a6a201829030037030020" + "0241e00a6a2014290300370300200241e80a6a2015290300370300200241" + "f00a6a2016290300370300200241f80a6a20172903003703002002200229" + "03c00e3703c00a200241b80b6a2012290300370300200241b00b6a201129" + "0300370300200241a80b6a2010290300370300200241a00b6a200f290300" + "370300200241980b6a200d290300370300200241900b6a200e2903003703" + "00200241880b6a20022903880e370300200220022903800e3703800b2006" + "201b2903003703002007201a290300370300200820192903003703002005" + "200c2903003703002003200b290300370300200420012903003703002002" + "20022903c8083703c80b200220022903c0083703c00b200241880c6a2002" + "29038808370300200241900c6a2032290300370300200241980c6a202b29" + "0300370300200241a00c6a202a290300370300200241a80c6a2029290300" + "370300200241b00c6a2028290300370300200241b80c6a20272903003703" + "0020022002290380083703800c200241f80c6a202f290300370300200241" + "f00c6a202e290300370300200241e80c6a202d290300370300200241e00c" + "6a202c290300370300200241d80c6a201f290300370300200241d00c6a20" + "26290300370300200241c80c6a20022903c809370300200220022903c009" + "3703c00c2000200241800a6a41c001104c41c0016a200241c00b6a41c001" + "104c1a200241a00f6a24000bcc1101047f23004180026b22032400024020" + "024101712206450440200341386a200141386a290300370300200341306a" + "200141306a290300370300200341286a200141286a290300370300200341" + "206a200141206a290300370300200341186a200141186a29030037030020" + "0341106a200141106a290300370300200320012903003703002003200141" + "086a29030037030820034190016a200141d0006a29030037030020034198" + "016a200141d8006a290300370300200341a0016a200141e0006a29030037" + "0300200341a8016a200141e8006a290300370300200341b0016a200141f0" + "006a290300370300200341b8016a200141f8006a29030037030020032001" + "290340370380012003200141c8006a290300370388010c010b200341d801" + "6a2204200141386a290300370300200341d0016a2205200141306a290300" + "370300200320012903203703c0012003200141286a2903003703c8012003" + "41c0016a42c6faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858c" + "e8b691a8b87f42a9c0c689aece93b23042c7faf3c3ed82a3903c428d95c7" + "c396d2dac0977f102b200341186a200141186a290300370300200341106a" + "200141106a290300370300200341286a20032903c801370300200341306a" + "2005290300370300200341386a20042903003703002003200141086a2903" + "0037030820032001290300370300200320032903c0013703202004200141" + "f8006a2903003703002005200141f0006a2903003703002003200141e800" + "6a2903003703c801200320012903603703c001200341c0016a42c6faf3c3" + "ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0" + "c689aece93b23042c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b" + "20034198016a200141d8006a29030037030020034190016a200141d0006a" + "290300370300200341a8016a20032903c801370300200341b0016a200529" + "0300370300200341b8016a20042903003703002003200141c8006a290300" + "370388012003200129034037038001200320032903c0013703a0010b0240" + "0240024002402002410670220441026b0e020102000b200342a0dcae8f86" + "aaf9e4163703f801200342948fe8babd91b3d2cb003703f001200342cebb" + "f2dbd0c38ad7323703e801200342a297bfa0c6a3f5b2163703e001200342" + "f7a3e4fb84f3d1d92f3703d801200342c3e2e6aacf87fb85cc003703d001" + "2003428ce68c968ce2b0c6b77f3703c801200342bdaabdbbf1aae5f1997f" + "3703c0010c020b200341e0016a22024200370300200241086a4200370300" + "200241106a4200370300200241186a4200370300200342a9c0c689aece93" + "b2303703d801200342b099b385febcf6b6de003703d001200342bddcd9dc" + "fbd3c1c7423703c801200342c8faf383d69cd1de643703c0010c010b2003" + "42efecc59e9bc8f7f8043703f801200342cf9298e1decdc3f9a97f3703f0" + "01200342b1ccfcc7f9b7ccef0f3703e801200342de8d96d5bae5aa863837" + "03e0012003428aded7ba8b8fb8ab083703d801200342accbfcacf98ec7ff" + "ba7f3703d001200342d385a5ebd5a7ffaf807f3703c801200342edf6f3de" + "87dd9bbafb003703c0010b20014180016a2102200341406b20034180016a" + "200341c0016a102f02402006450440200341b8016a200241386a29030037" + "0300200341b0016a200241306a290300370300200341a8016a200241286a" + "290300370300200341a0016a200241206a29030037030020034198016a20" + "0241186a29030037030020034190016a200241106a290300370300200320" + "02290300370380012003200241086a290300370388010c010b200341d801" + "6a2206200141b8016a290300370300200341d0016a2205200141b0016a29" + "0300370300200320012903a0013703c0012003200141a8016a2903003703" + "c801200341c0016a42c6faf3c3ed82a3903c428d95c7c396d2dac0977f42" + "ddb0858ce8b691a8b87f42a9c0c689aece93b23042c7faf3c3ed82a3903c" + "428d95c7c396d2dac0977f102b20034198016a200241186a290300370300" + "20034190016a200241106a290300370300200341a8016a20032903c80137" + "0300200341b0016a2005290300370300200341b8016a2006290300370300" + "2003200241086a2903003703880120032002290300370380012003200329" + "03c0013703a0010b0240024002400240200441026b0e020102000b200342" + "ee95f6bfbedb978a2c3703f80120034292b9acd88396a09d9f7f3703f001" + "200342e38efbdea1ddf4c2363703e801200342a682aee99ce2d19d413703" + "e00120034281d0baa7e6ebd3da053703d80120034284bde0d0f596f0f980" + "7f3703d001200342f2d8d3f4fbbed999533703c801200342e2cefa90d9ea" + "87c5847f3703c0010c020b200341e0016a22014200370300200141086a42" + "00370300200141106a4200370300200141186a4200370300200342003703" + "d801200342ac97d286eaf99af1d9003703d001200342cfb8ede69afe98f9" + "543703c801200342feffffbf97e6d1b1d7003703c0010c010b2003429294" + "c48c9eb3faea233703f80120034284bac8e6f0ddbdd87e3703f001200342" + "e5adfe9b87c1a7a5a47f3703e8012003429fc7b098d7b3fbf1df003703e0" + "01200342ab9b828ee18ce3e20b3703d801200342ce88c9adfb9eb8df1937" + "03d001200342cbd7c1add7a8c299663703c801200342e6e0afe6c3d7a48d" + "0e3703c0010b20004180016a20034180016a200341c0016a102f20004138" + "6a200341386a290300370300200041306a200341306a2903003703002000" + "41286a200341286a290300370300200041206a200341206a290300370300" + "200041186a200341186a290300370300200041106a200341106a29030037" + "0300200041086a2003290308370300200020032903003703002000200329" + "0340370340200041c8006a2003290348370300200041d0006a200341d000" + "6a290300370300200041d8006a200341d8006a290300370300200041e000" + "6a200341e0006a290300370300200041e8006a200341e8006a2903003703" + "00200041f0006a200341f0006a290300370300200041f8006a200341f800" + "6a29030037030020034180026a24000bbd46027c7f107e230041e00b6b22" + "052400200541b8016a2234200141b8016a2235290300370300200541b001" + "6a2236200141b0016a2237290300370300200541a8016a2238200141a801" + "6a2239290300370300200541a0016a223a200141a0016a223b2903003703" + "0020054198016a223c20014198016a223d29030037030020054190016a22" + "3e20014190016a223f290300370300200541d0016a222e200141d0016a22" + "4f290300370300200541d8016a222f200141d8016a225029030037030020" + "0541e0016a2230200141e0016a2251290300370300200541e8016a223120" + "0141e8016a2252290300370300200541f0016a2232200141f0016a225329" + "0300370300200541f8016a2233200141f8016a2254290300370300200520" + "012903800137038001200520012903c0013703c001200520014188016a22" + "40290300370388012005200141c8016a22552903003703c801200541b802" + "6a2256200141f8026a2220290300370300200541b0026a2257200141f002" + "6a2221290300370300200541a8026a2258200141e8026a22282903003703" + "00200541a0026a2259200141e0026a222929030037030020054198026a22" + "5a200141d8026a222a29030037030020054190026a225b200141d0026a22" + "2b290300370300200541d0026a2241200141106a22062903003703002005" + "41d8026a2242200141186a2207290300370300200541e0026a2243200141" + "206a2208290300370300200541e8026a2244200141286a22092903003703" + "00200541f0026a2245200141306a220a290300370300200541f8026a2246" + "200141386a220b2903003703002005200141c8026a222c29030037038802" + "200520012903c00237038002200520012903003703c0022005200141086a" + "220c2903003703c802200541c0026a20012002102f200541b8036a225c20" + "35290300370300200541b0036a225d2037290300370300200541a8036a22" + "5e2039290300370300200541a0036a225f203b2903003703002005419803" + "6a2260203d29030037030020054190036a2261203f290300370300200520" + "402903003703880320052001290380013703800320054180036a20014180" + "016a220d2004102f200541f8036a2262200141b8026a2903003703002005" + "41f0036a2263200141b0026a290300370300200541e8036a2264200141a8" + "026a290300370300200541e0036a2265200141a0026a2903003703002005" + "41d8036a226620014198026a290300370300200541d0036a226720014190" + "026a290300370300200520014188026a2903003703c80320052001290380" + "023703c003200541c0036a20014180026a22472003102f200541b8046a22" + "68200b290300370300200541b0046a2269200a290300370300200541a804" + "6a226a2009290300370300200541a0046a226b2008290300370300200541" + "98046a226c200729030037030020054190046a226d200629030037030020" + "05200c29030037038804200520012903003703800420054180046a200120" + "471030200541f8046a226e200b290300370300200541f0046a226f200a29" + "0300370300200541e8046a22702009290300370300200541e0046a227120" + "08290300370300200541d8046a22722007290300370300200541d0046a22" + "7320062903003703002005200c2903003703c804200520012903003703c0" + "04200541c0046a2001200d1030200541b8056a2248200141f8006a221229" + "0300370300200541b0056a2249200141f0006a2213290300370300200541" + "a8056a224a200141e8006a2214290300370300200541a0056a224b200141" + "e0006a221529030037030020054198056a224c200141d8006a221c290300" + "37030020054190056a224d200141d0006a221d2903003703002005200141" + "c8006a221e29030037038805200520012903403703800520054180056a20" + "0141406b221f200141c0016a22741030200541c0096a20054180056a2001" + "41c0026a222d10302048200541f8096a220c2903003703002049200541f0" + "096a220d290300370300204a200541e8096a220e290300370300204b2005" + "41e0096a220f290300370300204c200541d8096a2210290300370300204d" + "200541d0096a2211290300370300200520052903c8093703880520052005" + "2903c00937038005200541d0056a2222201d290300370300200541d8056a" + "2223201c290300370300200541e0056a22242015290300370300200541e8" + "056a22252014290300370300200541f0056a222620132903003703002005" + "41f8056a22272012290300370300200520012903403703c0052005201e29" + "03003703c805200541c0056a201f2004102f200541b8066a221620272903" + "00370300200541b0066a22172026290300370300200541a8066a22182025" + "290300370300200541a0066a2219202429030037030020054198066a221a" + "202329030037030020054190066a221b2022290300370300200520052903" + "c80537038806200520052903c0053703800620054180066a200541c0056a" + "200541c0036a1030200542003703b80b200542003703b00b200542003703" + "a80b200542013703a00b200542003703980b200542003703900b20054200" + "3703880b200542093703800b200541c0096a20054180066a200541800b6a" + "102f2016200c2903003703002017200d2903003703002018200e29030037" + "03002019200f290300370300201a2010290300370300201b201129030037" + "0300200520052903c80937038806200520052903c00937038006200541c0" + "096a20054180066a200541c0026a10302016200c29030022810137030020" + "17200d2903002282013703002018200e2903002283013703002019200f29" + "0300228401370300201a2010290300228501370300201b20112903002286" + "01370300200541106a2275208601370300200541186a2276208501370300" + "200541206a2277208401370300200541286a227820830137030020054130" + "6a2279208201370300200541386a227a208101370300200520052903c809" + "22810137038806200520052903c009228201370380062005208201370300" + "2005208101370308200541f8066a22062020290300370300200541f0066a" + "22072021290300370300200541e8066a22082028290300370300200541e0" + "066a22092029290300370300200541d8066a220a202a2903003703002005" + "41d0066a220b202b2903003703002005202c2903003703c8062005200129" + "03c0023703c006200541c0066a202d2003102f200541c0096a200541c005" + "6a200541c0066a10302027200c2903003703002026200d29030037030020" + "25200e2903003703002024200f2903003703002023201029030037030020" + "222011290300370300200520052903c8093703c805200520052903c00937" + "03c005200541c0096a200541c0066a20054180036a10302006200c290300" + "2281013703002007200d2903002282013703002008200e29030022830137" + "03002009200f290300228401370300200a2010290300228501370300200b" + "2011290300228601370300201b208601370300201a208501370300201920" + "840137030020182083013703002017208201370300201620810137030020" + "0520052903c8092281013703c806200520052903c0092282013703c00620" + "052082013703800620052081013703880620054180066a200541c0066a20" + "0541800b6a102f2006201229030037030020072013290300370300200820" + "1429030037030020092015290300370300200a201c290300370300200b20" + "1d2903003703002005201e2903003703c806200520012903403703c00620" + "0541c0066a201f2002102f200541c0096a200541c0056a200541c0066a10" + "302027200c2903003703002026200d2903003703002025200e2903003703" + "002024200f29030037030020232010290300370300202220112903003703" + "00200520052903c8093703c805200520052903c0093703c005200541c009" + "6a20054180066a200541c0066a10302016200c2903002281013703002017" + "200d2903002282013703002018200e2903002283013703002019200f2903" + "00228401370300201a2010290300228501370300201b2011290300228601" + "370300200541d0006a227b208601370300200541d8006a227c2085013703" + "00200541e0006a227d208401370300200541e8006a227e20830137030020" + "0541f0006a227f208201370300200541f8006a2280012081013703002005" + "20052903c80922810137038806200520052903c009228201370380062005" + "2082013703402005208101370348200541b8076a221c200241386a222829" + "0300370300200541b0076a221d200241306a2229290300370300200541a8" + "076a221e200241286a222a290300370300200541a0076a221f200241206a" + "222b29030037030020054198076a2220200241186a222c29030037030020" + "054190076a2221200241106a222d2903003703002005200241086a224e29" + "030037038807200520022903003703800720054180076a20022004103020" + "06206e2903003703002007206f2903003703002008207029030037030020" + "092071290300370300200a2072290300370300200b207329030037030020" + "0520052903c8043703c806200520052903c0043703c006200541c0066a20" + "0541c0046a20054180076a102f200541d80b6a2214200a29030037030020" + "0541d00b6a2215200b290300370300200520052903c8063703c80b200520" + "052903c0063703c00b200541c00b6a20052903c00220052903c802204129" + "0300204229030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42dd" + "b0858ce8b691a8b87f42a9c0c689aece93b230102d20054198086a221220" + "0629030037030020054190086a2213200729030037030020052008290300" + "37038808200520092903003703800820054180086a204329030020442903" + "002045290300204629030042c7faf3c3ed82a3903c428d95c7c396d2dac0" + "977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2010201429" + "030022810137030020112015290300228201370300200f20052903800822" + "8301370300200d2013290300228401370300200e20052903880822850137" + "0300200c2012290300228601370300200520052903c80b2287013703c809" + "200520052903c00b2288013703c009200620860137030020072084013703" + "0020082085013703002009208301370300200a208101370300200b208201" + "37030020052087013703c80620052088013703c0062014200a2903003703" + "002015200b290300370300200520052903c8063703c80b200520052903c0" + "063703c00b200541c00b6a20052903800322810120052903880322820120" + "61290300228301206029030022840142c7faf3c3ed82a3903c428d95c7c3" + "96d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20" + "122006290300370300201320072903003703002005200829030037038808" + "200520092903003703800820054180086a205f290300228501205e290300" + "228601205d290300228701205c29030022880142c7faf3c3ed82a3903c42" + "8d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b2" + "30102d2010201429030022890137030020112015290300228a0137030020" + "0f200529038008228b01370300200d2013290300228c01370300200e2005" + "29038808228d01370300200c2012290300228e01370300200520052903c8" + "0b228f013703c809200520052903c00b2290013703c0092006208e013703" + "002007208c013703002008208d013703002009208b01370300200a208901" + "370300200b208a013703002005208f013703c80620052090013703c00620" + "162054290300370300201720532903003703002018205229030037030020" + "192051290300370300201a2050290300370300201b204f29030037030020" + "05205529030037038806200520012903c0013703800620054180066a2074" + "2003102f200541c0096a200541c0056a20054180066a10302027200c2903" + "003703002026200d2903003703002025200e2903003703002024200f2903" + "003703002023201029030037030020222011290300370300200520052903" + "c8093703c805200520052903c0093703c005200541c0096a200541c0066a" + "20054180066a10302006200c2903003703002007200d2903003703002008" + "200e2903003703002009200f290300370300200a2010290300370300200b" + "2011290300370300200520052903c8093703c806200520052903c0093703" + "c0062021203f2903003703002020203d290300370300201f203b29030037" + "0300201e2039290300370300201d2037290300370300201c203529030037" + "030020052001290380013703800720052040290300370388072005418007" + "6a20054180016a2047103020342006290300370300203620072903003703" + "0020382008290300370300203a2009290300370300203c200a2903003703" + "00203e200b290300370300200541d0076a200441106a2903003703002005" + "41d8076a200441186a290300370300200541e0076a200441206a29030037" + "0300200541e8076a200441286a290300370300200541f0076a200441306a" + "290300370300200541f8076a200441386a290300370300200520052903c8" + "0637038801200520052903c00637038001200520042903003703c0072005" + "200441086a2903003703c807200541c0076a2004200310302006201c2903" + "003703002007201d2903003703002008201e2903003703002009201f2903" + "00370300200a2020290300370300200b2021290300370300200520052903" + "88073703c80620052005290380073703c006200541c0066a20054180076a" + "200541c0076a102f2014200a2903003703002015200b2903003703002005" + "20052903c8063703c80b200520052903c0063703c00b200541c00b6a2081" + "0120820120830120840142c7faf3c3ed82a3903c428d95c7c396d2dac097" + "7f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d201220062903" + "003703002013200729030037030020052008290300370388082005200929" + "03003703800820054180086a20850120860120870120880142c7faf3c3ed" + "82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c6" + "89aece93b230102d20102014290300228101370300201120152903002282" + "01370300200f200529038008228301370300200d20132903002284013703" + "00200e200529038808228501370300200c20122903002286013703002005" + "20052903c80b2287013703c809200520052903c00b2288013703c0092006" + "208601370300200720840137030020082085013703002009208301370300" + "200a208101370300200b20820137030020052087013703c8062005208801" + "3703c0062014200a2903003703002015200b290300370300200520052903" + "c8063703c80b200520052903c0063703c00b200541c00b6a20052903c003" + "22810120052903c8032282012067290300228301206629030022840142c7" + "faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f" + "42a9c0c689aece93b230102d201220062903003703002013200729030037" + "03002005200829030037038808200520092903003703800820054180086a" + "206529030022850120642903002286012063290300228701206229030022" + "880142c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b6" + "91a8b87f42a9c0c689aece93b230102d2010201429030022890137030020" + "112015290300228a01370300200f200529038008228b01370300200d2013" + "290300228c01370300200e200529038808228d01370300200c2012290300" + "228e01370300200520052903c80b228f013703c809200520052903c00b22" + "90013703c0092006208e013703002007208c013703002008208d01370300" + "2009208b01370300200a208901370300200b208a013703002005208f0137" + "03c80620052090013703c006201620062903003703002017200729030037" + "03002018200829030037030020192009290300370300201a200a29030037" + "0300201b200b290300370300200520052903c80637038806200520052903" + "c0063703800620054180066a200541c0066a200541800b6a102f20062033" + "290300370300200720322903003703002008203129030037030020092030" + "290300370300200a202f290300370300200b202e29030037030020052005" + "2903c8013703c806200520052903c0013703c006200541c0066a200541c0" + "016a2002102f200541c0096a200541c0056a200541c0066a10302027200c" + "2903003703002026200d2903003703002025200e2903003703002024200f" + "290300370300202320102903003703002022201129030037030020052005" + "2903c8093703c805200520052903c0093703c005200541c0096a20054180" + "066a200541c0066a10302016200c2903002289013703002017200d290300" + "228a013703002018200e290300228b013703002019200f290300228c0137" + "0300201a2010290300228d01370300201b2011290300228e01370300202e" + "208e01370300202f208d013703002030208c013703002031208b01370300" + "2032208a013703002033208901370300200520052903c809228901370388" + "06200520052903c009228a01370380062005208a013703c0012005208901" + "3703c8012006205629030037030020072057290300370300200820582903" + "0037030020092059290300370300200a205a290300370300200b205b2903" + "0037030020052005290388023703c80620052005290380023703c0062005" + "41c0066a20054180026a2004102f200541c0096a200541c0056a200541c0" + "066a10302027200c2903003703002026200d2903003703002025200e2903" + "003703002024200f29030037030020232010290300370300202220112903" + "00370300201b200b290300370300201a200a290300370300201920092903" + "003703002018200829030037030020172007290300370300201620062903" + "00370300200520052903c8093703c805200520052903c0093703c0052005" + "20052903c00637038006200520052903c8063703880620054180066a2005" + "41c0066a200541800b6a102f201c2028290300370300201d202929030037" + "0300201e202a290300370300201f202b2903003703002020202c29030037" + "03002021202d2903003703002005204e2903003703880720052002290300" + "3703800720054180076a2002200310302006206829030037030020072069" + "2903003703002008206a2903003703002009206b290300370300200a206c" + "290300370300200b206d29030037030020052005290388043703c8062005" + "2005290380043703c006200541c0066a20054180046a20054180076a102f" + "2014200a2903003703002015200b290300370300200520052903c8063703" + "c80b200520052903c0063703c00b200541c00b6a20052903c00220052903" + "c8022041290300204229030042c7faf3c3ed82a3903c428d95c7c396d2da" + "c0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20122006" + "290300370300201320072903003703002005200829030037038808200520" + "092903003703800820054180086a20432903002044290300204529030020" + "4629030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858c" + "e8b691a8b87f42a9c0c689aece93b230102d201020142903002289013703" + "0020112015290300228a01370300200f200529038008228b01370300200d" + "2013290300228c01370300200e200529038808228d01370300200c201229" + "0300228e01370300200520052903c80b228f013703c809200520052903c0" + "0b2290013703c0092006208e013703002007208c013703002008208d0137" + "03002009208b01370300200a208901370300200b208a013703002005208f" + "013703c80620052090013703c0062014200a2903003703002015200b2903" + "00370300200520052903c8063703c80b200520052903c0063703c00b2005" + "41c00b6a20810120820120830120840142c7faf3c3ed82a3903c428d95c7" + "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d" + "201220062903003703002013200729030037030020052008290300370388" + "08200520092903003703800820054180086a208501208601208701208801" + "42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8" + "b87f42a9c0c689aece93b230102d20102014290300228101370300201120" + "15290300228201370300200f200529038008228301370300200d20132903" + "00228401370300200e200529038808228501370300200c20122903002286" + "01370300200520052903c80b2287013703c809200520052903c00b228801" + "3703c0092006208601370300200720840137030020082085013703002009" + "208301370300200a208101370300200b20820137030020052087013703c8" + "0620052088013703c006200541c0096a20054180066a200541c0066a1030" + "2016200c2903003703002017200d2903003703002018200e290300370300" + "2019200f290300370300201a2010290300370300201b2011290300370300" + "200520052903c80937038806200520052903c009370380062021202d2903" + "003703002020202c290300370300201f202b290300370300201e202a2903" + "00370300201d2029290300370300201c2028290300370300200520022903" + "00370380072005204e2903003703880720054180076a2002200410302005" + "41c0096a20054180076a20031030201c200c290300370300201d200d2903" + "00370300201e200e290300370300201f200f290300370300202020102903" + "0037030020212011290300370300200b204d290300370300200a204c2903" + "003703002009204b2903003703002008204a290300370300200720492903" + "0037030020062048290300370300200520052903c8093703880720052005" + "2903c0093703800720052005290380053703c00620052005290388053703" + "c806200541c0066a20054180056a20054180076a102f2014200a29030037" + "03002015200b290300370300200520052903c8063703c80b200520052903" + "c0063703c00b200541c00b6a20052903c00520052903c805202229030020" + "2329030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858c" + "e8b691a8b87f42a9c0c689aece93b230102d201220062903003703002013" + "200729030037030020052008290300370388082005200929030037038008" + "20054180086a202429030020252903002026290300202729030042c7faf3" + "c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9" + "c0c689aece93b230102d2010201429030022810137030020112015290300" + "228201370300200f200529038008228301370300200d2013290300228401" + "370300200e200529038808228501370300200c2012290300228601370300" + "200520052903c80b2287013703c809200520052903c00b2288013703c009" + "200620860137030020072084013703002008208501370300200920830137" + "0300200a208101370300200b20820137030020052087013703c806200520" + "88013703c006200541b8086a207a290300370300200541b0086a20792903" + "00370300200541a8086a2078290300370300200541a0086a207729030037" + "030020122076290300370300201320752903003703002005200529030837" + "0388082005200529030037038008200541c8086a20052903483703002005" + "41d0086a207b290300370300200541d8086a207c290300370300200541e0" + "086a207d290300370300200541e8086a207e290300370300200541f0086a" + "207f290300370300200541f8086a20800129030037030020052005290340" + "3703c008200541b8096a2034290300370300200541b0096a203629030037" + "0300200541a8096a2038290300370300200541a0096a203a290300370300" + "20054198096a203c29030037030020054190096a203e2903003703002005" + "4188096a200529038801370300200520052903800137038009200c203329" + "0300370300200d2032290300370300200e2031290300370300200f203029" + "03003703002010202f2903003703002011202e2903003703002005200529" + "03c8013703c809200520052903c0013703c009200541880a6a2005290388" + "06370300200541900a6a201b290300370300200541980a6a201a29030037" + "0300200541a00a6a2019290300370300200541a80a6a2018290300370300" + "200541b00a6a2017290300370300200541b80a6a20162903003703002005" + "2005290380063703800a200541f80a6a2006290300370300200541f00a6a" + "2007290300370300200541e80a6a2008290300370300200541e00a6a2009" + "290300370300200541d80a6a200a290300370300200541d00a6a200b2903" + "00370300200541c80a6a20052903c806370300200520052903c0063703c0" + "0a200020054180086a41c001104c41c0016a200541c0096a41c001104c1a" + "200541e00b6a24000ba21d02297f0d7e23004180066b2203240020034180" + "046a20014180016a22162002102f20034198036a2204200141186a220c29" + "030037030020034190036a2205200141106a220d29030037030020032001" + "41086a220f29030037038803200320012903003703800320034180036a20" + "032903800420032903880420032903900420034198046a220929030042c7" + "faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f" + "42a9c0c689aece93b230102d200341d8036a2206200141386a2210290300" + "370300200341d0036a2207200141306a2211290300370300200320014128" + "6a22122903003703c8032003200141206a22172903003703c003200341c0" + "036a20032903a004200341a8046a220a29030020032903b004200341b804" + "6a220b29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0" + "858ce8b691a8b87f42a9c0c689aece93b230102d200341186a220e200429" + "0300370300200341106a22082005290300370300200341206a2213200329" + "03c003370300200341286a221420032903c803370300200341306a221520" + "07290300370300200341386a221820062903003703002003200329038803" + "370308200320032903800337030020034180046a2016200241406b221f10" + "2f2004200141d8006a22202903003703002005200141d0006a2221290300" + "3703002003200141c8006a22222903003703880320032001290340370380" + "0320034180036a2003290380042003290388042003290390042009290300" + "42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8" + "b87f42a9c0c689aece93b230102d2006200141f8006a2223290300370300" + "2007200141f0006a22242903003703002003200141e8006a222529030037" + "03c8032003200141e0006a22262903003703c003200341c0036a20032903" + "a004200a29030020032903b004200b29030042c7faf3c3ed82a3903c428d" + "95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230" + "102d200341d8006a22192004290300370300200341d0006a221a20052903" + "00370300200341e0006a221b20032903c003370300200341e8006a221c20" + "032903c803370300200341f0006a221d2007290300370300200341f8006a" + "221e20062903003703002003200329038803370348200320032903800337" + "0340200341f8046a2018290300370300200341f0046a2015290300370300" + "200341e8046a2014290300370300200341e0046a20132903003703002003" + "41d8046a200e290300370300200341d0046a200829030037030020032003" + "2903083703c804200320032903003703c004200341c0046a20032003102f" + "200341b8056a201e290300370300200341b0056a201d2903003703002003" + "41a8056a201c290300370300200341a0056a201b29030037030020034198" + "056a201929030037030020034190056a201a290300370300200320032903" + "4837038805200320032903403703800520034180056a200341406b200341" + "406b102f20034180016a2003200341c0046a102f200341c0016a20012003" + "41c0046a102f20034180046a201620034180056a102f200341c0036a2003" + "4180046a20034180016a103020034180046a200341c0016a200341c0016a" + "1030200341d8026a220e2006290300370300200341d0026a220820072903" + "00370300200320032903c8033703c802200320032903c0033703c0022003" + "41c0026a200329038004200329038804200329039004200929030042c7fa" + "f3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42" + "a9c0c689aece93b230102d2004200341f8036a2213290300370300200520" + "0341f0036a22142903003703002003200341e8036a221529030037038803" + "200320032903e0033703800320034180036a20032903a004200a29030020" + "032903b004200b29030042c7faf3c3ed82a3903c428d95c7c396d2dac097" + "7f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20034198026a" + "2218200e29030037030020034190026a22272008290300370300200341a8" + "026a2228200329038803370300200341b0026a2229200529030037030020" + "0341b8026a222a2004290300370300200320032903c80237038802200320" + "032903c0023703800220032003290380033703a00220034180046a200320" + "034180026a102f2010200b2903003703002011200341b0046a2210290300" + "3703002012200a2903003703002017200341a0046a222b29030037030020" + "0c2009290300370300200d20034190046a2211290300370300200f200329" + "03880437030020012003290380043703002004200341d8016a2903003703" + "002005200341d0016a290300370300200320032903c80137038803200320" + "032903c0013703800320034180036a200329038002200329038802202729" + "0300201829030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42dd" + "b0858ce8b691a8b87f42a9c0c689aece93b230102d2006200341f8016a29" + "03003703002007200341f0016a2903003703002003200341e8016a290300" + "3703c803200320032903e0013703c003200341c0036a20032903a0022028" + "2903002029290300202a29030042c7faf3c3ed82a3903c428d95c7c396d2" + "dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200920" + "0429030037030020112005290300370300200a20032903c8033703002010" + "2007290300370300200b2006290300370300200320032903880337038804" + "200320032903800337038004200320032903c0033703a004200341c0036a" + "200341406b20034180046a102f20034180046a20034180016a200141406b" + "102f200341f8056a220c2006290300370300200341f0056a220d20072903" + "00370300200320032903c8033703e805200320032903c0033703e0052003" + "41e0056a200329038004200329038804200329039004200929030042c7fa" + "f3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42" + "a9c0c689aece93b230102d200e2013290300370300200820142903003703" + "00200320152903003703c802200320032903e0033703c002200341c0026a" + "20032903a004200a29030020032903b004200b29030042c7faf3c3ed82a3" + "903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689ae" + "ce93b230102d2004200c2903003703002005200d290300370300200341a0" + "036a221720032903c002370300200341a8036a220f20032903c802370300" + "200341b0036a22122008290300370300200341b8036a2208200e29030037" + "0300200320032903e80537038803200320032903e0053703800320232008" + "290300370300202420122903003703002025200f29030037030020262017" + "290300370300202020042903003703002021200529030037030020222003" + "29038803370300200120032903800337034020034180046a201620034180" + "016a102f200141b8016a200b290300370300200141b0016a201029030037" + "0300200141a8016a200a290300370300200141a0016a202b290300370300" + "20014198016a200929030037030020014190016a20112903003703002001" + "4188016a2003290388043703002001200329038004370380012003420037" + "03f802200342003703f002200342003703e802200342013703e002200342" + "003703d802200342003703d002200342003703c802200342093703c00220" + "0341c0036a200341406b2002102f20034180046a2003201f102f200341d8" + "056a22012006290300370300200341d0056a220620072903003703002003" + "20032903c8033703c805200320032903c0033703c005200341c0056a2003" + "29038004200329038804200329039004200929030042c7faf3c3ed82a390" + "3c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece" + "93b230102d200c2013290300370300200d20142903003703002003201529" + "03003703e805200320032903e0033703e005200341e0056a20032903a004" + "200a29030020032903b004200b29030042c7faf3c3ed82a3903c428d95c7" + "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d" + "2004200129030037030020052006290300370300200f20032903e8053703" + "002012200d2903003703002008200c290300370300200320032903c80537" + "038803200320032903c00537038003200320032903e0053703a003200341" + "80046a200341c0026a20034180036a102f201e2903002136201d29030021" + "34201c290300212d201b2903002135201a29030022302003290340223184" + "201929030022382003290348223284844200520440427f4200427f420020" + "3142788342c7faf3c3ed82a3903c561b222e202e203254ad7d202e20327d" + "222e42f3eab8bce9ada5bfe8007d2237202e54ad7c42017c223320307d22" + "2f42a4cffaf397c9eed7c7007d222e202f54ad2030203356ad7d427f511b" + "20387d42a9c0c689aece93b2307c213342c7faf3c3ed82a3903c20317d21" + "2f0b4200213042002131420021322034203584202d203684844200520440" + "427f4200427f4200203542788342c7faf3c3ed82a3903c561b222c202c20" + "2d54ad7d202c202d7d222d42f3eab8bce9ada5bfe8007d2230202d54ad7c" + "42017c222d20347d222c42a4cffaf397c9eed7c7007d2231202c54ad202d" + "203454ad7d427f511b20367d42a9c0c689aece93b2307c213242c7faf3c3" + "ed82a3903c20357d212c0b20002003290380043703002000200329030037" + "0340200041086a200329038804370300200041c8006a2003290308370300" + "200041386a200341b8046a290300370300200041306a200341b0046a2903" + "00370300200041286a200341a8046a290300370300200041206a200341a0" + "046a290300370300200041186a20034198046a290300370300200041106a" + "20034190046a290300370300200041d0006a200341106a29030037030020" + "0041d8006a200341186a290300370300200041e0006a200341206a290300" + "370300200041e8006a200341286a290300370300200041f0006a20034130" + "6a290300370300200041f8006a200341386a290300370300200020323703" + "b801200020313703b001200020303703a8012000202c3703a00120002033" + "370398012000202e3703900120002037370388012000202f370380012003" + "4180066a24000b4201047f412021020240034020002d0000220320012d00" + "002204460440200041016a2100200141016a2101200241016b22020d010c" + "020b0b200320046b21050b20050b8a0301047f0240200141104904402000" + "21020c010b02402000410020006b41037122046a220320004d0d00200021" + "0220040440200421050340200241003a0000200241016a2102200541016b" + "22050d000b0b200441016b4107490d000340200241003a0000200241076a" + "41003a0000200241066a41003a0000200241056a41003a0000200241046a" + "41003a0000200241036a41003a0000200241026a41003a0000200241016a" + "41003a0000200241086a22022003470d000b0b2003200120046b2201417c" + "716a220220034b0440034020034100360200200341046a22032002490d00" + "0b0b200141037121010b02402002200120026a22054f0d00200141016b21" + "042001410771220304400340200241003a0000200241016a210220034101" + "6b22030d000b0b20044107490d000340200241003a0000200241076a4100" + "3a0000200241066a41003a0000200241056a41003a0000200241046a4100" + "3a0000200241036a41003a0000200241026a41003a0000200241016a4100" + "3a0000200241086a22022005470d000b0b20000b940501087f0240200241" + "10490440200021030c010b02402000410020006b41037122066a22052000" + "4d0d00200641016b21082000210320012104200604402006210703402003" + "20042d00003a0000200441016a2104200341016a2103200741016b22070d" + "000b0b20084107490d000340200320042d00003a0000200341016a200441" + "016a2d00003a0000200341026a200441026a2d00003a0000200341036a20" + "0441036a2d00003a0000200341046a200441046a2d00003a000020034105" + "6a200441056a2d00003a0000200341066a200441066a2d00003a00002003" + "41076a200441076a2d00003a0000200441086a2104200341086a22032005" + "470d000b0b2005200220066b2207417c7122086a21030240200120066a22" + "04410371450440200320054d0d0120042101034020052001280200360200" + "200141046a2101200541046a22052003490d000b0c010b200320054d0d00" + "2004410374220241187121062004417c71220941046a2101410020026b41" + "1871210a2009280200210203402005200220067620012802002202200a74" + "72360200200141046a2101200541046a22052003490d000b0b2007410371" + "2102200420086a21010b02402003200220036a22054f0d00200241016b21" + "072002410771220404400340200320012d00003a0000200141016a210120" + "0341016a2103200441016b22040d000b0b20074107490d00034020032001" + "2d00003a0000200341016a200141016a2d00003a0000200341026a200141" + "026a2d00003a0000200341036a200141036a2d00003a0000200341046a20" + "0141046a2d00003a0000200341056a200141056a2d00003a000020034106" + "6a200141066a2d00003a0000200341076a200141076a2d00003a00002001" + "41086a2101200341086a22032005470d000b0b20000b6201047e20002002" + "42ffffffff0f832203200142ffffffff0f8322047e220520024220882202" + "20047e22042003200142208822017e7c22034220867c2206370300200020" + "05200656ad200120027e2003200454ad4220862003422088847c7c370308" + "0b5601017e0240200341c000714504402003450d012002410020036b413f" + "71ad8620012003413f71ad220488842101200220048821020c010b200220" + "03413f71ad882101420021020b20002001370300200020023703080b5a01" + "027e420121020240200141c000714504402001450d0142002001413f71ad" + "2202864201410020016b413f71ad88842103420120028621020c010b4201" + "2001413f71ad862103420021020b20002002370300200020033703080b0b" + "e1250100418080c0000bd725307830306165613865396338336337336437" + "343033363932336465316234613636643138353437643538656565346561" + "6366656537303233356564323931393534636361706163697479206f7665" + "72666c6f77004200100011000000010000000000000063616c6c65642060" + "4f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e656020" + "76616c7565696e646578206f7574206f6620626f756e64733a2074686520" + "6c656e20697320206275742074686520696e646578206973200000008f00" + "100020000000af001000120000003a2000000100000000000000d4001000" + "020000003030303130323033303430353036303730383039313031313132" + "313331343135313631373138313932303231323232333234323532363237" + "323832393330333133323333333433353336333733383339343034313432" + "343334343435343634373438343935303531353235333534353535363537" + "353835393630363136323633363436353636363736383639373037313732" + "373337343735373637373738373938303831383238333834383538363837" + "38383839393039313932393339343935393639373938393972616e676520" + "737461727420696e64657820206f7574206f662072616e676520666f7220" + "736c696365206f66206c656e67746820b001100012000000c20110002200" + "000072616e676520656e6420696e64657820f401100010000000c2011000" + "22000000736c69636520696e646578207374617274732061742020627574" + "20656e6473206174200014021000160000002a0210000d00000054726965" + "6420746f20736872696e6b20746f2061206c617267657220636170616369" + "74794802100024000000f40a10004c000000b3020000090000002f686f6d" + "652f6f706964736b6f706e79692f2e636172676f2f72656769737472792f" + "7372632f696e6465782e6372617465732e696f2d31393439636638633662" + "3562353537662f6e756d2d626967696e742d302e342e362f7372632f6269" + "6775696e742e72732f686f6d652f6f706964736b6f706e79692f2e636172" + "676f2f72656769737472792f7372632f696e6465782e6372617465732e69" + "6f2d313934396366386336623562353537662f6e756d2d626967696e742d" + "302e342e362f7372632f62696775696e742f6164646974696f6e2e727300" + "0000ea0210006f000000890000001b000000a80c10006f00000057000000" + "09000000a80c10006f000000a3000000090000008402100066000000ad00" + "000013000000a80c10006f000000c40000001f000000a80c10006f000000" + "150100000e000000a80c10006f000000160100000e000000a80c10006f00" + "00001a0100000f000000a80c10006f000000510100000c000000a80c1000" + "6f0000002001000021000000a80c10006f0000002101000018000000a80c" + "10006f000000420100003c000000040c10006e0000006d0200000d000000" + "040c10006e00000066020000110000002f686f6d652f6f706964736b6f70" + "6e79692f2e636172676f2f72656769737472792f7372632f696e6465782e" + "6372617465732e696f2d313934396366386336623562353537662f6e756d" + "2d626967696e742d302e342e362f7372632f62696775696e742f73686966" + "742e72733c0410006c0000001e0000001c0000003c0410006c0000002e00" + "0000120000003c0410006c00000028000000190000002f72757374632f34" + "656231363132353065333430633866343866363665326239323965663461" + "3562656437633138312f6c6962726172792f636f72652f7372632f736c69" + "63652f697465722e72732f686f6d652f6f706964736b6f706e79692f2e63" + "6172676f2f72656769737472792f7372632f696e6465782e637261746573" + "2e696f2d313934396366386336623562353537662f6865782d302e342e33" + "2f7372632f6c69622e7273000000260510005b000000c700000025000000" + "260510005b000000c7000000410000004e6f744d656d626572496e76616c" + "6964536c6963654c656e677468496e76616c696455353132456e636f6469" + "6e6700000000000067e6096a85ae67bb72f36e3c3af54fa57f520e518c68" + "059babd9831f19cde05bd80410004e000000f605000015000000496e7661" + "6c696420636f6d7072657373656420706f696e7420666c61670000000806" + "10001d0000002f686f6d652f6f706964736b6f706e79692f2e636172676f" + "2f72656769737472792f7372632f696e6465782e6372617465732e696f2d" + "313934396366386336623562353537662f7370312d76657269666965722d" + "342e312e332f7372632f636f6e7374616e74732e72730000300610006a00" + "00001f000000120000002f686f6d652f6f706964736b6f706e79692f2e63" + "6172676f2f72656769737472792f7372632f696e6465782e637261746573" + "2e696f2d313934396366386336623562353537662f7370312d7665726966" + "6965722d342e312e332f7372632f636f6e7665727465722e727300000000" + "00000100000001000000060000004661696c656420746f20636f6e766572" + "74207820627974657320746f20467100ac0610006a0000001f0000003700" + "00002f686f6d652f6f706964736b6f706e79692f2e636172676f2f726567" + "69737472792f7372632f696e6465782e6372617465732e696f2d31393439" + "6366386336623562353537662f7370312d76657269666965722d342e312e" + "332f7372632f67726f746831362f636f6e7665727465722e727300005807" + "100072000000290000003e00000058071000720000002a0000003d000000" + "58071000720000002b0000003e00000058071000720000002c0000003e00" + "000058071000720000002e0000002500000058071000720000002e000000" + "3200000058071000720000002e0000003f00000058071000720000002e00" + "00004c0000005807100072000000320000003f0000005807100072000000" + "330000000b0000002f686f6d652f6f706964736b6f706e79692f2e636172" + "676f2f72656769737472792f7372632f696e6465782e6372617465732e69" + "6f2d313934396366386336623562353537662f7370312d76657269666965" + "722d342e312e332f7372632f67726f746831362f7665726966792e727300" + "6c0810006f0000002d000000160000002f686f6d652f6f706964736b6f70" + "6e79692f2e636172676f2f72656769737472792f7372632f696e6465782e" + "6372617465732e696f2d313934396366386336623562353537662f737031" + "2d76657269666965722d342e312e332f7372632f67726f746831362f6d6f" + "642e7273ec0810006c0000006d00000044000000ad4d9aa7e302d9df4174" + "9d5507949d05dbea33fbb16c643b22f599a2be6df2e2e1a1575c2e494d36" + "13e95e43b622318d9225c820e46acd08e8c987b44051195bc967032fcbf7" + "76d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847" + "ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab998e" + "9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2" + "1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992" + "f6edc980d3486a83b99e6c876acec4d309746e28cd96fa8e01864daa8459" + "9384f354a62eabe81511aa8e3034cbd75d42e708aa4ed80303fb0e4fb90c" + "d0ff6e9092132b65c9ae2605f3ef5540d3a64503c84fe5e1d9ec6eb1bd3a" + "906bbc80830e8e5400000003ced6e0c13f353262ae2dbbe49ce6a0b67576" + "d38aaf5958564be7648356830ef7db611b8f696f28ffb6250c7ffac66efb" + "d638d97f0d6c843c23691c3af532c9e3a974086bde6c91267b201137cfe6" + "ee8cd50ff0a3da861e808503e7df4da87b8d00000000000000002f727573" + "74632f346562313631323530653334306338663438663636653262393239" + "656634613562656437633138312f6c6962726172792f616c6c6f632f7372" + "632f7261775f7665632e7273f40a10004c00000028020000110000002f72" + "7573742f646570732f646c6d616c6c6f632d302e322e372f7372632f646c" + "6d616c6c6f632e7273617373657274696f6e206661696c65643a20707369" + "7a65203e3d2073697a65202b206d696e5f6f7665726865616400500b1000" + "29000000a804000009000000617373657274696f6e206661696c65643a20" + "7073697a65203c3d2073697a65202b206d61785f6f766572686561640000" + "500b100029000000ae0400000d0000000000000004000000000000002f68" + "6f6d652f6f706964736b6f706e79692f2e636172676f2f72656769737472" + "792f7372632f696e6465782e6372617465732e696f2d3139343963663863" + "36623562353537662f6e756d2d626967696e742d302e342e362f7372632f" + "62696775696e742f636f6e766572742e72730000040c10006e000000f001" + "000016000000617474656d707420746f20646976696465206279207a6572" + "6f000000840c1000190000002f686f6d652f6f706964736b6f706e79692f" + "2e636172676f2f72656769737472792f7372632f696e6465782e63726174" + "65732e696f2d313934396366386336623562353537662f6e756d2d626967" + "696e742d302e342e362f7372632f62696775696e742f6469766973696f6e" + "2e727300a80c10006f00000070000000090000004f6e63652070616e6963" + "6b65642f686f6d652f6f706964736b6f706e79692f2e636172676f2f7265" + "6769737472792f7372632f696e6465782e6372617465732e696f2d313934" + "396366386336623562353537662f7370696e2d302e392e382f7372632f6f" + "6e63652e72730000350d10005d000000e60000002a0000004f6e63652070" + "726576696f75736c7920706f69736f6e656420627920612070616e69636b" + "65640000350d10005d0000004e010000250000002f72757374632f346562" + "313631323530653334306338663438663636653262393239656634613562" + "656437633138312f6c6962726172792f616c6c6f632f7372632f736c6963" + "652e72730000dc0d10004a000000a10000001900000063616c6c65642060" + "526573756c743a3a756e77726170282960206f6e20616e20604572726020" + "76616c75652f686f6d652f6f706964736b6f706e79692f2e636172676f2f" + "72656769737472792f7372632f696e6465782e6372617465732e696f2d31" + "3934396366386336623562353537662f7375627374726174652d626e2d73" + "756363696e63742d302e362e302d76342d72632e382f7372632f6669656c" + "64732f66702e72730000630e10007b000000e9020000230000004661696c" + "656420746f20636f6d707574652074686520696e7665727365206f662074" + "68652064697669736f722f686f6d652f6f706964736b6f706e79692f2e63" + "6172676f2f72656769737472792f7372632f696e6465782e637261746573" + "2e696f2d313934396366386336623562353537662f737562737472617465" + "2d626e2d73756363696e63742d302e362e302d76342d72632e382f737263" + "2f6669656c64732f6671322e72731c0f10007c000000430100000e000000" + "000000000100000001000000070000002f686f6d652f6f706964736b6f70" + "6e79692f2e636172676f2f72656769737472792f7372632f696e6465782e" + "6372617465732e696f2d313934396366386336623562353537662f737562" + "7374726174652d626e2d73756363696e63742d302e362e302d76342d7263" + "2e382f7372632f67726f7570732f6d6f642e7273b80f10007c000000b100" + "00002c000000556e61626c6520746f20636f6e7665727420473120746f20" + "416666696e654731b80f10007c0000000001000012000000b80f10007c00" + "00002001000012000000b80f10007c000000400100000d000000b80f1000" + "7c0000006b01000029000000010001000000030003000000030001000300" + "000300000000000100000300010000030000000003000100000003000300" + "00010000000300000300010001000000b80f10007c000000150300002600" + "0000b80f10007c0000001003000026000000b80f10007c00000008030000" + "2e000000b80f10007c000000020300002a000000b80f10007c0000009b03" + "000010000000b80f10007c0000009c03000010000000b80f10007c000000" + "8f03000014000000b80f10007c0000009203000018000000b80f10007c00" + "000095030000180000006d696c6c6572206c6f6f702063616e6e6f742070" + "726f64756365207a65726f00b80f10007c000000221100000a000000b80f" + "10007c000000191100002a000000b80f10007c0000001911000017000000" + "b80f10007c0000001a1100002e000000b80f10007c0000001a1100001b00" + "00002f686f6d652f6f706964736b6f706e79692f2e636172676f2f726567" + "69737472792f7372632f696e6465782e6372617465732e696f2d31393439" + "6366386336623562353537662f7375627374726174652d626e2d73756363" + "696e63742d302e362e302d76342d72632e382f7372632f6c69622e727300" + "0000e4111000750000003b0300000c000000e4111000750000003c030000" + "0c0000004e6f744f6e43757276654e6f74496e53756267726f7570496e76" + "616c6964496e7075744c656e677468000000120000001300000009000000" + "ad051000bf051000a40510000a0000000d000000120000007c1210008612" + "1000931210004d0970726f64756365727302086c616e6775616765010452" + "757374000c70726f6365737365642d6279010572757374631d312e38352e" + "31202834656231363132353020323032352d30332d31352900490f746172" + "6765745f6665617475726573042b0f6d757461626c652d676c6f62616c73" + "2b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d" + "756c746976616c7565"; + +extern std::string const ledgerSqnWasmHex = + "0061736d010000000108026000017f60000002160103656e760e6765745f6c65646765725f" + "73716e000003030201000503010002063e0a7f004180080b7f004180080b7f004180100b7f" + "004180100b7f00418090040b7f004180080b7f00418090040b7f00418080080b7f0041000b" + "7f0041010b07b0010d066d656d6f72790200115f5f7761736d5f63616c6c5f63746f727300" + "010666696e69736800020362756603000c5f5f64736f5f68616e646c6503010a5f5f646174" + "615f656e6403020b5f5f737461636b5f6c6f7703030c5f5f737461636b5f6869676803040d" + "5f5f676c6f62616c5f6261736503050b5f5f686561705f6261736503060a5f5f686561705f" + "656e6403070d5f5f6d656d6f72795f6261736503080c5f5f7461626c655f6261736503090a" + "150202000b1001017f100022004100200041044b1b0b007f0970726f647563657273010c70" + "726f6365737365642d62790105636c616e675f31392e312e352d776173692d73646b202868" + "747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a6563742061" + "62346235613264623538323935386166316565333038613739306366646234326264323437" + "32302900490f7461726765745f6665617475726573042b0f6d757461626c652d676c6f6261" + "6c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976" + "616c7565"; + +extern std::string const allHostFunctionsWasmHex = + "0061736d0100000001540c60047f7f7f7f017f60027f7f017f60037f7f7f017f60057f7f7f" + "7f7f017f6000017f60017f017f60037f7f7f0060037f7f7e017f60087f7f7f7f7f7f7f7f01" + "7f60067f7f7f7f7f7f017f60017f0060027f7f0002ae061a08686f73745f6c69620c676574" + "5f74785f6669656c64000208686f73745f6c69620974726163655f6e756d000708686f7374" + "5f6c6962057472616365000308686f73745f6c69620e6765745f6c65646765725f73716e00" + "0408686f73745f6c6962166765745f706172656e745f6c65646765725f74696d6500040868" + "6f73745f6c6962166765745f706172656e745f6c65646765725f68617368000108686f7374" + "5f6c69620d74726163655f6163636f756e74000008686f73745f6c6962136765745f74785f" + "6e65737465645f6669656c64000008686f73745f6c6962106765745f74785f61727261795f" + "6c656e000508686f73745f6c6962176765745f74785f6e65737465645f61727261795f6c65" + "6e000108686f73745f6c69621c6765745f63757272656e745f6c65646765725f6f626a5f66" + "69656c64000208686f73745f6c6962236765745f63757272656e745f6c65646765725f6f62" + "6a5f6e65737465645f6669656c64000008686f73745f6c6962206765745f63757272656e74" + "5f6c65646765725f6f626a5f61727261795f6c656e000508686f73745f6c6962276765745f" + "63757272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e0001" + "08686f73745f6c69620e6163636f756e745f6b65796c6574000008686f73745f6c69621063" + "616368655f6c65646765725f6f626a000208686f73745f6c6962146765745f6c6564676572" + "5f6f626a5f6669656c64000008686f73745f6c69621b6765745f6c65646765725f6f626a5f" + "6e65737465645f6669656c64000308686f73745f6c6962186765745f6c65646765725f6f62" + "6a5f61727261795f6c656e000108686f73745f6c69621f6765745f6c65646765725f6f626a" + "5f6e65737465645f61727261795f6c656e000208686f73745f6c69621163726564656e7469" + "616c5f6b65796c6574000808686f73745f6c69620d657363726f775f6b65796c6574000308" + "686f73745f6c69620d6f7261636c655f6b65796c6574000308686f73745f6c696213636f6d" + "707574655f7368613531325f68616c66000008686f73745f6c6962076765745f6e66740009" + "08686f73745f6c69620b7570646174655f64617461000103060506060a0b04050301001106" + "19037f01418080c0000b7f0041af99c0000b7f0041b099c0000b072e04066d656d6f727902" + "000666696e697368001e0a5f5f646174615f656e6403010b5f5f686561705f626173650302" + "0a801c051900200241094f0440000b20002002360204200020013602000b1900200241214f" + "0440000b20002002360204200020013602000b970101057f230041206b2201240020014118" + "6a22044100360200200141106a220542003703002001420037030802404181802020014108" + "6a4114100022034114470440024020034100480440200020033602040c010b2000417f3602" + "040b410121020c010b20002001290308370001200041116a2004280200360000200041096a" + "20052903003700000b200020023a0000200141206a24000b450020012d0000450440200020" + "01290001370000200041106a200141116a280000360000200041086a200141096a29000037" + "00000f0b418080c000410b20013402041001000bea1901097f230041b0036b22002400418b" + "80c000411b41004100410010021a41a680c000411941004100410010021a41e780c000412b" + "41004100410010021a027f02400240024002400240024002401003220141004a0440419281" + "c00041172001ad10011a1004220141004c0d0141a981c00041132001ad10011a200041c801" + "6a22034200370300200041c0016a22054200370300200041b8016a22044200370300200042" + "003703b001200041b0016a22064120100522014120470d0241bc81c0004113200641204101" + "10021a41cf81c000412041004100410010021a41dc82c000412e41004100410010021a2000" + "41a0016a410036020020004198016a42003703002000420037039001418180202000419001" + "6a22024114100022014114470d03418a83c00041142002411410061a200042003703704188" + "8018200041f0006a22024108100022014108470d04419e83c0004117420810011a41b583c0" + "00412820024108410110021a2000410036025041848008200041d0006a2202410410002201" + "4104470d0541dd83c000411520024104410110021a200041013b003c200342003703002005" + "420037030020044200370300200042003703b00102402000413c6a41022006412010072201" + "41004e044041f283c00041142001ad10011a200041306a20062001101b418684c000410d20" + "002802302000280234410110021a0c010b419384c00041292001ac10011a0b41bc84c00041" + "154183803c1008ac10011a41d184c00041134189803c1008ac10011a02402000413c6a4102" + "1009220141004e044041e484c00041142001ad10011a0c010b41f884c000412d2001ac1001" + "1a0b41a585c000412341004100410010021a41de86c000413341004100410010021a200042" + "0037037041828018200041f0006a22014108100a220241004c0d0620024108460440419187" + "c000412b420810011a41bc87c000412f20014108410110021a0c080b41eb87c000412f2002" + "ad10011a200041286a200041f0006a2002101a419a88c00041172000280228200028022c41" + "0110021a0c070b41bf82c000411d2001ac10011a419b7f0c070b419a82c00041252001ac10" + "011a419a7f0c060b41ef81c000412b2001ac10011a41997f0c050b41b486c000412a2001ac" + "10011a41b77e0c040b41f385c00041c1002001ac10011a41b67e0c030b41c885c000412b20" + "01ac10011a41b57e0c020b41b188c00041c5002002ac10011a0b200041a0016a4100360200" + "20004198016a4200370300200042003703900102404181802020004190016a22024114100a" + "220141004a044041f688c000411e2002411410061a0c010b419489c00041332001ac10011a" + "0b200041013b0050200041c8016a4200370300200041c0016a4200370300200041b8016a42" + "00370300200042003703b0010240200041d0006a4102200041b0016a22014120100b220241" + "004e044041c789c000411c2002ad10011a200041206a20012002101b41e389c00041152000" + "2802202000280224410110021a0c010b41f889c00041392002ac10011a0b41b18ac0004124" + "4183803c100cac10011a0240200041d0006a4102100d220141004e044041d58ac000411c20" + "01ad10011a0c010b41f18ac000413d2001ac10011a0b41ae8bc00041284100410041001002" + "1a41d68bc000412f41004100410010021a200041b0016a2202101c200041f0006a22012002" + "101d200041a8016a4200370300200041a0016a420037030020004198016a42003703002000" + "420037039001024002400240024002402001411420004190016a22024120100e2201412046" + "0440200241204100100f220441004a044041858cc00041232004ad10011a20004200370350" + "200441828018200041d0006a220141081010220241004c0d022002410846044041a88cc000" + "412a420810011a41d28cc000412e20014108410110021a0c060b41808dc000412e2002ad10" + "011a200041186a200041d0006a2002101a41ae8dc00041162000280218200028021c410110" + "021a0c050b41e68fc000413c2004ac10011a200041c8016a4200370300200041c0016a4200" + "370300200041b8016a4200370300200042003703b001410141828018200041b0016a412010" + "1022014100480d020c030b41ba92c000412e2001ac10011a41ef7c0c050b41c48dc000412b" + "2002ac10011a0c020b41a290c00041c1002001ac10011a0b200041013b00504101200041d0" + "006a4102200041b0016a412010112201410048044041e390c00041352001ac10011a0b4101" + "4183803c101222014100480440419891c00041322001ac10011a0b4101200041d0006a4102" + "10132201410048044041ca91c00041392001ac10011a0b418392c000413741004100410010" + "021a0c010b200041013b003c200041c8016a4200370300200041c0016a4200370300200041" + "b8016a4200370300200042003703b001024020042000413c6a4102200041b0016a22014120" + "1011220241004e044041ef8dc000411b2002ad10011a200041106a20012002101b418a8ec0" + "00411420002802102000280214410110021a0c010b419e8ec00041312002ac10011a0b41cf" + "8ec000412320044183803c1012ac10011a024020042000413c6a41021013220141004e0440" + "41f28ec000411b2001ad10011a0c010b418d8fc00041352001ac10011a0b41c28fc0004124" + "41004100410010021a0b41e892c000412f41004100410010021a200041b0016a2201101c20" + "00413c6a22042001101d200041e8006a4200370300200041e0006a4200370300200041d800" + "6a42003703002000420037035002400240024002400240024020044114200041d0006a2202" + "4120100e22014120460440419793c000410f20024120410110021a20004188016a42003703" + "0020004180016a4200370300200041f8006a42003703002000420037037002402004411420" + "04411441a693c0004109200041f0006a220141201014220241004a0440200041086a200120" + "02101b41ae93c00041122000280208200028020c410110021a0c010b41c093c000413c2002" + "ac10011a0b200041a8016a22084200370300200041a0016a2203420037030020004198016a" + "2205420037030020004200370390012000413c6a2202411441e80720004190016a22074120" + "101522014120470d0141fc93c000410e20074120410110021a200041c8016a420037030020" + "0041c0016a4200370300200041b8016a4200370300200042003703b00120024114412a2000" + "41b0016a22044120101622014120470d02418a94c000410e20044120410110021a419894c0" + "00412441004100410010021a419195c000412541004100410010021a20004188016a420037" + "030020004180016a4200370300200041f8006a42003703002000420037037041b695c00041" + "17200041f0006a22024120101722014120470d0341cd95c000410b41b695c0004117410110" + "021a41d895c000411120024120410110021a2004101c200041d0006a22062004101d200842" + "00370300200342003703002005420037030020004200370390010240200422032003410020" + "036b41037122026a22054f0d0020020440200221010340200341003a0000200341016a2103" + "200141016b22010d000b0b200241016b4107490d000340200341003a0000200341076a4100" + "3a0000200341066a41003a0000200341056a41003a0000200341046a41003a000020034103" + "6a41003a0000200341026a41003a0000200341016a41003a0000200341086a22032005470d" + "000b0b200541800220026b2201417c716a220320054b044003402005410036020020054104" + "6a22052003490d000b0b024020032001410371220120036a22024f0d002001220504400340" + "200341003a0000200341016a2103200541016b22050d000b0b200141016b4107490d000340" + "200341003a0000200341076a41003a0000200341066a41003a0000200341056a41003a0000" + "200341046a41003a0000200341036a41003a0000200341026a41003a0000200341016a4100" + "3a0000200341086a22032002470d000b0b0240200641142007412020044180021018220141" + "004a044041e995c00041102001ad10011a20014181024f0d0641f995c00041092004200141" + "0110021a0c010b418296c000412e2001ac10011a0b41b096c000411241c296c00041074101" + "100222014100480d0541c996c000411d2001ad10011a41e696c0004111422a10014100480d" + "0641f796c000411c420010011a419397c000411a41004100410010021a41ff97c000412941" + "004100410010021a41a898c00041281019220145044041d098c000412741a898c000412841" + "0110021a41f798c000411e41004100410010021a41bf80c000412841004100410010021a41" + "010c080b419599c000411a2001ac10011a41c37a0c070b41f494c000411d2001ac10011a41" + "8b7c0c060b41d894c000411c2001ac10011a41897c0c050b41bc94c000411c2001ac10011a" + "41887c0c040b41dd97c00041222001ac10011a41a77b0c030b000b41c797c00041162001ac" + "10011a41a57b0c010b41ad97c000411a42a47b10011a41a47b0b200041b0036a24000b0bb9" + "190100418080c0000baf196572726f725f636f64653d3d3d3d20484f53542046554e435449" + "4f4e532054455354203d3d3d54657374696e6720323620686f73742066756e6374696f6e73" + "535543434553533a20416c6c20686f73742066756e6374696f6e2074657374732070617373" + "6564212d2d2d2043617465676f727920313a204c6564676572204865616465722046756e63" + "74696f6e73202d2d2d4c65646765722073657175656e6365206e756d6265723a506172656e" + "74206c65646765722074696d653a506172656e74206c656467657220686173683a53554343" + "4553533a204c6564676572206865616465722066756e6374696f6e734552524f523a206765" + "745f706172656e745f6c65646765725f686173682077726f6e67206c656e6774683a455252" + "4f523a206765745f706172656e745f6c65646765725f74696d65206661696c65643a455252" + "4f523a206765745f6c65646765725f73716e206661696c65643a2d2d2d2043617465676f72" + "7920323a205472616e73616374696f6e20446174612046756e6374696f6e73202d2d2d5472" + "616e73616374696f6e204163636f756e743a5472616e73616374696f6e20466565206c656e" + "6774683a5472616e73616374696f6e20466565202873657269616c697a6564205852502061" + "6d6f756e74293a5472616e73616374696f6e2053657175656e63653a4e6573746564206669" + "656c64206c656e6774683a4e6573746564206669656c643a494e464f3a206765745f74785f" + "6e65737465645f6669656c64206e6f74206170706c696361626c653a5369676e6572732061" + "72726179206c656e6774683a4d656d6f73206172726179206c656e6774683a4e6573746564" + "206172726179206c656e6774683a494e464f3a206765745f74785f6e65737465645f617272" + "61795f6c656e206e6f74206170706c696361626c653a535543434553533a205472616e7361" + "6374696f6e20646174612066756e6374696f6e734552524f523a206765745f74785f666965" + "6c642853657175656e6365292077726f6e67206c656e6774683a4552524f523a206765745f" + "74785f6669656c6428466565292077726f6e67206c656e6774682028657870656374656420" + "3820627974657320666f7220585250293a4552524f523a206765745f74785f6669656c6428" + "4163636f756e74292077726f6e67206c656e6774683a2d2d2d2043617465676f727920333a" + "2043757272656e74204c6564676572204f626a6563742046756e6374696f6e73202d2d2d43" + "757272656e74206f626a6563742062616c616e6365206c656e677468202858525020616d6f" + "756e74293a43757272656e74206f626a6563742062616c616e6365202873657269616c697a" + "65642058525020616d6f756e74293a43757272656e74206f626a6563742062616c616e6365" + "206c656e67746820286e6f6e2d58525020616d6f756e74293a43757272656e74206f626a65" + "63742062616c616e63653a494e464f3a206765745f63757272656e745f6c65646765725f6f" + "626a5f6669656c642842616c616e636529206661696c656420286d61792062652065787065" + "63746564293a43757272656e74206c6564676572206f626a656374206163636f756e743a49" + "4e464f3a206765745f63757272656e745f6c65646765725f6f626a5f6669656c6428416363" + "6f756e7429206661696c65643a43757272656e74206e6573746564206669656c64206c656e" + "6774683a43757272656e74206e6573746564206669656c643a494e464f3a206765745f6375" + "7272656e745f6c65646765725f6f626a5f6e65737465645f6669656c64206e6f7420617070" + "6c696361626c653a43757272656e74206f626a656374205369676e65727320617272617920" + "6c656e6774683a43757272656e74206e6573746564206172726179206c656e6774683a494e" + "464f3a206765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f617272" + "61795f6c656e206e6f74206170706c696361626c653a535543434553533a2043757272656e" + "74206c6564676572206f626a6563742066756e6374696f6e732d2d2d2043617465676f7279" + "20343a20416e79204c6564676572204f626a6563742046756e6374696f6e73202d2d2d5375" + "636365737366756c6c7920636163686564206f626a65637420696e20736c6f743a43616368" + "6564206f626a6563742062616c616e6365206c656e677468202858525020616d6f756e7429" + "3a436163686564206f626a6563742062616c616e6365202873657269616c697a6564205852" + "5020616d6f756e74293a436163686564206f626a6563742062616c616e6365206c656e6774" + "6820286e6f6e2d58525020616d6f756e74293a436163686564206f626a6563742062616c61" + "6e63653a494e464f3a206765745f6c65646765725f6f626a5f6669656c642842616c616e63" + "6529206661696c65643a436163686564206e6573746564206669656c64206c656e6774683a" + "436163686564206e6573746564206669656c643a494e464f3a206765745f6c65646765725f" + "6f626a5f6e65737465645f6669656c64206e6f74206170706c696361626c653a4361636865" + "64206f626a656374205369676e657273206172726179206c656e6774683a43616368656420" + "6e6573746564206172726179206c656e6774683a494e464f3a206765745f6c65646765725f" + "6f626a5f6e65737465645f61727261795f6c656e206e6f74206170706c696361626c653a53" + "5543434553533a20416e79206c6564676572206f626a6563742066756e6374696f6e73494e" + "464f3a2063616368655f6c65646765725f6f626a206661696c656420286578706563746564" + "20776974682074657374206669787475726573293a494e464f3a206765745f6c6564676572" + "5f6f626a5f6669656c64206661696c656420617320657870656374656420286e6f20636163" + "686564206f626a656374293a494e464f3a206765745f6c65646765725f6f626a5f6e657374" + "65645f6669656c64206661696c65642061732065787065637465643a494e464f3a20676574" + "5f6c65646765725f6f626a5f61727261795f6c656e206661696c6564206173206578706563" + "7465643a494e464f3a206765745f6c65646765725f6f626a5f6e65737465645f6172726179" + "5f6c656e206661696c65642061732065787065637465643a535543434553533a20416e7920" + "6c6564676572206f626a6563742066756e6374696f6e732028696e74657266616365207465" + "73746564294552524f523a206163636f756e745f6b65796c6574206661696c656420666f72" + "2063616368696e6720746573743a2d2d2d2043617465676f727920353a204b65796c657420" + "47656e65726174696f6e2046756e6374696f6e73202d2d2d4163636f756e74206b65796c65" + "743a546573745479706543726564656e7469616c206b65796c65743a494e464f3a20637265" + "64656e7469616c5f6b65796c6574206661696c656420286578706563746564202d20696e74" + "657266616365206973737565293a457363726f77206b65796c65743a4f7261636c65206b65" + "796c65743a535543434553533a204b65796c65742067656e65726174696f6e2066756e6374" + "696f6e734552524f523a206f7261636c655f6b65796c6574206661696c65643a4552524f52" + "3a20657363726f775f6b65796c6574206661696c65643a4552524f523a206163636f756e74" + "5f6b65796c6574206661696c65643a2d2d2d2043617465676f727920363a205574696c6974" + "792046756e6374696f6e73202d2d2d48656c6c6f2c205852504c205741534d20776f726c64" + "21496e70757420646174613a5348413531322068616c6620686173683a4e46542064617461" + "206c656e6774683a4e465420646174613a494e464f3a206765745f6e6674206661696c6564" + "20286578706563746564202d206e6f2073756368204e4654293a5465737420747261636520" + "6d6573736167657061796c6f616454726163652066756e6374696f6e206279746573207772" + "697474656e3a54657374206e756d62657220747261636554726163655f6e756d2066756e63" + "74696f6e20737563636565646564535543434553533a205574696c6974792066756e637469" + "6f6e734552524f523a2074726163655f6e756d2829206661696c65643a4552524f523a2074" + "726163652829206661696c65643a4552524f523a20636f6d707574655f7368613531325f68" + "616c66206661696c65643a2d2d2d2043617465676f727920373a2044617461205570646174" + "652046756e6374696f6e73202d2d2d55706461746564206c656467657220656e7472792064" + "6174612066726f6d205741534d20746573745375636365737366756c6c7920757064617465" + "64206c656467657220656e74727920776974683a535543434553533a204461746120757064" + "6174652066756e6374696f6e734552524f523a207570646174655f64617461206661696c65" + "643a004d0970726f64756365727302086c616e6775616765010452757374000c70726f6365" + "737365642d6279010572757374631d312e38352e3120283465623136313235302032303235" + "2d30332d31352900490f7461726765745f6665617475726573042b0f6d757461626c652d67" + "6c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d75" + "6c746976616c7565"; + +extern std::string const deepRecursionHex = + "0061736d01000000013f0b60017f0060037f7f7f017f60027f7f017f60027f" + "7f0060000060037f7f7f006000017f60037e7f7f017f60047f7f7f7f017f60" + "017f017f60047f7f7f7f00032f2e0302040400030501030302020600030302" + "0700080301050202020404090202000a0a0102020403030300000a03010405" + "017001101005030100110619037f01418080c0000b7f0041b49ac0000b7f00" + "41c09ac0000b073905066d656d6f7279020005726563757200000972656375" + "7273697665000c0a5f5f646174615f656e6403010b5f5f686561705f626173" + "6503020915010041010b0f010a0b1e10171819262c1d1f2223240a927c2ea7" + "0704017f017e027f017e23808080800041e0006b2202248080808000200220" + "003602040240200041004c0d002001200128020041016a3602002000417f6a" + "20011080808080000b2002410236020c2002418480c0800036020820024201" + "37021420024181808080003602242002200241206a3602102002200241046a" + "3602202002410636022c2002419490c08000360228024041002d00c096c080" + "004103460d001082808080000b0240024002400240024041002903a89ac080" + "0022034200520d00024041002802b09ac0800022000d001083808080004100" + "2802b09ac0800021000b20002000280200220141016a3602002001417f4c0d" + "012000450d02200020002802002201417f6a36020020002903082103200141" + "01470d0020001084808080000b0240024002402003410029039896c0800051" + "0d0041002d00a496c08000210141012100410041013a00a496c08000200220" + "013a00382001450d012002420037025420024281808080c00037024c200241" + "bc91c08000360248200241386a200241c8006a108580808000000b02404100" + "2802a096c080002200417f460d00200041016a21000c020b419c92c0800041" + "2641e092c08000108680808000000b4100200337039896c080000b41002000" + "3602a096c080002002419896c0800036023041042100200241043a00382002" + "200241306a360240200241386a41c085c08000200241086a10878080800021" + "0120022d003821040240024020010d00420021034117200441ff0171764101" + "710d01200228023c220028020021010240200041046a280200220428020022" + "05450d002001200511808080800080808080000b024020042802042204450d" + "00200120041088808080000b2000410c108880808000410421000c010b2004" + "41ff01714104460d032002290338220642807e8321032006a721000b200228" + "023022012001280208417f6a2204360208024020040d00200141003a000c20" + "0142003703000b200041ff01714104470d03200241e0006a2480808080000f" + "0b000b418087c0800041de0041f487c08000108680808000000b2002410036" + "02582002410136024c2002418491c0800036024820024204370250200241c8" + "006a418c91c08000108980808000000b200220032000ad42ff018384370330" + "2002410236024c200241f48fc0800036024820024202370254200241828080" + "8000ad422086200241306aad843703402002418380808000ad422086200241" + "286aad843703382002200241386a360250200241c8006a418490c080001089" + "80808000000b2701017f200028020022002000411f7522027320026bad2000" + "417f73411f7620011091808080000bf10101027f23808080800041206b2200" + "248080808000024002400240024041002d00c096c080000e0400000301000b" + "410041023a00c096c0800041002d009096c080001a418008109c8080800022" + "01450d01410041033a00c096c08000410020013602b096c080004100428080" + "80808080013703a896c080004100420037039896c08000410041003a00b896" + "c08000410041003602b496c08000410041003a00a496c08000410041003602" + "a096c080000b200041206a2480808080000f0b000b20004100360218200041" + "0136020c200041bc93c0800036020820004204370210200041086a418c92c0" + "8000108980808000000bf90103027f037e017f23808080800041206b220024" + "808080800041002d009096c080001a0240024002404120109c808080002201" + "450d0020014102360210200142818080801037030041002903d096c0800021" + "0203402002427f510d024100200242017c220341002903d096c08000220420" + "0420025122051b3703d096c08000200421022005450d000b410020033703a8" + "9ac080002001200337030841002802b09ac08000450d022000410036021820" + "00410136020c200041c484c0800036020820004204370210200041086a419c" + "85c080001089808080000b000b109b80808000000b410020013602b09ac080" + "00200041206a2480808080000b5b01027f024020002802104101470d002000" + "280214220141003a000020002802182202450d00200120021088808080000b" + "02402000417f460d00200020002802042201417f6a36020420014101470d00" + "200041201088808080000b0b3a01017f23808080800041106b220224808080" + "8000200241ac85c0800036020c20022000360208200241086a2002410c6a20" + "01109680808000000b6a01017f23808080800041306b220324808080800020" + "03200136020c2003200036020820034101360214200341d488c08000360210" + "2003420137021c2003418380808000ad422086200341086aad843703282003" + "200341286a360218200341106a2002108980808000000bbf05010a7f238080" + "80800041306b2203248080808000200341033a002c2003412036021c410021" + "04200341003602282003200136022420032000360220200341003602142003" + "410036020c02400240024002400240200228021022050d00200228020c2200" + "450d0120022802082101200041037421062000417f6a41ffffffff01714101" + "6a21042002280200210003400240200041046a2802002207450d0020032802" + "2020002802002007200328022428020c11818080800080808080000d040b20" + "012802002003410c6a200128020411828080800080808080000d0320014108" + "6a2101200041086a2100200641786a22060d000c020b0b2002280214220145" + "0d00200141057421082001417f6a41ffffff3f7141016a2104200228020821" + "09200228020021004100210603400240200041046a2802002201450d002003" + "28022020002802002001200328022428020c11818080800080808080000d03" + "0b2003200520066a220141106a28020036021c20032001411c6a2d00003a00" + "2c2003200141186a2802003602282001410c6a28020021074100210a410021" + "0b024002400240200141086a2802000e03010002010b2007410374210c4100" + "210b2009200c6a220c2802040d01200c28020021070b4101210b0b20032007" + "3602102003200b36020c200141046a28020021070240024002402001280200" + "0e03010002010b2007410374210b2009200b6a220b2802040d01200b280200" + "21070b4101210a0b200320073602182003200a3602142009200141146a2802" + "004103746a22012802002003410c6a20012802041182808080008080808000" + "0d02200041086a21002008200641206a2206470d000b0b200420022802044f" + "0d012003280220200228020020044103746a22012802002001280204200328" + "022428020c1181808080008080808000450d010b410121010c010b41002101" + "0b200341306a24808080800020010b6c01027f024002402000417c6a280200" + "2202417871220341044108200241037122021b20016a490d0002402002450d" + "002003200141276a4b0d020b2000108d808080000f0b418186c0800041b086" + "c08000108e80808000000b41c086c0800041f086c08000108e80808000000b" + "5601017f23808080800041206b2202248080808000200241106a200041106a" + "290200370300200241086a200041086a290200370300200241013b011c2002" + "2001360218200220002902003703002002109280808000000be50301017f23" + "808080800041c0006b22022480808080000240024002400240024002402000" + "2d00000e0400010203000b2002200028020436020441002d009096c080001a" + "4114109c808080002200450d04200041106a410028008093c0800036000020" + "0041086a41002900f892c08000370000200041002900f092c0800037000020" + "0241143602102002200036020c200241143602082002410336022c200241a0" + "8fc08000360228200242023702342002418180808000ad422086200241046a" + "ad843703202002418480808000ad422086200241086aad8437031820022002" + "41186a36023020012802142001280218200241286a10878080800021002002" + "2802082201450d03200228020c20011088808080000c030b20002d00012100" + "2002410136022c200241d488c0800036022820024201370234200241838080" + "8000ad422086200241186aad8437030820022000410274220041c493c08000" + "6a28020036021c2002200041e894c080006a2802003602182002200241086a" + "36023020012802142001280218200241286a10878080800021000c020b2001" + "20002802042200280200200028020410958080800021000c010b2000280204" + "220028020020012000280204280210118280808000808080800021000b2002" + "41c0006a24808080800020000f0b000b140020012000280200200028020410" + "95808080000b3f01027f23808080800041106b220024808080800020004100" + "36020c41a08d062000410c6a108080808000200028020c2101200041106a24" + "808080800020010bbe0601057f200041786a22012000417c6a280200220241" + "787122006a21030240024020024101710d002002410271450d012001280200" + "220220006a21000240200120026b220141002802809ac08000470d00200328" + "02044103714103470d01410020003602f899c0800020032003280204417e71" + "36020420012000410172360204200320003602000f0b2001200210a8808080" + "000b024002400240024002400240200328020422024102710d002003410028" + "02849ac08000460d02200341002802809ac08000460d032003200241787122" + "0210a8808080002001200220006a2200410172360204200120006a20003602" + "00200141002802809ac08000470d01410020003602f899c080000f0b200320" + "02417e7136020420012000410172360204200120006a20003602000b200041" + "8002490d022001200010a78080800041002101410041002802989ac0800041" + "7f6a22003602989ac0800020000d04024041002802e097c080002200450d00" + "410021010340200141016a2101200028020822000d000b0b4100200141ff1f" + "200141ff1f4b1b3602989ac080000f0b410020013602849ac0800041004100" + "2802fc99c0800020006a22003602fc99c08000200120004101723602040240" + "200141002802809ac08000470d00410041003602f899c08000410041003602" + "809ac080000b200041002802909ac0800022044d0d0341002802849ac08000" + "2200450d034100210241002802fc99c0800022054129490d0241d897c08000" + "2101034002402001280200220320004b0d002000200320012802046a490d04" + "0b200128020821010c000b0b410020013602809ac08000410041002802f899" + "c0800020006a22003602f899c0800020012000410172360204200120006a20" + "003602000f0b200041f8017141e897c080006a21030240024041002802f099" + "c08000220241012000410376742200710d00410020022000723602f099c080" + "00200321000c010b200328020821000b200320013602082000200136020c20" + "01200336020c200120003602080f0b024041002802e097c080002201450d00" + "410021020340200241016a2102200128020822010d000b0b4100200241ff1f" + "200241ff1f4b1b3602989ac08000200520044d0d004100417f3602909ac080" + "000b0b4d01017f23808080800041206b220224808080800020024100360210" + "20024101360204200242043702082002412e36021c20022000360218200220" + "0241186a36020020022001108980808000000b7d02017f017e238080808000" + "41306b22022480808080002002200036020020022001360204200241023602" + "0c2002418484c08000360208200242023702142002418580808000ad422086" + "2203200241046aad84370328200220032002ad843703202002200241206a36" + "0210200241086a41b083c08000108980808000000b11002000350200410120" + "011091808080000bdf0703027f017e097f23808080800041306b2203248080" + "808000412721040240024020004290ce005a0d00200021050c010b41272104" + "0340200341096a20046a2206417c6a20004290ce0080220542f0b1037e2000" + "7ca7220741ffff037141e4006e220841017441c481c080006a2f00003b0000" + "2006417e6a2008419c7f6c20076a41ffff037141017441c481c080006a2f00" + "003b00002004417c6a2104200042ffc1d72f5621062005210020060d000b0b" + "02400240200542e300560d002005a721060c010b200341096a2004417e6a22" + "046a2005a7220741ffff037141e4006e2206419c7f6c20076a41ffff037141" + "017441c481c080006a2f00003b00000b024002402006410a490d0020034109" + "6a2004417e6a22046a200641017441c481c080006a2f00003b00000c010b20" + "0341096a2004417f6a22046a20064130723a00000b412720046b2109024002" + "4020010d00412820046b2107200228021c2106412d21010c010b412b418080" + "c400200228021c220641017122071b2101200720096a21070b200341096a20" + "046a210a2006410471410276210b0240024020022802000d00024020022802" + "142204200228021822062001200b109380808000450d00410121040c020b20" + "04200a2009200628020c118180808000808080800021040c010b0240024002" + "402002280204220c20074b0d0020022802142204200228021822062001200b" + "109380808000450d01410121040c030b2006410871450d012002280210210d" + "2002413036021020022d0020210e41012104200241013a0020200228021422" + "06200228021822082001200b1093808080000d02200c20076b41016a210402" + "4003402004417f6a2204450d01200641302008280210118280808000808080" + "8000450d000b410121040c030b02402006200a2009200828020c1181808080" + "008080808000450d00410121040c030b2002200e3a00202002200d36021041" + "0021040c020b2004200a2009200628020c118180808000808080800021040c" + "010b200c20076b210c02400240024020022d002022040e0402000100020b20" + "0c21044100210c0c010b200c4101762104200c41016a410176210c0b200441" + "016a2104200228021021082002280218210620022802142107024003402004" + "417f6a2204450d012007200820062802101182808080008080808000450d00" + "0b410121040c010b41012104200720062001200b1093808080000d00200720" + "0a2009200628020c11818080800080808080000d004100210403400240200c" + "2004470d00200c200c4921040c020b200441016a2104200720082006280210" + "1182808080008080808000450d000b2004417f6a200c4921040b200341306a" + "24808080800020040b5d01027f23808080800041206b220124808080800020" + "002802182102200141106a200041106a290200370300200141086a20004108" + "6a2902003703002001200036021c2001200236021820012000290200370300" + "200110a980808000000b490002402002418080c400460d0020002002200128" + "02101182808080008080808000450d0041010f0b024020030d0041000f0b20" + "0020034100200128020c11818080800080808080000b7d02017f017e238080" + "80800041306b22022480808080002002200036020020022001360204200241" + "0236020c200241a484c08000360208200242023702142002418580808000ad" + "4220862203200241046aad84370328200220032002ad843703202002200241" + "206a360210200241086a41c083c08000108980808000000bc20b010b7f2000" + "28020821030240024002400240200028020022040d002003410171450d010b" + "02402003410171450d00200120026a210502400240200028020c22060d0041" + "002107200121080c010b410021074100210920012108034020082203200546" + "0d020240024020032c00002208417f4c0d00200341016a21080c010b024020" + "0841604f0d00200341026a21080c010b0240200841704f0d00200341036a21" + "080c010b200341046a21080b200820036b20076a21072006200941016a2209" + "470d000b0b20082005460d00024020082c00002203417f4a0d002003416049" + "1a0b024002402007450d000240200720024f0d00200120076a2c000041bf7f" + "4a0d01410021030c020b20072002460d00410021030c010b200121030b2007" + "200220031b21022003200120031b21010b024020040d002000280214200120" + "02200028021828020c11818080800080808080000f0b2000280204210a0240" + "20024110490d0020022001200141036a417c7122076b22096a220b41037121" + "044100210641002103024020012007460d004100210302402009417c4b0d00" + "410021034100210503402003200120056a22082c000041bf7f4a6a20084101" + "6a2c000041bf7f4a6a200841026a2c000041bf7f4a6a200841036a2c000041" + "bf7f4a6a2103200541046a22050d000b0b200121080340200320082c000041" + "bf7f4a6a2103200841016a2108200941016a22090d000b0b02402004450d00" + "2007200b417c716a22082c000041bf7f4a210620044101460d00200620082c" + "000141bf7f4a6a210620044102460d00200620082c000241bf7f4a6a21060b" + "200b4102762105200620036a21060340200721042005450d04200541c00120" + "0541c001491b220b410371210c200b410274210d4100210802402005410449" + "0d002004200d41f007716a210941002108200421030340200328020c220741" + "7f7341077620074106767241818284087120032802082207417f7341077620" + "074106767241818284087120032802042207417f7341077620074106767241" + "818284087120032802002207417f7341077620074106767241818284087120" + "086a6a6a6a2108200341106a22032009470d000b0b2005200b6b2105200420" + "0d6a2107200841087641ff81fc0771200841ff81fc07716a418180046c4110" + "7620066a2106200c450d000b2004200b41fc01714102746a22082802002203" + "417f734107762003410676724181828408712103200c4101460d0220082802" + "042207417f7341077620074106767241818284087120036a2103200c410246" + "0d0220082802082208417f7341077620084106767241818284087120036a21" + "030c020b024020020d00410021060c030b2002410371210802400240200241" + "044f0d0041002106410021090c010b41002106200121032002410c71220921" + "070340200620032c000041bf7f4a6a200341016a2c000041bf7f4a6a200341" + "026a2c000041bf7f4a6a200341036a2c000041bf7f4a6a2106200341046a21" + "032007417c6a22070d000b0b2008450d02200120096a21030340200620032c" + "000041bf7f4a6a2106200341016a21032008417f6a22080d000c030b0b2000" + "28021420012002200028021828020c11818080800080808080000f0b200341" + "087641ff811c71200341ff81fc07716a418180046c41107620066a21060b02" + "400240200a20064d0d00200a20066b21054100210302400240024020002d00" + "200e0402000102020b20052103410021050c010b2005410176210320054101" + "6a41017621050b200341016a21032000280210210920002802182108200028" + "0214210703402003417f6a2203450d02200720092008280210118280808000" + "8080808000450d000b41010f0b200028021420012002200028021828020c11" + "818080800080808080000f0b0240200720012002200828020c118180808000" + "8080808000450d0041010f0b410021030340024020052003470d0020052005" + "490f0b200341016a2103200720092008280210118280808000808080800045" + "0d000b2003417f6a2005490b820302017f017e23808080800041f0006b2203" + "248080808000200341b085c0800036020c20032000360208200341b085c080" + "00360214200320013602102003410236021c200341bc80c080003602180240" + "20022802000d002003410336025c200341f080c08000360258200342033702" + "642003418680808000ad4220862204200341106aad84370348200320042003" + "41086aad843703402003418380808000ad422086200341186aad8437033820" + "03200341386a360260200341d8006a41e891c08000108980808000000b2003" + "41206a41106a200241106a290200370300200341206a41086a200241086a29" + "0200370300200320022902003703202003410436025c200341a481c0800036" + "0258200342043702642003418680808000ad4220862204200341106aad8437" + "035020032004200341086aad843703482003418780808000ad422086200341" + "206aad843703402003418380808000ad422086200341186aad843703382003" + "200341386a360260200341d8006a41e891c08000108980808000000b1c0020" + "002802002001200028020428020c11828080800080808080000b1400200128" + "0214200128021820001087808080000b22002001280214419480c08000410e" + "200128021828020c11818080800080808080000b6001017f23808080800041" + "306b22002480808080002000410136020c200041b480c08000360208200042" + "013702142000418880808000ad4220862000412f6aad843703202000200041" + "206a360210200041086a41cc8fc08000108980808000000b4701017f238080" + "80800041206b2200248080808000200041003602182000410136020c200041" + "bc88c0800036020820004204370210200041086a41c488c080001089808080" + "00000bcb2502087f017e02400240024002400240024002400240200041f501" + "490d0041002101200041cdff7b4f0d052000410b6a22014178712102410028" + "02f499c080002203450d04411f21040240200041f4ffff074b0d0020024106" + "20014108766722006b7641017120004101746b413e6a21040b410020026b21" + "010240200441027441d896c080006a28020022050d0041002100410021060c" + "020b4100210020024100411920044101766b2004411f461b74210741002106" + "034002402005220528020441787122082002490d00200820026b220820014f" + "0d00200821012005210620080d004100210120052106200521000c040b2005" + "28021422082000200820052007411d764104716a41106a2802002205471b20" + "0020081b2100200741017421072005450d020c000b0b024041002802f099c0" + "8000220541102000410b6a41f803712000410b491b22024103762201762200" + "410371450d00024002402000417f7341017120016a2207410374220041e897" + "c080006a2201200041f097c080006a28020022022802082206460d00200620" + "0136020c200120063602080c010b41002005417e200777713602f099c08000" + "0b20022000410372360204200220006a220020002802044101723602042002" + "41086a0f0b200241002802f899c080004d0d0302400240024020000d004100" + "2802f499c080002200450d0620006841027441d896c080006a280200220628" + "020441787120026b21012006210503400240200628021022000d0020062802" + "1422000d0020052802182104024002400240200528020c22002005470d0020" + "0541144110200528021422001b6a28020022060d01410021000c020b200528" + "02082206200036020c200020063602080c010b200541146a200541106a2000" + "1b21070340200721082006220041146a200041106a200028021422061b2107" + "20004114411020061b6a28020022060d000b200841003602000b2004450d04" + "0240200528021c41027441d896c080006a22062802002005460d0020044110" + "411420042802102005461b6a20003602002000450d050c040b200620003602" + "0020000d03410041002802f499c08000417e200528021c77713602f499c080" + "000c040b200028020441787120026b22062001200620014922061b21012000" + "200520061b2105200021060c000b0b02400240200020017441022001742200" + "410020006b7271682208410374220141e897c080006a2206200141f097c080" + "006a28020022002802082207460d002007200636020c200620073602080c01" + "0b41002005417e200877713602f099c080000b200020024103723602042000" + "20026a2207200120026b2206410172360204200020016a2006360200024041" + "002802f899c080002205450d00200541787141e897c080006a210141002802" + "809ac0800021020240024041002802f099c080002208410120054103767422" + "05710d00410020082005723602f099c08000200121050c010b200128020821" + "050b200120023602082005200236020c2002200136020c200220053602080b" + "410020073602809ac08000410020063602f899c08000200041086a0f0b2000" + "2004360218024020052802102206450d002000200636021020062000360218" + "0b20052802142206450d0020002006360214200620003602180b0240024002" + "4020014110490d0020052002410372360204200520026a2202200141017236" + "0204200220016a200136020041002802f899c080002207450d012007417871" + "41e897c080006a210641002802809ac0800021000240024041002802f099c0" + "8000220841012007410376742207710d00410020082007723602f099c08000" + "200621070c010b200628020821070b200620003602082007200036020c2000" + "200636020c200020073602080c010b2005200120026a220041037236020420" + "0520006a220020002802044101723602040c010b410020023602809ac08000" + "410020013602f899c080000b200541086a0f0b024020002006720d00410021" + "0641022004742200410020006b722003712200450d0320006841027441d896" + "c080006a28020021000b2000450d010b034020002006200028020441787122" + "0520026b220820014922041b2103200520024921072008200120041b210802" + "40200028021022050d00200028021421050b2006200320071b210620012008" + "20071b21012005210020050d000b0b2006450d00024041002802f899c08000" + "22002002490d002001200020026b4f0d010b20062802182104024002400240" + "200628020c22002006470d00200641144110200628021422001b6a28020022" + "050d01410021000c020b20062802082205200036020c200020053602080c01" + "0b200641146a200641106a20001b21070340200721082005220041146a2000" + "41106a200028021422051b210720004114411020051b6a28020022050d000b" + "200841003602000b2004450d030240200628021c41027441d896c080006a22" + "052802002006460d0020044110411420042802102006461b6a200036020020" + "00450d040c030b2005200036020020000d02410041002802f499c08000417e" + "200628021c77713602f499c080000c030b0240024002400240024002404100" + "2802f899c08000220020024f0d00024041002802fc99c08000220020024b0d" + "0041002101200241af80046a220641107640002200417f4622070d07200041" + "10742205450d07410041002802889ac08000410020064180807c7120071b22" + "086a22003602889ac080004100410028028c9ac0800022012000200120004b" + "1b36028c9ac0800002400240024041002802849ac080002201450d0041d897" + "c080002100034020002802002206200028020422076a2005460d0220002802" + "0822000d000c030b0b0240024041002802949ac080002200450d0020002005" + "4d0d010b410020053602949ac080000b410041ff1f3602989ac08000410020" + "083602dc97c08000410020053602d897c08000410041e897c080003602f497" + "c08000410041f097c080003602fc97c08000410041e897c080003602f097c0" + "8000410041f897c0800036028498c08000410041f097c080003602f897c080" + "004100418098c0800036028c98c08000410041f897c0800036028098c08000" + "4100418898c0800036029498c080004100418098c0800036028898c0800041" + "00419098c0800036029c98c080004100418898c0800036029098c080004100" + "419898c080003602a498c080004100419098c0800036029898c08000410041" + "a098c080003602ac98c080004100419898c080003602a098c0800041004100" + "3602e497c08000410041a898c080003602b498c08000410041a098c0800036" + "02a898c08000410041a898c080003602b098c08000410041b098c080003602" + "bc98c08000410041b098c080003602b898c08000410041b898c080003602c4" + "98c08000410041b898c080003602c098c08000410041c098c080003602cc98" + "c08000410041c098c080003602c898c08000410041c898c080003602d498c0" + "8000410041c898c080003602d098c08000410041d098c080003602dc98c080" + "00410041d098c080003602d898c08000410041d898c080003602e498c08000" + "410041d898c080003602e098c08000410041e098c080003602ec98c0800041" + "0041e098c080003602e898c08000410041e898c080003602f498c080004100" + "41f098c080003602fc98c08000410041e898c080003602f098c08000410041" + "f898c0800036028499c08000410041f098c080003602f898c0800041004180" + "99c0800036028c99c08000410041f898c0800036028099c080004100418899" + "c0800036029499c080004100418099c0800036028899c080004100419099c0" + "800036029c99c080004100418899c0800036029099c080004100419899c080" + "003602a499c080004100419099c0800036029899c08000410041a099c08000" + "3602ac99c080004100419899c080003602a099c08000410041a899c0800036" + "02b499c08000410041a099c080003602a899c08000410041b099c080003602" + "bc99c08000410041a899c080003602b099c08000410041b899c080003602c4" + "99c08000410041b099c080003602b899c08000410041c099c080003602cc99" + "c08000410041b899c080003602c099c08000410041c899c080003602d499c0" + "8000410041c099c080003602c899c08000410041d099c080003602dc99c080" + "00410041c899c080003602d099c08000410041d899c080003602e499c08000" + "410041d099c080003602d899c08000410041e099c080003602ec99c0800041" + "0041d899c080003602e099c08000410020053602849ac08000410041e099c0" + "80003602e899c080004100200841586a22003602fc99c08000200520004101" + "72360204200520006a4128360204410041808080013602909ac080000c080b" + "200120054f0d00200620014b0d00200028020c450d030b410041002802949a" + "c080002200200520002005491b3602949ac08000200520086a210641d897c0" + "800021000240024002400340200028020022072006460d0120002802082200" + "0d000c020b0b200028020c450d010b41d897c0800021000240034002402000" + "280200220620014b0d002001200620002802046a2206490d020b2000280208" + "21000c000b0b410020053602849ac080004100200841586a22003602fc99c0" + "800020052000410172360204200520006a4128360204410041808080013602" + "909ac080002001200641606a41787141786a22002000200141106a491b2207" + "411b36020441002902d897c080002109200741106a41002902e097c0800037" + "020020072009370208410020083602dc97c08000410020053602d897c08000" + "4100200741086a3602e097c08000410041003602e497c080002007411c6a21" + "00034020004107360200200041046a22002006490d000b20072001460d0720" + "072007280204417e713602042001200720016b220041017236020420072000" + "36020002402000418002490d002001200010a7808080000c080b200041f801" + "7141e897c080006a21060240024041002802f099c080002205410120004103" + "76742200710d00410020052000723602f099c08000200621000c010b200628" + "020821000b200620013602082000200136020c2001200636020c2001200036" + "02080c070b200020053602002000200028020420086a360204200520024103" + "723602042007410f6a41787141786a2201200520026a22006b210220014100" + "2802849ac08000460d03200141002802809ac08000460d0402402001280204" + "22064103714101470d0020012006417871220610a880808000200620026a21" + "02200120066a220128020421060b20012006417e7136020420002002410172" + "360204200020026a200236020002402002418002490d002000200210a78080" + "80000c060b200241f8017141e897c080006a21010240024041002802f099c0" + "8000220641012002410376742202710d00410020062002723602f099c08000" + "200121020c010b200128020821020b200120003602082002200036020c2000" + "200136020c200020023602080c050b4100200020026b22013602fc99c08000" + "410041002802849ac08000220020026a22063602849ac08000200620014101" + "7236020420002002410372360204200041086a21010c060b41002802809ac0" + "8000210102400240200020026b2206410f4b0d00410041003602809ac08000" + "410041003602f899c0800020012000410372360204200120006a2200200028" + "02044101723602040c010b410020063602f899c080004100200120026a2205" + "3602809ac0800020052006410172360204200120006a200636020020012002" + "4103723602040b200141086a0f0b2000200720086a36020441004100280284" + "9ac080002200410f6a417871220141786a22063602849ac080004100200020" + "016b41002802fc99c0800020086a22016a41086a22053602fc99c080002006" + "2005410172360204200020016a4128360204410041808080013602909ac080" + "000c030b410020003602849ac08000410041002802fc99c0800020026a2202" + "3602fc99c08000200020024101723602040c010b410020003602809ac08000" + "410041002802f899c0800020026a22023602f899c080002000200241017236" + "0204200020026a20023602000b200541086a0f0b4100210141002802fc99c0" + "8000220020024d0d004100200020026b22013602fc99c08000410041002802" + "849ac08000220020026a22063602849ac08000200620014101723602042000" + "2002410372360204200041086a0f0b20010f0b200020043602180240200628" + "02102205450d0020002005360210200520003602180b20062802142205450d" + "0020002005360214200520003602180b0240024020014110490d0020062002" + "410372360204200620026a22002001410172360204200020016a2001360200" + "02402001418002490d002000200110a7808080000c020b200141f8017141e8" + "97c080006a21020240024041002802f099c080002205410120014103767422" + "01710d00410020052001723602f099c08000200221010c010b200228020821" + "010b200220003602082001200036020c2000200236020c200020013602080c" + "010b2006200120026a2200410372360204200620006a220020002802044101" + "723602040b200641086a0b3000024020002802002d00000d002001418c83c0" + "800041051095808080000f0b2001419183c0800041041095808080000b1400" + "2001200028020420002802081095808080000b7001037f2000280204210102" + "40024020002d0000220041044b0d0020004103470d010b2001280200210002" + "40200141046a28020022022802002203450d00200020031180808080008080" + "8080000b024020022802042202450d00200020021088808080000b2001410c" + "1088808080000b0bab08010a7f23808080800041206b220424808080800002" + "40024002400240024020012802100d002001417f3602102003410020032002" + "41036a417c7120026b22056b41077120032005491b22066b21072003200649" + "0d0102402006450d0002400240200220036a2208417f6a22092d0000410a47" + "0d002006417f6a21060c010b200220076a220a2009460d0102402008417e6a" + "22092d0000410a470d002006417e6a21060c010b200a2009460d0102402008" + "417d6a22092d0000410a470d002006417d6a21060c010b200a2009460d0102" + "402008417c6a22092d0000410a470d002006417c6a21060c010b200a200946" + "0d0102402008417b6a22092d0000410a470d002006417b6a21060c010b200a" + "2009460d0102402008417a6a22092d0000410a470d002006417a6a21060c01" + "0b200a2009460d010240200841796a22092d0000410a470d00200641796a21" + "060c010b200a2009460d01200641787221060b200620076a41016a21060c04" + "0b20052003200320054b1b210b410020066b21082002417c6a210c2006417f" + "7320026a210a02400340200a21052008210620072209200b4d0d0120064178" + "6a2108200541786a210a41808284082002200941786a22076a280200220d41" + "8a94a8d000736b200d724180828408200c20096a280200220d418a94a8d000" + "736b200d727141808182847871418081828478460d000b0b200920034b0d02" + "02400340200320066a450d012006417f6a2106200520036a21092005417f6a" + "210520092d0000410a470d000b200320066a41016a21060c040b0240024020" + "01411c6a28020022060d00410021060c010b2006200141186a2802006a417f" + "6a2d0000410a470d0041002106200141003a00202001411c6a41003602000b" + "0240200128021420066b20034b0d002000200141146a2002200310a1808080" + "000c050b200128021820066a2002200310ad808080001a200041043a000020" + "01411c6a200620036a3602000c040b109a80808000000b20072003108f8080" + "8000000b20092003109480808000000b0240200320064f0d00200441003602" + "182004410136020c2004418c89c0800036020820044204370210200441086a" + "419489c08000108980808000000b02402001411c6a2802002205450d000240" + "0240200128021420056b20064d0d00200141186a28020020056a2002200610" + "ad808080001a2001411c6a200520066a22053602000c010b200441086a2001" + "41146a2002200610a180808000024020042d00084104460d00200020042903" + "083702000c030b2001411c6a28020021050b2005450d00200141003a002020" + "01411c6a41003602000b200220066a210502402001280214200320066b2206" + "4b0d002000200141146a2005200610a1808080000c010b200141186a280200" + "2005200610ad808080001a200041043a00002001411c6a20063602000b2001" + "200128021041016a360210200441206a2480808080000b7101027f20012802" + "002104024020012802082205450d00200420056b20034f0d00410021052001" + "4100360208200141003a000c0b0240200420034d0d00200128020420056a20" + "02200310ad808080001a200041043a00002001200520036a3602080f0b2000" + "4204370200200141003a000c0bc90103027f017e027f23808080800041106b" + "2203248080808000200341086a20002802082802002001200210a080808000" + "024020032d000822024104460d002000280204210420032903082105024002" + "4020002d0000220141044b0d0020014103470d010b20042802002101024020" + "0441046a28020022062802002207450d002001200711808080800080808080" + "000b024020062802042206450d00200120061088808080000b2004410c1088" + "808080000b200020053702000b200341106a24808080800020024104470b9c" + "0303027f017e037f23808080800041106b2202248080808000200241003602" + "0402400240024002402001418001490d002001418010490d01200141808004" + "4f0d0220022001413f71418001723a000620022001410c7641e001723a0004" + "20022001410676413f71418001723a0005410321010c030b200220013a0004" + "410121010c020b20022001413f71418001723a00052002200141067641c001" + "723a0004410221010c010b20022001413f71418001723a0007200220014112" + "7641f001723a000420022001410676413f71418001723a000620022001410c" + "76413f71418001723a0005410421010b200241086a20002802082802002002" + "41046a200110a080808000024020022d000822014104460d00200028020421" + "03200229030821040240024020002d0000220541044b0d0020054103470d01" + "0b200328020021050240200341046a28020022062802002207450d00200520" + "0711808080800080808080000b024020062802042206450d00200520061088" + "808080000b2003410c1088808080000b200020043702000b200241106a2480" + "8080800020014104470b1200200041c085c0800020011087808080000b0300" + "000b0900200041003602000bc30201047f411f21020240200141ffffff074b" + "0d002001410620014108766722026b7641017120024101746b413e6a21020b" + "200042003702102000200236021c200241027441d896c080006a2103024041" + "002802f499c0800041012002742204710d0020032000360200200020033602" + "182000200036020c20002000360208410041002802f499c080002004723602" + "f499c080000f0b024002400240200328020022042802044178712001470d00" + "200421020c010b20014100411920024101766b2002411f461b742103034020" + "042003411d764104716a41106a22052802002202450d022003410174210320" + "02210420022802044178712001470d000b0b20022802082203200036020c20" + "022000360208200041003602182000200236020c200020033602080f0b2005" + "2000360200200020043602182000200036020c200020003602080b82030104" + "7f200028020c21020240024002402001418002490d00200028021821030240" + "0240024020022000470d00200041144110200028021422021b6a2802002201" + "0d01410021020c020b20002802082201200236020c200220013602080c010b" + "200041146a200041106a20021b21040340200421052001220241146a200241" + "106a200228021422011b210420024114411020011b6a28020022010d000b20" + "0541003602000b2003450d020240200028021c41027441d896c080006a2201" + "2802002000460d0020034110411420032802102000461b6a20023602002002" + "450d030c020b2001200236020020020d01410041002802f499c08000417e20" + "0028021c77713602f499c080000c020b0240200220002802082204460d0020" + "04200236020c200220043602080f0b410041002802f099c08000417e200141" + "037677713602f099c080000f0b20022003360218024020002802102201450d" + "0020022001360210200120023602180b20002802142201450d002002200136" + "0214200120023602180f0b0b0b00200010aa80808000000bb50101037f2380" + "8080800041106b2201248080808000200028020c2102024002400240024020" + "002802040e020001020b20020d0141012102410021030c020b20020d002000" + "28020022022802042103200228020021020c010b2001418080808078360200" + "2001200036020c2001418980808000200028021c22002d001c20002d001d10" + "ab80808000000b20012003360204200120023602002001418a808080002000" + "28021c22002d001c20002d001d10ab80808000000b990101027f2380808080" + "0041106b2204248080808000410041002802cc96c08000220541016a3602cc" + "96c08000024020054100480d000240024041002d00a09ac080000d00410041" + "0028029c9ac0800041016a36029c9ac0800041002802c896c08000417f4a0d" + "010c020b200441086a200020011183808080008080808000000b410041003a" + "00a09ac080002002450d0010a580808000000b000b0c002000200129020037" + "03000bc10201087f02400240200241104f0d00200021030c010b2000410020" + "006b41037122046a210502402004450d002000210320012106034020032006" + "2d00003a0000200641016a2106200341016a22032005490d000b0b20052002" + "20046b2207417c7122086a210302400240200120046a2209410371450d0020" + "084101480d012009410374220641187121022009417c71220a41046a210141" + "0020066b4118712104200a2802002106034020052006200276200128020022" + "0620047472360200200141046a2101200541046a22052003490d000c020b0b" + "20084101480d0020092101034020052001280200360200200141046a210120" + "0541046a22052003490d000b0b20074103712102200920086a21010b024020" + "02450d00200320026a21050340200320012d00003a0000200141016a210120" + "0341016a22032005490d000b0b20000b0b96160100418080c0000b8c160a00" + "000001000000000000000000100001000000426f72726f774d75744572726f" + "72616c726561647920626f72726f7765643a2022001000120000003d3d6173" + "73657274696f6e20606c6566742020726967687460206661696c65640a2020" + "6c6566743a200a2072696768743a2000003e001000100000004e0010001700" + "0000650010000900000020726967687460206661696c65643a200a20206c65" + "66743a200000003e0010001000000088001000100000009800100009000000" + "65001000090000003030303130323033303430353036303730383039313031" + "31313231333134313531363137313831393230323132323233323432353236" + "32373238323933303331333233333334333533363337333833393430343134" + "32343334343435343634373438343935303531353235333534353535363537" + "35383539363036313632363336343635363636373638363937303731373237" + "33373437353736373737383739383038313832383338343835383638373838" + "3839393039313932393339343935393639373938393966616c736574727565" + "636f72652f7372632f736c6963652f6d656d6368722e727300000095011000" + "18000000830000001e00000095011000180000009f0000000900000072616e" + "676520737461727420696e64657820206f7574206f662072616e676520666f" + "7220736c696365206f66206c656e67746820d001100012000000e201100022" + "00000072616e676520656e6420696e646578201402100010000000e2011000" + "220000007265656e7472616e7420696e69740000340210000e0000002f7275" + "7374632f633266373463336639323861656235303366313562346539656635" + "373738653737663330353862382f6c6962726172792f636f72652f7372632f" + "63656c6c2f6f6e63652e72730000004c0210004d0000002301000042000000" + "000000000000000004000000040000000b0000000c0000000c000000040000" + "000d0000000e0000000f0000002f727573742f646570732f646c6d616c6c6f" + "632d302e322e362f7372632f646c6d616c6c6f632e7273617373657274696f" + "6e206661696c65643a207073697a65203e3d2073697a65202b206d696e5f6f" + "7665726865616400d802100029000000a80400000900000061737365727469" + "6f6e206661696c65643a207073697a65203c3d2073697a65202b206d61785f" + "6f766572686561640000d802100029000000ae0400000d000000757365206f" + "66207374643a3a7468726561643a3a63757272656e742829206973206e6f74" + "20706f737369626c6520616674657220746865207468726561642773206c6f" + "63616c206461746120686173206265656e2064657374726f7965647374642f" + "7372632f7468726561642f6d6f642e727300de03100015000000f102000013" + "0000006661696c656420746f2067656e657261746520756e69717565207468" + "726561642049443a2062697473706163652065786861757374656400040410" + "0037000000de03100015000000c40400000d00000001000000000000007374" + "642f7372632f696f2f62756666657265642f6c696e65777269746572736869" + "6d2e72736d6964203e206c656e000081041000090000005c04100025000000" + "0f01000029000000656e74697479206e6f7420666f756e647065726d697373" + "696f6e2064656e696564636f6e6e656374696f6e2072656675736564636f6e" + "6e656374696f6e207265736574686f737420756e726561636861626c656e65" + "74776f726b20756e726561636861626c65636f6e6e656374696f6e2061626f" + "727465646e6f7420636f6e6e65637465646164647265737320696e20757365" + "61646472657373206e6f7420617661696c61626c656e6574776f726b20646f" + "776e62726f6b656e2070697065656e7469747920616c726561647920657869" + "7374736f7065726174696f6e20776f756c6420626c6f636b6e6f7420612064" + "69726563746f727969732061206469726563746f72796469726563746f7279" + "206e6f7420656d707479726561642d6f6e6c792066696c6573797374656d20" + "6f722073746f72616765206d656469756d66696c6573797374656d206c6f6f" + "70206f7220696e646972656374696f6e206c696d69742028652e672e207379" + "6d6c696e6b206c6f6f70297374616c65206e6574776f726b2066696c652068" + "616e646c65696e76616c696420696e70757420706172616d65746572696e76" + "616c6964206461746174696d6564206f75747772697465207a65726f6e6f20" + "73746f726167652073706163657365656b206f6e20756e7365656b61626c65" + "2066696c6566696c6573797374656d2071756f746120657863656564656466" + "696c6520746f6f206c617267657265736f7572636520627573796578656375" + "7461626c652066696c652062757379646561646c6f636b63726f73732d6465" + "76696365206c696e6b206f722072656e616d65746f6f206d616e79206c696e" + "6b73696e76616c69642066696c656e616d65617267756d656e74206c697374" + "20746f6f206c6f6e676f7065726174696f6e20696e74657272757074656475" + "6e737570706f72746564756e657870656374656420656e64206f662066696c" + "656f7574206f66206d656d6f72796f74686572206572726f72756e63617465" + "676f72697a6564206572726f7220286f73206572726f722029000000010000" + "0000000000910710000b0000009c071000010000007374642f7372632f696f" + "2f737464696f2e727300b8071000130000002c030000140000006661696c65" + "64207072696e74696e6720746f203a20000000dc07100013000000ef071000" + "02000000b8071000130000005d040000090000007374646f75747374642f73" + "72632f696f2f6d6f642e72736120666f726d617474696e6720747261697420" + "696d706c656d656e746174696f6e2072657475726e656420616e206572726f" + "72207768656e2074686520756e6465726c79696e672073747265616d206469" + "64206e6f740000002b081000560000001a0810001100000028070000150000" + "0063616e6e6f74207265637572736976656c792061637175697265206d7574" + "65789c081000200000007374642f7372632f7379732f73796e632f6d757465" + "782f6e6f5f746872656164732e7273c4081000240000001400000009000000" + "7374642f7372632f73796e632f6f6e63652e7273f808100014000000d90000" + "00140000006c6f636b20636f756e74206f766572666c6f7720696e20726565" + "6e7472616e74206d757465787374642f7372632f73796e632f7265656e7472" + "616e745f6c6f636b2e7273420910001e000000220100002d0000006f706572" + "6174696f6e207375636365737366756c6f6e652d74696d6520696e69746961" + "6c697a6174696f6e206d6179206e6f7420626520706572666f726d65642072" + "65637572736976656c79840910003800000010000000110000001200000010" + "0000001000000013000000120000000d0000000e000000150000000c000000" + "0b00000015000000150000000f0000000e0000001300000026000000380000" + "0019000000170000000c000000090000000a00000010000000170000001900" + "00000e0000000d00000014000000080000001b0000000e0000001000000016" + "000000150000000b000000160000000d0000000b00000013000000a4041000" + "b4041000c5041000d7041000e7041000f70410000a0510001c051000290510" + "00370510004c0510005805100063051000780510008d0510009c051000aa05" + "1000bd051000e30510001b061000340610004b06100057061000600610006a" + "0610007a06100091061000aa061000b8061000c5061000d9061000e1061000" + "fc0610000a0710001a07100030071000450710005007100066071000730710" + "007e071000009118046e616d65000e0d7761736d5f6c69622e7761736d01d9" + "172e0005726563757201625f5a4e34636f726533666d74336e756d33696d70" + "35325f244c5424696d706c2475323024636f72652e2e666d742e2e44697370" + "6c61792475323024666f7224753230246933322447542433666d7431376863" + "6564393063376136333963303164644502495f5a4e337374643473796e6339" + "6f6e63655f6c6f636b31374f6e63654c6f636b244c54245424475424313069" + "6e697469616c697a6531376837663563353038646139653162303962450342" + "5f5a4e34636f72653463656c6c346f6e636531374f6e636543656c6c244c54" + "245424475424387472795f696e697431376863653633626632323835313931" + "65373145043e5f5a4e35616c6c6f633473796e633136417263244c54245424" + "432441244754243964726f705f736c6f773137686565396163636361643963" + "63313036394505355f5a4e34636f72653970616e69636b696e673133617373" + "6572745f6661696c6564313768323332363266326333633738623661624506" + "325f5a4e34636f7265366f7074696f6e31336578706563745f6661696c6564" + "313768663038613939653264373333366336614507265f5a4e34636f726533" + "666d743577726974653137683933353534653462653731663263376145080e" + "5f5f727573745f6465616c6c6f6309305f5a4e34636f72653970616e69636b" + "696e673970616e69635f666d74313768363534306363623264356664633361" + "62450a595f5a4e36305f244c54247374642e2e696f2e2e6572726f722e2e45" + "72726f72247532302461732475323024636f72652e2e666d742e2e44697370" + "6c61792447542433666d743137683930323731633762326136636538333945" + "0b495f5a4e34345f244c54242452462454247532302461732475323024636f" + "72652e2e666d742e2e446973706c61792447542433666d7431376837666634" + "643062383630396332343732450c097265637572736976650d415f5a4e3864" + "6c6d616c6c6f6338646c6d616c6c6f633137446c6d616c6c6f63244c542441" + "24475424346672656531376833393833346161616165336538393436450e2c" + "5f5a4e34636f72653970616e69636b696e673570616e696331376830346565" + "623931376464393363323239450f445f5a4e34636f726535736c6963653569" + "6e6465783236736c6963655f73746172745f696e6465785f6c656e5f666169" + "6c313768663931613361666538376231643434334510625f5a4e34636f7265" + "33666d74336e756d33696d7035325f244c5424696d706c2475323024636f72" + "652e2e666d742e2e446973706c61792475323024666f722475323024753332" + "2447542433666d74313768626633653032323834383365333735614511305f" + "5a4e34636f726533666d74336e756d33696d7037666d745f75363431376864" + "353231666136656636613036373261451211727573745f626567696e5f756e" + "77696e6413465f5a4e34636f726533666d7439466f726d6174746572313270" + "61645f696e74656772616c313277726974655f707265666978313768613961" + "343332383062363030366431324514425f5a4e34636f726535736c69636535" + "696e6465783234736c6963655f656e645f696e6465785f6c656e5f6661696c" + "3137683038386235366532393962656161616645152e5f5a4e34636f726533" + "666d7439466f726d6174746572337061643137683437363961653338393337" + "346363353145163b5f5a4e34636f72653970616e69636b696e673139617373" + "6572745f6661696c65645f696e6e6572313768366637653332353764383461" + "353034324517475f5a4e34325f244c54242452462454247532302461732475" + "323024636f72652e2e666d742e2e44656275672447542433666d7431376833" + "6136626161316262343761643230344518585f5a4e35395f244c5424636f72" + "652e2e666d742e2e417267756d656e7473247532302461732475323024636f" + "72652e2e666d742e2e446973706c61792447542433666d7431376836386133" + "65386535303963616663363445195c5f5a4e36335f244c5424636f72652e2e" + "63656c6c2e2e426f72726f774d75744572726f722475323024617324753230" + "24636f72652e2e666d742e2e44656275672447542433666d74313768313564" + "33643334333462646463636338451a395f5a4e34636f72653463656c6c3232" + "70616e69635f616c72656164795f626f72726f776564313768333134623532" + "61316263343662666534451b395f5a4e337374643674687265616438546872" + "6561644964336e657739657868617573746564313768333336626637613134" + "38383034346338451c435f5a4e38646c6d616c6c6f6338646c6d616c6c6f63" + "3137446c6d616c6c6f63244c54244124475424366d616c6c6f633137686536" + "3539333961346338393763633135451d475f5a4e34325f244c542424524624" + "54247532302461732475323024636f72652e2e666d742e2e44656275672447" + "542433666d7431376865313837343338386530376266653235451e595f5a4e" + "36305f244c5424616c6c6f632e2e737472696e672e2e537472696e67247532" + "302461732475323024636f72652e2e666d742e2e446973706c617924475424" + "33666d7431376863653432323661613166373236633163451f7a5f5a4e3463" + "6f726533707472383864726f705f696e5f706c616365244c54247374642e2e" + "696f2e2e57726974652e2e77726974655f666d742e2e41646170746572244c" + "5424616c6c6f632e2e7665632e2e566563244c542475382447542424475424" + "24475424313768313636646336316162303333346331654520605f5a4e3631" + "5f244c54247374642e2e696f2e2e737464696f2e2e5374646f75744c6f636b" + "2475323024617324753230247374642e2e696f2e2e57726974652447542439" + "77726974655f616c6c31376832346238323631303436316432353666452155" + "5f5a4e3373746432696f386275666665726564396275667772697465723138" + "427566577269746572244c54245724475424313477726974655f616c6c5f63" + "6f6c64313768353834626462626165623066623162624522735f5a4e38305f" + "244c54247374642e2e696f2e2e57726974652e2e77726974655f666d742e2e" + "41646170746572244c54245424475424247532302461732475323024636f72" + "652e2e666d742e2e5772697465244754243977726974655f73747231376837" + "6661636635626330656663643830384523325f5a4e34636f726533666d7435" + "5772697465313077726974655f636861723137686630623362653165633139" + "64653565374524305f5a4e34636f726533666d743557726974653977726974" + "655f666d743137686638383038663064663065343531336445250a72757374" + "5f70616e696326375f5a4e34636f72653570616e6963313250616e69635061" + "796c6f61643661735f73747231376836313439663134326439613265303265" + "4527505f5a4e38646c6d616c6c6f6338646c6d616c6c6f633137446c6d616c" + "6c6f63244c542441244754243138696e736572745f6c617267655f6368756e" + "6b3137686566653835316132373538326461376245284a5f5a4e38646c6d61" + "6c6c6f6338646c6d616c6c6f633137446c6d616c6c6f63244c542441244754" + "243132756e6c696e6b5f6368756e6b31376839333465336463333833626235" + "3861334529455f5a4e3373746433737973396261636b747261636532365f5f" + "727573745f656e645f73686f72745f6261636b747261636531376834646333" + "646534376432323032316239452a585f5a4e337374643970616e69636b696e" + "673139626567696e5f70616e69635f68616e646c657232385f247537622424" + "75376224636c6f737572652475376424247537642431376865313761333937" + "376638396331313738452b3b5f5a4e337374643970616e69636b696e673230" + "727573745f70616e69635f776974685f686f6f6b3137683737366537396339" + "6636353931626535452c83015f5a4e39395f244c54247374642e2e70616e69" + "636b696e672e2e626567696e5f70616e69635f68616e646c65722e2e537461" + "7469635374725061796c6f6164247532302461732475323024636f72652e2e" + "70616e69632e2e50616e69635061796c6f6164244754243661735f73747231" + "376865623366373232643232346534326638452d066d656d63707907120100" + "0f5f5f737461636b5f706f696e746572090a0100072e726f64617461005509" + "70726f64756365727302086c616e6775616765010452757374000c70726f63" + "65737365642d62790105727573746325312e38332e302d6e696768746c7920" + "2863326637346333663920323032342d30392d30392900490f746172676574" + "5f6665617475726573042b0a6d756c746976616c75652b0f6d757461626c65" + "2d676c6f62616c732b0f7265666572656e63652d74797065732b087369676e" + "2d657874"; + +extern std::string const hfPerfTest = + "0061736d0100000001180460037f7f7e017f60057f7f7f7f7f017f600000" + "6000017f021d0203656e760974726163655f6e756d000003656e76057472" + "616365000103030202030503010002068601167f0041a0090b7f0041a011" + "0b7f0041e0080b7f0041a0080b7f0041c0080b7f004180080b7f00418408" + "0b7f004188080b7f00418c080b7f004190080b7f004194080b7f00419808" + "0b7f004180090b7f004180080b7f0041e0110b7f0041e0110b7f0041e091" + "040b7f004180080b7f0041e091040b7f00418080080b7f0041000b7f0041" + "010b07c50219066d656d6f72790200115f5f7761736d5f63616c6c5f6374" + "6f727300020666696e6973680003036275660300076c6f635f6275660301" + "036d73670302086572725f686561640303096572725f646174613103040a" + "53465f4163636f756e7403050e53465f44657374696e6174696f6e030608" + "53465f4d656d6f7303070753465f4d656d6f03080b53465f4d656d6f4461" + "746103090753465f44617461030a1753465f417574686f72697a65437265" + "64656e7469616c73030b066163635f6964030c0c5f5f64736f5f68616e64" + "6c65030d0a5f5f646174615f656e64030e0b5f5f737461636b5f6c6f7703" + "0f0c5f5f737461636b5f6869676803100d5f5f676c6f62616c5f62617365" + "03110b5f5f686561705f6261736503120a5f5f686561705f656e6403130d" + "5f5f6d656d6f72795f6261736503140c5f5f7461626c655f626173650315" + "0aa2010202000b9c0102017f017e41807821000340200041a0116a420037" + "0300200041086a22000d000b41d811420037030041d011420037030041c8" + "11420037030041c011420037030041b811420037030041b0114200370300" + "41a811428d801c37030041a011429a803c3703000240034041e008411020" + "0110004118460440200142017c220142c0843d520d010c020b0b41a00841" + "1441c0084113410010011a0b41010b0b840104004180080b340100080003" + "00080009000f000a000e000d0007001b0007001a000f0000000000676574" + "5f6c65646765725f73716e206572726f720041c0080b13696e76616c6964" + "2072657475726e2073697a650041e0080b104e6577206163636f756e7420" + "69643a20004180090b14fc4f9afac9f1a8db807fda7dc9247bb557569d58" + "007f0970726f647563657273010c70726f6365737365642d62790105636c" + "616e675f31392e312e352d776173692d73646b202868747470733a2f2f67" + "69746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a656374206162" + "346235613264623538323935386166316565333038613739306366646234" + "32626432343732302900490f7461726765745f6665617475726573042b0f" + "6d757461626c652d676c6f62616c732b087369676e2d6578742b0f726566" + "6572656e63652d74797065732b0a6d756c746976616c7565"; + +extern std::string const allKeyletsWasmHex = + "0061736d0100000001530a60057f7f7f7f7f017f60047f7f7f7f017f60067f7f7f7f7f7f01" + "7f60037f7f7f017f60087f7f7f7f7f7f7f7f017f60037f7f7e017f60077f7f7f7f7f7f7f01" + "7f60057f7f7f7f7f006000017f60037f7f7f000284051808686f73745f6c69620574726163" + "65000008686f73745f6c69621063616368655f6c65646765725f6f626a000308686f73745f" + "6c69620974726163655f6e756d000508686f73745f6c6962146765745f6c65646765725f6f" + "626a5f6669656c64000108686f73745f6c69621c6765745f63757272656e745f6c65646765" + "725f6f626a5f6669656c64000308686f73745f6c69620d74726163655f6163636f756e7400" + "0108686f73745f6c69620e6163636f756e745f6b65796c6574000108686f73745f6c69620b" + "6c696e655f6b65796c6574000408686f73745f6c69620a616d6d5f6b65796c657400020868" + "6f73745f6c69620c636865636b5f6b65796c6574000008686f73745f6c6962116372656465" + "6e7469616c5f6b65796c6574000408686f73745f6c69620f64656c65676174655f6b65796c" + "6574000208686f73745f6c6962166465706f7369745f707265617574685f6b65796c657400" + "0208686f73745f6c69620a6469645f6b65796c6574000108686f73745f6c69620d65736372" + "6f775f6b65796c6574000008686f73745f6c6962136d70745f69737375616e63655f6b6579" + "6c6574000008686f73745f6c69620e6d70746f6b656e5f6b65796c6574000208686f73745f" + "6c6962106e66745f6f666665725f6b65796c6574000008686f73745f6c69620c6f66666572" + "5f6b65796c6574000008686f73745f6c69620e7061796368616e5f6b65796c657400060868" + "6f73745f6c69621a7065726d697373696f6e65645f646f6d61696e5f6b65796c6574000008" + "686f73745f6c69620e7369676e6572735f6b65796c6574000108686f73745f6c69620d7469" + "636b65745f6b65796c6574000008686f73745f6c69620c7661756c745f6b65796c65740000" + "03040307080905030100110619037f01418080c0000b7f0041958bc0000b7f0041a08bc000" + "0b073e05066d656d6f727902000d6f626a6563745f65786973747300180666696e69736800" + "190a5f5f646174615f656e6403010b5f5f686561705f6261736503020a8d33038d0602057f" + "037e230041f0006b220524000240024020012d0000450440200541186a200141196a290000" + "370300200541106a200141116a290000370300200541086a200141096a2900003703002005" + "20012900013703002002200320054120410110001a2005412041001001220141004c0d0102" + "4002400240024002402004450440418b80c000410f4285801410021a200541d8006a420037" + "0300200541d0006a4200370300200541c8006a420037030020054200370340200141858014" + "200541406b22064120100322014120470d01200541286a200541cf006a2201290000220a37" + "0300200541306a200541d7006a2202290000220b370300200541386a200541df006a22032d" + "000022043a000020052005290047220c37032020052f014021072005280142210820052d00" + "4621092001200a3700002002200b370000200320043a0000200520093a0046200520083601" + "42200520073b01402005200c370047419a80c000410c20064120410110001a0c030b418b80" + "c000410f2004ac10021a200541d0006a4100360200200541c8006a42003703002005420037" + "034020012004200541406b411410032201417e47044020014114460d02200141004e0d0441" + "998ac00041172001ac10021a0c050b417e21010c040b41a680c0004115417f20012001417f" + "4e1b2201ac10021a200041013a0000200020013602040c060b200520052900473703602005" + "200541cc006a2201290000370065200520052f014022023b016e2005200529036037032020" + "05200529006537002520052800432103200520052d00423a0042200520023b014020052003" + "3600432001200529002537000020052005290320370047419a80c000410c200541406b4114" + "410110001a0b20004180023b01000c040b41b08ac0004131421410021a41e18ac000412020" + "01ad10021a417321010b41a680c00041152001ac10021a200041013a000020002001360204" + "0c020b41c280c000411620012802042201ac10021a200041013a0000200020013602040c01" + "0b41bb80c00041072001ac10021a200041013a0000200020013602040b200541f0006a2400" + "0bfc27020a7f027e23004180076b2200240041d880c000412341004100410010001a200041" + "98016a2204410036020020004190016a22034200370300200042003703880102402000027f" + "02404181802020004188016a22024114100422014114460440200041066a20002d008a013a" + "00002000200029008f013703e001200020004194016a22052900003700e501200041106a20" + "002900e501370000200020002f0188013b01042000200028008b01360007200020002903e0" + "0137000b41fb80c0004108200041046a2208411410051a2004410036020020034200370300" + "20004200370388014183802020024114100422014114470d032000411a6a20002d008a013a" + "00002000200029008f013703e001200020052900003700e501200041246a20002900e50137" + "0000200020002f0188013b01182000200028008b0136001b200020002903e00137001f4183" + "81c000410c200041186a411410051a200041a0016a22054200370300200442003703002003" + "420037030020004200370388012008411420024120100622014120460d0102402001410048" + "0440200020013602300c010b2000417f3602300b41010c020b0c020b200041c5006a200529" + "03003700002000413d6a2004290300370000200041356a2003290300370000200020002903" + "880137002d41000b3a002c20004188016a22042000412c6a418f81c0004107418180201018" + "0240024020002d00880145044041002101419681c000413541004100410010001a200041de" + "006a41c4003a0000200041d8006a4100360200200041e3006a41003a0000200041d5a6013b" + "015c200042003703502000410036005f200041a0016a2203420037030020004198016a2202" + "420037030020004190016a220542003703002000420037038801200041046a411420004118" + "6a4114200041d0006a41142004412010072204412047044002402004410048044020002004" + "3602680c010b2000417f3602680b410121010c020b200041fd006a20032903003700002000" + "41f5006a2002290300370000200041ed006a20052903003700002000200029038801370065" + "0c010b200028028c01210141878ac0004112420510021a0c010b200020013a006420004188" + "016a200041e4006a41cb81c000410941001018024020002d00880145044041d481c0004137" + "41004100410010001a200041f0016a200041286a2201280100360200200041e8016a200041" + "206a2202290100370300200041fc016a200041d8006a290300220a37020020004184026a20" + "0041e0006a2802002203360200200020002901183703e00120002000290350220b3702f401" + "200041e8066a22042003360200200041e0066a2203200a3703002000200b3703d806200041" + "f4066a2002290100370200200041fc066a2001280100360200200020002901183702ec0620" + "004188026a200041d8066a22014128101a2000418c016a200041e0016a41d000101a200041" + "0136028801200041f0066a2202420037030020044200370300200342003703002000420037" + "03d80641818bc0004114200041b4016a412820014120100822014120470440024020014100" + "480440200020013602e4010c010b2000417f3602e4010b410121010c020b200041f9016a20" + "02290300370000200041f1016a2004290300370000200041e9016a20032903003700002000" + "20002903d8063700e101410021010c010b200028028c01210141878ac0004112420510021a" + "0c010b200020013a00e001200041b4026a200041e0016a2204418b82c00041034181802010" + "18024020002d00b40245044041002101418e82c000413141004100410010001a200041f801" + "6a22034200370300200041f0016a22024200370300200041e8016a22054200370300200042" + "003703e001200041046a411441062004412010092204412047044002402004410048044020" + "0020043602c0020c010b2000417f3602c0020b410121010c020b200041d5026a2003290300" + "370000200041cd026a2002290300370000200041c5026a2005290300370000200020002903" + "e0013700bd020c010b20002802b802210141878ac0004112420610021a0c010b200020013a" + "00bc02200041e0016a2204200041bc026a41bf82c0004105418180201018024020002d00e0" + "014504404100210141c482c000413341004100410010001a200041f8016a22034200370300" + "200041f0016a22024200370300200041e8016a22054200370300200042003703e001200041" + "046a220841142008411441f782c000411220044120100a2204412047044002402004410048" + "0440200020043602e4020c010b2000417f3602e4020b410121010c020b200041f9026a2003" + "290300370000200041f1026a2002290300370000200041e9026a2005290300370000200020" + "002903e0013700e1020c010b20002802e401210141878ac0004112420610021a0c010b2000" + "20013a00e002200041e0016a2204200041e0026a418983c000410a41988020101802402000" + "2d00e00145044041002101419383c000413841004100410010001a200041f8016a22034200" + "370300200041f0016a22024200370300200041e8016a22054200370300200042003703e001" + "200041046a4114200041186a411420044120100b2204412047044002402004410048044020" + "002004360288030c010b2000417f360288030b410121010c020b2000419d036a2003290300" + "37000020004195036a20022903003700002000418d036a2005290300370000200020002903" + "e001370085030c010b20002802e401210141878ac0004112420710021a0c010b200020013a" + "008403200041e0016a220520004184036a41cb83c000410841818020101802400240024002" + "40024002400240024002400240024020002d00e00145044041d383c0004136410041004100" + "10001a230041206b22032400200341186a22064200370300200341106a2207420037030020" + "0341086a2209420037030020034200370300200041a8036a2201027f200041046a22044114" + "200041186a2208411420034120100c22024120470440024020024100480440200120023602" + "040c010b2001417f3602040b41010c010b20012003290300370001200141196a2006290300" + "370000200141116a2007290300370000200141096a200929030037000041000b3a00002003" + "41206a240020052001418984c000410e41818020101820002d00e0010d01419784c000413c" + "41004100410010001a230041206b22032400200341186a22064200370300200341106a2207" + "4200370300200341086a2209420037030020034200370300200041cc036a2201027f200441" + "1420034120100d22024120470440024020024100480440200120023602040c010b2001417f" + "3602040b41010c010b20012003290300370001200141196a2006290300370000200141116a" + "2007290300370000200141096a200929030037000041000b3a0000200341206a2400200520" + "0141d384c000410341818020101820002d00e0010d0241d684c00041314100410041001000" + "1a230041206b22032400200341186a22064200370300200341106a22074200370300200341" + "086a2209420037030020034200370300200041f0036a2201027f20044114410b2003412010" + "0e22024120470440024020024100480440200120023602040c010b2001417f3602040b4101" + "0c010b20012003290300370001200141196a2006290300370000200141116a200729030037" + "0000200141096a200929030037000041000b3a0000200341206a240020052001418785c000" + "410641818020101820002d00e0010d03418d85c000413441004100410010001a230041206b" + "22032400200341186a22064200370300200341106a22074200370300200341086a22094200" + "3703002003420037030020004194046a2201027f20044114410c20034120100f2202412047" + "0440024020024100480440200120023602040c010b2001417f3602040b41010c010b200120" + "03290300370001200141196a2006290300370000200141116a200729030037000020014109" + "6a200929030037000041000b3a0000200341206a2400200041f4016a200041146a28010036" + "0200200041ec016a2000410c6a290100370200200020002901043702e401200041808080e0" + "003602e001200041d8066a2203200141c185c000410b41848020101820002d00d8060d0441" + "cc85c000413941004100410010001a230041206b22012400200141186a2206420037030020" + "0141106a22074200370300200141086a2209420037030020014200370300200041b8046a22" + "02027f20054118200841142001412010102205412047044002402005410048044020022005" + "3602040c010b2002417f3602040b41010c010b20022001290300370001200241196a200629" + "0300370000200241116a2007290300370000200241096a200929030037000041000b3a0000" + "200141206a240020032002418586c000410741818020101820002d00d8060d05418c86c000" + "413541004100410010001a230041206b22012400200141186a22064200370300200141106a" + "22074200370300200141086a2209420037030020014200370300200041dc046a2202027f20" + "084114410620014120101122054120470440024020054100480440200220053602040c010b" + "2002417f3602040b41010c010b20022001290300370001200241196a200629030037000020" + "0241116a2007290300370000200241096a200929030037000041000b3a0000200141206a24" + "002003200241c186c000410c41828020101820002d00d8060d0641cd86c000413a41004100" + "410010001a230041206b22012400200141186a22064200370300200141106a220742003703" + "00200141086a220942003703002001420037030020004180056a2202027f20044114410d20" + "014120101222054120470440024020054100480440200220053602040c010b2002417f3602" + "040b41010c010b20022001290300370001200241196a2006290300370000200241116a2007" + "290300370000200241096a200929030037000041000b3a0000200141206a24002003200241" + "8787c000410541818020101820002d00d8060d07418c87c000413341004100410010001a23" + "0041206b22012400200141186a22064200370300200141106a22074200370300200141086a" + "2209420037030020014200370300200041a4056a2202027f2004411420084114410e200141" + "20101322054120470440024020054100480440200220053602040c010b2002417f3602040b" + "41010c010b20022001290300370001200241196a2006290300370000200241116a20072903" + "00370000200241096a200929030037000041000b3a0000200141206a24002003200241bf87" + "c000410a41818020101820002d00d8060d0841c987c000413841004100410010001a230041" + "206b22012400200141186a22084200370300200141106a22064200370300200141086a2207" + "420037030020014200370300200041c8056a2202027f20044114410f200141201014220541" + "20470440024020054100480440200220053602040c010b2002417f3602040b41010c010b20" + "022001290300370001200241196a2008290300370000200241116a20062903003700002002" + "41096a200729030037000041000b3a0000200141206a240020032002418188c00041124182" + "8020101820002d00d8060d09419388c00041c00041004100410010001a230041206b220124" + "00200141186a22084200370300200141106a22064200370300200141086a22074200370300" + "20014200370300200041ec056a2202027f2004411420014120101522054120470440024020" + "054100480440200220053602040c010b2002417f3602040b41010c010b2002200129030037" + "0001200241196a2008290300370000200241116a2006290300370000200241096a20072903" + "0037000041000b3a0000200141206a24002003200241d388c000410a4100101820002d00d8" + "060d0a41dd88c000413841004100410010001a230041206b22012400200141186a22084200" + "370300200141106a22064200370300200141086a2207420037030020014200370300200041" + "90066a2202027f200441144112200141201016220541204704400240200541004804402002" + "20053602040c010b2002417f3602040b41010c010b20022001290300370001200241196a20" + "08290300370000200241116a2006290300370000200241096a200729030037000041000b3a" + "0000200141206a240020032002419589c000410641818020101820002d00d8060d0b419b89" + "c000413441004100410010001a230041206b22012400200141186a22054200370300200141" + "106a22084200370300200141086a2206420037030020014200370300200041b4066a220202" + "7f20044114411320014120101722044120470440024020044100480440200220043602040c" + "010b2002417f3602040b41010c010b20022001290300370001200241196a20052903003700" + "00200241116a2008290300370000200241096a200629030037000041000b3a000020014120" + "6a24002003200241cf89c000410541818020101820002d00d80645044041d489c000413341" + "004100410010001a410121010c0d0b20002802dc06210141878ac0004112421310021a0c0c" + "0b20002802e401210141878ac0004112420810021a0c0b0b20002802e401210141878ac000" + "4112420910021a0c0a0b20002802e401210141878ac0004112420a10021a0c090b20002802" + "e401210141878ac0004112420b10021a0c080b20002802dc06210141878ac0004112420c10" + "021a0c070b20002802dc06210141878ac0004112420d10021a0c060b20002802dc06210141" + "878ac0004112420d10021a0c050b20002802dc06210141878ac0004112420d10021a0c040b" + "20002802dc06210141878ac0004112420e10021a0c030b20002802dc06210141878ac00041" + "12420f10021a0c020b20002802dc06210141878ac0004112421010021a0c010b20002802dc" + "06210141878ac0004112421210021a0b20004180076a240020010f0b418080c000410b417f" + "20012001417f4e1bac1002000bfd0401067f200241104f044002402000410020006b410371" + "22056a220420004d0d002001210320050440200521060340200020032d00003a0000200341" + "016a2103200041016a2100200641016b22060d000b0b200541016b4107490d000340200020" + "032d00003a0000200041016a200341016a2d00003a0000200041026a200341026a2d00003a" + "0000200041036a200341036a2d00003a0000200041046a200341046a2d00003a0000200041" + "056a200341056a2d00003a0000200041066a200341066a2d00003a0000200041076a200341" + "076a2d00003a0000200341086a2103200041086a22002004470d000b0b2004200220056b22" + "07417c7122086a21000240200120056a2206410371450440200020044d0d01200621010340" + "20042001280200360200200141046a2101200441046a22042000490d000b0c010b20002004" + "4d0d002006410374220541187121032006417c71220241046a2101410020056b4118712105" + "200228020021020340200420022003762001280200220220057472360200200141046a2101" + "200441046a22042000490d000b0b20074103712102200620086a21010b0240200020002002" + "6a22064f0d002002410771220304400340200020012d00003a0000200141016a2101200041" + "016a2100200341016b22030d000b0b200241016b4107490d000340200020012d00003a0000" + "200041016a200141016a2d00003a0000200041026a200141026a2d00003a0000200041036a" + "200141036a2d00003a0000200041046a200141046a2d00003a0000200041056a200141056a" + "2d00003a0000200041066a200141066a2d00003a0000200041076a200141076a2d00003a00" + "00200141086a2101200041086a22002006470d000b0b0b0b8b0b0100418080c0000b810b65" + "72726f725f636f64653d47657474696e67206669656c643a204669656c6420646174613a20" + "4572726f722067657474696e67206669656c643a204572726f723a204572726f7220676574" + "74696e67206b65796c65743a202424242424205354415254494e47205741534d2045584543" + "5554494f4e2024242424244163636f756e743a44657374696e6174696f6e3a4163636f756e" + "744163636f756e74206f626a656374206578697374732c2070726f63656564696e67207769" + "746820657363726f772066696e6973682e54727573746c696e6554727573746c696e65206f" + "626a656374206578697374732c2070726f63656564696e67207769746820657363726f7720" + "66696e6973682e414d4d414d4d206f626a656374206578697374732c2070726f6365656469" + "6e67207769746820657363726f772066696e6973682e436865636b436865636b206f626a65" + "6374206578697374732c2070726f63656564696e67207769746820657363726f772066696e" + "6973682e7465726d73616e64636f6e646974696f6e7343726564656e7469616c4372656465" + "6e7469616c206f626a656374206578697374732c2070726f63656564696e67207769746820" + "657363726f772066696e6973682e44656c656761746544656c6567617465206f626a656374" + "206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973" + "682e4465706f736974507265617574684465706f73697450726561757468206f626a656374" + "206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973" + "682e444944444944206f626a656374206578697374732c2070726f63656564696e67207769" + "746820657363726f772066696e6973682e457363726f77457363726f77206f626a65637420" + "6578697374732c2070726f63656564696e67207769746820657363726f772066696e697368" + "2e4d505449737375616e63654d505449737375616e6365206f626a65637420657869737473" + "2c2070726f63656564696e67207769746820657363726f772066696e6973682e4d50546f6b" + "656e4d50546f6b656e206f626a656374206578697374732c2070726f63656564696e672077" + "69746820657363726f772066696e6973682e4e46546f6b656e4f666665724e46546f6b656e" + "4f66666572206f626a656374206578697374732c2070726f63656564696e67207769746820" + "657363726f772066696e6973682e4f666665724f66666572206f626a656374206578697374" + "732c2070726f63656564696e67207769746820657363726f772066696e6973682e50617943" + "68616e6e656c5061794368616e6e656c206f626a656374206578697374732c2070726f6365" + "6564696e67207769746820657363726f772066696e6973682e5065726d697373696f6e6564" + "446f6d61696e5065726d697373696f6e6564446f6d61696e206f626a656374206578697374" + "732c2070726f63656564696e67207769746820657363726f772066696e6973682e5369676e" + "65724c6973745369676e65724c697374206f626a656374206578697374732c2070726f6365" + "6564696e67207769746820657363726f772066696e6973682e5469636b65745469636b6574" + "206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f" + "772066696e6973682e5661756c745661756c74206f626a656374206578697374732c207072" + "6f63656564696e67207769746820657363726f772066696e6973682e43757272656e742073" + "65712076616c75653a456e636f756e7465726564206572726f725f636f64653a4279746520" + "61727261792077617320657870656374656420746f20686176652074686973206d616e7920" + "62797465733a2042797465206172726179206861642074686973206d616e79206279746573" + "3a20004d0970726f64756365727302086c616e6775616765010452757374000c70726f6365" + "737365642d6279010572757374631d312e38352e3120283465623136313235302032303235" + "2d30332d31352900490f7461726765745f6665617475726573042b0f6d757461626c652d67" + "6c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d75" + "6c746976616c7565"; + +extern std::string const codecovTestsWasmHex = + "0061736d0100000001570b60047f7f7f7f017f60057f7f7f7f7f017f60027f7f017f60067f" + "7f7f7f7f7f017f6000017f60037f7f7f017f60017f017f60087f7f7f7f7f7f7f7f017f6003" + "7f7f7e017f60077f7f7f7f7f7f7f017f60047f7f7f7f0002e70b3408686f73745f6c696205" + "7472616365000108686f73745f6c69620974726163655f6e756d000808686f73745f6c6962" + "0e6765745f6c65646765725f73716e000408686f73745f6c6962166765745f706172656e74" + "5f6c65646765725f74696d65000408686f73745f6c6962166765745f706172656e745f6c65" + "646765725f68617368000208686f73745f6c6962176765745f6c65646765725f6163636f75" + "6e745f68617368000208686f73745f6c6962126765745f6c65646765725f74785f68617368" + "000208686f73745f6c69620c6765745f626173655f666565000408686f73745f6c69621161" + "6d656e646d656e745f656e61626c6564000208686f73745f6c69620c6765745f74785f6669" + "656c64000508686f73745f6c69620e6163636f756e745f6b65796c6574000008686f73745f" + "6c69621063616368655f6c65646765725f6f626a000508686f73745f6c69621c6765745f63" + "757272656e745f6c65646765725f6f626a5f6669656c64000508686f73745f6c6962146765" + "745f6c65646765725f6f626a5f6669656c64000008686f73745f6c6962136765745f74785f" + "6e65737465645f6669656c64000008686f73745f6c6962236765745f63757272656e745f6c" + "65646765725f6f626a5f6e65737465645f6669656c64000008686f73745f6c69621b676574" + "5f6c65646765725f6f626a5f6e65737465645f6669656c64000108686f73745f6c69621067" + "65745f74785f61727261795f6c656e000608686f73745f6c6962206765745f63757272656e" + "745f6c65646765725f6f626a5f61727261795f6c656e000608686f73745f6c696218676574" + "5f6c65646765725f6f626a5f61727261795f6c656e000208686f73745f6c6962176765745f" + "74785f6e65737465645f61727261795f6c656e000208686f73745f6c6962276765745f6375" + "7272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e00020868" + "6f73745f6c69621f6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c" + "656e000508686f73745f6c69620b7570646174655f64617461000208686f73745f6c696213" + "636f6d707574655f7368613531325f68616c66000008686f73745f6c696209636865636b5f" + "736967000308686f73745f6c6962076765745f6e6674000308686f73745f6c69620e676574" + "5f6e66745f697373756572000008686f73745f6c69620d6765745f6e66745f7461786f6e00" + "0008686f73745f6c69620d6765745f6e66745f666c616773000208686f73745f6c69621467" + "65745f6e66745f7472616e736665725f666565000208686f73745f6c69620e6765745f6e66" + "745f73657269616c000008686f73745f6c69620d74726163655f6163636f756e7400000868" + "6f73745f6c69620c74726163655f616d6f756e74000008686f73745f6c69620b6c696e655f" + "6b65796c6574000708686f73745f6c69620a616d6d5f6b65796c6574000308686f73745f6c" + "69621163726564656e7469616c5f6b65796c6574000708686f73745f6c69620e6d70746f6b" + "656e5f6b65796c6574000308686f73745f6c69620c636865636b5f6b65796c657400010868" + "6f73745f6c69620f64656c65676174655f6b65796c6574000308686f73745f6c6962166465" + "706f7369745f707265617574685f6b65796c6574000308686f73745f6c69620a6469645f6b" + "65796c6574000008686f73745f6c69620d657363726f775f6b65796c6574000108686f7374" + "5f6c6962136d70745f69737375616e63655f6b65796c6574000108686f73745f6c6962106e" + "66745f6f666665725f6b65796c6574000108686f73745f6c69620c6f666665725f6b65796c" + "6574000108686f73745f6c69620d6f7261636c655f6b65796c6574000108686f73745f6c69" + "620e7061796368616e5f6b65796c6574000908686f73745f6c69621a7065726d697373696f" + "6e65645f646f6d61696e5f6b65796c6574000108686f73745f6c69620e7369676e6572735f" + "6b65796c6574000008686f73745f6c69620d7469636b65745f6b65796c6574000108686f73" + "745f6c69620c7661756c745f6b65796c657400010303020a0405030100110619037f014180" + "80c0000b7f0041959ac0000b7f0041a09ac0000b072e04066d656d6f727902000666696e69" + "736800350a5f5f646174615f656e6403010b5f5f686561705f6261736503020a8026024600" + "0240200020014704402002200341004100410010001a20004100480d01418b80c000410b20" + "00ad1001000b200220032000ac10011a0f0b418b80c000410b2000ac1001000bb62502087f" + "027e230041f0016b22002400419680c000412341004100410010001a100241b9e00041b980" + "c000410e1034100341b2920441c780c00041161034200041f8006a22044200370300200041" + "f0006a22034200370300200041e8006a2202420037030020004200370360200041e0006a22" + "0141201004412041e48ac00041161034200442003703002003420037030020024200370300" + "20004200370360200141201005412041fa8ac0004117103420044200370300200342003703" + "002002420037030020004200370360200141201006412041918bc000411210341007410a41" + "dd80c000410c1034200041206a428182848890a0c08001370300200041186a428182848890" + "a0c08001370300200041106a428182848890a0c080013703002000428182848890a0c08001" + "37030841e980c000410e1008410141f780c00041111034200041086a41201008410141f780" + "c0004111103420034100360200200242003703002000420037036002404181802020014114" + "1009220541144604402000412e6a20002d00623a0000200020002900673703c80120002000" + "41ec006a2900003700cd01200041386a20002900cd01370000200020002f01603b012c2000" + "200028006336002f200020002903c801370033200442003703002003420037030020024200" + "370300200042003703602000412c6a411420014120100a22044120470d01200041c2006a20" + "002d00623a0000200041d0016a200041ef006a2900002208370300200041d8016a200041f7" + "006a2900002209370300200041cf006a2008370000200041d7006a2009370000200041df00" + "6a200041ff006a2d00003a0000200020002f01603b01402000200028006336004320002000" + "290067370047200041406b41204100100b4101418881c00041101034200341003602002002" + "4200370300200042003703604181802020014114100c411441a38bc000411c103420034100" + "360200200242003703002000420037036041014181802020014114100d411441bf8bc00041" + "14103402402001410020016b41037122036a220220014d0d00200304402003210403402001" + "41003a0000200141016a2101200441016b22040d000b0b200341016b4107490d0003402001" + "41003a0000200141076a41003a0000200141066a41003a0000200141056a41003a00002001" + "41046a41003a0000200141036a41003a0000200141026a41003a0000200141016a41003a00" + "00200141086a22012002470d000b0b200241c40020036b2203417c716a220120024b044003" + "4020024100360200200241046a22022001490d000b0b024020012003410371220320016a22" + "044f0d002003220204400340200141003a0000200141016a2101200241016b22020d000b0b" + "200341016b4107490d000340200141003a0000200141076a41003a0000200141066a41003a" + "0000200141056a41003a0000200141046a41003a0000200141036a41003a0000200141026a" + "41003a0000200141016a41003a0000200141086a22012004470d000b0b2000418180203602" + "c801410021010340200741c000490440200041e0006a20076a200041c8016a20016a2d0000" + "3a0000200020002802a00141016a22073602a001200141016a22014104470d010b0b200041" + "d8016a22024100360200200041d0016a22054200370300200042003703c801200041e0006a" + "22012007200041c8016a22044114100e411441d38bc0004113103420024100360200200542" + "00370300200042003703c801200120002802a00120044114100f411441e68bc00041231034" + "2002410036020020054200370300200042003703c8014101200120002802a0012004411410" + "10411441898cc000411b10344189803c10114120419881c000411010344189803c10124120" + "41a881c0004120103441014189803c1013412041c881c00041181034200120002802a00110" + "14412041e081c00041171034200120002802a0011015412041f781c0004127103441012001" + "20002802a00110164120419e82c000411f10342000412c6a220341141017410041bd82c000" + "410b1034200041e0016a220742003703002002420037030020054200370300200042003703" + "c801200120002802a001200441201018412041a48cc0004113103441c882c000410c41d482" + "c000410b41df82c000410e1019410141ed82c00041091034200041c0016a200041206a2903" + "00370300200041b8016a200041186a290300370300200041b0016a200041106a2903003703" + "00200020002903083703a801200241003b010020054200370300200042003703c801200341" + "14200041a8016a2206412020044112101a411241b78cc00041071034200241003602002005" + "4200370300200042003703c8012006412020044114101b411441be8cc000410e1034200041" + "003602c8012006412020044104101c410441cc8cc000410d103420064120101d410841f682" + "c000410d103420064120101e410a418383c00041141034200041003602c801200641202004" + "4104101f410441d98cc000410e1034419783c000410d200341141020412f41a483c000410d" + "1034419783c000410d41b183c00041081021411341b983c000410c1034417f410410044171" + "41c583c000411e1034200041003602c8012004417f1004417141e78cc000411e1034200041" + "ca016a41003a0000200041003b01c801200441031004417d41858dc0004124103420004100" + "3602c8012004418094ebdc031004417341a98dc00041231034419783c000410d2003411410" + "20412f41a483c000410d1034419783c000410d41b183c00041081021411341b983c000410c" + "103441021011416f41e383c000411f1034417f20002802a00110144171418284c000411f10" + "342001417f1014417141a184c000411f103420014181201014417441c084c0004120103420" + "0041e094ebdc036a220620002802a0011014417341e084c000411f1034200620002802a001" + "4101100b417341ff84c00041181034200120002802a0014101100b4171419785c000411a10" + "34200742003703002002420037030020054200370300200042003703c801200620002802a0" + "0120044120100a417341cc8dc0004116103420074200370300200242003703002005420037" + "0300200042003703c801200120002802a00120044120100a417141e28dc000411810342007" + "42003703002002420037030020054200370300200042003703c80120034114200341142006" + "20002802a001200441201022417341fa8dc000411c10342007420037030020024200370300" + "20054200370300200042003703c8012003411420034114200120002802a001200441201022" + "417141968ec000411e10342007420037030020024200370300200542003703002000420037" + "03c80141819ac0004114200620002802a001200441201023417341b48ec000411910342007" + "42003703002002420037030020054200370300200042003703c80141819ac0004114200120" + "002802a001200441201023417141cd8ec000411f1034200742003703002002420037030020" + "054200370300200042003703c80141819ac000411441b185c0004114200441201023417141" + "ec8ec00041291034200041dc016a2000413c6a280100360200200041d4016a200041346a29" + "01003702002000200029012c3702cc01200041808080083602c801200041003b01ec012004" + "411841819ac0004114200041ec016a220241021023417141958fc000410e10342006200028" + "02a001422a1001417341c585c00041111034200041003b01ec014102200241021009416f41" + "a38fc000411b1034200041003b01ec01410220024102100c416f41be8fc000412b10342000" + "41003b01ec014101410220024102100d416f41e98fc0004123103441021011416f41e383c0" + "00411f103441021012416f41d685c000412f1034410141021013416f418586c00041271034" + "41e980c0004181201008417441ac86c000411f103441e980c00041c1001008417441cb86c0" + "00411a1034200041003b01ec01200141812020024102100e4174418c90c000412110342000" + "41003b01ec01200141812020024102100f417441ad90c00041311034200041003b01ec0141" + "012001418120200241021010417441de90c0004129103420014181201014417441e586c000" + "41251034200141812010154174418a87c00041351034410120014181201016417441bf87c0" + "00412d103420014181201017417441ec87c00041191034419783c00041812041d482c00041" + "0b41df82c000410e1019417441ed82c00041091034419783c000410d41d482c00041812041" + "df82c000410e1019417441ed82c00041091034419783c000410d41d482c000410b41df82c0" + "004181201019417441ed82c00041091034200041003b01ec01200141812020024102101841" + "74418791c00041211034200041003b01ec0141819ac00041812041819ac000411420024102" + "1023417441a891c00041181034200041003b01ec0120034114200341142001418120200241" + "021024417441c091c000411f1034200041003b01ec01200441812020034114200241021025" + "417441df91c00041221034419783c000410d200620002802a001410010004173418588c000" + "410f1034419783c000410d200620002802a00110214173419488c000411610342001200028" + "02a0014100100b417141aa88c00041231034200041003b01ec0120034114200120002802a0" + "0120024102101a4171418192c000411a1034200041003b01ec01200120002802a001200241" + "02101b4171419b92c00041211034200041003b01ec01200120002802a00120024102101c41" + "7141bc92c00041201034200120002802a001101d417141cd88c00041201034200120002802" + "a001101e417141ed88c00041271034200041003602ec01200120002802a00120024104101f" + "417141dc92c00041211034200041003b01ec01200120002802a00120024102100a417141fd" + "92c00041231034200041003b01ec01200120002802a0014101200241021026417141a093c0" + "0041211034200041003b01ec01200120002802a00122052003411420012005200241021024" + "417141c193c00041271034200041003b01ec0120034114200120002802a001220520012005" + "200241021024417141e893c00041271034200041003b01ec01200120002802a00120034114" + "2002410210274171418f94c00041251034200041003b01ec0120034114200120002802a001" + "200241021027417141b494c00041251034200041003b01ec01200120002802a00120034114" + "200241021028417141d994c000412c1034200041003b01ec0120034114200120002802a001" + "2002410210284171418595c000412c1034200041003b01ec01200120002802a00120024102" + "1029417141b195c000411f1034200041003b01ec01200120002802a001410120024102102a" + "417141d095c00041221034200041003b01ec01200120002802a0012003411441b185c00041" + "14200241021022417141f295c00041211034200041003b01ec0120034114200120002802a0" + "0141b185c00041142002410210224171419396c00041211034200041003b01ec0120012000" + "2802a001410120024102102b417141b496c00041281034200041003b01ec01200441182001" + "20002802a001200241021025417141dc96c00041231034200041003b01ec01200120002802" + "a001410120024102102c417141ff96c00041251034200041003b01ec01200120002802a001" + "410120024102102d417141a497c00041211034200041003b01ec01200120002802a0014101" + "20024102102e417141c597c00041221034200041003b01ec01200120002802a00120034114" + "410120024102102f417141e797c00041241034200041003b01ec0120034114200120002802" + "a001410120024102102f4171418b98c00041241034200041003b01ec01200120002802a001" + "4101200241021030417141af98c000412f1034200041003b01ec01200120002802a0012002" + "41021031417141de98c00041231034200041003b01ec01200120002802a001410120024102" + "10324171418199c00041221034200041003b01ec01200120002802a0014101200241021033" + "417141a399c00041211034200041003b01ec01200120002802a001419489c0004120200241" + "02101a417141c499c000411c1034419783c000410d200120002802a0011020417141b489c0" + "0041221034419797abdd03410d419489c000412041001000417341d689c000411010344197" + "97abdd03410d200341141020417341e689c00041181034419797abdd03410d41b183c00041" + "081021417341fe89c00041171034200120002802a001200141812041001000417441958ac0" + "00410e1034200141812042011001417441a38ac00041121034419783c00041812020034114" + "1020417441b58ac00041161034419783c00041812041b183c00041081021417441b58ac000" + "41161034419783c000410d200120002802a0011021417141cb8ac00041191034200041003b" + "01ec01200120002802a00120034114200241021025417141e099c00041211034200041f001" + "6a240041010f0b418080c000410b417f20052005417f4e1bac1001000b418080c000410b41" + "7f20042004417f4e1bac1001000b0b8b1a0100418080c0000b811a6572726f725f636f6465" + "3d54455354204641494c45442424242424205354415254494e47205741534d204558454355" + "54494f4e2024242424246765745f6c65646765725f73716e6765745f706172656e745f6c65" + "646765725f74696d656765745f626173655f666565746573745f616d656e646d656e74616d" + "656e646d656e745f656e61626c656463616368655f6c65646765725f6f626a6765745f7478" + "5f61727261795f6c656e6765745f63757272656e745f6c65646765725f6f626a5f61727261" + "795f6c656e6765745f6c65646765725f6f626a5f61727261795f6c656e6765745f74785f6e" + "65737465645f61727261795f6c656e6765745f63757272656e745f6c65646765725f6f626a" + "5f6e65737465645f61727261795f6c656e6765745f6c65646765725f6f626a5f6e65737465" + "645f61727261795f6c656e7570646174655f6461746174657374206d657373616765746573" + "74207075626b657974657374207369676e6174757265636865636b5f7369676765745f6e66" + "745f666c6167736765745f6e66745f7472616e736665725f66656574657374696e67207472" + "61636574726163655f6163636f756e74400000000000005f74726163655f616d6f756e7467" + "65745f706172656e745f6c65646765725f686173685f6e65675f7074726765745f74785f61" + "727261795f6c656e5f696e76616c69645f736669656c646765745f74785f6e65737465645f" + "61727261795f6c656e5f6e65675f7074726765745f74785f6e65737465645f61727261795f" + "6c656e5f6e65675f6c656e6765745f74785f6e65737465645f61727261795f6c656e5f746f" + "6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f7074725f6f6f62" + "63616368655f6c65646765725f6f626a5f7074725f6f6f6263616368655f6c65646765725f" + "6f626a5f77726f6e675f6c656e555344303030303030303030303030303030303074726163" + "655f6e756d5f6f6f625f7374726765745f63757272656e745f6c65646765725f6f626a5f61" + "727261795f6c656e5f696e76616c69645f736669656c646765745f6c65646765725f6f626a" + "5f61727261795f6c656e5f696e76616c69645f736669656c64616d656e646d656e745f656e" + "61626c65645f746f6f5f6269675f736c696365616d656e646d656e745f656e61626c65645f" + "746f6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f746f6f5f62" + "69675f736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e6573746564" + "5f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f6c65646765725f6f62" + "6a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963657570646174" + "655f646174615f746f6f5f6269675f736c69636574726163655f6f6f625f736c6963657472" + "6163655f616d6f756e745f6f6f625f736c69636563616368655f6c65646765725f6f626a5f" + "77726f6e675f73697a655f75696e743235366765745f6e66745f666c6167735f77726f6e67" + "5f73697a655f75696e743235366765745f6e66745f7472616e736665725f6665655f77726f" + "6e675f73697a655f75696e7432353630303030303030303030303030303030303030303030" + "3030303030303030303174726163655f6163636f756e745f77726f6e675f73697a655f6163" + "636f756e74696474726163655f6f6f625f737472696e6774726163655f6163636f756e745f" + "6f6f625f737472696e6774726163655f616d6f756e745f6f6f625f737472696e6774726163" + "655f746f6f5f6c6f6e6774726163655f6e756d5f746f6f5f6c6f6e6774726163655f616363" + "6f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f77726f6e675f6c656e6774" + "686765745f706172656e745f6c65646765725f686173686765745f6c65646765725f616363" + "6f756e745f686173686765745f6c65646765725f74785f686173686765745f63757272656e" + "745f6c65646765725f6f626a5f6669656c646765745f6c65646765725f6f626a5f6669656c" + "646765745f74785f6e65737465645f6669656c646765745f63757272656e745f6c65646765" + "725f6f626a5f6e65737465645f6669656c646765745f6c65646765725f6f626a5f6e657374" + "65645f6669656c64636f6d707574655f7368613531325f68616c666765745f6e6674676574" + "5f6e66745f6973737565726765745f6e66745f7461786f6e6765745f6e66745f7365726961" + "6c6765745f706172656e745f6c65646765725f686173685f6e65675f6c656e6765745f7061" + "72656e745f6c65646765725f686173685f6275665f746f6f5f736d616c6c6765745f706172" + "656e745f6c65646765725f686173685f6c656e5f746f6f5f6c6f6e676163636f756e745f6b" + "65796c65745f6c656e5f6f6f626163636f756e745f6b65796c65745f77726f6e675f6c656e" + "6c696e655f6b65796c65745f6c656e5f6f6f625f63757272656e63796c696e655f6b65796c" + "65745f77726f6e675f6c656e5f63757272656e6379616d6d5f6b65796c65745f6c656e5f6f" + "6f625f617373657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6c656e5f617373" + "657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6e6f6e5f7872705f6375727265" + "6e63795f6c656e616d6d5f6b65796c65745f6d70746765745f74785f6669656c645f696e76" + "616c69645f736669656c646765745f63757272656e745f6c65646765725f6f626a5f666965" + "6c645f696e76616c69645f736669656c646765745f6c65646765725f6f626a5f6669656c64" + "5f696e76616c69645f736669656c646765745f74785f6e65737465645f6669656c645f746f" + "6f5f6269675f736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e6573" + "7465645f6669656c645f746f6f5f6269675f736c6963656765745f6c65646765725f6f626a" + "5f6e65737465645f6669656c645f746f6f5f6269675f736c696365636f6d707574655f7368" + "613531325f68616c665f746f6f5f6269675f736c696365616d6d5f6b65796c65745f746f6f" + "5f6269675f736c69636563726564656e7469616c5f6b65796c65745f746f6f5f6269675f73" + "6c6963656d70746f6b656e5f6b65796c65745f746f6f5f6269675f736c6963655f6d707469" + "646765745f6e66745f77726f6e675f73697a655f75696e743235366765745f6e66745f6973" + "737565725f77726f6e675f73697a655f75696e743235366765745f6e66745f7461786f6e5f" + "77726f6e675f73697a655f75696e743235366765745f6e66745f73657269616c5f77726f6e" + "675f73697a655f75696e743235366163636f756e745f6b65796c65745f77726f6e675f7369" + "7a655f6163636f756e746964636865636b5f6b65796c65745f77726f6e675f73697a655f61" + "63636f756e74696463726564656e7469616c5f6b65796c65745f77726f6e675f73697a655f" + "6163636f756e7469643163726564656e7469616c5f6b65796c65745f77726f6e675f73697a" + "655f6163636f756e7469643264656c65676174655f6b65796c65745f77726f6e675f73697a" + "655f6163636f756e7469643164656c65676174655f6b65796c65745f77726f6e675f73697a" + "655f6163636f756e746964326465706f7369745f707265617574685f6b65796c65745f7772" + "6f6e675f73697a655f6163636f756e746964316465706f7369745f707265617574685f6b65" + "796c65745f77726f6e675f73697a655f6163636f756e746964326469645f6b65796c65745f" + "77726f6e675f73697a655f6163636f756e746964657363726f775f6b65796c65745f77726f" + "6e675f73697a655f6163636f756e7469646c696e655f6b65796c65745f77726f6e675f7369" + "7a655f6163636f756e746964316c696e655f6b65796c65745f77726f6e675f73697a655f61" + "63636f756e746964326d70745f69737375616e63655f6b65796c65745f77726f6e675f7369" + "7a655f6163636f756e7469646d70746f6b656e5f6b65796c65745f77726f6e675f73697a65" + "5f6163636f756e7469646e66745f6f666665725f6b65796c65745f77726f6e675f73697a65" + "5f6163636f756e7469646f666665725f6b65796c65745f77726f6e675f73697a655f616363" + "6f756e7469646f7261636c655f6b65796c65745f77726f6e675f73697a655f6163636f756e" + "7469647061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e7469" + "64317061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e746964" + "327065726d697373696f6e65645f646f6d61696e5f6b65796c65745f77726f6e675f73697a" + "655f6163636f756e7469647369676e6572735f6b65796c65745f77726f6e675f73697a655f" + "6163636f756e7469647469636b65745f6b65796c65745f77726f6e675f73697a655f616363" + "6f756e7469647661756c745f6b65796c65745f77726f6e675f73697a655f6163636f756e74" + "69646765745f6e66745f77726f6e675f73697a655f6163636f756e7469646d70746f6b656e" + "5f6b65796c65745f6d707469645f77726f6e675f6c656e677468004d0970726f6475636572" + "7302086c616e6775616765010452757374000c70726f6365737365642d6279010572757374" + "631d312e38352e31202834656231363132353020323032352d30332d31352900490f746172" + "6765745f6665617475726573042b0f6d757461626c652d676c6f62616c732b087369676e2d" + "6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; + +extern std::string const floatTestsWasmHex = + "0061736d0100000001430860057f7f7f7f7f017f60047e7f7f7f017f60047f7f7f7f017f60" + "057f7e7f7f7f017f60077f7f7f7f7f7f7f017f60067f7f7f7f7f7f017f60037f7f7e017f60" + "00017f02c9020e08686f73745f6c6962057472616365000008686f73745f6c69620e666c6f" + "61745f66726f6d5f696e74000108686f73745f6c69620f666c6f61745f66726f6d5f75696e" + "74000008686f73745f6c69621274726163655f6f70617175655f666c6f6174000208686f73" + "745f6c696209666c6f61745f736574000308686f73745f6c69620d666c6f61745f636f6d70" + "617265000208686f73745f6c696209666c6f61745f616464000408686f73745f6c69620e66" + "6c6f61745f7375627472616374000408686f73745f6c69620e666c6f61745f6d756c746970" + "6c79000408686f73745f6c69620c666c6f61745f646976696465000408686f73745f6c6962" + "09666c6f61745f706f77000508686f73745f6c69620974726163655f6e756d000608686f73" + "745f6c69620a666c6f61745f726f6f74000508686f73745f6c696209666c6f61745f6c6f67" + "00000302010705030100110619037f01418080c0000b7f0041b48ac0000b7f0041c08ac000" + "0b072e04066d656d6f727902000666696e697368000e0a5f5f646174615f656e6403010b5f" + "5f686561705f6261736503020acf1301cc1301027f23808080800041206b22002480808080" + "00418080c08000411d4100410041001080808080001a2000420037031002400240428ce000" + "200041106a410841001081808080004108470d00419d80c080004117200041106a41084101" + "1080808080001a0c010b41b480c08000411e4100410041001080808080001a0b2000428ce0" + "0037031802400240200041186a4108200041106a410841001082808080004108470d0041d2" + "80c080004117200041106a41081083808080001a0c010b41e980c08000411e410041004100" + "1080808080001a0b02400240410242fb00200041106a410841001084808080004108470d00" + "418781c080004121200041106a41081083808080001a0c010b41a881c08000412641004100" + "41001080808080001a0b41ce81c08000411541e381c0800041081083808080001a41f381c0" + "8000411641eb81c0800041081083808080001a418982c08000411b41004100410010808080" + "80001a20004200370318024002404201200041186a410841001081808080004108470d0041" + "a482c08000410f200041186a41081083808080001a0c010b41b382c0800041164100410041" + "001080808080001a0b02400240200041186a410841e381c0800041081085808080000d0041" + "c982c08000411b4100410041001080808080001a0c010b41e482c08000411b410041004100" + "1080808080001a0b02400240200041186a410841eb81c0800041081085808080004101470d" + "0041ff82c0800041234100410041001080808080001a0c010b41a283c08000412441004100" + "41001080808080001a0b0240024041eb81c080004108200041186a41081085808080004102" + "470d0041c683c0800041234100410041001080808080001a0c010b41e983c0800041244100" + "410041001080808080001a0b418d84c0800041204100410041001080808080001a200042d4" + "87b6f4c7d4b1c000370310410921010340200041106a410841e381c080004108200041106a" + "410841001086808080001a2001417f6a22010d000b20004200370318420a200041186a4108" + "41001081808080001a02400240200041186a4108200041106a41081085808080000d0041ad" + "84c0800041144100410041001080808080001a0c010b41c184c08000411341004100410010" + "80808080001a0b410b21010340200041106a410841e381c080004108200041106a41084100" + "1087808080001a2001417f6a22010d000b02400240200041106a410841eb81c08000410810" + "85808080000d0041d484c0800041194100410041001080808080001a0c010b41ed84c08000" + "41184100410041001080808080001a0b418585c0800041234100410041001080808080001a" + "20004200370300420a2000410841001081808080001a200042d487b6f4c7d4b1c000370308" + "410621010340200041086a410820004108200041086a410841001088808080001a2001417f" + "6a22010d000b2000420037031042c0843d200041106a410841001081808080001a02400240" + "200041106a4108200041086a41081085808080000d0041a885c08000411941004100410010" + "80808080001a0c010b41c185c0800041184100410041001080808080001a0b410721010340" + "200041086a410820004108200041086a410841001089808080001a2001417f6a22010d000b" + "20004200370318417f4201200041186a410841001084808080001a02400240200041086a41" + "08200041186a41081085808080000d0041d985c0800041174100410041001080808080001a" + "0c010b41f085c0800041164100410041001080808080001a0b418686c08000411741004100" + "41001080808080001a2000420037030841e381c0800041084103200041086a41084100108a" + "808080001a419d86c080004112200041086a41081083808080001a41eb81c0800041084106" + "200041086a41084100108a808080001a41af86c080004118200041086a4108108380808000" + "1a200042003703104209200041106a410841001081808080001a200041106a410841022000" + "41086a41084100108a808080001a41c786c080004114200041086a41081083808080001a20" + "0041106a41084100200041086a41084100108a808080001a41db86c080004117200041086a" + "41081083808080001a200042003703184200200041186a410841001081808080001a200041" + "186a41084102200041086a41084100108a808080001a41f286c080004114200041086a4108" + "1083808080001a418687c080004138200041186a41084100200041086a41084100108a8080" + "8000ac108b808080001a41be87c0800041184100410041001080808080001a200042003703" + "084209200041086a410841001081808080001a20004200370310200041086a410841022000" + "41106a41084100108c808080001a41d687c080004112200041106a41081083808080001a20" + "0041086a41084103200041106a41084100108c808080001a41e887c080004112200041106a" + "41081083808080001a2000420037031842c0843d200041186a410841001081808080001a20" + "0041186a41084103200041106a41084100108c808080001a41fa87c080004118200041106a" + "41081083808080001a200041186a41084106200041106a41084100108c808080001a419288" + "c08000411c200041106a41081083808080001a41ae88c08000411741004100410010808080" + "80001a2000420037031042c0843d200041106a410841001081808080001a20004200370318" + "200041106a4108200041186a41084100108d808080001a41c588c080004114200041186a41" + "081083808080001a41d988c08000411a4100410041001080808080001a2000420037031841" + "e381c08000410841eb81c080004108200041186a410841001088808080001a0240024041eb" + "81c080004108200041186a41081085808080000d0041f388c0800041164100410041001080" + "808080001a0c010b418989c0800041154100410041001080808080001a0b41eb81c0800041" + "0841eb81c080004108200041186a410841001088808080001a0240024041e381c080004108" + "200041186a41081085808080000d00419e89c0800041174100410041001080808080001a0c" + "010b41b589c0800041164100410041001080808080001a0b41cb89c08000411a4100410041" + "001080808080001a2000420037031020004200370318420a200041186a4108410010818080" + "80001a41e381c080004108200041186a4108200041106a410841001089808080001a41e589" + "c080004119200041106a41081083808080001a41e381c080004108200041106a4108200041" + "106a410841001089808080001a41fe89c08000410f200041106a41081083808080001a0240" + "0240200041186a4108200041106a41081085808080000d00418d8ac0800041144100410041" + "001080808080001a0c010b41a18ac0800041134100410041001080808080001a0b20004120" + "6a24808080800041010b0bbe0a0100418080c0000bb40a0a24242420746573745f666c6f61" + "745f66726f6d5f7761736d202424242020666c6f61742066726f6d20693634203132333030" + "3a2020666c6f61742066726f6d206936342031323330303a206661696c65642020666c6f61" + "742066726f6d207536342031323330303a2020666c6f61742066726f6d2075363420313233" + "30303a206661696c65642020666c6f61742066726f6d2065787020322c206d616e74697373" + "61203132333a2020666c6f61742066726f6d2065787020322c206d616e746973736120333a" + "206661696c65642020666c6f61742066726f6d20636f6e737420313ad4838d7ea4c6800094" + "838d7ea4c680002020666c6f61742066726f6d20636f6e7374202d313a0a24242420746573" + "745f666c6f61745f636f6d70617265202424242020666c6f61742066726f6d20313a202066" + "6c6f61742066726f6d20313a206661696c65642020666c6f61742066726f6d2031203d3d20" + "464c4f41545f4f4e452020666c6f61742066726f6d203120213d20464c4f41545f4f4e4520" + "20666c6f61742066726f6d2031203e20464c4f41545f4e454741544956455f4f4e45202066" + "6c6f61742066726f6d203120213e20464c4f41545f4e454741544956455f4f4e452020464c" + "4f41545f4e454741544956455f4f4e45203c20666c6f61742066726f6d20312020464c4f41" + "545f4e454741544956455f4f4e4520213c20666c6f61742066726f6d20310a242424207465" + "73745f666c6f61745f6164645f737562747261637420242424202072657065617465642061" + "64643a20676f6f6420207265706561746564206164643a2062616420207265706561746564" + "2073756274726163743a20676f6f64202072657065617465642073756274726163743a2062" + "61640a24242420746573745f666c6f61745f6d756c7469706c795f64697669646520242424" + "20207265706561746564206d756c7469706c793a20676f6f6420207265706561746564206d" + "756c7469706c793a2062616420207265706561746564206469766964653a20676f6f642020" + "7265706561746564206469766964653a206261640a24242420746573745f666c6f61745f70" + "6f77202424242020666c6f61742063756265206f6620313a2020666c6f6174203674682070" + "6f776572206f66202d313a2020666c6f617420737175617265206f6620393a2020666c6f61" + "742030746820706f776572206f6620393a2020666c6f617420737175617265206f6620303a" + "2020666c6f61742030746820706f776572206f6620302028657870656374696e6720494e56" + "414c49445f504152414d53206572726f72293a0a24242420746573745f666c6f61745f726f" + "6f74202424242020666c6f61742073717274206f6620393a2020666c6f6174206362727420" + "6f6620393a2020666c6f61742063627274206f6620313030303030303a2020666c6f617420" + "36746820726f6f74206f6620313030303030303a0a24242420746573745f666c6f61745f6c" + "6f672024242420206c6f675f3130206f6620313030303030303a0a24242420746573745f66" + "6c6f61745f6e65676174652024242420206e656761746520636f6e737420313a20676f6f64" + "20206e656761746520636f6e737420313a2062616420206e656761746520636f6e7374202d" + "313a20676f6f6420206e656761746520636f6e7374202d313a206261640a24242420746573" + "745f666c6f61745f696e76657274202424242020696e76657274206120666c6f6174206672" + "6f6d2031303a2020696e7665727420616761696e3a2020696e766572742074776963653a20" + "676f6f642020696e766572742074776963653a20626164009c06046e616d65001110666c6f" + "61745f74657374732e7761736d01e1050f002b5f5a4e387872706c5f73746434686f737435" + "7472616365313768303332393563316538663365373233614501355f5a4e387872706c5f73" + "746434686f73743134666c6f61745f66726f6d5f696e743137683032306436373439326164" + "39346333304502365f5a4e387872706c5f73746434686f73743135666c6f61745f66726f6d" + "5f75696e74313768346166373638366538353062383432364503395f5a4e387872706c5f73" + "746434686f7374313874726163655f6f70617175655f666c6f617431376831396639386666" + "35663362313932336245042f5f5a4e387872706c5f73746434686f737439666c6f61745f73" + "6574313768323964346230383964626561326664624505345f5a4e387872706c5f73746434" + "686f73743133666c6f61745f636f6d70617265313768346362313239626634623330373233" + "6445062f5f5a4e387872706c5f73746434686f737439666c6f61745f616464313768383661" + "336165636435336234643937374507355f5a4e387872706c5f73746434686f73743134666c" + "6f61745f7375627472616374313768653033313036323931393464333931364508355f5a4e" + "387872706c5f73746434686f73743134666c6f61745f6d756c7469706c7931376830323839" + "3337633039656534323630644509335f5a4e387872706c5f73746434686f73743132666c6f" + "61745f64697669646531376834363036323038303562623237353632450a2f5f5a4e387872" + "706c5f73746434686f737439666c6f61745f706f7731376833326463303662646430303338" + "626331450b2f5f5a4e387872706c5f73746434686f73743974726163655f6e756d31376830" + "336535336633646539393463633033450c315f5a4e387872706c5f73746434686f73743130" + "666c6f61745f726f6f7431376863656632313139376565656136653630450d2f5f5a4e3878" + "72706c5f73746434686f737439666c6f61745f6c6f67313768323530663038303633353663" + "35653639450e0666696e697368071201000f5f5f737461636b5f706f696e746572090a0100" + "072e726f64617461004d0970726f64756365727302086c616e677561676501045275737400" + "0c70726f6365737365642d6279010572757374631d312e38382e3020283662303062633338" + "3820323032352d30362d3233290094010f7461726765745f6665617475726573082b0b6275" + "6c6b2d6d656d6f72792b0f62756c6b2d6d656d6f72792d6f70742b1663616c6c2d696e6469" + "726563742d6f7665726c6f6e672b0a6d756c746976616c75652b0f6d757461626c652d676c" + "6f62616c732b136e6f6e7472617070696e672d6670746f696e742b0f7265666572656e6365" + "2d74797065732b087369676e2d657874"; + +extern std::string const float0Hex = + "0061736d0100000001290560057f7f7f7f7f017f60047e7f7f7f017f6007" + "7f7f7f7f7f7f7f017f60047f7f7f7f017f6000017f025f0408686f73745f" + "6c6962057472616365000008686f73745f6c69620e666c6f61745f66726f" + "6d5f696e74000108686f73745f6c69620e666c6f61745f73756274726163" + "74000208686f73745f6c69620d666c6f61745f636f6d7061726500030302" + "010405030100110619037f01418080c0000b7f00419281c0000b7f0041a0" + "81c0000b072e04066d656d6f727902000666696e69736800040a5f5f6461" + "74615f656e6403010b5f5f686561705f6261736503020abe0201bb020101" + "7f23808080800041206b2200248080808000418080c08000411541004100" + "41001080808080001a200042003703084200200041086a41084100108180" + "8080001a20004200370310420a200041106a410841001081808080001a20" + "0042003703180240200041106a4108200041106a4108200041186a410841" + "001082808080004108460d00419580c08000411541004100410010808080" + "80001a0b02400240200041086a4108200041186a41081083808080000d00" + "41aa80c0800041174100410041001080808080001a0c010b41c180c08000" + "41164100410041001080808080001a0b02400240200041086a410841d780" + "c0800041081083808080000d0041df80c08000411a410041004100108080" + "8080001a0c010b41f980c0800041194100410041001080808080001a0b20" + "0041206a24808080800041010b0b9c010100418080c0000b92010a242424" + "20746573745f666c6f61745f30202424242020666c6f61742031302d3130" + "3a206661696c65642020666c6f6174203020636f6d706172653a20676f6f" + "642020666c6f6174203020636f6d706172653a2062616480000000000000" + "002020464c4f41545f5a45524f20636f6d706172653a20676f6f64202046" + "4c4f41545f5a45524f20636f6d706172653a20626164009502046e616d65" + "001110666c6f61745f74657374732e7761736d01da0105002b5f5a4e3878" + "72706c5f73746434686f7374357472616365313768616338383262323664" + "656162656436364501355f5a4e387872706c5f73746434686f7374313466" + "6c6f61745f66726f6d5f696e743137683032343066386533613839643139" + "39654502355f5a4e387872706c5f73746434686f73743134666c6f61745f" + "737562747261637431376864363430633135323334353432393563450334" + "5f5a4e387872706c5f73746434686f73743133666c6f61745f636f6d7061" + "72653137683663386465656231323864393638386645040666696e697368" + "071201000f5f5f737461636b5f706f696e746572090a0100072e726f6461" + "7461004d0970726f64756365727302086c616e6775616765010452757374" + "000c70726f6365737365642d6279010572757374631d312e38392e302028" + "32393438333838336520323032352d30382d3034290094010f7461726765" + "745f6665617475726573082b0b62756c6b2d6d656d6f72792b0f62756c6b" + "2d6d656d6f72792d6f70742b1663616c6c2d696e6469726563742d6f7665" + "726c6f6e672b0a6d756c746976616c75652b0f6d757461626c652d676c6f" + "62616c732b136e6f6e7472617070696e672d6670746f696e742b0f726566" + "6572656e63652d74797065732b087369676e2d657874"; + +extern std::string const disabledFloatHex = + "0061736d010000000108026000006000017f03030200010503010002063e" + "0a7f004180080b7f004180080b7f004180100b7f004180100b7f00418090" + "040b7f004180080b7f00418090040b7f00418080080b7f0041000b7f0041" + "010b07b0010d066d656d6f72790200115f5f7761736d5f63616c6c5f6374" + "6f727300000666696e69736800010362756603000c5f5f64736f5f68616e" + "646c6503010a5f5f646174615f656e6403020b5f5f737461636b5f6c6f77" + "03030c5f5f737461636b5f6869676803040d5f5f676c6f62616c5f626173" + "6503050b5f5f686561705f6261736503060a5f5f686561705f656e640307" + "0d5f5f6d656d6f72795f6261736503080c5f5f7461626c655f6261736503" + "090a150202000b100043000000c54300200045921a41010b"; diff --git a/src/test/app/wasm_fixtures/fixtures.h b/src/test/app/wasm_fixtures/fixtures.h new file mode 100644 index 0000000000..0e7e3785ea --- /dev/null +++ b/src/test/app/wasm_fixtures/fixtures.h @@ -0,0 +1,52 @@ +//------------------------------------------------------------------------------ +/* + This file is part of rippled: https://github.com/ripple/rippled + Copyright (c) 2025 Ripple Labs Inc. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ +//============================================================================== + +#pragma once + +// TODO: consider moving these to separate files (and figure out the build) + +#include + +extern std::string const ledgerSqnWasmHex; + +extern std::string const allHostFunctionsWasmHex; + +extern std::string const deepRecursionHex; + +extern std::string const fibWasmHex; + +extern std::string const b58WasmHex; + +extern std::string const sha512PureWasmHex; + +extern std::string const zkProofWasmHex; + +extern std::string const sp1WasmHex; + +extern std::string const hfPerfTest; + +extern std::string const allKeyletsWasmHex; + +extern std::string const codecovTestsWasmHex; + +extern std::string const floatTestsWasmHex; + +extern std::string const float0Hex; + +extern std::string const disabledFloatHex; From 1b6312afb3b2f12a6db948f9f49cd9d739329709 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 11 Sep 2025 16:34:03 -0400 Subject: [PATCH 012/137] rearrange files --- .../{wasm_fixtures => }/.gitignore | 0 .../all_host_functions/Cargo.lock | 0 .../all_host_functions/Cargo.toml | 0 .../all_host_functions/src/lib.rs | 0 .../all_keylets/Cargo.lock | 0 .../all_keylets/Cargo.toml | 0 .../all_keylets/src/lib.rs | 0 .../wasm_fixtures/{wasm_fixtures => }/b58.c | 0 .../codecov_tests/Cargo.lock | 0 .../codecov_tests/Cargo.toml | 0 .../codecov_tests/src/host_bindings_loose.rs | 0 .../codecov_tests/src/lib.rs | 0 .../{wasm_fixtures => }/copyFixtures.py | 0 .../{wasm_fixtures => }/disableFloat.wat | 0 .../wasm_fixtures/{wasm_fixtures => }/fib.c | 0 .../float_tests/Cargo.lock | 0 .../float_tests/Cargo.toml | 0 .../float_tests/src/lib.rs | 0 .../{wasm_fixtures => }/ledgerSqn.c | 0 .../{wasm_fixtures => }/sha512Pure.c | 0 .../{wasm_fixtures => }/sp1/Cargo.lock | 0 .../{wasm_fixtures => }/sp1/Cargo.toml | 0 .../{wasm_fixtures => }/sp1/src/lib.rs | 0 .../wasm_fixtures/wasm_fixtures/fixtures.cpp | 10330 ---------------- .../wasm_fixtures/wasm_fixtures/fixtures.h | 52 - .../{wasm_fixtures => }/zk_proof/Cargo.lock | 0 .../{wasm_fixtures => }/zk_proof/Cargo.toml | 0 .../{wasm_fixtures => }/zk_proof/src/lib.rs | 0 28 files changed, 10382 deletions(-) rename src/test/app/wasm_fixtures/{wasm_fixtures => }/.gitignore (100%) rename src/test/app/wasm_fixtures/{wasm_fixtures => }/all_host_functions/Cargo.lock (100%) rename src/test/app/wasm_fixtures/{wasm_fixtures => }/all_host_functions/Cargo.toml (100%) rename src/test/app/wasm_fixtures/{wasm_fixtures => }/all_host_functions/src/lib.rs (100%) rename src/test/app/wasm_fixtures/{wasm_fixtures => }/all_keylets/Cargo.lock (100%) rename src/test/app/wasm_fixtures/{wasm_fixtures => }/all_keylets/Cargo.toml (100%) rename src/test/app/wasm_fixtures/{wasm_fixtures => }/all_keylets/src/lib.rs (100%) rename src/test/app/wasm_fixtures/{wasm_fixtures => }/b58.c (100%) rename src/test/app/wasm_fixtures/{wasm_fixtures => }/codecov_tests/Cargo.lock (100%) rename src/test/app/wasm_fixtures/{wasm_fixtures => }/codecov_tests/Cargo.toml (100%) rename src/test/app/wasm_fixtures/{wasm_fixtures => }/codecov_tests/src/host_bindings_loose.rs (100%) rename src/test/app/wasm_fixtures/{wasm_fixtures => }/codecov_tests/src/lib.rs (100%) rename src/test/app/wasm_fixtures/{wasm_fixtures => }/copyFixtures.py (100%) rename src/test/app/wasm_fixtures/{wasm_fixtures => }/disableFloat.wat (100%) rename src/test/app/wasm_fixtures/{wasm_fixtures => }/fib.c (100%) rename src/test/app/wasm_fixtures/{wasm_fixtures => }/float_tests/Cargo.lock (100%) rename src/test/app/wasm_fixtures/{wasm_fixtures => }/float_tests/Cargo.toml (100%) rename src/test/app/wasm_fixtures/{wasm_fixtures => }/float_tests/src/lib.rs (100%) rename src/test/app/wasm_fixtures/{wasm_fixtures => }/ledgerSqn.c (100%) rename src/test/app/wasm_fixtures/{wasm_fixtures => }/sha512Pure.c (100%) rename src/test/app/wasm_fixtures/{wasm_fixtures => }/sp1/Cargo.lock (100%) rename src/test/app/wasm_fixtures/{wasm_fixtures => }/sp1/Cargo.toml (100%) rename src/test/app/wasm_fixtures/{wasm_fixtures => }/sp1/src/lib.rs (100%) delete mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/fixtures.cpp delete mode 100644 src/test/app/wasm_fixtures/wasm_fixtures/fixtures.h rename src/test/app/wasm_fixtures/{wasm_fixtures => }/zk_proof/Cargo.lock (100%) rename src/test/app/wasm_fixtures/{wasm_fixtures => }/zk_proof/Cargo.toml (100%) rename src/test/app/wasm_fixtures/{wasm_fixtures => }/zk_proof/src/lib.rs (100%) diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/.gitignore b/src/test/app/wasm_fixtures/.gitignore similarity index 100% rename from src/test/app/wasm_fixtures/wasm_fixtures/.gitignore rename to src/test/app/wasm_fixtures/.gitignore diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/all_host_functions/Cargo.lock b/src/test/app/wasm_fixtures/all_host_functions/Cargo.lock similarity index 100% rename from src/test/app/wasm_fixtures/wasm_fixtures/all_host_functions/Cargo.lock rename to src/test/app/wasm_fixtures/all_host_functions/Cargo.lock diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/all_host_functions/Cargo.toml b/src/test/app/wasm_fixtures/all_host_functions/Cargo.toml similarity index 100% rename from src/test/app/wasm_fixtures/wasm_fixtures/all_host_functions/Cargo.toml rename to src/test/app/wasm_fixtures/all_host_functions/Cargo.toml diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/all_host_functions/src/lib.rs b/src/test/app/wasm_fixtures/all_host_functions/src/lib.rs similarity index 100% rename from src/test/app/wasm_fixtures/wasm_fixtures/all_host_functions/src/lib.rs rename to src/test/app/wasm_fixtures/all_host_functions/src/lib.rs diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/all_keylets/Cargo.lock b/src/test/app/wasm_fixtures/all_keylets/Cargo.lock similarity index 100% rename from src/test/app/wasm_fixtures/wasm_fixtures/all_keylets/Cargo.lock rename to src/test/app/wasm_fixtures/all_keylets/Cargo.lock diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/all_keylets/Cargo.toml b/src/test/app/wasm_fixtures/all_keylets/Cargo.toml similarity index 100% rename from src/test/app/wasm_fixtures/wasm_fixtures/all_keylets/Cargo.toml rename to src/test/app/wasm_fixtures/all_keylets/Cargo.toml diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/all_keylets/src/lib.rs b/src/test/app/wasm_fixtures/all_keylets/src/lib.rs similarity index 100% rename from src/test/app/wasm_fixtures/wasm_fixtures/all_keylets/src/lib.rs rename to src/test/app/wasm_fixtures/all_keylets/src/lib.rs diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/b58.c b/src/test/app/wasm_fixtures/b58.c similarity index 100% rename from src/test/app/wasm_fixtures/wasm_fixtures/b58.c rename to src/test/app/wasm_fixtures/b58.c diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/codecov_tests/Cargo.lock b/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock similarity index 100% rename from src/test/app/wasm_fixtures/wasm_fixtures/codecov_tests/Cargo.lock rename to src/test/app/wasm_fixtures/codecov_tests/Cargo.lock diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/codecov_tests/Cargo.toml b/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml similarity index 100% rename from src/test/app/wasm_fixtures/wasm_fixtures/codecov_tests/Cargo.toml rename to src/test/app/wasm_fixtures/codecov_tests/Cargo.toml diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/codecov_tests/src/host_bindings_loose.rs b/src/test/app/wasm_fixtures/codecov_tests/src/host_bindings_loose.rs similarity index 100% rename from src/test/app/wasm_fixtures/wasm_fixtures/codecov_tests/src/host_bindings_loose.rs rename to src/test/app/wasm_fixtures/codecov_tests/src/host_bindings_loose.rs diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/codecov_tests/src/lib.rs b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs similarity index 100% rename from src/test/app/wasm_fixtures/wasm_fixtures/codecov_tests/src/lib.rs rename to src/test/app/wasm_fixtures/codecov_tests/src/lib.rs diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/copyFixtures.py b/src/test/app/wasm_fixtures/copyFixtures.py similarity index 100% rename from src/test/app/wasm_fixtures/wasm_fixtures/copyFixtures.py rename to src/test/app/wasm_fixtures/copyFixtures.py diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/disableFloat.wat b/src/test/app/wasm_fixtures/disableFloat.wat similarity index 100% rename from src/test/app/wasm_fixtures/wasm_fixtures/disableFloat.wat rename to src/test/app/wasm_fixtures/disableFloat.wat diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/fib.c b/src/test/app/wasm_fixtures/fib.c similarity index 100% rename from src/test/app/wasm_fixtures/wasm_fixtures/fib.c rename to src/test/app/wasm_fixtures/fib.c diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/float_tests/Cargo.lock b/src/test/app/wasm_fixtures/float_tests/Cargo.lock similarity index 100% rename from src/test/app/wasm_fixtures/wasm_fixtures/float_tests/Cargo.lock rename to src/test/app/wasm_fixtures/float_tests/Cargo.lock diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/float_tests/Cargo.toml b/src/test/app/wasm_fixtures/float_tests/Cargo.toml similarity index 100% rename from src/test/app/wasm_fixtures/wasm_fixtures/float_tests/Cargo.toml rename to src/test/app/wasm_fixtures/float_tests/Cargo.toml diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/float_tests/src/lib.rs b/src/test/app/wasm_fixtures/float_tests/src/lib.rs similarity index 100% rename from src/test/app/wasm_fixtures/wasm_fixtures/float_tests/src/lib.rs rename to src/test/app/wasm_fixtures/float_tests/src/lib.rs diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/ledgerSqn.c b/src/test/app/wasm_fixtures/ledgerSqn.c similarity index 100% rename from src/test/app/wasm_fixtures/wasm_fixtures/ledgerSqn.c rename to src/test/app/wasm_fixtures/ledgerSqn.c diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/sha512Pure.c b/src/test/app/wasm_fixtures/sha512Pure.c similarity index 100% rename from src/test/app/wasm_fixtures/wasm_fixtures/sha512Pure.c rename to src/test/app/wasm_fixtures/sha512Pure.c diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/sp1/Cargo.lock b/src/test/app/wasm_fixtures/sp1/Cargo.lock similarity index 100% rename from src/test/app/wasm_fixtures/wasm_fixtures/sp1/Cargo.lock rename to src/test/app/wasm_fixtures/sp1/Cargo.lock diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/sp1/Cargo.toml b/src/test/app/wasm_fixtures/sp1/Cargo.toml similarity index 100% rename from src/test/app/wasm_fixtures/wasm_fixtures/sp1/Cargo.toml rename to src/test/app/wasm_fixtures/sp1/Cargo.toml diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/sp1/src/lib.rs b/src/test/app/wasm_fixtures/sp1/src/lib.rs similarity index 100% rename from src/test/app/wasm_fixtures/wasm_fixtures/sp1/src/lib.rs rename to src/test/app/wasm_fixtures/sp1/src/lib.rs diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/wasm_fixtures/fixtures.cpp deleted file mode 100644 index ec91496428..0000000000 --- a/src/test/app/wasm_fixtures/wasm_fixtures/fixtures.cpp +++ /dev/null @@ -1,10330 +0,0 @@ -//------------------------------------------------------------------------------ -/* - This file is part of rippled: https://github.com/ripple/rippled - Copyright (c) 2025 Ripple Labs Inc. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -*/ -//============================================================================== - -// TODO: consider moving these to separate files (and figure out the build) - -#include - -extern std::string const fibWasmHex = - "0061736d0100000001090260000060017f017f0303020001071b02115f5f" - "7761736d5f63616c6c5f63746f727300000366696200010a440202000b3f" - "01017f200045044041000f0b2000410348044041010f0b200041026a2100" - "0340200041036b100120016a2101200041026b220041044a0d000b200141" - "016a0b"; - -extern std::string const b58WasmHex = - "0061736d0100000001150460000060017f017f60017f0060047f7f7f7f01" - "7f0305040001020305030100020607017f0041d0080b074906066d656d6f" - "72790200115f5f7761736d5f63616c6c5f63746f7273000008616c6c6f63" - "617465000106655f6461746103000a6465616c6c6f636174650002076235" - "38656e636f00030ae8050402000b3401017f024020004180084a0d0041c0" - "082802002200411f4a0d0041c008200041016a3602002000410a7441d008" - "6a21010b20010b02000baa0501097f41d088060240200341004c0d000340" - "200220066a2d00000d012003200641016a2206470d000b200321060b2003" - "20066b220c418a016c41e4006d220741106a4170716b21090240200c4100" - "480d00200741016a220a410771210541002104200741074f0440200a41f8" - "ffff1f71210a0340200420096a4200370300200a200441086a2204470d00" - "0b0b2005450d00200420096a21040340200441003a0000200441016a2104" - "200541016b22050d000b0b200320064a0440200621052007210403402002" - "20056a2d0000210802402004220a20074e0440200721042008450d010b20" - "0721040340200420096a220b200b2d000041087420086a220b200b413a6d" - "2208413a6c6b3a00002004450440410021040c020b200441016b2204200a" - "4a0d00200b413a6b418d7f490d000b0b200541016a22052003470d000b0b" - "200741016a22022103410021040240200c4100480d000340200420096a2d" - "00000d012002200441016a2204470d000b200221040b2001200320066a20" - "046b4a047f02402006450d002006410771210841002105200641084f0440" - "200641787121010340200020056a42b1e2c48993a6cc9831370000200120" - "0541086a2205470d000b0b2008450d00200020056a21050340200541313a" - "0000200541016a2105200841016b22080d000b0b0240200420074a0d0020" - "0420076a410171047f200405200020066a200420096a2d00004180086a2d" - "00003a0000200641016a2106200441016a0b210520042007460d00200520" - "096a2101200720056b2102200020066a2103417f21040340200320046a22" - "0741016a200120046a220541016a2d00004180086a2d00003a0000200741" - "026a200541026a2d00004180086a2d00003a00002002200441026a220447" - "0d000b200420066a41016a21060b200020066a41003a0000200641016a05" - "41000b0b0b4101004180080b3a3132333435363738394142434445464748" - "4a4b4c4d4e505152535455565758595a6162636465666768696a6b6d6e6f" - "707172737475767778797a00490f7461726765745f666561747572657304" - "2b0f6d757461626c652d676c6f62616c732b087369676e2d6578742b0f72" - "65666572656e63652d74797065732b0a6d756c746976616c7565"; - -extern std::string const sha512PureWasmHex = - "0061736d0100000001130460000060017f017f60017f0060027f7f017f03" - "05040001020305030100020607017f0041800d0b075006066d656d6f7279" - "0200115f5f7761736d5f63616c6c5f63746f7273000008616c6c6f636174" - "65000106655f6461746103000a6465616c6c6f6361746500020e73686135" - "31325f70726f6365737300030aa4060402000b0f0041800d410020004180" - "80024d1b0b02000b8b0602147e037f200141ff006a41ff014f044041c08c" - "06211620014180016d41016bac210b41808d02290300210c41888d022903" - "00210d41908d02290300210e41988d02290300210f41a08d022903002110" - "41a88d02290300211141b08d02290300211241b88d022903002113034041" - "002101200c21092013210a201221082011210520102103200f2115200e21" - "06200d2102034020022107200120166a200020016a290000220242388620" - "024280fe0383422886842002428080fc0783421886200242808080f80f83" - "4208868484200242088842808080f80f832002421888428080fc07838420" - "024228884280fe03832002423888848484220237030020014180086a2903" - "00200a200322044232892004422e89852004421789857c2008220a200442" - "7f858320052208200483847c7c20027c2203200922024224892002421e89" - "85200242198985200220072006221485832006200783857c7c2109200320" - "157c2103200421052006211520072106200141086a2201418001470d000b" - "200020016a21004180092117411e210103402002210620162001410e6b41" - "0f714103746a221820182903002016200141056b410f714103746a290300" - "20162001410d6b410f714103746a2903002202423f892002423889852002" - "420788857c7c20162001410f714103746a2903002202422d892002420389" - "852002420688857c22023703002017290300200a20032205423289200542" - "2e89852005421789857c2005427f852008832004200583847c7c20027c22" - "03200922024224892002421e898520024219898520022006200785832006" - "200783857c7c2109200320147c2103201741086a21172008210a20042108" - "200521042007211420062107200141016a220141de00470d000b41b88d02" - "200a20137c221337030041b08d02200820127c221237030041a88d022004" - "20117c221137030041a08d02200320107c221037030041988d02200f2014" - "7c220f37030041908d022007200e7c220e37030041888d022002200d7c22" - "0d37030041808d022009200c7c220c370300200b420052200b42017d210b" - "0d000b0b41808d020b0b880501004180080b800522ae28d7982f8a42cd65" - "ef23914437712f3b4deccffbc0b5bcdb8981a5dbb5e938b548f35bc25639" - "19d005b6f111f1599b4f19afa4823f9218816ddad55e1cab420203a398aa" - "07d8be6f7045015b83128cb2e44ebe853124e2b4ffd5c37d0c556f897bf2" - "745dbe72b196163bfeb1de803512c725a706dc9b942669cf74f19bc1d24a" - "f19ec1699be4e3254f388647beefb5d58c8bc69dc10f659cac77cca10c24" - "75022b596f2ce92d83e4a66eaa84744ad4fb41bddca9b05cb5531183da88" - "f976abdf66ee52513e981032b42d6dc631a83f21fb98c82703b0e40eefbe" - "c77f59bfc28fa83df30be0c625a70a934791a7d56f8203e05163ca06706e" - "0e0a67292914fc2fd246850ab72726c9265c38211b2eed2ac45afc6d2c4d" - "dfb3959d130d3853de63af8b54730a65a8b2773cbb0a6a76e6aeed472ec9" - "c2813b358214852c72926403f14ca1e8bfa2013042bc4b661aa89197f8d0" - "708b4bc230be5406a3516cc71852efd619e892d110a96555240699d62a20" - "715785350ef4b8d1bb3270a06a10c8d0d2b816c1a41953ab4151086c371e" - "99eb8edf4c774827a8489be1b5bcb034635ac9c5b30c1c39cb8a41e34aaa" - "d84e73e363774fca9c5ba3b8b2d6f36f2e68fcb2ef5dee828f74602f1743" - "6f63a57872abf0a11478c884ec39641a0802c78c281e6323faffbe90e9bd" - "82deeb6c50a41579c6b2f7a3f9be2b5372e3f27871c69c6126eace3e27ca" - "07c2c021c7b886d11eebe0cdd67ddaea78d16eee7f4f7df5ba6f1772aa67" - "f006a698c8a2c57d630aae0df9be04983f111b471c13350b711b847d0423" - "f577db289324c7407babca32bcbec9150abe9e3c4c0d109cc4671d43b642" - "3ecbbed4c54c2a7e65fc9c297f59ecfad63aab6fcb5f1758474a8c19446c" - "00490f7461726765745f6665617475726573042b0f6d757461626c652d67" - "6c6f62616c732b087369676e2d6578742b0f7265666572656e63652d7479" - "7065732b0a6d756c746976616c7565"; - -extern std::string const zkProofWasmHex = - "0061736d0100000001600f60037f7f7f017f60027f7f017f60027f7f0060" - "037f7f7f0060000060057f7f7f7f7f0060047f7f7f7f0060067f7f7f7f7f" - "7f0060017f017f6000017f60017f0060047f7f7f7f017f60027e7e017f60" - "057f7f7f7f7f017f60057f7e7e7e7e00038c018a01030402030202020302" - "030505030206020601000006010606070303080202020302090208020202" - "030a0806020a030b06060202030302020303030203030203020202010302" - "030203060a02000202080a020c0807010d02030206060102020803080302" - "030202020a02060303020a03020301010a0d030101010001010301020604" - "0a0a020200000e000004050170010e0e05030100110619037f01418080c0" - "000b7f0041bd97c0000b7f0041c097c0000b075d06066d656d6f72790200" - "08616c6c6f63617465001b13646573657269616c697a655f67315f776173" - "6d001c1462656c6c6d616e5f67726f746831365f7465737400210a5f5f64" - "6174615f656e6403010b5f5f686561705f6261736503020914010041010b" - "0d15767778717e830111547d137a7b0ad6f3048a014b01017f0240024002" - "4020010d00410021010c010b2002450d01200120026e2203200320026c20" - "01476a21010b2000200136020820004101360204200020013602000f0b10" - "8180808000000b4701017f23808080800041206b22002480808080002000" - "41003602182000410136020c200041e090c0800036020820004204370210" - "200041086a41fc82c0800010a480808000000b0f002000200141e8001083" - "808080000b170002402000450d002001200020026c108d808080000b0b0e" - "002000200141011083808080000b0f002000200141a0021083808080000b" - "0e002000200141201083808080000b4201017f0240200028020822032000" - "280200470d00200020021088808080000b2000280204200341e8006c6a20" - "0141e8001086818080001a2000200341016a3602080b5a01017f23808080" - "800041106b2202248080808000200241086a20002000280200410141e800" - "108b80808000024020022802082200418180808078460d00200020022802" - "0c2001108c80808000000b200241106a2480808080000b6401027f238080" - "80800041106b2203248080808000200341086a20024101410141f081c080" - "00108a8080800020032802082104200328020c2001200210868180800021" - "01200020023602082000200136020420002004360200200341106a248080" - "8080000b6401017f23808080800041106b2205248080808000200541046a" - "200120022003108e8080800020052802082103024020052802040d002000" - "200528020c36020420002003360200200541106a2480808080000f0b2003" - "200528020c2004108c80808000000bfd0102037f017e2380808080004110" - "6b22052480808080004100210602400240200220036a22032002490d0020" - "0441076a417871ad2001280200220741017422022003200220034b1b2202" - "4104200241044b1b2203ad7e2208422088a70d002008a7220241f8ffffff" - "074b0d01024002402007450d00024020040d00200541086a4108200210d7" - "80808000200528020821040c020b2001280204200720046c200210cb8080" - "800021040c010b20054108200210d780808000200528020021040b024020" - "040d00410821060c020b2001200336020020012004360204418180808078" - "21060b0b2000200236020420002006360200200541106a2480808080000b" - "1200024020000d00200210cf808080000b000b6c01027f02400240200041" - "7c6a2802002202417871220341044108200241037122021b20016a490d00" - "02402002450d002003200141276a4b0d020b200010c9808080000f0b41e9" - "92c08000419893c0800010ca80808000000b41a893c0800041d893c08000" - "10ca80808000000bc70103017f017e017f23808080800041106b22042480" - "8080800002400240200220036a417f6a410020026b71ad2001ad7e220542" - "2088a70d002005a7220341808080807820026b4b0d00024020030d002000" - "200236020841002102200041003602040c020b200441086a2002200310d7" - "80808000024020042802082206450d002000200636020820002001360204" - "410021020c020b2000200336020820002002360204410121020c010b2000" - "4100360204410121020b20002002360200200441106a2480808080000b88" - "0303017f097e017f23808080800041306b22022480808080002002420042" - "002001290330220342abd5feffffffbfffb97f56ad7d2204200129033822" - "057d220642ffffcf8aebffffd51e7c220720052003842001290340220884" - "20012903482209842001290350220a842001290358220b8450220c1b3703" - "082002420042abd5feffffffbfffb97f20037d200c1b3703002002420020" - "042004200554ad7d2007200654ad7c423f87220320087d220442a4ecc3b5" - "8fd4b498e7007c2205200c1b3703102002420020032003200854ad7d2005" - "200454ad7c423f87220320097d220442bfa5949ccff0d2bbe4007c220520" - "0c1b3703182002420020032003200954ad7d2005200454ad7c423f872203" - "200a7d220442d7d9ae9ae4f6e98dcb007c2205200c1b3703202002420020" - "032003200a54ad7d2005200454ad7c423f87200b7d429acdffcba3bdc480" - "1a7c200c1b370328200041306a200241e086c0800020012d0060220c1090" - "80808000200020014130108681808000200c3a0060200241306a24808080" - "80000b9e0101027e20002002290328200129032822048542002003ad42ff" - "01837d220583200485370328200020022903202001290320220485200583" - "200485370320200020022903182001290318220485200583200485370318" - "200020022903102001290310220485200583200485370310200020022903" - "082001290308220485200583200485370308200020022903002001290300" - "2204852005832004853703000bec0201057f23808080800041c0006b2202" - "248080808000410121030240200128021c2204418082c080004111200128" - "0220220528020c220611808080800080808080000d000240024020012d00" - "144104710d0041012103200441fa8ec08000410120061180808080008080" - "8080000d02200141e091c080004102109280808000450d010c020b200441" - "fb8ec080004102200611808080800080808080000d014101210320024101" - "3a0017200241186a41086a200141086a290200370300200241186a41106a" - "200141106a290200370300200241186a41186a200141186a280200360200" - "2002200536020c20022004360208200241dc8ec080003602382002200129" - "02003703182002200241176a3602102002200241086a360234200241186a" - "41e091c0800041021092808080000d01200241086a41f88ec08000410210" - "93808080000d010b200441ec8cc080004101200611808080800080808080" - "0021030b200241c0006a24808080800020030bbf0b010b7f024002400240" - "200028020022032000280208220472450d0002402004410171450d002001" - "20026a210502400240200028020c22060d0041002107200121080c010b41" - "00210741002109200121080340200822042005460d020240024020042c00" - "002208417f4c0d00200441016a21080c010b0240200841604f0d00200441" - "026a21080c010b0240200841704f0d00200441036a21080c010b20044104" - "6a21080b200820046b20076a21072006200941016a2209470d000b0b2008" - "2005460d00024020082c00002204417f4a0d0020044160491a0b02400240" - "2007450d00024020072002490d0020072002460d01410021040c020b2001" - "20076a2c000041404e0d00410021040c010b200121040b2007200220041b" - "21022004200120041b21010b024020030d00200028021c20012002200028" - "022028020c11808080800080808080000f0b2000280204210a0240200241" - "10490d0020022001200141036a417c7122076b22096a220b410371210341" - "00210641002104024020012007460d004100210402402009417c4b0d0041" - "0021044100210503402004200120056a22082c000041bf7f4a6a20084101" - "6a2c000041bf7f4a6a200841026a2c000041bf7f4a6a200841036a2c0000" - "41bf7f4a6a2104200541046a22050d000b0b200121080340200420082c00" - "0041bf7f4a6a2104200841016a2108200941016a22090d000b0b02402003" - "450d002007200b417c716a22082c000041bf7f4a210620034101460d0020" - "0620082c000141bf7f4a6a210620034102460d00200620082c000241bf7f" - "4a6a21060b200b4102762105200620046a21060340200721032005450d04" - "200541c001200541c001491b220b410371210c200b410274210d41002108" - "024020054104490d002003200d41f007716a210941002108200321040340" - "200428020c2207417f734107762007410676724181828408712004280208" - "2207417f7341077620074106767241818284087120042802042207417f73" - "41077620074106767241818284087120042802002207417f734107762007" - "4106767241818284087120086a6a6a6a2108200441106a22042009470d00" - "0b0b2005200b6b21052003200d6a2107200841087641ff81fc0771200841" - "ff81fc07716a418180046c41107620066a2106200c450d000b2003200b41" - "fc01714102746a22082802002204417f7341077620044106767241818284" - "08712104200c4101460d0220082802042207417f73410776200741067672" - "41818284087120046a2104200c4102460d0220082802082208417f734107" - "7620084106767241818284087120046a21040c020b024020020d00410021" - "060c030b2002410371210802400240200241044f0d004100210641002109" - "0c010b41002106200121042002410c71220921070340200620042c000041" - "bf7f4a6a200441016a2c000041bf7f4a6a200441026a2c000041bf7f4a6a" - "200441036a2c000041bf7f4a6a2106200441046a21042007417c6a22070d" - "000b0b2008450d02200120096a21040340200620042c000041bf7f4a6a21" - "06200441016a21042008417f6a22080d000c030b0b200028021c20012002" - "200028022028020c11808080800080808080000f0b200441087641ff811c" - "71200441ff81fc07716a418180046c41107620066a21060b02400240200a" - "20064d0d00200a20066b2105024002400240410020002d00182204200441" - "03461b22040e03020001020b20052104410021050c010b20054101762104" - "200541016a41017621050b200441016a2104200028021021092000280220" - "2108200028021c210703402004417f6a2204450d02200720092008280210" - "1181808080008080808000450d000b41010f0b200028021c200120022000" - "28022028020c11808080800080808080000f0b0240200720012002200828" - "020c1180808080008080808000450d0041010f0b41002104034002402005" - "2004470d0020052005490f0b200441016a21042007200920082802101181" - "808080008080808000450d000b2004417f6a2005490bdf04010c7f200141" - "7f6a21032000280204210420002802002105200028020821064100210741" - "002108410021094100210a02400340200a4101710d010240024020092002" - "4b0d000340200120096a210a0240024002400240200220096b220b41074b" - "0d0020022009470d01200221090c050b02400240200a41036a417c71220c" - "200a6b220d450d00410021000340200a20006a2d0000410a460d05200d20" - "0041016a2200470d000b200d200b41786a220e4d0d010c030b200b41786a" - "210e0b03404180828408200c2802002200418a94a8d000736b2000724180" - "828408200c41046a2802002200418a94a8d000736b200072714180818284" - "7871418081828478470d02200c41086a210c200d41086a220d200e4d0d00" - "0c020b0b410021000340200a20006a2d0000410a460d02200b200041016a" - "2200470d000b200221090c030b0240200d200b470d00200221090c030b20" - "0a200d6a210c2002200d6b20096b210b4100210002400340200c20006a2d" - "0000410a460d01200b200041016a2200470d000b200221090c030b200020" - "0d6a21000b200020096a220c41016a21090240200c20024f0d00200a2000" - "6a2d0000410a470d004100210a2009210d200921000c030b200920024d0d" - "000b0b20082002460d024101210a2008210d200221000b0240024020062d" - "0000450d00200541f48ec080004104200428020c11808080800080808080" - "000d010b200020086b210b4100210c024020002008460d00200320006a2d" - "0000410a46210c0b200120086a21002006200c3a0000200d210820052000" - "200b200428020c1180808080008080808000450d010b0b410121070b2007" - "0ba80101017f23808080800041306b220424808080800020042003360208" - "20042002360204200420012d00c80122033a000f024020034101460d0020" - "04420137021c200441013602142004419482c08000360210200441818080" - "800036022c2004200441286a3602182004200441046a3602282004410f6a" - "41c886c08000200441106a419c82c08000109680808000000b2000200141" - "c8011086818080001a200441306a2480808080000b140020012000280200" - "20002802041092808080000b4401017f23808080800041106b2204248080" - "8080002004200136020c20042000360208200441086a41b886c080002004" - "410c6a41b886c080002002200310d380808000000ba70101017f23808080" - "800041306b22042480808080002004200336020820042002360204200420" - "012d006822033a000f024020034101460d002004420137021c2004410136" - "02142004419482c08000360210200441818080800036022c200420044128" - "6a3602182004200441046a3602282004410f6a41c886c08000200441106a" - "419c82c08000109680808000000b2000200141e8001086818080001a2004" - "41306a2480808080000b45000240024020042003490d0020022004490d01" - "2000200420036b3602042000200120036a3602000f0b2003200420051099" - "80808000000b200420022005109a80808000000b0f0020002001200210fc" - "80808000000b0f0020002001200210f580808000000b4001017f23808080" - "800041106b2201248080808000200141086a200041014101419883c08000" - "108a80808000200128020c2100200141106a24808080800020000b9a0101" - "017f23808080800041b0016b2202248080808000200241086a2001280204" - "20012802084100413041a883c080001098808080000240200228020c4130" - "460d00200241106a41b883c08000109d80808000000b20024180016a2002" - "28020841301089818080001a200241106a20024180016a109e8080800020" - "00200241106a41c883c080004118109780808000200241b0016a24808080" - "80000b970101017f23808080800041c0006b22022480808080002002412b" - "36020c200241f880c08000360208200241e880c080003602142002200036" - "02102002410236021c200241cc8ec0800036021820024202370224200241" - "8280808000ad422086200241106aad843703382002418380808000ad4220" - "86200241086aad843703302002200241306a360220200241186a200110a4" - "80808000000ba50801077f23808080800041c0086b220224808080800020" - "012d0000220341077610a3808080002104200341067641017110a3808080" - "002105200341057641017110a3808080002106200241a0066a2001413010" - "86818080001a200220022d00a006411f713a00a006200241e8006a200241" - "a0066a10dc80808000200241b0076a410041301085818080001a200241c0" - "026a200241b0076a200241e8006a20022d00980122071090808080002002" - "4190056a10a8808080002002200520047110a380808000200610d2808080" - "007110a380808000200241c0026a10a9808080007110a38080800022013a" - "00f805200110d2808080002108200241a0066a200241c0026a10bd808080" - "0020024180046a200241a0066a200241c0026a10a780808000200241e007" - "6a20024180046a418089c0800010b98080800020024180046a200241e007" - "6a41c087c0800010df80808000200241a0066a20024180046a10bd808080" - "00200241a0066a200241e0076a10db808080002103200241f0026a200241" - "80046a41301086818080001a200220033a00a00320024100413010858180" - "800022024190086a2002200241f0026a2003109080808000200241a0066a" - "20024190086a10b28080800020024180046a41306a20024190086a200241" - "a0066a200620024190086a10de808080007310a380808000109080808000" - "20024180046a200241c0026a41301086818080001a20032004200510d280" - "8080007110a3808080007110a3808080002103200241a0066a2002418004" - "6a41e0001086818080001a200220033a008807200220053a008007200241" - "d0016a20024190056a200241a0066a200810aa8080800020022007200120" - "03200173410020086b71737110a3808080003a00b802200241e8006a10a8" - "808080002002200241e8006a200241d0016a20022d00b802220310aa8080" - "8000200241a0066a200210a58080800020024190056a200241a0066a10e4" - "8080800020024180046a20024190056a10e480808000200241f0026a2002" - "4180046a10e58080800020024190056a200241e8001086818080001a2002" - "4190056a41b089c0800010dd80808000200241a0066a20024190056a10a5" - "80808000200241b0076a200241f0026a200241a0066a41e0006a220510a7" - "80808000200241e0076a200241a0066a200241f0026a41e0006a220110a7" - "8080800020024190086a200241f0026a41306a200510a780808000200241" - "80046a200241a0066a41306a200110a7808080002003200110a980808000" - "2201200510a98080800022057110a380808000200110d280808000200510" - "d2808080007110a380808000200241b0076a200241e0076a10db80808000" - "7110a38080800020024190086a20024180046a10db808080007110a38080" - "80007210a3808080007110a38080800021052000200241e8001086818080" - "0020053a0068200241c0086a2480808080000b970101017f238080808000" - "41c0026b2203248080808000200341086a20012002410041e00041e083c0" - "80001098808080000240200328020c41e000460d00200341106a41f083c0" - "8000109d80808000000b200341e0016a200328020841e000108981808000" - "1a200341106a200341e0016a10a0808080002000200341106a41c883c080" - "004118109480808000200341c0026a2480808080000bff1d02137f017e23" - "808080800041a0276b220224808080800020012d0000220341077610a380" - "8080002104200341067641017110a3808080002105200341057641017110" - "a380808000210620024180106a200141301086818080001a200220022d00" - "8010411f713a008010200241a0216a20024180106a10dc80808000200241" - "80226a200141306a10dc80808000200241e01f6a41004130108581808000" - "1a200241801f6a200241e01f6a200241a0216a20022d00d0212207109080" - "80800020022d00b0222101200241c0206a410041301085818080001a2002" - "41e0226a200241c0206a20024180226a2001109080808000200241e0226a" - "41306a200241801f6a41301086818080001a200241e00d6a10e780808000" - "2002200520047110a380808000200610d2808080007110a3808080002002" - "41e0226a10e0808080007110a38080800022033a00a80f200310d2808080" - "00210820024180106a200241e0226a10ba80808000200241c00b6a200241" - "80106a200241e0226a10b380808000200241c0236a200241c00b6a41e089" - "c0800010bc80808000200241c0236a10e08080800021032002410041e000" - "108581808000220220033a0060200310d2808080002109200241a0246a20" - "0241c0236a41a088c0800010e38080800020024180106a200241a0246a10" - "ba8080800020024180256a20024180106a200241c0236a10b38080800020" - "0241e0256a200241a0246a200241c0236a10b38080800020024180106a20" - "0241e0256a41306a10b28080800020024180106a41306a200241e0256a41" - "30108681808000210a200241d0016a41306a410041301085818080001a20" - "0241d0016a41e086c0800041301086818080001a200241c0266a200241d0" - "016a10e28080800020024180256a200241c0266a10c28080800021032002" - "41c00b6a20024180106a41e0001086818080001a200220033a00a00c2003" - "10d280808000210b200a41004130108581808000210320024180106a41e0" - "86c0800041301086818080001a20024180076a20024180256a2002418010" - "6a10bc8080800020024198036a20024180076a41d088c0800010e3808080" - "0020024180106a20024198036a200241e0256a10b3808080002002410110" - "a3808080003a00e01020024180076a200241c00b6a20024180106a200b10" - "da80808000200241c00b6a410041e0001085818080001a20024198036a20" - "0241c00b6a20024180076a20022d00e007220a10b0808080002002418010" - "6a20024198036a10ba80808000200a20024180106a200241c0236a10c280" - "8080007110a380808000210a20024180106a20024198036a41e000108681" - "8080001a2002200a3a00e01020024180076a200220024180106a200910da" - "808080002002410041e00010858180800022024198036a20022002418007" - "6a20022d00e007220910b08080800020024180106a20024198036a10e280" - "808000200241c00b6a41e0006a220b20024198036a20024180106a200620" - "024198036a41306a220a10de80808000200a10a98080800020024198036a" - "10de808080007110a3808080007210a3808080007310a38080800010b080" - "808000200241c00b6a200241e0226a41e0001086818080001a2009200420" - "0510d2808080007110a3808080007110a380808000210420024180106a20" - "0241c00b6a41c0011086818080001a200220043a00c811200220053a00c0" - "11200241c00b6a200241e00d6a20024180106a200810d980808000200120" - "0420022d00a80f220573410020086b712005737110a38080800021012002" - "200241c00b6a41c801108681808000220241cc016a200241c00b6a41cc01" - "6a280000360000200220022800890d3600c9012002200120077110a38080" - "8000220c3a00c80120024198036a10e780808000200241d0016a20024198" - "036a2002200c10d980808000200241e0046a200241d0016a10e880808000" - "200241c00b6a410041301085818080001a200242ba8a92abf1a7dbf21437" - "03980c200242e8a0ee96fe89bcf2143703900c200242a4a0a0f4c7f1c686" - "a27f3703880c200242acfced84e38c82c4d0003703800c200242d5cb9694" - "b3cac8f92a3703f80b200242c38bd5b3c8bcf286897f3703f00b200242d2" - "8ff6dfdbdddf950e3703b80e2002429df8bab6e9ac96d12d3703b00e2002" - "42a7a9d3d3fd9088e5513703a80e200242f1fdbada86bba3842f3703a00e" - "200242fcfcc9d492d8f78b5c3703980e200242da9f8cd5a5f4e9e7fb0037" - "03900e200242c8bd89ecc7dfe4ea0b3703880e200242b9e1f3e3fac9d3bc" - "1d3703800e20024298fcc0c8d1dfcad6927f3703f80d200242b2ee88db88" - "999194383703f00d200242838386b6d8a788cac2003703e80d200242d1b5" - "f2aada8bd6973e3703e00d2003200241e0046a41306a10b2808080002002" - "4180106a200241e0046a41301086818080001a20024180076a2002418010" - "6a200241c00b6a10b3808080002003200241f0056a10b280808000200241" - "80106a200241e0046a41e0006a220141301086818080001a20024180076a" - "41e0006a220d20024180106a200241e00d6a10b3808080002003200241d0" - "066a10b28080800020024180106a200241e0046a41c0016a220541301086" - "818080001a20024180076a41c0016a20024180106a41e000108681808000" - "210e2003410041301085818080001a20024180106a41e086c08000413010" - "86818080001a200241a0096a410041e0001085818080001a200241a0096a" - "41e0006a20024180106a41e0001086818080002109200241a0096a41c001" - "6a410041e000108581808000210a200241c0266a41306a210f2002418010" - "6a41e0006a2110200241e00d6a41e0006a211120024180106a41c0016a21" - "12200241c00b6a41c0016a2113200241e00d6a41c0016a21144280808280" - "8080a080e9002115024003402015500d01200241e0196a200110ba808080" - "00200241c01a6a200241e0196a200241e0196a10bc80808000200241a01b" - "6a200241c01a6a200241c01a6a10bc80808000200241801c6a200241a01b" - "6a200241a01b6a10bc80808000200241e01c6a2001200510b38080800020" - "0241c01d6a200510ba80808000200241a01e6a200241c01d6a41c08ac080" - "0010b380808000200241801f6a200241a01e6a200241801c6a10b3808080" - "00200241e01f6a200241e0196a200241a01e6a10bc80808000200241c020" - "6a200241e01c6a200241801c6a10b380808000200241a0216a200241a01e" - "6a200241a01e6a10bc8080800020024180226a200241a0216a200241a01e" - "6a10bc80808000200241e0226a200241e0196a20024180226a10bb808080" - "00200241c0236a200241e0226a200241e01f6a10b380808000200241a024" - "6a200241801f6a200241c0236a10bc8080800020024180256a200241e004" - "6a200110b380808000200241e0256a200241e0226a20024180256a10b380" - "808000200241e00d6a200241e0256a200241e0256a10bc80808000201120" - "0241a0246a41e00010868180800021082014200241c0206a41e000108681" - "8080002107200f410041301085818080001a200241c0266a41e086c08000" - "41301086818080001a20024180106a410041e0001085818080001a201020" - "0241c0266a41e00010868180800021042012410041e00010858180800021" - "06200241c00b6a200241e00d6a20024180106a200510e080808000220310" - "b080808000200b20082004200310b080808000201320072006200310b080" - "808000200241e0046a200241c00b6a41a0021086818080001a0240201542" - "0183500d00200241a0126a200241a0096a200241e0046a10b38080800020" - "024180136a2009200110b380808000200241e0136a200a200510b3808080" - "00200241c0146a200241a0096a200910bc80808000200241a0156a200241" - "e0046a200110bc8080800020024180166a200241c0146a200241a0156a10" - "b380808000200241e0166a200241a0126a20024180136a10bc8080800020" - "0241c0176a20024180166a200241e0166a10bb80808000200241a0186a20" - "09200a10bc8080800020024180196a2001200510bc80808000200241e019" - "6a200241a0186a20024180196a10b380808000200241c01a6a2002418013" - "6a200241e0136a10bc80808000200241a01b6a200241e0196a200241c01a" - "6a10bb80808000200241801c6a200241a0096a200a10bc80808000200241" - "e01c6a200241e0046a200510bc80808000200241c01d6a200241801c6a20" - "0241e01c6a10b380808000200241a01e6a200241a0126a200241e0136a10" - "bc80808000200241801f6a200241c01d6a200241a01e6a10bb8080800020" - "0241e01f6a200241a0126a200241a0126a10bc80808000200241c0206a20" - "0241e01f6a200241a0126a10bc80808000200241a0216a200241e0136a41" - "c08ac0800010b38080800020024180226a20024180136a200241a0216a10" - "bc80808000200241e0226a20024180136a200241a0216a10bb8080800020" - "0241c0236a200241801f6a41c08ac0800010b380808000200241a0246a20" - "0241a01b6a200241c0236a10b38080800020024180256a200241c0176a20" - "0241e0226a10b38080800020024180106a20024180256a200241a0246a10" - "bb80808000200241e0256a200241c0236a200241c0206a10b38080800020" - "0241c0266a200241e0226a20024180226a10b3808080002004200241c026" - "6a200241e0256a10bc80808000200241c00b6a200241c0206a200241c017" - "6a10b380808000200241e00d6a20024180226a200241a01b6a10b3808080" - "002006200241e00d6a200241c00b6a10bc80808000200241a0096a200241" - "80106a41a0021086818080001a0b201542018821150c000b0b2002418010" - "6a41e0006a200910e28080800020024180106a41c0016a200a41e0001086" - "818080001a20024180106a200241a0096a41e0001086818080001a200241" - "a0096a20024180106a41a0021086818080001a200241c0266a2002418007" - "6a200241a0096a41c0016a220110b380808000200241c00b6a200241a009" - "6a200e10b380808000200241e00d6a200d200110b3808080002002418010" - "6a200241a0096a41e0006a200e10b380808000200e10e080808000220520" - "0110e08080800022017110a380808000200510d280808000200110d28080" - "80007110a380808000200241c0266a200241c00b6a10c2808080007110a3" - "80808000200241e00d6a20024180106a10c2808080007110a38080800072" - "10a380808000200c7110a38080800021012000200241d0016a41c8011086" - "8180800020013a00c801200241a0276a2480808080000ba0d50103097f25" - "7e347f23808080800041e0ec006b2200248080808000200042d2b4bbf88c" - "a0d28d053700f40c2000428dcfdee5fd81c2bb0c3700ec0c200042afbed3" - "efd9fc81acea003700e40c20004283c4c699c3e0e5bf313700dc0c200042" - "869e99a9baa4ebe5e5003700d40c2000428dbfe3e0ae86d0a7b27f3700cc" - "0c200042908484d9e8fa99f80e3700c40c2000428bdfe7adc3a8cae04f37" - "00bc0c200042d687f295e888f880cd003700b40c20004281ddcf86b5f2d0" - "cf633700ac0c200042aef2a7aaae91d5accb003700a40c200042eb8fbebf" - "aee5caf4967f37009c0c200042b9b3d69fbf86ace8bb7f3700940c200042" - "d4fa86d5a0e3d296a87f37008c0c200042c5eddc9291a0c9e3a27f370084" - "0c2000428594fecef0de91d0643700fc0b20004289ae81b0d7a1feb5d300" - "3700f40b200042d4f18391eaffb8ed2e3700ec0b2000428cc8d9c6afddd3" - "d2ca003700e40b200042bca4908cdbc4caa54e3700dc0b200042b9cfe7bf" - "d99fbcbd563700d40b200042a4f788c3999fcac2c6003700cc0b200042b7" - "93c2cbbcbec3ee8e7f3700c40b200042a188aeeaaf8e90ba9b7f3700bc0b" - "200042c1fb969fd3cb97a0f5003700b40b200042ff9ce790fc9fe0fa6837" - "00ac0b200042b2dcb096dfcda7b9293700a40b200042a9e3f3c0c2c5cf85" - "2a37009c0b200042ad95c395bdd085ec393700940b200042c1f0c9e1f6d5" - "88e04537008c0b200042cfe1a7fed79ab1b2da003700840b200042d38490" - "85a5b6dff17d3700fc0a200042daf4a7a781f39dc7f8003700f40a200042" - "b88d9b949dd3aa86713700ec0a20004286b08ace96d5b8e0493700e40a20" - "0042e291f4f2d7e689e0443700dc0a200042c188fdead38de5d7f1003700" - "d40a200042fec2c2f2fb858b84283700cc0a200042fe8ebfddfaafafefec" - "003700c40a20004291f5b996b996cbc8bf7f3700bc0a200042b497cfc0d9" - "e3f284043700b40a2000428c9691f2e7bca4ec2d3700ac0a20004287e0c3" - "c29eccb3d21c3700a40a200042c8bbf68fceb0ad9eda0037009c0a200042" - "85c5e3e89284a997fd003700940a20004297bd8ec1effea3935437008c0a" - "200042eea8f8adc2cdbed9bb7f3700840a200042f5a3a4828bfd9ac1ac7f" - "3700fc09200042a087bbac98e0e282827f3700f4092000429a8683e6d8cc" - "ddd7113700ec09200042f0e1a982ee8890e33b3700e40920004286f6f2ba" - "80bf8bc3d5003700dc0920004297cfaad29bac9ec8243700d409200042c9" - "d3b292ffc082e01e3700cc09200042a9a3ffacc691beef6a3700c4092000" - "42a2d1f7c2ff94dce2543700bc09200042c78cfef2b8eabef8713700b409" - "20004286edaddda1fbf6baa37f3700ac09200042fdddbb9dedd1e9ef3337" - "00a409200042c6b2d8f2a9dae59d9f7f37009c09200042b59fb2d0b3e4cf" - "e32337009409200042c5c8c2fe9f869487c00037008c09200042ee91eb8f" - "c9a9c69cd1003700840920004283afa5ac9ded86b7253700fc08200042be" - "b9e4bccb88c99f3c3700f408200042c4d7d7c08b8db9e7f5003700ec0820" - "0042bf948bc7d7b1b0fcc1003700e4082000429a9ed5eea2d281c0e70037" - "00dc08200042acf185b19c87b3c3dd003700d40820004294bcf3c5dec192" - "ebb67f3700cc082000429db89ddb8fc9add13b3700c408200042e99baac8" - "a8faa582817f3700bc08200042daccdaad88c1f9b35b3700b408200042b5" - "d48be3dada8f8b223700ac08200042bdfdafd8a0e7aee4d8003700a40820" - "0042b9a7fddeeba08a8a3e37009c08200042e893cdd1ffdb94af08370094" - "08200042b58bef84d587bf842937008c08200042f4d8c597c3f6bd9f5a37" - "008408200042b3ccedc1b3d5cb987f3700fc07200042e0a38ecbbad9b6b8" - "b97f3700f407200042918cc8bfb089f7ab2f3700ec07200042dca8f8e4f3" - "82aee38f7f3700e407200042a3bfc29bc5d8edebca003700dc072000428e" - "81e4d981f589f1283700d40720004296f48083b9fcdab5b67f3700cc0720" - "0042cf938386a9d3d78a023700c4072000429687f1eff8ebacafef003700" - "bc072000429ef0afffc392fc88163700b407200042dbcda6cadfc8f38797" - "7f3700ac07200042cec2c1f9b5a7ec8e773700a407200042a5c192ecc6ad" - "99ef8f7f37009c07200042fd908df7cd8eeaab1837009407200042b18585" - "d2b981fac47637008c072000428af4e7cfa4fac8c4d70037008407200042" - "d6e7eeadc1c4f395a07f3700fc06200042a394d5b790978ebcec003700f4" - "0620004284f5dcaa92b5c09f663700ec06200042dcbedda48ae58eebe000" - "3700e406200042ac8bc7ea9baff0cf1b3700dc06200041940d6a42003700" - "002000418c0d6a4200370000200041840d6a4200370000200042003700fc" - "0c2000419c0d6a200041dc066a4130108980808000200041a80d6a200041" - "9c0d6a109c80808000200041940e6a200041dc066a41306a413010898080" - "8000200041a00e6a200041940e6a109c808080002000418c0f6a200041dc" - "066a41e0006a41e000108980808000200041980f6a20002802900f200028" - "02940f109f80808000200041e4106a2000419c086a41e000108980808000" - "200041f0106a20002802e81020002802ec10109f80808000200041bc126a" - "200041fc086a4130108980808000200041c8126a200041bc126a109c8080" - "8000200041b4136a200041ac096a41e000108980808000200041c0136a20" - "002802b81320002802bc13109f8080800020004188156a2000418c0a6a41" - "900110898080800020004194156a41086a22014100360200200042808080" - "80800137029415200041d0066a200028028c152202200028029015220341" - "004130418084c08000109880808000200041a0156a20002802d006200028" - "02d406108980808000200041b0156a200041a0156a109c80808000200041" - "94156a200041b0156a419084c08000108780808000200041c8066a200220" - "03413041e00041a084c08000109880808000200041b0156a20002802c806" - "20002802cc0610898080800020002802a01520002802a415108480808000" - "200041a0156a41086a2204200041b0156a41086a22052802003602002000" - "20002902b0153703a015200041b0156a200041a0156a109c808080002000" - "4194156a200041b0156a41b084c08000108780808000200041c0066a2002" - "200341e00041900141c084c08000109880808000200041b0156a20002802" - "c00620002802c40610898080800020002802a01520002802a41510848080" - "800020042005280200360200200020002902b0153703a015200041b0156a" - "200041a0156a109c8080800020004194156a200041b0156a41d084c08000" - "108780808000200041c81c6a200128020036020020002000290294153703" - "c01c200041b0156a200041a80d6a41e8001086818080001a200041b0156a" - "41e8006a200041a00e6a41e8001086818080001a20004180176a20004198" - "0f6a41c8011086818080002106200041c8186a200041f0106a41c8011086" - "818080002107200041901a6a200041c8126a41e8001086818080001a2000" - "41f81a6a200041c0136a41c8011086818080002108200041f8326a200041" - "9c0b6a109e80808000200041d01c6a200041f8326a41e084c08000411710" - "9780808000200041f8326a200041cc0b6a10a080808000200041b81d6a20" - "0041f8326a41f784c080004117109480808000200041f8326a200041ac0c" - "6a109e80808000200041801f6a200041f8326a418e85c080004117109780" - "808000200041e81f6a200041d01c6a41e8001086818080001a200041e81f" - "6a41e8006a200041b81d6a41c8011086818080001a20004198226a200041" - "801f6a41e8001086818080001a200041a0e8006a41c00041201080808080" - "0002400240024002400240024020002802a4684101470d00200041b8066a" - "20002802a8684108412041d880c08000108a80808000200041003602c85b" - "200020002802bc0622033602c45b200020002802b80622023602c05b2000" - "41f8326a41c0004120108080808000024020002802fc324101470d004100" - "21050240200220002802803322014f0d00200041b0066a200041c0db006a" - "410020014120108b8080800020002802b0062202418180808078470d0520" - "002802c45b210320002802c85b21050b200041dc0c6a2102200320054105" - "746a210341c000210103402001450d03200041b0046a2002290000220942" - "0042edb8ca9f8fb2facc494200108781808000200041c0046a2009420042" - "a3b8c9bcb8b9bbb62b4200108781808000200041d0046a20094200428ff3" - "d092e792c5e9054200108781808000200041e0046a200942004291fee7fa" - "99bbb6a4074200108781808000200041f0056a2002290008220a420042ed" - "b8ca9f8fb2facc49420010878180800020004180066a200a420042a3b8c9" - "bcb8b9bbb62b420010878180800020004190066a200a4200428ff3d092e7" - "92c5e9054200108781808000200041a0066a200a42004291fee7fa99bbb6" - "a4074200108781808000200041b0056a2002290010220b420042edb8ca9f" - "8fb2facc494200108781808000200041c0056a200b420042a3b8c9bcb8b9" - "bbb62b4200108781808000200041d0056a200b4200428ff3d092e792c5e9" - "054200108781808000200041e0056a200b42004291fee7fa99bbb6a40742" - "00108781808000200041f0046a2002290018220c420042edb8ca9f8fb2fa" - "cc49420010878180800020004180056a200c420042a3b8c9bcb8b9bbb62b" - "420010878180800020004190056a200c4200428ff3d092e792c5e9054200" - "108781808000200041a0056a200c42004291fee7fa99bbb6a40742001087" - "81808000200041a0046a20002903b004220d42ffffffff6f7e220e420042" - "8180808070420010878180800020004190046a200e420042feb7f9ffaf80" - "e9ded3004200108781808000200041c0036a200e42004285b087cd8081f6" - "9c334200108781808000200041f0026a200e420042c8faf5ccb2eae9f6f3" - "00420010878180800020004180046a20002903f005220f20002903c00422" - "10200041b0046a41086a2903007c22117c22122000290390047c22132000" - "41a0046a41086a290300200d20002903a004220e7c200e54ad7c7c220d42" - "ffffffff6f7e220e42004281808080704200108781808000200041f0036a" - "200e420042feb7f9ffaf80e9ded3004200108781808000200041e0036a20" - "0e42004285b087cd8081f69c334200108781808000200041d0036a200e42" - "0042c8faf5ccb2eae9f6f3004200108781808000200041b0036a20004190" - "046a41086a2903002013201254ad7c200d201354ad7c221420002903c003" - "7c2213200041c0046a41086a2903002011201054ad7c221520002903d004" - "7c22102000290380067c2211200041f0056a41086a2903002012200f54ad" - "7c7c221220002903b0057c22167c220f20002903f0037c22172000418004" - "6a41086a290300200029038004220e200d7c200e54ad7c7c220d42ffffff" - "ff6f7e220e42004281808080704200108781808000200041a0036a200e42" - "0042feb7f9ffaf80e9ded300420010878180800020004190036a200e4200" - "4285b087cd8081f69c33420010878180800020004180036a200e420042c8" - "faf5ccb2eae9f6f3004200108781808000200041e0026a200041f0036a41" - "086a2903002017200f54ad7c200d201754ad7c221820002903e0037c2217" - "200041c0036a41086a2903002013201454ad7c200f201354ad7c22192000" - "2903f0027c2213200041d0046a41086a2903002010201554ad7c221a2000" - "2903e0047c220f2000290390067c221420004180066a41086a2903002011" - "201054ad7c2012201154ad7c7c221020002903c0057c2211200041b0056a" - "41086a2903002016201254ad7c7c221220002903f0047c221b7c221c7c22" - "1520002903a0037c2216200041b0036a41086a29030020002903b003220e" - "200d7c200e54ad7c7c220d42ffffffff6f7e220e42004281808080704200" - "108781808000200041d0026a200e420042feb7f9ffaf80e9ded300420010" - "8781808000200041c0026a200e42004285b087cd8081f69c334200108781" - "808000200041b0026a200e420042c8faf5ccb2eae9f6f300420010878180" - "8000200041d0036a41086a290300211d20004180056a41086a290300211e" - "200041d0056a41086a290300211f200041a0066a41086a29030021202000" - "2903e00521212000290390052122200029038003212320004180036a4108" - "6a290300212420004190036a41086a290300212520004190056a41086a29" - "03002126200041e0056a41086a290300212720002903a005212820002903" - "b0022129200041b0026a41086a290300212a20002903c002212b200041c0" - "026a41086a290300212c200020002903d002222d200041e0046a41086a29" - "0300200f201a54ad7c221a20002903a0067c220e20004190066a41086a29" - "03002014200f54ad7c2010201454ad7c7c220f20002903d0057c22142000" - "41c0056a41086a2903002011201054ad7c2012201154ad7c7c2210200029" - "0380057c2211200041f0046a41086a290300201b201254ad7c7c22122000" - "41f0026a41086a2903002013201954ad7c201c201354ad7c7c2213200029" - "03d0037c2219200041e0036a41086a2903002017201854ad7c2015201754" - "ad7c7c22172000290390037c2218200041a0036a41086a29030020162015" - "54ad7c200d201654ad7c7c22167c2215200041e0026a41086a2903002000" - "2903e002221b200d7c201b54ad7c7c221b3703f8322000202b2023202220" - "212020200e201a54ad7c200f200e54ad7c221a7c220e201f2014200f54ad" - "7c2010201454ad7c7c220d7c220f201e2011201054ad7c2012201154ad7c" - "7c22102013201254ad7c2212201d2019201354ad7c2017201954ad7c7c22" - "137c221120252018201754ad7c2016201854ad7c7c22177c2214200041d0" - "026a41086a2903002015202d54ad7c201b201554ad7c7c22153703803320" - "0020292012201054ad2013201254ad7c221620282027200e201a54ad7c20" - "0d200e54ad7c22197c220e2026200f200d54ad7c2010200f54ad7c7c2210" - "7c221220242011201354ad7c2017201154ad7c7c22137c220d202c201420" - "1754ad7c2015201454ad7c7c22113703883320002012201654ad20132012" - "54ad7c200041a0056a41086a290300200e201954ad7c2010200e54ad7c7c" - "202a200d201354ad7c2011200d54ad7c7c37039033200041a0e8006a2000" - "41f8326a10a28080800020002903a068210e20002903a868211220002903" - "b068211320002903b868210d200942ffffffff0f7c200954ad427f7c2209" - "2009200a7c220a200954ad7c200a4282c88680d0ff96a1ac7f7c200a54ad" - "7c427f7c423f872209200b20097c2209200b54ad7c200942fbcff8b2fffe" - "89e34c7c200954ad7c427f7c423f872209200c20097c2209200c54ad7c20" - "0942b8858ab3cd9596898c7f7c200954ad7ca741016a41017110a3808080" - "0021042000411836028457200041a585c0800036028057200020043a00c0" - "52200441ff01714101470d04200341186a200d370300200341106a201337" - "0300200341086a20123703002003200e370300200341206a210320054101" - "6a210520022001412020014120491b22046a2102200120046b21010c000b" - "0b2000410036028833200041013602fc32200041d085c080003602f83220" - "00420437028033200041f8326a41d880c0800010a480808000000b200041" - "0036028833200041013602fc32200041d085c080003602f8322000420437" - "028033200041f8326a41d880c0800010a480808000000b20002802c45b21" - "2e20002802c05b212f200541016a20002802c81c470d0220004180236a20" - "002802c41c220210a580808000200241e8006a2130200041d4d2006a2131" - "200041c0d2006a41086a2132200041a0ce006a2133200041c0db006a4130" - "6a2134200041a0dc006a2135410021040340024020042005470d00200041" - "f8326a20004180236a41e0006a10a68080800041002102200041a0e8006a" - "410041301085818080001a200041c0db006a200041a0e8006a200041f832" - "6a20002d00a833109080808000200041a0e8006a20004180236a200041c0" - "db006a10a780808000200041a0e8006a41306a20004180236a41306a2000" - "41c0db006a10a7808080002000410010a3808080003a008069200041f832" - "6a10a88080800020004190246a200041a0e8006a200041f8326a200041c0" - "db006a10a98080800010aa80808000200041f8246a200041b81d6a10ab80" - "80800020004188256a200710ab8080800020004198256a200810ab808080" - "00200041a8256a200610ab80808000200041b82e6a20004190246a108f80" - "808000200041c0376a200041801f6a108f80808000200041803c6a200041" - "b0156a108f808080002000200041a8256a3602942a2000200041803c6a36" - "02902a200020004198256a36028c2a2000200041c0376a3602882a200020" - "004188256a3602842a2000200041b82e6a3602802a2000200041f8246a36" - "02fc292000200041e81f6a3602f829200042043702c4642000200041f829" - "6a3602c064200041b8256a10ac80808000200041f8326a41a0026a210520" - "0041b8256a41a0026a213620004180d7006a41c0016a213320004180d700" - "6a41e0006a2134200041c0db006a41e0036a2135200041a0e8006a41e003" - "6a2132200041c0db006a4180036a2106200041a0e8006a4180036a210720" - "0041c0db006a41a0026a2108200041a0e8006a41a0026a2131200041c0d2" - "006a41c0016a2137200041c0d2006a41e0006a2138200041c0db006a41c0" - "016a2139200041a0e8006a41c0016a213a200041c0db006a41e0006a213b" - "200041a0e8006a41e0006a213c41c000213d034002400240203d450d0020" - "02410171210342808082808080a080e900203d417f6a223d413f71ad88a7" - "21022003450d02200041f8326a200041b8256a41c0041086818080001a20" - "0041b8256a200041c0e4006a200041f8326a10ad80808000200241017145" - "0d01200041c0db006a200041b8256a41c0041086818080001a20002802c4" - "64410374210120002802c064210320002802c8642130024003402001450d" - "01200328020422042d000c20032802002d00607210a38080800021022000" - "41a0e8006a200041c0db006a200441046a280200200441086a2802002030" - "41dc8cc0800010ae80808000200328020010af80808000200041c0d2006a" - "200041a0e8006a200041c0db006a200210b0808080002038203c203b2002" - "10b0808080002037203a2039200210b08080800020004180d7006a203120" - "08200210b080808000203420072006200210b08080800020332032203520" - "0210b080808000200041f8326a200041c0d2006a41a0021086818080001a" - "200520004180d7006a41a0021086818080001a200041c0db006a200041f8" - "326a41c0041086818080001a200141786a2101200341086a21030c000b0b" - "2000203041016a3602c864200041b8256a200041c0db006a41c004108681" - "8080001a0c010b200041f8326a200041b8256a41c0041086818080001a20" - "0041b8256a200041c0e4006a200041f8326a10ad80808000200041f8326a" - "41a0026a223e203610b180808000200041f8326a200041b8256a41a00210" - "86818080001a200041b8256a200041f8326a41c0041086818080001a2000" - "41f8296a200041b8256a41c0041086818080001a200041c0d2006a41306a" - "2230200041b8256a41306a10b280808000200041c0d2006a200041b8256a" - "41301086818080001a200041c0db006a41306a2201200041b8256a419001" - "6a10b280808000200041c0db006a200041b8256a41e0006a413010868180" - "80001a200041a0e8006a41306a2203200041b8256a41f0016a10b2808080" - "00200041a0e8006a200041b8256a41c0016a41301086818080001a200041" - "f8326a410041301085818080001a200042c18e8ea3d58c88f8183703d033" - "200042d2a1c19ee8addffc033703c8332000429e97eb8de0d783db8e7f37" - "03c03320004295b7949cfdd590b8d8003703b833200042d2cbb6fee1c8c8" - "d5dd003703b033200042f1e0c7b3c8bcf2814d3703a83320004180d7006a" - "41e0006a2232200041c0db006a200041f8326a10b380808000200041f832" - "6a41306a410041301085818080002105200042ba8a92abf1a7dbf2143703" - "a033200042e8a0ee96fe89bcf21437039833200042a4a0a0f4c7f1c686a2" - "7f37039033200042acfced84e38c82c4d00037038833200042d5cb9694b3" - "cac8f92a37038033200042c38bd5b3c8bcf286897f3703f83220004180d7" - "006a41c0016a2204200041a0e8006a200041f8326a10b380808000200041" - "80d7006a200041c0d2006a41e0001086818080001a20004180ce006a4130" - "6a2202200041b8256a41d0026a10b28080800020004180ce006a200041b8" - "256a41a0026a41301086818080001a2030200041b8256a41b0036a10b280" - "808000200041c0d2006a200041b8256a4180036a41301086818080001a20" - "03200041b8256a4190046a10b280808000200041a0e8006a200041b8256a" - "41e0036a41301086818080001a200041f8326a410041301085818080001a" - "200042c18e8ea3d58c88f8183703d033200042d2a1c19ee8addffc033703" - "c8332000429e97eb8de0d783db8e7f3703c03320004295b7949cfdd590b8" - "d8003703b833200042d2cbb6fee1c8c8d5dd003703b033200042f1e0c7b3" - "c8bcf2814d3703a833200041c0db006a41e0006a2235200041c0d2006a20" - "0041f8326a10b3808080002005410041301085818080002133200042ba8a" - "92abf1a7dbf2143703a033200042e8a0ee96fe89bcf21437039833200042" - "a4a0a0f4c7f1c686a27f37039033200042acfced84e38c82c4d000370388" - "33200042d5cb9694b3cac8f92a37038033200042c38bd5b3c8bcf286897f" - "3703f832200041c0db006a41c0016a223b200041a0e8006a200041f8326a" - "10b380808000200041c0db006a20004180ce006a41e0001086818080001a" - "200042afff91c4a8fbbb87113703f86820004289bd83adbef9849c2e3703" - "f068200042d0d1a385a497e78d413703e86820004294a7e7acc2baa5a44f" - "3703e068200042ecf9a5e2bf8da8a1d8003703d868200042c6ac97e7d4d5" - "9afbb27f3703d068200042ebcded87fbc188f9083703c868200042cd9cab" - "eda5fde4f11c3703c068200042eed3f096abd9ebada37f3703b868200042" - "8fc5dc88cd998ff4977f3703b0682000429386aaa8abf2d7b4463703a868" - "200042e5a8e798abaaa584073703a068200041a0e8006a41e0006a410041" - "c0011085818080002108203e200041c0db006a200041a0e8006a10b48080" - "8000200041f8326a20004180d7006a41a0021086818080001a2002203310" - "b28080800020004180ce006a200041f8326a41301086818080001a200041" - "80d7006a41306a2207200041f8326a4190016a10b28080800020004180d7" - "006a200041f8326a41e0006a223f41301086818080001a2001200041f832" - "6a41f0016a10b280808000200041c0db006a200041f8326a41c0016a2240" - "41301086818080001a200041a0e8006a410041301085818080001a200042" - "c18e8ea3d58c88f8183703f868200042d2a1c19ee8addffc033703f06820" - "00429e97eb8de0d783db8e7f3703e86820004295b7949cfdd590b8d80037" - "03e068200042d2cbb6fee1c8c8d5dd003703d868200042f1e0c7b3c8bcf2" - "814d3703d068200041c0d2006a41e0006a223820004180d7006a200041a0" - "e8006a10b3808080002003410041301085818080002103200042ba8a92ab" - "f1a7dbf2143703c868200042e8a0ee96fe89bcf2143703c068200042a4a0" - "a0f4c7f1c686a27f3703b868200042acfced84e38c82c4d0003703b06820" - "0042d5cb9694b3cac8f92a3703a868200042c38bd5b3c8bcf286897f3703" - "a068200041c0d2006a41c0016a2234200041c0db006a200041a0e8006a10" - "b380808000200041c0d2006a20004180ce006a41e0001086818080001a20" - "0041c0c9006a41306a2205200041f8326a41d0026a10b280808000200041" - "c0c9006a203e41301086818080001a2002200041f8326a41b0036a10b280" - "80800020004180ce006a200041f8326a4180036a22414130108681808000" - "1a2001200041f8326a4190046a10b280808000200041c0db006a200041f8" - "326a41e0036a224241301086818080001a200041a0e8006a410041301085" - "818080001a200042c18e8ea3d58c88f8183703f868200042d2a1c19ee8ad" - "dffc033703f0682000429e97eb8de0d783db8e7f3703e86820004295b794" - "9cfdd590b8d8003703e068200042d2cbb6fee1c8c8d5dd003703d8682000" - "42f1e0c7b3c8bcf2814d3703d068203220004180ce006a200041a0e8006a" - "10b3808080002003410041301085818080002143200042ba8a92abf1a7db" - "f2143703c868200042e8a0ee96fe89bcf2143703c068200042a4a0a0f4c7" - "f1c686a27f3703b868200042acfced84e38c82c4d0003703b068200042d5" - "cb9694b3cac8f92a3703a868200042c38bd5b3c8bcf286897f3703a06820" - "04200041c0db006a200041a0e8006a10b38080800020004180d7006a2000" - "41c0c9006a41e0001086818080001a200042afff91c4a8fbbb8711370398" - "5c20004289bd83adbef9849c2e3703905c200042d0d1a385a497e78d4137" - "03885c20004294a7e7acc2baa5a44f3703805c200042ecf9a5e2bf8da8a1" - "d8003703f85b200042c6ac97e7d4d59afbb27f3703f05b200042ebcded87" - "fbc188f9083703e85b200042cd9cabeda5fde4f11c3703e05b200042eed3" - "f096abd9ebada37f3703d85b2000428fc5dc88cd998ff4977f3703d05b20" - "00429386aaa8abf2d7b4463703c85b200042e5a8e798abaaa584073703c0" - "5b2035410041c001108581808000213c200041a0e8006a41a0026a220320" - "004180d7006a200041c0db006a10b480808000200041a0e8006a200041c0" - "d2006a41a0021086818080001a2005204310b280808000200041c0c9006a" - "200041a0e8006a41301086818080001a2030200041a0e8006a4190016a22" - "4410b280808000200041c0d2006a200841301086818080001a2007200041" - "a0e8006a41f0016a224510b28080800020004180d7006a200041a0e8006a" - "41c0016a223a41301086818080001a200041c0db006a4100413010858180" - "80001a200042c18e8ea3d58c88f8183703985c200042d2a1c19ee8addffc" - "033703905c2000429e97eb8de0d783db8e7f3703885c20004295b7949cfd" - "d590b8d8003703805c200042d2cbb6fee1c8c8d5dd003703f85b200042f1" - "e0c7b3c8bcf2814d3703f05b20004180ce006a41e0006a2236200041c0d2" - "006a200041c0db006a10b380808000200141004130108581808000210120" - "0042ba8a92abf1a7dbf2143703e85b200042e8a0ee96fe89bcf2143703e0" - "5b200042a4a0a0f4c7f1c686a27f3703d85b200042acfced84e38c82c4d0" - "003703d05b200042d5cb9694b3cac8f92a3703c85b200042c38bd5b3c8bc" - "f286897f3703c05b20004180ce006a41c0016a224620004180d7006a2000" - "41c0db006a10b38080800020004180ce006a200041c0c9006a41e0001086" - "818080001a20004180c5006a41306a2231200041a0e8006a41d0026a2247" - "10b28080800020004180c5006a200341301086818080001a2005200041a0" - "e8006a41b0036a224810b280808000200041c0c9006a200041a0e8006a41" - "80036a224941301086818080001a2007200041a0e8006a4190046a224a10" - "b28080800020004180d7006a200041a0e8006a41e0036a224b4130108681" - "8080001a200041c0db006a410041301085818080001a200042c18e8ea3d5" - "8c88f8183703985c200042d2a1c19ee8addffc033703905c2000429e97eb" - "8de0d783db8e7f3703885c20004295b7949cfdd590b8d8003703805c2000" - "42d2cbb6fee1c8c8d5dd003703f85b200042f1e0c7b3c8bcf2814d3703f0" - "5b2038200041c0c9006a200041c0db006a10b38080800020014100413010" - "85818080002135200042ba8a92abf1a7dbf2143703e85b200042e8a0ee96" - "fe89bcf2143703e05b200042a4a0a0f4c7f1c686a27f3703d85b200042ac" - "fced84e38c82c4d0003703d05b200042d5cb9694b3cac8f92a3703c85b20" - "0042c38bd5b3c8bcf286897f3703c05b203420004180d7006a200041c0db" - "006a10b380808000200041c0d2006a20004180c5006a41e0001086818080" - "001a200042afff91c4a8fbbb87113703d85720004289bd83adbef9849c2e" - "3703d057200042d0d1a385a497e78d413703c85720004294a7e7acc2baa5" - "a44f3703c057200042ecf9a5e2bf8da8a1d8003703b857200042c6ac97e7" - "d4d59afbb27f3703b057200042ebcded87fbc188f9083703a857200042cd" - "9cabeda5fde4f11c3703a057200042eed3f096abd9ebada37f3703985720" - "00428fc5dc88cd998ff4977f370390572000429386aaa8abf2d7b4463703" - "8857200042e5a8e798abaaa58407370380572032410041c0011085818080" - "00213d200041c0db006a41a0026a2232200041c0d2006a20004180d7006a" - "10b480808000200041c0db006a20004180ce006a41a0021086818080001a" - "2031203510b28080800020004180c5006a200041c0db006a413010868180" - "80001a2002200041c0db006a4190016a224c10b28080800020004180ce00" - "6a203c41301086818080001a2030200041c0db006a41f0016a224d10b280" - "808000200041c0d2006a203b41301086818080001a20004180d7006a4100" - "41301085818080001a200042c18e8ea3d58c88f8183703d857200042d2a1" - "c19ee8addffc033703d0572000429e97eb8de0d783db8e7f3703c8572000" - "4295b7949cfdd590b8d8003703c057200042d2cbb6fee1c8c8d5dd003703" - "b857200042f1e0c7b3c8bcf2814d3703b057200041c0c9006a41e0006a22" - "0620004180ce006a20004180d7006a10b380808000200741004130108581" - "8080002101200042ba8a92abf1a7dbf2143703a857200042e8a0ee96fe89" - "bcf2143703a057200042a4a0a0f4c7f1c686a27f37039857200042acfced" - "84e38c82c4d00037039057200042d5cb9694b3cac8f92a37038857200042" - "c38bd5b3c8bcf286897f37038057200041c0c9006a41c0016a2207200041" - "c0d2006a20004180d7006a10b380808000200041c0c9006a20004180c500" - "6a41e0001086818080001a200041c0c0006a41306a2237200041c0db006a" - "41d0026a224e10b280808000200041c0c0006a203241301086818080001a" - "2031200041c0db006a41b0036a224f10b28080800020004180c5006a2000" - "41c0db006a4180036a225041301086818080001a2030200041c0db006a41" - "90046a225110b280808000200041c0d2006a200041c0db006a41e0036a22" - "5241301086818080001a20004180d7006a410041301085818080001a2000" - "42c18e8ea3d58c88f8183703d857200042d2a1c19ee8addffc033703d057" - "2000429e97eb8de0d783db8e7f3703c85720004295b7949cfdd590b8d800" - "3703c057200042d2cbb6fee1c8c8d5dd003703b857200042f1e0c7b3c8bc" - "f2814d3703b057203620004180c5006a20004180d7006a10b38080800020" - "01410041301085818080002101200042ba8a92abf1a7dbf2143703a85720" - "0042e8a0ee96fe89bcf2143703a057200042a4a0a0f4c7f1c686a27f3703" - "9857200042acfced84e38c82c4d00037039057200042d5cb9694b3cac8f9" - "2a37038857200042c38bd5b3c8bcf286897f370380572046200041c0d200" - "6a20004180d7006a10b38080800020004180ce006a200041c0c0006a41e0" - "001086818080001a200042afff91c4a8fbbb87113703985320004289bd83" - "adbef9849c2e37039053200042d0d1a385a497e78d413703885320004294" - "a7e7acc2baa5a44f37038053200042ecf9a5e2bf8da8a1d8003703f85220" - "0042c6ac97e7d4d59afbb27f3703f052200042ebcded87fbc188f9083703" - "e852200042cd9cabeda5fde4f11c3703e052200042eed3f096abd9ebada3" - "7f3703d8522000428fc5dc88cd998ff4977f3703d0522000429386aaa8ab" - "f2d7b4463703c852200042e5a8e798abaaa584073703c0522038410041c0" - "01108581808000213820004180d7006a41a0026a225320004180ce006a20" - "0041c0d2006a10b48080800020004180d7006a200041c0c9006a41a00210" - "86818080001a2037200110b280808000200041c0c0006a20004180d7006a" - "41301086818080001a200520004180d7006a4190016a10b2808080002000" - "41c0c9006a203d41301086818080001a200220004180d7006a41f0016a10" - "b28080800020004180ce006a200441301086818080001a200041c0d2006a" - "410041301085818080001a200042c18e8ea3d58c88f81837039853200042" - "d2a1c19ee8addffc03370390532000429e97eb8de0d783db8e7f37038853" - "20004295b7949cfdd590b8d80037038053200042d2cbb6fee1c8c8d5dd00" - "3703f852200042f1e0c7b3c8bcf2814d3703f05220004180c5006a41e000" - "6a2254200041c0c9006a200041c0d2006a10b38080800020304100413010" - "85818080002139200042ba8a92abf1a7dbf2143703e852200042e8a0ee96" - "fe89bcf2143703e052200042a4a0a0f4c7f1c686a27f3703d852200042ac" - "fced84e38c82c4d0003703d052200042d5cb9694b3cac8f92a3703c85220" - "0042c38bd5b3c8bcf286897f3703c05220004180c5006a41c0016a225520" - "004180ce006a200041c0d2006a10b38080800020004180c5006a200041c0" - "c0006a41e0001086818080001a200041803c6a41306a223020004180d700" - "6a41d0026a10b280808000200041803c6a205341301086818080001a2037" - "20004180d7006a41b0036a10b280808000200041c0c0006a20004180d700" - "6a4180036a41301086818080001a200220004180d7006a4190046a10b280" - "80800020004180ce006a20004180d7006a41e0036a41301086818080001a" - "200041c0d2006a410041301085818080001a200042c18e8ea3d58c88f818" - "37039853200042d2a1c19ee8addffc03370390532000429e97eb8de0d783" - "db8e7f3703885320004295b7949cfdd590b8d80037038053200042d2cbb6" - "fee1c8c8d5dd003703f852200042f1e0c7b3c8bcf2814d3703f052200620" - "0041c0c0006a200041c0d2006a10b3808080002039410041301085818080" - "002139200042ba8a92abf1a7dbf2143703e852200042e8a0ee96fe89bcf2" - "143703e052200042a4a0a0f4c7f1c686a27f3703d852200042acfced84e3" - "8c82c4d0003703d052200042d5cb9694b3cac8f92a3703c852200042c38b" - "d5b3c8bcf286897f3703c052200720004180ce006a200041c0d2006a10b3" - "80808000200041c0c9006a200041803c6a41e0001086818080001a200042" - "afff91c4a8fbbb87113703d84e20004289bd83adbef9849c2e3703d04e20" - "0042d0d1a385a497e78d413703c84e20004294a7e7acc2baa5a44f3703c0" - "4e200042ecf9a5e2bf8da8a1d8003703b84e200042c6ac97e7d4d59afbb2" - "7f3703b04e200042ebcded87fbc188f9083703a84e200042cd9cabeda5fd" - "e4f11c3703a04e200042eed3f096abd9ebada37f3703984e2000428fc5dc" - "88cd998ff4977f3703904e2000429386aaa8abf2d7b4463703884e200042" - "e5a8e798abaaa584073703804e2036410041c00110858180800021362000" - "41c0d2006a41a0026a2256200041c0c9006a20004180ce006a10b4808080" - "00200041c0d2006a20004180c5006a41a0021086818080001a2030203910" - "b280808000200041803c6a200041c0d2006a41301086818080001a203720" - "0041c0d2006a4190016a225710b280808000200041c0c0006a2038413010" - "86818080001a2005200041c0d2006a41f0016a225810b280808000200041" - "c0c9006a203441301086818080001a20004180ce006a4100413010858180" - "80001a200042c18e8ea3d58c88f8183703d84e200042d2a1c19ee8addffc" - "033703d04e2000429e97eb8de0d783db8e7f3703c84e20004295b7949cfd" - "d590b8d8003703c04e200042d2cbb6fee1c8c8d5dd003703b84e200042f1" - "e0c7b3c8bcf2814d3703b04e2054200041c0c0006a20004180ce006a10b3" - "808080002002410041301085818080002102200042ba8a92abf1a7dbf214" - "3703a84e200042e8a0ee96fe89bcf2143703a04e200042a4a0a0f4c7f1c6" - "86a27f3703984e200042acfced84e38c82c4d0003703904e200042d5cb96" - "94b3cac8f92a3703884e200042c38bd5b3c8bcf286897f3703804e205520" - "0041c0c9006a20004180ce006a10b38080800020004180c5006a20004180" - "3c6a41e0001086818080001a200041c0376a41306a2259200041c0d2006a" - "41d0026a225a10b280808000200041c0376a205641301086818080001a20" - "30200041c0d2006a41b0036a225b10b280808000200041803c6a200041c0" - "d2006a4180036a225c41301086818080001a2037200041c0d2006a419004" - "6a225d10b280808000200041c0c0006a200041c0d2006a41e0036a225e41" - "301086818080001a20004180ce006a410041301085818080001a200042c1" - "8e8ea3d58c88f8183703d84e200042d2a1c19ee8addffc033703d04e2000" - "429e97eb8de0d783db8e7f3703c84e20004295b7949cfdd590b8d8003703" - "c04e200042d2cbb6fee1c8c8d5dd003703b84e200042f1e0c7b3c8bcf281" - "4d3703b04e2006200041803c6a20004180ce006a10b38080800020024100" - "4130108581808000215f200042ba8a92abf1a7dbf2143703a84e200042e8" - "a0ee96fe89bcf2143703a04e200042a4a0a0f4c7f1c686a27f3703984e20" - "0042acfced84e38c82c4d0003703904e200042d5cb9694b3cac8f92a3703" - "884e200042c38bd5b3c8bcf286897f3703804e2007200041c0c0006a2000" - "4180ce006a10b380808000200041c0c9006a200041c0376a41e000108681" - "8080001a200042afff91c4a8fbbb87113703d84e20004289bd83adbef984" - "9c2e3703d04e200042d0d1a385a497e78d413703c84e20004294a7e7acc2" - "baa5a44f3703c04e200042ecf9a5e2bf8da8a1d8003703b84e200042c6ac" - "97e7d4d59afbb27f3703b04e200042ebcded87fbc188f9083703a84e2000" - "42cd9cabeda5fde4f11c3703a04e200042eed3f096abd9ebada37f370398" - "4e2000428fc5dc88cd998ff4977f3703904e2000429386aaa8abf2d7b446" - "3703884e200042e5a8e798abaaa584073703804e2036410041c001108581" - "8080002160200041b82e6a41a0026a200041c0c9006a20004180ce006a10" - "b480808000200041b82e6a20004180c5006a41a0021086818080001a2000" - "41a0e8006a200041f8296a10b58080800020004180ce006a200041f8296a" - "41a0026a226110b580808000200041f8326a20004180ce006a10b6808080" - "00200041c0c9006a200041a0e8006a200041f8326a10b780808000200041" - "f8326a2006200710b38080800020004180e0006a200041f8326a203310b8" - "8080800020004180e0006a41306a2230200041f8326a203310b980808000" - "200041f8326a200041c0c9006a10ba80808000200041a0e2006a200041f8" - "326a20004180e0006a10bb80808000200041f8326a200710ba8080800020" - "0041c0e4006a200041f8326a203310b880808000200041c0e4006a41306a" - "2236200041f8326a203310b980808000200041f8326a200041c0c9006a20" - "0610b380808000200041c0376a200041c0e4006a200041f8326a10bb8080" - "8000200041803c6a200610ba80808000200041f8326a200041c0c9006a20" - "0710b380808000200041c0c0006a200041803c6a200041f8326a10bb8080" - "8000200041a0e8006a2006200041c0c0006a10b380808000200041f8326a" - "2007200041c0376a10b380808000200041c0db006a200041a0e8006a2000" - "41f8326a10bc8080800020004180c5006a200041c0db006a203510b88080" - "80002031200041c0db006a203510b980808000200041f8326a200041c0c9" - "006a200041a0e2006a10b380808000200041c0d2006a20004180c5006a20" - "0041f8326a10bc80808000200041a0e8006a200041c0d2006a10bd808080" - "00200041f8326a203910bd80808000200041e0e6006a200041a0e8006a20" - "0041f8326a10b980808000200041c0db006a200041e0e6006a10a6808080" - "0020004180d7006a410041301085818080001a200041c0e7006a20004180" - "d7006a200041c0db006a20002d00f05b2202109080808000200041f8326a" - "200041c0d2006a200041c0e7006a10a780808000200041a0e8006a200041" - "c0e7006a10b28080800020332039200041a0e8006a10a780808000200041" - "a0e8006a200041f8326a41e0001086818080001a200020023a0080692000" - "4180d7006a410041e0001085818080001a200041c0db006a20004180d700" - "6a200041a0e8006a200210b080808000200041f8326a200041c0db006a20" - "0041a0e2006a10b380808000203f200041c0db006a200041c0376a10b380" - "8080002040200041c0db006a200041c0c0006a10b380808000200041c0db" - "006a200041f8326a41a0021086818080001a200020023a00e05d20004180" - "d7006a410041a0021085818080001a200041c0d2006a20004180d7006a20" - "0041c0db006a200210b0808080002038203d203c200210b0808080002034" - "2004203b200210b080808000200041a0e8006a200041f8296a200041c0d2" - "006a10b480808000200041f8326a200041c0d2006a10b180808000200320" - "61200041f8326a10b480808000200041f8326a200041a0e8006a41c00410" - "86818080001a200020023a00b837200041803c6a410041c0041085818080" - "001a200041c0db006a200041803c6a200041f8326a200210b08080800020" - "3c200041803c6a41e0006a203f200210b080808000203b200041803c6a41" - "c0016a2040200210b080808000200041a0e8006a200041803c6a41a0026a" - "203e200210b0808080002008200041803c6a4180036a2041200210b08080" - "8000203a200041803c6a41e0036a2042200210b080808000200041c0376a" - "200041c0db006a41a0021086818080001a200041c0376a41a0026a200041" - "a0e8006a41a0021086818080002161200041c0c0006a200041b82e6a2000" - "41c0376a10be80808000200041c0376a200041c0c0006a41c00410868180" - "80001a205f203710b28080800020004180ce006a200041c0c0006a413010" - "86818080001a2001200041c0c0006a4190016a10b28080800020004180d7" - "006a200041c0c0006a41e0006a41301086818080001a2035200041c0c000" - "6a41f0016a10b280808000200041c0db006a200041c0c0006a41c0016a41" - "301086818080001a200041a0e8006a410041301085818080001a200042c1" - "8e8ea3d58c88f8183703f868200042d2a1c19ee8addffc033703f0682000" - "429e97eb8de0d783db8e7f3703e86820004295b7949cfdd590b8d8003703" - "e068200042d2cbb6fee1c8c8d5dd003703d868200042f1e0c7b3c8bcf281" - "4d3703d068203820004180d7006a200041a0e8006a10b380808000204341" - "0041301085818080002133200042ba8a92abf1a7dbf2143703c868200042" - "e8a0ee96fe89bcf2143703c068200042a4a0a0f4c7f1c686a27f3703b868" - "200042acfced84e38c82c4d0003703b068200042d5cb9694b3cac8f92a37" - "03a868200042c38bd5b3c8bcf286897f3703a0682034200041c0db006a20" - "0041a0e8006a10b380808000200041c0d2006a20004180ce006a41e00010" - "86818080001a2005200041c0c0006a41d0026a10b280808000200041c0c9" - "006a200041c0c0006a41a0026a223741301086818080001a205f200041c0" - "c0006a41b0036a10b28080800020004180ce006a200041c0c0006a418003" - "6a41301086818080001a2035200041c0c0006a4190046a10b28080800020" - "0041c0db006a200041c0c0006a41e0036a41301086818080001a200041a0" - "e8006a410041301085818080001a200042c18e8ea3d58c88f8183703f868" - "200042d2a1c19ee8addffc033703f0682000429e97eb8de0d783db8e7f37" - "03e86820004295b7949cfdd590b8d8003703e068200042d2cbb6fee1c8c8" - "d5dd003703d868200042f1e0c7b3c8bcf2814d3703d068203d20004180ce" - "006a200041a0e8006a10b380808000203341004130108581808000210620" - "0042ba8a92abf1a7dbf2143703c868200042e8a0ee96fe89bcf2143703c0" - "68200042a4a0a0f4c7f1c686a27f3703b868200042acfced84e38c82c4d0" - "003703b068200042d5cb9694b3cac8f92a3703a868200042c38bd5b3c8bc" - "f286897f3703a0682004200041c0db006a200041a0e8006a10b380808000" - "20004180d7006a200041c0c9006a41e0001086818080001a200042afff91" - "c4a8fbbb87113703985c20004289bd83adbef9849c2e3703905c200042d0" - "d1a385a497e78d413703885c20004294a7e7acc2baa5a44f3703805c2000" - "42ecf9a5e2bf8da8a1d8003703f85b200042c6ac97e7d4d59afbb27f3703" - "f05b200042ebcded87fbc188f9083703e85b200042cd9cabeda5fde4f11c" - "3703e05b200042eed3f096abd9ebada37f3703d85b2000428fc5dc88cd99" - "8ff4977f3703d05b2000429386aaa8abf2d7b4463703c85b200042e5a8e7" - "98abaaa584073703c05b203c410041c00110858180800021432003200041" - "80d7006a200041c0db006a10b480808000200041a0e8006a200041c0d200" - "6a41a0021086818080001a2005200610b280808000200041c0c9006a2000" - "41a0e8006a41301086818080001a2039204410b280808000200041c0d200" - "6a200841301086818080001a2001204510b28080800020004180d7006a20" - "3a41301086818080001a200041c0db006a410041301085818080001a2000" - "42c18e8ea3d58c88f8183703985c200042d2a1c19ee8addffc033703905c" - "2000429e97eb8de0d783db8e7f3703885c20004295b7949cfdd590b8d800" - "3703805c200042d2cbb6fee1c8c8d5dd003703f85b200042f1e0c7b3c8bc" - "f2814d3703f05b2060200041c0d2006a200041c0db006a10b38080800020" - "35410041301085818080002133200042ba8a92abf1a7dbf2143703e85b20" - "0042e8a0ee96fe89bcf2143703e05b200042a4a0a0f4c7f1c686a27f3703" - "d85b200042acfced84e38c82c4d0003703d05b200042d5cb9694b3cac8f9" - "2a3703c85b200042c38bd5b3c8bcf286897f3703c05b204620004180d700" - "6a200041c0db006a10b38080800020004180ce006a200041c0c9006a41e0" - "001086818080001a2031204710b28080800020004180c5006a2003413010" - "86818080001a2005204810b280808000200041c0c9006a20494130108681" - "8080001a2001204a10b28080800020004180d7006a204b41301086818080" - "001a200041c0db006a410041301085818080001a200042c18e8ea3d58c88" - "f8183703985c200042d2a1c19ee8addffc033703905c2000429e97eb8de0" - "d783db8e7f3703885c20004295b7949cfdd590b8d8003703805c200042d2" - "cbb6fee1c8c8d5dd003703f85b200042f1e0c7b3c8bcf2814d3703f05b20" - "38200041c0c9006a200041c0db006a10b380808000203341004130108581" - "8080002133200042ba8a92abf1a7dbf2143703e85b200042e8a0ee96fe89" - "bcf2143703e05b200042a4a0a0f4c7f1c686a27f3703d85b200042acfced" - "84e38c82c4d0003703d05b200042d5cb9694b3cac8f92a3703c85b200042" - "c38bd5b3c8bcf286897f3703c05b203420004180d7006a200041c0db006a" - "10b380808000200041c0d2006a20004180c5006a41e0001086818080001a" - "200042afff91c4a8fbbb87113703d85720004289bd83adbef9849c2e3703" - "d057200042d0d1a385a497e78d413703c85720004294a7e7acc2baa5a44f" - "3703c057200042ecf9a5e2bf8da8a1d8003703b857200042c6ac97e7d4d5" - "9afbb27f3703b057200042ebcded87fbc188f9083703a857200042cd9cab" - "eda5fde4f11c3703a057200042eed3f096abd9ebada37f37039857200042" - "8fc5dc88cd998ff4977f370390572000429386aaa8abf2d7b44637038857" - "200042e5a8e798abaaa5840737038057203d410041c00110858180800021" - "072032200041c0d2006a20004180d7006a10b480808000200041c0db006a" - "20004180ce006a41a0021086818080001a200041c0c0006a200041c0db00" - "6a41c0041086818080001a200041c0c0006a200041c0376a10bf80808000" - "200041a0e8006a200041c0c0006a10c0808080002032200310b180808000" - "200041c0db006a200041a0e8006a41a0021086818080001a200041c0376a" - "200041c0db006a41c0041086818080001a20004180c5006a200041c0c000" - "6a10c180808000200041c0c9006a20004180c5006a10c080808000200041" - "80ce006a200041c0376a20004180c5006a10be80808000200041c0376a20" - "004180ce006a10c180808000200041b82e6a200041c0376a10c180808000" - "200041c0d2006a200041b82e6a10c180808000200041c0d2006a200041c0" - "c9006a10bf80808000200041c0c9006a200041c0d2006a10c18080800020" - "0320004180ce006a41a0026a10b180808000200041a0e8006a20004180ce" - "006a41a0021086818080001a20004180ce006a200041a0e8006a41c00410" - "86818080001a200041a0e8006a20004180ce006a200041c0c0006a10be80" - "808000200041c0c9006a200041a0e8006a10bf808080002003203710b180" - "808000200041a0e8006a200041c0c0006a41a0021086818080001a200041" - "80ce006a200041a0e8006a41c0041086818080001a200041c0376a200041" - "c0c0006a10bf80808000200041a0e2006a41306a2205205910b280808000" - "200041a0e2006a200041c0376a41301086818080001a2001200041c0376a" - "4190016a10b28080800020004180d7006a200041c0376a41e0006a413010" - "86818080001a2033200041c0376a41f0016a10b280808000200041c0db00" - "6a200041c0376a41c0016a41301086818080001a200041a0e8006a410041" - "301085818080001a200042c18e8ea3d58c88f8183703f868200042d2a1c1" - "9ee8addffc033703f0682000429e97eb8de0d783db8e7f3703e868200042" - "95b7949cfdd590b8d8003703e068200042d2cbb6fee1c8c8d5dd003703d8" - "68200042f1e0c7b3c8bcf2814d3703d068200041c0e4006a41e0006a2237" - "20004180d7006a200041a0e8006a10b38080800020064100413010858180" - "80002106200042ba8a92abf1a7dbf2143703c868200042e8a0ee96fe89bc" - "f2143703c068200042a4a0a0f4c7f1c686a27f3703b868200042acfced84" - "e38c82c4d0003703b068200042d5cb9694b3cac8f92a3703a868200042c3" - "8bd5b3c8bcf286897f3703a068200041c0e4006a41c0016a2235200041c0" - "db006a200041a0e8006a10b380808000200041c0e4006a200041a0e2006a" - "41e0001086818080001a2030200041c0376a41d0026a10b2808080002000" - "4180e0006a206141301086818080001a2005200041c0376a41b0036a10b2" - "80808000200041a0e2006a200041c0376a4180036a41301086818080001a" - "2033200041c0376a4190046a10b280808000200041c0db006a200041c037" - "6a41e0036a41301086818080001a200041a0e8006a410041301085818080" - "001a200042c18e8ea3d58c88f8183703f868200042d2a1c19ee8addffc03" - "3703f0682000429e97eb8de0d783db8e7f3703e86820004295b7949cfdd5" - "90b8d8003703e068200042d2cbb6fee1c8c8d5dd003703d868200042f1e0" - "c7b3c8bcf2814d3703d0682007200041a0e2006a200041a0e8006a10b380" - "808000200641004130108581808000213c200042ba8a92abf1a7dbf21437" - "03c868200042e8a0ee96fe89bcf2143703c068200042a4a0a0f4c7f1c686" - "a27f3703b868200042acfced84e38c82c4d0003703b068200042d5cb9694" - "b3cac8f92a3703a868200042c38bd5b3c8bcf286897f3703a06820042000" - "41c0db006a200041a0e8006a10b38080800020004180d7006a20004180e0" - "006a41e0001086818080001a200042afff91c4a8fbbb87113703985c2000" - "4289bd83adbef9849c2e3703905c200042d0d1a385a497e78d413703885c" - "20004294a7e7acc2baa5a44f3703805c200042ecf9a5e2bf8da8a1d80037" - "03f85b200042c6ac97e7d4d59afbb27f3703f05b200042ebcded87fbc188" - "f9083703e85b200042cd9cabeda5fde4f11c3703e05b200042eed3f096ab" - "d9ebada37f3703d85b2000428fc5dc88cd998ff4977f3703d05b20004293" - "86aaa8abf2d7b4463703c85b200042e5a8e798abaaa584073703c05b2043" - "410041c001108581808000213d200320004180d7006a200041c0db006a10" - "b480808000200041a0e8006a200041c0e4006a41a0021086818080001a20" - "30203c10b28080800020004180e0006a200041a0e8006a41301086818080" - "001a2036204410b280808000200041c0e4006a200841301086818080001a" - "2001204510b28080800020004180d7006a203a41301086818080001a2000" - "41c0db006a410041301085818080001a200042c18e8ea3d58c88f8183703" - "985c200042d2a1c19ee8addffc033703905c2000429e97eb8de0d783db8e" - "7f3703885c20004295b7949cfdd590b8d8003703805c200042d2cbb6fee1" - "c8c8d5dd003703f85b200042f1e0c7b3c8bcf2814d3703f05b200041a0e2" - "006a41e0006a2243200041c0e4006a200041c0db006a10b3808080002033" - "410041301085818080002133200042ba8a92abf1a7dbf2143703e85b2000" - "42e8a0ee96fe89bcf2143703e05b200042a4a0a0f4c7f1c686a27f3703d8" - "5b200042acfced84e38c82c4d0003703d05b200042d5cb9694b3cac8f92a" - "3703c85b200042c38bd5b3c8bcf286897f3703c05b200041a0e2006a41c0" - "016a224620004180d7006a200041c0db006a10b380808000200041a0e200" - "6a20004180e0006a41e0001086818080001a200041c0e7006a41306a2206" - "204710b280808000200041c0e7006a200341301086818080001a20302048" - "10b28080800020004180e0006a204941301086818080001a2001204a10b2" - "8080800020004180d7006a204b41301086818080001a200041c0db006a41" - "0041301085818080001a200042c18e8ea3d58c88f8183703985c200042d2" - "a1c19ee8addffc033703905c2000429e97eb8de0d783db8e7f3703885c20" - "004295b7949cfdd590b8d8003703805c200042d2cbb6fee1c8c8d5dd0037" - "03f85b200042f1e0c7b3c8bcf2814d3703f05b203720004180e0006a2000" - "41c0db006a10b3808080002033410041301085818080002133200042ba8a" - "92abf1a7dbf2143703e85b200042e8a0ee96fe89bcf2143703e05b200042" - "a4a0a0f4c7f1c686a27f3703d85b200042acfced84e38c82c4d0003703d0" - "5b200042d5cb9694b3cac8f92a3703c85b200042c38bd5b3c8bcf286897f" - "3703c05b203520004180d7006a200041c0db006a10b380808000200041c0" - "e4006a200041c0e7006a41e0001086818080001a200042afff91c4a8fbbb" - "87113703d85720004289bd83adbef9849c2e3703d057200042d0d1a385a4" - "97e78d413703c85720004294a7e7acc2baa5a44f3703c057200042ecf9a5" - "e2bf8da8a1d8003703b857200042c6ac97e7d4d59afbb27f3703b0572000" - "42ebcded87fbc188f9083703a857200042cd9cabeda5fde4f11c3703a057" - "200042eed3f096abd9ebada37f370398572000428fc5dc88cd998ff4977f" - "370390572000429386aaa8abf2d7b44637038857200042e5a8e798abaaa5" - "8407370380572007410041c00110858180800021072032200041c0e4006a" - "20004180d7006a10b480808000200041c0db006a200041a0e2006a41a002" - "1086818080001a2006203310b280808000200041c0e7006a200041c0db00" - "6a41301086818080001a2005204c10b280808000200041a0e2006a203d41" - "301086818080001a2036204d10b280808000200041c0e4006a203b413010" - "86818080001a20004180d7006a410041301085818080001a200042c18e8e" - "a3d58c88f8183703d857200042d2a1c19ee8addffc033703d0572000429e" - "97eb8de0d783db8e7f3703c85720004295b7949cfdd590b8d8003703c057" - "200042d2cbb6fee1c8c8d5dd003703b857200042f1e0c7b3c8bcf2814d37" - "03b05720004180e0006a41e0006a200041a0e2006a20004180d7006a10b3" - "808080002001410041301085818080002101200042ba8a92abf1a7dbf214" - "3703a857200042e8a0ee96fe89bcf2143703a057200042a4a0a0f4c7f1c6" - "86a27f37039857200042acfced84e38c82c4d00037039057200042d5cb96" - "94b3cac8f92a37038857200042c38bd5b3c8bcf286897f37038057200041" - "80e0006a41c0016a200041c0e4006a20004180d7006a10b3808080002000" - "4180e0006a200041c0e7006a41e0001086818080001a200041e0e6006a41" - "306a204e10b280808000200041e0e6006a203241301086818080001a2006" - "204f10b280808000200041c0e7006a205041301086818080001a20362051" - "10b280808000200041c0e4006a205241301086818080001a20004180d700" - "6a410041301085818080001a200042c18e8ea3d58c88f8183703d8572000" - "42d2a1c19ee8addffc033703d0572000429e97eb8de0d783db8e7f3703c8" - "5720004295b7949cfdd590b8d8003703c057200042d2cbb6fee1c8c8d5dd" - "003703b857200042f1e0c7b3c8bcf2814d3703b0572043200041c0e7006a" - "20004180d7006a10b3808080002001410041301085818080002101200042" - "ba8a92abf1a7dbf2143703a857200042e8a0ee96fe89bcf2143703a05720" - "0042a4a0a0f4c7f1c686a27f37039857200042acfced84e38c82c4d00037" - "039057200042d5cb9694b3cac8f92a37038857200042c38bd5b3c8bcf286" - "897f370380572046200041c0e4006a20004180d7006a10b3808080002000" - "41a0e2006a200041e0e6006a41e0001086818080001a200042afff91c4a8" - "fbbb87113703986520004289bd83adbef9849c2e37039065200042d0d1a3" - "85a497e78d413703886520004294a7e7acc2baa5a44f37038065200042ec" - "f9a5e2bf8da8a1d8003703f864200042c6ac97e7d4d59afbb27f3703f064" - "200042ebcded87fbc188f9083703e864200042cd9cabeda5fde4f11c3703" - "e064200042eed3f096abd9ebada37f3703d8642000428fc5dc88cd998ff4" - "977f3703d0642000429386aaa8abf2d7b4463703c864200042e5a8e798ab" - "aaa584073703c0642037410041c00110858180800021372053200041a0e2" - "006a200041c0e4006a10b48080800020004180d7006a20004180e0006a41" - "a0021086818080001a200041c0376a20004180d7006a41c0041086818080" - "001a200041c0d2006a20004180ce006a10bf808080002005203910b28080" - "8000200041a0e2006a200041c0d2006a41301086818080001a2001205710" - "b28080800020004180d7006a203841301086818080001a2033205810b280" - "808000200041c0db006a203441301086818080001a200041a0e8006a4100" - "41301085818080001a200042c18e8ea3d58c88f8183703f868200042d2a1" - "c19ee8addffc033703f0682000429e97eb8de0d783db8e7f3703e8682000" - "4295b7949cfdd590b8d8003703e068200042d2cbb6fee1c8c8d5dd003703" - "d868200042f1e0c7b3c8bcf2814d3703d068203720004180d7006a200041" - "a0e8006a10b380808000203c410041301085818080002134200042ba8a92" - "abf1a7dbf2143703c868200042e8a0ee96fe89bcf2143703c068200042a4" - "a0a0f4c7f1c686a27f3703b868200042acfced84e38c82c4d0003703b068" - "200042d5cb9694b3cac8f92a3703a868200042c38bd5b3c8bcf286897f37" - "03a0682035200041c0db006a200041a0e8006a10b380808000200041c0e4" - "006a200041a0e2006a41e0001086818080001a2030205a10b28080800020" - "004180e0006a205641301086818080001a2005205b10b280808000200041" - "a0e2006a205c41301086818080001a2033205d10b280808000200041c0db" - "006a205e41301086818080001a200041a0e8006a41004130108581808000" - "1a200042c18e8ea3d58c88f8183703f868200042d2a1c19ee8addffc0337" - "03f0682000429e97eb8de0d783db8e7f3703e86820004295b7949cfdd590" - "b8d8003703e068200042d2cbb6fee1c8c8d5dd003703d868200042f1e0c7" - "b3c8bcf2814d3703d0682007200041a0e2006a200041a0e8006a10b38080" - "80002034410041301085818080002134200042ba8a92abf1a7dbf2143703" - "c868200042e8a0ee96fe89bcf2143703c068200042a4a0a0f4c7f1c686a2" - "7f3703b868200042acfced84e38c82c4d0003703b068200042d5cb9694b3" - "cac8f92a3703a868200042c38bd5b3c8bcf286897f3703a0682004200041" - "c0db006a200041a0e8006a10b38080800020004180d7006a20004180e000" - "6a41e0001086818080001a200042afff91c4a8fbbb87113703985c200042" - "89bd83adbef9849c2e3703905c200042d0d1a385a497e78d413703885c20" - "004294a7e7acc2baa5a44f3703805c200042ecf9a5e2bf8da8a1d8003703" - "f85b200042c6ac97e7d4d59afbb27f3703f05b200042ebcded87fbc188f9" - "083703e85b200042cd9cabeda5fde4f11c3703e05b200042eed3f096abd9" - "ebada37f3703d85b2000428fc5dc88cd998ff4977f3703d05b2000429386" - "aaa8abf2d7b4463703c85b200042e5a8e798abaaa584073703c05b203d41" - "0041c0011085818080002138200320004180d7006a200041c0db006a10b4" - "80808000200041a0e8006a200041c0e4006a41a0021086818080001a2000" - "41c0d2006a200041a0e8006a41c0041086818080001a20004180c5006a20" - "0041b82e6a10bf808080002005203110b280808000200041a0e2006a2000" - "4180c5006a41301086818080001a200120004180c5006a4190016a10b280" - "80800020004180d7006a205441301086818080001a203320004180c5006a" - "41f0016a10b280808000200041c0db006a205541301086818080001a2000" - "41a0e8006a410041301085818080001a200042c18e8ea3d58c88f8183703" - "f868200042d2a1c19ee8addffc033703f0682000429e97eb8de0d783db8e" - "7f3703e86820004295b7949cfdd590b8d8003703e068200042d2cbb6fee1" - "c8c8d5dd003703d868200042f1e0c7b3c8bcf2814d3703d0682037200041" - "80d7006a200041a0e8006a10b38080800020344100413010858180800021" - "34200042ba8a92abf1a7dbf2143703c868200042e8a0ee96fe89bcf21437" - "03c068200042a4a0a0f4c7f1c686a27f3703b868200042acfced84e38c82" - "c4d0003703b068200042d5cb9694b3cac8f92a3703a868200042c38bd5b3" - "c8bcf286897f3703a0682035200041c0db006a200041a0e8006a10b38080" - "8000200041c0e4006a200041a0e2006a41e0001086818080001a20302000" - "4180c5006a41d0026a10b28080800020004180e0006a20004180c5006a41" - "a0026a41301086818080001a200520004180c5006a41b0036a10b2808080" - "00200041a0e2006a20004180c5006a4180036a41301086818080001a2033" - "20004180c5006a4190046a10b280808000200041c0db006a20004180c500" - "6a41e0036a41301086818080001a200041a0e8006a410041301085818080" - "001a200042c18e8ea3d58c88f8183703f868200042d2a1c19ee8addffc03" - "3703f0682000429e97eb8de0d783db8e7f3703e86820004295b7949cfdd5" - "90b8d8003703e068200042d2cbb6fee1c8c8d5dd003703d868200042f1e0" - "c7b3c8bcf2814d3703d0682007200041a0e2006a200041a0e8006a10b380" - "8080002034410041301085818080002105200042ba8a92abf1a7dbf21437" - "03c868200042e8a0ee96fe89bcf2143703c068200042a4a0a0f4c7f1c686" - "a27f3703b868200042acfced84e38c82c4d0003703b068200042d5cb9694" - "b3cac8f92a3703a868200042c38bd5b3c8bcf286897f3703a06820042000" - "41c0db006a200041a0e8006a10b38080800020004180d7006a20004180e0" - "006a41e0001086818080001a200042afff91c4a8fbbb87113703985c2000" - "4289bd83adbef9849c2e3703905c200042d0d1a385a497e78d413703885c" - "20004294a7e7acc2baa5a44f3703805c200042ecf9a5e2bf8da8a1d80037" - "03f85b200042c6ac97e7d4d59afbb27f3703f05b200042ebcded87fbc188" - "f9083703e85b200042cd9cabeda5fde4f11c3703e05b200042eed3f096ab" - "d9ebada37f3703d85b2000428fc5dc88cd998ff4977f3703d05b20004293" - "86aaa8abf2d7b4463703c85b200042e5a8e798abaaa584073703c05b2038" - "410041c0011085818080001a200320004180d7006a200041c0db006a10b4" - "80808000200041a0e8006a200041c0e4006a41a0021086818080001a2030" - "200510b28080800020004180e0006a200041a0e8006a4130108681808000" - "1a2036204410b280808000200041c0e4006a200841301086818080001a20" - "01204510b28080800020004180d7006a203a41301086818080001a200041" - "c0db006a410041301085818080001a200042c18e8ea3d58c88f818370398" - "5c200042d2a1c19ee8addffc033703905c2000429e97eb8de0d783db8e7f" - "3703885c20004295b7949cfdd590b8d8003703805c200042d2cbb6fee1c8" - "c8d5dd003703f85b200042f1e0c7b3c8bcf2814d3703f05b2043200041c0" - "e4006a200041c0db006a10b3808080002033410041301085818080002104" - "200042ba8a92abf1a7dbf2143703e85b200042e8a0ee96fe89bcf2143703" - "e05b200042a4a0a0f4c7f1c686a27f3703d85b200042acfced84e38c82c4" - "d0003703d05b200042d5cb9694b3cac8f92a3703c85b200042c38bd5b3c8" - "bcf286897f3703c05b204620004180d7006a200041c0db006a10b3808080" - "00200041a0e2006a20004180e0006a41e0001086818080001a2006204710" - "b280808000200041c0e7006a200341301086818080001a2030204810b280" - "80800020004180e0006a204941301086818080001a2001204a10b2808080" - "0020004180d7006a204b41301086818080001a200041c0db006a41004130" - "1085818080001a200042c18e8ea3d58c88f8183703985c200042d2a1c19e" - "e8addffc033703905c2000429e97eb8de0d783db8e7f3703885c20004295" - "b7949cfdd590b8d8003703805c200042d2cbb6fee1c8c8d5dd003703f85b" - "200042f1e0c7b3c8bcf2814d3703f05b203720004180e0006a200041c0db" - "006a10b3808080002004410041301085818080001a200042ba8a92abf1a7" - "dbf2143703e85b200042e8a0ee96fe89bcf2143703e05b200042a4a0a0f4" - "c7f1c686a27f3703d85b200042acfced84e38c82c4d0003703d05b200042" - "d5cb9694b3cac8f92a3703c85b200042c38bd5b3c8bcf286897f3703c05b" - "203520004180d7006a200041c0db006a10b380808000200041c0e4006a20" - "0041c0e7006a41e0001086818080001a200042afff91c4a8fbbb87113703" - "d85720004289bd83adbef9849c2e3703d057200042d0d1a385a497e78d41" - "3703c85720004294a7e7acc2baa5a44f3703c057200042ecf9a5e2bf8da8" - "a1d8003703b857200042c6ac97e7d4d59afbb27f3703b057200042ebcded" - "87fbc188f9083703a857200042cd9cabeda5fde4f11c3703a057200042ee" - "d3f096abd9ebada37f370398572000428fc5dc88cd998ff4977f37039057" - "2000429386aaa8abf2d7b44637038857200042e5a8e798abaaa584073703" - "80572007410041c0011085818080001a2032200041c0e4006a20004180d7" - "006a10b480808000200041c0db006a200041a0e2006a41a0021086818080" - "001a20004180c5006a200041c0db006a41c0041086818080001a20004180" - "c5006a200041c0376a10bf8080800020004180c5006a200041c0d2006a10" - "bf80808000200041f8296a20004180c5006a200041c0c9006a10be808080" - "00200020023a00a068024020024101470d00200041a0e8006a200041f829" - "6a41c0041086818080001a200041f8326a10ac80808000200041a0e8006a" - "200041f8326a10c2808080002008203f10c2808080007110a38080800020" - "3a204010c2808080007110a3808080002003203e10c28080800020492041" - "10c2808080007110a380808000204b204210c2808080007110a380808000" - "7110a380808000210220002802a82520002802ac25108580808000200028" - "029825200028029c25108580808000200028028825200028028c25108580" - "80800020002802f82420002802fc24108580808000202f202e1086808080" - "0020002802c01c20002802c41c10828080800020002802a01520002802a4" - "15108480808000200028028815200028028c1510848080800020002802b4" - "1320002802b81310848080800020002802bc1220002802c0121084808080" - "0020002802e41020002802e810108480808000200028028c0f2000280290" - "0f10848080800020002802940e20002802980e108480808000200028029c" - "0d20002802a00d108480808000200241ff017141004721020c080b200041" - "003602f832200041a0e8006a41c886c08000200041f8326a41cc86c08000" - "109680808000000b200041c0c0006a200041b8256a203610b48080800020" - "004180c5006a200041b8256a203610c380808000200041c0c9006a203610" - "b68080800020004180ce006a200041c0c9006a200041b8256a10c3808080" - "00200041c0d2006a20004180ce006a20004180c5006a10b4808080002000" - "4180d7006a200041c0d2006a200041c0c0006a10b780808000200041c0db" - "006a200041c0c0006a200041c0c0006a10c380808000200041a0e8006a20" - "0041c0c0006a10b680808000200041f8326a20004180d7006a200041a0e8" - "006a10b7808080002005200041c0db006a41a0021086818080001a200041" - "b8256a200041f8326a41c0041086818080001a410121020c000b0b200041" - "80d7006a2030200441e8006c6a10a580808000200041a0026a202e200441" - "05746a2202290300220c42ffffffff6f7e22094200428180808070420010" - "878180800020004190026a2009420042feb7f9ffaf80e9ded30042001087" - "8180800020004180026a200942004285b087cd8081f69c33420010878180" - "8000200041f0016a2009420042c8faf5ccb2eae9f6f30042001087818080" - "00200041e0016a200029039002220e20022903087c220b200041a0026a41" - "086a290300200c20002903a00222097c200954ad7c7c220c42ffffffff6f" - "7e220942004281808080704200108781808000200041d0016a2009420042" - "feb7f9ffaf80e9ded300420010878180800020004180016a200942004285" - "b087cd8081f69c334200108781808000200041306a2009420042c8faf5cc" - "b2eae9f6f3004200108781808000200041c0016a20002903d00122132000" - "29038002221220022903107c220a20004190026a41086a290300200b200e" - "54ad7c200c200b54ad7c7c220d7c220b200041e0016a41086a2903002000" - "2903e0012209200c7c200954ad7c7c220c42ffffffff6f7e220942004281" - "808080704200108781808000200041b0016a2009420042feb7f9ffaf80e9" - "ded3004200108781808000200041a0016a200942004285b087cd8081f69c" - "33420010878180800020004190016a2009420042c8faf5ccb2eae9f6f300" - "4200108781808000200041f0006a20002903b001221020002903f0012211" - "20022903187c220e20004180026a41086a290300200a201254ad7c200d20" - "0a54ad7c7c220a2000290380017c2212200041d0016a41086a290300200b" - "201354ad7c200c200b54ad7c7c22137c220b200041c0016a41086a290300" - "20002903c0012209200c7c200954ad7c7c220c42ffffffff6f7e22094200" - "4281808080704200108781808000200041e0006a2009420042feb7f9ffaf" - "80e9ded3004200108781808000200041d0006a200942004285b087cd8081" - "f69c334200108781808000200041c0006a2009420042c8faf5ccb2eae9f6" - "f3004200108781808000200041a0016a41086a290300210d200041306a41" - "086a290300210f200029039001211720002903502114200041d0006a4108" - "6a2903002115200020002903602216200041f0016a41086a290300200e20" - "1154ad7c200a200e54ad7c221120002903307c220920004180016a41086a" - "2903002012200a54ad7c2013201254ad7c7c220a20002903a0017c220e20" - "0041b0016a41086a290300200b201054ad7c200c200b54ad7c7c22127c22" - "0b200041f0006a41086a29030020002903702213200c7c201354ad7c7c22" - "133703f832200020142017200f2009201154ad7c200a200954ad7c22107c" - "2209200d200e200a54ad7c2012200e54ad7c7c220c7c220a200041e0006a" - "41086a290300200b201654ad7c2013200b54ad7c7c220b37038033200020" - "004190016a41086a2903002009201054ad7c200c200954ad7c220e200029" - "03407c22092015200a200c54ad7c200b200a54ad7c7c220b370388332000" - "200041c0006a41086a2903002009200e54ad7c200b200954ad7c37039033" - "200041a0e8006a200041f8326a10a280808000200020002903b868370398" - "4e200020002903b0683703904e200020002903a8683703884e2000200029" - "03a0683703804e200041c0db006a410041301085818080001a2035410041" - "301085818080001a203441e086c0800041301086818080001a4101210220" - "0041013602e052200041003602d452200041003602c852200020333602c4" - "52200020004180ce006a3602c05203400240024020020d00200041086a20" - "0041c0d2006a10c48080800020002d0009210120002d000821030c010b20" - "0041003602e0520240024020002802c852450d00200041286a2002203210" - "c58080800020002802280d01200028022c21020b024020002802c0522201" - "450d0020002802c45221030340024020032001470d00200020033602c452" - "0c020b2000428080808080013702cc5220002003417f6a22033602c85220" - "0041206a2002203210c580808000024020002802200d0020002802242102" - "0c010b0b200020033602c4520c010b200041003602c852024020002802d4" - "52450d00200041186a2002203110c58080800020002802180d0120002802" - "1c21020b41002103200041003602d45220020d010b200041106a200041c0" - "d2006a10c48080800020002d0011210120002d001021030b024020034101" - "71450d00200041f8326a200041c0db006a10c680808000200041c0db006a" - "200041f8326a4190011086818080001a200041f8326a200041c0db006a20" - "004180d7006a10c780808000200041a0e8006a200041c0db006a200041f8" - "326a200110c880808000200041c0db006a200041a0e8006a419001108681" - "8080001a20002802e05221020c010b0b200041a0e8006a200041c0db006a" - "4190011086818080001a200041f8326a20004180236a200041a0e8006a10" - "c78080800020004180236a200041f8326a4190011086818080001a200441" - "016a21040c000b0b2000420137028433200041013602fc322000419482c0" - "80003602f83220004181808080003602a4682000200041a0e8006a360280" - "33200020004180d7006a3602a068200041c0d2006a41c886c08000200041" - "f8326a419c82c08000109680808000000b200220002802b40641b092c080" - "00108c80808000000b202f202e10868080800020002802c01c20002802c4" - "1c10828080800020002802a01520002802a4151084808080002000280288" - "15200028028c1510848080800020002802b41320002802b8131084808080" - "0020002802bc1220002802c01210848080800020002802e41020002802e8" - "10108480808000200028028c0f20002802900f1084808080002000280294" - "0e20002802980e108480808000200028029c0d20002802a00d1084808080" - "00410021020b200041e0ec006a24808080800020020ba60201087e200020" - "01290300220242ffffffff0f7c2203200254ad427f7c2202200220012903" - "0822047c2202200454ad7c20024282c88680d0ff96a1ac7f7c2204200254" - "ad7c427f7c423f8722022002200129031022057c2202200554ad7c200242" - "fbcff8b2fffe89e34c7c2205200254ad7c427f7c423f8722022002200129" - "031822067c2202200654ad7c200242b8858ab3cd9596898c7f7c22062002" - "54ad7c427f7c220242818080807083220720037c22083703002000200242" - "feb7f9ffaf80e9ded30083220920047c22032008200754ad7c2207370308" - "200020024285b087cd8081f69c3383220820057c22042003200954ad2007" - "200354ad7c7c22033703102000200242c8faf5ccb2eae9f6f3008320067c" - "2004200854ad2003200454ad7c7c3703180b1901017f2380808080004110" - "6b220120003a000f20012d000f0b3601017f23808080800041106b220224" - "8080808000200241013b010c200220013602082002200036020420024104" - "6a10f380808000000b6501017f23808080800041306b2202248080808000" - "200041306a200141306a41301086818080001a200041e0006a41e086c080" - "00200241004130108581808000220220012d006010908080800020002001" - "41301086818080001a200241306a2480808080000b25002000200141f087" - "c0800010df808080002000200110a98080800010d2808080003a00300be7" - "2502017f4c7e23808080800041b0096b2203248080808000200341c0046a" - "200229030022044200200129030022054200108781808000200341d0046a" - "20022903082206420020054200108781808000200341e0046a2002290310" - "2207420020054200108781808000200341f0046a20022903182208420020" - "05420010878180800020034180056a200229032022094200200542001087" - "8180800020034190056a2002290328220a42002005420010878180800020" - "0341a0056a20012903082205420020044200108781808000200341f0056a" - "2005420020064200108781808000200341c0066a20054200200742001087" - "8180800020034190076a2005420020084200108781808000200341e0076a" - "2005420020094200108781808000200341b0086a20054200200a42001087" - "81808000200341b0056a2001290310220542002004420010878180800020" - "034180066a2005420020064200108781808000200341d0066a2005420020" - "074200108781808000200341a0076a200542002008420010878180800020" - "0341f0076a2005420020094200108781808000200341c0086a2005420020" - "0a4200108781808000200341c0056a200129031822054200200442001087" - "8180800020034190066a2005420020064200108781808000200341e0066a" - "2005420020074200108781808000200341b0076a20054200200842001087" - "8180800020034180086a2005420020094200108781808000200341d0086a" - "20054200200a4200108781808000200341d0056a20012903202205420020" - "044200108781808000200341a0066a200542002006420010878180800020" - "0341f0066a2005420020074200108781808000200341c0076a2005420020" - "08420010878180800020034190086a200542002009420010878180800020" - "0341e0086a20054200200a4200108781808000200341e0056a2001290328" - "2205420020044200108781808000200341b0066a20054200200642001087" - "8180800020034180076a2005420020074200108781808000200341d0076a" - "2005420020084200108781808000200341a0086a20054200200942001087" - "81808000200341f0086a20054200200a4200108781808000200341b0046a" - "20032903c004220542fdfff3ffcffffff9897f7e2204420042abd5feffff" - "ffbfffb97f4200108781808000200341a0046a2004420042ffffcf8aebff" - "ffd51e4200108781808000200341b0036a2004420042a4ecc3b58fd4b498" - "e7004200108781808000200341c0026a2004420042bfa5949ccff0d2bbe4" - "004200108781808000200341d0016a2004420042d7d9ae9ae4f6e98dcb00" - "4200108781808000200341e0006a20044200429acdffcba3bdc4801a4200" - "10878180800020034190046a200341b0046a41086a290300200520032903" - "b00422047c200454ad7c220720032903a0047c220520032903a005220820" - "032903d0042209200341c0046a41086a2903007c220a7c220b7c220642fd" - "fff3ffcffffff9897f7e2204420042abd5feffffffbfffb97f4200108781" - "80800020034180046a2004420042ffffcf8aebffffd51e42001087818080" - "00200341f0036a2004420042a4ecc3b58fd4b498e7004200108781808000" - "200341e0036a2004420042bfa5949ccff0d2bbe400420010878180800020" - "0341d0036a2004420042d7d9ae9ae4f6e98dcb0042001087818080002003" - "41c0036a20044200429acdffcba3bdc4801a4200108781808000200341a0" - "036a200341a0046a41086a2903002005200754ad7c2006200554ad7c220c" - "20032903b0037c220520032903f005220d200341d0046a41086a29030020" - "0a200954ad7c220e20032903e0047c220f7c2207200341a0056a41086a29" - "0300200b200854ad7c7c220820032903b0057c22107c2209200329038004" - "7c220a20034190046a41086a290300200329039004220420067c200454ad" - "7c7c220642fdfff3ffcffffff9897f7e2204420042abd5feffffffbfffb9" - "7f420010878180800020034190036a2004420042ffffcf8aebffffd51e42" - "0010878180800020034180036a2004420042a4ecc3b58fd4b498e7004200" - "108781808000200341f0026a2004420042bfa5949ccff0d2bbe400420010" - "8781808000200341e0026a2004420042d7d9ae9ae4f6e98dcb0042001087" - "81808000200341d0026a20044200429acdffcba3bdc4801a420010878180" - "8000200341b0026a20034180046a41086a290300200a200954ad7c200620" - "0a54ad7c221120032903f0037c220a200341b0036a41086a290300200520" - "0c54ad7c2009200554ad7c221220032903c0027c2205200341e0046a4108" - "6a290300200f200e54ad7c220f20032903f0047c220920032903c0067c22" - "0b200341f0056a41086a2903002007200d54ad7c2008200754ad7c7c2207" - "2003290380067c220c200341b0056a41086a2903002010200854ad7c7c22" - "0820032903c0057c22107c22137c220d2003290390037c220e200341a003" - "6a41086a29030020032903a003220420067c200454ad7c7c220642fdfff3" - "ffcffffff9897f7e2204420042abd5feffffffbfffb97f42001087818080" - "00200341a0026a2004420042ffffcf8aebffffd51e420010878180800020" - "034190026a2004420042a4ecc3b58fd4b498e70042001087818080002003" - "4180026a2004420042bfa5949ccff0d2bbe4004200108781808000200341" - "f0016a2004420042d7d9ae9ae4f6e98dcb004200108781808000200341e0" - "016a20044200429acdffcba3bdc4801a4200108781808000200341c0016a" - "20034190036a41086a290300200e200d54ad7c2006200e54ad7c22142003" - "290380037c220e200341f0036a41086a290300200a201154ad7c200d200a" - "54ad7c221520032903e0037c220a200341c0026a41086a29030020052012" - "54ad7c2013200554ad7c221220032903d0017c2205200341f0046a41086a" - "2903002009200f54ad7c22132003290380057c220d2003290390077c220f" - "200341c0066a41086a290300200b200954ad7c2007200b54ad7c7c220920" - "032903d0067c220b20034180066a41086a290300200c200754ad7c200820" - "0c54ad7c7c22072003290390067c220c200341c0056a41086a2903002010" - "200854ad7c7c220820032903d0057c22167c22177c22187c221020032903" - "a0027c2211200341b0026a41086a29030020032903b002220420067c2004" - "54ad7c7c220642fdfff3ffcffffff9897f7e2204420042abd5feffffffbf" - "ffb97f4200108781808000200341b0016a2004420042ffffcf8aebffffd5" - "1e4200108781808000200341a0016a2004420042a4ecc3b58fd4b498e700" - "420010878180800020034190016a2004420042bfa5949ccff0d2bbe40042" - "0010878180800020034180016a2004420042d7d9ae9ae4f6e98dcb004200" - "108781808000200341f0006a20044200429acdffcba3bdc4801a42001087" - "81808000200341d0006a200341a0026a41086a2903002011201054ad7c20" - "06201154ad7c22192003290390027c221120034180036a41086a29030020" - "0e201454ad7c2010200e54ad7c221a20032903f0027c220e200341e0036a" - "41086a290300200a201554ad7c2018200a54ad7c221820032903d0037c22" - "0a200341d0016a41086a2903002005201254ad7c2017200554ad7c221520" - "032903607c220520034180056a41086a290300200d201354ad7c22172003" - "290390057c221020032903e0077c221220034190076a41086a290300200f" - "200d54ad7c2009200f54ad7c7c220d20032903a0077c220f200341d0066a" - "41086a290300200b200954ad7c2007200b54ad7c7c220920032903e0067c" - "220b20034190066a41086a290300200c200754ad7c2008200c54ad7c7c22" - "0720032903a0067c220c200341d0056a41086a2903002016200854ad7c7c" - "220820032903e0057c22167c221b7c221c7c221d7c221320032903b0017c" - "2214200341c0016a41086a29030020032903c001220420067c200454ad7c" - "7c220642fdfff3ffcffffff9897f7e2204420042abd5feffffffbfffb97f" - "4200108781808000200341c0006a2004420042ffffcf8aebffffd51e4200" - "108781808000200341306a2004420042a4ecc3b58fd4b498e70042001087" - "81808000200341206a2004420042bfa5949ccff0d2bbe400420010878180" - "8000200341106a2004420042d7d9ae9ae4f6e98dcb004200108781808000" - "200320044200429acdffcba3bdc4801a4200108781808000200341c0036a" - "41086a290300211e200341b0066a41086a290300211f200341f0066a4108" - "6a2903002120200341b0076a41086a2903002121200341f0076a41086a29" - "03002122200341b0086a41086a290300212320032903c008212420032903" - "8008212520032903c0072126200329038007212720032903d00221282003" - "41d0026a41086a2903002129200341e0026a41086a290300212a20034180" - "076a41086a290300212b200341c0076a41086a290300212c20034180086a" - "41086a290300212d200341c0086a41086a290300212e20032903d008212f" - "200329039008213020032903d007213120032903e0012132200341e0016a" - "41086a290300213320032903f0012134200341f0016a41086a2903002135" - "20034180026a41086a2903002136200341d0076a41086a29030021372003" - "4190086a41086a2903002138200341d0086a41086a290300213920032903" - "e008213a20032903a008213b2003290370213c200341f0006a41086a2903" - "00213d200329038001213e20034180016a41086a290300213f2003290390" - "01214020034190016a41086a2903002141200341a0016a41086a29030021" - "42200341a0086a41086a2903002143200341e0086a41086a290300214420" - "032903f008214520032903002146200341086a2903002147200329031021" - "48200341106a41086a29030021492003290320214a200341206a41086a29" - "0300214b2003290330214c200341306a41086a290300214d200320032903" - "40224e20034190056a41086a2903002010201754ad7c224f20032903b008" - "7c2204200341e0076a41086a2903002012201054ad7c200d201254ad7c7c" - "221020032903f0077c2212200341a0076a41086a290300200f200d54ad7c" - "2009200f54ad7c7c220d20032903b0077c220f200341e0066a41086a2903" - "00200b200954ad7c2007200b54ad7c7c220920032903f0067c220b200341" - "a0066a41086a290300200c200754ad7c2008200c54ad7c7c220720032903" - "b0067c220c200341e0056a41086a2903002016200854ad7c7c2208200341" - "e0006a41086a2903002005201554ad7c201b200554ad7c7c220520032903" - "c0037c2215200341d0036a41086a290300200a201854ad7c201c200a54ad" - "7c7c220a20032903e0027c2216200341f0026a41086a290300200e201a54" - "ad7c201d200e54ad7c7c220e2003290380027c221720034190026a41086a" - "2903002011201954ad7c2013201154ad7c7c221120032903a0017c221820" - "0341b0016a41086a2903002014201354ad7c2006201454ad7c7c22197c22" - "13200341d0006a41086a2903002003290350221420067c201454ad7c7c22" - "1a370380092003204c204020342028202720262025202420232004204f54" - "ad7c2010200454ad7c221b7c220420222012201054ad7c200d201254ad7c" - "7c22067c22102021200f200d54ad7c2009200f54ad7c7c220d7c220f2020" - "200b200954ad7c2007200b54ad7c7c22097c220b201f200c200754ad7c20" - "08200c54ad7c7c22072005200854ad7c2208201e2015200554ad7c200a20" - "1554ad7c7c22057c220c202a2016200a54ad7c200e201654ad7c7c220a7c" - "221220362017200e54ad7c2011201754ad7c7c220e7c2214204220182011" - "54ad7c2019201854ad7c7c22117c2215200341c0006a41086a2903002013" - "204e54ad7c201a201354ad7c7c2213370388092003204a203e2032200820" - "0754ad2005200854ad7c221620312030202f202e2004201b54ad7c200620" - "0454ad7c22177c2204202d2010200654ad7c200d201054ad7c7c22067c22" - "08202c200f200d54ad7c2009200f54ad7c7c220d7c220f202b200b200954" - "ad7c2007200b54ad7c7c22107c22072029200c200554ad7c200a200c54ad" - "7c7c22057c220920352012200a54ad7c200e201254ad7c7c220a7c220b20" - "412014200e54ad7c2011201454ad7c7c220c7c220e204d2015201154ad7c" - "2013201554ad7c7c22113703900920032048203c2007201654ad20052007" - "54ad7c2212203b203a20392004201754ad7c2006200454ad7c22137c2204" - "20382008200654ad7c200d200854ad7c7c22067c22072037200f200d54ad" - "7c2010200f54ad7c7c220d7c220820332009200554ad7c200a200954ad7c" - "7c22057c2209203f200b200a54ad7c200c200b54ad7c7c220a7c220b204b" - "200e200c54ad7c2011200e54ad7c7c220c37039809200320462008201254" - "ad2005200854ad7c2208204520442004201354ad7c2006200454ad7c220e" - "7c220420432007200654ad7c200d200754ad7c7c220d7c2206203d200920" - "0554ad7c200a200954ad7c7c22057c22072049200b200a54ad7c200c200b" - "54ad7c7c22093703a00920032006200854ad2005200654ad7c200341f008" - "6a41086a2903002004200e54ad7c200d200454ad7c7c20472007200554ad" - "7c2009200754ad7c7c3703a809200020034180096a10d680808000200341" - "b0096a2480808080000b3701017f20004100413010858180800021004101" - "10a3808080002101200041306a41e086c0800041301086818080001a2000" - "20013a00600b3a01017f23808080800041306b2201248080808000200020" - "0141004130108581808000220110db808080002100200141306a24808080" - "800020000b42002000200120022003109080808000200041306a20014130" - "6a200241306a2003109080808000200020022d006020012d006022027341" - "0020036b712002733a00600bd80d010b7f23808080800041c0176b220224" - "808080800020012d00c0012103410021042002410010a3808080003a0088" - "03200242f2b7f89e96d4f0950b37038003200242ed95f3a18a8ad68b6737" - "03f802200242bac6f6c9ec89d7a4f9003703f002200242a0d793dfa38deb" - "d6867f3703e802200242dcc3d1d8a2e189d5183703e002200242dde092fb" - "ad92bfe0ad7f3703d802200242e5b583f4e7b1ffc1003703d002200242a2" - "cbbc87dfaeeae9073703c802200242df92b5f096bdedf7bb7f3703c00220" - "0242dac6a9d0caada1f3673703b802200242dab8daf1f5c3bebed9003703" - "b002200242ca98a58286dfc2b9cc003703a802200242f3db839b97c18ac9" - "113703a002200242c78ad690efa1bbdb4237039802200242e7e686aac8d9" - "ad8d1b3703900220024286f099948ec3dfd83b37038802200242c3c1b5e6" - "dbb3b1d0aa7f3703800220024286ec8ff1d98ef0d4a57f3703f801200242" - "d7f9c29aa4b2e4c0053703f001200242ebec8cc3b1ecedb3ef003703e801" - "200242e9ddf2d1d1b3a6ca987f3703e00120024280cbabf1d3f6a4d4a17f" - "3703d8012002429aacd2bde8e4fefab37f3703d0012002429094d094a0f4" - "a3f9753703c80120022001200241c8016a200310d980808000200241c005" - "6a200210e880808000200241c8016a41c400410841a002108e8080800020" - "022802cc0121010240024020022802c8014101460d0020022802d0012105" - "200241c8016a200241c0056a41a0021086818080001a200241c8016a41a0" - "026a200241c8011086818080002106200241003602b805200220053602b4" - "05200220013602b005200241c0056a41c0016a2107200241c0056a41e000" - "6a2108200241c8016a41e0006a2109200241c8046a210a200241c8016a41" - "c0016a2105200241b0056a210b413f2101024003402001417f460d014280" - "8082808080a080e9002001413f71ad88a7210c0240024020044101710d00" - "200c21040c010b41012104200241c8016a10ed80808000200c410171450d" - "00200241e0076a200510ba80808000200241c0086a200a10ba8080800020" - "0241a0096a200241e0076a200610b380808000200241e0166a200a200510" - "bc8080800020024180166a200241e0166a10ba80808000200241a0156a20" - "024180166a200241c0086a10bb8080800020024180166a200241a0156a20" - "0241e0076a10bb80808000200241800a6a20024180166a200241e0076a10" - "b380808000200241e00a6a200241a0096a200241c8016a10bb8080800020" - "0241c00b6a200241e00a6a10ba80808000200241a00c6a200241c00b6a20" - "0241c00b6a10bc80808000200241800d6a200241a00c6a200241a00c6a10" - "bc80808000200241e00d6a200241800d6a200241e00a6a10b38080800020" - "0241e0166a200241800a6a200910bb80808000200241c00e6a200241e016" - "6a200910bb80808000200241a00f6a200241c00e6a200610b38080800020" - "024180106a200241800d6a200241c8016a10b380808000200241e0166a20" - "0241c00e6a10ba8080800020024180166a200241e0166a200241e00d6a10" - "bb80808000200241e0166a20024180166a20024180106a10bb8080800020" - "0241c8016a200241e0166a20024180106a10bb80808000200241e0166a20" - "05200241e00a6a10bc8080800020024180166a200241e0166a10ba808080" - "00200241a0156a20024180166a200241e0076a10bb808080002005200241" - "a0156a200241c00b6a10bb80808000200241e0106a200a200510bc808080" - "00200241e0166a20024180106a200241c8016a10bb80808000200241c011" - "6a200241e0166a200241c00e6a10b380808000200241a0126a2009200241" - "e00d6a10b38080800020024180136a200241a0126a200241a0126a10bc80" - "8080002009200241c0116a20024180136a10bb80808000200241e0166a20" - "0241e0106a10ba80808000200241e0136a200241e0166a200241c0086a10" - "bb80808000200241c0146a200510ba80808000200241a0156a200241e013" - "6a200241c0146a10bb80808000200241e0166a200241a00f6a200241a00f" - "6a10bc8080800020024180166a200241e0166a200241a0156a10bb808080" - "00200241c0056a2005200510bc80808000200241e0166a200241c00e6a10" - "e2808080002008200241e0166a200241e0166a10bc808080002007200241" - "80166a41e0001086818080001a200b200241c0056a41bc8cc0800010ee80" - "8080000b2001417f6a21010c000b0b200241c8016a10ed80808000200220" - "022802b80522013602e016200141c400470d01200020033a000c2000200b" - "290200370200200041086a200b41086a280200360200200241c0176a2480" - "808080000f0b200120022802d00141888cc08000108c80808000000b2002" - "41003602c005200241e0166a200241c0056a10ef80808000000b8e010101" - "7f2380808080004180036b2201248080808000200141a0026a41306a4100" - "41301085818080001a200141a0026a41e086c0800041301086818080001a" - "2001200141a0026a41e000108681808000220141e0006a410041c0011085" - "818080001a200041a0026a410041a0021085818080001a2000200141a002" - "1086818080001a20014180036a2480808080000bd70301157f2380808080" - "0041c00d6b2203248080808000200241e0036a210420024180036a210520" - "0241a0026a2106200241c0016a2107200241e0006a210820012802044103" - "742109200341c0046a41a0026a210a200341a00b6a41c0016a210b200341" - "a00b6a41e0006a210c200341e0036a210d20034180036a210e200341a002" - "6a210f20034180096a41c0016a211020034180096a41e0006a2111200341" - "c0016a2112200341e0006a21132001280200211420012802082115034002" - "4020090d002001201541016a3602082000200241c0041086818080001a20" - "0341c00d6a2480808080000f0b201428020422162d000c20142802002d00" - "607210a380808000211720032002201641046a280200201641086a280200" - "201541cc8cc0800010ae80808000201428020010af808080002003418009" - "6a20032002201710b080808000201120132008201710b080808000201020" - "122007201710b080808000200341a00b6a200f2006201710b08080800020" - "0c200e2005201710b080808000200b200d2004201710b080808000200341" - "c0046a20034180096a41a0021086818080001a200a200341a00b6a41a002" - "1086818080001a2002200341c0046a41c0041086818080001a200941786a" - "2109201441086a21140c000b0b22000240200120024b0d00200220012003" - "10f080808000000b2000200241a0026c6a0bd60301027f23808080800041" - "e00f6b22042480808080002004200241e000108681808000220441e0006a" - "200241e0006a41e0001086818080001a2004200341306a220510dd808080" - "00200441306a200510dd80808000200441e0006a200310dd808080002004" - "41e0006a41306a200310dd80808000200441c0016a2001200241c0016a22" - "02200441e0006a10e980808000200441c00d6a200141e0036a200410b380" - "808000200441a00b6a200441c00d6a200441c00d6a41306a220310b88080" - "8000200441a00b6a41306a200441c00d6a200310b980808000200441e003" - "6a41e0006a200141a0026a2203200410b380808000200441e0036a41c001" - "6a20014180036a200410b380808000200441e0036a200441a00b6a41e000" - "1086818080001a20044180066a200441e0006a200410bc80808000200441" - "e0066a2003200110c38080800020044180096a200441e0066a2002200441" - "80066a10e980808000200441c00d6a20044180096a200441c0016a10b780" - "808000200441a00b6a200441c00d6a200441e0036a10b780808000200441" - "c00d6a200441e0036a10b6808080002000200441c00d6a200441c0016a10" - "c380808000200041a0026a200441a00b6a41a0021086818080001a200441" - "e00f6a2480808080000b2700200020012002200310908080800020004130" - "6a200141306a200241306a20031090808080000b30002000200110e28080" - "8000200041e0006a200141e0006a10e280808000200041c0016a200141c0" - "016a10e2808080000bbd0201097e2000420042002001290300220242abd5" - "feffffffbfffb97f56ad7d2203200129030822047d220542ffffcf8aebff" - "ffd51e7c2206200420028420012903102207842001290318220884200129" - "03202209842001290328220a845022011b3703082000420042abd5feffff" - "ffbfffb97f20027d20011b3703002000420020032003200454ad7d200620" - "0554ad7c423f87220220077d220342a4ecc3b58fd4b498e7007c22042001" - "1b3703102000420020022002200754ad7d2004200354ad7c423f87220220" - "087d220342bfa5949ccff0d2bbe4007c220420011b370318200042002002" - "2002200854ad7d2004200354ad7c423f87220220097d220342d7d9ae9ae4" - "f6e98dcb007c220420011b3703202000420020022002200954ad7d200420" - "0354ad7c423f87200a7d429acdffcba3bdc4801a7c20011b3703280bc701" - "01057f23808080800041c0016b2203248080808000200341306a22042001" - "41306a220510b280808000200320014130108681808000220341e0006a41" - "306a200241306a220641301086818080002107200341e0006a2002413010" - "86818080001a20002003200341e0006a10e1808080002004200541301086" - "818080001a200320014130108681808000220341e0006a20064130108681" - "8080001a2007200241301086818080001a200041306a2003200341e0006a" - "10e180808000200341c0016a2480808080000bcd0b01167f238080808000" - "41a0086b22032480808080002003200241e0006a220420024190016a2205" - "10b980808000200341306a2004200510b880808000200341e0006a200241" - "c0016a2206200241f0016a220710b98080800020034190016a2006200710" - "b880808000200341e0036a41306a2208200141306a220910b28080800020" - "0341e0036a41e0006a200141e0006a220a4130108681808000210b200341" - "e0036a4190016a220c20014190016a220d10b280808000200341e0036a41" - "c0016a200141c0016a220e4130108681808000210f200341e0036a41f001" - "6a2210200141f0016a221110b280808000200341e0036a20014130108681" - "8080001a20034180066a41306a200241306a221241301086818080002113" - "20034180066a200241301086818080001a20034180066a41e0006a200341" - "90016a4130108681808000211420034180066a4190016a200341e0006a41" - "30108681808000211520034180066a41c0016a200341306a413010868180" - "8000211620034180066a41f0016a200341301086818080002117200341c0" - "016a200341e0036a20034180066a10ea8080800020082009413010868180" - "80002108200b200a41301086818080002118200c200d4130108681808000" - "210b200f200e4130108681808000210f201020114130108681808000210c" - "200341e0036a200141301086818080001a20034180066a20124130108681" - "8080001a20132002413010868180800021102014200341e0006a41301086" - "818080002113201520034190016a41301086818080002114201620034130" - "10868180800021152017200341306a41301086818080002116200341c001" - "6a41306a200341e0036a20034180066a10ea808080002008200910b28080" - "80002018200a41301086818080002117200b200d10b280808000200f200e" - "4130108681808000210f200c201110b280808000200341e0036a20014130" - "1086818080001a20034180066a200441301086818080001a201020054130" - "108681808000211020142012413010868180800021142013200241301086" - "818080002113201520034190016a413010868180800021152016200341e0" - "006a41301086818080002116200341a0026a200341e0036a20034180066a" - "10ea8080800020082009413010868180800021082017200a413010868180" - "80002117200b200d4130108681808000210b200f200e4130108681808000" - "210f200c20114130108681808000210c200341e0036a2001413010868180" - "80001a20034180066a200541301086818080001a20102004413010868180" - "800021102013201241301086818080002113201420024130108681808000" - "21142015200341e0006a41301086818080002115201620034190016a4130" - "1086818080002116200341a0026a41306a200341e0036a20034180066a10" - "ea808080002008200910b2808080002017200a4130108681808000211720" - "0b200d10b280808000200f200e4130108681808000210f200c201110b280" - "808000200341e0036a200141301086818080001a20034180066a20064130" - "1086818080001a2010200741301086818080002110201320044130108681" - "808000211320142005413010868180800021142016201241301086818080" - "002116201520024130108681808000211520034180036a200341e0036a20" - "034180066a10ea808080002008200941301086818080001a2017200a4130" - "1086818080001a200b200d41301086818080001a200f200e413010868180" - "80001a200c201141301086818080001a200341e0036a2001413010868180" - "80001a20034180066a200741301086818080001a20102006413010868180" - "80001a2013200541301086818080001a2014200441301086818080001a20" - "15201241301086818080001a2016200241301086818080001a2003418003" - "6a41306a200341e0036a20034180066a10ea808080002000200341c0016a" - "41e000108681808000220241e0006a200341a0026a41e000108681808000" - "1a200241c0016a20034180036a41e0001086818080001a200341a0086a24" - "80808080000bb30301027f23808080800041e0066b220224808080800020" - "02200110ba80808000200241e0006a2001200141e0006a220310b3808080" - "00200241c0016a200241e0006a200241e0006a10bc808080002002418006" - "6a2001200310bb80808000200241a0056a20024180066a200141c0016a22" - "0110bc80808000200241a0026a200241a0056a10ba808080002002418003" - "6a2003200110b380808000200241e0036a20024180036a20024180036a10" - "bc80808000200241c0046a200110ba8080800020024180066a200241e003" - "6a200241e0036a41306a220110b88080800020024180066a41306a220320" - "0241e0036a200110b980808000200020024180066a200210bc8080800020" - "024180066a200241c0046a200241c0046a41306a220110b8808080002003" - "200241c0046a200110b980808000200041e0006a20024180066a200241c0" - "016a10bc8080800020024180066a200241c0016a200241a0026a10bc8080" - "8000200241a0056a20024180066a200241e0036a10bc8080800020024180" - "066a200241a0056a200210bb80808000200041c0016a20024180066a2002" - "41c0046a10bb80808000200241e0066a2480808080000b7c01037f238080" - "80800041e0006b22022480808080002002200141c0016a2203200141f001" - "6a220410b880808000200241306a2003200410b980808000200041c0016a" - "200141e0006a41e0001086818080001a2000200241e00010868180800041" - "e0006a200141e0001086818080001a200241e0006a2480808080000b3e00" - "20002001200210bb80808000200041e0006a200141e0006a200241e0006a" - "10bb80808000200041c0016a200141c0016a200241c0016a10bb80808000" - "0b3601017f23808080800041306b22032480808080002003200210b28080" - "800020002003200110b980808000200341306a2480808080000b87020201" - "7f0c7e23808080800041306b220324808080800020012903082104200229" - "030821052002290328210620012903282107200229032021082001290320" - "21092002290318210a2001290318210b2002290310210c2001290310210d" - "20032002290300220e20012903007c220f3703002003200520047c220420" - "0f200e54ad7c220e3703082003200c200d7c220d2004200554ad200e2004" - "54ad7c7c22043703102003200a200b7c2205200d200c54ad2004200d54ad" - "7c7c22043703182003200820097c220c2005200a54ad2004200554ad7c7c" - "22053703202003200620077c200c200854ad2005200c54ad7c7c37032820" - "00200310d680808000200341306a2480808080000b7401027f2380808080" - "004190016b220224808080800020022001200141306a220310b980808000" - "200241306a2001200310b880808000200241e0006a2001200110b9808080" - "0020002002200241306a10a780808000200041306a200241e0006a200310" - "a78080800020024190016a2480808080000b230020002001200210b88080" - "8000200041306a200141306a200241306a10b8808080000b230020002001" - "200210b980808000200041306a200141306a200241306a10b9808080000b" - "c71f02017f3b7e23808080800041c0076b2202248080808000200241c004" - "6a200129030822034200200129030022044200108781808000200241d004" - "6a20012903102205420020044200108781808000200241e0046a20012903" - "182206420020044200108781808000200241f0046a200129032022074200" - "2004420010878180800020024180056a2001290328220842002004420010" - "8781808000200241a0056a2005420020034200108781808000200241b005" - "6a2006420020034200108781808000200241c0056a200742002003420010" - "8781808000200241d0056a2008420020034200108781808000200241f005" - "6a200642002005420010878180800020024180066a200742002005420010" - "878180800020024190066a2008420020054200108781808000200241b006" - "6a2007420020064200108781808000200241c0066a200842002006420010" - "8781808000200241e0066a20084200200742001087818080002002419005" - "6a2004420020044200108781808000200241e0056a200342002003420010" - "8781808000200241a0066a2005420020054200108781808000200241d006" - "6a2006420020064200108781808000200241f0066a200742002007420010" - "878180800020024180076a2008420020084200108781808000200241b004" - "6a200229039005220642fdfff3ffcffffff9897f7e2203420042abd5feff" - "ffffbfffb97f4200108781808000200241a0046a2003420042ffffcf8aeb" - "ffffd51e420010878180800020024190046a2003420042a4ecc3b58fd4b4" - "98e700420010878180800020024180046a2003420042bfa5949ccff0d2bb" - "e4004200108781808000200241f0036a2003420042d7d9ae9ae4f6e98dcb" - "004200108781808000200241e0036a20034200429acdffcba3bdc4801a42" - "00108781808000200241d0036a20024190056a41086a2903002209200229" - "03c00422084201867c220420022903a0047c2205200241b0046a41086a29" - "030020022903b00422032006427d837c200354ad7c7c220642fdfff3ffcf" - "fffff9897f7e2203420042abd5feffffffbfffb97f420010878180800020" - "0241c0036a2003420042ffffcf8aebffffd51e4200108781808000200241" - "d0026a2003420042a4ecc3b58fd4b498e7004200108781808000200241e0" - "016a2003420042bfa5949ccff0d2bbe4004200108781808000200241f000" - "6a2003420042d7d9ae9ae4f6e98dcb004200108781808000200220034200" - "429acdffcba3bdc4801a4200108781808000200241b0036a20022903c003" - "220a20022903e005220b20022903d004220c200241c0046a41086a290300" - "7c22074201862008423f88847c22082004200954ad7c2209200229039004" - "7c220d200241a0046a41086a2903002005200454ad7c2006200554ad7c7c" - "220e7c2204200241d0036a41086a29030020022903d003220320067c2003" - "54ad7c7c220542fdfff3ffcffffff9897f7e2203420042abd5feffffffbf" - "ffb97f4200108781808000200241a0036a2003420042ffffcf8aebffffd5" - "1e420010878180800020024190036a2003420042a4ecc3b58fd4b498e700" - "420010878180800020024180036a2003420042bfa5949ccff0d2bbe40042" - "00108781808000200241f0026a2003420042d7d9ae9ae4f6e98dcb004200" - "108781808000200241e0026a20034200429acdffcba3bdc4801a42001087" - "81808000200241c0026a20022903a003220f200241e0056a41086a290300" - "2008200b54ad7c2009200854ad7c2210200241d0046a41086a2903002007" - "200c54ad7c220c20022903e0047c220620022903a0057c22084201862007" - "423f88847c22072002290380047c220b20024190046a41086a290300200d" - "200954ad7c200e200d54ad7c7c220920022903d0027c220d200241c0036a" - "41086a2903002004200a54ad7c2005200454ad7c7c220a7c2204200241b0" - "036a41086a29030020022903b003220320057c200354ad7c7c220542fdff" - "f3ffcffffff9897f7e2203420042abd5feffffffbfffb97f420010878180" - "8000200241b0026a2003420042ffffcf8aebffffd51e4200108781808000" - "200241a0026a2003420042a4ecc3b58fd4b498e700420010878180800020" - "024190026a2003420042bfa5949ccff0d2bbe40042001087818080002002" - "4180026a2003420042d7d9ae9ae4f6e98dcb004200108781808000200241" - "f0016a20034200429acdffcba3bdc4801a4200108781808000200241d001" - "6a20022903b0022211200241d0026a41086a290300200d200954ad7c200a" - "200d54ad7c221220022903e0017c220d20024180046a41086a290300200b" - "200754ad7c2009200b54ad7c221320022903f0037c22092007201054ad22" - "0e20022903a0067c2207200241e0046a41086a2903002006200c54ad7c22" - "1020022903f0047c220b20022903b0057c220a200241a0056a41086a2903" - "002008200654ad7c7c22064201862008423f88847c22147c22157c220820" - "02290390037c220c200241a0036a41086a2903002004200f54ad7c200520" - "0454ad7c7c22167c2204200241c0026a41086a29030020022903c0022203" - "20057c200354ad7c7c220542fdfff3ffcffffff9897f7e2203420042abd5" - "feffffffbfffb97f4200108781808000200241c0016a2003420042ffffcf" - "8aebffffd51e4200108781808000200241b0016a2003420042a4ecc3b58f" - "d4b498e7004200108781808000200241a0016a2003420042bfa5949ccff0" - "d2bbe400420010878180800020024190016a2003420042d7d9ae9ae4f6e9" - "8dcb00420010878180800020024180016a20034200429acdffcba3bdc480" - "1a4200108781808000200241e0006a20022903c0012217200241a0066a41" - "086a2903002007200e54ad7c2014200754ad7c2214200241f0046a41086a" - "290300200b201054ad7c22182002290380057c220720022903c0057c220e" - "200241b0056a41086a290300200a200b54ad7c2006200a54ad7c7c220b20" - "022903f0057c220a4201862006423f88847c220620022903e0037c220f20" - "0241f0036a41086a2903002009201354ad7c2015200954ad7c7c22092002" - "2903707c2210200241e0016a41086a290300200d201254ad7c2008200d54" - "ad7c7c220d2002290380037c221220024190036a41086a290300200c2008" - "54ad7c2016200c54ad7c7c220820022903a0027c220c200241b0026a4108" - "6a2903002004201154ad7c2005200454ad7c7c22157c2204200241d0016a" - "41086a29030020022903d001220320057c200354ad7c7c220542fdfff3ff" - "cffffff9897f7e2203420042abd5feffffffbfffb97f4200108781808000" - "200241d0006a2003420042ffffcf8aebffffd51e42001087818080002002" - "41c0006a2003420042a4ecc3b58fd4b498e7004200108781808000200241" - "306a2003420042bfa5949ccff0d2bbe4004200108781808000200241206a" - "2003420042d7d9ae9ae4f6e98dcb004200108781808000200241106a2003" - "4200429acdffcba3bdc4801a4200108781808000200241086a2903002116" - "200241d0066a41086a290300211920024180066a41086a290300211a2002" - "41d0056a41086a290300211b200229039006211c20022903b006211d2002" - "2903e002211e200241e0026a41086a290300211f200241f0026a41086a29" - "03002120200241b0066a41086a290300212120024190066a41086a290300" - "212220022903c006212320022903f006210320022903f0012124200241f0" - "016a41086a2903002125200229038002212620024180026a41086a290300" - "212720024190026a41086a2903002128200241c0066a41086a2903002129" - "20022903e006212a200241f0066a41086a290300212b200229038001212c" - "20024180016a41086a290300212d200229039001212e20024190016a4108" - "6a290300212f20022903a0012130200241a0016a41086a29030021312002" - "41b0016a41086a2903002132200241e0066a41086a290300213320022903" - "8007211120022903102134200241106a41086a2903002135200229032021" - "36200241206a41086a290300213720022903302138200241306a41086a29" - "030021392002290340213a200241c0006a41086a290300213b2002200229" - "0350223c2006201454ad223d20022903d0067c221320024180056a41086a" - "2903002007201854ad7c221820022903d0057c2214200241c0056a41086a" - "290300200e200754ad7c200b200e54ad7c7c22072002290380067c220e20" - "0241f0056a41086a290300200a200b54ad7c7c220b420186200a423f8884" - "7c220a200241e0036a41086a290300200f200654ad7c2009200f54ad7c7c" - "220620022903007c220f200241f0006a41086a2903002010200954ad7c20" - "0d201054ad7c7c220920022903f0027c221020024180036a41086a290300" - "2012200d54ad7c2008201254ad7c7c220d2002290390027c2212200241a0" - "026a41086a290300200c200854ad7c2015200c54ad7c7c220820022903b0" - "017c220c200241c0016a41086a2903002004201754ad7c2005200454ad7c" - "7c22157c2204200241e0006a41086a2903002002290360221720057c2017" - "54ad7c7c2217370390072002203a20302026201e20192013203d54ad7c20" - "0a201354ad7c2213201d201c201b2014201854ad7c2007201454ad7c2214" - "7c2205201a200e200754ad7c200b200e54ad7c7c22077c220e420186200b" - "423f88847c220b2006200a54ad7c220a2016200f200654ad7c2009200f54" - "ad7c7c22067c220f20202010200954ad7c200d201054ad7c7c22097c2210" - "20282012200d54ad7c2008201254ad7c7c220d7c22122032200c200854ad" - "7c2015200c54ad7c7c22087c220c200241d0006a41086a2903002004203c" - "54ad7c2017200454ad7c7c22153703980720022038202e2024200a200b54" - "ad2006200a54ad7c22162003202320222005201454ad7c2007200554ad7c" - "22147c22042021200e200754ad7c7c2205420186200e423f88847c220720" - "0b201354ad7c22137c220b201f200f200654ad7c2009200f54ad7c7c2206" - "7c220a20272010200954ad7c200d201054ad7c7c22097c220e2031201220" - "0d54ad7c2008201254ad7c7c220d7c220f203b200c200854ad7c2015200c" - "54ad7c7c220c3703a00720022036202c200b201654ad2006200b54ad7c22" - "0b202b2007200354ad7c2013200754ad7c2210202a20292004201454ad7c" - "2005200454ad7c22127c22034201862005423f88847c22137c2204202520" - "0a200654ad7c2009200a54ad7c7c22057c2206202f200e200954ad7c200d" - "200e54ad7c7c22077c22082039200f200d54ad7c200c200f54ad7c7c2209" - "3703a807200220342004200b54ad2005200454ad7c220d20112033200320" - "1254ad7c220b4201862003423f88847c22032013201054ad7c220a7c2204" - "202d2006200554ad7c2007200654ad7c7c22057c220620372008200754ad" - "7c2009200854ad7c7c22073703b00720022004200d54ad2005200454ad7c" - "200b423f8820024180076a41086a2903002003201154ad7c200a200354ad" - "7c7c7c20352006200554ad7c2007200654ad7c7c3703b807200020024190" - "076a10d680808000200241c0076a2480808080000be60101037f23808080" - "80004180126b220324808080800020032001200210b480808000200341a0" - "026a200141a0026a2204200241a0026a220510b480808000200341c0046a" - "2002200510c380808000200341e0066a2004200110c38080800020034180" - "096a200341e0066a200341c0046a10b480808000200341a00b6a20034180" - "096a200310b780808000200341c00d6a200341a00b6a200341a0026a10b7" - "80808000200341e00f6a200341a0026a10b6808080002000200341e00f6a" - "200310c380808000200041a0026a200341c00d6a41a0021086818080001a" - "20034180126a2480808080000b3c01017f23808080800041c0046b220224" - "808080800020022000200110be808080002000200241c004108681808000" - "1a200241c0046a2480808080000bd80701077f23808080800041c00d6b22" - "022480808080002002200141e000108681808000220241e0006a200141e0" - "006a220341e0001086818080001a200241c0016a200141c0016a220441e0" - "001086818080001a200241a0026a200141a0026a220541e0001086818080" - "001a20024180036a20014180036a220641e0001086818080001a200241e0" - "036a200141e0036a220741e0001086818080001a200241a00b6a20012006" - "10eb80808000200241c0046a200241a00b6a41e0001086818080001a2002" - "41a0056a200241a00b6a41e0006a220841e0001086818080001a20022002" - "41c0046a200110bb80808000200241a00b6a2002200210bc808080002002" - "200241a00b6a200241c0046a10bc8080800020024180036a200241a0056a" - "200610bc80808000200241a00b6a20024180036a20024180036a10bc8080" - "800020024180036a200241a00b6a200241a0056a10bc80808000200241a0" - "0b6a2005200410eb8080800020024180066a200241a00b6a41e000108681" - "8080001a200241e0066a200841e0001086818080001a200241a00b6a2003" - "200710eb80808000200241c0076a200241a00b6a41e0001086818080001a" - "200241a0086a200841e0001086818080001a200241e0006a20024180066a" - "200310bb80808000200241a00b6a200241e0006a200241e0006a10bc8080" - "8000200241e0006a200241a00b6a20024180066a10bc80808000200241e0" - "036a200241e0066a200710bc80808000200241a00b6a200241e0036a2002" - "41e0036a10bc80808000200241e0036a200241a00b6a200241e0066a10bc" - "80808000200241a00b6a200241a0086a200241a0086a41306a220110b880" - "808000200241a00b6a41306a200241a0086a200110b98080800020024180" - "066a200241a00b6a41e0001086818080001a200241a0026a20024180066a" - "200510bc80808000200241a00b6a200241a0026a200241a0026a10bc8080" - "8000200241a0026a200241a00b6a20024180066a10bc80808000200241c0" - "016a200241c0076a200410bb80808000200241a00b6a200241c0016a2002" - "41c0016a10bc80808000200241c0016a200241a00b6a200241c0076a10bc" - "8080800020024180096a200241e0001086818080001a20024180096a41e0" - "006a200241e0006a41e0001086818080001a20024180096a41c0016a2002" - "41c0016a41e0001086818080001a200241a00b6a200241a0026a41e00010" - "86818080001a200820024180036a41e0001086818080001a200241a00b6a" - "41c0016a200241e0036a41e0001086818080001a200020024180096a41a0" - "0210868180800041a0026a200241a00b6a41a0021086818080001a200241" - "c00d6a2480808080000bcd0102037f017e2380808080004180096b220224" - "8080808000200210ac8080800041002103413f2104034002400240024020" - "04417f460d0042012004413f71ad8642808084808080c080528321052003" - "4101710d01200542005221030c020b200041a0026a200241a0026a10b180" - "8080002000200241a0021086818080001a20024180096a2480808080000f" - "0b200241c0046a200210c0808080002002200241c0046a41c00410868180" - "80001a410121030b02402005500d002002200110bf808080000b2004417f" - "6a21040c000b0b23002000200110db80808000200041306a200141306a10" - "db808080007110a3808080000b3e0020002001200210bc80808000200041" - "e0006a200141e0006a200241e0006a10bc80808000200041c0016a200141" - "c0016a200241c0016a10bc808080000bbc0101047f23808080800041106b" - "2202248080808000200141086a21030340200241086a200310e680808000" - "02400240024020022d0008450d0020022d00092101410121040c010b0240" - "20012802002204450d00200420012802042205470d020b2002200141146a" - "10e68080800020022d0001210120022d000021040b200020013a00012000" - "20044101713a0000200241106a2480808080000f0b200142808080808001" - "37020c20012005417f6a2204360208200120043602040c000b0b6f01057f" - "23808080800041106b220324808080800041002104410121054100210602" - "400340200120062207460d01200341086a200210d080808000200741016a" - "210620032d00080d000b200120076b2104410021050b2000200436020420" - "002005360200200341106a2480808080000bf50401037f23808080800041" - "b0096b22022480808080002002200141306a220310bd8080800020024130" - "6a2002200210b980808000200241e0006a200241306a200241306a10b980" - "80800020024190016a200241e0006a200241e0006a10b980808000200241" - "c0016a2003200141e0006a220410a780808000200241f0016a200410bd80" - "808000200241d0086a200241f0016a200241f0016a10b980808000200241" - "80096a200241d0086a200241d0086a10b980808000200241c0076a200241" - "80096a20024180096a10b980808000200241a0026a200241c0076a200241" - "80096a10b980808000200241d0026a200241a0026a20024190016a10a780" - "80800020024180036a2002200241a0026a10b980808000200241b0036a20" - "0241c0016a20024190016a10a780808000200241e0036a200241a0026a20" - "0241a0026a10b98080800020024190046a200241e0036a200241a0026a10" - "b980808000200241c0046a200220024190046a10b880808000200241f004" - "6a200241c0046a20024180036a10a780808000200241a0056a200241d002" - "6a200241f0046a10b980808000200241d0056a2001200310a78080800020" - "024180066a200241c0046a200241d0056a10a780808000200241b0066a20" - "024180066a20024180066a10b980808000200241b0066a41306a200241a0" - "056a41301086818080001a200241b0066a41e0006a200241b0036a413010" - "86818080001a200241c0076a410041301085818080001a200241c0076a41" - "e0006a410041301085818080001a200241c0076a41306a41e086c0800041" - "301086818080001a2000200241b0066a200241c0076a200410a980808000" - "10c880808000200241b0096a2480808080000bf60601057f238080808000" - "41900d6b220324808080800020032001200210a780808000200341306a20" - "0141306a2204200241306a220510a780808000200341e0006a200141e000" - "6a2206200241e0006a220710a78080800020034190016a2001200410b980" - "808000200341c0016a2002200510b980808000200341f0016a2003419001" - "6a200341c0016a10a780808000200341a0026a2003200341306a10b98080" - "8000200341d0026a200341f0016a200341a0026a10b88080800020034180" - "036a2004200610b980808000200341b0036a2005200710b9808080002003" - "41e0036a20034180036a200341b0036a10a78080800020034190046a2003" - "41306a200341e0006a10b980808000200341c0046a200341e0036a200341" - "90046a10b880808000200341f0046a2001200610b980808000200341a005" - "6a2002200710b980808000200341d0056a200341f0046a200341a0056a10" - "a78080800020034180066a2003200341e0006a10b980808000200341b006" - "6a200341d0056a20034180066a10b880808000200341e0066a2003200310" - "b98080800020034190076a200341e0066a200310b980808000200341800c" - "6a200341e0006a200341e0006a10b980808000200341b00c6a200341800c" - "6a200341800c6a10b980808000200341e00c6a200341b00c6a200341b00c" - "6a10b980808000200341c0076a200341e00c6a200341b00c6a10b9808080" - "00200341f0076a200341306a200341c0076a10b980808000200341a0086a" - "200341306a200341c0076a10b880808000200341a00b6a200341b0066a20" - "0341b0066a10b980808000200341d00b6a200341a00b6a200341a00b6a10" - "b980808000200341e00c6a200341d00b6a200341d00b6a10b98080800020" - "0341d0086a200341e00c6a200341d00b6a10b98080800020034180096a20" - "0341c0046a200341d0086a10a780808000200341b0096a200341d0026a20" - "0341a0086a10a7808080002000200341b0096a20034180096a10b8808080" - "00200341e0096a200341d0086a20034190076a10a780808000200341900a" - "6a200341a0086a200341f0076a10a780808000200041306a200341900a6a" - "200341e0096a10b980808000200341c00a6a20034190076a200341d0026a" - "10a780808000200341f00a6a200341f0076a200341c0046a10a780808000" - "200041e0006a200341f00a6a200341c00a6a10b980808000200341900d6a" - "2480808080000b41002000200120022003109080808000200041306a2001" - "41306a200241306a2003109080808000200041e0006a200141e0006a2002" - "41e0006a20031090808080000bbe0601057f200041786a22012000417c6a" - "280200220241787122006a21030240024020024101710d00200241027145" - "0d012001280200220220006a21000240200120026b2201410028029c97c0" - "8000470d0020032802044103714103470d014100200036029497c0800020" - "032003280204417e7136020420012000410172360204200320003602000f" - "0b2001200210cc808080000b024002400240024002400240200328020422" - "024102710d00200341002802a097c08000460d022003410028029c97c080" - "00460d0320032002417871220210cc808080002001200220006a22004101" - "72360204200120006a20003602002001410028029c97c08000470d014100" - "200036029497c080000f0b20032002417e71360204200120004101723602" - "04200120006a20003602000b2000418002490d0220012000108481808000" - "41002101410041002802b497c08000417f6a22003602b497c0800020000d" - "04024041002802fc94c080002200450d00410021010340200141016a2101" - "200028020822000d000b0b4100200141ff1f200141ff1f4b1b3602b497c0" - "80000f0b410020013602a097c080004100410028029897c0800020006a22" - "0036029897c080002001200041017236020402402001410028029c97c080" - "00470d004100410036029497c080004100410036029c97c080000b200041" - "002802ac97c0800022044d0d0341002802a097c080002200450d03410021" - "02410028029897c0800022054129490d0241f494c0800021010340024020" - "01280200220320004b0d002000200320012802046a490d040b2001280208" - "21010c000b0b4100200136029c97c080004100410028029497c080002000" - "6a220036029497c0800020012000410172360204200120006a2000360200" - "0f0b200041f80171418495c080006a210302400240410028028c97c08000" - "220241012000410376742200710d004100200220007236028c97c0800020" - "0321000c010b200328020821000b200320013602082000200136020c2001" - "200336020c200120003602080f0b024041002802fc94c080002201450d00" - "410021020340200241016a2102200128020822010d000b0b4100200241ff" - "1f200241ff1f4b1b3602b497c08000200520044d0d004100417f3602ac97" - "c080000b0b4d01017f23808080800041206b220224808080800020024100" - "36021020024101360204200242043702082002412e36021c200220003602" - "182002200241186a3602002002200110a480808000000b800601057f0240" - "024002402000417c6a220328020022044178712205410441082004410371" - "22061b20016a490d0002402006450d002005200141276a4b0d020b411020" - "02410b6a4178712002410b491b210102400240024020060d002001418002" - "490d0120052001410472490d01200520016b418180084f0d010c020b2000" - "41786a220720056a21060240024002400240200520014f0d002006410028" - "02a097c08000460d032006410028029c97c08000460d0220062802042204" - "4102710d042004417871220420056a22052001490d042006200410cc8080" - "8000200520016b22024110490d0120032001200328020041017172410272" - "360200200720016a22012002410372360204200720056a22052005280204" - "4101723602042001200210cd8080800020000f0b200520016b2202410f4d" - "0d0420032001200441017172410272360200200720016a22052002410372" - "360204200620062802044101723602042005200210cd8080800020000f0b" - "20032005200328020041017172410272360200200720056a220220022802" - "0441017236020420000f0b410028029497c0800020056a22052001490d01" - "02400240200520016b2202410f4b0d002003200441017120057241027236" - "0200200720056a2202200228020441017236020441002102410021010c01" - "0b20032001200441017172410272360200200720016a2201200241017236" - "0204200720056a2205200236020020052005280204417e713602040b4100" - "200136029c97c080004100200236029497c0800020000f0b410028029897" - "c0800020056a220520014b0d040b0240200210ce8080800022050d004100" - "0f0b20052000417c4178200328020022014103711b20014178716a220120" - "0220012002491b1086818080002102200010c980808000200221000b2000" - "0f0b41e992c08000419893c0800010ca80808000000b41a893c0800041d8" - "93c0800010ca80808000000b200320012004410171724102723602002007" - "20016a2202200520016b22054101723602044100200536029897c0800041" - "0020023602a097c0800020000b820301047f200028020c21020240024002" - "402001418002490d002000280218210302400240024020022000470d0020" - "0041144110200028021422021b6a28020022010d01410021020c020b2000" - "2802082201200236020c200220013602080c010b200041146a200041106a" - "20021b21040340200421052001220241146a200241106a20022802142201" - "1b210420024114411020011b6a28020022010d000b200541003602000b20" - "03450d020240200028021c41027441f493c080006a22012802002000460d" - "0020034110411420032802102000461b6a20023602002002450d030c020b" - "2001200236020020020d014100410028029097c08000417e200028021c77" - "7136029097c080000c020b0240200220002802082204460d002004200236" - "020c200220043602080f0b4100410028028c97c08000417e200141037677" - "7136028c97c080000f0b20022003360218024020002802102201450d0020" - "022001360210200120023602180b20002802142201450d00200220013602" - "14200120023602180f0b0ba00401027f200020016a210202400240200028" - "020422034101710d002003410271450d012000280200220320016a210102" - "40200020036b2200410028029c97c08000470d0020022802044103714103" - "470d014100200136029497c0800020022002280204417e71360204200020" - "01410172360204200220013602000c020b2000200310cc808080000b0240" - "024002400240200228020422034102710d00200241002802a097c0800046" - "0d022002410028029c97c08000460d0320022003417871220310cc808080" - "002000200320016a2201410172360204200020016a200136020020004100" - "28029c97c08000470d014100200136029497c080000f0b20022003417e71" - "36020420002001410172360204200020016a20013602000b024020014180" - "02490d00200020011084818080000f0b200141f80171418495c080006a21" - "0202400240410028028c97c08000220341012001410376742201710d0041" - "00200320017236028c97c08000200221010c010b200228020821010b2002" - "20003602082001200036020c2000200236020c200020013602080f0b4100" - "20003602a097c080004100410028029897c0800020016a220136029897c0" - "8000200020014101723602042000410028029c97c08000470d0141004100" - "36029497c080004100410036029c97c080000f0b4100200036029c97c080" - "004100410028029497c0800020016a220136029497c08000200020014101" - "72360204200020016a20013602000f0b0bc12502087f017e024002400240" - "02400240024002400240200041f4014b0d00410028028c97c08000220141" - "102000410b6a41f803712000410b491b220241037622037622004103710d" - "012002410028029497c080004d0d0720000d02410028029097c080002200" - "0d030c070b2000410b6a22034178712102410028029097c080002204450d" - "06411f21050240200041f4ffff074b0d002002410620034108766722006b" - "7641017120004101746b413e6a21050b410020026b210302402005410274" - "41f493c080006a28020022010d0041002100410021060c040b4100210020" - "024100411920054101766b2005411f461b74210741002106034002402001" - "220128020441787122082002490d00200820026b220820034f0d00200821" - "032001210620080d004100210320012106200121000c060b200128021422" - "082000200820012007411d764104716a41106a2802002201471b20002008" - "1b2100200741017421072001450d040c000b0b024002402000417f734101" - "7120036a22074103742200418495c080006a22022000418c95c080006a28" - "020022032802082206460d002006200236020c200220063602080c010b41" - "002001417e2007777136028c97c080000b20032000410372360204200320" - "006a22002000280204410172360204200341086a0f0b0240024020002003" - "7441022003742200410020006b72716822084103742203418495c080006a" - "22062003418c95c080006a28020022002802082207460d00200720063602" - "0c200620073602080c010b41002001417e2008777136028c97c080000b20" - "002002410372360204200020026a2207200320026b220241017236020420" - "0020036a20023602000240410028029497c080002201450d002001417871" - "418495c080006a2106410028029c97c08000210302400240410028028c97" - "c08000220841012001410376742201710d004100200820017236028c97c0" - "8000200621010c010b200628020821010b20062003360208200120033602" - "0c2003200636020c200320013602080b4100200736029c97c08000410020" - "0236029497c08000200041086a0f0b20006841027441f493c080006a2802" - "00220628020441787120026b210320062101024002400340024020062802" - "1022000d00200628021422000d0020012802182105024002400240200128" - "020c22002001470d00200141144110200128021422001b6a28020022060d" - "01410021000c020b20012802082206200036020c200020063602080c010b" - "200141146a200141106a20001b21070340200721082006220041146a2000" - "41106a200028021422061b210720004114411020061b6a28020022060d00" - "0b200841003602000b2005450d030240200128021c41027441f493c08000" - "6a22062802002001460d0020054110411420052802102001461b6a200036" - "02002000450d040c030b2006200036020020000d024100410028029097c0" - "8000417e200128021c777136029097c080000c030b200028020441787120" - "026b22062003200620034922061b21032000200120061b2101200021060c" - "000b0b20002005360218024020012802102206450d002000200636021020" - "0620003602180b20012802142206450d0020002006360214200620003602" - "180b02400240024020034110490d0020012002410372360204200120026a" - "22022003410172360204200220036a2003360200410028029497c0800022" - "07450d012007417871418495c080006a2106410028029c97c08000210002" - "400240410028028c97c08000220841012007410376742207710d00410020" - "0820077236028c97c08000200621070c010b200628020821070b20062000" - "3602082007200036020c2000200636020c200020073602080c010b200120" - "0320026a2200410372360204200120006a22002000280204410172360204" - "0c010b4100200236029c97c080004100200336029497c080000b20014108" - "6a0f0b024020002006720d004100210641022005742200410020006b7220" - "04712200450d0320006841027441f493c080006a28020021000b2000450d" - "010b0340200020062000280204417871220120026b220820034922051b21" - "04200120024921072008200320051b21080240200028021022010d002000" - "28021421010b2006200420071b21062003200820071b2103200121002001" - "0d000b0b2006450d000240410028029497c0800022002002490d00200320" - "0020026b4f0d010b20062802182105024002400240200628020c22002006" - "470d00200641144110200628021422001b6a28020022010d01410021000c" - "020b20062802082201200036020c200020013602080c010b200641146a20" - "0641106a20001b21070340200721082001220041146a200041106a200028" - "021422011b210720004114411020011b6a28020022010d000b2008410036" - "02000b02402005450d0002400240200628021c41027441f493c080006a22" - "012802002006460d0020054110411420052802102006461b6a2000360200" - "2000450d020c010b2001200036020020000d004100410028029097c08000" - "417e200628021c777136029097c080000c010b2000200536021802402006" - "2802102201450d0020002001360210200120003602180b20062802142201" - "450d0020002001360214200120003602180b0240024020034110490d0020" - "062002410372360204200620026a22002003410172360204200020036a20" - "0336020002402003418002490d00200020031084818080000c020b200341" - "f80171418495c080006a210202400240410028028c97c080002201410120" - "03410376742203710d004100200120037236028c97c08000200221030c01" - "0b200228020821030b200220003602082003200036020c2000200236020c" - "200020033602080c010b2006200320026a2200410372360204200620006a" - "220020002802044101723602040b200641086a0f0b024002400240024002" - "4002400240410028029497c08000220020024f0d000240410028029897c0" - "8000220020024b0d0041002100200241af80046a22064110764000220341" - "7f4622070d0720034110742201450d07410041002802a497c08000410020" - "064180807c7120071b22086a22003602a497c08000410041002802a897c0" - "800022032000200320004b1b3602a897c0800002400240024041002802a0" - "97c080002203450d0041f494c08000210003402000280200220620002802" - "0422076a2001460d02200028020822000d000c030b0b0240024041002802" - "b097c080002200450d00200020014d0d010b410020013602b097c080000b" - "410041ff1f3602b497c08000410020083602f894c08000410020013602f4" - "94c080004100418495c0800036029095c080004100418c95c08000360298" - "95c080004100418495c0800036028c95c080004100419495c080003602a0" - "95c080004100418c95c0800036029495c080004100419c95c080003602a8" - "95c080004100419495c0800036029c95c08000410041a495c080003602b0" - "95c080004100419c95c080003602a495c08000410041ac95c080003602b8" - "95c08000410041a495c080003602ac95c08000410041b495c080003602c0" - "95c08000410041ac95c080003602b495c08000410041bc95c080003602c8" - "95c08000410041b495c080003602bc95c080004100410036028095c08000" - "410041c495c080003602d095c08000410041bc95c080003602c495c08000" - "410041c495c080003602cc95c08000410041cc95c080003602d895c08000" - "410041cc95c080003602d495c08000410041d495c080003602e095c08000" - "410041d495c080003602dc95c08000410041dc95c080003602e895c08000" - "410041dc95c080003602e495c08000410041e495c080003602f095c08000" - "410041e495c080003602ec95c08000410041ec95c080003602f895c08000" - "410041ec95c080003602f495c08000410041f495c0800036028096c08000" - "410041f495c080003602fc95c08000410041fc95c0800036028896c08000" - "410041fc95c0800036028496c080004100418496c0800036029096c08000" - "4100418c96c0800036029896c080004100418496c0800036028c96c08000" - "4100419496c080003602a096c080004100418c96c0800036029496c08000" - "4100419c96c080003602a896c080004100419496c0800036029c96c08000" - "410041a496c080003602b096c080004100419c96c080003602a496c08000" - "410041ac96c080003602b896c08000410041a496c080003602ac96c08000" - "410041b496c080003602c096c08000410041ac96c080003602b496c08000" - "410041bc96c080003602c896c08000410041b496c080003602bc96c08000" - "410041c496c080003602d096c08000410041bc96c080003602c496c08000" - "410041cc96c080003602d896c08000410041c496c080003602cc96c08000" - "410041d496c080003602e096c08000410041cc96c080003602d496c08000" - "410041dc96c080003602e896c08000410041d496c080003602dc96c08000" - "410041e496c080003602f096c08000410041dc96c080003602e496c08000" - "410041ec96c080003602f896c08000410041e496c080003602ec96c08000" - "410041f496c0800036028097c08000410041ec96c080003602f496c08000" - "410041fc96c0800036028897c08000410041f496c080003602fc96c08000" - "410020013602a097c08000410041fc96c0800036028497c0800041002008" - "41586a220036029897c0800020012000410172360204200120006a412836" - "0204410041808080013602ac97c080000c080b200320014f0d0020062003" - "4b0d00200028020c450d030b410041002802b097c0800022002001200020" - "01491b3602b097c08000200120086a210641f494c0800021000240024002" - "400340200028020022072006460d01200028020822000d000c020b0b2000" - "28020c450d010b41f494c080002100024003400240200028020022062003" - "4b0d002003200620002802046a2206490d020b200028020821000c000b0b" - "410020013602a097c080004100200841586a220036029897c08000200120" - "00410172360204200120006a4128360204410041808080013602ac97c080" - "002003200641606a41787141786a22002000200341106a491b2207411b36" - "020441002902f494c080002109200741106a41002902fc94c08000370200" - "20072009370208410020083602f894c08000410020013602f494c0800041" - "00200741086a3602fc94c080004100410036028095c080002007411c6a21" - "00034020004107360200200041046a22002006490d000b20072003460d07" - "20072007280204417e713602042003200720036b22004101723602042007" - "200036020002402000418002490d00200320001084818080000c080b2000" - "41f80171418495c080006a210602400240410028028c97c0800022014101" - "2000410376742200710d004100200120007236028c97c08000200621000c" - "010b200628020821000b200620033602082000200336020c200320063602" - "0c200320003602080c070b200020013602002000200028020420086a3602" - "04200120024103723602042007410f6a41787141786a2206200120026a22" - "006b2103200641002802a097c08000460d032006410028029c97c0800046" - "0d040240200628020422024103714101470d0020062002417871220210cc" - "80808000200220036a2103200620026a220628020421020b20062002417e" - "7136020420002003410172360204200020036a2003360200024020034180" - "02490d00200020031084818080000c060b200341f80171418495c080006a" - "210202400240410028028c97c08000220641012003410376742203710d00" - "4100200620037236028c97c08000200221030c010b200228020821030b20" - "0220003602082003200036020c2000200236020c200020033602080c050b" - "4100200020026b220336029897c08000410041002802a097c08000220020" - "026a22063602a097c0800020062003410172360204200020024103723602" - "04200041086a21000c060b410028029c97c0800021030240024020002002" - "6b2206410f4b0d004100410036029c97c080004100410036029497c08000" - "20032000410372360204200320006a220020002802044101723602040c01" - "0b4100200636029497c080004100200320026a220136029c97c080002001" - "2006410172360204200320006a2006360200200320024103723602040b20" - "0341086a0f0b2000200720086a360204410041002802a097c08000220041" - "0f6a417871220341786a22063602a097c080004100200020036b41002802" - "9897c0800020086a22036a41086a220136029897c0800020062001410172" - "360204200020036a4128360204410041808080013602ac97c080000c030b" - "410020003602a097c080004100410028029897c0800020036a2203360298" - "97c08000200020034101723602040c010b4100200036029c97c080004100" - "410028029497c0800020036a220336029497c08000200020034101723602" - "04200020036a20033602000b200141086a0f0b41002100410028029897c0" - "8000220320024d0d004100200320026b220336029897c080004100410028" - "02a097c08000220020026a22063602a097c0800020062003410172360204" - "20002002410372360204200041086a0f0b20000b4301017f238080808000" - "41206b2201248080808000200141003602182001410136020c200141d085" - "c0800036020820014204370210200141086a200010a480808000000b4e01" - "037f024020012802042202200128020822034e0d0020012003417f6a2204" - "36020820012802002d000020044107717641017110a38080800021040b20" - "0020043a0001200020022003483a00000b18002001200085220042002000" - "7d84427f5510a3808080000b10002000417f7341017110a3808080000bf2" - "0202017f017e23808080800041f0006b2206248080808000200620013602" - "0c2006200036020820062003360214200620023602102006410236021c20" - "0641c08dc08000360218024020042802000d002006410336025c200641f4" - "8dc08000360258200642033702642006418280808000ad42208622072006" - "41106aad8437034820062007200641086aad843703402006418380808000" - "ad422086200641186aad843703382006200641386a360260200641d8006a" - "200510a480808000000b200641206a41106a200441106a29020037030020" - "0641206a41086a200441086a290200370300200620042902003703202006" - "410436025c200641a88ec080003602582006420437026420064182808080" - "00ad4220862207200641106aad8437035020062007200641086aad843703" - "482006418480808000ad422086200641206aad8437034020064183808080" - "00ad422086200641186aad843703382006200641386a360260200641d800" - "6a200510a480808000000bb30301037f2380808080004180016b22022480" - "8080800020002802002100024002400240200128021422034110710d0020" - "03412071450d0120002d0000210341810121000340200220006a417e6a20" - "03410f712204413072200441376a2004410a491b3a0000200341ff017122" - "0441047621032000417f6a21002004410f4b0d000b200141fd8ec0800041" - "02200220006a417f6a41810120006b10d58080800021000c020b20002d00" - "00210341810121000340200220006a417e6a2003410f7122044130722004" - "41d7006a2004410a491b3a0000200341ff0171220441047621032000417f" - "6a21002004410f4b0d000b200141fd8ec080004102200220006a417f6a41" - "810120006b10d58080800021000c010b024002400240024020002d000022" - "0341e400490d002002200341e4006e2204419c7f6c20036a41ff01714101" - "7441ff8ec080006a2f00003b0001410021000c010b410221002003410a4f" - "0d01200321040b200220006a20044130723a00000c010b41012100200220" - "0341017441ff8ec080006a2f00003b00010b200141014100200220006a20" - "0041037310d58080800021000b20024180016a24808080800020000bb605" - "01087f20002802142205410171220620046a21070240024020054104710d" - "00410021010c010b0240024020020d00410021080c010b02402002410371" - "22090d000c010b410021082001210a03402008200a2c000041bf7f4a6a21" - "08200a41016a210a2009417f6a22090d000b0b200820076a21070b412b41" - "8080c40020061b2106024020002802000d000240200028021c220a200028" - "0220220820062001200210f480808000450d0041010f0b200a2003200420" - "0828020c11808080800080808080000f0b02400240024002402000280204" - "220a20074b0d00200028021c220a2000280220220820062001200210f480" - "808000450d0141010f0b2005410871450d01200028021021052000413036" - "021020002d0018210b4101210c200041013a0018200028021c2208200028" - "0220220920062001200210f4808080000d02200a20076b41016a210a0240" - "0340200a417f6a220a450d01200841302009280210118180808000808080" - "8000450d000b41010f0b0240200820032004200928020c11808080800080" - "80808000450d0041010f0b2000200b3a00182000200536021041000f0b20" - "0a20032004200828020c1180808080008080808000210c0c010b200a2007" - "6b2105024002400240410120002d0018220a200a4103461b220a0e030200" - "01020b2005210a410021050c010b2005410176210a200541016a41017621" - "050b200a41016a210a2000280210210720002802202108200028021c2109" - "02400340200a417f6a220a450d0120092007200828021011818080800080" - "80808000450d000b41010f0b4101210c2009200820062001200210f48080" - "80000d00200920032004200828020c11808080800080808080000d004100" - "210a034002402005200a470d0020052005490f0b200a41016a210a200920" - "0720082802101181808080008080808000450d000b200a417f6a2005490f" - "0b200c0be802010d7e2000200129032822022001290300220342d5aa8180" - "8080c080c6007c2204200354ad427f7c22052005200129030822067c2205" - "200654ad7c2005428180b0f5948080aa617c2207200554ad7c427f7c423f" - "8722052005200129031022087c2205200854ad7c200542dc93bccaf0abcb" - "e7987f7c2209200554ad7c427f7c423f87220520052001290318220a7c22" - "05200a54ad7c200542c1daebe3b08fadc49b7f7c220b200554ad7c427f7c" - "423f87220520052001290320220c7c2205200c54ad7c200542a9a6d1e59b" - "8996f2b47f7c220d200554ad7c427f7c423f872205200220057c22052002" - "54ad7c200542e6b280b4dcc2bbff657c220e200554ad7c2205427f7c2202" - "83420020057d2205200e83843703282000200c2002832005200d83843703" - "202000200a2002832005200b838437031820002008200283200520098384" - "370310200020062002832005200783843703082000200320028320052004" - "83843703000b2c0002402002450d0041002d00e893c080001a200210ce80" - "80800021010b20002002360204200020013602000b5a01017f2380808080" - "0041106b2202248080808000200241086a20002000280200410141a00210" - "8b80808000024020022802082200418180808078460d002000200228020c" - "2001108c80808000000b200241106a2480808080000b4800200020012002" - "200310b080808000200041e0006a200141e0006a200241e0006a200310b0" - "80808000200020022d00c00120012d00c001220273410020036b71200273" - "3a00c0010b2b00200020012002200310b080808000200020022d00602001" - "2d0060220273410020036b712002733a00600b8501002000290300200129" - "030010d1808080002000290308200129030810d1808080007110a3808080" - "002000290310200129031010d1808080007110a380808000200029031820" - "0129031810d1808080007110a3808080002000290320200129032010d180" - "8080007110a3808080002000290328200129032810d1808080007110a380" - "8080000bda0602017f067e23808080800041306b22022480808080002002" - "2001290000220342388620034280fe0383422886842003428080fc078342" - "1886200342808080f80f834208868484200342088842808080f80f832003" - "421888428080fc07838420034228884280fe038320034238888484842204" - "37032820022001290008220342388620034280fe03834228868420034280" - "80fc0783421886200342808080f80f834208868484200342088842808080" - "f80f832003421888428080fc07838420034228884280fe03832003423888" - "848484220537032020022001290010220342388620034280fe0383422886" - "842003428080fc0783421886200342808080f80f83420886848420034208" - "8842808080f80f832003421888428080fc07838420034228884280fe0383" - "2003423888848484220637031820022001290018220342388620034280fe" - "0383422886842003428080fc0783421886200342808080f80f8342088684" - "84200342088842808080f80f832003421888428080fc0783842003422888" - "4280fe038320034238888484842207370310200220012900202203423886" - "20034280fe0383422886842003428080fc0783421886200342808080f80f" - "834208868484200342088842808080f80f832003421888428080fc078384" - "20034228884280fe03832003423888848484220837030820022001290028" - "220342388620034280fe0383422886842003428080fc0783421886200342" - "808080f80f834208868484200342088842808080f80f8320034218884280" - "80fc07838420034228884280fe0383200342388884848422033703002002" - "419087c0800010dd80808000200342d5aa81808080c080c6007c200354ad" - "427f7c2203200820037c2203200854ad7c2003428180b0f5948080aa617c" - "200354ad7c427f7c423f872203200720037c2203200754ad7c200342dc93" - "bccaf0abcbe7987f7c200354ad7c427f7c423f872203200620037c220320" - "0654ad7c200342c1daebe3b08fadc49b7f7c200354ad7c427f7c423f8722" - "03200520037c2203200554ad7c200342a9a6d1e59b8996f2b47f7c200354" - "ad7c427f7c423f872203200420037c2203200454ad7c200342e6b280b4dc" - "c2bbff657c200354ad7ca741016a41017110a38080800021012000200241" - "3010868180800020013a0030200241306a2480808080000b3901017f2380" - "8080800041306b220224808080800020022000200110a780808000200020" - "0241301086818080001a200241306a2480808080000b9b1602017f177e23" - "808080800041a0056b2201248080808000200141b0046a20002903002202" - "42fdfff3ffcffffff9897f7e2203420042abd5feffffffbfffb97f420010" - "8781808000200141a0046a2003420042ffffcf8aebffffd51e4200108781" - "80800020014190046a2003420042a4ecc3b58fd4b498e700420010878180" - "800020014180046a2003420042bfa5949ccff0d2bbe40042001087818080" - "00200141f0036a2003420042d7d9ae9ae4f6e98dcb004200108781808000" - "200141e0036a20034200429acdffcba3bdc4801a42001087818080002001" - "41d0036a20012903a004220420002903087c2205200141b0046a41086a29" - "0300200220012903b00422037c200354ad7c7c220242fdfff3ffcffffff9" - "897f7e2203420042abd5feffffffbfffb97f4200108781808000200141c0" - "036a2003420042ffffcf8aebffffd51e4200108781808000200141d0026a" - "2003420042a4ecc3b58fd4b498e7004200108781808000200141e0016a20" - "03420042bfa5949ccff0d2bbe4004200108781808000200141f0006a2003" - "420042d7d9ae9ae4f6e98dcb004200108781808000200120034200429acd" - "ffcba3bdc4801a4200108781808000200141b0036a20012903c003220620" - "0129039004220720002903107c2208200141a0046a41086a290300200520" - "0454ad7c2002200554ad7c7c22097c2205200141d0036a41086a29030020" - "012903d003220320027c200354ad7c7c220242fdfff3ffcffffff9897f7e" - "2203420042abd5feffffffbfffb97f4200108781808000200141a0036a20" - "03420042ffffcf8aebffffd51e420010878180800020014190036a200342" - "0042a4ecc3b58fd4b498e700420010878180800020014180036a20034200" - "42bfa5949ccff0d2bbe4004200108781808000200141f0026a2003420042" - "d7d9ae9ae4f6e98dcb004200108781808000200141e0026a20034200429a" - "cdffcba3bdc4801a4200108781808000200141c0026a20012903a003220a" - "200129038004220b20002903187c220420014190046a41086a2903002008" - "200754ad7c2009200854ad7c7c220820012903d0027c2207200141c0036a" - "41086a2903002005200654ad7c2002200554ad7c7c220c7c2205200141b0" - "036a41086a29030020012903b003220320027c200354ad7c7c220242fdff" - "f3ffcffffff9897f7e2203420042abd5feffffffbfffb97f420010878180" - "8000200141b0026a2003420042ffffcf8aebffffd51e4200108781808000" - "200141a0026a2003420042a4ecc3b58fd4b498e700420010878180800020" - "014190026a2003420042bfa5949ccff0d2bbe40042001087818080002001" - "4180026a2003420042d7d9ae9ae4f6e98dcb004200108781808000200141" - "f0016a20034200429acdffcba3bdc4801a4200108781808000200141d001" - "6a20012903b002220d20012903f003220e20002903207c22062001418004" - "6a41086a2903002004200b54ad7c2008200454ad7c7c220420012903e001" - "7c2209200141d0026a41086a2903002007200854ad7c200c200754ad7c7c" - "22082001290390037c2207200141a0036a41086a2903002005200a54ad7c" - "2002200554ad7c7c220c7c2205200141c0026a41086a29030020012903c0" - "02220320027c200354ad7c7c220242fdfff3ffcffffff9897f7e22034200" - "42abd5feffffffbfffb97f4200108781808000200141c0016a2003420042" - "ffffcf8aebffffd51e4200108781808000200141b0016a2003420042a4ec" - "c3b58fd4b498e7004200108781808000200141a0016a2003420042bfa594" - "9ccff0d2bbe400420010878180800020014190016a2003420042d7d9ae9a" - "e4f6e98dcb00420010878180800020014180016a20034200429acdffcba3" - "bdc4801a4200108781808000200141e0006a20012903c001220f20012903" - "e003221020002903287c220a200141f0036a41086a2903002006200e54ad" - "7c2004200654ad7c7c220620012903707c220b200141e0016a41086a2903" - "002009200454ad7c2008200954ad7c7c22042001290380037c2209200141" - "90036a41086a2903002007200854ad7c200c200754ad7c7c220820012903" - "a0027c2207200141b0026a41086a2903002005200d54ad7c2002200554ad" - "7c7c220c7c2205200141d0016a41086a29030020012903d001220320027c" - "200354ad7c7c220242fdfff3ffcffffff9897f7e2203420042abd5feffff" - "ffbfffb97f4200108781808000200141d0006a2003420042ffffcf8aebff" - "ffd51e4200108781808000200141c0006a2003420042a4ecc3b58fd4b498" - "e7004200108781808000200141306a2003420042bfa5949ccff0d2bbe400" - "4200108781808000200141206a2003420042d7d9ae9ae4f6e98dcb004200" - "108781808000200141106a20034200429acdffcba3bdc4801a4200108781" - "808000200141b0016a41086a290300210d20014190026a41086a29030021" - "0e200141f0026a41086a2903002111200141086a290300211220012903e0" - "022113200129038002211420012903a001211520012903402116200141c0" - "006a41086a2903002117200120012903502218200141e0036a41086a2903" - "00200a201054ad7c2006200a54ad7c221020012903007c2203200141f000" - "6a41086a290300200b200654ad7c2004200b54ad7c7c220620012903f002" - "7c220a20014180036a41086a2903002009200454ad7c2008200954ad7c7c" - "22042001290390027c2209200141a0026a41086a2903002007200854ad7c" - "200c200754ad7c7c220820012903b0017c2207200141c0016a41086a2903" - "002005200f54ad7c2002200554ad7c7c220b7c2205200141e0006a41086a" - "2903002001290360220c20027c200c54ad7c7c220c3703f0042001201620" - "152014201320122003201054ad7c2006200354ad7c220f7c22032011200a" - "200654ad7c2004200a54ad7c7c22027c2206200e2009200454ad7c200820" - "0954ad7c7c22047c2209200d2007200854ad7c200b200754ad7c7c22087c" - "2207200141d0006a41086a2903002005201854ad7c200c200554ad7c7c22" - "0a3703f8042001200141e0026a41086a2903002003200f54ad7c20022003" - "54ad7c220b20012903f0017c220320014180026a41086a29030020062002" - "54ad7c2004200654ad7c7c22052001290390017c2202200141a0016a4108" - "6a2903002009200454ad7c2008200954ad7c7c220420012903307c220620" - "172007200854ad7c200a200754ad7c7c2208370380052001200141f0016a" - "41086a2903002003200b54ad7c2005200354ad7c22072001290380017c22" - "0320014190016a41086a2903002002200554ad7c2004200254ad7c7c2205" - "20012903207c2202200141306a41086a2903002006200454ad7c20082006" - "54ad7c7c220837038805200120014180016a41086a2903002003200754ad" - "7c2005200354ad7c220420012903107c2203200141206a41086a29030020" - "02200554ad7c2008200254ad7c7c2205370390052001200141106a41086a" - "2903002003200454ad7c2005200354ad7c37039805200141c0046a200141" - "f0046a10d68080800020012903c004220342aad580808080a080237c2003" - "54ad427f7c2203200320012903c80422057c2203200554ad7c2003428180" - "d8ba8a8080d5707c200354ad7c427f7c423f872203200320012903d00422" - "057c2203200554ad7c200342ee899ea5f8d5e5b3cc007c200354ad7c427f" - "7c423f872203200320012903d80422057c2203200554ad7c200342a1edf5" - "b1d8c796e2cd007c200354ad7c427f7c423f872203200320012903e00422" - "057c2203200554ad7c20034295d3e8f2cd848bb95a7c200354ad7c427f7c" - "423f872203200320012903e80422057c2203200554ad7c200342b399809a" - "aee1ddff727c200354ad7ca741016a41017110a38080800010d280808000" - "2100200141a0056a24808080800020000bb60103037f017e017f23808080" - "800041e0006b2203248080808000200341e086c080004130108681808000" - "2104200241306a21050240034020052002460d01200541786a2205290300" - "2106413f210303402003417f460d01200441306a200410bd808080002004" - "200441306a41301086818080002107024020062003413f71ad8842018350" - "0d002007200110dd808080000b2003417f6a21030c000b0b0b2000200441" - "301086818080001a200441e0006a2480808080000b1c00200010a9808080" - "00200041306a10a9808080007110a3808080000bf50706027f067e027f01" - "7e017f027e23808080800041f0016b220324808080800041002104420021" - "05420021064200210742002108420021094200210a02400340200441054b" - "0d01200420044106496a210b200120044103746a210c4200210d41a07f21" - "0e02400340200e450d01200341b0016a2002200e6a220441e0006a290300" - "4200200c200e6a41e0006a290300220f4200108781808000200341a0016a" - "200441e8006a2903004200200f420010878180800020034190016a200441" - "f0006a2903004200200f420010878180800020034180016a200441f8006a" - "2903004200200f4200108781808000200341f0006a20044180016a290300" - "4200200f4200108781808000200341e0006a20044188016a290300420020" - "0f4200108781808000200d200341e0006a41086a29030020032903602210" - "200a7c220f201054ad7c200f200341f0006a41086a290300200329037022" - "1020097c220a201054ad7c200a20034180016a41086a2903002003290380" - "01221020087c2209201054ad7c200920034190016a41086a290300200329" - "039001221020077c2208201054ad7c2008200341a0016a41086a29030020" - "032903a001221020067c2207201054ad7c2007200341b0016a41086a2903" - "0020032903b001220620057c2205200654ad7c7c2206200754ad7c7c2207" - "200854ad7c7c2208200954ad7c7c2209200a54ad7c7c220a200f54ad7c7c" - "210d200e41306a210e0c000b0b200341d0006a200542fdfff3ffcffffff9" - "897f7e220f420042abd5feffffffbfffb97f4200108781808000200341c0" - "006a200f420042ffffcf8aebffffd51e4200108781808000200341306a20" - "0f420042a4ecc3b58fd4b498e7004200108781808000200341206a200f42" - "0042bfa5949ccff0d2bbe4004200108781808000200341106a200f420042" - "d7d9ae9ae4f6e98dcb0042001087818080002003200f4200429acdffcba3" - "bdc4801a4200108781808000200d200341086a2903002003290300221020" - "0a7c220f201054ad7c200f200341106a41086a2903002003290310221020" - "097c220a201054ad7c200a200341206a41086a2903002003290320221020" - "087c2209201054ad7c2009200341306a41086a2903002003290330221020" - "077c2208201054ad7c2008200341c0006a41086a29030020032903402210" - "20067c2207201054ad7c2007200341d0006a41086a290300200329035022" - "0620057c200654ad7c7c2205200754ad7c7c2206200854ad7c7c22072009" - "54ad7c7c2208200a54ad7c7c2209200f54ad7c7c210a200b21040c000b0b" - "2003200a3703e801200320093703e001200320083703d801200320073703" - "d001200320063703c801200320053703c0012000200341c0016a10d68080" - "8000200341f0016a2480808080000b1c002000200110b280808000200041" - "306a200141306a10b2808080000be20103037f017e017f23808080800041" - "c0016b2203248080808000200341306a410041301085818080001a200341" - "e086c0800041301086818080002104200241306a21050240034020052002" - "460d01200541786a22052903002106413f210303402003417f460d012004" - "41e0006a200410ba808080002004200441e0006a41e00010868180800021" - "07024020062003413f71ad88420183500d00200741e0006a2007200110b3" - "808080002007200741e0006a41e0001086818080001a0b2003417f6a2103" - "0c000b0b0b2000200441e0001086818080001a200441c0016a2480808080" - "000b900202017f017e23808080800041b0036b2202248080808000200241" - "004130108581808000220241e0006a410041301085818080001a20024130" - "6a41e086c0800041301086818080001a20024190016a2001419001108681" - "8080001a42808082808080a080e90021030240034020034200510d012002" - "41a0026a20024190016a10c68080800020024190016a200241a0026a4190" - "011086818080001a02402003420183500d00200241a0026a200220024190" - "016a10c7808080002002200241a0026a4190011086818080001a0b200342" - "018821030c000b0b200241a0026a200210e58080800020002002200241a0" - "026a41900110868180800022024190011086818080001a200241b0036a24" - "80808080000b3400200041306a200141306a10b280808000200041e0006a" - "200141e0006a41301086818080001a2000200141301086818080001a0b6b" - "01037f23808080800041106b22022480808080000240024020012802000d" - "00410021030c010b200241086a200110d0808080004101210320022d0009" - "210420022d00080d0041002103200141003602000b200020043a00012000" - "20033a0000200241106a2480808080000b7501027f23808080800041e000" - "6b2201248080808000200141306a410041301085818080001a200141e086" - "c0800041301086818080002101410110a38080800021022000410041e000" - "108581808000220041e0006a200141e0001086818080001a200020023a00" - "c001200141e0006a2480808080000b920101017f23808080800041c0016b" - "2202248080808000200041e0006a200141e0006a41e0001086818080001a" - "200241306a410041301085818080001a200241e086c08000413010868180" - "8000220241e0006a410041e0001085818080001a200041c0016a20022002" - "41e0006a20012d00c00110b0808080002000200141e0001086818080001a" - "200241c0016a2480808080000baa0201047f23808080800041e0036b2204" - "24808080800020042001200210b380808000200441e0006a200141e0006a" - "2205200310b38080800020044180036a200141c0016a2206200310b38080" - "8000200441a0026a20044180036a20044180036a41306a220710b8808080" - "00200441a0026a41306a20044180036a200710b9808080002000200441a0" - "026a200410bc80808000200441a0026a2002200310bc8080800020044180" - "036a2001200510bc80808000200441c0016a200441a0026a20044180036a" - "10b38080800020044180036a200441c0016a200410bb80808000200041e0" - "006a20044180036a200441e0006a10bb8080800020044180036a20062002" - "10b380808000200041c0016a20044180036a200441e0006a10bc80808000" - "200441e0036a2480808080000bf50706027f067e027f017e017f027e2380" - "8080800041f0016b22032480808080004100210442002105420021064200" - "210742002108420021094200210a02400340200441054b0d012004200441" - "06496a210b200120044103746a210c4200210d41e07d210e02400340200e" - "450d01200341b0016a2002200e6a220441a0026a2903004200200c200e6a" - "41a0026a290300220f4200108781808000200341a0016a200441a8026a29" - "03004200200f420010878180800020034190016a200441b0026a29030042" - "00200f420010878180800020034180016a200441b8026a2903004200200f" - "4200108781808000200341f0006a200441c0026a2903004200200f420010" - "8781808000200341e0006a200441c8026a2903004200200f420010878180" - "8000200d200341e0006a41086a29030020032903602210200a7c220f2010" - "54ad7c200f200341f0006a41086a2903002003290370221020097c220a20" - "1054ad7c200a20034180016a41086a290300200329038001221020087c22" - "09201054ad7c200920034190016a41086a29030020032903900122102007" - "7c2208201054ad7c2008200341a0016a41086a29030020032903a0012210" - "20067c2207201054ad7c2007200341b0016a41086a29030020032903b001" - "220620057c2205200654ad7c7c2206200754ad7c7c2207200854ad7c7c22" - "08200954ad7c7c2209200a54ad7c7c220a200f54ad7c7c210d200e41306a" - "210e0c000b0b200341d0006a200542fdfff3ffcffffff9897f7e220f4200" - "42abd5feffffffbfffb97f4200108781808000200341c0006a200f420042" - "ffffcf8aebffffd51e4200108781808000200341306a200f420042a4ecc3" - "b58fd4b498e7004200108781808000200341206a200f420042bfa5949ccf" - "f0d2bbe4004200108781808000200341106a200f420042d7d9ae9ae4f6e9" - "8dcb0042001087818080002003200f4200429acdffcba3bdc4801a420010" - "8781808000200d200341086a29030020032903002210200a7c220f201054" - "ad7c200f200341106a41086a2903002003290310221020097c220a201054" - "ad7c200a200341206a41086a2903002003290320221020087c2209201054" - "ad7c2009200341306a41086a2903002003290330221020077c2208201054" - "ad7c2008200341c0006a41086a2903002003290340221020067c22072010" - "54ad7c2007200341d0006a41086a2903002003290350220620057c200654" - "ad7c7c2205200754ad7c7c2206200854ad7c7c2207200954ad7c7c220820" - "0a54ad7c7c2209200f54ad7c7c210a200b21040c000b0b2003200a3703e8" - "01200320093703e001200320083703d801200320073703d0012003200637" - "03c801200320053703c0012000200341c0016a10d680808000200341f001" - "6a2480808080000bdc0101027f2380808080004180036b22032480808080" - "002003200110ba80808000200341e0006a200210ba80808000200341c001" - "6a200341e0006a200341e0006a41306a220410b880808000200341c0016a" - "41306a200341e0006a200410b9808080002000200341c0016a200310bc80" - "808000200341c0016a2001200210bc80808000200341a0026a200341c001" - "6a10ba80808000200341c0016a200341a0026a41e0001086818080001a20" - "0341c0016a200310ec80808000200041e0006a200341c0016a200341e000" - "6a10bb8080800020034180036a2480808080000b3c01017f238080808000" - "41e0006b220224808080800020022000200110bb808080002000200241e0" - "001086818080001a200241e0006a2480808080000b9f0701037f23808080" - "800041a0116b2201248080808000200141a0026a200010ba808080002001" - "4180036a200041e0006a220210ba80808000200141e0036a20014180036a" - "10ba80808000200141c0106a20014180036a200010bc80808000200141e0" - "0f6a200141c0106a10ba80808000200141800f6a200141e00f6a200141a0" - "026a10bb80808000200141c0046a200141800f6a200141e0036a10bb8080" - "8000200141a0056a200141c0046a200141c0046a10bc80808000200141c0" - "106a200141a0026a200141a0026a10bc8080800020014180066a200141c0" - "106a200141a0026a10bc80808000200141e0066a200020014180066a10bc" - "80808000200141c0076a20014180066a10ba80808000200141a0086a2000" - "41c0016a220310ba80808000200141c0106a200141c0076a200141a0056a" - "10bb80808000200141e00f6a200141c0106a200141a0056a10bb80808000" - "2000200141e00f6a41e0001086818080002100200141c0106a2003200210" - "bc80808000200141e00f6a200141c0106a10ba80808000200141800f6a20" - "0141e00f6a20014180036a10bb80808000200141e00f6a200141800f6a20" - "0141a0086a10bb808080002003200141e00f6a41e0001086818080002103" - "200141c0106a200141a0056a200010bb80808000200141e00f6a200141c0" - "106a20014180066a10b3808080002002200141e00f6a41e0001086818080" - "00210220014180096a200141e0036a200141e0036a10bc80808000200141" - "e0096a20014180096a20014180096a10bc80808000200141c00a6a200141" - "e0096a200141e0096a10bc808080002002200141c00a6a10ec8080800020" - "0141a00b6a20014180066a200141a0086a10b380808000200141800c6a20" - "0141a00b6a200141a00b6a10bc80808000200141e00c6a200141800c6a10" - "e280808000200141c0106a200141e0066a10ba80808000200141e00f6a20" - "0141c0106a200141a0026a10bb80808000200141c00d6a200141e00f6a20" - "0141c0076a10bb80808000200141a00e6a20014180036a20014180036a10" - "bc80808000200141800f6a200141a00e6a200141a00e6a10bc8080800020" - "0141e00f6a200141c00d6a200141800f6a10bb80808000200141c0106a20" - "03200141a0086a10b3808080002001200141c0106a200141c0106a10bc80" - "808000200141e0006a200141e00c6a41e0001086818080001a200141c001" - "6a200141e00f6a41e0001086818080001a200041e8036a200141ac8cc080" - "0010ee80808000200141a0116a2480808080000b4201017f024020002802" - "0822032000280200470d002000200210d8808080000b2000280204200341" - "a0026c6a200141a0021086818080001a2000200341016a3602080b4c0101" - "7f23808080800041106b2202248080808000200241988cc0800036020c20" - "022000360208200241086a41b08dc080002002410c6a41b08dc080002001" - "419c8cc0800010d380808000000b7902017f017e23808080800041306b22" - "0324808080800020032001360204200320003602002003410236020c2003" - "41a08dc08000360208200342023702142003418580808000ad4220862204" - "2003ad8437032820032004200341046aad843703202003200341206a3602" - "10200341086a200210a480808000000b0f002000280200200110f2808080" - "000be10201067f23808080800041106b2202248080808000410a21030240" - "024020004190ce004f0d00200021040c010b410a21030340200241066a20" - "036a2205417c6a20004190ce006e220441f0b1036c20006a220641ffff03" - "7141e4006e220741017441ff8ec080006a2f00003b00002005417e6a2007" - "419c7f6c20066a41ffff037141017441ff8ec080006a2f00003b00002003" - "417c6a2103200041ffc1d72f4b21052004210020050d000b0b0240024020" - "0441e3004b0d00200421000c010b200241066a2003417e6a22036a200441" - "ffff037141e4006e2200419c7f6c20046a41ffff037141017441ff8ec080" - "006a2f00003b00000b024002402000410a490d00200241066a2003417e6a" - "22036a200041017441ff8ec080006a2f00003b00000c010b200241066a20" - "03417f6a22036a20004130723a00000b200141014100200241066a20036a" - "410a20036b10d5808080002100200241106a24808080800020000b380201" - "7f017e23808080800041106b220124808080800020002902002102200120" - "0036020c20012002370204200141046a108181808000000b490002402002" - "418080c400460d002000200220012802101181808080008080808000450d" - "0041010f0b024020030d0041000f0b200020032004200128020c11808080" - "800080808080000b7902017f017e23808080800041306b22032480808080" - "0020032001360204200320003602002003410236020c2003419c91c08000" - "360208200342023702142003418580808000ad4220862204200341046aad" - "84370328200320042003ad843703202003200341206a360210200341086a" - "200210a480808000000b1c0020002802002001200028020428020c118180" - "80800080808080000b14002001200028020020002802041092808080000b" - "1400200128021c2001280220200010f9808080000bbb05010a7f23808080" - "800041306b22032480808080002003200136022c20032000360228200341" - "033a00242003422037021c41002104200341003602142003410036020c02" - "400240024002400240200228021022050d00200228020c2200450d012002" - "280208220120004103746a21062000417f6a41ffffffff017141016a2104" - "2002280200210003400240200041046a2802002207450d00200328022820" - "002802002007200328022c28020c11808080800080808080000d040b2001" - "2802002003410c6a200141046a28020011818080800080808080000d0320" - "0041086a2100200141086a22012006470d000c020b0b2002280214220145" - "0d00200141057421082001417f6a41ffffff3f7141016a21042002280208" - "2109200228020021004100210703400240200041046a2802002201450d00" - "200328022820002802002001200328022c28020c11808080800080808080" - "000d030b2003200520076a220141106a28020036021c20032001411c6a2d" - "00003a00242003200141186a2802003602202001410c6a28020021064100" - "210a4100210b024002400240200141086a2802000e03010002010b200641" - "0374210c4100210b2009200c6a220c2802000d01200c28020421060b4101" - "210b0b200320063602102003200b36020c200141046a2802002106024002" - "40024020012802000e03010002010b2006410374210b2009200b6a220b28" - "02000d01200b28020421060b4101210a0b200320063602182003200a3602" - "142009200141146a2802004103746a22012802002003410c6a200141046a" - "28020011818080800080808080000d02200041086a21002008200741206a" - "2207470d000b0b200420022802044f0d0120032802282002280200200441" - "03746a22012802002001280204200328022c28020c118080808000808080" - "8000450d010b410121010c010b410021010b200341306a24808080800020" - "010b6001027f20002802042102200028020021030240200028020822002d" - "0000450d00200341f48ec080004104200228020c11808080800080808080" - "00450d0041010f0b20002001410a463a0000200320012002280210118180" - "80800080808080000b1200200041dc8ec08000200110f9808080000b7902" - "017f017e23808080800041306b2203248080808000200320013602042003" - "20003602002003410236020c200341d091c0800036020820034202370214" - "2003418580808000ad4220862204200341046aad84370328200320042003" - "ad843703202003200341206a360210200341086a200210a480808000000b" - "ab0201037f2380808080004180016b220224808080800020002802002100" - "024002400240200128021422034110710d0020034120710d012000280200" - "200110f28080800021000c020b2000280200210041810121030340200220" - "036a417e6a2000410f712204413072200441d7006a2004410a491b3a0000" - "2003417f6a21032000410f4b21042000410476210020040d000b200141fd" - "8ec080004102200220036a417f6a41810120036b10d58080800021000c01" - "0b2000280200210041810121030340200220036a417e6a2000410f712204" - "413072200441376a2004410a491b3a00002003417f6a21032000410f4b21" - "042000410476210020040d000b200141fd8ec080004102200220036a417f" - "6a41810120036b10d58080800021000b20024180016a2480808080002000" - "0b0900200041003602000b990101027f23808080800041106b2204248080" - "808000410041002802f093c08000220541016a3602f093c0800002402005" - "4100480d000240024041002d00bc97c080000d00410041002802b897c080" - "0041016a3602b897c0800041002802ec93c08000417f4a0d010c020b2004" - "41086a200020011182808080008080808000000b410041003a00bc97c080" - "002002450d00108081808000000b000b0300000b0b002000108281808000" - "000bba0101037f23808080800041106b2201248080808000200028020022" - "0228020c2103024002400240024020022802040e020001020b20030d0141" - "012102410021030c020b20030d0020022802002202280204210320022802" - "0021020c010b20014180808080783602002001200036020c200141868080" - "8000200028020822002d000820002d000910ff80808000000b2001200336" - "0204200120023602002001418780808000200028020822002d000820002d" - "000910ff80808000000b0c00200020012902003703000bc30201047f411f" - "21020240200141ffffff074b0d002001410620014108766722026b764101" - "7120024101746b413e6a21020b200042003702102000200236021c200241" - "027441f493c080006a21030240410028029097c080004101200274220471" - "0d0020032000360200200020033602182000200036020c20002000360208" - "4100410028029097c0800020047236029097c080000f0b02400240024020" - "0328020022042802044178712001470d00200421020c010b200141004119" - "20024101766b2002411f461b742103034020042003411d764104716a4110" - "6a22052802002202450d0220034101742103200221042002280204417871" - "2001470d000b0b20022802082203200036020c2002200036020820004100" - "3602182000200236020c200020033602080f0b2005200036020020002004" - "3602182000200036020c200020003602080baa0301057f02400240200241" - "104f0d00200021030c010b02402000410020006b41037122046a22052000" - "4d0d002004417f6a21062000210302402004450d00200421072000210303" - "40200320013a0000200341016a21032007417f6a22070d000b0b20064107" - "490d000340200320013a0000200341076a20013a0000200341066a20013a" - "0000200341056a20013a0000200341046a20013a0000200341036a20013a" - "0000200341026a20013a0000200341016a20013a0000200341086a220320" - "05470d000b0b024020052005200220046b2202417c716a22034f0d002001" - "41ff017141818284086c2107034020052007360200200541046a22052003" - "490d000b0b200241037121020b02402003200320026a22074f0d00200241" - "7f6a2104024020024107712205450d000340200320013a0000200341016a" - "21032005417f6a22050d000b0b20044107490d000340200320013a000020" - "0341076a20013a0000200341066a20013a0000200341056a20013a000020" - "0341046a20013a0000200341036a20013a0000200341026a20013a000020" - "0341016a20013a0000200341086a22032007470d000b0b20000ba5050108" - "7f02400240200241104f0d00200021030c010b02402000410020006b4103" - "7122046a220520004d0d002004417f6a2106200021032001210702402004" - "450d002004210820002103200121070340200320072d00003a0000200741" - "016a2107200341016a21032008417f6a22080d000b0b20064107490d0003" - "40200320072d00003a0000200341016a200741016a2d00003a0000200341" - "026a200741026a2d00003a0000200341036a200741036a2d00003a000020" - "0341046a200741046a2d00003a0000200341056a200741056a2d00003a00" - "00200341066a200741066a2d00003a0000200341076a200741076a2d0000" - "3a0000200741086a2107200341086a22032005470d000b0b200520022004" - "6b2208417c7122066a210302400240200120046a22074103710d00200520" - "034f0d0120072101034020052001280200360200200141046a2101200541" - "046a22052003490d000c020b0b200520034f0d0020074103742202411871" - "21042007417c71220941046a2101410020026b411871210a200928020021" - "0203402005200220047620012802002202200a7472360200200141046a21" - "01200541046a22052003490d000b0b20084103712102200720066a21010b" - "02402003200320026a22054f0d002002417f6a2108024020024107712207" - "450d000340200320012d00003a0000200141016a2101200341016a210320" - "07417f6a22070d000b0b20084107490d000340200320012d00003a000020" - "0341016a200141016a2d00003a0000200341026a200141026a2d00003a00" - "00200341036a200141036a2d00003a0000200341046a200141046a2d0000" - "3a0000200341056a200141056a2d00003a0000200341066a200141066a2d" - "00003a0000200341076a200141076a2d00003a0000200141086a21012003" - "41086a22032005470d000b0b20000b6e01067e2000200342ffffffff0f83" - "2205200142ffffffff0f8322067e22072003422088220820067e22062005" - "200142208822097e7c22054220867c220a3703002000200820097e200520" - "0654ad4220862005422088847c200a200754ad7c200420017e200320027e" - "7c7c3703080bea0901087f024002400240200020016b20024f0d00200120" - "026a2103200020026a210420024110490d014100200441037122056b2106" - "02402004417c71220720044f0d002005417f6a21080240024020050d0020" - "0321090c010b2005210a2003210903402004417f6a22042009417f6a2209" - "2d00003a0000200a417f6a220a0d000b0b20084103490d002009417c6a21" - "0903402004417f6a200941036a2d00003a00002004417e6a200941026a2d" - "00003a00002004417d6a200941016a2d00003a00002004417c6a22042009" - "2d00003a00002009417c6a210920072004490d000b0b2007200220056b22" - "09417c7122026b2104410020026b210a02400240200320066a2203410371" - "0d00200420074f0d01200920016a417c6a210103402007417c6a22072001" - "2802003602002001417c6a210120042007490d000c020b0b200420074f0d" - "002003410374220241187121052003417c712208417c6a2101410020026b" - "41187121062008280200210203402007417c6a2207200220067420012802" - "002202200576723602002001417c6a210120042007490d000b0b20094103" - "7121022003200a6a21030c010b02400240200241104f0d00200021040c01" - "0b02402000410020006b410371220a6a220920004d0d00200a417f6a2105" - "20002104200121070240200a450d00200a21032000210420012107034020" - "0420072d00003a0000200741016a2107200441016a21042003417f6a2203" - "0d000b0b20054107490d000340200420072d00003a0000200441016a2007" - "41016a2d00003a0000200441026a200741026a2d00003a0000200441036a" - "200741036a2d00003a0000200441046a200741046a2d00003a0000200441" - "056a200741056a2d00003a0000200441066a200741066a2d00003a000020" - "0441076a200741076a2d00003a0000200741086a2107200441086a220420" - "09470d000b0b20092002200a6b2203417c7122056a210402400240200120" - "0a6a22074103710d00200920044f0d012007210103402009200128020036" - "0200200141046a2101200941046a22092004490d000c020b0b200920044f" - "0d0020074103742202411871210a2007417c71220841046a210141002002" - "6b411871210620082802002102034020092002200a762001280200220220" - "067472360200200141046a2101200941046a22092004490d000b0b200341" - "03712102200720056a21010b2004200420026a22094f0d012002417f6a21" - "03024020024107712207450d000340200420012d00003a0000200141016a" - "2101200441016a21042007417f6a22070d000b0b20034107490d01034020" - "0420012d00003a0000200441016a200141016a2d00003a0000200441026a" - "200141026a2d00003a0000200441036a200141036a2d00003a0000200441" - "046a200141046a2d00003a0000200441056a200141056a2d00003a000020" - "0441066a200141066a2d00003a0000200441076a200141076a2d00003a00" - "00200141086a2101200441086a22042009470d000c020b0b200420026b22" - "0720044f0d002002417f6a2109024020024103712201450d000340200441" - "7f6a22042003417f6a22032d00003a00002001417f6a22010d000b0b2009" - "4103490d002003417c6a210103402004417f6a200141036a2d00003a0000" - "2004417e6a200141026a2d00003a00002004417d6a200141016a2d00003a" - "00002004417c6a220420012d00003a00002001417c6a210120072004490d" - "000b0b20000b0e002000200120021088818080000b0bf2130100418080c0" - "000be8132f72757374632f34656231363132353065333430633866343866" - "3636653262393239656634613562656437633138312f6c6962726172792f" - "636f72652f7372632f697465722f7472616974732f6974657261746f722e" - "72730000100058000000b307000009000000000000000000000001000000" - "0800000063616c6c65642060526573756c743a3a756e7772617028296020" - "6f6e20616e2060457272602076616c75652f72757374632f346562313631" - "323530653334306338663438663636653262393239656634613562656437" - "633138312f6c6962726172792f616c6c6f632f7372632f736c6963652e72" - "73000000a30010004a000000a10000001900000054727946726f6d536c69" - "63654572726f720000000100000000000000d80210005e000000b4020000" - "090000002f72757374632f34656231363132353065333430633866343866" - "3636653262393239656634613562656437633138312f6c6962726172792f" - "636f72652f7372632f736c6963652f697465722e727300002c0110004e00" - "0000f6050000150000007372632f6c69622e727300008c0110000a000000" - "1f000000160000008c0110000a00000028000000310000008c0110000a00" - "000028000000440000004661696c656420746f20646573657269616c697a" - "6520766b8c0110000a0000002f000000310000008c0110000a0000002f00" - "0000440000008c0110000a000000620000001f0000008c0110000a000000" - "630000000a0000008c0110000a00000064000000170000008c0110000a00" - "0000650000000a0000008c0110000a00000066000000170000008c011000" - "0a000000670000000a0000004661696c656420746f20646573657269616c" - "697a6520614661696c656420746f20646573657269616c697a6520624661" - "696c656420746f20646573657269616c697a652063496e76616c69642062" - "7974657320666f72205363616c61726361706163697479206f766572666c" - "6f770000bd021000110000002f686f6d652f6f706964736b6f706e79692f" - "2e636172676f2f72656769737472792f7372632f696e6465782e63726174" - "65732e696f2d313934396366386336623562353537662f737562746c652d" - "322e362e312f7372632f6c69622e72730000000000000400000004000000" - "0900000001000000d80210005e000000bd0200000900000000000000fdff" - "02000000097602000cc40b00f4ebba58c7535798485f455752705358ce77" - "6dec56a2971a075c93e480fac35ef6154617341c341fdff4f104d109a6e6" - "760ad5b6954c6c47e58dc0839d93a988eb672d9519b5853e799aaae3ca92" - "e58f9811abeaffffffbf7feeffff54acffffaa07893dac3da834ccd9af44" - "e13ce1d21dd935ebd290ede9c692a6f95f8e7a448006a9aafffffffffeb9" - "ffff53b1feffab1e24f6b0f6a0d23067bf1285f3844b7764d7ac4b43b6a7" - "1b4b9ae67f39ea11011aaaeaffffffbf7feeffff54acffffaa07893dac3d" - "a834ccd9af44e13ce1d21dd935ebd290ede9c692a6f95f8e7a44800655d5" - "ffffff7fffdcffffa958ffff550f127b587b506998b35f89c279c2a53bb2" - "6bd6a521dbd38d254df3bf1cf588000df3ff0c00000027aa0a0034fc3200" - "cc537f800a6b7ae98f47d724bae6be7ed3b12fab78bf3b73c98e7ede833d" - "5145d609e8648a791b36f1302a5ace7eabddb8f3f77715c63acaa8169b02" - "fd74f82f6ac26e1c706066b7363660611b24aba41b05f3ff0c00000027aa" - "0a0034fc3200cc537f800a6b7ae98f47d724bae6be7ed3b12fab78bf3b73" - "c98e7ede833d5145d609f3ff0c00000027aa0a0034fc3200cc537f800a6b" - "7ae98f47d724bae6be7ed3b12fab78bf3b73c98e7ede833d5145d6092e55" - "270000007644200048439a00b8dc598b6e4acee97e6fc65ba9c0b73003b1" - "b7541efbfcb14061e1b40b7f09be81032e55270000007644200048439a00" - "b8dc598b6e4acee97e6fc65ba9c0b73003b1b7541efbfcb14061e1b40b7f" - "09be81032f686f6d652f6f706964736b6f706e79692f2e636172676f2f72" - "656769737472792f7372632f696e6465782e6372617465732e696f2d3139" - "34396366386336623562353537662f626c7331325f3338312d302e382e30" - "2f7372632f70616972696e67732e72730000a00510006600000016020000" - "1500000044000000a0051000660000001b02000009000000a00510006600" - "0000050200001d000000a005100066000000090200001d000000a0051000" - "660000003802000032000000a00510006600000044020000320000002969" - "6e646578206f7574206f6620626f756e64733a20746865206c656e206973" - "20206275742074686520696e64657820697320006d061000200000008d06" - "1000120000000000000004000000040000000a0000003d3d617373657274" - "696f6e20606c6566742020726967687460206661696c65640a20206c6566" - "743a200a2072696768743a200000c206100010000000d206100017000000" - "e90610000900000020726967687460206661696c65643a200a20206c6566" - "743a20000000c2061000100000000c071000100000001c07100009000000" - "e9061000090000003a200000010000000000000048071000020000000000" - "00000c000000040000000b0000000c0000000d000000202020202c0a2828" - "0a3078303030313032303330343035303630373038303931303131313231" - "333134313531363137313831393230323132323233323432353236323732" - "383239333033313332333333343335333633373338333934303431343234" - "333434343534363437343834393530353135323533353435353536353735" - "383539363036313632363336343635363636373638363937303731373237" - "333734373537363737373837393830383138323833383438353836383738" - "3838393930393139323933393439353936393739383939617474656d7074" - "20746f20646976696465206279207a65726f4708100019000000206f7574" - "206f662072616e676520666f7220736c696365206f66206c656e67746820" - "72616e676520656e6420696e6465782000008a0810001000000068081000" - "22000000736c69636520696e646578207374617274732061742020627574" - "20656e64732061742000ac08100016000000c20810000d00000028292f72" - "757374632f34656231363132353065333430633866343866363665326239" - "3239656634613562656437633138312f6c6962726172792f616c6c6f632f" - "7372632f7261775f7665632e72730000e20810004c000000280200001100" - "00002f727573742f646570732f646c6d616c6c6f632d302e322e372f7372" - "632f646c6d616c6c6f632e7273617373657274696f6e206661696c65643a" - "207073697a65203e3d2073697a65202b206d696e5f6f7665726865616400" - "4009100029000000a804000009000000617373657274696f6e206661696c" - "65643a207073697a65203c3d2073697a65202b206d61785f6f7665726865" - "616400004009100029000000ae0400000d00000000c94e046e616d65000e" - "0d7761736d5f6c69622e7761736d01914e8a01008a015f5a4e3130325f24" - "4c5424636f72652e2e697465722e2e61646170746572732e2e6d61702e2e" - "4d6170244c5424492443244624475424247532302461732475323024636f" - "72652e2e697465722e2e7472616974732e2e6974657261746f722e2e4974" - "657261746f72244754243973697a655f68696e7431376833383630386236" - "62663263303736666145014c5f5a4e34636f72653970616e69636b696e67" - "313170616e69635f636f6e7374323370616e69635f636f6e73745f646976" - "5f62795f7a65726f3137683033346433623765633138373166373545024d" - "5f5a4e34636f726533707472343364726f705f696e5f706c616365244c54" - "247761736d5f6c69622e2e566572696679696e674b657924475424313768" - "393064303131346662343063613937644503475f5a4e35616c6c6f633772" - "61775f7665633230526177566563496e6e6572244c542441244754243130" - "6465616c6c6f636174653137683235303163353461663065323831336145" - "04505f5a4e34636f726533707472343664726f705f696e5f706c61636524" - "4c5424616c6c6f632e2e7665632e2e566563244c54247538244754242447" - "5424313768663462323737666433376462353031654505565f5a4e34636f" - "726533707472353264726f705f696e5f706c616365244c5424626c733132" - "5f3338312e2e70616972696e67732e2e4732507265706172656424475424" - "313768623964653634383231343939353539344506675f5a4e34636f7265" - "33707472363964726f705f696e5f706c616365244c5424616c6c6f632e2e" - "7665632e2e566563244c5424626c7331325f3338312e2e7363616c61722e" - "2e5363616c61722447542424475424313768376265333235646130373238" - "386634384507385f5a4e35616c6c6f63337665633136566563244c542454" - "244324412447542434707573683137686236356465366561306165303964" - "31374508435f5a4e35616c6c6f63377261775f7665633139526177566563" - "244c54245424432441244754243867726f775f6f6e653137686531306535" - "65303538376531393262664509495f5a4e35616c6c6f6335736c69636532" - "395f244c5424696d706c2475323024247535622454247535642424475424" - "36746f5f76656331376836333665656464383765653761373437450a4d5f" - "5a4e35616c6c6f63377261775f7665633230526177566563496e6e657224" - "4c542441244754243136776974685f63617061636974795f696e31376861" - "653336636161393636356566343833450b4b5f5a4e35616c6c6f63377261" - "775f7665633230526177566563496e6e6572244c54244124475424313467" - "726f775f616d6f7274697a65643137686439353064656131373163323030" - "3035450c335f5a4e35616c6c6f63377261775f766563313268616e646c65" - "5f6572726f7231376863613161646630343635323765396532450d0e5f5f" - "727573745f6465616c6c6f630e4c5f5a4e35616c6c6f63377261775f7665" - "633230526177566563496e6e6572244c5424412447542431357472795f61" - "6c6c6f636174655f696e3137686534626630623334333637646136646345" - "0f5e5f5a4e36355f244c5424626c7331325f3338312e2e67312e2e473141" - "6666696e65247532302461732475323024636f72652e2e6f70732e2e6172" - "6974682e2e4e656724475424336e65673137683434323138626332316532" - "65356663314510725f5a4e36395f244c5424626c7331325f3338312e2e66" - "702e2e4670247532302461732475323024737562746c652e2e436f6e6469" - "74696f6e616c6c7953656c65637461626c65244754243138636f6e646974" - "696f6e616c5f73656c656374313768386165306466613830666434313139" - "364511605f5a4e36375f244c5424636f72652e2e61727261792e2e547279" - "46726f6d536c6963654572726f72247532302461732475323024636f7265" - "2e2e666d742e2e44656275672447542433666d7431376863303634386262" - "31393264393231376545122e5f5a4e34636f726533666d7439466f726d61" - "747465723370616431376833316663303133336231396665333065451367" - "5f5a4e36385f244c5424636f72652e2e666d742e2e6275696c646572732e" - "2e50616441646170746572247532302461732475323024636f72652e2e66" - "6d742e2e5772697465244754243977726974655f73747231376834353537" - "3732653638643462343039364514385f5a4e36737562746c65313743744f" - "7074696f6e244c5424542447542436657870656374313768623863663632" - "323139313530313333334515495f5a4e34345f244c542424524624542475" - "32302461732475323024636f72652e2e666d742e2e446973706c61792447" - "542433666d74313768353633396538653836623831393165364516355f5a" - "4e34636f72653970616e69636b696e6731336173736572745f6661696c65" - "64313768393337633632373834633734396537664517385f5a4e36737562" - "746c65313743744f7074696f6e244c542454244754243665787065637431" - "3768633764316533383030323138386237654518705f5a4e38315f244c54" - "24616c6c6f632e2e7665632e2e566563244c542454244324412447542424" - "7532302461732475323024636f72652e2e6f70732e2e696e6465782e2e49" - "6e646578244c542449244754242447542435696e64657831376862376565" - "6135613738316438393239374519405f5a4e34636f726535736c69636535" - "696e6465783232736c6963655f696e6465785f6f726465725f6661696c31" - "376866663036393161306536326561633864451a425f5a4e34636f726535" - "736c69636535696e6465783234736c6963655f656e645f696e6465785f6c" - "656e5f6661696c31376861383936346133343065666132346537451b0861" - "6c6c6f636174651c13646573657269616c697a655f67315f7761736d1d32" - "5f5a4e34636f726536726573756c743133756e777261705f6661696c6564" - "31376861313838333239383461636266333830451e3e5f5a4e39626c7331" - "325f333831326731384731416666696e65313566726f6d5f636f6d707265" - "7373656431376832333963336331363436646339303436451f355f5a4e38" - "7761736d5f6c69623139646573657269616c697a655f67325f7761736d31" - "37683530336430613839336365653362666645203e5f5a4e39626c733132" - "5f333831326732384732416666696e65313566726f6d5f636f6d70726573" - "7365643137686333616566303334336638323663626245211462656c6c6d" - "616e5f67726f746831365f7465737422335f5a4e39626c7331325f333831" - "367363616c6172365363616c617233737562313768656363643066636134" - "373035653937364523285f5a4e36737562746c6539626c61636b5f626f78" - "313768633661663135363636663731396234384524305f5a4e34636f7265" - "3970616e69636b696e673970616e69635f666d7431376862393162616461" - "636536656538323837452585015f5a4e3130325f244c5424626c7331325f" - "3338312e2e67312e2e473150726f6a656374697665247532302461732475" - "323024636f72652e2e636f6e766572742e2e46726f6d244c542424524624" - "626c7331325f3338312e2e67312e2e4731416666696e6524475424244754" - "243466726f6d3137686634356430353636343237373335316445262e5f5a" - "4e39626c7331325f33383132667032467036696e76657274313768366335" - "3632643539653638646633633245272b5f5a4e39626c7331325f33383132" - "6670324670336d756c313768646666623336663036373139613633374528" - "365f5a4e39626c7331325f333831326731384731416666696e6538696465" - "6e746974793137686236366162643638326233626339356345292f5f5a4e" - "39626c7331325f3338313266703246703769735f7a65726f313768333962" - "31303634343730313433376536452a785f5a4e37355f244c5424626c7331" - "325f3338312e2e67312e2e4731416666696e652475323024617324753230" - "24737562746c652e2e436f6e646974696f6e616c6c7953656c6563746162" - "6c65244754243138636f6e646974696f6e616c5f73656c65637431376833" - "323735393935653930646636613863452b85015f5a4e3130325f244c5424" - "626c7331325f3338312e2e70616972696e67732e2e473250726570617265" - "64247532302461732475323024636f72652e2e636f6e766572742e2e4672" - "6f6d244c5424626c7331325f3338312e2e67322e2e4732416666696e6524" - "475424244754243466726f6d313768353930643863663565363536346465" - "66452c2f5f5a4e39626c7331325f33383134667031323446703132336f6e" - "6531376839346666616330666264306163343332452d90015f5a4e313033" - "5f244c5424626c7331325f3338312e2e70616972696e67732e2e6d756c74" - "695f6d696c6c65725f6c6f6f702e2e416464657224753230246173247532" - "3024626c7331325f3338312e2e70616972696e67732e2e4d696c6c65724c" - "6f6f70447269766572244754243133646f75626c696e675f737465703137" - "6833346536393232613038346336343933452e705f5a4e38315f244c5424" - "616c6c6f632e2e7665632e2e566563244c54245424432441244754242475" - "32302461732475323024636f72652e2e6f70732e2e696e6465782e2e496e" - "646578244c542449244754242447542435696e6465783137686539346538" - "6262303063326535366564452f2e5f5a4e39626c7331325f333831387061" - "6972696e677333656c6c3137683264393865303762336132336635313345" - "30745f5a4e37315f244c5424626c7331325f3338312e2e6670322e2e4670" - "32247532302461732475323024737562746c652e2e436f6e646974696f6e" - "616c6c7953656c65637461626c65244754243138636f6e646974696f6e61" - "6c5f73656c6563743137686366633738633362393036656661383945315a" - "5f5a4e36315f244c5424626c7331325f3338312e2e6670362e2e46703624" - "7532302461732475323024636f72652e2e6f70732e2e61726974682e2e4e" - "656724475424336e65673137686230666536353636326461326334343345" - "322b5f5a4e39626c7331325f333831326670324670336e65673137683861" - "363566633733316133386134393745332d5f5a4e39626c7331325f333831" - "3366703233467032336d756c313768326433373464346666306563343037" - "6245345a5f5a4e36315f244c5424626c7331325f3338312e2e6670362e2e" - "467036247532302461732475323024636f72652e2e6f70732e2e61726974" - "682e2e4d756c24475424336d756c31376865613934393735323931313764" - "3166634535305f5a4e39626c7331325f3338313366703633467036367371" - "756172653137683866633831663539663666313530643145363c5f5a4e39" - "626c7331325f333831336670363346703631376d756c5f62795f6e6f6e72" - "6573696475653137686432663865613131393236643732653945375a5f5a" - "4e36315f244c5424626c7331325f3338312e2e6670362e2e467036247532" - "302461732475323024636f72652e2e6f70732e2e61726974682e2e537562" - "24475424337375623137686137396663636566323762323631323445382b" - "5f5a4e39626c7331325f3338313266703246703373756231376865646439" - "32336439323032346633366445392b5f5a4e39626c7331325f3338313266" - "703246703361646431376863366562626430363731666432643965453a30" - "5f5a4e39626c7331325f3338313366703233467032367371756172653137" - "6865663238666434623836356230653732453b2d5f5a4e39626c7331325f" - "333831336670323346703233737562313768636330663365343532313765" - "61393964453c2d5f5a4e39626c7331325f33383133667032334670323361" - "646431376864363030363832376137333934646563453d2e5f5a4e39626c" - "7331325f3338313266703246703673717561726531376835616337663530" - "666666393136623065453e605f5a4e36375f244c542424524624626c7331" - "325f3338312e2e667031322e2e4670313224753230246173247532302463" - "6f72652e2e6f70732e2e61726974682e2e4d756c24475424336d756c3137" - "6863613137343239383666636366353565453f6a5f5a4e36395f244c5424" - "626c7331325f3338312e2e667031322e2e46703132247532302461732475" - "323024636f72652e2e6f70732e2e61726974682e2e4d756c41737369676e" - "2447542431306d756c5f61737369676e3137683037326534616130343436" - "63356334314540655f5a4e39626c7331325f3338313870616972696e6773" - "31364d696c6c65724c6f6f70526573756c74323066696e616c5f6578706f" - "6e656e74696174696f6e31376379636c6f746f6d69635f73717561726531" - "3768613463633461633966316338323538644541635f5a4e39626c733132" - "5f3338313870616972696e677331364d696c6c65724c6f6f70526573756c" - "74323066696e616c5f6578706f6e656e74696174696f6e31356379636f6c" - "6f746f6d69635f6578703137686166636437313637356662666432373645" - "425d5f5a4e36325f244c5424626c7331325f3338312e2e6670322e2e4670" - "32247532302461732475323024737562746c652e2e436f6e7374616e7454" - "696d654571244754243563745f6571313768316264323735363036643361" - "6461366445435a5f5a4e36315f244c5424626c7331325f3338312e2e6670" - "362e2e467036247532302461732475323024636f72652e2e6f70732e2e61" - "726974682e2e416464244754243361646431376835343330336164316564" - "646333613837454491015f5a4e3131345f244c5424636f72652e2e697465" - "722e2e61646170746572732e2e666c617474656e2e2e466c61744d617024" - "4c542449244324552443244624475424247532302461732475323024636f" - "72652e2e697465722e2e7472616974732e2e6974657261746f722e2e4974" - "657261746f7224475424346e657874313768633964373737363930666232" - "373033334545385f5a4e34636f7265336f70733866756e6374696f6e3546" - "6e4d75743863616c6c5f6d75743137686638313366653737616237633761" - "35634546395f5a4e39626c7331325f3338313267313132473150726f6a65" - "637469766536646f75626c65313768386366636435343461313633326664" - "384547365f5a4e39626c7331325f3338313267313132473150726f6a6563" - "74697665336164643137686338666437656633383137383263636145487c" - "5f5a4e37395f244c5424626c7331325f3338312e2e67312e2e473150726f" - "6a656374697665247532302461732475323024737562746c652e2e436f6e" - "646974696f6e616c6c7953656c65637461626c65244754243138636f6e64" - "6974696f6e616c5f73656c65637431376839346663383463303336386533" - "3262334549415f5a4e38646c6d616c6c6f6338646c6d616c6c6f63313744" - "6c6d616c6c6f63244c542441244754243466726565313768623937643238" - "61316165313165356635454a2c5f5a4e34636f72653970616e69636b696e" - "673570616e696331376832323065356136376635653365303666454b0e5f" - "5f727573745f7265616c6c6f634c4a5f5a4e38646c6d616c6c6f6338646c" - "6d616c6c6f633137446c6d616c6c6f63244c542441244754243132756e6c" - "696e6b5f6368756e6b31376831623634356162376339333032303939454d" - "4b5f5a4e38646c6d616c6c6f6338646c6d616c6c6f633137446c6d616c6c" - "6f63244c542441244754243133646973706f73655f6368756e6b31376832" - "633732313930393066616265323362454e435f5a4e38646c6d616c6c6f63" - "38646c6d616c6c6f633137446c6d616c6c6f63244c54244124475424366d" - "616c6c6f6331376863663263663139323661376530646165454f385f5a4e" - "35616c6c6f63377261775f766563313763617061636974795f6f76657266" - "6c6f7731376863393936333961626361313337633131455085015f5a4e31" - "30325f244c5424636f72652e2e697465722e2e61646170746572732e2e6d" - "61702e2e4d6170244c542449244324462447542424753230246173247532" - "3024636f72652e2e697465722e2e7472616974732e2e6974657261746f72" - "2e2e4974657261746f7224475424346e6578743137683161356136633566" - "303263666237373445514d5f5a4e34365f244c5424753634247532302461" - "732475323024737562746c652e2e436f6e7374616e7454696d6545712447" - "54243563745f657131376839613065366130383065643661303532455253" - "5f5a4e35345f244c5424737562746c652e2e43686f696365247532302461" - "732475323024636f72652e2e6f70732e2e6269742e2e4e6f742447542433" - "6e6f743137686532353261643837343163616538663445533b5f5a4e3463" - "6f72653970616e69636b696e6731396173736572745f6661696c65645f69" - "6e6e6572313768363939386636356530343630623966324554475f5a4e34" - "325f244c54242452462454247532302461732475323024636f72652e2e66" - "6d742e2e44656275672447542433666d7431376866396562386538303434" - "3436393737334555385f5a4e34636f726533666d7439466f726d61747465" - "7231327061645f696e74656772616c313768336538303336383966363939" - "303466334556335f5a4e39626c7331325f33383132667032467031307375" - "6274726163745f7031376833353337643137643839306564373430455736" - "5f5a4e35616c6c6f6335616c6c6f6336476c6f62616c3130616c6c6f635f" - "696d706c313768636263383565313966363066396565314558435f5a4e35" - "616c6c6f63377261775f7665633139526177566563244c54245424432441" - "244754243867726f775f6f6e653137683761366133613131343862316565" - "66624559785f5a4e37355f244c5424626c7331325f3338312e2e67322e2e" - "4732416666696e65247532302461732475323024737562746c652e2e436f" - "6e646974696f6e616c6c7953656c65637461626c65244754243138636f6e" - "646974696f6e616c5f73656c656374313768346631633532376163323663" - "39393332455a7a5f5a4e37375f244c5424737562746c652e2e43744f7074" - "696f6e244c54245424475424247532302461732475323024737562746c65" - "2e2e436f6e646974696f6e616c6c7953656c65637461626c652447542431" - "38636f6e646974696f6e616c5f73656c6563743137686230353564346638" - "6331363261313862455b5b5f5a4e36305f244c5424626c7331325f333831" - "2e2e66702e2e4670247532302461732475323024737562746c652e2e436f" - "6e7374616e7454696d654571244754243563745f65713137683764613737" - "3038613961336631623237455c335f5a4e39626c7331325f333831326670" - "324670313066726f6d5f6279746573313768663632643265653863383835" - "61616633455d665f5a4e36355f244c5424626c7331325f3338312e2e6670" - "2e2e4670247532302461732475323024636f72652e2e6f70732e2e617269" - "74682e2e4d756c41737369676e2447542431306d756c5f61737369676e31" - "376862613864393933386331336334313962455e425f5a4e39626c733132" - "5f33383132667032467032356c657869636f67726170686963616c6c795f" - "6c61726765737431376864623239383362653765626662373630455f345f" - "5a4e39626c7331325f3338313266703246703131706f775f76617274696d" - "65313768386339643861353637336531663765654560315f5a4e39626c73" - "31325f33383133667032334670323769735f7a65726f3137683232633162" - "33626231383039373337664561385f5a4e39626c7331325f333831326670" - "324670313573756d5f6f665f70726f647563747331376864373831613962" - "66366162336638386645622d5f5a4e39626c7331325f3338313366703233" - "467032336e6567313768336535623432323139303537623839334563365f" - "5a4e39626c7331325f33383133667032334670323131706f775f76617274" - "696d653137683839356266623030643732663461646145643b5f5a4e3962" - "6c7331325f3338313267313132473150726f6a656374697665386d756c5f" - "62795f78313768313830336335636330383333313036354565665f5a4e37" - "335f244c542424524624626c7331325f3338312e2e67312e2e473150726f" - "6a656374697665247532302461732475323024636f72652e2e6f70732e2e" - "61726974682e2e4e656724475424336e6567313768363961333962383136" - "613036626237614566455f5a4e34636f7265346974657238616461707465" - "727337666c617474656e3137616e645f7468656e5f6f725f636c65617231" - "3768373932316661373530366638613637624567365f5a4e39626c733132" - "5f333831326732384732416666696e65386964656e746974793137683532" - "3261303037353662633832613639456885015f5a4e3130325f244c542462" - "6c7331325f3338312e2e67322e2e473250726f6a65637469766524753230" - "2461732475323024636f72652e2e636f6e766572742e2e46726f6d244c54" - "2424524624626c7331325f3338312e2e67322e2e4732416666696e652447" - "5424244754243466726f6d31376831393034396666373534383632623533" - "4569335f5a4e39626c7331325f3338313366703633467036396d756c5f62" - "795f303131376837316231356266356135313961376133456a385f5a4e39" - "626c7331325f333831326670324670313573756d5f6f665f70726f647563" - "747331376862306665663033383436356461336561456b5e5f5a4e39626c" - "7331325f3338313870616972696e677331364d696c6c65724c6f6f705265" - "73756c74323066696e616c5f6578706f6e656e74696174696f6e31306670" - "345f73717561726531376835333530613232303537323261303037456c68" - "5f5a4e36375f244c5424626c7331325f3338312e2e6670322e2e46703224" - "7532302461732475323024636f72652e2e6f70732e2e61726974682e2e53" - "756241737369676e2447542431307375625f61737369676e313768656138" - "64663864303262303833343633456dd5015f5a4e3137325f244c5424244c" - "5424626c7331325f3338312e2e70616972696e67732e2e47325072657061" - "726564247532302461732475323024636f72652e2e636f6e766572742e2e" - "46726f6d244c5424626c7331325f3338312e2e67322e2e4732416666696e" - "6524475424244754242e2e66726f6d2e2e41646465722475323024617324" - "75323024626c7331325f3338312e2e70616972696e67732e2e4d696c6c65" - "724c6f6f70447269766572244754243133646f75626c696e675f73746570" - "31376833303230646632373566636537643064456e385f5a4e35616c6c6f" - "63337665633136566563244c542454244324412447542434707573683137" - "6836633466633030383766393064366561456f355f5a4e34636f72653970" - "616e69636b696e6731336173736572745f6661696c656431376838396134" - "30623862613963643736636345703a5f5a4e34636f72653970616e69636b" - "696e67313870616e69635f626f756e64735f636865636b31376835613339" - "3334316633393435306165354571625f5a4e34636f726533666d74336e75" - "6d33696d7035325f244c5424696d706c2475323024636f72652e2e666d74" - "2e2e446973706c61792475323024666f7224753230247533322447542433" - "666d74313768646131373032323936653330396138624572445f5a4e3463" - "6f726533666d74336e756d33696d7032315f244c5424696d706c24753230" - "2475333224475424345f666d743137686531613333633761616434313031" - "3465457311727573745f626567696e5f756e77696e6474465f5a4e34636f" - "726533666d7439466f726d617474657231327061645f696e74656772616c" - "313277726974655f70726566697831376865323164633232613535336139" - "3935324575535f5a4e34636f726535736c69636535696e6465783234736c" - "6963655f656e645f696e6465785f6c656e5f6661696c38646f5f70616e69" - "633772756e74696d65313768623465303239633465666136373431314576" - "475f5a4e34325f244c54242452462454247532302461732475323024636f" - "72652e2e666d742e2e44656275672447542433666d743137683763663234" - "64633163663734653663354577495f5a4e34345f244c5424245246245424" - "7532302461732475323024636f72652e2e666d742e2e446973706c617924" - "47542433666d74313768363963313766643162653433346236384578585f" - "5a4e35395f244c5424636f72652e2e666d742e2e417267756d656e747324" - "7532302461732475323024636f72652e2e666d742e2e446973706c617924" - "47542433666d74313768356530663632333530333933336330664579265f" - "5a4e34636f726533666d7435777269746531376862633530306361396130" - "663033323632457a695f5a4e36385f244c5424636f72652e2e666d742e2e" - "6275696c646572732e2e5061644164617074657224753230246173247532" - "3024636f72652e2e666d742e2e577269746524475424313077726974655f" - "6368617231376837323761393336343062616631636662457b305f5a4e34" - "636f726533666d743557726974653977726974655f666d74313768653264" - "32326663306535326231396336457c515f5a4e34636f726535736c696365" - "35696e6465783232736c6963655f696e6465785f6f726465725f6661696c" - "38646f5f70616e69633772756e74696d6531376836346563303433376262" - "666263656363457d475f5a4e34325f244c54242452462454247532302461" - "732475323024636f72652e2e666d742e2e44656275672447542433666d74" - "31376837396432393730376137363931633337457e375f5a4e34636f7265" - "3570616e6963313250616e69635061796c6f61643661735f737472313768" - "33653762626665396537333233373036457f3b5f5a4e337374643970616e" - "69636b696e673230727573745f70616e69635f776974685f686f6f6b3137" - "68396561303139313462356439323635394580010a727573745f70616e69" - "638101455f5a4e3373746433737973396261636b747261636532365f5f72" - "7573745f656e645f73686f72745f6261636b747261636531376865376239" - "323038656534343338376436458201585f5a4e337374643970616e69636b" - "696e673139626567696e5f70616e69635f68616e646c657232385f247537" - "62242475376224636c6f7375726524753764242475376424313768393666" - "3161333534313164393334366245830183015f5a4e39395f244c54247374" - "642e2e70616e69636b696e672e2e626567696e5f70616e69635f68616e64" - "6c65722e2e5374617469635374725061796c6f6164247532302461732475" - "323024636f72652e2e70616e69632e2e50616e69635061796c6f61642447" - "54243661735f737472313768653362376630636337353061633833394584" - "01505f5a4e38646c6d616c6c6f6338646c6d616c6c6f633137446c6d616c" - "6c6f63244c542441244754243138696e736572745f6c617267655f636875" - "6e6b31376866646432333135363766663933346634458501066d656d7365" - "748601066d656d6370798701085f5f6d756c7469338801365f5a4e313763" - "6f6d70696c65725f6275696c74696e73336d656d376d656d6d6f76653137" - "6830343030366431613866396435653532458901076d656d6d6f76650712" - "01000f5f5f737461636b5f706f696e746572090a0100072e726f64617461" - "004d0970726f64756365727302086c616e6775616765010452757374000c" - "70726f6365737365642d6279010572757374631d312e38352e3120283465" - "6231363132353020323032352d30332d31352900490f7461726765745f66" - "65617475726573042b0a6d756c746976616c75652b0f6d757461626c652d" - "676c6f62616c732b0f7265666572656e63652d74797065732b087369676e" - "2d657874"; - -extern std::string const sp1WasmHex = - "0061736d0100000001630f60027f7f0060037f7f7f0060027f7f017f6003" - "7f7f7f017f60017f0060047f7f7f7f0060017f017f60057f7f7f7f7f0060" - "047f7f7f7f017f6000017f60077f7e7e7e7e7e7e0060000060097f7e7e7e" - "7e7e7e7e7e0060037f7e7e0060047f7e7e7f000351500906010004010001" - "000000060100000001010107040800000000000102080202040101000505" - "00010502000a0b0c00010100000100000401040000010100000101000200" - "0100000107010202030d0e000405017001080805030100110619037f0141" - "8080c0000b7f0041b0abc0000b7f0041b0abc0000b073c04066d656d6f72" - "790200147370315f67726f746831365f766572696669657200000a5f5f64" - "6174615f656e6403010b5f5f686561705f626173650302090d010041010b" - "071c1f1e323429420a81c10950add60202537f2d7e230041c0206b220124" - "0041e8a5c0002d0000410247044041e8a5c00041e8a5c0002d0000220541" - "0120051b3a00000240200504400340024002400240200541016b0e030005" - "01020b034041e8a5c0002d000022054101460d000b02400240200541016b" - "0e03000601030b000b41a49bc000412641cc9bc0001011000b41a89ac000" - "410d41949bc0001011000b41e8a5c00041e8a5c0002d0000220541012005" - "1b3a000020050d000b0b41e8a5c00041023a000041e4a5c000418c033602" - "0041e0a5c00041e892c0003602000b0b41bda9c0002d00001a41e4a5c000" - "280200211241e0a5c000280200211f024002400240024002400240024002" - "400240024002400240024002400240024002400240024002400240024002" - "400240024002404184021001220a450d00200a41c1befe827c3600800220" - "0a42e5979c9b97e3c7eb897f3700f801200a42cbb091f7e585f1e3d30037" - "00f001200a4285cca8c2988cc0acd0003700e801200a42c29391f580c1f3" - "da093700e001200a42d1f9cfc9da8dc8bcb37f3700d801200a42c1a5a5db" - "99d68fcfc8003700d001200a42a4e6aeaa96968ae30c3700c801200a42bb" - "86f4fee5c1aa8eab7f3700c001200a42ecff83a2ceee9ae7173700b80120" - "0a429fc5d69be5fafb80763700b001200a42bcd1e08deea2cfa58b7f3700" - "a801200a42aeb3eac1cda3e3c0bf7f3700a001200a42e2d8abdbae8cd3ae" - "5c37009801200a42eafbbf9fa891deb20437009001200a42afd29dfa8281" - "ecce9f7f37008801200a42b799d9dcb883f8df3b37008001200a42b3c1c2" - "a8e0a2cbc0cc00370078200a4295af8cdda2f981d269370070200a42f4eb" - "86b4cfc69bc339370068200a42f8e5b7c0c1e199bff000370060200a42c1" - "e7c485b4aac3c28c7f370058200a42f3e7ec98bff992d83b370050200a42" - "e880deac81addbc8967f370048200a4288c5f6c6eba0ef9844370040200a" - "42bdb2cf80ada892e5ec00370038200a42f887b4d9f0accbdb4c37003020" - "0a42e1c6ffa3c2dec48dcb00370028200a42fc81d7948085c1fc2c370020" - "200a42f79d8ff3bcb283ece500370018200a42beb6d5a58deadbe2d90037" - "0010200a4291c09b97b2989bf3b97f370008200a4291ec82edf9a3afba48" - "37000041bda9c0002d00001a41e0001001221d450d00201d420037000020" - "1d4200370020201d41053a001f201d4200370040201d41053a003f201d41" - "083a005f201d41176a4200370000201d41106a4200370000201d41086a42" - "00370000201d41286a4200370000201d41306a4200370000201d41376a42" - "00370000201d41c8006a4200370000201d41d0006a4200370000201d41d7" - "006a420037000041bda9c0002d00001a41c20010012205450d0020054180" - "80c00041c200104c2152200141a00f6a201f20121002024020012802a00f" - "200a280000470d002001418280c4003602e01c2001410036029c03200142" - "c080808020370294032001205241026a360290032001200141e01c6a3602" - "a003200141106a20014190036a100320012d0010044020012d0011210502" - "4020012802a003280200418280c400470d00200128029403450d00200128" - "029803450d040b41bda9c0002d00001a410810012202450d02200141d000" - "6a2116200a41e4016a2109200a41c4016a2122200a41a4016a2120200220" - "053a0000200141013602a80c200120023602a40c200141083602a00c2001" - "41b00f6a200141a0036a280200360200200141a80f6a20014198036a2902" - "0037030020012001290290033703a00f4101210503400240200141086a20" - "0141a00f6a100320012d0008450d0020012d0009210620012802a00c2005" - "460440024020012802b00f280200418280c400470d0020012802a40f450d" - "0020012802a80f450d070b230041206b220f240002404108200141a00c6a" - "220e280200220c4101742208200541016a220220022008491b2202200241" - "084d1b220241004e047f200f200c047f200f200c36021c200f200e280204" - "36021441010541000b360218200f41086a41012002200f41146a1028200f" - "2802084101470d01200f2802101a200f28020c0541000b41c096c0001019" - "000b200f28020c210c200e2002360200200e200c360204200f41206a2400" - "20012802a40c21020b200220056a20063a00002001200541016a22053602" - "a80c0c010b0b20012802a00c210220012802a40c210620012802e01c4182" - "80c4004704402002450d02200641046b2802002205417871221241044108" - "200541037122051b20026a490d05200541002012200241276a4b1b0d0620" - "0610040c020b2002418080808078460d0102400240024002402005412046" - "0440200141a80f6a2205200641176a290000370300200141b00f6a222320" - "06411f6a2d00003a00002001200629000f3703a00f200628000b21242006" - "28000721262006280003213520062d0002212d20062d0001214720062d00" - "00214820020440200641046b2802002208417871220c4104410820084103" - "7122081b20026a490d0c20084100200c200241276a4b1b0d0d200610040b" - "200141206a22062005290300370300200141286a220520232d00003a0000" - "200120012903a00f370318200141f0006a201d41e0001002200141c7006a" - "2006290300370000200141cf006a20052d00003a0000201641086a200141" - "f8006a290000370000201641106a20014180016a29000037000020164118" - "6a20014188016a290000370000200120012d0070411f713a007020162001" - "2900703700002001202436003b2001202636003720012035360033200120" - "2d3a0032200120473a0031200120483a00302001200129031837003f200a" - "290014225742388620574280fe0383422886842057428080fc0783421886" - "205742808080f80f834208868484205742088842808080f80f8320574218" - "88428080fc07838420574228884280fe03832057423888848484215e200a" - "411c6a290000225742388620574280fe0383422886842057428080fc0783" - "421886205742808080f80f834208868484205742088842808080f80f8320" - "57421888428080fc07838420574228884280fe0383205742388884848421" - "65417f200a290004225742b0c8b99297bc8cd02985200a410c6a29000022" - "5842b8a195b29bb0a0acdd008584420052205842388620584280fe038342" - "2886842058428080fc0783421886205842808080f80f8342088684842058" - "42088842808080f80f832058421888428080fc07838420584228884280fe" - "03832058423888848484225842ddb0858ce8b691a8b87f54205742388620" - "574280fe0383422886842057428080fc0783421886205742808080f80f83" - "4208868484205742088842808080f80f832057421888428080fc07838420" - "574228884280fe03832057423888848484225742a9c0c689aece93b23054" - "205742a9c0c689aece93b230511b1b2205417f470440200541ff01710d07" - "206542c6faf3c3ed82a3903c56205e428d95c7c396d2dac0977f56205e42" - "8d95c7c396d2dac0977f511b0d070b200120583703b018200120653703a0" - "18200120573703b8182001205e3703a818200a2900342257423886205742" - "80fe0383422886842057428080fc0783421886205742808080f80f834208" - "868484205742088842808080f80f832057421888428080fc078384205742" - "28884280fe03832057423888848484215e200a413c6a2900002257423886" - "20574280fe0383422886842057428080fc0783421886205742808080f80f" - "834208868484205742088842808080f80f832057421888428080fc078384" - "20574228884280fe038320574238888484842165417f200a290024225742" - "b0c8b99297bc8cd02985200a412c6a290000225842b8a195b29bb0a0acdd" - "008584420052205842388620584280fe0383422886842058428080fc0783" - "421886205842808080f80f834208868484205842088842808080f80f8320" - "58421888428080fc07838420584228884280fe0383205842388884848422" - "5842ddb0858ce8b691a8b87f54205742388620574280fe03834228868420" - "57428080fc0783421886205742808080f80f834208868484205742088842" - "808080f80f832057421888428080fc07838420574228884280fe03832057" - "423888848484225742a9c0c689aece93b23054205742a9c0c689aece93b2" - "30511b1b2205417f470440200541ff01710d07206542c6faf3c3ed82a390" - "3c56205e428d95c7c396d2dac0977f56205e428d95c7c396d2dac0977f51" - "1b0d070b200120583703d01a200120653703c01a200120573703d81a2001" - "205e3703c81a200141e0066a200141a0186a200141c01a6a100520012d00" - "e0060d06200141e50c6a2205200141a8076a290300370000200141dd0c6a" - "2206200141a0076a290300370000200141d50c6a220220014198076a2903" - "00370000200141cd0c6a222320014190076a290300370000200141c50c6a" - "222420014188076a290300370000200141bd0c6a222620014180076a2903" - "00370000200141b50c6a2235200141f8066a290300370000200120012903" - "f0063700ad0c200141a51d6a222d20052900003700002001419d1d6a2205" - "2006290000370000200141951d6a220620022900003700002001418d1d6a" - "22022023290000370000200141851d6a22232024290000370000200141fd" - "1c6a22242026290000370000200141f51c6a222620352900003700002001" - "20012900ad0c3700ed1c200141d80a6a202d290000370300200141d00a6a" - "2005290000370300200141c80a6a2006290000370300200141c00a6a2002" - "290000370300200141b80a6a2023290000370300200141b00a6a20242900" - "00370300200120262900003703a80a200120012900ed1c3703a00a200a29" - "0054225742388620574280fe0383422886842057428080fc078342188620" - "5742808080f80f834208868484205742088842808080f80f832057421888" - "428080fc07838420574228884280fe038320574238888484842165200a41" - "dc006a290000225742388620574280fe0383422886842057428080fc0783" - "421886205742808080f80f834208868484205742088842808080f80f8320" - "57421888428080fc07838420574228884280fe0383205742388884848421" - "6a417f200a290044225742b0c8b99297bc8cd02985200a41cc006a290000" - "225842b8a195b29bb0a0acdd008584420052205842388620584280fe0383" - "422886842058428080fc0783421886205842808080f80f83420886848420" - "5842088842808080f80f832058421888428080fc07838420584228884280" - "fe03832058423888848484226242ddb0858ce8b691a8b87f542057423886" - "20574280fe0383422886842057428080fc0783421886205742808080f80f" - "834208868484205742088842808080f80f832057421888428080fc078384" - "20574228884280fe03832057423888848484225e42a9c0c689aece93b230" - "54205e42a9c0c689aece93b230511b1b2205417f470440200541ff01710d" - "07206a42c6faf3c3ed82a3903c562065428d95c7c396d2dac0977f562065" - "428d95c7c396d2dac0977f511b0d070b200a290074225742388620574280" - "fe0383422886842057428080fc0783421886205742808080f80f83420886" - "8484205742088842808080f80f832057421888428080fc07838420574228" - "884280fe03832057423888848484215a200a41fc006a2900002257423886" - "20574280fe0383422886842057428080fc0783421886205742808080f80f" - "834208868484205742088842808080f80f832057421888428080fc078384" - "20574228884280fe03832057423888848484215c417f200a290064225742" - "b0c8b99297bc8cd02985200a41ec006a290000225842b8a195b29bb0a0ac" - "dd008584420052205842388620584280fe0383422886842058428080fc07" - "83421886205842808080f80f834208868484205842088842808080f80f83" - "2058421888428080fc07838420584228884280fe03832058423888848484" - "225942ddb0858ce8b691a8b87f54205742388620574280fe038342288684" - "2057428080fc0783421886205742808080f80f8342088684842057420888" - "42808080f80f832057421888428080fc07838420574228884280fe038320" - "57423888848484225442a9c0c689aece93b23054205442a9c0c689aece93" - "b230511b1b2205417f470440200541ff01710d07205c42c6faf3c3ed82a3" - "903c56205a428d95c7c396d2dac0977f56205a428d95c7c396d2dac0977f" - "511b0d070b200a29009401225742388620574280fe038342288684205742" - "8080fc0783421886205742808080f80f8342088684842057420888428080" - "80f80f832057421888428080fc07838420574228884280fe038320574238" - "88848484215b200a419c016a290000225742388620574280fe0383422886" - "842057428080fc0783421886205742808080f80f83420886848420574208" - "8842808080f80f832057421888428080fc07838420574228884280fe0383" - "20574238888484842161417f200a29008401225742b0c8b99297bc8cd029" - "85200a418c016a290000225842b8a195b29bb0a0acdd0085844200522058" - "42388620584280fe0383422886842058428080fc07834218862058428080" - "80f80f834208868484205842088842808080f80f832058421888428080fc" - "07838420584228884280fe03832058423888848484225842ddb0858ce8b6" - "91a8b87f54205742388620574280fe0383422886842057428080fc078342" - "1886205742808080f80f834208868484205742088842808080f80f832057" - "421888428080fc07838420574228884280fe038320574238888484842257" - "42a9c0c689aece93b23054205742a9c0c689aece93b230511b1b2205417f" - "470440200541ff01710d07206142c6faf3c3ed82a3903c56205b428d95c7" - "c396d2dac0977f56205b428d95c7c396d2dac0977f511b0d070b200141e0" - "066a2020100620012d00e0060d06200141f51c6a200141f8066a29030022" - "53370000200141b80b6a20014188076a290300370300200141b00b6a2001" - "4180076a290300370300200120012903f0063703a00b200120533703a80b" - "200120623703900b2001206a3703800b200120593703f00a2001205c3703" - "e00a2001205e3703980b200120653703880b200120543703f80a2001205a" - "3703e80a200120573703d80b200120583703d00b2001205b3703c80b2001" - "20613703c00b200141e0066a200141e00a6a200141a00b6a100720012d00" - "e0060d06200141801f6a200141ad186a200141cd1a6a200141ee1c6a2001" - "41ae0c6a200141f0066a418001104c418001104c418001104c418001104c" - "418001104c1a200141e0066a2022100620012d00e0060d06200141b5186a" - "2205200141f8066a22062903002257370000200141f80a6a20014188076a" - "2202290300370300200141f00a6a20014180076a22202903003703002001" - "20012903f0063703e00a200120573703e80a200141e0066a200910062001" - "2d00e0060d06200520062903002257370000200141b80b6a200229030037" - "0300200141b00b6a2020290300370300200120012903f0063703a00b2001" - "20573703a80b200141e0066a200141e00a6a200141a00b6a100520012d00" - "e0060d06200141e50c6a2205200141a8076a290300370000200141dd0c6a" - "2206200141a0076a290300370000200141d50c6a220220014198076a2903" - "00370000200141cd0c6a222020014190076a290300370000200141c50c6a" - "222220014188076a290300370000200141bd0c6a220920014180076a2903" - "00370000200141b50c6a2223200141f8066a290300370000200120012903" - "f0063700ad0c200141a51d6a222420052900003700002001419d1d6a2205" - "2006290000370000200141951d6a220620022900003700002001418d1d6a" - "22022020290000370000200141851d6a22202022290000370000200141fd" - "1c6a22222009290000370000200141f51c6a220920232900003700002001" - "20012900ad0c3700ed1c200141d8086a2024290000370300200141d0086a" - "2005290000370300200141c8086a2006290000370300200141c0086a2002" - "290000370300200141b8086a2020290000370300200141b0086a20222900" - "00370300200141a8086a2009290000370300200120012900ed1c3703a008" - "200141e8076a20012903a80a370300200141f0076a200141b00a6a290300" - "370300200141f8076a200141b80a6a29030037030020014180086a200141" - "c00a6a29030037030020014188086a200141c80a6a290300370300200141" - "90086a200141d00a6a29030037030020014198086a200141d80a6a290300" - "370300200120012903a00a3703e007200141e0066a200141801f6a418001" - "104c1a20014190016a2001419d036a200141ad0f6a200141e0066a418002" - "104c418002104c418002104c1a2012411f4d0d0f200141a00f6a201f1008" - "20012d00a00f0d06200141e50c6a200141e80f6a29030022573700002001" - "41dd0c6a200141e00f6a2903002258370000200141d50c6a200141d80f6a" - "290300225e370000200141cd0c6a200141d00f6a29030022653700002001" - "41f00b6a200141c00f6a290300370300200141f80b6a200141c80f6a2903" - "00370300200141800c6a2065370300200141880c6a205e37030020014190" - "0c6a2058370300200141980c6a2057370300200120012903b00f3703e00b" - "2001200141b80f6a2903003703e80b201241ff004d0d10200141a00f6a20" - "1f41406b100920012d00a00f0d06200141a0186a200141ad0c6a200141b0" - "0f6a418001104c418001104c1a201241bf014d0d11200141a00f6a201f41" - "80016a100920012d00a00f0d06200141c01a6a200141ad0c6a200141b00f" - "6a418001104c418001104c1a2012419f024d0d12200141a00f6a201f41e0" - "016a100920012d00a00f0d06200141e01c6a200141ad0c6a200141b00f6a" - "418001104c418001104c1a201241a002460d13201241a102460d14201241" - "a2024d0d15201241a302460d16201f2d00a0022105201f2d00a102210620" - "1f2d00a3022102201f2d00a202212041002126200141003602a80b200142" - "8080808080023702a00b2005200641087472202041107472200241187472" - "220504404101200541187420054180fe03714108747220054108764180fe" - "0371200541187672722205200541014d1b210c200141ad0c6a2105200141" - "b00f6a210641a40221024100212241102108410021200340202041f6ffff" - "3f460d19200241206a220920124b0d1a200141a00f6a2002201f6a100820" - "012d00a00f0d0320052006290000370000200541386a2202200641386a29" - "0000370000200541306a2223200641306a290000370000200541286a2224" - "200641286a290000370000200541206a2226200641206a29000037000020" - "0541186a2235200641186a290000370000200541106a222d200641106a29" - "0000370000200541086a2247200641086a290000370000200141901f6a22" - "48202d290000370300200141981f6a222d2035290000370300200141a01f" - "6a22352026290000370300200141a81f6a22262024290000370300200141" - "b01f6a22242023290000370300200141b81f6a2223200229000037030020" - "0120052900003703801f200120472900003703881f20012802a00b202046" - "044041002108230041206b2203240002400240200141a00b6a221b280200" - "220f417f460d00200f4101742202200f41016a220e2002200e4b1b220241" - "ffffff1f4b0d0041042002200241044d1b2202410674220e41f0ffffff07" - "4b0d002003200f047f2003200f41067436021c2003201b28020436021441" - "100541000b360218200341086a4110200e200341146a1028200328020841" - "01470d0120032802101a200328020c21080b200841dc90c0001019000b20" - "0328020c210f201b2002360200201b200f360204200341206a2400200128" - "02a40b21080b200820226a220220012903801f370300200241386a202329" - "0300370300200241306a2024290300370300200241286a20262903003703" - "00200241206a2035290300370300200241186a202d290300370300200241" - "106a2048290300370300200241086a20012903881f370300200120204101" - "6a22203602a80b202241406b212220092102200c2020470d000b20012802" - "a00b21260b20012902a40b216a200141a00c6a200141a0186a100a200141" - "a00d6a200141e01c6a418001104c1a200141a00e6a200141c01a6a418001" - "104c1a200141d6126a200141980c6a290300370100200141ce126a200141" - "900c6a290300370100200141c6126a200141880c6a290300370100200141" - "be126a200141800c6a290300370100200141b6126a200141f80b6a290300" - "370100200141ae126a200141f00b6a290300370100200141a6126a200129" - "03e80b370100200120012903e00b37019e1220012d00a00c210520012d00" - "a10c2106200141a00f6a200141a00c6a41027241fe02104c1a200141e006" - "6a200141a00f6a41be03104c1a2026418080808078460d0620014190036a" - "410272200141e0066a41be03104c1a200120263602d006200120063a0091" - "03200120053a0090034100210241bda9c0002d00001a2001206a3702d406" - "41c000100b2220450d07206a4220882262a72122206aa72135200141b00f" - "6a2105200141306a2106410021120340230041206b22092400200941186a" - "221b2006290000225342388620534280fe0383422886842053428080fc07" - "83421886205342808080f80f834208868484205342088842808080f80f83" - "2053421888428080fc07838420534228884280fe03832053423888848484" - "370300200941106a2208200641086a290000225342388620534280fe0383" - "422886842053428080fc0783421886205342808080f80f83420886848420" - "5342088842808080f80f832053421888428080fc07838420534228884280" - "fe0383205342388884848437030020092006290010225342388620534280" - "fe0383422886842053428080fc0783421886205342808080f80f83420886" - "8484205342088842808080f80f832053421888428080fc07838420534228" - "884280fe038320534238888484843703082009200641186a290000225342" - "388620534280fe0383422886842053428080fc0783421886205342808080" - "f80f834208868484205342088842808080f80f832053421888428080fc07" - "838420534228884280fe0383205342388884848437030020094201420042" - "0042004281808080bfb2fdf0c3004291e1e5cd8789fa9928102b200141a0" - "0f6a220c41003a0000200c41286a201b290300370300200c41206a200829" - "0300370300200c41186a2009290308370300200c20092903003703102009" - "41206a240020012d00a00f4101460d1a200141f8066a200541186a290300" - "2257370300200141f0066a200541106a2903002258370300200120052903" - "00225e3703e0062001200541086a29030022653703e80620202012410574" - "6a220641186a2057370300200641106a2058370300200641086a20653703" - "002006205e370300410121122002410171211f4101210220162106201f45" - "0d000b206a42ffffffffffffffff03560d1a2022410674220541f1ffffff" - "074f0d1a2005450d0341bda9c0002d00001a2005100b2206450d07200620" - "352005104c211220624203520d02206a428080808010540d042001419006" - "6a212d20014190056a214720014190046a2148200141f81a6a221f201241" - "386a290300370300200141f01a6a2216201241306a290300370300200141" - "e81a6a2222201241286a290300370300200141e01a6a2209201241206a29" - "0300370300200141d81a6a2223201241186a290300370300200141d01a6a" - "2224201241106a290300370300200120122903003703c01a200120124108" - "6a2903003703c81a2020210541c00021060340200141d80c6a201f290300" - "370300200141d00c6a2016290300370300200141c80c6a20222903003703" - "00200141c00c6a2009290300370300200141b80c6a202329030037030020" - "0141b00c6a2024290300370300200120012903c81a3703a80c2001200129" - "03c01a3703a00c200120053602e00c2001200620126a22023602e40c2001" - "41e01c6a21312002210c4100212e41002136230041a0046b220424002004" - "41306a212b20044180036a2137200441e0036a210f200441f0016a210e20" - "0441c0026a211b200441e0026a2108200441b0026a2149200441d0026a21" - "4a41ff012141034002402004204141ff0071104f2005204141037641f0ff" - "ffff01716a22422903002004290300832159204241086a29030020044108" - "6a29030083215302400240027f0240024002400240024020364101714504" - "4041002053205984500d061a200441e0006a200441206a29030037030020" - "0441e8006a200441286a290300370300200441f0006a202b290300370300" - "200441f8006a200441386a29030037030020044180016a200441406b2903" - "0037030020044188016a200441c8006a2903003703002004200429031037" - "035020042004290318370358202e0d010c030b202e450d0120044188026a" - "200441c8006a222e29030037030020044180026a200441406b2250290300" - "370300200441f8016a200441386a2203290300370300200e202b29030037" - "0300200441e8016a200441286a2236290300370300200441e0016a200441" - "206a2242290300370300200420042903183703d801200420042903103703" - "d001200441d8036a224b4200370300200441d0036a220242003703002004" - "42003703f803200442003703f003200442003703e803200442013703e003" - "200442003703c803200442003703c003024002400240200441d0016a2004" - "41c0036a104a450440200e200f104a450d010b204b420037030020024200" - "370300200442003703f803200442003703f003200442003703e803200442" - "013703e003200442003703c803200442003703c003027f0240200441d001" - "6a200441c0036a104a450440200e200f104a450d010b2049202b29030037" - "0300204941186a202b41186a290300370300204941106a202b41106a2903" - "00370300204941086a202b41086a290300370300200441a0026a20422903" - "00370300200441a8026a2036290300370300200420042903103703900220" - "0420042903183703980220082102204a0c010b204a4200370300200441a0" - "026a4200370300200441a8026a4200370300204a41086a4200370300204a" - "41106a4200370300204a41186a4200370300200442003703900220044200" - "37039802201b210220490b214b2002420037030820024200370300204b42" - "00370308204b4201370300200441c0036a20044190026a20044190026a10" - "40200441f0026a200441c0036a104120042802f002410171450d01200441" - "c8016a203741386a290300370300200441c0016a203741306a2903003703" - "00200441b8016a203741286a290300370300200441b0016a203741206a29" - "0300370300200441a8016a203741186a290300370300200441a0016a2037" - "41106a29030037030020042037290300370390012004203741086a290300" - "370398010c020b200441a0016a2042290300370300200441a8016a203629" - "0300370300200441b0016a202b290300370300200441b8016a2003290300" - "370300200441c0016a2050290300370300200441c8016a202e2903003703" - "00200420042903103703900120042004290318370398010c010b41c4a0c0" - "00412041e4a0c0001021000b2042200441a0016a29030037030020362004" - "41a8016a290300370300202b200441b0016a2903003703002003200441b8" - "016a2903003703002050200441c0016a290300370300202e200441c8016a" - "290300370300200420042903900137031020042004290398013703182053" - "205984500d04200441e0006a2042290300370300200441e8006a20362903" - "00370300200441f0006a202b290300370300200441f8006a200329030037" - "030020044180016a205029030037030020044188016a202e290300370300" - "20042004290310370350200420042903183703580b200441c0036a200441" - "d0006a200c100c0c020b20532059844200520d002041450d044101213641" - "00212e0c050b200441f8036a200c41386a290300370300200441f0036a20" - "0c41306a290300370300200441e8036a200c41286a290300370300200f20" - "0c41206a290300370300200441d8036a200c41186a290300370300200441" - "d0036a200c41106a2903003703002004200c2903003703c0032004200c41" - "086a2903003703c8030b200441c8006a200441f8036a2903003703002004" - "41406b200441f0036a290300370300200441386a200441e8036a29030037" - "0300202b200f290300370300200441286a200441d8036a29030037030020" - "0441206a200441d0036a290300370300200420042903c803370318200420" - "042903c0033703100b4101212e41010b213620410d01202e0d020b4184a1" - "c0001020000b204141016b21410c010b0b20312004290310370300203141" - "086a2004290318370300203141386a200441c8006a290300370300203141" - "306a200441406b290300370300203141286a200441386a29030037030020" - "3141206a200441306a290300370300203141186a200441286a2903003703" - "00203141106a200441206a290300370300200441a0046a2400200541206a" - "2105200141c01a6a200141a00c6a200141e01c6a100c200641406b220641" - "c001470d000b200141b00f6a2205200141c01a6a100d201241c001100e20" - "0141c01a6a200141ed066a200541e000104c41e000104c1a200141e0066a" - "20014190026a100d200141a0186a21024200215c42002154420021532001" - "41e0066a220541386a2903002161200541286a290300215b200529033021" - "592005290320215e027e200529034022652005290350226a84200541c800" - "6a2903002262200541d8006a290300225a84845004402059215c20612154" - "205b2153205e0c010b42002059205e84205b20618484500d001a427f4200" - "427f4200205e42788342c7faf3c3ed82a3903c561b225c205b205c56ad7d" - "205c205b7d225b42f3eab8bce9ada5bfe8007d2253205b54ad7c42017c22" - "5b20597d225442a4cffaf397c9eed7c7007d225c205454ad2059205b56ad" - "7d427f511b20617d42a9c0c689aece93b2307c215442c7faf3c3ed82a390" - "3c205e7d0b21612002206a370350200220653703402002205c3703302002" - "20613703202002205a370358200220623703482002205437033820022053" - "37032820022005290300370300200241186a200541186a29030037030020" - "0241106a200541106a290300370300200241086a200541086a2903003703" - "0020014180196a20014190016a100f200141a01b6a2047100f200141e01c" - "6a200141d0026a100d200141c01d6a2048100f200141e0066a202d100d20" - "0141801f6a20014190036a100f200141c0076a2108420021654200215b42" - "00215c42002153024002400240200141801f6a2202290380012002418801" - "6a290300844200520d0020022903900120024198016a290300844200520d" - "0020022903a001200241a8016a290300844200520d0020022903b0012002" - "41b8016a29030084500d010b200241f8006a2903002159200241e8006a29" - "0300215e2002290370215420022903602161200229035022582002290340" - "226a84200241d8006a290300225a200241c8006a29030022628484420052" - "0440427f4200427f4200206a42788342c7faf3c3ed82a3903c561b226520" - "62206556ad7d206520627d226542f3eab8bce9ada5bfe8007d2253206554" - "ad7c42017c225c20587d225b42a4cffaf397c9eed7c7007d2265205b54ad" - "2058205c56ad7d427f511b205a7d42a9c0c689aece93b2307c215c42c7fa" - "f3c3ed82a3903c206a7d215b0b420021584200216a420021624200215a20" - "542061842059205e84844200520440427f4200427f4200206142788342c7" - "faf3c3ed82a3903c561b22582058205e54ad7d2058205e7d225e42f3eab8" - "bce9ada5bfe8007d226a205e54ad7c42017c225e20547d225842a4cffaf3" - "97c9eed7c7007d2262205854ad2054205e56ad7d427f511b20597d42a9c0" - "c689aece93b2307c215a42c7faf3c3ed82a3903c20617d21580b20082002" - "4180016a22052903003703800120082002290300370300200841b8016a20" - "0541386a290300370300200841b0016a200541306a290300370300200841" - "a8016a200541286a290300370300200841a0016a200541206a2903003703" - "0020084198016a200541186a29030037030020084190016a200541106a29" - "030037030020084188016a200541086a290300370300200841086a200241" - "086a290300370300200841106a200241106a290300370300200841186a20" - "0241186a290300370300200841206a200241206a29030037030020084128" - "6a200241286a290300370300200841306a200241306a2903003703002008" - "41386a200241386a2903003703002008205a370378200820623703702008" - "206a370368200820583703602008205c3703582008206537035020082053" - "3703482008205b3703400c010b2008200241c001104c1a0b200141a00f6a" - "200141a0186a41a002104c1a200141c0116a200141c01a6a41a002104c1a" - "200141e0136a200141e01c6a41a002104c1a20014180166a200141e0066a" - "41a002104c1a200141a00c6a2131230041b0d1006b220024002000410036" - "023820004280808080800237023020004100360244200042808080808002" - "37023c41102133200041306a10362000280234223b200141a00f6a220341" - "e000104c1a20004101360238200341e0006a2102200028023c4504402000" - "413c6a1038200028024021330b2033200241c001104c1a200341a0026a21" - "022000410136024420002802304101460440200041306a10362000280234" - "213b0b203b41e0006a200241e000104c1a2000410236023820034180036a" - "2102200028023c41014604402000413c6a1038200028024021330b203341" - "c0016a200241c001104c1a200341c0046a21022000410236024420002802" - "304102460440200041306a10362000280234213b0b203b41c0016a200241" - "e000104c1a20004103360238200341a0056a2102200028023c4102460440" - "2000413c6a1038200028024021330b20334180036a200241c001104c1a20" - "0341e0066a21022000410336024420002802304103460440200041306a10" - "362000280234213b0b203b41a0026a200241e000104c1a20004104360238" - "200341c0076a2103200028023c41034604402000413c6a10382000280240" - "21330b203341c0046a200341c001104c1a20004104360244200041003602" - "502000428080808080023702482000410036025c20004280808080800237" - "025420004180046a2151200041e00d6a2104200041b0076a212c20004190" - "c1006a2143200041d0c0006a2128200041f0c0006a2144200041c00d6a21" - "0b200041d0286a2106200041d01f6a211820004180c7006a212b200041b0" - "c7006a2107200041c0c7006a213c200041f0c6006a2102200041800e6a21" - "2d200041903b6a213d200041f03a6a2127200041d03a6a213e200041f00d" - "6a213f200041b00d6a221041086a212e200041f8c6006a214c200041b8c7" - "006a214d20004188c7006a214e200041c8c7006a211220004198c7006a21" - "1f200041d8c7006a2122200041a8c7006a2123200041e8c7006a21244110" - "2138411021050340200041e0006a203b204f41e0006c6a22031041200041" - "b0016a2033204f41c0016c6a220d104502402000280260410171450d0020" - "002802b001410171450d00200041a00d6a2003104120002802a00d410171" - "45044041a4a3c0001020000b200041f8026a2211201041386a2903003703" - "00200041f0026a2213201041306a290300370300200041e8026a22092010" - "41286a290300370300200041e0026a2215201041206a2903003703002000" - "41d8026a220f201041186a290300370300200041d0026a2225201041106a" - "290300370300200020102903003703c0022000202e2903003703c8022000" - "280248203946044041002108230041206b220e240002400240200041c800" - "6a221b280200220c417f460d00200c4101742205200c41016a2216200520" - "164b1b220541ffffff1f4b0d0041042005200541044d1b22054106742216" - "41f0ffffff074b0d00200e200c047f200e200c41067436021c200e201b28" - "020436021441100541000b360218200e41086a2016200e41146a1037200e" - "2802084101470d01200e2802101a200e28020c21080b200841b4a3c00010" - "19000b200e28020c210c201b2005360200201b200c360204200e41206a24" - "00200028024c21050b200520394106746a220320002903c0023703002003" - "41386a2011290300370300200341306a2013290300370300200341286a20" - "09290300370300200341206a2015290300370300200341186a200f290300" - "370300200341106a2025290300370300200341086a20002903c802370300" - "2000203941016a2239360250200041a00d6a200d10450240024020002802" - "a00d4101710440200041b03a6a2010418001104c1a200041d80d6a222542" - "00370300200041d00d6a223a4200370300200041c80d6a22294200370300" - "200b4200370300200041b80d6a220d420037030020104200370300203f42" - "00370300203f41086a4200370300203f41106a4200370300203f41186a42" - "00370300203f41206a4200370300203f41286a4200370300200042003703" - "e80d200042013703e00d200042003703a80d200042003703a00d027f0240" - "0240200041b03a6a200041a00d6a104a0d00203e200b104a0d0020272004" - "104a0d00203d202d104a450d010b203c4200370300200220272903003703" - "00203c41086a4200370300203c41106a4200370300203c41186a42003703" - "00203c41206a4200370300203c41286a4200370300200241386a20274138" - "6a290300370300200241306a202741306a290300370300200241286a2027" - "41286a290300370300200241206a202741206a290300370300200241186a" - "202741186a290300370300200241106a202741106a290300370300200241" - "086a202741086a290300370300200041e8c6006a200041e83a6a29030037" - "0300200041e0c6006a200041e03a6a290300370300200041d8c6006a2000" - "41d83a6a290300370300200041d0c6006a203e290300370300200041c8c6" - "006a200041c83a6a290300370300200041c0c6006a200041c03a6a290300" - "370300200020002903b83a3703b846200020002903b03a3703b04620070c" - "010b200041c0c6006a4200370300200041c8c6006a4200370300200041d0" - "c6006a4200370300200041d8c6006a4200370300200041e0c6006a420037" - "0300200041e8c6006a4200370300200042003703b046200042003703b846" - "202b41f000104b1a20020b220342003703082003420137030041bda9c000" - "2d00001a41809901100b221e450d0141002109200041003602b819200020" - "1e3602b419200041e6003602b019200041b03d6a200041b03a6a100a4140" - "212a0340200041a00d6a200041b0c6006a2002102f200041c8c3006a2215" - "200d290300370300200041c0c3006a220f20102903003703002000200029" - "03a80d3703b843200020002903a00d3703b043200041b0c3006a42a4fdf9" - "e1b6c191889e7f42c6cae3a18ba9ade04b42aed88286b4db88945c4294a0" - "e38497e789991842c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b" - "200041a8076a2211200b41186a221b290300370300200041a0076a221320" - "0b41106a22342903003703002000200b41086a2240290300370398072000" - "200b2903003703900720004190076a42a4fdf9e1b6c191889e7f42c6cae3" - "a18ba9ade04b42aed88286b4db88945c4294a0e38497e789991842c7faf3" - "c3ed82a3903c428d95c7c396d2dac0977f102b200041c81f6a2015290300" - "370300200041c01f6a200f29030037030020182000290390073703002018" - "41086a200029039807370300201841106a2013290300370300201841186a" - "2011290300370300200020002903b8433703b81f200020002903b0433703" - "b01f200041e8346a2203200241386a290300370300200041e0346a200241" - "306a290300370300200041d8346a2232200241286a290300370300200041" - "d0346a200241206a290300370300200041c8346a220e200241186a290300" - "370300200041c0346a200241106a2903003703002000200241086a290300" - "3703b834200020022903003703b034200041b0346a20022002102f200041" - "e8376a2219200741386a290300370300200041e0376a200741306a290300" - "370300200041d8376a221a200741286a290300370300200041d0376a2007" - "41206a290300370300200041c8376a222f200741186a2903003703002000" - "41c0376a2230200741106a2903003703002000200741086a2903003703b8" - "37200020072903003703b037200041b0376a20072007102f20002903b837" - "226942018620002903b037226b423f88842155206b420186215402400240" - "027e203029030022664201862069423f8884225342ddb0858ce8b691a8b8" - "7f85202f290300227820787c2066423f887c225642a9c0c689aece93b230" - "8584500440205442c7faf3c3ed82a3903c542055428d95c7c396d2dac097" - "7f542055428d95c7c396d2dac0977f511b450d0242a9c0c689aece93b230" - "215642ddb0858ce8b691a8b87f0c010b205342deb0858ce8b691a8b87f54" - "205642a9c0c689aece93b23054205642a9c0c689aece93b230511b450d01" - "20530b215a2054215f205521580c010b205620532055205442c7faf3c3ed" - "82a3903c7d225f20545aad22547d225942f3eab8bce9ada5bfe8007c2258" - "205954ad2054205556ad7d7c2255205354ad205542a2cffaf397c9eed7c7" - "007c225a205554ad7c50ad7d42a9c0c689aece93b2307d21560b201a2903" - "00226742018620002903d037226f423f88842154206f4201862153024002" - "4020002903e037225e4201862067423f8884225942ddb0858ce8b691a8b8" - "7f852019290300227720777c205e423f887c225542a9c0c689aece93b230" - "8584500440205342c7faf3c3ed82a3903c542054428d95c7c396d2dac097" - "7f542054428d95c7c396d2dac0977f511b450d0142a9c0c689aece93b230" - "215542ddb0858ce8b691a8b87f21602053215b205421700c020b205942de" - "b0858ce8b691a8b87f54205542a9c0c689aece93b23054205542a9c0c689" - "aece93b230511b450d002053215b20542170205921600c010b2055205920" - "54205342c7faf3c3ed82a3903c7d225b20535aad22537d226042f3eab8bc" - "e9ada5bfe8007c2270206054ad2053205456ad7d7c2254205954ad205442" - "a2cffaf397c9eed7c7007c2260205454ad7c50ad7d42a9c0c689aece93b2" - "307d21550b02400240027e205a20667c225a205820697c2254206954ad20" - "54205f206b7c2259206b54ad7c2253205454ad7c7c225442ddb0858ce8b6" - "91a8b87f85205a206654ad2054205a54ad7c205620787c7c225642a9c0c6" - "89aece93b2308584500440205942c7faf3c3ed82a3903c542053428d95c7" - "c396d2dac0977f542053428d95c7c396d2dac0977f511b450d0242a9c0c6" - "89aece93b230215642ddb0858ce8b691a8b87f0c010b205442deb0858ce8" - "b691a8b87f54205642a9c0c689aece93b23054205642a9c0c689aece93b2" - "30511b450d0120540b215f205921582053215c0c010b2056205420532059" - "42c7faf3c3ed82a3903c7d225820595aad22597d225a42f3eab8bce9ada5" - "bfe8007c225c205a54ad2053205954ad7d7c2253205454ad205342a2cffa" - "f397c9eed7c7007c225f205354ad7c50ad7d42a9c0c689aece93b2307d21" - "560b02400240205e20607c225a206720707c2254206754ad2054205b206f" - "7c2259206f54ad7c2253205454ad7c7c225442ddb0858ce8b691a8b87f85" - "205a205e54ad2054205a54ad7c205520777c7c225542a9c0c689aece93b2" - "308584500440205942c7faf3c3ed82a3903c542053428d95c7c396d2dac0" - "977f542053428d95c7c396d2dac0977f511b450d0142a9c0c689aece93b2" - "30215542ddb0858ce8b691a8b87f21542059215a205321590c020b205442" - "deb0858ce8b691a8b87f54205542a9c0c689aece93b23054205542a9c0c6" - "89aece93b230511b450d002059215a205321590c010b2055205420532059" - "42c7faf3c3ed82a3903c7d225a20595aad22607d225b42f3eab8bce9ada5" - "bfe8007c2259205b54ad2053206054ad7d7c2253205454ad205342a2cffa" - "f397c9eed7c7007c2254205354ad7c50ad7d42a9c0c689aece93b2307d21" - "550b200020543703e0222000205a3703d0222000205f3703c02220002058" - "3703b022200020553703e822200020593703d822200020563703c8222000" - "205c3703b822200042d4fdc3d783f6c4cb003703d80d200042f4fbe3f6de" - "f5ab964d3703d00d200042d2b0b4a9ce90e8a7a77f3703c80d200042d2ab" - "8caee8a0afd1643703c00d200042aed5e2f58ca8a78a2b3703b80d200042" - "c3d581df919386df817f3703b00d200042a3dfefced5bcb1dab57f3703a8" - "0d200042e5f184a5c2dbf9b3323703a00d200041b0256a200041a00d6a20" - "0041b0226a102f20002903b825226442018620002903b025226e423f8884" - "2155206e420186215402400240027e20002903c02522704201862064423f" - "8884225342ddb0858ce8b691a8b87f85200041c8256a2219290300226020" - "607c2070423f887c225642a9c0c689aece93b2308584500440205442c7fa" - "f3c3ed82a3903c542055428d95c7c396d2dac0977f542055428d95c7c396" - "d2dac0977f511b450d0242a9c0c689aece93b230215642ddb0858ce8b691" - "a8b87f0c010b205342deb0858ce8b691a8b87f54205642a9c0c689aece93" - "b23054205642a9c0c689aece93b230511b450d0120530b215a2054215f20" - "5521580c010b205620532055205442c7faf3c3ed82a3903c7d225f20545a" - "ad22547d225942f3eab8bce9ada5bfe8007c2258205954ad2054205556ad" - "7d7c2255205354ad205542a2cffaf397c9eed7c7007c225a205554ad7c50" - "ad7d42a9c0c689aece93b2307d21560b200041d8256a221a290300227142" - "018620002903d0252265423f888421542065420186215302400240200029" - "03e025225c4201862071423f8884225942ddb0858ce8b691a8b87f852000" - "41e8256a2217290300225b205b7c205c423f887c225542a9c0c689aece93" - "b2308584500440205342c7faf3c3ed82a3903c542054428d95c7c396d2da" - "c0977f542054428d95c7c396d2dac0977f511b450d0142a9c0c689aece93" - "b230215542ddb0858ce8b691a8b87f21682053216c205421730c020b2059" - "42deb0858ce8b691a8b87f54205542a9c0c689aece93b23054205542a9c0" - "c689aece93b230511b450d002053216c20542173205921680c010b205520" - "592054205342c7faf3c3ed82a3903c7d226c20535aad22537d226842f3ea" - "b8bce9ada5bfe8007c2273206854ad2053205456ad7d7c2254205954ad20" - "5442a2cffaf397c9eed7c7007c2268205454ad7c50ad7d42a9c0c689aece" - "93b2307d21550b02400240027e205a20707c225a205820647c2254206454" - "ad2054205f206e7c2259206e54ad7c2253205454ad7c7c225442ddb0858c" - "e8b691a8b87f85205a207054ad2054205a54ad7c205620607c7c225a42a9" - "c0c689aece93b2308584500440205942c7faf3c3ed82a3903c542053428d" - "95c7c396d2dac0977f542053428d95c7c396d2dac0977f511b450d0242a9" - "c0c689aece93b230215a42ddb0858ce8b691a8b87f0c010b205442deb085" - "8ce8b691a8b87f54205a42a9c0c689aece93b23054205a42a9c0c689aece" - "93b230511b450d0120540b21742059217d2053216a0c010b205a20542053" - "205942c7faf3c3ed82a3903c7d227d20595aad22567d225942f3eab8bce9" - "ada5bfe8007c226a205954ad2053205654ad7d7c2256205454ad205642a2" - "cffaf397c9eed7c7007c2274205654ad7c50ad7d42a9c0c689aece93b230" - "7d215a0b02400240205c20687c2259207120737c2256207154ad20562065" - "206c7c2253206554ad7c2254205654ad7c7c225642ddb0858ce8b691a8b8" - "7f852059205c54ad2056205954ad7c2055205b7c7c225f42a9c0c689aece" - "93b2308584500440205342c7faf3c3ed82a3903c542054428d95c7c396d2" - "dac0977f542054428d95c7c396d2dac0977f511b450d0142a9c0c689aece" - "93b230215f42ddb0858ce8b691a8b87f21732053217b205421790c020b20" - "5642deb0858ce8b691a8b87f54205f42a9c0c689aece93b23054205f42a9" - "c0c689aece93b230511b450d002053217b20542179205621730c010b205f" - "20562054205342c7faf3c3ed82a3903c7d227b20535aad22557d225342f3" - "eab8bce9ada5bfe8007c2279205354ad2054205554ad7d7c2255205654ad" - "205542a2cffaf397c9eed7c7007c2273205554ad7c50ad7d42a9c0c689ae" - "ce93b2307d215f0b02400240027e207420002903c03422547c2256206a20" - "002903b83422537c2255206a54ad2055207d20002903b03422587c226820" - "7d54ad7c2259205554ad7c7c225542ddb0858ce8b691a8b87f8520562074" - "54ad2055205654ad7c205a200e29030022567c7c226d42a9c0c689aece93" - "b2308584500440206842c7faf3c3ed82a3903c542059428d95c7c396d2da" - "c0977f542059428d95c7c396d2dac0977f511b450d0242a9c0c689aece93" - "b230216d42ddb0858ce8b691a8b87f0c010b205542deb0858ce8b691a8b8" - "7f54206d42a9c0c689aece93b23054206d42a9c0c689aece93b230511b45" - "0d0120550b2172206821752059217a0c010b206d20552059206842c7faf3" - "c3ed82a3903c7d227520685aad22687d226c42f3eab8bce9ada5bfe8007c" - "227a206c54ad2059206854ad7d7c2259205554ad205942a2cffaf397c9ee" - "d7c7007c2272205954ad7c50ad7d42a9c0c689aece93b2307d216d0b0240" - "0240207320002903e03422597c22552079203229030022687c2263207954" - "ad2063207b20002903d034226c7c2261207b54ad7c2262206354ad7c7c22" - "5d42ddb0858ce8b691a8b87f852055207354ad2055205d56ad7c205f2003" - "29030022557c7c226342a9c0c689aece93b2308584500440206142c7faf3" - "c3ed82a3903c542062428d95c7c396d2dac0977f542062428d95c7c396d2" - "dac0977f511b450d0142a9c0c689aece93b230216342ddb0858ce8b691a8" - "b87f215d20612157206221610c020b205d42deb0858ce8b691a8b87f5420" - "6342a9c0c689aece93b23054206342a9c0c689aece93b230511b450d0020" - "612157206221610c010b2063205d2062206142c7faf3c3ed82a3903c7d22" - "5720615aad227c7d227642f3eab8bce9ada5bfe8007c2261207654ad2062" - "207c54ad7d7c2262205d54ad206242a2cffaf397c9eed7c7007c225d2062" - "54ad7c50ad7d42a9c0c689aece93b2307d21630b2011206d370300201320" - "723703002000207a37039807200020753703900720004190076a42a4fdf9" - "e1b6c191889e7f42c6cae3a18ba9ade04b42aed88286b4db88945c4294a0" - "e38497e789991842c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b" - "200d20633703002010205d370300200020613703a80d200020573703a00d" - "200041a00d6a42a4fdf9e1b6c191889e7f42c6cae3a18ba9ade04b42aed8" - "8286b4db88945c4294a0e38497e789991842c7faf3c3ed82a3903c428d95" - "c7c396d2dac0977f102b200041c8286a22032011290300370300200041c0" - "286a220e2013290300370300200620002903a00d370300200641086a2000" - "2903a80d370300200641106a2010290300370300200641186a200d290300" - "37030020002000290398073703b82820002000290390073703b028024002" - "40027e20002903c04722612000290380477c226d204d290300225d204c29" - "03007c2263205d54ad206320002903b047225d20002903f0467c2262205d" - "54ad7c225d206354ad7c7c226342ddb0858ce8b691a8b87f852061206d56" - "ad2063206d54ad7c2012290300204e2903007c7c226d42a9c0c689aece93" - "b2308584500440206242c7faf3c3ed82a3903c54205d428d95c7c396d2da" - "c0977f54205d428d95c7c396d2dac0977f511b450d0242a9c0c689aece93" - "b230216d42ddb0858ce8b691a8b87f0c010b206342deb0858ce8b691a8b8" - "7f54206d42a9c0c689aece93b23054206d42a9c0c689aece93b230511b45" - "0d0120630b217220622175205d217a0c010b206d2063205d206242c7faf3" - "c3ed82a3903c7d227520625aad22627d226142f3eab8bce9ada5bfe8007c" - "227a206154ad205d206254ad7d7c225d206354ad205d42a2cffaf397c9ee" - "d7c7007c2272205d54ad7c50ad7d42a9c0c689aece93b2307d216d0b0240" - "024020002903e047225720002903a0477c226320222903002262201f2903" - "007c225d206254ad205d20002903d04722622000290390477c2261206254" - "ad7c2262205d54ad7c7c225d42ddb0858ce8b691a8b87f852057206356ad" - "205d206354ad7c202429030020232903007c7c226342a9c0c689aece93b2" - "308584500440206142c7faf3c3ed82a3903c542062428d95c7c396d2dac0" - "977f542062428d95c7c396d2dac0977f511b450d0142a9c0c689aece93b2" - "30216342ddb0858ce8b691a8b87f215d20612157206221610c020b205d42" - "deb0858ce8b691a8b87f54206342a9c0c689aece93b23054206342a9c0c6" - "89aece93b230511b450d0020612157206221610c010b2063205d20622061" - "42c7faf3c3ed82a3903c7d225720615aad227c7d227642f3eab8bce9ada5" - "bfe8007c2261207654ad2062207c54ad7d7c2262205d54ad206242a2cffa" - "f397c9eed7c7007c225d206254ad7c50ad7d42a9c0c689aece93b2307d21" - "630b200d206d3703002010207237030020292061370300200b2057370300" - "203a205d37030020252063370300200041c0c0006a224520723703002000" - "41c8c0006a2232206d37030020282057370300200041d8c0006a22142061" - "370300200041e0c0006a205d370300200041e8c0006a221c206337030020" - "0020753703a00d200020753703b0402000207a3703a80d2000207a3703b8" - "40200041b0c0006a200041a00d6a200041a00d6a102f02400240027e2054" - "20667c226d205320697c2262206954ad20622058206b7c2263206b54ad7c" - "225d206254ad7c7c226b42ddb0858ce8b691a8b87f852066206d56ad206b" - "206d54ad7c205620787c7c226942a9c0c689aece93b23085845004402063" - "42c7faf3c3ed82a3903c54205d428d95c7c396d2dac0977f54205d428d95" - "c7c396d2dac0977f511b450d0242a9c0c689aece93b230216942ddb0858c" - "e8b691a8b87f0c010b206b42deb0858ce8b691a8b87f54206942a9c0c689" - "aece93b23054206942a9c0c689aece93b230511b450d01206b0b216d2063" - "2178205d21630c010b2069206b205d206342c7faf3c3ed82a3903c7d2278" - "20635aad22667d226d42f3eab8bce9ada5bfe8007c2263206d54ad205d20" - "6654ad7d7c2266206b54ad206642a2cffaf397c9eed7c7007c226d206654" - "ad7c50ad7d42a9c0c689aece93b2307d21690b024002402059205e7c226b" - "206720687c2266206754ad2066206c206f7c225d206f54ad7c2267206654" - "ad7c7c226642ddb0858ce8b691a8b87f85205e206b56ad2066206b54ad7c" - "205520777c7c226b42a9c0c689aece93b2308584500440205d42c7faf3c3" - "ed82a3903c542067428d95c7c396d2dac0977f542067428d95c7c396d2da" - "c0977f511b450d0142a9c0c689aece93b230216b42ddb0858ce8b691a8b8" - "7f216f205d21772067215e0c020b206642deb0858ce8b691a8b87f54206b" - "42a9c0c689aece93b23054206b42a9c0c689aece93b230511b450d00205d" - "21772067215e2066216f0c010b206b20662067205d42c7faf3c3ed82a390" - "3c7d2277205d5aad226f7d225d42f3eab8bce9ada5bfe8007c225e205d54" - "ad2067206f54ad7d7c2267206654ad206742a2cffaf397c9eed7c7007c22" - "6f206754ad7c50ad7d42a9c0c689aece93b2307d216b0b20002903b84021" - "5d20002903b040216102400240417f20002903c0402267206d8520322903" - "002266206985844200522067206d54206620695420662069511b1b222141" - "7f470440202141ff01710d01206120785a205d20635a205d2063511b0d01" - "0b20662067205d206142c7faf3c3ed82a3903c7c2262206154ad7c226120" - "5d54ad206142f3eab8bce9ada5bfe8007d225d206154ad7c7c2261206754" - "ad7c206142a3cffaf397c9eed7c7007d2275206154ad7c42a9c0c689aece" - "93b2307c21660c010b20672175206121620b205d20637d227a2062207854" - "ad225754ad217c205d206354ad21762014290300215d20002903d0402172" - "02400240417f20002903e0402263206f85201c2903002267206b85844200" - "522063206f542067206b542067206b511b1b2214417f470440201441ff01" - "710d01207220775a205d205e5a205d205e511b0d010b20672063205d2072" - "42c7faf3c3ed82a3903c7c2261207254ad7c2272205d54ad207242f3eab8" - "bce9ada5bfe8007d225d207254ad7c7c2272206354ad7c207242a3cffaf3" - "97c9eed7c7007d227e207254ad7c42a9c0c689aece93b2307c21670c010b" - "2063217e207221610b206d427f85216d2076207c7c2172206f427f852163" - "205d205e54ad205d205e7d225d2061207754ad227c54ad7c217602400240" - "417f20542070852056206085844200522054207056205620605620562060" - "511b1b2214417f470440201441ff01710d012058206e5820532064582053" - "2064511b0d010b206020702064206e42c7faf3c3ed82a3903c7c225e206e" - "54ad7c226f206454ad206f42f3eab8bce9ada5bfe8007d226e206f54ad7c" - "7c2264207054ad206442a3cffaf397c9eed7c7007d2270206454ad7c7c42" - "a9c0c689aece93b2307c21600c010b206e215e2064216e0b206d20757c21" - "64420120727d21722063207e7c216f420120767d2175206020567d205442" - "7f85227620707c2260207654ad206042012053206e56ad7d206e20537d22" - "702058205e56ad226e54ad7d7c227f206054ad7c50ad7d21762070206e7d" - "216e205e20587d217e02400240417f2059205c852055205b858442005220" - "59205c562055205b562055205b511b1b2214417f470440201441ff01710d" - "012065206c5a206820715820682071511b0d010b205b205c2071206542c7" - "faf3c3ed82a3903c7c225e206554ad7c2260207154ad206042f3eab8bce9" - "ada5bfe8007d2271206054ad7c7c2260205c54ad206042a3cffaf397c9ee" - "d7c7007d225c206054ad7c7c42a9c0c689aece93b2307c215b0c010b2065" - "215e0b206420727c2160206f20757c2170200f200041c0c6006a29030037" - "03002015200041c8c6006a290300370300200041d0c3006a200041d0c600" - "6a290300370300200041d8c3006a2214200041d8c6006a29030037030020" - "0041e0c3006a200041e0c6006a290300370300200041e8c3006a221c2000" - "41e8c6006a2903003703002000207f3703c02b2000207e3703b02b200020" - "002903b0463703b043200020002903b8463703b8432000205e206c7d3703" - "d02b200020763703c82b2000206e3703b82b2000207120687d226e205e20" - "6c54ad225e7d3703d82b20002059427f852265205c7c225c420120682071" - "56ad7d205e206e56ad7d7c22713703e02b2000205b20557d205c207156ad" - "205c206554ad7c50ad7d3703e82b200041b0c3006a200041b0c6006a2000" - "41b0c6006a102f200041c8076a22212017290300370300200041c0076a20" - "0041e0256a290300370300200041b8076a2217201a290300370300202c20" - "0041d0256a290300370300201120192903003703002013200041c0256a29" - "0300370300200020002903b82537039807200020002903b0253703900720" - "004190076a200041b0256a200041b0256a102f0240417f20542074852056" - "205a858442005220542074542056205a542056205a511b1b2219417f4704" - "40201941ff01710d012058207d5a2053206a5a2053206a511b0d010b2056" - "20542053205842c7faf3c3ed82a3903c7c225b205854ad7c2258205354ad" - "205842f3eab8bce9ada5bfe8007d225c205854ad7c7c2253205454ad2053" - "42a3cffaf397c9eed7c7007d2254205354ad7c7c42a9c0c689aece93b230" - "7c2156205b2158205c21530b2064206d5421192060206454211a2063206f" - "56210c206f20705621162056205a7d2074427f85225a20547c2256205a54" - "ad205642012053206a54ad7d2053206a7d22542058207d54ad225354ad7d" - "7c225a205654ad7c50ad7d215b205420537d21532058207d7d2158024002" - "40417f20592073852055205f858442005220592073542055205f54205520" - "5f511b1b2208417f470440200841ff01710d01206c207b5a206820795a20" - "682079511b0d010b205520592068206c42c7faf3c3ed82a3903c7c225620" - "6c54ad7c225c206854ad205c42f3eab8bce9ada5bfe8007d2254205c54ad" - "7c7c225c205954ad205c42a3cffaf397c9eed7c7007d2259205c54ad7c7c" - "42a9c0c689aece93b2307c21550c010b206c2156206821540b2019ad215c" - "201aad2164200cad21712016ad216c2000205a3703c031200020583703b0" - "3120002056207b7d3703d0312000205b3703c831200020533703b8312000" - "205420797d22532056207b54ad225a7d3703d83120002073427f85225820" - "597c225642012054207954ad7d2053205a54ad7d7c22543703e031200020" - "55205f7d2054205654ad2056205854ad7c50ad7d3703e831200041b0c600" - "6a200041b01f6a200041b0316a102f2010200e290300370300200d200329" - "0300370300200b20062903003703002029200041d8286a29030037030020" - "3a200041e0286a2903003703002025200041e8286a290300370300200020" - "002903b0283703a00d200020002903b8283703a80d200041a00d6a200041" - "b0286a200041b0286a102f20002903980722544201862000290390072253" - "423f888421552053420186215a02400240027e20002903a0072259420186" - "2054423f8884225f42ddb0858ce8b691a8b87f852011290300226820687c" - "2059423f887c225642a9c0c689aece93b2308584500440205a42c7faf3c3" - "ed82a3903c542055428d95c7c396d2dac0977f542055428d95c7c396d2da" - "c0977f511b450d0242a9c0c689aece93b230215642ddb0858ce8b691a8b8" - "7f0c010b205f42deb0858ce8b691a8b87f54205642a9c0c689aece93b230" - "54205642a9c0c689aece93b230511b450d01205f0b216f205a215e205521" - "740c010b2056205f2055205a42c7faf3c3ed82a3903c7d225e205a5aad22" - "5a7d225842f3eab8bce9ada5bfe8007c2274205854ad2055205a54ad7d7c" - "2255205f54ad205542a2cffaf397c9eed7c7007c226f205554ad7c50ad7d" - "42a9c0c689aece93b2307d21560b205c20647c2173206c20717c216c2017" - "290300225a42018620002903b007225f423f8884215b205f420186215c02" - "40024020002903c0072258420186205a423f8884226442ddb0858ce8b691" - "a8b87f852021290300227120717c2058423f887c225542a9c0c689aece93" - "b2308584500440205c42c7faf3c3ed82a3903c54205b428d95c7c396d2da" - "c0977f54205b428d95c7c396d2dac0977f511b450d0142a9c0c689aece93" - "b230215542ddb0858ce8b691a8b87f216e205c2165205b216a0c020b2064" - "42deb0858ce8b691a8b87f54205542a9c0c689aece93b23054205542a9c0" - "c689aece93b230511b450d00205c2165205b216a2064216e0c010b205520" - "64205b205c42c7faf3c3ed82a3903c7d2265205c5aad225c7d226e42f3ea" - "b8bce9ada5bfe8007c226a206e54ad205b205c54ad7d7c225b206454ad20" - "5b42a2cffaf397c9eed7c7007c226e205b54ad7c50ad7d42a9c0c689aece" - "93b2307d21550b2073502103206c50210e02400240027e2059206f7c225b" - "205420747c2264205454ad20642053205e7c225c205354ad7c2253206454" - "ad7c7c225442ddb0858ce8b691a8b87f852059205b56ad2054205b54ad7c" - "205620687c7c225642a9c0c689aece93b2308584500440205c42c7faf3c3" - "ed82a3903c542053428d95c7c396d2dac0977f542053428d95c7c396d2da" - "c0977f511b450d0242a9c0c689aece93b230215642ddb0858ce8b691a8b8" - "7f0c010b205442deb0858ce8b691a8b87f54205642a9c0c689aece93b230" - "54205642a9c0c689aece93b230511b450d0120540b215b205c2164205321" - "5c0c010b205620542053205c42c7faf3c3ed82a3903c7d2264205c5aad22" - "597d225b42f3eab8bce9ada5bfe8007c225c205b54ad2053205954ad7d7c" - "2253205454ad205342a2cffaf397c9eed7c7007c225b205354ad7c50ad7d" - "42a9c0c689aece93b2307d21560b2003ad2168206620697d216c200ead21" - "662067206b7d2167024002402058206e7c2269205a206a7c2254205a54ad" - "2054205f20657c2259205f54ad7c2253205454ad7c7c225442ddb0858ce8" - "b691a8b87f852058206956ad2054206954ad7c205520717c7c225542a9c0" - "c689aece93b2308584500440205942c7faf3c3ed82a3903c542053428d95" - "c7c396d2dac0977f542053428d95c7c396d2dac0977f511b450d0142a9c0" - "c689aece93b230215542ddb0858ce8b691a8b87f215a2059217120532169" - "0c020b205442deb0858ce8b691a8b87f54205542a9c0c689aece93b23054" - "205542a9c0c689aece93b230511b450d0020592171205321692054215a0c" - "010b205520542053205942c7faf3c3ed82a3903c7d227120595aad22597d" - "225a42f3eab8bce9ada5bfe8007c2269205a54ad2053205954ad7d7c2253" - "205454ad205342a2cffaf397c9eed7c7007c225a205354ad7c50ad7d42a9" - "c0c689aece93b2307d21550b206c20687d216b207a20577d215320672066" - "7d2168205d207c7d215920002903a80d215820002903a00d216602400240" - "417f20002903b00d225f205b85200d290300225420568584420052205b20" - "5f56205420565420542056511b1b2203417f470440200341ff01710d0120" - "642066582058205c5a2058205c511b0d010b2054205f2058206642c7faf3" - "c3ed82a3903c7c226c206654ad7c2267205854ad206742f3eab8bce9ada5" - "bfe8007d2266206754ad7c7c2258205f54ad7c205842a3cffaf397c9eed7" - "c7007d2267205854ad7c42a9c0c689aece93b2307c21540c010b205f2167" - "2066216c205821660b206220787d215f206120777d2158205420567d205b" - "427f85225420677c2256205454ad2056205c206656ad2066205c7d225420" - "64206c56ad225b54ad7c7d42017c2266205654ad7c50ad7d21672054205b" - "7d216f206c20647d216c2029290300215b20002903c00d21640240024041" - "7f20002903d00d2254205a8520252903002256205585844200522054205a" - "54205520565620552056511b1b2203417f470440200341ff01710d012064" - "20715a205b20695a205b2069511b0d010b20562054205b206442c7faf3c3" - "ed82a3903c7c225c206454ad7c2264205b54ad206442f3eab8bce9ada5bf" - "e8007d225b206454ad7c7c2264205454ad7c206442a3cffaf397c9eed7c7" - "007d2254206454ad7c42a9c0c689aece93b2307c21560c010b2064215c0b" - "20002066370380472000206c3703f0462000205c20717d37039047200020" - "67370388472000206f3703f8462000205b20697d2264205c207154ad225c" - "7d370398472000205a427f85225a20547c2254205b206954ad205c206456" - "ad7c7d42017c225b3703a0472000205620557d2054205a54ad2054205b56" - "ad7c50ad7d3703a847200020683703e831200020703703e0312000205937" - "03d831200020583703d031200020603703c0312000206b3703c831200020" - "5f3703b031200020533703b8312007200041b0346a200041b0316a102f42" - "002164200042003703e831200042003703e031200042003703d831200042" - "013703d031200042003703c831200042003703c031200042003703b83120" - "0042093703b031200041b02e6a200041b0316a200041b02b6a102f420021" - "714200216c4200216642002167205f2060842053206b8484420052044042" - "c7faf3c3ed82a3903c205f7d2166427f4200427f4200205f42788342c7fa" - "f3c3ed82a3903c561b22562053205656ad7d205620537d225642f3eab8bc" - "e9ada5bfe8007d2267205654ad7c42017c225620607d225542a4cffaf397" - "c9eed7c7007d2271205554ad2056206054ad7d427f511b206b7d42a9c0c6" - "89aece93b2307c216c0b4200216b4200216f4200215e2058207084205920" - "688484420052044042c7faf3c3ed82a3903c20587d2164427f4200427f42" - "00205842788342c7faf3c3ed82a3903c561b22562056205954ad7d205620" - "597d225642f3eab8bce9ada5bfe8007d226b205654ad7c42017c22562070" - "7d225542a4cffaf397c9eed7c7007d226f205554ad2056207054ad7d427f" - "511b20687d42a9c0c689aece93b2307c215e0b20002903b8432254420186" - "20002903b0432253423f888421552053420186215a02400240027e200029" - "03c04322594201862054423f8884225f42ddb0858ce8b691a8b87f852015" - "290300227020707c2059423f887c225642a9c0c689aece93b23085845004" - "40205a42c7faf3c3ed82a3903c542055428d95c7c396d2dac0977f542055" - "428d95c7c396d2dac0977f511b450d0242a9c0c689aece93b230215642dd" - "b0858ce8b691a8b87f0c010b205f42deb0858ce8b691a8b87f54205642a9" - "c0c689aece93b23054205642a9c0c689aece93b230511b450d01205f0b21" - "68205a2174205521730c010b2056205f2055205a42c7faf3c3ed82a3903c" - "7d2274205a5aad225a7d225842f3eab8bce9ada5bfe8007c2273205854ad" - "2055205a54ad7d7c2255205f54ad205542a2cffaf397c9eed7c7007c2268" - "205554ad7c50ad7d42a9c0c689aece93b2307d21560b2014290300225a42" - "018620002903d043225f423f88842160205f420186215b02400240200029" - "03e0432258420186205a423f8884226942ddb0858ce8b691a8b87f85201c" - "290300225c205c7c2058423f887c225542a9c0c689aece93b23085845004" - "40205b42c7faf3c3ed82a3903c542060428d95c7c396d2dac0977f542060" - "428d95c7c396d2dac0977f511b450d0142a9c0c689aece93b230215542dd" - "b0858ce8b691a8b87f216e205b21652060216a0c020b206942deb0858ce8" - "b691a8b87f54205542a9c0c689aece93b23054205542a9c0c689aece93b2" - "30511b450d00205b21652060216a2069216e0c010b205520692060205b42" - "c7faf3c3ed82a3903c7d2265205b5aad225b7d226e42f3eab8bce9ada5bf" - "e8007c226a206e54ad205b206056ad7d7c2260206954ad206042a2cffaf3" - "97c9eed7c7007c226e206054ad7c50ad7d42a9c0c689aece93b2307d2155" - "0b02400240027e205920687c225b205420737c2269205454ad2069205320" - "747c2260205354ad7c2253206954ad7c7c225442ddb0858ce8b691a8b87f" - "852059205b56ad2054205b54ad7c205620707c7c225642a9c0c689aece93" - "b2308584500440206042c7faf3c3ed82a3903c542053428d95c7c396d2da" - "c0977f542053428d95c7c396d2dac0977f511b450d0242a9c0c689aece93" - "b230215642ddb0858ce8b691a8b87f0c010b205442deb0858ce8b691a8b8" - "7f54205642a9c0c689aece93b23054205642a9c0c689aece93b230511b45" - "0d0120540b215b20602170205321690c010b205620542053206042c7faf3" - "c3ed82a3903c7d227020605aad22597d226042f3eab8bce9ada5bfe8007c" - "2269206054ad2053205954ad7d7c2253205454ad205342a2cffaf397c9ee" - "d7c7007c225b205354ad7c50ad7d42a9c0c689aece93b2307d21560b0240" - "02402058206e7c2260205a206a7c2254205a54ad2054205f20657c225920" - "5f54ad7c2253205454ad7c7c225442ddb0858ce8b691a8b87f8520582060" - "56ad2054206054ad7c2055205c7c7c225542a9c0c689aece93b230858450" - "0440205942c7faf3c3ed82a3903c542053428d95c7c396d2dac0977f5420" - "53428d95c7c396d2dac0977f511b450d0142a9c0c689aece93b230215542" - "ddb0858ce8b691a8b87f21542059215a205321590c020b205442deb0858c" - "e8b691a8b87f54205542a9c0c689aece93b23054205542a9c0c689aece93" - "b230511b450d002059215a205321590c010b205520542053205942c7faf3" - "c3ed82a3903c7d225a20595aad225f7d225842f3eab8bce9ada5bfe8007c" - "2259205854ad2053205f54ad7d7c2253205454ad205342a2cffaf397c9ee" - "d7c7007c2254205354ad7c50ad7d42a9c0c689aece93b2307d21550b2000" - "41e81c6a2203200041e82e6a290300370300200041e01c6a220e200041e0" - "2e6a290300370300200041d81c6a2219200041d82e6a2903003703002000" - "41d01c6a221a200041d02e6a290300370300200041c81c6a2217200041c8" - "2e6a290300370300200041c01c6a2214200041c02e6a2903003703002000" - "20002903b82e3703b81c200020002903b02e3703b01c20002802b0192009" - "460440200041b0196a41c4a2c000103920002802b419211e0b2017290300" - "21532019290300215f2003290300215820002903b81c2160201e200941c0" - "016c6a220320553703b80120142903002155201a290300215c200e290300" - "216820002903b01c2174200320543703b001200320593703a8012003205a" - "3703a00120032056370398012003205b3703900120032069370388012003" - "2070370380012003205e3703782003206f3703702003206b370368200320" - "643703602003206c37035820032071370350200320673703482003206637" - "034020032074370300200341386a2058370300200341306a206837030020" - "0341286a205f370300200341206a205c370300200341186a205337030020" - "0341106a2055370300200341086a20603703002000200941016a22033602" - "b81902400240200041b0196a027f02400240202a41e4a1c0006a2d000041" - "016b0e03000401040b200041b0c9006a200041b0c6006a200041b03a6a10" - "49200041b0c9006a210e200320002802b019470d0241d4a2c0000c010b20" - "0041b0ce006a200041b0c6006a200041b03d6a1049200041b0ce006a210e" - "200320002802b019470d0141e4a2c0000b103920002802b419211e0b201e" - "200341c0016c6a200e41c001104c1a2000200941026a22033602b8190b20" - "032109202a41016a222a0d000b200042a0dcae8f86aaf9e4163703c80720" - "0042948fe8babd91b3d2cb003703c007200042cebbf2dbd0c38ad7323703" - "b807200042a297bfa0c6a3f5b2163703b007200042f7a3e4fb84f3d1d92f" - "3703a807200042c3e2e6aacf87fb85cc003703a0072000428ce68c968ce2" - "b0c6b77f37039807200042bdaabdbbf1aae5f1997f370390072015203e41" - "186a290300370300200f203e41106a2903003703002000203e41086a2903" - "003703b8432000203e2903003703b043200041b0c3006a42c6faf3c3ed82" - "a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689" - "aece93b23042c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b200d" - "200041c83a6a2903003703002010200041c03a6a290300370300200b2000" - "2903b043370300204020002903b8433703002034200f290300370300201b" - "2015290300370300200020002903b83a3703a80d200020002903b03a3703" - "a00d200041b0c0006a20004190076a200041a00d6a102f2000429a8984e2" - "ca978fe0073703c807200042abdee5e3feb4ad82073703c007200042d2b7" - "89fd98b99fc0213703b807200042e3e18eb1b2ecdfe9827f3703b0072000" - "42dcebebc4d4e0bc9e063703a807200042b9f38bb78bd3b1af5c3703a007" - "20004298b3a5ceda9db8d55b37039807200042daa6808de7a880aa5c3703" - "90072015203d41186a290300370300200f203d41106a2903003703002000" - "203d41086a2903003703b8432000203d2903003703b043200041b0c3006a" - "42c6faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8" - "b87f42a9c0c689aece93b23042c7faf3c3ed82a3903c428d95c7c396d2da" - "c0977f102b200d202741186a2903003703002010202741106a2903003703" - "00200b20002903b043370300204020002903b8433703002034200f290300" - "370300201b20152903003703002000202741086a2903003703a80d200020" - "272903003703a00d204420004190076a200041a00d6a102f200042a0dcae" - "8f86aaf9e4163703e843200042948fe8babd91b3d2cb003703e043200042" - "cebbf2dbd0c38ad7323703d843200042a297bfa0c6a3f5b2163703d04320" - "0042f7a3e4fb84f3d1d92f3703c843200042c3e2e6aacf87fb85cc003703" - "c0432000428ce68c968ce2b0c6b77f3703b843200042bdaabdbbf1aae5f1" - "997f3703b043202f202841186a2903003703002030202841106a29030037" - "03002000202841086a2903003703b837200020282903003703b037200041" - "b0376a42c6faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8" - "b691a8b87f42a9c0c689aece93b23042c7faf3c3ed82a3903c428d95c7c3" - "96d2dac0977f102b2011203229030037030020132045290300370300202c" - "20002903b037370300202c41086a220d20002903b837370300202c41106a" - "22092030290300370300202c41186a2215202f2903003703002000200029" - "03b84037039807200020002903b04037039007200041a00d6a200041b0c3" - "006a20004190076a102f2000429a8984e2ca978fe0073703e843200042ab" - "dee5e3feb4ad82073703e043200042d2b789fd98b99fc0213703d8432000" - "42e3e18eb1b2ecdfe9827f3703d043200042dcebebc4d4e0bc9e063703c8" - "43200042b9f38bb78bd3b1af5c3703c04320004298b3a5ceda9db8d55b37" - "03b843200042daa6808de7a880aa5c3703b043202f204341186a29030037" - "03002030204341106a2903003703002000204341086a2903003703b83720" - "0020432903003703b037200041b0376a42c6faf3c3ed82a3903c428d95c7" - "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b23042c7" - "faf3c3ed82a3903c428d95c7c396d2dac0977f102b2011204441186a2903" - "003703002013204441106a290300370300202c20002903b037370300200d" - "20002903b837370300200920302903003703002015202f29030037030020" - "00204441086a2903003703980720002044290300370390072004200041b0" - "c3006a20004190076a102f200041b0c3006a200041a00d6a100a20004190" - "076a200041b0c6006a200041b0c0006a104920002802b019221120034604" - "40200041b0196a41a4a2c000103920002802b019211120002802b419211e" - "0b201e200341c0016c6a20004190076a41c001104c1a2000200341016a22" - "0d3602b819200041a00d6a200041b0c6006a200041b0c3006a1049200d20" - "11470d02200041b0196a41b4a2c000103920002802b419211e0c020b41c4" - "a3c00010200b000b201e200d41c0016c6a200041a00d6a41c001104c1a20" - "0041b8196a220d200341026a36020020004180036a200041b03a6a418001" - "104c1a205141086a200d280200360200205120002902b019370200200028" - "025420464604404100211b230041206b220e240002400240200041d4006a" - "22162802002209417f460d00410420094101742208200941016a220c2008" - "200c4b1b2208200841044d1b220cad4290017e22534220884200520d0020" - "53a7220841f0ffffff074b0d00200e2009047f200e20094190016c36021c" - "200e201628020436021441100541000b360218200e41086a2008200e4114" - "6a1037200e2802084101470d01200e2802101a200e28020c211b0b201b41" - "d4a3c0001019000b200e28020c21092016200c3602002016200936020420" - "0e41206a2400200028025821380b203820464190016c6a20004180036a41" - "9001104c1a2000204641016a224636025c0b204f41016a224f4104470d00" - "0b0240024002400240024002400240024002400240024002402046450440" - "2000280254210320004190076a41f002104b1a20030d010c020b41002118" - "200041a0076a41f002104b1a200042003703980720004201370390072046" - "2039203920464b1b210820384184016a211b200041e00e6a2134200041b0" - "cf006a2119200041f0ce006a211a200041f0c3006a2114200041b0c4006a" - "2121200041b0ca006a2140200041f0c9006a2145200041b0c7006a214c20" - "004190086a212c200041f0c6006a214d200041d0076a212820004190096a" - "211c200041d0096a214e200041d0086a2117200041d0ce006a2110200041" - "d0c9006a21134100210c0240024002400340200041b0c3006a2000419007" - "6a2017103b200042003703e849200042003703e049200042003703d84920" - "0042013703d049200042003703c849200042003703c049200042003703b8" - "49200042093703b049200041b0ce006a204e200041b0c9006a102f201941" - "386a2203201c41386a290300370300201941306a2202201c41306a290300" - "370300201941286a2207201c41286a290300370300201941206a220b201c" - "41206a290300370300201941186a220d201c41186a290300370300201941" - "106a2211201c41106a290300370300201941086a2206201c41086a290300" - "3703002019201c290300370300201a2017290300370300201a41086a2209" - "201741086a290300370300201a41106a2215201741106a29030037030020" - "1a41186a220f201741186a290300370300201a41206a2225201741206a29" - "0300370300201a41286a2229201741286a290300370300201a41306a222a" - "201741306a290300370300201a41386a221e201741386a29030037030020" - "0041b0c6006a200041b0ce006a20004190076a1030204d201a2028103020" - "4c2019202c1030200041b0ce006a201741c001104c1a200041b0c9006a20" - "004190076a2017103020452028201a10302040202c20191030200041b0ce" - "006a200041b0c6006a200041b0c9006a103b200041b0c9006a200041b0ce" - "006a200041b0c3006a103c200042003703e846200042003703e046200042" - "003703d846200042013703d046200042003703c846200042003703c04620" - "0042003703b846200042093703b046200041b0ce006a2021200041b0c600" - "6a102f201a20002903b043370300200920002903b8433703002015200041" - "c0c3006a290300370300200f200041c8c3006a2903003703002025200041" - "d0c3006a2903003703002029200041d8c3006a290300370300202a200041" - "e0c3006a290300370300201e200041e8c3006a2903003703002003201441" - "386a2903003703002002201441306a2903003703002007201441286a2903" - "00370300200b201441206a290300370300200d201441186a290300370300" - "2011201441106a2903003703002006201441086a29030037030020192014" - "290300370300200041a00d6a200041b0c9006a200041b0ce006a103c2000" - "41b0ce006a200041b0c3006a200041b0c3006a1030201a20142014103020" - "192021202110302034200041b0ce006a41c001104c1a20004190076a2000" - "41a00d6a418003104c1a200c41016a2116201b2106200521022008210f02" - "7f02402039450440200c41a4a1c0006a2d00000d01201841016a21182016" - "220c41c000460d040c030b02400340200641046a280200220320184b0440" - "200241386a2903002156200241306a2903002155200241286a2903002154" - "200241206a2903002153200041c8ce006a220d2006280200201841c0016c" - "6a220341d8006a290300370300200041c0ce006a2211200341d0006a2903" - "003703002000200341c8006a2903003703b84e200020032903403703b04e" - "200041b0ce006a205320542055205642c7faf3c3ed82a3903c428d95c7c3" - "96d2dac0977f102b200041b80d6a2207200341f8006a2903003703002000" - "41b00d6a220b200341f0006a2903003703002000200341e8006a29030037" - "03a80d200020032903603703a00d200041a00d6a205320542055205642c7" - "faf3c3ed82a3903c428d95c7c396d2dac0977f102b200041c8c9006a2225" - "200d290300370300200041c0c9006a222920112903003703002013200029" - "03a00d370300201341086a222a20002903a80d370300201341106a221e20" - "0b290300370300201341186a222f2007290300370300200020002903b84e" - "3703b849200020002903b04e3703b049200241186a290300215620024110" - "6a2903002155200241086a290300215420022903002153200041c8c6006a" - "220920034198016a290300370300200041c0c6006a221520034190016a29" - "0300370300200020034188016a2903003703b84620002003290380013703" - "b046200041b0c6006a205320542055205642c7faf3c3ed82a3903c428d95" - "c7c396d2dac0977f102b2007200341b8016a290300370300200b200341b0" - "016a2903003703002000200341a8016a2903003703a80d200020032903a0" - "013703a00d200041a00d6a205320542055205642c7faf3c3ed82a3903c42" - "8d95c7c396d2dac0977f102b200d20092903003703002011201529030037" - "0300201020002903a00d370300201041086a223020002903a80d37030020" - "1041106a223a200b290300370300201041186a2232200729030037030020" - "0020002903b8463703b84e200020002903b0463703b04e200041a00d6a20" - "004190076a2003200041b0c9006a200041b0ce006a104820004190076a20" - "0041a00d6a418003104c1a20064190016a2106200241406b2102200f4101" - "6b220f0d010c020b0b201820034194a2c0001010000b201b210620052102" - "2008210e201841016a220f200c41a4a1c0006a2d0000450d011a03402006" - "41046a2802002203200f4b0440200241386a2903002156200241306a2903" - "002155200241286a2903002154200241206a2903002153200d2006280200" - "200f41c0016c6a220341d8006a2903003703002011200341d0006a290300" - "3703002000200341c8006a2903003703b84e200020032903403703b04e20" - "0041b0ce006a205320542055205642c7faf3c3ed82a3903c428d95c7c396" - "d2dac0977f102b2007200341f8006a290300370300200b200341f0006a29" - "03003703002000200341e8006a2903003703a80d200020032903603703a0" - "0d200041a00d6a205320542055205642c7faf3c3ed82a3903c428d95c7c3" - "96d2dac0977f102b2025200d290300370300202920112903003703002013" - "20002903a00d370300202a20002903a80d370300201e200b290300370300" - "202f2007290300370300200020002903b84e3703b849200020002903b04e" - "3703b049200241186a2903002156200241106a2903002155200241086a29" - "0300215420022903002153200920034198016a2903003703002015200341" - "90016a290300370300200020034188016a2903003703b846200020032903" - "80013703b046200041b0c6006a205320542055205642c7faf3c3ed82a390" - "3c428d95c7c396d2dac0977f102b2007200341b8016a290300370300200b" - "200341b0016a2903003703002000200341a8016a2903003703a80d200020" - "032903a0013703a00d200041a00d6a205320542055205642c7faf3c3ed82" - "a3903c428d95c7c396d2dac0977f102b200d200929030037030020112015" - "290300370300201020002903a00d370300203020002903a80d370300203a" - "200b29030037030020322007290300370300200020002903b8463703b84e" - "200020002903b0463703b04e200041a00d6a20004190076a2003200041b0" - "c9006a200041b0ce006a104820004190076a200041a00d6a418003104c1a" - "20064190016a2106200241406b2102200e41016b220e0d010c020b0b200f" - "20034184a2c0001010000b201841026a0b21182016220c41c000470d000b" - "2039450d0020384184016a2107200041d0ce006a210b200041d0c9006a21" - "0d201841c0016c2125200521022008210903402018200741046a28020022" - "034f0d02200241386a2903002156200241306a2903002155200241286a29" - "03002154200241206a2903002153200041c8ce006a221320072802002025" - "6a220341d8006a290300370300200041c0ce006a2206200341d0006a2903" - "003703002000200341c8006a2903003703b84e200020032903403703b04e" - "200041b0ce006a205320542055205642c7faf3c3ed82a3903c428d95c7c3" - "96d2dac0977f102b200041b80d6a2211200341f8006a2903003703002000" - "41b00d6a2210200341f0006a2903003703002000200341e8006a29030037" - "03a80d200020032903603703a00d200041a00d6a205320542055205642c7" - "faf3c3ed82a3903c428d95c7c396d2dac0977f102b200041c8c9006a2013" - "290300370300200041c0c9006a2006290300370300200d20002903a00d37" - "0300200d41086a20002903a80d370300200d41106a201029030037030020" - "0d41186a2011290300370300200020002903b84e3703b849200020002903" - "b04e3703b049200241186a2903002156200241106a290300215520024108" - "6a290300215420022903002153200041c8c6006a221520034198016a2903" - "00370300200041c0c6006a220f20034190016a2903003703002000200341" - "88016a2903003703b84620002003290380013703b046200041b0c6006a20" - "5320542055205642c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b" - "2011200341b8016a2903003703002010200341b0016a2903003703002000" - "200341a8016a2903003703a80d200020032903a0013703a00d200041a00d" - "6a205320542055205642c7faf3c3ed82a3903c428d95c7c396d2dac0977f" - "102b201320152903003703002006200f290300370300200b20002903a00d" - "370300200b41086a20002903a80d370300200b41106a2010290300370300" - "200b41186a2011290300370300200020002903b8463703b84e2000200029" - "03b0463703b04e200041a00d6a20004190076a2003200041b0c9006a2000" - "41b0ce006a104820004190076a200041a00d6a418003104c1a2007419001" - "6a2107200241406b2102200941016b22090d000b20384184016a21072000" - "41d0ce006a210b200041d0c9006a210d201841016a221841c0016c210f20" - "05210203402018200741046a28020022034f0d03200241386a2903002156" - "200241306a2903002155200241286a2903002154200241206a2903002153" - "200041c8ce006a22132007280200200f6a220341d8006a29030037030020" - "0041c0ce006a2206200341d0006a2903003703002000200341c8006a2903" - "003703b84e200020032903403703b04e200041b0ce006a20532054205520" - "5642c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b200041b80d6a" - "2211200341f8006a290300370300200041b00d6a2210200341f0006a2903" - "003703002000200341e8006a2903003703a80d200020032903603703a00d" - "200041a00d6a205320542055205642c7faf3c3ed82a3903c428d95c7c396" - "d2dac0977f102b200041c8c9006a2013290300370300200041c0c9006a20" - "06290300370300200d20002903a00d370300200d41086a20002903a80d37" - "0300200d41106a2010290300370300200d41186a20112903003703002000" - "20002903b84e3703b849200020002903b04e3703b049200241186a290300" - "2156200241106a2903002155200241086a29030021542002290300215320" - "0041c8c6006a220920034198016a290300370300200041c0c6006a221520" - "034190016a290300370300200020034188016a2903003703b84620002003" - "290380013703b046200041b0c6006a205320542055205642c7faf3c3ed82" - "a3903c428d95c7c396d2dac0977f102b2011200341b8016a290300370300" - "2010200341b0016a2903003703002000200341a8016a2903003703a80d20" - "0020032903a0013703a00d200041a00d6a205320542055205642c7faf3c3" - "ed82a3903c428d95c7c396d2dac0977f102b201320092903003703002006" - "2015290300370300200b20002903a00d370300200b41086a20002903a80d" - "370300200b41106a2010290300370300200b41186a201129030037030020" - "0020002903b8463703b84e200020002903b0463703b04e200041a00d6a20" - "004190076a2003200041b0c9006a200041b0ce006a104820004190076a20" - "0041a00d6a418003104c1a20074190016a2107200241406b210220084101" - "6b22080d000b0b20004190046a20004190076a418003104c1a200041b03d" - "6a20004190046a103d200041b03a6a200041d0056a221f103d2000420037" - "03e834200042003703e034200042003703d834200042013703d034200042" - "003703c834200042003703c034200042003703b834200042093703b03420" - "0041b0ce006a200041b03b6a200041b0346a102f200041b8cf006a223620" - "0041f83a6a290300370300200041c0cf006a2237200041803b6a29030037" - "0300200041c8cf006a2242200041883b6a290300370300200041d0cf006a" - "2241200041903b6a290300370300200041d8cf006a2247200041983b6a29" - "0300370300200041e0cf006a2248200041a03b6a290300370300200041e8" - "cf006a224b200041a83b6a290300370300200041f8ce006a222220002903" - "b83a37030020004180cf006a2223200041c03a6a22492903003703002000" - "4188cf006a2224200041c83a6a224a29030037030020004190cf006a224f" - "200041d03a6a225029030037030020004198cf006a2227200041d83a6a22" - "39290300370300200041a0cf006a223f200041e03a6a223c290300370300" - "200041a8cf006a223e200041e83a6a2244290300370300200020002903f0" - "3a3703b04f200020002903b03a3703f04e200041b0376a200041b03d6a20" - "0041b0ce006a103c200041e8106a2217200041e8376a220f290300370300" - "200041e0106a2214200041e0376a2225290300370300200041d8106a221c" - "200041d8376a2229290300370300200041d0106a2221200041d0376a222a" - "290300370300200041c8106a220c200041c8376a221e2903003703002000" - "41c0106a2216200041c0376a222f290300370300200020002903b8373703" - "b810200020002903b0373703b010200041b0106a200041b0376a200041b0" - "376a102f200041e8136a2208200041a8386a222c290300370300200041e0" - "136a2228200041a0386a221b290300370300200041d8136a223420004198" - "386a2240290300370300200041d0136a224520004190386a224c29030037" - "0300200041c8136a221020004188386a224d290300370300200041c0136a" - "221320004180386a224e290300370300200041c0316a2230200041c0386a" - "223d290300370300200041c8316a223a200041c8386a2243290300370300" - "200041d0316a2232200041d0386a2251290300370300200041d8316a220e" - "200041d8386a2204290300370300200041e0316a2219200041e0386a222e" - "290300370300200041e8316a221a200041e8386a222d2903003703002000" - "200041f8376a22122903003703b813200020002903f0373703b013200020" - "002903b0383703b0312000200041b8386a222b2903003703b831200041b0" - "136a200041f0376a2215200041b0386a2218102f200042003703e8342000" - "42003703e034200042003703d834200042013703d034200042003703c834" - "200042003703c034200042003703b834200042093703b034200041b0ce00" - "6a200041b0136a200041b0346a102f2008200041e8ce006a220329030037" - "03002028200041e0ce006a22022903003703002034200041d8ce006a2207" - "2903003703002045200041d0ce006a220d2903003703002010200041c8ce" - "006a22112903003703002013200041c0ce006a220b290300370300200020" - "002903b84e3703b813200020002903b04e3703b013200041b80a6a220620" - "0c290300370300200041b00a6a22092016290300370300200020002903b8" - "103703a80a200020002903b0103703a00a200041a00a6a20002903b01320" - "002903b8132013290300201029030042c7faf3c3ed82a3903c428d95c7c3" - "96d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20" - "0041c83d6a22132017290300370300200041c03d6a221020142903003703" - "002000201c2903003703b83d200020212903003703b03d200041b03d6a20" - "4529030020342903002028290300200829030042c7faf3c3ed82a3903c42" - "8d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b2" - "30102d201120062903002256370300200b20092903002255370300200d20" - "002903b03d2254370300200220102903002253370300200720002903b83d" - "225937030020032013290300225a370300200020002903a80a225f3703b8" - "4e200020002903a00a22583703b04e2017205a3703002014205337030020" - "1c205937030020212054370300200c205637030020162055370300200020" - "5f3703b810200020583703b010200041e8166a2217202d29030037030020" - "0041e0166a2214202e290300370300200041d8166a221c20042903003703" - "00200041d0166a22212051290300370300200041c8166a220c2043290300" - "370300200041c0166a2216203d2903003703002000202b2903003703b816" - "200020002903b0383703b016200041b0166a20182018102f200041b0ce00" - "6a200041b0166a200041b0346a102f201720032903003703002014200229" - "0300370300201c20072903003703002021200d290300370300200c201129" - "03003703002016200b290300370300200041c0196a2208202f2903003703" - "00200041c8196a2228201e290300370300200041d0196a2234202a290300" - "370300200041d8196a22452029290300370300200041e0196a223d202529" - "0300370300200041e8196a2243200f290300370300200020002903b84e37" - "03b816200020002903b04e3703b016200020002903b0373703b019200020" - "002903b8373703b819200041e8226a202c290300370300200041e0226a20" - "1b290300370300200041d8226a2040290300370300200041d0226a204c29" - "0300370300200041c8226a204d290300370300200041c0226a204e290300" - "370300200020122903003703b822200020002903f0373703b022200041b0" - "196a200041b0376a2015102f2006200c2903003703002009201629030037" - "0300200020002903b8163703a80a200020002903b0163703a00a200041a0" - "0a6a20002903b01920002903b8192008290300202829030042c7faf3c3ed" - "82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c6" - "89aece93b230102d20132017290300370300201020142903003703002000" - "201c2903003703b83d200020212903003703b03d200041b03d6a20342903" - "002045290300203d290300204329030042c7faf3c3ed82a3903c428d95c7" - "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d" - "201120062903002256370300200b20092903002255370300200d20002903" - "b03d2254370300200220102903002253370300200720002903b83d225937" - "030020032013290300225a370300200020002903a80a225f3703b84e2000" - "20002903a00a22583703b04e2017205a37030020142053370300201c2059" - "37030020212054370300200c2056370300201620553703002000205f3703" - "b816200020583703b016200041e81c6a2217202c290300370300200041e0" - "1c6a2214201b290300370300200041d81c6a221c20402903003703002000" - "41d01c6a2221204c290300370300200041c81c6a220c204d290300370300" - "200041c01c6a2216204e290300370300200020122903003703b81c200020" - "002903f0373703b01c200041b01c6a20152015102f200041e81f6a220820" - "0f290300370300200041e01f6a222c2025290300370300200041d81f6a22" - "282029290300370300200041d01f6a221b202a290300370300200041c81f" - "6a2234201e290300370300200041c01f6a2240202f290300370300200020" - "002903b8373703b81f200020002903b0373703b01f200041b01f6a200041" - "b0376a2018102f2006200c29030037030020092016290300370300200020" - "002903b81c3703a80a200020002903b01c3703a00a200041a00a6a200029" - "03b01f20002903b81f2040290300203429030042c7faf3c3ed82a3903c42" - "8d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b2" - "30102d20132017290300370300201020142903003703002000201c290300" - "3703b83d200020212903003703b03d200041b03d6a201b29030020282903" - "00202c290300200829030042c7faf3c3ed82a3903c428d95c7c396d2dac0" - "977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2011200629" - "03002256370300200b20092903002255370300200d20002903b03d225437" - "0300200220102903002253370300200720002903b83d2259370300200320" - "13290300225a370300200020002903a80a225f3703b84e200020002903a0" - "0a22583703b04e2017205a37030020142053370300201c20593703002021" - "2054370300200c2056370300201620553703002000205f3703b81c200020" - "583703b01c200041b0316a2018200041b0166a102f200041b0226a201520" - "0041b01c6a102f200041b0ce006a200041b0316a200041b0226a1030201a" - "200329030037030020192002290300370300200e20072903003703002032" - "200d290300370300203a20112903003703002030200b2903003703002000" - "20002903b84e3703b831200020002903b04e3703b031200041b0ce006a20" - "0041b0316a200041b0346a102f201a200329030037030020192002290300" - "370300200e20072903003703002032200d290300370300203a2011290300" - "3703002030200b290300370300200041c0256a202f290300370300200041" - "c8256a201e290300370300200041d0256a202a290300370300200041d825" - "6a2029290300370300200041e0256a2025290300370300200041e8256a20" - "0f290300370300200020002903b84e3703b831200020002903b04e3703b0" - "31200020002903b0373703b025200020002903b8373703b825200041b025" - "6a200041b0376a200041b0106a102f200041b0ce006a200041b0316a2000" - "41b0256a1030201a200329030037030020192002290300370300200e2007" - "2903003703002032200d290300370300203a20112903003703002030200b" - "290300370300200020002903b84e3703b831200020002903b04e3703b031" - "200041b03d6a200041b0316a103120002802b03d4101710440200041e82e" - "6a2206200041f83d6a22092903002256370300200041e02e6a2229200041" - "f03d6a222a2903002255370300200041d82e6a221e200041e83d6a221529" - "03002254370300200041d02e6a222f200041e03d6a221829030022533703" - "00200041c82e6a2230200041d83d6a220f2903002259370300200041c02e" - "6a223a200041d03d6a2225290300225a370300200041c0286a2232205a37" - "0300200041c8286a220e2059370300200041d0286a221920533703002000" - "41d8286a221a2054370300200041e0286a22172055370300200041e8286a" - "22142056370300200020002903c03d22563703b02e200020563703b02820" - "00201329030022563703b82e200020563703b828200041b0286a20102000" - "41b0106a102f200041e82b6a221c2009290300370300200041e02b6a2221" - "202a290300370300200041d82b6a222a2015290300370300200041d02b6a" - "220c2018290300370300200041c82b6a2216200f290300370300200041c0" - "2b6a22082025290300370300200020132903003703b82b200020002903c0" - "3d3703b02b200041b02b6a2010200041b0166a102f200041b02e6a201020" - "0041b01c6a102f2003201429030037030020022017290300370300200720" - "1a290300370300200d20192903003703002011200e290300370300200b20" - "32290300370300202220002903b82b370300202320082903003703002024" - "2016290300370300204f200c2903003703002027202a290300370300203f" - "2021290300370300203e201c290300370300200020002903b8283703b84e" - "200020002903b0283703b04e200020002903b02b3703f04e204b20062903" - "00370300204820292903003703002047201e2903003703002041202f2903" - "00370300204220302903003703002037203a290300370300203620002903" - "b82e370300200020002903b02e3703b04f200041c0c0006a200041b0ce00" - "6a41c001104c2106200042003703b840200042013703b040200041b0ce00" - "6a20004190046a2006103b200041b03d6a201f2006103b200041f0cf006a" - "200041b03d6a103e200041b00d6a200041b0ce006a418003104c21292000" - "42003703a80d200042013703a00d200041f0c4006a201f103e200041b0c3" - "006a20004190046a41c001104c1a200041b0c6006a200041b0c3006a2029" - "103f200742003703002002420037030020034200370300200042a9c0c689" - "aece93b2303703c84e200042b099b385febcf6b6de003703c04e200042bd" - "dcd9dcfbd3c1c7423703b84e200042c8faf383d69cd1de643703b04e2000" - "42003703d04e200041b0c0006a200041f0c6006a200041b0ce006a102f20" - "0742003703002002420037030020034200370300200042003703c84e2000" - "42ac97d286eaf99af1d9003703c04e200042cfb8ede69afe98f9543703b8" - "4e200042feffffbf97e6d1b1d7003703b04e200042003703d04e200041b0" - "3e6a200041b0c7006a200041b0ce006a102f2010200041c0c6006a290300" - "3703002013200041c8c6006a2903003703002025200041d0c6006a290300" - "370300200f200041d8c6006a2903003703002018200041e0c6006a290300" - "3703002015200041e8c6006a290300370300200920002903b84037030020" - "0041803e6a2006290300370300200041883e6a200041c8c0006a29030037" - "0300200041903e6a200041d0c0006a290300370300200041983e6a200041" - "d8c0006a2210290300370300200041a03e6a200041e0c0006a2213290300" - "370300200041a83e6a200041e8c0006a2206290300370300200020002903" - "b0463703b03d200020002903b8463703b83d200020002903b0403703f03d" - "200742003703002002420037030020034200370300200042a9c0c689aece" - "93b2303703c84e200042b099b385febcf6b6de003703c04e200042bddcd9" - "dcfbd3c1c7423703b84e200042c8faf383d69cd1de643703b04e20004200" - "3703d04e200041b03a6a200041b0c8006a200041b0ce006a102f20104200" - "3703002013420037030020064200370300200042003703c840200042ac97" - "d286eaf99af1d9003703c040200042cfb8ede69afe98f9543703b8402000" - "42feffffbf97e6d1b1d7003703b040200042003703d040200041b0cf006a" - "2210200041f0c8006a200041b0c0006a102f200b20004180c8006a290300" - "370300201120004188c8006a290300370300200d20004190c8006a290300" - "370300200720004198c8006a2903003703002002200041a0c8006a290300" - "3703002003200041a8c8006a290300370300202220002903b83a37030020" - "2320492903003703002024204a290300370300204f205029030037030020" - "272039290300370300203f203c290300370300203e204429030037030020" - "0020002903f0473703b04e2000200041f8c7006a2903003703b84e200020" - "002903b03a3703f04e20394200370300203c420037030020444200370300" - "200042a9c0c689aece93b2303703c83a200042b099b385febcf6b6de0037" - "03c03a200042bddcd9dcfbd3c1c7423703b83a200042c9faf383d69cd1de" - "643703b03a200042003703d03a200041b0c0006a200041b0ce006a200041" - "b03a6a102f200041f0c0006a200041f0ce006a200041b03a6a102f200041" - "b0c1006a2010200041b03a6a102f200041b0c9006a200041b03d6a41c001" - "104c1a200041f0ca006a200041b0c0006a41c001104c1a200041a0076a22" - "0d200041b0c9006a200041b0c6006a103f20004200370398072000420137" - "039007200041a00a6a200d418003104c1a200042003703c8492000420037" - "03c049200042003703b849200042f193a4d3c4d6e4f4c4003703b0494100" - "2107200b41f002104b1a200042003703b84e200042013703b04e41ff0121" - "03200041286a210b0340200041206a200341ff0071104f200b2903002000" - "41b0c9006a200341037641f0ffffff01716a220229030883215620002903" - "20200229030083215520074101710440200041a00d6a200041b0ce006a10" - "46200041b0ce006a200041a00d6a418003104c1a0b205520568442005204" - "40200041a00d6a200d200041b0ce006a103f200041b0ce006a200041a00d" - "6a418003104c1a410121070b200341016b2203417f470d000b200041f011" - "6a200041f0cf006a103e200041b0106a200041b0ce006a41c001104c1a20" - "0041b0136a200041b0106a1046200041b0166a200041b0136a1046200041" - "b0196a200041b0166a200041b0136a103f200042003703c8492000420037" - "03c049200042003703b849200042f193a4d3c4d6e4f4c4003703b0494100" - "2107200041c0ce006a41f002104b1a200042003703b84e200042013703b0" - "4e41ff012103200041186a210b0340200041106a200341ff0071104f200b" - "290300200041b0c9006a200341037641f0ffffff01716a22022903088321" - "562000290310200229030083215520074101710440200041a00d6a200041" - "b0ce006a1046200041b0ce006a200041a00d6a418003104c1a0b20552056" - "844200520440200041a00d6a200041b0196a200041b0ce006a103f200041" - "b0ce006a200041a00d6a418003104c1a410121070b200341016b2203417f" - "470d000b200041f01d6a200041f0cf006a103e200041b01c6a200041b0ce" - "006a41c001104c1a200041b01f6a200041b01c6a1046200042003703c849" - "200042003703c049200042003703b849200042f193a4d3c4d6e4f4c40037" - "03b04941002107200041c0ce006a41f002104b1a200042003703b84e2000" - "42013703b04e41ff012103200041086a210b03402000200341ff0071104f" - "200b290300200041b0c9006a200341037641f0ffffff01716a2202290308" - "8321562000290300200229030083215520074101710440200041a00d6a20" - "0041b0ce006a1046200041b0ce006a200041a00d6a418003104c1a0b2055" - "2056844200520440200041a00d6a200041b01f6a200041b0ce006a103f20" - "0041b0ce006a200041a00d6a418003104c1a410121070b200341016b2203" - "417f470d000b200041f0236a2203200041f0cf006a2211103e200041b022" - "6a200041b0ce006a41c001104c1a200041f0266a200041f01a6a103e2000" - "41b0256a200041b0196a41c001104c1a200041f0296a2003103e200041b0" - "286a200041b0226a41c001104c1a200041b02b6a200041b0286a200041b0" - "1c6a103f200041b02e6a200041b02b6a200041b0256a103f200041b0316a" - "200041b02e6a200041b0136a103f200041b0346a200041b02e6a200041b0" - "1c6a103f200041b0376a200d200041b0346a103f200041b03a6a200041b0" - "316a41011047200041a00d6a200041f0326a41011047200042e6cfeba7bb" - "dee5b4243703e8492000428e97d490e19f9f99a67f3703e049200042e58f" - "bbf7f8cee4bcf4003703d849200042acc5cd87f88bbcae4a3703d0492000" - "42dfcf96c3c2e3adc2123703c849200042e0969ab7d7fbe7dc683703c049" - "200042f6c2bcc982c187a9dc003703b849200042f0c8a7e6adbbcd855637" - "03b049200041b0ce006a200041a00d6a200041b0c9006a102f200041f0ce" - "006a2210200041e00d6a220d200041b0c9006a102f200041b0cf006a2213" - "200041a00e6a2203200041b0c9006a102f200041f03b6a200041b0ce006a" - "41c001104c1a200041b03d6a200041b03a6a200041b0376a103f200041c8" - "0d6a22024200370300200041d00d6a22074200370300200041d80d6a220b" - "4200370300200042a9c0c689aece93b2303703b80d200042b099b385febc" - "f6b6de003703b00d200042bddcd9dcfbd3c1c7423703a80d200042c8faf3" - "83d69cd1de643703a00d200042003703c00d200041b0ce006a200041f02e" - "6a200041a00d6a102f2002420037030020074200370300200b4200370300" - "200042003703b80d200042ac97d286eaf99af1d9003703b00d200042cfb8" - "ede69afe98f9543703a80d200042feffffbf97e6d1b1d7003703a00d2000" - "42003703c00d200041b0ca006a200041b02f6a200041a00d6a102f200041" - "c0c9006a200041c02e6a290300370300200041c8c9006a200041c82e6a29" - "0300370300200041d0c9006a200041d02e6a290300370300200041d8c900" - "6a200041d82e6a290300370300200041e0c9006a200041e02e6a29030037" - "0300200041e8c9006a200041e82e6a290300370300200041f8c9006a2000" - "2903b84e37030020004180ca006a200041c0ce006a290300370300200041" - "88ca006a200041c8ce006a29030037030020004190ca006a200041d0ce00" - "6a29030037030020004198ca006a200041d8ce006a220629030037030020" - "0041a0ca006a200041e0ce006a2209290300370300200041a8ca006a2000" - "41e8ce006a2215290300370300200020002903b02e3703b0492000200029" - "03b82e3703b849200020002903b04e3703f0492002420037030020074200" - "370300200b4200370300200042a9c0c689aece93b2303703b80d200042b0" - "99b385febcf6b6de003703b00d200042bddcd9dcfbd3c1c7423703a80d20" - "0042c8faf383d69cd1de643703a00d200042003703c00d200041b0c6006a" - "200041b0306a200041a00d6a102f20064200370300200942003703002015" - "4200370300200042003703c84e200042ac97d286eaf99af1d9003703c04e" - "200042cfb8ede69afe98f9543703b84e200042feffffbf97e6d1b1d70037" - "03b04e200042003703d04e2003200041f0306a200041b0ce006a102f2000" - "41b00d6a220620004180306a290300370300200041b80d6a220920004188" - "306a290300370300200041c00d6a221520004190306a2903003703002002" - "20004198306a2903003703002007200041a0306a290300370300200b2000" - "41a8306a290300370300200041e80d6a20002903b846370300200041f00d" - "6a200041c0c6006a290300370300200041f80d6a200041c8c6006a290300" - "370300200041800e6a200041d0c6006a290300370300200041880e6a2000" - "41d8c6006a2202290300370300200041900e6a200041e0c6006a22072903" - "00370300200041980e6a200041e8c6006a220b2903003703002000200029" - "03f02f3703a00d2000200041f82f6a2903003703a80d200020002903b046" - "3703e00d2002420037030020074200370300200b4200370300200042a9c0" - "c689aece93b2303703c846200042b099b385febcf6b6de003703c0462000" - "42bddcd9dcfbd3c1c7423703b846200042c9faf383d69cd1de643703b046" - "200042003703d046200041b0ce006a200041a00d6a200041b0c6006a102f" - "2010200d200041b0c6006a102f20132003200041b0c6006a102f200041b0" - "c0006a200041b0c9006a41c001104c1a200041f0c1006a200041b0ce006a" - "41c001104c1a200041b0c3006a200041b0c0006a200041b03d6a103f2000" - "41f0c7006a200041e00b6a103e200041b0c6006a200041a00a6a41c00110" - "4c1a200041b0c9006a200041b0c6006a200041b0316a103f200041b0ce00" - "6a200041b0c9006a41031047200041a00d6a200041f0ca006a4103104720" - "0042f3fa9ddfe096fed5003703a84e2000429da7d8abb3dcfbe5063703a0" - "4e200042ecf3d0beb9bce981ff003703984e200042818283a6bfc5aacaf6" - "003703904e200042bbc98be4fcb9a0ee193703884e20004290d5b285cd91" - "d8f46f3703804e200042caa4d7f2dbf1aca6897f3703f84d200042ffccd2" - "f691a7dfb7683703f04d200041b0cc006a200041a00d6a200041f0cd006a" - "102f200041f0cc006a200d200041f0cd006a102f200041b0cd006a200320" - "0041f0cd006a102f2011200041b0cc006a41c001104c1a2006200041b0ce" - "006a200041b0c3006a103f2009290300215620002903b00d215520004190" - "076a201541f002104c1a20384184016a2103024002400240024002400240" - "0340200341046b280200220204402003280200220b41046b280200220741" - "7871220d200241c0016c220241044108200741037122071b72490d022007" - "4100200d20024127724b1b0d03200b10040b20034190016a210320464101" - "6b22460d000b200028025422030440203841046b28020022024178712207" - "20034190016c220341044108200241037122021b72490d03200241002007" - "200341276a4b1b0d04203810040b20002802482203450d0b200541046b28" - "0200220241787122072003410674220341044108200241037122021b7249" - "0d0420024100200720034127724b1b0d05200510040c0b0b41f996c00041" - "2e41a897c0001011000b41b897c000412e41e897c0001011000b41f996c0" - "00412e41a897c0001011000b41b897c000412e41e897c0001011000b41f9" - "96c000412e41a897c0001011000b41b897c000412e41e897c0001011000b" - "41f4a2c000411f4194a3c0001021000b2018200341f4a1c0001010000b20" - "18200341e4a1c0001010000b203841046b28020022024178712207200341" - "90016c220341044108200241037122021b72490d02200241002007200341" - "276a4b1b0d03203810040b200028024822030440200541046b2802002202" - "41787122072003410674220341044108200241037122021b72490d042002" - "4100200720034127724b1b0d05200510040b42002156420121550b203120" - "5637030820312055370300203141106a20004190076a41f002104c1a2000" - "28023c22030440203341046b28020022024178712207200341c0016c2203" - "41044108200241037122021b72490d0520024100200720034127724b1b0d" - "06203310040b200028023022030440203b41046b28020022024178712207" - "200341e0006c220341044108200241037122021b72490d07200241002007" - "200341276a4b1b0d08203b10040b200041b0d1006a24000c080b41f996c0" - "00412e41a897c0001011000b41b897c000412e41e897c0001011000b41f9" - "96c000412e41a897c0001011000b41b897c000412e41e897c0001011000b" - "41f996c000412e41a897c0001011000b41b897c000412e41e897c0001011" - "000b41f996c000412e41a897c0001011000b41b897c000412e41e897c000" - "1011000b200141f0066a41f002104b1a200142003703e806200142013703" - "e006200141a00c6a200141e0066a104a0d03200141c00c6a20014180076a" - "104a0d03200141e00c6a200141a0076a104a0d03200141800d6a200141c0" - "076a104a0d03200141a00d6a200141e0076a104a0d03200141c00d6a2001" - "4180086a104a0d03200141e00d6a200141a0086a104a0d03200141800e6a" - "200141c0086a104a0d03200141a00e6a200141e0086a104a0d03200141c0" - "0e6a20014180096a104a0d03200141e00e6a200141a0096a104a0d032001" - "41800f6a200141c0096a104a1a0c030b2002450d05200641046b28020022" - "05417871221241044108200541037122051b20026a490d0c200541002012" - "200241276a4b1b0d0d200610040c050b20012802a00b2205450d04200820" - "05410674100e0c040b206a428080808010540d0020122005100e0b202041" - "c000100e2026450d0220352026410674100e0c020b4100410041dc91c000" - "1010000b20012802e01c1a0b205241046b2802002205417871220641c600" - "41ca00200541037122051b490d1420054100200641ea004f1b0d15205210" - "04201d41046b280200220541787141e40041e800200541037122061b490d" - "162006410020054188014f1b0d17201d1004200a41046b28020022054178" - "71221d418802418c02200541037122051b490d1820054100201d41ac024f" - "1b0d19200a1004200141c0206a240041010f0b000b230041206b22052400" - "200541003602182005410136020c200541a099c000360208200542043702" - "10200541086a41f88bc000101a000b41f996c000412e41a897c000101100" - "0b41b897c000412e41e897c0001011000b41f996c000412e41a897c00010" - "11000b41b897c000412e41e897c0001011000b41f996c000412e41a897c0" - "001011000b41b897c000412e41e897c0001011000b4120201241cc8fc000" - "1012000b418001201241dc8fc0001012000b41c001201241ec8fc0001012" - "000b41a002201241fc8fc0001012000b41a00241a002418c90c000101000" - "0b41a10241a102419c90c0001010000b41a20241a20241ac90c000101000" - "0b41a30241a30241bc90c0001010000b230041306b220224002002410436" - "0204200241643602002002410236020c200241b884c00036020820024202" - "3702142002200241046aad4280808080108437032820022002ad42808080" - "8010843703202002200241206a360210200241086a41cc90c000101a000b" - "2009201241cc90c0001012000b200120012d00a10f3a00e00641b89cc000" - "412b200141e0066a41988ec00041d892c0001013000b41a89cc000101400" - "0b41f996c000412e41a897c0001011000b41b897c000412e41e897c00010" - "11000b41f996c000412e41a897c0001011000b41b897c000412e41e897c0" - "001011000b41f996c000412e41a897c0001011000b41b897c000412e41e8" - "97c0001011000b962502087f017e02400240024002400240024002402000" - "41f4014d0440418ca9c000280200220341102000410b6a41f80371200041" - "0b491b220441037622017622004103710d0120044194a9c0002802004d0d" - "0720000d024190a9c00028020022000d030c070b2000410b6a2201417871" - "21044190a9c0002802002208450d06411f2107200041f4ffff074d044020" - "04410620014108766722006b7641017120004101746b413e6a21070b4100" - "20046b2101200741027441f4a5c0006a2802002203450440410021000c04" - "0b410021002004411920074101766b41002007411f471b74210503400240" - "200328020441787122062004490d00200620046b220620014f0d00200321" - "02200622010d0041002101200321000c060b200328021422062000200620" - "032005411d764104716a41106a2802002203471b200020061b2100200541" - "0174210520030d000b0c030b02402000417f7341017120016a2205410374" - "22004184a7c0006a22042000418ca7c0006a280200220128020822024704" - "402002200436020c200420023602080c010b418ca9c0002003417e200577" - "713602000b20012000410372360204200020016a22002000280204410172" - "360204200141086a0f0b0240200020017441022001742200410020006b72" - "7168220641037422014184a7c0006a22022001418ca7c0006a2802002200" - "28020822054704402005200236020c200220053602080c010b418ca9c000" - "2003417e200677713602000b20002004410372360204200020046a220520" - "0120046b2204410172360204200020016a20043602004194a9c000280200" - "2203044020034178714184a7c0006a2102419ca9c0002802002101027f41" - "8ca9c00028020022064101200341037674220371450440418ca9c0002003" - "20067236020020020c010b20022802080b21032002200136020820032001" - "36020c2001200236020c200120033602080b419ca9c00020053602004194" - "a9c0002004360200200041086a0f0b20006841027441f4a5c0006a280200" - "220228020441787120046b21012002210302400340024002402002280210" - "22000d00200228021422000d002003280218210702400240200320032802" - "0c2200460440200341144110200328021422001b6a28020022020d014100" - "21000c020b20032802082202200036020c200020023602080c010b200341" - "146a200341106a20001b21050340200521062002220041146a200041106a" - "200028021422021b210520004114411020021b6a28020022020d000b2006" - "41003602000b2007450d032003200328021c41027441f4a5c0006a220228" - "020047044020074110411420072802102003461b6a20003602002000450d" - "040c020b2002200036020020000d014190a9c0004190a9c000280200417e" - "200328021c77713602000c030b200028020441787120046b220220012001" - "20024b22021b21012000200320021b2103200021020c010b0b2000200736" - "021820032802102202044020002002360210200220003602180b20032802" - "142202450d0020002002360214200220003602180b02400240200141104f" - "044020032004410372360204200320046a22042001410172360204200120" - "046a20013602004194a9c0002802002205450d0120054178714184a7c000" - "6a2102419ca9c0002802002100027f418ca9c00028020022064101200541" - "037674220571450440418ca9c000200520067236020020020c010b200228" - "02080b2105200220003602082005200036020c2000200236020c20002005" - "3602080c010b2003200120046a2200410372360204200020036a22002000" - "2802044101723602040c010b419ca9c00020043602004194a9c000200136" - "02000b200341086a0f0b2000200272450440410021024102200774220041" - "0020006b722008712200450d0320006841027441f4a5c0006a2802002100" - "0b2000450d010b03402002200020022000280204417871220320046b2206" - "20014922071b200320044922051b210220012006200120071b20051b2101" - "20002802102203047f20030520002802140b22000d000b0b2002450d0020" - "044194a9c00028020022004d2001200020046b4f710d0020022802182107" - "024002402002200228020c2200460440200241144110200228021422001b" - "6a28020022030d01410021000c020b20022802082203200036020c200020" - "033602080c010b200241146a200241106a20001b21050340200521062003" - "220041146a200041106a200028021422031b210520004114411020031b6a" - "28020022030d000b200641003602000b02402007450d0002402002200228" - "021c41027441f4a5c0006a22032802004704402007411041142007280210" - "2002461b6a20003602002000450d020c010b2003200036020020000d0041" - "90a9c0004190a9c000280200417e200228021c77713602000c010b200020" - "0736021820022802102203044020002003360210200320003602180b2002" - "2802142203450d0020002003360214200320003602180b0240200141104f" - "044020022004410372360204200220046a22042001410172360204200120" - "046a200136020020014180024f0440411f210020044200370210200141ff" - "ffff074d04402001410620014108766722006b7641017120004101746b41" - "3e6a21000b2004200036021c200041027441f4a5c0006a21034101200074" - "22054190a9c0002802007145044020032004360200200420033602182004" - "200436020c200420043602084190a9c0004190a9c0002802002005723602" - "000c030b0240024020012003280200220528020441787146044020052100" - "0c010b2001411920004101766b41002000411f471b742103034020052003" - "411d764104716a41106a22062802002200450d0220034101742103200021" - "0520002802044178712001470d000b0b20002802082201200436020c2000" - "2004360208200441003602182004200036020c200420013602080c030b20" - "062004360200200420053602182004200436020c200420043602080c020b" - "200141f801714184a7c0006a2100027f418ca9c000280200220341012001" - "41037674220171450440418ca9c000200120037236020020000c010b2000" - "2802080b2101200020043602082001200436020c2004200036020c200420" - "013602080c010b2002200120046a2200410372360204200020026a220020" - "002802044101723602040b200241086a0f0b024002400240024002400240" - "20044194a9c00028020022004b044020044198a9c00028020022004f0440" - "41002100200441af80046a220241107640002201417f4622050d07200141" - "10742203450d0741a4a9c000410020024180807c7120051b220641a4a9c0" - "002802006a220036020041a8a9c00041a8a9c00028020022012000200020" - "01491b3602000240024041a0a9c0002802002201044041f4a6c000210003" - "4020002802002202200028020422056a2003460d02200028020822000d00" - "0b0c020b41b0a9c00028020022004100200020034d1b45044041b0a9c000" - "20033602000b41b4a9c00041ff1f36020041f8a6c000200636020041f4a6" - "c00020033602004190a7c0004184a7c0003602004198a7c000418ca7c000" - "360200418ca7c0004184a7c00036020041a0a7c0004194a7c00036020041" - "94a7c000418ca7c00036020041a8a7c000419ca7c000360200419ca7c000" - "4194a7c00036020041b0a7c00041a4a7c00036020041a4a7c000419ca7c0" - "0036020041b8a7c00041aca7c00036020041aca7c00041a4a7c000360200" - "41c0a7c00041b4a7c00036020041b4a7c00041aca7c00036020041c8a7c0" - "0041bca7c00036020041bca7c00041b4a7c0003602004180a7c000410036" - "020041d0a7c00041c4a7c00036020041c4a7c00041bca7c00036020041cc" - "a7c00041c4a7c00036020041d8a7c00041cca7c00036020041d4a7c00041" - "cca7c00036020041e0a7c00041d4a7c00036020041dca7c00041d4a7c000" - "36020041e8a7c00041dca7c00036020041e4a7c00041dca7c00036020041" - "f0a7c00041e4a7c00036020041eca7c00041e4a7c00036020041f8a7c000" - "41eca7c00036020041f4a7c00041eca7c0003602004180a8c00041f4a7c0" - "0036020041fca7c00041f4a7c0003602004188a8c00041fca7c000360200" - "4184a8c00041fca7c0003602004190a8c0004184a8c0003602004198a8c0" - "00418ca8c000360200418ca8c0004184a8c00036020041a0a8c0004194a8" - "c0003602004194a8c000418ca8c00036020041a8a8c000419ca8c0003602" - "00419ca8c0004194a8c00036020041b0a8c00041a4a8c00036020041a4a8" - "c000419ca8c00036020041b8a8c00041aca8c00036020041aca8c00041a4" - "a8c00036020041c0a8c00041b4a8c00036020041b4a8c00041aca8c00036" - "020041c8a8c00041bca8c00036020041bca8c00041b4a8c00036020041d0" - "a8c00041c4a8c00036020041c4a8c00041bca8c00036020041d8a8c00041" - "cca8c00036020041cca8c00041c4a8c00036020041e0a8c00041d4a8c000" - "36020041d4a8c00041cca8c00036020041e8a8c00041dca8c00036020041" - "dca8c00041d4a8c00036020041f0a8c00041e4a8c00036020041e4a8c000" - "41dca8c00036020041f8a8c00041eca8c00036020041eca8c00041e4a8c0" - "003602004180a9c00041f4a8c00036020041f4a8c00041eca8c000360200" - "4188a9c00041fca8c00036020041fca8c00041f4a8c00036020041a0a9c0" - "0020033602004184a9c00041fca8c0003602004198a9c000200641286b22" - "0036020020032000410172360204200020036a412836020441aca9c00041" - "808080013602000c080b200120034f0d0020012002490d00200028020c45" - "0d030b41b0a9c00041b0a9c0002802002200200320002003491b36020020" - "0320066a210241f4a6c00021000240024003402002200028020022054704" - "40200028020822000d010c020b0b200028020c450d010b41f4a6c0002100" - "034002402001200028020022024f04402001200220002802046a2202490d" - "010b200028020821000c010b0b41a0a9c00020033602004198a9c0002006" - "41286b220036020020032000410172360204200020036a412836020441ac" - "a9c00041808080013602002001200241206b41787141086b220020002001" - "41106a491b2205411b36020441f4a6c0002902002109200541106a41fca6" - "c0002902003702002005200937020841f8a6c000200636020041f4a6c000" - "200336020041fca6c000200541086a3602004180a7c00041003602002005" - "411c6a2100034020004107360200200041046a22002002490d000b200120" - "05460d0720052005280204417e713602042001200520016b220041017236" - "02042005200036020020004180024f04402001200010350c080b200041f8" - "01714184a7c0006a2102027f418ca9c00028020022034101200041037674" - "220071450440418ca9c000200020037236020020020c010b20022802080b" - "2100200220013602082000200136020c2001200236020c20012000360208" - "0c070b200020033602002000200028020420066a36020420032004410372" - "3602042005410f6a41787141086b2202200320046a22006b2101200241a0" - "a9c000280200460d032002419ca9c000280200460d042002280204220441" - "037141014604402002200441787122041016200120046a2101200220046a" - "220228020421040b20022004417e71360204200020014101723602042000" - "20016a200136020020014180024f04402000200110350c060b200141f801" - "714184a7c0006a2104027f418ca9c0002802002202410120014103767422" - "0171450440418ca9c000200120027236020020040c010b20042802080b21" - "01200420003602082001200036020c2000200436020c200020013602080c" - "050b4198a9c000200020046b220136020041a0a9c00041a0a9c000280200" - "220020046a22023602002002200141017236020420002004410372360204" - "200041086a21000c060b419ca9c00028020021010240200020046b220241" - "0f4d0440419ca9c00041003602004194a9c0004100360200200120004103" - "72360204200020016a220020002802044101723602040c010b4194a9c000" - "2002360200419ca9c000200120046a220336020020032002410172360204" - "200020016a2002360200200120044103723602040b200141086a0f0b2000" - "200520066a36020441a0a9c00041a0a9c0002802002200410f6a41787122" - "0141086b22023602004198a9c000200020016b4198a9c00028020020066a" - "22016a41086a220336020020022003410172360204200020016a41283602" - "0441aca9c00041808080013602000c030b41a0a9c00020003602004198a9" - "c0004198a9c00028020020016a2201360200200020014101723602040c01" - "0b419ca9c00020003602004194a9c0004194a9c00028020020016a220136" - "020020002001410172360204200020016a20013602000b200341086a0f0b" - "410021004198a9c000280200220120044d0d004198a9c000200120046b22" - "0136020041a0a9c00041a0a9c000280200220020046a2202360200200220" - "0141017236020420002004410372360204200041086a0f0b20000bc60602" - "037f037e230041a0026b22032400200341286a41c100104b210420034118" - "6a41f08bc000290300370300200341106a41e88bc0002903003703002003" - "41086a41e08bc00029030037030020034200370320200341d88bc0002903" - "003703000240200241c0004f0440200320024106762205ad370320200320" - "01200510272004200120024140716a2002413f712202104c1a0c010b2004" - "20012002104c1a0b200320023a0068200341f0006a200341f000104c1a20" - "034198016a220120032d00d80122026a22044180013a00002002ad220742" - "3b862003290390012206420986220820074203868422074280fe03834228" - "86842007428080fc0783421886200742808080f80f834208868484200642" - "018642808080f80f832006420f88428080fc0783842006421f884280fe03" - "8320084238888484842106024002402002413f470440200441016a200241" - "3f73104b1a200241387341074b0d010b200341f0006a2001410110272003" - "4190026a420037030020034188026a420037030020034180026a42003703" - "00200341f8016a4200370300200341f0016a4200370300200341e8016a42" - "00370300200342003703e0012003200637039802200341f0006a200341e0" - "016a410110270c010b200320063703d001200341f0006a2001410110270b" - "2000200328028c01220241187420024180fe037141087472200241087641" - "80fe03712002411876727236001c20002003280288012202411874200241" - "80fe03714108747220024108764180fe0371200241187672723600182000" - "200328028401220241187420024180fe03714108747220024108764180fe" - "0371200241187672723600142000200328028001220241187420024180fe" - "03714108747220024108764180fe03712002411876727236001020002003" - "28027c220241187420024180fe03714108747220024108764180fe037120" - "02411876727236000c20002003280278220241187420024180fe03714108" - "747220024108764180fe0371200241187672723600082000200328027422" - "0241187420024180fe03714108747220024108764180fe03712002411876" - "727236000420002003280270220241187420024180fe0371410874722002" - "4108764180fe037120024118767272360000200341a0026a24000bee0201" - "077f024020012802042202450440410021020c010b200128021021062001" - "200220022001280208220320022003491b22046b36020420012001280200" - "220720046a360200027f0240024002400240027f02400240024020030440" - "200128020c2208410174210520072d0000220241c1006b41ff0171410649" - "0d01200241e1006b41ff01714106490d02200241306b220341ff0171410a" - "490d0320050c040b4100410041848bc0001010000b200241376b21030c01" - "0b200241d7006b21030b20044101460d0320072d0001220241c1006b41ff" - "01714106490d01200241e1006b41ff01714106490d02200241306b220441" - "ff0171410a490d0420054101720b21032006200241ff0171360200200620" - "0541807e71200341ff01717236020441000c040b200241376b21040c020b" - "200241d7006b21040c010b4101410141948bc0001010000b200420034104" - "7472210341010b21022001200841016a36020c0b200020033a0001200020" - "023a00000bb40801057f200041086b2201200041046b2802002203417871" - "22006a21020240024020034101710d002003410271450d01200128020022" - "0320006a2100200120036b2201419ca9c000280200460440200228020441" - "03714103470d014194a9c000200036020020022002280204417e71360204" - "20012000410172360204200220003602000f0b2001200310160b02400240" - "0240024002400240024020022802042203410271450440200241a0a9c000" - "280200460d022002419ca9c000280200460d032002200341787122031016" - "2001200020036a2200410172360204200020016a20003602002001419ca9" - "c000280200470d014194a9c00020003602000f0b20022003417e71360204" - "20012000410172360204200020016a20003602000b2000418002490d0241" - "1f210220014200370210200041ffffff074d044020004106200041087667" - "22026b7641017120024101746b413e6a21020b2001200236021c20024102" - "7441f4a5c0006a2103410120027422044190a9c000280200710d03200320" - "01360200200120033602182001200136020c200120013602084190a9c000" - "4190a9c0002802002004723602000c040b41a0a9c00020013602004198a9" - "c0004198a9c00028020020006a220036020020012000410172360204419c" - "a9c00028020020014604404194a9c0004100360200419ca9c00041003602" - "000b200041aca9c00028020022044d0d0541a0a9c0002802002200450d05" - "410021034198a9c00028020022054129490d0441f4a6c000210103402000" - "200128020022024f04402000200220012802046a490d060b200128020821" - "010c000b000b419ca9c00020013602004194a9c0004194a9c00028020020" - "006a220036020020012000410172360204200020016a20003602000f0b20" - "0041f801714184a7c0006a2102027f418ca9c00028020022034101200041" - "037674220071450440418ca9c000200020037236020020020c010b200228" - "02080b2100200220013602082000200136020c2001200236020c20012000" - "3602080f0b02400240200020032802002204280204417871460440200421" - "020c010b2000411920024101766b41002002411f471b7421030340200420" - "03411d764104716a41106a22052802002202450d02200341017421032002" - "210420022802044178712000470d000b0b20022802082200200136020c20" - "022001360208200141003602182001200236020c200120003602080c010b" - "20052001360200200120043602182001200136020c200120013602080b41" - "00210141b4a9c00041b4a9c00028020041016b220036020020000d0141fc" - "a6c000280200220004400340200141016a2101200028020822000d000b0b" - "41b4a9c00041ff1f2001200141ff1f4d1b3602000f0b41fca6c000280200" - "220104400340200341016a2103200128020822010d000b0b41b4a9c00041" - "ff1f2003200341ff1f4d1b360200200420054f0d0041aca9c000417f3602" - "000b0b810802077f067e230041c0026b2203240020034198026a20024118" - "6a290300220a37030020034190026a200241106a290300220d3703002003" - "200241086a290300220b3703880220032002290300220c3703800242ddb0" - "858ce8b691a8b87f210e20034180026a200c200b200d200a42c7faf3c3ed" - "82a3903c428d95c7c396d2dac0977f102b200341b0026a2204200141106a" - "290300220a370300200341b8026a2205200141186a290300220d37030020" - "032001290300220b3703a0022003200141086a290300220c3703a8022003" - "41a0026a200b200c200a200d42c7faf3c3ed82a3903c428d95c7c396d2da" - "c0977f102b200341a0026a200b200c200a200d42c7faf3c3ed82a3903c42" - "8d95c7c396d2dac0977f102b02400240024020032903a002220a42037c22" - "0c200a54ad220a20032903a8027c220b200a54ad220a20042903007c220d" - "42ddb0858ce8b691a8b87f852005290300200a200d56ad7c220a42a9c0c6" - "89aece93b2308584500440200c42c7faf3c3ed82a3903c54200b428d95c7" - "c396d2dac0977f54200b428d95c7c396d2dac0977f511b450d0242a9c0c6" - "89aece93b230210a0c010b200d42deb0858ce8b691a8b87f54200a42a9c0" - "c689aece93b23054200a42a9c0c689aece93b230511b450d01200d210e0b" - "200c210f200b210c0c010b200a200d200b200c42c7faf3c3ed82a3903c7d" - "220f200c5aad220e7d220a42f3eab8bce9ada5bfe8007c220c200a54ad20" - "0b200e54ad7d7c220b200d54ad200b42a2cffaf397c9eed7c7007c220e20" - "0b54ad7c50ad7d42a9c0c689aece93b2307d210a0b2003200e3703b00120" - "03200f3703a0012003200a3703b8012003200c3703a8012000027f200341" - "80026a200341a0016a104a45044020034180016a22042002290300370100" - "20034198016a2205200241186a29030037010020034190016a2206200241" - "106a29030037010020034188016a2207200241086a290300370100200341" - "f8006a2202200141186a290300370100200341f0006a2208200141106a29" - "0300370100200341e8006a2209200141086a290300370100200320012903" - "00370160200341ca006a22012005290100370100200341c2006a22052006" - "2901003701002003413a6a22062007290100370100200341326a22072004" - "2901003701002003412a6a22042002290100370100200341226a22022008" - "2901003701002003411a6a22082009290100370100200320032901603701" - "12200041c8006a2001290100370100200041406b20052901003701002000" - "41386a2006290100370100200041306a2007290100370100200041286a20" - "04290100370100200041206a2002290100370100200041186a2008290100" - "3701002000200329011237011041000c010b200041003a000141010b3a00" - "00200341c0026a24000baa0401047e2001290010220242388620024280fe" - "0383422886842002428080fc0783421886200242808080f80f8342088684" - "84200242088842808080f80f832002421888428080fc0783842002422888" - "4280fe038320024238888484842104200141186a29000022024238862002" - "4280fe0383422886842002428080fc0783421886200242808080f80f8342" - "08868484200242088842808080f80f832002421888428080fc0783842002" - "4228884280fe0383200242388884848421050240417f2001290000220242" - "b0c8b99297bc8cd02985200141086a290000220342b8a195b29bb0a0acdd" - "008584420052200342388620034280fe0383422886842003428080fc0783" - "421886200342808080f80f834208868484200342088842808080f80f8320" - "03421888428080fc07838420034228884280fe0383200342388884848422" - "0342ddb0858ce8b691a8b87f54200242388620024280fe03834228868420" - "02428080fc0783421886200242808080f80f834208868484200242088842" - "808080f80f832002421888428080fc07838420024228884280fe03832002" - "423888848484220242a9c0c689aece93b23054200242a9c0c689aece93b2" - "30511b1b2201417f470440200141ff01710d01200542c6faf3c3ed82a390" - "3c562004428d95c7c396d2dac0977f562004428d95c7c396d2dac0977f51" - "1b0d010b2000200337032020002005370310200020023703282000200437" - "0318200041003a00000f0b200041023a0001200041013a00000bb40c0204" - "7f027e230041d0066b2203240020034188036a200241386a290300370300" - "20034180036a200241306a290300370300200341f8026a200241286a2903" - "00370300200341f0026a2204200241206a290300370300200341e8026a20" - "0241186a290300370300200341e0026a200241106a290300370300200320" - "022903003703d0022003200241086a2903003703d802200341d0026a2002" - "2002102f200341a0036a200141106a290300370300200341a8036a200141" - "186a290300370300200341b0036a200141206a290300370300200341b803" - "6a200141286a290300370300200341c0036a200141306a29030037030020" - "0341c8036a200141386a2903003703002003200129030037039003200320" - "0141086a2903003703980320034190036a20012001102f200341d0006a20" - "034190036a2001102f200342d4fdc3d783f6c4cb003703c805200342f4fb" - "e3f6def5ab964d3703c005200342d2b0b4a9ce90e8a7a77f3703b8052003" - "42d2ab8caee8a0afd1643703b005200342aed5e2f58ca8a78a2b3703a805" - "200342c3d581df919386df817f3703a005200342a3dfefced5bcb1dab57f" - "37039805200342e5f184a5c2dbf9b33237039005200341106a200341d000" - "6a20034190056a103002400240200341d0026a200341106a104a45044020" - "04200341306a104a450d010b200041013b01000c010b200341c8026a4200" - "370300200341c0026a4200370300200341b8026a4200370300200341b002" - "6a4200370300200341a8026a4200370300200341a0016a200141106a2903" - "00370300200341a8016a200141186a290300370300200341b0016a200141" - "206a290300370300200341b8016a200141286a290300370300200341c001" - "6a200141306a290300370300200341c8016a200141386a29030037030020" - "0342003703a00220032001290300370390012003200141086a2903003703" - "980120034188026a200241386a29030037030020034180026a200241306a" - "290300370300200341f8016a200241286a290300370300200341f0016a20" - "0241206a290300370300200341e8016a200241186a290300370300200341" - "e0016a200241106a290300370300200341d8016a200241086a2903003703" - "0020034201370390022003420037039802200320022903003703d0012003" - "41e0036a4200370300200341e8036a4200370300200341f0036a42003703" - "00200341f8036a420037030020034180046a420037030020034188046a42" - "00370300200342003703d003200342003703d803200342a9c0c689aece93" - "b230370368200342ddb0858ce8b691a8b87f37036020034291e1e5cd8789" - "fa992837035820034280808080bfb2fdf0c300370350200341a0046a41f0" - "00104b1a2003420037039804200342013703900441ff0121040340200320" - "0441ff0071104f200341086a290300200341d0006a200441037641f0ffff" - "ff01716a2206290308832107200329030020062903008321082005044020" - "034190056a200341d0036a1043200341d0036a20034190056a41c001104c" - "1a0b2007200884420052044020034190056a200341d0036a20034190016a" - "1044200341d0036a20034190056a41c001104c1a410121050b200441016b" - "2204417f470d000b20034190056a200341d0036a20034190016a10440240" - "20032903900620034198066a290300844200520d0020032903a006200341" - "a8066a290300844200520d0020032903b006200341b8066a290300844200" - "520d0020032903c006200341c8066a290300844200520d00200341c8056a" - "200141386a290300370300200341c0056a200141306a2903003703002003" - "41b8056a200141286a290300370300200341b0056a200141206a29030037" - "0300200341a8056a200141186a290300370300200341a0056a200141106a" - "290300370300200341d8056a200241086a290300370300200341e0056a20" - "0241106a290300370300200341e8056a200241186a290300370300200341" - "f0056a200241206a290300370300200341f8056a200241286a2903003703" - "0020034180066a200241306a29030037030020034188066a200241386a29" - "03003703002003200129030037039005200320022903003703d005200320" - "0141086a29030037039805200041106a20034190056a418001104c1a2000" - "41003a00000c010b20004181023b01000b200341d0066a24000ba8150207" - "7f137e230041a0016b22022400200241106a2001102a20022d0011210620" - "022d001021072000027f024020022d0030220841c101470440200235011a" - "2109200233011e210a2002290112211620022903202114200241d8006a22" - "01200241286a29030022173703002002201437035020022009200a422086" - "842219421086201642308884220937034820022007ad42ff018320164210" - "862006ad42ff01834208868484220a37034042ddb0858ce8b691a8b87f21" - "0f200241406b200a20092014201742c7faf3c3ed82a3903c428d95c7c396" - "d2dac0977f102b200241406b200a20092014201742c7faf3c3ed82a3903c" - "428d95c7c396d2dac0977f102b0240024002402002290340220942037c22" - "0b200954ad220920022903487c220a200954ad220c20022903507c220942" - "ddb0858ce8b691a8b87f8520012903002009200c54ad7c220e42a9c0c689" - "aece93b2308584500440200b42c7faf3c3ed82a3903c54200a428d95c7c3" - "96d2dac0977f54200a428d95c7c396d2dac0977f511b450d0242a9c0c689" - "aece93b230210e0c010b200942deb0858ce8b691a8b87f54200e42a9c0c6" - "89aece93b23054200e42a9c0c689aece93b230511b450d012009210f0b20" - "0b2110200a210d0c010b200e2009200a200b42c7faf3c3ed82a3903c7d22" - "10200b5aad220b7d220c42f3eab8bce9ada5bfe8007c220d200c54ad200a" - "200b54ad7d7c220a200954ad200a42a2cffaf397c9eed7c7007c220f200a" - "54ad7c50ad7d42a9c0c689aece93b2307d210e0b4190aac0002d00004102" - "470440230041e0006b220324004190aac0004190aac0002d000022044101" - "20041b3a00000240200404400340024002400240200441ff017141016b0e" - "03000501020b03404190aac0002d000022044101460d000b024002402004" - "41016b0e03000601030b000b41a49bc000412641cc9bc0001011000b41a8" - "9ac000410d41949bc0001011000b4190aac0004190aac0002d0000220441" - "0120041b3a000020040d000b0b200341186a220442a9c0c689aece93b230" - "370300200341106a220542ddb0858ce8b691a8b87f3703002003428d95c7" - "c396d2dac0977f370308200342c4faf3c3ed82a3903c370300200341386a" - "220142003703002003420037033020034200370328200342043703202003" - "42a9c0c689aece93b230370358200342ddb0858ce8b691a8b87f37035020" - "03428d95c7c396d2dac0977f370348200342c7faf3c3ed82a3903c370340" - "200341206a200341406b103a200320032903202003290328200329033020" - "0129030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b4190aa" - "c00041023a00004188aac00020042903003703004180aac0002005290300" - "37030041f8a9c000200329030837030041f0a9c00020032903003703000b" - "200341e0006a24000b20024198016a4188aac00029030037030020024190" - "016a4180aac000290300370300200241f8a9c00029030037038801200241" - "f0a9c00029030037038001420021094201210a41ff0121014200210b4200" - "210c0340200220024180016a200141037641f0ffffff01716a2205290300" - "2005290308200141ff0071104e200241286a2205200b3703002002200937" - "03202002200c3703182002200a370310200241106a200a200c2009200b42" - "c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2005290300210b20" - "0229032021092002290318210c2002290310210a20022802004101710440" - "2005200b370300200220093703202002200a3703102002200c3703182002" - "41106a2010200d200f200e42c7faf3c3ed82a3903c428d95c7c396d2dac0" - "977f102b2005290300210b2002290318210c200229032021092002290310" - "210a0b200141016b2201417f470d000b200241286a2201200b3703002002" - "20093703202002200c3703182002200a370310200241106a2010200d200f" - "200e42c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2002200b37" - "0378200220093703702002200c3703682002200a370360200241e0006a20" - "02290310220e2002290318220b2002290320220c2001290300220a42c7fa" - "f3c3ed82a3903c428d95c7c396d2dac0977f102b41e0a9c0002d00004102" - "470440102c0b20024198016a41d8a9c00029030037030020024190016a41" - "d0a9c000290300370300200241c8a9c00029030037038801200241c0a9c0" - "002903003703800141e0a9c0002d00004102470440102c0b20024180016a" - "420142004200420041c0a9c00029030041c8a9c00029030041d0a9c00029" - "030041d8a9c000290300102d2002290388012110200229038001210d0240" - "0240417f200229039001220f42ddb0858ce8b691a8b87f8520024198016a" - "290300220942a9c0c689aece93b2308584420052200f42ddb0858ce8b691" - "a8b87f54200942a9c0c689aece93b23054200942a9c0c689aece93b23051" - "1b1b2201417f470440200141ff01710d01200d42c7faf3c3ed82a3903c54" - "2010428d95c7c396d2dac0977f542010428d95c7c396d2dac0977f511b45" - "0d010b2002200f3703202002200d37031020022009370328200220103703" - "18027e0240200241e0006a200241106a104a0440420021104200210f4200" - "2109200c200e84200a200b8484420052044042c7faf3c3ed82a3903c200e" - "7d2115427f4200427f4200200e42788342c7faf3c3ed82a3903c561b2209" - "2009200b54ad7d2009200b7d220942f3eab8bce9ada5bfe8007d22102009" - "54ad7c42017c2209200c7d220d42a4cffaf397c9eed7c7007d220f200d54" - "ad2009200c54ad7d427f511b200a7d42a9c0c689aece93b2307c21090b20" - "0e201554200b201054200b2010511b200c200f542009200a562009200a51" - "1b200c200f852009200a8584221b501b4101460d0120152111200f211220" - "09210d200e211a200b2118200c210f200a210920100c020b200041033a00" - "010c050b200e2111200c2112200a210d2015211a20102118200b0b211302" - "40024002400240417f201b420052200f2012562009200d562009200d511b" - "1b2201047f2001052011201a54201320185420132018511b0d01200e2015" - "85200b201085844200520b4101460d010b200841c001470d014200210942" - "00210a4200210b4200210c2011201284200d20138484500d04427f420042" - "7f4200201142788342c7faf3c3ed82a3903c561b22092009201354ad7d20" - "0920137d220942f3eab8bce9ada5bfe8007d220a200954ad7c42017c2209" - "20127d220c42a4cffaf397c9eed7c7007d220b200c54ad2009201254ad7d" - "427f511b200d7d42a9c0c689aece93b2307c210c42c7faf3c3ed82a3903c" - "20117d21090c040b2008418001460d010b201121092013210a2012210b20" - "0d210c0c020b420021094200210a4200210b4200210c2011201284200d20" - "138484500d01427f4200427f4200201142788342c7faf3c3ed82a3903c56" - "1b22092009201354ad7d200920137d220942f3eab8bce9ada5bfe8007d22" - "0a200954ad7c42017c220920127d220c42a4cffaf397c9eed7c7007d220b" - "200c54ad2009201254ad7d427f511b200d7d42a9c0c689aece93b2307c21" - "0c42c7faf3c3ed82a3903c20117d21090c010b41e09dc0001020000b2000" - "2014370320200020163701122000200b3703402000200937033020002006" - "3a0011200020073a0010200020193e011a200020173703282000200c3703" - "482000200a3703382000411e6a20194220883d010041000c020b20002006" - "3a0002200020073a00010b41010b3a0000200241a0016a24000ba02f0208" - "7f187e230041c0086b22022400200241f0046a2001102a20022d00f10421" - "0620022d00f0042107024002400240024020022d009005220941c1014704" - "4020024198016a220520022901fa04370300200241a6016a220420024188" - "056a2203290100370100200241a0016a220820024182056a290100370300" - "200220022901f20437039001200241f0046a200141206a102e20022d00f0" - "04450440200241d5076a2003290300220c37000020024188016a20024198" - "056a290300220b37030020024180016a20024190056a290300220a370300" - "200241c8006a200b370300200241406b200a370300200220022903800522" - "0b3703702002200c3703782002200b3703302002200c370338200220063a" - "0051200220073a0050200241e8006a22012004290100370100200241e200" - "6a2008290300370100200241da006a200529030037010020022002290390" - "01370152200941c000460d0220024180026a200241406b29030037030020" - "024188026a200241c8006a29030037030020024190026a200241d0006a29" - "030037030020024198026a200241d8006a290300370300200241a0026a20" - "0241e0006a290300370300200241a8026a20012903003703002002200229" - "03303703f001200220022903383703f801200241f0016a200241306a2002" - "41306a102f20024180086a200241f0016a200241306a102f200242d4fdc3" - "d783f6c4cb003703a805200242f4fbe3f6def5ab964d3703a005200242d2" - "b0b4a9ce90e8a7a77f37039805200242d2ab8caee8a0afd1643703900520" - "0242aed5e2f58ca8a78a2b37038805200242c3d581df919386df817f3703" - "8005200242a3dfefced5bcb1dab57f3703f804200242e5f184a5c2dbf9b3" - "323703f004200241b0016a20024180086a200241f0046a103041f0aac000" - "2d00004102470440230041e0006b2203240041f0aac00041f0aac0002d00" - "002204410120041b3a00000240200404400340024002400240200441ff01" - "7141016b0e03000501020b034041f0aac0002d000022044101460d000b02" - "400240200441016b0e03000601030b000b41a49bc000412641cc9bc00010" - "11000b41a89ac000410d41949bc0001011000b41f0aac00041f0aac0002d" - "00002204410120041b3a000020040d000b0b200341186a220442a9c0c689" - "aece93b230370300200341106a220842ddb0858ce8b691a8b87f37030020" - "03428d95c7c396d2dac0977f370308200342c4faf3c3ed82a3903c370300" - "200341386a22014200370300200342003703302003420037032820034204" - "370320200342a9c0c689aece93b230370358200342ddb0858ce8b691a8b8" - "7f3703502003428d95c7c396d2dac0977f370348200342c7faf3c3ed82a3" - "903c370340200341206a200341406b103a20032003290320200329032820" - "03290330200129030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f" - "102b41f0aac00041023a000041e8aac000200429030037030041e0aac000" - "200829030037030041d8aac000200329030837030041d0aac00020032903" - "003703000b200341e0006a24000b200241c8046a41e8aac0002903003703" - "00200241c0046a41e0aac000290300370300200241d8aac0002903003703" - "b804200241d0aac0002903003703b0044200210c4201210b41ff01210120" - "0241a8076a2104200241b8076a21034200210a0340200241206a200241b0" - "046a200141037641f0ffffff01716a22052903002005290308200141ff00" - "71104e2002200a3703f8072002200c3703f0072002200f3703e807200220" - "0e3703e0072002200d3703d807200220103703d007200220113703c80720" - "02200b3703c0072002200a3703b8082002200c3703b0082002200f3703a8" - "082002200e3703a0082002200d3703980820022010370390082002201137" - "0388082002200b370380082002280220210520024180076a200241c0076a" - "20024180086a102f20024198076a290300210d2004290300210f20032903" - "00210a2002290388072111200229038007210b2002290390072110200229" - "03a007210e20022903b007210c200541017104402002200a3703b8082002" - "200c3703b0082002200f3703a8082002200e3703a0082002200d37039808" - "200220103703900820022011370388082002200b37038008200241c0076a" - "20024180086a200241b0016a102f200241e8076a290300210f200241f807" - "6a290300210a20022903c007210b20022903d007211020022903e007210e" - "20022903f007210c20022903c8072111200241d8076a290300210d0b2001" - "41016b2201417f470d000b2002200c3703e0022002200e3703d002200220" - "103703c0022002200b3703b0022002200a3703e8022002200f3703d80220" - "02200d3703c802200220113703b802200241f0026a200241b0026a200241" - "b0016a102f200241b0036a200241b0026a200241f0026a102f41c0aac000" - "2d0000410247044041c0aac00041c0aac0002d00002201410120011b3a00" - "000240200104400340024002400240200141016b0e03000501020b034041" - "c0aac0002d000022014101460d000b02400240200141016b0e0300060103" - "0b000b41a49bc000412641cc9bc0001011000b41a89ac000410d41949bc0" - "001011000b41c0aac00041c0aac0002d00002201410120011b3a00002001" - "0d000b0b41b8aac00042a9c0c689aece93b23037030041b0aac00042ddb0" - "858ce8b691a8b87f37030041a8aac000428d95c7c396d2dac0977f370300" - "41a0aac00042c7faf3c3ed82a3903c37030041c0aac00041023a00000b0b" - "200241d8066a41b8aac000290300370300200241d0066a41b0aac0002903" - "00370300200241a8aac0002903003703c806200241a0aac0002903003703" - "c0064200210c4201210b41ff012101200241a8076a2104200241b8076a21" - "034200210a4200210e4200210f420021104200210d420021110340200241" - "106a200241c0066a200141037641f0ffffff01716a220529030020052903" - "08200141ff0071104e2002200a3703f8072002200c3703f0072002200f37" - "03e8072002200e3703e0072002200d3703d807200220103703d007200220" - "113703c8072002200b3703c0072002200a3703b8082002200c3703b00820" - "02200f3703a8082002200e3703a0082002200d3703980820022010370390" - "0820022011370388082002200b370380082002280210210520024180076a" - "200241c0076a20024180086a102f20024198076a290300210d2004290300" - "210f2003290300210a2002290388072111200229038007210b2002290390" - "07211020022903a007210e20022903b007210c200541017104402002200a" - "3703b8082002200c3703b0082002200f3703a8082002200e3703a0082002" - "200d37039808200220103703900820022011370388082002200b37038008" - "200241c0076a20024180086a200241b0036a102f200241e8076a29030021" - "0f200241f8076a290300210a20022903c007210b20022903d00721102002" - "2903e007210e20022903f007210c20022903c8072111200241d8076a2903" - "00210d0b200141016b2201417f470d000b2002200c3703b0082002200e37" - "03a00820022010370390082002200b370380082002200a3703b808200220" - "0f3703a8082002200d370398082002201137038808200241f0036a200241" - "80086a200241b0036a102f200241a8086a22014200370300200241b0086a" - "22054200370300200241b8086a22044200370300200242a9c0c689aece93" - "b23037039808200242ddb0858ce8b691a8b87f370390082002428d95c7c3" - "96d2dac0977f37038808200242c6faf3c3ed82a3903c3703800820024200" - "3703a008200241a0086a21030240200241f0036a20024180086a104a4504" - "4020024190046a2003104a450d010b200142003703002005420037030020" - "044200370300200242a9c0c689aece93b23037039808200242ddb0858ce8" - "b691a8b87f370390082002428d95c7c396d2dac0977f37038808200242c6" - "faf3c3ed82a3903c37038008200242003703a008200241b0036a20024180" - "086a104a450440200241d0036a2003104a450d050b4200210c2002419808" - "6a4200370300200241a0086a4200370300200241a8086a42003703002002" - "41b0086a4200370300200241b8086a420037030020024200370388084201" - "210b20024201370380082002420037039008200241c0066a200241b0036a" - "20024180086a103041a0abc0002d00004102470440230041e0006b220324" - "0041a0abc00041a0abc0002d00002204410120041b3a0000024020040440" - "0340024002400240200441ff017141016b0e03000501020b034041a0abc0" - "002d000022044101460d000b02400240200441016b0e03000601030b000b" - "41a49bc000412641cc9bc0001011000b41a89ac000410d41949bc0001011" - "000b41a0abc00041a0abc0002d00002204410120041b3a000020040d000b" - "0b200341186a220442a9c0c689aece93b230370300200341106a220842dd" - "b0858ce8b691a8b87f3703002003428d95c7c396d2dac0977f3703082003" - "42c6faf3c3ed82a3903c370300200341386a220142003703002003420037" - "03302003420037032820034202370320200342a9c0c689aece93b2303703" - "58200342ddb0858ce8b691a8b87f3703502003428d95c7c396d2dac0977f" - "370348200342c7faf3c3ed82a3903c370340200341206a200341406b103a" - "2003200329032020032903282003290330200129030042c7faf3c3ed82a3" - "903c428d95c7c396d2dac0977f102b41a0abc00041023a00004198abc000" - "20042903003703004190abc00020082903003703004188abc00020032903" - "083703004180abc00020032903003703000b200341e0006a24000b200241" - "e8046a4198abc000290300370300200241e0046a4190abc0002903003703" - "0020024188abc0002903003703d80420024180abc0002903003703d00441" - "ff012101200241a8076a2104200241b8076a21034200210a4200210e4200" - "210f420021104200210d4200211103402002200241d0046a200141037641" - "f0ffffff01716a22052903002005290308200141ff0071104e2002200a37" - "03f8072002200c3703f0072002200f3703e8072002200e3703e007200220" - "0d3703d807200220103703d007200220113703c8072002200b3703c00720" - "02200a3703b8082002200c3703b0082002200f3703a8082002200e3703a0" - "082002200d37039808200220103703900820022011370388082002200b37" - "0380082002280200210520024180076a200241c0076a20024180086a102f" - "20024198076a290300210d2004290300210f2003290300210a2002290388" - "072111200229038007210b200229039007211020022903a007210e200229" - "03b007210c200541017104402002200a3703b8082002200c3703b0082002" - "200f3703a8082002200e3703a0082002200d370398082002201037039008" - "20022011370388082002200b37038008200241c0076a20024180086a2002" - "41c0066a102f200241e8076a290300210f200241f8076a290300210a2002" - "2903c007210b20022903d007211020022903e007210e20022903f007210c" - "20022903c8072111200241d8076a290300210d0b200141016b2201417f47" - "0d000b2002200c3703b0062002200e3703a0062002201037039006200220" - "0b370380062002200a3703b8062002200f3703a8062002200d3703980620" - "0220113703880620024180056a20024180066a200241f0026a102f0c050b" - "20004181063b01000c050b200020022d00f1043a0002200041810a3b0100" - "0c040b200020063a0002200020073a0001200041013a00000c030b200241" - "f8066a4200370300200241f0066a4200370300200241e8066a4200370300" - "200241e0066a4200370300200241d8066a4200370300200242003703d006" - "200242003703c806200242013703c006200242ba90b590b9f2a4c7193703" - "f807200242a5baed8ff3f6afb0f2003703f00720024292cea7adb3a692d5" - "713703e807200242c2a5ccf7fab6a1f2977f3703e007200242f6bcfc90f1" - "ddb780183703d807200242f988f1f2e58c80b5c2003703d007200242ddb5" - "fbbacfdac8a1e7003703c807200242ededcbcccdabafefc6003703c00720" - "0241f0046a200241c0066a10310240024020022802f00441017104402002" - "41b8086a2201200241b8056a2205290300370300200241b0086a200241b0" - "056a2204290300370300200241a8086a2203200241a8056a220629030037" - "0300200241a0086a200241a0056a29030037030020024198086a20024198" - "056a220729030037030020024190086a20024190056a2903003703002002" - "20022903800537038008200220024188056a290300370388082002418006" - "6a200241c0076a20024180086a102f200242f5e0ffc285baa283093703f8" - "0720024295e7b0c8d6b5a6cf6c3703f007200242f39dce85b7a6cca5bc7f" - "3703e807200242dbae8a89cddbb6d6d5003703e007200242ebdbb1dcddd4" - "97e4123703d8072002428f81adee88b0dcd5ca003703d007200242fba68f" - "e290edf9e8633703c807200242aafbe9b79680b3f3cc003703c007200241" - "f0046a200241c0066a103120022802f004410171450d0120012005290300" - "370300200241b0086a200429030037030020032006290300370300200241" - "a0086a200241a0056a29030037030020024198086a200729030037030020" - "024190086a20024190056a29030037030020022002290380053703800820" - "0220024188056a2903003703880820024180076a200241c0076a20024180" - "086a102f200241f0046a20024180066a20024180076a100720022d00f004" - "4101460d02200041106a20024180056a418001104c1a200041003a00000c" - "050b41f09dc000412c41989fc0001021000b41f09dc000412c41989fc000" - "1021000b200220022d00f1043a00800841b89cc000412b20024180086a41" - "a89fc00041b4a0c0001013000b20024198086a420037030020024190086a" - "4200370300200242003703b808200242003703b008200242003703a80820" - "0242013703a0082002420037038808200242003703800820024180056a20" - "024180086a200241f0026a102f0b200241a8056a290300210e200241b805" - "6a290300210c20022903a005210f20022903b005210b200229039005220d" - "20022903800522158420024198056a290300221220024188056a29030022" - "1384844200520440427f4200427f4200201542788342c7faf3c3ed82a390" - "3c561b220a200a201354ad7d200a20137d220a42f3eab8bce9ada5bfe800" - "7d2217200a54ad7c42017c220a200d7d221042a4cffaf397c9eed7c7007d" - "2218201054ad200a200d54ad7d427f511b20127d42a9c0c689aece93b230" - "7c211642c7faf3c3ed82a3903c20157d21190b4200211142002110420021" - "0a200b200f84200c200e84844200520440427f4200427f4200200f427883" - "42c7faf3c3ed82a3903c561b220a200a200e54ad7d200a200e7d220a42f3" - "eab8bce9ada5bfe8007d2211200a54ad7c42017c220a200b7d221442a4cf" - "faf397c9eed7c7007d2210201454ad200a200b54ad7d427f511b200c7d42" - "a9c0c689aece93b2307c210a42c7faf3c3ed82a3903c200f7d21140b0240" - "0240417f200b201085200a200c8584420052200b201054200a200c56200a" - "200c511b1b2201450440200f201454200e201154200e2011511b0d01200f" - "201485200e2011858442005221010b2019211c2017211d2018211a201621" - "1b2014211e2011211f20102120200a21210240200141ff01710e02000201" - "0b027e200d20188520122016858450044020152019542013201754201320" - "17511b0d02200d211a20120c010b200d20185a201220165a20122016511b" - "450d0120160b211b0c010b2015211c2013211d200d211a2012211b200f21" - "1e200e211f200b2120200c212120192115201721132018210d2016211220" - "14210f2011210e2010210b200a210c0b200041186a200229037837030020" - "0020022903703703102000200229039001370132200041286a2002418801" - "6a290300370300200041206a20024180016a2903003703002000413a6a20" - "024198016a290300370100200041c2006a200241a0016a29030037010020" - "0041c8006a200241a6016a29010037010020094180014604402000202037" - "0380012000201e3703702000201a3703602000201c370350200020063a00" - "31200020073a0030200041003a000020002021370388012000201f370378" - "2000201b3703682000201d3703580c010b2000200b370380012000200f37" - "03702000200d37036020002015370350200020063a0031200020073a0030" - "200041003a00002000200c370388012000200e3703782000201237036820" - "0020133703580b200241c0086a24000b9f0602027f0c7e23004180016b22" - "022400200241386a4200370300200241306a4200370300200241286a4200" - "370300200241206a22034200370300200241186a4200370300200241106a" - "4200370300200241d8006a4200370300200241e0006a4200370300200241" - "e8006a4200370300200241f0006a4200370300200241f8006a4200370300" - "200242003703482002420137034020024200370308200242003703002002" - "420037035002400240024020012002104a0d00200141206a2003104a0d00" - "200141406b200241406b104a0d00200141e0006a200241e0006a104a450d" - "010b200141f8006a290300210e200141e8006a2903002106200129037021" - "0c2001290360210d200129035022042001290340220884200141d8006a29" - "0300220b200141c8006a290300220984844200520440427f4200427f4200" - "200842788342c7faf3c3ed82a3903c561b22052005200954ad7d20052009" - "7d220542f3eab8bce9ada5bfe8007d220f200554ad7c42017c220a20047d" - "220742a4cffaf397c9eed7c7007d2205200754ad2004200a56ad7d427f51" - "1b200b7d42a9c0c689aece93b2307c210a42c7faf3c3ed82a3903c20087d" - "21070b4200210442002108420021094200210b200c200d842006200e8484" - "4200520440427f4200427f4200200d42788342c7faf3c3ed82a3903c561b" - "22042004200654ad7d200420067d220642f3eab8bce9ada5bfe8007d2208" - "200654ad7c42017c2206200c7d220442a4cffaf397c9eed7c7007d220920" - "0454ad2006200c54ad7d427f511b200e7d42a9c0c689aece93b2307c210b" - "42c7faf3c3ed82a3903c200d7d21040b2000200937037020002004370360" - "20002005370350200020073703402000200b370378200020083703682000" - "200a3703582000200f37034820002001290300370300200041386a200141" - "386a290300370300200041306a200141306a290300370300200041286a20" - "0141286a290300370300200041206a200141206a29030037030020004118" - "6a200141186a290300370300200041106a200141106a2903003703002000" - "41086a200141086a2903003703000c010b20002001418001104c1a0b2002" - "4180016a24000bc10201067f41102000410b6a4178712000410b491b2204" - "411c6a1001220045044041000f0b200041086b210102402000410f714504" - "40200121000c010b200041046b220528020022064178712000410f6a4170" - "7141086b2200200020016b4111494104746a220020016b22026b21032006" - "410371044020002003200028020441017172410272360204200020036a22" - "032003280204410172360204200520022005280200410171724102723602" - "00200120026a220320032802044101723602042001200210170c010b2001" - "2802002101200020033602042000200120026a3602000b02402000280204" - "2201410371450d0020014178712202200441106a4d0d0020002004200141" - "017172410272360204200020046a2201200220046b220441037236020420" - "0020026a220220022802044101723602042001200410170b200041086a0b" - "de0a01047f230041f0026b22032400200341a8026a220442003703002003" - "41a0026a22054200370300200342003703c802200342003703c002200342" - "003703b802200342013703b0022003420037039802200342003703900220" - "0341b0026a21060240024002400240200120034190026a104a4504402001" - "41206a2006104a450d010b20044200370300200542003703002003420037" - "03c802200342003703c002200342003703b802200342013703b002200342" - "00370398022003420037039002200220034190026a104a45044020024120" - "6a2006104a450d020b200341206a2104200341406b2105200341a8026a42" - "00370300200341a0026a4200370300200342003703c802200342003703c0" - "02200342003703b802200342013703b00220034200370398022003420037" - "039002027f0240200120034190026a104a450440200141206a200341b002" - "6a104a450d010b20042001290320370300200441186a200141386a290300" - "370300200441106a200141306a290300370300200441086a200141286a29" - "0300370300200341106a200141106a290300370300200341186a20014118" - "6a290300370300200320012903003703002003200141086a290300370308" - "200341d0006a0c010b20054200370300200341106a420037030020034118" - "6a4200370300200541086a4200370300200541106a420037030020054118" - "6a4200370300200342003703002003420037030820042105200341306a0b" - "210620034180016a2101200341a0016a2104200642003703082006420037" - "03002005420037030820054201370300200341a8026a4200370300200341" - "a0026a4200370300200342003703c802200342003703c002200342003703" - "b802200342013703b00220034200370398022003420037039002027f0240" - "200220034190026a104a450440200241206a200341b0026a104a450d010b" - "20012002290320370300200141186a200241386a29030037030020014110" - "6a200241306a290300370300200141086a200241286a2903003703002003" - "41f0006a200241106a290300370300200341f8006a200241186a29030037" - "0300200320022903003703602003200241086a290300370368200341b001" - "6a0c010b20044200370300200341f0006a4200370300200341f8006a4200" - "370300200441086a4200370300200441106a4200370300200441186a4200" - "37030020034200370360200342003703682001210420034190016a0b2205" - "420037030820054200370300200442003703082004420137030020034190" - "026a2003200341e0006a1040200341c0016a20034190026a104120032802" - "c001410171450d02200020032903d001370300200041386a20034188026a" - "290300370300200041306a20034180026a290300370300200041286a2003" - "41f8016a290300370300200041206a200341f0016a290300370300200041" - "186a200341e8016a290300370300200041106a200341e0016a2903003703" - "00200041086a200341d8016a2903003703000c030b200020022903003703" - "00200041386a200241386a290300370300200041306a200241306a290300" - "370300200041286a200241286a290300370300200041206a200241206a29" - "0300370300200041186a200241186a290300370300200041106a20024110" - "6a290300370300200041086a200241086a2903003703000c020b20002001" - "290300370300200041386a200141386a290300370300200041306a200141" - "306a290300370300200041286a200141286a290300370300200041206a20" - "0141206a290300370300200041186a200141186a29030037030020004110" - "6a200141106a290300370300200041086a200141086a2903003703000c01" - "0b41c4a0c000412041f4a0c0001021000b200341f0026a24000bf2020201" - "7f067e230041e0006b22022400200241386a4200370300200241306a4200" - "370300200242003703582002420037035020024200370348420121042002" - "42013703402002420037032820024200370320027e02402001200241206a" - "104a450440200141206a200241406b104a450d010b200241106a20014110" - "6a290300370300200241186a200141186a29030037030020022001290300" - "3703002002200141086a290300370308200141286a290300210520012903" - "30210620012903202107200141386a2903000c010b42002104200241106a" - "4200370300200241186a4200370300200242003703002002420037030842" - "01210742000b210820004200370358200042003703502000200437034020" - "002006370330200020073703202000200229030037030020002003370348" - "2000200837033820002005370328200041086a2002290308370300200041" - "186a200241186a290300370300200041106a200241106a29030037030020" - "0241e0006a24000b5b01027f0240200041046b2802002202417871220341" - "044108200241037122021b20016a4f0440200241002003200141276a4b1b" - "0d01200010040f0b41f996c000412e41a897c0001011000b41b897c00041" - "2e41e897c0001011000bc30802027f047e230041a0026b22022400200241" - "d8016a4200370300200241d0016a4200370300200241c8016a4200370300" - "200241c0016a22034200370300200241b8016a4200370300200241b0016a" - "4200370300200241f8016a420037030020024180026a4200370300200241" - "88026a420037030020024190026a420037030020024198026a4200370300" - "200242003703e80142012105200242013703e001200242003703a8012002" - "42003703a001200242003703f0010240024002402001200241a0016a104a" - "0d00200141206a2003104a0d00200141406b200241e0016a104a0d002001" - "41e0006a20024180026a104a450d010b200241106a420037030020024118" - "6a4200370300200241206a4200370300200241286a420037030020024140" - "6b200141e0006a290300370300200241c8006a200141e8006a2903003703" - "00200241d0006a200141f0006a290300370300200241d8006a200141f800" - "6a2903003703002002420037030020024200370308200220012903503703" - "302002200141d8006a290300370338200141c8006a290300210620012903" - "40210720024198016a200141386a29030037030020024190016a20014130" - "6a29030037030020024188016a200141286a29030037030020024180016a" - "200141206a290300370300200241f8006a200141186a2903003703002002" - "41f0006a200141106a2903003703002002200141086a2903003703682002" - "20012903003703600c010b42002105200241f0006a4200370300200241f8" - "006a420037030020024180016a420037030020024188016a420037030020" - "024190016a420037030020024198016a4200370300200241406b42003703" - "00200241c8006a4200370300200241d0006a4200370300200241d8006a42" - "00370300200241106a4200370300200241186a4200370300200241206a42" - "00370300200241286a420037030020024200370360200242003703682002" - "420037033020024200370338200242003703002002420037030842012107" - "0b2000200737034020002002290360370300200020022903303703502000" - "2006370348200041086a2002290368370300200041d8006a200229033837" - "0300200041386a20024198016a290300370300200041306a20024190016a" - "290300370300200041286a20024188016a290300370300200041206a2002" - "4180016a290300370300200041186a200241f8006a290300370300200041" - "106a200241f0006a290300370300200041e0006a200241406b2903003703" - "00200041e8006a200241c8006a290300370300200041f0006a200241d000" - "6a290300370300200041f8006a200241d8006a2903003703002000200437" - "0388012000200537038001200020022903003703900120004198016a2002" - "290308370300200041a0016a200241106a290300370300200041a8016a20" - "0241186a290300370300200041b0016a200241206a290300370300200041" - "b8016a200241286a290300370300200241a0026a24000b6802017f017e23" - "0041306b2203240020032001360204200320003602002003410236020c20" - "0341c481c00036020820034202370214200342808080801022042003ad84" - "37032820032004200341046aad843703202003200341206a360210200341" - "086a2002101a000b4101017f230041206b22032400200341003602102003" - "4101360204200342043702082003200136021c2003200036021820032003" - "41186a36020020032002101a000b6801017f230041306b22032400200320" - "01360204200320003602002003410236020c2003418484c0003602082003" - "42023702142003200341046aad4280808080108437032820032003ad4280" - "80808010843703202003200341206a360210200341086a2002101a000b79" - "01017f230041406a220524002005200136020c2005200036020820052003" - "360214200520023602102005410236021c200541d881c000360218200542" - "023702242005200541106aad428080808020843703382005200541086aad" - "428080808030843703302005200541306a360220200541186a2004101a00" - "0b3601017f230041206b22012400200141003602182001410136020c2001" - "41d480c00036020820014204370210200141086a2000101a000bcc060105" - "7f0240024002400240200041046b22062802002207417871220441044108" - "200741037122051b20016a4f044020054100200141276a22082004491b0d" - "0102400240200241094f04402003100b22040d0141000f0b41102003410b" - "6a4178712003410b491b2101024020054504402001418002490d01200420" - "01410472490d01200420016b418180084f0d010c030b200041086b220220" - "046a2105024002400240200120044b0440200541a0a9c000280200460d03" - "2005419ca9c000280200460d02200528020422074102710d042007417871" - "220720046a22042001490d04200520071016200420016b22034110490d01" - "20062001200628020041017172410272360200200120026a220120034103" - "72360204200220046a220420042802044101723602042001200310172000" - "0f0b200420016b2203410f4d0d0520062001200741017172410272360200" - "200120026a22012003410372360204200520052802044101723602042001" - "2003101720000f0b20062004200628020041017172410272360200200220" - "046a2201200128020441017236020420000f0b4194a9c00028020020046a" - "22042001490d010240200420016b2203410f4d0440200620074101712004" - "72410272360200200220046a220120012802044101723602044100210341" - "0021010c010b20062001200741017172410272360200200120026a220120" - "03410172360204200220046a2204200336020020042004280204417e7136" - "02040b419ca9c00020013602004194a9c000200336020020000f0b4198a9" - "c00028020020046a220420014b0d070b20031001220145044041000f0b20" - "012000417c4178200628020022044103711b20044178716a220420032003" - "20044b1b104c21012000100420010f0b200420002001200320012003491b" - "104c210420062802002203417871220541044108200341037122031b2001" - "6a490d0320034100200520084b1b0d0420001004200421000b20000f0b41" - "f996c000412e41a897c0001011000b41b897c000412e41e897c000101100" - "0b41f996c000412e41a897c0001011000b41b897c000412e41e897c00010" - "11000b20062001200741017172410272360200200120026a220320042001" - "6b22014101723602044198a9c000200136020041a0a9c000200336020020" - "000bf10201047f200028020c21020240024020014180024f044020002802" - "1821040240024020002002460440200041144110200028021422021b6a28" - "020022010d01410021020c020b20002802082201200236020c2002200136" - "02080c010b200041146a200041106a20021b210303402003210520012202" - "41146a200241106a200228021422011b210320024114411020011b6a2802" - "0022010d000b200541003602000b2004450d022000200028021c41027441" - "f4a5c0006a220128020047044020044110411420042802102000461b6a20" - "023602002002450d030c020b2001200236020020020d014190a9c0004190" - "a9c000280200417e200028021c77713602000c020b200028020822032002" - "4704402003200236020c200220033602080f0b418ca9c000418ca9c00028" - "0200417e200141037677713602000f0b2002200436021820002802102201" - "044020022001360210200120023602180b20002802142201450d00200220" - "01360214200120023602180b0ba90601047f200020016a21020240024020" - "0028020422034101710d002003410271450d012000280200220320016a21" - "01200020036b2200419ca9c0002802004604402002280204410371410347" - "0d014194a9c000200136020020022002280204417e713602042000200141" - "0172360204200220013602000c020b2000200310160b0240024002402002" - "2802042203410271450440200241a0a9c000280200460d022002419ca9c0" - "00280200460d0320022003417871220310162000200120036a2201410172" - "360204200020016a20013602002000419ca9c000280200470d014194a9c0" - "0020013602000f0b20022003417e71360204200020014101723602042000" - "20016a20013602000b20014180024f0440411f2102200042003702102001" - "41ffffff074d04402001410620014108766722026b764101712002410174" - "6b413e6a21020b2000200236021c200241027441f4a5c0006a2103410120" - "027422044190a9c000280200714504402003200036020020002003360218" - "2000200036020c200020003602084190a9c0004190a9c000280200200472" - "3602000f0b02400240200120032802002204280204417871460440200421" - "020c010b2001411920024101766b41002002411f471b7421030340200420" - "03411d764104716a41106a22052802002202450d02200341017421032002" - "210420022802044178712001470d000b0b20022802082201200036020c20" - "022000360208200041003602182000200236020c200020013602080f0b20" - "052000360200200020043602182000200036020c200020003602080f0b20" - "0141f801714184a7c0006a2102027f418ca9c00028020022034101200141" - "037674220171450440418ca9c000200120037236020020020c010b200228" - "02080b2101200220003602082001200036020c2000200236020c20002001" - "3602080f0b41a0a9c00020003602004198a9c0004198a9c0002802002001" - "6a2201360200200020014101723602042000419ca9c000280200470d0141" - "94a9c0004100360200419ca9c00041003602000f0b419ca9c00020003602" - "004194a9c0004194a9c00028020020016a22013602002000200141017236" - "0204200020016a20013602000b0b8e0201057f230041206b220324002000" - "2802002202417f460440410020011019000b410820024101742204200241" - "016a2205200420054b1b2204200441084d1b220441004804404100200110" - "19000b20032002047f2003200236021c2003200028020436021441010541" - "000b360218200341086a2105027f0240200341146a220228020404402002" - "280208220645044041bda9c0002d00001a0c020b20022802002006410120" - "0410150c020b41bda9c0002d00001a0b200410010b210220052004360208" - "20052002410120021b360204200520024536020020032802084101460440" - "20032802101a200328020c20011019000b200328020c2102200020043602" - "0020002002360204200341206a24000b0d002000450440200110140b000b" - "f40102027f017e230041106b22022400200241013b010c20022001360208" - "20022000360204230041106b22002400200241046a220129020021042000" - "200136020c20002004370204230041106b22022400200041046a22012802" - "00220028020c2103024002400240024020002802040e020001020b20030d" - "0141012100410021030c020b20030d002000280200220028020421032000" - "28020021000c010b20024180808080783602002002200136020c20012802" - "0822012d0008210020012d00091a2002410420001033000b200220033602" - "0420022000360200200128020822012d0008210020012d00091a20024105" - "20001033000b6801017f230041306b220324002003200136020420032000" - "3602002003410236020c200341e483c00036020820034202370214200320" - "0341046aad4280808080108437032820032003ad42808080801084370320" - "2003200341206a360210200341086a2002101a000bcf06010b7f20002802" - "002102230041106b22072400410a2103024020024190ce00490440200221" - "000c010b0340200741066a20036a220441046b20024190ce006e220041f0" - "b1036c20026a220541ffff037141e4006e220641017441e881c0006a2f00" - "003b0000200441026b2006419c7f6c20056a41ffff037141017441e881c0" - "006a2f00003b0000200341046b2103200241ffc1d72f4b21042000210220" - "040d000b0b0240200041e3004d0440200021020c010b200341026b220320" - "0741066a6a200041ffff037141e4006e2202419c7f6c20006a41ffff0371" - "41017441e881c0006a2f00003b00000b02402002410a4f0440200341026b" - "2203200741066a6a200241017441e881c0006a2f00003b00000c010b2003" - "41016b2203200741066a6a20024130723a00000b027f200741066a20036a" - "210941012108410a20036b220a2001280214220241017122056a21062008" - "410020024104711b2108412b418080c40020051b21052001280200450440" - "4101200128021c22002001280220220320052008101d0d011a2000200920" - "0a200328020c1103000c010b0240024002402006200128020422004f0440" - "200128021c22002001280220220320052008101d450d0141010c040b2002" - "410871450d01200128021021022001413036021020012d0018210c410121" - "0b200141013a0018200128021c22032001280220220420052008101d0d02" - "200020066b41016a210002400340200041016b2200450d01200341302004" - "280210110200450d000b41010c040b410120032009200a200428020c1103" - "000d031a2001200c3a00182001200236021041000c030b20002009200a20" - "0328020c110300210b0c010b200020066b2102024002400240410120012d" - "0018220020004103461b220041016b0e020001020b20022100410021020c" - "010b20024101762100200241016a41017621020b200041016a2100200128" - "0210210620012802202103200128021c210402400340200041016b220045" - "0d01200420062003280210110200450d000b41010c020b4101210b200420" - "0320052008101d0d0020042009200a200328020c1103000d004100210003" - "40410020002002460d021a200041016a2100200420062003280210110200" - "450d000b200041016b2002490c010b200b0b2102200741106a240020020b" - "380002402002418080c400460d00200020022001280210110200450d0041" - "010f0b200345044041000f0b200020034100200128020c1103000bfd0a01" - "0c7f20002802042107200028020021030240024020012802002209200128" - "0208220072044002402000410171450d00200320076a2106024020012802" - "0c2205450440200321020c010b200321020340200222002006460d02027f" - "200041016a20002c0000220241004e0d001a200041026a20024160490d00" - "1a200041036a20024170490d001a200041046a0b220220006b20046a2104" - "2005200841016a2208470d000b0b20022006460d0020022c00001a200420" - "07027f02402004450d00200420074f044020042007460d0141000c020b20" - "0320046a2c000041404e0d0041000c010b20030b22001b21072000200320" - "001b21030b2009450440200128021c20032007200128022028020c110300" - "0f0b2001280204210c200741104f044020072003200341036a417c712204" - "6b22086a220a41037121094100210541002100200320044704402008417c" - "4d04404100210603402000200320066a22022c000041bf7f4a6a20024101" - "6a2c000041bf7f4a6a200241026a2c000041bf7f4a6a200241036a2c0000" - "41bf7f4a6a2100200641046a22060d000b0b200321020340200020022c00" - "0041bf7f4a6a2100200241016a2102200841016a22080d000b0b02402009" - "450d002004200a417c716a22022c000041bf7f4a210520094101460d0020" - "0520022c000141bf7f4a6a210520094102460d00200520022c000241bf7f" - "4a6a21050b200a4102762106200020056a21050340200421092006450d04" - "41c0012006200641c0014f1b220a410371210b200a410274210d41002102" - "200641044f04402004200d41f007716a2108200421000340200028020c22" - "04417f7341077620044106767241818284087120002802082204417f7341" - "077620044106767241818284087120002802042204417f73410776200441" - "06767241818284087120002802002204417f734107762004410676724181" - "8284087120026a6a6a6a2102200041106a22002008470d000b0b2006200a" - "6b21062009200d6a2104200241087641ff81fc0771200241ff81fc07716a" - "418180046c41107620056a2105200b450d000b2009200a41fc0171410274" - "6a22022802002200417f734107762000410676724181828408712100200b" - "4101460d0220022802042204417f73410776200441067672418182840871" - "20006a2100200b4102460d0220022802082202417f734107762002410676" - "7241818284087120006a21000c020b2007450440410021050c030b200741" - "03712102027f200741044904404100210041000c010b20032c000041bf7f" - "4a20032c000141bf7f4a6a20032c000241bf7f4a6a20032c000341bf7f4a" - "6a22052007410c7122004104460d001a200520032c000441bf7f4a6a2003" - "2c000541bf7f4a6a20032c000641bf7f4a6a20032c000741bf7f4a6a2205" - "20004108460d001a200520032c000841bf7f4a6a20032c000941bf7f4a6a" - "20032c000a41bf7f4a6a20032c000b41bf7f4a6a0b21052002450d022000" - "20036a21000340200520002c000041bf7f4a6a2105200041016a21002002" - "41016b22020d000b0c020b200128021c20032007200128022028020c1103" - "000f0b200041087641ff811c71200041ff81fc07716a418180046c411076" - "20056a21050b02402005200c490440200c20056b21060240024002402001" - "2d00182200410020004103471b220041016b0e020001020b200621004100" - "21060c010b20064101762100200641016a41017621060b200041016a2100" - "2001280210210820012802202102200128021c21040340200041016b2200" - "450d02200420082002280210110200450d000b41010f0b200128021c2003" - "2007200128022028020c1103000f0b200420032007200228020c11030004" - "4041010f0b4100210003402000200646044041000f0b200041016a210020" - "0420082002280210110200450d000b200041016b2006490b140020002802" - "002001200028020428020c1102000b0e0041e480c000412b20001011000b" - "5901017f230041306b220324002003200136020c20032000360208200341" - "01360214200341dc80c0003602102003420137021c2003200341086aad42" - "8080808030843703282003200341286a360218200341106a2002101a000b" - "7f01017f027f0240027f0240200228020404402002280208220345044020" - "01450d0441bda9c0002d00001a0c020b200228020020034104200110150c" - "020b2001450d0241bda9c0002d00001a0b200110010b2202410420021b21" - "032002450c010b4104210341000b21022000200136020820002003360204" - "200020023602000bdd0101087f230041206b220224002000280200220341" - "7f460440410020011019000b20034101742204200341016a220620042006" - "4b1b220441ffffffff034b0440410020011019000b024041042004200441" - "044d1b2207410274220641fcffffff074d047f4100210420022003047f20" - "02200341027436021c2002200028020436021441040520040b3602182002" - "41086a2006200241146a102220022802084101470d012002280210210520" - "0228020c0520050b210820052109200820011019000b200228020c210320" - "00200736020020002003360204200241206a24000bd10d021c7f077e2300" - "41206b220c2400200341016b211102400240024002402003044020034102" - "6b210520034101460d0402402001280208221420036b221941016a220e41" - "ffffffff034b0d00200e410274220441fdffffff074f0d00200220114102" - "746a2802002115200220054102746a3502002123027f2004450440410421" - "0b41000c010b41bda9c0002d00001a20041001220b450d05200b41046b2d" - "00004103710440200b2004104b1a0b200e0b21102001280200211a201421" - "09200e044020012802042212200941027420034102746b6a211320034101" - "7121162003417e71210d201241086b211b201241046b211c42002015ad22" - "2242208622247d2125200e210f0340024020090440201c20094102742204" - "6a22050d010b41ec87c0001020000b027f0240200941024f044020052802" - "0021052004201b6a350200212120082015490d012005ad2008ad7c212041" - "7f0c020b417f417e20141b410141fc87c0001010000b2005ad2008ad4220" - "868422202020202280222620227e7d21202026a70b21070240202042ffff" - "ffff0f560d00202520204220867c20217c21210340202120247c22212007" - "ad20237e5a0d01200741016b2107202020227c2220428080808010540d00" - "0b0b02400240024002402009200f41016b220f4f0440200f410274211720" - "09200f460d04201220176a21182007ad212102400240201145044042ffff" - "ffff0f2120410021060c010b4100210642ffffffff0f2120201321042002" - "210503402004202020043502007c202120053502007e7d42ffffffff1f7d" - "22203e0200200441046a220a200a35020020204220887c2021200541046a" - "3502007e7d42ffffffff1f7d22203e020020204220882120200441086a21" - "04200541086a2105200d200641026a2206470d000b2016450d010b201820" - "0641027422046a2205202020053502007c2021200220046a3502007e7d42" - "ffffffff1f7d22203e0200202042208821200b20082020a7417f734f0d04" - "20114504404100210a410021080c030b41002104410021084100210a0340" - "200420136a22052005280200221d200220046a221e2802006a220620086a" - "2208360200200541046a22052005280200221f201e41046a2802006a2205" - "2006201d49200620084b726a22063602002005201f49200520064b722108" - "200441086a2104200d200a41026a220a470d000b0c010b200f2009418c88" - "c000101b000b2016450d010b2018200a41027422046a2205200528020020" - "0220046a2802006a20086a3602000b200741016b21070b200b20176a2007" - "3602002001200941016b2209360208201341046b2113201220094102746a" - "2802002108200f0d000b0b2009201a460440200141dc87c00010230b2001" - "200941016a220d3602082001280204220a200941027422046a2008360200" - "20080d03200d41ffffffff0371210702400340200721052004417c460d01" - "200541016b21072004200a6a2106200441046b21042006280200450d000b" - "2005200d4b0d040c030b410021050c020b41cc87c0001014000b20114100" - "41ac87c0001010000b200120053602082005210d0b024002400240024002" - "40200d200128020022044102764f0d002004200d490d012004450d002004" - "41027421040240200d450440200a41046b28020022054178712207410441" - "08200541037122051b20046a490d04200541002007200441276a4b1b0d05" - "200a1004410421040c010b200a20044104200d41027410152204450d060b" - "2001200d360200200120043602040b41002106200e450d03200b200e4102" - "746a41046b2802000440200e21060c040b201441027420034102746b2104" - "201941026a210503402004417c460d04200541016b21052004200b6a2107" - "200441046b21042007280200450d000b200e20052005200e4b1b21060c03" - "0b200c4100360218200c410136020c200c41ec84c000360208200c420437" - "0210200c41086a41f484c000101a000b41f996c000412e41a897c0001011" - "000b41b897c000412e41e897c0001011000b024002400240024020104102" - "7620064d0440201021040c010b200620104b0d01410021042010450d0020" - "1041027421052006450440200b41046b2802002207417871220a41044108" - "200741037122071b20056a490d0320074100200a200541276a4b1b0d0420" - "0b10044104210b0c010b200b20054104200622044102741015220b450d04" - "0b200020063602082000200b360204200020043602002000200129020037" - "020c200041146a200141086a280200360200200c41206a24000f0b200c41" - "00360218200c410136020c200c41ec84c000360208200c4204370210200c" - "41086a41f484c000101a000b41f996c000412e41a897c0001011000b41b8" - "97c000412e41e897c00010110b000b2005410141bc87c0001010000be609" - "010c7f230041306b220724002001280200210c0240024002400240024002" - "400240024002400240024002400240024020024504402001280204210b20" - "0c418080808078470d02200b41086a280200220441ffffffff034d044020" - "04410274220641fdffffff07490d020b41a89cc0001014000b2001280204" - "220b2001200c418080808078461b2208280208220941feffffff014f0d04" - "41bda9c0002d00001a200941026a220141027410012205450d0720054100" - "360200200720053602102007200136020c41012101200741013602142008" - "2802082206410274210d200828020421082006200941016a4b0440200741" - "0c6a2105230041206b22042400024002402006417f460d00200528020022" - "09410174220a200641016a22012001200a491b220141ffffffff034b0d00" - "41042001200141044d1b220f410274220a41fcffffff074b0d0020042009" - "047f2004200941027436021c2004200528020436021441040541000b3602" - "18200441086a200a200441146a102220042802084101470d012004280210" - "1a200428020c210e0b200e41c096c0001019000b200428020c2101200520" - "0f36020020052001360204200441206a2400200728021021052007280214" - "21010b200520014102746a2008200d104c1a2007200120066a2204360214" - "0c030b200b41046a28020021092006450440410421054100210141042009" - "2006104c1a0c020b41bda9c0002d00001a20042101200610012205450d06" - "200520092006104c1a0c010b20012802082104200c2101200b21050b2007" - "2004360214200720053602102007200136020c0b200341ff0171450d0202" - "40200220044d044020022004470d01200221040c040b2002410041c889c0" - "00101b000b20044102742109200241027421012003411f71210841002003" - "6b411f71210d410021030340200120056a22062006280200220620087420" - "03723602002006200d7621032009200141046a2201470d000b0c010b41a8" - "89c00010140c020b2003450d00200728020c20044604402007410c6a41b8" - "89c0001023200728021021050b200520044102746a200336020020072004" - "41016a22043602140b41002108200728020c210a02402004450d00200520" - "0441027422016a41046b2802000440200421080c010b200541046b210d20" - "0441ffffffff037121030340200321062001450d01200641016b21032001" - "200d6a2109200141046b21012009280200450d000b200420062004200649" - "1b21080b0240200a41027620084d0440200a21010c010b2008200a4b0d02" - "41002101200a450d00200a41027421032008450440200541046b28020022" - "06417871220941044108200641037122061b20036a490d04200641002009" - "200341276a4b1b0d0520051004410421050c010b20052003410420082201" - "41027410152205450d010b20002008360208200020053602042000200136" - "02002002450d06200c41808080807872418080808078460d06200b41046b" - "28020022014178712203200c410274220641044108200141037122011b6a" - "490d04200141002003200641276a4b1b0d05200b10040c060b000b200741" - "003602282007410136021c200741ec84c000360218200742043702202007" - "41186a41f484c000101a000b41f996c000412e41a897c0001011000b41b8" - "97c000412e41e897c0001011000b41f996c000412e41a897c0001011000b" - "41b897c000412e41e897c0001011000b200741306a24000bc60201027f41" - "bda9c0002d00001a024002400240412010012202450d0020022001290000" - "370200200220012900083702082002200129001037021020022001280018" - "3602182002200128001c220336021c410821012000027f410820030d001a" - "41082002411c6a2802000d001a4107200241186a2802000d001a41062002" - "41146a2802000d001a4105200241106a2802000d001a41042002410c6a28" - "02000d001a4103200241086a2802000d001a4102200241046a2802000d00" - "1a2002280200450440200241046b28020022014178714124412820014103" - "7122031b490d0320034100200141c8004f1b0d0420021004410421024100" - "210141000c010b200241204104410410152202450d014101210141010b36" - "020820002002360204200020013602000f0b000b41f996c000412e41a897" - "c0001011000b41b897c000412e41e897c0001011000bcc3e01227f200120" - "024106746a2124200028021c21222000280218211f2000280214211e2000" - "280210211b200028020c2123200028020821202000280204211d20002802" - "002102034020022001280000220341187420034180fe0371410874722003" - "4108764180fe03712003411876727222152022201b411a77201b41157773" - "201b410777736a201e201f73201b71201f736a6a4198dfa894046a220420" - "1d202073200271201d202071732002411e772002411377732002410a7773" - "6a6a2203411e772003411377732003410a777320032002201d7371200220" - "1d71736a201f2001280004220541187420054180fe037141087472200541" - "08764180fe03712005411876727222136a200420236a2207201b201e7371" - "201e736a2007411a772007411577732007410777736a419189dd89076a22" - "066a2205411e772005411377732005410a77732005200220037371200220" - "0371736a201e2001280008220441187420044180fe037141087472200441" - "08764180fe03712004411876727222146a200620206a220c2007201b7371" - "201b736a200c411a77200c41157773200c410777736a41b188fcd1046b22" - "0d6a2204411e772004411377732004410a77732004200320057371200320" - "0571736a201b200128000c220641187420064180fe037141087472200641" - "08764180fe03712006411876727222116a200d201d6a220d2007200c7371" - "2007736a200d411a77200d41157773200d410777736a41dbc8a8b2016b22" - "086a2206411e772006411377732006410a77732006200420057371200420" - "0571736a20072001280010220f411874200f4180fe037141087472200f41" - "08764180fe0371200f411876727222166a200220086a220f200c200d7371" - "200c736a200f411a77200f41157773200f410777736a41db84dbca036a22" - "096a2207411e772007411377732007410a77732007200420067371200420" - "0671736a2001280014220841187420084180fe0371410874722008410876" - "4180fe0371200841187672722218200c6a200320096a220c200d200f7371" - "200d736a200c411a77200c41157773200c410777736a41f1a3c4cf056a22" - "096a2203411e772003411377732003410a77732003200620077371200620" - "0771736a2001280018220841187420084180fe0371410874722008410876" - "4180fe0371200841187672722219200d6a200520096a220d200c200f7371" - "200f736a200d411a77200d41157773200d410777736a41dcfa81ee066b22" - "096a2205411e772005411377732005410a77732005200320077371200320" - "0771736a200128001c220841187420084180fe0371410874722008410876" - "4180fe037120084118767272221a200f6a200420096a220f200c200d7371" - "200c736a200f411a77200f41157773200f410777736a41abc28ea7056b22" - "096a2204411e772004411377732004410a77732004200320057371200320" - "0571736a2001280020220841187420084180fe0371410874722008410876" - "4180fe0371200841187672722202200c6a200620096a220c200d200f7371" - "200d736a200c411a77200c41157773200c410777736a41e8aae1bf026b22" - "096a2206411e772006411377732006410a77732006200420057371200420" - "0571736a2001280024220841187420084180fe0371410874722008410876" - "4180fe037120084118767272220a200d6a200720096a220d200c200f7371" - "200f736a200d411a77200d41157773200d410777736a4181b68d94016a22" - "096a2207411e772007411377732007410a77732007200420067371200420" - "0671736a2001280028220841187420084180fe0371410874722008410876" - "4180fe037120084118767272220b200f6a200320096a220f200c200d7371" - "200c736a200f411a77200f41157773200f410777736a41be8bc6a1026a22" - "096a2203411e772003411377732003410a77732003200620077371200620" - "0771736a200128002c220841187420084180fe0371410874722008410876" - "4180fe0371200841187672722210200c6a200520096a2208200d200f7371" - "200d736a2008411a772008411577732008410777736a41c3fbb1a8056a22" - "096a2205411e772005411377732005410a77732005200320077371200320" - "0771736a2001280030220c411874200c4180fe037141087472200c410876" - "4180fe0371200c4118767272221c200d6a200420096a22092008200f7371" - "200f736a2009411a772009411577732009410777736a41f4baf995076a22" - "0d6a2204411e772004411377732004410a77732004200320057371200320" - "0571736a2001280034220c411874200c4180fe037141087472200c410876" - "4180fe0371200c41187672722221200f6a2006200d6a220e200820097371" - "2008736a200e411a77200e41157773200e410777736a41829c85f9076b22" - "0d6a2206411e772006411377732006410a77732006200420057371200420" - "0571736a2001280038220c411874200c4180fe037141087472200c410876" - "4180fe0371200c4118767272220c20086a2007200d6a22122009200e7371" - "2009736a2012411a772012411577732012410777736a41d9f28fa1066b22" - "0f6a2207411e772007411377732007410a77732007200420067371200420" - "0671736a200128003c220d411874200d4180fe037141087472200d410876" - "4180fe0371200d4118767272220d20096a2003200f6a2217200e20127371" - "200e736a2017411a772017411577732017410777736a418c9d90f3036b22" - "086a2203411e772003411377732003410a77732003200620077371200620" - "0771736a20134119772013410e777320134103767320156a200a6a200c41" - "0f77200c410d7773200c410a76736a220f200e6a200520086a2215201220" - "1773712012736a2015411a772015411577732015410777736a41bfac92db" - "016b22096a2205411e772005411377732005410a77732005200320077371" - "2003200771736a20144119772014410e777320144103767320136a200b6a" - "200d410f77200d410d7773200d410a76736a220820126a200420096a2213" - "2015201773712017736a2013411a772013411577732013410777736a41fa" - "f08682016b220e6a2204411e772004411377732004410a77732004200320" - "0573712003200571736a20114119772011410e777320114103767320146a" - "20106a200f410f77200f410d7773200f410a76736a220920176a2006200e" - "6a22142013201573712015736a2014411a77201441157773201441077773" - "6a41c6bb86fe006a22126a2206411e772006411377732006410a77732006" - "2004200573712004200571736a20164119772016410e7773201641037673" - "20116a201c6a2008410f772008410d77732008410a76736a220e20156a20" - "0720126a22112013201473712013736a2011411a77201141157773201141" - "0777736a41ccc3b2a0026a22176a2207411e772007411377732007410a77" - "7320072004200673712004200671736a20184119772018410e7773201841" - "03767320166a20216a2009410f772009410d77732009410a76736a221220" - "136a200320176a22162011201473712014736a2016411a77201641157773" - "2016410777736a41efd8a4ef026a22156a2203411e772003411377732003" - "410a777320032006200773712006200771736a20194119772019410e7773" - "20194103767320186a200c6a200e410f77200e410d7773200e410a76736a" - "221720146a200520156a22182011201673712011736a2018411a77201841" - "1577732018410777736a41aa89d2d3046a22136a2205411e772005411377" - "732005410a777320052003200773712003200771736a201a411977201a41" - "0e7773201a4103767320196a200d6a2012410f772012410d77732012410a" - "76736a221520116a200420136a22192016201873712016736a2019411a77" - "2019411577732019410777736a41dcd3c2e5056a22146a2204411e772004" - "411377732004410a777320042003200573712003200571736a2002411977" - "2002410e7773200241037673201a6a200f6a2017410f772017410d777320" - "17410a76736a221320166a200620146a221a2018201973712018736a201a" - "411a77201a41157773201a410777736a41da91e6b7076a22116a2206411e" - "772006411377732006410a777320062004200573712004200571736a200a" - "411977200a410e7773200a4103767320026a20086a2015410f772015410d" - "77732015410a76736a221420186a200720116a22022019201a7371201973" - "6a2002411a772002411577732002410777736a41aedd86be066b22166a22" - "07411e772007411377732007410a77732007200420067371200420067173" - "6a200b411977200b410e7773200b41037673200a6a20096a2013410f7720" - "13410d77732013410a76736a221120196a200320166a220a2002201a7371" - "201a736a200a411a77200a41157773200a410777736a4193f3b8be056b22" - "186a2203411e772003411377732003410a77732003200620077371200620" - "0771736a20104119772010410e7773201041037673200b6a200e6a201441" - "0f772014410d77732014410a76736a2216201a6a200520186a220b200220" - "0a73712002736a200b411a77200b41157773200b410777736a41b8b0f3ff" - "046b22196a2205411e772005411377732005410a77732005200320077371" - "2003200771736a201c411977201c410e7773201c4103767320106a20126a" - "2011410f772011410d77732011410a76736a221820026a200420196a2202" - "200a200b7371200a736a2002411a772002411577732002410777736a41b9" - "809a85046b221a6a2204411e772004411377732004410a77732004200320" - "0573712003200571736a20214119772021410e7773202141037673201c6a" - "20176a2016410f772016410d77732016410a76736a2219200a6a2006201a" - "6a220a2002200b7371200b736a200a411a77200a41157773200a41077773" - "6a418de8ffc8036b22106a2206411e772006411377732006410a77732006" - "2004200573712004200571736a200c411977200c410e7773200c41037673" - "20216a20156a2018410f772018410d77732018410a76736a221a200b6a20" - "0720106a220b2002200a73712002736a200b411a77200b41157773200b41" - "0777736a41b9dde1d2026b22106a2207411e772007411377732007410a77" - "7320072004200673712004200671736a200d411977200d410e7773200d41" - "037673200c6a20136a2019410f772019410d77732019410a76736a220c20" - "026a200320106a2202200a200b7371200a736a2002411a77200241157773" - "2002410777736a41d1c6a9366a22106a2203411e77200341137773200341" - "0a777320032006200773712006200771736a200f411977200f410e777320" - "0f41037673200d6a20146a201a410f77201a410d7773201a410a76736a22" - "0d200a6a200520106a220a2002200b7371200b736a200a411a77200a4115" - "7773200a410777736a41e7d2a4a1016a22106a2205411e77200541137773" - "2005410a777320052003200773712003200771736a20084119772008410e" - "7773200841037673200f6a20116a200c410f77200c410d7773200c410a76" - "736a220f200b6a200420106a220b2002200a73712002736a200b411a7720" - "0b41157773200b410777736a418595dcbd026a22106a2204411e77200441" - "1377732004410a777320042003200573712003200571736a200941197720" - "09410e777320094103767320086a20166a200d410f77200d410d7773200d" - "410a76736a220820026a200620106a2202200a200b7371200a736a200241" - "1a772002411577732002410777736a41b8c2ecf0026a22106a2206411e77" - "2006411377732006410a777320062004200573712004200571736a200e41" - "1977200e410e7773200e4103767320096a20186a200f410f77200f410d77" - "73200f410a76736a2209200a6a200720106a220a2002200b7371200b736a" - "200a411a77200a41157773200a410777736a41fcdbb1e9046a22106a2207" - "411e772007411377732007410a777320072004200673712004200671736a" - "20124119772012410e7773201241037673200e6a20196a2008410f772008" - "410d77732008410a76736a220e200b6a200320106a220b2002200a737120" - "02736a200b411a77200b41157773200b410777736a41939ae099056a2210" - "6a2203411e772003411377732003410a7773200320062007737120062007" - "71736a20174119772017410e777320174103767320126a201a6a2009410f" - "772009410d77732009410a76736a221220026a200520106a2202200a200b" - "7371200a736a2002411a772002411577732002410777736a41d4e6a9a806" - "6a22106a2205411e772005411377732005410a7773200520032007737120" - "03200771736a20154119772015410e777320154103767320176a200c6a20" - "0e410f77200e410d7773200e410a76736a2217200a6a200420106a220a20" - "02200b7371200b736a200a411a77200a41157773200a410777736a41bb95" - "a8b3076a22106a2204411e772004411377732004410a7773200420032005" - "73712003200571736a20134119772013410e777320134103767320156a20" - "0d6a2012410f772012410d77732012410a76736a2215200b6a200620106a" - "220b2002200a73712002736a200b411a77200b41157773200b410777736a" - "41d2edf4f1076b22106a2206411e772006411377732006410a7773200620" - "04200573712004200571736a20144119772014410e777320144103767320" - "136a200f6a2017410f772017410d77732017410a76736a221320026a2007" - "20106a2202200a200b7371200a736a2002411a7720024115777320024107" - "77736a41fba6b7ec066b22106a2207411e772007411377732007410a7773" - "20072004200673712004200671736a20114119772011410e777320114103" - "767320146a20086a2015410f772015410d77732015410a76736a2214200a" - "6a200320106a220a2002200b7371200b736a200a411a77200a4115777320" - "0a410777736a41dfae80ea056b22106a2203411e77200341137773200341" - "0a777320032006200773712006200771736a20164119772016410e777320" - "164103767320116a20096a2013410f772013410d77732013410a76736a22" - "11200b6a200520106a220b2002200a73712002736a200b411a77200b4115" - "7773200b410777736a41b5b396bf056b22106a2205411e77200541137773" - "2005410a777320052003200773712003200771736a20184119772018410e" - "777320184103767320166a200e6a2014410f772014410d77732014410a76" - "736a221620026a200420106a2202200a200b7371200a736a2002411a7720" - "02411577732002410777736a4190e9d1ed036b22106a2204411e77200441" - "1377732004410a777320042003200573712003200571736a201941197720" - "19410e777320194103767320186a20126a2011410f772011410d77732011" - "410a76736a2218200a6a200620106a220a2002200b7371200b736a200a41" - "1a77200a41157773200a410777736a41dddccec4036b22106a2206411e77" - "2006411377732006410a777320062004200573712004200571736a201a41" - "1977201a410e7773201a4103767320196a20176a2016410f772016410d77" - "732016410a76736a2219200b6a200720106a220b2002200a73712002736a" - "200b411a77200b41157773200b410777736a41e7afb4f3026b22106a2207" - "411e772007411377732007410a777320072004200673712004200671736a" - "200c411977200c410e7773200c41037673201a6a20156a2018410f772018" - "410d77732018410a76736a221a20026a200320106a2202200a200b737120" - "0a736a2002411a772002411577732002410777736a41dcf39bcb026b2210" - "6a2203411e772003411377732003410a7773200320062007737120062007" - "71736a200d411977200d410e7773200d41037673200c6a20136a2019410f" - "772019410d77732019410a76736a220c200a6a200520106a220a2002200b" - "7371200b736a200a411a77200a41157773200a410777736a41fb94c7df00" - "6b22106a2205411e772005411377732005410a7773200520032007737120" - "03200771736a200f411977200f410e7773200f41037673200d6a20146a20" - "1a410f77201a410d7773201a410a76736a220d200b6a200420106a220b20" - "02200a73712002736a200b411a77200b41157773200b410777736a41f0c0" - "aa83016a22106a2204411e772004411377732004410a7773200420032005" - "73712003200571736a20084119772008410e7773200841037673200f6a20" - "116a200c410f77200c410d7773200c410a76736a220f20026a200620106a" - "2202200a200b7371200a736a2002411a772002411577732002410777736a" - "41968293cd016a221c6a2206411e772006411377732006410a7773200620" - "04200573712004200571736a20094119772009410e777320094103767320" - "086a20166a200d410f77200d410d7773200d410a76736a2210200a6a2007" - "201c6a22082002200b7371200b736a2008411a7720084115777320084107" - "77736a4188d8ddf1016a221c6a2207411e772007411377732007410a7773" - "20072004200673712004200671736a200e411977200e410e7773200e4103" - "767320096a20186a200f410f77200f410d7773200f410a76736a220a200b" - "6a2003201c6a22092002200873712002736a2009411a7720094115777320" - "09410777736a41cceea1ba026a221c6a2203411e77200341137773200341" - "0a777320032006200773712006200771736a20124119772012410e777320" - "1241037673200e6a20196a2010410f772010410d77732010410a76736a22" - "0b20026a2005201c6a220e2008200973712008736a200e411a77200e4115" - "7773200e410777736a41b5f9c2a5036a22026a2205411e77200541137773" - "2005410a777320052003200773712003200771736a20174119772017410e" - "777320174103767320126a201a6a200a410f77200a410d7773200a410a76" - "736a221220086a200220046a22082009200e73712009736a2008411a7720" - "08411577732008410777736a41b399f0c8036a22026a2204411e77200441" - "1377732004410a777320042003200573712003200571736a201541197720" - "15410e777320154103767320176a200c6a200b410f77200b410d7773200b" - "410a76736a221720096a200220066a22092008200e7371200e736a200941" - "1a772009411577732009410777736a41cad4e2f6046a22026a2206411e77" - "2006411377732006410a777320062004200573712004200571736a201341" - "19772013410e777320134103767320156a200d6a2012410f772012410d77" - "732012410a76736a2215200e6a200220076a220e2008200973712008736a" - "200e411a77200e41157773200e410777736a41cf94f3dc056a22026a2207" - "411e772007411377732007410a777320072004200673712004200671736a" - "20144119772014410e777320144103767320136a200f6a2017410f772017" - "410d77732017410a76736a221320086a200220036a22082009200e737120" - "09736a2008411a772008411577732008410777736a41f3dfb9c1066a2202" - "6a2203411e772003411377732003410a7773200320062007737120062007" - "71736a20114119772011410e777320114103767320146a20106a2015410f" - "772015410d77732015410a76736a221420096a200220056a22092008200e" - "7371200e736a2009411a772009411577732009410777736a41ee85bea407" - "6a22026a2205411e772005411377732005410a7773200520032007737120" - "03200771736a20164119772016410e777320164103767320116a200a6a20" - "13410f772013410d77732013410a76736a2211200e6a200220046a220e20" - "08200973712008736a200e411a77200e41157773200e410777736a41efc6" - "95c5076a22026a2204411e772004411377732004410a7773200420032005" - "73712003200571736a20184119772018410e777320184103767320166a20" - "0b6a2014410f772014410d77732014410a76736a221620086a200220066a" - "22082009200e73712009736a2008411a772008411577732008410777736a" - "41ec8fded9076b22026a2206411e772006411377732006410a7773200620" - "04200573712004200571736a20194119772019410e777320194103767320" - "186a20126a2011410f772011410d77732011410a76736a221220096a2002" - "20076a22092008200e7371200e736a2009411a7720094115777320094107" - "77736a41f8fbe399076b22116a2207411e772007411377732007410a7773" - "20072004200673712004200671736a201a411977201a410e7773201a4103" - "767320196a20176a2016410f772016410d77732016410a76736a2217200e" - "6a200320116a220e2008200973712008736a200e411a77200e4115777320" - "0e410777736a41868084fa066b22116a2203411e77200341137773200341" - "0a777320032006200773712006200771736a200c411977200c410e777320" - "0c41037673201a6a20156a2012410f772012410d77732012410a76736a22" - "1220086a200520116a22052009200e73712009736a2005411a7720054115" - "77732005410777736a4195a6bedd056b22156a2208411e77200841137773" - "2008410a777320082003200773712003200771736a200c200d411977200d" - "410e7773200d410376736a20136a2017410f772017410d77732017410a76" - "736a20096a200420156a22042005200e7371200e736a2004411a77200441" - "1577732004410777736a4189b89988046b22096a220c2003200873712003" - "200871736a200c411e77200c41137773200c410a77736a200d200f411977" - "200f410e7773200f410376736a20146a2012410f772012410d7773201241" - "0a76736a200e6a200620096a22062004200573712005736a2006411a7720" - "06411577732006410777736a418e8ebacc036b220d6a2102200c201d6a21" - "1d2007201b6a200d6a211b200820206a21202006201e6a211e200320236a" - "21232004201f6a211f200520226a2122200141406b22012024470d000b20" - "00202236021c2000201f3602182000201e3602142000201b360210200020" - "2336020c200020203602082000201d360204200020023602000b89010101" - "7f027f0240200328020404402003280208220445044020012002450d031a" - "41bda9c0002d00001a20014109490d022002100b0c030b20032802002004" - "2001200210150c020b20012002450d011a41bda9c0002d00001a20014109" - "490d002002100b0c010b200210010b210320002002360208200020032001" - "20031b36020420002003453602000b3000200128021c20002d0000410274" - "220041b4a5c0006a280200200041a8a5c0006a280200200128022028020c" - "1103000bfc0402037f017e23004180016b220224000240024020012d0000" - "220441c00171220341c000470440200241186a200141186a290000370300" - "200241106a200141106a290000370300200241086a200141086a29000037" - "030020022001290000220537030020022005a7413f713a0000200241406b" - "2002102e20022d0040450d01200220022d00413a007f41a88ec000411f20" - "0241ff006a41988ec00041c88ec0001013000b02402004413f710d002001" - "2d00010d0020012d00020d0020012d00030d0020012d00040d0020012d00" - "050d0020012d00060d0020012d00070d0020012d00080d0020012d00090d" - "0020012d000a0d0020012d000b0d0020012d000c0d0020012d000d0d0020" - "012d000e0d0020012d000f0d0020012d00100d0020012d00110d0020012d" - "00120d0020012d00130d0020012d00140d0020012d00150d0020012d0016" - "0d0020012d00170d0020012d00180d0020012d00190d0020012d001a0d00" - "20012d001b0d0020012d001c0d0020012d001d0d0020012d001e0d002001" - "2d001f0d00200041c1013a0020200041033a00000c020b20004200370300" - "200041c0003a0020200041186a4200370300200041106a42003703002000" - "41086a42003703000c010b200241386a200241e8006a2903003703002002" - "41306a200241e0006a290300370300200220022903503703202002200241" - "d8006a2903003703282003044020002002290320370300200020033a0020" - "200041086a2002290328370300200041186a200241386a29030037030020" - "0041106a200241306a2903003703000c010b200241003602502002410136" - "0244200241a88cc00036024020024204370248200241406b419c8dc00010" - "1a000b20024180016a24000bf90a02057f097e23004190036b2207240020" - "00290300220c200041086a290300220d8450047e420005200741f0016a20" - "0c2001104d20074190026a200d2001104d200741e0016a200c2002104d20" - "074180026a200d2002104d200741b0016a200c2003104d200741a0016a20" - "0d2003104d200741d0016a200c2004104d200741c0016a200d2004104d20" - "072903f0012112200741c8016a290300200741a8016a290300220d200729" - "03c0017c220c200d54ad7c200c200741d8016a2903007c220d200c54ad7c" - "200d20072903d001220e20072903a0017c220c200e54ad200c2007418802" - "6a29030020074198026a290300220f2007290380027c220e200f54ad7c20" - "0e200741e8016a2903007c220f200e54ad7c200f20072903e00122102007" - "290390027c220e201054ad200e200741f8016a2903007c2213200e54ad7c" - "7c2210200f54ad7c7c2211200c54ad7c2011200741b8016a290300201020" - "072903b0017c220e201054ad7c7c220f201154ad7c7c2210200d54ad7c0b" - "21112000290310220c200041186a290300220d8450047e420005200741f0" - "006a200c2001104d20074190016a200d2001104d200741e0006a200c2002" - "104d20074180016a200d2002104d200741306a200c2003104d200741206a" - "200d2003104d200741d0006a200c2004104d200741406b200d2004104d20" - "0741c8006a290300200741286a290300220320072903407c2204200354ad" - "7c2004200741d8006a2903007c2203200454ad7c20032007290350220220" - "117c2204200254ad200420072903207c2202200454ad7c20022007418801" - "6a29030020074198016a29030022012007290380017c2204200154ad7c20" - "04200741e8006a2903007c2201200454ad7c20012007290360220c200f7c" - "2204200c54ad20042007290390017c220c200454ad7c200c200741f8006a" - "29030020072903702204200e7c220e200454ad7c7c220f200c54ad7c7c22" - "0c200154ad7c7c2204200254ad7c2004200741386a290300200729033022" - "0120107c2202200154ad7c2002200c7c2210200254ad7c7c2211200454ad" - "7c7c2214200354ad7c0b2104200720143703d002200720103703c0022007" - "200e3703b002200720123703a002200720043703d802200720113703c802" - "2007200f3703b802200720133703a80220074188036a4200370300200741" - "80036a4200370300200741f8026a4200370300200742003703f002200741" - "f0026a210a41ff032109420021034200210442002101420021024201210d" - "0340200741106a2009410776410474220b200741a0026a6a220829030020" - "08290308200941ff00712208104e2004423f88210c20044201862003423f" - "888421042007290310420183200342018684210302400240024002400240" - "200c200142018684220c42ddb0858ce8b691a8b87f852002420186200142" - "3f8884220242a9c0c689aece93b230858450044020032005542004200654" - "20042006511b450d0142ddb0858ce8b691a8b87f210142a9c0c689aece93" - "b23021020c020b200c42ddb0858ce8b691a8b87f58200242a9c0c689aece" - "93b23058200242a9c0c689aece93b230511b450d00200c21010c010b2002" - "42a9c0c689aece93b2307d200c42a3cffaf397c9eed7c7007c2202200420" - "0654ad200420067d22042003200554ad220f54ad7c7d220142017c221020" - "0254ad200c42ddb0858ce8b691a8b87f54ad7d2010420052ad7c50ad7d21" - "022004200f7d2104200320057d2103200941016a41810249200d42005271" - "0d014200210d0b2009450d010c020b4201210d20072008104f200a200b6a" - "22082008290300200729030084370300200841086a220820082903002007" - "41086a2903008437030020090d010b200020023703182000200137031020" - "0020043703082000200337030020074190036a24000f0b200941016b2109" - "0c000b000beb0101017f41e0a9c00041e0a9c0002d00002200410120001b" - "3a00000240200004400340024002400240200041016b0e03000501020b03" - "4041e0a9c0002d000022004101460d000b02400240200041016b0e030006" - "01030b000b41a49bc000412641cc9bc0001011000b41a89ac000410d4194" - "9bc0001011000b41e0a9c00041e0a9c0002d00002200410120001b3a0000" - "20000d000b0b41d8a9c00042a9c0c689aece93b23037030041d0a9c00042" - "ddb0858ce8b691a8b87f37030041c8a9c000428d95c7c396d2dac0977f37" - "030041c0a9c00042c7faf3c3ed82a3903c37030041e0a9c00041023a0000" - "0b0b840202047e017f200041086a29030021092000290300210a0240417f" - "2000290310220b200385200041186a290300220c20048584420052200320" - "0b562004200c562004200c511b1b220d417f470440200d41ff01710d0120" - "01200a58200220095820022009511b0d010b20072007200b7c220756ad20" - "07200620097c220b200654ad200b2005200a7c220a200554ad7c2209200b" - "54ad7c7c220b200754ad7c2008200c7c7c210c0b2000200a20017d370300" - "2000200920027d22072001200a56ad22017d37030820002003427f852203" - "200b7c220a2002200956ad2001200756ad7c7d42017c2209370310200020" - "0c20047d2003200a56ad2009200a54ad7c50ad7d3703180bbe3c020e7f04" - "7e23004180016b2203240041bda9c0002d00001a0240412010012202450d" - "00200242a9c0c689aece93b230370018200242ddb0858ce8b691a8b87f37" - "00102002428d95c7c396d2dac0977f370008200242c7faf3c3ed82a3903c" - "3700002003200210262000027f0240024002400240024002400240024002" - "40024002400240024002400240027f024002400240024002400240024002" - "7f02400240027f0240024002400240024002400240024002400240024002" - "400240024002400240024002400240200241046b28020022044178714124" - "4128200441037122051b4f044020054100200441c8004f1b0d0120021004" - "41bda9c0002d00001a412010012202450d30200241186a2204200141186a" - "290000370000200220012900002210370000200241106a2205200141106a" - "290000370000200241086a2208200141086a29000037000020022002411f" - "6a22012d00003a0000200120103c000020022d0001210120022002411e6a" - "22072d00003a0001200720013a00002002411d6a22012d00002107200120" - "022d00023a0000200220073a00022002411c6a22012d0000210720012002" - "2d00033a0000200220073a00032002411b6a22012d00002107200120022d" - "00043a0000200220073a00042002411a6a22012d00002107200120022d00" - "053a0000200220073a0005200241196a22012d00002107200120022d0006" - "3a0000200220073a000620042d00002101200420022d00073a0000200220" - "013a0007200241176a22012d00002104200120082d00003a000020082004" - "3a0000200241166a22012d00002104200120022d00093a0000200220043a" - "0009200241156a22012d00002104200120022d000a3a0000200220043a00" - "0a200241146a22012d00002104200120022d000b3a0000200220043a000b" - "200241136a22012d00002104200120022d000c3a0000200220043a000c20" - "0241126a22012d00002104200120022d000d3a0000200220043a000d2002" - "41116a22012d00002104200120022d000e3a0000200220043a000e20052d" - "00002101200520022d000f3a0000200220013a000f2003410c6a20021026" - "200241046b280200220141787141244128200141037122041b490d022004" - "4100200141c8004f1b0d032002100420032802082202450d120240024002" - "40200241016b220241feffffff0371450440200241ffffffff0371220441" - "016a2205410371210142002110200328020422082102200441034f044020" - "0541fcffffff07712104034020104280017c2110200241106a2102200441" - "046b22040d000b0b2001450d020340200235020020108620117c21112010" - "42207c2110200241046a2102200141016b22010d000b2011428080808010" - "540d010b200341406b200341146a2802003602002003200329020c370338" - "200341d0006a200341086a28020022043602002003200329020037034820" - "04450d0720032802402207450440200341206a418098c000280200220236" - "02002003412c6a2002360200200341f897c0002902002210370318200320" - "10370224200328024822020440200328024c220441046b28020022014178" - "7122052002410274220241044108200141037122011b6a490d0a20014100" - "2005200241276a4b1b0d0b200410040b20032802382202450d2520032802" - "3c220441046b280200220141787122052002410274220241044108200141" - "037122011b6a490d0b200141002005200241276a4b1b0d0c200410040c25" - "0b0240027f02400240024020044101460440200328024c220c2802002202" - "4101470d012003412c6a418098c000280200360200200341206a20034114" - "6a2802003602002003200329020c370318200341f897c000290200370224" - "20032802482202450d2a200c41046b280200220141787122042002410274" - "220241044108200141037122011b6a490d12200141002004200241276a4b" - "1b0d13200c10040c2a0b200328024c210c200328023c210b0240417f2004" - "200747200420074b1b22050d0020074102742102200b41046b2106200441" - "02742101200c41046b2109200420076b21070340200204402001450d0720" - "0220066a2105200120096a2108200241046b2102200141046b2101417f20" - "082802002208200528020022054720052008491b2205450d010c020b0b41" - "7f4100200741ffffffff03711b21050b200541ff01710e020204010b2002" - "450d1220074102742101200328023c2109200241ffff034d044020094104" - "6b2106410021040340200120066a22052005280200220541107622082008" - "20044110747220026e220420026c6b411074200541ffff03717222052002" - "6e22082004411074723602002005200220086c6b2104200141046b22010d" - "000b0c280b2002ad2110200741ffffffff036a220541ffffffff03712202" - "45044042002111200120096a0c270b200241016a41feffffff0771210120" - "0741027420096a41086b2102420021110340200241046a22042004350200" - "201142208684221120108022123e0200200220023502002011201020127e" - "7d42208684221120108022123e02002011201020127e7d2111200241086b" - "2102200141026b22010d000b0c250b2003412c6a200341146a2802003602" - "002003200329020c370224200341186a0c010b2003410036024020032802" - "38047f200b05200341386a418c87c0001023200328023c0b410136020020" - "0341406b4101360200200341206a41013602002003200329033837031820" - "0341246a0b220241086a418098c000280200360200200241f897c0002902" - "0037020020032802482202450d25200c41046b2802002201417871220420" - "02410274220241044108200141037122011b6a490d102001410020042002" - "41276a4b1b0d11200c10040c250b200c20044102746a41046b2202450d20" - "20022802002202672208450440200341f8006a200341146a280200360200" - "2003200329020c370370200341186a200341f0006a200c20041024200328" - "02482202450d25200c41046b280200220141787122042002410274220241" - "044108200141037122011b6a490d12200141002004200241276a4b1b0d13" - "200c10040c250b024002402003280238418080808078470d00200b280208" - "0d002003410036026c20034280808080c0003702640c010b200341e4006a" - "2003410c6a2002452008411f7110250b200341186a200341e4006a027f02" - "402003280248418080808078470d00200c2802080d004100210420034100" - "3602704100210541040c010b200341f0006a20032002452008411f711025" - "200328027021042003280278210520032802740b220120051024200341e0" - "006a200341206a28020036020020032003290218370358200328022c2105" - "200328022821092003280224210c20040440200141046b28020022074178" - "7122062004410274220441044108200741037122071b6a490d1420074100" - "2006200441276a4b1b0d15200110040b02400240200c4180808080784604" - "404100210120092802080d0141042105410021040c220b41002101200545" - "0d20200520024522044d0d20200520046b210b20020d0102400240200b41" - "0274220a20092206200620044102746a22056b4b04402005200a6a210120" - "06200a6a2106200a4110490d0141002006410371220d6b210e0240200641" - "7c71220220064f0d00200d41016b210f0240200d450440200121040c010b" - "200d2107200121040340200641016b2206200441016b22042d00003a0000" - "200741016b22070d000b0b200f4103490d00200441046b21040340200641" - "016b200441036a2d00003a0000200641026b200441026a2d00003a000020" - "0641036b200441016a2d00003a0000200641046b220620042d00003a0000" - "200441046b210420022006490d000b0b2002200a200d6b2204417c71220a" - "6b21064100200a6b210702402001200e6a2201410371450440200220064d" - "0d01200420056a41046b21050340200241046b2202200528020036020020" - "0541046b2105200220064b0d000b0c010b200220064d0d00200141037422" - "0a411871210d2001417c71220f41046b21054100200a6b411871210e200f" - "280200210a0340200241046b2202200a200e742005280200220a200d7672" - "360200200541046b2105200220064b0d000b0b2004410371210a20012007" - "6a21010c010b200a41104f044002402006410020066b41037122076a2204" - "20064d0d00200741016b210d200521022007044020072101034020062002" - "2d00003a0000200241016a2102200641016a2106200141016b22010d000b" - "0b200d4107490d000340200620022d00003a0000200641016a200241016a" - "2d00003a0000200641026a200241026a2d00003a0000200641036a200241" - "036a2d00003a0000200641046a200241046a2d00003a0000200641056a20" - "0241056a2d00003a0000200641066a200241066a2d00003a000020064107" - "6a200241076a2d00003a0000200241086a2102200641086a22062004470d" - "000b0b2004200a20076b2201417c71220d6a21060240200520076a220241" - "0371450440200420064f0d01200221050340200420052802003602002005" - "41046a2105200441046a22042006490d000b0c010b200420064f0d002002" - "410374220a41187121072002417c71220f41046a21054100200a6b411871" - "210e200f280200210a03402004200a2007762005280200220a200e747236" - "0200200541046a2105200441046a22042006490d000b0b2001410371210a" - "2002200d6a21050b20062006200a6a22044f0d01200a41016b2101200a41" - "0771220204400340200620052d00003a0000200541016a2105200641016a" - "2106200241016b22020d000b0b20014107490d010340200620052d00003a" - "0000200641016a200541016a2d00003a0000200641026a200541026a2d00" - "003a0000200641036a200541036a2d00003a0000200641046a200541046a" - "2d00003a0000200641056a200541056a2d00003a0000200641066a200541" - "066a2d00003a0000200641076a200541076a2d00003a0000200541086a21" - "05200641086a22062004470d000b0c010b2006200a6b220220064f0d0020" - "0a41016b2104200a410371220504400340200641016b2206200141016b22" - "012d00003a0000200541016b22050d000b0b20044103490d00200141046b" - "21050340200641016b200541036a2d00003a0000200641026b200541026a" - "2d00003a0000200641036b200541016a2d00003a0000200641046b220620" - "052d00003a0000200541046b210520022006490d000b0b0c010b41042105" - "200941046a28020021072009280208220420024522024d04402004410274" - "21022004044041bda9c0002d00001a200210012205450d360b2005200720" - "02104c1a0c210b41bda9c0002d00001a200420026b220b41027422011001" - "2209450d342009200720024102746a2001104c1a200b210c0b2008411f71" - "2201450d1c200b450440410021010c1e0b41002105410020086b411f7121" - "042009200b4102746a2102200b41016b41ffffffff0371220741016a2206" - "410371210820074103490d1b200641fcffffff077121070340200241046b" - "220620062802002206200176200572360200200241086b22052006200474" - "20052802002205200176723602002002410c6b2206200520047420062802" - "00220620017672360200200241106b220220062004742002280200220520" - "01767236020020052004742105200741046b22070d000b0c1b0b2011500d" - "14200328021421022003280210210502402011428080045a04402002450d" - "0320024102742104200241ffffffff036a220741ffffffff037122020d01" - "42002110200420056a0c180b2002450d022011a721040c180b200241016a" - "41feffffff07712101200420056a41086b21024200211003402002350200" - "200241046a35020020104220868420118242208684201182211020024108" - "6b2102200141026b22010d000b0c150b2003280210210520032802142202" - "0d160b410421074100210241000c170b41f996c000412e41a897c0001011" - "000b41b897c000412e41e897c0001011000b41f996c000412e41a897c000" - "1011000b41b897c000412e41e897c0001011000b20034100360228200341" - "0136021c200341a099c00036021820034204370220200341186a41fc86c0" - "00101a000b41f996c000412e41a897c0001011000b41b897c000412e41e8" - "97c0001011000b41f996c000412e41a897c0001011000b41b897c000412e" - "41e897c0001011000b41f996c000412e41a897c0001011000b41b897c000" - "412e41e897c0001011000b200341003602282003410136021c200341a099" - "c00036021820034204370220200341186a41ec86c000101a000b41f996c0" - "00412e41a897c0001011000b41b897c000412e41e897c0001011000b41f9" - "96c000412e41a897c0001011000b41b897c000412e41e897c0001011000b" - "41f996c000412e41a897c0001011000b41b897c000412e41e897c0001011" - "000b200341003602282003410136021c200341a099c00036021820034204" - "370220200341186a41989ac000101a000b200241086a0b21022007410171" - "047e201005200241046b3502002010422086842011820ba721010c010b20" - "0241027421024100210103402001411074200241046b220220056a280200" - "220141107672200470411074200141ffff037172200470210120020d000b" - "0b41002102200341206a418098c000280200360200200341f897c0002902" - "0037031820014504404104210741000c010b200341186a41f498c0001023" - "200328021c220720013602004101210220032802180b210a024002400240" - "0240200328020022010440200841046b2802002204417871220620014102" - "74220141044108200441037122041b6a490d01200441002006200141276a" - "4b1b0d02200810040b200328020c2201450d0e200541046b280200220441" - "787122082001410274220141044108200441037122041b6a490d02200441" - "002008200141276a4b1b0d03200510040c0e0b41f996c000412e41a897c0" - "001011000b41b897c000412e41e897c0001011000b41f996c000412e41a8" - "97c0001011000b41b897c000412e41e897c0001011000b2008450d002002" - "41046b21020340200220022802002207200176200572360200200241046b" - "210220072004742105200841016b22080d000b0b41002101200b450d0020" - "09200b41027422026a41046b2802000440200b21010c010b200941046b21" - "07200b41ffffffff037121040340200421052002450d01200441016b2104" - "200220076a2108200241046b21022008280200450d000b200b2005200520" - "0b4b1b21010b2001200c4102764f0d00024002402001200c4d0440410021" - "04200c450440200921050c050b200c41027421022001450440200941046b" - "2802002205417871220841044108200541037122051b20026a490d022005" - "41002008200241276a4b1b0d0320091004410421050c050b200121042009" - "200241042001410274101522050d040c180b200341003602282003410136" - "021c200341ec84c00036021820034204370220200341186a41f484c00010" - "1a000b41f996c000412e41a897c0001011000b41b897c000412e41e897c0" - "001011000b200c2104200921050b200341206a200341e0006a2802003602" - "00200320032903583703182003200136022c200320053602282003200436" - "02240c040b419c87c0001020000b200241086a0b21022005410171047e20" - "1105200241046b22022002350200201142208684221120108022123e0200" - "2011201020127e7d0ba721040b2003280238210b02402009200741027422" - "026a41046b2802000d00200941046b210620072101034020012105200245" - "0440410021070c020b200541016b2101200220066a2108200241046b2102" - "2008280200450d000b20072005200520074b1b21070b0240200b41027620" - "074d0440200b21020c010b2007200b4b0d0341002102200b450d00200b41" - "027421012007450440200941046b28020022054178712208410441082005" - "41037122051b20016a490d05200541002008200141276a4b1b0d06200910" - "04410421090c010b2009200141042007220241027410152209450d100b20" - "034100360250200404402003280248047f200c05200341c8006a41dc86c0" - "001023200328024c0b2004360200200341013602500b2003412c6a200341" - "d0006a280200360200200320032903483702242003200936021c20032002" - "3602180b200328022c2102200328022821072003280224210a2003280218" - "2201450d00200328021c220541046b280200220441787122082001410274" - "220141044108200441037122041b6a490d04200441002008200141276a4b" - "1b0d05200510040b200245044041bda9c0002d00001a4101210d41011001" - "2204450d0e200441003a0000410121010c080b4100210102402002ad4205" - "86200720024102746a41046b28020067ad7d221042038820104207834200" - "52ad7c221050044041012104410021050c010b41bda9c0002d00001a2010" - "a7220510012204450d0e0b200341003602202003200436021c2003200536" - "02182007200241016b22054102746a210920050440200241027441046b21" - "06410021020340200220076a280200210120032802182002460440200341" - "186a41ac88c0001018200328021c21040b200220046a20013a0000200320" - "0241016a2205360220200141087621082003280218200546044020034118" - "6a41ac88c0001018200328021c21040b200220046a41016a20083a000020" - "03200541016a220536022020014110762108200328021820054604402003" - "41186a41ac88c0001018200328021c21040b200220046a41026a20083a00" - "002003200541016a22053602202001411876210120032802182005460440" - "200341186a41ac88c0001018200328021c21040b200220046a41036a2001" - "3a00002003200541016a2205360220200241046a21012005210220012006" - "470d000b0b20092802002202450d05034020032802182001460440200341" - "186a419c88c00010180b200328021c220420016a20023a00002003200141" - "016a2201360220200241ff014b21052002410876210220050d000b0c060b" - "200341003602282003410136021c200341ec84c000360218200342043702" - "20200341186a41f484c000101a000b41f996c000412e41a897c000101100" - "0b41b897c000412e41e897c0001011000b41f996c000412e41a897c00010" - "11000b41b897c000412e41e897c0001011000b200328021c21040b200328" - "0218210d200141014b0d010b200341306a4200370300200341286a420037" - "0300200341206a4200370300200342003703180c010b200120046a210c41" - "002102200141017622084101470440200141016b2105200841feffffff07" - "71210b0340200420056a22062d000021092006200220046a22082d00003a" - "0000200820093a0000200c2002417e736a22062d00002109200620084101" - "6a22082d00003a0000200820093a0000200541026b2105200b200241026a" - "2202470d000b0b20014102710440200220046a22052d000021082005200c" - "2002417f736a22022d00003a0000200220083a00000b200341306a420037" - "0300200341286a4200370300200341206a42003703002003420037031820" - "0141204b0d010b200320016b41386a20042001104c1a2003290328221042" - "388620104280fe0383422886842010428080fc0783421886201042808080" - "f80f834208868484201042088842808080f80f832010421888428080fc07" - "838420104228884280fe038320104238888484842112200341306a290300" - "221042388620104280fe0383422886842010428080fc0783421886201042" - "808080f80f834208868484201042088842808080f80f8320104218884280" - "80fc07838420104228884280fe038320104238888484842113417f200329" - "0318221042b0c8b99297bc8cd02985200341206a290300221142b8a195b2" - "9bb0a0acdd008584420052201142388620114280fe038342288684201142" - "8080fc0783421886201142808080f80f8342088684842011420888428080" - "80f80f832011421888428080fc07838420114228884280fe038320114238" - "88848484221142ddb0858ce8b691a8b87f54201042388620104280fe0383" - "422886842010428080fc0783421886201042808080f80f83420886848420" - "1042088842808080f80f832010421888428080fc07838420104228884280" - "fe03832010423888848484221042a9c0c689aece93b23054201042a9c0c6" - "89aece93b230511b1b2202417f47044041022101200241ff01710d022013" - "42c7faf3c3ed82a3903c542012428d95c7c396d2dac0977f542012428d95" - "c7c396d2dac0977f511b450d020b20002011370320200020133703102000" - "20103703282000201237031841000c020b410021010b200020013a000141" - "010b3a00000240024002400240200a0440200741046b2802002202417871" - "2201200a410274220541044108200241037122021b6a490d012002410020" - "01200541276a4b1b0d02200710040b200d0440200441046b280200220241" - "7871220141044108200241037122021b200d6a490d03200241002001200d" - "41276a4b1b0d04200410040b20034180016a24000f0b41f996c000412e41" - "a897c0001011000b41b897c000412e41e897c0001011000b41f996c00041" - "2e41a897c0001011000b41b897c000412e41e897c0001011000b000bc80d" - "02057f167e230041e0006b22032400200341386a2204200141186a290300" - "370300200341306a2205200141106a290300370300200320012903003703" - "202003200141086a29030037032842ddb0858ce8b691a8b87f2112200341" - "206a20022903002219200241086a290300221a2002290310221b20024118" - "6a290300221c42c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b20" - "042903002113200529030021142003290320211520032903282116200341" - "106a2206200141306a290300370300200341186a2207200141386a290300" - "370300200320012903203703002003200141286a29030037030820032002" - "290320220e200241286a290300220c20022903302211200241386a290300" - "221d42c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2004200729" - "030037030020052006290300370300200320032903083703282003200329" - "0300370320200341206a42c6faf3c3ed82a3903c428d95c7c396d2dac097" - "7f42ddb0858ce8b691a8b87f42a9c0c689aece93b23042c7faf3c3ed82a3" - "903c428d95c7c396d2dac0977f102b02400240024020142005290300220b" - "7c220d2016200329032822087c2209200854ad2009201520032903202208" - "7c220a200854ad7c2208200954ad7c7c220942ddb0858ce8b691a8b87f85" - "200b200d56ad2009200d54ad7c201320042903007c7c220d42a9c0c689ae" - "ce93b2308584500440200a42c7faf3c3ed82a3903c542008428d95c7c396" - "d2dac0977f542008428d95c7c396d2dac0977f511b450d0242a9c0c689ae" - "ce93b230210d0c010b200942deb0858ce8b691a8b87f54200d42a9c0c689" - "aece93b23054200d42a9c0c689aece93b230511b450d01200921120b200a" - "2117200821180c010b200d20092008200a42c7faf3c3ed82a3903c7d2217" - "200a5aad220a7d220b42f3eab8bce9ada5bfe8007c2218200b54ad200820" - "0a54ad7d7c2208200954ad200842a2cffaf397c9eed7c7007c2212200854" - "ad7c50ad7d42a9c0c689aece93b2307d210d0b42ddb0858ce8b691a8b87f" - "210f024002402001290330221020012903107c2209200141286a29030022" - "0a200141086a2903007c2208200a54ad20082001290320220a2001290300" - "7c220b200a54ad7c220a200854ad7c7c220842ddb0858ce8b691a8b87f85" - "2009201054ad2008200954ad7c200141386a290300200141186a2903007c" - "7c220942a9c0c689aece93b2308584500440200b42c7faf3c3ed82a3903c" - "54200a428d95c7c396d2dac0977f54200a428d95c7c396d2dac0977f511b" - "450d01200b2110200a210b42a9c0c689aece93b23021090c020b200842de" - "b0858ce8b691a8b87f54200942a9c0c689aece93b23054200942a9c0c689" - "aece93b230511b450d00200b2110200a210b2008210f0c010b2009200820" - "0a200b42c7faf3c3ed82a3903c7d2210200b5aad220f7d220942f3eab8bc" - "e9ada5bfe8007c220b200954ad200a200f54ad7d7c220a200854ad200a42" - "a2cffaf397c9eed7c7007c220f200a54ad7c50ad7d42a9c0c689aece93b2" - "307d21090b2003200f37035020032010370340200320093703582003200b" - "37034842ddb0858ce8b691a8b87f210b024002402011201b7c2209200c20" - "1a7c2208200c54ad2008200e20197c220c200e54ad7c220a200854ad7c7c" - "220842ddb0858ce8b691a8b87f852009201154ad2008200954ad7c201c20" - "1d7c7c220942a9c0c689aece93b2308584500440200c42c7faf3c3ed82a3" - "903c54200a428d95c7c396d2dac0977f54200a428d95c7c396d2dac0977f" - "511b450d01200c210e200a210c42a9c0c689aece93b23021090c020b2008" - "42deb0858ce8b691a8b87f54200942a9c0c689aece93b23054200942a9c0" - "c689aece93b230511b450d00200c210e200a210c2008210b0c010b200920" - "08200a200c42c7faf3c3ed82a3903c7d220e200c5aad22117d220b42f3ea" - "b8bce9ada5bfe8007c220c200b54ad200a201154ad7d7c220a200854ad20" - "0a42a2cffaf397c9eed7c7007c220b200a54ad7c50ad7d42a9c0c689aece" - "93b2307d21090b200341406b200e200c200b200942c7faf3c3ed82a3903c" - "428d95c7c396d2dac0977f102b200341406b201520162014201342c7faf3" - "c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9" - "c0c689aece93b230102d200341406b200329030020032903082003290310" - "200341186a29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42" - "ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2000200d37031820" - "002012370310200020183703082000201737030020002003290340370320" - "200041286a2003290348370300200041306a200341d0006a290300370300" - "200041386a200341d8006a290300370300200341e0006a24000ba706010a" - "7e42ddb0858ce8b691a8b87f210a02400240024020022903102206200129" - "03107c2207200241086a2903002203200141086a2903007c2204200354ad" - "20042002290300220320012903007c2205200354ad7c2203200454ad7c7c" - "220442ddb0858ce8b691a8b87f852006200756ad2004200754ad7c200241" - "186a290300200141186a2903007c7c220742a9c0c689aece93b230858450" - "0440200542c7faf3c3ed82a3903c542003428d95c7c396d2dac0977f5420" - "03428d95c7c396d2dac0977f511b450d0242a9c0c689aece93b23021070c" - "010b200442deb0858ce8b691a8b87f54200742a9c0c689aece93b2305420" - "0742a9c0c689aece93b230511b450d012004210a0b2005210b2003210c0c" - "010b200720042003200542c7faf3c3ed82a3903c7d220b20055aad22057d" - "220642f3eab8bce9ada5bfe8007c220c200654ad2003200554ad7d7c2203" - "200454ad200342a2cffaf397c9eed7c7007c220a200354ad7c50ad7d42a9" - "c0c689aece93b2307d21070b42ddb0858ce8b691a8b87f21080240024020" - "02290330220920012903307c2204200241286a2903002205200141286a29" - "03007c2203200554ad20032002290320220520012903207c2206200554ad" - "7c2205200354ad7c7c220342ddb0858ce8b691a8b87f852004200954ad20" - "03200454ad7c200241386a290300200141386a2903007c7c220442a9c0c6" - "89aece93b2308584500440200642c7faf3c3ed82a3903c542005428d95c7" - "c396d2dac0977f542005428d95c7c396d2dac0977f511b450d0120062109" - "2005210642a9c0c689aece93b23021040c020b200342deb0858ce8b691a8" - "b87f54200442a9c0c689aece93b23054200442a9c0c689aece93b230511b" - "450d002006210920052106200321080c010b200420032005200642c7faf3" - "c3ed82a3903c7d220920065aad22087d220442f3eab8bce9ada5bfe8007c" - "2206200454ad2005200854ad7d7c2205200354ad200542a2cffaf397c9ee" - "d7c7007c2208200554ad7c50ad7d42a9c0c689aece93b2307d21040b2000" - "2008370330200020093703202000200a3703102000200b37030020002004" - "37033820002006370328200020073703182000200c3703080bf10802087f" - "087e23004180016b22022400200141386a290300210e200141286a290300" - "210b200141186a2203290300210d2001290330210f2001290320210a2001" - "290310210c02400240024020012903002210200141086a22042903002211" - "844200520d00200c200d844200520d00200a200b844200520d00200e200f" - "84500d010b200241186a22052003290300370300200241106a2206200141" - "106a22072903003703002002200429030037030820022001290300370300" - "200220102011200c200d42c7faf3c3ed82a3903c428d95c7c396d2dac097" - "7f102b200241386a2204200141206a220341186a29030037030020024130" - "6a2208200341106a22092903003703002002200341086a29030037032820" - "022003290300370320200241206a200a200b200f200e42c7faf3c3ed82a3" - "903c428d95c7c396d2dac0977f102b200241206a42c6faf3c3ed82a3903c" - "428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93" - "b23042c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2002200229" - "032020022903282008290300200429030042c7faf3c3ed82a3903c428d95" - "c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b23010" - "2d2000027e2002290300220d2006290300220c842002290308220b200529" - "0300220a84845004404200210f42000c010b200241d8006a2204200a3703" - "002002200c3703502002200d3703402002200b370348200242a9c0c689ae" - "ce93b230370378200242ddb0858ce8b691a8b87f3703702002428d95c7c3" - "96d2dac0977f370368200242c7faf3c3ed82a3903c370360200241406b20" - "0241e0006a103a2004290300210d2002290348210c2002290340210b2002" - "290350210a200241d0006a20072903003703002004200141186a29030037" - "0300200220012903003703402002200141086a290300370348200241406b" - "200b200c200a200d42c7faf3c3ed82a3903c428d95c7c396d2dac0977f10" - "2b200241f8006a2201200341186a290300370300200241f0006a22042009" - "2903003703002002200341086a2903003703682002200329030037036020" - "0241e0006a200b200c200a200d42c7faf3c3ed82a3903c428d95c7c396d2" - "dac0977f102b2004290300220c20022903602210842001290300220e2002" - "290368220b84845004404200210c4200210b4200210a4200210e4200210f" - "42010c010b4200210f427f4200427f4200201042788342c7faf3c3ed82a3" - "903c561b220a200a200b54ad7d200a200b7d220a42f3eab8bce9ada5bfe8" - "007d220b200a54ad7c42017c2211200c7d220d42a4cffaf397c9eed7c700" - "7d220a200d54ad200c201156ad7d427f511b200e7d42a9c0c689aece93b2" - "307c210e42c7faf3c3ed82a3903c20107d210c42010b3703002000200a37" - "03402000200c370330200020022903403703102000200f3703082000200e" - "3703482000200b370338200041186a2002290348370300200041206a2002" - "41d0006a290300370300200041286a200241d8006a2903003703000c010b" - "20004200370308200042003703000b20024180016a24000b090020004100" - "3602000b7b01027f230041106b2203240041f0a5c00041f0a5c000280200" - "220441016a360200024020044100480d00024041bca9c0002d0000450440" - "41b8a9c00041b8a9c00028020041016a36020041eca5c00028020041004e" - "0d010c020b200341086a20002001110000000b41bca9c00041003a000020" - "02450d00000b000b0c00200020012902003703000bba0201047f411f2102" - "20004200370210200141ffffff074d04402001410620014108766722026b" - "7641017120024101746b413e6a21020b2000200236021c200241027441f4" - "a5c0006a2103410120027422044190a9c000280200714504402003200036" - "0200200020033602182000200036020c200020003602084190a9c0004190" - "a9c0002802002004723602000f0b02400240200120032802002204280204" - "417871460440200421020c010b2001411920024101766b41002002411f47" - "1b742103034020042003411d764104716a41106a22052802002202450d02" - "200341017421032002210420022802044178712001470d000b0b20022802" - "082203200036020c20022000360208200041003602182000200236020c20" - "0020033602080f0b20052000360200200020043602182000200036020c20" - "0020003602080bd20102067f017e230041206b2201240002400240200028" - "02002203417f460d00410420034101742202200341016a2204200220044b" - "1b2202200241044d1b2204ad42e0007e22074220884200520d002007a722" - "0641f0ffffff074b0d004100210220012003047f2001200341e0006c3602" - "1c2001200028020436021441100520020b360218200141086a2006200141" - "146a103720012802084101470d0120012802102102200128020c21050b20" - "0541dca4c0001019000b200128020c210320002004360200200020033602" - "04200141206a24000b7f01017f027f0240027f0240200228020404402002" - "28020822034504402001450d0441bda9c0002d00001a0c020b2002280200" - "20034110200110150c020b2001450d0241bda9c0002d00001a0b2001100b" - "0b2202411020021b21032002450c010b4110210341000b21022000200136" - "020820002003360204200020023602000bd20102067f017e230041206b22" - "0124000240024020002802002203417f460d004104200341017422022003" - "41016a2204200220044b1b2202200241044d1b2204ad42c0017e22074220" - "884200520d002007a7220641f0ffffff074b0d004100210220012003047f" - "2001200341c0016c36021c2001200028020436021441100520020b360218" - "200141086a2006200141146a103720012802084101470d01200128021021" - "02200128020c21050b200541eca4c0001019000b200128020c2103200020" - "0436020020002003360204200141206a24000bdd0102067f017e23004120" - "6b2202240020002802002204417f460440410020011019000b4104200441" - "01742203200441016a2205200320054b1b2203200341044d1b2205ad42c0" - "017e22084220884200520440410020011019000b02402008a7220741f0ff" - "ffff074d04404100210320022004047f2002200441c0016c36021c200220" - "0028020436021441100520030b360218200241086a2007200241146a1037" - "20022802084101470d01200228020c2106200228021021030b2006200110" - "19000b200228020c21042000200536020020002004360204200241206a24" - "000b830b02037f167e230041c0016b22022400200241186a220320004118" - "6a290300370300200241106a2204200041106a2903003703002002200029" - "03003703002002200041086a290300370308200241386a200141186a2903" - "002218370300200241306a200141106a2903002213370300200220014108" - "6a2903002214370328200220012903002215370320200242003703582002" - "42003703502002420037034820024201370340200241f8006a2201420037" - "0300200241f0006a42003703002002420037036820024200370360200329" - "0300210e2004290300210f2002290308210a200229030021072013211020" - "182111201521082014210b03400240200242003703980120024200370390" - "0120024200370388012002420137038001200220024180016a104a450440" - "200241406b21010c010b200241b8016a20024198016a2903003703002002" - "41b0016a20024190016a29030037030020022002290388013703a8012002" - "2002290380013703a001200241206a200241a0016a104a450440200241e0" - "006a21010c010b200241d8006a2903002112200229035021052002290348" - "21162002290340210d2007a74101714504400340200a423f862007420188" - "8421070240200da74101714504402016423f86200d42018884210d200542" - "3f8620164201888421160c010b200520137c2209201420167c2205201454" - "ad2005200d20157c220d201554ad7c2206200554ad7c7c2205423f862006" - "4201888421162006423f86200d42018884210d2009201354ad2005200954" - "ad7c201220187c7c21120b200f423f86200a42018884210a200e423f8620" - "0f42018884210f200e420188210e2012423f862005420188842105201242" - "018821122007420183500d000b2002200f3703102002200e3703180b2002" - "20053703502002200d370340200220073703002002201237035820022016" - "3703482002200a3703082001290300210920022903702106200229036821" - "172002290360210c2008a74101714504400340200b423f86200842018884" - "21080240200c420183a70440200620137c2219201420177c2206201454ad" - "2006200c20157c221a201554ad7c220c200654ad7c7c2206423f86200c42" - "0188842117200c423f86201a42018884210c2013201956ad2006201954ad" - "7c200920187c7c21090c010b2017423f86200c42018884210c2006423f86" - "20174201888421170b2010423f86200b42018884210b2011423f86201042" - "0188842110201142018821112009423f8620064201888421062009420188" - "21092008420183500d000b20022010370330200220113703380b20022006" - "3703702002200c3703602002200837032020022009370378200220173703" - "682002200b37032802400240200f201085200e2011858450044020072008" - "54200a200b54200a200b511b0d010c020b200f201056200e201156200e20" - "11511b0d010b2002200820077d427e8322063703202002200b200a7d2209" - "2007200856ad22087d220c37032820024201200a200b56ad2008200956ad" - "7c7d2208200f7d220b20107c220942017d221037033020022011200e7d20" - "09420052ad2009200b54ad2008200f54ad7d7c50ad7d2211370338200241" - "e0006a200d2016200520122015201420132018102d20062108200c210b0c" - "020b2002200720087d427e8322123703002002200a200b7d220520072008" - "54ad22077d220d37030820024201200a200b54ad2005200754ad7c7d2207" - "200f7c220520107d220a42017d220f3703102002200e20117d200a420052" - "ad2005200754ad2005201054ad7d7c50ad7d220e370318200241406b200c" - "2017200620092015201420132018102d20122107200d210a0c010b0b2000" - "2001290300370300200041186a200141186a290300370300200041106a20" - "0141106a290300370300200041086a200141086a290300370300200241c0" - "016a24000bc92602357f187e230041c0066b22032400200341386a222b20" - "0141386a2226290300370300200341306a222c200141306a220e29030037" - "0300200341286a222d200141286a220f290300370300200341206a222e20" - "0141206a2210290300370300200341186a222f200141186a221129030037" - "0300200341106a2230200141106a22122903003703002003200129030037" - "03002003200141086a2227290300370308200320012002102f200341f800" - "6a2214200141f8006a2204290300370300200341f0006a2215200141f000" - "6a2205290300370300200341e8006a2216200141e8006a22062903003703" - "00200341e0006a2217200141e0006a2207290300370300200341d8006a22" - "0a200141d8006a2208290300370300200341d0006a220b200141d0006a22" - "092903003703002003200141c8006a220c29030037034820032001290340" - "370340200341406b200141406b2213200241406b2228102f200341b8016a" - "2220200141b8016a290300370300200341b0016a2221200141b0016a2903" - "00370300200341a8016a2222200141a8016a290300370300200341a0016a" - "2223200141a0016a29030037030020034198016a222420014198016a2903" - "0037030020034190016a222520014190016a290300370300200320014188" - "016a2903003703880120032001290380013703800120034180016a200141" - "80016a222920024180016a222a102f200341f8016a221820042903003703" - "00200341f0016a22192005290300370300200341e8016a221a2006290300" - "370300200341e0016a221b2007290300370300200341d8016a221c200829" - "0300370300200341d0016a221d20092903003703002003200c2903003703" - "c801200320012903403703c001200341c0016a201320291030200341b802" - "6a200241f8006a290300370300200341b0026a200241f0006a2903003703" - "00200341a8026a200241e8006a290300370300200341a0026a200241e000" - "6a29030037030020034198026a200241d8006a2903003703002003419002" - "6a200241d0006a2903003703002003200241c8006a290300370388022003" - "20022903403703800220034180026a2028202a1030200341c0056a200341" - "c0016a20034180026a102f2018200341f8056a2204290300370300201920" - "0341f0056a2205290300370300201a200341e8056a220629030037030020" - "1b200341e0056a2207290300370300201c200341d8056a22082903003703" - "00201d200341d0056a2209290300370300200320032903c8053703c80120" - "0320032903c0053703c00120034198066a220c201c290300370300200341" - "90066a220d201d290300370300200320032903c801370388062003200329" - "03c0013703800620034180066a2003290340223820032903482239200b29" - "0300223a200a290300223b42c7faf3c3ed82a3903c428d95c7c396d2dac0" - "977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200341b806" - "6a220a2018290300370300200341b0066a220b2019290300370300200320" - "1a2903003703a8062003201b2903003703a006200341a0066a2017290300" - "223c2016290300223d2015290300223e2014290300223f42c7faf3c3ed82" - "a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689" - "aece93b230102d2008200c29030022403703002009200d29030022413703" - "00200720032903a00622423703002005200b290300224337030020062003" - "2903a80622443703002004200a2903002245370300200320032903880622" - "463703c805200320032903800622473703c0052018204537030020192043" - "370300201a2044370300201b2042370300201c2040370300201d20413703" - "00200320463703c801200320473703c001200c201c290300370300200d20" - "1d290300370300200320032903c80137038806200320032903c001370380" - "0620034180066a2003290380012003290388012025290300202429030042" - "c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b8" - "7f42a9c0c689aece93b230102d200a2018290300370300200b2019290300" - "3703002003201a2903003703a8062003201b2903003703a006200341a006" - "6a202329030020222903002021290300202029030042c7faf3c3ed82a390" - "3c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece" - "93b230102d2008200c29030022403703002009200d290300224137030020" - "0720032903a00622423703002005200b2903002243370300200620032903" - "a80622443703002004200a29030022453703002003200329038806224637" - "03c805200320032903800622473703c00520182045370300201920433703" - "00201a2044370300201b2042370300201c2040370300201d204137030020" - "0320463703c801200320473703c001200342003703b805200342003703b0" - "05200342003703a805200342013703a00520034200370398052003420037" - "03900520034200370388052003420937038005200341c0056a200341c001" - "6a20034180056a102f201820042903003703002019200529030037030020" - "1a2006290300370300201b2007290300370300201c200829030037030020" - "1d2009290300370300200320032903c8053703c801200320032903c00537" - "03c001200341c0056a200341c0016a200310302018200429030037030020" - "192005290300370300201a2006290300370300201b200729030037030020" - "1c2008290300370300201d2009290300370300200320032903c8053703c8" - "01200320032903c0053703c001200341d0026a2214201229030037030020" - "0341d8026a22152011290300370300200341e0026a221620102903003703" - "00200341e8026a2217200f290300370300200341f0026a221e200e290300" - "370300200341f8026a221f2026290300370300200320012903003703c002" - "200320272903003703c802200341c0026a200120131030200341b8036a20" - "0241386a2231290300370300200341b0036a200241306a22322903003703" - "00200341a8036a200241286a2233290300370300200341a0036a20024120" - "6a223429030037030020034198036a200241186a22352903003703002003" - "4190036a200241106a22362903003703002003200241086a223729030037" - "038803200320022903003703800320034180036a200220281030200341c0" - "056a200341c0026a20034180036a102f201f2004290300370300201e2005" - "290300370300201720062903003703002016200729030037030020152008" - "29030037030020142009290300370300200320032903c8053703c8022003" - "20032903c0053703c002200c2015290300370300200d2014290300370300" - "200320032903c80237038806200320032903c0023703800620034180066a" - "200329030022402003290308224120302903002242202f290300224342c7" - "faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f" - "42a9c0c689aece93b230102d200a201f290300370300200b201e29030037" - "0300200320172903003703a806200320162903003703a006200341a0066a" - "202e2903002244202d2903002245202c2903002246202b290300224742c7" - "faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f" - "42a9c0c689aece93b230102d2008200c29030022483703002009200d2903" - "002249370300200720032903a006224a3703002005200b290300224b3703" - "00200620032903a806224c3703002004200a290300224d37030020032003" - "29038806224e3703c8052003200329038006224f3703c005201f204d3703" - "00201e204b3703002017204c3703002016204a3703002015204837030020" - "1420493703002003204e3703c8022003204f3703c002200c201529030037" - "0300200d2014290300370300200320032903c80237038806200320032903" - "c0023703800620034180066a20382039203a203b42c7faf3c3ed82a3903c" - "428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93" - "b230102d200a201f290300370300200b201e290300370300200320172903" - "003703a806200320162903003703a006200341a0066a203c203d203e203f" - "42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8" - "b87f42a9c0c689aece93b230102d2008200c29030022383703002009200d" - "2903002239370300200720032903a006223a3703002005200b290300223b" - "370300200620032903a806223c3703002004200a290300223d3703002003" - "200329038806223e3703c8052003200329038006223f3703c005201f203d" - "370300201e203b3703002017203c3703002016203a370300201520383703" - "00201420393703002003203e3703c8022003203f3703c002200341f8036a" - "2020290300370300200341f0036a2021290300370300200341e8036a2022" - "290300370300200341e0036a2023290300370300200341d8036a20242903" - "00370300200341d0036a202529030037030020032003290388013703c803" - "20032003290380013703c003200341c0036a20034180016a20034180056a" - "102f200341c0056a200341c0026a200341c0036a1030201f200429030037" - "0300201e2005290300370300201720062903003703002016200729030037" - "03002015200829030037030020142009290300370300200320032903c805" - "3703c802200320032903c0053703c00220034190046a2213201229030037" - "030020034198046a22122011290300370300200341a0046a221120102903" - "00370300200341a8046a2210200f290300370300200341b0046a220f200e" - "290300370300200341b8046a220e20262903003703002003200129030037" - "038004200320272903003703880420034180046a200120291030200341f8" - "046a2031290300370300200341f0046a2032290300370300200341e8046a" - "2033290300370300200341e0046a2034290300370300200341d8046a2035" - "290300370300200341d0046a2036290300370300200320372903003703c8" - "04200320022903003703c004200341c0046a2002202a1030200341c0056a" - "20034180046a200341c0046a102f200e2004290300370300200f20052903" - "003703002010200629030037030020112007290300370300201220082903" - "0037030020132009290300370300200320032903c8053703880420032003" - "2903c00537038004200c2012290300370300200d20132903003703002003" - "2003290388043703880620032003290380043703800620034180066a2040" - "20412042204342c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0" - "858ce8b691a8b87f42a9c0c689aece93b230102d200a200e290300370300" - "200b200f290300370300200320102903003703a806200320112903003703" - "a006200341a0066a204420452046204742c7faf3c3ed82a3903c428d95c7" - "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d" - "2008200c29030022383703002009200d2903002239370300200720032903" - "a006223a3703002005200b290300223b370300200620032903a806223c37" - "03002004200a290300223d3703002003200329038806223e3703c8052003" - "200329038006223f3703c005200e203d370300200f203b3703002010203c" - "3703002011203a37030020122038370300201320393703002003203e3703" - "88042003203f37038004200341c0056a20034180046a200341406b103020" - "0e2004290300370300200f20052903003703002010200629030037030020" - "112007290300370300201220082903003703002013200929030037030020" - "0320032903c80537038804200320032903c00537038004200c2012290300" - "370300200d20132903003703002003200329038804370388062003200329" - "0380043703800620034180066a2003290380012003290388012025290300" - "202429030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb085" - "8ce8b691a8b87f42a9c0c689aece93b230102d200a200e29030037030020" - "0b200f290300370300200320102903003703a806200320112903003703a0" - "06200341a0066a202329030020222903002021290300202029030042c7fa" - "f3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42" - "a9c0c689aece93b230102d2008200c29030022383703002009200d290300" - "2239370300200720032903a006223a3703002005200b290300223b370300" - "200620032903a806223c3703002004200a290300223d3703002003200329" - "038806223e3703c8052003200329038006223f3703c005200e203d370300" - "200f203b3703002010203c3703002011203a370300201220383703002013" - "20393703002003203e370388042003203f37038004200041386a20182903" - "00370300200041306a2019290300370300200041286a201a290300370300" - "200041206a201b290300370300200041186a201c29030037030020004110" - "6a201d290300370300200041086a20032903c801370300200020032903c0" - "01370300200020032903c002370340200041c8006a20032903c802370300" - "200041d0006a2014290300370300200041d8006a20152903003703002000" - "41e0006a2016290300370300200041e8006a2017290300370300200041f0" - "006a201e290300370300200041f8006a201f290300370300200041b8016a" - "200e290300370300200041b0016a200f290300370300200041a8016a2010" - "290300370300200041a0016a201129030037030020004198016a20122903" - "0037030020004190016a201329030037030020004188016a200329038804" - "370300200020032903800437038001200341c0066a24000b830c02137f04" - "7e23004180026b22032400200341d8006a2207200141186a290300370300" - "200341d0006a2208200141106a2903003703002003200141086a29030037" - "034820032001290300370340200341406b2002290300200241086a290300" - "2002290310200241186a29030042c7faf3c3ed82a3903c428d95c7c396d2" - "dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200341" - "98016a2204200141386a29030037030020034190016a2205200141306a29" - "03003703002003200141286a290300370388012003200129032037038001" - "20034180016a2002290320200241286a2903002002290330200241386a29" - "030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b6" - "91a8b87f42a9c0c689aece93b230102d200341186a220b20072903003703" - "00200341106a220c2008290300370300200341206a220d20032903800137" - "0300200341286a220e200329038801370300200341306a220f2005290300" - "370300200341386a22102004290300370300200320032903483703082003" - "2003290340370300200241f8006a2903002116200241e8006a2903002117" - "2002290370211820022903602119200341f8016a2209200141d8006a2903" - "00370300200341f0016a2206200141d0006a2903003703002003200141c8" - "006a2903003703e801200320012903403703e001200341e0016a20022903" - "40200241c8006a2903002002290350200241d8006a29030042c7faf3c3ed" - "82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c6" - "89aece93b230102d2004200141f8006a2903003703002005200141f0006a" - "2903003703002003200141e8006a29030037038801200320012903603703" - "800120034180016a201920172018201642c7faf3c3ed82a3903c428d95c7" - "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d" - "2007200929030037030020082006290300370300200341e0006a22112003" - "29038001370300200341e8006a2212200329038801370300200341f0006a" - "22132005290300370300200341f8006a2214200429030037030020032003" - "2903e801370348200320032903e001370340200241b8016a290300211620" - "0241a8016a290300211720022903b001211820022903a0012119200341d8" - "016a220a20014198016a290300370300200341d0016a221520014190016a" - "290300370300200320014188016a2903003703c801200320012903800137" - "03c001200341c0016a20022903800120024188016a290300200229039001" - "20024198016a29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f" - "42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2009200141b801" - "6a2903003703002006200141b0016a2903003703002003200141a8016a29" - "03003703e801200320012903a0013703e001200341e0016a201920172018" - "201642c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b6" - "91a8b87f42a9c0c689aece93b230102d2004200a29030037030020052015" - "290300370300200341a0016a220120032903e001370300200341a8016a22" - "0220032903e801370300200341b0016a220a2006290300370300200341b8" - "016a22062009290300370300200320032903c80137038801200320032903" - "c00137038001200041386a2010290300370300200041306a200f29030037" - "0300200041286a200e290300370300200041206a200d2903003703002000" - "41186a200b290300370300200041106a200c290300370300200041086a20" - "032903083703002000200329030037030020002003290340370340200041" - "c8006a2003290348370300200041d0006a2008290300370300200041d800" - "6a2007290300370300200041e0006a2011290300370300200041e8006a20" - "12290300370300200041f0006a2013290300370300200041f8006a201429" - "0300370300200041b8016a2006290300370300200041b0016a200a290300" - "370300200041a8016a2002290300370300200041a0016a20012903003703" - "0020004198016a200429030037030020004190016a200529030037030020" - "004188016a20032903880137030020002003290380013703800120034180" - "026a24000bf11902287f087e23004180056b22022400200241386a222420" - "0141386a220a290300370300200241306a2225200141306a220329030037" - "0300200241286a2226200141286a2204290300370300200241206a222720" - "0141206a2205290300370300200241186a2228200141186a220f29030037" - "0300200241106a2229200141106a22062903003703002002200129030037" - "03002002200141086a2207290300370308200220012001102f200241f800" - "6a2210200a290300370300200241f0006a22112003290300370300200241" - "e8006a22122004290300370300200241e0006a2213200529030037030020" - "0241d8006a2214200f290300370300200241d0006a221520062903003703" - "002002200729030037034820022001290300370340200241406b20012001" - "41406b2218102f20024180046a200241406b200241406b10302010200241" - "b8046a220b2903003703002011200241b0046a220c290300370300201220" - "0241a8046a220d2903003703002013200241a0046a220e29030037030020" - "1420024198046a2208290300370300201520024190046a22092903003703" - "0020022002290388043703482002200229038004370340200141f8006a22" - "19290300212a200141f0006a221a290300212b200141e8006a221b290300" - "212c200141e0006a221c290300212d200241f8046a2217200f2903003703" - "00200241f0046a220f2006290300370300200220072903003703e8042002" - "20012903003703e004200241e0046a2001290340200141c8006a221d2903" - "00200141d0006a221e290300200141d8006a221f29030042c7faf3c3ed82" - "a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689" - "aece93b230102d2008200a29030037030020092003290300370300200220" - "0429030037038804200220052903003703800420024180046a202d202c20" - "2b202a42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8" - "b691a8b87f42a9c0c689aece93b230102d20024198036a22032017290300" - "37030020024190036a2204200f290300370300200241a0036a2205200229" - "038004370300200241a8036a2206200229038804370300200241b0036a22" - "072009290300370300200241b8036a221620082903003703002002200229" - "03e80437038803200220022903e0043703800320024180046a2002418003" - "6a20014180016a220a10302016200b2903003703002007200c2903003703" - "002006200d2903003703002005200e290300370300200320082903003703" - "002004200929030037030020022002290388043703880320022002290380" - "043703800320024180046a20024180036a20024180036a102f2016200b29" - "03003703002007200c2903003703002006200d2903003703002005200e29" - "030037030020032008290300370300200420092903003703002002200229" - "0388043703880320022002290380043703800320024190016a2203201e29" - "030037030020024198016a2204201f290300370300200241a0016a220520" - "1c290300370300200241a8016a2206201b290300370300200241b0016a22" - "07201a290300370300200241b8016a221620192903003703002002200129" - "0340370380012002201d2903003703880120024180016a2018200a102f20" - "024180046a20024180016a20024180016a10302016200b29030037030020" - "07200c2903003703002006200d2903003703002005200e29030037030020" - "042008290300370300200320092903003703002002200229038804370388" - "01200220022903800437038001200241d0016a221820014190016a290300" - "370300200241d8016a221920014198016a290300370300200241e0016a22" - "1a200141a0016a290300370300200241e8016a221b200141a8016a290300" - "370300200241f0016a221c200141b0016a290300370300200241f8016a22" - "1d200141b8016a29030037030020022001290380013703c0012002200141" - "88016a2903003703c801200241c0016a200a200a102f200241b8026a221e" - "2016290300370300200241b0026a22162007290300370300200241a8026a" - "22072006290300370300200241a0026a2206200529030037030020024198" - "026a2205200429030037030020024190026a220420032903003703002002" - "42003703f803200242003703f003200242003703e803200242013703e003" - "200242003703d803200242003703d003200242003703c803200242093703" - "c00320022002290388013703880220022002290380013703800220024180" - "026a20024180016a200241c0036a102f20024180046a20024180026a2002" - "1030201e200b2903003703002016200c2903003703002007200d29030037" - "03002006200e290300370300200520082903003703002004200929030037" - "0300200241d0026a22032018290300370300200241d8026a221f20192903" - "00370300200241e0026a2220201a290300370300200241e8026a2221201b" - "290300370300200241f0026a2222201c290300370300200241f8026a2223" - "201d29030037030020022002290388043703880220022002290380043703" - "8002200220022903c0013703c002200220022903c8013703c802200241c0" - "026a200241c0016a200241c0036a102f20024180046a200241c0026a2002" - "41406b10302023200b2903003703002022200c2903003703002021200d29" - "03003703002020200e290300370300201f20082903003703002003200929" - "030037030020022002290388043703c80220022002290380043703c00220" - "024180046a200241406b20024180036a10302010200b2903003703002011" - "200c2903003703002012200d2903003703002013200e2903003703002014" - "200829030037030020152009290300370300200220022903880437034820" - "0220022903800437034020024180046a200241406b20024180016a103020" - "10200b2903003703002011200c2903003703002012200d29030037030020" - "13200e290300370300201420082903003703002015200929030037030020" - "022002290388043703482002200229038004370340200241d8046a220120" - "14290300370300200241d0046a220a201529030037030020022002290348" - "3703c804200220022903403703c004200241c0046a200229030020022903" - "082029290300202829030042c7faf3c3ed82a3903c428d95c7c396d2dac0" - "977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2017201029" - "0300370300200f2011290300370300200220122903003703e80420022013" - "2903003703e004200241e0046a2027290300202629030020252903002024" - "29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8" - "b691a8b87f42a9c0c689aece93b230102d20082001290300222a37030020" - "09200a290300222b370300200e20022903e004222c370300200c200f2903" - "00222d370300200d20022903e804222e370300200b2017290300222f3703" - "00200220022903c804223037038804200220022903c00422313703800420" - "10202f3703002011202d3703002012202e3703002013202c370300201420" - "2a3703002015202b37030020022030370348200220313703402001201429" - "0300370300200a2015290300370300200220022903483703c80420022002" - "2903403703c004200241c0046a20022903c00120022903c8012018290300" - "201929030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb085" - "8ce8b691a8b87f42a9c0c689aece93b230102d2017201029030037030020" - "0f2011290300370300200220122903003703e804200220132903003703e0" - "04200241e0046a201a290300201b290300201c290300201d29030042c7fa" - "f3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42" - "a9c0c689aece93b230102d20082001290300222a3703002009200a290300" - "222b370300200e20022903e004222c370300200c200f290300222d370300" - "200d20022903e804222e370300200b2017290300222f3703002002200229" - "03c804223037038804200220022903c0042231370380042010202f370300" - "2011202d3703002012202e3703002013202c3703002014202a3703002015" - "202b3703002002203037034820022031370340200041386a201e29030037" - "0300200041306a2016290300370300200041286a20072903003703002000" - "41206a2006290300370300200041186a2005290300370300200041106a20" - "04290300370300200041086a200229038802370300200020022903800237" - "0300200020022903c002370340200041c8006a20022903c8023703002000" - "41d0006a2003290300370300200041d8006a201f290300370300200041e0" - "006a2020290300370300200041e8006a2021290300370300200041f0006a" - "2022290300370300200041f8006a2023290300370300200041b8016a2010" - "290300370300200041b0016a2011290300370300200041a8016a20122903" - "00370300200041a0016a201329030037030020004198016a201429030037" - "030020004190016a201529030037030020004188016a2002290348370300" - "200020022903403703800120024180056a24000bfe09011d7e2001290310" - "22022001290300220484200141186a2903002215200141086a2903002203" - "8484420052044042c7faf3c3ed82a3903c20047d2118427f4200427f4200" - "200442788342c7faf3c3ed82a3903c561b220b2003200b56ad7d200b2003" - "7d220342f3eab8bce9ada5bfe8007d2219200354ad7c42017c220320027d" - "220c42a4cffaf397c9eed7c7007d220b200c54ad2002200356ad7d427f51" - "1b20157d42a9c0c689aece93b2307c210c0b420021152001290330220220" - "01290320220484200141386a2903002208200141286a2903002203848442" - "00520440427f4200427f4200200442788342c7faf3c3ed82a3903c561b22" - "062003200656ad7d200620037d220342f3eab8bce9ada5bfe8007d221520" - "0354ad7c42017c220320027d220642a4cffaf397c9eed7c7007d221a2006" - "54ad2002200356ad7d427f511b20087d42a9c0c689aece93b2307c211b42" - "c7faf3c3ed82a3903c20047d21060b200141f8006a2903002108200141e8" - "006a290300210220012903702104200129036021032001290350220e2001" - "290340220f84200141d8006a2903002205200141c8006a29030022108484" - "4200520440427f4200427f4200200f42788342c7faf3c3ed82a3903c561b" - "22092009201054ad7d200920107d220942f3eab8bce9ada5bfe8007d221c" - "200954ad7c42017c2216200e7d220d42a4cffaf397c9eed7c7007d220920" - "0d54ad200e201656ad7d427f511b20057d42a9c0c689aece93b2307c2116" - "42c7faf3c3ed82a3903c200f7d210d0b4200210e4200210f420021102003" - "2004842002200884844200520440427f4200427f4200200342788342c7fa" - "f3c3ed82a3903c561b22072002200756ad7d200720027d220242f3eab8bc" - "e9ada5bfe8007d220e200254ad7c42017c220220047d220742a4cffaf397" - "c9eed7c7007d220f200754ad2002200454ad7d427f511b20087d42a9c0c6" - "89aece93b2307c211042c7faf3c3ed82a3903c20037d21070b200141b801" - "6a2903002108200141a8016a290300210220012903b001210420012903a0" - "01210342002105200129039001221220012903800122138420014198016a" - "290300221e20014188016a290300221484844200520440427f4200427f42" - "00201342788342c7faf3c3ed82a3903c561b220a200a201454ad7d200a20" - "147d220a42f3eab8bce9ada5bfe8007d221d200a54ad7c42017c22172012" - "7d221142a4cffaf397c9eed7c7007d220a201154ad2012201756ad7d427f" - "511b201e7d42a9c0c689aece93b2307c211742c7faf3c3ed82a3903c2013" - "7d21110b4200211242002113420021142003200484200220088484420052" - "0440427f4200427f4200200342788342c7faf3c3ed82a3903c561b220520" - "02200556ad7d200520027d220242f3eab8bce9ada5bfe8007d2212200254" - "ad7c42017c220220047d220542a4cffaf397c9eed7c7007d2213200554ad" - "2002200454ad7d427f511b20087d42a9c0c689aece93b2307c211442c7fa" - "f3c3ed82a3903c20037d21050b200020133703b001200020053703a00120" - "00200a3703900120002011370380012000200f3703702000200737036020" - "0020093703502000200d3703402000201a37033020002006370320200020" - "0b37031020002018370300200020143703b801200020123703a801200020" - "17370398012000201d37038801200020103703782000200e370368200020" - "163703582000201c3703482000201b370338200020153703282000200c37" - "0318200020193703080b960501057f230041800c6b220324002003200120" - "02103b20034180036a200141c0016a220441c001104c1a200341c0046a20" - "0241c0016a220541c001104c1a200341c0016a20042005103b2003420037" - "03b809200342003703b009200342003703a809200342013703a009200342" - "003703980920034200370390092003420037038809200342093703800920" - "0341c00a6a200341c0026a20034180096a102f200341c80b6a2003418802" - "6a290300370300200341d00b6a20034190026a290300370300200341d80b" - "6a20034198026a290300370300200341e00b6a200341a0026a2903003703" - "00200341e80b6a200341a8026a290300370300200341f00b6a200341b002" - "6a290300370300200341f80b6a200341b8026a290300370300200341880b" - "6a20032903c801370300200341900b6a200341d0016a2903003703002003" - "41980b6a200341d8016a290300370300200341a00b6a200341e0016a2903" - "00370300200341a80b6a200341e8016a290300370300200341b00b6a2003" - "41f0016a290300370300200341b80b6a200341f8016a2903003703002003" - "2003290380023703c00b200320032903c0013703800b20034180066a2003" - "41c00a6a20031030200341c0066a200341800b6a2206200341406b103020" - "034180076a200341c00b6a220720034180016a103020034180096a200120" - "041030200341c0096a200141406b200341c0036a1030200341800a6a2001" - "4180016a20034180046a1030200341c00a6a200220051030200620024140" - "6b20034180056a1030200720024180016a200341c0056a1030200341c007" - "6a20034180096a200341c00a6a103b200341c00a6a200341c0076a200310" - "3c200041c0016a200341c00a6a200341c0016a103c200020034180066a41" - "c001104c1a200341800c6a24000bd741020e7f227e230041c0036b220324" - "0002400240200129034022212001290350222084200141c8006a29030022" - "23200141d8006a2903002222848442005204402002290340221d20022903" - "50221584200241c8006a2903002224200241d8006a290300221e8484500d" - "01200341f8016a2204200141406b220641186a2205290300370300200341" - "f0016a2208200641106a220b290300370300200320062903003703e00120" - "03200641086a220c2903003703e801200341e0016a202120232020202242" - "c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b20034198026a2209" - "200241406b220741186a220d29030037030020034190026a220a20074110" - "6a220e2903003703002003200741086a220f290300370388022003200729" - "03003703800220034180026a201d20242015201e42c7faf3c3ed82a3903c" - "428d95c7c396d2dac0977f102b200341186a2210200141186a2903003703" - "00200341106a200141106a2903003703002003200141086a290300370308" - "20032001290300370300200320032903800222162003290388022219200a" - "29030022252009290300222842c7faf3c3ed82a3903c428d95c7c396d2da" - "c0977f102b200341386a2209200241186a290300370300200341306a220a" - "200241106a2903003703002003200241086a290300370328200320022903" - "00370320200341206a20032903e001222c20032903e80122302008290300" - "22312004290300223242c7faf3c3ed82a3903c428d95c7c396d2dac0977f" - "102b200341b8036a22042005290300370300200341b0036a2205200b2903" - "003703002003200c2903003703a803200320062903003703a003200341a0" - "036a202c20302031203242c7faf3c3ed82a3903c428d95c7c396d2dac097" - "7f102b200429030021132005290300211f20032903a803211c20032903a0" - "0321172004200d2903003703002005200e2903003703002003200f290300" - "3703a803200320072903003703a003200341a0036a201620192025202842" - "c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2004290300211220" - "05290300211420032903a803211120032903a003211a200341d0006a2001" - "41306a290300370300200341d8006a2206200141386a2903003703002003" - "20012903203703402003200141286a290300370348200341406b201a2011" - "2014201242c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b200341" - "f8006a2207200241386a290300370300200341f0006a2208200241306a29" - "03003703002003200241286a290300370368200320022903203703602003" - "41e0006a2017201c201f201342c7faf3c3ed82a3903c428d95c7c396d2da" - "c0977f102b02402003200341206a104a450440200341406b200341e0006a" - "104a450d010b200420092903003703002005200a29030037030020032003" - "2903283703a803200320032903203703a003200341a0036a200329030020" - "032903082003290310201029030042c7faf3c3ed82a3903c428d95c7c396" - "d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2004" - "290300211f2005290300211c20032903a003211720032903a80321122004" - "200729030037030020052008290300370300200320032903683703a80320" - "0320032903603703a003200341a0036a2003290340200329034820032903" - "50200629030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0" - "858ce8b691a8b87f42a9c0c689aece93b230102d20124201862017423f88" - "842114201742018621112004290300211a2005290300211b20032903a803" - "211820032903a003212602400240201c4201862012423f8884222942ddb0" - "858ce8b691a8b87f85201f201f7c201c423f887c221342a9c0c689aece93" - "b2308584500440201142c7faf3c3ed82a3903c542014428d95c7c396d2da" - "c0977f542014428d95c7c396d2dac0977f511b450d0142a9c0c689aece93" - "b230211342ddb0858ce8b691a8b87f21292011212a201421110c020b2029" - "42deb0858ce8b691a8b87f54201342a9c0c689aece93b23054201342a9c0" - "c689aece93b230511b450d002011212a201421110c010b20132029201420" - "1142c7faf3c3ed82a3903c7d222a20115aad222d7d222742f3eab8bce9ad" - "a5bfe8007c2211202754ad2014202d54ad7d7c2214202954ad201442a2cf" - "faf397c9eed7c7007c2229201454ad7c50ad7d42a9c0c689aece93b2307d" - "21130b200341b8036a22012013370300200320293703b0032003202a3703" - "a003200320113703a80342ddb0858ce8b691a8b87f2114200341a0036a20" - "2a20112029201342c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b" - "2003201f3703d8012003201c3703d001200320123703c801200320173703" - "c001200341c0016a20032903a003222920032903a803222a20032903b003" - "222d2001290300222742c7faf3c3ed82a3903c428d95c7c396d2dac0977f" - "102b20184201862026423f888421112026420186212602400240201b4201" - "862018423f8884221842ddb0858ce8b691a8b87f85201a201a7c201b423f" - "887c221342a9c0c689aece93b2308584500440202642c7faf3c3ed82a390" - "3c542011428d95c7c396d2dac0977f542011428d95c7c396d2dac0977f51" - "1b450d012026211a2011211b42a9c0c689aece93b23021130c020b201842" - "deb0858ce8b691a8b87f54201342a9c0c689aece93b23054201342a9c0c6" - "89aece93b230511b450d002026211a2011211b201821140c010b20132018" - "2011202642c7faf3c3ed82a3903c7d221a20265aad22147d222642f3eab8" - "bce9ada5bfe8007c221b202654ad2011201454ad7d7c2211201854ad2011" - "42a2cffaf397c9eed7c7007c2214201154ad7c50ad7d42a9c0c689aece93" - "b2307d21130b20034198016a2201200341186a2903003703002003419001" - "6a2202200341106a29030037030020032003290308370388012003200329" - "03003703800142ddb0858ce8b691a8b87f212e20034180016a2029202a20" - "2d202742c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b200341b8" - "036a2204200341d8006a290300370300200341b0036a2205200341d0006a" - "290300370300200320032903483703a803200320032903403703a0032003" - "41a0036a20032903c001221120032903c801221820032903d00122272003" - "41d8016a290300222b42c7faf3c3ed82a3903c428d95c7c396d2dac0977f" - "102b200320133703b802200320143703b0022003201b3703a8022003201a" - "3703a002200429030021262005290300212920032903a803212a20032903" - "a003212d200341a0026a201a201b2014201342c7faf3c3ed82a3903c428d" - "95c7c396d2dac0977f102b200341a0026a201120182027202b42c7faf3c3" - "ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0" - "c689aece93b230102d200329038801222b4201862003290380012211423f" - "88842118201142018621270240024020022903002211420186202b423f88" - "84222b42ddb0858ce8b691a8b87f852011423f882001290300221120117c" - "7c221142a9c0c689aece93b2308584500440202742c7faf3c3ed82a3903c" - "542018428d95c7c396d2dac0977f542018428d95c7c396d2dac0977f511b" - "450d012027212f2018212742a9c0c689aece93b23021110c020b202b42de" - "b0858ce8b691a8b87f54201142a9c0c689aece93b23054201142a9c0c689" - "aece93b230511b450d002027212f20182127202b212e0c010b2011202b20" - "18202742c7faf3c3ed82a3903c7d222f20275aad222e7d221142f3eab8bc" - "e9ada5bfe8007c2227201154ad2018202e54ad7d7c2218202b54ad201842" - "a2cffaf397c9eed7c7007c222e201854ad7c50ad7d42a9c0c689aece93b2" - "307d21110b42ddb0858ce8b691a8b87f2118200341a0026a202f2027202e" - "201142c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b6" - "91a8b87f42a9c0c689aece93b230102d200320133703b801200320143703" - "b0012003201b3703a8012003201a3703a00120034180016a20032903a002" - "20032903a80220032903b002200341b8026a29030042c7faf3c3ed82a390" - "3c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece" - "93b230102d200341a0016a20032903800120032903880120032903900120" - "034198016a29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f10" - "2b202a420186202d423f88842114202d4201862111024002402029420186" - "202a423f8884221a42ddb0858ce8b691a8b87f85202620267c2029423f88" - "7c221342a9c0c689aece93b2308584500440201142c7faf3c3ed82a3903c" - "542014428d95c7c396d2dac0977f542014428d95c7c396d2dac0977f511b" - "450d012011211b2014211142a9c0c689aece93b23021130c020b201a42de" - "b0858ce8b691a8b87f54201342a9c0c689aece93b23054201342a9c0c689" - "aece93b230511b450d002011211b20142111201a21180c010b2013201a20" - "14201142c7faf3c3ed82a3903c7d221b20115aad22187d222642f3eab8bc" - "e9ada5bfe8007c2211202654ad2014201854ad7d7c2214201a54ad201442" - "a2cffaf397c9eed7c7007c2218201454ad7c50ad7d42a9c0c689aece93b2" - "307d21130b42ddb0858ce8b691a8b87f2114200341a0016a201b20112018" - "201342c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b6" - "91a8b87f42a9c0c689aece93b230102d02400240201520207c2213202320" - "247c2220202454ad2020201d20217c2224201d54ad7c2223202054ad7c7c" - "222042ddb0858ce8b691a8b87f852013201554ad2013202056ad7c201e20" - "227c7c222142a9c0c689aece93b2308584500440202442c7faf3c3ed82a3" - "903c542023428d95c7c396d2dac0977f542023428d95c7c396d2dac0977f" - "511b450d01202421222023211342a9c0c689aece93b23021210c020b2020" - "42deb0858ce8b691a8b87f54202142a9c0c689aece93b23054202142a9c0" - "c689aece93b230511b450d002024212220232113202021140c010b202120" - "202023202442c7faf3c3ed82a3903c7d222220245aad221d7d221542f3ea" - "b8bce9ada5bfe8007c2213201554ad201d202356ad7d7c2223202054ad20" - "2342a2cffaf397c9eed7c7007c2214202354ad7c50ad7d42a9c0c689aece" - "93b2307d21210b200341d8026a22012021370300200341d0026a22022014" - "370300200320223703c002200320133703c802200341c0026a2022201320" - "14202142c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b200341c0" - "026a202c20302031203242c7faf3c3ed82a3903c428d95c7c396d2dac097" - "7f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200341c0026a" - "201620192025202842c7faf3c3ed82a3903c428d95c7c396d2dac0977f42" - "ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200341c0026a2017" - "2012201c201f42c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b20" - "0041186a200341b8026a290300370300200041106a200341b0026a290300" - "370300200041086a20032903a802370300200020032903a0023703002000" - "20032903a001370320200041286a20032903a801370300200041306a2003" - "41b0016a290300370300200041386a200341b8016a290300370300200020" - "032903c002370340200041c8006a20032903c802370300200041d0006a20" - "02290300370300200041d8006a20012903003703000c030b200341b8036a" - "2204200141186a290300221b370300200341b0036a2205200141106a2903" - "0022183703002003200141086a29030022163703a8032003200129030022" - "193703a00342ddb0858ce8b691a8b87f2112200341a0036a201920162018" - "201b42c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2004290300" - "211d2005290300211520032903a803212420032903a003211f2004200141" - "206a220241186a2903003703002005200241106a29030037030020032002" - "41086a2903003703a803200320022903003703a003200341a0036a200129" - "0320200141286a2903002001290330200141386a29030042c7faf3c3ed82" - "a3903c428d95c7c396d2dac0977f102b2005290300211320032903a00321" - "1c20032903a8032117200420042903002225370300200320133703b00320" - "0320173703a8032003201c3703a003200341a0036a201c20172013202542" - "c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2004290300211420" - "032903b003211e20032903a803211120032903a003211a02400240024020" - "1320187c2218201620177c2216201754ad20162019201c7c2219201c54ad" - "7c2217201654ad7c7c221c42ddb0858ce8b691a8b87f852013201856ad20" - "18201c56ad7c201b20257c7c221342a9c0c689aece93b230858450044020" - "1942c7faf3c3ed82a3903c542017428d95c7c396d2dac0977f542017428d" - "95c7c396d2dac0977f511b450d0242a9c0c689aece93b23021130c010b20" - "1c42deb0858ce8b691a8b87f54201342a9c0c689aece93b23054201342a9" - "c0c689aece93b230511b450d01201c21120b2019211b201721180c010b20" - "13201c2017201942c7faf3c3ed82a3903c7d221b20195aad22127d221642" - "f3eab8bce9ada5bfe8007c2218201654ad2012201756ad7d7c2217201c54" - "ad201742a2cffaf397c9eed7c7007c2212201754ad7c50ad7d42a9c0c689" - "aece93b2307d21130b200341b8036a22012013370300200341b0036a2204" - "20123703002003201b3703a003200320183703a80342ddb0858ce8b691a8" - "b87f211c200341a0036a201b20182012201342c7faf3c3ed82a3903c428d" - "95c7c396d2dac0977f102b20034198036a22052001290300370300200341" - "90036a22062004290300370300200320032903a803370388032003200329" - "03a0033703800320034180036a201f20242015201d42c7faf3c3ed82a390" - "3c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece" - "93b230102d20012005290300370300200420062903003703002003200329" - "0388033703a80320032003290380033703a003200341a0036a201a201120" - "1e201442c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8" - "b691a8b87f42a9c0c689aece93b230102d20032903a803221b4201862003" - "2903a0032213423f88842117201342018621120240024002402004290300" - "2213420186201b423f8884221642ddb0858ce8b691a8b87f852013423f88" - "2001290300221320137c7c221342a9c0c689aece93b23085845004402012" - "42c7faf3c3ed82a3903c542017428d95c7c396d2dac0977f542017428d95" - "c7c396d2dac0977f511b450d0242a9c0c689aece93b23021130c010b2016" - "42deb0858ce8b691a8b87f54201342a9c0c689aece93b23054201342a9c0" - "c689aece93b230511b450d012016211c0b2012211b201721180c010b2013" - "20162017201242c7faf3c3ed82a3903c7d221b20125aad221c7d221242f3" - "eab8bce9ada5bfe8007c2218201254ad2017201c54ad7d7c2217201654ad" - "201742a2cffaf397c9eed7c7007c221c201754ad7c50ad7d42a9c0c689ae" - "ce93b2307d21130b2024420186201f423f8884211742ddb0858ce8b691a8" - "b87f2116201f42018621190240024020154201862024423f8884222842dd" - "b0858ce8b691a8b87f85201d201d7c2015423f887c221242a9c0c689aece" - "93b2308584500440201942c7faf3c3ed82a3903c542017428d95c7c396d2" - "dac0977f542017428d95c7c396d2dac0977f511b450d0120192125201721" - "1942a9c0c689aece93b23021120c020b202842deb0858ce8b691a8b87f54" - "201242a9c0c689aece93b23054201242a9c0c689aece93b230511b450d00" - "2019212520172119202821160c010b201220282017201942c7faf3c3ed82" - "a3903c7d222520195aad22167d222c42f3eab8bce9ada5bfe8007c221920" - "2c54ad2016201756ad7d7c2217202854ad201742a2cffaf397c9eed7c700" - "7c2216201754ad7c50ad7d42a9c0c689aece93b2307d21120b42ddb0858c" - "e8b691a8b87f211702400240201520167c2228201920247c2215201954ad" - "2015201f20257c221f202554ad7c2219201554ad7c7c221542ddb0858ce8" - "b691a8b87f852016202856ad2015202854ad7c2012201d7c7c221d42a9c0" - "c689aece93b2308584500440201f42c7faf3c3ed82a3903c542019428d95" - "c7c396d2dac0977f542019428d95c7c396d2dac0977f511b450d01201f21" - "242019211f42a9c0c689aece93b230211d0c020b201542deb0858ce8b691" - "a8b87f54201d42a9c0c689aece93b23054201d42a9c0c689aece93b23051" - "1b450d00201f21242019211f201521170c010b201d20152019201f42c7fa" - "f3c3ed82a3903c7d2224201f5aad22177d221242f3eab8bce9ada5bfe800" - "7c221f201254ad2017201956ad7d7c2212201554ad201242a2cffaf397c9" - "eed7c7007c2217201254ad7c50ad7d42a9c0c689aece93b2307d211d0b20" - "0320173703b003200320243703a0032003201d3703b8032003201f3703a8" - "0342ddb0858ce8b691a8b87f2119200341a0036a2024201f2017201d42c7" - "faf3c3ed82a3903c428d95c7c396d2dac0977f102b2018420186201b423f" - "88842112201b420186211602400240201c4201862018423f8884222542dd" - "b0858ce8b691a8b87f85201320137c201c423f887c221542a9c0c689aece" - "93b2308584500440201642c7faf3c3ed82a3903c542012428d95c7c396d2" - "dac0977f542012428d95c7c396d2dac0977f511b450d0120162128201221" - "1642a9c0c689aece93b23021150c020b202542deb0858ce8b691a8b87f54" - "201542a9c0c689aece93b23054201542a9c0c689aece93b230511b450d00" - "2016212820122116202521190c010b201520252012201642c7faf3c3ed82" - "a3903c7d222820165aad22197d222c42f3eab8bce9ada5bfe8007c221620" - "2c54ad2012201954ad7d7c2212202554ad201242a2cffaf397c9eed7c700" - "7c2219201254ad7c50ad7d42a9c0c689aece93b2307d21150b42ddb0858c" - "e8b691a8b87f2112200341a0036a202820162019201542c7faf3c3ed82a3" - "903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689ae" - "ce93b230102d2011420186201a423f88842116201a420186211a02400240" - "201e4201862011423f8884221942ddb0858ce8b691a8b87f85201420147c" - "201e423f887c221542a9c0c689aece93b2308584500440201a42c7faf3c3" - "ed82a3903c542016428d95c7c396d2dac0977f542016428d95c7c396d2da" - "c0977f511b450d01201a21112016211a42a9c0c689aece93b23021150c02" - "0b201942deb0858ce8b691a8b87f54201542a9c0c689aece93b230542015" - "42a9c0c689aece93b230511b450d00201a21112016211a201921120c010b" - "201520192016201a42c7faf3c3ed82a3903c7d2211201a5aad22127d2214" - "42f3eab8bce9ada5bfe8007c221a201454ad2012201656ad7d7c22142019" - "54ad201442a2cffaf397c9eed7c7007c2212201454ad7c50ad7d42a9c0c6" - "89aece93b2307d21150b201a4201862011423f8884211e42ddb0858ce8b6" - "91a8b87f211420114201862111024002402012420186201a423f88842216" - "42ddb0858ce8b691a8b87f85201520157c2012423f887c221542a9c0c689" - "aece93b2308584500440201142c7faf3c3ed82a3903c54201e428d95c7c3" - "96d2dac0977f54201e428d95c7c396d2dac0977f511b450d012011211a20" - "1e211142a9c0c689aece93b23021150c020b201642deb0858ce8b691a8b8" - "7f54201542a9c0c689aece93b23054201542a9c0c689aece93b230511b45" - "0d002011211a201e2111201621140c010b20152016201e201142c7faf3c3" - "ed82a3903c7d221a20115aad22127d221442f3eab8bce9ada5bfe8007c22" - "11201454ad2012201e56ad7d7c2212201654ad201242a2cffaf397c9eed7" - "c7007c2214201254ad7c50ad7d42a9c0c689aece93b2307d21150b201142" - "0186201a423f8884211242ddb0858ce8b691a8b87f2116201a420186211e" - "0240024020144201862011423f8884221142ddb0858ce8b691a8b87f8520" - "1520157c2014423f887c221542a9c0c689aece93b2308584500440201e42" - "c7faf3c3ed82a3903c542012428d95c7c396d2dac0977f542012428d95c7" - "c396d2dac0977f511b450d01201e21142012211e42a9c0c689aece93b230" - "21150c020b201142deb0858ce8b691a8b87f54201542a9c0c689aece93b2" - "3054201542a9c0c689aece93b230511b450d00201e21142012211e201121" - "160c010b201520112012201e42c7faf3c3ed82a3903c7d2214201e5aad22" - "1a7d221642f3eab8bce9ada5bfe8007c221e201654ad2012201a54ad7d7c" - "2212201154ad201242a2cffaf397c9eed7c7007c2216201254ad7c50ad7d" - "42a9c0c689aece93b2307d21150b20034198036a2201200241186a290300" - "37030020034190036a2204200241106a2903003703002003200229030037" - "0380032003200241086a2903003703880342ddb0858ce8b691a8b87f2112" - "20034180036a202120232020202242c7faf3c3ed82a3903c428d95c7c396" - "d2dac0977f102b2003201d3703f802200320173703f0022003201f3703e8" - "02200320243703e002200129030021212004290300212320032903800321" - "22200329038803211d200120133703002003201c37039003200320183703" - "88032003201b3703800320034180036a20032903a00320032903a8032003" - "2903b003200341b8036a29030042c7faf3c3ed82a3903c428d95c7c396d2" - "dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200341" - "e0026a200329038003200329038803200329039003200129030042c7faf3" - "c3ed82a3903c428d95c7c396d2dac0977f102b200341e0026a2014201e20" - "16201542c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8" - "b691a8b87f42a9c0c689aece93b230102d201d4201862022423f88842120" - "20224201862122024002402023420186201d423f8884221342ddb0858ce8" - "b691a8b87f85202120217c2023423f887c222142a9c0c689aece93b23085" - "84500440202242c7faf3c3ed82a3903c542020428d95c7c396d2dac0977f" - "542020428d95c7c396d2dac0977f511b450d01202221232020212242a9c0" - "c689aece93b23021210c020b201342deb0858ce8b691a8b87f54202142a9" - "c0c689aece93b23054202142a9c0c689aece93b230511b450d0020222123" - "20202122201321120c010b202120132020202242c7faf3c3ed82a3903c7d" - "222320225aad221d7d221542f3eab8bce9ada5bfe8007c2222201554ad20" - "1d202056ad7d7c2220201354ad202042a2cffaf397c9eed7c7007c221220" - "2054ad7c50ad7d42a9c0c689aece93b2307d21210b200020123703502000" - "2023370340200020032903a003370300200020032903e002370320200020" - "2137035820002022370348200041086a20032903a803370300200041286a" - "20032903e802370300200041186a200341b8036a29030037030020004110" - "6a200341b0036a290300370300200041306a200341f0026a290300370300" - "200041386a200341f8026a2903003703000c020b2000200241e000104c1a" - "0c010b2000200141e000104c1a0b200341c0036a24000b970802067f087e" - "230041a0016b220224000240200129034022082001290350220984200141" - "c8006a290300220a200141d8006a290300220b8484420052044020024200" - "370318200242003703102002420037030820024201370300024020014140" - "6b2002104a450440200241206a2001290320220837030020002001290300" - "2209370310200041306a2008370300200241386a200141386a2903002208" - "370300200241306a200141306a290300220a370300200241286a20014128" - "6a290300220b370300200241106a200141106a290300220c370300200241" - "186a200141186a290300220d370300200041186a200141086a290300220e" - "370300200041206a200c370300200041286a200d370300200041386a200b" - "370300200041406b200a370300200041c8006a2008370300200220093703" - "002002200e3703080c010b20024198016a2204200b370300200220093703" - "900120022008370380012002200a37038801200242a9c0c689aece93b230" - "370318200242ddb0858ce8b691a8b87f3703102002428d95c7c396d2dac0" - "977f370308200242c7faf3c3ed82a3903c37030020024180016a2002103a" - "20022903800121082002290388012109200229039001210a200241186a22" - "032004290300220b3703002002200a370310200220093703082002200837" - "0300200220082009200a200b42c7faf3c3ed82a3903c428d95c7c396d2da" - "c0977f102b2003290300210c2002290310210d2002290308210e20022903" - "00210f200241d0006a2204200141106a290300370300200241d8006a2205" - "200141186a290300370300200220012903003703402002200141086a2903" - "00370348200241406b200f200e200d200c42c7faf3c3ed82a3903c428d95" - "c7c396d2dac0977f102b200241f8006a2206200141386a29030037030020" - "0241f0006a2207200141306a2903003703002002200141286a2903003703" - "68200220012903203703602003200b3703002002200a3703102002200937" - "0308200220083703002002200f200e200d200c42c7faf3c3ed82a3903c42" - "8d95c7c396d2dac0977f102b200241e0006a200229030020022903082002" - "290310200329030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f10" - "2b200320052903002208370300200241106a200429030022093703002002" - "41206a2002290360220a370300200241286a2002290368220b3703002002" - "41306a2007290300220c370300200241386a2006290300220d3703002000" - "2002290340220e370310200041186a2002290348220f370300200041206a" - "2009370300200041286a2008370300200041306a200a370300200041386a" - "200b370300200041406b200c370300200041c8006a200d3703002002200f" - "3703082002200e3703000b20004200370308200042013703000c010b2000" - "4200370308200042003703000b200241a0016a24000b3000200128021c20" - "002d0000410274220041cca5c0006a280200200041c0a5c0006a28020020" - "0128022028020c1103000bf917021d7f087e23004180066b220224002002" - "41b8036a2208200141386a290300370300200241b0036a2209200141306a" - "290300370300200241a8036a2213200141286a290300370300200241a003" - "6a2214200141206a29030037030020024198036a2203200141186a290300" - "37030020024190036a2204200141106a2903003703002002200129030037" - "0380032002200141086a2903003703880320024180036a20012001102f20" - "0241f8036a2205200141f8006a290300370300200241f0036a2206200141" - "f0006a290300370300200241e8036a2207200141e8006a29030037030020" - "0241e0036a220a200141e0006a290300370300200241d8036a220b200141" - "d8006a290300370300200241d0036a220c200141d0006a29030037030020" - "02200141c8006a2903003703c803200220012903403703c003200241c003" - "6a200141406b221e201e102f200241b8046a221520052903003703002002" - "41b0046a22162006290300370300200241a8046a22172007290300370300" - "200241a0046a2218200a29030037030020024198046a2219200b29030037" - "030020024190046a221a200c290300370300200220022903c80337038804" - "200220022903c0033703800420024180046a200241c0036a200241c0036a" - "102f200241c0026a2001200241c0036a1030200241f8046a221b200241f8" - "026a2205290300370300200241f0046a220e200241f0026a220a29030037" - "0300200241e8046a220f200241e8026a2206290300370300200241e0046a" - "2210200241e0026a220c290300370300200241d8046a220d200241d8026a" - "2207290300370300200241d0046a2211200241d0026a220b290300370300" - "200220022903c8023703c804200220022903c0023703c004200241c0046a" - "200241c0026a200241c0026a102f200241d8056a2212200d290300370300" - "200241d0056a220d2011290300370300200220022903c8043703c8052002" - "20022903c0043703c005200241c0056a2002290380032002290388032004" - "290300200329030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42" - "ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200241f8056a2203" - "201b290300370300200241f0056a2204200e2903003703002002200f2903" - "003703e805200220102903003703e005200241e0056a2014290300201329" - "03002009290300200829030042c7faf3c3ed82a3903c428d95c7c396d2da" - "c0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20024198" - "026a2208201229030037030020024190026a2209200d2903003703002002" - "41a8026a221320022903e805370300200241b0026a221420042903003703" - "00200241b8026a221b2003290300370300200220022903c8053703880220" - "0220022903c00537038002200220022903e0053703a00220122008290300" - "370300200d200929030037030020022002290388023703c8052002200229" - "0380023703c005200241c0056a200229038004200229038804201a290300" - "201929030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb085" - "8ce8b691a8b87f42a9c0c689aece93b230102d2003201b29030037030020" - "042014290300370300200220132903003703e805200220022903a0023703" - "e005200241e0056a201829030020172903002016290300201529030042c7" - "faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f" - "42a9c0c689aece93b230102d200241186a22152012290300370300200241" - "106a2216200d290300370300200241206a221720022903e0053703002002" - "41286a221820022903e805370300200241306a2219200429030037030020" - "0241386a221a2003290300370300200220022903c8053703082002200229" - "03c005370300200241c0026a200220021030201a20052903003703002019" - "200a290300370300201820062903003703002017200c2903003703002015" - "20072903003703002016200b290300370300200220022903c80237030820" - "0220022903c002370300200241c0026a20024180036a20024180036a1030" - "200241406b200241c0026a20024180036a103020024190056a220e200241" - "d0006a29030037030020024198056a220f200241d8006a29030037030020" - "0241a0056a2210200241e0006a290300370300200241a8056a2211200241" - "e8006a290300370300200241b0056a221c200241f0006a29030037030020" - "0241b8056a221d200241f8006a2903003703002002200229034037038005" - "200220022903483703880520024180056a200241406b200241406b102f20" - "0241c0026a2002200210302003200f2903003703002004200e2903003703" - "0020022002290388053703e80520022002290380053703e005200241e005" - "6a20022903c00220022903c80220022903d002200729030042c7faf3c3ed" - "82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c6" - "89aece93b230102d2008201d2903003703002009201c2903003703002002" - "201129030037038802200220102903003703800220024180026a20022903" - "e002200629030020022903f002200529030042c7faf3c3ed82a3903c428d" - "95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230" - "102d2008290300211f200929030021202003290300212120042903002122" - "2002290388022123200229038002212420022903e805212520022903e005" - "212620024180016a20024180046a20024180046a1030200241c0026a2002" - "4180016a20024180016a1030200241b8016a220e20052903003703002002" - "41b0016a220f200a290300370300200241a8016a22102006290300370300" - "200241a0016a2211200c29030037030020024198016a221c200729030037" - "030020024190016a221d200b290300370300200220022903c80237038801" - "200220022903c00237038001200241c0026a20024180016a20024180016a" - "1030200e2005290300370300200f200a2903003703002010200629030037" - "03002011200c290300370300201c2007290300370300201d200b29030037" - "0300200220022903c80237038801200220022903c00237038001200241c0" - "016a201e20014180016a102f200320152903003703002004201629030037" - "0300200220022903083703e805200220022903003703e005200241e0056a" - "202620252022202142c7faf3c3ed82a3903c428d95c7c396d2dac0977f42" - "ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2008201a29030037" - "030020092019290300370300200220182903003703880220022017290300" - "3703800220024180026a202420232020201f42c7faf3c3ed82a3903c428d" - "95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230" - "102d20072003290300370300200b20042903003703002006200229038802" - "370300200a200929030037030020052008290300370300200220022903e8" - "053703c802200220022903e0053703c00220022002290380023703e00220" - "024180026a200241406b200241c0026a102f20122008290300370300200d" - "200929030037030020022002290388023703c80520022002290380023703" - "c005200241c0056a200229038001200229038801201d290300201c290300" - "42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8" - "b87f42a9c0c689aece93b230102d2003201b290300370300200420142903" - "00370300200220132903003703e805200220022903a0023703e005200241" - "e0056a20112903002010290300200f290300200e29030042c7faf3c3ed82" - "a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689" - "aece93b230102d20072012290300370300200b200d290300370300200c20" - "022903e005370300200620022903e805370300200a200429030037030020" - "052003290300370300200220022903c8053703c802200220022903c00537" - "03c00220004180016a200241c0016a200241c0016a10302000201f370338" - "200020203703302000202337032820002024370320200020213703182000" - "20223703102000202537030820002026370300200020022903c002370340" - "200041c8006a20022903c802370300200041d0006a200b29030037030020" - "0041d8006a2007290300370300200041e0006a200c290300370300200041" - "e8006a2006290300370300200041f0006a200a290300370300200041f800" - "6a200529030037030020024180066a24000bbd21021c7f087e230041800b" - "6b22032400024002400240024020012903800120014188016a2903008442" - "00520d0020012903900120014198016a290300844200520d0020012903a0" - "01200141a8016a290300844200520d0020012903b001200141b8016a2903" - "0084500d010b024020022903800120024188016a290300844200520d0020" - "022903900120024198016a290300844200520d0020022903a001200241a8" - "016a290300844200520d0020022903b001200241b8016a29030084500d02" - "0b200341b8086a221420014180016a220441386a290300370300200341b0" - "086a200441306a290300370300200341a8086a2215200441286a29030037" - "0300200341a0086a200441206a29030037030020034198086a2216200441" - "186a29030037030020034190086a200441106a2903003703002003200429" - "0300370380082003200441086a2903003703880820034180086a20042004" - "102f200341f8086a221720024180016a220541386a290300370300200341" - "f0086a200541306a290300370300200341e8086a2218200541286a290300" - "370300200341e0086a200541206a290300370300200341d8086a22192005" - "41186a290300370300200341d0086a200541106a29030037030020032005" - "41086a2903003703c808200320052903003703c008200341c0086a200520" - "05102f20032001200341c0086a102f200341406b200220034180086a102f" - "20034180016a200420034180086a102f200341c0016a2005200341c0086a" - "102f20034180026a200141406b200341c0016a102f200341c0026a200241" - "406b20034180016a102f024002402003200341406b104a0d00200341206a" - "200341e0006a104a0d0020034180026a200341c0026a104a0d00200341a0" - "026a200341e0026a104a450d010b200341386a290300211f200341286a29" - "03002120200329033021212003290320212220034198076a2201200341d8" - "006a29030037030020034190076a2202200341d0006a2903003703002003" - "200329034837038807200320032903403703800720034180076a20032903" - "0020032903082003290310200341186a29030042c7faf3c3ed82a3903c42" - "8d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b2" - "30102d200341d8076a2206200341f8006a290300370300200341d0076a22" - "09200341f0006a2903003703002003200341e8006a2903003703c8072003" - "20032903603703c007200341c0076a202220202021201f42c7faf3c3ed82" - "a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689" - "aece93b230102d20034198036a200129030037030020034190036a200229" - "0300370300200341a8036a20032903c807370300200341b0036a20092903" - "00370300200341b8036a2006290300370300200320032903880737038803" - "200320032903800737038003200320032903c0073703a003200341b8026a" - "290300211f200341a8026a290300212020032903b002212120032903a002" - "21222001200341d8026a2903003703002002200341d0026a290300370300" - "200320032903c80237038807200320032903c0023703800720034180076a" - "20032903800220032903880220032903900220034198026a29030042c7fa" - "f3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42" - "a9c0c689aece93b230102d2006200341f8026a2903003703002009200341" - "f0026a2903003703002003200341e8026a2903003703c807200320032903" - "e0023703c007200341c0076a202220202021201f42c7faf3c3ed82a3903c" - "428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93" - "b230102d200341d8036a2001290300370300200341d0036a200229030037" - "0300200341e8036a20032903c807370300200341f0036a20092903003703" - "00200341f8036a200629030037030020032003290388073703c803200320" - "03290380073703c003200320032903c0073703e003200341c0076a200341" - "80036a20034180036a1030200341b8096a200341f8076a220c2903003703" - "00200341b0096a200341f0076a2211290300370300200341a8096a200341" - "e8076a220d290300370300200341a0096a200341e0076a221a2903003703" - "0020034198096a200629030037030020034190096a200929030037030020" - "0320032903c80737038809200320032903c0073703800920034180096a20" - "0341c0076a200341c0076a102f20034180046a20034180036a2003418009" - "6a102f200341c0046a200341c0036a200341c0036a103020034180056a20" - "0320034180096a102f200341c0056a20034180026a20034180046a102f20" - "0341d0096a220a200341d0046a290300370300200341d8096a2207200341" - "d8046a290300370300200341e0096a220b200341e0046a29030037030020" - "0341e8096a220e200341e8046a290300370300200341f0096a220f200341" - "f0046a290300370300200341f8096a2210200341f8046a29030037030020" - "0320032903c0043703c009200320032903c8043703c809200341c0096a20" - "0341c0046a200341c0046a102f200341d8066a2208200729030037030020" - "0341d0066a2207200a290300370300200320032903c8093703c806200320" - "032903c0093703c006200341c0066a200329038004200329038804200329" - "03900420034198046a29030042c7faf3c3ed82a3903c428d95c7c396d2da" - "c0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20062010" - "2903003703002009200f2903003703002003200e2903003703c807200320" - "0b2903003703c007200341c0076a20032903a004200341a8046a29030020" - "032903b004200341b8046a29030042c7faf3c3ed82a3903c428d95c7c396" - "d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2001" - "200829030037030020022007290300370300200341a8076a220e20032903" - "c807370300200341b0076a220f2009290300370300200341b8076a221020" - "06290300370300200320032903c80637038807200320032903c006370380" - "07200320032903c0073703a007200341c0076a20034180056a2003418005" - "6a103020034198066a2212200129030037030020034190066a2213200229" - "030037030020032003290388073703880620032003290380073703800620" - "034180066a20032903c00720032903c80720032903d007200629030042c7" - "faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f" - "42a9c0c689aece93b230102d200820102903003703002007200f29030037" - "03002003200e2903003703c806200320032903a0073703c006200341c006" - "6a20032903e007200d29030020032903f007200c29030042c7faf3c3ed82" - "a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689" - "aece93b230102d2008290300211f20072903002120201229030021212013" - "290300212220032903c806212320032903c0062124200329038806212520" - "03290380062126200820034198056a290300370300200720034190056a29" - "030037030020032003290388053703c80620032003290380053703c00620" - "0341c0066a202620252022202142c7faf3c3ed82a3903c428d95c7c396d2" - "dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200120" - "0341b8056a2903003703002002200341b0056a2903003703002003200341" - "a8056a29030037038807200320032903a0053703800720034180076a2024" - "20232020201f42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0" - "858ce8b691a8b87f42a9c0c689aece93b230102d20062008290300370300" - "20092007290300370300200d200329038807370300201120022903003703" - "00200c2001290300370300200320032903c8063703c807200320032903c0" - "063703c00720032003290380073703e00720034180076a200341c0046a20" - "0341c0076a102f200341c0076a200341c0056a200341c0056a1030200341" - "f80a6a220a2001290300370300200341f00a6a220b200229030037030020" - "032003290388073703e80a20032003290380073703e00a200341e00a6a20" - "032903c00720032903c80720032903d007200629030042c7faf3c3ed82a3" - "903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689ae" - "ce93b230102d200820102903003703002007200f2903003703002003200e" - "2903003703c806200320032903a0073703c006200341c0066a20032903e0" - "07200d29030020032903f007200c29030042c7faf3c3ed82a3903c428d95" - "c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b23010" - "2d2012200a2903003703002013200b290300370300200341a0066a221b20" - "032903c006370300200341a8066a221c20032903c806370300200341b006" - "6a221d2007290300370300200341b8066a221e2008290300370300200320" - "032903e80a37038806200320032903e00a37038006200341c0076a200420" - "051030200341b80a6a2204200c290300370300200341b00a6a2205201129" - "0300370300200341a80a6a220c200d290300370300200341a00a6a220d20" - "1a290300370300200341980a6a22112006290300370300200341900a6a22" - "062009290300370300200320032903c8073703880a200320032903c00737" - "03800a200341800a6a200341c0076a200341c0076a102f200a2011290300" - "370300200b2006290300370300200320032903880a3703e80a2003200329" - "03800a3703e00a200341e00a6a2003290380082003290388082003290390" - "08201629030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0" - "858ce8b691a8b87f42a9c0c689aece93b230102d20082004290300370300" - "200720052903003703002003200c2903003703c8062003200d2903003703" - "c006200341c0066a20032903a008201529030020032903b0082014290300" - "42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8" - "b87f42a9c0c689aece93b230102d2001200a2903003703002002200b2903" - "00370300200e20032903c806370300200f20072903003703002010200829" - "0300370300200320032903e80a37038807200320032903e00a3703800720" - "0320032903c0063703a007200341d80a6a22042001290300370300200341" - "d00a6a2201200229030037030020032003290388073703c80a2003200329" - "0380073703c00a200341c00a6a20032903c00820032903c80820032903d0" - "08201929030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0" - "858ce8b691a8b87f42a9c0c689aece93b230102d200a2010290300370300" - "200b200f2903003703002003200e2903003703e80a200320032903a00737" - "03e00a200341e00a6a20032903e008201829030020032903f00820172903" - "0042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691" - "a8b87f42a9c0c689aece93b230102d200820042903003703002007200129" - "0300370300200341e8066a20032903e80a370300200341f0066a200b2903" - "00370300200341f8066a200a290300370300200320032903c80a3703c806" - "200320032903c00a3703c006200320032903e00a3703e00620004180016a" - "200341c0066a20034180036a102f2000201f370338200020203703302000" - "202337032820002024370320200020213703182000202237031020002025" - "370308200020263703002000200329038006370340200041c8006a200329" - "038806370300200041d0006a2013290300370300200041d8006a20122903" - "00370300200041e0006a201b290300370300200041e8006a201c29030037" - "0300200041f0006a201d290300370300200041f8006a201e290300370300" - "0c030b2000200110430c020b2000200241c001104c1a0c010b2000200141" - "c001104c1a0b200341800b6a24000bf50602037f067e230041c0026b2202" - "24000240024002400240024020012903800120014188016a290300844200" - "520d0020012903900120014198016a290300844200520d0020012903a001" - "200141a8016a290300844200520d0020012903b001200141b8016a290300" - "84500d010b200241d8006a4200370300200241e0006a2204420037030020" - "0241e8006a4200370300200241f0006a4200370300200241f8006a420037" - "030020024200370348200242013703402002420037035020014180016a22" - "03200241406b104a450440200141a0016a2004104a450d020b200241406b" - "200310312002280240410171450d02200241386a20024188016a29030022" - "05370300200241306a20024180016a22032903002206370300200241286a" - "200241f8006a2903002207370300200241206a200241f0006a2903002208" - "370300200241186a200241e8006a2903002209370300200241106a200241" - "e0006a290300220a37030020024190026a200a37030020024198026a2009" - "370300200241a0026a2008370300200241a8026a2007370300200241b002" - "6a2006370300200241b8026a200537030020022002290350220537030020" - "02200241d8006a2903002206370308200220053703800220022006370388" - "0220024180026a20022002102f200241406b200120024180026a102f2002" - "41c0016a200220024180026a102f2003200141406b200241c0016a102f20" - "0041106a200241406b418001104c1a20004200370308200042013703000c" - "030b20004200370308200042003703000c020b200241b8016a200141f800" - "6a290300370300200241b0016a200141f0006a290300370300200241a801" - "6a200141e8006a290300370300200241a0016a200141e0006a2903003703" - "0020024198016a200141d8006a29030037030020024190016a200141d000" - "6a29030037030020024188016a200141c8006a290300370300200241d000" - "6a200141106a290300370300200241d8006a200141186a29030037030020" - "0241e0006a200141206a290300370300200241e8006a200141286a290300" - "370300200241f0006a200141306a290300370300200241f8006a20014138" - "6a2903003703002002200129034037038001200220012903003703402002" - "200141086a290300370348200041106a200241406b418001104c1a200042" - "00370308200042013703000c010b4194a1c0001020000b200241c0026a24" - "000bd64502497f107e230041a00f6b22022400200241386a223f200141f8" - "006a220e290300370300200241306a2240200141f0006a220f2903003703" - "00200241286a2241200141e8006a2210290300370300200241206a224220" - "0141e0006a2211290300370300200241186a2243200141d8006a22122903" - "00370300200241106a2244200141d0006a22202903003703002002200129" - "03403703002002200141c8006a2221290300370308200141a8016a222329" - "03002153200141a0016a22242903002154200141b8016a22252903002155" - "200141b0016a2230290300215620014188016a2235290300215720014198" - "016a2236290300215820014190016a22372903002159200129038001215a" - "200241f8006a200141f8016a2213290300370300200241f0006a200141f0" - "016a2214290300370300200241e8006a200141e8016a2215290300370300" - "200241e0006a200141e0016a2216290300370300200241d8006a200141d8" - "016a2217290300370300200241d0006a200141d0016a220d290300370300" - "20024190016a20014190026a220429030037030020024198016a20014198" - "026a2206290300370300200241a0016a200141a0026a2207290300370300" - "200241a8016a200141a8026a2208290300370300200241b0016a200141b0" - "026a2205290300370300200241b8016a200141b8026a2209290300370300" - "2002200141c8016a2222290300370348200220012903c001370340200220" - "012903800237038001200220014188026a220a29030037038801200241f8" - "016a200141f8026a2238290300370300200241f0016a200141f0026a2245" - "290300370300200241e8016a200141e8026a2246290300370300200241e0" - "016a200141e0026a2247290300370300200241d8016a200141d8026a2248" - "290300370300200241d0016a200141d0026a2249290300370300200241b8" - "026a2226200141386a2231290300370300200241b0026a2227200141306a" - "2232290300370300200241a8026a2228200141286a223a29030037030020" - "0241a0026a2229200141206a223b29030037030020024198026a222a2001" - "41186a223c29030037030020024190026a222b200141106a223d29030037" - "03002002200141c8026a224a2903003703c801200220012903c0023703c0" - "012002200141086a223e2903003703880220022001290300370380022002" - "4180026a200120014180026a2203102f200241f8026a2219203129030037" - "0300200241f0026a221a2032290300370300200241e8026a221b203a2903" - "00370300200241e0026a221c203b290300370300200241d8026a221d203c" - "290300370300200241d0026a221e203d2903003703002002203e29030037" - "03c802200220012903003703c002200241c0026a200120031030200241b8" - "036a220b2009290300370300200241b0036a220920052903003703002002" - "41a8036a22052008290300370300200241a0036a220c2007290300370300" - "20024198036a2218200629030037030020024190036a221f200429030037" - "0300200242003703b80d200242003703b00d200242003703a80d20024201" - "3703a00d200242003703980d200242003703900d200242003703880d2002" - "42093703800d2002200a2903003703880320022001290380023703800320" - "024180036a2003200241800d6a102f200241c00b6a20024180036a200110" - "30200b200241f80b6a22062903003703002009200241f00b6a2207290300" - "3703002005200241e80b6a2208290300370300200c200241e00b6a220529" - "03003703002018200241d80b6a2203290300370300201f200241d00b6a22" - "04290300370300200220022903c80b37038803200220022903c00b370380" - "03200241c00b6a200241c0026a20024180036a102f201920062903003703" - "00201a2007290300370300201b2008290300370300201c20052903003703" - "00201d2003290300370300201e2004290300370300200220022903c80b37" - "03c802200220022903c00b3703c002200241980f6a220b201d2903003703" - "00200241900f6a220c201e290300370300200220022903c8023703880f20" - "0220022903c0023703800f200241800f6a20022903800220022903880220" - "2b290300202a29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f" - "42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200241980a6a22" - "092019290300370300200241900a6a220a201a2903003703002002201b29" - "03003703880a2002201c2903003703800a200241800a6a20292903002028" - "2903002027290300202629030042c7faf3c3ed82a3903c428d95c7c396d2" - "dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200320" - "0b290300224b3703002004200c290300224c370300200520022903800a22" - "4d3703002007200a290300224e370300200820022903880a224f37030020" - "0620092903002250370300200220022903880f22513703c80b2002200229" - "03800f22523703c00b20192050370300201a204e370300201b204f370300" - "201c204d370300201d204b370300201e204c370300200220513703c80220" - "0220523703c002200241c0036a20024180026a200241800d6a102f200b20" - "1d290300370300200c201e290300370300200220022903c8023703880f20" - "0220022903c0023703800f200241800f6a20022903c00320022903c80320" - "022903d003200241d8036a29030042c7faf3c3ed82a3903c428d95c7c396" - "d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2009" - "2019290300370300200a201a2903003703002002201b2903003703880a20" - "02201c2903003703800a200241800a6a20022903e003200241e8036a2903" - "0020022903f003200241f8036a29030042c7faf3c3ed82a3903c428d95c7" - "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d" - "2003200b290300224b3703002004200c290300224c370300200520022903" - "800a224d3703002007200a290300224e370300200820022903880a224f37" - "0300200620092903002250370300200220022903880f22513703c80b2002" - "20022903800f22523703c00b20192050370300201a204e370300201b204f" - "370300201c204d370300201d204b370300201e204c370300200220513703" - "c802200220523703c002200241c00b6a20024180026a20024180026a1030" - "202620062903003703002027200729030037030020282008290300370300" - "20292005290300370300202a2003290300370300202b2004290300370300" - "200220022903c80b37038802200220022903c00b3703800220024190046a" - "221f200d29030037030020024198046a222c2017290300370300200241a0" - "046a222d2016290300370300200241a8046a222e20152903003703002002" - "41b0046a222f2014290300370300200241b8046a22392013290300370300" - "200220012903c00137038004200220222903003703880420024180046a20" - "0141c0016a223320014180016a2234102f200241f8046a22182013290300" - "370300200241f0046a22132014290300370300200241e8046a2214201529" - "0300370300200241e0046a22152016290300370300200241d8046a221620" - "17290300370300200241d0046a2217200d29030037030020022022290300" - "3703c804200220012903c0013703c004200241c0046a2033203410302002" - "41b8056a220d2025290300370300200241b0056a22222030290300370300" - "200241a8056a22252023290300370300200241a0056a2223202429030037" - "030020024198056a2224203629030037030020024190056a223020372903" - "003703002002203529030037038805200220012903800137038005200241" - "80056a2034200241800d6a102f200241c00b6a20024180056a2033103020" - "0d2006290300370300202220072903003703002025200829030037030020" - "232005290300370300202420032903003703002030200429030037030020" - "0220022903c80b37038805200220022903c00b37038005200241c00b6a20" - "0241c0046a20024180056a102f2018200629030037030020132007290300" - "370300201420082903003703002015200529030037030020162003290300" - "37030020172004290300370300200220022903c80b3703c8042002200229" - "03c00b3703c004200b2016290300370300200c2017290300370300200220" - "022903c8043703880f200220022903c0043703800f200241800f6a200229" - "038004200229038804201f290300202c29030042c7faf3c3ed82a3903c42" - "8d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b2" - "30102d20092018290300370300200a201329030037030020022014290300" - "3703880a200220152903003703800a200241800a6a202d290300202e2903" - "00202f290300203929030042c7faf3c3ed82a3903c428d95c7c396d2dac0" - "977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2003200b29" - "0300224b3703002004200c290300224c370300200520022903800a224d37" - "03002007200a290300224e370300200820022903880a224f370300200620" - "092903002250370300200220022903880f22513703c80b20022002290380" - "0f22523703c00b201820503703002013204e3703002014204f3703002015" - "204d3703002016204b3703002017204c370300200220513703c804200220" - "523703c004200241c0056a20024180046a200241800d6a102f200b201629" - "0300370300200c2017290300370300200220022903c8043703880f200220" - "022903c0043703800f200241800f6a20022903c00520022903c805200229" - "03d005200241d8056a29030042c7faf3c3ed82a3903c428d95c7c396d2da" - "c0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20092018" - "290300370300200a2013290300370300200220142903003703880a200220" - "152903003703800a200241800a6a20022903e005200241e8056a29030020" - "022903f005200241f8056a29030042c7faf3c3ed82a3903c428d95c7c396" - "d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2003" - "200b290300224b3703002004200c290300224c370300200520022903800a" - "224d3703002007200a290300224e370300200820022903880a224f370300" - "200620092903002250370300200220022903880f22513703c80b20022002" - "2903800f22523703c00b201820503703002013204e3703002014204f3703" - "002015204d3703002016204b3703002017204c370300200220513703c804" - "200220523703c004200241c00b6a20024180046a20024180046a10302039" - "2006290300370300202f2007290300370300202e2008290300370300202d" - "2005290300370300202c2003290300370300201f20042903003703002002" - "20022903c80b37038804200220022903c00b3703800420024190066a2222" - "202029030037030020024198066a22332012290300370300200241a0066a" - "22342011290300370300200241a8066a22232010290300370300200241b0" - "066a2224200f290300370300200241b8066a2225200e2903003703002002" - "200129034037038006200220212903003703880620024180066a20014140" - "6b200141c0026a2230102f200241f8066a220d200e290300370300200241" - "f0066a220e200f290300370300200241e8066a220f201029030037030020" - "0241e0066a22102011290300370300200241d8066a221120122903003703" - "00200241d0066a22122020290300370300200220212903003703c8062002" - "20012903403703c006200241c0066a200220301030200241b8076a222020" - "38290300370300200241b0076a22212045290300370300200241a8076a22" - "352046290300370300200241a0076a223620472903003703002002419807" - "6a2237204829030037030020024190076a22382049290300370300200220" - "4a29030037038807200220012903c0023703800720024180076a20302002" - "41800d6a102f200241c00b6a20024180076a200210302020200629030037" - "030020212007290300370300203520082903003703002036200529030037" - "03002037200329030037030020382004290300370300200220022903c80b" - "37038807200220022903c00b37038007200241c00b6a200241c0066a2002" - "4180076a102f200d2006290300370300200e2007290300370300200f2008" - "290300370300201020052903003703002011200329030037030020122004" - "290300370300200220022903c80b3703c806200220022903c00b3703c006" - "200b2011290300370300200c2012290300370300200220022903c8063703" - "880f200220022903c0063703800f200241800f6a20022903800620022903" - "88062022290300203329030042c7faf3c3ed82a3903c428d95c7c396d2da" - "c0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2009200d" - "290300370300200a200e2903003703002002200f2903003703880a200220" - "102903003703800a200241800a6a20342903002023290300202429030020" - "2529030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858c" - "e8b691a8b87f42a9c0c689aece93b230102d2003200b290300224b370300" - "2004200c290300224c370300200520022903800a224d3703002007200a29" - "0300224e370300200820022903880a224f37030020062009290300225037" - "0300200220022903880f22513703c80b200220022903800f22523703c00b" - "200d2050370300200e204e370300200f204f3703002010204d3703002011" - "204b3703002012204c370300200220513703c806200220523703c0062002" - "41c0076a20024180066a200241800d6a102f200b2011290300370300200c" - "2012290300370300200220022903c8063703880f200220022903c0063703" - "800f200241800f6a20022903c00720022903c80720022903d007200241d8" - "076a29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb085" - "8ce8b691a8b87f42a9c0c689aece93b230102d2009200d29030037030020" - "0a200e2903003703002002200f2903003703880a20022010290300370380" - "0a200241800a6a20022903e007200241e8076a29030020022903f0072002" - "41f8076a29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42dd" - "b0858ce8b691a8b87f42a9c0c689aece93b230102d2003200b290300224b" - "3703002004200c290300224c370300200520022903800a224d3703002007" - "200a290300224e370300200820022903880a224f37030020062009290300" - "2250370300200220022903880f22513703c80b200220022903800f225237" - "03c00b200d2050370300200e204e370300200f204f3703002010204d3703" - "002011204b3703002012204c370300200220513703c806200220523703c0" - "06200241c00b6a20024180066a20024180066a1030202520062903003703" - "002024200729030037030020232008290300370300203420052903003703" - "002033200329030037030020222004290300370300200220022903c80b37" - "038806200220022903c00b370380062009201d290300370300200a201e29" - "0300370300200220022903c8023703880a200220022903c0023703800a20" - "0241800a6a2001290300203e290300203d290300203c29030042c7faf3c3" - "ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0" - "c689aece93b230102d200320192903003703002004201a29030037030020" - "02201b2903003703c80b2002201c2903003703c00b200241c00b6a203b29" - "0300203a2903002032290300203129030042c7faf3c3ed82a3903c428d95" - "c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b23010" - "2d200241d80d6a221c2009290300370300200241d00d6a221d200a290300" - "370300200241e00d6a221e20022903c00b370300200241e80d6a22202002" - "2903c80b370300200241f00d6a22212004290300370300200241f80d6a22" - "312003290300370300200220022903880a3703c80d200220022903800a37" - "03c00d200241c00b6a200241c00d6a200241c00d6a103020312006290300" - "3703002021200729030037030020202008290300370300201e2005290300" - "370300201c2003290300370300201d2004290300370300200220022903c8" - "0b3703c80d200220022903c00b3703c00d200241c00b6a200241c00d6a20" - "0241c0026a10302031200629030037030020212007290300370300202020" - "08290300370300201e2005290300370300201c2003290300370300201d20" - "0429030037030020024190086a2232202b29030037030020024198086a22" - "2b202a290300370300200241a0086a222a2029290300370300200241a808" - "6a22292028290300370300200241b0086a22282027290300370300200241" - "b8086a22272026290300370300200220022903c80b3703c80d2002200229" - "03c00b3703c00d2002200229038002370380082002200229038802370388" - "0820024180086a20024180026a20024180016a1030200241c00b6a200241" - "80086a20024180086a103020272006290300370300202820072903003703" - "0020292008290300370300202a2005290300370300202b20032903003703" - "0020322004290300370300200220022903c80b37038808200220022903c0" - "0b37038008200241c00b6a20024180086a20024180026a10302027200629" - "03003703002028200729030037030020292008290300370300202a200529" - "0300370300202b200329030037030020322004290300370300200241d008" - "6a22012022290300370300200241d8086a220b2033290300370300200241" - "e0086a220c2034290300370300200241e8086a2219202329030037030020" - "0241f0086a221a2024290300370300200241f8086a221b20252903003703" - "00200220022903c80b37038808200220022903c00b370380082002200229" - "0380063703c00820022002290388063703c808200241c0086a2002418006" - "6a200241800d6a102f200241c00b6a200241c0086a200241406b1030201b" - "2006290300370300201a200729030037030020192008290300370300200c" - "2005290300370300200b2003290300370300200120042903003703002002" - "20022903c80b3703c808200220022903c00b3703c008200241c00b6a2002" - "41c0086a200241c0086a1030201b2006290300370300201a200729030037" - "030020192008290300370300200c2005290300370300200b200329030037" - "030020012004290300370300200220022903c80b3703c808200220022903" - "c00b3703c00820024180096a20024180066a200241800d6a102f200241c0" - "0b6a200241c0086a20024180096a1030201b2006290300370300201a2007" - "29030037030020192008290300370300200c2005290300370300200b2003" - "29030037030020012004290300370300200220022903c80b3703c8082002" - "20022903c00b3703c00820092011290300370300200a2012290300370300" - "200220022903c8063703880a200220022903c0063703800a200241800a6a" - "205a20572059205842c7faf3c3ed82a3903c428d95c7c396d2dac0977f42" - "ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2003200d29030037" - "03002004200e2903003703002002200f2903003703c80b20022010290300" - "3703c00b200241c00b6a205420532056205542c7faf3c3ed82a3903c428d" - "95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230" - "102d200241980e6a220d2009290300370300200241900e6a220e200a2903" - "00370300200241a00e6a220f20022903c00b370300200241a80e6a221020" - "022903c80b370300200241b00e6a22112004290300370300200241b80e6a" - "22122003290300370300200220022903880a3703880e200220022903800a" - "3703800e200241c00b6a200241800e6a200241800e6a1030201220062903" - "003703002011200729030037030020102008290300370300200f20052903" - "00370300200d2003290300370300200e2004290300370300200220022903" - "c80b3703880e200220022903c00b3703800e200241c00b6a200241800e6a" - "200241c0066a103020122006290300370300201120072903003703002010" - "2008290300370300200f2005290300370300200d2003290300370300200e" - "2004290300370300200220022903c80b3703880e200220022903c00b3703" - "800e20092016290300370300200a2017290300370300200220022903c804" - "3703880a200220022903c0043703800a200241800a6a2002290300200229" - "03082044290300204329030042c7faf3c3ed82a3903c428d95c7c396d2da" - "c0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20032018" - "29030037030020042013290300370300200220142903003703c80b200220" - "152903003703c00b200241c00b6a20422903002041290300204029030020" - "3f29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858c" - "e8b691a8b87f42a9c0c689aece93b230102d200241d80e6a221820092903" - "00370300200241d00e6a2213200a290300370300200241e00e6a22142002" - "2903c00b370300200241e80e6a221520022903c80b370300200241f00e6a" - "22162004290300370300200241f80e6a2217200329030037030020022002" - "2903880a3703c80e200220022903800a3703c00e200241c00b6a200241c0" - "0e6a200241c00e6a10302017200629030037030020162007290300370300" - "201520082903003703002014200529030037030020182003290300370300" - "20132004290300370300200220022903c80b3703c80e200220022903c00b" - "3703c00e200241c00b6a200241c00e6a200241c0046a1030201720062903" - "003703002016200729030037030020152008290300370300201420052903" - "003703002018200329030037030020132004290300370300200241d0096a" - "2226201f290300370300200241d8096a221f202c290300370300200241e0" - "096a222c202d290300370300200241e8096a222d202e2903003703002002" - "41f0096a222e202f290300370300200241f8096a222f2039290300370300" - "200220022903c80b3703c80e200220022903c00b3703c00e200220022903" - "80043703c00920022002290388043703c809200241c0096a20024180046a" - "200241c0016a1030200241c00b6a200241c0096a200241c0096a1030202f" - "2006290300370300202e2007290300370300202d2008290300370300202c" - "2005290300370300201f2003290300370300202620042903003703002002" - "20022903c80b3703c809200220022903c00b3703c009200241c00b6a2002" - "41c0096a20024180046a1030202f2006290300370300202e200729030037" - "0300202d2008290300370300202c2005290300370300201f200329030037" - "030020262004290300370300200220022903c80b3703c809200220022903" - "c00b3703c009200241b80a6a2031290300370300200241b00a6a20212903" - "00370300200241a80a6a2020290300370300200241a00a6a201e29030037" - "03002009201c290300370300200a201d290300370300200220022903c80d" - "3703880a200220022903c00d3703800a200241c80a6a20022903c80e3703" - "00200241d00a6a2013290300370300200241d80a6a201829030037030020" - "0241e00a6a2014290300370300200241e80a6a2015290300370300200241" - "f00a6a2016290300370300200241f80a6a20172903003703002002200229" - "03c00e3703c00a200241b80b6a2012290300370300200241b00b6a201129" - "0300370300200241a80b6a2010290300370300200241a00b6a200f290300" - "370300200241980b6a200d290300370300200241900b6a200e2903003703" - "00200241880b6a20022903880e370300200220022903800e3703800b2006" - "201b2903003703002007201a290300370300200820192903003703002005" - "200c2903003703002003200b290300370300200420012903003703002002" - "20022903c8083703c80b200220022903c0083703c00b200241880c6a2002" - "29038808370300200241900c6a2032290300370300200241980c6a202b29" - "0300370300200241a00c6a202a290300370300200241a80c6a2029290300" - "370300200241b00c6a2028290300370300200241b80c6a20272903003703" - "0020022002290380083703800c200241f80c6a202f290300370300200241" - "f00c6a202e290300370300200241e80c6a202d290300370300200241e00c" - "6a202c290300370300200241d80c6a201f290300370300200241d00c6a20" - "26290300370300200241c80c6a20022903c809370300200220022903c009" - "3703c00c2000200241800a6a41c001104c41c0016a200241c00b6a41c001" - "104c1a200241a00f6a24000bcc1101047f23004180026b22032400024020" - "024101712206450440200341386a200141386a290300370300200341306a" - "200141306a290300370300200341286a200141286a290300370300200341" - "206a200141206a290300370300200341186a200141186a29030037030020" - "0341106a200141106a290300370300200320012903003703002003200141" - "086a29030037030820034190016a200141d0006a29030037030020034198" - "016a200141d8006a290300370300200341a0016a200141e0006a29030037" - "0300200341a8016a200141e8006a290300370300200341b0016a200141f0" - "006a290300370300200341b8016a200141f8006a29030037030020032001" - "290340370380012003200141c8006a290300370388010c010b200341d801" - "6a2204200141386a290300370300200341d0016a2205200141306a290300" - "370300200320012903203703c0012003200141286a2903003703c8012003" - "41c0016a42c6faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858c" - "e8b691a8b87f42a9c0c689aece93b23042c7faf3c3ed82a3903c428d95c7" - "c396d2dac0977f102b200341186a200141186a290300370300200341106a" - "200141106a290300370300200341286a20032903c801370300200341306a" - "2005290300370300200341386a20042903003703002003200141086a2903" - "0037030820032001290300370300200320032903c0013703202004200141" - "f8006a2903003703002005200141f0006a2903003703002003200141e800" - "6a2903003703c801200320012903603703c001200341c0016a42c6faf3c3" - "ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0" - "c689aece93b23042c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b" - "20034198016a200141d8006a29030037030020034190016a200141d0006a" - "290300370300200341a8016a20032903c801370300200341b0016a200529" - "0300370300200341b8016a20042903003703002003200141c8006a290300" - "370388012003200129034037038001200320032903c0013703a0010b0240" - "0240024002402002410670220441026b0e020102000b200342a0dcae8f86" - "aaf9e4163703f801200342948fe8babd91b3d2cb003703f001200342cebb" - "f2dbd0c38ad7323703e801200342a297bfa0c6a3f5b2163703e001200342" - "f7a3e4fb84f3d1d92f3703d801200342c3e2e6aacf87fb85cc003703d001" - "2003428ce68c968ce2b0c6b77f3703c801200342bdaabdbbf1aae5f1997f" - "3703c0010c020b200341e0016a22024200370300200241086a4200370300" - "200241106a4200370300200241186a4200370300200342a9c0c689aece93" - "b2303703d801200342b099b385febcf6b6de003703d001200342bddcd9dc" - "fbd3c1c7423703c801200342c8faf383d69cd1de643703c0010c010b2003" - "42efecc59e9bc8f7f8043703f801200342cf9298e1decdc3f9a97f3703f0" - "01200342b1ccfcc7f9b7ccef0f3703e801200342de8d96d5bae5aa863837" - "03e0012003428aded7ba8b8fb8ab083703d801200342accbfcacf98ec7ff" - "ba7f3703d001200342d385a5ebd5a7ffaf807f3703c801200342edf6f3de" - "87dd9bbafb003703c0010b20014180016a2102200341406b20034180016a" - "200341c0016a102f02402006450440200341b8016a200241386a29030037" - "0300200341b0016a200241306a290300370300200341a8016a200241286a" - "290300370300200341a0016a200241206a29030037030020034198016a20" - "0241186a29030037030020034190016a200241106a290300370300200320" - "02290300370380012003200241086a290300370388010c010b200341d801" - "6a2206200141b8016a290300370300200341d0016a2205200141b0016a29" - "0300370300200320012903a0013703c0012003200141a8016a2903003703" - "c801200341c0016a42c6faf3c3ed82a3903c428d95c7c396d2dac0977f42" - "ddb0858ce8b691a8b87f42a9c0c689aece93b23042c7faf3c3ed82a3903c" - "428d95c7c396d2dac0977f102b20034198016a200241186a290300370300" - "20034190016a200241106a290300370300200341a8016a20032903c80137" - "0300200341b0016a2005290300370300200341b8016a2006290300370300" - "2003200241086a2903003703880120032002290300370380012003200329" - "03c0013703a0010b0240024002400240200441026b0e020102000b200342" - "ee95f6bfbedb978a2c3703f80120034292b9acd88396a09d9f7f3703f001" - "200342e38efbdea1ddf4c2363703e801200342a682aee99ce2d19d413703" - "e00120034281d0baa7e6ebd3da053703d80120034284bde0d0f596f0f980" - "7f3703d001200342f2d8d3f4fbbed999533703c801200342e2cefa90d9ea" - "87c5847f3703c0010c020b200341e0016a22014200370300200141086a42" - "00370300200141106a4200370300200141186a4200370300200342003703" - "d801200342ac97d286eaf99af1d9003703d001200342cfb8ede69afe98f9" - "543703c801200342feffffbf97e6d1b1d7003703c0010c010b2003429294" - "c48c9eb3faea233703f80120034284bac8e6f0ddbdd87e3703f001200342" - "e5adfe9b87c1a7a5a47f3703e8012003429fc7b098d7b3fbf1df003703e0" - "01200342ab9b828ee18ce3e20b3703d801200342ce88c9adfb9eb8df1937" - "03d001200342cbd7c1add7a8c299663703c801200342e6e0afe6c3d7a48d" - "0e3703c0010b20004180016a20034180016a200341c0016a102f20004138" - "6a200341386a290300370300200041306a200341306a2903003703002000" - "41286a200341286a290300370300200041206a200341206a290300370300" - "200041186a200341186a290300370300200041106a200341106a29030037" - "0300200041086a2003290308370300200020032903003703002000200329" - "0340370340200041c8006a2003290348370300200041d0006a200341d000" - "6a290300370300200041d8006a200341d8006a290300370300200041e000" - "6a200341e0006a290300370300200041e8006a200341e8006a2903003703" - "00200041f0006a200341f0006a290300370300200041f8006a200341f800" - "6a29030037030020034180026a24000bbd46027c7f107e230041e00b6b22" - "052400200541b8016a2234200141b8016a2235290300370300200541b001" - "6a2236200141b0016a2237290300370300200541a8016a2238200141a801" - "6a2239290300370300200541a0016a223a200141a0016a223b2903003703" - "0020054198016a223c20014198016a223d29030037030020054190016a22" - "3e20014190016a223f290300370300200541d0016a222e200141d0016a22" - "4f290300370300200541d8016a222f200141d8016a225029030037030020" - "0541e0016a2230200141e0016a2251290300370300200541e8016a223120" - "0141e8016a2252290300370300200541f0016a2232200141f0016a225329" - "0300370300200541f8016a2233200141f8016a2254290300370300200520" - "012903800137038001200520012903c0013703c001200520014188016a22" - "40290300370388012005200141c8016a22552903003703c801200541b802" - "6a2256200141f8026a2220290300370300200541b0026a2257200141f002" - "6a2221290300370300200541a8026a2258200141e8026a22282903003703" - "00200541a0026a2259200141e0026a222929030037030020054198026a22" - "5a200141d8026a222a29030037030020054190026a225b200141d0026a22" - "2b290300370300200541d0026a2241200141106a22062903003703002005" - "41d8026a2242200141186a2207290300370300200541e0026a2243200141" - "206a2208290300370300200541e8026a2244200141286a22092903003703" - "00200541f0026a2245200141306a220a290300370300200541f8026a2246" - "200141386a220b2903003703002005200141c8026a222c29030037038802" - "200520012903c00237038002200520012903003703c0022005200141086a" - "220c2903003703c802200541c0026a20012002102f200541b8036a225c20" - "35290300370300200541b0036a225d2037290300370300200541a8036a22" - "5e2039290300370300200541a0036a225f203b2903003703002005419803" - "6a2260203d29030037030020054190036a2261203f290300370300200520" - "402903003703880320052001290380013703800320054180036a20014180" - "016a220d2004102f200541f8036a2262200141b8026a2903003703002005" - "41f0036a2263200141b0026a290300370300200541e8036a2264200141a8" - "026a290300370300200541e0036a2265200141a0026a2903003703002005" - "41d8036a226620014198026a290300370300200541d0036a226720014190" - "026a290300370300200520014188026a2903003703c80320052001290380" - "023703c003200541c0036a20014180026a22472003102f200541b8046a22" - "68200b290300370300200541b0046a2269200a290300370300200541a804" - "6a226a2009290300370300200541a0046a226b2008290300370300200541" - "98046a226c200729030037030020054190046a226d200629030037030020" - "05200c29030037038804200520012903003703800420054180046a200120" - "471030200541f8046a226e200b290300370300200541f0046a226f200a29" - "0300370300200541e8046a22702009290300370300200541e0046a227120" - "08290300370300200541d8046a22722007290300370300200541d0046a22" - "7320062903003703002005200c2903003703c804200520012903003703c0" - "04200541c0046a2001200d1030200541b8056a2248200141f8006a221229" - "0300370300200541b0056a2249200141f0006a2213290300370300200541" - "a8056a224a200141e8006a2214290300370300200541a0056a224b200141" - "e0006a221529030037030020054198056a224c200141d8006a221c290300" - "37030020054190056a224d200141d0006a221d2903003703002005200141" - "c8006a221e29030037038805200520012903403703800520054180056a20" - "0141406b221f200141c0016a22741030200541c0096a20054180056a2001" - "41c0026a222d10302048200541f8096a220c2903003703002049200541f0" - "096a220d290300370300204a200541e8096a220e290300370300204b2005" - "41e0096a220f290300370300204c200541d8096a2210290300370300204d" - "200541d0096a2211290300370300200520052903c8093703880520052005" - "2903c00937038005200541d0056a2222201d290300370300200541d8056a" - "2223201c290300370300200541e0056a22242015290300370300200541e8" - "056a22252014290300370300200541f0056a222620132903003703002005" - "41f8056a22272012290300370300200520012903403703c0052005201e29" - "03003703c805200541c0056a201f2004102f200541b8066a221620272903" - "00370300200541b0066a22172026290300370300200541a8066a22182025" - "290300370300200541a0066a2219202429030037030020054198066a221a" - "202329030037030020054190066a221b2022290300370300200520052903" - "c80537038806200520052903c0053703800620054180066a200541c0056a" - "200541c0036a1030200542003703b80b200542003703b00b200542003703" - "a80b200542013703a00b200542003703980b200542003703900b20054200" - "3703880b200542093703800b200541c0096a20054180066a200541800b6a" - "102f2016200c2903003703002017200d2903003703002018200e29030037" - "03002019200f290300370300201a2010290300370300201b201129030037" - "0300200520052903c80937038806200520052903c00937038006200541c0" - "096a20054180066a200541c0026a10302016200c29030022810137030020" - "17200d2903002282013703002018200e2903002283013703002019200f29" - "0300228401370300201a2010290300228501370300201b20112903002286" - "01370300200541106a2275208601370300200541186a2276208501370300" - "200541206a2277208401370300200541286a227820830137030020054130" - "6a2279208201370300200541386a227a208101370300200520052903c809" - "22810137038806200520052903c009228201370380062005208201370300" - "2005208101370308200541f8066a22062020290300370300200541f0066a" - "22072021290300370300200541e8066a22082028290300370300200541e0" - "066a22092029290300370300200541d8066a220a202a2903003703002005" - "41d0066a220b202b2903003703002005202c2903003703c8062005200129" - "03c0023703c006200541c0066a202d2003102f200541c0096a200541c005" - "6a200541c0066a10302027200c2903003703002026200d29030037030020" - "25200e2903003703002024200f2903003703002023201029030037030020" - "222011290300370300200520052903c8093703c805200520052903c00937" - "03c005200541c0096a200541c0066a20054180036a10302006200c290300" - "2281013703002007200d2903002282013703002008200e29030022830137" - "03002009200f290300228401370300200a2010290300228501370300200b" - "2011290300228601370300201b208601370300201a208501370300201920" - "840137030020182083013703002017208201370300201620810137030020" - "0520052903c8092281013703c806200520052903c0092282013703c00620" - "052082013703800620052081013703880620054180066a200541c0066a20" - "0541800b6a102f2006201229030037030020072013290300370300200820" - "1429030037030020092015290300370300200a201c290300370300200b20" - "1d2903003703002005201e2903003703c806200520012903403703c00620" - "0541c0066a201f2002102f200541c0096a200541c0056a200541c0066a10" - "302027200c2903003703002026200d2903003703002025200e2903003703" - "002024200f29030037030020232010290300370300202220112903003703" - "00200520052903c8093703c805200520052903c0093703c005200541c009" - "6a20054180066a200541c0066a10302016200c2903002281013703002017" - "200d2903002282013703002018200e2903002283013703002019200f2903" - "00228401370300201a2010290300228501370300201b2011290300228601" - "370300200541d0006a227b208601370300200541d8006a227c2085013703" - "00200541e0006a227d208401370300200541e8006a227e20830137030020" - "0541f0006a227f208201370300200541f8006a2280012081013703002005" - "20052903c80922810137038806200520052903c009228201370380062005" - "2082013703402005208101370348200541b8076a221c200241386a222829" - "0300370300200541b0076a221d200241306a2229290300370300200541a8" - "076a221e200241286a222a290300370300200541a0076a221f200241206a" - "222b29030037030020054198076a2220200241186a222c29030037030020" - "054190076a2221200241106a222d2903003703002005200241086a224e29" - "030037038807200520022903003703800720054180076a20022004103020" - "06206e2903003703002007206f2903003703002008207029030037030020" - "092071290300370300200a2072290300370300200b207329030037030020" - "0520052903c8043703c806200520052903c0043703c006200541c0066a20" - "0541c0046a20054180076a102f200541d80b6a2214200a29030037030020" - "0541d00b6a2215200b290300370300200520052903c8063703c80b200520" - "052903c0063703c00b200541c00b6a20052903c00220052903c802204129" - "0300204229030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42dd" - "b0858ce8b691a8b87f42a9c0c689aece93b230102d20054198086a221220" - "0629030037030020054190086a2213200729030037030020052008290300" - "37038808200520092903003703800820054180086a204329030020442903" - "002045290300204629030042c7faf3c3ed82a3903c428d95c7c396d2dac0" - "977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2010201429" - "030022810137030020112015290300228201370300200f20052903800822" - "8301370300200d2013290300228401370300200e20052903880822850137" - "0300200c2012290300228601370300200520052903c80b2287013703c809" - "200520052903c00b2288013703c009200620860137030020072084013703" - "0020082085013703002009208301370300200a208101370300200b208201" - "37030020052087013703c80620052088013703c0062014200a2903003703" - "002015200b290300370300200520052903c8063703c80b200520052903c0" - "063703c00b200541c00b6a20052903800322810120052903880322820120" - "61290300228301206029030022840142c7faf3c3ed82a3903c428d95c7c3" - "96d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20" - "122006290300370300201320072903003703002005200829030037038808" - "200520092903003703800820054180086a205f290300228501205e290300" - "228601205d290300228701205c29030022880142c7faf3c3ed82a3903c42" - "8d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b2" - "30102d2010201429030022890137030020112015290300228a0137030020" - "0f200529038008228b01370300200d2013290300228c01370300200e2005" - "29038808228d01370300200c2012290300228e01370300200520052903c8" - "0b228f013703c809200520052903c00b2290013703c0092006208e013703" - "002007208c013703002008208d013703002009208b01370300200a208901" - "370300200b208a013703002005208f013703c80620052090013703c00620" - "162054290300370300201720532903003703002018205229030037030020" - "192051290300370300201a2050290300370300201b204f29030037030020" - "05205529030037038806200520012903c0013703800620054180066a2074" - "2003102f200541c0096a200541c0056a20054180066a10302027200c2903" - "003703002026200d2903003703002025200e2903003703002024200f2903" - "003703002023201029030037030020222011290300370300200520052903" - "c8093703c805200520052903c0093703c005200541c0096a200541c0066a" - "20054180066a10302006200c2903003703002007200d2903003703002008" - "200e2903003703002009200f290300370300200a2010290300370300200b" - "2011290300370300200520052903c8093703c806200520052903c0093703" - "c0062021203f2903003703002020203d290300370300201f203b29030037" - "0300201e2039290300370300201d2037290300370300201c203529030037" - "030020052001290380013703800720052040290300370388072005418007" - "6a20054180016a2047103020342006290300370300203620072903003703" - "0020382008290300370300203a2009290300370300203c200a2903003703" - "00203e200b290300370300200541d0076a200441106a2903003703002005" - "41d8076a200441186a290300370300200541e0076a200441206a29030037" - "0300200541e8076a200441286a290300370300200541f0076a200441306a" - "290300370300200541f8076a200441386a290300370300200520052903c8" - "0637038801200520052903c00637038001200520042903003703c0072005" - "200441086a2903003703c807200541c0076a2004200310302006201c2903" - "003703002007201d2903003703002008201e2903003703002009201f2903" - "00370300200a2020290300370300200b2021290300370300200520052903" - "88073703c80620052005290380073703c006200541c0066a20054180076a" - "200541c0076a102f2014200a2903003703002015200b2903003703002005" - "20052903c8063703c80b200520052903c0063703c00b200541c00b6a2081" - "0120820120830120840142c7faf3c3ed82a3903c428d95c7c396d2dac097" - "7f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d201220062903" - "003703002013200729030037030020052008290300370388082005200929" - "03003703800820054180086a20850120860120870120880142c7faf3c3ed" - "82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c6" - "89aece93b230102d20102014290300228101370300201120152903002282" - "01370300200f200529038008228301370300200d20132903002284013703" - "00200e200529038808228501370300200c20122903002286013703002005" - "20052903c80b2287013703c809200520052903c00b2288013703c0092006" - "208601370300200720840137030020082085013703002009208301370300" - "200a208101370300200b20820137030020052087013703c8062005208801" - "3703c0062014200a2903003703002015200b290300370300200520052903" - "c8063703c80b200520052903c0063703c00b200541c00b6a20052903c003" - "22810120052903c8032282012067290300228301206629030022840142c7" - "faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f" - "42a9c0c689aece93b230102d201220062903003703002013200729030037" - "03002005200829030037038808200520092903003703800820054180086a" - "206529030022850120642903002286012063290300228701206229030022" - "880142c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b6" - "91a8b87f42a9c0c689aece93b230102d2010201429030022890137030020" - "112015290300228a01370300200f200529038008228b01370300200d2013" - "290300228c01370300200e200529038808228d01370300200c2012290300" - "228e01370300200520052903c80b228f013703c809200520052903c00b22" - "90013703c0092006208e013703002007208c013703002008208d01370300" - "2009208b01370300200a208901370300200b208a013703002005208f0137" - "03c80620052090013703c006201620062903003703002017200729030037" - "03002018200829030037030020192009290300370300201a200a29030037" - "0300201b200b290300370300200520052903c80637038806200520052903" - "c0063703800620054180066a200541c0066a200541800b6a102f20062033" - "290300370300200720322903003703002008203129030037030020092030" - "290300370300200a202f290300370300200b202e29030037030020052005" - "2903c8013703c806200520052903c0013703c006200541c0066a200541c0" - "016a2002102f200541c0096a200541c0056a200541c0066a10302027200c" - "2903003703002026200d2903003703002025200e2903003703002024200f" - "290300370300202320102903003703002022201129030037030020052005" - "2903c8093703c805200520052903c0093703c005200541c0096a20054180" - "066a200541c0066a10302016200c2903002289013703002017200d290300" - "228a013703002018200e290300228b013703002019200f290300228c0137" - "0300201a2010290300228d01370300201b2011290300228e01370300202e" - "208e01370300202f208d013703002030208c013703002031208b01370300" - "2032208a013703002033208901370300200520052903c809228901370388" - "06200520052903c009228a01370380062005208a013703c0012005208901" - "3703c8012006205629030037030020072057290300370300200820582903" - "0037030020092059290300370300200a205a290300370300200b205b2903" - "0037030020052005290388023703c80620052005290380023703c0062005" - "41c0066a20054180026a2004102f200541c0096a200541c0056a200541c0" - "066a10302027200c2903003703002026200d2903003703002025200e2903" - "003703002024200f29030037030020232010290300370300202220112903" - "00370300201b200b290300370300201a200a290300370300201920092903" - "003703002018200829030037030020172007290300370300201620062903" - "00370300200520052903c8093703c805200520052903c0093703c0052005" - "20052903c00637038006200520052903c8063703880620054180066a2005" - "41c0066a200541800b6a102f201c2028290300370300201d202929030037" - "0300201e202a290300370300201f202b2903003703002020202c29030037" - "03002021202d2903003703002005204e2903003703880720052002290300" - "3703800720054180076a2002200310302006206829030037030020072069" - "2903003703002008206a2903003703002009206b290300370300200a206c" - "290300370300200b206d29030037030020052005290388043703c8062005" - "2005290380043703c006200541c0066a20054180046a20054180076a102f" - "2014200a2903003703002015200b290300370300200520052903c8063703" - "c80b200520052903c0063703c00b200541c00b6a20052903c00220052903" - "c8022041290300204229030042c7faf3c3ed82a3903c428d95c7c396d2da" - "c0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20122006" - "290300370300201320072903003703002005200829030037038808200520" - "092903003703800820054180086a20432903002044290300204529030020" - "4629030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858c" - "e8b691a8b87f42a9c0c689aece93b230102d201020142903002289013703" - "0020112015290300228a01370300200f200529038008228b01370300200d" - "2013290300228c01370300200e200529038808228d01370300200c201229" - "0300228e01370300200520052903c80b228f013703c809200520052903c0" - "0b2290013703c0092006208e013703002007208c013703002008208d0137" - "03002009208b01370300200a208901370300200b208a013703002005208f" - "013703c80620052090013703c0062014200a2903003703002015200b2903" - "00370300200520052903c8063703c80b200520052903c0063703c00b2005" - "41c00b6a20810120820120830120840142c7faf3c3ed82a3903c428d95c7" - "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d" - "201220062903003703002013200729030037030020052008290300370388" - "08200520092903003703800820054180086a208501208601208701208801" - "42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8" - "b87f42a9c0c689aece93b230102d20102014290300228101370300201120" - "15290300228201370300200f200529038008228301370300200d20132903" - "00228401370300200e200529038808228501370300200c20122903002286" - "01370300200520052903c80b2287013703c809200520052903c00b228801" - "3703c0092006208601370300200720840137030020082085013703002009" - "208301370300200a208101370300200b20820137030020052087013703c8" - "0620052088013703c006200541c0096a20054180066a200541c0066a1030" - "2016200c2903003703002017200d2903003703002018200e290300370300" - "2019200f290300370300201a2010290300370300201b2011290300370300" - "200520052903c80937038806200520052903c009370380062021202d2903" - "003703002020202c290300370300201f202b290300370300201e202a2903" - "00370300201d2029290300370300201c2028290300370300200520022903" - "00370380072005204e2903003703880720054180076a2002200410302005" - "41c0096a20054180076a20031030201c200c290300370300201d200d2903" - "00370300201e200e290300370300201f200f290300370300202020102903" - "0037030020212011290300370300200b204d290300370300200a204c2903" - "003703002009204b2903003703002008204a290300370300200720492903" - "0037030020062048290300370300200520052903c8093703880720052005" - "2903c0093703800720052005290380053703c00620052005290388053703" - "c806200541c0066a20054180056a20054180076a102f2014200a29030037" - "03002015200b290300370300200520052903c8063703c80b200520052903" - "c0063703c00b200541c00b6a20052903c00520052903c805202229030020" - "2329030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858c" - "e8b691a8b87f42a9c0c689aece93b230102d201220062903003703002013" - "200729030037030020052008290300370388082005200929030037038008" - "20054180086a202429030020252903002026290300202729030042c7faf3" - "c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9" - "c0c689aece93b230102d2010201429030022810137030020112015290300" - "228201370300200f200529038008228301370300200d2013290300228401" - "370300200e200529038808228501370300200c2012290300228601370300" - "200520052903c80b2287013703c809200520052903c00b2288013703c009" - "200620860137030020072084013703002008208501370300200920830137" - "0300200a208101370300200b20820137030020052087013703c806200520" - "88013703c006200541b8086a207a290300370300200541b0086a20792903" - "00370300200541a8086a2078290300370300200541a0086a207729030037" - "030020122076290300370300201320752903003703002005200529030837" - "0388082005200529030037038008200541c8086a20052903483703002005" - "41d0086a207b290300370300200541d8086a207c290300370300200541e0" - "086a207d290300370300200541e8086a207e290300370300200541f0086a" - "207f290300370300200541f8086a20800129030037030020052005290340" - "3703c008200541b8096a2034290300370300200541b0096a203629030037" - "0300200541a8096a2038290300370300200541a0096a203a290300370300" - "20054198096a203c29030037030020054190096a203e2903003703002005" - "4188096a200529038801370300200520052903800137038009200c203329" - "0300370300200d2032290300370300200e2031290300370300200f203029" - "03003703002010202f2903003703002011202e2903003703002005200529" - "03c8013703c809200520052903c0013703c009200541880a6a2005290388" - "06370300200541900a6a201b290300370300200541980a6a201a29030037" - "0300200541a00a6a2019290300370300200541a80a6a2018290300370300" - "200541b00a6a2017290300370300200541b80a6a20162903003703002005" - "2005290380063703800a200541f80a6a2006290300370300200541f00a6a" - "2007290300370300200541e80a6a2008290300370300200541e00a6a2009" - "290300370300200541d80a6a200a290300370300200541d00a6a200b2903" - "00370300200541c80a6a20052903c806370300200520052903c0063703c0" - "0a200020054180086a41c001104c41c0016a200541c0096a41c001104c1a" - "200541e00b6a24000ba21d02297f0d7e23004180066b2203240020034180" - "046a20014180016a22162002102f20034198036a2204200141186a220c29" - "030037030020034190036a2205200141106a220d29030037030020032001" - "41086a220f29030037038803200320012903003703800320034180036a20" - "032903800420032903880420032903900420034198046a220929030042c7" - "faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f" - "42a9c0c689aece93b230102d200341d8036a2206200141386a2210290300" - "370300200341d0036a2207200141306a2211290300370300200320014128" - "6a22122903003703c8032003200141206a22172903003703c003200341c0" - "036a20032903a004200341a8046a220a29030020032903b004200341b804" - "6a220b29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0" - "858ce8b691a8b87f42a9c0c689aece93b230102d200341186a220e200429" - "0300370300200341106a22082005290300370300200341206a2213200329" - "03c003370300200341286a221420032903c803370300200341306a221520" - "07290300370300200341386a221820062903003703002003200329038803" - "370308200320032903800337030020034180046a2016200241406b221f10" - "2f2004200141d8006a22202903003703002005200141d0006a2221290300" - "3703002003200141c8006a22222903003703880320032001290340370380" - "0320034180036a2003290380042003290388042003290390042009290300" - "42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8" - "b87f42a9c0c689aece93b230102d2006200141f8006a2223290300370300" - "2007200141f0006a22242903003703002003200141e8006a222529030037" - "03c8032003200141e0006a22262903003703c003200341c0036a20032903" - "a004200a29030020032903b004200b29030042c7faf3c3ed82a3903c428d" - "95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230" - "102d200341d8006a22192004290300370300200341d0006a221a20052903" - "00370300200341e0006a221b20032903c003370300200341e8006a221c20" - "032903c803370300200341f0006a221d2007290300370300200341f8006a" - "221e20062903003703002003200329038803370348200320032903800337" - "0340200341f8046a2018290300370300200341f0046a2015290300370300" - "200341e8046a2014290300370300200341e0046a20132903003703002003" - "41d8046a200e290300370300200341d0046a200829030037030020032003" - "2903083703c804200320032903003703c004200341c0046a20032003102f" - "200341b8056a201e290300370300200341b0056a201d2903003703002003" - "41a8056a201c290300370300200341a0056a201b29030037030020034198" - "056a201929030037030020034190056a201a290300370300200320032903" - "4837038805200320032903403703800520034180056a200341406b200341" - "406b102f20034180016a2003200341c0046a102f200341c0016a20012003" - "41c0046a102f20034180046a201620034180056a102f200341c0036a2003" - "4180046a20034180016a103020034180046a200341c0016a200341c0016a" - "1030200341d8026a220e2006290300370300200341d0026a220820072903" - "00370300200320032903c8033703c802200320032903c0033703c0022003" - "41c0026a200329038004200329038804200329039004200929030042c7fa" - "f3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42" - "a9c0c689aece93b230102d2004200341f8036a2213290300370300200520" - "0341f0036a22142903003703002003200341e8036a221529030037038803" - "200320032903e0033703800320034180036a20032903a004200a29030020" - "032903b004200b29030042c7faf3c3ed82a3903c428d95c7c396d2dac097" - "7f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20034198026a" - "2218200e29030037030020034190026a22272008290300370300200341a8" - "026a2228200329038803370300200341b0026a2229200529030037030020" - "0341b8026a222a2004290300370300200320032903c80237038802200320" - "032903c0023703800220032003290380033703a00220034180046a200320" - "034180026a102f2010200b2903003703002011200341b0046a2210290300" - "3703002012200a2903003703002017200341a0046a222b29030037030020" - "0c2009290300370300200d20034190046a2211290300370300200f200329" - "03880437030020012003290380043703002004200341d8016a2903003703" - "002005200341d0016a290300370300200320032903c80137038803200320" - "032903c0013703800320034180036a200329038002200329038802202729" - "0300201829030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42dd" - "b0858ce8b691a8b87f42a9c0c689aece93b230102d2006200341f8016a29" - "03003703002007200341f0016a2903003703002003200341e8016a290300" - "3703c803200320032903e0013703c003200341c0036a20032903a0022028" - "2903002029290300202a29030042c7faf3c3ed82a3903c428d95c7c396d2" - "dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200920" - "0429030037030020112005290300370300200a20032903c8033703002010" - "2007290300370300200b2006290300370300200320032903880337038804" - "200320032903800337038004200320032903c0033703a004200341c0036a" - "200341406b20034180046a102f20034180046a20034180016a200141406b" - "102f200341f8056a220c2006290300370300200341f0056a220d20072903" - "00370300200320032903c8033703e805200320032903c0033703e0052003" - "41e0056a200329038004200329038804200329039004200929030042c7fa" - "f3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42" - "a9c0c689aece93b230102d200e2013290300370300200820142903003703" - "00200320152903003703c802200320032903e0033703c002200341c0026a" - "20032903a004200a29030020032903b004200b29030042c7faf3c3ed82a3" - "903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689ae" - "ce93b230102d2004200c2903003703002005200d290300370300200341a0" - "036a221720032903c002370300200341a8036a220f20032903c802370300" - "200341b0036a22122008290300370300200341b8036a2208200e29030037" - "0300200320032903e80537038803200320032903e0053703800320232008" - "290300370300202420122903003703002025200f29030037030020262017" - "290300370300202020042903003703002021200529030037030020222003" - "29038803370300200120032903800337034020034180046a201620034180" - "016a102f200141b8016a200b290300370300200141b0016a201029030037" - "0300200141a8016a200a290300370300200141a0016a202b290300370300" - "20014198016a200929030037030020014190016a20112903003703002001" - "4188016a2003290388043703002001200329038004370380012003420037" - "03f802200342003703f002200342003703e802200342013703e002200342" - "003703d802200342003703d002200342003703c802200342093703c00220" - "0341c0036a200341406b2002102f20034180046a2003201f102f200341d8" - "056a22012006290300370300200341d0056a220620072903003703002003" - "20032903c8033703c805200320032903c0033703c005200341c0056a2003" - "29038004200329038804200329039004200929030042c7faf3c3ed82a390" - "3c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece" - "93b230102d200c2013290300370300200d20142903003703002003201529" - "03003703e805200320032903e0033703e005200341e0056a20032903a004" - "200a29030020032903b004200b29030042c7faf3c3ed82a3903c428d95c7" - "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d" - "2004200129030037030020052006290300370300200f20032903e8053703" - "002012200d2903003703002008200c290300370300200320032903c80537" - "038803200320032903c00537038003200320032903e0053703a003200341" - "80046a200341c0026a20034180036a102f201e2903002136201d29030021" - "34201c290300212d201b2903002135201a29030022302003290340223184" - "201929030022382003290348223284844200520440427f4200427f420020" - "3142788342c7faf3c3ed82a3903c561b222e202e203254ad7d202e20327d" - "222e42f3eab8bce9ada5bfe8007d2237202e54ad7c42017c223320307d22" - "2f42a4cffaf397c9eed7c7007d222e202f54ad2030203356ad7d427f511b" - "20387d42a9c0c689aece93b2307c213342c7faf3c3ed82a3903c20317d21" - "2f0b4200213042002131420021322034203584202d203684844200520440" - "427f4200427f4200203542788342c7faf3c3ed82a3903c561b222c202c20" - "2d54ad7d202c202d7d222d42f3eab8bce9ada5bfe8007d2230202d54ad7c" - "42017c222d20347d222c42a4cffaf397c9eed7c7007d2231202c54ad202d" - "203454ad7d427f511b20367d42a9c0c689aece93b2307c213242c7faf3c3" - "ed82a3903c20357d212c0b20002003290380043703002000200329030037" - "0340200041086a200329038804370300200041c8006a2003290308370300" - "200041386a200341b8046a290300370300200041306a200341b0046a2903" - "00370300200041286a200341a8046a290300370300200041206a200341a0" - "046a290300370300200041186a20034198046a290300370300200041106a" - "20034190046a290300370300200041d0006a200341106a29030037030020" - "0041d8006a200341186a290300370300200041e0006a200341206a290300" - "370300200041e8006a200341286a290300370300200041f0006a20034130" - "6a290300370300200041f8006a200341386a290300370300200020323703" - "b801200020313703b001200020303703a8012000202c3703a00120002033" - "370398012000202e3703900120002037370388012000202f370380012003" - "4180066a24000b4201047f412021020240034020002d0000220320012d00" - "002204460440200041016a2100200141016a2101200241016b22020d010c" - "020b0b200320046b21050b20050b8a0301047f0240200141104904402000" - "21020c010b02402000410020006b41037122046a220320004d0d00200021" - "0220040440200421050340200241003a0000200241016a2102200541016b" - "22050d000b0b200441016b4107490d000340200241003a0000200241076a" - "41003a0000200241066a41003a0000200241056a41003a0000200241046a" - "41003a0000200241036a41003a0000200241026a41003a0000200241016a" - "41003a0000200241086a22022003470d000b0b2003200120046b2201417c" - "716a220220034b0440034020034100360200200341046a22032002490d00" - "0b0b200141037121010b02402002200120026a22054f0d00200141016b21" - "042001410771220304400340200241003a0000200241016a210220034101" - "6b22030d000b0b20044107490d000340200241003a0000200241076a4100" - "3a0000200241066a41003a0000200241056a41003a0000200241046a4100" - "3a0000200241036a41003a0000200241026a41003a0000200241016a4100" - "3a0000200241086a22022005470d000b0b20000b940501087f0240200241" - "10490440200021030c010b02402000410020006b41037122066a22052000" - "4d0d00200641016b21082000210320012104200604402006210703402003" - "20042d00003a0000200441016a2104200341016a2103200741016b22070d" - "000b0b20084107490d000340200320042d00003a0000200341016a200441" - "016a2d00003a0000200341026a200441026a2d00003a0000200341036a20" - "0441036a2d00003a0000200341046a200441046a2d00003a000020034105" - "6a200441056a2d00003a0000200341066a200441066a2d00003a00002003" - "41076a200441076a2d00003a0000200441086a2104200341086a22032005" - "470d000b0b2005200220066b2207417c7122086a21030240200120066a22" - "04410371450440200320054d0d0120042101034020052001280200360200" - "200141046a2101200541046a22052003490d000b0c010b200320054d0d00" - "2004410374220241187121062004417c71220941046a2101410020026b41" - "1871210a2009280200210203402005200220067620012802002202200a74" - "72360200200141046a2101200541046a22052003490d000b0b2007410371" - "2102200420086a21010b02402003200220036a22054f0d00200241016b21" - "072002410771220404400340200320012d00003a0000200141016a210120" - "0341016a2103200441016b22040d000b0b20074107490d00034020032001" - "2d00003a0000200341016a200141016a2d00003a0000200341026a200141" - "026a2d00003a0000200341036a200141036a2d00003a0000200341046a20" - "0141046a2d00003a0000200341056a200141056a2d00003a000020034106" - "6a200141066a2d00003a0000200341076a200141076a2d00003a00002001" - "41086a2101200341086a22032005470d000b0b20000b6201047e20002002" - "42ffffffff0f832203200142ffffffff0f8322047e220520024220882202" - "20047e22042003200142208822017e7c22034220867c2206370300200020" - "05200656ad200120027e2003200454ad4220862003422088847c7c370308" - "0b5601017e0240200341c000714504402003450d012002410020036b413f" - "71ad8620012003413f71ad220488842101200220048821020c010b200220" - "03413f71ad882101420021020b20002001370300200020023703080b5a01" - "027e420121020240200141c000714504402001450d0142002001413f71ad" - "2202864201410020016b413f71ad88842103420120028621020c010b4201" - "2001413f71ad862103420021020b20002002370300200020033703080b0b" - "e1250100418080c0000bd725307830306165613865396338336337336437" - "343033363932336465316234613636643138353437643538656565346561" - "6366656537303233356564323931393534636361706163697479206f7665" - "72666c6f77004200100011000000010000000000000063616c6c65642060" - "4f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e656020" - "76616c7565696e646578206f7574206f6620626f756e64733a2074686520" - "6c656e20697320206275742074686520696e646578206973200000008f00" - "100020000000af001000120000003a2000000100000000000000d4001000" - "020000003030303130323033303430353036303730383039313031313132" - "313331343135313631373138313932303231323232333234323532363237" - "323832393330333133323333333433353336333733383339343034313432" - "343334343435343634373438343935303531353235333534353535363537" - "353835393630363136323633363436353636363736383639373037313732" - "373337343735373637373738373938303831383238333834383538363837" - "38383839393039313932393339343935393639373938393972616e676520" - "737461727420696e64657820206f7574206f662072616e676520666f7220" - "736c696365206f66206c656e67746820b001100012000000c20110002200" - "000072616e676520656e6420696e64657820f401100010000000c2011000" - "22000000736c69636520696e646578207374617274732061742020627574" - "20656e6473206174200014021000160000002a0210000d00000054726965" - "6420746f20736872696e6b20746f2061206c617267657220636170616369" - "74794802100024000000f40a10004c000000b3020000090000002f686f6d" - "652f6f706964736b6f706e79692f2e636172676f2f72656769737472792f" - "7372632f696e6465782e6372617465732e696f2d31393439636638633662" - "3562353537662f6e756d2d626967696e742d302e342e362f7372632f6269" - "6775696e742e72732f686f6d652f6f706964736b6f706e79692f2e636172" - "676f2f72656769737472792f7372632f696e6465782e6372617465732e69" - "6f2d313934396366386336623562353537662f6e756d2d626967696e742d" - "302e342e362f7372632f62696775696e742f6164646974696f6e2e727300" - "0000ea0210006f000000890000001b000000a80c10006f00000057000000" - "09000000a80c10006f000000a3000000090000008402100066000000ad00" - "000013000000a80c10006f000000c40000001f000000a80c10006f000000" - "150100000e000000a80c10006f000000160100000e000000a80c10006f00" - "00001a0100000f000000a80c10006f000000510100000c000000a80c1000" - "6f0000002001000021000000a80c10006f0000002101000018000000a80c" - "10006f000000420100003c000000040c10006e0000006d0200000d000000" - "040c10006e00000066020000110000002f686f6d652f6f706964736b6f70" - "6e79692f2e636172676f2f72656769737472792f7372632f696e6465782e" - "6372617465732e696f2d313934396366386336623562353537662f6e756d" - "2d626967696e742d302e342e362f7372632f62696775696e742f73686966" - "742e72733c0410006c0000001e0000001c0000003c0410006c0000002e00" - "0000120000003c0410006c00000028000000190000002f72757374632f34" - "656231363132353065333430633866343866363665326239323965663461" - "3562656437633138312f6c6962726172792f636f72652f7372632f736c69" - "63652f697465722e72732f686f6d652f6f706964736b6f706e79692f2e63" - "6172676f2f72656769737472792f7372632f696e6465782e637261746573" - "2e696f2d313934396366386336623562353537662f6865782d302e342e33" - "2f7372632f6c69622e7273000000260510005b000000c700000025000000" - "260510005b000000c7000000410000004e6f744d656d626572496e76616c" - "6964536c6963654c656e677468496e76616c696455353132456e636f6469" - "6e6700000000000067e6096a85ae67bb72f36e3c3af54fa57f520e518c68" - "059babd9831f19cde05bd80410004e000000f605000015000000496e7661" - "6c696420636f6d7072657373656420706f696e7420666c61670000000806" - "10001d0000002f686f6d652f6f706964736b6f706e79692f2e636172676f" - "2f72656769737472792f7372632f696e6465782e6372617465732e696f2d" - "313934396366386336623562353537662f7370312d76657269666965722d" - "342e312e332f7372632f636f6e7374616e74732e72730000300610006a00" - "00001f000000120000002f686f6d652f6f706964736b6f706e79692f2e63" - "6172676f2f72656769737472792f7372632f696e6465782e637261746573" - "2e696f2d313934396366386336623562353537662f7370312d7665726966" - "6965722d342e312e332f7372632f636f6e7665727465722e727300000000" - "00000100000001000000060000004661696c656420746f20636f6e766572" - "74207820627974657320746f20467100ac0610006a0000001f0000003700" - "00002f686f6d652f6f706964736b6f706e79692f2e636172676f2f726567" - "69737472792f7372632f696e6465782e6372617465732e696f2d31393439" - "6366386336623562353537662f7370312d76657269666965722d342e312e" - "332f7372632f67726f746831362f636f6e7665727465722e727300005807" - "100072000000290000003e00000058071000720000002a0000003d000000" - "58071000720000002b0000003e00000058071000720000002c0000003e00" - "000058071000720000002e0000002500000058071000720000002e000000" - "3200000058071000720000002e0000003f00000058071000720000002e00" - "00004c0000005807100072000000320000003f0000005807100072000000" - "330000000b0000002f686f6d652f6f706964736b6f706e79692f2e636172" - "676f2f72656769737472792f7372632f696e6465782e6372617465732e69" - "6f2d313934396366386336623562353537662f7370312d76657269666965" - "722d342e312e332f7372632f67726f746831362f7665726966792e727300" - "6c0810006f0000002d000000160000002f686f6d652f6f706964736b6f70" - "6e79692f2e636172676f2f72656769737472792f7372632f696e6465782e" - "6372617465732e696f2d313934396366386336623562353537662f737031" - "2d76657269666965722d342e312e332f7372632f67726f746831362f6d6f" - "642e7273ec0810006c0000006d00000044000000ad4d9aa7e302d9df4174" - "9d5507949d05dbea33fbb16c643b22f599a2be6df2e2e1a1575c2e494d36" - "13e95e43b622318d9225c820e46acd08e8c987b44051195bc967032fcbf7" - "76d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847" - "ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab998e" - "9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2" - "1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992" - "f6edc980d3486a83b99e6c876acec4d309746e28cd96fa8e01864daa8459" - "9384f354a62eabe81511aa8e3034cbd75d42e708aa4ed80303fb0e4fb90c" - "d0ff6e9092132b65c9ae2605f3ef5540d3a64503c84fe5e1d9ec6eb1bd3a" - "906bbc80830e8e5400000003ced6e0c13f353262ae2dbbe49ce6a0b67576" - "d38aaf5958564be7648356830ef7db611b8f696f28ffb6250c7ffac66efb" - "d638d97f0d6c843c23691c3af532c9e3a974086bde6c91267b201137cfe6" - "ee8cd50ff0a3da861e808503e7df4da87b8d00000000000000002f727573" - "74632f346562313631323530653334306338663438663636653262393239" - "656634613562656437633138312f6c6962726172792f616c6c6f632f7372" - "632f7261775f7665632e7273f40a10004c00000028020000110000002f72" - "7573742f646570732f646c6d616c6c6f632d302e322e372f7372632f646c" - "6d616c6c6f632e7273617373657274696f6e206661696c65643a20707369" - "7a65203e3d2073697a65202b206d696e5f6f7665726865616400500b1000" - "29000000a804000009000000617373657274696f6e206661696c65643a20" - "7073697a65203c3d2073697a65202b206d61785f6f766572686561640000" - "500b100029000000ae0400000d0000000000000004000000000000002f68" - "6f6d652f6f706964736b6f706e79692f2e636172676f2f72656769737472" - "792f7372632f696e6465782e6372617465732e696f2d3139343963663863" - "36623562353537662f6e756d2d626967696e742d302e342e362f7372632f" - "62696775696e742f636f6e766572742e72730000040c10006e000000f001" - "000016000000617474656d707420746f20646976696465206279207a6572" - "6f000000840c1000190000002f686f6d652f6f706964736b6f706e79692f" - "2e636172676f2f72656769737472792f7372632f696e6465782e63726174" - "65732e696f2d313934396366386336623562353537662f6e756d2d626967" - "696e742d302e342e362f7372632f62696775696e742f6469766973696f6e" - "2e727300a80c10006f00000070000000090000004f6e63652070616e6963" - "6b65642f686f6d652f6f706964736b6f706e79692f2e636172676f2f7265" - "6769737472792f7372632f696e6465782e6372617465732e696f2d313934" - "396366386336623562353537662f7370696e2d302e392e382f7372632f6f" - "6e63652e72730000350d10005d000000e60000002a0000004f6e63652070" - "726576696f75736c7920706f69736f6e656420627920612070616e69636b" - "65640000350d10005d0000004e010000250000002f72757374632f346562" - "313631323530653334306338663438663636653262393239656634613562" - "656437633138312f6c6962726172792f616c6c6f632f7372632f736c6963" - "652e72730000dc0d10004a000000a10000001900000063616c6c65642060" - "526573756c743a3a756e77726170282960206f6e20616e20604572726020" - "76616c75652f686f6d652f6f706964736b6f706e79692f2e636172676f2f" - "72656769737472792f7372632f696e6465782e6372617465732e696f2d31" - "3934396366386336623562353537662f7375627374726174652d626e2d73" - "756363696e63742d302e362e302d76342d72632e382f7372632f6669656c" - "64732f66702e72730000630e10007b000000e9020000230000004661696c" - "656420746f20636f6d707574652074686520696e7665727365206f662074" - "68652064697669736f722f686f6d652f6f706964736b6f706e79692f2e63" - "6172676f2f72656769737472792f7372632f696e6465782e637261746573" - "2e696f2d313934396366386336623562353537662f737562737472617465" - "2d626e2d73756363696e63742d302e362e302d76342d72632e382f737263" - "2f6669656c64732f6671322e72731c0f10007c000000430100000e000000" - "000000000100000001000000070000002f686f6d652f6f706964736b6f70" - "6e79692f2e636172676f2f72656769737472792f7372632f696e6465782e" - "6372617465732e696f2d313934396366386336623562353537662f737562" - "7374726174652d626e2d73756363696e63742d302e362e302d76342d7263" - "2e382f7372632f67726f7570732f6d6f642e7273b80f10007c000000b100" - "00002c000000556e61626c6520746f20636f6e7665727420473120746f20" - "416666696e654731b80f10007c0000000001000012000000b80f10007c00" - "00002001000012000000b80f10007c000000400100000d000000b80f1000" - "7c0000006b01000029000000010001000000030003000000030001000300" - "000300000000000100000300010000030000000003000100000003000300" - "00010000000300000300010001000000b80f10007c000000150300002600" - "0000b80f10007c0000001003000026000000b80f10007c00000008030000" - "2e000000b80f10007c000000020300002a000000b80f10007c0000009b03" - "000010000000b80f10007c0000009c03000010000000b80f10007c000000" - "8f03000014000000b80f10007c0000009203000018000000b80f10007c00" - "000095030000180000006d696c6c6572206c6f6f702063616e6e6f742070" - "726f64756365207a65726f00b80f10007c000000221100000a000000b80f" - "10007c000000191100002a000000b80f10007c0000001911000017000000" - "b80f10007c0000001a1100002e000000b80f10007c0000001a1100001b00" - "00002f686f6d652f6f706964736b6f706e79692f2e636172676f2f726567" - "69737472792f7372632f696e6465782e6372617465732e696f2d31393439" - "6366386336623562353537662f7375627374726174652d626e2d73756363" - "696e63742d302e362e302d76342d72632e382f7372632f6c69622e727300" - "0000e4111000750000003b0300000c000000e4111000750000003c030000" - "0c0000004e6f744f6e43757276654e6f74496e53756267726f7570496e76" - "616c6964496e7075744c656e677468000000120000001300000009000000" - "ad051000bf051000a40510000a0000000d000000120000007c1210008612" - "1000931210004d0970726f64756365727302086c616e6775616765010452" - "757374000c70726f6365737365642d6279010572757374631d312e38352e" - "31202834656231363132353020323032352d30332d31352900490f746172" - "6765745f6665617475726573042b0f6d757461626c652d676c6f62616c73" - "2b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d" - "756c746976616c7565"; - -extern std::string const ledgerSqnWasmHex = - "0061736d010000000108026000017f60000002160103656e760e6765745f6c65646765725f" - "73716e000003030201000503010002063e0a7f004180080b7f004180080b7f004180100b7f" - "004180100b7f00418090040b7f004180080b7f00418090040b7f00418080080b7f0041000b" - "7f0041010b07b0010d066d656d6f72790200115f5f7761736d5f63616c6c5f63746f727300" - "010666696e69736800020362756603000c5f5f64736f5f68616e646c6503010a5f5f646174" - "615f656e6403020b5f5f737461636b5f6c6f7703030c5f5f737461636b5f6869676803040d" - "5f5f676c6f62616c5f6261736503050b5f5f686561705f6261736503060a5f5f686561705f" - "656e6403070d5f5f6d656d6f72795f6261736503080c5f5f7461626c655f6261736503090a" - "150202000b1001017f100022004100200041044b1b0b007f0970726f647563657273010c70" - "726f6365737365642d62790105636c616e675f31392e312e352d776173692d73646b202868" - "747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a6563742061" - "62346235613264623538323935386166316565333038613739306366646234326264323437" - "32302900490f7461726765745f6665617475726573042b0f6d757461626c652d676c6f6261" - "6c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976" - "616c7565"; - -extern std::string const allHostFunctionsWasmHex = - "0061736d0100000001540c60047f7f7f7f017f60027f7f017f60037f7f7f017f60057f7f7f" - "7f7f017f6000017f60017f017f60037f7f7f0060037f7f7e017f60087f7f7f7f7f7f7f7f01" - "7f60067f7f7f7f7f7f017f60017f0060027f7f0002ae061a08686f73745f6c69620c676574" - "5f74785f6669656c64000208686f73745f6c69620974726163655f6e756d000708686f7374" - "5f6c6962057472616365000308686f73745f6c69620e6765745f6c65646765725f73716e00" - "0408686f73745f6c6962166765745f706172656e745f6c65646765725f74696d6500040868" - "6f73745f6c6962166765745f706172656e745f6c65646765725f68617368000108686f7374" - "5f6c69620d74726163655f6163636f756e74000008686f73745f6c6962136765745f74785f" - "6e65737465645f6669656c64000008686f73745f6c6962106765745f74785f61727261795f" - "6c656e000508686f73745f6c6962176765745f74785f6e65737465645f61727261795f6c65" - "6e000108686f73745f6c69621c6765745f63757272656e745f6c65646765725f6f626a5f66" - "69656c64000208686f73745f6c6962236765745f63757272656e745f6c65646765725f6f62" - "6a5f6e65737465645f6669656c64000008686f73745f6c6962206765745f63757272656e74" - "5f6c65646765725f6f626a5f61727261795f6c656e000508686f73745f6c6962276765745f" - "63757272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e0001" - "08686f73745f6c69620e6163636f756e745f6b65796c6574000008686f73745f6c69621063" - "616368655f6c65646765725f6f626a000208686f73745f6c6962146765745f6c6564676572" - "5f6f626a5f6669656c64000008686f73745f6c69621b6765745f6c65646765725f6f626a5f" - "6e65737465645f6669656c64000308686f73745f6c6962186765745f6c65646765725f6f62" - "6a5f61727261795f6c656e000108686f73745f6c69621f6765745f6c65646765725f6f626a" - "5f6e65737465645f61727261795f6c656e000208686f73745f6c69621163726564656e7469" - "616c5f6b65796c6574000808686f73745f6c69620d657363726f775f6b65796c6574000308" - "686f73745f6c69620d6f7261636c655f6b65796c6574000308686f73745f6c696213636f6d" - "707574655f7368613531325f68616c66000008686f73745f6c6962076765745f6e66740009" - "08686f73745f6c69620b7570646174655f64617461000103060506060a0b04050301001106" - "19037f01418080c0000b7f0041af99c0000b7f0041b099c0000b072e04066d656d6f727902" - "000666696e697368001e0a5f5f646174615f656e6403010b5f5f686561705f626173650302" - "0a801c051900200241094f0440000b20002002360204200020013602000b1900200241214f" - "0440000b20002002360204200020013602000b970101057f230041206b2201240020014118" - "6a22044100360200200141106a220542003703002001420037030802404181802020014108" - "6a4114100022034114470440024020034100480440200020033602040c010b2000417f3602" - "040b410121020c010b20002001290308370001200041116a2004280200360000200041096a" - "20052903003700000b200020023a0000200141206a24000b450020012d0000450440200020" - "01290001370000200041106a200141116a280000360000200041086a200141096a29000037" - "00000f0b418080c000410b20013402041001000bea1901097f230041b0036b22002400418b" - "80c000411b41004100410010021a41a680c000411941004100410010021a41e780c000412b" - "41004100410010021a027f02400240024002400240024002401003220141004a0440419281" - "c00041172001ad10011a1004220141004c0d0141a981c00041132001ad10011a200041c801" - "6a22034200370300200041c0016a22054200370300200041b8016a22044200370300200042" - "003703b001200041b0016a22064120100522014120470d0241bc81c0004113200641204101" - "10021a41cf81c000412041004100410010021a41dc82c000412e41004100410010021a2000" - "41a0016a410036020020004198016a42003703002000420037039001418180202000419001" - "6a22024114100022014114470d03418a83c00041142002411410061a200042003703704188" - "8018200041f0006a22024108100022014108470d04419e83c0004117420810011a41b583c0" - "00412820024108410110021a2000410036025041848008200041d0006a2202410410002201" - "4104470d0541dd83c000411520024104410110021a200041013b003c200342003703002005" - "420037030020044200370300200042003703b00102402000413c6a41022006412010072201" - "41004e044041f283c00041142001ad10011a200041306a20062001101b418684c000410d20" - "002802302000280234410110021a0c010b419384c00041292001ac10011a0b41bc84c00041" - "154183803c1008ac10011a41d184c00041134189803c1008ac10011a02402000413c6a4102" - "1009220141004e044041e484c00041142001ad10011a0c010b41f884c000412d2001ac1001" - "1a0b41a585c000412341004100410010021a41de86c000413341004100410010021a200042" - "0037037041828018200041f0006a22014108100a220241004c0d0620024108460440419187" - "c000412b420810011a41bc87c000412f20014108410110021a0c080b41eb87c000412f2002" - "ad10011a200041286a200041f0006a2002101a419a88c00041172000280228200028022c41" - "0110021a0c070b41bf82c000411d2001ac10011a419b7f0c070b419a82c00041252001ac10" - "011a419a7f0c060b41ef81c000412b2001ac10011a41997f0c050b41b486c000412a2001ac" - "10011a41b77e0c040b41f385c00041c1002001ac10011a41b67e0c030b41c885c000412b20" - "01ac10011a41b57e0c020b41b188c00041c5002002ac10011a0b200041a0016a4100360200" - "20004198016a4200370300200042003703900102404181802020004190016a22024114100a" - "220141004a044041f688c000411e2002411410061a0c010b419489c00041332001ac10011a" - "0b200041013b0050200041c8016a4200370300200041c0016a4200370300200041b8016a42" - "00370300200042003703b0010240200041d0006a4102200041b0016a22014120100b220241" - "004e044041c789c000411c2002ad10011a200041206a20012002101b41e389c00041152000" - "2802202000280224410110021a0c010b41f889c00041392002ac10011a0b41b18ac0004124" - "4183803c100cac10011a0240200041d0006a4102100d220141004e044041d58ac000411c20" - "01ad10011a0c010b41f18ac000413d2001ac10011a0b41ae8bc00041284100410041001002" - "1a41d68bc000412f41004100410010021a200041b0016a2202101c200041f0006a22012002" - "101d200041a8016a4200370300200041a0016a420037030020004198016a42003703002000" - "420037039001024002400240024002402001411420004190016a22024120100e2201412046" - "0440200241204100100f220441004a044041858cc00041232004ad10011a20004200370350" - "200441828018200041d0006a220141081010220241004c0d022002410846044041a88cc000" - "412a420810011a41d28cc000412e20014108410110021a0c060b41808dc000412e2002ad10" - "011a200041186a200041d0006a2002101a41ae8dc00041162000280218200028021c410110" - "021a0c050b41e68fc000413c2004ac10011a200041c8016a4200370300200041c0016a4200" - "370300200041b8016a4200370300200042003703b001410141828018200041b0016a412010" - "1022014100480d020c030b41ba92c000412e2001ac10011a41ef7c0c050b41c48dc000412b" - "2002ac10011a0c020b41a290c00041c1002001ac10011a0b200041013b00504101200041d0" - "006a4102200041b0016a412010112201410048044041e390c00041352001ac10011a0b4101" - "4183803c101222014100480440419891c00041322001ac10011a0b4101200041d0006a4102" - "10132201410048044041ca91c00041392001ac10011a0b418392c000413741004100410010" - "021a0c010b200041013b003c200041c8016a4200370300200041c0016a4200370300200041" - "b8016a4200370300200042003703b001024020042000413c6a4102200041b0016a22014120" - "1011220241004e044041ef8dc000411b2002ad10011a200041106a20012002101b418a8ec0" - "00411420002802102000280214410110021a0c010b419e8ec00041312002ac10011a0b41cf" - "8ec000412320044183803c1012ac10011a024020042000413c6a41021013220141004e0440" - "41f28ec000411b2001ad10011a0c010b418d8fc00041352001ac10011a0b41c28fc0004124" - "41004100410010021a0b41e892c000412f41004100410010021a200041b0016a2201101c20" - "00413c6a22042001101d200041e8006a4200370300200041e0006a4200370300200041d800" - "6a42003703002000420037035002400240024002400240024020044114200041d0006a2202" - "4120100e22014120460440419793c000410f20024120410110021a20004188016a42003703" - "0020004180016a4200370300200041f8006a42003703002000420037037002402004411420" - "04411441a693c0004109200041f0006a220141201014220241004a0440200041086a200120" - "02101b41ae93c00041122000280208200028020c410110021a0c010b41c093c000413c2002" - "ac10011a0b200041a8016a22084200370300200041a0016a2203420037030020004198016a" - "2205420037030020004200370390012000413c6a2202411441e80720004190016a22074120" - "101522014120470d0141fc93c000410e20074120410110021a200041c8016a420037030020" - "0041c0016a4200370300200041b8016a4200370300200042003703b00120024114412a2000" - "41b0016a22044120101622014120470d02418a94c000410e20044120410110021a419894c0" - "00412441004100410010021a419195c000412541004100410010021a20004188016a420037" - "030020004180016a4200370300200041f8006a42003703002000420037037041b695c00041" - "17200041f0006a22024120101722014120470d0341cd95c000410b41b695c0004117410110" - "021a41d895c000411120024120410110021a2004101c200041d0006a22062004101d200842" - "00370300200342003703002005420037030020004200370390010240200422032003410020" - "036b41037122026a22054f0d0020020440200221010340200341003a0000200341016a2103" - "200141016b22010d000b0b200241016b4107490d000340200341003a0000200341076a4100" - "3a0000200341066a41003a0000200341056a41003a0000200341046a41003a000020034103" - "6a41003a0000200341026a41003a0000200341016a41003a0000200341086a22032005470d" - "000b0b200541800220026b2201417c716a220320054b044003402005410036020020054104" - "6a22052003490d000b0b024020032001410371220120036a22024f0d002001220504400340" - "200341003a0000200341016a2103200541016b22050d000b0b200141016b4107490d000340" - "200341003a0000200341076a41003a0000200341066a41003a0000200341056a41003a0000" - "200341046a41003a0000200341036a41003a0000200341026a41003a0000200341016a4100" - "3a0000200341086a22032002470d000b0b0240200641142007412020044180021018220141" - "004a044041e995c00041102001ad10011a20014181024f0d0641f995c00041092004200141" - "0110021a0c010b418296c000412e2001ac10011a0b41b096c000411241c296c00041074101" - "100222014100480d0541c996c000411d2001ad10011a41e696c0004111422a10014100480d" - "0641f796c000411c420010011a419397c000411a41004100410010021a41ff97c000412941" - "004100410010021a41a898c00041281019220145044041d098c000412741a898c000412841" - "0110021a41f798c000411e41004100410010021a41bf80c000412841004100410010021a41" - "010c080b419599c000411a2001ac10011a41c37a0c070b41f494c000411d2001ac10011a41" - "8b7c0c060b41d894c000411c2001ac10011a41897c0c050b41bc94c000411c2001ac10011a" - "41887c0c040b41dd97c00041222001ac10011a41a77b0c030b000b41c797c00041162001ac" - "10011a41a57b0c010b41ad97c000411a42a47b10011a41a47b0b200041b0036a24000b0bb9" - "190100418080c0000baf196572726f725f636f64653d3d3d3d20484f53542046554e435449" - "4f4e532054455354203d3d3d54657374696e6720323620686f73742066756e6374696f6e73" - "535543434553533a20416c6c20686f73742066756e6374696f6e2074657374732070617373" - "6564212d2d2d2043617465676f727920313a204c6564676572204865616465722046756e63" - "74696f6e73202d2d2d4c65646765722073657175656e6365206e756d6265723a506172656e" - "74206c65646765722074696d653a506172656e74206c656467657220686173683a53554343" - "4553533a204c6564676572206865616465722066756e6374696f6e734552524f523a206765" - "745f706172656e745f6c65646765725f686173682077726f6e67206c656e6774683a455252" - "4f523a206765745f706172656e745f6c65646765725f74696d65206661696c65643a455252" - "4f523a206765745f6c65646765725f73716e206661696c65643a2d2d2d2043617465676f72" - "7920323a205472616e73616374696f6e20446174612046756e6374696f6e73202d2d2d5472" - "616e73616374696f6e204163636f756e743a5472616e73616374696f6e20466565206c656e" - "6774683a5472616e73616374696f6e20466565202873657269616c697a6564205852502061" - "6d6f756e74293a5472616e73616374696f6e2053657175656e63653a4e6573746564206669" - "656c64206c656e6774683a4e6573746564206669656c643a494e464f3a206765745f74785f" - "6e65737465645f6669656c64206e6f74206170706c696361626c653a5369676e6572732061" - "72726179206c656e6774683a4d656d6f73206172726179206c656e6774683a4e6573746564" - "206172726179206c656e6774683a494e464f3a206765745f74785f6e65737465645f617272" - "61795f6c656e206e6f74206170706c696361626c653a535543434553533a205472616e7361" - "6374696f6e20646174612066756e6374696f6e734552524f523a206765745f74785f666965" - "6c642853657175656e6365292077726f6e67206c656e6774683a4552524f523a206765745f" - "74785f6669656c6428466565292077726f6e67206c656e6774682028657870656374656420" - "3820627974657320666f7220585250293a4552524f523a206765745f74785f6669656c6428" - "4163636f756e74292077726f6e67206c656e6774683a2d2d2d2043617465676f727920333a" - "2043757272656e74204c6564676572204f626a6563742046756e6374696f6e73202d2d2d43" - "757272656e74206f626a6563742062616c616e6365206c656e677468202858525020616d6f" - "756e74293a43757272656e74206f626a6563742062616c616e6365202873657269616c697a" - "65642058525020616d6f756e74293a43757272656e74206f626a6563742062616c616e6365" - "206c656e67746820286e6f6e2d58525020616d6f756e74293a43757272656e74206f626a65" - "63742062616c616e63653a494e464f3a206765745f63757272656e745f6c65646765725f6f" - "626a5f6669656c642842616c616e636529206661696c656420286d61792062652065787065" - "63746564293a43757272656e74206c6564676572206f626a656374206163636f756e743a49" - "4e464f3a206765745f63757272656e745f6c65646765725f6f626a5f6669656c6428416363" - "6f756e7429206661696c65643a43757272656e74206e6573746564206669656c64206c656e" - "6774683a43757272656e74206e6573746564206669656c643a494e464f3a206765745f6375" - "7272656e745f6c65646765725f6f626a5f6e65737465645f6669656c64206e6f7420617070" - "6c696361626c653a43757272656e74206f626a656374205369676e65727320617272617920" - "6c656e6774683a43757272656e74206e6573746564206172726179206c656e6774683a494e" - "464f3a206765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f617272" - "61795f6c656e206e6f74206170706c696361626c653a535543434553533a2043757272656e" - "74206c6564676572206f626a6563742066756e6374696f6e732d2d2d2043617465676f7279" - "20343a20416e79204c6564676572204f626a6563742046756e6374696f6e73202d2d2d5375" - "636365737366756c6c7920636163686564206f626a65637420696e20736c6f743a43616368" - "6564206f626a6563742062616c616e6365206c656e677468202858525020616d6f756e7429" - "3a436163686564206f626a6563742062616c616e6365202873657269616c697a6564205852" - "5020616d6f756e74293a436163686564206f626a6563742062616c616e6365206c656e6774" - "6820286e6f6e2d58525020616d6f756e74293a436163686564206f626a6563742062616c61" - "6e63653a494e464f3a206765745f6c65646765725f6f626a5f6669656c642842616c616e63" - "6529206661696c65643a436163686564206e6573746564206669656c64206c656e6774683a" - "436163686564206e6573746564206669656c643a494e464f3a206765745f6c65646765725f" - "6f626a5f6e65737465645f6669656c64206e6f74206170706c696361626c653a4361636865" - "64206f626a656374205369676e657273206172726179206c656e6774683a43616368656420" - "6e6573746564206172726179206c656e6774683a494e464f3a206765745f6c65646765725f" - "6f626a5f6e65737465645f61727261795f6c656e206e6f74206170706c696361626c653a53" - "5543434553533a20416e79206c6564676572206f626a6563742066756e6374696f6e73494e" - "464f3a2063616368655f6c65646765725f6f626a206661696c656420286578706563746564" - "20776974682074657374206669787475726573293a494e464f3a206765745f6c6564676572" - "5f6f626a5f6669656c64206661696c656420617320657870656374656420286e6f20636163" - "686564206f626a656374293a494e464f3a206765745f6c65646765725f6f626a5f6e657374" - "65645f6669656c64206661696c65642061732065787065637465643a494e464f3a20676574" - "5f6c65646765725f6f626a5f61727261795f6c656e206661696c6564206173206578706563" - "7465643a494e464f3a206765745f6c65646765725f6f626a5f6e65737465645f6172726179" - "5f6c656e206661696c65642061732065787065637465643a535543434553533a20416e7920" - "6c6564676572206f626a6563742066756e6374696f6e732028696e74657266616365207465" - "73746564294552524f523a206163636f756e745f6b65796c6574206661696c656420666f72" - "2063616368696e6720746573743a2d2d2d2043617465676f727920353a204b65796c657420" - "47656e65726174696f6e2046756e6374696f6e73202d2d2d4163636f756e74206b65796c65" - "743a546573745479706543726564656e7469616c206b65796c65743a494e464f3a20637265" - "64656e7469616c5f6b65796c6574206661696c656420286578706563746564202d20696e74" - "657266616365206973737565293a457363726f77206b65796c65743a4f7261636c65206b65" - "796c65743a535543434553533a204b65796c65742067656e65726174696f6e2066756e6374" - "696f6e734552524f523a206f7261636c655f6b65796c6574206661696c65643a4552524f52" - "3a20657363726f775f6b65796c6574206661696c65643a4552524f523a206163636f756e74" - "5f6b65796c6574206661696c65643a2d2d2d2043617465676f727920363a205574696c6974" - "792046756e6374696f6e73202d2d2d48656c6c6f2c205852504c205741534d20776f726c64" - "21496e70757420646174613a5348413531322068616c6620686173683a4e46542064617461" - "206c656e6774683a4e465420646174613a494e464f3a206765745f6e6674206661696c6564" - "20286578706563746564202d206e6f2073756368204e4654293a5465737420747261636520" - "6d6573736167657061796c6f616454726163652066756e6374696f6e206279746573207772" - "697474656e3a54657374206e756d62657220747261636554726163655f6e756d2066756e63" - "74696f6e20737563636565646564535543434553533a205574696c6974792066756e637469" - "6f6e734552524f523a2074726163655f6e756d2829206661696c65643a4552524f523a2074" - "726163652829206661696c65643a4552524f523a20636f6d707574655f7368613531325f68" - "616c66206661696c65643a2d2d2d2043617465676f727920373a2044617461205570646174" - "652046756e6374696f6e73202d2d2d55706461746564206c656467657220656e7472792064" - "6174612066726f6d205741534d20746573745375636365737366756c6c7920757064617465" - "64206c656467657220656e74727920776974683a535543434553533a204461746120757064" - "6174652066756e6374696f6e734552524f523a207570646174655f64617461206661696c65" - "643a004d0970726f64756365727302086c616e6775616765010452757374000c70726f6365" - "737365642d6279010572757374631d312e38352e3120283465623136313235302032303235" - "2d30332d31352900490f7461726765745f6665617475726573042b0f6d757461626c652d67" - "6c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d75" - "6c746976616c7565"; - -extern std::string const deepRecursionHex = - "0061736d01000000013f0b60017f0060037f7f7f017f60027f7f017f60027f" - "7f0060000060037f7f7f006000017f60037e7f7f017f60047f7f7f7f017f60" - "017f017f60047f7f7f7f00032f2e0302040400030501030302020600030302" - "0700080301050202020404090202000a0a0102020403030300000a03010405" - "017001101005030100110619037f01418080c0000b7f0041b49ac0000b7f00" - "41c09ac0000b073905066d656d6f7279020005726563757200000972656375" - "7273697665000c0a5f5f646174615f656e6403010b5f5f686561705f626173" - "6503020915010041010b0f010a0b1e10171819262c1d1f2223240a927c2ea7" - "0704017f017e027f017e23808080800041e0006b2202248080808000200220" - "003602040240200041004c0d002001200128020041016a3602002000417f6a" - "20011080808080000b2002410236020c2002418480c0800036020820024201" - "37021420024181808080003602242002200241206a3602102002200241046a" - "3602202002410636022c2002419490c08000360228024041002d00c096c080" - "004103460d001082808080000b0240024002400240024041002903a89ac080" - "0022034200520d00024041002802b09ac0800022000d001083808080004100" - "2802b09ac0800021000b20002000280200220141016a3602002001417f4c0d" - "012000450d02200020002802002201417f6a36020020002903082103200141" - "01470d0020001084808080000b0240024002402003410029039896c0800051" - "0d0041002d00a496c08000210141012100410041013a00a496c08000200220" - "013a00382001450d012002420037025420024281808080c00037024c200241" - "bc91c08000360248200241386a200241c8006a108580808000000b02404100" - "2802a096c080002200417f460d00200041016a21000c020b419c92c0800041" - "2641e092c08000108680808000000b4100200337039896c080000b41002000" - "3602a096c080002002419896c0800036023041042100200241043a00382002" - "200241306a360240200241386a41c085c08000200241086a10878080800021" - "0120022d003821040240024020010d00420021034117200441ff0171764101" - "710d01200228023c220028020021010240200041046a280200220428020022" - "05450d002001200511808080800080808080000b024020042802042204450d" - "00200120041088808080000b2000410c108880808000410421000c010b2004" - "41ff01714104460d032002290338220642807e8321032006a721000b200228" - "023022012001280208417f6a2204360208024020040d00200141003a000c20" - "0142003703000b200041ff01714104470d03200241e0006a2480808080000f" - "0b000b418087c0800041de0041f487c08000108680808000000b2002410036" - "02582002410136024c2002418491c0800036024820024204370250200241c8" - "006a418c91c08000108980808000000b200220032000ad42ff018384370330" - "2002410236024c200241f48fc0800036024820024202370254200241828080" - "8000ad422086200241306aad843703402002418380808000ad422086200241" - "286aad843703382002200241386a360250200241c8006a418490c080001089" - "80808000000b2701017f200028020022002000411f7522027320026bad2000" - "417f73411f7620011091808080000bf10101027f23808080800041206b2200" - "248080808000024002400240024041002d00c096c080000e0400000301000b" - "410041023a00c096c0800041002d009096c080001a418008109c8080800022" - "01450d01410041033a00c096c08000410020013602b096c080004100428080" - "80808080013703a896c080004100420037039896c08000410041003a00b896" - "c08000410041003602b496c08000410041003a00a496c08000410041003602" - "a096c080000b200041206a2480808080000f0b000b20004100360218200041" - "0136020c200041bc93c0800036020820004204370210200041086a418c92c0" - "8000108980808000000bf90103027f037e017f23808080800041206b220024" - "808080800041002d009096c080001a0240024002404120109c808080002201" - "450d0020014102360210200142818080801037030041002903d096c0800021" - "0203402002427f510d024100200242017c220341002903d096c08000220420" - "0420025122051b3703d096c08000200421022005450d000b410020033703a8" - "9ac080002001200337030841002802b09ac08000450d022000410036021820" - "00410136020c200041c484c0800036020820004204370210200041086a419c" - "85c080001089808080000b000b109b80808000000b410020013602b09ac080" - "00200041206a2480808080000b5b01027f024020002802104101470d002000" - "280214220141003a000020002802182202450d00200120021088808080000b" - "02402000417f460d00200020002802042201417f6a36020420014101470d00" - "200041201088808080000b0b3a01017f23808080800041106b220224808080" - "8000200241ac85c0800036020c20022000360208200241086a2002410c6a20" - "01109680808000000b6a01017f23808080800041306b220324808080800020" - "03200136020c2003200036020820034101360214200341d488c08000360210" - "2003420137021c2003418380808000ad422086200341086aad843703282003" - "200341286a360218200341106a2002108980808000000bbf05010a7f238080" - "80800041306b2203248080808000200341033a002c2003412036021c410021" - "04200341003602282003200136022420032000360220200341003602142003" - "410036020c02400240024002400240200228021022050d00200228020c2200" - "450d0120022802082101200041037421062000417f6a41ffffffff01714101" - "6a21042002280200210003400240200041046a2802002207450d0020032802" - "2020002802002007200328022428020c11818080800080808080000d040b20" - "012802002003410c6a200128020411828080800080808080000d0320014108" - "6a2101200041086a2100200641786a22060d000c020b0b2002280214220145" - "0d00200141057421082001417f6a41ffffff3f7141016a2104200228020821" - "09200228020021004100210603400240200041046a2802002201450d002003" - "28022020002802002001200328022428020c11818080800080808080000d03" - "0b2003200520066a220141106a28020036021c20032001411c6a2d00003a00" - "2c2003200141186a2802003602282001410c6a28020021074100210a410021" - "0b024002400240200141086a2802000e03010002010b2007410374210c4100" - "210b2009200c6a220c2802040d01200c28020021070b4101210b0b20032007" - "3602102003200b36020c200141046a28020021070240024002402001280200" - "0e03010002010b2007410374210b2009200b6a220b2802040d01200b280200" - "21070b4101210a0b200320073602182003200a3602142009200141146a2802" - "004103746a22012802002003410c6a20012802041182808080008080808000" - "0d02200041086a21002008200641206a2206470d000b0b200420022802044f" - "0d012003280220200228020020044103746a22012802002001280204200328" - "022428020c1181808080008080808000450d010b410121010c010b41002101" - "0b200341306a24808080800020010b6c01027f024002402000417c6a280200" - "2202417871220341044108200241037122021b20016a490d0002402002450d" - "002003200141276a4b0d020b2000108d808080000f0b418186c0800041b086" - "c08000108e80808000000b41c086c0800041f086c08000108e80808000000b" - "5601017f23808080800041206b2202248080808000200241106a200041106a" - "290200370300200241086a200041086a290200370300200241013b011c2002" - "2001360218200220002902003703002002109280808000000be50301017f23" - "808080800041c0006b22022480808080000240024002400240024002402000" - "2d00000e0400010203000b2002200028020436020441002d009096c080001a" - "4114109c808080002200450d04200041106a410028008093c0800036000020" - "0041086a41002900f892c08000370000200041002900f092c0800037000020" - "0241143602102002200036020c200241143602082002410336022c200241a0" - "8fc08000360228200242023702342002418180808000ad422086200241046a" - "ad843703202002418480808000ad422086200241086aad8437031820022002" - "41186a36023020012802142001280218200241286a10878080800021002002" - "2802082201450d03200228020c20011088808080000c030b20002d00012100" - "2002410136022c200241d488c0800036022820024201370234200241838080" - "8000ad422086200241186aad8437030820022000410274220041c493c08000" - "6a28020036021c2002200041e894c080006a2802003602182002200241086a" - "36023020012802142001280218200241286a10878080800021000c020b2001" - "20002802042200280200200028020410958080800021000c010b2000280204" - "220028020020012000280204280210118280808000808080800021000b2002" - "41c0006a24808080800020000f0b000b140020012000280200200028020410" - "95808080000b3f01027f23808080800041106b220024808080800020004100" - "36020c41a08d062000410c6a108080808000200028020c2101200041106a24" - "808080800020010bbe0601057f200041786a22012000417c6a280200220241" - "787122006a21030240024020024101710d002002410271450d012001280200" - "220220006a21000240200120026b220141002802809ac08000470d00200328" - "02044103714103470d01410020003602f899c0800020032003280204417e71" - "36020420012000410172360204200320003602000f0b2001200210a8808080" - "000b024002400240024002400240200328020422024102710d002003410028" - "02849ac08000460d02200341002802809ac08000460d032003200241787122" - "0210a8808080002001200220006a2200410172360204200120006a20003602" - "00200141002802809ac08000470d01410020003602f899c080000f0b200320" - "02417e7136020420012000410172360204200120006a20003602000b200041" - "8002490d022001200010a78080800041002101410041002802989ac0800041" - "7f6a22003602989ac0800020000d04024041002802e097c080002200450d00" - "410021010340200141016a2101200028020822000d000b0b4100200141ff1f" - "200141ff1f4b1b3602989ac080000f0b410020013602849ac0800041004100" - "2802fc99c0800020006a22003602fc99c08000200120004101723602040240" - "200141002802809ac08000470d00410041003602f899c08000410041003602" - "809ac080000b200041002802909ac0800022044d0d0341002802849ac08000" - "2200450d034100210241002802fc99c0800022054129490d0241d897c08000" - "2101034002402001280200220320004b0d002000200320012802046a490d04" - "0b200128020821010c000b0b410020013602809ac08000410041002802f899" - "c0800020006a22003602f899c0800020012000410172360204200120006a20" - "003602000f0b200041f8017141e897c080006a21030240024041002802f099" - "c08000220241012000410376742200710d00410020022000723602f099c080" - "00200321000c010b200328020821000b200320013602082000200136020c20" - "01200336020c200120003602080f0b024041002802e097c080002201450d00" - "410021020340200241016a2102200128020822010d000b0b4100200241ff1f" - "200241ff1f4b1b3602989ac08000200520044d0d004100417f3602909ac080" - "000b0b4d01017f23808080800041206b220224808080800020024100360210" - "20024101360204200242043702082002412e36021c20022000360218200220" - "0241186a36020020022001108980808000000b7d02017f017e238080808000" - "41306b22022480808080002002200036020020022001360204200241023602" - "0c2002418484c08000360208200242023702142002418580808000ad422086" - "2203200241046aad84370328200220032002ad843703202002200241206a36" - "0210200241086a41b083c08000108980808000000b11002000350200410120" - "011091808080000bdf0703027f017e097f23808080800041306b2203248080" - "808000412721040240024020004290ce005a0d00200021050c010b41272104" - "0340200341096a20046a2206417c6a20004290ce0080220542f0b1037e2000" - "7ca7220741ffff037141e4006e220841017441c481c080006a2f00003b0000" - "2006417e6a2008419c7f6c20076a41ffff037141017441c481c080006a2f00" - "003b00002004417c6a2104200042ffc1d72f5621062005210020060d000b0b" - "02400240200542e300560d002005a721060c010b200341096a2004417e6a22" - "046a2005a7220741ffff037141e4006e2206419c7f6c20076a41ffff037141" - "017441c481c080006a2f00003b00000b024002402006410a490d0020034109" - "6a2004417e6a22046a200641017441c481c080006a2f00003b00000c010b20" - "0341096a2004417f6a22046a20064130723a00000b412720046b2109024002" - "4020010d00412820046b2107200228021c2106412d21010c010b412b418080" - "c400200228021c220641017122071b2101200720096a21070b200341096a20" - "046a210a2006410471410276210b0240024020022802000d00024020022802" - "142204200228021822062001200b109380808000450d00410121040c020b20" - "04200a2009200628020c118180808000808080800021040c010b0240024002" - "402002280204220c20074b0d0020022802142204200228021822062001200b" - "109380808000450d01410121040c030b2006410871450d012002280210210d" - "2002413036021020022d0020210e41012104200241013a0020200228021422" - "06200228021822082001200b1093808080000d02200c20076b41016a210402" - "4003402004417f6a2204450d01200641302008280210118280808000808080" - "8000450d000b410121040c030b02402006200a2009200828020c1181808080" - "008080808000450d00410121040c030b2002200e3a00202002200d36021041" - "0021040c020b2004200a2009200628020c118180808000808080800021040c" - "010b200c20076b210c02400240024020022d002022040e0402000100020b20" - "0c21044100210c0c010b200c4101762104200c41016a410176210c0b200441" - "016a2104200228021021082002280218210620022802142107024003402004" - "417f6a2204450d012007200820062802101182808080008080808000450d00" - "0b410121040c010b41012104200720062001200b1093808080000d00200720" - "0a2009200628020c11818080800080808080000d004100210403400240200c" - "2004470d00200c200c4921040c020b200441016a2104200720082006280210" - "1182808080008080808000450d000b2004417f6a200c4921040b200341306a" - "24808080800020040b5d01027f23808080800041206b220124808080800020" - "002802182102200141106a200041106a290200370300200141086a20004108" - "6a2902003703002001200036021c2001200236021820012000290200370300" - "200110a980808000000b490002402002418080c400460d0020002002200128" - "02101182808080008080808000450d0041010f0b024020030d0041000f0b20" - "0020034100200128020c11818080800080808080000b7d02017f017e238080" - "80800041306b22022480808080002002200036020020022001360204200241" - "0236020c200241a484c08000360208200242023702142002418580808000ad" - "4220862203200241046aad84370328200220032002ad843703202002200241" - "206a360210200241086a41c083c08000108980808000000bc20b010b7f2000" - "28020821030240024002400240200028020022040d002003410171450d010b" - "02402003410171450d00200120026a210502400240200028020c22060d0041" - "002107200121080c010b410021074100210920012108034020082203200546" - "0d020240024020032c00002208417f4c0d00200341016a21080c010b024020" - "0841604f0d00200341026a21080c010b0240200841704f0d00200341036a21" - "080c010b200341046a21080b200820036b20076a21072006200941016a2209" - "470d000b0b20082005460d00024020082c00002203417f4a0d002003416049" - "1a0b024002402007450d000240200720024f0d00200120076a2c000041bf7f" - "4a0d01410021030c020b20072002460d00410021030c010b200121030b2007" - "200220031b21022003200120031b21010b024020040d002000280214200120" - "02200028021828020c11818080800080808080000f0b2000280204210a0240" - "20024110490d0020022001200141036a417c7122076b22096a220b41037121" - "044100210641002103024020012007460d004100210302402009417c4b0d00" - "410021034100210503402003200120056a22082c000041bf7f4a6a20084101" - "6a2c000041bf7f4a6a200841026a2c000041bf7f4a6a200841036a2c000041" - "bf7f4a6a2103200541046a22050d000b0b200121080340200320082c000041" - "bf7f4a6a2103200841016a2108200941016a22090d000b0b02402004450d00" - "2007200b417c716a22082c000041bf7f4a210620044101460d00200620082c" - "000141bf7f4a6a210620044102460d00200620082c000241bf7f4a6a21060b" - "200b4102762105200620036a21060340200721042005450d04200541c00120" - "0541c001491b220b410371210c200b410274210d4100210802402005410449" - "0d002004200d41f007716a210941002108200421030340200328020c220741" - "7f7341077620074106767241818284087120032802082207417f7341077620" - "074106767241818284087120032802042207417f7341077620074106767241" - "818284087120032802002207417f7341077620074106767241818284087120" - "086a6a6a6a2108200341106a22032009470d000b0b2005200b6b2105200420" - "0d6a2107200841087641ff81fc0771200841ff81fc07716a418180046c4110" - "7620066a2106200c450d000b2004200b41fc01714102746a22082802002203" - "417f734107762003410676724181828408712103200c4101460d0220082802" - "042207417f7341077620074106767241818284087120036a2103200c410246" - "0d0220082802082208417f7341077620084106767241818284087120036a21" - "030c020b024020020d00410021060c030b2002410371210802400240200241" - "044f0d0041002106410021090c010b41002106200121032002410c71220921" - "070340200620032c000041bf7f4a6a200341016a2c000041bf7f4a6a200341" - "026a2c000041bf7f4a6a200341036a2c000041bf7f4a6a2106200341046a21" - "032007417c6a22070d000b0b2008450d02200120096a21030340200620032c" - "000041bf7f4a6a2106200341016a21032008417f6a22080d000c030b0b2000" - "28021420012002200028021828020c11818080800080808080000f0b200341" - "087641ff811c71200341ff81fc07716a418180046c41107620066a21060b02" - "400240200a20064d0d00200a20066b21054100210302400240024020002d00" - "200e0402000102020b20052103410021050c010b2005410176210320054101" - "6a41017621050b200341016a21032000280210210920002802182108200028" - "0214210703402003417f6a2203450d02200720092008280210118280808000" - "8080808000450d000b41010f0b200028021420012002200028021828020c11" - "818080800080808080000f0b0240200720012002200828020c118180808000" - "8080808000450d0041010f0b410021030340024020052003470d0020052005" - "490f0b200341016a2103200720092008280210118280808000808080800045" - "0d000b2003417f6a2005490b820302017f017e23808080800041f0006b2203" - "248080808000200341b085c0800036020c20032000360208200341b085c080" - "00360214200320013602102003410236021c200341bc80c080003602180240" - "20022802000d002003410336025c200341f080c08000360258200342033702" - "642003418680808000ad4220862204200341106aad84370348200320042003" - "41086aad843703402003418380808000ad422086200341186aad8437033820" - "03200341386a360260200341d8006a41e891c08000108980808000000b2003" - "41206a41106a200241106a290200370300200341206a41086a200241086a29" - "0200370300200320022902003703202003410436025c200341a481c0800036" - "0258200342043702642003418680808000ad4220862204200341106aad8437" - "035020032004200341086aad843703482003418780808000ad422086200341" - "206aad843703402003418380808000ad422086200341186aad843703382003" - "200341386a360260200341d8006a41e891c08000108980808000000b1c0020" - "002802002001200028020428020c11828080800080808080000b1400200128" - "0214200128021820001087808080000b22002001280214419480c08000410e" - "200128021828020c11818080800080808080000b6001017f23808080800041" - "306b22002480808080002000410136020c200041b480c08000360208200042" - "013702142000418880808000ad4220862000412f6aad843703202000200041" - "206a360210200041086a41cc8fc08000108980808000000b4701017f238080" - "80800041206b2200248080808000200041003602182000410136020c200041" - "bc88c0800036020820004204370210200041086a41c488c080001089808080" - "00000bcb2502087f017e02400240024002400240024002400240200041f501" - "490d0041002101200041cdff7b4f0d052000410b6a22014178712102410028" - "02f499c080002203450d04411f21040240200041f4ffff074b0d0020024106" - "20014108766722006b7641017120004101746b413e6a21040b410020026b21" - "010240200441027441d896c080006a28020022050d0041002100410021060c" - "020b4100210020024100411920044101766b2004411f461b74210741002106" - "034002402005220528020441787122082002490d00200820026b220820014f" - "0d00200821012005210620080d004100210120052106200521000c040b2005" - "28021422082000200820052007411d764104716a41106a2802002205471b20" - "0020081b2100200741017421072005450d020c000b0b024041002802f099c0" - "8000220541102000410b6a41f803712000410b491b22024103762201762200" - "410371450d00024002402000417f7341017120016a2207410374220041e897" - "c080006a2201200041f097c080006a28020022022802082206460d00200620" - "0136020c200120063602080c010b41002005417e200777713602f099c08000" - "0b20022000410372360204200220006a220020002802044101723602042002" - "41086a0f0b200241002802f899c080004d0d0302400240024020000d004100" - "2802f499c080002200450d0620006841027441d896c080006a280200220628" - "020441787120026b21012006210503400240200628021022000d0020062802" - "1422000d0020052802182104024002400240200528020c22002005470d0020" - "0541144110200528021422001b6a28020022060d01410021000c020b200528" - "02082206200036020c200020063602080c010b200541146a200541106a2000" - "1b21070340200721082006220041146a200041106a200028021422061b2107" - "20004114411020061b6a28020022060d000b200841003602000b2004450d04" - "0240200528021c41027441d896c080006a22062802002005460d0020044110" - "411420042802102005461b6a20003602002000450d050c040b200620003602" - "0020000d03410041002802f499c08000417e200528021c77713602f499c080" - "000c040b200028020441787120026b22062001200620014922061b21012000" - "200520061b2105200021060c000b0b02400240200020017441022001742200" - "410020006b7271682208410374220141e897c080006a2206200141f097c080" - "006a28020022002802082207460d002007200636020c200620073602080c01" - "0b41002005417e200877713602f099c080000b200020024103723602042000" - "20026a2207200120026b2206410172360204200020016a2006360200024041" - "002802f899c080002205450d00200541787141e897c080006a210141002802" - "809ac0800021020240024041002802f099c080002208410120054103767422" - "05710d00410020082005723602f099c08000200121050c010b200128020821" - "050b200120023602082005200236020c2002200136020c200220053602080b" - "410020073602809ac08000410020063602f899c08000200041086a0f0b2000" - "2004360218024020052802102206450d002000200636021020062000360218" - "0b20052802142206450d0020002006360214200620003602180b0240024002" - "4020014110490d0020052002410372360204200520026a2202200141017236" - "0204200220016a200136020041002802f899c080002207450d012007417871" - "41e897c080006a210641002802809ac0800021000240024041002802f099c0" - "8000220841012007410376742207710d00410020082007723602f099c08000" - "200621070c010b200628020821070b200620003602082007200036020c2000" - "200636020c200020073602080c010b2005200120026a220041037236020420" - "0520006a220020002802044101723602040c010b410020023602809ac08000" - "410020013602f899c080000b200541086a0f0b024020002006720d00410021" - "0641022004742200410020006b722003712200450d0320006841027441d896" - "c080006a28020021000b2000450d010b034020002006200028020441787122" - "0520026b220820014922041b2103200520024921072008200120041b210802" - "40200028021022050d00200028021421050b2006200320071b210620012008" - "20071b21012005210020050d000b0b2006450d00024041002802f899c08000" - "22002002490d002001200020026b4f0d010b20062802182104024002400240" - "200628020c22002006470d00200641144110200628021422001b6a28020022" - "050d01410021000c020b20062802082205200036020c200020053602080c01" - "0b200641146a200641106a20001b21070340200721082005220041146a2000" - "41106a200028021422051b210720004114411020051b6a28020022050d000b" - "200841003602000b2004450d030240200628021c41027441d896c080006a22" - "052802002006460d0020044110411420042802102006461b6a200036020020" - "00450d040c030b2005200036020020000d02410041002802f499c08000417e" - "200628021c77713602f499c080000c030b0240024002400240024002404100" - "2802f899c08000220020024f0d00024041002802fc99c08000220020024b0d" - "0041002101200241af80046a220641107640002200417f4622070d07200041" - "10742205450d07410041002802889ac08000410020064180807c7120071b22" - "086a22003602889ac080004100410028028c9ac0800022012000200120004b" - "1b36028c9ac0800002400240024041002802849ac080002201450d0041d897" - "c080002100034020002802002206200028020422076a2005460d0220002802" - "0822000d000c030b0b0240024041002802949ac080002200450d0020002005" - "4d0d010b410020053602949ac080000b410041ff1f3602989ac08000410020" - "083602dc97c08000410020053602d897c08000410041e897c080003602f497" - "c08000410041f097c080003602fc97c08000410041e897c080003602f097c0" - "8000410041f897c0800036028498c08000410041f097c080003602f897c080" - "004100418098c0800036028c98c08000410041f897c0800036028098c08000" - "4100418898c0800036029498c080004100418098c0800036028898c0800041" - "00419098c0800036029c98c080004100418898c0800036029098c080004100" - "419898c080003602a498c080004100419098c0800036029898c08000410041" - "a098c080003602ac98c080004100419898c080003602a098c0800041004100" - "3602e497c08000410041a898c080003602b498c08000410041a098c0800036" - "02a898c08000410041a898c080003602b098c08000410041b098c080003602" - "bc98c08000410041b098c080003602b898c08000410041b898c080003602c4" - "98c08000410041b898c080003602c098c08000410041c098c080003602cc98" - "c08000410041c098c080003602c898c08000410041c898c080003602d498c0" - "8000410041c898c080003602d098c08000410041d098c080003602dc98c080" - "00410041d098c080003602d898c08000410041d898c080003602e498c08000" - "410041d898c080003602e098c08000410041e098c080003602ec98c0800041" - "0041e098c080003602e898c08000410041e898c080003602f498c080004100" - "41f098c080003602fc98c08000410041e898c080003602f098c08000410041" - "f898c0800036028499c08000410041f098c080003602f898c0800041004180" - "99c0800036028c99c08000410041f898c0800036028099c080004100418899" - "c0800036029499c080004100418099c0800036028899c080004100419099c0" - "800036029c99c080004100418899c0800036029099c080004100419899c080" - "003602a499c080004100419099c0800036029899c08000410041a099c08000" - "3602ac99c080004100419899c080003602a099c08000410041a899c0800036" - "02b499c08000410041a099c080003602a899c08000410041b099c080003602" - "bc99c08000410041a899c080003602b099c08000410041b899c080003602c4" - "99c08000410041b099c080003602b899c08000410041c099c080003602cc99" - "c08000410041b899c080003602c099c08000410041c899c080003602d499c0" - "8000410041c099c080003602c899c08000410041d099c080003602dc99c080" - "00410041c899c080003602d099c08000410041d899c080003602e499c08000" - "410041d099c080003602d899c08000410041e099c080003602ec99c0800041" - "0041d899c080003602e099c08000410020053602849ac08000410041e099c0" - "80003602e899c080004100200841586a22003602fc99c08000200520004101" - "72360204200520006a4128360204410041808080013602909ac080000c080b" - "200120054f0d00200620014b0d00200028020c450d030b410041002802949a" - "c080002200200520002005491b3602949ac08000200520086a210641d897c0" - "800021000240024002400340200028020022072006460d0120002802082200" - "0d000c020b0b200028020c450d010b41d897c0800021000240034002402000" - "280200220620014b0d002001200620002802046a2206490d020b2000280208" - "21000c000b0b410020053602849ac080004100200841586a22003602fc99c0" - "800020052000410172360204200520006a4128360204410041808080013602" - "909ac080002001200641606a41787141786a22002000200141106a491b2207" - "411b36020441002902d897c080002109200741106a41002902e097c0800037" - "020020072009370208410020083602dc97c08000410020053602d897c08000" - "4100200741086a3602e097c08000410041003602e497c080002007411c6a21" - "00034020004107360200200041046a22002006490d000b20072001460d0720" - "072007280204417e713602042001200720016b220041017236020420072000" - "36020002402000418002490d002001200010a7808080000c080b200041f801" - "7141e897c080006a21060240024041002802f099c080002205410120004103" - "76742200710d00410020052000723602f099c08000200621000c010b200628" - "020821000b200620013602082000200136020c2001200636020c2001200036" - "02080c070b200020053602002000200028020420086a360204200520024103" - "723602042007410f6a41787141786a2201200520026a22006b210220014100" - "2802849ac08000460d03200141002802809ac08000460d0402402001280204" - "22064103714101470d0020012006417871220610a880808000200620026a21" - "02200120066a220128020421060b20012006417e7136020420002002410172" - "360204200020026a200236020002402002418002490d002000200210a78080" - "80000c060b200241f8017141e897c080006a21010240024041002802f099c0" - "8000220641012002410376742202710d00410020062002723602f099c08000" - "200121020c010b200128020821020b200120003602082002200036020c2000" - "200136020c200020023602080c050b4100200020026b22013602fc99c08000" - "410041002802849ac08000220020026a22063602849ac08000200620014101" - "7236020420002002410372360204200041086a21010c060b41002802809ac0" - "8000210102400240200020026b2206410f4b0d00410041003602809ac08000" - "410041003602f899c0800020012000410372360204200120006a2200200028" - "02044101723602040c010b410020063602f899c080004100200120026a2205" - "3602809ac0800020052006410172360204200120006a200636020020012002" - "4103723602040b200141086a0f0b2000200720086a36020441004100280284" - "9ac080002200410f6a417871220141786a22063602849ac080004100200020" - "016b41002802fc99c0800020086a22016a41086a22053602fc99c080002006" - "2005410172360204200020016a4128360204410041808080013602909ac080" - "000c030b410020003602849ac08000410041002802fc99c0800020026a2202" - "3602fc99c08000200020024101723602040c010b410020003602809ac08000" - "410041002802f899c0800020026a22023602f899c080002000200241017236" - "0204200020026a20023602000b200541086a0f0b4100210141002802fc99c0" - "8000220020024d0d004100200020026b22013602fc99c08000410041002802" - "849ac08000220020026a22063602849ac08000200620014101723602042000" - "2002410372360204200041086a0f0b20010f0b200020043602180240200628" - "02102205450d0020002005360210200520003602180b20062802142205450d" - "0020002005360214200520003602180b0240024020014110490d0020062002" - "410372360204200620026a22002001410172360204200020016a2001360200" - "02402001418002490d002000200110a7808080000c020b200141f8017141e8" - "97c080006a21020240024041002802f099c080002205410120014103767422" - "01710d00410020052001723602f099c08000200221010c010b200228020821" - "010b200220003602082001200036020c2000200236020c200020013602080c" - "010b2006200120026a2200410372360204200620006a220020002802044101" - "723602040b200641086a0b3000024020002802002d00000d002001418c83c0" - "800041051095808080000f0b2001419183c0800041041095808080000b1400" - "2001200028020420002802081095808080000b7001037f2000280204210102" - "40024020002d0000220041044b0d0020004103470d010b2001280200210002" - "40200141046a28020022022802002203450d00200020031180808080008080" - "8080000b024020022802042202450d00200020021088808080000b2001410c" - "1088808080000b0bab08010a7f23808080800041206b220424808080800002" - "40024002400240024020012802100d002001417f3602102003410020032002" - "41036a417c7120026b22056b41077120032005491b22066b21072003200649" - "0d0102402006450d0002400240200220036a2208417f6a22092d0000410a47" - "0d002006417f6a21060c010b200220076a220a2009460d0102402008417e6a" - "22092d0000410a470d002006417e6a21060c010b200a2009460d0102402008" - "417d6a22092d0000410a470d002006417d6a21060c010b200a2009460d0102" - "402008417c6a22092d0000410a470d002006417c6a21060c010b200a200946" - "0d0102402008417b6a22092d0000410a470d002006417b6a21060c010b200a" - "2009460d0102402008417a6a22092d0000410a470d002006417a6a21060c01" - "0b200a2009460d010240200841796a22092d0000410a470d00200641796a21" - "060c010b200a2009460d01200641787221060b200620076a41016a21060c04" - "0b20052003200320054b1b210b410020066b21082002417c6a210c2006417f" - "7320026a210a02400340200a21052008210620072209200b4d0d0120064178" - "6a2108200541786a210a41808284082002200941786a22076a280200220d41" - "8a94a8d000736b200d724180828408200c20096a280200220d418a94a8d000" - "736b200d727141808182847871418081828478460d000b0b200920034b0d02" - "02400340200320066a450d012006417f6a2106200520036a21092005417f6a" - "210520092d0000410a470d000b200320066a41016a21060c040b0240024020" - "01411c6a28020022060d00410021060c010b2006200141186a2802006a417f" - "6a2d0000410a470d0041002106200141003a00202001411c6a41003602000b" - "0240200128021420066b20034b0d002000200141146a2002200310a1808080" - "000c050b200128021820066a2002200310ad808080001a200041043a000020" - "01411c6a200620036a3602000c040b109a80808000000b20072003108f8080" - "8000000b20092003109480808000000b0240200320064f0d00200441003602" - "182004410136020c2004418c89c0800036020820044204370210200441086a" - "419489c08000108980808000000b02402001411c6a2802002205450d000240" - "0240200128021420056b20064d0d00200141186a28020020056a2002200610" - "ad808080001a2001411c6a200520066a22053602000c010b200441086a2001" - "41146a2002200610a180808000024020042d00084104460d00200020042903" - "083702000c030b2001411c6a28020021050b2005450d00200141003a002020" - "01411c6a41003602000b200220066a210502402001280214200320066b2206" - "4b0d002000200141146a2005200610a1808080000c010b200141186a280200" - "2005200610ad808080001a200041043a00002001411c6a20063602000b2001" - "200128021041016a360210200441206a2480808080000b7101027f20012802" - "002104024020012802082205450d00200420056b20034f0d00410021052001" - "4100360208200141003a000c0b0240200420034d0d00200128020420056a20" - "02200310ad808080001a200041043a00002001200520036a3602080f0b2000" - "4204370200200141003a000c0bc90103027f017e027f23808080800041106b" - "2203248080808000200341086a20002802082802002001200210a080808000" - "024020032d000822024104460d002000280204210420032903082105024002" - "4020002d0000220141044b0d0020014103470d010b20042802002101024020" - "0441046a28020022062802002207450d002001200711808080800080808080" - "000b024020062802042206450d00200120061088808080000b2004410c1088" - "808080000b200020053702000b200341106a24808080800020024104470b9c" - "0303027f017e037f23808080800041106b2202248080808000200241003602" - "0402400240024002402001418001490d002001418010490d01200141808004" - "4f0d0220022001413f71418001723a000620022001410c7641e001723a0004" - "20022001410676413f71418001723a0005410321010c030b200220013a0004" - "410121010c020b20022001413f71418001723a00052002200141067641c001" - "723a0004410221010c010b20022001413f71418001723a0007200220014112" - "7641f001723a000420022001410676413f71418001723a000620022001410c" - "76413f71418001723a0005410421010b200241086a20002802082802002002" - "41046a200110a080808000024020022d000822014104460d00200028020421" - "03200229030821040240024020002d0000220541044b0d0020054103470d01" - "0b200328020021050240200341046a28020022062802002207450d00200520" - "0711808080800080808080000b024020062802042206450d00200520061088" - "808080000b2003410c1088808080000b200020043702000b200241106a2480" - "8080800020014104470b1200200041c085c0800020011087808080000b0300" - "000b0900200041003602000bc30201047f411f21020240200141ffffff074b" - "0d002001410620014108766722026b7641017120024101746b413e6a21020b" - "200042003702102000200236021c200241027441d896c080006a2103024041" - "002802f499c0800041012002742204710d0020032000360200200020033602" - "182000200036020c20002000360208410041002802f499c080002004723602" - "f499c080000f0b024002400240200328020022042802044178712001470d00" - "200421020c010b20014100411920024101766b2002411f461b742103034020" - "042003411d764104716a41106a22052802002202450d022003410174210320" - "02210420022802044178712001470d000b0b20022802082203200036020c20" - "022000360208200041003602182000200236020c200020033602080f0b2005" - "2000360200200020043602182000200036020c200020003602080b82030104" - "7f200028020c21020240024002402001418002490d00200028021821030240" - "0240024020022000470d00200041144110200028021422021b6a2802002201" - "0d01410021020c020b20002802082201200236020c200220013602080c010b" - "200041146a200041106a20021b21040340200421052001220241146a200241" - "106a200228021422011b210420024114411020011b6a28020022010d000b20" - "0541003602000b2003450d020240200028021c41027441d896c080006a2201" - "2802002000460d0020034110411420032802102000461b6a20023602002002" - "450d030c020b2001200236020020020d01410041002802f499c08000417e20" - "0028021c77713602f499c080000c020b0240200220002802082204460d0020" - "04200236020c200220043602080f0b410041002802f099c08000417e200141" - "037677713602f099c080000f0b20022003360218024020002802102201450d" - "0020022001360210200120023602180b20002802142201450d002002200136" - "0214200120023602180f0b0b0b00200010aa80808000000bb50101037f2380" - "8080800041106b2201248080808000200028020c2102024002400240024020" - "002802040e020001020b20020d0141012102410021030c020b20020d002000" - "28020022022802042103200228020021020c010b2001418080808078360200" - "2001200036020c2001418980808000200028021c22002d001c20002d001d10" - "ab80808000000b20012003360204200120023602002001418a808080002000" - "28021c22002d001c20002d001d10ab80808000000b990101027f2380808080" - "0041106b2204248080808000410041002802cc96c08000220541016a3602cc" - "96c08000024020054100480d000240024041002d00a09ac080000d00410041" - "0028029c9ac0800041016a36029c9ac0800041002802c896c08000417f4a0d" - "010c020b200441086a200020011183808080008080808000000b410041003a" - "00a09ac080002002450d0010a580808000000b000b0c002000200129020037" - "03000bc10201087f02400240200241104f0d00200021030c010b2000410020" - "006b41037122046a210502402004450d002000210320012106034020032006" - "2d00003a0000200641016a2106200341016a22032005490d000b0b20052002" - "20046b2207417c7122086a210302400240200120046a2209410371450d0020" - "084101480d012009410374220641187121022009417c71220a41046a210141" - "0020066b4118712104200a2802002106034020052006200276200128020022" - "0620047472360200200141046a2101200541046a22052003490d000c020b0b" - "20084101480d0020092101034020052001280200360200200141046a210120" - "0541046a22052003490d000b0b20074103712102200920086a21010b024020" - "02450d00200320026a21050340200320012d00003a0000200141016a210120" - "0341016a22032005490d000b0b20000b0b96160100418080c0000b8c160a00" - "000001000000000000000000100001000000426f72726f774d75744572726f" - "72616c726561647920626f72726f7765643a2022001000120000003d3d6173" - "73657274696f6e20606c6566742020726967687460206661696c65640a2020" - "6c6566743a200a2072696768743a2000003e001000100000004e0010001700" - "0000650010000900000020726967687460206661696c65643a200a20206c65" - "66743a200000003e0010001000000088001000100000009800100009000000" - "65001000090000003030303130323033303430353036303730383039313031" - "31313231333134313531363137313831393230323132323233323432353236" - "32373238323933303331333233333334333533363337333833393430343134" - "32343334343435343634373438343935303531353235333534353535363537" - "35383539363036313632363336343635363636373638363937303731373237" - "33373437353736373737383739383038313832383338343835383638373838" - "3839393039313932393339343935393639373938393966616c736574727565" - "636f72652f7372632f736c6963652f6d656d6368722e727300000095011000" - "18000000830000001e00000095011000180000009f0000000900000072616e" - "676520737461727420696e64657820206f7574206f662072616e676520666f" - "7220736c696365206f66206c656e67746820d001100012000000e201100022" - "00000072616e676520656e6420696e646578201402100010000000e2011000" - "220000007265656e7472616e7420696e69740000340210000e0000002f7275" - "7374632f633266373463336639323861656235303366313562346539656635" - "373738653737663330353862382f6c6962726172792f636f72652f7372632f" - "63656c6c2f6f6e63652e72730000004c0210004d0000002301000042000000" - "000000000000000004000000040000000b0000000c0000000c000000040000" - "000d0000000e0000000f0000002f727573742f646570732f646c6d616c6c6f" - "632d302e322e362f7372632f646c6d616c6c6f632e7273617373657274696f" - "6e206661696c65643a207073697a65203e3d2073697a65202b206d696e5f6f" - "7665726865616400d802100029000000a80400000900000061737365727469" - "6f6e206661696c65643a207073697a65203c3d2073697a65202b206d61785f" - "6f766572686561640000d802100029000000ae0400000d000000757365206f" - "66207374643a3a7468726561643a3a63757272656e742829206973206e6f74" - "20706f737369626c6520616674657220746865207468726561642773206c6f" - "63616c206461746120686173206265656e2064657374726f7965647374642f" - "7372632f7468726561642f6d6f642e727300de03100015000000f102000013" - "0000006661696c656420746f2067656e657261746520756e69717565207468" - "726561642049443a2062697473706163652065786861757374656400040410" - "0037000000de03100015000000c40400000d00000001000000000000007374" - "642f7372632f696f2f62756666657265642f6c696e65777269746572736869" - "6d2e72736d6964203e206c656e000081041000090000005c04100025000000" - "0f01000029000000656e74697479206e6f7420666f756e647065726d697373" - "696f6e2064656e696564636f6e6e656374696f6e2072656675736564636f6e" - "6e656374696f6e207265736574686f737420756e726561636861626c656e65" - "74776f726b20756e726561636861626c65636f6e6e656374696f6e2061626f" - "727465646e6f7420636f6e6e65637465646164647265737320696e20757365" - "61646472657373206e6f7420617661696c61626c656e6574776f726b20646f" - "776e62726f6b656e2070697065656e7469747920616c726561647920657869" - "7374736f7065726174696f6e20776f756c6420626c6f636b6e6f7420612064" - "69726563746f727969732061206469726563746f72796469726563746f7279" - "206e6f7420656d707479726561642d6f6e6c792066696c6573797374656d20" - "6f722073746f72616765206d656469756d66696c6573797374656d206c6f6f" - "70206f7220696e646972656374696f6e206c696d69742028652e672e207379" - "6d6c696e6b206c6f6f70297374616c65206e6574776f726b2066696c652068" - "616e646c65696e76616c696420696e70757420706172616d65746572696e76" - "616c6964206461746174696d6564206f75747772697465207a65726f6e6f20" - "73746f726167652073706163657365656b206f6e20756e7365656b61626c65" - "2066696c6566696c6573797374656d2071756f746120657863656564656466" - "696c6520746f6f206c617267657265736f7572636520627573796578656375" - "7461626c652066696c652062757379646561646c6f636b63726f73732d6465" - "76696365206c696e6b206f722072656e616d65746f6f206d616e79206c696e" - "6b73696e76616c69642066696c656e616d65617267756d656e74206c697374" - "20746f6f206c6f6e676f7065726174696f6e20696e74657272757074656475" - "6e737570706f72746564756e657870656374656420656e64206f662066696c" - "656f7574206f66206d656d6f72796f74686572206572726f72756e63617465" - "676f72697a6564206572726f7220286f73206572726f722029000000010000" - "0000000000910710000b0000009c071000010000007374642f7372632f696f" - "2f737464696f2e727300b8071000130000002c030000140000006661696c65" - "64207072696e74696e6720746f203a20000000dc07100013000000ef071000" - "02000000b8071000130000005d040000090000007374646f75747374642f73" - "72632f696f2f6d6f642e72736120666f726d617474696e6720747261697420" - "696d706c656d656e746174696f6e2072657475726e656420616e206572726f" - "72207768656e2074686520756e6465726c79696e672073747265616d206469" - "64206e6f740000002b081000560000001a0810001100000028070000150000" - "0063616e6e6f74207265637572736976656c792061637175697265206d7574" - "65789c081000200000007374642f7372632f7379732f73796e632f6d757465" - "782f6e6f5f746872656164732e7273c4081000240000001400000009000000" - "7374642f7372632f73796e632f6f6e63652e7273f808100014000000d90000" - "00140000006c6f636b20636f756e74206f766572666c6f7720696e20726565" - "6e7472616e74206d757465787374642f7372632f73796e632f7265656e7472" - "616e745f6c6f636b2e7273420910001e000000220100002d0000006f706572" - "6174696f6e207375636365737366756c6f6e652d74696d6520696e69746961" - "6c697a6174696f6e206d6179206e6f7420626520706572666f726d65642072" - "65637572736976656c79840910003800000010000000110000001200000010" - "0000001000000013000000120000000d0000000e000000150000000c000000" - "0b00000015000000150000000f0000000e0000001300000026000000380000" - "0019000000170000000c000000090000000a00000010000000170000001900" - "00000e0000000d00000014000000080000001b0000000e0000001000000016" - "000000150000000b000000160000000d0000000b00000013000000a4041000" - "b4041000c5041000d7041000e7041000f70410000a0510001c051000290510" - "00370510004c0510005805100063051000780510008d0510009c051000aa05" - "1000bd051000e30510001b061000340610004b06100057061000600610006a" - "0610007a06100091061000aa061000b8061000c5061000d9061000e1061000" - "fc0610000a0710001a07100030071000450710005007100066071000730710" - "007e071000009118046e616d65000e0d7761736d5f6c69622e7761736d01d9" - "172e0005726563757201625f5a4e34636f726533666d74336e756d33696d70" - "35325f244c5424696d706c2475323024636f72652e2e666d742e2e44697370" - "6c61792475323024666f7224753230246933322447542433666d7431376863" - "6564393063376136333963303164644502495f5a4e337374643473796e6339" - "6f6e63655f6c6f636b31374f6e63654c6f636b244c54245424475424313069" - "6e697469616c697a6531376837663563353038646139653162303962450342" - "5f5a4e34636f72653463656c6c346f6e636531374f6e636543656c6c244c54" - "245424475424387472795f696e697431376863653633626632323835313931" - "65373145043e5f5a4e35616c6c6f633473796e633136417263244c54245424" - "432441244754243964726f705f736c6f773137686565396163636361643963" - "63313036394505355f5a4e34636f72653970616e69636b696e673133617373" - "6572745f6661696c6564313768323332363266326333633738623661624506" - "325f5a4e34636f7265366f7074696f6e31336578706563745f6661696c6564" - "313768663038613939653264373333366336614507265f5a4e34636f726533" - "666d743577726974653137683933353534653462653731663263376145080e" - "5f5f727573745f6465616c6c6f6309305f5a4e34636f72653970616e69636b" - "696e673970616e69635f666d74313768363534306363623264356664633361" - "62450a595f5a4e36305f244c54247374642e2e696f2e2e6572726f722e2e45" - "72726f72247532302461732475323024636f72652e2e666d742e2e44697370" - "6c61792447542433666d743137683930323731633762326136636538333945" - "0b495f5a4e34345f244c54242452462454247532302461732475323024636f" - "72652e2e666d742e2e446973706c61792447542433666d7431376837666634" - "643062383630396332343732450c097265637572736976650d415f5a4e3864" - "6c6d616c6c6f6338646c6d616c6c6f633137446c6d616c6c6f63244c542441" - "24475424346672656531376833393833346161616165336538393436450e2c" - "5f5a4e34636f72653970616e69636b696e673570616e696331376830346565" - "623931376464393363323239450f445f5a4e34636f726535736c6963653569" - "6e6465783236736c6963655f73746172745f696e6465785f6c656e5f666169" - "6c313768663931613361666538376231643434334510625f5a4e34636f7265" - "33666d74336e756d33696d7035325f244c5424696d706c2475323024636f72" - "652e2e666d742e2e446973706c61792475323024666f722475323024753332" - "2447542433666d74313768626633653032323834383365333735614511305f" - "5a4e34636f726533666d74336e756d33696d7037666d745f75363431376864" - "353231666136656636613036373261451211727573745f626567696e5f756e" - "77696e6413465f5a4e34636f726533666d7439466f726d6174746572313270" - "61645f696e74656772616c313277726974655f707265666978313768613961" - "343332383062363030366431324514425f5a4e34636f726535736c69636535" - "696e6465783234736c6963655f656e645f696e6465785f6c656e5f6661696c" - "3137683038386235366532393962656161616645152e5f5a4e34636f726533" - "666d7439466f726d6174746572337061643137683437363961653338393337" - "346363353145163b5f5a4e34636f72653970616e69636b696e673139617373" - "6572745f6661696c65645f696e6e6572313768366637653332353764383461" - "353034324517475f5a4e34325f244c54242452462454247532302461732475" - "323024636f72652e2e666d742e2e44656275672447542433666d7431376833" - "6136626161316262343761643230344518585f5a4e35395f244c5424636f72" - "652e2e666d742e2e417267756d656e7473247532302461732475323024636f" - "72652e2e666d742e2e446973706c61792447542433666d7431376836386133" - "65386535303963616663363445195c5f5a4e36335f244c5424636f72652e2e" - "63656c6c2e2e426f72726f774d75744572726f722475323024617324753230" - "24636f72652e2e666d742e2e44656275672447542433666d74313768313564" - "33643334333462646463636338451a395f5a4e34636f72653463656c6c3232" - "70616e69635f616c72656164795f626f72726f776564313768333134623532" - "61316263343662666534451b395f5a4e337374643674687265616438546872" - "6561644964336e657739657868617573746564313768333336626637613134" - "38383034346338451c435f5a4e38646c6d616c6c6f6338646c6d616c6c6f63" - "3137446c6d616c6c6f63244c54244124475424366d616c6c6f633137686536" - "3539333961346338393763633135451d475f5a4e34325f244c542424524624" - "54247532302461732475323024636f72652e2e666d742e2e44656275672447" - "542433666d7431376865313837343338386530376266653235451e595f5a4e" - "36305f244c5424616c6c6f632e2e737472696e672e2e537472696e67247532" - "302461732475323024636f72652e2e666d742e2e446973706c617924475424" - "33666d7431376863653432323661613166373236633163451f7a5f5a4e3463" - "6f726533707472383864726f705f696e5f706c616365244c54247374642e2e" - "696f2e2e57726974652e2e77726974655f666d742e2e41646170746572244c" - "5424616c6c6f632e2e7665632e2e566563244c542475382447542424475424" - "24475424313768313636646336316162303333346331654520605f5a4e3631" - "5f244c54247374642e2e696f2e2e737464696f2e2e5374646f75744c6f636b" - "2475323024617324753230247374642e2e696f2e2e57726974652447542439" - "77726974655f616c6c31376832346238323631303436316432353666452155" - "5f5a4e3373746432696f386275666665726564396275667772697465723138" - "427566577269746572244c54245724475424313477726974655f616c6c5f63" - "6f6c64313768353834626462626165623066623162624522735f5a4e38305f" - "244c54247374642e2e696f2e2e57726974652e2e77726974655f666d742e2e" - "41646170746572244c54245424475424247532302461732475323024636f72" - "652e2e666d742e2e5772697465244754243977726974655f73747231376837" - "6661636635626330656663643830384523325f5a4e34636f726533666d7435" - "5772697465313077726974655f636861723137686630623362653165633139" - "64653565374524305f5a4e34636f726533666d743557726974653977726974" - "655f666d743137686638383038663064663065343531336445250a72757374" - "5f70616e696326375f5a4e34636f72653570616e6963313250616e69635061" - "796c6f61643661735f73747231376836313439663134326439613265303265" - "4527505f5a4e38646c6d616c6c6f6338646c6d616c6c6f633137446c6d616c" - "6c6f63244c542441244754243138696e736572745f6c617267655f6368756e" - "6b3137686566653835316132373538326461376245284a5f5a4e38646c6d61" - "6c6c6f6338646c6d616c6c6f633137446c6d616c6c6f63244c542441244754" - "243132756e6c696e6b5f6368756e6b31376839333465336463333833626235" - "3861334529455f5a4e3373746433737973396261636b747261636532365f5f" - "727573745f656e645f73686f72745f6261636b747261636531376834646333" - "646534376432323032316239452a585f5a4e337374643970616e69636b696e" - "673139626567696e5f70616e69635f68616e646c657232385f247537622424" - "75376224636c6f737572652475376424247537642431376865313761333937" - "376638396331313738452b3b5f5a4e337374643970616e69636b696e673230" - "727573745f70616e69635f776974685f686f6f6b3137683737366537396339" - "6636353931626535452c83015f5a4e39395f244c54247374642e2e70616e69" - "636b696e672e2e626567696e5f70616e69635f68616e646c65722e2e537461" - "7469635374725061796c6f6164247532302461732475323024636f72652e2e" - "70616e69632e2e50616e69635061796c6f6164244754243661735f73747231" - "376865623366373232643232346534326638452d066d656d63707907120100" - "0f5f5f737461636b5f706f696e746572090a0100072e726f64617461005509" - "70726f64756365727302086c616e6775616765010452757374000c70726f63" - "65737365642d62790105727573746325312e38332e302d6e696768746c7920" - "2863326637346333663920323032342d30392d30392900490f746172676574" - "5f6665617475726573042b0a6d756c746976616c75652b0f6d757461626c65" - "2d676c6f62616c732b0f7265666572656e63652d74797065732b087369676e" - "2d657874"; - -extern std::string const hfPerfTest = - "0061736d0100000001180460037f7f7e017f60057f7f7f7f7f017f600000" - "6000017f021d0203656e760974726163655f6e756d000003656e76057472" - "616365000103030202030503010002068601167f0041a0090b7f0041a011" - "0b7f0041e0080b7f0041a0080b7f0041c0080b7f004180080b7f00418408" - "0b7f004188080b7f00418c080b7f004190080b7f004194080b7f00419808" - "0b7f004180090b7f004180080b7f0041e0110b7f0041e0110b7f0041e091" - "040b7f004180080b7f0041e091040b7f00418080080b7f0041000b7f0041" - "010b07c50219066d656d6f72790200115f5f7761736d5f63616c6c5f6374" - "6f727300020666696e6973680003036275660300076c6f635f6275660301" - "036d73670302086572725f686561640303096572725f646174613103040a" - "53465f4163636f756e7403050e53465f44657374696e6174696f6e030608" - "53465f4d656d6f7303070753465f4d656d6f03080b53465f4d656d6f4461" - "746103090753465f44617461030a1753465f417574686f72697a65437265" - "64656e7469616c73030b066163635f6964030c0c5f5f64736f5f68616e64" - "6c65030d0a5f5f646174615f656e64030e0b5f5f737461636b5f6c6f7703" - "0f0c5f5f737461636b5f6869676803100d5f5f676c6f62616c5f62617365" - "03110b5f5f686561705f6261736503120a5f5f686561705f656e6403130d" - "5f5f6d656d6f72795f6261736503140c5f5f7461626c655f626173650315" - "0aa2010202000b9c0102017f017e41807821000340200041a0116a420037" - "0300200041086a22000d000b41d811420037030041d011420037030041c8" - "11420037030041c011420037030041b811420037030041b0114200370300" - "41a811428d801c37030041a011429a803c3703000240034041e008411020" - "0110004118460440200142017c220142c0843d520d010c020b0b41a00841" - "1441c0084113410010011a0b41010b0b840104004180080b340100080003" - "00080009000f000a000e000d0007001b0007001a000f0000000000676574" - "5f6c65646765725f73716e206572726f720041c0080b13696e76616c6964" - "2072657475726e2073697a650041e0080b104e6577206163636f756e7420" - "69643a20004180090b14fc4f9afac9f1a8db807fda7dc9247bb557569d58" - "007f0970726f647563657273010c70726f6365737365642d62790105636c" - "616e675f31392e312e352d776173692d73646b202868747470733a2f2f67" - "69746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a656374206162" - "346235613264623538323935386166316565333038613739306366646234" - "32626432343732302900490f7461726765745f6665617475726573042b0f" - "6d757461626c652d676c6f62616c732b087369676e2d6578742b0f726566" - "6572656e63652d74797065732b0a6d756c746976616c7565"; - -extern std::string const allKeyletsWasmHex = - "0061736d0100000001530a60057f7f7f7f7f017f60047f7f7f7f017f60067f7f7f7f7f7f01" - "7f60037f7f7f017f60087f7f7f7f7f7f7f7f017f60037f7f7e017f60077f7f7f7f7f7f7f01" - "7f60057f7f7f7f7f006000017f60037f7f7f000284051808686f73745f6c69620574726163" - "65000008686f73745f6c69621063616368655f6c65646765725f6f626a000308686f73745f" - "6c69620974726163655f6e756d000508686f73745f6c6962146765745f6c65646765725f6f" - "626a5f6669656c64000108686f73745f6c69621c6765745f63757272656e745f6c65646765" - "725f6f626a5f6669656c64000308686f73745f6c69620d74726163655f6163636f756e7400" - "0108686f73745f6c69620e6163636f756e745f6b65796c6574000108686f73745f6c69620b" - "6c696e655f6b65796c6574000408686f73745f6c69620a616d6d5f6b65796c657400020868" - "6f73745f6c69620c636865636b5f6b65796c6574000008686f73745f6c6962116372656465" - "6e7469616c5f6b65796c6574000408686f73745f6c69620f64656c65676174655f6b65796c" - "6574000208686f73745f6c6962166465706f7369745f707265617574685f6b65796c657400" - "0208686f73745f6c69620a6469645f6b65796c6574000108686f73745f6c69620d65736372" - "6f775f6b65796c6574000008686f73745f6c6962136d70745f69737375616e63655f6b6579" - "6c6574000008686f73745f6c69620e6d70746f6b656e5f6b65796c6574000208686f73745f" - "6c6962106e66745f6f666665725f6b65796c6574000008686f73745f6c69620c6f66666572" - "5f6b65796c6574000008686f73745f6c69620e7061796368616e5f6b65796c657400060868" - "6f73745f6c69621a7065726d697373696f6e65645f646f6d61696e5f6b65796c6574000008" - "686f73745f6c69620e7369676e6572735f6b65796c6574000108686f73745f6c69620d7469" - "636b65745f6b65796c6574000008686f73745f6c69620c7661756c745f6b65796c65740000" - "03040307080905030100110619037f01418080c0000b7f0041958bc0000b7f0041a08bc000" - "0b073e05066d656d6f727902000d6f626a6563745f65786973747300180666696e69736800" - "190a5f5f646174615f656e6403010b5f5f686561705f6261736503020a8d33038d0602057f" - "037e230041f0006b220524000240024020012d0000450440200541186a200141196a290000" - "370300200541106a200141116a290000370300200541086a200141096a2900003703002005" - "20012900013703002002200320054120410110001a2005412041001001220141004c0d0102" - "4002400240024002402004450440418b80c000410f4285801410021a200541d8006a420037" - "0300200541d0006a4200370300200541c8006a420037030020054200370340200141858014" - "200541406b22064120100322014120470d01200541286a200541cf006a2201290000220a37" - "0300200541306a200541d7006a2202290000220b370300200541386a200541df006a22032d" - "000022043a000020052005290047220c37032020052f014021072005280142210820052d00" - "4621092001200a3700002002200b370000200320043a0000200520093a0046200520083601" - "42200520073b01402005200c370047419a80c000410c20064120410110001a0c030b418b80" - "c000410f2004ac10021a200541d0006a4100360200200541c8006a42003703002005420037" - "034020012004200541406b411410032201417e47044020014114460d02200141004e0d0441" - "998ac00041172001ac10021a0c050b417e21010c040b41a680c0004115417f20012001417f" - "4e1b2201ac10021a200041013a0000200020013602040c060b200520052900473703602005" - "200541cc006a2201290000370065200520052f014022023b016e2005200529036037032020" - "05200529006537002520052800432103200520052d00423a0042200520023b014020052003" - "3600432001200529002537000020052005290320370047419a80c000410c200541406b4114" - "410110001a0b20004180023b01000c040b41b08ac0004131421410021a41e18ac000412020" - "01ad10021a417321010b41a680c00041152001ac10021a200041013a000020002001360204" - "0c020b41c280c000411620012802042201ac10021a200041013a0000200020013602040c01" - "0b41bb80c00041072001ac10021a200041013a0000200020013602040b200541f0006a2400" - "0bfc27020a7f027e23004180076b2200240041d880c000412341004100410010001a200041" - "98016a2204410036020020004190016a22034200370300200042003703880102402000027f" - "02404181802020004188016a22024114100422014114460440200041066a20002d008a013a" - "00002000200029008f013703e001200020004194016a22052900003700e501200041106a20" - "002900e501370000200020002f0188013b01042000200028008b01360007200020002903e0" - "0137000b41fb80c0004108200041046a2208411410051a2004410036020020034200370300" - "20004200370388014183802020024114100422014114470d032000411a6a20002d008a013a" - "00002000200029008f013703e001200020052900003700e501200041246a20002900e50137" - "0000200020002f0188013b01182000200028008b0136001b200020002903e00137001f4183" - "81c000410c200041186a411410051a200041a0016a22054200370300200442003703002003" - "420037030020004200370388012008411420024120100622014120460d0102402001410048" - "0440200020013602300c010b2000417f3602300b41010c020b0c020b200041c5006a200529" - "03003700002000413d6a2004290300370000200041356a2003290300370000200020002903" - "880137002d41000b3a002c20004188016a22042000412c6a418f81c0004107418180201018" - "0240024020002d00880145044041002101419681c000413541004100410010001a200041de" - "006a41c4003a0000200041d8006a4100360200200041e3006a41003a0000200041d5a6013b" - "015c200042003703502000410036005f200041a0016a2203420037030020004198016a2202" - "420037030020004190016a220542003703002000420037038801200041046a411420004118" - "6a4114200041d0006a41142004412010072204412047044002402004410048044020002004" - "3602680c010b2000417f3602680b410121010c020b200041fd006a20032903003700002000" - "41f5006a2002290300370000200041ed006a20052903003700002000200029038801370065" - "0c010b200028028c01210141878ac0004112420510021a0c010b200020013a006420004188" - "016a200041e4006a41cb81c000410941001018024020002d00880145044041d481c0004137" - "41004100410010001a200041f0016a200041286a2201280100360200200041e8016a200041" - "206a2202290100370300200041fc016a200041d8006a290300220a37020020004184026a20" - "0041e0006a2802002203360200200020002901183703e00120002000290350220b3702f401" - "200041e8066a22042003360200200041e0066a2203200a3703002000200b3703d806200041" - "f4066a2002290100370200200041fc066a2001280100360200200020002901183702ec0620" - "004188026a200041d8066a22014128101a2000418c016a200041e0016a41d000101a200041" - "0136028801200041f0066a2202420037030020044200370300200342003703002000420037" - "03d80641818bc0004114200041b4016a412820014120100822014120470440024020014100" - "480440200020013602e4010c010b2000417f3602e4010b410121010c020b200041f9016a20" - "02290300370000200041f1016a2004290300370000200041e9016a20032903003700002000" - "20002903d8063700e101410021010c010b200028028c01210141878ac0004112420510021a" - "0c010b200020013a00e001200041b4026a200041e0016a2204418b82c00041034181802010" - "18024020002d00b40245044041002101418e82c000413141004100410010001a200041f801" - "6a22034200370300200041f0016a22024200370300200041e8016a22054200370300200042" - "003703e001200041046a411441062004412010092204412047044002402004410048044020" - "0020043602c0020c010b2000417f3602c0020b410121010c020b200041d5026a2003290300" - "370000200041cd026a2002290300370000200041c5026a2005290300370000200020002903" - "e0013700bd020c010b20002802b802210141878ac0004112420610021a0c010b200020013a" - "00bc02200041e0016a2204200041bc026a41bf82c0004105418180201018024020002d00e0" - "014504404100210141c482c000413341004100410010001a200041f8016a22034200370300" - "200041f0016a22024200370300200041e8016a22054200370300200042003703e001200041" - "046a220841142008411441f782c000411220044120100a2204412047044002402004410048" - "0440200020043602e4020c010b2000417f3602e4020b410121010c020b200041f9026a2003" - "290300370000200041f1026a2002290300370000200041e9026a2005290300370000200020" - "002903e0013700e1020c010b20002802e401210141878ac0004112420610021a0c010b2000" - "20013a00e002200041e0016a2204200041e0026a418983c000410a41988020101802402000" - "2d00e00145044041002101419383c000413841004100410010001a200041f8016a22034200" - "370300200041f0016a22024200370300200041e8016a22054200370300200042003703e001" - "200041046a4114200041186a411420044120100b2204412047044002402004410048044020" - "002004360288030c010b2000417f360288030b410121010c020b2000419d036a2003290300" - "37000020004195036a20022903003700002000418d036a2005290300370000200020002903" - "e001370085030c010b20002802e401210141878ac0004112420710021a0c010b200020013a" - "008403200041e0016a220520004184036a41cb83c000410841818020101802400240024002" - "40024002400240024002400240024020002d00e00145044041d383c0004136410041004100" - "10001a230041206b22032400200341186a22064200370300200341106a2207420037030020" - "0341086a2209420037030020034200370300200041a8036a2201027f200041046a22044114" - "200041186a2208411420034120100c22024120470440024020024100480440200120023602" - "040c010b2001417f3602040b41010c010b20012003290300370001200141196a2006290300" - "370000200141116a2007290300370000200141096a200929030037000041000b3a00002003" - "41206a240020052001418984c000410e41818020101820002d00e0010d01419784c000413c" - "41004100410010001a230041206b22032400200341186a22064200370300200341106a2207" - "4200370300200341086a2209420037030020034200370300200041cc036a2201027f200441" - "1420034120100d22024120470440024020024100480440200120023602040c010b2001417f" - "3602040b41010c010b20012003290300370001200141196a2006290300370000200141116a" - "2007290300370000200141096a200929030037000041000b3a0000200341206a2400200520" - "0141d384c000410341818020101820002d00e0010d0241d684c00041314100410041001000" - "1a230041206b22032400200341186a22064200370300200341106a22074200370300200341" - "086a2209420037030020034200370300200041f0036a2201027f20044114410b2003412010" - "0e22024120470440024020024100480440200120023602040c010b2001417f3602040b4101" - "0c010b20012003290300370001200141196a2006290300370000200141116a200729030037" - "0000200141096a200929030037000041000b3a0000200341206a240020052001418785c000" - "410641818020101820002d00e0010d03418d85c000413441004100410010001a230041206b" - "22032400200341186a22064200370300200341106a22074200370300200341086a22094200" - "3703002003420037030020004194046a2201027f20044114410c20034120100f2202412047" - "0440024020024100480440200120023602040c010b2001417f3602040b41010c010b200120" - "03290300370001200141196a2006290300370000200141116a200729030037000020014109" - "6a200929030037000041000b3a0000200341206a2400200041f4016a200041146a28010036" - "0200200041ec016a2000410c6a290100370200200020002901043702e401200041808080e0" - "003602e001200041d8066a2203200141c185c000410b41848020101820002d00d8060d0441" - "cc85c000413941004100410010001a230041206b22012400200141186a2206420037030020" - "0141106a22074200370300200141086a2209420037030020014200370300200041b8046a22" - "02027f20054118200841142001412010102205412047044002402005410048044020022005" - "3602040c010b2002417f3602040b41010c010b20022001290300370001200241196a200629" - "0300370000200241116a2007290300370000200241096a200929030037000041000b3a0000" - "200141206a240020032002418586c000410741818020101820002d00d8060d05418c86c000" - "413541004100410010001a230041206b22012400200141186a22064200370300200141106a" - "22074200370300200141086a2209420037030020014200370300200041dc046a2202027f20" - "084114410620014120101122054120470440024020054100480440200220053602040c010b" - "2002417f3602040b41010c010b20022001290300370001200241196a200629030037000020" - "0241116a2007290300370000200241096a200929030037000041000b3a0000200141206a24" - "002003200241c186c000410c41828020101820002d00d8060d0641cd86c000413a41004100" - "410010001a230041206b22012400200141186a22064200370300200141106a220742003703" - "00200141086a220942003703002001420037030020004180056a2202027f20044114410d20" - "014120101222054120470440024020054100480440200220053602040c010b2002417f3602" - "040b41010c010b20022001290300370001200241196a2006290300370000200241116a2007" - "290300370000200241096a200929030037000041000b3a0000200141206a24002003200241" - "8787c000410541818020101820002d00d8060d07418c87c000413341004100410010001a23" - "0041206b22012400200141186a22064200370300200141106a22074200370300200141086a" - "2209420037030020014200370300200041a4056a2202027f2004411420084114410e200141" - "20101322054120470440024020054100480440200220053602040c010b2002417f3602040b" - "41010c010b20022001290300370001200241196a2006290300370000200241116a20072903" - "00370000200241096a200929030037000041000b3a0000200141206a24002003200241bf87" - "c000410a41818020101820002d00d8060d0841c987c000413841004100410010001a230041" - "206b22012400200141186a22084200370300200141106a22064200370300200141086a2207" - "420037030020014200370300200041c8056a2202027f20044114410f200141201014220541" - "20470440024020054100480440200220053602040c010b2002417f3602040b41010c010b20" - "022001290300370001200241196a2008290300370000200241116a20062903003700002002" - "41096a200729030037000041000b3a0000200141206a240020032002418188c00041124182" - "8020101820002d00d8060d09419388c00041c00041004100410010001a230041206b220124" - "00200141186a22084200370300200141106a22064200370300200141086a22074200370300" - "20014200370300200041ec056a2202027f2004411420014120101522054120470440024020" - "054100480440200220053602040c010b2002417f3602040b41010c010b2002200129030037" - "0001200241196a2008290300370000200241116a2006290300370000200241096a20072903" - "0037000041000b3a0000200141206a24002003200241d388c000410a4100101820002d00d8" - "060d0a41dd88c000413841004100410010001a230041206b22012400200141186a22084200" - "370300200141106a22064200370300200141086a2207420037030020014200370300200041" - "90066a2202027f200441144112200141201016220541204704400240200541004804402002" - "20053602040c010b2002417f3602040b41010c010b20022001290300370001200241196a20" - "08290300370000200241116a2006290300370000200241096a200729030037000041000b3a" - "0000200141206a240020032002419589c000410641818020101820002d00d8060d0b419b89" - "c000413441004100410010001a230041206b22012400200141186a22054200370300200141" - "106a22084200370300200141086a2206420037030020014200370300200041b4066a220202" - "7f20044114411320014120101722044120470440024020044100480440200220043602040c" - "010b2002417f3602040b41010c010b20022001290300370001200241196a20052903003700" - "00200241116a2008290300370000200241096a200629030037000041000b3a000020014120" - "6a24002003200241cf89c000410541818020101820002d00d80645044041d489c000413341" - "004100410010001a410121010c0d0b20002802dc06210141878ac0004112421310021a0c0c" - "0b20002802e401210141878ac0004112420810021a0c0b0b20002802e401210141878ac000" - "4112420910021a0c0a0b20002802e401210141878ac0004112420a10021a0c090b20002802" - "e401210141878ac0004112420b10021a0c080b20002802dc06210141878ac0004112420c10" - "021a0c070b20002802dc06210141878ac0004112420d10021a0c060b20002802dc06210141" - "878ac0004112420d10021a0c050b20002802dc06210141878ac0004112420d10021a0c040b" - "20002802dc06210141878ac0004112420e10021a0c030b20002802dc06210141878ac00041" - "12420f10021a0c020b20002802dc06210141878ac0004112421010021a0c010b20002802dc" - "06210141878ac0004112421210021a0b20004180076a240020010f0b418080c000410b417f" - "20012001417f4e1bac1002000bfd0401067f200241104f044002402000410020006b410371" - "22056a220420004d0d002001210320050440200521060340200020032d00003a0000200341" - "016a2103200041016a2100200641016b22060d000b0b200541016b4107490d000340200020" - "032d00003a0000200041016a200341016a2d00003a0000200041026a200341026a2d00003a" - "0000200041036a200341036a2d00003a0000200041046a200341046a2d00003a0000200041" - "056a200341056a2d00003a0000200041066a200341066a2d00003a0000200041076a200341" - "076a2d00003a0000200341086a2103200041086a22002004470d000b0b2004200220056b22" - "07417c7122086a21000240200120056a2206410371450440200020044d0d01200621010340" - "20042001280200360200200141046a2101200441046a22042000490d000b0c010b20002004" - "4d0d002006410374220541187121032006417c71220241046a2101410020056b4118712105" - "200228020021020340200420022003762001280200220220057472360200200141046a2101" - "200441046a22042000490d000b0b20074103712102200620086a21010b0240200020002002" - "6a22064f0d002002410771220304400340200020012d00003a0000200141016a2101200041" - "016a2100200341016b22030d000b0b200241016b4107490d000340200020012d00003a0000" - "200041016a200141016a2d00003a0000200041026a200141026a2d00003a0000200041036a" - "200141036a2d00003a0000200041046a200141046a2d00003a0000200041056a200141056a" - "2d00003a0000200041066a200141066a2d00003a0000200041076a200141076a2d00003a00" - "00200141086a2101200041086a22002006470d000b0b0b0b8b0b0100418080c0000b810b65" - "72726f725f636f64653d47657474696e67206669656c643a204669656c6420646174613a20" - "4572726f722067657474696e67206669656c643a204572726f723a204572726f7220676574" - "74696e67206b65796c65743a202424242424205354415254494e47205741534d2045584543" - "5554494f4e2024242424244163636f756e743a44657374696e6174696f6e3a4163636f756e" - "744163636f756e74206f626a656374206578697374732c2070726f63656564696e67207769" - "746820657363726f772066696e6973682e54727573746c696e6554727573746c696e65206f" - "626a656374206578697374732c2070726f63656564696e67207769746820657363726f7720" - "66696e6973682e414d4d414d4d206f626a656374206578697374732c2070726f6365656469" - "6e67207769746820657363726f772066696e6973682e436865636b436865636b206f626a65" - "6374206578697374732c2070726f63656564696e67207769746820657363726f772066696e" - "6973682e7465726d73616e64636f6e646974696f6e7343726564656e7469616c4372656465" - "6e7469616c206f626a656374206578697374732c2070726f63656564696e67207769746820" - "657363726f772066696e6973682e44656c656761746544656c6567617465206f626a656374" - "206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973" - "682e4465706f736974507265617574684465706f73697450726561757468206f626a656374" - "206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973" - "682e444944444944206f626a656374206578697374732c2070726f63656564696e67207769" - "746820657363726f772066696e6973682e457363726f77457363726f77206f626a65637420" - "6578697374732c2070726f63656564696e67207769746820657363726f772066696e697368" - "2e4d505449737375616e63654d505449737375616e6365206f626a65637420657869737473" - "2c2070726f63656564696e67207769746820657363726f772066696e6973682e4d50546f6b" - "656e4d50546f6b656e206f626a656374206578697374732c2070726f63656564696e672077" - "69746820657363726f772066696e6973682e4e46546f6b656e4f666665724e46546f6b656e" - "4f66666572206f626a656374206578697374732c2070726f63656564696e67207769746820" - "657363726f772066696e6973682e4f666665724f66666572206f626a656374206578697374" - "732c2070726f63656564696e67207769746820657363726f772066696e6973682e50617943" - "68616e6e656c5061794368616e6e656c206f626a656374206578697374732c2070726f6365" - "6564696e67207769746820657363726f772066696e6973682e5065726d697373696f6e6564" - "446f6d61696e5065726d697373696f6e6564446f6d61696e206f626a656374206578697374" - "732c2070726f63656564696e67207769746820657363726f772066696e6973682e5369676e" - "65724c6973745369676e65724c697374206f626a656374206578697374732c2070726f6365" - "6564696e67207769746820657363726f772066696e6973682e5469636b65745469636b6574" - "206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f" - "772066696e6973682e5661756c745661756c74206f626a656374206578697374732c207072" - "6f63656564696e67207769746820657363726f772066696e6973682e43757272656e742073" - "65712076616c75653a456e636f756e7465726564206572726f725f636f64653a4279746520" - "61727261792077617320657870656374656420746f20686176652074686973206d616e7920" - "62797465733a2042797465206172726179206861642074686973206d616e79206279746573" - "3a20004d0970726f64756365727302086c616e6775616765010452757374000c70726f6365" - "737365642d6279010572757374631d312e38352e3120283465623136313235302032303235" - "2d30332d31352900490f7461726765745f6665617475726573042b0f6d757461626c652d67" - "6c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d75" - "6c746976616c7565"; - -extern std::string const codecovTestsWasmHex = - "0061736d0100000001570b60047f7f7f7f017f60057f7f7f7f7f017f60027f7f017f60067f" - "7f7f7f7f7f017f6000017f60037f7f7f017f60017f017f60087f7f7f7f7f7f7f7f017f6003" - "7f7f7e017f60077f7f7f7f7f7f7f017f60047f7f7f7f0002e70b3408686f73745f6c696205" - "7472616365000108686f73745f6c69620974726163655f6e756d000808686f73745f6c6962" - "0e6765745f6c65646765725f73716e000408686f73745f6c6962166765745f706172656e74" - "5f6c65646765725f74696d65000408686f73745f6c6962166765745f706172656e745f6c65" - "646765725f68617368000208686f73745f6c6962176765745f6c65646765725f6163636f75" - "6e745f68617368000208686f73745f6c6962126765745f6c65646765725f74785f68617368" - "000208686f73745f6c69620c6765745f626173655f666565000408686f73745f6c69621161" - "6d656e646d656e745f656e61626c6564000208686f73745f6c69620c6765745f74785f6669" - "656c64000508686f73745f6c69620e6163636f756e745f6b65796c6574000008686f73745f" - "6c69621063616368655f6c65646765725f6f626a000508686f73745f6c69621c6765745f63" - "757272656e745f6c65646765725f6f626a5f6669656c64000508686f73745f6c6962146765" - "745f6c65646765725f6f626a5f6669656c64000008686f73745f6c6962136765745f74785f" - "6e65737465645f6669656c64000008686f73745f6c6962236765745f63757272656e745f6c" - "65646765725f6f626a5f6e65737465645f6669656c64000008686f73745f6c69621b676574" - "5f6c65646765725f6f626a5f6e65737465645f6669656c64000108686f73745f6c69621067" - "65745f74785f61727261795f6c656e000608686f73745f6c6962206765745f63757272656e" - "745f6c65646765725f6f626a5f61727261795f6c656e000608686f73745f6c696218676574" - "5f6c65646765725f6f626a5f61727261795f6c656e000208686f73745f6c6962176765745f" - "74785f6e65737465645f61727261795f6c656e000208686f73745f6c6962276765745f6375" - "7272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e00020868" - "6f73745f6c69621f6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c" - "656e000508686f73745f6c69620b7570646174655f64617461000208686f73745f6c696213" - "636f6d707574655f7368613531325f68616c66000008686f73745f6c696209636865636b5f" - "736967000308686f73745f6c6962076765745f6e6674000308686f73745f6c69620e676574" - "5f6e66745f697373756572000008686f73745f6c69620d6765745f6e66745f7461786f6e00" - "0008686f73745f6c69620d6765745f6e66745f666c616773000208686f73745f6c69621467" - "65745f6e66745f7472616e736665725f666565000208686f73745f6c69620e6765745f6e66" - "745f73657269616c000008686f73745f6c69620d74726163655f6163636f756e7400000868" - "6f73745f6c69620c74726163655f616d6f756e74000008686f73745f6c69620b6c696e655f" - "6b65796c6574000708686f73745f6c69620a616d6d5f6b65796c6574000308686f73745f6c" - "69621163726564656e7469616c5f6b65796c6574000708686f73745f6c69620e6d70746f6b" - "656e5f6b65796c6574000308686f73745f6c69620c636865636b5f6b65796c657400010868" - "6f73745f6c69620f64656c65676174655f6b65796c6574000308686f73745f6c6962166465" - "706f7369745f707265617574685f6b65796c6574000308686f73745f6c69620a6469645f6b" - "65796c6574000008686f73745f6c69620d657363726f775f6b65796c6574000108686f7374" - "5f6c6962136d70745f69737375616e63655f6b65796c6574000108686f73745f6c6962106e" - "66745f6f666665725f6b65796c6574000108686f73745f6c69620c6f666665725f6b65796c" - "6574000108686f73745f6c69620d6f7261636c655f6b65796c6574000108686f73745f6c69" - "620e7061796368616e5f6b65796c6574000908686f73745f6c69621a7065726d697373696f" - "6e65645f646f6d61696e5f6b65796c6574000108686f73745f6c69620e7369676e6572735f" - "6b65796c6574000008686f73745f6c69620d7469636b65745f6b65796c6574000108686f73" - "745f6c69620c7661756c745f6b65796c657400010303020a0405030100110619037f014180" - "80c0000b7f0041959ac0000b7f0041a09ac0000b072e04066d656d6f727902000666696e69" - "736800350a5f5f646174615f656e6403010b5f5f686561705f6261736503020a8026024600" - "0240200020014704402002200341004100410010001a20004100480d01418b80c000410b20" - "00ad1001000b200220032000ac10011a0f0b418b80c000410b2000ac1001000bb62502087f" - "027e230041f0016b22002400419680c000412341004100410010001a100241b9e00041b980" - "c000410e1034100341b2920441c780c00041161034200041f8006a22044200370300200041" - "f0006a22034200370300200041e8006a2202420037030020004200370360200041e0006a22" - "0141201004412041e48ac00041161034200442003703002003420037030020024200370300" - "20004200370360200141201005412041fa8ac0004117103420044200370300200342003703" - "002002420037030020004200370360200141201006412041918bc000411210341007410a41" - "dd80c000410c1034200041206a428182848890a0c08001370300200041186a428182848890" - "a0c08001370300200041106a428182848890a0c080013703002000428182848890a0c08001" - "37030841e980c000410e1008410141f780c00041111034200041086a41201008410141f780" - "c0004111103420034100360200200242003703002000420037036002404181802020014114" - "1009220541144604402000412e6a20002d00623a0000200020002900673703c80120002000" - "41ec006a2900003700cd01200041386a20002900cd01370000200020002f01603b012c2000" - "200028006336002f200020002903c801370033200442003703002003420037030020024200" - "370300200042003703602000412c6a411420014120100a22044120470d01200041c2006a20" - "002d00623a0000200041d0016a200041ef006a2900002208370300200041d8016a200041f7" - "006a2900002209370300200041cf006a2008370000200041d7006a2009370000200041df00" - "6a200041ff006a2d00003a0000200020002f01603b01402000200028006336004320002000" - "290067370047200041406b41204100100b4101418881c00041101034200341003602002002" - "4200370300200042003703604181802020014114100c411441a38bc000411c103420034100" - "360200200242003703002000420037036041014181802020014114100d411441bf8bc00041" - "14103402402001410020016b41037122036a220220014d0d00200304402003210403402001" - "41003a0000200141016a2101200441016b22040d000b0b200341016b4107490d0003402001" - "41003a0000200141076a41003a0000200141066a41003a0000200141056a41003a00002001" - "41046a41003a0000200141036a41003a0000200141026a41003a0000200141016a41003a00" - "00200141086a22012002470d000b0b200241c40020036b2203417c716a220120024b044003" - "4020024100360200200241046a22022001490d000b0b024020012003410371220320016a22" - "044f0d002003220204400340200141003a0000200141016a2101200241016b22020d000b0b" - "200341016b4107490d000340200141003a0000200141076a41003a0000200141066a41003a" - "0000200141056a41003a0000200141046a41003a0000200141036a41003a0000200141026a" - "41003a0000200141016a41003a0000200141086a22012004470d000b0b2000418180203602" - "c801410021010340200741c000490440200041e0006a20076a200041c8016a20016a2d0000" - "3a0000200020002802a00141016a22073602a001200141016a22014104470d010b0b200041" - "d8016a22024100360200200041d0016a22054200370300200042003703c801200041e0006a" - "22012007200041c8016a22044114100e411441d38bc0004113103420024100360200200542" - "00370300200042003703c801200120002802a00120044114100f411441e68bc00041231034" - "2002410036020020054200370300200042003703c8014101200120002802a0012004411410" - "10411441898cc000411b10344189803c10114120419881c000411010344189803c10124120" - "41a881c0004120103441014189803c1013412041c881c00041181034200120002802a00110" - "14412041e081c00041171034200120002802a0011015412041f781c0004127103441012001" - "20002802a00110164120419e82c000411f10342000412c6a220341141017410041bd82c000" - "410b1034200041e0016a220742003703002002420037030020054200370300200042003703" - "c801200120002802a001200441201018412041a48cc0004113103441c882c000410c41d482" - "c000410b41df82c000410e1019410141ed82c00041091034200041c0016a200041206a2903" - "00370300200041b8016a200041186a290300370300200041b0016a200041106a2903003703" - "00200020002903083703a801200241003b010020054200370300200042003703c801200341" - "14200041a8016a2206412020044112101a411241b78cc00041071034200241003602002005" - "4200370300200042003703c8012006412020044114101b411441be8cc000410e1034200041" - "003602c8012006412020044104101c410441cc8cc000410d103420064120101d410841f682" - "c000410d103420064120101e410a418383c00041141034200041003602c801200641202004" - "4104101f410441d98cc000410e1034419783c000410d200341141020412f41a483c000410d" - "1034419783c000410d41b183c00041081021411341b983c000410c1034417f410410044171" - "41c583c000411e1034200041003602c8012004417f1004417141e78cc000411e1034200041" - "ca016a41003a0000200041003b01c801200441031004417d41858dc0004124103420004100" - "3602c8012004418094ebdc031004417341a98dc00041231034419783c000410d2003411410" - "20412f41a483c000410d1034419783c000410d41b183c00041081021411341b983c000410c" - "103441021011416f41e383c000411f1034417f20002802a00110144171418284c000411f10" - "342001417f1014417141a184c000411f103420014181201014417441c084c0004120103420" - "0041e094ebdc036a220620002802a0011014417341e084c000411f1034200620002802a001" - "4101100b417341ff84c00041181034200120002802a0014101100b4171419785c000411a10" - "34200742003703002002420037030020054200370300200042003703c801200620002802a0" - "0120044120100a417341cc8dc0004116103420074200370300200242003703002005420037" - "0300200042003703c801200120002802a00120044120100a417141e28dc000411810342007" - "42003703002002420037030020054200370300200042003703c80120034114200341142006" - "20002802a001200441201022417341fa8dc000411c10342007420037030020024200370300" - "20054200370300200042003703c8012003411420034114200120002802a001200441201022" - "417141968ec000411e10342007420037030020024200370300200542003703002000420037" - "03c80141819ac0004114200620002802a001200441201023417341b48ec000411910342007" - "42003703002002420037030020054200370300200042003703c80141819ac0004114200120" - "002802a001200441201023417141cd8ec000411f1034200742003703002002420037030020" - "054200370300200042003703c80141819ac000411441b185c0004114200441201023417141" - "ec8ec00041291034200041dc016a2000413c6a280100360200200041d4016a200041346a29" - "01003702002000200029012c3702cc01200041808080083602c801200041003b01ec012004" - "411841819ac0004114200041ec016a220241021023417141958fc000410e10342006200028" - "02a001422a1001417341c585c00041111034200041003b01ec014102200241021009416f41" - "a38fc000411b1034200041003b01ec01410220024102100c416f41be8fc000412b10342000" - "41003b01ec014101410220024102100d416f41e98fc0004123103441021011416f41e383c0" - "00411f103441021012416f41d685c000412f1034410141021013416f418586c00041271034" - "41e980c0004181201008417441ac86c000411f103441e980c00041c1001008417441cb86c0" - "00411a1034200041003b01ec01200141812020024102100e4174418c90c000412110342000" - "41003b01ec01200141812020024102100f417441ad90c00041311034200041003b01ec0141" - "012001418120200241021010417441de90c0004129103420014181201014417441e586c000" - "41251034200141812010154174418a87c00041351034410120014181201016417441bf87c0" - "00412d103420014181201017417441ec87c00041191034419783c00041812041d482c00041" - "0b41df82c000410e1019417441ed82c00041091034419783c000410d41d482c00041812041" - "df82c000410e1019417441ed82c00041091034419783c000410d41d482c000410b41df82c0" - "004181201019417441ed82c00041091034200041003b01ec01200141812020024102101841" - "74418791c00041211034200041003b01ec0141819ac00041812041819ac000411420024102" - "1023417441a891c00041181034200041003b01ec0120034114200341142001418120200241" - "021024417441c091c000411f1034200041003b01ec01200441812020034114200241021025" - "417441df91c00041221034419783c000410d200620002802a001410010004173418588c000" - "410f1034419783c000410d200620002802a00110214173419488c000411610342001200028" - "02a0014100100b417141aa88c00041231034200041003b01ec0120034114200120002802a0" - "0120024102101a4171418192c000411a1034200041003b01ec01200120002802a001200241" - "02101b4171419b92c00041211034200041003b01ec01200120002802a00120024102101c41" - "7141bc92c00041201034200120002802a001101d417141cd88c00041201034200120002802" - "a001101e417141ed88c00041271034200041003602ec01200120002802a00120024104101f" - "417141dc92c00041211034200041003b01ec01200120002802a00120024102100a417141fd" - "92c00041231034200041003b01ec01200120002802a0014101200241021026417141a093c0" - "0041211034200041003b01ec01200120002802a00122052003411420012005200241021024" - "417141c193c00041271034200041003b01ec0120034114200120002802a001220520012005" - "200241021024417141e893c00041271034200041003b01ec01200120002802a00120034114" - "2002410210274171418f94c00041251034200041003b01ec0120034114200120002802a001" - "200241021027417141b494c00041251034200041003b01ec01200120002802a00120034114" - "200241021028417141d994c000412c1034200041003b01ec0120034114200120002802a001" - "2002410210284171418595c000412c1034200041003b01ec01200120002802a00120024102" - "1029417141b195c000411f1034200041003b01ec01200120002802a001410120024102102a" - "417141d095c00041221034200041003b01ec01200120002802a0012003411441b185c00041" - "14200241021022417141f295c00041211034200041003b01ec0120034114200120002802a0" - "0141b185c00041142002410210224171419396c00041211034200041003b01ec0120012000" - "2802a001410120024102102b417141b496c00041281034200041003b01ec01200441182001" - "20002802a001200241021025417141dc96c00041231034200041003b01ec01200120002802" - "a001410120024102102c417141ff96c00041251034200041003b01ec01200120002802a001" - "410120024102102d417141a497c00041211034200041003b01ec01200120002802a0014101" - "20024102102e417141c597c00041221034200041003b01ec01200120002802a00120034114" - "410120024102102f417141e797c00041241034200041003b01ec0120034114200120002802" - "a001410120024102102f4171418b98c00041241034200041003b01ec01200120002802a001" - "4101200241021030417141af98c000412f1034200041003b01ec01200120002802a0012002" - "41021031417141de98c00041231034200041003b01ec01200120002802a001410120024102" - "10324171418199c00041221034200041003b01ec01200120002802a0014101200241021033" - "417141a399c00041211034200041003b01ec01200120002802a001419489c0004120200241" - "02101a417141c499c000411c1034419783c000410d200120002802a0011020417141b489c0" - "0041221034419797abdd03410d419489c000412041001000417341d689c000411010344197" - "97abdd03410d200341141020417341e689c00041181034419797abdd03410d41b183c00041" - "081021417341fe89c00041171034200120002802a001200141812041001000417441958ac0" - "00410e1034200141812042011001417441a38ac00041121034419783c00041812020034114" - "1020417441b58ac00041161034419783c00041812041b183c00041081021417441b58ac000" - "41161034419783c000410d200120002802a0011021417141cb8ac00041191034200041003b" - "01ec01200120002802a00120034114200241021025417141e099c00041211034200041f001" - "6a240041010f0b418080c000410b417f20052005417f4e1bac1001000b418080c000410b41" - "7f20042004417f4e1bac1001000b0b8b1a0100418080c0000b811a6572726f725f636f6465" - "3d54455354204641494c45442424242424205354415254494e47205741534d204558454355" - "54494f4e2024242424246765745f6c65646765725f73716e6765745f706172656e745f6c65" - "646765725f74696d656765745f626173655f666565746573745f616d656e646d656e74616d" - "656e646d656e745f656e61626c656463616368655f6c65646765725f6f626a6765745f7478" - "5f61727261795f6c656e6765745f63757272656e745f6c65646765725f6f626a5f61727261" - "795f6c656e6765745f6c65646765725f6f626a5f61727261795f6c656e6765745f74785f6e" - "65737465645f61727261795f6c656e6765745f63757272656e745f6c65646765725f6f626a" - "5f6e65737465645f61727261795f6c656e6765745f6c65646765725f6f626a5f6e65737465" - "645f61727261795f6c656e7570646174655f6461746174657374206d657373616765746573" - "74207075626b657974657374207369676e6174757265636865636b5f7369676765745f6e66" - "745f666c6167736765745f6e66745f7472616e736665725f66656574657374696e67207472" - "61636574726163655f6163636f756e74400000000000005f74726163655f616d6f756e7467" - "65745f706172656e745f6c65646765725f686173685f6e65675f7074726765745f74785f61" - "727261795f6c656e5f696e76616c69645f736669656c646765745f74785f6e65737465645f" - "61727261795f6c656e5f6e65675f7074726765745f74785f6e65737465645f61727261795f" - "6c656e5f6e65675f6c656e6765745f74785f6e65737465645f61727261795f6c656e5f746f" - "6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f7074725f6f6f62" - "63616368655f6c65646765725f6f626a5f7074725f6f6f6263616368655f6c65646765725f" - "6f626a5f77726f6e675f6c656e555344303030303030303030303030303030303074726163" - "655f6e756d5f6f6f625f7374726765745f63757272656e745f6c65646765725f6f626a5f61" - "727261795f6c656e5f696e76616c69645f736669656c646765745f6c65646765725f6f626a" - "5f61727261795f6c656e5f696e76616c69645f736669656c64616d656e646d656e745f656e" - "61626c65645f746f6f5f6269675f736c696365616d656e646d656e745f656e61626c65645f" - "746f6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f746f6f5f62" - "69675f736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e6573746564" - "5f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f6c65646765725f6f62" - "6a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963657570646174" - "655f646174615f746f6f5f6269675f736c69636574726163655f6f6f625f736c6963657472" - "6163655f616d6f756e745f6f6f625f736c69636563616368655f6c65646765725f6f626a5f" - "77726f6e675f73697a655f75696e743235366765745f6e66745f666c6167735f77726f6e67" - "5f73697a655f75696e743235366765745f6e66745f7472616e736665725f6665655f77726f" - "6e675f73697a655f75696e7432353630303030303030303030303030303030303030303030" - "3030303030303030303174726163655f6163636f756e745f77726f6e675f73697a655f6163" - "636f756e74696474726163655f6f6f625f737472696e6774726163655f6163636f756e745f" - "6f6f625f737472696e6774726163655f616d6f756e745f6f6f625f737472696e6774726163" - "655f746f6f5f6c6f6e6774726163655f6e756d5f746f6f5f6c6f6e6774726163655f616363" - "6f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f77726f6e675f6c656e6774" - "686765745f706172656e745f6c65646765725f686173686765745f6c65646765725f616363" - "6f756e745f686173686765745f6c65646765725f74785f686173686765745f63757272656e" - "745f6c65646765725f6f626a5f6669656c646765745f6c65646765725f6f626a5f6669656c" - "646765745f74785f6e65737465645f6669656c646765745f63757272656e745f6c65646765" - "725f6f626a5f6e65737465645f6669656c646765745f6c65646765725f6f626a5f6e657374" - "65645f6669656c64636f6d707574655f7368613531325f68616c666765745f6e6674676574" - "5f6e66745f6973737565726765745f6e66745f7461786f6e6765745f6e66745f7365726961" - "6c6765745f706172656e745f6c65646765725f686173685f6e65675f6c656e6765745f7061" - "72656e745f6c65646765725f686173685f6275665f746f6f5f736d616c6c6765745f706172" - "656e745f6c65646765725f686173685f6c656e5f746f6f5f6c6f6e676163636f756e745f6b" - "65796c65745f6c656e5f6f6f626163636f756e745f6b65796c65745f77726f6e675f6c656e" - "6c696e655f6b65796c65745f6c656e5f6f6f625f63757272656e63796c696e655f6b65796c" - "65745f77726f6e675f6c656e5f63757272656e6379616d6d5f6b65796c65745f6c656e5f6f" - "6f625f617373657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6c656e5f617373" - "657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6e6f6e5f7872705f6375727265" - "6e63795f6c656e616d6d5f6b65796c65745f6d70746765745f74785f6669656c645f696e76" - "616c69645f736669656c646765745f63757272656e745f6c65646765725f6f626a5f666965" - "6c645f696e76616c69645f736669656c646765745f6c65646765725f6f626a5f6669656c64" - "5f696e76616c69645f736669656c646765745f74785f6e65737465645f6669656c645f746f" - "6f5f6269675f736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e6573" - "7465645f6669656c645f746f6f5f6269675f736c6963656765745f6c65646765725f6f626a" - "5f6e65737465645f6669656c645f746f6f5f6269675f736c696365636f6d707574655f7368" - "613531325f68616c665f746f6f5f6269675f736c696365616d6d5f6b65796c65745f746f6f" - "5f6269675f736c69636563726564656e7469616c5f6b65796c65745f746f6f5f6269675f73" - "6c6963656d70746f6b656e5f6b65796c65745f746f6f5f6269675f736c6963655f6d707469" - "646765745f6e66745f77726f6e675f73697a655f75696e743235366765745f6e66745f6973" - "737565725f77726f6e675f73697a655f75696e743235366765745f6e66745f7461786f6e5f" - "77726f6e675f73697a655f75696e743235366765745f6e66745f73657269616c5f77726f6e" - "675f73697a655f75696e743235366163636f756e745f6b65796c65745f77726f6e675f7369" - "7a655f6163636f756e746964636865636b5f6b65796c65745f77726f6e675f73697a655f61" - "63636f756e74696463726564656e7469616c5f6b65796c65745f77726f6e675f73697a655f" - "6163636f756e7469643163726564656e7469616c5f6b65796c65745f77726f6e675f73697a" - "655f6163636f756e7469643264656c65676174655f6b65796c65745f77726f6e675f73697a" - "655f6163636f756e7469643164656c65676174655f6b65796c65745f77726f6e675f73697a" - "655f6163636f756e746964326465706f7369745f707265617574685f6b65796c65745f7772" - "6f6e675f73697a655f6163636f756e746964316465706f7369745f707265617574685f6b65" - "796c65745f77726f6e675f73697a655f6163636f756e746964326469645f6b65796c65745f" - "77726f6e675f73697a655f6163636f756e746964657363726f775f6b65796c65745f77726f" - "6e675f73697a655f6163636f756e7469646c696e655f6b65796c65745f77726f6e675f7369" - "7a655f6163636f756e746964316c696e655f6b65796c65745f77726f6e675f73697a655f61" - "63636f756e746964326d70745f69737375616e63655f6b65796c65745f77726f6e675f7369" - "7a655f6163636f756e7469646d70746f6b656e5f6b65796c65745f77726f6e675f73697a65" - "5f6163636f756e7469646e66745f6f666665725f6b65796c65745f77726f6e675f73697a65" - "5f6163636f756e7469646f666665725f6b65796c65745f77726f6e675f73697a655f616363" - "6f756e7469646f7261636c655f6b65796c65745f77726f6e675f73697a655f6163636f756e" - "7469647061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e7469" - "64317061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e746964" - "327065726d697373696f6e65645f646f6d61696e5f6b65796c65745f77726f6e675f73697a" - "655f6163636f756e7469647369676e6572735f6b65796c65745f77726f6e675f73697a655f" - "6163636f756e7469647469636b65745f6b65796c65745f77726f6e675f73697a655f616363" - "6f756e7469647661756c745f6b65796c65745f77726f6e675f73697a655f6163636f756e74" - "69646765745f6e66745f77726f6e675f73697a655f6163636f756e7469646d70746f6b656e" - "5f6b65796c65745f6d707469645f77726f6e675f6c656e677468004d0970726f6475636572" - "7302086c616e6775616765010452757374000c70726f6365737365642d6279010572757374" - "631d312e38352e31202834656231363132353020323032352d30332d31352900490f746172" - "6765745f6665617475726573042b0f6d757461626c652d676c6f62616c732b087369676e2d" - "6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; - -extern std::string const floatTestsWasmHex = - "0061736d0100000001430860057f7f7f7f7f017f60047e7f7f7f017f60047f7f7f7f017f60" - "057f7e7f7f7f017f60077f7f7f7f7f7f7f017f60067f7f7f7f7f7f017f60037f7f7e017f60" - "00017f02c9020e08686f73745f6c6962057472616365000008686f73745f6c69620e666c6f" - "61745f66726f6d5f696e74000108686f73745f6c69620f666c6f61745f66726f6d5f75696e" - "74000008686f73745f6c69621274726163655f6f70617175655f666c6f6174000208686f73" - "745f6c696209666c6f61745f736574000308686f73745f6c69620d666c6f61745f636f6d70" - "617265000208686f73745f6c696209666c6f61745f616464000408686f73745f6c69620e66" - "6c6f61745f7375627472616374000408686f73745f6c69620e666c6f61745f6d756c746970" - "6c79000408686f73745f6c69620c666c6f61745f646976696465000408686f73745f6c6962" - "09666c6f61745f706f77000508686f73745f6c69620974726163655f6e756d000608686f73" - "745f6c69620a666c6f61745f726f6f74000508686f73745f6c696209666c6f61745f6c6f67" - "00000302010705030100110619037f01418080c0000b7f0041b48ac0000b7f0041c08ac000" - "0b072e04066d656d6f727902000666696e697368000e0a5f5f646174615f656e6403010b5f" - "5f686561705f6261736503020acf1301cc1301027f23808080800041206b22002480808080" - "00418080c08000411d4100410041001080808080001a2000420037031002400240428ce000" - "200041106a410841001081808080004108470d00419d80c080004117200041106a41084101" - "1080808080001a0c010b41b480c08000411e4100410041001080808080001a0b2000428ce0" - "0037031802400240200041186a4108200041106a410841001082808080004108470d0041d2" - "80c080004117200041106a41081083808080001a0c010b41e980c08000411e410041004100" - "1080808080001a0b02400240410242fb00200041106a410841001084808080004108470d00" - "418781c080004121200041106a41081083808080001a0c010b41a881c08000412641004100" - "41001080808080001a0b41ce81c08000411541e381c0800041081083808080001a41f381c0" - "8000411641eb81c0800041081083808080001a418982c08000411b41004100410010808080" - "80001a20004200370318024002404201200041186a410841001081808080004108470d0041" - "a482c08000410f200041186a41081083808080001a0c010b41b382c0800041164100410041" - "001080808080001a0b02400240200041186a410841e381c0800041081085808080000d0041" - "c982c08000411b4100410041001080808080001a0c010b41e482c08000411b410041004100" - "1080808080001a0b02400240200041186a410841eb81c0800041081085808080004101470d" - "0041ff82c0800041234100410041001080808080001a0c010b41a283c08000412441004100" - "41001080808080001a0b0240024041eb81c080004108200041186a41081085808080004102" - "470d0041c683c0800041234100410041001080808080001a0c010b41e983c0800041244100" - "410041001080808080001a0b418d84c0800041204100410041001080808080001a200042d4" - "87b6f4c7d4b1c000370310410921010340200041106a410841e381c080004108200041106a" - "410841001086808080001a2001417f6a22010d000b20004200370318420a200041186a4108" - "41001081808080001a02400240200041186a4108200041106a41081085808080000d0041ad" - "84c0800041144100410041001080808080001a0c010b41c184c08000411341004100410010" - "80808080001a0b410b21010340200041106a410841e381c080004108200041106a41084100" - "1087808080001a2001417f6a22010d000b02400240200041106a410841eb81c08000410810" - "85808080000d0041d484c0800041194100410041001080808080001a0c010b41ed84c08000" - "41184100410041001080808080001a0b418585c0800041234100410041001080808080001a" - "20004200370300420a2000410841001081808080001a200042d487b6f4c7d4b1c000370308" - "410621010340200041086a410820004108200041086a410841001088808080001a2001417f" - "6a22010d000b2000420037031042c0843d200041106a410841001081808080001a02400240" - "200041106a4108200041086a41081085808080000d0041a885c08000411941004100410010" - "80808080001a0c010b41c185c0800041184100410041001080808080001a0b410721010340" - "200041086a410820004108200041086a410841001089808080001a2001417f6a22010d000b" - "20004200370318417f4201200041186a410841001084808080001a02400240200041086a41" - "08200041186a41081085808080000d0041d985c0800041174100410041001080808080001a" - "0c010b41f085c0800041164100410041001080808080001a0b418686c08000411741004100" - "41001080808080001a2000420037030841e381c0800041084103200041086a41084100108a" - "808080001a419d86c080004112200041086a41081083808080001a41eb81c0800041084106" - "200041086a41084100108a808080001a41af86c080004118200041086a4108108380808000" - "1a200042003703104209200041106a410841001081808080001a200041106a410841022000" - "41086a41084100108a808080001a41c786c080004114200041086a41081083808080001a20" - "0041106a41084100200041086a41084100108a808080001a41db86c080004117200041086a" - "41081083808080001a200042003703184200200041186a410841001081808080001a200041" - "186a41084102200041086a41084100108a808080001a41f286c080004114200041086a4108" - "1083808080001a418687c080004138200041186a41084100200041086a41084100108a8080" - "8000ac108b808080001a41be87c0800041184100410041001080808080001a200042003703" - "084209200041086a410841001081808080001a20004200370310200041086a410841022000" - "41106a41084100108c808080001a41d687c080004112200041106a41081083808080001a20" - "0041086a41084103200041106a41084100108c808080001a41e887c080004112200041106a" - "41081083808080001a2000420037031842c0843d200041186a410841001081808080001a20" - "0041186a41084103200041106a41084100108c808080001a41fa87c080004118200041106a" - "41081083808080001a200041186a41084106200041106a41084100108c808080001a419288" - "c08000411c200041106a41081083808080001a41ae88c08000411741004100410010808080" - "80001a2000420037031042c0843d200041106a410841001081808080001a20004200370318" - "200041106a4108200041186a41084100108d808080001a41c588c080004114200041186a41" - "081083808080001a41d988c08000411a4100410041001080808080001a2000420037031841" - "e381c08000410841eb81c080004108200041186a410841001088808080001a0240024041eb" - "81c080004108200041186a41081085808080000d0041f388c0800041164100410041001080" - "808080001a0c010b418989c0800041154100410041001080808080001a0b41eb81c0800041" - "0841eb81c080004108200041186a410841001088808080001a0240024041e381c080004108" - "200041186a41081085808080000d00419e89c0800041174100410041001080808080001a0c" - "010b41b589c0800041164100410041001080808080001a0b41cb89c08000411a4100410041" - "001080808080001a2000420037031020004200370318420a200041186a4108410010818080" - "80001a41e381c080004108200041186a4108200041106a410841001089808080001a41e589" - "c080004119200041106a41081083808080001a41e381c080004108200041106a4108200041" - "106a410841001089808080001a41fe89c08000410f200041106a41081083808080001a0240" - "0240200041186a4108200041106a41081085808080000d00418d8ac0800041144100410041" - "001080808080001a0c010b41a18ac0800041134100410041001080808080001a0b20004120" - "6a24808080800041010b0bbe0a0100418080c0000bb40a0a24242420746573745f666c6f61" - "745f66726f6d5f7761736d202424242020666c6f61742066726f6d20693634203132333030" - "3a2020666c6f61742066726f6d206936342031323330303a206661696c65642020666c6f61" - "742066726f6d207536342031323330303a2020666c6f61742066726f6d2075363420313233" - "30303a206661696c65642020666c6f61742066726f6d2065787020322c206d616e74697373" - "61203132333a2020666c6f61742066726f6d2065787020322c206d616e746973736120333a" - "206661696c65642020666c6f61742066726f6d20636f6e737420313ad4838d7ea4c6800094" - "838d7ea4c680002020666c6f61742066726f6d20636f6e7374202d313a0a24242420746573" - "745f666c6f61745f636f6d70617265202424242020666c6f61742066726f6d20313a202066" - "6c6f61742066726f6d20313a206661696c65642020666c6f61742066726f6d2031203d3d20" - "464c4f41545f4f4e452020666c6f61742066726f6d203120213d20464c4f41545f4f4e4520" - "20666c6f61742066726f6d2031203e20464c4f41545f4e454741544956455f4f4e45202066" - "6c6f61742066726f6d203120213e20464c4f41545f4e454741544956455f4f4e452020464c" - "4f41545f4e454741544956455f4f4e45203c20666c6f61742066726f6d20312020464c4f41" - "545f4e454741544956455f4f4e4520213c20666c6f61742066726f6d20310a242424207465" - "73745f666c6f61745f6164645f737562747261637420242424202072657065617465642061" - "64643a20676f6f6420207265706561746564206164643a2062616420207265706561746564" - "2073756274726163743a20676f6f64202072657065617465642073756274726163743a2062" - "61640a24242420746573745f666c6f61745f6d756c7469706c795f64697669646520242424" - "20207265706561746564206d756c7469706c793a20676f6f6420207265706561746564206d" - "756c7469706c793a2062616420207265706561746564206469766964653a20676f6f642020" - "7265706561746564206469766964653a206261640a24242420746573745f666c6f61745f70" - "6f77202424242020666c6f61742063756265206f6620313a2020666c6f6174203674682070" - "6f776572206f66202d313a2020666c6f617420737175617265206f6620393a2020666c6f61" - "742030746820706f776572206f6620393a2020666c6f617420737175617265206f6620303a" - "2020666c6f61742030746820706f776572206f6620302028657870656374696e6720494e56" - "414c49445f504152414d53206572726f72293a0a24242420746573745f666c6f61745f726f" - "6f74202424242020666c6f61742073717274206f6620393a2020666c6f6174206362727420" - "6f6620393a2020666c6f61742063627274206f6620313030303030303a2020666c6f617420" - "36746820726f6f74206f6620313030303030303a0a24242420746573745f666c6f61745f6c" - "6f672024242420206c6f675f3130206f6620313030303030303a0a24242420746573745f66" - "6c6f61745f6e65676174652024242420206e656761746520636f6e737420313a20676f6f64" - "20206e656761746520636f6e737420313a2062616420206e656761746520636f6e7374202d" - "313a20676f6f6420206e656761746520636f6e7374202d313a206261640a24242420746573" - "745f666c6f61745f696e76657274202424242020696e76657274206120666c6f6174206672" - "6f6d2031303a2020696e7665727420616761696e3a2020696e766572742074776963653a20" - "676f6f642020696e766572742074776963653a20626164009c06046e616d65001110666c6f" - "61745f74657374732e7761736d01e1050f002b5f5a4e387872706c5f73746434686f737435" - "7472616365313768303332393563316538663365373233614501355f5a4e387872706c5f73" - "746434686f73743134666c6f61745f66726f6d5f696e743137683032306436373439326164" - "39346333304502365f5a4e387872706c5f73746434686f73743135666c6f61745f66726f6d" - "5f75696e74313768346166373638366538353062383432364503395f5a4e387872706c5f73" - "746434686f7374313874726163655f6f70617175655f666c6f617431376831396639386666" - "35663362313932336245042f5f5a4e387872706c5f73746434686f737439666c6f61745f73" - "6574313768323964346230383964626561326664624505345f5a4e387872706c5f73746434" - "686f73743133666c6f61745f636f6d70617265313768346362313239626634623330373233" - "6445062f5f5a4e387872706c5f73746434686f737439666c6f61745f616464313768383661" - "336165636435336234643937374507355f5a4e387872706c5f73746434686f73743134666c" - "6f61745f7375627472616374313768653033313036323931393464333931364508355f5a4e" - "387872706c5f73746434686f73743134666c6f61745f6d756c7469706c7931376830323839" - "3337633039656534323630644509335f5a4e387872706c5f73746434686f73743132666c6f" - "61745f64697669646531376834363036323038303562623237353632450a2f5f5a4e387872" - "706c5f73746434686f737439666c6f61745f706f7731376833326463303662646430303338" - "626331450b2f5f5a4e387872706c5f73746434686f73743974726163655f6e756d31376830" - "336535336633646539393463633033450c315f5a4e387872706c5f73746434686f73743130" - "666c6f61745f726f6f7431376863656632313139376565656136653630450d2f5f5a4e3878" - "72706c5f73746434686f737439666c6f61745f6c6f67313768323530663038303633353663" - "35653639450e0666696e697368071201000f5f5f737461636b5f706f696e746572090a0100" - "072e726f64617461004d0970726f64756365727302086c616e677561676501045275737400" - "0c70726f6365737365642d6279010572757374631d312e38382e3020283662303062633338" - "3820323032352d30362d3233290094010f7461726765745f6665617475726573082b0b6275" - "6c6b2d6d656d6f72792b0f62756c6b2d6d656d6f72792d6f70742b1663616c6c2d696e6469" - "726563742d6f7665726c6f6e672b0a6d756c746976616c75652b0f6d757461626c652d676c" - "6f62616c732b136e6f6e7472617070696e672d6670746f696e742b0f7265666572656e6365" - "2d74797065732b087369676e2d657874"; - -extern std::string const float0Hex = - "0061736d0100000001290560057f7f7f7f7f017f60047e7f7f7f017f6007" - "7f7f7f7f7f7f7f017f60047f7f7f7f017f6000017f025f0408686f73745f" - "6c6962057472616365000008686f73745f6c69620e666c6f61745f66726f" - "6d5f696e74000108686f73745f6c69620e666c6f61745f73756274726163" - "74000208686f73745f6c69620d666c6f61745f636f6d7061726500030302" - "010405030100110619037f01418080c0000b7f00419281c0000b7f0041a0" - "81c0000b072e04066d656d6f727902000666696e69736800040a5f5f6461" - "74615f656e6403010b5f5f686561705f6261736503020abe0201bb020101" - "7f23808080800041206b2200248080808000418080c08000411541004100" - "41001080808080001a200042003703084200200041086a41084100108180" - "8080001a20004200370310420a200041106a410841001081808080001a20" - "0042003703180240200041106a4108200041106a4108200041186a410841" - "001082808080004108460d00419580c08000411541004100410010808080" - "80001a0b02400240200041086a4108200041186a41081083808080000d00" - "41aa80c0800041174100410041001080808080001a0c010b41c180c08000" - "41164100410041001080808080001a0b02400240200041086a410841d780" - "c0800041081083808080000d0041df80c08000411a410041004100108080" - "8080001a0c010b41f980c0800041194100410041001080808080001a0b20" - "0041206a24808080800041010b0b9c010100418080c0000b92010a242424" - "20746573745f666c6f61745f30202424242020666c6f61742031302d3130" - "3a206661696c65642020666c6f6174203020636f6d706172653a20676f6f" - "642020666c6f6174203020636f6d706172653a2062616480000000000000" - "002020464c4f41545f5a45524f20636f6d706172653a20676f6f64202046" - "4c4f41545f5a45524f20636f6d706172653a20626164009502046e616d65" - "001110666c6f61745f74657374732e7761736d01da0105002b5f5a4e3878" - "72706c5f73746434686f7374357472616365313768616338383262323664" - "656162656436364501355f5a4e387872706c5f73746434686f7374313466" - "6c6f61745f66726f6d5f696e743137683032343066386533613839643139" - "39654502355f5a4e387872706c5f73746434686f73743134666c6f61745f" - "737562747261637431376864363430633135323334353432393563450334" - "5f5a4e387872706c5f73746434686f73743133666c6f61745f636f6d7061" - "72653137683663386465656231323864393638386645040666696e697368" - "071201000f5f5f737461636b5f706f696e746572090a0100072e726f6461" - "7461004d0970726f64756365727302086c616e6775616765010452757374" - "000c70726f6365737365642d6279010572757374631d312e38392e302028" - "32393438333838336520323032352d30382d3034290094010f7461726765" - "745f6665617475726573082b0b62756c6b2d6d656d6f72792b0f62756c6b" - "2d6d656d6f72792d6f70742b1663616c6c2d696e6469726563742d6f7665" - "726c6f6e672b0a6d756c746976616c75652b0f6d757461626c652d676c6f" - "62616c732b136e6f6e7472617070696e672d6670746f696e742b0f726566" - "6572656e63652d74797065732b087369676e2d657874"; - -extern std::string const disabledFloatHex = - "0061736d010000000108026000006000017f03030200010503010002063e" - "0a7f004180080b7f004180080b7f004180100b7f004180100b7f00418090" - "040b7f004180080b7f00418090040b7f00418080080b7f0041000b7f0041" - "010b07b0010d066d656d6f72790200115f5f7761736d5f63616c6c5f6374" - "6f727300000666696e69736800010362756603000c5f5f64736f5f68616e" - "646c6503010a5f5f646174615f656e6403020b5f5f737461636b5f6c6f77" - "03030c5f5f737461636b5f6869676803040d5f5f676c6f62616c5f626173" - "6503050b5f5f686561705f6261736503060a5f5f686561705f656e640307" - "0d5f5f6d656d6f72795f6261736503080c5f5f7461626c655f6261736503" - "090a150202000b100043000000c54300200045921a41010b"; diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/fixtures.h b/src/test/app/wasm_fixtures/wasm_fixtures/fixtures.h deleted file mode 100644 index 0e7e3785ea..0000000000 --- a/src/test/app/wasm_fixtures/wasm_fixtures/fixtures.h +++ /dev/null @@ -1,52 +0,0 @@ -//------------------------------------------------------------------------------ -/* - This file is part of rippled: https://github.com/ripple/rippled - Copyright (c) 2025 Ripple Labs Inc. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -*/ -//============================================================================== - -#pragma once - -// TODO: consider moving these to separate files (and figure out the build) - -#include - -extern std::string const ledgerSqnWasmHex; - -extern std::string const allHostFunctionsWasmHex; - -extern std::string const deepRecursionHex; - -extern std::string const fibWasmHex; - -extern std::string const b58WasmHex; - -extern std::string const sha512PureWasmHex; - -extern std::string const zkProofWasmHex; - -extern std::string const sp1WasmHex; - -extern std::string const hfPerfTest; - -extern std::string const allKeyletsWasmHex; - -extern std::string const codecovTestsWasmHex; - -extern std::string const floatTestsWasmHex; - -extern std::string const float0Hex; - -extern std::string const disabledFloatHex; diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/zk_proof/Cargo.lock b/src/test/app/wasm_fixtures/zk_proof/Cargo.lock similarity index 100% rename from src/test/app/wasm_fixtures/wasm_fixtures/zk_proof/Cargo.lock rename to src/test/app/wasm_fixtures/zk_proof/Cargo.lock diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/zk_proof/Cargo.toml b/src/test/app/wasm_fixtures/zk_proof/Cargo.toml similarity index 100% rename from src/test/app/wasm_fixtures/wasm_fixtures/zk_proof/Cargo.toml rename to src/test/app/wasm_fixtures/zk_proof/Cargo.toml diff --git a/src/test/app/wasm_fixtures/wasm_fixtures/zk_proof/src/lib.rs b/src/test/app/wasm_fixtures/zk_proof/src/lib.rs similarity index 100% rename from src/test/app/wasm_fixtures/wasm_fixtures/zk_proof/src/lib.rs rename to src/test/app/wasm_fixtures/zk_proof/src/lib.rs From ba52d348287dd6635242bf18351259e19aa68f28 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 11 Sep 2025 18:09:08 -0400 Subject: [PATCH 013/137] test: improve codecov in `HostFuncWrapper.cpp` (#5730) --- src/test/app/Wasm_test.cpp | 4 +- .../wasm_fixtures/codecov_tests/Cargo.lock | 2 +- .../wasm_fixtures/codecov_tests/Cargo.toml | 2 +- .../codecov_tests/src/host_bindings_loose.rs | 9 - .../wasm_fixtures/codecov_tests/src/lib.rs | 313 +++++++++- src/test/app/wasm_fixtures/copyFixtures.py | 4 +- src/test/app/wasm_fixtures/fixtures.cpp | 547 ++++++++++-------- src/xrpld/app/wasm/detail/HostFuncWrapper.cpp | 30 +- 8 files changed, 615 insertions(+), 296 deletions(-) diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index a48e16f1eb..bd4f7d4380 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -649,7 +649,7 @@ struct Wasm_test : public beast::unit_test::suite Bytes const wasm(wasmStr.begin(), wasmStr.end()); TestHostFunctions hfs(env, 0); - auto const allowance = 121'895; + auto const allowance = 148'406; auto re = runEscrowWasm( wasm, ESCROW_FUNCTION_NAME, {}, &hfs, allowance, env.journal); @@ -709,7 +709,7 @@ struct Wasm_test : public beast::unit_test::suite testWasmSha(); testWasmB58(); - // runing too long + // running too long // testWasmSP1Verifier(); testWasmBG16Verifier(); diff --git a/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock b/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock index 704846d35a..28d4d65630 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock +++ b/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock @@ -12,4 +12,4 @@ dependencies = [ [[package]] name = "xrpl-std" version = "0.5.1-devnet5" -source = "git+https://github.com/ripple/craft.git?branch=last-hfs2#ec4a3fb2ea45a7f27b7190976d37d3596e2ec29e" +source = "git+https://github.com/ripple/craft.git?branch=lastdevnet#6b20669b20561b9d0f09678f44ccbddb84ef9f47" diff --git a/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml b/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml index 52ca804bc0..c9b4c53490 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml +++ b/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml @@ -15,4 +15,4 @@ opt-level = 's' panic = "abort" [dependencies] -xrpl-std = { git = "https://github.com/ripple/craft.git", branch = "last-hfs2", package = "xrpl-std" } +xrpl-std = { git = "https://github.com/ripple/craft.git", branch = "lastdevnet", package = "xrpl-std" } diff --git a/src/test/app/wasm_fixtures/codecov_tests/src/host_bindings_loose.rs b/src/test/app/wasm_fixtures/codecov_tests/src/host_bindings_loose.rs index 706add2ed7..c99a0047d5 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/src/host_bindings_loose.rs +++ b/src/test/app/wasm_fixtures/codecov_tests/src/host_bindings_loose.rs @@ -32,15 +32,6 @@ unsafe extern "C" { out_buff_len: usize, ) -> i32; - pub fn amm_keylet( - issue1_ptr: *const u8, - issue1_len: usize, - issue2_ptr: i32, - issue2_len: i32, - out_buff_ptr: *mut u8, - out_buff_len: usize, - ) -> i32; - pub fn line_keylet( account1_ptr: *const u8, account1_len: usize, diff --git a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs index 36c61fe439..0e755ebb75 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs +++ b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs @@ -6,13 +6,13 @@ extern crate std; use core::panic; use xrpl_std::core::current_tx::escrow_finish::{get_current_escrow_finish, EscrowFinish}; use xrpl_std::core::current_tx::traits::TransactionCommonFields; -use xrpl_std::core::error_codes; use xrpl_std::core::locator::Locator; use xrpl_std::core::types::amount::asset::Asset; use xrpl_std::core::types::amount::asset::XrpAsset; use xrpl_std::core::types::amount::mpt_id::MptId; use xrpl_std::core::types::keylets; use xrpl_std::host; +use xrpl_std::host::error_codes; use xrpl_std::host::trace::{trace, trace_num as trace_number}; use xrpl_std::sfield; @@ -52,7 +52,8 @@ pub extern "C" fn finish() -> i32 { // ######################################## // Step #1: Test all host function happy paths // Note: not testing all the keylet functions, - // that's in a separate test file. + // that's in a separate test file (all_keylets). + // The float tests are also in a separate file (float_tests). // ######################################## check_result(unsafe { host::get_ledger_sqn() }, 12345, "get_ledger_sqn"); check_result( @@ -338,6 +339,38 @@ pub extern "C" fn finish() -> i32 { // Step #3: Test getData[Type] edge cases // ######################################## + // uint64 + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_from_uint( + locator.as_ptr().wrapping_add(1_000_000_000), + 8, + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_from_uint_len_oob", + ) + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_from_uint( + locator.as_ptr(), + locator.len(), + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::INVALID_PARAMS, + "float_from_uint_wrong_len", + ) + }); + // SField check_result( unsafe { host::get_tx_array_len(2) }, // not a valid SField value @@ -468,11 +501,11 @@ pub extern "C" fn finish() -> i32 { with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { - host_bindings_loose::amm_keylet( + host::amm_keylet( asset1_bytes.as_ptr(), asset1_bytes.len(), - locator.as_ptr() as i32 + 1_000_000_000, - locator.len() as i32, + locator.as_ptr().wrapping_add(1_000_000_000), + locator.len(), ptr, len, ) @@ -484,11 +517,11 @@ pub extern "C" fn finish() -> i32 { with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { - host_bindings_loose::amm_keylet( + host::amm_keylet( asset1_bytes.as_ptr(), asset1_bytes.len(), - locator.as_ptr() as i32, - locator.len() as i32, + locator.as_ptr(), + locator.len(), ptr, len, ) @@ -501,11 +534,11 @@ pub extern "C" fn finish() -> i32 { with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { - host_bindings_loose::amm_keylet( + host::amm_keylet( asset1_bytes.as_ptr(), asset1_bytes.len(), - currency.as_ptr() as i32, - currency.len() as i32, + currency.as_ptr(), + currency.len(), ptr, len, ) @@ -514,6 +547,23 @@ pub extern "C" fn finish() -> i32 { "amm_keylet_len_wrong_non_xrp_currency_len", ) }); + let xrpissue: &[u8] = &[0; 40]; // 40 bytes + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::amm_keylet( + xrpissue.as_ptr(), + xrpissue.len(), + asset1_bytes.as_ptr(), + asset1_bytes.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "amm_keylet_len_wrong_xrp_currency_len", + ) + }); let mptid = MptId::new(1, account); with_buffer::<2, _, _>(|ptr, len| { check_result( @@ -755,6 +805,19 @@ pub extern "C" fn finish() -> i32 { error_codes::POINTER_OUT_OF_BOUNDS, "trace_oob_slice", ); + let float: [u8; 8] = [0xD4, 0x83, 0x8D, 0x7E, 0xA4, 0xC6, 0x80, 0x00]; + check_result( + unsafe { + host::trace_opaque_float( + message.as_ptr(), + message.len(), + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "trace_opaque_float_oob_slice", + ); check_result( unsafe { host::trace_amount( @@ -767,6 +830,213 @@ pub extern "C" fn finish() -> i32 { error_codes::POINTER_OUT_OF_BOUNDS, "trace_amount_oob_slice", ); + check_result( + unsafe { + host::float_compare( + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + float.as_ptr(), + float.len(), + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_compare_oob_slice1", + ); + check_result( + unsafe { + host::float_compare( + float.as_ptr(), + float.len(), + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_compare_oob_slice2", + ); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_add( + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + float.as_ptr(), + float.len(), + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_add_oob_slice1", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_add( + float.as_ptr(), + float.len(), + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_add_oob_slice2", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_subtract( + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + float.as_ptr(), + float.len(), + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_subtract_oob_slice1", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_subtract( + float.as_ptr(), + float.len(), + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_subtract_oob_slice2", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_multiply( + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + float.as_ptr(), + float.len(), + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_multiply_oob_slice1", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_multiply( + float.as_ptr(), + float.len(), + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_multiply_oob_slice2", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_divide( + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + float.as_ptr(), + float.len(), + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_divide_oob_slice1", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_divide( + float.as_ptr(), + float.len(), + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_divide_oob_slice2", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_root( + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + 3, + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_root_oob_slice", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_pow( + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + 3, + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_pow_oob_slice", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_log( + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_log_oob_slice", + ) + }); // invalid UInt256 @@ -1143,6 +1413,18 @@ pub extern "C" fn finish() -> i32 { error_codes::POINTER_OUT_OF_BOUNDS, "trace_oob_string", ); + check_result( + unsafe { + host::trace_opaque_float( + message.as_ptr().wrapping_add(1_000_000_000), + message.len(), + float.as_ptr(), + float.len(), + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "trace_opaque_float_oob_string", + ); check_result( unsafe { host::trace_account( @@ -1188,6 +1470,13 @@ pub extern "C" fn finish() -> i32 { error_codes::DATA_FIELD_TOO_LARGE, "trace_num_too_long", ); + check_result( + unsafe { + host::trace_opaque_float(message.as_ptr(), long_len, float.as_ptr(), float.len()) + }, + error_codes::DATA_FIELD_TOO_LARGE, + "trace_opaque_float_too_long", + ); check_result( unsafe { host::trace_account( @@ -1203,7 +1492,7 @@ pub extern "C" fn finish() -> i32 { check_result( unsafe { host::trace_amount(message.as_ptr(), long_len, amount.as_ptr(), amount.len()) }, error_codes::DATA_FIELD_TOO_LARGE, - "trace_account_too_long", + "trace_amount_too_long", ); // trace amount errors diff --git a/src/test/app/wasm_fixtures/copyFixtures.py b/src/test/app/wasm_fixtures/copyFixtures.py index eb1b6d0f9e..b0c8ad1af2 100644 --- a/src/test/app/wasm_fixtures/copyFixtures.py +++ b/src/test/app/wasm_fixtures/copyFixtures.py @@ -85,8 +85,8 @@ def process_c(project_name): os.path.join(os.path.dirname(__file__), f"{project_name}.wasm") ) build_cmd = ( - f"$CC --sysroot=$SYSROOT -I$SYSROOT/include/wasm32-wasi " - f"-O3 -ffast-math --target=wasm32 -fno-exceptions -fno-threadsafe-statics -fvisibility=default -Wl,--export-all -Wl,--no-entry -Wl,--allow-undefined -DNDEBUG --no-standard-libraries -fno-builtin-memset " + f"$CC --sysroot=$SYSROOT " + f"-O3 -ffast-math --target=wasm32 -fno-exceptions -fno-threadsafe-statics -fvisibility=default -Wl,--export-all -Wl,--no-entry -Wl,--allow-undefined -DNDEBUG --no-standard-libraries -fno-builtin-memset " f"-o {wasm_path} {project_path}" f"&& wasm-opt {wasm_path} {OPT} -o {wasm_path}" ) diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index ec91496428..de2ad6291b 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -9854,277 +9854,316 @@ extern std::string const allKeyletsWasmHex = extern std::string const codecovTestsWasmHex = "0061736d0100000001570b60047f7f7f7f017f60057f7f7f7f7f017f60027f7f017f60067f" - "7f7f7f7f7f017f6000017f60037f7f7f017f60017f017f60087f7f7f7f7f7f7f7f017f6003" - "7f7f7e017f60077f7f7f7f7f7f7f017f60047f7f7f7f0002e70b3408686f73745f6c696205" - "7472616365000108686f73745f6c69620974726163655f6e756d000808686f73745f6c6962" - "0e6765745f6c65646765725f73716e000408686f73745f6c6962166765745f706172656e74" - "5f6c65646765725f74696d65000408686f73745f6c6962166765745f706172656e745f6c65" + "7f7f7f7f7f017f60077f7f7f7f7f7f7f017f6000017f60037f7f7f017f60017f017f60087f" + "7f7f7f7f7f7f7f017f60037f7f7e017f60047f7f7f7f0002da0d3e08686f73745f6c696205" + "7472616365000108686f73745f6c69620974726163655f6e756d000908686f73745f6c6962" + "0e6765745f6c65646765725f73716e000508686f73745f6c6962166765745f706172656e74" + "5f6c65646765725f74696d65000508686f73745f6c6962166765745f706172656e745f6c65" "646765725f68617368000208686f73745f6c6962176765745f6c65646765725f6163636f75" "6e745f68617368000208686f73745f6c6962126765745f6c65646765725f74785f68617368" - "000208686f73745f6c69620c6765745f626173655f666565000408686f73745f6c69621161" + "000208686f73745f6c69620c6765745f626173655f666565000508686f73745f6c69621161" "6d656e646d656e745f656e61626c6564000208686f73745f6c69620c6765745f74785f6669" - "656c64000508686f73745f6c69620e6163636f756e745f6b65796c6574000008686f73745f" - "6c69621063616368655f6c65646765725f6f626a000508686f73745f6c69621c6765745f63" - "757272656e745f6c65646765725f6f626a5f6669656c64000508686f73745f6c6962146765" + "656c64000608686f73745f6c69620e6163636f756e745f6b65796c6574000008686f73745f" + "6c69621063616368655f6c65646765725f6f626a000608686f73745f6c69621c6765745f63" + "757272656e745f6c65646765725f6f626a5f6669656c64000608686f73745f6c6962146765" "745f6c65646765725f6f626a5f6669656c64000008686f73745f6c6962136765745f74785f" "6e65737465645f6669656c64000008686f73745f6c6962236765745f63757272656e745f6c" "65646765725f6f626a5f6e65737465645f6669656c64000008686f73745f6c69621b676574" "5f6c65646765725f6f626a5f6e65737465645f6669656c64000108686f73745f6c69621067" - "65745f74785f61727261795f6c656e000608686f73745f6c6962206765745f63757272656e" - "745f6c65646765725f6f626a5f61727261795f6c656e000608686f73745f6c696218676574" + "65745f74785f61727261795f6c656e000708686f73745f6c6962206765745f63757272656e" + "745f6c65646765725f6f626a5f61727261795f6c656e000708686f73745f6c696218676574" "5f6c65646765725f6f626a5f61727261795f6c656e000208686f73745f6c6962176765745f" "74785f6e65737465645f61727261795f6c656e000208686f73745f6c6962276765745f6375" "7272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e00020868" "6f73745f6c69621f6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c" - "656e000508686f73745f6c69620b7570646174655f64617461000208686f73745f6c696213" + "656e000608686f73745f6c69620b7570646174655f64617461000208686f73745f6c696213" "636f6d707574655f7368613531325f68616c66000008686f73745f6c696209636865636b5f" "736967000308686f73745f6c6962076765745f6e6674000308686f73745f6c69620e676574" "5f6e66745f697373756572000008686f73745f6c69620d6765745f6e66745f7461786f6e00" "0008686f73745f6c69620d6765745f6e66745f666c616773000208686f73745f6c69621467" "65745f6e66745f7472616e736665725f666565000208686f73745f6c69620e6765745f6e66" "745f73657269616c000008686f73745f6c69620d74726163655f6163636f756e7400000868" - "6f73745f6c69620c74726163655f616d6f756e74000008686f73745f6c69620b6c696e655f" - "6b65796c6574000708686f73745f6c69620a616d6d5f6b65796c6574000308686f73745f6c" - "69621163726564656e7469616c5f6b65796c6574000708686f73745f6c69620e6d70746f6b" - "656e5f6b65796c6574000308686f73745f6c69620c636865636b5f6b65796c657400010868" - "6f73745f6c69620f64656c65676174655f6b65796c6574000308686f73745f6c6962166465" - "706f7369745f707265617574685f6b65796c6574000308686f73745f6c69620a6469645f6b" - "65796c6574000008686f73745f6c69620d657363726f775f6b65796c6574000108686f7374" - "5f6c6962136d70745f69737375616e63655f6b65796c6574000108686f73745f6c6962106e" - "66745f6f666665725f6b65796c6574000108686f73745f6c69620c6f666665725f6b65796c" - "6574000108686f73745f6c69620d6f7261636c655f6b65796c6574000108686f73745f6c69" - "620e7061796368616e5f6b65796c6574000908686f73745f6c69621a7065726d697373696f" - "6e65645f646f6d61696e5f6b65796c6574000108686f73745f6c69620e7369676e6572735f" - "6b65796c6574000008686f73745f6c69620d7469636b65745f6b65796c6574000108686f73" - "745f6c69620c7661756c745f6b65796c657400010303020a0405030100110619037f014180" - "80c0000b7f0041959ac0000b7f0041a09ac0000b072e04066d656d6f727902000666696e69" - "736800350a5f5f646174615f656e6403010b5f5f686561705f6261736503020a8026024600" - "0240200020014704402002200341004100410010001a20004100480d01418b80c000410b20" - "00ad1001000b200220032000ac10011a0f0b418b80c000410b2000ac1001000bb62502087f" - "027e230041f0016b22002400419680c000412341004100410010001a100241b9e00041b980" - "c000410e1034100341b2920441c780c00041161034200041f8006a22044200370300200041" - "f0006a22034200370300200041e8006a2202420037030020004200370360200041e0006a22" - "0141201004412041e48ac00041161034200442003703002003420037030020024200370300" - "20004200370360200141201005412041fa8ac0004117103420044200370300200342003703" - "002002420037030020004200370360200141201006412041918bc000411210341007410a41" - "dd80c000410c1034200041206a428182848890a0c08001370300200041186a428182848890" - "a0c08001370300200041106a428182848890a0c080013703002000428182848890a0c08001" - "37030841e980c000410e1008410141f780c00041111034200041086a41201008410141f780" - "c0004111103420034100360200200242003703002000420037036002404181802020014114" - "1009220541144604402000412e6a20002d00623a0000200020002900673703c80120002000" - "41ec006a2900003700cd01200041386a20002900cd01370000200020002f01603b012c2000" - "200028006336002f200020002903c801370033200442003703002003420037030020024200" - "370300200042003703602000412c6a411420014120100a22044120470d01200041c2006a20" - "002d00623a0000200041d0016a200041ef006a2900002208370300200041d8016a200041f7" - "006a2900002209370300200041cf006a2008370000200041d7006a2009370000200041df00" - "6a200041ff006a2d00003a0000200020002f01603b01402000200028006336004320002000" - "290067370047200041406b41204100100b4101418881c00041101034200341003602002002" - "4200370300200042003703604181802020014114100c411441a38bc000411c103420034100" - "360200200242003703002000420037036041014181802020014114100d411441bf8bc00041" - "14103402402001410020016b41037122036a220220014d0d00200304402003210403402001" - "41003a0000200141016a2101200441016b22040d000b0b200341016b4107490d0003402001" - "41003a0000200141076a41003a0000200141066a41003a0000200141056a41003a00002001" - "41046a41003a0000200141036a41003a0000200141026a41003a0000200141016a41003a00" - "00200141086a22012002470d000b0b200241c40020036b2203417c716a220120024b044003" - "4020024100360200200241046a22022001490d000b0b024020012003410371220320016a22" - "044f0d002003220204400340200141003a0000200141016a2101200241016b22020d000b0b" - "200341016b4107490d000340200141003a0000200141076a41003a0000200141066a41003a" - "0000200141056a41003a0000200141046a41003a0000200141036a41003a0000200141026a" - "41003a0000200141016a41003a0000200141086a22012004470d000b0b2000418180203602" - "c801410021010340200741c000490440200041e0006a20076a200041c8016a20016a2d0000" - "3a0000200020002802a00141016a22073602a001200141016a22014104470d010b0b200041" - "d8016a22024100360200200041d0016a22054200370300200042003703c801200041e0006a" - "22012007200041c8016a22044114100e411441d38bc0004113103420024100360200200542" - "00370300200042003703c801200120002802a00120044114100f411441e68bc00041231034" - "2002410036020020054200370300200042003703c8014101200120002802a0012004411410" - "10411441898cc000411b10344189803c10114120419881c000411010344189803c10124120" - "41a881c0004120103441014189803c1013412041c881c00041181034200120002802a00110" - "14412041e081c00041171034200120002802a0011015412041f781c0004127103441012001" - "20002802a00110164120419e82c000411f10342000412c6a220341141017410041bd82c000" - "410b1034200041e0016a220742003703002002420037030020054200370300200042003703" - "c801200120002802a001200441201018412041a48cc0004113103441c882c000410c41d482" - "c000410b41df82c000410e1019410141ed82c00041091034200041c0016a200041206a2903" - "00370300200041b8016a200041186a290300370300200041b0016a200041106a2903003703" - "00200020002903083703a801200241003b010020054200370300200042003703c801200341" - "14200041a8016a2206412020044112101a411241b78cc00041071034200241003602002005" - "4200370300200042003703c8012006412020044114101b411441be8cc000410e1034200041" - "003602c8012006412020044104101c410441cc8cc000410d103420064120101d410841f682" - "c000410d103420064120101e410a418383c00041141034200041003602c801200641202004" - "4104101f410441d98cc000410e1034419783c000410d200341141020412f41a483c000410d" - "1034419783c000410d41b183c00041081021411341b983c000410c1034417f410410044171" - "41c583c000411e1034200041003602c8012004417f1004417141e78cc000411e1034200041" - "ca016a41003a0000200041003b01c801200441031004417d41858dc0004124103420004100" - "3602c8012004418094ebdc031004417341a98dc00041231034419783c000410d2003411410" - "20412f41a483c000410d1034419783c000410d41b183c00041081021411341b983c000410c" - "103441021011416f41e383c000411f1034417f20002802a00110144171418284c000411f10" - "342001417f1014417141a184c000411f103420014181201014417441c084c0004120103420" - "0041e094ebdc036a220620002802a0011014417341e084c000411f1034200620002802a001" - "4101100b417341ff84c00041181034200120002802a0014101100b4171419785c000411a10" - "34200742003703002002420037030020054200370300200042003703c801200620002802a0" - "0120044120100a417341cc8dc0004116103420074200370300200242003703002005420037" - "0300200042003703c801200120002802a00120044120100a417141e28dc000411810342007" - "42003703002002420037030020054200370300200042003703c80120034114200341142006" - "20002802a001200441201022417341fa8dc000411c10342007420037030020024200370300" - "20054200370300200042003703c8012003411420034114200120002802a001200441201022" - "417141968ec000411e10342007420037030020024200370300200542003703002000420037" - "03c80141819ac0004114200620002802a001200441201023417341b48ec000411910342007" - "42003703002002420037030020054200370300200042003703c80141819ac0004114200120" - "002802a001200441201023417141cd8ec000411f1034200742003703002002420037030020" - "054200370300200042003703c80141819ac000411441b185c0004114200441201023417141" - "ec8ec00041291034200041dc016a2000413c6a280100360200200041d4016a200041346a29" - "01003702002000200029012c3702cc01200041808080083602c801200041003b01ec012004" - "411841819ac0004114200041ec016a220241021023417141958fc000410e10342006200028" - "02a001422a1001417341c585c00041111034200041003b01ec014102200241021009416f41" - "a38fc000411b1034200041003b01ec01410220024102100c416f41be8fc000412b10342000" - "41003b01ec014101410220024102100d416f41e98fc0004123103441021011416f41e383c0" - "00411f103441021012416f41d685c000412f1034410141021013416f418586c00041271034" - "41e980c0004181201008417441ac86c000411f103441e980c00041c1001008417441cb86c0" - "00411a1034200041003b01ec01200141812020024102100e4174418c90c000412110342000" - "41003b01ec01200141812020024102100f417441ad90c00041311034200041003b01ec0141" - "012001418120200241021010417441de90c0004129103420014181201014417441e586c000" - "41251034200141812010154174418a87c00041351034410120014181201016417441bf87c0" - "00412d103420014181201017417441ec87c00041191034419783c00041812041d482c00041" - "0b41df82c000410e1019417441ed82c00041091034419783c000410d41d482c00041812041" - "df82c000410e1019417441ed82c00041091034419783c000410d41d482c000410b41df82c0" - "004181201019417441ed82c00041091034200041003b01ec01200141812020024102101841" - "74418791c00041211034200041003b01ec0141819ac00041812041819ac000411420024102" - "1023417441a891c00041181034200041003b01ec0120034114200341142001418120200241" - "021024417441c091c000411f1034200041003b01ec01200441812020034114200241021025" - "417441df91c00041221034419783c000410d200620002802a001410010004173418588c000" - "410f1034419783c000410d200620002802a00110214173419488c000411610342001200028" - "02a0014100100b417141aa88c00041231034200041003b01ec0120034114200120002802a0" - "0120024102101a4171418192c000411a1034200041003b01ec01200120002802a001200241" - "02101b4171419b92c00041211034200041003b01ec01200120002802a00120024102101c41" - "7141bc92c00041201034200120002802a001101d417141cd88c00041201034200120002802" - "a001101e417141ed88c00041271034200041003602ec01200120002802a00120024104101f" - "417141dc92c00041211034200041003b01ec01200120002802a00120024102100a417141fd" - "92c00041231034200041003b01ec01200120002802a0014101200241021026417141a093c0" - "0041211034200041003b01ec01200120002802a00122052003411420012005200241021024" - "417141c193c00041271034200041003b01ec0120034114200120002802a001220520012005" - "200241021024417141e893c00041271034200041003b01ec01200120002802a00120034114" - "2002410210274171418f94c00041251034200041003b01ec0120034114200120002802a001" - "200241021027417141b494c00041251034200041003b01ec01200120002802a00120034114" - "200241021028417141d994c000412c1034200041003b01ec0120034114200120002802a001" - "2002410210284171418595c000412c1034200041003b01ec01200120002802a00120024102" - "1029417141b195c000411f1034200041003b01ec01200120002802a001410120024102102a" - "417141d095c00041221034200041003b01ec01200120002802a0012003411441b185c00041" - "14200241021022417141f295c00041211034200041003b01ec0120034114200120002802a0" - "0141b185c00041142002410210224171419396c00041211034200041003b01ec0120012000" - "2802a001410120024102102b417141b496c00041281034200041003b01ec01200441182001" - "20002802a001200241021025417141dc96c00041231034200041003b01ec01200120002802" - "a001410120024102102c417141ff96c00041251034200041003b01ec01200120002802a001" - "410120024102102d417141a497c00041211034200041003b01ec01200120002802a0014101" - "20024102102e417141c597c00041221034200041003b01ec01200120002802a00120034114" - "410120024102102f417141e797c00041241034200041003b01ec0120034114200120002802" - "a001410120024102102f4171418b98c00041241034200041003b01ec01200120002802a001" - "4101200241021030417141af98c000412f1034200041003b01ec01200120002802a0012002" - "41021031417141de98c00041231034200041003b01ec01200120002802a001410120024102" - "10324171418199c00041221034200041003b01ec01200120002802a0014101200241021033" - "417141a399c00041211034200041003b01ec01200120002802a001419489c0004120200241" - "02101a417141c499c000411c1034419783c000410d200120002802a0011020417141b489c0" - "0041221034419797abdd03410d419489c000412041001000417341d689c000411010344197" - "97abdd03410d200341141020417341e689c00041181034419797abdd03410d41b183c00041" - "081021417341fe89c00041171034200120002802a001200141812041001000417441958ac0" - "00410e1034200141812042011001417441a38ac00041121034419783c00041812020034114" - "1020417441b58ac00041161034419783c00041812041b183c00041081021417441b58ac000" - "41161034419783c000410d200120002802a0011021417141cb8ac00041191034200041003b" - "01ec01200120002802a00120034114200241021025417141e099c00041211034200041f001" - "6a240041010f0b418080c000410b417f20052005417f4e1bac1001000b418080c000410b41" - "7f20042004417f4e1bac1001000b0b8b1a0100418080c0000b811a6572726f725f636f6465" - "3d54455354204641494c45442424242424205354415254494e47205741534d204558454355" - "54494f4e2024242424246765745f6c65646765725f73716e6765745f706172656e745f6c65" - "646765725f74696d656765745f626173655f666565746573745f616d656e646d656e74616d" - "656e646d656e745f656e61626c656463616368655f6c65646765725f6f626a6765745f7478" - "5f61727261795f6c656e6765745f63757272656e745f6c65646765725f6f626a5f61727261" - "795f6c656e6765745f6c65646765725f6f626a5f61727261795f6c656e6765745f74785f6e" - "65737465645f61727261795f6c656e6765745f63757272656e745f6c65646765725f6f626a" - "5f6e65737465645f61727261795f6c656e6765745f6c65646765725f6f626a5f6e65737465" - "645f61727261795f6c656e7570646174655f6461746174657374206d657373616765746573" - "74207075626b657974657374207369676e6174757265636865636b5f7369676765745f6e66" - "745f666c6167736765745f6e66745f7472616e736665725f66656574657374696e67207472" - "61636574726163655f6163636f756e74400000000000005f74726163655f616d6f756e7467" - "65745f706172656e745f6c65646765725f686173685f6e65675f7074726765745f74785f61" - "727261795f6c656e5f696e76616c69645f736669656c646765745f74785f6e65737465645f" - "61727261795f6c656e5f6e65675f7074726765745f74785f6e65737465645f61727261795f" - "6c656e5f6e65675f6c656e6765745f74785f6e65737465645f61727261795f6c656e5f746f" - "6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f7074725f6f6f62" - "63616368655f6c65646765725f6f626a5f7074725f6f6f6263616368655f6c65646765725f" - "6f626a5f77726f6e675f6c656e555344303030303030303030303030303030303074726163" - "655f6e756d5f6f6f625f7374726765745f63757272656e745f6c65646765725f6f626a5f61" - "727261795f6c656e5f696e76616c69645f736669656c646765745f6c65646765725f6f626a" - "5f61727261795f6c656e5f696e76616c69645f736669656c64616d656e646d656e745f656e" - "61626c65645f746f6f5f6269675f736c696365616d656e646d656e745f656e61626c65645f" - "746f6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f746f6f5f62" - "69675f736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e6573746564" - "5f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f6c65646765725f6f62" - "6a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963657570646174" - "655f646174615f746f6f5f6269675f736c69636574726163655f6f6f625f736c6963657472" - "6163655f616d6f756e745f6f6f625f736c69636563616368655f6c65646765725f6f626a5f" - "77726f6e675f73697a655f75696e743235366765745f6e66745f666c6167735f77726f6e67" - "5f73697a655f75696e743235366765745f6e66745f7472616e736665725f6665655f77726f" - "6e675f73697a655f75696e7432353630303030303030303030303030303030303030303030" - "3030303030303030303174726163655f6163636f756e745f77726f6e675f73697a655f6163" - "636f756e74696474726163655f6f6f625f737472696e6774726163655f6163636f756e745f" - "6f6f625f737472696e6774726163655f616d6f756e745f6f6f625f737472696e6774726163" - "655f746f6f5f6c6f6e6774726163655f6e756d5f746f6f5f6c6f6e6774726163655f616363" - "6f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f77726f6e675f6c656e6774" - "686765745f706172656e745f6c65646765725f686173686765745f6c65646765725f616363" - "6f756e745f686173686765745f6c65646765725f74785f686173686765745f63757272656e" - "745f6c65646765725f6f626a5f6669656c646765745f6c65646765725f6f626a5f6669656c" - "646765745f74785f6e65737465645f6669656c646765745f63757272656e745f6c65646765" - "725f6f626a5f6e65737465645f6669656c646765745f6c65646765725f6f626a5f6e657374" - "65645f6669656c64636f6d707574655f7368613531325f68616c666765745f6e6674676574" - "5f6e66745f6973737565726765745f6e66745f7461786f6e6765745f6e66745f7365726961" - "6c6765745f706172656e745f6c65646765725f686173685f6e65675f6c656e6765745f7061" - "72656e745f6c65646765725f686173685f6275665f746f6f5f736d616c6c6765745f706172" - "656e745f6c65646765725f686173685f6c656e5f746f6f5f6c6f6e676163636f756e745f6b" - "65796c65745f6c656e5f6f6f626163636f756e745f6b65796c65745f77726f6e675f6c656e" - "6c696e655f6b65796c65745f6c656e5f6f6f625f63757272656e63796c696e655f6b65796c" - "65745f77726f6e675f6c656e5f63757272656e6379616d6d5f6b65796c65745f6c656e5f6f" - "6f625f617373657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6c656e5f617373" - "657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6e6f6e5f7872705f6375727265" - "6e63795f6c656e616d6d5f6b65796c65745f6d70746765745f74785f6669656c645f696e76" - "616c69645f736669656c646765745f63757272656e745f6c65646765725f6f626a5f666965" - "6c645f696e76616c69645f736669656c646765745f6c65646765725f6f626a5f6669656c64" - "5f696e76616c69645f736669656c646765745f74785f6e65737465645f6669656c645f746f" - "6f5f6269675f736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e6573" - "7465645f6669656c645f746f6f5f6269675f736c6963656765745f6c65646765725f6f626a" - "5f6e65737465645f6669656c645f746f6f5f6269675f736c696365636f6d707574655f7368" - "613531325f68616c665f746f6f5f6269675f736c696365616d6d5f6b65796c65745f746f6f" - "5f6269675f736c69636563726564656e7469616c5f6b65796c65745f746f6f5f6269675f73" - "6c6963656d70746f6b656e5f6b65796c65745f746f6f5f6269675f736c6963655f6d707469" - "646765745f6e66745f77726f6e675f73697a655f75696e743235366765745f6e66745f6973" - "737565725f77726f6e675f73697a655f75696e743235366765745f6e66745f7461786f6e5f" - "77726f6e675f73697a655f75696e743235366765745f6e66745f73657269616c5f77726f6e" - "675f73697a655f75696e743235366163636f756e745f6b65796c65745f77726f6e675f7369" - "7a655f6163636f756e746964636865636b5f6b65796c65745f77726f6e675f73697a655f61" - "63636f756e74696463726564656e7469616c5f6b65796c65745f77726f6e675f73697a655f" - "6163636f756e7469643163726564656e7469616c5f6b65796c65745f77726f6e675f73697a" - "655f6163636f756e7469643264656c65676174655f6b65796c65745f77726f6e675f73697a" - "655f6163636f756e7469643164656c65676174655f6b65796c65745f77726f6e675f73697a" - "655f6163636f756e746964326465706f7369745f707265617574685f6b65796c65745f7772" - "6f6e675f73697a655f6163636f756e746964316465706f7369745f707265617574685f6b65" - "796c65745f77726f6e675f73697a655f6163636f756e746964326469645f6b65796c65745f" - "77726f6e675f73697a655f6163636f756e746964657363726f775f6b65796c65745f77726f" - "6e675f73697a655f6163636f756e7469646c696e655f6b65796c65745f77726f6e675f7369" - "7a655f6163636f756e746964316c696e655f6b65796c65745f77726f6e675f73697a655f61" - "63636f756e746964326d70745f69737375616e63655f6b65796c65745f77726f6e675f7369" - "7a655f6163636f756e7469646d70746f6b656e5f6b65796c65745f77726f6e675f73697a65" - "5f6163636f756e7469646e66745f6f666665725f6b65796c65745f77726f6e675f73697a65" - "5f6163636f756e7469646f666665725f6b65796c65745f77726f6e675f73697a655f616363" - "6f756e7469646f7261636c655f6b65796c65745f77726f6e675f73697a655f6163636f756e" - "7469647061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e7469" - "64317061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e746964" - "327065726d697373696f6e65645f646f6d61696e5f6b65796c65745f77726f6e675f73697a" - "655f6163636f756e7469647369676e6572735f6b65796c65745f77726f6e675f73697a655f" - "6163636f756e7469647469636b65745f6b65796c65745f77726f6e675f73697a655f616363" - "6f756e7469647661756c745f6b65796c65745f77726f6e675f73697a655f6163636f756e74" - "69646765745f6e66745f77726f6e675f73697a655f6163636f756e7469646d70746f6b656e" - "5f6b65796c65745f6d707469645f77726f6e675f6c656e677468004d0970726f6475636572" - "7302086c616e6775616765010452757374000c70726f6365737365642d6279010572757374" - "631d312e38352e31202834656231363132353020323032352d30332d31352900490f746172" - "6765745f6665617475726573042b0f6d757461626c652d676c6f62616c732b087369676e2d" - "6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; + "6f73745f6c69620c74726163655f616d6f756e74000008686f73745f6c69620f666c6f6174" + "5f66726f6d5f75696e74000108686f73745f6c69620b6c696e655f6b65796c657400080868" + "6f73745f6c69620a616d6d5f6b65796c6574000308686f73745f6c69621163726564656e74" + "69616c5f6b65796c6574000808686f73745f6c69620e6d70746f6b656e5f6b65796c657400" + "0308686f73745f6c69621274726163655f6f70617175655f666c6f6174000008686f73745f" + "6c69620d666c6f61745f636f6d70617265000008686f73745f6c696209666c6f61745f6164" + "64000408686f73745f6c69620e666c6f61745f7375627472616374000408686f73745f6c69" + "620e666c6f61745f6d756c7469706c79000408686f73745f6c69620c666c6f61745f646976" + "696465000408686f73745f6c69620a666c6f61745f726f6f74000308686f73745f6c696209" + "666c6f61745f706f77000308686f73745f6c696209666c6f61745f6c6f67000108686f7374" + "5f6c69620c636865636b5f6b65796c6574000108686f73745f6c69620f64656c6567617465" + "5f6b65796c6574000308686f73745f6c6962166465706f7369745f707265617574685f6b65" + "796c6574000308686f73745f6c69620a6469645f6b65796c6574000008686f73745f6c6962" + "0d657363726f775f6b65796c6574000108686f73745f6c6962136d70745f69737375616e63" + "655f6b65796c6574000108686f73745f6c6962106e66745f6f666665725f6b65796c657400" + "0108686f73745f6c69620c6f666665725f6b65796c6574000108686f73745f6c69620d6f72" + "61636c655f6b65796c6574000108686f73745f6c69620e7061796368616e5f6b65796c6574" + "000408686f73745f6c69621a7065726d697373696f6e65645f646f6d61696e5f6b65796c65" + "74000108686f73745f6c69620e7369676e6572735f6b65796c6574000008686f73745f6c69" + "620d7469636b65745f6b65796c6574000108686f73745f6c69620c7661756c745f6b65796c" + "657400010303020a0505030100110619037f01418080c0000b7f00419f9ec0000b7f0041a0" + "9ec0000b072e04066d656d6f727902000666696e697368003f0a5f5f646174615f656e6403" + "010b5f5f686561705f6261736503020ab02b02460002402000200147044020022003410041" + "00410010001a20004100480d01418b80c000410b2000ad1001000b200220032000ac10011a" + "0f0b418b80c000410b2000ac1001000be62a02087f027e230041f0016b22002400419680c0" + "00412341004100410010001a100241b9e00041b980c000410e103e100341b2920441c780c0" + "004116103e200041f0006a22054200370300200041e8006a22034200370300200041e0006a" + "2202420037030020004200370358200041d8006a220141201004412041a58cc0004116103e" + "20054200370300200342003703002002420037030020004200370358200141201005412041" + "bb8cc0004117103e2005420037030020034200370300200242003703002000420037035820" + "0141201006412041d28cc0004112103e1007410a41dd80c000410c103e200041186a428182" + "848890a0c08001370300200041106a428182848890a0c08001370300200041086a42818284" + "8890a0c080013703002000428182848890a0c0800137030041e980c000410e1008410141f7" + "80c0004111103e200041201008410141f780c0004111103e20034100360200200242003703" + "002000420037035802404181802020014114100922044114460440200041266a20002d005a" + "3a00002000200029005f3703c8012000200041e4006a2900003700cd01200041306a200029" + "00cd01370000200020002f01583b01242000200028005b360027200020002903c80137002b" + "20054200370300200342003703002002420037030020004200370358200041246a41142001" + "4120100a22054120470d012000413a6a20002d005a3a0000200041d0016a200041e7006a29" + "00002208370300200041d8016a200041ef006a2900002209370300200041c7006a20083700" + "00200041cf006a2009370000200041d7006a200041f7006a2d00003a0000200020002f0158" + "3b01382000200028005b36003b2000200029005f37003f200041386a41204100100b410141" + "8881c0004110103e2003410036020020024200370300200042003703584181802020014114" + "100c411441e48cc000411c103e200341003602002002420037030020004200370358410141" + "81802020014114100d411441808dc0004114103e02402001410020016b41037122036a2202" + "20014d0d0020030440200321050340200141003a0000200141016a2101200541016b22050d" + "000b0b200341016b4107490d000340200141003a0000200141076a41003a0000200141066a" + "41003a0000200141056a41003a0000200141046a41003a0000200141036a41003a00002001" + "41026a41003a0000200141016a41003a0000200141086a22012002470d000b0b200241c400" + "20036b2203417c716a220120024b0440034020024100360200200241046a22022001490d00" + "0b0b024020012003410371220320016a22054f0d002003220204400340200141003a000020" + "0141016a2101200241016b22020d000b0b200341016b4107490d000340200141003a000020" + "0141076a41003a0000200141066a41003a0000200141056a41003a0000200141046a41003a" + "0000200141036a41003a0000200141026a41003a0000200141016a41003a0000200141086a" + "22012005470d000b0b2000418180203602c801410021010340200641c000490440200041d8" + "006a20066a200041c8016a20016a2d00003a0000200020002802980141016a220636029801" + "200141016a22014104470d010b0b200041d8016a22024100360200200041d0016a22044200" + "370300200042003703c801200041d8006a22012006200041c8016a22054114100e41144194" + "8dc0004113103e2002410036020020044200370300200042003703c8012001200028029801" + "20054114100f411441a78dc0004123103e2002410036020020044200370300200042003703" + "c80141012001200028029801200541141010411441ca8dc000411b103e4189803c10114120" + "419881c0004110103e4189803c1012412041a881c0004120103e41014189803c1013412041" + "c881c0004118103e20012000280298011014412041e081c0004117103e2001200028029801" + "1015412041f781c0004127103e4101200120002802980110164120419e82c000411f103e20" + "0041246a220341141017410041bd82c000410b103e200041e0016a22064200370300200242" + "0037030020044200370300200042003703c8012001200028029801200541201018412041e5" + "8dc0004113103e41c882c000410c41d482c000410b41df82c000410e1019410141ed82c000" + "4109103e200041b8016a200041186a290300370300200041b0016a200041106a2903003703" + "00200041a8016a200041086a290300370300200020002903003703a001200241003b010020" + "044200370300200042003703c80120034114200041a0016a2207412020054112101a411241" + "f88dc0004107103e2002410036020020044200370300200042003703c80120074120200541" + "14101b411441ff8dc000410e103e200041003602c8012007412020054104101c4104418d8e" + "c000410d103e20074120101d410841f682c000410d103e20074120101e410a418383c00041" + "14103e200041003602c8012007412020054104101f4104419a8ec000410e103e419783c000" + "410d200341141020412f41a483c000410d103e419783c000410d41b183c000410810214113" + "41b983c000410c103e417f41041004417141c583c000411e103e200041003602c801200541" + "7f1004417141a88ec000411e103e200041ca016a41003a0000200041003b01c80120054103" + "1004417d41c68ec0004124103e200041003602c8012005418094ebdc031004417341ea8ec0" + "004123103e419783c000410d200341141020412f41a483c000410d103e419783c000410d41" + "b183c00041081021411341b983c000410c103e200642003703002002420037030020044200" + "370300200042003703c801200041d894ebdc036a2207410820054120410010224173418d8f" + "c0004117103e200642003703002002420037030020044200370300200042003703c8012001" + "2000280298012005412041001022417141a48fc0004119103e41021011416f41e383c00041" + "1f103e417f20002802980110144171418284c000411f103e2001417f1014417141a184c000" + "411f103e20014181201014417441c084c0004120103e20072000280298011014417341e084" + "c000411f103e20072000280298014101100b417341ff84c0004118103e2001200028029801" + "4101100b4171419785c000411a103e20064200370300200242003703002004420037030020" + "0042003703c801200720002802980120054120100a417341bd8fc0004116103e2006420037" + "03002002420037030020044200370300200042003703c80120012000280298012005412010" + "0a417141d38fc0004118103e20064200370300200242003703002004420037030020004200" + "3703c80120034114200341142007200028029801200541201023417341eb8fc000411c103e" + "200642003703002002420037030020044200370300200042003703c8012003411420034114" + "20012000280298012005412010234171418790c000411e103e200642003703002002420037" + "030020044200370300200042003703c801418b9ec000411420072000280298012005412010" + "24417341a590c0004119103e20064200370300200242003703002004420037030020004200" + "3703c801418b9ec00041142001200028029801200541201024417141be90c000411f103e20" + "0642003703002002420037030020044200370300200042003703c801418b9ec000411441b1" + "85c0004114200541201024417141dd90c0004129103e200642003703002002420037030020" + "044200370300200042003703c80141c585c0004128418b9ec0004114200541201024417141" + "8691c0004125103e200041dc016a200041346a280100360200200041d4016a2000412c6a29" + "0100370200200020002901243702cc01200041808080083602c801200041003b01c0012005" + "4118418b9ec0004114200041c0016a220441021024417141ab91c000410e103e2007200028" + "029801422a1001417341ed85c0004111103e200041003b01c0014102200441021009416f41" + "b991c000411b103e200041003b01c001410220044102100c416f41d491c000412b103e2000" + "41003b01c0014101410220044102100d416f41ff91c0004123103e41021011416f41e383c0" + "00411f103e41021012416f41fe85c000412f103e410141021013416f41ad86c0004127103e" + "41e980c0004181201008417441d486c000411f103e41e980c00041c1001008417441f386c0" + "00411a103e200041003b01c001200141812020044102100e417441a292c0004121103e2000" + "41003b01c001200141812020044102100f417441c392c0004131103e200041003b01c00141" + "012001418120200441021010417441f492c0004129103e200141812010144174418d87c000" + "4125103e20014181201015417441b287c0004135103e410120014181201016417441e787c0" + "00412d103e200141812010174174419488c0004119103e419783c00041812041d482c00041" + "0b41df82c000410e1019417441ed82c0004109103e419783c000410d41d482c00041812041" + "df82c000410e1019417441ed82c0004109103e419783c000410d41d482c000410b41df82c0" + "004181201019417441ed82c0004109103e200041003b01c001200141812020044102101841" + "74419d93c0004121103e200041003b01c001418b9ec000418120418b9ec000411420044102" + "1024417441be93c0004118103e200041003b01c00120034114200341142001418120200441" + "021025417441d693c000411f103e200041003b01c001200541812020034114200441021026" + "417441f593c0004122103e419783c000410d200720002802980141001000417341ad88c000" + "410f103e200042d487b6f4c7d4b1c0003700c001419783c000410d200041c095ebdc036a22" + "0641081027417341bc88c000411c103e419783c000410d20072000280298011021417341d8" + "88c0004116103e20064108200441081028417341ee88c0004118103e200441082006410810" + "284173418689c0004118103e200041003b01ec012006410820044108200041ec016a220241" + "02410010294173419794c0004114103e200041003b01ec0120044108200641082002410241" + "001029417341ab94c0004114103e200041003b01ec01200641082004410820024102410010" + "2a417341bf94c0004119103e200041003b01ec012004410820064108200241024100102a41" + "7341d894c0004119103e200041003b01ec012006410820044108200241024100102b417341" + "f194c0004119103e200041003b01ec012004410820064108200241024100102b4173418a95" + "c0004119103e200041003b01ec012006410820044108200241024100102c417341a395c000" + "4117103e200041003b01ec012004410820064108200241024100102c417341ba95c0004117" + "103e200041003b01ec01200641084103200241024100102d417341d195c0004114103e2000" + "41003b01ec01200641084103200241024100102e417341e595c0004113103e200041003b01" + "ec0120064108200241024100102f417341f895c0004113103e20012000280298014100100b" + "4171419e89c0004123103e200041003b01ec0120034114200120002802980120024102101a" + "4171418b96c000411a103e200041003b01ec01200120002802980120024102101b417141a5" + "96c0004121103e200041003b01ec01200120002802980120024102101c417141c696c00041" + "20103e2001200028029801101d417141c189c0004120103e2001200028029801101e417141" + "e189c0004127103e200041003602ec01200120002802980120024104101f417141e696c000" + "4121103e200041003b01ec01200120002802980120024102100a4171418797c0004123103e" + "200041003b01ec0120012000280298014101200241021030417141aa97c0004121103e2000" + "41003b01ec01200120002802980122062003411420012006200241021025417141cb97c000" + "4127103e200041003b01ec0120034114200120002802980122062001200620024102102541" + "7141f297c0004127103e200041003b01ec0120012000280298012003411420024102103141" + "71419998c0004125103e200041003b01ec0120034114200120002802980120024102103141" + "7141be98c0004125103e200041003b01ec0120012000280298012003411420024102103241" + "7141e398c000412c103e200041003b01ec0120034114200120002802980120024102103241" + "71418f99c000412c103e200041003b01ec012001200028029801200241021033417141bb99" + "c000411f103e200041003b01ec0120012000280298014101200241021034417141da99c000" + "4122103e200041003b01ec0120012000280298012003411441b185c0004114200241021023" + "417141fc99c0004121103e200041003b01ec0120034114200120002802980141b185c00041" + "142002410210234171419d9ac0004121103e200041003b01ec012001200028029801410120" + "0241021035417141be9ac0004128103e200041003b01ec0120054118200120002802980120" + "0241021026417141e69ac0004123103e200041003b01ec0120012000280298014101200241" + "021036417141899bc0004125103e200041003b01ec01200120002802980141012002410210" + "37417141ae9bc0004121103e200041003b01ec012001200028029801410120024102103841" + "7141cf9bc0004122103e200041003b01ec0120012000280298012003411441012002410210" + "39417141f19bc0004124103e200041003b01ec012003411420012000280298014101200241" + "021039417141959cc0004124103e200041003b01ec01200120002802980141012002410210" + "3a417141b99cc000412f103e200041003b01ec01200120002802980120024102103b417141" + "e89cc0004123103e200041003b01ec012001200028029801410120024102103c4171418b9d" + "c0004122103e200041003b01ec012001200028029801410120024102103d417141ad9dc000" + "4121103e200041003b01ec01200120002802980141888ac000412020024102101a417141ce" + "9dc000411c103e419783c000410d20012000280298011020417141a88ac0004122103e4197" + "97abdd03410d41888ac000412041001000417341ca8ac0004110103e419797abdd03410d20" + "0441081027417341da8ac000411d103e419797abdd03410d200341141020417341f78ac000" + "4118103e419797abdd03410d41b183c000410810214173418f8bc0004117103e2001200028" + "029801200141812041001000417441a68bc000410e103e200141812042011001417441b48b" + "c0004112103e419783c000418120200441081027417441c68bc000411b103e419783c00041" + "8120200341141020417441e18bc0004116103e419783c00041812041b183c0004108102141" + "7441f78bc0004115103e419783c000410d200120002802980110214171418c8cc000411910" + "3e200041003b01ec01200120002802980120034114200241021026417141ea9dc000412110" + "3e200041f0016a240041010f0b418080c000410b417f20042004417f4e1bac1001000b4180" + "80c000410b417f20052005417f4e1bac1001000b0bf61d0200418080c0000bc5056572726f" + "725f636f64653d54455354204641494c45442424242424205354415254494e47205741534d" + "20455845435554494f4e2024242424246765745f6c65646765725f73716e6765745f706172" + "656e745f6c65646765725f74696d656765745f626173655f666565746573745f616d656e64" + "6d656e74616d656e646d656e745f656e61626c656463616368655f6c65646765725f6f626a" + "6765745f74785f61727261795f6c656e6765745f63757272656e745f6c65646765725f6f62" + "6a5f61727261795f6c656e6765745f6c65646765725f6f626a5f61727261795f6c656e6765" + "745f74785f6e65737465645f61727261795f6c656e6765745f63757272656e745f6c656467" + "65725f6f626a5f6e65737465645f61727261795f6c656e6765745f6c65646765725f6f626a" + "5f6e65737465645f61727261795f6c656e7570646174655f6461746174657374206d657373" + "61676574657374207075626b657974657374207369676e6174757265636865636b5f736967" + "6765745f6e66745f666c6167736765745f6e66745f7472616e736665725f66656574657374" + "696e6720747261636574726163655f6163636f756e74400000000000005f74726163655f61" + "6d6f756e746765745f706172656e745f6c65646765725f686173685f6e65675f7074726765" + "745f74785f61727261795f6c656e5f696e76616c69645f736669656c646765745f74785f6e" + "65737465645f61727261795f6c656e5f6e65675f7074726765745f74785f6e65737465645f" + "61727261795f6c656e5f6e65675f6c656e6765745f74785f6e65737465645f61727261795f" + "6c656e5f746f6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f70" + "74725f6f6f6263616368655f6c65646765725f6f626a5f7074725f6f6f6263616368655f6c" + "65646765725f6f626a5f77726f6e675f6c656e555344303030303030303030303030303030" + "30300041ed85c0000b9e1874726163655f6e756d5f6f6f625f7374726765745f6375727265" + "6e745f6c65646765725f6f626a5f61727261795f6c656e5f696e76616c69645f736669656c" + "646765745f6c65646765725f6f626a5f61727261795f6c656e5f696e76616c69645f736669" + "656c64616d656e646d656e745f656e61626c65645f746f6f5f6269675f736c696365616d65" + "6e646d656e745f656e61626c65645f746f6f5f6c6f6e676765745f74785f6e65737465645f" + "61727261795f6c656e5f746f6f5f6269675f736c6963656765745f63757272656e745f6c65" + "646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c69" + "63656765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f" + "5f6269675f736c6963657570646174655f646174615f746f6f5f6269675f736c6963657472" + "6163655f6f6f625f736c69636574726163655f6f70617175655f666c6f61745f6f6f625f73" + "6c69636574726163655f616d6f756e745f6f6f625f736c696365666c6f61745f636f6d7061" + "72655f6f6f625f736c69636531666c6f61745f636f6d706172655f6f6f625f736c69636532" + "63616368655f6c65646765725f6f626a5f77726f6e675f73697a655f75696e743235366765" + "745f6e66745f666c6167735f77726f6e675f73697a655f75696e743235366765745f6e6674" + "5f7472616e736665725f6665655f77726f6e675f73697a655f75696e743235363030303030" + "30303030303030303030303030303030303030303030303030303174726163655f6163636f" + "756e745f77726f6e675f73697a655f6163636f756e74696474726163655f6f6f625f737472" + "696e6774726163655f6f70617175655f666c6f61745f6f6f625f737472696e677472616365" + "5f6163636f756e745f6f6f625f737472696e6774726163655f616d6f756e745f6f6f625f73" + "7472696e6774726163655f746f6f5f6c6f6e6774726163655f6e756d5f746f6f5f6c6f6e67" + "74726163655f6f70617175655f666c6f61745f746f6f5f6c6f6e6774726163655f6163636f" + "756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f746f6f5f6c6f6e6774726163" + "655f616d6f756e745f77726f6e675f6c656e6774686765745f706172656e745f6c65646765" + "725f686173686765745f6c65646765725f6163636f756e745f686173686765745f6c656467" + "65725f74785f686173686765745f63757272656e745f6c65646765725f6f626a5f6669656c" + "646765745f6c65646765725f6f626a5f6669656c646765745f74785f6e65737465645f6669" + "656c646765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c" + "646765745f6c65646765725f6f626a5f6e65737465645f6669656c64636f6d707574655f73" + "68613531325f68616c666765745f6e66746765745f6e66745f6973737565726765745f6e66" + "745f7461786f6e6765745f6e66745f73657269616c6765745f706172656e745f6c65646765" + "725f686173685f6e65675f6c656e6765745f706172656e745f6c65646765725f686173685f" + "6275665f746f6f5f736d616c6c6765745f706172656e745f6c65646765725f686173685f6c" + "656e5f746f6f5f6c6f6e67666c6f61745f66726f6d5f75696e745f6c656e5f6f6f62666c6f" + "61745f66726f6d5f75696e745f77726f6e675f6c656e6163636f756e745f6b65796c65745f" + "6c656e5f6f6f626163636f756e745f6b65796c65745f77726f6e675f6c656e6c696e655f6b" + "65796c65745f6c656e5f6f6f625f63757272656e63796c696e655f6b65796c65745f77726f" + "6e675f6c656e5f63757272656e6379616d6d5f6b65796c65745f6c656e5f6f6f625f617373" + "657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6c656e5f617373657432616d6d" + "5f6b65796c65745f6c656e5f77726f6e675f6e6f6e5f7872705f63757272656e63795f6c65" + "6e616d6d5f6b65796c65745f6c656e5f77726f6e675f7872705f63757272656e63795f6c65" + "6e616d6d5f6b65796c65745f6d70746765745f74785f6669656c645f696e76616c69645f73" + "6669656c646765745f63757272656e745f6c65646765725f6f626a5f6669656c645f696e76" + "616c69645f736669656c646765745f6c65646765725f6f626a5f6669656c645f696e76616c" + "69645f736669656c646765745f74785f6e65737465645f6669656c645f746f6f5f6269675f" + "736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669" + "656c645f746f6f5f6269675f736c6963656765745f6c65646765725f6f626a5f6e65737465" + "645f6669656c645f746f6f5f6269675f736c696365636f6d707574655f7368613531325f68" + "616c665f746f6f5f6269675f736c696365616d6d5f6b65796c65745f746f6f5f6269675f73" + "6c69636563726564656e7469616c5f6b65796c65745f746f6f5f6269675f736c6963656d70" + "746f6b656e5f6b65796c65745f746f6f5f6269675f736c6963655f6d70746964666c6f6174" + "5f6164645f6f6f625f736c69636531666c6f61745f6164645f6f6f625f736c69636532666c" + "6f61745f73756274726163745f6f6f625f736c69636531666c6f61745f7375627472616374" + "5f6f6f625f736c69636532666c6f61745f6d756c7469706c795f6f6f625f736c6963653166" + "6c6f61745f6d756c7469706c795f6f6f625f736c69636532666c6f61745f6469766964655f" + "6f6f625f736c69636531666c6f61745f6469766964655f6f6f625f736c69636532666c6f61" + "745f726f6f745f6f6f625f736c696365666c6f61745f706f775f6f6f625f736c696365666c" + "6f61745f6c6f675f6f6f625f736c6963656765745f6e66745f77726f6e675f73697a655f75" + "696e743235366765745f6e66745f6973737565725f77726f6e675f73697a655f75696e7432" + "35366765745f6e66745f7461786f6e5f77726f6e675f73697a655f75696e74323536676574" + "5f6e66745f73657269616c5f77726f6e675f73697a655f75696e743235366163636f756e74" + "5f6b65796c65745f77726f6e675f73697a655f6163636f756e746964636865636b5f6b6579" + "6c65745f77726f6e675f73697a655f6163636f756e74696463726564656e7469616c5f6b65" + "796c65745f77726f6e675f73697a655f6163636f756e7469643163726564656e7469616c5f" + "6b65796c65745f77726f6e675f73697a655f6163636f756e7469643264656c65676174655f" + "6b65796c65745f77726f6e675f73697a655f6163636f756e7469643164656c65676174655f" + "6b65796c65745f77726f6e675f73697a655f6163636f756e746964326465706f7369745f70" + "7265617574685f6b65796c65745f77726f6e675f73697a655f6163636f756e746964316465" + "706f7369745f707265617574685f6b65796c65745f77726f6e675f73697a655f6163636f75" + "6e746964326469645f6b65796c65745f77726f6e675f73697a655f6163636f756e74696465" + "7363726f775f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646c696e65" + "5f6b65796c65745f77726f6e675f73697a655f6163636f756e746964316c696e655f6b6579" + "6c65745f77726f6e675f73697a655f6163636f756e746964326d70745f69737375616e6365" + "5f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646d70746f6b656e5f6b" + "65796c65745f77726f6e675f73697a655f6163636f756e7469646e66745f6f666665725f6b" + "65796c65745f77726f6e675f73697a655f6163636f756e7469646f666665725f6b65796c65" + "745f77726f6e675f73697a655f6163636f756e7469646f7261636c655f6b65796c65745f77" + "726f6e675f73697a655f6163636f756e7469647061796368616e5f6b65796c65745f77726f" + "6e675f73697a655f6163636f756e746964317061796368616e5f6b65796c65745f77726f6e" + "675f73697a655f6163636f756e746964327065726d697373696f6e65645f646f6d61696e5f" + "6b65796c65745f77726f6e675f73697a655f6163636f756e7469647369676e6572735f6b65" + "796c65745f77726f6e675f73697a655f6163636f756e7469647469636b65745f6b65796c65" + "745f77726f6e675f73697a655f6163636f756e7469647661756c745f6b65796c65745f7772" + "6f6e675f73697a655f6163636f756e7469646765745f6e66745f77726f6e675f73697a655f" + "6163636f756e7469646d70746f6b656e5f6b65796c65745f6d707469645f77726f6e675f6c" + "656e677468004d0970726f64756365727302086c616e6775616765010452757374000c7072" + "6f6365737365642d6279010572757374631d312e38352e3120283465623136313235302032" + "3032352d30332d31352900490f7461726765745f6665617475726573042b0f6d757461626c" + "652d676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b" + "0a6d756c746976616c7565"; extern std::string const floatTestsWasmHex = "0061736d0100000001430860057f7f7f7f7f017f60047e7f7f7f017f60047f7f7f7f017f60" diff --git a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp index 1bd9622a4c..5293f1db78 100644 --- a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp @@ -1647,12 +1647,12 @@ floatFromInt_wrap( int i = 0; auto const x = getDataInt64(runtime, params, i); if (!x) - return hfResult(results, x.error()); + return hfResult(results, x.error()); // LCOV_EXCL_LINE i = 3; auto const rounding = getDataInt32(runtime, params, i); if (!rounding) - return hfResult(results, rounding.error()); + return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 1; return returnResult( @@ -1676,7 +1676,7 @@ floatFromUint_wrap( i = 4; auto const rounding = getDataInt32(runtime, params, i); if (!rounding) - return hfResult(results, rounding.error()); + return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 2; return returnResult( @@ -1692,16 +1692,16 @@ floatSet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) int i = 0; auto const exp = getDataInt32(runtime, params, i); if (!exp) - return hfResult(results, exp.error()); + return hfResult(results, exp.error()); // LCOV_EXCL_LINE auto const mant = getDataInt64(runtime, params, i); if (!mant) - return hfResult(results, mant.error()); + return hfResult(results, mant.error()); // LCOV_EXCL_LINE i = 4; auto const rounding = getDataInt32(runtime, params, i); if (!rounding) - return hfResult(results, rounding.error()); + return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 2; return returnResult( @@ -1747,7 +1747,7 @@ floatAdd_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) i = 6; auto const rounding = getDataInt32(runtime, params, i); if (!rounding) - return hfResult(results, rounding.error()); + return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 4; return returnResult( @@ -1775,7 +1775,7 @@ floatSubtract_wrap( i = 6; auto const rounding = getDataInt32(runtime, params, i); if (!rounding) - return hfResult(results, rounding.error()); + return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 4; return returnResult( @@ -1803,7 +1803,7 @@ floatMultiply_wrap( i = 6; auto const rounding = getDataInt32(runtime, params, i); if (!rounding) - return hfResult(results, rounding.error()); + return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 4; return returnResult( @@ -1831,7 +1831,7 @@ floatDivide_wrap( i = 6; auto const rounding = getDataInt32(runtime, params, i); if (!rounding) - return hfResult(results, rounding.error()); + return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 4; return returnResult( @@ -1851,12 +1851,12 @@ floatRoot_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) auto const n = getDataInt32(runtime, params, i); if (!n) - return hfResult(results, n.error()); + return hfResult(results, n.error()); // LCOV_EXCL_LINE i = 5; auto const rounding = getDataInt32(runtime, params, i); if (!rounding) - return hfResult(results, rounding.error()); + return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 3; return returnResult( @@ -1879,12 +1879,12 @@ floatPower_wrap( auto const n = getDataInt32(runtime, params, i); if (!n) - return hfResult(results, n.error()); + return hfResult(results, n.error()); // LCOV_EXCL_LINE i = 5; auto const rounding = getDataInt32(runtime, params, i); if (!rounding) - return hfResult(results, rounding.error()); + return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 3; return returnResult( @@ -1905,7 +1905,7 @@ floatLog_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) i = 4; auto const rounding = getDataInt32(runtime, params, i); if (!rounding) - return hfResult(results, rounding.error()); + return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 2; return returnResult( From ebd90c47423267459fbfaf73800ba8d637de1d6a Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 11 Sep 2025 18:41:24 -0400 Subject: [PATCH 014/137] chore: remove unneeded float stuff (#5729) --- src/xrpld/app/wasm/ParamsHelper.h | 40 ++++++++++++---------------- src/xrpld/app/wasm/detail/WamrVM.cpp | 18 ------------- 2 files changed, 17 insertions(+), 41 deletions(-) diff --git a/src/xrpld/app/wasm/ParamsHelper.h b/src/xrpld/app/wasm/ParamsHelper.h index 8bdf11e618..7f18389552 100644 --- a/src/xrpld/app/wasm/ParamsHelper.h +++ b/src/xrpld/app/wasm/ParamsHelper.h @@ -52,7 +52,7 @@ typedef WasmResult EscrowResult; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -enum WasmTypes { WT_I32, WT_I64, WT_F32, WT_F64, WT_U8V }; +enum WasmTypes { WT_I32, WT_I64, WT_U8V }; struct WasmImportFunc { @@ -86,10 +86,6 @@ WasmImpArgs(WasmImportFunc& e) e.params.push_back(WT_I32); else if constexpr (std::is_same_v) e.params.push_back(WT_I64); - else if constexpr (std::is_same_v) - e.params.push_back(WT_F32); - else if constexpr (std::is_same_v) - e.params.push_back(WT_F64); else static_assert(std::is_pointer_v, "Unsupported argument type"); @@ -108,10 +104,6 @@ WasmImpRet(WasmImportFunc& e) e.result = WT_I32; else if constexpr (std::is_same_v) e.result = WT_I64; - else if constexpr (std::is_same_v) - e.result = WT_F32; - else if constexpr (std::is_same_v) - e.result = WT_F64; else if constexpr (std::is_void_v) e.result.reset(); #if (defined(__GNUC__) && (__GNUC__ >= 14)) || \ @@ -189,21 +181,23 @@ wasmParamsHlp(std::vector& v, std::int64_t p, Types&&... args) wasmParamsHlp(v, std::forward(args)...); } -template -inline void -wasmParamsHlp(std::vector& v, float p, Types&&... args) -{ - v.push_back({.type = WT_F32, .of = {.f32 = p}}); - wasmParamsHlp(v, std::forward(args)...); -} +// We are not supporting float/double for now +// Leaving this code here so that it is easier to add later if needed +// template +// inline void +// wasmParamsHlp(std::vector& v, float p, Types&&... args) +// { +// v.push_back({.type = WT_F32, .of = {.f32 = p}}); +// wasmParamsHlp(v, std::forward(args)...); +// } -template -inline void -wasmParamsHlp(std::vector& v, double p, Types&&... args) -{ - v.push_back({.type = WT_F64, .of = {.f64 = p}}); - wasmParamsHlp(v, std::forward(args)...); -} +// template +// inline void +// wasmParamsHlp(std::vector& v, double p, Types&&... args) +// { +// v.push_back({.type = WT_F64, .of = {.f64 = p}}); +// wasmParamsHlp(v, std::forward(args)...); +// } template inline void diff --git a/src/xrpld/app/wasm/detail/WamrVM.cpp b/src/xrpld/app/wasm/detail/WamrVM.cpp index e47a618f12..4d94e1cb8f 100644 --- a/src/xrpld/app/wasm/detail/WamrVM.cpp +++ b/src/xrpld/app/wasm/detail/WamrVM.cpp @@ -425,12 +425,6 @@ ModuleWrapper::makeImpParams(wasm_valtype_vec_t& v, WasmImportFunc const& imp) case WT_I64: v.data[i] = wasm_valtype_new_i64(); break; - case WT_F32: - v.data[i] = wasm_valtype_new_f32(); - break; - case WT_F64: - v.data[i] = wasm_valtype_new_f64(); - break; default: throw std::runtime_error("invalid import type"); } @@ -452,12 +446,6 @@ ModuleWrapper::makeImpReturn(wasm_valtype_vec_t& v, WasmImportFunc const& imp) case WT_I64: v.data[0] = wasm_valtype_new_i64(); break; - case WT_F32: - v.data[0] = wasm_valtype_new_f32(); - break; - case WT_F64: - v.data[0] = wasm_valtype_new_f64(); - break; default: throw std::runtime_error("invalid return type"); } @@ -680,12 +668,6 @@ WamrEngine::convertParams(std::vector const& params) case WT_I64: v.push_back(WASM_I64_VAL(p.of.i64)); break; - case WT_F32: - v.push_back(WASM_F32_VAL(p.of.f32)); - break; - case WT_F64: - v.push_back(WASM_F64_VAL(p.of.f64)); - break; case WT_U8V: { auto const sz = p.of.u8v.sz; auto const ptr = allocate(sz); From edfed060017116f703c05ec11a5da3f0cf468519 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 18 Sep 2025 15:39:49 -0400 Subject: [PATCH 015/137] fix merge issues --- src/test/app/TestHostFunctions.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index ae4db59b0d..ffa0bfb895 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -24,7 +24,8 @@ #include #include #include -#include + +#include namespace ripple { From 6be8f2124cd1cdc3db3e59764a24e8925eaae7c5 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Thu, 18 Sep 2025 15:51:39 -0400 Subject: [PATCH 016/137] Latests HF perf test (#5789) --- src/test/app/HostFuncImpl_test.cpp | 54 +- src/test/app/TestHostFunctions.h | 630 ++++++++++++++---- src/test/app/Wasm_test.cpp | 15 +- src/test/app/wasm_fixtures/fixtures.cpp | 67 +- src/xrpld/app/wasm/HostFuncImpl.h | 10 +- src/xrpld/app/wasm/detail/HostFuncImpl.cpp | 13 +- src/xrpld/app/wasm/detail/HostFuncWrapper.cpp | 20 +- src/xrpld/app/wasm/detail/WasmVM.cpp | 36 +- 8 files changed, 611 insertions(+), 234 deletions(-) diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index f75ad1aa72..60578c849e 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -1356,8 +1356,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(result.has_value() && result.value() == 0); // Should fail for too large data - std::vector bigData( - 1024 * 1024 + 1, 0x42); // > maxWasmDataLength + std::vector bigData(maxWasmDataLength + 1, 0x42); auto const tooBig = hfs.updateData(Slice(bigData.data(), bigData.size())); if (BEAST_EXPECT(!tooBig.has_value())) @@ -2102,6 +2101,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite Bytes const float2 = {0xD4, 0x87, 0x1A, 0xFD, 0x49, 0x8D, 0x00, 0x00}; // 2 Bytes const float10 = {0xD4, 0xC3, 0x8D, 0x7E, 0xA4, 0xC6, 0x80, 0x00}; // 10 Bytes const floatInvalidZero = {0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // INVALID + Bytes const floatPi = {0xD4, 0x8B, 0x29, 0x43, 0x0A, 0x25, 0x6D, 0x21}; // 3.141592653589793 std::string const invalid = "invalid_data"; @@ -2744,8 +2744,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite } { - auto const result = - hfs.floatPower(makeSlice(floatMaxIOU), 40000, 0); + auto const result = hfs.floatPower(makeSlice(floatMaxIOU), 81, 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT( + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = hfs.floatPower(makeSlice(floatMaxIOU), 2, 0); BEAST_EXPECT(!result) && BEAST_EXPECT( result.error() == @@ -2809,6 +2815,46 @@ struct HostFuncImpl_test : public beast::unit_test::suite result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } + // perf test logs + // { + // auto const result = hfs.floatLog(makeSlice(floatPi), 0); + // if (BEAST_EXPECT(result)) + // { + // std::cout << "lg(" << floatToString(makeSlice(floatPi)) + // << ") = " << floatToString(makeSlice(*result)) + // << std::endl; + // } + // } + // { + // auto const result = hfs.floatLog(makeSlice(floatIntMax), 0); + // if (BEAST_EXPECT(result)) + // { + // std::cout << "lg(" << floatToString(makeSlice(floatIntMax)) + // << ") = " << floatToString(makeSlice(*result)) + // << std::endl; + // } + // } + + // { + // auto const result = hfs.floatLog(makeSlice(floatMaxExp), 0); + // if (BEAST_EXPECT(result)) + // { + // std::cout << "lg(" << floatToString(makeSlice(floatMaxExp)) + // << ") = " << floatToString(makeSlice(*result)) + // << std::endl; + // } + // } + + // { + // auto const result = hfs.floatLog(makeSlice(floatMaxIOU), 0); + // if (BEAST_EXPECT(result)) + // { + // std::cout << "lg(" << floatToString(makeSlice(floatMaxIOU)) + // << ") = " << floatToString(makeSlice(*result)) + // << std::endl; + // } + // } + { auto const x = hfs.floatSet(9'500'000'000'000'001, -14, 0); // almost 80+15 diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index ffa0bfb895..6973a107fe 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -605,13 +605,17 @@ public: struct PerfHostFunctions : public TestHostFunctions { Keylet leKey; + std::shared_ptr currentLedgerObj = nullptr; + bool isLedgerObjCached = false; + static int constexpr MAX_CACHE = 256; std::array, MAX_CACHE> cache; + // std::optional data_; // deferred data update, not used in + // performance std::shared_ptr tx_; void const* rt_ = nullptr; -public: PerfHostFunctions( test::jtx::Env& env, Keylet const& k, @@ -620,9 +624,113 @@ public: { } + Expected + getLedgerSqn() override + { + auto seq = env_.current()->seq(); + if (seq > std::numeric_limits::max()) + return Unexpected(HostFunctionError::INTERNAL); // LCOV_EXCL_LINE + return static_cast(seq); + } + + Expected + getParentLedgerTime() override + { + auto time = + env_.current()->parentCloseTime().time_since_epoch().count(); + if (time > std::numeric_limits::max()) + return Unexpected(HostFunctionError::INTERNAL); + return static_cast(time); + } + + Expected + getParentLedgerHash() override + { + return env_.current()->info().parentHash; + } + + Expected + getLedgerAccountHash() override + { + return env_.current()->info().accountHash; + } + + Expected + getLedgerTransactionHash() override + { + return env_.current()->info().txHash; + } + + Expected + getBaseFee() override + { + auto fee = env_.current()->fees().base.drops(); + if (fee > std::numeric_limits::max()) + return Unexpected(HostFunctionError::INTERNAL); + return static_cast(fee); + } + + Expected + isAmendmentEnabled(uint256 const& amendmentId) override + { + return env_.current()->rules().enabled(amendmentId); + } + + Expected + isAmendmentEnabled(std::string_view const& amendmentName) override + { + auto const& table = env_.app().getAmendmentTable(); + auto const amendment = table.find(std::string(amendmentName)); + return env_.current()->rules().enabled(amendment); + } + + Expected, HostFunctionError> + getCurrentLedgerObj() + { + if (!isLedgerObjCached) + { + isLedgerObjCached = true; + currentLedgerObj = env_.le(leKey); + } + if (currentLedgerObj) + return currentLedgerObj; + return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); + } + + Expected, HostFunctionError> + peekCurrentLedgerObj(int32_t cacheIdx) + { + --cacheIdx; + if (cacheIdx < 0 || cacheIdx >= MAX_CACHE) + return Unexpected(HostFunctionError::SLOT_OUT_RANGE); + + if (!cache[cacheIdx]) + { // return Unexpected(HostFunctionError::INVALID_SLOT); + auto const r = getCurrentLedgerObj(); + if (!r) + return Unexpected(r.error()); + cache[cacheIdx] = *r; + } + + return cache[cacheIdx]; + } + + Expected + normalizeCacheIndex(int32_t cacheIdx) + { + --cacheIdx; + if (cacheIdx < 0 || cacheIdx >= MAX_CACHE) + return Unexpected(HostFunctionError::SLOT_OUT_RANGE); + if (!cache[cacheIdx]) + return Unexpected(HostFunctionError::EMPTY_SLOT); + return cacheIdx; + } + virtual Expected cacheLedgerObj(uint256 const&, int32_t cacheIdx) override { + // auto const& keylet = keylet::unchecked(objId); + static int32_t intIdx = 0; if (cacheIdx < 0 || cacheIdx > MAX_CACHE) @@ -648,158 +756,157 @@ public: return cacheIdx + 1; } - static Bytes - getAnyFieldData(STBase const& obj) + static Expected + getAnyFieldData(STBase const* obj) { // auto const& fname = obj.getFName(); - auto const stype = obj.getSType(); + if (!obj) + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + + auto const stype = obj->getSType(); switch (stype) { + // LCOV_EXCL_START case STI_UNKNOWN: case STI_NOTPRESENT: - return {}; + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + break; + // LCOV_EXCL_STOP + case STI_OBJECT: + case STI_ARRAY: + return Unexpected(HostFunctionError::NOT_LEAF_FIELD); break; case STI_ACCOUNT: { - auto const& super(static_cast(obj)); - auto const& data = super.value(); - return {data.begin(), data.end()}; + auto const* account(static_cast(obj)); + auto const& data = account->value(); + return Bytes{data.begin(), data.end()}; } break; - case STI_AMOUNT: { - auto const& super(static_cast(obj)); - int64_t const data = super.xrp().drops(); - auto const* b = reinterpret_cast(&data); - auto const* e = reinterpret_cast(&data + 1); - return {b, e}; + case STI_AMOUNT: + // will be processed by serializer + break; + case STI_ISSUE: { + auto const* issue(static_cast(obj)); + Asset const& asset(issue->value()); + // XRP and IOU will be processed by serializer + if (asset.holds()) + { + // MPT + auto const& mptIssue = asset.get(); + auto const& mptID = mptIssue.getMptID(); + return Bytes{mptID.cbegin(), mptID.cend()}; + } } break; case STI_VL: { - auto const& super(static_cast(obj)); - auto const& data = super.value(); - return {data.begin(), data.end()}; + auto const* vl(static_cast(obj)); + auto const& data = vl->value(); + return Bytes{data.begin(), data.end()}; } break; - case STI_UINT256: { - auto const& super(static_cast const&>(obj)); - auto const& data = super.value(); - return {data.begin(), data.end()}; - } - break; - case STI_UINT32: { - auto const& super( - static_cast const&>(obj)); - std::uint32_t const data = super.value(); + case STI_UINT16: { + auto const& num( + static_cast const*>(obj)); + std::uint16_t const data = num->value(); auto const* b = reinterpret_cast(&data); auto const* e = reinterpret_cast(&data + 1); - return {b, e}; + return Bytes{b, e}; + } + case STI_UINT32: { + auto const* num( + static_cast const*>(obj)); + std::uint32_t const data = num->value(); + auto const* b = reinterpret_cast(&data); + auto const* e = reinterpret_cast(&data + 1); + return Bytes{b, e}; } break; default: - break; + break; // default to serializer } Serializer msg; - obj.add(msg); + obj->add(msg); + auto const data = msg.getData(); - return msg.getData(); + return data; } Expected getTxField(SField const& fname) override { - auto const* field = tx_->peekAtPField(fname); - if (!field) - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); - if ((STI_OBJECT == field->getSType()) || - (STI_ARRAY == field->getSType())) - return Unexpected(HostFunctionError::NOT_LEAF_FIELD); - - return getAnyFieldData(*field); + return getAnyFieldData(tx_->peekAtPField(fname)); } Expected getCurrentLedgerObjField(SField const& fname) override { - auto const sle = env_.le(leKey); + auto const sle = getCurrentLedgerObj(); if (!sle) - return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); - - auto const* field = sle->peekAtPField(fname); - if (!field) - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); - if ((STI_OBJECT == field->getSType()) || - (STI_ARRAY == field->getSType())) - return Unexpected(HostFunctionError::NOT_LEAF_FIELD); - - return getAnyFieldData(*field); + return Unexpected(sle.error()); + return getAnyFieldData((*sle)->peekAtPField(fname)); } Expected getLedgerObjField(int32_t cacheIdx, SField const& fname) override { - --cacheIdx; - if (cacheIdx < 0 || cacheIdx >= MAX_CACHE) - return Unexpected(HostFunctionError::SLOT_OUT_RANGE); + auto const sle = peekCurrentLedgerObj(cacheIdx); + if (!sle) + return Unexpected(sle.error()); + return getAnyFieldData((*sle)->peekAtPField(fname)); + } - if (!cache[cacheIdx]) - { - // return Unexpected(HostFunctionError::INVALID_SLOT); - cache[cacheIdx] = env_.le(leKey); - } - - auto const* field = cache[cacheIdx]->peekAtPField(fname); - if (!field) - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); - if ((STI_OBJECT == field->getSType()) || - (STI_ARRAY == field->getSType())) - return Unexpected(HostFunctionError::NOT_LEAF_FIELD); - - return getAnyFieldData(*field); + static inline bool + noField(STBase const* field) + { + return !field || (STI_NOTPRESENT == field->getSType()) || + (STI_UNKNOWN == field->getSType()); } static Expected - locateField(STObject const& obj, Slice const& loc) + locateField(STObject const& obj, Slice const& locator) { - if (loc.empty() || (loc.size() & 3)) // must be multiple of 4 + if (locator.empty() || (locator.size() & 3)) // must be multiple of 4 return Unexpected(HostFunctionError::LOCATOR_MALFORMED); - int32_t const* l = reinterpret_cast(loc.data()); - int32_t const sz = loc.size() / 4; + int32_t const* locPtr = + reinterpret_cast(locator.data()); + int32_t const locSize = locator.size() / 4; STBase const* field = nullptr; - auto const& m = SField::getKnownCodeToField(); + auto const& knownSFields = SField::getKnownCodeToField(); { - int32_t const c = l[0]; - auto const it = m.find(c); - if (it == m.end()) - return Unexpected(HostFunctionError::LOCATOR_MALFORMED); - auto const& fname(*it->second); + int32_t const sfieldCode = locPtr[0]; + auto const it = knownSFields.find(sfieldCode); + if (it == knownSFields.end()) + return Unexpected(HostFunctionError::INVALID_FIELD); + auto const& fname(*it->second); field = obj.peekAtPField(fname); - if (!field || (STI_NOTPRESENT == field->getSType())) + if (noField(field)) return Unexpected(HostFunctionError::FIELD_NOT_FOUND); } - for (int i = 1; i < sz; ++i) + for (int i = 1; i < locSize; ++i) { - int32_t const c = l[i]; + int32_t const sfieldCode = locPtr[i]; if (STI_ARRAY == field->getSType()) { auto const* arr = static_cast(field); - if (c >= arr->size()) - return Unexpected(HostFunctionError::LOCATOR_MALFORMED); - field = &(arr->operator[](c)); + if (sfieldCode >= arr->size()) + return Unexpected(HostFunctionError::INDEX_OUT_OF_BOUNDS); + field = &(arr->operator[](sfieldCode)); } else if (STI_OBJECT == field->getSType()) { auto const* o = static_cast(field); - auto const it = m.find(c); - if (it == m.end()) - return Unexpected(HostFunctionError::LOCATOR_MALFORMED); - auto const& fname(*it->second); + auto const it = knownSFields.find(sfieldCode); + if (it == knownSFields.end()) + return Unexpected(HostFunctionError::INVALID_FIELD); + auto const& fname(*it->second); field = o->peekAtPField(fname); } else // simple field must be the last one @@ -807,7 +914,7 @@ public: return Unexpected(HostFunctionError::LOCATOR_MALFORMED); } - if (!field || (STI_NOTPRESENT == field->getSType())) + if (noField(field)) return Unexpected(HostFunctionError::FIELD_NOT_FOUND); } @@ -822,57 +929,35 @@ public: auto const r = locateField(*tx_, locator); if (!r) return Unexpected(r.error()); - - auto const* field = r.value(); - if ((STI_OBJECT == field->getSType()) || - (STI_ARRAY == field->getSType())) - return Unexpected(HostFunctionError::NOT_LEAF_FIELD); - - return getAnyFieldData(*field); + return getAnyFieldData(*r); } Expected getCurrentLedgerObjNestedField(Slice const& locator) override { - auto const sle = env_.le(leKey); + auto const sle = getCurrentLedgerObj(); if (!sle) - return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); + return Unexpected(sle.error()); - auto const r = locateField(*sle, locator); + auto const r = locateField(**sle, locator); if (!r) return Unexpected(r.error()); - auto const* field = r.value(); - if ((STI_OBJECT == field->getSType()) || - (STI_ARRAY == field->getSType())) - return Unexpected(HostFunctionError::NOT_LEAF_FIELD); - - return getAnyFieldData(*field); + return getAnyFieldData(*r); } Expected getLedgerObjNestedField(int32_t cacheIdx, Slice const& locator) override { - --cacheIdx; - if (cacheIdx < 0 || cacheIdx >= MAX_CACHE) - return Unexpected(HostFunctionError::SLOT_OUT_RANGE); + auto const sle = peekCurrentLedgerObj(cacheIdx); + if (!sle) + return Unexpected(sle.error()); - if (!cache[cacheIdx]) - { - // return Unexpected(HostFunctionError::INVALID_SLOT); - cache[cacheIdx] = env_.le(leKey); - } - - auto const r = locateField(*cache[cacheIdx], locator); + auto const r = locateField(**sle, locator); if (!r) return Unexpected(r.error()); - auto const* field = r.value(); - if ((STI_OBJECT == field->getSType()) || - (STI_ARRAY == field->getSType())) - return Unexpected(HostFunctionError::NOT_LEAF_FIELD); - - return getAnyFieldData(*field); + return getAnyFieldData(*r); } Expected @@ -882,7 +967,7 @@ public: return Unexpected(HostFunctionError::NO_ARRAY); auto const* field = tx_->peekAtPField(fname); - if (!field) + if (noField(field)) return Unexpected(HostFunctionError::FIELD_NOT_FOUND); if (field->getSType() != STI_ARRAY) @@ -898,12 +983,12 @@ public: if (fname.fieldType != STI_ARRAY) return Unexpected(HostFunctionError::NO_ARRAY); - auto const sle = env_.le(leKey); + auto const sle = getCurrentLedgerObj(); if (!sle) - return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); + return Unexpected(sle.error()); - auto const* field = sle->peekAtPField(fname); - if (!field) + auto const* field = (*sle)->peekAtPField(fname); + if (noField(field)) return Unexpected(HostFunctionError::FIELD_NOT_FOUND); if (field->getSType() != STI_ARRAY) @@ -919,17 +1004,12 @@ public: if (fname.fieldType != STI_ARRAY) return Unexpected(HostFunctionError::NO_ARRAY); - if (cacheIdx < 0 || cacheIdx >= MAX_CACHE) - return Unexpected(HostFunctionError::SLOT_OUT_RANGE); + auto const sle = peekCurrentLedgerObj(cacheIdx); + if (!sle) + return Unexpected(sle.error()); - if (!cache[cacheIdx]) - { - // return Unexpected(HostFunctionError::INVALID_SLOT); - cache[cacheIdx] = env_.le(leKey); - } - - auto const* field = cache[cacheIdx]->peekAtPField(fname); - if (!field) + auto const* field = (*sle)->peekAtPField(fname); + if (noField(field)) return Unexpected(HostFunctionError::FIELD_NOT_FOUND); if (field->getSType() != STI_ARRAY) @@ -957,10 +1037,11 @@ public: Expected getCurrentLedgerObjNestedArrayLen(Slice const& locator) override { - auto const sle = env_.le(leKey); + auto const sle = getCurrentLedgerObj(); if (!sle) - return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); - auto const r = locateField(*sle, locator); + return Unexpected(sle.error()); + + auto const r = locateField(**sle, locator); if (!r) return Unexpected(r.error()); auto const* field = r.value(); @@ -975,17 +1056,11 @@ public: Expected getLedgerObjNestedArrayLen(int32_t cacheIdx, Slice const& locator) override { - --cacheIdx; - if (cacheIdx < 0 || cacheIdx >= MAX_CACHE) - return Unexpected(HostFunctionError::SLOT_OUT_RANGE); + auto const sle = peekCurrentLedgerObj(cacheIdx); + if (!sle) + return Unexpected(sle.error()); - if (!cache[cacheIdx]) - { - // return Unexpected(HostFunctionError::INVALID_SLOT); - cache[cacheIdx] = env_.le(leKey); - } - - auto const r = locateField(*cache[cacheIdx], locator); + auto const r = locateField(**sle, locator); if (!r) return Unexpected(r.error()); @@ -1001,6 +1076,9 @@ public: Expected updateData(Slice const& data) override { + if (data.size() > maxWasmDataLength) + return Unexpected(HostFunctionError::DATA_FIELD_TOO_LARGE); + ripple::detail::ApplyViewBase v( env_.app().openLedger().current().get(), tapNONE); @@ -1014,6 +1092,19 @@ public: return data.size(); } + Expected + checkSignature( + Slice const& message, + Slice const& signature, + Slice const& pubkey) override + { + if (!publicKeyType(pubkey)) + return Unexpected(HostFunctionError::INVALID_PARAMS); + + PublicKey const pk(pubkey); + return verify(pk, message, signature, /*canonical*/ true); + } + Expected computeSha512HalfHash(Slice const& data) override { @@ -1021,6 +1112,215 @@ public: return hash; } + Expected + accountKeylet(AccountID const& account) override + { + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::account(account); + return Bytes{keylet.key.begin(), keylet.key.end()}; + } + + Expected + ammKeylet(Asset const& issue1, Asset const& issue2) override + { + if (issue1 == issue2) + return Unexpected(HostFunctionError::INVALID_PARAMS); + + // note: this should be removed with the MPT DEX amendment + if (issue1.holds() || issue2.holds()) + return Unexpected(HostFunctionError::INVALID_PARAMS); + + auto const keylet = keylet::amm(issue1, issue2); + return Bytes{keylet.key.begin(), keylet.key.end()}; + } + + Expected + checkKeylet(AccountID const& account, std::uint32_t seq) override + { + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::check(account, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; + } + + Expected + credentialKeylet( + AccountID const& subject, + AccountID const& issuer, + Slice const& credentialType) override + { + if (!subject || !issuer) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + + if (credentialType.empty() || + credentialType.size() > maxCredentialTypeLength) + return Unexpected(HostFunctionError::INVALID_PARAMS); + + auto const keylet = keylet::credential(subject, issuer, credentialType); + + return Bytes{keylet.key.begin(), keylet.key.end()}; + } + + Expected + didKeylet(AccountID const& account) override + { + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::did(account); + return Bytes{keylet.key.begin(), keylet.key.end()}; + } + + Expected + delegateKeylet(AccountID const& account, AccountID const& authorize) + override + { + if (!account || !authorize) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + if (account == authorize) + return Unexpected(HostFunctionError::INVALID_PARAMS); + auto const keylet = keylet::delegate(account, authorize); + return Bytes{keylet.key.begin(), keylet.key.end()}; + } + + Expected + depositPreauthKeylet(AccountID const& account, AccountID const& authorize) + override + { + if (!account || !authorize) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + if (account == authorize) + return Unexpected(HostFunctionError::INVALID_PARAMS); + auto const keylet = keylet::depositPreauth(account, authorize); + return Bytes{keylet.key.begin(), keylet.key.end()}; + } + + Expected + escrowKeylet(AccountID const& account, std::uint32_t seq) override + { + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::escrow(account, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; + } + + Expected + lineKeylet( + AccountID const& account1, + AccountID const& account2, + Currency const& currency) override + { + if (!account1 || !account2) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + if (account1 == account2) + return Unexpected(HostFunctionError::INVALID_PARAMS); + if (currency.isZero()) + return Unexpected(HostFunctionError::INVALID_PARAMS); + + auto const keylet = keylet::line(account1, account2, currency); + return Bytes{keylet.key.begin(), keylet.key.end()}; + } + + Expected + mptIssuanceKeylet(AccountID const& issuer, std::uint32_t seq) override + { + if (!issuer) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + + auto const keylet = keylet::mptIssuance(seq, issuer); + return Bytes{keylet.key.begin(), keylet.key.end()}; + } + + Expected + mptokenKeylet(MPTID const& mptid, AccountID const& holder) override + { + if (!mptid) + return Unexpected(HostFunctionError::INVALID_PARAMS); + if (!holder) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + + auto const keylet = keylet::mptoken(mptid, holder); + return Bytes{keylet.key.begin(), keylet.key.end()}; + } + + Expected + nftOfferKeylet(AccountID const& account, std::uint32_t seq) override + { + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::nftoffer(account, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; + } + + Expected + offerKeylet(AccountID const& account, std::uint32_t seq) override + { + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::offer(account, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; + } + + Expected + oracleKeylet(AccountID const& account, std::uint32_t documentId) override + { + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::oracle(account, documentId); + return Bytes{keylet.key.begin(), keylet.key.end()}; + } + + Expected + paychanKeylet( + AccountID const& account, + AccountID const& destination, + std::uint32_t seq) override + { + if (!account || !destination) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + if (account == destination) + return Unexpected(HostFunctionError::INVALID_PARAMS); + auto const keylet = keylet::payChan(account, destination, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; + } + + Expected + permissionedDomainKeylet(AccountID const& account, std::uint32_t seq) + override + { + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::permissionedDomain(account, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; + } + + Expected + signersKeylet(AccountID const& account) override + { + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::signers(account); + return Bytes{keylet.key.begin(), keylet.key.end()}; + } + + Expected + ticketKeylet(AccountID const& account, std::uint32_t seq) override + { + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::ticket(account, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; + } + + Expected + vaultKeylet(AccountID const& account, std::uint32_t seq) override + { + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::vault(account, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; + } + Expected getNFT(AccountID const& account, uint256 const& nftId) override { @@ -1044,6 +1344,40 @@ public: Slice const s = ouri->value(); return Bytes(s.begin(), s.end()); } + + Expected + getNFTIssuer(uint256 const& nftId) override + { + auto const issuer = nft::getIssuer(nftId); + if (!issuer) + return Unexpected(HostFunctionError::INVALID_PARAMS); + + return Bytes{issuer.begin(), issuer.end()}; + } + + Expected + getNFTTaxon(uint256 const& nftId) override + { + return nft::toUInt32(nft::getTaxon(nftId)); + } + + Expected + getNFTFlags(uint256 const& nftId) override + { + return nft::getFlags(nftId); + } + + Expected + getNFTTransferFee(uint256 const& nftId) override + { + return nft::getTransferFee(nftId); + } + + Expected + getNFTSerial(uint256 const& nftId) override + { + return nft::getSerial(nftId); + } }; } // namespace test diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index bd4f7d4380..4348e14130 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -519,7 +519,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 91'412, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 96'942, std::to_string(re->cost)); } env.close(); } @@ -534,7 +534,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 6'533, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 2'053, std::to_string(re->cost)); } env.close(); } @@ -550,13 +550,12 @@ struct Wasm_test : public beast::unit_test::suite // std::string const funcName("test"); auto const& wasmHex = hfPerfTest; - // auto const& wasmHex = opcCallPerfTest; std::string const wasmStr = boost::algorithm::unhex(wasmHex); std::vector const wasm(wasmStr.begin(), wasmStr.end()); - std::string const credType = "abcde"; - std::string const credType2 = "fghijk"; - std::string const credType3 = "0123456"; + // std::string const credType = "abcde"; + // std::string const credType2 = "fghijk"; + // std::string const credType3 = "0123456"; // char const uri[] = "uri"; Account const alan{"alan"}; @@ -597,7 +596,7 @@ struct Wasm_test : public beast::unit_test::suite // {issuer, credType2}, // {issuer, credType3}})); - // cREATE nft + // create nft [[maybe_unused]] uint256 const nft0{ token::getNextID(env, alan, 0u)}; env(token::mint(alan, 0u)); @@ -649,7 +648,7 @@ struct Wasm_test : public beast::unit_test::suite Bytes const wasm(wasmStr.begin(), wasmStr.end()); TestHostFunctions hfs(env, 0); - auto const allowance = 148'406; + auto const allowance = 153'296; auto re = runEscrowWasm( wasm, ESCROW_FUNCTION_NAME, {}, &hfs, allowance, env.journal); diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index de2ad6291b..8fb6340bed 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -9571,41 +9571,38 @@ extern std::string const deepRecursionHex = "2d657874"; extern std::string const hfPerfTest = - "0061736d0100000001180460037f7f7e017f60057f7f7f7f7f017f600000" - "6000017f021d0203656e760974726163655f6e756d000003656e76057472" - "616365000103030202030503010002068601167f0041a0090b7f0041a011" - "0b7f0041e0080b7f0041a0080b7f0041c0080b7f004180080b7f00418408" - "0b7f004188080b7f00418c080b7f004190080b7f004194080b7f00419808" - "0b7f004180090b7f004180080b7f0041e0110b7f0041e0110b7f0041e091" - "040b7f004180080b7f0041e091040b7f00418080080b7f0041000b7f0041" - "010b07c50219066d656d6f72790200115f5f7761736d5f63616c6c5f6374" - "6f727300020666696e6973680003036275660300076c6f635f6275660301" - "036d73670302086572725f686561640303096572725f646174613103040a" - "53465f4163636f756e7403050e53465f44657374696e6174696f6e030608" - "53465f4d656d6f7303070753465f4d656d6f03080b53465f4d656d6f4461" - "746103090753465f44617461030a1753465f417574686f72697a65437265" - "64656e7469616c73030b066163635f6964030c0c5f5f64736f5f68616e64" - "6c65030d0a5f5f646174615f656e64030e0b5f5f737461636b5f6c6f7703" - "0f0c5f5f737461636b5f6869676803100d5f5f676c6f62616c5f62617365" - "03110b5f5f686561705f6261736503120a5f5f686561705f656e6403130d" - "5f5f6d656d6f72795f6261736503140c5f5f7461626c655f626173650315" - "0aa2010202000b9c0102017f017e41807821000340200041a0116a420037" - "0300200041086a22000d000b41d811420037030041d011420037030041c8" - "11420037030041c011420037030041b811420037030041b0114200370300" - "41a811428d801c37030041a011429a803c3703000240034041e008411020" - "0110004118460440200142017c220142c0843d520d010c020b0b41a00841" - "1441c0084113410010011a0b41010b0b840104004180080b340100080003" - "00080009000f000a000e000d0007001b0007001a000f0000000000676574" - "5f6c65646765725f73716e206572726f720041c0080b13696e76616c6964" - "2072657475726e2073697a650041e0080b104e6577206163636f756e7420" - "69643a20004180090b14fc4f9afac9f1a8db807fda7dc9247bb557569d58" - "007f0970726f647563657273010c70726f6365737365642d62790105636c" - "616e675f31392e312e352d776173692d73646b202868747470733a2f2f67" - "69746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a656374206162" - "346235613264623538323935386166316565333038613739306366646234" - "32626432343732302900490f7461726765745f6665617475726573042b0f" - "6d757461626c652d676c6f62616c732b087369676e2d6578742b0f726566" - "6572656e63652d74797065732b0a6d756c746976616c7565"; + "0061736d0100000001190460057f7f7f7f7f017f60047f7f7f7f017f6000006000017f0236" + "0303656e7609666c6f61745f6c6f67000003656e76057472616365000003656e7612747261" + "63655f6f70617175655f666c6f617400010303020203050301000206aa011c7f0041b0090b" + "7f004193090b7f0041b0080b7f0041c0080b7f0041e0080b7f004180090b7f004180080b7f" + "004184080b7f004188080b7f00418c080b7f004190080b7f004194080b7f004198080b7f00" + "419c080b7f0041a0080b7f0041a4080b7f0041a8080b7f0041ac080b7f00419b090b7f0041" + "80080b7f0041b0110b7f0041b0110b7f0041b091040b7f004180080b7f0041b091040b7f00" + "418080080b7f0041000b7f0041010b0785031f066d656d6f72790200115f5f7761736d5f63" + "616c6c5f63746f727300030666696e697368000403627566030001610301086572725f6865" + "61640302096572725f6461746131030305696e707574030406726573756c74030508495445" + "525f4d4158030609484153485f53495a450307084143435f53495a4503080d43555252454e" + "43595f53495a4503090b4b45594c45545f53495a45030a0a53465f4163636f756e74030b0e" + "53465f44657374696e6174696f6e030c0853465f4d656d6f73030d0753465f4d656d6f030e" + "0b53465f4d656d6f44617461030f0753465f4461746103101753465f417574686f72697a65" + "43726564656e7469616c730311016203120c5f5f64736f5f68616e646c6503130a5f5f6461" + "74615f656e6403140b5f5f737461636b5f6c6f7703150c5f5f737461636b5f686967680316" + "0d5f5f676c6f62616c5f6261736503170b5f5f686561705f6261736503180a5f5f68656170" + "5f656e6403190d5f5f6d656d6f72795f62617365031a0c5f5f7461626c655f62617365031b" + "0a7c0202000b7701017f41807821000340200041b0116a4200370300200041086a22000d00" + "0b41c0843d210002400340419309410841b009418008410010004108460440200041016b22" + "000d010c020b0b41b008410f41c0084113410010011a0b41e0084111419309410810021a41" + "8009411241b009410810021a41010b0b9f0104004180080b53809698002000000014000000" + "1400000020000000010008000300080009000f000a000e000d0007001b0007001a000f0066" + "6c6f61745f6c6f67206572726f7200696e76616c69642072657475726e2073697a650041e0" + "080b11666c6f61745f6c6f6720696e7075743a20004180090b12666c6f61745f6c6f672072" + "6573756c743a20004193090b10d48b29430a256d21d920c49ba5e353f8007f0970726f6475" + "63657273010c70726f6365737365642d62790105636c616e675f31392e312e352d77617369" + "2d73646b202868747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d7072" + "6f6a6563742061623462356132646235383239353861663165653330386137393063666462" + "3432626432343732302900490f7461726765745f6665617475726573042b0f6d757461626c" + "652d676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b" + "0a6d756c746976616c7565"; extern std::string const allKeyletsWasmHex = "0061736d0100000001530a60057f7f7f7f7f017f60047f7f7f7f017f60067f7f7f7f7f7f01" diff --git a/src/xrpld/app/wasm/HostFuncImpl.h b/src/xrpld/app/wasm/HostFuncImpl.h index 5539a5ef40..7c02e3160e 100644 --- a/src/xrpld/app/wasm/HostFuncImpl.h +++ b/src/xrpld/app/wasm/HostFuncImpl.h @@ -50,7 +50,15 @@ class WasmHostFunctionsImpl : public HostFunctions } Expected - normalizeCacheIndex(int32_t cacheIdx); + normalizeCacheIndex(int32_t cacheIdx) + { + --cacheIdx; + if (cacheIdx < 0 || cacheIdx >= MAX_CACHE) + return Unexpected(HostFunctionError::SLOT_OUT_RANGE); + if (!cache[cacheIdx]) + return Unexpected(HostFunctionError::EMPTY_SLOT); + return cacheIdx; + } public: WasmHostFunctionsImpl(ApplyContext& ctx, Keylet const& leKey) diff --git a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp index 4b585acdcd..af8eff36ee 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp @@ -90,17 +90,6 @@ WasmHostFunctionsImpl::isAmendmentEnabled(std::string_view const& amendmentName) return ctx.view().rules().enabled(amendment); } -Expected -WasmHostFunctionsImpl::normalizeCacheIndex(int32_t cacheIdx) -{ - --cacheIdx; - if (cacheIdx < 0 || cacheIdx >= MAX_CACHE) - return Unexpected(HostFunctionError::SLOT_OUT_RANGE); - if (!cache[cacheIdx]) - return Unexpected(HostFunctionError::EMPTY_SLOT); - return cacheIdx; -} - Expected WasmHostFunctionsImpl::cacheLedgerObj(uint256 const& objId, int32_t cacheIdx) { @@ -1296,7 +1285,7 @@ floatPowerImpl(Slice const& x, int32_t n, int32_t mode) { try { - if (n < 0) + if ((n < 0) || (n > IOUAmount::maxExponent)) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); SetRound rm(mode); diff --git a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp index 5293f1db78..304fc9eeda 100644 --- a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp @@ -107,7 +107,11 @@ getDataSField(IW const* _runtime, wasm_val_vec_t const* params, int32_t& i) template Expected -getDataSlice(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataSlice( + IW const* runtime, + wasm_val_vec_t const* params, + int32_t& i, + bool isUpdate = false) { auto const ptr = params->data[i].of.i32; auto const size = params->data[i + 1].of.i32; @@ -117,7 +121,7 @@ getDataSlice(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) if (!size) return Slice(); - if (size > maxWasmDataLength) + if (size > (isUpdate ? maxWasmDataLength : maxWasmParamLength)) return Unexpected(HostFunctionError::DATA_FIELD_TOO_LARGE); auto memory = runtime ? runtime->getMem() : wmem(); @@ -751,7 +755,7 @@ updateData_wrap( auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; - auto const bytes = getDataSlice(runtime, params, index); + auto const bytes = getDataSlice(runtime, params, index, true); if (!bytes) { return hfResult(results, bytes.error()); @@ -1491,7 +1495,7 @@ trace_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; - if (params->data[1].of.i32 + params->data[3].of.i32 > maxWasmDataLength) + if (params->data[1].of.i32 + params->data[3].of.i32 > maxWasmParamLength) { return hfResult(results, HostFunctionError::DATA_FIELD_TOO_LARGE); } @@ -1524,7 +1528,7 @@ traceNum_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) auto* hf = reinterpret_cast(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; - if (params->data[1].of.i32 > maxWasmDataLength) + if (params->data[1].of.i32 > maxWasmParamLength) { return hfResult(results, HostFunctionError::DATA_FIELD_TOO_LARGE); } @@ -1554,7 +1558,7 @@ traceAccount_wrap( auto* hf = reinterpret_cast(env); auto const* runtime = reinterpret_cast(hf->getRT()); - if (params->data[1].of.i32 > maxWasmDataLength) + if (params->data[1].of.i32 > maxWasmParamLength) return hfResult(results, HostFunctionError::DATA_FIELD_TOO_LARGE); int i = 0; @@ -1579,7 +1583,7 @@ traceFloat_wrap( auto* hf = reinterpret_cast(env); auto const* runtime = reinterpret_cast(hf->getRT()); - if (params->data[1].of.i32 > maxWasmDataLength) + if (params->data[1].of.i32 > maxWasmParamLength) return hfResult(results, HostFunctionError::DATA_FIELD_TOO_LARGE); int i = 0; @@ -1604,7 +1608,7 @@ traceAmount_wrap( auto* hf = reinterpret_cast(env); auto const* runtime = reinterpret_cast(hf->getRT()); - if (params->data[1].of.i32 > maxWasmDataLength) + if (params->data[1].of.i32 > maxWasmParamLength) return hfResult(results, HostFunctionError::DATA_FIELD_TOO_LARGE); int i = 0; diff --git a/src/xrpld/app/wasm/detail/WasmVM.cpp b/src/xrpld/app/wasm/detail/WasmVM.cpp index d9dd67860d..022d66f982 100644 --- a/src/xrpld/app/wasm/detail/WasmVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmVM.cpp @@ -44,9 +44,9 @@ setCommonHostFunctions(HostFunctions* hfs, std::vector& i) WASM_IMPORT_FUNC2(i, getLedgerAccountHash, "get_ledger_account_hash", hfs, 60); WASM_IMPORT_FUNC2(i, getLedgerTransactionHash, "get_ledger_tx_hash", hfs, 60); WASM_IMPORT_FUNC2(i, getBaseFee, "get_base_fee", hfs, 60); - WASM_IMPORT_FUNC2(i, isAmendmentEnabled, "amendment_enabled", hfs, 60); + WASM_IMPORT_FUNC2(i, isAmendmentEnabled, "amendment_enabled", hfs, 100); - WASM_IMPORT_FUNC2(i, cacheLedgerObj, "cache_ledger_obj", hfs, 5000); + WASM_IMPORT_FUNC2(i, cacheLedgerObj, "cache_ledger_obj", hfs, 5'000); WASM_IMPORT_FUNC2(i, getTxField, "get_tx_field", hfs, 70); WASM_IMPORT_FUNC2(i, getCurrentLedgerObjField, "get_current_ledger_obj_field", hfs, 70); WASM_IMPORT_FUNC2(i, getLedgerObjField, "get_ledger_obj_field", hfs, 70); @@ -60,20 +60,20 @@ setCommonHostFunctions(HostFunctions* hfs, std::vector& i) WASM_IMPORT_FUNC2(i, getCurrentLedgerObjNestedArrayLen, "get_current_ledger_obj_nested_array_len", hfs, 70); WASM_IMPORT_FUNC2(i, getLedgerObjNestedArrayLen, "get_ledger_obj_nested_array_len", hfs, 70); - WASM_IMPORT_FUNC2(i, checkSignature, "check_sig", hfs, 2000); + WASM_IMPORT_FUNC2(i, checkSignature, "check_sig", hfs, 300); WASM_IMPORT_FUNC2(i, computeSha512HalfHash, "compute_sha512_half", hfs, 2000); WASM_IMPORT_FUNC2(i, accountKeylet, "account_keylet", hfs, 350); - WASM_IMPORT_FUNC2(i, ammKeylet, "amm_keylet", hfs, 350); + WASM_IMPORT_FUNC2(i, ammKeylet, "amm_keylet", hfs, 450); WASM_IMPORT_FUNC2(i, checkKeylet, "check_keylet", hfs, 350); WASM_IMPORT_FUNC2(i, credentialKeylet, "credential_keylet", hfs, 350); WASM_IMPORT_FUNC2(i, delegateKeylet, "delegate_keylet", hfs, 350); WASM_IMPORT_FUNC2(i, depositPreauthKeylet, "deposit_preauth_keylet", hfs, 350); WASM_IMPORT_FUNC2(i, didKeylet, "did_keylet", hfs, 350); WASM_IMPORT_FUNC2(i, escrowKeylet, "escrow_keylet", hfs, 350); - WASM_IMPORT_FUNC2(i, lineKeylet, "line_keylet", hfs, 350); + WASM_IMPORT_FUNC2(i, lineKeylet, "line_keylet", hfs, 400); WASM_IMPORT_FUNC2(i, mptIssuanceKeylet, "mpt_issuance_keylet", hfs, 350); - WASM_IMPORT_FUNC2(i, mptokenKeylet, "mptoken_keylet", hfs, 350); + WASM_IMPORT_FUNC2(i, mptokenKeylet, "mptoken_keylet", hfs, 500); WASM_IMPORT_FUNC2(i, nftOfferKeylet, "nft_offer_keylet", hfs, 350); WASM_IMPORT_FUNC2(i, offerKeylet, "offer_keylet", hfs, 350); WASM_IMPORT_FUNC2(i, oracleKeylet, "oracle_keylet", hfs, 350); @@ -84,7 +84,7 @@ setCommonHostFunctions(HostFunctions* hfs, std::vector& i) WASM_IMPORT_FUNC2(i, vaultKeylet, "vault_keylet", hfs, 350); WASM_IMPORT_FUNC2(i, getNFT, "get_nft", hfs, 1000); - WASM_IMPORT_FUNC2(i, getNFTIssuer, "get_nft_issuer", hfs, 60); + WASM_IMPORT_FUNC2(i, getNFTIssuer, "get_nft_issuer", hfs, 70); WASM_IMPORT_FUNC2(i, getNFTTaxon, "get_nft_taxon", hfs, 60); WASM_IMPORT_FUNC2(i, getNFTFlags, "get_nft_flags", hfs, 60); WASM_IMPORT_FUNC2(i, getNFTTransferFee, "get_nft_transfer_fee", hfs, 60); @@ -96,17 +96,17 @@ setCommonHostFunctions(HostFunctions* hfs, std::vector& i) WASM_IMPORT_FUNC2(i, traceFloat, "trace_opaque_float", hfs, 500); WASM_IMPORT_FUNC2(i, traceAmount, "trace_amount", hfs, 500); - WASM_IMPORT_FUNC2(i, floatFromInt, "float_from_int", hfs, 1000); - WASM_IMPORT_FUNC2(i, floatFromUint, "float_from_uint", hfs, 1000); - WASM_IMPORT_FUNC2(i, floatSet, "float_set", hfs, 1000); - WASM_IMPORT_FUNC2(i, floatCompare, "float_compare", hfs, 1000); - WASM_IMPORT_FUNC2(i, floatAdd, "float_add", hfs, 1000); - WASM_IMPORT_FUNC2(i, floatSubtract, "float_subtract", hfs, 1000); - WASM_IMPORT_FUNC2(i, floatMultiply, "float_multiply", hfs, 1000); - WASM_IMPORT_FUNC2(i, floatDivide, "float_divide", hfs, 1000); - WASM_IMPORT_FUNC2(i, floatRoot, "float_root", hfs, 1000); - WASM_IMPORT_FUNC2(i, floatPower, "float_pow", hfs, 1000); - WASM_IMPORT_FUNC2(i, floatLog, "float_log", hfs, 1000); + WASM_IMPORT_FUNC2(i, floatFromInt, "float_from_int", hfs, 100); + WASM_IMPORT_FUNC2(i, floatFromUint, "float_from_uint", hfs, 130); + WASM_IMPORT_FUNC2(i, floatSet, "float_set", hfs, 100); + WASM_IMPORT_FUNC2(i, floatCompare, "float_compare", hfs, 80); + WASM_IMPORT_FUNC2(i, floatAdd, "float_add", hfs, 160); + WASM_IMPORT_FUNC2(i, floatSubtract, "float_subtract", hfs, 160); + WASM_IMPORT_FUNC2(i, floatMultiply, "float_multiply", hfs, 300); + WASM_IMPORT_FUNC2(i, floatDivide, "float_divide", hfs, 300); + WASM_IMPORT_FUNC2(i, floatRoot, "float_root", hfs, 5'500); + WASM_IMPORT_FUNC2(i, floatPower, "float_pow", hfs, 5'500); + WASM_IMPORT_FUNC2(i, floatLog, "float_log", hfs, 12'000); // clang-format on } From d24cd50e6111f1fd0c21575c78bd908be0f34c94 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Tue, 23 Sep 2025 16:39:21 -0400 Subject: [PATCH 017/137] Switch to own wamr fork (#5808) --- external/wamr/conandata.yml | 6 - external/wamr/conanfile.py | 16 +- external/wamr/patches/ripp_metering.patch | 901 ---------------------- 3 files changed, 6 insertions(+), 917 deletions(-) delete mode 100644 external/wamr/conandata.yml delete mode 100644 external/wamr/patches/ripp_metering.patch diff --git a/external/wamr/conandata.yml b/external/wamr/conandata.yml deleted file mode 100644 index d475ad987c..0000000000 --- a/external/wamr/conandata.yml +++ /dev/null @@ -1,6 +0,0 @@ -patches: - 2.4.1: - - patch_description: add metering to iwasm interpreter - patch_file: patches/ripp_metering.patch - patch_type: conan - diff --git a/external/wamr/conanfile.py b/external/wamr/conanfile.py index 429c509795..7057ef9808 100644 --- a/external/wamr/conanfile.py +++ b/external/wamr/conanfile.py @@ -1,10 +1,6 @@ from conan import ConanFile, tools from conan.tools.cmake import CMake, CMakeToolchain, CMakeDeps, cmake_layout -from conan.tools.files import ( - apply_conandata_patches, - export_conandata_patches, - # get, -) +#from conan.tools.files import (apply_conandata_patches, export_conandata_patches,) from conan.tools.scm import Git # import os @@ -16,7 +12,7 @@ class WamrConan(ConanFile): name = "wamr" version = "2.4.1" license = "Apache License v2.0" - url = "https://github.com/bytecodealliance/wasm-micro-runtime.git" + url = "https://github.com/ripple/wasm-micro-runtime.git" description = "Webassembly micro runtime" package_type = "library" settings = "os", "compiler", "build_type", "arch" @@ -25,7 +21,7 @@ class WamrConan(ConanFile): # requires = [("llvm/20.1.1@")] def export_sources(self): - export_conandata_patches(self) + #export_conandata_patches(self) pass # def build_requirements(self): @@ -41,8 +37,8 @@ class WamrConan(ConanFile): def source(self): git = Git(self) git.fetch_commit( - url="https://github.com/bytecodealliance/wasm-micro-runtime.git", - commit="b124f70345d712bead5c0c2393acb2dc583511de", + url="https://github.com/ripple/wasm-micro-runtime.git", + commit="a87e56fe8042bbe3ed99a514333ddef42e6c2a41", ) # get(self, **self.conan_data["sources"][self.version], strip_root=True) @@ -71,7 +67,7 @@ class WamrConan(ConanFile): deps.generate() def build(self): - apply_conandata_patches(self) + #apply_conandata_patches(self) cmake = CMake(self) cmake.verbose = True cmake.configure() diff --git a/external/wamr/patches/ripp_metering.patch b/external/wamr/patches/ripp_metering.patch deleted file mode 100644 index 2e8ec70d7a..0000000000 --- a/external/wamr/patches/ripp_metering.patch +++ /dev/null @@ -1,901 +0,0 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 4b28fa89..7d523a3d 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -1,7 +1,7 @@ - # Copyright (C) 2019 Intel Corporation. All rights reserved. - # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception - --cmake_minimum_required (VERSION 3.14) -+cmake_minimum_required (VERSION 3.20) - - option(BUILD_SHARED_LIBS "Build using shared libraries" OFF) - -@@ -170,7 +170,7 @@ if (MINGW) - endif () - - if (WIN32) -- target_link_libraries(vmlib PRIVATE ntdll) -+ target_link_libraries(vmlib PUBLIC ntdll) - endif() - - set (WAMR_PUBLIC_HEADERS -diff --git a/core/iwasm/aot/aot_runtime.c b/core/iwasm/aot/aot_runtime.c -index d2621fb2..6c96a844 100644 ---- a/core/iwasm/aot/aot_runtime.c -+++ b/core/iwasm/aot/aot_runtime.c -@@ -5611,7 +5611,7 @@ aot_resolve_import_func(AOTModule *module, AOTImportFunc *import_func) - import_func->func_ptr_linked = wasm_native_resolve_symbol( - import_func->module_name, import_func->func_name, - import_func->func_type, &import_func->signature, -- &import_func->attachment, &import_func->call_conv_raw); -+ &import_func->attachment, NULL, &import_func->call_conv_raw); - #if WASM_ENABLE_MULTI_MODULE != 0 - if (!import_func->func_ptr_linked) { - if (!wasm_runtime_is_built_in_module(import_func->module_name)) { -diff --git a/core/iwasm/common/wasm_c_api.c b/core/iwasm/common/wasm_c_api.c -index 269ec577..34eb7c34 100644 ---- a/core/iwasm/common/wasm_c_api.c -+++ b/core/iwasm/common/wasm_c_api.c -@@ -3242,10 +3242,20 @@ wasm_func_copy(const wasm_func_t *func) - - cloned->func_idx_rt = func->func_idx_rt; - cloned->inst_comm_rt = func->inst_comm_rt; -+ cloned->gas = func->gas; - - RETURN_OBJ(cloned, wasm_func_delete) - } - -+uint32_t -+wasm_func_set_gas(wasm_func_t *func, uint32_t gas) -+{ -+ if(!func) return 0; -+ -+ func->gas = gas; -+ return gas; -+} -+ - own wasm_functype_t * - wasm_func_type(const wasm_func_t *func) - { -@@ -4998,11 +5008,11 @@ wasm_instance_new_with_args_ex(wasm_store_t *store, const wasm_module_t *module, - goto failed; - } - -+ WASMModuleInstance *wasm_module_inst = NULL; - /* create the c-api func import list */ - #if WASM_ENABLE_INTERP != 0 - if (instance->inst_comm_rt->module_type == Wasm_Module_Bytecode) { -- WASMModuleInstance *wasm_module_inst = -- (WASMModuleInstance *)instance->inst_comm_rt; -+ wasm_module_inst = (WASMModuleInstance *)instance->inst_comm_rt; - p_func_imports = &(wasm_module_inst->c_api_func_imports); - import_func_count = MODULE_INTERP(module)->import_function_count; - } -@@ -5052,6 +5062,13 @@ wasm_instance_new_with_args_ex(wasm_store_t *store, const wasm_module_t *module, - } - bh_assert(func_import->func_ptr_linked); - -+ // fill gas -+ if(wasm_module_inst) { -+ WASMFunctionInstance *fi = wasm_module_inst->e->functions + func_host->func_idx_rt; -+ if(fi) fi->gas = func_host->gas; -+ } -+ -+ - func_import++; - } - -@@ -5389,3 +5406,8 @@ wasm_instance_get_wasm_func_exec_time(const wasm_instance_t *instance, - return -1.0; - #endif - } -+ -+wasm_exec_env_t wasm_instance_exec_env(const wasm_instance_t *instance) -+{ -+ return wasm_runtime_get_exec_env_singleton(instance->inst_comm_rt); -+} -diff --git a/core/iwasm/common/wasm_c_api_internal.h b/core/iwasm/common/wasm_c_api_internal.h -index 49a17a96..19a85980 100644 ---- a/core/iwasm/common/wasm_c_api_internal.h -+++ b/core/iwasm/common/wasm_c_api_internal.h -@@ -142,6 +142,10 @@ struct wasm_func_t { - void (*finalizer)(void *); - } cb_env; - } u; -+ -+ // gas cost for import func -+ uint32 gas; -+ - /* - * an index in both functions runtime instance lists - * of interpreter mode and aot mode -diff --git a/core/iwasm/common/wasm_exec_env.c b/core/iwasm/common/wasm_exec_env.c -index 47752950..5f26d886 100644 ---- a/core/iwasm/common/wasm_exec_env.c -+++ b/core/iwasm/common/wasm_exec_env.c -@@ -86,7 +86,7 @@ wasm_exec_env_create_internal(struct WASMModuleInstanceCommon *module_inst, - #endif - - #if WASM_ENABLE_INSTRUCTION_METERING != 0 -- exec_env->instructions_to_execute = -1; -+ exec_env->instructions_to_execute = INT64_MAX; - #endif - - return exec_env; -diff --git a/core/iwasm/common/wasm_exec_env.h b/core/iwasm/common/wasm_exec_env.h -index 5d80312f..b2ecce2e 100644 ---- a/core/iwasm/common/wasm_exec_env.h -+++ b/core/iwasm/common/wasm_exec_env.h -@@ -89,7 +89,7 @@ typedef struct WASMExecEnv { - - #if WASM_ENABLE_INSTRUCTION_METERING != 0 - /* instructions to execute */ -- int instructions_to_execute; -+ int64 instructions_to_execute; - #endif - - #if WASM_ENABLE_FAST_JIT != 0 -diff --git a/core/iwasm/common/wasm_native.c b/core/iwasm/common/wasm_native.c -index 060bb2c3..9221c36a 100644 ---- a/core/iwasm/common/wasm_native.c -+++ b/core/iwasm/common/wasm_native.c -@@ -180,9 +180,9 @@ native_symbol_cmp(const void *native_symbol1, const void *native_symbol2) - ((const NativeSymbol *)native_symbol2)->symbol); - } - --static void * -+static NativeSymbol * - lookup_symbol(NativeSymbol *native_symbols, uint32 n_native_symbols, -- const char *symbol, const char **p_signature, void **p_attachment) -+ const char *symbol) - { - NativeSymbol *native_symbol, key = { 0 }; - -@@ -190,9 +190,7 @@ lookup_symbol(NativeSymbol *native_symbols, uint32 n_native_symbols, - - if ((native_symbol = bsearch(&key, native_symbols, n_native_symbols, - sizeof(NativeSymbol), native_symbol_cmp))) { -- *p_signature = native_symbol->signature; -- *p_attachment = native_symbol->attachment; -- return native_symbol->func_ptr; -+ return native_symbol; - } - - return NULL; -@@ -205,25 +203,36 @@ lookup_symbol(NativeSymbol *native_symbols, uint32 n_native_symbols, - void * - wasm_native_resolve_symbol(const char *module_name, const char *field_name, - const WASMFuncType *func_type, -- const char **p_signature, void **p_attachment, -+ const char **p_signature, void **p_attachment, uint32_t *gas, - bool *p_call_conv_raw) - { - NativeSymbolsNode *node, *node_next; - const char *signature = NULL; - void *func_ptr = NULL, *attachment = NULL; -+ NativeSymbol *native_symbol = NULL; - - node = g_native_symbols_list; - while (node) { - node_next = node->next; - if (!strcmp(node->module_name, module_name)) { -- if ((func_ptr = -+ if ((native_symbol = - lookup_symbol(node->native_symbols, node->n_native_symbols, -- field_name, &signature, &attachment)) -+ field_name)) - || (field_name[0] == '_' -- && (func_ptr = lookup_symbol( -+ && (native_symbol = lookup_symbol( - node->native_symbols, node->n_native_symbols, -- field_name + 1, &signature, &attachment)))) -- break; -+ field_name + 1)))) -+ { -+ func_ptr = native_symbol->func_ptr; -+ if(func_ptr) -+ { -+ if(gas) -+ *gas = native_symbol->gas; -+ signature = native_symbol->signature; -+ attachment = native_symbol->attachment; -+ break; -+ } -+ } - } - node = node_next; - } -diff --git a/core/iwasm/common/wasm_native.h b/core/iwasm/common/wasm_native.h -index 9a6afee1..0fe4739f 100644 ---- a/core/iwasm/common/wasm_native.h -+++ b/core/iwasm/common/wasm_native.h -@@ -52,7 +52,7 @@ wasm_native_lookup_libc_builtin_global(const char *module_name, - void * - wasm_native_resolve_symbol(const char *module_name, const char *field_name, - const WASMFuncType *func_type, -- const char **p_signature, void **p_attachment, -+ const char **p_signature, void **p_attachment, uint32_t *gas, - bool *p_call_conv_raw); - - bool -diff --git a/core/iwasm/common/wasm_runtime_common.c b/core/iwasm/common/wasm_runtime_common.c -index 943b46fc..d026777e 100644 ---- a/core/iwasm/common/wasm_runtime_common.c -+++ b/core/iwasm/common/wasm_runtime_common.c -@@ -2344,10 +2344,18 @@ wasm_runtime_access_exce_check_guard_page() - #if WASM_ENABLE_INSTRUCTION_METERING != 0 - void - wasm_runtime_set_instruction_count_limit(WASMExecEnv *exec_env, -- int instructions_to_execute) -+ int64 instructions_to_execute) - { -+ if(instructions_to_execute == -1) -+ instructions_to_execute = INT64_MAX; - exec_env->instructions_to_execute = instructions_to_execute; - } -+ -+int64 -+wasm_runtime_get_instruction_count_limit(WASMExecEnv *exec_env) -+{ -+ return exec_env->instructions_to_execute; -+} - #endif - - WASMFuncType * -@@ -7412,7 +7420,7 @@ wasm_runtime_is_import_func_linked(const char *module_name, - const char *func_name) - { - return wasm_native_resolve_symbol(module_name, func_name, NULL, NULL, NULL, -- NULL); -+ NULL, NULL); - } - - bool -@@ -7869,13 +7877,14 @@ wasm_runtime_get_module_name(wasm_module_t module) - bool - wasm_runtime_detect_native_stack_overflow(WASMExecEnv *exec_env) - { -+#if WASM_DISABLE_STACK_HW_BOUND_CHECK == 0 - uint8 *boundary = exec_env->native_stack_boundary; - RECORD_STACK_USAGE(exec_env, (uint8 *)&boundary); - if (boundary == NULL) { - /* the platform doesn't support os_thread_get_stack_boundary */ - return true; - } --#if defined(OS_ENABLE_HW_BOUND_CHECK) && WASM_DISABLE_STACK_HW_BOUND_CHECK == 0 -+#if defined(OS_ENABLE_HW_BOUND_CHECK) - uint32 page_size = os_getpagesize(); - uint32 guard_page_count = STACK_OVERFLOW_CHECK_GUARD_PAGE_COUNT; - boundary = boundary + page_size * guard_page_count; -@@ -7885,6 +7894,7 @@ wasm_runtime_detect_native_stack_overflow(WASMExecEnv *exec_env) - "native stack overflow"); - return false; - } -+#endif - return true; - } - -@@ -7907,7 +7917,7 @@ wasm_runtime_detect_native_stack_overflow_size(WASMExecEnv *exec_env, - boundary = boundary - WASM_STACK_GUARD_SIZE + requested_size; - if ((uint8 *)&boundary < boundary) { - wasm_runtime_set_exception(wasm_runtime_get_module_inst(exec_env), -- "native stack overflow"); -+ "native s stack overflow"); - return false; - } - return true; -diff --git a/core/iwasm/common/wasm_runtime_common.h b/core/iwasm/common/wasm_runtime_common.h -index 324620be..54155a0c 100644 ---- a/core/iwasm/common/wasm_runtime_common.h -+++ b/core/iwasm/common/wasm_runtime_common.h -@@ -833,7 +833,10 @@ wasm_runtime_set_native_stack_boundary(WASMExecEnv *exec_env, - /* See wasm_export.h for description */ - WASM_RUNTIME_API_EXTERN void - wasm_runtime_set_instruction_count_limit(WASMExecEnv *exec_env, -- int instructions_to_execute); -+ int64 instructions_to_execute); -+WASM_RUNTIME_API_EXTERN int64 -+wasm_runtime_get_instruction_count_limit(WASMExecEnv *exec_env); -+ - #endif - - #if WASM_CONFIGURABLE_BOUNDS_CHECKS != 0 -diff --git a/core/iwasm/include/lib_export.h b/core/iwasm/include/lib_export.h -index 0ca668f5..93bcf807 100644 ---- a/core/iwasm/include/lib_export.h -+++ b/core/iwasm/include/lib_export.h -@@ -24,6 +24,8 @@ typedef struct NativeSymbol { - /* attachment which can be retrieved in native API by - calling wasm_runtime_get_function_attachment(exec_env) */ - void *attachment; -+ // gas cost for import func -+ uint32_t gas; - } NativeSymbol; - - /* clang-format off */ -diff --git a/core/iwasm/include/wasm_c_api.h b/core/iwasm/include/wasm_c_api.h -index 241a0eec..1141744c 100644 ---- a/core/iwasm/include/wasm_c_api.h -+++ b/core/iwasm/include/wasm_c_api.h -@@ -19,8 +19,10 @@ - #if defined(_MSC_BUILD) - #if defined(COMPILING_WASM_RUNTIME_API) - #define WASM_API_EXTERN __declspec(dllexport) --#else -+#elif defined(_DLL) - #define WASM_API_EXTERN __declspec(dllimport) -+#else -+#define WASM_API_EXTERN - #endif - #else - #define WASM_API_EXTERN -@@ -592,6 +594,8 @@ WASM_API_EXTERN size_t wasm_func_result_arity(const wasm_func_t*); - WASM_API_EXTERN own wasm_trap_t* wasm_func_call( - const wasm_func_t*, const wasm_val_vec_t* args, wasm_val_vec_t* results); - -+WASM_API_EXTERN own uint32_t wasm_func_set_gas(wasm_func_t*, uint32_t); -+ - - // Global Instances - -@@ -701,6 +705,11 @@ WASM_API_EXTERN double wasm_instance_sum_wasm_exec_time(const wasm_instance_t*); - // func_name. If the function is not found, return 0. - WASM_API_EXTERN double wasm_instance_get_wasm_func_exec_time(const wasm_instance_t*, const char *); - -+struct WASMExecEnv; -+typedef struct WASMExecEnv *wasm_exec_env_t; -+ -+WASM_API_EXTERN wasm_exec_env_t wasm_instance_exec_env(const wasm_instance_t*); -+ - /////////////////////////////////////////////////////////////////////////////// - // Convenience - -diff --git a/core/iwasm/include/wasm_export.h b/core/iwasm/include/wasm_export.h -index 81efb8f6..f752a970 100644 ---- a/core/iwasm/include/wasm_export.h -+++ b/core/iwasm/include/wasm_export.h -@@ -20,8 +20,10 @@ - #if defined(_MSC_BUILD) - #if defined(COMPILING_WASM_RUNTIME_API) - #define WASM_RUNTIME_API_EXTERN __declspec(dllexport) --#else -+#elif defined(_DLL) - #define WASM_RUNTIME_API_EXTERN __declspec(dllimport) -+#else -+#define WASM_RUNTIME_API_EXTERN - #endif - #elif defined(__GNUC__) || defined(__clang__) - #define WASM_RUNTIME_API_EXTERN __attribute__((visibility("default"))) -@@ -1874,7 +1876,14 @@ wasm_runtime_set_native_stack_boundary(wasm_exec_env_t exec_env, - */ - WASM_RUNTIME_API_EXTERN void - wasm_runtime_set_instruction_count_limit(wasm_exec_env_t exec_env, -- int instruction_count); -+ int64_t instruction_count); -+ -+WASM_RUNTIME_API_EXTERN int64_t -+wasm_runtime_get_instruction_count_limit(wasm_exec_env_t exec_env); -+ -+WASM_RUNTIME_API_EXTERN void -+wasm_runtime_set_instruction_schedule(wasm_exec_env_t exec_env, -+ int64_t const *instructions_schedule); - - /** - * Dump runtime memory consumption, including: -diff --git a/core/iwasm/interpreter/wasm.h b/core/iwasm/interpreter/wasm.h -index 0dd73958..b7cad5f2 100644 ---- a/core/iwasm/interpreter/wasm.h -+++ b/core/iwasm/interpreter/wasm.h -@@ -617,6 +617,9 @@ typedef struct WASMFunctionImport { - WASMModule *import_module; - WASMFunction *import_func_linked; - #endif -+ // gas cost for import func -+ uint32 gas; -+ - } WASMFunctionImport; - - #if WASM_ENABLE_TAGS != 0 -diff --git a/core/iwasm/interpreter/wasm_interp_classic.c b/core/iwasm/interpreter/wasm_interp_classic.c -index edc473f2..55071613 100644 ---- a/core/iwasm/interpreter/wasm_interp_classic.c -+++ b/core/iwasm/interpreter/wasm_interp_classic.c -@@ -1547,13 +1547,14 @@ get_global_addr(uint8 *global_data, WASMGlobalInstance *global) - } - - #if WASM_ENABLE_INSTRUCTION_METERING != 0 --#define CHECK_INSTRUCTION_LIMIT() \ -- if (instructions_left == 0) { \ -- wasm_set_exception(module, "instruction limit exceeded"); \ -- goto got_exception; \ -- } \ -- else if (instructions_left > 0) \ -- instructions_left--; -+#define CHECK_INSTRUCTION_LIMIT() \ -+ do { \ -+ --instructions_left; \ -+ if (instructions_left < 0) { \ -+ wasm_set_exception(module, "instruction limit exceeded"); \ -+ goto got_exception; \ -+ } \ -+ } while (0) - #else - #define CHECK_INSTRUCTION_LIMIT() (void)0 - #endif -@@ -1603,10 +1604,9 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, - uint32 cache_index, type_index, param_cell_num, cell_num; - - #if WASM_ENABLE_INSTRUCTION_METERING != 0 -- int instructions_left = -1; -- if (exec_env) { -+ int64 instructions_left = INT64_MAX; -+ if (exec_env) - instructions_left = exec_env->instructions_to_execute; -- } - #endif - - #if WASM_ENABLE_EXCE_HANDLING != 0 -@@ -6849,6 +6849,11 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, - FREE_FRAME(exec_env, frame); - wasm_exec_env_set_cur_frame(exec_env, prev_frame); - -+#if WASM_ENABLE_INSTRUCTION_METERING != 0 -+ if(exec_env) -+ exec_env->instructions_to_execute = instructions_left; -+#endif -+ - if (!prev_frame->ip) { - /* Called from native. */ - return; -@@ -6889,6 +6894,12 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, - } - #endif - SYNC_ALL_TO_FRAME(); -+ -+#if WASM_ENABLE_INSTRUCTION_METERING != 0 -+ if(exec_env) -+ exec_env->instructions_to_execute = instructions_left; -+#endif -+ - return; - - #if WASM_ENABLE_LABELS_AS_VALUES == 0 -diff --git a/core/iwasm/interpreter/wasm_interp_fast.c b/core/iwasm/interpreter/wasm_interp_fast.c -index 36d4538f..4d03603e 100644 ---- a/core/iwasm/interpreter/wasm_interp_fast.c -+++ b/core/iwasm/interpreter/wasm_interp_fast.c -@@ -90,14 +90,14 @@ typedef float64 CellType_F64; - } while (0) - - #if WASM_ENABLE_INSTRUCTION_METERING != 0 --#define CHECK_INSTRUCTION_LIMIT() \ -- if (instructions_left == 0) { \ -- wasm_set_exception(module, "instruction limit exceeded"); \ -- goto got_exception; \ -- } \ -- else if (instructions_left > 0) \ -- instructions_left--; -- -+#define CHECK_INSTRUCTION_LIMIT() \ -+ do { \ -+ --instructions_left; \ -+ if (instructions_left < 0) { \ -+ wasm_set_exception(module, "instruction limit exceeded"); \ -+ goto got_exception; \ -+ } \ -+ } while (0) - #else - #define CHECK_INSTRUCTION_LIMIT() (void)0 - #endif -@@ -1438,7 +1438,6 @@ wasm_interp_dump_op_count() - do { \ - const void *p_label_addr = *(void **)frame_ip; \ - frame_ip += sizeof(void *); \ -- CHECK_INSTRUCTION_LIMIT(); \ - goto *p_label_addr; \ - } while (0) - #else -@@ -1450,7 +1449,6 @@ wasm_interp_dump_op_count() - /* int32 relative offset was emitted in 64-bit target */ \ - p_label_addr = label_base + (int32)LOAD_U32_WITH_2U16S(frame_ip); \ - frame_ip += sizeof(int32); \ -- CHECK_INSTRUCTION_LIMIT(); \ - goto *p_label_addr; \ - } while (0) - #else -@@ -1461,17 +1459,18 @@ wasm_interp_dump_op_count() - /* uint32 label address was emitted in 32-bit target */ \ - p_label_addr = (void *)(uintptr_t)LOAD_U32_WITH_2U16S(frame_ip); \ - frame_ip += sizeof(int32); \ -- CHECK_INSTRUCTION_LIMIT(); \ - goto *p_label_addr; \ - } while (0) - #endif - #endif /* end of WASM_CPU_SUPPORTS_UNALIGNED_ADDR_ACCESS */ --#define HANDLE_OP_END() FETCH_OPCODE_AND_DISPATCH() -+#define HANDLE_OP_END() CHECK_INSTRUCTION_LIMIT(); FETCH_OPCODE_AND_DISPATCH() - - #else /* else of WASM_ENABLE_LABELS_AS_VALUES */ - - #define HANDLE_OP(opcode) case opcode: --#define HANDLE_OP_END() continue -+#define HANDLE_OP_END() \ -+ CHECK_INSTRUCTION_LIMIT(); \ -+ continue - - #endif /* end of WASM_ENABLE_LABELS_AS_VALUES */ - -@@ -1540,10 +1539,9 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, - uint8 opcode = 0, local_type, *global_addr; - - #if WASM_ENABLE_INSTRUCTION_METERING != 0 -- int instructions_left = -1; -- if (exec_env) { -+ int64 instructions_left = INT64_MAX; -+ if (exec_env) - instructions_left = exec_env->instructions_to_execute; -- } - #endif - #if !defined(OS_ENABLE_HW_BOUND_CHECK) \ - || WASM_CPU_SUPPORTS_UNALIGNED_ADDR_ACCESS == 0 -@@ -4012,7 +4010,15 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, - } - - /* constant instructions */ -+#ifdef ENABLE_FLOAT_POINT - HANDLE_OP(WASM_OP_F64_CONST) -+#else -+ HANDLE_OP(WASM_OP_F64_CONST) -+ { -+ wasm_set_exception(module, "opcode disabled"); -+ goto got_exception; -+ } -+#endif - HANDLE_OP(WASM_OP_I64_CONST) - { - uint8 *orig_ip = frame_ip; -@@ -4025,7 +4031,15 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, - HANDLE_OP_END(); - } - -+#ifdef ENABLE_FLOAT_POINT -+ HANDLE_OP(WASM_OP_F32_CONST) -+#else - HANDLE_OP(WASM_OP_F32_CONST) -+ { -+ wasm_set_exception(module, "opcode disabled"); -+ goto got_exception; -+ } -+#endif - HANDLE_OP(WASM_OP_I32_CONST) - { - uint8 *orig_ip = frame_ip; -@@ -4172,6 +4186,8 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, - HANDLE_OP_END(); - } - -+#ifdef ENABLE_FLOAT_POINT -+ - /* comparison instructions of f32 */ - HANDLE_OP(WASM_OP_F32_EQ) - { -@@ -4245,6 +4261,24 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, - DEF_OP_CMP(float64, F64, >=); - HANDLE_OP_END(); - } -+#else -+ HANDLE_OP(WASM_OP_F32_EQ) -+ HANDLE_OP(WASM_OP_F32_NE) -+ HANDLE_OP(WASM_OP_F32_LT) -+ HANDLE_OP(WASM_OP_F32_GT) -+ HANDLE_OP(WASM_OP_F32_LE) -+ HANDLE_OP(WASM_OP_F32_GE) -+ HANDLE_OP(WASM_OP_F64_EQ) -+ HANDLE_OP(WASM_OP_F64_NE) -+ HANDLE_OP(WASM_OP_F64_LT) -+ HANDLE_OP(WASM_OP_F64_GT) -+ HANDLE_OP(WASM_OP_F64_LE) -+ HANDLE_OP(WASM_OP_F64_GE) -+ { -+ wasm_set_exception(module, "opcode disabled"); -+ goto got_exception; -+ } -+#endif - - /* numeric instructions of i32 */ - HANDLE_OP(WASM_OP_I32_CLZ) -@@ -4573,6 +4607,8 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, - HANDLE_OP_END(); - } - -+#ifdef ENABLE_FLOAT_POINT -+ - /* numeric instructions of f32 */ - HANDLE_OP(WASM_OP_F32_ABS) - { -@@ -4784,6 +4820,43 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, - HANDLE_OP_END(); - } - -+#else -+ -+ HANDLE_OP(WASM_OP_F32_ABS) -+ HANDLE_OP(WASM_OP_F32_NEG) -+ HANDLE_OP(WASM_OP_F32_CEIL) -+ HANDLE_OP(WASM_OP_F32_FLOOR) -+ HANDLE_OP(WASM_OP_F32_TRUNC) -+ HANDLE_OP(WASM_OP_F32_NEAREST) -+ HANDLE_OP(WASM_OP_F32_SQRT) -+ HANDLE_OP(WASM_OP_F32_ADD) -+ HANDLE_OP(WASM_OP_F32_SUB) -+ HANDLE_OP(WASM_OP_F32_MUL) -+ HANDLE_OP(WASM_OP_F32_DIV) -+ HANDLE_OP(WASM_OP_F32_MIN) -+ HANDLE_OP(WASM_OP_F32_MAX) -+ HANDLE_OP(WASM_OP_F32_COPYSIGN) -+ HANDLE_OP(WASM_OP_F64_ABS) -+ HANDLE_OP(WASM_OP_F64_NEG) -+ HANDLE_OP(WASM_OP_F64_CEIL) -+ HANDLE_OP(WASM_OP_F64_FLOOR) -+ HANDLE_OP(WASM_OP_F64_TRUNC) -+ HANDLE_OP(WASM_OP_F64_NEAREST) -+ HANDLE_OP(WASM_OP_F64_SQRT) -+ HANDLE_OP(WASM_OP_F64_ADD) -+ HANDLE_OP(WASM_OP_F64_SUB) -+ HANDLE_OP(WASM_OP_F64_MUL) -+ HANDLE_OP(WASM_OP_F64_DIV) -+ HANDLE_OP(WASM_OP_F64_MIN) -+ HANDLE_OP(WASM_OP_F64_MAX) -+ HANDLE_OP(WASM_OP_F64_COPYSIGN) -+ { -+ wasm_set_exception(module, "opcode disabled"); -+ goto got_exception; -+ } -+ -+#endif //ENABLE_FLOAT_POINT -+ - /* conversions of i32 */ - HANDLE_OP(WASM_OP_I32_WRAP_I64) - { -@@ -4792,6 +4865,8 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, - HANDLE_OP_END(); - } - -+ -+#ifdef ENABLE_FLOAT_POINT - HANDLE_OP(WASM_OP_I32_TRUNC_S_F32) - { - /* We don't use INT32_MIN/INT32_MAX/UINT32_MIN/UINT32_MAX, -@@ -4821,6 +4896,19 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, - HANDLE_OP_END(); - } - -+#else -+ -+ HANDLE_OP(WASM_OP_I32_TRUNC_S_F32) -+ HANDLE_OP(WASM_OP_I32_TRUNC_U_F32) -+ HANDLE_OP(WASM_OP_I32_TRUNC_S_F64) -+ HANDLE_OP(WASM_OP_I32_TRUNC_U_F64) -+ { -+ wasm_set_exception(module, "opcode disabled"); -+ goto got_exception; -+ } -+ -+#endif //ENABLE_FLOAT_POINT -+ - /* conversions of i64 */ - HANDLE_OP(WASM_OP_I64_EXTEND_S_I32) - { -@@ -4834,6 +4922,8 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, - HANDLE_OP_END(); - } - -+#ifdef ENABLE_FLOAT_POINT -+ - HANDLE_OP(WASM_OP_I64_TRUNC_S_F32) - { - DEF_OP_TRUNC_F32(-9223373136366403584.0f, -@@ -4937,6 +5027,32 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, - HANDLE_OP_END(); - } - -+#else -+ HANDLE_OP(WASM_OP_I64_TRUNC_S_F32) -+ HANDLE_OP(WASM_OP_I64_TRUNC_U_F32) -+ HANDLE_OP(WASM_OP_I64_TRUNC_S_F64) -+ HANDLE_OP(WASM_OP_I64_TRUNC_U_F64) -+ HANDLE_OP(WASM_OP_F32_CONVERT_S_I32) -+ HANDLE_OP(WASM_OP_F32_CONVERT_U_I32) -+ HANDLE_OP(WASM_OP_F32_CONVERT_S_I64) -+ HANDLE_OP(WASM_OP_F32_CONVERT_U_I64) -+ HANDLE_OP(WASM_OP_F32_DEMOTE_F64) -+ HANDLE_OP(WASM_OP_F64_CONVERT_S_I32) -+ HANDLE_OP(WASM_OP_F64_CONVERT_U_I32) -+ HANDLE_OP(WASM_OP_F64_CONVERT_S_I64) -+ HANDLE_OP(WASM_OP_F64_CONVERT_U_I64) -+ HANDLE_OP(WASM_OP_F64_PROMOTE_F32) -+ HANDLE_OP(WASM_OP_I32_REINTERPRET_F32) -+ HANDLE_OP(WASM_OP_F32_REINTERPRET_I32) -+ HANDLE_OP(WASM_OP_I64_REINTERPRET_F64) -+ HANDLE_OP(WASM_OP_F64_REINTERPRET_I64) -+ { -+ wasm_set_exception(module, "opcode disabled"); -+ goto got_exception; -+ } -+ -+#endif //ENABLE_FLOAT_POINT -+ - HANDLE_OP(EXT_OP_COPY_STACK_TOP) - { - addr1 = GET_OFFSET(); -@@ -5108,6 +5224,8 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, - { - GET_OPCODE(); - switch (opcode) { -+ -+#ifdef ENABLE_FLOAT_POINT - case WASM_OP_I32_TRUNC_SAT_S_F32: - DEF_OP_TRUNC_SAT_F32(-2147483904.0f, 2147483648.0f, - true, true); -@@ -5140,6 +5258,9 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, - DEF_OP_TRUNC_SAT_F64(-1.0, 18446744073709551616.0, - false, false); - break; -+ -+#endif -+ - #if WASM_ENABLE_BULK_MEMORY != 0 - case WASM_OP_MEMORY_INIT: - { -@@ -7672,6 +7793,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, - { - wasm_interp_call_func_native(module, exec_env, cur_func, - prev_frame); -+ instructions_left -= cur_func->gas; - } - - #if WASM_ENABLE_TAIL_CALL != 0 || WASM_ENABLE_GC != 0 -@@ -7784,6 +7906,11 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, - FREE_FRAME(exec_env, frame); - wasm_exec_env_set_cur_frame(exec_env, (WASMRuntimeFrame *)prev_frame); - -+#if WASM_ENABLE_INSTRUCTION_METERING != 0 -+ if (exec_env) -+ exec_env->instructions_to_execute = instructions_left; -+#endif -+ - if (!prev_frame->ip) - /* Called from native. */ - return; -@@ -7812,6 +7939,10 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, - - got_exception: - SYNC_ALL_TO_FRAME(); -+#if WASM_ENABLE_INSTRUCTION_METERING != 0 -+ if (exec_env) -+ exec_env->instructions_to_execute = instructions_left; -+#endif - return; - - #if WASM_ENABLE_LABELS_AS_VALUES == 0 -diff --git a/core/iwasm/interpreter/wasm_mini_loader.c b/core/iwasm/interpreter/wasm_mini_loader.c -index 771538a1..d6e6a6b8 100644 ---- a/core/iwasm/interpreter/wasm_mini_loader.c -+++ b/core/iwasm/interpreter/wasm_mini_loader.c -@@ -805,6 +805,7 @@ load_function_import(const uint8 **p_buf, const uint8 *buf_end, - const char *linked_signature = NULL; - void *linked_attachment = NULL; - bool linked_call_conv_raw = false; -+ uint32_t gas = 0; - - read_leb_uint32(p, p_end, declare_type_index); - *p_buf = p; -@@ -816,7 +817,7 @@ load_function_import(const uint8 **p_buf, const uint8 *buf_end, - /* check built-in modules */ - linked_func = wasm_native_resolve_symbol( - sub_module_name, function_name, declare_func_type, &linked_signature, -- &linked_attachment, &linked_call_conv_raw); -+ &linked_attachment, &gas, &linked_call_conv_raw); - - function->module_name = (char *)sub_module_name; - function->field_name = (char *)function_name; -@@ -825,6 +826,7 @@ load_function_import(const uint8 **p_buf, const uint8 *buf_end, - function->signature = linked_signature; - function->attachment = linked_attachment; - function->call_conv_raw = linked_call_conv_raw; -+ function->gas = gas; - return true; - } - -diff --git a/core/iwasm/interpreter/wasm_runtime.c b/core/iwasm/interpreter/wasm_runtime.c -index b4aa483d..2d74e469 100644 ---- a/core/iwasm/interpreter/wasm_runtime.c -+++ b/core/iwasm/interpreter/wasm_runtime.c -@@ -168,7 +168,7 @@ wasm_resolve_import_func(const WASMModule *module, WASMFunctionImport *function) - #endif - function->func_ptr_linked = wasm_native_resolve_symbol( - function->module_name, function->field_name, function->func_type, -- &function->signature, &function->attachment, &function->call_conv_raw); -+ &function->signature, &function->attachment, &function->gas, &function->call_conv_raw); - - if (function->func_ptr_linked) { - return true; -@@ -820,6 +820,7 @@ functions_instantiate(const WASMModule *module, WASMModuleInstance *module_inst, - function->param_count = - (uint16)function->u.func_import->func_type->param_count; - function->param_types = function->u.func_import->func_type->types; -+ function->gas = import->u.function.gas; - function->local_cell_num = 0; - function->local_count = 0; - function->local_types = NULL; -diff --git a/core/iwasm/interpreter/wasm_runtime.h b/core/iwasm/interpreter/wasm_runtime.h -index 16c670f0..5ddac567 100644 ---- a/core/iwasm/interpreter/wasm_runtime.h -+++ b/core/iwasm/interpreter/wasm_runtime.h -@@ -237,6 +237,10 @@ struct WASMFunctionInstance { - WASMFunctionImport *func_import; - WASMFunction *func; - } u; -+ -+ // gas cost for import func -+ uint32 gas; -+ - #if WASM_ENABLE_MULTI_MODULE != 0 - WASMModuleInstance *import_module_inst; - WASMFunctionInstance *import_func_inst; -diff --git a/core/iwasm/libraries/libc-builtin/libc_builtin_wrapper.c b/core/iwasm/libraries/libc-builtin/libc_builtin_wrapper.c -index a68c0749..cafb6915 100644 ---- a/core/iwasm/libraries/libc-builtin/libc_builtin_wrapper.c -+++ b/core/iwasm/libraries/libc-builtin/libc_builtin_wrapper.c -@@ -1038,16 +1038,16 @@ print_f64_wrapper(wasm_exec_env_t exec_env, double f64) - - /* clang-format off */ - #define REG_NATIVE_FUNC(func_name, signature) \ -- { #func_name, func_name##_wrapper, signature, NULL } -+ { #func_name, func_name##_wrapper, signature, NULL, 0 } - /* clang-format on */ - - static NativeSymbol native_symbols_libc_builtin[] = { - REG_NATIVE_FUNC(printf, "($*)i"), - REG_NATIVE_FUNC(sprintf, "($$*)i"), - REG_NATIVE_FUNC(snprintf, "(*~$*)i"), -- { "vprintf", printf_wrapper, "($*)i", NULL }, -- { "vsprintf", sprintf_wrapper, "($$*)i", NULL }, -- { "vsnprintf", snprintf_wrapper, "(*~$*)i", NULL }, -+ { "vprintf", printf_wrapper, "($*)i", NULL, 0 }, -+ { "vsprintf", sprintf_wrapper, "($$*)i", NULL, 0 }, -+ { "vsnprintf", snprintf_wrapper, "(*~$*)i", NULL, 0 }, - REG_NATIVE_FUNC(puts, "($)i"), - REG_NATIVE_FUNC(putchar, "(i)i"), - REG_NATIVE_FUNC(memcmp, "(**~)i"), -diff --git a/core/iwasm/libraries/libc-wasi/libc_wasi_wrapper.c b/core/iwasm/libraries/libc-wasi/libc_wasi_wrapper.c -index f7dfea0b..c01e80a9 100644 ---- a/core/iwasm/libraries/libc-wasi/libc_wasi_wrapper.c -+++ b/core/iwasm/libraries/libc-wasi/libc_wasi_wrapper.c -@@ -2269,7 +2269,7 @@ wasi_sched_yield(wasm_exec_env_t exec_env) - - /* clang-format off */ - #define REG_NATIVE_FUNC(func_name, signature) \ -- { #func_name, wasi_##func_name, signature, NULL } -+ { #func_name, wasi_##func_name, signature, NULL, 0 } - /* clang-format on */ - - static NativeSymbol native_symbols_libc_wasi[] = { -diff --git a/core/shared/platform/include/platform_wasi_types.h b/core/shared/platform/include/platform_wasi_types.h -index ac1a95ea..e23b500e 100644 ---- a/core/shared/platform/include/platform_wasi_types.h -+++ b/core/shared/platform/include/platform_wasi_types.h -@@ -36,7 +36,11 @@ extern "C" { - #if WASM_ENABLE_UVWASI != 0 || WASM_ENABLE_LIBC_WASI == 0 - #define assert_wasi_layout(expr, message) /* nothing */ - #else --#define assert_wasi_layout(expr, message) _Static_assert(expr, message) -+ #ifndef _MSC_VER -+ #define assert_wasi_layout(expr, message) _Static_assert(expr, message) -+ #else -+ #define assert_wasi_layout(expr, message) static_assert(expr, message) -+ #endif - #endif - - assert_wasi_layout(_Alignof(int8_t) == 1, "non-wasi data layout"); From 57fc1df7d7cf35f3711a6e37726535899813bf24 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 29 Sep 2025 15:43:22 -0400 Subject: [PATCH 018/137] switch from wasm32-unknown-unknown to wasm32v1-none (#5814) --- src/test/app/Wasm_test.cpp | 2 +- src/test/app/wasm_fixtures/copyFixtures.py | 6 +- src/test/app/wasm_fixtures/fixtures.cpp | 1084 ++++++++++---------- 3 files changed, 529 insertions(+), 563 deletions(-) diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 4348e14130..2b1259365a 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -519,7 +519,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 96'942, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 97'411, std::to_string(re->cost)); } env.close(); } diff --git a/src/test/app/wasm_fixtures/copyFixtures.py b/src/test/app/wasm_fixtures/copyFixtures.py index b0c8ad1af2..cd53184b5e 100644 --- a/src/test/app/wasm_fixtures/copyFixtures.py +++ b/src/test/app/wasm_fixtures/copyFixtures.py @@ -46,10 +46,10 @@ def process_rust(project_name): project_path = os.path.abspath( os.path.join(os.path.dirname(__file__), project_name) ) - wasm_location = f"target/wasm32-unknown-unknown/release/{project_name}.wasm" + wasm_location = f"target/wasm32v1-none/release/{project_name}.wasm" build_cmd = ( f"(cd {project_path} " - f"&& cargo build --target wasm32-unknown-unknown --release " + f"&& cargo build --target wasm32v1-none --release " f"&& wasm-opt {wasm_location} {OPT} -o {wasm_location}" ")" ) @@ -68,7 +68,7 @@ def process_rust(project_name): src_path = os.path.abspath( os.path.join( os.path.dirname(__file__), - f"{project_name}/target/wasm32-unknown-unknown/release/{project_name}.wasm", + f"{project_name}/target/wasm32v1-none/release/{project_name}.wasm", ) ) with open(src_path, "rb") as f: diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 8fb6340bed..6ad3e33639 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -8659,196 +8659,195 @@ extern std::string const allHostFunctionsWasmHex = "08686f73745f6c69620b7570646174655f64617461000103060506060a0b04050301001106" "19037f01418080c0000b7f0041af99c0000b7f0041b099c0000b072e04066d656d6f727902" "000666696e697368001e0a5f5f646174615f656e6403010b5f5f686561705f626173650302" - "0a801c051900200241094f0440000b20002002360204200020013602000b1900200241214f" + "0aff1b051900200241094f0440000b20002002360204200020013602000b1900200241214f" "0440000b20002002360204200020013602000b970101057f230041206b2201240020014118" "6a22044100360200200141106a220542003703002001420037030802404181802020014108" "6a4114100022034114470440024020034100480440200020033602040c010b2000417f3602" "040b410121020c010b20002001290308370001200041116a2004280200360000200041096a" - "20052903003700000b200020023a0000200141206a24000b450020012d0000450440200020" - "01290001370000200041106a200141116a280000360000200041086a200141096a29000037" - "00000f0b418080c000410b20013402041001000bea1901097f230041b0036b22002400418b" - "80c000411b41004100410010021a41a680c000411941004100410010021a41e780c000412b" - "41004100410010021a027f02400240024002400240024002401003220141004a0440419281" - "c00041172001ad10011a1004220141004c0d0141a981c00041132001ad10011a200041c801" - "6a22034200370300200041c0016a22054200370300200041b8016a22044200370300200042" - "003703b001200041b0016a22064120100522014120470d0241bc81c0004113200641204101" - "10021a41cf81c000412041004100410010021a41dc82c000412e41004100410010021a2000" - "41a0016a410036020020004198016a42003703002000420037039001418180202000419001" - "6a22024114100022014114470d03418a83c00041142002411410061a200042003703704188" - "8018200041f0006a22024108100022014108470d04419e83c0004117420810011a41b583c0" - "00412820024108410110021a2000410036025041848008200041d0006a2202410410002201" - "4104470d0541dd83c000411520024104410110021a200041013b003c200342003703002005" - "420037030020044200370300200042003703b00102402000413c6a41022006412010072201" - "41004e044041f283c00041142001ad10011a200041306a20062001101b418684c000410d20" - "002802302000280234410110021a0c010b419384c00041292001ac10011a0b41bc84c00041" - "154183803c1008ac10011a41d184c00041134189803c1008ac10011a02402000413c6a4102" - "1009220141004e044041e484c00041142001ad10011a0c010b41f884c000412d2001ac1001" - "1a0b41a585c000412341004100410010021a41de86c000413341004100410010021a200042" - "0037037041828018200041f0006a22014108100a220241004c0d0620024108460440419187" - "c000412b420810011a41bc87c000412f20014108410110021a0c080b41eb87c000412f2002" - "ad10011a200041286a200041f0006a2002101a419a88c00041172000280228200028022c41" - "0110021a0c070b41bf82c000411d2001ac10011a419b7f0c070b419a82c00041252001ac10" - "011a419a7f0c060b41ef81c000412b2001ac10011a41997f0c050b41b486c000412a2001ac" - "10011a41b77e0c040b41f385c00041c1002001ac10011a41b67e0c030b41c885c000412b20" - "01ac10011a41b57e0c020b41b188c00041c5002002ac10011a0b200041a0016a4100360200" - "20004198016a4200370300200042003703900102404181802020004190016a22024114100a" - "220141004a044041f688c000411e2002411410061a0c010b419489c00041332001ac10011a" - "0b200041013b0050200041c8016a4200370300200041c0016a4200370300200041b8016a42" - "00370300200042003703b0010240200041d0006a4102200041b0016a22014120100b220241" - "004e044041c789c000411c2002ad10011a200041206a20012002101b41e389c00041152000" - "2802202000280224410110021a0c010b41f889c00041392002ac10011a0b41b18ac0004124" - "4183803c100cac10011a0240200041d0006a4102100d220141004e044041d58ac000411c20" - "01ad10011a0c010b41f18ac000413d2001ac10011a0b41ae8bc00041284100410041001002" - "1a41d68bc000412f41004100410010021a200041b0016a2202101c200041f0006a22012002" - "101d200041a8016a4200370300200041a0016a420037030020004198016a42003703002000" - "420037039001024002400240024002402001411420004190016a22024120100e2201412046" - "0440200241204100100f220441004a044041858cc00041232004ad10011a20004200370350" - "200441828018200041d0006a220141081010220241004c0d022002410846044041a88cc000" - "412a420810011a41d28cc000412e20014108410110021a0c060b41808dc000412e2002ad10" - "011a200041186a200041d0006a2002101a41ae8dc00041162000280218200028021c410110" - "021a0c050b41e68fc000413c2004ac10011a200041c8016a4200370300200041c0016a4200" - "370300200041b8016a4200370300200042003703b001410141828018200041b0016a412010" - "1022014100480d020c030b41ba92c000412e2001ac10011a41ef7c0c050b41c48dc000412b" - "2002ac10011a0c020b41a290c00041c1002001ac10011a0b200041013b00504101200041d0" - "006a4102200041b0016a412010112201410048044041e390c00041352001ac10011a0b4101" - "4183803c101222014100480440419891c00041322001ac10011a0b4101200041d0006a4102" - "10132201410048044041ca91c00041392001ac10011a0b418392c000413741004100410010" - "021a0c010b200041013b003c200041c8016a4200370300200041c0016a4200370300200041" - "b8016a4200370300200042003703b001024020042000413c6a4102200041b0016a22014120" - "1011220241004e044041ef8dc000411b2002ad10011a200041106a20012002101b418a8ec0" - "00411420002802102000280214410110021a0c010b419e8ec00041312002ac10011a0b41cf" - "8ec000412320044183803c1012ac10011a024020042000413c6a41021013220141004e0440" - "41f28ec000411b2001ad10011a0c010b418d8fc00041352001ac10011a0b41c28fc0004124" - "41004100410010021a0b41e892c000412f41004100410010021a200041b0016a2201101c20" - "00413c6a22042001101d200041e8006a4200370300200041e0006a4200370300200041d800" - "6a42003703002000420037035002400240024002400240024020044114200041d0006a2202" - "4120100e22014120460440419793c000410f20024120410110021a20004188016a42003703" - "0020004180016a4200370300200041f8006a42003703002000420037037002402004411420" - "04411441a693c0004109200041f0006a220141201014220241004a0440200041086a200120" - "02101b41ae93c00041122000280208200028020c410110021a0c010b41c093c000413c2002" - "ac10011a0b200041a8016a22084200370300200041a0016a2203420037030020004198016a" - "2205420037030020004200370390012000413c6a2202411441e80720004190016a22074120" - "101522014120470d0141fc93c000410e20074120410110021a200041c8016a420037030020" - "0041c0016a4200370300200041b8016a4200370300200042003703b00120024114412a2000" - "41b0016a22044120101622014120470d02418a94c000410e20044120410110021a419894c0" - "00412441004100410010021a419195c000412541004100410010021a20004188016a420037" - "030020004180016a4200370300200041f8006a42003703002000420037037041b695c00041" - "17200041f0006a22024120101722014120470d0341cd95c000410b41b695c0004117410110" - "021a41d895c000411120024120410110021a2004101c200041d0006a22062004101d200842" - "00370300200342003703002005420037030020004200370390010240200422032003410020" - "036b41037122026a22054f0d0020020440200221010340200341003a0000200341016a2103" - "200141016b22010d000b0b200241016b4107490d000340200341003a0000200341076a4100" - "3a0000200341066a41003a0000200341056a41003a0000200341046a41003a000020034103" - "6a41003a0000200341026a41003a0000200341016a41003a0000200341086a22032005470d" - "000b0b200541800220026b2201417c716a220320054b044003402005410036020020054104" - "6a22052003490d000b0b024020032001410371220120036a22024f0d002001220504400340" - "200341003a0000200341016a2103200541016b22050d000b0b200141016b4107490d000340" - "200341003a0000200341076a41003a0000200341066a41003a0000200341056a41003a0000" - "200341046a41003a0000200341036a41003a0000200341026a41003a0000200341016a4100" - "3a0000200341086a22032002470d000b0b0240200641142007412020044180021018220141" - "004a044041e995c00041102001ad10011a20014181024f0d0641f995c00041092004200141" - "0110021a0c010b418296c000412e2001ac10011a0b41b096c000411241c296c00041074101" - "100222014100480d0541c996c000411d2001ad10011a41e696c0004111422a10014100480d" - "0641f796c000411c420010011a419397c000411a41004100410010021a41ff97c000412941" - "004100410010021a41a898c00041281019220145044041d098c000412741a898c000412841" - "0110021a41f798c000411e41004100410010021a41bf80c000412841004100410010021a41" - "010c080b419599c000411a2001ac10011a41c37a0c070b41f494c000411d2001ac10011a41" - "8b7c0c060b41d894c000411c2001ac10011a41897c0c050b41bc94c000411c2001ac10011a" - "41887c0c040b41dd97c00041222001ac10011a41a77b0c030b000b41c797c00041162001ac" - "10011a41a57b0c010b41ad97c000411a42a47b10011a41a47b0b200041b0036a24000b0bb9" - "190100418080c0000baf196572726f725f636f64653d3d3d3d20484f53542046554e435449" - "4f4e532054455354203d3d3d54657374696e6720323620686f73742066756e6374696f6e73" - "535543434553533a20416c6c20686f73742066756e6374696f6e2074657374732070617373" - "6564212d2d2d2043617465676f727920313a204c6564676572204865616465722046756e63" - "74696f6e73202d2d2d4c65646765722073657175656e6365206e756d6265723a506172656e" - "74206c65646765722074696d653a506172656e74206c656467657220686173683a53554343" - "4553533a204c6564676572206865616465722066756e6374696f6e734552524f523a206765" - "745f706172656e745f6c65646765725f686173682077726f6e67206c656e6774683a455252" - "4f523a206765745f706172656e745f6c65646765725f74696d65206661696c65643a455252" - "4f523a206765745f6c65646765725f73716e206661696c65643a2d2d2d2043617465676f72" - "7920323a205472616e73616374696f6e20446174612046756e6374696f6e73202d2d2d5472" - "616e73616374696f6e204163636f756e743a5472616e73616374696f6e20466565206c656e" - "6774683a5472616e73616374696f6e20466565202873657269616c697a6564205852502061" - "6d6f756e74293a5472616e73616374696f6e2053657175656e63653a4e6573746564206669" - "656c64206c656e6774683a4e6573746564206669656c643a494e464f3a206765745f74785f" - "6e65737465645f6669656c64206e6f74206170706c696361626c653a5369676e6572732061" - "72726179206c656e6774683a4d656d6f73206172726179206c656e6774683a4e6573746564" - "206172726179206c656e6774683a494e464f3a206765745f74785f6e65737465645f617272" - "61795f6c656e206e6f74206170706c696361626c653a535543434553533a205472616e7361" - "6374696f6e20646174612066756e6374696f6e734552524f523a206765745f74785f666965" - "6c642853657175656e6365292077726f6e67206c656e6774683a4552524f523a206765745f" - "74785f6669656c6428466565292077726f6e67206c656e6774682028657870656374656420" - "3820627974657320666f7220585250293a4552524f523a206765745f74785f6669656c6428" - "4163636f756e74292077726f6e67206c656e6774683a2d2d2d2043617465676f727920333a" - "2043757272656e74204c6564676572204f626a6563742046756e6374696f6e73202d2d2d43" - "757272656e74206f626a6563742062616c616e6365206c656e677468202858525020616d6f" - "756e74293a43757272656e74206f626a6563742062616c616e6365202873657269616c697a" - "65642058525020616d6f756e74293a43757272656e74206f626a6563742062616c616e6365" - "206c656e67746820286e6f6e2d58525020616d6f756e74293a43757272656e74206f626a65" - "63742062616c616e63653a494e464f3a206765745f63757272656e745f6c65646765725f6f" - "626a5f6669656c642842616c616e636529206661696c656420286d61792062652065787065" - "63746564293a43757272656e74206c6564676572206f626a656374206163636f756e743a49" - "4e464f3a206765745f63757272656e745f6c65646765725f6f626a5f6669656c6428416363" - "6f756e7429206661696c65643a43757272656e74206e6573746564206669656c64206c656e" - "6774683a43757272656e74206e6573746564206669656c643a494e464f3a206765745f6375" - "7272656e745f6c65646765725f6f626a5f6e65737465645f6669656c64206e6f7420617070" - "6c696361626c653a43757272656e74206f626a656374205369676e65727320617272617920" - "6c656e6774683a43757272656e74206e6573746564206172726179206c656e6774683a494e" - "464f3a206765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f617272" - "61795f6c656e206e6f74206170706c696361626c653a535543434553533a2043757272656e" - "74206c6564676572206f626a6563742066756e6374696f6e732d2d2d2043617465676f7279" - "20343a20416e79204c6564676572204f626a6563742046756e6374696f6e73202d2d2d5375" - "636365737366756c6c7920636163686564206f626a65637420696e20736c6f743a43616368" - "6564206f626a6563742062616c616e6365206c656e677468202858525020616d6f756e7429" - "3a436163686564206f626a6563742062616c616e6365202873657269616c697a6564205852" - "5020616d6f756e74293a436163686564206f626a6563742062616c616e6365206c656e6774" - "6820286e6f6e2d58525020616d6f756e74293a436163686564206f626a6563742062616c61" - "6e63653a494e464f3a206765745f6c65646765725f6f626a5f6669656c642842616c616e63" - "6529206661696c65643a436163686564206e6573746564206669656c64206c656e6774683a" - "436163686564206e6573746564206669656c643a494e464f3a206765745f6c65646765725f" - "6f626a5f6e65737465645f6669656c64206e6f74206170706c696361626c653a4361636865" - "64206f626a656374205369676e657273206172726179206c656e6774683a43616368656420" - "6e6573746564206172726179206c656e6774683a494e464f3a206765745f6c65646765725f" - "6f626a5f6e65737465645f61727261795f6c656e206e6f74206170706c696361626c653a53" - "5543434553533a20416e79206c6564676572206f626a6563742066756e6374696f6e73494e" - "464f3a2063616368655f6c65646765725f6f626a206661696c656420286578706563746564" - "20776974682074657374206669787475726573293a494e464f3a206765745f6c6564676572" - "5f6f626a5f6669656c64206661696c656420617320657870656374656420286e6f20636163" - "686564206f626a656374293a494e464f3a206765745f6c65646765725f6f626a5f6e657374" - "65645f6669656c64206661696c65642061732065787065637465643a494e464f3a20676574" - "5f6c65646765725f6f626a5f61727261795f6c656e206661696c6564206173206578706563" - "7465643a494e464f3a206765745f6c65646765725f6f626a5f6e65737465645f6172726179" - "5f6c656e206661696c65642061732065787065637465643a535543434553533a20416e7920" - "6c6564676572206f626a6563742066756e6374696f6e732028696e74657266616365207465" - "73746564294552524f523a206163636f756e745f6b65796c6574206661696c656420666f72" - "2063616368696e6720746573743a2d2d2d2043617465676f727920353a204b65796c657420" - "47656e65726174696f6e2046756e6374696f6e73202d2d2d4163636f756e74206b65796c65" - "743a546573745479706543726564656e7469616c206b65796c65743a494e464f3a20637265" - "64656e7469616c5f6b65796c6574206661696c656420286578706563746564202d20696e74" - "657266616365206973737565293a457363726f77206b65796c65743a4f7261636c65206b65" - "796c65743a535543434553533a204b65796c65742067656e65726174696f6e2066756e6374" - "696f6e734552524f523a206f7261636c655f6b65796c6574206661696c65643a4552524f52" - "3a20657363726f775f6b65796c6574206661696c65643a4552524f523a206163636f756e74" - "5f6b65796c6574206661696c65643a2d2d2d2043617465676f727920363a205574696c6974" - "792046756e6374696f6e73202d2d2d48656c6c6f2c205852504c205741534d20776f726c64" - "21496e70757420646174613a5348413531322068616c6620686173683a4e46542064617461" - "206c656e6774683a4e465420646174613a494e464f3a206765745f6e6674206661696c6564" - "20286578706563746564202d206e6f2073756368204e4654293a5465737420747261636520" - "6d6573736167657061796c6f616454726163652066756e6374696f6e206279746573207772" - "697474656e3a54657374206e756d62657220747261636554726163655f6e756d2066756e63" - "74696f6e20737563636565646564535543434553533a205574696c6974792066756e637469" - "6f6e734552524f523a2074726163655f6e756d2829206661696c65643a4552524f523a2074" - "726163652829206661696c65643a4552524f523a20636f6d707574655f7368613531325f68" - "616c66206661696c65643a2d2d2d2043617465676f727920373a2044617461205570646174" - "652046756e6374696f6e73202d2d2d55706461746564206c656467657220656e7472792064" - "6174612066726f6d205741534d20746573745375636365737366756c6c7920757064617465" - "64206c656467657220656e74727920776974683a535543434553533a204461746120757064" - "6174652066756e6374696f6e734552524f523a207570646174655f64617461206661696c65" - "643a004d0970726f64756365727302086c616e6775616765010452757374000c70726f6365" - "737365642d6279010572757374631d312e38352e3120283465623136313235302032303235" - "2d30332d31352900490f7461726765745f6665617475726573042b0f6d757461626c652d67" - "6c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d75" - "6c746976616c7565"; + "20052903003700000b200020023a0000200141206a24000b460020012d0000410146044041" + "8080c000410b20013402041001000b20002001290001370000200041106a200141116a2800" + "00360000200041086a200141096a2900003700000be81901097f230041b0036b2200240041" + "8b80c000411b41004100410010021a41a680c000411941004100410010021a41e780c00041" + "2b41004100410010021a027f02400240024002400240024002401003220141004a04404192" + "81c00041172001ad10011a1004220141004c0d0141a981c00041132001ad10011a200041c8" + "016a22034200370300200041c0016a22054200370300200041b8016a220442003703002000" + "42003703b001200041b0016a22064120100522014120470d0241bc81c00041132006412041" + "0110021a41cf81c000412041004100410010021a41dc82c000412e41004100410010021a20" + "0041a0016a410036020020004198016a420037030020004200370390014181802020004190" + "016a22024114100022014114470d03418a83c00041142002411410061a2000420037037041" + "888018200041f0006a22024108100022014108470d04419e83c0004117420810011a41b583" + "c000412820024108410110021a2000410036025041848008200041d0006a22024104100022" + "014104470d0541dd83c000411520024104410110021a200041013b003c2003420037030020" + "05420037030020044200370300200042003703b00102402000413c6a410220064120100722" + "0141004e044041f283c00041142001ad10011a200041306a20062001101b418684c000410d" + "20002802302000280234410110021a0c010b419384c00041292001ac10011a0b41bc84c000" + "41154183803c1008ac10011a41d184c00041134189803c1008ac10011a02402000413c6a41" + "021009220141004e044041e484c00041142001ad10011a0c010b41f884c000412d2001ac10" + "011a0b41a585c000412341004100410010021a41de86c000413341004100410010021a2000" + "420037037041828018200041f0006a22014108100a220241004c0d06200241084604404191" + "87c000412b420810011a41bc87c000412f20014108410110021a0c080b41eb87c000412f20" + "02ad10011a200041286a200041f0006a2002101a419a88c00041172000280228200028022c" + "410110021a0c070b41bf82c000411d2001ac10011a419b7f0c070b419a82c00041252001ac" + "10011a419a7f0c060b41ef81c000412b2001ac10011a41997f0c050b41b486c000412a2001" + "ac10011a41b77e0c040b41f385c00041c1002001ac10011a41b67e0c030b41c885c000412b" + "2001ac10011a41b57e0c020b41b188c00041c5002002ac10011a0b200041a0016a41003602" + "0020004198016a4200370300200042003703900102404181802020004190016a2202411410" + "0a220141004a044041f688c000411e2002411410061a0c010b419489c00041332001ac1001" + "1a0b200041013b0050200041c8016a4200370300200041c0016a4200370300200041b8016a" + "4200370300200042003703b0010240200041d0006a4102200041b0016a22014120100b2202" + "41004e044041c789c000411c2002ad10011a200041206a20012002101b41e389c000411520" + "002802202000280224410110021a0c010b41f889c00041392002ac10011a0b41b18ac00041" + "244183803c100cac10011a0240200041d0006a4102100d220141004e044041d58ac000411c" + "2001ad10011a0c010b41f18ac000413d2001ac10011a0b41ae8bc000412841004100410010" + "021a41d68bc000412f41004100410010021a200041b0016a2202101c200041f0006a220120" + "02101d200041a8016a4200370300200041a0016a420037030020004198016a420037030020" + "00420037039001024002400240024002402001411420004190016a22024120100e22014120" + "460440200241204100100f220441004a044041858cc00041232004ad10011a200042003703" + "50200441828018200041d0006a220141081010220241004c0d022002410846044041a88cc0" + "00412a420810011a41d28cc000412e20014108410110021a0c060b41808dc000412e2002ad" + "10011a200041186a200041d0006a2002101a41ae8dc00041162000280218200028021c4101" + "10021a0c050b41e68fc000413c2004ac10011a200041c8016a4200370300200041c0016a42" + "00370300200041b8016a4200370300200042003703b001410141828018200041b0016a4120" + "101022014100480d020c030b41ba92c000412e2001ac10011a41ef7c0c050b41c48dc00041" + "2b2002ac10011a0c020b41a290c00041c1002001ac10011a0b200041013b00504101200041" + "d0006a4102200041b0016a412010112201410048044041e390c00041352001ac10011a0b41" + "014183803c101222014100480440419891c00041322001ac10011a0b4101200041d0006a41" + "0210132201410048044041ca91c00041392001ac10011a0b418392c0004137410041004100" + "10021a0c010b200041013b003c200041c8016a4200370300200041c0016a42003703002000" + "41b8016a4200370300200042003703b001024020042000413c6a4102200041b0016a220141" + "201011220241004e044041ef8dc000411b2002ad10011a200041106a20012002101b418a8e" + "c000411420002802102000280214410110021a0c010b419e8ec00041312002ac10011a0b41" + "cf8ec000412320044183803c1012ac10011a024020042000413c6a41021013220141004e04" + "4041f28ec000411b2001ad10011a0c010b418d8fc00041352001ac10011a0b41c28fc00041" + "2441004100410010021a0b41e892c000412f41004100410010021a200041b0016a2201101c" + "2000413c6a22042001101d200041e8006a4200370300200041e0006a4200370300200041d8" + "006a4200370300200042003703500240024002400240024020044114200041d0006a220241" + "20100e22014120460440419793c000410f20024120410110021a20004188016a4200370300" + "20004180016a4200370300200041f8006a4200370300200042003703700240200441142004" + "411441a693c0004109200041f0006a220141201014220241004a0440200041086a20012002" + "101b41ae93c00041122000280208200028020c410110021a0c010b41c093c000413c2002ac" + "10011a0b200041a8016a22084200370300200041a0016a2203420037030020004198016a22" + "05420037030020004200370390012000413c6a2202411441e80720004190016a2207412010" + "1522014120470d0141fc93c000410e20074120410110021a200041c8016a42003703002000" + "41c0016a4200370300200041b8016a4200370300200042003703b00120024114412a200041" + "b0016a22044120101622014120470d02418a94c000410e20044120410110021a419894c000" + "412441004100410010021a419195c000412541004100410010021a20004188016a42003703" + "0020004180016a4200370300200041f8006a42003703002000420037037041b695c0004117" + "200041f0006a22024120101722014120470d0341cd95c000410b41b695c000411741011002" + "1a41d895c000411120024120410110021a2004101c200041d0006a22062004101d20084200" + "3703002003420037030020054200370300200042003703900102404100200422036b410371" + "220220036a220520034d0d0020020440200221010340200341003a0000200341016a210320" + "0141016b22010d000b0b200241016b4107490d000340200341003a0000200341076a41003a" + "0000200341066a41003a0000200341056a41003a0000200341046a41003a0000200341036a" + "41003a0000200341026a41003a0000200341016a41003a0000200341086a22032005470d00" + "0b0b200541800220026b2201417c716a220320054b0440034020054100360200200541046a" + "22052003490d000b0b024020032001410371220120036a22024f0d00200122050440034020" + "0341003a0000200341016a2103200541016b22050d000b0b200141016b4107490d00034020" + "0341003a0000200341076a41003a0000200341066a41003a0000200341056a41003a000020" + "0341046a41003a0000200341036a41003a0000200341026a41003a0000200341016a41003a" + "0000200341086a22032002470d000b0b024020064114200741202004418002101822014100" + "4a044041e995c00041102001ad10011a20014181024f0d0641f995c0004109200420014101" + "10021a0c010b418296c000412e2001ac10011a0b41b096c000411241c296c0004107410110" + "0222014100480d0541c996c000411d2001ad10011a41e696c0004111422a10014100480440" + "41ad97c000411a42a47b10011a41a47b0c070b41f796c000411c420010011a419397c00041" + "1a41004100410010021a41ff97c000412941004100410010021a41a898c000412810192201" + "45044041d098c000412741a898c0004128410110021a41f798c000411e4100410041001002" + "1a41bf80c000412841004100410010021a41010c070b419599c000411a2001ac10011a41c3" + "7a0c060b41f494c000411d2001ac10011a418b7c0c050b41d894c000411c2001ac10011a41" + "897c0c040b41bc94c000411c2001ac10011a41887c0c030b41dd97c00041222001ac10011a" + "41a77b0c020b000b41c797c00041162001ac10011a41a57b0b200041b0036a24000b0bb919" + "0100418080c0000baf196572726f725f636f64653d3d3d3d20484f53542046554e4354494f" + "4e532054455354203d3d3d54657374696e6720323620686f73742066756e6374696f6e7353" + "5543434553533a20416c6c20686f73742066756e6374696f6e207465737473207061737365" + "64212d2d2d2043617465676f727920313a204c6564676572204865616465722046756e6374" + "696f6e73202d2d2d4c65646765722073657175656e6365206e756d6265723a506172656e74" + "206c65646765722074696d653a506172656e74206c656467657220686173683a5355434345" + "53533a204c6564676572206865616465722066756e6374696f6e734552524f523a20676574" + "5f706172656e745f6c65646765725f686173682077726f6e67206c656e6774683a4552524f" + "523a206765745f706172656e745f6c65646765725f74696d65206661696c65643a4552524f" + "523a206765745f6c65646765725f73716e206661696c65643a2d2d2d2043617465676f7279" + "20323a205472616e73616374696f6e20446174612046756e6374696f6e73202d2d2d547261" + "6e73616374696f6e204163636f756e743a5472616e73616374696f6e20466565206c656e67" + "74683a5472616e73616374696f6e20466565202873657269616c697a65642058525020616d" + "6f756e74293a5472616e73616374696f6e2053657175656e63653a4e657374656420666965" + "6c64206c656e6774683a4e6573746564206669656c643a494e464f3a206765745f74785f6e" + "65737465645f6669656c64206e6f74206170706c696361626c653a5369676e657273206172" + "726179206c656e6774683a4d656d6f73206172726179206c656e6774683a4e657374656420" + "6172726179206c656e6774683a494e464f3a206765745f74785f6e65737465645f61727261" + "795f6c656e206e6f74206170706c696361626c653a535543434553533a205472616e736163" + "74696f6e20646174612066756e6374696f6e734552524f523a206765745f74785f6669656c" + "642853657175656e6365292077726f6e67206c656e6774683a4552524f523a206765745f74" + "785f6669656c6428466565292077726f6e67206c656e677468202865787065637465642038" + "20627974657320666f7220585250293a4552524f523a206765745f74785f6669656c642841" + "63636f756e74292077726f6e67206c656e6774683a2d2d2d2043617465676f727920333a20" + "43757272656e74204c6564676572204f626a6563742046756e6374696f6e73202d2d2d4375" + "7272656e74206f626a6563742062616c616e6365206c656e677468202858525020616d6f75" + "6e74293a43757272656e74206f626a6563742062616c616e6365202873657269616c697a65" + "642058525020616d6f756e74293a43757272656e74206f626a6563742062616c616e636520" + "6c656e67746820286e6f6e2d58525020616d6f756e74293a43757272656e74206f626a6563" + "742062616c616e63653a494e464f3a206765745f63757272656e745f6c65646765725f6f62" + "6a5f6669656c642842616c616e636529206661696c656420286d6179206265206578706563" + "746564293a43757272656e74206c6564676572206f626a656374206163636f756e743a494e" + "464f3a206765745f63757272656e745f6c65646765725f6f626a5f6669656c64284163636f" + "756e7429206661696c65643a43757272656e74206e6573746564206669656c64206c656e67" + "74683a43757272656e74206e6573746564206669656c643a494e464f3a206765745f637572" + "72656e745f6c65646765725f6f626a5f6e65737465645f6669656c64206e6f74206170706c" + "696361626c653a43757272656e74206f626a656374205369676e657273206172726179206c" + "656e6774683a43757272656e74206e6573746564206172726179206c656e6774683a494e46" + "4f3a206765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f61727261" + "795f6c656e206e6f74206170706c696361626c653a535543434553533a2043757272656e74" + "206c6564676572206f626a6563742066756e6374696f6e732d2d2d2043617465676f727920" + "343a20416e79204c6564676572204f626a6563742046756e6374696f6e73202d2d2d537563" + "6365737366756c6c7920636163686564206f626a65637420696e20736c6f743a4361636865" + "64206f626a6563742062616c616e6365206c656e677468202858525020616d6f756e74293a" + "436163686564206f626a6563742062616c616e6365202873657269616c697a656420585250" + "20616d6f756e74293a436163686564206f626a6563742062616c616e6365206c656e677468" + "20286e6f6e2d58525020616d6f756e74293a436163686564206f626a6563742062616c616e" + "63653a494e464f3a206765745f6c65646765725f6f626a5f6669656c642842616c616e6365" + "29206661696c65643a436163686564206e6573746564206669656c64206c656e6774683a43" + "6163686564206e6573746564206669656c643a494e464f3a206765745f6c65646765725f6f" + "626a5f6e65737465645f6669656c64206e6f74206170706c696361626c653a436163686564" + "206f626a656374205369676e657273206172726179206c656e6774683a436163686564206e" + "6573746564206172726179206c656e6774683a494e464f3a206765745f6c65646765725f6f" + "626a5f6e65737465645f61727261795f6c656e206e6f74206170706c696361626c653a5355" + "43434553533a20416e79206c6564676572206f626a6563742066756e6374696f6e73494e46" + "4f3a2063616368655f6c65646765725f6f626a206661696c65642028657870656374656420" + "776974682074657374206669787475726573293a494e464f3a206765745f6c65646765725f" + "6f626a5f6669656c64206661696c656420617320657870656374656420286e6f2063616368" + "6564206f626a656374293a494e464f3a206765745f6c65646765725f6f626a5f6e65737465" + "645f6669656c64206661696c65642061732065787065637465643a494e464f3a206765745f" + "6c65646765725f6f626a5f61727261795f6c656e206661696c656420617320657870656374" + "65643a494e464f3a206765745f6c65646765725f6f626a5f6e65737465645f61727261795f" + "6c656e206661696c65642061732065787065637465643a535543434553533a20416e79206c" + "6564676572206f626a6563742066756e6374696f6e732028696e7465726661636520746573" + "746564294552524f523a206163636f756e745f6b65796c6574206661696c656420666f7220" + "63616368696e6720746573743a2d2d2d2043617465676f727920353a204b65796c65742047" + "656e65726174696f6e2046756e6374696f6e73202d2d2d4163636f756e74206b65796c6574" + "3a546573745479706543726564656e7469616c206b65796c65743a494e464f3a2063726564" + "656e7469616c5f6b65796c6574206661696c656420286578706563746564202d20696e7465" + "7266616365206973737565293a457363726f77206b65796c65743a4f7261636c65206b6579" + "6c65743a535543434553533a204b65796c65742067656e65726174696f6e2066756e637469" + "6f6e734552524f523a206f7261636c655f6b65796c6574206661696c65643a4552524f523a" + "20657363726f775f6b65796c6574206661696c65643a4552524f523a206163636f756e745f" + "6b65796c6574206661696c65643a2d2d2d2043617465676f727920363a205574696c697479" + "2046756e6374696f6e73202d2d2d48656c6c6f2c205852504c205741534d20776f726c6421" + "496e70757420646174613a5348413531322068616c6620686173683a4e4654206461746120" + "6c656e6774683a4e465420646174613a494e464f3a206765745f6e6674206661696c656420" + "286578706563746564202d206e6f2073756368204e4654293a54657374207472616365206d" + "6573736167657061796c6f616454726163652066756e6374696f6e20627974657320777269" + "7474656e3a54657374206e756d62657220747261636554726163655f6e756d2066756e6374" + "696f6e20737563636565646564535543434553533a205574696c6974792066756e6374696f" + "6e734552524f523a2074726163655f6e756d2829206661696c65643a4552524f523a207472" + "6163652829206661696c65643a4552524f523a20636f6d707574655f7368613531325f6861" + "6c66206661696c65643a2d2d2d2043617465676f727920373a204461746120557064617465" + "2046756e6374696f6e73202d2d2d55706461746564206c656467657220656e747279206461" + "74612066726f6d205741534d20746573745375636365737366756c6c792075706461746564" + "206c656467657220656e74727920776974683a535543434553533a20446174612075706461" + "74652066756e6374696f6e734552524f523a207570646174655f64617461206661696c6564" + "3a004d0970726f64756365727302086c616e6775616765010452757374000c70726f636573" + "7365642d6279010572757374631d312e39302e30202831313539653738633420323032352d" + "30392d313429002c0f7461726765745f6665617475726573022b0f6d757461626c652d676c" + "6f62616c732b087369676e2d657874"; extern std::string const deepRecursionHex = "0061736d01000000013f0b60017f0060037f7f7f017f60027f7f017f60027f" @@ -9607,9 +9606,9 @@ extern std::string const hfPerfTest = extern std::string const allKeyletsWasmHex = "0061736d0100000001530a60057f7f7f7f7f017f60047f7f7f7f017f60067f7f7f7f7f7f01" "7f60037f7f7f017f60087f7f7f7f7f7f7f7f017f60037f7f7e017f60077f7f7f7f7f7f7f01" - "7f60057f7f7f7f7f006000017f60037f7f7f000284051808686f73745f6c69620574726163" - "65000008686f73745f6c69621063616368655f6c65646765725f6f626a000308686f73745f" - "6c69620974726163655f6e756d000508686f73745f6c6962146765745f6c65646765725f6f" + "7f60057f7f7f7f7f006000017f60037f7f7f000284051808686f73745f6c69620974726163" + "655f6e756d000508686f73745f6c6962057472616365000008686f73745f6c696210636163" + "68655f6c65646765725f6f626a000308686f73745f6c6962146765745f6c65646765725f6f" "626a5f6669656c64000108686f73745f6c69621c6765745f63757272656e745f6c65646765" "725f6f626a5f6669656c64000308686f73745f6c69620d74726163655f6163636f756e7400" "0108686f73745f6c69620e6163636f756e745f6b65796c6574000108686f73745f6c69620b" @@ -9627,227 +9626,235 @@ extern std::string const allKeyletsWasmHex = "636b65745f6b65796c6574000008686f73745f6c69620c7661756c745f6b65796c65740000" "03040307080905030100110619037f01418080c0000b7f0041958bc0000b7f0041a08bc000" "0b073e05066d656d6f727902000d6f626a6563745f65786973747300180666696e69736800" - "190a5f5f646174615f656e6403010b5f5f686561705f6261736503020a8d33038d0602057f" - "037e230041f0006b220524000240024020012d0000450440200541186a200141196a290000" - "370300200541106a200141116a290000370300200541086a200141096a2900003703002005" - "20012900013703002002200320054120410110001a2005412041001001220141004c0d0102" - "4002400240024002402004450440418b80c000410f4285801410021a200541d8006a420037" - "0300200541d0006a4200370300200541c8006a420037030020054200370340200141858014" - "200541406b22064120100322014120470d01200541286a200541cf006a2201290000220a37" - "0300200541306a200541d7006a2202290000220b370300200541386a200541df006a22032d" - "000022043a000020052005290047220c37032020052f014021072005280142210820052d00" - "4621092001200a3700002002200b370000200320043a0000200520093a0046200520083601" - "42200520073b01402005200c370047419a80c000410c20064120410110001a0c030b418b80" - "c000410f2004ac10021a200541d0006a4100360200200541c8006a42003703002005420037" - "034020012004200541406b411410032201417e47044020014114460d02200141004e0d0441" - "998ac00041172001ac10021a0c050b417e21010c040b41a680c0004115417f20012001417f" - "4e1b2201ac10021a200041013a0000200020013602040c060b200520052900473703602005" - "200541cc006a2201290000370065200520052f014022023b016e2005200529036037032020" - "05200529006537002520052800432103200520052d00423a0042200520023b014020052003" - "3600432001200529002537000020052005290320370047419a80c000410c200541406b4114" - "410110001a0b20004180023b01000c040b41b08ac0004131421410021a41e18ac000412020" - "01ad10021a417321010b41a680c00041152001ac10021a200041013a000020002001360204" - "0c020b41c280c000411620012802042201ac10021a200041013a0000200020013602040c01" - "0b41bb80c00041072001ac10021a200041013a0000200020013602040b200541f0006a2400" - "0bfc27020a7f027e23004180076b2200240041d880c000412341004100410010001a200041" - "98016a2204410036020020004190016a22034200370300200042003703880102402000027f" - "02404181802020004188016a22024114100422014114460440200041066a20002d008a013a" - "00002000200029008f013703e001200020004194016a22052900003700e501200041106a20" - "002900e501370000200020002f0188013b01042000200028008b01360007200020002903e0" - "0137000b41fb80c0004108200041046a2208411410051a2004410036020020034200370300" - "20004200370388014183802020024114100422014114470d032000411a6a20002d008a013a" - "00002000200029008f013703e001200020052900003700e501200041246a20002900e50137" - "0000200020002f0188013b01182000200028008b0136001b200020002903e00137001f4183" - "81c000410c200041186a411410051a200041a0016a22054200370300200442003703002003" - "420037030020004200370388012008411420024120100622014120460d0102402001410048" - "0440200020013602300c010b2000417f3602300b41010c020b0c020b200041c5006a200529" - "03003700002000413d6a2004290300370000200041356a2003290300370000200020002903" - "880137002d41000b3a002c20004188016a22042000412c6a418f81c0004107418180201018" - "0240024020002d00880145044041002101419681c000413541004100410010001a200041de" - "006a41c4003a0000200041d8006a4100360200200041e3006a41003a0000200041d5a6013b" - "015c200042003703502000410036005f200041a0016a2203420037030020004198016a2202" - "420037030020004190016a220542003703002000420037038801200041046a411420004118" - "6a4114200041d0006a41142004412010072204412047044002402004410048044020002004" - "3602680c010b2000417f3602680b410121010c020b200041fd006a20032903003700002000" - "41f5006a2002290300370000200041ed006a20052903003700002000200029038801370065" - "0c010b200028028c01210141878ac0004112420510021a0c010b200020013a006420004188" - "016a200041e4006a41cb81c000410941001018024020002d00880145044041d481c0004137" - "41004100410010001a200041f0016a200041286a2201280100360200200041e8016a200041" - "206a2202290100370300200041fc016a200041d8006a290300220a37020020004184026a20" - "0041e0006a2802002203360200200020002901183703e00120002000290350220b3702f401" - "200041e8066a22042003360200200041e0066a2203200a3703002000200b3703d806200041" - "f4066a2002290100370200200041fc066a2001280100360200200020002901183702ec0620" - "004188026a200041d8066a22014128101a2000418c016a200041e0016a41d000101a200041" - "0136028801200041f0066a2202420037030020044200370300200342003703002000420037" - "03d80641818bc0004114200041b4016a412820014120100822014120470440024020014100" - "480440200020013602e4010c010b2000417f3602e4010b410121010c020b200041f9016a20" - "02290300370000200041f1016a2004290300370000200041e9016a20032903003700002000" - "20002903d8063700e101410021010c010b200028028c01210141878ac0004112420510021a" - "0c010b200020013a00e001200041b4026a200041e0016a2204418b82c00041034181802010" - "18024020002d00b40245044041002101418e82c000413141004100410010001a200041f801" - "6a22034200370300200041f0016a22024200370300200041e8016a22054200370300200042" - "003703e001200041046a411441062004412010092204412047044002402004410048044020" - "0020043602c0020c010b2000417f3602c0020b410121010c020b200041d5026a2003290300" - "370000200041cd026a2002290300370000200041c5026a2005290300370000200020002903" - "e0013700bd020c010b20002802b802210141878ac0004112420610021a0c010b200020013a" - "00bc02200041e0016a2204200041bc026a41bf82c0004105418180201018024020002d00e0" - "014504404100210141c482c000413341004100410010001a200041f8016a22034200370300" - "200041f0016a22024200370300200041e8016a22054200370300200042003703e001200041" - "046a220841142008411441f782c000411220044120100a2204412047044002402004410048" - "0440200020043602e4020c010b2000417f3602e4020b410121010c020b200041f9026a2003" - "290300370000200041f1026a2002290300370000200041e9026a2005290300370000200020" - "002903e0013700e1020c010b20002802e401210141878ac0004112420610021a0c010b2000" - "20013a00e002200041e0016a2204200041e0026a418983c000410a41988020101802402000" - "2d00e00145044041002101419383c000413841004100410010001a200041f8016a22034200" - "370300200041f0016a22024200370300200041e8016a22054200370300200042003703e001" - "200041046a4114200041186a411420044120100b2204412047044002402004410048044020" - "002004360288030c010b2000417f360288030b410121010c020b2000419d036a2003290300" - "37000020004195036a20022903003700002000418d036a2005290300370000200020002903" - "e001370085030c010b20002802e401210141878ac0004112420710021a0c010b200020013a" - "008403200041e0016a220520004184036a41cb83c000410841818020101802400240024002" - "40024002400240024002400240024020002d00e00145044041d383c0004136410041004100" - "10001a230041206b22032400200341186a22064200370300200341106a2207420037030020" - "0341086a2209420037030020034200370300200041a8036a2201027f200041046a22044114" - "200041186a2208411420034120100c22024120470440024020024100480440200120023602" - "040c010b2001417f3602040b41010c010b20012003290300370001200141196a2006290300" - "370000200141116a2007290300370000200141096a200929030037000041000b3a00002003" - "41206a240020052001418984c000410e41818020101820002d00e0010d01419784c000413c" - "41004100410010001a230041206b22032400200341186a22064200370300200341106a2207" - "4200370300200341086a2209420037030020034200370300200041cc036a2201027f200441" - "1420034120100d22024120470440024020024100480440200120023602040c010b2001417f" - "3602040b41010c010b20012003290300370001200141196a2006290300370000200141116a" - "2007290300370000200141096a200929030037000041000b3a0000200341206a2400200520" - "0141d384c000410341818020101820002d00e0010d0241d684c00041314100410041001000" - "1a230041206b22032400200341186a22064200370300200341106a22074200370300200341" - "086a2209420037030020034200370300200041f0036a2201027f20044114410b2003412010" - "0e22024120470440024020024100480440200120023602040c010b2001417f3602040b4101" - "0c010b20012003290300370001200141196a2006290300370000200141116a200729030037" - "0000200141096a200929030037000041000b3a0000200341206a240020052001418785c000" - "410641818020101820002d00e0010d03418d85c000413441004100410010001a230041206b" - "22032400200341186a22064200370300200341106a22074200370300200341086a22094200" - "3703002003420037030020004194046a2201027f20044114410c20034120100f2202412047" - "0440024020024100480440200120023602040c010b2001417f3602040b41010c010b200120" - "03290300370001200141196a2006290300370000200141116a200729030037000020014109" - "6a200929030037000041000b3a0000200341206a2400200041f4016a200041146a28010036" - "0200200041ec016a2000410c6a290100370200200020002901043702e401200041808080e0" - "003602e001200041d8066a2203200141c185c000410b41848020101820002d00d8060d0441" - "cc85c000413941004100410010001a230041206b22012400200141186a2206420037030020" - "0141106a22074200370300200141086a2209420037030020014200370300200041b8046a22" - "02027f20054118200841142001412010102205412047044002402005410048044020022005" - "3602040c010b2002417f3602040b41010c010b20022001290300370001200241196a200629" - "0300370000200241116a2007290300370000200241096a200929030037000041000b3a0000" - "200141206a240020032002418586c000410741818020101820002d00d8060d05418c86c000" - "413541004100410010001a230041206b22012400200141186a22064200370300200141106a" - "22074200370300200141086a2209420037030020014200370300200041dc046a2202027f20" - "084114410620014120101122054120470440024020054100480440200220053602040c010b" - "2002417f3602040b41010c010b20022001290300370001200241196a200629030037000020" - "0241116a2007290300370000200241096a200929030037000041000b3a0000200141206a24" - "002003200241c186c000410c41828020101820002d00d8060d0641cd86c000413a41004100" - "410010001a230041206b22012400200141186a22064200370300200141106a220742003703" - "00200141086a220942003703002001420037030020004180056a2202027f20044114410d20" - "014120101222054120470440024020054100480440200220053602040c010b2002417f3602" - "040b41010c010b20022001290300370001200241196a2006290300370000200241116a2007" - "290300370000200241096a200929030037000041000b3a0000200141206a24002003200241" - "8787c000410541818020101820002d00d8060d07418c87c000413341004100410010001a23" - "0041206b22012400200141186a22064200370300200141106a22074200370300200141086a" - "2209420037030020014200370300200041a4056a2202027f2004411420084114410e200141" - "20101322054120470440024020054100480440200220053602040c010b2002417f3602040b" - "41010c010b20022001290300370001200241196a2006290300370000200241116a20072903" - "00370000200241096a200929030037000041000b3a0000200141206a24002003200241bf87" - "c000410a41818020101820002d00d8060d0841c987c000413841004100410010001a230041" - "206b22012400200141186a22084200370300200141106a22064200370300200141086a2207" - "420037030020014200370300200041c8056a2202027f20044114410f200141201014220541" - "20470440024020054100480440200220053602040c010b2002417f3602040b41010c010b20" - "022001290300370001200241196a2008290300370000200241116a20062903003700002002" - "41096a200729030037000041000b3a0000200141206a240020032002418188c00041124182" - "8020101820002d00d8060d09419388c00041c00041004100410010001a230041206b220124" - "00200141186a22084200370300200141106a22064200370300200141086a22074200370300" - "20014200370300200041ec056a2202027f2004411420014120101522054120470440024020" - "054100480440200220053602040c010b2002417f3602040b41010c010b2002200129030037" - "0001200241196a2008290300370000200241116a2006290300370000200241096a20072903" - "0037000041000b3a0000200141206a24002003200241d388c000410a4100101820002d00d8" - "060d0a41dd88c000413841004100410010001a230041206b22012400200141186a22084200" - "370300200141106a22064200370300200141086a2207420037030020014200370300200041" - "90066a2202027f200441144112200141201016220541204704400240200541004804402002" - "20053602040c010b2002417f3602040b41010c010b20022001290300370001200241196a20" - "08290300370000200241116a2006290300370000200241096a200729030037000041000b3a" - "0000200141206a240020032002419589c000410641818020101820002d00d8060d0b419b89" - "c000413441004100410010001a230041206b22012400200141186a22054200370300200141" - "106a22084200370300200141086a2206420037030020014200370300200041b4066a220202" - "7f20044114411320014120101722044120470440024020044100480440200220043602040c" - "010b2002417f3602040b41010c010b20022001290300370001200241196a20052903003700" - "00200241116a2008290300370000200241096a200629030037000041000b3a000020014120" - "6a24002003200241cf89c000410541818020101820002d00d80645044041d489c000413341" - "004100410010001a410121010c0d0b20002802dc06210141878ac0004112421310021a0c0c" - "0b20002802e401210141878ac0004112420810021a0c0b0b20002802e401210141878ac000" - "4112420910021a0c0a0b20002802e401210141878ac0004112420a10021a0c090b20002802" - "e401210141878ac0004112420b10021a0c080b20002802dc06210141878ac0004112420c10" - "021a0c070b20002802dc06210141878ac0004112420d10021a0c060b20002802dc06210141" - "878ac0004112420d10021a0c050b20002802dc06210141878ac0004112420d10021a0c040b" - "20002802dc06210141878ac0004112420e10021a0c030b20002802dc06210141878ac00041" - "12420f10021a0c020b20002802dc06210141878ac0004112421010021a0c010b20002802dc" - "06210141878ac0004112421210021a0b20004180076a240020010f0b418080c000410b417f" - "20012001417f4e1bac1002000bfd0401067f200241104f044002402000410020006b410371" - "22056a220420004d0d002001210320050440200521060340200020032d00003a0000200341" - "016a2103200041016a2100200641016b22060d000b0b200541016b4107490d000340200020" - "032d00003a0000200041016a200341016a2d00003a0000200041026a200341026a2d00003a" - "0000200041036a200341036a2d00003a0000200041046a200341046a2d00003a0000200041" - "056a200341056a2d00003a0000200041066a200341066a2d00003a0000200041076a200341" - "076a2d00003a0000200341086a2103200041086a22002004470d000b0b2004200220056b22" - "07417c7122086a21000240200120056a2206410371450440200020044d0d01200621010340" - "20042001280200360200200141046a2101200441046a22042000490d000b0c010b20002004" - "4d0d002006410374220541187121032006417c71220241046a2101410020056b4118712105" - "200228020021020340200420022003762001280200220220057472360200200141046a2101" - "200441046a22042000490d000b0b20074103712102200620086a21010b0240200020002002" - "6a22064f0d002002410771220304400340200020012d00003a0000200141016a2101200041" - "016a2100200341016b22030d000b0b200241016b4107490d000340200020012d00003a0000" - "200041016a200141016a2d00003a0000200041026a200141026a2d00003a0000200041036a" - "200141036a2d00003a0000200041046a200141046a2d00003a0000200041056a200141056a" - "2d00003a0000200041066a200141066a2d00003a0000200041076a200141076a2d00003a00" - "00200141086a2101200041086a22002006470d000b0b0b0b8b0b0100418080c0000b810b65" - "72726f725f636f64653d47657474696e67206669656c643a204669656c6420646174613a20" - "4572726f722067657474696e67206669656c643a204572726f723a204572726f7220676574" - "74696e67206b65796c65743a202424242424205354415254494e47205741534d2045584543" - "5554494f4e2024242424244163636f756e743a44657374696e6174696f6e3a4163636f756e" - "744163636f756e74206f626a656374206578697374732c2070726f63656564696e67207769" - "746820657363726f772066696e6973682e54727573746c696e6554727573746c696e65206f" + "190a5f5f646174615f656e6403010b5f5f686561705f6261736503020ae53503900602047f" + "037e230041f0006b22052400024020012d0000410146044041c280c0004116200128020422" + "01ac10001a200041013a0000200020013602040c010b200541186a200141196a2900003703" + "00200541106a200141116a290000370300200541086a200141096a29000037030020052001" + "2900013703002002200320054120410110011a02402005412041001002220141004a044002" + "400240024002402004450440418b80c000410f4285801410001a200541d8006a4200370300" + "200541d0006a4200370300200541c8006a4200370300200542003703402001418580142005" + "41406b4120100322014120460d0141a680c0004115417f20012001417f4e1b2201ac10001a" + "200041013a0000200020013602040c070b418b80c000410f2004ac10001a200541d0006a41" + "00360200200541c8006a42003703002005420037034020012004200541406b411410032201" + "417e47044020014114460d04200141004e0d0241ad8ac00041172001ac10001a0c030b417e" + "21010c020b200541286a200541cf006a22012900002209370300200541306a200541d7006a" + "2202290000220a370300200541386a200541df006a22032d000022043a0000200520052900" + "47220b37032020052f014021062005280142210720052d0046210820012009370000200220" + "0a370000200320043a0000200520083a004620052007360142200520063b01402005200b37" + "0047419a80c000410c200541406b4120410110011a0c040b41c48ac0004131421410001a41" + "f58ac00041202001ad10001a417321010b41a680c00041152001ac10001a200041013a0000" + "200020013602040c030b200520052900473703602005200541cc006a220129000037006520" + "0520052f014022023b016e2005200529036037032020052005290065370025200528004321" + "03200520052d00423a0042200520023b014020052003360043200120052900253700002005" + "2005290320370047419a80c000410c200541406b4114410110011a0c010b41bb80c0004107" + "2001ac10001a200041013a0000200020013602040c010b20004180023b01000b200541f000" + "6a24000bd92802077f027e23004180076b2200240041d880c000412341004100410010011a" + "20004198016a2201410036020020004190016a220242003703002000420037038801024020" + "00027f02404181802020004188016a22044114100422034114460440200041066a20002d00" + "8a013a00002000200029008f013703e001200020004194016a22052900003700e501200041" + "106a20002900e501370000200020002f0188013b01042000200028008b0136000720002000" + "2903e00137000b41fb80c0004108200041046a2206411410051a2001410036020020024200" + "37030020004200370388014183802020044114100422034114470d032000411a6a20002d00" + "8a013a00002000200029008f013703e001200020052900003700e501200041246a20002900" + "e501370000200020002f0188013b01182000200028008b0136001b200020002903e0013700" + "1f418381c000410c200041186a411410051a200041a0016a22054200370300200142003703" + "002002420037030020004200370388012006411420044120100622034120460d0102402003" + "4100480440200020033602300c010b2000417f3602300b41010c020b0c020b200041c5006a" + "20052903003700002000413d6a2001290300370000200041356a2002290300370000200020" + "002903880137002d41000b3a002c20004188016a2000412c6a418f81c00041074181802010" + "18024020002d0088014101460440200028028c01210341878ac0004112420510001a0c010b" + "41002103419681c000413541004100410010011a200041de006a41c4003a0000200041d800" + "6a4100360200200041e3006a41003a0000200041d5a6013b015c2000420037035020004100" + "36005f200041a0016a2202420037030020004198016a2204420037030020004190016a2205" + "420037030020004200370388010240200041046a4114200041186a4114200041d0006a4114" + "20004188016a4120100722014120470440024020014100480440200020013602680c010b20" + "00417f3602680b410121030c010b200041fd006a2002290300370000200041f5006a200429" + "0300370000200041ed006a200529030037000020002000290388013700650b200020033a00" + "6420004188016a200041e4006a41cb81c00041094100101820002d00880141014604402000" + "28028c01210341878ac0004112420510001a0c010b41d481c000413741004100410010011a" + "200041f0016a200041286a2203280100360200200041e8016a200041206a22042901003703" + "00200041fc016a200041d8006a290300220737020020004184026a200041e0006a28020022" + "02360200200020002901183703e0012000200029035022083702f401200041e8066a220120" + "02360200200041e0066a22022007370300200020083703d806200041f4066a200429010037" + "0200200041fc066a2003280100360200200020002901183702ec0620004188026a200041d8" + "066a22034128101a2000418c016a200041e0016a41d000101a2000410136028801200041f0" + "066a220442003703002001420037030020024200370300200042003703d8062000027f4199" + "8ac0004114200041b4016a4128200341201008220341204704400240200341004804402000" + "20033602e4010c010b2000417f3602e4010b41010c010b200041f9016a2004290300370000" + "200041f1016a2001290300370000200041e9016a2002290300370000200020002903d80637" + "00e10141000b3a00e001200041b4026a200041e0016a418b82c00041034181802010182000" + "2d00b402410146044020002802b802210341878ac0004112420610001a0c010b4100210341" + "8e82c000413141004100410010011a200041f8016a22024200370300200041f0016a220442" + "00370300200041e8016a22054200370300200042003703e0010240200041046a4114410620" + "0041e0016a4120100922014120470440024020014100480440200020013602c0020c010b20" + "00417f3602c0020b410121030c010b200041d5026a2002290300370000200041cd026a2004" + "290300370000200041c5026a2005290300370000200020002903e0013700bd020b20002003" + "3a00bc02200041e0016a200041bc026a41bf82c000410541818020101820002d00e0014101" + "46044020002802e401210341878ac0004112420610001a0c010b4100210341c482c0004133" + "41004100410010011a200041f8016a22024200370300200041f0016a220442003703002000" + "41e8016a22054200370300200042003703e0010240200041046a220141142001411441f782" + "c0004112200041e0016a4120100a22014120470440024020014100480440200020013602e4" + "020c010b2000417f3602e4020b410121030c010b200041f9026a2002290300370000200041" + "f1026a2004290300370000200041e9026a2005290300370000200020002903e0013700e102" + "0b200020033a00e002200041e0016a200041e0026a418983c000410a41988020101820002d" + "00e001410146044020002802e401210341878ac0004112420710001a0c010b410021034193" + "83c000413841004100410010011a200041f8016a22024200370300200041f0016a22044200" + "370300200041e8016a22054200370300200042003703e0010240200041046a411420004118" + "6a4114200041e0016a4120100b220141204704400240200141004804402000200136028803" + "0c010b2000417f360288030b410121030c010b2000419d036a200229030037000020004195" + "036a20042903003700002000418d036a2005290300370000200020002903e001370085030b" + "200020033a008403200041e0016a20004184036a41cb83c000410841818020101820002d00" + "e001410146044020002802e401210341878ac0004112420810001a0c010b41d383c0004136" + "41004100410010011a230041206b22012400200141186a22044200370300200141106a2205" + "4200370300200141086a2206420037030020014200370300200041a8036a2202027f200041" + "046a4114200041186a411420014120100c2203412047044002402003410048044020022003" + "3602040c010b2002417f3602040b41010c010b20022001290300370001200241196a200429" + "0300370000200241116a2005290300370000200241096a200629030037000041000b3a0000" + "200141206a2400200041e0016a2002418984c000410e41818020101820002d00e001410146" + "044020002802e401210341878ac0004112420910001a0c010b419784c000413c4100410041" + "0010011a230041206b22012400200141186a22044200370300200141106a22054200370300" + "200141086a2206420037030020014200370300200041cc036a2202027f200041046a411420" + "014120100d22034120470440024020034100480440200220033602040c010b2002417f3602" + "040b41010c010b20022001290300370001200241196a2004290300370000200241116a2005" + "290300370000200241096a200629030037000041000b3a0000200141206a2400200041e001" + "6a200241d384c000410341818020101820002d00e001410146044020002802e40121034187" + "8ac0004112420a10001a0c010b41d684c000413141004100410010011a230041206b220124" + "00200141186a22044200370300200141106a22054200370300200141086a22064200370300" + "20014200370300200041f0036a2202027f200041046a4114410b20014120100e2203412047" + "0440024020034100480440200220033602040c010b2002417f3602040b41010c010b200220" + "01290300370001200241196a2004290300370000200241116a200529030037000020024109" + "6a200629030037000041000b3a0000200141206a2400200041e0016a2002418785c0004106" + "41818020101820002d00e001410146044020002802e401210341878ac0004112420b10001a" + "0c010b418d85c000413441004100410010011a230041206b22012400200141186a22044200" + "370300200141106a22054200370300200141086a2206420037030020014200370300200041" + "94046a2202027f200041046a4114410c20014120100f220341204704400240200341004804" + "40200220033602040c010b2002417f3602040b41010c010b20022001290300370001200241" + "196a2004290300370000200241116a2005290300370000200241096a200629030037000041" + "000b3a0000200141206a2400200041f4016a200041146a280100360200200041ec016a2000" + "410c6a290100370200200020002901043702e401200041808080e0003602e001200041d806" + "6a200241c185c000410b41848020101820002d00d806410146044020002802dc0621034187" + "8ac0004112420c10001a0c010b41cc85c000413941004100410010011a230041206b220124" + "00200141186a22044200370300200141106a22054200370300200141086a22064200370300" + "20014200370300200041b8046a2202027f200041e0016a4118200041186a41142001412010" + "1022034120470440024020034100480440200220033602040c010b2002417f3602040b4101" + "0c010b20022001290300370001200241196a2004290300370000200241116a200529030037" + "0000200241096a200629030037000041000b3a0000200141206a2400200041d8066a200241" + "8586c000410741818020101820002d00d806410146044020002802dc06210341878ac00041" + "12420d10001a0c010b418c86c000413541004100410010011a230041206b22012400200141" + "186a22044200370300200141106a22054200370300200141086a2206420037030020014200" + "370300200041dc046a2202027f200041186a41144106200141201011220341204704400240" + "20034100480440200220033602040c010b2002417f3602040b41010c010b20022001290300" + "370001200241196a2004290300370000200241116a2005290300370000200241096a200629" + "030037000041000b3a0000200141206a2400200041d8066a200241c186c000410c41828020" + "101820002d00d806410146044020002802dc06210341878ac0004112420d10001a0c010b41" + "cd86c000413a41004100410010011a230041206b22012400200141186a2204420037030020" + "0141106a22054200370300200141086a220642003703002001420037030020004180056a22" + "02027f200041046a4114410d20014120101222034120470440024020034100480440200220" + "033602040c010b2002417f3602040b41010c010b20022001290300370001200241196a2004" + "290300370000200241116a2005290300370000200241096a200629030037000041000b3a00" + "00200141206a2400200041d8066a2002418787c000410541818020101820002d00d8064101" + "46044020002802dc06210341878ac0004112420d10001a0c010b418c87c000413341004100" + "410010011a230041206b22012400200141186a22044200370300200141106a220542003703" + "00200141086a2206420037030020014200370300200041a4056a2202027f200041046a4114" + "200041186a4114410e20014120101322034120470440024020034100480440200220033602" + "040c010b2002417f3602040b41010c010b20022001290300370001200241196a2004290300" + "370000200241116a2005290300370000200241096a200629030037000041000b3a00002001" + "41206a2400200041d8066a200241bf87c000410a41818020101820002d00d8064101460440" + "20002802dc06210341878ac0004112420e10001a0c010b41c987c000413841004100410010" + "011a230041206b22012400200141186a22044200370300200141106a220542003703002001" + "41086a2206420037030020014200370300200041c8056a2202027f200041046a4114410f20" + "014120101422034120470440024020034100480440200220033602040c010b2002417f3602" + "040b41010c010b20022001290300370001200241196a2004290300370000200241116a2005" + "290300370000200241096a200629030037000041000b3a0000200141206a2400200041d806" + "6a2002418188c000411241828020101820002d00d806410146044020002802dc0621034187" + "8ac0004112420f10001a0c010b419388c00041c00041004100410010011a230041206b2201" + "2400200141186a22044200370300200141106a22054200370300200141086a220642003703" + "0020014200370300200041ec056a2202027f200041046a4114200141201015220341204704" + "40024020034100480440200220033602040c010b2002417f3602040b41010c010b20022001" + "290300370001200241196a2004290300370000200241116a2005290300370000200241096a" + "200629030037000041000b3a0000200141206a2400200041d8066a200241d388c000410a41" + "00101820002d00d806410146044020002802dc06210341878ac0004112421010001a0c010b" + "41dd88c000413841004100410010011a230041206b22012400200141186a22044200370300" + "200141106a22054200370300200141086a220642003703002001420037030020004190066a" + "2202027f200041046a41144112200141201016220341204704400240200341004804402002" + "20033602040c010b2002417f3602040b41010c010b20022001290300370001200241196a20" + "04290300370000200241116a2005290300370000200241096a200629030037000041000b3a" + "0000200141206a2400200041d8066a2002419589c000410641818020101820002d00d80641" + "0146044020002802dc06210341878ac0004112421210001a0c010b419b89c0004134410041" + "00410010011a230041206b22012400200141186a22044200370300200141106a2205420037" + "0300200141086a2206420037030020014200370300200041b4066a2202027f200041046a41" + "14411320014120101722034120470440024020034100480440200220033602040c010b2002" + "417f3602040b41010c010b20022001290300370001200241196a2004290300370000200241" + "116a2005290300370000200241096a200629030037000041000b3a0000200141206a240020" + "0041d8066a200241cf89c00041054181802010184101210320002d00d80641014604402000" + "2802dc06210341878ac0004112421310001a0c010b41d489c000413341004100410010011a" + "0b20004180076a240020030f0b418080c000410b417f20032003417f4e1bac1000000bf506" + "010b7f230041106b2106200241104f0440024020002000410020006b41037122056a22044f" + "0d002001210320050440200521070340200020032d00003a0000200341016a210320004101" + "6a2100200741016b22070d000b0b200541016b4107490d000340200020032d00003a000020" + "0041016a200341016a2d00003a0000200041026a200341026a2d00003a0000200041036a20" + "0341036a2d00003a0000200041046a200341046a2d00003a0000200041056a200341056a2d" + "00003a0000200041066a200341066a2d00003a0000200041076a200341076a2d00003a0000" + "200341086a2103200041086a22002004470d000b0b2004200220056b220b417c71220c6a21" + "000240200120056a22034103712201450440200020044d0d01200321010340200420012802" + "00360200200141046a2101200441046a22042000490d000b0c010b41002102200641003602" + "0c2006410c6a2001722105410420016b22074101710440200520032d00003a000041012102" + "0b20074102710440200220056a200220036a2f01003b01000b200320016b21022001410374" + "2107200628020c210902402000200441046a4d0440200421050c010b410020076b41187121" + "08034020042009200776200241046a2202280200220920087472360200200441086a210a20" + "0441046a220521042000200a4b0d000b0b41002104200641003a0008200641003a0006027f" + "200141014604404100210141002108200641086a0c010b200241056a2d0000200620024104" + "6a2d000022013a000841087421084102210d200641066a0b210a20052003410171047f200a" + "200241046a200d6a2d00003a000020062d0006411074210420062d00080520010b41ff0171" + "200420087272410020076b411871742009200776723602000b200b41037121022003200c6a" + "21010b02402000200020026a22044f0d002002410771220304400340200020012d00003a00" + "00200141016a2101200041016a2100200341016b22030d000b0b200241016b4107490d0003" + "40200020012d00003a0000200041016a200141016a2d00003a0000200041026a200141026a" + "2d00003a0000200041036a200141036a2d00003a0000200041046a200141046a2d00003a00" + "00200041056a200141056a2d00003a0000200041066a200141066a2d00003a000020004107" + "6a200141076a2d00003a0000200141086a2101200041086a22002004470d000b0b0b0b930b" + "0200418080c0000b990a6572726f725f636f64653d47657474696e67206669656c643a2046" + "69656c6420646174613a204572726f722067657474696e67206669656c643a204572726f72" + "3a204572726f722067657474696e67206b65796c65743a202424242424205354415254494e" + "47205741534d20455845435554494f4e2024242424244163636f756e743a44657374696e61" + "74696f6e3a4163636f756e744163636f756e74206f626a656374206578697374732c207072" + "6f63656564696e67207769746820657363726f772066696e6973682e54727573746c696e65" + "54727573746c696e65206f626a656374206578697374732c2070726f63656564696e672077" + "69746820657363726f772066696e6973682e414d4d414d4d206f626a656374206578697374" + "732c2070726f63656564696e67207769746820657363726f772066696e6973682e43686563" + "6b436865636b206f626a656374206578697374732c2070726f63656564696e672077697468" + "20657363726f772066696e6973682e7465726d73616e64636f6e646974696f6e7343726564" + "656e7469616c43726564656e7469616c206f626a656374206578697374732c2070726f6365" + "6564696e67207769746820657363726f772066696e6973682e44656c656761746544656c65" + "67617465206f626a656374206578697374732c2070726f63656564696e6720776974682065" + "7363726f772066696e6973682e4465706f736974507265617574684465706f736974507265" + "61757468206f626a656374206578697374732c2070726f63656564696e6720776974682065" + "7363726f772066696e6973682e444944444944206f626a656374206578697374732c207072" + "6f63656564696e67207769746820657363726f772066696e6973682e457363726f77457363" + "726f77206f626a656374206578697374732c2070726f63656564696e672077697468206573" + "63726f772066696e6973682e4d505449737375616e63654d505449737375616e6365206f62" + "6a656374206578697374732c2070726f63656564696e67207769746820657363726f772066" + "696e6973682e4d50546f6b656e4d50546f6b656e206f626a656374206578697374732c2070" + "726f63656564696e67207769746820657363726f772066696e6973682e4e46546f6b656e4f" + "666665724e46546f6b656e4f66666572206f626a656374206578697374732c2070726f6365" + "6564696e67207769746820657363726f772066696e6973682e4f666665724f66666572206f" "626a656374206578697374732c2070726f63656564696e67207769746820657363726f7720" - "66696e6973682e414d4d414d4d206f626a656374206578697374732c2070726f6365656469" - "6e67207769746820657363726f772066696e6973682e436865636b436865636b206f626a65" - "6374206578697374732c2070726f63656564696e67207769746820657363726f772066696e" - "6973682e7465726d73616e64636f6e646974696f6e7343726564656e7469616c4372656465" - "6e7469616c206f626a656374206578697374732c2070726f63656564696e67207769746820" - "657363726f772066696e6973682e44656c656761746544656c6567617465206f626a656374" + "66696e6973682e5061794368616e6e656c5061794368616e6e656c206f626a656374206578" + "697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e50" + "65726d697373696f6e6564446f6d61696e5065726d697373696f6e6564446f6d61696e206f" + "626a656374206578697374732c2070726f63656564696e67207769746820657363726f7720" + "66696e6973682e5369676e65724c6973745369676e65724c697374206f626a656374206578" + "697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e54" + "69636b65745469636b6574206f626a656374206578697374732c2070726f63656564696e67" + "207769746820657363726f772066696e6973682e5661756c745661756c74206f626a656374" "206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973" - "682e4465706f736974507265617574684465706f73697450726561757468206f626a656374" - "206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973" - "682e444944444944206f626a656374206578697374732c2070726f63656564696e67207769" - "746820657363726f772066696e6973682e457363726f77457363726f77206f626a65637420" - "6578697374732c2070726f63656564696e67207769746820657363726f772066696e697368" - "2e4d505449737375616e63654d505449737375616e6365206f626a65637420657869737473" - "2c2070726f63656564696e67207769746820657363726f772066696e6973682e4d50546f6b" - "656e4d50546f6b656e206f626a656374206578697374732c2070726f63656564696e672077" - "69746820657363726f772066696e6973682e4e46546f6b656e4f666665724e46546f6b656e" - "4f66666572206f626a656374206578697374732c2070726f63656564696e67207769746820" - "657363726f772066696e6973682e4f666665724f66666572206f626a656374206578697374" - "732c2070726f63656564696e67207769746820657363726f772066696e6973682e50617943" - "68616e6e656c5061794368616e6e656c206f626a656374206578697374732c2070726f6365" - "6564696e67207769746820657363726f772066696e6973682e5065726d697373696f6e6564" - "446f6d61696e5065726d697373696f6e6564446f6d61696e206f626a656374206578697374" - "732c2070726f63656564696e67207769746820657363726f772066696e6973682e5369676e" - "65724c6973745369676e65724c697374206f626a656374206578697374732c2070726f6365" - "6564696e67207769746820657363726f772066696e6973682e5469636b65745469636b6574" - "206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f" - "772066696e6973682e5661756c745661756c74206f626a656374206578697374732c207072" - "6f63656564696e67207769746820657363726f772066696e6973682e43757272656e742073" - "65712076616c75653a456e636f756e7465726564206572726f725f636f64653a4279746520" - "61727261792077617320657870656374656420746f20686176652074686973206d616e7920" - "62797465733a2042797465206172726179206861642074686973206d616e79206279746573" - "3a20004d0970726f64756365727302086c616e6775616765010452757374000c70726f6365" - "737365642d6279010572757374631d312e38352e3120283465623136313235302032303235" - "2d30332d31352900490f7461726765745f6665617475726573042b0f6d757461626c652d67" - "6c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d75" - "6c746976616c7565"; + "682e43757272656e74207365712076616c75653a0041ad8ac0000b68456e636f756e746572" + "6564206572726f725f636f64653a4279746520617272617920776173206578706563746564" + "20746f20686176652074686973206d616e792062797465733a204279746520617272617920" + "6861642074686973206d616e792062797465733a20004d0970726f64756365727302086c61" + "6e6775616765010452757374000c70726f6365737365642d6279010572757374631d312e39" + "302e30202831313539653738633420323032352d30392d313429002c0f7461726765745f66" + "65617475726573022b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; extern std::string const codecovTestsWasmHex = "0061736d0100000001570b60047f7f7f7f017f60057f7f7f7f7f017f60027f7f017f60067f" @@ -9924,8 +9931,8 @@ extern std::string const codecovTestsWasmHex = "3b01382000200028005b36003b2000200029005f37003f200041386a41204100100b410141" "8881c0004110103e2003410036020020024200370300200042003703584181802020014114" "100c411441e48cc000411c103e200341003602002002420037030020004200370358410141" - "81802020014114100d411441808dc0004114103e02402001410020016b41037122036a2202" - "20014d0d0020030440200321050340200141003a0000200141016a2101200541016b22050d" + "81802020014114100d411441808dc0004114103e024020012001410020016b41037122036a" + "22024f0d0020030440200321050340200141003a0000200141016a2101200541016b22050d" "000b0b200341016b4107490d000340200141003a0000200141076a41003a0000200141066a" "41003a0000200141056a41003a0000200141046a41003a0000200141036a41003a00002001" "41026a41003a0000200141016a41003a0000200141086a22012002470d000b0b200241c400" @@ -10157,158 +10164,117 @@ extern std::string const codecovTestsWasmHex = "6f6e675f73697a655f6163636f756e7469646765745f6e66745f77726f6e675f73697a655f" "6163636f756e7469646d70746f6b656e5f6b65796c65745f6d707469645f77726f6e675f6c" "656e677468004d0970726f64756365727302086c616e6775616765010452757374000c7072" - "6f6365737365642d6279010572757374631d312e38352e3120283465623136313235302032" - "3032352d30332d31352900490f7461726765745f6665617475726573042b0f6d757461626c" - "652d676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b" - "0a6d756c746976616c7565"; + "6f6365737365642d6279010572757374631d312e39302e3020283131353965373863342032" + "3032352d30392d313429002c0f7461726765745f6665617475726573022b0f6d757461626c" + "652d676c6f62616c732b087369676e2d657874"; extern std::string const floatTestsWasmHex = - "0061736d0100000001430860057f7f7f7f7f017f60047e7f7f7f017f60047f7f7f7f017f60" - "057f7e7f7f7f017f60077f7f7f7f7f7f7f017f60067f7f7f7f7f7f017f60037f7f7e017f60" - "00017f02c9020e08686f73745f6c6962057472616365000008686f73745f6c69620e666c6f" - "61745f66726f6d5f696e74000108686f73745f6c69620f666c6f61745f66726f6d5f75696e" - "74000008686f73745f6c69621274726163655f6f70617175655f666c6f6174000208686f73" - "745f6c696209666c6f61745f736574000308686f73745f6c69620d666c6f61745f636f6d70" - "617265000208686f73745f6c696209666c6f61745f616464000408686f73745f6c69620e66" - "6c6f61745f7375627472616374000408686f73745f6c69620e666c6f61745f6d756c746970" - "6c79000408686f73745f6c69620c666c6f61745f646976696465000408686f73745f6c6962" - "09666c6f61745f706f77000508686f73745f6c69620974726163655f6e756d000608686f73" - "745f6c69620a666c6f61745f726f6f74000508686f73745f6c696209666c6f61745f6c6f67" - "00000302010705030100110619037f01418080c0000b7f0041b48ac0000b7f0041c08ac000" + "0061736d0100000001430860077f7f7f7f7f7f7f017f60057f7f7f7f7f017f60047f7f7f7f" + "017f60067f7f7f7f7f7f017f60047e7f7f7f017f60057f7e7f7f7f017f60037f7f7e017f60" + "00017f02c9020e08686f73745f6c6962057472616365000108686f73745f6c69620e666c6f" + "61745f66726f6d5f696e74000408686f73745f6c69621274726163655f6f70617175655f66" + "6c6f6174000208686f73745f6c69620f666c6f61745f66726f6d5f75696e74000108686f73" + "745f6c696209666c6f61745f736574000508686f73745f6c69620d666c6f61745f636f6d70" + "617265000208686f73745f6c696209666c6f61745f616464000008686f73745f6c69620e66" + "6c6f61745f7375627472616374000008686f73745f6c69620e666c6f61745f6d756c746970" + "6c79000008686f73745f6c69620c666c6f61745f646976696465000008686f73745f6c6962" + "09666c6f61745f706f77000308686f73745f6c69620974726163655f6e756d000608686f73" + "745f6c69620a666c6f61745f726f6f74000308686f73745f6c696209666c6f61745f6c6f67" + "00010302010705030100110619037f01418080c0000b7f0041d28ac0000b7f0041e08ac000" "0b072e04066d656d6f727902000666696e697368000e0a5f5f646174615f656e6403010b5f" - "5f686561705f6261736503020acf1301cc1301027f23808080800041206b22002480808080" - "00418080c08000411d4100410041001080808080001a2000420037031002400240428ce000" - "200041106a410841001081808080004108470d00419d80c080004117200041106a41084101" - "1080808080001a0c010b41b480c08000411e4100410041001080808080001a0b2000428ce0" - "0037031802400240200041186a4108200041106a410841001082808080004108470d0041d2" - "80c080004117200041106a41081083808080001a0c010b41e980c08000411e410041004100" - "1080808080001a0b02400240410242fb00200041106a410841001084808080004108470d00" - "418781c080004121200041106a41081083808080001a0c010b41a881c08000412641004100" - "41001080808080001a0b41ce81c08000411541e381c0800041081083808080001a41f381c0" - "8000411641eb81c0800041081083808080001a418982c08000411b41004100410010808080" - "80001a20004200370318024002404201200041186a410841001081808080004108470d0041" - "a482c08000410f200041186a41081083808080001a0c010b41b382c0800041164100410041" - "001080808080001a0b02400240200041186a410841e381c0800041081085808080000d0041" - "c982c08000411b4100410041001080808080001a0c010b41e482c08000411b410041004100" - "1080808080001a0b02400240200041186a410841eb81c0800041081085808080004101470d" - "0041ff82c0800041234100410041001080808080001a0c010b41a283c08000412441004100" - "41001080808080001a0b0240024041eb81c080004108200041186a41081085808080004102" - "470d0041c683c0800041234100410041001080808080001a0c010b41e983c0800041244100" - "410041001080808080001a0b418d84c0800041204100410041001080808080001a200042d4" - "87b6f4c7d4b1c000370310410921010340200041106a410841e381c080004108200041106a" - "410841001086808080001a2001417f6a22010d000b20004200370318420a200041186a4108" - "41001081808080001a02400240200041186a4108200041106a41081085808080000d0041ad" - "84c0800041144100410041001080808080001a0c010b41c184c08000411341004100410010" - "80808080001a0b410b21010340200041106a410841e381c080004108200041106a41084100" - "1087808080001a2001417f6a22010d000b02400240200041106a410841eb81c08000410810" - "85808080000d0041d484c0800041194100410041001080808080001a0c010b41ed84c08000" - "41184100410041001080808080001a0b418585c0800041234100410041001080808080001a" - "20004200370300420a2000410841001081808080001a200042d487b6f4c7d4b1c000370308" - "410621010340200041086a410820004108200041086a410841001088808080001a2001417f" - "6a22010d000b2000420037031042c0843d200041106a410841001081808080001a02400240" - "200041106a4108200041086a41081085808080000d0041a885c08000411941004100410010" - "80808080001a0c010b41c185c0800041184100410041001080808080001a0b410721010340" - "200041086a410820004108200041086a410841001089808080001a2001417f6a22010d000b" - "20004200370318417f4201200041186a410841001084808080001a02400240200041086a41" - "08200041186a41081085808080000d0041d985c0800041174100410041001080808080001a" - "0c010b41f085c0800041164100410041001080808080001a0b418686c08000411741004100" - "41001080808080001a2000420037030841e381c0800041084103200041086a41084100108a" - "808080001a419d86c080004112200041086a41081083808080001a41eb81c0800041084106" - "200041086a41084100108a808080001a41af86c080004118200041086a4108108380808000" - "1a200042003703104209200041106a410841001081808080001a200041106a410841022000" - "41086a41084100108a808080001a41c786c080004114200041086a41081083808080001a20" - "0041106a41084100200041086a41084100108a808080001a41db86c080004117200041086a" - "41081083808080001a200042003703184200200041186a410841001081808080001a200041" - "186a41084102200041086a41084100108a808080001a41f286c080004114200041086a4108" - "1083808080001a418687c080004138200041186a41084100200041086a41084100108a8080" - "8000ac108b808080001a41be87c0800041184100410041001080808080001a200042003703" - "084209200041086a410841001081808080001a20004200370310200041086a410841022000" - "41106a41084100108c808080001a41d687c080004112200041106a41081083808080001a20" - "0041086a41084103200041106a41084100108c808080001a41e887c080004112200041106a" - "41081083808080001a2000420037031842c0843d200041186a410841001081808080001a20" - "0041186a41084103200041106a41084100108c808080001a41fa87c080004118200041106a" - "41081083808080001a200041186a41084106200041106a41084100108c808080001a419288" - "c08000411c200041106a41081083808080001a41ae88c08000411741004100410010808080" - "80001a2000420037031042c0843d200041106a410841001081808080001a20004200370318" - "200041106a4108200041186a41084100108d808080001a41c588c080004114200041186a41" - "081083808080001a41d988c08000411a4100410041001080808080001a2000420037031841" - "e381c08000410841eb81c080004108200041186a410841001088808080001a0240024041eb" - "81c080004108200041186a41081085808080000d0041f388c0800041164100410041001080" - "808080001a0c010b418989c0800041154100410041001080808080001a0b41eb81c0800041" - "0841eb81c080004108200041186a410841001088808080001a0240024041e381c080004108" - "200041186a41081085808080000d00419e89c0800041174100410041001080808080001a0c" - "010b41b589c0800041164100410041001080808080001a0b41cb89c08000411a4100410041" - "001080808080001a2000420037031020004200370318420a200041186a4108410010818080" - "80001a41e381c080004108200041186a4108200041106a410841001089808080001a41e589" - "c080004119200041106a41081083808080001a41e381c080004108200041106a4108200041" - "106a410841001089808080001a41fe89c08000410f200041106a41081083808080001a0240" - "0240200041186a4108200041106a41081085808080000d00418d8ac0800041144100410041" - "001080808080001a0c010b41a18ac0800041134100410041001080808080001a0b20004120" - "6a24808080800041010b0bbe0a0100418080c0000bb40a0a24242420746573745f666c6f61" - "745f66726f6d5f7761736d202424242020666c6f61742066726f6d20693634203132333030" - "3a2020666c6f61742066726f6d206936342031323330303a206661696c65642020666c6f61" - "742066726f6d207536342031323330303a2020666c6f61742066726f6d2075363420313233" - "30303a206661696c65642020666c6f61742066726f6d2065787020322c206d616e74697373" - "61203132333a2020666c6f61742066726f6d2065787020322c206d616e746973736120333a" - "206661696c65642020666c6f61742066726f6d20636f6e737420313ad4838d7ea4c6800094" - "838d7ea4c680002020666c6f61742066726f6d20636f6e7374202d313a0a24242420746573" - "745f666c6f61745f636f6d70617265202424242020666c6f61742066726f6d20313a202066" - "6c6f61742066726f6d20313a206661696c65642020666c6f61742066726f6d2031203d3d20" - "464c4f41545f4f4e452020666c6f61742066726f6d203120213d20464c4f41545f4f4e4520" - "20666c6f61742066726f6d2031203e20464c4f41545f4e454741544956455f4f4e45202066" - "6c6f61742066726f6d203120213e20464c4f41545f4e454741544956455f4f4e452020464c" - "4f41545f4e454741544956455f4f4e45203c20666c6f61742066726f6d20312020464c4f41" - "545f4e454741544956455f4f4e4520213c20666c6f61742066726f6d20310a242424207465" - "73745f666c6f61745f6164645f737562747261637420242424202072657065617465642061" - "64643a20676f6f6420207265706561746564206164643a2062616420207265706561746564" - "2073756274726163743a20676f6f64202072657065617465642073756274726163743a2062" - "61640a24242420746573745f666c6f61745f6d756c7469706c795f64697669646520242424" - "20207265706561746564206d756c7469706c793a20676f6f6420207265706561746564206d" - "756c7469706c793a2062616420207265706561746564206469766964653a20676f6f642020" - "7265706561746564206469766964653a206261640a24242420746573745f666c6f61745f70" - "6f77202424242020666c6f61742063756265206f6620313a2020666c6f6174203674682070" - "6f776572206f66202d313a2020666c6f617420737175617265206f6620393a2020666c6f61" - "742030746820706f776572206f6620393a2020666c6f617420737175617265206f6620303a" - "2020666c6f61742030746820706f776572206f6620302028657870656374696e6720494e56" - "414c49445f504152414d53206572726f72293a0a24242420746573745f666c6f61745f726f" - "6f74202424242020666c6f61742073717274206f6620393a2020666c6f6174206362727420" - "6f6620393a2020666c6f61742063627274206f6620313030303030303a2020666c6f617420" - "36746820726f6f74206f6620313030303030303a0a24242420746573745f666c6f61745f6c" - "6f672024242420206c6f675f3130206f6620313030303030303a0a24242420746573745f66" - "6c6f61745f6e65676174652024242420206e656761746520636f6e737420313a20676f6f64" - "20206e656761746520636f6e737420313a2062616420206e656761746520636f6e7374202d" - "313a20676f6f6420206e656761746520636f6e7374202d313a206261640a24242420746573" - "745f666c6f61745f696e76657274202424242020696e76657274206120666c6f6174206672" - "6f6d2031303a2020696e7665727420616761696e3a2020696e766572742074776963653a20" - "676f6f642020696e766572742074776963653a20626164009c06046e616d65001110666c6f" - "61745f74657374732e7761736d01e1050f002b5f5a4e387872706c5f73746434686f737435" - "7472616365313768303332393563316538663365373233614501355f5a4e387872706c5f73" - "746434686f73743134666c6f61745f66726f6d5f696e743137683032306436373439326164" - "39346333304502365f5a4e387872706c5f73746434686f73743135666c6f61745f66726f6d" - "5f75696e74313768346166373638366538353062383432364503395f5a4e387872706c5f73" - "746434686f7374313874726163655f6f70617175655f666c6f617431376831396639386666" - "35663362313932336245042f5f5a4e387872706c5f73746434686f737439666c6f61745f73" - "6574313768323964346230383964626561326664624505345f5a4e387872706c5f73746434" - "686f73743133666c6f61745f636f6d70617265313768346362313239626634623330373233" - "6445062f5f5a4e387872706c5f73746434686f737439666c6f61745f616464313768383661" - "336165636435336234643937374507355f5a4e387872706c5f73746434686f73743134666c" - "6f61745f7375627472616374313768653033313036323931393464333931364508355f5a4e" - "387872706c5f73746434686f73743134666c6f61745f6d756c7469706c7931376830323839" - "3337633039656534323630644509335f5a4e387872706c5f73746434686f73743132666c6f" - "61745f64697669646531376834363036323038303562623237353632450a2f5f5a4e387872" - "706c5f73746434686f737439666c6f61745f706f7731376833326463303662646430303338" - "626331450b2f5f5a4e387872706c5f73746434686f73743974726163655f6e756d31376830" - "336535336633646539393463633033450c315f5a4e387872706c5f73746434686f73743130" - "666c6f61745f726f6f7431376863656632313139376565656136653630450d2f5f5a4e3878" - "72706c5f73746434686f737439666c6f61745f6c6f67313768323530663038303633353663" - "35653639450e0666696e697368071201000f5f5f737461636b5f706f696e746572090a0100" - "072e726f64617461004d0970726f64756365727302086c616e677561676501045275737400" - "0c70726f6365737365642d6279010572757374631d312e38382e3020283662303062633338" - "3820323032352d30362d3233290094010f7461726765745f6665617475726573082b0b6275" - "6c6b2d6d656d6f72792b0f62756c6b2d6d656d6f72792d6f70742b1663616c6c2d696e6469" - "726563742d6f7665726c6f6e672b0a6d756c746976616c75652b0f6d757461626c652d676c" - "6f62616c732b136e6f6e7472617070696e672d6670746f696e742b0f7265666572656e6365" - "2d74797065732b087369676e2d657874"; + "5f686561705f6261736503020af20e01ef0e01047f230041206b22012400418080c000411d" + "41004100410010001a200142003703100240428ce000200141106a22004108410010014108" + "460440419d80c00041172000410810021a41b480c000411e20004108410110001a0c010b41" + "d280c000411e41004100410010001a0b2001428ce0003703180240200141186a4108200141" + "106a2200410841001003410846044041f080c00041172000410810021a0c010b418781c000" + "411e41004100410010001a0b0240410242fb00200141106a22004108410010044108460440" + "41a581c00041212000410810021a0c010b41c681c000412641004100410010001a0b41ec81" + "c0004115418182c000410810021a419182c0004116418982c000410810021a41a782c00041" + "1b41004100410010001a2001420037031802404201200141186a2200410841001001410846" + "044041c282c000410f2000410810021a0c010b41d182c000411641004100410010001a0b02" + "40200141186a4108418182c0004108100545044041e782c000411b41004100410010001a0c" + "010b418283c000411b41004100410010001a0b0240200141186a4108418982c00041081005" + "4101460440419d83c000412341004100410010001a0c010b41c083c0004124410041004100" + "10001a0b0240418982c0004108200141186a41081005410246044041e483c0004123410041" + "00410010001a0c010b418784c000412441004100410010001a0b41ab84c000412041004100" + "410010001a200142d487b6f4c7d4b1c000370310410921000340200141106a220241084181" + "82c000410820024108410010061a200041016b22000d000b20014200370318420a20014118" + "6a22004108410010011a02402000410820024108100545044041cb84c00041144100410041" + "0010001a0c010b41df84c000411341004100410010001a0b410b21000340200141106a2202" + "4108418182c000410820024108410010071a200041016b22000d000b024020024108418982" + "c0004108100545044041f284c000411941004100410010001a0c010b418b85c00041184100" + "4100410010001a0b41a385c000412341004100410010001a20014200370300420a20014108" + "410010011a200142d487b6f4c7d4b1c000370308410621000340200141086a220241082001" + "410820024108410010081a200041016b22000d000b2001420037031042c0843d200141106a" + "22004108410010011a02402000410820024108100545044041c685c0004119410041004100" + "10001a0c010b41df85c000411841004100410010001a0b410721000340200141086a220241" + "082001410820024108410010091a200041016b22000d000b20014200370318417f42012001" + "41186a22004108410010041a02402002410820004108100545044041f785c0004117410041" + "00410010001a0c010b418e86c000411641004100410010001a0b41a486c000411741004100" + "410010001a20014200370308418182c00041084103200141086a220041084100100a1a41bb" + "86c00041122000410810021a418982c00041084106200041084100100a1a41cd86c0004118" + "2000410810021a200142003703104209200141106a22024108410010011a20024108410220" + "0041084100100a1a41e586c00041142000410810021a200241084100200041084100100a1a" + "41f986c00041172000410810021a200142003703184200200141186a22034108410010011a" + "200341084102200041084100100a1a419087c00041142000410810021a41a487c000413820" + "0341084100200041084100100aac100b1a41dc87c000411841004100410010001a20014200" + "370308420920004108410010011a20014200370310200041084102200241084100100c1a41" + "f487c00041122002410810021a200041084103200241084100100c1a418688c00041122002" + "410810021a2001420037031842c0843d20034108410010011a200341084103200241084100" + "100c1a419888c00041182002410810021a200341084106200241084100100c1a41b088c000" + "411c2002410810021a41cc88c000411741004100410010001a2001420037031042c0843d20" + "024108410010011a2001420037031820024108200341084100100d1a41e388c00041142003" + "410810021a41f788c000411a41004100410010001a20014200370318418182c00041084189" + "82c000410820034108410010081a0240418982c0004108200341081005450440419189c000" + "411641004100410010001a0c010b41a789c000411541004100410010001a0b418982c00041" + "08418982c0004108200141186a22004108410010081a0240418182c0004108200041081005" + "45044041bc89c000411741004100410010001a0c010b41d389c00041164100410041001000" + "1a0b41e989c000411a41004100410010001a2001420037031020014200370318420a200141" + "186a22024108410010011a418182c000410820024108200141106a22004108410010091a41" + "838ac00041192000410810021a418182c00041082000410820004108410010091a419c8ac0" + "00410f2000410810021a02402002410820004108100545044041ab8ac00041144100410041" + "0010001a0c010b41bf8ac000411341004100410010001a0b200141206a240041010b0bdc0a" + "0100418080c0000bd20a0a24242420746573745f666c6f61745f66726f6d5f7761736d2024" + "24242020666c6f61742066726f6d206936342031323330303a2020666c6f61742066726f6d" + "20693634203132333030206173204845583a2020666c6f61742066726f6d20693634203132" + "3330303a206661696c65642020666c6f61742066726f6d207536342031323330303a202066" + "6c6f61742066726f6d207536342031323330303a206661696c65642020666c6f6174206672" + "6f6d2065787020322c206d616e7469737361203132333a2020666c6f61742066726f6d2065" + "787020322c206d616e746973736120333a206661696c65642020666c6f61742066726f6d20" + "636f6e737420313ad4838d7ea4c6800094838d7ea4c680002020666c6f61742066726f6d20" + "636f6e7374202d313a0a24242420746573745f666c6f61745f636f6d706172652024242420" + "20666c6f61742066726f6d20313a2020666c6f61742066726f6d20313a206661696c656420" + "20666c6f61742066726f6d2031203d3d20464c4f41545f4f4e452020666c6f61742066726f" + "6d203120213d20464c4f41545f4f4e452020666c6f61742066726f6d2031203e20464c4f41" + "545f4e454741544956455f4f4e452020666c6f61742066726f6d203120213e20464c4f4154" + "5f4e454741544956455f4f4e452020464c4f41545f4e454741544956455f4f4e45203c2066" + "6c6f61742066726f6d20312020464c4f41545f4e454741544956455f4f4e4520213c20666c" + "6f61742066726f6d20310a24242420746573745f666c6f61745f6164645f73756274726163" + "742024242420207265706561746564206164643a20676f6f64202072657065617465642061" + "64643a20626164202072657065617465642073756274726163743a20676f6f642020726570" + "65617465642073756274726163743a206261640a24242420746573745f666c6f61745f6d75" + "6c7469706c795f6469766964652024242420207265706561746564206d756c7469706c793a" + "20676f6f6420207265706561746564206d756c7469706c793a206261642020726570656174" + "6564206469766964653a20676f6f6420207265706561746564206469766964653a20626164" + "0a24242420746573745f666c6f61745f706f77202424242020666c6f61742063756265206f" + "6620313a2020666c6f61742036746820706f776572206f66202d313a2020666c6f61742073" + "7175617265206f6620393a2020666c6f61742030746820706f776572206f6620393a202066" + "6c6f617420737175617265206f6620303a2020666c6f61742030746820706f776572206f66" + "20302028657870656374696e6720494e56414c49445f504152414d53206572726f72293a0a" + "24242420746573745f666c6f61745f726f6f74202424242020666c6f61742073717274206f" + "6620393a2020666c6f61742063627274206f6620393a2020666c6f61742063627274206f66" + "20313030303030303a2020666c6f61742036746820726f6f74206f6620313030303030303a" + "0a24242420746573745f666c6f61745f6c6f672024242420206c6f675f3130206f66203130" + "30303030303a0a24242420746573745f666c6f61745f6e65676174652024242420206e6567" + "61746520636f6e737420313a20676f6f6420206e656761746520636f6e737420313a206261" + "6420206e656761746520636f6e7374202d313a20676f6f6420206e656761746520636f6e73" + "74202d313a206261640a24242420746573745f666c6f61745f696e76657274202424242020" + "696e76657274206120666c6f61742066726f6d2031303a2020696e7665727420616761696e" + "3a2020696e766572742074776963653a20676f6f642020696e766572742074776963653a20" + "626164004d0970726f64756365727302086c616e6775616765010452757374000c70726f63" + "65737365642d6279010572757374631d312e39302e30202831313539653738633420323032" + "352d30392d313429002c0f7461726765745f6665617475726573022b0f6d757461626c652d" + "676c6f62616c732b087369676e2d657874"; extern std::string const float0Hex = "0061736d0100000001290560057f7f7f7f7f017f60047e7f7f7f017f6007" From da2b9455f21ef63be22394d02fbe2587dbaaebe4 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 6 Oct 2025 16:38:40 -0400 Subject: [PATCH 019/137] fix: remove `get_ledger_account_hash` and `get_ledger_tx_hash` host functions (#5850) * remove `get_ledger_account_hash` and `get_ledger_tx_hash` * fix build+tests --- src/test/app/HostFuncImpl_test.cpp | 44 +- src/test/app/TestHostFunctions.h | 24 - src/test/app/Wasm_test.cpp | 2 +- .../wasm_fixtures/codecov_tests/Cargo.lock | 6 +- .../wasm_fixtures/codecov_tests/Cargo.toml | 2 +- .../wasm_fixtures/codecov_tests/src/lib.rs | 14 - src/test/app/wasm_fixtures/fixtures.cpp | 604 +++++++++--------- src/xrpld/app/wasm/HostFunc.h | 12 - src/xrpld/app/wasm/HostFuncImpl.h | 6 - src/xrpld/app/wasm/HostFuncWrapper.h | 14 - src/xrpld/app/wasm/detail/HostFuncImpl.cpp | 12 - src/xrpld/app/wasm/detail/HostFuncWrapper.cpp | 28 - src/xrpld/app/wasm/detail/WasmVM.cpp | 2 - 13 files changed, 306 insertions(+), 464 deletions(-) diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 60578c849e..8dd83fc74a 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -169,44 +169,6 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(result.value() == env.current()->info().parentHash); } - void - testGetLedgerAccountHash() - { - testcase("getLedgerAccountHash"); - using namespace test::jtx; - - Env env{*this}; - OpenView ov{*env.current()}; - ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); - - WasmHostFunctionsImpl hfs(ac, dummyEscrow); - - auto const result = hfs.getLedgerAccountHash(); - if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT(result.value() == env.current()->info().accountHash); - } - - void - testGetLedgerTransactionHash() - { - testcase("getLedgerTransactionHash"); - using namespace test::jtx; - - Env env{*this}; - OpenView ov{*env.current()}; - ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); - - WasmHostFunctionsImpl hfs(ac, dummyEscrow); - - auto const result = hfs.getLedgerTransactionHash(); - if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT(result.value() == env.current()->info().txHash); - } - void testGetBaseFee() { @@ -2899,7 +2861,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite void testFloatNonIOU() { - testcase("Float Xrp+Mpt"); + testcase("float Xrp+Mpt"); using namespace test::jtx; Env env{*this}; @@ -2961,6 +2923,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite void testFloats() { + testFloatTrace(); testFloatFromInt(); testFloatFromUint(); testFloatSet(); @@ -2973,7 +2936,6 @@ struct HostFuncImpl_test : public beast::unit_test::suite testFloatPower(); testFloatLog(); testFloatNonIOU(); - testFloatTrace(); } void @@ -2982,8 +2944,6 @@ struct HostFuncImpl_test : public beast::unit_test::suite testGetLedgerSqn(); testGetParentLedgerTime(); testGetParentLedgerHash(); - testGetLedgerAccountHash(); - testGetLedgerTransactionHash(); testGetBaseFee(); testIsAmendmentEnabled(); testCacheLedgerObj(); diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index 6973a107fe..11d613bc8d 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -113,18 +113,6 @@ public: return env_.current()->info().parentHash; } - Expected - getLedgerAccountHash() override - { - return env_.current()->info().accountHash; - } - - Expected - getLedgerTransactionHash() override - { - return env_.current()->info().txHash; - } - Expected getBaseFee() override { @@ -649,18 +637,6 @@ struct PerfHostFunctions : public TestHostFunctions return env_.current()->info().parentHash; } - Expected - getLedgerAccountHash() override - { - return env_.current()->info().accountHash; - } - - Expected - getLedgerTransactionHash() override - { - return env_.current()->info().txHash; - } - Expected getBaseFee() override { diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 2b1259365a..00909bcbe3 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -648,7 +648,7 @@ struct Wasm_test : public beast::unit_test::suite Bytes const wasm(wasmStr.begin(), wasmStr.end()); TestHostFunctions hfs(env, 0); - auto const allowance = 153'296; + auto const allowance = 152'154; auto re = runEscrowWasm( wasm, ESCROW_FUNCTION_NAME, {}, &hfs, allowance, env.journal); diff --git a/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock b/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock index 28d4d65630..000ecf39a8 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock +++ b/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock @@ -6,10 +6,10 @@ version = 4 name = "codecov_tests" version = "0.0.1" dependencies = [ - "xrpl-std", + "xrpl-wasm-std", ] [[package]] -name = "xrpl-std" +name = "xrpl-wasm-std" version = "0.5.1-devnet5" -source = "git+https://github.com/ripple/craft.git?branch=lastdevnet#6b20669b20561b9d0f09678f44ccbddb84ef9f47" +source = "git+https://github.com/ripple/craft.git?branch=main#638276c92d790f5b738faa9f42855f02a2c7c7dc" diff --git a/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml b/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml index c9b4c53490..ea776999a9 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml +++ b/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml @@ -15,4 +15,4 @@ opt-level = 's' panic = "abort" [dependencies] -xrpl-std = { git = "https://github.com/ripple/craft.git", branch = "lastdevnet", package = "xrpl-std" } +xrpl-std = { git = "https://github.com/ripple/craft.git", branch = "main", package = "xrpl-wasm-std" } diff --git a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs index 0e755ebb75..f02550ba96 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs +++ b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs @@ -68,20 +68,6 @@ pub extern "C" fn finish() -> i32 { "get_parent_ledger_hash", ); }); - with_buffer::<32, _, _>(|ptr, len| { - check_result( - unsafe { host::get_ledger_account_hash(ptr, len) }, - 32, - "get_ledger_account_hash", - ); - }); - with_buffer::<32, _, _>(|ptr, len| { - check_result( - unsafe { host::get_ledger_tx_hash(ptr, len) }, - 32, - "get_ledger_tx_hash", - ); - }); check_result(unsafe { host::get_base_fee() }, 10, "get_base_fee"); let amendment_name: &[u8] = b"test_amendment"; let amendment_id: [u8; 32] = [1; 32]; diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 6ad3e33639..ea46b49d39 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -9859,314 +9859,308 @@ extern std::string const allKeyletsWasmHex = extern std::string const codecovTestsWasmHex = "0061736d0100000001570b60047f7f7f7f017f60057f7f7f7f7f017f60027f7f017f60067f" "7f7f7f7f7f017f60077f7f7f7f7f7f7f017f6000017f60037f7f7f017f60017f017f60087f" - "7f7f7f7f7f7f7f017f60037f7f7e017f60047f7f7f7f0002da0d3e08686f73745f6c696205" + "7f7f7f7f7f7f7f017f60037f7f7e017f60047f7f7f7f0002990d3c08686f73745f6c696205" "7472616365000108686f73745f6c69620974726163655f6e756d000908686f73745f6c6962" "0e6765745f6c65646765725f73716e000508686f73745f6c6962166765745f706172656e74" "5f6c65646765725f74696d65000508686f73745f6c6962166765745f706172656e745f6c65" - "646765725f68617368000208686f73745f6c6962176765745f6c65646765725f6163636f75" - "6e745f68617368000208686f73745f6c6962126765745f6c65646765725f74785f68617368" - "000208686f73745f6c69620c6765745f626173655f666565000508686f73745f6c69621161" - "6d656e646d656e745f656e61626c6564000208686f73745f6c69620c6765745f74785f6669" - "656c64000608686f73745f6c69620e6163636f756e745f6b65796c6574000008686f73745f" - "6c69621063616368655f6c65646765725f6f626a000608686f73745f6c69621c6765745f63" - "757272656e745f6c65646765725f6f626a5f6669656c64000608686f73745f6c6962146765" - "745f6c65646765725f6f626a5f6669656c64000008686f73745f6c6962136765745f74785f" - "6e65737465645f6669656c64000008686f73745f6c6962236765745f63757272656e745f6c" - "65646765725f6f626a5f6e65737465645f6669656c64000008686f73745f6c69621b676574" - "5f6c65646765725f6f626a5f6e65737465645f6669656c64000108686f73745f6c69621067" - "65745f74785f61727261795f6c656e000708686f73745f6c6962206765745f63757272656e" - "745f6c65646765725f6f626a5f61727261795f6c656e000708686f73745f6c696218676574" - "5f6c65646765725f6f626a5f61727261795f6c656e000208686f73745f6c6962176765745f" - "74785f6e65737465645f61727261795f6c656e000208686f73745f6c6962276765745f6375" - "7272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e00020868" - "6f73745f6c69621f6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c" - "656e000608686f73745f6c69620b7570646174655f64617461000208686f73745f6c696213" - "636f6d707574655f7368613531325f68616c66000008686f73745f6c696209636865636b5f" - "736967000308686f73745f6c6962076765745f6e6674000308686f73745f6c69620e676574" - "5f6e66745f697373756572000008686f73745f6c69620d6765745f6e66745f7461786f6e00" - "0008686f73745f6c69620d6765745f6e66745f666c616773000208686f73745f6c69621467" - "65745f6e66745f7472616e736665725f666565000208686f73745f6c69620e6765745f6e66" - "745f73657269616c000008686f73745f6c69620d74726163655f6163636f756e7400000868" - "6f73745f6c69620c74726163655f616d6f756e74000008686f73745f6c69620f666c6f6174" - "5f66726f6d5f75696e74000108686f73745f6c69620b6c696e655f6b65796c657400080868" - "6f73745f6c69620a616d6d5f6b65796c6574000308686f73745f6c69621163726564656e74" - "69616c5f6b65796c6574000808686f73745f6c69620e6d70746f6b656e5f6b65796c657400" - "0308686f73745f6c69621274726163655f6f70617175655f666c6f6174000008686f73745f" - "6c69620d666c6f61745f636f6d70617265000008686f73745f6c696209666c6f61745f6164" - "64000408686f73745f6c69620e666c6f61745f7375627472616374000408686f73745f6c69" - "620e666c6f61745f6d756c7469706c79000408686f73745f6c69620c666c6f61745f646976" - "696465000408686f73745f6c69620a666c6f61745f726f6f74000308686f73745f6c696209" - "666c6f61745f706f77000308686f73745f6c696209666c6f61745f6c6f67000108686f7374" - "5f6c69620c636865636b5f6b65796c6574000108686f73745f6c69620f64656c6567617465" - "5f6b65796c6574000308686f73745f6c6962166465706f7369745f707265617574685f6b65" - "796c6574000308686f73745f6c69620a6469645f6b65796c6574000008686f73745f6c6962" - "0d657363726f775f6b65796c6574000108686f73745f6c6962136d70745f69737375616e63" - "655f6b65796c6574000108686f73745f6c6962106e66745f6f666665725f6b65796c657400" - "0108686f73745f6c69620c6f666665725f6b65796c6574000108686f73745f6c69620d6f72" - "61636c655f6b65796c6574000108686f73745f6c69620e7061796368616e5f6b65796c6574" - "000408686f73745f6c69621a7065726d697373696f6e65645f646f6d61696e5f6b65796c65" - "74000108686f73745f6c69620e7369676e6572735f6b65796c6574000008686f73745f6c69" - "620d7469636b65745f6b65796c6574000108686f73745f6c69620c7661756c745f6b65796c" - "657400010303020a0505030100110619037f01418080c0000b7f00419f9ec0000b7f0041a0" - "9ec0000b072e04066d656d6f727902000666696e697368003f0a5f5f646174615f656e6403" - "010b5f5f686561705f6261736503020ab02b02460002402000200147044020022003410041" - "00410010001a20004100480d01418b80c000410b2000ad1001000b200220032000ac10011a" - "0f0b418b80c000410b2000ac1001000be62a02087f027e230041f0016b22002400419680c0" - "00412341004100410010001a100241b9e00041b980c000410e103e100341b2920441c780c0" - "004116103e200041f0006a22054200370300200041e8006a22034200370300200041e0006a" - "2202420037030020004200370358200041d8006a220141201004412041a58cc0004116103e" - "20054200370300200342003703002002420037030020004200370358200141201005412041" - "bb8cc0004117103e2005420037030020034200370300200242003703002000420037035820" - "0141201006412041d28cc0004112103e1007410a41dd80c000410c103e200041186a428182" - "848890a0c08001370300200041106a428182848890a0c08001370300200041086a42818284" - "8890a0c080013703002000428182848890a0c0800137030041e980c000410e1008410141f7" - "80c0004111103e200041201008410141f780c0004111103e20034100360200200242003703" - "002000420037035802404181802020014114100922044114460440200041266a20002d005a" - "3a00002000200029005f3703c8012000200041e4006a2900003700cd01200041306a200029" - "00cd01370000200020002f01583b01242000200028005b360027200020002903c80137002b" - "20054200370300200342003703002002420037030020004200370358200041246a41142001" - "4120100a22054120470d012000413a6a20002d005a3a0000200041d0016a200041e7006a29" - "00002208370300200041d8016a200041ef006a2900002209370300200041c7006a20083700" - "00200041cf006a2009370000200041d7006a200041f7006a2d00003a0000200020002f0158" - "3b01382000200028005b36003b2000200029005f37003f200041386a41204100100b410141" - "8881c0004110103e2003410036020020024200370300200042003703584181802020014114" - "100c411441e48cc000411c103e200341003602002002420037030020004200370358410141" - "81802020014114100d411441808dc0004114103e024020012001410020016b41037122036a" - "22024f0d0020030440200321050340200141003a0000200141016a2101200541016b22050d" - "000b0b200341016b4107490d000340200141003a0000200141076a41003a0000200141066a" - "41003a0000200141056a41003a0000200141046a41003a0000200141036a41003a00002001" - "41026a41003a0000200141016a41003a0000200141086a22012002470d000b0b200241c400" - "20036b2203417c716a220120024b0440034020024100360200200241046a22022001490d00" - "0b0b024020012003410371220320016a22054f0d002003220204400340200141003a000020" - "0141016a2101200241016b22020d000b0b200341016b4107490d000340200141003a000020" - "0141076a41003a0000200141066a41003a0000200141056a41003a0000200141046a41003a" - "0000200141036a41003a0000200141026a41003a0000200141016a41003a0000200141086a" - "22012005470d000b0b2000418180203602c801410021010340200641c000490440200041d8" - "006a20066a200041c8016a20016a2d00003a0000200020002802980141016a220636029801" - "200141016a22014104470d010b0b200041d8016a22024100360200200041d0016a22044200" - "370300200042003703c801200041d8006a22012006200041c8016a22054114100e41144194" - "8dc0004113103e2002410036020020044200370300200042003703c8012001200028029801" - "20054114100f411441a78dc0004123103e2002410036020020044200370300200042003703" - "c80141012001200028029801200541141010411441ca8dc000411b103e4189803c10114120" - "419881c0004110103e4189803c1012412041a881c0004120103e41014189803c1013412041" - "c881c0004118103e20012000280298011014412041e081c0004117103e2001200028029801" - "1015412041f781c0004127103e4101200120002802980110164120419e82c000411f103e20" - "0041246a220341141017410041bd82c000410b103e200041e0016a22064200370300200242" - "0037030020044200370300200042003703c8012001200028029801200541201018412041e5" - "8dc0004113103e41c882c000410c41d482c000410b41df82c000410e1019410141ed82c000" - "4109103e200041b8016a200041186a290300370300200041b0016a200041106a2903003703" - "00200041a8016a200041086a290300370300200020002903003703a001200241003b010020" - "044200370300200042003703c80120034114200041a0016a2207412020054112101a411241" - "f88dc0004107103e2002410036020020044200370300200042003703c80120074120200541" - "14101b411441ff8dc000410e103e200041003602c8012007412020054104101c4104418d8e" - "c000410d103e20074120101d410841f682c000410d103e20074120101e410a418383c00041" - "14103e200041003602c8012007412020054104101f4104419a8ec000410e103e419783c000" - "410d200341141020412f41a483c000410d103e419783c000410d41b183c000410810214113" - "41b983c000410c103e417f41041004417141c583c000411e103e200041003602c801200541" - "7f1004417141a88ec000411e103e200041ca016a41003a0000200041003b01c80120054103" - "1004417d41c68ec0004124103e200041003602c8012005418094ebdc031004417341ea8ec0" - "004123103e419783c000410d200341141020412f41a483c000410d103e419783c000410d41" - "b183c00041081021411341b983c000410c103e200642003703002002420037030020044200" - "370300200042003703c801200041d894ebdc036a2207410820054120410010224173418d8f" - "c0004117103e200642003703002002420037030020044200370300200042003703c8012001" - "2000280298012005412041001022417141a48fc0004119103e41021011416f41e383c00041" - "1f103e417f20002802980110144171418284c000411f103e2001417f1014417141a184c000" - "411f103e20014181201014417441c084c0004120103e20072000280298011014417341e084" - "c000411f103e20072000280298014101100b417341ff84c0004118103e2001200028029801" - "4101100b4171419785c000411a103e20064200370300200242003703002004420037030020" - "0042003703c801200720002802980120054120100a417341bd8fc0004116103e2006420037" - "03002002420037030020044200370300200042003703c80120012000280298012005412010" - "0a417141d38fc0004118103e20064200370300200242003703002004420037030020004200" - "3703c80120034114200341142007200028029801200541201023417341eb8fc000411c103e" - "200642003703002002420037030020044200370300200042003703c8012003411420034114" - "20012000280298012005412010234171418790c000411e103e200642003703002002420037" - "030020044200370300200042003703c801418b9ec000411420072000280298012005412010" - "24417341a590c0004119103e20064200370300200242003703002004420037030020004200" - "3703c801418b9ec00041142001200028029801200541201024417141be90c000411f103e20" - "0642003703002002420037030020044200370300200042003703c801418b9ec000411441b1" - "85c0004114200541201024417141dd90c0004129103e200642003703002002420037030020" - "044200370300200042003703c80141c585c0004128418b9ec0004114200541201024417141" - "8691c0004125103e200041dc016a200041346a280100360200200041d4016a2000412c6a29" - "0100370200200020002901243702cc01200041808080083602c801200041003b01c0012005" - "4118418b9ec0004114200041c0016a220441021024417141ab91c000410e103e2007200028" - "029801422a1001417341ed85c0004111103e200041003b01c0014102200441021009416f41" - "b991c000411b103e200041003b01c001410220044102100c416f41d491c000412b103e2000" - "41003b01c0014101410220044102100d416f41ff91c0004123103e41021011416f41e383c0" - "00411f103e41021012416f41fe85c000412f103e410141021013416f41ad86c0004127103e" - "41e980c0004181201008417441d486c000411f103e41e980c00041c1001008417441f386c0" - "00411a103e200041003b01c001200141812020044102100e417441a292c0004121103e2000" - "41003b01c001200141812020044102100f417441c392c0004131103e200041003b01c00141" - "012001418120200441021010417441f492c0004129103e200141812010144174418d87c000" - "4125103e20014181201015417441b287c0004135103e410120014181201016417441e787c0" - "00412d103e200141812010174174419488c0004119103e419783c00041812041d482c00041" - "0b41df82c000410e1019417441ed82c0004109103e419783c000410d41d482c00041812041" - "df82c000410e1019417441ed82c0004109103e419783c000410d41d482c000410b41df82c0" - "004181201019417441ed82c0004109103e200041003b01c001200141812020044102101841" - "74419d93c0004121103e200041003b01c001418b9ec000418120418b9ec000411420044102" - "1024417441be93c0004118103e200041003b01c00120034114200341142001418120200441" - "021025417441d693c000411f103e200041003b01c001200541812020034114200441021026" - "417441f593c0004122103e419783c000410d200720002802980141001000417341ad88c000" - "410f103e200042d487b6f4c7d4b1c0003700c001419783c000410d200041c095ebdc036a22" - "0641081027417341bc88c000411c103e419783c000410d20072000280298011021417341d8" - "88c0004116103e20064108200441081028417341ee88c0004118103e200441082006410810" - "284173418689c0004118103e200041003b01ec012006410820044108200041ec016a220241" - "02410010294173419794c0004114103e200041003b01ec0120044108200641082002410241" - "001029417341ab94c0004114103e200041003b01ec01200641082004410820024102410010" - "2a417341bf94c0004119103e200041003b01ec012004410820064108200241024100102a41" - "7341d894c0004119103e200041003b01ec012006410820044108200241024100102b417341" - "f194c0004119103e200041003b01ec012004410820064108200241024100102b4173418a95" - "c0004119103e200041003b01ec012006410820044108200241024100102c417341a395c000" - "4117103e200041003b01ec012004410820064108200241024100102c417341ba95c0004117" - "103e200041003b01ec01200641084103200241024100102d417341d195c0004114103e2000" - "41003b01ec01200641084103200241024100102e417341e595c0004113103e200041003b01" - "ec0120064108200241024100102f417341f895c0004113103e20012000280298014100100b" - "4171419e89c0004123103e200041003b01ec0120034114200120002802980120024102101a" - "4171418b96c000411a103e200041003b01ec01200120002802980120024102101b417141a5" - "96c0004121103e200041003b01ec01200120002802980120024102101c417141c696c00041" - "20103e2001200028029801101d417141c189c0004120103e2001200028029801101e417141" - "e189c0004127103e200041003602ec01200120002802980120024104101f417141e696c000" - "4121103e200041003b01ec01200120002802980120024102100a4171418797c0004123103e" - "200041003b01ec0120012000280298014101200241021030417141aa97c0004121103e2000" - "41003b01ec01200120002802980122062003411420012006200241021025417141cb97c000" - "4127103e200041003b01ec0120034114200120002802980122062001200620024102102541" - "7141f297c0004127103e200041003b01ec0120012000280298012003411420024102103141" - "71419998c0004125103e200041003b01ec0120034114200120002802980120024102103141" - "7141be98c0004125103e200041003b01ec0120012000280298012003411420024102103241" - "7141e398c000412c103e200041003b01ec0120034114200120002802980120024102103241" - "71418f99c000412c103e200041003b01ec012001200028029801200241021033417141bb99" - "c000411f103e200041003b01ec0120012000280298014101200241021034417141da99c000" - "4122103e200041003b01ec0120012000280298012003411441b185c0004114200241021023" - "417141fc99c0004121103e200041003b01ec0120034114200120002802980141b185c00041" - "142002410210234171419d9ac0004121103e200041003b01ec012001200028029801410120" - "0241021035417141be9ac0004128103e200041003b01ec0120054118200120002802980120" - "0241021026417141e69ac0004123103e200041003b01ec0120012000280298014101200241" - "021036417141899bc0004125103e200041003b01ec01200120002802980141012002410210" - "37417141ae9bc0004121103e200041003b01ec012001200028029801410120024102103841" - "7141cf9bc0004122103e200041003b01ec0120012000280298012003411441012002410210" - "39417141f19bc0004124103e200041003b01ec012003411420012000280298014101200241" - "021039417141959cc0004124103e200041003b01ec01200120002802980141012002410210" - "3a417141b99cc000412f103e200041003b01ec01200120002802980120024102103b417141" - "e89cc0004123103e200041003b01ec012001200028029801410120024102103c4171418b9d" - "c0004122103e200041003b01ec012001200028029801410120024102103d417141ad9dc000" - "4121103e200041003b01ec01200120002802980141888ac000412020024102101a417141ce" - "9dc000411c103e419783c000410d20012000280298011020417141a88ac0004122103e4197" - "97abdd03410d41888ac000412041001000417341ca8ac0004110103e419797abdd03410d20" - "0441081027417341da8ac000411d103e419797abdd03410d200341141020417341f78ac000" - "4118103e419797abdd03410d41b183c000410810214173418f8bc0004117103e2001200028" - "029801200141812041001000417441a68bc000410e103e200141812042011001417441b48b" - "c0004112103e419783c000418120200441081027417441c68bc000411b103e419783c00041" - "8120200341141020417441e18bc0004116103e419783c00041812041b183c0004108102141" - "7441f78bc0004115103e419783c000410d200120002802980110214171418c8cc000411910" - "3e200041003b01ec01200120002802980120034114200241021026417141ea9dc000412110" - "3e200041f0016a240041010f0b418080c000410b417f20042004417f4e1bac1001000b4180" - "80c000410b417f20052005417f4e1bac1001000b0bf61d0200418080c0000bc5056572726f" - "725f636f64653d54455354204641494c45442424242424205354415254494e47205741534d" - "20455845435554494f4e2024242424246765745f6c65646765725f73716e6765745f706172" - "656e745f6c65646765725f74696d656765745f626173655f666565746573745f616d656e64" - "6d656e74616d656e646d656e745f656e61626c656463616368655f6c65646765725f6f626a" - "6765745f74785f61727261795f6c656e6765745f63757272656e745f6c65646765725f6f62" - "6a5f61727261795f6c656e6765745f6c65646765725f6f626a5f61727261795f6c656e6765" - "745f74785f6e65737465645f61727261795f6c656e6765745f63757272656e745f6c656467" - "65725f6f626a5f6e65737465645f61727261795f6c656e6765745f6c65646765725f6f626a" - "5f6e65737465645f61727261795f6c656e7570646174655f6461746174657374206d657373" - "61676574657374207075626b657974657374207369676e6174757265636865636b5f736967" - "6765745f6e66745f666c6167736765745f6e66745f7472616e736665725f66656574657374" - "696e6720747261636574726163655f6163636f756e74400000000000005f74726163655f61" - "6d6f756e746765745f706172656e745f6c65646765725f686173685f6e65675f7074726765" - "745f74785f61727261795f6c656e5f696e76616c69645f736669656c646765745f74785f6e" - "65737465645f61727261795f6c656e5f6e65675f7074726765745f74785f6e65737465645f" - "61727261795f6c656e5f6e65675f6c656e6765745f74785f6e65737465645f61727261795f" - "6c656e5f746f6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f70" - "74725f6f6f6263616368655f6c65646765725f6f626a5f7074725f6f6f6263616368655f6c" - "65646765725f6f626a5f77726f6e675f6c656e555344303030303030303030303030303030" - "30300041ed85c0000b9e1874726163655f6e756d5f6f6f625f7374726765745f6375727265" - "6e745f6c65646765725f6f626a5f61727261795f6c656e5f696e76616c69645f736669656c" - "646765745f6c65646765725f6f626a5f61727261795f6c656e5f696e76616c69645f736669" - "656c64616d656e646d656e745f656e61626c65645f746f6f5f6269675f736c696365616d65" - "6e646d656e745f656e61626c65645f746f6f5f6c6f6e676765745f74785f6e65737465645f" - "61727261795f6c656e5f746f6f5f6269675f736c6963656765745f63757272656e745f6c65" - "646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c69" - "63656765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f" - "5f6269675f736c6963657570646174655f646174615f746f6f5f6269675f736c6963657472" - "6163655f6f6f625f736c69636574726163655f6f70617175655f666c6f61745f6f6f625f73" - "6c69636574726163655f616d6f756e745f6f6f625f736c696365666c6f61745f636f6d7061" - "72655f6f6f625f736c69636531666c6f61745f636f6d706172655f6f6f625f736c69636532" - "63616368655f6c65646765725f6f626a5f77726f6e675f73697a655f75696e743235366765" - "745f6e66745f666c6167735f77726f6e675f73697a655f75696e743235366765745f6e6674" - "5f7472616e736665725f6665655f77726f6e675f73697a655f75696e743235363030303030" - "30303030303030303030303030303030303030303030303030303174726163655f6163636f" - "756e745f77726f6e675f73697a655f6163636f756e74696474726163655f6f6f625f737472" - "696e6774726163655f6f70617175655f666c6f61745f6f6f625f737472696e677472616365" - "5f6163636f756e745f6f6f625f737472696e6774726163655f616d6f756e745f6f6f625f73" - "7472696e6774726163655f746f6f5f6c6f6e6774726163655f6e756d5f746f6f5f6c6f6e67" - "74726163655f6f70617175655f666c6f61745f746f6f5f6c6f6e6774726163655f6163636f" - "756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f746f6f5f6c6f6e6774726163" - "655f616d6f756e745f77726f6e675f6c656e6774686765745f706172656e745f6c65646765" - "725f686173686765745f6c65646765725f6163636f756e745f686173686765745f6c656467" - "65725f74785f686173686765745f63757272656e745f6c65646765725f6f626a5f6669656c" - "646765745f6c65646765725f6f626a5f6669656c646765745f74785f6e65737465645f6669" - "656c646765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c" - "646765745f6c65646765725f6f626a5f6e65737465645f6669656c64636f6d707574655f73" - "68613531325f68616c666765745f6e66746765745f6e66745f6973737565726765745f6e66" - "745f7461786f6e6765745f6e66745f73657269616c6765745f706172656e745f6c65646765" - "725f686173685f6e65675f6c656e6765745f706172656e745f6c65646765725f686173685f" - "6275665f746f6f5f736d616c6c6765745f706172656e745f6c65646765725f686173685f6c" - "656e5f746f6f5f6c6f6e67666c6f61745f66726f6d5f75696e745f6c656e5f6f6f62666c6f" - "61745f66726f6d5f75696e745f77726f6e675f6c656e6163636f756e745f6b65796c65745f" - "6c656e5f6f6f626163636f756e745f6b65796c65745f77726f6e675f6c656e6c696e655f6b" - "65796c65745f6c656e5f6f6f625f63757272656e63796c696e655f6b65796c65745f77726f" - "6e675f6c656e5f63757272656e6379616d6d5f6b65796c65745f6c656e5f6f6f625f617373" - "657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6c656e5f617373657432616d6d" - "5f6b65796c65745f6c656e5f77726f6e675f6e6f6e5f7872705f63757272656e63795f6c65" - "6e616d6d5f6b65796c65745f6c656e5f77726f6e675f7872705f63757272656e63795f6c65" - "6e616d6d5f6b65796c65745f6d70746765745f74785f6669656c645f696e76616c69645f73" - "6669656c646765745f63757272656e745f6c65646765725f6f626a5f6669656c645f696e76" - "616c69645f736669656c646765745f6c65646765725f6f626a5f6669656c645f696e76616c" - "69645f736669656c646765745f74785f6e65737465645f6669656c645f746f6f5f6269675f" - "736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669" - "656c645f746f6f5f6269675f736c6963656765745f6c65646765725f6f626a5f6e65737465" - "645f6669656c645f746f6f5f6269675f736c696365636f6d707574655f7368613531325f68" - "616c665f746f6f5f6269675f736c696365616d6d5f6b65796c65745f746f6f5f6269675f73" - "6c69636563726564656e7469616c5f6b65796c65745f746f6f5f6269675f736c6963656d70" - "746f6b656e5f6b65796c65745f746f6f5f6269675f736c6963655f6d70746964666c6f6174" - "5f6164645f6f6f625f736c69636531666c6f61745f6164645f6f6f625f736c69636532666c" - "6f61745f73756274726163745f6f6f625f736c69636531666c6f61745f7375627472616374" - "5f6f6f625f736c69636532666c6f61745f6d756c7469706c795f6f6f625f736c6963653166" - "6c6f61745f6d756c7469706c795f6f6f625f736c69636532666c6f61745f6469766964655f" - "6f6f625f736c69636531666c6f61745f6469766964655f6f6f625f736c69636532666c6f61" - "745f726f6f745f6f6f625f736c696365666c6f61745f706f775f6f6f625f736c696365666c" - "6f61745f6c6f675f6f6f625f736c6963656765745f6e66745f77726f6e675f73697a655f75" - "696e743235366765745f6e66745f6973737565725f77726f6e675f73697a655f75696e7432" - "35366765745f6e66745f7461786f6e5f77726f6e675f73697a655f75696e74323536676574" - "5f6e66745f73657269616c5f77726f6e675f73697a655f75696e743235366163636f756e74" - "5f6b65796c65745f77726f6e675f73697a655f6163636f756e746964636865636b5f6b6579" - "6c65745f77726f6e675f73697a655f6163636f756e74696463726564656e7469616c5f6b65" - "796c65745f77726f6e675f73697a655f6163636f756e7469643163726564656e7469616c5f" - "6b65796c65745f77726f6e675f73697a655f6163636f756e7469643264656c65676174655f" - "6b65796c65745f77726f6e675f73697a655f6163636f756e7469643164656c65676174655f" - "6b65796c65745f77726f6e675f73697a655f6163636f756e746964326465706f7369745f70" - "7265617574685f6b65796c65745f77726f6e675f73697a655f6163636f756e746964316465" - "706f7369745f707265617574685f6b65796c65745f77726f6e675f73697a655f6163636f75" - "6e746964326469645f6b65796c65745f77726f6e675f73697a655f6163636f756e74696465" - "7363726f775f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646c696e65" - "5f6b65796c65745f77726f6e675f73697a655f6163636f756e746964316c696e655f6b6579" - "6c65745f77726f6e675f73697a655f6163636f756e746964326d70745f69737375616e6365" - "5f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646d70746f6b656e5f6b" - "65796c65745f77726f6e675f73697a655f6163636f756e7469646e66745f6f666665725f6b" - "65796c65745f77726f6e675f73697a655f6163636f756e7469646f666665725f6b65796c65" - "745f77726f6e675f73697a655f6163636f756e7469646f7261636c655f6b65796c65745f77" - "726f6e675f73697a655f6163636f756e7469647061796368616e5f6b65796c65745f77726f" - "6e675f73697a655f6163636f756e746964317061796368616e5f6b65796c65745f77726f6e" - "675f73697a655f6163636f756e746964327065726d697373696f6e65645f646f6d61696e5f" - "6b65796c65745f77726f6e675f73697a655f6163636f756e7469647369676e6572735f6b65" - "796c65745f77726f6e675f73697a655f6163636f756e7469647469636b65745f6b65796c65" - "745f77726f6e675f73697a655f6163636f756e7469647661756c745f6b65796c65745f7772" - "6f6e675f73697a655f6163636f756e7469646765745f6e66745f77726f6e675f73697a655f" - "6163636f756e7469646d70746f6b656e5f6b65796c65745f6d707469645f77726f6e675f6c" - "656e677468004d0970726f64756365727302086c616e6775616765010452757374000c7072" - "6f6365737365642d6279010572757374631d312e39302e3020283131353965373863342032" - "3032352d30392d313429002c0f7461726765745f6665617475726573022b0f6d757461626c" - "652d676c6f62616c732b087369676e2d657874"; + "646765725f68617368000208686f73745f6c69620c6765745f626173655f66656500050868" + "6f73745f6c696211616d656e646d656e745f656e61626c6564000208686f73745f6c69620c" + "6765745f74785f6669656c64000608686f73745f6c69620e6163636f756e745f6b65796c65" + "74000008686f73745f6c69621063616368655f6c65646765725f6f626a000608686f73745f" + "6c69621c6765745f63757272656e745f6c65646765725f6f626a5f6669656c64000608686f" + "73745f6c6962146765745f6c65646765725f6f626a5f6669656c64000008686f73745f6c69" + "62136765745f74785f6e65737465645f6669656c64000008686f73745f6c6962236765745f" + "63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c64000008686f73" + "745f6c69621b6765745f6c65646765725f6f626a5f6e65737465645f6669656c6400010868" + "6f73745f6c6962106765745f74785f61727261795f6c656e000708686f73745f6c69622067" + "65745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e000708686f73" + "745f6c6962186765745f6c65646765725f6f626a5f61727261795f6c656e000208686f7374" + "5f6c6962176765745f74785f6e65737465645f61727261795f6c656e000208686f73745f6c" + "6962276765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f61727261" + "795f6c656e000208686f73745f6c69621f6765745f6c65646765725f6f626a5f6e65737465" + "645f61727261795f6c656e000608686f73745f6c69620b7570646174655f64617461000208" + "686f73745f6c696213636f6d707574655f7368613531325f68616c66000008686f73745f6c" + "696209636865636b5f736967000308686f73745f6c6962076765745f6e6674000308686f73" + "745f6c69620e6765745f6e66745f697373756572000008686f73745f6c69620d6765745f6e" + "66745f7461786f6e000008686f73745f6c69620d6765745f6e66745f666c61677300020868" + "6f73745f6c6962146765745f6e66745f7472616e736665725f666565000208686f73745f6c" + "69620e6765745f6e66745f73657269616c000008686f73745f6c69620d74726163655f6163" + "636f756e74000008686f73745f6c69620c74726163655f616d6f756e74000008686f73745f" + "6c69620f666c6f61745f66726f6d5f75696e74000108686f73745f6c69620b6c696e655f6b" + "65796c6574000808686f73745f6c69620a616d6d5f6b65796c6574000308686f73745f6c69" + "621163726564656e7469616c5f6b65796c6574000808686f73745f6c69620e6d70746f6b65" + "6e5f6b65796c6574000308686f73745f6c69621274726163655f6f70617175655f666c6f61" + "74000008686f73745f6c69620d666c6f61745f636f6d70617265000008686f73745f6c6962" + "09666c6f61745f616464000408686f73745f6c69620e666c6f61745f737562747261637400" + "0408686f73745f6c69620e666c6f61745f6d756c7469706c79000408686f73745f6c69620c" + "666c6f61745f646976696465000408686f73745f6c69620a666c6f61745f726f6f74000308" + "686f73745f6c696209666c6f61745f706f77000308686f73745f6c696209666c6f61745f6c" + "6f67000108686f73745f6c69620c636865636b5f6b65796c6574000108686f73745f6c6962" + "0f64656c65676174655f6b65796c6574000308686f73745f6c6962166465706f7369745f70" + "7265617574685f6b65796c6574000308686f73745f6c69620a6469645f6b65796c65740000" + "08686f73745f6c69620d657363726f775f6b65796c6574000108686f73745f6c6962136d70" + "745f69737375616e63655f6b65796c6574000108686f73745f6c6962106e66745f6f666665" + "725f6b65796c6574000108686f73745f6c69620c6f666665725f6b65796c6574000108686f" + "73745f6c69620d6f7261636c655f6b65796c6574000108686f73745f6c69620e7061796368" + "616e5f6b65796c6574000408686f73745f6c69621a7065726d697373696f6e65645f646f6d" + "61696e5f6b65796c6574000108686f73745f6c69620e7369676e6572735f6b65796c657400" + "0008686f73745f6c69620d7469636b65745f6b65796c6574000108686f73745f6c69620c76" + "61756c745f6b65796c657400010303020a0505030100110619037f01418080c0000b7f0041" + "f69dc0000b7f0041809ec0000b072e04066d656d6f727902000666696e697368003d0a5f5f" + "646174615f656e6403010b5f5f686561705f6261736503020ac12a02460002402000200147" + "04402002200341004100410010001a20004100480d01418b80c000410b2000ad1001000b20" + "0220032000ac10011a0f0b418b80c000410b2000ac1001000bf72902087f027e230041f001" + "6b22002400419680c000412341004100410010001a100241b9e00041b980c000410e103c10" + "0341b2920441c780c0004116103c200041f0006a22034200370300200041e8006a22044200" + "370300200041e0006a2202420037030020004200370358200041d8006a2201412010044120" + "41a58cc0004116103c1005410a41dd80c000410c103c200041186a428182848890a0c08001" + "370300200041106a428182848890a0c08001370300200041086a428182848890a0c0800137" + "03002000428182848890a0c0800137030041e980c000410e1006410141f780c0004111103c" + "200041201006410141f780c0004111103c2004410036020020024200370300200042003703" + "5841818020200141141007220541144604400240200041266a20002d005a3a000020002000" + "29005f3703c8012000200041e4006a2900003700cd01200041306a20002900cd0137000020" + "0020002f01583b01242000200028005b360027200020002903c80137002b20034200370300" + "200442003703002002420037030020004200370358200041246a4114200141201008220541" + "20470d002000413a6a20002d005a3a0000200041d0016a200041e7006a2900002208370300" + "200041d8016a200041ef006a2900002209370300200041c7006a2008370000200041cf006a" + "2009370000200041d7006a200041f7006a2d00003a0000200020002f01583b013820002000" + "28005b36003b2000200029005f37003f200041386a4120410010094101418881c000411010" + "3c2004410036020020024200370300200042003703584181802020014114100a411441bb8c" + "c000411c103c20044100360200200242003703002000420037035841014181802020014114" + "100b411441d78cc0004114103c02402001410020016b41037122046a220220014d0d002004" + "0440200421050340200141003a0000200141016a2101200541016b22050d000b0b20044101" + "6b4107490d000340200141003a0000200141076a41003a0000200141066a41003a00002001" + "41056a41003a0000200141046a41003a0000200141036a41003a0000200141026a41003a00" + "00200141016a41003a0000200141086a22012002470d000b0b200241c40020046b2204417c" + "716a220120024b0440034020024100360200200241046a22022001490d000b0b0240200120" + "04410371220420016a22054f0d002004220204400340200141003a0000200141016a210120" + "0241016b22020d000b0b200441016b4107490d000340200141003a0000200141076a41003a" + "0000200141066a41003a0000200141056a41003a0000200141046a41003a0000200141036a" + "41003a0000200141026a41003a0000200141016a41003a0000200141086a22012005470d00" + "0b0b2000418180203602c801410021010340200641c000490440200041d8006a20066a2000" + "41c8016a20016a2d00003a0000200020002802980141016a220636029801200141016a2201" + "4104470d010b0b200041d8016a22024100360200200041d0016a2203420037030020004200" + "3703c801200041d8006a22012006200041c8016a22054114100c411441eb8cc0004113103c" + "2002410036020020034200370300200042003703c801200120002802980120054114100d41" + "1441fe8cc0004123103c2002410036020020034200370300200042003703c8014101200120" + "002802980120054114100e411441a18dc000411b103c4189803c100f4120419881c0004110" + "103c4189803c1010412041a881c0004120103c41014189803c1011412041c881c000411810" + "3c20012000280298011012412041e081c0004117103c20012000280298011013412041f781" + "c0004127103c4101200120002802980110144120419e82c000411f103c200041246a220441" + "141015410041bd82c000410b103c200041e0016a2206420037030020024200370300200342" + "00370300200042003703c8012001200028029801200541201016412041bc8dc0004113103c" + "41c882c000410c41d482c000410b41df82c000410e1017410141ed82c0004109103c200041" + "b8016a200041186a290300370300200041b0016a200041106a290300370300200041a8016a" + "200041086a290300370300200020002903003703a001200241003b01002003420037030020" + "0042003703c80120044114200041a0016a22074120200541121018411241cf8dc000410710" + "3c2002410036020020034200370300200042003703c80120074120200541141019411441d6" + "8dc000410e103c200041003602c8012007412020054104101a410441e48dc000410d103c20" + "074120101b410841f682c000410d103c20074120101c410a418383c0004114103c20004100" + "3602c8012007412020054104101d410441f18dc000410e103c419783c000410d2004411410" + "1e412f41a483c000410d103c419783c000410d41b183c0004108101f411341b983c000410c" + "103c417f41041004417141c583c000411e103c200041003602c8012005417f1004417141ff" + "8dc000411e103c200041ca016a41003a0000200041003b01c801200541031004417d419d8e" + "c0004124103c200041003602c8012005418094ebdc031004417341c18ec0004123103c4197" + "83c000410d20044114101e412f41a483c000410d103c419783c000410d41b183c000410810" + "1f411341b983c000410c103c20064200370300200242003703002003420037030020004200" + "3703c801200041d894ebdc036a220741082005412041001020417341e48ec0004117103c20" + "0642003703002002420037030020034200370300200042003703c801200120002802980120" + "05412041001020417141fb8ec0004119103c4102100f416f41e383c000411f103c417f2000" + "2802980110124171418284c000411f103c2001417f1012417141a184c000411f103c200141" + "81201012417441c084c0004120103c20072000280298011012417341e084c000411f103c20" + "0720002802980141011009417341ff84c0004118103c200120002802980141011009417141" + "9785c000411a103c200642003703002002420037030020034200370300200042003703c801" + "2007200028029801200541201008417341948fc0004116103c200642003703002002420037" + "030020034200370300200042003703c8012001200028029801200541201008417141aa8fc0" + "004118103c200642003703002002420037030020034200370300200042003703c801200441" + "14200441142007200028029801200541201021417341c28fc000411c103c20064200370300" + "2002420037030020034200370300200042003703c801200441142004411420012000280298" + "01200541201021417141de8fc000411e103c20064200370300200242003703002003420037" + "0300200042003703c80141e29dc00041142007200028029801200541201022417341fc8fc0" + "004119103c200642003703002002420037030020034200370300200042003703c80141e29d" + "c000411420012000280298012005412010224171419590c000411f103c2006420037030020" + "02420037030020034200370300200042003703c80141e29dc000411441b185c00041142005" + "41201022417141b490c0004129103c20064200370300200242003703002003420037030020" + "0042003703c80141c585c000412841e29dc0004114200541201022417141dd90c000412510" + "3c200041dc016a200041346a280100360200200041d4016a2000412c6a2901003702002000" + "20002901243702cc01200041808080083602c801200041003b01c0012005411841e29dc000" + "4114200041c0016a2203410210224171418291c000410e103c2007200028029801422a1001" + "417341ed85c0004111103c200041003b01c0014102200341021007416f419091c000411b10" + "3c200041003b01c001410220034102100a416f41ab91c000412b103c200041003b01c00141" + "01410220034102100b416f41d691c0004123103c4102100f416f41e383c000411f103c4102" + "1010416f41fe85c000412f103c410141021011416f41ad86c0004127103c41e980c0004181" + "201006417441d486c000411f103c41e980c00041c1001006417441f386c000411a103c2000" + "41003b01c001200141812020034102100c417441f991c0004121103c200041003b01c00120" + "0141812020034102100d4174419a92c0004131103c200041003b01c0014101200141812020" + "034102100e417441cb92c0004129103c200141812010124174418d87c0004125103c200141" + "81201013417441b287c0004135103c410120014181201014417441e787c000412d103c2001" + "41812010154174419488c0004119103c419783c00041812041d482c000410b41df82c00041" + "0e1017417441ed82c0004109103c419783c000410d41d482c00041812041df82c000410e10" + "17417441ed82c0004109103c419783c000410d41d482c000410b41df82c000418120101741" + "7441ed82c0004109103c200041003b01c0012001418120200341021016417441f492c00041" + "21103c200041003b01c00141e29dc00041812041e29dc00041142003410210224174419593" + "c0004118103c200041003b01c00120044114200441142001418120200341021023417441ad" + "93c000411f103c200041003b01c001200541812020044114200341021024417441cc93c000" + "4122103c419783c000410d200720002802980141001000417341ad88c000410f103c200042" + "d487b6f4c7d4b1c0003700c001419783c000410d200041c095ebdc036a2206410810254173" + "41bc88c000411c103c419783c000410d2007200028029801101f417341d888c0004116103c" + "20064108200341081026417341ee88c0004118103c200341082006410810264173418689c0" + "004118103c200041003b01ec012006410820034108200041ec016a22024102410010274173" + "41ee93c0004114103c200041003b01ec012003410820064108200241024100102741734182" + "94c0004114103c200041003b01ec01200641082003410820024102410010284173419694c0" + "004119103c200041003b01ec0120034108200641082002410241001028417341af94c00041" + "19103c200041003b01ec0120064108200341082002410241001029417341c894c000411910" + "3c200041003b01ec0120034108200641082002410241001029417341e194c0004119103c20" + "0041003b01ec012006410820034108200241024100102a417341fa94c0004117103c200041" + "003b01ec012003410820064108200241024100102a4173419195c0004117103c200041003b" + "01ec01200641084103200241024100102b417341a895c0004114103c200041003b01ec0120" + "0641084103200241024100102c417341bc95c0004113103c200041003b01ec012006410820" + "0241024100102d417341cf95c0004113103c2001200028029801410010094171419e89c000" + "4123103c200041003b01ec01200441142001200028029801200241021018417141e295c000" + "411a103c200041003b01ec012001200028029801200241021019417141fc95c0004121103c" + "200041003b01ec01200120002802980120024102101a4171419d96c0004120103c20012000" + "28029801101b417141c189c0004120103c2001200028029801101c417141e189c000412710" + "3c200041003602ec01200120002802980120024104101d417141bd96c0004121103c200041" + "003b01ec012001200028029801200241021008417141de96c0004123103c200041003b01ec" + "012001200028029801410120024102102e4171418197c0004121103c200041003b01ec0120" + "0120002802980122062004411420012006200241021023417141a297c0004127103c200041" + "003b01ec01200441142001200028029801220620012006200241021023417141c997c00041" + "27103c200041003b01ec0120012000280298012004411420024102102f417141f097c00041" + "25103c200041003b01ec0120044114200120002802980120024102102f4171419598c00041" + "25103c200041003b01ec01200120002802980120044114200241021030417141ba98c00041" + "2c103c200041003b01ec01200441142001200028029801200241021030417141e698c00041" + "2c103c200041003b01ec0120012000280298012002410210314171419299c000411f103c20" + "0041003b01ec0120012000280298014101200241021032417141b199c0004122103c200041" + "003b01ec0120012000280298012004411441b185c0004114200241021021417141d399c000" + "4121103c200041003b01ec0120044114200120002802980141b185c0004114200241021021" + "417141f499c0004121103c200041003b01ec01200120002802980141012002410210334171" + "41959ac0004128103c200041003b01ec012005411820012000280298012002410210244171" + "41bd9ac0004123103c200041003b01ec0120012000280298014101200241021034417141e0" + "9ac0004125103c200041003b01ec0120012000280298014101200241021035417141859bc0" + "004121103c200041003b01ec0120012000280298014101200241021036417141a69bc00041" + "22103c200041003b01ec012001200028029801200441144101200241021037417141c89bc0" + "004124103c200041003b01ec012004411420012000280298014101200241021037417141ec" + "9bc0004124103c200041003b01ec0120012000280298014101200241021038417141909cc0" + "00412f103c200041003b01ec012001200028029801200241021039417141bf9cc000412310" + "3c200041003b01ec012001200028029801410120024102103a417141e29cc0004122103c20" + "0041003b01ec012001200028029801410120024102103b417141849dc0004121103c200041" + "003b01ec01200120002802980141888ac0004120200241021018417141a59dc000411c103c" + "419783c000410d2001200028029801101e417141a88ac0004122103c419797abdd03410d41" + "888ac000412041001000417341ca8ac0004110103c419797abdd03410d2003410810254173" + "41da8ac000411d103c419797abdd03410d20044114101e417341f78ac0004118103c419797" + "abdd03410d41b183c0004108101f4173418f8bc0004117103c200120002802980120014181" + "2041001000417441a68bc000410e103c200141812042011001417441b48bc0004112103c41" + "9783c000418120200341081025417441c68bc000411b103c419783c0004181202004411410" + "1e417441e18bc0004116103c419783c00041812041b183c0004108101f417441f78bc00041" + "15103c419783c000410d2001200028029801101f4171418c8cc0004119103c200041003b01" + "ec01200120002802980120044114200241021024417141c19dc0004121103c200041f0016a" + "240041010f0b0b418080c000410b417f20052005417f4e1bac1001000b0bcd1d0200418080" + "c0000bc5056572726f725f636f64653d54455354204641494c454424242424242053544152" + "54494e47205741534d20455845435554494f4e2024242424246765745f6c65646765725f73" + "716e6765745f706172656e745f6c65646765725f74696d656765745f626173655f66656574" + "6573745f616d656e646d656e74616d656e646d656e745f656e61626c656463616368655f6c" + "65646765725f6f626a6765745f74785f61727261795f6c656e6765745f63757272656e745f" + "6c65646765725f6f626a5f61727261795f6c656e6765745f6c65646765725f6f626a5f6172" + "7261795f6c656e6765745f74785f6e65737465645f61727261795f6c656e6765745f637572" + "72656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e6765745f6c" + "65646765725f6f626a5f6e65737465645f61727261795f6c656e7570646174655f64617461" + "74657374206d65737361676574657374207075626b657974657374207369676e6174757265" + "636865636b5f7369676765745f6e66745f666c6167736765745f6e66745f7472616e736665" + "725f66656574657374696e6720747261636574726163655f6163636f756e74400000000000" + "005f74726163655f616d6f756e746765745f706172656e745f6c65646765725f686173685f" + "6e65675f7074726765745f74785f61727261795f6c656e5f696e76616c69645f736669656c" + "646765745f74785f6e65737465645f61727261795f6c656e5f6e65675f7074726765745f74" + "785f6e65737465645f61727261795f6c656e5f6e65675f6c656e6765745f74785f6e657374" + "65645f61727261795f6c656e5f746f6f5f6c6f6e676765745f74785f6e65737465645f6172" + "7261795f6c656e5f7074725f6f6f6263616368655f6c65646765725f6f626a5f7074725f6f" + "6f6263616368655f6c65646765725f6f626a5f77726f6e675f6c656e555344303030303030" + "30303030303030303030300041ed85c0000bf51774726163655f6e756d5f6f6f625f737472" + "6765745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e5f696e7661" + "6c69645f736669656c646765745f6c65646765725f6f626a5f61727261795f6c656e5f696e" + "76616c69645f736669656c64616d656e646d656e745f656e61626c65645f746f6f5f626967" + "5f736c696365616d656e646d656e745f656e61626c65645f746f6f5f6c6f6e676765745f74" + "785f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f63" + "757272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f" + "6f5f6269675f736c6963656765745f6c65646765725f6f626a5f6e65737465645f61727261" + "795f6c656e5f746f6f5f6269675f736c6963657570646174655f646174615f746f6f5f6269" + "675f736c69636574726163655f6f6f625f736c69636574726163655f6f70617175655f666c" + "6f61745f6f6f625f736c69636574726163655f616d6f756e745f6f6f625f736c696365666c" + "6f61745f636f6d706172655f6f6f625f736c69636531666c6f61745f636f6d706172655f6f" + "6f625f736c6963653263616368655f6c65646765725f6f626a5f77726f6e675f73697a655f" + "75696e743235366765745f6e66745f666c6167735f77726f6e675f73697a655f75696e7432" + "35366765745f6e66745f7472616e736665725f6665655f77726f6e675f73697a655f75696e" + "74323536303030303030303030303030303030303030303030303030303030303030303174" + "726163655f6163636f756e745f77726f6e675f73697a655f6163636f756e74696474726163" + "655f6f6f625f737472696e6774726163655f6f70617175655f666c6f61745f6f6f625f7374" + "72696e6774726163655f6163636f756e745f6f6f625f737472696e6774726163655f616d6f" + "756e745f6f6f625f737472696e6774726163655f746f6f5f6c6f6e6774726163655f6e756d" + "5f746f6f5f6c6f6e6774726163655f6f70617175655f666c6f61745f746f6f5f6c6f6e6774" + "726163655f6163636f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f746f6f" + "5f6c6f6e6774726163655f616d6f756e745f77726f6e675f6c656e6774686765745f706172" + "656e745f6c65646765725f686173686765745f63757272656e745f6c65646765725f6f626a" + "5f6669656c646765745f6c65646765725f6f626a5f6669656c646765745f74785f6e657374" + "65645f6669656c646765745f63757272656e745f6c65646765725f6f626a5f6e6573746564" + "5f6669656c646765745f6c65646765725f6f626a5f6e65737465645f6669656c64636f6d70" + "7574655f7368613531325f68616c666765745f6e66746765745f6e66745f69737375657267" + "65745f6e66745f7461786f6e6765745f6e66745f73657269616c6765745f706172656e745f" + "6c65646765725f686173685f6e65675f6c656e6765745f706172656e745f6c65646765725f" + "686173685f6275665f746f6f5f736d616c6c6765745f706172656e745f6c65646765725f68" + "6173685f6c656e5f746f6f5f6c6f6e67666c6f61745f66726f6d5f75696e745f6c656e5f6f" + "6f62666c6f61745f66726f6d5f75696e745f77726f6e675f6c656e6163636f756e745f6b65" + "796c65745f6c656e5f6f6f626163636f756e745f6b65796c65745f77726f6e675f6c656e6c" + "696e655f6b65796c65745f6c656e5f6f6f625f63757272656e63796c696e655f6b65796c65" + "745f77726f6e675f6c656e5f63757272656e6379616d6d5f6b65796c65745f6c656e5f6f6f" + "625f617373657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6c656e5f61737365" + "7432616d6d5f6b65796c65745f6c656e5f77726f6e675f6e6f6e5f7872705f63757272656e" + "63795f6c656e616d6d5f6b65796c65745f6c656e5f77726f6e675f7872705f63757272656e" + "63795f6c656e616d6d5f6b65796c65745f6d70746765745f74785f6669656c645f696e7661" + "6c69645f736669656c646765745f63757272656e745f6c65646765725f6f626a5f6669656c" + "645f696e76616c69645f736669656c646765745f6c65646765725f6f626a5f6669656c645f" + "696e76616c69645f736669656c646765745f74785f6e65737465645f6669656c645f746f6f" + "5f6269675f736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e657374" + "65645f6669656c645f746f6f5f6269675f736c6963656765745f6c65646765725f6f626a5f" + "6e65737465645f6669656c645f746f6f5f6269675f736c696365636f6d707574655f736861" + "3531325f68616c665f746f6f5f6269675f736c696365616d6d5f6b65796c65745f746f6f5f" + "6269675f736c69636563726564656e7469616c5f6b65796c65745f746f6f5f6269675f736c" + "6963656d70746f6b656e5f6b65796c65745f746f6f5f6269675f736c6963655f6d70746964" + "666c6f61745f6164645f6f6f625f736c69636531666c6f61745f6164645f6f6f625f736c69" + "636532666c6f61745f73756274726163745f6f6f625f736c69636531666c6f61745f737562" + "74726163745f6f6f625f736c69636532666c6f61745f6d756c7469706c795f6f6f625f736c" + "69636531666c6f61745f6d756c7469706c795f6f6f625f736c69636532666c6f61745f6469" + "766964655f6f6f625f736c69636531666c6f61745f6469766964655f6f6f625f736c696365" + "32666c6f61745f726f6f745f6f6f625f736c696365666c6f61745f706f775f6f6f625f736c" + "696365666c6f61745f6c6f675f6f6f625f736c6963656765745f6e66745f77726f6e675f73" + "697a655f75696e743235366765745f6e66745f6973737565725f77726f6e675f73697a655f" + "75696e743235366765745f6e66745f7461786f6e5f77726f6e675f73697a655f75696e7432" + "35366765745f6e66745f73657269616c5f77726f6e675f73697a655f75696e743235366163" + "636f756e745f6b65796c65745f77726f6e675f73697a655f6163636f756e74696463686563" + "6b5f6b65796c65745f77726f6e675f73697a655f6163636f756e74696463726564656e7469" + "616c5f6b65796c65745f77726f6e675f73697a655f6163636f756e7469643163726564656e" + "7469616c5f6b65796c65745f77726f6e675f73697a655f6163636f756e7469643264656c65" + "676174655f6b65796c65745f77726f6e675f73697a655f6163636f756e7469643164656c65" + "676174655f6b65796c65745f77726f6e675f73697a655f6163636f756e746964326465706f" + "7369745f707265617574685f6b65796c65745f77726f6e675f73697a655f6163636f756e74" + "6964316465706f7369745f707265617574685f6b65796c65745f77726f6e675f73697a655f" + "6163636f756e746964326469645f6b65796c65745f77726f6e675f73697a655f6163636f75" + "6e746964657363726f775f6b65796c65745f77726f6e675f73697a655f6163636f756e7469" + "646c696e655f6b65796c65745f77726f6e675f73697a655f6163636f756e746964316c696e" + "655f6b65796c65745f77726f6e675f73697a655f6163636f756e746964326d70745f697373" + "75616e63655f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646d70746f" + "6b656e5f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646e66745f6f66" + "6665725f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646f666665725f" + "6b65796c65745f77726f6e675f73697a655f6163636f756e7469646f7261636c655f6b6579" + "6c65745f77726f6e675f73697a655f6163636f756e7469647061796368616e5f6b65796c65" + "745f77726f6e675f73697a655f6163636f756e746964317061796368616e5f6b65796c6574" + "5f77726f6e675f73697a655f6163636f756e746964327065726d697373696f6e65645f646f" + "6d61696e5f6b65796c65745f77726f6e675f73697a655f6163636f756e7469647369676e65" + "72735f6b65796c65745f77726f6e675f73697a655f6163636f756e7469647469636b65745f" + "6b65796c65745f77726f6e675f73697a655f6163636f756e7469647661756c745f6b65796c" + "65745f77726f6e675f73697a655f6163636f756e7469646765745f6e66745f77726f6e675f" + "73697a655f6163636f756e7469646d70746f6b656e5f6b65796c65745f6d707469645f7772" + "6f6e675f6c656e677468004d0970726f64756365727302086c616e67756167650104527573" + "74000c70726f6365737365642d6279010572757374631d312e38352e312028346562313631" + "32353020323032352d30332d313529002c0f7461726765745f6665617475726573022b0f6d" + "757461626c652d676c6f62616c732b087369676e2d657874"; extern std::string const floatTestsWasmHex = "0061736d0100000001430860077f7f7f7f7f7f7f017f60057f7f7f7f7f017f60047f7f7f7f" diff --git a/src/xrpld/app/wasm/HostFunc.h b/src/xrpld/app/wasm/HostFunc.h index f1332462a4..4478a8cd56 100644 --- a/src/xrpld/app/wasm/HostFunc.h +++ b/src/xrpld/app/wasm/HostFunc.h @@ -135,18 +135,6 @@ struct HostFunctions return Unexpected(HostFunctionError::INTERNAL); } - virtual Expected - getLedgerAccountHash() - { - return Unexpected(HostFunctionError::INTERNAL); - } - - virtual Expected - getLedgerTransactionHash() - { - return Unexpected(HostFunctionError::INTERNAL); - } - virtual Expected getBaseFee() { diff --git a/src/xrpld/app/wasm/HostFuncImpl.h b/src/xrpld/app/wasm/HostFuncImpl.h index 7c02e3160e..f56aa102a5 100644 --- a/src/xrpld/app/wasm/HostFuncImpl.h +++ b/src/xrpld/app/wasm/HostFuncImpl.h @@ -99,12 +99,6 @@ public: Expected getParentLedgerHash() override; - Expected - getLedgerAccountHash() override; - - Expected - getLedgerTransactionHash() override; - Expected getBaseFee() override; diff --git a/src/xrpld/app/wasm/HostFuncWrapper.h b/src/xrpld/app/wasm/HostFuncWrapper.h index dc0524d611..6bfa576b9d 100644 --- a/src/xrpld/app/wasm/HostFuncWrapper.h +++ b/src/xrpld/app/wasm/HostFuncWrapper.h @@ -44,20 +44,6 @@ getParentLedgerHash_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results); -using getLedgerAccountHash_proto = int32_t(uint8_t*, int32_t); -wasm_trap_t* -getLedgerAccountHash_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); - -using getLedgerTransactionHash_proto = int32_t(uint8_t*, int32_t); -wasm_trap_t* -getLedgerTransactionHash_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); - using getBaseFee_proto = int32_t(); wasm_trap_t* getBaseFee_wrap( diff --git a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp index af8eff36ee..f6517767dc 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp @@ -55,18 +55,6 @@ WasmHostFunctionsImpl::getParentLedgerHash() return ctx.view().info().parentHash; } -Expected -WasmHostFunctionsImpl::getLedgerAccountHash() -{ - return ctx.view().info().accountHash; -} - -Expected -WasmHostFunctionsImpl::getLedgerTransactionHash() -{ - return ctx.view().info().txHash; -} - Expected WasmHostFunctionsImpl::getBaseFee() { diff --git a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp index 304fc9eeda..d7995f6b32 100644 --- a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp @@ -358,34 +358,6 @@ getParentLedgerHash_wrap( runtime, params, results, hf->getParentLedgerHash(), index); } -wasm_trap_t* -getLedgerAccountHash_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) -{ - auto* hf = reinterpret_cast(env); - auto const* runtime = reinterpret_cast(hf->getRT()); - int index = 0; - - return returnResult( - runtime, params, results, hf->getLedgerAccountHash(), index); -} - -wasm_trap_t* -getLedgerTransactionHash_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) -{ - auto* hf = reinterpret_cast(env); - auto const* runtime = reinterpret_cast(hf->getRT()); - int index = 0; - - return returnResult( - runtime, params, results, hf->getLedgerTransactionHash(), index); -} - wasm_trap_t* getBaseFee_wrap( void* env, diff --git a/src/xrpld/app/wasm/detail/WasmVM.cpp b/src/xrpld/app/wasm/detail/WasmVM.cpp index 022d66f982..f2d3799ca8 100644 --- a/src/xrpld/app/wasm/detail/WasmVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmVM.cpp @@ -41,8 +41,6 @@ setCommonHostFunctions(HostFunctions* hfs, std::vector& i) WASM_IMPORT_FUNC2(i, getLedgerSqn, "get_ledger_sqn", hfs, 60); WASM_IMPORT_FUNC2(i, getParentLedgerTime, "get_parent_ledger_time", hfs, 60); WASM_IMPORT_FUNC2(i, getParentLedgerHash, "get_parent_ledger_hash", hfs, 60); - WASM_IMPORT_FUNC2(i, getLedgerAccountHash, "get_ledger_account_hash", hfs, 60); - WASM_IMPORT_FUNC2(i, getLedgerTransactionHash, "get_ledger_tx_hash", hfs, 60); WASM_IMPORT_FUNC2(i, getBaseFee, "get_base_fee", hfs, 60); WASM_IMPORT_FUNC2(i, isAmendmentEnabled, "amendment_enabled", hfs, 100); From 9e14c14a26485150169d01b60605ba72299d39ef Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Mon, 13 Oct 2025 15:11:21 -0400 Subject: [PATCH 020/137] Use xrplf conan repo for wamr (#5862) --- BUILD.md | 1 - CMakeLists.txt | 2 +- cmake/RippledCore.cmake | 2 +- conan.lock | 4 +- conanfile.py | 4 +- external/wamr/conanfile.py | 88 -------------------------------------- 6 files changed, 6 insertions(+), 95 deletions(-) delete mode 100644 external/wamr/conanfile.py diff --git a/BUILD.md b/BUILD.md index 368400bf3e..fd7a0b855d 100644 --- a/BUILD.md +++ b/BUILD.md @@ -147,7 +147,6 @@ git sparse-checkout set recipes/snappy git sparse-checkout add recipes/soci git fetch origin master git checkout master -conan export --version 2.4.1 external/wamr # TODO: needs to be added to the conan center index conan export --version 1.1.10 recipes/snappy/all conan export --version 4.0.3 recipes/soci/all rm -rf .git diff --git a/CMakeLists.txt b/CMakeLists.txt index 022f45e395..073020da4f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -120,7 +120,7 @@ endif() find_package(nudb REQUIRED) find_package(date REQUIRED) find_package(xxHash REQUIRED) -find_package(wamr REQUIRED) +find_package(wasm-xrplf REQUIRED) target_link_libraries(ripple_libs INTERFACE ed25519::ed25519 diff --git a/cmake/RippledCore.cmake b/cmake/RippledCore.cmake index 98c0ef4560..2041886d21 100644 --- a/cmake/RippledCore.cmake +++ b/cmake/RippledCore.cmake @@ -65,7 +65,7 @@ target_link_libraries(xrpl.imports.main xrpl.libpb xxHash::xxhash $<$:antithesis-sdk-cpp> - wamr::wamr + wasm-xrplf::wasm-xrplf ) if (WIN32) diff --git a/conan.lock b/conan.lock index 6d0b0d3a79..82f2e939af 100644 --- a/conan.lock +++ b/conan.lock @@ -3,7 +3,7 @@ "requires": [ "zlib/1.3.1#b8bc2603263cf7eccbd6e17e66b0ed76%1756234269.497", "xxhash/0.8.3#681d36a0a6111fc56e5e45ea182c19cc%1756234289.683", - "wamr/2.4.1#731b101bc8fa06d84e5c84edb4dc41a5%1756223745.11", + "wasm-xrplf/2.4.1-xrplf#dc67c558e283593ef0edd7eb00e9fa0d%1759862247.891", "sqlite3/3.49.1#8631739a4c9b93bd3d6b753bac548a63%1756234266.869", "soci/4.0.3#a9f8d773cd33e356b5879a4b0564f287%1756234262.318", "snappy/1.1.10#968fef506ff261592ec30c574d4a7809%1756234314.246", @@ -54,4 +54,4 @@ ] }, "config_requires": [] -} +} \ No newline at end of file diff --git a/conanfile.py b/conanfile.py index bc3ab9c14b..bfa256a66f 100644 --- a/conanfile.py +++ b/conanfile.py @@ -31,7 +31,7 @@ class Xrpl(ConanFile): 'openssl/3.5.4', 'soci/4.0.3', 'zlib/1.3.1', - 'wamr/2.4.1', + 'wasm-xrplf/2.4.1-xrplf', ] test_requires = [ @@ -193,7 +193,7 @@ class Xrpl(ConanFile): 'protobuf::libprotobuf', 'soci::soci', 'sqlite3::sqlite', - 'wamr::wamr', + 'wasm-xrplf::wasm-xrplf', 'xxhash::xxhash', 'zlib::zlib', ] diff --git a/external/wamr/conanfile.py b/external/wamr/conanfile.py deleted file mode 100644 index 7057ef9808..0000000000 --- a/external/wamr/conanfile.py +++ /dev/null @@ -1,88 +0,0 @@ -from conan import ConanFile, tools -from conan.tools.cmake import CMake, CMakeToolchain, CMakeDeps, cmake_layout -#from conan.tools.files import (apply_conandata_patches, export_conandata_patches,) -from conan.tools.scm import Git - -# import os - -required_conan_version = ">=1.55.0" - - -class WamrConan(ConanFile): - name = "wamr" - version = "2.4.1" - license = "Apache License v2.0" - url = "https://github.com/ripple/wasm-micro-runtime.git" - description = "Webassembly micro runtime" - package_type = "library" - settings = "os", "compiler", "build_type", "arch" - options = {"shared": [True, False], "fPIC": [True, False]} - default_options = {"shared": False, "fPIC": True} - # requires = [("llvm/20.1.1@")] - - def export_sources(self): - #export_conandata_patches(self) - pass - - # def build_requirements(self): - # self.tool_requires("llvm/20.1.1") - - def config_options(self): - if self.settings.os == "Windows": - del self.options.fPIC - - def layout(self): - cmake_layout(self, src_folder="src") - - def source(self): - git = Git(self) - git.fetch_commit( - url="https://github.com/ripple/wasm-micro-runtime.git", - commit="a87e56fe8042bbe3ed99a514333ddef42e6c2a41", - ) - # get(self, **self.conan_data["sources"][self.version], strip_root=True) - - def generate(self): - tc = CMakeToolchain(self) - - tc.variables["WAMR_BUILD_INTERP"] = 1 - tc.variables["WAMR_BUILD_FAST_INTERP"] = 1 - tc.variables["WAMR_BUILD_INSTRUCTION_METERING"] = 1 - tc.variables["WAMR_BUILD_AOT"] = 0 - tc.variables["WAMR_BUILD_JIT"] = 0 - tc.variables["WAMR_BUILD_FAST_JIT"] = 0 - tc.variables["WAMR_BUILD_SIMD"] = 0 - tc.variables["WAMR_BUILD_LIB_PTHREAD"] = 0 - tc.variables["WAMR_BUILD_LIB_WASI_THREADS"] = 0 - tc.variables["WAMR_BUILD_TAIL_CALL"] = 1 - tc.variables["WAMR_BUILD_BULK_MEMORY"] = 0 - tc.variables["WAMR_DISABLE_HW_BOUND_CHECK"] = 1 - tc.variables["WAMR_DISABLE_STACK_HW_BOUND_CHECK"] = 1 - tc.variables["WAMR_BH_LOG"] = "wamr_log_to_rippled" - - tc.generate() - - # This generates "foo-config.cmake" and "bar-config.cmake" in self.generators_folder - deps = CMakeDeps(self) - deps.generate() - - def build(self): - #apply_conandata_patches(self) - cmake = CMake(self) - cmake.verbose = True - cmake.configure() - cmake.build() - # self.run(f'echo {self.source_folder}') - # Explicit way: - # self.run('cmake %s/hello %s' % (self.source_folder, cmake.command_line)) - # self.run("cmake --build . %s" % cmake.build_config) - - def package(self): - cmake = CMake(self) - cmake.verbose = True - cmake.install() - - def package_info(self): - self.cpp_info.libs = ["iwasm"] - self.cpp_info.names["cmake_find_package"] = "wamr" - self.cpp_info.names["cmake_find_package_multi"] = "wamr" From 101f285bcd64740b0bedd4a6164915c89ae64c16 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Fri, 24 Oct 2025 16:01:45 -0400 Subject: [PATCH 021/137] return size from updateData --- src/test/app/HostFuncImpl_test.cpp | 2 +- src/xrpld/app/wasm/detail/HostFuncImpl.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 8dd83fc74a..3835b475a6 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -1315,7 +1315,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Should succeed for small data std::vector data(10, 0x42); auto const result = hfs.updateData(Slice(data.data(), data.size())); - BEAST_EXPECT(result.has_value() && result.value() == 0); + BEAST_EXPECT(result.has_value() && result.value() == data.size()); // Should fail for too large data std::vector bigData(maxWasmDataLength + 1, 0x42); diff --git a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp index f6517767dc..ca87b4fe30 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp @@ -431,7 +431,7 @@ WasmHostFunctionsImpl::updateData(Slice const& data) return Unexpected(HostFunctionError::DATA_FIELD_TOO_LARGE); } data_ = Bytes(data.begin(), data.end()); - return 0; + return data_.size(); } Expected From 29f5430881efc0de605e240e10a6a9337f2939ef Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Fri, 24 Oct 2025 16:05:38 -0400 Subject: [PATCH 022/137] fix bug --- src/xrpld/app/wasm/detail/HostFuncImpl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp index ca87b4fe30..b21a3d8b62 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp @@ -431,7 +431,7 @@ WasmHostFunctionsImpl::updateData(Slice const& data) return Unexpected(HostFunctionError::DATA_FIELD_TOO_LARGE); } data_ = Bytes(data.begin(), data.end()); - return data_.size(); + return data_->size(); } Expected From 0c65a386b5df9f898c911adc2e0520d4e2aca777 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Fri, 24 Oct 2025 18:01:01 -0400 Subject: [PATCH 023/137] fix tests --- src/test/app/TestHostFunctions.h | 2 +- .../all_host_functions/src/lib.rs | 2 +- .../wasm_fixtures/codecov_tests/src/lib.rs | 2 +- src/test/app/wasm_fixtures/fixtures.cpp | 372 +++++++++--------- 4 files changed, 189 insertions(+), 189 deletions(-) diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index 11d613bc8d..040db53f10 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -292,7 +292,7 @@ public: Expected updateData(Slice const& data) override { - return 0; + return data.size(); } Expected diff --git a/src/test/app/wasm_fixtures/all_host_functions/src/lib.rs b/src/test/app/wasm_fixtures/all_host_functions/src/lib.rs index c8a27aed87..942e1c67c6 100644 --- a/src/test/app/wasm_fixtures/all_host_functions/src/lib.rs +++ b/src/test/app/wasm_fixtures/all_host_functions/src/lib.rs @@ -757,7 +757,7 @@ fn test_data_update_functions() -> i32 { let update_result = unsafe { host::update_data(update_payload.as_ptr(), update_payload.len()) }; - if update_result != 0 { + if update_result != update_payload.len() as i32 { let _ = trace_num("ERROR: update_data failed:", update_result as i64); return -701; // Data update failed } diff --git a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs index f02550ba96..8d72443fb7 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs +++ b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs @@ -162,7 +162,7 @@ pub extern "C" fn finish() -> i32 { ); check_result( unsafe { host::update_data(account.0.as_ptr(), account.0.len()) }, - 0, + 20, "update_data", ); with_buffer::<32, _, _>(|ptr, len| { diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index ea46b49d39..7db468bb2b 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -8659,195 +8659,195 @@ extern std::string const allHostFunctionsWasmHex = "08686f73745f6c69620b7570646174655f64617461000103060506060a0b04050301001106" "19037f01418080c0000b7f0041af99c0000b7f0041b099c0000b072e04066d656d6f727902" "000666696e697368001e0a5f5f646174615f656e6403010b5f5f686561705f626173650302" - "0aff1b051900200241094f0440000b20002002360204200020013602000b1900200241214f" + "0a821c051900200241094f0440000b20002002360204200020013602000b1900200241214f" "0440000b20002002360204200020013602000b970101057f230041206b2201240020014118" "6a22044100360200200141106a220542003703002001420037030802404181802020014108" "6a4114100022034114470440024020034100480440200020033602040c010b2000417f3602" "040b410121020c010b20002001290308370001200041116a2004280200360000200041096a" - "20052903003700000b200020023a0000200141206a24000b460020012d0000410146044041" - "8080c000410b20013402041001000b20002001290001370000200041106a200141116a2800" - "00360000200041086a200141096a2900003700000be81901097f230041b0036b2200240041" - "8b80c000411b41004100410010021a41a680c000411941004100410010021a41e780c00041" - "2b41004100410010021a027f02400240024002400240024002401003220141004a04404192" - "81c00041172001ad10011a1004220141004c0d0141a981c00041132001ad10011a200041c8" - "016a22034200370300200041c0016a22054200370300200041b8016a220442003703002000" - "42003703b001200041b0016a22064120100522014120470d0241bc81c00041132006412041" - "0110021a41cf81c000412041004100410010021a41dc82c000412e41004100410010021a20" - "0041a0016a410036020020004198016a420037030020004200370390014181802020004190" - "016a22024114100022014114470d03418a83c00041142002411410061a2000420037037041" - "888018200041f0006a22024108100022014108470d04419e83c0004117420810011a41b583" - "c000412820024108410110021a2000410036025041848008200041d0006a22024104100022" - "014104470d0541dd83c000411520024104410110021a200041013b003c2003420037030020" - "05420037030020044200370300200042003703b00102402000413c6a410220064120100722" - "0141004e044041f283c00041142001ad10011a200041306a20062001101b418684c000410d" - "20002802302000280234410110021a0c010b419384c00041292001ac10011a0b41bc84c000" - "41154183803c1008ac10011a41d184c00041134189803c1008ac10011a02402000413c6a41" - "021009220141004e044041e484c00041142001ad10011a0c010b41f884c000412d2001ac10" - "011a0b41a585c000412341004100410010021a41de86c000413341004100410010021a2000" - "420037037041828018200041f0006a22014108100a220241004c0d06200241084604404191" - "87c000412b420810011a41bc87c000412f20014108410110021a0c080b41eb87c000412f20" - "02ad10011a200041286a200041f0006a2002101a419a88c00041172000280228200028022c" - "410110021a0c070b41bf82c000411d2001ac10011a419b7f0c070b419a82c00041252001ac" - "10011a419a7f0c060b41ef81c000412b2001ac10011a41997f0c050b41b486c000412a2001" - "ac10011a41b77e0c040b41f385c00041c1002001ac10011a41b67e0c030b41c885c000412b" - "2001ac10011a41b57e0c020b41b188c00041c5002002ac10011a0b200041a0016a41003602" - "0020004198016a4200370300200042003703900102404181802020004190016a2202411410" - "0a220141004a044041f688c000411e2002411410061a0c010b419489c00041332001ac1001" - "1a0b200041013b0050200041c8016a4200370300200041c0016a4200370300200041b8016a" - "4200370300200042003703b0010240200041d0006a4102200041b0016a22014120100b2202" - "41004e044041c789c000411c2002ad10011a200041206a20012002101b41e389c000411520" - "002802202000280224410110021a0c010b41f889c00041392002ac10011a0b41b18ac00041" - "244183803c100cac10011a0240200041d0006a4102100d220141004e044041d58ac000411c" - "2001ad10011a0c010b41f18ac000413d2001ac10011a0b41ae8bc000412841004100410010" - "021a41d68bc000412f41004100410010021a200041b0016a2202101c200041f0006a220120" - "02101d200041a8016a4200370300200041a0016a420037030020004198016a420037030020" - "00420037039001024002400240024002402001411420004190016a22024120100e22014120" - "460440200241204100100f220441004a044041858cc00041232004ad10011a200042003703" - "50200441828018200041d0006a220141081010220241004c0d022002410846044041a88cc0" - "00412a420810011a41d28cc000412e20014108410110021a0c060b41808dc000412e2002ad" - "10011a200041186a200041d0006a2002101a41ae8dc00041162000280218200028021c4101" - "10021a0c050b41e68fc000413c2004ac10011a200041c8016a4200370300200041c0016a42" - "00370300200041b8016a4200370300200042003703b001410141828018200041b0016a4120" - "101022014100480d020c030b41ba92c000412e2001ac10011a41ef7c0c050b41c48dc00041" - "2b2002ac10011a0c020b41a290c00041c1002001ac10011a0b200041013b00504101200041" - "d0006a4102200041b0016a412010112201410048044041e390c00041352001ac10011a0b41" - "014183803c101222014100480440419891c00041322001ac10011a0b4101200041d0006a41" - "0210132201410048044041ca91c00041392001ac10011a0b418392c0004137410041004100" - "10021a0c010b200041013b003c200041c8016a4200370300200041c0016a42003703002000" - "41b8016a4200370300200042003703b001024020042000413c6a4102200041b0016a220141" - "201011220241004e044041ef8dc000411b2002ad10011a200041106a20012002101b418a8e" - "c000411420002802102000280214410110021a0c010b419e8ec00041312002ac10011a0b41" - "cf8ec000412320044183803c1012ac10011a024020042000413c6a41021013220141004e04" - "4041f28ec000411b2001ad10011a0c010b418d8fc00041352001ac10011a0b41c28fc00041" - "2441004100410010021a0b41e892c000412f41004100410010021a200041b0016a2201101c" - "2000413c6a22042001101d200041e8006a4200370300200041e0006a4200370300200041d8" - "006a4200370300200042003703500240024002400240024020044114200041d0006a220241" - "20100e22014120460440419793c000410f20024120410110021a20004188016a4200370300" - "20004180016a4200370300200041f8006a4200370300200042003703700240200441142004" - "411441a693c0004109200041f0006a220141201014220241004a0440200041086a20012002" - "101b41ae93c00041122000280208200028020c410110021a0c010b41c093c000413c2002ac" - "10011a0b200041a8016a22084200370300200041a0016a2203420037030020004198016a22" - "05420037030020004200370390012000413c6a2202411441e80720004190016a2207412010" - "1522014120470d0141fc93c000410e20074120410110021a200041c8016a42003703002000" - "41c0016a4200370300200041b8016a4200370300200042003703b00120024114412a200041" - "b0016a22044120101622014120470d02418a94c000410e20044120410110021a419894c000" - "412441004100410010021a419195c000412541004100410010021a20004188016a42003703" - "0020004180016a4200370300200041f8006a42003703002000420037037041b695c0004117" - "200041f0006a22024120101722014120470d0341cd95c000410b41b695c000411741011002" - "1a41d895c000411120024120410110021a2004101c200041d0006a22062004101d20084200" - "3703002003420037030020054200370300200042003703900102404100200422036b410371" - "220220036a220520034d0d0020020440200221010340200341003a0000200341016a210320" - "0141016b22010d000b0b200241016b4107490d000340200341003a0000200341076a41003a" - "0000200341066a41003a0000200341056a41003a0000200341046a41003a0000200341036a" - "41003a0000200341026a41003a0000200341016a41003a0000200341086a22032005470d00" - "0b0b200541800220026b2201417c716a220320054b0440034020054100360200200541046a" - "22052003490d000b0b024020032001410371220120036a22024f0d00200122050440034020" - "0341003a0000200341016a2103200541016b22050d000b0b200141016b4107490d00034020" - "0341003a0000200341076a41003a0000200341066a41003a0000200341056a41003a000020" - "0341046a41003a0000200341036a41003a0000200341026a41003a0000200341016a41003a" - "0000200341086a22032002470d000b0b024020064114200741202004418002101822014100" - "4a044041e995c00041102001ad10011a20014181024f0d0641f995c0004109200420014101" - "10021a0c010b418296c000412e2001ac10011a0b41b096c000411241c296c0004107410110" - "0222014100480d0541c996c000411d2001ad10011a41e696c0004111422a10014100480440" - "41ad97c000411a42a47b10011a41a47b0c070b41f796c000411c420010011a419397c00041" - "1a41004100410010021a41ff97c000412941004100410010021a41a898c000412810192201" - "45044041d098c000412741a898c0004128410110021a41f798c000411e4100410041001002" - "1a41bf80c000412841004100410010021a41010c070b419599c000411a2001ac10011a41c3" - "7a0c060b41f494c000411d2001ac10011a418b7c0c050b41d894c000411c2001ac10011a41" - "897c0c040b41bc94c000411c2001ac10011a41887c0c030b41dd97c00041222001ac10011a" - "41a77b0c020b000b41c797c00041162001ac10011a41a57b0b200041b0036a24000b0bb919" - "0100418080c0000baf196572726f725f636f64653d3d3d3d20484f53542046554e4354494f" - "4e532054455354203d3d3d54657374696e6720323620686f73742066756e6374696f6e7353" - "5543434553533a20416c6c20686f73742066756e6374696f6e207465737473207061737365" - "64212d2d2d2043617465676f727920313a204c6564676572204865616465722046756e6374" - "696f6e73202d2d2d4c65646765722073657175656e6365206e756d6265723a506172656e74" - "206c65646765722074696d653a506172656e74206c656467657220686173683a5355434345" - "53533a204c6564676572206865616465722066756e6374696f6e734552524f523a20676574" - "5f706172656e745f6c65646765725f686173682077726f6e67206c656e6774683a4552524f" - "523a206765745f706172656e745f6c65646765725f74696d65206661696c65643a4552524f" - "523a206765745f6c65646765725f73716e206661696c65643a2d2d2d2043617465676f7279" - "20323a205472616e73616374696f6e20446174612046756e6374696f6e73202d2d2d547261" - "6e73616374696f6e204163636f756e743a5472616e73616374696f6e20466565206c656e67" - "74683a5472616e73616374696f6e20466565202873657269616c697a65642058525020616d" - "6f756e74293a5472616e73616374696f6e2053657175656e63653a4e657374656420666965" - "6c64206c656e6774683a4e6573746564206669656c643a494e464f3a206765745f74785f6e" - "65737465645f6669656c64206e6f74206170706c696361626c653a5369676e657273206172" - "726179206c656e6774683a4d656d6f73206172726179206c656e6774683a4e657374656420" - "6172726179206c656e6774683a494e464f3a206765745f74785f6e65737465645f61727261" - "795f6c656e206e6f74206170706c696361626c653a535543434553533a205472616e736163" - "74696f6e20646174612066756e6374696f6e734552524f523a206765745f74785f6669656c" - "642853657175656e6365292077726f6e67206c656e6774683a4552524f523a206765745f74" - "785f6669656c6428466565292077726f6e67206c656e677468202865787065637465642038" - "20627974657320666f7220585250293a4552524f523a206765745f74785f6669656c642841" - "63636f756e74292077726f6e67206c656e6774683a2d2d2d2043617465676f727920333a20" - "43757272656e74204c6564676572204f626a6563742046756e6374696f6e73202d2d2d4375" - "7272656e74206f626a6563742062616c616e6365206c656e677468202858525020616d6f75" - "6e74293a43757272656e74206f626a6563742062616c616e6365202873657269616c697a65" - "642058525020616d6f756e74293a43757272656e74206f626a6563742062616c616e636520" - "6c656e67746820286e6f6e2d58525020616d6f756e74293a43757272656e74206f626a6563" - "742062616c616e63653a494e464f3a206765745f63757272656e745f6c65646765725f6f62" - "6a5f6669656c642842616c616e636529206661696c656420286d6179206265206578706563" - "746564293a43757272656e74206c6564676572206f626a656374206163636f756e743a494e" - "464f3a206765745f63757272656e745f6c65646765725f6f626a5f6669656c64284163636f" - "756e7429206661696c65643a43757272656e74206e6573746564206669656c64206c656e67" - "74683a43757272656e74206e6573746564206669656c643a494e464f3a206765745f637572" - "72656e745f6c65646765725f6f626a5f6e65737465645f6669656c64206e6f74206170706c" - "696361626c653a43757272656e74206f626a656374205369676e657273206172726179206c" - "656e6774683a43757272656e74206e6573746564206172726179206c656e6774683a494e46" - "4f3a206765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f61727261" - "795f6c656e206e6f74206170706c696361626c653a535543434553533a2043757272656e74" - "206c6564676572206f626a6563742066756e6374696f6e732d2d2d2043617465676f727920" - "343a20416e79204c6564676572204f626a6563742046756e6374696f6e73202d2d2d537563" - "6365737366756c6c7920636163686564206f626a65637420696e20736c6f743a4361636865" - "64206f626a6563742062616c616e6365206c656e677468202858525020616d6f756e74293a" - "436163686564206f626a6563742062616c616e6365202873657269616c697a656420585250" - "20616d6f756e74293a436163686564206f626a6563742062616c616e6365206c656e677468" - "20286e6f6e2d58525020616d6f756e74293a436163686564206f626a6563742062616c616e" - "63653a494e464f3a206765745f6c65646765725f6f626a5f6669656c642842616c616e6365" - "29206661696c65643a436163686564206e6573746564206669656c64206c656e6774683a43" - "6163686564206e6573746564206669656c643a494e464f3a206765745f6c65646765725f6f" - "626a5f6e65737465645f6669656c64206e6f74206170706c696361626c653a436163686564" - "206f626a656374205369676e657273206172726179206c656e6774683a436163686564206e" - "6573746564206172726179206c656e6774683a494e464f3a206765745f6c65646765725f6f" - "626a5f6e65737465645f61727261795f6c656e206e6f74206170706c696361626c653a5355" - "43434553533a20416e79206c6564676572206f626a6563742066756e6374696f6e73494e46" - "4f3a2063616368655f6c65646765725f6f626a206661696c65642028657870656374656420" - "776974682074657374206669787475726573293a494e464f3a206765745f6c65646765725f" - "6f626a5f6669656c64206661696c656420617320657870656374656420286e6f2063616368" - "6564206f626a656374293a494e464f3a206765745f6c65646765725f6f626a5f6e65737465" - "645f6669656c64206661696c65642061732065787065637465643a494e464f3a206765745f" - "6c65646765725f6f626a5f61727261795f6c656e206661696c656420617320657870656374" - "65643a494e464f3a206765745f6c65646765725f6f626a5f6e65737465645f61727261795f" - "6c656e206661696c65642061732065787065637465643a535543434553533a20416e79206c" - "6564676572206f626a6563742066756e6374696f6e732028696e7465726661636520746573" - "746564294552524f523a206163636f756e745f6b65796c6574206661696c656420666f7220" - "63616368696e6720746573743a2d2d2d2043617465676f727920353a204b65796c65742047" - "656e65726174696f6e2046756e6374696f6e73202d2d2d4163636f756e74206b65796c6574" - "3a546573745479706543726564656e7469616c206b65796c65743a494e464f3a2063726564" - "656e7469616c5f6b65796c6574206661696c656420286578706563746564202d20696e7465" - "7266616365206973737565293a457363726f77206b65796c65743a4f7261636c65206b6579" - "6c65743a535543434553533a204b65796c65742067656e65726174696f6e2066756e637469" - "6f6e734552524f523a206f7261636c655f6b65796c6574206661696c65643a4552524f523a" - "20657363726f775f6b65796c6574206661696c65643a4552524f523a206163636f756e745f" - "6b65796c6574206661696c65643a2d2d2d2043617465676f727920363a205574696c697479" - "2046756e6374696f6e73202d2d2d48656c6c6f2c205852504c205741534d20776f726c6421" - "496e70757420646174613a5348413531322068616c6620686173683a4e4654206461746120" - "6c656e6774683a4e465420646174613a494e464f3a206765745f6e6674206661696c656420" - "286578706563746564202d206e6f2073756368204e4654293a54657374207472616365206d" - "6573736167657061796c6f616454726163652066756e6374696f6e20627974657320777269" - "7474656e3a54657374206e756d62657220747261636554726163655f6e756d2066756e6374" - "696f6e20737563636565646564535543434553533a205574696c6974792066756e6374696f" - "6e734552524f523a2074726163655f6e756d2829206661696c65643a4552524f523a207472" - "6163652829206661696c65643a4552524f523a20636f6d707574655f7368613531325f6861" - "6c66206661696c65643a2d2d2d2043617465676f727920373a204461746120557064617465" - "2046756e6374696f6e73202d2d2d55706461746564206c656467657220656e747279206461" - "74612066726f6d205741534d20746573745375636365737366756c6c792075706461746564" - "206c656467657220656e74727920776974683a535543434553533a20446174612075706461" - "74652066756e6374696f6e734552524f523a207570646174655f64617461206661696c6564" - "3a004d0970726f64756365727302086c616e6775616765010452757374000c70726f636573" - "7365642d6279010572757374631d312e39302e30202831313539653738633420323032352d" - "30392d313429002c0f7461726765745f6665617475726573022b0f6d757461626c652d676c" - "6f62616c732b087369676e2d657874"; + "20052903003700000b200020023a0000200141206a24000b450020012d0000450440200020" + "01290001370000200041106a200141116a280000360000200041086a200141096a29000037" + "00000f0b418080c000410b20013402041001000bec1901097f230041b0036b22002400418b" + "80c000411b41004100410010021a41a680c000411941004100410010021a41e780c000412b" + "41004100410010021a027f02400240024002400240024002401003220141004a0440419281" + "c00041172001ad10011a1004220141004c0d0141a981c00041132001ad10011a200041c801" + "6a22034200370300200041c0016a22054200370300200041b8016a22044200370300200042" + "003703b001200041b0016a22064120100522014120470d0241bc81c0004113200641204101" + "10021a41cf81c000412041004100410010021a41dc82c000412e41004100410010021a2000" + "41a0016a410036020020004198016a42003703002000420037039001418180202000419001" + "6a22024114100022014114470d03418a83c00041142002411410061a200042003703704188" + "8018200041f0006a22024108100022014108470d04419e83c0004117420810011a41b583c0" + "00412820024108410110021a2000410036025041848008200041d0006a2202410410002201" + "4104470d0541dd83c000411520024104410110021a200041013b003c200342003703002005" + "420037030020044200370300200042003703b00102402000413c6a41022006412010072201" + "41004e044041f283c00041142001ad10011a200041306a20062001101b418684c000410d20" + "002802302000280234410110021a0c010b419384c00041292001ac10011a0b41bc84c00041" + "154183803c1008ac10011a41d184c00041134189803c1008ac10011a02402000413c6a4102" + "1009220141004e044041e484c00041142001ad10011a0c010b41f884c000412d2001ac1001" + "1a0b41a585c000412341004100410010021a41de86c000413341004100410010021a200042" + "0037037041828018200041f0006a22014108100a220241004c0d0620024108460440419187" + "c000412b420810011a41bc87c000412f20014108410110021a0c080b41eb87c000412f2002" + "ad10011a200041286a200041f0006a2002101a419a88c00041172000280228200028022c41" + "0110021a0c070b41bf82c000411d2001ac10011a419b7f0c070b419a82c00041252001ac10" + "011a419a7f0c060b41ef81c000412b2001ac10011a41997f0c050b41b486c000412a2001ac" + "10011a41b77e0c040b41f385c00041c1002001ac10011a41b67e0c030b41c885c000412b20" + "01ac10011a41b57e0c020b41b188c00041c5002002ac10011a0b200041a0016a4100360200" + "20004198016a4200370300200042003703900102404181802020004190016a22024114100a" + "220141004a044041f688c000411e2002411410061a0c010b419489c00041332001ac10011a" + "0b200041013b0050200041c8016a4200370300200041c0016a4200370300200041b8016a42" + "00370300200042003703b0010240200041d0006a4102200041b0016a22014120100b220241" + "004e044041c789c000411c2002ad10011a200041206a20012002101b41e389c00041152000" + "2802202000280224410110021a0c010b41f889c00041392002ac10011a0b41b18ac0004124" + "4183803c100cac10011a0240200041d0006a4102100d220141004e044041d58ac000411c20" + "01ad10011a0c010b41f18ac000413d2001ac10011a0b41ae8bc00041284100410041001002" + "1a41d68bc000412f41004100410010021a200041b0016a2202101c200041f0006a22012002" + "101d200041a8016a4200370300200041a0016a420037030020004198016a42003703002000" + "420037039001024002400240024002402001411420004190016a22024120100e2201412046" + "0440200241204100100f220441004a044041858cc00041232004ad10011a20004200370350" + "200441828018200041d0006a220141081010220241004c0d022002410846044041a88cc000" + "412a420810011a41d28cc000412e20014108410110021a0c060b41808dc000412e2002ad10" + "011a200041186a200041d0006a2002101a41ae8dc00041162000280218200028021c410110" + "021a0c050b41e68fc000413c2004ac10011a200041c8016a4200370300200041c0016a4200" + "370300200041b8016a4200370300200042003703b001410141828018200041b0016a412010" + "1022014100480d020c030b41ba92c000412e2001ac10011a41ef7c0c050b41c48dc000412b" + "2002ac10011a0c020b41a290c00041c1002001ac10011a0b200041013b00504101200041d0" + "006a4102200041b0016a412010112201410048044041e390c00041352001ac10011a0b4101" + "4183803c101222014100480440419891c00041322001ac10011a0b4101200041d0006a4102" + "10132201410048044041ca91c00041392001ac10011a0b418392c000413741004100410010" + "021a0c010b200041013b003c200041c8016a4200370300200041c0016a4200370300200041" + "b8016a4200370300200042003703b001024020042000413c6a4102200041b0016a22014120" + "1011220241004e044041ef8dc000411b2002ad10011a200041106a20012002101b418a8ec0" + "00411420002802102000280214410110021a0c010b419e8ec00041312002ac10011a0b41cf" + "8ec000412320044183803c1012ac10011a024020042000413c6a41021013220141004e0440" + "41f28ec000411b2001ad10011a0c010b418d8fc00041352001ac10011a0b41c28fc0004124" + "41004100410010021a0b41e892c000412f41004100410010021a200041b0016a2201101c20" + "00413c6a22042001101d200041e8006a4200370300200041e0006a4200370300200041d800" + "6a42003703002000420037035002400240024002400240024020044114200041d0006a2202" + "4120100e22014120460440419793c000410f20024120410110021a20004188016a42003703" + "0020004180016a4200370300200041f8006a42003703002000420037037002402004411420" + "04411441a693c0004109200041f0006a220141201014220241004a0440200041086a200120" + "02101b41ae93c00041122000280208200028020c410110021a0c010b41c093c000413c2002" + "ac10011a0b200041a8016a22084200370300200041a0016a2203420037030020004198016a" + "2205420037030020004200370390012000413c6a2202411441e80720004190016a22074120" + "101522014120470d0141fc93c000410e20074120410110021a200041c8016a420037030020" + "0041c0016a4200370300200041b8016a4200370300200042003703b00120024114412a2000" + "41b0016a22044120101622014120470d02418a94c000410e20044120410110021a419894c0" + "00412441004100410010021a419195c000412541004100410010021a20004188016a420037" + "030020004180016a4200370300200041f8006a42003703002000420037037041b695c00041" + "17200041f0006a22024120101722014120470d0341cd95c000410b41b695c0004117410110" + "021a41d895c000411120024120410110021a2004101c200041d0006a22062004101d200842" + "00370300200342003703002005420037030020004200370390010240200422032003410020" + "036b41037122026a22054f0d0020020440200221010340200341003a0000200341016a2103" + "200141016b22010d000b0b200241016b4107490d000340200341003a0000200341076a4100" + "3a0000200341066a41003a0000200341056a41003a0000200341046a41003a000020034103" + "6a41003a0000200341026a41003a0000200341016a41003a0000200341086a22032005470d" + "000b0b200541800220026b2201417c716a220320054b044003402005410036020020054104" + "6a22052003490d000b0b024020032001410371220120036a22024f0d002001220504400340" + "200341003a0000200341016a2103200541016b22050d000b0b200141016b4107490d000340" + "200341003a0000200341076a41003a0000200341066a41003a0000200341056a41003a0000" + "200341046a41003a0000200341036a41003a0000200341026a41003a0000200341016a4100" + "3a0000200341086a22032002470d000b0b0240200641142007412020044180021018220141" + "004a044041e995c00041102001ad10011a20014181024f0d0641f995c00041092004200141" + "0110021a0c010b418296c000412e2001ac10011a0b41b096c000411241c296c00041074101" + "100222014100480d0541c996c000411d2001ad10011a41e696c0004111422a10014100480d" + "0641f796c000411c420010011a419397c000411a41004100410010021a41ff97c000412941" + "004100410010021a41a898c000412810192201412846044041d098c000412741a898c00041" + "28410110021a41f798c000411e41004100410010021a41bf80c00041284100410041001002" + "1a41010c080b419599c000411a2001ac10011a41c37a0c070b41f494c000411d2001ac1001" + "1a418b7c0c060b41d894c000411c2001ac10011a41897c0c050b41bc94c000411c2001ac10" + "011a41887c0c040b41dd97c00041222001ac10011a41a77b0c030b000b41c797c000411620" + "01ac10011a41a57b0c010b41ad97c000411a42a47b10011a41a47b0b200041b0036a24000b" + "0bb9190100418080c0000baf196572726f725f636f64653d3d3d3d20484f53542046554e43" + "54494f4e532054455354203d3d3d54657374696e6720323620686f73742066756e6374696f" + "6e73535543434553533a20416c6c20686f73742066756e6374696f6e207465737473207061" + "73736564212d2d2d2043617465676f727920313a204c656467657220486561646572204675" + "6e6374696f6e73202d2d2d4c65646765722073657175656e6365206e756d6265723a506172" + "656e74206c65646765722074696d653a506172656e74206c656467657220686173683a5355" + "43434553533a204c6564676572206865616465722066756e6374696f6e734552524f523a20" + "6765745f706172656e745f6c65646765725f686173682077726f6e67206c656e6774683a45" + "52524f523a206765745f706172656e745f6c65646765725f74696d65206661696c65643a45" + "52524f523a206765745f6c65646765725f73716e206661696c65643a2d2d2d204361746567" + "6f727920323a205472616e73616374696f6e20446174612046756e6374696f6e73202d2d2d" + "5472616e73616374696f6e204163636f756e743a5472616e73616374696f6e20466565206c" + "656e6774683a5472616e73616374696f6e20466565202873657269616c697a656420585250" + "20616d6f756e74293a5472616e73616374696f6e2053657175656e63653a4e657374656420" + "6669656c64206c656e6774683a4e6573746564206669656c643a494e464f3a206765745f74" + "785f6e65737465645f6669656c64206e6f74206170706c696361626c653a5369676e657273" + "206172726179206c656e6774683a4d656d6f73206172726179206c656e6774683a4e657374" + "6564206172726179206c656e6774683a494e464f3a206765745f74785f6e65737465645f61" + "727261795f6c656e206e6f74206170706c696361626c653a535543434553533a205472616e" + "73616374696f6e20646174612066756e6374696f6e734552524f523a206765745f74785f66" + "69656c642853657175656e6365292077726f6e67206c656e6774683a4552524f523a206765" + "745f74785f6669656c6428466565292077726f6e67206c656e677468202865787065637465" + "64203820627974657320666f7220585250293a4552524f523a206765745f74785f6669656c" + "64284163636f756e74292077726f6e67206c656e6774683a2d2d2d2043617465676f727920" + "333a2043757272656e74204c6564676572204f626a6563742046756e6374696f6e73202d2d" + "2d43757272656e74206f626a6563742062616c616e6365206c656e67746820285852502061" + "6d6f756e74293a43757272656e74206f626a6563742062616c616e6365202873657269616c" + "697a65642058525020616d6f756e74293a43757272656e74206f626a6563742062616c616e" + "6365206c656e67746820286e6f6e2d58525020616d6f756e74293a43757272656e74206f62" + "6a6563742062616c616e63653a494e464f3a206765745f63757272656e745f6c6564676572" + "5f6f626a5f6669656c642842616c616e636529206661696c656420286d6179206265206578" + "706563746564293a43757272656e74206c6564676572206f626a656374206163636f756e74" + "3a494e464f3a206765745f63757272656e745f6c65646765725f6f626a5f6669656c642841" + "63636f756e7429206661696c65643a43757272656e74206e6573746564206669656c64206c" + "656e6774683a43757272656e74206e6573746564206669656c643a494e464f3a206765745f" + "63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c64206e6f742061" + "70706c696361626c653a43757272656e74206f626a656374205369676e6572732061727261" + "79206c656e6774683a43757272656e74206e6573746564206172726179206c656e6774683a" + "494e464f3a206765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f61" + "727261795f6c656e206e6f74206170706c696361626c653a535543434553533a2043757272" + "656e74206c6564676572206f626a6563742066756e6374696f6e732d2d2d2043617465676f" + "727920343a20416e79204c6564676572204f626a6563742046756e6374696f6e73202d2d2d" + "5375636365737366756c6c7920636163686564206f626a65637420696e20736c6f743a4361" + "63686564206f626a6563742062616c616e6365206c656e677468202858525020616d6f756e" + "74293a436163686564206f626a6563742062616c616e6365202873657269616c697a656420" + "58525020616d6f756e74293a436163686564206f626a6563742062616c616e6365206c656e" + "67746820286e6f6e2d58525020616d6f756e74293a436163686564206f626a656374206261" + "6c616e63653a494e464f3a206765745f6c65646765725f6f626a5f6669656c642842616c61" + "6e636529206661696c65643a436163686564206e6573746564206669656c64206c656e6774" + "683a436163686564206e6573746564206669656c643a494e464f3a206765745f6c65646765" + "725f6f626a5f6e65737465645f6669656c64206e6f74206170706c696361626c653a436163" + "686564206f626a656374205369676e657273206172726179206c656e6774683a4361636865" + "64206e6573746564206172726179206c656e6774683a494e464f3a206765745f6c65646765" + "725f6f626a5f6e65737465645f61727261795f6c656e206e6f74206170706c696361626c65" + "3a535543434553533a20416e79206c6564676572206f626a6563742066756e6374696f6e73" + "494e464f3a2063616368655f6c65646765725f6f626a206661696c65642028657870656374" + "656420776974682074657374206669787475726573293a494e464f3a206765745f6c656467" + "65725f6f626a5f6669656c64206661696c656420617320657870656374656420286e6f2063" + "6163686564206f626a656374293a494e464f3a206765745f6c65646765725f6f626a5f6e65" + "737465645f6669656c64206661696c65642061732065787065637465643a494e464f3a2067" + "65745f6c65646765725f6f626a5f61727261795f6c656e206661696c656420617320657870" + "65637465643a494e464f3a206765745f6c65646765725f6f626a5f6e65737465645f617272" + "61795f6c656e206661696c65642061732065787065637465643a535543434553533a20416e" + "79206c6564676572206f626a6563742066756e6374696f6e732028696e7465726661636520" + "746573746564294552524f523a206163636f756e745f6b65796c6574206661696c65642066" + "6f722063616368696e6720746573743a2d2d2d2043617465676f727920353a204b65796c65" + "742047656e65726174696f6e2046756e6374696f6e73202d2d2d4163636f756e74206b6579" + "6c65743a546573745479706543726564656e7469616c206b65796c65743a494e464f3a2063" + "726564656e7469616c5f6b65796c6574206661696c656420286578706563746564202d2069" + "6e74657266616365206973737565293a457363726f77206b65796c65743a4f7261636c6520" + "6b65796c65743a535543434553533a204b65796c65742067656e65726174696f6e2066756e" + "6374696f6e734552524f523a206f7261636c655f6b65796c6574206661696c65643a455252" + "4f523a20657363726f775f6b65796c6574206661696c65643a4552524f523a206163636f75" + "6e745f6b65796c6574206661696c65643a2d2d2d2043617465676f727920363a205574696c" + "6974792046756e6374696f6e73202d2d2d48656c6c6f2c205852504c205741534d20776f72" + "6c6421496e70757420646174613a5348413531322068616c6620686173683a4e4654206461" + "7461206c656e6774683a4e465420646174613a494e464f3a206765745f6e6674206661696c" + "656420286578706563746564202d206e6f2073756368204e4654293a546573742074726163" + "65206d6573736167657061796c6f616454726163652066756e6374696f6e20627974657320" + "7772697474656e3a54657374206e756d62657220747261636554726163655f6e756d206675" + "6e6374696f6e20737563636565646564535543434553533a205574696c6974792066756e63" + "74696f6e734552524f523a2074726163655f6e756d2829206661696c65643a4552524f523a" + "2074726163652829206661696c65643a4552524f523a20636f6d707574655f736861353132" + "5f68616c66206661696c65643a2d2d2d2043617465676f727920373a204461746120557064" + "6174652046756e6374696f6e73202d2d2d55706461746564206c656467657220656e747279" + "20646174612066726f6d205741534d20746573745375636365737366756c6c792075706461" + "746564206c656467657220656e74727920776974683a535543434553533a20446174612075" + "70646174652066756e6374696f6e734552524f523a207570646174655f6461746120666169" + "6c65643a004d0970726f64756365727302086c616e6775616765010452757374000c70726f" + "6365737365642d6279010572757374631d312e38352e312028346562313631323530203230" + "32352d30332d313529002c0f7461726765745f6665617475726573022b0f6d757461626c65" + "2d676c6f62616c732b087369676e2d657874"; extern std::string const deepRecursionHex = "0061736d01000000013f0b60017f0060037f7f7f017f60027f7f017f60027f" @@ -9947,7 +9947,7 @@ extern std::string const codecovTestsWasmHex = "103c4189803c1010412041a881c0004120103c41014189803c1011412041c881c000411810" "3c20012000280298011012412041e081c0004117103c20012000280298011013412041f781" "c0004127103c4101200120002802980110144120419e82c000411f103c200041246a220441" - "141015410041bd82c000410b103c200041e0016a2206420037030020024200370300200342" + "141015411441bd82c000410b103c200041e0016a2206420037030020024200370300200342" "00370300200042003703c8012001200028029801200541201016412041bc8dc0004113103c" "41c882c000410c41d482c000410b41df82c000410e1017410141ed82c0004109103c200041" "b8016a200041186a290300370300200041b0016a200041106a290300370300200041a8016a" From d66e3c949e7e86c2eba68b600a0e8fb587a6b8a9 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Wed, 29 Oct 2025 12:55:07 -0400 Subject: [PATCH 024/137] Chores: Sort package list (#5963) --- CMakeLists.txt | 2 +- cmake/RippledCore.cmake | 2 +- conanfile.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 073020da4f..7fd1a9b529 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -119,8 +119,8 @@ endif() find_package(nudb REQUIRED) find_package(date REQUIRED) -find_package(xxHash REQUIRED) find_package(wasm-xrplf REQUIRED) +find_package(xxHash REQUIRED) target_link_libraries(ripple_libs INTERFACE ed25519::ed25519 diff --git a/cmake/RippledCore.cmake b/cmake/RippledCore.cmake index 2041886d21..c3800c5586 100644 --- a/cmake/RippledCore.cmake +++ b/cmake/RippledCore.cmake @@ -62,10 +62,10 @@ target_link_libraries(xrpl.imports.main date::date ed25519::ed25519 secp256k1::secp256k1 + wasm-xrplf::wasm-xrplf xrpl.libpb xxHash::xxhash $<$:antithesis-sdk-cpp> - wasm-xrplf::wasm-xrplf ) if (WIN32) diff --git a/conanfile.py b/conanfile.py index bfa256a66f..5a24ac1988 100644 --- a/conanfile.py +++ b/conanfile.py @@ -30,8 +30,8 @@ class Xrpl(ConanFile): 'nudb/2.0.9', 'openssl/3.5.4', 'soci/4.0.3', - 'zlib/1.3.1', 'wasm-xrplf/2.4.1-xrplf', + 'zlib/1.3.1', ] test_requires = [ From d0cc48c6d3022af9f5eab4445a111eb858328b93 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 29 Oct 2025 16:41:11 -0400 Subject: [PATCH 025/137] Update cmake/RippledCore.cmake Co-authored-by: Ayaz Salikhov --- cmake/RippledCore.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/cmake/RippledCore.cmake b/cmake/RippledCore.cmake index c3800c5586..6380a0bacb 100644 --- a/cmake/RippledCore.cmake +++ b/cmake/RippledCore.cmake @@ -72,7 +72,6 @@ if (WIN32) target_link_libraries(xrpl.imports.main INTERFACE ntdll) endif() - include(add_module) include(target_link_modules) From 4021a7eb28dd4fc621f98ca629d492f19cd942c8 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Fri, 31 Oct 2025 10:34:31 -0400 Subject: [PATCH 026/137] Wamr and HF security review fixes (#5965) --- src/xrpld/app/wasm/detail/HostFuncWrapper.cpp | 13 ++++++---- src/xrpld/app/wasm/detail/WamrVM.cpp | 24 ++++++++++++------- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp index d7995f6b32..95a8812f4f 100644 --- a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp @@ -44,13 +44,16 @@ setData( if (dst < 0 || dstSize < 0 || !src || srcSize < 0) return HfErrorToInt(HostFunctionError::INVALID_PARAMS); - auto memory = runtime ? runtime->getMem() : wmem(); + if (srcSize > maxWasmDataLength) + return HfErrorToInt(HostFunctionError::DATA_FIELD_TOO_LARGE); + + auto const memory = runtime ? runtime->getMem() : wmem(); // LCOV_EXCL_START if (!memory.s) return HfErrorToInt(HostFunctionError::NO_MEM_EXPORTED); // LCOV_EXCL_STOP - if (dst + dstSize > memory.s) + if ((int64_t)dst + dstSize > memory.s) return HfErrorToInt(HostFunctionError::POINTER_OUT_OF_BOUNDS); if (srcSize > dstSize) return HfErrorToInt(HostFunctionError::BUFFER_TOO_SMALL); @@ -113,8 +116,8 @@ getDataSlice( int32_t& i, bool isUpdate = false) { - auto const ptr = params->data[i].of.i32; - auto const size = params->data[i + 1].of.i32; + int64_t const ptr = params->data[i].of.i32; + int64_t const size = params->data[i + 1].of.i32; if (ptr < 0 || size < 0) return Unexpected(HostFunctionError::INVALID_PARAMS); @@ -124,7 +127,7 @@ getDataSlice( if (size > (isUpdate ? maxWasmDataLength : maxWasmParamLength)) return Unexpected(HostFunctionError::DATA_FIELD_TOO_LARGE); - auto memory = runtime ? runtime->getMem() : wmem(); + auto const memory = runtime ? runtime->getMem() : wmem(); // LCOV_EXCL_START if (!memory.s) return Unexpected(HostFunctionError::NO_MEM_EXPORTED); diff --git a/src/xrpld/app/wasm/detail/WamrVM.cpp b/src/xrpld/app/wasm/detail/WamrVM.cpp index 4d94e1cb8f..af0a7df800 100644 --- a/src/xrpld/app/wasm/detail/WamrVM.cpp +++ b/src/xrpld/app/wasm/detail/WamrVM.cpp @@ -30,6 +30,7 @@ #endif // #define SHOW_CALL_TIME 1 +#define DISABLE_WM_LOG 1 namespace ripple { @@ -95,8 +96,11 @@ wamr_log_to_rippled( char const* fmt, ...) { - beast::Journal j = WasmEngine::instance().getJournal(); +#ifdef DISABLE_WM_LOG + return; +#endif + beast::Journal j = WasmEngine::instance().getJournal(); std::ostringstream oss; // Format the variadic args @@ -142,15 +146,17 @@ print_wasm_error(std::string_view msg, wasm_trap_t* trap, beast::Journal jlog) if (error_message.num_elems) { - error_message.data[error_message.num_elems - 1] = 0; // just in case - j << "WAMR Error: " << msg << ", " << error_message.data; + j << "WAMR Error: " << msg << ", " + << std::string_view(error_message.data, error_message.num_elems - 1); } else j << "WAMR Error: " << msg; if (error_message.size) wasm_byte_vec_delete(&error_message); - wasm_trap_delete(trap); + + if (trap) + wasm_trap_delete(trap); #ifdef DEBUG_OUTPUT j << std::endl; @@ -371,6 +377,7 @@ ModuleWrapper::ModuleWrapper( { auto wimports = buildImports(s, imports); addInstance(s, maxPages, gas, wimports); + wasm_extern_vec_delete(&wimports); } } @@ -409,7 +416,7 @@ ModuleWrapper::makeImpParams(wasm_valtype_vec_t& v, WasmImportFunc const& imp) if (paramSize) { - wasm_valtype_vec_new(&v, paramSize, nullptr); + wasm_valtype_vec_new_uninitialized(&v, paramSize); v.num_elems = paramSize; } else @@ -436,7 +443,7 @@ ModuleWrapper::makeImpReturn(wasm_valtype_vec_t& v, WasmImportFunc const& imp) { if (imp.result) { - wasm_valtype_vec_new(&v, 1, nullptr); + wasm_valtype_vec_new_uninitialized(&v, 1); v.num_elems = 1; switch (*imp.result) { @@ -469,7 +476,7 @@ ModuleWrapper::buildImports( if (!importTypes.num_elems) return wimports; - wasm_extern_vec_new(&wimports, importTypes.size, nullptr); + wasm_extern_vec_new_uninitialized(&wimports, importTypes.size); wimports.num_elems = importTypes.num_elems; unsigned impCnt = 0; @@ -500,7 +507,8 @@ ModuleWrapper::buildImports( if (imp.name != fieldName) continue; - wasm_valtype_vec_t params, results; + wasm_valtype_vec_t params = WASM_EMPTY_VEC, + results = WASM_EMPTY_VEC; makeImpReturn(results, imp); makeImpParams(params, imp); From 3ffdcf8114b0563dadf15d9b7f68a7e608ab8b12 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 4 Nov 2025 13:19:40 -0500 Subject: [PATCH 027/137] allow 0-value trace amounts --- src/test/app/Wasm_test.cpp | 2 +- .../wasm_fixtures/codecov_tests/Cargo.lock | 168 +++++- .../wasm_fixtures/codecov_tests/Cargo.toml | 2 +- .../wasm_fixtures/codecov_tests/src/lib.rs | 23 +- src/test/app/wasm_fixtures/fixtures.cpp | 495 +++++++++--------- src/xrpld/app/wasm/detail/HostFuncWrapper.cpp | 2 +- 6 files changed, 425 insertions(+), 267 deletions(-) diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 00909bcbe3..1f01123829 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -648,7 +648,7 @@ struct Wasm_test : public beast::unit_test::suite Bytes const wasm(wasmStr.begin(), wasmStr.end()); TestHostFunctions hfs(env, 0); - auto const allowance = 152'154; + auto const allowance = 152'981; auto re = runEscrowWasm( wasm, ESCROW_FUNCTION_NAME, {}, &hfs, allowance, env.journal); diff --git a/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock b/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock index 000ecf39a8..101fe2eb06 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock +++ b/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock @@ -3,13 +3,169 @@ version = 4 [[package]] -name = "codecov_tests" -version = "0.0.1" +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "xrpl-wasm-std", + "generic-array", ] [[package]] -name = "xrpl-wasm-std" -version = "0.5.1-devnet5" -source = "git+https://github.com/ripple/craft.git?branch=main#638276c92d790f5b738faa9f42855f02a2c7c7dc" +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "codecov_tests" +version = "0.0.1" +dependencies = [ + "xrpl-wasm-stdlib", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "generic-array" +version = "0.14.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "libc" +version = "0.2.177" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" + +[[package]] +name = "proc-macro2" +version = "1.0.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "syn" +version = "2.0.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tinyvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "typenum" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + +[[package]] +name = "unicode-ident" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "xrpl-address-macro" +version = "0.1.0" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=main#57538e714ee1185e40391ff7ec7620d0e74d775b" +dependencies = [ + "bs58", + "quote", + "sha2", + "syn", +] + +[[package]] +name = "xrpl-wasm-stdlib" +version = "0.7.1" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=main#57538e714ee1185e40391ff7ec7620d0e74d775b" +dependencies = [ + "xrpl-address-macro", +] diff --git a/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml b/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml index ea776999a9..bd67fd6c1a 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml +++ b/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml @@ -15,4 +15,4 @@ opt-level = 's' panic = "abort" [dependencies] -xrpl-std = { git = "https://github.com/ripple/craft.git", branch = "main", package = "xrpl-wasm-std" } +xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", branch = "main", package = "xrpl-wasm-stdlib" } diff --git a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs index 8d72443fb7..a5624b1df0 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs +++ b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs @@ -7,10 +7,10 @@ use core::panic; use xrpl_std::core::current_tx::escrow_finish::{get_current_escrow_finish, EscrowFinish}; use xrpl_std::core::current_tx::traits::TransactionCommonFields; use xrpl_std::core::locator::Locator; -use xrpl_std::core::types::amount::asset::Asset; -use xrpl_std::core::types::amount::asset::XrpAsset; -use xrpl_std::core::types::amount::mpt_id::MptId; +use xrpl_std::core::types::issue::Issue; +use xrpl_std::core::types::issue::XrpIssue; use xrpl_std::core::types::keylets; +use xrpl_std::core::types::mpt_id::MptId; use xrpl_std::host; use xrpl_std::host::error_codes; use xrpl_std::host::trace::{trace, trace_num as trace_number}; @@ -264,6 +264,19 @@ pub extern "C" fn finish() -> i32 { 19, "trace_amount", ); + let amount = &[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]; // 0 drops of XRP + check_result( + unsafe { + host::trace_amount( + message.as_ptr(), + message.len(), + amount.as_ptr(), + amount.len(), + ) + }, + 18, + "trace_amount_zero", + ); // ######################################## // Step #2: Test set_data edge cases @@ -482,8 +495,8 @@ pub extern "C" fn finish() -> i32 { ) }); - // Asset - let asset1_bytes = Asset::XRP(XrpAsset {}).as_bytes(); + // Issue + let asset1_bytes = Issue::XRP(XrpIssue {}).as_bytes(); with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 7db468bb2b..c447ad5d18 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -9906,261 +9906,250 @@ extern std::string const codecovTestsWasmHex = "61696e5f6b65796c6574000108686f73745f6c69620e7369676e6572735f6b65796c657400" "0008686f73745f6c69620d7469636b65745f6b65796c6574000108686f73745f6c69620c76" "61756c745f6b65796c657400010303020a0505030100110619037f01418080c0000b7f0041" - "f69dc0000b7f0041809ec0000b072e04066d656d6f727902000666696e697368003d0a5f5f" - "646174615f656e6403010b5f5f686561705f6261736503020ac12a02460002402000200147" + "8f9ec0000b7f0041909ec0000b072e04066d656d6f727902000666696e697368003d0a5f5f" + "646174615f656e6403010b5f5f686561705f6261736503020a892702460002402000200147" "04402002200341004100410010001a20004100480d01418b80c000410b2000ad1001000b20" - "0220032000ac10011a0f0b418b80c000410b2000ac1001000bf72902087f027e230041f001" + "0220032000ac10011a0f0b418b80c000410b2000ac1001000bbf26020a7f017e230041f001" "6b22002400419680c000412341004100410010001a100241b9e00041b980c000410e103c10" - "0341b2920441c780c0004116103c200041f0006a22034200370300200041e8006a22044200" - "370300200041e0006a2202420037030020004200370358200041d8006a2201412010044120" - "41a58cc0004116103c1005410a41dd80c000410c103c200041186a428182848890a0c08001" - "370300200041106a428182848890a0c08001370300200041086a428182848890a0c0800137" - "03002000428182848890a0c0800137030041e980c000410e1006410141f780c0004111103c" - "200041201006410141f780c0004111103c2004410036020020024200370300200042003703" - "5841818020200141141007220541144604400240200041266a20002d005a3a000020002000" - "29005f3703c8012000200041e4006a2900003700cd01200041306a20002900cd0137000020" - "0020002f01583b01242000200028005b360027200020002903c80137002b20034200370300" - "200442003703002002420037030020004200370358200041246a4114200141201008220541" - "20470d002000413a6a20002d005a3a0000200041d0016a200041e7006a2900002208370300" - "200041d8016a200041ef006a2900002209370300200041c7006a2008370000200041cf006a" - "2009370000200041d7006a200041f7006a2d00003a0000200020002f01583b013820002000" - "28005b36003b2000200029005f37003f200041386a4120410010094101418881c000411010" - "3c2004410036020020024200370300200042003703584181802020014114100a411441bb8c" - "c000411c103c20044100360200200242003703002000420037035841014181802020014114" - "100b411441d78cc0004114103c02402001410020016b41037122046a220220014d0d002004" - "0440200421050340200141003a0000200141016a2101200541016b22050d000b0b20044101" - "6b4107490d000340200141003a0000200141076a41003a0000200141066a41003a00002001" - "41056a41003a0000200141046a41003a0000200141036a41003a0000200141026a41003a00" - "00200141016a41003a0000200141086a22012002470d000b0b200241c40020046b2204417c" - "716a220120024b0440034020024100360200200241046a22022001490d000b0b0240200120" - "04410371220420016a22054f0d002004220204400340200141003a0000200141016a210120" - "0241016b22020d000b0b200441016b4107490d000340200141003a0000200141076a41003a" - "0000200141066a41003a0000200141056a41003a0000200141046a41003a0000200141036a" - "41003a0000200141026a41003a0000200141016a41003a0000200141086a22012005470d00" - "0b0b2000418180203602c801410021010340200641c000490440200041d8006a20066a2000" - "41c8016a20016a2d00003a0000200020002802980141016a220636029801200141016a2201" - "4104470d010b0b200041d8016a22024100360200200041d0016a2203420037030020004200" - "3703c801200041d8006a22012006200041c8016a22054114100c411441eb8cc0004113103c" - "2002410036020020034200370300200042003703c801200120002802980120054114100d41" - "1441fe8cc0004123103c2002410036020020034200370300200042003703c8014101200120" - "002802980120054114100e411441a18dc000411b103c4189803c100f4120419881c0004110" - "103c4189803c1010412041a881c0004120103c41014189803c1011412041c881c000411810" - "3c20012000280298011012412041e081c0004117103c20012000280298011013412041f781" - "c0004127103c4101200120002802980110144120419e82c000411f103c200041246a220441" - "141015411441bd82c000410b103c200041e0016a2206420037030020024200370300200342" - "00370300200042003703c8012001200028029801200541201016412041bc8dc0004113103c" - "41c882c000410c41d482c000410b41df82c000410e1017410141ed82c0004109103c200041" - "b8016a200041186a290300370300200041b0016a200041106a290300370300200041a8016a" - "200041086a290300370300200020002903003703a001200241003b01002003420037030020" - "0042003703c80120044114200041a0016a22074120200541121018411241cf8dc000410710" - "3c2002410036020020034200370300200042003703c80120074120200541141019411441d6" - "8dc000410e103c200041003602c8012007412020054104101a410441e48dc000410d103c20" - "074120101b410841f682c000410d103c20074120101c410a418383c0004114103c20004100" - "3602c8012007412020054104101d410441f18dc000410e103c419783c000410d2004411410" - "1e412f41a483c000410d103c419783c000410d41b183c0004108101f411341b983c000410c" - "103c417f41041004417141c583c000411e103c200041003602c8012005417f1004417141ff" - "8dc000411e103c200041ca016a41003a0000200041003b01c801200541031004417d419d8e" - "c0004124103c200041003602c8012005418094ebdc031004417341c18ec0004123103c4197" - "83c000410d20044114101e412f41a483c000410d103c419783c000410d41b183c000410810" - "1f411341b983c000410c103c20064200370300200242003703002003420037030020004200" - "3703c801200041d894ebdc036a220741082005412041001020417341e48ec0004117103c20" - "0642003703002002420037030020034200370300200042003703c801200120002802980120" - "05412041001020417141fb8ec0004119103c4102100f416f41e383c000411f103c417f2000" - "2802980110124171418284c000411f103c2001417f1012417141a184c000411f103c200141" - "81201012417441c084c0004120103c20072000280298011012417341e084c000411f103c20" - "0720002802980141011009417341ff84c0004118103c200120002802980141011009417141" - "9785c000411a103c200642003703002002420037030020034200370300200042003703c801" - "2007200028029801200541201008417341948fc0004116103c200642003703002002420037" - "030020034200370300200042003703c8012001200028029801200541201008417141aa8fc0" - "004118103c200642003703002002420037030020034200370300200042003703c801200441" - "14200441142007200028029801200541201021417341c28fc000411c103c20064200370300" - "2002420037030020034200370300200042003703c801200441142004411420012000280298" - "01200541201021417141de8fc000411e103c20064200370300200242003703002003420037" - "0300200042003703c80141e29dc00041142007200028029801200541201022417341fc8fc0" - "004119103c200642003703002002420037030020034200370300200042003703c80141e29d" - "c000411420012000280298012005412010224171419590c000411f103c2006420037030020" - "02420037030020034200370300200042003703c80141e29dc000411441b185c00041142005" - "41201022417141b490c0004129103c20064200370300200242003703002003420037030020" - "0042003703c80141c585c000412841e29dc0004114200541201022417141dd90c000412510" - "3c200041dc016a200041346a280100360200200041d4016a2000412c6a2901003702002000" - "20002901243702cc01200041808080083602c801200041003b01c0012005411841e29dc000" - "4114200041c0016a2203410210224171418291c000410e103c2007200028029801422a1001" - "417341ed85c0004111103c200041003b01c0014102200341021007416f419091c000411b10" - "3c200041003b01c001410220034102100a416f41ab91c000412b103c200041003b01c00141" - "01410220034102100b416f41d691c0004123103c4102100f416f41e383c000411f103c4102" - "1010416f41fe85c000412f103c410141021011416f41ad86c0004127103c41e980c0004181" - "201006417441d486c000411f103c41e980c00041c1001006417441f386c000411a103c2000" - "41003b01c001200141812020034102100c417441f991c0004121103c200041003b01c00120" - "0141812020034102100d4174419a92c0004131103c200041003b01c0014101200141812020" - "034102100e417441cb92c0004129103c200141812010124174418d87c0004125103c200141" - "81201013417441b287c0004135103c410120014181201014417441e787c000412d103c2001" - "41812010154174419488c0004119103c419783c00041812041d482c000410b41df82c00041" - "0e1017417441ed82c0004109103c419783c000410d41d482c00041812041df82c000410e10" - "17417441ed82c0004109103c419783c000410d41d482c000410b41df82c000418120101741" - "7441ed82c0004109103c200041003b01c0012001418120200341021016417441f492c00041" - "21103c200041003b01c00141e29dc00041812041e29dc00041142003410210224174419593" - "c0004118103c200041003b01c00120044114200441142001418120200341021023417441ad" - "93c000411f103c200041003b01c001200541812020044114200341021024417441cc93c000" - "4122103c419783c000410d200720002802980141001000417341ad88c000410f103c200042" - "d487b6f4c7d4b1c0003700c001419783c000410d200041c095ebdc036a2206410810254173" - "41bc88c000411c103c419783c000410d2007200028029801101f417341d888c0004116103c" - "20064108200341081026417341ee88c0004118103c200341082006410810264173418689c0" - "004118103c200041003b01ec012006410820034108200041ec016a22024102410010274173" - "41ee93c0004114103c200041003b01ec012003410820064108200241024100102741734182" - "94c0004114103c200041003b01ec01200641082003410820024102410010284173419694c0" - "004119103c200041003b01ec0120034108200641082002410241001028417341af94c00041" - "19103c200041003b01ec0120064108200341082002410241001029417341c894c000411910" - "3c200041003b01ec0120034108200641082002410241001029417341e194c0004119103c20" - "0041003b01ec012006410820034108200241024100102a417341fa94c0004117103c200041" - "003b01ec012003410820064108200241024100102a4173419195c0004117103c200041003b" - "01ec01200641084103200241024100102b417341a895c0004114103c200041003b01ec0120" - "0641084103200241024100102c417341bc95c0004113103c200041003b01ec012006410820" - "0241024100102d417341cf95c0004113103c2001200028029801410010094171419e89c000" - "4123103c200041003b01ec01200441142001200028029801200241021018417141e295c000" - "411a103c200041003b01ec012001200028029801200241021019417141fc95c0004121103c" - "200041003b01ec01200120002802980120024102101a4171419d96c0004120103c20012000" - "28029801101b417141c189c0004120103c2001200028029801101c417141e189c000412710" - "3c200041003602ec01200120002802980120024104101d417141bd96c0004121103c200041" - "003b01ec012001200028029801200241021008417141de96c0004123103c200041003b01ec" - "012001200028029801410120024102102e4171418197c0004121103c200041003b01ec0120" - "0120002802980122062004411420012006200241021023417141a297c0004127103c200041" - "003b01ec01200441142001200028029801220620012006200241021023417141c997c00041" - "27103c200041003b01ec0120012000280298012004411420024102102f417141f097c00041" - "25103c200041003b01ec0120044114200120002802980120024102102f4171419598c00041" - "25103c200041003b01ec01200120002802980120044114200241021030417141ba98c00041" - "2c103c200041003b01ec01200441142001200028029801200241021030417141e698c00041" - "2c103c200041003b01ec0120012000280298012002410210314171419299c000411f103c20" - "0041003b01ec0120012000280298014101200241021032417141b199c0004122103c200041" - "003b01ec0120012000280298012004411441b185c0004114200241021021417141d399c000" - "4121103c200041003b01ec0120044114200120002802980141b185c0004114200241021021" - "417141f499c0004121103c200041003b01ec01200120002802980141012002410210334171" - "41959ac0004128103c200041003b01ec012005411820012000280298012002410210244171" - "41bd9ac0004123103c200041003b01ec0120012000280298014101200241021034417141e0" - "9ac0004125103c200041003b01ec0120012000280298014101200241021035417141859bc0" - "004121103c200041003b01ec0120012000280298014101200241021036417141a69bc00041" - "22103c200041003b01ec012001200028029801200441144101200241021037417141c89bc0" - "004124103c200041003b01ec012004411420012000280298014101200241021037417141ec" - "9bc0004124103c200041003b01ec0120012000280298014101200241021038417141909cc0" - "00412f103c200041003b01ec012001200028029801200241021039417141bf9cc000412310" - "3c200041003b01ec012001200028029801410120024102103a417141e29cc0004122103c20" - "0041003b01ec012001200028029801410120024102103b417141849dc0004121103c200041" - "003b01ec01200120002802980141888ac0004120200241021018417141a59dc000411c103c" - "419783c000410d2001200028029801101e417141a88ac0004122103c419797abdd03410d41" - "888ac000412041001000417341ca8ac0004110103c419797abdd03410d2003410810254173" - "41da8ac000411d103c419797abdd03410d20044114101e417341f78ac0004118103c419797" - "abdd03410d41b183c0004108101f4173418f8bc0004117103c200120002802980120014181" - "2041001000417441a68bc000410e103c200141812042011001417441b48bc0004112103c41" - "9783c000418120200341081025417441c68bc000411b103c419783c0004181202004411410" - "1e417441e18bc0004116103c419783c00041812041b183c0004108101f417441f78bc00041" - "15103c419783c000410d2001200028029801101f4171418c8cc0004119103c200041003b01" - "ec01200120002802980120044114200241021024417141c19dc0004121103c200041f0016a" - "240041010f0b0b418080c000410b417f20052005417f4e1bac1001000b0bcd1d0200418080" - "c0000bc5056572726f725f636f64653d54455354204641494c454424242424242053544152" - "54494e47205741534d20455845435554494f4e2024242424246765745f6c65646765725f73" - "716e6765745f706172656e745f6c65646765725f74696d656765745f626173655f66656574" - "6573745f616d656e646d656e74616d656e646d656e745f656e61626c656463616368655f6c" - "65646765725f6f626a6765745f74785f61727261795f6c656e6765745f63757272656e745f" - "6c65646765725f6f626a5f61727261795f6c656e6765745f6c65646765725f6f626a5f6172" - "7261795f6c656e6765745f74785f6e65737465645f61727261795f6c656e6765745f637572" - "72656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e6765745f6c" - "65646765725f6f626a5f6e65737465645f61727261795f6c656e7570646174655f64617461" - "74657374206d65737361676574657374207075626b657974657374207369676e6174757265" - "636865636b5f7369676765745f6e66745f666c6167736765745f6e66745f7472616e736665" - "725f66656574657374696e6720747261636574726163655f6163636f756e74400000000000" - "005f74726163655f616d6f756e746765745f706172656e745f6c65646765725f686173685f" - "6e65675f7074726765745f74785f61727261795f6c656e5f696e76616c69645f736669656c" - "646765745f74785f6e65737465645f61727261795f6c656e5f6e65675f7074726765745f74" - "785f6e65737465645f61727261795f6c656e5f6e65675f6c656e6765745f74785f6e657374" - "65645f61727261795f6c656e5f746f6f5f6c6f6e676765745f74785f6e65737465645f6172" - "7261795f6c656e5f7074725f6f6f6263616368655f6c65646765725f6f626a5f7074725f6f" - "6f6263616368655f6c65646765725f6f626a5f77726f6e675f6c656e555344303030303030" - "30303030303030303030300041ed85c0000bf51774726163655f6e756d5f6f6f625f737472" - "6765745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e5f696e7661" - "6c69645f736669656c646765745f6c65646765725f6f626a5f61727261795f6c656e5f696e" - "76616c69645f736669656c64616d656e646d656e745f656e61626c65645f746f6f5f626967" - "5f736c696365616d656e646d656e745f656e61626c65645f746f6f5f6c6f6e676765745f74" - "785f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f63" - "757272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f" - "6f5f6269675f736c6963656765745f6c65646765725f6f626a5f6e65737465645f61727261" - "795f6c656e5f746f6f5f6269675f736c6963657570646174655f646174615f746f6f5f6269" - "675f736c69636574726163655f6f6f625f736c69636574726163655f6f70617175655f666c" - "6f61745f6f6f625f736c69636574726163655f616d6f756e745f6f6f625f736c696365666c" - "6f61745f636f6d706172655f6f6f625f736c69636531666c6f61745f636f6d706172655f6f" - "6f625f736c6963653263616368655f6c65646765725f6f626a5f77726f6e675f73697a655f" - "75696e743235366765745f6e66745f666c6167735f77726f6e675f73697a655f75696e7432" - "35366765745f6e66745f7472616e736665725f6665655f77726f6e675f73697a655f75696e" - "74323536303030303030303030303030303030303030303030303030303030303030303174" - "726163655f6163636f756e745f77726f6e675f73697a655f6163636f756e74696474726163" - "655f6f6f625f737472696e6774726163655f6f70617175655f666c6f61745f6f6f625f7374" - "72696e6774726163655f6163636f756e745f6f6f625f737472696e6774726163655f616d6f" - "756e745f6f6f625f737472696e6774726163655f746f6f5f6c6f6e6774726163655f6e756d" - "5f746f6f5f6c6f6e6774726163655f6f70617175655f666c6f61745f746f6f5f6c6f6e6774" - "726163655f6163636f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f746f6f" - "5f6c6f6e6774726163655f616d6f756e745f77726f6e675f6c656e6774686765745f706172" - "656e745f6c65646765725f686173686765745f63757272656e745f6c65646765725f6f626a" - "5f6669656c646765745f6c65646765725f6f626a5f6669656c646765745f74785f6e657374" - "65645f6669656c646765745f63757272656e745f6c65646765725f6f626a5f6e6573746564" - "5f6669656c646765745f6c65646765725f6f626a5f6e65737465645f6669656c64636f6d70" - "7574655f7368613531325f68616c666765745f6e66746765745f6e66745f69737375657267" - "65745f6e66745f7461786f6e6765745f6e66745f73657269616c6765745f706172656e745f" - "6c65646765725f686173685f6e65675f6c656e6765745f706172656e745f6c65646765725f" - "686173685f6275665f746f6f5f736d616c6c6765745f706172656e745f6c65646765725f68" - "6173685f6c656e5f746f6f5f6c6f6e67666c6f61745f66726f6d5f75696e745f6c656e5f6f" - "6f62666c6f61745f66726f6d5f75696e745f77726f6e675f6c656e6163636f756e745f6b65" - "796c65745f6c656e5f6f6f626163636f756e745f6b65796c65745f77726f6e675f6c656e6c" - "696e655f6b65796c65745f6c656e5f6f6f625f63757272656e63796c696e655f6b65796c65" - "745f77726f6e675f6c656e5f63757272656e6379616d6d5f6b65796c65745f6c656e5f6f6f" - "625f617373657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6c656e5f61737365" - "7432616d6d5f6b65796c65745f6c656e5f77726f6e675f6e6f6e5f7872705f63757272656e" - "63795f6c656e616d6d5f6b65796c65745f6c656e5f77726f6e675f7872705f63757272656e" - "63795f6c656e616d6d5f6b65796c65745f6d70746765745f74785f6669656c645f696e7661" - "6c69645f736669656c646765745f63757272656e745f6c65646765725f6f626a5f6669656c" - "645f696e76616c69645f736669656c646765745f6c65646765725f6f626a5f6669656c645f" - "696e76616c69645f736669656c646765745f74785f6e65737465645f6669656c645f746f6f" - "5f6269675f736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e657374" - "65645f6669656c645f746f6f5f6269675f736c6963656765745f6c65646765725f6f626a5f" - "6e65737465645f6669656c645f746f6f5f6269675f736c696365636f6d707574655f736861" - "3531325f68616c665f746f6f5f6269675f736c696365616d6d5f6b65796c65745f746f6f5f" - "6269675f736c69636563726564656e7469616c5f6b65796c65745f746f6f5f6269675f736c" - "6963656d70746f6b656e5f6b65796c65745f746f6f5f6269675f736c6963655f6d70746964" - "666c6f61745f6164645f6f6f625f736c69636531666c6f61745f6164645f6f6f625f736c69" - "636532666c6f61745f73756274726163745f6f6f625f736c69636531666c6f61745f737562" - "74726163745f6f6f625f736c69636532666c6f61745f6d756c7469706c795f6f6f625f736c" - "69636531666c6f61745f6d756c7469706c795f6f6f625f736c69636532666c6f61745f6469" - "766964655f6f6f625f736c69636531666c6f61745f6469766964655f6f6f625f736c696365" - "32666c6f61745f726f6f745f6f6f625f736c696365666c6f61745f706f775f6f6f625f736c" - "696365666c6f61745f6c6f675f6f6f625f736c6963656765745f6e66745f77726f6e675f73" - "697a655f75696e743235366765745f6e66745f6973737565725f77726f6e675f73697a655f" - "75696e743235366765745f6e66745f7461786f6e5f77726f6e675f73697a655f75696e7432" - "35366765745f6e66745f73657269616c5f77726f6e675f73697a655f75696e743235366163" - "636f756e745f6b65796c65745f77726f6e675f73697a655f6163636f756e74696463686563" - "6b5f6b65796c65745f77726f6e675f73697a655f6163636f756e74696463726564656e7469" - "616c5f6b65796c65745f77726f6e675f73697a655f6163636f756e7469643163726564656e" - "7469616c5f6b65796c65745f77726f6e675f73697a655f6163636f756e7469643264656c65" - "676174655f6b65796c65745f77726f6e675f73697a655f6163636f756e7469643164656c65" - "676174655f6b65796c65745f77726f6e675f73697a655f6163636f756e746964326465706f" - "7369745f707265617574685f6b65796c65745f77726f6e675f73697a655f6163636f756e74" - "6964316465706f7369745f707265617574685f6b65796c65745f77726f6e675f73697a655f" - "6163636f756e746964326469645f6b65796c65745f77726f6e675f73697a655f6163636f75" - "6e746964657363726f775f6b65796c65745f77726f6e675f73697a655f6163636f756e7469" - "646c696e655f6b65796c65745f77726f6e675f73697a655f6163636f756e746964316c696e" - "655f6b65796c65745f77726f6e675f73697a655f6163636f756e746964326d70745f697373" - "75616e63655f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646d70746f" - "6b656e5f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646e66745f6f66" - "6665725f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646f666665725f" - "6b65796c65745f77726f6e675f73697a655f6163636f756e7469646f7261636c655f6b6579" - "6c65745f77726f6e675f73697a655f6163636f756e7469647061796368616e5f6b65796c65" - "745f77726f6e675f73697a655f6163636f756e746964317061796368616e5f6b65796c6574" - "5f77726f6e675f73697a655f6163636f756e746964327065726d697373696f6e65645f646f" - "6d61696e5f6b65796c65745f77726f6e675f73697a655f6163636f756e7469647369676e65" - "72735f6b65796c65745f77726f6e675f73697a655f6163636f756e7469647469636b65745f" - "6b65796c65745f77726f6e675f73697a655f6163636f756e7469647661756c745f6b65796c" - "65745f77726f6e675f73697a655f6163636f756e7469646765745f6e66745f77726f6e675f" - "73697a655f6163636f756e7469646d70746f6b656e5f6b65796c65745f6d707469645f7772" - "6f6e675f6c656e677468004d0970726f64756365727302086c616e67756167650104527573" - "74000c70726f6365737365642d6279010572757374631d312e38352e312028346562313631" - "32353020323032352d30332d313529002c0f7461726765745f6665617475726573022b0f6d" - "757461626c652d676c6f62616c732b087369676e2d657874"; + "0341b2920441c780c0004116103c200041f0006a22054200370300200041e8006a22064200" + "370300200041e0006a2203420037030020004200370358200041d8006a2201412010044120" + "41be8cc0004116103c1005410a41dd80c000410c103c200041186a2207428182848890a0c0" + "8001370300200041106a2208428182848890a0c08001370300200041086a22094281828488" + "90a0c080013703002000428182848890a0c0800137030041e980c000410e1006410141f780" + "c0004111103c200041201006410141f780c0004111103c4181802020014114100722024114" + "4604400240200041266a200041da006a2d00003a00002000200029005f3703c80120002000" + "41e4006a2900003700cd01200041306a20002900cd01370000200020002f00583b01242000" + "200028005b360027200020002903c80137002b200542003703002006420037030020034200" + "37030020004200370358200041246a2205411420014120100822024120470d002000413a6a" + "20002d005a3a0000200041d0016a2202200041e7006a290000220a370300200041c7006a20" + "0a370000200041cf006a200041ef006a290000370000200041d7006a200041f7006a2d0000" + "3a0000200020002f01583b01382000200028005b36003b2000200029005f37003f20004138" + "6a4120410010094101418881c0004110103c20064100360200200342003703002000420037" + "03584181802020014114100a411441d48cc000411c103c2006410036020020034200370300" + "2000420037035841014181802020014114100b411441f08cc0004114103c20004104360298" + "01200041818020360258200041d8016a2203410036020020024200370300200042003703c8" + "0120014104200041c8016a22064114100c411441848dc0004113103c200341003602002002" + "4200370300200042003703c801200120002802980120064114100d411441978dc000412310" + "3c2003410036020020024200370300200042003703c8014101200120002802980120064114" + "100e411441ba8dc000411b103c4189803c100f4120419881c0004110103c4189803c101041" + "2041a881c0004120103c41014189803c1011412041c881c0004118103c2001200028029801" + "1012412041e081c0004117103c20012000280298011013412041f781c0004127103c410120" + "0120002802980110144120419e82c000411f103c200541141015411441bd82c000410b103c" + "200041e0016a220442003703002003420037030020024200370300200042003703c8012001" + "200028029801200641201016412041d58dc0004113103c41c882c000410c41d482c000410b" + "41df82c000410e1017410141ed82c0004109103c200041b8016a2007290300370300200041" + "b0016a2008290300370300200041a8016a2009290300370300200020002903003703a00120" + "0341003b010020024200370300200042003703c80120054114200041a0016a220741202006" + "41121018411241e88dc0004107103c2003410036020020024200370300200042003703c801" + "20074120200641141019411441ef8dc000410e103c200041003602c8012007412020064104" + "101a410441fd8dc000410d103c20074120101b410841f682c000410d103c20074120101c41" + "0a418383c0004114103c200041003602c8012007412020064104101d4104418a8ec000410e" + "103c419783c000410d20054114101e412f41a483c000410d103c419783c000410d41b183c0" + "004108101f411341b983c000410c103c419783c000410d41c583c0004108101f411241cd83" + "c0004111103c417f41041004417141de83c000411e103c200041003602c8012006417f1004" + "417141988ec000411e103c200041ca016a41003a0000200041003b01c80120064103100441" + "7d41b68ec0004124103c200041003602c8012006418094ebdc031004417341da8ec0004123" + "103c419783c000410d20054114101e412f41a483c000410d103c419783c000410d41b183c0" + "004108101f411341b983c000410c103c200442003703002003420037030020024200370300" + "200042003703c801200041d894ebdc036a220741082006412041001020417341fd8ec00041" + "17103c200442003703002003420037030020024200370300200042003703c8012001200028" + "0298012006412041001020417141948fc0004119103c4102100f416f41fc83c000411f103c" + "417f20002802980110124171419b84c000411f103c2001417f1012417141ba84c000411f10" + "3c20014181201012417441d984c0004120103c20072000280298011012417341f984c00041" + "1f103c2007200028029801410110094173419885c0004118103c2001200028029801410110" + "09417141b085c000411a103c20044200370300200342003703002002420037030020004200" + "3703c8012007200028029801200641201008417341ad8fc0004116103c2004420037030020" + "03420037030020024200370300200042003703c80120012000280298012006412010084171" + "41c38fc0004118103c200442003703002003420037030020024200370300200042003703c8" + "0120054114200541142007200028029801200641201021417341db8fc000411c103c200442" + "003703002003420037030020024200370300200042003703c8012005411420054114200120" + "0028029801200641201021417141f78fc000411e103c200442003703002003420037030020" + "024200370300200042003703c80141fb9dc000411420072000280298012006412010224173" + "419590c0004119103c200442003703002003420037030020024200370300200042003703c8" + "0141fb9dc00041142001200028029801200641201022417141ae90c000411f103c20044200" + "3703002003420037030020024200370300200042003703c80141fb9dc000411441ca85c000" + "4114200641201022417141cd90c0004129103c200442003703002003420037030020024200" + "370300200042003703c80141de85c000412841fb9dc0004114200641201022417141f690c0" + "004125103c200041dc016a200041346a280100360200200041d4016a2000412c6a29010037" + "0200200020002901243702cc01200041808080083602c801200041003b01c0012006411841" + "fb9dc0004114200041c0016a2203410210224171419b91c000410e103c2007200028029801" + "422a10014173418686c0004111103c200041003b01c0014102200341021007416f41a991c0" + "00411b103c200041003b01c001410220034102100a416f41c491c000412b103c200041003b" + "01c0014101410220034102100b416f41ef91c0004123103c4102100f416f41fc83c000411f" + "103c41021010416f419786c000412f103c410141021011416f41c686c0004127103c41e980" + "c0004181201006417441ed86c000411f103c41e980c00041c10010064174418c87c000411a" + "103c200041003b01c001200141812020034102100c4174419292c0004121103c200041003b" + "01c001200141812020034102100d417441b392c0004131103c200041003b01c00141012001" + "41812020034102100e417441e492c0004129103c20014181201012417441a687c000412510" + "3c20014181201013417441cb87c0004135103c4101200141812010144174418088c000412d" + "103c20014181201015417441ad88c0004119103c419783c00041812041d482c000410b41df" + "82c000410e1017417441ed82c0004109103c419783c000410d41d482c00041812041df82c0" + "00410e1017417441ed82c0004109103c419783c000410d41d482c000410b41df82c0004181" + "201017417441ed82c0004109103c200041003b01c00120014181202003410210164174418d" + "93c0004121103c200041003b01c00141fb9dc00041812041fb9dc000411420034102102241" + "7441ae93c0004118103c200041003b01c00120054114200541142001418120200341021023" + "417441c693c000411f103c200041003b01c001200641812020054114200341021024417441" + "e593c0004122103c419783c000410d200720002802980141001000417341c688c000410f10" + "3c200042d487b6f4c7d4b1c0003700c001419783c000410d200041c095ebdc036a22044108" + "1025417341d588c000411c103c419783c000410d2007200028029801101f417341f188c000" + "4116103c200441082003410810264173418789c0004118103c200341082004410810264173" + "419f89c0004118103c200041003b01ec012004410820034108200041ec016a220241024100" + "10274173418794c0004114103c200041003b01ec0120034108200441082002410241001027" + "4173419b94c0004114103c200041003b01ec01200441082003410820024102410010284173" + "41af94c0004119103c200041003b01ec0120034108200441082002410241001028417341c8" + "94c0004119103c200041003b01ec0120044108200341082002410241001029417341e194c0" + "004119103c200041003b01ec0120034108200441082002410241001029417341fa94c00041" + "19103c200041003b01ec012004410820034108200241024100102a4173419395c000411710" + "3c200041003b01ec012003410820044108200241024100102a417341aa95c0004117103c20" + "0041003b01ec01200441084103200241024100102b417341c195c0004114103c200041003b" + "01ec01200441084103200241024100102c417341d595c0004113103c200041003b01ec0120" + "044108200241024100102d417341e895c0004113103c200120002802980141001009417141" + "b789c0004123103c200041003b01ec01200541142001200028029801200241021018417141" + "fb95c000411a103c200041003b01ec0120012000280298012002410210194171419596c000" + "4121103c200041003b01ec01200120002802980120024102101a417141b696c0004120103c" + "2001200028029801101b417141da89c0004120103c2001200028029801101c417141fa89c0" + "004127103c200041003602ec01200120002802980120024104101d417141d696c000412110" + "3c200041003b01ec012001200028029801200241021008417141f796c0004123103c200041" + "003b01ec012001200028029801410120024102102e4171419a97c0004121103c200041003b" + "01ec01200120002802980122042005411420012004200241021023417141bb97c000412710" + "3c200041003b01ec01200541142001200028029801220420012004200241021023417141e2" + "97c0004127103c200041003b01ec0120012000280298012005411420024102102f41714189" + "98c0004125103c200041003b01ec0120054114200120002802980120024102102f417141ae" + "98c0004125103c200041003b01ec01200120002802980120054114200241021030417141d3" + "98c000412c103c200041003b01ec01200541142001200028029801200241021030417141ff" + "98c000412c103c200041003b01ec012001200028029801200241021031417141ab99c00041" + "1f103c200041003b01ec0120012000280298014101200241021032417141ca99c000412210" + "3c200041003b01ec0120012000280298012005411441ca85c0004114200241021021417141" + "ec99c0004121103c200041003b01ec0120054114200120002802980141ca85c00041142002" + "410210214171418d9ac0004121103c200041003b01ec012001200028029801410120024102" + "1033417141ae9ac0004128103c200041003b01ec0120064118200120002802980120024102" + "1024417141d69ac0004123103c200041003b01ec0120012000280298014101200241021034" + "417141f99ac0004125103c200041003b01ec01200120002802980141012002410210354171" + "419e9bc0004121103c200041003b01ec0120012000280298014101200241021036417141bf" + "9bc0004122103c200041003b01ec0120012000280298012005411441012002410210374171" + "41e19bc0004124103c200041003b01ec012005411420012000280298014101200241021037" + "417141859cc0004124103c200041003b01ec01200120002802980141012002410210384171" + "41a99cc000412f103c200041003b01ec012001200028029801200241021039417141d89cc0" + "004123103c200041003b01ec012001200028029801410120024102103a417141fb9cc00041" + "22103c200041003b01ec012001200028029801410120024102103b4171419d9dc000412110" + "3c200041003b01ec01200120002802980141a18ac0004120200241021018417141be9dc000" + "411c103c419783c000410d2001200028029801101e417141c18ac0004122103c419797abdd" + "03410d41a18ac000412041001000417341e38ac0004110103c419797abdd03410d20034108" + "1025417341f38ac000411d103c419797abdd03410d20054114101e417341908bc000411810" + "3c419797abdd03410d41b183c0004108101f417341a88bc0004117103c2001200028029801" + "200141812041001000417441bf8bc000410e103c200141812042011001417441cd8bc00041" + "12103c419783c000418120200341081025417441df8bc000411b103c419783c00041812020" + "054114101e417441fa8bc0004116103c419783c00041812041b183c0004108101f41744190" + "8cc0004115103c419783c000410d2001200028029801101f417141a58cc0004119103c2000" + "41003b01ec01200120002802980120054114200241021024417141da9dc0004121103c2000" + "41f0016a240041010f0b0b418080c000410b417f20022002417f4e1bac1001000b0be61d02" + "00418080c0000bde056572726f725f636f64653d54455354204641494c4544242424242420" + "5354415254494e47205741534d20455845435554494f4e2024242424246765745f6c656467" + "65725f73716e6765745f706172656e745f6c65646765725f74696d656765745f626173655f" + "666565746573745f616d656e646d656e74616d656e646d656e745f656e61626c6564636163" + "68655f6c65646765725f6f626a6765745f74785f61727261795f6c656e6765745f63757272" + "656e745f6c65646765725f6f626a5f61727261795f6c656e6765745f6c65646765725f6f62" + "6a5f61727261795f6c656e6765745f74785f6e65737465645f61727261795f6c656e676574" + "5f63757272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e67" + "65745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e7570646174655f" + "6461746174657374206d65737361676574657374207075626b657974657374207369676e61" + "74757265636865636b5f7369676765745f6e66745f666c6167736765745f6e66745f747261" + "6e736665725f66656574657374696e6720747261636574726163655f6163636f756e744000" + "00000000005f74726163655f616d6f756e74400000000000000074726163655f616d6f756e" + "745f7a65726f6765745f706172656e745f6c65646765725f686173685f6e65675f70747267" + "65745f74785f61727261795f6c656e5f696e76616c69645f736669656c646765745f74785f" + "6e65737465645f61727261795f6c656e5f6e65675f7074726765745f74785f6e6573746564" + "5f61727261795f6c656e5f6e65675f6c656e6765745f74785f6e65737465645f6172726179" + "5f6c656e5f746f6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f" + "7074725f6f6f6263616368655f6c65646765725f6f626a5f7074725f6f6f6263616368655f" + "6c65646765725f6f626a5f77726f6e675f6c656e5553443030303030303030303030303030" + "30303000418686c0000bf51774726163655f6e756d5f6f6f625f7374726765745f63757272" + "656e745f6c65646765725f6f626a5f61727261795f6c656e5f696e76616c69645f73666965" + "6c646765745f6c65646765725f6f626a5f61727261795f6c656e5f696e76616c69645f7366" + "69656c64616d656e646d656e745f656e61626c65645f746f6f5f6269675f736c696365616d" + "656e646d656e745f656e61626c65645f746f6f5f6c6f6e676765745f74785f6e6573746564" + "5f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f63757272656e745f6c" + "65646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c" + "6963656765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f" + "6f5f6269675f736c6963657570646174655f646174615f746f6f5f6269675f736c69636574" + "726163655f6f6f625f736c69636574726163655f6f70617175655f666c6f61745f6f6f625f" + "736c69636574726163655f616d6f756e745f6f6f625f736c696365666c6f61745f636f6d70" + "6172655f6f6f625f736c69636531666c6f61745f636f6d706172655f6f6f625f736c696365" + "3263616368655f6c65646765725f6f626a5f77726f6e675f73697a655f75696e7432353667" + "65745f6e66745f666c6167735f77726f6e675f73697a655f75696e743235366765745f6e66" + "745f7472616e736665725f6665655f77726f6e675f73697a655f75696e7432353630303030" + "3030303030303030303030303030303030303030303030303030303174726163655f616363" + "6f756e745f77726f6e675f73697a655f6163636f756e74696474726163655f6f6f625f7374" + "72696e6774726163655f6f70617175655f666c6f61745f6f6f625f737472696e6774726163" + "655f6163636f756e745f6f6f625f737472696e6774726163655f616d6f756e745f6f6f625f" + "737472696e6774726163655f746f6f5f6c6f6e6774726163655f6e756d5f746f6f5f6c6f6e" + "6774726163655f6f70617175655f666c6f61745f746f6f5f6c6f6e6774726163655f616363" + "6f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f746f6f5f6c6f6e67747261" + "63655f616d6f756e745f77726f6e675f6c656e6774686765745f706172656e745f6c656467" + "65725f686173686765745f63757272656e745f6c65646765725f6f626a5f6669656c646765" + "745f6c65646765725f6f626a5f6669656c646765745f74785f6e65737465645f6669656c64" + "6765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c646765" + "745f6c65646765725f6f626a5f6e65737465645f6669656c64636f6d707574655f73686135" + "31325f68616c666765745f6e66746765745f6e66745f6973737565726765745f6e66745f74" + "61786f6e6765745f6e66745f73657269616c6765745f706172656e745f6c65646765725f68" + "6173685f6e65675f6c656e6765745f706172656e745f6c65646765725f686173685f627566" + "5f746f6f5f736d616c6c6765745f706172656e745f6c65646765725f686173685f6c656e5f" + "746f6f5f6c6f6e67666c6f61745f66726f6d5f75696e745f6c656e5f6f6f62666c6f61745f" + "66726f6d5f75696e745f77726f6e675f6c656e6163636f756e745f6b65796c65745f6c656e" + "5f6f6f626163636f756e745f6b65796c65745f77726f6e675f6c656e6c696e655f6b65796c" + "65745f6c656e5f6f6f625f63757272656e63796c696e655f6b65796c65745f77726f6e675f" + "6c656e5f63757272656e6379616d6d5f6b65796c65745f6c656e5f6f6f625f617373657432" + "616d6d5f6b65796c65745f6c656e5f77726f6e675f6c656e5f617373657432616d6d5f6b65" + "796c65745f6c656e5f77726f6e675f6e6f6e5f7872705f63757272656e63795f6c656e616d" + "6d5f6b65796c65745f6c656e5f77726f6e675f7872705f63757272656e63795f6c656e616d" + "6d5f6b65796c65745f6d70746765745f74785f6669656c645f696e76616c69645f73666965" + "6c646765745f63757272656e745f6c65646765725f6f626a5f6669656c645f696e76616c69" + "645f736669656c646765745f6c65646765725f6f626a5f6669656c645f696e76616c69645f" + "736669656c646765745f74785f6e65737465645f6669656c645f746f6f5f6269675f736c69" + "63656765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c64" + "5f746f6f5f6269675f736c6963656765745f6c65646765725f6f626a5f6e65737465645f66" + "69656c645f746f6f5f6269675f736c696365636f6d707574655f7368613531325f68616c66" + "5f746f6f5f6269675f736c696365616d6d5f6b65796c65745f746f6f5f6269675f736c6963" + "6563726564656e7469616c5f6b65796c65745f746f6f5f6269675f736c6963656d70746f6b" + "656e5f6b65796c65745f746f6f5f6269675f736c6963655f6d70746964666c6f61745f6164" + "645f6f6f625f736c69636531666c6f61745f6164645f6f6f625f736c69636532666c6f6174" + "5f73756274726163745f6f6f625f736c69636531666c6f61745f73756274726163745f6f6f" + "625f736c69636532666c6f61745f6d756c7469706c795f6f6f625f736c69636531666c6f61" + "745f6d756c7469706c795f6f6f625f736c69636532666c6f61745f6469766964655f6f6f62" + "5f736c69636531666c6f61745f6469766964655f6f6f625f736c69636532666c6f61745f72" + "6f6f745f6f6f625f736c696365666c6f61745f706f775f6f6f625f736c696365666c6f6174" + "5f6c6f675f6f6f625f736c6963656765745f6e66745f77726f6e675f73697a655f75696e74" + "3235366765745f6e66745f6973737565725f77726f6e675f73697a655f75696e7432353667" + "65745f6e66745f7461786f6e5f77726f6e675f73697a655f75696e743235366765745f6e66" + "745f73657269616c5f77726f6e675f73697a655f75696e743235366163636f756e745f6b65" + "796c65745f77726f6e675f73697a655f6163636f756e746964636865636b5f6b65796c6574" + "5f77726f6e675f73697a655f6163636f756e74696463726564656e7469616c5f6b65796c65" + "745f77726f6e675f73697a655f6163636f756e7469643163726564656e7469616c5f6b6579" + "6c65745f77726f6e675f73697a655f6163636f756e7469643264656c65676174655f6b6579" + "6c65745f77726f6e675f73697a655f6163636f756e7469643164656c65676174655f6b6579" + "6c65745f77726f6e675f73697a655f6163636f756e746964326465706f7369745f70726561" + "7574685f6b65796c65745f77726f6e675f73697a655f6163636f756e746964316465706f73" + "69745f707265617574685f6b65796c65745f77726f6e675f73697a655f6163636f756e7469" + "64326469645f6b65796c65745f77726f6e675f73697a655f6163636f756e74696465736372" + "6f775f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646c696e655f6b65" + "796c65745f77726f6e675f73697a655f6163636f756e746964316c696e655f6b65796c6574" + "5f77726f6e675f73697a655f6163636f756e746964326d70745f69737375616e63655f6b65" + "796c65745f77726f6e675f73697a655f6163636f756e7469646d70746f6b656e5f6b65796c" + "65745f77726f6e675f73697a655f6163636f756e7469646e66745f6f666665725f6b65796c" + "65745f77726f6e675f73697a655f6163636f756e7469646f666665725f6b65796c65745f77" + "726f6e675f73697a655f6163636f756e7469646f7261636c655f6b65796c65745f77726f6e" + "675f73697a655f6163636f756e7469647061796368616e5f6b65796c65745f77726f6e675f" + "73697a655f6163636f756e746964317061796368616e5f6b65796c65745f77726f6e675f73" + "697a655f6163636f756e746964327065726d697373696f6e65645f646f6d61696e5f6b6579" + "6c65745f77726f6e675f73697a655f6163636f756e7469647369676e6572735f6b65796c65" + "745f77726f6e675f73697a655f6163636f756e7469647469636b65745f6b65796c65745f77" + "726f6e675f73697a655f6163636f756e7469647661756c745f6b65796c65745f77726f6e67" + "5f73697a655f6163636f756e7469646765745f6e66745f77726f6e675f73697a655f616363" + "6f756e7469646d70746f6b656e5f6b65796c65745f6d707469645f77726f6e675f6c656e67" + "7468004d0970726f64756365727302086c616e6775616765010452757374000c70726f6365" + "737365642d6279010572757374631d312e38352e3120283465623136313235302032303235" + "2d30332d313529002c0f7461726765745f6665617475726573022b0f6d757461626c652d67" + "6c6f62616c732b087369676e2d657874"; extern std::string const floatTestsWasmHex = "0061736d0100000001430860077f7f7f7f7f7f7f017f60057f7f7f7f7f017f60047f7f7f7f" diff --git a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp index 95a8812f4f..03d56fe14f 100644 --- a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp @@ -1607,7 +1607,7 @@ traceAmount_wrap( { amount = std::nullopt; } - if (!amount || !amount.value()) + if (!amount) return hfResult(results, HostFunctionError::INVALID_PARAMS); return returnResult( From 106dea4559b8172abf0e0c5046895f8158b8febc Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 4 Nov 2025 13:35:25 -0500 Subject: [PATCH 028/137] update fixtures to use the latest version of stdlib --- src/test/app/Wasm_test.cpp | 6 +- .../all_host_functions/Cargo.lock | 164 +++- .../all_host_functions/Cargo.toml | 2 +- .../app/wasm_fixtures/all_keylets/Cargo.lock | 164 +++- .../app/wasm_fixtures/all_keylets/Cargo.toml | 2 +- .../app/wasm_fixtures/all_keylets/src/lib.rs | 22 +- .../wasm_fixtures/codecov_tests/Cargo.lock | 6 +- .../wasm_fixtures/codecov_tests/Cargo.toml | 2 +- src/test/app/wasm_fixtures/fixtures.cpp | 852 +++++++++--------- .../app/wasm_fixtures/float_tests/Cargo.lock | 166 +++- .../app/wasm_fixtures/float_tests/Cargo.toml | 2 +- .../app/wasm_fixtures/float_tests/src/lib.rs | 3 +- 12 files changed, 922 insertions(+), 469 deletions(-) diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 1f01123829..57e349b78f 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -335,7 +335,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 847, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 838, std::to_string(re->cost)); } env.close(); @@ -369,7 +369,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 40'107, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 40'098, std::to_string(re->cost)); } env.close(); @@ -394,7 +394,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 40'107, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 40'098, std::to_string(re->cost)); } } diff --git a/src/test/app/wasm_fixtures/all_host_functions/Cargo.lock b/src/test/app/wasm_fixtures/all_host_functions/Cargo.lock index 7f6a6bc717..25ea64bbd2 100644 --- a/src/test/app/wasm_fixtures/all_host_functions/Cargo.lock +++ b/src/test/app/wasm_fixtures/all_host_functions/Cargo.lock @@ -6,10 +6,166 @@ version = 4 name = "all_host_functions" version = "0.1.0" dependencies = [ - "xrpl-std", + "xrpl-wasm-stdlib", ] [[package]] -name = "xrpl-std" -version = "0.5.1-devnet5" -source = "git+https://github.com/ripple/craft.git?branch=last-hfs2#ec4a3fb2ea45a7f27b7190976d37d3596e2ec29e" +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "generic-array" +version = "0.14.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "libc" +version = "0.2.177" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" + +[[package]] +name = "proc-macro2" +version = "1.0.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "syn" +version = "2.0.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tinyvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "typenum" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + +[[package]] +name = "unicode-ident" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "xrpl-address-macro" +version = "0.7.1" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git#d27d3e0b4abf3c0215aade729d89053805efe48e" +dependencies = [ + "bs58", + "quote", + "sha2", + "syn", +] + +[[package]] +name = "xrpl-wasm-stdlib" +version = "0.7.1" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git#d27d3e0b4abf3c0215aade729d89053805efe48e" +dependencies = [ + "xrpl-address-macro", +] diff --git a/src/test/app/wasm_fixtures/all_host_functions/Cargo.toml b/src/test/app/wasm_fixtures/all_host_functions/Cargo.toml index 959056f374..82f6ce05a3 100644 --- a/src/test/app/wasm_fixtures/all_host_functions/Cargo.toml +++ b/src/test/app/wasm_fixtures/all_host_functions/Cargo.toml @@ -10,7 +10,7 @@ edition = "2024" crate-type = ["cdylib"] [dependencies] -xrpl-std = { git = "https://github.com/ripple/craft.git", branch = "last-hfs2", package = "xrpl-std" } +xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib" } [profile.dev] panic = "abort" diff --git a/src/test/app/wasm_fixtures/all_keylets/Cargo.lock b/src/test/app/wasm_fixtures/all_keylets/Cargo.lock index 3491dc00fa..88a6e34459 100644 --- a/src/test/app/wasm_fixtures/all_keylets/Cargo.lock +++ b/src/test/app/wasm_fixtures/all_keylets/Cargo.lock @@ -6,10 +6,166 @@ version = 4 name = "all_keylets" version = "0.0.1" dependencies = [ - "xrpl-std", + "xrpl-wasm-stdlib", ] [[package]] -name = "xrpl-std" -version = "0.5.1-devnet5" -source = "git+https://github.com/ripple/craft.git?branch=lastdevnet#c3a92273195a211ac9b41d641b0d20f60f982bb2" +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "generic-array" +version = "0.14.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "libc" +version = "0.2.177" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" + +[[package]] +name = "proc-macro2" +version = "1.0.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "syn" +version = "2.0.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tinyvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "typenum" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + +[[package]] +name = "unicode-ident" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "xrpl-address-macro" +version = "0.7.1" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git#d27d3e0b4abf3c0215aade729d89053805efe48e" +dependencies = [ + "bs58", + "quote", + "sha2", + "syn", +] + +[[package]] +name = "xrpl-wasm-stdlib" +version = "0.7.1" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git#d27d3e0b4abf3c0215aade729d89053805efe48e" +dependencies = [ + "xrpl-address-macro", +] diff --git a/src/test/app/wasm_fixtures/all_keylets/Cargo.toml b/src/test/app/wasm_fixtures/all_keylets/Cargo.toml index 620e28fceb..823de4127d 100644 --- a/src/test/app/wasm_fixtures/all_keylets/Cargo.toml +++ b/src/test/app/wasm_fixtures/all_keylets/Cargo.toml @@ -15,7 +15,7 @@ opt-level = 's' panic = "abort" [dependencies] -xrpl-std = { git = "https://github.com/ripple/craft.git", branch = "lastdevnet", package = "xrpl-std" } +xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib" } [profile.dev] panic = "abort" diff --git a/src/test/app/wasm_fixtures/all_keylets/src/lib.rs b/src/test/app/wasm_fixtures/all_keylets/src/lib.rs index 970db7bd50..e3d9ab1b19 100644 --- a/src/test/app/wasm_fixtures/all_keylets/src/lib.rs +++ b/src/test/app/wasm_fixtures/all_keylets/src/lib.rs @@ -4,16 +4,18 @@ extern crate std; use crate::host::{Error, Result, Result::Err, Result::Ok}; -use xrpl_std::core::ledger_objects::current_escrow::CurrentEscrow; use xrpl_std::core::ledger_objects::current_escrow::get_current_escrow; +use xrpl_std::core::ledger_objects::current_escrow::CurrentEscrow; use xrpl_std::core::ledger_objects::ledger_object; use xrpl_std::core::ledger_objects::traits::CurrentEscrowFields; -use xrpl_std::core::types::amount::asset::{Asset, IouAsset, XrpAsset}; -use xrpl_std::core::types::amount::currency_code::CurrencyCode; -use xrpl_std::core::types::amount::mpt_id::MptId; +use xrpl_std::core::types::account_id::AccountID; +use xrpl_std::core::types::currency::Currency; +use xrpl_std::core::types::issue::{IouIssue, Issue, XrpIssue}; use xrpl_std::core::types::keylets; +use xrpl_std::core::types::mpt_id::MptId; +use xrpl_std::core::types::uint::Hash256; use xrpl_std::host; -use xrpl_std::host::trace::{DataRepr, trace, trace_account, trace_data, trace_num}; +use xrpl_std::host::trace::{trace, trace_account, trace_data, trace_num, DataRepr}; use xrpl_std::sfield; #[unsafe(no_mangle)] @@ -34,7 +36,7 @@ pub fn object_exists( if field == 0 { let new_field = sfield::PreviousTxnID; let _ = trace_num("Getting field: ", new_field.into()); - match ledger_object::get_hash_256_field(slot, new_field) { + match ledger_object::get_field::(slot, new_field) { Ok(data) => { let _ = trace_data("Field data: ", &data.0, DataRepr::AsHex); } @@ -45,7 +47,7 @@ pub fn object_exists( } } else { let _ = trace_num("Getting field: ", field.into()); - match ledger_object::get_account_id_field(slot, field) { + match ledger_object::get_field::(slot, field) { Ok(data) => { let _ = trace_data("Field data: ", &data.0, DataRepr::AsHex); } @@ -101,13 +103,13 @@ pub extern "C" fn finish() -> i32 { check_object_exists!(account_keylet, "Account", sfield::Account); let currency_code: &[u8; 3] = b"USD"; - let currency: CurrencyCode = CurrencyCode::from(*currency_code); + let currency: Currency = Currency::from(*currency_code); let line_keylet = keylets::line_keylet(&account, &destination, ¤cy); check_object_exists!(line_keylet, "Trustline", sfield::Generic); seq += 1; - let asset1 = Asset::XRP(XrpAsset {}); - let asset2 = Asset::IOU(IouAsset::new(destination, currency)); + let asset1 = Issue::XRP(XrpIssue {}); + let asset2 = Issue::IOU(IouIssue::new(destination, currency)); check_object_exists!( keylets::amm_keylet(&asset1, &asset2), "AMM", diff --git a/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock b/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock index 101fe2eb06..e44fd14755 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock +++ b/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock @@ -153,8 +153,8 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "xrpl-address-macro" -version = "0.1.0" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=main#57538e714ee1185e40391ff7ec7620d0e74d775b" +version = "0.7.1" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git#d27d3e0b4abf3c0215aade729d89053805efe48e" dependencies = [ "bs58", "quote", @@ -165,7 +165,7 @@ dependencies = [ [[package]] name = "xrpl-wasm-stdlib" version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=main#57538e714ee1185e40391ff7ec7620d0e74d775b" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git#d27d3e0b4abf3c0215aade729d89053805efe48e" dependencies = [ "xrpl-address-macro", ] diff --git a/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml b/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml index bd67fd6c1a..5031bcb566 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml +++ b/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml @@ -15,4 +15,4 @@ opt-level = 's' panic = "abort" [dependencies] -xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", branch = "main", package = "xrpl-wasm-stdlib" } +xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib" } diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index c447ad5d18..6fc73f6b44 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -8656,198 +8656,197 @@ extern std::string const allHostFunctionsWasmHex = "616c5f6b65796c6574000808686f73745f6c69620d657363726f775f6b65796c6574000308" "686f73745f6c69620d6f7261636c655f6b65796c6574000308686f73745f6c696213636f6d" "707574655f7368613531325f68616c66000008686f73745f6c6962076765745f6e66740009" - "08686f73745f6c69620b7570646174655f64617461000103060506060a0b04050301001106" + "08686f73745f6c69620b7570646174655f6461746100010306050a0b060604050301001106" "19037f01418080c0000b7f0041af99c0000b7f0041b099c0000b072e04066d656d6f727902" "000666696e697368001e0a5f5f646174615f656e6403010b5f5f686561705f626173650302" - "0a821c051900200241094f0440000b20002002360204200020013602000b1900200241214f" - "0440000b20002002360204200020013602000b970101057f230041206b2201240020014118" - "6a22044100360200200141106a220542003703002001420037030802404181802020014108" - "6a4114100022034114470440024020034100480440200020033602040c010b2000417f3602" - "040b410121020c010b20002001290308370001200041116a2004280200360000200041096a" - "20052903003700000b200020023a0000200141206a24000b450020012d0000450440200020" - "01290001370000200041106a200141116a280000360000200041086a200141096a29000037" - "00000f0b418080c000410b20013402041001000bec1901097f230041b0036b22002400418b" - "80c000411b41004100410010021a41a680c000411941004100410010021a41e780c000412b" - "41004100410010021a027f02400240024002400240024002401003220141004a0440419281" - "c00041172001ad10011a1004220141004c0d0141a981c00041132001ad10011a200041c801" - "6a22034200370300200041c0016a22054200370300200041b8016a22044200370300200042" - "003703b001200041b0016a22064120100522014120470d0241bc81c0004113200641204101" - "10021a41cf81c000412041004100410010021a41dc82c000412e41004100410010021a2000" - "41a0016a410036020020004198016a42003703002000420037039001418180202000419001" - "6a22024114100022014114470d03418a83c00041142002411410061a200042003703704188" - "8018200041f0006a22024108100022014108470d04419e83c0004117420810011a41b583c0" - "00412820024108410110021a2000410036025041848008200041d0006a2202410410002201" - "4104470d0541dd83c000411520024104410110021a200041013b003c200342003703002005" - "420037030020044200370300200042003703b00102402000413c6a41022006412010072201" - "41004e044041f283c00041142001ad10011a200041306a20062001101b418684c000410d20" - "002802302000280234410110021a0c010b419384c00041292001ac10011a0b41bc84c00041" - "154183803c1008ac10011a41d184c00041134189803c1008ac10011a02402000413c6a4102" - "1009220141004e044041e484c00041142001ad10011a0c010b41f884c000412d2001ac1001" - "1a0b41a585c000412341004100410010021a41de86c000413341004100410010021a200042" - "0037037041828018200041f0006a22014108100a220241004c0d0620024108460440419187" - "c000412b420810011a41bc87c000412f20014108410110021a0c080b41eb87c000412f2002" - "ad10011a200041286a200041f0006a2002101a419a88c00041172000280228200028022c41" - "0110021a0c070b41bf82c000411d2001ac10011a419b7f0c070b419a82c00041252001ac10" - "011a419a7f0c060b41ef81c000412b2001ac10011a41997f0c050b41b486c000412a2001ac" - "10011a41b77e0c040b41f385c00041c1002001ac10011a41b67e0c030b41c885c000412b20" - "01ac10011a41b57e0c020b41b188c00041c5002002ac10011a0b200041a0016a4100360200" - "20004198016a4200370300200042003703900102404181802020004190016a22024114100a" - "220141004a044041f688c000411e2002411410061a0c010b419489c00041332001ac10011a" - "0b200041013b0050200041c8016a4200370300200041c0016a4200370300200041b8016a42" - "00370300200042003703b0010240200041d0006a4102200041b0016a22014120100b220241" - "004e044041c789c000411c2002ad10011a200041206a20012002101b41e389c00041152000" - "2802202000280224410110021a0c010b41f889c00041392002ac10011a0b41b18ac0004124" - "4183803c100cac10011a0240200041d0006a4102100d220141004e044041d58ac000411c20" - "01ad10011a0c010b41f18ac000413d2001ac10011a0b41ae8bc00041284100410041001002" - "1a41d68bc000412f41004100410010021a200041b0016a2202101c200041f0006a22012002" - "101d200041a8016a4200370300200041a0016a420037030020004198016a42003703002000" - "420037039001024002400240024002402001411420004190016a22024120100e2201412046" - "0440200241204100100f220441004a044041858cc00041232004ad10011a20004200370350" - "200441828018200041d0006a220141081010220241004c0d022002410846044041a88cc000" - "412a420810011a41d28cc000412e20014108410110021a0c060b41808dc000412e2002ad10" - "011a200041186a200041d0006a2002101a41ae8dc00041162000280218200028021c410110" - "021a0c050b41e68fc000413c2004ac10011a200041c8016a4200370300200041c0016a4200" - "370300200041b8016a4200370300200042003703b001410141828018200041b0016a412010" - "1022014100480d020c030b41ba92c000412e2001ac10011a41ef7c0c050b41c48dc000412b" - "2002ac10011a0c020b41a290c00041c1002001ac10011a0b200041013b00504101200041d0" - "006a4102200041b0016a412010112201410048044041e390c00041352001ac10011a0b4101" - "4183803c101222014100480440419891c00041322001ac10011a0b4101200041d0006a4102" - "10132201410048044041ca91c00041392001ac10011a0b418392c000413741004100410010" - "021a0c010b200041013b003c200041c8016a4200370300200041c0016a4200370300200041" - "b8016a4200370300200042003703b001024020042000413c6a4102200041b0016a22014120" - "1011220241004e044041ef8dc000411b2002ad10011a200041106a20012002101b418a8ec0" - "00411420002802102000280214410110021a0c010b419e8ec00041312002ac10011a0b41cf" - "8ec000412320044183803c1012ac10011a024020042000413c6a41021013220141004e0440" - "41f28ec000411b2001ad10011a0c010b418d8fc00041352001ac10011a0b41c28fc0004124" - "41004100410010021a0b41e892c000412f41004100410010021a200041b0016a2201101c20" - "00413c6a22042001101d200041e8006a4200370300200041e0006a4200370300200041d800" - "6a42003703002000420037035002400240024002400240024020044114200041d0006a2202" - "4120100e22014120460440419793c000410f20024120410110021a20004188016a42003703" - "0020004180016a4200370300200041f8006a42003703002000420037037002402004411420" - "04411441a693c0004109200041f0006a220141201014220241004a0440200041086a200120" - "02101b41ae93c00041122000280208200028020c410110021a0c010b41c093c000413c2002" - "ac10011a0b200041a8016a22084200370300200041a0016a2203420037030020004198016a" - "2205420037030020004200370390012000413c6a2202411441e80720004190016a22074120" - "101522014120470d0141fc93c000410e20074120410110021a200041c8016a420037030020" - "0041c0016a4200370300200041b8016a4200370300200042003703b00120024114412a2000" - "41b0016a22044120101622014120470d02418a94c000410e20044120410110021a419894c0" - "00412441004100410010021a419195c000412541004100410010021a20004188016a420037" - "030020004180016a4200370300200041f8006a42003703002000420037037041b695c00041" - "17200041f0006a22024120101722014120470d0341cd95c000410b41b695c0004117410110" - "021a41d895c000411120024120410110021a2004101c200041d0006a22062004101d200842" - "00370300200342003703002005420037030020004200370390010240200422032003410020" - "036b41037122026a22054f0d0020020440200221010340200341003a0000200341016a2103" - "200141016b22010d000b0b200241016b4107490d000340200341003a0000200341076a4100" - "3a0000200341066a41003a0000200341056a41003a0000200341046a41003a000020034103" - "6a41003a0000200341026a41003a0000200341016a41003a0000200341086a22032005470d" - "000b0b200541800220026b2201417c716a220320054b044003402005410036020020054104" - "6a22052003490d000b0b024020032001410371220120036a22024f0d002001220504400340" - "200341003a0000200341016a2103200541016b22050d000b0b200141016b4107490d000340" - "200341003a0000200341076a41003a0000200341066a41003a0000200341056a41003a0000" - "200341046a41003a0000200341036a41003a0000200341026a41003a0000200341016a4100" - "3a0000200341086a22032002470d000b0b0240200641142007412020044180021018220141" - "004a044041e995c00041102001ad10011a20014181024f0d0641f995c00041092004200141" - "0110021a0c010b418296c000412e2001ac10011a0b41b096c000411241c296c00041074101" - "100222014100480d0541c996c000411d2001ad10011a41e696c0004111422a10014100480d" - "0641f796c000411c420010011a419397c000411a41004100410010021a41ff97c000412941" - "004100410010021a41a898c000412810192201412846044041d098c000412741a898c00041" - "28410110021a41f798c000411e41004100410010021a41bf80c00041284100410041001002" - "1a41010c080b419599c000411a2001ac10011a41c37a0c070b41f494c000411d2001ac1001" - "1a418b7c0c060b41d894c000411c2001ac10011a41897c0c050b41bc94c000411c2001ac10" - "011a41887c0c040b41dd97c00041222001ac10011a41a77b0c030b000b41c797c000411620" - "01ac10011a41a57b0c010b41ad97c000411a42a47b10011a41a47b0b200041b0036a24000b" - "0bb9190100418080c0000baf196572726f725f636f64653d3d3d3d20484f53542046554e43" - "54494f4e532054455354203d3d3d54657374696e6720323620686f73742066756e6374696f" - "6e73535543434553533a20416c6c20686f73742066756e6374696f6e207465737473207061" - "73736564212d2d2d2043617465676f727920313a204c656467657220486561646572204675" - "6e6374696f6e73202d2d2d4c65646765722073657175656e6365206e756d6265723a506172" - "656e74206c65646765722074696d653a506172656e74206c656467657220686173683a5355" - "43434553533a204c6564676572206865616465722066756e6374696f6e734552524f523a20" - "6765745f706172656e745f6c65646765725f686173682077726f6e67206c656e6774683a45" - "52524f523a206765745f706172656e745f6c65646765725f74696d65206661696c65643a45" - "52524f523a206765745f6c65646765725f73716e206661696c65643a2d2d2d204361746567" - "6f727920323a205472616e73616374696f6e20446174612046756e6374696f6e73202d2d2d" - "5472616e73616374696f6e204163636f756e743a5472616e73616374696f6e20466565206c" - "656e6774683a5472616e73616374696f6e20466565202873657269616c697a656420585250" - "20616d6f756e74293a5472616e73616374696f6e2053657175656e63653a4e657374656420" - "6669656c64206c656e6774683a4e6573746564206669656c643a494e464f3a206765745f74" - "785f6e65737465645f6669656c64206e6f74206170706c696361626c653a5369676e657273" - "206172726179206c656e6774683a4d656d6f73206172726179206c656e6774683a4e657374" - "6564206172726179206c656e6774683a494e464f3a206765745f74785f6e65737465645f61" - "727261795f6c656e206e6f74206170706c696361626c653a535543434553533a205472616e" - "73616374696f6e20646174612066756e6374696f6e734552524f523a206765745f74785f66" - "69656c642853657175656e6365292077726f6e67206c656e6774683a4552524f523a206765" - "745f74785f6669656c6428466565292077726f6e67206c656e677468202865787065637465" - "64203820627974657320666f7220585250293a4552524f523a206765745f74785f6669656c" - "64284163636f756e74292077726f6e67206c656e6774683a2d2d2d2043617465676f727920" - "333a2043757272656e74204c6564676572204f626a6563742046756e6374696f6e73202d2d" - "2d43757272656e74206f626a6563742062616c616e6365206c656e67746820285852502061" - "6d6f756e74293a43757272656e74206f626a6563742062616c616e6365202873657269616c" - "697a65642058525020616d6f756e74293a43757272656e74206f626a6563742062616c616e" - "6365206c656e67746820286e6f6e2d58525020616d6f756e74293a43757272656e74206f62" - "6a6563742062616c616e63653a494e464f3a206765745f63757272656e745f6c6564676572" - "5f6f626a5f6669656c642842616c616e636529206661696c656420286d6179206265206578" - "706563746564293a43757272656e74206c6564676572206f626a656374206163636f756e74" - "3a494e464f3a206765745f63757272656e745f6c65646765725f6f626a5f6669656c642841" - "63636f756e7429206661696c65643a43757272656e74206e6573746564206669656c64206c" - "656e6774683a43757272656e74206e6573746564206669656c643a494e464f3a206765745f" - "63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c64206e6f742061" - "70706c696361626c653a43757272656e74206f626a656374205369676e6572732061727261" - "79206c656e6774683a43757272656e74206e6573746564206172726179206c656e6774683a" - "494e464f3a206765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f61" - "727261795f6c656e206e6f74206170706c696361626c653a535543434553533a2043757272" - "656e74206c6564676572206f626a6563742066756e6374696f6e732d2d2d2043617465676f" - "727920343a20416e79204c6564676572204f626a6563742046756e6374696f6e73202d2d2d" - "5375636365737366756c6c7920636163686564206f626a65637420696e20736c6f743a4361" - "63686564206f626a6563742062616c616e6365206c656e677468202858525020616d6f756e" - "74293a436163686564206f626a6563742062616c616e6365202873657269616c697a656420" - "58525020616d6f756e74293a436163686564206f626a6563742062616c616e6365206c656e" - "67746820286e6f6e2d58525020616d6f756e74293a436163686564206f626a656374206261" - "6c616e63653a494e464f3a206765745f6c65646765725f6f626a5f6669656c642842616c61" - "6e636529206661696c65643a436163686564206e6573746564206669656c64206c656e6774" - "683a436163686564206e6573746564206669656c643a494e464f3a206765745f6c65646765" - "725f6f626a5f6e65737465645f6669656c64206e6f74206170706c696361626c653a436163" - "686564206f626a656374205369676e657273206172726179206c656e6774683a4361636865" - "64206e6573746564206172726179206c656e6774683a494e464f3a206765745f6c65646765" - "725f6f626a5f6e65737465645f61727261795f6c656e206e6f74206170706c696361626c65" - "3a535543434553533a20416e79206c6564676572206f626a6563742066756e6374696f6e73" - "494e464f3a2063616368655f6c65646765725f6f626a206661696c65642028657870656374" - "656420776974682074657374206669787475726573293a494e464f3a206765745f6c656467" - "65725f6f626a5f6669656c64206661696c656420617320657870656374656420286e6f2063" - "6163686564206f626a656374293a494e464f3a206765745f6c65646765725f6f626a5f6e65" - "737465645f6669656c64206661696c65642061732065787065637465643a494e464f3a2067" - "65745f6c65646765725f6f626a5f61727261795f6c656e206661696c656420617320657870" - "65637465643a494e464f3a206765745f6c65646765725f6f626a5f6e65737465645f617272" - "61795f6c656e206661696c65642061732065787065637465643a535543434553533a20416e" - "79206c6564676572206f626a6563742066756e6374696f6e732028696e7465726661636520" - "746573746564294552524f523a206163636f756e745f6b65796c6574206661696c65642066" - "6f722063616368696e6720746573743a2d2d2d2043617465676f727920353a204b65796c65" - "742047656e65726174696f6e2046756e6374696f6e73202d2d2d4163636f756e74206b6579" - "6c65743a546573745479706543726564656e7469616c206b65796c65743a494e464f3a2063" - "726564656e7469616c5f6b65796c6574206661696c656420286578706563746564202d2069" - "6e74657266616365206973737565293a457363726f77206b65796c65743a4f7261636c6520" - "6b65796c65743a535543434553533a204b65796c65742067656e65726174696f6e2066756e" - "6374696f6e734552524f523a206f7261636c655f6b65796c6574206661696c65643a455252" - "4f523a20657363726f775f6b65796c6574206661696c65643a4552524f523a206163636f75" - "6e745f6b65796c6574206661696c65643a2d2d2d2043617465676f727920363a205574696c" - "6974792046756e6374696f6e73202d2d2d48656c6c6f2c205852504c205741534d20776f72" - "6c6421496e70757420646174613a5348413531322068616c6620686173683a4e4654206461" - "7461206c656e6774683a4e465420646174613a494e464f3a206765745f6e6674206661696c" - "656420286578706563746564202d206e6f2073756368204e4654293a546573742074726163" - "65206d6573736167657061796c6f616454726163652066756e6374696f6e20627974657320" - "7772697474656e3a54657374206e756d62657220747261636554726163655f6e756d206675" - "6e6374696f6e20737563636565646564535543434553533a205574696c6974792066756e63" - "74696f6e734552524f523a2074726163655f6e756d2829206661696c65643a4552524f523a" - "2074726163652829206661696c65643a4552524f523a20636f6d707574655f736861353132" - "5f68616c66206661696c65643a2d2d2d2043617465676f727920373a204461746120557064" - "6174652046756e6374696f6e73202d2d2d55706461746564206c656467657220656e747279" - "20646174612066726f6d205741534d20746573745375636365737366756c6c792075706461" - "746564206c656467657220656e74727920776974683a535543434553533a20446174612075" - "70646174652066756e6374696f6e734552524f523a207570646174655f6461746120666169" - "6c65643a004d0970726f64756365727302086c616e6775616765010452757374000c70726f" - "6365737365642d6279010572757374631d312e38352e312028346562313631323530203230" - "32352d30332d313529002c0f7461726765745f6665617475726573022b0f6d757461626c65" - "2d676c6f62616c732b087369676e2d657874"; + "0ae61b057c01027f230041206b220124002000027f418180202001410c6a41141000220241" + "14470440024020024100480440200020023602040c010b2000417f3602040b41010c010b20" + "00200129000c370001200041116a2001411c6a280000360000200041096a200141146a2900" + "0037000041000b3a0000200141206a24000b450020012d0000450440200020012900013700" + "00200041106a200141116a280000360000200041086a200141096a2900003700000f0b4180" + "80c000410b20013402041001000b1900200241214f0440000b200020023602042000200136" + "02000b1900200241094f0440000b20002002360204200020013602000bec1901097f230041" + "b0036b22002400418b80c000411b41004100410010021a41a680c000411941004100410010" + "021a41e780c000412b41004100410010021a027f0240024002400240024002400240100322" + "0141004a0440419281c00041172001ad10011a1004220141004c0d0141a981c00041132001" + "ad10011a200041c8016a22034200370300200041c0016a22054200370300200041b8016a22" + "044200370300200042003703b001200041b0016a22064120100522014120470d0241bc81c0" + "00411320064120410110021a41cf81c000412041004100410010021a41dc82c000412e4100" + "4100410010021a200041a0016a410036020020004198016a42003703002000420037039001" + "4181802020004190016a22024114100022014114470d03418a83c00041142002411410061a" + "2000420037037041888018200041f0006a22024108100022014108470d04419e83c0004117" + "420810011a41b583c000412820024108410110021a2000410036025041848008200041d000" + "6a22024104100022014104470d0541dd83c000411520024104410110021a200041013b003c" + "200342003703002005420037030020044200370300200042003703b00102402000413c6a41" + "02200641201007220141004e044041f283c00041142001ad10011a200041306a2006200110" + "1c418684c000410d20002802302000280234410110021a0c010b419384c00041292001ac10" + "011a0b41bc84c00041154183803c1008ac10011a41d184c00041134189803c1008ac10011a" + "02402000413c6a41021009220141004e044041e484c00041142001ad10011a0c010b41f884" + "c000412d2001ac10011a0b41a585c000412341004100410010021a41de86c0004133410041" + "00410010021a2000420037037041828018200041f0006a22014108100a220241004c0d0620" + "024108460440419187c000412b420810011a41bc87c000412f20014108410110021a0c080b" + "41eb87c000412f2002ad10011a200041286a200041f0006a2002101d419a88c00041172000" + "280228200028022c410110021a0c070b41bf82c000411d2001ac10011a419b7f0c070b419a" + "82c00041252001ac10011a419a7f0c060b41ef81c000412b2001ac10011a41997f0c050b41" + "b486c000412a2001ac10011a41b77e0c040b41f385c00041c1002001ac10011a41b67e0c03" + "0b41c885c000412b2001ac10011a41b57e0c020b41b188c00041c5002002ac10011a0b2000" + "41a0016a410036020020004198016a42003703002000420037039001024041818020200041" + "90016a22024114100a220141004a044041f688c000411e2002411410061a0c010b419489c0" + "0041332001ac10011a0b200041013b0050200041c8016a4200370300200041c0016a420037" + "0300200041b8016a4200370300200042003703b0010240200041d0006a4102200041b0016a" + "22014120100b220241004e044041c789c000411c2002ad10011a200041206a20012002101c" + "41e389c000411520002802202000280224410110021a0c010b41f889c00041392002ac1001" + "1a0b41b18ac00041244183803c100cac10011a0240200041d0006a4102100d220141004e04" + "4041d58ac000411c2001ad10011a0c010b41f18ac000413d2001ac10011a0b41ae8bc00041" + "2841004100410010021a41d68bc000412f41004100410010021a200041b0016a2202101a20" + "0041f0006a22012002101b200041a8016a4200370300200041a0016a420037030020004198" + "016a42003703002000420037039001024002400240024002402001411420004190016a2202" + "4120100e22014120460440200241204100100f220441004a044041858cc00041232004ad10" + "011a20004200370350200441828018200041d0006a220141081010220241004c0d02200241" + "0846044041a88cc000412a420810011a41d28cc000412e20014108410110021a0c060b4180" + "8dc000412e2002ad10011a200041186a200041d0006a2002101d41ae8dc000411620002802" + "18200028021c410110021a0c050b41e68fc000413c2004ac10011a200041c8016a42003703" + "00200041c0016a4200370300200041b8016a4200370300200042003703b001410141828018" + "200041b0016a4120101022014100480d020c030b41ba92c000412e2001ac10011a41ef7c0c" + "050b41c48dc000412b2002ac10011a0c020b41a290c00041c1002001ac10011a0b20004101" + "3b00504101200041d0006a4102200041b0016a412010112201410048044041e390c0004135" + "2001ac10011a0b41014183803c101222014100480440419891c00041322001ac10011a0b41" + "01200041d0006a410210132201410048044041ca91c00041392001ac10011a0b418392c000" + "413741004100410010021a0c010b200041013b003c200041c8016a4200370300200041c001" + "6a4200370300200041b8016a4200370300200042003703b001024020042000413c6a410220" + "0041b0016a220141201011220241004e044041ef8dc000411b2002ad10011a200041106a20" + "012002101c418a8ec000411420002802102000280214410110021a0c010b419e8ec0004131" + "2002ac10011a0b41cf8ec000412320044183803c1012ac10011a024020042000413c6a4102" + "1013220141004e044041f28ec000411b2001ad10011a0c010b418d8fc00041352001ac1001" + "1a0b41c28fc000412441004100410010021a0b41e892c000412f41004100410010021a2000" + "41b0016a2201101a2000413c6a22042001101b200041e8006a4200370300200041e0006a42" + "00370300200041d8006a420037030020004200370350024002400240024002400240200441" + "14200041d0006a22024120100e22014120460440419793c000410f20024120410110021a20" + "004188016a420037030020004180016a4200370300200041f8006a42003703002000420037" + "03700240200441142004411441a693c0004109200041f0006a220141201014220241004a04" + "40200041086a20012002101c41ae93c00041122000280208200028020c410110021a0c010b" + "41c093c000413c2002ac10011a0b200041a8016a22084200370300200041a0016a22034200" + "37030020004198016a2205420037030020004200370390012000413c6a2202411441e80720" + "004190016a22074120101522014120470d0141fc93c000410e20074120410110021a200041" + "c8016a4200370300200041c0016a4200370300200041b8016a4200370300200042003703b0" + "0120024114412a200041b0016a22044120101622014120470d02418a94c000410e20044120" + "410110021a419894c000412441004100410010021a419195c000412541004100410010021a" + "20004188016a420037030020004180016a4200370300200041f8006a420037030020004200" + "37037041b695c0004117200041f0006a22024120101722014120470d0341cd95c000410b41" + "b695c0004117410110021a41d895c000411120024120410110021a2004101a200041d0006a" + "22062004101b20084200370300200342003703002005420037030020004200370390010240" + "200422032003410020036b41037122026a22054f0d0020020440200221010340200341003a" + "0000200341016a2103200141016b22010d000b0b200241016b4107490d000340200341003a" + "0000200341076a41003a0000200341066a41003a0000200341056a41003a0000200341046a" + "41003a0000200341036a41003a0000200341026a41003a0000200341016a41003a00002003" + "41086a22032005470d000b0b200541800220026b2201417c716a220320054b044003402005" + "4100360200200541046a22052003490d000b0b024020032001410371220120036a22024f0d" + "002001220504400340200341003a0000200341016a2103200541016b22050d000b0b200141" + "016b4107490d000340200341003a0000200341076a41003a0000200341066a41003a000020" + "0341056a41003a0000200341046a41003a0000200341036a41003a0000200341026a41003a" + "0000200341016a41003a0000200341086a22032002470d000b0b0240200641142007412020" + "044180021018220141004a044041e995c00041102001ad10011a20014181024f0d0641f995" + "c000410920042001410110021a0c010b418296c000412e2001ac10011a0b41b096c0004112" + "41c296c00041074101100222014100480d0541c996c000411d2001ad10011a41e696c00041" + "11422a10014100480d0641f796c000411c420010011a419397c000411a4100410041001002" + "1a41ff97c000412941004100410010021a41a898c000412810192201412846044041d098c0" + "00412741a898c0004128410110021a41f798c000411e41004100410010021a41bf80c00041" + "2841004100410010021a41010c080b419599c000411a2001ac10011a41c37a0c070b41f494" + "c000411d2001ac10011a418b7c0c060b41d894c000411c2001ac10011a41897c0c050b41bc" + "94c000411c2001ac10011a41887c0c040b41dd97c00041222001ac10011a41a77b0c030b00" + "0b41c797c00041162001ac10011a41a57b0c010b41ad97c000411a42a47b10011a41a47b0b" + "200041b0036a24000b0bb9190100418080c0000baf196572726f725f636f64653d3d3d3d20" + "484f53542046554e4354494f4e532054455354203d3d3d54657374696e6720323620686f73" + "742066756e6374696f6e73535543434553533a20416c6c20686f73742066756e6374696f6e" + "20746573747320706173736564212d2d2d2043617465676f727920313a204c656467657220" + "4865616465722046756e6374696f6e73202d2d2d4c65646765722073657175656e6365206e" + "756d6265723a506172656e74206c65646765722074696d653a506172656e74206c65646765" + "7220686173683a535543434553533a204c6564676572206865616465722066756e6374696f" + "6e734552524f523a206765745f706172656e745f6c65646765725f686173682077726f6e67" + "206c656e6774683a4552524f523a206765745f706172656e745f6c65646765725f74696d65" + "206661696c65643a4552524f523a206765745f6c65646765725f73716e206661696c65643a" + "2d2d2d2043617465676f727920323a205472616e73616374696f6e20446174612046756e63" + "74696f6e73202d2d2d5472616e73616374696f6e204163636f756e743a5472616e73616374" + "696f6e20466565206c656e6774683a5472616e73616374696f6e2046656520287365726961" + "6c697a65642058525020616d6f756e74293a5472616e73616374696f6e2053657175656e63" + "653a4e6573746564206669656c64206c656e6774683a4e6573746564206669656c643a494e" + "464f3a206765745f74785f6e65737465645f6669656c64206e6f74206170706c696361626c" + "653a5369676e657273206172726179206c656e6774683a4d656d6f73206172726179206c65" + "6e6774683a4e6573746564206172726179206c656e6774683a494e464f3a206765745f7478" + "5f6e65737465645f61727261795f6c656e206e6f74206170706c696361626c653a53554343" + "4553533a205472616e73616374696f6e20646174612066756e6374696f6e734552524f523a" + "206765745f74785f6669656c642853657175656e6365292077726f6e67206c656e6774683a" + "4552524f523a206765745f74785f6669656c6428466565292077726f6e67206c656e677468" + "20286578706563746564203820627974657320666f7220585250293a4552524f523a206765" + "745f74785f6669656c64284163636f756e74292077726f6e67206c656e6774683a2d2d2d20" + "43617465676f727920333a2043757272656e74204c6564676572204f626a6563742046756e" + "6374696f6e73202d2d2d43757272656e74206f626a6563742062616c616e6365206c656e67" + "7468202858525020616d6f756e74293a43757272656e74206f626a6563742062616c616e63" + "65202873657269616c697a65642058525020616d6f756e74293a43757272656e74206f626a" + "6563742062616c616e6365206c656e67746820286e6f6e2d58525020616d6f756e74293a43" + "757272656e74206f626a6563742062616c616e63653a494e464f3a206765745f6375727265" + "6e745f6c65646765725f6f626a5f6669656c642842616c616e636529206661696c65642028" + "6d6179206265206578706563746564293a43757272656e74206c6564676572206f626a6563" + "74206163636f756e743a494e464f3a206765745f63757272656e745f6c65646765725f6f62" + "6a5f6669656c64284163636f756e7429206661696c65643a43757272656e74206e65737465" + "64206669656c64206c656e6774683a43757272656e74206e6573746564206669656c643a49" + "4e464f3a206765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669" + "656c64206e6f74206170706c696361626c653a43757272656e74206f626a65637420536967" + "6e657273206172726179206c656e6774683a43757272656e74206e65737465642061727261" + "79206c656e6774683a494e464f3a206765745f63757272656e745f6c65646765725f6f626a" + "5f6e65737465645f61727261795f6c656e206e6f74206170706c696361626c653a53554343" + "4553533a2043757272656e74206c6564676572206f626a6563742066756e6374696f6e732d" + "2d2d2043617465676f727920343a20416e79204c6564676572204f626a6563742046756e63" + "74696f6e73202d2d2d5375636365737366756c6c7920636163686564206f626a6563742069" + "6e20736c6f743a436163686564206f626a6563742062616c616e6365206c656e6774682028" + "58525020616d6f756e74293a436163686564206f626a6563742062616c616e636520287365" + "7269616c697a65642058525020616d6f756e74293a436163686564206f626a656374206261" + "6c616e6365206c656e67746820286e6f6e2d58525020616d6f756e74293a43616368656420" + "6f626a6563742062616c616e63653a494e464f3a206765745f6c65646765725f6f626a5f66" + "69656c642842616c616e636529206661696c65643a436163686564206e6573746564206669" + "656c64206c656e6774683a436163686564206e6573746564206669656c643a494e464f3a20" + "6765745f6c65646765725f6f626a5f6e65737465645f6669656c64206e6f74206170706c69" + "6361626c653a436163686564206f626a656374205369676e657273206172726179206c656e" + "6774683a436163686564206e6573746564206172726179206c656e6774683a494e464f3a20" + "6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e206e6f742061" + "70706c696361626c653a535543434553533a20416e79206c6564676572206f626a65637420" + "66756e6374696f6e73494e464f3a2063616368655f6c65646765725f6f626a206661696c65" + "642028657870656374656420776974682074657374206669787475726573293a494e464f3a" + "206765745f6c65646765725f6f626a5f6669656c64206661696c6564206173206578706563" + "74656420286e6f20636163686564206f626a656374293a494e464f3a206765745f6c656467" + "65725f6f626a5f6e65737465645f6669656c64206661696c65642061732065787065637465" + "643a494e464f3a206765745f6c65646765725f6f626a5f61727261795f6c656e206661696c" + "65642061732065787065637465643a494e464f3a206765745f6c65646765725f6f626a5f6e" + "65737465645f61727261795f6c656e206661696c65642061732065787065637465643a5355" + "43434553533a20416e79206c6564676572206f626a6563742066756e6374696f6e73202869" + "6e7465726661636520746573746564294552524f523a206163636f756e745f6b65796c6574" + "206661696c656420666f722063616368696e6720746573743a2d2d2d2043617465676f7279" + "20353a204b65796c65742047656e65726174696f6e2046756e6374696f6e73202d2d2d4163" + "636f756e74206b65796c65743a546573745479706543726564656e7469616c206b65796c65" + "743a494e464f3a2063726564656e7469616c5f6b65796c6574206661696c65642028657870" + "6563746564202d20696e74657266616365206973737565293a457363726f77206b65796c65" + "743a4f7261636c65206b65796c65743a535543434553533a204b65796c65742067656e6572" + "6174696f6e2066756e6374696f6e734552524f523a206f7261636c655f6b65796c65742066" + "61696c65643a4552524f523a20657363726f775f6b65796c6574206661696c65643a455252" + "4f523a206163636f756e745f6b65796c6574206661696c65643a2d2d2d2043617465676f72" + "7920363a205574696c6974792046756e6374696f6e73202d2d2d48656c6c6f2c205852504c" + "205741534d20776f726c6421496e70757420646174613a5348413531322068616c66206861" + "73683a4e46542064617461206c656e6774683a4e465420646174613a494e464f3a20676574" + "5f6e6674206661696c656420286578706563746564202d206e6f2073756368204e4654293a" + "54657374207472616365206d6573736167657061796c6f616454726163652066756e637469" + "6f6e206279746573207772697474656e3a54657374206e756d626572207472616365547261" + "63655f6e756d2066756e6374696f6e20737563636565646564535543434553533a20557469" + "6c6974792066756e6374696f6e734552524f523a2074726163655f6e756d2829206661696c" + "65643a4552524f523a2074726163652829206661696c65643a4552524f523a20636f6d7075" + "74655f7368613531325f68616c66206661696c65643a2d2d2d2043617465676f727920373a" + "2044617461205570646174652046756e6374696f6e73202d2d2d55706461746564206c6564" + "67657220656e74727920646174612066726f6d205741534d20746573745375636365737366" + "756c6c792075706461746564206c656467657220656e74727920776974683a535543434553" + "533a2044617461207570646174652066756e6374696f6e734552524f523a20757064617465" + "5f64617461206661696c65643a004d0970726f64756365727302086c616e67756167650104" + "52757374000c70726f6365737365642d6279010572757374631d312e38352e312028346562" + "31363132353020323032352d30332d313529002c0f7461726765745f666561747572657302" + "2b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; extern std::string const deepRecursionHex = "0061736d01000000013f0b60017f0060037f7f7f017f60027f7f017f60027f" @@ -9606,9 +9605,9 @@ extern std::string const hfPerfTest = extern std::string const allKeyletsWasmHex = "0061736d0100000001530a60057f7f7f7f7f017f60047f7f7f7f017f60067f7f7f7f7f7f01" "7f60037f7f7f017f60087f7f7f7f7f7f7f7f017f60037f7f7e017f60077f7f7f7f7f7f7f01" - "7f60057f7f7f7f7f006000017f60037f7f7f000284051808686f73745f6c69620974726163" - "655f6e756d000508686f73745f6c6962057472616365000008686f73745f6c696210636163" - "68655f6c65646765725f6f626a000308686f73745f6c6962146765745f6c65646765725f6f" + "7f60057f7f7f7f7f006000017f60037f7f7f000284051808686f73745f6c69620574726163" + "65000008686f73745f6c69621063616368655f6c65646765725f6f626a000308686f73745f" + "6c69620974726163655f6e756d000508686f73745f6c6962146765745f6c65646765725f6f" "626a5f6669656c64000108686f73745f6c69621c6765745f63757272656e745f6c65646765" "725f6f626a5f6669656c64000308686f73745f6c69620d74726163655f6163636f756e7400" "0108686f73745f6c69620e6163636f756e745f6b65796c6574000108686f73745f6c69620b" @@ -9624,237 +9623,220 @@ extern std::string const allKeyletsWasmHex = "6f73745f6c69621a7065726d697373696f6e65645f646f6d61696e5f6b65796c6574000008" "686f73745f6c69620e7369676e6572735f6b65796c6574000108686f73745f6c69620d7469" "636b65745f6b65796c6574000008686f73745f6c69620c7661756c745f6b65796c65740000" - "03040307080905030100110619037f01418080c0000b7f0041958bc0000b7f0041a08bc000" + "03040307080905030100110619037f01418080c0000b7f0041ad8ac0000b7f0041b08ac000" "0b073e05066d656d6f727902000d6f626a6563745f65786973747300180666696e69736800" - "190a5f5f646174615f656e6403010b5f5f686561705f6261736503020ae53503900602047f" - "037e230041f0006b22052400024020012d0000410146044041c280c0004116200128020422" - "01ac10001a200041013a0000200020013602040c010b200541186a200141196a2900003703" - "00200541106a200141116a290000370300200541086a200141096a29000037030020052001" - "2900013703002002200320054120410110011a02402005412041001002220141004a044002" - "400240024002402004450440418b80c000410f4285801410001a200541d8006a4200370300" - "200541d0006a4200370300200541c8006a4200370300200542003703402001418580142005" - "41406b4120100322014120460d0141a680c0004115417f20012001417f4e1b2201ac10001a" - "200041013a0000200020013602040c070b418b80c000410f2004ac10001a200541d0006a41" - "00360200200541c8006a42003703002005420037034020012004200541406b411410032201" - "417e47044020014114460d04200141004e0d0241ad8ac00041172001ac10001a0c030b417e" - "21010c020b200541286a200541cf006a22012900002209370300200541306a200541d7006a" - "2202290000220a370300200541386a200541df006a22032d000022043a0000200520052900" - "47220b37032020052f014021062005280142210720052d0046210820012009370000200220" - "0a370000200320043a0000200520083a004620052007360142200520063b01402005200b37" - "0047419a80c000410c200541406b4120410110011a0c040b41c48ac0004131421410001a41" - "f58ac00041202001ad10001a417321010b41a680c00041152001ac10001a200041013a0000" - "200020013602040c030b200520052900473703602005200541cc006a220129000037006520" - "0520052f014022023b016e2005200529036037032020052005290065370025200528004321" - "03200520052d00423a0042200520023b014020052003360043200120052900253700002005" - "2005290320370047419a80c000410c200541406b4114410110011a0c010b41bb80c0004107" - "2001ac10001a200041013a0000200020013602040c010b20004180023b01000b200541f000" - "6a24000bd92802077f027e23004180076b2200240041d880c000412341004100410010011a" - "20004198016a2201410036020020004190016a220242003703002000420037038801024020" - "00027f02404181802020004188016a22044114100422034114460440200041066a20002d00" - "8a013a00002000200029008f013703e001200020004194016a22052900003700e501200041" - "106a20002900e501370000200020002f0188013b01042000200028008b0136000720002000" - "2903e00137000b41fb80c0004108200041046a2206411410051a2001410036020020024200" - "37030020004200370388014183802020044114100422034114470d032000411a6a20002d00" - "8a013a00002000200029008f013703e001200020052900003700e501200041246a20002900" - "e501370000200020002f0188013b01182000200028008b0136001b200020002903e0013700" - "1f418381c000410c200041186a411410051a200041a0016a22054200370300200142003703" - "002002420037030020004200370388012006411420044120100622034120460d0102402003" - "4100480440200020033602300c010b2000417f3602300b41010c020b0c020b200041c5006a" - "20052903003700002000413d6a2001290300370000200041356a2002290300370000200020" - "002903880137002d41000b3a002c20004188016a2000412c6a418f81c00041074181802010" - "18024020002d0088014101460440200028028c01210341878ac0004112420510001a0c010b" - "41002103419681c000413541004100410010011a200041de006a41c4003a0000200041d800" - "6a4100360200200041e3006a41003a0000200041d5a6013b015c2000420037035020004100" - "36005f200041a0016a2202420037030020004198016a2204420037030020004190016a2205" - "420037030020004200370388010240200041046a4114200041186a4114200041d0006a4114" - "20004188016a4120100722014120470440024020014100480440200020013602680c010b20" - "00417f3602680b410121030c010b200041fd006a2002290300370000200041f5006a200429" - "0300370000200041ed006a200529030037000020002000290388013700650b200020033a00" - "6420004188016a200041e4006a41cb81c00041094100101820002d00880141014604402000" - "28028c01210341878ac0004112420510001a0c010b41d481c000413741004100410010011a" - "200041f0016a200041286a2203280100360200200041e8016a200041206a22042901003703" - "00200041fc016a200041d8006a290300220737020020004184026a200041e0006a28020022" - "02360200200020002901183703e0012000200029035022083702f401200041e8066a220120" - "02360200200041e0066a22022007370300200020083703d806200041f4066a200429010037" - "0200200041fc066a2003280100360200200020002901183702ec0620004188026a200041d8" - "066a22034128101a2000418c016a200041e0016a41d000101a2000410136028801200041f0" - "066a220442003703002001420037030020024200370300200042003703d8062000027f4199" - "8ac0004114200041b4016a4128200341201008220341204704400240200341004804402000" - "20033602e4010c010b2000417f3602e4010b41010c010b200041f9016a2004290300370000" - "200041f1016a2001290300370000200041e9016a2002290300370000200020002903d80637" - "00e10141000b3a00e001200041b4026a200041e0016a418b82c00041034181802010182000" - "2d00b402410146044020002802b802210341878ac0004112420610001a0c010b4100210341" - "8e82c000413141004100410010011a200041f8016a22024200370300200041f0016a220442" - "00370300200041e8016a22054200370300200042003703e0010240200041046a4114410620" - "0041e0016a4120100922014120470440024020014100480440200020013602c0020c010b20" - "00417f3602c0020b410121030c010b200041d5026a2002290300370000200041cd026a2004" - "290300370000200041c5026a2005290300370000200020002903e0013700bd020b20002003" - "3a00bc02200041e0016a200041bc026a41bf82c000410541818020101820002d00e0014101" - "46044020002802e401210341878ac0004112420610001a0c010b4100210341c482c0004133" - "41004100410010011a200041f8016a22024200370300200041f0016a220442003703002000" - "41e8016a22054200370300200042003703e0010240200041046a220141142001411441f782" - "c0004112200041e0016a4120100a22014120470440024020014100480440200020013602e4" - "020c010b2000417f3602e4020b410121030c010b200041f9026a2002290300370000200041" - "f1026a2004290300370000200041e9026a2005290300370000200020002903e0013700e102" - "0b200020033a00e002200041e0016a200041e0026a418983c000410a41988020101820002d" - "00e001410146044020002802e401210341878ac0004112420710001a0c010b410021034193" - "83c000413841004100410010011a200041f8016a22024200370300200041f0016a22044200" - "370300200041e8016a22054200370300200042003703e0010240200041046a411420004118" - "6a4114200041e0016a4120100b220141204704400240200141004804402000200136028803" - "0c010b2000417f360288030b410121030c010b2000419d036a200229030037000020004195" - "036a20042903003700002000418d036a2005290300370000200020002903e001370085030b" - "200020033a008403200041e0016a20004184036a41cb83c000410841818020101820002d00" - "e001410146044020002802e401210341878ac0004112420810001a0c010b41d383c0004136" - "41004100410010011a230041206b22012400200141186a22044200370300200141106a2205" - "4200370300200141086a2206420037030020014200370300200041a8036a2202027f200041" - "046a4114200041186a411420014120100c2203412047044002402003410048044020022003" - "3602040c010b2002417f3602040b41010c010b20022001290300370001200241196a200429" - "0300370000200241116a2005290300370000200241096a200629030037000041000b3a0000" - "200141206a2400200041e0016a2002418984c000410e41818020101820002d00e001410146" - "044020002802e401210341878ac0004112420910001a0c010b419784c000413c4100410041" - "0010011a230041206b22012400200141186a22044200370300200141106a22054200370300" - "200141086a2206420037030020014200370300200041cc036a2202027f200041046a411420" - "014120100d22034120470440024020034100480440200220033602040c010b2002417f3602" - "040b41010c010b20022001290300370001200241196a2004290300370000200241116a2005" - "290300370000200241096a200629030037000041000b3a0000200141206a2400200041e001" - "6a200241d384c000410341818020101820002d00e001410146044020002802e40121034187" - "8ac0004112420a10001a0c010b41d684c000413141004100410010011a230041206b220124" - "00200141186a22044200370300200141106a22054200370300200141086a22064200370300" - "20014200370300200041f0036a2202027f200041046a4114410b20014120100e2203412047" - "0440024020034100480440200220033602040c010b2002417f3602040b41010c010b200220" - "01290300370001200241196a2004290300370000200241116a200529030037000020024109" - "6a200629030037000041000b3a0000200141206a2400200041e0016a2002418785c0004106" - "41818020101820002d00e001410146044020002802e401210341878ac0004112420b10001a" - "0c010b418d85c000413441004100410010011a230041206b22012400200141186a22044200" - "370300200141106a22054200370300200141086a2206420037030020014200370300200041" - "94046a2202027f200041046a4114410c20014120100f220341204704400240200341004804" - "40200220033602040c010b2002417f3602040b41010c010b20022001290300370001200241" - "196a2004290300370000200241116a2005290300370000200241096a200629030037000041" - "000b3a0000200141206a2400200041f4016a200041146a280100360200200041ec016a2000" - "410c6a290100370200200020002901043702e401200041808080e0003602e001200041d806" - "6a200241c185c000410b41848020101820002d00d806410146044020002802dc0621034187" - "8ac0004112420c10001a0c010b41cc85c000413941004100410010011a230041206b220124" - "00200141186a22044200370300200141106a22054200370300200141086a22064200370300" - "20014200370300200041b8046a2202027f200041e0016a4118200041186a41142001412010" - "1022034120470440024020034100480440200220033602040c010b2002417f3602040b4101" - "0c010b20022001290300370001200241196a2004290300370000200241116a200529030037" - "0000200241096a200629030037000041000b3a0000200141206a2400200041d8066a200241" - "8586c000410741818020101820002d00d806410146044020002802dc06210341878ac00041" - "12420d10001a0c010b418c86c000413541004100410010011a230041206b22012400200141" - "186a22044200370300200141106a22054200370300200141086a2206420037030020014200" - "370300200041dc046a2202027f200041186a41144106200141201011220341204704400240" - "20034100480440200220033602040c010b2002417f3602040b41010c010b20022001290300" - "370001200241196a2004290300370000200241116a2005290300370000200241096a200629" - "030037000041000b3a0000200141206a2400200041d8066a200241c186c000410c41828020" - "101820002d00d806410146044020002802dc06210341878ac0004112420d10001a0c010b41" - "cd86c000413a41004100410010011a230041206b22012400200141186a2204420037030020" - "0141106a22054200370300200141086a220642003703002001420037030020004180056a22" - "02027f200041046a4114410d20014120101222034120470440024020034100480440200220" - "033602040c010b2002417f3602040b41010c010b20022001290300370001200241196a2004" - "290300370000200241116a2005290300370000200241096a200629030037000041000b3a00" - "00200141206a2400200041d8066a2002418787c000410541818020101820002d00d8064101" - "46044020002802dc06210341878ac0004112420d10001a0c010b418c87c000413341004100" - "410010011a230041206b22012400200141186a22044200370300200141106a220542003703" - "00200141086a2206420037030020014200370300200041a4056a2202027f200041046a4114" - "200041186a4114410e20014120101322034120470440024020034100480440200220033602" - "040c010b2002417f3602040b41010c010b20022001290300370001200241196a2004290300" - "370000200241116a2005290300370000200241096a200629030037000041000b3a00002001" - "41206a2400200041d8066a200241bf87c000410a41818020101820002d00d8064101460440" - "20002802dc06210341878ac0004112420e10001a0c010b41c987c000413841004100410010" - "011a230041206b22012400200141186a22044200370300200141106a220542003703002001" - "41086a2206420037030020014200370300200041c8056a2202027f200041046a4114410f20" - "014120101422034120470440024020034100480440200220033602040c010b2002417f3602" - "040b41010c010b20022001290300370001200241196a2004290300370000200241116a2005" - "290300370000200241096a200629030037000041000b3a0000200141206a2400200041d806" - "6a2002418188c000411241828020101820002d00d806410146044020002802dc0621034187" - "8ac0004112420f10001a0c010b419388c00041c00041004100410010011a230041206b2201" - "2400200141186a22044200370300200141106a22054200370300200141086a220642003703" - "0020014200370300200041ec056a2202027f200041046a4114200141201015220341204704" - "40024020034100480440200220033602040c010b2002417f3602040b41010c010b20022001" - "290300370001200241196a2004290300370000200241116a2005290300370000200241096a" - "200629030037000041000b3a0000200141206a2400200041d8066a200241d388c000410a41" - "00101820002d00d806410146044020002802dc06210341878ac0004112421010001a0c010b" - "41dd88c000413841004100410010011a230041206b22012400200141186a22044200370300" - "200141106a22054200370300200141086a220642003703002001420037030020004190066a" - "2202027f200041046a41144112200141201016220341204704400240200341004804402002" - "20033602040c010b2002417f3602040b41010c010b20022001290300370001200241196a20" - "04290300370000200241116a2005290300370000200241096a200629030037000041000b3a" - "0000200141206a2400200041d8066a2002419589c000410641818020101820002d00d80641" - "0146044020002802dc06210341878ac0004112421210001a0c010b419b89c0004134410041" - "00410010011a230041206b22012400200141186a22044200370300200141106a2205420037" - "0300200141086a2206420037030020014200370300200041b4066a2202027f200041046a41" - "14411320014120101722034120470440024020034100480440200220033602040c010b2002" - "417f3602040b41010c010b20022001290300370001200241196a2004290300370000200241" - "116a2005290300370000200241096a200629030037000041000b3a0000200141206a240020" - "0041d8066a200241cf89c00041054181802010184101210320002d00d80641014604402000" - "2802dc06210341878ac0004112421310001a0c010b41d489c000413341004100410010011a" - "0b20004180076a240020030f0b418080c000410b417f20032003417f4e1bac1000000bf506" - "010b7f230041106b2106200241104f0440024020002000410020006b41037122056a22044f" - "0d002001210320050440200521070340200020032d00003a0000200341016a210320004101" - "6a2100200741016b22070d000b0b200541016b4107490d000340200020032d00003a000020" - "0041016a200341016a2d00003a0000200041026a200341026a2d00003a0000200041036a20" - "0341036a2d00003a0000200041046a200341046a2d00003a0000200041056a200341056a2d" - "00003a0000200041066a200341066a2d00003a0000200041076a200341076a2d00003a0000" - "200341086a2103200041086a22002004470d000b0b2004200220056b220b417c71220c6a21" - "000240200120056a22034103712201450440200020044d0d01200321010340200420012802" - "00360200200141046a2101200441046a22042000490d000b0c010b41002102200641003602" - "0c2006410c6a2001722105410420016b22074101710440200520032d00003a000041012102" - "0b20074102710440200220056a200220036a2f01003b01000b200320016b21022001410374" - "2107200628020c210902402000200441046a4d0440200421050c010b410020076b41187121" - "08034020042009200776200241046a2202280200220920087472360200200441086a210a20" - "0441046a220521042000200a4b0d000b0b41002104200641003a0008200641003a0006027f" - "200141014604404100210141002108200641086a0c010b200241056a2d0000200620024104" - "6a2d000022013a000841087421084102210d200641066a0b210a20052003410171047f200a" - "200241046a200d6a2d00003a000020062d0006411074210420062d00080520010b41ff0171" - "200420087272410020076b411871742009200776723602000b200b41037121022003200c6a" - "21010b02402000200020026a22044f0d002002410771220304400340200020012d00003a00" - "00200141016a2101200041016a2100200341016b22030d000b0b200241016b4107490d0003" - "40200020012d00003a0000200041016a200141016a2d00003a0000200041026a200141026a" - "2d00003a0000200041036a200141036a2d00003a0000200041046a200141046a2d00003a00" - "00200041056a200141056a2d00003a0000200041066a200141066a2d00003a000020004107" - "6a200141076a2d00003a0000200141086a2101200041086a22002004470d000b0b0b0b930b" - "0200418080c0000b990a6572726f725f636f64653d47657474696e67206669656c643a2046" - "69656c6420646174613a204572726f722067657474696e67206669656c643a204572726f72" - "3a204572726f722067657474696e67206b65796c65743a202424242424205354415254494e" - "47205741534d20455845435554494f4e2024242424244163636f756e743a44657374696e61" - "74696f6e3a4163636f756e744163636f756e74206f626a656374206578697374732c207072" - "6f63656564696e67207769746820657363726f772066696e6973682e54727573746c696e65" - "54727573746c696e65206f626a656374206578697374732c2070726f63656564696e672077" - "69746820657363726f772066696e6973682e414d4d414d4d206f626a656374206578697374" - "732c2070726f63656564696e67207769746820657363726f772066696e6973682e43686563" - "6b436865636b206f626a656374206578697374732c2070726f63656564696e672077697468" - "20657363726f772066696e6973682e7465726d73616e64636f6e646974696f6e7343726564" - "656e7469616c43726564656e7469616c206f626a656374206578697374732c2070726f6365" - "6564696e67207769746820657363726f772066696e6973682e44656c656761746544656c65" - "67617465206f626a656374206578697374732c2070726f63656564696e6720776974682065" - "7363726f772066696e6973682e4465706f736974507265617574684465706f736974507265" - "61757468206f626a656374206578697374732c2070726f63656564696e6720776974682065" - "7363726f772066696e6973682e444944444944206f626a656374206578697374732c207072" - "6f63656564696e67207769746820657363726f772066696e6973682e457363726f77457363" - "726f77206f626a656374206578697374732c2070726f63656564696e672077697468206573" - "63726f772066696e6973682e4d505449737375616e63654d505449737375616e6365206f62" - "6a656374206578697374732c2070726f63656564696e67207769746820657363726f772066" - "696e6973682e4d50546f6b656e4d50546f6b656e206f626a656374206578697374732c2070" - "726f63656564696e67207769746820657363726f772066696e6973682e4e46546f6b656e4f" - "666665724e46546f6b656e4f66666572206f626a656374206578697374732c2070726f6365" - "6564696e67207769746820657363726f772066696e6973682e4f666665724f66666572206f" - "626a656374206578697374732c2070726f63656564696e67207769746820657363726f7720" - "66696e6973682e5061794368616e6e656c5061794368616e6e656c206f626a656374206578" - "697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e50" - "65726d697373696f6e6564446f6d61696e5065726d697373696f6e6564446f6d61696e206f" - "626a656374206578697374732c2070726f63656564696e67207769746820657363726f7720" - "66696e6973682e5369676e65724c6973745369676e65724c697374206f626a656374206578" - "697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e54" - "69636b65745469636b6574206f626a656374206578697374732c2070726f63656564696e67" - "207769746820657363726f772066696e6973682e5661756c745661756c74206f626a656374" + "190a5f5f646174615f656e6403010b5f5f686561705f6261736503020ad53103fb0402017f" + "027e23004180016b2205240002400240024020012d0000450440200541186a200141196a29" + "0000370300200541106a200141116a290000370300200541086a200141096a290000370300" + "200520012900013703002002200320054120410110001a2005412041001001220141004c0d" + "01024002402004450440418b80c000410f4285801410021a200141858014200541e0006a41" + "20100322014120460d0141a680c0004115417f20012001417f4e1b2201ac10021a20004101" + "3a0000200020013602040c060b418b80c000410f2004ac10021a20012004200541e0006a41" + "14100322014114460d0141a680c0004115417f20012001417f4e1b2201ac10021a20004101" + "3a0000200020013602040c050b200541c2006a200541e2006a2d00003a0000200541286a20" + "0541ef006a2900002206370300200541306a200541f7006a2900002207370300200541386a" + "200541ff006a2d000022013a0000200541cf006a2006370000200541d7006a200737000020" + "0541df006a20013a0000200520052f00603b01402005200529006722063703202005200528" + "006336004320052006370047419a80c000410c200541406b4120410110001a0c030b200541" + "c2006a200541e2006a2d00003a0000200520052900673703202005200541ec006a29000037" + "0025200541cc006a2005290025370000200520052f00603b01402005200528006336004320" + "052005290320370047419a80c000410c200541406b4114410110001a0c020b41c280c00041" + "1620012802042201ac10021a200041013a0000200020013602040c020b41bb80c000410720" + "01ac10021a200041013a0000200020013602040c010b20004180023b01000b20054180016a" + "24000bd627020a7f027e23004180076b2200240041d880c000412341004100410010001a02" + "402000027f02404181802020004188016a22034114100422044114460440200041066a2000" + "418a016a22012d00003a00002000200029008f013703e001200020004194016a2202290000" + "3700e501200041106a20002900e501370000200020002f0088013b01042000200028008b01" + "360007200020002903e00137000b41fb80c0004108200041046a2205411410051a41838020" + "20034114100422044114470d032000411a6a20012d00003a00002000200029008f013703e0" + "01200020022900003700e501200041246a20002900e501370000200020002f0088013b0118" + "2000200028008b0136001b200020002903e00137001f418381c000410c200041186a411410" + "051a200041a0016a2201420037030020004198016a2202420037030020004190016a420037" + "030020004200370388012005411420034120100622044120460d0102402004410048044020" + "0020043602300c010b2000417f3602300b41010c020b0c020b200041c5006a200129030037" + "00002000413d6a2002290300370000200041356a20004190016a2903003700002000200029" + "03880137002d41000b3a002c20004188016a22032000412c6a418f81c00041074181802010" + "180240024020002d00880145044041002104419681c000413541004100410010001a200041" + "de006a41c4003a0000200041d8006a4100360200200041e3006a41003a0000200041d5a601" + "3b015c200042003703502000410036005f200041a0016a2201420037030020004198016a22" + "02420037030020004190016a220542003703002000420037038801200041046a4114200041" + "186a4114200041d0006a411420034120100722034120470440024020034100480440200020" + "033602680c010b2000417f3602680b410121040c020b200041fd006a200129030037000020" + "0041f5006a2002290300370000200041ed006a200529030037000020002000290388013700" + "650c010b200028028c01210441878ac0004112420510021a0c010b200020043a0064200041" + "88016a200041e4006a41cb81c000410941001018024020002d00880145044041d481c00041" + "3741004100410010001a200041f0016a200041286a2201280100360200200041e8016a2000" + "41206a2202290100370300200041fc016a200041d8006a290300220a37020020004184026a" + "200041e0006a2802002203360200200020002901183703e00120002000290350220b3702f4" + "01200041e8066a22042003360200200041e0066a2203200a3703002000200b3703d8062000" + "41f4066a2002290100370200200041fc066a2001280100360200200020002901183702ec06" + "20004188026a200041d8066a22014128101a2000418c016a200041e0016a41d000101a2000" + "410136028801200041f0066a22024200370300200442003703002003420037030020004200" + "3703d80641998ac0004114200041b4016a4128200141201008220141204704400240200141" + "00480440200020013602e4010c010b2000417f3602e4010b410121040c020b200041f9016a" + "2002290300370000200041f1016a2004290300370000200041e9016a200329030037000020" + "0020002903d8063700e101410021040c010b200028028c01210441878ac000411242051002" + "1a0c010b200020043a00e001200041b4026a200041e0016a2203418b82c000410341818020" + "1018024020002d00b40245044041002104418e82c000413141004100410010001a200041f8" + "016a22014200370300200041f0016a22024200370300200041e8016a220542003703002000" + "42003703e001200041046a4114410620034120100922034120470440024020034100480440" + "200020033602c0020c010b2000417f3602c0020b410121040c020b200041d5026a20012903" + "00370000200041cd026a2002290300370000200041c5026a20052903003700002000200029" + "03e0013700bd020c010b20002802b802210441878ac0004112420610021a0c010b20002004" + "3a00bc02200041e0016a2203200041bc026a41bf82c0004105418180201018024020002d00" + "e0014504404100210441c482c000413341004100410010001a200041f8016a220142003703" + "00200041f0016a22024200370300200041e8016a22054200370300200042003703e0012000" + "41046a220941142009411441f782c000411220034120100a22034120470440024020034100" + "480440200020033602e4020c010b2000417f3602e4020b410121040c020b200041f9026a20" + "01290300370000200041f1026a2002290300370000200041e9026a20052903003700002000" + "20002903e0013700e1020c010b20002802e401210441878ac0004112420610021a0c010b20" + "0020043a00e002200041e0016a2203200041e0026a418983c000410a419880201018024020" + "002d00e00145044041002104419383c000413841004100410010001a200041f8016a220142" + "00370300200041f0016a22024200370300200041e8016a22054200370300200042003703e0" + "01200041046a4114200041186a411420034120100b22034120470440024020034100480440" + "20002003360288030c010b2000417f360288030b410121040c020b2000419d036a20012903" + "0037000020004195036a20022903003700002000418d036a20052903003700002000200029" + "03e001370085030c010b20002802e401210441878ac0004112420710021a0c010b20002004" + "3a008403200041e0016a220520004184036a41cb83c0004108418180201018024002400240" + "0240024002400240024002400240024020002d00e00145044041d383c00041364100410041" + "0010001a230041206b22032400200341186a22064200370300200341106a22074200370300" + "200341086a2208420037030020034200370300200041a8036a2201027f200041046a220441" + "14200041186a2209411420034120100c220241204704400240200241004804402001200236" + "02040c010b2001417f3602040b41010c010b20012003290300370001200141196a20062903" + "00370000200141116a2007290300370000200141096a200829030037000041000b3a000020" + "0341206a240020052001418984c000410e41818020101820002d00e0010d01419784c00041" + "3c41004100410010001a230041206b22032400200341186a22064200370300200341106a22" + "074200370300200341086a2208420037030020034200370300200041cc036a2201027f2004" + "411420034120100d22024120470440024020024100480440200120023602040c010b200141" + "7f3602040b41010c010b20012003290300370001200141196a200629030037000020014111" + "6a2007290300370000200141096a200829030037000041000b3a0000200341206a24002005" + "200141d384c000410341818020101820002d00e0010d0241d684c000413141004100410010" + "001a230041206b22032400200341186a22064200370300200341106a220742003703002003" + "41086a2208420037030020034200370300200041f0036a2201027f20044114410b20034120" + "100e22024120470440024020024100480440200120023602040c010b2001417f3602040b41" + "010c010b20012003290300370001200141196a2006290300370000200141116a2007290300" + "370000200141096a200829030037000041000b3a0000200341206a240020052001418785c0" + "00410641818020101820002d00e0010d03418d85c000413441004100410010001a23004120" + "6b22032400200341186a22064200370300200341106a22074200370300200341086a220842" + "003703002003420037030020004194046a2201027f20044114410c20034120100f22024120" + "470440024020024100480440200120023602040c010b2001417f3602040b41010c010b2001" + "2003290300370001200141196a2006290300370000200141116a2007290300370000200141" + "096a200829030037000041000b3a0000200341206a2400200041f4016a200041146a280100" + "360200200041ec016a2000410c6a290100370200200020002901043702e401200041808080" + "e0003602e001200041d8066a2203200141c185c000410b41848020101820002d00d8060d04" + "41cc85c000413941004100410010001a230041206b22012400200141186a22064200370300" + "200141106a22074200370300200141086a2208420037030020014200370300200041b8046a" + "2202027f200541182009411420014120101022054120470440024020054100480440200220" + "053602040c010b2002417f3602040b41010c010b20022001290300370001200241196a2006" + "290300370000200241116a2007290300370000200241096a200829030037000041000b3a00" + "00200141206a240020032002418586c000410741818020101820002d00d8060d05418c86c0" + "00413541004100410010001a230041206b22012400200141186a2206420037030020014110" + "6a22074200370300200141086a2208420037030020014200370300200041dc046a2202027f" + "20094114410620014120101122054120470440024020054100480440200220053602040c01" + "0b2002417f3602040b41010c010b20022001290300370001200241196a2006290300370000" + "200241116a2007290300370000200241096a200829030037000041000b3a0000200141206a" + "24002003200241c186c000410c41828020101820002d00d8060d0641cd86c000413a410041" + "00410010001a230041206b22012400200141186a22064200370300200141106a2207420037" + "0300200141086a220842003703002001420037030020004180056a2202027f20044114410d" + "20014120101222054120470440024020054100480440200220053602040c010b2002417f36" + "02040b41010c010b20022001290300370001200241196a2006290300370000200241116a20" + "07290300370000200241096a200829030037000041000b3a0000200141206a240020032002" + "418787c000410541818020101820002d00d8060d07418c87c000413341004100410010001a" + "230041206b22012400200141186a22064200370300200141106a2207420037030020014108" + "6a2208420037030020014200370300200041a4056a2202027f2004411420094114410e2001" + "4120101322054120470440024020054100480440200220053602040c010b2002417f360204" + "0b41010c010b20022001290300370001200241196a2006290300370000200241116a200729" + "0300370000200241096a200829030037000041000b3a0000200141206a24002003200241bf" + "87c000410a41818020101820002d00d8060d0841c987c000413841004100410010001a2300" + "41206b22012400200141186a22094200370300200141106a22064200370300200141086a22" + "07420037030020014200370300200041c8056a2202027f20044114410f2001412010142205" + "4120470440024020054100480440200220053602040c010b2002417f3602040b41010c010b" + "20022001290300370001200241196a2009290300370000200241116a200629030037000020" + "0241096a200729030037000041000b3a0000200141206a240020032002418188c000411241" + "828020101820002d00d8060d09419388c00041c00041004100410010001a230041206b2201" + "2400200141186a22094200370300200141106a22064200370300200141086a220742003703" + "0020014200370300200041ec056a2202027f20044114200141201015220541204704400240" + "20054100480440200220053602040c010b2002417f3602040b41010c010b20022001290300" + "370001200241196a2009290300370000200241116a2006290300370000200241096a200729" + "030037000041000b3a0000200141206a24002003200241d388c000410a4100101820002d00" + "d8060d0a41dd88c000413841004100410010001a230041206b22012400200141186a220942" + "00370300200141106a22064200370300200141086a22074200370300200142003703002000" + "4190066a2202027f2004411441122001412010162205412047044002402005410048044020" + "0220053602040c010b2002417f3602040b41010c010b20022001290300370001200241196a" + "2009290300370000200241116a2006290300370000200241096a200729030037000041000b" + "3a0000200141206a240020032002419589c000410641818020101820002d00d8060d0b419b" + "89c000413441004100410010001a230041206b22012400200141186a220542003703002001" + "41106a22094200370300200141086a2206420037030020014200370300200041b4066a2202" + "027f2004411441132001412010172204412047044002402004410048044020022004360204" + "0c010b2002417f3602040b41010c010b20022001290300370001200241196a200529030037" + "0000200241116a2009290300370000200241096a200629030037000041000b3a0000200141" + "206a24002003200241cf89c000410541818020101820002d00d80645044041d489c0004133" + "41004100410010001a410121040c0d0b20002802dc06210441878ac0004112421310021a0c" + "0c0b20002802e401210441878ac0004112420810021a0c0b0b20002802e401210441878ac0" + "004112420910021a0c0a0b20002802e401210441878ac0004112420a10021a0c090b200028" + "02e401210441878ac0004112420b10021a0c080b20002802dc06210441878ac0004112420c" + "10021a0c070b20002802dc06210441878ac0004112420d10021a0c060b20002802dc062104" + "41878ac0004112420d10021a0c050b20002802dc06210441878ac0004112420d10021a0c04" + "0b20002802dc06210441878ac0004112420e10021a0c030b20002802dc06210441878ac000" + "4112420f10021a0c020b20002802dc06210441878ac0004112421010021a0c010b20002802" + "dc06210441878ac0004112421210021a0b20004180076a240020040f0b418080c000410b41" + "7f20042004417f4e1bac1002000bfd0401067f200241104f044002402000410020006b4103" + "7122056a220420004d0d002001210320050440200521060340200020032d00003a00002003" + "41016a2103200041016a2100200641016b22060d000b0b200541016b4107490d0003402000" + "20032d00003a0000200041016a200341016a2d00003a0000200041026a200341026a2d0000" + "3a0000200041036a200341036a2d00003a0000200041046a200341046a2d00003a00002000" + "41056a200341056a2d00003a0000200041066a200341066a2d00003a0000200041076a2003" + "41076a2d00003a0000200341086a2103200041086a22002004470d000b0b2004200220056b" + "2207417c7122086a21000240200120056a2206410371450440200020044d0d012006210103" + "4020042001280200360200200141046a2101200441046a22042000490d000b0c010b200020" + "044d0d002006410374220541187121032006417c71220241046a2101410020056b41187121" + "05200228020021020340200420022003762001280200220220057472360200200141046a21" + "01200441046a22042000490d000b0b20074103712102200620086a21010b02402000200020" + "026a22064f0d002002410771220304400340200020012d00003a0000200141016a21012000" + "41016a2100200341016b22030d000b0b200241016b4107490d000340200020012d00003a00" + "00200041016a200141016a2d00003a0000200041026a200141026a2d00003a000020004103" + "6a200141036a2d00003a0000200041046a200141046a2d00003a0000200041056a20014105" + "6a2d00003a0000200041066a200141066a2d00003a0000200041076a200141076a2d00003a" + "0000200141086a2101200041086a22002006470d000b0b0b0ba30a0100418080c0000b990a" + "6572726f725f636f64653d47657474696e67206669656c643a204669656c6420646174613a" + "204572726f722067657474696e67206669656c643a204572726f723a204572726f72206765" + "7474696e67206b65796c65743a202424242424205354415254494e47205741534d20455845" + "435554494f4e2024242424244163636f756e743a44657374696e6174696f6e3a4163636f75" + "6e744163636f756e74206f626a656374206578697374732c2070726f63656564696e672077" + "69746820657363726f772066696e6973682e54727573746c696e6554727573746c696e6520" + "6f626a656374206578697374732c2070726f63656564696e67207769746820657363726f77" + "2066696e6973682e414d4d414d4d206f626a656374206578697374732c2070726f63656564" + "696e67207769746820657363726f772066696e6973682e436865636b436865636b206f626a" + "656374206578697374732c2070726f63656564696e67207769746820657363726f77206669" + "6e6973682e7465726d73616e64636f6e646974696f6e7343726564656e7469616c43726564" + "656e7469616c206f626a656374206578697374732c2070726f63656564696e672077697468" + "20657363726f772066696e6973682e44656c656761746544656c6567617465206f626a6563" + "74206578697374732c2070726f63656564696e67207769746820657363726f772066696e69" + "73682e4465706f736974507265617574684465706f73697450726561757468206f626a6563" + "74206578697374732c2070726f63656564696e67207769746820657363726f772066696e69" + "73682e444944444944206f626a656374206578697374732c2070726f63656564696e672077" + "69746820657363726f772066696e6973682e457363726f77457363726f77206f626a656374" "206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973" - "682e43757272656e74207365712076616c75653a0041ad8ac0000b68456e636f756e746572" - "6564206572726f725f636f64653a4279746520617272617920776173206578706563746564" - "20746f20686176652074686973206d616e792062797465733a204279746520617272617920" - "6861642074686973206d616e792062797465733a20004d0970726f64756365727302086c61" - "6e6775616765010452757374000c70726f6365737365642d6279010572757374631d312e39" - "302e30202831313539653738633420323032352d30392d313429002c0f7461726765745f66" - "65617475726573022b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; + "682e4d505449737375616e63654d505449737375616e6365206f626a656374206578697374" + "732c2070726f63656564696e67207769746820657363726f772066696e6973682e4d50546f" + "6b656e4d50546f6b656e206f626a656374206578697374732c2070726f63656564696e6720" + "7769746820657363726f772066696e6973682e4e46546f6b656e4f666665724e46546f6b65" + "6e4f66666572206f626a656374206578697374732c2070726f63656564696e672077697468" + "20657363726f772066696e6973682e4f666665724f66666572206f626a6563742065786973" + "74732c2070726f63656564696e67207769746820657363726f772066696e6973682e506179" + "4368616e6e656c5061794368616e6e656c206f626a656374206578697374732c2070726f63" + "656564696e67207769746820657363726f772066696e6973682e5065726d697373696f6e65" + "64446f6d61696e5065726d697373696f6e6564446f6d61696e206f626a6563742065786973" + "74732c2070726f63656564696e67207769746820657363726f772066696e6973682e536967" + "6e65724c6973745369676e65724c697374206f626a656374206578697374732c2070726f63" + "656564696e67207769746820657363726f772066696e6973682e5469636b65745469636b65" + "74206f626a656374206578697374732c2070726f63656564696e6720776974682065736372" + "6f772066696e6973682e5661756c745661756c74206f626a656374206578697374732c2070" + "726f63656564696e67207769746820657363726f772066696e6973682e43757272656e7420" + "7365712076616c75653a004d0970726f64756365727302086c616e67756167650104527573" + "74000c70726f6365737365642d6279010572757374631d312e38352e312028346562313631" + "32353020323032352d30332d313529002c0f7461726765745f6665617475726573022b0f6d" + "757461626c652d676c6f62616c732b087369676e2d657874"; extern std::string const codecovTestsWasmHex = "0061736d0100000001570b60047f7f7f7f017f60057f7f7f7f7f017f60027f7f017f60067f" @@ -10172,19 +10154,19 @@ extern std::string const floatTestsWasmHex = "106a2200410841001003410846044041f080c00041172000410810021a0c010b418781c000" "411e41004100410010001a0b0240410242fb00200141106a22004108410010044108460440" "41a581c00041212000410810021a0c010b41c681c000412641004100410010001a0b41ec81" - "c0004115418182c000410810021a419182c0004116418982c000410810021a41a782c00041" + "c0004115418182c000410810021a418982c0004116419f82c000410810021a41a782c00041" "1b41004100410010001a2001420037031802404201200141186a2200410841001001410846" "044041c282c000410f2000410810021a0c010b41d182c000411641004100410010001a0b02" "40200141186a4108418182c0004108100545044041e782c000411b41004100410010001a0c" - "010b418283c000411b41004100410010001a0b0240200141186a4108418982c00041081005" + "010b418283c000411b41004100410010001a0b0240200141186a4108419f82c00041081005" "4101460440419d83c000412341004100410010001a0c010b41c083c0004124410041004100" - "10001a0b0240418982c0004108200141186a41081005410246044041e483c0004123410041" + "10001a0b0240419f82c0004108200141186a41081005410246044041e483c0004123410041" "00410010001a0c010b418784c000412441004100410010001a0b41ab84c000412041004100" "410010001a200142d487b6f4c7d4b1c000370310410921000340200141106a220241084181" "82c000410820024108410010061a200041016b22000d000b20014200370318420a20014118" "6a22004108410010011a02402000410820024108100545044041cb84c00041144100410041" "0010001a0c010b41df84c000411341004100410010001a0b410b21000340200141106a2202" - "4108418182c000410820024108410010071a200041016b22000d000b024020024108418982" + "4108418182c000410820024108410010071a200041016b22000d000b024020024108419f82" "c0004108100545044041f284c000411941004100410010001a0c010b418b85c00041184100" "4100410010001a0b41a385c000412341004100410010001a20014200370300420a20014108" "410010011a200142d487b6f4c7d4b1c000370308410621000340200141086a220241082001" @@ -10195,7 +10177,7 @@ extern std::string const floatTestsWasmHex = "41186a22004108410010041a02402002410820004108100545044041f785c0004117410041" "00410010001a0c010b418e86c000411641004100410010001a0b41a486c000411741004100" "410010001a20014200370308418182c00041084103200141086a220041084100100a1a41bb" - "86c00041122000410810021a418982c00041084106200041084100100a1a41cd86c0004118" + "86c00041122000410810021a419f82c00041084106200041084100100a1a41cd86c0004118" "2000410810021a200142003703104209200141106a22024108410010011a20024108410220" "0041084100100a1a41e586c00041142000410810021a200241084100200041084100100a1a" "41f986c00041172000410810021a200142003703184200200141186a22034108410010011a" @@ -10207,10 +10189,10 @@ extern std::string const floatTestsWasmHex = "100c1a419888c00041182002410810021a200341084106200241084100100c1a41b088c000" "411c2002410810021a41cc88c000411741004100410010001a2001420037031042c0843d20" "024108410010011a2001420037031820024108200341084100100d1a41e388c00041142003" - "410810021a41f788c000411a41004100410010001a20014200370318418182c00041084189" - "82c000410820034108410010081a0240418982c0004108200341081005450440419189c000" - "411641004100410010001a0c010b41a789c000411541004100410010001a0b418982c00041" - "08418982c0004108200141186a22004108410010081a0240418182c0004108200041081005" + "410810021a41f788c000411a41004100410010001a20014200370318418182c0004108419f" + "82c000410820034108410010081a0240419f82c0004108200341081005450440419189c000" + "411641004100410010001a0c010b41a789c000411541004100410010001a0b419f82c00041" + "08419f82c0004108200141186a22004108410010081a0240418182c0004108200041081005" "45044041bc89c000411741004100410010001a0c010b41d389c00041164100410041001000" "1a0b41e989c000411a41004100410010001a2001420037031020014200370318420a200141" "186a22024108410010011a418182c000410820024108200141106a22004108410010091a41" @@ -10224,8 +10206,8 @@ extern std::string const floatTestsWasmHex = "6c6f61742066726f6d207536342031323330303a206661696c65642020666c6f6174206672" "6f6d2065787020322c206d616e7469737361203132333a2020666c6f61742066726f6d2065" "787020322c206d616e746973736120333a206661696c65642020666c6f61742066726f6d20" - "636f6e737420313ad4838d7ea4c6800094838d7ea4c680002020666c6f61742066726f6d20" - "636f6e7374202d313a0a24242420746573745f666c6f61745f636f6d706172652024242420" + "636f6e737420313ad4838d7ea4c680002020666c6f61742066726f6d20636f6e7374202d31" + "3a94838d7ea4c680000a24242420746573745f666c6f61745f636f6d706172652024242420" "20666c6f61742066726f6d20313a2020666c6f61742066726f6d20313a206661696c656420" "20666c6f61742066726f6d2031203d3d20464c4f41545f4f4e452020666c6f61742066726f" "6d203120213d20464c4f41545f4f4e452020666c6f61742066726f6d2031203e20464c4f41" @@ -10255,8 +10237,8 @@ extern std::string const floatTestsWasmHex = "696e76657274206120666c6f61742066726f6d2031303a2020696e7665727420616761696e" "3a2020696e766572742074776963653a20676f6f642020696e766572742074776963653a20" "626164004d0970726f64756365727302086c616e6775616765010452757374000c70726f63" - "65737365642d6279010572757374631d312e39302e30202831313539653738633420323032" - "352d30392d313429002c0f7461726765745f6665617475726573022b0f6d757461626c652d" + "65737365642d6279010572757374631d312e38352e31202834656231363132353020323032" + "352d30332d313529002c0f7461726765745f6665617475726573022b0f6d757461626c652d" "676c6f62616c732b087369676e2d657874"; extern std::string const float0Hex = diff --git a/src/test/app/wasm_fixtures/float_tests/Cargo.lock b/src/test/app/wasm_fixtures/float_tests/Cargo.lock index 972bf3ce61..175adf0254 100644 --- a/src/test/app/wasm_fixtures/float_tests/Cargo.lock +++ b/src/test/app/wasm_fixtures/float_tests/Cargo.lock @@ -3,13 +3,169 @@ version = 4 [[package]] -name = "float_tests" -version = "0.0.1" +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "xrpl-std", + "generic-array", ] [[package]] -name = "xrpl-std" +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "float_tests" version = "0.0.1" -source = "git+https://github.com/ripple/craft.git?branch=main#94fb247e0c21b9e7fecb91ce71ef7f74ef4a7931" +dependencies = [ + "xrpl-wasm-stdlib", +] + +[[package]] +name = "generic-array" +version = "0.14.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "libc" +version = "0.2.177" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" + +[[package]] +name = "proc-macro2" +version = "1.0.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "syn" +version = "2.0.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tinyvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "typenum" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + +[[package]] +name = "unicode-ident" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "xrpl-address-macro" +version = "0.7.1" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git#d27d3e0b4abf3c0215aade729d89053805efe48e" +dependencies = [ + "bs58", + "quote", + "sha2", + "syn", +] + +[[package]] +name = "xrpl-wasm-stdlib" +version = "0.7.1" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git#d27d3e0b4abf3c0215aade729d89053805efe48e" +dependencies = [ + "xrpl-address-macro", +] diff --git a/src/test/app/wasm_fixtures/float_tests/Cargo.toml b/src/test/app/wasm_fixtures/float_tests/Cargo.toml index b4dec2aa50..b369cac501 100644 --- a/src/test/app/wasm_fixtures/float_tests/Cargo.toml +++ b/src/test/app/wasm_fixtures/float_tests/Cargo.toml @@ -15,7 +15,7 @@ opt-level = 's' panic = "abort" [dependencies] -xrpl-std = { git = "https://github.com/ripple/craft.git", branch = "main", package = "xrpl-std" } +xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib" } [profile.dev] panic = "abort" diff --git a/src/test/app/wasm_fixtures/float_tests/src/lib.rs b/src/test/app/wasm_fixtures/float_tests/src/lib.rs index 9688ebd602..fc8a1ff5cb 100644 --- a/src/test/app/wasm_fixtures/float_tests/src/lib.rs +++ b/src/test/app/wasm_fixtures/float_tests/src/lib.rs @@ -6,6 +6,7 @@ extern crate std; use xrpl_std::core::locator::Locator; +use xrpl_std::core::types::opaque_float::{FLOAT_NEGATIVE_ONE, FLOAT_ONE}; use xrpl_std::decode_hex_32; use xrpl_std::host::trace::DataRepr::AsHex; use xrpl_std::host::trace::{trace, trace_data, trace_float, trace_num, DataRepr}; @@ -13,7 +14,7 @@ use xrpl_std::host::{ cache_ledger_obj, float_add, float_compare, float_divide, float_from_int, float_from_uint, float_log, float_multiply, float_pow, float_root, float_set, float_subtract, get_ledger_obj_array_len, get_ledger_obj_field, get_ledger_obj_nested_field, - trace_opaque_float, FLOAT_NEGATIVE_ONE, FLOAT_ONE, FLOAT_ROUNDING_MODES_TO_NEAREST, + trace_opaque_float, FLOAT_ROUNDING_MODES_TO_NEAREST, }; use xrpl_std::sfield; use xrpl_std::sfield::{ From 7bf6878b4b527143490854bedd5cdf439c2464bd Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 4 Nov 2025 14:49:45 -0500 Subject: [PATCH 029/137] fix imports --- src/test/app/HostFuncImpl_test.cpp | 2 ++ src/test/app/TestHostFunctions.h | 1 + 2 files changed, 3 insertions(+) diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 3835b475a6..94a1a57b74 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -21,6 +21,8 @@ #include +#include + namespace ripple { namespace test { diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index 040db53f10..fd9e15f6b1 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -26,6 +26,7 @@ #include #include +#include namespace ripple { From 427b7ea10416cd585a8a159c0eeb94f84a381132 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 4 Nov 2025 15:29:08 -0500 Subject: [PATCH 030/137] run rename script --- src/test/app/HostFuncImpl_test.cpp | 19 ------------------- src/test/app/TestHostFunctions.h | 19 ------------------- src/test/app/Wasm_test.cpp | 19 ------------------- src/test/app/wasm_fixtures/fixtures.cpp | 19 ------------------- src/test/app/wasm_fixtures/fixtures.h | 19 ------------------- src/xrpld/app/wasm/HostFunc.h | 19 ------------------- src/xrpld/app/wasm/HostFuncImpl.h | 19 ------------------- src/xrpld/app/wasm/HostFuncWrapper.h | 19 ------------------- src/xrpld/app/wasm/ParamsHelper.h | 18 ------------------ src/xrpld/app/wasm/WamrVM.h | 18 ------------------ src/xrpld/app/wasm/WasmVM.h | 18 ------------------ src/xrpld/app/wasm/detail/HostFuncImpl.cpp | 19 ------------------- src/xrpld/app/wasm/detail/HostFuncWrapper.cpp | 19 ------------------- src/xrpld/app/wasm/detail/WamrVM.cpp | 19 ------------------- src/xrpld/app/wasm/detail/WasmVM.cpp | 19 ------------------- 15 files changed, 282 deletions(-) diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 94a1a57b74..6ada72b765 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -1,22 +1,3 @@ -//------------------------------------------------------------------------------ -/* - This file is part of rippled: https://github.com/ripple/rippled - Copyright (c) 2025 Ripple Labs Inc. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -*/ -//============================================================================== - #include #include diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index fd9e15f6b1..4445f1ae73 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -1,22 +1,3 @@ -//------------------------------------------------------------------------------ -/* - This file is part of rippled: https://github.com/ripple/rippled - Copyright (c) 2025 Ripple Labs Inc. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -*/ -//============================================================================== - #include #include diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 57e349b78f..d03dfb270b 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -1,22 +1,3 @@ -//------------------------------------------------------------------------------ -/* - This file is part of rippled: https://github.com/ripple/rippled - Copyright (c) 2025 Ripple Labs Inc. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -*/ -//============================================================================== - #ifdef _DEBUG // #define DEBUG_OUTPUT 1 #endif diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 6fc73f6b44..e4c65c3d62 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -1,22 +1,3 @@ -//------------------------------------------------------------------------------ -/* - This file is part of rippled: https://github.com/ripple/rippled - Copyright (c) 2025 Ripple Labs Inc. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -*/ -//============================================================================== - // TODO: consider moving these to separate files (and figure out the build) #include diff --git a/src/test/app/wasm_fixtures/fixtures.h b/src/test/app/wasm_fixtures/fixtures.h index 0e7e3785ea..f7c258326f 100644 --- a/src/test/app/wasm_fixtures/fixtures.h +++ b/src/test/app/wasm_fixtures/fixtures.h @@ -1,22 +1,3 @@ -//------------------------------------------------------------------------------ -/* - This file is part of rippled: https://github.com/ripple/rippled - Copyright (c) 2025 Ripple Labs Inc. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -*/ -//============================================================================== - #pragma once // TODO: consider moving these to separate files (and figure out the build) diff --git a/src/xrpld/app/wasm/HostFunc.h b/src/xrpld/app/wasm/HostFunc.h index 4478a8cd56..bff939e0a1 100644 --- a/src/xrpld/app/wasm/HostFunc.h +++ b/src/xrpld/app/wasm/HostFunc.h @@ -1,22 +1,3 @@ -//------------------------------------------------------------------------------ -/* - This file is part of rippled: https://github.com/ripple/rippled - Copyright (c) 2025 Ripple Labs Inc. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -*/ -//============================================================================== - #pragma once #include diff --git a/src/xrpld/app/wasm/HostFuncImpl.h b/src/xrpld/app/wasm/HostFuncImpl.h index f56aa102a5..f1add087fb 100644 --- a/src/xrpld/app/wasm/HostFuncImpl.h +++ b/src/xrpld/app/wasm/HostFuncImpl.h @@ -1,22 +1,3 @@ -//------------------------------------------------------------------------------ -/* - This file is part of rippled: https://github.com/ripple/rippled - Copyright (c) 2023 Ripple Labs Inc. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -*/ -//============================================================================== - #pragma once #include diff --git a/src/xrpld/app/wasm/HostFuncWrapper.h b/src/xrpld/app/wasm/HostFuncWrapper.h index 6bfa576b9d..eed68f65d5 100644 --- a/src/xrpld/app/wasm/HostFuncWrapper.h +++ b/src/xrpld/app/wasm/HostFuncWrapper.h @@ -1,22 +1,3 @@ -//------------------------------------------------------------------------------ -/* - This file is part of rippled: https://github.com/ripple/rippled - Copyright (c) 2025 Ripple Labs Inc. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -*/ -//============================================================================== - #pragma once #include diff --git a/src/xrpld/app/wasm/ParamsHelper.h b/src/xrpld/app/wasm/ParamsHelper.h index 7f18389552..9d581c8158 100644 --- a/src/xrpld/app/wasm/ParamsHelper.h +++ b/src/xrpld/app/wasm/ParamsHelper.h @@ -1,21 +1,3 @@ -//------------------------------------------------------------------------------ -/* - This file is part of rippled: https://github.com/ripple/rippled - Copyright (c) 2025 Ripple Labs Inc. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -*/ -//============================================================================== #pragma once #include diff --git a/src/xrpld/app/wasm/WamrVM.h b/src/xrpld/app/wasm/WamrVM.h index a32257feb6..41f12b9d5c 100644 --- a/src/xrpld/app/wasm/WamrVM.h +++ b/src/xrpld/app/wasm/WamrVM.h @@ -1,21 +1,3 @@ -//------------------------------------------------------------------------------ -/* - This file is part of rippled: https://github.com/ripple/rippled - Copyright (c) 2023 Ripple Labs Inc. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -*/ -//============================================================================== #pragma once #include diff --git a/src/xrpld/app/wasm/WasmVM.h b/src/xrpld/app/wasm/WasmVM.h index 32eb239f60..4feb3850be 100644 --- a/src/xrpld/app/wasm/WasmVM.h +++ b/src/xrpld/app/wasm/WasmVM.h @@ -1,21 +1,3 @@ -//------------------------------------------------------------------------------ -/* - This file is part of rippled: https://github.com/ripple/rippled - Copyright (c) 2025 Ripple Labs Inc. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -*/ -//============================================================================== #pragma once #include diff --git a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp index b21a3d8b62..b48dd4bcf1 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp @@ -1,22 +1,3 @@ -//------------------------------------------------------------------------------ -/* - This file is part of rippled: https://github.com/ripple/rippled - Copyright (c) 2012, 2013 Ripple Labs Inc. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -*/ -//============================================================================== - #include #include #include diff --git a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp index 03d56fe14f..566e7a4c98 100644 --- a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp @@ -1,22 +1,3 @@ -//------------------------------------------------------------------------------ -/* - This file is part of rippled: https://github.com/ripple/rippled - Copyright (c) 2012, 2013 Ripple Labs Inc. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -*/ -//============================================================================== - #include #include #include diff --git a/src/xrpld/app/wasm/detail/WamrVM.cpp b/src/xrpld/app/wasm/detail/WamrVM.cpp index af0a7df800..d1b7fb694d 100644 --- a/src/xrpld/app/wasm/detail/WamrVM.cpp +++ b/src/xrpld/app/wasm/detail/WamrVM.cpp @@ -1,22 +1,3 @@ -//------------------------------------------------------------------------------ -/* - This file is part of rippled: https://github.com/ripple/rippled - Copyright (c) 2020 Ripple Labs Inc. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -*/ -//============================================================================== - #include #include diff --git a/src/xrpld/app/wasm/detail/WasmVM.cpp b/src/xrpld/app/wasm/detail/WasmVM.cpp index f2d3799ca8..e1d5f8e8b8 100644 --- a/src/xrpld/app/wasm/detail/WasmVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmVM.cpp @@ -1,22 +1,3 @@ -//------------------------------------------------------------------------------ -/* - This file is part of rippled: https://github.com/ripple/rippled - Copyright (c) 2025 Ripple Labs Inc. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -*/ -//============================================================================== - #ifdef _DEBUG // #define DEBUG_OUTPUT 1 #endif From 0db564d2616f4cdee531028706ae6dfd530c135f Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 4 Nov 2025 15:57:07 -0500 Subject: [PATCH 031/137] WASMI data --- BUILD.md | 1 + CMakeLists.txt | 1 + cmake/XrplCore.cmake | 6 ++ conanfile.py | 4 + external/wasmi/conandata.yml | 5 ++ external/wasmi/conanfile.py | 90 +++++++++++++++++++ external/wasmi/patches/static_only.patch | 15 ++++ external/wasmi/patches/wasmi.patch | 109 +++++++++++++++++++++++ 8 files changed, 231 insertions(+) create mode 100644 external/wasmi/conandata.yml create mode 100644 external/wasmi/conanfile.py create mode 100644 external/wasmi/patches/static_only.patch create mode 100644 external/wasmi/patches/wasmi.patch diff --git a/BUILD.md b/BUILD.md index f13204ea4c..3a30caea57 100644 --- a/BUILD.md +++ b/BUILD.md @@ -144,6 +144,7 @@ git fetch origin master git checkout master conan export --version 1.1.10 recipes/snappy/all conan export --version 4.0.3 recipes/soci/all +conan export --version 0.42.1 external/wasmi rm -rf .git ``` diff --git a/CMakeLists.txt b/CMakeLists.txt index cedc41eae0..a7c450ce0e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -119,6 +119,7 @@ endif() find_package(nudb REQUIRED) find_package(date REQUIRED) +find_package(wasmi REQUIRED) find_package(xxHash REQUIRED) target_link_libraries(xrpl_libs INTERFACE diff --git a/cmake/XrplCore.cmake b/cmake/XrplCore.cmake index 164fc8523f..cf9cdca272 100644 --- a/cmake/XrplCore.cmake +++ b/cmake/XrplCore.cmake @@ -63,11 +63,17 @@ target_link_libraries(xrpl.imports.main Xrpl::opts Xrpl::syslibs secp256k1::secp256k1 + wasmi::wasmi xrpl.libpb xxHash::xxhash $<$:antithesis-sdk-cpp> ) +if (WIN32) + target_link_libraries(xrpl.imports.main INTERFACE ntdll) +endif() + + include(add_module) include(target_link_modules) diff --git a/conanfile.py b/conanfile.py index 7f8ab24fbd..d748461551 100644 --- a/conanfile.py +++ b/conanfile.py @@ -2,6 +2,7 @@ from conan import ConanFile, __version__ as conan_version from conan.tools.cmake import CMake, CMakeToolchain, cmake_layout import re + class Xrpl(ConanFile): name = 'xrpl' @@ -29,6 +30,7 @@ class Xrpl(ConanFile): 'nudb/2.0.9', 'openssl/3.5.4', 'soci/4.0.3', + 'wasmi/0.42.1', 'zlib/1.3.1', ] @@ -133,6 +135,7 @@ class Xrpl(ConanFile): self.folders.generators = 'build/generators' generators = 'CMakeDeps' + def generate(self): tc = CMakeToolchain(self) tc.variables['tests'] = self.options.tests @@ -190,6 +193,7 @@ class Xrpl(ConanFile): 'protobuf::libprotobuf', 'soci::soci', 'sqlite3::sqlite', + 'wasmi::wasmi', 'xxhash::xxhash', 'zlib::zlib', ] diff --git a/external/wasmi/conandata.yml b/external/wasmi/conandata.yml new file mode 100644 index 0000000000..628590aea4 --- /dev/null +++ b/external/wasmi/conandata.yml @@ -0,0 +1,5 @@ +patches: + 0.42.1: + - patch_description: install only static lib (to prevent conflict with shared) + patch_file: patches/wasmi.patch + patch_type: conan diff --git a/external/wasmi/conanfile.py b/external/wasmi/conanfile.py new file mode 100644 index 0000000000..d6b1c0b259 --- /dev/null +++ b/external/wasmi/conanfile.py @@ -0,0 +1,90 @@ +from conan import ConanFile, tools +from conan.tools.cmake import CMake, CMakeToolchain, CMakeDeps, cmake_layout +from conan.tools.files import ( + apply_conandata_patches, + export_conandata_patches, + # get, +) +from conan.tools.scm import Git + +import os +# import json + +required_conan_version = ">=1.55.0" + +class WasmiConan(ConanFile): + name = "wasmi" + license = "Apache License v2.0" + url = "https://github.com/wasmi-labs/wasmi.git" + description = "WebAssembly (Wasm) interpreter" + package_type = "library" + settings = "os", "compiler", "build_type", "arch" + options = {"shared": [True, False]} + default_options = {"shared": False} + # generators = "CMakeToolchain", "CMakeDeps" + #requires = [("llvm/20.1.1@")] + + def export_sources(self): + export_conandata_patches(self) + pass + + # def build_requirements(self): + # self.tool_requires("llvm/20.1.1") + + + def config_options(self): + #if self.settings.os == "Windows": + # del self.options.fPIC + pass + + + def layout(self): + cmake_layout(self, src_folder="src") + + + def source(self): + git = Git(self) + git.fetch_commit( + url="https://github.com/wasmi-labs/wasmi.git", + commit="f628a7a86c9715f2c306f6ef9aea1cc2bdca5fa7", + ) + #get(self, **self.conan_data["sources"][self.version], strip_root=True) + + + def generate(self): + tc = CMakeToolchain(self) + + tc.variables["CMAKE_CXX_STANDARD"] = 20 + tc.variables["BUILD_SHARED_LIBS"] = 0 + + tc.generate() + + # This generates "foo-config.cmake" and "bar-config.cmake" in self.generators_folder + deps = CMakeDeps(self) + deps.generate() + + + def build(self): + apply_conandata_patches(self) + cmake = CMake(self) + cmake.verbose = True + cmake.configure(build_script_folder=os.path.join(self.source_folder, "crates", "c_api")) + cmake.build() + #self.run(f'echo {self.source_folder}') + + # Explicit way: + # self.run('cmake %s/hello %s' % (self.source_folder, cmake.command_line)) + # self.run("cmake --build . %s" % cmake.build_config) + + + def package(self): + cmake = CMake(self) + cmake.verbose = True + cmake.install() + + + def package_info(self): + self.cpp_info.libs = ["wasmi"] + self.cpp_info.names["cmake_find_package"] = "wasmi" + self.cpp_info.names["cmake_find_package_multi"] = "wasmi" + diff --git a/external/wasmi/patches/static_only.patch b/external/wasmi/patches/static_only.patch new file mode 100644 index 0000000000..aff4b408ea --- /dev/null +++ b/external/wasmi/patches/static_only.patch @@ -0,0 +1,15 @@ +diff --git a/crates/c_api/CMakeLists.txt b/crates/c_api/CMakeLists.txt +index b15c787..97dd294 100644 +--- a/crates/c_api/CMakeLists.txt ++++ b/crates/c_api/CMakeLists.txt +@@ -43,6 +43,10 @@ endif() + list(TRANSFORM WASMI_SHARED_FILES PREPEND ${WASMI_TARGET_DIR}/) + list(TRANSFORM WASMI_STATIC_FILES PREPEND ${WASMI_TARGET_DIR}/) + ++if(NOT BUILD_SHARED_LIBS) ++ set(WASMI_SHARED_FILES ) ++endif() ++ + # Instructions on how to build and install the Wasmi Rust crate. + find_program(WASMI_CARGO_BINARY cargo REQUIRED) + include(ExternalProject) diff --git a/external/wasmi/patches/wasmi.patch b/external/wasmi/patches/wasmi.patch new file mode 100644 index 0000000000..d79d52d6db --- /dev/null +++ b/external/wasmi/patches/wasmi.patch @@ -0,0 +1,109 @@ +diff --git a/crates/c_api/CMakeLists.txt b/crates/c_api/CMakeLists.txt +index b15c787a..0d0a04b7 100644 +--- a/crates/c_api/CMakeLists.txt ++++ b/crates/c_api/CMakeLists.txt +@@ -43,6 +43,11 @@ endif() + list(TRANSFORM WASMI_SHARED_FILES PREPEND ${WASMI_TARGET_DIR}/) + list(TRANSFORM WASMI_STATIC_FILES PREPEND ${WASMI_TARGET_DIR}/) + ++if(NOT BUILD_SHARED_LIBS) ++ set(WASMI_SHARED_FILES ) ++endif() ++ ++ + # Instructions on how to build and install the Wasmi Rust crate. + find_program(WASMI_CARGO_BINARY cargo REQUIRED) + include(ExternalProject) +diff --git a/crates/c_api/include/wasm.h b/crates/c_api/include/wasm.h +index 5ee617ff..0199192d 100644 +--- a/crates/c_api/include/wasm.h ++++ b/crates/c_api/include/wasm.h +@@ -146,6 +146,13 @@ WASM_DECLARE_OWN(store) + + WASM_API_EXTERN own wasm_store_t* wasm_store_new(wasm_engine_t*); + ++// Store fuel functions (forward declarations) ++struct wasmi_error; ++ ++WASM_API_EXTERN struct wasmi_error* wasm_store_get_fuel(const wasm_store_t*, uint64_t* fuel); ++WASM_API_EXTERN struct wasmi_error* wasm_store_set_fuel(wasm_store_t*, uint64_t fuel); ++//WASM_API_EXTERN void *wasm_store_get_data(const wasm_store_t*); ++//WASM_API_EXTERN void wasm_store_set_data(wasm_store_t*, void *data); + + /////////////////////////////////////////////////////////////////////////////// + // Type Representations +diff --git a/crates/c_api/include/wasmi.h b/crates/c_api/include/wasmi.h +index 2caffa37..0c0584ec 100644 +--- a/crates/c_api/include/wasmi.h ++++ b/crates/c_api/include/wasmi.h +@@ -10,7 +10,7 @@ + /** + * \brief Wasmi version string. + */ +-#define WASMI_VERSION "0.35.0" ++#define WASMI_VERSION "0.42.1" + /** + * \brief Wasmi major version number. + */ +@@ -18,10 +18,10 @@ + /** + * \brief Wasmi minor version number. + */ +-#define WASMI_VERSION_MINOR 35 ++#define WASMI_VERSION_MINOR 42 + /** + * \brief Wasmi patch version number. + */ +-#define WASMI_VERSION_PATCH 0 ++#define WASMI_VERSION_PATCH 1 + + #endif // WASMI_H +diff --git a/crates/c_api/src/store.rs b/crates/c_api/src/store.rs +index 56d4898f..543dbff8 100644 +--- a/crates/c_api/src/store.rs ++++ b/crates/c_api/src/store.rs +@@ -175,3 +175,44 @@ pub extern "C" fn wasmi_context_set_fuel( + ) -> Option> { + crate::handle_result(store.set_fuel(fuel), |()| {}) + } ++ ++//////////////////////////////////////////////////////////////////////////////////////// ++//////////////////////////////////////////////////////////////////////////////////////// ++//////////////////////////////////////////////////////////////////////////////////////// ++//////////////////////////////////////////////////////////////////////////////////////// ++ ++/// Returns the current fuel of the wasm store context in `fuel`. ++/// ++/// Wraps [`Store::get_fuel`]. ++/// ++/// # Errors ++/// ++/// If [`Store::get_fuel`] errors. ++#[no_mangle] ++pub extern "C" fn wasm_store_get_fuel( ++ store: &wasm_store_t, ++ fuel: &mut u64, ++) -> Option> { ++ let context = unsafe { store.inner.context() }; ++ crate::handle_result(context.get_fuel(), |amt| { ++ *fuel = amt; ++ }) ++} ++ ++/// Sets the current fuel of the wasm store context to `fuel`. ++/// ++/// Wraps [`Store::set_fuel`]. ++/// ++/// # Errors ++/// ++/// If [`Store::set_fuel`] errors. ++#[no_mangle] ++pub extern "C" fn wasm_store_set_fuel( ++ store: &mut wasm_store_t, ++ fuel: u64, ++) -> Option> { ++ ++ let mut context = unsafe { store.inner.context_mut() }; ++ crate::handle_result(context.set_fuel(fuel), |()| {}) ++} ++ From 35f7cbf772399c092eb9b0dcf28e6dfdef976f2c Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 25 Nov 2025 02:31:51 +0530 Subject: [PATCH 032/137] update --- .github/actions/build-deps/action.yml | 1 + .github/scripts/strategy-matrix/linux.json | 48 ++--- .../workflows/reusable-build-test-config.yml | 186 +++++++++++++++--- .github/workflows/upload-conan-deps.yml | 2 +- conanfile.py | 4 +- external/wasmi/conandata.yml | 14 +- external/wasmi/conanfile.py | 56 +----- .../{wasmi.patch => 0001-xrplf-0.42.1.patch} | 43 +++- external/wasmi/patches/static_only.patch | 15 -- 9 files changed, 247 insertions(+), 122 deletions(-) rename external/wasmi/patches/{wasmi.patch => 0001-xrplf-0.42.1.patch} (71%) delete mode 100644 external/wasmi/patches/static_only.patch diff --git a/.github/actions/build-deps/action.yml b/.github/actions/build-deps/action.yml index f20eb3a595..9ac6d65780 100644 --- a/.github/actions/build-deps/action.yml +++ b/.github/actions/build-deps/action.yml @@ -35,6 +35,7 @@ runs: LOG_VERBOSITY: ${{ inputs.log_verbosity }} run: | echo 'Installing dependencies.' + conan export --version 0.42.1 external/wasmi #TODO Switch to conan package mkdir -p "${BUILD_DIR}" cd "${BUILD_DIR}" conan install \ diff --git a/.github/scripts/strategy-matrix/linux.json b/.github/scripts/strategy-matrix/linux.json index 85a78c96dc..f6d176c57c 100644 --- a/.github/scripts/strategy-matrix/linux.json +++ b/.github/scripts/strategy-matrix/linux.json @@ -15,168 +15,168 @@ "distro_version": "bookworm", "compiler_name": "gcc", "compiler_version": "12", - "image_sha": "97ba375" + "image_sha": "ca4517d" }, { "distro_name": "debian", "distro_version": "bookworm", "compiler_name": "gcc", "compiler_version": "13", - "image_sha": "97ba375" + "image_sha": "ca4517d" }, { "distro_name": "debian", "distro_version": "bookworm", "compiler_name": "gcc", "compiler_version": "14", - "image_sha": "97ba375" + "image_sha": "ca4517d" }, { "distro_name": "debian", "distro_version": "bookworm", "compiler_name": "gcc", "compiler_version": "15", - "image_sha": "97ba375" + "image_sha": "ca4517d" }, { "distro_name": "debian", "distro_version": "bookworm", "compiler_name": "clang", "compiler_version": "16", - "image_sha": "97ba375" + "image_sha": "ca4517d" }, { "distro_name": "debian", "distro_version": "bookworm", "compiler_name": "clang", "compiler_version": "17", - "image_sha": "97ba375" + "image_sha": "ca4517d" }, { "distro_name": "debian", "distro_version": "bookworm", "compiler_name": "clang", "compiler_version": "18", - "image_sha": "97ba375" + "image_sha": "ca4517d" }, { "distro_name": "debian", "distro_version": "bookworm", "compiler_name": "clang", "compiler_version": "19", - "image_sha": "97ba375" + "image_sha": "ca4517d" }, { "distro_name": "debian", "distro_version": "bookworm", "compiler_name": "clang", "compiler_version": "20", - "image_sha": "97ba375" + "image_sha": "ca4517d" }, { "distro_name": "rhel", "distro_version": "8", "compiler_name": "gcc", "compiler_version": "14", - "image_sha": "97ba375" + "image_sha": "ca4517d" }, { "distro_name": "rhel", "distro_version": "8", "compiler_name": "clang", "compiler_version": "any", - "image_sha": "97ba375" + "image_sha": "ca4517d" }, { "distro_name": "rhel", "distro_version": "9", "compiler_name": "gcc", "compiler_version": "12", - "image_sha": "97ba375" + "image_sha": "ca4517d" }, { "distro_name": "rhel", "distro_version": "9", "compiler_name": "gcc", "compiler_version": "13", - "image_sha": "97ba375" + "image_sha": "ca4517d" }, { "distro_name": "rhel", "distro_version": "9", "compiler_name": "gcc", "compiler_version": "14", - "image_sha": "97ba375" + "image_sha": "ca4517d" }, { "distro_name": "rhel", "distro_version": "9", "compiler_name": "clang", "compiler_version": "any", - "image_sha": "97ba375" + "image_sha": "ca4517d" }, { "distro_name": "rhel", "distro_version": "10", "compiler_name": "gcc", "compiler_version": "14", - "image_sha": "97ba375" + "image_sha": "ca4517d" }, { "distro_name": "rhel", "distro_version": "10", "compiler_name": "clang", "compiler_version": "any", - "image_sha": "97ba375" + "image_sha": "ca4517d" }, { "distro_name": "ubuntu", "distro_version": "jammy", "compiler_name": "gcc", "compiler_version": "12", - "image_sha": "97ba375" + "image_sha": "ca4517d" }, { "distro_name": "ubuntu", "distro_version": "noble", "compiler_name": "gcc", "compiler_version": "13", - "image_sha": "97ba375" + "image_sha": "ca4517d" }, { "distro_name": "ubuntu", "distro_version": "noble", "compiler_name": "gcc", "compiler_version": "14", - "image_sha": "97ba375" + "image_sha": "ca4517d" }, { "distro_name": "ubuntu", "distro_version": "noble", "compiler_name": "clang", "compiler_version": "16", - "image_sha": "97ba375" + "image_sha": "ca4517d" }, { "distro_name": "ubuntu", "distro_version": "noble", "compiler_name": "clang", "compiler_version": "17", - "image_sha": "97ba375" + "image_sha": "ca4517d" }, { "distro_name": "ubuntu", "distro_version": "noble", "compiler_name": "clang", "compiler_version": "18", - "image_sha": "97ba375" + "image_sha": "ca4517d" }, { "distro_name": "ubuntu", "distro_version": "noble", "compiler_name": "clang", "compiler_version": "19", - "image_sha": "97ba375" + "image_sha": "ca4517d" } ], "build_type": ["Debug", "Release"], diff --git a/.github/workflows/reusable-build-test-config.yml b/.github/workflows/reusable-build-test-config.yml index a59dbda71b..746fde2241 100644 --- a/.github/workflows/reusable-build-test-config.yml +++ b/.github/workflows/reusable-build-test-config.yml @@ -7,19 +7,23 @@ on: description: "The directory where to build." required: true type: string + build_only: description: 'Whether to only build or to build and test the code ("true", "false").' required: true type: boolean + build_type: description: 'The build type to use ("Debug", "Release").' type: string required: true + cmake_args: description: "Additional arguments to pass to CMake." required: false type: string default: "" + cmake_target: description: "The CMake target to build." type: string @@ -29,6 +33,7 @@ on: description: Runner to run the job on as a JSON string required: true type: string + image: description: "The image to run in (leave empty to run natively)" required: true @@ -51,27 +56,162 @@ on: required: true jobs: - build: - uses: ./.github/workflows/reusable-build.yml - with: - build_dir: ${{ inputs.build_dir }} - build_type: ${{ inputs.build_type }} - cmake_args: ${{ inputs.cmake_args }} - cmake_target: ${{ inputs.cmake_target }} - runs_on: ${{ inputs.runs_on }} - image: ${{ inputs.image }} - config_name: ${{ inputs.config_name }} - nproc_subtract: ${{ inputs.nproc_subtract }} - secrets: - CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + build-and-test: + name: ${{ inputs.config_name }} + runs-on: ${{ fromJSON(inputs.runs_on) }} + container: ${{ inputs.image != '' && inputs.image || null }} + timeout-minutes: 60 + env: + ENABLED_VOIDSTAR: ${{ contains(inputs.cmake_args, '-Dvoidstar=ON') }} + ENABLED_COVERAGE: ${{ contains(inputs.cmake_args, '-Dcoverage=ON') }} + steps: + - name: Cleanup workspace + if: ${{ runner.os == 'macOS' }} + uses: XRPLF/actions/.github/actions/cleanup-workspace@3f044c7478548e3c32ff68980eeb36ece02b364e - test: - needs: build - uses: ./.github/workflows/reusable-test.yml - with: - run_tests: ${{ !inputs.build_only }} - verify_voidstar: ${{ contains(inputs.cmake_args, '-Dvoidstar=ON') }} - runs_on: ${{ inputs.runs_on }} - image: ${{ inputs.image }} - config_name: ${{ inputs.config_name }} - nproc_subtract: ${{ inputs.nproc_subtract }} + - name: Checkout repository + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + + - name: Prepare runner + uses: XRPLF/actions/.github/actions/prepare-runner@ff9f8f649df5855ffe1a1ae715df43e51807f2e0 + with: + disable_ccache: false + + - name: Print build environment + uses: ./.github/actions/print-env + + - name: Get number of processors + uses: XRPLF/actions/.github/actions/get-nproc@046b1620f6bfd6cd0985dc82c3df02786801fe0a + id: nproc + with: + subtract: ${{ inputs.nproc_subtract }} + + - name: Setup Conan + uses: ./.github/actions/setup-conan + + - name: Build dependencies + uses: ./.github/actions/build-deps + with: + build_dir: ${{ inputs.build_dir }} + build_nproc: ${{ steps.nproc.outputs.nproc }} + build_type: ${{ inputs.build_type }} + # Set the verbosity to "quiet" for Windows to avoid an excessive + # amount of logs. For other OSes, the "verbose" logs are more useful. + log_verbosity: ${{ runner.os == 'Windows' && 'quiet' || 'verbose' }} + + - name: Configure CMake + shell: bash + working-directory: ${{ inputs.build_dir }} + env: + BUILD_TYPE: ${{ inputs.build_type }} + CMAKE_ARGS: ${{ inputs.cmake_args }} + run: | + cmake \ + -G '${{ runner.os == 'Windows' && 'Visual Studio 17 2022' || 'Ninja' }}' \ + -DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake \ + -DCMAKE_BUILD_TYPE="${BUILD_TYPE}" \ + ${CMAKE_ARGS} \ + .. + + - name: Build the binary + shell: bash + working-directory: ${{ inputs.build_dir }} + env: + BUILD_NPROC: ${{ steps.nproc.outputs.nproc }} + BUILD_TYPE: ${{ inputs.build_type }} + CMAKE_TARGET: ${{ inputs.cmake_target }} + run: | + cmake \ + --build . \ + --config "${BUILD_TYPE}" \ + --parallel "${BUILD_NPROC}" \ + --target "${CMAKE_TARGET}" + + - name: Upload rippled artifact (Linux) + if: ${{ runner.os == 'Linux' }} + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + env: + BUILD_DIR: ${{ inputs.build_dir }} + with: + name: rippled-${{ inputs.config_name }} + path: ${{ env.BUILD_DIR }}/rippled + retention-days: 3 + if-no-files-found: error + + - name: Check linking (Linux) + if: ${{ runner.os == 'Linux' }} + working-directory: ${{ inputs.build_dir }} + shell: bash + run: | + ldd ./rippled + if [ "$(ldd ./rippled | grep -E '(libstdc\+\+|libgcc)' | wc -l)" -eq 0 ]; then + echo 'The binary is statically linked.' + else + echo 'The binary is dynamically linked.' + exit 1 + fi + + - name: Verify presence of instrumentation (Linux) + if: ${{ runner.os == 'Linux' && env.ENABLED_VOIDSTAR == 'true' }} + working-directory: ${{ inputs.build_dir }} + shell: bash + run: | + ./rippled --version | grep libvoidstar + + - name: Run the separate tests + if: ${{ !inputs.build_only }} + working-directory: ${{ inputs.build_dir }} + # Windows locks some of the build files while running tests, and parallel jobs can collide + env: + BUILD_TYPE: ${{ inputs.build_type }} + PARALLELISM: ${{ runner.os == 'Windows' && '1' || steps.nproc.outputs.nproc }} + shell: bash + run: | + ctest \ + --output-on-failure \ + -C "${BUILD_TYPE}" \ + -j "${PARALLELISM}" + + - name: Run the embedded tests + if: ${{ !inputs.build_only }} + working-directory: ${{ runner.os == 'Windows' && format('{0}/{1}', inputs.build_dir, inputs.build_type) || inputs.build_dir }} + shell: bash + env: + BUILD_NPROC: ${{ steps.nproc.outputs.nproc }} + run: | + ./rippled --unittest --unittest-jobs "${BUILD_NPROC}" + + - name: Debug failure (Linux) + if: ${{ failure() && runner.os == 'Linux' && !inputs.build_only }} + shell: bash + run: | + echo "IPv4 local port range:" + cat /proc/sys/net/ipv4/ip_local_port_range + echo "Netstat:" + netstat -an + + - name: Prepare coverage report + if: ${{ !inputs.build_only && env.ENABLED_COVERAGE == 'true' }} + working-directory: ${{ inputs.build_dir }} + env: + BUILD_NPROC: ${{ steps.nproc.outputs.nproc }} + BUILD_TYPE: ${{ inputs.build_type }} + shell: bash + run: | + cmake \ + --build . \ + --config "${BUILD_TYPE}" \ + --parallel "${BUILD_NPROC}" \ + --target coverage + + - name: Upload coverage report + if: ${{ github.repository_owner == 'XRPLF' && !inputs.build_only && env.ENABLED_COVERAGE == 'true' }} + uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3 + with: + disable_search: true + disable_telem: true + fail_ci_if_error: true + files: ${{ inputs.build_dir }}/coverage.xml + plugins: noop + token: ${{ secrets.CODECOV_TOKEN }} + verbose: true diff --git a/.github/workflows/upload-conan-deps.yml b/.github/workflows/upload-conan-deps.yml index f6262a2f1f..10d5597fa2 100644 --- a/.github/workflows/upload-conan-deps.yml +++ b/.github/workflows/upload-conan-deps.yml @@ -66,7 +66,7 @@ jobs: uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: Prepare runner - uses: XRPLF/actions/.github/actions/prepare-runner@99685816bb60a95a66852f212f382580e180df3a + uses: XRPLF/actions/.github/actions/prepare-runner@ff9f8f649df5855ffe1a1ae715df43e51807f2e0 with: disable_ccache: false diff --git a/conanfile.py b/conanfile.py index d748461551..d01a0f0969 100644 --- a/conanfile.py +++ b/conanfile.py @@ -35,7 +35,7 @@ class Xrpl(ConanFile): ] test_requires = [ - 'doctest/2.4.11', + 'doctest/2.4.12', ] tool_requires = [ @@ -116,7 +116,7 @@ class Xrpl(ConanFile): if self.options.jemalloc: self.requires('jemalloc/5.3.0') if self.options.rocksdb: - self.requires('rocksdb/10.0.1') + self.requires('rocksdb/10.5.1') self.requires('xxhash/0.8.3', **transitive_headers_opt) exports_sources = ( diff --git a/external/wasmi/conandata.yml b/external/wasmi/conandata.yml index 628590aea4..032c12753c 100644 --- a/external/wasmi/conandata.yml +++ b/external/wasmi/conandata.yml @@ -1,5 +1,11 @@ +# Do not update. Maintained by programmability team. + +sources: + "0.42.1": + sha256: 2a5697be33c7afce8f671af4a5a3621d9e93ce55d253d31bd8201458e465fbb8 + url: https://github.com/wasmi-labs/wasmi/archive/refs/tags/v0.42.1.tar.gz patches: - 0.42.1: - - patch_description: install only static lib (to prevent conflict with shared) - patch_file: patches/wasmi.patch - patch_type: conan + "0.42.1": + - patch_file: "patches/0001-xrplf-0.42.1.patch" + patch_type: conan + patch_description: Integration patch. Make wasmi lib to be able to build with existing smart-escrow branch. diff --git a/external/wasmi/conanfile.py b/external/wasmi/conanfile.py index d6b1c0b259..e245d62eb0 100644 --- a/external/wasmi/conanfile.py +++ b/external/wasmi/conanfile.py @@ -1,16 +1,9 @@ from conan import ConanFile, tools from conan.tools.cmake import CMake, CMakeToolchain, CMakeDeps, cmake_layout -from conan.tools.files import ( - apply_conandata_patches, - export_conandata_patches, - # get, -) -from conan.tools.scm import Git - +from conan.tools.files import apply_conandata_patches, export_conandata_patches, get import os -# import json -required_conan_version = ">=1.55.0" +required_conan_version = ">=2.0.0" class WasmiConan(ConanFile): name = "wasmi" @@ -18,73 +11,38 @@ class WasmiConan(ConanFile): url = "https://github.com/wasmi-labs/wasmi.git" description = "WebAssembly (Wasm) interpreter" package_type = "library" - settings = "os", "compiler", "build_type", "arch" - options = {"shared": [True, False]} + settings = "os", "arch", "compiler", "build_type" + options = {"shared": [False]} default_options = {"shared": False} - # generators = "CMakeToolchain", "CMakeDeps" - #requires = [("llvm/20.1.1@")] def export_sources(self): export_conandata_patches(self) - pass - - # def build_requirements(self): - # self.tool_requires("llvm/20.1.1") - - - def config_options(self): - #if self.settings.os == "Windows": - # del self.options.fPIC - pass - def layout(self): cmake_layout(self, src_folder="src") - def source(self): - git = Git(self) - git.fetch_commit( - url="https://github.com/wasmi-labs/wasmi.git", - commit="f628a7a86c9715f2c306f6ef9aea1cc2bdca5fa7", - ) - #get(self, **self.conan_data["sources"][self.version], strip_root=True) - + get(self, **self.conan_data["sources"][self.version], strip_root=True) + apply_conandata_patches(self) def generate(self): tc = CMakeToolchain(self) - - tc.variables["CMAKE_CXX_STANDARD"] = 20 - tc.variables["BUILD_SHARED_LIBS"] = 0 - + tc.variables["BUILD_SHARED_LIBS"] = self.options.shared tc.generate() - # This generates "foo-config.cmake" and "bar-config.cmake" in self.generators_folder deps = CMakeDeps(self) deps.generate() - def build(self): - apply_conandata_patches(self) cmake = CMake(self) - cmake.verbose = True cmake.configure(build_script_folder=os.path.join(self.source_folder, "crates", "c_api")) cmake.build() - #self.run(f'echo {self.source_folder}') - - # Explicit way: - # self.run('cmake %s/hello %s' % (self.source_folder, cmake.command_line)) - # self.run("cmake --build . %s" % cmake.build_config) - def package(self): cmake = CMake(self) - cmake.verbose = True cmake.install() - def package_info(self): self.cpp_info.libs = ["wasmi"] self.cpp_info.names["cmake_find_package"] = "wasmi" self.cpp_info.names["cmake_find_package_multi"] = "wasmi" - diff --git a/external/wasmi/patches/wasmi.patch b/external/wasmi/patches/0001-xrplf-0.42.1.patch similarity index 71% rename from external/wasmi/patches/wasmi.patch rename to external/wasmi/patches/0001-xrplf-0.42.1.patch index d79d52d6db..656c5aff65 100644 --- a/external/wasmi/patches/wasmi.patch +++ b/external/wasmi/patches/0001-xrplf-0.42.1.patch @@ -1,19 +1,54 @@ diff --git a/crates/c_api/CMakeLists.txt b/crates/c_api/CMakeLists.txt -index b15c787a..0d0a04b7 100644 +index b15c787a..4e6de690 100644 --- a/crates/c_api/CMakeLists.txt +++ b/crates/c_api/CMakeLists.txt -@@ -43,6 +43,11 @@ endif() +@@ -43,6 +43,10 @@ endif() list(TRANSFORM WASMI_SHARED_FILES PREPEND ${WASMI_TARGET_DIR}/) list(TRANSFORM WASMI_STATIC_FILES PREPEND ${WASMI_TARGET_DIR}/) +if(NOT BUILD_SHARED_LIBS) -+ set(WASMI_SHARED_FILES ) ++ set(WASMI_SHARED_FILES) +endif() -+ + # Instructions on how to build and install the Wasmi Rust crate. find_program(WASMI_CARGO_BINARY cargo REQUIRED) include(ExternalProject) +@@ -112,6 +116,7 @@ install( + DESTINATION ${CMAKE_INSTALL_LIBDIR} + ) + ++if(BUILD_SHARED_LIBS) + if(WASMI_TARGET MATCHES "darwin") + set(INSTALLED_LIB "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/libwasmi.dylib") + install( +@@ -131,6 +136,7 @@ if(WASMI_TARGET MATCHES "darwin") + install(CODE "execute_process(COMMAND ${install_name_tool_cmd})") + endif() + endif() ++endif() + + # Documentation Generation via Doxygen: + set(DOXYGEN_CONF_IN ${CMAKE_CURRENT_SOURCE_DIR}/doxygen.conf.in) +@@ -141,19 +147,3 @@ add_custom_target(doc + DEPENDS ${WASMI_GENERATED_CONF_H} ${DOXYGEN_CONF_OUT} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + ) +- +-# C-Header Formatting via clang-format: +-find_program(CLANG_FORMAT clang-format REQUIRED) +-file(GLOB_RECURSE HEADER_FILES +- ${CMAKE_CURRENT_SOURCE_DIR}/include/wasmi.h +- ${CMAKE_CURRENT_SOURCE_DIR}/include/wasmi/*.h +- ${CMAKE_CURRENT_SOURCE_DIR}/include/wasmi/*.hh +-) +-add_custom_target(check-format +- COMMAND ${CLANG_FORMAT} -style=llvm -Werror --dry-run ${HEADER_FILES} +- COMMENT "clang-format: Check formatting for Wasmi C-API header files" +-) +-add_custom_target(format +- COMMAND ${CLANG_FORMAT} -style=llvm -i ${HEADER_FILES} +- COMMENT "clang-format: Apply formatting rules for Wasmi C-API header files" +-) diff --git a/crates/c_api/include/wasm.h b/crates/c_api/include/wasm.h index 5ee617ff..0199192d 100644 --- a/crates/c_api/include/wasm.h diff --git a/external/wasmi/patches/static_only.patch b/external/wasmi/patches/static_only.patch deleted file mode 100644 index aff4b408ea..0000000000 --- a/external/wasmi/patches/static_only.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/crates/c_api/CMakeLists.txt b/crates/c_api/CMakeLists.txt -index b15c787..97dd294 100644 ---- a/crates/c_api/CMakeLists.txt -+++ b/crates/c_api/CMakeLists.txt -@@ -43,6 +43,10 @@ endif() - list(TRANSFORM WASMI_SHARED_FILES PREPEND ${WASMI_TARGET_DIR}/) - list(TRANSFORM WASMI_STATIC_FILES PREPEND ${WASMI_TARGET_DIR}/) - -+if(NOT BUILD_SHARED_LIBS) -+ set(WASMI_SHARED_FILES ) -+endif() -+ - # Instructions on how to build and install the Wasmi Rust crate. - find_program(WASMI_CARGO_BINARY cargo REQUIRED) - include(ExternalProject) From 25c3060fef979145a106d917922f44a64ab510c0 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 25 Nov 2025 02:40:57 +0530 Subject: [PATCH 033/137] remove conan.lock (temporary) --- conan.lock | 62 ------------------------------------------------------ 1 file changed, 62 deletions(-) delete mode 100644 conan.lock diff --git a/conan.lock b/conan.lock deleted file mode 100644 index 67c4dd8a10..0000000000 --- a/conan.lock +++ /dev/null @@ -1,62 +0,0 @@ -{ - "version": "0.5", - "requires": [ - "zlib/1.3.1#b8bc2603263cf7eccbd6e17e66b0ed76%1756234269.497", - "xxhash/0.8.3#681d36a0a6111fc56e5e45ea182c19cc%1756234289.683", - "sqlite3/3.49.1#8631739a4c9b93bd3d6b753bac548a63%1756234266.869", - "soci/4.0.3#a9f8d773cd33e356b5879a4b0564f287%1756234262.318", - "snappy/1.1.10#968fef506ff261592ec30c574d4a7809%1756234314.246", - "rocksdb/10.5.1#4a197eca381a3e5ae8adf8cffa5aacd0%1762797952.535", - "re2/20230301#dfd6e2bf050eb90ddd8729cfb4c844a4%1756234257.976", - "protobuf/3.21.12#d927114e28de9f4691a6bbcdd9a529d1%1756234251.614", - "openssl/3.5.4#a1d5835cc6ed5c5b8f3cd5b9b5d24205%1760106486.594", - "nudb/2.0.9#fb8dfd1a5557f5e0528114c2da17721e%1763150366.909", - "lz4/1.10.0#59fc63cac7f10fbe8e05c7e62c2f3504%1756234228.999", - "libiconv/1.17#1e65319e945f2d31941a9d28cc13c058%1756223727.64", - "libbacktrace/cci.20210118#a7691bfccd8caaf66309df196790a5a1%1756230911.03", - "libarchive/3.8.1#5cf685686322e906cb42706ab7e099a8%1756234256.696", - "jemalloc/5.3.0#e951da9cf599e956cebc117880d2d9f8%1729241615.244", - "grpc/1.50.1#02291451d1e17200293a409410d1c4e1%1756234248.958", - "doctest/2.4.12#eb9fb352fb2fdfc8abb17ec270945165%1762797941.757", - "date/3.0.4#f74bbba5a08fa388256688743136cb6f%1756234217.493", - "c-ares/1.34.5#b78b91e7cfb1f11ce777a285bbf169c6%1756234217.915", - "bzip2/1.0.8#00b4a4658791c1f06914e087f0e792f5%1756234261.716", - "boost/1.88.0#8852c0b72ce8271fb8ff7c53456d4983%1756223752.326", - "abseil/20230802.1#f0f91485b111dc9837a68972cb19ca7b%1756234220.907" - ], - "build_requires": [ - "zlib/1.3.1#b8bc2603263cf7eccbd6e17e66b0ed76%1756234269.497", - "strawberryperl/5.32.1.1#707032463aa0620fa17ec0d887f5fe41%1756234281.733", - "protobuf/3.21.12#d927114e28de9f4691a6bbcdd9a529d1%1756234251.614", - "nasm/2.16.01#31e26f2ee3c4346ecd347911bd126904%1756234232.901", - "msys2/cci.latest#5b73b10144f73cc5bfe0572ed9be39e1%1751977009.857", - "m4/1.4.19#f119296e5c4772b3bb7ab060ae8f417b%1760707875.678", - "cmake/3.31.8#dde3bde00bb843687e55aea5afa0e220%1756234232.89", - "b2/5.3.3#107c15377719889654eb9a162a673975%1756234226.28", - "automake/1.16.5#b91b7c384c3deaa9d535be02da14d04f%1755524470.56", - "autoconf/2.71#51077f068e61700d65bb05541ea1e4b0%1731054366.86" - ], - "python_requires": [], - "overrides": { - "protobuf/3.21.12": [ - null, - "protobuf/3.21.12" - ], - "lz4/1.9.4": [ - "lz4/1.10.0" - ], - "boost/1.83.0": [ - "boost/1.88.0" - ], - "sqlite3/[>=3.44 <4]": [ - "sqlite3/3.49.1" - ], - "lz4/[>=1.9.4 <2]": [ - "lz4/1.10.0#59fc63cac7f10fbe8e05c7e62c2f3504" - ], - "sqlite3/3.44.2": [ - "sqlite3/3.49.1" - ] - }, - "config_requires": [] -} From ef5d335e09ba71c72fa2829b8d2f58489e3aad35 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 25 Nov 2025 02:44:18 +0530 Subject: [PATCH 034/137] update --- src/test/app/Wasm_test.cpp | 40 +- src/xrpld/app/wasm/HostFuncWrapper.h | 2 +- src/xrpld/app/wasm/WasmVM.h | 8 +- src/xrpld/app/wasm/{WamrVM.h => WasmiVM.h} | 63 ++- src/xrpld/app/wasm/detail/HostFuncImpl.cpp | 14 +- src/xrpld/app/wasm/detail/HostFuncWrapper.cpp | 21 +- src/xrpld/app/wasm/detail/WasmVM.cpp | 14 +- .../wasm/detail/{WamrVM.cpp => WasmiVM.cpp} | 366 ++++++------------ 8 files changed, 187 insertions(+), 341 deletions(-) rename src/xrpld/app/wasm/{WamrVM.h => WasmiVM.h} (86%) rename src/xrpld/app/wasm/detail/{WamrVM.cpp => WasmiVM.cpp} (71%) diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index d03dfb270b..7b738fe8f2 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -5,7 +5,6 @@ #include #include -#include namespace ripple { namespace test { @@ -79,7 +78,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 6'912, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 2, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 3, std::to_string(re->cost)); } } @@ -169,7 +168,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 0, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 39, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 5, std::to_string(re->cost)); } env.close(); @@ -183,7 +182,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 5, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 78, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 10, std::to_string(re->cost)); } } @@ -201,7 +200,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 55, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 755, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 696, std::to_string(re->cost)); } } @@ -220,7 +219,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 34'432, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 157'452, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 145'573, std::to_string(re->cost)); } } @@ -245,7 +244,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 700, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 3'066'129, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 2'701'528, std::to_string(re->cost)); } } @@ -280,7 +279,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 332'205'984, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 270'282'552, std::to_string(re->cost)); } } @@ -316,7 +315,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 838, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 842, std::to_string(re->cost)); } env.close(); @@ -350,7 +349,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 40'098, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 842, std::to_string(re->cost)); } env.close(); @@ -375,7 +374,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 40'098, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 842, std::to_string(re->cost)); } } @@ -397,7 +396,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == -201, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 4'806, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 262, std::to_string(re->cost)); } } @@ -410,7 +409,7 @@ struct Wasm_test : public beast::unit_test::suite Expected getTxField(SField const& fname) override { - return Bytes((MAX_PAGES + 1) * 64 * 1024, 1); + return Bytes((128 + 1) * 64 * 1024, 1); } }; BadTestHostFunctions nfs(env); @@ -419,7 +418,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == -201, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 4'806, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 262, std::to_string(re->cost)); } } @@ -450,9 +449,8 @@ struct Wasm_test : public beast::unit_test::suite auto const s = sink.messages().str(); BEAST_EXPECT( - countSubstr(s, "WAMR Error: failure to call func") == 1); - BEAST_EXPECT( - countSubstr(s, "Exception: wasm operand stack overflow") > 0); + countSubstr(s, "WASMI Error: failure to call func") == 1); + BEAST_EXPECT(countSubstr(s, "exception: failure") > 0); } { @@ -500,7 +498,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 97'411, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 326, std::to_string(re->cost)); } env.close(); } @@ -515,7 +513,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 2'053, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 34, std::to_string(re->cost)); } env.close(); } @@ -629,7 +627,7 @@ struct Wasm_test : public beast::unit_test::suite Bytes const wasm(wasmStr.begin(), wasmStr.end()); TestHostFunctions hfs(env, 0); - auto const allowance = 152'981; + auto const allowance = 1'814; auto re = runEscrowWasm( wasm, ESCROW_FUNCTION_NAME, {}, &hfs, allowance, env.journal); @@ -699,7 +697,7 @@ struct Wasm_test : public beast::unit_test::suite testFloat(); testCodecovWasm(); - testDisabledFloat(); + // testDisabledFloat(); // perfTest(); } diff --git a/src/xrpld/app/wasm/HostFuncWrapper.h b/src/xrpld/app/wasm/HostFuncWrapper.h index eed68f65d5..13ed916e82 100644 --- a/src/xrpld/app/wasm/HostFuncWrapper.h +++ b/src/xrpld/app/wasm/HostFuncWrapper.h @@ -1,6 +1,6 @@ #pragma once -#include +#include namespace ripple { diff --git a/src/xrpld/app/wasm/WasmVM.h b/src/xrpld/app/wasm/WasmVM.h index 4feb3850be..18379d6d4d 100644 --- a/src/xrpld/app/wasm/WasmVM.h +++ b/src/xrpld/app/wasm/WasmVM.h @@ -18,12 +18,11 @@ static std::string_view const W_PROC_EXIT = "proc_exit"; static std::string_view const ESCROW_FUNCTION_NAME = "finish"; -uint32_t const MAX_PAGES = 128; // 8MB = 64KB*128 +class WasmiEngine; -class WamrEngine; class WasmEngine { - std::unique_ptr const impl; + std::unique_ptr const impl; WasmEngine(); @@ -57,9 +56,6 @@ public: std::vector const& imports = {}, beast::Journal j = beast::Journal{beast::Journal::getNullSink()}); - std::int32_t - initMaxPages(std::int32_t def); - // Host functions helper functionality void* newTrap(std::string_view msg = {}); diff --git a/src/xrpld/app/wasm/WamrVM.h b/src/xrpld/app/wasm/WasmiVM.h similarity index 86% rename from src/xrpld/app/wasm/WamrVM.h rename to src/xrpld/app/wasm/WasmiVM.h index 41f12b9d5c..967a9319a6 100644 --- a/src/xrpld/app/wasm/WamrVM.h +++ b/src/xrpld/app/wasm/WasmiVM.h @@ -2,42 +2,42 @@ #include -#include -#include +#include +#include namespace ripple { -struct WamrResult +struct WasmiResult { wasm_val_vec_t r; bool f; // failure flag - WamrResult(unsigned N = 0) : r{0, nullptr, 0, 0, nullptr}, f(false) + WasmiResult(unsigned N = 0) : r{0, nullptr}, f(false) { if (N) wasm_val_vec_new_uninitialized(&r, N); } - ~WamrResult() + ~WasmiResult() { if (r.size) wasm_val_vec_delete(&r); } - WamrResult(WamrResult const&) = delete; - WamrResult& - operator=(WamrResult const&) = delete; + WasmiResult(WasmiResult const&) = delete; + WasmiResult& + operator=(WasmiResult const&) = delete; - WamrResult(WamrResult&& o) + WasmiResult(WasmiResult&& o) { *this = std::move(o); } - WamrResult& - operator=(WamrResult&& o) + WasmiResult& + operator=(WasmiResult&& o) { r = o.r; - o.r = {0, nullptr, 0, 0, nullptr}; + o.r = {0, nullptr}; f = o.f; o.f = false; return *this; @@ -55,7 +55,6 @@ struct InstanceWrapper { wasm_extern_vec_t exports_; InstancePtr instance_; - wasm_exec_env_t execEnv_ = nullptr; beast::Journal j_ = beast::Journal(beast::Journal::getNullSink()); private: @@ -63,7 +62,6 @@ private: init( wasm_store_t* s, wasm_module_t* m, - int32_t maxPages, wasm_extern_vec_t* expt, wasm_extern_vec_t const& imports, beast::Journal j); @@ -79,8 +77,6 @@ public: InstanceWrapper( wasm_store_t* s, wasm_module_t* m, - int32_t maxPages, - int64_t gas, wasm_extern_vec_t const& imports, beast::Journal j); @@ -95,13 +91,11 @@ public: wmem getMem() const; - - std::int64_t - getGas() const; }; struct ModuleWrapper { + wasm_store_t* store_ = nullptr; ModulePtr module_; InstanceWrapper instanceWrap_; wasm_exporttype_vec_t exportTypes_; @@ -120,8 +114,6 @@ public: wasm_store_t* s, Bytes const& wasmBin, bool instantiate, - int32_t maxPages, - int64_t gas, std::vector const& imports, beast::Journal j); ~ModuleWrapper(); @@ -139,8 +131,6 @@ public: int addInstance( wasm_store_t* s, - int32_t maxPages, - int64_t gas, wasm_extern_vec_t const& imports = WASM_EMPTY_VEC); std::int64_t @@ -155,19 +145,21 @@ private: buildImports(wasm_store_t* s, std::vector const& imports); }; -class WamrEngine +class WasmiEngine { std::unique_ptr engine_; std::unique_ptr store_; std::unique_ptr moduleWrap_; - std::int32_t defMaxPages_ = -1; beast::Journal j_ = beast::Journal(beast::Journal::getNullSink()); std::mutex m_; // 1 instance mutex public: - WamrEngine(); - ~WamrEngine() = default; + WasmiEngine(); + ~WasmiEngine() = default; + + static std::unique_ptr + init(); Expected, TER> run(Bytes const& wasmCode, @@ -186,9 +178,6 @@ public: std::vector const& imports, beast::Journal j); - std::int32_t - initMaxPages(std::int32_t def); - std::int64_t getGas(); @@ -261,19 +250,19 @@ private: add_param(std::vector& in, int64_t p); template - inline WamrResult + inline WasmiResult call(std::string_view func, Types&&... args); template - inline WamrResult + inline WasmiResult call(FuncInfo const& f, Types&&... args); template - inline WamrResult + inline WasmiResult call(FuncInfo const& f, std::vector& in); template - inline WamrResult + inline WasmiResult call( FuncInfo const& f, std::vector& in, @@ -281,7 +270,7 @@ private: Types&&... args); template - inline WamrResult + inline WasmiResult call( FuncInfo const& f, std::vector& in, @@ -289,7 +278,7 @@ private: Types&&... args); template - inline WamrResult + inline WasmiResult call( FuncInfo const& f, std::vector& in, @@ -298,7 +287,7 @@ private: Types&&... args); template - inline WamrResult + inline WasmiResult call( FuncInfo const& f, std::vector& in, diff --git a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp index b48dd4bcf1..e61d39f9aa 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp @@ -7,7 +7,6 @@ #ifdef _DEBUG // #define DEBUG_OUTPUT 1 -// #define DEBUG_OUTPUT_WAMR 1 #endif namespace ripple { @@ -723,7 +722,7 @@ WasmHostFunctionsImpl::trace( #endif if (!asHex) { - j << "WAMR TRACE (" << leKey.key << "): " << msg << " " + j << "HF TRACE (" << leKey.key << "): " << msg << " " << std::string_view( reinterpret_cast(data.data()), data.size()); } @@ -733,7 +732,7 @@ WasmHostFunctionsImpl::trace( hex.reserve(data.size() * 2); boost::algorithm::hex( data.begin(), data.end(), std::back_inserter(hex)); - j << "WAMR DEV TRACE (" << leKey.key << "): " << msg << " " << hex; + j << "HF DEV TRACE (" << leKey.key << "): " << msg << " " << hex; } return msg.size() + data.size() * (asHex ? 2 : 1); @@ -747,7 +746,7 @@ WasmHostFunctionsImpl::traceNum(std::string_view const& msg, int64_t data) #else auto j = getJournal().trace(); #endif - j << "WAMR TRACE NUM(" << leKey.key << "): " << msg << " " << data; + j << "HF TRACE NUM(" << leKey.key << "): " << msg << " " << data; return msg.size() + sizeof(data); } @@ -764,8 +763,7 @@ WasmHostFunctionsImpl::traceAccount( auto const accountStr = toBase58(account); - j << "WAMR TRACE ACCOUNT(" << leKey.key << "): " << msg << " " - << accountStr; + j << "HF TRACE ACCOUNT(" << leKey.key << "): " << msg << " " << accountStr; return msg.size() + accountStr.size(); } @@ -780,7 +778,7 @@ WasmHostFunctionsImpl::traceFloat( auto j = getJournal().trace(); #endif auto const s = floatToString(data); - j << "WAMR TRACE FLOAT(" << leKey.key << "): " << msg << " " << s; + j << "HF TRACE FLOAT(" << leKey.key << "): " << msg << " " << s; return msg.size() + s.size(); } @@ -795,7 +793,7 @@ WasmHostFunctionsImpl::traceAmount( auto j = getJournal().trace(); #endif auto const amountStr = amount.getFullText(); - j << "WAMR TRACE AMOUNT(" << leKey.key << "): " << msg << " " << amountStr; + j << "HF TRACE AMOUNT(" << leKey.key << "): " << msg << " " << amountStr; return msg.size() + amountStr.size(); } diff --git a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp index 566e7a4c98..6e849fe867 100644 --- a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp @@ -1,7 +1,6 @@ #include #include #include -#include #include #include @@ -229,7 +228,7 @@ std::nullptr_t hfResult(wasm_val_vec_t* results, int32_t value) { results->data[0] = WASM_I32_VAL(value); - results->num_elems = 1; + // results->size = 1; return nullptr; } @@ -237,7 +236,7 @@ std::nullptr_t hfResult(wasm_val_vec_t* results, HostFunctionError value) { results->data[0] = WASM_I32_VAL(HfErrorToInt(value)); - results->num_elems = 1; + // results->size = 1; return nullptr; } @@ -1903,7 +1902,7 @@ testGetDataIncrement() { // test int32_t - wasm_val_vec_t params = {1, &values[0], 1, sizeof(wasm_val_t), nullptr}; + wasm_val_vec_t params = {1, &values[0]}; values[0] = WASM_I32_VAL(42); @@ -1915,7 +1914,7 @@ testGetDataIncrement() { // test int64_t - wasm_val_vec_t params = {1, &values[0], 1, sizeof(wasm_val_t), nullptr}; + wasm_val_vec_t params = {1, &values[0]}; values[0] = WASM_I64_VAL(1234); @@ -1927,7 +1926,7 @@ testGetDataIncrement() { // test SFieldCRef - wasm_val_vec_t params = {1, &values[0], 1, sizeof(wasm_val_t), nullptr}; + wasm_val_vec_t params = {1, &values[0]}; values[0] = WASM_I32_VAL(sfAccount.fieldCode); @@ -1939,7 +1938,7 @@ testGetDataIncrement() { // test Slice - wasm_val_vec_t params = {2, &values[0], 2, sizeof(wasm_val_t), nullptr}; + wasm_val_vec_t params = {2, &values[0]}; values[0] = WASM_I32_VAL(0); values[1] = WASM_I32_VAL(3); @@ -1952,7 +1951,7 @@ testGetDataIncrement() { // test string - wasm_val_vec_t params = {2, &values[0], 2, sizeof(wasm_val_t), nullptr}; + wasm_val_vec_t params = {2, &values[0]}; values[0] = WASM_I32_VAL(0); values[1] = WASM_I32_VAL(5); @@ -1972,7 +1971,7 @@ testGetDataIncrement() AccountID const id(calcAccountID( generateKeyPair(KeyType::secp256k1, generateSeed("alice")).first)); - wasm_val_vec_t params = {2, &values[0], 2, sizeof(wasm_val_t), nullptr}; + wasm_val_vec_t params = {2, &values[0]}; values[0] = WASM_I32_VAL(0); values[1] = WASM_I32_VAL(id.bytes); @@ -1988,7 +1987,7 @@ testGetDataIncrement() // test uint256 Hash h1 = sha512Half(Slice(buffer.data(), 8)); - wasm_val_vec_t params = {2, &values[0], 2, sizeof(wasm_val_t), nullptr}; + wasm_val_vec_t params = {2, &values[0]}; values[0] = WASM_I32_VAL(0); values[1] = WASM_I32_VAL(h1.bytes); @@ -2004,7 +2003,7 @@ testGetDataIncrement() // test Currency Currency const c = xrpCurrency(); - wasm_val_vec_t params = {2, &values[0], 2, sizeof(wasm_val_t), nullptr}; + wasm_val_vec_t params = {2, &values[0]}; values[0] = WASM_I32_VAL(0); values[1] = WASM_I32_VAL(c.bytes); diff --git a/src/xrpld/app/wasm/detail/WasmVM.cpp b/src/xrpld/app/wasm/detail/WasmVM.cpp index e1d5f8e8b8..d87b1444f6 100644 --- a/src/xrpld/app/wasm/detail/WasmVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmVM.cpp @@ -4,7 +4,7 @@ #include #include -#include +#include #include #include @@ -114,7 +114,7 @@ runEscrowWasm( { // create VM and set cost limit auto& vm = WasmEngine::instance(); - vm.initMaxPages(MAX_PAGES); + // vm.initMaxPages(MAX_PAGES); auto const ret = vm.run( wasmCode, @@ -153,7 +153,7 @@ preflightEscrowWasm( { // create VM and set cost limit auto& vm = WasmEngine::instance(); - vm.initMaxPages(MAX_PAGES); + // vm.initMaxPages(MAX_PAGES); auto const ret = vm.check( wasmCode, @@ -167,7 +167,7 @@ preflightEscrowWasm( //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -WasmEngine::WasmEngine() : impl(std::make_unique()) +WasmEngine::WasmEngine() : impl(std::make_unique()) { } @@ -202,12 +202,6 @@ WasmEngine::check( return impl->check(wasmCode, funcName, params, imports, j); } -std::int32_t -WasmEngine::initMaxPages(std::int32_t def) -{ - return impl->initMaxPages(def); -} - void* WasmEngine::newTrap(std::string_view msg) { diff --git a/src/xrpld/app/wasm/detail/WamrVM.cpp b/src/xrpld/app/wasm/detail/WasmiVM.cpp similarity index 71% rename from src/xrpld/app/wasm/detail/WamrVM.cpp rename to src/xrpld/app/wasm/detail/WasmiVM.cpp index d1b7fb694d..c3c1e300e4 100644 --- a/src/xrpld/app/wasm/detail/WamrVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmiVM.cpp @@ -1,116 +1,18 @@ -#include +#include #include -#include #include #ifdef _DEBUG // #define DEBUG_OUTPUT 1 -// #define DEBUG_OUTPUT_WAMR 1 #endif - // #define SHOW_CALL_TIME 1 -#define DISABLE_WM_LOG 1 namespace ripple { namespace { -// LCOV_EXCL_START -static log_level_t -getLogLevel(beast::severities::Severity severity) -{ - using namespace beast::severities; - switch (severity) - { - case kTrace: - return WASM_LOG_LEVEL_VERBOSE; - case kDebug: - return WASM_LOG_LEVEL_DEBUG; - case kInfo: - case kWarning: - return WASM_LOG_LEVEL_WARNING; - case kError: - return WASM_LOG_LEVEL_ERROR; - default: - UNREACHABLE("WAMR invalid severity"); - [[fallthrough]]; - case kFatal: - case kNone: - break; - } - - return WASM_LOG_LEVEL_FATAL; -} - -static beast::severities::Severity -getLogLevel(uint32_t severity) -{ - using namespace beast::severities; - switch (severity) - { - case WASM_LOG_LEVEL_VERBOSE: - return kTrace; - case WASM_LOG_LEVEL_DEBUG: - return kDebug; - case WASM_LOG_LEVEL_WARNING: - return kWarning; - case WASM_LOG_LEVEL_ERROR: - return kError; - default: - UNREACHABLE("WAMR invalid reverse severity"); - [[fallthrough]]; - case WASM_LOG_LEVEL_FATAL: - break; - } - - return kFatal; -} - -// This function is called from WAMR to log messages. -extern "C" void -wamr_log_to_rippled( - uint32_t logLevel, - char const* file, - int line, - char const* fmt, - ...) -{ -#ifdef DISABLE_WM_LOG - return; -#endif - - beast::Journal j = WasmEngine::instance().getJournal(); - std::ostringstream oss; - - // Format the variadic args - if (file) - { - oss << "WAMR (" << file << ":" << line << "): "; - } - else - { - oss << "WAMR: "; - } - - va_list args; - va_start(args, fmt); - - char formatted[4096]; - vsnprintf(formatted, sizeof(formatted), fmt, args); - formatted[sizeof(formatted) - 1] = '\0'; - - va_end(args); - - oss << formatted; - - j.stream(getLogLevel(logLevel)) << oss.str(); -#ifdef DEBUG_OUTPUT_WAMR - std::cerr << oss.str() << std::endl; -#endif -} - void print_wasm_error(std::string_view msg, wasm_trap_t* trap, beast::Journal jlog) { @@ -125,13 +27,13 @@ print_wasm_error(std::string_view msg, wasm_trap_t* trap, beast::Journal jlog) if (trap) wasm_trap_message(trap, &error_message); - if (error_message.num_elems) + if (error_message.size) { - j << "WAMR Error: " << msg << ", " - << std::string_view(error_message.data, error_message.num_elems - 1); + j << "WASMI Error: " << msg << ", " + << std::string_view(error_message.data, error_message.size - 1); } else - j << "WAMR Error: " << msg; + j << "WASMI Error: " << msg; if (error_message.size) wasm_byte_vec_delete(&error_message); @@ -151,20 +53,13 @@ InstancePtr InstanceWrapper::init( wasm_store_t* s, wasm_module_t* m, - int32_t maxPages, wasm_extern_vec_t* expt, wasm_extern_vec_t const& imports, beast::Journal j) { wasm_trap_t* trap = nullptr; - InstantiationArgs inst_args{ - 128 * 1024, - 256 * 1024, - static_cast(maxPages > 0 ? maxPages : 0)}; - InstancePtr mi = InstancePtr( - wasm_instance_new_with_args_ex(s, m, &imports, &trap, &inst_args), - &wasm_instance_delete); + wasm_instance_new(s, m, &imports, &trap), &wasm_instance_delete); if (!mi || trap) { @@ -176,14 +71,12 @@ InstanceWrapper::init( } InstanceWrapper::InstanceWrapper() - : exports_{0, nullptr, 0, 0, nullptr} - , instance_(nullptr, &wasm_instance_delete) + : exports_{0, nullptr}, instance_(nullptr, &wasm_instance_delete) { } InstanceWrapper::InstanceWrapper(InstanceWrapper&& o) - : exports_{0, nullptr, 0, 0, nullptr} - , instance_(nullptr, &wasm_instance_delete) + : exports_{0, nullptr}, instance_(nullptr, &wasm_instance_delete) { *this = std::move(o); } @@ -191,16 +84,12 @@ InstanceWrapper::InstanceWrapper(InstanceWrapper&& o) InstanceWrapper::InstanceWrapper( wasm_store_t* s, wasm_module_t* m, - int32_t maxPages, - int64_t gas, wasm_extern_vec_t const& imports, beast::Journal j) : exports_ WASM_EMPTY_VEC - , instance_(init(s, m, maxPages, &exports_, imports, j)) - , execEnv_(wasm_instance_exec_env(instance_.get())) + , instance_(init(s, m, &exports_, imports, j)) , j_(j) { - wasm_runtime_set_instruction_count_limit(execEnv_, gas); } InstanceWrapper::~InstanceWrapper() @@ -218,11 +107,9 @@ InstanceWrapper::operator=(InstanceWrapper&& o) if (exports_.size) wasm_extern_vec_delete(&exports_); exports_ = o.exports_; - o.exports_ = {0, nullptr, 0, 0, nullptr}; + o.exports_ = {0, nullptr}; instance_ = std::move(o.instance_); - execEnv_ = o.execEnv_; - o.execEnv_ = nullptr; j_ = o.j_; @@ -245,12 +132,12 @@ InstanceWrapper::getFunc( if (!instance_) throw std::runtime_error("no instance"); - if (!export_types.num_elems) + if (!export_types.size) throw std::runtime_error("no export"); - if (export_types.num_elems != exports_.num_elems) + if (export_types.size != exports_.size) throw std::runtime_error("invalid export"); - for (unsigned i = 0; i < export_types.num_elems; ++i) + for (unsigned i = 0; i < export_types.size; ++i) { auto const* exp_type(export_types.data[i]); @@ -258,7 +145,7 @@ InstanceWrapper::getFunc( wasm_externtype_t const* exn_type = wasm_exporttype_type(exp_type); if (wasm_externtype_kind(exn_type) == WASM_EXTERN_FUNC) { - if (funcName == std::string_view(name->data, name->size - 1)) + if (funcName == std::string_view(name->data, name->size)) { auto* exn(exports_.data[i]); if (wasm_extern_kind(exn) != WASM_EXTERN_FUNC) @@ -286,7 +173,7 @@ InstanceWrapper::getMem() const throw std::runtime_error("no instance"); wasm_memory_t* mem = nullptr; - for (unsigned i = 0; i < exports_.num_elems; ++i) + for (unsigned i = 0; i < exports_.size; ++i) { auto* e(exports_.data[i]); if (wasm_extern_kind(e) == WASM_EXTERN_MEMORY) @@ -304,23 +191,12 @@ InstanceWrapper::getMem() const wasm_memory_data_size(mem)}; } -std::int64_t -InstanceWrapper::getGas() const -{ - return execEnv_ ? wasm_runtime_get_instruction_count_limit(execEnv_) : 0; -} - ////////////////////////////////////////////////////////////////////////////////////////////////////////////// ModulePtr ModuleWrapper::init(wasm_store_t* s, Bytes const& wasmBin, beast::Journal j) { - wasm_byte_vec_t const code{ - wasmBin.size(), - (char*)(wasmBin.data()), - wasmBin.size(), - sizeof(std::remove_reference_t::value_type), - nullptr}; + wasm_byte_vec_t const code{wasmBin.size(), (char*)(wasmBin.data())}; ModulePtr m = ModulePtr(wasm_module_new(s, &code), &wasm_module_delete); if (!m) throw std::runtime_error("can't create module"); @@ -329,14 +205,12 @@ ModuleWrapper::init(wasm_store_t* s, Bytes const& wasmBin, beast::Journal j) } ModuleWrapper::ModuleWrapper() - : module_(nullptr, &wasm_module_delete) - , exportTypes_{0, nullptr, 0, 0, nullptr} + : module_(nullptr, &wasm_module_delete), exportTypes_{0, nullptr} { } ModuleWrapper::ModuleWrapper(ModuleWrapper&& o) - : module_(nullptr, &wasm_module_delete) - , exportTypes_{0, nullptr, 0, 0, nullptr} + : module_(nullptr, &wasm_module_delete), exportTypes_{0, nullptr} { *this = std::move(o); } @@ -345,19 +219,15 @@ ModuleWrapper::ModuleWrapper( wasm_store_t* s, Bytes const& wasmBin, bool instantiate, - int32_t maxPages, - int64_t gas, std::vector const& imports, beast::Journal j) - : module_(init(s, wasmBin, j)) - , exportTypes_{0, nullptr, 0, 0, nullptr} - , j_(j) + : store_(s), module_(init(s, wasmBin, j)), exportTypes_{0, nullptr}, j_(j) { wasm_module_exports(module_.get(), &exportTypes_); if (instantiate) { auto wimports = buildImports(s, imports); - addInstance(s, maxPages, gas, wimports); + addInstance(s, wimports); wasm_extern_vec_delete(&wimports); } } @@ -374,12 +244,14 @@ ModuleWrapper::operator=(ModuleWrapper&& o) if (this == &o) return *this; + store_ = o.store_; + o.store_ = nullptr; module_ = std::move(o.module_); instanceWrap_ = std::move(o.instanceWrap_); if (exportTypes_.size) wasm_exporttype_vec_delete(&exportTypes_); exportTypes_ = o.exportTypes_; - o.exportTypes_ = {0, nullptr, 0, 0, nullptr}; + o.exportTypes_ = {0, nullptr}; j_ = o.j_; return *this; @@ -398,7 +270,6 @@ ModuleWrapper::makeImpParams(wasm_valtype_vec_t& v, WasmImportFunc const& imp) if (paramSize) { wasm_valtype_vec_new_uninitialized(&v, paramSize); - v.num_elems = paramSize; } else v = WASM_EMPTY_VEC; @@ -425,7 +296,6 @@ ModuleWrapper::makeImpReturn(wasm_valtype_vec_t& v, WasmImportFunc const& imp) if (imp.result) { wasm_valtype_vec_new_uninitialized(&v, 1); - v.num_elems = 1; switch (*imp.result) { case WT_I32: @@ -454,29 +324,26 @@ ModuleWrapper::buildImports( itDeleter(&importTypes, &wasm_importtype_vec_delete); wasm_extern_vec_t wimports = WASM_EMPTY_VEC; - if (!importTypes.num_elems) + if (!importTypes.size) return wimports; wasm_extern_vec_new_uninitialized(&wimports, importTypes.size); - wimports.num_elems = importTypes.num_elems; unsigned impCnt = 0; - for (unsigned i = 0; i < importTypes.num_elems; ++i) + for (unsigned i = 0; i < importTypes.size; ++i) { wasm_importtype_t const* importtype = importTypes.data[i]; - if (wasm_importtype_is_linked(importtype)) - { - // create a placeholder - wimports.data[i] = wasm_extern_new_empty( - s, wasm_externtype_kind(wasm_importtype_type(importtype))); - ++impCnt; - continue; - } // wasm_name_t const* mn = wasm_importtype_module(importtype); - // auto modName = std::string_view(mn->data, mn->num_elems - 1); + // auto modName = std::string_view(mn->data, mn->num_elems); wasm_name_t const* fn = wasm_importtype_name(importtype); - auto fieldName = std::string_view(fn->data, fn->num_elems - 1); + auto fieldName = std::string_view(fn->data, fn->size); + + wasm_externkind_t const itype = + wasm_externtype_kind(wasm_importtype_type(importtype)); + if ((itype) != WASM_EXTERN_FUNC) + throw std::runtime_error( + "Invalid import type " + std::to_string(itype)); // for multi-module support // if ((W_ENV != modName) && (W_HOST_LIB != modName)) @@ -511,13 +378,13 @@ ModuleWrapper::buildImports( // LCOV_EXCL_STOP } - if (imp.gas && !wasm_func_set_gas(func, imp.gas)) - { - // LCOV_EXCL_START - throw std::runtime_error( - "can't set gas for import function " + imp.name); - // LCOV_EXCL_STOP - } + // if (imp.gas && !wasm_func_set_gas(func, imp.gas)) + // { + // // LCOV_EXCL_START + // throw std::runtime_error( + // "can't set gas for import function " + imp.name); + // // LCOV_EXCL_STOP + // } wimports.data[i] = wasm_func_as_extern(func); ++impCnt; @@ -535,11 +402,11 @@ ModuleWrapper::buildImports( } } - if (impCnt != importTypes.num_elems) + if (impCnt != importTypes.size) { print_wasm_error( std::string("Imports not finished: ") + std::to_string(impCnt) + - "/" + std::to_string(importTypes.num_elems), + "/" + std::to_string(importTypes.size), nullptr, j_); } @@ -566,13 +433,9 @@ ModuleWrapper::getInstance(int) const } int -ModuleWrapper::addInstance( - wasm_store_t* s, - int32_t maxPages, - int64_t gas, - wasm_extern_vec_t const& imports) +ModuleWrapper::addInstance(wasm_store_t* s, wasm_extern_vec_t const& imports) { - instanceWrap_ = {s, module_.get(), maxPages, gas, imports, j_}; + instanceWrap_ = {s, module_.get(), imports, j_}; return 0; } @@ -589,30 +452,43 @@ ModuleWrapper::addInstance( std::int64_t ModuleWrapper::getGas() { - return instanceWrap_.getGas(); + if (!store_) + return 0; + std::uint64_t gas = 0; + wasm_store_get_fuel(store_, &gas); + return static_cast(gas); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////// // void -// WamrEngine::clearModules() +// WasmiEngine::clearModules() // { // modules.clear(); // store.reset(); // to free the memory before creating new store // store = {wasm_store_new(engine.get()), &wasm_store_delete}; // } -WamrEngine::WamrEngine() - : engine_(wasm_engine_new(), &wasm_engine_delete) - , store_(nullptr, &wasm_store_delete) +std::unique_ptr +WasmiEngine::init() +{ + wasm_config_t* config = wasm_config_new(); + if (!config) + return std::unique_ptr{ + nullptr, &wasm_engine_delete}; + wasmi_config_consume_fuel_set(config, true); + + return std::unique_ptr( + wasm_engine_new_with_config(config), &wasm_engine_delete); +} + +WasmiEngine::WasmiEngine() + : engine_(init()), store_(nullptr, &wasm_store_delete) { - wasm_runtime_set_default_running_mode(Mode_Interp); - wasm_runtime_set_log_level(WASM_LOG_LEVEL_FATAL); - // wasm_runtime_set_log_level(WASM_LOG_LEVEL_VERBOSE); } int -WamrEngine::addModule( +WasmiEngine::addModule( Bytes const& wasmCode, bool instantiate, int64_t gas, @@ -621,8 +497,19 @@ WamrEngine::addModule( moduleWrap_.reset(); store_.reset(); // to free the memory before creating new store store_ = {wasm_store_new(engine_.get()), &wasm_store_delete}; + + if (gas < 0) + gas = std::numeric_limits::max(); + wasmi_error_t* err = + wasm_store_set_fuel(store_.get(), static_cast(gas)); + if (err) + { + print_wasm_error("Error setting gas", nullptr, j_); + throw std::runtime_error("can't set gas"); + } + moduleWrap_ = std::make_unique( - store_.get(), wasmCode, instantiate, defMaxPages_, gas, imports, j_); + store_.get(), wasmCode, instantiate, imports, j_); if (!moduleWrap_) throw std::runtime_error("can't create module wrapper"); @@ -631,19 +518,19 @@ WamrEngine::addModule( } // int -// WamrEngine::addInstance() +// WasmiEngine::addInstance() // { -// return module->addInstance(store.get(), defMaxPages); +// return module->addInstance(store.get()); // } FuncInfo -WamrEngine::getFunc(std::string_view funcName) +WasmiEngine::getFunc(std::string_view funcName) { return moduleWrap_->getFunc(funcName); } std::vector -WamrEngine::convertParams(std::vector const& params) +WasmiEngine::convertParams(std::vector const& params) { std::vector v; v.reserve(params.size()); @@ -678,14 +565,14 @@ WamrEngine::convertParams(std::vector const& params) } int -WamrEngine::compareParamTypes( +WasmiEngine::compareParamTypes( wasm_valtype_vec_t const* ftp, std::vector const& p) { - if (ftp->num_elems != p.size()) - return std::min(ftp->num_elems, p.size()); + if (ftp->size != p.size()) + return std::min(ftp->size, p.size()); - for (unsigned i = 0; i < ftp->num_elems; ++i) + for (unsigned i = 0; i < ftp->size; ++i) { auto const t1 = wasm_valtype_kind(ftp->data[i]); auto const t2 = p[i].kind; @@ -697,7 +584,7 @@ WamrEngine::compareParamTypes( } void -WamrEngine::add_param(std::vector& in, int32_t p) +WasmiEngine::add_param(std::vector& in, int32_t p) { in.emplace_back(); auto& el(in.back()); @@ -706,7 +593,7 @@ WamrEngine::add_param(std::vector& in, int32_t p) } void -WamrEngine::add_param(std::vector& in, int64_t p) +WasmiEngine::add_param(std::vector& in, int64_t p) { in.emplace_back(); auto& el(in.back()); @@ -714,8 +601,8 @@ WamrEngine::add_param(std::vector& in, int64_t p) } template -WamrResult -WamrEngine::call(std::string_view func, Types&&... args) +WasmiResult +WasmiEngine::call(std::string_view func, Types&&... args) { // Lookup our export function auto f = getFunc(func); @@ -723,8 +610,8 @@ WamrEngine::call(std::string_view func, Types&&... args) } template -WamrResult -WamrEngine::call(FuncInfo const& f, Types&&... args) +WasmiResult +WasmiEngine::call(FuncInfo const& f, Types&&... args) { std::vector in; return call(f, in, std::forward(args)...); @@ -743,22 +630,17 @@ usecs() #endif template -WamrResult -WamrEngine::call(FuncInfo const& f, std::vector& in) +WasmiResult +WasmiEngine::call(FuncInfo const& f, std::vector& in) { // wasm_val_t rs[1] = {WASM_I32_VAL(0)}; - WamrResult ret(NR); + WasmiResult ret(NR); // if (NR) { wasm_val_vec_new_uninitialized(&ret, NR); // // wasm_val_vec_new(&ret, NR, &rs[0]); // ret = WASM_ARRAY_VEC(rs); } wasm_val_vec_t const inv = in.empty() ? wasm_val_vec_t WASM_EMPTY_VEC - : wasm_val_vec_t{ - in.size(), - in.data(), - in.size(), - sizeof(std::remove_reference_t::value_type), - nullptr}; + : wasm_val_vec_t{in.size(), in.data()}; #ifdef SHOW_CALL_TIME auto const start = usecs(); @@ -785,8 +667,8 @@ WamrEngine::call(FuncInfo const& f, std::vector& in) } template -WamrResult -WamrEngine::call( +WasmiResult +WasmiEngine::call( FuncInfo const& f, std::vector& in, std::int32_t p, @@ -797,8 +679,8 @@ WamrEngine::call( } template -WamrResult -WamrEngine::call( +WasmiResult +WasmiEngine::call( FuncInfo const& f, std::vector& in, std::int64_t p, @@ -809,8 +691,8 @@ WamrEngine::call( } template -WamrResult -WamrEngine::call( +WasmiResult +WasmiEngine::call( FuncInfo const& f, std::vector& in, uint8_t const* d, @@ -827,8 +709,8 @@ WamrEngine::call( } template -WamrResult -WamrEngine::call( +WasmiResult +WasmiEngine::call( FuncInfo const& f, std::vector& in, Bytes const& p, @@ -838,7 +720,7 @@ WamrEngine::call( } Expected, TER> -WamrEngine::run( +WasmiEngine::run( Bytes const& wasmCode, std::string_view funcName, std::vector const& params, @@ -848,8 +730,6 @@ WamrEngine::run( beast::Journal j) { j_ = j; - wasm_runtime_set_log_level( - std::min(getLogLevel(j_.sink().threshold()), WASM_LOG_LEVEL_ERROR)); try { return runHlp(wasmCode, funcName, params, imports, hfs, gas); @@ -866,7 +746,7 @@ WamrEngine::run( } Expected, TER> -WamrEngine::runHlp( +WasmiEngine::runHlp( Bytes const& wasmCode, std::string_view funcName, std::vector const& params, @@ -893,7 +773,7 @@ WamrEngine::runHlp( auto const f = getFunc(!funcName.empty() ? funcName : "_start"); auto const* ftp = wasm_functype_params(f.second); - // not const because passed directly to wamr function (which accept non + // not const because passed directly to VM function (which accept non // const) auto p = convertParams(params); @@ -905,7 +785,7 @@ WamrEngine::runHlp( if (res.f) throw std::runtime_error("<" + std::string(funcName) + "> failure"); - else if (!res.r.num_elems) + else if (!res.r.size) throw std::runtime_error( "<" + std::string(funcName) + "> return nothing"); @@ -920,13 +800,13 @@ WamrEngine::runHlp( // #else // auto j = j_.debug(); // #endif - // j << "WAMR Res: " << ret.result << " cost: " << ret.cost << std::endl; + // j << "WASMI Res: " << ret.result << " cost: " << ret.cost << std::endl; return ret; } NotTEC -WamrEngine::check( +WasmiEngine::check( Bytes const& wasmCode, std::string_view funcName, std::vector const& params, @@ -934,8 +814,7 @@ WamrEngine::check( beast::Journal j) { j_ = j; - wasm_runtime_set_log_level( - std::min(getLogLevel(j_.sink().threshold()), WASM_LOG_LEVEL_ERROR)); + try { return checkHlp(wasmCode, funcName, params, imports); @@ -953,7 +832,7 @@ WamrEngine::check( } NotTEC -WamrEngine::checkHlp( +WasmiEngine::checkHlp( Bytes const& wasmCode, std::string_view funcName, std::vector const& params, @@ -982,27 +861,20 @@ WamrEngine::checkHlp( return tesSUCCESS; } -std::int32_t -WamrEngine::initMaxPages(std::int32_t def) -{ - defMaxPages_ = def; - return def; -} - std::int64_t -WamrEngine::getGas() +WasmiEngine::getGas() { return moduleWrap_ ? moduleWrap_->getGas() : 0; } wmem -WamrEngine::getMem() const +WasmiEngine::getMem() const { return moduleWrap_ ? moduleWrap_->getMem() : wmem(); } InstanceWrapper const& -WamrEngine::getRT(int m, int i) +WasmiEngine::getRT(int m, int i) { if (!moduleWrap_) throw std::runtime_error("no module"); @@ -1010,11 +882,11 @@ WamrEngine::getRT(int m, int i) } int32_t -WamrEngine::allocate(int32_t sz) +WasmiEngine::allocate(int32_t sz) { auto res = call<1>(W_ALLOC, static_cast(sz)); - if (res.f || !res.r.num_elems || (res.r.data[0].kind != WASM_I32) || + if (res.f || !res.r.size || (res.r.data[0].kind != WASM_I32) || !res.r.data[0].of.i32) throw std::runtime_error( "can't allocate memory, " + std::to_string(sz) + " bytes"); @@ -1022,7 +894,7 @@ WamrEngine::allocate(int32_t sz) } wasm_trap_t* -WamrEngine::newTrap(std::string_view txt) +WasmiEngine::newTrap(std::string_view txt) { wasm_message_t msg = WASM_EMPTY_VEC; @@ -1033,7 +905,7 @@ WamrEngine::newTrap(std::string_view txt) } beast::Journal -WamrEngine::getJournal() const +WasmiEngine::getJournal() const { return j_; } From 16087c96802a589ec37153c286dc30a328186835 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 25 Nov 2025 02:57:47 +0530 Subject: [PATCH 035/137] fix merge issue --- cmake/XrplCore.cmake | 5 ----- 1 file changed, 5 deletions(-) diff --git a/cmake/XrplCore.cmake b/cmake/XrplCore.cmake index b3bc47790b..7837a8f3ee 100644 --- a/cmake/XrplCore.cmake +++ b/cmake/XrplCore.cmake @@ -69,11 +69,6 @@ target_link_libraries(xrpl.imports.main $<$:antithesis-sdk-cpp> ) -if (WIN32) - target_link_libraries(xrpl.imports.main INTERFACE ntdll) -endif() - - include(add_module) include(target_link_modules) From c33b0ae4638668d711c76e7a247795b48d028d2f Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 25 Nov 2025 02:58:57 +0530 Subject: [PATCH 036/137] fix build issue --- src/xrpld/app/wasm/detail/HostFuncImpl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp index e61d39f9aa..a0b81a2df3 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp @@ -424,7 +424,7 @@ WasmHostFunctionsImpl::checkSignature( return Unexpected(HostFunctionError::INVALID_PARAMS); PublicKey const pk(pubkey); - return verify(pk, message, signature, /*canonical*/ true); + return verify(pk, message, signature); } Expected From 53eb0f60bc3bbc5b9456e043a1ff26b74a941ebe Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 25 Nov 2025 03:10:58 +0530 Subject: [PATCH 037/137] fix another build issue --- src/test/app/TestHostFunctions.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index 4445f1ae73..fe0cc6f289 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -1060,7 +1060,7 @@ struct PerfHostFunctions : public TestHostFunctions return Unexpected(HostFunctionError::INVALID_PARAMS); PublicKey const pk(pubkey); - return verify(pk, message, signature, /*canonical*/ true); + return verify(pk, message, signature); } Expected From 500bb68831e0b050f34bee8b909ae9e0a7ce11cf Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Mon, 24 Nov 2025 16:56:23 -0500 Subject: [PATCH 038/137] Fix win build (#6076) --- .../wasmi/patches/0001-xrplf-0.42.1.patch | 50 ++++++++++++++++--- 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/external/wasmi/patches/0001-xrplf-0.42.1.patch b/external/wasmi/patches/0001-xrplf-0.42.1.patch index 656c5aff65..cecab3f8c2 100644 --- a/external/wasmi/patches/0001-xrplf-0.42.1.patch +++ b/external/wasmi/patches/0001-xrplf-0.42.1.patch @@ -1,8 +1,17 @@ diff --git a/crates/c_api/CMakeLists.txt b/crates/c_api/CMakeLists.txt -index b15c787a..4e6de690 100644 +index b15c787a..54eaed2d 100644 --- a/crates/c_api/CMakeLists.txt +++ b/crates/c_api/CMakeLists.txt -@@ -43,6 +43,10 @@ endif() +@@ -6,6 +6,8 @@ option(BUILD_SHARED_LIBS "Build using shared libraries" OFF) + option(WASMI_ALWAYS_BUILD "If cmake should always invoke cargo to build Wasmi" ON) + set(WASMI_TARGET "" CACHE STRING "Rust target to build for") + ++add_compile_definitions(COMPILING_WASM_RUNTIME_API=1) ++ + if(NOT WASMI_TARGET) + execute_process( + COMMAND rustc -vV +@@ -43,6 +45,10 @@ endif() list(TRANSFORM WASMI_SHARED_FILES PREPEND ${WASMI_TARGET_DIR}/) list(TRANSFORM WASMI_STATIC_FILES PREPEND ${WASMI_TARGET_DIR}/) @@ -13,7 +22,15 @@ index b15c787a..4e6de690 100644 # Instructions on how to build and install the Wasmi Rust crate. find_program(WASMI_CARGO_BINARY cargo REQUIRED) include(ExternalProject) -@@ -112,6 +116,7 @@ install( +@@ -79,7 +85,6 @@ else() + target_link_libraries(wasmi INTERFACE ${WASMI_STATIC_FILES}) + + if(WASMI_TARGET MATCHES "windows") +- target_compile_options(wasmi INTERFACE -DWASM_API_EXTERN= -DWASI_API_EXTERN=) + target_link_libraries(wasmi INTERFACE ws2_32 advapi32 userenv ntdll shell32 ole32 bcrypt) + elseif(NOT WASMI_TARGET MATCHES "darwin") + target_link_libraries(wasmi INTERFACE pthread dl m) +@@ -112,6 +117,7 @@ install( DESTINATION ${CMAKE_INSTALL_LIBDIR} ) @@ -21,7 +38,7 @@ index b15c787a..4e6de690 100644 if(WASMI_TARGET MATCHES "darwin") set(INSTALLED_LIB "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/libwasmi.dylib") install( -@@ -131,6 +136,7 @@ if(WASMI_TARGET MATCHES "darwin") +@@ -131,6 +137,7 @@ if(WASMI_TARGET MATCHES "darwin") install(CODE "execute_process(COMMAND ${install_name_tool_cmd})") endif() endif() @@ -29,7 +46,7 @@ index b15c787a..4e6de690 100644 # Documentation Generation via Doxygen: set(DOXYGEN_CONF_IN ${CMAKE_CURRENT_SOURCE_DIR}/doxygen.conf.in) -@@ -141,19 +147,3 @@ add_custom_target(doc +@@ -141,19 +148,3 @@ add_custom_target(doc DEPENDS ${WASMI_GENERATED_CONF_H} ${DOXYGEN_CONF_OUT} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) @@ -50,10 +67,29 @@ index b15c787a..4e6de690 100644 - COMMENT "clang-format: Apply formatting rules for Wasmi C-API header files" -) diff --git a/crates/c_api/include/wasm.h b/crates/c_api/include/wasm.h -index 5ee617ff..0199192d 100644 +index 5ee617ff..37809a6f 100644 --- a/crates/c_api/include/wasm.h +++ b/crates/c_api/include/wasm.h -@@ -146,6 +146,13 @@ WASM_DECLARE_OWN(store) +@@ -13,11 +13,17 @@ + #include + + #ifndef WASM_API_EXTERN +-#if defined(_WIN32) && !defined(__MINGW32__) && !defined(LIBWASM_STATIC) ++#if defined(_MSC_BUILD) ++#if defined(COMPILING_WASM_RUNTIME_API) ++#define WASM_API_EXTERN __declspec(dllexport) ++#elif defined(_DLL) + #define WASM_API_EXTERN __declspec(dllimport) + #else + #define WASM_API_EXTERN + #endif ++#else ++#define WASM_API_EXTERN ++#endif + #endif + + #ifdef __cplusplus +@@ -146,6 +152,13 @@ WASM_DECLARE_OWN(store) WASM_API_EXTERN own wasm_store_t* wasm_store_new(wasm_engine_t*); From 50e5608d8643e02f332f6a13c4feeee99e0511f7 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Mon, 1 Dec 2025 20:21:52 -0500 Subject: [PATCH 039/137] wasmi HF cost --- external/wasmi/conandata.yml | 4 +- external/wasmi/conanfile.py | 7 +- .../wasmi/patches/0001-xrplf-0.42.1.patch | 6 +- src/test/app/TestHostFunctions.h | 47 ++- src/test/app/Wasm_test.cpp | 157 +++++++--- src/xrpld/app/wasm/HostFunc.h | 26 +- src/xrpld/app/wasm/HostFuncImpl.h | 10 +- src/xrpld/app/wasm/ParamsHelper.h | 10 +- src/xrpld/app/wasm/WasmVM.h | 21 +- src/xrpld/app/wasm/WasmiVM.h | 32 +- src/xrpld/app/wasm/detail/HostFuncImpl.cpp | 2 + src/xrpld/app/wasm/detail/HostFuncWrapper.cpp | 285 ++++++++++++++---- src/xrpld/app/wasm/detail/WasmVM.cpp | 43 ++- src/xrpld/app/wasm/detail/WasmiVM.cpp | 162 +++++++--- 14 files changed, 559 insertions(+), 253 deletions(-) diff --git a/external/wasmi/conandata.yml b/external/wasmi/conandata.yml index 032c12753c..7bf94fff7f 100644 --- a/external/wasmi/conandata.yml +++ b/external/wasmi/conandata.yml @@ -2,10 +2,10 @@ sources: "0.42.1": - sha256: 2a5697be33c7afce8f671af4a5a3621d9e93ce55d253d31bd8201458e465fbb8 url: https://github.com/wasmi-labs/wasmi/archive/refs/tags/v0.42.1.tar.gz + sha256: 2a5697be33c7afce8f671af4a5a3621d9e93ce55d253d31bd8201458e465fbb8 patches: "0.42.1": - patch_file: "patches/0001-xrplf-0.42.1.patch" + patch_description: Integrate wasmi lib into smart-escrow. patch_type: conan - patch_description: Integration patch. Make wasmi lib to be able to build with existing smart-escrow branch. diff --git a/external/wasmi/conanfile.py b/external/wasmi/conanfile.py index e245d62eb0..6f72298558 100644 --- a/external/wasmi/conanfile.py +++ b/external/wasmi/conanfile.py @@ -1,5 +1,5 @@ from conan import ConanFile, tools -from conan.tools.cmake import CMake, CMakeToolchain, CMakeDeps, cmake_layout +from conan.tools.cmake import CMake, CMakeToolchain, cmake_layout from conan.tools.files import apply_conandata_patches, export_conandata_patches, get import os @@ -30,9 +30,6 @@ class WasmiConan(ConanFile): tc.variables["BUILD_SHARED_LIBS"] = self.options.shared tc.generate() - deps = CMakeDeps(self) - deps.generate() - def build(self): cmake = CMake(self) cmake.configure(build_script_folder=os.path.join(self.source_folder, "crates", "c_api")) @@ -44,5 +41,3 @@ class WasmiConan(ConanFile): def package_info(self): self.cpp_info.libs = ["wasmi"] - self.cpp_info.names["cmake_find_package"] = "wasmi" - self.cpp_info.names["cmake_find_package_multi"] = "wasmi" diff --git a/external/wasmi/patches/0001-xrplf-0.42.1.patch b/external/wasmi/patches/0001-xrplf-0.42.1.patch index cecab3f8c2..0fbcb4408b 100644 --- a/external/wasmi/patches/0001-xrplf-0.42.1.patch +++ b/external/wasmi/patches/0001-xrplf-0.42.1.patch @@ -67,7 +67,7 @@ index b15c787a..54eaed2d 100644 - COMMENT "clang-format: Apply formatting rules for Wasmi C-API header files" -) diff --git a/crates/c_api/include/wasm.h b/crates/c_api/include/wasm.h -index 5ee617ff..37809a6f 100644 +index 5ee617ff..5c79bde3 100644 --- a/crates/c_api/include/wasm.h +++ b/crates/c_api/include/wasm.h @@ -13,11 +13,17 @@ @@ -89,7 +89,7 @@ index 5ee617ff..37809a6f 100644 #endif #ifdef __cplusplus -@@ -146,6 +152,13 @@ WASM_DECLARE_OWN(store) +@@ -146,6 +152,11 @@ WASM_DECLARE_OWN(store) WASM_API_EXTERN own wasm_store_t* wasm_store_new(wasm_engine_t*); @@ -98,8 +98,6 @@ index 5ee617ff..37809a6f 100644 + +WASM_API_EXTERN struct wasmi_error* wasm_store_get_fuel(const wasm_store_t*, uint64_t* fuel); +WASM_API_EXTERN struct wasmi_error* wasm_store_set_fuel(wasm_store_t*, uint64_t fuel); -+//WASM_API_EXTERN void *wasm_store_get_data(const wasm_store_t*); -+//WASM_API_EXTERN void wasm_store_set_data(wasm_store_t*, void *data); /////////////////////////////////////////////////////////////////////////////// // Type Representations diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index fe0cc6f289..128bfa446f 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -15,11 +15,12 @@ namespace test { struct TestLedgerDataProvider : public HostFunctions { - jtx::Env* env_; + jtx::Env& env_; void const* rt_ = nullptr; public: - TestLedgerDataProvider(jtx::Env* env) : env_(env) + TestLedgerDataProvider(jtx::Env& env) + : HostFunctions(env.journal), env_(env) { } @@ -38,7 +39,7 @@ public: Expected getLedgerSqn() override { - return env_->current()->seq(); + return env_.current()->seq(); } }; @@ -52,7 +53,7 @@ struct TestHostFunctions : public HostFunctions public: TestHostFunctions(test::jtx::Env& env, int cd = 0) - : env_(env), clock_drift_(cd) + : HostFunctions(env.journal), env_(env), clock_drift_(cd) { accountID_ = env_.master.id(); std::string t = "10000"; @@ -71,12 +72,6 @@ public: return rt_; } - beast::Journal - getJournal() override - { - return env_.journal; - } - Expected getLedgerSqn() override { @@ -395,7 +390,7 @@ public: #endif if (!asHex) { - j << "WAMR TRACE: " << msg << " " + j << "WASM TRACE: " << msg << " " << std::string_view( reinterpret_cast(data.data()), data.size()); } @@ -405,7 +400,7 @@ public: hex.reserve(data.size() * 2); boost::algorithm::hex( data.begin(), data.end(), std::back_inserter(hex)); - j << "WAMR DEV TRACE: " << msg << " " << hex; + j << "WASM DEV TRACE: " << msg << " " << hex; } #ifdef DEBUG_OUTPUT @@ -423,7 +418,7 @@ public: #else auto j = getJournal().trace(); #endif - j << "WAMR TRACE NUM: " << msg << " " << data; + j << "WASM TRACE NUM: " << msg << " " << data; #ifdef DEBUG_OUTPUT j << std::endl; @@ -435,7 +430,7 @@ public: traceAccount(std::string_view const& msg, AccountID const& account) override { #ifdef DEBUG_OUTPUT - auto j = getJournal().error(); + auto& j = std::cerr; #else auto j = getJournal().trace(); #endif @@ -444,7 +439,7 @@ public: auto const accountStr = toBase58(account); - j << "WAMR TRACE ACCOUNT: " << msg << " " << accountStr; + j << "WASM TRACE ACCOUNT: " << msg << " " << accountStr; return msg.size() + accountStr.size(); } @@ -457,7 +452,7 @@ public: auto j = getJournal().trace(); #endif auto const s = floatToString(data); - j << "WAMR TRACE FLOAT: " << msg << " " << s; + j << "WASM TRACE FLOAT: " << msg << " " << s; #ifdef DEBUG_OUTPUT j << std::endl; @@ -469,12 +464,12 @@ public: traceAmount(std::string_view const& msg, STAmount const& amount) override { #ifdef DEBUG_OUTPUT - auto j = getJournal().error(); + auto& j = std::cerr; #else auto j = getJournal().trace(); #endif auto const amountStr = amount.getFullText(); - j << "WAMR TRACE AMOUNT: " << msg << " " << amountStr; + j << "WASM TRACE AMOUNT: " << msg << " " << amountStr; return msg.size() + amountStr.size(); } @@ -548,15 +543,13 @@ public: struct TestHostFunctionsSink : public TestHostFunctions { test::StreamSink sink_; - beast::Journal jlog_; void const* rt_ = nullptr; public: explicit TestHostFunctionsSink(test::jtx::Env& env, int cd = 0) - : TestHostFunctions(env, cd) - , sink_(beast::severities::kDebug) - , jlog_(sink_) + : TestHostFunctions(env, cd), sink_(beast::severities::kDebug) { + j_ = beast::Journal(sink_); } test::StreamSink& @@ -564,12 +557,6 @@ public: { return sink_; } - - beast::Journal - getJournal() override - { - return jlog_; - } }; struct PerfHostFunctions : public TestHostFunctions @@ -1284,14 +1271,14 @@ struct PerfHostFunctions : public TestHostFunctions { if (!account || !nftId) { - getJournal().trace() << "WAMR getNFT: Invalid account or NFT ID"; + getJournal().trace() << "WASM getNFT: Invalid account or NFT ID"; return Unexpected(HostFunctionError::INVALID_PARAMS); } auto obj = nft::findToken(*env_.current(), account, nftId); if (!obj) { - getJournal().trace() << "WAMR getNFT: NFT not found"; + getJournal().trace() << "WASM getNFT: NFT not found"; return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); } diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 7b738fe8f2..bcec0442f3 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -67,7 +67,7 @@ struct Wasm_test : public beast::unit_test::suite // clang-format on auto& vm = WasmEngine::instance(); - std::vector imports; + ImportVec imports; WasmImpFunc( imports, "func-add", reinterpret_cast(&Add)); @@ -90,7 +90,7 @@ struct Wasm_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this}; - HostFunctions hfs; + HostFunctions hfs(env.journal); { auto wasmHex = "00000000"; @@ -98,7 +98,7 @@ struct Wasm_test : public beast::unit_test::suite std::vector wasm(wasmStr.begin(), wasmStr.end()); std::string funcName("mock_escrow"); - auto re = runEscrowWasm(wasm, funcName, {}, &hfs, 15, env.journal); + auto re = runEscrowWasm(wasm, hfs, funcName, {}, 15); BEAST_EXPECT(!re); } @@ -108,8 +108,7 @@ struct Wasm_test : public beast::unit_test::suite std::vector wasm(wasmStr.begin(), wasmStr.end()); std::string funcName("mock_escrow"); - auto const re = - preflightEscrowWasm(wasm, funcName, {}, &hfs, env.journal); + auto const re = preflightEscrowWasm(wasm, hfs, funcName); BEAST_EXPECT(!isTesSuccess(re)); } @@ -132,8 +131,8 @@ struct Wasm_test : public beast::unit_test::suite auto wasmStr = boost::algorithm::unhex(std::string(badWasmHex)); std::vector wasm(wasmStr.begin(), wasmStr.end()); - auto const re = preflightEscrowWasm( - wasm, ESCROW_FUNCTION_NAME, {}, &hfs, env.journal); + auto const re = + preflightEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME); BEAST_EXPECT(!isTesSuccess(re)); } } @@ -149,9 +148,9 @@ struct Wasm_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this}; - TestLedgerDataProvider hf(&env); + TestLedgerDataProvider hf(env); - std::vector imports; + ImportVec imports; WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn", &hf, 33); auto& engine = WasmEngine::instance(); @@ -164,11 +163,10 @@ struct Wasm_test : public beast::unit_test::suite 1'000'000, env.journal); - // code takes 11 gas + 1 getLedgerSqn call if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 0, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 5, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 38, std::to_string(re->cost)); } env.close(); @@ -178,11 +176,10 @@ struct Wasm_test : public beast::unit_test::suite re = engine.run( {}, ESCROW_FUNCTION_NAME, {}, imports, &hf, 1'000'000, env.journal); - // code takes 22 gas + 2 getLedgerSqn calls if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 5, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 10, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 76, std::to_string(re->cost)); } } @@ -299,9 +296,9 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); TestHostFunctions hfs(env, 0); - std::vector imp = createWasmImport(&hfs); + ImportVec imp = createWasmImport(hfs); for (auto& i : imp) - i.gas = 0; + i.second.gas = 0; auto re = engine.run( wasm, @@ -335,7 +332,7 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); TestHostFunctions hfs(env, 0); - std::vector const imp = createWasmImport(&hfs); + ImportVec const imp = createWasmImport(hfs); auto re = engine.run( wasm, @@ -349,7 +346,31 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 842, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 40'102, std::to_string(re->cost)); + } + + env.close(); + } + + // not enough gas + { + std::string const wasmHex = allHostFunctionsWasmHex; + std::string const wasmStr = boost::algorithm::unhex(wasmHex); + std::vector const wasm(wasmStr.begin(), wasmStr.end()); + + auto& engine = WasmEngine::instance(); + + TestHostFunctions hfs(env, 0); + ImportVec const imp = createWasmImport(hfs); + + auto re = engine.run( + wasm, ESCROW_FUNCTION_NAME, {}, imp, &hfs, 200, env.journal); + + if (BEAST_EXPECT(!re)) + { + BEAST_EXPECTS( + re.error() == tecFAILED_PROCESSING, + std::to_string(TERtoInt(re.error()))); } env.close(); @@ -370,11 +391,22 @@ struct Wasm_test : public beast::unit_test::suite { TestHostFunctions nfs(env, 0); auto re = - runEscrowWasm(wasm, ESCROW_FUNCTION_NAME, {}, &nfs, 100'000); + runEscrowWasm(wasm, nfs, ESCROW_FUNCTION_NAME, {}, 100'000); if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 842, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 40'102, std::to_string(re->cost)); + } + } + + { + // max() gas + TestHostFunctions nfs(env, 0); + auto re = runEscrowWasm(wasm, nfs, ESCROW_FUNCTION_NAME, {}, -1); + if (BEAST_EXPECT(re.has_value())) + { + BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); + BEAST_EXPECTS(re->cost == 40'102, std::to_string(re->cost)); } } @@ -392,11 +424,11 @@ struct Wasm_test : public beast::unit_test::suite }; BadTestHostFunctions nfs(env); auto re = - runEscrowWasm(wasm, ESCROW_FUNCTION_NAME, {}, &nfs, 100'000); + runEscrowWasm(wasm, nfs, ESCROW_FUNCTION_NAME, {}, 100'000); if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == -201, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 262, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 5'012, std::to_string(re->cost)); } } @@ -414,11 +446,11 @@ struct Wasm_test : public beast::unit_test::suite }; BadTestHostFunctions nfs(env); auto re = - runEscrowWasm(wasm, ESCROW_FUNCTION_NAME, {}, &nfs, 100'000); + runEscrowWasm(wasm, nfs, ESCROW_FUNCTION_NAME, {}, 100'000); if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == -201, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 262, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 5'012, std::to_string(re->cost)); } } @@ -429,7 +461,7 @@ struct Wasm_test : public beast::unit_test::suite TestHostFunctionsSink nfs(env); std::string funcName("recursive"); - auto re = runEscrowWasm(wasm, funcName, {}, &nfs, 1'000'000'000); + auto re = runEscrowWasm(wasm, nfs, funcName, {}, 1'000'000'000); BEAST_EXPECT(!re && re.error()); // std::cout << "bad case (deep recursion) result " << re.error() // << std::endl; @@ -454,11 +486,12 @@ struct Wasm_test : public beast::unit_test::suite } { + // expected import not provided auto wasmStr = boost::algorithm::unhex(ledgerSqnWasmHex); Bytes wasm(wasmStr.begin(), wasmStr.end()); - TestLedgerDataProvider ledgerDataProvider(&env); + TestLedgerDataProvider ledgerDataProvider(env); - std::vector imports; + ImportVec imports; WASM_IMPORT_FUNC2( imports, getLedgerSqn, "get_ledger_sqn2", &ledgerDataProvider); @@ -469,11 +502,58 @@ struct Wasm_test : public beast::unit_test::suite ESCROW_FUNCTION_NAME, {}, imports, - nullptr, + &ledgerDataProvider, + 1'000'000, + env.journal); + + BEAST_EXPECT(!re); + } + + { + // bad import format + auto wasmStr = boost::algorithm::unhex(ledgerSqnWasmHex); + Bytes wasm(wasmStr.begin(), wasmStr.end()); + TestLedgerDataProvider ledgerDataProvider(env); + + ImportVec imports; + WASM_IMPORT_FUNC2( + imports, getLedgerSqn, "get_ledger_sqn", &ledgerDataProvider); + imports[0].first = nullptr; + + auto& engine = WasmEngine::instance(); + + auto re = engine.run( + wasm, + ESCROW_FUNCTION_NAME, + {}, + imports, + &ledgerDataProvider, + 1'000'000, + env.journal); + + BEAST_EXPECT(!re); + } + + { + // bad function name + auto wasmStr = boost::algorithm::unhex(ledgerSqnWasmHex); + Bytes wasm(wasmStr.begin(), wasmStr.end()); + TestLedgerDataProvider ledgerDataProvider(env); + + ImportVec imports; + WASM_IMPORT_FUNC2( + imports, getLedgerSqn, "get_ledger_sqn", &ledgerDataProvider); + + auto& engine = WasmEngine::instance(); + auto re = engine.run( + wasm, + "func1", + {}, + imports, + &ledgerDataProvider, 1'000'000, env.journal); - // expected import not provided BEAST_EXPECT(!re); } } @@ -494,11 +574,11 @@ struct Wasm_test : public beast::unit_test::suite std::vector const wasm(wasmStr.begin(), wasmStr.end()); TestHostFunctions hf(env, 0); - auto re = runEscrowWasm(wasm, funcName, {}, &hf, 100'000); + auto re = runEscrowWasm(wasm, hf, funcName, {}, 100'000); if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 326, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 97'356, std::to_string(re->cost)); } env.close(); } @@ -509,11 +589,11 @@ struct Wasm_test : public beast::unit_test::suite std::vector const wasm(wasmStr.begin(), wasmStr.end()); TestHostFunctions hf(env, 0); - auto re = runEscrowWasm(wasm, funcName, {}, &hf, 100'000); + auto re = runEscrowWasm(wasm, hf, funcName, {}, 100'000); if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 34, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 2'054, std::to_string(re->cost)); } env.close(); } @@ -597,7 +677,7 @@ struct Wasm_test : public beast::unit_test::suite PerfHostFunctions nfs(env, k, env.tx()); - auto re = runEscrowWasm(wasm, ESCROW_FUNCTION_NAME, {}, &nfs); + auto re = runEscrowWasm(wasm, nfs, ESCROW_FUNCTION_NAME); if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECT(re->result); @@ -627,9 +707,8 @@ struct Wasm_test : public beast::unit_test::suite Bytes const wasm(wasmStr.begin(), wasmStr.end()); TestHostFunctions hfs(env, 0); - auto const allowance = 1'814; - auto re = runEscrowWasm( - wasm, ESCROW_FUNCTION_NAME, {}, &hfs, allowance, env.journal); + auto const allowance = 153'534; + auto re = runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, allowance); if (BEAST_EXPECT(re.has_value())) { @@ -653,8 +732,7 @@ struct Wasm_test : public beast::unit_test::suite { // f32 set constant, opcode disabled exception - auto const re = - runEscrowWasm(wasm, funcName, {}, &hfs, 1'000'000, env.journal); + auto const re = runEscrowWasm(wasm, hfs, funcName, {}, 1'000'000); if (BEAST_EXPECT(!re.has_value())) { BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); @@ -664,8 +742,7 @@ struct Wasm_test : public beast::unit_test::suite { // f32 add, can't create module exception wasm[0x117] = 0x92; - auto const re = - runEscrowWasm(wasm, funcName, {}, &hfs, 1'000'000, env.journal); + auto const re = runEscrowWasm(wasm, hfs, funcName, {}, 1'000'000); if (BEAST_EXPECT(!re.has_value())) { BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); diff --git a/src/xrpld/app/wasm/HostFunc.h b/src/xrpld/app/wasm/HostFunc.h index bff939e0a1..9963754bfb 100644 --- a/src/xrpld/app/wasm/HostFunc.h +++ b/src/xrpld/app/wasm/HostFunc.h @@ -34,6 +34,8 @@ enum class HostFunctionError : int32_t { INDEX_OUT_OF_BOUNDS = -18, FLOAT_INPUT_MALFORMED = -19, FLOAT_COMPUTATION_ERROR = -20, + NO_RUNTIME = -21, + OUT_OF_GAS = -22, }; inline int32_t @@ -80,6 +82,14 @@ floatLogImpl(Slice const& x, int32_t mode); struct HostFunctions { + beast::Journal j_; + + HostFunctions( + beast::Journal j = beast::Journal{beast::Journal::getNullSink()}) + : j_(j) + { + } + // LCOV_EXCL_START virtual void setRT(void const*) @@ -92,10 +102,22 @@ struct HostFunctions return nullptr; } - virtual beast::Journal + std::int64_t + getGas() + { + return -1; + } + + void + setGas(std::int64_t) + { + return; + } + + beast::Journal getJournal() { - return beast::Journal{beast::Journal::getNullSink()}; + return j_; } virtual Expected diff --git a/src/xrpld/app/wasm/HostFuncImpl.h b/src/xrpld/app/wasm/HostFuncImpl.h index f1add087fb..f5ed190230 100644 --- a/src/xrpld/app/wasm/HostFuncImpl.h +++ b/src/xrpld/app/wasm/HostFuncImpl.h @@ -42,8 +42,8 @@ class WasmHostFunctionsImpl : public HostFunctions } public: - WasmHostFunctionsImpl(ApplyContext& ctx, Keylet const& leKey) - : ctx(ctx), leKey(leKey) + WasmHostFunctionsImpl(ApplyContext& ct, Keylet const& leKey) + : HostFunctions(ct.journal), ctx(ct), leKey(leKey) { } @@ -59,12 +59,6 @@ public: return rt_; } - beast::Journal - getJournal() override - { - return ctx.journal; - } - std::optional const& getData() const { diff --git a/src/xrpld/app/wasm/ParamsHelper.h b/src/xrpld/app/wasm/ParamsHelper.h index 9d581c8158..a0eece7931 100644 --- a/src/xrpld/app/wasm/ParamsHelper.h +++ b/src/xrpld/app/wasm/ParamsHelper.h @@ -41,12 +41,15 @@ struct WasmImportFunc std::string name; std::optional result; std::vector params; - void* udata = nullptr; + // void* udata = nullptr; // wasm_func_callback_with_env_t void* wrap = nullptr; uint32_t gas = 0; }; +typedef std::pair WasmUserData; +typedef std::vector ImportVec; + #define WASM_IMPORT_FUNC(v, f, ...) \ WasmImpFunc( \ v, #f, reinterpret_cast(&f##_wrap), ##__VA_ARGS__) @@ -111,7 +114,7 @@ WasmImpFuncHelper(WasmImportFunc& e) template void WasmImpFunc( - std::vector& v, + ImportVec& v, std::string_view imp_name, void* f_wrap, void* data = nullptr, @@ -119,11 +122,10 @@ WasmImpFunc( { WasmImportFunc e; e.name = imp_name; - e.udata = data; e.wrap = f_wrap; e.gas = gas; WasmImpFuncHelper(e); - v.push_back(std::move(e)); + v.push_back(std::make_pair(data, std::move(e))); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/xrpld/app/wasm/WasmVM.h b/src/xrpld/app/wasm/WasmVM.h index 18379d6d4d..5309ed8f86 100644 --- a/src/xrpld/app/wasm/WasmVM.h +++ b/src/xrpld/app/wasm/WasmVM.h @@ -43,7 +43,7 @@ public: run(Bytes const& wasmCode, std::string_view funcName = {}, std::vector const& params = {}, - std::vector const& imports = {}, + ImportVec const& imports = {}, HostFunctions* hfs = nullptr, int64_t gasLimit = -1, beast::Journal j = beast::Journal{beast::Journal::getNullSink()}); @@ -53,12 +53,13 @@ public: Bytes const& wasmCode, std::string_view funcName, std::vector const& params = {}, - std::vector const& imports = {}, + ImportVec const& imports = {}, + HostFunctions* hfs = nullptr, beast::Journal j = beast::Journal{beast::Journal::getNullSink()}); // Host functions helper functionality void* - newTrap(std::string_view msg = {}); + newTrap(std::string const& txt = std::string()); beast::Journal getJournal() const; @@ -66,24 +67,22 @@ public: //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -std::vector -createWasmImport(HostFunctions* hfs); +ImportVec +createWasmImport(HostFunctions& hfs); Expected runEscrowWasm( Bytes const& wasmCode, + HostFunctions& hfs, std::string_view funcName = ESCROW_FUNCTION_NAME, std::vector const& params = {}, - HostFunctions* hfs = nullptr, - int64_t gasLimit = -1, - beast::Journal j = beast::Journal(beast::Journal::getNullSink())); + int64_t gasLimit = -1); NotTEC preflightEscrowWasm( Bytes const& wasmCode, + HostFunctions& hfs, std::string_view funcName = ESCROW_FUNCTION_NAME, - std::vector const& params = {}, - HostFunctions* hfs = nullptr, - beast::Journal j = beast::Journal(beast::Journal::getNullSink())); + std::vector const& params = {}); } // namespace ripple diff --git a/src/xrpld/app/wasm/WasmiVM.h b/src/xrpld/app/wasm/WasmiVM.h index 967a9319a6..a9b8a94332 100644 --- a/src/xrpld/app/wasm/WasmiVM.h +++ b/src/xrpld/app/wasm/WasmiVM.h @@ -48,11 +48,14 @@ struct WasmiResult using ModulePtr = std::unique_ptr; using InstancePtr = std::unique_ptr; +using EnginePtr = std::unique_ptr; +using StorePtr = std::unique_ptr; using FuncInfo = std::pair; struct InstanceWrapper { + wasm_store_t* store_ = nullptr; wasm_extern_vec_t exports_; InstancePtr instance_; beast::Journal j_ = beast::Journal(beast::Journal::getNullSink()); @@ -91,11 +94,15 @@ public: wmem getMem() const; + + std::int64_t + getGas() const; + + std::int64_t setGas(std::int64_t) const; }; struct ModuleWrapper { - wasm_store_t* store_ = nullptr; ModulePtr module_; InstanceWrapper instanceWrap_; wasm_exporttype_vec_t exportTypes_; @@ -114,7 +121,7 @@ public: wasm_store_t* s, Bytes const& wasmBin, bool instantiate, - std::vector const& imports, + ImportVec const& imports, beast::Journal j); ~ModuleWrapper(); @@ -142,13 +149,13 @@ private: static void makeImpReturn(wasm_valtype_vec_t& v, WasmImportFunc const& imp); wasm_extern_vec_t - buildImports(wasm_store_t* s, std::vector const& imports); + buildImports(wasm_store_t* s, ImportVec const& imports); }; class WasmiEngine { - std::unique_ptr engine_; - std::unique_ptr store_; + EnginePtr engine_; + StorePtr store_; std::unique_ptr moduleWrap_; beast::Journal j_ = beast::Journal(beast::Journal::getNullSink()); @@ -158,14 +165,14 @@ public: WasmiEngine(); ~WasmiEngine() = default; - static std::unique_ptr + static EnginePtr init(); Expected, TER> run(Bytes const& wasmCode, std::string_view funcName, std::vector const& params, - std::vector const& imports, + ImportVec const& imports, HostFunctions* hfs, int64_t gas, beast::Journal j); @@ -175,7 +182,8 @@ public: Bytes const& wasmCode, std::string_view funcName, std::vector const& params, - std::vector const& imports, + ImportVec const& imports, + HostFunctions* hfs, beast::Journal j); std::int64_t @@ -183,7 +191,7 @@ public: // Host functions helper functionality wasm_trap_t* - newTrap(std::string_view msg); + newTrap(std::string const& msg); beast::Journal getJournal() const; @@ -203,7 +211,7 @@ private: Bytes const& wasmCode, std::string_view funcName, std::vector const& params, - std::vector const& imports, + ImportVec const& imports, HostFunctions* hfs, int64_t gas); @@ -212,14 +220,14 @@ private: Bytes const& wasmCode, std::string_view funcName, std::vector const& params, - std::vector const& imports); + ImportVec const& imports); int addModule( Bytes const& wasmCode, bool instantiate, int64_t gas, - std::vector const& imports); + ImportVec const& imports); void clearModules(); diff --git a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp index a0b81a2df3..59c4cbfc84 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp @@ -1269,10 +1269,12 @@ floatPowerImpl(Slice const& x, int32_t n, int32_t mode) return res.toBytes(); } + // LCOV_EXCL_START catch (...) { } return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + // LCOV_EXCL_STOP } Expected diff --git a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp index 6e849fe867..90369e3a8d 100644 --- a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp @@ -300,13 +300,52 @@ returnResult( } } +static inline HostFunctions* +getHF(void* env) +{ + auto const* udata = reinterpret_cast(env); + HostFunctions* hf = reinterpret_cast(udata->first); + return hf; +} + +static inline Expected +checkGas(void* env) +{ + auto const* udata = reinterpret_cast(env); + HostFunctions* hf = reinterpret_cast(udata->first); + + auto const* runtime = reinterpret_cast(hf->getRT()); + if (!runtime) + { + wasm_trap_t* trap = reinterpret_cast( + WasmEngine::instance().newTrap("hf no runtime")); // LCOV_EXCL_LINE + return Unexpected(trap); // LCOV_EXCL_LINE + } + + int64_t const gas = runtime->getGas(); + WasmImportFunc const& impFunc = udata->second; + int64_t const x = gas >= impFunc.gas ? gas - impFunc.gas : 0; + runtime->setGas(x); + if (gas < impFunc.gas) + { + wasm_trap_t* trap = reinterpret_cast( + WasmEngine::instance().newTrap("hf out of gas")); + return Unexpected(trap); + } + + return x; +} + +//---------------------------------------------------------------------------------------------------------------------- wasm_trap_t* getLedgerSqn_wrap( void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -319,7 +358,9 @@ getParentLedgerTime_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -333,7 +374,9 @@ getParentLedgerHash_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -347,7 +390,9 @@ getBaseFee_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -360,7 +405,9 @@ isAmendmentEnabled_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -396,7 +443,9 @@ cacheLedgerObj_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -422,7 +471,9 @@ getTxField_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -441,7 +492,9 @@ getCurrentLedgerObjField_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -461,7 +514,9 @@ getLedgerObjField_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -487,7 +542,9 @@ getTxNestedField_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -507,7 +564,9 @@ getCurrentLedgerObjNestedField_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -530,7 +589,9 @@ getLedgerObjNestedField_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -560,7 +621,9 @@ getTxArrayLen_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -580,7 +643,9 @@ getCurrentLedgerObjArrayLen_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -604,7 +669,9 @@ getLedgerObjArrayLen_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -634,7 +701,9 @@ getTxNestedArrayLen_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -654,7 +723,9 @@ getCurrentLedgerObjNestedArrayLen_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -677,7 +748,9 @@ getLedgerObjNestedArrayLen_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -706,7 +779,9 @@ updateData_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -726,7 +801,9 @@ checkSignature_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -762,7 +839,9 @@ computeSha512HalfHash_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -781,7 +860,9 @@ accountKeylet_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -798,7 +879,9 @@ accountKeylet_wrap( wasm_trap_t* ammKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -828,7 +911,9 @@ checkKeylet_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -854,7 +939,9 @@ credentialKeylet_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -890,7 +977,9 @@ delegateKeylet_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -920,7 +1009,9 @@ depositPreauthKeylet_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -947,7 +1038,9 @@ depositPreauthKeylet_wrap( wasm_trap_t* didKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -967,7 +1060,9 @@ escrowKeylet_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -993,7 +1088,9 @@ lineKeylet_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -1029,7 +1126,9 @@ mptIssuanceKeylet_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -1059,7 +1158,9 @@ mptokenKeylet_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -1095,7 +1196,9 @@ nftOfferKeylet_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -1125,7 +1228,9 @@ offerKeylet_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -1155,7 +1260,9 @@ oracleKeylet_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -1180,7 +1287,9 @@ paychanKeylet_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -1216,7 +1325,9 @@ permissionedDomainKeylet_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -1246,7 +1357,9 @@ signersKeylet_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -1266,7 +1379,9 @@ ticketKeylet_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -1296,7 +1411,9 @@ vaultKeylet_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -1323,7 +1440,9 @@ vaultKeylet_wrap( wasm_trap_t* getNFT_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -1349,7 +1468,9 @@ getNFTIssuer_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -1369,7 +1490,9 @@ getNFTTaxon_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -1389,7 +1512,9 @@ getNFTFlags_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -1409,7 +1534,9 @@ getNFTTransferFee_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -1429,7 +1556,9 @@ getNFTSerial_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -1446,7 +1575,9 @@ getNFTSerial_wrap( wasm_trap_t* trace_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; @@ -1480,7 +1611,9 @@ trace_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) wasm_trap_t* traceNum_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; if (params->data[1].of.i32 > maxWasmParamLength) @@ -1510,7 +1643,9 @@ traceAccount_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); if (params->data[1].of.i32 > maxWasmParamLength) @@ -1535,7 +1670,9 @@ traceFloat_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); if (params->data[1].of.i32 > maxWasmParamLength) @@ -1560,7 +1697,9 @@ traceAmount_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); if (params->data[1].of.i32 > maxWasmParamLength) @@ -1600,7 +1739,9 @@ floatFromInt_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int i = 0; @@ -1624,7 +1765,9 @@ floatFromUint_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int i = 0; @@ -1645,7 +1788,9 @@ floatFromUint_wrap( wasm_trap_t* floatSet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int i = 0; @@ -1673,7 +1818,9 @@ floatCompare_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int i = 0; @@ -1691,7 +1838,9 @@ floatCompare_wrap( wasm_trap_t* floatAdd_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int i = 0; @@ -1719,7 +1868,9 @@ floatSubtract_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int i = 0; @@ -1747,7 +1898,9 @@ floatMultiply_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int i = 0; @@ -1775,7 +1928,9 @@ floatDivide_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int i = 0; @@ -1800,7 +1955,9 @@ floatDivide_wrap( wasm_trap_t* floatRoot_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int i = 0; @@ -1828,7 +1985,9 @@ floatPower_wrap( wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int i = 0; @@ -1853,7 +2012,9 @@ floatPower_wrap( wasm_trap_t* floatLog_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { - auto* hf = reinterpret_cast(env); + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); int i = 0; diff --git a/src/xrpld/app/wasm/detail/WasmVM.cpp b/src/xrpld/app/wasm/detail/WasmVM.cpp index d87b1444f6..9ac91358dc 100644 --- a/src/xrpld/app/wasm/detail/WasmVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmVM.cpp @@ -16,7 +16,7 @@ namespace ripple { static void -setCommonHostFunctions(HostFunctions* hfs, std::vector& i) +setCommonHostFunctions(HostFunctions* hfs, ImportVec& i) { // clang-format off WASM_IMPORT_FUNC2(i, getLedgerSqn, "get_ledger_sqn", hfs, 60); @@ -89,16 +89,13 @@ setCommonHostFunctions(HostFunctions* hfs, std::vector& i) // clang-format on } -std::vector -createWasmImport(HostFunctions* hfs) +ImportVec +createWasmImport(HostFunctions& hfs) { - std::vector i; + ImportVec i; - if (hfs) - { - setCommonHostFunctions(hfs, i); - WASM_IMPORT_FUNC2(i, updateData, "update_data", hfs, 1000); - } + setCommonHostFunctions(&hfs, i); + WASM_IMPORT_FUNC2(i, updateData, "update_data", &hfs, 1000); return i; } @@ -106,11 +103,10 @@ createWasmImport(HostFunctions* hfs) Expected runEscrowWasm( Bytes const& wasmCode, + HostFunctions& hfs, std::string_view funcName, std::vector const& params, - HostFunctions* hfs, - int64_t gasLimit, - beast::Journal j) + int64_t gasLimit) { // create VM and set cost limit auto& vm = WasmEngine::instance(); @@ -121,9 +117,9 @@ runEscrowWasm( funcName, params, createWasmImport(hfs), - hfs, + &hfs, gasLimit, - hfs ? hfs->getJournal() : j); + hfs.getJournal()); // std::cout << "runEscrowWasm, mod size: " << wasmCode.size() // << ", gasLimit: " << gasLimit << ", funcName: " << funcName; @@ -146,10 +142,9 @@ runEscrowWasm( NotTEC preflightEscrowWasm( Bytes const& wasmCode, + HostFunctions& hfs, std::string_view funcName, - std::vector const& params, - HostFunctions* hfs, - beast::Journal j) + std::vector const& params) { // create VM and set cost limit auto& vm = WasmEngine::instance(); @@ -160,7 +155,8 @@ preflightEscrowWasm( funcName, params, createWasmImport(hfs), - hfs ? hfs->getJournal() : j); + &hfs, + hfs.getJournal()); return ret; } @@ -183,7 +179,7 @@ WasmEngine::run( Bytes const& wasmCode, std::string_view funcName, std::vector const& params, - std::vector const& imports, + ImportVec const& imports, HostFunctions* hfs, int64_t gasLimit, beast::Journal j) @@ -196,22 +192,25 @@ WasmEngine::check( Bytes const& wasmCode, std::string_view funcName, std::vector const& params, - std::vector const& imports, + ImportVec const& imports, + HostFunctions* hfs, beast::Journal j) { - return impl->check(wasmCode, funcName, params, imports, j); + return impl->check(wasmCode, funcName, params, imports, hfs, j); } void* -WasmEngine::newTrap(std::string_view msg) +WasmEngine::newTrap(std::string const& msg) { return impl->newTrap(msg); } +// LCOV_EXCL_START beast::Journal WasmEngine::getJournal() const { return impl->getJournal(); } +// LCOV_EXCL_STOP } // namespace ripple diff --git a/src/xrpld/app/wasm/detail/WasmiVM.cpp b/src/xrpld/app/wasm/detail/WasmiVM.cpp index c3c1e300e4..fe3a5629f7 100644 --- a/src/xrpld/app/wasm/detail/WasmiVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmiVM.cpp @@ -75,18 +75,21 @@ InstanceWrapper::InstanceWrapper() { } +// LCOV_EXCL_START InstanceWrapper::InstanceWrapper(InstanceWrapper&& o) : exports_{0, nullptr}, instance_(nullptr, &wasm_instance_delete) { *this = std::move(o); } +// LCOV_EXCL_STOP InstanceWrapper::InstanceWrapper( wasm_store_t* s, wasm_module_t* m, wasm_extern_vec_t const& imports, beast::Journal j) - : exports_ WASM_EMPTY_VEC + : store_(s) + , exports_ WASM_EMPTY_VEC , instance_(init(s, m, &exports_, imports, j)) , j_(j) { @@ -102,10 +105,12 @@ InstanceWrapper& InstanceWrapper::operator=(InstanceWrapper&& o) { if (this == &o) - return *this; + return *this; // LCOV_EXCL_LINE + store_ = o.store_; + o.store_ = nullptr; if (exports_.size) - wasm_extern_vec_delete(&exports_); + wasm_extern_vec_delete(&exports_); // LCOV_EXCL_LINE exports_ = o.exports_; o.exports_ = {0, nullptr}; @@ -130,12 +135,12 @@ InstanceWrapper::getFunc( wasm_functype_t* ft = nullptr; if (!instance_) - throw std::runtime_error("no instance"); + throw std::runtime_error("no instance"); // LCOV_EXCL_LINE if (!export_types.size) - throw std::runtime_error("no export"); + throw std::runtime_error("no export"); // LCOV_EXCL_LINE if (export_types.size != exports_.size) - throw std::runtime_error("invalid export"); + throw std::runtime_error("invalid export"); // LCOV_EXCL_LINE for (unsigned i = 0; i < export_types.size; ++i) { @@ -149,7 +154,8 @@ InstanceWrapper::getFunc( { auto* exn(exports_.data[i]); if (wasm_extern_kind(exn) != WASM_EXTERN_FUNC) - throw std::runtime_error("invalid export"); + throw std::runtime_error( + "invalid export"); // LCOV_EXCL_LINE ft = wasm_externtype_as_functype( const_cast(exn_type)); @@ -170,7 +176,7 @@ wmem InstanceWrapper::getMem() const { if (!instance_) - throw std::runtime_error("no instance"); + throw std::runtime_error("no instance"); // LCOV_EXCL_LINE wasm_memory_t* mem = nullptr; for (unsigned i = 0; i < exports_.size; ++i) @@ -184,13 +190,43 @@ InstanceWrapper::getMem() const } if (!mem) - throw std::runtime_error("no memory exported"); + throw std::runtime_error("no memory exported"); // LCOV_EXCL_LINE return { reinterpret_cast(wasm_memory_data(mem)), wasm_memory_data_size(mem)}; } +std::int64_t +InstanceWrapper::getGas() const +{ + if (!store_) + return -1; // LCOV_EXCL_LINE + std::uint64_t gas = 0; + wasm_store_get_fuel(store_, &gas); + return static_cast(gas); +} + +std::int64_t +InstanceWrapper::setGas(std::int64_t gas) const +{ + if (!store_) + return -1; // LCOV_EXCL_LINE + + if (gas < 0) + gas = std::numeric_limits::max(); + wasmi_error_t* err = + wasm_store_set_fuel(store_, static_cast(gas)); + if (err) + { + print_wasm_error( + "Can't set instance gas", nullptr, j_); // LCOV_EXCL_LINE + throw std::runtime_error("Can't set instance gas"); // LCOV_EXCL_LINE + } + + return gas; +} + ////////////////////////////////////////////////////////////////////////////////////////////////////////////// ModulePtr @@ -204,6 +240,7 @@ ModuleWrapper::init(wasm_store_t* s, Bytes const& wasmBin, beast::Journal j) return m; } +// LCOV_EXCL_START ModuleWrapper::ModuleWrapper() : module_(nullptr, &wasm_module_delete), exportTypes_{0, nullptr} { @@ -214,14 +251,15 @@ ModuleWrapper::ModuleWrapper(ModuleWrapper&& o) { *this = std::move(o); } +// LCOV_EXCL_STOP ModuleWrapper::ModuleWrapper( wasm_store_t* s, Bytes const& wasmBin, bool instantiate, - std::vector const& imports, + ImportVec const& imports, beast::Journal j) - : store_(s), module_(init(s, wasmBin, j)), exportTypes_{0, nullptr}, j_(j) + : module_(init(s, wasmBin, j)), exportTypes_{0, nullptr}, j_(j) { wasm_module_exports(module_.get(), &exportTypes_); if (instantiate) @@ -238,14 +276,13 @@ ModuleWrapper::~ModuleWrapper() wasm_exporttype_vec_delete(&exportTypes_); } +// LCOV_EXCL_START ModuleWrapper& ModuleWrapper::operator=(ModuleWrapper&& o) { if (this == &o) return *this; - store_ = o.store_; - o.store_ = nullptr; module_ = std::move(o.module_); instanceWrap_ = std::move(o.instanceWrap_); if (exportTypes_.size) @@ -262,6 +299,8 @@ ModuleWrapper::operator bool() const return instanceWrap_; } +// LCOV_EXCL_STOP + void ModuleWrapper::makeImpParams(wasm_valtype_vec_t& v, WasmImportFunc const& imp) { @@ -284,8 +323,10 @@ ModuleWrapper::makeImpParams(wasm_valtype_vec_t& v, WasmImportFunc const& imp) case WT_I64: v.data[i] = wasm_valtype_new_i64(); break; + // LCOV_EXCL_START default: throw std::runtime_error("invalid import type"); + // LCOV_EXCL_STOP } } } @@ -301,21 +342,21 @@ ModuleWrapper::makeImpReturn(wasm_valtype_vec_t& v, WasmImportFunc const& imp) case WT_I32: v.data[0] = wasm_valtype_new_i32(); break; + // LCOV_EXCL_START case WT_I64: v.data[0] = wasm_valtype_new_i64(); break; default: throw std::runtime_error("invalid return type"); + // LCOV_EXCL_STOP } } else - v = WASM_EMPTY_VEC; + v = WASM_EMPTY_VEC; // LCOV_EXCL_LINE } wasm_extern_vec_t -ModuleWrapper::buildImports( - wasm_store_t* s, - std::vector const& imports) +ModuleWrapper::buildImports(wasm_store_t* s, ImportVec const& imports) { wasm_importtype_vec_t importTypes = WASM_EMPTY_VEC; wasm_module_imports(module_.get(), &importTypes); @@ -343,15 +384,17 @@ ModuleWrapper::buildImports( wasm_externtype_kind(wasm_importtype_type(importtype)); if ((itype) != WASM_EXTERN_FUNC) throw std::runtime_error( - "Invalid import type " + std::to_string(itype)); + "Invalid import type " + + std::to_string(itype)); // LCOV_EXCL_LINE // for multi-module support // if ((W_ENV != modName) && (W_HOST_LIB != modName)) // continue; bool impSet = false; - for (auto const& imp : imports) + for (auto const& obj : imports) { + auto const& imp = obj.second; if (imp.name != fieldName) continue; @@ -368,7 +411,7 @@ ModuleWrapper::buildImports( s, ftype.get(), reinterpret_cast(imp.wrap), - imp.udata, + (void*)&obj, nullptr); if (!func) { @@ -378,14 +421,6 @@ ModuleWrapper::buildImports( // LCOV_EXCL_STOP } - // if (imp.gas && !wasm_func_set_gas(func, imp.gas)) - // { - // // LCOV_EXCL_START - // throw std::runtime_error( - // "can't set gas for import function " + imp.name); - // // LCOV_EXCL_STOP - // } - wimports.data[i] = wasm_func_as_extern(func); ++impCnt; impSet = true; @@ -396,9 +431,7 @@ ModuleWrapper::buildImports( if (!impSet) { print_wasm_error( - std::string("Import not found: ") + fieldName.data(), - nullptr, - j_); + "Import not found: " + std::string(fieldName), nullptr, j_); } } @@ -452,11 +485,7 @@ ModuleWrapper::addInstance(wasm_store_t* s, wasm_extern_vec_t const& imports) std::int64_t ModuleWrapper::getGas() { - if (!store_) - return 0; - std::uint64_t gas = 0; - wasm_store_get_fuel(store_, &gas); - return static_cast(gas); + return instanceWrap_ ? instanceWrap_.getGas() : -1; } ////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -475,7 +504,7 @@ WasmiEngine::init() wasm_config_t* config = wasm_config_new(); if (!config) return std::unique_ptr{ - nullptr, &wasm_engine_delete}; + nullptr, &wasm_engine_delete}; // LCOV_EXCL_LINE wasmi_config_consume_fuel_set(config, true); return std::unique_ptr( @@ -492,7 +521,7 @@ WasmiEngine::addModule( Bytes const& wasmCode, bool instantiate, int64_t gas, - std::vector const& imports) + ImportVec const& imports) { moduleWrap_.reset(); store_.reset(); // to free the memory before creating new store @@ -504,15 +533,18 @@ WasmiEngine::addModule( wasm_store_set_fuel(store_.get(), static_cast(gas)); if (err) { + // LCOV_EXCL_START print_wasm_error("Error setting gas", nullptr, j_); throw std::runtime_error("can't set gas"); + // LCOV_EXCL_STOP } moduleWrap_ = std::make_unique( store_.get(), wasmCode, instantiate, imports, j_); if (!moduleWrap_) - throw std::runtime_error("can't create module wrapper"); + throw std::runtime_error( + "can't create module wrapper"); // LCOV_EXCL_LINE return moduleWrap_ ? 0 : -1; } @@ -541,9 +573,11 @@ WasmiEngine::convertParams(std::vector const& params) case WT_I32: v.push_back(WASM_I32_VAL(p.of.i32)); break; + // LCOV_EXCL_START case WT_I64: v.push_back(WASM_I64_VAL(p.of.i64)); break; + // LCOV_EXCL_STOP case WT_U8V: { auto const sz = p.of.u8v.sz; auto const ptr = allocate(sz); @@ -554,10 +588,12 @@ WasmiEngine::convertParams(std::vector const& params) v.push_back(WASM_I32_VAL(sz)); } break; + // LCOV_EXCL_START default: throw std::runtime_error( "unknown parameter type: " + std::to_string(p.type)); break; + // LCOV_EXCL_STOP } } @@ -583,6 +619,7 @@ WasmiEngine::compareParamTypes( return -1; } +// LCOV_EXCL_START void WasmiEngine::add_param(std::vector& in, int32_t p) { @@ -592,6 +629,8 @@ WasmiEngine::add_param(std::vector& in, int32_t p) el = WASM_I32_VAL(p); // WASM_I32; } +// LCOV_EXCL_STOP + void WasmiEngine::add_param(std::vector& in, int64_t p) { @@ -719,12 +758,22 @@ WasmiEngine::call( return call(f, in, p.data(), p.size(), std::forward(args)...); } +static inline void +checkImports(ImportVec const& imports, HostFunctions* hfs) +{ + for (auto const& obj : imports) + { + if (hfs != obj.first) + Throw("Imports hf unsync"); + } +} + Expected, TER> WasmiEngine::run( Bytes const& wasmCode, std::string_view funcName, std::vector const& params, - std::vector const& imports, + ImportVec const& imports, HostFunctions* hfs, int64_t gas, beast::Journal j) @@ -732,16 +781,19 @@ WasmiEngine::run( j_ = j; try { + checkImports(imports, hfs); return runHlp(wasmCode, funcName, params, imports, hfs, gas); } catch (std::exception const& e) { print_wasm_error(std::string("exception: ") + e.what(), nullptr, j_); } + // LCOV_EXCL_START catch (...) { print_wasm_error(std::string("exception: unknown"), nullptr, j_); } + // LCOV_EXCL_STOP return Unexpected(tecFAILED_PROCESSING); } @@ -750,7 +802,7 @@ WasmiEngine::runHlp( Bytes const& wasmCode, std::string_view funcName, std::vector const& params, - std::vector const& imports, + ImportVec const& imports, HostFunctions* hfs, int64_t gas) { @@ -764,7 +816,7 @@ WasmiEngine::runHlp( } if (!moduleWrap_ || !moduleWrap_->instanceWrap_) - throw std::runtime_error("no instance"); + throw std::runtime_error("no instance"); // LCOV_EXCL_LINE if (hfs) hfs->setRT(&getRT()); @@ -787,7 +839,8 @@ WasmiEngine::runHlp( throw std::runtime_error("<" + std::string(funcName) + "> failure"); else if (!res.r.size) throw std::runtime_error( - "<" + std::string(funcName) + "> return nothing"); + "<" + std::string(funcName) + + "> return nothing"); // LCOV_EXCL_LINE assert(res.r.data[0].kind == WASM_I32); if (gas == -1) @@ -810,23 +863,27 @@ WasmiEngine::check( Bytes const& wasmCode, std::string_view funcName, std::vector const& params, - std::vector const& imports, + ImportVec const& imports, + HostFunctions* hfs, beast::Journal j) { j_ = j; try { + checkImports(imports, hfs); return checkHlp(wasmCode, funcName, params, imports); } catch (std::exception const& e) { print_wasm_error(std::string("exception: ") + e.what(), nullptr, j_); } + // LCOV_EXCL_START catch (...) { print_wasm_error(std::string("exception: unknown"), nullptr, j_); } + // LCOV_EXCL_STOP return temBAD_WASM; } @@ -836,7 +893,7 @@ WasmiEngine::checkHlp( Bytes const& wasmCode, std::string_view funcName, std::vector const& params, - std::vector const& imports) + ImportVec const& imports) { // currently only 1 module support, possible parallel UT run std::lock_guard lg(m_); @@ -847,7 +904,7 @@ WasmiEngine::checkHlp( int const m = addModule(wasmCode, true, -1, imports); if ((m < 0) || !moduleWrap_ || !moduleWrap_->instanceWrap_) - throw std::runtime_error("no instance"); + throw std::runtime_error("no instance"); // LCOV_EXCL_LINE // Looking for a func and compare parameter types auto const f = getFunc(!funcName.empty() ? funcName : "_start"); @@ -861,11 +918,13 @@ WasmiEngine::checkHlp( return tesSUCCESS; } +// LCOV_EXCL_START std::int64_t WasmiEngine::getGas() { - return moduleWrap_ ? moduleWrap_->getGas() : 0; + return moduleWrap_ ? moduleWrap_->getGas() : -1; } +// LCOV_EXCL_STOP wmem WasmiEngine::getMem() const @@ -894,20 +953,23 @@ WasmiEngine::allocate(int32_t sz) } wasm_trap_t* -WasmiEngine::newTrap(std::string_view txt) +WasmiEngine::newTrap(std::string const& txt) { - wasm_message_t msg = WASM_EMPTY_VEC; + static char empty[1] = {0}; + wasm_message_t msg = {1, empty}; if (!txt.empty()) - wasm_name_new(&msg, txt.size(), txt.data()); + wasm_name_new(&msg, txt.size() + 1, txt.c_str()); // include 0 return wasm_trap_new(store_.get(), &msg); } +// LCOV_EXCL_START beast::Journal WasmiEngine::getJournal() const { return j_; } +// LCOV_EXCL_STOP } // namespace ripple From c145598ff9fd23ab04a96d5af728408479987f81 Mon Sep 17 00:00:00 2001 From: pwang200 <354723+pwang200@users.noreply.github.com> Date: Tue, 2 Dec 2025 00:09:20 -0500 Subject: [PATCH 040/137] add memory limit and disable float and other advanced instructions --- .../wasmi/patches/0001-xrplf-0.42.1.patch | 133 +- src/test/app/Wasm_test.cpp | 46 +- src/test/app/wasm_fixtures/fixtures.cpp | 9212 +---------------- src/test/app/wasm_fixtures/fixtures.h | 4 - src/test/app/wasm_fixtures/sp1/Cargo.lock | 1384 --- src/test/app/wasm_fixtures/sp1/Cargo.toml | 16 - src/test/app/wasm_fixtures/sp1/src/lib.rs | 37 - .../app/wasm_fixtures/wat/deep_recursion.wat | 29 + .../app/wasm_fixtures/zk_proof/Cargo.lock | 106 - .../app/wasm_fixtures/zk_proof/Cargo.toml | 19 - .../app/wasm_fixtures/zk_proof/src/lib.rs | 254 - src/xrpld/app/wasm/WasmVM.h | 2 + src/xrpld/app/wasm/detail/WasmiVM.cpp | 14 +- 13 files changed, 170 insertions(+), 11086 deletions(-) delete mode 100644 src/test/app/wasm_fixtures/sp1/Cargo.lock delete mode 100644 src/test/app/wasm_fixtures/sp1/Cargo.toml delete mode 100644 src/test/app/wasm_fixtures/sp1/src/lib.rs create mode 100644 src/test/app/wasm_fixtures/wat/deep_recursion.wat delete mode 100644 src/test/app/wasm_fixtures/zk_proof/Cargo.lock delete mode 100644 src/test/app/wasm_fixtures/zk_proof/Cargo.toml delete mode 100644 src/test/app/wasm_fixtures/zk_proof/src/lib.rs diff --git a/external/wasmi/patches/0001-xrplf-0.42.1.patch b/external/wasmi/patches/0001-xrplf-0.42.1.patch index 0fbcb4408b..c8a7a374a1 100644 --- a/external/wasmi/patches/0001-xrplf-0.42.1.patch +++ b/external/wasmi/patches/0001-xrplf-0.42.1.patch @@ -1,5 +1,5 @@ diff --git a/crates/c_api/CMakeLists.txt b/crates/c_api/CMakeLists.txt -index b15c787a..54eaed2d 100644 +index b15c787..54eaed2 100644 --- a/crates/c_api/CMakeLists.txt +++ b/crates/c_api/CMakeLists.txt @@ -6,6 +6,8 @@ option(BUILD_SHARED_LIBS "Build using shared libraries" OFF) @@ -67,7 +67,7 @@ index b15c787a..54eaed2d 100644 - COMMENT "clang-format: Apply formatting rules for Wasmi C-API header files" -) diff --git a/crates/c_api/include/wasm.h b/crates/c_api/include/wasm.h -index 5ee617ff..5c79bde3 100644 +index 5ee617f..a76f10e 100644 --- a/crates/c_api/include/wasm.h +++ b/crates/c_api/include/wasm.h @@ -13,11 +13,17 @@ @@ -89,20 +89,22 @@ index 5ee617ff..5c79bde3 100644 #endif #ifdef __cplusplus -@@ -146,6 +152,11 @@ WASM_DECLARE_OWN(store) +@@ -145,7 +151,13 @@ WASM_API_EXTERN own wasm_engine_t* wasm_engine_new_with_config(own wasm_config_t + WASM_DECLARE_OWN(store) WASM_API_EXTERN own wasm_store_t* wasm_store_new(wasm_engine_t*); - ++WASM_API_EXTERN own wasm_store_t* wasm_store_new_with_memory_max_pages(wasm_engine_t*, uint32_t max_pages); ++ +// Store fuel functions (forward declarations) +struct wasmi_error; -+ + +WASM_API_EXTERN struct wasmi_error* wasm_store_get_fuel(const wasm_store_t*, uint64_t* fuel); +WASM_API_EXTERN struct wasmi_error* wasm_store_set_fuel(wasm_store_t*, uint64_t fuel); /////////////////////////////////////////////////////////////////////////////// // Type Representations diff --git a/crates/c_api/include/wasmi.h b/crates/c_api/include/wasmi.h -index 2caffa37..0c0584ec 100644 +index 2caffa3..0c0584e 100644 --- a/crates/c_api/include/wasmi.h +++ b/crates/c_api/include/wasmi.h @@ -10,7 +10,7 @@ @@ -128,18 +130,127 @@ index 2caffa37..0c0584ec 100644 #endif // WASMI_H diff --git a/crates/c_api/src/store.rs b/crates/c_api/src/store.rs -index 56d4898f..543dbff8 100644 +index 56d4898..9abda8e 100644 --- a/crates/c_api/src/store.rs +++ b/crates/c_api/src/store.rs -@@ -175,3 +175,44 @@ pub extern "C" fn wasmi_context_set_fuel( +@@ -1,7 +1,7 @@ + use crate::{wasm_engine_t, wasmi_error_t, ForeignData}; + use alloc::{boxed::Box, sync::Arc}; + use core::{cell::UnsafeCell, ffi}; +-use wasmi::{AsContext, AsContextMut, Store, StoreContext, StoreContextMut}; ++use wasmi::{AsContext, AsContextMut, Store, StoreContext, StoreContextMut, StoreLimits, StoreLimitsBuilder}; + + /// This representation of a `Store` is used to implement the `wasm.h` API (and + /// *not* the `wasmi.h` API!) +@@ -16,7 +16,7 @@ use wasmi::{AsContext, AsContextMut, Store, StoreContext, StoreContextMut}; + /// least Wasmi's implementation). + #[derive(Clone)] + pub struct WasmStoreRef { +- inner: Arc>>, ++ inner: Arc>>, + } + + impl WasmStoreRef { +@@ -27,7 +27,7 @@ impl WasmStoreRef { + /// # Safety + /// + /// It is the callers responsibility to provide a valid `self`. +- pub unsafe fn context(&self) -> StoreContext<'_, ()> { ++ pub unsafe fn context(&self) -> StoreContext<'_, StoreLimits> { + (*self.inner.get()).as_context() + } + +@@ -38,7 +38,7 @@ impl WasmStoreRef { + /// # Safety + /// + /// It is the callers responsibility to provide a valid `self`. +- pub unsafe fn context_mut(&mut self) -> StoreContextMut<'_, ()> { ++ pub unsafe fn context_mut(&mut self) -> StoreContextMut<'_, StoreLimits> { + (*self.inner.get()).as_context_mut() + } + } +@@ -56,17 +56,71 @@ pub struct wasm_store_t { + + wasmi_c_api_macros::declare_own!(wasm_store_t); + +-/// Creates a new [`Store<()>`](wasmi::Store) for the given `engine`. ++/// Creates a new [`Store`](wasmi::Store) for the given `engine`. ++/// ++/// The store is created with no resource limits (original behavior). ++/// For memory-limited stores, use [`wasm_store_new_with_memory_max_pages`]. + /// + /// The returned [`wasm_store_t`] must be freed using [`wasm_store_delete`]. + /// +-/// Wraps [`>::new`](wasmi::Store::new). ++/// Wraps [`>::new`](wasmi::Store::new). + #[cfg_attr(not(feature = "prefix-symbols"), no_mangle)] + #[allow(clippy::arc_with_non_send_sync)] + #[cfg_attr(feature = "prefix-symbols", wasmi_c_api_macros::prefix_symbol)] + pub extern "C" fn wasm_store_new(engine: &wasm_engine_t) -> Box { + let engine = &engine.inner; +- let store = Store::new(engine, ()); ++ ++ // Create store with no resource limits (original behavior) ++ let limits = StoreLimitsBuilder::new().build(); ++ let store = Store::new(engine, limits); ++ ++ Box::new(wasm_store_t { ++ inner: WasmStoreRef { ++ inner: Arc::new(UnsafeCell::new(store)), ++ }, ++ }) ++} ++ ++/// Creates a new [`Store`](wasmi::Store) for the given `engine` with memory limits. ++/// ++/// This function creates a store with resource limits suitable for blockchain smart contracts. ++/// The memory limit is enforced during WebAssembly execution. ++/// ++/// If `max_pages` exceeds 1024 (64MB), this function will panic. ++/// ++/// The returned [`wasm_store_t`] must be freed using [`wasm_store_delete`]. ++/// ++/// Wraps [`>::new`](wasmi::Store::new). ++#[cfg_attr(not(feature = "prefix-symbols"), no_mangle)] ++#[allow(clippy::arc_with_non_send_sync)] ++#[cfg_attr(feature = "prefix-symbols", wasmi_c_api_macros::prefix_symbol)] ++pub extern "C" fn wasm_store_new_with_memory_max_pages( ++ engine: &wasm_engine_t, ++ max_pages: u32, ++) -> Box { ++ // Validate max_pages limit (64MB = 1024 pages) ++ if max_pages > 1024 { ++ panic!("max_pages ({}) exceeds maximum allowed value of 1024 pages (64MB)", max_pages); ++ } ++ ++ // Convert pages to bytes (each page is 64KB) ++ let max_memory_bytes = (max_pages as usize) * (64 * 1024); ++ ++ // Create store limits with blockchain-suitable defaults ++ let limits = StoreLimitsBuilder::new() ++ .memory_size(max_memory_bytes) // User-specified memory limit ++ .instances(1) // Single instance for blockchain ++ .tables(1) // Single table for blockchain ++ .memories(1) // Single memory for blockchain ++ .table_elements(64) // Limited table elements for blockchain ++ .trap_on_grow_failure(false) // Return -1 on growth failure instead of trapping ++ .build(); ++ ++ let mut store = Store::new(&engine.inner, limits); ++ ++ // Install the resource limiter ++ store.limiter(|limits| limits); ++ + Box::new(wasm_store_t { + inner: WasmStoreRef { + inner: Arc::new(UnsafeCell::new(store)), +@@ -175,3 +229,40 @@ pub extern "C" fn wasmi_context_set_fuel( ) -> Option> { crate::handle_result(store.set_fuel(fuel), |()| {}) } + +//////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////////////////// + +/// Returns the current fuel of the wasm store context in `fuel`. +/// @@ -171,8 +282,6 @@ index 56d4898f..543dbff8 100644 + store: &mut wasm_store_t, + fuel: u64, +) -> Option> { -+ + let mut context = unsafe { store.inner.context_mut() }; + crate::handle_result(context.set_fuel(fuel), |()| {}) +} -+ diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index bcec0442f3..b7ad172f2f 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -245,41 +245,6 @@ struct Wasm_test : public beast::unit_test::suite } } - void - testWasmSP1Verifier() - { - testcase("Wasm sp1 zkproof verifier"); - auto const ws = boost::algorithm::unhex(sp1WasmHex); - Bytes const wasm(ws.begin(), ws.end()); - auto& engine = WasmEngine::instance(); - - auto const re = engine.run(wasm, "sp1_groth16_verifier"); - - if (BEAST_EXPECT(re.has_value())) - { - BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS( - re->cost == 4'191'711'969ll, std::to_string(re->cost)); - } - } - - void - testWasmBG16Verifier() - { - testcase("Wasm BG16 zkproof verifier"); - auto const ws = boost::algorithm::unhex(zkProofWasmHex); - Bytes const wasm(ws.begin(), ws.end()); - auto& engine = WasmEngine::instance(); - - auto const re = engine.run(wasm, "bellman_groth16_test"); - - if (BEAST_EXPECT(re.has_value())) - { - BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 270'282'552, std::to_string(re->cost)); - } - } - void testHFCost() { @@ -460,7 +425,7 @@ struct Wasm_test : public beast::unit_test::suite std::vector wasm(wasmStr.begin(), wasmStr.end()); TestHostFunctionsSink nfs(env); - std::string funcName("recursive"); + std::string funcName("finish"); auto re = runEscrowWasm(wasm, nfs, funcName, {}, 1'000'000'000); BEAST_EXPECT(!re && re.error()); // std::cout << "bad case (deep recursion) result " << re.error() @@ -482,7 +447,7 @@ struct Wasm_test : public beast::unit_test::suite auto const s = sink.messages().str(); BEAST_EXPECT( countSubstr(s, "WASMI Error: failure to call func") == 1); - BEAST_EXPECT(countSubstr(s, "exception: failure") > 0); + BEAST_EXPECT(countSubstr(s, "exception: failure") > 0); } { @@ -764,17 +729,12 @@ struct Wasm_test : public beast::unit_test::suite testWasmSha(); testWasmB58(); - // running too long - // testWasmSP1Verifier(); - testWasmBG16Verifier(); - testHFCost(); - testEscrowWasmDN(); testFloat(); testCodecovWasm(); - // testDisabledFloat(); + testDisabledFloat(); // perfTest(); } diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index e4c65c3d62..160a4549fa 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -103,8498 +103,6 @@ extern std::string const sha512PureWasmHex = "6c6f62616c732b087369676e2d6578742b0f7265666572656e63652d7479" "7065732b0a6d756c746976616c7565"; -extern std::string const zkProofWasmHex = - "0061736d0100000001600f60037f7f7f017f60027f7f017f60027f7f0060" - "037f7f7f0060000060057f7f7f7f7f0060047f7f7f7f0060067f7f7f7f7f" - "7f0060017f017f6000017f60017f0060047f7f7f7f017f60027e7e017f60" - "057f7f7f7f7f017f60057f7e7e7e7e00038c018a01030402030202020302" - "030505030206020601000006010606070303080202020302090208020202" - "030a0806020a030b06060202030302020303030203030203020202010302" - "030203060a02000202080a020c0807010d02030206060102020803080302" - "030202020a02060303020a03020301010a0d030101010001010301020604" - "0a0a020200000e000004050170010e0e05030100110619037f01418080c0" - "000b7f0041bd97c0000b7f0041c097c0000b075d06066d656d6f72790200" - "08616c6c6f63617465001b13646573657269616c697a655f67315f776173" - "6d001c1462656c6c6d616e5f67726f746831365f7465737400210a5f5f64" - "6174615f656e6403010b5f5f686561705f6261736503020914010041010b" - "0d15767778717e830111547d137a7b0ad6f3048a014b01017f0240024002" - "4020010d00410021010c010b2002450d01200120026e2203200320026c20" - "01476a21010b2000200136020820004101360204200020013602000f0b10" - "8180808000000b4701017f23808080800041206b22002480808080002000" - "41003602182000410136020c200041e090c0800036020820004204370210" - "200041086a41fc82c0800010a480808000000b0f002000200141e8001083" - "808080000b170002402000450d002001200020026c108d808080000b0b0e" - "002000200141011083808080000b0f002000200141a0021083808080000b" - "0e002000200141201083808080000b4201017f0240200028020822032000" - "280200470d00200020021088808080000b2000280204200341e8006c6a20" - "0141e8001086818080001a2000200341016a3602080b5a01017f23808080" - "800041106b2202248080808000200241086a20002000280200410141e800" - "108b80808000024020022802082200418180808078460d00200020022802" - "0c2001108c80808000000b200241106a2480808080000b6401027f238080" - "80800041106b2203248080808000200341086a20024101410141f081c080" - "00108a8080800020032802082104200328020c2001200210868180800021" - "01200020023602082000200136020420002004360200200341106a248080" - "8080000b6401017f23808080800041106b2205248080808000200541046a" - "200120022003108e8080800020052802082103024020052802040d002000" - "200528020c36020420002003360200200541106a2480808080000f0b2003" - "200528020c2004108c80808000000bfd0102037f017e2380808080004110" - "6b22052480808080004100210602400240200220036a22032002490d0020" - "0441076a417871ad2001280200220741017422022003200220034b1b2202" - "4104200241044b1b2203ad7e2208422088a70d002008a7220241f8ffffff" - "074b0d01024002402007450d00024020040d00200541086a4108200210d7" - "80808000200528020821040c020b2001280204200720046c200210cb8080" - "800021040c010b20054108200210d780808000200528020021040b024020" - "040d00410821060c020b2001200336020020012004360204418180808078" - "21060b0b2000200236020420002006360200200541106a2480808080000b" - "1200024020000d00200210cf808080000b000b6c01027f02400240200041" - "7c6a2802002202417871220341044108200241037122021b20016a490d00" - "02402002450d002003200141276a4b0d020b200010c9808080000f0b41e9" - "92c08000419893c0800010ca80808000000b41a893c0800041d893c08000" - "10ca80808000000bc70103017f017e017f23808080800041106b22042480" - "8080800002400240200220036a417f6a410020026b71ad2001ad7e220542" - "2088a70d002005a7220341808080807820026b4b0d00024020030d002000" - "200236020841002102200041003602040c020b200441086a2002200310d7" - "80808000024020042802082206450d002000200636020820002001360204" - "410021020c020b2000200336020820002002360204410121020c010b2000" - "4100360204410121020b20002002360200200441106a2480808080000b88" - "0303017f097e017f23808080800041306b22022480808080002002420042" - "002001290330220342abd5feffffffbfffb97f56ad7d2204200129033822" - "057d220642ffffcf8aebffffd51e7c220720052003842001290340220884" - "20012903482209842001290350220a842001290358220b8450220c1b3703" - "082002420042abd5feffffffbfffb97f20037d200c1b3703002002420020" - "042004200554ad7d2007200654ad7c423f87220320087d220442a4ecc3b5" - "8fd4b498e7007c2205200c1b3703102002420020032003200854ad7d2005" - "200454ad7c423f87220320097d220442bfa5949ccff0d2bbe4007c220520" - "0c1b3703182002420020032003200954ad7d2005200454ad7c423f872203" - "200a7d220442d7d9ae9ae4f6e98dcb007c2205200c1b3703202002420020" - "032003200a54ad7d2005200454ad7c423f87200b7d429acdffcba3bdc480" - "1a7c200c1b370328200041306a200241e086c0800020012d0060220c1090" - "80808000200020014130108681808000200c3a0060200241306a24808080" - "80000b9e0101027e20002002290328200129032822048542002003ad42ff" - "01837d220583200485370328200020022903202001290320220485200583" - "200485370320200020022903182001290318220485200583200485370318" - "200020022903102001290310220485200583200485370310200020022903" - "082001290308220485200583200485370308200020022903002001290300" - "2204852005832004853703000bec0201057f23808080800041c0006b2202" - "248080808000410121030240200128021c2204418082c080004111200128" - "0220220528020c220611808080800080808080000d000240024020012d00" - "144104710d0041012103200441fa8ec08000410120061180808080008080" - "8080000d02200141e091c080004102109280808000450d010c020b200441" - "fb8ec080004102200611808080800080808080000d014101210320024101" - "3a0017200241186a41086a200141086a290200370300200241186a41106a" - "200141106a290200370300200241186a41186a200141186a280200360200" - "2002200536020c20022004360208200241dc8ec080003602382002200129" - "02003703182002200241176a3602102002200241086a360234200241186a" - "41e091c0800041021092808080000d01200241086a41f88ec08000410210" - "93808080000d010b200441ec8cc080004101200611808080800080808080" - "0021030b200241c0006a24808080800020030bbf0b010b7f024002400240" - "200028020022032000280208220472450d0002402004410171450d002001" - "20026a210502400240200028020c22060d0041002107200121080c010b41" - "00210741002109200121080340200822042005460d020240024020042c00" - "002208417f4c0d00200441016a21080c010b0240200841604f0d00200441" - "026a21080c010b0240200841704f0d00200441036a21080c010b20044104" - "6a21080b200820046b20076a21072006200941016a2209470d000b0b2008" - "2005460d00024020082c00002204417f4a0d0020044160491a0b02400240" - "2007450d00024020072002490d0020072002460d01410021040c020b2001" - "20076a2c000041404e0d00410021040c010b200121040b2007200220041b" - "21022004200120041b21010b024020030d00200028021c20012002200028" - "022028020c11808080800080808080000f0b2000280204210a0240200241" - "10490d0020022001200141036a417c7122076b22096a220b410371210341" - "00210641002104024020012007460d004100210402402009417c4b0d0041" - "0021044100210503402004200120056a22082c000041bf7f4a6a20084101" - "6a2c000041bf7f4a6a200841026a2c000041bf7f4a6a200841036a2c0000" - "41bf7f4a6a2104200541046a22050d000b0b200121080340200420082c00" - "0041bf7f4a6a2104200841016a2108200941016a22090d000b0b02402003" - "450d002007200b417c716a22082c000041bf7f4a210620034101460d0020" - "0620082c000141bf7f4a6a210620034102460d00200620082c000241bf7f" - "4a6a21060b200b4102762105200620046a21060340200721032005450d04" - "200541c001200541c001491b220b410371210c200b410274210d41002108" - "024020054104490d002003200d41f007716a210941002108200321040340" - "200428020c2207417f734107762007410676724181828408712004280208" - "2207417f7341077620074106767241818284087120042802042207417f73" - "41077620074106767241818284087120042802002207417f734107762007" - "4106767241818284087120086a6a6a6a2108200441106a22042009470d00" - "0b0b2005200b6b21052003200d6a2107200841087641ff81fc0771200841" - "ff81fc07716a418180046c41107620066a2106200c450d000b2003200b41" - "fc01714102746a22082802002204417f7341077620044106767241818284" - "08712104200c4101460d0220082802042207417f73410776200741067672" - "41818284087120046a2104200c4102460d0220082802082208417f734107" - "7620084106767241818284087120046a21040c020b024020020d00410021" - "060c030b2002410371210802400240200241044f0d004100210641002109" - "0c010b41002106200121042002410c71220921070340200620042c000041" - "bf7f4a6a200441016a2c000041bf7f4a6a200441026a2c000041bf7f4a6a" - "200441036a2c000041bf7f4a6a2106200441046a21042007417c6a22070d" - "000b0b2008450d02200120096a21040340200620042c000041bf7f4a6a21" - "06200441016a21042008417f6a22080d000c030b0b200028021c20012002" - "200028022028020c11808080800080808080000f0b200441087641ff811c" - "71200441ff81fc07716a418180046c41107620066a21060b02400240200a" - "20064d0d00200a20066b2105024002400240410020002d00182204200441" - "03461b22040e03020001020b20052104410021050c010b20054101762104" - "200541016a41017621050b200441016a2104200028021021092000280220" - "2108200028021c210703402004417f6a2204450d02200720092008280210" - "1181808080008080808000450d000b41010f0b200028021c200120022000" - "28022028020c11808080800080808080000f0b0240200720012002200828" - "020c1180808080008080808000450d0041010f0b41002104034002402005" - "2004470d0020052005490f0b200441016a21042007200920082802101181" - "808080008080808000450d000b2004417f6a2005490bdf04010c7f200141" - "7f6a21032000280204210420002802002105200028020821064100210741" - "002108410021094100210a02400340200a4101710d010240024020092002" - "4b0d000340200120096a210a0240024002400240200220096b220b41074b" - "0d0020022009470d01200221090c050b02400240200a41036a417c71220c" - "200a6b220d450d00410021000340200a20006a2d0000410a460d05200d20" - "0041016a2200470d000b200d200b41786a220e4d0d010c030b200b41786a" - "210e0b03404180828408200c2802002200418a94a8d000736b2000724180" - "828408200c41046a2802002200418a94a8d000736b200072714180818284" - "7871418081828478470d02200c41086a210c200d41086a220d200e4d0d00" - "0c020b0b410021000340200a20006a2d0000410a460d02200b200041016a" - "2200470d000b200221090c030b0240200d200b470d00200221090c030b20" - "0a200d6a210c2002200d6b20096b210b4100210002400340200c20006a2d" - "0000410a460d01200b200041016a2200470d000b200221090c030b200020" - "0d6a21000b200020096a220c41016a21090240200c20024f0d00200a2000" - "6a2d0000410a470d004100210a2009210d200921000c030b200920024d0d" - "000b0b20082002460d024101210a2008210d200221000b0240024020062d" - "0000450d00200541f48ec080004104200428020c11808080800080808080" - "000d010b200020086b210b4100210c024020002008460d00200320006a2d" - "0000410a46210c0b200120086a21002006200c3a0000200d210820052000" - "200b200428020c1180808080008080808000450d010b0b410121070b2007" - "0ba80101017f23808080800041306b220424808080800020042003360208" - "20042002360204200420012d00c80122033a000f024020034101460d0020" - "04420137021c200441013602142004419482c08000360210200441818080" - "800036022c2004200441286a3602182004200441046a3602282004410f6a" - "41c886c08000200441106a419c82c08000109680808000000b2000200141" - "c8011086818080001a200441306a2480808080000b140020012000280200" - "20002802041092808080000b4401017f23808080800041106b2204248080" - "8080002004200136020c20042000360208200441086a41b886c080002004" - "410c6a41b886c080002002200310d380808000000ba70101017f23808080" - "800041306b22042480808080002004200336020820042002360204200420" - "012d006822033a000f024020034101460d002004420137021c2004410136" - "02142004419482c08000360210200441818080800036022c200420044128" - "6a3602182004200441046a3602282004410f6a41c886c08000200441106a" - "419c82c08000109680808000000b2000200141e8001086818080001a2004" - "41306a2480808080000b45000240024020042003490d0020022004490d01" - "2000200420036b3602042000200120036a3602000f0b2003200420051099" - "80808000000b200420022005109a80808000000b0f0020002001200210fc" - "80808000000b0f0020002001200210f580808000000b4001017f23808080" - "800041106b2201248080808000200141086a200041014101419883c08000" - "108a80808000200128020c2100200141106a24808080800020000b9a0101" - "017f23808080800041b0016b2202248080808000200241086a2001280204" - "20012802084100413041a883c080001098808080000240200228020c4130" - "460d00200241106a41b883c08000109d80808000000b20024180016a2002" - "28020841301089818080001a200241106a20024180016a109e8080800020" - "00200241106a41c883c080004118109780808000200241b0016a24808080" - "80000b970101017f23808080800041c0006b22022480808080002002412b" - "36020c200241f880c08000360208200241e880c080003602142002200036" - "02102002410236021c200241cc8ec0800036021820024202370224200241" - "8280808000ad422086200241106aad843703382002418380808000ad4220" - "86200241086aad843703302002200241306a360220200241186a200110a4" - "80808000000ba50801077f23808080800041c0086b220224808080800020" - "012d0000220341077610a3808080002104200341067641017110a3808080" - "002105200341057641017110a3808080002106200241a0066a2001413010" - "86818080001a200220022d00a006411f713a00a006200241e8006a200241" - "a0066a10dc80808000200241b0076a410041301085818080001a200241c0" - "026a200241b0076a200241e8006a20022d00980122071090808080002002" - "4190056a10a8808080002002200520047110a380808000200610d2808080" - "007110a380808000200241c0026a10a9808080007110a38080800022013a" - "00f805200110d2808080002108200241a0066a200241c0026a10bd808080" - "0020024180046a200241a0066a200241c0026a10a780808000200241e007" - "6a20024180046a418089c0800010b98080800020024180046a200241e007" - "6a41c087c0800010df80808000200241a0066a20024180046a10bd808080" - "00200241a0066a200241e0076a10db808080002103200241f0026a200241" - "80046a41301086818080001a200220033a00a00320024100413010858180" - "800022024190086a2002200241f0026a2003109080808000200241a0066a" - "20024190086a10b28080800020024180046a41306a20024190086a200241" - "a0066a200620024190086a10de808080007310a380808000109080808000" - "20024180046a200241c0026a41301086818080001a20032004200510d280" - "8080007110a3808080007110a3808080002103200241a0066a2002418004" - "6a41e0001086818080001a200220033a008807200220053a008007200241" - "d0016a20024190056a200241a0066a200810aa8080800020022007200120" - "03200173410020086b71737110a3808080003a00b802200241e8006a10a8" - "808080002002200241e8006a200241d0016a20022d00b802220310aa8080" - "8000200241a0066a200210a58080800020024190056a200241a0066a10e4" - "8080800020024180046a20024190056a10e480808000200241f0026a2002" - "4180046a10e58080800020024190056a200241e8001086818080001a2002" - "4190056a41b089c0800010dd80808000200241a0066a20024190056a10a5" - "80808000200241b0076a200241f0026a200241a0066a41e0006a220510a7" - "80808000200241e0076a200241a0066a200241f0026a41e0006a220110a7" - "8080800020024190086a200241f0026a41306a200510a780808000200241" - "80046a200241a0066a41306a200110a7808080002003200110a980808000" - "2201200510a98080800022057110a380808000200110d280808000200510" - "d2808080007110a380808000200241b0076a200241e0076a10db80808000" - "7110a38080800020024190086a20024180046a10db808080007110a38080" - "80007210a3808080007110a38080800021052000200241e8001086818080" - "0020053a0068200241c0086a2480808080000b970101017f238080808000" - "41c0026b2203248080808000200341086a20012002410041e00041e083c0" - "80001098808080000240200328020c41e000460d00200341106a41f083c0" - "8000109d80808000000b200341e0016a200328020841e000108981808000" - "1a200341106a200341e0016a10a0808080002000200341106a41c883c080" - "004118109480808000200341c0026a2480808080000bff1d02137f017e23" - "808080800041a0276b220224808080800020012d0000220341077610a380" - "8080002104200341067641017110a3808080002105200341057641017110" - "a380808000210620024180106a200141301086818080001a200220022d00" - "8010411f713a008010200241a0216a20024180106a10dc80808000200241" - "80226a200141306a10dc80808000200241e01f6a41004130108581808000" - "1a200241801f6a200241e01f6a200241a0216a20022d00d0212207109080" - "80800020022d00b0222101200241c0206a410041301085818080001a2002" - "41e0226a200241c0206a20024180226a2001109080808000200241e0226a" - "41306a200241801f6a41301086818080001a200241e00d6a10e780808000" - "2002200520047110a380808000200610d2808080007110a3808080002002" - "41e0226a10e0808080007110a38080800022033a00a80f200310d2808080" - "00210820024180106a200241e0226a10ba80808000200241c00b6a200241" - "80106a200241e0226a10b380808000200241c0236a200241c00b6a41e089" - "c0800010bc80808000200241c0236a10e08080800021032002410041e000" - "108581808000220220033a0060200310d2808080002109200241a0246a20" - "0241c0236a41a088c0800010e38080800020024180106a200241a0246a10" - "ba8080800020024180256a20024180106a200241c0236a10b38080800020" - "0241e0256a200241a0246a200241c0236a10b38080800020024180106a20" - "0241e0256a41306a10b28080800020024180106a41306a200241e0256a41" - "30108681808000210a200241d0016a41306a410041301085818080001a20" - "0241d0016a41e086c0800041301086818080001a200241c0266a200241d0" - "016a10e28080800020024180256a200241c0266a10c28080800021032002" - "41c00b6a20024180106a41e0001086818080001a200220033a00a00c2003" - "10d280808000210b200a41004130108581808000210320024180106a41e0" - "86c0800041301086818080001a20024180076a20024180256a2002418010" - "6a10bc8080800020024198036a20024180076a41d088c0800010e3808080" - "0020024180106a20024198036a200241e0256a10b3808080002002410110" - "a3808080003a00e01020024180076a200241c00b6a20024180106a200b10" - "da80808000200241c00b6a410041e0001085818080001a20024198036a20" - "0241c00b6a20024180076a20022d00e007220a10b0808080002002418010" - "6a20024198036a10ba80808000200a20024180106a200241c0236a10c280" - "8080007110a380808000210a20024180106a20024198036a41e000108681" - "8080001a2002200a3a00e01020024180076a200220024180106a200910da" - "808080002002410041e00010858180800022024198036a20022002418007" - "6a20022d00e007220910b08080800020024180106a20024198036a10e280" - "808000200241c00b6a41e0006a220b20024198036a20024180106a200620" - "024198036a41306a220a10de80808000200a10a98080800020024198036a" - "10de808080007110a3808080007210a3808080007310a38080800010b080" - "808000200241c00b6a200241e0226a41e0001086818080001a2009200420" - "0510d2808080007110a3808080007110a380808000210420024180106a20" - "0241c00b6a41c0011086818080001a200220043a00c811200220053a00c0" - "11200241c00b6a200241e00d6a20024180106a200810d980808000200120" - "0420022d00a80f220573410020086b712005737110a38080800021012002" - "200241c00b6a41c801108681808000220241cc016a200241c00b6a41cc01" - "6a280000360000200220022800890d3600c9012002200120077110a38080" - "8000220c3a00c80120024198036a10e780808000200241d0016a20024198" - "036a2002200c10d980808000200241e0046a200241d0016a10e880808000" - "200241c00b6a410041301085818080001a200242ba8a92abf1a7dbf21437" - "03980c200242e8a0ee96fe89bcf2143703900c200242a4a0a0f4c7f1c686" - "a27f3703880c200242acfced84e38c82c4d0003703800c200242d5cb9694" - "b3cac8f92a3703f80b200242c38bd5b3c8bcf286897f3703f00b200242d2" - "8ff6dfdbdddf950e3703b80e2002429df8bab6e9ac96d12d3703b00e2002" - "42a7a9d3d3fd9088e5513703a80e200242f1fdbada86bba3842f3703a00e" - "200242fcfcc9d492d8f78b5c3703980e200242da9f8cd5a5f4e9e7fb0037" - "03900e200242c8bd89ecc7dfe4ea0b3703880e200242b9e1f3e3fac9d3bc" - "1d3703800e20024298fcc0c8d1dfcad6927f3703f80d200242b2ee88db88" - "999194383703f00d200242838386b6d8a788cac2003703e80d200242d1b5" - "f2aada8bd6973e3703e00d2003200241e0046a41306a10b2808080002002" - "4180106a200241e0046a41301086818080001a20024180076a2002418010" - "6a200241c00b6a10b3808080002003200241f0056a10b280808000200241" - "80106a200241e0046a41e0006a220141301086818080001a20024180076a" - "41e0006a220d20024180106a200241e00d6a10b3808080002003200241d0" - "066a10b28080800020024180106a200241e0046a41c0016a220541301086" - "818080001a20024180076a41c0016a20024180106a41e000108681808000" - "210e2003410041301085818080001a20024180106a41e086c08000413010" - "86818080001a200241a0096a410041e0001085818080001a200241a0096a" - "41e0006a20024180106a41e0001086818080002109200241a0096a41c001" - "6a410041e000108581808000210a200241c0266a41306a210f2002418010" - "6a41e0006a2110200241e00d6a41e0006a211120024180106a41c0016a21" - "12200241c00b6a41c0016a2113200241e00d6a41c0016a21144280808280" - "8080a080e9002115024003402015500d01200241e0196a200110ba808080" - "00200241c01a6a200241e0196a200241e0196a10bc80808000200241a01b" - "6a200241c01a6a200241c01a6a10bc80808000200241801c6a200241a01b" - "6a200241a01b6a10bc80808000200241e01c6a2001200510b38080800020" - "0241c01d6a200510ba80808000200241a01e6a200241c01d6a41c08ac080" - "0010b380808000200241801f6a200241a01e6a200241801c6a10b3808080" - "00200241e01f6a200241e0196a200241a01e6a10bc80808000200241c020" - "6a200241e01c6a200241801c6a10b380808000200241a0216a200241a01e" - "6a200241a01e6a10bc8080800020024180226a200241a0216a200241a01e" - "6a10bc80808000200241e0226a200241e0196a20024180226a10bb808080" - "00200241c0236a200241e0226a200241e01f6a10b380808000200241a024" - "6a200241801f6a200241c0236a10bc8080800020024180256a200241e004" - "6a200110b380808000200241e0256a200241e0226a20024180256a10b380" - "808000200241e00d6a200241e0256a200241e0256a10bc80808000201120" - "0241a0246a41e00010868180800021082014200241c0206a41e000108681" - "8080002107200f410041301085818080001a200241c0266a41e086c08000" - "41301086818080001a20024180106a410041e0001085818080001a201020" - "0241c0266a41e00010868180800021042012410041e00010858180800021" - "06200241c00b6a200241e00d6a20024180106a200510e080808000220310" - "b080808000200b20082004200310b080808000201320072006200310b080" - "808000200241e0046a200241c00b6a41a0021086818080001a0240201542" - "0183500d00200241a0126a200241a0096a200241e0046a10b38080800020" - "024180136a2009200110b380808000200241e0136a200a200510b3808080" - "00200241c0146a200241a0096a200910bc80808000200241a0156a200241" - "e0046a200110bc8080800020024180166a200241c0146a200241a0156a10" - "b380808000200241e0166a200241a0126a20024180136a10bc8080800020" - "0241c0176a20024180166a200241e0166a10bb80808000200241a0186a20" - "09200a10bc8080800020024180196a2001200510bc80808000200241e019" - "6a200241a0186a20024180196a10b380808000200241c01a6a2002418013" - "6a200241e0136a10bc80808000200241a01b6a200241e0196a200241c01a" - "6a10bb80808000200241801c6a200241a0096a200a10bc80808000200241" - "e01c6a200241e0046a200510bc80808000200241c01d6a200241801c6a20" - "0241e01c6a10b380808000200241a01e6a200241a0126a200241e0136a10" - "bc80808000200241801f6a200241c01d6a200241a01e6a10bb8080800020" - "0241e01f6a200241a0126a200241a0126a10bc80808000200241c0206a20" - "0241e01f6a200241a0126a10bc80808000200241a0216a200241e0136a41" - "c08ac0800010b38080800020024180226a20024180136a200241a0216a10" - "bc80808000200241e0226a20024180136a200241a0216a10bb8080800020" - "0241c0236a200241801f6a41c08ac0800010b380808000200241a0246a20" - "0241a01b6a200241c0236a10b38080800020024180256a200241c0176a20" - "0241e0226a10b38080800020024180106a20024180256a200241a0246a10" - "bb80808000200241e0256a200241c0236a200241c0206a10b38080800020" - "0241c0266a200241e0226a20024180226a10b3808080002004200241c026" - "6a200241e0256a10bc80808000200241c00b6a200241c0206a200241c017" - "6a10b380808000200241e00d6a20024180226a200241a01b6a10b3808080" - "002006200241e00d6a200241c00b6a10bc80808000200241a0096a200241" - "80106a41a0021086818080001a0b201542018821150c000b0b2002418010" - "6a41e0006a200910e28080800020024180106a41c0016a200a41e0001086" - "818080001a20024180106a200241a0096a41e0001086818080001a200241" - "a0096a20024180106a41a0021086818080001a200241c0266a2002418007" - "6a200241a0096a41c0016a220110b380808000200241c00b6a200241a009" - "6a200e10b380808000200241e00d6a200d200110b3808080002002418010" - "6a200241a0096a41e0006a200e10b380808000200e10e080808000220520" - "0110e08080800022017110a380808000200510d280808000200110d28080" - "80007110a380808000200241c0266a200241c00b6a10c2808080007110a3" - "80808000200241e00d6a20024180106a10c2808080007110a38080800072" - "10a380808000200c7110a38080800021012000200241d0016a41c8011086" - "8180800020013a00c801200241a0276a2480808080000ba0d50103097f25" - "7e347f23808080800041e0ec006b2200248080808000200042d2b4bbf88c" - "a0d28d053700f40c2000428dcfdee5fd81c2bb0c3700ec0c200042afbed3" - "efd9fc81acea003700e40c20004283c4c699c3e0e5bf313700dc0c200042" - "869e99a9baa4ebe5e5003700d40c2000428dbfe3e0ae86d0a7b27f3700cc" - "0c200042908484d9e8fa99f80e3700c40c2000428bdfe7adc3a8cae04f37" - "00bc0c200042d687f295e888f880cd003700b40c20004281ddcf86b5f2d0" - "cf633700ac0c200042aef2a7aaae91d5accb003700a40c200042eb8fbebf" - "aee5caf4967f37009c0c200042b9b3d69fbf86ace8bb7f3700940c200042" - "d4fa86d5a0e3d296a87f37008c0c200042c5eddc9291a0c9e3a27f370084" - "0c2000428594fecef0de91d0643700fc0b20004289ae81b0d7a1feb5d300" - "3700f40b200042d4f18391eaffb8ed2e3700ec0b2000428cc8d9c6afddd3" - "d2ca003700e40b200042bca4908cdbc4caa54e3700dc0b200042b9cfe7bf" - "d99fbcbd563700d40b200042a4f788c3999fcac2c6003700cc0b200042b7" - "93c2cbbcbec3ee8e7f3700c40b200042a188aeeaaf8e90ba9b7f3700bc0b" - "200042c1fb969fd3cb97a0f5003700b40b200042ff9ce790fc9fe0fa6837" - "00ac0b200042b2dcb096dfcda7b9293700a40b200042a9e3f3c0c2c5cf85" - "2a37009c0b200042ad95c395bdd085ec393700940b200042c1f0c9e1f6d5" - "88e04537008c0b200042cfe1a7fed79ab1b2da003700840b200042d38490" - "85a5b6dff17d3700fc0a200042daf4a7a781f39dc7f8003700f40a200042" - "b88d9b949dd3aa86713700ec0a20004286b08ace96d5b8e0493700e40a20" - "0042e291f4f2d7e689e0443700dc0a200042c188fdead38de5d7f1003700" - "d40a200042fec2c2f2fb858b84283700cc0a200042fe8ebfddfaafafefec" - "003700c40a20004291f5b996b996cbc8bf7f3700bc0a200042b497cfc0d9" - "e3f284043700b40a2000428c9691f2e7bca4ec2d3700ac0a20004287e0c3" - "c29eccb3d21c3700a40a200042c8bbf68fceb0ad9eda0037009c0a200042" - "85c5e3e89284a997fd003700940a20004297bd8ec1effea3935437008c0a" - "200042eea8f8adc2cdbed9bb7f3700840a200042f5a3a4828bfd9ac1ac7f" - "3700fc09200042a087bbac98e0e282827f3700f4092000429a8683e6d8cc" - "ddd7113700ec09200042f0e1a982ee8890e33b3700e40920004286f6f2ba" - "80bf8bc3d5003700dc0920004297cfaad29bac9ec8243700d409200042c9" - "d3b292ffc082e01e3700cc09200042a9a3ffacc691beef6a3700c4092000" - "42a2d1f7c2ff94dce2543700bc09200042c78cfef2b8eabef8713700b409" - "20004286edaddda1fbf6baa37f3700ac09200042fdddbb9dedd1e9ef3337" - "00a409200042c6b2d8f2a9dae59d9f7f37009c09200042b59fb2d0b3e4cf" - "e32337009409200042c5c8c2fe9f869487c00037008c09200042ee91eb8f" - "c9a9c69cd1003700840920004283afa5ac9ded86b7253700fc08200042be" - "b9e4bccb88c99f3c3700f408200042c4d7d7c08b8db9e7f5003700ec0820" - "0042bf948bc7d7b1b0fcc1003700e4082000429a9ed5eea2d281c0e70037" - "00dc08200042acf185b19c87b3c3dd003700d40820004294bcf3c5dec192" - "ebb67f3700cc082000429db89ddb8fc9add13b3700c408200042e99baac8" - "a8faa582817f3700bc08200042daccdaad88c1f9b35b3700b408200042b5" - "d48be3dada8f8b223700ac08200042bdfdafd8a0e7aee4d8003700a40820" - "0042b9a7fddeeba08a8a3e37009c08200042e893cdd1ffdb94af08370094" - "08200042b58bef84d587bf842937008c08200042f4d8c597c3f6bd9f5a37" - "008408200042b3ccedc1b3d5cb987f3700fc07200042e0a38ecbbad9b6b8" - "b97f3700f407200042918cc8bfb089f7ab2f3700ec07200042dca8f8e4f3" - "82aee38f7f3700e407200042a3bfc29bc5d8edebca003700dc072000428e" - "81e4d981f589f1283700d40720004296f48083b9fcdab5b67f3700cc0720" - "0042cf938386a9d3d78a023700c4072000429687f1eff8ebacafef003700" - "bc072000429ef0afffc392fc88163700b407200042dbcda6cadfc8f38797" - "7f3700ac07200042cec2c1f9b5a7ec8e773700a407200042a5c192ecc6ad" - "99ef8f7f37009c07200042fd908df7cd8eeaab1837009407200042b18585" - "d2b981fac47637008c072000428af4e7cfa4fac8c4d70037008407200042" - "d6e7eeadc1c4f395a07f3700fc06200042a394d5b790978ebcec003700f4" - "0620004284f5dcaa92b5c09f663700ec06200042dcbedda48ae58eebe000" - "3700e406200042ac8bc7ea9baff0cf1b3700dc06200041940d6a42003700" - "002000418c0d6a4200370000200041840d6a4200370000200042003700fc" - "0c2000419c0d6a200041dc066a4130108980808000200041a80d6a200041" - "9c0d6a109c80808000200041940e6a200041dc066a41306a413010898080" - "8000200041a00e6a200041940e6a109c808080002000418c0f6a200041dc" - "066a41e0006a41e000108980808000200041980f6a20002802900f200028" - "02940f109f80808000200041e4106a2000419c086a41e000108980808000" - "200041f0106a20002802e81020002802ec10109f80808000200041bc126a" - "200041fc086a4130108980808000200041c8126a200041bc126a109c8080" - "8000200041b4136a200041ac096a41e000108980808000200041c0136a20" - "002802b81320002802bc13109f8080800020004188156a2000418c0a6a41" - "900110898080800020004194156a41086a22014100360200200042808080" - "80800137029415200041d0066a200028028c152202200028029015220341" - "004130418084c08000109880808000200041a0156a20002802d006200028" - "02d406108980808000200041b0156a200041a0156a109c80808000200041" - "94156a200041b0156a419084c08000108780808000200041c8066a200220" - "03413041e00041a084c08000109880808000200041b0156a20002802c806" - "20002802cc0610898080800020002802a01520002802a415108480808000" - "200041a0156a41086a2204200041b0156a41086a22052802003602002000" - "20002902b0153703a015200041b0156a200041a0156a109c808080002000" - "4194156a200041b0156a41b084c08000108780808000200041c0066a2002" - "200341e00041900141c084c08000109880808000200041b0156a20002802" - "c00620002802c40610898080800020002802a01520002802a41510848080" - "800020042005280200360200200020002902b0153703a015200041b0156a" - "200041a0156a109c8080800020004194156a200041b0156a41d084c08000" - "108780808000200041c81c6a200128020036020020002000290294153703" - "c01c200041b0156a200041a80d6a41e8001086818080001a200041b0156a" - "41e8006a200041a00e6a41e8001086818080001a20004180176a20004198" - "0f6a41c8011086818080002106200041c8186a200041f0106a41c8011086" - "818080002107200041901a6a200041c8126a41e8001086818080001a2000" - "41f81a6a200041c0136a41c8011086818080002108200041f8326a200041" - "9c0b6a109e80808000200041d01c6a200041f8326a41e084c08000411710" - "9780808000200041f8326a200041cc0b6a10a080808000200041b81d6a20" - "0041f8326a41f784c080004117109480808000200041f8326a200041ac0c" - "6a109e80808000200041801f6a200041f8326a418e85c080004117109780" - "808000200041e81f6a200041d01c6a41e8001086818080001a200041e81f" - "6a41e8006a200041b81d6a41c8011086818080001a20004198226a200041" - "801f6a41e8001086818080001a200041a0e8006a41c00041201080808080" - "0002400240024002400240024020002802a4684101470d00200041b8066a" - "20002802a8684108412041d880c08000108a80808000200041003602c85b" - "200020002802bc0622033602c45b200020002802b80622023602c05b2000" - "41f8326a41c0004120108080808000024020002802fc324101470d004100" - "21050240200220002802803322014f0d00200041b0066a200041c0db006a" - "410020014120108b8080800020002802b0062202418180808078470d0520" - "002802c45b210320002802c85b21050b200041dc0c6a2102200320054105" - "746a210341c000210103402001450d03200041b0046a2002290000220942" - "0042edb8ca9f8fb2facc494200108781808000200041c0046a2009420042" - "a3b8c9bcb8b9bbb62b4200108781808000200041d0046a20094200428ff3" - "d092e792c5e9054200108781808000200041e0046a200942004291fee7fa" - "99bbb6a4074200108781808000200041f0056a2002290008220a420042ed" - "b8ca9f8fb2facc49420010878180800020004180066a200a420042a3b8c9" - "bcb8b9bbb62b420010878180800020004190066a200a4200428ff3d092e7" - "92c5e9054200108781808000200041a0066a200a42004291fee7fa99bbb6" - "a4074200108781808000200041b0056a2002290010220b420042edb8ca9f" - "8fb2facc494200108781808000200041c0056a200b420042a3b8c9bcb8b9" - "bbb62b4200108781808000200041d0056a200b4200428ff3d092e792c5e9" - "054200108781808000200041e0056a200b42004291fee7fa99bbb6a40742" - "00108781808000200041f0046a2002290018220c420042edb8ca9f8fb2fa" - "cc49420010878180800020004180056a200c420042a3b8c9bcb8b9bbb62b" - "420010878180800020004190056a200c4200428ff3d092e792c5e9054200" - "108781808000200041a0056a200c42004291fee7fa99bbb6a40742001087" - "81808000200041a0046a20002903b004220d42ffffffff6f7e220e420042" - "8180808070420010878180800020004190046a200e420042feb7f9ffaf80" - "e9ded3004200108781808000200041c0036a200e42004285b087cd8081f6" - "9c334200108781808000200041f0026a200e420042c8faf5ccb2eae9f6f3" - "00420010878180800020004180046a20002903f005220f20002903c00422" - "10200041b0046a41086a2903007c22117c22122000290390047c22132000" - "41a0046a41086a290300200d20002903a004220e7c200e54ad7c7c220d42" - "ffffffff6f7e220e42004281808080704200108781808000200041f0036a" - "200e420042feb7f9ffaf80e9ded3004200108781808000200041e0036a20" - "0e42004285b087cd8081f69c334200108781808000200041d0036a200e42" - "0042c8faf5ccb2eae9f6f3004200108781808000200041b0036a20004190" - "046a41086a2903002013201254ad7c200d201354ad7c221420002903c003" - "7c2213200041c0046a41086a2903002011201054ad7c221520002903d004" - "7c22102000290380067c2211200041f0056a41086a2903002012200f54ad" - "7c7c221220002903b0057c22167c220f20002903f0037c22172000418004" - "6a41086a290300200029038004220e200d7c200e54ad7c7c220d42ffffff" - "ff6f7e220e42004281808080704200108781808000200041a0036a200e42" - "0042feb7f9ffaf80e9ded300420010878180800020004190036a200e4200" - "4285b087cd8081f69c33420010878180800020004180036a200e420042c8" - "faf5ccb2eae9f6f3004200108781808000200041e0026a200041f0036a41" - "086a2903002017200f54ad7c200d201754ad7c221820002903e0037c2217" - "200041c0036a41086a2903002013201454ad7c200f201354ad7c22192000" - "2903f0027c2213200041d0046a41086a2903002010201554ad7c221a2000" - "2903e0047c220f2000290390067c221420004180066a41086a2903002011" - "201054ad7c2012201154ad7c7c221020002903c0057c2211200041b0056a" - "41086a2903002016201254ad7c7c221220002903f0047c221b7c221c7c22" - "1520002903a0037c2216200041b0036a41086a29030020002903b003220e" - "200d7c200e54ad7c7c220d42ffffffff6f7e220e42004281808080704200" - "108781808000200041d0026a200e420042feb7f9ffaf80e9ded300420010" - "8781808000200041c0026a200e42004285b087cd8081f69c334200108781" - "808000200041b0026a200e420042c8faf5ccb2eae9f6f300420010878180" - "8000200041d0036a41086a290300211d20004180056a41086a290300211e" - "200041d0056a41086a290300211f200041a0066a41086a29030021202000" - "2903e00521212000290390052122200029038003212320004180036a4108" - "6a290300212420004190036a41086a290300212520004190056a41086a29" - "03002126200041e0056a41086a290300212720002903a005212820002903" - "b0022129200041b0026a41086a290300212a20002903c002212b200041c0" - "026a41086a290300212c200020002903d002222d200041e0046a41086a29" - "0300200f201a54ad7c221a20002903a0067c220e20004190066a41086a29" - "03002014200f54ad7c2010201454ad7c7c220f20002903d0057c22142000" - "41c0056a41086a2903002011201054ad7c2012201154ad7c7c2210200029" - "0380057c2211200041f0046a41086a290300201b201254ad7c7c22122000" - "41f0026a41086a2903002013201954ad7c201c201354ad7c7c2213200029" - "03d0037c2219200041e0036a41086a2903002017201854ad7c2015201754" - "ad7c7c22172000290390037c2218200041a0036a41086a29030020162015" - "54ad7c200d201654ad7c7c22167c2215200041e0026a41086a2903002000" - "2903e002221b200d7c201b54ad7c7c221b3703f8322000202b2023202220" - "212020200e201a54ad7c200f200e54ad7c221a7c220e201f2014200f54ad" - "7c2010201454ad7c7c220d7c220f201e2011201054ad7c2012201154ad7c" - "7c22102013201254ad7c2212201d2019201354ad7c2017201954ad7c7c22" - "137c221120252018201754ad7c2016201854ad7c7c22177c2214200041d0" - "026a41086a2903002015202d54ad7c201b201554ad7c7c22153703803320" - "0020292012201054ad2013201254ad7c221620282027200e201a54ad7c20" - "0d200e54ad7c22197c220e2026200f200d54ad7c2010200f54ad7c7c2210" - "7c221220242011201354ad7c2017201154ad7c7c22137c220d202c201420" - "1754ad7c2015201454ad7c7c22113703883320002012201654ad20132012" - "54ad7c200041a0056a41086a290300200e201954ad7c2010200e54ad7c7c" - "202a200d201354ad7c2011200d54ad7c7c37039033200041a0e8006a2000" - "41f8326a10a28080800020002903a068210e20002903a868211220002903" - "b068211320002903b868210d200942ffffffff0f7c200954ad427f7c2209" - "2009200a7c220a200954ad7c200a4282c88680d0ff96a1ac7f7c200a54ad" - "7c427f7c423f872209200b20097c2209200b54ad7c200942fbcff8b2fffe" - "89e34c7c200954ad7c427f7c423f872209200c20097c2209200c54ad7c20" - "0942b8858ab3cd9596898c7f7c200954ad7ca741016a41017110a3808080" - "0021042000411836028457200041a585c0800036028057200020043a00c0" - "52200441ff01714101470d04200341186a200d370300200341106a201337" - "0300200341086a20123703002003200e370300200341206a210320054101" - "6a210520022001412020014120491b22046a2102200120046b21010c000b" - "0b2000410036028833200041013602fc32200041d085c080003602f83220" - "00420437028033200041f8326a41d880c0800010a480808000000b200041" - "0036028833200041013602fc32200041d085c080003602f8322000420437" - "028033200041f8326a41d880c0800010a480808000000b20002802c45b21" - "2e20002802c05b212f200541016a20002802c81c470d0220004180236a20" - "002802c41c220210a580808000200241e8006a2130200041d4d2006a2131" - "200041c0d2006a41086a2132200041a0ce006a2133200041c0db006a4130" - "6a2134200041a0dc006a2135410021040340024020042005470d00200041" - "f8326a20004180236a41e0006a10a68080800041002102200041a0e8006a" - "410041301085818080001a200041c0db006a200041a0e8006a200041f832" - "6a20002d00a833109080808000200041a0e8006a20004180236a200041c0" - "db006a10a780808000200041a0e8006a41306a20004180236a41306a2000" - "41c0db006a10a7808080002000410010a3808080003a008069200041f832" - "6a10a88080800020004190246a200041a0e8006a200041f8326a200041c0" - "db006a10a98080800010aa80808000200041f8246a200041b81d6a10ab80" - "80800020004188256a200710ab8080800020004198256a200810ab808080" - "00200041a8256a200610ab80808000200041b82e6a20004190246a108f80" - "808000200041c0376a200041801f6a108f80808000200041803c6a200041" - "b0156a108f808080002000200041a8256a3602942a2000200041803c6a36" - "02902a200020004198256a36028c2a2000200041c0376a3602882a200020" - "004188256a3602842a2000200041b82e6a3602802a2000200041f8246a36" - "02fc292000200041e81f6a3602f829200042043702c4642000200041f829" - "6a3602c064200041b8256a10ac80808000200041f8326a41a0026a210520" - "0041b8256a41a0026a213620004180d7006a41c0016a213320004180d700" - "6a41e0006a2134200041c0db006a41e0036a2135200041a0e8006a41e003" - "6a2132200041c0db006a4180036a2106200041a0e8006a4180036a210720" - "0041c0db006a41a0026a2108200041a0e8006a41a0026a2131200041c0d2" - "006a41c0016a2137200041c0d2006a41e0006a2138200041c0db006a41c0" - "016a2139200041a0e8006a41c0016a213a200041c0db006a41e0006a213b" - "200041a0e8006a41e0006a213c41c000213d034002400240203d450d0020" - "02410171210342808082808080a080e900203d417f6a223d413f71ad88a7" - "21022003450d02200041f8326a200041b8256a41c0041086818080001a20" - "0041b8256a200041c0e4006a200041f8326a10ad80808000200241017145" - "0d01200041c0db006a200041b8256a41c0041086818080001a20002802c4" - "64410374210120002802c064210320002802c8642130024003402001450d" - "01200328020422042d000c20032802002d00607210a38080800021022000" - "41a0e8006a200041c0db006a200441046a280200200441086a2802002030" - "41dc8cc0800010ae80808000200328020010af80808000200041c0d2006a" - "200041a0e8006a200041c0db006a200210b0808080002038203c203b2002" - "10b0808080002037203a2039200210b08080800020004180d7006a203120" - "08200210b080808000203420072006200210b08080800020332032203520" - "0210b080808000200041f8326a200041c0d2006a41a0021086818080001a" - "200520004180d7006a41a0021086818080001a200041c0db006a200041f8" - "326a41c0041086818080001a200141786a2101200341086a21030c000b0b" - "2000203041016a3602c864200041b8256a200041c0db006a41c004108681" - "8080001a0c010b200041f8326a200041b8256a41c0041086818080001a20" - "0041b8256a200041c0e4006a200041f8326a10ad80808000200041f8326a" - "41a0026a223e203610b180808000200041f8326a200041b8256a41a00210" - "86818080001a200041b8256a200041f8326a41c0041086818080001a2000" - "41f8296a200041b8256a41c0041086818080001a200041c0d2006a41306a" - "2230200041b8256a41306a10b280808000200041c0d2006a200041b8256a" - "41301086818080001a200041c0db006a41306a2201200041b8256a419001" - "6a10b280808000200041c0db006a200041b8256a41e0006a413010868180" - "80001a200041a0e8006a41306a2203200041b8256a41f0016a10b2808080" - "00200041a0e8006a200041b8256a41c0016a41301086818080001a200041" - "f8326a410041301085818080001a200042c18e8ea3d58c88f8183703d033" - "200042d2a1c19ee8addffc033703c8332000429e97eb8de0d783db8e7f37" - "03c03320004295b7949cfdd590b8d8003703b833200042d2cbb6fee1c8c8" - "d5dd003703b033200042f1e0c7b3c8bcf2814d3703a83320004180d7006a" - "41e0006a2232200041c0db006a200041f8326a10b380808000200041f832" - "6a41306a410041301085818080002105200042ba8a92abf1a7dbf2143703" - "a033200042e8a0ee96fe89bcf21437039833200042a4a0a0f4c7f1c686a2" - "7f37039033200042acfced84e38c82c4d00037038833200042d5cb9694b3" - "cac8f92a37038033200042c38bd5b3c8bcf286897f3703f83220004180d7" - "006a41c0016a2204200041a0e8006a200041f8326a10b380808000200041" - "80d7006a200041c0d2006a41e0001086818080001a20004180ce006a4130" - "6a2202200041b8256a41d0026a10b28080800020004180ce006a200041b8" - "256a41a0026a41301086818080001a2030200041b8256a41b0036a10b280" - "808000200041c0d2006a200041b8256a4180036a41301086818080001a20" - "03200041b8256a4190046a10b280808000200041a0e8006a200041b8256a" - "41e0036a41301086818080001a200041f8326a410041301085818080001a" - "200042c18e8ea3d58c88f8183703d033200042d2a1c19ee8addffc033703" - "c8332000429e97eb8de0d783db8e7f3703c03320004295b7949cfdd590b8" - "d8003703b833200042d2cbb6fee1c8c8d5dd003703b033200042f1e0c7b3" - "c8bcf2814d3703a833200041c0db006a41e0006a2235200041c0d2006a20" - "0041f8326a10b3808080002005410041301085818080002133200042ba8a" - "92abf1a7dbf2143703a033200042e8a0ee96fe89bcf21437039833200042" - "a4a0a0f4c7f1c686a27f37039033200042acfced84e38c82c4d000370388" - "33200042d5cb9694b3cac8f92a37038033200042c38bd5b3c8bcf286897f" - "3703f832200041c0db006a41c0016a223b200041a0e8006a200041f8326a" - "10b380808000200041c0db006a20004180ce006a41e0001086818080001a" - "200042afff91c4a8fbbb87113703f86820004289bd83adbef9849c2e3703" - "f068200042d0d1a385a497e78d413703e86820004294a7e7acc2baa5a44f" - "3703e068200042ecf9a5e2bf8da8a1d8003703d868200042c6ac97e7d4d5" - "9afbb27f3703d068200042ebcded87fbc188f9083703c868200042cd9cab" - "eda5fde4f11c3703c068200042eed3f096abd9ebada37f3703b868200042" - "8fc5dc88cd998ff4977f3703b0682000429386aaa8abf2d7b4463703a868" - "200042e5a8e798abaaa584073703a068200041a0e8006a41e0006a410041" - "c0011085818080002108203e200041c0db006a200041a0e8006a10b48080" - "8000200041f8326a20004180d7006a41a0021086818080001a2002203310" - "b28080800020004180ce006a200041f8326a41301086818080001a200041" - "80d7006a41306a2207200041f8326a4190016a10b28080800020004180d7" - "006a200041f8326a41e0006a223f41301086818080001a2001200041f832" - "6a41f0016a10b280808000200041c0db006a200041f8326a41c0016a2240" - "41301086818080001a200041a0e8006a410041301085818080001a200042" - "c18e8ea3d58c88f8183703f868200042d2a1c19ee8addffc033703f06820" - "00429e97eb8de0d783db8e7f3703e86820004295b7949cfdd590b8d80037" - "03e068200042d2cbb6fee1c8c8d5dd003703d868200042f1e0c7b3c8bcf2" - "814d3703d068200041c0d2006a41e0006a223820004180d7006a200041a0" - "e8006a10b3808080002003410041301085818080002103200042ba8a92ab" - "f1a7dbf2143703c868200042e8a0ee96fe89bcf2143703c068200042a4a0" - "a0f4c7f1c686a27f3703b868200042acfced84e38c82c4d0003703b06820" - "0042d5cb9694b3cac8f92a3703a868200042c38bd5b3c8bcf286897f3703" - "a068200041c0d2006a41c0016a2234200041c0db006a200041a0e8006a10" - "b380808000200041c0d2006a20004180ce006a41e0001086818080001a20" - "0041c0c9006a41306a2205200041f8326a41d0026a10b280808000200041" - "c0c9006a203e41301086818080001a2002200041f8326a41b0036a10b280" - "80800020004180ce006a200041f8326a4180036a22414130108681808000" - "1a2001200041f8326a4190046a10b280808000200041c0db006a200041f8" - "326a41e0036a224241301086818080001a200041a0e8006a410041301085" - "818080001a200042c18e8ea3d58c88f8183703f868200042d2a1c19ee8ad" - "dffc033703f0682000429e97eb8de0d783db8e7f3703e86820004295b794" - "9cfdd590b8d8003703e068200042d2cbb6fee1c8c8d5dd003703d8682000" - "42f1e0c7b3c8bcf2814d3703d068203220004180ce006a200041a0e8006a" - "10b3808080002003410041301085818080002143200042ba8a92abf1a7db" - "f2143703c868200042e8a0ee96fe89bcf2143703c068200042a4a0a0f4c7" - "f1c686a27f3703b868200042acfced84e38c82c4d0003703b068200042d5" - "cb9694b3cac8f92a3703a868200042c38bd5b3c8bcf286897f3703a06820" - "04200041c0db006a200041a0e8006a10b38080800020004180d7006a2000" - "41c0c9006a41e0001086818080001a200042afff91c4a8fbbb8711370398" - "5c20004289bd83adbef9849c2e3703905c200042d0d1a385a497e78d4137" - "03885c20004294a7e7acc2baa5a44f3703805c200042ecf9a5e2bf8da8a1" - "d8003703f85b200042c6ac97e7d4d59afbb27f3703f05b200042ebcded87" - "fbc188f9083703e85b200042cd9cabeda5fde4f11c3703e05b200042eed3" - "f096abd9ebada37f3703d85b2000428fc5dc88cd998ff4977f3703d05b20" - "00429386aaa8abf2d7b4463703c85b200042e5a8e798abaaa584073703c0" - "5b2035410041c001108581808000213c200041a0e8006a41a0026a220320" - "004180d7006a200041c0db006a10b480808000200041a0e8006a200041c0" - "d2006a41a0021086818080001a2005204310b280808000200041c0c9006a" - "200041a0e8006a41301086818080001a2030200041a0e8006a4190016a22" - "4410b280808000200041c0d2006a200841301086818080001a2007200041" - "a0e8006a41f0016a224510b28080800020004180d7006a200041a0e8006a" - "41c0016a223a41301086818080001a200041c0db006a4100413010858180" - "80001a200042c18e8ea3d58c88f8183703985c200042d2a1c19ee8addffc" - "033703905c2000429e97eb8de0d783db8e7f3703885c20004295b7949cfd" - "d590b8d8003703805c200042d2cbb6fee1c8c8d5dd003703f85b200042f1" - "e0c7b3c8bcf2814d3703f05b20004180ce006a41e0006a2236200041c0d2" - "006a200041c0db006a10b380808000200141004130108581808000210120" - "0042ba8a92abf1a7dbf2143703e85b200042e8a0ee96fe89bcf2143703e0" - "5b200042a4a0a0f4c7f1c686a27f3703d85b200042acfced84e38c82c4d0" - "003703d05b200042d5cb9694b3cac8f92a3703c85b200042c38bd5b3c8bc" - "f286897f3703c05b20004180ce006a41c0016a224620004180d7006a2000" - "41c0db006a10b38080800020004180ce006a200041c0c9006a41e0001086" - "818080001a20004180c5006a41306a2231200041a0e8006a41d0026a2247" - "10b28080800020004180c5006a200341301086818080001a2005200041a0" - "e8006a41b0036a224810b280808000200041c0c9006a200041a0e8006a41" - "80036a224941301086818080001a2007200041a0e8006a4190046a224a10" - "b28080800020004180d7006a200041a0e8006a41e0036a224b4130108681" - "8080001a200041c0db006a410041301085818080001a200042c18e8ea3d5" - "8c88f8183703985c200042d2a1c19ee8addffc033703905c2000429e97eb" - "8de0d783db8e7f3703885c20004295b7949cfdd590b8d8003703805c2000" - "42d2cbb6fee1c8c8d5dd003703f85b200042f1e0c7b3c8bcf2814d3703f0" - "5b2038200041c0c9006a200041c0db006a10b38080800020014100413010" - "85818080002135200042ba8a92abf1a7dbf2143703e85b200042e8a0ee96" - "fe89bcf2143703e05b200042a4a0a0f4c7f1c686a27f3703d85b200042ac" - "fced84e38c82c4d0003703d05b200042d5cb9694b3cac8f92a3703c85b20" - "0042c38bd5b3c8bcf286897f3703c05b203420004180d7006a200041c0db" - "006a10b380808000200041c0d2006a20004180c5006a41e0001086818080" - "001a200042afff91c4a8fbbb87113703d85720004289bd83adbef9849c2e" - "3703d057200042d0d1a385a497e78d413703c85720004294a7e7acc2baa5" - "a44f3703c057200042ecf9a5e2bf8da8a1d8003703b857200042c6ac97e7" - "d4d59afbb27f3703b057200042ebcded87fbc188f9083703a857200042cd" - "9cabeda5fde4f11c3703a057200042eed3f096abd9ebada37f3703985720" - "00428fc5dc88cd998ff4977f370390572000429386aaa8abf2d7b4463703" - "8857200042e5a8e798abaaa58407370380572032410041c0011085818080" - "00213d200041c0db006a41a0026a2232200041c0d2006a20004180d7006a" - "10b480808000200041c0db006a20004180ce006a41a0021086818080001a" - "2031203510b28080800020004180c5006a200041c0db006a413010868180" - "80001a2002200041c0db006a4190016a224c10b28080800020004180ce00" - "6a203c41301086818080001a2030200041c0db006a41f0016a224d10b280" - "808000200041c0d2006a203b41301086818080001a20004180d7006a4100" - "41301085818080001a200042c18e8ea3d58c88f8183703d857200042d2a1" - "c19ee8addffc033703d0572000429e97eb8de0d783db8e7f3703c8572000" - "4295b7949cfdd590b8d8003703c057200042d2cbb6fee1c8c8d5dd003703" - "b857200042f1e0c7b3c8bcf2814d3703b057200041c0c9006a41e0006a22" - "0620004180ce006a20004180d7006a10b380808000200741004130108581" - "8080002101200042ba8a92abf1a7dbf2143703a857200042e8a0ee96fe89" - "bcf2143703a057200042a4a0a0f4c7f1c686a27f37039857200042acfced" - "84e38c82c4d00037039057200042d5cb9694b3cac8f92a37038857200042" - "c38bd5b3c8bcf286897f37038057200041c0c9006a41c0016a2207200041" - "c0d2006a20004180d7006a10b380808000200041c0c9006a20004180c500" - "6a41e0001086818080001a200041c0c0006a41306a2237200041c0db006a" - "41d0026a224e10b280808000200041c0c0006a203241301086818080001a" - "2031200041c0db006a41b0036a224f10b28080800020004180c5006a2000" - "41c0db006a4180036a225041301086818080001a2030200041c0db006a41" - "90046a225110b280808000200041c0d2006a200041c0db006a41e0036a22" - "5241301086818080001a20004180d7006a410041301085818080001a2000" - "42c18e8ea3d58c88f8183703d857200042d2a1c19ee8addffc033703d057" - "2000429e97eb8de0d783db8e7f3703c85720004295b7949cfdd590b8d800" - "3703c057200042d2cbb6fee1c8c8d5dd003703b857200042f1e0c7b3c8bc" - "f2814d3703b057203620004180c5006a20004180d7006a10b38080800020" - "01410041301085818080002101200042ba8a92abf1a7dbf2143703a85720" - "0042e8a0ee96fe89bcf2143703a057200042a4a0a0f4c7f1c686a27f3703" - "9857200042acfced84e38c82c4d00037039057200042d5cb9694b3cac8f9" - "2a37038857200042c38bd5b3c8bcf286897f370380572046200041c0d200" - "6a20004180d7006a10b38080800020004180ce006a200041c0c0006a41e0" - "001086818080001a200042afff91c4a8fbbb87113703985320004289bd83" - "adbef9849c2e37039053200042d0d1a385a497e78d413703885320004294" - "a7e7acc2baa5a44f37038053200042ecf9a5e2bf8da8a1d8003703f85220" - "0042c6ac97e7d4d59afbb27f3703f052200042ebcded87fbc188f9083703" - "e852200042cd9cabeda5fde4f11c3703e052200042eed3f096abd9ebada3" - "7f3703d8522000428fc5dc88cd998ff4977f3703d0522000429386aaa8ab" - "f2d7b4463703c852200042e5a8e798abaaa584073703c0522038410041c0" - "01108581808000213820004180d7006a41a0026a225320004180ce006a20" - "0041c0d2006a10b48080800020004180d7006a200041c0c9006a41a00210" - "86818080001a2037200110b280808000200041c0c0006a20004180d7006a" - "41301086818080001a200520004180d7006a4190016a10b2808080002000" - "41c0c9006a203d41301086818080001a200220004180d7006a41f0016a10" - "b28080800020004180ce006a200441301086818080001a200041c0d2006a" - "410041301085818080001a200042c18e8ea3d58c88f81837039853200042" - "d2a1c19ee8addffc03370390532000429e97eb8de0d783db8e7f37038853" - "20004295b7949cfdd590b8d80037038053200042d2cbb6fee1c8c8d5dd00" - "3703f852200042f1e0c7b3c8bcf2814d3703f05220004180c5006a41e000" - "6a2254200041c0c9006a200041c0d2006a10b38080800020304100413010" - "85818080002139200042ba8a92abf1a7dbf2143703e852200042e8a0ee96" - "fe89bcf2143703e052200042a4a0a0f4c7f1c686a27f3703d852200042ac" - "fced84e38c82c4d0003703d052200042d5cb9694b3cac8f92a3703c85220" - "0042c38bd5b3c8bcf286897f3703c05220004180c5006a41c0016a225520" - "004180ce006a200041c0d2006a10b38080800020004180c5006a200041c0" - "c0006a41e0001086818080001a200041803c6a41306a223020004180d700" - "6a41d0026a10b280808000200041803c6a205341301086818080001a2037" - "20004180d7006a41b0036a10b280808000200041c0c0006a20004180d700" - "6a4180036a41301086818080001a200220004180d7006a4190046a10b280" - "80800020004180ce006a20004180d7006a41e0036a41301086818080001a" - "200041c0d2006a410041301085818080001a200042c18e8ea3d58c88f818" - "37039853200042d2a1c19ee8addffc03370390532000429e97eb8de0d783" - "db8e7f3703885320004295b7949cfdd590b8d80037038053200042d2cbb6" - "fee1c8c8d5dd003703f852200042f1e0c7b3c8bcf2814d3703f052200620" - "0041c0c0006a200041c0d2006a10b3808080002039410041301085818080" - "002139200042ba8a92abf1a7dbf2143703e852200042e8a0ee96fe89bcf2" - "143703e052200042a4a0a0f4c7f1c686a27f3703d852200042acfced84e3" - "8c82c4d0003703d052200042d5cb9694b3cac8f92a3703c852200042c38b" - "d5b3c8bcf286897f3703c052200720004180ce006a200041c0d2006a10b3" - "80808000200041c0c9006a200041803c6a41e0001086818080001a200042" - "afff91c4a8fbbb87113703d84e20004289bd83adbef9849c2e3703d04e20" - "0042d0d1a385a497e78d413703c84e20004294a7e7acc2baa5a44f3703c0" - "4e200042ecf9a5e2bf8da8a1d8003703b84e200042c6ac97e7d4d59afbb2" - "7f3703b04e200042ebcded87fbc188f9083703a84e200042cd9cabeda5fd" - "e4f11c3703a04e200042eed3f096abd9ebada37f3703984e2000428fc5dc" - "88cd998ff4977f3703904e2000429386aaa8abf2d7b4463703884e200042" - "e5a8e798abaaa584073703804e2036410041c00110858180800021362000" - "41c0d2006a41a0026a2256200041c0c9006a20004180ce006a10b4808080" - "00200041c0d2006a20004180c5006a41a0021086818080001a2030203910" - "b280808000200041803c6a200041c0d2006a41301086818080001a203720" - "0041c0d2006a4190016a225710b280808000200041c0c0006a2038413010" - "86818080001a2005200041c0d2006a41f0016a225810b280808000200041" - "c0c9006a203441301086818080001a20004180ce006a4100413010858180" - "80001a200042c18e8ea3d58c88f8183703d84e200042d2a1c19ee8addffc" - "033703d04e2000429e97eb8de0d783db8e7f3703c84e20004295b7949cfd" - "d590b8d8003703c04e200042d2cbb6fee1c8c8d5dd003703b84e200042f1" - "e0c7b3c8bcf2814d3703b04e2054200041c0c0006a20004180ce006a10b3" - "808080002002410041301085818080002102200042ba8a92abf1a7dbf214" - "3703a84e200042e8a0ee96fe89bcf2143703a04e200042a4a0a0f4c7f1c6" - "86a27f3703984e200042acfced84e38c82c4d0003703904e200042d5cb96" - "94b3cac8f92a3703884e200042c38bd5b3c8bcf286897f3703804e205520" - "0041c0c9006a20004180ce006a10b38080800020004180c5006a20004180" - "3c6a41e0001086818080001a200041c0376a41306a2259200041c0d2006a" - "41d0026a225a10b280808000200041c0376a205641301086818080001a20" - "30200041c0d2006a41b0036a225b10b280808000200041803c6a200041c0" - "d2006a4180036a225c41301086818080001a2037200041c0d2006a419004" - "6a225d10b280808000200041c0c0006a200041c0d2006a41e0036a225e41" - "301086818080001a20004180ce006a410041301085818080001a200042c1" - "8e8ea3d58c88f8183703d84e200042d2a1c19ee8addffc033703d04e2000" - "429e97eb8de0d783db8e7f3703c84e20004295b7949cfdd590b8d8003703" - "c04e200042d2cbb6fee1c8c8d5dd003703b84e200042f1e0c7b3c8bcf281" - "4d3703b04e2006200041803c6a20004180ce006a10b38080800020024100" - "4130108581808000215f200042ba8a92abf1a7dbf2143703a84e200042e8" - "a0ee96fe89bcf2143703a04e200042a4a0a0f4c7f1c686a27f3703984e20" - "0042acfced84e38c82c4d0003703904e200042d5cb9694b3cac8f92a3703" - "884e200042c38bd5b3c8bcf286897f3703804e2007200041c0c0006a2000" - "4180ce006a10b380808000200041c0c9006a200041c0376a41e000108681" - "8080001a200042afff91c4a8fbbb87113703d84e20004289bd83adbef984" - "9c2e3703d04e200042d0d1a385a497e78d413703c84e20004294a7e7acc2" - "baa5a44f3703c04e200042ecf9a5e2bf8da8a1d8003703b84e200042c6ac" - "97e7d4d59afbb27f3703b04e200042ebcded87fbc188f9083703a84e2000" - "42cd9cabeda5fde4f11c3703a04e200042eed3f096abd9ebada37f370398" - "4e2000428fc5dc88cd998ff4977f3703904e2000429386aaa8abf2d7b446" - "3703884e200042e5a8e798abaaa584073703804e2036410041c001108581" - "8080002160200041b82e6a41a0026a200041c0c9006a20004180ce006a10" - "b480808000200041b82e6a20004180c5006a41a0021086818080001a2000" - "41a0e8006a200041f8296a10b58080800020004180ce006a200041f8296a" - "41a0026a226110b580808000200041f8326a20004180ce006a10b6808080" - "00200041c0c9006a200041a0e8006a200041f8326a10b780808000200041" - "f8326a2006200710b38080800020004180e0006a200041f8326a203310b8" - "8080800020004180e0006a41306a2230200041f8326a203310b980808000" - "200041f8326a200041c0c9006a10ba80808000200041a0e2006a200041f8" - "326a20004180e0006a10bb80808000200041f8326a200710ba8080800020" - "0041c0e4006a200041f8326a203310b880808000200041c0e4006a41306a" - "2236200041f8326a203310b980808000200041f8326a200041c0c9006a20" - "0610b380808000200041c0376a200041c0e4006a200041f8326a10bb8080" - "8000200041803c6a200610ba80808000200041f8326a200041c0c9006a20" - "0710b380808000200041c0c0006a200041803c6a200041f8326a10bb8080" - "8000200041a0e8006a2006200041c0c0006a10b380808000200041f8326a" - "2007200041c0376a10b380808000200041c0db006a200041a0e8006a2000" - "41f8326a10bc8080800020004180c5006a200041c0db006a203510b88080" - "80002031200041c0db006a203510b980808000200041f8326a200041c0c9" - "006a200041a0e2006a10b380808000200041c0d2006a20004180c5006a20" - "0041f8326a10bc80808000200041a0e8006a200041c0d2006a10bd808080" - "00200041f8326a203910bd80808000200041e0e6006a200041a0e8006a20" - "0041f8326a10b980808000200041c0db006a200041e0e6006a10a6808080" - "0020004180d7006a410041301085818080001a200041c0e7006a20004180" - "d7006a200041c0db006a20002d00f05b2202109080808000200041f8326a" - "200041c0d2006a200041c0e7006a10a780808000200041a0e8006a200041" - "c0e7006a10b28080800020332039200041a0e8006a10a780808000200041" - "a0e8006a200041f8326a41e0001086818080001a200020023a0080692000" - "4180d7006a410041e0001085818080001a200041c0db006a20004180d700" - "6a200041a0e8006a200210b080808000200041f8326a200041c0db006a20" - "0041a0e2006a10b380808000203f200041c0db006a200041c0376a10b380" - "8080002040200041c0db006a200041c0c0006a10b380808000200041c0db" - "006a200041f8326a41a0021086818080001a200020023a00e05d20004180" - "d7006a410041a0021085818080001a200041c0d2006a20004180d7006a20" - "0041c0db006a200210b0808080002038203d203c200210b0808080002034" - "2004203b200210b080808000200041a0e8006a200041f8296a200041c0d2" - "006a10b480808000200041f8326a200041c0d2006a10b180808000200320" - "61200041f8326a10b480808000200041f8326a200041a0e8006a41c00410" - "86818080001a200020023a00b837200041803c6a410041c0041085818080" - "001a200041c0db006a200041803c6a200041f8326a200210b08080800020" - "3c200041803c6a41e0006a203f200210b080808000203b200041803c6a41" - "c0016a2040200210b080808000200041a0e8006a200041803c6a41a0026a" - "203e200210b0808080002008200041803c6a4180036a2041200210b08080" - "8000203a200041803c6a41e0036a2042200210b080808000200041c0376a" - "200041c0db006a41a0021086818080001a200041c0376a41a0026a200041" - "a0e8006a41a0021086818080002161200041c0c0006a200041b82e6a2000" - "41c0376a10be80808000200041c0376a200041c0c0006a41c00410868180" - "80001a205f203710b28080800020004180ce006a200041c0c0006a413010" - "86818080001a2001200041c0c0006a4190016a10b28080800020004180d7" - "006a200041c0c0006a41e0006a41301086818080001a2035200041c0c000" - "6a41f0016a10b280808000200041c0db006a200041c0c0006a41c0016a41" - "301086818080001a200041a0e8006a410041301085818080001a200042c1" - "8e8ea3d58c88f8183703f868200042d2a1c19ee8addffc033703f0682000" - "429e97eb8de0d783db8e7f3703e86820004295b7949cfdd590b8d8003703" - "e068200042d2cbb6fee1c8c8d5dd003703d868200042f1e0c7b3c8bcf281" - "4d3703d068203820004180d7006a200041a0e8006a10b380808000204341" - "0041301085818080002133200042ba8a92abf1a7dbf2143703c868200042" - "e8a0ee96fe89bcf2143703c068200042a4a0a0f4c7f1c686a27f3703b868" - "200042acfced84e38c82c4d0003703b068200042d5cb9694b3cac8f92a37" - "03a868200042c38bd5b3c8bcf286897f3703a0682034200041c0db006a20" - "0041a0e8006a10b380808000200041c0d2006a20004180ce006a41e00010" - "86818080001a2005200041c0c0006a41d0026a10b280808000200041c0c9" - "006a200041c0c0006a41a0026a223741301086818080001a205f200041c0" - "c0006a41b0036a10b28080800020004180ce006a200041c0c0006a418003" - "6a41301086818080001a2035200041c0c0006a4190046a10b28080800020" - "0041c0db006a200041c0c0006a41e0036a41301086818080001a200041a0" - "e8006a410041301085818080001a200042c18e8ea3d58c88f8183703f868" - "200042d2a1c19ee8addffc033703f0682000429e97eb8de0d783db8e7f37" - "03e86820004295b7949cfdd590b8d8003703e068200042d2cbb6fee1c8c8" - "d5dd003703d868200042f1e0c7b3c8bcf2814d3703d068203d20004180ce" - "006a200041a0e8006a10b380808000203341004130108581808000210620" - "0042ba8a92abf1a7dbf2143703c868200042e8a0ee96fe89bcf2143703c0" - "68200042a4a0a0f4c7f1c686a27f3703b868200042acfced84e38c82c4d0" - "003703b068200042d5cb9694b3cac8f92a3703a868200042c38bd5b3c8bc" - "f286897f3703a0682004200041c0db006a200041a0e8006a10b380808000" - "20004180d7006a200041c0c9006a41e0001086818080001a200042afff91" - "c4a8fbbb87113703985c20004289bd83adbef9849c2e3703905c200042d0" - "d1a385a497e78d413703885c20004294a7e7acc2baa5a44f3703805c2000" - "42ecf9a5e2bf8da8a1d8003703f85b200042c6ac97e7d4d59afbb27f3703" - "f05b200042ebcded87fbc188f9083703e85b200042cd9cabeda5fde4f11c" - "3703e05b200042eed3f096abd9ebada37f3703d85b2000428fc5dc88cd99" - "8ff4977f3703d05b2000429386aaa8abf2d7b4463703c85b200042e5a8e7" - "98abaaa584073703c05b203c410041c00110858180800021432003200041" - "80d7006a200041c0db006a10b480808000200041a0e8006a200041c0d200" - "6a41a0021086818080001a2005200610b280808000200041c0c9006a2000" - "41a0e8006a41301086818080001a2039204410b280808000200041c0d200" - "6a200841301086818080001a2001204510b28080800020004180d7006a20" - "3a41301086818080001a200041c0db006a410041301085818080001a2000" - "42c18e8ea3d58c88f8183703985c200042d2a1c19ee8addffc033703905c" - "2000429e97eb8de0d783db8e7f3703885c20004295b7949cfdd590b8d800" - "3703805c200042d2cbb6fee1c8c8d5dd003703f85b200042f1e0c7b3c8bc" - "f2814d3703f05b2060200041c0d2006a200041c0db006a10b38080800020" - "35410041301085818080002133200042ba8a92abf1a7dbf2143703e85b20" - "0042e8a0ee96fe89bcf2143703e05b200042a4a0a0f4c7f1c686a27f3703" - "d85b200042acfced84e38c82c4d0003703d05b200042d5cb9694b3cac8f9" - "2a3703c85b200042c38bd5b3c8bcf286897f3703c05b204620004180d700" - "6a200041c0db006a10b38080800020004180ce006a200041c0c9006a41e0" - "001086818080001a2031204710b28080800020004180c5006a2003413010" - "86818080001a2005204810b280808000200041c0c9006a20494130108681" - "8080001a2001204a10b28080800020004180d7006a204b41301086818080" - "001a200041c0db006a410041301085818080001a200042c18e8ea3d58c88" - "f8183703985c200042d2a1c19ee8addffc033703905c2000429e97eb8de0" - "d783db8e7f3703885c20004295b7949cfdd590b8d8003703805c200042d2" - "cbb6fee1c8c8d5dd003703f85b200042f1e0c7b3c8bcf2814d3703f05b20" - "38200041c0c9006a200041c0db006a10b380808000203341004130108581" - "8080002133200042ba8a92abf1a7dbf2143703e85b200042e8a0ee96fe89" - "bcf2143703e05b200042a4a0a0f4c7f1c686a27f3703d85b200042acfced" - "84e38c82c4d0003703d05b200042d5cb9694b3cac8f92a3703c85b200042" - "c38bd5b3c8bcf286897f3703c05b203420004180d7006a200041c0db006a" - "10b380808000200041c0d2006a20004180c5006a41e0001086818080001a" - "200042afff91c4a8fbbb87113703d85720004289bd83adbef9849c2e3703" - "d057200042d0d1a385a497e78d413703c85720004294a7e7acc2baa5a44f" - "3703c057200042ecf9a5e2bf8da8a1d8003703b857200042c6ac97e7d4d5" - "9afbb27f3703b057200042ebcded87fbc188f9083703a857200042cd9cab" - "eda5fde4f11c3703a057200042eed3f096abd9ebada37f37039857200042" - "8fc5dc88cd998ff4977f370390572000429386aaa8abf2d7b44637038857" - "200042e5a8e798abaaa5840737038057203d410041c00110858180800021" - "072032200041c0d2006a20004180d7006a10b480808000200041c0db006a" - "20004180ce006a41a0021086818080001a200041c0c0006a200041c0db00" - "6a41c0041086818080001a200041c0c0006a200041c0376a10bf80808000" - "200041a0e8006a200041c0c0006a10c0808080002032200310b180808000" - "200041c0db006a200041a0e8006a41a0021086818080001a200041c0376a" - "200041c0db006a41c0041086818080001a20004180c5006a200041c0c000" - "6a10c180808000200041c0c9006a20004180c5006a10c080808000200041" - "80ce006a200041c0376a20004180c5006a10be80808000200041c0376a20" - "004180ce006a10c180808000200041b82e6a200041c0376a10c180808000" - "200041c0d2006a200041b82e6a10c180808000200041c0d2006a200041c0" - "c9006a10bf80808000200041c0c9006a200041c0d2006a10c18080800020" - "0320004180ce006a41a0026a10b180808000200041a0e8006a20004180ce" - "006a41a0021086818080001a20004180ce006a200041a0e8006a41c00410" - "86818080001a200041a0e8006a20004180ce006a200041c0c0006a10be80" - "808000200041c0c9006a200041a0e8006a10bf808080002003203710b180" - "808000200041a0e8006a200041c0c0006a41a0021086818080001a200041" - "80ce006a200041a0e8006a41c0041086818080001a200041c0376a200041" - "c0c0006a10bf80808000200041a0e2006a41306a2205205910b280808000" - "200041a0e2006a200041c0376a41301086818080001a2001200041c0376a" - "4190016a10b28080800020004180d7006a200041c0376a41e0006a413010" - "86818080001a2033200041c0376a41f0016a10b280808000200041c0db00" - "6a200041c0376a41c0016a41301086818080001a200041a0e8006a410041" - "301085818080001a200042c18e8ea3d58c88f8183703f868200042d2a1c1" - "9ee8addffc033703f0682000429e97eb8de0d783db8e7f3703e868200042" - "95b7949cfdd590b8d8003703e068200042d2cbb6fee1c8c8d5dd003703d8" - "68200042f1e0c7b3c8bcf2814d3703d068200041c0e4006a41e0006a2237" - "20004180d7006a200041a0e8006a10b38080800020064100413010858180" - "80002106200042ba8a92abf1a7dbf2143703c868200042e8a0ee96fe89bc" - "f2143703c068200042a4a0a0f4c7f1c686a27f3703b868200042acfced84" - "e38c82c4d0003703b068200042d5cb9694b3cac8f92a3703a868200042c3" - "8bd5b3c8bcf286897f3703a068200041c0e4006a41c0016a2235200041c0" - "db006a200041a0e8006a10b380808000200041c0e4006a200041a0e2006a" - "41e0001086818080001a2030200041c0376a41d0026a10b2808080002000" - "4180e0006a206141301086818080001a2005200041c0376a41b0036a10b2" - "80808000200041a0e2006a200041c0376a4180036a41301086818080001a" - "2033200041c0376a4190046a10b280808000200041c0db006a200041c037" - "6a41e0036a41301086818080001a200041a0e8006a410041301085818080" - "001a200042c18e8ea3d58c88f8183703f868200042d2a1c19ee8addffc03" - "3703f0682000429e97eb8de0d783db8e7f3703e86820004295b7949cfdd5" - "90b8d8003703e068200042d2cbb6fee1c8c8d5dd003703d868200042f1e0" - "c7b3c8bcf2814d3703d0682007200041a0e2006a200041a0e8006a10b380" - "808000200641004130108581808000213c200042ba8a92abf1a7dbf21437" - "03c868200042e8a0ee96fe89bcf2143703c068200042a4a0a0f4c7f1c686" - "a27f3703b868200042acfced84e38c82c4d0003703b068200042d5cb9694" - "b3cac8f92a3703a868200042c38bd5b3c8bcf286897f3703a06820042000" - "41c0db006a200041a0e8006a10b38080800020004180d7006a20004180e0" - "006a41e0001086818080001a200042afff91c4a8fbbb87113703985c2000" - "4289bd83adbef9849c2e3703905c200042d0d1a385a497e78d413703885c" - "20004294a7e7acc2baa5a44f3703805c200042ecf9a5e2bf8da8a1d80037" - "03f85b200042c6ac97e7d4d59afbb27f3703f05b200042ebcded87fbc188" - "f9083703e85b200042cd9cabeda5fde4f11c3703e05b200042eed3f096ab" - "d9ebada37f3703d85b2000428fc5dc88cd998ff4977f3703d05b20004293" - "86aaa8abf2d7b4463703c85b200042e5a8e798abaaa584073703c05b2043" - "410041c001108581808000213d200320004180d7006a200041c0db006a10" - "b480808000200041a0e8006a200041c0e4006a41a0021086818080001a20" - "30203c10b28080800020004180e0006a200041a0e8006a41301086818080" - "001a2036204410b280808000200041c0e4006a200841301086818080001a" - "2001204510b28080800020004180d7006a203a41301086818080001a2000" - "41c0db006a410041301085818080001a200042c18e8ea3d58c88f8183703" - "985c200042d2a1c19ee8addffc033703905c2000429e97eb8de0d783db8e" - "7f3703885c20004295b7949cfdd590b8d8003703805c200042d2cbb6fee1" - "c8c8d5dd003703f85b200042f1e0c7b3c8bcf2814d3703f05b200041a0e2" - "006a41e0006a2243200041c0e4006a200041c0db006a10b3808080002033" - "410041301085818080002133200042ba8a92abf1a7dbf2143703e85b2000" - "42e8a0ee96fe89bcf2143703e05b200042a4a0a0f4c7f1c686a27f3703d8" - "5b200042acfced84e38c82c4d0003703d05b200042d5cb9694b3cac8f92a" - "3703c85b200042c38bd5b3c8bcf286897f3703c05b200041a0e2006a41c0" - "016a224620004180d7006a200041c0db006a10b380808000200041a0e200" - "6a20004180e0006a41e0001086818080001a200041c0e7006a41306a2206" - "204710b280808000200041c0e7006a200341301086818080001a20302048" - "10b28080800020004180e0006a204941301086818080001a2001204a10b2" - "8080800020004180d7006a204b41301086818080001a200041c0db006a41" - "0041301085818080001a200042c18e8ea3d58c88f8183703985c200042d2" - "a1c19ee8addffc033703905c2000429e97eb8de0d783db8e7f3703885c20" - "004295b7949cfdd590b8d8003703805c200042d2cbb6fee1c8c8d5dd0037" - "03f85b200042f1e0c7b3c8bcf2814d3703f05b203720004180e0006a2000" - "41c0db006a10b3808080002033410041301085818080002133200042ba8a" - "92abf1a7dbf2143703e85b200042e8a0ee96fe89bcf2143703e05b200042" - "a4a0a0f4c7f1c686a27f3703d85b200042acfced84e38c82c4d0003703d0" - "5b200042d5cb9694b3cac8f92a3703c85b200042c38bd5b3c8bcf286897f" - "3703c05b203520004180d7006a200041c0db006a10b380808000200041c0" - "e4006a200041c0e7006a41e0001086818080001a200042afff91c4a8fbbb" - "87113703d85720004289bd83adbef9849c2e3703d057200042d0d1a385a4" - "97e78d413703c85720004294a7e7acc2baa5a44f3703c057200042ecf9a5" - "e2bf8da8a1d8003703b857200042c6ac97e7d4d59afbb27f3703b0572000" - "42ebcded87fbc188f9083703a857200042cd9cabeda5fde4f11c3703a057" - "200042eed3f096abd9ebada37f370398572000428fc5dc88cd998ff4977f" - "370390572000429386aaa8abf2d7b44637038857200042e5a8e798abaaa5" - "8407370380572007410041c00110858180800021072032200041c0e4006a" - "20004180d7006a10b480808000200041c0db006a200041a0e2006a41a002" - "1086818080001a2006203310b280808000200041c0e7006a200041c0db00" - "6a41301086818080001a2005204c10b280808000200041a0e2006a203d41" - "301086818080001a2036204d10b280808000200041c0e4006a203b413010" - "86818080001a20004180d7006a410041301085818080001a200042c18e8e" - "a3d58c88f8183703d857200042d2a1c19ee8addffc033703d0572000429e" - "97eb8de0d783db8e7f3703c85720004295b7949cfdd590b8d8003703c057" - "200042d2cbb6fee1c8c8d5dd003703b857200042f1e0c7b3c8bcf2814d37" - "03b05720004180e0006a41e0006a200041a0e2006a20004180d7006a10b3" - "808080002001410041301085818080002101200042ba8a92abf1a7dbf214" - "3703a857200042e8a0ee96fe89bcf2143703a057200042a4a0a0f4c7f1c6" - "86a27f37039857200042acfced84e38c82c4d00037039057200042d5cb96" - "94b3cac8f92a37038857200042c38bd5b3c8bcf286897f37038057200041" - "80e0006a41c0016a200041c0e4006a20004180d7006a10b3808080002000" - "4180e0006a200041c0e7006a41e0001086818080001a200041e0e6006a41" - "306a204e10b280808000200041e0e6006a203241301086818080001a2006" - "204f10b280808000200041c0e7006a205041301086818080001a20362051" - "10b280808000200041c0e4006a205241301086818080001a20004180d700" - "6a410041301085818080001a200042c18e8ea3d58c88f8183703d8572000" - "42d2a1c19ee8addffc033703d0572000429e97eb8de0d783db8e7f3703c8" - "5720004295b7949cfdd590b8d8003703c057200042d2cbb6fee1c8c8d5dd" - "003703b857200042f1e0c7b3c8bcf2814d3703b0572043200041c0e7006a" - "20004180d7006a10b3808080002001410041301085818080002101200042" - "ba8a92abf1a7dbf2143703a857200042e8a0ee96fe89bcf2143703a05720" - "0042a4a0a0f4c7f1c686a27f37039857200042acfced84e38c82c4d00037" - "039057200042d5cb9694b3cac8f92a37038857200042c38bd5b3c8bcf286" - "897f370380572046200041c0e4006a20004180d7006a10b3808080002000" - "41a0e2006a200041e0e6006a41e0001086818080001a200042afff91c4a8" - "fbbb87113703986520004289bd83adbef9849c2e37039065200042d0d1a3" - "85a497e78d413703886520004294a7e7acc2baa5a44f37038065200042ec" - "f9a5e2bf8da8a1d8003703f864200042c6ac97e7d4d59afbb27f3703f064" - "200042ebcded87fbc188f9083703e864200042cd9cabeda5fde4f11c3703" - "e064200042eed3f096abd9ebada37f3703d8642000428fc5dc88cd998ff4" - "977f3703d0642000429386aaa8abf2d7b4463703c864200042e5a8e798ab" - "aaa584073703c0642037410041c00110858180800021372053200041a0e2" - "006a200041c0e4006a10b48080800020004180d7006a20004180e0006a41" - "a0021086818080001a200041c0376a20004180d7006a41c0041086818080" - "001a200041c0d2006a20004180ce006a10bf808080002005203910b28080" - "8000200041a0e2006a200041c0d2006a41301086818080001a2001205710" - "b28080800020004180d7006a203841301086818080001a2033205810b280" - "808000200041c0db006a203441301086818080001a200041a0e8006a4100" - "41301085818080001a200042c18e8ea3d58c88f8183703f868200042d2a1" - "c19ee8addffc033703f0682000429e97eb8de0d783db8e7f3703e8682000" - "4295b7949cfdd590b8d8003703e068200042d2cbb6fee1c8c8d5dd003703" - "d868200042f1e0c7b3c8bcf2814d3703d068203720004180d7006a200041" - "a0e8006a10b380808000203c410041301085818080002134200042ba8a92" - "abf1a7dbf2143703c868200042e8a0ee96fe89bcf2143703c068200042a4" - "a0a0f4c7f1c686a27f3703b868200042acfced84e38c82c4d0003703b068" - "200042d5cb9694b3cac8f92a3703a868200042c38bd5b3c8bcf286897f37" - "03a0682035200041c0db006a200041a0e8006a10b380808000200041c0e4" - "006a200041a0e2006a41e0001086818080001a2030205a10b28080800020" - "004180e0006a205641301086818080001a2005205b10b280808000200041" - "a0e2006a205c41301086818080001a2033205d10b280808000200041c0db" - "006a205e41301086818080001a200041a0e8006a41004130108581808000" - "1a200042c18e8ea3d58c88f8183703f868200042d2a1c19ee8addffc0337" - "03f0682000429e97eb8de0d783db8e7f3703e86820004295b7949cfdd590" - "b8d8003703e068200042d2cbb6fee1c8c8d5dd003703d868200042f1e0c7" - "b3c8bcf2814d3703d0682007200041a0e2006a200041a0e8006a10b38080" - "80002034410041301085818080002134200042ba8a92abf1a7dbf2143703" - "c868200042e8a0ee96fe89bcf2143703c068200042a4a0a0f4c7f1c686a2" - "7f3703b868200042acfced84e38c82c4d0003703b068200042d5cb9694b3" - "cac8f92a3703a868200042c38bd5b3c8bcf286897f3703a0682004200041" - "c0db006a200041a0e8006a10b38080800020004180d7006a20004180e000" - "6a41e0001086818080001a200042afff91c4a8fbbb87113703985c200042" - "89bd83adbef9849c2e3703905c200042d0d1a385a497e78d413703885c20" - "004294a7e7acc2baa5a44f3703805c200042ecf9a5e2bf8da8a1d8003703" - "f85b200042c6ac97e7d4d59afbb27f3703f05b200042ebcded87fbc188f9" - "083703e85b200042cd9cabeda5fde4f11c3703e05b200042eed3f096abd9" - "ebada37f3703d85b2000428fc5dc88cd998ff4977f3703d05b2000429386" - "aaa8abf2d7b4463703c85b200042e5a8e798abaaa584073703c05b203d41" - "0041c0011085818080002138200320004180d7006a200041c0db006a10b4" - "80808000200041a0e8006a200041c0e4006a41a0021086818080001a2000" - "41c0d2006a200041a0e8006a41c0041086818080001a20004180c5006a20" - "0041b82e6a10bf808080002005203110b280808000200041a0e2006a2000" - "4180c5006a41301086818080001a200120004180c5006a4190016a10b280" - "80800020004180d7006a205441301086818080001a203320004180c5006a" - "41f0016a10b280808000200041c0db006a205541301086818080001a2000" - "41a0e8006a410041301085818080001a200042c18e8ea3d58c88f8183703" - "f868200042d2a1c19ee8addffc033703f0682000429e97eb8de0d783db8e" - "7f3703e86820004295b7949cfdd590b8d8003703e068200042d2cbb6fee1" - "c8c8d5dd003703d868200042f1e0c7b3c8bcf2814d3703d0682037200041" - "80d7006a200041a0e8006a10b38080800020344100413010858180800021" - "34200042ba8a92abf1a7dbf2143703c868200042e8a0ee96fe89bcf21437" - "03c068200042a4a0a0f4c7f1c686a27f3703b868200042acfced84e38c82" - "c4d0003703b068200042d5cb9694b3cac8f92a3703a868200042c38bd5b3" - "c8bcf286897f3703a0682035200041c0db006a200041a0e8006a10b38080" - "8000200041c0e4006a200041a0e2006a41e0001086818080001a20302000" - "4180c5006a41d0026a10b28080800020004180e0006a20004180c5006a41" - "a0026a41301086818080001a200520004180c5006a41b0036a10b2808080" - "00200041a0e2006a20004180c5006a4180036a41301086818080001a2033" - "20004180c5006a4190046a10b280808000200041c0db006a20004180c500" - "6a41e0036a41301086818080001a200041a0e8006a410041301085818080" - "001a200042c18e8ea3d58c88f8183703f868200042d2a1c19ee8addffc03" - "3703f0682000429e97eb8de0d783db8e7f3703e86820004295b7949cfdd5" - "90b8d8003703e068200042d2cbb6fee1c8c8d5dd003703d868200042f1e0" - "c7b3c8bcf2814d3703d0682007200041a0e2006a200041a0e8006a10b380" - "8080002034410041301085818080002105200042ba8a92abf1a7dbf21437" - "03c868200042e8a0ee96fe89bcf2143703c068200042a4a0a0f4c7f1c686" - "a27f3703b868200042acfced84e38c82c4d0003703b068200042d5cb9694" - "b3cac8f92a3703a868200042c38bd5b3c8bcf286897f3703a06820042000" - "41c0db006a200041a0e8006a10b38080800020004180d7006a20004180e0" - "006a41e0001086818080001a200042afff91c4a8fbbb87113703985c2000" - "4289bd83adbef9849c2e3703905c200042d0d1a385a497e78d413703885c" - "20004294a7e7acc2baa5a44f3703805c200042ecf9a5e2bf8da8a1d80037" - "03f85b200042c6ac97e7d4d59afbb27f3703f05b200042ebcded87fbc188" - "f9083703e85b200042cd9cabeda5fde4f11c3703e05b200042eed3f096ab" - "d9ebada37f3703d85b2000428fc5dc88cd998ff4977f3703d05b20004293" - "86aaa8abf2d7b4463703c85b200042e5a8e798abaaa584073703c05b2038" - "410041c0011085818080001a200320004180d7006a200041c0db006a10b4" - "80808000200041a0e8006a200041c0e4006a41a0021086818080001a2030" - "200510b28080800020004180e0006a200041a0e8006a4130108681808000" - "1a2036204410b280808000200041c0e4006a200841301086818080001a20" - "01204510b28080800020004180d7006a203a41301086818080001a200041" - "c0db006a410041301085818080001a200042c18e8ea3d58c88f818370398" - "5c200042d2a1c19ee8addffc033703905c2000429e97eb8de0d783db8e7f" - "3703885c20004295b7949cfdd590b8d8003703805c200042d2cbb6fee1c8" - "c8d5dd003703f85b200042f1e0c7b3c8bcf2814d3703f05b2043200041c0" - "e4006a200041c0db006a10b3808080002033410041301085818080002104" - "200042ba8a92abf1a7dbf2143703e85b200042e8a0ee96fe89bcf2143703" - "e05b200042a4a0a0f4c7f1c686a27f3703d85b200042acfced84e38c82c4" - "d0003703d05b200042d5cb9694b3cac8f92a3703c85b200042c38bd5b3c8" - "bcf286897f3703c05b204620004180d7006a200041c0db006a10b3808080" - "00200041a0e2006a20004180e0006a41e0001086818080001a2006204710" - "b280808000200041c0e7006a200341301086818080001a2030204810b280" - "80800020004180e0006a204941301086818080001a2001204a10b2808080" - "0020004180d7006a204b41301086818080001a200041c0db006a41004130" - "1085818080001a200042c18e8ea3d58c88f8183703985c200042d2a1c19e" - "e8addffc033703905c2000429e97eb8de0d783db8e7f3703885c20004295" - "b7949cfdd590b8d8003703805c200042d2cbb6fee1c8c8d5dd003703f85b" - "200042f1e0c7b3c8bcf2814d3703f05b203720004180e0006a200041c0db" - "006a10b3808080002004410041301085818080001a200042ba8a92abf1a7" - "dbf2143703e85b200042e8a0ee96fe89bcf2143703e05b200042a4a0a0f4" - "c7f1c686a27f3703d85b200042acfced84e38c82c4d0003703d05b200042" - "d5cb9694b3cac8f92a3703c85b200042c38bd5b3c8bcf286897f3703c05b" - "203520004180d7006a200041c0db006a10b380808000200041c0e4006a20" - "0041c0e7006a41e0001086818080001a200042afff91c4a8fbbb87113703" - "d85720004289bd83adbef9849c2e3703d057200042d0d1a385a497e78d41" - "3703c85720004294a7e7acc2baa5a44f3703c057200042ecf9a5e2bf8da8" - "a1d8003703b857200042c6ac97e7d4d59afbb27f3703b057200042ebcded" - "87fbc188f9083703a857200042cd9cabeda5fde4f11c3703a057200042ee" - "d3f096abd9ebada37f370398572000428fc5dc88cd998ff4977f37039057" - "2000429386aaa8abf2d7b44637038857200042e5a8e798abaaa584073703" - "80572007410041c0011085818080001a2032200041c0e4006a20004180d7" - "006a10b480808000200041c0db006a200041a0e2006a41a0021086818080" - "001a20004180c5006a200041c0db006a41c0041086818080001a20004180" - "c5006a200041c0376a10bf8080800020004180c5006a200041c0d2006a10" - "bf80808000200041f8296a20004180c5006a200041c0c9006a10be808080" - "00200020023a00a068024020024101470d00200041a0e8006a200041f829" - "6a41c0041086818080001a200041f8326a10ac80808000200041a0e8006a" - "200041f8326a10c2808080002008203f10c2808080007110a38080800020" - "3a204010c2808080007110a3808080002003203e10c28080800020492041" - "10c2808080007110a380808000204b204210c2808080007110a380808000" - "7110a380808000210220002802a82520002802ac25108580808000200028" - "029825200028029c25108580808000200028028825200028028c25108580" - "80800020002802f82420002802fc24108580808000202f202e1086808080" - "0020002802c01c20002802c41c10828080800020002802a01520002802a4" - "15108480808000200028028815200028028c1510848080800020002802b4" - "1320002802b81310848080800020002802bc1220002802c0121084808080" - "0020002802e41020002802e810108480808000200028028c0f2000280290" - "0f10848080800020002802940e20002802980e108480808000200028029c" - "0d20002802a00d108480808000200241ff017141004721020c080b200041" - "003602f832200041a0e8006a41c886c08000200041f8326a41cc86c08000" - "109680808000000b200041c0c0006a200041b8256a203610b48080800020" - "004180c5006a200041b8256a203610c380808000200041c0c9006a203610" - "b68080800020004180ce006a200041c0c9006a200041b8256a10c3808080" - "00200041c0d2006a20004180ce006a20004180c5006a10b4808080002000" - "4180d7006a200041c0d2006a200041c0c0006a10b780808000200041c0db" - "006a200041c0c0006a200041c0c0006a10c380808000200041a0e8006a20" - "0041c0c0006a10b680808000200041f8326a20004180d7006a200041a0e8" - "006a10b7808080002005200041c0db006a41a0021086818080001a200041" - "b8256a200041f8326a41c0041086818080001a410121020c000b0b200041" - "80d7006a2030200441e8006c6a10a580808000200041a0026a202e200441" - "05746a2202290300220c42ffffffff6f7e22094200428180808070420010" - "878180800020004190026a2009420042feb7f9ffaf80e9ded30042001087" - "8180800020004180026a200942004285b087cd8081f69c33420010878180" - "8000200041f0016a2009420042c8faf5ccb2eae9f6f30042001087818080" - "00200041e0016a200029039002220e20022903087c220b200041a0026a41" - "086a290300200c20002903a00222097c200954ad7c7c220c42ffffffff6f" - "7e220942004281808080704200108781808000200041d0016a2009420042" - "feb7f9ffaf80e9ded300420010878180800020004180016a200942004285" - "b087cd8081f69c334200108781808000200041306a2009420042c8faf5cc" - "b2eae9f6f3004200108781808000200041c0016a20002903d00122132000" - "29038002221220022903107c220a20004190026a41086a290300200b200e" - "54ad7c200c200b54ad7c7c220d7c220b200041e0016a41086a2903002000" - "2903e0012209200c7c200954ad7c7c220c42ffffffff6f7e220942004281" - "808080704200108781808000200041b0016a2009420042feb7f9ffaf80e9" - "ded3004200108781808000200041a0016a200942004285b087cd8081f69c" - "33420010878180800020004190016a2009420042c8faf5ccb2eae9f6f300" - "4200108781808000200041f0006a20002903b001221020002903f0012211" - "20022903187c220e20004180026a41086a290300200a201254ad7c200d20" - "0a54ad7c7c220a2000290380017c2212200041d0016a41086a290300200b" - "201354ad7c200c200b54ad7c7c22137c220b200041c0016a41086a290300" - "20002903c0012209200c7c200954ad7c7c220c42ffffffff6f7e22094200" - "4281808080704200108781808000200041e0006a2009420042feb7f9ffaf" - "80e9ded3004200108781808000200041d0006a200942004285b087cd8081" - "f69c334200108781808000200041c0006a2009420042c8faf5ccb2eae9f6" - "f3004200108781808000200041a0016a41086a290300210d200041306a41" - "086a290300210f200029039001211720002903502114200041d0006a4108" - "6a2903002115200020002903602216200041f0016a41086a290300200e20" - "1154ad7c200a200e54ad7c221120002903307c220920004180016a41086a" - "2903002012200a54ad7c2013201254ad7c7c220a20002903a0017c220e20" - "0041b0016a41086a290300200b201054ad7c200c200b54ad7c7c22127c22" - "0b200041f0006a41086a29030020002903702213200c7c201354ad7c7c22" - "133703f832200020142017200f2009201154ad7c200a200954ad7c22107c" - "2209200d200e200a54ad7c2012200e54ad7c7c220c7c220a200041e0006a" - "41086a290300200b201654ad7c2013200b54ad7c7c220b37038033200020" - "004190016a41086a2903002009201054ad7c200c200954ad7c220e200029" - "03407c22092015200a200c54ad7c200b200a54ad7c7c220b370388332000" - "200041c0006a41086a2903002009200e54ad7c200b200954ad7c37039033" - "200041a0e8006a200041f8326a10a280808000200020002903b868370398" - "4e200020002903b0683703904e200020002903a8683703884e2000200029" - "03a0683703804e200041c0db006a410041301085818080001a2035410041" - "301085818080001a203441e086c0800041301086818080001a4101210220" - "0041013602e052200041003602d452200041003602c852200020333602c4" - "52200020004180ce006a3602c05203400240024020020d00200041086a20" - "0041c0d2006a10c48080800020002d0009210120002d000821030c010b20" - "0041003602e0520240024020002802c852450d00200041286a2002203210" - "c58080800020002802280d01200028022c21020b024020002802c0522201" - "450d0020002802c45221030340024020032001470d00200020033602c452" - "0c020b2000428080808080013702cc5220002003417f6a22033602c85220" - "0041206a2002203210c580808000024020002802200d0020002802242102" - "0c010b0b200020033602c4520c010b200041003602c852024020002802d4" - "52450d00200041186a2002203110c58080800020002802180d0120002802" - "1c21020b41002103200041003602d45220020d010b200041106a200041c0" - "d2006a10c48080800020002d0011210120002d001021030b024020034101" - "71450d00200041f8326a200041c0db006a10c680808000200041c0db006a" - "200041f8326a4190011086818080001a200041f8326a200041c0db006a20" - "004180d7006a10c780808000200041a0e8006a200041c0db006a200041f8" - "326a200110c880808000200041c0db006a200041a0e8006a419001108681" - "8080001a20002802e05221020c010b0b200041a0e8006a200041c0db006a" - "4190011086818080001a200041f8326a20004180236a200041a0e8006a10" - "c78080800020004180236a200041f8326a4190011086818080001a200441" - "016a21040c000b0b2000420137028433200041013602fc322000419482c0" - "80003602f83220004181808080003602a4682000200041a0e8006a360280" - "33200020004180d7006a3602a068200041c0d2006a41c886c08000200041" - "f8326a419c82c08000109680808000000b200220002802b40641b092c080" - "00108c80808000000b202f202e10868080800020002802c01c20002802c4" - "1c10828080800020002802a01520002802a4151084808080002000280288" - "15200028028c1510848080800020002802b41320002802b8131084808080" - "0020002802bc1220002802c01210848080800020002802e41020002802e8" - "10108480808000200028028c0f20002802900f1084808080002000280294" - "0e20002802980e108480808000200028029c0d20002802a00d1084808080" - "00410021020b200041e0ec006a24808080800020020ba60201087e200020" - "01290300220242ffffffff0f7c2203200254ad427f7c2202200220012903" - "0822047c2202200454ad7c20024282c88680d0ff96a1ac7f7c2204200254" - "ad7c427f7c423f8722022002200129031022057c2202200554ad7c200242" - "fbcff8b2fffe89e34c7c2205200254ad7c427f7c423f8722022002200129" - "031822067c2202200654ad7c200242b8858ab3cd9596898c7f7c22062002" - "54ad7c427f7c220242818080807083220720037c22083703002000200242" - "feb7f9ffaf80e9ded30083220920047c22032008200754ad7c2207370308" - "200020024285b087cd8081f69c3383220820057c22042003200954ad2007" - "200354ad7c7c22033703102000200242c8faf5ccb2eae9f6f3008320067c" - "2004200854ad2003200454ad7c7c3703180b1901017f2380808080004110" - "6b220120003a000f20012d000f0b3601017f23808080800041106b220224" - "8080808000200241013b010c200220013602082002200036020420024104" - "6a10f380808000000b6501017f23808080800041306b2202248080808000" - "200041306a200141306a41301086818080001a200041e0006a41e086c080" - "00200241004130108581808000220220012d006010908080800020002001" - "41301086818080001a200241306a2480808080000b25002000200141f087" - "c0800010df808080002000200110a98080800010d2808080003a00300be7" - "2502017f4c7e23808080800041b0096b2203248080808000200341c0046a" - "200229030022044200200129030022054200108781808000200341d0046a" - "20022903082206420020054200108781808000200341e0046a2002290310" - "2207420020054200108781808000200341f0046a20022903182208420020" - "05420010878180800020034180056a200229032022094200200542001087" - "8180800020034190056a2002290328220a42002005420010878180800020" - "0341a0056a20012903082205420020044200108781808000200341f0056a" - "2005420020064200108781808000200341c0066a20054200200742001087" - "8180800020034190076a2005420020084200108781808000200341e0076a" - "2005420020094200108781808000200341b0086a20054200200a42001087" - "81808000200341b0056a2001290310220542002004420010878180800020" - "034180066a2005420020064200108781808000200341d0066a2005420020" - "074200108781808000200341a0076a200542002008420010878180800020" - "0341f0076a2005420020094200108781808000200341c0086a2005420020" - "0a4200108781808000200341c0056a200129031822054200200442001087" - "8180800020034190066a2005420020064200108781808000200341e0066a" - "2005420020074200108781808000200341b0076a20054200200842001087" - "8180800020034180086a2005420020094200108781808000200341d0086a" - "20054200200a4200108781808000200341d0056a20012903202205420020" - "044200108781808000200341a0066a200542002006420010878180800020" - "0341f0066a2005420020074200108781808000200341c0076a2005420020" - "08420010878180800020034190086a200542002009420010878180800020" - "0341e0086a20054200200a4200108781808000200341e0056a2001290328" - "2205420020044200108781808000200341b0066a20054200200642001087" - "8180800020034180076a2005420020074200108781808000200341d0076a" - "2005420020084200108781808000200341a0086a20054200200942001087" - "81808000200341f0086a20054200200a4200108781808000200341b0046a" - "20032903c004220542fdfff3ffcffffff9897f7e2204420042abd5feffff" - "ffbfffb97f4200108781808000200341a0046a2004420042ffffcf8aebff" - "ffd51e4200108781808000200341b0036a2004420042a4ecc3b58fd4b498" - "e7004200108781808000200341c0026a2004420042bfa5949ccff0d2bbe4" - "004200108781808000200341d0016a2004420042d7d9ae9ae4f6e98dcb00" - "4200108781808000200341e0006a20044200429acdffcba3bdc4801a4200" - "10878180800020034190046a200341b0046a41086a290300200520032903" - "b00422047c200454ad7c220720032903a0047c220520032903a005220820" - "032903d0042209200341c0046a41086a2903007c220a7c220b7c220642fd" - "fff3ffcffffff9897f7e2204420042abd5feffffffbfffb97f4200108781" - "80800020034180046a2004420042ffffcf8aebffffd51e42001087818080" - "00200341f0036a2004420042a4ecc3b58fd4b498e7004200108781808000" - "200341e0036a2004420042bfa5949ccff0d2bbe400420010878180800020" - "0341d0036a2004420042d7d9ae9ae4f6e98dcb0042001087818080002003" - "41c0036a20044200429acdffcba3bdc4801a4200108781808000200341a0" - "036a200341a0046a41086a2903002005200754ad7c2006200554ad7c220c" - "20032903b0037c220520032903f005220d200341d0046a41086a29030020" - "0a200954ad7c220e20032903e0047c220f7c2207200341a0056a41086a29" - "0300200b200854ad7c7c220820032903b0057c22107c2209200329038004" - "7c220a20034190046a41086a290300200329039004220420067c200454ad" - "7c7c220642fdfff3ffcffffff9897f7e2204420042abd5feffffffbfffb9" - "7f420010878180800020034190036a2004420042ffffcf8aebffffd51e42" - "0010878180800020034180036a2004420042a4ecc3b58fd4b498e7004200" - "108781808000200341f0026a2004420042bfa5949ccff0d2bbe400420010" - "8781808000200341e0026a2004420042d7d9ae9ae4f6e98dcb0042001087" - "81808000200341d0026a20044200429acdffcba3bdc4801a420010878180" - "8000200341b0026a20034180046a41086a290300200a200954ad7c200620" - "0a54ad7c221120032903f0037c220a200341b0036a41086a290300200520" - "0c54ad7c2009200554ad7c221220032903c0027c2205200341e0046a4108" - "6a290300200f200e54ad7c220f20032903f0047c220920032903c0067c22" - "0b200341f0056a41086a2903002007200d54ad7c2008200754ad7c7c2207" - "2003290380067c220c200341b0056a41086a2903002010200854ad7c7c22" - "0820032903c0057c22107c22137c220d2003290390037c220e200341a003" - "6a41086a29030020032903a003220420067c200454ad7c7c220642fdfff3" - "ffcffffff9897f7e2204420042abd5feffffffbfffb97f42001087818080" - "00200341a0026a2004420042ffffcf8aebffffd51e420010878180800020" - "034190026a2004420042a4ecc3b58fd4b498e70042001087818080002003" - "4180026a2004420042bfa5949ccff0d2bbe4004200108781808000200341" - "f0016a2004420042d7d9ae9ae4f6e98dcb004200108781808000200341e0" - "016a20044200429acdffcba3bdc4801a4200108781808000200341c0016a" - "20034190036a41086a290300200e200d54ad7c2006200e54ad7c22142003" - "290380037c220e200341f0036a41086a290300200a201154ad7c200d200a" - "54ad7c221520032903e0037c220a200341c0026a41086a29030020052012" - "54ad7c2013200554ad7c221220032903d0017c2205200341f0046a41086a" - "2903002009200f54ad7c22132003290380057c220d2003290390077c220f" - "200341c0066a41086a290300200b200954ad7c2007200b54ad7c7c220920" - "032903d0067c220b20034180066a41086a290300200c200754ad7c200820" - "0c54ad7c7c22072003290390067c220c200341c0056a41086a2903002010" - "200854ad7c7c220820032903d0057c22167c22177c22187c221020032903" - "a0027c2211200341b0026a41086a29030020032903b002220420067c2004" - "54ad7c7c220642fdfff3ffcffffff9897f7e2204420042abd5feffffffbf" - "ffb97f4200108781808000200341b0016a2004420042ffffcf8aebffffd5" - "1e4200108781808000200341a0016a2004420042a4ecc3b58fd4b498e700" - "420010878180800020034190016a2004420042bfa5949ccff0d2bbe40042" - "0010878180800020034180016a2004420042d7d9ae9ae4f6e98dcb004200" - "108781808000200341f0006a20044200429acdffcba3bdc4801a42001087" - "81808000200341d0006a200341a0026a41086a2903002011201054ad7c20" - "06201154ad7c22192003290390027c221120034180036a41086a29030020" - "0e201454ad7c2010200e54ad7c221a20032903f0027c220e200341e0036a" - "41086a290300200a201554ad7c2018200a54ad7c221820032903d0037c22" - "0a200341d0016a41086a2903002005201254ad7c2017200554ad7c221520" - "032903607c220520034180056a41086a290300200d201354ad7c22172003" - "290390057c221020032903e0077c221220034190076a41086a290300200f" - "200d54ad7c2009200f54ad7c7c220d20032903a0077c220f200341d0066a" - "41086a290300200b200954ad7c2007200b54ad7c7c220920032903e0067c" - "220b20034190066a41086a290300200c200754ad7c2008200c54ad7c7c22" - "0720032903a0067c220c200341d0056a41086a2903002016200854ad7c7c" - "220820032903e0057c22167c221b7c221c7c221d7c221320032903b0017c" - "2214200341c0016a41086a29030020032903c001220420067c200454ad7c" - "7c220642fdfff3ffcffffff9897f7e2204420042abd5feffffffbfffb97f" - "4200108781808000200341c0006a2004420042ffffcf8aebffffd51e4200" - "108781808000200341306a2004420042a4ecc3b58fd4b498e70042001087" - "81808000200341206a2004420042bfa5949ccff0d2bbe400420010878180" - "8000200341106a2004420042d7d9ae9ae4f6e98dcb004200108781808000" - "200320044200429acdffcba3bdc4801a4200108781808000200341c0036a" - "41086a290300211e200341b0066a41086a290300211f200341f0066a4108" - "6a2903002120200341b0076a41086a2903002121200341f0076a41086a29" - "03002122200341b0086a41086a290300212320032903c008212420032903" - "8008212520032903c0072126200329038007212720032903d00221282003" - "41d0026a41086a2903002129200341e0026a41086a290300212a20034180" - "076a41086a290300212b200341c0076a41086a290300212c20034180086a" - "41086a290300212d200341c0086a41086a290300212e20032903d008212f" - "200329039008213020032903d007213120032903e0012132200341e0016a" - "41086a290300213320032903f0012134200341f0016a41086a2903002135" - "20034180026a41086a2903002136200341d0076a41086a29030021372003" - "4190086a41086a2903002138200341d0086a41086a290300213920032903" - "e008213a20032903a008213b2003290370213c200341f0006a41086a2903" - "00213d200329038001213e20034180016a41086a290300213f2003290390" - "01214020034190016a41086a2903002141200341a0016a41086a29030021" - "42200341a0086a41086a2903002143200341e0086a41086a290300214420" - "032903f008214520032903002146200341086a2903002147200329031021" - "48200341106a41086a29030021492003290320214a200341206a41086a29" - "0300214b2003290330214c200341306a41086a290300214d200320032903" - "40224e20034190056a41086a2903002010201754ad7c224f20032903b008" - "7c2204200341e0076a41086a2903002012201054ad7c200d201254ad7c7c" - "221020032903f0077c2212200341a0076a41086a290300200f200d54ad7c" - "2009200f54ad7c7c220d20032903b0077c220f200341e0066a41086a2903" - "00200b200954ad7c2007200b54ad7c7c220920032903f0067c220b200341" - "a0066a41086a290300200c200754ad7c2008200c54ad7c7c220720032903" - "b0067c220c200341e0056a41086a2903002016200854ad7c7c2208200341" - "e0006a41086a2903002005201554ad7c201b200554ad7c7c220520032903" - "c0037c2215200341d0036a41086a290300200a201854ad7c201c200a54ad" - "7c7c220a20032903e0027c2216200341f0026a41086a290300200e201a54" - "ad7c201d200e54ad7c7c220e2003290380027c221720034190026a41086a" - "2903002011201954ad7c2013201154ad7c7c221120032903a0017c221820" - "0341b0016a41086a2903002014201354ad7c2006201454ad7c7c22197c22" - "13200341d0006a41086a2903002003290350221420067c201454ad7c7c22" - "1a370380092003204c204020342028202720262025202420232004204f54" - "ad7c2010200454ad7c221b7c220420222012201054ad7c200d201254ad7c" - "7c22067c22102021200f200d54ad7c2009200f54ad7c7c220d7c220f2020" - "200b200954ad7c2007200b54ad7c7c22097c220b201f200c200754ad7c20" - "08200c54ad7c7c22072005200854ad7c2208201e2015200554ad7c200a20" - "1554ad7c7c22057c220c202a2016200a54ad7c200e201654ad7c7c220a7c" - "221220362017200e54ad7c2011201754ad7c7c220e7c2214204220182011" - "54ad7c2019201854ad7c7c22117c2215200341c0006a41086a2903002013" - "204e54ad7c201a201354ad7c7c2213370388092003204a203e2032200820" - "0754ad2005200854ad7c221620312030202f202e2004201b54ad7c200620" - "0454ad7c22177c2204202d2010200654ad7c200d201054ad7c7c22067c22" - "08202c200f200d54ad7c2009200f54ad7c7c220d7c220f202b200b200954" - "ad7c2007200b54ad7c7c22107c22072029200c200554ad7c200a200c54ad" - "7c7c22057c220920352012200a54ad7c200e201254ad7c7c220a7c220b20" - "412014200e54ad7c2011201454ad7c7c220c7c220e204d2015201154ad7c" - "2013201554ad7c7c22113703900920032048203c2007201654ad20052007" - "54ad7c2212203b203a20392004201754ad7c2006200454ad7c22137c2204" - "20382008200654ad7c200d200854ad7c7c22067c22072037200f200d54ad" - "7c2010200f54ad7c7c220d7c220820332009200554ad7c200a200954ad7c" - "7c22057c2209203f200b200a54ad7c200c200b54ad7c7c220a7c220b204b" - "200e200c54ad7c2011200e54ad7c7c220c37039809200320462008201254" - "ad2005200854ad7c2208204520442004201354ad7c2006200454ad7c220e" - "7c220420432007200654ad7c200d200754ad7c7c220d7c2206203d200920" - "0554ad7c200a200954ad7c7c22057c22072049200b200a54ad7c200c200b" - "54ad7c7c22093703a00920032006200854ad2005200654ad7c200341f008" - "6a41086a2903002004200e54ad7c200d200454ad7c7c20472007200554ad" - "7c2009200754ad7c7c3703a809200020034180096a10d680808000200341" - "b0096a2480808080000b3701017f20004100413010858180800021004101" - "10a3808080002101200041306a41e086c0800041301086818080001a2000" - "20013a00600b3a01017f23808080800041306b2201248080808000200020" - "0141004130108581808000220110db808080002100200141306a24808080" - "800020000b42002000200120022003109080808000200041306a20014130" - "6a200241306a2003109080808000200020022d006020012d006022027341" - "0020036b712002733a00600bd80d010b7f23808080800041c0176b220224" - "808080800020012d00c0012103410021042002410010a3808080003a0088" - "03200242f2b7f89e96d4f0950b37038003200242ed95f3a18a8ad68b6737" - "03f802200242bac6f6c9ec89d7a4f9003703f002200242a0d793dfa38deb" - "d6867f3703e802200242dcc3d1d8a2e189d5183703e002200242dde092fb" - "ad92bfe0ad7f3703d802200242e5b583f4e7b1ffc1003703d002200242a2" - "cbbc87dfaeeae9073703c802200242df92b5f096bdedf7bb7f3703c00220" - "0242dac6a9d0caada1f3673703b802200242dab8daf1f5c3bebed9003703" - "b002200242ca98a58286dfc2b9cc003703a802200242f3db839b97c18ac9" - "113703a002200242c78ad690efa1bbdb4237039802200242e7e686aac8d9" - "ad8d1b3703900220024286f099948ec3dfd83b37038802200242c3c1b5e6" - "dbb3b1d0aa7f3703800220024286ec8ff1d98ef0d4a57f3703f801200242" - "d7f9c29aa4b2e4c0053703f001200242ebec8cc3b1ecedb3ef003703e801" - "200242e9ddf2d1d1b3a6ca987f3703e00120024280cbabf1d3f6a4d4a17f" - "3703d8012002429aacd2bde8e4fefab37f3703d0012002429094d094a0f4" - "a3f9753703c80120022001200241c8016a200310d980808000200241c005" - "6a200210e880808000200241c8016a41c400410841a002108e8080800020" - "022802cc0121010240024020022802c8014101460d0020022802d0012105" - "200241c8016a200241c0056a41a0021086818080001a200241c8016a41a0" - "026a200241c8011086818080002106200241003602b805200220053602b4" - "05200220013602b005200241c0056a41c0016a2107200241c0056a41e000" - "6a2108200241c8016a41e0006a2109200241c8046a210a200241c8016a41" - "c0016a2105200241b0056a210b413f2101024003402001417f460d014280" - "8082808080a080e9002001413f71ad88a7210c0240024020044101710d00" - "200c21040c010b41012104200241c8016a10ed80808000200c410171450d" - "00200241e0076a200510ba80808000200241c0086a200a10ba8080800020" - "0241a0096a200241e0076a200610b380808000200241e0166a200a200510" - "bc8080800020024180166a200241e0166a10ba80808000200241a0156a20" - "024180166a200241c0086a10bb8080800020024180166a200241a0156a20" - "0241e0076a10bb80808000200241800a6a20024180166a200241e0076a10" - "b380808000200241e00a6a200241a0096a200241c8016a10bb8080800020" - "0241c00b6a200241e00a6a10ba80808000200241a00c6a200241c00b6a20" - "0241c00b6a10bc80808000200241800d6a200241a00c6a200241a00c6a10" - "bc80808000200241e00d6a200241800d6a200241e00a6a10b38080800020" - "0241e0166a200241800a6a200910bb80808000200241c00e6a200241e016" - "6a200910bb80808000200241a00f6a200241c00e6a200610b38080800020" - "024180106a200241800d6a200241c8016a10b380808000200241e0166a20" - "0241c00e6a10ba8080800020024180166a200241e0166a200241e00d6a10" - "bb80808000200241e0166a20024180166a20024180106a10bb8080800020" - "0241c8016a200241e0166a20024180106a10bb80808000200241e0166a20" - "05200241e00a6a10bc8080800020024180166a200241e0166a10ba808080" - "00200241a0156a20024180166a200241e0076a10bb808080002005200241" - "a0156a200241c00b6a10bb80808000200241e0106a200a200510bc808080" - "00200241e0166a20024180106a200241c8016a10bb80808000200241c011" - "6a200241e0166a200241c00e6a10b380808000200241a0126a2009200241" - "e00d6a10b38080800020024180136a200241a0126a200241a0126a10bc80" - "8080002009200241c0116a20024180136a10bb80808000200241e0166a20" - "0241e0106a10ba80808000200241e0136a200241e0166a200241c0086a10" - "bb80808000200241c0146a200510ba80808000200241a0156a200241e013" - "6a200241c0146a10bb80808000200241e0166a200241a00f6a200241a00f" - "6a10bc8080800020024180166a200241e0166a200241a0156a10bb808080" - "00200241c0056a2005200510bc80808000200241e0166a200241c00e6a10" - "e2808080002008200241e0166a200241e0166a10bc808080002007200241" - "80166a41e0001086818080001a200b200241c0056a41bc8cc0800010ee80" - "8080000b2001417f6a21010c000b0b200241c8016a10ed80808000200220" - "022802b80522013602e016200141c400470d01200020033a000c2000200b" - "290200370200200041086a200b41086a280200360200200241c0176a2480" - "808080000f0b200120022802d00141888cc08000108c80808000000b2002" - "41003602c005200241e0166a200241c0056a10ef80808000000b8e010101" - "7f2380808080004180036b2201248080808000200141a0026a41306a4100" - "41301085818080001a200141a0026a41e086c0800041301086818080001a" - "2001200141a0026a41e000108681808000220141e0006a410041c0011085" - "818080001a200041a0026a410041a0021085818080001a2000200141a002" - "1086818080001a20014180036a2480808080000bd70301157f2380808080" - "0041c00d6b2203248080808000200241e0036a210420024180036a210520" - "0241a0026a2106200241c0016a2107200241e0006a210820012802044103" - "742109200341c0046a41a0026a210a200341a00b6a41c0016a210b200341" - "a00b6a41e0006a210c200341e0036a210d20034180036a210e200341a002" - "6a210f20034180096a41c0016a211020034180096a41e0006a2111200341" - "c0016a2112200341e0006a21132001280200211420012802082115034002" - "4020090d002001201541016a3602082000200241c0041086818080001a20" - "0341c00d6a2480808080000f0b201428020422162d000c20142802002d00" - "607210a380808000211720032002201641046a280200201641086a280200" - "201541cc8cc0800010ae80808000201428020010af808080002003418009" - "6a20032002201710b080808000201120132008201710b080808000201020" - "122007201710b080808000200341a00b6a200f2006201710b08080800020" - "0c200e2005201710b080808000200b200d2004201710b080808000200341" - "c0046a20034180096a41a0021086818080001a200a200341a00b6a41a002" - "1086818080001a2002200341c0046a41c0041086818080001a200941786a" - "2109201441086a21140c000b0b22000240200120024b0d00200220012003" - "10f080808000000b2000200241a0026c6a0bd60301027f23808080800041" - "e00f6b22042480808080002004200241e000108681808000220441e0006a" - "200241e0006a41e0001086818080001a2004200341306a220510dd808080" - "00200441306a200510dd80808000200441e0006a200310dd808080002004" - "41e0006a41306a200310dd80808000200441c0016a2001200241c0016a22" - "02200441e0006a10e980808000200441c00d6a200141e0036a200410b380" - "808000200441a00b6a200441c00d6a200441c00d6a41306a220310b88080" - "8000200441a00b6a41306a200441c00d6a200310b980808000200441e003" - "6a41e0006a200141a0026a2203200410b380808000200441e0036a41c001" - "6a20014180036a200410b380808000200441e0036a200441a00b6a41e000" - "1086818080001a20044180066a200441e0006a200410bc80808000200441" - "e0066a2003200110c38080800020044180096a200441e0066a2002200441" - "80066a10e980808000200441c00d6a20044180096a200441c0016a10b780" - "808000200441a00b6a200441c00d6a200441e0036a10b780808000200441" - "c00d6a200441e0036a10b6808080002000200441c00d6a200441c0016a10" - "c380808000200041a0026a200441a00b6a41a0021086818080001a200441" - "e00f6a2480808080000b2700200020012002200310908080800020004130" - "6a200141306a200241306a20031090808080000b30002000200110e28080" - "8000200041e0006a200141e0006a10e280808000200041c0016a200141c0" - "016a10e2808080000bbd0201097e2000420042002001290300220242abd5" - "feffffffbfffb97f56ad7d2203200129030822047d220542ffffcf8aebff" - "ffd51e7c2206200420028420012903102207842001290318220884200129" - "03202209842001290328220a845022011b3703082000420042abd5feffff" - "ffbfffb97f20027d20011b3703002000420020032003200454ad7d200620" - "0554ad7c423f87220220077d220342a4ecc3b58fd4b498e7007c22042001" - "1b3703102000420020022002200754ad7d2004200354ad7c423f87220220" - "087d220342bfa5949ccff0d2bbe4007c220420011b370318200042002002" - "2002200854ad7d2004200354ad7c423f87220220097d220342d7d9ae9ae4" - "f6e98dcb007c220420011b3703202000420020022002200954ad7d200420" - "0354ad7c423f87200a7d429acdffcba3bdc4801a7c20011b3703280bc701" - "01057f23808080800041c0016b2203248080808000200341306a22042001" - "41306a220510b280808000200320014130108681808000220341e0006a41" - "306a200241306a220641301086818080002107200341e0006a2002413010" - "86818080001a20002003200341e0006a10e1808080002004200541301086" - "818080001a200320014130108681808000220341e0006a20064130108681" - "8080001a2007200241301086818080001a200041306a2003200341e0006a" - "10e180808000200341c0016a2480808080000bcd0b01167f238080808000" - "41a0086b22032480808080002003200241e0006a220420024190016a2205" - "10b980808000200341306a2004200510b880808000200341e0006a200241" - "c0016a2206200241f0016a220710b98080800020034190016a2006200710" - "b880808000200341e0036a41306a2208200141306a220910b28080800020" - "0341e0036a41e0006a200141e0006a220a4130108681808000210b200341" - "e0036a4190016a220c20014190016a220d10b280808000200341e0036a41" - "c0016a200141c0016a220e4130108681808000210f200341e0036a41f001" - "6a2210200141f0016a221110b280808000200341e0036a20014130108681" - "8080001a20034180066a41306a200241306a221241301086818080002113" - "20034180066a200241301086818080001a20034180066a41e0006a200341" - "90016a4130108681808000211420034180066a4190016a200341e0006a41" - "30108681808000211520034180066a41c0016a200341306a413010868180" - "8000211620034180066a41f0016a200341301086818080002117200341c0" - "016a200341e0036a20034180066a10ea8080800020082009413010868180" - "80002108200b200a41301086818080002118200c200d4130108681808000" - "210b200f200e4130108681808000210f201020114130108681808000210c" - "200341e0036a200141301086818080001a20034180066a20124130108681" - "8080001a20132002413010868180800021102014200341e0006a41301086" - "818080002113201520034190016a41301086818080002114201620034130" - "10868180800021152017200341306a41301086818080002116200341c001" - "6a41306a200341e0036a20034180066a10ea808080002008200910b28080" - "80002018200a41301086818080002117200b200d10b280808000200f200e" - "4130108681808000210f200c201110b280808000200341e0036a20014130" - "1086818080001a20034180066a200441301086818080001a201020054130" - "108681808000211020142012413010868180800021142013200241301086" - "818080002113201520034190016a413010868180800021152016200341e0" - "006a41301086818080002116200341a0026a200341e0036a20034180066a" - "10ea8080800020082009413010868180800021082017200a413010868180" - "80002117200b200d4130108681808000210b200f200e4130108681808000" - "210f200c20114130108681808000210c200341e0036a2001413010868180" - "80001a20034180066a200541301086818080001a20102004413010868180" - "800021102013201241301086818080002113201420024130108681808000" - "21142015200341e0006a41301086818080002115201620034190016a4130" - "1086818080002116200341a0026a41306a200341e0036a20034180066a10" - "ea808080002008200910b2808080002017200a4130108681808000211720" - "0b200d10b280808000200f200e4130108681808000210f200c201110b280" - "808000200341e0036a200141301086818080001a20034180066a20064130" - "1086818080001a2010200741301086818080002110201320044130108681" - "808000211320142005413010868180800021142016201241301086818080" - "002116201520024130108681808000211520034180036a200341e0036a20" - "034180066a10ea808080002008200941301086818080001a2017200a4130" - "1086818080001a200b200d41301086818080001a200f200e413010868180" - "80001a200c201141301086818080001a200341e0036a2001413010868180" - "80001a20034180066a200741301086818080001a20102006413010868180" - "80001a2013200541301086818080001a2014200441301086818080001a20" - "15201241301086818080001a2016200241301086818080001a2003418003" - "6a41306a200341e0036a20034180066a10ea808080002000200341c0016a" - "41e000108681808000220241e0006a200341a0026a41e000108681808000" - "1a200241c0016a20034180036a41e0001086818080001a200341a0086a24" - "80808080000bb30301027f23808080800041e0066b220224808080800020" - "02200110ba80808000200241e0006a2001200141e0006a220310b3808080" - "00200241c0016a200241e0006a200241e0006a10bc808080002002418006" - "6a2001200310bb80808000200241a0056a20024180066a200141c0016a22" - "0110bc80808000200241a0026a200241a0056a10ba808080002002418003" - "6a2003200110b380808000200241e0036a20024180036a20024180036a10" - "bc80808000200241c0046a200110ba8080800020024180066a200241e003" - "6a200241e0036a41306a220110b88080800020024180066a41306a220320" - "0241e0036a200110b980808000200020024180066a200210bc8080800020" - "024180066a200241c0046a200241c0046a41306a220110b8808080002003" - "200241c0046a200110b980808000200041e0006a20024180066a200241c0" - "016a10bc8080800020024180066a200241c0016a200241a0026a10bc8080" - "8000200241a0056a20024180066a200241e0036a10bc8080800020024180" - "066a200241a0056a200210bb80808000200041c0016a20024180066a2002" - "41c0046a10bb80808000200241e0066a2480808080000b7c01037f238080" - "80800041e0006b22022480808080002002200141c0016a2203200141f001" - "6a220410b880808000200241306a2003200410b980808000200041c0016a" - "200141e0006a41e0001086818080001a2000200241e00010868180800041" - "e0006a200141e0001086818080001a200241e0006a2480808080000b3e00" - "20002001200210bb80808000200041e0006a200141e0006a200241e0006a" - "10bb80808000200041c0016a200141c0016a200241c0016a10bb80808000" - "0b3601017f23808080800041306b22032480808080002003200210b28080" - "800020002003200110b980808000200341306a2480808080000b87020201" - "7f0c7e23808080800041306b220324808080800020012903082104200229" - "030821052002290328210620012903282107200229032021082001290320" - "21092002290318210a2001290318210b2002290310210c2001290310210d" - "20032002290300220e20012903007c220f3703002003200520047c220420" - "0f200e54ad7c220e3703082003200c200d7c220d2004200554ad200e2004" - "54ad7c7c22043703102003200a200b7c2205200d200c54ad2004200d54ad" - "7c7c22043703182003200820097c220c2005200a54ad2004200554ad7c7c" - "22053703202003200620077c200c200854ad2005200c54ad7c7c37032820" - "00200310d680808000200341306a2480808080000b7401027f2380808080" - "004190016b220224808080800020022001200141306a220310b980808000" - "200241306a2001200310b880808000200241e0006a2001200110b9808080" - "0020002002200241306a10a780808000200041306a200241e0006a200310" - "a78080800020024190016a2480808080000b230020002001200210b88080" - "8000200041306a200141306a200241306a10b8808080000b230020002001" - "200210b980808000200041306a200141306a200241306a10b9808080000b" - "c71f02017f3b7e23808080800041c0076b2202248080808000200241c004" - "6a200129030822034200200129030022044200108781808000200241d004" - "6a20012903102205420020044200108781808000200241e0046a20012903" - "182206420020044200108781808000200241f0046a200129032022074200" - "2004420010878180800020024180056a2001290328220842002004420010" - "8781808000200241a0056a2005420020034200108781808000200241b005" - "6a2006420020034200108781808000200241c0056a200742002003420010" - "8781808000200241d0056a2008420020034200108781808000200241f005" - "6a200642002005420010878180800020024180066a200742002005420010" - "878180800020024190066a2008420020054200108781808000200241b006" - "6a2007420020064200108781808000200241c0066a200842002006420010" - "8781808000200241e0066a20084200200742001087818080002002419005" - "6a2004420020044200108781808000200241e0056a200342002003420010" - "8781808000200241a0066a2005420020054200108781808000200241d006" - "6a2006420020064200108781808000200241f0066a200742002007420010" - "878180800020024180076a2008420020084200108781808000200241b004" - "6a200229039005220642fdfff3ffcffffff9897f7e2203420042abd5feff" - "ffffbfffb97f4200108781808000200241a0046a2003420042ffffcf8aeb" - "ffffd51e420010878180800020024190046a2003420042a4ecc3b58fd4b4" - "98e700420010878180800020024180046a2003420042bfa5949ccff0d2bb" - "e4004200108781808000200241f0036a2003420042d7d9ae9ae4f6e98dcb" - "004200108781808000200241e0036a20034200429acdffcba3bdc4801a42" - "00108781808000200241d0036a20024190056a41086a2903002209200229" - "03c00422084201867c220420022903a0047c2205200241b0046a41086a29" - "030020022903b00422032006427d837c200354ad7c7c220642fdfff3ffcf" - "fffff9897f7e2203420042abd5feffffffbfffb97f420010878180800020" - "0241c0036a2003420042ffffcf8aebffffd51e4200108781808000200241" - "d0026a2003420042a4ecc3b58fd4b498e7004200108781808000200241e0" - "016a2003420042bfa5949ccff0d2bbe4004200108781808000200241f000" - "6a2003420042d7d9ae9ae4f6e98dcb004200108781808000200220034200" - "429acdffcba3bdc4801a4200108781808000200241b0036a20022903c003" - "220a20022903e005220b20022903d004220c200241c0046a41086a290300" - "7c22074201862008423f88847c22082004200954ad7c2209200229039004" - "7c220d200241a0046a41086a2903002005200454ad7c2006200554ad7c7c" - "220e7c2204200241d0036a41086a29030020022903d003220320067c2003" - "54ad7c7c220542fdfff3ffcffffff9897f7e2203420042abd5feffffffbf" - "ffb97f4200108781808000200241a0036a2003420042ffffcf8aebffffd5" - "1e420010878180800020024190036a2003420042a4ecc3b58fd4b498e700" - "420010878180800020024180036a2003420042bfa5949ccff0d2bbe40042" - "00108781808000200241f0026a2003420042d7d9ae9ae4f6e98dcb004200" - "108781808000200241e0026a20034200429acdffcba3bdc4801a42001087" - "81808000200241c0026a20022903a003220f200241e0056a41086a290300" - "2008200b54ad7c2009200854ad7c2210200241d0046a41086a2903002007" - "200c54ad7c220c20022903e0047c220620022903a0057c22084201862007" - "423f88847c22072002290380047c220b20024190046a41086a290300200d" - "200954ad7c200e200d54ad7c7c220920022903d0027c220d200241c0036a" - "41086a2903002004200a54ad7c2005200454ad7c7c220a7c2204200241b0" - "036a41086a29030020022903b003220320057c200354ad7c7c220542fdff" - "f3ffcffffff9897f7e2203420042abd5feffffffbfffb97f420010878180" - "8000200241b0026a2003420042ffffcf8aebffffd51e4200108781808000" - "200241a0026a2003420042a4ecc3b58fd4b498e700420010878180800020" - "024190026a2003420042bfa5949ccff0d2bbe40042001087818080002002" - "4180026a2003420042d7d9ae9ae4f6e98dcb004200108781808000200241" - "f0016a20034200429acdffcba3bdc4801a4200108781808000200241d001" - "6a20022903b0022211200241d0026a41086a290300200d200954ad7c200a" - "200d54ad7c221220022903e0017c220d20024180046a41086a290300200b" - "200754ad7c2009200b54ad7c221320022903f0037c22092007201054ad22" - "0e20022903a0067c2207200241e0046a41086a2903002006200c54ad7c22" - "1020022903f0047c220b20022903b0057c220a200241a0056a41086a2903" - "002008200654ad7c7c22064201862008423f88847c22147c22157c220820" - "02290390037c220c200241a0036a41086a2903002004200f54ad7c200520" - "0454ad7c7c22167c2204200241c0026a41086a29030020022903c0022203" - "20057c200354ad7c7c220542fdfff3ffcffffff9897f7e2203420042abd5" - "feffffffbfffb97f4200108781808000200241c0016a2003420042ffffcf" - "8aebffffd51e4200108781808000200241b0016a2003420042a4ecc3b58f" - "d4b498e7004200108781808000200241a0016a2003420042bfa5949ccff0" - "d2bbe400420010878180800020024190016a2003420042d7d9ae9ae4f6e9" - "8dcb00420010878180800020024180016a20034200429acdffcba3bdc480" - "1a4200108781808000200241e0006a20022903c0012217200241a0066a41" - "086a2903002007200e54ad7c2014200754ad7c2214200241f0046a41086a" - "290300200b201054ad7c22182002290380057c220720022903c0057c220e" - "200241b0056a41086a290300200a200b54ad7c2006200a54ad7c7c220b20" - "022903f0057c220a4201862006423f88847c220620022903e0037c220f20" - "0241f0036a41086a2903002009201354ad7c2015200954ad7c7c22092002" - "2903707c2210200241e0016a41086a290300200d201254ad7c2008200d54" - "ad7c7c220d2002290380037c221220024190036a41086a290300200c2008" - "54ad7c2016200c54ad7c7c220820022903a0027c220c200241b0026a4108" - "6a2903002004201154ad7c2005200454ad7c7c22157c2204200241d0016a" - "41086a29030020022903d001220320057c200354ad7c7c220542fdfff3ff" - "cffffff9897f7e2203420042abd5feffffffbfffb97f4200108781808000" - "200241d0006a2003420042ffffcf8aebffffd51e42001087818080002002" - "41c0006a2003420042a4ecc3b58fd4b498e7004200108781808000200241" - "306a2003420042bfa5949ccff0d2bbe4004200108781808000200241206a" - "2003420042d7d9ae9ae4f6e98dcb004200108781808000200241106a2003" - "4200429acdffcba3bdc4801a4200108781808000200241086a2903002116" - "200241d0066a41086a290300211920024180066a41086a290300211a2002" - "41d0056a41086a290300211b200229039006211c20022903b006211d2002" - "2903e002211e200241e0026a41086a290300211f200241f0026a41086a29" - "03002120200241b0066a41086a290300212120024190066a41086a290300" - "212220022903c006212320022903f006210320022903f0012124200241f0" - "016a41086a2903002125200229038002212620024180026a41086a290300" - "212720024190026a41086a2903002128200241c0066a41086a2903002129" - "20022903e006212a200241f0066a41086a290300212b200229038001212c" - "20024180016a41086a290300212d200229039001212e20024190016a4108" - "6a290300212f20022903a0012130200241a0016a41086a29030021312002" - "41b0016a41086a2903002132200241e0066a41086a290300213320022903" - "8007211120022903102134200241106a41086a2903002135200229032021" - "36200241206a41086a290300213720022903302138200241306a41086a29" - "030021392002290340213a200241c0006a41086a290300213b2002200229" - "0350223c2006201454ad223d20022903d0067c221320024180056a41086a" - "2903002007201854ad7c221820022903d0057c2214200241c0056a41086a" - "290300200e200754ad7c200b200e54ad7c7c22072002290380067c220e20" - "0241f0056a41086a290300200a200b54ad7c7c220b420186200a423f8884" - "7c220a200241e0036a41086a290300200f200654ad7c2009200f54ad7c7c" - "220620022903007c220f200241f0006a41086a2903002010200954ad7c20" - "0d201054ad7c7c220920022903f0027c221020024180036a41086a290300" - "2012200d54ad7c2008201254ad7c7c220d2002290390027c2212200241a0" - "026a41086a290300200c200854ad7c2015200c54ad7c7c220820022903b0" - "017c220c200241c0016a41086a2903002004201754ad7c2005200454ad7c" - "7c22157c2204200241e0006a41086a2903002002290360221720057c2017" - "54ad7c7c2217370390072002203a20302026201e20192013203d54ad7c20" - "0a201354ad7c2213201d201c201b2014201854ad7c2007201454ad7c2214" - "7c2205201a200e200754ad7c200b200e54ad7c7c22077c220e420186200b" - "423f88847c220b2006200a54ad7c220a2016200f200654ad7c2009200f54" - "ad7c7c22067c220f20202010200954ad7c200d201054ad7c7c22097c2210" - "20282012200d54ad7c2008201254ad7c7c220d7c22122032200c200854ad" - "7c2015200c54ad7c7c22087c220c200241d0006a41086a2903002004203c" - "54ad7c2017200454ad7c7c22153703980720022038202e2024200a200b54" - "ad2006200a54ad7c22162003202320222005201454ad7c2007200554ad7c" - "22147c22042021200e200754ad7c7c2205420186200e423f88847c220720" - "0b201354ad7c22137c220b201f200f200654ad7c2009200f54ad7c7c2206" - "7c220a20272010200954ad7c200d201054ad7c7c22097c220e2031201220" - "0d54ad7c2008201254ad7c7c220d7c220f203b200c200854ad7c2015200c" - "54ad7c7c220c3703a00720022036202c200b201654ad2006200b54ad7c22" - "0b202b2007200354ad7c2013200754ad7c2210202a20292004201454ad7c" - "2005200454ad7c22127c22034201862005423f88847c22137c2204202520" - "0a200654ad7c2009200a54ad7c7c22057c2206202f200e200954ad7c200d" - "200e54ad7c7c22077c22082039200f200d54ad7c200c200f54ad7c7c2209" - "3703a807200220342004200b54ad2005200454ad7c220d20112033200320" - "1254ad7c220b4201862003423f88847c22032013201054ad7c220a7c2204" - "202d2006200554ad7c2007200654ad7c7c22057c220620372008200754ad" - "7c2009200854ad7c7c22073703b00720022004200d54ad2005200454ad7c" - "200b423f8820024180076a41086a2903002003201154ad7c200a200354ad" - "7c7c7c20352006200554ad7c2007200654ad7c7c3703b807200020024190" - "076a10d680808000200241c0076a2480808080000be60101037f23808080" - "80004180126b220324808080800020032001200210b480808000200341a0" - "026a200141a0026a2204200241a0026a220510b480808000200341c0046a" - "2002200510c380808000200341e0066a2004200110c38080800020034180" - "096a200341e0066a200341c0046a10b480808000200341a00b6a20034180" - "096a200310b780808000200341c00d6a200341a00b6a200341a0026a10b7" - "80808000200341e00f6a200341a0026a10b6808080002000200341e00f6a" - "200310c380808000200041a0026a200341c00d6a41a0021086818080001a" - "20034180126a2480808080000b3c01017f23808080800041c0046b220224" - "808080800020022000200110be808080002000200241c004108681808000" - "1a200241c0046a2480808080000bd80701077f23808080800041c00d6b22" - "022480808080002002200141e000108681808000220241e0006a200141e0" - "006a220341e0001086818080001a200241c0016a200141c0016a220441e0" - "001086818080001a200241a0026a200141a0026a220541e0001086818080" - "001a20024180036a20014180036a220641e0001086818080001a200241e0" - "036a200141e0036a220741e0001086818080001a200241a00b6a20012006" - "10eb80808000200241c0046a200241a00b6a41e0001086818080001a2002" - "41a0056a200241a00b6a41e0006a220841e0001086818080001a20022002" - "41c0046a200110bb80808000200241a00b6a2002200210bc808080002002" - "200241a00b6a200241c0046a10bc8080800020024180036a200241a0056a" - "200610bc80808000200241a00b6a20024180036a20024180036a10bc8080" - "800020024180036a200241a00b6a200241a0056a10bc80808000200241a0" - "0b6a2005200410eb8080800020024180066a200241a00b6a41e000108681" - "8080001a200241e0066a200841e0001086818080001a200241a00b6a2003" - "200710eb80808000200241c0076a200241a00b6a41e0001086818080001a" - "200241a0086a200841e0001086818080001a200241e0006a20024180066a" - "200310bb80808000200241a00b6a200241e0006a200241e0006a10bc8080" - "8000200241e0006a200241a00b6a20024180066a10bc80808000200241e0" - "036a200241e0066a200710bc80808000200241a00b6a200241e0036a2002" - "41e0036a10bc80808000200241e0036a200241a00b6a200241e0066a10bc" - "80808000200241a00b6a200241a0086a200241a0086a41306a220110b880" - "808000200241a00b6a41306a200241a0086a200110b98080800020024180" - "066a200241a00b6a41e0001086818080001a200241a0026a20024180066a" - "200510bc80808000200241a00b6a200241a0026a200241a0026a10bc8080" - "8000200241a0026a200241a00b6a20024180066a10bc80808000200241c0" - "016a200241c0076a200410bb80808000200241a00b6a200241c0016a2002" - "41c0016a10bc80808000200241c0016a200241a00b6a200241c0076a10bc" - "8080800020024180096a200241e0001086818080001a20024180096a41e0" - "006a200241e0006a41e0001086818080001a20024180096a41c0016a2002" - "41c0016a41e0001086818080001a200241a00b6a200241a0026a41e00010" - "86818080001a200820024180036a41e0001086818080001a200241a00b6a" - "41c0016a200241e0036a41e0001086818080001a200020024180096a41a0" - "0210868180800041a0026a200241a00b6a41a0021086818080001a200241" - "c00d6a2480808080000bcd0102037f017e2380808080004180096b220224" - "8080808000200210ac8080800041002103413f2104034002400240024020" - "04417f460d0042012004413f71ad8642808084808080c080528321052003" - "4101710d01200542005221030c020b200041a0026a200241a0026a10b180" - "8080002000200241a0021086818080001a20024180096a2480808080000f" - "0b200241c0046a200210c0808080002002200241c0046a41c00410868180" - "80001a410121030b02402005500d002002200110bf808080000b2004417f" - "6a21040c000b0b23002000200110db80808000200041306a200141306a10" - "db808080007110a3808080000b3e0020002001200210bc80808000200041" - "e0006a200141e0006a200241e0006a10bc80808000200041c0016a200141" - "c0016a200241c0016a10bc808080000bbc0101047f23808080800041106b" - "2202248080808000200141086a21030340200241086a200310e680808000" - "02400240024020022d0008450d0020022d00092101410121040c010b0240" - "20012802002204450d00200420012802042205470d020b2002200141146a" - "10e68080800020022d0001210120022d000021040b200020013a00012000" - "20044101713a0000200241106a2480808080000f0b200142808080808001" - "37020c20012005417f6a2204360208200120043602040c000b0b6f01057f" - "23808080800041106b220324808080800041002104410121054100210602" - "400340200120062207460d01200341086a200210d080808000200741016a" - "210620032d00080d000b200120076b2104410021050b2000200436020420" - "002005360200200341106a2480808080000bf50401037f23808080800041" - "b0096b22022480808080002002200141306a220310bd8080800020024130" - "6a2002200210b980808000200241e0006a200241306a200241306a10b980" - "80800020024190016a200241e0006a200241e0006a10b980808000200241" - "c0016a2003200141e0006a220410a780808000200241f0016a200410bd80" - "808000200241d0086a200241f0016a200241f0016a10b980808000200241" - "80096a200241d0086a200241d0086a10b980808000200241c0076a200241" - "80096a20024180096a10b980808000200241a0026a200241c0076a200241" - "80096a10b980808000200241d0026a200241a0026a20024190016a10a780" - "80800020024180036a2002200241a0026a10b980808000200241b0036a20" - "0241c0016a20024190016a10a780808000200241e0036a200241a0026a20" - "0241a0026a10b98080800020024190046a200241e0036a200241a0026a10" - "b980808000200241c0046a200220024190046a10b880808000200241f004" - "6a200241c0046a20024180036a10a780808000200241a0056a200241d002" - "6a200241f0046a10b980808000200241d0056a2001200310a78080800020" - "024180066a200241c0046a200241d0056a10a780808000200241b0066a20" - "024180066a20024180066a10b980808000200241b0066a41306a200241a0" - "056a41301086818080001a200241b0066a41e0006a200241b0036a413010" - "86818080001a200241c0076a410041301085818080001a200241c0076a41" - "e0006a410041301085818080001a200241c0076a41306a41e086c0800041" - "301086818080001a2000200241b0066a200241c0076a200410a980808000" - "10c880808000200241b0096a2480808080000bf60601057f238080808000" - "41900d6b220324808080800020032001200210a780808000200341306a20" - "0141306a2204200241306a220510a780808000200341e0006a200141e000" - "6a2206200241e0006a220710a78080800020034190016a2001200410b980" - "808000200341c0016a2002200510b980808000200341f0016a2003419001" - "6a200341c0016a10a780808000200341a0026a2003200341306a10b98080" - "8000200341d0026a200341f0016a200341a0026a10b88080800020034180" - "036a2004200610b980808000200341b0036a2005200710b9808080002003" - "41e0036a20034180036a200341b0036a10a78080800020034190046a2003" - "41306a200341e0006a10b980808000200341c0046a200341e0036a200341" - "90046a10b880808000200341f0046a2001200610b980808000200341a005" - "6a2002200710b980808000200341d0056a200341f0046a200341a0056a10" - "a78080800020034180066a2003200341e0006a10b980808000200341b006" - "6a200341d0056a20034180066a10b880808000200341e0066a2003200310" - "b98080800020034190076a200341e0066a200310b980808000200341800c" - "6a200341e0006a200341e0006a10b980808000200341b00c6a200341800c" - "6a200341800c6a10b980808000200341e00c6a200341b00c6a200341b00c" - "6a10b980808000200341c0076a200341e00c6a200341b00c6a10b9808080" - "00200341f0076a200341306a200341c0076a10b980808000200341a0086a" - "200341306a200341c0076a10b880808000200341a00b6a200341b0066a20" - "0341b0066a10b980808000200341d00b6a200341a00b6a200341a00b6a10" - "b980808000200341e00c6a200341d00b6a200341d00b6a10b98080800020" - "0341d0086a200341e00c6a200341d00b6a10b98080800020034180096a20" - "0341c0046a200341d0086a10a780808000200341b0096a200341d0026a20" - "0341a0086a10a7808080002000200341b0096a20034180096a10b8808080" - "00200341e0096a200341d0086a20034190076a10a780808000200341900a" - "6a200341a0086a200341f0076a10a780808000200041306a200341900a6a" - "200341e0096a10b980808000200341c00a6a20034190076a200341d0026a" - "10a780808000200341f00a6a200341f0076a200341c0046a10a780808000" - "200041e0006a200341f00a6a200341c00a6a10b980808000200341900d6a" - "2480808080000b41002000200120022003109080808000200041306a2001" - "41306a200241306a2003109080808000200041e0006a200141e0006a2002" - "41e0006a20031090808080000bbe0601057f200041786a22012000417c6a" - "280200220241787122006a21030240024020024101710d00200241027145" - "0d012001280200220220006a21000240200120026b2201410028029c97c0" - "8000470d0020032802044103714103470d014100200036029497c0800020" - "032003280204417e7136020420012000410172360204200320003602000f" - "0b2001200210cc808080000b024002400240024002400240200328020422" - "024102710d00200341002802a097c08000460d022003410028029c97c080" - "00460d0320032002417871220210cc808080002001200220006a22004101" - "72360204200120006a20003602002001410028029c97c08000470d014100" - "200036029497c080000f0b20032002417e71360204200120004101723602" - "04200120006a20003602000b2000418002490d0220012000108481808000" - "41002101410041002802b497c08000417f6a22003602b497c0800020000d" - "04024041002802fc94c080002200450d00410021010340200141016a2101" - "200028020822000d000b0b4100200141ff1f200141ff1f4b1b3602b497c0" - "80000f0b410020013602a097c080004100410028029897c0800020006a22" - "0036029897c080002001200041017236020402402001410028029c97c080" - "00470d004100410036029497c080004100410036029c97c080000b200041" - "002802ac97c0800022044d0d0341002802a097c080002200450d03410021" - "02410028029897c0800022054129490d0241f494c0800021010340024020" - "01280200220320004b0d002000200320012802046a490d040b2001280208" - "21010c000b0b4100200136029c97c080004100410028029497c080002000" - "6a220036029497c0800020012000410172360204200120006a2000360200" - "0f0b200041f80171418495c080006a210302400240410028028c97c08000" - "220241012000410376742200710d004100200220007236028c97c0800020" - "0321000c010b200328020821000b200320013602082000200136020c2001" - "200336020c200120003602080f0b024041002802fc94c080002201450d00" - "410021020340200241016a2102200128020822010d000b0b4100200241ff" - "1f200241ff1f4b1b3602b497c08000200520044d0d004100417f3602ac97" - "c080000b0b4d01017f23808080800041206b220224808080800020024100" - "36021020024101360204200242043702082002412e36021c200220003602" - "182002200241186a3602002002200110a480808000000b800601057f0240" - "024002402000417c6a220328020022044178712205410441082004410371" - "22061b20016a490d0002402006450d002005200141276a4b0d020b411020" - "02410b6a4178712002410b491b210102400240024020060d002001418002" - "490d0120052001410472490d01200520016b418180084f0d010c020b2000" - "41786a220720056a21060240024002400240200520014f0d002006410028" - "02a097c08000460d032006410028029c97c08000460d0220062802042204" - "4102710d042004417871220420056a22052001490d042006200410cc8080" - "8000200520016b22024110490d0120032001200328020041017172410272" - "360200200720016a22012002410372360204200720056a22052005280204" - "4101723602042001200210cd8080800020000f0b200520016b2202410f4d" - "0d0420032001200441017172410272360200200720016a22052002410372" - "360204200620062802044101723602042005200210cd8080800020000f0b" - "20032005200328020041017172410272360200200720056a220220022802" - "0441017236020420000f0b410028029497c0800020056a22052001490d01" - "02400240200520016b2202410f4b0d002003200441017120057241027236" - "0200200720056a2202200228020441017236020441002102410021010c01" - "0b20032001200441017172410272360200200720016a2201200241017236" - "0204200720056a2205200236020020052005280204417e713602040b4100" - "200136029c97c080004100200236029497c0800020000f0b410028029897" - "c0800020056a220520014b0d040b0240200210ce8080800022050d004100" - "0f0b20052000417c4178200328020022014103711b20014178716a220120" - "0220012002491b1086818080002102200010c980808000200221000b2000" - "0f0b41e992c08000419893c0800010ca80808000000b41a893c0800041d8" - "93c0800010ca80808000000b200320012004410171724102723602002007" - "20016a2202200520016b22054101723602044100200536029897c0800041" - "0020023602a097c0800020000b820301047f200028020c21020240024002" - "402001418002490d002000280218210302400240024020022000470d0020" - "0041144110200028021422021b6a28020022010d01410021020c020b2000" - "2802082201200236020c200220013602080c010b200041146a200041106a" - "20021b21040340200421052001220241146a200241106a20022802142201" - "1b210420024114411020011b6a28020022010d000b200541003602000b20" - "03450d020240200028021c41027441f493c080006a22012802002000460d" - "0020034110411420032802102000461b6a20023602002002450d030c020b" - "2001200236020020020d014100410028029097c08000417e200028021c77" - "7136029097c080000c020b0240200220002802082204460d002004200236" - "020c200220043602080f0b4100410028028c97c08000417e200141037677" - "7136028c97c080000f0b20022003360218024020002802102201450d0020" - "022001360210200120023602180b20002802142201450d00200220013602" - "14200120023602180f0b0ba00401027f200020016a210202400240200028" - "020422034101710d002003410271450d012000280200220320016a210102" - "40200020036b2200410028029c97c08000470d0020022802044103714103" - "470d014100200136029497c0800020022002280204417e71360204200020" - "01410172360204200220013602000c020b2000200310cc808080000b0240" - "024002400240200228020422034102710d00200241002802a097c0800046" - "0d022002410028029c97c08000460d0320022003417871220310cc808080" - "002000200320016a2201410172360204200020016a200136020020004100" - "28029c97c08000470d014100200136029497c080000f0b20022003417e71" - "36020420002001410172360204200020016a20013602000b024020014180" - "02490d00200020011084818080000f0b200141f80171418495c080006a21" - "0202400240410028028c97c08000220341012001410376742201710d0041" - "00200320017236028c97c08000200221010c010b200228020821010b2002" - "20003602082001200036020c2000200236020c200020013602080f0b4100" - "20003602a097c080004100410028029897c0800020016a220136029897c0" - "8000200020014101723602042000410028029c97c08000470d0141004100" - "36029497c080004100410036029c97c080000f0b4100200036029c97c080" - "004100410028029497c0800020016a220136029497c08000200020014101" - "72360204200020016a20013602000f0b0bc12502087f017e024002400240" - "02400240024002400240200041f4014b0d00410028028c97c08000220141" - "102000410b6a41f803712000410b491b220241037622037622004103710d" - "012002410028029497c080004d0d0720000d02410028029097c080002200" - "0d030c070b2000410b6a22034178712102410028029097c080002204450d" - "06411f21050240200041f4ffff074b0d002002410620034108766722006b" - "7641017120004101746b413e6a21050b410020026b210302402005410274" - "41f493c080006a28020022010d0041002100410021060c040b4100210020" - "024100411920054101766b2005411f461b74210741002106034002402001" - "220128020441787122082002490d00200820026b220820034f0d00200821" - "032001210620080d004100210320012106200121000c060b200128021422" - "082000200820012007411d764104716a41106a2802002201471b20002008" - "1b2100200741017421072001450d040c000b0b024002402000417f734101" - "7120036a22074103742200418495c080006a22022000418c95c080006a28" - "020022032802082206460d002006200236020c200220063602080c010b41" - "002001417e2007777136028c97c080000b20032000410372360204200320" - "006a22002000280204410172360204200341086a0f0b0240024020002003" - "7441022003742200410020006b72716822084103742203418495c080006a" - "22062003418c95c080006a28020022002802082207460d00200720063602" - "0c200620073602080c010b41002001417e2008777136028c97c080000b20" - "002002410372360204200020026a2207200320026b220241017236020420" - "0020036a20023602000240410028029497c080002201450d002001417871" - "418495c080006a2106410028029c97c08000210302400240410028028c97" - "c08000220841012001410376742201710d004100200820017236028c97c0" - "8000200621010c010b200628020821010b20062003360208200120033602" - "0c2003200636020c200320013602080b4100200736029c97c08000410020" - "0236029497c08000200041086a0f0b20006841027441f493c080006a2802" - "00220628020441787120026b210320062101024002400340024020062802" - "1022000d00200628021422000d0020012802182105024002400240200128" - "020c22002001470d00200141144110200128021422001b6a28020022060d" - "01410021000c020b20012802082206200036020c200020063602080c010b" - "200141146a200141106a20001b21070340200721082006220041146a2000" - "41106a200028021422061b210720004114411020061b6a28020022060d00" - "0b200841003602000b2005450d030240200128021c41027441f493c08000" - "6a22062802002001460d0020054110411420052802102001461b6a200036" - "02002000450d040c030b2006200036020020000d024100410028029097c0" - "8000417e200128021c777136029097c080000c030b200028020441787120" - "026b22062003200620034922061b21032000200120061b2101200021060c" - "000b0b20002005360218024020012802102206450d002000200636021020" - "0620003602180b20012802142206450d0020002006360214200620003602" - "180b02400240024020034110490d0020012002410372360204200120026a" - "22022003410172360204200220036a2003360200410028029497c0800022" - "07450d012007417871418495c080006a2106410028029c97c08000210002" - "400240410028028c97c08000220841012007410376742207710d00410020" - "0820077236028c97c08000200621070c010b200628020821070b20062000" - "3602082007200036020c2000200636020c200020073602080c010b200120" - "0320026a2200410372360204200120006a22002000280204410172360204" - "0c010b4100200236029c97c080004100200336029497c080000b20014108" - "6a0f0b024020002006720d004100210641022005742200410020006b7220" - "04712200450d0320006841027441f493c080006a28020021000b2000450d" - "010b0340200020062000280204417871220120026b220820034922051b21" - "04200120024921072008200320051b21080240200028021022010d002000" - "28021421010b2006200420071b21062003200820071b2103200121002001" - "0d000b0b2006450d000240410028029497c0800022002002490d00200320" - "0020026b4f0d010b20062802182105024002400240200628020c22002006" - "470d00200641144110200628021422001b6a28020022010d01410021000c" - "020b20062802082201200036020c200020013602080c010b200641146a20" - "0641106a20001b21070340200721082001220041146a200041106a200028" - "021422011b210720004114411020011b6a28020022010d000b2008410036" - "02000b02402005450d0002400240200628021c41027441f493c080006a22" - "012802002006460d0020054110411420052802102006461b6a2000360200" - "2000450d020c010b2001200036020020000d004100410028029097c08000" - "417e200628021c777136029097c080000c010b2000200536021802402006" - "2802102201450d0020002001360210200120003602180b20062802142201" - "450d0020002001360214200120003602180b0240024020034110490d0020" - "062002410372360204200620026a22002003410172360204200020036a20" - "0336020002402003418002490d00200020031084818080000c020b200341" - "f80171418495c080006a210202400240410028028c97c080002201410120" - "03410376742203710d004100200120037236028c97c08000200221030c01" - "0b200228020821030b200220003602082003200036020c2000200236020c" - "200020033602080c010b2006200320026a2200410372360204200620006a" - "220020002802044101723602040b200641086a0f0b024002400240024002" - "4002400240410028029497c08000220020024f0d000240410028029897c0" - "8000220020024b0d0041002100200241af80046a22064110764000220341" - "7f4622070d0720034110742201450d07410041002802a497c08000410020" - "064180807c7120071b22086a22003602a497c08000410041002802a897c0" - "800022032000200320004b1b3602a897c0800002400240024041002802a0" - "97c080002203450d0041f494c08000210003402000280200220620002802" - "0422076a2001460d02200028020822000d000c030b0b0240024041002802" - "b097c080002200450d00200020014d0d010b410020013602b097c080000b" - "410041ff1f3602b497c08000410020083602f894c08000410020013602f4" - "94c080004100418495c0800036029095c080004100418c95c08000360298" - "95c080004100418495c0800036028c95c080004100419495c080003602a0" - "95c080004100418c95c0800036029495c080004100419c95c080003602a8" - "95c080004100419495c0800036029c95c08000410041a495c080003602b0" - "95c080004100419c95c080003602a495c08000410041ac95c080003602b8" - "95c08000410041a495c080003602ac95c08000410041b495c080003602c0" - "95c08000410041ac95c080003602b495c08000410041bc95c080003602c8" - "95c08000410041b495c080003602bc95c080004100410036028095c08000" - "410041c495c080003602d095c08000410041bc95c080003602c495c08000" - "410041c495c080003602cc95c08000410041cc95c080003602d895c08000" - "410041cc95c080003602d495c08000410041d495c080003602e095c08000" - "410041d495c080003602dc95c08000410041dc95c080003602e895c08000" - "410041dc95c080003602e495c08000410041e495c080003602f095c08000" - "410041e495c080003602ec95c08000410041ec95c080003602f895c08000" - "410041ec95c080003602f495c08000410041f495c0800036028096c08000" - "410041f495c080003602fc95c08000410041fc95c0800036028896c08000" - "410041fc95c0800036028496c080004100418496c0800036029096c08000" - "4100418c96c0800036029896c080004100418496c0800036028c96c08000" - "4100419496c080003602a096c080004100418c96c0800036029496c08000" - "4100419c96c080003602a896c080004100419496c0800036029c96c08000" - "410041a496c080003602b096c080004100419c96c080003602a496c08000" - "410041ac96c080003602b896c08000410041a496c080003602ac96c08000" - "410041b496c080003602c096c08000410041ac96c080003602b496c08000" - "410041bc96c080003602c896c08000410041b496c080003602bc96c08000" - "410041c496c080003602d096c08000410041bc96c080003602c496c08000" - "410041cc96c080003602d896c08000410041c496c080003602cc96c08000" - "410041d496c080003602e096c08000410041cc96c080003602d496c08000" - "410041dc96c080003602e896c08000410041d496c080003602dc96c08000" - "410041e496c080003602f096c08000410041dc96c080003602e496c08000" - "410041ec96c080003602f896c08000410041e496c080003602ec96c08000" - "410041f496c0800036028097c08000410041ec96c080003602f496c08000" - "410041fc96c0800036028897c08000410041f496c080003602fc96c08000" - "410020013602a097c08000410041fc96c0800036028497c0800041002008" - "41586a220036029897c0800020012000410172360204200120006a412836" - "0204410041808080013602ac97c080000c080b200320014f0d0020062003" - "4b0d00200028020c450d030b410041002802b097c0800022002001200020" - "01491b3602b097c08000200120086a210641f494c0800021000240024002" - "400340200028020022072006460d01200028020822000d000c020b0b2000" - "28020c450d010b41f494c080002100024003400240200028020022062003" - "4b0d002003200620002802046a2206490d020b200028020821000c000b0b" - "410020013602a097c080004100200841586a220036029897c08000200120" - "00410172360204200120006a4128360204410041808080013602ac97c080" - "002003200641606a41787141786a22002000200341106a491b2207411b36" - "020441002902f494c080002109200741106a41002902fc94c08000370200" - "20072009370208410020083602f894c08000410020013602f494c0800041" - "00200741086a3602fc94c080004100410036028095c080002007411c6a21" - "00034020004107360200200041046a22002006490d000b20072003460d07" - "20072007280204417e713602042003200720036b22004101723602042007" - "200036020002402000418002490d00200320001084818080000c080b2000" - "41f80171418495c080006a210602400240410028028c97c0800022014101" - "2000410376742200710d004100200120007236028c97c08000200621000c" - "010b200628020821000b200620033602082000200336020c200320063602" - "0c200320003602080c070b200020013602002000200028020420086a3602" - "04200120024103723602042007410f6a41787141786a2206200120026a22" - "006b2103200641002802a097c08000460d032006410028029c97c0800046" - "0d040240200628020422024103714101470d0020062002417871220210cc" - "80808000200220036a2103200620026a220628020421020b20062002417e" - "7136020420002003410172360204200020036a2003360200024020034180" - "02490d00200020031084818080000c060b200341f80171418495c080006a" - "210202400240410028028c97c08000220641012003410376742203710d00" - "4100200620037236028c97c08000200221030c010b200228020821030b20" - "0220003602082003200036020c2000200236020c200020033602080c050b" - "4100200020026b220336029897c08000410041002802a097c08000220020" - "026a22063602a097c0800020062003410172360204200020024103723602" - "04200041086a21000c060b410028029c97c0800021030240024020002002" - "6b2206410f4b0d004100410036029c97c080004100410036029497c08000" - "20032000410372360204200320006a220020002802044101723602040c01" - "0b4100200636029497c080004100200320026a220136029c97c080002001" - "2006410172360204200320006a2006360200200320024103723602040b20" - "0341086a0f0b2000200720086a360204410041002802a097c08000220041" - "0f6a417871220341786a22063602a097c080004100200020036b41002802" - "9897c0800020086a22036a41086a220136029897c0800020062001410172" - "360204200020036a4128360204410041808080013602ac97c080000c030b" - "410020003602a097c080004100410028029897c0800020036a2203360298" - "97c08000200020034101723602040c010b4100200036029c97c080004100" - "410028029497c0800020036a220336029497c08000200020034101723602" - "04200020036a20033602000b200141086a0f0b41002100410028029897c0" - "8000220320024d0d004100200320026b220336029897c080004100410028" - "02a097c08000220020026a22063602a097c0800020062003410172360204" - "20002002410372360204200041086a0f0b20000b4301017f238080808000" - "41206b2201248080808000200141003602182001410136020c200141d085" - "c0800036020820014204370210200141086a200010a480808000000b4e01" - "037f024020012802042202200128020822034e0d0020012003417f6a2204" - "36020820012802002d000020044107717641017110a38080800021040b20" - "0020043a0001200020022003483a00000b18002001200085220042002000" - "7d84427f5510a3808080000b10002000417f7341017110a3808080000bf2" - "0202017f017e23808080800041f0006b2206248080808000200620013602" - "0c2006200036020820062003360214200620023602102006410236021c20" - "0641c08dc08000360218024020042802000d002006410336025c200641f4" - "8dc08000360258200642033702642006418280808000ad42208622072006" - "41106aad8437034820062007200641086aad843703402006418380808000" - "ad422086200641186aad843703382006200641386a360260200641d8006a" - "200510a480808000000b200641206a41106a200441106a29020037030020" - "0641206a41086a200441086a290200370300200620042902003703202006" - "410436025c200641a88ec080003602582006420437026420064182808080" - "00ad4220862207200641106aad8437035020062007200641086aad843703" - "482006418480808000ad422086200641206aad8437034020064183808080" - "00ad422086200641186aad843703382006200641386a360260200641d800" - "6a200510a480808000000bb30301037f2380808080004180016b22022480" - "8080800020002802002100024002400240200128021422034110710d0020" - "03412071450d0120002d0000210341810121000340200220006a417e6a20" - "03410f712204413072200441376a2004410a491b3a0000200341ff017122" - "0441047621032000417f6a21002004410f4b0d000b200141fd8ec0800041" - "02200220006a417f6a41810120006b10d58080800021000c020b20002d00" - "00210341810121000340200220006a417e6a2003410f7122044130722004" - "41d7006a2004410a491b3a0000200341ff0171220441047621032000417f" - "6a21002004410f4b0d000b200141fd8ec080004102200220006a417f6a41" - "810120006b10d58080800021000c010b024002400240024020002d000022" - "0341e400490d002002200341e4006e2204419c7f6c20036a41ff01714101" - "7441ff8ec080006a2f00003b0001410021000c010b410221002003410a4f" - "0d01200321040b200220006a20044130723a00000c010b41012100200220" - "0341017441ff8ec080006a2f00003b00010b200141014100200220006a20" - "0041037310d58080800021000b20024180016a24808080800020000bb605" - "01087f20002802142205410171220620046a21070240024020054104710d" - "00410021010c010b0240024020020d00410021080c010b02402002410371" - "22090d000c010b410021082001210a03402008200a2c000041bf7f4a6a21" - "08200a41016a210a2009417f6a22090d000b0b200820076a21070b412b41" - "8080c40020061b2106024020002802000d000240200028021c220a200028" - "0220220820062001200210f480808000450d0041010f0b200a2003200420" - "0828020c11808080800080808080000f0b02400240024002402000280204" - "220a20074b0d00200028021c220a2000280220220820062001200210f480" - "808000450d0141010f0b2005410871450d01200028021021052000413036" - "021020002d0018210b4101210c200041013a0018200028021c2208200028" - "0220220920062001200210f4808080000d02200a20076b41016a210a0240" - "0340200a417f6a220a450d01200841302009280210118180808000808080" - "8000450d000b41010f0b0240200820032004200928020c11808080800080" - "80808000450d0041010f0b2000200b3a00182000200536021041000f0b20" - "0a20032004200828020c1180808080008080808000210c0c010b200a2007" - "6b2105024002400240410120002d0018220a200a4103461b220a0e030200" - "01020b2005210a410021050c010b2005410176210a200541016a41017621" - "050b200a41016a210a2000280210210720002802202108200028021c2109" - "02400340200a417f6a220a450d0120092007200828021011818080800080" - "80808000450d000b41010f0b4101210c2009200820062001200210f48080" - "80000d00200920032004200828020c11808080800080808080000d004100" - "210a034002402005200a470d0020052005490f0b200a41016a210a200920" - "0720082802101181808080008080808000450d000b200a417f6a2005490f" - "0b200c0be802010d7e2000200129032822022001290300220342d5aa8180" - "8080c080c6007c2204200354ad427f7c22052005200129030822067c2205" - "200654ad7c2005428180b0f5948080aa617c2207200554ad7c427f7c423f" - "8722052005200129031022087c2205200854ad7c200542dc93bccaf0abcb" - "e7987f7c2209200554ad7c427f7c423f87220520052001290318220a7c22" - "05200a54ad7c200542c1daebe3b08fadc49b7f7c220b200554ad7c427f7c" - "423f87220520052001290320220c7c2205200c54ad7c200542a9a6d1e59b" - "8996f2b47f7c220d200554ad7c427f7c423f872205200220057c22052002" - "54ad7c200542e6b280b4dcc2bbff657c220e200554ad7c2205427f7c2202" - "83420020057d2205200e83843703282000200c2002832005200d83843703" - "202000200a2002832005200b838437031820002008200283200520098384" - "370310200020062002832005200783843703082000200320028320052004" - "83843703000b2c0002402002450d0041002d00e893c080001a200210ce80" - "80800021010b20002002360204200020013602000b5a01017f2380808080" - "0041106b2202248080808000200241086a20002000280200410141a00210" - "8b80808000024020022802082200418180808078460d002000200228020c" - "2001108c80808000000b200241106a2480808080000b4800200020012002" - "200310b080808000200041e0006a200141e0006a200241e0006a200310b0" - "80808000200020022d00c00120012d00c001220273410020036b71200273" - "3a00c0010b2b00200020012002200310b080808000200020022d00602001" - "2d0060220273410020036b712002733a00600b8501002000290300200129" - "030010d1808080002000290308200129030810d1808080007110a3808080" - "002000290310200129031010d1808080007110a380808000200029031820" - "0129031810d1808080007110a3808080002000290320200129032010d180" - "8080007110a3808080002000290328200129032810d1808080007110a380" - "8080000bda0602017f067e23808080800041306b22022480808080002002" - "2001290000220342388620034280fe0383422886842003428080fc078342" - "1886200342808080f80f834208868484200342088842808080f80f832003" - "421888428080fc07838420034228884280fe038320034238888484842204" - "37032820022001290008220342388620034280fe03834228868420034280" - "80fc0783421886200342808080f80f834208868484200342088842808080" - "f80f832003421888428080fc07838420034228884280fe03832003423888" - "848484220537032020022001290010220342388620034280fe0383422886" - "842003428080fc0783421886200342808080f80f83420886848420034208" - "8842808080f80f832003421888428080fc07838420034228884280fe0383" - "2003423888848484220637031820022001290018220342388620034280fe" - "0383422886842003428080fc0783421886200342808080f80f8342088684" - "84200342088842808080f80f832003421888428080fc0783842003422888" - "4280fe038320034238888484842207370310200220012900202203423886" - "20034280fe0383422886842003428080fc0783421886200342808080f80f" - "834208868484200342088842808080f80f832003421888428080fc078384" - "20034228884280fe03832003423888848484220837030820022001290028" - "220342388620034280fe0383422886842003428080fc0783421886200342" - "808080f80f834208868484200342088842808080f80f8320034218884280" - "80fc07838420034228884280fe0383200342388884848422033703002002" - "419087c0800010dd80808000200342d5aa81808080c080c6007c200354ad" - "427f7c2203200820037c2203200854ad7c2003428180b0f5948080aa617c" - "200354ad7c427f7c423f872203200720037c2203200754ad7c200342dc93" - "bccaf0abcbe7987f7c200354ad7c427f7c423f872203200620037c220320" - "0654ad7c200342c1daebe3b08fadc49b7f7c200354ad7c427f7c423f8722" - "03200520037c2203200554ad7c200342a9a6d1e59b8996f2b47f7c200354" - "ad7c427f7c423f872203200420037c2203200454ad7c200342e6b280b4dc" - "c2bbff657c200354ad7ca741016a41017110a38080800021012000200241" - "3010868180800020013a0030200241306a2480808080000b3901017f2380" - "8080800041306b220224808080800020022000200110a780808000200020" - "0241301086818080001a200241306a2480808080000b9b1602017f177e23" - "808080800041a0056b2201248080808000200141b0046a20002903002202" - "42fdfff3ffcffffff9897f7e2203420042abd5feffffffbfffb97f420010" - "8781808000200141a0046a2003420042ffffcf8aebffffd51e4200108781" - "80800020014190046a2003420042a4ecc3b58fd4b498e700420010878180" - "800020014180046a2003420042bfa5949ccff0d2bbe40042001087818080" - "00200141f0036a2003420042d7d9ae9ae4f6e98dcb004200108781808000" - "200141e0036a20034200429acdffcba3bdc4801a42001087818080002001" - "41d0036a20012903a004220420002903087c2205200141b0046a41086a29" - "0300200220012903b00422037c200354ad7c7c220242fdfff3ffcffffff9" - "897f7e2203420042abd5feffffffbfffb97f4200108781808000200141c0" - "036a2003420042ffffcf8aebffffd51e4200108781808000200141d0026a" - "2003420042a4ecc3b58fd4b498e7004200108781808000200141e0016a20" - "03420042bfa5949ccff0d2bbe4004200108781808000200141f0006a2003" - "420042d7d9ae9ae4f6e98dcb004200108781808000200120034200429acd" - "ffcba3bdc4801a4200108781808000200141b0036a20012903c003220620" - "0129039004220720002903107c2208200141a0046a41086a290300200520" - "0454ad7c2002200554ad7c7c22097c2205200141d0036a41086a29030020" - "012903d003220320027c200354ad7c7c220242fdfff3ffcffffff9897f7e" - "2203420042abd5feffffffbfffb97f4200108781808000200141a0036a20" - "03420042ffffcf8aebffffd51e420010878180800020014190036a200342" - "0042a4ecc3b58fd4b498e700420010878180800020014180036a20034200" - "42bfa5949ccff0d2bbe4004200108781808000200141f0026a2003420042" - "d7d9ae9ae4f6e98dcb004200108781808000200141e0026a20034200429a" - "cdffcba3bdc4801a4200108781808000200141c0026a20012903a003220a" - "200129038004220b20002903187c220420014190046a41086a2903002008" - "200754ad7c2009200854ad7c7c220820012903d0027c2207200141c0036a" - "41086a2903002005200654ad7c2002200554ad7c7c220c7c2205200141b0" - "036a41086a29030020012903b003220320027c200354ad7c7c220242fdff" - "f3ffcffffff9897f7e2203420042abd5feffffffbfffb97f420010878180" - "8000200141b0026a2003420042ffffcf8aebffffd51e4200108781808000" - "200141a0026a2003420042a4ecc3b58fd4b498e700420010878180800020" - "014190026a2003420042bfa5949ccff0d2bbe40042001087818080002001" - "4180026a2003420042d7d9ae9ae4f6e98dcb004200108781808000200141" - "f0016a20034200429acdffcba3bdc4801a4200108781808000200141d001" - "6a20012903b002220d20012903f003220e20002903207c22062001418004" - "6a41086a2903002004200b54ad7c2008200454ad7c7c220420012903e001" - "7c2209200141d0026a41086a2903002007200854ad7c200c200754ad7c7c" - "22082001290390037c2207200141a0036a41086a2903002005200a54ad7c" - "2002200554ad7c7c220c7c2205200141c0026a41086a29030020012903c0" - "02220320027c200354ad7c7c220242fdfff3ffcffffff9897f7e22034200" - "42abd5feffffffbfffb97f4200108781808000200141c0016a2003420042" - "ffffcf8aebffffd51e4200108781808000200141b0016a2003420042a4ec" - "c3b58fd4b498e7004200108781808000200141a0016a2003420042bfa594" - "9ccff0d2bbe400420010878180800020014190016a2003420042d7d9ae9a" - "e4f6e98dcb00420010878180800020014180016a20034200429acdffcba3" - "bdc4801a4200108781808000200141e0006a20012903c001220f20012903" - "e003221020002903287c220a200141f0036a41086a2903002006200e54ad" - "7c2004200654ad7c7c220620012903707c220b200141e0016a41086a2903" - "002009200454ad7c2008200954ad7c7c22042001290380037c2209200141" - "90036a41086a2903002007200854ad7c200c200754ad7c7c220820012903" - "a0027c2207200141b0026a41086a2903002005200d54ad7c2002200554ad" - "7c7c220c7c2205200141d0016a41086a29030020012903d001220320027c" - "200354ad7c7c220242fdfff3ffcffffff9897f7e2203420042abd5feffff" - "ffbfffb97f4200108781808000200141d0006a2003420042ffffcf8aebff" - "ffd51e4200108781808000200141c0006a2003420042a4ecc3b58fd4b498" - "e7004200108781808000200141306a2003420042bfa5949ccff0d2bbe400" - "4200108781808000200141206a2003420042d7d9ae9ae4f6e98dcb004200" - "108781808000200141106a20034200429acdffcba3bdc4801a4200108781" - "808000200141b0016a41086a290300210d20014190026a41086a29030021" - "0e200141f0026a41086a2903002111200141086a290300211220012903e0" - "022113200129038002211420012903a001211520012903402116200141c0" - "006a41086a2903002117200120012903502218200141e0036a41086a2903" - "00200a201054ad7c2006200a54ad7c221020012903007c2203200141f000" - "6a41086a290300200b200654ad7c2004200b54ad7c7c220620012903f002" - "7c220a20014180036a41086a2903002009200454ad7c2008200954ad7c7c" - "22042001290390027c2209200141a0026a41086a2903002007200854ad7c" - "200c200754ad7c7c220820012903b0017c2207200141c0016a41086a2903" - "002005200f54ad7c2002200554ad7c7c220b7c2205200141e0006a41086a" - "2903002001290360220c20027c200c54ad7c7c220c3703f0042001201620" - "152014201320122003201054ad7c2006200354ad7c220f7c22032011200a" - "200654ad7c2004200a54ad7c7c22027c2206200e2009200454ad7c200820" - "0954ad7c7c22047c2209200d2007200854ad7c200b200754ad7c7c22087c" - "2207200141d0006a41086a2903002005201854ad7c200c200554ad7c7c22" - "0a3703f8042001200141e0026a41086a2903002003200f54ad7c20022003" - "54ad7c220b20012903f0017c220320014180026a41086a29030020062002" - "54ad7c2004200654ad7c7c22052001290390017c2202200141a0016a4108" - "6a2903002009200454ad7c2008200954ad7c7c220420012903307c220620" - "172007200854ad7c200a200754ad7c7c2208370380052001200141f0016a" - "41086a2903002003200b54ad7c2005200354ad7c22072001290380017c22" - "0320014190016a41086a2903002002200554ad7c2004200254ad7c7c2205" - "20012903207c2202200141306a41086a2903002006200454ad7c20082006" - "54ad7c7c220837038805200120014180016a41086a2903002003200754ad" - "7c2005200354ad7c220420012903107c2203200141206a41086a29030020" - "02200554ad7c2008200254ad7c7c2205370390052001200141106a41086a" - "2903002003200454ad7c2005200354ad7c37039805200141c0046a200141" - "f0046a10d68080800020012903c004220342aad580808080a080237c2003" - "54ad427f7c2203200320012903c80422057c2203200554ad7c2003428180" - "d8ba8a8080d5707c200354ad7c427f7c423f872203200320012903d00422" - "057c2203200554ad7c200342ee899ea5f8d5e5b3cc007c200354ad7c427f" - "7c423f872203200320012903d80422057c2203200554ad7c200342a1edf5" - "b1d8c796e2cd007c200354ad7c427f7c423f872203200320012903e00422" - "057c2203200554ad7c20034295d3e8f2cd848bb95a7c200354ad7c427f7c" - "423f872203200320012903e80422057c2203200554ad7c200342b399809a" - "aee1ddff727c200354ad7ca741016a41017110a38080800010d280808000" - "2100200141a0056a24808080800020000bb60103037f017e017f23808080" - "800041e0006b2203248080808000200341e086c080004130108681808000" - "2104200241306a21050240034020052002460d01200541786a2205290300" - "2106413f210303402003417f460d01200441306a200410bd808080002004" - "200441306a41301086818080002107024020062003413f71ad8842018350" - "0d002007200110dd808080000b2003417f6a21030c000b0b0b2000200441" - "301086818080001a200441e0006a2480808080000b1c00200010a9808080" - "00200041306a10a9808080007110a3808080000bf50706027f067e027f01" - "7e017f027e23808080800041f0016b220324808080800041002104420021" - "05420021064200210742002108420021094200210a02400340200441054b" - "0d01200420044106496a210b200120044103746a210c4200210d41a07f21" - "0e02400340200e450d01200341b0016a2002200e6a220441e0006a290300" - "4200200c200e6a41e0006a290300220f4200108781808000200341a0016a" - "200441e8006a2903004200200f420010878180800020034190016a200441" - "f0006a2903004200200f420010878180800020034180016a200441f8006a" - "2903004200200f4200108781808000200341f0006a20044180016a290300" - "4200200f4200108781808000200341e0006a20044188016a290300420020" - "0f4200108781808000200d200341e0006a41086a29030020032903602210" - "200a7c220f201054ad7c200f200341f0006a41086a290300200329037022" - "1020097c220a201054ad7c200a20034180016a41086a2903002003290380" - "01221020087c2209201054ad7c200920034190016a41086a290300200329" - "039001221020077c2208201054ad7c2008200341a0016a41086a29030020" - "032903a001221020067c2207201054ad7c2007200341b0016a41086a2903" - "0020032903b001220620057c2205200654ad7c7c2206200754ad7c7c2207" - "200854ad7c7c2208200954ad7c7c2209200a54ad7c7c220a200f54ad7c7c" - "210d200e41306a210e0c000b0b200341d0006a200542fdfff3ffcffffff9" - "897f7e220f420042abd5feffffffbfffb97f4200108781808000200341c0" - "006a200f420042ffffcf8aebffffd51e4200108781808000200341306a20" - "0f420042a4ecc3b58fd4b498e7004200108781808000200341206a200f42" - "0042bfa5949ccff0d2bbe4004200108781808000200341106a200f420042" - "d7d9ae9ae4f6e98dcb0042001087818080002003200f4200429acdffcba3" - "bdc4801a4200108781808000200d200341086a2903002003290300221020" - "0a7c220f201054ad7c200f200341106a41086a2903002003290310221020" - "097c220a201054ad7c200a200341206a41086a2903002003290320221020" - "087c2209201054ad7c2009200341306a41086a2903002003290330221020" - "077c2208201054ad7c2008200341c0006a41086a29030020032903402210" - "20067c2207201054ad7c2007200341d0006a41086a290300200329035022" - "0620057c200654ad7c7c2205200754ad7c7c2206200854ad7c7c22072009" - "54ad7c7c2208200a54ad7c7c2209200f54ad7c7c210a200b21040c000b0b" - "2003200a3703e801200320093703e001200320083703d801200320073703" - "d001200320063703c801200320053703c0012000200341c0016a10d68080" - "8000200341f0016a2480808080000b1c002000200110b280808000200041" - "306a200141306a10b2808080000be20103037f017e017f23808080800041" - "c0016b2203248080808000200341306a410041301085818080001a200341" - "e086c0800041301086818080002104200241306a21050240034020052002" - "460d01200541786a22052903002106413f210303402003417f460d012004" - "41e0006a200410ba808080002004200441e0006a41e00010868180800021" - "07024020062003413f71ad88420183500d00200741e0006a2007200110b3" - "808080002007200741e0006a41e0001086818080001a0b2003417f6a2103" - "0c000b0b0b2000200441e0001086818080001a200441c0016a2480808080" - "000b900202017f017e23808080800041b0036b2202248080808000200241" - "004130108581808000220241e0006a410041301085818080001a20024130" - "6a41e086c0800041301086818080001a20024190016a2001419001108681" - "8080001a42808082808080a080e90021030240034020034200510d012002" - "41a0026a20024190016a10c68080800020024190016a200241a0026a4190" - "011086818080001a02402003420183500d00200241a0026a200220024190" - "016a10c7808080002002200241a0026a4190011086818080001a0b200342" - "018821030c000b0b200241a0026a200210e58080800020002002200241a0" - "026a41900110868180800022024190011086818080001a200241b0036a24" - "80808080000b3400200041306a200141306a10b280808000200041e0006a" - "200141e0006a41301086818080001a2000200141301086818080001a0b6b" - "01037f23808080800041106b22022480808080000240024020012802000d" - "00410021030c010b200241086a200110d0808080004101210320022d0009" - "210420022d00080d0041002103200141003602000b200020043a00012000" - "20033a0000200241106a2480808080000b7501027f23808080800041e000" - "6b2201248080808000200141306a410041301085818080001a200141e086" - "c0800041301086818080002101410110a38080800021022000410041e000" - "108581808000220041e0006a200141e0001086818080001a200020023a00" - "c001200141e0006a2480808080000b920101017f23808080800041c0016b" - "2202248080808000200041e0006a200141e0006a41e0001086818080001a" - "200241306a410041301085818080001a200241e086c08000413010868180" - "8000220241e0006a410041e0001085818080001a200041c0016a20022002" - "41e0006a20012d00c00110b0808080002000200141e0001086818080001a" - "200241c0016a2480808080000baa0201047f23808080800041e0036b2204" - "24808080800020042001200210b380808000200441e0006a200141e0006a" - "2205200310b38080800020044180036a200141c0016a2206200310b38080" - "8000200441a0026a20044180036a20044180036a41306a220710b8808080" - "00200441a0026a41306a20044180036a200710b9808080002000200441a0" - "026a200410bc80808000200441a0026a2002200310bc8080800020044180" - "036a2001200510bc80808000200441c0016a200441a0026a20044180036a" - "10b38080800020044180036a200441c0016a200410bb80808000200041e0" - "006a20044180036a200441e0006a10bb8080800020044180036a20062002" - "10b380808000200041c0016a20044180036a200441e0006a10bc80808000" - "200441e0036a2480808080000bf50706027f067e027f017e017f027e2380" - "8080800041f0016b22032480808080004100210442002105420021064200" - "210742002108420021094200210a02400340200441054b0d012004200441" - "06496a210b200120044103746a210c4200210d41e07d210e02400340200e" - "450d01200341b0016a2002200e6a220441a0026a2903004200200c200e6a" - "41a0026a290300220f4200108781808000200341a0016a200441a8026a29" - "03004200200f420010878180800020034190016a200441b0026a29030042" - "00200f420010878180800020034180016a200441b8026a2903004200200f" - "4200108781808000200341f0006a200441c0026a2903004200200f420010" - "8781808000200341e0006a200441c8026a2903004200200f420010878180" - "8000200d200341e0006a41086a29030020032903602210200a7c220f2010" - "54ad7c200f200341f0006a41086a2903002003290370221020097c220a20" - "1054ad7c200a20034180016a41086a290300200329038001221020087c22" - "09201054ad7c200920034190016a41086a29030020032903900122102007" - "7c2208201054ad7c2008200341a0016a41086a29030020032903a0012210" - "20067c2207201054ad7c2007200341b0016a41086a29030020032903b001" - "220620057c2205200654ad7c7c2206200754ad7c7c2207200854ad7c7c22" - "08200954ad7c7c2209200a54ad7c7c220a200f54ad7c7c210d200e41306a" - "210e0c000b0b200341d0006a200542fdfff3ffcffffff9897f7e220f4200" - "42abd5feffffffbfffb97f4200108781808000200341c0006a200f420042" - "ffffcf8aebffffd51e4200108781808000200341306a200f420042a4ecc3" - "b58fd4b498e7004200108781808000200341206a200f420042bfa5949ccf" - "f0d2bbe4004200108781808000200341106a200f420042d7d9ae9ae4f6e9" - "8dcb0042001087818080002003200f4200429acdffcba3bdc4801a420010" - "8781808000200d200341086a29030020032903002210200a7c220f201054" - "ad7c200f200341106a41086a2903002003290310221020097c220a201054" - "ad7c200a200341206a41086a2903002003290320221020087c2209201054" - "ad7c2009200341306a41086a2903002003290330221020077c2208201054" - "ad7c2008200341c0006a41086a2903002003290340221020067c22072010" - "54ad7c2007200341d0006a41086a2903002003290350220620057c200654" - "ad7c7c2205200754ad7c7c2206200854ad7c7c2207200954ad7c7c220820" - "0a54ad7c7c2209200f54ad7c7c210a200b21040c000b0b2003200a3703e8" - "01200320093703e001200320083703d801200320073703d0012003200637" - "03c801200320053703c0012000200341c0016a10d680808000200341f001" - "6a2480808080000bdc0101027f2380808080004180036b22032480808080" - "002003200110ba80808000200341e0006a200210ba80808000200341c001" - "6a200341e0006a200341e0006a41306a220410b880808000200341c0016a" - "41306a200341e0006a200410b9808080002000200341c0016a200310bc80" - "808000200341c0016a2001200210bc80808000200341a0026a200341c001" - "6a10ba80808000200341c0016a200341a0026a41e0001086818080001a20" - "0341c0016a200310ec80808000200041e0006a200341c0016a200341e000" - "6a10bb8080800020034180036a2480808080000b3c01017f238080808000" - "41e0006b220224808080800020022000200110bb808080002000200241e0" - "001086818080001a200241e0006a2480808080000b9f0701037f23808080" - "800041a0116b2201248080808000200141a0026a200010ba808080002001" - "4180036a200041e0006a220210ba80808000200141e0036a20014180036a" - "10ba80808000200141c0106a20014180036a200010bc80808000200141e0" - "0f6a200141c0106a10ba80808000200141800f6a200141e00f6a200141a0" - "026a10bb80808000200141c0046a200141800f6a200141e0036a10bb8080" - "8000200141a0056a200141c0046a200141c0046a10bc80808000200141c0" - "106a200141a0026a200141a0026a10bc8080800020014180066a200141c0" - "106a200141a0026a10bc80808000200141e0066a200020014180066a10bc" - "80808000200141c0076a20014180066a10ba80808000200141a0086a2000" - "41c0016a220310ba80808000200141c0106a200141c0076a200141a0056a" - "10bb80808000200141e00f6a200141c0106a200141a0056a10bb80808000" - "2000200141e00f6a41e0001086818080002100200141c0106a2003200210" - "bc80808000200141e00f6a200141c0106a10ba80808000200141800f6a20" - "0141e00f6a20014180036a10bb80808000200141e00f6a200141800f6a20" - "0141a0086a10bb808080002003200141e00f6a41e0001086818080002103" - "200141c0106a200141a0056a200010bb80808000200141e00f6a200141c0" - "106a20014180066a10b3808080002002200141e00f6a41e0001086818080" - "00210220014180096a200141e0036a200141e0036a10bc80808000200141" - "e0096a20014180096a20014180096a10bc80808000200141c00a6a200141" - "e0096a200141e0096a10bc808080002002200141c00a6a10ec8080800020" - "0141a00b6a20014180066a200141a0086a10b380808000200141800c6a20" - "0141a00b6a200141a00b6a10bc80808000200141e00c6a200141800c6a10" - "e280808000200141c0106a200141e0066a10ba80808000200141e00f6a20" - "0141c0106a200141a0026a10bb80808000200141c00d6a200141e00f6a20" - "0141c0076a10bb80808000200141a00e6a20014180036a20014180036a10" - "bc80808000200141800f6a200141a00e6a200141a00e6a10bc8080800020" - "0141e00f6a200141c00d6a200141800f6a10bb80808000200141c0106a20" - "03200141a0086a10b3808080002001200141c0106a200141c0106a10bc80" - "808000200141e0006a200141e00c6a41e0001086818080001a200141c001" - "6a200141e00f6a41e0001086818080001a200041e8036a200141ac8cc080" - "0010ee80808000200141a0116a2480808080000b4201017f024020002802" - "0822032000280200470d002000200210d8808080000b2000280204200341" - "a0026c6a200141a0021086818080001a2000200341016a3602080b4c0101" - "7f23808080800041106b2202248080808000200241988cc0800036020c20" - "022000360208200241086a41b08dc080002002410c6a41b08dc080002001" - "419c8cc0800010d380808000000b7902017f017e23808080800041306b22" - "0324808080800020032001360204200320003602002003410236020c2003" - "41a08dc08000360208200342023702142003418580808000ad4220862204" - "2003ad8437032820032004200341046aad843703202003200341206a3602" - "10200341086a200210a480808000000b0f002000280200200110f2808080" - "000be10201067f23808080800041106b2202248080808000410a21030240" - "024020004190ce004f0d00200021040c010b410a21030340200241066a20" - "036a2205417c6a20004190ce006e220441f0b1036c20006a220641ffff03" - "7141e4006e220741017441ff8ec080006a2f00003b00002005417e6a2007" - "419c7f6c20066a41ffff037141017441ff8ec080006a2f00003b00002003" - "417c6a2103200041ffc1d72f4b21052004210020050d000b0b0240024020" - "0441e3004b0d00200421000c010b200241066a2003417e6a22036a200441" - "ffff037141e4006e2200419c7f6c20046a41ffff037141017441ff8ec080" - "006a2f00003b00000b024002402000410a490d00200241066a2003417e6a" - "22036a200041017441ff8ec080006a2f00003b00000c010b200241066a20" - "03417f6a22036a20004130723a00000b200141014100200241066a20036a" - "410a20036b10d5808080002100200241106a24808080800020000b380201" - "7f017e23808080800041106b220124808080800020002902002102200120" - "0036020c20012002370204200141046a108181808000000b490002402002" - "418080c400460d002000200220012802101181808080008080808000450d" - "0041010f0b024020030d0041000f0b200020032004200128020c11808080" - "800080808080000b7902017f017e23808080800041306b22032480808080" - "0020032001360204200320003602002003410236020c2003419c91c08000" - "360208200342023702142003418580808000ad4220862204200341046aad" - "84370328200320042003ad843703202003200341206a360210200341086a" - "200210a480808000000b1c0020002802002001200028020428020c118180" - "80800080808080000b14002001200028020020002802041092808080000b" - "1400200128021c2001280220200010f9808080000bbb05010a7f23808080" - "800041306b22032480808080002003200136022c20032000360228200341" - "033a00242003422037021c41002104200341003602142003410036020c02" - "400240024002400240200228021022050d00200228020c2200450d012002" - "280208220120004103746a21062000417f6a41ffffffff017141016a2104" - "2002280200210003400240200041046a2802002207450d00200328022820" - "002802002007200328022c28020c11808080800080808080000d040b2001" - "2802002003410c6a200141046a28020011818080800080808080000d0320" - "0041086a2100200141086a22012006470d000c020b0b2002280214220145" - "0d00200141057421082001417f6a41ffffff3f7141016a21042002280208" - "2109200228020021004100210703400240200041046a2802002201450d00" - "200328022820002802002001200328022c28020c11808080800080808080" - "000d030b2003200520076a220141106a28020036021c20032001411c6a2d" - "00003a00242003200141186a2802003602202001410c6a28020021064100" - "210a4100210b024002400240200141086a2802000e03010002010b200641" - "0374210c4100210b2009200c6a220c2802000d01200c28020421060b4101" - "210b0b200320063602102003200b36020c200141046a2802002106024002" - "40024020012802000e03010002010b2006410374210b2009200b6a220b28" - "02000d01200b28020421060b4101210a0b200320063602182003200a3602" - "142009200141146a2802004103746a22012802002003410c6a200141046a" - "28020011818080800080808080000d02200041086a21002008200741206a" - "2207470d000b0b200420022802044f0d0120032802282002280200200441" - "03746a22012802002001280204200328022c28020c118080808000808080" - "8000450d010b410121010c010b410021010b200341306a24808080800020" - "010b6001027f20002802042102200028020021030240200028020822002d" - "0000450d00200341f48ec080004104200228020c11808080800080808080" - "00450d0041010f0b20002001410a463a0000200320012002280210118180" - "80800080808080000b1200200041dc8ec08000200110f9808080000b7902" - "017f017e23808080800041306b2203248080808000200320013602042003" - "20003602002003410236020c200341d091c0800036020820034202370214" - "2003418580808000ad4220862204200341046aad84370328200320042003" - "ad843703202003200341206a360210200341086a200210a480808000000b" - "ab0201037f2380808080004180016b220224808080800020002802002100" - "024002400240200128021422034110710d0020034120710d012000280200" - "200110f28080800021000c020b2000280200210041810121030340200220" - "036a417e6a2000410f712204413072200441d7006a2004410a491b3a0000" - "2003417f6a21032000410f4b21042000410476210020040d000b200141fd" - "8ec080004102200220036a417f6a41810120036b10d58080800021000c01" - "0b2000280200210041810121030340200220036a417e6a2000410f712204" - "413072200441376a2004410a491b3a00002003417f6a21032000410f4b21" - "042000410476210020040d000b200141fd8ec080004102200220036a417f" - "6a41810120036b10d58080800021000b20024180016a2480808080002000" - "0b0900200041003602000b990101027f23808080800041106b2204248080" - "808000410041002802f093c08000220541016a3602f093c0800002402005" - "4100480d000240024041002d00bc97c080000d00410041002802b897c080" - "0041016a3602b897c0800041002802ec93c08000417f4a0d010c020b2004" - "41086a200020011182808080008080808000000b410041003a00bc97c080" - "002002450d00108081808000000b000b0300000b0b002000108281808000" - "000bba0101037f23808080800041106b2201248080808000200028020022" - "0228020c2103024002400240024020022802040e020001020b20030d0141" - "012102410021030c020b20030d0020022802002202280204210320022802" - "0021020c010b20014180808080783602002001200036020c200141868080" - "8000200028020822002d000820002d000910ff80808000000b2001200336" - "0204200120023602002001418780808000200028020822002d000820002d" - "000910ff80808000000b0c00200020012902003703000bc30201047f411f" - "21020240200141ffffff074b0d002001410620014108766722026b764101" - "7120024101746b413e6a21020b200042003702102000200236021c200241" - "027441f493c080006a21030240410028029097c080004101200274220471" - "0d0020032000360200200020033602182000200036020c20002000360208" - "4100410028029097c0800020047236029097c080000f0b02400240024020" - "0328020022042802044178712001470d00200421020c010b200141004119" - "20024101766b2002411f461b742103034020042003411d764104716a4110" - "6a22052802002202450d0220034101742103200221042002280204417871" - "2001470d000b0b20022802082203200036020c2002200036020820004100" - "3602182000200236020c200020033602080f0b2005200036020020002004" - "3602182000200036020c200020003602080baa0301057f02400240200241" - "104f0d00200021030c010b02402000410020006b41037122046a22052000" - "4d0d002004417f6a21062000210302402004450d00200421072000210303" - "40200320013a0000200341016a21032007417f6a22070d000b0b20064107" - "490d000340200320013a0000200341076a20013a0000200341066a20013a" - "0000200341056a20013a0000200341046a20013a0000200341036a20013a" - "0000200341026a20013a0000200341016a20013a0000200341086a220320" - "05470d000b0b024020052005200220046b2202417c716a22034f0d002001" - "41ff017141818284086c2107034020052007360200200541046a22052003" - "490d000b0b200241037121020b02402003200320026a22074f0d00200241" - "7f6a2104024020024107712205450d000340200320013a0000200341016a" - "21032005417f6a22050d000b0b20044107490d000340200320013a000020" - "0341076a20013a0000200341066a20013a0000200341056a20013a000020" - "0341046a20013a0000200341036a20013a0000200341026a20013a000020" - "0341016a20013a0000200341086a22032007470d000b0b20000ba5050108" - "7f02400240200241104f0d00200021030c010b02402000410020006b4103" - "7122046a220520004d0d002004417f6a2106200021032001210702402004" - "450d002004210820002103200121070340200320072d00003a0000200741" - "016a2107200341016a21032008417f6a22080d000b0b20064107490d0003" - "40200320072d00003a0000200341016a200741016a2d00003a0000200341" - "026a200741026a2d00003a0000200341036a200741036a2d00003a000020" - "0341046a200741046a2d00003a0000200341056a200741056a2d00003a00" - "00200341066a200741066a2d00003a0000200341076a200741076a2d0000" - "3a0000200741086a2107200341086a22032005470d000b0b200520022004" - "6b2208417c7122066a210302400240200120046a22074103710d00200520" - "034f0d0120072101034020052001280200360200200141046a2101200541" - "046a22052003490d000c020b0b200520034f0d0020074103742202411871" - "21042007417c71220941046a2101410020026b411871210a200928020021" - "0203402005200220047620012802002202200a7472360200200141046a21" - "01200541046a22052003490d000b0b20084103712102200720066a21010b" - "02402003200320026a22054f0d002002417f6a2108024020024107712207" - "450d000340200320012d00003a0000200141016a2101200341016a210320" - "07417f6a22070d000b0b20084107490d000340200320012d00003a000020" - "0341016a200141016a2d00003a0000200341026a200141026a2d00003a00" - "00200341036a200141036a2d00003a0000200341046a200141046a2d0000" - "3a0000200341056a200141056a2d00003a0000200341066a200141066a2d" - "00003a0000200341076a200141076a2d00003a0000200141086a21012003" - "41086a22032005470d000b0b20000b6e01067e2000200342ffffffff0f83" - "2205200142ffffffff0f8322067e22072003422088220820067e22062005" - "200142208822097e7c22054220867c220a3703002000200820097e200520" - "0654ad4220862005422088847c200a200754ad7c200420017e200320027e" - "7c7c3703080bea0901087f024002400240200020016b20024f0d00200120" - "026a2103200020026a210420024110490d014100200441037122056b2106" - "02402004417c71220720044f0d002005417f6a21080240024020050d0020" - "0321090c010b2005210a2003210903402004417f6a22042009417f6a2209" - "2d00003a0000200a417f6a220a0d000b0b20084103490d002009417c6a21" - "0903402004417f6a200941036a2d00003a00002004417e6a200941026a2d" - "00003a00002004417d6a200941016a2d00003a00002004417c6a22042009" - "2d00003a00002009417c6a210920072004490d000b0b2007200220056b22" - "09417c7122026b2104410020026b210a02400240200320066a2203410371" - "0d00200420074f0d01200920016a417c6a210103402007417c6a22072001" - "2802003602002001417c6a210120042007490d000c020b0b200420074f0d" - "002003410374220241187121052003417c712208417c6a2101410020026b" - "41187121062008280200210203402007417c6a2207200220067420012802" - "002202200576723602002001417c6a210120042007490d000b0b20094103" - "7121022003200a6a21030c010b02400240200241104f0d00200021040c01" - "0b02402000410020006b410371220a6a220920004d0d00200a417f6a2105" - "20002104200121070240200a450d00200a21032000210420012107034020" - "0420072d00003a0000200741016a2107200441016a21042003417f6a2203" - "0d000b0b20054107490d000340200420072d00003a0000200441016a2007" - "41016a2d00003a0000200441026a200741026a2d00003a0000200441036a" - "200741036a2d00003a0000200441046a200741046a2d00003a0000200441" - "056a200741056a2d00003a0000200441066a200741066a2d00003a000020" - "0441076a200741076a2d00003a0000200741086a2107200441086a220420" - "09470d000b0b20092002200a6b2203417c7122056a210402400240200120" - "0a6a22074103710d00200920044f0d012007210103402009200128020036" - "0200200141046a2101200941046a22092004490d000c020b0b200920044f" - "0d0020074103742202411871210a2007417c71220841046a210141002002" - "6b411871210620082802002102034020092002200a762001280200220220" - "067472360200200141046a2101200941046a22092004490d000b0b200341" - "03712102200720056a21010b2004200420026a22094f0d012002417f6a21" - "03024020024107712207450d000340200420012d00003a0000200141016a" - "2101200441016a21042007417f6a22070d000b0b20034107490d01034020" - "0420012d00003a0000200441016a200141016a2d00003a0000200441026a" - "200141026a2d00003a0000200441036a200141036a2d00003a0000200441" - "046a200141046a2d00003a0000200441056a200141056a2d00003a000020" - "0441066a200141066a2d00003a0000200441076a200141076a2d00003a00" - "00200141086a2101200441086a22042009470d000c020b0b200420026b22" - "0720044f0d002002417f6a2109024020024103712201450d000340200441" - "7f6a22042003417f6a22032d00003a00002001417f6a22010d000b0b2009" - "4103490d002003417c6a210103402004417f6a200141036a2d00003a0000" - "2004417e6a200141026a2d00003a00002004417d6a200141016a2d00003a" - "00002004417c6a220420012d00003a00002001417c6a210120072004490d" - "000b0b20000b0e002000200120021088818080000b0bf2130100418080c0" - "000be8132f72757374632f34656231363132353065333430633866343866" - "3636653262393239656634613562656437633138312f6c6962726172792f" - "636f72652f7372632f697465722f7472616974732f6974657261746f722e" - "72730000100058000000b307000009000000000000000000000001000000" - "0800000063616c6c65642060526573756c743a3a756e7772617028296020" - "6f6e20616e2060457272602076616c75652f72757374632f346562313631" - "323530653334306338663438663636653262393239656634613562656437" - "633138312f6c6962726172792f616c6c6f632f7372632f736c6963652e72" - "73000000a30010004a000000a10000001900000054727946726f6d536c69" - "63654572726f720000000100000000000000d80210005e000000b4020000" - "090000002f72757374632f34656231363132353065333430633866343866" - "3636653262393239656634613562656437633138312f6c6962726172792f" - "636f72652f7372632f736c6963652f697465722e727300002c0110004e00" - "0000f6050000150000007372632f6c69622e727300008c0110000a000000" - "1f000000160000008c0110000a00000028000000310000008c0110000a00" - "000028000000440000004661696c656420746f20646573657269616c697a" - "6520766b8c0110000a0000002f000000310000008c0110000a0000002f00" - "0000440000008c0110000a000000620000001f0000008c0110000a000000" - "630000000a0000008c0110000a00000064000000170000008c0110000a00" - "0000650000000a0000008c0110000a00000066000000170000008c011000" - "0a000000670000000a0000004661696c656420746f20646573657269616c" - "697a6520614661696c656420746f20646573657269616c697a6520624661" - "696c656420746f20646573657269616c697a652063496e76616c69642062" - "7974657320666f72205363616c61726361706163697479206f766572666c" - "6f770000bd021000110000002f686f6d652f6f706964736b6f706e79692f" - "2e636172676f2f72656769737472792f7372632f696e6465782e63726174" - "65732e696f2d313934396366386336623562353537662f737562746c652d" - "322e362e312f7372632f6c69622e72730000000000000400000004000000" - "0900000001000000d80210005e000000bd0200000900000000000000fdff" - "02000000097602000cc40b00f4ebba58c7535798485f455752705358ce77" - "6dec56a2971a075c93e480fac35ef6154617341c341fdff4f104d109a6e6" - "760ad5b6954c6c47e58dc0839d93a988eb672d9519b5853e799aaae3ca92" - "e58f9811abeaffffffbf7feeffff54acffffaa07893dac3da834ccd9af44" - "e13ce1d21dd935ebd290ede9c692a6f95f8e7a448006a9aafffffffffeb9" - "ffff53b1feffab1e24f6b0f6a0d23067bf1285f3844b7764d7ac4b43b6a7" - "1b4b9ae67f39ea11011aaaeaffffffbf7feeffff54acffffaa07893dac3d" - "a834ccd9af44e13ce1d21dd935ebd290ede9c692a6f95f8e7a44800655d5" - "ffffff7fffdcffffa958ffff550f127b587b506998b35f89c279c2a53bb2" - "6bd6a521dbd38d254df3bf1cf588000df3ff0c00000027aa0a0034fc3200" - "cc537f800a6b7ae98f47d724bae6be7ed3b12fab78bf3b73c98e7ede833d" - "5145d609e8648a791b36f1302a5ace7eabddb8f3f77715c63acaa8169b02" - "fd74f82f6ac26e1c706066b7363660611b24aba41b05f3ff0c00000027aa" - "0a0034fc3200cc537f800a6b7ae98f47d724bae6be7ed3b12fab78bf3b73" - "c98e7ede833d5145d609f3ff0c00000027aa0a0034fc3200cc537f800a6b" - "7ae98f47d724bae6be7ed3b12fab78bf3b73c98e7ede833d5145d6092e55" - "270000007644200048439a00b8dc598b6e4acee97e6fc65ba9c0b73003b1" - "b7541efbfcb14061e1b40b7f09be81032e55270000007644200048439a00" - "b8dc598b6e4acee97e6fc65ba9c0b73003b1b7541efbfcb14061e1b40b7f" - "09be81032f686f6d652f6f706964736b6f706e79692f2e636172676f2f72" - "656769737472792f7372632f696e6465782e6372617465732e696f2d3139" - "34396366386336623562353537662f626c7331325f3338312d302e382e30" - "2f7372632f70616972696e67732e72730000a00510006600000016020000" - "1500000044000000a0051000660000001b02000009000000a00510006600" - "0000050200001d000000a005100066000000090200001d000000a0051000" - "660000003802000032000000a00510006600000044020000320000002969" - "6e646578206f7574206f6620626f756e64733a20746865206c656e206973" - "20206275742074686520696e64657820697320006d061000200000008d06" - "1000120000000000000004000000040000000a0000003d3d617373657274" - "696f6e20606c6566742020726967687460206661696c65640a20206c6566" - "743a200a2072696768743a200000c206100010000000d206100017000000" - "e90610000900000020726967687460206661696c65643a200a20206c6566" - "743a20000000c2061000100000000c071000100000001c07100009000000" - "e9061000090000003a200000010000000000000048071000020000000000" - "00000c000000040000000b0000000c0000000d000000202020202c0a2828" - "0a3078303030313032303330343035303630373038303931303131313231" - "333134313531363137313831393230323132323233323432353236323732" - "383239333033313332333333343335333633373338333934303431343234" - "333434343534363437343834393530353135323533353435353536353735" - "383539363036313632363336343635363636373638363937303731373237" - "333734373537363737373837393830383138323833383438353836383738" - "3838393930393139323933393439353936393739383939617474656d7074" - "20746f20646976696465206279207a65726f4708100019000000206f7574" - "206f662072616e676520666f7220736c696365206f66206c656e67746820" - "72616e676520656e6420696e6465782000008a0810001000000068081000" - "22000000736c69636520696e646578207374617274732061742020627574" - "20656e64732061742000ac08100016000000c20810000d00000028292f72" - "757374632f34656231363132353065333430633866343866363665326239" - "3239656634613562656437633138312f6c6962726172792f616c6c6f632f" - "7372632f7261775f7665632e72730000e20810004c000000280200001100" - "00002f727573742f646570732f646c6d616c6c6f632d302e322e372f7372" - "632f646c6d616c6c6f632e7273617373657274696f6e206661696c65643a" - "207073697a65203e3d2073697a65202b206d696e5f6f7665726865616400" - "4009100029000000a804000009000000617373657274696f6e206661696c" - "65643a207073697a65203c3d2073697a65202b206d61785f6f7665726865" - "616400004009100029000000ae0400000d00000000c94e046e616d65000e" - "0d7761736d5f6c69622e7761736d01914e8a01008a015f5a4e3130325f24" - "4c5424636f72652e2e697465722e2e61646170746572732e2e6d61702e2e" - "4d6170244c5424492443244624475424247532302461732475323024636f" - "72652e2e697465722e2e7472616974732e2e6974657261746f722e2e4974" - "657261746f72244754243973697a655f68696e7431376833383630386236" - "62663263303736666145014c5f5a4e34636f72653970616e69636b696e67" - "313170616e69635f636f6e7374323370616e69635f636f6e73745f646976" - "5f62795f7a65726f3137683033346433623765633138373166373545024d" - "5f5a4e34636f726533707472343364726f705f696e5f706c616365244c54" - "247761736d5f6c69622e2e566572696679696e674b657924475424313768" - "393064303131346662343063613937644503475f5a4e35616c6c6f633772" - "61775f7665633230526177566563496e6e6572244c542441244754243130" - "6465616c6c6f636174653137683235303163353461663065323831336145" - "04505f5a4e34636f726533707472343664726f705f696e5f706c61636524" - "4c5424616c6c6f632e2e7665632e2e566563244c54247538244754242447" - "5424313768663462323737666433376462353031654505565f5a4e34636f" - "726533707472353264726f705f696e5f706c616365244c5424626c733132" - "5f3338312e2e70616972696e67732e2e4732507265706172656424475424" - "313768623964653634383231343939353539344506675f5a4e34636f7265" - "33707472363964726f705f696e5f706c616365244c5424616c6c6f632e2e" - "7665632e2e566563244c5424626c7331325f3338312e2e7363616c61722e" - "2e5363616c61722447542424475424313768376265333235646130373238" - "386634384507385f5a4e35616c6c6f63337665633136566563244c542454" - "244324412447542434707573683137686236356465366561306165303964" - "31374508435f5a4e35616c6c6f63377261775f7665633139526177566563" - "244c54245424432441244754243867726f775f6f6e653137686531306535" - "65303538376531393262664509495f5a4e35616c6c6f6335736c69636532" - "395f244c5424696d706c2475323024247535622454247535642424475424" - "36746f5f76656331376836333665656464383765653761373437450a4d5f" - "5a4e35616c6c6f63377261775f7665633230526177566563496e6e657224" - "4c542441244754243136776974685f63617061636974795f696e31376861" - "653336636161393636356566343833450b4b5f5a4e35616c6c6f63377261" - "775f7665633230526177566563496e6e6572244c54244124475424313467" - "726f775f616d6f7274697a65643137686439353064656131373163323030" - "3035450c335f5a4e35616c6c6f63377261775f766563313268616e646c65" - "5f6572726f7231376863613161646630343635323765396532450d0e5f5f" - "727573745f6465616c6c6f630e4c5f5a4e35616c6c6f63377261775f7665" - "633230526177566563496e6e6572244c5424412447542431357472795f61" - "6c6c6f636174655f696e3137686534626630623334333637646136646345" - "0f5e5f5a4e36355f244c5424626c7331325f3338312e2e67312e2e473141" - "6666696e65247532302461732475323024636f72652e2e6f70732e2e6172" - "6974682e2e4e656724475424336e65673137683434323138626332316532" - "65356663314510725f5a4e36395f244c5424626c7331325f3338312e2e66" - "702e2e4670247532302461732475323024737562746c652e2e436f6e6469" - "74696f6e616c6c7953656c65637461626c65244754243138636f6e646974" - "696f6e616c5f73656c656374313768386165306466613830666434313139" - "364511605f5a4e36375f244c5424636f72652e2e61727261792e2e547279" - "46726f6d536c6963654572726f72247532302461732475323024636f7265" - "2e2e666d742e2e44656275672447542433666d7431376863303634386262" - "31393264393231376545122e5f5a4e34636f726533666d7439466f726d61" - "747465723370616431376833316663303133336231396665333065451367" - "5f5a4e36385f244c5424636f72652e2e666d742e2e6275696c646572732e" - "2e50616441646170746572247532302461732475323024636f72652e2e66" - "6d742e2e5772697465244754243977726974655f73747231376834353537" - "3732653638643462343039364514385f5a4e36737562746c65313743744f" - "7074696f6e244c5424542447542436657870656374313768623863663632" - "323139313530313333334515495f5a4e34345f244c542424524624542475" - "32302461732475323024636f72652e2e666d742e2e446973706c61792447" - "542433666d74313768353633396538653836623831393165364516355f5a" - "4e34636f72653970616e69636b696e6731336173736572745f6661696c65" - "64313768393337633632373834633734396537664517385f5a4e36737562" - "746c65313743744f7074696f6e244c542454244754243665787065637431" - "3768633764316533383030323138386237654518705f5a4e38315f244c54" - "24616c6c6f632e2e7665632e2e566563244c542454244324412447542424" - "7532302461732475323024636f72652e2e6f70732e2e696e6465782e2e49" - "6e646578244c542449244754242447542435696e64657831376862376565" - "6135613738316438393239374519405f5a4e34636f726535736c69636535" - "696e6465783232736c6963655f696e6465785f6f726465725f6661696c31" - "376866663036393161306536326561633864451a425f5a4e34636f726535" - "736c69636535696e6465783234736c6963655f656e645f696e6465785f6c" - "656e5f6661696c31376861383936346133343065666132346537451b0861" - "6c6c6f636174651c13646573657269616c697a655f67315f7761736d1d32" - "5f5a4e34636f726536726573756c743133756e777261705f6661696c6564" - "31376861313838333239383461636266333830451e3e5f5a4e39626c7331" - "325f333831326731384731416666696e65313566726f6d5f636f6d707265" - "7373656431376832333963336331363436646339303436451f355f5a4e38" - "7761736d5f6c69623139646573657269616c697a655f67325f7761736d31" - "37683530336430613839336365653362666645203e5f5a4e39626c733132" - "5f333831326732384732416666696e65313566726f6d5f636f6d70726573" - "7365643137686333616566303334336638323663626245211462656c6c6d" - "616e5f67726f746831365f7465737422335f5a4e39626c7331325f333831" - "367363616c6172365363616c617233737562313768656363643066636134" - "373035653937364523285f5a4e36737562746c6539626c61636b5f626f78" - "313768633661663135363636663731396234384524305f5a4e34636f7265" - "3970616e69636b696e673970616e69635f666d7431376862393162616461" - "636536656538323837452585015f5a4e3130325f244c5424626c7331325f" - "3338312e2e67312e2e473150726f6a656374697665247532302461732475" - "323024636f72652e2e636f6e766572742e2e46726f6d244c542424524624" - "626c7331325f3338312e2e67312e2e4731416666696e6524475424244754" - "243466726f6d3137686634356430353636343237373335316445262e5f5a" - "4e39626c7331325f33383132667032467036696e76657274313768366335" - "3632643539653638646633633245272b5f5a4e39626c7331325f33383132" - "6670324670336d756c313768646666623336663036373139613633374528" - "365f5a4e39626c7331325f333831326731384731416666696e6538696465" - "6e746974793137686236366162643638326233626339356345292f5f5a4e" - "39626c7331325f3338313266703246703769735f7a65726f313768333962" - "31303634343730313433376536452a785f5a4e37355f244c5424626c7331" - "325f3338312e2e67312e2e4731416666696e652475323024617324753230" - "24737562746c652e2e436f6e646974696f6e616c6c7953656c6563746162" - "6c65244754243138636f6e646974696f6e616c5f73656c65637431376833" - "323735393935653930646636613863452b85015f5a4e3130325f244c5424" - "626c7331325f3338312e2e70616972696e67732e2e473250726570617265" - "64247532302461732475323024636f72652e2e636f6e766572742e2e4672" - "6f6d244c5424626c7331325f3338312e2e67322e2e4732416666696e6524" - "475424244754243466726f6d313768353930643863663565363536346465" - "66452c2f5f5a4e39626c7331325f33383134667031323446703132336f6e" - "6531376839346666616330666264306163343332452d90015f5a4e313033" - "5f244c5424626c7331325f3338312e2e70616972696e67732e2e6d756c74" - "695f6d696c6c65725f6c6f6f702e2e416464657224753230246173247532" - "3024626c7331325f3338312e2e70616972696e67732e2e4d696c6c65724c" - "6f6f70447269766572244754243133646f75626c696e675f737465703137" - "6833346536393232613038346336343933452e705f5a4e38315f244c5424" - "616c6c6f632e2e7665632e2e566563244c54245424432441244754242475" - "32302461732475323024636f72652e2e6f70732e2e696e6465782e2e496e" - "646578244c542449244754242447542435696e6465783137686539346538" - "6262303063326535366564452f2e5f5a4e39626c7331325f333831387061" - "6972696e677333656c6c3137683264393865303762336132336635313345" - "30745f5a4e37315f244c5424626c7331325f3338312e2e6670322e2e4670" - "32247532302461732475323024737562746c652e2e436f6e646974696f6e" - "616c6c7953656c65637461626c65244754243138636f6e646974696f6e61" - "6c5f73656c6563743137686366633738633362393036656661383945315a" - "5f5a4e36315f244c5424626c7331325f3338312e2e6670362e2e46703624" - "7532302461732475323024636f72652e2e6f70732e2e61726974682e2e4e" - "656724475424336e65673137686230666536353636326461326334343345" - "322b5f5a4e39626c7331325f333831326670324670336e65673137683861" - "363566633733316133386134393745332d5f5a4e39626c7331325f333831" - "3366703233467032336d756c313768326433373464346666306563343037" - "6245345a5f5a4e36315f244c5424626c7331325f3338312e2e6670362e2e" - "467036247532302461732475323024636f72652e2e6f70732e2e61726974" - "682e2e4d756c24475424336d756c31376865613934393735323931313764" - "3166634535305f5a4e39626c7331325f3338313366703633467036367371" - "756172653137683866633831663539663666313530643145363c5f5a4e39" - "626c7331325f333831336670363346703631376d756c5f62795f6e6f6e72" - "6573696475653137686432663865613131393236643732653945375a5f5a" - "4e36315f244c5424626c7331325f3338312e2e6670362e2e467036247532" - "302461732475323024636f72652e2e6f70732e2e61726974682e2e537562" - "24475424337375623137686137396663636566323762323631323445382b" - "5f5a4e39626c7331325f3338313266703246703373756231376865646439" - "32336439323032346633366445392b5f5a4e39626c7331325f3338313266" - "703246703361646431376863366562626430363731666432643965453a30" - "5f5a4e39626c7331325f3338313366703233467032367371756172653137" - "6865663238666434623836356230653732453b2d5f5a4e39626c7331325f" - "333831336670323346703233737562313768636330663365343532313765" - "61393964453c2d5f5a4e39626c7331325f33383133667032334670323361" - "646431376864363030363832376137333934646563453d2e5f5a4e39626c" - "7331325f3338313266703246703673717561726531376835616337663530" - "666666393136623065453e605f5a4e36375f244c542424524624626c7331" - "325f3338312e2e667031322e2e4670313224753230246173247532302463" - "6f72652e2e6f70732e2e61726974682e2e4d756c24475424336d756c3137" - "6863613137343239383666636366353565453f6a5f5a4e36395f244c5424" - "626c7331325f3338312e2e667031322e2e46703132247532302461732475" - "323024636f72652e2e6f70732e2e61726974682e2e4d756c41737369676e" - "2447542431306d756c5f61737369676e3137683037326534616130343436" - "63356334314540655f5a4e39626c7331325f3338313870616972696e6773" - "31364d696c6c65724c6f6f70526573756c74323066696e616c5f6578706f" - "6e656e74696174696f6e31376379636c6f746f6d69635f73717561726531" - "3768613463633461633966316338323538644541635f5a4e39626c733132" - "5f3338313870616972696e677331364d696c6c65724c6f6f70526573756c" - "74323066696e616c5f6578706f6e656e74696174696f6e31356379636f6c" - "6f746f6d69635f6578703137686166636437313637356662666432373645" - "425d5f5a4e36325f244c5424626c7331325f3338312e2e6670322e2e4670" - "32247532302461732475323024737562746c652e2e436f6e7374616e7454" - "696d654571244754243563745f6571313768316264323735363036643361" - "6461366445435a5f5a4e36315f244c5424626c7331325f3338312e2e6670" - "362e2e467036247532302461732475323024636f72652e2e6f70732e2e61" - "726974682e2e416464244754243361646431376835343330336164316564" - "646333613837454491015f5a4e3131345f244c5424636f72652e2e697465" - "722e2e61646170746572732e2e666c617474656e2e2e466c61744d617024" - "4c542449244324552443244624475424247532302461732475323024636f" - "72652e2e697465722e2e7472616974732e2e6974657261746f722e2e4974" - "657261746f7224475424346e657874313768633964373737363930666232" - "373033334545385f5a4e34636f7265336f70733866756e6374696f6e3546" - "6e4d75743863616c6c5f6d75743137686638313366653737616237633761" - "35634546395f5a4e39626c7331325f3338313267313132473150726f6a65" - "637469766536646f75626c65313768386366636435343461313633326664" - "384547365f5a4e39626c7331325f3338313267313132473150726f6a6563" - "74697665336164643137686338666437656633383137383263636145487c" - "5f5a4e37395f244c5424626c7331325f3338312e2e67312e2e473150726f" - "6a656374697665247532302461732475323024737562746c652e2e436f6e" - "646974696f6e616c6c7953656c65637461626c65244754243138636f6e64" - "6974696f6e616c5f73656c65637431376839346663383463303336386533" - "3262334549415f5a4e38646c6d616c6c6f6338646c6d616c6c6f63313744" - "6c6d616c6c6f63244c542441244754243466726565313768623937643238" - "61316165313165356635454a2c5f5a4e34636f72653970616e69636b696e" - "673570616e696331376832323065356136376635653365303666454b0e5f" - "5f727573745f7265616c6c6f634c4a5f5a4e38646c6d616c6c6f6338646c" - "6d616c6c6f633137446c6d616c6c6f63244c542441244754243132756e6c" - "696e6b5f6368756e6b31376831623634356162376339333032303939454d" - "4b5f5a4e38646c6d616c6c6f6338646c6d616c6c6f633137446c6d616c6c" - "6f63244c542441244754243133646973706f73655f6368756e6b31376832" - "633732313930393066616265323362454e435f5a4e38646c6d616c6c6f63" - "38646c6d616c6c6f633137446c6d616c6c6f63244c54244124475424366d" - "616c6c6f6331376863663263663139323661376530646165454f385f5a4e" - "35616c6c6f63377261775f766563313763617061636974795f6f76657266" - "6c6f7731376863393936333961626361313337633131455085015f5a4e31" - "30325f244c5424636f72652e2e697465722e2e61646170746572732e2e6d" - "61702e2e4d6170244c542449244324462447542424753230246173247532" - "3024636f72652e2e697465722e2e7472616974732e2e6974657261746f72" - "2e2e4974657261746f7224475424346e6578743137683161356136633566" - "303263666237373445514d5f5a4e34365f244c5424753634247532302461" - "732475323024737562746c652e2e436f6e7374616e7454696d6545712447" - "54243563745f657131376839613065366130383065643661303532455253" - "5f5a4e35345f244c5424737562746c652e2e43686f696365247532302461" - "732475323024636f72652e2e6f70732e2e6269742e2e4e6f742447542433" - "6e6f743137686532353261643837343163616538663445533b5f5a4e3463" - "6f72653970616e69636b696e6731396173736572745f6661696c65645f69" - "6e6e6572313768363939386636356530343630623966324554475f5a4e34" - "325f244c54242452462454247532302461732475323024636f72652e2e66" - "6d742e2e44656275672447542433666d7431376866396562386538303434" - "3436393737334555385f5a4e34636f726533666d7439466f726d61747465" - "7231327061645f696e74656772616c313768336538303336383966363939" - "303466334556335f5a4e39626c7331325f33383132667032467031307375" - "6274726163745f7031376833353337643137643839306564373430455736" - "5f5a4e35616c6c6f6335616c6c6f6336476c6f62616c3130616c6c6f635f" - "696d706c313768636263383565313966363066396565314558435f5a4e35" - "616c6c6f63377261775f7665633139526177566563244c54245424432441" - "244754243867726f775f6f6e653137683761366133613131343862316565" - "66624559785f5a4e37355f244c5424626c7331325f3338312e2e67322e2e" - "4732416666696e65247532302461732475323024737562746c652e2e436f" - "6e646974696f6e616c6c7953656c65637461626c65244754243138636f6e" - "646974696f6e616c5f73656c656374313768346631633532376163323663" - "39393332455a7a5f5a4e37375f244c5424737562746c652e2e43744f7074" - "696f6e244c54245424475424247532302461732475323024737562746c65" - "2e2e436f6e646974696f6e616c6c7953656c65637461626c652447542431" - "38636f6e646974696f6e616c5f73656c6563743137686230353564346638" - "6331363261313862455b5b5f5a4e36305f244c5424626c7331325f333831" - "2e2e66702e2e4670247532302461732475323024737562746c652e2e436f" - "6e7374616e7454696d654571244754243563745f65713137683764613737" - "3038613961336631623237455c335f5a4e39626c7331325f333831326670" - "324670313066726f6d5f6279746573313768663632643265653863383835" - "61616633455d665f5a4e36355f244c5424626c7331325f3338312e2e6670" - "2e2e4670247532302461732475323024636f72652e2e6f70732e2e617269" - "74682e2e4d756c41737369676e2447542431306d756c5f61737369676e31" - "376862613864393933386331336334313962455e425f5a4e39626c733132" - "5f33383132667032467032356c657869636f67726170686963616c6c795f" - "6c61726765737431376864623239383362653765626662373630455f345f" - "5a4e39626c7331325f3338313266703246703131706f775f76617274696d" - "65313768386339643861353637336531663765654560315f5a4e39626c73" - "31325f33383133667032334670323769735f7a65726f3137683232633162" - "33626231383039373337664561385f5a4e39626c7331325f333831326670" - "324670313573756d5f6f665f70726f647563747331376864373831613962" - "66366162336638386645622d5f5a4e39626c7331325f3338313366703233" - "467032336e6567313768336535623432323139303537623839334563365f" - "5a4e39626c7331325f33383133667032334670323131706f775f76617274" - "696d653137683839356266623030643732663461646145643b5f5a4e3962" - "6c7331325f3338313267313132473150726f6a656374697665386d756c5f" - "62795f78313768313830336335636330383333313036354565665f5a4e37" - "335f244c542424524624626c7331325f3338312e2e67312e2e473150726f" - "6a656374697665247532302461732475323024636f72652e2e6f70732e2e" - "61726974682e2e4e656724475424336e6567313768363961333962383136" - "613036626237614566455f5a4e34636f7265346974657238616461707465" - "727337666c617474656e3137616e645f7468656e5f6f725f636c65617231" - "3768373932316661373530366638613637624567365f5a4e39626c733132" - "5f333831326732384732416666696e65386964656e746974793137683532" - "3261303037353662633832613639456885015f5a4e3130325f244c542462" - "6c7331325f3338312e2e67322e2e473250726f6a65637469766524753230" - "2461732475323024636f72652e2e636f6e766572742e2e46726f6d244c54" - "2424524624626c7331325f3338312e2e67322e2e4732416666696e652447" - "5424244754243466726f6d31376831393034396666373534383632623533" - "4569335f5a4e39626c7331325f3338313366703633467036396d756c5f62" - "795f303131376837316231356266356135313961376133456a385f5a4e39" - "626c7331325f333831326670324670313573756d5f6f665f70726f647563" - "747331376862306665663033383436356461336561456b5e5f5a4e39626c" - "7331325f3338313870616972696e677331364d696c6c65724c6f6f705265" - "73756c74323066696e616c5f6578706f6e656e74696174696f6e31306670" - "345f73717561726531376835333530613232303537323261303037456c68" - "5f5a4e36375f244c5424626c7331325f3338312e2e6670322e2e46703224" - "7532302461732475323024636f72652e2e6f70732e2e61726974682e2e53" - "756241737369676e2447542431307375625f61737369676e313768656138" - "64663864303262303833343633456dd5015f5a4e3137325f244c5424244c" - "5424626c7331325f3338312e2e70616972696e67732e2e47325072657061" - "726564247532302461732475323024636f72652e2e636f6e766572742e2e" - "46726f6d244c5424626c7331325f3338312e2e67322e2e4732416666696e" - "6524475424244754242e2e66726f6d2e2e41646465722475323024617324" - "75323024626c7331325f3338312e2e70616972696e67732e2e4d696c6c65" - "724c6f6f70447269766572244754243133646f75626c696e675f73746570" - "31376833303230646632373566636537643064456e385f5a4e35616c6c6f" - "63337665633136566563244c542454244324412447542434707573683137" - "6836633466633030383766393064366561456f355f5a4e34636f72653970" - "616e69636b696e6731336173736572745f6661696c656431376838396134" - "30623862613963643736636345703a5f5a4e34636f72653970616e69636b" - "696e67313870616e69635f626f756e64735f636865636b31376835613339" - "3334316633393435306165354571625f5a4e34636f726533666d74336e75" - "6d33696d7035325f244c5424696d706c2475323024636f72652e2e666d74" - "2e2e446973706c61792475323024666f7224753230247533322447542433" - "666d74313768646131373032323936653330396138624572445f5a4e3463" - "6f726533666d74336e756d33696d7032315f244c5424696d706c24753230" - "2475333224475424345f666d743137686531613333633761616434313031" - "3465457311727573745f626567696e5f756e77696e6474465f5a4e34636f" - "726533666d7439466f726d617474657231327061645f696e74656772616c" - "313277726974655f70726566697831376865323164633232613535336139" - "3935324575535f5a4e34636f726535736c69636535696e6465783234736c" - "6963655f656e645f696e6465785f6c656e5f6661696c38646f5f70616e69" - "633772756e74696d65313768623465303239633465666136373431314576" - "475f5a4e34325f244c54242452462454247532302461732475323024636f" - "72652e2e666d742e2e44656275672447542433666d743137683763663234" - "64633163663734653663354577495f5a4e34345f244c5424245246245424" - "7532302461732475323024636f72652e2e666d742e2e446973706c617924" - "47542433666d74313768363963313766643162653433346236384578585f" - "5a4e35395f244c5424636f72652e2e666d742e2e417267756d656e747324" - "7532302461732475323024636f72652e2e666d742e2e446973706c617924" - "47542433666d74313768356530663632333530333933336330664579265f" - "5a4e34636f726533666d7435777269746531376862633530306361396130" - "663033323632457a695f5a4e36385f244c5424636f72652e2e666d742e2e" - "6275696c646572732e2e5061644164617074657224753230246173247532" - "3024636f72652e2e666d742e2e577269746524475424313077726974655f" - "6368617231376837323761393336343062616631636662457b305f5a4e34" - "636f726533666d743557726974653977726974655f666d74313768653264" - "32326663306535326231396336457c515f5a4e34636f726535736c696365" - "35696e6465783232736c6963655f696e6465785f6f726465725f6661696c" - "38646f5f70616e69633772756e74696d6531376836346563303433376262" - "666263656363457d475f5a4e34325f244c54242452462454247532302461" - "732475323024636f72652e2e666d742e2e44656275672447542433666d74" - "31376837396432393730376137363931633337457e375f5a4e34636f7265" - "3570616e6963313250616e69635061796c6f61643661735f737472313768" - "33653762626665396537333233373036457f3b5f5a4e337374643970616e" - "69636b696e673230727573745f70616e69635f776974685f686f6f6b3137" - "68396561303139313462356439323635394580010a727573745f70616e69" - "638101455f5a4e3373746433737973396261636b747261636532365f5f72" - "7573745f656e645f73686f72745f6261636b747261636531376865376239" - "323038656534343338376436458201585f5a4e337374643970616e69636b" - "696e673139626567696e5f70616e69635f68616e646c657232385f247537" - "62242475376224636c6f7375726524753764242475376424313768393666" - "3161333534313164393334366245830183015f5a4e39395f244c54247374" - "642e2e70616e69636b696e672e2e626567696e5f70616e69635f68616e64" - "6c65722e2e5374617469635374725061796c6f6164247532302461732475" - "323024636f72652e2e70616e69632e2e50616e69635061796c6f61642447" - "54243661735f737472313768653362376630636337353061633833394584" - "01505f5a4e38646c6d616c6c6f6338646c6d616c6c6f633137446c6d616c" - "6c6f63244c542441244754243138696e736572745f6c617267655f636875" - "6e6b31376866646432333135363766663933346634458501066d656d7365" - "748601066d656d6370798701085f5f6d756c7469338801365f5a4e313763" - "6f6d70696c65725f6275696c74696e73336d656d376d656d6d6f76653137" - "6830343030366431613866396435653532458901076d656d6d6f76650712" - "01000f5f5f737461636b5f706f696e746572090a0100072e726f64617461" - "004d0970726f64756365727302086c616e6775616765010452757374000c" - "70726f6365737365642d6279010572757374631d312e38352e3120283465" - "6231363132353020323032352d30332d31352900490f7461726765745f66" - "65617475726573042b0a6d756c746976616c75652b0f6d757461626c652d" - "676c6f62616c732b0f7265666572656e63652d74797065732b087369676e" - "2d657874"; - -extern std::string const sp1WasmHex = - "0061736d0100000001630f60027f7f0060037f7f7f0060027f7f017f6003" - "7f7f7f017f60017f0060047f7f7f7f0060017f017f60057f7f7f7f7f0060" - "047f7f7f7f017f6000017f60077f7e7e7e7e7e7e0060000060097f7e7e7e" - "7e7e7e7e7e0060037f7e7e0060047f7e7e7f000351500906010004010001" - "000000060100000001010107040800000000000102080202040101000505" - "00010502000a0b0c00010100000100000401040000010100000101000200" - "0100000107010202030d0e000405017001080805030100110619037f0141" - "8080c0000b7f0041b0abc0000b7f0041b0abc0000b073c04066d656d6f72" - "790200147370315f67726f746831365f766572696669657200000a5f5f64" - "6174615f656e6403010b5f5f686561705f626173650302090d010041010b" - "071c1f1e323429420a81c10950add60202537f2d7e230041c0206b220124" - "0041e8a5c0002d0000410247044041e8a5c00041e8a5c0002d0000220541" - "0120051b3a00000240200504400340024002400240200541016b0e030005" - "01020b034041e8a5c0002d000022054101460d000b02400240200541016b" - "0e03000601030b000b41a49bc000412641cc9bc0001011000b41a89ac000" - "410d41949bc0001011000b41e8a5c00041e8a5c0002d0000220541012005" - "1b3a000020050d000b0b41e8a5c00041023a000041e4a5c000418c033602" - "0041e0a5c00041e892c0003602000b0b41bda9c0002d00001a41e4a5c000" - "280200211241e0a5c000280200211f024002400240024002400240024002" - "400240024002400240024002400240024002400240024002400240024002" - "400240024002404184021001220a450d00200a41c1befe827c3600800220" - "0a42e5979c9b97e3c7eb897f3700f801200a42cbb091f7e585f1e3d30037" - "00f001200a4285cca8c2988cc0acd0003700e801200a42c29391f580c1f3" - "da093700e001200a42d1f9cfc9da8dc8bcb37f3700d801200a42c1a5a5db" - "99d68fcfc8003700d001200a42a4e6aeaa96968ae30c3700c801200a42bb" - "86f4fee5c1aa8eab7f3700c001200a42ecff83a2ceee9ae7173700b80120" - "0a429fc5d69be5fafb80763700b001200a42bcd1e08deea2cfa58b7f3700" - "a801200a42aeb3eac1cda3e3c0bf7f3700a001200a42e2d8abdbae8cd3ae" - "5c37009801200a42eafbbf9fa891deb20437009001200a42afd29dfa8281" - "ecce9f7f37008801200a42b799d9dcb883f8df3b37008001200a42b3c1c2" - "a8e0a2cbc0cc00370078200a4295af8cdda2f981d269370070200a42f4eb" - "86b4cfc69bc339370068200a42f8e5b7c0c1e199bff000370060200a42c1" - "e7c485b4aac3c28c7f370058200a42f3e7ec98bff992d83b370050200a42" - "e880deac81addbc8967f370048200a4288c5f6c6eba0ef9844370040200a" - "42bdb2cf80ada892e5ec00370038200a42f887b4d9f0accbdb4c37003020" - "0a42e1c6ffa3c2dec48dcb00370028200a42fc81d7948085c1fc2c370020" - "200a42f79d8ff3bcb283ece500370018200a42beb6d5a58deadbe2d90037" - "0010200a4291c09b97b2989bf3b97f370008200a4291ec82edf9a3afba48" - "37000041bda9c0002d00001a41e0001001221d450d00201d420037000020" - "1d4200370020201d41053a001f201d4200370040201d41053a003f201d41" - "083a005f201d41176a4200370000201d41106a4200370000201d41086a42" - "00370000201d41286a4200370000201d41306a4200370000201d41376a42" - "00370000201d41c8006a4200370000201d41d0006a4200370000201d41d7" - "006a420037000041bda9c0002d00001a41c20010012205450d0020054180" - "80c00041c200104c2152200141a00f6a201f20121002024020012802a00f" - "200a280000470d002001418280c4003602e01c2001410036029c03200142" - "c080808020370294032001205241026a360290032001200141e01c6a3602" - "a003200141106a20014190036a100320012d0010044020012d0011210502" - "4020012802a003280200418280c400470d00200128029403450d00200128" - "029803450d040b41bda9c0002d00001a410810012202450d02200141d000" - "6a2116200a41e4016a2109200a41c4016a2122200a41a4016a2120200220" - "053a0000200141013602a80c200120023602a40c200141083602a00c2001" - "41b00f6a200141a0036a280200360200200141a80f6a20014198036a2902" - "0037030020012001290290033703a00f4101210503400240200141086a20" - "0141a00f6a100320012d0008450d0020012d0009210620012802a00c2005" - "460440024020012802b00f280200418280c400470d0020012802a40f450d" - "0020012802a80f450d070b230041206b220f240002404108200141a00c6a" - "220e280200220c4101742208200541016a220220022008491b2202200241" - "084d1b220241004e047f200f200c047f200f200c36021c200f200e280204" - "36021441010541000b360218200f41086a41012002200f41146a1028200f" - "2802084101470d01200f2802101a200f28020c0541000b41c096c0001019" - "000b200f28020c210c200e2002360200200e200c360204200f41206a2400" - "20012802a40c21020b200220056a20063a00002001200541016a22053602" - "a80c0c010b0b20012802a00c210220012802a40c210620012802e01c4182" - "80c4004704402002450d02200641046b2802002205417871221241044108" - "200541037122051b20026a490d05200541002012200241276a4b1b0d0620" - "0610040c020b2002418080808078460d0102400240024002402005412046" - "0440200141a80f6a2205200641176a290000370300200141b00f6a222320" - "06411f6a2d00003a00002001200629000f3703a00f200628000b21242006" - "28000721262006280003213520062d0002212d20062d0001214720062d00" - "00214820020440200641046b2802002208417871220c4104410820084103" - "7122081b20026a490d0c20084100200c200241276a4b1b0d0d200610040b" - "200141206a22062005290300370300200141286a220520232d00003a0000" - "200120012903a00f370318200141f0006a201d41e0001002200141c7006a" - "2006290300370000200141cf006a20052d00003a0000201641086a200141" - "f8006a290000370000201641106a20014180016a29000037000020164118" - "6a20014188016a290000370000200120012d0070411f713a007020162001" - "2900703700002001202436003b2001202636003720012035360033200120" - "2d3a0032200120473a0031200120483a00302001200129031837003f200a" - "290014225742388620574280fe0383422886842057428080fc0783421886" - "205742808080f80f834208868484205742088842808080f80f8320574218" - "88428080fc07838420574228884280fe03832057423888848484215e200a" - "411c6a290000225742388620574280fe0383422886842057428080fc0783" - "421886205742808080f80f834208868484205742088842808080f80f8320" - "57421888428080fc07838420574228884280fe0383205742388884848421" - "65417f200a290004225742b0c8b99297bc8cd02985200a410c6a29000022" - "5842b8a195b29bb0a0acdd008584420052205842388620584280fe038342" - "2886842058428080fc0783421886205842808080f80f8342088684842058" - "42088842808080f80f832058421888428080fc07838420584228884280fe" - "03832058423888848484225842ddb0858ce8b691a8b87f54205742388620" - "574280fe0383422886842057428080fc0783421886205742808080f80f83" - "4208868484205742088842808080f80f832057421888428080fc07838420" - "574228884280fe03832057423888848484225742a9c0c689aece93b23054" - "205742a9c0c689aece93b230511b1b2205417f470440200541ff01710d07" - "206542c6faf3c3ed82a3903c56205e428d95c7c396d2dac0977f56205e42" - "8d95c7c396d2dac0977f511b0d070b200120583703b018200120653703a0" - "18200120573703b8182001205e3703a818200a2900342257423886205742" - "80fe0383422886842057428080fc0783421886205742808080f80f834208" - "868484205742088842808080f80f832057421888428080fc078384205742" - "28884280fe03832057423888848484215e200a413c6a2900002257423886" - "20574280fe0383422886842057428080fc0783421886205742808080f80f" - "834208868484205742088842808080f80f832057421888428080fc078384" - "20574228884280fe038320574238888484842165417f200a290024225742" - "b0c8b99297bc8cd02985200a412c6a290000225842b8a195b29bb0a0acdd" - "008584420052205842388620584280fe0383422886842058428080fc0783" - "421886205842808080f80f834208868484205842088842808080f80f8320" - "58421888428080fc07838420584228884280fe0383205842388884848422" - "5842ddb0858ce8b691a8b87f54205742388620574280fe03834228868420" - "57428080fc0783421886205742808080f80f834208868484205742088842" - "808080f80f832057421888428080fc07838420574228884280fe03832057" - "423888848484225742a9c0c689aece93b23054205742a9c0c689aece93b2" - "30511b1b2205417f470440200541ff01710d07206542c6faf3c3ed82a390" - "3c56205e428d95c7c396d2dac0977f56205e428d95c7c396d2dac0977f51" - "1b0d070b200120583703d01a200120653703c01a200120573703d81a2001" - "205e3703c81a200141e0066a200141a0186a200141c01a6a100520012d00" - "e0060d06200141e50c6a2205200141a8076a290300370000200141dd0c6a" - "2206200141a0076a290300370000200141d50c6a220220014198076a2903" - "00370000200141cd0c6a222320014190076a290300370000200141c50c6a" - "222420014188076a290300370000200141bd0c6a222620014180076a2903" - "00370000200141b50c6a2235200141f8066a290300370000200120012903" - "f0063700ad0c200141a51d6a222d20052900003700002001419d1d6a2205" - "2006290000370000200141951d6a220620022900003700002001418d1d6a" - "22022023290000370000200141851d6a22232024290000370000200141fd" - "1c6a22242026290000370000200141f51c6a222620352900003700002001" - "20012900ad0c3700ed1c200141d80a6a202d290000370300200141d00a6a" - "2005290000370300200141c80a6a2006290000370300200141c00a6a2002" - "290000370300200141b80a6a2023290000370300200141b00a6a20242900" - "00370300200120262900003703a80a200120012900ed1c3703a00a200a29" - "0054225742388620574280fe0383422886842057428080fc078342188620" - "5742808080f80f834208868484205742088842808080f80f832057421888" - "428080fc07838420574228884280fe038320574238888484842165200a41" - "dc006a290000225742388620574280fe0383422886842057428080fc0783" - "421886205742808080f80f834208868484205742088842808080f80f8320" - "57421888428080fc07838420574228884280fe0383205742388884848421" - "6a417f200a290044225742b0c8b99297bc8cd02985200a41cc006a290000" - "225842b8a195b29bb0a0acdd008584420052205842388620584280fe0383" - "422886842058428080fc0783421886205842808080f80f83420886848420" - "5842088842808080f80f832058421888428080fc07838420584228884280" - "fe03832058423888848484226242ddb0858ce8b691a8b87f542057423886" - "20574280fe0383422886842057428080fc0783421886205742808080f80f" - "834208868484205742088842808080f80f832057421888428080fc078384" - "20574228884280fe03832057423888848484225e42a9c0c689aece93b230" - "54205e42a9c0c689aece93b230511b1b2205417f470440200541ff01710d" - "07206a42c6faf3c3ed82a3903c562065428d95c7c396d2dac0977f562065" - "428d95c7c396d2dac0977f511b0d070b200a290074225742388620574280" - "fe0383422886842057428080fc0783421886205742808080f80f83420886" - "8484205742088842808080f80f832057421888428080fc07838420574228" - "884280fe03832057423888848484215a200a41fc006a2900002257423886" - "20574280fe0383422886842057428080fc0783421886205742808080f80f" - "834208868484205742088842808080f80f832057421888428080fc078384" - "20574228884280fe03832057423888848484215c417f200a290064225742" - "b0c8b99297bc8cd02985200a41ec006a290000225842b8a195b29bb0a0ac" - "dd008584420052205842388620584280fe0383422886842058428080fc07" - "83421886205842808080f80f834208868484205842088842808080f80f83" - "2058421888428080fc07838420584228884280fe03832058423888848484" - "225942ddb0858ce8b691a8b87f54205742388620574280fe038342288684" - "2057428080fc0783421886205742808080f80f8342088684842057420888" - "42808080f80f832057421888428080fc07838420574228884280fe038320" - "57423888848484225442a9c0c689aece93b23054205442a9c0c689aece93" - "b230511b1b2205417f470440200541ff01710d07205c42c6faf3c3ed82a3" - "903c56205a428d95c7c396d2dac0977f56205a428d95c7c396d2dac0977f" - "511b0d070b200a29009401225742388620574280fe038342288684205742" - "8080fc0783421886205742808080f80f8342088684842057420888428080" - "80f80f832057421888428080fc07838420574228884280fe038320574238" - "88848484215b200a419c016a290000225742388620574280fe0383422886" - "842057428080fc0783421886205742808080f80f83420886848420574208" - "8842808080f80f832057421888428080fc07838420574228884280fe0383" - "20574238888484842161417f200a29008401225742b0c8b99297bc8cd029" - "85200a418c016a290000225842b8a195b29bb0a0acdd0085844200522058" - "42388620584280fe0383422886842058428080fc07834218862058428080" - "80f80f834208868484205842088842808080f80f832058421888428080fc" - "07838420584228884280fe03832058423888848484225842ddb0858ce8b6" - "91a8b87f54205742388620574280fe0383422886842057428080fc078342" - "1886205742808080f80f834208868484205742088842808080f80f832057" - "421888428080fc07838420574228884280fe038320574238888484842257" - "42a9c0c689aece93b23054205742a9c0c689aece93b230511b1b2205417f" - "470440200541ff01710d07206142c6faf3c3ed82a3903c56205b428d95c7" - "c396d2dac0977f56205b428d95c7c396d2dac0977f511b0d070b200141e0" - "066a2020100620012d00e0060d06200141f51c6a200141f8066a29030022" - "53370000200141b80b6a20014188076a290300370300200141b00b6a2001" - "4180076a290300370300200120012903f0063703a00b200120533703a80b" - "200120623703900b2001206a3703800b200120593703f00a2001205c3703" - "e00a2001205e3703980b200120653703880b200120543703f80a2001205a" - "3703e80a200120573703d80b200120583703d00b2001205b3703c80b2001" - "20613703c00b200141e0066a200141e00a6a200141a00b6a100720012d00" - "e0060d06200141801f6a200141ad186a200141cd1a6a200141ee1c6a2001" - "41ae0c6a200141f0066a418001104c418001104c418001104c418001104c" - "418001104c1a200141e0066a2022100620012d00e0060d06200141b5186a" - "2205200141f8066a22062903002257370000200141f80a6a20014188076a" - "2202290300370300200141f00a6a20014180076a22202903003703002001" - "20012903f0063703e00a200120573703e80a200141e0066a200910062001" - "2d00e0060d06200520062903002257370000200141b80b6a200229030037" - "0300200141b00b6a2020290300370300200120012903f0063703a00b2001" - "20573703a80b200141e0066a200141e00a6a200141a00b6a100520012d00" - "e0060d06200141e50c6a2205200141a8076a290300370000200141dd0c6a" - "2206200141a0076a290300370000200141d50c6a220220014198076a2903" - "00370000200141cd0c6a222020014190076a290300370000200141c50c6a" - "222220014188076a290300370000200141bd0c6a220920014180076a2903" - "00370000200141b50c6a2223200141f8066a290300370000200120012903" - "f0063700ad0c200141a51d6a222420052900003700002001419d1d6a2205" - "2006290000370000200141951d6a220620022900003700002001418d1d6a" - "22022020290000370000200141851d6a22202022290000370000200141fd" - "1c6a22222009290000370000200141f51c6a220920232900003700002001" - "20012900ad0c3700ed1c200141d8086a2024290000370300200141d0086a" - "2005290000370300200141c8086a2006290000370300200141c0086a2002" - "290000370300200141b8086a2020290000370300200141b0086a20222900" - "00370300200141a8086a2009290000370300200120012900ed1c3703a008" - "200141e8076a20012903a80a370300200141f0076a200141b00a6a290300" - "370300200141f8076a200141b80a6a29030037030020014180086a200141" - "c00a6a29030037030020014188086a200141c80a6a290300370300200141" - "90086a200141d00a6a29030037030020014198086a200141d80a6a290300" - "370300200120012903a00a3703e007200141e0066a200141801f6a418001" - "104c1a20014190016a2001419d036a200141ad0f6a200141e0066a418002" - "104c418002104c418002104c1a2012411f4d0d0f200141a00f6a201f1008" - "20012d00a00f0d06200141e50c6a200141e80f6a29030022573700002001" - "41dd0c6a200141e00f6a2903002258370000200141d50c6a200141d80f6a" - "290300225e370000200141cd0c6a200141d00f6a29030022653700002001" - "41f00b6a200141c00f6a290300370300200141f80b6a200141c80f6a2903" - "00370300200141800c6a2065370300200141880c6a205e37030020014190" - "0c6a2058370300200141980c6a2057370300200120012903b00f3703e00b" - "2001200141b80f6a2903003703e80b201241ff004d0d10200141a00f6a20" - "1f41406b100920012d00a00f0d06200141a0186a200141ad0c6a200141b0" - "0f6a418001104c418001104c1a201241bf014d0d11200141a00f6a201f41" - "80016a100920012d00a00f0d06200141c01a6a200141ad0c6a200141b00f" - "6a418001104c418001104c1a2012419f024d0d12200141a00f6a201f41e0" - "016a100920012d00a00f0d06200141e01c6a200141ad0c6a200141b00f6a" - "418001104c418001104c1a201241a002460d13201241a102460d14201241" - "a2024d0d15201241a302460d16201f2d00a0022105201f2d00a102210620" - "1f2d00a3022102201f2d00a202212041002126200141003602a80b200142" - "8080808080023702a00b2005200641087472202041107472200241187472" - "220504404101200541187420054180fe03714108747220054108764180fe" - "0371200541187672722205200541014d1b210c200141ad0c6a2105200141" - "b00f6a210641a40221024100212241102108410021200340202041f6ffff" - "3f460d19200241206a220920124b0d1a200141a00f6a2002201f6a100820" - "012d00a00f0d0320052006290000370000200541386a2202200641386a29" - "0000370000200541306a2223200641306a290000370000200541286a2224" - "200641286a290000370000200541206a2226200641206a29000037000020" - "0541186a2235200641186a290000370000200541106a222d200641106a29" - "0000370000200541086a2247200641086a290000370000200141901f6a22" - "48202d290000370300200141981f6a222d2035290000370300200141a01f" - "6a22352026290000370300200141a81f6a22262024290000370300200141" - "b01f6a22242023290000370300200141b81f6a2223200229000037030020" - "0120052900003703801f200120472900003703881f20012802a00b202046" - "044041002108230041206b2203240002400240200141a00b6a221b280200" - "220f417f460d00200f4101742202200f41016a220e2002200e4b1b220241" - "ffffff1f4b0d0041042002200241044d1b2202410674220e41f0ffffff07" - "4b0d002003200f047f2003200f41067436021c2003201b28020436021441" - "100541000b360218200341086a4110200e200341146a1028200328020841" - "01470d0120032802101a200328020c21080b200841dc90c0001019000b20" - "0328020c210f201b2002360200201b200f360204200341206a2400200128" - "02a40b21080b200820226a220220012903801f370300200241386a202329" - "0300370300200241306a2024290300370300200241286a20262903003703" - "00200241206a2035290300370300200241186a202d290300370300200241" - "106a2048290300370300200241086a20012903881f370300200120204101" - "6a22203602a80b202241406b212220092102200c2020470d000b20012802" - "a00b21260b20012902a40b216a200141a00c6a200141a0186a100a200141" - "a00d6a200141e01c6a418001104c1a200141a00e6a200141c01a6a418001" - "104c1a200141d6126a200141980c6a290300370100200141ce126a200141" - "900c6a290300370100200141c6126a200141880c6a290300370100200141" - "be126a200141800c6a290300370100200141b6126a200141f80b6a290300" - "370100200141ae126a200141f00b6a290300370100200141a6126a200129" - "03e80b370100200120012903e00b37019e1220012d00a00c210520012d00" - "a10c2106200141a00f6a200141a00c6a41027241fe02104c1a200141e006" - "6a200141a00f6a41be03104c1a2026418080808078460d0620014190036a" - "410272200141e0066a41be03104c1a200120263602d006200120063a0091" - "03200120053a0090034100210241bda9c0002d00001a2001206a3702d406" - "41c000100b2220450d07206a4220882262a72122206aa72135200141b00f" - "6a2105200141306a2106410021120340230041206b22092400200941186a" - "221b2006290000225342388620534280fe0383422886842053428080fc07" - "83421886205342808080f80f834208868484205342088842808080f80f83" - "2053421888428080fc07838420534228884280fe03832053423888848484" - "370300200941106a2208200641086a290000225342388620534280fe0383" - "422886842053428080fc0783421886205342808080f80f83420886848420" - "5342088842808080f80f832053421888428080fc07838420534228884280" - "fe0383205342388884848437030020092006290010225342388620534280" - "fe0383422886842053428080fc0783421886205342808080f80f83420886" - "8484205342088842808080f80f832053421888428080fc07838420534228" - "884280fe038320534238888484843703082009200641186a290000225342" - "388620534280fe0383422886842053428080fc0783421886205342808080" - "f80f834208868484205342088842808080f80f832053421888428080fc07" - "838420534228884280fe0383205342388884848437030020094201420042" - "0042004281808080bfb2fdf0c3004291e1e5cd8789fa9928102b200141a0" - "0f6a220c41003a0000200c41286a201b290300370300200c41206a200829" - "0300370300200c41186a2009290308370300200c20092903003703102009" - "41206a240020012d00a00f4101460d1a200141f8066a200541186a290300" - "2257370300200141f0066a200541106a2903002258370300200120052903" - "00225e3703e0062001200541086a29030022653703e80620202012410574" - "6a220641186a2057370300200641106a2058370300200641086a20653703" - "002006205e370300410121122002410171211f4101210220162106201f45" - "0d000b206a42ffffffffffffffff03560d1a2022410674220541f1ffffff" - "074f0d1a2005450d0341bda9c0002d00001a2005100b2206450d07200620" - "352005104c211220624203520d02206a428080808010540d042001419006" - "6a212d20014190056a214720014190046a2148200141f81a6a221f201241" - "386a290300370300200141f01a6a2216201241306a290300370300200141" - "e81a6a2222201241286a290300370300200141e01a6a2209201241206a29" - "0300370300200141d81a6a2223201241186a290300370300200141d01a6a" - "2224201241106a290300370300200120122903003703c01a200120124108" - "6a2903003703c81a2020210541c00021060340200141d80c6a201f290300" - "370300200141d00c6a2016290300370300200141c80c6a20222903003703" - "00200141c00c6a2009290300370300200141b80c6a202329030037030020" - "0141b00c6a2024290300370300200120012903c81a3703a80c2001200129" - "03c01a3703a00c200120053602e00c2001200620126a22023602e40c2001" - "41e01c6a21312002210c4100212e41002136230041a0046b220424002004" - "41306a212b20044180036a2137200441e0036a210f200441f0016a210e20" - "0441c0026a211b200441e0026a2108200441b0026a2149200441d0026a21" - "4a41ff012141034002402004204141ff0071104f2005204141037641f0ff" - "ffff01716a22422903002004290300832159204241086a29030020044108" - "6a29030083215302400240027f0240024002400240024020364101714504" - "4041002053205984500d061a200441e0006a200441206a29030037030020" - "0441e8006a200441286a290300370300200441f0006a202b290300370300" - "200441f8006a200441386a29030037030020044180016a200441406b2903" - "0037030020044188016a200441c8006a2903003703002004200429031037" - "035020042004290318370358202e0d010c030b202e450d0120044188026a" - "200441c8006a222e29030037030020044180026a200441406b2250290300" - "370300200441f8016a200441386a2203290300370300200e202b29030037" - "0300200441e8016a200441286a2236290300370300200441e0016a200441" - "206a2242290300370300200420042903183703d801200420042903103703" - "d001200441d8036a224b4200370300200441d0036a220242003703002004" - "42003703f803200442003703f003200442003703e803200442013703e003" - "200442003703c803200442003703c003024002400240200441d0016a2004" - "41c0036a104a450440200e200f104a450d010b204b420037030020024200" - "370300200442003703f803200442003703f003200442003703e803200442" - "013703e003200442003703c803200442003703c003027f0240200441d001" - "6a200441c0036a104a450440200e200f104a450d010b2049202b29030037" - "0300204941186a202b41186a290300370300204941106a202b41106a2903" - "00370300204941086a202b41086a290300370300200441a0026a20422903" - "00370300200441a8026a2036290300370300200420042903103703900220" - "0420042903183703980220082102204a0c010b204a4200370300200441a0" - "026a4200370300200441a8026a4200370300204a41086a4200370300204a" - "41106a4200370300204a41186a4200370300200442003703900220044200" - "37039802201b210220490b214b2002420037030820024200370300204b42" - "00370308204b4201370300200441c0036a20044190026a20044190026a10" - "40200441f0026a200441c0036a104120042802f002410171450d01200441" - "c8016a203741386a290300370300200441c0016a203741306a2903003703" - "00200441b8016a203741286a290300370300200441b0016a203741206a29" - "0300370300200441a8016a203741186a290300370300200441a0016a2037" - "41106a29030037030020042037290300370390012004203741086a290300" - "370398010c020b200441a0016a2042290300370300200441a8016a203629" - "0300370300200441b0016a202b290300370300200441b8016a2003290300" - "370300200441c0016a2050290300370300200441c8016a202e2903003703" - "00200420042903103703900120042004290318370398010c010b41c4a0c0" - "00412041e4a0c0001021000b2042200441a0016a29030037030020362004" - "41a8016a290300370300202b200441b0016a2903003703002003200441b8" - "016a2903003703002050200441c0016a290300370300202e200441c8016a" - "290300370300200420042903900137031020042004290398013703182053" - "205984500d04200441e0006a2042290300370300200441e8006a20362903" - "00370300200441f0006a202b290300370300200441f8006a200329030037" - "030020044180016a205029030037030020044188016a202e290300370300" - "20042004290310370350200420042903183703580b200441c0036a200441" - "d0006a200c100c0c020b20532059844200520d002041450d044101213641" - "00212e0c050b200441f8036a200c41386a290300370300200441f0036a20" - "0c41306a290300370300200441e8036a200c41286a290300370300200f20" - "0c41206a290300370300200441d8036a200c41186a290300370300200441" - "d0036a200c41106a2903003703002004200c2903003703c0032004200c41" - "086a2903003703c8030b200441c8006a200441f8036a2903003703002004" - "41406b200441f0036a290300370300200441386a200441e8036a29030037" - "0300202b200f290300370300200441286a200441d8036a29030037030020" - "0441206a200441d0036a290300370300200420042903c803370318200420" - "042903c0033703100b4101212e41010b213620410d01202e0d020b4184a1" - "c0001020000b204141016b21410c010b0b20312004290310370300203141" - "086a2004290318370300203141386a200441c8006a290300370300203141" - "306a200441406b290300370300203141286a200441386a29030037030020" - "3141206a200441306a290300370300203141186a200441286a2903003703" - "00203141106a200441206a290300370300200441a0046a2400200541206a" - "2105200141c01a6a200141a00c6a200141e01c6a100c200641406b220641" - "c001470d000b200141b00f6a2205200141c01a6a100d201241c001100e20" - "0141c01a6a200141ed066a200541e000104c41e000104c1a200141e0066a" - "20014190026a100d200141a0186a21024200215c42002154420021532001" - "41e0066a220541386a2903002161200541286a290300215b200529033021" - "592005290320215e027e200529034022652005290350226a84200541c800" - "6a2903002262200541d8006a290300225a84845004402059215c20612154" - "205b2153205e0c010b42002059205e84205b20618484500d001a427f4200" - "427f4200205e42788342c7faf3c3ed82a3903c561b225c205b205c56ad7d" - "205c205b7d225b42f3eab8bce9ada5bfe8007d2253205b54ad7c42017c22" - "5b20597d225442a4cffaf397c9eed7c7007d225c205454ad2059205b56ad" - "7d427f511b20617d42a9c0c689aece93b2307c215442c7faf3c3ed82a390" - "3c205e7d0b21612002206a370350200220653703402002205c3703302002" - "20613703202002205a370358200220623703482002205437033820022053" - "37032820022005290300370300200241186a200541186a29030037030020" - "0241106a200541106a290300370300200241086a200541086a2903003703" - "0020014180196a20014190016a100f200141a01b6a2047100f200141e01c" - "6a200141d0026a100d200141c01d6a2048100f200141e0066a202d100d20" - "0141801f6a20014190036a100f200141c0076a2108420021654200215b42" - "00215c42002153024002400240200141801f6a2202290380012002418801" - "6a290300844200520d0020022903900120024198016a290300844200520d" - "0020022903a001200241a8016a290300844200520d0020022903b0012002" - "41b8016a29030084500d010b200241f8006a2903002159200241e8006a29" - "0300215e2002290370215420022903602161200229035022582002290340" - "226a84200241d8006a290300225a200241c8006a29030022628484420052" - "0440427f4200427f4200206a42788342c7faf3c3ed82a3903c561b226520" - "62206556ad7d206520627d226542f3eab8bce9ada5bfe8007d2253206554" - "ad7c42017c225c20587d225b42a4cffaf397c9eed7c7007d2265205b54ad" - "2058205c56ad7d427f511b205a7d42a9c0c689aece93b2307c215c42c7fa" - "f3c3ed82a3903c206a7d215b0b420021584200216a420021624200215a20" - "542061842059205e84844200520440427f4200427f4200206142788342c7" - "faf3c3ed82a3903c561b22582058205e54ad7d2058205e7d225e42f3eab8" - "bce9ada5bfe8007d226a205e54ad7c42017c225e20547d225842a4cffaf3" - "97c9eed7c7007d2262205854ad2054205e56ad7d427f511b20597d42a9c0" - "c689aece93b2307c215a42c7faf3c3ed82a3903c20617d21580b20082002" - "4180016a22052903003703800120082002290300370300200841b8016a20" - "0541386a290300370300200841b0016a200541306a290300370300200841" - "a8016a200541286a290300370300200841a0016a200541206a2903003703" - "0020084198016a200541186a29030037030020084190016a200541106a29" - "030037030020084188016a200541086a290300370300200841086a200241" - "086a290300370300200841106a200241106a290300370300200841186a20" - "0241186a290300370300200841206a200241206a29030037030020084128" - "6a200241286a290300370300200841306a200241306a2903003703002008" - "41386a200241386a2903003703002008205a370378200820623703702008" - "206a370368200820583703602008205c3703582008206537035020082053" - "3703482008205b3703400c010b2008200241c001104c1a0b200141a00f6a" - "200141a0186a41a002104c1a200141c0116a200141c01a6a41a002104c1a" - "200141e0136a200141e01c6a41a002104c1a20014180166a200141e0066a" - "41a002104c1a200141a00c6a2131230041b0d1006b220024002000410036" - "023820004280808080800237023020004100360244200042808080808002" - "37023c41102133200041306a10362000280234223b200141a00f6a220341" - "e000104c1a20004101360238200341e0006a2102200028023c4504402000" - "413c6a1038200028024021330b2033200241c001104c1a200341a0026a21" - "022000410136024420002802304101460440200041306a10362000280234" - "213b0b203b41e0006a200241e000104c1a2000410236023820034180036a" - "2102200028023c41014604402000413c6a1038200028024021330b203341" - "c0016a200241c001104c1a200341c0046a21022000410236024420002802" - "304102460440200041306a10362000280234213b0b203b41c0016a200241" - "e000104c1a20004103360238200341a0056a2102200028023c4102460440" - "2000413c6a1038200028024021330b20334180036a200241c001104c1a20" - "0341e0066a21022000410336024420002802304103460440200041306a10" - "362000280234213b0b203b41a0026a200241e000104c1a20004104360238" - "200341c0076a2103200028023c41034604402000413c6a10382000280240" - "21330b203341c0046a200341c001104c1a20004104360244200041003602" - "502000428080808080023702482000410036025c20004280808080800237" - "025420004180046a2151200041e00d6a2104200041b0076a212c20004190" - "c1006a2143200041d0c0006a2128200041f0c0006a2144200041c00d6a21" - "0b200041d0286a2106200041d01f6a211820004180c7006a212b200041b0" - "c7006a2107200041c0c7006a213c200041f0c6006a2102200041800e6a21" - "2d200041903b6a213d200041f03a6a2127200041d03a6a213e200041f00d" - "6a213f200041b00d6a221041086a212e200041f8c6006a214c200041b8c7" - "006a214d20004188c7006a214e200041c8c7006a211220004198c7006a21" - "1f200041d8c7006a2122200041a8c7006a2123200041e8c7006a21244110" - "2138411021050340200041e0006a203b204f41e0006c6a22031041200041" - "b0016a2033204f41c0016c6a220d104502402000280260410171450d0020" - "002802b001410171450d00200041a00d6a2003104120002802a00d410171" - "45044041a4a3c0001020000b200041f8026a2211201041386a2903003703" - "00200041f0026a2213201041306a290300370300200041e8026a22092010" - "41286a290300370300200041e0026a2215201041206a2903003703002000" - "41d8026a220f201041186a290300370300200041d0026a2225201041106a" - "290300370300200020102903003703c0022000202e2903003703c8022000" - "280248203946044041002108230041206b220e240002400240200041c800" - "6a221b280200220c417f460d00200c4101742205200c41016a2216200520" - "164b1b220541ffffff1f4b0d0041042005200541044d1b22054106742216" - "41f0ffffff074b0d00200e200c047f200e200c41067436021c200e201b28" - "020436021441100541000b360218200e41086a2016200e41146a1037200e" - "2802084101470d01200e2802101a200e28020c21080b200841b4a3c00010" - "19000b200e28020c210c201b2005360200201b200c360204200e41206a24" - "00200028024c21050b200520394106746a220320002903c0023703002003" - "41386a2011290300370300200341306a2013290300370300200341286a20" - "09290300370300200341206a2015290300370300200341186a200f290300" - "370300200341106a2025290300370300200341086a20002903c802370300" - "2000203941016a2239360250200041a00d6a200d10450240024020002802" - "a00d4101710440200041b03a6a2010418001104c1a200041d80d6a222542" - "00370300200041d00d6a223a4200370300200041c80d6a22294200370300" - "200b4200370300200041b80d6a220d420037030020104200370300203f42" - "00370300203f41086a4200370300203f41106a4200370300203f41186a42" - "00370300203f41206a4200370300203f41286a4200370300200042003703" - "e80d200042013703e00d200042003703a80d200042003703a00d027f0240" - "0240200041b03a6a200041a00d6a104a0d00203e200b104a0d0020272004" - "104a0d00203d202d104a450d010b203c4200370300200220272903003703" - "00203c41086a4200370300203c41106a4200370300203c41186a42003703" - "00203c41206a4200370300203c41286a4200370300200241386a20274138" - "6a290300370300200241306a202741306a290300370300200241286a2027" - "41286a290300370300200241206a202741206a290300370300200241186a" - "202741186a290300370300200241106a202741106a290300370300200241" - "086a202741086a290300370300200041e8c6006a200041e83a6a29030037" - "0300200041e0c6006a200041e03a6a290300370300200041d8c6006a2000" - "41d83a6a290300370300200041d0c6006a203e290300370300200041c8c6" - "006a200041c83a6a290300370300200041c0c6006a200041c03a6a290300" - "370300200020002903b83a3703b846200020002903b03a3703b04620070c" - "010b200041c0c6006a4200370300200041c8c6006a4200370300200041d0" - "c6006a4200370300200041d8c6006a4200370300200041e0c6006a420037" - "0300200041e8c6006a4200370300200042003703b046200042003703b846" - "202b41f000104b1a20020b220342003703082003420137030041bda9c000" - "2d00001a41809901100b221e450d0141002109200041003602b819200020" - "1e3602b419200041e6003602b019200041b03d6a200041b03a6a100a4140" - "212a0340200041a00d6a200041b0c6006a2002102f200041c8c3006a2215" - "200d290300370300200041c0c3006a220f20102903003703002000200029" - "03a80d3703b843200020002903a00d3703b043200041b0c3006a42a4fdf9" - "e1b6c191889e7f42c6cae3a18ba9ade04b42aed88286b4db88945c4294a0" - "e38497e789991842c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b" - "200041a8076a2211200b41186a221b290300370300200041a0076a221320" - "0b41106a22342903003703002000200b41086a2240290300370398072000" - "200b2903003703900720004190076a42a4fdf9e1b6c191889e7f42c6cae3" - "a18ba9ade04b42aed88286b4db88945c4294a0e38497e789991842c7faf3" - "c3ed82a3903c428d95c7c396d2dac0977f102b200041c81f6a2015290300" - "370300200041c01f6a200f29030037030020182000290390073703002018" - "41086a200029039807370300201841106a2013290300370300201841186a" - "2011290300370300200020002903b8433703b81f200020002903b0433703" - "b01f200041e8346a2203200241386a290300370300200041e0346a200241" - "306a290300370300200041d8346a2232200241286a290300370300200041" - "d0346a200241206a290300370300200041c8346a220e200241186a290300" - "370300200041c0346a200241106a2903003703002000200241086a290300" - "3703b834200020022903003703b034200041b0346a20022002102f200041" - "e8376a2219200741386a290300370300200041e0376a200741306a290300" - "370300200041d8376a221a200741286a290300370300200041d0376a2007" - "41206a290300370300200041c8376a222f200741186a2903003703002000" - "41c0376a2230200741106a2903003703002000200741086a2903003703b8" - "37200020072903003703b037200041b0376a20072007102f20002903b837" - "226942018620002903b037226b423f88842155206b420186215402400240" - "027e203029030022664201862069423f8884225342ddb0858ce8b691a8b8" - "7f85202f290300227820787c2066423f887c225642a9c0c689aece93b230" - "8584500440205442c7faf3c3ed82a3903c542055428d95c7c396d2dac097" - "7f542055428d95c7c396d2dac0977f511b450d0242a9c0c689aece93b230" - "215642ddb0858ce8b691a8b87f0c010b205342deb0858ce8b691a8b87f54" - "205642a9c0c689aece93b23054205642a9c0c689aece93b230511b450d01" - "20530b215a2054215f205521580c010b205620532055205442c7faf3c3ed" - "82a3903c7d225f20545aad22547d225942f3eab8bce9ada5bfe8007c2258" - "205954ad2054205556ad7d7c2255205354ad205542a2cffaf397c9eed7c7" - "007c225a205554ad7c50ad7d42a9c0c689aece93b2307d21560b201a2903" - "00226742018620002903d037226f423f88842154206f4201862153024002" - "4020002903e037225e4201862067423f8884225942ddb0858ce8b691a8b8" - "7f852019290300227720777c205e423f887c225542a9c0c689aece93b230" - "8584500440205342c7faf3c3ed82a3903c542054428d95c7c396d2dac097" - "7f542054428d95c7c396d2dac0977f511b450d0142a9c0c689aece93b230" - "215542ddb0858ce8b691a8b87f21602053215b205421700c020b205942de" - "b0858ce8b691a8b87f54205542a9c0c689aece93b23054205542a9c0c689" - "aece93b230511b450d002053215b20542170205921600c010b2055205920" - "54205342c7faf3c3ed82a3903c7d225b20535aad22537d226042f3eab8bc" - "e9ada5bfe8007c2270206054ad2053205456ad7d7c2254205954ad205442" - "a2cffaf397c9eed7c7007c2260205454ad7c50ad7d42a9c0c689aece93b2" - "307d21550b02400240027e205a20667c225a205820697c2254206954ad20" - "54205f206b7c2259206b54ad7c2253205454ad7c7c225442ddb0858ce8b6" - "91a8b87f85205a206654ad2054205a54ad7c205620787c7c225642a9c0c6" - "89aece93b2308584500440205942c7faf3c3ed82a3903c542053428d95c7" - "c396d2dac0977f542053428d95c7c396d2dac0977f511b450d0242a9c0c6" - "89aece93b230215642ddb0858ce8b691a8b87f0c010b205442deb0858ce8" - "b691a8b87f54205642a9c0c689aece93b23054205642a9c0c689aece93b2" - "30511b450d0120540b215f205921582053215c0c010b2056205420532059" - "42c7faf3c3ed82a3903c7d225820595aad22597d225a42f3eab8bce9ada5" - "bfe8007c225c205a54ad2053205954ad7d7c2253205454ad205342a2cffa" - "f397c9eed7c7007c225f205354ad7c50ad7d42a9c0c689aece93b2307d21" - "560b02400240205e20607c225a206720707c2254206754ad2054205b206f" - "7c2259206f54ad7c2253205454ad7c7c225442ddb0858ce8b691a8b87f85" - "205a205e54ad2054205a54ad7c205520777c7c225542a9c0c689aece93b2" - "308584500440205942c7faf3c3ed82a3903c542053428d95c7c396d2dac0" - "977f542053428d95c7c396d2dac0977f511b450d0142a9c0c689aece93b2" - "30215542ddb0858ce8b691a8b87f21542059215a205321590c020b205442" - "deb0858ce8b691a8b87f54205542a9c0c689aece93b23054205542a9c0c6" - "89aece93b230511b450d002059215a205321590c010b2055205420532059" - "42c7faf3c3ed82a3903c7d225a20595aad22607d225b42f3eab8bce9ada5" - "bfe8007c2259205b54ad2053206054ad7d7c2253205454ad205342a2cffa" - "f397c9eed7c7007c2254205354ad7c50ad7d42a9c0c689aece93b2307d21" - "550b200020543703e0222000205a3703d0222000205f3703c02220002058" - "3703b022200020553703e822200020593703d822200020563703c8222000" - "205c3703b822200042d4fdc3d783f6c4cb003703d80d200042f4fbe3f6de" - "f5ab964d3703d00d200042d2b0b4a9ce90e8a7a77f3703c80d200042d2ab" - "8caee8a0afd1643703c00d200042aed5e2f58ca8a78a2b3703b80d200042" - "c3d581df919386df817f3703b00d200042a3dfefced5bcb1dab57f3703a8" - "0d200042e5f184a5c2dbf9b3323703a00d200041b0256a200041a00d6a20" - "0041b0226a102f20002903b825226442018620002903b025226e423f8884" - "2155206e420186215402400240027e20002903c02522704201862064423f" - "8884225342ddb0858ce8b691a8b87f85200041c8256a2219290300226020" - "607c2070423f887c225642a9c0c689aece93b2308584500440205442c7fa" - "f3c3ed82a3903c542055428d95c7c396d2dac0977f542055428d95c7c396" - "d2dac0977f511b450d0242a9c0c689aece93b230215642ddb0858ce8b691" - "a8b87f0c010b205342deb0858ce8b691a8b87f54205642a9c0c689aece93" - "b23054205642a9c0c689aece93b230511b450d0120530b215a2054215f20" - "5521580c010b205620532055205442c7faf3c3ed82a3903c7d225f20545a" - "ad22547d225942f3eab8bce9ada5bfe8007c2258205954ad2054205556ad" - "7d7c2255205354ad205542a2cffaf397c9eed7c7007c225a205554ad7c50" - "ad7d42a9c0c689aece93b2307d21560b200041d8256a221a290300227142" - "018620002903d0252265423f888421542065420186215302400240200029" - "03e025225c4201862071423f8884225942ddb0858ce8b691a8b87f852000" - "41e8256a2217290300225b205b7c205c423f887c225542a9c0c689aece93" - "b2308584500440205342c7faf3c3ed82a3903c542054428d95c7c396d2da" - "c0977f542054428d95c7c396d2dac0977f511b450d0142a9c0c689aece93" - "b230215542ddb0858ce8b691a8b87f21682053216c205421730c020b2059" - "42deb0858ce8b691a8b87f54205542a9c0c689aece93b23054205542a9c0" - "c689aece93b230511b450d002053216c20542173205921680c010b205520" - "592054205342c7faf3c3ed82a3903c7d226c20535aad22537d226842f3ea" - "b8bce9ada5bfe8007c2273206854ad2053205456ad7d7c2254205954ad20" - "5442a2cffaf397c9eed7c7007c2268205454ad7c50ad7d42a9c0c689aece" - "93b2307d21550b02400240027e205a20707c225a205820647c2254206454" - "ad2054205f206e7c2259206e54ad7c2253205454ad7c7c225442ddb0858c" - "e8b691a8b87f85205a207054ad2054205a54ad7c205620607c7c225a42a9" - "c0c689aece93b2308584500440205942c7faf3c3ed82a3903c542053428d" - "95c7c396d2dac0977f542053428d95c7c396d2dac0977f511b450d0242a9" - "c0c689aece93b230215a42ddb0858ce8b691a8b87f0c010b205442deb085" - "8ce8b691a8b87f54205a42a9c0c689aece93b23054205a42a9c0c689aece" - "93b230511b450d0120540b21742059217d2053216a0c010b205a20542053" - "205942c7faf3c3ed82a3903c7d227d20595aad22567d225942f3eab8bce9" - "ada5bfe8007c226a205954ad2053205654ad7d7c2256205454ad205642a2" - "cffaf397c9eed7c7007c2274205654ad7c50ad7d42a9c0c689aece93b230" - "7d215a0b02400240205c20687c2259207120737c2256207154ad20562065" - "206c7c2253206554ad7c2254205654ad7c7c225642ddb0858ce8b691a8b8" - "7f852059205c54ad2056205954ad7c2055205b7c7c225f42a9c0c689aece" - "93b2308584500440205342c7faf3c3ed82a3903c542054428d95c7c396d2" - "dac0977f542054428d95c7c396d2dac0977f511b450d0142a9c0c689aece" - "93b230215f42ddb0858ce8b691a8b87f21732053217b205421790c020b20" - "5642deb0858ce8b691a8b87f54205f42a9c0c689aece93b23054205f42a9" - "c0c689aece93b230511b450d002053217b20542179205621730c010b205f" - "20562054205342c7faf3c3ed82a3903c7d227b20535aad22557d225342f3" - "eab8bce9ada5bfe8007c2279205354ad2054205554ad7d7c2255205654ad" - "205542a2cffaf397c9eed7c7007c2273205554ad7c50ad7d42a9c0c689ae" - "ce93b2307d215f0b02400240027e207420002903c03422547c2256206a20" - "002903b83422537c2255206a54ad2055207d20002903b03422587c226820" - "7d54ad7c2259205554ad7c7c225542ddb0858ce8b691a8b87f8520562074" - "54ad2055205654ad7c205a200e29030022567c7c226d42a9c0c689aece93" - "b2308584500440206842c7faf3c3ed82a3903c542059428d95c7c396d2da" - "c0977f542059428d95c7c396d2dac0977f511b450d0242a9c0c689aece93" - "b230216d42ddb0858ce8b691a8b87f0c010b205542deb0858ce8b691a8b8" - "7f54206d42a9c0c689aece93b23054206d42a9c0c689aece93b230511b45" - "0d0120550b2172206821752059217a0c010b206d20552059206842c7faf3" - "c3ed82a3903c7d227520685aad22687d226c42f3eab8bce9ada5bfe8007c" - "227a206c54ad2059206854ad7d7c2259205554ad205942a2cffaf397c9ee" - "d7c7007c2272205954ad7c50ad7d42a9c0c689aece93b2307d216d0b0240" - "0240207320002903e03422597c22552079203229030022687c2263207954" - "ad2063207b20002903d034226c7c2261207b54ad7c2262206354ad7c7c22" - "5d42ddb0858ce8b691a8b87f852055207354ad2055205d56ad7c205f2003" - "29030022557c7c226342a9c0c689aece93b2308584500440206142c7faf3" - "c3ed82a3903c542062428d95c7c396d2dac0977f542062428d95c7c396d2" - "dac0977f511b450d0142a9c0c689aece93b230216342ddb0858ce8b691a8" - "b87f215d20612157206221610c020b205d42deb0858ce8b691a8b87f5420" - "6342a9c0c689aece93b23054206342a9c0c689aece93b230511b450d0020" - "612157206221610c010b2063205d2062206142c7faf3c3ed82a3903c7d22" - "5720615aad227c7d227642f3eab8bce9ada5bfe8007c2261207654ad2062" - "207c54ad7d7c2262205d54ad206242a2cffaf397c9eed7c7007c225d2062" - "54ad7c50ad7d42a9c0c689aece93b2307d21630b2011206d370300201320" - "723703002000207a37039807200020753703900720004190076a42a4fdf9" - "e1b6c191889e7f42c6cae3a18ba9ade04b42aed88286b4db88945c4294a0" - "e38497e789991842c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b" - "200d20633703002010205d370300200020613703a80d200020573703a00d" - "200041a00d6a42a4fdf9e1b6c191889e7f42c6cae3a18ba9ade04b42aed8" - "8286b4db88945c4294a0e38497e789991842c7faf3c3ed82a3903c428d95" - "c7c396d2dac0977f102b200041c8286a22032011290300370300200041c0" - "286a220e2013290300370300200620002903a00d370300200641086a2000" - "2903a80d370300200641106a2010290300370300200641186a200d290300" - "37030020002000290398073703b82820002000290390073703b028024002" - "40027e20002903c04722612000290380477c226d204d290300225d204c29" - "03007c2263205d54ad206320002903b047225d20002903f0467c2262205d" - "54ad7c225d206354ad7c7c226342ddb0858ce8b691a8b87f852061206d56" - "ad2063206d54ad7c2012290300204e2903007c7c226d42a9c0c689aece93" - "b2308584500440206242c7faf3c3ed82a3903c54205d428d95c7c396d2da" - "c0977f54205d428d95c7c396d2dac0977f511b450d0242a9c0c689aece93" - "b230216d42ddb0858ce8b691a8b87f0c010b206342deb0858ce8b691a8b8" - "7f54206d42a9c0c689aece93b23054206d42a9c0c689aece93b230511b45" - "0d0120630b217220622175205d217a0c010b206d2063205d206242c7faf3" - "c3ed82a3903c7d227520625aad22627d226142f3eab8bce9ada5bfe8007c" - "227a206154ad205d206254ad7d7c225d206354ad205d42a2cffaf397c9ee" - "d7c7007c2272205d54ad7c50ad7d42a9c0c689aece93b2307d216d0b0240" - "024020002903e047225720002903a0477c226320222903002262201f2903" - "007c225d206254ad205d20002903d04722622000290390477c2261206254" - "ad7c2262205d54ad7c7c225d42ddb0858ce8b691a8b87f852057206356ad" - "205d206354ad7c202429030020232903007c7c226342a9c0c689aece93b2" - "308584500440206142c7faf3c3ed82a3903c542062428d95c7c396d2dac0" - "977f542062428d95c7c396d2dac0977f511b450d0142a9c0c689aece93b2" - "30216342ddb0858ce8b691a8b87f215d20612157206221610c020b205d42" - "deb0858ce8b691a8b87f54206342a9c0c689aece93b23054206342a9c0c6" - "89aece93b230511b450d0020612157206221610c010b2063205d20622061" - "42c7faf3c3ed82a3903c7d225720615aad227c7d227642f3eab8bce9ada5" - "bfe8007c2261207654ad2062207c54ad7d7c2262205d54ad206242a2cffa" - "f397c9eed7c7007c225d206254ad7c50ad7d42a9c0c689aece93b2307d21" - "630b200d206d3703002010207237030020292061370300200b2057370300" - "203a205d37030020252063370300200041c0c0006a224520723703002000" - "41c8c0006a2232206d37030020282057370300200041d8c0006a22142061" - "370300200041e0c0006a205d370300200041e8c0006a221c206337030020" - "0020753703a00d200020753703b0402000207a3703a80d2000207a3703b8" - "40200041b0c0006a200041a00d6a200041a00d6a102f02400240027e2054" - "20667c226d205320697c2262206954ad20622058206b7c2263206b54ad7c" - "225d206254ad7c7c226b42ddb0858ce8b691a8b87f852066206d56ad206b" - "206d54ad7c205620787c7c226942a9c0c689aece93b23085845004402063" - "42c7faf3c3ed82a3903c54205d428d95c7c396d2dac0977f54205d428d95" - "c7c396d2dac0977f511b450d0242a9c0c689aece93b230216942ddb0858c" - "e8b691a8b87f0c010b206b42deb0858ce8b691a8b87f54206942a9c0c689" - "aece93b23054206942a9c0c689aece93b230511b450d01206b0b216d2063" - "2178205d21630c010b2069206b205d206342c7faf3c3ed82a3903c7d2278" - "20635aad22667d226d42f3eab8bce9ada5bfe8007c2263206d54ad205d20" - "6654ad7d7c2266206b54ad206642a2cffaf397c9eed7c7007c226d206654" - "ad7c50ad7d42a9c0c689aece93b2307d21690b024002402059205e7c226b" - "206720687c2266206754ad2066206c206f7c225d206f54ad7c2267206654" - "ad7c7c226642ddb0858ce8b691a8b87f85205e206b56ad2066206b54ad7c" - "205520777c7c226b42a9c0c689aece93b2308584500440205d42c7faf3c3" - "ed82a3903c542067428d95c7c396d2dac0977f542067428d95c7c396d2da" - "c0977f511b450d0142a9c0c689aece93b230216b42ddb0858ce8b691a8b8" - "7f216f205d21772067215e0c020b206642deb0858ce8b691a8b87f54206b" - "42a9c0c689aece93b23054206b42a9c0c689aece93b230511b450d00205d" - "21772067215e2066216f0c010b206b20662067205d42c7faf3c3ed82a390" - "3c7d2277205d5aad226f7d225d42f3eab8bce9ada5bfe8007c225e205d54" - "ad2067206f54ad7d7c2267206654ad206742a2cffaf397c9eed7c7007c22" - "6f206754ad7c50ad7d42a9c0c689aece93b2307d216b0b20002903b84021" - "5d20002903b040216102400240417f20002903c0402267206d8520322903" - "002266206985844200522067206d54206620695420662069511b1b222141" - "7f470440202141ff01710d01206120785a205d20635a205d2063511b0d01" - "0b20662067205d206142c7faf3c3ed82a3903c7c2262206154ad7c226120" - "5d54ad206142f3eab8bce9ada5bfe8007d225d206154ad7c7c2261206754" - "ad7c206142a3cffaf397c9eed7c7007d2275206154ad7c42a9c0c689aece" - "93b2307c21660c010b20672175206121620b205d20637d227a2062207854" - "ad225754ad217c205d206354ad21762014290300215d20002903d0402172" - "02400240417f20002903e0402263206f85201c2903002267206b85844200" - "522063206f542067206b542067206b511b1b2214417f470440201441ff01" - "710d01207220775a205d205e5a205d205e511b0d010b20672063205d2072" - "42c7faf3c3ed82a3903c7c2261207254ad7c2272205d54ad207242f3eab8" - "bce9ada5bfe8007d225d207254ad7c7c2272206354ad7c207242a3cffaf3" - "97c9eed7c7007d227e207254ad7c42a9c0c689aece93b2307c21670c010b" - "2063217e207221610b206d427f85216d2076207c7c2172206f427f852163" - "205d205e54ad205d205e7d225d2061207754ad227c54ad7c217602400240" - "417f20542070852056206085844200522054207056205620605620562060" - "511b1b2214417f470440201441ff01710d012058206e5820532064582053" - "2064511b0d010b206020702064206e42c7faf3c3ed82a3903c7c225e206e" - "54ad7c226f206454ad206f42f3eab8bce9ada5bfe8007d226e206f54ad7c" - "7c2264207054ad206442a3cffaf397c9eed7c7007d2270206454ad7c7c42" - "a9c0c689aece93b2307c21600c010b206e215e2064216e0b206d20757c21" - "64420120727d21722063207e7c216f420120767d2175206020567d205442" - "7f85227620707c2260207654ad206042012053206e56ad7d206e20537d22" - "702058205e56ad226e54ad7d7c227f206054ad7c50ad7d21762070206e7d" - "216e205e20587d217e02400240417f2059205c852055205b858442005220" - "59205c562055205b562055205b511b1b2214417f470440201441ff01710d" - "012065206c5a206820715820682071511b0d010b205b205c2071206542c7" - "faf3c3ed82a3903c7c225e206554ad7c2260207154ad206042f3eab8bce9" - "ada5bfe8007d2271206054ad7c7c2260205c54ad206042a3cffaf397c9ee" - "d7c7007d225c206054ad7c7c42a9c0c689aece93b2307c215b0c010b2065" - "215e0b206420727c2160206f20757c2170200f200041c0c6006a29030037" - "03002015200041c8c6006a290300370300200041d0c3006a200041d0c600" - "6a290300370300200041d8c3006a2214200041d8c6006a29030037030020" - "0041e0c3006a200041e0c6006a290300370300200041e8c3006a221c2000" - "41e8c6006a2903003703002000207f3703c02b2000207e3703b02b200020" - "002903b0463703b043200020002903b8463703b8432000205e206c7d3703" - "d02b200020763703c82b2000206e3703b82b2000207120687d226e205e20" - "6c54ad225e7d3703d82b20002059427f852265205c7c225c420120682071" - "56ad7d205e206e56ad7d7c22713703e02b2000205b20557d205c207156ad" - "205c206554ad7c50ad7d3703e82b200041b0c3006a200041b0c6006a2000" - "41b0c6006a102f200041c8076a22212017290300370300200041c0076a20" - "0041e0256a290300370300200041b8076a2217201a290300370300202c20" - "0041d0256a290300370300201120192903003703002013200041c0256a29" - "0300370300200020002903b82537039807200020002903b0253703900720" - "004190076a200041b0256a200041b0256a102f0240417f20542074852056" - "205a858442005220542074542056205a542056205a511b1b2219417f4704" - "40201941ff01710d012058207d5a2053206a5a2053206a511b0d010b2056" - "20542053205842c7faf3c3ed82a3903c7c225b205854ad7c2258205354ad" - "205842f3eab8bce9ada5bfe8007d225c205854ad7c7c2253205454ad2053" - "42a3cffaf397c9eed7c7007d2254205354ad7c7c42a9c0c689aece93b230" - "7c2156205b2158205c21530b2064206d5421192060206454211a2063206f" - "56210c206f20705621162056205a7d2074427f85225a20547c2256205a54" - "ad205642012053206a54ad7d2053206a7d22542058207d54ad225354ad7d" - "7c225a205654ad7c50ad7d215b205420537d21532058207d7d2158024002" - "40417f20592073852055205f858442005220592073542055205f54205520" - "5f511b1b2208417f470440200841ff01710d01206c207b5a206820795a20" - "682079511b0d010b205520592068206c42c7faf3c3ed82a3903c7c225620" - "6c54ad7c225c206854ad205c42f3eab8bce9ada5bfe8007d2254205c54ad" - "7c7c225c205954ad205c42a3cffaf397c9eed7c7007d2259205c54ad7c7c" - "42a9c0c689aece93b2307c21550c010b206c2156206821540b2019ad215c" - "201aad2164200cad21712016ad216c2000205a3703c031200020583703b0" - "3120002056207b7d3703d0312000205b3703c831200020533703b8312000" - "205420797d22532056207b54ad225a7d3703d83120002073427f85225820" - "597c225642012054207954ad7d2053205a54ad7d7c22543703e031200020" - "55205f7d2054205654ad2056205854ad7c50ad7d3703e831200041b0c600" - "6a200041b01f6a200041b0316a102f2010200e290300370300200d200329" - "0300370300200b20062903003703002029200041d8286a29030037030020" - "3a200041e0286a2903003703002025200041e8286a290300370300200020" - "002903b0283703a00d200020002903b8283703a80d200041a00d6a200041" - "b0286a200041b0286a102f20002903980722544201862000290390072253" - "423f888421552053420186215a02400240027e20002903a0072259420186" - "2054423f8884225f42ddb0858ce8b691a8b87f852011290300226820687c" - "2059423f887c225642a9c0c689aece93b2308584500440205a42c7faf3c3" - "ed82a3903c542055428d95c7c396d2dac0977f542055428d95c7c396d2da" - "c0977f511b450d0242a9c0c689aece93b230215642ddb0858ce8b691a8b8" - "7f0c010b205f42deb0858ce8b691a8b87f54205642a9c0c689aece93b230" - "54205642a9c0c689aece93b230511b450d01205f0b216f205a215e205521" - "740c010b2056205f2055205a42c7faf3c3ed82a3903c7d225e205a5aad22" - "5a7d225842f3eab8bce9ada5bfe8007c2274205854ad2055205a54ad7d7c" - "2255205f54ad205542a2cffaf397c9eed7c7007c226f205554ad7c50ad7d" - "42a9c0c689aece93b2307d21560b205c20647c2173206c20717c216c2017" - "290300225a42018620002903b007225f423f8884215b205f420186215c02" - "40024020002903c0072258420186205a423f8884226442ddb0858ce8b691" - "a8b87f852021290300227120717c2058423f887c225542a9c0c689aece93" - "b2308584500440205c42c7faf3c3ed82a3903c54205b428d95c7c396d2da" - "c0977f54205b428d95c7c396d2dac0977f511b450d0142a9c0c689aece93" - "b230215542ddb0858ce8b691a8b87f216e205c2165205b216a0c020b2064" - "42deb0858ce8b691a8b87f54205542a9c0c689aece93b23054205542a9c0" - "c689aece93b230511b450d00205c2165205b216a2064216e0c010b205520" - "64205b205c42c7faf3c3ed82a3903c7d2265205c5aad225c7d226e42f3ea" - "b8bce9ada5bfe8007c226a206e54ad205b205c54ad7d7c225b206454ad20" - "5b42a2cffaf397c9eed7c7007c226e205b54ad7c50ad7d42a9c0c689aece" - "93b2307d21550b2073502103206c50210e02400240027e2059206f7c225b" - "205420747c2264205454ad20642053205e7c225c205354ad7c2253206454" - "ad7c7c225442ddb0858ce8b691a8b87f852059205b56ad2054205b54ad7c" - "205620687c7c225642a9c0c689aece93b2308584500440205c42c7faf3c3" - "ed82a3903c542053428d95c7c396d2dac0977f542053428d95c7c396d2da" - "c0977f511b450d0242a9c0c689aece93b230215642ddb0858ce8b691a8b8" - "7f0c010b205442deb0858ce8b691a8b87f54205642a9c0c689aece93b230" - "54205642a9c0c689aece93b230511b450d0120540b215b205c2164205321" - "5c0c010b205620542053205c42c7faf3c3ed82a3903c7d2264205c5aad22" - "597d225b42f3eab8bce9ada5bfe8007c225c205b54ad2053205954ad7d7c" - "2253205454ad205342a2cffaf397c9eed7c7007c225b205354ad7c50ad7d" - "42a9c0c689aece93b2307d21560b2003ad2168206620697d216c200ead21" - "662067206b7d2167024002402058206e7c2269205a206a7c2254205a54ad" - "2054205f20657c2259205f54ad7c2253205454ad7c7c225442ddb0858ce8" - "b691a8b87f852058206956ad2054206954ad7c205520717c7c225542a9c0" - "c689aece93b2308584500440205942c7faf3c3ed82a3903c542053428d95" - "c7c396d2dac0977f542053428d95c7c396d2dac0977f511b450d0142a9c0" - "c689aece93b230215542ddb0858ce8b691a8b87f215a2059217120532169" - "0c020b205442deb0858ce8b691a8b87f54205542a9c0c689aece93b23054" - "205542a9c0c689aece93b230511b450d0020592171205321692054215a0c" - "010b205520542053205942c7faf3c3ed82a3903c7d227120595aad22597d" - "225a42f3eab8bce9ada5bfe8007c2269205a54ad2053205954ad7d7c2253" - "205454ad205342a2cffaf397c9eed7c7007c225a205354ad7c50ad7d42a9" - "c0c689aece93b2307d21550b206c20687d216b207a20577d215320672066" - "7d2168205d207c7d215920002903a80d215820002903a00d216602400240" - "417f20002903b00d225f205b85200d290300225420568584420052205b20" - "5f56205420565420542056511b1b2203417f470440200341ff01710d0120" - "642066582058205c5a2058205c511b0d010b2054205f2058206642c7faf3" - "c3ed82a3903c7c226c206654ad7c2267205854ad206742f3eab8bce9ada5" - "bfe8007d2266206754ad7c7c2258205f54ad7c205842a3cffaf397c9eed7" - "c7007d2267205854ad7c42a9c0c689aece93b2307c21540c010b205f2167" - "2066216c205821660b206220787d215f206120777d2158205420567d205b" - "427f85225420677c2256205454ad2056205c206656ad2066205c7d225420" - "64206c56ad225b54ad7c7d42017c2266205654ad7c50ad7d21672054205b" - "7d216f206c20647d216c2029290300215b20002903c00d21640240024041" - "7f20002903d00d2254205a8520252903002256205585844200522054205a" - "54205520565620552056511b1b2203417f470440200341ff01710d012064" - "20715a205b20695a205b2069511b0d010b20562054205b206442c7faf3c3" - "ed82a3903c7c225c206454ad7c2264205b54ad206442f3eab8bce9ada5bf" - "e8007d225b206454ad7c7c2264205454ad7c206442a3cffaf397c9eed7c7" - "007d2254206454ad7c42a9c0c689aece93b2307c21560c010b2064215c0b" - "20002066370380472000206c3703f0462000205c20717d37039047200020" - "67370388472000206f3703f8462000205b20697d2264205c207154ad225c" - "7d370398472000205a427f85225a20547c2254205b206954ad205c206456" - "ad7c7d42017c225b3703a0472000205620557d2054205a54ad2054205b56" - "ad7c50ad7d3703a847200020683703e831200020703703e0312000205937" - "03d831200020583703d031200020603703c0312000206b3703c831200020" - "5f3703b031200020533703b8312007200041b0346a200041b0316a102f42" - "002164200042003703e831200042003703e031200042003703d831200042" - "013703d031200042003703c831200042003703c031200042003703b83120" - "0042093703b031200041b02e6a200041b0316a200041b02b6a102f420021" - "714200216c4200216642002167205f2060842053206b8484420052044042" - "c7faf3c3ed82a3903c205f7d2166427f4200427f4200205f42788342c7fa" - "f3c3ed82a3903c561b22562053205656ad7d205620537d225642f3eab8bc" - "e9ada5bfe8007d2267205654ad7c42017c225620607d225542a4cffaf397" - "c9eed7c7007d2271205554ad2056206054ad7d427f511b206b7d42a9c0c6" - "89aece93b2307c216c0b4200216b4200216f4200215e2058207084205920" - "688484420052044042c7faf3c3ed82a3903c20587d2164427f4200427f42" - "00205842788342c7faf3c3ed82a3903c561b22562056205954ad7d205620" - "597d225642f3eab8bce9ada5bfe8007d226b205654ad7c42017c22562070" - "7d225542a4cffaf397c9eed7c7007d226f205554ad2056207054ad7d427f" - "511b20687d42a9c0c689aece93b2307c215e0b20002903b8432254420186" - "20002903b0432253423f888421552053420186215a02400240027e200029" - "03c04322594201862054423f8884225f42ddb0858ce8b691a8b87f852015" - "290300227020707c2059423f887c225642a9c0c689aece93b23085845004" - "40205a42c7faf3c3ed82a3903c542055428d95c7c396d2dac0977f542055" - "428d95c7c396d2dac0977f511b450d0242a9c0c689aece93b230215642dd" - "b0858ce8b691a8b87f0c010b205f42deb0858ce8b691a8b87f54205642a9" - "c0c689aece93b23054205642a9c0c689aece93b230511b450d01205f0b21" - "68205a2174205521730c010b2056205f2055205a42c7faf3c3ed82a3903c" - "7d2274205a5aad225a7d225842f3eab8bce9ada5bfe8007c2273205854ad" - "2055205a54ad7d7c2255205f54ad205542a2cffaf397c9eed7c7007c2268" - "205554ad7c50ad7d42a9c0c689aece93b2307d21560b2014290300225a42" - "018620002903d043225f423f88842160205f420186215b02400240200029" - "03e0432258420186205a423f8884226942ddb0858ce8b691a8b87f85201c" - "290300225c205c7c2058423f887c225542a9c0c689aece93b23085845004" - "40205b42c7faf3c3ed82a3903c542060428d95c7c396d2dac0977f542060" - "428d95c7c396d2dac0977f511b450d0142a9c0c689aece93b230215542dd" - "b0858ce8b691a8b87f216e205b21652060216a0c020b206942deb0858ce8" - "b691a8b87f54205542a9c0c689aece93b23054205542a9c0c689aece93b2" - "30511b450d00205b21652060216a2069216e0c010b205520692060205b42" - "c7faf3c3ed82a3903c7d2265205b5aad225b7d226e42f3eab8bce9ada5bf" - "e8007c226a206e54ad205b206056ad7d7c2260206954ad206042a2cffaf3" - "97c9eed7c7007c226e206054ad7c50ad7d42a9c0c689aece93b2307d2155" - "0b02400240027e205920687c225b205420737c2269205454ad2069205320" - "747c2260205354ad7c2253206954ad7c7c225442ddb0858ce8b691a8b87f" - "852059205b56ad2054205b54ad7c205620707c7c225642a9c0c689aece93" - "b2308584500440206042c7faf3c3ed82a3903c542053428d95c7c396d2da" - "c0977f542053428d95c7c396d2dac0977f511b450d0242a9c0c689aece93" - "b230215642ddb0858ce8b691a8b87f0c010b205442deb0858ce8b691a8b8" - "7f54205642a9c0c689aece93b23054205642a9c0c689aece93b230511b45" - "0d0120540b215b20602170205321690c010b205620542053206042c7faf3" - "c3ed82a3903c7d227020605aad22597d226042f3eab8bce9ada5bfe8007c" - "2269206054ad2053205954ad7d7c2253205454ad205342a2cffaf397c9ee" - "d7c7007c225b205354ad7c50ad7d42a9c0c689aece93b2307d21560b0240" - "02402058206e7c2260205a206a7c2254205a54ad2054205f20657c225920" - "5f54ad7c2253205454ad7c7c225442ddb0858ce8b691a8b87f8520582060" - "56ad2054206054ad7c2055205c7c7c225542a9c0c689aece93b230858450" - "0440205942c7faf3c3ed82a3903c542053428d95c7c396d2dac0977f5420" - "53428d95c7c396d2dac0977f511b450d0142a9c0c689aece93b230215542" - "ddb0858ce8b691a8b87f21542059215a205321590c020b205442deb0858c" - "e8b691a8b87f54205542a9c0c689aece93b23054205542a9c0c689aece93" - "b230511b450d002059215a205321590c010b205520542053205942c7faf3" - "c3ed82a3903c7d225a20595aad225f7d225842f3eab8bce9ada5bfe8007c" - "2259205854ad2053205f54ad7d7c2253205454ad205342a2cffaf397c9ee" - "d7c7007c2254205354ad7c50ad7d42a9c0c689aece93b2307d21550b2000" - "41e81c6a2203200041e82e6a290300370300200041e01c6a220e200041e0" - "2e6a290300370300200041d81c6a2219200041d82e6a2903003703002000" - "41d01c6a221a200041d02e6a290300370300200041c81c6a2217200041c8" - "2e6a290300370300200041c01c6a2214200041c02e6a2903003703002000" - "20002903b82e3703b81c200020002903b02e3703b01c20002802b0192009" - "460440200041b0196a41c4a2c000103920002802b419211e0b2017290300" - "21532019290300215f2003290300215820002903b81c2160201e200941c0" - "016c6a220320553703b80120142903002155201a290300215c200e290300" - "216820002903b01c2174200320543703b001200320593703a8012003205a" - "3703a00120032056370398012003205b3703900120032069370388012003" - "2070370380012003205e3703782003206f3703702003206b370368200320" - "643703602003206c37035820032071370350200320673703482003206637" - "034020032074370300200341386a2058370300200341306a206837030020" - "0341286a205f370300200341206a205c370300200341186a205337030020" - "0341106a2055370300200341086a20603703002000200941016a22033602" - "b81902400240200041b0196a027f02400240202a41e4a1c0006a2d000041" - "016b0e03000401040b200041b0c9006a200041b0c6006a200041b03a6a10" - "49200041b0c9006a210e200320002802b019470d0241d4a2c0000c010b20" - "0041b0ce006a200041b0c6006a200041b03d6a1049200041b0ce006a210e" - "200320002802b019470d0141e4a2c0000b103920002802b419211e0b201e" - "200341c0016c6a200e41c001104c1a2000200941026a22033602b8190b20" - "032109202a41016a222a0d000b200042a0dcae8f86aaf9e4163703c80720" - "0042948fe8babd91b3d2cb003703c007200042cebbf2dbd0c38ad7323703" - "b807200042a297bfa0c6a3f5b2163703b007200042f7a3e4fb84f3d1d92f" - "3703a807200042c3e2e6aacf87fb85cc003703a0072000428ce68c968ce2" - "b0c6b77f37039807200042bdaabdbbf1aae5f1997f370390072015203e41" - "186a290300370300200f203e41106a2903003703002000203e41086a2903" - "003703b8432000203e2903003703b043200041b0c3006a42c6faf3c3ed82" - "a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689" - "aece93b23042c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b200d" - "200041c83a6a2903003703002010200041c03a6a290300370300200b2000" - "2903b043370300204020002903b8433703002034200f290300370300201b" - "2015290300370300200020002903b83a3703a80d200020002903b03a3703" - "a00d200041b0c0006a20004190076a200041a00d6a102f2000429a8984e2" - "ca978fe0073703c807200042abdee5e3feb4ad82073703c007200042d2b7" - "89fd98b99fc0213703b807200042e3e18eb1b2ecdfe9827f3703b0072000" - "42dcebebc4d4e0bc9e063703a807200042b9f38bb78bd3b1af5c3703a007" - "20004298b3a5ceda9db8d55b37039807200042daa6808de7a880aa5c3703" - "90072015203d41186a290300370300200f203d41106a2903003703002000" - "203d41086a2903003703b8432000203d2903003703b043200041b0c3006a" - "42c6faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8" - "b87f42a9c0c689aece93b23042c7faf3c3ed82a3903c428d95c7c396d2da" - "c0977f102b200d202741186a2903003703002010202741106a2903003703" - "00200b20002903b043370300204020002903b8433703002034200f290300" - "370300201b20152903003703002000202741086a2903003703a80d200020" - "272903003703a00d204420004190076a200041a00d6a102f200042a0dcae" - "8f86aaf9e4163703e843200042948fe8babd91b3d2cb003703e043200042" - "cebbf2dbd0c38ad7323703d843200042a297bfa0c6a3f5b2163703d04320" - "0042f7a3e4fb84f3d1d92f3703c843200042c3e2e6aacf87fb85cc003703" - "c0432000428ce68c968ce2b0c6b77f3703b843200042bdaabdbbf1aae5f1" - "997f3703b043202f202841186a2903003703002030202841106a29030037" - "03002000202841086a2903003703b837200020282903003703b037200041" - "b0376a42c6faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8" - "b691a8b87f42a9c0c689aece93b23042c7faf3c3ed82a3903c428d95c7c3" - "96d2dac0977f102b2011203229030037030020132045290300370300202c" - "20002903b037370300202c41086a220d20002903b837370300202c41106a" - "22092030290300370300202c41186a2215202f2903003703002000200029" - "03b84037039807200020002903b04037039007200041a00d6a200041b0c3" - "006a20004190076a102f2000429a8984e2ca978fe0073703e843200042ab" - "dee5e3feb4ad82073703e043200042d2b789fd98b99fc0213703d8432000" - "42e3e18eb1b2ecdfe9827f3703d043200042dcebebc4d4e0bc9e063703c8" - "43200042b9f38bb78bd3b1af5c3703c04320004298b3a5ceda9db8d55b37" - "03b843200042daa6808de7a880aa5c3703b043202f204341186a29030037" - "03002030204341106a2903003703002000204341086a2903003703b83720" - "0020432903003703b037200041b0376a42c6faf3c3ed82a3903c428d95c7" - "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b23042c7" - "faf3c3ed82a3903c428d95c7c396d2dac0977f102b2011204441186a2903" - "003703002013204441106a290300370300202c20002903b037370300200d" - "20002903b837370300200920302903003703002015202f29030037030020" - "00204441086a2903003703980720002044290300370390072004200041b0" - "c3006a20004190076a102f200041b0c3006a200041a00d6a100a20004190" - "076a200041b0c6006a200041b0c0006a104920002802b019221120034604" - "40200041b0196a41a4a2c000103920002802b019211120002802b419211e" - "0b201e200341c0016c6a20004190076a41c001104c1a2000200341016a22" - "0d3602b819200041a00d6a200041b0c6006a200041b0c3006a1049200d20" - "11470d02200041b0196a41b4a2c000103920002802b419211e0c020b41c4" - "a3c00010200b000b201e200d41c0016c6a200041a00d6a41c001104c1a20" - "0041b8196a220d200341026a36020020004180036a200041b03a6a418001" - "104c1a205141086a200d280200360200205120002902b019370200200028" - "025420464604404100211b230041206b220e240002400240200041d4006a" - "22162802002209417f460d00410420094101742208200941016a220c2008" - "200c4b1b2208200841044d1b220cad4290017e22534220884200520d0020" - "53a7220841f0ffffff074b0d00200e2009047f200e20094190016c36021c" - "200e201628020436021441100541000b360218200e41086a2008200e4114" - "6a1037200e2802084101470d01200e2802101a200e28020c211b0b201b41" - "d4a3c0001019000b200e28020c21092016200c3602002016200936020420" - "0e41206a2400200028025821380b203820464190016c6a20004180036a41" - "9001104c1a2000204641016a224636025c0b204f41016a224f4104470d00" - "0b0240024002400240024002400240024002400240024002402046450440" - "2000280254210320004190076a41f002104b1a20030d010c020b41002118" - "200041a0076a41f002104b1a200042003703980720004201370390072046" - "2039203920464b1b210820384184016a211b200041e00e6a2134200041b0" - "cf006a2119200041f0ce006a211a200041f0c3006a2114200041b0c4006a" - "2121200041b0ca006a2140200041f0c9006a2145200041b0c7006a214c20" - "004190086a212c200041f0c6006a214d200041d0076a212820004190096a" - "211c200041d0096a214e200041d0086a2117200041d0ce006a2110200041" - "d0c9006a21134100210c0240024002400340200041b0c3006a2000419007" - "6a2017103b200042003703e849200042003703e049200042003703d84920" - "0042013703d049200042003703c849200042003703c049200042003703b8" - "49200042093703b049200041b0ce006a204e200041b0c9006a102f201941" - "386a2203201c41386a290300370300201941306a2202201c41306a290300" - "370300201941286a2207201c41286a290300370300201941206a220b201c" - "41206a290300370300201941186a220d201c41186a290300370300201941" - "106a2211201c41106a290300370300201941086a2206201c41086a290300" - "3703002019201c290300370300201a2017290300370300201a41086a2209" - "201741086a290300370300201a41106a2215201741106a29030037030020" - "1a41186a220f201741186a290300370300201a41206a2225201741206a29" - "0300370300201a41286a2229201741286a290300370300201a41306a222a" - "201741306a290300370300201a41386a221e201741386a29030037030020" - "0041b0c6006a200041b0ce006a20004190076a1030204d201a2028103020" - "4c2019202c1030200041b0ce006a201741c001104c1a200041b0c9006a20" - "004190076a2017103020452028201a10302040202c20191030200041b0ce" - "006a200041b0c6006a200041b0c9006a103b200041b0c9006a200041b0ce" - "006a200041b0c3006a103c200042003703e846200042003703e046200042" - "003703d846200042013703d046200042003703c846200042003703c04620" - "0042003703b846200042093703b046200041b0ce006a2021200041b0c600" - "6a102f201a20002903b043370300200920002903b8433703002015200041" - "c0c3006a290300370300200f200041c8c3006a2903003703002025200041" - "d0c3006a2903003703002029200041d8c3006a290300370300202a200041" - "e0c3006a290300370300201e200041e8c3006a2903003703002003201441" - "386a2903003703002002201441306a2903003703002007201441286a2903" - "00370300200b201441206a290300370300200d201441186a290300370300" - "2011201441106a2903003703002006201441086a29030037030020192014" - "290300370300200041a00d6a200041b0c9006a200041b0ce006a103c2000" - "41b0ce006a200041b0c3006a200041b0c3006a1030201a20142014103020" - "192021202110302034200041b0ce006a41c001104c1a20004190076a2000" - "41a00d6a418003104c1a200c41016a2116201b2106200521022008210f02" - "7f02402039450440200c41a4a1c0006a2d00000d01201841016a21182016" - "220c41c000460d040c030b02400340200641046a280200220320184b0440" - "200241386a2903002156200241306a2903002155200241286a2903002154" - "200241206a2903002153200041c8ce006a220d2006280200201841c0016c" - "6a220341d8006a290300370300200041c0ce006a2211200341d0006a2903" - "003703002000200341c8006a2903003703b84e200020032903403703b04e" - "200041b0ce006a205320542055205642c7faf3c3ed82a3903c428d95c7c3" - "96d2dac0977f102b200041b80d6a2207200341f8006a2903003703002000" - "41b00d6a220b200341f0006a2903003703002000200341e8006a29030037" - "03a80d200020032903603703a00d200041a00d6a205320542055205642c7" - "faf3c3ed82a3903c428d95c7c396d2dac0977f102b200041c8c9006a2225" - "200d290300370300200041c0c9006a222920112903003703002013200029" - "03a00d370300201341086a222a20002903a80d370300201341106a221e20" - "0b290300370300201341186a222f2007290300370300200020002903b84e" - "3703b849200020002903b04e3703b049200241186a290300215620024110" - "6a2903002155200241086a290300215420022903002153200041c8c6006a" - "220920034198016a290300370300200041c0c6006a221520034190016a29" - "0300370300200020034188016a2903003703b84620002003290380013703" - "b046200041b0c6006a205320542055205642c7faf3c3ed82a3903c428d95" - "c7c396d2dac0977f102b2007200341b8016a290300370300200b200341b0" - "016a2903003703002000200341a8016a2903003703a80d200020032903a0" - "013703a00d200041a00d6a205320542055205642c7faf3c3ed82a3903c42" - "8d95c7c396d2dac0977f102b200d20092903003703002011201529030037" - "0300201020002903a00d370300201041086a223020002903a80d37030020" - "1041106a223a200b290300370300201041186a2232200729030037030020" - "0020002903b8463703b84e200020002903b0463703b04e200041a00d6a20" - "004190076a2003200041b0c9006a200041b0ce006a104820004190076a20" - "0041a00d6a418003104c1a20064190016a2106200241406b2102200f4101" - "6b220f0d010c020b0b201820034194a2c0001010000b201b210620052102" - "2008210e201841016a220f200c41a4a1c0006a2d0000450d011a03402006" - "41046a2802002203200f4b0440200241386a2903002156200241306a2903" - "002155200241286a2903002154200241206a2903002153200d2006280200" - "200f41c0016c6a220341d8006a2903003703002011200341d0006a290300" - "3703002000200341c8006a2903003703b84e200020032903403703b04e20" - "0041b0ce006a205320542055205642c7faf3c3ed82a3903c428d95c7c396" - "d2dac0977f102b2007200341f8006a290300370300200b200341f0006a29" - "03003703002000200341e8006a2903003703a80d200020032903603703a0" - "0d200041a00d6a205320542055205642c7faf3c3ed82a3903c428d95c7c3" - "96d2dac0977f102b2025200d290300370300202920112903003703002013" - "20002903a00d370300202a20002903a80d370300201e200b290300370300" - "202f2007290300370300200020002903b84e3703b849200020002903b04e" - "3703b049200241186a2903002156200241106a2903002155200241086a29" - "0300215420022903002153200920034198016a2903003703002015200341" - "90016a290300370300200020034188016a2903003703b846200020032903" - "80013703b046200041b0c6006a205320542055205642c7faf3c3ed82a390" - "3c428d95c7c396d2dac0977f102b2007200341b8016a290300370300200b" - "200341b0016a2903003703002000200341a8016a2903003703a80d200020" - "032903a0013703a00d200041a00d6a205320542055205642c7faf3c3ed82" - "a3903c428d95c7c396d2dac0977f102b200d200929030037030020112015" - "290300370300201020002903a00d370300203020002903a80d370300203a" - "200b29030037030020322007290300370300200020002903b8463703b84e" - "200020002903b0463703b04e200041a00d6a20004190076a2003200041b0" - "c9006a200041b0ce006a104820004190076a200041a00d6a418003104c1a" - "20064190016a2106200241406b2102200e41016b220e0d010c020b0b200f" - "20034184a2c0001010000b201841026a0b21182016220c41c000470d000b" - "2039450d0020384184016a2107200041d0ce006a210b200041d0c9006a21" - "0d201841c0016c2125200521022008210903402018200741046a28020022" - "034f0d02200241386a2903002156200241306a2903002155200241286a29" - "03002154200241206a2903002153200041c8ce006a221320072802002025" - "6a220341d8006a290300370300200041c0ce006a2206200341d0006a2903" - "003703002000200341c8006a2903003703b84e200020032903403703b04e" - "200041b0ce006a205320542055205642c7faf3c3ed82a3903c428d95c7c3" - "96d2dac0977f102b200041b80d6a2211200341f8006a2903003703002000" - "41b00d6a2210200341f0006a2903003703002000200341e8006a29030037" - "03a80d200020032903603703a00d200041a00d6a205320542055205642c7" - "faf3c3ed82a3903c428d95c7c396d2dac0977f102b200041c8c9006a2013" - "290300370300200041c0c9006a2006290300370300200d20002903a00d37" - "0300200d41086a20002903a80d370300200d41106a201029030037030020" - "0d41186a2011290300370300200020002903b84e3703b849200020002903" - "b04e3703b049200241186a2903002156200241106a290300215520024108" - "6a290300215420022903002153200041c8c6006a221520034198016a2903" - "00370300200041c0c6006a220f20034190016a2903003703002000200341" - "88016a2903003703b84620002003290380013703b046200041b0c6006a20" - "5320542055205642c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b" - "2011200341b8016a2903003703002010200341b0016a2903003703002000" - "200341a8016a2903003703a80d200020032903a0013703a00d200041a00d" - "6a205320542055205642c7faf3c3ed82a3903c428d95c7c396d2dac0977f" - "102b201320152903003703002006200f290300370300200b20002903a00d" - "370300200b41086a20002903a80d370300200b41106a2010290300370300" - "200b41186a2011290300370300200020002903b8463703b84e2000200029" - "03b0463703b04e200041a00d6a20004190076a2003200041b0c9006a2000" - "41b0ce006a104820004190076a200041a00d6a418003104c1a2007419001" - "6a2107200241406b2102200941016b22090d000b20384184016a21072000" - "41d0ce006a210b200041d0c9006a210d201841016a221841c0016c210f20" - "05210203402018200741046a28020022034f0d03200241386a2903002156" - "200241306a2903002155200241286a2903002154200241206a2903002153" - "200041c8ce006a22132007280200200f6a220341d8006a29030037030020" - "0041c0ce006a2206200341d0006a2903003703002000200341c8006a2903" - "003703b84e200020032903403703b04e200041b0ce006a20532054205520" - "5642c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b200041b80d6a" - "2211200341f8006a290300370300200041b00d6a2210200341f0006a2903" - "003703002000200341e8006a2903003703a80d200020032903603703a00d" - "200041a00d6a205320542055205642c7faf3c3ed82a3903c428d95c7c396" - "d2dac0977f102b200041c8c9006a2013290300370300200041c0c9006a20" - "06290300370300200d20002903a00d370300200d41086a20002903a80d37" - "0300200d41106a2010290300370300200d41186a20112903003703002000" - "20002903b84e3703b849200020002903b04e3703b049200241186a290300" - "2156200241106a2903002155200241086a29030021542002290300215320" - "0041c8c6006a220920034198016a290300370300200041c0c6006a221520" - "034190016a290300370300200020034188016a2903003703b84620002003" - "290380013703b046200041b0c6006a205320542055205642c7faf3c3ed82" - "a3903c428d95c7c396d2dac0977f102b2011200341b8016a290300370300" - "2010200341b0016a2903003703002000200341a8016a2903003703a80d20" - "0020032903a0013703a00d200041a00d6a205320542055205642c7faf3c3" - "ed82a3903c428d95c7c396d2dac0977f102b201320092903003703002006" - "2015290300370300200b20002903a00d370300200b41086a20002903a80d" - "370300200b41106a2010290300370300200b41186a201129030037030020" - "0020002903b8463703b84e200020002903b0463703b04e200041a00d6a20" - "004190076a2003200041b0c9006a200041b0ce006a104820004190076a20" - "0041a00d6a418003104c1a20074190016a2107200241406b210220084101" - "6b22080d000b0b20004190046a20004190076a418003104c1a200041b03d" - "6a20004190046a103d200041b03a6a200041d0056a221f103d2000420037" - "03e834200042003703e034200042003703d834200042013703d034200042" - "003703c834200042003703c034200042003703b834200042093703b03420" - "0041b0ce006a200041b03b6a200041b0346a102f200041b8cf006a223620" - "0041f83a6a290300370300200041c0cf006a2237200041803b6a29030037" - "0300200041c8cf006a2242200041883b6a290300370300200041d0cf006a" - "2241200041903b6a290300370300200041d8cf006a2247200041983b6a29" - "0300370300200041e0cf006a2248200041a03b6a290300370300200041e8" - "cf006a224b200041a83b6a290300370300200041f8ce006a222220002903" - "b83a37030020004180cf006a2223200041c03a6a22492903003703002000" - "4188cf006a2224200041c83a6a224a29030037030020004190cf006a224f" - "200041d03a6a225029030037030020004198cf006a2227200041d83a6a22" - "39290300370300200041a0cf006a223f200041e03a6a223c290300370300" - "200041a8cf006a223e200041e83a6a2244290300370300200020002903f0" - "3a3703b04f200020002903b03a3703f04e200041b0376a200041b03d6a20" - "0041b0ce006a103c200041e8106a2217200041e8376a220f290300370300" - "200041e0106a2214200041e0376a2225290300370300200041d8106a221c" - "200041d8376a2229290300370300200041d0106a2221200041d0376a222a" - "290300370300200041c8106a220c200041c8376a221e2903003703002000" - "41c0106a2216200041c0376a222f290300370300200020002903b8373703" - "b810200020002903b0373703b010200041b0106a200041b0376a200041b0" - "376a102f200041e8136a2208200041a8386a222c290300370300200041e0" - "136a2228200041a0386a221b290300370300200041d8136a223420004198" - "386a2240290300370300200041d0136a224520004190386a224c29030037" - "0300200041c8136a221020004188386a224d290300370300200041c0136a" - "221320004180386a224e290300370300200041c0316a2230200041c0386a" - "223d290300370300200041c8316a223a200041c8386a2243290300370300" - "200041d0316a2232200041d0386a2251290300370300200041d8316a220e" - "200041d8386a2204290300370300200041e0316a2219200041e0386a222e" - "290300370300200041e8316a221a200041e8386a222d2903003703002000" - "200041f8376a22122903003703b813200020002903f0373703b013200020" - "002903b0383703b0312000200041b8386a222b2903003703b831200041b0" - "136a200041f0376a2215200041b0386a2218102f200042003703e8342000" - "42003703e034200042003703d834200042013703d034200042003703c834" - "200042003703c034200042003703b834200042093703b034200041b0ce00" - "6a200041b0136a200041b0346a102f2008200041e8ce006a220329030037" - "03002028200041e0ce006a22022903003703002034200041d8ce006a2207" - "2903003703002045200041d0ce006a220d2903003703002010200041c8ce" - "006a22112903003703002013200041c0ce006a220b290300370300200020" - "002903b84e3703b813200020002903b04e3703b013200041b80a6a220620" - "0c290300370300200041b00a6a22092016290300370300200020002903b8" - "103703a80a200020002903b0103703a00a200041a00a6a20002903b01320" - "002903b8132013290300201029030042c7faf3c3ed82a3903c428d95c7c3" - "96d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20" - "0041c83d6a22132017290300370300200041c03d6a221020142903003703" - "002000201c2903003703b83d200020212903003703b03d200041b03d6a20" - "4529030020342903002028290300200829030042c7faf3c3ed82a3903c42" - "8d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b2" - "30102d201120062903002256370300200b20092903002255370300200d20" - "002903b03d2254370300200220102903002253370300200720002903b83d" - "225937030020032013290300225a370300200020002903a80a225f3703b8" - "4e200020002903a00a22583703b04e2017205a3703002014205337030020" - "1c205937030020212054370300200c205637030020162055370300200020" - "5f3703b810200020583703b010200041e8166a2217202d29030037030020" - "0041e0166a2214202e290300370300200041d8166a221c20042903003703" - "00200041d0166a22212051290300370300200041c8166a220c2043290300" - "370300200041c0166a2216203d2903003703002000202b2903003703b816" - "200020002903b0383703b016200041b0166a20182018102f200041b0ce00" - "6a200041b0166a200041b0346a102f201720032903003703002014200229" - "0300370300201c20072903003703002021200d290300370300200c201129" - "03003703002016200b290300370300200041c0196a2208202f2903003703" - "00200041c8196a2228201e290300370300200041d0196a2234202a290300" - "370300200041d8196a22452029290300370300200041e0196a223d202529" - "0300370300200041e8196a2243200f290300370300200020002903b84e37" - "03b816200020002903b04e3703b016200020002903b0373703b019200020" - "002903b8373703b819200041e8226a202c290300370300200041e0226a20" - "1b290300370300200041d8226a2040290300370300200041d0226a204c29" - "0300370300200041c8226a204d290300370300200041c0226a204e290300" - "370300200020122903003703b822200020002903f0373703b022200041b0" - "196a200041b0376a2015102f2006200c2903003703002009201629030037" - "0300200020002903b8163703a80a200020002903b0163703a00a200041a0" - "0a6a20002903b01920002903b8192008290300202829030042c7faf3c3ed" - "82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c6" - "89aece93b230102d20132017290300370300201020142903003703002000" - "201c2903003703b83d200020212903003703b03d200041b03d6a20342903" - "002045290300203d290300204329030042c7faf3c3ed82a3903c428d95c7" - "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d" - "201120062903002256370300200b20092903002255370300200d20002903" - "b03d2254370300200220102903002253370300200720002903b83d225937" - "030020032013290300225a370300200020002903a80a225f3703b84e2000" - "20002903a00a22583703b04e2017205a37030020142053370300201c2059" - "37030020212054370300200c2056370300201620553703002000205f3703" - "b816200020583703b016200041e81c6a2217202c290300370300200041e0" - "1c6a2214201b290300370300200041d81c6a221c20402903003703002000" - "41d01c6a2221204c290300370300200041c81c6a220c204d290300370300" - "200041c01c6a2216204e290300370300200020122903003703b81c200020" - "002903f0373703b01c200041b01c6a20152015102f200041e81f6a220820" - "0f290300370300200041e01f6a222c2025290300370300200041d81f6a22" - "282029290300370300200041d01f6a221b202a290300370300200041c81f" - "6a2234201e290300370300200041c01f6a2240202f290300370300200020" - "002903b8373703b81f200020002903b0373703b01f200041b01f6a200041" - "b0376a2018102f2006200c29030037030020092016290300370300200020" - "002903b81c3703a80a200020002903b01c3703a00a200041a00a6a200029" - "03b01f20002903b81f2040290300203429030042c7faf3c3ed82a3903c42" - "8d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b2" - "30102d20132017290300370300201020142903003703002000201c290300" - "3703b83d200020212903003703b03d200041b03d6a201b29030020282903" - "00202c290300200829030042c7faf3c3ed82a3903c428d95c7c396d2dac0" - "977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2011200629" - "03002256370300200b20092903002255370300200d20002903b03d225437" - "0300200220102903002253370300200720002903b83d2259370300200320" - "13290300225a370300200020002903a80a225f3703b84e200020002903a0" - "0a22583703b04e2017205a37030020142053370300201c20593703002021" - "2054370300200c2056370300201620553703002000205f3703b81c200020" - "583703b01c200041b0316a2018200041b0166a102f200041b0226a201520" - "0041b01c6a102f200041b0ce006a200041b0316a200041b0226a1030201a" - "200329030037030020192002290300370300200e20072903003703002032" - "200d290300370300203a20112903003703002030200b2903003703002000" - "20002903b84e3703b831200020002903b04e3703b031200041b0ce006a20" - "0041b0316a200041b0346a102f201a200329030037030020192002290300" - "370300200e20072903003703002032200d290300370300203a2011290300" - "3703002030200b290300370300200041c0256a202f290300370300200041" - "c8256a201e290300370300200041d0256a202a290300370300200041d825" - "6a2029290300370300200041e0256a2025290300370300200041e8256a20" - "0f290300370300200020002903b84e3703b831200020002903b04e3703b0" - "31200020002903b0373703b025200020002903b8373703b825200041b025" - "6a200041b0376a200041b0106a102f200041b0ce006a200041b0316a2000" - "41b0256a1030201a200329030037030020192002290300370300200e2007" - "2903003703002032200d290300370300203a20112903003703002030200b" - "290300370300200020002903b84e3703b831200020002903b04e3703b031" - "200041b03d6a200041b0316a103120002802b03d4101710440200041e82e" - "6a2206200041f83d6a22092903002256370300200041e02e6a2229200041" - "f03d6a222a2903002255370300200041d82e6a221e200041e83d6a221529" - "03002254370300200041d02e6a222f200041e03d6a221829030022533703" - "00200041c82e6a2230200041d83d6a220f2903002259370300200041c02e" - "6a223a200041d03d6a2225290300225a370300200041c0286a2232205a37" - "0300200041c8286a220e2059370300200041d0286a221920533703002000" - "41d8286a221a2054370300200041e0286a22172055370300200041e8286a" - "22142056370300200020002903c03d22563703b02e200020563703b02820" - "00201329030022563703b82e200020563703b828200041b0286a20102000" - "41b0106a102f200041e82b6a221c2009290300370300200041e02b6a2221" - "202a290300370300200041d82b6a222a2015290300370300200041d02b6a" - "220c2018290300370300200041c82b6a2216200f290300370300200041c0" - "2b6a22082025290300370300200020132903003703b82b200020002903c0" - "3d3703b02b200041b02b6a2010200041b0166a102f200041b02e6a201020" - "0041b01c6a102f2003201429030037030020022017290300370300200720" - "1a290300370300200d20192903003703002011200e290300370300200b20" - "32290300370300202220002903b82b370300202320082903003703002024" - "2016290300370300204f200c2903003703002027202a290300370300203f" - "2021290300370300203e201c290300370300200020002903b8283703b84e" - "200020002903b0283703b04e200020002903b02b3703f04e204b20062903" - "00370300204820292903003703002047201e2903003703002041202f2903" - "00370300204220302903003703002037203a290300370300203620002903" - "b82e370300200020002903b02e3703b04f200041c0c0006a200041b0ce00" - "6a41c001104c2106200042003703b840200042013703b040200041b0ce00" - "6a20004190046a2006103b200041b03d6a201f2006103b200041f0cf006a" - "200041b03d6a103e200041b00d6a200041b0ce006a418003104c21292000" - "42003703a80d200042013703a00d200041f0c4006a201f103e200041b0c3" - "006a20004190046a41c001104c1a200041b0c6006a200041b0c3006a2029" - "103f200742003703002002420037030020034200370300200042a9c0c689" - "aece93b2303703c84e200042b099b385febcf6b6de003703c04e200042bd" - "dcd9dcfbd3c1c7423703b84e200042c8faf383d69cd1de643703b04e2000" - "42003703d04e200041b0c0006a200041f0c6006a200041b0ce006a102f20" - "0742003703002002420037030020034200370300200042003703c84e2000" - "42ac97d286eaf99af1d9003703c04e200042cfb8ede69afe98f9543703b8" - "4e200042feffffbf97e6d1b1d7003703b04e200042003703d04e200041b0" - "3e6a200041b0c7006a200041b0ce006a102f2010200041c0c6006a290300" - "3703002013200041c8c6006a2903003703002025200041d0c6006a290300" - "370300200f200041d8c6006a2903003703002018200041e0c6006a290300" - "3703002015200041e8c6006a290300370300200920002903b84037030020" - "0041803e6a2006290300370300200041883e6a200041c8c0006a29030037" - "0300200041903e6a200041d0c0006a290300370300200041983e6a200041" - "d8c0006a2210290300370300200041a03e6a200041e0c0006a2213290300" - "370300200041a83e6a200041e8c0006a2206290300370300200020002903" - "b0463703b03d200020002903b8463703b83d200020002903b0403703f03d" - "200742003703002002420037030020034200370300200042a9c0c689aece" - "93b2303703c84e200042b099b385febcf6b6de003703c04e200042bddcd9" - "dcfbd3c1c7423703b84e200042c8faf383d69cd1de643703b04e20004200" - "3703d04e200041b03a6a200041b0c8006a200041b0ce006a102f20104200" - "3703002013420037030020064200370300200042003703c840200042ac97" - "d286eaf99af1d9003703c040200042cfb8ede69afe98f9543703b8402000" - "42feffffbf97e6d1b1d7003703b040200042003703d040200041b0cf006a" - "2210200041f0c8006a200041b0c0006a102f200b20004180c8006a290300" - "370300201120004188c8006a290300370300200d20004190c8006a290300" - "370300200720004198c8006a2903003703002002200041a0c8006a290300" - "3703002003200041a8c8006a290300370300202220002903b83a37030020" - "2320492903003703002024204a290300370300204f205029030037030020" - "272039290300370300203f203c290300370300203e204429030037030020" - "0020002903f0473703b04e2000200041f8c7006a2903003703b84e200020" - "002903b03a3703f04e20394200370300203c420037030020444200370300" - "200042a9c0c689aece93b2303703c83a200042b099b385febcf6b6de0037" - "03c03a200042bddcd9dcfbd3c1c7423703b83a200042c9faf383d69cd1de" - "643703b03a200042003703d03a200041b0c0006a200041b0ce006a200041" - "b03a6a102f200041f0c0006a200041f0ce006a200041b03a6a102f200041" - "b0c1006a2010200041b03a6a102f200041b0c9006a200041b03d6a41c001" - "104c1a200041f0ca006a200041b0c0006a41c001104c1a200041a0076a22" - "0d200041b0c9006a200041b0c6006a103f20004200370398072000420137" - "039007200041a00a6a200d418003104c1a200042003703c8492000420037" - "03c049200042003703b849200042f193a4d3c4d6e4f4c4003703b0494100" - "2107200b41f002104b1a200042003703b84e200042013703b04e41ff0121" - "03200041286a210b0340200041206a200341ff0071104f200b2903002000" - "41b0c9006a200341037641f0ffffff01716a220229030883215620002903" - "20200229030083215520074101710440200041a00d6a200041b0ce006a10" - "46200041b0ce006a200041a00d6a418003104c1a0b205520568442005204" - "40200041a00d6a200d200041b0ce006a103f200041b0ce006a200041a00d" - "6a418003104c1a410121070b200341016b2203417f470d000b200041f011" - "6a200041f0cf006a103e200041b0106a200041b0ce006a41c001104c1a20" - "0041b0136a200041b0106a1046200041b0166a200041b0136a1046200041" - "b0196a200041b0166a200041b0136a103f200042003703c8492000420037" - "03c049200042003703b849200042f193a4d3c4d6e4f4c4003703b0494100" - "2107200041c0ce006a41f002104b1a200042003703b84e200042013703b0" - "4e41ff012103200041186a210b0340200041106a200341ff0071104f200b" - "290300200041b0c9006a200341037641f0ffffff01716a22022903088321" - "562000290310200229030083215520074101710440200041a00d6a200041" - "b0ce006a1046200041b0ce006a200041a00d6a418003104c1a0b20552056" - "844200520440200041a00d6a200041b0196a200041b0ce006a103f200041" - "b0ce006a200041a00d6a418003104c1a410121070b200341016b2203417f" - "470d000b200041f01d6a200041f0cf006a103e200041b01c6a200041b0ce" - "006a41c001104c1a200041b01f6a200041b01c6a1046200042003703c849" - "200042003703c049200042003703b849200042f193a4d3c4d6e4f4c40037" - "03b04941002107200041c0ce006a41f002104b1a200042003703b84e2000" - "42013703b04e41ff012103200041086a210b03402000200341ff0071104f" - "200b290300200041b0c9006a200341037641f0ffffff01716a2202290308" - "8321562000290300200229030083215520074101710440200041a00d6a20" - "0041b0ce006a1046200041b0ce006a200041a00d6a418003104c1a0b2055" - "2056844200520440200041a00d6a200041b01f6a200041b0ce006a103f20" - "0041b0ce006a200041a00d6a418003104c1a410121070b200341016b2203" - "417f470d000b200041f0236a2203200041f0cf006a2211103e200041b022" - "6a200041b0ce006a41c001104c1a200041f0266a200041f01a6a103e2000" - "41b0256a200041b0196a41c001104c1a200041f0296a2003103e200041b0" - "286a200041b0226a41c001104c1a200041b02b6a200041b0286a200041b0" - "1c6a103f200041b02e6a200041b02b6a200041b0256a103f200041b0316a" - "200041b02e6a200041b0136a103f200041b0346a200041b02e6a200041b0" - "1c6a103f200041b0376a200d200041b0346a103f200041b03a6a200041b0" - "316a41011047200041a00d6a200041f0326a41011047200042e6cfeba7bb" - "dee5b4243703e8492000428e97d490e19f9f99a67f3703e049200042e58f" - "bbf7f8cee4bcf4003703d849200042acc5cd87f88bbcae4a3703d0492000" - "42dfcf96c3c2e3adc2123703c849200042e0969ab7d7fbe7dc683703c049" - "200042f6c2bcc982c187a9dc003703b849200042f0c8a7e6adbbcd855637" - "03b049200041b0ce006a200041a00d6a200041b0c9006a102f200041f0ce" - "006a2210200041e00d6a220d200041b0c9006a102f200041b0cf006a2213" - "200041a00e6a2203200041b0c9006a102f200041f03b6a200041b0ce006a" - "41c001104c1a200041b03d6a200041b03a6a200041b0376a103f200041c8" - "0d6a22024200370300200041d00d6a22074200370300200041d80d6a220b" - "4200370300200042a9c0c689aece93b2303703b80d200042b099b385febc" - "f6b6de003703b00d200042bddcd9dcfbd3c1c7423703a80d200042c8faf3" - "83d69cd1de643703a00d200042003703c00d200041b0ce006a200041f02e" - "6a200041a00d6a102f2002420037030020074200370300200b4200370300" - "200042003703b80d200042ac97d286eaf99af1d9003703b00d200042cfb8" - "ede69afe98f9543703a80d200042feffffbf97e6d1b1d7003703a00d2000" - "42003703c00d200041b0ca006a200041b02f6a200041a00d6a102f200041" - "c0c9006a200041c02e6a290300370300200041c8c9006a200041c82e6a29" - "0300370300200041d0c9006a200041d02e6a290300370300200041d8c900" - "6a200041d82e6a290300370300200041e0c9006a200041e02e6a29030037" - "0300200041e8c9006a200041e82e6a290300370300200041f8c9006a2000" - "2903b84e37030020004180ca006a200041c0ce006a290300370300200041" - "88ca006a200041c8ce006a29030037030020004190ca006a200041d0ce00" - "6a29030037030020004198ca006a200041d8ce006a220629030037030020" - "0041a0ca006a200041e0ce006a2209290300370300200041a8ca006a2000" - "41e8ce006a2215290300370300200020002903b02e3703b0492000200029" - "03b82e3703b849200020002903b04e3703f0492002420037030020074200" - "370300200b4200370300200042a9c0c689aece93b2303703b80d200042b0" - "99b385febcf6b6de003703b00d200042bddcd9dcfbd3c1c7423703a80d20" - "0042c8faf383d69cd1de643703a00d200042003703c00d200041b0c6006a" - "200041b0306a200041a00d6a102f20064200370300200942003703002015" - "4200370300200042003703c84e200042ac97d286eaf99af1d9003703c04e" - "200042cfb8ede69afe98f9543703b84e200042feffffbf97e6d1b1d70037" - "03b04e200042003703d04e2003200041f0306a200041b0ce006a102f2000" - "41b00d6a220620004180306a290300370300200041b80d6a220920004188" - "306a290300370300200041c00d6a221520004190306a2903003703002002" - "20004198306a2903003703002007200041a0306a290300370300200b2000" - "41a8306a290300370300200041e80d6a20002903b846370300200041f00d" - "6a200041c0c6006a290300370300200041f80d6a200041c8c6006a290300" - "370300200041800e6a200041d0c6006a290300370300200041880e6a2000" - "41d8c6006a2202290300370300200041900e6a200041e0c6006a22072903" - "00370300200041980e6a200041e8c6006a220b2903003703002000200029" - "03f02f3703a00d2000200041f82f6a2903003703a80d200020002903b046" - "3703e00d2002420037030020074200370300200b4200370300200042a9c0" - "c689aece93b2303703c846200042b099b385febcf6b6de003703c0462000" - "42bddcd9dcfbd3c1c7423703b846200042c9faf383d69cd1de643703b046" - "200042003703d046200041b0ce006a200041a00d6a200041b0c6006a102f" - "2010200d200041b0c6006a102f20132003200041b0c6006a102f200041b0" - "c0006a200041b0c9006a41c001104c1a200041f0c1006a200041b0ce006a" - "41c001104c1a200041b0c3006a200041b0c0006a200041b03d6a103f2000" - "41f0c7006a200041e00b6a103e200041b0c6006a200041a00a6a41c00110" - "4c1a200041b0c9006a200041b0c6006a200041b0316a103f200041b0ce00" - "6a200041b0c9006a41031047200041a00d6a200041f0ca006a4103104720" - "0042f3fa9ddfe096fed5003703a84e2000429da7d8abb3dcfbe5063703a0" - "4e200042ecf3d0beb9bce981ff003703984e200042818283a6bfc5aacaf6" - "003703904e200042bbc98be4fcb9a0ee193703884e20004290d5b285cd91" - "d8f46f3703804e200042caa4d7f2dbf1aca6897f3703f84d200042ffccd2" - "f691a7dfb7683703f04d200041b0cc006a200041a00d6a200041f0cd006a" - "102f200041f0cc006a200d200041f0cd006a102f200041b0cd006a200320" - "0041f0cd006a102f2011200041b0cc006a41c001104c1a2006200041b0ce" - "006a200041b0c3006a103f2009290300215620002903b00d215520004190" - "076a201541f002104c1a20384184016a2103024002400240024002400240" - "0340200341046b280200220204402003280200220b41046b280200220741" - "7871220d200241c0016c220241044108200741037122071b72490d022007" - "4100200d20024127724b1b0d03200b10040b20034190016a210320464101" - "6b22460d000b200028025422030440203841046b28020022024178712207" - "20034190016c220341044108200241037122021b72490d03200241002007" - "200341276a4b1b0d04203810040b20002802482203450d0b200541046b28" - "0200220241787122072003410674220341044108200241037122021b7249" - "0d0420024100200720034127724b1b0d05200510040c0b0b41f996c00041" - "2e41a897c0001011000b41b897c000412e41e897c0001011000b41f996c0" - "00412e41a897c0001011000b41b897c000412e41e897c0001011000b41f9" - "96c000412e41a897c0001011000b41b897c000412e41e897c0001011000b" - "41f4a2c000411f4194a3c0001021000b2018200341f4a1c0001010000b20" - "18200341e4a1c0001010000b203841046b28020022024178712207200341" - "90016c220341044108200241037122021b72490d02200241002007200341" - "276a4b1b0d03203810040b200028024822030440200541046b2802002202" - "41787122072003410674220341044108200241037122021b72490d042002" - "4100200720034127724b1b0d05200510040b42002156420121550b203120" - "5637030820312055370300203141106a20004190076a41f002104c1a2000" - "28023c22030440203341046b28020022024178712207200341c0016c2203" - "41044108200241037122021b72490d0520024100200720034127724b1b0d" - "06203310040b200028023022030440203b41046b28020022024178712207" - "200341e0006c220341044108200241037122021b72490d07200241002007" - "200341276a4b1b0d08203b10040b200041b0d1006a24000c080b41f996c0" - "00412e41a897c0001011000b41b897c000412e41e897c0001011000b41f9" - "96c000412e41a897c0001011000b41b897c000412e41e897c0001011000b" - "41f996c000412e41a897c0001011000b41b897c000412e41e897c0001011" - "000b41f996c000412e41a897c0001011000b41b897c000412e41e897c000" - "1011000b200141f0066a41f002104b1a200142003703e806200142013703" - "e006200141a00c6a200141e0066a104a0d03200141c00c6a20014180076a" - "104a0d03200141e00c6a200141a0076a104a0d03200141800d6a200141c0" - "076a104a0d03200141a00d6a200141e0076a104a0d03200141c00d6a2001" - "4180086a104a0d03200141e00d6a200141a0086a104a0d03200141800e6a" - "200141c0086a104a0d03200141a00e6a200141e0086a104a0d03200141c0" - "0e6a20014180096a104a0d03200141e00e6a200141a0096a104a0d032001" - "41800f6a200141c0096a104a1a0c030b2002450d05200641046b28020022" - "05417871221241044108200541037122051b20026a490d0c200541002012" - "200241276a4b1b0d0d200610040c050b20012802a00b2205450d04200820" - "05410674100e0c040b206a428080808010540d0020122005100e0b202041" - "c000100e2026450d0220352026410674100e0c020b4100410041dc91c000" - "1010000b20012802e01c1a0b205241046b2802002205417871220641c600" - "41ca00200541037122051b490d1420054100200641ea004f1b0d15205210" - "04201d41046b280200220541787141e40041e800200541037122061b490d" - "162006410020054188014f1b0d17201d1004200a41046b28020022054178" - "71221d418802418c02200541037122051b490d1820054100201d41ac024f" - "1b0d19200a1004200141c0206a240041010f0b000b230041206b22052400" - "200541003602182005410136020c200541a099c000360208200542043702" - "10200541086a41f88bc000101a000b41f996c000412e41a897c000101100" - "0b41b897c000412e41e897c0001011000b41f996c000412e41a897c00010" - "11000b41b897c000412e41e897c0001011000b41f996c000412e41a897c0" - "001011000b41b897c000412e41e897c0001011000b4120201241cc8fc000" - "1012000b418001201241dc8fc0001012000b41c001201241ec8fc0001012" - "000b41a002201241fc8fc0001012000b41a00241a002418c90c000101000" - "0b41a10241a102419c90c0001010000b41a20241a20241ac90c000101000" - "0b41a30241a30241bc90c0001010000b230041306b220224002002410436" - "0204200241643602002002410236020c200241b884c00036020820024202" - "3702142002200241046aad4280808080108437032820022002ad42808080" - "8010843703202002200241206a360210200241086a41cc90c000101a000b" - "2009201241cc90c0001012000b200120012d00a10f3a00e00641b89cc000" - "412b200141e0066a41988ec00041d892c0001013000b41a89cc000101400" - "0b41f996c000412e41a897c0001011000b41b897c000412e41e897c00010" - "11000b41f996c000412e41a897c0001011000b41b897c000412e41e897c0" - "001011000b41f996c000412e41a897c0001011000b41b897c000412e41e8" - "97c0001011000b962502087f017e02400240024002400240024002402000" - "41f4014d0440418ca9c000280200220341102000410b6a41f80371200041" - "0b491b220441037622017622004103710d0120044194a9c0002802004d0d" - "0720000d024190a9c00028020022000d030c070b2000410b6a2201417871" - "21044190a9c0002802002208450d06411f2107200041f4ffff074d044020" - "04410620014108766722006b7641017120004101746b413e6a21070b4100" - "20046b2101200741027441f4a5c0006a2802002203450440410021000c04" - "0b410021002004411920074101766b41002007411f471b74210503400240" - "200328020441787122062004490d00200620046b220620014f0d00200321" - "02200622010d0041002101200321000c060b200328021422062000200620" - "032005411d764104716a41106a2802002203471b200020061b2100200541" - "0174210520030d000b0c030b02402000417f7341017120016a2205410374" - "22004184a7c0006a22042000418ca7c0006a280200220128020822024704" - "402002200436020c200420023602080c010b418ca9c0002003417e200577" - "713602000b20012000410372360204200020016a22002000280204410172" - "360204200141086a0f0b0240200020017441022001742200410020006b72" - "7168220641037422014184a7c0006a22022001418ca7c0006a2802002200" - "28020822054704402005200236020c200220053602080c010b418ca9c000" - "2003417e200677713602000b20002004410372360204200020046a220520" - "0120046b2204410172360204200020016a20043602004194a9c000280200" - "2203044020034178714184a7c0006a2102419ca9c0002802002101027f41" - "8ca9c00028020022064101200341037674220371450440418ca9c0002003" - "20067236020020020c010b20022802080b21032002200136020820032001" - "36020c2001200236020c200120033602080b419ca9c00020053602004194" - "a9c0002004360200200041086a0f0b20006841027441f4a5c0006a280200" - "220228020441787120046b21012002210302400340024002402002280210" - "22000d00200228021422000d002003280218210702400240200320032802" - "0c2200460440200341144110200328021422001b6a28020022020d014100" - "21000c020b20032802082202200036020c200020023602080c010b200341" - "146a200341106a20001b21050340200521062002220041146a200041106a" - "200028021422021b210520004114411020021b6a28020022020d000b2006" - "41003602000b2007450d032003200328021c41027441f4a5c0006a220228" - "020047044020074110411420072802102003461b6a20003602002000450d" - "040c020b2002200036020020000d014190a9c0004190a9c000280200417e" - "200328021c77713602000c030b200028020441787120046b220220012001" - "20024b22021b21012000200320021b2103200021020c010b0b2000200736" - "021820032802102202044020002002360210200220003602180b20032802" - "142202450d0020002002360214200220003602180b02400240200141104f" - "044020032004410372360204200320046a22042001410172360204200120" - "046a20013602004194a9c0002802002205450d0120054178714184a7c000" - "6a2102419ca9c0002802002100027f418ca9c00028020022064101200541" - "037674220571450440418ca9c000200520067236020020020c010b200228" - "02080b2105200220003602082005200036020c2000200236020c20002005" - "3602080c010b2003200120046a2200410372360204200020036a22002000" - "2802044101723602040c010b419ca9c00020043602004194a9c000200136" - "02000b200341086a0f0b2000200272450440410021024102200774220041" - "0020006b722008712200450d0320006841027441f4a5c0006a2802002100" - "0b2000450d010b03402002200020022000280204417871220320046b2206" - "20014922071b200320044922051b210220012006200120071b20051b2101" - "20002802102203047f20030520002802140b22000d000b0b2002450d0020" - "044194a9c00028020022004d2001200020046b4f710d0020022802182107" - "024002402002200228020c2200460440200241144110200228021422001b" - "6a28020022030d01410021000c020b20022802082203200036020c200020" - "033602080c010b200241146a200241106a20001b21050340200521062003" - "220041146a200041106a200028021422031b210520004114411020031b6a" - "28020022030d000b200641003602000b02402007450d0002402002200228" - "021c41027441f4a5c0006a22032802004704402007411041142007280210" - "2002461b6a20003602002000450d020c010b2003200036020020000d0041" - "90a9c0004190a9c000280200417e200228021c77713602000c010b200020" - "0736021820022802102203044020002003360210200320003602180b2002" - "2802142203450d0020002003360214200320003602180b0240200141104f" - "044020022004410372360204200220046a22042001410172360204200120" - "046a200136020020014180024f0440411f210020044200370210200141ff" - "ffff074d04402001410620014108766722006b7641017120004101746b41" - "3e6a21000b2004200036021c200041027441f4a5c0006a21034101200074" - "22054190a9c0002802007145044020032004360200200420033602182004" - "200436020c200420043602084190a9c0004190a9c0002802002005723602" - "000c030b0240024020012003280200220528020441787146044020052100" - "0c010b2001411920004101766b41002000411f471b742103034020052003" - "411d764104716a41106a22062802002200450d0220034101742103200021" - "0520002802044178712001470d000b0b20002802082201200436020c2000" - "2004360208200441003602182004200036020c200420013602080c030b20" - "062004360200200420053602182004200436020c200420043602080c020b" - "200141f801714184a7c0006a2100027f418ca9c000280200220341012001" - "41037674220171450440418ca9c000200120037236020020000c010b2000" - "2802080b2101200020043602082001200436020c2004200036020c200420" - "013602080c010b2002200120046a2200410372360204200020026a220020" - "002802044101723602040b200241086a0f0b024002400240024002400240" - "20044194a9c00028020022004b044020044198a9c00028020022004f0440" - "41002100200441af80046a220241107640002201417f4622050d07200141" - "10742203450d0741a4a9c000410020024180807c7120051b220641a4a9c0" - "002802006a220036020041a8a9c00041a8a9c00028020022012000200020" - "01491b3602000240024041a0a9c0002802002201044041f4a6c000210003" - "4020002802002202200028020422056a2003460d02200028020822000d00" - "0b0c020b41b0a9c00028020022004100200020034d1b45044041b0a9c000" - "20033602000b41b4a9c00041ff1f36020041f8a6c000200636020041f4a6" - "c00020033602004190a7c0004184a7c0003602004198a7c000418ca7c000" - "360200418ca7c0004184a7c00036020041a0a7c0004194a7c00036020041" - "94a7c000418ca7c00036020041a8a7c000419ca7c000360200419ca7c000" - "4194a7c00036020041b0a7c00041a4a7c00036020041a4a7c000419ca7c0" - "0036020041b8a7c00041aca7c00036020041aca7c00041a4a7c000360200" - "41c0a7c00041b4a7c00036020041b4a7c00041aca7c00036020041c8a7c0" - "0041bca7c00036020041bca7c00041b4a7c0003602004180a7c000410036" - "020041d0a7c00041c4a7c00036020041c4a7c00041bca7c00036020041cc" - "a7c00041c4a7c00036020041d8a7c00041cca7c00036020041d4a7c00041" - "cca7c00036020041e0a7c00041d4a7c00036020041dca7c00041d4a7c000" - "36020041e8a7c00041dca7c00036020041e4a7c00041dca7c00036020041" - "f0a7c00041e4a7c00036020041eca7c00041e4a7c00036020041f8a7c000" - "41eca7c00036020041f4a7c00041eca7c0003602004180a8c00041f4a7c0" - "0036020041fca7c00041f4a7c0003602004188a8c00041fca7c000360200" - "4184a8c00041fca7c0003602004190a8c0004184a8c0003602004198a8c0" - "00418ca8c000360200418ca8c0004184a8c00036020041a0a8c0004194a8" - "c0003602004194a8c000418ca8c00036020041a8a8c000419ca8c0003602" - "00419ca8c0004194a8c00036020041b0a8c00041a4a8c00036020041a4a8" - "c000419ca8c00036020041b8a8c00041aca8c00036020041aca8c00041a4" - "a8c00036020041c0a8c00041b4a8c00036020041b4a8c00041aca8c00036" - "020041c8a8c00041bca8c00036020041bca8c00041b4a8c00036020041d0" - "a8c00041c4a8c00036020041c4a8c00041bca8c00036020041d8a8c00041" - "cca8c00036020041cca8c00041c4a8c00036020041e0a8c00041d4a8c000" - "36020041d4a8c00041cca8c00036020041e8a8c00041dca8c00036020041" - "dca8c00041d4a8c00036020041f0a8c00041e4a8c00036020041e4a8c000" - "41dca8c00036020041f8a8c00041eca8c00036020041eca8c00041e4a8c0" - "003602004180a9c00041f4a8c00036020041f4a8c00041eca8c000360200" - "4188a9c00041fca8c00036020041fca8c00041f4a8c00036020041a0a9c0" - "0020033602004184a9c00041fca8c0003602004198a9c000200641286b22" - "0036020020032000410172360204200020036a412836020441aca9c00041" - "808080013602000c080b200120034f0d0020012002490d00200028020c45" - "0d030b41b0a9c00041b0a9c0002802002200200320002003491b36020020" - "0320066a210241f4a6c00021000240024003402002200028020022054704" - "40200028020822000d010c020b0b200028020c450d010b41f4a6c0002100" - "034002402001200028020022024f04402001200220002802046a2202490d" - "010b200028020821000c010b0b41a0a9c00020033602004198a9c0002006" - "41286b220036020020032000410172360204200020036a412836020441ac" - "a9c00041808080013602002001200241206b41787141086b220020002001" - "41106a491b2205411b36020441f4a6c0002902002109200541106a41fca6" - "c0002902003702002005200937020841f8a6c000200636020041f4a6c000" - "200336020041fca6c000200541086a3602004180a7c00041003602002005" - "411c6a2100034020004107360200200041046a22002002490d000b200120" - "05460d0720052005280204417e713602042001200520016b220041017236" - "02042005200036020020004180024f04402001200010350c080b200041f8" - "01714184a7c0006a2102027f418ca9c00028020022034101200041037674" - "220071450440418ca9c000200020037236020020020c010b20022802080b" - "2100200220013602082000200136020c2001200236020c20012000360208" - "0c070b200020033602002000200028020420066a36020420032004410372" - "3602042005410f6a41787141086b2202200320046a22006b2101200241a0" - "a9c000280200460d032002419ca9c000280200460d042002280204220441" - "037141014604402002200441787122041016200120046a2101200220046a" - "220228020421040b20022004417e71360204200020014101723602042000" - "20016a200136020020014180024f04402000200110350c060b200141f801" - "714184a7c0006a2104027f418ca9c0002802002202410120014103767422" - "0171450440418ca9c000200120027236020020040c010b20042802080b21" - "01200420003602082001200036020c2000200436020c200020013602080c" - "050b4198a9c000200020046b220136020041a0a9c00041a0a9c000280200" - "220020046a22023602002002200141017236020420002004410372360204" - "200041086a21000c060b419ca9c00028020021010240200020046b220241" - "0f4d0440419ca9c00041003602004194a9c0004100360200200120004103" - "72360204200020016a220020002802044101723602040c010b4194a9c000" - "2002360200419ca9c000200120046a220336020020032002410172360204" - "200020016a2002360200200120044103723602040b200141086a0f0b2000" - "200520066a36020441a0a9c00041a0a9c0002802002200410f6a41787122" - "0141086b22023602004198a9c000200020016b4198a9c00028020020066a" - "22016a41086a220336020020022003410172360204200020016a41283602" - "0441aca9c00041808080013602000c030b41a0a9c00020003602004198a9" - "c0004198a9c00028020020016a2201360200200020014101723602040c01" - "0b419ca9c00020003602004194a9c0004194a9c00028020020016a220136" - "020020002001410172360204200020016a20013602000b200341086a0f0b" - "410021004198a9c000280200220120044d0d004198a9c000200120046b22" - "0136020041a0a9c00041a0a9c000280200220020046a2202360200200220" - "0141017236020420002004410372360204200041086a0f0b20000bc60602" - "037f037e230041a0026b22032400200341286a41c100104b210420034118" - "6a41f08bc000290300370300200341106a41e88bc0002903003703002003" - "41086a41e08bc00029030037030020034200370320200341d88bc0002903" - "003703000240200241c0004f0440200320024106762205ad370320200320" - "01200510272004200120024140716a2002413f712202104c1a0c010b2004" - "20012002104c1a0b200320023a0068200341f0006a200341f000104c1a20" - "034198016a220120032d00d80122026a22044180013a00002002ad220742" - "3b862003290390012206420986220820074203868422074280fe03834228" - "86842007428080fc0783421886200742808080f80f834208868484200642" - "018642808080f80f832006420f88428080fc0783842006421f884280fe03" - "8320084238888484842106024002402002413f470440200441016a200241" - "3f73104b1a200241387341074b0d010b200341f0006a2001410110272003" - "4190026a420037030020034188026a420037030020034180026a42003703" - "00200341f8016a4200370300200341f0016a4200370300200341e8016a42" - "00370300200342003703e0012003200637039802200341f0006a200341e0" - "016a410110270c010b200320063703d001200341f0006a2001410110270b" - "2000200328028c01220241187420024180fe037141087472200241087641" - "80fe03712002411876727236001c20002003280288012202411874200241" - "80fe03714108747220024108764180fe0371200241187672723600182000" - "200328028401220241187420024180fe03714108747220024108764180fe" - "0371200241187672723600142000200328028001220241187420024180fe" - "03714108747220024108764180fe03712002411876727236001020002003" - "28027c220241187420024180fe03714108747220024108764180fe037120" - "02411876727236000c20002003280278220241187420024180fe03714108" - "747220024108764180fe0371200241187672723600082000200328027422" - "0241187420024180fe03714108747220024108764180fe03712002411876" - "727236000420002003280270220241187420024180fe0371410874722002" - "4108764180fe037120024118767272360000200341a0026a24000bee0201" - "077f024020012802042202450440410021020c010b200128021021062001" - "200220022001280208220320022003491b22046b36020420012001280200" - "220720046a360200027f0240024002400240027f02400240024020030440" - "200128020c2208410174210520072d0000220241c1006b41ff0171410649" - "0d01200241e1006b41ff01714106490d02200241306b220341ff0171410a" - "490d0320050c040b4100410041848bc0001010000b200241376b21030c01" - "0b200241d7006b21030b20044101460d0320072d0001220241c1006b41ff" - "01714106490d01200241e1006b41ff01714106490d02200241306b220441" - "ff0171410a490d0420054101720b21032006200241ff0171360200200620" - "0541807e71200341ff01717236020441000c040b200241376b21040c020b" - "200241d7006b21040c010b4101410141948bc0001010000b200420034104" - "7472210341010b21022001200841016a36020c0b200020033a0001200020" - "023a00000bb40801057f200041086b2201200041046b2802002203417871" - "22006a21020240024020034101710d002003410271450d01200128020022" - "0320006a2100200120036b2201419ca9c000280200460440200228020441" - "03714103470d014194a9c000200036020020022002280204417e71360204" - "20012000410172360204200220003602000f0b2001200310160b02400240" - "0240024002400240024020022802042203410271450440200241a0a9c000" - "280200460d022002419ca9c000280200460d032002200341787122031016" - "2001200020036a2200410172360204200020016a20003602002001419ca9" - "c000280200470d014194a9c00020003602000f0b20022003417e71360204" - "20012000410172360204200020016a20003602000b2000418002490d0241" - "1f210220014200370210200041ffffff074d044020004106200041087667" - "22026b7641017120024101746b413e6a21020b2001200236021c20024102" - "7441f4a5c0006a2103410120027422044190a9c000280200710d03200320" - "01360200200120033602182001200136020c200120013602084190a9c000" - "4190a9c0002802002004723602000c040b41a0a9c00020013602004198a9" - "c0004198a9c00028020020006a220036020020012000410172360204419c" - "a9c00028020020014604404194a9c0004100360200419ca9c00041003602" - "000b200041aca9c00028020022044d0d0541a0a9c0002802002200450d05" - "410021034198a9c00028020022054129490d0441f4a6c000210103402000" - "200128020022024f04402000200220012802046a490d060b200128020821" - "010c000b000b419ca9c00020013602004194a9c0004194a9c00028020020" - "006a220036020020012000410172360204200020016a20003602000f0b20" - "0041f801714184a7c0006a2102027f418ca9c00028020022034101200041" - "037674220071450440418ca9c000200020037236020020020c010b200228" - "02080b2100200220013602082000200136020c2001200236020c20012000" - "3602080f0b02400240200020032802002204280204417871460440200421" - "020c010b2000411920024101766b41002002411f471b7421030340200420" - "03411d764104716a41106a22052802002202450d02200341017421032002" - "210420022802044178712000470d000b0b20022802082200200136020c20" - "022001360208200141003602182001200236020c200120003602080c010b" - "20052001360200200120043602182001200136020c200120013602080b41" - "00210141b4a9c00041b4a9c00028020041016b220036020020000d0141fc" - "a6c000280200220004400340200141016a2101200028020822000d000b0b" - "41b4a9c00041ff1f2001200141ff1f4d1b3602000f0b41fca6c000280200" - "220104400340200341016a2103200128020822010d000b0b41b4a9c00041" - "ff1f2003200341ff1f4d1b360200200420054f0d0041aca9c000417f3602" - "000b0b810802077f067e230041c0026b2203240020034198026a20024118" - "6a290300220a37030020034190026a200241106a290300220d3703002003" - "200241086a290300220b3703880220032002290300220c3703800242ddb0" - "858ce8b691a8b87f210e20034180026a200c200b200d200a42c7faf3c3ed" - "82a3903c428d95c7c396d2dac0977f102b200341b0026a2204200141106a" - "290300220a370300200341b8026a2205200141186a290300220d37030020" - "032001290300220b3703a0022003200141086a290300220c3703a8022003" - "41a0026a200b200c200a200d42c7faf3c3ed82a3903c428d95c7c396d2da" - "c0977f102b200341a0026a200b200c200a200d42c7faf3c3ed82a3903c42" - "8d95c7c396d2dac0977f102b02400240024020032903a002220a42037c22" - "0c200a54ad220a20032903a8027c220b200a54ad220a20042903007c220d" - "42ddb0858ce8b691a8b87f852005290300200a200d56ad7c220a42a9c0c6" - "89aece93b2308584500440200c42c7faf3c3ed82a3903c54200b428d95c7" - "c396d2dac0977f54200b428d95c7c396d2dac0977f511b450d0242a9c0c6" - "89aece93b230210a0c010b200d42deb0858ce8b691a8b87f54200a42a9c0" - "c689aece93b23054200a42a9c0c689aece93b230511b450d01200d210e0b" - "200c210f200b210c0c010b200a200d200b200c42c7faf3c3ed82a3903c7d" - "220f200c5aad220e7d220a42f3eab8bce9ada5bfe8007c220c200a54ad20" - "0b200e54ad7d7c220b200d54ad200b42a2cffaf397c9eed7c7007c220e20" - "0b54ad7c50ad7d42a9c0c689aece93b2307d210a0b2003200e3703b00120" - "03200f3703a0012003200a3703b8012003200c3703a8012000027f200341" - "80026a200341a0016a104a45044020034180016a22042002290300370100" - "20034198016a2205200241186a29030037010020034190016a2206200241" - "106a29030037010020034188016a2207200241086a290300370100200341" - "f8006a2202200141186a290300370100200341f0006a2208200141106a29" - "0300370100200341e8006a2209200141086a290300370100200320012903" - "00370160200341ca006a22012005290100370100200341c2006a22052006" - "2901003701002003413a6a22062007290100370100200341326a22072004" - "2901003701002003412a6a22042002290100370100200341226a22022008" - "2901003701002003411a6a22082009290100370100200320032901603701" - "12200041c8006a2001290100370100200041406b20052901003701002000" - "41386a2006290100370100200041306a2007290100370100200041286a20" - "04290100370100200041206a2002290100370100200041186a2008290100" - "3701002000200329011237011041000c010b200041003a000141010b3a00" - "00200341c0026a24000baa0401047e2001290010220242388620024280fe" - "0383422886842002428080fc0783421886200242808080f80f8342088684" - "84200242088842808080f80f832002421888428080fc0783842002422888" - "4280fe038320024238888484842104200141186a29000022024238862002" - "4280fe0383422886842002428080fc0783421886200242808080f80f8342" - "08868484200242088842808080f80f832002421888428080fc0783842002" - "4228884280fe0383200242388884848421050240417f2001290000220242" - "b0c8b99297bc8cd02985200141086a290000220342b8a195b29bb0a0acdd" - "008584420052200342388620034280fe0383422886842003428080fc0783" - "421886200342808080f80f834208868484200342088842808080f80f8320" - "03421888428080fc07838420034228884280fe0383200342388884848422" - "0342ddb0858ce8b691a8b87f54200242388620024280fe03834228868420" - "02428080fc0783421886200242808080f80f834208868484200242088842" - "808080f80f832002421888428080fc07838420024228884280fe03832002" - "423888848484220242a9c0c689aece93b23054200242a9c0c689aece93b2" - "30511b1b2201417f470440200141ff01710d01200542c6faf3c3ed82a390" - "3c562004428d95c7c396d2dac0977f562004428d95c7c396d2dac0977f51" - "1b0d010b2000200337032020002005370310200020023703282000200437" - "0318200041003a00000f0b200041023a0001200041013a00000bb40c0204" - "7f027e230041d0066b2203240020034188036a200241386a290300370300" - "20034180036a200241306a290300370300200341f8026a200241286a2903" - "00370300200341f0026a2204200241206a290300370300200341e8026a20" - "0241186a290300370300200341e0026a200241106a290300370300200320" - "022903003703d0022003200241086a2903003703d802200341d0026a2002" - "2002102f200341a0036a200141106a290300370300200341a8036a200141" - "186a290300370300200341b0036a200141206a290300370300200341b803" - "6a200141286a290300370300200341c0036a200141306a29030037030020" - "0341c8036a200141386a2903003703002003200129030037039003200320" - "0141086a2903003703980320034190036a20012001102f200341d0006a20" - "034190036a2001102f200342d4fdc3d783f6c4cb003703c805200342f4fb" - "e3f6def5ab964d3703c005200342d2b0b4a9ce90e8a7a77f3703b8052003" - "42d2ab8caee8a0afd1643703b005200342aed5e2f58ca8a78a2b3703a805" - "200342c3d581df919386df817f3703a005200342a3dfefced5bcb1dab57f" - "37039805200342e5f184a5c2dbf9b33237039005200341106a200341d000" - "6a20034190056a103002400240200341d0026a200341106a104a45044020" - "04200341306a104a450d010b200041013b01000c010b200341c8026a4200" - "370300200341c0026a4200370300200341b8026a4200370300200341b002" - "6a4200370300200341a8026a4200370300200341a0016a200141106a2903" - "00370300200341a8016a200141186a290300370300200341b0016a200141" - "206a290300370300200341b8016a200141286a290300370300200341c001" - "6a200141306a290300370300200341c8016a200141386a29030037030020" - "0342003703a00220032001290300370390012003200141086a2903003703" - "980120034188026a200241386a29030037030020034180026a200241306a" - "290300370300200341f8016a200241286a290300370300200341f0016a20" - "0241206a290300370300200341e8016a200241186a290300370300200341" - "e0016a200241106a290300370300200341d8016a200241086a2903003703" - "0020034201370390022003420037039802200320022903003703d0012003" - "41e0036a4200370300200341e8036a4200370300200341f0036a42003703" - "00200341f8036a420037030020034180046a420037030020034188046a42" - "00370300200342003703d003200342003703d803200342a9c0c689aece93" - "b230370368200342ddb0858ce8b691a8b87f37036020034291e1e5cd8789" - "fa992837035820034280808080bfb2fdf0c300370350200341a0046a41f0" - "00104b1a2003420037039804200342013703900441ff0121040340200320" - "0441ff0071104f200341086a290300200341d0006a200441037641f0ffff" - "ff01716a2206290308832107200329030020062903008321082005044020" - "034190056a200341d0036a1043200341d0036a20034190056a41c001104c" - "1a0b2007200884420052044020034190056a200341d0036a20034190016a" - "1044200341d0036a20034190056a41c001104c1a410121050b200441016b" - "2204417f470d000b20034190056a200341d0036a20034190016a10440240" - "20032903900620034198066a290300844200520d0020032903a006200341" - "a8066a290300844200520d0020032903b006200341b8066a290300844200" - "520d0020032903c006200341c8066a290300844200520d00200341c8056a" - "200141386a290300370300200341c0056a200141306a2903003703002003" - "41b8056a200141286a290300370300200341b0056a200141206a29030037" - "0300200341a8056a200141186a290300370300200341a0056a200141106a" - "290300370300200341d8056a200241086a290300370300200341e0056a20" - "0241106a290300370300200341e8056a200241186a290300370300200341" - "f0056a200241206a290300370300200341f8056a200241286a2903003703" - "0020034180066a200241306a29030037030020034188066a200241386a29" - "03003703002003200129030037039005200320022903003703d005200320" - "0141086a29030037039805200041106a20034190056a418001104c1a2000" - "41003a00000c010b20004181023b01000b200341d0066a24000ba8150207" - "7f137e230041a0016b22022400200241106a2001102a20022d0011210620" - "022d001021072000027f024020022d0030220841c101470440200235011a" - "2109200233011e210a2002290112211620022903202114200241d8006a22" - "01200241286a29030022173703002002201437035020022009200a422086" - "842219421086201642308884220937034820022007ad42ff018320164210" - "862006ad42ff01834208868484220a37034042ddb0858ce8b691a8b87f21" - "0f200241406b200a20092014201742c7faf3c3ed82a3903c428d95c7c396" - "d2dac0977f102b200241406b200a20092014201742c7faf3c3ed82a3903c" - "428d95c7c396d2dac0977f102b0240024002402002290340220942037c22" - "0b200954ad220920022903487c220a200954ad220c20022903507c220942" - "ddb0858ce8b691a8b87f8520012903002009200c54ad7c220e42a9c0c689" - "aece93b2308584500440200b42c7faf3c3ed82a3903c54200a428d95c7c3" - "96d2dac0977f54200a428d95c7c396d2dac0977f511b450d0242a9c0c689" - "aece93b230210e0c010b200942deb0858ce8b691a8b87f54200e42a9c0c6" - "89aece93b23054200e42a9c0c689aece93b230511b450d012009210f0b20" - "0b2110200a210d0c010b200e2009200a200b42c7faf3c3ed82a3903c7d22" - "10200b5aad220b7d220c42f3eab8bce9ada5bfe8007c220d200c54ad200a" - "200b54ad7d7c220a200954ad200a42a2cffaf397c9eed7c7007c220f200a" - "54ad7c50ad7d42a9c0c689aece93b2307d210e0b4190aac0002d00004102" - "470440230041e0006b220324004190aac0004190aac0002d000022044101" - "20041b3a00000240200404400340024002400240200441ff017141016b0e" - "03000501020b03404190aac0002d000022044101460d000b024002402004" - "41016b0e03000601030b000b41a49bc000412641cc9bc0001011000b41a8" - "9ac000410d41949bc0001011000b4190aac0004190aac0002d0000220441" - "0120041b3a000020040d000b0b200341186a220442a9c0c689aece93b230" - "370300200341106a220542ddb0858ce8b691a8b87f3703002003428d95c7" - "c396d2dac0977f370308200342c4faf3c3ed82a3903c370300200341386a" - "220142003703002003420037033020034200370328200342043703202003" - "42a9c0c689aece93b230370358200342ddb0858ce8b691a8b87f37035020" - "03428d95c7c396d2dac0977f370348200342c7faf3c3ed82a3903c370340" - "200341206a200341406b103a200320032903202003290328200329033020" - "0129030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b4190aa" - "c00041023a00004188aac00020042903003703004180aac0002005290300" - "37030041f8a9c000200329030837030041f0a9c00020032903003703000b" - "200341e0006a24000b20024198016a4188aac00029030037030020024190" - "016a4180aac000290300370300200241f8a9c00029030037038801200241" - "f0a9c00029030037038001420021094201210a41ff0121014200210b4200" - "210c0340200220024180016a200141037641f0ffffff01716a2205290300" - "2005290308200141ff0071104e200241286a2205200b3703002002200937" - "03202002200c3703182002200a370310200241106a200a200c2009200b42" - "c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2005290300210b20" - "0229032021092002290318210c2002290310210a20022802004101710440" - "2005200b370300200220093703202002200a3703102002200c3703182002" - "41106a2010200d200f200e42c7faf3c3ed82a3903c428d95c7c396d2dac0" - "977f102b2005290300210b2002290318210c200229032021092002290310" - "210a0b200141016b2201417f470d000b200241286a2201200b3703002002" - "20093703202002200c3703182002200a370310200241106a2010200d200f" - "200e42c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2002200b37" - "0378200220093703702002200c3703682002200a370360200241e0006a20" - "02290310220e2002290318220b2002290320220c2001290300220a42c7fa" - "f3c3ed82a3903c428d95c7c396d2dac0977f102b41e0a9c0002d00004102" - "470440102c0b20024198016a41d8a9c00029030037030020024190016a41" - "d0a9c000290300370300200241c8a9c00029030037038801200241c0a9c0" - "002903003703800141e0a9c0002d00004102470440102c0b20024180016a" - "420142004200420041c0a9c00029030041c8a9c00029030041d0a9c00029" - "030041d8a9c000290300102d2002290388012110200229038001210d0240" - "0240417f200229039001220f42ddb0858ce8b691a8b87f8520024198016a" - "290300220942a9c0c689aece93b2308584420052200f42ddb0858ce8b691" - "a8b87f54200942a9c0c689aece93b23054200942a9c0c689aece93b23051" - "1b1b2201417f470440200141ff01710d01200d42c7faf3c3ed82a3903c54" - "2010428d95c7c396d2dac0977f542010428d95c7c396d2dac0977f511b45" - "0d010b2002200f3703202002200d37031020022009370328200220103703" - "18027e0240200241e0006a200241106a104a0440420021104200210f4200" - "2109200c200e84200a200b8484420052044042c7faf3c3ed82a3903c200e" - "7d2115427f4200427f4200200e42788342c7faf3c3ed82a3903c561b2209" - "2009200b54ad7d2009200b7d220942f3eab8bce9ada5bfe8007d22102009" - "54ad7c42017c2209200c7d220d42a4cffaf397c9eed7c7007d220f200d54" - "ad2009200c54ad7d427f511b200a7d42a9c0c689aece93b2307c21090b20" - "0e201554200b201054200b2010511b200c200f542009200a562009200a51" - "1b200c200f852009200a8584221b501b4101460d0120152111200f211220" - "09210d200e211a200b2118200c210f200a210920100c020b200041033a00" - "010c050b200e2111200c2112200a210d2015211a20102118200b0b211302" - "40024002400240417f201b420052200f2012562009200d562009200d511b" - "1b2201047f2001052011201a54201320185420132018511b0d01200e2015" - "85200b201085844200520b4101460d010b200841c001470d014200210942" - "00210a4200210b4200210c2011201284200d20138484500d04427f420042" - "7f4200201142788342c7faf3c3ed82a3903c561b22092009201354ad7d20" - "0920137d220942f3eab8bce9ada5bfe8007d220a200954ad7c42017c2209" - "20127d220c42a4cffaf397c9eed7c7007d220b200c54ad2009201254ad7d" - "427f511b200d7d42a9c0c689aece93b2307c210c42c7faf3c3ed82a3903c" - "20117d21090c040b2008418001460d010b201121092013210a2012210b20" - "0d210c0c020b420021094200210a4200210b4200210c2011201284200d20" - "138484500d01427f4200427f4200201142788342c7faf3c3ed82a3903c56" - "1b22092009201354ad7d200920137d220942f3eab8bce9ada5bfe8007d22" - "0a200954ad7c42017c220920127d220c42a4cffaf397c9eed7c7007d220b" - "200c54ad2009201254ad7d427f511b200d7d42a9c0c689aece93b2307c21" - "0c42c7faf3c3ed82a3903c20117d21090c010b41e09dc0001020000b2000" - "2014370320200020163701122000200b3703402000200937033020002006" - "3a0011200020073a0010200020193e011a200020173703282000200c3703" - "482000200a3703382000411e6a20194220883d010041000c020b20002006" - "3a0002200020073a00010b41010b3a0000200241a0016a24000ba02f0208" - "7f187e230041c0086b22022400200241f0046a2001102a20022d00f10421" - "0620022d00f0042107024002400240024020022d009005220941c1014704" - "4020024198016a220520022901fa04370300200241a6016a220420024188" - "056a2203290100370100200241a0016a220820024182056a290100370300" - "200220022901f20437039001200241f0046a200141206a102e20022d00f0" - "04450440200241d5076a2003290300220c37000020024188016a20024198" - "056a290300220b37030020024180016a20024190056a290300220a370300" - "200241c8006a200b370300200241406b200a370300200220022903800522" - "0b3703702002200c3703782002200b3703302002200c370338200220063a" - "0051200220073a0050200241e8006a22012004290100370100200241e200" - "6a2008290300370100200241da006a200529030037010020022002290390" - "01370152200941c000460d0220024180026a200241406b29030037030020" - "024188026a200241c8006a29030037030020024190026a200241d0006a29" - "030037030020024198026a200241d8006a290300370300200241a0026a20" - "0241e0006a290300370300200241a8026a20012903003703002002200229" - "03303703f001200220022903383703f801200241f0016a200241306a2002" - "41306a102f20024180086a200241f0016a200241306a102f200242d4fdc3" - "d783f6c4cb003703a805200242f4fbe3f6def5ab964d3703a005200242d2" - "b0b4a9ce90e8a7a77f37039805200242d2ab8caee8a0afd1643703900520" - "0242aed5e2f58ca8a78a2b37038805200242c3d581df919386df817f3703" - "8005200242a3dfefced5bcb1dab57f3703f804200242e5f184a5c2dbf9b3" - "323703f004200241b0016a20024180086a200241f0046a103041f0aac000" - "2d00004102470440230041e0006b2203240041f0aac00041f0aac0002d00" - "002204410120041b3a00000240200404400340024002400240200441ff01" - "7141016b0e03000501020b034041f0aac0002d000022044101460d000b02" - "400240200441016b0e03000601030b000b41a49bc000412641cc9bc00010" - "11000b41a89ac000410d41949bc0001011000b41f0aac00041f0aac0002d" - "00002204410120041b3a000020040d000b0b200341186a220442a9c0c689" - "aece93b230370300200341106a220842ddb0858ce8b691a8b87f37030020" - "03428d95c7c396d2dac0977f370308200342c4faf3c3ed82a3903c370300" - "200341386a22014200370300200342003703302003420037032820034204" - "370320200342a9c0c689aece93b230370358200342ddb0858ce8b691a8b8" - "7f3703502003428d95c7c396d2dac0977f370348200342c7faf3c3ed82a3" - "903c370340200341206a200341406b103a20032003290320200329032820" - "03290330200129030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f" - "102b41f0aac00041023a000041e8aac000200429030037030041e0aac000" - "200829030037030041d8aac000200329030837030041d0aac00020032903" - "003703000b200341e0006a24000b200241c8046a41e8aac0002903003703" - "00200241c0046a41e0aac000290300370300200241d8aac0002903003703" - "b804200241d0aac0002903003703b0044200210c4201210b41ff01210120" - "0241a8076a2104200241b8076a21034200210a0340200241206a200241b0" - "046a200141037641f0ffffff01716a22052903002005290308200141ff00" - "71104e2002200a3703f8072002200c3703f0072002200f3703e807200220" - "0e3703e0072002200d3703d807200220103703d007200220113703c80720" - "02200b3703c0072002200a3703b8082002200c3703b0082002200f3703a8" - "082002200e3703a0082002200d3703980820022010370390082002201137" - "0388082002200b370380082002280220210520024180076a200241c0076a" - "20024180086a102f20024198076a290300210d2004290300210f20032903" - "00210a2002290388072111200229038007210b2002290390072110200229" - "03a007210e20022903b007210c200541017104402002200a3703b8082002" - "200c3703b0082002200f3703a8082002200e3703a0082002200d37039808" - "200220103703900820022011370388082002200b37038008200241c0076a" - "20024180086a200241b0016a102f200241e8076a290300210f200241f807" - "6a290300210a20022903c007210b20022903d007211020022903e007210e" - "20022903f007210c20022903c8072111200241d8076a290300210d0b2001" - "41016b2201417f470d000b2002200c3703e0022002200e3703d002200220" - "103703c0022002200b3703b0022002200a3703e8022002200f3703d80220" - "02200d3703c802200220113703b802200241f0026a200241b0026a200241" - "b0016a102f200241b0036a200241b0026a200241f0026a102f41c0aac000" - "2d0000410247044041c0aac00041c0aac0002d00002201410120011b3a00" - "000240200104400340024002400240200141016b0e03000501020b034041" - "c0aac0002d000022014101460d000b02400240200141016b0e0300060103" - "0b000b41a49bc000412641cc9bc0001011000b41a89ac000410d41949bc0" - "001011000b41c0aac00041c0aac0002d00002201410120011b3a00002001" - "0d000b0b41b8aac00042a9c0c689aece93b23037030041b0aac00042ddb0" - "858ce8b691a8b87f37030041a8aac000428d95c7c396d2dac0977f370300" - "41a0aac00042c7faf3c3ed82a3903c37030041c0aac00041023a00000b0b" - "200241d8066a41b8aac000290300370300200241d0066a41b0aac0002903" - "00370300200241a8aac0002903003703c806200241a0aac0002903003703" - "c0064200210c4201210b41ff012101200241a8076a2104200241b8076a21" - "034200210a4200210e4200210f420021104200210d420021110340200241" - "106a200241c0066a200141037641f0ffffff01716a220529030020052903" - "08200141ff0071104e2002200a3703f8072002200c3703f0072002200f37" - "03e8072002200e3703e0072002200d3703d807200220103703d007200220" - "113703c8072002200b3703c0072002200a3703b8082002200c3703b00820" - "02200f3703a8082002200e3703a0082002200d3703980820022010370390" - "0820022011370388082002200b370380082002280210210520024180076a" - "200241c0076a20024180086a102f20024198076a290300210d2004290300" - "210f2003290300210a2002290388072111200229038007210b2002290390" - "07211020022903a007210e20022903b007210c200541017104402002200a" - "3703b8082002200c3703b0082002200f3703a8082002200e3703a0082002" - "200d37039808200220103703900820022011370388082002200b37038008" - "200241c0076a20024180086a200241b0036a102f200241e8076a29030021" - "0f200241f8076a290300210a20022903c007210b20022903d00721102002" - "2903e007210e20022903f007210c20022903c8072111200241d8076a2903" - "00210d0b200141016b2201417f470d000b2002200c3703b0082002200e37" - "03a00820022010370390082002200b370380082002200a3703b808200220" - "0f3703a8082002200d370398082002201137038808200241f0036a200241" - "80086a200241b0036a102f200241a8086a22014200370300200241b0086a" - "22054200370300200241b8086a22044200370300200242a9c0c689aece93" - "b23037039808200242ddb0858ce8b691a8b87f370390082002428d95c7c3" - "96d2dac0977f37038808200242c6faf3c3ed82a3903c3703800820024200" - "3703a008200241a0086a21030240200241f0036a20024180086a104a4504" - "4020024190046a2003104a450d010b200142003703002005420037030020" - "044200370300200242a9c0c689aece93b23037039808200242ddb0858ce8" - "b691a8b87f370390082002428d95c7c396d2dac0977f37038808200242c6" - "faf3c3ed82a3903c37038008200242003703a008200241b0036a20024180" - "086a104a450440200241d0036a2003104a450d050b4200210c2002419808" - "6a4200370300200241a0086a4200370300200241a8086a42003703002002" - "41b0086a4200370300200241b8086a420037030020024200370388084201" - "210b20024201370380082002420037039008200241c0066a200241b0036a" - "20024180086a103041a0abc0002d00004102470440230041e0006b220324" - "0041a0abc00041a0abc0002d00002204410120041b3a0000024020040440" - "0340024002400240200441ff017141016b0e03000501020b034041a0abc0" - "002d000022044101460d000b02400240200441016b0e03000601030b000b" - "41a49bc000412641cc9bc0001011000b41a89ac000410d41949bc0001011" - "000b41a0abc00041a0abc0002d00002204410120041b3a000020040d000b" - "0b200341186a220442a9c0c689aece93b230370300200341106a220842dd" - "b0858ce8b691a8b87f3703002003428d95c7c396d2dac0977f3703082003" - "42c6faf3c3ed82a3903c370300200341386a220142003703002003420037" - "03302003420037032820034202370320200342a9c0c689aece93b2303703" - "58200342ddb0858ce8b691a8b87f3703502003428d95c7c396d2dac0977f" - "370348200342c7faf3c3ed82a3903c370340200341206a200341406b103a" - "2003200329032020032903282003290330200129030042c7faf3c3ed82a3" - "903c428d95c7c396d2dac0977f102b41a0abc00041023a00004198abc000" - "20042903003703004190abc00020082903003703004188abc00020032903" - "083703004180abc00020032903003703000b200341e0006a24000b200241" - "e8046a4198abc000290300370300200241e0046a4190abc0002903003703" - "0020024188abc0002903003703d80420024180abc0002903003703d00441" - "ff012101200241a8076a2104200241b8076a21034200210a4200210e4200" - "210f420021104200210d4200211103402002200241d0046a200141037641" - "f0ffffff01716a22052903002005290308200141ff0071104e2002200a37" - "03f8072002200c3703f0072002200f3703e8072002200e3703e007200220" - "0d3703d807200220103703d007200220113703c8072002200b3703c00720" - "02200a3703b8082002200c3703b0082002200f3703a8082002200e3703a0" - "082002200d37039808200220103703900820022011370388082002200b37" - "0380082002280200210520024180076a200241c0076a20024180086a102f" - "20024198076a290300210d2004290300210f2003290300210a2002290388" - "072111200229038007210b200229039007211020022903a007210e200229" - "03b007210c200541017104402002200a3703b8082002200c3703b0082002" - "200f3703a8082002200e3703a0082002200d370398082002201037039008" - "20022011370388082002200b37038008200241c0076a20024180086a2002" - "41c0066a102f200241e8076a290300210f200241f8076a290300210a2002" - "2903c007210b20022903d007211020022903e007210e20022903f007210c" - "20022903c8072111200241d8076a290300210d0b200141016b2201417f47" - "0d000b2002200c3703b0062002200e3703a0062002201037039006200220" - "0b370380062002200a3703b8062002200f3703a8062002200d3703980620" - "0220113703880620024180056a20024180066a200241f0026a102f0c050b" - "20004181063b01000c050b200020022d00f1043a0002200041810a3b0100" - "0c040b200020063a0002200020073a0001200041013a00000c030b200241" - "f8066a4200370300200241f0066a4200370300200241e8066a4200370300" - "200241e0066a4200370300200241d8066a4200370300200242003703d006" - "200242003703c806200242013703c006200242ba90b590b9f2a4c7193703" - "f807200242a5baed8ff3f6afb0f2003703f00720024292cea7adb3a692d5" - "713703e807200242c2a5ccf7fab6a1f2977f3703e007200242f6bcfc90f1" - "ddb780183703d807200242f988f1f2e58c80b5c2003703d007200242ddb5" - "fbbacfdac8a1e7003703c807200242ededcbcccdabafefc6003703c00720" - "0241f0046a200241c0066a10310240024020022802f00441017104402002" - "41b8086a2201200241b8056a2205290300370300200241b0086a200241b0" - "056a2204290300370300200241a8086a2203200241a8056a220629030037" - "0300200241a0086a200241a0056a29030037030020024198086a20024198" - "056a220729030037030020024190086a20024190056a2903003703002002" - "20022903800537038008200220024188056a290300370388082002418006" - "6a200241c0076a20024180086a102f200242f5e0ffc285baa283093703f8" - "0720024295e7b0c8d6b5a6cf6c3703f007200242f39dce85b7a6cca5bc7f" - "3703e807200242dbae8a89cddbb6d6d5003703e007200242ebdbb1dcddd4" - "97e4123703d8072002428f81adee88b0dcd5ca003703d007200242fba68f" - "e290edf9e8633703c807200242aafbe9b79680b3f3cc003703c007200241" - "f0046a200241c0066a103120022802f004410171450d0120012005290300" - "370300200241b0086a200429030037030020032006290300370300200241" - "a0086a200241a0056a29030037030020024198086a200729030037030020" - "024190086a20024190056a29030037030020022002290380053703800820" - "0220024188056a2903003703880820024180076a200241c0076a20024180" - "086a102f200241f0046a20024180066a20024180076a100720022d00f004" - "4101460d02200041106a20024180056a418001104c1a200041003a00000c" - "050b41f09dc000412c41989fc0001021000b41f09dc000412c41989fc000" - "1021000b200220022d00f1043a00800841b89cc000412b20024180086a41" - "a89fc00041b4a0c0001013000b20024198086a420037030020024190086a" - "4200370300200242003703b808200242003703b008200242003703a80820" - "0242013703a0082002420037038808200242003703800820024180056a20" - "024180086a200241f0026a102f0b200241a8056a290300210e200241b805" - "6a290300210c20022903a005210f20022903b005210b200229039005220d" - "20022903800522158420024198056a290300221220024188056a29030022" - "1384844200520440427f4200427f4200201542788342c7faf3c3ed82a390" - "3c561b220a200a201354ad7d200a20137d220a42f3eab8bce9ada5bfe800" - "7d2217200a54ad7c42017c220a200d7d221042a4cffaf397c9eed7c7007d" - "2218201054ad200a200d54ad7d427f511b20127d42a9c0c689aece93b230" - "7c211642c7faf3c3ed82a3903c20157d21190b4200211142002110420021" - "0a200b200f84200c200e84844200520440427f4200427f4200200f427883" - "42c7faf3c3ed82a3903c561b220a200a200e54ad7d200a200e7d220a42f3" - "eab8bce9ada5bfe8007d2211200a54ad7c42017c220a200b7d221442a4cf" - "faf397c9eed7c7007d2210201454ad200a200b54ad7d427f511b200c7d42" - "a9c0c689aece93b2307c210a42c7faf3c3ed82a3903c200f7d21140b0240" - "0240417f200b201085200a200c8584420052200b201054200a200c56200a" - "200c511b1b2201450440200f201454200e201154200e2011511b0d01200f" - "201485200e2011858442005221010b2019211c2017211d2018211a201621" - "1b2014211e2011211f20102120200a21210240200141ff01710e02000201" - "0b027e200d20188520122016858450044020152019542013201754201320" - "17511b0d02200d211a20120c010b200d20185a201220165a20122016511b" - "450d0120160b211b0c010b2015211c2013211d200d211a2012211b200f21" - "1e200e211f200b2120200c212120192115201721132018210d2016211220" - "14210f2011210e2010210b200a210c0b200041186a200229037837030020" - "0020022903703703102000200229039001370132200041286a2002418801" - "6a290300370300200041206a20024180016a2903003703002000413a6a20" - "024198016a290300370100200041c2006a200241a0016a29030037010020" - "0041c8006a200241a6016a29010037010020094180014604402000202037" - "0380012000201e3703702000201a3703602000201c370350200020063a00" - "31200020073a0030200041003a000020002021370388012000201f370378" - "2000201b3703682000201d3703580c010b2000200b370380012000200f37" - "03702000200d37036020002015370350200020063a0031200020073a0030" - "200041003a00002000200c370388012000200e3703782000201237036820" - "0020133703580b200241c0086a24000b9f0602027f0c7e23004180016b22" - "022400200241386a4200370300200241306a4200370300200241286a4200" - "370300200241206a22034200370300200241186a4200370300200241106a" - "4200370300200241d8006a4200370300200241e0006a4200370300200241" - "e8006a4200370300200241f0006a4200370300200241f8006a4200370300" - "200242003703482002420137034020024200370308200242003703002002" - "420037035002400240024020012002104a0d00200141206a2003104a0d00" - "200141406b200241406b104a0d00200141e0006a200241e0006a104a450d" - "010b200141f8006a290300210e200141e8006a2903002106200129037021" - "0c2001290360210d200129035022042001290340220884200141d8006a29" - "0300220b200141c8006a290300220984844200520440427f4200427f4200" - "200842788342c7faf3c3ed82a3903c561b22052005200954ad7d20052009" - "7d220542f3eab8bce9ada5bfe8007d220f200554ad7c42017c220a20047d" - "220742a4cffaf397c9eed7c7007d2205200754ad2004200a56ad7d427f51" - "1b200b7d42a9c0c689aece93b2307c210a42c7faf3c3ed82a3903c20087d" - "21070b4200210442002108420021094200210b200c200d842006200e8484" - "4200520440427f4200427f4200200d42788342c7faf3c3ed82a3903c561b" - "22042004200654ad7d200420067d220642f3eab8bce9ada5bfe8007d2208" - "200654ad7c42017c2206200c7d220442a4cffaf397c9eed7c7007d220920" - "0454ad2006200c54ad7d427f511b200e7d42a9c0c689aece93b2307c210b" - "42c7faf3c3ed82a3903c200d7d21040b2000200937037020002004370360" - "20002005370350200020073703402000200b370378200020083703682000" - "200a3703582000200f37034820002001290300370300200041386a200141" - "386a290300370300200041306a200141306a290300370300200041286a20" - "0141286a290300370300200041206a200141206a29030037030020004118" - "6a200141186a290300370300200041106a200141106a2903003703002000" - "41086a200141086a2903003703000c010b20002001418001104c1a0b2002" - "4180016a24000bc10201067f41102000410b6a4178712000410b491b2204" - "411c6a1001220045044041000f0b200041086b210102402000410f714504" - "40200121000c010b200041046b220528020022064178712000410f6a4170" - "7141086b2200200020016b4111494104746a220020016b22026b21032006" - "410371044020002003200028020441017172410272360204200020036a22" - "032003280204410172360204200520022005280200410171724102723602" - "00200120026a220320032802044101723602042001200210170c010b2001" - "2802002101200020033602042000200120026a3602000b02402000280204" - "2201410371450d0020014178712202200441106a4d0d0020002004200141" - "017172410272360204200020046a2201200220046b220441037236020420" - "0020026a220220022802044101723602042001200410170b200041086a0b" - "de0a01047f230041f0026b22032400200341a8026a220442003703002003" - "41a0026a22054200370300200342003703c802200342003703c002200342" - "003703b802200342013703b0022003420037039802200342003703900220" - "0341b0026a21060240024002400240200120034190026a104a4504402001" - "41206a2006104a450d010b20044200370300200542003703002003420037" - "03c802200342003703c002200342003703b802200342013703b002200342" - "00370398022003420037039002200220034190026a104a45044020024120" - "6a2006104a450d020b200341206a2104200341406b2105200341a8026a42" - "00370300200341a0026a4200370300200342003703c802200342003703c0" - "02200342003703b802200342013703b00220034200370398022003420037" - "039002027f0240200120034190026a104a450440200141206a200341b002" - "6a104a450d010b20042001290320370300200441186a200141386a290300" - "370300200441106a200141306a290300370300200441086a200141286a29" - "0300370300200341106a200141106a290300370300200341186a20014118" - "6a290300370300200320012903003703002003200141086a290300370308" - "200341d0006a0c010b20054200370300200341106a420037030020034118" - "6a4200370300200541086a4200370300200541106a420037030020054118" - "6a4200370300200342003703002003420037030820042105200341306a0b" - "210620034180016a2101200341a0016a2104200642003703082006420037" - "03002005420037030820054201370300200341a8026a4200370300200341" - "a0026a4200370300200342003703c802200342003703c002200342003703" - "b802200342013703b00220034200370398022003420037039002027f0240" - "200220034190026a104a450440200241206a200341b0026a104a450d010b" - "20012002290320370300200141186a200241386a29030037030020014110" - "6a200241306a290300370300200141086a200241286a2903003703002003" - "41f0006a200241106a290300370300200341f8006a200241186a29030037" - "0300200320022903003703602003200241086a290300370368200341b001" - "6a0c010b20044200370300200341f0006a4200370300200341f8006a4200" - "370300200441086a4200370300200441106a4200370300200441186a4200" - "37030020034200370360200342003703682001210420034190016a0b2205" - "420037030820054200370300200442003703082004420137030020034190" - "026a2003200341e0006a1040200341c0016a20034190026a104120032802" - "c001410171450d02200020032903d001370300200041386a20034188026a" - "290300370300200041306a20034180026a290300370300200041286a2003" - "41f8016a290300370300200041206a200341f0016a290300370300200041" - "186a200341e8016a290300370300200041106a200341e0016a2903003703" - "00200041086a200341d8016a2903003703000c030b200020022903003703" - "00200041386a200241386a290300370300200041306a200241306a290300" - "370300200041286a200241286a290300370300200041206a200241206a29" - "0300370300200041186a200241186a290300370300200041106a20024110" - "6a290300370300200041086a200241086a2903003703000c020b20002001" - "290300370300200041386a200141386a290300370300200041306a200141" - "306a290300370300200041286a200141286a290300370300200041206a20" - "0141206a290300370300200041186a200141186a29030037030020004110" - "6a200141106a290300370300200041086a200141086a2903003703000c01" - "0b41c4a0c000412041f4a0c0001021000b200341f0026a24000bf2020201" - "7f067e230041e0006b22022400200241386a4200370300200241306a4200" - "370300200242003703582002420037035020024200370348420121042002" - "42013703402002420037032820024200370320027e02402001200241206a" - "104a450440200141206a200241406b104a450d010b200241106a20014110" - "6a290300370300200241186a200141186a29030037030020022001290300" - "3703002002200141086a290300370308200141286a290300210520012903" - "30210620012903202107200141386a2903000c010b42002104200241106a" - "4200370300200241186a4200370300200242003703002002420037030842" - "01210742000b210820004200370358200042003703502000200437034020" - "002006370330200020073703202000200229030037030020002003370348" - "2000200837033820002005370328200041086a2002290308370300200041" - "186a200241186a290300370300200041106a200241106a29030037030020" - "0241e0006a24000b5b01027f0240200041046b2802002202417871220341" - "044108200241037122021b20016a4f0440200241002003200141276a4b1b" - "0d01200010040f0b41f996c000412e41a897c0001011000b41b897c00041" - "2e41e897c0001011000bc30802027f047e230041a0026b22022400200241" - "d8016a4200370300200241d0016a4200370300200241c8016a4200370300" - "200241c0016a22034200370300200241b8016a4200370300200241b0016a" - "4200370300200241f8016a420037030020024180026a4200370300200241" - "88026a420037030020024190026a420037030020024198026a4200370300" - "200242003703e80142012105200242013703e001200242003703a8012002" - "42003703a001200242003703f0010240024002402001200241a0016a104a" - "0d00200141206a2003104a0d00200141406b200241e0016a104a0d002001" - "41e0006a20024180026a104a450d010b200241106a420037030020024118" - "6a4200370300200241206a4200370300200241286a420037030020024140" - "6b200141e0006a290300370300200241c8006a200141e8006a2903003703" - "00200241d0006a200141f0006a290300370300200241d8006a200141f800" - "6a2903003703002002420037030020024200370308200220012903503703" - "302002200141d8006a290300370338200141c8006a290300210620012903" - "40210720024198016a200141386a29030037030020024190016a20014130" - "6a29030037030020024188016a200141286a29030037030020024180016a" - "200141206a290300370300200241f8006a200141186a2903003703002002" - "41f0006a200141106a2903003703002002200141086a2903003703682002" - "20012903003703600c010b42002105200241f0006a4200370300200241f8" - "006a420037030020024180016a420037030020024188016a420037030020" - "024190016a420037030020024198016a4200370300200241406b42003703" - "00200241c8006a4200370300200241d0006a4200370300200241d8006a42" - "00370300200241106a4200370300200241186a4200370300200241206a42" - "00370300200241286a420037030020024200370360200242003703682002" - "420037033020024200370338200242003703002002420037030842012107" - "0b2000200737034020002002290360370300200020022903303703502000" - "2006370348200041086a2002290368370300200041d8006a200229033837" - "0300200041386a20024198016a290300370300200041306a20024190016a" - "290300370300200041286a20024188016a290300370300200041206a2002" - "4180016a290300370300200041186a200241f8006a290300370300200041" - "106a200241f0006a290300370300200041e0006a200241406b2903003703" - "00200041e8006a200241c8006a290300370300200041f0006a200241d000" - "6a290300370300200041f8006a200241d8006a2903003703002000200437" - "0388012000200537038001200020022903003703900120004198016a2002" - "290308370300200041a0016a200241106a290300370300200041a8016a20" - "0241186a290300370300200041b0016a200241206a290300370300200041" - "b8016a200241286a290300370300200241a0026a24000b6802017f017e23" - "0041306b2203240020032001360204200320003602002003410236020c20" - "0341c481c00036020820034202370214200342808080801022042003ad84" - "37032820032004200341046aad843703202003200341206a360210200341" - "086a2002101a000b4101017f230041206b22032400200341003602102003" - "4101360204200342043702082003200136021c2003200036021820032003" - "41186a36020020032002101a000b6801017f230041306b22032400200320" - "01360204200320003602002003410236020c2003418484c0003602082003" - "42023702142003200341046aad4280808080108437032820032003ad4280" - "80808010843703202003200341206a360210200341086a2002101a000b79" - "01017f230041406a220524002005200136020c2005200036020820052003" - "360214200520023602102005410236021c200541d881c000360218200542" - "023702242005200541106aad428080808020843703382005200541086aad" - "428080808030843703302005200541306a360220200541186a2004101a00" - "0b3601017f230041206b22012400200141003602182001410136020c2001" - "41d480c00036020820014204370210200141086a2000101a000bcc060105" - "7f0240024002400240200041046b22062802002207417871220441044108" - "200741037122051b20016a4f044020054100200141276a22082004491b0d" - "0102400240200241094f04402003100b22040d0141000f0b41102003410b" - "6a4178712003410b491b2101024020054504402001418002490d01200420" - "01410472490d01200420016b418180084f0d010c030b200041086b220220" - "046a2105024002400240200120044b0440200541a0a9c000280200460d03" - "2005419ca9c000280200460d02200528020422074102710d042007417871" - "220720046a22042001490d04200520071016200420016b22034110490d01" - "20062001200628020041017172410272360200200120026a220120034103" - "72360204200220046a220420042802044101723602042001200310172000" - "0f0b200420016b2203410f4d0d0520062001200741017172410272360200" - "200120026a22012003410372360204200520052802044101723602042001" - "2003101720000f0b20062004200628020041017172410272360200200220" - "046a2201200128020441017236020420000f0b4194a9c00028020020046a" - "22042001490d010240200420016b2203410f4d0440200620074101712004" - "72410272360200200220046a220120012802044101723602044100210341" - "0021010c010b20062001200741017172410272360200200120026a220120" - "03410172360204200220046a2204200336020020042004280204417e7136" - "02040b419ca9c00020013602004194a9c000200336020020000f0b4198a9" - "c00028020020046a220420014b0d070b20031001220145044041000f0b20" - "012000417c4178200628020022044103711b20044178716a220420032003" - "20044b1b104c21012000100420010f0b200420002001200320012003491b" - "104c210420062802002203417871220541044108200341037122031b2001" - "6a490d0320034100200520084b1b0d0420001004200421000b20000f0b41" - "f996c000412e41a897c0001011000b41b897c000412e41e897c000101100" - "0b41f996c000412e41a897c0001011000b41b897c000412e41e897c00010" - "11000b20062001200741017172410272360200200120026a220320042001" - "6b22014101723602044198a9c000200136020041a0a9c000200336020020" - "000bf10201047f200028020c21020240024020014180024f044020002802" - "1821040240024020002002460440200041144110200028021422021b6a28" - "020022010d01410021020c020b20002802082201200236020c2002200136" - "02080c010b200041146a200041106a20021b210303402003210520012202" - "41146a200241106a200228021422011b210320024114411020011b6a2802" - "0022010d000b200541003602000b2004450d022000200028021c41027441" - "f4a5c0006a220128020047044020044110411420042802102000461b6a20" - "023602002002450d030c020b2001200236020020020d014190a9c0004190" - "a9c000280200417e200028021c77713602000c020b200028020822032002" - "4704402003200236020c200220033602080f0b418ca9c000418ca9c00028" - "0200417e200141037677713602000f0b2002200436021820002802102201" - "044020022001360210200120023602180b20002802142201450d00200220" - "01360214200120023602180b0ba90601047f200020016a21020240024020" - "0028020422034101710d002003410271450d012000280200220320016a21" - "01200020036b2200419ca9c0002802004604402002280204410371410347" - "0d014194a9c000200136020020022002280204417e713602042000200141" - "0172360204200220013602000c020b2000200310160b0240024002402002" - "2802042203410271450440200241a0a9c000280200460d022002419ca9c0" - "00280200460d0320022003417871220310162000200120036a2201410172" - "360204200020016a20013602002000419ca9c000280200470d014194a9c0" - "0020013602000f0b20022003417e71360204200020014101723602042000" - "20016a20013602000b20014180024f0440411f2102200042003702102001" - "41ffffff074d04402001410620014108766722026b764101712002410174" - "6b413e6a21020b2000200236021c200241027441f4a5c0006a2103410120" - "027422044190a9c000280200714504402003200036020020002003360218" - "2000200036020c200020003602084190a9c0004190a9c000280200200472" - "3602000f0b02400240200120032802002204280204417871460440200421" - "020c010b2001411920024101766b41002002411f471b7421030340200420" - "03411d764104716a41106a22052802002202450d02200341017421032002" - "210420022802044178712001470d000b0b20022802082201200036020c20" - "022000360208200041003602182000200236020c200020013602080f0b20" - "052000360200200020043602182000200036020c200020003602080f0b20" - "0141f801714184a7c0006a2102027f418ca9c00028020022034101200141" - "037674220171450440418ca9c000200120037236020020020c010b200228" - "02080b2101200220003602082001200036020c2000200236020c20002001" - "3602080f0b41a0a9c00020003602004198a9c0004198a9c0002802002001" - "6a2201360200200020014101723602042000419ca9c000280200470d0141" - "94a9c0004100360200419ca9c00041003602000f0b419ca9c00020003602" - "004194a9c0004194a9c00028020020016a22013602002000200141017236" - "0204200020016a20013602000b0b8e0201057f230041206b220324002000" - "2802002202417f460440410020011019000b410820024101742204200241" - "016a2205200420054b1b2204200441084d1b220441004804404100200110" - "19000b20032002047f2003200236021c2003200028020436021441010541" - "000b360218200341086a2105027f0240200341146a220228020404402002" - "280208220645044041bda9c0002d00001a0c020b20022802002006410120" - "0410150c020b41bda9c0002d00001a0b200410010b210220052004360208" - "20052002410120021b360204200520024536020020032802084101460440" - "20032802101a200328020c20011019000b200328020c2102200020043602" - "0020002002360204200341206a24000b0d002000450440200110140b000b" - "f40102027f017e230041106b22022400200241013b010c20022001360208" - "20022000360204230041106b22002400200241046a220129020021042000" - "200136020c20002004370204230041106b22022400200041046a22012802" - "00220028020c2103024002400240024020002802040e020001020b20030d" - "0141012100410021030c020b20030d002000280200220028020421032000" - "28020021000c010b20024180808080783602002002200136020c20012802" - "0822012d0008210020012d00091a2002410420001033000b200220033602" - "0420022000360200200128020822012d0008210020012d00091a20024105" - "20001033000b6801017f230041306b220324002003200136020420032000" - "3602002003410236020c200341e483c00036020820034202370214200320" - "0341046aad4280808080108437032820032003ad42808080801084370320" - "2003200341206a360210200341086a2002101a000bcf06010b7f20002802" - "002102230041106b22072400410a2103024020024190ce00490440200221" - "000c010b0340200741066a20036a220441046b20024190ce006e220041f0" - "b1036c20026a220541ffff037141e4006e220641017441e881c0006a2f00" - "003b0000200441026b2006419c7f6c20056a41ffff037141017441e881c0" - "006a2f00003b0000200341046b2103200241ffc1d72f4b21042000210220" - "040d000b0b0240200041e3004d0440200021020c010b200341026b220320" - "0741066a6a200041ffff037141e4006e2202419c7f6c20006a41ffff0371" - "41017441e881c0006a2f00003b00000b02402002410a4f0440200341026b" - "2203200741066a6a200241017441e881c0006a2f00003b00000c010b2003" - "41016b2203200741066a6a20024130723a00000b027f200741066a20036a" - "210941012108410a20036b220a2001280214220241017122056a21062008" - "410020024104711b2108412b418080c40020051b21052001280200450440" - "4101200128021c22002001280220220320052008101d0d011a2000200920" - "0a200328020c1103000c010b0240024002402006200128020422004f0440" - "200128021c22002001280220220320052008101d450d0141010c040b2002" - "410871450d01200128021021022001413036021020012d0018210c410121" - "0b200141013a0018200128021c22032001280220220420052008101d0d02" - "200020066b41016a210002400340200041016b2200450d01200341302004" - "280210110200450d000b41010c040b410120032009200a200428020c1103" - "000d031a2001200c3a00182001200236021041000c030b20002009200a20" - "0328020c110300210b0c010b200020066b2102024002400240410120012d" - "0018220020004103461b220041016b0e020001020b20022100410021020c" - "010b20024101762100200241016a41017621020b200041016a2100200128" - "0210210620012802202103200128021c210402400340200041016b220045" - "0d01200420062003280210110200450d000b41010c020b4101210b200420" - "0320052008101d0d0020042009200a200328020c1103000d004100210003" - "40410020002002460d021a200041016a2100200420062003280210110200" - "450d000b200041016b2002490c010b200b0b2102200741106a240020020b" - "380002402002418080c400460d00200020022001280210110200450d0041" - "010f0b200345044041000f0b200020034100200128020c1103000bfd0a01" - "0c7f20002802042107200028020021030240024020012802002209200128" - "0208220072044002402000410171450d00200320076a2106024020012802" - "0c2205450440200321020c010b200321020340200222002006460d02027f" - "200041016a20002c0000220241004e0d001a200041026a20024160490d00" - "1a200041036a20024170490d001a200041046a0b220220006b20046a2104" - "2005200841016a2208470d000b0b20022006460d0020022c00001a200420" - "07027f02402004450d00200420074f044020042007460d0141000c020b20" - "0320046a2c000041404e0d0041000c010b20030b22001b21072000200320" - "001b21030b2009450440200128021c20032007200128022028020c110300" - "0f0b2001280204210c200741104f044020072003200341036a417c712204" - "6b22086a220a41037121094100210541002100200320044704402008417c" - "4d04404100210603402000200320066a22022c000041bf7f4a6a20024101" - "6a2c000041bf7f4a6a200241026a2c000041bf7f4a6a200241036a2c0000" - "41bf7f4a6a2100200641046a22060d000b0b200321020340200020022c00" - "0041bf7f4a6a2100200241016a2102200841016a22080d000b0b02402009" - "450d002004200a417c716a22022c000041bf7f4a210520094101460d0020" - "0520022c000141bf7f4a6a210520094102460d00200520022c000241bf7f" - "4a6a21050b200a4102762106200020056a21050340200421092006450d04" - "41c0012006200641c0014f1b220a410371210b200a410274210d41002102" - "200641044f04402004200d41f007716a2108200421000340200028020c22" - "04417f7341077620044106767241818284087120002802082204417f7341" - "077620044106767241818284087120002802042204417f73410776200441" - "06767241818284087120002802002204417f734107762004410676724181" - "8284087120026a6a6a6a2102200041106a22002008470d000b0b2006200a" - "6b21062009200d6a2104200241087641ff81fc0771200241ff81fc07716a" - "418180046c41107620056a2105200b450d000b2009200a41fc0171410274" - "6a22022802002200417f734107762000410676724181828408712100200b" - "4101460d0220022802042204417f73410776200441067672418182840871" - "20006a2100200b4102460d0220022802082202417f734107762002410676" - "7241818284087120006a21000c020b2007450440410021050c030b200741" - "03712102027f200741044904404100210041000c010b20032c000041bf7f" - "4a20032c000141bf7f4a6a20032c000241bf7f4a6a20032c000341bf7f4a" - "6a22052007410c7122004104460d001a200520032c000441bf7f4a6a2003" - "2c000541bf7f4a6a20032c000641bf7f4a6a20032c000741bf7f4a6a2205" - "20004108460d001a200520032c000841bf7f4a6a20032c000941bf7f4a6a" - "20032c000a41bf7f4a6a20032c000b41bf7f4a6a0b21052002450d022000" - "20036a21000340200520002c000041bf7f4a6a2105200041016a21002002" - "41016b22020d000b0c020b200128021c20032007200128022028020c1103" - "000f0b200041087641ff811c71200041ff81fc07716a418180046c411076" - "20056a21050b02402005200c490440200c20056b21060240024002402001" - "2d00182200410020004103471b220041016b0e020001020b200621004100" - "21060c010b20064101762100200641016a41017621060b200041016a2100" - "2001280210210820012802202102200128021c21040340200041016b2200" - "450d02200420082002280210110200450d000b41010f0b200128021c2003" - "2007200128022028020c1103000f0b200420032007200228020c11030004" - "4041010f0b4100210003402000200646044041000f0b200041016a210020" - "0420082002280210110200450d000b200041016b2006490b140020002802" - "002001200028020428020c1102000b0e0041e480c000412b20001011000b" - "5901017f230041306b220324002003200136020c20032000360208200341" - "01360214200341dc80c0003602102003420137021c2003200341086aad42" - "8080808030843703282003200341286a360218200341106a2002101a000b" - "7f01017f027f0240027f0240200228020404402002280208220345044020" - "01450d0441bda9c0002d00001a0c020b200228020020034104200110150c" - "020b2001450d0241bda9c0002d00001a0b200110010b2202410420021b21" - "032002450c010b4104210341000b21022000200136020820002003360204" - "200020023602000bdd0101087f230041206b220224002000280200220341" - "7f460440410020011019000b20034101742204200341016a220620042006" - "4b1b220441ffffffff034b0440410020011019000b024041042004200441" - "044d1b2207410274220641fcffffff074d047f4100210420022003047f20" - "02200341027436021c2002200028020436021441040520040b3602182002" - "41086a2006200241146a102220022802084101470d012002280210210520" - "0228020c0520050b210820052109200820011019000b200228020c210320" - "00200736020020002003360204200241206a24000bd10d021c7f077e2300" - "41206b220c2400200341016b211102400240024002402003044020034102" - "6b210520034101460d0402402001280208221420036b221941016a220e41" - "ffffffff034b0d00200e410274220441fdffffff074f0d00200220114102" - "746a2802002115200220054102746a3502002123027f2004450440410421" - "0b41000c010b41bda9c0002d00001a20041001220b450d05200b41046b2d" - "00004103710440200b2004104b1a0b200e0b21102001280200211a201421" - "09200e044020012802042212200941027420034102746b6a211320034101" - "7121162003417e71210d201241086b211b201241046b211c42002015ad22" - "2242208622247d2125200e210f0340024020090440201c20094102742204" - "6a22050d010b41ec87c0001020000b027f0240200941024f044020052802" - "0021052004201b6a350200212120082015490d012005ad2008ad7c212041" - "7f0c020b417f417e20141b410141fc87c0001010000b2005ad2008ad4220" - "868422202020202280222620227e7d21202026a70b21070240202042ffff" - "ffff0f560d00202520204220867c20217c21210340202120247c22212007" - "ad20237e5a0d01200741016b2107202020227c2220428080808010540d00" - "0b0b02400240024002402009200f41016b220f4f0440200f410274211720" - "09200f460d04201220176a21182007ad212102400240201145044042ffff" - "ffff0f2120410021060c010b4100210642ffffffff0f2120201321042002" - "210503402004202020043502007c202120053502007e7d42ffffffff1f7d" - "22203e0200200441046a220a200a35020020204220887c2021200541046a" - "3502007e7d42ffffffff1f7d22203e020020204220882120200441086a21" - "04200541086a2105200d200641026a2206470d000b2016450d010b201820" - "0641027422046a2205202020053502007c2021200220046a3502007e7d42" - "ffffffff1f7d22203e0200202042208821200b20082020a7417f734f0d04" - "20114504404100210a410021080c030b41002104410021084100210a0340" - "200420136a22052005280200221d200220046a221e2802006a220620086a" - "2208360200200541046a22052005280200221f201e41046a2802006a2205" - "2006201d49200620084b726a22063602002005201f49200520064b722108" - "200441086a2104200d200a41026a220a470d000b0c010b200f2009418c88" - "c000101b000b2016450d010b2018200a41027422046a2205200528020020" - "0220046a2802006a20086a3602000b200741016b21070b200b20176a2007" - "3602002001200941016b2209360208201341046b2113201220094102746a" - "2802002108200f0d000b0b2009201a460440200141dc87c00010230b2001" - "200941016a220d3602082001280204220a200941027422046a2008360200" - "20080d03200d41ffffffff0371210702400340200721052004417c460d01" - "200541016b21072004200a6a2106200441046b21042006280200450d000b" - "2005200d4b0d040c030b410021050c020b41cc87c0001014000b20114100" - "41ac87c0001010000b200120053602082005210d0b024002400240024002" - "40200d200128020022044102764f0d002004200d490d012004450d002004" - "41027421040240200d450440200a41046b28020022054178712207410441" - "08200541037122051b20046a490d04200541002007200441276a4b1b0d05" - "200a1004410421040c010b200a20044104200d41027410152204450d060b" - "2001200d360200200120043602040b41002106200e450d03200b200e4102" - "746a41046b2802000440200e21060c040b201441027420034102746b2104" - "201941026a210503402004417c460d04200541016b21052004200b6a2107" - "200441046b21042007280200450d000b200e20052005200e4b1b21060c03" - "0b200c4100360218200c410136020c200c41ec84c000360208200c420437" - "0210200c41086a41f484c000101a000b41f996c000412e41a897c0001011" - "000b41b897c000412e41e897c0001011000b024002400240024020104102" - "7620064d0440201021040c010b200620104b0d01410021042010450d0020" - "1041027421052006450440200b41046b2802002207417871220a41044108" - "200741037122071b20056a490d0320074100200a200541276a4b1b0d0420" - "0b10044104210b0c010b200b20054104200622044102741015220b450d04" - "0b200020063602082000200b360204200020043602002000200129020037" - "020c200041146a200141086a280200360200200c41206a24000f0b200c41" - "00360218200c410136020c200c41ec84c000360208200c4204370210200c" - "41086a41f484c000101a000b41f996c000412e41a897c0001011000b41b8" - "97c000412e41e897c00010110b000b2005410141bc87c0001010000be609" - "010c7f230041306b220724002001280200210c0240024002400240024002" - "400240024002400240024002400240024020024504402001280204210b20" - "0c418080808078470d02200b41086a280200220441ffffffff034d044020" - "04410274220641fdffffff07490d020b41a89cc0001014000b2001280204" - "220b2001200c418080808078461b2208280208220941feffffff014f0d04" - "41bda9c0002d00001a200941026a220141027410012205450d0720054100" - "360200200720053602102007200136020c41012101200741013602142008" - "2802082206410274210d200828020421082006200941016a4b0440200741" - "0c6a2105230041206b22042400024002402006417f460d00200528020022" - "09410174220a200641016a22012001200a491b220141ffffffff034b0d00" - "41042001200141044d1b220f410274220a41fcffffff074b0d0020042009" - "047f2004200941027436021c2004200528020436021441040541000b3602" - "18200441086a200a200441146a102220042802084101470d012004280210" - "1a200428020c210e0b200e41c096c0001019000b200428020c2101200520" - "0f36020020052001360204200441206a2400200728021021052007280214" - "21010b200520014102746a2008200d104c1a2007200120066a2204360214" - "0c030b200b41046a28020021092006450440410421054100210141042009" - "2006104c1a0c020b41bda9c0002d00001a20042101200610012205450d06" - "200520092006104c1a0c010b20012802082104200c2101200b21050b2007" - "2004360214200720053602102007200136020c0b200341ff0171450d0202" - "40200220044d044020022004470d01200221040c040b2002410041c889c0" - "00101b000b20044102742109200241027421012003411f71210841002003" - "6b411f71210d410021030340200120056a22062006280200220620087420" - "03723602002006200d7621032009200141046a2201470d000b0c010b41a8" - "89c00010140c020b2003450d00200728020c20044604402007410c6a41b8" - "89c0001023200728021021050b200520044102746a200336020020072004" - "41016a22043602140b41002108200728020c210a02402004450d00200520" - "0441027422016a41046b2802000440200421080c010b200541046b210d20" - "0441ffffffff037121030340200321062001450d01200641016b21032001" - "200d6a2109200141046b21012009280200450d000b200420062004200649" - "1b21080b0240200a41027620084d0440200a21010c010b2008200a4b0d02" - "41002101200a450d00200a41027421032008450440200541046b28020022" - "06417871220941044108200641037122061b20036a490d04200641002009" - "200341276a4b1b0d0520051004410421050c010b20052003410420082201" - "41027410152205450d010b20002008360208200020053602042000200136" - "02002002450d06200c41808080807872418080808078460d06200b41046b" - "28020022014178712203200c410274220641044108200141037122011b6a" - "490d04200141002003200641276a4b1b0d05200b10040c060b000b200741" - "003602282007410136021c200741ec84c000360218200742043702202007" - "41186a41f484c000101a000b41f996c000412e41a897c0001011000b41b8" - "97c000412e41e897c0001011000b41f996c000412e41a897c0001011000b" - "41b897c000412e41e897c0001011000b200741306a24000bc60201027f41" - "bda9c0002d00001a024002400240412010012202450d0020022001290000" - "370200200220012900083702082002200129001037021020022001280018" - "3602182002200128001c220336021c410821012000027f410820030d001a" - "41082002411c6a2802000d001a4107200241186a2802000d001a41062002" - "41146a2802000d001a4105200241106a2802000d001a41042002410c6a28" - "02000d001a4103200241086a2802000d001a4102200241046a2802000d00" - "1a2002280200450440200241046b28020022014178714124412820014103" - "7122031b490d0320034100200141c8004f1b0d0420021004410421024100" - "210141000c010b200241204104410410152202450d014101210141010b36" - "020820002002360204200020013602000f0b000b41f996c000412e41a897" - "c0001011000b41b897c000412e41e897c0001011000bcc3e01227f200120" - "024106746a2124200028021c21222000280218211f2000280214211e2000" - "280210211b200028020c2123200028020821202000280204211d20002802" - "002102034020022001280000220341187420034180fe0371410874722003" - "4108764180fe03712003411876727222152022201b411a77201b41157773" - "201b410777736a201e201f73201b71201f736a6a4198dfa894046a220420" - "1d202073200271201d202071732002411e772002411377732002410a7773" - "6a6a2203411e772003411377732003410a777320032002201d7371200220" - "1d71736a201f2001280004220541187420054180fe037141087472200541" - "08764180fe03712005411876727222136a200420236a2207201b201e7371" - "201e736a2007411a772007411577732007410777736a419189dd89076a22" - "066a2205411e772005411377732005410a77732005200220037371200220" - "0371736a201e2001280008220441187420044180fe037141087472200441" - "08764180fe03712004411876727222146a200620206a220c2007201b7371" - "201b736a200c411a77200c41157773200c410777736a41b188fcd1046b22" - "0d6a2204411e772004411377732004410a77732004200320057371200320" - "0571736a201b200128000c220641187420064180fe037141087472200641" - "08764180fe03712006411876727222116a200d201d6a220d2007200c7371" - "2007736a200d411a77200d41157773200d410777736a41dbc8a8b2016b22" - "086a2206411e772006411377732006410a77732006200420057371200420" - "0571736a20072001280010220f411874200f4180fe037141087472200f41" - "08764180fe0371200f411876727222166a200220086a220f200c200d7371" - "200c736a200f411a77200f41157773200f410777736a41db84dbca036a22" - "096a2207411e772007411377732007410a77732007200420067371200420" - "0671736a2001280014220841187420084180fe0371410874722008410876" - "4180fe0371200841187672722218200c6a200320096a220c200d200f7371" - "200d736a200c411a77200c41157773200c410777736a41f1a3c4cf056a22" - "096a2203411e772003411377732003410a77732003200620077371200620" - "0771736a2001280018220841187420084180fe0371410874722008410876" - "4180fe0371200841187672722219200d6a200520096a220d200c200f7371" - "200f736a200d411a77200d41157773200d410777736a41dcfa81ee066b22" - "096a2205411e772005411377732005410a77732005200320077371200320" - "0771736a200128001c220841187420084180fe0371410874722008410876" - "4180fe037120084118767272221a200f6a200420096a220f200c200d7371" - "200c736a200f411a77200f41157773200f410777736a41abc28ea7056b22" - "096a2204411e772004411377732004410a77732004200320057371200320" - "0571736a2001280020220841187420084180fe0371410874722008410876" - "4180fe0371200841187672722202200c6a200620096a220c200d200f7371" - "200d736a200c411a77200c41157773200c410777736a41e8aae1bf026b22" - "096a2206411e772006411377732006410a77732006200420057371200420" - "0571736a2001280024220841187420084180fe0371410874722008410876" - "4180fe037120084118767272220a200d6a200720096a220d200c200f7371" - "200f736a200d411a77200d41157773200d410777736a4181b68d94016a22" - "096a2207411e772007411377732007410a77732007200420067371200420" - "0671736a2001280028220841187420084180fe0371410874722008410876" - "4180fe037120084118767272220b200f6a200320096a220f200c200d7371" - "200c736a200f411a77200f41157773200f410777736a41be8bc6a1026a22" - "096a2203411e772003411377732003410a77732003200620077371200620" - "0771736a200128002c220841187420084180fe0371410874722008410876" - "4180fe0371200841187672722210200c6a200520096a2208200d200f7371" - "200d736a2008411a772008411577732008410777736a41c3fbb1a8056a22" - "096a2205411e772005411377732005410a77732005200320077371200320" - "0771736a2001280030220c411874200c4180fe037141087472200c410876" - "4180fe0371200c4118767272221c200d6a200420096a22092008200f7371" - "200f736a2009411a772009411577732009410777736a41f4baf995076a22" - "0d6a2204411e772004411377732004410a77732004200320057371200320" - "0571736a2001280034220c411874200c4180fe037141087472200c410876" - "4180fe0371200c41187672722221200f6a2006200d6a220e200820097371" - "2008736a200e411a77200e41157773200e410777736a41829c85f9076b22" - "0d6a2206411e772006411377732006410a77732006200420057371200420" - "0571736a2001280038220c411874200c4180fe037141087472200c410876" - "4180fe0371200c4118767272220c20086a2007200d6a22122009200e7371" - "2009736a2012411a772012411577732012410777736a41d9f28fa1066b22" - "0f6a2207411e772007411377732007410a77732007200420067371200420" - "0671736a200128003c220d411874200d4180fe037141087472200d410876" - "4180fe0371200d4118767272220d20096a2003200f6a2217200e20127371" - "200e736a2017411a772017411577732017410777736a418c9d90f3036b22" - "086a2203411e772003411377732003410a77732003200620077371200620" - "0771736a20134119772013410e777320134103767320156a200a6a200c41" - "0f77200c410d7773200c410a76736a220f200e6a200520086a2215201220" - "1773712012736a2015411a772015411577732015410777736a41bfac92db" - "016b22096a2205411e772005411377732005410a77732005200320077371" - "2003200771736a20144119772014410e777320144103767320136a200b6a" - "200d410f77200d410d7773200d410a76736a220820126a200420096a2213" - "2015201773712017736a2013411a772013411577732013410777736a41fa" - "f08682016b220e6a2204411e772004411377732004410a77732004200320" - "0573712003200571736a20114119772011410e777320114103767320146a" - "20106a200f410f77200f410d7773200f410a76736a220920176a2006200e" - "6a22142013201573712015736a2014411a77201441157773201441077773" - "6a41c6bb86fe006a22126a2206411e772006411377732006410a77732006" - "2004200573712004200571736a20164119772016410e7773201641037673" - "20116a201c6a2008410f772008410d77732008410a76736a220e20156a20" - "0720126a22112013201473712013736a2011411a77201141157773201141" - "0777736a41ccc3b2a0026a22176a2207411e772007411377732007410a77" - "7320072004200673712004200671736a20184119772018410e7773201841" - "03767320166a20216a2009410f772009410d77732009410a76736a221220" - "136a200320176a22162011201473712014736a2016411a77201641157773" - "2016410777736a41efd8a4ef026a22156a2203411e772003411377732003" - "410a777320032006200773712006200771736a20194119772019410e7773" - "20194103767320186a200c6a200e410f77200e410d7773200e410a76736a" - "221720146a200520156a22182011201673712011736a2018411a77201841" - "1577732018410777736a41aa89d2d3046a22136a2205411e772005411377" - "732005410a777320052003200773712003200771736a201a411977201a41" - "0e7773201a4103767320196a200d6a2012410f772012410d77732012410a" - "76736a221520116a200420136a22192016201873712016736a2019411a77" - "2019411577732019410777736a41dcd3c2e5056a22146a2204411e772004" - "411377732004410a777320042003200573712003200571736a2002411977" - "2002410e7773200241037673201a6a200f6a2017410f772017410d777320" - "17410a76736a221320166a200620146a221a2018201973712018736a201a" - "411a77201a41157773201a410777736a41da91e6b7076a22116a2206411e" - "772006411377732006410a777320062004200573712004200571736a200a" - "411977200a410e7773200a4103767320026a20086a2015410f772015410d" - "77732015410a76736a221420186a200720116a22022019201a7371201973" - "6a2002411a772002411577732002410777736a41aedd86be066b22166a22" - "07411e772007411377732007410a77732007200420067371200420067173" - "6a200b411977200b410e7773200b41037673200a6a20096a2013410f7720" - "13410d77732013410a76736a221120196a200320166a220a2002201a7371" - "201a736a200a411a77200a41157773200a410777736a4193f3b8be056b22" - "186a2203411e772003411377732003410a77732003200620077371200620" - "0771736a20104119772010410e7773201041037673200b6a200e6a201441" - "0f772014410d77732014410a76736a2216201a6a200520186a220b200220" - "0a73712002736a200b411a77200b41157773200b410777736a41b8b0f3ff" - "046b22196a2205411e772005411377732005410a77732005200320077371" - "2003200771736a201c411977201c410e7773201c4103767320106a20126a" - "2011410f772011410d77732011410a76736a221820026a200420196a2202" - "200a200b7371200a736a2002411a772002411577732002410777736a41b9" - "809a85046b221a6a2204411e772004411377732004410a77732004200320" - "0573712003200571736a20214119772021410e7773202141037673201c6a" - "20176a2016410f772016410d77732016410a76736a2219200a6a2006201a" - "6a220a2002200b7371200b736a200a411a77200a41157773200a41077773" - "6a418de8ffc8036b22106a2206411e772006411377732006410a77732006" - "2004200573712004200571736a200c411977200c410e7773200c41037673" - "20216a20156a2018410f772018410d77732018410a76736a221a200b6a20" - "0720106a220b2002200a73712002736a200b411a77200b41157773200b41" - "0777736a41b9dde1d2026b22106a2207411e772007411377732007410a77" - "7320072004200673712004200671736a200d411977200d410e7773200d41" - "037673200c6a20136a2019410f772019410d77732019410a76736a220c20" - "026a200320106a2202200a200b7371200a736a2002411a77200241157773" - "2002410777736a41d1c6a9366a22106a2203411e77200341137773200341" - "0a777320032006200773712006200771736a200f411977200f410e777320" - "0f41037673200d6a20146a201a410f77201a410d7773201a410a76736a22" - "0d200a6a200520106a220a2002200b7371200b736a200a411a77200a4115" - "7773200a410777736a41e7d2a4a1016a22106a2205411e77200541137773" - "2005410a777320052003200773712003200771736a20084119772008410e" - "7773200841037673200f6a20116a200c410f77200c410d7773200c410a76" - "736a220f200b6a200420106a220b2002200a73712002736a200b411a7720" - "0b41157773200b410777736a418595dcbd026a22106a2204411e77200441" - "1377732004410a777320042003200573712003200571736a200941197720" - "09410e777320094103767320086a20166a200d410f77200d410d7773200d" - "410a76736a220820026a200620106a2202200a200b7371200a736a200241" - "1a772002411577732002410777736a41b8c2ecf0026a22106a2206411e77" - "2006411377732006410a777320062004200573712004200571736a200e41" - "1977200e410e7773200e4103767320096a20186a200f410f77200f410d77" - "73200f410a76736a2209200a6a200720106a220a2002200b7371200b736a" - "200a411a77200a41157773200a410777736a41fcdbb1e9046a22106a2207" - "411e772007411377732007410a777320072004200673712004200671736a" - "20124119772012410e7773201241037673200e6a20196a2008410f772008" - "410d77732008410a76736a220e200b6a200320106a220b2002200a737120" - "02736a200b411a77200b41157773200b410777736a41939ae099056a2210" - "6a2203411e772003411377732003410a7773200320062007737120062007" - "71736a20174119772017410e777320174103767320126a201a6a2009410f" - "772009410d77732009410a76736a221220026a200520106a2202200a200b" - "7371200a736a2002411a772002411577732002410777736a41d4e6a9a806" - "6a22106a2205411e772005411377732005410a7773200520032007737120" - "03200771736a20154119772015410e777320154103767320176a200c6a20" - "0e410f77200e410d7773200e410a76736a2217200a6a200420106a220a20" - "02200b7371200b736a200a411a77200a41157773200a410777736a41bb95" - "a8b3076a22106a2204411e772004411377732004410a7773200420032005" - "73712003200571736a20134119772013410e777320134103767320156a20" - "0d6a2012410f772012410d77732012410a76736a2215200b6a200620106a" - "220b2002200a73712002736a200b411a77200b41157773200b410777736a" - "41d2edf4f1076b22106a2206411e772006411377732006410a7773200620" - "04200573712004200571736a20144119772014410e777320144103767320" - "136a200f6a2017410f772017410d77732017410a76736a221320026a2007" - "20106a2202200a200b7371200a736a2002411a7720024115777320024107" - "77736a41fba6b7ec066b22106a2207411e772007411377732007410a7773" - "20072004200673712004200671736a20114119772011410e777320114103" - "767320146a20086a2015410f772015410d77732015410a76736a2214200a" - "6a200320106a220a2002200b7371200b736a200a411a77200a4115777320" - "0a410777736a41dfae80ea056b22106a2203411e77200341137773200341" - "0a777320032006200773712006200771736a20164119772016410e777320" - "164103767320116a20096a2013410f772013410d77732013410a76736a22" - "11200b6a200520106a220b2002200a73712002736a200b411a77200b4115" - "7773200b410777736a41b5b396bf056b22106a2205411e77200541137773" - "2005410a777320052003200773712003200771736a20184119772018410e" - "777320184103767320166a200e6a2014410f772014410d77732014410a76" - "736a221620026a200420106a2202200a200b7371200a736a2002411a7720" - "02411577732002410777736a4190e9d1ed036b22106a2204411e77200441" - "1377732004410a777320042003200573712003200571736a201941197720" - "19410e777320194103767320186a20126a2011410f772011410d77732011" - "410a76736a2218200a6a200620106a220a2002200b7371200b736a200a41" - "1a77200a41157773200a410777736a41dddccec4036b22106a2206411e77" - "2006411377732006410a777320062004200573712004200571736a201a41" - "1977201a410e7773201a4103767320196a20176a2016410f772016410d77" - "732016410a76736a2219200b6a200720106a220b2002200a73712002736a" - "200b411a77200b41157773200b410777736a41e7afb4f3026b22106a2207" - "411e772007411377732007410a777320072004200673712004200671736a" - "200c411977200c410e7773200c41037673201a6a20156a2018410f772018" - "410d77732018410a76736a221a20026a200320106a2202200a200b737120" - "0a736a2002411a772002411577732002410777736a41dcf39bcb026b2210" - "6a2203411e772003411377732003410a7773200320062007737120062007" - "71736a200d411977200d410e7773200d41037673200c6a20136a2019410f" - "772019410d77732019410a76736a220c200a6a200520106a220a2002200b" - "7371200b736a200a411a77200a41157773200a410777736a41fb94c7df00" - "6b22106a2205411e772005411377732005410a7773200520032007737120" - "03200771736a200f411977200f410e7773200f41037673200d6a20146a20" - "1a410f77201a410d7773201a410a76736a220d200b6a200420106a220b20" - "02200a73712002736a200b411a77200b41157773200b410777736a41f0c0" - "aa83016a22106a2204411e772004411377732004410a7773200420032005" - "73712003200571736a20084119772008410e7773200841037673200f6a20" - "116a200c410f77200c410d7773200c410a76736a220f20026a200620106a" - "2202200a200b7371200a736a2002411a772002411577732002410777736a" - "41968293cd016a221c6a2206411e772006411377732006410a7773200620" - "04200573712004200571736a20094119772009410e777320094103767320" - "086a20166a200d410f77200d410d7773200d410a76736a2210200a6a2007" - "201c6a22082002200b7371200b736a2008411a7720084115777320084107" - "77736a4188d8ddf1016a221c6a2207411e772007411377732007410a7773" - "20072004200673712004200671736a200e411977200e410e7773200e4103" - "767320096a20186a200f410f77200f410d7773200f410a76736a220a200b" - "6a2003201c6a22092002200873712002736a2009411a7720094115777320" - "09410777736a41cceea1ba026a221c6a2203411e77200341137773200341" - "0a777320032006200773712006200771736a20124119772012410e777320" - "1241037673200e6a20196a2010410f772010410d77732010410a76736a22" - "0b20026a2005201c6a220e2008200973712008736a200e411a77200e4115" - "7773200e410777736a41b5f9c2a5036a22026a2205411e77200541137773" - "2005410a777320052003200773712003200771736a20174119772017410e" - "777320174103767320126a201a6a200a410f77200a410d7773200a410a76" - "736a221220086a200220046a22082009200e73712009736a2008411a7720" - "08411577732008410777736a41b399f0c8036a22026a2204411e77200441" - "1377732004410a777320042003200573712003200571736a201541197720" - "15410e777320154103767320176a200c6a200b410f77200b410d7773200b" - "410a76736a221720096a200220066a22092008200e7371200e736a200941" - "1a772009411577732009410777736a41cad4e2f6046a22026a2206411e77" - "2006411377732006410a777320062004200573712004200571736a201341" - "19772013410e777320134103767320156a200d6a2012410f772012410d77" - "732012410a76736a2215200e6a200220076a220e2008200973712008736a" - "200e411a77200e41157773200e410777736a41cf94f3dc056a22026a2207" - "411e772007411377732007410a777320072004200673712004200671736a" - "20144119772014410e777320144103767320136a200f6a2017410f772017" - "410d77732017410a76736a221320086a200220036a22082009200e737120" - "09736a2008411a772008411577732008410777736a41f3dfb9c1066a2202" - "6a2203411e772003411377732003410a7773200320062007737120062007" - "71736a20114119772011410e777320114103767320146a20106a2015410f" - "772015410d77732015410a76736a221420096a200220056a22092008200e" - "7371200e736a2009411a772009411577732009410777736a41ee85bea407" - "6a22026a2205411e772005411377732005410a7773200520032007737120" - "03200771736a20164119772016410e777320164103767320116a200a6a20" - "13410f772013410d77732013410a76736a2211200e6a200220046a220e20" - "08200973712008736a200e411a77200e41157773200e410777736a41efc6" - "95c5076a22026a2204411e772004411377732004410a7773200420032005" - "73712003200571736a20184119772018410e777320184103767320166a20" - "0b6a2014410f772014410d77732014410a76736a221620086a200220066a" - "22082009200e73712009736a2008411a772008411577732008410777736a" - "41ec8fded9076b22026a2206411e772006411377732006410a7773200620" - "04200573712004200571736a20194119772019410e777320194103767320" - "186a20126a2011410f772011410d77732011410a76736a221220096a2002" - "20076a22092008200e7371200e736a2009411a7720094115777320094107" - "77736a41f8fbe399076b22116a2207411e772007411377732007410a7773" - "20072004200673712004200671736a201a411977201a410e7773201a4103" - "767320196a20176a2016410f772016410d77732016410a76736a2217200e" - "6a200320116a220e2008200973712008736a200e411a77200e4115777320" - "0e410777736a41868084fa066b22116a2203411e77200341137773200341" - "0a777320032006200773712006200771736a200c411977200c410e777320" - "0c41037673201a6a20156a2012410f772012410d77732012410a76736a22" - "1220086a200520116a22052009200e73712009736a2005411a7720054115" - "77732005410777736a4195a6bedd056b22156a2208411e77200841137773" - "2008410a777320082003200773712003200771736a200c200d411977200d" - "410e7773200d410376736a20136a2017410f772017410d77732017410a76" - "736a20096a200420156a22042005200e7371200e736a2004411a77200441" - "1577732004410777736a4189b89988046b22096a220c2003200873712003" - "200871736a200c411e77200c41137773200c410a77736a200d200f411977" - "200f410e7773200f410376736a20146a2012410f772012410d7773201241" - "0a76736a200e6a200620096a22062004200573712005736a2006411a7720" - "06411577732006410777736a418e8ebacc036b220d6a2102200c201d6a21" - "1d2007201b6a200d6a211b200820206a21202006201e6a211e200320236a" - "21232004201f6a211f200520226a2122200141406b22012024470d000b20" - "00202236021c2000201f3602182000201e3602142000201b360210200020" - "2336020c200020203602082000201d360204200020023602000b89010101" - "7f027f0240200328020404402003280208220445044020012002450d031a" - "41bda9c0002d00001a20014109490d022002100b0c030b20032802002004" - "2001200210150c020b20012002450d011a41bda9c0002d00001a20014109" - "490d002002100b0c010b200210010b210320002002360208200020032001" - "20031b36020420002003453602000b3000200128021c20002d0000410274" - "220041b4a5c0006a280200200041a8a5c0006a280200200128022028020c" - "1103000bfc0402037f017e23004180016b220224000240024020012d0000" - "220441c00171220341c000470440200241186a200141186a290000370300" - "200241106a200141106a290000370300200241086a200141086a29000037" - "030020022001290000220537030020022005a7413f713a0000200241406b" - "2002102e20022d0040450d01200220022d00413a007f41a88ec000411f20" - "0241ff006a41988ec00041c88ec0001013000b02402004413f710d002001" - "2d00010d0020012d00020d0020012d00030d0020012d00040d0020012d00" - "050d0020012d00060d0020012d00070d0020012d00080d0020012d00090d" - "0020012d000a0d0020012d000b0d0020012d000c0d0020012d000d0d0020" - "012d000e0d0020012d000f0d0020012d00100d0020012d00110d0020012d" - "00120d0020012d00130d0020012d00140d0020012d00150d0020012d0016" - "0d0020012d00170d0020012d00180d0020012d00190d0020012d001a0d00" - "20012d001b0d0020012d001c0d0020012d001d0d0020012d001e0d002001" - "2d001f0d00200041c1013a0020200041033a00000c020b20004200370300" - "200041c0003a0020200041186a4200370300200041106a42003703002000" - "41086a42003703000c010b200241386a200241e8006a2903003703002002" - "41306a200241e0006a290300370300200220022903503703202002200241" - "d8006a2903003703282003044020002002290320370300200020033a0020" - "200041086a2002290328370300200041186a200241386a29030037030020" - "0041106a200241306a2903003703000c010b200241003602502002410136" - "0244200241a88cc00036024020024204370248200241406b419c8dc00010" - "1a000b20024180016a24000bf90a02057f097e23004190036b2207240020" - "00290300220c200041086a290300220d8450047e420005200741f0016a20" - "0c2001104d20074190026a200d2001104d200741e0016a200c2002104d20" - "074180026a200d2002104d200741b0016a200c2003104d200741a0016a20" - "0d2003104d200741d0016a200c2004104d200741c0016a200d2004104d20" - "072903f0012112200741c8016a290300200741a8016a290300220d200729" - "03c0017c220c200d54ad7c200c200741d8016a2903007c220d200c54ad7c" - "200d20072903d001220e20072903a0017c220c200e54ad200c2007418802" - "6a29030020074198026a290300220f2007290380027c220e200f54ad7c20" - "0e200741e8016a2903007c220f200e54ad7c200f20072903e00122102007" - "290390027c220e201054ad200e200741f8016a2903007c2213200e54ad7c" - "7c2210200f54ad7c7c2211200c54ad7c2011200741b8016a290300201020" - "072903b0017c220e201054ad7c7c220f201154ad7c7c2210200d54ad7c0b" - "21112000290310220c200041186a290300220d8450047e420005200741f0" - "006a200c2001104d20074190016a200d2001104d200741e0006a200c2002" - "104d20074180016a200d2002104d200741306a200c2003104d200741206a" - "200d2003104d200741d0006a200c2004104d200741406b200d2004104d20" - "0741c8006a290300200741286a290300220320072903407c2204200354ad" - "7c2004200741d8006a2903007c2203200454ad7c20032007290350220220" - "117c2204200254ad200420072903207c2202200454ad7c20022007418801" - "6a29030020074198016a29030022012007290380017c2204200154ad7c20" - "04200741e8006a2903007c2201200454ad7c20012007290360220c200f7c" - "2204200c54ad20042007290390017c220c200454ad7c200c200741f8006a" - "29030020072903702204200e7c220e200454ad7c7c220f200c54ad7c7c22" - "0c200154ad7c7c2204200254ad7c2004200741386a290300200729033022" - "0120107c2202200154ad7c2002200c7c2210200254ad7c7c2211200454ad" - "7c7c2214200354ad7c0b2104200720143703d002200720103703c0022007" - "200e3703b002200720123703a002200720043703d802200720113703c802" - "2007200f3703b802200720133703a80220074188036a4200370300200741" - "80036a4200370300200741f8026a4200370300200742003703f002200741" - "f0026a210a41ff032109420021034200210442002101420021024201210d" - "0340200741106a2009410776410474220b200741a0026a6a220829030020" - "08290308200941ff00712208104e2004423f88210c20044201862003423f" - "888421042007290310420183200342018684210302400240024002400240" - "200c200142018684220c42ddb0858ce8b691a8b87f852002420186200142" - "3f8884220242a9c0c689aece93b230858450044020032005542004200654" - "20042006511b450d0142ddb0858ce8b691a8b87f210142a9c0c689aece93" - "b23021020c020b200c42ddb0858ce8b691a8b87f58200242a9c0c689aece" - "93b23058200242a9c0c689aece93b230511b450d00200c21010c010b2002" - "42a9c0c689aece93b2307d200c42a3cffaf397c9eed7c7007c2202200420" - "0654ad200420067d22042003200554ad220f54ad7c7d220142017c221020" - "0254ad200c42ddb0858ce8b691a8b87f54ad7d2010420052ad7c50ad7d21" - "022004200f7d2104200320057d2103200941016a41810249200d42005271" - "0d014200210d0b2009450d010c020b4201210d20072008104f200a200b6a" - "22082008290300200729030084370300200841086a220820082903002007" - "41086a2903008437030020090d010b200020023703182000200137031020" - "0020043703082000200337030020074190036a24000f0b200941016b2109" - "0c000b000beb0101017f41e0a9c00041e0a9c0002d00002200410120001b" - "3a00000240200004400340024002400240200041016b0e03000501020b03" - "4041e0a9c0002d000022004101460d000b02400240200041016b0e030006" - "01030b000b41a49bc000412641cc9bc0001011000b41a89ac000410d4194" - "9bc0001011000b41e0a9c00041e0a9c0002d00002200410120001b3a0000" - "20000d000b0b41d8a9c00042a9c0c689aece93b23037030041d0a9c00042" - "ddb0858ce8b691a8b87f37030041c8a9c000428d95c7c396d2dac0977f37" - "030041c0a9c00042c7faf3c3ed82a3903c37030041e0a9c00041023a0000" - "0b0b840202047e017f200041086a29030021092000290300210a0240417f" - "2000290310220b200385200041186a290300220c20048584420052200320" - "0b562004200c562004200c511b1b220d417f470440200d41ff01710d0120" - "01200a58200220095820022009511b0d010b20072007200b7c220756ad20" - "07200620097c220b200654ad200b2005200a7c220a200554ad7c2209200b" - "54ad7c7c220b200754ad7c2008200c7c7c210c0b2000200a20017d370300" - "2000200920027d22072001200a56ad22017d37030820002003427f852203" - "200b7c220a2002200956ad2001200756ad7c7d42017c2209370310200020" - "0c20047d2003200a56ad2009200a54ad7c50ad7d3703180bbe3c020e7f04" - "7e23004180016b2203240041bda9c0002d00001a0240412010012202450d" - "00200242a9c0c689aece93b230370018200242ddb0858ce8b691a8b87f37" - "00102002428d95c7c396d2dac0977f370008200242c7faf3c3ed82a3903c" - "3700002003200210262000027f0240024002400240024002400240024002" - "40024002400240024002400240027f024002400240024002400240024002" - "7f02400240027f0240024002400240024002400240024002400240024002" - "400240024002400240024002400240200241046b28020022044178714124" - "4128200441037122051b4f044020054100200441c8004f1b0d0120021004" - "41bda9c0002d00001a412010012202450d30200241186a2204200141186a" - "290000370000200220012900002210370000200241106a2205200141106a" - "290000370000200241086a2208200141086a29000037000020022002411f" - "6a22012d00003a0000200120103c000020022d0001210120022002411e6a" - "22072d00003a0001200720013a00002002411d6a22012d00002107200120" - "022d00023a0000200220073a00022002411c6a22012d0000210720012002" - "2d00033a0000200220073a00032002411b6a22012d00002107200120022d" - "00043a0000200220073a00042002411a6a22012d00002107200120022d00" - "053a0000200220073a0005200241196a22012d00002107200120022d0006" - "3a0000200220073a000620042d00002101200420022d00073a0000200220" - "013a0007200241176a22012d00002104200120082d00003a000020082004" - "3a0000200241166a22012d00002104200120022d00093a0000200220043a" - "0009200241156a22012d00002104200120022d000a3a0000200220043a00" - "0a200241146a22012d00002104200120022d000b3a0000200220043a000b" - "200241136a22012d00002104200120022d000c3a0000200220043a000c20" - "0241126a22012d00002104200120022d000d3a0000200220043a000d2002" - "41116a22012d00002104200120022d000e3a0000200220043a000e20052d" - "00002101200520022d000f3a0000200220013a000f2003410c6a20021026" - "200241046b280200220141787141244128200141037122041b490d022004" - "4100200141c8004f1b0d032002100420032802082202450d120240024002" - "40200241016b220241feffffff0371450440200241ffffffff0371220441" - "016a2205410371210142002110200328020422082102200441034f044020" - "0541fcffffff07712104034020104280017c2110200241106a2102200441" - "046b22040d000b0b2001450d020340200235020020108620117c21112010" - "42207c2110200241046a2102200141016b22010d000b2011428080808010" - "540d010b200341406b200341146a2802003602002003200329020c370338" - "200341d0006a200341086a28020022043602002003200329020037034820" - "04450d0720032802402207450440200341206a418098c000280200220236" - "02002003412c6a2002360200200341f897c0002902002210370318200320" - "10370224200328024822020440200328024c220441046b28020022014178" - "7122052002410274220241044108200141037122011b6a490d0a20014100" - "2005200241276a4b1b0d0b200410040b20032802382202450d2520032802" - "3c220441046b280200220141787122052002410274220241044108200141" - "037122011b6a490d0b200141002005200241276a4b1b0d0c200410040c25" - "0b0240027f02400240024020044101460440200328024c220c2802002202" - "4101470d012003412c6a418098c000280200360200200341206a20034114" - "6a2802003602002003200329020c370318200341f897c000290200370224" - "20032802482202450d2a200c41046b280200220141787122042002410274" - "220241044108200141037122011b6a490d12200141002004200241276a4b" - "1b0d13200c10040c2a0b200328024c210c200328023c210b0240417f2004" - "200747200420074b1b22050d0020074102742102200b41046b2106200441" - "02742101200c41046b2109200420076b21070340200204402001450d0720" - "0220066a2105200120096a2108200241046b2102200141046b2101417f20" - "082802002208200528020022054720052008491b2205450d010c020b0b41" - "7f4100200741ffffffff03711b21050b200541ff01710e020204010b2002" - "450d1220074102742101200328023c2109200241ffff034d044020094104" - "6b2106410021040340200120066a22052005280200220541107622082008" - "20044110747220026e220420026c6b411074200541ffff03717222052002" - "6e22082004411074723602002005200220086c6b2104200141046b22010d" - "000b0c280b2002ad2110200741ffffffff036a220541ffffffff03712202" - "45044042002111200120096a0c270b200241016a41feffffff0771210120" - "0741027420096a41086b2102420021110340200241046a22042004350200" - "201142208684221120108022123e0200200220023502002011201020127e" - "7d42208684221120108022123e02002011201020127e7d2111200241086b" - "2102200141026b22010d000b0c250b2003412c6a200341146a2802003602" - "002003200329020c370224200341186a0c010b2003410036024020032802" - "38047f200b05200341386a418c87c0001023200328023c0b410136020020" - "0341406b4101360200200341206a41013602002003200329033837031820" - "0341246a0b220241086a418098c000280200360200200241f897c0002902" - "0037020020032802482202450d25200c41046b2802002201417871220420" - "02410274220241044108200141037122011b6a490d102001410020042002" - "41276a4b1b0d11200c10040c250b200c20044102746a41046b2202450d20" - "20022802002202672208450440200341f8006a200341146a280200360200" - "2003200329020c370370200341186a200341f0006a200c20041024200328" - "02482202450d25200c41046b280200220141787122042002410274220241" - "044108200141037122011b6a490d12200141002004200241276a4b1b0d13" - "200c10040c250b024002402003280238418080808078470d00200b280208" - "0d002003410036026c20034280808080c0003702640c010b200341e4006a" - "2003410c6a2002452008411f7110250b200341186a200341e4006a027f02" - "402003280248418080808078470d00200c2802080d004100210420034100" - "3602704100210541040c010b200341f0006a20032002452008411f711025" - "200328027021042003280278210520032802740b220120051024200341e0" - "006a200341206a28020036020020032003290218370358200328022c2105" - "200328022821092003280224210c20040440200141046b28020022074178" - "7122062004410274220441044108200741037122071b6a490d1420074100" - "2006200441276a4b1b0d15200110040b02400240200c4180808080784604" - "404100210120092802080d0141042105410021040c220b41002101200545" - "0d20200520024522044d0d20200520046b210b20020d0102400240200b41" - "0274220a20092206200620044102746a22056b4b04402005200a6a210120" - "06200a6a2106200a4110490d0141002006410371220d6b210e0240200641" - "7c71220220064f0d00200d41016b210f0240200d450440200121040c010b" - "200d2107200121040340200641016b2206200441016b22042d00003a0000" - "200741016b22070d000b0b200f4103490d00200441046b21040340200641" - "016b200441036a2d00003a0000200641026b200441026a2d00003a000020" - "0641036b200441016a2d00003a0000200641046b220620042d00003a0000" - "200441046b210420022006490d000b0b2002200a200d6b2204417c71220a" - "6b21064100200a6b210702402001200e6a2201410371450440200220064d" - "0d01200420056a41046b21050340200241046b2202200528020036020020" - "0541046b2105200220064b0d000b0c010b200220064d0d00200141037422" - "0a411871210d2001417c71220f41046b21054100200a6b411871210e200f" - "280200210a0340200241046b2202200a200e742005280200220a200d7672" - "360200200541046b2105200220064b0d000b0b2004410371210a20012007" - "6a21010c010b200a41104f044002402006410020066b41037122076a2204" - "20064d0d00200741016b210d200521022007044020072101034020062002" - "2d00003a0000200241016a2102200641016a2106200141016b22010d000b" - "0b200d4107490d000340200620022d00003a0000200641016a200241016a" - "2d00003a0000200641026a200241026a2d00003a0000200641036a200241" - "036a2d00003a0000200641046a200241046a2d00003a0000200641056a20" - "0241056a2d00003a0000200641066a200241066a2d00003a000020064107" - "6a200241076a2d00003a0000200241086a2102200641086a22062004470d" - "000b0b2004200a20076b2201417c71220d6a21060240200520076a220241" - "0371450440200420064f0d01200221050340200420052802003602002005" - "41046a2105200441046a22042006490d000b0c010b200420064f0d002002" - "410374220a41187121072002417c71220f41046a21054100200a6b411871" - "210e200f280200210a03402004200a2007762005280200220a200e747236" - "0200200541046a2105200441046a22042006490d000b0b2001410371210a" - "2002200d6a21050b20062006200a6a22044f0d01200a41016b2101200a41" - "0771220204400340200620052d00003a0000200541016a2105200641016a" - "2106200241016b22020d000b0b20014107490d010340200620052d00003a" - "0000200641016a200541016a2d00003a0000200641026a200541026a2d00" - "003a0000200641036a200541036a2d00003a0000200641046a200541046a" - "2d00003a0000200641056a200541056a2d00003a0000200641066a200541" - "066a2d00003a0000200641076a200541076a2d00003a0000200541086a21" - "05200641086a22062004470d000b0c010b2006200a6b220220064f0d0020" - "0a41016b2104200a410371220504400340200641016b2206200141016b22" - "012d00003a0000200541016b22050d000b0b20044103490d00200141046b" - "21050340200641016b200541036a2d00003a0000200641026b200541026a" - "2d00003a0000200641036b200541016a2d00003a0000200641046b220620" - "052d00003a0000200541046b210520022006490d000b0b0c010b41042105" - "200941046a28020021072009280208220420024522024d04402004410274" - "21022004044041bda9c0002d00001a200210012205450d360b2005200720" - "02104c1a0c210b41bda9c0002d00001a200420026b220b41027422011001" - "2209450d342009200720024102746a2001104c1a200b210c0b2008411f71" - "2201450d1c200b450440410021010c1e0b41002105410020086b411f7121" - "042009200b4102746a2102200b41016b41ffffffff0371220741016a2206" - "410371210820074103490d1b200641fcffffff077121070340200241046b" - "220620062802002206200176200572360200200241086b22052006200474" - "20052802002205200176723602002002410c6b2206200520047420062802" - "00220620017672360200200241106b220220062004742002280200220520" - "01767236020020052004742105200741046b22070d000b0c1b0b2011500d" - "14200328021421022003280210210502402011428080045a04402002450d" - "0320024102742104200241ffffffff036a220741ffffffff037122020d01" - "42002110200420056a0c180b2002450d022011a721040c180b200241016a" - "41feffffff07712101200420056a41086b21024200211003402002350200" - "200241046a35020020104220868420118242208684201182211020024108" - "6b2102200141026b22010d000b0c150b2003280210210520032802142202" - "0d160b410421074100210241000c170b41f996c000412e41a897c0001011" - "000b41b897c000412e41e897c0001011000b41f996c000412e41a897c000" - "1011000b41b897c000412e41e897c0001011000b20034100360228200341" - "0136021c200341a099c00036021820034204370220200341186a41fc86c0" - "00101a000b41f996c000412e41a897c0001011000b41b897c000412e41e8" - "97c0001011000b41f996c000412e41a897c0001011000b41b897c000412e" - "41e897c0001011000b41f996c000412e41a897c0001011000b41b897c000" - "412e41e897c0001011000b200341003602282003410136021c200341a099" - "c00036021820034204370220200341186a41ec86c000101a000b41f996c0" - "00412e41a897c0001011000b41b897c000412e41e897c0001011000b41f9" - "96c000412e41a897c0001011000b41b897c000412e41e897c0001011000b" - "41f996c000412e41a897c0001011000b41b897c000412e41e897c0001011" - "000b200341003602282003410136021c200341a099c00036021820034204" - "370220200341186a41989ac000101a000b200241086a0b21022007410171" - "047e201005200241046b3502002010422086842011820ba721010c010b20" - "0241027421024100210103402001411074200241046b220220056a280200" - "220141107672200470411074200141ffff037172200470210120020d000b" - "0b41002102200341206a418098c000280200360200200341f897c0002902" - "0037031820014504404104210741000c010b200341186a41f498c0001023" - "200328021c220720013602004101210220032802180b210a024002400240" - "0240200328020022010440200841046b2802002204417871220620014102" - "74220141044108200441037122041b6a490d01200441002006200141276a" - "4b1b0d02200810040b200328020c2201450d0e200541046b280200220441" - "787122082001410274220141044108200441037122041b6a490d02200441" - "002008200141276a4b1b0d03200510040c0e0b41f996c000412e41a897c0" - "001011000b41b897c000412e41e897c0001011000b41f996c000412e41a8" - "97c0001011000b41b897c000412e41e897c0001011000b2008450d002002" - "41046b21020340200220022802002207200176200572360200200241046b" - "210220072004742105200841016b22080d000b0b41002101200b450d0020" - "09200b41027422026a41046b2802000440200b21010c010b200941046b21" - "07200b41ffffffff037121040340200421052002450d01200441016b2104" - "200220076a2108200241046b21022008280200450d000b200b2005200520" - "0b4b1b21010b2001200c4102764f0d00024002402001200c4d0440410021" - "04200c450440200921050c050b200c41027421022001450440200941046b" - "2802002205417871220841044108200541037122051b20026a490d022005" - "41002008200241276a4b1b0d0320091004410421050c050b200121042009" - "200241042001410274101522050d040c180b200341003602282003410136" - "021c200341ec84c00036021820034204370220200341186a41f484c00010" - "1a000b41f996c000412e41a897c0001011000b41b897c000412e41e897c0" - "001011000b200c2104200921050b200341206a200341e0006a2802003602" - "00200320032903583703182003200136022c200320053602282003200436" - "02240c040b419c87c0001020000b200241086a0b21022005410171047e20" - "1105200241046b22022002350200201142208684221120108022123e0200" - "2011201020127e7d0ba721040b2003280238210b02402009200741027422" - "026a41046b2802000d00200941046b210620072101034020012105200245" - "0440410021070c020b200541016b2101200220066a2108200241046b2102" - "2008280200450d000b20072005200520074b1b21070b0240200b41027620" - "074d0440200b21020c010b2007200b4b0d0341002102200b450d00200b41" - "027421012007450440200941046b28020022054178712208410441082005" - "41037122051b20016a490d05200541002008200141276a4b1b0d06200910" - "04410421090c010b2009200141042007220241027410152209450d100b20" - "034100360250200404402003280248047f200c05200341c8006a41dc86c0" - "001023200328024c0b2004360200200341013602500b2003412c6a200341" - "d0006a280200360200200320032903483702242003200936021c20032002" - "3602180b200328022c2102200328022821072003280224210a2003280218" - "2201450d00200328021c220541046b280200220441787122082001410274" - "220141044108200441037122041b6a490d04200441002008200141276a4b" - "1b0d05200510040b200245044041bda9c0002d00001a4101210d41011001" - "2204450d0e200441003a0000410121010c080b4100210102402002ad4205" - "86200720024102746a41046b28020067ad7d221042038820104207834200" - "52ad7c221050044041012104410021050c010b41bda9c0002d00001a2010" - "a7220510012204450d0e0b200341003602202003200436021c2003200536" - "02182007200241016b22054102746a210920050440200241027441046b21" - "06410021020340200220076a280200210120032802182002460440200341" - "186a41ac88c0001018200328021c21040b200220046a20013a0000200320" - "0241016a2205360220200141087621082003280218200546044020034118" - "6a41ac88c0001018200328021c21040b200220046a41016a20083a000020" - "03200541016a220536022020014110762108200328021820054604402003" - "41186a41ac88c0001018200328021c21040b200220046a41026a20083a00" - "002003200541016a22053602202001411876210120032802182005460440" - "200341186a41ac88c0001018200328021c21040b200220046a41036a2001" - "3a00002003200541016a2205360220200241046a21012005210220012006" - "470d000b0b20092802002202450d05034020032802182001460440200341" - "186a419c88c00010180b200328021c220420016a20023a00002003200141" - "016a2201360220200241ff014b21052002410876210220050d000b0c060b" - "200341003602282003410136021c200341ec84c000360218200342043702" - "20200341186a41f484c000101a000b41f996c000412e41a897c000101100" - "0b41b897c000412e41e897c0001011000b41f996c000412e41a897c00010" - "11000b41b897c000412e41e897c0001011000b200328021c21040b200328" - "0218210d200141014b0d010b200341306a4200370300200341286a420037" - "0300200341206a4200370300200342003703180c010b200120046a210c41" - "002102200141017622084101470440200141016b2105200841feffffff07" - "71210b0340200420056a22062d000021092006200220046a22082d00003a" - "0000200820093a0000200c2002417e736a22062d00002109200620084101" - "6a22082d00003a0000200820093a0000200541026b2105200b200241026a" - "2202470d000b0b20014102710440200220046a22052d000021082005200c" - "2002417f736a22022d00003a0000200220083a00000b200341306a420037" - "0300200341286a4200370300200341206a42003703002003420037031820" - "0141204b0d010b200320016b41386a20042001104c1a2003290328221042" - "388620104280fe0383422886842010428080fc0783421886201042808080" - "f80f834208868484201042088842808080f80f832010421888428080fc07" - "838420104228884280fe038320104238888484842112200341306a290300" - "221042388620104280fe0383422886842010428080fc0783421886201042" - "808080f80f834208868484201042088842808080f80f8320104218884280" - "80fc07838420104228884280fe038320104238888484842113417f200329" - "0318221042b0c8b99297bc8cd02985200341206a290300221142b8a195b2" - "9bb0a0acdd008584420052201142388620114280fe038342288684201142" - "8080fc0783421886201142808080f80f8342088684842011420888428080" - "80f80f832011421888428080fc07838420114228884280fe038320114238" - "88848484221142ddb0858ce8b691a8b87f54201042388620104280fe0383" - "422886842010428080fc0783421886201042808080f80f83420886848420" - "1042088842808080f80f832010421888428080fc07838420104228884280" - "fe03832010423888848484221042a9c0c689aece93b23054201042a9c0c6" - "89aece93b230511b1b2202417f47044041022101200241ff01710d022013" - "42c7faf3c3ed82a3903c542012428d95c7c396d2dac0977f542012428d95" - "c7c396d2dac0977f511b450d020b20002011370320200020133703102000" - "20103703282000201237031841000c020b410021010b200020013a000141" - "010b3a00000240024002400240200a0440200741046b2802002202417871" - "2201200a410274220541044108200241037122021b6a490d012002410020" - "01200541276a4b1b0d02200710040b200d0440200441046b280200220241" - "7871220141044108200241037122021b200d6a490d03200241002001200d" - "41276a4b1b0d04200410040b20034180016a24000f0b41f996c000412e41" - "a897c0001011000b41b897c000412e41e897c0001011000b41f996c00041" - "2e41a897c0001011000b41b897c000412e41e897c0001011000b000bc80d" - "02057f167e230041e0006b22032400200341386a2204200141186a290300" - "370300200341306a2205200141106a290300370300200320012903003703" - "202003200141086a29030037032842ddb0858ce8b691a8b87f2112200341" - "206a20022903002219200241086a290300221a2002290310221b20024118" - "6a290300221c42c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b20" - "042903002113200529030021142003290320211520032903282116200341" - "106a2206200141306a290300370300200341186a2207200141386a290300" - "370300200320012903203703002003200141286a29030037030820032002" - "290320220e200241286a290300220c20022903302211200241386a290300" - "221d42c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2004200729" - "030037030020052006290300370300200320032903083703282003200329" - "0300370320200341206a42c6faf3c3ed82a3903c428d95c7c396d2dac097" - "7f42ddb0858ce8b691a8b87f42a9c0c689aece93b23042c7faf3c3ed82a3" - "903c428d95c7c396d2dac0977f102b02400240024020142005290300220b" - "7c220d2016200329032822087c2209200854ad2009201520032903202208" - "7c220a200854ad7c2208200954ad7c7c220942ddb0858ce8b691a8b87f85" - "200b200d56ad2009200d54ad7c201320042903007c7c220d42a9c0c689ae" - "ce93b2308584500440200a42c7faf3c3ed82a3903c542008428d95c7c396" - "d2dac0977f542008428d95c7c396d2dac0977f511b450d0242a9c0c689ae" - "ce93b230210d0c010b200942deb0858ce8b691a8b87f54200d42a9c0c689" - "aece93b23054200d42a9c0c689aece93b230511b450d01200921120b200a" - "2117200821180c010b200d20092008200a42c7faf3c3ed82a3903c7d2217" - "200a5aad220a7d220b42f3eab8bce9ada5bfe8007c2218200b54ad200820" - "0a54ad7d7c2208200954ad200842a2cffaf397c9eed7c7007c2212200854" - "ad7c50ad7d42a9c0c689aece93b2307d210d0b42ddb0858ce8b691a8b87f" - "210f024002402001290330221020012903107c2209200141286a29030022" - "0a200141086a2903007c2208200a54ad20082001290320220a2001290300" - "7c220b200a54ad7c220a200854ad7c7c220842ddb0858ce8b691a8b87f85" - "2009201054ad2008200954ad7c200141386a290300200141186a2903007c" - "7c220942a9c0c689aece93b2308584500440200b42c7faf3c3ed82a3903c" - "54200a428d95c7c396d2dac0977f54200a428d95c7c396d2dac0977f511b" - "450d01200b2110200a210b42a9c0c689aece93b23021090c020b200842de" - "b0858ce8b691a8b87f54200942a9c0c689aece93b23054200942a9c0c689" - "aece93b230511b450d00200b2110200a210b2008210f0c010b2009200820" - "0a200b42c7faf3c3ed82a3903c7d2210200b5aad220f7d220942f3eab8bc" - "e9ada5bfe8007c220b200954ad200a200f54ad7d7c220a200854ad200a42" - "a2cffaf397c9eed7c7007c220f200a54ad7c50ad7d42a9c0c689aece93b2" - "307d21090b2003200f37035020032010370340200320093703582003200b" - "37034842ddb0858ce8b691a8b87f210b024002402011201b7c2209200c20" - "1a7c2208200c54ad2008200e20197c220c200e54ad7c220a200854ad7c7c" - "220842ddb0858ce8b691a8b87f852009201154ad2008200954ad7c201c20" - "1d7c7c220942a9c0c689aece93b2308584500440200c42c7faf3c3ed82a3" - "903c54200a428d95c7c396d2dac0977f54200a428d95c7c396d2dac0977f" - "511b450d01200c210e200a210c42a9c0c689aece93b23021090c020b2008" - "42deb0858ce8b691a8b87f54200942a9c0c689aece93b23054200942a9c0" - "c689aece93b230511b450d00200c210e200a210c2008210b0c010b200920" - "08200a200c42c7faf3c3ed82a3903c7d220e200c5aad22117d220b42f3ea" - "b8bce9ada5bfe8007c220c200b54ad200a201154ad7d7c220a200854ad20" - "0a42a2cffaf397c9eed7c7007c220b200a54ad7c50ad7d42a9c0c689aece" - "93b2307d21090b200341406b200e200c200b200942c7faf3c3ed82a3903c" - "428d95c7c396d2dac0977f102b200341406b201520162014201342c7faf3" - "c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9" - "c0c689aece93b230102d200341406b200329030020032903082003290310" - "200341186a29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42" - "ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2000200d37031820" - "002012370310200020183703082000201737030020002003290340370320" - "200041286a2003290348370300200041306a200341d0006a290300370300" - "200041386a200341d8006a290300370300200341e0006a24000ba706010a" - "7e42ddb0858ce8b691a8b87f210a02400240024020022903102206200129" - "03107c2207200241086a2903002203200141086a2903007c2204200354ad" - "20042002290300220320012903007c2205200354ad7c2203200454ad7c7c" - "220442ddb0858ce8b691a8b87f852006200756ad2004200754ad7c200241" - "186a290300200141186a2903007c7c220742a9c0c689aece93b230858450" - "0440200542c7faf3c3ed82a3903c542003428d95c7c396d2dac0977f5420" - "03428d95c7c396d2dac0977f511b450d0242a9c0c689aece93b23021070c" - "010b200442deb0858ce8b691a8b87f54200742a9c0c689aece93b2305420" - "0742a9c0c689aece93b230511b450d012004210a0b2005210b2003210c0c" - "010b200720042003200542c7faf3c3ed82a3903c7d220b20055aad22057d" - "220642f3eab8bce9ada5bfe8007c220c200654ad2003200554ad7d7c2203" - "200454ad200342a2cffaf397c9eed7c7007c220a200354ad7c50ad7d42a9" - "c0c689aece93b2307d21070b42ddb0858ce8b691a8b87f21080240024020" - "02290330220920012903307c2204200241286a2903002205200141286a29" - "03007c2203200554ad20032002290320220520012903207c2206200554ad" - "7c2205200354ad7c7c220342ddb0858ce8b691a8b87f852004200954ad20" - "03200454ad7c200241386a290300200141386a2903007c7c220442a9c0c6" - "89aece93b2308584500440200642c7faf3c3ed82a3903c542005428d95c7" - "c396d2dac0977f542005428d95c7c396d2dac0977f511b450d0120062109" - "2005210642a9c0c689aece93b23021040c020b200342deb0858ce8b691a8" - "b87f54200442a9c0c689aece93b23054200442a9c0c689aece93b230511b" - "450d002006210920052106200321080c010b200420032005200642c7faf3" - "c3ed82a3903c7d220920065aad22087d220442f3eab8bce9ada5bfe8007c" - "2206200454ad2005200854ad7d7c2205200354ad200542a2cffaf397c9ee" - "d7c7007c2208200554ad7c50ad7d42a9c0c689aece93b2307d21040b2000" - "2008370330200020093703202000200a3703102000200b37030020002004" - "37033820002006370328200020073703182000200c3703080bf10802087f" - "087e23004180016b22022400200141386a290300210e200141286a290300" - "210b200141186a2203290300210d2001290330210f2001290320210a2001" - "290310210c02400240024020012903002210200141086a22042903002211" - "844200520d00200c200d844200520d00200a200b844200520d00200e200f" - "84500d010b200241186a22052003290300370300200241106a2206200141" - "106a22072903003703002002200429030037030820022001290300370300" - "200220102011200c200d42c7faf3c3ed82a3903c428d95c7c396d2dac097" - "7f102b200241386a2204200141206a220341186a29030037030020024130" - "6a2208200341106a22092903003703002002200341086a29030037032820" - "022003290300370320200241206a200a200b200f200e42c7faf3c3ed82a3" - "903c428d95c7c396d2dac0977f102b200241206a42c6faf3c3ed82a3903c" - "428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93" - "b23042c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2002200229" - "032020022903282008290300200429030042c7faf3c3ed82a3903c428d95" - "c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b23010" - "2d2000027e2002290300220d2006290300220c842002290308220b200529" - "0300220a84845004404200210f42000c010b200241d8006a2204200a3703" - "002002200c3703502002200d3703402002200b370348200242a9c0c689ae" - "ce93b230370378200242ddb0858ce8b691a8b87f3703702002428d95c7c3" - "96d2dac0977f370368200242c7faf3c3ed82a3903c370360200241406b20" - "0241e0006a103a2004290300210d2002290348210c2002290340210b2002" - "290350210a200241d0006a20072903003703002004200141186a29030037" - "0300200220012903003703402002200141086a290300370348200241406b" - "200b200c200a200d42c7faf3c3ed82a3903c428d95c7c396d2dac0977f10" - "2b200241f8006a2201200341186a290300370300200241f0006a22042009" - "2903003703002002200341086a2903003703682002200329030037036020" - "0241e0006a200b200c200a200d42c7faf3c3ed82a3903c428d95c7c396d2" - "dac0977f102b2004290300220c20022903602210842001290300220e2002" - "290368220b84845004404200210c4200210b4200210a4200210e4200210f" - "42010c010b4200210f427f4200427f4200201042788342c7faf3c3ed82a3" - "903c561b220a200a200b54ad7d200a200b7d220a42f3eab8bce9ada5bfe8" - "007d220b200a54ad7c42017c2211200c7d220d42a4cffaf397c9eed7c700" - "7d220a200d54ad200c201156ad7d427f511b200e7d42a9c0c689aece93b2" - "307c210e42c7faf3c3ed82a3903c20107d210c42010b3703002000200a37" - "03402000200c370330200020022903403703102000200f3703082000200e" - "3703482000200b370338200041186a2002290348370300200041206a2002" - "41d0006a290300370300200041286a200241d8006a2903003703000c010b" - "20004200370308200042003703000b20024180016a24000b090020004100" - "3602000b7b01027f230041106b2203240041f0a5c00041f0a5c000280200" - "220441016a360200024020044100480d00024041bca9c0002d0000450440" - "41b8a9c00041b8a9c00028020041016a36020041eca5c00028020041004e" - "0d010c020b200341086a20002001110000000b41bca9c00041003a000020" - "02450d00000b000b0c00200020012902003703000bba0201047f411f2102" - "20004200370210200141ffffff074d04402001410620014108766722026b" - "7641017120024101746b413e6a21020b2000200236021c200241027441f4" - "a5c0006a2103410120027422044190a9c000280200714504402003200036" - "0200200020033602182000200036020c200020003602084190a9c0004190" - "a9c0002802002004723602000f0b02400240200120032802002204280204" - "417871460440200421020c010b2001411920024101766b41002002411f47" - "1b742103034020042003411d764104716a41106a22052802002202450d02" - "200341017421032002210420022802044178712001470d000b0b20022802" - "082203200036020c20022000360208200041003602182000200236020c20" - "0020033602080f0b20052000360200200020043602182000200036020c20" - "0020003602080bd20102067f017e230041206b2201240002400240200028" - "02002203417f460d00410420034101742202200341016a2204200220044b" - "1b2202200241044d1b2204ad42e0007e22074220884200520d002007a722" - "0641f0ffffff074b0d004100210220012003047f2001200341e0006c3602" - "1c2001200028020436021441100520020b360218200141086a2006200141" - "146a103720012802084101470d0120012802102102200128020c21050b20" - "0541dca4c0001019000b200128020c210320002004360200200020033602" - "04200141206a24000b7f01017f027f0240027f0240200228020404402002" - "28020822034504402001450d0441bda9c0002d00001a0c020b2002280200" - "20034110200110150c020b2001450d0241bda9c0002d00001a0b2001100b" - "0b2202411020021b21032002450c010b4110210341000b21022000200136" - "020820002003360204200020023602000bd20102067f017e230041206b22" - "0124000240024020002802002203417f460d004104200341017422022003" - "41016a2204200220044b1b2202200241044d1b2204ad42c0017e22074220" - "884200520d002007a7220641f0ffffff074b0d004100210220012003047f" - "2001200341c0016c36021c2001200028020436021441100520020b360218" - "200141086a2006200141146a103720012802084101470d01200128021021" - "02200128020c21050b200541eca4c0001019000b200128020c2103200020" - "0436020020002003360204200141206a24000bdd0102067f017e23004120" - "6b2202240020002802002204417f460440410020011019000b4104200441" - "01742203200441016a2205200320054b1b2203200341044d1b2205ad42c0" - "017e22084220884200520440410020011019000b02402008a7220741f0ff" - "ffff074d04404100210320022004047f2002200441c0016c36021c200220" - "0028020436021441100520030b360218200241086a2007200241146a1037" - "20022802084101470d01200228020c2106200228021021030b2006200110" - "19000b200228020c21042000200536020020002004360204200241206a24" - "000b830b02037f167e230041c0016b22022400200241186a220320004118" - "6a290300370300200241106a2204200041106a2903003703002002200029" - "03003703002002200041086a290300370308200241386a200141186a2903" - "002218370300200241306a200141106a2903002213370300200220014108" - "6a2903002214370328200220012903002215370320200242003703582002" - "42003703502002420037034820024201370340200241f8006a2201420037" - "0300200241f0006a42003703002002420037036820024200370360200329" - "0300210e2004290300210f2002290308210a200229030021072013211020" - "182111201521082014210b03400240200242003703980120024200370390" - "0120024200370388012002420137038001200220024180016a104a450440" - "200241406b21010c010b200241b8016a20024198016a2903003703002002" - "41b0016a20024190016a29030037030020022002290388013703a8012002" - "2002290380013703a001200241206a200241a0016a104a450440200241e0" - "006a21010c010b200241d8006a2903002112200229035021052002290348" - "21162002290340210d2007a74101714504400340200a423f862007420188" - "8421070240200da74101714504402016423f86200d42018884210d200542" - "3f8620164201888421160c010b200520137c2209201420167c2205201454" - "ad2005200d20157c220d201554ad7c2206200554ad7c7c2205423f862006" - "4201888421162006423f86200d42018884210d2009201354ad2005200954" - "ad7c201220187c7c21120b200f423f86200a42018884210a200e423f8620" - "0f42018884210f200e420188210e2012423f862005420188842105201242" - "018821122007420183500d000b2002200f3703102002200e3703180b2002" - "20053703502002200d370340200220073703002002201237035820022016" - "3703482002200a3703082001290300210920022903702106200229036821" - "172002290360210c2008a74101714504400340200b423f86200842018884" - "21080240200c420183a70440200620137c2219201420177c2206201454ad" - "2006200c20157c221a201554ad7c220c200654ad7c7c2206423f86200c42" - "0188842117200c423f86201a42018884210c2013201956ad2006201954ad" - "7c200920187c7c21090c010b2017423f86200c42018884210c2006423f86" - "20174201888421170b2010423f86200b42018884210b2011423f86201042" - "0188842110201142018821112009423f8620064201888421062009420188" - "21092008420183500d000b20022010370330200220113703380b20022006" - "3703702002200c3703602002200837032020022009370378200220173703" - "682002200b37032802400240200f201085200e2011858450044020072008" - "54200a200b54200a200b511b0d010c020b200f201056200e201156200e20" - "11511b0d010b2002200820077d427e8322063703202002200b200a7d2209" - "2007200856ad22087d220c37032820024201200a200b56ad2008200956ad" - "7c7d2208200f7d220b20107c220942017d221037033020022011200e7d20" - "09420052ad2009200b54ad2008200f54ad7d7c50ad7d2211370338200241" - "e0006a200d2016200520122015201420132018102d20062108200c210b0c" - "020b2002200720087d427e8322123703002002200a200b7d220520072008" - "54ad22077d220d37030820024201200a200b54ad2005200754ad7c7d2207" - "200f7c220520107d220a42017d220f3703102002200e20117d200a420052" - "ad2005200754ad2005201054ad7d7c50ad7d220e370318200241406b200c" - "2017200620092015201420132018102d20122107200d210a0c010b0b2000" - "2001290300370300200041186a200141186a290300370300200041106a20" - "0141106a290300370300200041086a200141086a290300370300200241c0" - "016a24000bc92602357f187e230041c0066b22032400200341386a222b20" - "0141386a2226290300370300200341306a222c200141306a220e29030037" - "0300200341286a222d200141286a220f290300370300200341206a222e20" - "0141206a2210290300370300200341186a222f200141186a221129030037" - "0300200341106a2230200141106a22122903003703002003200129030037" - "03002003200141086a2227290300370308200320012002102f200341f800" - "6a2214200141f8006a2204290300370300200341f0006a2215200141f000" - "6a2205290300370300200341e8006a2216200141e8006a22062903003703" - "00200341e0006a2217200141e0006a2207290300370300200341d8006a22" - "0a200141d8006a2208290300370300200341d0006a220b200141d0006a22" - "092903003703002003200141c8006a220c29030037034820032001290340" - "370340200341406b200141406b2213200241406b2228102f200341b8016a" - "2220200141b8016a290300370300200341b0016a2221200141b0016a2903" - "00370300200341a8016a2222200141a8016a290300370300200341a0016a" - "2223200141a0016a29030037030020034198016a222420014198016a2903" - "0037030020034190016a222520014190016a290300370300200320014188" - "016a2903003703880120032001290380013703800120034180016a200141" - "80016a222920024180016a222a102f200341f8016a221820042903003703" - "00200341f0016a22192005290300370300200341e8016a221a2006290300" - "370300200341e0016a221b2007290300370300200341d8016a221c200829" - "0300370300200341d0016a221d20092903003703002003200c2903003703" - "c801200320012903403703c001200341c0016a201320291030200341b802" - "6a200241f8006a290300370300200341b0026a200241f0006a2903003703" - "00200341a8026a200241e8006a290300370300200341a0026a200241e000" - "6a29030037030020034198026a200241d8006a2903003703002003419002" - "6a200241d0006a2903003703002003200241c8006a290300370388022003" - "20022903403703800220034180026a2028202a1030200341c0056a200341" - "c0016a20034180026a102f2018200341f8056a2204290300370300201920" - "0341f0056a2205290300370300201a200341e8056a220629030037030020" - "1b200341e0056a2207290300370300201c200341d8056a22082903003703" - "00201d200341d0056a2209290300370300200320032903c8053703c80120" - "0320032903c0053703c00120034198066a220c201c290300370300200341" - "90066a220d201d290300370300200320032903c801370388062003200329" - "03c0013703800620034180066a2003290340223820032903482239200b29" - "0300223a200a290300223b42c7faf3c3ed82a3903c428d95c7c396d2dac0" - "977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200341b806" - "6a220a2018290300370300200341b0066a220b2019290300370300200320" - "1a2903003703a8062003201b2903003703a006200341a0066a2017290300" - "223c2016290300223d2015290300223e2014290300223f42c7faf3c3ed82" - "a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689" - "aece93b230102d2008200c29030022403703002009200d29030022413703" - "00200720032903a00622423703002005200b290300224337030020062003" - "2903a80622443703002004200a2903002245370300200320032903880622" - "463703c805200320032903800622473703c0052018204537030020192043" - "370300201a2044370300201b2042370300201c2040370300201d20413703" - "00200320463703c801200320473703c001200c201c290300370300200d20" - "1d290300370300200320032903c80137038806200320032903c001370380" - "0620034180066a2003290380012003290388012025290300202429030042" - "c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b8" - "7f42a9c0c689aece93b230102d200a2018290300370300200b2019290300" - "3703002003201a2903003703a8062003201b2903003703a006200341a006" - "6a202329030020222903002021290300202029030042c7faf3c3ed82a390" - "3c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece" - "93b230102d2008200c29030022403703002009200d290300224137030020" - "0720032903a00622423703002005200b2903002243370300200620032903" - "a80622443703002004200a29030022453703002003200329038806224637" - "03c805200320032903800622473703c00520182045370300201920433703" - "00201a2044370300201b2042370300201c2040370300201d204137030020" - "0320463703c801200320473703c001200342003703b805200342003703b0" - "05200342003703a805200342013703a00520034200370398052003420037" - "03900520034200370388052003420937038005200341c0056a200341c001" - "6a20034180056a102f201820042903003703002019200529030037030020" - "1a2006290300370300201b2007290300370300201c200829030037030020" - "1d2009290300370300200320032903c8053703c801200320032903c00537" - "03c001200341c0056a200341c0016a200310302018200429030037030020" - "192005290300370300201a2006290300370300201b200729030037030020" - "1c2008290300370300201d2009290300370300200320032903c8053703c8" - "01200320032903c0053703c001200341d0026a2214201229030037030020" - "0341d8026a22152011290300370300200341e0026a221620102903003703" - "00200341e8026a2217200f290300370300200341f0026a221e200e290300" - "370300200341f8026a221f2026290300370300200320012903003703c002" - "200320272903003703c802200341c0026a200120131030200341b8036a20" - "0241386a2231290300370300200341b0036a200241306a22322903003703" - "00200341a8036a200241286a2233290300370300200341a0036a20024120" - "6a223429030037030020034198036a200241186a22352903003703002003" - "4190036a200241106a22362903003703002003200241086a223729030037" - "038803200320022903003703800320034180036a200220281030200341c0" - "056a200341c0026a20034180036a102f201f2004290300370300201e2005" - "290300370300201720062903003703002016200729030037030020152008" - "29030037030020142009290300370300200320032903c8053703c8022003" - "20032903c0053703c002200c2015290300370300200d2014290300370300" - "200320032903c80237038806200320032903c0023703800620034180066a" - "200329030022402003290308224120302903002242202f290300224342c7" - "faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f" - "42a9c0c689aece93b230102d200a201f290300370300200b201e29030037" - "0300200320172903003703a806200320162903003703a006200341a0066a" - "202e2903002244202d2903002245202c2903002246202b290300224742c7" - "faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f" - "42a9c0c689aece93b230102d2008200c29030022483703002009200d2903" - "002249370300200720032903a006224a3703002005200b290300224b3703" - "00200620032903a806224c3703002004200a290300224d37030020032003" - "29038806224e3703c8052003200329038006224f3703c005201f204d3703" - "00201e204b3703002017204c3703002016204a3703002015204837030020" - "1420493703002003204e3703c8022003204f3703c002200c201529030037" - "0300200d2014290300370300200320032903c80237038806200320032903" - "c0023703800620034180066a20382039203a203b42c7faf3c3ed82a3903c" - "428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93" - "b230102d200a201f290300370300200b201e290300370300200320172903" - "003703a806200320162903003703a006200341a0066a203c203d203e203f" - "42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8" - "b87f42a9c0c689aece93b230102d2008200c29030022383703002009200d" - "2903002239370300200720032903a006223a3703002005200b290300223b" - "370300200620032903a806223c3703002004200a290300223d3703002003" - "200329038806223e3703c8052003200329038006223f3703c005201f203d" - "370300201e203b3703002017203c3703002016203a370300201520383703" - "00201420393703002003203e3703c8022003203f3703c002200341f8036a" - "2020290300370300200341f0036a2021290300370300200341e8036a2022" - "290300370300200341e0036a2023290300370300200341d8036a20242903" - "00370300200341d0036a202529030037030020032003290388013703c803" - "20032003290380013703c003200341c0036a20034180016a20034180056a" - "102f200341c0056a200341c0026a200341c0036a1030201f200429030037" - "0300201e2005290300370300201720062903003703002016200729030037" - "03002015200829030037030020142009290300370300200320032903c805" - "3703c802200320032903c0053703c00220034190046a2213201229030037" - "030020034198046a22122011290300370300200341a0046a221120102903" - "00370300200341a8046a2210200f290300370300200341b0046a220f200e" - "290300370300200341b8046a220e20262903003703002003200129030037" - "038004200320272903003703880420034180046a200120291030200341f8" - "046a2031290300370300200341f0046a2032290300370300200341e8046a" - "2033290300370300200341e0046a2034290300370300200341d8046a2035" - "290300370300200341d0046a2036290300370300200320372903003703c8" - "04200320022903003703c004200341c0046a2002202a1030200341c0056a" - "20034180046a200341c0046a102f200e2004290300370300200f20052903" - "003703002010200629030037030020112007290300370300201220082903" - "0037030020132009290300370300200320032903c8053703880420032003" - "2903c00537038004200c2012290300370300200d20132903003703002003" - "2003290388043703880620032003290380043703800620034180066a2040" - "20412042204342c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0" - "858ce8b691a8b87f42a9c0c689aece93b230102d200a200e290300370300" - "200b200f290300370300200320102903003703a806200320112903003703" - "a006200341a0066a204420452046204742c7faf3c3ed82a3903c428d95c7" - "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d" - "2008200c29030022383703002009200d2903002239370300200720032903" - "a006223a3703002005200b290300223b370300200620032903a806223c37" - "03002004200a290300223d3703002003200329038806223e3703c8052003" - "200329038006223f3703c005200e203d370300200f203b3703002010203c" - "3703002011203a37030020122038370300201320393703002003203e3703" - "88042003203f37038004200341c0056a20034180046a200341406b103020" - "0e2004290300370300200f20052903003703002010200629030037030020" - "112007290300370300201220082903003703002013200929030037030020" - "0320032903c80537038804200320032903c00537038004200c2012290300" - "370300200d20132903003703002003200329038804370388062003200329" - "0380043703800620034180066a2003290380012003290388012025290300" - "202429030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb085" - "8ce8b691a8b87f42a9c0c689aece93b230102d200a200e29030037030020" - "0b200f290300370300200320102903003703a806200320112903003703a0" - "06200341a0066a202329030020222903002021290300202029030042c7fa" - "f3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42" - "a9c0c689aece93b230102d2008200c29030022383703002009200d290300" - "2239370300200720032903a006223a3703002005200b290300223b370300" - "200620032903a806223c3703002004200a290300223d3703002003200329" - "038806223e3703c8052003200329038006223f3703c005200e203d370300" - "200f203b3703002010203c3703002011203a370300201220383703002013" - "20393703002003203e370388042003203f37038004200041386a20182903" - "00370300200041306a2019290300370300200041286a201a290300370300" - "200041206a201b290300370300200041186a201c29030037030020004110" - "6a201d290300370300200041086a20032903c801370300200020032903c0" - "01370300200020032903c002370340200041c8006a20032903c802370300" - "200041d0006a2014290300370300200041d8006a20152903003703002000" - "41e0006a2016290300370300200041e8006a2017290300370300200041f0" - "006a201e290300370300200041f8006a201f290300370300200041b8016a" - "200e290300370300200041b0016a200f290300370300200041a8016a2010" - "290300370300200041a0016a201129030037030020004198016a20122903" - "0037030020004190016a201329030037030020004188016a200329038804" - "370300200020032903800437038001200341c0066a24000b830c02137f04" - "7e23004180026b22032400200341d8006a2207200141186a290300370300" - "200341d0006a2208200141106a2903003703002003200141086a29030037" - "034820032001290300370340200341406b2002290300200241086a290300" - "2002290310200241186a29030042c7faf3c3ed82a3903c428d95c7c396d2" - "dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200341" - "98016a2204200141386a29030037030020034190016a2205200141306a29" - "03003703002003200141286a290300370388012003200129032037038001" - "20034180016a2002290320200241286a2903002002290330200241386a29" - "030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b6" - "91a8b87f42a9c0c689aece93b230102d200341186a220b20072903003703" - "00200341106a220c2008290300370300200341206a220d20032903800137" - "0300200341286a220e200329038801370300200341306a220f2005290300" - "370300200341386a22102004290300370300200320032903483703082003" - "2003290340370300200241f8006a2903002116200241e8006a2903002117" - "2002290370211820022903602119200341f8016a2209200141d8006a2903" - "00370300200341f0016a2206200141d0006a2903003703002003200141c8" - "006a2903003703e801200320012903403703e001200341e0016a20022903" - "40200241c8006a2903002002290350200241d8006a29030042c7faf3c3ed" - "82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c6" - "89aece93b230102d2004200141f8006a2903003703002005200141f0006a" - "2903003703002003200141e8006a29030037038801200320012903603703" - "800120034180016a201920172018201642c7faf3c3ed82a3903c428d95c7" - "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d" - "2007200929030037030020082006290300370300200341e0006a22112003" - "29038001370300200341e8006a2212200329038801370300200341f0006a" - "22132005290300370300200341f8006a2214200429030037030020032003" - "2903e801370348200320032903e001370340200241b8016a290300211620" - "0241a8016a290300211720022903b001211820022903a0012119200341d8" - "016a220a20014198016a290300370300200341d0016a221520014190016a" - "290300370300200320014188016a2903003703c801200320012903800137" - "03c001200341c0016a20022903800120024188016a290300200229039001" - "20024198016a29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f" - "42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2009200141b801" - "6a2903003703002006200141b0016a2903003703002003200141a8016a29" - "03003703e801200320012903a0013703e001200341e0016a201920172018" - "201642c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b6" - "91a8b87f42a9c0c689aece93b230102d2004200a29030037030020052015" - "290300370300200341a0016a220120032903e001370300200341a8016a22" - "0220032903e801370300200341b0016a220a2006290300370300200341b8" - "016a22062009290300370300200320032903c80137038801200320032903" - "c00137038001200041386a2010290300370300200041306a200f29030037" - "0300200041286a200e290300370300200041206a200d2903003703002000" - "41186a200b290300370300200041106a200c290300370300200041086a20" - "032903083703002000200329030037030020002003290340370340200041" - "c8006a2003290348370300200041d0006a2008290300370300200041d800" - "6a2007290300370300200041e0006a2011290300370300200041e8006a20" - "12290300370300200041f0006a2013290300370300200041f8006a201429" - "0300370300200041b8016a2006290300370300200041b0016a200a290300" - "370300200041a8016a2002290300370300200041a0016a20012903003703" - "0020004198016a200429030037030020004190016a200529030037030020" - "004188016a20032903880137030020002003290380013703800120034180" - "026a24000bf11902287f087e23004180056b22022400200241386a222420" - "0141386a220a290300370300200241306a2225200141306a220329030037" - "0300200241286a2226200141286a2204290300370300200241206a222720" - "0141206a2205290300370300200241186a2228200141186a220f29030037" - "0300200241106a2229200141106a22062903003703002002200129030037" - "03002002200141086a2207290300370308200220012001102f200241f800" - "6a2210200a290300370300200241f0006a22112003290300370300200241" - "e8006a22122004290300370300200241e0006a2213200529030037030020" - "0241d8006a2214200f290300370300200241d0006a221520062903003703" - "002002200729030037034820022001290300370340200241406b20012001" - "41406b2218102f20024180046a200241406b200241406b10302010200241" - "b8046a220b2903003703002011200241b0046a220c290300370300201220" - "0241a8046a220d2903003703002013200241a0046a220e29030037030020" - "1420024198046a2208290300370300201520024190046a22092903003703" - "0020022002290388043703482002200229038004370340200141f8006a22" - "19290300212a200141f0006a221a290300212b200141e8006a221b290300" - "212c200141e0006a221c290300212d200241f8046a2217200f2903003703" - "00200241f0046a220f2006290300370300200220072903003703e8042002" - "20012903003703e004200241e0046a2001290340200141c8006a221d2903" - "00200141d0006a221e290300200141d8006a221f29030042c7faf3c3ed82" - "a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689" - "aece93b230102d2008200a29030037030020092003290300370300200220" - "0429030037038804200220052903003703800420024180046a202d202c20" - "2b202a42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8" - "b691a8b87f42a9c0c689aece93b230102d20024198036a22032017290300" - "37030020024190036a2204200f290300370300200241a0036a2205200229" - "038004370300200241a8036a2206200229038804370300200241b0036a22" - "072009290300370300200241b8036a221620082903003703002002200229" - "03e80437038803200220022903e0043703800320024180046a2002418003" - "6a20014180016a220a10302016200b2903003703002007200c2903003703" - "002006200d2903003703002005200e290300370300200320082903003703" - "002004200929030037030020022002290388043703880320022002290380" - "043703800320024180046a20024180036a20024180036a102f2016200b29" - "03003703002007200c2903003703002006200d2903003703002005200e29" - "030037030020032008290300370300200420092903003703002002200229" - "0388043703880320022002290380043703800320024190016a2203201e29" - "030037030020024198016a2204201f290300370300200241a0016a220520" - "1c290300370300200241a8016a2206201b290300370300200241b0016a22" - "07201a290300370300200241b8016a221620192903003703002002200129" - "0340370380012002201d2903003703880120024180016a2018200a102f20" - "024180046a20024180016a20024180016a10302016200b29030037030020" - "07200c2903003703002006200d2903003703002005200e29030037030020" - "042008290300370300200320092903003703002002200229038804370388" - "01200220022903800437038001200241d0016a221820014190016a290300" - "370300200241d8016a221920014198016a290300370300200241e0016a22" - "1a200141a0016a290300370300200241e8016a221b200141a8016a290300" - "370300200241f0016a221c200141b0016a290300370300200241f8016a22" - "1d200141b8016a29030037030020022001290380013703c0012002200141" - "88016a2903003703c801200241c0016a200a200a102f200241b8026a221e" - "2016290300370300200241b0026a22162007290300370300200241a8026a" - "22072006290300370300200241a0026a2206200529030037030020024198" - "026a2205200429030037030020024190026a220420032903003703002002" - "42003703f803200242003703f003200242003703e803200242013703e003" - "200242003703d803200242003703d003200242003703c803200242093703" - "c00320022002290388013703880220022002290380013703800220024180" - "026a20024180016a200241c0036a102f20024180046a20024180026a2002" - "1030201e200b2903003703002016200c2903003703002007200d29030037" - "03002006200e290300370300200520082903003703002004200929030037" - "0300200241d0026a22032018290300370300200241d8026a221f20192903" - "00370300200241e0026a2220201a290300370300200241e8026a2221201b" - "290300370300200241f0026a2222201c290300370300200241f8026a2223" - "201d29030037030020022002290388043703880220022002290380043703" - "8002200220022903c0013703c002200220022903c8013703c802200241c0" - "026a200241c0016a200241c0036a102f20024180046a200241c0026a2002" - "41406b10302023200b2903003703002022200c2903003703002021200d29" - "03003703002020200e290300370300201f20082903003703002003200929" - "030037030020022002290388043703c80220022002290380043703c00220" - "024180046a200241406b20024180036a10302010200b2903003703002011" - "200c2903003703002012200d2903003703002013200e2903003703002014" - "200829030037030020152009290300370300200220022903880437034820" - "0220022903800437034020024180046a200241406b20024180016a103020" - "10200b2903003703002011200c2903003703002012200d29030037030020" - "13200e290300370300201420082903003703002015200929030037030020" - "022002290388043703482002200229038004370340200241d8046a220120" - "14290300370300200241d0046a220a201529030037030020022002290348" - "3703c804200220022903403703c004200241c0046a200229030020022903" - "082029290300202829030042c7faf3c3ed82a3903c428d95c7c396d2dac0" - "977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2017201029" - "0300370300200f2011290300370300200220122903003703e80420022013" - "2903003703e004200241e0046a2027290300202629030020252903002024" - "29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8" - "b691a8b87f42a9c0c689aece93b230102d20082001290300222a37030020" - "09200a290300222b370300200e20022903e004222c370300200c200f2903" - "00222d370300200d20022903e804222e370300200b2017290300222f3703" - "00200220022903c804223037038804200220022903c00422313703800420" - "10202f3703002011202d3703002012202e3703002013202c370300201420" - "2a3703002015202b37030020022030370348200220313703402001201429" - "0300370300200a2015290300370300200220022903483703c80420022002" - "2903403703c004200241c0046a20022903c00120022903c8012018290300" - "201929030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb085" - "8ce8b691a8b87f42a9c0c689aece93b230102d2017201029030037030020" - "0f2011290300370300200220122903003703e804200220132903003703e0" - "04200241e0046a201a290300201b290300201c290300201d29030042c7fa" - "f3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42" - "a9c0c689aece93b230102d20082001290300222a3703002009200a290300" - "222b370300200e20022903e004222c370300200c200f290300222d370300" - "200d20022903e804222e370300200b2017290300222f3703002002200229" - "03c804223037038804200220022903c0042231370380042010202f370300" - "2011202d3703002012202e3703002013202c3703002014202a3703002015" - "202b3703002002203037034820022031370340200041386a201e29030037" - "0300200041306a2016290300370300200041286a20072903003703002000" - "41206a2006290300370300200041186a2005290300370300200041106a20" - "04290300370300200041086a200229038802370300200020022903800237" - "0300200020022903c002370340200041c8006a20022903c8023703002000" - "41d0006a2003290300370300200041d8006a201f290300370300200041e0" - "006a2020290300370300200041e8006a2021290300370300200041f0006a" - "2022290300370300200041f8006a2023290300370300200041b8016a2010" - "290300370300200041b0016a2011290300370300200041a8016a20122903" - "00370300200041a0016a201329030037030020004198016a201429030037" - "030020004190016a201529030037030020004188016a2002290348370300" - "200020022903403703800120024180056a24000bfe09011d7e2001290310" - "22022001290300220484200141186a2903002215200141086a2903002203" - "8484420052044042c7faf3c3ed82a3903c20047d2118427f4200427f4200" - "200442788342c7faf3c3ed82a3903c561b220b2003200b56ad7d200b2003" - "7d220342f3eab8bce9ada5bfe8007d2219200354ad7c42017c220320027d" - "220c42a4cffaf397c9eed7c7007d220b200c54ad2002200356ad7d427f51" - "1b20157d42a9c0c689aece93b2307c210c0b420021152001290330220220" - "01290320220484200141386a2903002208200141286a2903002203848442" - "00520440427f4200427f4200200442788342c7faf3c3ed82a3903c561b22" - "062003200656ad7d200620037d220342f3eab8bce9ada5bfe8007d221520" - "0354ad7c42017c220320027d220642a4cffaf397c9eed7c7007d221a2006" - "54ad2002200356ad7d427f511b20087d42a9c0c689aece93b2307c211b42" - "c7faf3c3ed82a3903c20047d21060b200141f8006a2903002108200141e8" - "006a290300210220012903702104200129036021032001290350220e2001" - "290340220f84200141d8006a2903002205200141c8006a29030022108484" - "4200520440427f4200427f4200200f42788342c7faf3c3ed82a3903c561b" - "22092009201054ad7d200920107d220942f3eab8bce9ada5bfe8007d221c" - "200954ad7c42017c2216200e7d220d42a4cffaf397c9eed7c7007d220920" - "0d54ad200e201656ad7d427f511b20057d42a9c0c689aece93b2307c2116" - "42c7faf3c3ed82a3903c200f7d210d0b4200210e4200210f420021102003" - "2004842002200884844200520440427f4200427f4200200342788342c7fa" - "f3c3ed82a3903c561b22072002200756ad7d200720027d220242f3eab8bc" - "e9ada5bfe8007d220e200254ad7c42017c220220047d220742a4cffaf397" - "c9eed7c7007d220f200754ad2002200454ad7d427f511b20087d42a9c0c6" - "89aece93b2307c211042c7faf3c3ed82a3903c20037d21070b200141b801" - "6a2903002108200141a8016a290300210220012903b001210420012903a0" - "01210342002105200129039001221220012903800122138420014198016a" - "290300221e20014188016a290300221484844200520440427f4200427f42" - "00201342788342c7faf3c3ed82a3903c561b220a200a201454ad7d200a20" - "147d220a42f3eab8bce9ada5bfe8007d221d200a54ad7c42017c22172012" - "7d221142a4cffaf397c9eed7c7007d220a201154ad2012201756ad7d427f" - "511b201e7d42a9c0c689aece93b2307c211742c7faf3c3ed82a3903c2013" - "7d21110b4200211242002113420021142003200484200220088484420052" - "0440427f4200427f4200200342788342c7faf3c3ed82a3903c561b220520" - "02200556ad7d200520027d220242f3eab8bce9ada5bfe8007d2212200254" - "ad7c42017c220220047d220542a4cffaf397c9eed7c7007d2213200554ad" - "2002200454ad7d427f511b20087d42a9c0c689aece93b2307c211442c7fa" - "f3c3ed82a3903c20037d21050b200020133703b001200020053703a00120" - "00200a3703900120002011370380012000200f3703702000200737036020" - "0020093703502000200d3703402000201a37033020002006370320200020" - "0b37031020002018370300200020143703b801200020123703a801200020" - "17370398012000201d37038801200020103703782000200e370368200020" - "163703582000201c3703482000201b370338200020153703282000200c37" - "0318200020193703080b960501057f230041800c6b220324002003200120" - "02103b20034180036a200141c0016a220441c001104c1a200341c0046a20" - "0241c0016a220541c001104c1a200341c0016a20042005103b2003420037" - "03b809200342003703b009200342003703a809200342013703a009200342" - "003703980920034200370390092003420037038809200342093703800920" - "0341c00a6a200341c0026a20034180096a102f200341c80b6a2003418802" - "6a290300370300200341d00b6a20034190026a290300370300200341d80b" - "6a20034198026a290300370300200341e00b6a200341a0026a2903003703" - "00200341e80b6a200341a8026a290300370300200341f00b6a200341b002" - "6a290300370300200341f80b6a200341b8026a290300370300200341880b" - "6a20032903c801370300200341900b6a200341d0016a2903003703002003" - "41980b6a200341d8016a290300370300200341a00b6a200341e0016a2903" - "00370300200341a80b6a200341e8016a290300370300200341b00b6a2003" - "41f0016a290300370300200341b80b6a200341f8016a2903003703002003" - "2003290380023703c00b200320032903c0013703800b20034180066a2003" - "41c00a6a20031030200341c0066a200341800b6a2206200341406b103020" - "034180076a200341c00b6a220720034180016a103020034180096a200120" - "041030200341c0096a200141406b200341c0036a1030200341800a6a2001" - "4180016a20034180046a1030200341c00a6a200220051030200620024140" - "6b20034180056a1030200720024180016a200341c0056a1030200341c007" - "6a20034180096a200341c00a6a103b200341c00a6a200341c0076a200310" - "3c200041c0016a200341c00a6a200341c0016a103c200020034180066a41" - "c001104c1a200341800c6a24000bd741020e7f227e230041c0036b220324" - "0002400240200129034022212001290350222084200141c8006a29030022" - "23200141d8006a2903002222848442005204402002290340221d20022903" - "50221584200241c8006a2903002224200241d8006a290300221e8484500d" - "01200341f8016a2204200141406b220641186a2205290300370300200341" - "f0016a2208200641106a220b290300370300200320062903003703e00120" - "03200641086a220c2903003703e801200341e0016a202120232020202242" - "c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b20034198026a2209" - "200241406b220741186a220d29030037030020034190026a220a20074110" - "6a220e2903003703002003200741086a220f290300370388022003200729" - "03003703800220034180026a201d20242015201e42c7faf3c3ed82a3903c" - "428d95c7c396d2dac0977f102b200341186a2210200141186a2903003703" - "00200341106a200141106a2903003703002003200141086a290300370308" - "20032001290300370300200320032903800222162003290388022219200a" - "29030022252009290300222842c7faf3c3ed82a3903c428d95c7c396d2da" - "c0977f102b200341386a2209200241186a290300370300200341306a220a" - "200241106a2903003703002003200241086a290300370328200320022903" - "00370320200341206a20032903e001222c20032903e80122302008290300" - "22312004290300223242c7faf3c3ed82a3903c428d95c7c396d2dac0977f" - "102b200341b8036a22042005290300370300200341b0036a2205200b2903" - "003703002003200c2903003703a803200320062903003703a003200341a0" - "036a202c20302031203242c7faf3c3ed82a3903c428d95c7c396d2dac097" - "7f102b200429030021132005290300211f20032903a803211c20032903a0" - "0321172004200d2903003703002005200e2903003703002003200f290300" - "3703a803200320072903003703a003200341a0036a201620192025202842" - "c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2004290300211220" - "05290300211420032903a803211120032903a003211a200341d0006a2001" - "41306a290300370300200341d8006a2206200141386a2903003703002003" - "20012903203703402003200141286a290300370348200341406b201a2011" - "2014201242c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b200341" - "f8006a2207200241386a290300370300200341f0006a2208200241306a29" - "03003703002003200241286a290300370368200320022903203703602003" - "41e0006a2017201c201f201342c7faf3c3ed82a3903c428d95c7c396d2da" - "c0977f102b02402003200341206a104a450440200341406b200341e0006a" - "104a450d010b200420092903003703002005200a29030037030020032003" - "2903283703a803200320032903203703a003200341a0036a200329030020" - "032903082003290310201029030042c7faf3c3ed82a3903c428d95c7c396" - "d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2004" - "290300211f2005290300211c20032903a003211720032903a80321122004" - "200729030037030020052008290300370300200320032903683703a80320" - "0320032903603703a003200341a0036a2003290340200329034820032903" - "50200629030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0" - "858ce8b691a8b87f42a9c0c689aece93b230102d20124201862017423f88" - "842114201742018621112004290300211a2005290300211b20032903a803" - "211820032903a003212602400240201c4201862012423f8884222942ddb0" - "858ce8b691a8b87f85201f201f7c201c423f887c221342a9c0c689aece93" - "b2308584500440201142c7faf3c3ed82a3903c542014428d95c7c396d2da" - "c0977f542014428d95c7c396d2dac0977f511b450d0142a9c0c689aece93" - "b230211342ddb0858ce8b691a8b87f21292011212a201421110c020b2029" - "42deb0858ce8b691a8b87f54201342a9c0c689aece93b23054201342a9c0" - "c689aece93b230511b450d002011212a201421110c010b20132029201420" - "1142c7faf3c3ed82a3903c7d222a20115aad222d7d222742f3eab8bce9ad" - "a5bfe8007c2211202754ad2014202d54ad7d7c2214202954ad201442a2cf" - "faf397c9eed7c7007c2229201454ad7c50ad7d42a9c0c689aece93b2307d" - "21130b200341b8036a22012013370300200320293703b0032003202a3703" - "a003200320113703a80342ddb0858ce8b691a8b87f2114200341a0036a20" - "2a20112029201342c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b" - "2003201f3703d8012003201c3703d001200320123703c801200320173703" - "c001200341c0016a20032903a003222920032903a803222a20032903b003" - "222d2001290300222742c7faf3c3ed82a3903c428d95c7c396d2dac0977f" - "102b20184201862026423f888421112026420186212602400240201b4201" - "862018423f8884221842ddb0858ce8b691a8b87f85201a201a7c201b423f" - "887c221342a9c0c689aece93b2308584500440202642c7faf3c3ed82a390" - "3c542011428d95c7c396d2dac0977f542011428d95c7c396d2dac0977f51" - "1b450d012026211a2011211b42a9c0c689aece93b23021130c020b201842" - "deb0858ce8b691a8b87f54201342a9c0c689aece93b23054201342a9c0c6" - "89aece93b230511b450d002026211a2011211b201821140c010b20132018" - "2011202642c7faf3c3ed82a3903c7d221a20265aad22147d222642f3eab8" - "bce9ada5bfe8007c221b202654ad2011201454ad7d7c2211201854ad2011" - "42a2cffaf397c9eed7c7007c2214201154ad7c50ad7d42a9c0c689aece93" - "b2307d21130b20034198016a2201200341186a2903003703002003419001" - "6a2202200341106a29030037030020032003290308370388012003200329" - "03003703800142ddb0858ce8b691a8b87f212e20034180016a2029202a20" - "2d202742c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b200341b8" - "036a2204200341d8006a290300370300200341b0036a2205200341d0006a" - "290300370300200320032903483703a803200320032903403703a0032003" - "41a0036a20032903c001221120032903c801221820032903d00122272003" - "41d8016a290300222b42c7faf3c3ed82a3903c428d95c7c396d2dac0977f" - "102b200320133703b802200320143703b0022003201b3703a8022003201a" - "3703a002200429030021262005290300212920032903a803212a20032903" - "a003212d200341a0026a201a201b2014201342c7faf3c3ed82a3903c428d" - "95c7c396d2dac0977f102b200341a0026a201120182027202b42c7faf3c3" - "ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0" - "c689aece93b230102d200329038801222b4201862003290380012211423f" - "88842118201142018621270240024020022903002211420186202b423f88" - "84222b42ddb0858ce8b691a8b87f852011423f882001290300221120117c" - "7c221142a9c0c689aece93b2308584500440202742c7faf3c3ed82a3903c" - "542018428d95c7c396d2dac0977f542018428d95c7c396d2dac0977f511b" - "450d012027212f2018212742a9c0c689aece93b23021110c020b202b42de" - "b0858ce8b691a8b87f54201142a9c0c689aece93b23054201142a9c0c689" - "aece93b230511b450d002027212f20182127202b212e0c010b2011202b20" - "18202742c7faf3c3ed82a3903c7d222f20275aad222e7d221142f3eab8bc" - "e9ada5bfe8007c2227201154ad2018202e54ad7d7c2218202b54ad201842" - "a2cffaf397c9eed7c7007c222e201854ad7c50ad7d42a9c0c689aece93b2" - "307d21110b42ddb0858ce8b691a8b87f2118200341a0026a202f2027202e" - "201142c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b6" - "91a8b87f42a9c0c689aece93b230102d200320133703b801200320143703" - "b0012003201b3703a8012003201a3703a00120034180016a20032903a002" - "20032903a80220032903b002200341b8026a29030042c7faf3c3ed82a390" - "3c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece" - "93b230102d200341a0016a20032903800120032903880120032903900120" - "034198016a29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f10" - "2b202a420186202d423f88842114202d4201862111024002402029420186" - "202a423f8884221a42ddb0858ce8b691a8b87f85202620267c2029423f88" - "7c221342a9c0c689aece93b2308584500440201142c7faf3c3ed82a3903c" - "542014428d95c7c396d2dac0977f542014428d95c7c396d2dac0977f511b" - "450d012011211b2014211142a9c0c689aece93b23021130c020b201a42de" - "b0858ce8b691a8b87f54201342a9c0c689aece93b23054201342a9c0c689" - "aece93b230511b450d002011211b20142111201a21180c010b2013201a20" - "14201142c7faf3c3ed82a3903c7d221b20115aad22187d222642f3eab8bc" - "e9ada5bfe8007c2211202654ad2014201854ad7d7c2214201a54ad201442" - "a2cffaf397c9eed7c7007c2218201454ad7c50ad7d42a9c0c689aece93b2" - "307d21130b42ddb0858ce8b691a8b87f2114200341a0016a201b20112018" - "201342c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b6" - "91a8b87f42a9c0c689aece93b230102d02400240201520207c2213202320" - "247c2220202454ad2020201d20217c2224201d54ad7c2223202054ad7c7c" - "222042ddb0858ce8b691a8b87f852013201554ad2013202056ad7c201e20" - "227c7c222142a9c0c689aece93b2308584500440202442c7faf3c3ed82a3" - "903c542023428d95c7c396d2dac0977f542023428d95c7c396d2dac0977f" - "511b450d01202421222023211342a9c0c689aece93b23021210c020b2020" - "42deb0858ce8b691a8b87f54202142a9c0c689aece93b23054202142a9c0" - "c689aece93b230511b450d002024212220232113202021140c010b202120" - "202023202442c7faf3c3ed82a3903c7d222220245aad221d7d221542f3ea" - "b8bce9ada5bfe8007c2213201554ad201d202356ad7d7c2223202054ad20" - "2342a2cffaf397c9eed7c7007c2214202354ad7c50ad7d42a9c0c689aece" - "93b2307d21210b200341d8026a22012021370300200341d0026a22022014" - "370300200320223703c002200320133703c802200341c0026a2022201320" - "14202142c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b200341c0" - "026a202c20302031203242c7faf3c3ed82a3903c428d95c7c396d2dac097" - "7f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200341c0026a" - "201620192025202842c7faf3c3ed82a3903c428d95c7c396d2dac0977f42" - "ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200341c0026a2017" - "2012201c201f42c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b20" - "0041186a200341b8026a290300370300200041106a200341b0026a290300" - "370300200041086a20032903a802370300200020032903a0023703002000" - "20032903a001370320200041286a20032903a801370300200041306a2003" - "41b0016a290300370300200041386a200341b8016a290300370300200020" - "032903c002370340200041c8006a20032903c802370300200041d0006a20" - "02290300370300200041d8006a20012903003703000c030b200341b8036a" - "2204200141186a290300221b370300200341b0036a2205200141106a2903" - "0022183703002003200141086a29030022163703a8032003200129030022" - "193703a00342ddb0858ce8b691a8b87f2112200341a0036a201920162018" - "201b42c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2004290300" - "211d2005290300211520032903a803212420032903a003211f2004200141" - "206a220241186a2903003703002005200241106a29030037030020032002" - "41086a2903003703a803200320022903003703a003200341a0036a200129" - "0320200141286a2903002001290330200141386a29030042c7faf3c3ed82" - "a3903c428d95c7c396d2dac0977f102b2005290300211320032903a00321" - "1c20032903a8032117200420042903002225370300200320133703b00320" - "0320173703a8032003201c3703a003200341a0036a201c20172013202542" - "c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b2004290300211420" - "032903b003211e20032903a803211120032903a003211a02400240024020" - "1320187c2218201620177c2216201754ad20162019201c7c2219201c54ad" - "7c2217201654ad7c7c221c42ddb0858ce8b691a8b87f852013201856ad20" - "18201c56ad7c201b20257c7c221342a9c0c689aece93b230858450044020" - "1942c7faf3c3ed82a3903c542017428d95c7c396d2dac0977f542017428d" - "95c7c396d2dac0977f511b450d0242a9c0c689aece93b23021130c010b20" - "1c42deb0858ce8b691a8b87f54201342a9c0c689aece93b23054201342a9" - "c0c689aece93b230511b450d01201c21120b2019211b201721180c010b20" - "13201c2017201942c7faf3c3ed82a3903c7d221b20195aad22127d221642" - "f3eab8bce9ada5bfe8007c2218201654ad2012201756ad7d7c2217201c54" - "ad201742a2cffaf397c9eed7c7007c2212201754ad7c50ad7d42a9c0c689" - "aece93b2307d21130b200341b8036a22012013370300200341b0036a2204" - "20123703002003201b3703a003200320183703a80342ddb0858ce8b691a8" - "b87f211c200341a0036a201b20182012201342c7faf3c3ed82a3903c428d" - "95c7c396d2dac0977f102b20034198036a22052001290300370300200341" - "90036a22062004290300370300200320032903a803370388032003200329" - "03a0033703800320034180036a201f20242015201d42c7faf3c3ed82a390" - "3c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece" - "93b230102d20012005290300370300200420062903003703002003200329" - "0388033703a80320032003290380033703a003200341a0036a201a201120" - "1e201442c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8" - "b691a8b87f42a9c0c689aece93b230102d20032903a803221b4201862003" - "2903a0032213423f88842117201342018621120240024002402004290300" - "2213420186201b423f8884221642ddb0858ce8b691a8b87f852013423f88" - "2001290300221320137c7c221342a9c0c689aece93b23085845004402012" - "42c7faf3c3ed82a3903c542017428d95c7c396d2dac0977f542017428d95" - "c7c396d2dac0977f511b450d0242a9c0c689aece93b23021130c010b2016" - "42deb0858ce8b691a8b87f54201342a9c0c689aece93b23054201342a9c0" - "c689aece93b230511b450d012016211c0b2012211b201721180c010b2013" - "20162017201242c7faf3c3ed82a3903c7d221b20125aad221c7d221242f3" - "eab8bce9ada5bfe8007c2218201254ad2017201c54ad7d7c2217201654ad" - "201742a2cffaf397c9eed7c7007c221c201754ad7c50ad7d42a9c0c689ae" - "ce93b2307d21130b2024420186201f423f8884211742ddb0858ce8b691a8" - "b87f2116201f42018621190240024020154201862024423f8884222842dd" - "b0858ce8b691a8b87f85201d201d7c2015423f887c221242a9c0c689aece" - "93b2308584500440201942c7faf3c3ed82a3903c542017428d95c7c396d2" - "dac0977f542017428d95c7c396d2dac0977f511b450d0120192125201721" - "1942a9c0c689aece93b23021120c020b202842deb0858ce8b691a8b87f54" - "201242a9c0c689aece93b23054201242a9c0c689aece93b230511b450d00" - "2019212520172119202821160c010b201220282017201942c7faf3c3ed82" - "a3903c7d222520195aad22167d222c42f3eab8bce9ada5bfe8007c221920" - "2c54ad2016201756ad7d7c2217202854ad201742a2cffaf397c9eed7c700" - "7c2216201754ad7c50ad7d42a9c0c689aece93b2307d21120b42ddb0858c" - "e8b691a8b87f211702400240201520167c2228201920247c2215201954ad" - "2015201f20257c221f202554ad7c2219201554ad7c7c221542ddb0858ce8" - "b691a8b87f852016202856ad2015202854ad7c2012201d7c7c221d42a9c0" - "c689aece93b2308584500440201f42c7faf3c3ed82a3903c542019428d95" - "c7c396d2dac0977f542019428d95c7c396d2dac0977f511b450d01201f21" - "242019211f42a9c0c689aece93b230211d0c020b201542deb0858ce8b691" - "a8b87f54201d42a9c0c689aece93b23054201d42a9c0c689aece93b23051" - "1b450d00201f21242019211f201521170c010b201d20152019201f42c7fa" - "f3c3ed82a3903c7d2224201f5aad22177d221242f3eab8bce9ada5bfe800" - "7c221f201254ad2017201956ad7d7c2212201554ad201242a2cffaf397c9" - "eed7c7007c2217201254ad7c50ad7d42a9c0c689aece93b2307d211d0b20" - "0320173703b003200320243703a0032003201d3703b8032003201f3703a8" - "0342ddb0858ce8b691a8b87f2119200341a0036a2024201f2017201d42c7" - "faf3c3ed82a3903c428d95c7c396d2dac0977f102b2018420186201b423f" - "88842112201b420186211602400240201c4201862018423f8884222542dd" - "b0858ce8b691a8b87f85201320137c201c423f887c221542a9c0c689aece" - "93b2308584500440201642c7faf3c3ed82a3903c542012428d95c7c396d2" - "dac0977f542012428d95c7c396d2dac0977f511b450d0120162128201221" - "1642a9c0c689aece93b23021150c020b202542deb0858ce8b691a8b87f54" - "201542a9c0c689aece93b23054201542a9c0c689aece93b230511b450d00" - "2016212820122116202521190c010b201520252012201642c7faf3c3ed82" - "a3903c7d222820165aad22197d222c42f3eab8bce9ada5bfe8007c221620" - "2c54ad2012201954ad7d7c2212202554ad201242a2cffaf397c9eed7c700" - "7c2219201254ad7c50ad7d42a9c0c689aece93b2307d21150b42ddb0858c" - "e8b691a8b87f2112200341a0036a202820162019201542c7faf3c3ed82a3" - "903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689ae" - "ce93b230102d2011420186201a423f88842116201a420186211a02400240" - "201e4201862011423f8884221942ddb0858ce8b691a8b87f85201420147c" - "201e423f887c221542a9c0c689aece93b2308584500440201a42c7faf3c3" - "ed82a3903c542016428d95c7c396d2dac0977f542016428d95c7c396d2da" - "c0977f511b450d01201a21112016211a42a9c0c689aece93b23021150c02" - "0b201942deb0858ce8b691a8b87f54201542a9c0c689aece93b230542015" - "42a9c0c689aece93b230511b450d00201a21112016211a201921120c010b" - "201520192016201a42c7faf3c3ed82a3903c7d2211201a5aad22127d2214" - "42f3eab8bce9ada5bfe8007c221a201454ad2012201656ad7d7c22142019" - "54ad201442a2cffaf397c9eed7c7007c2212201454ad7c50ad7d42a9c0c6" - "89aece93b2307d21150b201a4201862011423f8884211e42ddb0858ce8b6" - "91a8b87f211420114201862111024002402012420186201a423f88842216" - "42ddb0858ce8b691a8b87f85201520157c2012423f887c221542a9c0c689" - "aece93b2308584500440201142c7faf3c3ed82a3903c54201e428d95c7c3" - "96d2dac0977f54201e428d95c7c396d2dac0977f511b450d012011211a20" - "1e211142a9c0c689aece93b23021150c020b201642deb0858ce8b691a8b8" - "7f54201542a9c0c689aece93b23054201542a9c0c689aece93b230511b45" - "0d002011211a201e2111201621140c010b20152016201e201142c7faf3c3" - "ed82a3903c7d221a20115aad22127d221442f3eab8bce9ada5bfe8007c22" - "11201454ad2012201e56ad7d7c2212201654ad201242a2cffaf397c9eed7" - "c7007c2214201254ad7c50ad7d42a9c0c689aece93b2307d21150b201142" - "0186201a423f8884211242ddb0858ce8b691a8b87f2116201a420186211e" - "0240024020144201862011423f8884221142ddb0858ce8b691a8b87f8520" - "1520157c2014423f887c221542a9c0c689aece93b2308584500440201e42" - "c7faf3c3ed82a3903c542012428d95c7c396d2dac0977f542012428d95c7" - "c396d2dac0977f511b450d01201e21142012211e42a9c0c689aece93b230" - "21150c020b201142deb0858ce8b691a8b87f54201542a9c0c689aece93b2" - "3054201542a9c0c689aece93b230511b450d00201e21142012211e201121" - "160c010b201520112012201e42c7faf3c3ed82a3903c7d2214201e5aad22" - "1a7d221642f3eab8bce9ada5bfe8007c221e201654ad2012201a54ad7d7c" - "2212201154ad201242a2cffaf397c9eed7c7007c2216201254ad7c50ad7d" - "42a9c0c689aece93b2307d21150b20034198036a2201200241186a290300" - "37030020034190036a2204200241106a2903003703002003200229030037" - "0380032003200241086a2903003703880342ddb0858ce8b691a8b87f2112" - "20034180036a202120232020202242c7faf3c3ed82a3903c428d95c7c396" - "d2dac0977f102b2003201d3703f802200320173703f0022003201f3703e8" - "02200320243703e002200129030021212004290300212320032903800321" - "22200329038803211d200120133703002003201c37039003200320183703" - "88032003201b3703800320034180036a20032903a00320032903a8032003" - "2903b003200341b8036a29030042c7faf3c3ed82a3903c428d95c7c396d2" - "dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200341" - "e0026a200329038003200329038803200329039003200129030042c7faf3" - "c3ed82a3903c428d95c7c396d2dac0977f102b200341e0026a2014201e20" - "16201542c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8" - "b691a8b87f42a9c0c689aece93b230102d201d4201862022423f88842120" - "20224201862122024002402023420186201d423f8884221342ddb0858ce8" - "b691a8b87f85202120217c2023423f887c222142a9c0c689aece93b23085" - "84500440202242c7faf3c3ed82a3903c542020428d95c7c396d2dac0977f" - "542020428d95c7c396d2dac0977f511b450d01202221232020212242a9c0" - "c689aece93b23021210c020b201342deb0858ce8b691a8b87f54202142a9" - "c0c689aece93b23054202142a9c0c689aece93b230511b450d0020222123" - "20202122201321120c010b202120132020202242c7faf3c3ed82a3903c7d" - "222320225aad221d7d221542f3eab8bce9ada5bfe8007c2222201554ad20" - "1d202056ad7d7c2220201354ad202042a2cffaf397c9eed7c7007c221220" - "2054ad7c50ad7d42a9c0c689aece93b2307d21210b200020123703502000" - "2023370340200020032903a003370300200020032903e002370320200020" - "2137035820002022370348200041086a20032903a803370300200041286a" - "20032903e802370300200041186a200341b8036a29030037030020004110" - "6a200341b0036a290300370300200041306a200341f0026a290300370300" - "200041386a200341f8026a2903003703000c020b2000200241e000104c1a" - "0c010b2000200141e000104c1a0b200341c0036a24000b970802067f087e" - "230041a0016b220224000240200129034022082001290350220984200141" - "c8006a290300220a200141d8006a290300220b8484420052044020024200" - "370318200242003703102002420037030820024201370300024020014140" - "6b2002104a450440200241206a2001290320220837030020002001290300" - "2209370310200041306a2008370300200241386a200141386a2903002208" - "370300200241306a200141306a290300220a370300200241286a20014128" - "6a290300220b370300200241106a200141106a290300220c370300200241" - "186a200141186a290300220d370300200041186a200141086a290300220e" - "370300200041206a200c370300200041286a200d370300200041386a200b" - "370300200041406b200a370300200041c8006a2008370300200220093703" - "002002200e3703080c010b20024198016a2204200b370300200220093703" - "900120022008370380012002200a37038801200242a9c0c689aece93b230" - "370318200242ddb0858ce8b691a8b87f3703102002428d95c7c396d2dac0" - "977f370308200242c7faf3c3ed82a3903c37030020024180016a2002103a" - "20022903800121082002290388012109200229039001210a200241186a22" - "032004290300220b3703002002200a370310200220093703082002200837" - "0300200220082009200a200b42c7faf3c3ed82a3903c428d95c7c396d2da" - "c0977f102b2003290300210c2002290310210d2002290308210e20022903" - "00210f200241d0006a2204200141106a290300370300200241d8006a2205" - "200141186a290300370300200220012903003703402002200141086a2903" - "00370348200241406b200f200e200d200c42c7faf3c3ed82a3903c428d95" - "c7c396d2dac0977f102b200241f8006a2206200141386a29030037030020" - "0241f0006a2207200141306a2903003703002002200141286a2903003703" - "68200220012903203703602003200b3703002002200a3703102002200937" - "0308200220083703002002200f200e200d200c42c7faf3c3ed82a3903c42" - "8d95c7c396d2dac0977f102b200241e0006a200229030020022903082002" - "290310200329030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f10" - "2b200320052903002208370300200241106a200429030022093703002002" - "41206a2002290360220a370300200241286a2002290368220b3703002002" - "41306a2007290300220c370300200241386a2006290300220d3703002000" - "2002290340220e370310200041186a2002290348220f370300200041206a" - "2009370300200041286a2008370300200041306a200a370300200041386a" - "200b370300200041406b200c370300200041c8006a200d3703002002200f" - "3703082002200e3703000b20004200370308200042013703000c010b2000" - "4200370308200042003703000b200241a0016a24000b3000200128021c20" - "002d0000410274220041cca5c0006a280200200041c0a5c0006a28020020" - "0128022028020c1103000bf917021d7f087e23004180066b220224002002" - "41b8036a2208200141386a290300370300200241b0036a2209200141306a" - "290300370300200241a8036a2213200141286a290300370300200241a003" - "6a2214200141206a29030037030020024198036a2203200141186a290300" - "37030020024190036a2204200141106a2903003703002002200129030037" - "0380032002200141086a2903003703880320024180036a20012001102f20" - "0241f8036a2205200141f8006a290300370300200241f0036a2206200141" - "f0006a290300370300200241e8036a2207200141e8006a29030037030020" - "0241e0036a220a200141e0006a290300370300200241d8036a220b200141" - "d8006a290300370300200241d0036a220c200141d0006a29030037030020" - "02200141c8006a2903003703c803200220012903403703c003200241c003" - "6a200141406b221e201e102f200241b8046a221520052903003703002002" - "41b0046a22162006290300370300200241a8046a22172007290300370300" - "200241a0046a2218200a29030037030020024198046a2219200b29030037" - "030020024190046a221a200c290300370300200220022903c80337038804" - "200220022903c0033703800420024180046a200241c0036a200241c0036a" - "102f200241c0026a2001200241c0036a1030200241f8046a221b200241f8" - "026a2205290300370300200241f0046a220e200241f0026a220a29030037" - "0300200241e8046a220f200241e8026a2206290300370300200241e0046a" - "2210200241e0026a220c290300370300200241d8046a220d200241d8026a" - "2207290300370300200241d0046a2211200241d0026a220b290300370300" - "200220022903c8023703c804200220022903c0023703c004200241c0046a" - "200241c0026a200241c0026a102f200241d8056a2212200d290300370300" - "200241d0056a220d2011290300370300200220022903c8043703c8052002" - "20022903c0043703c005200241c0056a2002290380032002290388032004" - "290300200329030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42" - "ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200241f8056a2203" - "201b290300370300200241f0056a2204200e2903003703002002200f2903" - "003703e805200220102903003703e005200241e0056a2014290300201329" - "03002009290300200829030042c7faf3c3ed82a3903c428d95c7c396d2da" - "c0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20024198" - "026a2208201229030037030020024190026a2209200d2903003703002002" - "41a8026a221320022903e805370300200241b0026a221420042903003703" - "00200241b8026a221b2003290300370300200220022903c8053703880220" - "0220022903c00537038002200220022903e0053703a00220122008290300" - "370300200d200929030037030020022002290388023703c8052002200229" - "0380023703c005200241c0056a200229038004200229038804201a290300" - "201929030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb085" - "8ce8b691a8b87f42a9c0c689aece93b230102d2003201b29030037030020" - "042014290300370300200220132903003703e805200220022903a0023703" - "e005200241e0056a201829030020172903002016290300201529030042c7" - "faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f" - "42a9c0c689aece93b230102d200241186a22152012290300370300200241" - "106a2216200d290300370300200241206a221720022903e0053703002002" - "41286a221820022903e805370300200241306a2219200429030037030020" - "0241386a221a2003290300370300200220022903c8053703082002200229" - "03c005370300200241c0026a200220021030201a20052903003703002019" - "200a290300370300201820062903003703002017200c2903003703002015" - "20072903003703002016200b290300370300200220022903c80237030820" - "0220022903c002370300200241c0026a20024180036a20024180036a1030" - "200241406b200241c0026a20024180036a103020024190056a220e200241" - "d0006a29030037030020024198056a220f200241d8006a29030037030020" - "0241a0056a2210200241e0006a290300370300200241a8056a2211200241" - "e8006a290300370300200241b0056a221c200241f0006a29030037030020" - "0241b8056a221d200241f8006a2903003703002002200229034037038005" - "200220022903483703880520024180056a200241406b200241406b102f20" - "0241c0026a2002200210302003200f2903003703002004200e2903003703" - "0020022002290388053703e80520022002290380053703e005200241e005" - "6a20022903c00220022903c80220022903d002200729030042c7faf3c3ed" - "82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c6" - "89aece93b230102d2008201d2903003703002009201c2903003703002002" - "201129030037038802200220102903003703800220024180026a20022903" - "e002200629030020022903f002200529030042c7faf3c3ed82a3903c428d" - "95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230" - "102d2008290300211f200929030021202003290300212120042903002122" - "2002290388022123200229038002212420022903e805212520022903e005" - "212620024180016a20024180046a20024180046a1030200241c0026a2002" - "4180016a20024180016a1030200241b8016a220e20052903003703002002" - "41b0016a220f200a290300370300200241a8016a22102006290300370300" - "200241a0016a2211200c29030037030020024198016a221c200729030037" - "030020024190016a221d200b290300370300200220022903c80237038801" - "200220022903c00237038001200241c0026a20024180016a20024180016a" - "1030200e2005290300370300200f200a2903003703002010200629030037" - "03002011200c290300370300201c2007290300370300201d200b29030037" - "0300200220022903c80237038801200220022903c00237038001200241c0" - "016a201e20014180016a102f200320152903003703002004201629030037" - "0300200220022903083703e805200220022903003703e005200241e0056a" - "202620252022202142c7faf3c3ed82a3903c428d95c7c396d2dac0977f42" - "ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2008201a29030037" - "030020092019290300370300200220182903003703880220022017290300" - "3703800220024180026a202420232020201f42c7faf3c3ed82a3903c428d" - "95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230" - "102d20072003290300370300200b20042903003703002006200229038802" - "370300200a200929030037030020052008290300370300200220022903e8" - "053703c802200220022903e0053703c00220022002290380023703e00220" - "024180026a200241406b200241c0026a102f20122008290300370300200d" - "200929030037030020022002290388023703c80520022002290380023703" - "c005200241c0056a200229038001200229038801201d290300201c290300" - "42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8" - "b87f42a9c0c689aece93b230102d2003201b290300370300200420142903" - "00370300200220132903003703e805200220022903a0023703e005200241" - "e0056a20112903002010290300200f290300200e29030042c7faf3c3ed82" - "a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689" - "aece93b230102d20072012290300370300200b200d290300370300200c20" - "022903e005370300200620022903e805370300200a200429030037030020" - "052003290300370300200220022903c8053703c802200220022903c00537" - "03c00220004180016a200241c0016a200241c0016a10302000201f370338" - "200020203703302000202337032820002024370320200020213703182000" - "20223703102000202537030820002026370300200020022903c002370340" - "200041c8006a20022903c802370300200041d0006a200b29030037030020" - "0041d8006a2007290300370300200041e0006a200c290300370300200041" - "e8006a2006290300370300200041f0006a200a290300370300200041f800" - "6a200529030037030020024180066a24000bbd21021c7f087e230041800b" - "6b22032400024002400240024020012903800120014188016a2903008442" - "00520d0020012903900120014198016a290300844200520d0020012903a0" - "01200141a8016a290300844200520d0020012903b001200141b8016a2903" - "0084500d010b024020022903800120024188016a290300844200520d0020" - "022903900120024198016a290300844200520d0020022903a001200241a8" - "016a290300844200520d0020022903b001200241b8016a29030084500d02" - "0b200341b8086a221420014180016a220441386a290300370300200341b0" - "086a200441306a290300370300200341a8086a2215200441286a29030037" - "0300200341a0086a200441206a29030037030020034198086a2216200441" - "186a29030037030020034190086a200441106a2903003703002003200429" - "0300370380082003200441086a2903003703880820034180086a20042004" - "102f200341f8086a221720024180016a220541386a290300370300200341" - "f0086a200541306a290300370300200341e8086a2218200541286a290300" - "370300200341e0086a200541206a290300370300200341d8086a22192005" - "41186a290300370300200341d0086a200541106a29030037030020032005" - "41086a2903003703c808200320052903003703c008200341c0086a200520" - "05102f20032001200341c0086a102f200341406b200220034180086a102f" - "20034180016a200420034180086a102f200341c0016a2005200341c0086a" - "102f20034180026a200141406b200341c0016a102f200341c0026a200241" - "406b20034180016a102f024002402003200341406b104a0d00200341206a" - "200341e0006a104a0d0020034180026a200341c0026a104a0d00200341a0" - "026a200341e0026a104a450d010b200341386a290300211f200341286a29" - "03002120200329033021212003290320212220034198076a2201200341d8" - "006a29030037030020034190076a2202200341d0006a2903003703002003" - "200329034837038807200320032903403703800720034180076a20032903" - "0020032903082003290310200341186a29030042c7faf3c3ed82a3903c42" - "8d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b2" - "30102d200341d8076a2206200341f8006a290300370300200341d0076a22" - "09200341f0006a2903003703002003200341e8006a2903003703c8072003" - "20032903603703c007200341c0076a202220202021201f42c7faf3c3ed82" - "a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689" - "aece93b230102d20034198036a200129030037030020034190036a200229" - "0300370300200341a8036a20032903c807370300200341b0036a20092903" - "00370300200341b8036a2006290300370300200320032903880737038803" - "200320032903800737038003200320032903c0073703a003200341b8026a" - "290300211f200341a8026a290300212020032903b002212120032903a002" - "21222001200341d8026a2903003703002002200341d0026a290300370300" - "200320032903c80237038807200320032903c0023703800720034180076a" - "20032903800220032903880220032903900220034198026a29030042c7fa" - "f3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42" - "a9c0c689aece93b230102d2006200341f8026a2903003703002009200341" - "f0026a2903003703002003200341e8026a2903003703c807200320032903" - "e0023703c007200341c0076a202220202021201f42c7faf3c3ed82a3903c" - "428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93" - "b230102d200341d8036a2001290300370300200341d0036a200229030037" - "0300200341e8036a20032903c807370300200341f0036a20092903003703" - "00200341f8036a200629030037030020032003290388073703c803200320" - "03290380073703c003200320032903c0073703e003200341c0076a200341" - "80036a20034180036a1030200341b8096a200341f8076a220c2903003703" - "00200341b0096a200341f0076a2211290300370300200341a8096a200341" - "e8076a220d290300370300200341a0096a200341e0076a221a2903003703" - "0020034198096a200629030037030020034190096a200929030037030020" - "0320032903c80737038809200320032903c0073703800920034180096a20" - "0341c0076a200341c0076a102f20034180046a20034180036a2003418009" - "6a102f200341c0046a200341c0036a200341c0036a103020034180056a20" - "0320034180096a102f200341c0056a20034180026a20034180046a102f20" - "0341d0096a220a200341d0046a290300370300200341d8096a2207200341" - "d8046a290300370300200341e0096a220b200341e0046a29030037030020" - "0341e8096a220e200341e8046a290300370300200341f0096a220f200341" - "f0046a290300370300200341f8096a2210200341f8046a29030037030020" - "0320032903c0043703c009200320032903c8043703c809200341c0096a20" - "0341c0046a200341c0046a102f200341d8066a2208200729030037030020" - "0341d0066a2207200a290300370300200320032903c8093703c806200320" - "032903c0093703c006200341c0066a200329038004200329038804200329" - "03900420034198046a29030042c7faf3c3ed82a3903c428d95c7c396d2da" - "c0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20062010" - "2903003703002009200f2903003703002003200e2903003703c807200320" - "0b2903003703c007200341c0076a20032903a004200341a8046a29030020" - "032903b004200341b8046a29030042c7faf3c3ed82a3903c428d95c7c396" - "d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2001" - "200829030037030020022007290300370300200341a8076a220e20032903" - "c807370300200341b0076a220f2009290300370300200341b8076a221020" - "06290300370300200320032903c80637038807200320032903c006370380" - "07200320032903c0073703a007200341c0076a20034180056a2003418005" - "6a103020034198066a2212200129030037030020034190066a2213200229" - "030037030020032003290388073703880620032003290380073703800620" - "034180066a20032903c00720032903c80720032903d007200629030042c7" - "faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f" - "42a9c0c689aece93b230102d200820102903003703002007200f29030037" - "03002003200e2903003703c806200320032903a0073703c006200341c006" - "6a20032903e007200d29030020032903f007200c29030042c7faf3c3ed82" - "a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689" - "aece93b230102d2008290300211f20072903002120201229030021212013" - "290300212220032903c806212320032903c0062124200329038806212520" - "03290380062126200820034198056a290300370300200720034190056a29" - "030037030020032003290388053703c80620032003290380053703c00620" - "0341c0066a202620252022202142c7faf3c3ed82a3903c428d95c7c396d2" - "dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200120" - "0341b8056a2903003703002002200341b0056a2903003703002003200341" - "a8056a29030037038807200320032903a0053703800720034180076a2024" - "20232020201f42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0" - "858ce8b691a8b87f42a9c0c689aece93b230102d20062008290300370300" - "20092007290300370300200d200329038807370300201120022903003703" - "00200c2001290300370300200320032903c8063703c807200320032903c0" - "063703c00720032003290380073703e00720034180076a200341c0046a20" - "0341c0076a102f200341c0076a200341c0056a200341c0056a1030200341" - "f80a6a220a2001290300370300200341f00a6a220b200229030037030020" - "032003290388073703e80a20032003290380073703e00a200341e00a6a20" - "032903c00720032903c80720032903d007200629030042c7faf3c3ed82a3" - "903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689ae" - "ce93b230102d200820102903003703002007200f2903003703002003200e" - "2903003703c806200320032903a0073703c006200341c0066a20032903e0" - "07200d29030020032903f007200c29030042c7faf3c3ed82a3903c428d95" - "c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b23010" - "2d2012200a2903003703002013200b290300370300200341a0066a221b20" - "032903c006370300200341a8066a221c20032903c806370300200341b006" - "6a221d2007290300370300200341b8066a221e2008290300370300200320" - "032903e80a37038806200320032903e00a37038006200341c0076a200420" - "051030200341b80a6a2204200c290300370300200341b00a6a2205201129" - "0300370300200341a80a6a220c200d290300370300200341a00a6a220d20" - "1a290300370300200341980a6a22112006290300370300200341900a6a22" - "062009290300370300200320032903c8073703880a200320032903c00737" - "03800a200341800a6a200341c0076a200341c0076a102f200a2011290300" - "370300200b2006290300370300200320032903880a3703e80a2003200329" - "03800a3703e00a200341e00a6a2003290380082003290388082003290390" - "08201629030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0" - "858ce8b691a8b87f42a9c0c689aece93b230102d20082004290300370300" - "200720052903003703002003200c2903003703c8062003200d2903003703" - "c006200341c0066a20032903a008201529030020032903b0082014290300" - "42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8" - "b87f42a9c0c689aece93b230102d2001200a2903003703002002200b2903" - "00370300200e20032903c806370300200f20072903003703002010200829" - "0300370300200320032903e80a37038807200320032903e00a3703800720" - "0320032903c0063703a007200341d80a6a22042001290300370300200341" - "d00a6a2201200229030037030020032003290388073703c80a2003200329" - "0380073703c00a200341c00a6a20032903c00820032903c80820032903d0" - "08201929030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0" - "858ce8b691a8b87f42a9c0c689aece93b230102d200a2010290300370300" - "200b200f2903003703002003200e2903003703e80a200320032903a00737" - "03e00a200341e00a6a20032903e008201829030020032903f00820172903" - "0042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691" - "a8b87f42a9c0c689aece93b230102d200820042903003703002007200129" - "0300370300200341e8066a20032903e80a370300200341f0066a200b2903" - "00370300200341f8066a200a290300370300200320032903c80a3703c806" - "200320032903c00a3703c006200320032903e00a3703e00620004180016a" - "200341c0066a20034180036a102f2000201f370338200020203703302000" - "202337032820002024370320200020213703182000202237031020002025" - "370308200020263703002000200329038006370340200041c8006a200329" - "038806370300200041d0006a2013290300370300200041d8006a20122903" - "00370300200041e0006a201b290300370300200041e8006a201c29030037" - "0300200041f0006a201d290300370300200041f8006a201e290300370300" - "0c030b2000200110430c020b2000200241c001104c1a0c010b2000200141" - "c001104c1a0b200341800b6a24000bf50602037f067e230041c0026b2202" - "24000240024002400240024020012903800120014188016a290300844200" - "520d0020012903900120014198016a290300844200520d0020012903a001" - "200141a8016a290300844200520d0020012903b001200141b8016a290300" - "84500d010b200241d8006a4200370300200241e0006a2204420037030020" - "0241e8006a4200370300200241f0006a4200370300200241f8006a420037" - "030020024200370348200242013703402002420037035020014180016a22" - "03200241406b104a450440200141a0016a2004104a450d020b200241406b" - "200310312002280240410171450d02200241386a20024188016a29030022" - "05370300200241306a20024180016a22032903002206370300200241286a" - "200241f8006a2903002207370300200241206a200241f0006a2903002208" - "370300200241186a200241e8006a2903002209370300200241106a200241" - "e0006a290300220a37030020024190026a200a37030020024198026a2009" - "370300200241a0026a2008370300200241a8026a2007370300200241b002" - "6a2006370300200241b8026a200537030020022002290350220537030020" - "02200241d8006a2903002206370308200220053703800220022006370388" - "0220024180026a20022002102f200241406b200120024180026a102f2002" - "41c0016a200220024180026a102f2003200141406b200241c0016a102f20" - "0041106a200241406b418001104c1a20004200370308200042013703000c" - "030b20004200370308200042003703000c020b200241b8016a200141f800" - "6a290300370300200241b0016a200141f0006a290300370300200241a801" - "6a200141e8006a290300370300200241a0016a200141e0006a2903003703" - "0020024198016a200141d8006a29030037030020024190016a200141d000" - "6a29030037030020024188016a200141c8006a290300370300200241d000" - "6a200141106a290300370300200241d8006a200141186a29030037030020" - "0241e0006a200141206a290300370300200241e8006a200141286a290300" - "370300200241f0006a200141306a290300370300200241f8006a20014138" - "6a2903003703002002200129034037038001200220012903003703402002" - "200141086a290300370348200041106a200241406b418001104c1a200042" - "00370308200042013703000c010b4194a1c0001020000b200241c0026a24" - "000bd64502497f107e230041a00f6b22022400200241386a223f200141f8" - "006a220e290300370300200241306a2240200141f0006a220f2903003703" - "00200241286a2241200141e8006a2210290300370300200241206a224220" - "0141e0006a2211290300370300200241186a2243200141d8006a22122903" - "00370300200241106a2244200141d0006a22202903003703002002200129" - "03403703002002200141c8006a2221290300370308200141a8016a222329" - "03002153200141a0016a22242903002154200141b8016a22252903002155" - "200141b0016a2230290300215620014188016a2235290300215720014198" - "016a2236290300215820014190016a22372903002159200129038001215a" - "200241f8006a200141f8016a2213290300370300200241f0006a200141f0" - "016a2214290300370300200241e8006a200141e8016a2215290300370300" - "200241e0006a200141e0016a2216290300370300200241d8006a200141d8" - "016a2217290300370300200241d0006a200141d0016a220d290300370300" - "20024190016a20014190026a220429030037030020024198016a20014198" - "026a2206290300370300200241a0016a200141a0026a2207290300370300" - "200241a8016a200141a8026a2208290300370300200241b0016a200141b0" - "026a2205290300370300200241b8016a200141b8026a2209290300370300" - "2002200141c8016a2222290300370348200220012903c001370340200220" - "012903800237038001200220014188026a220a29030037038801200241f8" - "016a200141f8026a2238290300370300200241f0016a200141f0026a2245" - "290300370300200241e8016a200141e8026a2246290300370300200241e0" - "016a200141e0026a2247290300370300200241d8016a200141d8026a2248" - "290300370300200241d0016a200141d0026a2249290300370300200241b8" - "026a2226200141386a2231290300370300200241b0026a2227200141306a" - "2232290300370300200241a8026a2228200141286a223a29030037030020" - "0241a0026a2229200141206a223b29030037030020024198026a222a2001" - "41186a223c29030037030020024190026a222b200141106a223d29030037" - "03002002200141c8026a224a2903003703c801200220012903c0023703c0" - "012002200141086a223e2903003703880220022001290300370380022002" - "4180026a200120014180026a2203102f200241f8026a2219203129030037" - "0300200241f0026a221a2032290300370300200241e8026a221b203a2903" - "00370300200241e0026a221c203b290300370300200241d8026a221d203c" - "290300370300200241d0026a221e203d2903003703002002203e29030037" - "03c802200220012903003703c002200241c0026a200120031030200241b8" - "036a220b2009290300370300200241b0036a220920052903003703002002" - "41a8036a22052008290300370300200241a0036a220c2007290300370300" - "20024198036a2218200629030037030020024190036a221f200429030037" - "0300200242003703b80d200242003703b00d200242003703a80d20024201" - "3703a00d200242003703980d200242003703900d200242003703880d2002" - "42093703800d2002200a2903003703880320022001290380023703800320" - "024180036a2003200241800d6a102f200241c00b6a20024180036a200110" - "30200b200241f80b6a22062903003703002009200241f00b6a2207290300" - "3703002005200241e80b6a2208290300370300200c200241e00b6a220529" - "03003703002018200241d80b6a2203290300370300201f200241d00b6a22" - "04290300370300200220022903c80b37038803200220022903c00b370380" - "03200241c00b6a200241c0026a20024180036a102f201920062903003703" - "00201a2007290300370300201b2008290300370300201c20052903003703" - "00201d2003290300370300201e2004290300370300200220022903c80b37" - "03c802200220022903c00b3703c002200241980f6a220b201d2903003703" - "00200241900f6a220c201e290300370300200220022903c8023703880f20" - "0220022903c0023703800f200241800f6a20022903800220022903880220" - "2b290300202a29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f" - "42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200241980a6a22" - "092019290300370300200241900a6a220a201a2903003703002002201b29" - "03003703880a2002201c2903003703800a200241800a6a20292903002028" - "2903002027290300202629030042c7faf3c3ed82a3903c428d95c7c396d2" - "dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200320" - "0b290300224b3703002004200c290300224c370300200520022903800a22" - "4d3703002007200a290300224e370300200820022903880a224f37030020" - "0620092903002250370300200220022903880f22513703c80b2002200229" - "03800f22523703c00b20192050370300201a204e370300201b204f370300" - "201c204d370300201d204b370300201e204c370300200220513703c80220" - "0220523703c002200241c0036a20024180026a200241800d6a102f200b20" - "1d290300370300200c201e290300370300200220022903c8023703880f20" - "0220022903c0023703800f200241800f6a20022903c00320022903c80320" - "022903d003200241d8036a29030042c7faf3c3ed82a3903c428d95c7c396" - "d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2009" - "2019290300370300200a201a2903003703002002201b2903003703880a20" - "02201c2903003703800a200241800a6a20022903e003200241e8036a2903" - "0020022903f003200241f8036a29030042c7faf3c3ed82a3903c428d95c7" - "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d" - "2003200b290300224b3703002004200c290300224c370300200520022903" - "800a224d3703002007200a290300224e370300200820022903880a224f37" - "0300200620092903002250370300200220022903880f22513703c80b2002" - "20022903800f22523703c00b20192050370300201a204e370300201b204f" - "370300201c204d370300201d204b370300201e204c370300200220513703" - "c802200220523703c002200241c00b6a20024180026a20024180026a1030" - "202620062903003703002027200729030037030020282008290300370300" - "20292005290300370300202a2003290300370300202b2004290300370300" - "200220022903c80b37038802200220022903c00b3703800220024190046a" - "221f200d29030037030020024198046a222c2017290300370300200241a0" - "046a222d2016290300370300200241a8046a222e20152903003703002002" - "41b0046a222f2014290300370300200241b8046a22392013290300370300" - "200220012903c00137038004200220222903003703880420024180046a20" - "0141c0016a223320014180016a2234102f200241f8046a22182013290300" - "370300200241f0046a22132014290300370300200241e8046a2214201529" - "0300370300200241e0046a22152016290300370300200241d8046a221620" - "17290300370300200241d0046a2217200d29030037030020022022290300" - "3703c804200220012903c0013703c004200241c0046a2033203410302002" - "41b8056a220d2025290300370300200241b0056a22222030290300370300" - "200241a8056a22252023290300370300200241a0056a2223202429030037" - "030020024198056a2224203629030037030020024190056a223020372903" - "003703002002203529030037038805200220012903800137038005200241" - "80056a2034200241800d6a102f200241c00b6a20024180056a2033103020" - "0d2006290300370300202220072903003703002025200829030037030020" - "232005290300370300202420032903003703002030200429030037030020" - "0220022903c80b37038805200220022903c00b37038005200241c00b6a20" - "0241c0046a20024180056a102f2018200629030037030020132007290300" - "370300201420082903003703002015200529030037030020162003290300" - "37030020172004290300370300200220022903c80b3703c8042002200229" - "03c00b3703c004200b2016290300370300200c2017290300370300200220" - "022903c8043703880f200220022903c0043703800f200241800f6a200229" - "038004200229038804201f290300202c29030042c7faf3c3ed82a3903c42" - "8d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b2" - "30102d20092018290300370300200a201329030037030020022014290300" - "3703880a200220152903003703800a200241800a6a202d290300202e2903" - "00202f290300203929030042c7faf3c3ed82a3903c428d95c7c396d2dac0" - "977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2003200b29" - "0300224b3703002004200c290300224c370300200520022903800a224d37" - "03002007200a290300224e370300200820022903880a224f370300200620" - "092903002250370300200220022903880f22513703c80b20022002290380" - "0f22523703c00b201820503703002013204e3703002014204f3703002015" - "204d3703002016204b3703002017204c370300200220513703c804200220" - "523703c004200241c0056a20024180046a200241800d6a102f200b201629" - "0300370300200c2017290300370300200220022903c8043703880f200220" - "022903c0043703800f200241800f6a20022903c00520022903c805200229" - "03d005200241d8056a29030042c7faf3c3ed82a3903c428d95c7c396d2da" - "c0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20092018" - "290300370300200a2013290300370300200220142903003703880a200220" - "152903003703800a200241800a6a20022903e005200241e8056a29030020" - "022903f005200241f8056a29030042c7faf3c3ed82a3903c428d95c7c396" - "d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2003" - "200b290300224b3703002004200c290300224c370300200520022903800a" - "224d3703002007200a290300224e370300200820022903880a224f370300" - "200620092903002250370300200220022903880f22513703c80b20022002" - "2903800f22523703c00b201820503703002013204e3703002014204f3703" - "002015204d3703002016204b3703002017204c370300200220513703c804" - "200220523703c004200241c00b6a20024180046a20024180046a10302039" - "2006290300370300202f2007290300370300202e2008290300370300202d" - "2005290300370300202c2003290300370300201f20042903003703002002" - "20022903c80b37038804200220022903c00b3703800420024190066a2222" - "202029030037030020024198066a22332012290300370300200241a0066a" - "22342011290300370300200241a8066a22232010290300370300200241b0" - "066a2224200f290300370300200241b8066a2225200e2903003703002002" - "200129034037038006200220212903003703880620024180066a20014140" - "6b200141c0026a2230102f200241f8066a220d200e290300370300200241" - "f0066a220e200f290300370300200241e8066a220f201029030037030020" - "0241e0066a22102011290300370300200241d8066a221120122903003703" - "00200241d0066a22122020290300370300200220212903003703c8062002" - "20012903403703c006200241c0066a200220301030200241b8076a222020" - "38290300370300200241b0076a22212045290300370300200241a8076a22" - "352046290300370300200241a0076a223620472903003703002002419807" - "6a2237204829030037030020024190076a22382049290300370300200220" - "4a29030037038807200220012903c0023703800720024180076a20302002" - "41800d6a102f200241c00b6a20024180076a200210302020200629030037" - "030020212007290300370300203520082903003703002036200529030037" - "03002037200329030037030020382004290300370300200220022903c80b" - "37038807200220022903c00b37038007200241c00b6a200241c0066a2002" - "4180076a102f200d2006290300370300200e2007290300370300200f2008" - "290300370300201020052903003703002011200329030037030020122004" - "290300370300200220022903c80b3703c806200220022903c00b3703c006" - "200b2011290300370300200c2012290300370300200220022903c8063703" - "880f200220022903c0063703800f200241800f6a20022903800620022903" - "88062022290300203329030042c7faf3c3ed82a3903c428d95c7c396d2da" - "c0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2009200d" - "290300370300200a200e2903003703002002200f2903003703880a200220" - "102903003703800a200241800a6a20342903002023290300202429030020" - "2529030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858c" - "e8b691a8b87f42a9c0c689aece93b230102d2003200b290300224b370300" - "2004200c290300224c370300200520022903800a224d3703002007200a29" - "0300224e370300200820022903880a224f37030020062009290300225037" - "0300200220022903880f22513703c80b200220022903800f22523703c00b" - "200d2050370300200e204e370300200f204f3703002010204d3703002011" - "204b3703002012204c370300200220513703c806200220523703c0062002" - "41c0076a20024180066a200241800d6a102f200b2011290300370300200c" - "2012290300370300200220022903c8063703880f200220022903c0063703" - "800f200241800f6a20022903c00720022903c80720022903d007200241d8" - "076a29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb085" - "8ce8b691a8b87f42a9c0c689aece93b230102d2009200d29030037030020" - "0a200e2903003703002002200f2903003703880a20022010290300370380" - "0a200241800a6a20022903e007200241e8076a29030020022903f0072002" - "41f8076a29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42dd" - "b0858ce8b691a8b87f42a9c0c689aece93b230102d2003200b290300224b" - "3703002004200c290300224c370300200520022903800a224d3703002007" - "200a290300224e370300200820022903880a224f37030020062009290300" - "2250370300200220022903880f22513703c80b200220022903800f225237" - "03c00b200d2050370300200e204e370300200f204f3703002010204d3703" - "002011204b3703002012204c370300200220513703c806200220523703c0" - "06200241c00b6a20024180066a20024180066a1030202520062903003703" - "002024200729030037030020232008290300370300203420052903003703" - "002033200329030037030020222004290300370300200220022903c80b37" - "038806200220022903c00b370380062009201d290300370300200a201e29" - "0300370300200220022903c8023703880a200220022903c0023703800a20" - "0241800a6a2001290300203e290300203d290300203c29030042c7faf3c3" - "ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0" - "c689aece93b230102d200320192903003703002004201a29030037030020" - "02201b2903003703c80b2002201c2903003703c00b200241c00b6a203b29" - "0300203a2903002032290300203129030042c7faf3c3ed82a3903c428d95" - "c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b23010" - "2d200241d80d6a221c2009290300370300200241d00d6a221d200a290300" - "370300200241e00d6a221e20022903c00b370300200241e80d6a22202002" - "2903c80b370300200241f00d6a22212004290300370300200241f80d6a22" - "312003290300370300200220022903880a3703c80d200220022903800a37" - "03c00d200241c00b6a200241c00d6a200241c00d6a103020312006290300" - "3703002021200729030037030020202008290300370300201e2005290300" - "370300201c2003290300370300201d2004290300370300200220022903c8" - "0b3703c80d200220022903c00b3703c00d200241c00b6a200241c00d6a20" - "0241c0026a10302031200629030037030020212007290300370300202020" - "08290300370300201e2005290300370300201c2003290300370300201d20" - "0429030037030020024190086a2232202b29030037030020024198086a22" - "2b202a290300370300200241a0086a222a2029290300370300200241a808" - "6a22292028290300370300200241b0086a22282027290300370300200241" - "b8086a22272026290300370300200220022903c80b3703c80d2002200229" - "03c00b3703c00d2002200229038002370380082002200229038802370388" - "0820024180086a20024180026a20024180016a1030200241c00b6a200241" - "80086a20024180086a103020272006290300370300202820072903003703" - "0020292008290300370300202a2005290300370300202b20032903003703" - "0020322004290300370300200220022903c80b37038808200220022903c0" - "0b37038008200241c00b6a20024180086a20024180026a10302027200629" - "03003703002028200729030037030020292008290300370300202a200529" - "0300370300202b200329030037030020322004290300370300200241d008" - "6a22012022290300370300200241d8086a220b2033290300370300200241" - "e0086a220c2034290300370300200241e8086a2219202329030037030020" - "0241f0086a221a2024290300370300200241f8086a221b20252903003703" - "00200220022903c80b37038808200220022903c00b370380082002200229" - "0380063703c00820022002290388063703c808200241c0086a2002418006" - "6a200241800d6a102f200241c00b6a200241c0086a200241406b1030201b" - "2006290300370300201a200729030037030020192008290300370300200c" - "2005290300370300200b2003290300370300200120042903003703002002" - "20022903c80b3703c808200220022903c00b3703c008200241c00b6a2002" - "41c0086a200241c0086a1030201b2006290300370300201a200729030037" - "030020192008290300370300200c2005290300370300200b200329030037" - "030020012004290300370300200220022903c80b3703c808200220022903" - "c00b3703c00820024180096a20024180066a200241800d6a102f200241c0" - "0b6a200241c0086a20024180096a1030201b2006290300370300201a2007" - "29030037030020192008290300370300200c2005290300370300200b2003" - "29030037030020012004290300370300200220022903c80b3703c8082002" - "20022903c00b3703c00820092011290300370300200a2012290300370300" - "200220022903c8063703880a200220022903c0063703800a200241800a6a" - "205a20572059205842c7faf3c3ed82a3903c428d95c7c396d2dac0977f42" - "ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2003200d29030037" - "03002004200e2903003703002002200f2903003703c80b20022010290300" - "3703c00b200241c00b6a205420532056205542c7faf3c3ed82a3903c428d" - "95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230" - "102d200241980e6a220d2009290300370300200241900e6a220e200a2903" - "00370300200241a00e6a220f20022903c00b370300200241a80e6a221020" - "022903c80b370300200241b00e6a22112004290300370300200241b80e6a" - "22122003290300370300200220022903880a3703880e200220022903800a" - "3703800e200241c00b6a200241800e6a200241800e6a1030201220062903" - "003703002011200729030037030020102008290300370300200f20052903" - "00370300200d2003290300370300200e2004290300370300200220022903" - "c80b3703880e200220022903c00b3703800e200241c00b6a200241800e6a" - "200241c0066a103020122006290300370300201120072903003703002010" - "2008290300370300200f2005290300370300200d2003290300370300200e" - "2004290300370300200220022903c80b3703880e200220022903c00b3703" - "800e20092016290300370300200a2017290300370300200220022903c804" - "3703880a200220022903c0043703800a200241800a6a2002290300200229" - "03082044290300204329030042c7faf3c3ed82a3903c428d95c7c396d2da" - "c0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20032018" - "29030037030020042013290300370300200220142903003703c80b200220" - "152903003703c00b200241c00b6a20422903002041290300204029030020" - "3f29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858c" - "e8b691a8b87f42a9c0c689aece93b230102d200241d80e6a221820092903" - "00370300200241d00e6a2213200a290300370300200241e00e6a22142002" - "2903c00b370300200241e80e6a221520022903c80b370300200241f00e6a" - "22162004290300370300200241f80e6a2217200329030037030020022002" - "2903880a3703c80e200220022903800a3703c00e200241c00b6a200241c0" - "0e6a200241c00e6a10302017200629030037030020162007290300370300" - "201520082903003703002014200529030037030020182003290300370300" - "20132004290300370300200220022903c80b3703c80e200220022903c00b" - "3703c00e200241c00b6a200241c00e6a200241c0046a1030201720062903" - "003703002016200729030037030020152008290300370300201420052903" - "003703002018200329030037030020132004290300370300200241d0096a" - "2226201f290300370300200241d8096a221f202c290300370300200241e0" - "096a222c202d290300370300200241e8096a222d202e2903003703002002" - "41f0096a222e202f290300370300200241f8096a222f2039290300370300" - "200220022903c80b3703c80e200220022903c00b3703c00e200220022903" - "80043703c00920022002290388043703c809200241c0096a20024180046a" - "200241c0016a1030200241c00b6a200241c0096a200241c0096a1030202f" - "2006290300370300202e2007290300370300202d2008290300370300202c" - "2005290300370300201f2003290300370300202620042903003703002002" - "20022903c80b3703c809200220022903c00b3703c009200241c00b6a2002" - "41c0096a20024180046a1030202f2006290300370300202e200729030037" - "0300202d2008290300370300202c2005290300370300201f200329030037" - "030020262004290300370300200220022903c80b3703c809200220022903" - "c00b3703c009200241b80a6a2031290300370300200241b00a6a20212903" - "00370300200241a80a6a2020290300370300200241a00a6a201e29030037" - "03002009201c290300370300200a201d290300370300200220022903c80d" - "3703880a200220022903c00d3703800a200241c80a6a20022903c80e3703" - "00200241d00a6a2013290300370300200241d80a6a201829030037030020" - "0241e00a6a2014290300370300200241e80a6a2015290300370300200241" - "f00a6a2016290300370300200241f80a6a20172903003703002002200229" - "03c00e3703c00a200241b80b6a2012290300370300200241b00b6a201129" - "0300370300200241a80b6a2010290300370300200241a00b6a200f290300" - "370300200241980b6a200d290300370300200241900b6a200e2903003703" - "00200241880b6a20022903880e370300200220022903800e3703800b2006" - "201b2903003703002007201a290300370300200820192903003703002005" - "200c2903003703002003200b290300370300200420012903003703002002" - "20022903c8083703c80b200220022903c0083703c00b200241880c6a2002" - "29038808370300200241900c6a2032290300370300200241980c6a202b29" - "0300370300200241a00c6a202a290300370300200241a80c6a2029290300" - "370300200241b00c6a2028290300370300200241b80c6a20272903003703" - "0020022002290380083703800c200241f80c6a202f290300370300200241" - "f00c6a202e290300370300200241e80c6a202d290300370300200241e00c" - "6a202c290300370300200241d80c6a201f290300370300200241d00c6a20" - "26290300370300200241c80c6a20022903c809370300200220022903c009" - "3703c00c2000200241800a6a41c001104c41c0016a200241c00b6a41c001" - "104c1a200241a00f6a24000bcc1101047f23004180026b22032400024020" - "024101712206450440200341386a200141386a290300370300200341306a" - "200141306a290300370300200341286a200141286a290300370300200341" - "206a200141206a290300370300200341186a200141186a29030037030020" - "0341106a200141106a290300370300200320012903003703002003200141" - "086a29030037030820034190016a200141d0006a29030037030020034198" - "016a200141d8006a290300370300200341a0016a200141e0006a29030037" - "0300200341a8016a200141e8006a290300370300200341b0016a200141f0" - "006a290300370300200341b8016a200141f8006a29030037030020032001" - "290340370380012003200141c8006a290300370388010c010b200341d801" - "6a2204200141386a290300370300200341d0016a2205200141306a290300" - "370300200320012903203703c0012003200141286a2903003703c8012003" - "41c0016a42c6faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858c" - "e8b691a8b87f42a9c0c689aece93b23042c7faf3c3ed82a3903c428d95c7" - "c396d2dac0977f102b200341186a200141186a290300370300200341106a" - "200141106a290300370300200341286a20032903c801370300200341306a" - "2005290300370300200341386a20042903003703002003200141086a2903" - "0037030820032001290300370300200320032903c0013703202004200141" - "f8006a2903003703002005200141f0006a2903003703002003200141e800" - "6a2903003703c801200320012903603703c001200341c0016a42c6faf3c3" - "ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0" - "c689aece93b23042c7faf3c3ed82a3903c428d95c7c396d2dac0977f102b" - "20034198016a200141d8006a29030037030020034190016a200141d0006a" - "290300370300200341a8016a20032903c801370300200341b0016a200529" - "0300370300200341b8016a20042903003703002003200141c8006a290300" - "370388012003200129034037038001200320032903c0013703a0010b0240" - "0240024002402002410670220441026b0e020102000b200342a0dcae8f86" - "aaf9e4163703f801200342948fe8babd91b3d2cb003703f001200342cebb" - "f2dbd0c38ad7323703e801200342a297bfa0c6a3f5b2163703e001200342" - "f7a3e4fb84f3d1d92f3703d801200342c3e2e6aacf87fb85cc003703d001" - "2003428ce68c968ce2b0c6b77f3703c801200342bdaabdbbf1aae5f1997f" - "3703c0010c020b200341e0016a22024200370300200241086a4200370300" - "200241106a4200370300200241186a4200370300200342a9c0c689aece93" - "b2303703d801200342b099b385febcf6b6de003703d001200342bddcd9dc" - "fbd3c1c7423703c801200342c8faf383d69cd1de643703c0010c010b2003" - "42efecc59e9bc8f7f8043703f801200342cf9298e1decdc3f9a97f3703f0" - "01200342b1ccfcc7f9b7ccef0f3703e801200342de8d96d5bae5aa863837" - "03e0012003428aded7ba8b8fb8ab083703d801200342accbfcacf98ec7ff" - "ba7f3703d001200342d385a5ebd5a7ffaf807f3703c801200342edf6f3de" - "87dd9bbafb003703c0010b20014180016a2102200341406b20034180016a" - "200341c0016a102f02402006450440200341b8016a200241386a29030037" - "0300200341b0016a200241306a290300370300200341a8016a200241286a" - "290300370300200341a0016a200241206a29030037030020034198016a20" - "0241186a29030037030020034190016a200241106a290300370300200320" - "02290300370380012003200241086a290300370388010c010b200341d801" - "6a2206200141b8016a290300370300200341d0016a2205200141b0016a29" - "0300370300200320012903a0013703c0012003200141a8016a2903003703" - "c801200341c0016a42c6faf3c3ed82a3903c428d95c7c396d2dac0977f42" - "ddb0858ce8b691a8b87f42a9c0c689aece93b23042c7faf3c3ed82a3903c" - "428d95c7c396d2dac0977f102b20034198016a200241186a290300370300" - "20034190016a200241106a290300370300200341a8016a20032903c80137" - "0300200341b0016a2005290300370300200341b8016a2006290300370300" - "2003200241086a2903003703880120032002290300370380012003200329" - "03c0013703a0010b0240024002400240200441026b0e020102000b200342" - "ee95f6bfbedb978a2c3703f80120034292b9acd88396a09d9f7f3703f001" - "200342e38efbdea1ddf4c2363703e801200342a682aee99ce2d19d413703" - "e00120034281d0baa7e6ebd3da053703d80120034284bde0d0f596f0f980" - "7f3703d001200342f2d8d3f4fbbed999533703c801200342e2cefa90d9ea" - "87c5847f3703c0010c020b200341e0016a22014200370300200141086a42" - "00370300200141106a4200370300200141186a4200370300200342003703" - "d801200342ac97d286eaf99af1d9003703d001200342cfb8ede69afe98f9" - "543703c801200342feffffbf97e6d1b1d7003703c0010c010b2003429294" - "c48c9eb3faea233703f80120034284bac8e6f0ddbdd87e3703f001200342" - "e5adfe9b87c1a7a5a47f3703e8012003429fc7b098d7b3fbf1df003703e0" - "01200342ab9b828ee18ce3e20b3703d801200342ce88c9adfb9eb8df1937" - "03d001200342cbd7c1add7a8c299663703c801200342e6e0afe6c3d7a48d" - "0e3703c0010b20004180016a20034180016a200341c0016a102f20004138" - "6a200341386a290300370300200041306a200341306a2903003703002000" - "41286a200341286a290300370300200041206a200341206a290300370300" - "200041186a200341186a290300370300200041106a200341106a29030037" - "0300200041086a2003290308370300200020032903003703002000200329" - "0340370340200041c8006a2003290348370300200041d0006a200341d000" - "6a290300370300200041d8006a200341d8006a290300370300200041e000" - "6a200341e0006a290300370300200041e8006a200341e8006a2903003703" - "00200041f0006a200341f0006a290300370300200041f8006a200341f800" - "6a29030037030020034180026a24000bbd46027c7f107e230041e00b6b22" - "052400200541b8016a2234200141b8016a2235290300370300200541b001" - "6a2236200141b0016a2237290300370300200541a8016a2238200141a801" - "6a2239290300370300200541a0016a223a200141a0016a223b2903003703" - "0020054198016a223c20014198016a223d29030037030020054190016a22" - "3e20014190016a223f290300370300200541d0016a222e200141d0016a22" - "4f290300370300200541d8016a222f200141d8016a225029030037030020" - "0541e0016a2230200141e0016a2251290300370300200541e8016a223120" - "0141e8016a2252290300370300200541f0016a2232200141f0016a225329" - "0300370300200541f8016a2233200141f8016a2254290300370300200520" - "012903800137038001200520012903c0013703c001200520014188016a22" - "40290300370388012005200141c8016a22552903003703c801200541b802" - "6a2256200141f8026a2220290300370300200541b0026a2257200141f002" - "6a2221290300370300200541a8026a2258200141e8026a22282903003703" - "00200541a0026a2259200141e0026a222929030037030020054198026a22" - "5a200141d8026a222a29030037030020054190026a225b200141d0026a22" - "2b290300370300200541d0026a2241200141106a22062903003703002005" - "41d8026a2242200141186a2207290300370300200541e0026a2243200141" - "206a2208290300370300200541e8026a2244200141286a22092903003703" - "00200541f0026a2245200141306a220a290300370300200541f8026a2246" - "200141386a220b2903003703002005200141c8026a222c29030037038802" - "200520012903c00237038002200520012903003703c0022005200141086a" - "220c2903003703c802200541c0026a20012002102f200541b8036a225c20" - "35290300370300200541b0036a225d2037290300370300200541a8036a22" - "5e2039290300370300200541a0036a225f203b2903003703002005419803" - "6a2260203d29030037030020054190036a2261203f290300370300200520" - "402903003703880320052001290380013703800320054180036a20014180" - "016a220d2004102f200541f8036a2262200141b8026a2903003703002005" - "41f0036a2263200141b0026a290300370300200541e8036a2264200141a8" - "026a290300370300200541e0036a2265200141a0026a2903003703002005" - "41d8036a226620014198026a290300370300200541d0036a226720014190" - "026a290300370300200520014188026a2903003703c80320052001290380" - "023703c003200541c0036a20014180026a22472003102f200541b8046a22" - "68200b290300370300200541b0046a2269200a290300370300200541a804" - "6a226a2009290300370300200541a0046a226b2008290300370300200541" - "98046a226c200729030037030020054190046a226d200629030037030020" - "05200c29030037038804200520012903003703800420054180046a200120" - "471030200541f8046a226e200b290300370300200541f0046a226f200a29" - "0300370300200541e8046a22702009290300370300200541e0046a227120" - "08290300370300200541d8046a22722007290300370300200541d0046a22" - "7320062903003703002005200c2903003703c804200520012903003703c0" - "04200541c0046a2001200d1030200541b8056a2248200141f8006a221229" - "0300370300200541b0056a2249200141f0006a2213290300370300200541" - "a8056a224a200141e8006a2214290300370300200541a0056a224b200141" - "e0006a221529030037030020054198056a224c200141d8006a221c290300" - "37030020054190056a224d200141d0006a221d2903003703002005200141" - "c8006a221e29030037038805200520012903403703800520054180056a20" - "0141406b221f200141c0016a22741030200541c0096a20054180056a2001" - "41c0026a222d10302048200541f8096a220c2903003703002049200541f0" - "096a220d290300370300204a200541e8096a220e290300370300204b2005" - "41e0096a220f290300370300204c200541d8096a2210290300370300204d" - "200541d0096a2211290300370300200520052903c8093703880520052005" - "2903c00937038005200541d0056a2222201d290300370300200541d8056a" - "2223201c290300370300200541e0056a22242015290300370300200541e8" - "056a22252014290300370300200541f0056a222620132903003703002005" - "41f8056a22272012290300370300200520012903403703c0052005201e29" - "03003703c805200541c0056a201f2004102f200541b8066a221620272903" - "00370300200541b0066a22172026290300370300200541a8066a22182025" - "290300370300200541a0066a2219202429030037030020054198066a221a" - "202329030037030020054190066a221b2022290300370300200520052903" - "c80537038806200520052903c0053703800620054180066a200541c0056a" - "200541c0036a1030200542003703b80b200542003703b00b200542003703" - "a80b200542013703a00b200542003703980b200542003703900b20054200" - "3703880b200542093703800b200541c0096a20054180066a200541800b6a" - "102f2016200c2903003703002017200d2903003703002018200e29030037" - "03002019200f290300370300201a2010290300370300201b201129030037" - "0300200520052903c80937038806200520052903c00937038006200541c0" - "096a20054180066a200541c0026a10302016200c29030022810137030020" - "17200d2903002282013703002018200e2903002283013703002019200f29" - "0300228401370300201a2010290300228501370300201b20112903002286" - "01370300200541106a2275208601370300200541186a2276208501370300" - "200541206a2277208401370300200541286a227820830137030020054130" - "6a2279208201370300200541386a227a208101370300200520052903c809" - "22810137038806200520052903c009228201370380062005208201370300" - "2005208101370308200541f8066a22062020290300370300200541f0066a" - "22072021290300370300200541e8066a22082028290300370300200541e0" - "066a22092029290300370300200541d8066a220a202a2903003703002005" - "41d0066a220b202b2903003703002005202c2903003703c8062005200129" - "03c0023703c006200541c0066a202d2003102f200541c0096a200541c005" - "6a200541c0066a10302027200c2903003703002026200d29030037030020" - "25200e2903003703002024200f2903003703002023201029030037030020" - "222011290300370300200520052903c8093703c805200520052903c00937" - "03c005200541c0096a200541c0066a20054180036a10302006200c290300" - "2281013703002007200d2903002282013703002008200e29030022830137" - "03002009200f290300228401370300200a2010290300228501370300200b" - "2011290300228601370300201b208601370300201a208501370300201920" - "840137030020182083013703002017208201370300201620810137030020" - "0520052903c8092281013703c806200520052903c0092282013703c00620" - "052082013703800620052081013703880620054180066a200541c0066a20" - "0541800b6a102f2006201229030037030020072013290300370300200820" - "1429030037030020092015290300370300200a201c290300370300200b20" - "1d2903003703002005201e2903003703c806200520012903403703c00620" - "0541c0066a201f2002102f200541c0096a200541c0056a200541c0066a10" - "302027200c2903003703002026200d2903003703002025200e2903003703" - "002024200f29030037030020232010290300370300202220112903003703" - "00200520052903c8093703c805200520052903c0093703c005200541c009" - "6a20054180066a200541c0066a10302016200c2903002281013703002017" - "200d2903002282013703002018200e2903002283013703002019200f2903" - "00228401370300201a2010290300228501370300201b2011290300228601" - "370300200541d0006a227b208601370300200541d8006a227c2085013703" - "00200541e0006a227d208401370300200541e8006a227e20830137030020" - "0541f0006a227f208201370300200541f8006a2280012081013703002005" - "20052903c80922810137038806200520052903c009228201370380062005" - "2082013703402005208101370348200541b8076a221c200241386a222829" - "0300370300200541b0076a221d200241306a2229290300370300200541a8" - "076a221e200241286a222a290300370300200541a0076a221f200241206a" - "222b29030037030020054198076a2220200241186a222c29030037030020" - "054190076a2221200241106a222d2903003703002005200241086a224e29" - "030037038807200520022903003703800720054180076a20022004103020" - "06206e2903003703002007206f2903003703002008207029030037030020" - "092071290300370300200a2072290300370300200b207329030037030020" - "0520052903c8043703c806200520052903c0043703c006200541c0066a20" - "0541c0046a20054180076a102f200541d80b6a2214200a29030037030020" - "0541d00b6a2215200b290300370300200520052903c8063703c80b200520" - "052903c0063703c00b200541c00b6a20052903c00220052903c802204129" - "0300204229030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42dd" - "b0858ce8b691a8b87f42a9c0c689aece93b230102d20054198086a221220" - "0629030037030020054190086a2213200729030037030020052008290300" - "37038808200520092903003703800820054180086a204329030020442903" - "002045290300204629030042c7faf3c3ed82a3903c428d95c7c396d2dac0" - "977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d2010201429" - "030022810137030020112015290300228201370300200f20052903800822" - "8301370300200d2013290300228401370300200e20052903880822850137" - "0300200c2012290300228601370300200520052903c80b2287013703c809" - "200520052903c00b2288013703c009200620860137030020072084013703" - "0020082085013703002009208301370300200a208101370300200b208201" - "37030020052087013703c80620052088013703c0062014200a2903003703" - "002015200b290300370300200520052903c8063703c80b200520052903c0" - "063703c00b200541c00b6a20052903800322810120052903880322820120" - "61290300228301206029030022840142c7faf3c3ed82a3903c428d95c7c3" - "96d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20" - "122006290300370300201320072903003703002005200829030037038808" - "200520092903003703800820054180086a205f290300228501205e290300" - "228601205d290300228701205c29030022880142c7faf3c3ed82a3903c42" - "8d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b2" - "30102d2010201429030022890137030020112015290300228a0137030020" - "0f200529038008228b01370300200d2013290300228c01370300200e2005" - "29038808228d01370300200c2012290300228e01370300200520052903c8" - "0b228f013703c809200520052903c00b2290013703c0092006208e013703" - "002007208c013703002008208d013703002009208b01370300200a208901" - "370300200b208a013703002005208f013703c80620052090013703c00620" - "162054290300370300201720532903003703002018205229030037030020" - "192051290300370300201a2050290300370300201b204f29030037030020" - "05205529030037038806200520012903c0013703800620054180066a2074" - "2003102f200541c0096a200541c0056a20054180066a10302027200c2903" - "003703002026200d2903003703002025200e2903003703002024200f2903" - "003703002023201029030037030020222011290300370300200520052903" - "c8093703c805200520052903c0093703c005200541c0096a200541c0066a" - "20054180066a10302006200c2903003703002007200d2903003703002008" - "200e2903003703002009200f290300370300200a2010290300370300200b" - "2011290300370300200520052903c8093703c806200520052903c0093703" - "c0062021203f2903003703002020203d290300370300201f203b29030037" - "0300201e2039290300370300201d2037290300370300201c203529030037" - "030020052001290380013703800720052040290300370388072005418007" - "6a20054180016a2047103020342006290300370300203620072903003703" - "0020382008290300370300203a2009290300370300203c200a2903003703" - "00203e200b290300370300200541d0076a200441106a2903003703002005" - "41d8076a200441186a290300370300200541e0076a200441206a29030037" - "0300200541e8076a200441286a290300370300200541f0076a200441306a" - "290300370300200541f8076a200441386a290300370300200520052903c8" - "0637038801200520052903c00637038001200520042903003703c0072005" - "200441086a2903003703c807200541c0076a2004200310302006201c2903" - "003703002007201d2903003703002008201e2903003703002009201f2903" - "00370300200a2020290300370300200b2021290300370300200520052903" - "88073703c80620052005290380073703c006200541c0066a20054180076a" - "200541c0076a102f2014200a2903003703002015200b2903003703002005" - "20052903c8063703c80b200520052903c0063703c00b200541c00b6a2081" - "0120820120830120840142c7faf3c3ed82a3903c428d95c7c396d2dac097" - "7f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d201220062903" - "003703002013200729030037030020052008290300370388082005200929" - "03003703800820054180086a20850120860120870120880142c7faf3c3ed" - "82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c6" - "89aece93b230102d20102014290300228101370300201120152903002282" - "01370300200f200529038008228301370300200d20132903002284013703" - "00200e200529038808228501370300200c20122903002286013703002005" - "20052903c80b2287013703c809200520052903c00b2288013703c0092006" - "208601370300200720840137030020082085013703002009208301370300" - "200a208101370300200b20820137030020052087013703c8062005208801" - "3703c0062014200a2903003703002015200b290300370300200520052903" - "c8063703c80b200520052903c0063703c00b200541c00b6a20052903c003" - "22810120052903c8032282012067290300228301206629030022840142c7" - "faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f" - "42a9c0c689aece93b230102d201220062903003703002013200729030037" - "03002005200829030037038808200520092903003703800820054180086a" - "206529030022850120642903002286012063290300228701206229030022" - "880142c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b6" - "91a8b87f42a9c0c689aece93b230102d2010201429030022890137030020" - "112015290300228a01370300200f200529038008228b01370300200d2013" - "290300228c01370300200e200529038808228d01370300200c2012290300" - "228e01370300200520052903c80b228f013703c809200520052903c00b22" - "90013703c0092006208e013703002007208c013703002008208d01370300" - "2009208b01370300200a208901370300200b208a013703002005208f0137" - "03c80620052090013703c006201620062903003703002017200729030037" - "03002018200829030037030020192009290300370300201a200a29030037" - "0300201b200b290300370300200520052903c80637038806200520052903" - "c0063703800620054180066a200541c0066a200541800b6a102f20062033" - "290300370300200720322903003703002008203129030037030020092030" - "290300370300200a202f290300370300200b202e29030037030020052005" - "2903c8013703c806200520052903c0013703c006200541c0066a200541c0" - "016a2002102f200541c0096a200541c0056a200541c0066a10302027200c" - "2903003703002026200d2903003703002025200e2903003703002024200f" - "290300370300202320102903003703002022201129030037030020052005" - "2903c8093703c805200520052903c0093703c005200541c0096a20054180" - "066a200541c0066a10302016200c2903002289013703002017200d290300" - "228a013703002018200e290300228b013703002019200f290300228c0137" - "0300201a2010290300228d01370300201b2011290300228e01370300202e" - "208e01370300202f208d013703002030208c013703002031208b01370300" - "2032208a013703002033208901370300200520052903c809228901370388" - "06200520052903c009228a01370380062005208a013703c0012005208901" - "3703c8012006205629030037030020072057290300370300200820582903" - "0037030020092059290300370300200a205a290300370300200b205b2903" - "0037030020052005290388023703c80620052005290380023703c0062005" - "41c0066a20054180026a2004102f200541c0096a200541c0056a200541c0" - "066a10302027200c2903003703002026200d2903003703002025200e2903" - "003703002024200f29030037030020232010290300370300202220112903" - "00370300201b200b290300370300201a200a290300370300201920092903" - "003703002018200829030037030020172007290300370300201620062903" - "00370300200520052903c8093703c805200520052903c0093703c0052005" - "20052903c00637038006200520052903c8063703880620054180066a2005" - "41c0066a200541800b6a102f201c2028290300370300201d202929030037" - "0300201e202a290300370300201f202b2903003703002020202c29030037" - "03002021202d2903003703002005204e2903003703880720052002290300" - "3703800720054180076a2002200310302006206829030037030020072069" - "2903003703002008206a2903003703002009206b290300370300200a206c" - "290300370300200b206d29030037030020052005290388043703c8062005" - "2005290380043703c006200541c0066a20054180046a20054180076a102f" - "2014200a2903003703002015200b290300370300200520052903c8063703" - "c80b200520052903c0063703c00b200541c00b6a20052903c00220052903" - "c8022041290300204229030042c7faf3c3ed82a3903c428d95c7c396d2da" - "c0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20122006" - "290300370300201320072903003703002005200829030037038808200520" - "092903003703800820054180086a20432903002044290300204529030020" - "4629030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858c" - "e8b691a8b87f42a9c0c689aece93b230102d201020142903002289013703" - "0020112015290300228a01370300200f200529038008228b01370300200d" - "2013290300228c01370300200e200529038808228d01370300200c201229" - "0300228e01370300200520052903c80b228f013703c809200520052903c0" - "0b2290013703c0092006208e013703002007208c013703002008208d0137" - "03002009208b01370300200a208901370300200b208a013703002005208f" - "013703c80620052090013703c0062014200a2903003703002015200b2903" - "00370300200520052903c8063703c80b200520052903c0063703c00b2005" - "41c00b6a20810120820120830120840142c7faf3c3ed82a3903c428d95c7" - "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d" - "201220062903003703002013200729030037030020052008290300370388" - "08200520092903003703800820054180086a208501208601208701208801" - "42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8" - "b87f42a9c0c689aece93b230102d20102014290300228101370300201120" - "15290300228201370300200f200529038008228301370300200d20132903" - "00228401370300200e200529038808228501370300200c20122903002286" - "01370300200520052903c80b2287013703c809200520052903c00b228801" - "3703c0092006208601370300200720840137030020082085013703002009" - "208301370300200a208101370300200b20820137030020052087013703c8" - "0620052088013703c006200541c0096a20054180066a200541c0066a1030" - "2016200c2903003703002017200d2903003703002018200e290300370300" - "2019200f290300370300201a2010290300370300201b2011290300370300" - "200520052903c80937038806200520052903c009370380062021202d2903" - "003703002020202c290300370300201f202b290300370300201e202a2903" - "00370300201d2029290300370300201c2028290300370300200520022903" - "00370380072005204e2903003703880720054180076a2002200410302005" - "41c0096a20054180076a20031030201c200c290300370300201d200d2903" - "00370300201e200e290300370300201f200f290300370300202020102903" - "0037030020212011290300370300200b204d290300370300200a204c2903" - "003703002009204b2903003703002008204a290300370300200720492903" - "0037030020062048290300370300200520052903c8093703880720052005" - "2903c0093703800720052005290380053703c00620052005290388053703" - "c806200541c0066a20054180056a20054180076a102f2014200a29030037" - "03002015200b290300370300200520052903c8063703c80b200520052903" - "c0063703c00b200541c00b6a20052903c00520052903c805202229030020" - "2329030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858c" - "e8b691a8b87f42a9c0c689aece93b230102d201220062903003703002013" - "200729030037030020052008290300370388082005200929030037038008" - "20054180086a202429030020252903002026290300202729030042c7faf3" - "c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9" - "c0c689aece93b230102d2010201429030022810137030020112015290300" - "228201370300200f200529038008228301370300200d2013290300228401" - "370300200e200529038808228501370300200c2012290300228601370300" - "200520052903c80b2287013703c809200520052903c00b2288013703c009" - "200620860137030020072084013703002008208501370300200920830137" - "0300200a208101370300200b20820137030020052087013703c806200520" - "88013703c006200541b8086a207a290300370300200541b0086a20792903" - "00370300200541a8086a2078290300370300200541a0086a207729030037" - "030020122076290300370300201320752903003703002005200529030837" - "0388082005200529030037038008200541c8086a20052903483703002005" - "41d0086a207b290300370300200541d8086a207c290300370300200541e0" - "086a207d290300370300200541e8086a207e290300370300200541f0086a" - "207f290300370300200541f8086a20800129030037030020052005290340" - "3703c008200541b8096a2034290300370300200541b0096a203629030037" - "0300200541a8096a2038290300370300200541a0096a203a290300370300" - "20054198096a203c29030037030020054190096a203e2903003703002005" - "4188096a200529038801370300200520052903800137038009200c203329" - "0300370300200d2032290300370300200e2031290300370300200f203029" - "03003703002010202f2903003703002011202e2903003703002005200529" - "03c8013703c809200520052903c0013703c009200541880a6a2005290388" - "06370300200541900a6a201b290300370300200541980a6a201a29030037" - "0300200541a00a6a2019290300370300200541a80a6a2018290300370300" - "200541b00a6a2017290300370300200541b80a6a20162903003703002005" - "2005290380063703800a200541f80a6a2006290300370300200541f00a6a" - "2007290300370300200541e80a6a2008290300370300200541e00a6a2009" - "290300370300200541d80a6a200a290300370300200541d00a6a200b2903" - "00370300200541c80a6a20052903c806370300200520052903c0063703c0" - "0a200020054180086a41c001104c41c0016a200541c0096a41c001104c1a" - "200541e00b6a24000ba21d02297f0d7e23004180066b2203240020034180" - "046a20014180016a22162002102f20034198036a2204200141186a220c29" - "030037030020034190036a2205200141106a220d29030037030020032001" - "41086a220f29030037038803200320012903003703800320034180036a20" - "032903800420032903880420032903900420034198046a220929030042c7" - "faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f" - "42a9c0c689aece93b230102d200341d8036a2206200141386a2210290300" - "370300200341d0036a2207200141306a2211290300370300200320014128" - "6a22122903003703c8032003200141206a22172903003703c003200341c0" - "036a20032903a004200341a8046a220a29030020032903b004200341b804" - "6a220b29030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0" - "858ce8b691a8b87f42a9c0c689aece93b230102d200341186a220e200429" - "0300370300200341106a22082005290300370300200341206a2213200329" - "03c003370300200341286a221420032903c803370300200341306a221520" - "07290300370300200341386a221820062903003703002003200329038803" - "370308200320032903800337030020034180046a2016200241406b221f10" - "2f2004200141d8006a22202903003703002005200141d0006a2221290300" - "3703002003200141c8006a22222903003703880320032001290340370380" - "0320034180036a2003290380042003290388042003290390042009290300" - "42c7faf3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8" - "b87f42a9c0c689aece93b230102d2006200141f8006a2223290300370300" - "2007200141f0006a22242903003703002003200141e8006a222529030037" - "03c8032003200141e0006a22262903003703c003200341c0036a20032903" - "a004200a29030020032903b004200b29030042c7faf3c3ed82a3903c428d" - "95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230" - "102d200341d8006a22192004290300370300200341d0006a221a20052903" - "00370300200341e0006a221b20032903c003370300200341e8006a221c20" - "032903c803370300200341f0006a221d2007290300370300200341f8006a" - "221e20062903003703002003200329038803370348200320032903800337" - "0340200341f8046a2018290300370300200341f0046a2015290300370300" - "200341e8046a2014290300370300200341e0046a20132903003703002003" - "41d8046a200e290300370300200341d0046a200829030037030020032003" - "2903083703c804200320032903003703c004200341c0046a20032003102f" - "200341b8056a201e290300370300200341b0056a201d2903003703002003" - "41a8056a201c290300370300200341a0056a201b29030037030020034198" - "056a201929030037030020034190056a201a290300370300200320032903" - "4837038805200320032903403703800520034180056a200341406b200341" - "406b102f20034180016a2003200341c0046a102f200341c0016a20012003" - "41c0046a102f20034180046a201620034180056a102f200341c0036a2003" - "4180046a20034180016a103020034180046a200341c0016a200341c0016a" - "1030200341d8026a220e2006290300370300200341d0026a220820072903" - "00370300200320032903c8033703c802200320032903c0033703c0022003" - "41c0026a200329038004200329038804200329039004200929030042c7fa" - "f3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42" - "a9c0c689aece93b230102d2004200341f8036a2213290300370300200520" - "0341f0036a22142903003703002003200341e8036a221529030037038803" - "200320032903e0033703800320034180036a20032903a004200a29030020" - "032903b004200b29030042c7faf3c3ed82a3903c428d95c7c396d2dac097" - "7f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d20034198026a" - "2218200e29030037030020034190026a22272008290300370300200341a8" - "026a2228200329038803370300200341b0026a2229200529030037030020" - "0341b8026a222a2004290300370300200320032903c80237038802200320" - "032903c0023703800220032003290380033703a00220034180046a200320" - "034180026a102f2010200b2903003703002011200341b0046a2210290300" - "3703002012200a2903003703002017200341a0046a222b29030037030020" - "0c2009290300370300200d20034190046a2211290300370300200f200329" - "03880437030020012003290380043703002004200341d8016a2903003703" - "002005200341d0016a290300370300200320032903c80137038803200320" - "032903c0013703800320034180036a200329038002200329038802202729" - "0300201829030042c7faf3c3ed82a3903c428d95c7c396d2dac0977f42dd" - "b0858ce8b691a8b87f42a9c0c689aece93b230102d2006200341f8016a29" - "03003703002007200341f0016a2903003703002003200341e8016a290300" - "3703c803200320032903e0013703c003200341c0036a20032903a0022028" - "2903002029290300202a29030042c7faf3c3ed82a3903c428d95c7c396d2" - "dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d200920" - "0429030037030020112005290300370300200a20032903c8033703002010" - "2007290300370300200b2006290300370300200320032903880337038804" - "200320032903800337038004200320032903c0033703a004200341c0036a" - "200341406b20034180046a102f20034180046a20034180016a200141406b" - "102f200341f8056a220c2006290300370300200341f0056a220d20072903" - "00370300200320032903c8033703e805200320032903c0033703e0052003" - "41e0056a200329038004200329038804200329039004200929030042c7fa" - "f3c3ed82a3903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42" - "a9c0c689aece93b230102d200e2013290300370300200820142903003703" - "00200320152903003703c802200320032903e0033703c002200341c0026a" - "20032903a004200a29030020032903b004200b29030042c7faf3c3ed82a3" - "903c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689ae" - "ce93b230102d2004200c2903003703002005200d290300370300200341a0" - "036a221720032903c002370300200341a8036a220f20032903c802370300" - "200341b0036a22122008290300370300200341b8036a2208200e29030037" - "0300200320032903e80537038803200320032903e0053703800320232008" - "290300370300202420122903003703002025200f29030037030020262017" - "290300370300202020042903003703002021200529030037030020222003" - "29038803370300200120032903800337034020034180046a201620034180" - "016a102f200141b8016a200b290300370300200141b0016a201029030037" - "0300200141a8016a200a290300370300200141a0016a202b290300370300" - "20014198016a200929030037030020014190016a20112903003703002001" - "4188016a2003290388043703002001200329038004370380012003420037" - "03f802200342003703f002200342003703e802200342013703e002200342" - "003703d802200342003703d002200342003703c802200342093703c00220" - "0341c0036a200341406b2002102f20034180046a2003201f102f200341d8" - "056a22012006290300370300200341d0056a220620072903003703002003" - "20032903c8033703c805200320032903c0033703c005200341c0056a2003" - "29038004200329038804200329039004200929030042c7faf3c3ed82a390" - "3c428d95c7c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece" - "93b230102d200c2013290300370300200d20142903003703002003201529" - "03003703e805200320032903e0033703e005200341e0056a20032903a004" - "200a29030020032903b004200b29030042c7faf3c3ed82a3903c428d95c7" - "c396d2dac0977f42ddb0858ce8b691a8b87f42a9c0c689aece93b230102d" - "2004200129030037030020052006290300370300200f20032903e8053703" - "002012200d2903003703002008200c290300370300200320032903c80537" - "038803200320032903c00537038003200320032903e0053703a003200341" - "80046a200341c0026a20034180036a102f201e2903002136201d29030021" - "34201c290300212d201b2903002135201a29030022302003290340223184" - "201929030022382003290348223284844200520440427f4200427f420020" - "3142788342c7faf3c3ed82a3903c561b222e202e203254ad7d202e20327d" - "222e42f3eab8bce9ada5bfe8007d2237202e54ad7c42017c223320307d22" - "2f42a4cffaf397c9eed7c7007d222e202f54ad2030203356ad7d427f511b" - "20387d42a9c0c689aece93b2307c213342c7faf3c3ed82a3903c20317d21" - "2f0b4200213042002131420021322034203584202d203684844200520440" - "427f4200427f4200203542788342c7faf3c3ed82a3903c561b222c202c20" - "2d54ad7d202c202d7d222d42f3eab8bce9ada5bfe8007d2230202d54ad7c" - "42017c222d20347d222c42a4cffaf397c9eed7c7007d2231202c54ad202d" - "203454ad7d427f511b20367d42a9c0c689aece93b2307c213242c7faf3c3" - "ed82a3903c20357d212c0b20002003290380043703002000200329030037" - "0340200041086a200329038804370300200041c8006a2003290308370300" - "200041386a200341b8046a290300370300200041306a200341b0046a2903" - "00370300200041286a200341a8046a290300370300200041206a200341a0" - "046a290300370300200041186a20034198046a290300370300200041106a" - "20034190046a290300370300200041d0006a200341106a29030037030020" - "0041d8006a200341186a290300370300200041e0006a200341206a290300" - "370300200041e8006a200341286a290300370300200041f0006a20034130" - "6a290300370300200041f8006a200341386a290300370300200020323703" - "b801200020313703b001200020303703a8012000202c3703a00120002033" - "370398012000202e3703900120002037370388012000202f370380012003" - "4180066a24000b4201047f412021020240034020002d0000220320012d00" - "002204460440200041016a2100200141016a2101200241016b22020d010c" - "020b0b200320046b21050b20050b8a0301047f0240200141104904402000" - "21020c010b02402000410020006b41037122046a220320004d0d00200021" - "0220040440200421050340200241003a0000200241016a2102200541016b" - "22050d000b0b200441016b4107490d000340200241003a0000200241076a" - "41003a0000200241066a41003a0000200241056a41003a0000200241046a" - "41003a0000200241036a41003a0000200241026a41003a0000200241016a" - "41003a0000200241086a22022003470d000b0b2003200120046b2201417c" - "716a220220034b0440034020034100360200200341046a22032002490d00" - "0b0b200141037121010b02402002200120026a22054f0d00200141016b21" - "042001410771220304400340200241003a0000200241016a210220034101" - "6b22030d000b0b20044107490d000340200241003a0000200241076a4100" - "3a0000200241066a41003a0000200241056a41003a0000200241046a4100" - "3a0000200241036a41003a0000200241026a41003a0000200241016a4100" - "3a0000200241086a22022005470d000b0b20000b940501087f0240200241" - "10490440200021030c010b02402000410020006b41037122066a22052000" - "4d0d00200641016b21082000210320012104200604402006210703402003" - "20042d00003a0000200441016a2104200341016a2103200741016b22070d" - "000b0b20084107490d000340200320042d00003a0000200341016a200441" - "016a2d00003a0000200341026a200441026a2d00003a0000200341036a20" - "0441036a2d00003a0000200341046a200441046a2d00003a000020034105" - "6a200441056a2d00003a0000200341066a200441066a2d00003a00002003" - "41076a200441076a2d00003a0000200441086a2104200341086a22032005" - "470d000b0b2005200220066b2207417c7122086a21030240200120066a22" - "04410371450440200320054d0d0120042101034020052001280200360200" - "200141046a2101200541046a22052003490d000b0c010b200320054d0d00" - "2004410374220241187121062004417c71220941046a2101410020026b41" - "1871210a2009280200210203402005200220067620012802002202200a74" - "72360200200141046a2101200541046a22052003490d000b0b2007410371" - "2102200420086a21010b02402003200220036a22054f0d00200241016b21" - "072002410771220404400340200320012d00003a0000200141016a210120" - "0341016a2103200441016b22040d000b0b20074107490d00034020032001" - "2d00003a0000200341016a200141016a2d00003a0000200341026a200141" - "026a2d00003a0000200341036a200141036a2d00003a0000200341046a20" - "0141046a2d00003a0000200341056a200141056a2d00003a000020034106" - "6a200141066a2d00003a0000200341076a200141076a2d00003a00002001" - "41086a2101200341086a22032005470d000b0b20000b6201047e20002002" - "42ffffffff0f832203200142ffffffff0f8322047e220520024220882202" - "20047e22042003200142208822017e7c22034220867c2206370300200020" - "05200656ad200120027e2003200454ad4220862003422088847c7c370308" - "0b5601017e0240200341c000714504402003450d012002410020036b413f" - "71ad8620012003413f71ad220488842101200220048821020c010b200220" - "03413f71ad882101420021020b20002001370300200020023703080b5a01" - "027e420121020240200141c000714504402001450d0142002001413f71ad" - "2202864201410020016b413f71ad88842103420120028621020c010b4201" - "2001413f71ad862103420021020b20002002370300200020033703080b0b" - "e1250100418080c0000bd725307830306165613865396338336337336437" - "343033363932336465316234613636643138353437643538656565346561" - "6366656537303233356564323931393534636361706163697479206f7665" - "72666c6f77004200100011000000010000000000000063616c6c65642060" - "4f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e656020" - "76616c7565696e646578206f7574206f6620626f756e64733a2074686520" - "6c656e20697320206275742074686520696e646578206973200000008f00" - "100020000000af001000120000003a2000000100000000000000d4001000" - "020000003030303130323033303430353036303730383039313031313132" - "313331343135313631373138313932303231323232333234323532363237" - "323832393330333133323333333433353336333733383339343034313432" - "343334343435343634373438343935303531353235333534353535363537" - "353835393630363136323633363436353636363736383639373037313732" - "373337343735373637373738373938303831383238333834383538363837" - "38383839393039313932393339343935393639373938393972616e676520" - "737461727420696e64657820206f7574206f662072616e676520666f7220" - "736c696365206f66206c656e67746820b001100012000000c20110002200" - "000072616e676520656e6420696e64657820f401100010000000c2011000" - "22000000736c69636520696e646578207374617274732061742020627574" - "20656e6473206174200014021000160000002a0210000d00000054726965" - "6420746f20736872696e6b20746f2061206c617267657220636170616369" - "74794802100024000000f40a10004c000000b3020000090000002f686f6d" - "652f6f706964736b6f706e79692f2e636172676f2f72656769737472792f" - "7372632f696e6465782e6372617465732e696f2d31393439636638633662" - "3562353537662f6e756d2d626967696e742d302e342e362f7372632f6269" - "6775696e742e72732f686f6d652f6f706964736b6f706e79692f2e636172" - "676f2f72656769737472792f7372632f696e6465782e6372617465732e69" - "6f2d313934396366386336623562353537662f6e756d2d626967696e742d" - "302e342e362f7372632f62696775696e742f6164646974696f6e2e727300" - "0000ea0210006f000000890000001b000000a80c10006f00000057000000" - "09000000a80c10006f000000a3000000090000008402100066000000ad00" - "000013000000a80c10006f000000c40000001f000000a80c10006f000000" - "150100000e000000a80c10006f000000160100000e000000a80c10006f00" - "00001a0100000f000000a80c10006f000000510100000c000000a80c1000" - "6f0000002001000021000000a80c10006f0000002101000018000000a80c" - "10006f000000420100003c000000040c10006e0000006d0200000d000000" - "040c10006e00000066020000110000002f686f6d652f6f706964736b6f70" - "6e79692f2e636172676f2f72656769737472792f7372632f696e6465782e" - "6372617465732e696f2d313934396366386336623562353537662f6e756d" - "2d626967696e742d302e342e362f7372632f62696775696e742f73686966" - "742e72733c0410006c0000001e0000001c0000003c0410006c0000002e00" - "0000120000003c0410006c00000028000000190000002f72757374632f34" - "656231363132353065333430633866343866363665326239323965663461" - "3562656437633138312f6c6962726172792f636f72652f7372632f736c69" - "63652f697465722e72732f686f6d652f6f706964736b6f706e79692f2e63" - "6172676f2f72656769737472792f7372632f696e6465782e637261746573" - "2e696f2d313934396366386336623562353537662f6865782d302e342e33" - "2f7372632f6c69622e7273000000260510005b000000c700000025000000" - "260510005b000000c7000000410000004e6f744d656d626572496e76616c" - "6964536c6963654c656e677468496e76616c696455353132456e636f6469" - "6e6700000000000067e6096a85ae67bb72f36e3c3af54fa57f520e518c68" - "059babd9831f19cde05bd80410004e000000f605000015000000496e7661" - "6c696420636f6d7072657373656420706f696e7420666c61670000000806" - "10001d0000002f686f6d652f6f706964736b6f706e79692f2e636172676f" - "2f72656769737472792f7372632f696e6465782e6372617465732e696f2d" - "313934396366386336623562353537662f7370312d76657269666965722d" - "342e312e332f7372632f636f6e7374616e74732e72730000300610006a00" - "00001f000000120000002f686f6d652f6f706964736b6f706e79692f2e63" - "6172676f2f72656769737472792f7372632f696e6465782e637261746573" - "2e696f2d313934396366386336623562353537662f7370312d7665726966" - "6965722d342e312e332f7372632f636f6e7665727465722e727300000000" - "00000100000001000000060000004661696c656420746f20636f6e766572" - "74207820627974657320746f20467100ac0610006a0000001f0000003700" - "00002f686f6d652f6f706964736b6f706e79692f2e636172676f2f726567" - "69737472792f7372632f696e6465782e6372617465732e696f2d31393439" - "6366386336623562353537662f7370312d76657269666965722d342e312e" - "332f7372632f67726f746831362f636f6e7665727465722e727300005807" - "100072000000290000003e00000058071000720000002a0000003d000000" - "58071000720000002b0000003e00000058071000720000002c0000003e00" - "000058071000720000002e0000002500000058071000720000002e000000" - "3200000058071000720000002e0000003f00000058071000720000002e00" - "00004c0000005807100072000000320000003f0000005807100072000000" - "330000000b0000002f686f6d652f6f706964736b6f706e79692f2e636172" - "676f2f72656769737472792f7372632f696e6465782e6372617465732e69" - "6f2d313934396366386336623562353537662f7370312d76657269666965" - "722d342e312e332f7372632f67726f746831362f7665726966792e727300" - "6c0810006f0000002d000000160000002f686f6d652f6f706964736b6f70" - "6e79692f2e636172676f2f72656769737472792f7372632f696e6465782e" - "6372617465732e696f2d313934396366386336623562353537662f737031" - "2d76657269666965722d342e312e332f7372632f67726f746831362f6d6f" - "642e7273ec0810006c0000006d00000044000000ad4d9aa7e302d9df4174" - "9d5507949d05dbea33fbb16c643b22f599a2be6df2e2e1a1575c2e494d36" - "13e95e43b622318d9225c820e46acd08e8c987b44051195bc967032fcbf7" - "76d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847" - "ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab998e" - "9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2" - "1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992" - "f6edc980d3486a83b99e6c876acec4d309746e28cd96fa8e01864daa8459" - "9384f354a62eabe81511aa8e3034cbd75d42e708aa4ed80303fb0e4fb90c" - "d0ff6e9092132b65c9ae2605f3ef5540d3a64503c84fe5e1d9ec6eb1bd3a" - "906bbc80830e8e5400000003ced6e0c13f353262ae2dbbe49ce6a0b67576" - "d38aaf5958564be7648356830ef7db611b8f696f28ffb6250c7ffac66efb" - "d638d97f0d6c843c23691c3af532c9e3a974086bde6c91267b201137cfe6" - "ee8cd50ff0a3da861e808503e7df4da87b8d00000000000000002f727573" - "74632f346562313631323530653334306338663438663636653262393239" - "656634613562656437633138312f6c6962726172792f616c6c6f632f7372" - "632f7261775f7665632e7273f40a10004c00000028020000110000002f72" - "7573742f646570732f646c6d616c6c6f632d302e322e372f7372632f646c" - "6d616c6c6f632e7273617373657274696f6e206661696c65643a20707369" - "7a65203e3d2073697a65202b206d696e5f6f7665726865616400500b1000" - "29000000a804000009000000617373657274696f6e206661696c65643a20" - "7073697a65203c3d2073697a65202b206d61785f6f766572686561640000" - "500b100029000000ae0400000d0000000000000004000000000000002f68" - "6f6d652f6f706964736b6f706e79692f2e636172676f2f72656769737472" - "792f7372632f696e6465782e6372617465732e696f2d3139343963663863" - "36623562353537662f6e756d2d626967696e742d302e342e362f7372632f" - "62696775696e742f636f6e766572742e72730000040c10006e000000f001" - "000016000000617474656d707420746f20646976696465206279207a6572" - "6f000000840c1000190000002f686f6d652f6f706964736b6f706e79692f" - "2e636172676f2f72656769737472792f7372632f696e6465782e63726174" - "65732e696f2d313934396366386336623562353537662f6e756d2d626967" - "696e742d302e342e362f7372632f62696775696e742f6469766973696f6e" - "2e727300a80c10006f00000070000000090000004f6e63652070616e6963" - "6b65642f686f6d652f6f706964736b6f706e79692f2e636172676f2f7265" - "6769737472792f7372632f696e6465782e6372617465732e696f2d313934" - "396366386336623562353537662f7370696e2d302e392e382f7372632f6f" - "6e63652e72730000350d10005d000000e60000002a0000004f6e63652070" - "726576696f75736c7920706f69736f6e656420627920612070616e69636b" - "65640000350d10005d0000004e010000250000002f72757374632f346562" - "313631323530653334306338663438663636653262393239656634613562" - "656437633138312f6c6962726172792f616c6c6f632f7372632f736c6963" - "652e72730000dc0d10004a000000a10000001900000063616c6c65642060" - "526573756c743a3a756e77726170282960206f6e20616e20604572726020" - "76616c75652f686f6d652f6f706964736b6f706e79692f2e636172676f2f" - "72656769737472792f7372632f696e6465782e6372617465732e696f2d31" - "3934396366386336623562353537662f7375627374726174652d626e2d73" - "756363696e63742d302e362e302d76342d72632e382f7372632f6669656c" - "64732f66702e72730000630e10007b000000e9020000230000004661696c" - "656420746f20636f6d707574652074686520696e7665727365206f662074" - "68652064697669736f722f686f6d652f6f706964736b6f706e79692f2e63" - "6172676f2f72656769737472792f7372632f696e6465782e637261746573" - "2e696f2d313934396366386336623562353537662f737562737472617465" - "2d626e2d73756363696e63742d302e362e302d76342d72632e382f737263" - "2f6669656c64732f6671322e72731c0f10007c000000430100000e000000" - "000000000100000001000000070000002f686f6d652f6f706964736b6f70" - "6e79692f2e636172676f2f72656769737472792f7372632f696e6465782e" - "6372617465732e696f2d313934396366386336623562353537662f737562" - "7374726174652d626e2d73756363696e63742d302e362e302d76342d7263" - "2e382f7372632f67726f7570732f6d6f642e7273b80f10007c000000b100" - "00002c000000556e61626c6520746f20636f6e7665727420473120746f20" - "416666696e654731b80f10007c0000000001000012000000b80f10007c00" - "00002001000012000000b80f10007c000000400100000d000000b80f1000" - "7c0000006b01000029000000010001000000030003000000030001000300" - "000300000000000100000300010000030000000003000100000003000300" - "00010000000300000300010001000000b80f10007c000000150300002600" - "0000b80f10007c0000001003000026000000b80f10007c00000008030000" - "2e000000b80f10007c000000020300002a000000b80f10007c0000009b03" - "000010000000b80f10007c0000009c03000010000000b80f10007c000000" - "8f03000014000000b80f10007c0000009203000018000000b80f10007c00" - "000095030000180000006d696c6c6572206c6f6f702063616e6e6f742070" - "726f64756365207a65726f00b80f10007c000000221100000a000000b80f" - "10007c000000191100002a000000b80f10007c0000001911000017000000" - "b80f10007c0000001a1100002e000000b80f10007c0000001a1100001b00" - "00002f686f6d652f6f706964736b6f706e79692f2e636172676f2f726567" - "69737472792f7372632f696e6465782e6372617465732e696f2d31393439" - "6366386336623562353537662f7375627374726174652d626e2d73756363" - "696e63742d302e362e302d76342d72632e382f7372632f6c69622e727300" - "0000e4111000750000003b0300000c000000e4111000750000003c030000" - "0c0000004e6f744f6e43757276654e6f74496e53756267726f7570496e76" - "616c6964496e7075744c656e677468000000120000001300000009000000" - "ad051000bf051000a40510000a0000000d000000120000007c1210008612" - "1000931210004d0970726f64756365727302086c616e6775616765010452" - "757374000c70726f6365737365642d6279010572757374631d312e38352e" - "31202834656231363132353020323032352d30332d31352900490f746172" - "6765745f6665617475726573042b0f6d757461626c652d676c6f62616c73" - "2b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d" - "756c746976616c7565"; - extern std::string const ledgerSqnWasmHex = "0061736d010000000108026000017f60000002160103656e760e6765745f6c65646765725f" "73716e000003030201000503010002063e0a7f004180080b7f004180080b7f004180100b7f" @@ -8830,724 +338,8 @@ extern std::string const allHostFunctionsWasmHex = "2b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; extern std::string const deepRecursionHex = - "0061736d01000000013f0b60017f0060037f7f7f017f60027f7f017f60027f" - "7f0060000060037f7f7f006000017f60037e7f7f017f60047f7f7f7f017f60" - "017f017f60047f7f7f7f00032f2e0302040400030501030302020600030302" - "0700080301050202020404090202000a0a0102020403030300000a03010405" - "017001101005030100110619037f01418080c0000b7f0041b49ac0000b7f00" - "41c09ac0000b073905066d656d6f7279020005726563757200000972656375" - "7273697665000c0a5f5f646174615f656e6403010b5f5f686561705f626173" - "6503020915010041010b0f010a0b1e10171819262c1d1f2223240a927c2ea7" - "0704017f017e027f017e23808080800041e0006b2202248080808000200220" - "003602040240200041004c0d002001200128020041016a3602002000417f6a" - "20011080808080000b2002410236020c2002418480c0800036020820024201" - "37021420024181808080003602242002200241206a3602102002200241046a" - "3602202002410636022c2002419490c08000360228024041002d00c096c080" - "004103460d001082808080000b0240024002400240024041002903a89ac080" - "0022034200520d00024041002802b09ac0800022000d001083808080004100" - "2802b09ac0800021000b20002000280200220141016a3602002001417f4c0d" - "012000450d02200020002802002201417f6a36020020002903082103200141" - "01470d0020001084808080000b0240024002402003410029039896c0800051" - "0d0041002d00a496c08000210141012100410041013a00a496c08000200220" - "013a00382001450d012002420037025420024281808080c00037024c200241" - "bc91c08000360248200241386a200241c8006a108580808000000b02404100" - "2802a096c080002200417f460d00200041016a21000c020b419c92c0800041" - "2641e092c08000108680808000000b4100200337039896c080000b41002000" - "3602a096c080002002419896c0800036023041042100200241043a00382002" - "200241306a360240200241386a41c085c08000200241086a10878080800021" - "0120022d003821040240024020010d00420021034117200441ff0171764101" - "710d01200228023c220028020021010240200041046a280200220428020022" - "05450d002001200511808080800080808080000b024020042802042204450d" - "00200120041088808080000b2000410c108880808000410421000c010b2004" - "41ff01714104460d032002290338220642807e8321032006a721000b200228" - "023022012001280208417f6a2204360208024020040d00200141003a000c20" - "0142003703000b200041ff01714104470d03200241e0006a2480808080000f" - "0b000b418087c0800041de0041f487c08000108680808000000b2002410036" - "02582002410136024c2002418491c0800036024820024204370250200241c8" - "006a418c91c08000108980808000000b200220032000ad42ff018384370330" - "2002410236024c200241f48fc0800036024820024202370254200241828080" - "8000ad422086200241306aad843703402002418380808000ad422086200241" - "286aad843703382002200241386a360250200241c8006a418490c080001089" - "80808000000b2701017f200028020022002000411f7522027320026bad2000" - "417f73411f7620011091808080000bf10101027f23808080800041206b2200" - "248080808000024002400240024041002d00c096c080000e0400000301000b" - "410041023a00c096c0800041002d009096c080001a418008109c8080800022" - "01450d01410041033a00c096c08000410020013602b096c080004100428080" - "80808080013703a896c080004100420037039896c08000410041003a00b896" - "c08000410041003602b496c08000410041003a00a496c08000410041003602" - "a096c080000b200041206a2480808080000f0b000b20004100360218200041" - "0136020c200041bc93c0800036020820004204370210200041086a418c92c0" - "8000108980808000000bf90103027f037e017f23808080800041206b220024" - "808080800041002d009096c080001a0240024002404120109c808080002201" - "450d0020014102360210200142818080801037030041002903d096c0800021" - "0203402002427f510d024100200242017c220341002903d096c08000220420" - "0420025122051b3703d096c08000200421022005450d000b410020033703a8" - "9ac080002001200337030841002802b09ac08000450d022000410036021820" - "00410136020c200041c484c0800036020820004204370210200041086a419c" - "85c080001089808080000b000b109b80808000000b410020013602b09ac080" - "00200041206a2480808080000b5b01027f024020002802104101470d002000" - "280214220141003a000020002802182202450d00200120021088808080000b" - "02402000417f460d00200020002802042201417f6a36020420014101470d00" - "200041201088808080000b0b3a01017f23808080800041106b220224808080" - "8000200241ac85c0800036020c20022000360208200241086a2002410c6a20" - "01109680808000000b6a01017f23808080800041306b220324808080800020" - "03200136020c2003200036020820034101360214200341d488c08000360210" - "2003420137021c2003418380808000ad422086200341086aad843703282003" - "200341286a360218200341106a2002108980808000000bbf05010a7f238080" - "80800041306b2203248080808000200341033a002c2003412036021c410021" - "04200341003602282003200136022420032000360220200341003602142003" - "410036020c02400240024002400240200228021022050d00200228020c2200" - "450d0120022802082101200041037421062000417f6a41ffffffff01714101" - "6a21042002280200210003400240200041046a2802002207450d0020032802" - "2020002802002007200328022428020c11818080800080808080000d040b20" - "012802002003410c6a200128020411828080800080808080000d0320014108" - "6a2101200041086a2100200641786a22060d000c020b0b2002280214220145" - "0d00200141057421082001417f6a41ffffff3f7141016a2104200228020821" - "09200228020021004100210603400240200041046a2802002201450d002003" - "28022020002802002001200328022428020c11818080800080808080000d03" - "0b2003200520066a220141106a28020036021c20032001411c6a2d00003a00" - "2c2003200141186a2802003602282001410c6a28020021074100210a410021" - "0b024002400240200141086a2802000e03010002010b2007410374210c4100" - "210b2009200c6a220c2802040d01200c28020021070b4101210b0b20032007" - "3602102003200b36020c200141046a28020021070240024002402001280200" - "0e03010002010b2007410374210b2009200b6a220b2802040d01200b280200" - "21070b4101210a0b200320073602182003200a3602142009200141146a2802" - "004103746a22012802002003410c6a20012802041182808080008080808000" - "0d02200041086a21002008200641206a2206470d000b0b200420022802044f" - "0d012003280220200228020020044103746a22012802002001280204200328" - "022428020c1181808080008080808000450d010b410121010c010b41002101" - "0b200341306a24808080800020010b6c01027f024002402000417c6a280200" - "2202417871220341044108200241037122021b20016a490d0002402002450d" - "002003200141276a4b0d020b2000108d808080000f0b418186c0800041b086" - "c08000108e80808000000b41c086c0800041f086c08000108e80808000000b" - "5601017f23808080800041206b2202248080808000200241106a200041106a" - "290200370300200241086a200041086a290200370300200241013b011c2002" - "2001360218200220002902003703002002109280808000000be50301017f23" - "808080800041c0006b22022480808080000240024002400240024002402000" - "2d00000e0400010203000b2002200028020436020441002d009096c080001a" - "4114109c808080002200450d04200041106a410028008093c0800036000020" - "0041086a41002900f892c08000370000200041002900f092c0800037000020" - "0241143602102002200036020c200241143602082002410336022c200241a0" - "8fc08000360228200242023702342002418180808000ad422086200241046a" - "ad843703202002418480808000ad422086200241086aad8437031820022002" - "41186a36023020012802142001280218200241286a10878080800021002002" - "2802082201450d03200228020c20011088808080000c030b20002d00012100" - "2002410136022c200241d488c0800036022820024201370234200241838080" - "8000ad422086200241186aad8437030820022000410274220041c493c08000" - "6a28020036021c2002200041e894c080006a2802003602182002200241086a" - "36023020012802142001280218200241286a10878080800021000c020b2001" - "20002802042200280200200028020410958080800021000c010b2000280204" - "220028020020012000280204280210118280808000808080800021000b2002" - "41c0006a24808080800020000f0b000b140020012000280200200028020410" - "95808080000b3f01027f23808080800041106b220024808080800020004100" - "36020c41a08d062000410c6a108080808000200028020c2101200041106a24" - "808080800020010bbe0601057f200041786a22012000417c6a280200220241" - "787122006a21030240024020024101710d002002410271450d012001280200" - "220220006a21000240200120026b220141002802809ac08000470d00200328" - "02044103714103470d01410020003602f899c0800020032003280204417e71" - "36020420012000410172360204200320003602000f0b2001200210a8808080" - "000b024002400240024002400240200328020422024102710d002003410028" - "02849ac08000460d02200341002802809ac08000460d032003200241787122" - "0210a8808080002001200220006a2200410172360204200120006a20003602" - "00200141002802809ac08000470d01410020003602f899c080000f0b200320" - "02417e7136020420012000410172360204200120006a20003602000b200041" - "8002490d022001200010a78080800041002101410041002802989ac0800041" - "7f6a22003602989ac0800020000d04024041002802e097c080002200450d00" - "410021010340200141016a2101200028020822000d000b0b4100200141ff1f" - "200141ff1f4b1b3602989ac080000f0b410020013602849ac0800041004100" - "2802fc99c0800020006a22003602fc99c08000200120004101723602040240" - "200141002802809ac08000470d00410041003602f899c08000410041003602" - "809ac080000b200041002802909ac0800022044d0d0341002802849ac08000" - "2200450d034100210241002802fc99c0800022054129490d0241d897c08000" - "2101034002402001280200220320004b0d002000200320012802046a490d04" - "0b200128020821010c000b0b410020013602809ac08000410041002802f899" - "c0800020006a22003602f899c0800020012000410172360204200120006a20" - "003602000f0b200041f8017141e897c080006a21030240024041002802f099" - "c08000220241012000410376742200710d00410020022000723602f099c080" - "00200321000c010b200328020821000b200320013602082000200136020c20" - "01200336020c200120003602080f0b024041002802e097c080002201450d00" - "410021020340200241016a2102200128020822010d000b0b4100200241ff1f" - "200241ff1f4b1b3602989ac08000200520044d0d004100417f3602909ac080" - "000b0b4d01017f23808080800041206b220224808080800020024100360210" - "20024101360204200242043702082002412e36021c20022000360218200220" - "0241186a36020020022001108980808000000b7d02017f017e238080808000" - "41306b22022480808080002002200036020020022001360204200241023602" - "0c2002418484c08000360208200242023702142002418580808000ad422086" - "2203200241046aad84370328200220032002ad843703202002200241206a36" - "0210200241086a41b083c08000108980808000000b11002000350200410120" - "011091808080000bdf0703027f017e097f23808080800041306b2203248080" - "808000412721040240024020004290ce005a0d00200021050c010b41272104" - "0340200341096a20046a2206417c6a20004290ce0080220542f0b1037e2000" - "7ca7220741ffff037141e4006e220841017441c481c080006a2f00003b0000" - "2006417e6a2008419c7f6c20076a41ffff037141017441c481c080006a2f00" - "003b00002004417c6a2104200042ffc1d72f5621062005210020060d000b0b" - "02400240200542e300560d002005a721060c010b200341096a2004417e6a22" - "046a2005a7220741ffff037141e4006e2206419c7f6c20076a41ffff037141" - "017441c481c080006a2f00003b00000b024002402006410a490d0020034109" - "6a2004417e6a22046a200641017441c481c080006a2f00003b00000c010b20" - "0341096a2004417f6a22046a20064130723a00000b412720046b2109024002" - "4020010d00412820046b2107200228021c2106412d21010c010b412b418080" - "c400200228021c220641017122071b2101200720096a21070b200341096a20" - "046a210a2006410471410276210b0240024020022802000d00024020022802" - "142204200228021822062001200b109380808000450d00410121040c020b20" - "04200a2009200628020c118180808000808080800021040c010b0240024002" - "402002280204220c20074b0d0020022802142204200228021822062001200b" - "109380808000450d01410121040c030b2006410871450d012002280210210d" - "2002413036021020022d0020210e41012104200241013a0020200228021422" - "06200228021822082001200b1093808080000d02200c20076b41016a210402" - "4003402004417f6a2204450d01200641302008280210118280808000808080" - "8000450d000b410121040c030b02402006200a2009200828020c1181808080" - "008080808000450d00410121040c030b2002200e3a00202002200d36021041" - "0021040c020b2004200a2009200628020c118180808000808080800021040c" - "010b200c20076b210c02400240024020022d002022040e0402000100020b20" - "0c21044100210c0c010b200c4101762104200c41016a410176210c0b200441" - "016a2104200228021021082002280218210620022802142107024003402004" - "417f6a2204450d012007200820062802101182808080008080808000450d00" - "0b410121040c010b41012104200720062001200b1093808080000d00200720" - "0a2009200628020c11818080800080808080000d004100210403400240200c" - "2004470d00200c200c4921040c020b200441016a2104200720082006280210" - "1182808080008080808000450d000b2004417f6a200c4921040b200341306a" - "24808080800020040b5d01027f23808080800041206b220124808080800020" - "002802182102200141106a200041106a290200370300200141086a20004108" - "6a2902003703002001200036021c2001200236021820012000290200370300" - "200110a980808000000b490002402002418080c400460d0020002002200128" - "02101182808080008080808000450d0041010f0b024020030d0041000f0b20" - "0020034100200128020c11818080800080808080000b7d02017f017e238080" - "80800041306b22022480808080002002200036020020022001360204200241" - "0236020c200241a484c08000360208200242023702142002418580808000ad" - "4220862203200241046aad84370328200220032002ad843703202002200241" - "206a360210200241086a41c083c08000108980808000000bc20b010b7f2000" - "28020821030240024002400240200028020022040d002003410171450d010b" - "02402003410171450d00200120026a210502400240200028020c22060d0041" - "002107200121080c010b410021074100210920012108034020082203200546" - "0d020240024020032c00002208417f4c0d00200341016a21080c010b024020" - "0841604f0d00200341026a21080c010b0240200841704f0d00200341036a21" - "080c010b200341046a21080b200820036b20076a21072006200941016a2209" - "470d000b0b20082005460d00024020082c00002203417f4a0d002003416049" - "1a0b024002402007450d000240200720024f0d00200120076a2c000041bf7f" - "4a0d01410021030c020b20072002460d00410021030c010b200121030b2007" - "200220031b21022003200120031b21010b024020040d002000280214200120" - "02200028021828020c11818080800080808080000f0b2000280204210a0240" - "20024110490d0020022001200141036a417c7122076b22096a220b41037121" - "044100210641002103024020012007460d004100210302402009417c4b0d00" - "410021034100210503402003200120056a22082c000041bf7f4a6a20084101" - "6a2c000041bf7f4a6a200841026a2c000041bf7f4a6a200841036a2c000041" - "bf7f4a6a2103200541046a22050d000b0b200121080340200320082c000041" - "bf7f4a6a2103200841016a2108200941016a22090d000b0b02402004450d00" - "2007200b417c716a22082c000041bf7f4a210620044101460d00200620082c" - "000141bf7f4a6a210620044102460d00200620082c000241bf7f4a6a21060b" - "200b4102762105200620036a21060340200721042005450d04200541c00120" - "0541c001491b220b410371210c200b410274210d4100210802402005410449" - "0d002004200d41f007716a210941002108200421030340200328020c220741" - "7f7341077620074106767241818284087120032802082207417f7341077620" - "074106767241818284087120032802042207417f7341077620074106767241" - "818284087120032802002207417f7341077620074106767241818284087120" - "086a6a6a6a2108200341106a22032009470d000b0b2005200b6b2105200420" - "0d6a2107200841087641ff81fc0771200841ff81fc07716a418180046c4110" - "7620066a2106200c450d000b2004200b41fc01714102746a22082802002203" - "417f734107762003410676724181828408712103200c4101460d0220082802" - "042207417f7341077620074106767241818284087120036a2103200c410246" - "0d0220082802082208417f7341077620084106767241818284087120036a21" - "030c020b024020020d00410021060c030b2002410371210802400240200241" - "044f0d0041002106410021090c010b41002106200121032002410c71220921" - "070340200620032c000041bf7f4a6a200341016a2c000041bf7f4a6a200341" - "026a2c000041bf7f4a6a200341036a2c000041bf7f4a6a2106200341046a21" - "032007417c6a22070d000b0b2008450d02200120096a21030340200620032c" - "000041bf7f4a6a2106200341016a21032008417f6a22080d000c030b0b2000" - "28021420012002200028021828020c11818080800080808080000f0b200341" - "087641ff811c71200341ff81fc07716a418180046c41107620066a21060b02" - "400240200a20064d0d00200a20066b21054100210302400240024020002d00" - "200e0402000102020b20052103410021050c010b2005410176210320054101" - "6a41017621050b200341016a21032000280210210920002802182108200028" - "0214210703402003417f6a2203450d02200720092008280210118280808000" - "8080808000450d000b41010f0b200028021420012002200028021828020c11" - "818080800080808080000f0b0240200720012002200828020c118180808000" - "8080808000450d0041010f0b410021030340024020052003470d0020052005" - "490f0b200341016a2103200720092008280210118280808000808080800045" - "0d000b2003417f6a2005490b820302017f017e23808080800041f0006b2203" - "248080808000200341b085c0800036020c20032000360208200341b085c080" - "00360214200320013602102003410236021c200341bc80c080003602180240" - "20022802000d002003410336025c200341f080c08000360258200342033702" - "642003418680808000ad4220862204200341106aad84370348200320042003" - "41086aad843703402003418380808000ad422086200341186aad8437033820" - "03200341386a360260200341d8006a41e891c08000108980808000000b2003" - "41206a41106a200241106a290200370300200341206a41086a200241086a29" - "0200370300200320022902003703202003410436025c200341a481c0800036" - "0258200342043702642003418680808000ad4220862204200341106aad8437" - "035020032004200341086aad843703482003418780808000ad422086200341" - "206aad843703402003418380808000ad422086200341186aad843703382003" - "200341386a360260200341d8006a41e891c08000108980808000000b1c0020" - "002802002001200028020428020c11828080800080808080000b1400200128" - "0214200128021820001087808080000b22002001280214419480c08000410e" - "200128021828020c11818080800080808080000b6001017f23808080800041" - "306b22002480808080002000410136020c200041b480c08000360208200042" - "013702142000418880808000ad4220862000412f6aad843703202000200041" - "206a360210200041086a41cc8fc08000108980808000000b4701017f238080" - "80800041206b2200248080808000200041003602182000410136020c200041" - "bc88c0800036020820004204370210200041086a41c488c080001089808080" - "00000bcb2502087f017e02400240024002400240024002400240200041f501" - "490d0041002101200041cdff7b4f0d052000410b6a22014178712102410028" - "02f499c080002203450d04411f21040240200041f4ffff074b0d0020024106" - "20014108766722006b7641017120004101746b413e6a21040b410020026b21" - "010240200441027441d896c080006a28020022050d0041002100410021060c" - "020b4100210020024100411920044101766b2004411f461b74210741002106" - "034002402005220528020441787122082002490d00200820026b220820014f" - "0d00200821012005210620080d004100210120052106200521000c040b2005" - "28021422082000200820052007411d764104716a41106a2802002205471b20" - "0020081b2100200741017421072005450d020c000b0b024041002802f099c0" - "8000220541102000410b6a41f803712000410b491b22024103762201762200" - "410371450d00024002402000417f7341017120016a2207410374220041e897" - "c080006a2201200041f097c080006a28020022022802082206460d00200620" - "0136020c200120063602080c010b41002005417e200777713602f099c08000" - "0b20022000410372360204200220006a220020002802044101723602042002" - "41086a0f0b200241002802f899c080004d0d0302400240024020000d004100" - "2802f499c080002200450d0620006841027441d896c080006a280200220628" - "020441787120026b21012006210503400240200628021022000d0020062802" - "1422000d0020052802182104024002400240200528020c22002005470d0020" - "0541144110200528021422001b6a28020022060d01410021000c020b200528" - "02082206200036020c200020063602080c010b200541146a200541106a2000" - "1b21070340200721082006220041146a200041106a200028021422061b2107" - "20004114411020061b6a28020022060d000b200841003602000b2004450d04" - "0240200528021c41027441d896c080006a22062802002005460d0020044110" - "411420042802102005461b6a20003602002000450d050c040b200620003602" - "0020000d03410041002802f499c08000417e200528021c77713602f499c080" - "000c040b200028020441787120026b22062001200620014922061b21012000" - "200520061b2105200021060c000b0b02400240200020017441022001742200" - "410020006b7271682208410374220141e897c080006a2206200141f097c080" - "006a28020022002802082207460d002007200636020c200620073602080c01" - "0b41002005417e200877713602f099c080000b200020024103723602042000" - "20026a2207200120026b2206410172360204200020016a2006360200024041" - "002802f899c080002205450d00200541787141e897c080006a210141002802" - "809ac0800021020240024041002802f099c080002208410120054103767422" - "05710d00410020082005723602f099c08000200121050c010b200128020821" - "050b200120023602082005200236020c2002200136020c200220053602080b" - "410020073602809ac08000410020063602f899c08000200041086a0f0b2000" - "2004360218024020052802102206450d002000200636021020062000360218" - "0b20052802142206450d0020002006360214200620003602180b0240024002" - "4020014110490d0020052002410372360204200520026a2202200141017236" - "0204200220016a200136020041002802f899c080002207450d012007417871" - "41e897c080006a210641002802809ac0800021000240024041002802f099c0" - "8000220841012007410376742207710d00410020082007723602f099c08000" - "200621070c010b200628020821070b200620003602082007200036020c2000" - "200636020c200020073602080c010b2005200120026a220041037236020420" - "0520006a220020002802044101723602040c010b410020023602809ac08000" - "410020013602f899c080000b200541086a0f0b024020002006720d00410021" - "0641022004742200410020006b722003712200450d0320006841027441d896" - "c080006a28020021000b2000450d010b034020002006200028020441787122" - "0520026b220820014922041b2103200520024921072008200120041b210802" - "40200028021022050d00200028021421050b2006200320071b210620012008" - "20071b21012005210020050d000b0b2006450d00024041002802f899c08000" - "22002002490d002001200020026b4f0d010b20062802182104024002400240" - "200628020c22002006470d00200641144110200628021422001b6a28020022" - "050d01410021000c020b20062802082205200036020c200020053602080c01" - "0b200641146a200641106a20001b21070340200721082005220041146a2000" - "41106a200028021422051b210720004114411020051b6a28020022050d000b" - "200841003602000b2004450d030240200628021c41027441d896c080006a22" - "052802002006460d0020044110411420042802102006461b6a200036020020" - "00450d040c030b2005200036020020000d02410041002802f499c08000417e" - "200628021c77713602f499c080000c030b0240024002400240024002404100" - "2802f899c08000220020024f0d00024041002802fc99c08000220020024b0d" - "0041002101200241af80046a220641107640002200417f4622070d07200041" - "10742205450d07410041002802889ac08000410020064180807c7120071b22" - "086a22003602889ac080004100410028028c9ac0800022012000200120004b" - "1b36028c9ac0800002400240024041002802849ac080002201450d0041d897" - "c080002100034020002802002206200028020422076a2005460d0220002802" - "0822000d000c030b0b0240024041002802949ac080002200450d0020002005" - "4d0d010b410020053602949ac080000b410041ff1f3602989ac08000410020" - "083602dc97c08000410020053602d897c08000410041e897c080003602f497" - "c08000410041f097c080003602fc97c08000410041e897c080003602f097c0" - "8000410041f897c0800036028498c08000410041f097c080003602f897c080" - "004100418098c0800036028c98c08000410041f897c0800036028098c08000" - "4100418898c0800036029498c080004100418098c0800036028898c0800041" - "00419098c0800036029c98c080004100418898c0800036029098c080004100" - "419898c080003602a498c080004100419098c0800036029898c08000410041" - "a098c080003602ac98c080004100419898c080003602a098c0800041004100" - "3602e497c08000410041a898c080003602b498c08000410041a098c0800036" - "02a898c08000410041a898c080003602b098c08000410041b098c080003602" - "bc98c08000410041b098c080003602b898c08000410041b898c080003602c4" - "98c08000410041b898c080003602c098c08000410041c098c080003602cc98" - "c08000410041c098c080003602c898c08000410041c898c080003602d498c0" - "8000410041c898c080003602d098c08000410041d098c080003602dc98c080" - "00410041d098c080003602d898c08000410041d898c080003602e498c08000" - "410041d898c080003602e098c08000410041e098c080003602ec98c0800041" - "0041e098c080003602e898c08000410041e898c080003602f498c080004100" - "41f098c080003602fc98c08000410041e898c080003602f098c08000410041" - "f898c0800036028499c08000410041f098c080003602f898c0800041004180" - "99c0800036028c99c08000410041f898c0800036028099c080004100418899" - "c0800036029499c080004100418099c0800036028899c080004100419099c0" - "800036029c99c080004100418899c0800036029099c080004100419899c080" - "003602a499c080004100419099c0800036029899c08000410041a099c08000" - "3602ac99c080004100419899c080003602a099c08000410041a899c0800036" - "02b499c08000410041a099c080003602a899c08000410041b099c080003602" - "bc99c08000410041a899c080003602b099c08000410041b899c080003602c4" - "99c08000410041b099c080003602b899c08000410041c099c080003602cc99" - "c08000410041b899c080003602c099c08000410041c899c080003602d499c0" - "8000410041c099c080003602c899c08000410041d099c080003602dc99c080" - "00410041c899c080003602d099c08000410041d899c080003602e499c08000" - "410041d099c080003602d899c08000410041e099c080003602ec99c0800041" - "0041d899c080003602e099c08000410020053602849ac08000410041e099c0" - "80003602e899c080004100200841586a22003602fc99c08000200520004101" - "72360204200520006a4128360204410041808080013602909ac080000c080b" - "200120054f0d00200620014b0d00200028020c450d030b410041002802949a" - "c080002200200520002005491b3602949ac08000200520086a210641d897c0" - "800021000240024002400340200028020022072006460d0120002802082200" - "0d000c020b0b200028020c450d010b41d897c0800021000240034002402000" - "280200220620014b0d002001200620002802046a2206490d020b2000280208" - "21000c000b0b410020053602849ac080004100200841586a22003602fc99c0" - "800020052000410172360204200520006a4128360204410041808080013602" - "909ac080002001200641606a41787141786a22002000200141106a491b2207" - "411b36020441002902d897c080002109200741106a41002902e097c0800037" - "020020072009370208410020083602dc97c08000410020053602d897c08000" - "4100200741086a3602e097c08000410041003602e497c080002007411c6a21" - "00034020004107360200200041046a22002006490d000b20072001460d0720" - "072007280204417e713602042001200720016b220041017236020420072000" - "36020002402000418002490d002001200010a7808080000c080b200041f801" - "7141e897c080006a21060240024041002802f099c080002205410120004103" - "76742200710d00410020052000723602f099c08000200621000c010b200628" - "020821000b200620013602082000200136020c2001200636020c2001200036" - "02080c070b200020053602002000200028020420086a360204200520024103" - "723602042007410f6a41787141786a2201200520026a22006b210220014100" - "2802849ac08000460d03200141002802809ac08000460d0402402001280204" - "22064103714101470d0020012006417871220610a880808000200620026a21" - "02200120066a220128020421060b20012006417e7136020420002002410172" - "360204200020026a200236020002402002418002490d002000200210a78080" - "80000c060b200241f8017141e897c080006a21010240024041002802f099c0" - "8000220641012002410376742202710d00410020062002723602f099c08000" - "200121020c010b200128020821020b200120003602082002200036020c2000" - "200136020c200020023602080c050b4100200020026b22013602fc99c08000" - "410041002802849ac08000220020026a22063602849ac08000200620014101" - "7236020420002002410372360204200041086a21010c060b41002802809ac0" - "8000210102400240200020026b2206410f4b0d00410041003602809ac08000" - "410041003602f899c0800020012000410372360204200120006a2200200028" - "02044101723602040c010b410020063602f899c080004100200120026a2205" - "3602809ac0800020052006410172360204200120006a200636020020012002" - "4103723602040b200141086a0f0b2000200720086a36020441004100280284" - "9ac080002200410f6a417871220141786a22063602849ac080004100200020" - "016b41002802fc99c0800020086a22016a41086a22053602fc99c080002006" - "2005410172360204200020016a4128360204410041808080013602909ac080" - "000c030b410020003602849ac08000410041002802fc99c0800020026a2202" - "3602fc99c08000200020024101723602040c010b410020003602809ac08000" - "410041002802f899c0800020026a22023602f899c080002000200241017236" - "0204200020026a20023602000b200541086a0f0b4100210141002802fc99c0" - "8000220020024d0d004100200020026b22013602fc99c08000410041002802" - "849ac08000220020026a22063602849ac08000200620014101723602042000" - "2002410372360204200041086a0f0b20010f0b200020043602180240200628" - "02102205450d0020002005360210200520003602180b20062802142205450d" - "0020002005360214200520003602180b0240024020014110490d0020062002" - "410372360204200620026a22002001410172360204200020016a2001360200" - "02402001418002490d002000200110a7808080000c020b200141f8017141e8" - "97c080006a21020240024041002802f099c080002205410120014103767422" - "01710d00410020052001723602f099c08000200221010c010b200228020821" - "010b200220003602082001200036020c2000200236020c200020013602080c" - "010b2006200120026a2200410372360204200620006a220020002802044101" - "723602040b200641086a0b3000024020002802002d00000d002001418c83c0" - "800041051095808080000f0b2001419183c0800041041095808080000b1400" - "2001200028020420002802081095808080000b7001037f2000280204210102" - "40024020002d0000220041044b0d0020004103470d010b2001280200210002" - "40200141046a28020022022802002203450d00200020031180808080008080" - "8080000b024020022802042202450d00200020021088808080000b2001410c" - "1088808080000b0bab08010a7f23808080800041206b220424808080800002" - "40024002400240024020012802100d002001417f3602102003410020032002" - "41036a417c7120026b22056b41077120032005491b22066b21072003200649" - "0d0102402006450d0002400240200220036a2208417f6a22092d0000410a47" - "0d002006417f6a21060c010b200220076a220a2009460d0102402008417e6a" - "22092d0000410a470d002006417e6a21060c010b200a2009460d0102402008" - "417d6a22092d0000410a470d002006417d6a21060c010b200a2009460d0102" - "402008417c6a22092d0000410a470d002006417c6a21060c010b200a200946" - "0d0102402008417b6a22092d0000410a470d002006417b6a21060c010b200a" - "2009460d0102402008417a6a22092d0000410a470d002006417a6a21060c01" - "0b200a2009460d010240200841796a22092d0000410a470d00200641796a21" - "060c010b200a2009460d01200641787221060b200620076a41016a21060c04" - "0b20052003200320054b1b210b410020066b21082002417c6a210c2006417f" - "7320026a210a02400340200a21052008210620072209200b4d0d0120064178" - "6a2108200541786a210a41808284082002200941786a22076a280200220d41" - "8a94a8d000736b200d724180828408200c20096a280200220d418a94a8d000" - "736b200d727141808182847871418081828478460d000b0b200920034b0d02" - "02400340200320066a450d012006417f6a2106200520036a21092005417f6a" - "210520092d0000410a470d000b200320066a41016a21060c040b0240024020" - "01411c6a28020022060d00410021060c010b2006200141186a2802006a417f" - "6a2d0000410a470d0041002106200141003a00202001411c6a41003602000b" - "0240200128021420066b20034b0d002000200141146a2002200310a1808080" - "000c050b200128021820066a2002200310ad808080001a200041043a000020" - "01411c6a200620036a3602000c040b109a80808000000b20072003108f8080" - "8000000b20092003109480808000000b0240200320064f0d00200441003602" - "182004410136020c2004418c89c0800036020820044204370210200441086a" - "419489c08000108980808000000b02402001411c6a2802002205450d000240" - "0240200128021420056b20064d0d00200141186a28020020056a2002200610" - "ad808080001a2001411c6a200520066a22053602000c010b200441086a2001" - "41146a2002200610a180808000024020042d00084104460d00200020042903" - "083702000c030b2001411c6a28020021050b2005450d00200141003a002020" - "01411c6a41003602000b200220066a210502402001280214200320066b2206" - "4b0d002000200141146a2005200610a1808080000c010b200141186a280200" - "2005200610ad808080001a200041043a00002001411c6a20063602000b2001" - "200128021041016a360210200441206a2480808080000b7101027f20012802" - "002104024020012802082205450d00200420056b20034f0d00410021052001" - "4100360208200141003a000c0b0240200420034d0d00200128020420056a20" - "02200310ad808080001a200041043a00002001200520036a3602080f0b2000" - "4204370200200141003a000c0bc90103027f017e027f23808080800041106b" - "2203248080808000200341086a20002802082802002001200210a080808000" - "024020032d000822024104460d002000280204210420032903082105024002" - "4020002d0000220141044b0d0020014103470d010b20042802002101024020" - "0441046a28020022062802002207450d002001200711808080800080808080" - "000b024020062802042206450d00200120061088808080000b2004410c1088" - "808080000b200020053702000b200341106a24808080800020024104470b9c" - "0303027f017e037f23808080800041106b2202248080808000200241003602" - "0402400240024002402001418001490d002001418010490d01200141808004" - "4f0d0220022001413f71418001723a000620022001410c7641e001723a0004" - "20022001410676413f71418001723a0005410321010c030b200220013a0004" - "410121010c020b20022001413f71418001723a00052002200141067641c001" - "723a0004410221010c010b20022001413f71418001723a0007200220014112" - "7641f001723a000420022001410676413f71418001723a000620022001410c" - "76413f71418001723a0005410421010b200241086a20002802082802002002" - "41046a200110a080808000024020022d000822014104460d00200028020421" - "03200229030821040240024020002d0000220541044b0d0020054103470d01" - "0b200328020021050240200341046a28020022062802002207450d00200520" - "0711808080800080808080000b024020062802042206450d00200520061088" - "808080000b2003410c1088808080000b200020043702000b200241106a2480" - "8080800020014104470b1200200041c085c0800020011087808080000b0300" - "000b0900200041003602000bc30201047f411f21020240200141ffffff074b" - "0d002001410620014108766722026b7641017120024101746b413e6a21020b" - "200042003702102000200236021c200241027441d896c080006a2103024041" - "002802f499c0800041012002742204710d0020032000360200200020033602" - "182000200036020c20002000360208410041002802f499c080002004723602" - "f499c080000f0b024002400240200328020022042802044178712001470d00" - "200421020c010b20014100411920024101766b2002411f461b742103034020" - "042003411d764104716a41106a22052802002202450d022003410174210320" - "02210420022802044178712001470d000b0b20022802082203200036020c20" - "022000360208200041003602182000200236020c200020033602080f0b2005" - "2000360200200020043602182000200036020c200020003602080b82030104" - "7f200028020c21020240024002402001418002490d00200028021821030240" - "0240024020022000470d00200041144110200028021422021b6a2802002201" - "0d01410021020c020b20002802082201200236020c200220013602080c010b" - "200041146a200041106a20021b21040340200421052001220241146a200241" - "106a200228021422011b210420024114411020011b6a28020022010d000b20" - "0541003602000b2003450d020240200028021c41027441d896c080006a2201" - "2802002000460d0020034110411420032802102000461b6a20023602002002" - "450d030c020b2001200236020020020d01410041002802f499c08000417e20" - "0028021c77713602f499c080000c020b0240200220002802082204460d0020" - "04200236020c200220043602080f0b410041002802f099c08000417e200141" - "037677713602f099c080000f0b20022003360218024020002802102201450d" - "0020022001360210200120023602180b20002802142201450d002002200136" - "0214200120023602180f0b0b0b00200010aa80808000000bb50101037f2380" - "8080800041106b2201248080808000200028020c2102024002400240024020" - "002802040e020001020b20020d0141012102410021030c020b20020d002000" - "28020022022802042103200228020021020c010b2001418080808078360200" - "2001200036020c2001418980808000200028021c22002d001c20002d001d10" - "ab80808000000b20012003360204200120023602002001418a808080002000" - "28021c22002d001c20002d001d10ab80808000000b990101027f2380808080" - "0041106b2204248080808000410041002802cc96c08000220541016a3602cc" - "96c08000024020054100480d000240024041002d00a09ac080000d00410041" - "0028029c9ac0800041016a36029c9ac0800041002802c896c08000417f4a0d" - "010c020b200441086a200020011183808080008080808000000b410041003a" - "00a09ac080002002450d0010a580808000000b000b0c002000200129020037" - "03000bc10201087f02400240200241104f0d00200021030c010b2000410020" - "006b41037122046a210502402004450d002000210320012106034020032006" - "2d00003a0000200641016a2106200341016a22032005490d000b0b20052002" - "20046b2207417c7122086a210302400240200120046a2209410371450d0020" - "084101480d012009410374220641187121022009417c71220a41046a210141" - "0020066b4118712104200a2802002106034020052006200276200128020022" - "0620047472360200200141046a2101200541046a22052003490d000c020b0b" - "20084101480d0020092101034020052001280200360200200141046a210120" - "0541046a22052003490d000b0b20074103712102200920086a21010b024020" - "02450d00200320026a21050340200320012d00003a0000200141016a210120" - "0341016a22032005490d000b0b20000b0b96160100418080c0000b8c160a00" - "000001000000000000000000100001000000426f72726f774d75744572726f" - "72616c726561647920626f72726f7765643a2022001000120000003d3d6173" - "73657274696f6e20606c6566742020726967687460206661696c65640a2020" - "6c6566743a200a2072696768743a2000003e001000100000004e0010001700" - "0000650010000900000020726967687460206661696c65643a200a20206c65" - "66743a200000003e0010001000000088001000100000009800100009000000" - "65001000090000003030303130323033303430353036303730383039313031" - "31313231333134313531363137313831393230323132323233323432353236" - "32373238323933303331333233333334333533363337333833393430343134" - "32343334343435343634373438343935303531353235333534353535363537" - "35383539363036313632363336343635363636373638363937303731373237" - "33373437353736373737383739383038313832383338343835383638373838" - "3839393039313932393339343935393639373938393966616c736574727565" - "636f72652f7372632f736c6963652f6d656d6368722e727300000095011000" - "18000000830000001e00000095011000180000009f0000000900000072616e" - "676520737461727420696e64657820206f7574206f662072616e676520666f" - "7220736c696365206f66206c656e67746820d001100012000000e201100022" - "00000072616e676520656e6420696e646578201402100010000000e2011000" - "220000007265656e7472616e7420696e69740000340210000e0000002f7275" - "7374632f633266373463336639323861656235303366313562346539656635" - "373738653737663330353862382f6c6962726172792f636f72652f7372632f" - "63656c6c2f6f6e63652e72730000004c0210004d0000002301000042000000" - "000000000000000004000000040000000b0000000c0000000c000000040000" - "000d0000000e0000000f0000002f727573742f646570732f646c6d616c6c6f" - "632d302e322e362f7372632f646c6d616c6c6f632e7273617373657274696f" - "6e206661696c65643a207073697a65203e3d2073697a65202b206d696e5f6f" - "7665726865616400d802100029000000a80400000900000061737365727469" - "6f6e206661696c65643a207073697a65203c3d2073697a65202b206d61785f" - "6f766572686561640000d802100029000000ae0400000d000000757365206f" - "66207374643a3a7468726561643a3a63757272656e742829206973206e6f74" - "20706f737369626c6520616674657220746865207468726561642773206c6f" - "63616c206461746120686173206265656e2064657374726f7965647374642f" - "7372632f7468726561642f6d6f642e727300de03100015000000f102000013" - "0000006661696c656420746f2067656e657261746520756e69717565207468" - "726561642049443a2062697473706163652065786861757374656400040410" - "0037000000de03100015000000c40400000d00000001000000000000007374" - "642f7372632f696f2f62756666657265642f6c696e65777269746572736869" - "6d2e72736d6964203e206c656e000081041000090000005c04100025000000" - "0f01000029000000656e74697479206e6f7420666f756e647065726d697373" - "696f6e2064656e696564636f6e6e656374696f6e2072656675736564636f6e" - "6e656374696f6e207265736574686f737420756e726561636861626c656e65" - "74776f726b20756e726561636861626c65636f6e6e656374696f6e2061626f" - "727465646e6f7420636f6e6e65637465646164647265737320696e20757365" - "61646472657373206e6f7420617661696c61626c656e6574776f726b20646f" - "776e62726f6b656e2070697065656e7469747920616c726561647920657869" - "7374736f7065726174696f6e20776f756c6420626c6f636b6e6f7420612064" - "69726563746f727969732061206469726563746f72796469726563746f7279" - "206e6f7420656d707479726561642d6f6e6c792066696c6573797374656d20" - "6f722073746f72616765206d656469756d66696c6573797374656d206c6f6f" - "70206f7220696e646972656374696f6e206c696d69742028652e672e207379" - "6d6c696e6b206c6f6f70297374616c65206e6574776f726b2066696c652068" - "616e646c65696e76616c696420696e70757420706172616d65746572696e76" - "616c6964206461746174696d6564206f75747772697465207a65726f6e6f20" - "73746f726167652073706163657365656b206f6e20756e7365656b61626c65" - "2066696c6566696c6573797374656d2071756f746120657863656564656466" - "696c6520746f6f206c617267657265736f7572636520627573796578656375" - "7461626c652066696c652062757379646561646c6f636b63726f73732d6465" - "76696365206c696e6b206f722072656e616d65746f6f206d616e79206c696e" - "6b73696e76616c69642066696c656e616d65617267756d656e74206c697374" - "20746f6f206c6f6e676f7065726174696f6e20696e74657272757074656475" - "6e737570706f72746564756e657870656374656420656e64206f662066696c" - "656f7574206f66206d656d6f72796f74686572206572726f72756e63617465" - "676f72697a6564206572726f7220286f73206572726f722029000000010000" - "0000000000910710000b0000009c071000010000007374642f7372632f696f" - "2f737464696f2e727300b8071000130000002c030000140000006661696c65" - "64207072696e74696e6720746f203a20000000dc07100013000000ef071000" - "02000000b8071000130000005d040000090000007374646f75747374642f73" - "72632f696f2f6d6f642e72736120666f726d617474696e6720747261697420" - "696d706c656d656e746174696f6e2072657475726e656420616e206572726f" - "72207768656e2074686520756e6465726c79696e672073747265616d206469" - "64206e6f740000002b081000560000001a0810001100000028070000150000" - "0063616e6e6f74207265637572736976656c792061637175697265206d7574" - "65789c081000200000007374642f7372632f7379732f73796e632f6d757465" - "782f6e6f5f746872656164732e7273c4081000240000001400000009000000" - "7374642f7372632f73796e632f6f6e63652e7273f808100014000000d90000" - "00140000006c6f636b20636f756e74206f766572666c6f7720696e20726565" - "6e7472616e74206d757465787374642f7372632f73796e632f7265656e7472" - "616e745f6c6f636b2e7273420910001e000000220100002d0000006f706572" - "6174696f6e207375636365737366756c6f6e652d74696d6520696e69746961" - "6c697a6174696f6e206d6179206e6f7420626520706572666f726d65642072" - "65637572736976656c79840910003800000010000000110000001200000010" - "0000001000000013000000120000000d0000000e000000150000000c000000" - "0b00000015000000150000000f0000000e0000001300000026000000380000" - "0019000000170000000c000000090000000a00000010000000170000001900" - "00000e0000000d00000014000000080000001b0000000e0000001000000016" - "000000150000000b000000160000000d0000000b00000013000000a4041000" - "b4041000c5041000d7041000e7041000f70410000a0510001c051000290510" - "00370510004c0510005805100063051000780510008d0510009c051000aa05" - "1000bd051000e30510001b061000340610004b06100057061000600610006a" - "0610007a06100091061000aa061000b8061000c5061000d9061000e1061000" - "fc0610000a0710001a07100030071000450710005007100066071000730710" - "007e071000009118046e616d65000e0d7761736d5f6c69622e7761736d01d9" - "172e0005726563757201625f5a4e34636f726533666d74336e756d33696d70" - "35325f244c5424696d706c2475323024636f72652e2e666d742e2e44697370" - "6c61792475323024666f7224753230246933322447542433666d7431376863" - "6564393063376136333963303164644502495f5a4e337374643473796e6339" - "6f6e63655f6c6f636b31374f6e63654c6f636b244c54245424475424313069" - "6e697469616c697a6531376837663563353038646139653162303962450342" - "5f5a4e34636f72653463656c6c346f6e636531374f6e636543656c6c244c54" - "245424475424387472795f696e697431376863653633626632323835313931" - "65373145043e5f5a4e35616c6c6f633473796e633136417263244c54245424" - "432441244754243964726f705f736c6f773137686565396163636361643963" - "63313036394505355f5a4e34636f72653970616e69636b696e673133617373" - "6572745f6661696c6564313768323332363266326333633738623661624506" - "325f5a4e34636f7265366f7074696f6e31336578706563745f6661696c6564" - "313768663038613939653264373333366336614507265f5a4e34636f726533" - "666d743577726974653137683933353534653462653731663263376145080e" - "5f5f727573745f6465616c6c6f6309305f5a4e34636f72653970616e69636b" - "696e673970616e69635f666d74313768363534306363623264356664633361" - "62450a595f5a4e36305f244c54247374642e2e696f2e2e6572726f722e2e45" - "72726f72247532302461732475323024636f72652e2e666d742e2e44697370" - "6c61792447542433666d743137683930323731633762326136636538333945" - "0b495f5a4e34345f244c54242452462454247532302461732475323024636f" - "72652e2e666d742e2e446973706c61792447542433666d7431376837666634" - "643062383630396332343732450c097265637572736976650d415f5a4e3864" - "6c6d616c6c6f6338646c6d616c6c6f633137446c6d616c6c6f63244c542441" - "24475424346672656531376833393833346161616165336538393436450e2c" - "5f5a4e34636f72653970616e69636b696e673570616e696331376830346565" - "623931376464393363323239450f445f5a4e34636f726535736c6963653569" - "6e6465783236736c6963655f73746172745f696e6465785f6c656e5f666169" - "6c313768663931613361666538376231643434334510625f5a4e34636f7265" - "33666d74336e756d33696d7035325f244c5424696d706c2475323024636f72" - "652e2e666d742e2e446973706c61792475323024666f722475323024753332" - "2447542433666d74313768626633653032323834383365333735614511305f" - "5a4e34636f726533666d74336e756d33696d7037666d745f75363431376864" - "353231666136656636613036373261451211727573745f626567696e5f756e" - "77696e6413465f5a4e34636f726533666d7439466f726d6174746572313270" - "61645f696e74656772616c313277726974655f707265666978313768613961" - "343332383062363030366431324514425f5a4e34636f726535736c69636535" - "696e6465783234736c6963655f656e645f696e6465785f6c656e5f6661696c" - "3137683038386235366532393962656161616645152e5f5a4e34636f726533" - "666d7439466f726d6174746572337061643137683437363961653338393337" - "346363353145163b5f5a4e34636f72653970616e69636b696e673139617373" - "6572745f6661696c65645f696e6e6572313768366637653332353764383461" - "353034324517475f5a4e34325f244c54242452462454247532302461732475" - "323024636f72652e2e666d742e2e44656275672447542433666d7431376833" - "6136626161316262343761643230344518585f5a4e35395f244c5424636f72" - "652e2e666d742e2e417267756d656e7473247532302461732475323024636f" - "72652e2e666d742e2e446973706c61792447542433666d7431376836386133" - "65386535303963616663363445195c5f5a4e36335f244c5424636f72652e2e" - "63656c6c2e2e426f72726f774d75744572726f722475323024617324753230" - "24636f72652e2e666d742e2e44656275672447542433666d74313768313564" - "33643334333462646463636338451a395f5a4e34636f72653463656c6c3232" - "70616e69635f616c72656164795f626f72726f776564313768333134623532" - "61316263343662666534451b395f5a4e337374643674687265616438546872" - "6561644964336e657739657868617573746564313768333336626637613134" - "38383034346338451c435f5a4e38646c6d616c6c6f6338646c6d616c6c6f63" - "3137446c6d616c6c6f63244c54244124475424366d616c6c6f633137686536" - "3539333961346338393763633135451d475f5a4e34325f244c542424524624" - "54247532302461732475323024636f72652e2e666d742e2e44656275672447" - "542433666d7431376865313837343338386530376266653235451e595f5a4e" - "36305f244c5424616c6c6f632e2e737472696e672e2e537472696e67247532" - "302461732475323024636f72652e2e666d742e2e446973706c617924475424" - "33666d7431376863653432323661613166373236633163451f7a5f5a4e3463" - "6f726533707472383864726f705f696e5f706c616365244c54247374642e2e" - "696f2e2e57726974652e2e77726974655f666d742e2e41646170746572244c" - "5424616c6c6f632e2e7665632e2e566563244c542475382447542424475424" - "24475424313768313636646336316162303333346331654520605f5a4e3631" - "5f244c54247374642e2e696f2e2e737464696f2e2e5374646f75744c6f636b" - "2475323024617324753230247374642e2e696f2e2e57726974652447542439" - "77726974655f616c6c31376832346238323631303436316432353666452155" - "5f5a4e3373746432696f386275666665726564396275667772697465723138" - "427566577269746572244c54245724475424313477726974655f616c6c5f63" - "6f6c64313768353834626462626165623066623162624522735f5a4e38305f" - "244c54247374642e2e696f2e2e57726974652e2e77726974655f666d742e2e" - "41646170746572244c54245424475424247532302461732475323024636f72" - "652e2e666d742e2e5772697465244754243977726974655f73747231376837" - "6661636635626330656663643830384523325f5a4e34636f726533666d7435" - "5772697465313077726974655f636861723137686630623362653165633139" - "64653565374524305f5a4e34636f726533666d743557726974653977726974" - "655f666d743137686638383038663064663065343531336445250a72757374" - "5f70616e696326375f5a4e34636f72653570616e6963313250616e69635061" - "796c6f61643661735f73747231376836313439663134326439613265303265" - "4527505f5a4e38646c6d616c6c6f6338646c6d616c6c6f633137446c6d616c" - "6c6f63244c542441244754243138696e736572745f6c617267655f6368756e" - "6b3137686566653835316132373538326461376245284a5f5a4e38646c6d61" - "6c6c6f6338646c6d616c6c6f633137446c6d616c6c6f63244c542441244754" - "243132756e6c696e6b5f6368756e6b31376839333465336463333833626235" - "3861334529455f5a4e3373746433737973396261636b747261636532365f5f" - "727573745f656e645f73686f72745f6261636b747261636531376834646333" - "646534376432323032316239452a585f5a4e337374643970616e69636b696e" - "673139626567696e5f70616e69635f68616e646c657232385f247537622424" - "75376224636c6f737572652475376424247537642431376865313761333937" - "376638396331313738452b3b5f5a4e337374643970616e69636b696e673230" - "727573745f70616e69635f776974685f686f6f6b3137683737366537396339" - "6636353931626535452c83015f5a4e39395f244c54247374642e2e70616e69" - "636b696e672e2e626567696e5f70616e69635f68616e646c65722e2e537461" - "7469635374725061796c6f6164247532302461732475323024636f72652e2e" - "70616e69632e2e50616e69635061796c6f6164244754243661735f73747231" - "376865623366373232643232346534326638452d066d656d63707907120100" - "0f5f5f737461636b5f706f696e746572090a0100072e726f64617461005509" - "70726f64756365727302086c616e6775616765010452757374000c70726f63" - "65737365642d62790105727573746325312e38332e302d6e696768746c7920" - "2863326637346333663920323032342d30392d30392900490f746172676574" - "5f6665617475726573042b0a6d756c746976616c75652b0f6d757461626c65" - "2d676c6f62616c732b0f7265666572656e63652d74797065732b087369676e" - "2d657874"; + "0061736d010000000105016000017f030201000608017f0141c0843d0b070a010666696e69" + "736800000a16011400230045044041010f0b230041016b240010000b"; extern std::string const hfPerfTest = "0061736d0100000001190460057f7f7f7f7f017f60047f7f7f7f017f6000006000017f0236" diff --git a/src/test/app/wasm_fixtures/fixtures.h b/src/test/app/wasm_fixtures/fixtures.h index f7c258326f..abde376763 100644 --- a/src/test/app/wasm_fixtures/fixtures.h +++ b/src/test/app/wasm_fixtures/fixtures.h @@ -16,10 +16,6 @@ extern std::string const b58WasmHex; extern std::string const sha512PureWasmHex; -extern std::string const zkProofWasmHex; - -extern std::string const sp1WasmHex; - extern std::string const hfPerfTest; extern std::string const allKeyletsWasmHex; diff --git a/src/test/app/wasm_fixtures/sp1/Cargo.lock b/src/test/app/wasm_fixtures/sp1/Cargo.lock deleted file mode 100644 index 4374624cd2..0000000000 --- a/src/test/app/wasm_fixtures/sp1/Cargo.lock +++ /dev/null @@ -1,1384 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "anstream" -version = "0.6.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" - -[[package]] -name = "anstyle-parse" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" -dependencies = [ - "windows-sys 0.60.2", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" -dependencies = [ - "anstyle", - "once_cell_polyfill", - "windows-sys 0.60.2", -] - -[[package]] -name = "anyhow" -version = "1.0.98" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" - -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" - -[[package]] -name = "arrayvec" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" - -[[package]] -name = "autocfg" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" - -[[package]] -name = "base16ct" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "bitflags" -version = "2.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" - -[[package]] -name = "blake3" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" -dependencies = [ - "arrayref", - "arrayvec", - "cc", - "cfg-if", - "constant_time_eq", -] - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "bumpalo" -version = "3.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" - -[[package]] -name = "bytemuck" -version = "1.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" -dependencies = [ - "bytemuck_derive", -] - -[[package]] -name = "bytemuck_derive" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f154e572231cb6ba2bd1176980827e3d5dc04cc183a75dea38109fbdd672d29" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "camino" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo-platform" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" -dependencies = [ - "camino", - "cargo-platform", - "semver", - "serde", - "serde_json", - "thiserror 1.0.69", -] - -[[package]] -name = "cc" -version = "1.2.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3a42d84bb6b69d3a8b3eaacf0d88f179e1929695e1ad012b6cf64d9caaa5fd2" -dependencies = [ - "shlex", -] - -[[package]] -name = "cfg-if" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" - -[[package]] -name = "chrono" -version = "0.4.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" -dependencies = [ - "android-tzdata", - "iana-time-zone", - "num-traits", - "windows-link", -] - -[[package]] -name = "clap" -version = "4.5.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50fd97c9dc2399518aa331917ac6f274280ec5eb34e555dd291899745c48ec6f" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.5.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c35b5830294e1fa0462034af85cc95225a4cb07092c088c55bda3147cfcd8f65" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", -] - -[[package]] -name = "clap_derive" -version = "4.5.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "clap_lex" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" - -[[package]] -name = "colorchoice" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" - -[[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - -[[package]] -name = "constant_time_eq" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" - -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - -[[package]] -name = "cpufeatures" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -dependencies = [ - "libc", -] - -[[package]] -name = "crunchy" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" - -[[package]] -name = "crypto-bigint" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" -dependencies = [ - "generic-array", - "rand_core", - "subtle", - "zeroize", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "der" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" -dependencies = [ - "const-oid", - "zeroize", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "crypto-common", - "subtle", -] - -[[package]] -name = "dirs" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" -dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.48.0", -] - -[[package]] -name = "either" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" - -[[package]] -name = "elliptic-curve" -version = "0.13.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" -dependencies = [ - "base16ct", - "crypto-bigint", - "digest", - "ff", - "generic-array", - "group", - "hkdf", - "rand_core", - "sec1", - "subtle", - "zeroize", -] - -[[package]] -name = "ff" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" -dependencies = [ - "rand_core", - "subtle", -] - -[[package]] -name = "gcd" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", - "zeroize", -] - -[[package]] -name = "getrandom" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "group" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" -dependencies = [ - "ff", - "rand_core", - "subtle", -] - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hkdf" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" -dependencies = [ - "hmac", -] - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.63" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "log", - "wasm-bindgen", - "windows-core", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "is_terminal_polyfill" -version = "1.70.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" - -[[package]] -name = "itertools" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" - -[[package]] -name = "js-sys" -version = "0.3.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" -dependencies = [ - "once_cell", - "wasm-bindgen", -] - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -dependencies = [ - "spin", -] - -[[package]] -name = "libc" -version = "0.2.174" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" - -[[package]] -name = "libredox" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" -dependencies = [ - "bitflags", - "libc", -] - -[[package]] -name = "log" -version = "0.4.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" - -[[package]] -name = "memchr" -version = "2.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" - -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", -] - -[[package]] -name = "once_cell" -version = "1.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" - -[[package]] -name = "once_cell_polyfill" -version = "1.70.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" - -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - -[[package]] -name = "p3-baby-bear" -version = "0.2.2-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ecc3edc6fb8186268e05031c26a8b2b1e567957d63adcae1026d55d6bb189b" -dependencies = [ - "num-bigint", - "p3-field", - "p3-mds", - "p3-poseidon2", - "p3-symmetric", - "rand", - "serde", -] - -[[package]] -name = "p3-dft" -version = "0.2.2-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eece7b035978976138622b116fefe6c4cc372b1ce70739c40e7a351a9bb68f1f" -dependencies = [ - "p3-field", - "p3-matrix", - "p3-maybe-rayon", - "p3-util", - "tracing", -] - -[[package]] -name = "p3-field" -version = "0.2.2-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6f0edf3fde4fd0d1455e901fc871c558010ae18db6e68f1b0fa111391855316" -dependencies = [ - "itertools", - "num-bigint", - "num-traits", - "p3-util", - "rand", - "serde", -] - -[[package]] -name = "p3-matrix" -version = "0.2.2-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60961b4d7ffd2e8412ce4e66e213de610356df71cc4e396519c856a664138a27" -dependencies = [ - "itertools", - "p3-field", - "p3-maybe-rayon", - "p3-util", - "rand", - "serde", - "tracing", -] - -[[package]] -name = "p3-maybe-rayon" -version = "0.2.2-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bbe762738c382c9483410f52348ab9de41bb42c391e8171643a71486cf1ef8f" - -[[package]] -name = "p3-mds" -version = "0.2.2-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4127956cc6c783b7d021c5c42d5d89456d5f3bda4a7b165fcc2a3fd4e78fbede" -dependencies = [ - "itertools", - "p3-dft", - "p3-field", - "p3-matrix", - "p3-symmetric", - "p3-util", - "rand", -] - -[[package]] -name = "p3-poseidon2" -version = "0.2.2-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be09497da406a98e89dc05c1ce539eeef29541bad61a5b2108a44ffe94dd0b4c" -dependencies = [ - "gcd", - "p3-field", - "p3-mds", - "p3-symmetric", - "rand", - "serde", -] - -[[package]] -name = "p3-symmetric" -version = "0.2.2-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e7d954033f657d48490344ca4b3dbcc054962a0e92831b736666bb2f5e5820b" -dependencies = [ - "itertools", - "p3-field", - "serde", -] - -[[package]] -name = "p3-util" -version = "0.2.2-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a6ce0b6bee23fd54e05306f6752ae80b0b71a91166553ab39d7899801497237" -dependencies = [ - "serde", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" - -[[package]] -name = "ppv-lite86" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" -dependencies = [ - "zerocopy", -] - -[[package]] -name = "proc-macro2" -version = "1.0.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha", - "rand_core", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] - -[[package]] -name = "redox_users" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" -dependencies = [ - "getrandom", - "libredox", - "thiserror 1.0.69", -] - -[[package]] -name = "rustc-hex" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" - -[[package]] -name = "rustversion" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" - -[[package]] -name = "ryu" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" - -[[package]] -name = "sec1" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" -dependencies = [ - "base16ct", - "der", - "generic-array", - "subtle", - "zeroize", -] - -[[package]] -name = "semver" -version = "1.0.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" -dependencies = [ - "serde", -] - -[[package]] -name = "serde" -version = "1.0.219" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.219" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.142" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7" -dependencies = [ - "itoa", - "memchr", - "ryu", - "serde", -] - -[[package]] -name = "sha2" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "sp1" -version = "0.0.1" -dependencies = [ - "sp1-verifier", -] - -[[package]] -name = "sp1-build" -version = "4.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05372b4e3eecca255ba8e385f8dc294861a3b4ea0b0a9946873e39941011db4c" -dependencies = [ - "anyhow", - "cargo_metadata", - "chrono", - "clap", - "dirs", -] - -[[package]] -name = "sp1-lib" -version = "4.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e166e94b13146c65de433cf29acc1030f021414fbebfc24cd4eeaeb787ba3443" -dependencies = [ - "bincode", - "elliptic-curve", - "serde", - "sp1-primitives", -] - -[[package]] -name = "sp1-primitives" -version = "4.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a85ffe9606bd2cc93575ce608f063ca08521cee9bdebf611914c5b2d90d7412" -dependencies = [ - "bincode", - "blake3", - "cfg-if", - "hex", - "lazy_static", - "num-bigint", - "p3-baby-bear", - "p3-field", - "p3-poseidon2", - "p3-symmetric", - "serde", - "sha2", -] - -[[package]] -name = "sp1-verifier" -version = "4.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d94a7db4a54984acf4d64c6ba55c4698104f02ef213cc21882e233b4409e7155" -dependencies = [ - "blake3", - "cfg-if", - "hex", - "lazy_static", - "sha2", - "sp1-build", - "substrate-bn-succinct", - "thiserror 2.0.12", -] - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - -[[package]] -name = "substrate-bn-succinct" -version = "0.6.0-v4.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ac8ce0a40e721f790e2ef99beab32b99b3121c58edaaa140ffd8f1795a6af7" -dependencies = [ - "bytemuck", - "byteorder", - "cfg-if", - "crunchy", - "lazy_static", - "num-bigint", - "rand", - "rustc-hex", - "sp1-lib", -] - -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - -[[package]] -name = "syn" -version = "2.0.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl 1.0.69", -] - -[[package]] -name = "thiserror" -version = "2.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" -dependencies = [ - "thiserror-impl 2.0.12", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "thiserror-impl" -version = "2.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tracing" -version = "0.1.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" -dependencies = [ - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tracing-core" -version = "0.1.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" -dependencies = [ - "once_cell", -] - -[[package]] -name = "typenum" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" - -[[package]] -name = "unicode-ident" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" - -[[package]] -name = "utf8parse" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" - -[[package]] -name = "wasm-bindgen" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" -dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "windows-core" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-link", - "windows-result", - "windows-strings", -] - -[[package]] -name = "windows-implement" -version = "0.60.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "windows-interface" -version = "0.59.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "windows-link" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" - -[[package]] -name = "windows-result" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows-strings" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets 0.53.3", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.53.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" -dependencies = [ - "windows-link", - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_i686_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" - -[[package]] -name = "zerocopy" -version = "0.8.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "zeroize" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" diff --git a/src/test/app/wasm_fixtures/sp1/Cargo.toml b/src/test/app/wasm_fixtures/sp1/Cargo.toml deleted file mode 100644 index d730160aea..0000000000 --- a/src/test/app/wasm_fixtures/sp1/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -edition = "2021" -name = "sp1" -version = "0.0.1" - -[lib] -crate-type = ["cdylib"] - -[dependencies] -sp1-verifier = "4.1.3" - -[profile.release] -opt-level = 3 # "z" for size or "3" for speed -lto = true # Link Time Optimization -codegen-units = 1 # Single unit = better optimization -panic = "abort" # Smaller binary, faster execution diff --git a/src/test/app/wasm_fixtures/sp1/src/lib.rs b/src/test/app/wasm_fixtures/sp1/src/lib.rs deleted file mode 100644 index f918e4f42d..0000000000 --- a/src/test/app/wasm_fixtures/sp1/src/lib.rs +++ /dev/null @@ -1,37 +0,0 @@ -use sp1_verifier::Groth16Verifier; - -#[no_mangle] -pub fn sp1_groth16_verifier() -> bool { - let groth16_vk = *sp1_verifier::GROTH16_VK_BYTES; - - let proof: Vec = vec![ - 17, 182, 160, 157, 31, 189, 116, 200, 17, 224, 230, 34, 195, 108, 230, 185, 62, 91, 181, - 212, 80, 111, 197, 89, 247, 206, 99, 206, 147, 13, 216, 101, 252, 192, 149, 2, 40, 4, 249, - 44, 97, 227, 127, 36, 244, 18, 27, 75, 248, 3, 45, 11, 103, 45, 183, 204, 61, 217, 19, 208, - 66, 73, 202, 108, 136, 162, 221, 184, 6, 189, 49, 196, 104, 128, 151, 21, 104, 109, 145, - 150, 243, 51, 27, 243, 203, 75, 176, 59, 193, 51, 177, 64, 83, 13, 133, 140, 248, 242, 13, - 24, 12, 103, 126, 112, 244, 181, 129, 246, 52, 110, 134, 57, 149, 23, 163, 43, 202, 7, 164, - 233, 179, 160, 16, 5, 22, 45, 129, 76, 183, 76, 150, 139, 27, 224, 191, 59, 47, 105, 71, - 47, 8, 176, 157, 159, 234, 253, 239, 131, 138, 120, 101, 4, 98, 236, 106, 235, 98, 76, 93, - 220, 174, 153, 58, 216, 28, 141, 129, 191, 188, 40, 184, 225, 22, 61, 75, 139, 159, 162, - 117, 83, 214, 239, 1, 246, 236, 255, 64, 228, 116, 107, 206, 23, 59, 3, 221, 95, 14, 170, - 28, 171, 36, 179, 75, 101, 177, 40, 198, 12, 193, 82, 105, 155, 177, 62, 158, 72, 209, 252, - 51, 169, 109, 32, 121, 179, 194, 73, 164, 14, 8, 206, 181, 9, 5, 38, 74, 136, 97, 0, 89, - 80, 75, 88, 228, 94, 46, 196, 199, 83, 229, 11, 103, 115, 25, 31, 215, 137, 65, 159, 95, - 192, - ]; - - let sp1_public_values = vec![ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 8, - ]; - - let sp1_vkey_hash: String = - "0x00aea8e9c83c73d74036923de1b4a66d18547d58eee4eacfee70235ed291954c".to_string(); - - let _ = Groth16Verifier::verify(&proof, &sp1_public_values, &sp1_vkey_hash, groth16_vk); - - true -} diff --git a/src/test/app/wasm_fixtures/wat/deep_recursion.wat b/src/test/app/wasm_fixtures/wat/deep_recursion.wat new file mode 100644 index 0000000000..8e1f02c001 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/deep_recursion.wat @@ -0,0 +1,29 @@ +(module + ;; Define a Mutable Global Variable to act as our counter. + ;; We initialize it to 1,000,000. + (global $counter (mut i32) (i32.const 1000000)) + + (func $finish (result i32) + ;; 1. Check if counter == 0 (Base Case) + global.get $counter + i32.eqz + if + ;; If counter is 0, we are done. Return 1. + i32.const 1 + return + end + + ;; 2. Decrement the Global Counter + global.get $counter + i32.const 1 + i32.sub + global.set $counter + + ;; 3. Recursive Step: Call SELF + ;; This puts an i32 (1) on the stack when it returns. + call $finish + ) + + ;; Export the only function we have + (export "finish" (func $finish)) +) diff --git a/src/test/app/wasm_fixtures/zk_proof/Cargo.lock b/src/test/app/wasm_fixtures/zk_proof/Cargo.lock deleted file mode 100644 index f042837723..0000000000 --- a/src/test/app/wasm_fixtures/zk_proof/Cargo.lock +++ /dev/null @@ -1,106 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "bitvec" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - -[[package]] -name = "bls12_381" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7bc6d6292be3a19e6379786dac800f551e5865a5bb51ebbe3064ab80433f403" -dependencies = [ - "ff", - "group", - "pairing", - "rand_core", - "subtle", -] - -[[package]] -name = "ff" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" -dependencies = [ - "bitvec", - "rand_core", - "subtle", -] - -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - -[[package]] -name = "group" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" -dependencies = [ - "ff", - "rand_core", - "subtle", -] - -[[package]] -name = "pairing" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" -dependencies = [ - "group", -] - -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" - -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "zk_proof" -version = "0.0.1" -dependencies = [ - "bls12_381", - "group", -] diff --git a/src/test/app/wasm_fixtures/zk_proof/Cargo.toml b/src/test/app/wasm_fixtures/zk_proof/Cargo.toml deleted file mode 100644 index 3e556d4317..0000000000 --- a/src/test/app/wasm_fixtures/zk_proof/Cargo.toml +++ /dev/null @@ -1,19 +0,0 @@ -[package] -edition = "2021" -name = "zk_proof" -version = "0.0.1" - -[lib] -crate-type = ["cdylib"] - -[dependencies] -# bellman = "=0.14.0" -bls12_381 = "=0.8.0" -group = "0.13.0" - -[profile.release] -# opt-level = 3 # Optimize for time -opt-level = "z" # Optimize for size -lto = true # Enable Link Time Optimization -codegen-units = 1 -panic = "abort" # Remove unnecessary panic machinery diff --git a/src/test/app/wasm_fixtures/zk_proof/src/lib.rs b/src/test/app/wasm_fixtures/zk_proof/src/lib.rs deleted file mode 100644 index 4d44d8e342..0000000000 --- a/src/test/app/wasm_fixtures/zk_proof/src/lib.rs +++ /dev/null @@ -1,254 +0,0 @@ -use bls12_381::multi_miller_loop; -use bls12_381::Scalar; -use bls12_381::{G1Affine, G2Affine, G2Prepared}; -use group::prime::PrimeCurveAffine; -use group::Curve; - -use std::mem; -use std::os::raw::c_void; -// use std::time::{Instant}; - -// Groth16 proof struct -pub struct Proof { - pub a: G1Affine, - pub b: G2Affine, - pub c: G1Affine, -} - -// Groth16 verification key struct -pub struct VerifyingKey { - pub alpha_g1: G1Affine, - pub beta_g1: G1Affine, - pub beta_g2: G2Affine, - pub gamma_g2: G2Affine, - pub delta_g1: G1Affine, - pub delta_g2: G2Affine, - pub ic: Vec, -} - -#[no_mangle] -pub extern "C" fn allocate(size: usize) -> *mut c_void { - let mut buffer = Vec::with_capacity(size); - let pointer = buffer.as_mut_ptr(); - mem::forget(buffer); - pointer as *mut c_void - // } -} - -#[no_mangle] -fn deserialize_g1_wasm(buffer: &mut Vec) -> G1Affine { - let d_g1 = G1Affine::from_compressed(&buffer[0..48].try_into().unwrap()) - .expect("Failed to deserialize vk"); - - d_g1 -} - -fn deserialize_g2_wasm(buffer: &mut Vec) -> G2Affine { - let d_g2 = G2Affine::from_compressed(&buffer[0..96].try_into().unwrap()) - .expect("Failed to deserialize vk"); - - d_g2 -} - -#[no_mangle] -// pub extern fn bellman_groth16_test(pointer: *mut u8, capacity: usize) -> bool { -pub extern "C" fn bellman_groth16_test() -> bool { - // let mut bytes = Vec::new(); - // unsafe { - // // println!("Test in vm {:?}", pointer); - // let v = Vec::from_raw_parts(pointer, capacity, capacity); //TODO no need to deallocate?? - // bytes.extend_from_slice(&v); - // } - - // Hardcode the input bytes for testing in different WASM VMs - // let bytes = [172, 197, 81, 189, 121, 193, 159, 27, 92, 95, 151, 164, 40, 59, 214, 96, 132, 58, 87, 37, 169, 1, 63, 230, 35, 74, 245, 6, 185, 56, 120, 108, 214, 179, 187, 21, 36, 206, 43, 160, 10, 250, 249, 73, 210, 35, 137, 87, 177, 66, 65, 154, 11, 232, 137, 246, 125, 72, 227, 222, 116, 168, 87, 24, 165, 160, 132, 109, 108, 101, 222, 143, 78, 97, 48, 95, 59, 177, 29, 247, 219, 166, 73, 249, 69, 206, 15, 151, 30, 248, 235, 63, 148, 240, 17, 22, 150, 67, 252, 141, 95, 179, 94, 111, 207, 201, 192, 144, 154, 94, 21, 2, 22, 58, 96, 144, 227, 107, 107, 182, 142, 0, 57, 27, 168, 39, 226, 40, 163, 159, 112, 83, 196, 182, 215, 74, 92, 20, 158, 60, 23, 184, 198, 143, 17, 6, 242, 7, 75, 220, 87, 47, 224, 145, 99, 169, 203, 218, 112, 185, 51, 102, 59, 56, 171, 46, 49, 255, 116, 108, 241, 50, 180, 247, 62, 218, 181, 197, 155, 80, 61, 252, 8, 41, 232, 73, 51, 250, 223, 82, 94, 8, 185, 83, 223, 187, 6, 41, 20, 62, 189, 254, 11, 11, 58, 187, 200, 88, 53, 234, 98, 172, 213, 62, 22, 34, 90, 166, 182, 133, 8, 230, 103, 219, 233, 141, 10, 137, 210, 151, 4, 129, 29, 92, 103, 251, 72, 182, 162, 59, 20, 222, 188, 232, 13, 74, 214, 182, 172, 120, 33, 198, 57, 204, 134, 93, 26, 79, 213, 45, 146, 6, 128, 103, 63, 202, 226, 120, 141, 193, 248, 65, 196, 235, 21, 184, 104, 228, 206, 117, 190, 28, 153, 183, 68, 36, 63, 60, 131, 87, 137, 213, 105, 27, 110, 37, 238, 200, 250, 145, 76, 25, 57, 81, 69, 164, 208, 255, 49, 80, 14, 64, 181, 143, 12, 58, 35, 63, 199, 35, 70, 25, 86, 158, 210, 150, 59, 159, 253, 238, 174, 211, 142, 166, 223, 51, 134, 118, 171, 27, 218, 219, 117, 163, 71, 134, 95, 142, 83, 251, 240, 241, 162, 232, 93, 248, 167, 112, 197, 212, 169, 209, 159, 101, 140, 248, 222, 234, 201, 169, 76, 242, 7, 10, 192, 30, 151, 167, 74, 186, 97, 121, 144, 36, 6, 187, 92, 7, 248, 45, 134, 85, 240, 112, 74, 224, 70, 64, 198, 59, 26, 195, 192, 140, 101, 118, 175, 17, 160, 195, 142, 133, 1, 139, 5, 130, 245, 17, 73, 176, 232, 107, 130, 172, 110, 20, 190, 37, 108, 250, 178, 187, 151, 158, 35, 248, 246, 143, 38, 212, 133, 226, 24, 45, 33, 164, 46, 125, 200, 157, 253, 225, 132, 181, 60, 90, 7, 240, 80, 232, 97, 206, 164, 28, 12, 75, 68, 126, 230, 145, 216, 45, 180, 203, 19, 152, 29, 203, 9, 4, 145, 122, 206, 146, 179, 44, 145, 191, 126, 199, 175, 171, 127, 189, 222, 108, 126, 161, 80, 190, 47, 44, 8, 40, 65, 68, 95, 61, 109, 148, 175, 113, 226, 8, 93, 126, 53, 39, 192, 196, 6, 152, 194, 105, 169, 226, 192, 201, 184, 198, 134, 210, 153, 170, 12, 241, 90, 250, 233, 20, 152, 119, 142, 120, 83, 2, 164, 80, 178, 125, 227, 253, 207, 240, 201, 127, 213, 196, 100, 90, 65, 120, 50, 108, 175, 34, 192, 197, 173, 202, 176, 210, 131, 22, 216, 57, 169, 241, 28, 40, 44, 62, 11, 42, 50, 46, 204, 242, 109, 158, 114, 41, 127, 206, 25, 194, 255, 128, 245, 232, 193, 189, 229, 51, 93, 94, 64, 117, 33, 132, 75, 253, 114, 64, 116, 155, 183, 137, 112, 201, 243, 13, 221, 142, 164, 59, 98, 152, 249, 40, 133, 70, 185, 231, 249, 151, 253, 240, 122, 214, 60, 18, 132, 177, 37, 42, 75, 206, 12, 100, 214, 248, 234, 78, 165, 74, 212, 248, 32, 162, 254, 227, 218, 46, 9, 87, 0, 118, 13, 249, 107, 83, 5, 138, 223, 9, 247, 70, 160, 228, 197, 54, 87, 18, 1, 37, 199, 162, 84, 189, 161, 10, 26, 75, 45, 168, 185, 153, 245, 243, 51, 176, 208, 187, 235, 135, 239, 231, 42, 43, 233, 150, 46, 249, 73, 229, 138, 84, 89, 75, 129, 238, 211, 80, 147, 67, 159, 227, 214, 131, 188, 130, 70, 224, 1, 77, 139, 239, 185, 53, 68, 41, 193, 207, 16, 2, 33, 139, 214, 103, 240, 14, 141, 223, 24, 236, 50, 64, 79, 178, 6, 79, 38, 165, 35, 173, 203, 101, 3, 162, 49, 51, 4, 151, 127, 49, 47, 223, 244, 157, 229, 7, 88, 106, 141, 167, 183, 220, 15, 8, 119, 12, 82, 218, 14, 207, 0, 73, 27, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; - let bytes = [ - 147, 235, 138, 182, 249, 146, 149, 28, 58, 36, 144, 99, 188, 155, 153, 135, 239, 79, 76, - 109, 152, 156, 202, 1, 153, 84, 239, 184, 69, 145, 133, 48, 156, 80, 122, 227, 231, 161, - 137, 232, 67, 183, 34, 186, 230, 135, 25, 90, 136, 201, 110, 134, 208, 93, 78, 82, 153, - 239, 208, 236, 160, 231, 192, 150, 215, 128, 193, 255, 107, 39, 133, 12, 136, 148, 119, 17, - 59, 198, 100, 49, 37, 89, 132, 205, 45, 79, 151, 112, 247, 140, 94, 179, 215, 165, 52, 182, - 153, 68, 204, 210, 218, 156, 69, 74, 192, 30, 160, 13, 80, 188, 23, 112, 21, 124, 91, 147, - 21, 140, 217, 226, 248, 60, 182, 119, 18, 34, 32, 41, 181, 128, 165, 97, 168, 76, 98, 44, - 114, 122, 128, 215, 68, 156, 18, 91, 5, 33, 22, 141, 249, 137, 49, 252, 82, 122, 206, 58, - 183, 108, 176, 15, 38, 183, 87, 254, 34, 102, 195, 78, 166, 227, 96, 180, 137, 173, 131, - 178, 179, 25, 89, 159, 5, 73, 125, 24, 25, 86, 227, 19, 184, 117, 228, 173, 150, 1, 82, - 142, 48, 251, 236, 132, 73, 79, 201, 165, 192, 191, 195, 60, 100, 198, 251, 187, 161, 220, - 63, 143, 38, 21, 189, 219, 194, 100, 64, 186, 102, 7, 186, 213, 227, 92, 228, 52, 181, 171, - 223, 222, 218, 206, 221, 22, 15, 46, 77, 175, 34, 43, 221, 110, 21, 89, 149, 213, 68, 242, - 140, 185, 176, 73, 88, 216, 75, 237, 209, 10, 75, 251, 152, 101, 15, 146, 168, 27, 81, 8, - 61, 76, 103, 230, 171, 23, 144, 171, 6, 118, 157, 233, 234, 214, 132, 106, 30, 171, 121, - 77, 147, 175, 170, 62, 48, 251, 12, 221, 202, 109, 80, 97, 180, 27, 45, 87, 162, 19, 168, - 152, 27, 205, 113, 91, 83, 52, 99, 109, 17, 149, 189, 244, 174, 164, 192, 79, 133, 111, - 195, 215, 232, 129, 166, 204, 3, 169, 248, 49, 18, 190, 198, 145, 177, 169, 10, 4, 66, 134, - 46, 11, 163, 170, 94, 230, 234, 234, 43, 122, 51, 230, 100, 106, 149, 228, 208, 217, 87, - 231, 125, 170, 47, 143, 151, 45, 208, 64, 91, 10, 188, 136, 15, 155, 131, 200, 141, 243, - 200, 5, 109, 22, 98, 189, 193, 44, 40, 95, 126, 145, 234, 190, 205, 179, 172, 224, 147, - 253, 238, 162, 157, 60, 126, 9, 174, 34, 16, 161, 197, 60, 243, 211, 241, 78, 114, 51, 167, - 214, 53, 149, 172, 56, 149, 32, 66, 123, 48, 240, 179, 53, 154, 29, 134, 34, 141, 204, 168, - 184, 158, 165, 115, 241, 119, 228, 11, 35, 82, 186, 132, 103, 65, 243, 215, 31, 105, 201, - 191, 155, 210, 53, 194, 76, 63, 199, 181, 28, 138, 181, 181, 211, 145, 15, 139, 244, 38, - 56, 159, 161, 95, 46, 147, 141, 163, 221, 88, 167, 134, 73, 45, 70, 98, 98, 167, 55, 52, - 234, 110, 150, 79, 248, 157, 167, 84, 210, 89, 10, 193, 169, 32, 40, 218, 7, 236, 206, 85, - 178, 174, 157, 132, 181, 192, 119, 60, 205, 46, 217, 120, 97, 59, 82, 121, 11, 189, 21, - 213, 176, 255, 225, 57, 76, 239, 38, 99, 226, 55, 98, 227, 10, 45, 193, 69, 255, 247, 39, - 121, 86, 150, 6, 220, 98, 41, 132, 237, 189, 169, 110, 213, 115, 33, 228, 197, 61, 219, - 202, 58, 54, 70, 223, 179, 208, 139, 232, 103, 76, 165, 169, 68, 6, 148, 47, 244, 26, 203, - 186, 110, 69, 44, 175, 128, 119, 212, 188, 167, 223, 87, 119, 238, 199, 201, 61, 78, 96, - 175, 0, 156, 145, 196, 253, 162, 175, 172, 227, 80, 251, 96, 61, 189, 35, 13, 97, 22, 157, - 86, 249, 128, 148, 172, 66, 80, 172, 208, 222, 131, 0, 207, 80, 163, 27, 155, 113, 57, 186, - 246, 139, 111, 71, 117, 152, 184, 60, 1, 230, 44, 169, 213, 88, 82, 156, 194, 234, 41, 183, - 87, 36, 175, 154, 156, 128, 59, 187, 208, 101, 9, 51, 205, 42, 174, 29, 215, 43, 150, 183, - 129, 125, 2, 84, 210, 149, 245, 126, 140, 166, 255, 134, 116, 162, 107, 82, 178, 158, 38, - 11, 135, 91, 224, 157, 112, 189, 164, 250, 1, 215, 49, 21, 214, 211, 73, 243, 251, 58, 198, - 1, 165, 196, 122, 13, 238, 252, 227, 229, 149, 47, 13, 173, 171, 176, 185, 220, 82, 96, - 163, 4, 36, 199, 152, 88, 3, 162, 49, 51, 4, 151, 127, 49, 47, 223, 244, 157, 229, 7, 88, - 106, 141, 167, 183, 220, 15, 8, 119, 12, 82, 218, 14, 207, 0, 73, 27, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - ]; - - // ***** Test deserialization and reconstruction of vk ***** - // let start_key_recons = Instant::now(); - // println!("Start verification key reconstruction"); - - // alpha_g1 - let mut vec_alpha_g1 = bytes[0..48].to_vec(); - let r_alpha_g1 = deserialize_g1_wasm(&mut vec_alpha_g1); - - // beta_g1 - let mut vec_beta_g1 = bytes[48..96].to_vec(); - let r_beta_g1 = deserialize_g1_wasm(&mut vec_beta_g1); - - // beta_g2 - let mut vec_beta_g2 = bytes[96..192].to_vec(); - let r_beta_g2 = deserialize_g2_wasm(&mut vec_beta_g2); - - // gamma_g2 - let mut vec_gamma_g2 = bytes[192..288].to_vec(); - let r_gamma_g2 = deserialize_g2_wasm(&mut vec_gamma_g2); - - // delta_g1 - let mut vec_delta_g1 = bytes[288..336].to_vec(); - let r_delta_g1 = deserialize_g1_wasm(&mut vec_delta_g1); - - // delta_g2 - let mut vec_delta_g2 = bytes[336..432].to_vec(); - let r_delta_g2 = deserialize_g2_wasm(&mut vec_delta_g2); - - // ic - let vec_ic = bytes[432..576].to_vec(); - // println!("\nic vector: {:?}", vec_ic); - let mut r_ic: Vec = Vec::new(); - let mut vec_ic_de = vec_ic[0..48].to_vec(); - r_ic.push(deserialize_g1_wasm(&mut vec_ic_de)); - vec_ic_de = vec_ic[48..96].to_vec(); - r_ic.push(deserialize_g1_wasm(&mut vec_ic_de)); - vec_ic_de = vec_ic[96..144].to_vec(); - r_ic.push(deserialize_g1_wasm(&mut vec_ic_de)); - - // Reconstruct vk - // replace following if using bellman::{groth16, groth16::Proof}; - // let deserialized_vk = groth16::VerifyingKey:: { - let deserialized_vk = VerifyingKey { - alpha_g1: r_alpha_g1, - beta_g1: r_beta_g1, - beta_g2: r_beta_g2, - gamma_g2: r_gamma_g2, - delta_g1: r_delta_g1, - delta_g2: r_delta_g2, - ic: r_ic, - }; - - // Uncomment following if using bellman::{groth16, groth16::Proof}; - // let pvk = groth16::prepare_verifying_key(&deserialized_vk); - // println!("Key reconstruction time: {:?}", start_key_recons.elapsed()); - - // ***** Reconstruct proof ***** - // let start_proof_recons = Instant::now(); - - // proof.g1 - let r_a = G1Affine::from_compressed(&bytes[576..624].try_into().unwrap()) - .expect("Failed to deserialize a"); - // proof.g2 - let r_b = G2Affine::from_compressed(&bytes[624..720].try_into().unwrap()) - .expect("Failed to deserialize b"); - // proof.g1 - let r_c = G1Affine::from_compressed(&bytes[720..768].try_into().unwrap()) - .expect("Failed to deserialize c"); - - // Replace following if using bellman::{groth16, groth16::Proof}; - // let r_proof: Proof = Proof{a: r_a, b: r_b, c: r_c}; - let r_proof: Proof = Proof { - a: r_a, - b: r_b, - c: r_c, - }; - // println!("Proof reconstruction time: {:?}", start_proof_recons.elapsed()); - - // ***** Reconstruct input ***** - // let start_input_recons = Instant::now(); - - let last_64_bytes = &bytes[bytes.len() - 64..]; - - let r_inputs: Vec = last_64_bytes - .chunks(32) // Each Scalar in bls12_381 uses 32 bytes - .map(|chunk| { - Scalar::from_bytes(chunk.try_into().unwrap()).expect("Invalid bytes for Scalar") - }) - .collect(); - - // println!("Input reconstruction time: {:?}", start_input_recons.elapsed()); - - /***** proof verification *****/ - // uncomment following if bellman groth16 is used - // assert!(groth16::verify_proof(&pvk, &r_proof, &r_inputs).is_ok()); - // let start_verify = Instant::now(); - - // Ensure the number of inputs matches the vk.ic length minus 1 (for IC[0]) - if (r_inputs.len() + 1) != deserialized_vk.ic.len() { - return false; - } - - /***** Compute linear combination: input_acc = IC[0] + sum(input[i] * IC[i+1]) *****/ - let mut acc = deserialized_vk.ic[0].to_curve(); // Convert G1Affine to G1Projective - - // Computes multi-scalar multiplication, - // which is a weighted sum of elliptic curve points. - // In Groth16, this builds the point: - // acc = IC₀ + input₁ × IC₁ + input₂ × IC₂ + ... + inputₙ × ICₙ - // Where: ICᵢ are fixed elliptic curve points (from the verifying key). - // inputᵢ are the public inputs to the circuit. - // Example: public_inputs = [x₁, x₂], vk.ic = [IC₀, IC₁, IC₂], acc = IC₀ + x₁ * IC₁ + x₂ * IC₂ - // This binds the public inputs to the proof - for (input, ic_point) in r_inputs.iter().zip(&deserialized_vk.ic[1..]) { - acc += ic_point.to_curve() * input; - } - - let acc_affine = acc.to_affine(); // converts the point acc from projective form back to affine form. - - // Preparing G2 elements for pairing by converting them into G2Prepared format. - let proof_b_prepared = G2Prepared::from(r_proof.b); - let gamma_g2_prepared = G2Prepared::from(deserialized_vk.gamma_g2); - let delta_g2_prepared = G2Prepared::from(deserialized_vk.delta_g2); - let beta_g2_prepared = G2Prepared::from(deserialized_vk.beta_g2); - - // Compute required product of pairings in their Miller loop form - // Groth16 verifier checks if e(A, B) * e(acc, γ)⁻¹ * e(C, δ)⁻¹ * e(α, β)⁻¹ == 1 - // which boils down to - // let start_miller = Instant::now(); - let ml_result = multi_miller_loop(&[ - (&r_proof.a, &proof_b_prepared), // e(A,B) - (&(-acc_affine), &gamma_g2_prepared), // e(acc, γ)⁻¹ - (&(-r_proof.c), &delta_g2_prepared), // e(C, δ)⁻¹ - (&(-deserialized_vk.alpha_g1), &beta_g2_prepared), //e(α, β)⁻¹ - ]); - // println!("Miller time: {:?}", start_miller.elapsed()); - - // let start_final = Instant::now(); - let result = ml_result.final_exponentiation(); - // println!("Final time: {:?}", start_final.elapsed()); - // println!("Proof verification time: {:?}", start_verify.elapsed()); - - // true - result == bls12_381::Gt::identity() -} diff --git a/src/xrpld/app/wasm/WasmVM.h b/src/xrpld/app/wasm/WasmVM.h index 5309ed8f86..e8230175a4 100644 --- a/src/xrpld/app/wasm/WasmVM.h +++ b/src/xrpld/app/wasm/WasmVM.h @@ -18,6 +18,8 @@ static std::string_view const W_PROC_EXIT = "proc_exit"; static std::string_view const ESCROW_FUNCTION_NAME = "finish"; +uint32_t const MAX_PAGES = 128; // 8MB = 64KB*128 + class WasmiEngine; class WasmEngine diff --git a/src/xrpld/app/wasm/detail/WasmiVM.cpp b/src/xrpld/app/wasm/detail/WasmiVM.cpp index fe3a5629f7..6e79827060 100644 --- a/src/xrpld/app/wasm/detail/WasmiVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmiVM.cpp @@ -506,6 +506,16 @@ WasmiEngine::init() return std::unique_ptr{ nullptr, &wasm_engine_delete}; // LCOV_EXCL_LINE wasmi_config_consume_fuel_set(config, true); + wasmi_config_ignore_custom_sections_set(config, true); + wasmi_config_wasm_mutable_globals_set(config, false); + wasmi_config_wasm_multi_value_set(config, false); + wasmi_config_wasm_sign_extension_set(config, false); + wasmi_config_wasm_saturating_float_to_int_set(config, false); + wasmi_config_wasm_bulk_memory_set(config, false); + wasmi_config_wasm_reference_types_set(config, false); + wasmi_config_wasm_tail_call_set(config, false); + wasmi_config_wasm_extended_const_set(config, false); + wasmi_config_floats_set(config, false); return std::unique_ptr( wasm_engine_new_with_config(config), &wasm_engine_delete); @@ -525,7 +535,9 @@ WasmiEngine::addModule( { moduleWrap_.reset(); store_.reset(); // to free the memory before creating new store - store_ = {wasm_store_new(engine_.get()), &wasm_store_delete}; + store_ = { + wasm_store_new_with_memory_max_pages(engine_.get(), MAX_PAGES), + &wasm_store_delete}; if (gas < 0) gas = std::numeric_limits::max(); From b57df290def6de7b63f6ed48a8dbbe9061b13763 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Mon, 8 Dec 2025 13:02:01 -0500 Subject: [PATCH 041/137] Use conan repo for wasmi lib (#6109) * Use conan repo for wasmi lib * Generate lockfile --- .github/actions/build-deps/action.yml | 1 - conan.lock | 63 ++++++ external/wasmi/conandata.yml | 11 -- external/wasmi/conanfile.py | 48 ----- .../wasmi/patches/0001-xrplf-0.42.1.patch | 180 ------------------ 5 files changed, 63 insertions(+), 240 deletions(-) create mode 100644 conan.lock delete mode 100644 external/wasmi/conandata.yml delete mode 100644 external/wasmi/conanfile.py delete mode 100644 external/wasmi/patches/0001-xrplf-0.42.1.patch diff --git a/.github/actions/build-deps/action.yml b/.github/actions/build-deps/action.yml index 9ac6d65780..f20eb3a595 100644 --- a/.github/actions/build-deps/action.yml +++ b/.github/actions/build-deps/action.yml @@ -35,7 +35,6 @@ runs: LOG_VERBOSITY: ${{ inputs.log_verbosity }} run: | echo 'Installing dependencies.' - conan export --version 0.42.1 external/wasmi #TODO Switch to conan package mkdir -p "${BUILD_DIR}" cd "${BUILD_DIR}" conan install \ diff --git a/conan.lock b/conan.lock new file mode 100644 index 0000000000..53fd85f366 --- /dev/null +++ b/conan.lock @@ -0,0 +1,63 @@ +{ + "version": "0.5", + "requires": [ + "zlib/1.3.1#b8bc2603263cf7eccbd6e17e66b0ed76%1756234269.497", + "xxhash/0.8.3#681d36a0a6111fc56e5e45ea182c19cc%1756234289.683", + "wasmi/0.42.1#2a96357d4e6bf40dfe201106d849c24f%1764802092.014", + "sqlite3/3.49.1#8631739a4c9b93bd3d6b753bac548a63%1756234266.869", + "soci/4.0.3#a9f8d773cd33e356b5879a4b0564f287%1756234262.318", + "snappy/1.1.10#968fef506ff261592ec30c574d4a7809%1756234314.246", + "secp256k1/0.7.0#d01848b436efd0efaeec1bff7d9df847%1764270192.06", + "rocksdb/10.5.1#4a197eca381a3e5ae8adf8cffa5aacd0%1762797952.535", + "re2/20230301#ca3b241baec15bd31ea9187150e0b333%1764175362.029", + "protobuf/6.32.1#f481fd276fc23a33b85a3ed1e898b693%1764863245.83", + "openssl/3.5.4#a1d5835cc6ed5c5b8f3cd5b9b5d24205%1760106486.594", + "nudb/2.0.9#fb8dfd1a5557f5e0528114c2da17721e%1763150366.909", + "lz4/1.10.0#59fc63cac7f10fbe8e05c7e62c2f3504%1756234228.999", + "libiconv/1.17#1e65319e945f2d31941a9d28cc13c058%1756223727.64", + "libbacktrace/cci.20210118#a7691bfccd8caaf66309df196790a5a1%1756230911.03", + "libarchive/3.8.1#ffee18995c706e02bf96e7a2f7042e0d%1764175360.142", + "jemalloc/5.3.0#e951da9cf599e956cebc117880d2d9f8%1729241615.244", + "grpc/1.72.0#f244a57bff01e708c55a1100b12e1589%1763158050.628", + "ed25519/2015.03#ae761bdc52730a843f0809bdf6c1b1f6%1764270189.893", + "doctest/2.4.12#eb9fb352fb2fdfc8abb17ec270945165%1762797941.757", + "date/3.0.4#862e11e80030356b53c2c38599ceb32b%1763584497.32", + "c-ares/1.34.5#5581c2b62a608b40bb85d965ab3ec7c8%1764175359.429", + "bzip2/1.0.8#c470882369c2d95c5c77e970c0c7e321%1764175359.429", + "boost/1.88.0#8852c0b72ce8271fb8ff7c53456d4983%1756223752.326", + "abseil/20250127.0#9e8e8cfc89a1324139fc0ee3bd4d8c8c%1753819045.301" + ], + "build_requires": [ + "zlib/1.3.1#b8bc2603263cf7eccbd6e17e66b0ed76%1756234269.497", + "strawberryperl/5.32.1.1#707032463aa0620fa17ec0d887f5fe41%1756234281.733", + "protobuf/6.32.1#f481fd276fc23a33b85a3ed1e898b693%1764863245.83", + "nasm/2.16.01#31e26f2ee3c4346ecd347911bd126904%1756234232.901", + "msys2/cci.latest#1996656c3c98e5765b25b60ff5cf77b4%1764840888.758", + "m4/1.4.19#70dc8bbb33e981d119d2acc0175cf381%1763158052.846", + "cmake/4.2.0#ae0a44f44a1ef9ab68fd4b3e9a1f8671%1764175359.44", + "cmake/3.31.10#313d16a1aa16bbdb2ca0792467214b76%1764175359.429", + "b2/5.3.3#107c15377719889654eb9a162a673975%1756234226.28", + "automake/1.16.5#b91b7c384c3deaa9d535be02da14d04f%1755524470.56", + "autoconf/2.71#51077f068e61700d65bb05541ea1e4b0%1731054366.86", + "abseil/20250127.0#9e8e8cfc89a1324139fc0ee3bd4d8c8c%1753819045.301" + ], + "python_requires": [], + "overrides": { + "protobuf/5.27.0": [ + "protobuf/6.32.1" + ], + "lz4/1.9.4": [ + "lz4/1.10.0" + ], + "boost/1.83.0": [ + "boost/1.88.0" + ], + "sqlite3/3.44.2": [ + "sqlite3/3.49.1" + ], + "lz4/[>=1.9.4 <2]": [ + "lz4/1.10.0#59fc63cac7f10fbe8e05c7e62c2f3504" + ] + }, + "config_requires": [] +} diff --git a/external/wasmi/conandata.yml b/external/wasmi/conandata.yml deleted file mode 100644 index 032c12753c..0000000000 --- a/external/wasmi/conandata.yml +++ /dev/null @@ -1,11 +0,0 @@ -# Do not update. Maintained by programmability team. - -sources: - "0.42.1": - sha256: 2a5697be33c7afce8f671af4a5a3621d9e93ce55d253d31bd8201458e465fbb8 - url: https://github.com/wasmi-labs/wasmi/archive/refs/tags/v0.42.1.tar.gz -patches: - "0.42.1": - - patch_file: "patches/0001-xrplf-0.42.1.patch" - patch_type: conan - patch_description: Integration patch. Make wasmi lib to be able to build with existing smart-escrow branch. diff --git a/external/wasmi/conanfile.py b/external/wasmi/conanfile.py deleted file mode 100644 index e245d62eb0..0000000000 --- a/external/wasmi/conanfile.py +++ /dev/null @@ -1,48 +0,0 @@ -from conan import ConanFile, tools -from conan.tools.cmake import CMake, CMakeToolchain, CMakeDeps, cmake_layout -from conan.tools.files import apply_conandata_patches, export_conandata_patches, get -import os - -required_conan_version = ">=2.0.0" - -class WasmiConan(ConanFile): - name = "wasmi" - license = "Apache License v2.0" - url = "https://github.com/wasmi-labs/wasmi.git" - description = "WebAssembly (Wasm) interpreter" - package_type = "library" - settings = "os", "arch", "compiler", "build_type" - options = {"shared": [False]} - default_options = {"shared": False} - - def export_sources(self): - export_conandata_patches(self) - - def layout(self): - cmake_layout(self, src_folder="src") - - def source(self): - get(self, **self.conan_data["sources"][self.version], strip_root=True) - apply_conandata_patches(self) - - def generate(self): - tc = CMakeToolchain(self) - tc.variables["BUILD_SHARED_LIBS"] = self.options.shared - tc.generate() - - deps = CMakeDeps(self) - deps.generate() - - def build(self): - cmake = CMake(self) - cmake.configure(build_script_folder=os.path.join(self.source_folder, "crates", "c_api")) - cmake.build() - - def package(self): - cmake = CMake(self) - cmake.install() - - def package_info(self): - self.cpp_info.libs = ["wasmi"] - self.cpp_info.names["cmake_find_package"] = "wasmi" - self.cpp_info.names["cmake_find_package_multi"] = "wasmi" diff --git a/external/wasmi/patches/0001-xrplf-0.42.1.patch b/external/wasmi/patches/0001-xrplf-0.42.1.patch deleted file mode 100644 index cecab3f8c2..0000000000 --- a/external/wasmi/patches/0001-xrplf-0.42.1.patch +++ /dev/null @@ -1,180 +0,0 @@ -diff --git a/crates/c_api/CMakeLists.txt b/crates/c_api/CMakeLists.txt -index b15c787a..54eaed2d 100644 ---- a/crates/c_api/CMakeLists.txt -+++ b/crates/c_api/CMakeLists.txt -@@ -6,6 +6,8 @@ option(BUILD_SHARED_LIBS "Build using shared libraries" OFF) - option(WASMI_ALWAYS_BUILD "If cmake should always invoke cargo to build Wasmi" ON) - set(WASMI_TARGET "" CACHE STRING "Rust target to build for") - -+add_compile_definitions(COMPILING_WASM_RUNTIME_API=1) -+ - if(NOT WASMI_TARGET) - execute_process( - COMMAND rustc -vV -@@ -43,6 +45,10 @@ endif() - list(TRANSFORM WASMI_SHARED_FILES PREPEND ${WASMI_TARGET_DIR}/) - list(TRANSFORM WASMI_STATIC_FILES PREPEND ${WASMI_TARGET_DIR}/) - -+if(NOT BUILD_SHARED_LIBS) -+ set(WASMI_SHARED_FILES) -+endif() -+ - # Instructions on how to build and install the Wasmi Rust crate. - find_program(WASMI_CARGO_BINARY cargo REQUIRED) - include(ExternalProject) -@@ -79,7 +85,6 @@ else() - target_link_libraries(wasmi INTERFACE ${WASMI_STATIC_FILES}) - - if(WASMI_TARGET MATCHES "windows") -- target_compile_options(wasmi INTERFACE -DWASM_API_EXTERN= -DWASI_API_EXTERN=) - target_link_libraries(wasmi INTERFACE ws2_32 advapi32 userenv ntdll shell32 ole32 bcrypt) - elseif(NOT WASMI_TARGET MATCHES "darwin") - target_link_libraries(wasmi INTERFACE pthread dl m) -@@ -112,6 +117,7 @@ install( - DESTINATION ${CMAKE_INSTALL_LIBDIR} - ) - -+if(BUILD_SHARED_LIBS) - if(WASMI_TARGET MATCHES "darwin") - set(INSTALLED_LIB "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/libwasmi.dylib") - install( -@@ -131,6 +137,7 @@ if(WASMI_TARGET MATCHES "darwin") - install(CODE "execute_process(COMMAND ${install_name_tool_cmd})") - endif() - endif() -+endif() - - # Documentation Generation via Doxygen: - set(DOXYGEN_CONF_IN ${CMAKE_CURRENT_SOURCE_DIR}/doxygen.conf.in) -@@ -141,19 +148,3 @@ add_custom_target(doc - DEPENDS ${WASMI_GENERATED_CONF_H} ${DOXYGEN_CONF_OUT} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - ) -- --# C-Header Formatting via clang-format: --find_program(CLANG_FORMAT clang-format REQUIRED) --file(GLOB_RECURSE HEADER_FILES -- ${CMAKE_CURRENT_SOURCE_DIR}/include/wasmi.h -- ${CMAKE_CURRENT_SOURCE_DIR}/include/wasmi/*.h -- ${CMAKE_CURRENT_SOURCE_DIR}/include/wasmi/*.hh --) --add_custom_target(check-format -- COMMAND ${CLANG_FORMAT} -style=llvm -Werror --dry-run ${HEADER_FILES} -- COMMENT "clang-format: Check formatting for Wasmi C-API header files" --) --add_custom_target(format -- COMMAND ${CLANG_FORMAT} -style=llvm -i ${HEADER_FILES} -- COMMENT "clang-format: Apply formatting rules for Wasmi C-API header files" --) -diff --git a/crates/c_api/include/wasm.h b/crates/c_api/include/wasm.h -index 5ee617ff..37809a6f 100644 ---- a/crates/c_api/include/wasm.h -+++ b/crates/c_api/include/wasm.h -@@ -13,11 +13,17 @@ - #include - - #ifndef WASM_API_EXTERN --#if defined(_WIN32) && !defined(__MINGW32__) && !defined(LIBWASM_STATIC) -+#if defined(_MSC_BUILD) -+#if defined(COMPILING_WASM_RUNTIME_API) -+#define WASM_API_EXTERN __declspec(dllexport) -+#elif defined(_DLL) - #define WASM_API_EXTERN __declspec(dllimport) - #else - #define WASM_API_EXTERN - #endif -+#else -+#define WASM_API_EXTERN -+#endif - #endif - - #ifdef __cplusplus -@@ -146,6 +152,13 @@ WASM_DECLARE_OWN(store) - - WASM_API_EXTERN own wasm_store_t* wasm_store_new(wasm_engine_t*); - -+// Store fuel functions (forward declarations) -+struct wasmi_error; -+ -+WASM_API_EXTERN struct wasmi_error* wasm_store_get_fuel(const wasm_store_t*, uint64_t* fuel); -+WASM_API_EXTERN struct wasmi_error* wasm_store_set_fuel(wasm_store_t*, uint64_t fuel); -+//WASM_API_EXTERN void *wasm_store_get_data(const wasm_store_t*); -+//WASM_API_EXTERN void wasm_store_set_data(wasm_store_t*, void *data); - - /////////////////////////////////////////////////////////////////////////////// - // Type Representations -diff --git a/crates/c_api/include/wasmi.h b/crates/c_api/include/wasmi.h -index 2caffa37..0c0584ec 100644 ---- a/crates/c_api/include/wasmi.h -+++ b/crates/c_api/include/wasmi.h -@@ -10,7 +10,7 @@ - /** - * \brief Wasmi version string. - */ --#define WASMI_VERSION "0.35.0" -+#define WASMI_VERSION "0.42.1" - /** - * \brief Wasmi major version number. - */ -@@ -18,10 +18,10 @@ - /** - * \brief Wasmi minor version number. - */ --#define WASMI_VERSION_MINOR 35 -+#define WASMI_VERSION_MINOR 42 - /** - * \brief Wasmi patch version number. - */ --#define WASMI_VERSION_PATCH 0 -+#define WASMI_VERSION_PATCH 1 - - #endif // WASMI_H -diff --git a/crates/c_api/src/store.rs b/crates/c_api/src/store.rs -index 56d4898f..543dbff8 100644 ---- a/crates/c_api/src/store.rs -+++ b/crates/c_api/src/store.rs -@@ -175,3 +175,44 @@ pub extern "C" fn wasmi_context_set_fuel( - ) -> Option> { - crate::handle_result(store.set_fuel(fuel), |()| {}) - } -+ -+//////////////////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////////////////// -+ -+/// Returns the current fuel of the wasm store context in `fuel`. -+/// -+/// Wraps [`Store::get_fuel`]. -+/// -+/// # Errors -+/// -+/// If [`Store::get_fuel`] errors. -+#[no_mangle] -+pub extern "C" fn wasm_store_get_fuel( -+ store: &wasm_store_t, -+ fuel: &mut u64, -+) -> Option> { -+ let context = unsafe { store.inner.context() }; -+ crate::handle_result(context.get_fuel(), |amt| { -+ *fuel = amt; -+ }) -+} -+ -+/// Sets the current fuel of the wasm store context to `fuel`. -+/// -+/// Wraps [`Store::set_fuel`]. -+/// -+/// # Errors -+/// -+/// If [`Store::set_fuel`] errors. -+#[no_mangle] -+pub extern "C" fn wasm_store_set_fuel( -+ store: &mut wasm_store_t, -+ fuel: u64, -+) -> Option> { -+ -+ let mut context = unsafe { store.inner.context_mut() }; -+ crate::handle_result(context.set_fuel(fuel), |()| {}) -+} -+ From b9eb66eecc020f4ba3a88b41e584cfba13806b56 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 17 Dec 2025 14:19:34 -0800 Subject: [PATCH 042/137] fix parameter index desynchronization (#6148) --- src/test/app/Wasm_test.cpp | 2 +- .../wasm_fixtures/codecov_tests/src/lib.rs | 15 + src/test/app/wasm_fixtures/fixtures.cpp | 409 +++++++++--------- src/xrpld/app/wasm/detail/HostFuncWrapper.cpp | 4 +- 4 files changed, 223 insertions(+), 207 deletions(-) diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index b7ad172f2f..0a8cacca42 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -672,7 +672,7 @@ struct Wasm_test : public beast::unit_test::suite Bytes const wasm(wasmStr.begin(), wasmStr.end()); TestHostFunctions hfs(env, 0); - auto const allowance = 153'534; + auto const allowance = 154'545; auto re = runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, allowance); if (BEAST_EXPECT(re.has_value())) diff --git a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs index a5624b1df0..4cbc7e1707 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs +++ b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs @@ -1528,5 +1528,20 @@ pub extern "C" fn finish() -> i32 { ) }); + // ensure that the Slice index desync issue is fixed + let empty: &[u8] = b""; + check_result( + unsafe { + host::trace_account( + empty.as_ptr(), + empty.len(), + account.0.as_ptr(), + account.0.len(), + ) + }, + 34, + "trace_account_check_desync", + ); + 1 // <-- If we get here, finish the escrow. } diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 160a4549fa..54584364f1 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -661,250 +661,251 @@ extern std::string const codecovTestsWasmHex = "61696e5f6b65796c6574000108686f73745f6c69620e7369676e6572735f6b65796c657400" "0008686f73745f6c69620d7469636b65745f6b65796c6574000108686f73745f6c69620c76" "61756c745f6b65796c657400010303020a0505030100110619037f01418080c0000b7f0041" - "8f9ec0000b7f0041909ec0000b072e04066d656d6f727902000666696e697368003d0a5f5f" - "646174615f656e6403010b5f5f686561705f6261736503020a892702460002402000200147" + "a99ec0000b7f0041b09ec0000b072e04066d656d6f727902000666696e697368003d0a5f5f" + "646174615f656e6403010b5f5f686561705f6261736503020a9e2702460002402000200147" "04402002200341004100410010001a20004100480d01418b80c000410b2000ad1001000b20" - "0220032000ac10011a0f0b418b80c000410b2000ac1001000bbf26020a7f017e230041f001" + "0220032000ac10011a0f0b418b80c000410b2000ac1001000bd426020a7f017e230041f001" "6b22002400419680c000412341004100410010001a100241b9e00041b980c000410e103c10" - "0341b2920441c780c0004116103c200041f0006a22054200370300200041e8006a22064200" + "0341b2920441c780c0004116103c200041f0006a22044200370300200041e8006a22064200" "370300200041e0006a2203420037030020004200370358200041d8006a2201412010044120" - "41be8cc0004116103c1005410a41dd80c000410c103c200041186a2207428182848890a0c0" + "41d88cc0004116103c1005410a41dd80c000410c103c200041186a2207428182848890a0c0" "8001370300200041106a2208428182848890a0c08001370300200041086a22094281828488" "90a0c080013703002000428182848890a0c0800137030041e980c000410e1006410141f780" "c0004111103c200041201006410141f780c0004111103c4181802020014114100722024114" "4604400240200041266a200041da006a2d00003a00002000200029005f3703c80120002000" "41e4006a2900003700cd01200041306a20002900cd01370000200020002f00583b01242000" - "200028005b360027200020002903c80137002b200542003703002006420037030020034200" - "37030020004200370358200041246a2205411420014120100822024120470d002000413a6a" + "200028005b360027200020002903c80137002b200442003703002006420037030020034200" + "37030020004200370358200041246a2204411420014120100822024120470d002000413a6a" "20002d005a3a0000200041d0016a2202200041e7006a290000220a370300200041c7006a20" "0a370000200041cf006a200041ef006a290000370000200041d7006a200041f7006a2d0000" "3a0000200020002f01583b01382000200028005b36003b2000200029005f37003f20004138" "6a4120410010094101418881c0004110103c20064100360200200342003703002000420037" - "03584181802020014114100a411441d48cc000411c103c2006410036020020034200370300" - "2000420037035841014181802020014114100b411441f08cc0004114103c20004104360298" + "03584181802020014114100a411441ee8cc000411c103c2006410036020020034200370300" + "2000420037035841014181802020014114100b4114418a8dc0004114103c20004104360298" "01200041818020360258200041d8016a2203410036020020024200370300200042003703c8" - "0120014104200041c8016a22064114100c411441848dc0004113103c200341003602002002" - "4200370300200042003703c801200120002802980120064114100d411441978dc000412310" + "0120014104200041c8016a22064114100c4114419e8dc0004113103c200341003602002002" + "4200370300200042003703c801200120002802980120064114100d411441b18dc000412310" "3c2003410036020020024200370300200042003703c8014101200120002802980120064114" - "100e411441ba8dc000411b103c4189803c100f4120419881c0004110103c4189803c101041" + "100e411441d48dc000411b103c4189803c100f4120419881c0004110103c4189803c101041" "2041a881c0004120103c41014189803c1011412041c881c0004118103c2001200028029801" "1012412041e081c0004117103c20012000280298011013412041f781c0004127103c410120" - "0120002802980110144120419e82c000411f103c200541141015411441bd82c000410b103c" - "200041e0016a220442003703002003420037030020024200370300200042003703c8012001" - "200028029801200641201016412041d58dc0004113103c41c882c000410c41d482c000410b" + "0120002802980110144120419e82c000411f103c200441141015411441bd82c000410b103c" + "200041e0016a220542003703002003420037030020024200370300200042003703c8012001" + "200028029801200641201016412041ef8dc0004113103c41c882c000410c41d482c000410b" "41df82c000410e1017410141ed82c0004109103c200041b8016a2007290300370300200041" "b0016a2008290300370300200041a8016a2009290300370300200020002903003703a00120" - "0341003b010020024200370300200042003703c80120054114200041a0016a220741202006" - "41121018411241e88dc0004107103c2003410036020020024200370300200042003703c801" - "20074120200641141019411441ef8dc000410e103c200041003602c8012007412020064104" - "101a410441fd8dc000410d103c20074120101b410841f682c000410d103c20074120101c41" - "0a418383c0004114103c200041003602c8012007412020064104101d4104418a8ec000410e" - "103c419783c000410d20054114101e412f41a483c000410d103c419783c000410d41b183c0" + "0341003b010020024200370300200042003703c80120044114200041a0016a220741202006" + "41121018411241828ec0004107103c2003410036020020024200370300200042003703c801" + "20074120200641141019411441898ec000410e103c200041003602c8012007412020064104" + "101a410441978ec000410d103c20074120101b410841f682c000410d103c20074120101c41" + "0a418383c0004114103c200041003602c8012007412020064104101d410441a48ec000410e" + "103c419783c000410d20044114101e412f41a483c000410d103c419783c000410d41b183c0" "004108101f411341b983c000410c103c419783c000410d41c583c0004108101f411241cd83" "c0004111103c417f41041004417141de83c000411e103c200041003602c8012006417f1004" - "417141988ec000411e103c200041ca016a41003a0000200041003b01c80120064103100441" - "7d41b68ec0004124103c200041003602c8012006418094ebdc031004417341da8ec0004123" - "103c419783c000410d20054114101e412f41a483c000410d103c419783c000410d41b183c0" - "004108101f411341b983c000410c103c200442003703002003420037030020024200370300" - "200042003703c801200041d894ebdc036a220741082006412041001020417341fd8ec00041" - "17103c200442003703002003420037030020024200370300200042003703c8012001200028" - "0298012006412041001020417141948fc0004119103c4102100f416f41fc83c000411f103c" + "417141b28ec000411e103c200041ca016a41003a0000200041003b01c80120064103100441" + "7d41d08ec0004124103c200041003602c8012006418094ebdc031004417341f48ec0004123" + "103c419783c000410d20044114101e412f41a483c000410d103c419783c000410d41b183c0" + "004108101f411341b983c000410c103c200542003703002003420037030020024200370300" + "200042003703c801200041d894ebdc036a220741082006412041001020417341978fc00041" + "17103c200542003703002003420037030020024200370300200042003703c8012001200028" + "0298012006412041001020417141ae8fc0004119103c4102100f416f41fc83c000411f103c" "417f20002802980110124171419b84c000411f103c2001417f1012417141ba84c000411f10" "3c20014181201012417441d984c0004120103c20072000280298011012417341f984c00041" "1f103c2007200028029801410110094173419885c0004118103c2001200028029801410110" - "09417141b085c000411a103c20044200370300200342003703002002420037030020004200" - "3703c8012007200028029801200641201008417341ad8fc0004116103c2004420037030020" + "09417141b085c000411a103c20054200370300200342003703002002420037030020004200" + "3703c8012007200028029801200641201008417341c78fc0004116103c2005420037030020" "03420037030020024200370300200042003703c80120012000280298012006412010084171" - "41c38fc0004118103c200442003703002003420037030020024200370300200042003703c8" - "0120054114200541142007200028029801200641201021417341db8fc000411c103c200442" - "003703002003420037030020024200370300200042003703c8012005411420054114200120" - "0028029801200641201021417141f78fc000411e103c200442003703002003420037030020" - "024200370300200042003703c80141fb9dc000411420072000280298012006412010224173" - "419590c0004119103c200442003703002003420037030020024200370300200042003703c8" - "0141fb9dc00041142001200028029801200641201022417141ae90c000411f103c20044200" - "3703002003420037030020024200370300200042003703c80141fb9dc000411441ca85c000" - "4114200641201022417141cd90c0004129103c200442003703002003420037030020024200" - "370300200042003703c80141de85c000412841fb9dc0004114200641201022417141f690c0" + "41dd8fc0004118103c200542003703002003420037030020024200370300200042003703c8" + "0120044114200441142007200028029801200641201021417341f58fc000411c103c200542" + "003703002003420037030020024200370300200042003703c8012004411420044114200120" + "00280298012006412010214171419190c000411e103c200542003703002003420037030020" + "024200370300200042003703c80141959ec000411420072000280298012006412010224173" + "41af90c0004119103c200542003703002003420037030020024200370300200042003703c8" + "0141959ec00041142001200028029801200641201022417141c890c000411f103c20054200" + "3703002003420037030020024200370300200042003703c80141959ec000411441ca85c000" + "4114200641201022417141e790c0004129103c200542003703002003420037030020024200" + "370300200042003703c80141de85c000412841959ec00041142006412010224171419091c0" "004125103c200041dc016a200041346a280100360200200041d4016a2000412c6a29010037" "0200200020002901243702cc01200041808080083602c801200041003b01c0012006411841" - "fb9dc0004114200041c0016a2203410210224171419b91c000410e103c2007200028029801" - "422a10014173418686c0004111103c200041003b01c0014102200341021007416f41a991c0" - "00411b103c200041003b01c001410220034102100a416f41c491c000412b103c200041003b" - "01c0014101410220034102100b416f41ef91c0004123103c4102100f416f41fc83c000411f" + "959ec0004114200041c0016a220341021022417141b591c000410e103c2007200028029801" + "422a10014173418686c0004111103c200041003b01c0014102200341021007416f41c391c0" + "00411b103c200041003b01c001410220034102100a416f41de91c000412b103c200041003b" + "01c0014101410220034102100b416f418992c0004123103c4102100f416f41fc83c000411f" "103c41021010416f419786c000412f103c410141021011416f41c686c0004127103c41e980" "c0004181201006417441ed86c000411f103c41e980c00041c10010064174418c87c000411a" - "103c200041003b01c001200141812020034102100c4174419292c0004121103c200041003b" - "01c001200141812020034102100d417441b392c0004131103c200041003b01c00141012001" - "41812020034102100e417441e492c0004129103c20014181201012417441a687c000412510" + "103c200041003b01c001200141812020034102100c417441ac92c0004121103c200041003b" + "01c001200141812020034102100d417441cd92c0004131103c200041003b01c00141012001" + "41812020034102100e417441fe92c0004129103c20014181201012417441a687c000412510" "3c20014181201013417441cb87c0004135103c4101200141812010144174418088c000412d" "103c20014181201015417441ad88c0004119103c419783c00041812041d482c000410b41df" "82c000410e1017417441ed82c0004109103c419783c000410d41d482c00041812041df82c0" "00410e1017417441ed82c0004109103c419783c000410d41d482c000410b41df82c0004181" - "201017417441ed82c0004109103c200041003b01c00120014181202003410210164174418d" - "93c0004121103c200041003b01c00141fb9dc00041812041fb9dc000411420034102102241" - "7441ae93c0004118103c200041003b01c00120054114200541142001418120200341021023" - "417441c693c000411f103c200041003b01c001200641812020054114200341021024417441" - "e593c0004122103c419783c000410d200720002802980141001000417341c688c000410f10" - "3c200042d487b6f4c7d4b1c0003700c001419783c000410d200041c095ebdc036a22044108" + "201017417441ed82c0004109103c200041003b01c0012001418120200341021016417441a7" + "93c0004121103c200041003b01c00141959ec00041812041959ec000411420034102102241" + "7441c893c0004118103c200041003b01c00120044114200441142001418120200341021023" + "417441e093c000411f103c200041003b01c001200641812020044114200341021024417441" + "ff93c0004122103c419783c000410d200720002802980141001000417341c688c000410f10" + "3c200042d487b6f4c7d4b1c0003700c001419783c000410d200041c095ebdc036a22054108" "1025417341d588c000411c103c419783c000410d2007200028029801101f417341f188c000" - "4116103c200441082003410810264173418789c0004118103c200341082004410810264173" - "419f89c0004118103c200041003b01ec012004410820034108200041ec016a220241024100" - "10274173418794c0004114103c200041003b01ec0120034108200441082002410241001027" - "4173419b94c0004114103c200041003b01ec01200441082003410820024102410010284173" - "41af94c0004119103c200041003b01ec0120034108200441082002410241001028417341c8" - "94c0004119103c200041003b01ec0120044108200341082002410241001029417341e194c0" - "004119103c200041003b01ec0120034108200441082002410241001029417341fa94c00041" - "19103c200041003b01ec012004410820034108200241024100102a4173419395c000411710" - "3c200041003b01ec012003410820044108200241024100102a417341aa95c0004117103c20" - "0041003b01ec01200441084103200241024100102b417341c195c0004114103c200041003b" - "01ec01200441084103200241024100102c417341d595c0004113103c200041003b01ec0120" - "044108200241024100102d417341e895c0004113103c200120002802980141001009417141" - "b789c0004123103c200041003b01ec01200541142001200028029801200241021018417141" - "fb95c000411a103c200041003b01ec0120012000280298012002410210194171419596c000" - "4121103c200041003b01ec01200120002802980120024102101a417141b696c0004120103c" + "4116103c200541082003410810264173418789c0004118103c200341082005410810264173" + "419f89c0004118103c200041003b01ec012005410820034108200041ec016a220241024100" + "1027417341a194c0004114103c200041003b01ec0120034108200541082002410241001027" + "417341b594c0004114103c200041003b01ec01200541082003410820024102410010284173" + "41c994c0004119103c200041003b01ec0120034108200541082002410241001028417341e2" + "94c0004119103c200041003b01ec0120054108200341082002410241001029417341fb94c0" + "004119103c200041003b01ec01200341082005410820024102410010294173419495c00041" + "19103c200041003b01ec012005410820034108200241024100102a417341ad95c000411710" + "3c200041003b01ec012003410820054108200241024100102a417341c495c0004117103c20" + "0041003b01ec01200541084103200241024100102b417341db95c0004114103c200041003b" + "01ec01200541084103200241024100102c417341ef95c0004113103c200041003b01ec0120" + "054108200241024100102d4173418296c0004113103c200120002802980141001009417141" + "b789c0004123103c200041003b01ec01200441142001200028029801200241021018417141" + "9596c000411a103c200041003b01ec012001200028029801200241021019417141af96c000" + "4121103c200041003b01ec01200120002802980120024102101a417141d096c0004120103c" "2001200028029801101b417141da89c0004120103c2001200028029801101c417141fa89c0" - "004127103c200041003602ec01200120002802980120024104101d417141d696c000412110" - "3c200041003b01ec012001200028029801200241021008417141f796c0004123103c200041" - "003b01ec012001200028029801410120024102102e4171419a97c0004121103c200041003b" - "01ec01200120002802980122042005411420012004200241021023417141bb97c000412710" - "3c200041003b01ec01200541142001200028029801220420012004200241021023417141e2" - "97c0004127103c200041003b01ec0120012000280298012005411420024102102f41714189" - "98c0004125103c200041003b01ec0120054114200120002802980120024102102f417141ae" - "98c0004125103c200041003b01ec01200120002802980120054114200241021030417141d3" - "98c000412c103c200041003b01ec01200541142001200028029801200241021030417141ff" - "98c000412c103c200041003b01ec012001200028029801200241021031417141ab99c00041" - "1f103c200041003b01ec0120012000280298014101200241021032417141ca99c000412210" - "3c200041003b01ec0120012000280298012005411441ca85c0004114200241021021417141" - "ec99c0004121103c200041003b01ec0120054114200120002802980141ca85c00041142002" - "410210214171418d9ac0004121103c200041003b01ec012001200028029801410120024102" - "1033417141ae9ac0004128103c200041003b01ec0120064118200120002802980120024102" - "1024417141d69ac0004123103c200041003b01ec0120012000280298014101200241021034" - "417141f99ac0004125103c200041003b01ec01200120002802980141012002410210354171" - "419e9bc0004121103c200041003b01ec0120012000280298014101200241021036417141bf" - "9bc0004122103c200041003b01ec0120012000280298012005411441012002410210374171" - "41e19bc0004124103c200041003b01ec012005411420012000280298014101200241021037" - "417141859cc0004124103c200041003b01ec01200120002802980141012002410210384171" - "41a99cc000412f103c200041003b01ec012001200028029801200241021039417141d89cc0" - "004123103c200041003b01ec012001200028029801410120024102103a417141fb9cc00041" - "22103c200041003b01ec012001200028029801410120024102103b4171419d9dc000412110" - "3c200041003b01ec01200120002802980141a18ac0004120200241021018417141be9dc000" + "004127103c200041003602ec01200120002802980120024104101d417141f096c000412110" + "3c200041003b01ec0120012000280298012002410210084171419197c0004123103c200041" + "003b01ec012001200028029801410120024102102e417141b497c0004121103c200041003b" + "01ec01200120002802980122052004411420012005200241021023417141d597c000412710" + "3c200041003b01ec01200441142001200028029801220520012005200241021023417141fc" + "97c0004127103c200041003b01ec0120012000280298012004411420024102102f417141a3" + "98c0004125103c200041003b01ec0120044114200120002802980120024102102f417141c8" + "98c0004125103c200041003b01ec01200120002802980120044114200241021030417141ed" + "98c000412c103c200041003b01ec0120044114200120002802980120024102103041714199" + "99c000412c103c200041003b01ec012001200028029801200241021031417141c599c00041" + "1f103c200041003b01ec0120012000280298014101200241021032417141e499c000412210" + "3c200041003b01ec0120012000280298012004411441ca85c0004114200241021021417141" + "869ac0004121103c200041003b01ec0120044114200120002802980141ca85c00041142002" + "41021021417141a79ac0004121103c200041003b01ec012001200028029801410120024102" + "1033417141c89ac0004128103c200041003b01ec0120064118200120002802980120024102" + "1024417141f09ac0004123103c200041003b01ec0120012000280298014101200241021034" + "417141939bc0004125103c200041003b01ec01200120002802980141012002410210354171" + "41b89bc0004121103c200041003b01ec0120012000280298014101200241021036417141d9" + "9bc0004122103c200041003b01ec0120012000280298012004411441012002410210374171" + "41fb9bc0004124103c200041003b01ec012004411420012000280298014101200241021037" + "4171419f9cc0004124103c200041003b01ec01200120002802980141012002410210384171" + "41c39cc000412f103c200041003b01ec012001200028029801200241021039417141f29cc0" + "004123103c200041003b01ec012001200028029801410120024102103a417141959dc00041" + "22103c200041003b01ec012001200028029801410120024102103b417141b79dc000412110" + "3c200041003b01ec01200120002802980141a18ac0004120200241021018417141d89dc000" "411c103c419783c000410d2001200028029801101e417141c18ac0004122103c419797abdd" "03410d41a18ac000412041001000417341e38ac0004110103c419797abdd03410d20034108" - "1025417341f38ac000411d103c419797abdd03410d20054114101e417341908bc000411810" + "1025417341f38ac000411d103c419797abdd03410d20044114101e417341908bc000411810" "3c419797abdd03410d41b183c0004108101f417341a88bc0004117103c2001200028029801" "200141812041001000417441bf8bc000410e103c200141812042011001417441cd8bc00041" "12103c419783c000418120200341081025417441df8bc000411b103c419783c00041812020" - "054114101e417441fa8bc0004116103c419783c00041812041b183c0004108101f41744190" + "044114101e417441fa8bc0004116103c419783c00041812041b183c0004108101f41744190" "8cc0004115103c419783c000410d2001200028029801101f417141a58cc0004119103c2000" - "41003b01ec01200120002802980120054114200241021024417141da9dc0004121103c2000" - "41f0016a240041010f0b0b418080c000410b417f20022002417f4e1bac1001000b0be61d02" - "00418080c0000bde056572726f725f636f64653d54455354204641494c4544242424242420" - "5354415254494e47205741534d20455845435554494f4e2024242424246765745f6c656467" - "65725f73716e6765745f706172656e745f6c65646765725f74696d656765745f626173655f" - "666565746573745f616d656e646d656e74616d656e646d656e745f656e61626c6564636163" - "68655f6c65646765725f6f626a6765745f74785f61727261795f6c656e6765745f63757272" - "656e745f6c65646765725f6f626a5f61727261795f6c656e6765745f6c65646765725f6f62" - "6a5f61727261795f6c656e6765745f74785f6e65737465645f61727261795f6c656e676574" - "5f63757272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e67" - "65745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e7570646174655f" - "6461746174657374206d65737361676574657374207075626b657974657374207369676e61" - "74757265636865636b5f7369676765745f6e66745f666c6167736765745f6e66745f747261" - "6e736665725f66656574657374696e6720747261636574726163655f6163636f756e744000" - "00000000005f74726163655f616d6f756e74400000000000000074726163655f616d6f756e" - "745f7a65726f6765745f706172656e745f6c65646765725f686173685f6e65675f70747267" - "65745f74785f61727261795f6c656e5f696e76616c69645f736669656c646765745f74785f" - "6e65737465645f61727261795f6c656e5f6e65675f7074726765745f74785f6e6573746564" - "5f61727261795f6c656e5f6e65675f6c656e6765745f74785f6e65737465645f6172726179" - "5f6c656e5f746f6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f" - "7074725f6f6f6263616368655f6c65646765725f6f626a5f7074725f6f6f6263616368655f" - "6c65646765725f6f626a5f77726f6e675f6c656e5553443030303030303030303030303030" - "30303000418686c0000bf51774726163655f6e756d5f6f6f625f7374726765745f63757272" - "656e745f6c65646765725f6f626a5f61727261795f6c656e5f696e76616c69645f73666965" - "6c646765745f6c65646765725f6f626a5f61727261795f6c656e5f696e76616c69645f7366" - "69656c64616d656e646d656e745f656e61626c65645f746f6f5f6269675f736c696365616d" - "656e646d656e745f656e61626c65645f746f6f5f6c6f6e676765745f74785f6e6573746564" - "5f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f63757272656e745f6c" - "65646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c" - "6963656765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f" - "6f5f6269675f736c6963657570646174655f646174615f746f6f5f6269675f736c69636574" - "726163655f6f6f625f736c69636574726163655f6f70617175655f666c6f61745f6f6f625f" - "736c69636574726163655f616d6f756e745f6f6f625f736c696365666c6f61745f636f6d70" - "6172655f6f6f625f736c69636531666c6f61745f636f6d706172655f6f6f625f736c696365" - "3263616368655f6c65646765725f6f626a5f77726f6e675f73697a655f75696e7432353667" - "65745f6e66745f666c6167735f77726f6e675f73697a655f75696e743235366765745f6e66" - "745f7472616e736665725f6665655f77726f6e675f73697a655f75696e7432353630303030" - "3030303030303030303030303030303030303030303030303030303174726163655f616363" - "6f756e745f77726f6e675f73697a655f6163636f756e74696474726163655f6f6f625f7374" - "72696e6774726163655f6f70617175655f666c6f61745f6f6f625f737472696e6774726163" - "655f6163636f756e745f6f6f625f737472696e6774726163655f616d6f756e745f6f6f625f" - "737472696e6774726163655f746f6f5f6c6f6e6774726163655f6e756d5f746f6f5f6c6f6e" - "6774726163655f6f70617175655f666c6f61745f746f6f5f6c6f6e6774726163655f616363" - "6f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f746f6f5f6c6f6e67747261" - "63655f616d6f756e745f77726f6e675f6c656e6774686765745f706172656e745f6c656467" - "65725f686173686765745f63757272656e745f6c65646765725f6f626a5f6669656c646765" - "745f6c65646765725f6f626a5f6669656c646765745f74785f6e65737465645f6669656c64" - "6765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c646765" - "745f6c65646765725f6f626a5f6e65737465645f6669656c64636f6d707574655f73686135" - "31325f68616c666765745f6e66746765745f6e66745f6973737565726765745f6e66745f74" - "61786f6e6765745f6e66745f73657269616c6765745f706172656e745f6c65646765725f68" - "6173685f6e65675f6c656e6765745f706172656e745f6c65646765725f686173685f627566" - "5f746f6f5f736d616c6c6765745f706172656e745f6c65646765725f686173685f6c656e5f" - "746f6f5f6c6f6e67666c6f61745f66726f6d5f75696e745f6c656e5f6f6f62666c6f61745f" - "66726f6d5f75696e745f77726f6e675f6c656e6163636f756e745f6b65796c65745f6c656e" - "5f6f6f626163636f756e745f6b65796c65745f77726f6e675f6c656e6c696e655f6b65796c" - "65745f6c656e5f6f6f625f63757272656e63796c696e655f6b65796c65745f77726f6e675f" - "6c656e5f63757272656e6379616d6d5f6b65796c65745f6c656e5f6f6f625f617373657432" - "616d6d5f6b65796c65745f6c656e5f77726f6e675f6c656e5f617373657432616d6d5f6b65" - "796c65745f6c656e5f77726f6e675f6e6f6e5f7872705f63757272656e63795f6c656e616d" - "6d5f6b65796c65745f6c656e5f77726f6e675f7872705f63757272656e63795f6c656e616d" - "6d5f6b65796c65745f6d70746765745f74785f6669656c645f696e76616c69645f73666965" - "6c646765745f63757272656e745f6c65646765725f6f626a5f6669656c645f696e76616c69" - "645f736669656c646765745f6c65646765725f6f626a5f6669656c645f696e76616c69645f" - "736669656c646765745f74785f6e65737465645f6669656c645f746f6f5f6269675f736c69" - "63656765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c64" - "5f746f6f5f6269675f736c6963656765745f6c65646765725f6f626a5f6e65737465645f66" - "69656c645f746f6f5f6269675f736c696365636f6d707574655f7368613531325f68616c66" - "5f746f6f5f6269675f736c696365616d6d5f6b65796c65745f746f6f5f6269675f736c6963" - "6563726564656e7469616c5f6b65796c65745f746f6f5f6269675f736c6963656d70746f6b" - "656e5f6b65796c65745f746f6f5f6269675f736c6963655f6d70746964666c6f61745f6164" - "645f6f6f625f736c69636531666c6f61745f6164645f6f6f625f736c69636532666c6f6174" - "5f73756274726163745f6f6f625f736c69636531666c6f61745f73756274726163745f6f6f" - "625f736c69636532666c6f61745f6d756c7469706c795f6f6f625f736c69636531666c6f61" - "745f6d756c7469706c795f6f6f625f736c69636532666c6f61745f6469766964655f6f6f62" - "5f736c69636531666c6f61745f6469766964655f6f6f625f736c69636532666c6f61745f72" - "6f6f745f6f6f625f736c696365666c6f61745f706f775f6f6f625f736c696365666c6f6174" - "5f6c6f675f6f6f625f736c6963656765745f6e66745f77726f6e675f73697a655f75696e74" - "3235366765745f6e66745f6973737565725f77726f6e675f73697a655f75696e7432353667" - "65745f6e66745f7461786f6e5f77726f6e675f73697a655f75696e743235366765745f6e66" - "745f73657269616c5f77726f6e675f73697a655f75696e743235366163636f756e745f6b65" - "796c65745f77726f6e675f73697a655f6163636f756e746964636865636b5f6b65796c6574" - "5f77726f6e675f73697a655f6163636f756e74696463726564656e7469616c5f6b65796c65" - "745f77726f6e675f73697a655f6163636f756e7469643163726564656e7469616c5f6b6579" - "6c65745f77726f6e675f73697a655f6163636f756e7469643264656c65676174655f6b6579" - "6c65745f77726f6e675f73697a655f6163636f756e7469643164656c65676174655f6b6579" - "6c65745f77726f6e675f73697a655f6163636f756e746964326465706f7369745f70726561" - "7574685f6b65796c65745f77726f6e675f73697a655f6163636f756e746964316465706f73" - "69745f707265617574685f6b65796c65745f77726f6e675f73697a655f6163636f756e7469" - "64326469645f6b65796c65745f77726f6e675f73697a655f6163636f756e74696465736372" - "6f775f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646c696e655f6b65" - "796c65745f77726f6e675f73697a655f6163636f756e746964316c696e655f6b65796c6574" - "5f77726f6e675f73697a655f6163636f756e746964326d70745f69737375616e63655f6b65" - "796c65745f77726f6e675f73697a655f6163636f756e7469646d70746f6b656e5f6b65796c" - "65745f77726f6e675f73697a655f6163636f756e7469646e66745f6f666665725f6b65796c" - "65745f77726f6e675f73697a655f6163636f756e7469646f666665725f6b65796c65745f77" - "726f6e675f73697a655f6163636f756e7469646f7261636c655f6b65796c65745f77726f6e" - "675f73697a655f6163636f756e7469647061796368616e5f6b65796c65745f77726f6e675f" - "73697a655f6163636f756e746964317061796368616e5f6b65796c65745f77726f6e675f73" - "697a655f6163636f756e746964327065726d697373696f6e65645f646f6d61696e5f6b6579" - "6c65745f77726f6e675f73697a655f6163636f756e7469647369676e6572735f6b65796c65" - "745f77726f6e675f73697a655f6163636f756e7469647469636b65745f6b65796c65745f77" - "726f6e675f73697a655f6163636f756e7469647661756c745f6b65796c65745f77726f6e67" - "5f73697a655f6163636f756e7469646765745f6e66745f77726f6e675f73697a655f616363" - "6f756e7469646d70746f6b656e5f6b65796c65745f6d707469645f77726f6e675f6c656e67" - "7468004d0970726f64756365727302086c616e6775616765010452757374000c70726f6365" - "737365642d6279010572757374631d312e38352e3120283465623136313235302032303235" - "2d30332d313529002c0f7461726765745f6665617475726573022b0f6d757461626c652d67" - "6c6f62616c732b087369676e2d657874"; + "41003b01ec01200120002802980120044114200241021024417141f49dc0004121103c4101" + "410020044114101e412241be8cc000411a103c200041f0016a240041010f0b0b418080c000" + "410b417f20022002417f4e1bac1001000b0b801e0200418080c0000bde056572726f725f63" + "6f64653d54455354204641494c45442424242424205354415254494e47205741534d204558" + "45435554494f4e2024242424246765745f6c65646765725f73716e6765745f706172656e74" + "5f6c65646765725f74696d656765745f626173655f666565746573745f616d656e646d656e" + "74616d656e646d656e745f656e61626c656463616368655f6c65646765725f6f626a676574" + "5f74785f61727261795f6c656e6765745f63757272656e745f6c65646765725f6f626a5f61" + "727261795f6c656e6765745f6c65646765725f6f626a5f61727261795f6c656e6765745f74" + "785f6e65737465645f61727261795f6c656e6765745f63757272656e745f6c65646765725f" + "6f626a5f6e65737465645f61727261795f6c656e6765745f6c65646765725f6f626a5f6e65" + "737465645f61727261795f6c656e7570646174655f6461746174657374206d657373616765" + "74657374207075626b657974657374207369676e6174757265636865636b5f736967676574" + "5f6e66745f666c6167736765745f6e66745f7472616e736665725f66656574657374696e67" + "20747261636574726163655f6163636f756e74400000000000005f74726163655f616d6f75" + "6e74400000000000000074726163655f616d6f756e745f7a65726f6765745f706172656e74" + "5f6c65646765725f686173685f6e65675f7074726765745f74785f61727261795f6c656e5f" + "696e76616c69645f736669656c646765745f74785f6e65737465645f61727261795f6c656e" + "5f6e65675f7074726765745f74785f6e65737465645f61727261795f6c656e5f6e65675f6c" + "656e6765745f74785f6e65737465645f61727261795f6c656e5f746f6f5f6c6f6e67676574" + "5f74785f6e65737465645f61727261795f6c656e5f7074725f6f6f6263616368655f6c6564" + "6765725f6f626a5f7074725f6f6f6263616368655f6c65646765725f6f626a5f77726f6e67" + "5f6c656e555344303030303030303030303030303030303000418686c0000b8f1874726163" + "655f6e756d5f6f6f625f7374726765745f63757272656e745f6c65646765725f6f626a5f61" + "727261795f6c656e5f696e76616c69645f736669656c646765745f6c65646765725f6f626a" + "5f61727261795f6c656e5f696e76616c69645f736669656c64616d656e646d656e745f656e" + "61626c65645f746f6f5f6269675f736c696365616d656e646d656e745f656e61626c65645f" + "746f6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f746f6f5f62" + "69675f736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e6573746564" + "5f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f6c65646765725f6f62" + "6a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963657570646174" + "655f646174615f746f6f5f6269675f736c69636574726163655f6f6f625f736c6963657472" + "6163655f6f70617175655f666c6f61745f6f6f625f736c69636574726163655f616d6f756e" + "745f6f6f625f736c696365666c6f61745f636f6d706172655f6f6f625f736c69636531666c" + "6f61745f636f6d706172655f6f6f625f736c6963653263616368655f6c65646765725f6f62" + "6a5f77726f6e675f73697a655f75696e743235366765745f6e66745f666c6167735f77726f" + "6e675f73697a655f75696e743235366765745f6e66745f7472616e736665725f6665655f77" + "726f6e675f73697a655f75696e743235363030303030303030303030303030303030303030" + "30303030303030303030303174726163655f6163636f756e745f77726f6e675f73697a655f" + "6163636f756e74696474726163655f6f6f625f737472696e6774726163655f6f7061717565" + "5f666c6f61745f6f6f625f737472696e6774726163655f6163636f756e745f6f6f625f7374" + "72696e6774726163655f616d6f756e745f6f6f625f737472696e6774726163655f746f6f5f" + "6c6f6e6774726163655f6e756d5f746f6f5f6c6f6e6774726163655f6f70617175655f666c" + "6f61745f746f6f5f6c6f6e6774726163655f6163636f756e745f746f6f5f6c6f6e67747261" + "63655f616d6f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f77726f6e675f" + "6c656e67746874726163655f6163636f756e745f636865636b5f646573796e636765745f70" + "6172656e745f6c65646765725f686173686765745f63757272656e745f6c65646765725f6f" + "626a5f6669656c646765745f6c65646765725f6f626a5f6669656c646765745f74785f6e65" + "737465645f6669656c646765745f63757272656e745f6c65646765725f6f626a5f6e657374" + "65645f6669656c646765745f6c65646765725f6f626a5f6e65737465645f6669656c64636f" + "6d707574655f7368613531325f68616c666765745f6e66746765745f6e66745f6973737565" + "726765745f6e66745f7461786f6e6765745f6e66745f73657269616c6765745f706172656e" + "745f6c65646765725f686173685f6e65675f6c656e6765745f706172656e745f6c65646765" + "725f686173685f6275665f746f6f5f736d616c6c6765745f706172656e745f6c6564676572" + "5f686173685f6c656e5f746f6f5f6c6f6e67666c6f61745f66726f6d5f75696e745f6c656e" + "5f6f6f62666c6f61745f66726f6d5f75696e745f77726f6e675f6c656e6163636f756e745f" + "6b65796c65745f6c656e5f6f6f626163636f756e745f6b65796c65745f77726f6e675f6c65" + "6e6c696e655f6b65796c65745f6c656e5f6f6f625f63757272656e63796c696e655f6b6579" + "6c65745f77726f6e675f6c656e5f63757272656e6379616d6d5f6b65796c65745f6c656e5f" + "6f6f625f617373657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6c656e5f6173" + "73657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6e6f6e5f7872705f63757272" + "656e63795f6c656e616d6d5f6b65796c65745f6c656e5f77726f6e675f7872705f63757272" + "656e63795f6c656e616d6d5f6b65796c65745f6d70746765745f74785f6669656c645f696e" + "76616c69645f736669656c646765745f63757272656e745f6c65646765725f6f626a5f6669" + "656c645f696e76616c69645f736669656c646765745f6c65646765725f6f626a5f6669656c" + "645f696e76616c69645f736669656c646765745f74785f6e65737465645f6669656c645f74" + "6f6f5f6269675f736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e65" + "737465645f6669656c645f746f6f5f6269675f736c6963656765745f6c65646765725f6f62" + "6a5f6e65737465645f6669656c645f746f6f5f6269675f736c696365636f6d707574655f73" + "68613531325f68616c665f746f6f5f6269675f736c696365616d6d5f6b65796c65745f746f" + "6f5f6269675f736c69636563726564656e7469616c5f6b65796c65745f746f6f5f6269675f" + "736c6963656d70746f6b656e5f6b65796c65745f746f6f5f6269675f736c6963655f6d7074" + "6964666c6f61745f6164645f6f6f625f736c69636531666c6f61745f6164645f6f6f625f73" + "6c69636532666c6f61745f73756274726163745f6f6f625f736c69636531666c6f61745f73" + "756274726163745f6f6f625f736c69636532666c6f61745f6d756c7469706c795f6f6f625f" + "736c69636531666c6f61745f6d756c7469706c795f6f6f625f736c69636532666c6f61745f" + "6469766964655f6f6f625f736c69636531666c6f61745f6469766964655f6f6f625f736c69" + "636532666c6f61745f726f6f745f6f6f625f736c696365666c6f61745f706f775f6f6f625f" + "736c696365666c6f61745f6c6f675f6f6f625f736c6963656765745f6e66745f77726f6e67" + "5f73697a655f75696e743235366765745f6e66745f6973737565725f77726f6e675f73697a" + "655f75696e743235366765745f6e66745f7461786f6e5f77726f6e675f73697a655f75696e" + "743235366765745f6e66745f73657269616c5f77726f6e675f73697a655f75696e74323536" + "6163636f756e745f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646368" + "65636b5f6b65796c65745f77726f6e675f73697a655f6163636f756e74696463726564656e" + "7469616c5f6b65796c65745f77726f6e675f73697a655f6163636f756e7469643163726564" + "656e7469616c5f6b65796c65745f77726f6e675f73697a655f6163636f756e746964326465" + "6c65676174655f6b65796c65745f77726f6e675f73697a655f6163636f756e746964316465" + "6c65676174655f6b65796c65745f77726f6e675f73697a655f6163636f756e746964326465" + "706f7369745f707265617574685f6b65796c65745f77726f6e675f73697a655f6163636f75" + "6e746964316465706f7369745f707265617574685f6b65796c65745f77726f6e675f73697a" + "655f6163636f756e746964326469645f6b65796c65745f77726f6e675f73697a655f616363" + "6f756e746964657363726f775f6b65796c65745f77726f6e675f73697a655f6163636f756e" + "7469646c696e655f6b65796c65745f77726f6e675f73697a655f6163636f756e746964316c" + "696e655f6b65796c65745f77726f6e675f73697a655f6163636f756e746964326d70745f69" + "737375616e63655f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646d70" + "746f6b656e5f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646e66745f" + "6f666665725f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646f666665" + "725f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646f7261636c655f6b" + "65796c65745f77726f6e675f73697a655f6163636f756e7469647061796368616e5f6b6579" + "6c65745f77726f6e675f73697a655f6163636f756e746964317061796368616e5f6b65796c" + "65745f77726f6e675f73697a655f6163636f756e746964327065726d697373696f6e65645f" + "646f6d61696e5f6b65796c65745f77726f6e675f73697a655f6163636f756e746964736967" + "6e6572735f6b65796c65745f77726f6e675f73697a655f6163636f756e7469647469636b65" + "745f6b65796c65745f77726f6e675f73697a655f6163636f756e7469647661756c745f6b65" + "796c65745f77726f6e675f73697a655f6163636f756e7469646765745f6e66745f77726f6e" + "675f73697a655f6163636f756e7469646d70746f6b656e5f6b65796c65745f6d707469645f" + "77726f6e675f6c656e677468004d0970726f64756365727302086c616e6775616765010452" + "757374000c70726f6365737365642d6279010572757374631d312e38352e31202834656231" + "363132353020323032352d30332d313529002c0f7461726765745f6665617475726573022b" + "0f6d757461626c652d676c6f62616c732b087369676e2d657874"; extern std::string const floatTestsWasmHex = "0061736d0100000001430860077f7f7f7f7f7f7f017f60057f7f7f7f7f017f60047f7f7f7f" diff --git a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp index 90369e3a8d..5dc935735c 100644 --- a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp @@ -80,11 +80,11 @@ getDataSField(IW const* _runtime, wasm_val_vec_t const* params, int32_t& i) { auto const& m = SField::getKnownCodeToField(); auto const it = m.find(params->data[i].of.i32); + i++; if (it == m.end()) { return Unexpected(HostFunctionError::INVALID_FIELD); } - i++; return *it->second; } @@ -98,6 +98,7 @@ getDataSlice( { int64_t const ptr = params->data[i].of.i32; int64_t const size = params->data[i + 1].of.i32; + i += 2; if (ptr < 0 || size < 0) return Unexpected(HostFunctionError::INVALID_PARAMS); @@ -117,7 +118,6 @@ getDataSlice( return Unexpected(HostFunctionError::POINTER_OUT_OF_BOUNDS); Slice data(memory.p + ptr, size); - i += 2; return data; } From 69ab39d6585b8cd2ffb2618ece3e4867bb59b9e6 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Thu, 18 Dec 2025 14:13:48 -0500 Subject: [PATCH 043/137] Fix potential memory leaks found by srlabs (#6145) --- src/xrpld/app/wasm/WasmiVM.h | 140 +++++++++----- src/xrpld/app/wasm/detail/WasmiVM.cpp | 257 ++++++++++++-------------- 2 files changed, 209 insertions(+), 188 deletions(-) diff --git a/src/xrpld/app/wasm/WasmiVM.h b/src/xrpld/app/wasm/WasmiVM.h index a9b8a94332..b4148b7dea 100644 --- a/src/xrpld/app/wasm/WasmiVM.h +++ b/src/xrpld/app/wasm/WasmiVM.h @@ -7,42 +7,93 @@ namespace ripple { -struct WasmiResult +template +struct WasmVec { - wasm_val_vec_t r; - bool f; // failure flag + T vec_; - WasmiResult(unsigned N = 0) : r{0, nullptr}, f(false) + WasmVec(size_t s = 0) : vec_ WASM_EMPTY_VEC { - if (N) - wasm_val_vec_new_uninitialized(&r, N); + if (s > 0) + Create(&vec_, s); // zeroes memory } - ~WasmiResult() + ~WasmVec() { - if (r.size) - wasm_val_vec_delete(&r); + clear(); } - WasmiResult(WasmiResult const&) = delete; - WasmiResult& - operator=(WasmiResult const&) = delete; + WasmVec(WasmVec const&) = delete; + WasmVec& + operator=(WasmVec const&) = delete; - WasmiResult(WasmiResult&& o) + WasmVec(WasmVec&& other) noexcept : vec_ WASM_EMPTY_VEC { - *this = std::move(o); + *this = std::move(other); } - WasmiResult& - operator=(WasmiResult&& o) + WasmVec& + operator=(WasmVec&& other) noexcept { - r = o.r; - o.r = {0, nullptr}; - f = o.f; - o.f = false; + if (this != &other) + { + clear(); + vec_ = other.vec_; + other.vec_ = WASM_EMPTY_VEC; + } return *this; } - // operator wasm_val_vec_t &() {return r;} + + void + clear() + { + Destroy(&vec_); // call destructor for every elements too + vec_ = WASM_EMPTY_VEC; + } + + T + release() + { + T result = vec_; + vec_ = WASM_EMPTY_VEC; + return result; + } +}; + +using WasmValtypeVec = WasmVec< + wasm_valtype_vec_t, + &wasm_valtype_vec_new_uninitialized, + &wasm_valtype_vec_delete>; +using WasmValVec = WasmVec< + wasm_val_vec_t, + &wasm_val_vec_new_uninitialized, + &wasm_val_vec_delete>; +using WasmExternVec = WasmVec< + wasm_extern_vec_t, + &wasm_extern_vec_new_uninitialized, + &wasm_extern_vec_delete>; +using WasmExporttypeVec = WasmVec< + wasm_exporttype_vec_t, + &wasm_exporttype_vec_new_uninitialized, + &wasm_exporttype_vec_delete>; +using WasmImporttypeVec = WasmVec< + wasm_importtype_vec_t, + &wasm_importtype_vec_new_uninitialized, + &wasm_importtype_vec_delete>; + +struct WasmiResult +{ + WasmValVec r; + bool f; // failure flag + + WasmiResult(unsigned N = 0) : r(N), f(false) + { + } + + ~WasmiResult() = default; + WasmiResult(WasmiResult&& o) = default; + WasmiResult& + operator=(WasmiResult&& o) = default; }; using ModulePtr = std::unique_ptr; @@ -56,17 +107,17 @@ using FuncInfo = std::pair; struct InstanceWrapper { wasm_store_t* store_ = nullptr; - wasm_extern_vec_t exports_; + WasmExternVec exports_; InstancePtr instance_; beast::Journal j_ = beast::Journal(beast::Journal::getNullSink()); private: static InstancePtr init( - wasm_store_t* s, - wasm_module_t* m, - wasm_extern_vec_t* expt, - wasm_extern_vec_t const& imports, + StorePtr& s, + ModulePtr& m, + WasmExternVec& expt, + WasmExternVec const& imports, beast::Journal j); public: @@ -78,19 +129,18 @@ public: operator=(InstanceWrapper&& o); InstanceWrapper( - wasm_store_t* s, - wasm_module_t* m, - wasm_extern_vec_t const& imports, + StorePtr& s, + ModulePtr& m, + WasmExternVec const& imports, beast::Journal j); - ~InstanceWrapper(); + ~InstanceWrapper() = default; operator bool() const; FuncInfo - getFunc( - std::string_view funcName, - wasm_exporttype_vec_t const& export_types) const; + getFunc(std::string_view funcName, WasmExporttypeVec const& exportTypes) + const; wmem getMem() const; @@ -105,12 +155,12 @@ struct ModuleWrapper { ModulePtr module_; InstanceWrapper instanceWrap_; - wasm_exporttype_vec_t exportTypes_; + WasmExporttypeVec exportTypes_; beast::Journal j_ = beast::Journal(beast::Journal::getNullSink()); private: static ModulePtr - init(wasm_store_t* s, Bytes const& wasmBin, beast::Journal j); + init(StorePtr& s, Bytes const& wasmBin, beast::Journal j); public: ModuleWrapper(); @@ -118,12 +168,12 @@ public: ModuleWrapper& operator=(ModuleWrapper&& o); ModuleWrapper( - wasm_store_t* s, + StorePtr& s, Bytes const& wasmBin, bool instantiate, ImportVec const& imports, beast::Journal j); - ~ModuleWrapper(); + ~ModuleWrapper() = default; operator bool() const; @@ -136,20 +186,14 @@ public: getInstance(int i = 0) const; int - addInstance( - wasm_store_t* s, - wasm_extern_vec_t const& imports = WASM_EMPTY_VEC); + addInstance(StorePtr& s, WasmExternVec const& imports); std::int64_t getGas(); private: - static void - makeImpParams(wasm_valtype_vec_t& v, WasmImportFunc const& imp); - static void - makeImpReturn(wasm_valtype_vec_t& v, WasmImportFunc const& imp); - wasm_extern_vec_t - buildImports(wasm_store_t* s, ImportVec const& imports); + WasmExternVec + buildImports(StorePtr& s, ImportVec const& imports); }; class WasmiEngine @@ -237,9 +281,7 @@ private: runFunc(std::string_view const funcName, int32_t p); int32_t - makeModule( - Bytes const& wasmCode, - wasm_extern_vec_t const& imports = WASM_EMPTY_VEC); + makeModule(Bytes const& wasmCode, WasmExternVec const& imports = {}); FuncInfo getFunc(std::string_view funcName); diff --git a/src/xrpld/app/wasm/detail/WasmiVM.cpp b/src/xrpld/app/wasm/detail/WasmiVM.cpp index 6e79827060..1a37910105 100644 --- a/src/xrpld/app/wasm/detail/WasmiVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmiVM.cpp @@ -51,56 +51,47 @@ print_wasm_error(std::string_view msg, wasm_trap_t* trap, beast::Journal jlog) InstancePtr InstanceWrapper::init( - wasm_store_t* s, - wasm_module_t* m, - wasm_extern_vec_t* expt, - wasm_extern_vec_t const& imports, + StorePtr& s, + ModulePtr& m, + WasmExternVec& expt, + WasmExternVec const& imports, beast::Journal j) { wasm_trap_t* trap = nullptr; InstancePtr mi = InstancePtr( - wasm_instance_new(s, m, &imports, &trap), &wasm_instance_delete); + wasm_instance_new(s.get(), m.get(), &imports.vec_, &trap), + &wasm_instance_delete); if (!mi || trap) { print_wasm_error("can't create instance", trap, j); throw std::runtime_error("can't create instance"); } - wasm_instance_exports(mi.get(), expt); + wasm_instance_exports(mi.get(), &expt.vec_); return mi; } -InstanceWrapper::InstanceWrapper() - : exports_{0, nullptr}, instance_(nullptr, &wasm_instance_delete) +InstanceWrapper::InstanceWrapper() : instance_(nullptr, &wasm_instance_delete) { } // LCOV_EXCL_START InstanceWrapper::InstanceWrapper(InstanceWrapper&& o) - : exports_{0, nullptr}, instance_(nullptr, &wasm_instance_delete) + : instance_(nullptr, &wasm_instance_delete) { *this = std::move(o); } // LCOV_EXCL_STOP InstanceWrapper::InstanceWrapper( - wasm_store_t* s, - wasm_module_t* m, - wasm_extern_vec_t const& imports, + StorePtr& s, + ModulePtr& m, + WasmExternVec const& imports, beast::Journal j) - : store_(s) - , exports_ WASM_EMPTY_VEC - , instance_(init(s, m, &exports_, imports, j)) - , j_(j) + : store_(s.get()), instance_(init(s, m, exports_, imports, j)), j_(j) { } -InstanceWrapper::~InstanceWrapper() -{ - if (exports_.size) - wasm_extern_vec_delete(&exports_); -} - InstanceWrapper& InstanceWrapper::operator=(InstanceWrapper&& o) { @@ -109,11 +100,7 @@ InstanceWrapper::operator=(InstanceWrapper&& o) store_ = o.store_; o.store_ = nullptr; - if (exports_.size) - wasm_extern_vec_delete(&exports_); // LCOV_EXCL_LINE - exports_ = o.exports_; - o.exports_ = {0, nullptr}; - + exports_ = std::move(o.exports_); instance_ = std::move(o.instance_); j_ = o.j_; @@ -129,39 +116,37 @@ InstanceWrapper::operator bool() const FuncInfo InstanceWrapper::getFunc( std::string_view funcName, - wasm_exporttype_vec_t const& export_types) const + WasmExporttypeVec const& exportTypes) const { - wasm_func_t* f = nullptr; - wasm_functype_t* ft = nullptr; + wasm_func_t const* f = nullptr; + wasm_functype_t const* ft = nullptr; if (!instance_) throw std::runtime_error("no instance"); // LCOV_EXCL_LINE - if (!export_types.size) + if (!exportTypes.vec_.size) throw std::runtime_error("no export"); // LCOV_EXCL_LINE - if (export_types.size != exports_.size) + if (exportTypes.vec_.size != exports_.vec_.size) throw std::runtime_error("invalid export"); // LCOV_EXCL_LINE - for (unsigned i = 0; i < export_types.size; ++i) + for (unsigned i = 0; i < exportTypes.vec_.size; ++i) { - auto const* exp_type(export_types.data[i]); + auto const* expType(exportTypes.vec_.data[i]); - wasm_name_t const* name = wasm_exporttype_name(exp_type); - wasm_externtype_t const* exn_type = wasm_exporttype_type(exp_type); - if (wasm_externtype_kind(exn_type) == WASM_EXTERN_FUNC) + wasm_name_t const* name = wasm_exporttype_name(expType); + wasm_externtype_t const* exnType = wasm_exporttype_type(expType); + if (wasm_externtype_kind(exnType) == WASM_EXTERN_FUNC) { - if (funcName == std::string_view(name->data, name->size)) - { - auto* exn(exports_.data[i]); - if (wasm_extern_kind(exn) != WASM_EXTERN_FUNC) - throw std::runtime_error( - "invalid export"); // LCOV_EXCL_LINE + if (funcName != std::string_view(name->data, name->size)) + continue; - ft = wasm_externtype_as_functype( - const_cast(exn_type)); - f = wasm_extern_as_func(exn); - break; - } + auto const* exn(exports_.vec_.data[i]); + if (wasm_extern_kind(exn) != WASM_EXTERN_FUNC) + throw std::runtime_error("invalid export"); // LCOV_EXCL_LINE + + ft = wasm_externtype_as_functype_const(exnType); + f = wasm_extern_as_func_const(exn); + break; } } @@ -179,9 +164,9 @@ InstanceWrapper::getMem() const throw std::runtime_error("no instance"); // LCOV_EXCL_LINE wasm_memory_t* mem = nullptr; - for (unsigned i = 0; i < exports_.size; ++i) + for (unsigned i = 0; i < exports_.vec_.size; ++i) { - auto* e(exports_.data[i]); + auto* e(exports_.vec_.data[i]); if (wasm_extern_kind(e) == WASM_EXTERN_MEMORY) { mem = wasm_extern_as_memory(e); @@ -219,9 +204,11 @@ InstanceWrapper::setGas(std::int64_t gas) const wasm_store_set_fuel(store_, static_cast(gas)); if (err) { - print_wasm_error( - "Can't set instance gas", nullptr, j_); // LCOV_EXCL_LINE - throw std::runtime_error("Can't set instance gas"); // LCOV_EXCL_LINE + // LCOV_EXCL_START + print_wasm_error("Can't set instance gas", nullptr, j_); + wasmi_error_delete(err); + throw std::runtime_error("Can't set instance gas"); + // LCOV_EXCL_STOP } return gas; @@ -230,10 +217,11 @@ InstanceWrapper::setGas(std::int64_t gas) const ////////////////////////////////////////////////////////////////////////////////////////////////////////////// ModulePtr -ModuleWrapper::init(wasm_store_t* s, Bytes const& wasmBin, beast::Journal j) +ModuleWrapper::init(StorePtr& s, Bytes const& wasmBin, beast::Journal j) { wasm_byte_vec_t const code{wasmBin.size(), (char*)(wasmBin.data())}; - ModulePtr m = ModulePtr(wasm_module_new(s, &code), &wasm_module_delete); + ModulePtr m = + ModulePtr(wasm_module_new(s.get(), &code), &wasm_module_delete); if (!m) throw std::runtime_error("can't create module"); @@ -241,41 +229,33 @@ ModuleWrapper::init(wasm_store_t* s, Bytes const& wasmBin, beast::Journal j) } // LCOV_EXCL_START -ModuleWrapper::ModuleWrapper() - : module_(nullptr, &wasm_module_delete), exportTypes_{0, nullptr} +ModuleWrapper::ModuleWrapper() : module_(nullptr, &wasm_module_delete) { } ModuleWrapper::ModuleWrapper(ModuleWrapper&& o) - : module_(nullptr, &wasm_module_delete), exportTypes_{0, nullptr} + : module_(nullptr, &wasm_module_delete) { *this = std::move(o); } // LCOV_EXCL_STOP ModuleWrapper::ModuleWrapper( - wasm_store_t* s, + StorePtr& s, Bytes const& wasmBin, bool instantiate, ImportVec const& imports, beast::Journal j) - : module_(init(s, wasmBin, j)), exportTypes_{0, nullptr}, j_(j) + : module_(init(s, wasmBin, j)), j_(j) { - wasm_module_exports(module_.get(), &exportTypes_); + wasm_module_exports(module_.get(), &exportTypes_.vec_); if (instantiate) { auto wimports = buildImports(s, imports); addInstance(s, wimports); - wasm_extern_vec_delete(&wimports); } } -ModuleWrapper::~ModuleWrapper() -{ - if (exportTypes_.size) - wasm_exporttype_vec_delete(&exportTypes_); -} - // LCOV_EXCL_START ModuleWrapper& ModuleWrapper::operator=(ModuleWrapper&& o) @@ -285,10 +265,7 @@ ModuleWrapper::operator=(ModuleWrapper&& o) module_ = std::move(o.module_); instanceWrap_ = std::move(o.instanceWrap_); - if (exportTypes_.size) - wasm_exporttype_vec_delete(&exportTypes_); - exportTypes_ = o.exportTypes_; - o.exportTypes_ = {0, nullptr}; + exportTypes_ = std::move(o.exportTypes_); j_ = o.j_; return *this; @@ -301,27 +278,25 @@ ModuleWrapper::operator bool() const // LCOV_EXCL_STOP -void -ModuleWrapper::makeImpParams(wasm_valtype_vec_t& v, WasmImportFunc const& imp) +static WasmValtypeVec +makeImpParams(WasmImportFunc const& imp) { auto const paramSize = imp.params.size(); + if (!paramSize) + return {}; + + WasmValtypeVec v(paramSize); - if (paramSize) - { - wasm_valtype_vec_new_uninitialized(&v, paramSize); - } - else - v = WASM_EMPTY_VEC; for (unsigned i = 0; i < paramSize; ++i) { auto const vt = imp.params[i]; switch (vt) { case WT_I32: - v.data[i] = wasm_valtype_new_i32(); + v.vec_.data[i] = wasm_valtype_new_i32(); break; case WT_I64: - v.data[i] = wasm_valtype_new_i64(); + v.vec_.data[i] = wasm_valtype_new_i64(); break; // LCOV_EXCL_START default: @@ -329,59 +304,55 @@ ModuleWrapper::makeImpParams(wasm_valtype_vec_t& v, WasmImportFunc const& imp) // LCOV_EXCL_STOP } } + return v; } -void -ModuleWrapper::makeImpReturn(wasm_valtype_vec_t& v, WasmImportFunc const& imp) +static WasmValtypeVec +makeImpReturn(WasmImportFunc const& imp) { - if (imp.result) + if (!imp.result) + return {}; // LCOV_EXCL_LINE + + WasmValtypeVec v(1); + switch (*imp.result) { - wasm_valtype_vec_new_uninitialized(&v, 1); - switch (*imp.result) - { - case WT_I32: - v.data[0] = wasm_valtype_new_i32(); - break; - // LCOV_EXCL_START - case WT_I64: - v.data[0] = wasm_valtype_new_i64(); - break; - default: - throw std::runtime_error("invalid return type"); - // LCOV_EXCL_STOP - } + case WT_I32: + v.vec_.data[0] = wasm_valtype_new_i32(); + break; + // LCOV_EXCL_START + case WT_I64: + v.vec_.data[0] = wasm_valtype_new_i64(); + break; + default: + throw std::runtime_error("invalid return type"); + // LCOV_EXCL_STOP } - else - v = WASM_EMPTY_VEC; // LCOV_EXCL_LINE + return v; } -wasm_extern_vec_t -ModuleWrapper::buildImports(wasm_store_t* s, ImportVec const& imports) +WasmExternVec +ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) { - wasm_importtype_vec_t importTypes = WASM_EMPTY_VEC; - wasm_module_imports(module_.get(), &importTypes); - std:: - unique_ptr - itDeleter(&importTypes, &wasm_importtype_vec_delete); + WasmImporttypeVec importTypes; + wasm_module_imports(module_.get(), &importTypes.vec_); - wasm_extern_vec_t wimports = WASM_EMPTY_VEC; - if (!importTypes.size) - return wimports; + if (!importTypes.vec_.size) + return {}; - wasm_extern_vec_new_uninitialized(&wimports, importTypes.size); + WasmExternVec wimports(importTypes.vec_.size); unsigned impCnt = 0; - for (unsigned i = 0; i < importTypes.size; ++i) + for (unsigned i = 0; i < importTypes.vec_.size; ++i) { - wasm_importtype_t const* importtype = importTypes.data[i]; + wasm_importtype_t const* importType = importTypes.vec_.data[i]; // wasm_name_t const* mn = wasm_importtype_module(importtype); // auto modName = std::string_view(mn->data, mn->num_elems); - wasm_name_t const* fn = wasm_importtype_name(importtype); + wasm_name_t const* fn = wasm_importtype_name(importType); auto fieldName = std::string_view(fn->data, fn->size); wasm_externkind_t const itype = - wasm_externtype_kind(wasm_importtype_type(importtype)); + wasm_externtype_kind(wasm_importtype_type(importType)); if ((itype) != WASM_EXTERN_FUNC) throw std::runtime_error( "Invalid import type " + @@ -398,17 +369,19 @@ ModuleWrapper::buildImports(wasm_store_t* s, ImportVec const& imports) if (imp.name != fieldName) continue; - wasm_valtype_vec_t params = WASM_EMPTY_VEC, - results = WASM_EMPTY_VEC; - makeImpReturn(results, imp); - makeImpParams(params, imp); + WasmValtypeVec params(makeImpParams(imp)); + WasmValtypeVec results(makeImpReturn(imp)); + + std::unique_ptr + ftype( + wasm_functype_new(¶ms.vec_, &results.vec_), + &wasm_functype_delete); + + params.release(); + results.release(); - using ftype_ptr = std:: - unique_ptr; - ftype_ptr ftype( - wasm_functype_new(¶ms, &results), &wasm_functype_delete); wasm_func_t* func = wasm_func_new_with_env( - s, + s.get(), ftype.get(), reinterpret_cast(imp.wrap), (void*)&obj, @@ -421,7 +394,7 @@ ModuleWrapper::buildImports(wasm_store_t* s, ImportVec const& imports) // LCOV_EXCL_STOP } - wimports.data[i] = wasm_func_as_extern(func); + wimports.vec_.data[i] = wasm_func_as_extern(func); ++impCnt; impSet = true; @@ -435,11 +408,11 @@ ModuleWrapper::buildImports(wasm_store_t* s, ImportVec const& imports) } } - if (impCnt != importTypes.size) + if (impCnt != importTypes.vec_.size) { print_wasm_error( std::string("Imports not finished: ") + std::to_string(impCnt) + - "/" + std::to_string(importTypes.size), + "/" + std::to_string(importTypes.vec_.size), nullptr, j_); } @@ -466,9 +439,9 @@ ModuleWrapper::getInstance(int) const } int -ModuleWrapper::addInstance(wasm_store_t* s, wasm_extern_vec_t const& imports) +ModuleWrapper::addInstance(StorePtr& s, WasmExternVec const& imports) { - instanceWrap_ = {s, module_.get(), imports, j_}; + instanceWrap_ = {s, module_, imports, j_}; return 0; } @@ -547,12 +520,13 @@ WasmiEngine::addModule( { // LCOV_EXCL_START print_wasm_error("Error setting gas", nullptr, j_); + wasmi_error_delete(err); throw std::runtime_error("can't set gas"); // LCOV_EXCL_STOP } moduleWrap_ = std::make_unique( - store_.get(), wasmCode, instantiate, imports, j_); + store_, wasmCode, instantiate, imports, j_); if (!moduleWrap_) throw std::runtime_error( @@ -697,7 +671,7 @@ WasmiEngine::call(FuncInfo const& f, std::vector& in) auto const start = usecs(); #endif - wasm_trap_t* trap = wasm_func_call(f.first, &inv, &ret.r); + wasm_trap_t* trap = wasm_func_call(f.first, &inv, &ret.r.vec_); #ifdef SHOW_CALL_TIME auto const finish = usecs(); @@ -849,16 +823,16 @@ WasmiEngine::runHlp( if (res.f) throw std::runtime_error("<" + std::string(funcName) + "> failure"); - else if (!res.r.size) + else if (!res.r.vec_.size) throw std::runtime_error( "<" + std::string(funcName) + "> return nothing"); // LCOV_EXCL_LINE - assert(res.r.data[0].kind == WASM_I32); + assert(res.r.vec_.data[0].kind == WASM_I32); if (gas == -1) gas = std::numeric_limits::max(); WasmResult const ret{ - res.r.data[0].of.i32, gas - moduleWrap_->getGas()}; + res.r.vec_.data[0].of.i32, gas - moduleWrap_->getGas()}; // #ifdef DEBUG_OUTPUT // auto& j = std::cerr; @@ -957,11 +931,11 @@ WasmiEngine::allocate(int32_t sz) { auto res = call<1>(W_ALLOC, static_cast(sz)); - if (res.f || !res.r.size || (res.r.data[0].kind != WASM_I32) || - !res.r.data[0].of.i32) + if (res.f || !res.r.vec_.size || (res.r.vec_.data[0].kind != WASM_I32) || + !res.r.vec_.data[0].of.i32) throw std::runtime_error( "can't allocate memory, " + std::to_string(sz) + " bytes"); - return res.r.data[0].of.i32; + return res.r.vec_.data[0].of.i32; } wasm_trap_t* @@ -973,7 +947,12 @@ WasmiEngine::newTrap(std::string const& txt) if (!txt.empty()) wasm_name_new(&msg, txt.size() + 1, txt.c_str()); // include 0 - return wasm_trap_new(store_.get(), &msg); + wasm_trap_t* trap = wasm_trap_new(store_.get(), &msg); + + if (!txt.empty()) + wasm_byte_vec_delete(&msg); + + return trap; } // LCOV_EXCL_START From 1d8994065398234318cdada96c63c290822e466a Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 5 Jan 2026 18:48:09 -0500 Subject: [PATCH 044/137] merge fixes --- src/test/app/HostFuncImpl_test.cpp | 4 ++-- src/test/app/TestHostFunctions.h | 6 +++--- src/xrpld/app/wasm/detail/HostFuncImpl.cpp | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 6ada72b765..956c93a653 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -92,7 +92,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const result = hfs.getLedgerSqn(); if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT(result.value() == env.current()->info().seq); + BEAST_EXPECT(result.value() == env.current()->header().seq); } void @@ -149,7 +149,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const result = hfs.getParentLedgerHash(); if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT(result.value() == env.current()->info().parentHash); + BEAST_EXPECT(result.value() == env.current()->header().parentHash); } void diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index 128bfa446f..5eb81cc0cb 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -87,7 +87,7 @@ public: Expected getParentLedgerHash() override { - return env_.current()->info().parentHash; + return env_.current()->header().parentHash; } Expected @@ -284,7 +284,7 @@ public: Expected computeSha512HalfHash(Slice const& data) override { - return env_.current()->info().parentHash; + return env_.current()->header().parentHash; } Expected @@ -603,7 +603,7 @@ struct PerfHostFunctions : public TestHostFunctions Expected getParentLedgerHash() override { - return env_.current()->info().parentHash; + return env_.current()->header().parentHash; } Expected diff --git a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp index 59c4cbfc84..d9f3550a7c 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp @@ -32,7 +32,7 @@ WasmHostFunctionsImpl::getParentLedgerTime() Expected WasmHostFunctionsImpl::getParentLedgerHash() { - return ctx.view().info().parentHash; + return ctx.view().header().parentHash; } Expected From 0e9c7458bb5d52901755c982e20a297c1f22911b Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 5 Jan 2026 18:53:14 -0500 Subject: [PATCH 045/137] fix more merge issues --- include/xrpl/protocol/detail/ledger_entries.macro | 2 +- src/test/app/HostFuncImpl_test.cpp | 4 ++-- src/test/app/TestHostFunctions.h | 6 +++--- src/test/app/Wasm_test.cpp | 4 ++-- src/xrpld/app/wasm/HostFunc.h | 4 ++-- src/xrpld/app/wasm/HostFuncImpl.h | 4 ++-- src/xrpld/app/wasm/HostFuncWrapper.h | 4 ++-- src/xrpld/app/wasm/ParamsHelper.h | 6 +++--- src/xrpld/app/wasm/WasmVM.h | 4 ++-- src/xrpld/app/wasm/WasmiVM.h | 4 ++-- src/xrpld/app/wasm/detail/HostFuncImpl.cpp | 4 ++-- src/xrpld/app/wasm/detail/HostFuncWrapper.cpp | 4 ++-- src/xrpld/app/wasm/detail/WasmVM.cpp | 4 ++-- src/xrpld/app/wasm/detail/WasmiVM.cpp | 4 ++-- 14 files changed, 29 insertions(+), 29 deletions(-) diff --git a/include/xrpl/protocol/detail/ledger_entries.macro b/include/xrpl/protocol/detail/ledger_entries.macro index 1034c35895..e11099dcf9 100644 --- a/include/xrpl/protocol/detail/ledger_entries.macro +++ b/include/xrpl/protocol/detail/ledger_entries.macro @@ -578,7 +578,7 @@ LEDGER_ENTRY(ltLOAN, 0x0089, Loan, loan, ({ // The unrounded true total value of the loan. // // - TrueTotalPrincialOutstanding can be computed using the algorithm - // in the ripple::detail::loanPrincipalFromPeriodicPayment function. + // in the xrpl::detail::loanPrincipalFromPeriodicPayment function. // // - TrueTotalInterestOutstanding = TrueTotalLoanValue - // TrueTotalPrincipalOutstanding diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 956c93a653..8eeca41b7c 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -4,7 +4,7 @@ #include -namespace ripple { +namespace xrpl { namespace test { static Bytes @@ -2963,4 +2963,4 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE(HostFuncImpl, app, ripple); } // namespace test -} // namespace ripple +} // namespace xrpl diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index 5eb81cc0cb..0cb010b0e9 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -9,7 +9,7 @@ #include #include -namespace ripple { +namespace xrpl { namespace test { @@ -1024,7 +1024,7 @@ struct PerfHostFunctions : public TestHostFunctions if (data.size() > maxWasmDataLength) return Unexpected(HostFunctionError::DATA_FIELD_TOO_LARGE); - ripple::detail::ApplyViewBase v( + xrpl::detail::ApplyViewBase v( env_.app().openLedger().current().get(), tapNONE); auto sle = v.peek(leKey); @@ -1326,4 +1326,4 @@ struct PerfHostFunctions : public TestHostFunctions }; } // namespace test -} // namespace ripple +} // namespace xrpl diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 0a8cacca42..2fc2952e2d 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -6,7 +6,7 @@ #include -namespace ripple { +namespace xrpl { namespace test { bool @@ -743,4 +743,4 @@ struct Wasm_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE(Wasm, app, ripple); } // namespace test -} // namespace ripple +} // namespace xrpl diff --git a/src/xrpld/app/wasm/HostFunc.h b/src/xrpld/app/wasm/HostFunc.h index 9963754bfb..e59507757c 100644 --- a/src/xrpld/app/wasm/HostFunc.h +++ b/src/xrpld/app/wasm/HostFunc.h @@ -11,7 +11,7 @@ #include #include -namespace ripple { +namespace xrpl { enum class HostFunctionError : int32_t { INTERNAL = -1, @@ -514,4 +514,4 @@ struct HostFunctions // LCOV_EXCL_STOP }; -} // namespace ripple +} // namespace xrpl diff --git a/src/xrpld/app/wasm/HostFuncImpl.h b/src/xrpld/app/wasm/HostFuncImpl.h index f5ed190230..fccea11252 100644 --- a/src/xrpld/app/wasm/HostFuncImpl.h +++ b/src/xrpld/app/wasm/HostFuncImpl.h @@ -3,7 +3,7 @@ #include #include -namespace ripple { +namespace xrpl { class WasmHostFunctionsImpl : public HostFunctions { ApplyContext& ctx; @@ -271,4 +271,4 @@ public: floatLog(Slice const& x, int32_t mode) override; }; -} // namespace ripple +} // namespace xrpl diff --git a/src/xrpld/app/wasm/HostFuncWrapper.h b/src/xrpld/app/wasm/HostFuncWrapper.h index 13ed916e82..745bbe9a2c 100644 --- a/src/xrpld/app/wasm/HostFuncWrapper.h +++ b/src/xrpld/app/wasm/HostFuncWrapper.h @@ -2,7 +2,7 @@ #include -namespace ripple { +namespace xrpl { using getLedgerSqn_proto = int32_t(); wasm_trap_t* @@ -531,4 +531,4 @@ using floatLog_proto = wasm_trap_t* floatLog_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -} // namespace ripple +} // namespace xrpl diff --git a/src/xrpld/app/wasm/ParamsHelper.h b/src/xrpld/app/wasm/ParamsHelper.h index a0eece7931..508a9438b0 100644 --- a/src/xrpld/app/wasm/ParamsHelper.h +++ b/src/xrpld/app/wasm/ParamsHelper.h @@ -13,10 +13,10 @@ namespace bft = boost::function_types; -namespace ripple { +namespace xrpl { using Bytes = std::vector; -using Hash = ripple::uint256; +using Hash = xrpl::uint256; struct wmem { @@ -247,4 +247,4 @@ wasmParams(Types&&... args) return v; } -} // namespace ripple +} // namespace xrpl diff --git a/src/xrpld/app/wasm/WasmVM.h b/src/xrpld/app/wasm/WasmVM.h index e8230175a4..c9c8d9c8e0 100644 --- a/src/xrpld/app/wasm/WasmVM.h +++ b/src/xrpld/app/wasm/WasmVM.h @@ -4,7 +4,7 @@ #include -namespace ripple { +namespace xrpl { static std::string_view const W_ENV = "env"; static std::string_view const W_HOST_LIB = "host_lib"; @@ -87,4 +87,4 @@ preflightEscrowWasm( std::string_view funcName = ESCROW_FUNCTION_NAME, std::vector const& params = {}); -} // namespace ripple +} // namespace xrpl diff --git a/src/xrpld/app/wasm/WasmiVM.h b/src/xrpld/app/wasm/WasmiVM.h index b4148b7dea..06e18ef29e 100644 --- a/src/xrpld/app/wasm/WasmiVM.h +++ b/src/xrpld/app/wasm/WasmiVM.h @@ -5,7 +5,7 @@ #include #include -namespace ripple { +namespace xrpl { template struct WasmVec @@ -345,4 +345,4 @@ private: Types&&... args); }; -} // namespace ripple +} // namespace xrpl diff --git a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp index d9f3550a7c..7d2136f4f7 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp @@ -9,7 +9,7 @@ // #define DEBUG_OUTPUT 1 #endif -namespace ripple { +namespace xrpl { Expected WasmHostFunctionsImpl::getLedgerSqn() @@ -1302,4 +1302,4 @@ floatLogImpl(Slice const& x, int32_t mode) // LCOV_EXCL_STOP } -} // namespace ripple +} // namespace xrpl diff --git a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp index 5dc935735c..b5da69f71d 100644 --- a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp @@ -6,7 +6,7 @@ #include #include -namespace ripple { +namespace xrpl { using SFieldCRef = std::reference_wrapper; @@ -2182,4 +2182,4 @@ testGetDataIncrement() } // namespace test // LCOV_EXCL_STOP -} // namespace ripple +} // namespace xrpl diff --git a/src/xrpld/app/wasm/detail/WasmVM.cpp b/src/xrpld/app/wasm/detail/WasmVM.cpp index 9ac91358dc..062e50ba93 100644 --- a/src/xrpld/app/wasm/detail/WasmVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmVM.cpp @@ -13,7 +13,7 @@ #include -namespace ripple { +namespace xrpl { static void setCommonHostFunctions(HostFunctions* hfs, ImportVec& i) @@ -213,4 +213,4 @@ WasmEngine::getJournal() const } // LCOV_EXCL_STOP -} // namespace ripple +} // namespace xrpl diff --git a/src/xrpld/app/wasm/detail/WasmiVM.cpp b/src/xrpld/app/wasm/detail/WasmiVM.cpp index 1a37910105..82c502f63f 100644 --- a/src/xrpld/app/wasm/detail/WasmiVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmiVM.cpp @@ -9,7 +9,7 @@ #endif // #define SHOW_CALL_TIME 1 -namespace ripple { +namespace xrpl { namespace { @@ -963,4 +963,4 @@ WasmiEngine::getJournal() const } // LCOV_EXCL_STOP -} // namespace ripple +} // namespace xrpl From b66bc47ca9df478f9389cfeadb5f5f88812b6147 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 6 Jan 2026 13:30:30 -0500 Subject: [PATCH 046/137] fix more merge issues --- src/test/app/HostFuncImpl_test.cpp | 2 +- src/test/app/Wasm_test.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 8eeca41b7c..692b085102 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -2960,7 +2960,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite } }; -BEAST_DEFINE_TESTSUITE(HostFuncImpl, app, ripple); +BEAST_DEFINE_TESTSUITE(HostFuncImpl, app, xrpl); } // namespace test } // namespace xrpl diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 2fc2952e2d..c22054fac0 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -740,7 +740,7 @@ struct Wasm_test : public beast::unit_test::suite } }; -BEAST_DEFINE_TESTSUITE(Wasm, app, ripple); +BEAST_DEFINE_TESTSUITE(Wasm, app, xrpl); } // namespace test } // namespace xrpl From a98269f049f15cecb49cc7e5a8cef51f6af3478a Mon Sep 17 00:00:00 2001 From: pwang200 <354723+pwang200@users.noreply.github.com> Date: Tue, 6 Jan 2026 14:03:18 -0500 Subject: [PATCH 047/137] a batch of memory, table, and trap tests (#6100) wasm memory, table, and trap unit tests --- clang_format.sh | 18 +++ src/test/app/Wasm_test.cpp | 104 +++++++++++++ src/test/app/wasm_fixtures/fixtures.cpp | 139 ++++++++++++++++++ src/test/app/wasm_fixtures/fixtures.h | 37 +++++ .../wat/memory_end_of_word_over_limit.wat | 28 ++++ .../wat/memory_grow_0_page_more_than_8MB.wat | 29 ++++ .../wasm_fixtures/wat/memory_grow_0_to_1.wat | 26 ++++ .../wat/memory_grow_1_page_more_than_8MB.wat | 29 ++++ .../wasm_fixtures/wat/memory_grow_1_to_0.wat | 33 +++++ .../wat/memory_init_1_page_more_than_8MB.wat | 27 ++++ .../wat/memory_last_byte_of_8MB.wat | 26 ++++ .../wat/memory_negative_address.wat | 23 +++ .../wat/memory_offset_over_limit.wat | 27 ++++ .../wat/memory_pointer_at_limit.wat | 22 +++ .../wat/memory_pointer_over_limit.wat | 23 +++ .../wat/proposal_bulk_memory.wat | 25 ++++ .../wat/proposal_extended_const.wat | 15 ++ .../wat/proposal_float_to_int.wat | 18 +++ .../wat/proposal_gc_struct_new.wat | 12 ++ .../wat/proposal_multi_value.wat | 22 +++ .../wat/proposal_mutable_global.wat | 25 ++++ .../wasm_fixtures/wat/proposal_ref_types.wat | 18 +++ .../wasm_fixtures/wat/proposal_sign_ext.wat | 18 +++ .../wasm_fixtures/wat/proposal_stringref.wat | 1 + .../wasm_fixtures/wat/proposal_tail_call.wat | 15 ++ .../wasm_fixtures/wat/table_0_elements.wat | 10 ++ .../app/wasm_fixtures/wat/table_2_tables.wat | 24 +++ .../wasm_fixtures/wat/table_64_elements.wat | 25 ++++ .../wasm_fixtures/wat/table_65_elements.wat | 25 ++++ .../app/wasm_fixtures/wat/table_uint_max.wat | 15 ++ .../wasm_fixtures/wat/trap_divide_by_0.wat | 15 ++ .../wat/trap_func_signature_mismatch.wat | 33 +++++ .../wasm_fixtures/wat/trap_int_overflow.wat | 18 +++ .../app/wasm_fixtures/wat/trap_null_call.wat | 22 +++ .../wasm_fixtures/wat/trap_unreachable.wat | 12 ++ .../app/wasm_fixtures/wat/wasi_get_time.wat | 38 +++++ src/test/app/wasm_fixtures/wat/wasi_print.wat | 59 ++++++++ 37 files changed, 1056 insertions(+) create mode 100755 clang_format.sh create mode 100644 src/test/app/wasm_fixtures/wat/memory_end_of_word_over_limit.wat create mode 100644 src/test/app/wasm_fixtures/wat/memory_grow_0_page_more_than_8MB.wat create mode 100644 src/test/app/wasm_fixtures/wat/memory_grow_0_to_1.wat create mode 100644 src/test/app/wasm_fixtures/wat/memory_grow_1_page_more_than_8MB.wat create mode 100644 src/test/app/wasm_fixtures/wat/memory_grow_1_to_0.wat create mode 100644 src/test/app/wasm_fixtures/wat/memory_init_1_page_more_than_8MB.wat create mode 100644 src/test/app/wasm_fixtures/wat/memory_last_byte_of_8MB.wat create mode 100644 src/test/app/wasm_fixtures/wat/memory_negative_address.wat create mode 100644 src/test/app/wasm_fixtures/wat/memory_offset_over_limit.wat create mode 100644 src/test/app/wasm_fixtures/wat/memory_pointer_at_limit.wat create mode 100644 src/test/app/wasm_fixtures/wat/memory_pointer_over_limit.wat create mode 100644 src/test/app/wasm_fixtures/wat/proposal_bulk_memory.wat create mode 100644 src/test/app/wasm_fixtures/wat/proposal_extended_const.wat create mode 100644 src/test/app/wasm_fixtures/wat/proposal_float_to_int.wat create mode 100644 src/test/app/wasm_fixtures/wat/proposal_gc_struct_new.wat create mode 100644 src/test/app/wasm_fixtures/wat/proposal_multi_value.wat create mode 100644 src/test/app/wasm_fixtures/wat/proposal_mutable_global.wat create mode 100644 src/test/app/wasm_fixtures/wat/proposal_ref_types.wat create mode 100644 src/test/app/wasm_fixtures/wat/proposal_sign_ext.wat create mode 100644 src/test/app/wasm_fixtures/wat/proposal_stringref.wat create mode 100644 src/test/app/wasm_fixtures/wat/proposal_tail_call.wat create mode 100644 src/test/app/wasm_fixtures/wat/table_0_elements.wat create mode 100644 src/test/app/wasm_fixtures/wat/table_2_tables.wat create mode 100644 src/test/app/wasm_fixtures/wat/table_64_elements.wat create mode 100644 src/test/app/wasm_fixtures/wat/table_65_elements.wat create mode 100644 src/test/app/wasm_fixtures/wat/table_uint_max.wat create mode 100644 src/test/app/wasm_fixtures/wat/trap_divide_by_0.wat create mode 100644 src/test/app/wasm_fixtures/wat/trap_func_signature_mismatch.wat create mode 100644 src/test/app/wasm_fixtures/wat/trap_int_overflow.wat create mode 100644 src/test/app/wasm_fixtures/wat/trap_null_call.wat create mode 100644 src/test/app/wasm_fixtures/wat/trap_unreachable.wat create mode 100644 src/test/app/wasm_fixtures/wat/wasi_get_time.wat create mode 100644 src/test/app/wasm_fixtures/wat/wasi_print.wat diff --git a/clang_format.sh b/clang_format.sh new file mode 100755 index 0000000000..f9aeb0af66 --- /dev/null +++ b/clang_format.sh @@ -0,0 +1,18 @@ +#!/bin/bash +modified=$1 +dir=`pwd` +clangf=clang-format-10 +clangf=clang-format +if [ "$1" = "--all" ] +then + modified=`git status|egrep "modified|new file"|egrep "(cpp|h)$" | sed -E -e 's/modified://' -e 's/new file://' -e 's/^[[:space:]]+//'` +fi +for i in $modified +do + basedir=$(dirname "$i") + file=$(basename "$i") + echo "$basedir $file" + cd $basedir + $clangf -style=file -i "$file" + cd $dir +done diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index c22054fac0..e6e3901958 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -23,6 +23,23 @@ Add(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) return nullptr; } +std::optional +runFinishFunction(std::string const& code) +{ + auto& engine = WasmEngine::instance(); + auto const ws = boost::algorithm::unhex(code); + Bytes const wasm(ws.begin(), ws.end()); + auto const re = engine.run(wasm, "finish"); + if (re.has_value()) + { + return std::optional(re->result); + } + else + { + return std::nullopt; + } +} + struct Wasm_test : public beast::unit_test::suite { void @@ -715,6 +732,88 @@ struct Wasm_test : public beast::unit_test::suite } } + void + testWasmMemory() + { + testcase("Wasm additional memory limit tests"); + BEAST_EXPECT(runFinishFunction(memoryPointerAtLimitHex).value() == 1); + BEAST_EXPECT( + runFinishFunction(memoryPointerOverLimitHex).has_value() == false); + BEAST_EXPECT( + runFinishFunction(memoryOffsetOverLimitHex).has_value() == false); + BEAST_EXPECT( + runFinishFunction(memoryEndOfWordOverLimitHex).has_value() == + false); + BEAST_EXPECT(runFinishFunction(memoryGrow0To1PageHex).value() == 1); + BEAST_EXPECT(runFinishFunction(memoryGrow1To0PageHex).value() == -1); + BEAST_EXPECT(runFinishFunction(memoryLastByteOf8MBHex).value() == 1); + BEAST_EXPECT( + runFinishFunction(memoryGrow1MoreThan8MBHex).value() == -1); + BEAST_EXPECT(runFinishFunction(memoryGrow0MoreThan8MBHex).value() == 1); + BEAST_EXPECT( + runFinishFunction(memoryInit1MoreThan8MBHex).has_value() == false); + BEAST_EXPECT( + runFinishFunction(memoryNegativeAddressHex).has_value() == false); + } + + void + testWasmTable() + { + testcase("Wasm table limit tests"); + BEAST_EXPECT(runFinishFunction(table64ElementsHex).value() == 1); + BEAST_EXPECT( + runFinishFunction(table65ElementsHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(table2TablesHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(table0ElementsHex).value() == 1); + BEAST_EXPECT(runFinishFunction(tableUintMaxHex).has_value() == false); + } + + void + testWasmProposal() + { + testcase("Wasm disabled proposal tests"); + BEAST_EXPECT( + runFinishFunction(proposalMutableGlobalHex).has_value() == false); + BEAST_EXPECT( + runFinishFunction(proposalGcStructNewHex).has_value() == false); + BEAST_EXPECT( + runFinishFunction(proposalMultiValueHex).has_value() == false); + BEAST_EXPECT( + runFinishFunction(proposalSignExtHex).has_value() == false); + BEAST_EXPECT( + runFinishFunction(proposalFloatToIntHex).has_value() == false); + BEAST_EXPECT( + runFinishFunction(proposalBulkMemoryHex).has_value() == false); + BEAST_EXPECT( + runFinishFunction(proposalRefTypesHex).has_value() == false); + BEAST_EXPECT( + runFinishFunction(proposalTailCallHex).has_value() == false); + BEAST_EXPECT( + runFinishFunction(proposalExtendedConstHex).has_value() == false); + } + + void + testWasmTrap() + { + testcase("Wasm trap tests"); + BEAST_EXPECT(runFinishFunction(trapDivideBy0Hex).has_value() == false); + BEAST_EXPECT( + runFinishFunction(trapIntOverflowHex).has_value() == false); + BEAST_EXPECT( + runFinishFunction(trapUnreachableHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(trapNullCallHex).has_value() == false); + BEAST_EXPECT( + runFinishFunction(trapFuncSigMismatchHex).has_value() == false); + } + + void + testWasmWasi() + { + testcase("Wasm Wasi tests"); + BEAST_EXPECT(runFinishFunction(wasiGetTimeHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(wasiPrintHex).has_value() == false); + } + void run() override { @@ -736,6 +835,11 @@ struct Wasm_test : public beast::unit_test::suite testCodecovWasm(); testDisabledFloat(); + testWasmMemory(); + testWasmTable(); + testWasmProposal(); + testWasmTrap(); + testWasmWasi(); // perfTest(); } }; diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 54584364f1..6a6ae2e686 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -1069,3 +1069,142 @@ extern std::string const disabledFloatHex = "6503050b5f5f686561705f6261736503060a5f5f686561705f656e640307" "0d5f5f6d656d6f72795f6261736503080c5f5f7461626c655f6261736503" "090a150202000b100043000000c54300200045921a41010b"; + +extern std::string const memoryPointerAtLimitHex = + "0061736d010000000105016000017f030201000503010001070a010666696e69736800000a" + "0e010c0041ffff032d00001a41010b"; + +extern std::string const memoryPointerOverLimitHex = + "0061736d010000000105016000017f030201000503010001070a010666696e69736800000a" + "0e010c00418080042d00001a41010b"; + +extern std::string const memoryOffsetOverLimitHex = + "0061736d010000000105016000017f030201000503010001071302066d656d6f7279020006" + "66696e69736800000a0e010c00410028028080041a41010b"; + +extern std::string const memoryEndOfWordOverLimitHex = + "0061736d010000000105016000017f030201000503010001071302066d656d6f7279020006" + "66696e69736800000a0e010c0041feff032802001a41010b"; + +extern std::string const memoryGrow0To1PageHex = + "0061736d010000000105016000017f030201000503010000071302066d656d6f7279020006" + "66696e69736800000a0b010900410140001a41010b"; + +extern std::string const memoryGrow1To0PageHex = + "0061736d010000000105016000017f030201000503010001071302066d656d6f7279020006" + "66696e69736800000a13011100417f4000417f460440417f0f0b41010b"; + +extern std::string const memoryLastByteOf8MBHex = + "0061736d010000000105016000017f030201000506010180018001071302066d656d6f7279" + "02000666696e69736800000a0f010d0041ffffff032d00001a41010b"; + +extern std::string const memoryGrow1MoreThan8MBHex = + "0061736d010000000105016000017f03020100050401008001071302066d656d6f72790200" + "0666696e69736800000a1301110041014000417f460440417f0f0b41010b"; + +extern std::string const memoryGrow0MoreThan8MBHex = + "0061736d010000000105016000017f03020100050401008001071302066d656d6f72790200" + "0666696e69736800000a1301110041004000417f460440417f0f0b41010b"; + +extern std::string const memoryInit1MoreThan8MBHex = + "0061736d010000000105016000017f030201000506010181018101071302066d656d6f7279" + "02000666696e69736800000a0f010d0041ffffff032d00001a41010b"; + +extern std::string const memoryNegativeAddressHex = + "0061736d010000000105016000017f030201000506010180018001071302066d656d6f7279" + "02000666696e69736800000a0c010a00417f2d00001a41010b"; + +extern std::string const table64ElementsHex = + "0061736d010000000108026000006000017f0303020001040401700040070a010666696e69" + "736800010946010041000b4000000000000000000000000000000000000000000000000000" + "00000000000000000000000000000000000000000000000000000000000000000000000000" + "00000a090202000b040041010b"; + +extern std::string const table65ElementsHex = + "0061736d010000000108026000006000017f0303020001040401700041070a010666696e69" + "736800010947010041000b4100000000000000000000000000000000000000000000000000" + "00000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000a090202000b040041010b"; + +extern std::string const table2TablesHex = + "0061736d010000000108026000006000017f03030200010409027001010170010101070a01" + "0666696e6973680001090f020041000b0100020141000b0001000a090202000b040041010" + "b"; + +extern std::string const table0ElementsHex = + "0061736d010000000105016000017f03020100040401700000070a010666696e6973680000" + "0a0601040041010b"; + +extern std::string const tableUintMaxHex = + "0061736d010000000105016000017f030201000408017000ffffffff0f070a010666696e69" + "736800000a0601040041010b"; + +extern std::string const proposalMutableGlobalHex = + "0061736d010000000105016000017f030201000606017f0141000b07140207636f756e7465" + "7203000666696e69736800000a0d010b00230041016a240041010b"; + +extern std::string const proposalGcStructNewHex = + "0061736d01000000010b026000017f5f027f017f0103020100070a010666696e6973680000" + "0a0a010800fb01011a41010b"; + +extern std::string const proposalMultiValueHex = + "0061736d010000000110036000027f7f6000017f60027f7f017f0303020001070a01066669" + "6e69736800010a14020600410a41140b0b00100002026a411e460b0b"; + +extern std::string const proposalSignExtHex = + "0061736d010000000105016000017f03020100070a010666696e69736800000a0b01090041" + "ff01c0417f460b"; + +extern std::string const proposalFloatToIntHex = + "0061736d010000000105016000017f03020100070a010666696e69736800000a1201100043" + "f9021550fc0041ffffffff07460b"; + +extern std::string const proposalBulkMemoryHex = + "0061736d010000000105016000017f030201000503010001071302066d656d6f7279020006" + "66696e69736800000a1f011d004100412a3a000041e40041004101fc0a000041e4002d0000" + "412a460b"; + +extern std::string const proposalRefTypesHex = + "0061736d010000000105016000017f020f0103656e76057461626c65016f00010302010007" + "0a010666696e69736800000a0c010a004100d06f260041010b"; + +extern std::string const proposalTailCallHex = + "0061736d010000000105016000017f0303020000070a010666696e69736800010a0b020400" + "41010b040012000b"; + +extern std::string const proposalExtendedConstHex = + "0061736d010000000105016000017f030201000609017f00410a41206a0b070a010666696e" + "69736800000a090107002300412a460b"; + +extern std::string const trapDivideBy0Hex = + "0061736d010000000105016000017f03020100070a010666696e69736800000a0c010a0041" + "2a41006d1a41010b"; + +extern std::string const trapIntOverflowHex = + "0061736d010000000105016000017f03020100070a010666696e69736800000a0d010b0041" + "8080808078417f6d0b"; + +extern std::string const trapUnreachableHex = + "0061736d010000000105016000017f03020100070a010666696e69736800000a0701050000" + "41010b"; + +extern std::string const trapNullCallHex = + "0061736d010000000105016000017f03020100040401700001070a010666696e6973680000" + "0a0901070041001100000b"; + +extern std::string const trapFuncSigMismatchHex = + "0061736d010000000108026000006000017f0303020001040401700001070a010666696e69" + "736800010907010041000b01000a0d020300010b070041001101000b"; + +extern std::string const wasiGetTimeHex = + "0061736d01000000010c0260037f7e7f017f6000017f02290116776173695f736e61707368" + "6f745f70726576696577310e636c6f636b5f74696d655f6765740000030201010503010001" + "071302066d656d6f727902000666696e69736800010a16011400410042e807410010004504" + "7f410105417f0b0b"; + +extern std::string const wasiPrintHex = + "0061736d01000000010d0260047f7f7f7f017f6000017f02230116776173695f736e617073" + "686f745f70726576696577310866645f77726974650000030201010503010001071302066d" + "656d6f727902000666696e69736800010a1d011b01017f4118210041014100410120001000" + "45047f410105417f0b0b0b1e030041100b0648656c6c6f0a0041000b04100000000041040b" + "0406000000"; diff --git a/src/test/app/wasm_fixtures/fixtures.h b/src/test/app/wasm_fixtures/fixtures.h index abde376763..cb4f6e69d6 100644 --- a/src/test/app/wasm_fixtures/fixtures.h +++ b/src/test/app/wasm_fixtures/fixtures.h @@ -27,3 +27,40 @@ extern std::string const floatTestsWasmHex; extern std::string const float0Hex; extern std::string const disabledFloatHex; + +extern std::string const memoryPointerAtLimitHex; +extern std::string const memoryPointerOverLimitHex; +extern std::string const memoryOffsetOverLimitHex; +extern std::string const memoryEndOfWordOverLimitHex; +extern std::string const memoryGrow0To1PageHex; +extern std::string const memoryGrow1To0PageHex; +extern std::string const memoryLastByteOf8MBHex; +extern std::string const memoryGrow1MoreThan8MBHex; +extern std::string const memoryGrow0MoreThan8MBHex; +extern std::string const memoryInit1MoreThan8MBHex; +extern std::string const memoryNegativeAddressHex; + +extern std::string const table64ElementsHex; +extern std::string const table65ElementsHex; +extern std::string const table2TablesHex; +extern std::string const table0ElementsHex; +extern std::string const tableUintMaxHex; + +extern std::string const proposalMutableGlobalHex; +extern std::string const proposalGcStructNewHex; +extern std::string const proposalMultiValueHex; +extern std::string const proposalSignExtHex; +extern std::string const proposalFloatToIntHex; +extern std::string const proposalBulkMemoryHex; +extern std::string const proposalRefTypesHex; +extern std::string const proposalTailCallHex; +extern std::string const proposalExtendedConstHex; + +extern std::string const trapDivideBy0Hex; +extern std::string const trapIntOverflowHex; +extern std::string const trapUnreachableHex; +extern std::string const trapNullCallHex; +extern std::string const trapFuncSigMismatchHex; + +extern std::string const wasiGetTimeHex; +extern std::string const wasiPrintHex; diff --git a/src/test/app/wasm_fixtures/wat/memory_end_of_word_over_limit.wat b/src/test/app/wasm_fixtures/wat/memory_end_of_word_over_limit.wat new file mode 100644 index 0000000000..dc5427563f --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/memory_end_of_word_over_limit.wat @@ -0,0 +1,28 @@ +(module + ;; 1. Define Memory: 1 Page = 64KB = 65,536 bytes + (memory 1) + + ;; Export memory so the host can inspect it if needed + (export "memory" (memory 0)) + + (func $test_straddle (result i32) + ;; Push the address onto the stack. + ;; 65534 is valid, but it is only 2 bytes away from the end. + i32.const 65534 + + ;; Attempt to load an i32 (4 bytes) from that address. + ;; This requires bytes 65534, 65535, 65536, and 65537. + ;; Since 65536 is the first invalid byte, this MUST trap. + i32.load + + ;; Clean up the stack. + ;; The load pushed a value, but we don't care what it is. + drop + + ;; Return 1 to signal "I survived the memory access" + i32.const 1 + ) + + ;; Export the function so you can call it from your host (JS, Python, etc.) + (export "finish" (func $test_straddle)) +) diff --git a/src/test/app/wasm_fixtures/wat/memory_grow_0_page_more_than_8MB.wat b/src/test/app/wasm_fixtures/wat/memory_grow_0_page_more_than_8MB.wat new file mode 100644 index 0000000000..d9c149530f --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/memory_grow_0_page_more_than_8MB.wat @@ -0,0 +1,29 @@ +(module + ;; Start at your limit: 128 pages (8MB) + (memory 128) + (export "memory" (memory 0)) + + (func $try_grow_beyond_limit (result i32) + ;; Attempt to grow by 0 page + i32.const 0 + memory.grow + + ;; memory.grow returns: + ;; -1 if the growth failed (Correct behavior for your limit) + ;; 128 (old size) if growth succeeded (Means limit was bypassed) + + ;; Check if result == -1 + i32.const -1 + i32.eq + if + ;; Growth FAILED (Host blocked it). Return -1. + i32.const -1 + return + end + + ;; Growth SUCCEEDED (Host allowed it). Return 1. + i32.const 1 + ) + + (export "finish" (func $try_grow_beyond_limit)) +) diff --git a/src/test/app/wasm_fixtures/wat/memory_grow_0_to_1.wat b/src/test/app/wasm_fixtures/wat/memory_grow_0_to_1.wat new file mode 100644 index 0000000000..ff822ffbdc --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/memory_grow_0_to_1.wat @@ -0,0 +1,26 @@ +(module + ;; 1. Define Memory: Start with 0 pages + (memory 0) + + ;; Export memory to host + (export "memory" (memory 0)) + + (func $grow_from_zero (result i32) + ;; We have 0 pages. We want to add 1 page. + ;; Push delta (1) onto stack. + i32.const 1 + + ;; Grow the memory. + ;; If successful: memory becomes 64KB, returns old size (0). + ;; If failed: memory stays 0, returns -1. + memory.grow + + ;; Drop the return value of memory.grow + drop + + ;; Return 1 (as requested) + i32.const 1 + ) + + (export "finish" (func $grow_from_zero)) +) diff --git a/src/test/app/wasm_fixtures/wat/memory_grow_1_page_more_than_8MB.wat b/src/test/app/wasm_fixtures/wat/memory_grow_1_page_more_than_8MB.wat new file mode 100644 index 0000000000..4a245a521c --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/memory_grow_1_page_more_than_8MB.wat @@ -0,0 +1,29 @@ +(module + ;; Start at your limit: 128 pages (8MB) + (memory 128) + (export "memory" (memory 0)) + + (func $try_grow_beyond_limit (result i32) + ;; Attempt to grow by 1 page + i32.const 1 + memory.grow + + ;; memory.grow returns: + ;; -1 if the growth failed (Correct behavior for your limit) + ;; 128 (old size) if growth succeeded (Means limit was bypassed) + + ;; Check if result == -1 + i32.const -1 + i32.eq + if + ;; Growth FAILED (Host blocked it). Return -1. + i32.const -1 + return + end + + ;; Growth SUCCEEDED (Host allowed it). Return 1. + i32.const 1 + ) + + (export "finish" (func $try_grow_beyond_limit)) +) diff --git a/src/test/app/wasm_fixtures/wat/memory_grow_1_to_0.wat b/src/test/app/wasm_fixtures/wat/memory_grow_1_to_0.wat new file mode 100644 index 0000000000..fa25154f09 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/memory_grow_1_to_0.wat @@ -0,0 +1,33 @@ +(module + ;; 1. Define Memory: Start with 1 page (64KB) + (memory 1) + + ;; Export memory to host + (export "memory" (memory 0)) + + (func $grow_negative (result i32) + ;; The user pushed -1. In Wasm, this is interpreted as unsigned MAX_UINT32. + ;; This is requesting to add 4,294,967,295 pages (approx 256 TB). + ;; A secure runtime MUST fail this request (return -1) without crashing. + i32.const -1 + + ;; Grow the memory. + ;; Returns: old_size if success, -1 if failure. + memory.grow + + ;; Check if result == -1 (Failure) + i32.const -1 + i32.eq + if + ;; If memory.grow returned -1, we return -1 to signal "Correctly failed". + i32.const -1 + return + end + + ;; If we are here, memory.grow somehow SUCCEEDED (Vulnerability). + ;; We return 1 to signal "Unexpected Success". + i32.const 1 + ) + + (export "finish" (func $grow_negative)) +) diff --git a/src/test/app/wasm_fixtures/wat/memory_init_1_page_more_than_8MB.wat b/src/test/app/wasm_fixtures/wat/memory_init_1_page_more_than_8MB.wat new file mode 100644 index 0000000000..5fd1d09ed1 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/memory_init_1_page_more_than_8MB.wat @@ -0,0 +1,27 @@ +(module + ;; Define memory: 129 pages (> 8MB limit) min, 129 pages max + (memory 129 129) + + ;; Export memory so host can verify size + (export "memory" (memory 0)) + + ;; access last byte of 8MB limit + (func $access_last_byte (result i32) + ;; Math: 128 pages * 64,536 bytes/page = 8,388,608 bytes + ;; Valid indices: 0 to 8,388,607 + + ;; Push the address of the LAST valid byte + i32.const 8388607 + + ;; Load byte from that address + i32.load8_u + + ;; Drop the value (we don't care what it is, just that we could read it) + drop + + ;; Return 1 to indicate success + i32.const 1 + ) + + (export "finish" (func $access_last_byte)) +) diff --git a/src/test/app/wasm_fixtures/wat/memory_last_byte_of_8MB.wat b/src/test/app/wasm_fixtures/wat/memory_last_byte_of_8MB.wat new file mode 100644 index 0000000000..a59ec06294 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/memory_last_byte_of_8MB.wat @@ -0,0 +1,26 @@ +(module + ;; Define memory: 128 pages (8MB) min, 128 pages max + (memory 128 128) + + ;; Export memory so host can verify size + (export "memory" (memory 0)) + + (func $access_last_byte (result i32) + ;; Math: 128 pages * 64,536 bytes/page = 8,388,608 bytes + ;; Valid indices: 0 to 8,388,607 + + ;; Push the address of the LAST valid byte + i32.const 8388607 + + ;; Load byte from that address + i32.load8_u + + ;; Drop the value (we don't care what it is, just that we could read it) + drop + + ;; Return 1 to indicate success + i32.const 1 + ) + + (export "finish" (func $access_last_byte)) +) diff --git a/src/test/app/wasm_fixtures/wat/memory_negative_address.wat b/src/test/app/wasm_fixtures/wat/memory_negative_address.wat new file mode 100644 index 0000000000..02c9cb5a3b --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/memory_negative_address.wat @@ -0,0 +1,23 @@ +(module + ;; Define memory: 128 pages (8MB) min, 128 pages max + (memory 128 128) + + ;; Export memory so host can verify size + (export "memory" (memory 0)) + + (func $access_last_byte (result i32) + ;; Push a negative address + i32.const -1 + + ;; Load byte from that address + i32.load8_u + + ;; Drop the value + drop + + ;; Return 1 to indicate success + i32.const 1 + ) + + (export "finish" (func $access_last_byte)) +) diff --git a/src/test/app/wasm_fixtures/wat/memory_offset_over_limit.wat b/src/test/app/wasm_fixtures/wat/memory_offset_over_limit.wat new file mode 100644 index 0000000000..d502ddf291 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/memory_offset_over_limit.wat @@ -0,0 +1,27 @@ +(module + ;; 1. Define Memory: 1 Page = 64KB + (memory 1) + + (export "memory" (memory 0)) + + (func $test_offset_overflow (result i32) + ;; 1. Push the base address onto the stack. + ;; We use '0', which is the safest, most valid address possible. + i32.const 0 + + ;; 2. Attempt to load using a static offset. + ;; syntax: i32.load offset=N align=N + ;; We set the offset to 65536 (the size of the memory). + ;; The effective address becomes 0 + 65536 = 65536. + i32.load offset=65536 + + ;; Clean up the stack. + ;; The load pushed a value, but we don't care what it is. + drop + + ;; Return 1 to signal "I survived the memory access" + i32.const 1 + ) + + (export "finish" (func $test_offset_overflow)) +) diff --git a/src/test/app/wasm_fixtures/wat/memory_pointer_at_limit.wat b/src/test/app/wasm_fixtures/wat/memory_pointer_at_limit.wat new file mode 100644 index 0000000000..c72cd43739 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/memory_pointer_at_limit.wat @@ -0,0 +1,22 @@ +(module + ;; Define 1 page of memory (64KB = 65,536 bytes) + (memory 1) + + (func $read_edge (result i32) + ;; Push the index of the LAST valid byte + i32.const 65535 + + ;; Load 1 byte (unsigned) + i32.load8_u + + ;; Clean up the stack. + ;; The load pushed a value, but we don't care what it is. + drop + + ;; Return 1 to signal "I survived the memory access" + i32.const 1 + ) + + ;; Export as "finish" as requested + (export "finish" (func $read_edge)) +) diff --git a/src/test/app/wasm_fixtures/wat/memory_pointer_over_limit.wat b/src/test/app/wasm_fixtures/wat/memory_pointer_over_limit.wat new file mode 100644 index 0000000000..12f6ea01a2 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/memory_pointer_over_limit.wat @@ -0,0 +1,23 @@ +(module + ;; Define 1 page of memory (64KB = 65,536 bytes) + (memory 1) + + (func $read_overflow (result i32) + ;; Push the index of the FIRST invalid byte + ;; Memory is 0..65535, so 65536 is out of bounds. + i32.const 65536 + + ;; Load 1 byte (unsigned) + i32.load8_u + + ;; Clean up the stack. + ;; The load pushed a value, but we don't care what it is. + drop + + ;; Return 1 to signal "I survived the memory access" + i32.const 1 + ) + + ;; Export as "finish" as requested + (export "finish" (func $read_overflow)) + ) diff --git a/src/test/app/wasm_fixtures/wat/proposal_bulk_memory.wat b/src/test/app/wasm_fixtures/wat/proposal_bulk_memory.wat new file mode 100644 index 0000000000..1010c60a61 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/proposal_bulk_memory.wat @@ -0,0 +1,25 @@ +(module + ;; Define 1 page of memory + (memory 1) + (export "memory" (memory 0)) + + (func $test_bulk_ops (result i32) + ;; Setup: Write value 42 at index 0 so we have something to copy + (i32.store8 (i32.const 0) (i32.const 42)) + + ;; Test memory.copy (Opcode 0xFC 0x0A) + ;; Copy 1 byte from offset 0 to offset 100 + (memory.copy + (i32.const 100) ;; Destination Offset + (i32.const 0) ;; Source Offset + (i32.const 1) ;; Size (bytes) + ) + + ;; Verify: Read byte at offset 100. Should be 42. + (i32.load8_u (i32.const 100)) + (i32.const 42) + i32.eq + ) + + (export "finish" (func $test_bulk_ops)) +) diff --git a/src/test/app/wasm_fixtures/wat/proposal_extended_const.wat b/src/test/app/wasm_fixtures/wat/proposal_extended_const.wat new file mode 100644 index 0000000000..1b24f8ff45 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/proposal_extended_const.wat @@ -0,0 +1,15 @@ +(module + ;; 1. Define a global using an EXTENDED constant expression. + ;; MVP only allows (i32.const X). + ;; This proposal allows (i32.add (i32.const X) (i32.const Y)). + (global $g i32 (i32.add (i32.const 10) (i32.const 32))) + + (func $finish (result i32) + ;; 2. verify the global equals 42 + global.get $g + i32.const 42 + i32.eq + ) + + (export "finish" (func $finish)) +) diff --git a/src/test/app/wasm_fixtures/wat/proposal_float_to_int.wat b/src/test/app/wasm_fixtures/wat/proposal_float_to_int.wat new file mode 100644 index 0000000000..3d52bfa399 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/proposal_float_to_int.wat @@ -0,0 +1,18 @@ +(module + (func $test_saturation (result i32) + ;; 1. Push a float that is too big for a 32-bit integer + ;; 1e10 (10 billion) > 2.14 billion (Max i32) + f32.const 1.0e10 + + ;; 2. Attempt saturating conversion (Opcode 0xFC 0x00) + ;; If supported: Clamps to MAX_I32. + ;; If disabled: Validation error (unknown instruction). + i32.trunc_sat_f32_s + + ;; 3. Check if result is MAX_I32 (2147483647) + i32.const 2147483647 + i32.eq + ) + + (export "finish" (func $test_saturation)) +) diff --git a/src/test/app/wasm_fixtures/wat/proposal_gc_struct_new.wat b/src/test/app/wasm_fixtures/wat/proposal_gc_struct_new.wat new file mode 100644 index 0000000000..b9a1e5c519 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/proposal_gc_struct_new.wat @@ -0,0 +1,12 @@ +;; generated by wasm-tools print gc_test.wasm that has the following hex +;; 0061736d01000000010b026000017f5f027f017f0103020100070a010666696e69736800000a0a010800fb01011a41010b +(module + (type (;0;) (func (result i32))) + (type (;1;) (struct (field (mut i32)) (field (mut i32)))) + (export "finish" (func 0)) + (func (;0;) (type 0) (result i32) + struct.new_default 1 + drop + i32.const 1 + ) +) diff --git a/src/test/app/wasm_fixtures/wat/proposal_multi_value.wat b/src/test/app/wasm_fixtures/wat/proposal_multi_value.wat new file mode 100644 index 0000000000..30dda4ce12 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/proposal_multi_value.wat @@ -0,0 +1,22 @@ +(module + ;; 1. Function returning TWO values (Multi-Value feature) + (func $get_numbers (result i32 i32) + i32.const 10 + i32.const 20 + ) + + (func $finish (result i32) + ;; Call pushes [10, 20] onto the stack + call $get_numbers + + ;; 2. Block taking TWO parameters (Multi-Value feature) + ;; It consumes the [10, 20] from the stack. + block (param i32 i32) (result i32) + i32.add ;; 10 + 20 = 30 + i32.const 30 ;; Expected result + i32.eq ;; Compare: returns 1 if equal + end + ) + + (export "finish" (func $finish)) +) diff --git a/src/test/app/wasm_fixtures/wat/proposal_mutable_global.wat b/src/test/app/wasm_fixtures/wat/proposal_mutable_global.wat new file mode 100644 index 0000000000..2b1b5ff648 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/proposal_mutable_global.wat @@ -0,0 +1,25 @@ +(module + ;; Define a mutable global initialized to 0 + (global $counter (mut i32) (i32.const 0)) + + ;; EXPORTING a mutable global is the key feature of this proposal. + ;; In strict MVP, exported globals had to be immutable (const). + (export "counter" (global $counter)) + + (func $finish (result i32) + ;; 1. Get current value + global.get $counter + + ;; 2. Add 1 + i32.const 1 + i32.add + + ;; 3. Set new value (Mutation) + global.set $counter + + ;; 4. Return 1 for success + i32.const 1 + ) + + (export "finish" (func $finish)) +) diff --git a/src/test/app/wasm_fixtures/wat/proposal_ref_types.wat b/src/test/app/wasm_fixtures/wat/proposal_ref_types.wat new file mode 100644 index 0000000000..c339b9176f --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/proposal_ref_types.wat @@ -0,0 +1,18 @@ +(module + ;; Import a table from the host that holds externrefs + (import "env" "table" (table 1 externref)) + + (func $test_ref_types (result i32) + ;; Store a null externref into the table at index 0 + ;; If reference_types is disabled, 'externref' and 'ref.null' will fail parsing. + (table.set + (i32.const 0) ;; Index + (ref.null extern) ;; Value (Null External Reference) + ) + + ;; Return 1 (Success) + i32.const 1 + ) + + (export "finish" (func $test_ref_types)) +) diff --git a/src/test/app/wasm_fixtures/wat/proposal_sign_ext.wat b/src/test/app/wasm_fixtures/wat/proposal_sign_ext.wat new file mode 100644 index 0000000000..ab9061fbb1 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/proposal_sign_ext.wat @@ -0,0 +1,18 @@ +(module + (func $test_sign_ext (result i32) + ;; Push 255 (0x000000FF) onto the stack + i32.const 255 + + ;; Sign-extend from 8-bit to 32-bit + ;; If 255 is treated as an i8, it is -1. + ;; Result should be -1 (0xFFFFFFFF). + ;; Without this proposal, this opcode (0xC0) causes a validation error. + i32.extend8_s + + ;; Check if result is -1 + i32.const -1 + i32.eq + ) + + (export "finish" (func $test_sign_ext)) +) diff --git a/src/test/app/wasm_fixtures/wat/proposal_stringref.wat b/src/test/app/wasm_fixtures/wat/proposal_stringref.wat new file mode 100644 index 0000000000..c9f8030faf --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/proposal_stringref.wat @@ -0,0 +1 @@ +;;hard to generate diff --git a/src/test/app/wasm_fixtures/wat/proposal_tail_call.wat b/src/test/app/wasm_fixtures/wat/proposal_tail_call.wat new file mode 100644 index 0000000000..f2c883931a --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/proposal_tail_call.wat @@ -0,0 +1,15 @@ +(module + ;; Define a simple function we can tail-call + (func $target (result i32) + i32.const 1 + ) + + (func $finish (result i32) + ;; Try to use the 'return_call' instruction (Opcode 0x12) + ;; If Tail Call proposal is disabled, this fails to Compile/Validate. + ;; If enabled, it jumps to $target, which returns 1. + return_call $target + ) + + (export "finish" (func $finish)) +) diff --git a/src/test/app/wasm_fixtures/wat/table_0_elements.wat b/src/test/app/wasm_fixtures/wat/table_0_elements.wat new file mode 100644 index 0000000000..7f2d1abc64 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/table_0_elements.wat @@ -0,0 +1,10 @@ +(module + ;; Define a table with exactly 0 entries + (table 0 funcref) + + ;; Standard finish function + (func $finish (result i32) + i32.const 1 + ) + (export "finish" (func $finish)) +) diff --git a/src/test/app/wasm_fixtures/wat/table_2_tables.wat b/src/test/app/wasm_fixtures/wat/table_2_tables.wat new file mode 100644 index 0000000000..fd007f410a --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/table_2_tables.wat @@ -0,0 +1,24 @@ +(module + ;; Define a dummy function to put in the tables + (func $dummy) + + ;; TABLE 0: The default table (allowed in MVP) + ;; Size: 1 initial, 1 max + (table $t0 1 1 funcref) + + ;; Initialize Table 0 at index 0 + (elem (table $t0) (i32.const 0) $dummy) + + ;; TABLE 1: The second table (Requires Reference Types proposal) + ;; If strict MVP is enforced, the parser should error here. + (table $t1 1 1 funcref) + + ;; Initialize Table 1 at index 0 + (elem (table $t1) (i32.const 0) $dummy) + + (func $finish (result i32) + ;; If we successfully loaded a module with 2 tables, return 1. + i32.const 1 + ) + (export "finish" (func $finish)) +) diff --git a/src/test/app/wasm_fixtures/wat/table_64_elements.wat b/src/test/app/wasm_fixtures/wat/table_64_elements.wat new file mode 100644 index 0000000000..3ff990b228 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/table_64_elements.wat @@ -0,0 +1,25 @@ +(module + ;; Define a table with exactly 64 entries + (table 64 funcref) + + ;; A dummy function to reference + (func $dummy) + + ;; Initialize the table at offset 0 with 64 references to $dummy + (elem (i32.const 0) + $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 8 + $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 16 + $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 24 + $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 32 + $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 40 + $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 48 + $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 56 + $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 64 + ) + + ;; Standard finish function + (func $finish (result i32) + i32.const 1 + ) + (export "finish" (func $finish)) +) diff --git a/src/test/app/wasm_fixtures/wat/table_65_elements.wat b/src/test/app/wasm_fixtures/wat/table_65_elements.wat new file mode 100644 index 0000000000..db3efa0a18 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/table_65_elements.wat @@ -0,0 +1,25 @@ +(module + ;; Define a table with exactly 65 entries + (table 65 funcref) + + ;; A dummy function to reference + (func $dummy) + + ;; Initialize the table at offset 0 with 65 references to $dummy + (elem (i32.const 0) + $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 8 + $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 16 + $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 24 + $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 32 + $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 40 + $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 48 + $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 56 + $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 64 + $dummy ;; 65 (The one that breaks the camel's back) + ) + + (func $finish (result i32) + i32.const 1 + ) + (export "finish" (func $finish)) +) diff --git a/src/test/app/wasm_fixtures/wat/table_uint_max.wat b/src/test/app/wasm_fixtures/wat/table_uint_max.wat new file mode 100644 index 0000000000..31c15b8be2 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/table_uint_max.wat @@ -0,0 +1,15 @@ +(module + ;; Definition: (table ) + ;; We use 0xFFFFFFFF (4,294,967,295), which is the unsigned equivalent of -1. + ;; This tests if the runtime handles the maximum possible u32 value + ;; without integer overflows or attempting a massive allocation. + ;; + ;; Note that using -1 as the table size cannot be parsed by wasm-tools or wat2wasm + (table 0xFFFFFFFF funcref) + + (func $finish (result i32) + ;; If the module loads despite the massive table, return 1. + i32.const 1 + ) + (export "finish" (func $finish)) +) diff --git a/src/test/app/wasm_fixtures/wat/trap_divide_by_0.wat b/src/test/app/wasm_fixtures/wat/trap_divide_by_0.wat new file mode 100644 index 0000000000..8fda7bdae0 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/trap_divide_by_0.wat @@ -0,0 +1,15 @@ +(module + (func $finish (export "finish") (result i32) + ;; Setup for Requirement 2: Divide an i32 by 0 + i32.const 42 ;; Push numerator + i32.const 0 ;; Push denominator (0) + i32.div_s ;; Perform signed division (42 / 0) + + ;; --- NOTE: Execution usually traps (crashes) at the line above --- + + ;; Logic to satisfy Requirement 1: Return i32 = 1 + ;; If execution continued, we would drop the division result and return 1 + drop ;; Clear the stack + i32.const 1 ;; Push the return value + ) +) diff --git a/src/test/app/wasm_fixtures/wat/trap_func_signature_mismatch.wat b/src/test/app/wasm_fixtures/wat/trap_func_signature_mismatch.wat new file mode 100644 index 0000000000..a712d1ac8d --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/trap_func_signature_mismatch.wat @@ -0,0 +1,33 @@ +(module + ;; Define a table with 1 slot + (table 1 funcref) + + ;; Define Type A: Takes nothing, returns nothing + (type $type_void (func)) + + ;; Define Type B: Takes nothing, returns i32 + (type $type_i32 (func (result i32))) + + ;; Define a function of Type A + (func $void_func (type $type_void) + nop + ) + + ;; Put Type A function into Table[0] + (elem (i32.const 0) $void_func) + + (func $finish (result i32) + ;; Attempt to call Index 0, but CLAIM we expect Type B (result i32). + ;; The function at Index 0 matches Type A. + ;; TRAP: "indirect call type mismatch" + + ;; 1. Push the table index (0) onto the stack + i32.const 0 + + ;; 2. Call indirect using Type B signature. + ;; This pops the index (0) from the stack. + call_indirect (type $type_i32) + ) + + (export "finish" (func $finish)) +) diff --git a/src/test/app/wasm_fixtures/wat/trap_int_overflow.wat b/src/test/app/wasm_fixtures/wat/trap_int_overflow.wat new file mode 100644 index 0000000000..810236df79 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/trap_int_overflow.wat @@ -0,0 +1,18 @@ +(module + (func $test_int_overflow (result i32) + ;; 1. Push INT_MIN (-2147483648) + ;; In Hex: 0x80000000 + i32.const -2147483648 + + ;; 2. Push -1 + i32.const -1 + + ;; 3. Signed Division + ;; This specific case is the ONLY integer arithmetic operation + ;; (besides divide by zero) that traps in the spec. + ;; Result would be +2147483648, which is too big for signed i32. + i32.div_s + ) + + (export "finish" (func $test_int_overflow)) +) diff --git a/src/test/app/wasm_fixtures/wat/trap_null_call.wat b/src/test/app/wasm_fixtures/wat/trap_null_call.wat new file mode 100644 index 0000000000..f806d922f7 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/trap_null_call.wat @@ -0,0 +1,22 @@ +(module + ;; Table size is 1, so Index 0 is VALID bounds. + ;; However, we do NOT initialize it, so it contains 'ref.null'. + (table 1 funcref) + + (type $t (func (result i32))) + + (func $finish (result i32) + ;; Call Index 0. + ;; Bounds check passes (0 < 1). + ;; Null check fails. + ;; TRAP: "uninitialized element" or "undefined element" + + ;; 1. Push the index (0) onto the stack first + i32.const 0 + + ;; 2. Perform the call. This pops the index. + call_indirect (type $t) + ) + + (export "finish" (func $finish)) +) diff --git a/src/test/app/wasm_fixtures/wat/trap_unreachable.wat b/src/test/app/wasm_fixtures/wat/trap_unreachable.wat new file mode 100644 index 0000000000..4bc15569fc --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/trap_unreachable.wat @@ -0,0 +1,12 @@ +(module + (func $finish (result i32) + ;; This instruction explicitly causes a trap. + ;; It consumes no fuel (beyond the instruction itself) and stops execution. + unreachable + + ;; This code is dead and never reached + i32.const 1 + ) + + (export "finish" (func $finish)) +) diff --git a/src/test/app/wasm_fixtures/wat/wasi_get_time.wat b/src/test/app/wasm_fixtures/wat/wasi_get_time.wat new file mode 100644 index 0000000000..049ecf0be1 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/wasi_get_time.wat @@ -0,0 +1,38 @@ +(module + ;; Import clock_time_get from WASI + ;; Signature: (param clock_id precision return_ptr) (result errno) + (import "wasi_snapshot_preview1" "clock_time_get" + (func $clock_time_get (param i32 i64 i32) (result i32)) + ) + + (memory 1) + (export "memory" (memory 0)) + + (func $finish (result i32) + ;; We will store the timestamp (a 64-bit integer) at address 0. + ;; No setup required in memory beforehand! + + ;; Call the function + (call $clock_time_get + (i32.const 0) ;; clock_id: 0 = Realtime (Wallclock) + (i64.const 1000) ;; precision: 1000ns (hint to OS) + (i32.const 0) ;; result_ptr: Write the time to address 0 + ) + + ;; The function returns an 'errno' (error code). + ;; 0 = Success. Anything else = Error. + + ;; Check if errno (top of stack) is 0 + i32.eqz + if (result i32) + ;; Success! The time is now stored in heap[0..8]. + ;; We return 1 as requested. + i32.const 1 + else + ;; Failed (maybe WASI is disabled or clock is missing) + i32.const -1 + end + ) + + (export "finish" (func $finish)) +) diff --git a/src/test/app/wasm_fixtures/wat/wasi_print.wat b/src/test/app/wasm_fixtures/wat/wasi_print.wat new file mode 100644 index 0000000000..18e8a088f4 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/wasi_print.wat @@ -0,0 +1,59 @@ +(module + ;; Import WASI fd_write + ;; Signature: (fd, iovs_ptr, iovs_len, nwritten_ptr) -> errno + (import "wasi_snapshot_preview1" "fd_write" + (func $fd_write (param i32 i32 i32 i32) (result i32)) + ) + + (memory 1) + (export "memory" (memory 0)) + + ;; --- DATA SEGMENTS --- + + ;; 1. The String Data "Hello\n" placed at offset 16 + ;; We assume offset 0-16 is reserved for the IOVec struct + (data (i32.const 16) "Hello\n") + + ;; 2. The IO Vector (struct iovec) placed at offset 0 + ;; Structure: { buf_ptr: u32, buf_len: u32 } + + ;; Field 1: buf_ptr = 16 (Location of "Hello\n") + ;; Encoded in little-endian: 10 00 00 00 + (data (i32.const 0) "\10\00\00\00") + + ;; Field 2: buf_len = 6 (Length of "Hello\n") + ;; Encoded in little-endian: 06 00 00 00 + (data (i32.const 4) "\06\00\00\00") + + (func $finish (result i32) + (local $nwritten_ptr i32) + + ;; We will ask WASI to write the "number of bytes written" to address 24 + ;; (safely after our string data) + i32.const 24 + local.set $nwritten_ptr + + ;; Call fd_write + (call $fd_write + (i32.const 1) ;; fd: 1 = STDOUT + (i32.const 0) ;; iovs_ptr: Address 0 (where we defined the struct) + (i32.const 1) ;; iovs_len: We are passing 1 vector + (local.get $nwritten_ptr) ;; nwritten_ptr: Address 24 + ) + + ;; The function returns an 'errno' (i32). + ;; 0 means Success. + + ;; Check if errno == 0 + i32.eqz + if (result i32) + ;; Success: Return 1 + i32.const 1 + else + ;; Failure: Return -1 + i32.const -1 + end + ) + + (export "finish" (func $finish)) +) From f57f67a8ae3eda930eeed101e2ecab85c00f606b Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 7 Jan 2026 11:51:58 -0500 Subject: [PATCH 048/137] infinite loop test (#6064) --- src/test/app/Wasm_test.cpp | 14 ++++++++++++++ src/test/app/wasm_fixtures/fixtures.cpp | 16 ++++++++++++++++ src/test/app/wasm_fixtures/fixtures.h | 2 ++ src/test/app/wasm_fixtures/infiniteLoop.c | 8 ++++++++ 4 files changed, 40 insertions(+) create mode 100644 src/test/app/wasm_fixtures/infiniteLoop.c diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index e6e3901958..59961fded8 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -467,6 +467,20 @@ struct Wasm_test : public beast::unit_test::suite BEAST_EXPECT(countSubstr(s, "exception: failure") > 0); } + { // infinite loop + auto const wasmStr = boost::algorithm::unhex(infiniteLoopWasmHex); + Bytes wasm(wasmStr.begin(), wasmStr.end()); + std::string const funcName("loop"); + TestHostFunctions hfs(env, 0); + + // infinite loop should be caught and fail + auto const re = runEscrowWasm(wasm, hfs, funcName, {}, 1'000'000); + if (BEAST_EXPECT(!re.has_value())) + { + BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); + } + } + { // expected import not provided auto wasmStr = boost::algorithm::unhex(ledgerSqnWasmHex); diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 6a6ae2e686..20b98f8647 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -1208,3 +1208,19 @@ extern std::string const wasiPrintHex = "656d6f727902000666696e69736800010a1d011b01017f4118210041014100410120001000" "45047f410105417f0b0b0b1e030041100b0648656c6c6f0a0041000b04100000000041040b" "0406000000"; + +extern std::string const infiniteLoopWasmHex = + "0061736d010000000108026000006000017f030302000105030100020638097f004180080b" + "7f004180080b7f004180080b7f00418088040b7f004180080b7f00418088040b7f00418080" + "080b7f0041000b7f0041010b07a8010c066d656d6f72790200115f5f7761736d5f63616c6c" + "5f63746f72730000046c6f6f7000010c5f5f64736f5f68616e646c6503000a5f5f64617461" + "5f656e6403010b5f5f737461636b5f6c6f7703020c5f5f737461636b5f6869676803030d5f" + "5f676c6f62616c5f6261736503040b5f5f686561705f6261736503050a5f5f686561705f65" + "6e6403060d5f5f6d656d6f72795f6261736503070c5f5f7461626c655f6261736503080a27" + "0202000b220041fc87044100360200034041fc870441fc870428020041016a3602000c000b" + "000b007f0970726f647563657273010c70726f6365737365642d62790105636c616e675f31" + "392e312e352d776173692d73646b202868747470733a2f2f6769746875622e636f6d2f6c6c" + "766d2f6c6c766d2d70726f6a65637420616234623561326462353832393538616631656533" + "303861373930636664623432626432343732302900490f7461726765745f66656174757265" + "73042b0f6d757461626c652d676c6f62616c732b087369676e2d6578742b0f726566657265" + "6e63652d74797065732b0a6d756c746976616c7565"; diff --git a/src/test/app/wasm_fixtures/fixtures.h b/src/test/app/wasm_fixtures/fixtures.h index cb4f6e69d6..431ee612e7 100644 --- a/src/test/app/wasm_fixtures/fixtures.h +++ b/src/test/app/wasm_fixtures/fixtures.h @@ -64,3 +64,5 @@ extern std::string const trapFuncSigMismatchHex; extern std::string const wasiGetTimeHex; extern std::string const wasiPrintHex; + +extern std::string const infiniteLoopWasmHex; diff --git a/src/test/app/wasm_fixtures/infiniteLoop.c b/src/test/app/wasm_fixtures/infiniteLoop.c new file mode 100644 index 0000000000..037a843cac --- /dev/null +++ b/src/test/app/wasm_fixtures/infiniteLoop.c @@ -0,0 +1,8 @@ +int +loop() +{ + int volatile x = 0; + while (1) + x++; + return x; +} From 2c30e4119105e0e15218e27a408cbf243b3ab64f Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 7 Jan 2026 16:50:29 -0500 Subject: [PATCH 049/137] use the develop hashes --- .github/workflows/reusable-build-test-config.yml | 2 +- .github/workflows/upload-conan-deps.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/reusable-build-test-config.yml b/.github/workflows/reusable-build-test-config.yml index dff0a1c9d5..575984162e 100644 --- a/.github/workflows/reusable-build-test-config.yml +++ b/.github/workflows/reusable-build-test-config.yml @@ -100,7 +100,7 @@ jobs: uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: Prepare runner - uses: XRPLF/actions/.github/actions/prepare-runner@ff9f8f649df5855ffe1a1ae715df43e51807f2e0 + uses: XRPLF/actions/prepare-runner@2ece4ec6ab7de266859a6f053571425b2bd684b6 with: disable_ccache: ${{ !inputs.ccache_enabled }} diff --git a/.github/workflows/upload-conan-deps.yml b/.github/workflows/upload-conan-deps.yml index 3f5e8a324e..8a9993d37a 100644 --- a/.github/workflows/upload-conan-deps.yml +++ b/.github/workflows/upload-conan-deps.yml @@ -70,7 +70,7 @@ jobs: uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: Prepare runner - uses: XRPLF/actions/.github/actions/prepare-runner@ff9f8f649df5855ffe1a1ae715df43e51807f2e0 + uses: XRPLF/actions/prepare-runner@2ece4ec6ab7de266859a6f053571425b2bd684b6 with: disable_ccache: true From d5c53dcfd2cd4e26d14604ebff8d67d9e16d3211 Mon Sep 17 00:00:00 2001 From: pwang200 <354723+pwang200@users.noreply.github.com> Date: Thu, 8 Jan 2026 16:14:49 -0500 Subject: [PATCH 050/137] fix Uninitialized import entries lead to undefined behavior During WASM Instantiation --- src/xrpld/app/wasm/detail/WasmiVM.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/xrpld/app/wasm/detail/WasmiVM.cpp b/src/xrpld/app/wasm/detail/WasmiVM.cpp index 82c502f63f..40ec5f81b6 100644 --- a/src/xrpld/app/wasm/detail/WasmiVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmiVM.cpp @@ -415,6 +415,7 @@ ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) "/" + std::to_string(importTypes.vec_.size), nullptr, j_); + throw std::runtime_error("Missing imports"); } return wimports; From 9ed60b45f8547078aec8a339a209b84d4ae447bb Mon Sep 17 00:00:00 2001 From: pwang200 <354723+pwang200@users.noreply.github.com> Date: Thu, 8 Jan 2026 16:15:36 -0500 Subject: [PATCH 051/137] section corruption unit tests --- src/test/app/Wasm_test.cpp | 24 +++++ src/test/app/wasm_fixtures/fixtures.cpp | 116 ++++++++++++++++++++++++ src/test/app/wasm_fixtures/fixtures.h | 11 +++ 3 files changed, 151 insertions(+) diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 59961fded8..367afbafd0 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -828,6 +828,28 @@ struct Wasm_test : public beast::unit_test::suite BEAST_EXPECT(runFinishFunction(wasiPrintHex).has_value() == false); } + void + testWasmSectionCorruption() + { + testcase("Wasm Section Corruption tests"); + BEAST_EXPECT(runFinishFunction(badMagicNumberHex).has_value() == false); + BEAST_EXPECT( + runFinishFunction(badVersionNumberHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(lyingHeaderHex).has_value() == false); + BEAST_EXPECT( + runFinishFunction(neverEndingNumberHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(vectorLieHex).has_value() == false); + BEAST_EXPECT( + runFinishFunction(sectionOrderingHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(ghostPayloadHex).has_value() == false); + BEAST_EXPECT( + runFinishFunction(junkAfterSectionHex).has_value() == false); + BEAST_EXPECT( + runFinishFunction(invalidSectionIdHex).has_value() == false); + BEAST_EXPECT( + runFinishFunction(localVariableBombHex).has_value() == false); + } + void run() override { @@ -854,6 +876,8 @@ struct Wasm_test : public beast::unit_test::suite testWasmProposal(); testWasmTrap(); testWasmWasi(); + testWasmSectionCorruption(); + // perfTest(); } }; diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 20b98f8647..aa30cf08e7 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -1209,6 +1209,122 @@ extern std::string const wasiPrintHex = "45047f410105417f0b0b0b1e030041100b0648656c6c6f0a0041000b04100000000041040b" "0406000000"; +// The following several wasm hex strings are for testing wasm section +// corruption cases. They are illegal hence do not have corresponding +// rust or wat sources. +// Wasm code magic number is "0061736d", and the only valid version is 1. + +extern std::string const badMagicNumberHex = "1061736d01000000"; +extern std::string const badVersionNumberHex = "0061736d02000000"; + +// Corruption Test: lyingHeader +// Scenario: A section declares it is 2GB long, but the file ends immediately. +// Attack: Buffer pre-allocation DoS (OOM). +// # Magic (00 61 73 6d) + Version (01 00 00 00) +// data = b'\x00\x61\x73\x6d\x01\x00\x00\x00' +// # Type Section (ID 1) +// # Size: LEB128 encoded 2GB (0x80 0x80 0x80 0x80 0x08) +// data += b'\x01\x80\x80\x80\x80\x08' +extern std::string const lyingHeaderHex = "0061736d01000000018080808008"; + +// Corruption Test: neverEndingNumber +// Scenario: An LEB128 integer that never has a stop bit (byte < 0x80). +// Attack: Infinite loop in parser or read out of bounds. +// data = b'\x00\x61\x73\x6d\x01\x00\x00\x00' +// # Type Section (ID 1), Size 5 +// data += b'\x01\x05' +// # Vector count: Infinite stream of 0x80 (100 bytes) +// data += b'\x80' * 100 +extern std::string const neverEndingNumberHex = + "0061736d010000000105808080808080808080808080808080808080808080808080808080" + "80808080808080808080808080808080808080808080808080808080808080808080808080" + "808080808080808080808080808080808080808080808080808080808080808080808080"; + +// Corruption Test: vectorLie +// Scenario: A vector declares it has 4 billion items, but provides none. +// Attack: Vector pre-allocation DoS (OOM). +// data = b'\x00\x61\x73\x6d\x01\x00\x00\x00' +// # Type Section (ID 1) +// # Size 5 (just enough for the count bytes) +// data += b'\x01\x05' +// # Vector Count: 0xFF 0xFF 0xFF 0xFF 0x0F (4,294,967,295 items) +// data += b'\xff\xff\xff\xff\x0f' +// # No actual items follow... +extern std::string const vectorLieHex = "0061736d010000000105ffffffff0f"; + +// Corruption Test: sectionOrdering +// Scenario: Sections appear out of order +// (Code section before Function section). +// Attack: Parser state confusion / potential null pointer deref. +// data = b'\x00\x61\x73\x6d\x01\x00\x00\x00' +// # Code Section (ID 10) - usually last +// # Size 2, Count 0 +// data += b'\x0a\x02\x00\x0b' +// # Function Section (ID 3) - usually 3rd +// data += b'\x03\x02\x00\x00' +extern std::string const sectionOrderingHex = + "0061736d010000000a02000b03020000"; + +// Corruption Test: ghostPayload +// Scenario: Valid headers, but file is truncated in the middle of a payload. +// Attack: Read out of bounds panic. +// data = b'\x00\x61\x73\x6d\x01\x00\x00\x00' +// # Type Section (ID 1), Size 10 +// data += b'\x01\x0a' +// # Content: Count 1 +// data += b'\x01' +// # Start of a type definition (0x60 = func) +// data += b'\x60' +// # File ends abruptly here (missing params/results) +extern std::string const ghostPayloadHex = "0061736d01000000010a0160"; + +// Corruption Test: junkAfterSection +// Scenario: Section declares size X, but logical content finishes at X-5. +// Attack: Validation bypass if parser stops early, +// or panic if strict check missing. +// data = b'\x00\x61\x73\x6d\x01\x00\x00\x00' +// # Type Section (ID 1), Size 10 bytes +// data += b'\x01\x0a' +// # Real content: Count 1, (func -> void) = 4 bytes +// # \x01 (count) \x60 (func) \x00 (0 params) \x00 (0 results) +// data += b'\x01\x60\x00\x00' +// # Remaining 6 bytes are junk padding within the section size +// data += b'\x00' * 6 +extern std::string const junkAfterSectionHex = + "0061736d01000000010a01600000000000000000"; + +// Corruption Test: invalidSectionId +// Scenario: A section ID that doesn't exist (0xFF). +// Attack: Default case handling / unhandled enum variant. +// data = b'\x00\x61\x73\x6d\x01\x00\x00\x00' +// # Section ID 0xFF, Size 1 +// data += b'\xff\x01\x00' +extern std::string const invalidSectionIdHex = "0061736d01000000ff0100"; + +// Corruption Test: localVariableBomb +// Scenario: A function declares 4 billion local variables. +// Attack: Stack Overflow / OOM during function init (memset). +// data = b'\x00\x61\x73\x6d\x01\x00\x00\x00' +// # 1. Type Section: (func) -> () +// data += b'\x01\x04\x01\x60\x00\x00' +// # 3. Function Section: 1 function of type 0 +// data += b'\x03\x02\x01\x00' +// # 10. Code Section +// # ID 10, Size 15 (estimated), Count 1 +// data += b'\x0a\x0f\x01' +// # Function Body Size: 13 bytes +// data += b'\x0d' +// # Local Declarations Count: 1 entry +// data += b'\x01' +// # The Bomb: 4,294,967,295 locals of type i32 +// # Count: 0xFF 0xFF 0xFF 0xFF 0x0F +// # Type: 0x7F (i32) +// data += b'\xff\xff\xff\xff\x0f\x7f' +// # Instruction: end (0x0b) +// data += b'\x0b' +extern std::string const localVariableBombHex = + "0061736d01000000010401600000030201000a0f010d01ffffffff0f7f0b"; + extern std::string const infiniteLoopWasmHex = "0061736d010000000108026000006000017f030302000105030100020638097f004180080b" "7f004180080b7f004180080b7f00418088040b7f004180080b7f00418088040b7f00418080" diff --git a/src/test/app/wasm_fixtures/fixtures.h b/src/test/app/wasm_fixtures/fixtures.h index 431ee612e7..ef1ecd9de5 100644 --- a/src/test/app/wasm_fixtures/fixtures.h +++ b/src/test/app/wasm_fixtures/fixtures.h @@ -65,4 +65,15 @@ extern std::string const trapFuncSigMismatchHex; extern std::string const wasiGetTimeHex; extern std::string const wasiPrintHex; +extern std::string const badMagicNumberHex; +extern std::string const badVersionNumberHex; +extern std::string const lyingHeaderHex; +extern std::string const neverEndingNumberHex; +extern std::string const vectorLieHex; +extern std::string const sectionOrderingHex; +extern std::string const ghostPayloadHex; +extern std::string const junkAfterSectionHex; +extern std::string const invalidSectionIdHex; +extern std::string const localVariableBombHex; + extern std::string const infiniteLoopWasmHex; From 91f3d51f3d296ffa41ae70ea23578e3adfefaf85 Mon Sep 17 00:00:00 2001 From: pwang200 <354723+pwang200@users.noreply.github.com> Date: Fri, 9 Jan 2026 11:38:54 -0500 Subject: [PATCH 052/137] fix start function loop --- src/test/app/Wasm_test.cpp | 33 +++++++++++++++++++ src/test/app/wasm_fixtures/fixtures.cpp | 4 +++ src/test/app/wasm_fixtures/fixtures.h | 1 + src/test/app/wasm_fixtures/wat/start_loop.wat | 22 +++++++++++++ src/xrpld/app/wasm/WasmiVM.h | 4 +++ src/xrpld/app/wasm/detail/WasmiVM.cpp | 33 +++++++++++++++---- 6 files changed, 91 insertions(+), 6 deletions(-) create mode 100644 src/test/app/wasm_fixtures/wat/start_loop.wat diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 367afbafd0..dba390c93e 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -850,6 +850,38 @@ struct Wasm_test : public beast::unit_test::suite runFinishFunction(localVariableBombHex).has_value() == false); } + void + testStartFunctionLoop() + { + testcase("infinite loop in start function"); + + using namespace test::jtx; + Env env(*this); + + auto wasmStr = boost::algorithm::unhex(startLoopHex); + Bytes wasm(wasmStr.begin(), wasmStr.end()); + TestLedgerDataProvider ledgerDataProvider(env); + ImportVec imports; + + auto& engine = WasmEngine::instance(); + auto checkRes = engine.check( + wasm, "finish", {}, imports, &ledgerDataProvider, env.journal); + BEAST_EXPECTS( + checkRes == tesSUCCESS, std::to_string(TERtoInt(checkRes))); + + auto re = engine.run( + wasm, + ESCROW_FUNCTION_NAME, + {}, + imports, + &ledgerDataProvider, + 1'000'000, + env.journal); + BEAST_EXPECTS( + re.error() == tecFAILED_PROCESSING, + std::to_string(TERtoInt(re.error()))); + } + void run() override { @@ -878,6 +910,7 @@ struct Wasm_test : public beast::unit_test::suite testWasmWasi(); testWasmSectionCorruption(); + testStartFunctionLoop(); // perfTest(); } }; diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index aa30cf08e7..740638ba61 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -1340,3 +1340,7 @@ extern std::string const infiniteLoopWasmHex = "303861373930636664623432626432343732302900490f7461726765745f66656174757265" "73042b0f6d757461626c652d676c6f62616c732b087369676e2d6578742b0f726566657265" "6e63652d74797065732b0a6d756c746976616c7565"; + +extern std::string const startLoopHex = + "0061736d010000000108026000006000017f03030200010712020573746172740000066669" + "6e69736800010801000a0e02070003400c000b0b040041010b"; diff --git a/src/test/app/wasm_fixtures/fixtures.h b/src/test/app/wasm_fixtures/fixtures.h index ef1ecd9de5..7da8fcb4dc 100644 --- a/src/test/app/wasm_fixtures/fixtures.h +++ b/src/test/app/wasm_fixtures/fixtures.h @@ -77,3 +77,4 @@ extern std::string const invalidSectionIdHex; extern std::string const localVariableBombHex; extern std::string const infiniteLoopWasmHex; +extern std::string const startLoopHex; diff --git a/src/test/app/wasm_fixtures/wat/start_loop.wat b/src/test/app/wasm_fixtures/wat/start_loop.wat new file mode 100644 index 0000000000..c00d173ea4 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/start_loop.wat @@ -0,0 +1,22 @@ +(module + ;; Function 1: The Infinite Loop + (func $run_forever + (loop $infinite + br $infinite + ) + ) + + ;; Function 2: Finish + (func $finish (result i32) + i32.const 1 + ) + + ;; 1. EXPORT the functions (optional, if you want to call them later) + (export "start" (func $run_forever)) + (export "finish" (func $finish)) + + ;; 2. The special start section + ;; This tells the VM: "Run function $run_forever immediately + ;; when this module is instantiated." + (start $run_forever) +) diff --git a/src/xrpld/app/wasm/WasmiVM.h b/src/xrpld/app/wasm/WasmiVM.h index 06e18ef29e..c39b577c46 100644 --- a/src/xrpld/app/wasm/WasmiVM.h +++ b/src/xrpld/app/wasm/WasmiVM.h @@ -179,6 +179,10 @@ public: FuncInfo getFunc(std::string_view funcName) const; + + wasm_functype_t* + getFuncType(std::string_view funcName) const; + wmem getMem() const; diff --git a/src/xrpld/app/wasm/detail/WasmiVM.cpp b/src/xrpld/app/wasm/detail/WasmiVM.cpp index 40ec5f81b6..016adeac5a 100644 --- a/src/xrpld/app/wasm/detail/WasmiVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmiVM.cpp @@ -249,9 +249,9 @@ ModuleWrapper::ModuleWrapper( : module_(init(s, wasmBin, j)), j_(j) { wasm_module_exports(module_.get(), &exportTypes_.vec_); + auto wimports = buildImports(s, imports); if (instantiate) { - auto wimports = buildImports(s, imports); addInstance(s, wimports); } } @@ -427,6 +427,26 @@ ModuleWrapper::getFunc(std::string_view funcName) const return instanceWrap_.getFunc(funcName, exportTypes_); } +wasm_functype_t* +ModuleWrapper::getFuncType(std::string_view funcName) const +{ + for (size_t i = 0; i < exportTypes_.vec_.size; i++) + { + auto const* exp_type(exportTypes_.vec_.data[i]); + wasm_name_t const* name = wasm_exporttype_name(exp_type); + wasm_externtype_t const* exn_type = wasm_exporttype_type(exp_type); + if (wasm_externtype_kind(exn_type) == WASM_EXTERN_FUNC && + funcName == std::string_view(name->data, name->size)) + { + return wasm_externtype_as_functype( + const_cast(exn_type)); + } + } + + throw std::runtime_error( + "can't find function <" + std::string(funcName) + ">"); +} + wmem ModuleWrapper::getMem() const { @@ -889,13 +909,14 @@ WasmiEngine::checkHlp( if (wasmCode.empty()) throw std::runtime_error("empty nodule"); - int const m = addModule(wasmCode, true, -1, imports); - if ((m < 0) || !moduleWrap_ || !moduleWrap_->instanceWrap_) - throw std::runtime_error("no instance"); // LCOV_EXCL_LINE + int const m = addModule(wasmCode, false, -1, imports); + if ((m < 0) || !moduleWrap_) + throw std::runtime_error("no module"); // LCOV_EXCL_LINE // Looking for a func and compare parameter types - auto const f = getFunc(!funcName.empty() ? funcName : "_start"); - auto const* ftp = wasm_functype_params(f.second); + auto const f = + moduleWrap_->getFuncType(!funcName.empty() ? funcName : "_start"); + auto const* ftp = wasm_functype_params(f); auto const p = convertParams(params); if (int const comp = compareParamTypes(ftp, p); comp >= 0) From 6ab15f8377019b8b29fd0a3035d766040a6ca695 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Fri, 9 Jan 2026 14:49:09 -0500 Subject: [PATCH 053/137] Add checks to allocate (#6185) --- src/test/app/Wasm_test.cpp | 77 +++++++++++++++++++++++++ src/test/app/wasm_fixtures/bad_alloc.c | 27 +++++++++ src/test/app/wasm_fixtures/fixtures.cpp | 18 ++++++ src/test/app/wasm_fixtures/fixtures.h | 2 + src/xrpld/app/wasm/detail/WasmiVM.cpp | 21 +++++-- 5 files changed, 140 insertions(+), 5 deletions(-) create mode 100644 src/test/app/wasm_fixtures/bad_alloc.c diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index dba390c93e..95986f5a76 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -882,6 +882,81 @@ struct Wasm_test : public beast::unit_test::suite std::to_string(TERtoInt(re.error()))); } + void + testBadAlloc() + { + testcase("Wasm Bad Alloc"); + + // bad_alloc.c + auto wasmStr = boost::algorithm::unhex(badAllocHex); + Bytes wasm(wasmStr.begin(), wasmStr.end()); + + using namespace test::jtx; + + Env env{*this}; + TestLedgerDataProvider hf(env); + + // ImportVec imports; + uint8_t buf1[8] = {7, 8, 9, 10, 11, 12, 13, 14}; + { // forged "allocate" return valid address + std::vector params = { + {.type = WT_U8V, + .of = {.u8v = {.d = buf1, .sz = sizeof(buf1)}}}}; + auto& engine = WasmEngine::instance(); + + auto re = engine.run( + wasm, "test", params, {}, &hf, 1'000'000, env.journal); + if (BEAST_EXPECT(re)) + { + BEAST_EXPECTS(re->result == 7, std::to_string(re->result)); + BEAST_EXPECTS(re->cost == 10, std::to_string(re->result)); + } + } + + { // return 0 whithout calling wasm + std::vector params = { + {.type = WT_U8V, .of = {.u8v = {.d = buf1, .sz = 0}}}}; + auto& engine = WasmEngine::instance(); + auto re = engine.run( + wasm, "test", params, {}, &hf, 1'000'000, env.journal); + BEAST_EXPECT(!re) && + BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); + } + + { // forged "allocate" return 8Mb (which is more than memory limit) + std::vector params = { + {.type = WT_U8V, .of = {.u8v = {.d = buf1, .sz = 1}}}}; + auto& engine = WasmEngine::instance(); + auto re = engine.run( + wasm, "test", params, {}, &hf, 1'000'000, env.journal); + BEAST_EXPECT(!re) && + BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); + } + + { // forged "allocate" return 0 + std::vector params = { + {.type = WT_U8V, .of = {.u8v = {.d = buf1, .sz = 2}}}}; + auto& engine = WasmEngine::instance(); + auto re = engine.run( + wasm, "test", params, {}, &hf, 1'000'000, env.journal); + BEAST_EXPECT(!re) && + BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); + } + + { // forged "allocate" return -1 + std::vector params = { + {.type = WT_U8V, .of = {.u8v = {.d = buf1, .sz = 3}}}}; + auto& engine = WasmEngine::instance(); + auto re = engine.run( + wasm, "test", params, {}, &hf, 1'000'000, env.journal); + + BEAST_EXPECT(!re) && + BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); + } + + env.close(); + } + void run() override { @@ -911,6 +986,8 @@ struct Wasm_test : public beast::unit_test::suite testWasmSectionCorruption(); testStartFunctionLoop(); + testBadAlloc(); + // perfTest(); } }; diff --git a/src/test/app/wasm_fixtures/bad_alloc.c b/src/test/app/wasm_fixtures/bad_alloc.c new file mode 100644 index 0000000000..9a0233e8a5 --- /dev/null +++ b/src/test/app/wasm_fixtures/bad_alloc.c @@ -0,0 +1,27 @@ +#include + +char buf[1024]; + +void* +allocate(int sz) +{ + if (!sz) + return 0; + + if (sz == 1) + return ((void*)(8 * 1024 * 1024)); + if (sz == 2) + return 0; + if (sz == 3) + return ((void*)(0xFFFFFFFF)); + + return &buf[sz]; +} + +int32_t +test(char* p, int32_t sz) +{ + if (!sz) + return 0; + return p[0]; +} diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 740638ba61..97143f1f61 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -1344,3 +1344,21 @@ extern std::string const infiniteLoopWasmHex = extern std::string const startLoopHex = "0061736d010000000108026000006000017f03030200010712020573746172740000066669" "6e69736800010801000a0e02070003400c000b0b040041010b"; + +extern std::string const badAllocHex = + "0061736d01000000010f0360000060017f017f60027f7f017f030403000102050301000206" + "3e0a7f004180080b7f004180080b7f004180100b7f004180100b7f00418090040b7f004180" + "080b7f00418090040b7f00418080080b7f0041000b7f0041010b07b9010e066d656d6f7279" + "0200115f5f7761736d5f63616c6c5f63746f7273000008616c6c6f63617465000103627566" + "0300047465737400020c5f5f64736f5f68616e646c6503010a5f5f646174615f656e640302" + "0b5f5f737461636b5f6c6f7703030c5f5f737461636b5f6869676803040d5f5f676c6f6261" + "6c5f6261736503050b5f5f686561705f6261736503060a5f5f686561705f656e6403070d5f" + "5f6d656d6f72795f6261736503080c5f5f7461626c655f6261736503090a420302000b2c01" + "017f024002400240024020000e0403000301020b41808080040f0b417f0f0b20004180086a" + "21010b20010b1000200145044041000f0b20002c00000b007f0970726f647563657273010c" + "70726f6365737365642d62790105636c616e675f31392e312e352d776173692d73646b2028" + "68747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a65637420" + "61623462356132646235383239353861663165653330386137393063666462343262643234" + "3732302900490f7461726765745f6665617475726573042b0f6d757461626c652d676c6f62" + "616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c7469" + "76616c7565"; diff --git a/src/test/app/wasm_fixtures/fixtures.h b/src/test/app/wasm_fixtures/fixtures.h index 7da8fcb4dc..32f71883f8 100644 --- a/src/test/app/wasm_fixtures/fixtures.h +++ b/src/test/app/wasm_fixtures/fixtures.h @@ -78,3 +78,5 @@ extern std::string const localVariableBombHex; extern std::string const infiniteLoopWasmHex; extern std::string const startLoopHex; + +extern std::string const badAllocHex; diff --git a/src/xrpld/app/wasm/detail/WasmiVM.cpp b/src/xrpld/app/wasm/detail/WasmiVM.cpp index 016adeac5a..9d3dded78b 100644 --- a/src/xrpld/app/wasm/detail/WasmiVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmiVM.cpp @@ -951,13 +951,24 @@ WasmiEngine::getRT(int m, int i) int32_t WasmiEngine::allocate(int32_t sz) { - auto res = call<1>(W_ALLOC, static_cast(sz)); - - if (res.f || !res.r.vec_.size || (res.r.vec_.data[0].kind != WASM_I32) || - !res.r.vec_.data[0].of.i32) + if (sz <= 0) throw std::runtime_error( "can't allocate memory, " + std::to_string(sz) + " bytes"); - return res.r.vec_.data[0].of.i32; + + auto res = call<1>(W_ALLOC, static_cast(sz)); + + if (res.f || !res.r.vec_.size || (res.r.vec_.data[0].kind != WASM_I32)) + throw std::runtime_error( + "can't allocate memory, " + std::to_string(sz) + + " bytes"); // LCOV_EXCL_LINE + + int32_t const p = res.r.vec_.data[0].of.i32; + auto const mem = getMem(); + if (p <= 0 || p + sz > mem.s) + throw std::runtime_error( + "invalid memory allocation, " + std::to_string(sz) + " bytes"); + + return p; } wasm_trap_t* From d83ec96848063fc88d13b2392f18123257439698 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Mon, 12 Jan 2026 13:36:02 -0500 Subject: [PATCH 054/137] Switch to wasmi v1.0.6 (#6204) --- conan.lock | 2 +- conanfile.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/conan.lock b/conan.lock index 3215456b63..64f1b0b046 100644 --- a/conan.lock +++ b/conan.lock @@ -3,7 +3,7 @@ "requires": [ "zlib/1.3.1#b8bc2603263cf7eccbd6e17e66b0ed76%1756234269.497", "xxhash/0.8.3#681d36a0a6111fc56e5e45ea182c19cc%1756234289.683", - "wasmi/0.42.1#2a96357d4e6bf40dfe201106d849c24f%1764802092.014", + "wasmi/1.0.6#407c9db14601a8af1c7dd3b388f3e4cd%1768164779.349", "sqlite3/3.49.1#8631739a4c9b93bd3d6b753bac548a63%1756234266.869", "soci/4.0.3#a9f8d773cd33e356b5879a4b0564f287%1756234262.318", "snappy/1.1.10#968fef506ff261592ec30c574d4a7809%1756234314.246", diff --git a/conanfile.py b/conanfile.py index 797e5beee5..a786b4ddbd 100644 --- a/conanfile.py +++ b/conanfile.py @@ -35,7 +35,7 @@ class Xrpl(ConanFile): "openssl/3.5.4", "secp256k1/0.7.0", "soci/4.0.3", - "wasmi/0.42.1", + "wasmi/1.0.6", "zlib/1.3.1", ] From 1c812a6c4d07617c2bd61fa0674c1e592abe7de3 Mon Sep 17 00:00:00 2001 From: pwang200 <354723+pwang200@users.noreply.github.com> Date: Mon, 12 Jan 2026 22:04:33 -0500 Subject: [PATCH 055/137] disable Wasm features added in Wasmi 1.0, and fix unit test fuel cost due to Wasmi 1.0 fuel changes (#6173) * disable 4 more wasm features * unit tests for disabled Wasmi 1.0 features * fix unit tests failed due to fuel changes * rearrange wasm feature unit tests * fix gas costs * Update src/test/app/wasm_fixtures/wat/custom_page_sizes.wat --------- Co-authored-by: Mayukha Vadari --- src/test/app/Wasm_test.cpp | 42 +++++++++++-------- src/test/app/wasm_fixtures/fixtures.cpp | 16 +++++++ src/test/app/wasm_fixtures/fixtures.h | 4 ++ .../wasm_fixtures/wat/custom_page_sizes.wat | 13 ++++++ src/test/app/wasm_fixtures/wat/memory64.wat | 21 ++++++++++ .../app/wasm_fixtures/wat/multi_memory.wat | 16 +++++++ .../app/wasm_fixtures/wat/wide_arithmetic.wat | 22 ++++++++++ src/xrpld/app/wasm/detail/WasmiVM.cpp | 4 ++ 8 files changed, 121 insertions(+), 17 deletions(-) create mode 100644 src/test/app/wasm_fixtures/wat/custom_page_sizes.wat create mode 100644 src/test/app/wasm_fixtures/wat/memory64.wat create mode 100644 src/test/app/wasm_fixtures/wat/multi_memory.wat create mode 100644 src/test/app/wasm_fixtures/wat/wide_arithmetic.wat diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 95986f5a76..543f57cccd 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -95,7 +95,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 6'912, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 3, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 59, std::to_string(re->cost)); } } @@ -183,7 +183,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 0, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 38, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 151, std::to_string(re->cost)); } env.close(); @@ -196,7 +196,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 5, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 76, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 190, std::to_string(re->cost)); } } @@ -214,7 +214,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 55, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 696, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 1'137, std::to_string(re->cost)); } } @@ -233,7 +233,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 34'432, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 145'573, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 151'155, std::to_string(re->cost)); } } @@ -258,7 +258,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 700, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 2'701'528, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 2'886'069, std::to_string(re->cost)); } } @@ -294,7 +294,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 842, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 25'503, std::to_string(re->cost)); } env.close(); @@ -328,7 +328,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 40'102, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 64'763, std::to_string(re->cost)); } env.close(); @@ -377,7 +377,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 40'102, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 64'763, std::to_string(re->cost)); } } @@ -388,7 +388,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 40'102, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 64'763, std::to_string(re->cost)); } } @@ -410,7 +410,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == -201, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 5'012, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 28'148, std::to_string(re->cost)); } } @@ -432,7 +432,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == -201, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 5'012, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 28'148, std::to_string(re->cost)); } } @@ -570,11 +570,11 @@ struct Wasm_test : public beast::unit_test::suite std::vector const wasm(wasmStr.begin(), wasmStr.end()); TestHostFunctions hf(env, 0); - auto re = runEscrowWasm(wasm, hf, funcName, {}, 100'000); + auto re = runEscrowWasm(wasm, hf, funcName, {}, 200'000); if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 97'356, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 110'699, std::to_string(re->cost)); } env.close(); } @@ -589,7 +589,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 2'054, std::to_string(re->cost)); + BEAST_EXPECTS(re->cost == 4'259, std::to_string(re->cost)); } env.close(); } @@ -703,7 +703,7 @@ struct Wasm_test : public beast::unit_test::suite Bytes const wasm(wasmStr.begin(), wasmStr.end()); TestHostFunctions hfs(env, 0); - auto const allowance = 154'545; + auto const allowance = 189'508; auto re = runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, allowance); if (BEAST_EXPECT(re.has_value())) @@ -804,6 +804,14 @@ struct Wasm_test : public beast::unit_test::suite runFinishFunction(proposalTailCallHex).has_value() == false); BEAST_EXPECT( runFinishFunction(proposalExtendedConstHex).has_value() == false); + BEAST_EXPECT( + runFinishFunction(proposalMultiMemoryHex).has_value() == false); + BEAST_EXPECT( + runFinishFunction(proposalCustomPageSizesHex).has_value() == false); + BEAST_EXPECT( + runFinishFunction(proposalMemory64Hex).has_value() == false); + BEAST_EXPECT( + runFinishFunction(proposalWideArithmeticHex).has_value() == false); } void @@ -909,7 +917,7 @@ struct Wasm_test : public beast::unit_test::suite if (BEAST_EXPECT(re)) { BEAST_EXPECTS(re->result == 7, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 10, std::to_string(re->result)); + BEAST_EXPECTS(re->cost == 430, std::to_string(re->cost)); } } diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 97143f1f61..493d5aca8a 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -1176,6 +1176,22 @@ extern std::string const proposalExtendedConstHex = "0061736d010000000105016000017f030201000609017f00410a41206a0b070a010666696e" "69736800000a090107002300412a460b"; +extern std::string const proposalMultiMemoryHex = + "0061736d010000000105016000017f0302010005050200000001070a010666696e69736800" + "000a060104003f010b"; + +extern std::string const proposalCustomPageSizesHex = + "0061736d010000000105016000017f0302010005040108010a070a010666696e6973680000" + "0a0601040041010b0010046e616d65010901000666696e697368"; + +extern std::string const proposalMemory64Hex = + "0061736d010000000105016000017f030201000503010401070a010666696e69736800000a" + "10010e004200412a3a00003f004201510b0010046e616d65010901000666696e697368"; + +extern std::string const proposalWideArithmeticHex = + "0061736d010000000105016000017f03020100070a010666696e69736800000a0e010c0042" + "014202fc161a1a41010b0010046e616d65010901000666696e697368"; + extern std::string const trapDivideBy0Hex = "0061736d010000000105016000017f03020100070a010666696e69736800000a0c010a0041" "2a41006d1a41010b"; diff --git a/src/test/app/wasm_fixtures/fixtures.h b/src/test/app/wasm_fixtures/fixtures.h index 32f71883f8..bb7a80f791 100644 --- a/src/test/app/wasm_fixtures/fixtures.h +++ b/src/test/app/wasm_fixtures/fixtures.h @@ -55,6 +55,10 @@ extern std::string const proposalBulkMemoryHex; extern std::string const proposalRefTypesHex; extern std::string const proposalTailCallHex; extern std::string const proposalExtendedConstHex; +extern std::string const proposalMultiMemoryHex; +extern std::string const proposalCustomPageSizesHex; +extern std::string const proposalMemory64Hex; +extern std::string const proposalWideArithmeticHex; extern std::string const trapDivideBy0Hex; extern std::string const trapIntOverflowHex; diff --git a/src/test/app/wasm_fixtures/wat/custom_page_sizes.wat b/src/test/app/wasm_fixtures/wat/custom_page_sizes.wat new file mode 100644 index 0000000000..a9d404fadc --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/custom_page_sizes.wat @@ -0,0 +1,13 @@ +(module + ;; Define a memory with 1 initial page. + ;; CRITICAL: We explicitly set the page size to 1 kilobyte. + ;; Standard Wasm implies (pagesize 65536). + (memory 1 (pagesize 1024)) + + (func $finish (result i32) + ;; If this module instantiates, the runtime accepted the custom page size. + i32.const 1 + ) + + (export "finish" (func $finish)) +) diff --git a/src/test/app/wasm_fixtures/wat/memory64.wat b/src/test/app/wasm_fixtures/wat/memory64.wat new file mode 100644 index 0000000000..02c8f4f590 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/memory64.wat @@ -0,0 +1,21 @@ +(module + ;; Define a 64-bit memory (index type i64) + ;; Start with 1 page. + (memory i64 1) + + (func $finish (result i32) + ;; 1. Perform a store using a 64-bit address. + ;; Even if the value is small (0), the type MUST be i64. + i64.const 0 ;; Address (64-bit) + i32.const 42 ;; Value (32-bit) + i32.store8 ;; Opcode doesn't change, but validation rules do. + + ;; 2. check memory size + ;; memory.size now returns an i64. + memory.size + i64.const 1 + i64.eq ;; Returns i32 (1 if true) + ) + + (export "finish" (func $finish)) +) diff --git a/src/test/app/wasm_fixtures/wat/multi_memory.wat b/src/test/app/wasm_fixtures/wat/multi_memory.wat new file mode 100644 index 0000000000..c2f36e253f --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/multi_memory.wat @@ -0,0 +1,16 @@ +(module + ;; Memory 0: Index 0 (Empty) + (memory 0) + + ;; Memory 1: Index 1 (Size 1 page) + ;; If multi-memory is disabled, this line causes a validation error (max 1 memory). + (memory 1) + + (func $finish (result i32) + ;; Query size of Memory Index 1. + ;; Should return 1 (success). + memory.size 1 + ) + + (export "finish" (func $finish)) +) diff --git a/src/test/app/wasm_fixtures/wat/wide_arithmetic.wat b/src/test/app/wasm_fixtures/wat/wide_arithmetic.wat new file mode 100644 index 0000000000..cd796162ae --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/wide_arithmetic.wat @@ -0,0 +1,22 @@ +(module + (func $finish (result i32) + ;; 1. Push operands + i64.const 1 + i64.const 2 + + ;; 2. Execute Wide Multiplication + ;; If the feature is DISABLED, the parser/validator will trap here + ;; with "unknown instruction" or "invalid opcode". + ;; Input: [i64, i64] -> Output: [i64, i64] + i64.mul_wide_u + + ;; 3. Clean up the stack (drop the two i64 results) + drop + drop + + ;; 4. Return 1 to signal that validation passed + i32.const 1 + ) + + (export "finish" (func $finish)) +) diff --git a/src/xrpld/app/wasm/detail/WasmiVM.cpp b/src/xrpld/app/wasm/detail/WasmiVM.cpp index 9d3dded78b..fa61ec2679 100644 --- a/src/xrpld/app/wasm/detail/WasmiVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmiVM.cpp @@ -510,6 +510,10 @@ WasmiEngine::init() wasmi_config_wasm_tail_call_set(config, false); wasmi_config_wasm_extended_const_set(config, false); wasmi_config_floats_set(config, false); + wasmi_config_wasm_multi_memory_set(config, false); + wasmi_config_wasm_custom_page_sizes_set(config, false); + wasmi_config_wasm_memory64_set(config, false); + wasmi_config_wasm_wide_arithmetic_set(config, false); return std::unique_ptr( wasm_engine_new_with_config(config), &wasm_engine_delete); From 81cbc9192704bfcc2bf405c77ce73de089db1006 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Tue, 13 Jan 2026 16:38:48 -0500 Subject: [PATCH 056/137] Fix traces (#6127) * Fix traces * More tests for codecov * Review fixes * trace float test * Fix return value for traces * Remove SuiteJournalSink2 * Add explicit severity * Move logs to ApplyView * Add check for output strings * Merging fix --- src/test/app/HostFuncImpl_test.cpp | 347 +++++++++---- src/test/app/TestHostFunctions.h | 36 +- src/test/app/Wasm_test.cpp | 2 +- .../wasm_fixtures/codecov_tests/src/lib.rs | 32 +- src/test/app/wasm_fixtures/fixtures.cpp | 490 +++++++++--------- src/xrpld/app/wasm/detail/HostFuncImpl.cpp | 61 ++- src/xrpld/app/wasm/detail/WasmiVM.cpp | 30 +- 7 files changed, 594 insertions(+), 404 deletions(-) diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 692b085102..9a5326e18d 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -62,19 +62,23 @@ static ApplyContext createApplyContext( test::jtx::Env& env, OpenView& ov, + beast::Journal j, STTx const& tx = STTx(ttESCROW_FINISH, [](STObject&) {})) { ApplyContext ac{ - env.app(), - ov, - tx, - tesSUCCESS, - env.current()->fees().base, - tapNONE, - env.journal}; + env.app(), ov, tx, tesSUCCESS, env.current()->fees().base, tapNONE, j}; return ac; } +static ApplyContext +createApplyContext( + test::jtx::Env& env, + OpenView& ov, + STTx const& tx = STTx(ttESCROW_FINISH, [](STObject&) {})) +{ + return createApplyContext(env, ov, env.journal, tx); +} + struct HostFuncImpl_test : public beast::unit_test::suite { void @@ -1912,24 +1916,63 @@ struct HostFuncImpl_test : public beast::unit_test::suite testcase("trace"); using namespace test::jtx; - Env env{*this}; - OpenView ov{*env.current()}; - ApplyContext ac = createApplyContext(env, ov); + { + Env env(*this); + OpenView ov{*env.current()}; + test::StreamSink sink{beast::severities::kTrace}; + beast::Journal jlog{sink}; + ApplyContext ac = createApplyContext(env, ov, jlog); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); - std::string msg = "test trace"; - std::string data = "abc"; - auto const slice = Slice(data.data(), data.size()); - auto const result = hfs.trace(msg, slice, false); - BEAST_EXPECT(result.has_value()); - BEAST_EXPECT(result.value() == msg.size() + data.size()); + std::string msg = "test trace"; + std::string data = "abc"; + auto const slice = Slice(data.data(), data.size()); + auto const result = hfs.trace(msg, slice, false); + if (BEAST_EXPECT(result.has_value())) + { + BEAST_EXPECT(result.value() == msg.size() + data.size()); + auto const messages = sink.messages().str(); + BEAST_EXPECT(messages.find(msg) != std::string::npos); + } - auto const resultHex = hfs.trace(msg, slice, true); - BEAST_EXPECT(resultHex.has_value()); - BEAST_EXPECT(resultHex.value() == msg.size() + data.size() * 2); + auto const resultHex = hfs.trace(msg, slice, true); + if (BEAST_EXPECT(resultHex.has_value())) + { + BEAST_EXPECT(resultHex.has_value()); + BEAST_EXPECT(resultHex.value() == msg.size() + data.size() * 2); + auto const messages = sink.messages().str(); + std::string hex; + hex.reserve(data.size() * 2); + boost::algorithm::hex( + data.begin(), data.end(), std::back_inserter(hex)); + BEAST_EXPECT(messages.find(msg) != std::string::npos); + BEAST_EXPECT(messages.find(hex) != std::string::npos); + } + } + + { + // logs disabled (trace < error) + Env env(*this); + OpenView ov{*env.current()}; + test::StreamSink sink{beast::severities::kError}; + beast::Journal jlog{sink}; + ApplyContext ac = createApplyContext(env, ov, jlog); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + std::string msg = "test trace"; + std::string data = "abc"; + auto const slice = Slice(data.data(), data.size()); + auto const result = hfs.trace(msg, slice, false); + BEAST_EXPECT(result && *result == msg.size() + data.size()); + auto const messages = sink.messages().str(); + BEAST_EXPECT(messages.empty()); + } } void @@ -1938,19 +1981,49 @@ struct HostFuncImpl_test : public beast::unit_test::suite testcase("traceNum"); using namespace test::jtx; - Env env{*this}; - OpenView ov{*env.current()}; - ApplyContext ac = createApplyContext(env, ov); + { + Env env(*this); + OpenView ov{*env.current()}; + test::StreamSink sink{beast::severities::kTrace}; + beast::Journal jlog{sink}; + ApplyContext ac = createApplyContext(env, ov, jlog); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); - std::string msg = "trace number"; - int64_t num = 123456789; - auto const result = hfs.traceNum(msg, num); - BEAST_EXPECT(result.has_value()); - BEAST_EXPECT(result.value() == msg.size() + sizeof(num)); + std::string msg = "trace number"; + int64_t num = 123456789; + auto const result = hfs.traceNum(msg, num); + if (BEAST_EXPECT(result.has_value())) + { + BEAST_EXPECT(result.value() == msg.size() + sizeof(num)); + auto const messages = sink.messages().str(); + BEAST_EXPECT(messages.find(msg) != std::string::npos); + BEAST_EXPECT( + messages.find(std::to_string(num)) != std::string::npos); + } + } + + { + // logs disabled + Env env(*this); + OpenView ov{*env.current()}; + test::StreamSink sink{beast::severities::kError}; + beast::Journal jlog{sink}; + ApplyContext ac = createApplyContext(env, ov, jlog); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + std::string msg = "trace number"; + int64_t num = 123456789; + auto const result = hfs.traceNum(msg, num); + BEAST_EXPECT(result && *result == msg.size() + sizeof(int64_t)); + auto const messages = sink.messages().str(); + BEAST_EXPECT(messages.empty()); + } } void @@ -1959,22 +2032,47 @@ struct HostFuncImpl_test : public beast::unit_test::suite testcase("traceAccount"); using namespace test::jtx; - Env env{*this}; - OpenView ov{*env.current()}; - ApplyContext ac = createApplyContext(env, ov); - - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); - - std::string msg = "trace account"; - // Valid account { + Env env(*this); + OpenView ov{*env.current()}; + test::StreamSink sink{beast::severities::kTrace}; + beast::Journal jlog{sink}; + ApplyContext ac = createApplyContext(env, ov, jlog); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + std::string msg = "trace account"; auto const result = hfs.traceAccount(msg, env.master.id()); if (BEAST_EXPECT(result.has_value())) + { BEAST_EXPECT( - result.value() == - msg.size() + toBase58(env.master.id()).size()); + result.value() == msg.size() + env.master.id().size()); + auto const messages = sink.messages().str(); + BEAST_EXPECT(messages.find(msg) != std::string::npos); + BEAST_EXPECT( + messages.find(env.master.human()) != std::string::npos); + } + } + + { + // logs disabled + Env env(*this); + OpenView ov{*env.current()}; + test::StreamSink sink{beast::severities::kError}; + beast::Journal jlog{sink}; + ApplyContext ac = createApplyContext(env, ov, jlog); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + std::string msg = "trace account"; + auto const result = hfs.traceAccount(msg, env.master.id()); + BEAST_EXPECT( + result && *result == msg.size() + env.master.id().size()); + auto const messages = sink.messages().str(); + BEAST_EXPECT(messages.empty()); } } @@ -1984,46 +2082,72 @@ struct HostFuncImpl_test : public beast::unit_test::suite testcase("traceAmount"); using namespace test::jtx; - Env env{*this}; - OpenView ov{*env.current()}; - ApplyContext ac = createApplyContext(env, ov); - - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); - - std::string msg = "trace amount"; - STAmount amount = XRP(12345); { + Env env(*this); + OpenView ov{*env.current()}; + test::StreamSink sink{beast::severities::kTrace}; + beast::Journal jlog{sink}; + ApplyContext ac = createApplyContext(env, ov, jlog); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + std::string msg = "trace amount"; + STAmount amount = XRP(12345); + { + auto const result = hfs.traceAmount(msg, amount); + if (BEAST_EXPECT(result.has_value())) + { + BEAST_EXPECT(*result == msg.size()); + auto const messages = sink.messages().str(); + BEAST_EXPECT(messages.find(msg) != std::string::npos); + BEAST_EXPECT( + messages.find(amount.getFullText()) != + std::string::npos); + } + } + + // IOU amount + Account const alice("alice"); + env.fund(XRP(1000), alice); + env.close(); + STAmount iouAmount = env.master["USD"](100); + { + auto const result = hfs.traceAmount(msg, iouAmount); + if (BEAST_EXPECT(result.has_value())) + BEAST_EXPECT(*result == msg.size()); + } + + // MPT amount + { + auto const mptId = makeMptID(42, env.master.id()); + Asset mptAsset = Asset(mptId); + STAmount mptAmount(mptAsset, 123456); + auto const result = hfs.traceAmount(msg, mptAmount); + if (BEAST_EXPECT(result.has_value())) + BEAST_EXPECT(*result == msg.size()); + } + } + + { + // logs disabled + Env env(*this); + OpenView ov{*env.current()}; + test::StreamSink sink{beast::severities::kError}; + beast::Journal jlog{sink}; + ApplyContext ac = createApplyContext(env, ov, jlog); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + std::string msg = "trace amount"; + STAmount amount = XRP(12345); auto const result = hfs.traceAmount(msg, amount); - if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT( - result.value() == msg.size() + amount.getFullText().size()); - } - - // IOU amount - Account const alice("alice"); - env.fund(XRP(1000), alice); - env.close(); - STAmount iouAmount = env.master["USD"](100); - { - auto const result = hfs.traceAmount(msg, iouAmount); - if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT( - result.value() == - msg.size() + iouAmount.getFullText().size()); - } - - // MPT amount - { - auto const mptId = makeMptID(42, env.master.id()); - Asset mptAsset = Asset(mptId); - STAmount mptAmount(mptAsset, 123456); - auto const result = hfs.traceAmount(msg, mptAmount); - if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT( - result.value() == - msg.size() + mptAmount.getFullText().size()); + BEAST_EXPECT(result && *result == msg.size()); + auto const messages = sink.messages().str(); + BEAST_EXPECT(messages.empty()); } } @@ -2058,28 +2182,51 @@ struct HostFuncImpl_test : public beast::unit_test::suite testcase("FloatTrace"); using namespace test::jtx; - Env env{*this}; - OpenView ov{*env.current()}; - ApplyContext ac = createApplyContext(env, ov); - - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); - - std::string msg = "trace float"; - { - auto const result = hfs.traceFloat(msg, makeSlice(invalid)); - BEAST_EXPECT( - result && - *result == - msg.size() + 14 /* error msg size*/ + invalid.size() * 2); + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + std::string msg = "trace float"; + + { + auto const result = hfs.traceFloat(msg, makeSlice(invalid)); + BEAST_EXPECT( + result && + *result == msg.size() + makeSlice(invalid).size()); + } + + { + auto const result = hfs.traceFloat(msg, makeSlice(floatMaxExp)); + BEAST_EXPECT( + result && + *result == msg.size() + makeSlice(floatMaxExp).size()); + } } { - auto const result = hfs.traceFloat(msg, makeSlice(floatMaxExp)); + // logs disabled + Env env(*this); + OpenView ov{*env.current()}; + test::StreamSink sink{beast::severities::kError}; + beast::Journal jlog{sink}; + ApplyContext ac = createApplyContext(env, ov, jlog); + + auto const dummyEscrow = + keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + std::string msg = "trace float"; + + auto const result = hfs.traceFloat(msg, makeSlice(invalid)); BEAST_EXPECT( - result && *result == msg.size() + 19 /* string represenation*/); + result && *result == msg.size() + makeSlice(invalid).size()); + auto const messages = sink.messages().str(); + BEAST_EXPECT(messages.empty()); } } diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index 0cb010b0e9..a7f4c8038b 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -383,9 +383,12 @@ public: Expected trace(std::string_view const& msg, Slice const& data, bool asHex) override { + auto const ret = msg.size() + data.size() * (asHex ? 2 : 1); #ifdef DEBUG_OUTPUT auto& j = std::cerr; #else + if (!getJournal().active(beast::severities::kTrace)) + return ret; auto j = getJournal().trace(); #endif if (!asHex) @@ -407,15 +410,18 @@ public: j << std::endl; #endif - return msg.size() + data.size() * (asHex ? 2 : 1); + return ret; } Expected traceNum(std::string_view const& msg, int64_t data) override { + auto const ret = msg.size() + sizeof(data); #ifdef DEBUG_OUTPUT auto& j = std::cerr; #else + if (!getJournal().active(beast::severities::kTrace)) + return ret; auto j = getJournal().trace(); #endif j << "WASM TRACE NUM: " << msg << " " << data; @@ -423,15 +429,18 @@ public: #ifdef DEBUG_OUTPUT j << std::endl; #endif - return msg.size() + sizeof(data); + return ret; } Expected traceAccount(std::string_view const& msg, AccountID const& account) override { + auto const ret = msg.size() + account.size(); #ifdef DEBUG_OUTPUT auto& j = std::cerr; #else + if (!getJournal().active(beast::severities::kTrace)) + return ret; auto j = getJournal().trace(); #endif if (!account) @@ -440,15 +449,23 @@ public: auto const accountStr = toBase58(account); j << "WASM TRACE ACCOUNT: " << msg << " " << accountStr; - return msg.size() + accountStr.size(); + +#ifdef DEBUG_OUTPUT + j << std::endl; +#endif + + return ret; } Expected traceFloat(std::string_view const& msg, Slice const& data) override { + auto const ret = msg.size() + data.size(); #ifdef DEBUG_OUTPUT auto& j = std::cerr; #else + if (!getJournal().active(beast::severities::kTrace)) + return ret; auto j = getJournal().trace(); #endif auto const s = floatToString(data); @@ -457,20 +474,29 @@ public: #ifdef DEBUG_OUTPUT j << std::endl; #endif - return msg.size() + s.size(); + + return ret; } Expected traceAmount(std::string_view const& msg, STAmount const& amount) override { + auto const ret = msg.size(); #ifdef DEBUG_OUTPUT auto& j = std::cerr; #else + if (!getJournal().active(beast::severities::kTrace)) + return ret; auto j = getJournal().trace(); #endif auto const amountStr = amount.getFullText(); j << "WASM TRACE AMOUNT: " << msg << " " << amountStr; - return msg.size() + amountStr.size(); + +#ifdef DEBUG_OUTPUT + j << std::endl; +#endif + + return ret; } Expected diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 543f57cccd..c61482a057 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -703,7 +703,7 @@ struct Wasm_test : public beast::unit_test::suite Bytes const wasm(wasmStr.begin(), wasmStr.end()); TestHostFunctions hfs(env, 0); - auto const allowance = 189'508; + auto const allowance = 185'974; auto re = runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, allowance); if (BEAST_EXPECT(re.has_value())) diff --git a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs index 4cbc7e1707..a5aa2eb6e5 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs +++ b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs @@ -248,7 +248,7 @@ pub extern "C" fn finish() -> i32 { account.0.len(), ) }, - 47, + (message.len() + 20) as i32, "trace_account", ); let amount = &[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F]; // 95 drops of XRP @@ -261,7 +261,7 @@ pub extern "C" fn finish() -> i32 { amount.len(), ) }, - 19, + message.len() as i32, "trace_amount", ); let amount = &[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]; // 0 drops of XRP @@ -274,7 +274,7 @@ pub extern "C" fn finish() -> i32 { amount.len(), ) }, - 18, + message.len() as i32, "trace_amount_zero", ); @@ -307,32 +307,6 @@ pub extern "C" fn finish() -> i32 { "get_parent_ledger_hash_len_too_long", ) }); - let message = "testing trace"; - check_result( - unsafe { - host::trace_account( - message.as_ptr(), - message.len(), - account.0.as_ptr(), - account.0.len(), - ) - }, - 47, - "trace_account", - ); - let amount = &[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F]; // 95 drops of XRP - check_result( - unsafe { - host::trace_amount( - message.as_ptr(), - message.len(), - amount.as_ptr(), - amount.len(), - ) - }, - 19, - "trace_amount", - ); // ######################################## // Step #3: Test getData[Type] edge cases diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 493d5aca8a..3f339e7a0d 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -661,251 +661,251 @@ extern std::string const codecovTestsWasmHex = "61696e5f6b65796c6574000108686f73745f6c69620e7369676e6572735f6b65796c657400" "0008686f73745f6c69620d7469636b65745f6b65796c6574000108686f73745f6c69620c76" "61756c745f6b65796c657400010303020a0505030100110619037f01418080c0000b7f0041" - "a99ec0000b7f0041b09ec0000b072e04066d656d6f727902000666696e697368003d0a5f5f" - "646174615f656e6403010b5f5f686561705f6261736503020a9e2702460002402000200147" - "04402002200341004100410010001a20004100480d01418b80c000410b2000ad1001000b20" - "0220032000ac10011a0f0b418b80c000410b2000ac1001000bd426020a7f017e230041f001" - "6b22002400419680c000412341004100410010001a100241b9e00041b980c000410e103c10" - "0341b2920441c780c0004116103c200041f0006a22044200370300200041e8006a22064200" - "370300200041e0006a2203420037030020004200370358200041d8006a2201412010044120" - "41d88cc0004116103c1005410a41dd80c000410c103c200041186a2207428182848890a0c0" - "8001370300200041106a2208428182848890a0c08001370300200041086a22094281828488" - "90a0c080013703002000428182848890a0c0800137030041e980c000410e1006410141f780" - "c0004111103c200041201006410141f780c0004111103c4181802020014114100722024114" - "4604400240200041266a200041da006a2d00003a00002000200029005f3703c80120002000" - "41e4006a2900003700cd01200041306a20002900cd01370000200020002f00583b01242000" - "200028005b360027200020002903c80137002b200442003703002006420037030020034200" - "37030020004200370358200041246a2204411420014120100822024120470d002000413a6a" - "20002d005a3a0000200041d0016a2202200041e7006a290000220a370300200041c7006a20" - "0a370000200041cf006a200041ef006a290000370000200041d7006a200041f7006a2d0000" - "3a0000200020002f01583b01382000200028005b36003b2000200029005f37003f20004138" - "6a4120410010094101418881c0004110103c20064100360200200342003703002000420037" - "03584181802020014114100a411441ee8cc000411c103c2006410036020020034200370300" - "2000420037035841014181802020014114100b4114418a8dc0004114103c20004104360298" - "01200041818020360258200041d8016a2203410036020020024200370300200042003703c8" - "0120014104200041c8016a22064114100c4114419e8dc0004113103c200341003602002002" - "4200370300200042003703c801200120002802980120064114100d411441b18dc000412310" - "3c2003410036020020024200370300200042003703c8014101200120002802980120064114" - "100e411441d48dc000411b103c4189803c100f4120419881c0004110103c4189803c101041" - "2041a881c0004120103c41014189803c1011412041c881c0004118103c2001200028029801" - "1012412041e081c0004117103c20012000280298011013412041f781c0004127103c410120" - "0120002802980110144120419e82c000411f103c200441141015411441bd82c000410b103c" - "200041e0016a220542003703002003420037030020024200370300200042003703c8012001" - "200028029801200641201016412041ef8dc0004113103c41c882c000410c41d482c000410b" - "41df82c000410e1017410141ed82c0004109103c200041b8016a2007290300370300200041" - "b0016a2008290300370300200041a8016a2009290300370300200020002903003703a00120" - "0341003b010020024200370300200042003703c80120044114200041a0016a220741202006" - "41121018411241828ec0004107103c2003410036020020024200370300200042003703c801" - "20074120200641141019411441898ec000410e103c200041003602c8012007412020064104" - "101a410441978ec000410d103c20074120101b410841f682c000410d103c20074120101c41" - "0a418383c0004114103c200041003602c8012007412020064104101d410441a48ec000410e" - "103c419783c000410d20044114101e412f41a483c000410d103c419783c000410d41b183c0" - "004108101f411341b983c000410c103c419783c000410d41c583c0004108101f411241cd83" - "c0004111103c417f41041004417141de83c000411e103c200041003602c8012006417f1004" - "417141b28ec000411e103c200041ca016a41003a0000200041003b01c80120064103100441" - "7d41d08ec0004124103c200041003602c8012006418094ebdc031004417341f48ec0004123" - "103c419783c000410d20044114101e412f41a483c000410d103c419783c000410d41b183c0" - "004108101f411341b983c000410c103c200542003703002003420037030020024200370300" - "200042003703c801200041d894ebdc036a220741082006412041001020417341978fc00041" - "17103c200542003703002003420037030020024200370300200042003703c8012001200028" - "0298012006412041001020417141ae8fc0004119103c4102100f416f41fc83c000411f103c" - "417f20002802980110124171419b84c000411f103c2001417f1012417141ba84c000411f10" - "3c20014181201012417441d984c0004120103c20072000280298011012417341f984c00041" - "1f103c2007200028029801410110094173419885c0004118103c2001200028029801410110" - "09417141b085c000411a103c20054200370300200342003703002002420037030020004200" - "3703c8012007200028029801200641201008417341c78fc0004116103c2005420037030020" - "03420037030020024200370300200042003703c80120012000280298012006412010084171" - "41dd8fc0004118103c200542003703002003420037030020024200370300200042003703c8" - "0120044114200441142007200028029801200641201021417341f58fc000411c103c200542" - "003703002003420037030020024200370300200042003703c8012004411420044114200120" - "00280298012006412010214171419190c000411e103c200542003703002003420037030020" - "024200370300200042003703c80141959ec000411420072000280298012006412010224173" - "41af90c0004119103c200542003703002003420037030020024200370300200042003703c8" - "0141959ec00041142001200028029801200641201022417141c890c000411f103c20054200" - "3703002003420037030020024200370300200042003703c80141959ec000411441ca85c000" - "4114200641201022417141e790c0004129103c200542003703002003420037030020024200" - "370300200042003703c80141de85c000412841959ec00041142006412010224171419091c0" - "004125103c200041dc016a200041346a280100360200200041d4016a2000412c6a29010037" - "0200200020002901243702cc01200041808080083602c801200041003b01c0012006411841" - "959ec0004114200041c0016a220341021022417141b591c000410e103c2007200028029801" - "422a10014173418686c0004111103c200041003b01c0014102200341021007416f41c391c0" - "00411b103c200041003b01c001410220034102100a416f41de91c000412b103c200041003b" - "01c0014101410220034102100b416f418992c0004123103c4102100f416f41fc83c000411f" - "103c41021010416f419786c000412f103c410141021011416f41c686c0004127103c41e980" - "c0004181201006417441ed86c000411f103c41e980c00041c10010064174418c87c000411a" - "103c200041003b01c001200141812020034102100c417441ac92c0004121103c200041003b" - "01c001200141812020034102100d417441cd92c0004131103c200041003b01c00141012001" - "41812020034102100e417441fe92c0004129103c20014181201012417441a687c000412510" - "3c20014181201013417441cb87c0004135103c4101200141812010144174418088c000412d" - "103c20014181201015417441ad88c0004119103c419783c00041812041d482c000410b41df" - "82c000410e1017417441ed82c0004109103c419783c000410d41d482c00041812041df82c0" - "00410e1017417441ed82c0004109103c419783c000410d41d482c000410b41df82c0004181" - "201017417441ed82c0004109103c200041003b01c0012001418120200341021016417441a7" - "93c0004121103c200041003b01c00141959ec00041812041959ec000411420034102102241" - "7441c893c0004118103c200041003b01c00120044114200441142001418120200341021023" - "417441e093c000411f103c200041003b01c001200641812020044114200341021024417441" - "ff93c0004122103c419783c000410d200720002802980141001000417341c688c000410f10" - "3c200042d487b6f4c7d4b1c0003700c001419783c000410d200041c095ebdc036a22054108" - "1025417341d588c000411c103c419783c000410d2007200028029801101f417341f188c000" - "4116103c200541082003410810264173418789c0004118103c200341082005410810264173" - "419f89c0004118103c200041003b01ec012005410820034108200041ec016a220241024100" - "1027417341a194c0004114103c200041003b01ec0120034108200541082002410241001027" - "417341b594c0004114103c200041003b01ec01200541082003410820024102410010284173" - "41c994c0004119103c200041003b01ec0120034108200541082002410241001028417341e2" - "94c0004119103c200041003b01ec0120054108200341082002410241001029417341fb94c0" - "004119103c200041003b01ec01200341082005410820024102410010294173419495c00041" - "19103c200041003b01ec012005410820034108200241024100102a417341ad95c000411710" - "3c200041003b01ec012003410820054108200241024100102a417341c495c0004117103c20" - "0041003b01ec01200541084103200241024100102b417341db95c0004114103c200041003b" - "01ec01200541084103200241024100102c417341ef95c0004113103c200041003b01ec0120" - "054108200241024100102d4173418296c0004113103c200120002802980141001009417141" - "b789c0004123103c200041003b01ec01200441142001200028029801200241021018417141" - "9596c000411a103c200041003b01ec012001200028029801200241021019417141af96c000" - "4121103c200041003b01ec01200120002802980120024102101a417141d096c0004120103c" - "2001200028029801101b417141da89c0004120103c2001200028029801101c417141fa89c0" - "004127103c200041003602ec01200120002802980120024104101d417141f096c000412110" - "3c200041003b01ec0120012000280298012002410210084171419197c0004123103c200041" - "003b01ec012001200028029801410120024102102e417141b497c0004121103c200041003b" - "01ec01200120002802980122052004411420012005200241021023417141d597c000412710" - "3c200041003b01ec01200441142001200028029801220520012005200241021023417141fc" - "97c0004127103c200041003b01ec0120012000280298012004411420024102102f417141a3" - "98c0004125103c200041003b01ec0120044114200120002802980120024102102f417141c8" - "98c0004125103c200041003b01ec01200120002802980120044114200241021030417141ed" - "98c000412c103c200041003b01ec0120044114200120002802980120024102103041714199" - "99c000412c103c200041003b01ec012001200028029801200241021031417141c599c00041" - "1f103c200041003b01ec0120012000280298014101200241021032417141e499c000412210" - "3c200041003b01ec0120012000280298012004411441ca85c0004114200241021021417141" - "869ac0004121103c200041003b01ec0120044114200120002802980141ca85c00041142002" - "41021021417141a79ac0004121103c200041003b01ec012001200028029801410120024102" - "1033417141c89ac0004128103c200041003b01ec0120064118200120002802980120024102" - "1024417141f09ac0004123103c200041003b01ec0120012000280298014101200241021034" - "417141939bc0004125103c200041003b01ec01200120002802980141012002410210354171" - "41b89bc0004121103c200041003b01ec0120012000280298014101200241021036417141d9" - "9bc0004122103c200041003b01ec0120012000280298012004411441012002410210374171" - "41fb9bc0004124103c200041003b01ec012004411420012000280298014101200241021037" - "4171419f9cc0004124103c200041003b01ec01200120002802980141012002410210384171" - "41c39cc000412f103c200041003b01ec012001200028029801200241021039417141f29cc0" - "004123103c200041003b01ec012001200028029801410120024102103a417141959dc00041" - "22103c200041003b01ec012001200028029801410120024102103b417141b79dc000412110" - "3c200041003b01ec01200120002802980141a18ac0004120200241021018417141d89dc000" - "411c103c419783c000410d2001200028029801101e417141c18ac0004122103c419797abdd" - "03410d41a18ac000412041001000417341e38ac0004110103c419797abdd03410d20034108" - "1025417341f38ac000411d103c419797abdd03410d20044114101e417341908bc000411810" - "3c419797abdd03410d41b183c0004108101f417341a88bc0004117103c2001200028029801" - "200141812041001000417441bf8bc000410e103c200141812042011001417441cd8bc00041" - "12103c419783c000418120200341081025417441df8bc000411b103c419783c00041812020" - "044114101e417441fa8bc0004116103c419783c00041812041b183c0004108101f41744190" - "8cc0004115103c419783c000410d2001200028029801101f417141a58cc0004119103c2000" - "41003b01ec01200120002802980120044114200241021024417141f49dc0004121103c4101" - "410020044114101e412241be8cc000411a103c200041f0016a240041010f0b0b418080c000" - "410b417f20022002417f4e1bac1001000b0b801e0200418080c0000bde056572726f725f63" - "6f64653d54455354204641494c45442424242424205354415254494e47205741534d204558" - "45435554494f4e2024242424246765745f6c65646765725f73716e6765745f706172656e74" - "5f6c65646765725f74696d656765745f626173655f666565746573745f616d656e646d656e" - "74616d656e646d656e745f656e61626c656463616368655f6c65646765725f6f626a676574" - "5f74785f61727261795f6c656e6765745f63757272656e745f6c65646765725f6f626a5f61" - "727261795f6c656e6765745f6c65646765725f6f626a5f61727261795f6c656e6765745f74" - "785f6e65737465645f61727261795f6c656e6765745f63757272656e745f6c65646765725f" - "6f626a5f6e65737465645f61727261795f6c656e6765745f6c65646765725f6f626a5f6e65" - "737465645f61727261795f6c656e7570646174655f6461746174657374206d657373616765" - "74657374207075626b657974657374207369676e6174757265636865636b5f736967676574" - "5f6e66745f666c6167736765745f6e66745f7472616e736665725f66656574657374696e67" - "20747261636574726163655f6163636f756e74400000000000005f74726163655f616d6f75" - "6e74400000000000000074726163655f616d6f756e745f7a65726f6765745f706172656e74" - "5f6c65646765725f686173685f6e65675f7074726765745f74785f61727261795f6c656e5f" - "696e76616c69645f736669656c646765745f74785f6e65737465645f61727261795f6c656e" - "5f6e65675f7074726765745f74785f6e65737465645f61727261795f6c656e5f6e65675f6c" - "656e6765745f74785f6e65737465645f61727261795f6c656e5f746f6f5f6c6f6e67676574" - "5f74785f6e65737465645f61727261795f6c656e5f7074725f6f6f6263616368655f6c6564" - "6765725f6f626a5f7074725f6f6f6263616368655f6c65646765725f6f626a5f77726f6e67" - "5f6c656e555344303030303030303030303030303030303000418686c0000b8f1874726163" - "655f6e756d5f6f6f625f7374726765745f63757272656e745f6c65646765725f6f626a5f61" - "727261795f6c656e5f696e76616c69645f736669656c646765745f6c65646765725f6f626a" - "5f61727261795f6c656e5f696e76616c69645f736669656c64616d656e646d656e745f656e" - "61626c65645f746f6f5f6269675f736c696365616d656e646d656e745f656e61626c65645f" - "746f6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f746f6f5f62" - "69675f736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e6573746564" - "5f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f6c65646765725f6f62" - "6a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963657570646174" - "655f646174615f746f6f5f6269675f736c69636574726163655f6f6f625f736c6963657472" - "6163655f6f70617175655f666c6f61745f6f6f625f736c69636574726163655f616d6f756e" - "745f6f6f625f736c696365666c6f61745f636f6d706172655f6f6f625f736c69636531666c" - "6f61745f636f6d706172655f6f6f625f736c6963653263616368655f6c65646765725f6f62" - "6a5f77726f6e675f73697a655f75696e743235366765745f6e66745f666c6167735f77726f" - "6e675f73697a655f75696e743235366765745f6e66745f7472616e736665725f6665655f77" - "726f6e675f73697a655f75696e743235363030303030303030303030303030303030303030" - "30303030303030303030303174726163655f6163636f756e745f77726f6e675f73697a655f" - "6163636f756e74696474726163655f6f6f625f737472696e6774726163655f6f7061717565" - "5f666c6f61745f6f6f625f737472696e6774726163655f6163636f756e745f6f6f625f7374" - "72696e6774726163655f616d6f756e745f6f6f625f737472696e6774726163655f746f6f5f" - "6c6f6e6774726163655f6e756d5f746f6f5f6c6f6e6774726163655f6f70617175655f666c" - "6f61745f746f6f5f6c6f6e6774726163655f6163636f756e745f746f6f5f6c6f6e67747261" - "63655f616d6f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f77726f6e675f" - "6c656e67746874726163655f6163636f756e745f636865636b5f646573796e636765745f70" - "6172656e745f6c65646765725f686173686765745f63757272656e745f6c65646765725f6f" - "626a5f6669656c646765745f6c65646765725f6f626a5f6669656c646765745f74785f6e65" - "737465645f6669656c646765745f63757272656e745f6c65646765725f6f626a5f6e657374" - "65645f6669656c646765745f6c65646765725f6f626a5f6e65737465645f6669656c64636f" - "6d707574655f7368613531325f68616c666765745f6e66746765745f6e66745f6973737565" - "726765745f6e66745f7461786f6e6765745f6e66745f73657269616c6765745f706172656e" - "745f6c65646765725f686173685f6e65675f6c656e6765745f706172656e745f6c65646765" - "725f686173685f6275665f746f6f5f736d616c6c6765745f706172656e745f6c6564676572" - "5f686173685f6c656e5f746f6f5f6c6f6e67666c6f61745f66726f6d5f75696e745f6c656e" - "5f6f6f62666c6f61745f66726f6d5f75696e745f77726f6e675f6c656e6163636f756e745f" - "6b65796c65745f6c656e5f6f6f626163636f756e745f6b65796c65745f77726f6e675f6c65" - "6e6c696e655f6b65796c65745f6c656e5f6f6f625f63757272656e63796c696e655f6b6579" - "6c65745f77726f6e675f6c656e5f63757272656e6379616d6d5f6b65796c65745f6c656e5f" - "6f6f625f617373657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6c656e5f6173" - "73657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6e6f6e5f7872705f63757272" - "656e63795f6c656e616d6d5f6b65796c65745f6c656e5f77726f6e675f7872705f63757272" - "656e63795f6c656e616d6d5f6b65796c65745f6d70746765745f74785f6669656c645f696e" - "76616c69645f736669656c646765745f63757272656e745f6c65646765725f6f626a5f6669" - "656c645f696e76616c69645f736669656c646765745f6c65646765725f6f626a5f6669656c" - "645f696e76616c69645f736669656c646765745f74785f6e65737465645f6669656c645f74" - "6f6f5f6269675f736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e65" - "737465645f6669656c645f746f6f5f6269675f736c6963656765745f6c65646765725f6f62" - "6a5f6e65737465645f6669656c645f746f6f5f6269675f736c696365636f6d707574655f73" - "68613531325f68616c665f746f6f5f6269675f736c696365616d6d5f6b65796c65745f746f" - "6f5f6269675f736c69636563726564656e7469616c5f6b65796c65745f746f6f5f6269675f" - "736c6963656d70746f6b656e5f6b65796c65745f746f6f5f6269675f736c6963655f6d7074" - "6964666c6f61745f6164645f6f6f625f736c69636531666c6f61745f6164645f6f6f625f73" - "6c69636532666c6f61745f73756274726163745f6f6f625f736c69636531666c6f61745f73" - "756274726163745f6f6f625f736c69636532666c6f61745f6d756c7469706c795f6f6f625f" - "736c69636531666c6f61745f6d756c7469706c795f6f6f625f736c69636532666c6f61745f" - "6469766964655f6f6f625f736c69636531666c6f61745f6469766964655f6f6f625f736c69" - "636532666c6f61745f726f6f745f6f6f625f736c696365666c6f61745f706f775f6f6f625f" - "736c696365666c6f61745f6c6f675f6f6f625f736c6963656765745f6e66745f77726f6e67" - "5f73697a655f75696e743235366765745f6e66745f6973737565725f77726f6e675f73697a" - "655f75696e743235366765745f6e66745f7461786f6e5f77726f6e675f73697a655f75696e" - "743235366765745f6e66745f73657269616c5f77726f6e675f73697a655f75696e74323536" - "6163636f756e745f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646368" - "65636b5f6b65796c65745f77726f6e675f73697a655f6163636f756e74696463726564656e" - "7469616c5f6b65796c65745f77726f6e675f73697a655f6163636f756e7469643163726564" - "656e7469616c5f6b65796c65745f77726f6e675f73697a655f6163636f756e746964326465" - "6c65676174655f6b65796c65745f77726f6e675f73697a655f6163636f756e746964316465" - "6c65676174655f6b65796c65745f77726f6e675f73697a655f6163636f756e746964326465" - "706f7369745f707265617574685f6b65796c65745f77726f6e675f73697a655f6163636f75" - "6e746964316465706f7369745f707265617574685f6b65796c65745f77726f6e675f73697a" - "655f6163636f756e746964326469645f6b65796c65745f77726f6e675f73697a655f616363" - "6f756e746964657363726f775f6b65796c65745f77726f6e675f73697a655f6163636f756e" - "7469646c696e655f6b65796c65745f77726f6e675f73697a655f6163636f756e746964316c" - "696e655f6b65796c65745f77726f6e675f73697a655f6163636f756e746964326d70745f69" - "737375616e63655f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646d70" - "746f6b656e5f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646e66745f" - "6f666665725f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646f666665" - "725f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646f7261636c655f6b" - "65796c65745f77726f6e675f73697a655f6163636f756e7469647061796368616e5f6b6579" - "6c65745f77726f6e675f73697a655f6163636f756e746964317061796368616e5f6b65796c" - "65745f77726f6e675f73697a655f6163636f756e746964327065726d697373696f6e65645f" - "646f6d61696e5f6b65796c65745f77726f6e675f73697a655f6163636f756e746964736967" - "6e6572735f6b65796c65745f77726f6e675f73697a655f6163636f756e7469647469636b65" - "745f6b65796c65745f77726f6e675f73697a655f6163636f756e7469647661756c745f6b65" - "796c65745f77726f6e675f73697a655f6163636f756e7469646765745f6e66745f77726f6e" - "675f73697a655f6163636f756e7469646d70746f6b656e5f6b65796c65745f6d707469645f" - "77726f6e675f6c656e677468004d0970726f64756365727302086c616e6775616765010452" - "757374000c70726f6365737365642d6279010572757374631d312e38352e31202834656231" - "363132353020323032352d30332d313529002c0f7461726765745f6665617475726573022b" - "0f6d757461626c652d676c6f62616c732b087369676e2d657874"; + "8f9ec0000b7f0041909ec0000b072e04066d656d6f727902000666696e697368003d0a5f5f" + "646174615f656e6403010b5f5f686561705f6261736503020c01020ad62602460002402000" + "20014704402002200341004100410010001a20004100480d01418b80c000410b2000ad1001" + "000b200220032000ac10011a0f0b418b80c000410b2000ac1001000b8c26020a7f017e2300" + "41f0016b22002400419680c000412341004100410010001a100241b9e00041b980c000410e" + "103c100341b2920441c780c0004116103c200041f0006a22064200370300200041e8006a22" + "054200370300200041e0006a2203420037030020004200370358200041d8006a2201412010" + "04412041be8cc0004116103c1005410a41dd80c000410c103c200041186a22074281828488" + "90a0c08001370300200041106a2208428182848890a0c08001370300200041086a22094281" + "82848890a0c080013703002000428182848890a0c0800137030041e980c000410e10064101" + "41f780c0004111103c200041201006410141f780c0004111103c4181802020014114100722" + "0241144604400240200041266a200041da006a2d00003a00002000200029005f3703c80120" + "00200041e4006a2900003700cd01200041306a20002900cd01370000200020002f00583b01" + "242000200028005b360027200020002903c80137002b200642003703002005420037030020" + "03420037030020004200370358200041246a2206411420014120100822024120470d002000" + "413a6a20002d005a3a0000200041d0016a2202200041e7006a290000220a370300200041c7" + "006a200a370000200041cf006a200041ef006a290000370000200041d7006a200041f7006a" + "2d00003a0000200020002f01583b01382000200028005b36003b2000200029005f37003f20" + "0041386a4120410010094101418881c0004110103c20054100360200200342003703002000" + "42003703584181802020014114100a411441d48cc000411c103c2005410036020020034200" + "3703002000420037035841014181802020014114100b411441f08cc0004114103c20004104" + "36029801200041818020360258200041d8016a220341003602002002420037030020004200" + "3703c80120014104200041c8016a22054114100c411441848dc0004113103c200341003602" + "0020024200370300200042003703c801200120002802980120054114100d411441978dc000" + "4123103c2003410036020020024200370300200042003703c8014101200120002802980120" + "054114100e411441ba8dc000411b103c4189803c100f4120419881c0004110103c4189803c" + "1010412041a881c0004120103c41014189803c1011412041c881c0004118103c2001200028" + "0298011012412041e081c0004117103c20012000280298011013412041f781c0004127103c" + "4101200120002802980110144120419e82c000411f103c200641141015411441bd82c00041" + "0b103c200041e0016a220442003703002003420037030020024200370300200042003703c8" + "012001200028029801200541201016412041d58dc0004113103c41c882c000410c41d482c0" + "00410b41df82c000410e1017410141ed82c0004109103c200041b8016a2007290300370300" + "200041b0016a2008290300370300200041a8016a2009290300370300200020002903003703" + "a001200341003b010020024200370300200042003703c80120064114200041a0016a220741" + "20200541121018411241e88dc0004107103c20034100360200200242003703002000420037" + "03c80120074120200541141019411441ef8dc000410e103c200041003602c8012007412020" + "054104101a410441fd8dc000410d103c20074120101b410841f682c000410d103c20074120" + "101c410a418383c0004114103c200041003602c8012007412020054104101d4104418a8ec0" + "00410e103c419783c000410d20064114101e412141a483c000410d103c419783c000410d41" + "b183c0004108101f410d41b983c000410c103c419783c000410d41c583c0004108101f410d" + "41cd83c0004111103c417f41041004417141de83c000411e103c200041003602c801200541" + "7f1004417141988ec000411e103c200041ca016a41003a0000200041003b01c80120054103" + "1004417d41b68ec0004124103c200041003602c8012005418094ebdc031004417341da8ec0" + "004123103c200442003703002003420037030020024200370300200042003703c801200041" + "d894ebdc036a220741082005412041001020417341fd8ec0004117103c2004420037030020" + "03420037030020024200370300200042003703c80120012000280298012005412041001020" + "417141948fc0004119103c4102100f416f41fc83c000411f103c417f200028029801101241" + "71419b84c000411f103c2001417f1012417141ba84c000411f103c20014181201012417441" + "d984c0004120103c20072000280298011012417341f984c000411f103c2007200028029801" + "410110094173419885c0004118103c200120002802980141011009417141b085c000411a10" + "3c200442003703002003420037030020024200370300200042003703c80120072000280298" + "01200541201008417341ad8fc0004116103c20044200370300200342003703002002420037" + "0300200042003703c8012001200028029801200541201008417141c38fc0004118103c2004" + "42003703002003420037030020024200370300200042003703c80120064114200641142007" + "200028029801200541201021417341db8fc000411c103c2004420037030020034200370300" + "20024200370300200042003703c80120064114200641142001200028029801200541201021" + "417141f78fc000411e103c2004420037030020034200370300200242003703002000420037" + "03c80141fb9dc000411420072000280298012005412010224173419590c0004119103c2004" + "42003703002003420037030020024200370300200042003703c80141fb9dc0004114200120" + "0028029801200541201022417141ae90c000411f103c200442003703002003420037030020" + "024200370300200042003703c80141fb9dc000411441ca85c0004114200541201022417141" + "cd90c0004129103c200442003703002003420037030020024200370300200042003703c801" + "41de85c000412841fb9dc0004114200541201022417141f690c0004125103c200041dc016a" + "200041346a280100360200200041d4016a2000412c6a290100370200200020002901243702" + "cc01200041808080083602c801200041003b01c0012005411841fb9dc0004114200041c001" + "6a2203410210224171419b91c000410e103c2007200028029801422a10014173418686c000" + "4111103c200041003b01c0014102200341021007416f41a991c000411b103c200041003b01" + "c001410220034102100a416f41c491c000412b103c200041003b01c0014101410220034102" + "100b416f41ef91c0004123103c4102100f416f41fc83c000411f103c41021010416f419786" + "c000412f103c410141021011416f41c686c0004127103c41e980c0004181201006417441ed" + "86c000411f103c41e980c00041c10010064174418c87c000411a103c200041003b01c00120" + "0141812020034102100c4174419292c0004121103c200041003b01c0012001418120200341" + "02100d417441b392c0004131103c200041003b01c0014101200141812020034102100e4174" + "41e492c0004129103c20014181201012417441a687c0004125103c20014181201013417441" + "cb87c0004135103c4101200141812010144174418088c000412d103c200141812010154174" + "41ad88c0004119103c419783c00041812041d482c000410b41df82c000410e1017417441ed" + "82c0004109103c419783c000410d41d482c00041812041df82c000410e1017417441ed82c0" + "004109103c419783c000410d41d482c000410b41df82c0004181201017417441ed82c00041" + "09103c200041003b01c00120014181202003410210164174418d93c0004121103c20004100" + "3b01c00141fb9dc00041812041fb9dc0004114200341021022417441ae93c0004118103c20" + "0041003b01c00120064114200641142001418120200341021023417441c693c000411f103c" + "200041003b01c001200541812020064114200341021024417441e593c0004122103c419783" + "c000410d200720002802980141001000417341c688c000410f103c200042d487b6f4c7d4b1" + "c0003700c001419783c000410d200041c095ebdc036a220441081025417341d588c000411c" + "103c419783c000410d2007200028029801101f417341f188c0004116103c20044108200341" + "0810264173418789c0004118103c200341082004410810264173419f89c0004118103c2000" + "41003b01ec012004410820034108200041ec016a22024102410010274173418794c0004114" + "103c200041003b01ec01200341082004410820024102410010274173419b94c0004114103c" + "200041003b01ec0120044108200341082002410241001028417341af94c0004119103c2000" + "41003b01ec0120034108200441082002410241001028417341c894c0004119103c20004100" + "3b01ec0120044108200341082002410241001029417341e194c0004119103c200041003b01" + "ec0120034108200441082002410241001029417341fa94c0004119103c200041003b01ec01" + "2004410820034108200241024100102a4173419395c0004117103c200041003b01ec012003" + "410820044108200241024100102a417341aa95c0004117103c200041003b01ec0120044108" + "4103200241024100102b417341c195c0004114103c200041003b01ec012004410841032002" + "41024100102c417341d595c0004113103c200041003b01ec0120044108200241024100102d" + "417341e895c0004113103c200120002802980141001009417141b789c0004123103c200041" + "003b01ec01200641142001200028029801200241021018417141fb95c000411a103c200041" + "003b01ec0120012000280298012002410210194171419596c0004121103c200041003b01ec" + "01200120002802980120024102101a417141b696c0004120103c2001200028029801101b41" + "7141da89c0004120103c2001200028029801101c417141fa89c0004127103c200041003602" + "ec01200120002802980120024104101d417141d696c0004121103c200041003b01ec012001" + "200028029801200241021008417141f796c0004123103c200041003b01ec01200120002802" + "9801410120024102102e4171419a97c0004121103c200041003b01ec012001200028029801" + "22042006411420012004200241021023417141bb97c0004127103c200041003b01ec012006" + "41142001200028029801220420012004200241021023417141e297c0004127103c20004100" + "3b01ec0120012000280298012006411420024102102f4171418998c0004125103c20004100" + "3b01ec0120064114200120002802980120024102102f417141ae98c0004125103c20004100" + "3b01ec01200120002802980120064114200241021030417141d398c000412c103c20004100" + "3b01ec01200641142001200028029801200241021030417141ff98c000412c103c20004100" + "3b01ec012001200028029801200241021031417141ab99c000411f103c200041003b01ec01" + "20012000280298014101200241021032417141ca99c0004122103c200041003b01ec012001" + "2000280298012006411441ca85c0004114200241021021417141ec99c0004121103c200041" + "003b01ec0120064114200120002802980141ca85c00041142002410210214171418d9ac000" + "4121103c200041003b01ec0120012000280298014101200241021033417141ae9ac0004128" + "103c200041003b01ec01200541182001200028029801200241021024417141d69ac0004123" + "103c200041003b01ec0120012000280298014101200241021034417141f99ac0004125103c" + "200041003b01ec01200120002802980141012002410210354171419e9bc0004121103c2000" + "41003b01ec0120012000280298014101200241021036417141bf9bc0004122103c20004100" + "3b01ec012001200028029801200641144101200241021037417141e19bc0004124103c2000" + "41003b01ec012006411420012000280298014101200241021037417141859cc0004124103c" + "200041003b01ec0120012000280298014101200241021038417141a99cc000412f103c2000" + "41003b01ec012001200028029801200241021039417141d89cc0004123103c200041003b01" + "ec012001200028029801410120024102103a417141fb9cc0004122103c200041003b01ec01" + "2001200028029801410120024102103b4171419d9dc0004121103c200041003b01ec012001" + "20002802980141a18ac0004120200241021018417141be9dc000411c103c419783c000410d" + "2001200028029801101e417141c18ac0004122103c419797abdd03410d41a18ac000412041" + "001000417341e38ac0004110103c419797abdd03410d200341081025417341f38ac000411d" + "103c419797abdd03410d20064114101e417341908bc0004118103c419797abdd03410d41c5" + "83c0004108101f417341a88bc0004117103c20012000280298012001418120410010004174" + "41bf8bc000410e103c200141812042011001417441cd8bc0004112103c419783c000418120" + "200341081025417441df8bc000411b103c419783c00041812020064114101e417441fa8bc0" + "004116103c419783c00041812041c583c0004108101f417441908cc0004115103c419783c0" + "00410d2001200028029801101f417141a58cc0004119103c200041003b01ec012001200028" + "02980120064114200241021024417141da9dc0004121103c200041f0016a240041010f0b0b" + "418080c000410b417f20022002417f4e1bac1001000b0be61d0200418080c0000bde056572" + "726f725f636f64653d54455354204641494c45442424242424205354415254494e47205741" + "534d20455845435554494f4e2024242424246765745f6c65646765725f73716e6765745f70" + "6172656e745f6c65646765725f74696d656765745f626173655f666565746573745f616d65" + "6e646d656e74616d656e646d656e745f656e61626c656463616368655f6c65646765725f6f" + "626a6765745f74785f61727261795f6c656e6765745f63757272656e745f6c65646765725f" + "6f626a5f61727261795f6c656e6765745f6c65646765725f6f626a5f61727261795f6c656e" + "6765745f74785f6e65737465645f61727261795f6c656e6765745f63757272656e745f6c65" + "646765725f6f626a5f6e65737465645f61727261795f6c656e6765745f6c65646765725f6f" + "626a5f6e65737465645f61727261795f6c656e7570646174655f6461746174657374206d65" + "737361676574657374207075626b657974657374207369676e6174757265636865636b5f73" + "69676765745f6e66745f666c6167736765745f6e66745f7472616e736665725f6665657465" + "7374696e6720747261636574726163655f6163636f756e74400000000000005f7472616365" + "5f616d6f756e74400000000000000074726163655f616d6f756e745f7a65726f6765745f70" + "6172656e745f6c65646765725f686173685f6e65675f7074726765745f74785f6172726179" + "5f6c656e5f696e76616c69645f736669656c646765745f74785f6e65737465645f61727261" + "795f6c656e5f6e65675f7074726765745f74785f6e65737465645f61727261795f6c656e5f" + "6e65675f6c656e6765745f74785f6e65737465645f61727261795f6c656e5f746f6f5f6c6f" + "6e676765745f74785f6e65737465645f61727261795f6c656e5f7074725f6f6f6263616368" + "655f6c65646765725f6f626a5f7074725f6f6f6263616368655f6c65646765725f6f626a5f" + "77726f6e675f6c656e555344303030303030303030303030303030303000418686c0000bf5" + "1774726163655f6e756d5f6f6f625f7374726765745f63757272656e745f6c65646765725f" + "6f626a5f61727261795f6c656e5f696e76616c69645f736669656c646765745f6c65646765" + "725f6f626a5f61727261795f6c656e5f696e76616c69645f736669656c64616d656e646d65" + "6e745f656e61626c65645f746f6f5f6269675f736c696365616d656e646d656e745f656e61" + "626c65645f746f6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f" + "746f6f5f6269675f736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e" + "65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f6c656467" + "65725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c696365" + "7570646174655f646174615f746f6f5f6269675f736c69636574726163655f6f6f625f736c" + "69636574726163655f6f70617175655f666c6f61745f6f6f625f736c69636574726163655f" + "616d6f756e745f6f6f625f736c696365666c6f61745f636f6d706172655f6f6f625f736c69" + "636531666c6f61745f636f6d706172655f6f6f625f736c6963653263616368655f6c656467" + "65725f6f626a5f77726f6e675f73697a655f75696e743235366765745f6e66745f666c6167" + "735f77726f6e675f73697a655f75696e743235366765745f6e66745f7472616e736665725f" + "6665655f77726f6e675f73697a655f75696e74323536303030303030303030303030303030" + "303030303030303030303030303030303174726163655f6163636f756e745f77726f6e675f" + "73697a655f6163636f756e74696474726163655f6f6f625f737472696e6774726163655f6f" + "70617175655f666c6f61745f6f6f625f737472696e6774726163655f6163636f756e745f6f" + "6f625f737472696e6774726163655f616d6f756e745f6f6f625f737472696e677472616365" + "5f746f6f5f6c6f6e6774726163655f6e756d5f746f6f5f6c6f6e6774726163655f6f706171" + "75655f666c6f61745f746f6f5f6c6f6e6774726163655f6163636f756e745f746f6f5f6c6f" + "6e6774726163655f616d6f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f77" + "726f6e675f6c656e6774686765745f706172656e745f6c65646765725f686173686765745f" + "63757272656e745f6c65646765725f6f626a5f6669656c646765745f6c65646765725f6f62" + "6a5f6669656c646765745f74785f6e65737465645f6669656c646765745f63757272656e74" + "5f6c65646765725f6f626a5f6e65737465645f6669656c646765745f6c65646765725f6f62" + "6a5f6e65737465645f6669656c64636f6d707574655f7368613531325f68616c666765745f" + "6e66746765745f6e66745f6973737565726765745f6e66745f7461786f6e6765745f6e6674" + "5f73657269616c6765745f706172656e745f6c65646765725f686173685f6e65675f6c656e" + "6765745f706172656e745f6c65646765725f686173685f6275665f746f6f5f736d616c6c67" + "65745f706172656e745f6c65646765725f686173685f6c656e5f746f6f5f6c6f6e67666c6f" + "61745f66726f6d5f75696e745f6c656e5f6f6f62666c6f61745f66726f6d5f75696e745f77" + "726f6e675f6c656e6163636f756e745f6b65796c65745f6c656e5f6f6f626163636f756e74" + "5f6b65796c65745f77726f6e675f6c656e6c696e655f6b65796c65745f6c656e5f6f6f625f" + "63757272656e63796c696e655f6b65796c65745f77726f6e675f6c656e5f63757272656e63" + "79616d6d5f6b65796c65745f6c656e5f6f6f625f617373657432616d6d5f6b65796c65745f" + "6c656e5f77726f6e675f6c656e5f617373657432616d6d5f6b65796c65745f6c656e5f7772" + "6f6e675f6e6f6e5f7872705f63757272656e63795f6c656e616d6d5f6b65796c65745f6c65" + "6e5f77726f6e675f7872705f63757272656e63795f6c656e616d6d5f6b65796c65745f6d70" + "746765745f74785f6669656c645f696e76616c69645f736669656c646765745f6375727265" + "6e745f6c65646765725f6f626a5f6669656c645f696e76616c69645f736669656c64676574" + "5f6c65646765725f6f626a5f6669656c645f696e76616c69645f736669656c646765745f74" + "785f6e65737465645f6669656c645f746f6f5f6269675f736c6963656765745f6375727265" + "6e745f6c65646765725f6f626a5f6e65737465645f6669656c645f746f6f5f6269675f736c" + "6963656765745f6c65646765725f6f626a5f6e65737465645f6669656c645f746f6f5f6269" + "675f736c696365636f6d707574655f7368613531325f68616c665f746f6f5f6269675f736c" + "696365616d6d5f6b65796c65745f746f6f5f6269675f736c69636563726564656e7469616c" + "5f6b65796c65745f746f6f5f6269675f736c6963656d70746f6b656e5f6b65796c65745f74" + "6f6f5f6269675f736c6963655f6d70746964666c6f61745f6164645f6f6f625f736c696365" + "31666c6f61745f6164645f6f6f625f736c69636532666c6f61745f73756274726163745f6f" + "6f625f736c69636531666c6f61745f73756274726163745f6f6f625f736c69636532666c6f" + "61745f6d756c7469706c795f6f6f625f736c69636531666c6f61745f6d756c7469706c795f" + "6f6f625f736c69636532666c6f61745f6469766964655f6f6f625f736c69636531666c6f61" + "745f6469766964655f6f6f625f736c69636532666c6f61745f726f6f745f6f6f625f736c69" + "6365666c6f61745f706f775f6f6f625f736c696365666c6f61745f6c6f675f6f6f625f736c" + "6963656765745f6e66745f77726f6e675f73697a655f75696e743235366765745f6e66745f" + "6973737565725f77726f6e675f73697a655f75696e743235366765745f6e66745f7461786f" + "6e5f77726f6e675f73697a655f75696e743235366765745f6e66745f73657269616c5f7772" + "6f6e675f73697a655f75696e743235366163636f756e745f6b65796c65745f77726f6e675f" + "73697a655f6163636f756e746964636865636b5f6b65796c65745f77726f6e675f73697a65" + "5f6163636f756e74696463726564656e7469616c5f6b65796c65745f77726f6e675f73697a" + "655f6163636f756e7469643163726564656e7469616c5f6b65796c65745f77726f6e675f73" + "697a655f6163636f756e7469643264656c65676174655f6b65796c65745f77726f6e675f73" + "697a655f6163636f756e7469643164656c65676174655f6b65796c65745f77726f6e675f73" + "697a655f6163636f756e746964326465706f7369745f707265617574685f6b65796c65745f" + "77726f6e675f73697a655f6163636f756e746964316465706f7369745f707265617574685f" + "6b65796c65745f77726f6e675f73697a655f6163636f756e746964326469645f6b65796c65" + "745f77726f6e675f73697a655f6163636f756e746964657363726f775f6b65796c65745f77" + "726f6e675f73697a655f6163636f756e7469646c696e655f6b65796c65745f77726f6e675f" + "73697a655f6163636f756e746964316c696e655f6b65796c65745f77726f6e675f73697a65" + "5f6163636f756e746964326d70745f69737375616e63655f6b65796c65745f77726f6e675f" + "73697a655f6163636f756e7469646d70746f6b656e5f6b65796c65745f77726f6e675f7369" + "7a655f6163636f756e7469646e66745f6f666665725f6b65796c65745f77726f6e675f7369" + "7a655f6163636f756e7469646f666665725f6b65796c65745f77726f6e675f73697a655f61" + "63636f756e7469646f7261636c655f6b65796c65745f77726f6e675f73697a655f6163636f" + "756e7469647061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e" + "746964317061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e74" + "6964327065726d697373696f6e65645f646f6d61696e5f6b65796c65745f77726f6e675f73" + "697a655f6163636f756e7469647369676e6572735f6b65796c65745f77726f6e675f73697a" + "655f6163636f756e7469647469636b65745f6b65796c65745f77726f6e675f73697a655f61" + "63636f756e7469647661756c745f6b65796c65745f77726f6e675f73697a655f6163636f75" + "6e7469646765745f6e66745f77726f6e675f73697a655f6163636f756e7469646d70746f6b" + "656e5f6b65796c65745f6d707469645f77726f6e675f6c656e677468004d0970726f647563" + "65727302086c616e6775616765010452757374000c70726f6365737365642d627901057275" + "7374631d312e38392e30202832393438333838336520323032352d30382d3034290094010f" + "7461726765745f6665617475726573082b0f6d757461626c652d676c6f62616c732b136e6f" + "6e7472617070696e672d6670746f696e742b0b62756c6b2d6d656d6f72792b087369676e2d" + "6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c75652b0f62756c" + "6b2d6d656d6f72792d6f70742b1663616c6c2d696e6469726563742d6f7665726c6f6e67"; extern std::string const floatTestsWasmHex = "0061736d0100000001430860077f7f7f7f7f7f7f017f60057f7f7f7f7f017f60047f7f7f7f" diff --git a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp index 7d2136f4f7..3fda13424a 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp @@ -715,11 +715,15 @@ WasmHostFunctionsImpl::trace( Slice const& data, bool asHex) { + auto const ret = msg.size() + data.size() * (asHex ? 2 : 1); #ifdef DEBUG_OUTPUT - auto j = getJournal().error(); + auto& j = std::cerr; #else + if (!getJournal().active(beast::severities::kTrace)) + return ret; auto j = getJournal().trace(); #endif + if (!asHex) { j << "HF TRACE (" << leKey.key << "): " << msg << " " @@ -735,19 +739,32 @@ WasmHostFunctionsImpl::trace( j << "HF DEV TRACE (" << leKey.key << "): " << msg << " " << hex; } - return msg.size() + data.size() * (asHex ? 2 : 1); +#ifdef DEBUG_OUTPUT + j << std::endl; +#endif + + return ret; } Expected WasmHostFunctionsImpl::traceNum(std::string_view const& msg, int64_t data) { + auto const ret = msg.size() + sizeof(data); #ifdef DEBUG_OUTPUT - auto j = getJournal().error(); + auto& j = std::cerr; #else + if (!getJournal().active(beast::severities::kTrace)) + return ret; auto j = getJournal().trace(); #endif + j << "HF TRACE NUM(" << leKey.key << "): " << msg << " " << data; - return msg.size() + sizeof(data); + +#ifdef DEBUG_OUTPUT + j << std::endl; +#endif + + return ret; } Expected @@ -755,16 +772,24 @@ WasmHostFunctionsImpl::traceAccount( std::string_view const& msg, AccountID const& account) { + auto const ret = msg.size() + account.size(); #ifdef DEBUG_OUTPUT - auto j = getJournal().error(); + auto& j = std::cerr; #else + if (!getJournal().active(beast::severities::kTrace)) + return ret; auto j = getJournal().trace(); #endif auto const accountStr = toBase58(account); j << "HF TRACE ACCOUNT(" << leKey.key << "): " << msg << " " << accountStr; - return msg.size() + accountStr.size(); + +#ifdef DEBUG_OUTPUT + j << std::endl; +#endif + + return ret; } Expected @@ -772,14 +797,22 @@ WasmHostFunctionsImpl::traceFloat( std::string_view const& msg, Slice const& data) { + auto const ret = msg.size() + data.size(); #ifdef DEBUG_OUTPUT - auto j = getJournal().error(); + auto& j = std::cerr; #else + if (!getJournal().active(beast::severities::kTrace)) + return ret; auto j = getJournal().trace(); #endif auto const s = floatToString(data); j << "HF TRACE FLOAT(" << leKey.key << "): " << msg << " " << s; - return msg.size() + s.size(); + +#ifdef DEBUG_OUTPUT + j << std::endl; +#endif + + return ret; } Expected @@ -787,14 +820,22 @@ WasmHostFunctionsImpl::traceAmount( std::string_view const& msg, STAmount const& amount) { + auto const ret = msg.size(); #ifdef DEBUG_OUTPUT - auto j = getJournal().error(); + auto& j = std::cerr; #else + if (!getJournal().active(beast::severities::kTrace)) + return ret; auto j = getJournal().trace(); #endif auto const amountStr = amount.getFullText(); j << "HF TRACE AMOUNT(" << leKey.key << "): " << msg << " " << amountStr; - return msg.size() + amountStr.size(); + +#ifdef DEBUG_OUTPUT + j << std::endl; +#endif + + return ret; } Expected diff --git a/src/xrpld/app/wasm/detail/WasmiVM.cpp b/src/xrpld/app/wasm/detail/WasmiVM.cpp index fa61ec2679..3c56f885dd 100644 --- a/src/xrpld/app/wasm/detail/WasmiVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmiVM.cpp @@ -20,23 +20,25 @@ print_wasm_error(std::string_view msg, wasm_trap_t* trap, beast::Journal jlog) auto& j = std::cerr; #else auto j = jlog.warn(); + if (jlog.active(beast::severities::kWarning)) #endif - - wasm_byte_vec_t error_message WASM_EMPTY_VEC; - - if (trap) - wasm_trap_message(trap, &error_message); - - if (error_message.size) { - j << "WASMI Error: " << msg << ", " - << std::string_view(error_message.data, error_message.size - 1); - } - else - j << "WASMI Error: " << msg; + wasm_byte_vec_t error_message WASM_EMPTY_VEC; - if (error_message.size) - wasm_byte_vec_delete(&error_message); + if (trap) + wasm_trap_message(trap, &error_message); + + if (error_message.size) + { + j << "WASMI Error: " << msg << ", " + << std::string_view(error_message.data, error_message.size - 1); + } + else + j << "WASMI Error: " << msg; + + if (error_message.size) + wasm_byte_vec_delete(&error_message); + } if (trap) wasm_trap_delete(trap); From c626b6403a580286593a6bcd1f0c0386a529bfaa Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Tue, 13 Jan 2026 16:40:42 -0500 Subject: [PATCH 057/137] Fix unaligned access (#6208) --- src/test/app/HostFuncImpl_test.cpp | 18 ++++++++++++ src/test/app/Wasm_test.cpp | 28 +++++++++++++++++++ src/test/app/wasm_fixtures/bad_align.c | 23 +++++++++++++++ src/test/app/wasm_fixtures/fixtures.cpp | 17 +++++++++++ src/test/app/wasm_fixtures/fixtures.h | 1 + src/xrpld/app/wasm/detail/HostFuncImpl.cpp | 12 ++++++-- src/xrpld/app/wasm/detail/HostFuncWrapper.cpp | 9 +++++- 7 files changed, 105 insertions(+), 3 deletions(-) create mode 100644 src/test/app/wasm_fixtures/bad_align.c diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 9a5326e18d..b53126671b 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -594,6 +594,24 @@ struct HostFuncImpl_test : public beast::unit_test::suite } } + { + // unaligned locator + std::vector locatorVec(sizeof(int32_t) + 1); + memcpy( + locatorVec.data() + 1, &sfAccount.fieldCode, sizeof(int32_t)); + Slice locator( + reinterpret_cast(locatorVec.data() + 1), + sizeof(int32_t)); + + auto const account = hfs.getTxNestedField(locator); + if (BEAST_EXPECTS( + account.has_value(), + std::to_string(static_cast(account.error())))) + { + BEAST_EXPECT(std::ranges::equal(*account, env.master.id())); + } + } + auto expectError = [&](std::vector const& locatorVec, HostFunctionError expectedError) { Slice locator( diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index c61482a057..0eca654335 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -965,6 +965,33 @@ struct Wasm_test : public beast::unit_test::suite env.close(); } + void + testBadAlign() + { + testcase("Wasm Bad Align"); + + // bad_align.c + auto wasmStr = boost::algorithm::unhex(badAlignHex); + Bytes wasm(wasmStr.begin(), wasmStr.end()); + + using namespace test::jtx; + + Env env{*this}; + TestHostFunctions hf(env); + ImportVec imports = createWasmImport(hf); + + { // Calls float_from_uint with bad aligment. + // Can be checked through codecov + auto& engine = WasmEngine::instance(); + + auto re = engine.run( + wasm, "test", {}, imports, &hf, 1'000'000, env.journal); + BEAST_EXPECT(re && re->result == 0xbab88d46); + } + + env.close(); + } + void run() override { @@ -995,6 +1022,7 @@ struct Wasm_test : public beast::unit_test::suite testStartFunctionLoop(); testBadAlloc(); + testBadAlign(); // perfTest(); } diff --git a/src/test/app/wasm_fixtures/bad_align.c b/src/test/app/wasm_fixtures/bad_align.c new file mode 100644 index 0000000000..ff29456c2a --- /dev/null +++ b/src/test/app/wasm_fixtures/bad_align.c @@ -0,0 +1,23 @@ +#include + +int32_t +float_from_uint(uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); +int32_t +get_tx_nested_field(uint8_t const*, int32_t, uint8_t*, int32_t); + +uint8_t e_data[32 * 1024]; + +int32_t +test() +{ + e_data[1] = 0xFF; + e_data[2] = 0xFF; + e_data[3] = 0xFF; + e_data[4] = 0xFF; + e_data[5] = 0xFF; + e_data[6] = 0xFF; + e_data[7] = 0xFF; + e_data[8] = 0xFF; + float_from_uint(&e_data[1], 8, &e_data[35], 12, 0); + return *((int32_t*)(&e_data[36])); +} diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 3f339e7a0d..44d4403382 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -1378,3 +1378,20 @@ extern std::string const badAllocHex = "3732302900490f7461726765745f6665617475726573042b0f6d757461626c652d676c6f62" "616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c7469" "76616c7565"; + +extern std::string const badAlignHex = + "0061736d0100000001110360057f7f7f7f7f017f6000006000017f02170103656e760f666c" + "6f61745f66726f6d5f75696e7400000303020102050301000206400a7f004180080b7f0041" + "80080b7f00418088020b7f00418088020b7f00418088060b7f004180080b7f00418088060b" + "7f00418080080b7f0041000b7f0041010b07b1010d066d656d6f72790200115f5f7761736d" + "5f63616c6c5f63746f727300010474657374000206655f6461746103000c5f5f64736f5f68" + "616e646c6503010a5f5f646174615f656e6403020b5f5f737461636b5f6c6f7703030c5f5f" + "737461636b5f6869676803040d5f5f676c6f62616c5f6261736503050b5f5f686561705f62" + "61736503060a5f5f686561705f656e6403070d5f5f6d656d6f72795f6261736503080c5f5f" + "7461626c655f6261736503090a240202000b1f00418108427f370000418108410841a30841" + "0c410010001a41a4082802000b007f0970726f647563657273010c70726f6365737365642d" + "62790105636c616e675f31392e312e352d776173692d73646b202868747470733a2f2f6769" + "746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a6563742061623462356132646235" + "3832393538616631656533303861373930636664623432626432343732302900490f746172" + "6765745f6665617475726573042b0f6d757461626c652d676c6f62616c732b087369676e2d" + "6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; diff --git a/src/test/app/wasm_fixtures/fixtures.h b/src/test/app/wasm_fixtures/fixtures.h index bb7a80f791..ff72711000 100644 --- a/src/test/app/wasm_fixtures/fixtures.h +++ b/src/test/app/wasm_fixtures/fixtures.h @@ -84,3 +84,4 @@ extern std::string const infiniteLoopWasmHex; extern std::string const startLoopHex; extern std::string const badAllocHex; +extern std::string const badAlignHex; diff --git a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp index 3fda13424a..b57dae7f7c 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp @@ -196,8 +196,16 @@ locateField(STObject const& obj, Slice const& locator) if (locator.empty() || (locator.size() & 3)) // must be multiple of 4 return Unexpected(HostFunctionError::LOCATOR_MALFORMED); - int32_t const* locPtr = reinterpret_cast(locator.data()); - int32_t const locSize = locator.size() / 4; + int32_t locBuf[maxWasmParamLength / sizeof(int32_t)]; + int32_t const* locPtr = &locBuf[0]; + int32_t const locSize = locator.size() / sizeof(int32_t); + + uintptr_t p = reinterpret_cast(locator.data()); + if (p & (alignof(int32_t) - 1)) // unaligned + memcpy(&locBuf[0], locator.data(), locator.size()); + else + locPtr = reinterpret_cast(locator.data()); + STBase const* field = nullptr; auto const& knownSFields = SField::getKnownCodeToField(); diff --git a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp index b5da69f71d..ee284fa6e9 100644 --- a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp @@ -71,7 +71,14 @@ getDataUInt64(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) if (r->size() != sizeof(uint64_t)) return Unexpected(HostFunctionError::INVALID_PARAMS); - return *reinterpret_cast(r->data()); + uint64_t x; + uintptr_t p = reinterpret_cast(r->data()); + if (p & (alignof(uint64_t) - 1)) // unaligned + memcpy(&x, r->data(), sizeof(uint64_t)); + else + x = *reinterpret_cast(r->data()); + + return x; } template From 409c67494a413f434807e084ac82abf08139d6ca Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 13 Jan 2026 20:34:57 -0500 Subject: [PATCH 058/137] move helper functions to separate file (#6178) * move helper functions to separate file * break it up into sections, split out float helpers * split impls into multiple cpp files * namespace detail * fix build issue * fix tests * clean up * put float helpers into wasm_float namespace --- src/test/app/TestHostFunctions.h | 24 +- src/xrpld/app/wasm/HostFunc.h | 4 + src/xrpld/app/wasm/detail/HostFuncImpl.cpp | 1321 +---------------- .../app/wasm/detail/HostFuncImplFloat.cpp | 529 +++++++ .../app/wasm/detail/HostFuncImplGetter.cpp | 374 +++++ .../app/wasm/detail/HostFuncImplKeylet.cpp | 228 +++ .../wasm/detail/HostFuncImplLedgerHeader.cpp | 59 + src/xrpld/app/wasm/detail/HostFuncImplNFT.cpp | 68 + .../app/wasm/detail/HostFuncImplTrace.cpp | 141 ++ 9 files changed, 1422 insertions(+), 1326 deletions(-) create mode 100644 src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp create mode 100644 src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp create mode 100644 src/xrpld/app/wasm/detail/HostFuncImplKeylet.cpp create mode 100644 src/xrpld/app/wasm/detail/HostFuncImplLedgerHeader.cpp create mode 100644 src/xrpld/app/wasm/detail/HostFuncImplNFT.cpp create mode 100644 src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index a7f4c8038b..cbc75f1ed9 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -468,7 +468,7 @@ public: return ret; auto j = getJournal().trace(); #endif - auto const s = floatToString(data); + auto const s = wasm_float::floatToString(data); j << "WASM TRACE FLOAT: " << msg << " " << s; #ifdef DEBUG_OUTPUT @@ -502,67 +502,67 @@ public: Expected floatFromInt(int64_t x, int32_t mode) override { - return floatFromIntImpl(x, mode); + return wasm_float::floatFromIntImpl(x, mode); } Expected floatFromUint(uint64_t x, int32_t mode) override { - return floatFromUintImpl(x, mode); + return wasm_float::floatFromUintImpl(x, mode); } Expected floatSet(int64_t mantissa, int32_t exponent, int32_t mode) override { - return floatSetImpl(mantissa, exponent, mode); + return wasm_float::floatSetImpl(mantissa, exponent, mode); } Expected floatCompare(Slice const& x, Slice const& y) override { - return floatCompareImpl(x, y); + return wasm_float::floatCompareImpl(x, y); } Expected floatAdd(Slice const& x, Slice const& y, int32_t mode) override { - return floatAddImpl(x, y, mode); + return wasm_float::floatAddImpl(x, y, mode); } Expected floatSubtract(Slice const& x, Slice const& y, int32_t mode) override { - return floatSubtractImpl(x, y, mode); + return wasm_float::floatSubtractImpl(x, y, mode); } Expected floatMultiply(Slice const& x, Slice const& y, int32_t mode) override { - return floatMultiplyImpl(x, y, mode); + return wasm_float::floatMultiplyImpl(x, y, mode); } Expected floatDivide(Slice const& x, Slice const& y, int32_t mode) override { - return floatDivideImpl(x, y, mode); + return wasm_float::floatDivideImpl(x, y, mode); } Expected floatRoot(Slice const& x, int32_t n, int32_t mode) override { - return floatRootImpl(x, n, mode); + return wasm_float::floatRootImpl(x, n, mode); } Expected floatPower(Slice const& x, int32_t n, int32_t mode) override { - return floatPowerImpl(x, n, mode); + return wasm_float::floatPowerImpl(x, n, mode); } Expected floatLog(Slice const& x, int32_t mode) override { - return floatLogImpl(x, mode); + return wasm_float::floatLogImpl(x, mode); } }; diff --git a/src/xrpld/app/wasm/HostFunc.h b/src/xrpld/app/wasm/HostFunc.h index e59507757c..0ee4a615ce 100644 --- a/src/xrpld/app/wasm/HostFunc.h +++ b/src/xrpld/app/wasm/HostFunc.h @@ -44,6 +44,8 @@ HfErrorToInt(HostFunctionError e) return static_cast(e); } +namespace wasm_float { + std::string floatToString(Slice const& data); @@ -80,6 +82,8 @@ floatPowerImpl(Slice const& x, int32_t n, int32_t mode); Expected floatLogImpl(Slice const& x, int32_t mode); +} // namespace wasm_float + struct HostFunctions { beast::Journal j_; diff --git a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp index b57dae7f7c..c0c514129f 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp @@ -1,415 +1,13 @@ -#include -#include #include #include #include -#ifdef _DEBUG -// #define DEBUG_OUTPUT 1 -#endif - namespace xrpl { -Expected -WasmHostFunctionsImpl::getLedgerSqn() -{ - auto seq = ctx.view().seq(); - if (seq > std::numeric_limits::max()) - return Unexpected(HostFunctionError::INTERNAL); // LCOV_EXCL_LINE - return static_cast(seq); -} - -Expected -WasmHostFunctionsImpl::getParentLedgerTime() -{ - auto time = ctx.view().parentCloseTime().time_since_epoch().count(); - if (time > std::numeric_limits::max()) - return Unexpected(HostFunctionError::INTERNAL); - return static_cast(time); -} - -Expected -WasmHostFunctionsImpl::getParentLedgerHash() -{ - return ctx.view().header().parentHash; -} - -Expected -WasmHostFunctionsImpl::getBaseFee() -{ - auto fee = ctx.view().fees().base.drops(); - if (fee > std::numeric_limits::max()) - return Unexpected(HostFunctionError::INTERNAL); - return static_cast(fee); -} - -Expected -WasmHostFunctionsImpl::isAmendmentEnabled(uint256 const& amendmentId) -{ - return ctx.view().rules().enabled(amendmentId); -} - -Expected -WasmHostFunctionsImpl::isAmendmentEnabled(std::string_view const& amendmentName) -{ - auto const& table = ctx.app.getAmendmentTable(); - auto const amendment = table.find(std::string(amendmentName)); - return ctx.view().rules().enabled(amendment); -} - -Expected -WasmHostFunctionsImpl::cacheLedgerObj(uint256 const& objId, int32_t cacheIdx) -{ - auto const& keylet = keylet::unchecked(objId); - if (cacheIdx < 0 || cacheIdx > MAX_CACHE) - return Unexpected(HostFunctionError::SLOT_OUT_RANGE); - - if (cacheIdx == 0) - { - for (cacheIdx = 0; cacheIdx < MAX_CACHE; ++cacheIdx) - if (!cache[cacheIdx]) - break; - } - else - { - cacheIdx--; // convert to 0-based index - } - - if (cacheIdx >= MAX_CACHE) - return Unexpected(HostFunctionError::SLOTS_FULL); - - cache[cacheIdx] = ctx.view().read(keylet); - if (!cache[cacheIdx]) - return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); - return cacheIdx + 1; // return 1-based index -} - -static Expected -getAnyFieldData(STBase const* obj) -{ - // auto const& fname = obj.getFName(); - if (!obj) - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); - - auto const stype = obj->getSType(); - switch (stype) - { - // LCOV_EXCL_START - case STI_UNKNOWN: - case STI_NOTPRESENT: - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); - break; - // LCOV_EXCL_STOP - case STI_OBJECT: - case STI_ARRAY: - return Unexpected(HostFunctionError::NOT_LEAF_FIELD); - break; - case STI_ACCOUNT: { - auto const* account(static_cast(obj)); - auto const& data = account->value(); - return Bytes{data.begin(), data.end()}; - } - break; - case STI_AMOUNT: - // will be processed by serializer - break; - case STI_ISSUE: { - auto const* issue(static_cast(obj)); - Asset const& asset(issue->value()); - // XRP and IOU will be processed by serializer - if (asset.holds()) - { - // MPT - auto const& mptIssue = asset.get(); - auto const& mptID = mptIssue.getMptID(); - return Bytes{mptID.cbegin(), mptID.cend()}; - } - } - break; - case STI_VL: { - auto const* vl(static_cast(obj)); - auto const& data = vl->value(); - return Bytes{data.begin(), data.end()}; - } - break; - case STI_UINT16: { - auto const& num(static_cast const*>(obj)); - std::uint16_t const data = num->value(); - auto const* b = reinterpret_cast(&data); - auto const* e = reinterpret_cast(&data + 1); - return Bytes{b, e}; - } - case STI_UINT32: { - auto const* num(static_cast const*>(obj)); - std::uint32_t const data = num->value(); - auto const* b = reinterpret_cast(&data); - auto const* e = reinterpret_cast(&data + 1); - return Bytes{b, e}; - } - break; - default: - break; // default to serializer - } - - Serializer msg; - obj->add(msg); - auto const data = msg.getData(); - - return data; -} - -Expected -WasmHostFunctionsImpl::getTxField(SField const& fname) -{ - return getAnyFieldData(ctx.tx.peekAtPField(fname)); -} - -Expected -WasmHostFunctionsImpl::getCurrentLedgerObjField(SField const& fname) -{ - auto const sle = getCurrentLedgerObj(); - if (!sle.has_value()) - return Unexpected(sle.error()); - return getAnyFieldData(sle.value()->peekAtPField(fname)); -} - -Expected -WasmHostFunctionsImpl::getLedgerObjField(int32_t cacheIdx, SField const& fname) -{ - auto const normalizedIdx = normalizeCacheIndex(cacheIdx); - if (!normalizedIdx.has_value()) - return Unexpected(normalizedIdx.error()); - return getAnyFieldData(cache[normalizedIdx.value()]->peekAtPField(fname)); -} - -static inline bool -noField(STBase const* field) -{ - return !field || (STI_NOTPRESENT == field->getSType()) || - (STI_UNKNOWN == field->getSType()); -} - -static Expected -locateField(STObject const& obj, Slice const& locator) -{ - if (locator.empty() || (locator.size() & 3)) // must be multiple of 4 - return Unexpected(HostFunctionError::LOCATOR_MALFORMED); - - int32_t locBuf[maxWasmParamLength / sizeof(int32_t)]; - int32_t const* locPtr = &locBuf[0]; - int32_t const locSize = locator.size() / sizeof(int32_t); - - uintptr_t p = reinterpret_cast(locator.data()); - if (p & (alignof(int32_t) - 1)) // unaligned - memcpy(&locBuf[0], locator.data(), locator.size()); - else - locPtr = reinterpret_cast(locator.data()); - - STBase const* field = nullptr; - auto const& knownSFields = SField::getKnownCodeToField(); - - { - int32_t const sfieldCode = locPtr[0]; - auto const it = knownSFields.find(sfieldCode); - if (it == knownSFields.end()) - return Unexpected(HostFunctionError::INVALID_FIELD); - - auto const& fname(*it->second); - field = obj.peekAtPField(fname); - if (noField(field)) - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); - } - - for (int i = 1; i < locSize; ++i) - { - int32_t const sfieldCode = locPtr[i]; - - if (STI_ARRAY == field->getSType()) - { - auto const* arr = static_cast(field); - if (sfieldCode >= arr->size()) - return Unexpected(HostFunctionError::INDEX_OUT_OF_BOUNDS); - field = &(arr->operator[](sfieldCode)); - } - else if (STI_OBJECT == field->getSType()) - { - auto const* o = static_cast(field); - - auto const it = knownSFields.find(sfieldCode); - if (it == knownSFields.end()) - return Unexpected(HostFunctionError::INVALID_FIELD); - - auto const& fname(*it->second); - field = o->peekAtPField(fname); - } - else // simple field must be the last one - { - return Unexpected(HostFunctionError::LOCATOR_MALFORMED); - } - - if (noField(field)) - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); - } - - return field; -} - -Expected -WasmHostFunctionsImpl::getTxNestedField(Slice const& locator) -{ - auto const r = locateField(ctx.tx, locator); - if (!r) - return Unexpected(r.error()); - - return getAnyFieldData(r.value()); -} - -Expected -WasmHostFunctionsImpl::getCurrentLedgerObjNestedField(Slice const& locator) -{ - auto const sle = getCurrentLedgerObj(); - if (!sle.has_value()) - return Unexpected(sle.error()); - - auto const r = locateField(*sle.value(), locator); - if (!r) - return Unexpected(r.error()); - - return getAnyFieldData(r.value()); -} - -Expected -WasmHostFunctionsImpl::getLedgerObjNestedField( - int32_t cacheIdx, - Slice const& locator) -{ - auto const normalizedIdx = normalizeCacheIndex(cacheIdx); - if (!normalizedIdx.has_value()) - return Unexpected(normalizedIdx.error()); - - auto const r = locateField(*cache[normalizedIdx.value()], locator); - if (!r) - return Unexpected(r.error()); - - return getAnyFieldData(r.value()); -} - -Expected -WasmHostFunctionsImpl::getTxArrayLen(SField const& fname) -{ - if (fname.fieldType != STI_ARRAY) - return Unexpected(HostFunctionError::NO_ARRAY); - - auto const* field = ctx.tx.peekAtPField(fname); - if (noField(field)) - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); - - if (field->getSType() != STI_ARRAY) - return Unexpected(HostFunctionError::NO_ARRAY); // LCOV_EXCL_LINE - int32_t const sz = static_cast(field)->size(); - - return sz; -} - -Expected -WasmHostFunctionsImpl::getCurrentLedgerObjArrayLen(SField const& fname) -{ - if (fname.fieldType != STI_ARRAY) - return Unexpected(HostFunctionError::NO_ARRAY); - - auto const sle = getCurrentLedgerObj(); - if (!sle.has_value()) - return Unexpected(sle.error()); - - auto const* field = sle.value()->peekAtPField(fname); - if (noField(field)) - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); - - if (field->getSType() != STI_ARRAY) - return Unexpected(HostFunctionError::NO_ARRAY); // LCOV_EXCL_LINE - int32_t const sz = static_cast(field)->size(); - - return sz; -} - -Expected -WasmHostFunctionsImpl::getLedgerObjArrayLen( - int32_t cacheIdx, - SField const& fname) -{ - if (fname.fieldType != STI_ARRAY) - return Unexpected(HostFunctionError::NO_ARRAY); - - auto const normalizedIdx = normalizeCacheIndex(cacheIdx); - if (!normalizedIdx.has_value()) - return Unexpected(normalizedIdx.error()); - - auto const* field = cache[normalizedIdx.value()]->peekAtPField(fname); - if (noField(field)) - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); - - if (field->getSType() != STI_ARRAY) - return Unexpected(HostFunctionError::NO_ARRAY); // LCOV_EXCL_LINE - - int32_t const sz = static_cast(field)->size(); - - return sz; -} - -Expected -WasmHostFunctionsImpl::getTxNestedArrayLen(Slice const& locator) -{ - auto const r = locateField(ctx.tx, locator); - if (!r) - return Unexpected(r.error()); - - auto const* field = r.value(); - if (field->getSType() != STI_ARRAY) - return Unexpected(HostFunctionError::NO_ARRAY); - int32_t const sz = static_cast(field)->size(); - - return sz; -} - -Expected -WasmHostFunctionsImpl::getCurrentLedgerObjNestedArrayLen(Slice const& locator) -{ - auto const sle = getCurrentLedgerObj(); - if (!sle.has_value()) - return Unexpected(sle.error()); - auto const r = locateField(*sle.value(), locator); - if (!r) - return Unexpected(r.error()); - - auto const* field = r.value(); - if (field->getSType() != STI_ARRAY) - return Unexpected(HostFunctionError::NO_ARRAY); - int32_t const sz = static_cast(field)->size(); - - return sz; -} - -Expected -WasmHostFunctionsImpl::getLedgerObjNestedArrayLen( - int32_t cacheIdx, - Slice const& locator) -{ - auto const normalizedIdx = normalizeCacheIndex(cacheIdx); - if (!normalizedIdx.has_value()) - return Unexpected(normalizedIdx.error()); - - auto const r = locateField(*cache[normalizedIdx.value()], locator); - if (!r) - return Unexpected(r.error()); - - auto const* field = r.value(); - if (field->getSType() != STI_ARRAY) - return Unexpected(HostFunctionError::NO_ARRAY); - int32_t const sz = static_cast(field)->size(); - - return sz; -} +// ========================================================= +// SECTION: WRITE FUNCTION +// ========================================================= Expected WasmHostFunctionsImpl::updateData(Slice const& data) @@ -422,6 +20,10 @@ WasmHostFunctionsImpl::updateData(Slice const& data) return data_->size(); } +// ========================================================= +// SECTION: UTILS +// ========================================================= + Expected WasmHostFunctionsImpl::checkSignature( Slice const& message, @@ -442,913 +44,4 @@ WasmHostFunctionsImpl::computeSha512HalfHash(Slice const& data) return hash; } -Expected -WasmHostFunctionsImpl::accountKeylet(AccountID const& account) -{ - if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - auto const keylet = keylet::account(account); - return Bytes{keylet.key.begin(), keylet.key.end()}; -} - -Expected -WasmHostFunctionsImpl::ammKeylet(Asset const& issue1, Asset const& issue2) -{ - if (issue1 == issue2) - return Unexpected(HostFunctionError::INVALID_PARAMS); - - // note: this should be removed with the MPT DEX amendment - if (issue1.holds() || issue2.holds()) - return Unexpected(HostFunctionError::INVALID_PARAMS); - - auto const keylet = keylet::amm(issue1, issue2); - return Bytes{keylet.key.begin(), keylet.key.end()}; -} - -Expected -WasmHostFunctionsImpl::checkKeylet(AccountID const& account, std::uint32_t seq) -{ - if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - auto const keylet = keylet::check(account, seq); - return Bytes{keylet.key.begin(), keylet.key.end()}; -} - -Expected -WasmHostFunctionsImpl::credentialKeylet( - AccountID const& subject, - AccountID const& issuer, - Slice const& credentialType) -{ - if (!subject || !issuer) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - - if (credentialType.empty() || - credentialType.size() > maxCredentialTypeLength) - return Unexpected(HostFunctionError::INVALID_PARAMS); - - auto const keylet = keylet::credential(subject, issuer, credentialType); - - return Bytes{keylet.key.begin(), keylet.key.end()}; -} - -Expected -WasmHostFunctionsImpl::didKeylet(AccountID const& account) -{ - if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - auto const keylet = keylet::did(account); - return Bytes{keylet.key.begin(), keylet.key.end()}; -} - -Expected -WasmHostFunctionsImpl::delegateKeylet( - AccountID const& account, - AccountID const& authorize) -{ - if (!account || !authorize) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - if (account == authorize) - return Unexpected(HostFunctionError::INVALID_PARAMS); - auto const keylet = keylet::delegate(account, authorize); - return Bytes{keylet.key.begin(), keylet.key.end()}; -} - -Expected -WasmHostFunctionsImpl::depositPreauthKeylet( - AccountID const& account, - AccountID const& authorize) -{ - if (!account || !authorize) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - if (account == authorize) - return Unexpected(HostFunctionError::INVALID_PARAMS); - auto const keylet = keylet::depositPreauth(account, authorize); - return Bytes{keylet.key.begin(), keylet.key.end()}; -} - -Expected -WasmHostFunctionsImpl::escrowKeylet(AccountID const& account, std::uint32_t seq) -{ - if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - auto const keylet = keylet::escrow(account, seq); - return Bytes{keylet.key.begin(), keylet.key.end()}; -} - -Expected -WasmHostFunctionsImpl::lineKeylet( - AccountID const& account1, - AccountID const& account2, - Currency const& currency) -{ - if (!account1 || !account2) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - if (account1 == account2) - return Unexpected(HostFunctionError::INVALID_PARAMS); - if (currency.isZero()) - return Unexpected(HostFunctionError::INVALID_PARAMS); - - auto const keylet = keylet::line(account1, account2, currency); - return Bytes{keylet.key.begin(), keylet.key.end()}; -} - -Expected -WasmHostFunctionsImpl::mptIssuanceKeylet( - AccountID const& issuer, - std::uint32_t seq) -{ - if (!issuer) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - - auto const keylet = keylet::mptIssuance(seq, issuer); - return Bytes{keylet.key.begin(), keylet.key.end()}; -} - -Expected -WasmHostFunctionsImpl::mptokenKeylet( - MPTID const& mptid, - AccountID const& holder) -{ - if (!mptid) - return Unexpected(HostFunctionError::INVALID_PARAMS); - if (!holder) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - - auto const keylet = keylet::mptoken(mptid, holder); - return Bytes{keylet.key.begin(), keylet.key.end()}; -} - -Expected -WasmHostFunctionsImpl::nftOfferKeylet( - AccountID const& account, - std::uint32_t seq) -{ - if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - auto const keylet = keylet::nftoffer(account, seq); - return Bytes{keylet.key.begin(), keylet.key.end()}; -} - -Expected -WasmHostFunctionsImpl::offerKeylet(AccountID const& account, std::uint32_t seq) -{ - if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - auto const keylet = keylet::offer(account, seq); - return Bytes{keylet.key.begin(), keylet.key.end()}; -} - -Expected -WasmHostFunctionsImpl::oracleKeylet( - AccountID const& account, - std::uint32_t documentId) -{ - if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - auto const keylet = keylet::oracle(account, documentId); - return Bytes{keylet.key.begin(), keylet.key.end()}; -} - -Expected -WasmHostFunctionsImpl::paychanKeylet( - AccountID const& account, - AccountID const& destination, - std::uint32_t seq) -{ - if (!account || !destination) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - if (account == destination) - return Unexpected(HostFunctionError::INVALID_PARAMS); - auto const keylet = keylet::payChan(account, destination, seq); - return Bytes{keylet.key.begin(), keylet.key.end()}; -} - -Expected -WasmHostFunctionsImpl::permissionedDomainKeylet( - AccountID const& account, - std::uint32_t seq) -{ - if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - auto const keylet = keylet::permissionedDomain(account, seq); - return Bytes{keylet.key.begin(), keylet.key.end()}; -} - -Expected -WasmHostFunctionsImpl::signersKeylet(AccountID const& account) -{ - if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - auto const keylet = keylet::signers(account); - return Bytes{keylet.key.begin(), keylet.key.end()}; -} - -Expected -WasmHostFunctionsImpl::ticketKeylet(AccountID const& account, std::uint32_t seq) -{ - if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - auto const keylet = keylet::ticket(account, seq); - return Bytes{keylet.key.begin(), keylet.key.end()}; -} - -Expected -WasmHostFunctionsImpl::vaultKeylet(AccountID const& account, std::uint32_t seq) -{ - if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - auto const keylet = keylet::vault(account, seq); - return Bytes{keylet.key.begin(), keylet.key.end()}; -} - -Expected -WasmHostFunctionsImpl::getNFT(AccountID const& account, uint256 const& nftId) -{ - if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - - if (!nftId) - return Unexpected(HostFunctionError::INVALID_PARAMS); - - auto obj = nft::findToken(ctx.view(), account, nftId); - if (!obj) - return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); - - auto ouri = obj->at(~sfURI); - if (!ouri) - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); - - Slice const s = ouri->value(); - return Bytes(s.begin(), s.end()); -} - -Expected -WasmHostFunctionsImpl::getNFTIssuer(uint256 const& nftId) -{ - auto const issuer = nft::getIssuer(nftId); - if (!issuer) - return Unexpected(HostFunctionError::INVALID_PARAMS); - - return Bytes{issuer.begin(), issuer.end()}; -} - -Expected -WasmHostFunctionsImpl::getNFTTaxon(uint256 const& nftId) -{ - return nft::toUInt32(nft::getTaxon(nftId)); -} - -Expected -WasmHostFunctionsImpl::getNFTFlags(uint256 const& nftId) -{ - return nft::getFlags(nftId); -} - -Expected -WasmHostFunctionsImpl::getNFTTransferFee(uint256 const& nftId) -{ - return nft::getTransferFee(nftId); -} - -Expected -WasmHostFunctionsImpl::getNFTSerial(uint256 const& nftId) -{ - return nft::getSerial(nftId); -} - -Expected -WasmHostFunctionsImpl::trace( - std::string_view const& msg, - Slice const& data, - bool asHex) -{ - auto const ret = msg.size() + data.size() * (asHex ? 2 : 1); -#ifdef DEBUG_OUTPUT - auto& j = std::cerr; -#else - if (!getJournal().active(beast::severities::kTrace)) - return ret; - auto j = getJournal().trace(); -#endif - - if (!asHex) - { - j << "HF TRACE (" << leKey.key << "): " << msg << " " - << std::string_view( - reinterpret_cast(data.data()), data.size()); - } - else - { - std::string hex; - hex.reserve(data.size() * 2); - boost::algorithm::hex( - data.begin(), data.end(), std::back_inserter(hex)); - j << "HF DEV TRACE (" << leKey.key << "): " << msg << " " << hex; - } - -#ifdef DEBUG_OUTPUT - j << std::endl; -#endif - - return ret; -} - -Expected -WasmHostFunctionsImpl::traceNum(std::string_view const& msg, int64_t data) -{ - auto const ret = msg.size() + sizeof(data); -#ifdef DEBUG_OUTPUT - auto& j = std::cerr; -#else - if (!getJournal().active(beast::severities::kTrace)) - return ret; - auto j = getJournal().trace(); -#endif - - j << "HF TRACE NUM(" << leKey.key << "): " << msg << " " << data; - -#ifdef DEBUG_OUTPUT - j << std::endl; -#endif - - return ret; -} - -Expected -WasmHostFunctionsImpl::traceAccount( - std::string_view const& msg, - AccountID const& account) -{ - auto const ret = msg.size() + account.size(); -#ifdef DEBUG_OUTPUT - auto& j = std::cerr; -#else - if (!getJournal().active(beast::severities::kTrace)) - return ret; - auto j = getJournal().trace(); -#endif - - auto const accountStr = toBase58(account); - - j << "HF TRACE ACCOUNT(" << leKey.key << "): " << msg << " " << accountStr; - -#ifdef DEBUG_OUTPUT - j << std::endl; -#endif - - return ret; -} - -Expected -WasmHostFunctionsImpl::traceFloat( - std::string_view const& msg, - Slice const& data) -{ - auto const ret = msg.size() + data.size(); -#ifdef DEBUG_OUTPUT - auto& j = std::cerr; -#else - if (!getJournal().active(beast::severities::kTrace)) - return ret; - auto j = getJournal().trace(); -#endif - auto const s = floatToString(data); - j << "HF TRACE FLOAT(" << leKey.key << "): " << msg << " " << s; - -#ifdef DEBUG_OUTPUT - j << std::endl; -#endif - - return ret; -} - -Expected -WasmHostFunctionsImpl::traceAmount( - std::string_view const& msg, - STAmount const& amount) -{ - auto const ret = msg.size(); -#ifdef DEBUG_OUTPUT - auto& j = std::cerr; -#else - if (!getJournal().active(beast::severities::kTrace)) - return ret; - auto j = getJournal().trace(); -#endif - auto const amountStr = amount.getFullText(); - j << "HF TRACE AMOUNT(" << leKey.key << "): " << msg << " " << amountStr; - -#ifdef DEBUG_OUTPUT - j << std::endl; -#endif - - return ret; -} - -Expected -WasmHostFunctionsImpl::floatFromInt(int64_t x, int32_t mode) -{ - return floatFromIntImpl(x, mode); -} - -Expected -WasmHostFunctionsImpl::floatFromUint(uint64_t x, int32_t mode) -{ - return floatFromUintImpl(x, mode); -} - -Expected -WasmHostFunctionsImpl::floatSet( - int64_t mantissa, - int32_t exponent, - int32_t mode) -{ - return floatSetImpl(mantissa, exponent, mode); -} - -Expected -WasmHostFunctionsImpl::floatCompare(Slice const& x, Slice const& y) -{ - return floatCompareImpl(x, y); -} - -Expected -WasmHostFunctionsImpl::floatAdd(Slice const& x, Slice const& y, int32_t mode) -{ - return floatAddImpl(x, y, mode); -} - -Expected -WasmHostFunctionsImpl::floatSubtract( - Slice const& x, - Slice const& y, - int32_t mode) -{ - return floatSubtractImpl(x, y, mode); -} - -Expected -WasmHostFunctionsImpl::floatMultiply( - Slice const& x, - Slice const& y, - int32_t mode) -{ - return floatMultiplyImpl(x, y, mode); -} - -Expected -WasmHostFunctionsImpl::floatDivide(Slice const& x, Slice const& y, int32_t mode) -{ - return floatDivideImpl(x, y, mode); -} - -Expected -WasmHostFunctionsImpl::floatRoot(Slice const& x, int32_t n, int32_t mode) -{ - return floatRootImpl(x, n, mode); -} - -Expected -WasmHostFunctionsImpl::floatPower(Slice const& x, int32_t n, int32_t mode) -{ - return floatPowerImpl(x, n, mode); -} - -Expected -WasmHostFunctionsImpl::floatLog(Slice const& x, int32_t mode) -{ - return floatLogImpl(x, mode); -} - -class Number2 : public Number -{ -protected: - static Bytes const FLOAT_NULL; - - bool good_; - -public: - Number2(Slice const& data) : Number(), good_(false) - { - if (data.size() != 8) - return; - - if (std::ranges::equal(FLOAT_NULL, data)) - { - good_ = true; - return; - } - - uint64_t const v = SerialIter(data).get64(); - if (!(v & STAmount::cIssuedCurrency)) - return; - - int64_t const neg = (v & STAmount::cPositive) ? 1 : -1; - int32_t const e = static_cast((v >> (64 - 10)) & 0xFFull); - if (e < 1 || e > 177) - return; - - int64_t const m = neg * static_cast(v & ((1ull << 54) - 1)); - if (!m) - return; - - Number x(m, e + IOUAmount::minExponent - 1); - *static_cast(this) = x; - good_ = true; - } - - Number2() : Number(), good_(true) - { - } - - Number2(int64_t x) : Number(x), good_(true) - { - } - - Number2(uint64_t x) : Number(0), good_(false) - { - using mtype = std::invoke_result_t; - if (x <= std::numeric_limits::max()) - *this = Number(x); - else - *this = Number(x / 10, 1) + Number(x % 10); - - good_ = true; - } - - Number2(int64_t mantissa, int32_t exponent) - : Number(mantissa, exponent), good_(true) - { - } - - Number2(Number const& n) : Number(n), good_(true) - { - } - - operator bool() const - { - return good_; - } - - Expected - toBytes() const - { - uint64_t v = mantissa() >= 0 ? STAmount::cPositive : 0; - v |= STAmount::cIssuedCurrency; - - uint64_t const absM = mantissa() >= 0 ? mantissa() : -mantissa(); - if (!absM) - { - using etype = - std::invoke_result_t; - if (exponent() != std::numeric_limits::lowest()) - { - return Unexpected( - HostFunctionError:: - FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_LINE - } - return FLOAT_NULL; - } - else if (absM > ((1ull << 54) - 1)) - { - return Unexpected( - HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_LINE - } - else if (exponent() > IOUAmount::maxExponent) - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); - else if (exponent() < IOUAmount::minExponent) - return FLOAT_NULL; - - int const e = exponent() - IOUAmount::minExponent + 1; //+97 - v |= absM; - v |= ((uint64_t)e) << 54; - - Serializer msg; - msg.add64(v); - auto const data = msg.getData(); - -#ifdef DEBUG_OUTPUT - std::cout << "m: " << std::setw(20) << mantissa() - << ", e: " << std::setw(12) << exponent() << ", hex: "; - std::cout << std::hex << std::uppercase << std::setfill('0'); - for (auto const& c : data) - std::cout << std::setw(2) << (unsigned)c << " "; - std::cout << std::dec << std::setfill(' ') << std::endl; -#endif - - return data; - } -}; - -Bytes const Number2::FLOAT_NULL = - {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - -struct SetRound -{ - Number::rounding_mode oldMode_; - bool good_; - - SetRound(int32_t mode) : oldMode_(Number::getround()), good_(false) - { - if (mode < Number::rounding_mode::to_nearest || - mode > Number::rounding_mode::upward) - return; - - Number::setround(static_cast(mode)); - good_ = true; - } - - ~SetRound() - { - Number::setround(oldMode_); - } - - operator bool() const - { - return good_; - } -}; - -std::string -floatToString(Slice const& data) -{ - Number2 const num(data); - if (!num) - { - std::string hex; - hex.reserve(data.size() * 2); - boost::algorithm::hex( - data.begin(), data.end(), std::back_inserter(hex)); - return "Invalid data: " + hex; - } - - auto const s = to_string(num); - return s; -} - -Expected -floatFromIntImpl(int64_t x, int32_t mode) -{ - try - { - SetRound rm(mode); - if (!rm) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - - Number2 num(x); - return num.toBytes(); - } - // LCOV_EXCL_START - catch (...) - { - } - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); - // LCOV_EXCL_STOP -} - -Expected -floatFromUintImpl(uint64_t x, int32_t mode) -{ - try - { - SetRound rm(mode); - if (!rm) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - - Number2 num(x); - return num.toBytes(); - } - // LCOV_EXCL_START - catch (...) - { - } - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); - // LCOV_EXCL_STOP -} - -Expected -floatSetImpl(int64_t mantissa, int32_t exponent, int32_t mode) -{ - try - { - SetRound rm(mode); - if (!rm) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - Number2 num(mantissa, exponent); - return num.toBytes(); - } - catch (...) - { - } - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); -} - -Expected -floatCompareImpl(Slice const& x, Slice const& y) -{ - try - { - Number2 xx(x); - if (!xx) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - Number2 yy(y); - if (!yy) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - return xx < yy ? 2 : (xx == yy ? 0 : 1); - } - // LCOV_EXCL_START - catch (...) - { - } - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); - // LCOV_EXCL_STOP -} - -Expected -floatAddImpl(Slice const& x, Slice const& y, int32_t mode) -{ - try - { - SetRound rm(mode); - if (!rm) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - - Number2 xx(x); - if (!xx) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - Number2 yy(y); - if (!yy) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - Number2 res = xx + yy; - - return res.toBytes(); - } - // LCOV_EXCL_START - catch (...) - { - } - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); - // LCOV_EXCL_STOP -} - -Expected -floatSubtractImpl(Slice const& x, Slice const& y, int32_t mode) -{ - try - { - SetRound rm(mode); - if (!rm) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - Number2 xx(x); - if (!xx) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - Number2 yy(y); - if (!yy) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - Number2 res = xx - yy; - - return res.toBytes(); - } - // LCOV_EXCL_START - catch (...) - { - } - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); - // LCOV_EXCL_STOP -} - -Expected -floatMultiplyImpl(Slice const& x, Slice const& y, int32_t mode) -{ - try - { - SetRound rm(mode); - if (!rm) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - Number2 xx(x); - if (!xx) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - Number2 yy(y); - if (!yy) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - Number2 res = xx * yy; - - return res.toBytes(); - } - // LCOV_EXCL_START - catch (...) - { - } - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); - // LCOV_EXCL_STOP -} - -Expected -floatDivideImpl(Slice const& x, Slice const& y, int32_t mode) -{ - try - { - SetRound rm(mode); - if (!rm) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - Number2 xx(x); - if (!xx) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - Number2 yy(y); - if (!yy) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - Number2 res = xx / yy; - - return res.toBytes(); - } - catch (...) - { - } - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); -} - -Expected -floatRootImpl(Slice const& x, int32_t n, int32_t mode) -{ - try - { - if (n < 1) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - - SetRound rm(mode); - if (!rm) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - - Number2 xx(x); - if (!xx) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - - Number2 res(root(xx, n)); - - return res.toBytes(); - } - // LCOV_EXCL_START - catch (...) - { - } - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); - // LCOV_EXCL_STOP -} - -Expected -floatPowerImpl(Slice const& x, int32_t n, int32_t mode) -{ - try - { - if ((n < 0) || (n > IOUAmount::maxExponent)) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - - SetRound rm(mode); - if (!rm) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - - Number2 xx(x); - if (!xx) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - if (xx == Number() && !n) - return Unexpected(HostFunctionError::INVALID_PARAMS); - - Number2 res(power(xx, n, 1)); - - return res.toBytes(); - } - // LCOV_EXCL_START - catch (...) - { - } - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); - // LCOV_EXCL_STOP -} - -Expected -floatLogImpl(Slice const& x, int32_t mode) -{ - try - { - SetRound rm(mode); - if (!rm) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - - Number2 xx(x); - if (!xx) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - - Number2 res(lg(xx)); - - return res.toBytes(); - } - // LCOV_EXCL_START - catch (...) - { - } - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); - // LCOV_EXCL_STOP -} - } // namespace xrpl diff --git a/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp b/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp new file mode 100644 index 0000000000..05b21d5e09 --- /dev/null +++ b/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp @@ -0,0 +1,529 @@ +#include + +#include +#include + +#ifdef _DEBUG +// #define DEBUG_OUTPUT 1 +#endif + +namespace xrpl { + +namespace wasm_float { + +namespace detail { + +class Number2 : public Number +{ +protected: + static Bytes const FLOAT_NULL; + + bool good_; + +public: + Number2(Slice const& data) : Number(), good_(false) + { + if (data.size() != 8) + return; + + if (std::ranges::equal(FLOAT_NULL, data)) + { + good_ = true; + return; + } + + uint64_t const v = SerialIter(data).get64(); + if (!(v & STAmount::cIssuedCurrency)) + return; + + int64_t const neg = (v & STAmount::cPositive) ? 1 : -1; + int32_t const e = static_cast((v >> (64 - 10)) & 0xFFull); + if (e < 1 || e > 177) + return; + + int64_t const m = neg * static_cast(v & ((1ull << 54) - 1)); + if (!m) + return; + + Number x(m, e + IOUAmount::minExponent - 1); + *static_cast(this) = x; + good_ = true; + } + + Number2() : Number(), good_(true) + { + } + + Number2(int64_t x) : Number(x), good_(true) + { + } + + Number2(uint64_t x) : Number(0), good_(false) + { + using mtype = std::invoke_result_t; + if (x <= std::numeric_limits::max()) + *this = Number(x); + else + *this = Number(x / 10, 1) + Number(x % 10); + + good_ = true; + } + + Number2(int64_t mantissa, int32_t exponent) + : Number(mantissa, exponent), good_(true) + { + } + + Number2(Number const& n) : Number(n), good_(true) + { + } + + operator bool() const + { + return good_; + } + + Expected + toBytes() const + { + uint64_t v = mantissa() >= 0 ? STAmount::cPositive : 0; + v |= STAmount::cIssuedCurrency; + + uint64_t const absM = mantissa() >= 0 ? mantissa() : -mantissa(); + if (!absM) + { + using etype = + std::invoke_result_t; + if (exponent() != std::numeric_limits::lowest()) + { + return Unexpected( + HostFunctionError:: + FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_LINE + } + return FLOAT_NULL; + } + else if (absM > ((1ull << 54) - 1)) + { + return Unexpected( + HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_LINE + } + else if (exponent() > IOUAmount::maxExponent) + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + else if (exponent() < IOUAmount::minExponent) + return FLOAT_NULL; + + int const e = exponent() - IOUAmount::minExponent + 1; //+97 + v |= absM; + v |= ((uint64_t)e) << 54; + + Serializer msg; + msg.add64(v); + auto const data = msg.getData(); + +#ifdef DEBUG_OUTPUT + std::cout << "m: " << std::setw(20) << mantissa() + << ", e: " << std::setw(12) << exponent() << ", hex: "; + std::cout << std::hex << std::uppercase << std::setfill('0'); + for (auto const& c : data) + std::cout << std::setw(2) << (unsigned)c << " "; + std::cout << std::dec << std::setfill(' ') << std::endl; +#endif + + return data; + } +}; + +Bytes const Number2::FLOAT_NULL = + {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +struct SetRound +{ + Number::rounding_mode oldMode_; + bool good_; + + SetRound(int32_t mode) : oldMode_(Number::getround()), good_(false) + { + if (mode < Number::rounding_mode::to_nearest || + mode > Number::rounding_mode::upward) + return; + + Number::setround(static_cast(mode)); + good_ = true; + } + + ~SetRound() + { + Number::setround(oldMode_); + } + + operator bool() const + { + return good_; + } +}; + +} // namespace detail + +std::string +floatToString(Slice const& data) +{ + detail::Number2 const num(data); + if (!num) + { + std::string hex; + hex.reserve(data.size() * 2); + boost::algorithm::hex( + data.begin(), data.end(), std::back_inserter(hex)); + return "Invalid data: " + hex; + } + + auto const s = to_string(num); + return s; +} + +Expected +floatFromIntImpl(int64_t x, int32_t mode) +{ + try + { + detail::SetRound rm(mode); + if (!rm) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + detail::Number2 num(x); + return num.toBytes(); + } + // LCOV_EXCL_START + catch (...) + { + } + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + // LCOV_EXCL_STOP +} + +Expected +floatFromUintImpl(uint64_t x, int32_t mode) +{ + try + { + detail::SetRound rm(mode); + if (!rm) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + detail::Number2 num(x); + return num.toBytes(); + } + // LCOV_EXCL_START + catch (...) + { + } + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + // LCOV_EXCL_STOP +} + +Expected +floatSetImpl(int64_t mantissa, int32_t exponent, int32_t mode) +{ + try + { + detail::SetRound rm(mode); + if (!rm) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + detail::Number2 num(mantissa, exponent); + return num.toBytes(); + } + catch (...) + { + } + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); +} + +Expected +floatCompareImpl(Slice const& x, Slice const& y) +{ + try + { + detail::Number2 xx(x); + if (!xx) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + detail::Number2 yy(y); + if (!yy) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return xx < yy ? 2 : (xx == yy ? 0 : 1); + } + // LCOV_EXCL_START + catch (...) + { + } + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + // LCOV_EXCL_STOP +} + +Expected +floatAddImpl(Slice const& x, Slice const& y, int32_t mode) +{ + try + { + detail::SetRound rm(mode); + if (!rm) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + detail::Number2 xx(x); + if (!xx) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + detail::Number2 yy(y); + if (!yy) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + detail::Number2 res = xx + yy; + + return res.toBytes(); + } + // LCOV_EXCL_START + catch (...) + { + } + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + // LCOV_EXCL_STOP +} + +Expected +floatSubtractImpl(Slice const& x, Slice const& y, int32_t mode) +{ + try + { + detail::SetRound rm(mode); + if (!rm) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + detail::Number2 xx(x); + if (!xx) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + detail::Number2 yy(y); + if (!yy) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + detail::Number2 res = xx - yy; + + return res.toBytes(); + } + // LCOV_EXCL_START + catch (...) + { + } + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + // LCOV_EXCL_STOP +} + +Expected +floatMultiplyImpl(Slice const& x, Slice const& y, int32_t mode) +{ + try + { + detail::SetRound rm(mode); + if (!rm) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + detail::Number2 xx(x); + if (!xx) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + detail::Number2 yy(y); + if (!yy) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + detail::Number2 res = xx * yy; + + return res.toBytes(); + } + // LCOV_EXCL_START + catch (...) + { + } + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + // LCOV_EXCL_STOP +} + +Expected +floatDivideImpl(Slice const& x, Slice const& y, int32_t mode) +{ + try + { + detail::SetRound rm(mode); + if (!rm) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + detail::Number2 xx(x); + if (!xx) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + detail::Number2 yy(y); + if (!yy) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + detail::Number2 res = xx / yy; + + return res.toBytes(); + } + catch (...) + { + } + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); +} + +Expected +floatRootImpl(Slice const& x, int32_t n, int32_t mode) +{ + try + { + if (n < 1) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + detail::SetRound rm(mode); + if (!rm) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + detail::Number2 xx(x); + if (!xx) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + detail::Number2 res(root(xx, n)); + + return res.toBytes(); + } + // LCOV_EXCL_START + catch (...) + { + } + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + // LCOV_EXCL_STOP +} + +Expected +floatPowerImpl(Slice const& x, int32_t n, int32_t mode) +{ + try + { + if ((n < 0) || (n > IOUAmount::maxExponent)) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + detail::SetRound rm(mode); + if (!rm) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + detail::Number2 xx(x); + if (!xx) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + if (xx == Number() && !n) + return Unexpected(HostFunctionError::INVALID_PARAMS); + + detail::Number2 res(power(xx, n, 1)); + + return res.toBytes(); + } + // LCOV_EXCL_START + catch (...) + { + } + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + // LCOV_EXCL_STOP +} + +Expected +floatLogImpl(Slice const& x, int32_t mode) +{ + try + { + detail::SetRound rm(mode); + if (!rm) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + detail::Number2 xx(x); + if (!xx) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + detail::Number2 res(lg(xx)); + + return res.toBytes(); + } + // LCOV_EXCL_START + catch (...) + { + } + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + // LCOV_EXCL_STOP +} + +} // namespace wasm_float + +// ========================================================= +// ACTUAL HOST FUNCTIONS +// ========================================================= + +Expected +WasmHostFunctionsImpl::floatFromInt(int64_t x, int32_t mode) +{ + return wasm_float::floatFromIntImpl(x, mode); +} + +Expected +WasmHostFunctionsImpl::floatFromUint(uint64_t x, int32_t mode) +{ + return wasm_float::floatFromUintImpl(x, mode); +} + +Expected +WasmHostFunctionsImpl::floatSet( + int64_t mantissa, + int32_t exponent, + int32_t mode) +{ + return wasm_float::floatSetImpl(mantissa, exponent, mode); +} + +Expected +WasmHostFunctionsImpl::floatCompare(Slice const& x, Slice const& y) +{ + return wasm_float::floatCompareImpl(x, y); +} + +Expected +WasmHostFunctionsImpl::floatAdd(Slice const& x, Slice const& y, int32_t mode) +{ + return wasm_float::floatAddImpl(x, y, mode); +} + +Expected +WasmHostFunctionsImpl::floatSubtract( + Slice const& x, + Slice const& y, + int32_t mode) +{ + return wasm_float::floatSubtractImpl(x, y, mode); +} + +Expected +WasmHostFunctionsImpl::floatMultiply( + Slice const& x, + Slice const& y, + int32_t mode) +{ + return wasm_float::floatMultiplyImpl(x, y, mode); +} + +Expected +WasmHostFunctionsImpl::floatDivide(Slice const& x, Slice const& y, int32_t mode) +{ + return wasm_float::floatDivideImpl(x, y, mode); +} + +Expected +WasmHostFunctionsImpl::floatRoot(Slice const& x, int32_t n, int32_t mode) +{ + return wasm_float::floatRootImpl(x, n, mode); +} + +Expected +WasmHostFunctionsImpl::floatPower(Slice const& x, int32_t n, int32_t mode) +{ + return wasm_float::floatPowerImpl(x, n, mode); +} + +Expected +WasmHostFunctionsImpl::floatLog(Slice const& x, int32_t mode) +{ + return wasm_float::floatLogImpl(x, mode); +} + +} // namespace xrpl diff --git a/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp b/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp new file mode 100644 index 0000000000..d137ec1fef --- /dev/null +++ b/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp @@ -0,0 +1,374 @@ +#include + +#include +#include + +namespace xrpl { + +namespace detail { + +static Expected +getAnyFieldData(STBase const* obj) +{ + // auto const& fname = obj.getFName(); + if (!obj) + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + + auto const stype = obj->getSType(); + switch (stype) + { + // LCOV_EXCL_START + case STI_UNKNOWN: + case STI_NOTPRESENT: + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + break; + // LCOV_EXCL_STOP + case STI_OBJECT: + case STI_ARRAY: + return Unexpected(HostFunctionError::NOT_LEAF_FIELD); + break; + case STI_ACCOUNT: { + auto const* account(static_cast(obj)); + auto const& data = account->value(); + return Bytes{data.begin(), data.end()}; + } + break; + case STI_AMOUNT: + // will be processed by serializer + break; + case STI_ISSUE: { + auto const* issue(static_cast(obj)); + Asset const& asset(issue->value()); + // XRP and IOU will be processed by serializer + if (asset.holds()) + { + // MPT + auto const& mptIssue = asset.get(); + auto const& mptID = mptIssue.getMptID(); + return Bytes{mptID.cbegin(), mptID.cend()}; + } + } + break; + case STI_VL: { + auto const* vl(static_cast(obj)); + auto const& data = vl->value(); + return Bytes{data.begin(), data.end()}; + } + break; + case STI_UINT16: { + auto const& num(static_cast const*>(obj)); + std::uint16_t const data = num->value(); + auto const* b = reinterpret_cast(&data); + auto const* e = reinterpret_cast(&data + 1); + return Bytes{b, e}; + } + case STI_UINT32: { + auto const* num(static_cast const*>(obj)); + std::uint32_t const data = num->value(); + auto const* b = reinterpret_cast(&data); + auto const* e = reinterpret_cast(&data + 1); + return Bytes{b, e}; + } + break; + default: + break; // default to serializer + } + + Serializer msg; + obj->add(msg); + auto const data = msg.getData(); + + return data; +} + +static inline bool +noField(STBase const* field) +{ + return !field || (STI_NOTPRESENT == field->getSType()) || + (STI_UNKNOWN == field->getSType()); +} + +static Expected +locateField(STObject const& obj, Slice const& locator) +{ + if (locator.empty() || (locator.size() & 3)) // must be multiple of 4 + return Unexpected(HostFunctionError::LOCATOR_MALFORMED); + + int32_t locBuf[maxWasmParamLength / sizeof(int32_t)]; + int32_t const* locPtr = &locBuf[0]; + int32_t const locSize = locator.size() / sizeof(int32_t); + + uintptr_t p = reinterpret_cast(locator.data()); + if (p & (alignof(int32_t) - 1)) // unaligned + memcpy(&locBuf[0], locator.data(), locator.size()); + else + locPtr = reinterpret_cast(locator.data()); + + STBase const* field = nullptr; + auto const& knownSFields = SField::getKnownCodeToField(); + + { + int32_t const sfieldCode = locPtr[0]; + auto const it = knownSFields.find(sfieldCode); + if (it == knownSFields.end()) + return Unexpected(HostFunctionError::INVALID_FIELD); + + auto const& fname(*it->second); + field = obj.peekAtPField(fname); + if (noField(field)) + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + } + + for (int i = 1; i < locSize; ++i) + { + int32_t const sfieldCode = locPtr[i]; + + if (STI_ARRAY == field->getSType()) + { + auto const* arr = static_cast(field); + if (sfieldCode >= arr->size()) + return Unexpected(HostFunctionError::INDEX_OUT_OF_BOUNDS); + field = &(arr->operator[](sfieldCode)); + } + else if (STI_OBJECT == field->getSType()) + { + auto const* o = static_cast(field); + + auto const it = knownSFields.find(sfieldCode); + if (it == knownSFields.end()) + return Unexpected(HostFunctionError::INVALID_FIELD); + + auto const& fname(*it->second); + field = o->peekAtPField(fname); + } + else // simple field must be the last one + { + return Unexpected(HostFunctionError::LOCATOR_MALFORMED); + } + + if (noField(field)) + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + } + + return field; +} + +} // namespace detail + +Expected +WasmHostFunctionsImpl::cacheLedgerObj(uint256 const& objId, int32_t cacheIdx) +{ + auto const& keylet = keylet::unchecked(objId); + if (cacheIdx < 0 || cacheIdx > MAX_CACHE) + return Unexpected(HostFunctionError::SLOT_OUT_RANGE); + + if (cacheIdx == 0) + { + for (cacheIdx = 0; cacheIdx < MAX_CACHE; ++cacheIdx) + if (!cache[cacheIdx]) + break; + } + else + { + cacheIdx--; // convert to 0-based index + } + + if (cacheIdx >= MAX_CACHE) + return Unexpected(HostFunctionError::SLOTS_FULL); + + cache[cacheIdx] = ctx.view().read(keylet); + if (!cache[cacheIdx]) + return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); + return cacheIdx + 1; // return 1-based index +} + +// Subsection: top level getters + +Expected +WasmHostFunctionsImpl::getTxField(SField const& fname) +{ + return detail::getAnyFieldData(ctx.tx.peekAtPField(fname)); +} + +Expected +WasmHostFunctionsImpl::getCurrentLedgerObjField(SField const& fname) +{ + auto const sle = getCurrentLedgerObj(); + if (!sle.has_value()) + return Unexpected(sle.error()); + return detail::getAnyFieldData(sle.value()->peekAtPField(fname)); +} + +Expected +WasmHostFunctionsImpl::getLedgerObjField(int32_t cacheIdx, SField const& fname) +{ + auto const normalizedIdx = normalizeCacheIndex(cacheIdx); + if (!normalizedIdx.has_value()) + return Unexpected(normalizedIdx.error()); + return detail::getAnyFieldData( + cache[normalizedIdx.value()]->peekAtPField(fname)); +} + +// Subsection: nested getters + +Expected +WasmHostFunctionsImpl::getTxNestedField(Slice const& locator) +{ + auto const r = detail::locateField(ctx.tx, locator); + if (!r) + return Unexpected(r.error()); + + return detail::getAnyFieldData(r.value()); +} + +Expected +WasmHostFunctionsImpl::getCurrentLedgerObjNestedField(Slice const& locator) +{ + auto const sle = getCurrentLedgerObj(); + if (!sle.has_value()) + return Unexpected(sle.error()); + + auto const r = detail::locateField(*sle.value(), locator); + if (!r) + return Unexpected(r.error()); + + return detail::getAnyFieldData(r.value()); +} + +Expected +WasmHostFunctionsImpl::getLedgerObjNestedField( + int32_t cacheIdx, + Slice const& locator) +{ + auto const normalizedIdx = normalizeCacheIndex(cacheIdx); + if (!normalizedIdx.has_value()) + return Unexpected(normalizedIdx.error()); + + auto const r = detail::locateField(*cache[normalizedIdx.value()], locator); + if (!r) + return Unexpected(r.error()); + + return detail::getAnyFieldData(r.value()); +} + +// Subsection: array length getters + +Expected +WasmHostFunctionsImpl::getTxArrayLen(SField const& fname) +{ + if (fname.fieldType != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); + + auto const* field = ctx.tx.peekAtPField(fname); + if (detail::noField(field)) + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + + if (field->getSType() != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); // LCOV_EXCL_LINE + int32_t const sz = static_cast(field)->size(); + + return sz; +} + +Expected +WasmHostFunctionsImpl::getCurrentLedgerObjArrayLen(SField const& fname) +{ + if (fname.fieldType != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); + + auto const sle = getCurrentLedgerObj(); + if (!sle.has_value()) + return Unexpected(sle.error()); + + auto const* field = sle.value()->peekAtPField(fname); + if (detail::noField(field)) + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + + if (field->getSType() != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); // LCOV_EXCL_LINE + int32_t const sz = static_cast(field)->size(); + + return sz; +} + +Expected +WasmHostFunctionsImpl::getLedgerObjArrayLen( + int32_t cacheIdx, + SField const& fname) +{ + if (fname.fieldType != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); + + auto const normalizedIdx = normalizeCacheIndex(cacheIdx); + if (!normalizedIdx.has_value()) + return Unexpected(normalizedIdx.error()); + + auto const* field = cache[normalizedIdx.value()]->peekAtPField(fname); + if (detail::noField(field)) + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + + if (field->getSType() != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); // LCOV_EXCL_LINE + + int32_t const sz = static_cast(field)->size(); + + return sz; +} + +// Subsection: nested array length getters + +Expected +WasmHostFunctionsImpl::getTxNestedArrayLen(Slice const& locator) +{ + auto const r = detail::locateField(ctx.tx, locator); + if (!r) + return Unexpected(r.error()); + + auto const* field = r.value(); + if (field->getSType() != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); + int32_t const sz = static_cast(field)->size(); + + return sz; +} + +Expected +WasmHostFunctionsImpl::getCurrentLedgerObjNestedArrayLen(Slice const& locator) +{ + auto const sle = getCurrentLedgerObj(); + if (!sle.has_value()) + return Unexpected(sle.error()); + auto const r = detail::locateField(*sle.value(), locator); + if (!r) + return Unexpected(r.error()); + + auto const* field = r.value(); + if (field->getSType() != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); + int32_t const sz = static_cast(field)->size(); + + return sz; +} + +Expected +WasmHostFunctionsImpl::getLedgerObjNestedArrayLen( + int32_t cacheIdx, + Slice const& locator) +{ + auto const normalizedIdx = normalizeCacheIndex(cacheIdx); + if (!normalizedIdx.has_value()) + return Unexpected(normalizedIdx.error()); + + auto const r = detail::locateField(*cache[normalizedIdx.value()], locator); + if (!r) + return Unexpected(r.error()); + + auto const* field = r.value(); + if (field->getSType() != STI_ARRAY) + return Unexpected(HostFunctionError::NO_ARRAY); + int32_t const sz = static_cast(field)->size(); + + return sz; +} + +} // namespace xrpl diff --git a/src/xrpld/app/wasm/detail/HostFuncImplKeylet.cpp b/src/xrpld/app/wasm/detail/HostFuncImplKeylet.cpp new file mode 100644 index 0000000000..89ec35cd3b --- /dev/null +++ b/src/xrpld/app/wasm/detail/HostFuncImplKeylet.cpp @@ -0,0 +1,228 @@ +#include + +#include +#include + +namespace xrpl { + +Expected +WasmHostFunctionsImpl::accountKeylet(AccountID const& account) +{ + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::account(account); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::ammKeylet(Asset const& issue1, Asset const& issue2) +{ + if (issue1 == issue2) + return Unexpected(HostFunctionError::INVALID_PARAMS); + + // note: this should be removed with the MPT DEX amendment + if (issue1.holds() || issue2.holds()) + return Unexpected(HostFunctionError::INVALID_PARAMS); + + auto const keylet = keylet::amm(issue1, issue2); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::checkKeylet(AccountID const& account, std::uint32_t seq) +{ + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::check(account, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::credentialKeylet( + AccountID const& subject, + AccountID const& issuer, + Slice const& credentialType) +{ + if (!subject || !issuer) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + + if (credentialType.empty() || + credentialType.size() > maxCredentialTypeLength) + return Unexpected(HostFunctionError::INVALID_PARAMS); + + auto const keylet = keylet::credential(subject, issuer, credentialType); + + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::didKeylet(AccountID const& account) +{ + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::did(account); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::delegateKeylet( + AccountID const& account, + AccountID const& authorize) +{ + if (!account || !authorize) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + if (account == authorize) + return Unexpected(HostFunctionError::INVALID_PARAMS); + auto const keylet = keylet::delegate(account, authorize); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::depositPreauthKeylet( + AccountID const& account, + AccountID const& authorize) +{ + if (!account || !authorize) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + if (account == authorize) + return Unexpected(HostFunctionError::INVALID_PARAMS); + auto const keylet = keylet::depositPreauth(account, authorize); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::escrowKeylet(AccountID const& account, std::uint32_t seq) +{ + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::escrow(account, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::lineKeylet( + AccountID const& account1, + AccountID const& account2, + Currency const& currency) +{ + if (!account1 || !account2) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + if (account1 == account2) + return Unexpected(HostFunctionError::INVALID_PARAMS); + if (currency.isZero()) + return Unexpected(HostFunctionError::INVALID_PARAMS); + + auto const keylet = keylet::line(account1, account2, currency); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::mptIssuanceKeylet( + AccountID const& issuer, + std::uint32_t seq) +{ + if (!issuer) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + + auto const keylet = keylet::mptIssuance(seq, issuer); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::mptokenKeylet( + MPTID const& mptid, + AccountID const& holder) +{ + if (!mptid) + return Unexpected(HostFunctionError::INVALID_PARAMS); + if (!holder) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + + auto const keylet = keylet::mptoken(mptid, holder); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::nftOfferKeylet( + AccountID const& account, + std::uint32_t seq) +{ + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::nftoffer(account, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::offerKeylet(AccountID const& account, std::uint32_t seq) +{ + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::offer(account, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::oracleKeylet( + AccountID const& account, + std::uint32_t documentId) +{ + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::oracle(account, documentId); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::paychanKeylet( + AccountID const& account, + AccountID const& destination, + std::uint32_t seq) +{ + if (!account || !destination) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + if (account == destination) + return Unexpected(HostFunctionError::INVALID_PARAMS); + auto const keylet = keylet::payChan(account, destination, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::permissionedDomainKeylet( + AccountID const& account, + std::uint32_t seq) +{ + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::permissionedDomain(account, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::signersKeylet(AccountID const& account) +{ + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::signers(account); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::ticketKeylet(AccountID const& account, std::uint32_t seq) +{ + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::ticket(account, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +Expected +WasmHostFunctionsImpl::vaultKeylet(AccountID const& account, std::uint32_t seq) +{ + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::vault(account, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; +} + +} // namespace xrpl diff --git a/src/xrpld/app/wasm/detail/HostFuncImplLedgerHeader.cpp b/src/xrpld/app/wasm/detail/HostFuncImplLedgerHeader.cpp new file mode 100644 index 0000000000..1889341ebe --- /dev/null +++ b/src/xrpld/app/wasm/detail/HostFuncImplLedgerHeader.cpp @@ -0,0 +1,59 @@ +#include +#include + +#include + +namespace xrpl { + +// ========================================================= +// SECTION: LEDGER HEADER FUNCTIONS +// ========================================================= + +Expected +WasmHostFunctionsImpl::getLedgerSqn() +{ + auto seq = ctx.view().seq(); + if (seq > std::numeric_limits::max()) + return Unexpected(HostFunctionError::INTERNAL); // LCOV_EXCL_LINE + return static_cast(seq); +} + +Expected +WasmHostFunctionsImpl::getParentLedgerTime() +{ + auto time = ctx.view().parentCloseTime().time_since_epoch().count(); + if (time > std::numeric_limits::max()) + return Unexpected(HostFunctionError::INTERNAL); + return static_cast(time); +} + +Expected +WasmHostFunctionsImpl::getParentLedgerHash() +{ + return ctx.view().header().parentHash; +} + +Expected +WasmHostFunctionsImpl::getBaseFee() +{ + auto fee = ctx.view().fees().base.drops(); + if (fee > std::numeric_limits::max()) + return Unexpected(HostFunctionError::INTERNAL); + return static_cast(fee); +} + +Expected +WasmHostFunctionsImpl::isAmendmentEnabled(uint256 const& amendmentId) +{ + return ctx.view().rules().enabled(amendmentId); +} + +Expected +WasmHostFunctionsImpl::isAmendmentEnabled(std::string_view const& amendmentName) +{ + auto const& table = ctx.app.getAmendmentTable(); + auto const amendment = table.find(std::string(amendmentName)); + return ctx.view().rules().enabled(amendment); +} + +} // namespace xrpl diff --git a/src/xrpld/app/wasm/detail/HostFuncImplNFT.cpp b/src/xrpld/app/wasm/detail/HostFuncImplNFT.cpp new file mode 100644 index 0000000000..7c4ee00406 --- /dev/null +++ b/src/xrpld/app/wasm/detail/HostFuncImplNFT.cpp @@ -0,0 +1,68 @@ +#include +#include + +#include +#include + +namespace xrpl { + +// ========================================================= +// SECTION: NFT UTILS +// ========================================================= + +Expected +WasmHostFunctionsImpl::getNFT(AccountID const& account, uint256 const& nftId) +{ + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + + if (!nftId) + return Unexpected(HostFunctionError::INVALID_PARAMS); + + auto obj = nft::findToken(ctx.view(), account, nftId); + if (!obj) + return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); + + auto objUri = obj->at(~sfURI); + if (!objUri) + return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + + Slice const s = objUri->value(); + return Bytes(s.begin(), s.end()); +} + +Expected +WasmHostFunctionsImpl::getNFTIssuer(uint256 const& nftId) +{ + auto const issuer = nft::getIssuer(nftId); + if (!issuer) + return Unexpected(HostFunctionError::INVALID_PARAMS); + + return Bytes{issuer.begin(), issuer.end()}; +} + +Expected +WasmHostFunctionsImpl::getNFTTaxon(uint256 const& nftId) +{ + return nft::toUInt32(nft::getTaxon(nftId)); +} + +Expected +WasmHostFunctionsImpl::getNFTFlags(uint256 const& nftId) +{ + return nft::getFlags(nftId); +} + +Expected +WasmHostFunctionsImpl::getNFTTransferFee(uint256 const& nftId) +{ + return nft::getTransferFee(nftId); +} + +Expected +WasmHostFunctionsImpl::getNFTSerial(uint256 const& nftId) +{ + return nft::getSerial(nftId); +} + +} // namespace xrpl diff --git a/src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp b/src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp new file mode 100644 index 0000000000..d597a54f54 --- /dev/null +++ b/src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp @@ -0,0 +1,141 @@ +#include + +#include +#include + +#ifdef _DEBUG +// #define DEBUG_OUTPUT 1 +#endif + +namespace xrpl { + +Expected +WasmHostFunctionsImpl::trace( + std::string_view const& msg, + Slice const& data, + bool asHex) +{ + auto const ret = msg.size() + data.size() * (asHex ? 2 : 1); +#ifdef DEBUG_OUTPUT + auto& j = std::cerr; +#else + if (!getJournal().active(beast::severities::kTrace)) + return ret; + auto j = getJournal().trace(); +#endif + + if (!asHex) + { + j << "HF TRACE (" << leKey.key << "): " << msg << " " + << std::string_view( + reinterpret_cast(data.data()), data.size()); + } + else + { + std::string hex; + hex.reserve(data.size() * 2); + boost::algorithm::hex( + data.begin(), data.end(), std::back_inserter(hex)); + j << "HF DEV TRACE (" << leKey.key << "): " << msg << " " << hex; + } + +#ifdef DEBUG_OUTPUT + j << std::endl; +#endif + + return ret; +} + +Expected +WasmHostFunctionsImpl::traceNum(std::string_view const& msg, int64_t data) +{ + auto const ret = msg.size() + sizeof(data); +#ifdef DEBUG_OUTPUT + auto& j = std::cerr; +#else + if (!getJournal().active(beast::severities::kTrace)) + return ret; + auto j = getJournal().trace(); +#endif + + j << "HF TRACE NUM(" << leKey.key << "): " << msg << " " << data; + +#ifdef DEBUG_OUTPUT + j << std::endl; +#endif + + return ret; +} + +Expected +WasmHostFunctionsImpl::traceAccount( + std::string_view const& msg, + AccountID const& account) +{ + auto const ret = msg.size() + account.size(); +#ifdef DEBUG_OUTPUT + auto& j = std::cerr; +#else + if (!getJournal().active(beast::severities::kTrace)) + return ret; + auto j = getJournal().trace(); +#endif + + auto const accountStr = toBase58(account); + + j << "HF TRACE ACCOUNT(" << leKey.key << "): " << msg << " " << accountStr; + +#ifdef DEBUG_OUTPUT + j << std::endl; +#endif + + return ret; +} + +Expected +WasmHostFunctionsImpl::traceFloat( + std::string_view const& msg, + Slice const& data) +{ + auto const ret = msg.size() + data.size(); +#ifdef DEBUG_OUTPUT + auto& j = std::cerr; +#else + if (!getJournal().active(beast::severities::kTrace)) + return ret; + auto j = getJournal().trace(); +#endif + auto const s = wasm_float::floatToString(data); + j << "HF TRACE FLOAT(" << leKey.key << "): " << msg << " " << s; + +#ifdef DEBUG_OUTPUT + j << std::endl; +#endif + + return ret; +} + +Expected +WasmHostFunctionsImpl::traceAmount( + std::string_view const& msg, + STAmount const& amount) +{ + auto const ret = msg.size(); +#ifdef DEBUG_OUTPUT + auto& j = std::cerr; +#else + if (!getJournal().active(beast::severities::kTrace)) + return ret; + auto j = getJournal().trace(); +#endif + auto const amountStr = amount.getFullText(); + j << "HF TRACE AMOUNT(" << leKey.key << "): " << msg << " " << amountStr; + +#ifdef DEBUG_OUTPUT + j << std::endl; +#endif + + return ret; +} + +} // namespace xrpl From 1809fe07f2510e1c00785da4c366af31fbbfd11c Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 14 Jan 2026 12:43:12 -0500 Subject: [PATCH 059/137] remove test file --- clang_format.sh | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100755 clang_format.sh diff --git a/clang_format.sh b/clang_format.sh deleted file mode 100755 index 2d834b515d..0000000000 --- a/clang_format.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# cspell: ignore clangf -modified=$1 -dir=`pwd` -clangf=clang-format-10 -clangf=clang-format -if [ "$1" = "--all" ] -then - modified=`git status|egrep "modified|new file"|egrep "(cpp|h)$" | sed -E -e 's/modified://' -e 's/new file://' -e 's/^[[:space:]]+//'` -fi -for i in $modified -do - basedir=$(dirname "$i") - file=$(basename "$i") - echo "$basedir $file" - cd $basedir - $clangf -style=file -i "$file" - cd $dir -done From c5e50aa221010d76b793f78b20506687c37f0229 Mon Sep 17 00:00:00 2001 From: Oleksandr <115580134+oleks-rip@users.noreply.github.com> Date: Wed, 14 Jan 2026 14:46:29 -0500 Subject: [PATCH 060/137] Fix merge issues --- include/xrpl/protocol/IOUAmount.h | 9 --------- src/libxrpl/protocol/IOUAmount.cpp | 12 ++++++++++-- src/test/app/HostFuncImpl_test.cpp | 18 +++++++++--------- src/xrpld/app/wasm/HostFuncImpl.h | 10 ++++++++++ .../app/wasm/detail/HostFuncImplFloat.cpp | 10 +++++----- 5 files changed, 34 insertions(+), 25 deletions(-) diff --git a/include/xrpl/protocol/IOUAmount.h b/include/xrpl/protocol/IOUAmount.h index 1d1a7f06b5..405de18e29 100644 --- a/include/xrpl/protocol/IOUAmount.h +++ b/include/xrpl/protocol/IOUAmount.h @@ -44,15 +44,6 @@ private: fromNumber(Number const& number); public: - /* The range for the mantissa when normalized */ - // log(2^63,10) ~ 18.96 - // - static std::int64_t constexpr minMantissa = STAmount::cMinValue; - static std::int64_t constexpr maxMantissa = STAmount::cMaxValue; - /* The range for the exponent when normalized */ - static int constexpr minExponent = STAmount::cMinOffset; - static int constexpr maxExponent = STAmount::cMaxOffset; - IOUAmount() = default; explicit IOUAmount(Number const& other); IOUAmount(beast::Zero); diff --git a/src/libxrpl/protocol/IOUAmount.cpp b/src/libxrpl/protocol/IOUAmount.cpp index 07767cd9e1..297c2bac12 100644 --- a/src/libxrpl/protocol/IOUAmount.cpp +++ b/src/libxrpl/protocol/IOUAmount.cpp @@ -42,6 +42,15 @@ setSTNumberSwitchover(bool v) *getStaticSTNumberSwitchover() = v; } +/* The range for the mantissa when normalized */ +// log(2^63,10) ~ 18.96 +// +static std::int64_t constexpr minMantissa = STAmount::cMinValue; +static std::int64_t constexpr maxMantissa = STAmount::cMaxValue; +/* The range for the exponent when normalized */ +static int constexpr minExponent = STAmount::cMinOffset; +static int constexpr maxExponent = STAmount::cMaxOffset; + IOUAmount IOUAmount::fromNumber(Number const& number) { @@ -298,8 +307,7 @@ mulRatio( { if (!result) { - return IOUAmount( - -IOUAmount::minMantissa, IOUAmount::minExponent); + return IOUAmount(-minMantissa, minExponent); } // This subtraction cannot underflow because `result` is not zero return IOUAmount(result.mantissa() - 1, result.exponent()); diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index b53126671b..520342629a 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -2374,7 +2374,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const result = - hfs.floatSet(1, IOUAmount::maxExponent + normalExp + 1, 0); + hfs.floatSet(1, wasm_float::maxExponent + normalExp + 1, 0); BEAST_EXPECT(!result) && BEAST_EXPECT( result.error() == @@ -2383,37 +2383,37 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const result = - hfs.floatSet(1, IOUAmount::minExponent + normalExp - 1, 0); + hfs.floatSet(1, wasm_float::minExponent + normalExp - 1, 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); } { auto const result = - hfs.floatSet(1, IOUAmount::maxExponent + normalExp, 0); + hfs.floatSet(1, wasm_float::maxExponent + normalExp, 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMaxExp); } { auto const result = - hfs.floatSet(-1, IOUAmount::maxExponent + normalExp, 0); + hfs.floatSet(-1, wasm_float::maxExponent + normalExp, 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMinusMaxExp); } { auto const result = - hfs.floatSet(1, IOUAmount::maxExponent + normalExp - 1, 0); + hfs.floatSet(1, wasm_float::maxExponent + normalExp - 1, 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatPreMaxExp); } { - auto const result = - hfs.floatSet(IOUAmount::maxMantissa, IOUAmount::maxExponent, 0); + auto const result = hfs.floatSet( + wasm_float::maxMantissa, wasm_float::maxExponent, 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMaxIOU); } { auto const result = - hfs.floatSet(1, IOUAmount::minExponent + normalExp, 0); + hfs.floatSet(1, wasm_float::minExponent + normalExp, 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMinExp); } @@ -2713,7 +2713,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const y = hfs.floatSet( - IOUAmount::maxMantissa, -normalExp - 1, 0); // 0.9999999... + wasm_float::maxMantissa, -normalExp - 1, 0); // 0.9999999... if (BEAST_EXPECT(y)) { auto const result = diff --git a/src/xrpld/app/wasm/HostFuncImpl.h b/src/xrpld/app/wasm/HostFuncImpl.h index fccea11252..7688eaf724 100644 --- a/src/xrpld/app/wasm/HostFuncImpl.h +++ b/src/xrpld/app/wasm/HostFuncImpl.h @@ -271,4 +271,14 @@ public: floatLog(Slice const& x, int32_t mode) override; }; +namespace wasm_float { + +// The range for the mantissa and exponent when normalized +static std::int64_t constexpr minMantissa = STAmount::cMinValue; +static std::int64_t constexpr maxMantissa = STAmount::cMaxValue; +static int constexpr minExponent = STAmount::cMinOffset; +static int constexpr maxExponent = STAmount::cMaxOffset; + +} // namespace wasm_float + } // namespace xrpl diff --git a/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp b/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp index 05b21d5e09..4e6c45ccf0 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp @@ -45,7 +45,7 @@ public: if (!m) return; - Number x(m, e + IOUAmount::minExponent - 1); + Number x(m, e + minExponent - 1); *static_cast(this) = x; good_ = true; } @@ -107,12 +107,12 @@ public: return Unexpected( HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_LINE } - else if (exponent() > IOUAmount::maxExponent) + else if (exponent() > maxExponent) return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); - else if (exponent() < IOUAmount::minExponent) + else if (exponent() < minExponent) return FLOAT_NULL; - int const e = exponent() - IOUAmount::minExponent + 1; //+97 + int const e = exponent() - minExponent + 1; //+97 v |= absM; v |= ((uint64_t)e) << 54; @@ -395,7 +395,7 @@ floatPowerImpl(Slice const& x, int32_t n, int32_t mode) { try { - if ((n < 0) || (n > IOUAmount::maxExponent)) + if ((n < 0) || (n > maxExponent)) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); detail::SetRound rm(mode); From fc35a9f9c82d70fab2be964e9f798d59269cfc62 Mon Sep 17 00:00:00 2001 From: Oleksandr <115580134+oleks-rip@users.noreply.github.com> Date: Wed, 14 Jan 2026 19:36:44 -0500 Subject: [PATCH 061/137] Fix usage of the Number class --- src/test/app/HostFuncImpl_test.cpp | 10 +-- src/xrpld/app/wasm/HostFuncImpl.h | 8 +- .../app/wasm/detail/HostFuncImplFloat.cpp | 73 ++++++++++++------- 3 files changed, 56 insertions(+), 35 deletions(-) diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 520342629a..de1468ca85 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -2176,7 +2176,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite Bytes const floatIntMin = {0x99, 0x20, 0xc4, 0x9b, 0xa5, 0xe3, 0x53, 0xf8}; // -2^63 Bytes const floatIntZero = {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // 0 Bytes const floatIntMax = {0xd9, 0x20, 0xc4, 0x9b, 0xa5, 0xe3, 0x53, 0xf8}; // 2^63-1 - Bytes const floatUIntMax = {0xd9, 0x46, 0x8d, 0xb8, 0xba, 0xc7, 0x10, 0xcb}; // 2^64 + Bytes const floatUIntMax = {0xd9, 0x46, 0x8d, 0xb8, 0xba, 0xc7, 0x10, 0xcb}; // 2^64-1 Bytes const floatMaxExp = {0xEC, 0x43, 0x8D, 0x7E, 0xA4, 0xC6, 0x80, 0x00}; // 1e(80+15) Bytes const floatPreMaxExp = {0xEC, 0x03, 0x8D, 0x7E, 0xA4, 0xC6, 0x80, 0x00}; // 1e(79+15) Bytes const floatMinusMaxExp = {0xAC, 0x43, 0x8D, 0x7E, 0xA4, 0xC6, 0x80, 0x00}; // -1e(80+15) @@ -2365,7 +2365,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const result = - hfs.floatSet(1, Number::maxExponent + normalExp + 1, 0); + hfs.floatSet(1, wasm_float::maxExponent + normalExp + 1, 0); BEAST_EXPECT(!result) && BEAST_EXPECT( result.error() == @@ -2406,8 +2406,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite } { - auto const result = hfs.floatSet( - wasm_float::maxMantissa, wasm_float::maxExponent, 0); + auto const result = + hfs.floatSet(STAmount::cMaxValue, wasm_float::maxExponent, 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMaxIOU); } @@ -2713,7 +2713,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const y = hfs.floatSet( - wasm_float::maxMantissa, -normalExp - 1, 0); // 0.9999999... + STAmount::cMaxValue, -normalExp - 1, 0); // 0.9999999... if (BEAST_EXPECT(y)) { auto const result = diff --git a/src/xrpld/app/wasm/HostFuncImpl.h b/src/xrpld/app/wasm/HostFuncImpl.h index 7688eaf724..0183a74a12 100644 --- a/src/xrpld/app/wasm/HostFuncImpl.h +++ b/src/xrpld/app/wasm/HostFuncImpl.h @@ -274,10 +274,10 @@ public: namespace wasm_float { // The range for the mantissa and exponent when normalized -static std::int64_t constexpr minMantissa = STAmount::cMinValue; -static std::int64_t constexpr maxMantissa = STAmount::cMaxValue; -static int constexpr minExponent = STAmount::cMinOffset; -static int constexpr maxExponent = STAmount::cMaxOffset; +static std::int64_t constexpr minMantissa = 1'000'000'000'000'000ll; +static std::int64_t constexpr maxMantissa = (1ull << 54) - 1; +static int constexpr minExponent = -96; +static int constexpr maxExponent = 80; } // namespace wasm_float diff --git a/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp b/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp index 4e6c45ccf0..e424e3cedf 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp @@ -45,7 +45,7 @@ public: if (!m) return; - Number x(m, e + minExponent - 1); + Number x(makeNumber(m, e + wasm_float::minExponent - 1)); *static_cast(this) = x; good_ = true; } @@ -54,7 +54,7 @@ public: { } - Number2(int64_t x) : Number(x), good_(true) + Number2(int64_t x) : Number(makeNumber(x, 0)), good_(true) { } @@ -62,22 +62,36 @@ public: { using mtype = std::invoke_result_t; if (x <= std::numeric_limits::max()) - *this = Number(x); + *this = makeNumber(x, 0); else - *this = Number(x / 10, 1) + Number(x % 10); - + *this = makeNumber(x / 10, 1); good_ = true; } Number2(int64_t mantissa, int32_t exponent) - : Number(mantissa, exponent), good_(true) + : Number(makeNumber(mantissa, exponent)), good_(true) { } - Number2(Number const& n) : Number(n), good_(true) + Number2(Number const& n) + : Number(makeNumber(n.mantissa(), n.exponent())), good_(true) { } + static Number + makeNumber(int64_t mantissa, int32_t exponent) + { + if (mantissa < 0) + return Number(true, -mantissa, exponent, Number::normalized()); + return Number(false, mantissa, exponent, Number::normalized()); + } + + static Number + makeNumber(uint64_t mantissa, int32_t exponent) + { + return Number(false, mantissa, exponent, Number::normalized()); + } + operator bool() const { return good_; @@ -102,17 +116,17 @@ public: } return FLOAT_NULL; } - else if (absM > ((1ull << 54) - 1)) + else if (absM > wasm_float::maxMantissa) { return Unexpected( HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_LINE } - else if (exponent() > maxExponent) + else if (exponent() > wasm_float::maxExponent) return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); - else if (exponent() < minExponent) + else if (exponent() < wasm_float::minExponent) return FLOAT_NULL; - int const e = exponent() - minExponent + 1; //+97 + int const e = exponent() - wasm_float::minExponent + 1; //+97 v |= absM; v |= ((uint64_t)e) << 54; @@ -136,24 +150,30 @@ public: Bytes const Number2::FLOAT_NULL = {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; -struct SetRound +struct FloatState { Number::rounding_mode oldMode_; + MantissaRange::mantissa_scale oldScale_; bool good_; - SetRound(int32_t mode) : oldMode_(Number::getround()), good_(false) + FloatState(int32_t mode) + : oldMode_(Number::getround()) + , oldScale_(Number::getMantissaScale()) + , good_(false) { if (mode < Number::rounding_mode::to_nearest || mode > Number::rounding_mode::upward) return; Number::setround(static_cast(mode)); + Number::setMantissaScale(MantissaRange::mantissa_scale::small); good_ = true; } - ~SetRound() + ~FloatState() { Number::setround(oldMode_); + Number::setMantissaScale(oldScale_); } operator bool() const @@ -186,7 +206,7 @@ floatFromIntImpl(int64_t x, int32_t mode) { try { - detail::SetRound rm(mode); + detail::FloatState rm(mode); if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); @@ -206,12 +226,13 @@ floatFromUintImpl(uint64_t x, int32_t mode) { try { - detail::SetRound rm(mode); + detail::FloatState rm(mode); if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); detail::Number2 num(x); - return num.toBytes(); + auto r = num.toBytes(); + return r; } // LCOV_EXCL_START catch (...) @@ -226,7 +247,7 @@ floatSetImpl(int64_t mantissa, int32_t exponent, int32_t mode) { try { - detail::SetRound rm(mode); + detail::FloatState rm(mode); if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); detail::Number2 num(mantissa, exponent); @@ -264,7 +285,7 @@ floatAddImpl(Slice const& x, Slice const& y, int32_t mode) { try { - detail::SetRound rm(mode); + detail::FloatState rm(mode); if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); @@ -291,7 +312,7 @@ floatSubtractImpl(Slice const& x, Slice const& y, int32_t mode) { try { - detail::SetRound rm(mode); + detail::FloatState rm(mode); if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); detail::Number2 xx(x); @@ -317,7 +338,7 @@ floatMultiplyImpl(Slice const& x, Slice const& y, int32_t mode) { try { - detail::SetRound rm(mode); + detail::FloatState rm(mode); if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); detail::Number2 xx(x); @@ -343,7 +364,7 @@ floatDivideImpl(Slice const& x, Slice const& y, int32_t mode) { try { - detail::SetRound rm(mode); + detail::FloatState rm(mode); if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); detail::Number2 xx(x); @@ -370,7 +391,7 @@ floatRootImpl(Slice const& x, int32_t n, int32_t mode) if (n < 1) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::SetRound rm(mode); + detail::FloatState rm(mode); if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); @@ -395,10 +416,10 @@ floatPowerImpl(Slice const& x, int32_t n, int32_t mode) { try { - if ((n < 0) || (n > maxExponent)) + if ((n < 0) || (n > wasm_float::maxExponent)) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::SetRound rm(mode); + detail::FloatState rm(mode); if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); @@ -425,7 +446,7 @@ floatLogImpl(Slice const& x, int32_t mode) { try { - detail::SetRound rm(mode); + detail::FloatState rm(mode); if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); From 209a1a6ffa5c60128b1a759f090facdfa08e6b91 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Thu, 15 Jan 2026 19:52:22 -0500 Subject: [PATCH 062/137] Don't throw from hostfunctions stack (#6221) --- src/xrpld/app/wasm/WasmiVM.h | 1 + src/xrpld/app/wasm/detail/HostFuncWrapper.cpp | 9 +++++- src/xrpld/app/wasm/detail/WasmiVM.cpp | 30 ++++++++++++++----- 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/src/xrpld/app/wasm/WasmiVM.h b/src/xrpld/app/wasm/WasmiVM.h index c39b577c46..0d051ea49b 100644 --- a/src/xrpld/app/wasm/WasmiVM.h +++ b/src/xrpld/app/wasm/WasmiVM.h @@ -108,6 +108,7 @@ struct InstanceWrapper { wasm_store_t* store_ = nullptr; WasmExternVec exports_; + mutable int memIdx_ = -1; InstancePtr instance_; beast::Journal j_ = beast::Journal(beast::Journal::getNullSink()); diff --git a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp index ee284fa6e9..8910f22aa1 100644 --- a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp @@ -332,7 +332,14 @@ checkGas(void* env) int64_t const gas = runtime->getGas(); WasmImportFunc const& impFunc = udata->second; int64_t const x = gas >= impFunc.gas ? gas - impFunc.gas : 0; - runtime->setGas(x); + + if (runtime->setGas(x) < 0) + { + wasm_trap_t* trap = reinterpret_cast( + WasmEngine::instance().newTrap("can't set gas")); // LCOV_EXCL_LINE + return Unexpected(trap); // LCOV_EXCL_LINE + } + if (gas < impFunc.gas) { wasm_trap_t* trap = reinterpret_cast( diff --git a/src/xrpld/app/wasm/detail/WasmiVM.cpp b/src/xrpld/app/wasm/detail/WasmiVM.cpp index 3c56f885dd..8bd4a7b8b8 100644 --- a/src/xrpld/app/wasm/detail/WasmiVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmiVM.cpp @@ -103,6 +103,8 @@ InstanceWrapper::operator=(InstanceWrapper&& o) store_ = o.store_; o.store_ = nullptr; exports_ = std::move(o.exports_); + memIdx_ = o.memIdx_; + o.memIdx_ = -1; instance_ = std::move(o.instance_); j_ = o.j_; @@ -162,22 +164,29 @@ InstanceWrapper::getFunc( wmem InstanceWrapper::getMem() const { - if (!instance_) - throw std::runtime_error("no instance"); // LCOV_EXCL_LINE + if (memIdx_ >= 0) + { + auto* e(exports_.vec_.data[memIdx_]); + wasm_memory_t* mem = wasm_extern_as_memory(e); + return { + reinterpret_cast(wasm_memory_data(mem)), + wasm_memory_data_size(mem)}; + } wasm_memory_t* mem = nullptr; - for (unsigned i = 0; i < exports_.vec_.size; ++i) + for (int i = 0; i < exports_.vec_.size; ++i) { auto* e(exports_.vec_.data[i]); if (wasm_extern_kind(e) == WASM_EXTERN_MEMORY) { + memIdx_ = i; mem = wasm_extern_as_memory(e); break; } } if (!mem) - throw std::runtime_error("no memory exported"); // LCOV_EXCL_LINE + return {}; // LCOV_EXCL_LINE return { reinterpret_cast(wasm_memory_data(mem)), @@ -209,7 +218,7 @@ InstanceWrapper::setGas(std::int64_t gas) const // LCOV_EXCL_START print_wasm_error("Can't set instance gas", nullptr, j_); wasmi_error_delete(err); - throw std::runtime_error("Can't set instance gas"); + return -1; // LCOV_EXCL_STOP } @@ -592,11 +601,13 @@ WasmiEngine::convertParams(std::vector const& params) break; // LCOV_EXCL_STOP case WT_U8V: { + auto mem = getMem(); + if (!mem.s) + throw std::runtime_error( + "no memory exported"); // LCOV_EXCL_LINE auto const sz = p.of.u8v.sz; auto const ptr = allocate(sz); - auto mem = getMem(); memcpy(mem.p + ptr, p.of.u8v.d, sz); - v.push_back(WASM_I32_VAL(ptr)); v.push_back(WASM_I32_VAL(sz)); } @@ -751,8 +762,11 @@ WasmiEngine::call( std::size_t sz, Types&&... args) { - auto const ptr = allocate(sz); auto mem = getMem(); + if (!mem.s) + throw std::runtime_error("no memory exported"); // LCOV_EXCL_LINE + + auto const ptr = allocate(sz); memcpy(mem.p + ptr, d, sz); add_param(in, ptr); From 9a9a7aab01369d5ec4e093d6009698f1cf73c722 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 15 Jan 2026 20:14:42 -0500 Subject: [PATCH 063/137] Add `Vector256` support to the locator (#6131) * add Vector256 nesting/length support * [WIP] add tests * fix tests * simplify with helper function * oops typo * remove static variable * respond to comments * STBaseOrUInt256->FieldValue * oops * add more tests for coverage * respond to comments --- src/test/app/HostFuncImpl_test.cpp | 91 ++++++++++++++-- .../app/wasm/detail/HostFuncImplGetter.cpp | 101 +++++++++++------- 2 files changed, 145 insertions(+), 47 deletions(-) diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index de1468ca85..769c7741e8 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -29,6 +29,12 @@ toBytes(std::uint32_t value) return Bytes{b, e}; } +static Bytes +toBytes(uint256 const& value) +{ + return Bytes{value.begin(), value.end()}; +} + static Bytes toBytes(Asset const& asset) { @@ -303,6 +309,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite testcase("getTxField"); using namespace test::jtx; + std::string const credIdHex = + "0011223344556677889900112233445566778899001122334455667788990011"; + uint256 credId; + BEAST_EXPECT(credId.parseHex(credIdHex)); + Env env{*this}; OpenView ov{*env.current()}; STTx const stx = STTx(ttESCROW_FINISH, [&](auto& obj) { @@ -310,6 +321,9 @@ struct HostFuncImpl_test : public beast::unit_test::suite obj.setAccountID(sfOwner, env.master.id()); obj.setFieldU32(sfOfferSequence, env.seq(env.master)); obj.setFieldArray(sfMemos, STArray{}); + STVector256 credIds; + credIds.push_back(credId); + obj.setFieldV256(sfCredentialIDs, credIds); }); ApplyContext ac = createApplyContext(env, ov, stx); auto const dummyEscrow = @@ -340,6 +354,12 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT( memos.error() == HostFunctionError::NOT_LEAF_FIELD); + auto const credentialIds = hfs.getTxField(sfCredentialIDs); + if (BEAST_EXPECT(!credentialIds.has_value())) + BEAST_EXPECTS( + credentialIds.error() == HostFunctionError::NOT_LEAF_FIELD, + std::to_string(HfErrorToInt(credentialIds.error()))); + auto const nonField = hfs.getTxField(sfInvalid); if (BEAST_EXPECT(!nonField.has_value())) BEAST_EXPECT( @@ -450,6 +470,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(*amountField == toBytes(XRP(100))); } + // Should return the PreviousTxnID field from the escrow ledger object + auto const previousTxnId = + hfs.getCurrentLedgerObjField(sfPreviousTxnID); + if (BEAST_EXPECT(previousTxnId.has_value())) + { + BEAST_EXPECT( + *previousTxnId == toBytes(env.tx()->getTransactionID())); + } + // Should return nullopt for a field not present auto const notPresent = hfs.getCurrentLedgerObjField(sfOwner); BEAST_EXPECT( @@ -541,6 +570,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env{*this}; OpenView ov{*env.current()}; + std::string const credIdHex = + "0011223344556677889900112233445566778899001122334455667788990011"; + uint256 credId; + BEAST_EXPECT(credId.parseHex(credIdHex)); + // Create a transaction with a nested array field STTx const stx = STTx(ttESCROW_FINISH, [&](auto& obj) { obj.setAccountID(sfAccount, env.master.id()); @@ -549,6 +583,9 @@ struct HostFuncImpl_test : public beast::unit_test::suite memoObj.setFieldVL(sfMemoData, Slice("hello", 5)); memos.push_back(memoObj); obj.setFieldArray(sfMemos, memos); + STVector256 credIds; + credIds.push_back(credId); + obj.setFieldV256(sfCredentialIDs, credIds); }); ApplyContext ac = createApplyContext(env, ov, stx); @@ -578,6 +615,24 @@ struct HostFuncImpl_test : public beast::unit_test::suite } } + { + // Locator for sfCredentialIDs[0] + std::vector locatorVec = {sfCredentialIDs.fieldCode, 0}; + Slice locator( + reinterpret_cast(locatorVec.data()), + locatorVec.size() * sizeof(int32_t)); + + auto const result = hfs.getTxNestedField(locator); + if (BEAST_EXPECTS( + result.has_value(), + std::to_string(static_cast(result.error())))) + { + std::string credIdResult( + result.value().begin(), result.value().end()); + BEAST_EXPECT(strHex(credIdResult) == credIdHex); + } + } + { // can use the nested locator for base fields too std::vector locatorVec = {sfAccount.fieldCode}; @@ -637,6 +692,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite sfMemoData.fieldCode}, HostFunctionError::INDEX_OUT_OF_BOUNDS); + // Locator for non-existent index + expectError( + {sfCredentialIDs.fieldCode, 1}, // index 1 does not exist + HostFunctionError::INDEX_OUT_OF_BOUNDS); + // Locator for non-existent nested field expectError( {sfMemos.fieldCode, @@ -661,6 +721,10 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Locator for STArray expectError({sfMemos.fieldCode}, HostFunctionError::NOT_LEAF_FIELD); + // Locator for STVector256 + expectError( + {sfCredentialIDs.fieldCode}, HostFunctionError::NOT_LEAF_FIELD); + // Locator for nesting into non-array/object field expectError( {sfAccount.fieldCode, // sfAccount is not an array or object @@ -956,6 +1020,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite testcase("getTxArrayLen"); using namespace test::jtx; + std::string const credIdHex = + "0011223344556677889900112233445566778899001122334455667788990011"; + uint256 credId; + BEAST_EXPECT(credId.parseHex(credIdHex)); + Env env{*this}; OpenView ov{*env.current()}; @@ -974,6 +1043,9 @@ struct HostFuncImpl_test : public beast::unit_test::suite memos.push_back(memoObj); } obj.setFieldArray(sfMemos, memos); + STVector256 credIds; + credIds.push_back(credId); + obj.setFieldV256(sfCredentialIDs, credIds); }); ApplyContext ac = createApplyContext(env, ov, stx); @@ -996,6 +1068,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite if (BEAST_EXPECT(!missingArray.has_value())) BEAST_EXPECT( missingArray.error() == HostFunctionError::FIELD_NOT_FOUND); + + // Should return 1 for sfCredentialIDs + auto const credIdsLen = hfs.getTxArrayLen(sfCredentialIDs); + if (BEAST_EXPECT(credIdsLen.has_value())) + BEAST_EXPECT(credIdsLen.value() == 1); } void @@ -2195,9 +2272,9 @@ struct HostFuncImpl_test : public beast::unit_test::suite // clang-format on void - testFloatTrace() + testTraceFloat() { - testcase("FloatTrace"); + testcase("traceFloat"); using namespace test::jtx; { @@ -2251,7 +2328,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite void testFloatFromInt() { - testcase("FloatFromInt"); + testcase("floatFromInt"); using namespace test::jtx; Env env{*this}; @@ -2298,7 +2375,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite void testFloatFromUint() { - testcase("FloatFromUint"); + testcase("floatFromUint"); using namespace test::jtx; Env env{*this}; @@ -2339,7 +2416,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite void testFloatSet() { - testcase("FloatSet"); + testcase("floatSet"); using namespace test::jtx; Env env{*this}; @@ -2426,7 +2503,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite void testFloatCompare() { - testcase("FloatCompare"); + testcase("floatCompare"); using namespace test::jtx; Env env{*this}; @@ -3071,7 +3148,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite void testFloats() { - testFloatTrace(); + testTraceFloat(); testFloatFromInt(); testFloatFromUint(); testFloatSet(); diff --git a/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp b/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp index d137ec1fef..10f0d4a03e 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp @@ -5,12 +5,13 @@ namespace xrpl { +typedef std::variant FieldValue; + namespace detail { static Expected getAnyFieldData(STBase const* obj) { - // auto const& fname = obj.getFName(); if (!obj) return Unexpected(HostFunctionError::FIELD_NOT_FOUND); @@ -25,6 +26,7 @@ getAnyFieldData(STBase const* obj) // LCOV_EXCL_STOP case STI_OBJECT: case STI_ARRAY: + case STI_VECTOR256: return Unexpected(HostFunctionError::NOT_LEAF_FIELD); break; case STI_ACCOUNT: { @@ -62,6 +64,7 @@ getAnyFieldData(STBase const* obj) auto const* e = reinterpret_cast(&data + 1); return Bytes{b, e}; } + break; case STI_UINT32: { auto const* num(static_cast const*>(obj)); std::uint32_t const data = num->value(); @@ -70,6 +73,12 @@ getAnyFieldData(STBase const* obj) return Bytes{b, e}; } break; + case STI_UINT256: { + auto const* uint256Obj(static_cast(obj)); + auto const& data = uint256Obj->value(); + return Bytes{data.begin(), data.end()}; + } + break; default: break; // default to serializer } @@ -81,6 +90,21 @@ getAnyFieldData(STBase const* obj) return data; } +static Expected +getAnyFieldData(FieldValue const& variantObj) +{ + if (STBase const* const* obj = std::get_if(&variantObj)) + { + return getAnyFieldData(*obj); + } + else if (uint256 const* const* u = std::get_if(&variantObj)) + { + return Bytes((*u)->begin(), (*u)->end()); + } + + return Unexpected(HostFunctionError::INTERNAL); // LCOV_EXCL_LINE +} + static inline bool noField(STBase const* field) { @@ -88,7 +112,7 @@ noField(STBase const* field) (STI_UNKNOWN == field->getSType()); } -static Expected +static Expected locateField(STObject const& obj, Slice const& locator) { if (locator.empty() || (locator.size() & 3)) // must be multiple of 4 @@ -141,6 +165,13 @@ locateField(STObject const& obj, Slice const& locator) auto const& fname(*it->second); field = o->peekAtPField(fname); } + else if (STI_VECTOR256 == field->getSType()) + { + auto const* v = static_cast(field); + if (sfieldCode >= v->size()) + return Unexpected(HostFunctionError::INDEX_OUT_OF_BOUNDS); + return FieldValue(&(v->operator[](sfieldCode))); + } else // simple field must be the last one { return Unexpected(HostFunctionError::LOCATOR_MALFORMED); @@ -150,7 +181,22 @@ locateField(STObject const& obj, Slice const& locator) return Unexpected(HostFunctionError::FIELD_NOT_FOUND); } - return field; + return FieldValue(field); +} + +static inline Expected +getArrayLen(FieldValue const& variantField) +{ + if (STBase const* const* field = std::get_if(&variantField)) + { + if ((*field)->getSType() == STI_VECTOR256) + return static_cast(*field)->size(); + if ((*field)->getSType() == STI_ARRAY) + return static_cast(*field)->size(); + } + // uint256 is not an array so that variant should still return NO_ARRAY + + return Unexpected(HostFunctionError::NO_ARRAY); // LCOV_EXCL_LINE } } // namespace detail @@ -256,24 +302,20 @@ WasmHostFunctionsImpl::getLedgerObjNestedField( Expected WasmHostFunctionsImpl::getTxArrayLen(SField const& fname) { - if (fname.fieldType != STI_ARRAY) + if (fname.fieldType != STI_ARRAY && fname.fieldType != STI_VECTOR256) return Unexpected(HostFunctionError::NO_ARRAY); auto const* field = ctx.tx.peekAtPField(fname); if (detail::noField(field)) return Unexpected(HostFunctionError::FIELD_NOT_FOUND); - if (field->getSType() != STI_ARRAY) - return Unexpected(HostFunctionError::NO_ARRAY); // LCOV_EXCL_LINE - int32_t const sz = static_cast(field)->size(); - - return sz; + return detail::getArrayLen(field); } Expected WasmHostFunctionsImpl::getCurrentLedgerObjArrayLen(SField const& fname) { - if (fname.fieldType != STI_ARRAY) + if (fname.fieldType != STI_ARRAY && fname.fieldType != STI_VECTOR256) return Unexpected(HostFunctionError::NO_ARRAY); auto const sle = getCurrentLedgerObj(); @@ -284,11 +326,7 @@ WasmHostFunctionsImpl::getCurrentLedgerObjArrayLen(SField const& fname) if (detail::noField(field)) return Unexpected(HostFunctionError::FIELD_NOT_FOUND); - if (field->getSType() != STI_ARRAY) - return Unexpected(HostFunctionError::NO_ARRAY); // LCOV_EXCL_LINE - int32_t const sz = static_cast(field)->size(); - - return sz; + return detail::getArrayLen(field); } Expected @@ -296,7 +334,7 @@ WasmHostFunctionsImpl::getLedgerObjArrayLen( int32_t cacheIdx, SField const& fname) { - if (fname.fieldType != STI_ARRAY) + if (fname.fieldType != STI_ARRAY && fname.fieldType != STI_VECTOR256) return Unexpected(HostFunctionError::NO_ARRAY); auto const normalizedIdx = normalizeCacheIndex(cacheIdx); @@ -307,12 +345,7 @@ WasmHostFunctionsImpl::getLedgerObjArrayLen( if (detail::noField(field)) return Unexpected(HostFunctionError::FIELD_NOT_FOUND); - if (field->getSType() != STI_ARRAY) - return Unexpected(HostFunctionError::NO_ARRAY); // LCOV_EXCL_LINE - - int32_t const sz = static_cast(field)->size(); - - return sz; + return detail::getArrayLen(field); } // Subsection: nested array length getters @@ -324,12 +357,8 @@ WasmHostFunctionsImpl::getTxNestedArrayLen(Slice const& locator) if (!r) return Unexpected(r.error()); - auto const* field = r.value(); - if (field->getSType() != STI_ARRAY) - return Unexpected(HostFunctionError::NO_ARRAY); - int32_t const sz = static_cast(field)->size(); - - return sz; + auto const& field = r.value(); + return detail::getArrayLen(field); } Expected @@ -342,12 +371,8 @@ WasmHostFunctionsImpl::getCurrentLedgerObjNestedArrayLen(Slice const& locator) if (!r) return Unexpected(r.error()); - auto const* field = r.value(); - if (field->getSType() != STI_ARRAY) - return Unexpected(HostFunctionError::NO_ARRAY); - int32_t const sz = static_cast(field)->size(); - - return sz; + auto const& field = r.value(); + return detail::getArrayLen(field); } Expected @@ -363,12 +388,8 @@ WasmHostFunctionsImpl::getLedgerObjNestedArrayLen( if (!r) return Unexpected(r.error()); - auto const* field = r.value(); - if (field->getSType() != STI_ARRAY) - return Unexpected(HostFunctionError::NO_ARRAY); - int32_t const sz = static_cast(field)->size(); - - return sz; + auto const& field = r.value(); + return detail::getArrayLen(field); } } // namespace xrpl From ce84cc8b44c5bb8fb23cf339a76f630b06cbb272 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 15 Jan 2026 20:50:55 -0500 Subject: [PATCH 064/137] improve trace hf code (#6190) * adjust trace statements * add helper function * use lambda instead * use same paradigm in TestHostFunctions * oops --- src/test/app/TestHostFunctions.h | 109 ++++++------------ src/xrpld/app/wasm/HostFuncImpl.h | 19 +++ .../app/wasm/detail/HostFuncImplTrace.cpp | 92 +++------------ 3 files changed, 67 insertions(+), 153 deletions(-) diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index cbc75f1ed9..17a210441d 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -380,35 +380,46 @@ public: return 4; } - Expected - trace(std::string_view const& msg, Slice const& data, bool asHex) override + template + void + log(std::string_view const& msg, F&& dataFn) { - auto const ret = msg.size() + data.size() * (asHex ? 2 : 1); #ifdef DEBUG_OUTPUT auto& j = std::cerr; #else if (!getJournal().active(beast::severities::kTrace)) - return ret; + return; auto j = getJournal().trace(); #endif - if (!asHex) - { - j << "WASM TRACE: " << msg << " " - << std::string_view( - reinterpret_cast(data.data()), data.size()); - } - else - { - std::string hex; - hex.reserve(data.size() * 2); - boost::algorithm::hex( - data.begin(), data.end(), std::back_inserter(hex)); - j << "WASM DEV TRACE: " << msg << " " << hex; - } + j << "WasmTrace: " << msg << " " << dataFn(); #ifdef DEBUG_OUTPUT j << std::endl; #endif + } + + Expected + trace(std::string_view const& msg, Slice const& data, bool asHex) override + { + auto const ret = msg.size() + data.size() * (asHex ? 2 : 1); + + if (!asHex) + { + log(msg, [&data] { + return std::string_view( + reinterpret_cast(data.data()), data.size()); + }); + } + else + { + log(msg, [&data] { + std::string hex; + hex.reserve(data.size() * 2); + boost::algorithm::hex( + data.begin(), data.end(), std::back_inserter(hex)); + return hex; + }); + } return ret; } @@ -417,18 +428,7 @@ public: traceNum(std::string_view const& msg, int64_t data) override { auto const ret = msg.size() + sizeof(data); -#ifdef DEBUG_OUTPUT - auto& j = std::cerr; -#else - if (!getJournal().active(beast::severities::kTrace)) - return ret; - auto j = getJournal().trace(); -#endif - j << "WASM TRACE NUM: " << msg << " " << data; - -#ifdef DEBUG_OUTPUT - j << std::endl; -#endif + log(msg, [data] { return data; }); return ret; } @@ -436,24 +436,7 @@ public: traceAccount(std::string_view const& msg, AccountID const& account) override { auto const ret = msg.size() + account.size(); -#ifdef DEBUG_OUTPUT - auto& j = std::cerr; -#else - if (!getJournal().active(beast::severities::kTrace)) - return ret; - auto j = getJournal().trace(); -#endif - if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - - auto const accountStr = toBase58(account); - - j << "WASM TRACE ACCOUNT: " << msg << " " << accountStr; - -#ifdef DEBUG_OUTPUT - j << std::endl; -#endif - + log(msg, [&account] { return toBase58(account); }); return ret; } @@ -461,20 +444,7 @@ public: traceFloat(std::string_view const& msg, Slice const& data) override { auto const ret = msg.size() + data.size(); -#ifdef DEBUG_OUTPUT - auto& j = std::cerr; -#else - if (!getJournal().active(beast::severities::kTrace)) - return ret; - auto j = getJournal().trace(); -#endif - auto const s = wasm_float::floatToString(data); - j << "WASM TRACE FLOAT: " << msg << " " << s; - -#ifdef DEBUG_OUTPUT - j << std::endl; -#endif - + log(msg, [&data] { return wasm_float::floatToString(data); }); return ret; } @@ -482,20 +452,7 @@ public: traceAmount(std::string_view const& msg, STAmount const& amount) override { auto const ret = msg.size(); -#ifdef DEBUG_OUTPUT - auto& j = std::cerr; -#else - if (!getJournal().active(beast::severities::kTrace)) - return ret; - auto j = getJournal().trace(); -#endif - auto const amountStr = amount.getFullText(); - j << "WASM TRACE AMOUNT: " << msg << " " << amountStr; - -#ifdef DEBUG_OUTPUT - j << std::endl; -#endif - + log(msg, [&amount] { return amount.getFullText(); }); return ret; } diff --git a/src/xrpld/app/wasm/HostFuncImpl.h b/src/xrpld/app/wasm/HostFuncImpl.h index 0183a74a12..26c55328db 100644 --- a/src/xrpld/app/wasm/HostFuncImpl.h +++ b/src/xrpld/app/wasm/HostFuncImpl.h @@ -41,6 +41,25 @@ class WasmHostFunctionsImpl : public HostFunctions return cacheIdx; } + template + void + log(std::string_view const& msg, F&& dataFn) + { +#ifdef DEBUG_OUTPUT + auto& j = std::cerr; +#else + if (!getJournal().active(beast::severities::kTrace)) + return; + auto j = getJournal().trace(); +#endif + j << "WasmTrace[" << to_short_string(leKey.key) << "]: " << msg << " " + << dataFn(); + +#ifdef DEBUG_OUTPUT + j << std::endl; +#endif + } + public: WasmHostFunctionsImpl(ApplyContext& ct, Keylet const& leKey) : HostFunctions(ct.journal), ctx(ct), leKey(leKey) diff --git a/src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp b/src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp index d597a54f54..ddf4cde0e5 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp @@ -16,33 +16,25 @@ WasmHostFunctionsImpl::trace( bool asHex) { auto const ret = msg.size() + data.size() * (asHex ? 2 : 1); -#ifdef DEBUG_OUTPUT - auto& j = std::cerr; -#else - if (!getJournal().active(beast::severities::kTrace)) - return ret; - auto j = getJournal().trace(); -#endif if (!asHex) { - j << "HF TRACE (" << leKey.key << "): " << msg << " " - << std::string_view( - reinterpret_cast(data.data()), data.size()); + log(msg, [&data] { + return std::string_view( + reinterpret_cast(data.data()), data.size()); + }); } else { - std::string hex; - hex.reserve(data.size() * 2); - boost::algorithm::hex( - data.begin(), data.end(), std::back_inserter(hex)); - j << "HF DEV TRACE (" << leKey.key << "): " << msg << " " << hex; + log(msg, [&data] { + std::string hex; + hex.reserve(data.size() * 2); + boost::algorithm::hex( + data.begin(), data.end(), std::back_inserter(hex)); + return hex; + }); } -#ifdef DEBUG_OUTPUT - j << std::endl; -#endif - return ret; } @@ -50,20 +42,7 @@ Expected WasmHostFunctionsImpl::traceNum(std::string_view const& msg, int64_t data) { auto const ret = msg.size() + sizeof(data); -#ifdef DEBUG_OUTPUT - auto& j = std::cerr; -#else - if (!getJournal().active(beast::severities::kTrace)) - return ret; - auto j = getJournal().trace(); -#endif - - j << "HF TRACE NUM(" << leKey.key << "): " << msg << " " << data; - -#ifdef DEBUG_OUTPUT - j << std::endl; -#endif - + log(msg, [data] { return data; }); return ret; } @@ -73,22 +52,7 @@ WasmHostFunctionsImpl::traceAccount( AccountID const& account) { auto const ret = msg.size() + account.size(); -#ifdef DEBUG_OUTPUT - auto& j = std::cerr; -#else - if (!getJournal().active(beast::severities::kTrace)) - return ret; - auto j = getJournal().trace(); -#endif - - auto const accountStr = toBase58(account); - - j << "HF TRACE ACCOUNT(" << leKey.key << "): " << msg << " " << accountStr; - -#ifdef DEBUG_OUTPUT - j << std::endl; -#endif - + log(msg, [&account] { return toBase58(account); }); return ret; } @@ -98,20 +62,7 @@ WasmHostFunctionsImpl::traceFloat( Slice const& data) { auto const ret = msg.size() + data.size(); -#ifdef DEBUG_OUTPUT - auto& j = std::cerr; -#else - if (!getJournal().active(beast::severities::kTrace)) - return ret; - auto j = getJournal().trace(); -#endif - auto const s = wasm_float::floatToString(data); - j << "HF TRACE FLOAT(" << leKey.key << "): " << msg << " " << s; - -#ifdef DEBUG_OUTPUT - j << std::endl; -#endif - + log(msg, [&data] { return wasm_float::floatToString(data); }); return ret; } @@ -121,20 +72,7 @@ WasmHostFunctionsImpl::traceAmount( STAmount const& amount) { auto const ret = msg.size(); -#ifdef DEBUG_OUTPUT - auto& j = std::cerr; -#else - if (!getJournal().active(beast::severities::kTrace)) - return ret; - auto j = getJournal().trace(); -#endif - auto const amountStr = amount.getFullText(); - j << "HF TRACE AMOUNT(" << leKey.key << "): " << msg << " " << amountStr; - -#ifdef DEBUG_OUTPUT - j << std::endl; -#endif - + log(msg, [&amount] { return amount.getFullText(); }); return ret; } From 42494dd4cf3fd2bc3d54c733c49df32a2e9aa4e1 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Wed, 21 Jan 2026 12:43:12 -0500 Subject: [PATCH 065/137] Ensure lifetime of imports (#6230) --- src/test/app/Wasm_test.cpp | 147 +++++++++++++------------- src/xrpld/app/wasm/WasmVM.h | 14 +-- src/xrpld/app/wasm/WasmiVM.h | 27 +++-- src/xrpld/app/wasm/detail/WasmVM.cpp | 32 +++--- src/xrpld/app/wasm/detail/WasmiVM.cpp | 62 ++++++----- 5 files changed, 143 insertions(+), 139 deletions(-) diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 0eca654335..2ac0680422 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -84,9 +84,9 @@ struct Wasm_test : public beast::unit_test::suite // clang-format on auto& vm = WasmEngine::instance(); - ImportVec imports; + std::shared_ptr imports(std::make_shared()); WasmImpFunc( - imports, "func-add", reinterpret_cast(&Add)); + *imports, "func-add", reinterpret_cast(&Add)); auto re = vm.run(wasm, "addTwo", wasmParams(1234, 5678), imports); @@ -107,7 +107,7 @@ struct Wasm_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this}; - HostFunctions hfs(env.journal); + std::shared_ptr hfs(new HostFunctions(env.journal)); { auto wasmHex = "00000000"; @@ -165,10 +165,10 @@ struct Wasm_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this}; - TestLedgerDataProvider hf(env); - - ImportVec imports; - WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn", &hf, 33); + std::shared_ptr hfs(new TestLedgerDataProvider(env)); + auto imports = std::make_shared(); + WASM_IMPORT_FUNC2( + *imports, getLedgerSqn, "get_ledger_sqn", hfs.get(), 33); auto& engine = WasmEngine::instance(); auto re = engine.run( @@ -176,7 +176,7 @@ struct Wasm_test : public beast::unit_test::suite ESCROW_FUNCTION_NAME, {}, imports, - &hf, + hfs, 1'000'000, env.journal); @@ -191,7 +191,7 @@ struct Wasm_test : public beast::unit_test::suite // empty module - run the same instance re = engine.run( - {}, ESCROW_FUNCTION_NAME, {}, imports, &hf, 1'000'000, env.journal); + {}, ESCROW_FUNCTION_NAME, {}, imports, hfs, 1'000'000, env.journal); if (BEAST_EXPECT(re.has_value())) { @@ -277,9 +277,9 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); - TestHostFunctions hfs(env, 0); - ImportVec imp = createWasmImport(hfs); - for (auto& i : imp) + std::shared_ptr hfs(new TestHostFunctions(env, 0)); + auto imp = createWasmImport(*hfs); + for (auto& i : *imp) i.second.gas = 0; auto re = engine.run( @@ -287,7 +287,7 @@ struct Wasm_test : public beast::unit_test::suite ESCROW_FUNCTION_NAME, {}, imp, - &hfs, + hfs, 1'000'000, env.journal); @@ -313,15 +313,15 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); - TestHostFunctions hfs(env, 0); - ImportVec const imp = createWasmImport(hfs); + std::shared_ptr hfs(new TestHostFunctions(env, 0)); + auto const imp = createWasmImport(*hfs); auto re = engine.run( wasm, ESCROW_FUNCTION_NAME, {}, imp, - &hfs, + hfs, 1'000'000, env.journal); @@ -342,11 +342,11 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); - TestHostFunctions hfs(env, 0); - ImportVec const imp = createWasmImport(hfs); + std::shared_ptr hfs(new TestHostFunctions(env, 0)); + auto const imp = createWasmImport(*hfs); auto re = engine.run( - wasm, ESCROW_FUNCTION_NAME, {}, imp, &hfs, 200, env.journal); + wasm, ESCROW_FUNCTION_NAME, {}, imp, hfs, 200, env.journal); if (BEAST_EXPECT(!re)) { @@ -371,9 +371,9 @@ struct Wasm_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this}; { - TestHostFunctions nfs(env, 0); + std::shared_ptr hfs(new TestHostFunctions(env, 0)); auto re = - runEscrowWasm(wasm, nfs, ESCROW_FUNCTION_NAME, {}, 100'000); + runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); @@ -383,8 +383,8 @@ struct Wasm_test : public beast::unit_test::suite { // max() gas - TestHostFunctions nfs(env, 0); - auto re = runEscrowWasm(wasm, nfs, ESCROW_FUNCTION_NAME, {}, -1); + std::shared_ptr hfs(new TestHostFunctions(env, 0)); + auto re = runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, -1); if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); @@ -404,9 +404,10 @@ struct Wasm_test : public beast::unit_test::suite return Unexpected(HostFunctionError::FIELD_NOT_FOUND); } }; - BadTestHostFunctions nfs(env); + + std::shared_ptr hfs(new BadTestHostFunctions(env)); auto re = - runEscrowWasm(wasm, nfs, ESCROW_FUNCTION_NAME, {}, 100'000); + runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == -201, std::to_string(re->result)); @@ -426,9 +427,10 @@ struct Wasm_test : public beast::unit_test::suite return Bytes((128 + 1) * 64 * 1024, 1); } }; - BadTestHostFunctions nfs(env); + + std::shared_ptr hfs(new BadTestHostFunctions(env)); auto re = - runEscrowWasm(wasm, nfs, ESCROW_FUNCTION_NAME, {}, 100'000); + runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == -201, std::to_string(re->result)); @@ -441,14 +443,15 @@ struct Wasm_test : public beast::unit_test::suite auto const wasmStr = boost::algorithm::unhex(deepRecursionHex); std::vector wasm(wasmStr.begin(), wasmStr.end()); - TestHostFunctionsSink nfs(env); + std::shared_ptr hfs( + new TestHostFunctionsSink(env)); std::string funcName("finish"); - auto re = runEscrowWasm(wasm, nfs, funcName, {}, 1'000'000'000); + auto re = runEscrowWasm(wasm, hfs, funcName, {}, 1'000'000'000); BEAST_EXPECT(!re && re.error()); // std::cout << "bad case (deep recursion) result " << re.error() // << std::endl; - auto const& sink = nfs.getSink(); + auto const& sink = hfs->getSink(); auto countSubstr = [](std::string const& str, std::string const& substr) { std::size_t pos = 0; @@ -471,7 +474,7 @@ struct Wasm_test : public beast::unit_test::suite auto const wasmStr = boost::algorithm::unhex(infiniteLoopWasmHex); Bytes wasm(wasmStr.begin(), wasmStr.end()); std::string const funcName("loop"); - TestHostFunctions hfs(env, 0); + std::shared_ptr hfs(new TestHostFunctions(env, 0)); // infinite loop should be caught and fail auto const re = runEscrowWasm(wasm, hfs, funcName, {}, 1'000'000); @@ -485,11 +488,10 @@ struct Wasm_test : public beast::unit_test::suite // expected import not provided auto wasmStr = boost::algorithm::unhex(ledgerSqnWasmHex); Bytes wasm(wasmStr.begin(), wasmStr.end()); - TestLedgerDataProvider ledgerDataProvider(env); - - ImportVec imports; + std::shared_ptr hfs(new TestLedgerDataProvider(env)); + std::shared_ptr imports(std::make_shared()); WASM_IMPORT_FUNC2( - imports, getLedgerSqn, "get_ledger_sqn2", &ledgerDataProvider); + *imports, getLedgerSqn, "get_ledger_sqn2", hfs.get()); auto& engine = WasmEngine::instance(); @@ -498,7 +500,7 @@ struct Wasm_test : public beast::unit_test::suite ESCROW_FUNCTION_NAME, {}, imports, - &ledgerDataProvider, + hfs, 1'000'000, env.journal); @@ -509,12 +511,11 @@ struct Wasm_test : public beast::unit_test::suite // bad import format auto wasmStr = boost::algorithm::unhex(ledgerSqnWasmHex); Bytes wasm(wasmStr.begin(), wasmStr.end()); - TestLedgerDataProvider ledgerDataProvider(env); - - ImportVec imports; + std::shared_ptr hfs(new TestLedgerDataProvider(env)); + std::shared_ptr imports(std::make_shared()); WASM_IMPORT_FUNC2( - imports, getLedgerSqn, "get_ledger_sqn", &ledgerDataProvider); - imports[0].first = nullptr; + *imports, getLedgerSqn, "get_ledger_sqn", hfs.get()); + (*imports)[0].first = nullptr; auto& engine = WasmEngine::instance(); @@ -523,7 +524,7 @@ struct Wasm_test : public beast::unit_test::suite ESCROW_FUNCTION_NAME, {}, imports, - &ledgerDataProvider, + hfs, 1'000'000, env.journal); @@ -534,21 +535,14 @@ struct Wasm_test : public beast::unit_test::suite // bad function name auto wasmStr = boost::algorithm::unhex(ledgerSqnWasmHex); Bytes wasm(wasmStr.begin(), wasmStr.end()); - TestLedgerDataProvider ledgerDataProvider(env); - - ImportVec imports; + std::shared_ptr hfs(new TestLedgerDataProvider(env)); + std::shared_ptr imports(std::make_shared()); WASM_IMPORT_FUNC2( - imports, getLedgerSqn, "get_ledger_sqn", &ledgerDataProvider); + *imports, getLedgerSqn, "get_ledger_sqn", hfs.get()); auto& engine = WasmEngine::instance(); auto re = engine.run( - wasm, - "func1", - {}, - imports, - &ledgerDataProvider, - 1'000'000, - env.journal); + wasm, "func1", {}, imports, hfs, 1'000'000, env.journal); BEAST_EXPECT(!re); } @@ -569,8 +563,8 @@ struct Wasm_test : public beast::unit_test::suite std::string const wasmStr = boost::algorithm::unhex(wasmHex); std::vector const wasm(wasmStr.begin(), wasmStr.end()); - TestHostFunctions hf(env, 0); - auto re = runEscrowWasm(wasm, hf, funcName, {}, 200'000); + std::shared_ptr hfs(new TestHostFunctions(env, 0)); + auto re = runEscrowWasm(wasm, hfs, funcName, {}, 200'000); if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); @@ -584,8 +578,8 @@ struct Wasm_test : public beast::unit_test::suite std::string const wasmStr = boost::algorithm::unhex(wasmHex); std::vector const wasm(wasmStr.begin(), wasmStr.end()); - TestHostFunctions hf(env, 0); - auto re = runEscrowWasm(wasm, hf, funcName, {}, 100'000); + std::shared_ptr hfs(new TestHostFunctions(env, 0)); + auto re = runEscrowWasm(wasm, hfs, funcName, {}, 100'000); if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); @@ -671,9 +665,10 @@ struct Wasm_test : public beast::unit_test::suite env(token::mint(alan, 0u)); env.close(); - PerfHostFunctions nfs(env, k, env.tx()); + std::shared_ptr hfs( + new PerfHostFunctions(env, k, env.tx())); - auto re = runEscrowWasm(wasm, nfs, ESCROW_FUNCTION_NAME); + auto re = runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME); if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECT(re->result); @@ -701,7 +696,7 @@ struct Wasm_test : public beast::unit_test::suite auto const wasmStr = boost::algorithm::unhex(codecovTestsWasmHex); Bytes const wasm(wasmStr.begin(), wasmStr.end()); - TestHostFunctions hfs(env, 0); + std::shared_ptr hfs(new TestHostFunctions(env, 0)); auto const allowance = 185'974; auto re = runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, allowance); @@ -724,7 +719,7 @@ struct Wasm_test : public beast::unit_test::suite auto const wasmStr = boost::algorithm::unhex(disabledFloatHex); Bytes wasm(wasmStr.begin(), wasmStr.end()); std::string const funcName("finish"); - TestHostFunctions hfs(env, 0); + std::shared_ptr hfs(new TestHostFunctions(env, 0)); { // f32 set constant, opcode disabled exception @@ -868,12 +863,12 @@ struct Wasm_test : public beast::unit_test::suite auto wasmStr = boost::algorithm::unhex(startLoopHex); Bytes wasm(wasmStr.begin(), wasmStr.end()); - TestLedgerDataProvider ledgerDataProvider(env); - ImportVec imports; + std::shared_ptr hfs(new TestLedgerDataProvider(env)); + std::shared_ptr imports(std::make_shared()); auto& engine = WasmEngine::instance(); - auto checkRes = engine.check( - wasm, "finish", {}, imports, &ledgerDataProvider, env.journal); + auto checkRes = + engine.check(wasm, "finish", {}, imports, hfs, env.journal); BEAST_EXPECTS( checkRes == tesSUCCESS, std::to_string(TERtoInt(checkRes))); @@ -882,7 +877,7 @@ struct Wasm_test : public beast::unit_test::suite ESCROW_FUNCTION_NAME, {}, imports, - &ledgerDataProvider, + hfs, 1'000'000, env.journal); BEAST_EXPECTS( @@ -902,9 +897,9 @@ struct Wasm_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this}; - TestLedgerDataProvider hf(env); + std::shared_ptr hfs(new TestLedgerDataProvider(env)); - // ImportVec imports; + // std::shared_ptr imports(std::make_shared()); uint8_t buf1[8] = {7, 8, 9, 10, 11, 12, 13, 14}; { // forged "allocate" return valid address std::vector params = { @@ -913,7 +908,7 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); auto re = engine.run( - wasm, "test", params, {}, &hf, 1'000'000, env.journal); + wasm, "test", params, {}, hfs, 1'000'000, env.journal); if (BEAST_EXPECT(re)) { BEAST_EXPECTS(re->result == 7, std::to_string(re->result)); @@ -926,7 +921,7 @@ struct Wasm_test : public beast::unit_test::suite {.type = WT_U8V, .of = {.u8v = {.d = buf1, .sz = 0}}}}; auto& engine = WasmEngine::instance(); auto re = engine.run( - wasm, "test", params, {}, &hf, 1'000'000, env.journal); + wasm, "test", params, {}, hfs, 1'000'000, env.journal); BEAST_EXPECT(!re) && BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); } @@ -936,7 +931,7 @@ struct Wasm_test : public beast::unit_test::suite {.type = WT_U8V, .of = {.u8v = {.d = buf1, .sz = 1}}}}; auto& engine = WasmEngine::instance(); auto re = engine.run( - wasm, "test", params, {}, &hf, 1'000'000, env.journal); + wasm, "test", params, {}, hfs, 1'000'000, env.journal); BEAST_EXPECT(!re) && BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); } @@ -946,7 +941,7 @@ struct Wasm_test : public beast::unit_test::suite {.type = WT_U8V, .of = {.u8v = {.d = buf1, .sz = 2}}}}; auto& engine = WasmEngine::instance(); auto re = engine.run( - wasm, "test", params, {}, &hf, 1'000'000, env.journal); + wasm, "test", params, {}, hfs, 1'000'000, env.journal); BEAST_EXPECT(!re) && BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); } @@ -956,7 +951,7 @@ struct Wasm_test : public beast::unit_test::suite {.type = WT_U8V, .of = {.u8v = {.d = buf1, .sz = 3}}}}; auto& engine = WasmEngine::instance(); auto re = engine.run( - wasm, "test", params, {}, &hf, 1'000'000, env.journal); + wasm, "test", params, {}, hfs, 1'000'000, env.journal); BEAST_EXPECT(!re) && BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); @@ -977,15 +972,15 @@ struct Wasm_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this}; - TestHostFunctions hf(env); - ImportVec imports = createWasmImport(hf); + std::shared_ptr hfs(new TestHostFunctions(env, 0)); + auto imports = createWasmImport(*hfs); { // Calls float_from_uint with bad aligment. // Can be checked through codecov auto& engine = WasmEngine::instance(); auto re = engine.run( - wasm, "test", {}, imports, &hf, 1'000'000, env.journal); + wasm, "test", {}, imports, hfs, 1'000'000, env.journal); BEAST_EXPECT(re && re->result == 0xbab88d46); } diff --git a/src/xrpld/app/wasm/WasmVM.h b/src/xrpld/app/wasm/WasmVM.h index c9c8d9c8e0..f14c475dc5 100644 --- a/src/xrpld/app/wasm/WasmVM.h +++ b/src/xrpld/app/wasm/WasmVM.h @@ -45,8 +45,8 @@ public: run(Bytes const& wasmCode, std::string_view funcName = {}, std::vector const& params = {}, - ImportVec const& imports = {}, - HostFunctions* hfs = nullptr, + std::shared_ptr const& imports = {}, + std::shared_ptr const& hfs = {}, int64_t gasLimit = -1, beast::Journal j = beast::Journal{beast::Journal::getNullSink()}); @@ -55,8 +55,8 @@ public: Bytes const& wasmCode, std::string_view funcName, std::vector const& params = {}, - ImportVec const& imports = {}, - HostFunctions* hfs = nullptr, + std::shared_ptr const& imports = {}, + std::shared_ptr const& hfs = {}, beast::Journal j = beast::Journal{beast::Journal::getNullSink()}); // Host functions helper functionality @@ -69,13 +69,13 @@ public: //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -ImportVec +std::shared_ptr createWasmImport(HostFunctions& hfs); Expected runEscrowWasm( Bytes const& wasmCode, - HostFunctions& hfs, + std::shared_ptr const& hfs, std::string_view funcName = ESCROW_FUNCTION_NAME, std::vector const& params = {}, int64_t gasLimit = -1); @@ -83,7 +83,7 @@ runEscrowWasm( NotTEC preflightEscrowWasm( Bytes const& wasmCode, - HostFunctions& hfs, + std::shared_ptr const& hfs, std::string_view funcName = ESCROW_FUNCTION_NAME, std::vector const& params = {}); diff --git a/src/xrpld/app/wasm/WasmiVM.h b/src/xrpld/app/wasm/WasmiVM.h index 0d051ea49b..d7e52d6a0e 100644 --- a/src/xrpld/app/wasm/WasmiVM.h +++ b/src/xrpld/app/wasm/WasmiVM.h @@ -172,7 +172,7 @@ public: StorePtr& s, Bytes const& wasmBin, bool instantiate, - ImportVec const& imports, + std::shared_ptr const& imports, beast::Journal j); ~ModuleWrapper() = default; @@ -198,7 +198,7 @@ public: private: WasmExternVec - buildImports(StorePtr& s, ImportVec const& imports); + buildImports(StorePtr& s, std::shared_ptr const& imports); }; class WasmiEngine @@ -210,6 +210,10 @@ class WasmiEngine std::mutex m_; // 1 instance mutex + // to ensure lifetime during next executions with the same module + std::shared_ptr imports_; + std::shared_ptr hfs_; + public: WasmiEngine(); ~WasmiEngine() = default; @@ -221,8 +225,8 @@ public: run(Bytes const& wasmCode, std::string_view funcName, std::vector const& params, - ImportVec const& imports, - HostFunctions* hfs, + std::shared_ptr const& imports, + std::shared_ptr const& hfs, int64_t gas, beast::Journal j); @@ -231,8 +235,8 @@ public: Bytes const& wasmCode, std::string_view funcName, std::vector const& params, - ImportVec const& imports, - HostFunctions* hfs, + std::shared_ptr const& imports, + std::shared_ptr const& hfs, beast::Journal j); std::int64_t @@ -260,23 +264,16 @@ private: Bytes const& wasmCode, std::string_view funcName, std::vector const& params, - ImportVec const& imports, - HostFunctions* hfs, int64_t gas); NotTEC checkHlp( Bytes const& wasmCode, std::string_view funcName, - std::vector const& params, - ImportVec const& imports); + std::vector const& params); int - addModule( - Bytes const& wasmCode, - bool instantiate, - int64_t gas, - ImportVec const& imports); + addModule(Bytes const& wasmCode, bool instantiate, int64_t gas); void clearModules(); diff --git a/src/xrpld/app/wasm/detail/WasmVM.cpp b/src/xrpld/app/wasm/detail/WasmVM.cpp index 062e50ba93..c7fa3bbb5b 100644 --- a/src/xrpld/app/wasm/detail/WasmVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmVM.cpp @@ -89,13 +89,13 @@ setCommonHostFunctions(HostFunctions* hfs, ImportVec& i) // clang-format on } -ImportVec +std::shared_ptr createWasmImport(HostFunctions& hfs) { - ImportVec i; + std::shared_ptr i(std::make_shared()); - setCommonHostFunctions(&hfs, i); - WASM_IMPORT_FUNC2(i, updateData, "update_data", &hfs, 1000); + setCommonHostFunctions(&hfs, *i); + WASM_IMPORT_FUNC2(*i, updateData, "update_data", &hfs, 1000); return i; } @@ -103,7 +103,7 @@ createWasmImport(HostFunctions& hfs) Expected runEscrowWasm( Bytes const& wasmCode, - HostFunctions& hfs, + std::shared_ptr const& hfs, std::string_view funcName, std::vector const& params, int64_t gasLimit) @@ -116,10 +116,10 @@ runEscrowWasm( wasmCode, funcName, params, - createWasmImport(hfs), - &hfs, + createWasmImport(*hfs), + hfs, gasLimit, - hfs.getJournal()); + hfs->getJournal()); // std::cout << "runEscrowWasm, mod size: " << wasmCode.size() // << ", gasLimit: " << gasLimit << ", funcName: " << funcName; @@ -142,7 +142,7 @@ runEscrowWasm( NotTEC preflightEscrowWasm( Bytes const& wasmCode, - HostFunctions& hfs, + std::shared_ptr const& hfs, std::string_view funcName, std::vector const& params) { @@ -154,9 +154,9 @@ preflightEscrowWasm( wasmCode, funcName, params, - createWasmImport(hfs), - &hfs, - hfs.getJournal()); + createWasmImport(*hfs), + hfs, + hfs->getJournal()); return ret; } @@ -179,8 +179,8 @@ WasmEngine::run( Bytes const& wasmCode, std::string_view funcName, std::vector const& params, - ImportVec const& imports, - HostFunctions* hfs, + std::shared_ptr const& imports, + std::shared_ptr const& hfs, int64_t gasLimit, beast::Journal j) { @@ -192,8 +192,8 @@ WasmEngine::check( Bytes const& wasmCode, std::string_view funcName, std::vector const& params, - ImportVec const& imports, - HostFunctions* hfs, + std::shared_ptr const& imports, + std::shared_ptr const& hfs, beast::Journal j) { return impl->check(wasmCode, funcName, params, imports, hfs, j); diff --git a/src/xrpld/app/wasm/detail/WasmiVM.cpp b/src/xrpld/app/wasm/detail/WasmiVM.cpp index 8bd4a7b8b8..037f787a26 100644 --- a/src/xrpld/app/wasm/detail/WasmiVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmiVM.cpp @@ -255,7 +255,7 @@ ModuleWrapper::ModuleWrapper( StorePtr& s, Bytes const& wasmBin, bool instantiate, - ImportVec const& imports, + std::shared_ptr const& imports, beast::Journal j) : module_(init(s, wasmBin, j)), j_(j) { @@ -342,13 +342,17 @@ makeImpReturn(WasmImportFunc const& imp) } WasmExternVec -ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) +ModuleWrapper::buildImports( + StorePtr& s, + std::shared_ptr const& imports) { WasmImporttypeVec importTypes; wasm_module_imports(module_.get(), &importTypes.vec_); if (!importTypes.vec_.size) return {}; + if (!imports) + throw std::runtime_error("Missing imports"); WasmExternVec wimports(importTypes.vec_.size); @@ -374,7 +378,7 @@ ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) // continue; bool impSet = false; - for (auto const& obj : imports) + for (auto const& obj : *imports) { auto const& imp = obj.second; if (imp.name != fieldName) @@ -536,11 +540,7 @@ WasmiEngine::WasmiEngine() } int -WasmiEngine::addModule( - Bytes const& wasmCode, - bool instantiate, - int64_t gas, - ImportVec const& imports) +WasmiEngine::addModule(Bytes const& wasmCode, bool instantiate, int64_t gas) { moduleWrap_.reset(); store_.reset(); // to free the memory before creating new store @@ -562,7 +562,7 @@ WasmiEngine::addModule( } moduleWrap_ = std::make_unique( - store_, wasmCode, instantiate, imports, j_); + store_, wasmCode, instantiate, imports_, j_); if (!moduleWrap_) throw std::runtime_error( @@ -800,16 +800,24 @@ WasmiEngine::run( Bytes const& wasmCode, std::string_view funcName, std::vector const& params, - ImportVec const& imports, - HostFunctions* hfs, + std::shared_ptr const& imports, + std::shared_ptr const& hfs, int64_t gas, beast::Journal j) { j_ = j; + + if (!wasmCode.empty()) + { // save values for reuse + imports_ = imports; + hfs_ = hfs; + } + try { - checkImports(imports, hfs); - return runHlp(wasmCode, funcName, params, imports, hfs, gas); + if (imports_) + checkImports(*imports_, hfs.get()); + return runHlp(wasmCode, funcName, params, gas); } catch (std::exception const& e) { @@ -829,8 +837,6 @@ WasmiEngine::runHlp( Bytes const& wasmCode, std::string_view funcName, std::vector const& params, - ImportVec const& imports, - HostFunctions* hfs, int64_t gas) { // currently only 1 module support, possible parallel UT run @@ -839,14 +845,14 @@ WasmiEngine::runHlp( // Create and instantiate the module. if (!wasmCode.empty()) { - [[maybe_unused]] int const m = addModule(wasmCode, true, gas, imports); + [[maybe_unused]] int const m = addModule(wasmCode, true, gas); } if (!moduleWrap_ || !moduleWrap_->instanceWrap_) throw std::runtime_error("no instance"); // LCOV_EXCL_LINE - if (hfs) - hfs->setRT(&getRT()); + if (hfs_) + hfs_->setRT(&getRT()); // Call main auto const f = getFunc(!funcName.empty() ? funcName : "_start"); @@ -890,16 +896,23 @@ WasmiEngine::check( Bytes const& wasmCode, std::string_view funcName, std::vector const& params, - ImportVec const& imports, - HostFunctions* hfs, + std::shared_ptr const& imports, + std::shared_ptr const& hfs, beast::Journal j) { j_ = j; + if (!wasmCode.empty()) + { + imports_ = imports; + hfs_ = hfs; + } + try { - checkImports(imports, hfs); - return checkHlp(wasmCode, funcName, params, imports); + if (imports_) + checkImports(*imports_, hfs_.get()); + return checkHlp(wasmCode, funcName, params); } catch (std::exception const& e) { @@ -919,8 +932,7 @@ NotTEC WasmiEngine::checkHlp( Bytes const& wasmCode, std::string_view funcName, - std::vector const& params, - ImportVec const& imports) + std::vector const& params) { // currently only 1 module support, possible parallel UT run std::lock_guard lg(m_); @@ -929,7 +941,7 @@ WasmiEngine::checkHlp( if (wasmCode.empty()) throw std::runtime_error("empty nodule"); - int const m = addModule(wasmCode, false, -1, imports); + int const m = addModule(wasmCode, false, -1); if ((m < 0) || !moduleWrap_) throw std::runtime_error("no module"); // LCOV_EXCL_LINE From fd1cb318e39023f7179e40df11a46e82e40d9ace Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Wed, 21 Jan 2026 17:22:47 -0500 Subject: [PATCH 066/137] Check that max parameters length is multiple of sizeof(int32) (#6253) --- src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp b/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp index 10f0d4a03e..6b956de8a0 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp @@ -118,15 +118,18 @@ locateField(STObject const& obj, Slice const& locator) if (locator.empty() || (locator.size() & 3)) // must be multiple of 4 return Unexpected(HostFunctionError::LOCATOR_MALFORMED); + static_assert(maxWasmParamLength % sizeof(int32_t) == 0); int32_t locBuf[maxWasmParamLength / sizeof(int32_t)]; int32_t const* locPtr = &locBuf[0]; int32_t const locSize = locator.size() / sizeof(int32_t); - uintptr_t p = reinterpret_cast(locator.data()); - if (p & (alignof(int32_t) - 1)) // unaligned - memcpy(&locBuf[0], locator.data(), locator.size()); - else - locPtr = reinterpret_cast(locator.data()); + { + uintptr_t const p = reinterpret_cast(locator.data()); + if (p & (alignof(int32_t) - 1)) // unaligned + memcpy(&locBuf[0], locator.data(), locator.size()); + else + locPtr = reinterpret_cast(locator.data()); + } STBase const* field = nullptr; auto const& knownSFields = SField::getKnownCodeToField(); From f4a27c9b6d58b5e6997614ee532537e960061613 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 21 Jan 2026 18:05:48 -0500 Subject: [PATCH 067/137] minor refactor of Wasm_test (#6229) --- src/test/app/Wasm_test.cpp | 116 +++++++++++++------------------------ 1 file changed, 41 insertions(+), 75 deletions(-) diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 2ac0680422..b79f557691 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -6,6 +6,14 @@ #include +#if (defined(__clang_major__) && __clang_major__ < 15) +#include +using source_location = std::experimental::source_location; +#else +#include +using std::source_location; +#endif + namespace xrpl { namespace test { @@ -42,6 +50,24 @@ runFinishFunction(std::string const& code) struct Wasm_test : public beast::unit_test::suite { + void + checkResult( + Expected, TER> re, + int32_t expectedResult, + int64_t expectedCost, + source_location const location = source_location::current()) + { + auto const lineStr = " (" + std::to_string(location.line()) + ")"; + if (BEAST_EXPECTS(re.has_value(), transToken(re.error()) + lineStr)) + { + BEAST_EXPECTS( + re->result == expectedResult, + std::to_string(re->result) + lineStr); + BEAST_EXPECTS( + re->cost == expectedCost, std::to_string(re->cost) + lineStr); + } + } + void testGetDataHelperFunctions() { @@ -92,11 +118,7 @@ struct Wasm_test : public beast::unit_test::suite // if (res) printf("invokeAdd get the result: %d\n", res.value()); - if (BEAST_EXPECT(re.has_value())) - { - BEAST_EXPECTS(re->result == 6'912, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 59, std::to_string(re->cost)); - } + checkResult(re, 6'912, 59); } void @@ -180,11 +202,7 @@ struct Wasm_test : public beast::unit_test::suite 1'000'000, env.journal); - if (BEAST_EXPECT(re.has_value())) - { - BEAST_EXPECTS(re->result == 0, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 151, std::to_string(re->cost)); - } + checkResult(re, 0, 151); env.close(); env.close(); @@ -193,11 +211,7 @@ struct Wasm_test : public beast::unit_test::suite re = engine.run( {}, ESCROW_FUNCTION_NAME, {}, imports, hfs, 1'000'000, env.journal); - if (BEAST_EXPECT(re.has_value())) - { - BEAST_EXPECTS(re->result == 5, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 190, std::to_string(re->cost)); - } + checkResult(re, 5, 190); } void @@ -211,11 +225,7 @@ struct Wasm_test : public beast::unit_test::suite auto const re = engine.run(wasm, "fib", wasmParams(10)); - if (BEAST_EXPECT(re.has_value())) - { - BEAST_EXPECTS(re->result == 55, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 1'137, std::to_string(re->cost)); - } + checkResult(re, 55, 1'137); } void @@ -230,11 +240,7 @@ struct Wasm_test : public beast::unit_test::suite auto const re = engine.run(wasm, "sha512_process", wasmParams(sha512PureWasmHex)); - if (BEAST_EXPECT(re.has_value())) - { - BEAST_EXPECTS(re->result == 34'432, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 151'155, std::to_string(re->cost)); - } + checkResult(re, 34'432, 151'155); } void @@ -255,11 +261,7 @@ struct Wasm_test : public beast::unit_test::suite auto const re = engine.run(wasm, "b58enco", wasmParams(outb, s)); - if (BEAST_EXPECT(re.has_value())) - { - BEAST_EXPECTS(re->result == 700, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 2'886'069, std::to_string(re->cost)); - } + checkResult(re, 700, 2'886'069); } void @@ -291,11 +293,7 @@ struct Wasm_test : public beast::unit_test::suite 1'000'000, env.journal); - if (BEAST_EXPECT(re.has_value())) - { - BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 25'503, std::to_string(re->cost)); - } + checkResult(re, 1, 25'503); env.close(); } @@ -325,11 +323,7 @@ struct Wasm_test : public beast::unit_test::suite 1'000'000, env.journal); - if (BEAST_EXPECT(re.has_value())) - { - BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 64'763, std::to_string(re->cost)); - } + checkResult(re, 1, 64'763); env.close(); } @@ -374,22 +368,14 @@ struct Wasm_test : public beast::unit_test::suite std::shared_ptr hfs(new TestHostFunctions(env, 0)); auto re = runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); - if (BEAST_EXPECT(re.has_value())) - { - BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 64'763, std::to_string(re->cost)); - } + checkResult(re, 1, 64'763); } { // max() gas std::shared_ptr hfs(new TestHostFunctions(env, 0)); auto re = runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, -1); - if (BEAST_EXPECT(re.has_value())) - { - BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 64'763, std::to_string(re->cost)); - } + checkResult(re, 1, 64'763); } { // fail because trying to access nonexistent field @@ -408,11 +394,7 @@ struct Wasm_test : public beast::unit_test::suite std::shared_ptr hfs(new BadTestHostFunctions(env)); auto re = runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); - if (BEAST_EXPECT(re.has_value())) - { - BEAST_EXPECTS(re->result == -201, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 28'148, std::to_string(re->cost)); - } + checkResult(re, -201, 28'148); } { // fail because trying to allocate more than MAX_PAGES memory @@ -431,11 +413,7 @@ struct Wasm_test : public beast::unit_test::suite std::shared_ptr hfs(new BadTestHostFunctions(env)); auto re = runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); - if (BEAST_EXPECT(re.has_value())) - { - BEAST_EXPECTS(re->result == -201, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 28'148, std::to_string(re->cost)); - } + checkResult(re, -201, 28'148); } { // fail because recursion too deep @@ -565,11 +543,7 @@ struct Wasm_test : public beast::unit_test::suite std::shared_ptr hfs(new TestHostFunctions(env, 0)); auto re = runEscrowWasm(wasm, hfs, funcName, {}, 200'000); - if (BEAST_EXPECT(re.has_value())) - { - BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 110'699, std::to_string(re->cost)); - } + checkResult(re, 1, 110'699); env.close(); } @@ -580,11 +554,7 @@ struct Wasm_test : public beast::unit_test::suite std::shared_ptr hfs(new TestHostFunctions(env, 0)); auto re = runEscrowWasm(wasm, hfs, funcName, {}, 100'000); - if (BEAST_EXPECT(re.has_value())) - { - BEAST_EXPECTS(re->result == 1, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 4'259, std::to_string(re->cost)); - } + checkResult(re, 1, 4'259); env.close(); } } @@ -701,11 +671,7 @@ struct Wasm_test : public beast::unit_test::suite auto const allowance = 185'974; auto re = runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, allowance); - if (BEAST_EXPECT(re.has_value())) - { - BEAST_EXPECT(re->result); - BEAST_EXPECTS(re->cost == allowance, std::to_string(re->cost)); - } + checkResult(re, 1, allowance); } void From ba5debfecd6ba0144d2b4a9423d54742e80e767f Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 22 Jan 2026 17:01:56 -0500 Subject: [PATCH 068/137] update return calculation (#6250) --- src/test/app/HostFuncImpl_test.cpp | 35 +- src/test/app/TestHostFunctions.h | 16 +- src/test/app/Wasm_test.cpp | 2 +- .../wasm_fixtures/codecov_tests/src/lib.rs | 8 +- src/test/app/wasm_fixtures/fixtures.cpp | 489 +++++++++--------- .../app/wasm/detail/HostFuncImplTrace.cpp | 16 +- 6 files changed, 273 insertions(+), 293 deletions(-) diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 769c7741e8..fae904c0ec 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -2028,7 +2028,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const result = hfs.trace(msg, slice, false); if (BEAST_EXPECT(result.has_value())) { - BEAST_EXPECT(result.value() == msg.size() + data.size()); + BEAST_EXPECT(result.value() == 0); auto const messages = sink.messages().str(); BEAST_EXPECT(messages.find(msg) != std::string::npos); } @@ -2037,7 +2037,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite if (BEAST_EXPECT(resultHex.has_value())) { BEAST_EXPECT(resultHex.has_value()); - BEAST_EXPECT(resultHex.value() == msg.size() + data.size() * 2); + BEAST_EXPECT(resultHex.value() == 0); auto const messages = sink.messages().str(); std::string hex; hex.reserve(data.size() * 2); @@ -2064,7 +2064,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite std::string data = "abc"; auto const slice = Slice(data.data(), data.size()); auto const result = hfs.trace(msg, slice, false); - BEAST_EXPECT(result && *result == msg.size() + data.size()); + BEAST_EXPECT(result && *result == 0); auto const messages = sink.messages().str(); BEAST_EXPECT(messages.empty()); } @@ -2092,7 +2092,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const result = hfs.traceNum(msg, num); if (BEAST_EXPECT(result.has_value())) { - BEAST_EXPECT(result.value() == msg.size() + sizeof(num)); + BEAST_EXPECT(result.value() == 0); auto const messages = sink.messages().str(); BEAST_EXPECT(messages.find(msg) != std::string::npos); BEAST_EXPECT( @@ -2115,7 +2115,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite std::string msg = "trace number"; int64_t num = 123456789; auto const result = hfs.traceNum(msg, num); - BEAST_EXPECT(result && *result == msg.size() + sizeof(int64_t)); + BEAST_EXPECT(result && *result == 0); auto const messages = sink.messages().str(); BEAST_EXPECT(messages.empty()); } @@ -2142,8 +2142,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const result = hfs.traceAccount(msg, env.master.id()); if (BEAST_EXPECT(result.has_value())) { - BEAST_EXPECT( - result.value() == msg.size() + env.master.id().size()); + BEAST_EXPECT(result.value() == 0); auto const messages = sink.messages().str(); BEAST_EXPECT(messages.find(msg) != std::string::npos); BEAST_EXPECT( @@ -2164,8 +2163,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); std::string msg = "trace account"; auto const result = hfs.traceAccount(msg, env.master.id()); - BEAST_EXPECT( - result && *result == msg.size() + env.master.id().size()); + BEAST_EXPECT(result && *result == 0); auto const messages = sink.messages().str(); BEAST_EXPECT(messages.empty()); } @@ -2194,7 +2192,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const result = hfs.traceAmount(msg, amount); if (BEAST_EXPECT(result.has_value())) { - BEAST_EXPECT(*result == msg.size()); + BEAST_EXPECT(*result == 0); auto const messages = sink.messages().str(); BEAST_EXPECT(messages.find(msg) != std::string::npos); BEAST_EXPECT( @@ -2211,7 +2209,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const result = hfs.traceAmount(msg, iouAmount); if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT(*result == msg.size()); + BEAST_EXPECT(*result == 0); } // MPT amount @@ -2221,7 +2219,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite STAmount mptAmount(mptAsset, 123456); auto const result = hfs.traceAmount(msg, mptAmount); if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT(*result == msg.size()); + BEAST_EXPECT(*result == 0); } } @@ -2240,7 +2238,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite std::string msg = "trace amount"; STAmount amount = XRP(12345); auto const result = hfs.traceAmount(msg, amount); - BEAST_EXPECT(result && *result == msg.size()); + BEAST_EXPECT(result && *result == 0); auto const messages = sink.messages().str(); BEAST_EXPECT(messages.empty()); } @@ -2290,16 +2288,12 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const result = hfs.traceFloat(msg, makeSlice(invalid)); - BEAST_EXPECT( - result && - *result == msg.size() + makeSlice(invalid).size()); + BEAST_EXPECT(result && *result == 0); } { auto const result = hfs.traceFloat(msg, makeSlice(floatMaxExp)); - BEAST_EXPECT( - result && - *result == msg.size() + makeSlice(floatMaxExp).size()); + BEAST_EXPECT(result && *result == 0); } } @@ -2318,8 +2312,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite std::string msg = "trace float"; auto const result = hfs.traceFloat(msg, makeSlice(invalid)); - BEAST_EXPECT( - result && *result == msg.size() + makeSlice(invalid).size()); + BEAST_EXPECT(result && *result == 0); auto const messages = sink.messages().str(); BEAST_EXPECT(messages.empty()); } diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index 17a210441d..0938243cff 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -401,8 +401,6 @@ public: Expected trace(std::string_view const& msg, Slice const& data, bool asHex) override { - auto const ret = msg.size() + data.size() * (asHex ? 2 : 1); - if (!asHex) { log(msg, [&data] { @@ -421,39 +419,35 @@ public: }); } - return ret; + return 0; } Expected traceNum(std::string_view const& msg, int64_t data) override { - auto const ret = msg.size() + sizeof(data); log(msg, [data] { return data; }); - return ret; + return 0; } Expected traceAccount(std::string_view const& msg, AccountID const& account) override { - auto const ret = msg.size() + account.size(); log(msg, [&account] { return toBase58(account); }); - return ret; + return 0; } Expected traceFloat(std::string_view const& msg, Slice const& data) override { - auto const ret = msg.size() + data.size(); log(msg, [&data] { return wasm_float::floatToString(data); }); - return ret; + return 0; } Expected traceAmount(std::string_view const& msg, STAmount const& amount) override { - auto const ret = msg.size(); log(msg, [&amount] { return amount.getFullText(); }); - return ret; + return 0; } Expected diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index b79f557691..699178cac2 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -668,7 +668,7 @@ struct Wasm_test : public beast::unit_test::suite Bytes const wasm(wasmStr.begin(), wasmStr.end()); std::shared_ptr hfs(new TestHostFunctions(env, 0)); - auto const allowance = 185'974; + auto const allowance = 187'131; auto re = runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, allowance); checkResult(re, 1, allowance); diff --git a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs index a5aa2eb6e5..aa05eec9d9 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs +++ b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs @@ -248,7 +248,7 @@ pub extern "C" fn finish() -> i32 { account.0.len(), ) }, - (message.len() + 20) as i32, + 0, "trace_account", ); let amount = &[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F]; // 95 drops of XRP @@ -261,7 +261,7 @@ pub extern "C" fn finish() -> i32 { amount.len(), ) }, - message.len() as i32, + 0, "trace_amount", ); let amount = &[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]; // 0 drops of XRP @@ -274,7 +274,7 @@ pub extern "C" fn finish() -> i32 { amount.len(), ) }, - message.len() as i32, + 0, "trace_amount_zero", ); @@ -1513,7 +1513,7 @@ pub extern "C" fn finish() -> i32 { account.0.len(), ) }, - 34, + 0, "trace_account_check_desync", ); diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 44d4403382..e826f621c3 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -661,251 +661,250 @@ extern std::string const codecovTestsWasmHex = "61696e5f6b65796c6574000108686f73745f6c69620e7369676e6572735f6b65796c657400" "0008686f73745f6c69620d7469636b65745f6b65796c6574000108686f73745f6c69620c76" "61756c745f6b65796c657400010303020a0505030100110619037f01418080c0000b7f0041" - "8f9ec0000b7f0041909ec0000b072e04066d656d6f727902000666696e697368003d0a5f5f" - "646174615f656e6403010b5f5f686561705f6261736503020c01020ad62602460002402000" - "20014704402002200341004100410010001a20004100480d01418b80c000410b2000ad1001" - "000b200220032000ac10011a0f0b418b80c000410b2000ac1001000b8c26020a7f017e2300" - "41f0016b22002400419680c000412341004100410010001a100241b9e00041b980c000410e" - "103c100341b2920441c780c0004116103c200041f0006a22064200370300200041e8006a22" - "054200370300200041e0006a2203420037030020004200370358200041d8006a2201412010" - "04412041be8cc0004116103c1005410a41dd80c000410c103c200041186a22074281828488" - "90a0c08001370300200041106a2208428182848890a0c08001370300200041086a22094281" - "82848890a0c080013703002000428182848890a0c0800137030041e980c000410e10064101" - "41f780c0004111103c200041201006410141f780c0004111103c4181802020014114100722" - "0241144604400240200041266a200041da006a2d00003a00002000200029005f3703c80120" - "00200041e4006a2900003700cd01200041306a20002900cd01370000200020002f00583b01" - "242000200028005b360027200020002903c80137002b200642003703002005420037030020" - "03420037030020004200370358200041246a2206411420014120100822024120470d002000" - "413a6a20002d005a3a0000200041d0016a2202200041e7006a290000220a370300200041c7" - "006a200a370000200041cf006a200041ef006a290000370000200041d7006a200041f7006a" - "2d00003a0000200020002f01583b01382000200028005b36003b2000200029005f37003f20" - "0041386a4120410010094101418881c0004110103c20054100360200200342003703002000" - "42003703584181802020014114100a411441d48cc000411c103c2005410036020020034200" - "3703002000420037035841014181802020014114100b411441f08cc0004114103c20004104" - "36029801200041818020360258200041d8016a220341003602002002420037030020004200" - "3703c80120014104200041c8016a22054114100c411441848dc0004113103c200341003602" - "0020024200370300200042003703c801200120002802980120054114100d411441978dc000" - "4123103c2003410036020020024200370300200042003703c8014101200120002802980120" - "054114100e411441ba8dc000411b103c4189803c100f4120419881c0004110103c4189803c" - "1010412041a881c0004120103c41014189803c1011412041c881c0004118103c2001200028" - "0298011012412041e081c0004117103c20012000280298011013412041f781c0004127103c" - "4101200120002802980110144120419e82c000411f103c200641141015411441bd82c00041" - "0b103c200041e0016a220442003703002003420037030020024200370300200042003703c8" - "012001200028029801200541201016412041d58dc0004113103c41c882c000410c41d482c0" - "00410b41df82c000410e1017410141ed82c0004109103c200041b8016a2007290300370300" - "200041b0016a2008290300370300200041a8016a2009290300370300200020002903003703" - "a001200341003b010020024200370300200042003703c80120064114200041a0016a220741" - "20200541121018411241e88dc0004107103c20034100360200200242003703002000420037" - "03c80120074120200541141019411441ef8dc000410e103c200041003602c8012007412020" - "054104101a410441fd8dc000410d103c20074120101b410841f682c000410d103c20074120" - "101c410a418383c0004114103c200041003602c8012007412020054104101d4104418a8ec0" - "00410e103c419783c000410d20064114101e412141a483c000410d103c419783c000410d41" - "b183c0004108101f410d41b983c000410c103c419783c000410d41c583c0004108101f410d" - "41cd83c0004111103c417f41041004417141de83c000411e103c200041003602c801200541" - "7f1004417141988ec000411e103c200041ca016a41003a0000200041003b01c80120054103" - "1004417d41b68ec0004124103c200041003602c8012005418094ebdc031004417341da8ec0" - "004123103c200442003703002003420037030020024200370300200042003703c801200041" - "d894ebdc036a220741082005412041001020417341fd8ec0004117103c2004420037030020" - "03420037030020024200370300200042003703c80120012000280298012005412041001020" - "417141948fc0004119103c4102100f416f41fc83c000411f103c417f200028029801101241" - "71419b84c000411f103c2001417f1012417141ba84c000411f103c20014181201012417441" - "d984c0004120103c20072000280298011012417341f984c000411f103c2007200028029801" - "410110094173419885c0004118103c200120002802980141011009417141b085c000411a10" - "3c200442003703002003420037030020024200370300200042003703c80120072000280298" - "01200541201008417341ad8fc0004116103c20044200370300200342003703002002420037" - "0300200042003703c8012001200028029801200541201008417141c38fc0004118103c2004" - "42003703002003420037030020024200370300200042003703c80120064114200641142007" - "200028029801200541201021417341db8fc000411c103c2004420037030020034200370300" - "20024200370300200042003703c80120064114200641142001200028029801200541201021" - "417141f78fc000411e103c2004420037030020034200370300200242003703002000420037" - "03c80141fb9dc000411420072000280298012005412010224173419590c0004119103c2004" - "42003703002003420037030020024200370300200042003703c80141fb9dc0004114200120" - "0028029801200541201022417141ae90c000411f103c200442003703002003420037030020" - "024200370300200042003703c80141fb9dc000411441ca85c0004114200541201022417141" - "cd90c0004129103c200442003703002003420037030020024200370300200042003703c801" - "41de85c000412841fb9dc0004114200541201022417141f690c0004125103c200041dc016a" - "200041346a280100360200200041d4016a2000412c6a290100370200200020002901243702" - "cc01200041808080083602c801200041003b01c0012005411841fb9dc0004114200041c001" - "6a2203410210224171419b91c000410e103c2007200028029801422a10014173418686c000" - "4111103c200041003b01c0014102200341021007416f41a991c000411b103c200041003b01" - "c001410220034102100a416f41c491c000412b103c200041003b01c0014101410220034102" - "100b416f41ef91c0004123103c4102100f416f41fc83c000411f103c41021010416f419786" - "c000412f103c410141021011416f41c686c0004127103c41e980c0004181201006417441ed" - "86c000411f103c41e980c00041c10010064174418c87c000411a103c200041003b01c00120" - "0141812020034102100c4174419292c0004121103c200041003b01c0012001418120200341" - "02100d417441b392c0004131103c200041003b01c0014101200141812020034102100e4174" - "41e492c0004129103c20014181201012417441a687c0004125103c20014181201013417441" - "cb87c0004135103c4101200141812010144174418088c000412d103c200141812010154174" - "41ad88c0004119103c419783c00041812041d482c000410b41df82c000410e1017417441ed" - "82c0004109103c419783c000410d41d482c00041812041df82c000410e1017417441ed82c0" - "004109103c419783c000410d41d482c000410b41df82c0004181201017417441ed82c00041" - "09103c200041003b01c00120014181202003410210164174418d93c0004121103c20004100" - "3b01c00141fb9dc00041812041fb9dc0004114200341021022417441ae93c0004118103c20" - "0041003b01c00120064114200641142001418120200341021023417441c693c000411f103c" - "200041003b01c001200541812020064114200341021024417441e593c0004122103c419783" - "c000410d200720002802980141001000417341c688c000410f103c200042d487b6f4c7d4b1" - "c0003700c001419783c000410d200041c095ebdc036a220441081025417341d588c000411c" - "103c419783c000410d2007200028029801101f417341f188c0004116103c20044108200341" - "0810264173418789c0004118103c200341082004410810264173419f89c0004118103c2000" - "41003b01ec012004410820034108200041ec016a22024102410010274173418794c0004114" - "103c200041003b01ec01200341082004410820024102410010274173419b94c0004114103c" - "200041003b01ec0120044108200341082002410241001028417341af94c0004119103c2000" - "41003b01ec0120034108200441082002410241001028417341c894c0004119103c20004100" - "3b01ec0120044108200341082002410241001029417341e194c0004119103c200041003b01" - "ec0120034108200441082002410241001029417341fa94c0004119103c200041003b01ec01" - "2004410820034108200241024100102a4173419395c0004117103c200041003b01ec012003" - "410820044108200241024100102a417341aa95c0004117103c200041003b01ec0120044108" - "4103200241024100102b417341c195c0004114103c200041003b01ec012004410841032002" - "41024100102c417341d595c0004113103c200041003b01ec0120044108200241024100102d" - "417341e895c0004113103c200120002802980141001009417141b789c0004123103c200041" - "003b01ec01200641142001200028029801200241021018417141fb95c000411a103c200041" - "003b01ec0120012000280298012002410210194171419596c0004121103c200041003b01ec" - "01200120002802980120024102101a417141b696c0004120103c2001200028029801101b41" - "7141da89c0004120103c2001200028029801101c417141fa89c0004127103c200041003602" - "ec01200120002802980120024104101d417141d696c0004121103c200041003b01ec012001" - "200028029801200241021008417141f796c0004123103c200041003b01ec01200120002802" - "9801410120024102102e4171419a97c0004121103c200041003b01ec012001200028029801" - "22042006411420012004200241021023417141bb97c0004127103c200041003b01ec012006" - "41142001200028029801220420012004200241021023417141e297c0004127103c20004100" - "3b01ec0120012000280298012006411420024102102f4171418998c0004125103c20004100" - "3b01ec0120064114200120002802980120024102102f417141ae98c0004125103c20004100" - "3b01ec01200120002802980120064114200241021030417141d398c000412c103c20004100" - "3b01ec01200641142001200028029801200241021030417141ff98c000412c103c20004100" - "3b01ec012001200028029801200241021031417141ab99c000411f103c200041003b01ec01" - "20012000280298014101200241021032417141ca99c0004122103c200041003b01ec012001" - "2000280298012006411441ca85c0004114200241021021417141ec99c0004121103c200041" - "003b01ec0120064114200120002802980141ca85c00041142002410210214171418d9ac000" - "4121103c200041003b01ec0120012000280298014101200241021033417141ae9ac0004128" - "103c200041003b01ec01200541182001200028029801200241021024417141d69ac0004123" - "103c200041003b01ec0120012000280298014101200241021034417141f99ac0004125103c" - "200041003b01ec01200120002802980141012002410210354171419e9bc0004121103c2000" - "41003b01ec0120012000280298014101200241021036417141bf9bc0004122103c20004100" - "3b01ec012001200028029801200641144101200241021037417141e19bc0004124103c2000" - "41003b01ec012006411420012000280298014101200241021037417141859cc0004124103c" - "200041003b01ec0120012000280298014101200241021038417141a99cc000412f103c2000" - "41003b01ec012001200028029801200241021039417141d89cc0004123103c200041003b01" - "ec012001200028029801410120024102103a417141fb9cc0004122103c200041003b01ec01" - "2001200028029801410120024102103b4171419d9dc0004121103c200041003b01ec012001" - "20002802980141a18ac0004120200241021018417141be9dc000411c103c419783c000410d" - "2001200028029801101e417141c18ac0004122103c419797abdd03410d41a18ac000412041" - "001000417341e38ac0004110103c419797abdd03410d200341081025417341f38ac000411d" - "103c419797abdd03410d20064114101e417341908bc0004118103c419797abdd03410d41c5" - "83c0004108101f417341a88bc0004117103c20012000280298012001418120410010004174" - "41bf8bc000410e103c200141812042011001417441cd8bc0004112103c419783c000418120" - "200341081025417441df8bc000411b103c419783c00041812020064114101e417441fa8bc0" - "004116103c419783c00041812041c583c0004108101f417441908cc0004115103c419783c0" - "00410d2001200028029801101f417141a58cc0004119103c200041003b01ec012001200028" - "02980120064114200241021024417141da9dc0004121103c200041f0016a240041010f0b0b" - "418080c000410b417f20022002417f4e1bac1001000b0be61d0200418080c0000bde056572" - "726f725f636f64653d54455354204641494c45442424242424205354415254494e47205741" - "534d20455845435554494f4e2024242424246765745f6c65646765725f73716e6765745f70" - "6172656e745f6c65646765725f74696d656765745f626173655f666565746573745f616d65" - "6e646d656e74616d656e646d656e745f656e61626c656463616368655f6c65646765725f6f" - "626a6765745f74785f61727261795f6c656e6765745f63757272656e745f6c65646765725f" - "6f626a5f61727261795f6c656e6765745f6c65646765725f6f626a5f61727261795f6c656e" - "6765745f74785f6e65737465645f61727261795f6c656e6765745f63757272656e745f6c65" - "646765725f6f626a5f6e65737465645f61727261795f6c656e6765745f6c65646765725f6f" - "626a5f6e65737465645f61727261795f6c656e7570646174655f6461746174657374206d65" - "737361676574657374207075626b657974657374207369676e6174757265636865636b5f73" - "69676765745f6e66745f666c6167736765745f6e66745f7472616e736665725f6665657465" - "7374696e6720747261636574726163655f6163636f756e74400000000000005f7472616365" - "5f616d6f756e74400000000000000074726163655f616d6f756e745f7a65726f6765745f70" - "6172656e745f6c65646765725f686173685f6e65675f7074726765745f74785f6172726179" - "5f6c656e5f696e76616c69645f736669656c646765745f74785f6e65737465645f61727261" - "795f6c656e5f6e65675f7074726765745f74785f6e65737465645f61727261795f6c656e5f" - "6e65675f6c656e6765745f74785f6e65737465645f61727261795f6c656e5f746f6f5f6c6f" - "6e676765745f74785f6e65737465645f61727261795f6c656e5f7074725f6f6f6263616368" - "655f6c65646765725f6f626a5f7074725f6f6f6263616368655f6c65646765725f6f626a5f" - "77726f6e675f6c656e555344303030303030303030303030303030303000418686c0000bf5" - "1774726163655f6e756d5f6f6f625f7374726765745f63757272656e745f6c65646765725f" - "6f626a5f61727261795f6c656e5f696e76616c69645f736669656c646765745f6c65646765" - "725f6f626a5f61727261795f6c656e5f696e76616c69645f736669656c64616d656e646d65" - "6e745f656e61626c65645f746f6f5f6269675f736c696365616d656e646d656e745f656e61" - "626c65645f746f6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f" - "746f6f5f6269675f736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e" - "65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f6c656467" - "65725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c696365" - "7570646174655f646174615f746f6f5f6269675f736c69636574726163655f6f6f625f736c" - "69636574726163655f6f70617175655f666c6f61745f6f6f625f736c69636574726163655f" - "616d6f756e745f6f6f625f736c696365666c6f61745f636f6d706172655f6f6f625f736c69" - "636531666c6f61745f636f6d706172655f6f6f625f736c6963653263616368655f6c656467" - "65725f6f626a5f77726f6e675f73697a655f75696e743235366765745f6e66745f666c6167" - "735f77726f6e675f73697a655f75696e743235366765745f6e66745f7472616e736665725f" - "6665655f77726f6e675f73697a655f75696e74323536303030303030303030303030303030" - "303030303030303030303030303030303174726163655f6163636f756e745f77726f6e675f" - "73697a655f6163636f756e74696474726163655f6f6f625f737472696e6774726163655f6f" - "70617175655f666c6f61745f6f6f625f737472696e6774726163655f6163636f756e745f6f" - "6f625f737472696e6774726163655f616d6f756e745f6f6f625f737472696e677472616365" - "5f746f6f5f6c6f6e6774726163655f6e756d5f746f6f5f6c6f6e6774726163655f6f706171" - "75655f666c6f61745f746f6f5f6c6f6e6774726163655f6163636f756e745f746f6f5f6c6f" - "6e6774726163655f616d6f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f77" - "726f6e675f6c656e6774686765745f706172656e745f6c65646765725f686173686765745f" - "63757272656e745f6c65646765725f6f626a5f6669656c646765745f6c65646765725f6f62" - "6a5f6669656c646765745f74785f6e65737465645f6669656c646765745f63757272656e74" - "5f6c65646765725f6f626a5f6e65737465645f6669656c646765745f6c65646765725f6f62" - "6a5f6e65737465645f6669656c64636f6d707574655f7368613531325f68616c666765745f" - "6e66746765745f6e66745f6973737565726765745f6e66745f7461786f6e6765745f6e6674" - "5f73657269616c6765745f706172656e745f6c65646765725f686173685f6e65675f6c656e" - "6765745f706172656e745f6c65646765725f686173685f6275665f746f6f5f736d616c6c67" - "65745f706172656e745f6c65646765725f686173685f6c656e5f746f6f5f6c6f6e67666c6f" - "61745f66726f6d5f75696e745f6c656e5f6f6f62666c6f61745f66726f6d5f75696e745f77" - "726f6e675f6c656e6163636f756e745f6b65796c65745f6c656e5f6f6f626163636f756e74" - "5f6b65796c65745f77726f6e675f6c656e6c696e655f6b65796c65745f6c656e5f6f6f625f" - "63757272656e63796c696e655f6b65796c65745f77726f6e675f6c656e5f63757272656e63" - "79616d6d5f6b65796c65745f6c656e5f6f6f625f617373657432616d6d5f6b65796c65745f" - "6c656e5f77726f6e675f6c656e5f617373657432616d6d5f6b65796c65745f6c656e5f7772" - "6f6e675f6e6f6e5f7872705f63757272656e63795f6c656e616d6d5f6b65796c65745f6c65" - "6e5f77726f6e675f7872705f63757272656e63795f6c656e616d6d5f6b65796c65745f6d70" - "746765745f74785f6669656c645f696e76616c69645f736669656c646765745f6375727265" - "6e745f6c65646765725f6f626a5f6669656c645f696e76616c69645f736669656c64676574" - "5f6c65646765725f6f626a5f6669656c645f696e76616c69645f736669656c646765745f74" - "785f6e65737465645f6669656c645f746f6f5f6269675f736c6963656765745f6375727265" - "6e745f6c65646765725f6f626a5f6e65737465645f6669656c645f746f6f5f6269675f736c" - "6963656765745f6c65646765725f6f626a5f6e65737465645f6669656c645f746f6f5f6269" - "675f736c696365636f6d707574655f7368613531325f68616c665f746f6f5f6269675f736c" - "696365616d6d5f6b65796c65745f746f6f5f6269675f736c69636563726564656e7469616c" - "5f6b65796c65745f746f6f5f6269675f736c6963656d70746f6b656e5f6b65796c65745f74" - "6f6f5f6269675f736c6963655f6d70746964666c6f61745f6164645f6f6f625f736c696365" - "31666c6f61745f6164645f6f6f625f736c69636532666c6f61745f73756274726163745f6f" - "6f625f736c69636531666c6f61745f73756274726163745f6f6f625f736c69636532666c6f" - "61745f6d756c7469706c795f6f6f625f736c69636531666c6f61745f6d756c7469706c795f" - "6f6f625f736c69636532666c6f61745f6469766964655f6f6f625f736c69636531666c6f61" - "745f6469766964655f6f6f625f736c69636532666c6f61745f726f6f745f6f6f625f736c69" - "6365666c6f61745f706f775f6f6f625f736c696365666c6f61745f6c6f675f6f6f625f736c" - "6963656765745f6e66745f77726f6e675f73697a655f75696e743235366765745f6e66745f" - "6973737565725f77726f6e675f73697a655f75696e743235366765745f6e66745f7461786f" - "6e5f77726f6e675f73697a655f75696e743235366765745f6e66745f73657269616c5f7772" - "6f6e675f73697a655f75696e743235366163636f756e745f6b65796c65745f77726f6e675f" - "73697a655f6163636f756e746964636865636b5f6b65796c65745f77726f6e675f73697a65" - "5f6163636f756e74696463726564656e7469616c5f6b65796c65745f77726f6e675f73697a" - "655f6163636f756e7469643163726564656e7469616c5f6b65796c65745f77726f6e675f73" - "697a655f6163636f756e7469643264656c65676174655f6b65796c65745f77726f6e675f73" - "697a655f6163636f756e7469643164656c65676174655f6b65796c65745f77726f6e675f73" - "697a655f6163636f756e746964326465706f7369745f707265617574685f6b65796c65745f" - "77726f6e675f73697a655f6163636f756e746964316465706f7369745f707265617574685f" - "6b65796c65745f77726f6e675f73697a655f6163636f756e746964326469645f6b65796c65" - "745f77726f6e675f73697a655f6163636f756e746964657363726f775f6b65796c65745f77" - "726f6e675f73697a655f6163636f756e7469646c696e655f6b65796c65745f77726f6e675f" - "73697a655f6163636f756e746964316c696e655f6b65796c65745f77726f6e675f73697a65" - "5f6163636f756e746964326d70745f69737375616e63655f6b65796c65745f77726f6e675f" - "73697a655f6163636f756e7469646d70746f6b656e5f6b65796c65745f77726f6e675f7369" - "7a655f6163636f756e7469646e66745f6f666665725f6b65796c65745f77726f6e675f7369" - "7a655f6163636f756e7469646f666665725f6b65796c65745f77726f6e675f73697a655f61" - "63636f756e7469646f7261636c655f6b65796c65745f77726f6e675f73697a655f6163636f" - "756e7469647061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e" - "746964317061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e74" - "6964327065726d697373696f6e65645f646f6d61696e5f6b65796c65745f77726f6e675f73" - "697a655f6163636f756e7469647369676e6572735f6b65796c65745f77726f6e675f73697a" - "655f6163636f756e7469647469636b65745f6b65796c65745f77726f6e675f73697a655f61" - "63636f756e7469647661756c745f6b65796c65745f77726f6e675f73697a655f6163636f75" - "6e7469646765745f6e66745f77726f6e675f73697a655f6163636f756e7469646d70746f6b" - "656e5f6b65796c65745f6d707469645f77726f6e675f6c656e677468004d0970726f647563" - "65727302086c616e6775616765010452757374000c70726f6365737365642d627901057275" - "7374631d312e38392e30202832393438333838336520323032352d30382d3034290094010f" - "7461726765745f6665617475726573082b0f6d757461626c652d676c6f62616c732b136e6f" - "6e7472617070696e672d6670746f696e742b0b62756c6b2d6d656d6f72792b087369676e2d" - "6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c75652b0f62756c" - "6b2d6d656d6f72792d6f70742b1663616c6c2d696e6469726563742d6f7665726c6f6e67"; + "a99ec0000b7f0041b09ec0000b072e04066d656d6f727902000666696e697368003d0a5f5f" + "646174615f656e6403010b5f5f686561705f6261736503020aeb2602460002402000200147" + "04402002200341004100410010001a20004100480d01418b80c000410b2000ad1001000b20" + "0220032000ac10011a0f0b418b80c000410b2000ac1001000ba126020a7f017e230041f001" + "6b22002400419680c000412341004100410010001a100241b9e00041b980c000410e103c10" + "0341b2920441c780c0004116103c200041f0006a22054200370300200041e8006a22064200" + "370300200041e0006a2203420037030020004200370358200041d8006a2201412010044120" + "41d88cc0004116103c1005410a41dd80c000410c103c200041186a2207428182848890a0c0" + "8001370300200041106a2208428182848890a0c08001370300200041086a22094281828488" + "90a0c080013703002000428182848890a0c0800137030041e980c000410e1006410141f780" + "c0004111103c200041201006410141f780c0004111103c4181802020014114100722024114" + "4604400240200041266a200041da006a2d00003a00002000200029005f3703c80120002000" + "41e4006a2900003700cd01200041306a20002900cd01370000200020002f00583b01242000" + "200028005b360027200020002903c80137002b200542003703002006420037030020034200" + "37030020004200370358200041246a2205411420014120100822024120470d002000413a6a" + "20002d005a3a0000200041d0016a2202200041e7006a290000220a370300200041c7006a20" + "0a370000200041cf006a200041ef006a290000370000200041d7006a200041f7006a2d0000" + "3a0000200020002f01583b01382000200028005b36003b2000200029005f37003f20004138" + "6a4120410010094101418881c0004110103c20064100360200200342003703002000420037" + "03584181802020014114100a411441ee8cc000411c103c2006410036020020034200370300" + "2000420037035841014181802020014114100b4114418a8dc0004114103c20004104360298" + "01200041818020360258200041d8016a2203410036020020024200370300200042003703c8" + "0120014104200041c8016a22064114100c4114419e8dc0004113103c200341003602002002" + "4200370300200042003703c801200120002802980120064114100d411441b18dc000412310" + "3c2003410036020020024200370300200042003703c8014101200120002802980120064114" + "100e411441d48dc000411b103c4189803c100f4120419881c0004110103c4189803c101041" + "2041a881c0004120103c41014189803c1011412041c881c0004118103c2001200028029801" + "1012412041e081c0004117103c20012000280298011013412041f781c0004127103c410120" + "0120002802980110144120419e82c000411f103c200541141015411441bd82c000410b103c" + "200041e0016a220442003703002003420037030020024200370300200042003703c8012001" + "200028029801200641201016412041ef8dc0004113103c41c882c000410c41d482c000410b" + "41df82c000410e1017410141ed82c0004109103c200041b8016a2007290300370300200041" + "b0016a2008290300370300200041a8016a2009290300370300200020002903003703a00120" + "0341003b010020024200370300200042003703c80120054114200041a0016a220741202006" + "41121018411241828ec0004107103c2003410036020020024200370300200042003703c801" + "20074120200641141019411441898ec000410e103c200041003602c8012007412020064104" + "101a410441978ec000410d103c20074120101b410841f682c000410d103c20074120101c41" + "0a418383c0004114103c200041003602c8012007412020064104101d410441a48ec000410e" + "103c419783c000410d20054114101e410041a483c000410d103c419783c000410d41b183c0" + "004108101f410041b983c000410c103c419783c000410d41c583c0004108101f410041cd83" + "c0004111103c417f41041004417141de83c000411e103c200041003602c8012006417f1004" + "417141b28ec000411e103c200041ca016a41003a0000200041003b01c80120064103100441" + "7d41d08ec0004124103c200041003602c8012006418094ebdc031004417341f48ec0004123" + "103c200442003703002003420037030020024200370300200042003703c801200041d894eb" + "dc036a220741082006412041001020417341978fc0004117103c2004420037030020034200" + "37030020024200370300200042003703c80120012000280298012006412041001020417141" + "ae8fc0004119103c4102100f416f41fc83c000411f103c417f20002802980110124171419b" + "84c000411f103c2001417f1012417141ba84c000411f103c20014181201012417441d984c0" + "004120103c20072000280298011012417341f984c000411f103c2007200028029801410110" + "094173419885c0004118103c200120002802980141011009417141b085c000411a103c2004" + "42003703002003420037030020024200370300200042003703c80120072000280298012006" + "41201008417341c78fc0004116103c20044200370300200342003703002002420037030020" + "0042003703c8012001200028029801200641201008417141dd8fc0004118103c2004420037" + "03002003420037030020024200370300200042003703c80120054114200541142007200028" + "029801200641201021417341f58fc000411c103c2004420037030020034200370300200242" + "00370300200042003703c80120054114200541142001200028029801200641201021417141" + "9190c000411e103c200442003703002003420037030020024200370300200042003703c801" + "41959ec00041142007200028029801200641201022417341af90c0004119103c2004420037" + "03002003420037030020024200370300200042003703c80141959ec0004114200120002802" + "9801200641201022417141c890c000411f103c200442003703002003420037030020024200" + "370300200042003703c80141959ec000411441ca85c0004114200641201022417141e790c0" + "004129103c200442003703002003420037030020024200370300200042003703c80141de85" + "c000412841959ec00041142006412010224171419091c0004125103c200041dc016a200041" + "346a280100360200200041d4016a2000412c6a290100370200200020002901243702cc0120" + "0041808080083602c801200041003b01c0012006411841959ec0004114200041c0016a2203" + "41021022417141b591c000410e103c2007200028029801422a10014173418686c000411110" + "3c200041003b01c0014102200341021007416f41c391c000411b103c200041003b01c00141" + "0220034102100a416f41de91c000412b103c200041003b01c0014101410220034102100b41" + "6f418992c0004123103c4102100f416f41fc83c000411f103c41021010416f419786c00041" + "2f103c410141021011416f41c686c0004127103c41e980c0004181201006417441ed86c000" + "411f103c41e980c00041c10010064174418c87c000411a103c200041003b01c00120014181" + "2020034102100c417441ac92c0004121103c200041003b01c001200141812020034102100d" + "417441cd92c0004131103c200041003b01c0014101200141812020034102100e417441fe92" + "c0004129103c20014181201012417441a687c0004125103c20014181201013417441cb87c0" + "004135103c4101200141812010144174418088c000412d103c20014181201015417441ad88" + "c0004119103c419783c00041812041d482c000410b41df82c000410e1017417441ed82c000" + "4109103c419783c000410d41d482c00041812041df82c000410e1017417441ed82c0004109" + "103c419783c000410d41d482c000410b41df82c0004181201017417441ed82c0004109103c" + "200041003b01c0012001418120200341021016417441a793c0004121103c200041003b01c0" + "0141959ec00041812041959ec0004114200341021022417441c893c0004118103c20004100" + "3b01c00120054114200541142001418120200341021023417441e093c000411f103c200041" + "003b01c001200641812020054114200341021024417441ff93c0004122103c419783c00041" + "0d200720002802980141001000417341c688c000410f103c200042d487b6f4c7d4b1c00037" + "00c001419783c000410d200041c095ebdc036a220441081025417341d588c000411c103c41" + "9783c000410d2007200028029801101f417341f188c0004116103c20044108200341081026" + "4173418789c0004118103c200341082004410810264173419f89c0004118103c200041003b" + "01ec012004410820034108200041ec016a2202410241001027417341a194c0004114103c20" + "0041003b01ec0120034108200441082002410241001027417341b594c0004114103c200041" + "003b01ec0120044108200341082002410241001028417341c994c0004119103c200041003b" + "01ec0120034108200441082002410241001028417341e294c0004119103c200041003b01ec" + "0120044108200341082002410241001029417341fb94c0004119103c200041003b01ec0120" + "0341082004410820024102410010294173419495c0004119103c200041003b01ec01200441" + "0820034108200241024100102a417341ad95c0004117103c200041003b01ec012003410820" + "044108200241024100102a417341c495c0004117103c200041003b01ec0120044108410320" + "0241024100102b417341db95c0004114103c200041003b01ec012004410841032002410241" + "00102c417341ef95c0004113103c200041003b01ec0120044108200241024100102d417341" + "8296c0004113103c200120002802980141001009417141b789c0004123103c200041003b01" + "ec012005411420012000280298012002410210184171419596c000411a103c200041003b01" + "ec012001200028029801200241021019417141af96c0004121103c200041003b01ec012001" + "20002802980120024102101a417141d096c0004120103c2001200028029801101b417141da" + "89c0004120103c2001200028029801101c417141fa89c0004127103c200041003602ec0120" + "0120002802980120024104101d417141f096c0004121103c200041003b01ec012001200028" + "0298012002410210084171419197c0004123103c200041003b01ec01200120002802980141" + "0120024102102e417141b497c0004121103c200041003b01ec012001200028029801220420" + "05411420012004200241021023417141d597c0004127103c200041003b01ec012005411420" + "01200028029801220420012004200241021023417141fc97c0004127103c200041003b01ec" + "0120012000280298012005411420024102102f417141a398c0004125103c200041003b01ec" + "0120054114200120002802980120024102102f417141c898c0004125103c200041003b01ec" + "01200120002802980120054114200241021030417141ed98c000412c103c200041003b01ec" + "012005411420012000280298012002410210304171419999c000412c103c200041003b01ec" + "012001200028029801200241021031417141c599c000411f103c200041003b01ec01200120" + "00280298014101200241021032417141e499c0004122103c200041003b01ec012001200028" + "0298012005411441ca85c0004114200241021021417141869ac0004121103c200041003b01" + "ec0120054114200120002802980141ca85c0004114200241021021417141a79ac000412110" + "3c200041003b01ec0120012000280298014101200241021033417141c89ac0004128103c20" + "0041003b01ec01200641182001200028029801200241021024417141f09ac0004123103c20" + "0041003b01ec0120012000280298014101200241021034417141939bc0004125103c200041" + "003b01ec0120012000280298014101200241021035417141b89bc0004121103c200041003b" + "01ec0120012000280298014101200241021036417141d99bc0004122103c200041003b01ec" + "012001200028029801200541144101200241021037417141fb9bc0004124103c200041003b" + "01ec0120054114200120002802980141012002410210374171419f9cc0004124103c200041" + "003b01ec0120012000280298014101200241021038417141c39cc000412f103c200041003b" + "01ec012001200028029801200241021039417141f29cc0004123103c200041003b01ec0120" + "01200028029801410120024102103a417141959dc0004122103c200041003b01ec01200120" + "0028029801410120024102103b417141b79dc0004121103c200041003b01ec012001200028" + "02980141a18ac0004120200241021018417141d89dc000411c103c419783c000410d200120" + "0028029801101e417141c18ac0004122103c419797abdd03410d41a18ac000412041001000" + "417341e38ac0004110103c419797abdd03410d200341081025417341f38ac000411d103c41" + "9797abdd03410d20054114101e417341908bc0004118103c419797abdd03410d41c583c000" + "4108101f417341a88bc0004117103c2001200028029801200141812041001000417441bf8b" + "c000410e103c200141812042011001417441cd8bc0004112103c419783c000418120200341" + "081025417441df8bc000411b103c419783c00041812020054114101e417441fa8bc0004116" + "103c419783c00041812041c583c0004108101f417441908cc0004115103c419783c000410d" + "2001200028029801101f417141a58cc0004119103c200041003b01ec012001200028029801" + "20054114200241021024417141f49dc0004121103c4101410020054114101e410041be8cc0" + "00411a103c200041f0016a240041010f0b0b418080c000410b417f20022002417f4e1bac10" + "01000b0b801e0200418080c0000bde056572726f725f636f64653d54455354204641494c45" + "442424242424205354415254494e47205741534d20455845435554494f4e20242424242467" + "65745f6c65646765725f73716e6765745f706172656e745f6c65646765725f74696d656765" + "745f626173655f666565746573745f616d656e646d656e74616d656e646d656e745f656e61" + "626c656463616368655f6c65646765725f6f626a6765745f74785f61727261795f6c656e67" + "65745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e6765745f6c65" + "646765725f6f626a5f61727261795f6c656e6765745f74785f6e65737465645f6172726179" + "5f6c656e6765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f617272" + "61795f6c656e6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e" + "7570646174655f6461746174657374206d65737361676574657374207075626b6579746573" + "74207369676e6174757265636865636b5f7369676765745f6e66745f666c6167736765745f" + "6e66745f7472616e736665725f66656574657374696e6720747261636574726163655f6163" + "636f756e74400000000000005f74726163655f616d6f756e74400000000000000074726163" + "655f616d6f756e745f7a65726f6765745f706172656e745f6c65646765725f686173685f6e" + "65675f7074726765745f74785f61727261795f6c656e5f696e76616c69645f736669656c64" + "6765745f74785f6e65737465645f61727261795f6c656e5f6e65675f7074726765745f7478" + "5f6e65737465645f61727261795f6c656e5f6e65675f6c656e6765745f74785f6e65737465" + "645f61727261795f6c656e5f746f6f5f6c6f6e676765745f74785f6e65737465645f617272" + "61795f6c656e5f7074725f6f6f6263616368655f6c65646765725f6f626a5f7074725f6f6f" + "6263616368655f6c65646765725f6f626a5f77726f6e675f6c656e55534430303030303030" + "3030303030303030303000418686c0000b8f1874726163655f6e756d5f6f6f625f73747267" + "65745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e5f696e76616c" + "69645f736669656c646765745f6c65646765725f6f626a5f61727261795f6c656e5f696e76" + "616c69645f736669656c64616d656e646d656e745f656e61626c65645f746f6f5f6269675f" + "736c696365616d656e646d656e745f656e61626c65645f746f6f5f6c6f6e676765745f7478" + "5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f6375" + "7272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f" + "5f6269675f736c6963656765745f6c65646765725f6f626a5f6e65737465645f6172726179" + "5f6c656e5f746f6f5f6269675f736c6963657570646174655f646174615f746f6f5f626967" + "5f736c69636574726163655f6f6f625f736c69636574726163655f6f70617175655f666c6f" + "61745f6f6f625f736c69636574726163655f616d6f756e745f6f6f625f736c696365666c6f" + "61745f636f6d706172655f6f6f625f736c69636531666c6f61745f636f6d706172655f6f6f" + "625f736c6963653263616368655f6c65646765725f6f626a5f77726f6e675f73697a655f75" + "696e743235366765745f6e66745f666c6167735f77726f6e675f73697a655f75696e743235" + "366765745f6e66745f7472616e736665725f6665655f77726f6e675f73697a655f75696e74" + "32353630303030303030303030303030303030303030303030303030303030303030317472" + "6163655f6163636f756e745f77726f6e675f73697a655f6163636f756e7469647472616365" + "5f6f6f625f737472696e6774726163655f6f70617175655f666c6f61745f6f6f625f737472" + "696e6774726163655f6163636f756e745f6f6f625f737472696e6774726163655f616d6f75" + "6e745f6f6f625f737472696e6774726163655f746f6f5f6c6f6e6774726163655f6e756d5f" + "746f6f5f6c6f6e6774726163655f6f70617175655f666c6f61745f746f6f5f6c6f6e677472" + "6163655f6163636f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f746f6f5f" + "6c6f6e6774726163655f616d6f756e745f77726f6e675f6c656e67746874726163655f6163" + "636f756e745f636865636b5f646573796e636765745f706172656e745f6c65646765725f68" + "6173686765745f63757272656e745f6c65646765725f6f626a5f6669656c646765745f6c65" + "646765725f6f626a5f6669656c646765745f74785f6e65737465645f6669656c646765745f" + "63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c646765745f6c65" + "646765725f6f626a5f6e65737465645f6669656c64636f6d707574655f7368613531325f68" + "616c666765745f6e66746765745f6e66745f6973737565726765745f6e66745f7461786f6e" + "6765745f6e66745f73657269616c6765745f706172656e745f6c65646765725f686173685f" + "6e65675f6c656e6765745f706172656e745f6c65646765725f686173685f6275665f746f6f" + "5f736d616c6c6765745f706172656e745f6c65646765725f686173685f6c656e5f746f6f5f" + "6c6f6e67666c6f61745f66726f6d5f75696e745f6c656e5f6f6f62666c6f61745f66726f6d" + "5f75696e745f77726f6e675f6c656e6163636f756e745f6b65796c65745f6c656e5f6f6f62" + "6163636f756e745f6b65796c65745f77726f6e675f6c656e6c696e655f6b65796c65745f6c" + "656e5f6f6f625f63757272656e63796c696e655f6b65796c65745f77726f6e675f6c656e5f" + "63757272656e6379616d6d5f6b65796c65745f6c656e5f6f6f625f617373657432616d6d5f" + "6b65796c65745f6c656e5f77726f6e675f6c656e5f617373657432616d6d5f6b65796c6574" + "5f6c656e5f77726f6e675f6e6f6e5f7872705f63757272656e63795f6c656e616d6d5f6b65" + "796c65745f6c656e5f77726f6e675f7872705f63757272656e63795f6c656e616d6d5f6b65" + "796c65745f6d70746765745f74785f6669656c645f696e76616c69645f736669656c646765" + "745f63757272656e745f6c65646765725f6f626a5f6669656c645f696e76616c69645f7366" + "69656c646765745f6c65646765725f6f626a5f6669656c645f696e76616c69645f73666965" + "6c646765745f74785f6e65737465645f6669656c645f746f6f5f6269675f736c6963656765" + "745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c645f746f6f" + "5f6269675f736c6963656765745f6c65646765725f6f626a5f6e65737465645f6669656c64" + "5f746f6f5f6269675f736c696365636f6d707574655f7368613531325f68616c665f746f6f" + "5f6269675f736c696365616d6d5f6b65796c65745f746f6f5f6269675f736c696365637265" + "64656e7469616c5f6b65796c65745f746f6f5f6269675f736c6963656d70746f6b656e5f6b" + "65796c65745f746f6f5f6269675f736c6963655f6d70746964666c6f61745f6164645f6f6f" + "625f736c69636531666c6f61745f6164645f6f6f625f736c69636532666c6f61745f737562" + "74726163745f6f6f625f736c69636531666c6f61745f73756274726163745f6f6f625f736c" + "69636532666c6f61745f6d756c7469706c795f6f6f625f736c69636531666c6f61745f6d75" + "6c7469706c795f6f6f625f736c69636532666c6f61745f6469766964655f6f6f625f736c69" + "636531666c6f61745f6469766964655f6f6f625f736c69636532666c6f61745f726f6f745f" + "6f6f625f736c696365666c6f61745f706f775f6f6f625f736c696365666c6f61745f6c6f67" + "5f6f6f625f736c6963656765745f6e66745f77726f6e675f73697a655f75696e7432353667" + "65745f6e66745f6973737565725f77726f6e675f73697a655f75696e743235366765745f6e" + "66745f7461786f6e5f77726f6e675f73697a655f75696e743235366765745f6e66745f7365" + "7269616c5f77726f6e675f73697a655f75696e743235366163636f756e745f6b65796c6574" + "5f77726f6e675f73697a655f6163636f756e746964636865636b5f6b65796c65745f77726f" + "6e675f73697a655f6163636f756e74696463726564656e7469616c5f6b65796c65745f7772" + "6f6e675f73697a655f6163636f756e7469643163726564656e7469616c5f6b65796c65745f" + "77726f6e675f73697a655f6163636f756e7469643264656c65676174655f6b65796c65745f" + "77726f6e675f73697a655f6163636f756e7469643164656c65676174655f6b65796c65745f" + "77726f6e675f73697a655f6163636f756e746964326465706f7369745f707265617574685f" + "6b65796c65745f77726f6e675f73697a655f6163636f756e746964316465706f7369745f70" + "7265617574685f6b65796c65745f77726f6e675f73697a655f6163636f756e746964326469" + "645f6b65796c65745f77726f6e675f73697a655f6163636f756e746964657363726f775f6b" + "65796c65745f77726f6e675f73697a655f6163636f756e7469646c696e655f6b65796c6574" + "5f77726f6e675f73697a655f6163636f756e746964316c696e655f6b65796c65745f77726f" + "6e675f73697a655f6163636f756e746964326d70745f69737375616e63655f6b65796c6574" + "5f77726f6e675f73697a655f6163636f756e7469646d70746f6b656e5f6b65796c65745f77" + "726f6e675f73697a655f6163636f756e7469646e66745f6f666665725f6b65796c65745f77" + "726f6e675f73697a655f6163636f756e7469646f666665725f6b65796c65745f77726f6e67" + "5f73697a655f6163636f756e7469646f7261636c655f6b65796c65745f77726f6e675f7369" + "7a655f6163636f756e7469647061796368616e5f6b65796c65745f77726f6e675f73697a65" + "5f6163636f756e746964317061796368616e5f6b65796c65745f77726f6e675f73697a655f" + "6163636f756e746964327065726d697373696f6e65645f646f6d61696e5f6b65796c65745f" + "77726f6e675f73697a655f6163636f756e7469647369676e6572735f6b65796c65745f7772" + "6f6e675f73697a655f6163636f756e7469647469636b65745f6b65796c65745f77726f6e67" + "5f73697a655f6163636f756e7469647661756c745f6b65796c65745f77726f6e675f73697a" + "655f6163636f756e7469646765745f6e66745f77726f6e675f73697a655f6163636f756e74" + "69646d70746f6b656e5f6b65796c65745f6d707469645f77726f6e675f6c656e677468004d" + "0970726f64756365727302086c616e6775616765010452757374000c70726f636573736564" + "2d6279010572757374631d312e38372e30202831373036376539616320323032352d30352d" + "303929002c0f7461726765745f6665617475726573022b0f6d757461626c652d676c6f6261" + "6c732b087369676e2d657874"; extern std::string const floatTestsWasmHex = "0061736d0100000001430860077f7f7f7f7f7f7f017f60057f7f7f7f7f017f60047f7f7f7f" diff --git a/src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp b/src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp index ddf4cde0e5..31e90df7ab 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp @@ -15,8 +15,6 @@ WasmHostFunctionsImpl::trace( Slice const& data, bool asHex) { - auto const ret = msg.size() + data.size() * (asHex ? 2 : 1); - if (!asHex) { log(msg, [&data] { @@ -35,15 +33,14 @@ WasmHostFunctionsImpl::trace( }); } - return ret; + return 0; } Expected WasmHostFunctionsImpl::traceNum(std::string_view const& msg, int64_t data) { - auto const ret = msg.size() + sizeof(data); log(msg, [data] { return data; }); - return ret; + return 0; } Expected @@ -51,9 +48,8 @@ WasmHostFunctionsImpl::traceAccount( std::string_view const& msg, AccountID const& account) { - auto const ret = msg.size() + account.size(); log(msg, [&account] { return toBase58(account); }); - return ret; + return 0; } Expected @@ -61,9 +57,8 @@ WasmHostFunctionsImpl::traceFloat( std::string_view const& msg, Slice const& data) { - auto const ret = msg.size() + data.size(); log(msg, [&data] { return wasm_float::floatToString(data); }); - return ret; + return 0; } Expected @@ -71,9 +66,8 @@ WasmHostFunctionsImpl::traceAmount( std::string_view const& msg, STAmount const& amount) { - auto const ret = msg.size(); log(msg, [&amount] { return amount.getFullText(); }); - return ret; + return 0; } } // namespace xrpl From df98db14528eb825b26c6180a7404bb033b04993 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Fri, 23 Jan 2026 16:12:14 -0500 Subject: [PATCH 069/137] Check wasm return type (#6240) * Check wasm return type * Add more tests --- src/test/app/Wasm_test.cpp | 60 +++++++++++++++++++++++++++ src/xrpld/app/wasm/detail/WasmiVM.cpp | 5 ++- 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 699178cac2..aee7968f78 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -953,6 +953,65 @@ struct Wasm_test : public beast::unit_test::suite env.close(); } + void + testReturnType() + { + using namespace test::jtx; + Env env(*this); + std::shared_ptr hfs(new TestHostFunctions(env, 0)); + + // return int64. + { // (module + // (memory (export "memory") 1) + // (func (export "finish") (result i64) + // i64.const 0x100000000)) + auto const wasmHex = + "0061736d010000000105016000017e030201000503010001" + "071302066d656d6f727902000666696e69736800000a0a01" + "08004280808080100b"; + auto const wasmStr = boost::algorithm::unhex(std::string(wasmHex)); + Bytes const wasm(wasmStr.begin(), wasmStr.end()); + auto const re = + runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); + BEAST_EXPECT(!re); + } + + // return void. wasmi return execution error + { //(module + // (type (;0;) (func)) + // (func (;0;) (type 0) + // return) + // (memory (;0;) 1) + // (export "memory" (memory 0)) + // (export "finish" (func 0))) + auto const wasmHex = + "0061736d01000000010401600000030201000503010001071302066d656d6f" + "727902000666696e69736800000a050103000f0b"; + auto const wasmStr = boost::algorithm::unhex(std::string(wasmHex)); + Bytes const wasm(wasmStr.begin(), wasmStr.end()); + auto const re = + runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); + BEAST_EXPECT(!re); + } + + // return i32, i32. wasmi doesn't create module + { //(module + // (memory (export "memory") 1) + // (func (export "finish") (result i32 i32) + // i32.const 0x10000000 + // i32.const 0x100000FF)) + auto const wasmHex = + "0061736d010000000106016000027f7f030201000503010001071302066d65" + "6d6f727902000666696e69736800000a10010e0041808080800141ff818080" + "010b"; + auto const wasmStr = boost::algorithm::unhex(std::string(wasmHex)); + Bytes const wasm(wasmStr.begin(), wasmStr.end()); + auto const re = + runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); + BEAST_EXPECT(!re); + } + } + void run() override { @@ -984,6 +1043,7 @@ struct Wasm_test : public beast::unit_test::suite testStartFunctionLoop(); testBadAlloc(); testBadAlign(); + testReturnType(); // perfTest(); } diff --git a/src/xrpld/app/wasm/detail/WasmiVM.cpp b/src/xrpld/app/wasm/detail/WasmiVM.cpp index 037f787a26..fa2e2fe085 100644 --- a/src/xrpld/app/wasm/detail/WasmiVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmiVM.cpp @@ -874,8 +874,11 @@ WasmiEngine::runHlp( throw std::runtime_error( "<" + std::string(funcName) + "> return nothing"); // LCOV_EXCL_LINE + else if (res.r.vec_.data[0].kind != WASM_I32) + throw std::runtime_error( + "<" + std::string(funcName) + "> return type mismatch, ret: " + + std::to_string(static_cast(res.r.vec_.data[0].kind))); - assert(res.r.vec_.data[0].kind == WASM_I32); if (gas == -1) gas = std::numeric_limits::max(); WasmResult const ret{ From 4160677878c52e50e2e9546134e8bfc61c18f29f Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Mon, 26 Jan 2026 14:04:03 -0500 Subject: [PATCH 070/137] Switch to series expansion method for ln() (#6268) * Switch to series expansion method for ln() Add float lg() tests to Number tests; * Rename lg -> log10 * Add check for 0 to log10() --- include/xrpl/basics/Number.h | 2 +- src/libxrpl/basics/Number.cpp | 67 ++++++++++----- src/test/app/HostFuncImpl_test.cpp | 2 +- src/test/basics/Number_test.cpp | 84 +++++++++++++++++++ .../app/wasm/detail/HostFuncImplFloat.cpp | 2 +- 5 files changed, 133 insertions(+), 24 deletions(-) diff --git a/include/xrpl/basics/Number.h b/include/xrpl/basics/Number.h index 846607066b..a012251cc2 100644 --- a/include/xrpl/basics/Number.h +++ b/include/xrpl/basics/Number.h @@ -753,7 +753,7 @@ power(Number const& f, unsigned n); // logarithm with base 10 Number -lg(Number const& value); +log10(Number const& value, int iterations = 50); // Returns f^(1/d) // Uses Newton–Raphson iterations until the result stops changing diff --git a/src/libxrpl/basics/Number.cpp b/src/libxrpl/basics/Number.cpp index 2fcd88f3b0..6dd7713235 100644 --- a/src/libxrpl/basics/Number.cpp +++ b/src/libxrpl/basics/Number.cpp @@ -984,46 +984,71 @@ power(Number const& f, unsigned n) return r; } -// Continued fraction approximation of ln(x) +// Series expansion method approximation of ln(x) static Number -ln(Number const& x, unsigned iterations = 50) +ln(Number const& x, int iterations = 50) { + static Number const N0(0); + static Number const N2(2, 0); + static Number const N05(5, -1); + static Number const LN2(693'147'180'559'945'309ll, -18); + if (x <= 0) - throw std::runtime_error("Not positive value"); + throw std::runtime_error("Not a positive value"); + else if (x == 1) + return N0; - Number const z = (x - 1) / (x + 1); - Number const zz = z * z; - Number denom = Number(1, -10); + int exponent = 0; + Number mantissa = x; - // Construct the fraction from the bottom up - for (int i = iterations; i > 0; --i) + while (mantissa >= N2) { - Number k(2 * i - 1); - denom = k - (i * i * zz / denom); + mantissa /= 2; + exponent += 1; + } + while (mantissa < N05) + { + mantissa *= 2; + exponent -= 1; } - auto const r = 2 * z / denom; - return r; + Number z = (mantissa - 1) / (mantissa + 1); + Number const zz = z * z; + Number sum; + + for (int i = 1; i <= iterations; ++i) + { + sum = sum + z / (2 * i - 1); + z = z * zz; + } + + return 2 * sum + exponent * LN2; } Number -lg(Number const& x) +log10(Number const& x, int iterations) { - static Number const ln10 = ln(Number(10)); + static Number const N0(0); + static Number const LN10(2'302'585'092'994'046ll, -15); + + if (x <= 0) + throw std::runtime_error("Not a positive value"); + else if (x == 1) + return N0; if (x <= Number(10)) { - auto const r = ln(x) / ln10; + auto const r = ln(x, iterations) / LN10; return r; } - // ln(x) = ln(normX * 10^norm) = ln(normX) + norm * ln(10) + // (1 <= normalX < 10) + // ln(x) = ln(normalX * 10^norm) = ln(normalX) + norm * ln(10) int diffExp = 15 + x.exponent(); - Number const normalX = x / Number(1, diffExp); // (1 <= normalX < 10) - auto const lnX = ln(normalX) + diffExp * ln10; - - auto const r = lnX / ln10; - return r; + Number const normalX = x / Number(1, diffExp); + auto const lnX = ln(normalX, iterations) + diffExp * LN10; + auto const lgX = lnX / LN10; + return lgX; } // Returns f^(1/d) diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index fae904c0ec..80dcd2970d 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -3067,7 +3067,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const x = hfs.floatSet(1, -2, 0); // 0.01 auto const y = - hfs.floatSet(-1999999993734431, -15, 0); // almost -2 + hfs.floatSet(-2'000'000'000'000'000ll, -15, 0); // -2 if (BEAST_EXPECT(x && y)) { auto const result = hfs.floatLog(makeSlice(*x), 0); diff --git a/src/test/basics/Number_test.cpp b/src/test/basics/Number_test.cpp index 1fa5ae6e8f..f647a7abd0 100644 --- a/src/test/basics/Number_test.cpp +++ b/src/test/basics/Number_test.cpp @@ -1712,6 +1712,89 @@ public: } } + void + test_log10() + { + auto const scale = Number::getMantissaScale(); + testcase << "test_lg " << to_string(scale); + + using Case = std::tuple; + auto test = [this](auto const& c) { + for (auto const& [x, z] : c) + { + auto const result = log10(x); + std::stringstream ss; + ss << "lg(" << x << ") = " << result << ". Expected: " << z; + // std::cout << ss.str() << std::endl; + BEAST_EXPECTS(result == z, ss.str()); + } + }; + + auto const cSmall = std::to_array( + {{Number{2}, Number{3'010'299'956'639'811ll, -16}}, + {Number{2'000'000}, Number{6'301'029'995'663'985ll, -15}}, + {Number{2, -30}, Number{-2'969'897'000'433'602ll, -14}}, + {Number{1}, Number{0}}, + {Number{1'000'000'000'000'000ll}, Number{15}}, + {Number{5625, -4}, Number{-2'498'774'732'165'998, -16}}}); + + auto const cLarge = std::to_array( + {{Number{ + false, Number::maxMantissa() - 9, -1, Number::normalized{}}, + Number{ + false, + 1'746'901'684'478'673'451ll, + -17, + Number::normalized{}}}, + {Number{false, Number::maxMantissa() - 9, 0, Number::normalized{}}, + Number{ + false, + 1'846'901'684'478'673'451ll, + -17, + Number::normalized{}}}, + {Number{Number::maxRep}, + Number{ + false, + 1'861'728'612'932'620'011ll, + -17, + Number::normalized{}}}}); + + if (Number::getMantissaScale() == MantissaRange::small) + { + test(cSmall); + } + else + { + NumberRoundModeGuard mg(Number::towards_zero); + test(cLarge); + } + + { + bool caught = false; + try + { + log10(Number{-2}); + } + catch (std::runtime_error const&) + { + caught = true; + } + BEAST_EXPECT(caught); + caught = false; + + try + { + log10(Number()); + } + catch (std::runtime_error const&) + { + caught = true; + } + BEAST_EXPECT(caught); + caught = false; + } + } + void run() override { @@ -1739,6 +1822,7 @@ public: test_truncate(); testRounding(); testInt64(); + test_log10(); } } }; diff --git a/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp b/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp index e424e3cedf..d0f8f1e8e9 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp @@ -454,7 +454,7 @@ floatLogImpl(Slice const& x, int32_t mode) if (!xx) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 res(lg(xx)); + detail::Number2 res(log10(xx)); return res.toBytes(); } From 317e533d812f002736341cde16b1913581cfa04a Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 26 Jan 2026 15:21:15 -0500 Subject: [PATCH 071/137] clean up Wasm_test.cpp more (#6278) --- src/test/app/Wasm_test.cpp | 196 ++++++++++++++++--------------------- 1 file changed, 85 insertions(+), 111 deletions(-) diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index aee7968f78..2399809b0c 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -6,13 +6,7 @@ #include -#if (defined(__clang_major__) && __clang_major__ < 15) -#include -using source_location = std::experimental::source_location; -#else #include -using std::source_location; -#endif namespace xrpl { namespace test { @@ -31,12 +25,18 @@ Add(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) return nullptr; } +std::vector const +hexToBytes(std::string const& hex) +{ + auto const ws = boost::algorithm::unhex(hex); + return Bytes(ws.begin(), ws.end()); +} + std::optional runFinishFunction(std::string const& code) { auto& engine = WasmEngine::instance(); - auto const ws = boost::algorithm::unhex(code); - Bytes const wasm(ws.begin(), ws.end()); + auto const wasm = hexToBytes(code); auto const re = engine.run(wasm, "finish"); if (re.has_value()) { @@ -55,7 +55,7 @@ struct Wasm_test : public beast::unit_test::suite Expected, TER> re, int32_t expectedResult, int64_t expectedCost, - source_location const location = source_location::current()) + std::source_location const location = std::source_location::current()) { auto const lineStr = " (" + std::to_string(location.line()) + ")"; if (BEAST_EXPECTS(re.has_value(), transToken(re.error()) + lineStr)) @@ -132,9 +132,7 @@ struct Wasm_test : public beast::unit_test::suite std::shared_ptr hfs(new HostFunctions(env.journal)); { - auto wasmHex = "00000000"; - auto wasmStr = boost::algorithm::unhex(std::string(wasmHex)); - std::vector wasm(wasmStr.begin(), wasmStr.end()); + auto wasm = hexToBytes("00000000"); std::string funcName("mock_escrow"); auto re = runEscrowWasm(wasm, hfs, funcName, {}, 15); @@ -142,9 +140,7 @@ struct Wasm_test : public beast::unit_test::suite } { - auto wasmHex = "00112233445566778899AA"; - auto wasmStr = boost::algorithm::unhex(std::string(wasmHex)); - std::vector wasm(wasmStr.begin(), wasmStr.end()); + auto wasm = hexToBytes("00112233445566778899AA"); std::string funcName("mock_escrow"); auto const re = preflightEscrowWasm(wasm, hfs, funcName); @@ -156,7 +152,7 @@ struct Wasm_test : public beast::unit_test::suite // pub fn bad() -> bool { // unsafe { host_lib::getLedgerSqn() >= 5 } // } - auto const badWasmHex = + auto const badWasm = hexToBytes( "0061736d010000000105016000017f02190108686f73745f6c69620c6765" "744c656467657253716e00000302010005030100100611027f00418080c0" "000b7f00418080c0000b072b04066d656d6f727902000362616400010a5f" @@ -166,12 +162,10 @@ struct Wasm_test : public beast::unit_test::suite "2e31202834656231363132353020323032352d30332d31352900490f7461" "726765745f6665617475726573042b0f6d757461626c652d676c6f62616c" "732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a" - "6d756c746976616c7565"; - auto wasmStr = boost::algorithm::unhex(std::string(badWasmHex)); - std::vector wasm(wasmStr.begin(), wasmStr.end()); + "6d756c746976616c7565"); auto const re = - preflightEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME); + preflightEscrowWasm(badWasm, hfs, ESCROW_FUNCTION_NAME); BEAST_EXPECT(!isTesSuccess(re)); } } @@ -181,8 +175,7 @@ struct Wasm_test : public beast::unit_test::suite { testcase("Wasm get ledger sequence"); - auto wasmStr = boost::algorithm::unhex(ledgerSqnWasmHex); - Bytes wasm(wasmStr.begin(), wasmStr.end()); + auto ledgerSqnWasm = hexToBytes(ledgerSqnWasmHex); using namespace test::jtx; @@ -194,7 +187,7 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); auto re = engine.run( - wasm, + ledgerSqnWasm, ESCROW_FUNCTION_NAME, {}, imports, @@ -219,11 +212,10 @@ struct Wasm_test : public beast::unit_test::suite { testcase("Wasm fibo"); - auto const ws = boost::algorithm::unhex(fibWasmHex); - Bytes const wasm(ws.begin(), ws.end()); + auto const fibWasm = hexToBytes(fibWasmHex); auto& engine = WasmEngine::instance(); - auto const re = engine.run(wasm, "fib", wasmParams(10)); + auto const re = engine.run(fibWasm, "fib", wasmParams(10)); checkResult(re, 55, 1'137); } @@ -233,12 +225,11 @@ struct Wasm_test : public beast::unit_test::suite { testcase("Wasm sha"); - auto const ws = boost::algorithm::unhex(sha512PureWasmHex); - Bytes const wasm(ws.begin(), ws.end()); + auto const sha512Wasm = hexToBytes(sha512PureWasmHex); auto& engine = WasmEngine::instance(); - auto const re = - engine.run(wasm, "sha512_process", wasmParams(sha512PureWasmHex)); + auto const re = engine.run( + sha512Wasm, "sha512_process", wasmParams(sha512PureWasmHex)); checkResult(re, 34'432, 151'155); } @@ -247,8 +238,7 @@ struct Wasm_test : public beast::unit_test::suite testWasmB58() { testcase("Wasm base58"); - auto const ws = boost::algorithm::unhex(b58WasmHex); - Bytes const wasm(ws.begin(), ws.end()); + auto const b58Wasm = hexToBytes(b58WasmHex); auto& engine = WasmEngine::instance(); Bytes outb; @@ -259,7 +249,7 @@ struct Wasm_test : public beast::unit_test::suite static_cast(b58WasmHex.size())); auto const s = std::string_view(b58WasmHex.c_str(), minsz); - auto const re = engine.run(wasm, "b58enco", wasmParams(outb, s)); + auto const re = engine.run(b58Wasm, "b58enco", wasmParams(outb, s)); checkResult(re, 700, 2'886'069); } @@ -273,9 +263,7 @@ struct Wasm_test : public beast::unit_test::suite Env env(*this); { - std::string const wasmHex = allHostFunctionsWasmHex; - std::string const wasmStr = boost::algorithm::unhex(wasmHex); - std::vector const wasm(wasmStr.begin(), wasmStr.end()); + auto const allHostFuncWasm = hexToBytes(allHostFunctionsWasmHex); auto& engine = WasmEngine::instance(); @@ -285,7 +273,7 @@ struct Wasm_test : public beast::unit_test::suite i.second.gas = 0; auto re = engine.run( - wasm, + allHostFuncWasm, ESCROW_FUNCTION_NAME, {}, imp, @@ -305,9 +293,7 @@ struct Wasm_test : public beast::unit_test::suite env.close(); { - std::string const wasmHex = allHostFunctionsWasmHex; - std::string const wasmStr = boost::algorithm::unhex(wasmHex); - std::vector const wasm(wasmStr.begin(), wasmStr.end()); + auto const allHostFuncWasm = hexToBytes(allHostFunctionsWasmHex); auto& engine = WasmEngine::instance(); @@ -315,7 +301,7 @@ struct Wasm_test : public beast::unit_test::suite auto const imp = createWasmImport(*hfs); auto re = engine.run( - wasm, + allHostFuncWasm, ESCROW_FUNCTION_NAME, {}, imp, @@ -330,9 +316,7 @@ struct Wasm_test : public beast::unit_test::suite // not enough gas { - std::string const wasmHex = allHostFunctionsWasmHex; - std::string const wasmStr = boost::algorithm::unhex(wasmHex); - std::vector const wasm(wasmStr.begin(), wasmStr.end()); + auto const allHostFuncWasm = hexToBytes(allHostFunctionsWasmHex); auto& engine = WasmEngine::instance(); @@ -340,7 +324,13 @@ struct Wasm_test : public beast::unit_test::suite auto const imp = createWasmImport(*hfs); auto re = engine.run( - wasm, ESCROW_FUNCTION_NAME, {}, imp, hfs, 200, env.journal); + allHostFuncWasm, + ESCROW_FUNCTION_NAME, + {}, + imp, + hfs, + 200, + env.journal); if (BEAST_EXPECT(!re)) { @@ -358,23 +348,22 @@ struct Wasm_test : public beast::unit_test::suite { testcase("escrow wasm devnet test"); - std::string const wasmStr = - boost::algorithm::unhex(allHostFunctionsWasmHex); - std::vector wasm(wasmStr.begin(), wasmStr.end()); + auto const allHFWasm = hexToBytes(allHostFunctionsWasmHex); using namespace test::jtx; Env env{*this}; { std::shared_ptr hfs(new TestHostFunctions(env, 0)); - auto re = - runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); + auto re = runEscrowWasm( + allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); checkResult(re, 1, 64'763); } { // max() gas std::shared_ptr hfs(new TestHostFunctions(env, 0)); - auto re = runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, -1); + auto re = + runEscrowWasm(allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, -1); checkResult(re, 1, 64'763); } @@ -392,8 +381,8 @@ struct Wasm_test : public beast::unit_test::suite }; std::shared_ptr hfs(new BadTestHostFunctions(env)); - auto re = - runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); + auto re = runEscrowWasm( + allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); checkResult(re, -201, 28'148); } @@ -411,20 +400,19 @@ struct Wasm_test : public beast::unit_test::suite }; std::shared_ptr hfs(new BadTestHostFunctions(env)); - auto re = - runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); + auto re = runEscrowWasm( + allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); checkResult(re, -201, 28'148); } { // fail because recursion too deep - auto const wasmStr = boost::algorithm::unhex(deepRecursionHex); - std::vector wasm(wasmStr.begin(), wasmStr.end()); + auto const deepWasm = hexToBytes(deepRecursionHex); std::shared_ptr hfs( new TestHostFunctionsSink(env)); std::string funcName("finish"); - auto re = runEscrowWasm(wasm, hfs, funcName, {}, 1'000'000'000); + auto re = runEscrowWasm(deepWasm, hfs, funcName, {}, 1'000'000'000); BEAST_EXPECT(!re && re.error()); // std::cout << "bad case (deep recursion) result " << re.error() // << std::endl; @@ -449,13 +437,13 @@ struct Wasm_test : public beast::unit_test::suite } { // infinite loop - auto const wasmStr = boost::algorithm::unhex(infiniteLoopWasmHex); - Bytes wasm(wasmStr.begin(), wasmStr.end()); + auto const infiniteLoopWasm = hexToBytes(infiniteLoopWasmHex); std::string const funcName("loop"); std::shared_ptr hfs(new TestHostFunctions(env, 0)); // infinite loop should be caught and fail - auto const re = runEscrowWasm(wasm, hfs, funcName, {}, 1'000'000); + auto const re = + runEscrowWasm(infiniteLoopWasm, hfs, funcName, {}, 1'000'000); if (BEAST_EXPECT(!re.has_value())) { BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); @@ -464,8 +452,7 @@ struct Wasm_test : public beast::unit_test::suite { // expected import not provided - auto wasmStr = boost::algorithm::unhex(ledgerSqnWasmHex); - Bytes wasm(wasmStr.begin(), wasmStr.end()); + auto const lgrSqnWasm = hexToBytes(ledgerSqnWasmHex); std::shared_ptr hfs(new TestLedgerDataProvider(env)); std::shared_ptr imports(std::make_shared()); WASM_IMPORT_FUNC2( @@ -474,7 +461,7 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); auto re = engine.run( - wasm, + lgrSqnWasm, ESCROW_FUNCTION_NAME, {}, imports, @@ -487,8 +474,7 @@ struct Wasm_test : public beast::unit_test::suite { // bad import format - auto wasmStr = boost::algorithm::unhex(ledgerSqnWasmHex); - Bytes wasm(wasmStr.begin(), wasmStr.end()); + auto const lgrSqnWasm = hexToBytes(ledgerSqnWasmHex); std::shared_ptr hfs(new TestLedgerDataProvider(env)); std::shared_ptr imports(std::make_shared()); WASM_IMPORT_FUNC2( @@ -498,7 +484,7 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); auto re = engine.run( - wasm, + lgrSqnWasm, ESCROW_FUNCTION_NAME, {}, imports, @@ -511,8 +497,7 @@ struct Wasm_test : public beast::unit_test::suite { // bad function name - auto wasmStr = boost::algorithm::unhex(ledgerSqnWasmHex); - Bytes wasm(wasmStr.begin(), wasmStr.end()); + auto const lgrSqnWasm = hexToBytes(ledgerSqnWasmHex); std::shared_ptr hfs(new TestLedgerDataProvider(env)); std::shared_ptr imports(std::make_shared()); WASM_IMPORT_FUNC2( @@ -520,7 +505,7 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); auto re = engine.run( - wasm, "func1", {}, imports, hfs, 1'000'000, env.journal); + lgrSqnWasm, "func1", {}, imports, hfs, 1'000'000, env.journal); BEAST_EXPECT(!re); } @@ -537,23 +522,19 @@ struct Wasm_test : public beast::unit_test::suite Env env(*this); { - std::string const wasmHex = floatTestsWasmHex; - std::string const wasmStr = boost::algorithm::unhex(wasmHex); - std::vector const wasm(wasmStr.begin(), wasmStr.end()); + auto const floatTestWasm = hexToBytes(floatTestsWasmHex); std::shared_ptr hfs(new TestHostFunctions(env, 0)); - auto re = runEscrowWasm(wasm, hfs, funcName, {}, 200'000); + auto re = runEscrowWasm(floatTestWasm, hfs, funcName, {}, 200'000); checkResult(re, 1, 110'699); env.close(); } { - std::string const wasmHex = float0Hex; - std::string const wasmStr = boost::algorithm::unhex(wasmHex); - std::vector const wasm(wasmStr.begin(), wasmStr.end()); + auto const float0Wasm = hexToBytes(float0Hex); std::shared_ptr hfs(new TestHostFunctions(env, 0)); - auto re = runEscrowWasm(wasm, hfs, funcName, {}, 100'000); + auto re = runEscrowWasm(float0Wasm, hfs, funcName, {}, 100'000); checkResult(re, 1, 4'259); env.close(); } @@ -568,9 +549,7 @@ struct Wasm_test : public beast::unit_test::suite using namespace std::chrono; // std::string const funcName("test"); - auto const& wasmHex = hfPerfTest; - std::string const wasmStr = boost::algorithm::unhex(wasmHex); - std::vector const wasm(wasmStr.begin(), wasmStr.end()); + auto const perfWasm = hexToBytes(hfPerfTest); // std::string const credType = "abcde"; // std::string const credType2 = "fghijk"; @@ -638,7 +617,7 @@ struct Wasm_test : public beast::unit_test::suite std::shared_ptr hfs( new PerfHostFunctions(env, k, env.tx())); - auto re = runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME); + auto re = runEscrowWasm(perfWasm, hfs, ESCROW_FUNCTION_NAME); if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECT(re->result); @@ -664,12 +643,12 @@ struct Wasm_test : public beast::unit_test::suite Env env{*this}; - auto const wasmStr = boost::algorithm::unhex(codecovTestsWasmHex); - Bytes const wasm(wasmStr.begin(), wasmStr.end()); + auto const codecovWasm = hexToBytes(codecovTestsWasmHex); std::shared_ptr hfs(new TestHostFunctions(env, 0)); auto const allowance = 187'131; - auto re = runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, allowance); + auto re = runEscrowWasm( + codecovWasm, hfs, ESCROW_FUNCTION_NAME, {}, allowance); checkResult(re, 1, allowance); } @@ -682,14 +661,14 @@ struct Wasm_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this}; - auto const wasmStr = boost::algorithm::unhex(disabledFloatHex); - Bytes wasm(wasmStr.begin(), wasmStr.end()); + auto disabledFloatWasm = hexToBytes(disabledFloatHex); std::string const funcName("finish"); std::shared_ptr hfs(new TestHostFunctions(env, 0)); { // f32 set constant, opcode disabled exception - auto const re = runEscrowWasm(wasm, hfs, funcName, {}, 1'000'000); + auto const re = + runEscrowWasm(disabledFloatWasm, hfs, funcName, {}, 1'000'000); if (BEAST_EXPECT(!re.has_value())) { BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); @@ -698,8 +677,9 @@ struct Wasm_test : public beast::unit_test::suite { // f32 add, can't create module exception - wasm[0x117] = 0x92; - auto const re = runEscrowWasm(wasm, hfs, funcName, {}, 1'000'000); + disabledFloatWasm[0x117] = 0x92; + auto const re = + runEscrowWasm(disabledFloatWasm, hfs, funcName, {}, 1'000'000); if (BEAST_EXPECT(!re.has_value())) { BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); @@ -827,19 +807,18 @@ struct Wasm_test : public beast::unit_test::suite using namespace test::jtx; Env env(*this); - auto wasmStr = boost::algorithm::unhex(startLoopHex); - Bytes wasm(wasmStr.begin(), wasmStr.end()); + auto const startLoopWasm = hexToBytes(startLoopHex); std::shared_ptr hfs(new TestLedgerDataProvider(env)); std::shared_ptr imports(std::make_shared()); auto& engine = WasmEngine::instance(); - auto checkRes = - engine.check(wasm, "finish", {}, imports, hfs, env.journal); + auto checkRes = engine.check( + startLoopWasm, "finish", {}, imports, hfs, env.journal); BEAST_EXPECTS( checkRes == tesSUCCESS, std::to_string(TERtoInt(checkRes))); auto re = engine.run( - wasm, + startLoopWasm, ESCROW_FUNCTION_NAME, {}, imports, @@ -857,8 +836,7 @@ struct Wasm_test : public beast::unit_test::suite testcase("Wasm Bad Alloc"); // bad_alloc.c - auto wasmStr = boost::algorithm::unhex(badAllocHex); - Bytes wasm(wasmStr.begin(), wasmStr.end()); + auto const badAllocWasm = hexToBytes(badAllocHex); using namespace test::jtx; @@ -874,7 +852,7 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); auto re = engine.run( - wasm, "test", params, {}, hfs, 1'000'000, env.journal); + badAllocWasm, "test", params, {}, hfs, 1'000'000, env.journal); if (BEAST_EXPECT(re)) { BEAST_EXPECTS(re->result == 7, std::to_string(re->result)); @@ -887,7 +865,7 @@ struct Wasm_test : public beast::unit_test::suite {.type = WT_U8V, .of = {.u8v = {.d = buf1, .sz = 0}}}}; auto& engine = WasmEngine::instance(); auto re = engine.run( - wasm, "test", params, {}, hfs, 1'000'000, env.journal); + badAllocWasm, "test", params, {}, hfs, 1'000'000, env.journal); BEAST_EXPECT(!re) && BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); } @@ -897,7 +875,7 @@ struct Wasm_test : public beast::unit_test::suite {.type = WT_U8V, .of = {.u8v = {.d = buf1, .sz = 1}}}}; auto& engine = WasmEngine::instance(); auto re = engine.run( - wasm, "test", params, {}, hfs, 1'000'000, env.journal); + badAllocWasm, "test", params, {}, hfs, 1'000'000, env.journal); BEAST_EXPECT(!re) && BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); } @@ -907,7 +885,7 @@ struct Wasm_test : public beast::unit_test::suite {.type = WT_U8V, .of = {.u8v = {.d = buf1, .sz = 2}}}}; auto& engine = WasmEngine::instance(); auto re = engine.run( - wasm, "test", params, {}, hfs, 1'000'000, env.journal); + badAllocWasm, "test", params, {}, hfs, 1'000'000, env.journal); BEAST_EXPECT(!re) && BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); } @@ -917,7 +895,7 @@ struct Wasm_test : public beast::unit_test::suite {.type = WT_U8V, .of = {.u8v = {.d = buf1, .sz = 3}}}}; auto& engine = WasmEngine::instance(); auto re = engine.run( - wasm, "test", params, {}, hfs, 1'000'000, env.journal); + badAllocWasm, "test", params, {}, hfs, 1'000'000, env.journal); BEAST_EXPECT(!re) && BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); @@ -932,8 +910,7 @@ struct Wasm_test : public beast::unit_test::suite testcase("Wasm Bad Align"); // bad_align.c - auto wasmStr = boost::algorithm::unhex(badAlignHex); - Bytes wasm(wasmStr.begin(), wasmStr.end()); + auto const badAlignWasm = hexToBytes(badAlignHex); using namespace test::jtx; @@ -946,7 +923,7 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); auto re = engine.run( - wasm, "test", {}, imports, hfs, 1'000'000, env.journal); + badAlignWasm, "test", {}, imports, hfs, 1'000'000, env.journal); BEAST_EXPECT(re && re->result == 0xbab88d46); } @@ -969,8 +946,7 @@ struct Wasm_test : public beast::unit_test::suite "0061736d010000000105016000017e030201000503010001" "071302066d656d6f727902000666696e69736800000a0a01" "08004280808080100b"; - auto const wasmStr = boost::algorithm::unhex(std::string(wasmHex)); - Bytes const wasm(wasmStr.begin(), wasmStr.end()); + auto const wasm = hexToBytes(wasmHex); auto const re = runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); BEAST_EXPECT(!re); @@ -987,8 +963,7 @@ struct Wasm_test : public beast::unit_test::suite auto const wasmHex = "0061736d01000000010401600000030201000503010001071302066d656d6f" "727902000666696e69736800000a050103000f0b"; - auto const wasmStr = boost::algorithm::unhex(std::string(wasmHex)); - Bytes const wasm(wasmStr.begin(), wasmStr.end()); + auto const wasm = hexToBytes(wasmHex); auto const re = runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); BEAST_EXPECT(!re); @@ -1004,8 +979,7 @@ struct Wasm_test : public beast::unit_test::suite "0061736d010000000106016000027f7f030201000503010001071302066d65" "6d6f727902000666696e69736800000a10010e0041808080800141ff818080" "010b"; - auto const wasmStr = boost::algorithm::unhex(std::string(wasmHex)); - Bytes const wasm(wasmStr.begin(), wasmStr.end()); + auto const wasm = hexToBytes(wasmHex); auto const re = runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); BEAST_EXPECT(!re); From 917c610f963b11c0a89aa0b4942bcb31abe9093f Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Tue, 27 Jan 2026 12:37:47 -0500 Subject: [PATCH 072/137] Ensure request size less than int limit (#6239) * Ensure request size less than int limit * Move size check to wasmParams function --- src/test/app/Wasm_test.cpp | 17 +++++++++++++++++ src/xrpld/app/wasm/ParamsHelper.h | 14 ++++++++++++++ src/xrpld/app/wasm/WasmiVM.h | 2 +- src/xrpld/app/wasm/detail/WasmiVM.cpp | 4 ++-- 4 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 2399809b0c..b5e5d7fc73 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -901,6 +901,23 @@ struct Wasm_test : public beast::unit_test::suite BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); } + { + std::string what; + try + { + char const test[] = "test"; + std::size_t sz = std::numeric_limits::max() + 1ull; + auto p = wasmParams(std::string_view(test, sz)); + } + catch (std::exception const& e) + { + what = e.what(); + } + BEAST_EXPECT( + what.find("can't allocate memory, size: 2147483648") != + std::string::npos); + } + env.close(); } diff --git a/src/xrpld/app/wasm/ParamsHelper.h b/src/xrpld/app/wasm/ParamsHelper.h index 508a9438b0..fb0b7f45dd 100644 --- a/src/xrpld/app/wasm/ParamsHelper.h +++ b/src/xrpld/app/wasm/ParamsHelper.h @@ -199,6 +199,11 @@ template inline void wasmParamsHlp(std::vector& v, Bytes const& p, Types&&... args) { + if (p.size() > std::numeric_limits::max()) + throw std::runtime_error( + "can't allocate memory, size: " + + std::to_string(p.size())); // LCOV_EXCL_LINE + wasmParamsHlp( v, p.data(), @@ -213,6 +218,10 @@ wasmParamsHlp( std::string_view const& p, Types&&... args) { + if (p.size() > std::numeric_limits::max()) + throw std::runtime_error( + "can't allocate memory, size: " + std::to_string(p.size())); + wasmParamsHlp( v, reinterpret_cast(p.data()), @@ -224,6 +233,11 @@ template inline void wasmParamsHlp(std::vector& v, std::string const& p, Types&&... args) { + if (p.size() > std::numeric_limits::max()) + throw std::runtime_error( + "can't allocate memory, size: " + + std::to_string(p.size())); // LCOV_EXCL_LINE + wasmParamsHlp( v, reinterpret_cast(p.c_str()), diff --git a/src/xrpld/app/wasm/WasmiVM.h b/src/xrpld/app/wasm/WasmiVM.h index d7e52d6a0e..c64e7951c0 100644 --- a/src/xrpld/app/wasm/WasmiVM.h +++ b/src/xrpld/app/wasm/WasmiVM.h @@ -335,7 +335,7 @@ private: FuncInfo const& f, std::vector& in, uint8_t const* d, - std::size_t sz, + int32_t sz, Types&&... args); template diff --git a/src/xrpld/app/wasm/detail/WasmiVM.cpp b/src/xrpld/app/wasm/detail/WasmiVM.cpp index fa2e2fe085..a0f8b612da 100644 --- a/src/xrpld/app/wasm/detail/WasmiVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmiVM.cpp @@ -759,7 +759,7 @@ WasmiEngine::call( FuncInfo const& f, std::vector& in, uint8_t const* d, - std::size_t sz, + int32_t sz, Types&&... args) { auto mem = getMem(); @@ -990,7 +990,7 @@ WasmiEngine::allocate(int32_t sz) throw std::runtime_error( "can't allocate memory, " + std::to_string(sz) + " bytes"); - auto res = call<1>(W_ALLOC, static_cast(sz)); + auto res = call<1>(W_ALLOC, sz); if (res.f || !res.r.vec_.size || (res.r.vec_.data[0].kind != WASM_I32)) throw std::runtime_error( From f1f2e2629fac77cb67dacc3693a7b332f105c204 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Tue, 27 Jan 2026 13:05:54 -0500 Subject: [PATCH 073/137] Fix for Big-Endian machines (#6245) --- src/test/app/Wasm_test.cpp | 55 +++++++++++++++++++ src/xrpld/app/wasm/ParamsHelper.h | 31 +++++++++++ .../app/wasm/detail/HostFuncImplGetter.cpp | 42 ++++++++++---- src/xrpld/app/wasm/detail/HostFuncWrapper.cpp | 3 +- 4 files changed, 118 insertions(+), 13 deletions(-) diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index b5e5d7fc73..a26328039b 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -1003,6 +1003,60 @@ struct Wasm_test : public beast::unit_test::suite } } + void + testSwapBytes() + { + testcase("Wasm swap bytes"); + + uint64_t const SWAP_DATAU64 = 0x123456789abcdeffull; + uint64_t const REVERSE_SWAP_DATAU64 = 0xffdebc9a78563412ull; + int64_t const SWAP_DATAI64 = 0x123456789abcdeffll; + int64_t const REVERSE_SWAP_DATAI64 = 0xffdebc9a78563412ll; + + uint32_t const SWAP_DATAU32 = 0x12789aff; + uint32_t const REVERSE_SWAP_DATAU32 = 0xff9a7812; + int32_t const SWAP_DATAI32 = 0x12789aff; + int32_t const REVERSE_SWAP_DATAI32 = 0xff9a7812; + + uint16_t const SWAP_DATAU16 = 0x12ff; + uint16_t const REVERSE_SWAP_DATAU16 = 0xff12; + int16_t const SWAP_DATAI16 = 0x12ff; + int16_t const REVERSE_SWAP_DATAI16 = 0xff12; + + uint64_t b1 = SWAP_DATAU64; + int64_t b2 = SWAP_DATAI64; + b1 = adjustWasmEndianessHlp(b1); + b2 = adjustWasmEndianessHlp(b2); + BEAST_EXPECT(b1 == REVERSE_SWAP_DATAU64); + BEAST_EXPECT(b2 == REVERSE_SWAP_DATAI64); + b1 = adjustWasmEndianessHlp(b1); + b2 = adjustWasmEndianessHlp(b2); + BEAST_EXPECT(b1 == SWAP_DATAU64); + BEAST_EXPECT(b2 == SWAP_DATAI64); + + uint32_t b3 = SWAP_DATAU32; + int32_t b4 = SWAP_DATAI32; + b3 = adjustWasmEndianessHlp(b3); + b4 = adjustWasmEndianessHlp(b4); + BEAST_EXPECT(b3 == REVERSE_SWAP_DATAU32); + BEAST_EXPECT(b4 == REVERSE_SWAP_DATAI32); + b3 = adjustWasmEndianessHlp(b3); + b4 = adjustWasmEndianessHlp(b4); + BEAST_EXPECT(b3 == SWAP_DATAU32); + BEAST_EXPECT(b4 == SWAP_DATAI32); + + uint16_t b5 = SWAP_DATAU16; + int16_t b6 = SWAP_DATAI16; + b5 = adjustWasmEndianessHlp(b5); + b6 = adjustWasmEndianessHlp(b6); + BEAST_EXPECT(b5 == REVERSE_SWAP_DATAU16); + BEAST_EXPECT(b6 == REVERSE_SWAP_DATAI16); + b5 = adjustWasmEndianessHlp(b5); + b6 = adjustWasmEndianessHlp(b6); + BEAST_EXPECT(b5 == SWAP_DATAU16); + BEAST_EXPECT(b6 == SWAP_DATAI16); + } + void run() override { @@ -1035,6 +1089,7 @@ struct Wasm_test : public beast::unit_test::suite testBadAlloc(); testBadAlign(); testReturnType(); + testSwapBytes(); // perfTest(); } diff --git a/src/xrpld/app/wasm/ParamsHelper.h b/src/xrpld/app/wasm/ParamsHelper.h index fb0b7f45dd..a7546ce092 100644 --- a/src/xrpld/app/wasm/ParamsHelper.h +++ b/src/xrpld/app/wasm/ParamsHelper.h @@ -261,4 +261,35 @@ wasmParams(Types&&... args) return v; } +template +inline constexpr T +adjustWasmEndianessHlp(T x) +{ + static_assert(std::is_integral::value, "Only integral types"); + if constexpr (size > 1) + { + using U = std::make_unsigned::type; + U u = static_cast(x); + U const low = (u & 0xFF) << ((size - 1) << 3); + u = adjustWasmEndianessHlp(u >> 8); + return static_cast(low | u); + } + + return x; +} + +template +inline constexpr T +adjustWasmEndianess(T x) +{ + // LCOV_EXCL_START + static_assert(std::is_integral::value, "Only integral types"); + if constexpr (std::endian::native == std::endian::big) + { + return adjustWasmEndianessHlp(x); + } + return x; + // LCOV_EXCL_STOP +} + } // namespace xrpl diff --git a/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp b/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp index 6b956de8a0..70fb1b5304 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp @@ -9,6 +9,19 @@ typedef std::variant FieldValue; namespace detail { +template +Bytes +getIntBytes(STBase const* obj) +{ + static_assert(std::is_integral::value, "Only integral types"); + + auto const& num(static_cast const*>(obj)); + T const data = adjustWasmEndianess(num->value()); + auto const* b = reinterpret_cast(&data); + auto const* e = reinterpret_cast(&data + 1); + return Bytes{b, e}; +} + static Expected getAnyFieldData(STBase const* obj) { @@ -58,20 +71,25 @@ getAnyFieldData(STBase const* obj) } break; case STI_UINT16: { - auto const& num(static_cast const*>(obj)); - std::uint16_t const data = num->value(); - auto const* b = reinterpret_cast(&data); - auto const* e = reinterpret_cast(&data + 1); - return Bytes{b, e}; + return getIntBytes(obj); } break; case STI_UINT32: { - auto const* num(static_cast const*>(obj)); - std::uint32_t const data = num->value(); - auto const* b = reinterpret_cast(&data); - auto const* e = reinterpret_cast(&data + 1); - return Bytes{b, e}; + return getIntBytes(obj); } + // LCOV_EXCL_START + case STI_UINT64: { + return getIntBytes(obj); + } + break; + case STI_INT32: { + return getIntBytes(obj); + } + break; + case STI_INT64: { + return getIntBytes(obj); + } + // LCOV_EXCL_STOP break; case STI_UINT256: { auto const* uint256Obj(static_cast(obj)); @@ -135,7 +153,7 @@ locateField(STObject const& obj, Slice const& locator) auto const& knownSFields = SField::getKnownCodeToField(); { - int32_t const sfieldCode = locPtr[0]; + int32_t const sfieldCode = adjustWasmEndianess(locPtr[0]); auto const it = knownSFields.find(sfieldCode); if (it == knownSFields.end()) return Unexpected(HostFunctionError::INVALID_FIELD); @@ -148,7 +166,7 @@ locateField(STObject const& obj, Slice const& locator) for (int i = 1; i < locSize; ++i) { - int32_t const sfieldCode = locPtr[i]; + int32_t const sfieldCode = adjustWasmEndianess(locPtr[i]); if (STI_ARRAY == field->getSType()) { diff --git a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp index 8910f22aa1..da768ff6eb 100644 --- a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp @@ -77,6 +77,7 @@ getDataUInt64(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) memcpy(&x, r->data(), sizeof(uint64_t)); else x = *reinterpret_cast(r->data()); + x = adjustWasmEndianess(x); return x; } @@ -290,7 +291,7 @@ returnResult( } else if constexpr (std::is_same_v) { - auto const resultValue = res.value(); + auto const resultValue = adjustWasmEndianess(res.value()); return hfResult( results, setData( From c1c1b4ea674a2e925e8071bf9a0620e0be39d507 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Tue, 27 Jan 2026 16:30:51 -0500 Subject: [PATCH 074/137] Reject non-canonical binaries (#6277) * Reject non-canonical binaries * Review fixes * Cleanup Number2 class * Use enum instead of 0 --- src/test/app/HostFuncImpl_test.cpp | 44 ++++--- src/xrpld/app/wasm/HostFuncImpl.h | 8 +- .../app/wasm/detail/HostFuncImplFloat.cpp | 114 ++++++++++-------- 3 files changed, 95 insertions(+), 71 deletions(-) diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 80dcd2970d..5c9aa54dc8 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -2411,6 +2411,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite { testcase("floatSet"); using namespace test::jtx; + using namespace wasm_float; Env env{*this}; OpenView ov{*env.current()}; @@ -2435,7 +2436,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const result = - hfs.floatSet(1, wasm_float::maxExponent + normalExp + 1, 0); + hfs.floatSet(1, wasmMaxExponent + normalExp + 1, 0); BEAST_EXPECT(!result) && BEAST_EXPECT( result.error() == @@ -2444,46 +2445,35 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const result = - hfs.floatSet(1, wasm_float::maxExponent + normalExp + 1, 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == - HostFunctionError::FLOAT_COMPUTATION_ERROR); - } - - { - auto const result = - hfs.floatSet(1, wasm_float::minExponent + normalExp - 1, 0); + hfs.floatSet(1, wasmMinExponent + normalExp - 1, 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); } { - auto const result = - hfs.floatSet(1, wasm_float::maxExponent + normalExp, 0); + auto const result = hfs.floatSet(1, wasmMaxExponent + normalExp, 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMaxExp); } { auto const result = - hfs.floatSet(-1, wasm_float::maxExponent + normalExp, 0); + hfs.floatSet(-1, wasmMaxExponent + normalExp, 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMinusMaxExp); } { auto const result = - hfs.floatSet(1, wasm_float::maxExponent + normalExp - 1, 0); + hfs.floatSet(1, wasmMaxExponent + normalExp - 1, 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatPreMaxExp); } { auto const result = - hfs.floatSet(STAmount::cMaxValue, wasm_float::maxExponent, 0); + hfs.floatSet(STAmount::cMaxValue, wasmMaxExponent, 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMaxIOU); } { - auto const result = - hfs.floatSet(1, wasm_float::minExponent + normalExp, 0); + auto const result = hfs.floatSet(1, wasmMinExponent + normalExp, 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMinExp); } @@ -3077,7 +3067,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite } void - testFloatNonIOU() + testFloatSpecialCases() { testcase("float Xrp+Mpt"); using namespace test::jtx; @@ -3136,6 +3126,20 @@ struct HostFuncImpl_test : public beast::unit_test::suite !result && result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } + + testcase("float non-canonical"); + + { // non-canonical mantissa 10 000 000 000 000 000 + Bytes x = float1; + *reinterpret_cast(x.data()) = 0x0000C16FF286A3D4ull; + { + auto const result = + hfs.floatCompare(makeSlice(x), makeSlice(float1)); + BEAST_EXPECT( + !result && + result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + } } void @@ -3153,7 +3157,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite testFloatRoot(); testFloatPower(); testFloatLog(); - testFloatNonIOU(); + testFloatSpecialCases(); } void diff --git a/src/xrpld/app/wasm/HostFuncImpl.h b/src/xrpld/app/wasm/HostFuncImpl.h index 26c55328db..4acdc85dfb 100644 --- a/src/xrpld/app/wasm/HostFuncImpl.h +++ b/src/xrpld/app/wasm/HostFuncImpl.h @@ -293,10 +293,10 @@ public: namespace wasm_float { // The range for the mantissa and exponent when normalized -static std::int64_t constexpr minMantissa = 1'000'000'000'000'000ll; -static std::int64_t constexpr maxMantissa = (1ull << 54) - 1; -static int constexpr minExponent = -96; -static int constexpr maxExponent = 80; +static std::int64_t constexpr wasmMinMantissa = 1'000'000'000'000'000ll; +static std::int64_t constexpr wasmMaxMantissa = wasmMinMantissa * 10 - 1; +static int constexpr wasmMinExponent = -96; +static int constexpr wasmMaxExponent = 80; } // namespace wasm_float diff --git a/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp b/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp index d0f8f1e8e9..29a0dd545f 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp @@ -16,17 +16,25 @@ namespace detail { class Number2 : public Number { protected: - static Bytes const FLOAT_NULL; + static Bytes const floatNull; + static unsigned constexpr encodedFloatSize = 8; + static int32_t constexpr encodedMantissaBits = 54; + static int32_t constexpr encodedExponentBits = 8; + + static_assert(wasmMinExponent < 0); + + static uint64_t constexpr maxEncodedMantissa = + (1ull << (encodedMantissaBits + 1)) - 1; bool good_; public: Number2(Slice const& data) : Number(), good_(false) { - if (data.size() != 8) + if (data.size() != encodedFloatSize) return; - if (std::ranges::equal(FLOAT_NULL, data)) + if (std::ranges::equal(floatNull, data)) { good_ = true; return; @@ -36,45 +44,53 @@ public: if (!(v & STAmount::cIssuedCurrency)) return; - int64_t const neg = (v & STAmount::cPositive) ? 1 : -1; - int32_t const e = static_cast((v >> (64 - 10)) & 0xFFull); - if (e < 1 || e > 177) + int32_t const e = + static_cast((v >> encodedMantissaBits) & 0xFFull); + int32_t const decodedExponent = e + wasmMinExponent - 1; // e - 97 + if (decodedExponent < wasmMinExponent || + decodedExponent > wasmMaxExponent) return; - int64_t const m = neg * static_cast(v & ((1ull << 54) - 1)); + int64_t const neg = (v & STAmount::cPositive) ? 1 : -1; + int64_t const m = + neg * static_cast(v & ((1ull << encodedMantissaBits) - 1)); if (!m) return; - Number x(makeNumber(m, e + wasm_float::minExponent - 1)); + Number x(makeNumber(m, decodedExponent)); + if (m != x.mantissa() || decodedExponent != x.exponent()) + return; // not canonical *static_cast(this) = x; + good_ = true; } - Number2() : Number(), good_(true) + template + Number2(T mantissa = 0, int32_t exponent = 0) : Number(), good_(false) { - } + if (!mantissa) + { + good_ = true; + return; + } - Number2(int64_t x) : Number(makeNumber(x, 0)), good_(true) - { - } + auto const n = makeNumber(mantissa, exponent); + auto const e = n.exponent(); + if (e < wasmMinExponent) + { + good_ = true; // value is zero(as in Numbers behavior) + return; + } - Number2(uint64_t x) : Number(0), good_(false) - { - using mtype = std::invoke_result_t; - if (x <= std::numeric_limits::max()) - *this = makeNumber(x, 0); - else - *this = makeNumber(x / 10, 1); + if (e > wasmMaxExponent) + return; + + *static_cast(this) = n; good_ = true; } - Number2(int64_t mantissa, int32_t exponent) - : Number(makeNumber(mantissa, exponent)), good_(true) - { - } - Number2(Number const& n) - : Number(makeNumber(n.mantissa(), n.exponent())), good_(true) + : Number2(n.mantissa(), n.exponent()) // ensure Number canonized { } @@ -100,35 +116,33 @@ public: Expected toBytes() const { - uint64_t v = mantissa() >= 0 ? STAmount::cPositive : 0; + if (!good_) + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + + auto const m = mantissa(); + auto const e = exponent(); + + uint64_t v = m >= 0 ? STAmount::cPositive : 0; v |= STAmount::cIssuedCurrency; - uint64_t const absM = mantissa() >= 0 ? mantissa() : -mantissa(); + uint64_t const absM = std::abs(m); if (!absM) { - using etype = - std::invoke_result_t; - if (exponent() != std::numeric_limits::lowest()) - { - return Unexpected( - HostFunctionError:: - FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_LINE - } - return FLOAT_NULL; + return floatNull; } - else if (absM > wasm_float::maxMantissa) + else if (absM > maxEncodedMantissa) { return Unexpected( HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_LINE } - else if (exponent() > wasm_float::maxExponent) - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); - else if (exponent() < wasm_float::minExponent) - return FLOAT_NULL; - - int const e = exponent() - wasm_float::minExponent + 1; //+97 v |= absM; - v |= ((uint64_t)e) << 54; + + if (e > wasmMaxExponent) + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + else if (e < wasmMinExponent) + return floatNull; + uint64_t const normExp = e - wasmMinExponent + 1; //+97 + v |= normExp << encodedMantissaBits; Serializer msg; msg.add64(v); @@ -147,7 +161,7 @@ public: } }; -Bytes const Number2::FLOAT_NULL = +Bytes const Number2::floatNull = {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; struct FloatState @@ -187,6 +201,8 @@ struct FloatState std::string floatToString(Slice const& data) { + // set default mode as we don't expect it will be used here + detail::FloatState rm(Number::rounding_mode::to_nearest); detail::Number2 const num(data); if (!num) { @@ -251,6 +267,8 @@ floatSetImpl(int64_t mantissa, int32_t exponent, int32_t mode) if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); detail::Number2 num(mantissa, exponent); + if (!num) + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); return num.toBytes(); } catch (...) @@ -264,6 +282,8 @@ floatCompareImpl(Slice const& x, Slice const& y) { try { + // set default mode as we don't expect it will be used here + detail::FloatState rm(Number::rounding_mode::to_nearest); detail::Number2 xx(x); if (!xx) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); @@ -416,7 +436,7 @@ floatPowerImpl(Slice const& x, int32_t n, int32_t mode) { try { - if ((n < 0) || (n > wasm_float::maxExponent)) + if ((n < 0) || (n > wasmMaxExponent)) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); detail::FloatState rm(mode); From 803a344c65361607c18badede43b36eac9c4f43f Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 28 Jan 2026 16:35:02 -0500 Subject: [PATCH 075/137] fix clang-format --- src/test/app/HostFuncImpl_test.cpp | 1132 +++++------------ src/test/app/TestHostFunctions.h | 106 +- src/test/app/Wasm_test.cpp | 321 ++--- src/test/app/wasm_fixtures/b58.c | 3 +- src/test/app/wasm_fixtures/fixtures.cpp | 9 +- src/test/app/wasm_fixtures/sha512Pure.c | 48 +- src/test/basics/Number_test.cpp | 22 +- src/xrpld/app/wasm/HostFunc.h | 24 +- src/xrpld/app/wasm/HostFuncImpl.h | 38 +- src/xrpld/app/wasm/HostFuncWrapper.h | 467 ++----- src/xrpld/app/wasm/ParamsHelper.h | 46 +- src/xrpld/app/wasm/WasmiVM.h | 86 +- src/xrpld/app/wasm/detail/HostFuncImpl.cpp | 5 +- .../app/wasm/detail/HostFuncImplFloat.cpp | 50 +- .../app/wasm/detail/HostFuncImplGetter.cpp | 18 +- .../app/wasm/detail/HostFuncImplKeylet.cpp | 46 +- .../app/wasm/detail/HostFuncImplTrace.cpp | 25 +- src/xrpld/app/wasm/detail/HostFuncWrapper.cpp | 592 ++------- src/xrpld/app/wasm/detail/WasmVM.cpp | 20 +- src/xrpld/app/wasm/detail/WasmiVM.cpp | 192 +-- 20 files changed, 831 insertions(+), 2419 deletions(-) diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 5c9aa54dc8..811166c013 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -71,16 +71,12 @@ createApplyContext( beast::Journal j, STTx const& tx = STTx(ttESCROW_FINISH, [](STObject&) {})) { - ApplyContext ac{ - env.app(), ov, tx, tesSUCCESS, env.current()->fees().base, tapNONE, j}; + ApplyContext ac{env.app(), ov, tx, tesSUCCESS, env.current()->fees().base, tapNONE, j}; return ac; } static ApplyContext -createApplyContext( - test::jtx::Env& env, - OpenView& ov, - STTx const& tx = STTx(ttESCROW_FINISH, [](STObject&) {})) +createApplyContext(test::jtx::Env& env, OpenView& ov, STTx const& tx = STTx(ttESCROW_FINISH, [](STObject&) {})) { return createApplyContext(env, ov, env.journal, tx); } @@ -96,8 +92,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env{*this}; OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto const result = hfs.getLedgerSqn(); @@ -112,8 +107,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this}; - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); { OpenView ov{*env.current()}; @@ -121,24 +115,16 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto const result = hfs.getParentLedgerTime(); if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT( - result.value() == - env.current() - ->parentCloseTime() - .time_since_epoch() - .count()); + BEAST_EXPECT(result.value() == env.current()->parentCloseTime().time_since_epoch().count()); } - env.close( - env.now() + - std::chrono::seconds(std::numeric_limits::max() - 1)); + env.close(env.now() + std::chrono::seconds(std::numeric_limits::max() - 1)); { OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto const result = hfs.getParentLedgerTime(); - if (BEAST_EXPECTS( - !result.has_value(), std::to_string(result.value()))) + if (BEAST_EXPECTS(!result.has_value(), std::to_string(result.value()))) BEAST_EXPECT(result.error() == HostFunctionError::INTERNAL); } } @@ -152,8 +138,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env{*this}; OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); @@ -171,8 +156,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env{*this}; OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); @@ -184,10 +168,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env2( *this, envconfig([](std::unique_ptr cfg) { - cfg->FEES.reference_fee = - static_cast( - std::numeric_limits::max()) + - 1; + cfg->FEES.reference_fee = static_cast(std::numeric_limits::max()) + 1; return cfg; }), testable_amendments()); @@ -215,8 +196,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env{*this}; OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); // Use featureTokenEscrow for testing @@ -268,15 +248,9 @@ struct HostFuncImpl_test : public beast::unit_test::suite { WasmHostFunctionsImpl hfs(ac, dummyEscrow); - BEAST_EXPECT( - hfs.cacheLedgerObj(accountKeylet.key, -1).error() == - HostFunctionError::SLOT_OUT_RANGE); - BEAST_EXPECT( - hfs.cacheLedgerObj(accountKeylet.key, 257).error() == - HostFunctionError::SLOT_OUT_RANGE); - BEAST_EXPECT( - hfs.cacheLedgerObj(dummyEscrow.key, 0).error() == - HostFunctionError::LEDGER_OBJ_NOT_FOUND); + BEAST_EXPECT(hfs.cacheLedgerObj(accountKeylet.key, -1).error() == HostFunctionError::SLOT_OUT_RANGE); + BEAST_EXPECT(hfs.cacheLedgerObj(accountKeylet.key, 257).error() == HostFunctionError::SLOT_OUT_RANGE); + BEAST_EXPECT(hfs.cacheLedgerObj(dummyEscrow.key, 0).error() == HostFunctionError::LEDGER_OBJ_NOT_FOUND); BEAST_EXPECT(hfs.cacheLedgerObj(accountKeylet.key, 0).value() == 1); for (int i = 1; i <= 256; ++i) @@ -284,9 +258,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const result = hfs.cacheLedgerObj(accountKeylet.key, i); BEAST_EXPECT(result.has_value() && result.value() == i); } - BEAST_EXPECT( - hfs.cacheLedgerObj(accountKeylet.key, 0).error() == - HostFunctionError::SLOTS_FULL); + BEAST_EXPECT(hfs.cacheLedgerObj(accountKeylet.key, 0).error() == HostFunctionError::SLOTS_FULL); } { @@ -297,9 +269,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const result = hfs.cacheLedgerObj(accountKeylet.key, 0); BEAST_EXPECT(result.has_value() && result.value() == i); } - BEAST_EXPECT( - hfs.cacheLedgerObj(accountKeylet.key, 0).error() == - HostFunctionError::SLOTS_FULL); + BEAST_EXPECT(hfs.cacheLedgerObj(accountKeylet.key, 0).error() == HostFunctionError::SLOTS_FULL); } } @@ -309,8 +279,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite testcase("getTxField"); using namespace test::jtx; - std::string const credIdHex = - "0011223344556677889900112233445566778899001122334455667788990011"; + std::string const credIdHex = "0011223344556677889900112233445566778899001122334455667788990011"; uint256 credId; BEAST_EXPECT(credId.parseHex(credIdHex)); @@ -326,14 +295,12 @@ struct HostFuncImpl_test : public beast::unit_test::suite obj.setFieldV256(sfCredentialIDs, credIds); }); ApplyContext ac = createApplyContext(env, ov, stx); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); { WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto const account = hfs.getTxField(sfAccount); - BEAST_EXPECT( - account && std::ranges::equal(*account, env.master.id())); + BEAST_EXPECT(account && std::ranges::equal(*account, env.master.id())); auto const owner = hfs.getTxField(sfOwner); BEAST_EXPECT(owner && std::ranges::equal(*owner, env.master.id())); @@ -346,13 +313,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const notPresent = hfs.getTxField(sfDestination); if (BEAST_EXPECT(!notPresent.has_value())) - BEAST_EXPECT( - notPresent.error() == HostFunctionError::FIELD_NOT_FOUND); + BEAST_EXPECT(notPresent.error() == HostFunctionError::FIELD_NOT_FOUND); auto const memos = hfs.getTxField(sfMemos); if (BEAST_EXPECT(!memos.has_value())) - BEAST_EXPECT( - memos.error() == HostFunctionError::NOT_LEAF_FIELD); + BEAST_EXPECT(memos.error() == HostFunctionError::NOT_LEAF_FIELD); auto const credentialIds = hfs.getTxField(sfCredentialIDs); if (BEAST_EXPECT(!credentialIds.has_value())) @@ -362,13 +327,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const nonField = hfs.getTxField(sfInvalid); if (BEAST_EXPECT(!nonField.has_value())) - BEAST_EXPECT( - nonField.error() == HostFunctionError::FIELD_NOT_FOUND); + BEAST_EXPECT(nonField.error() == HostFunctionError::FIELD_NOT_FOUND); auto const nonField2 = hfs.getTxField(sfGeneric); if (BEAST_EXPECT(!nonField2.has_value())) - BEAST_EXPECT( - nonField2.error() == HostFunctionError::FIELD_NOT_FOUND); + BEAST_EXPECT(nonField2.error() == HostFunctionError::FIELD_NOT_FOUND); } { @@ -376,8 +339,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite STTx const stx2 = STTx(ttAMM_DEPOSIT, [&](auto& obj) { obj.setAccountID(sfAccount, env.master.id()); obj.setFieldIssue(sfAsset, STIssue{sfAsset, xrpIssue()}); - obj.setFieldIssue( - sfAsset2, STIssue{sfAsset2, iouAsset.issue()}); + obj.setFieldIssue(sfAsset2, STIssue{sfAsset2, iouAsset.issue()}); }); ApplyContext ac2 = createApplyContext(env, ov, stx2); WasmHostFunctionsImpl hfs(ac2, dummyEscrow); @@ -426,8 +388,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const actualScale = hfs.getTxField(sfAssetScale); if (BEAST_EXPECT(actualScale.has_value())) { - BEAST_EXPECT( - std::ranges::equal(*actualScale, toBytes(expectedScale))); + BEAST_EXPECT(std::ranges::equal(*actualScale, toBytes(expectedScale))); } } } @@ -442,25 +403,21 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env{*this}; // Fund the account and create an escrow so the ledger object exists - env(escrow::create(env.master, env.master, XRP(100)), - escrow::finish_time(env.now() + 1s)); + env(escrow::create(env.master, env.master, XRP(100)), escrow::finish_time(env.now() + 1s)); env.close(); OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); // Find the escrow ledger object - auto const escrowKeylet = - keylet::escrow(env.master, env.seq(env.master) - 1); + auto const escrowKeylet = keylet::escrow(env.master, env.seq(env.master) - 1); BEAST_EXPECT(env.le(escrowKeylet)); WasmHostFunctionsImpl hfs(ac, escrowKeylet); // Should return the Account field from the escrow ledger object auto const account = hfs.getCurrentLedgerObjField(sfAccount); - if (BEAST_EXPECTS( - account.has_value(), - std::to_string(static_cast(account.error())))) + if (BEAST_EXPECTS(account.has_value(), std::to_string(static_cast(account.error())))) BEAST_EXPECT(std::ranges::equal(*account, env.master.id())); // Should return the Amount field from the escrow ledger object @@ -471,29 +428,23 @@ struct HostFuncImpl_test : public beast::unit_test::suite } // Should return the PreviousTxnID field from the escrow ledger object - auto const previousTxnId = - hfs.getCurrentLedgerObjField(sfPreviousTxnID); + auto const previousTxnId = hfs.getCurrentLedgerObjField(sfPreviousTxnID); if (BEAST_EXPECT(previousTxnId.has_value())) { - BEAST_EXPECT( - *previousTxnId == toBytes(env.tx()->getTransactionID())); + BEAST_EXPECT(*previousTxnId == toBytes(env.tx()->getTransactionID())); } // Should return nullopt for a field not present auto const notPresent = hfs.getCurrentLedgerObjField(sfOwner); - BEAST_EXPECT( - !notPresent.has_value() && - notPresent.error() == HostFunctionError::FIELD_NOT_FOUND); + BEAST_EXPECT(!notPresent.has_value() && notPresent.error() == HostFunctionError::FIELD_NOT_FOUND); { - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master) + 5); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master) + 5); WasmHostFunctionsImpl hfs2(ac, dummyEscrow); auto const account = hfs2.getCurrentLedgerObjField(sfAccount); if (BEAST_EXPECT(!account.has_value())) { - BEAST_EXPECT( - account.error() == HostFunctionError::LEDGER_OBJ_NOT_FOUND); + BEAST_EXPECT(account.error() == HostFunctionError::LEDGER_OBJ_NOT_FOUND); } } } @@ -507,16 +458,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env{*this}; // Fund the account and create an escrow so the ledger object exists - env(escrow::create(env.master, env.master, XRP(100)), - escrow::finish_time(env.now() + 1s)); + env(escrow::create(env.master, env.master, XRP(100)), escrow::finish_time(env.now() + 1s)); env.close(); OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const accountKeylet = keylet::account(env.master.id()); - auto const escrowKeylet = - keylet::escrow(env.master.id(), env.seq(env.master) - 1); + auto const escrowKeylet = keylet::escrow(env.master.id(), env.seq(env.master) - 1); WasmHostFunctionsImpl hfs(ac, escrowKeylet); // Cache the escrow ledger object in slot 1 @@ -525,9 +474,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Should return the Account field from the cached ledger object auto const account = hfs.getLedgerObjField(1, sfAccount); - if (BEAST_EXPECTS( - account.has_value(), - std::to_string(static_cast(account.error())))) + if (BEAST_EXPECTS(account.has_value(), std::to_string(static_cast(account.error())))) BEAST_EXPECT(std::ranges::equal(*account, env.master.id())); // Should return the Balance field from the cached ledger object @@ -539,26 +486,18 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Should return error for slot out of range auto const outOfRange = hfs.getLedgerObjField(0, sfAccount); - BEAST_EXPECT( - !outOfRange.has_value() && - outOfRange.error() == HostFunctionError::SLOT_OUT_RANGE); + BEAST_EXPECT(!outOfRange.has_value() && outOfRange.error() == HostFunctionError::SLOT_OUT_RANGE); auto const tooHigh = hfs.getLedgerObjField(257, sfAccount); - BEAST_EXPECT( - !tooHigh.has_value() && - tooHigh.error() == HostFunctionError::SLOT_OUT_RANGE); + BEAST_EXPECT(!tooHigh.has_value() && tooHigh.error() == HostFunctionError::SLOT_OUT_RANGE); // Should return error for empty slot auto const emptySlot = hfs.getLedgerObjField(2, sfAccount); - BEAST_EXPECT( - !emptySlot.has_value() && - emptySlot.error() == HostFunctionError::EMPTY_SLOT); + BEAST_EXPECT(!emptySlot.has_value() && emptySlot.error() == HostFunctionError::EMPTY_SLOT); // Should return error for field not present auto const notPresent = hfs.getLedgerObjField(1, sfOwner); - BEAST_EXPECT( - !notPresent.has_value() && - notPresent.error() == HostFunctionError::FIELD_NOT_FOUND); + BEAST_EXPECT(!notPresent.has_value() && notPresent.error() == HostFunctionError::FIELD_NOT_FOUND); } void @@ -570,8 +509,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env{*this}; OpenView ov{*env.current()}; - std::string const credIdHex = - "0011223344556677889900112233445566778899001122334455667788990011"; + std::string const credIdHex = "0011223344556677889900112233445566778899001122334455667788990011"; uint256 credId; BEAST_EXPECT(credId.parseHex(credIdHex)); @@ -589,8 +527,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite }); ApplyContext ac = createApplyContext(env, ov, stx); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); @@ -598,19 +535,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Locator for sfMemos[0].sfMemo.sfMemoData // Locator is a sequence of int32_t codes: // [sfMemos.fieldCode, 0, sfMemoData.fieldCode] - std::vector locatorVec = { - sfMemos.fieldCode, 0, sfMemoData.fieldCode}; - Slice locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); + std::vector locatorVec = {sfMemos.fieldCode, 0, sfMemoData.fieldCode}; + Slice locator(reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getTxNestedField(locator); - if (BEAST_EXPECTS( - result.has_value(), - std::to_string(static_cast(result.error())))) + if (BEAST_EXPECTS(result.has_value(), std::to_string(static_cast(result.error())))) { - std::string memoData( - result.value().begin(), result.value().end()); + std::string memoData(result.value().begin(), result.value().end()); BEAST_EXPECT(memoData == "hello"); } } @@ -618,17 +549,12 @@ struct HostFuncImpl_test : public beast::unit_test::suite { // Locator for sfCredentialIDs[0] std::vector locatorVec = {sfCredentialIDs.fieldCode, 0}; - Slice locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); + Slice locator(reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getTxNestedField(locator); - if (BEAST_EXPECTS( - result.has_value(), - std::to_string(static_cast(result.error())))) + if (BEAST_EXPECTS(result.has_value(), std::to_string(static_cast(result.error())))) { - std::string credIdResult( - result.value().begin(), result.value().end()); + std::string credIdResult(result.value().begin(), result.value().end()); BEAST_EXPECT(strHex(credIdResult) == credIdHex); } } @@ -636,14 +562,10 @@ struct HostFuncImpl_test : public beast::unit_test::suite { // can use the nested locator for base fields too std::vector locatorVec = {sfAccount.fieldCode}; - Slice locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); + Slice locator(reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); auto const account = hfs.getTxNestedField(locator); - if (BEAST_EXPECTS( - account.has_value(), - std::to_string(static_cast(account.error())))) + if (BEAST_EXPECTS(account.has_value(), std::to_string(static_cast(account.error())))) { BEAST_EXPECT(std::ranges::equal(*account, env.master.id())); } @@ -652,31 +574,21 @@ struct HostFuncImpl_test : public beast::unit_test::suite { // unaligned locator std::vector locatorVec(sizeof(int32_t) + 1); - memcpy( - locatorVec.data() + 1, &sfAccount.fieldCode, sizeof(int32_t)); - Slice locator( - reinterpret_cast(locatorVec.data() + 1), - sizeof(int32_t)); + memcpy(locatorVec.data() + 1, &sfAccount.fieldCode, sizeof(int32_t)); + Slice locator(reinterpret_cast(locatorVec.data() + 1), sizeof(int32_t)); auto const account = hfs.getTxNestedField(locator); - if (BEAST_EXPECTS( - account.has_value(), - std::to_string(static_cast(account.error())))) + if (BEAST_EXPECTS(account.has_value(), std::to_string(static_cast(account.error())))) { BEAST_EXPECT(std::ranges::equal(*account, env.master.id())); } } - auto expectError = [&](std::vector const& locatorVec, - HostFunctionError expectedError) { - Slice locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); + auto expectError = [&](std::vector const& locatorVec, HostFunctionError expectedError) { + Slice locator(reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getTxNestedField(locator); if (BEAST_EXPECT(!result.has_value())) - BEAST_EXPECTS( - result.error() == expectedError, - std::to_string(static_cast(result.error()))); + BEAST_EXPECTS(result.error() == expectedError, std::to_string(static_cast(result.error()))); }; // Locator for non-existent base field expectError( @@ -699,9 +611,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Locator for non-existent nested field expectError( - {sfMemos.fieldCode, - 0, - sfURI.fieldCode}, // sfURI does not exist in the memo + {sfMemos.fieldCode, 0, sfURI.fieldCode}, // sfURI does not exist in the memo HostFunctionError::FIELD_NOT_FOUND); // Locator for non-existent base sfield @@ -722,8 +632,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite expectError({sfMemos.fieldCode}, HostFunctionError::NOT_LEAF_FIELD); // Locator for STVector256 - expectError( - {sfCredentialIDs.fieldCode}, HostFunctionError::NOT_LEAF_FIELD); + expectError({sfCredentialIDs.fieldCode}, HostFunctionError::NOT_LEAF_FIELD); // Locator for nesting into non-array/object field expectError( @@ -738,13 +647,10 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Locator for malformed locator (not multiple of 4) { std::vector locatorVec = {sfMemos.fieldCode}; - Slice malformedLocator( - reinterpret_cast(locatorVec.data()), 3); + Slice malformedLocator(reinterpret_cast(locatorVec.data()), 3); auto const malformedResult = hfs.getTxNestedField(malformedLocator); BEAST_EXPECT( - !malformedResult.has_value() && - malformedResult.error() == - HostFunctionError::LOCATOR_MALFORMED); + !malformedResult.has_value() && malformedResult.error() == HostFunctionError::LOCATOR_MALFORMED); } } @@ -772,27 +678,18 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Locator for base field std::vector baseLocator = {sfSignerQuorum.fieldCode}; Slice baseLocatorSlice( - reinterpret_cast(baseLocator.data()), - baseLocator.size() * sizeof(int32_t)); - auto const signerQuorum = - hfs.getCurrentLedgerObjNestedField(baseLocatorSlice); - if (BEAST_EXPECTS( - signerQuorum.has_value(), - std::to_string(static_cast(signerQuorum.error())))) + reinterpret_cast(baseLocator.data()), baseLocator.size() * sizeof(int32_t)); + auto const signerQuorum = hfs.getCurrentLedgerObjNestedField(baseLocatorSlice); + if (BEAST_EXPECTS(signerQuorum.has_value(), std::to_string(static_cast(signerQuorum.error())))) { BEAST_EXPECT(*signerQuorum == toBytes(static_cast(2))); } - auto expectError = [&](std::vector const& locatorVec, - HostFunctionError expectedError) { - Slice locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); + auto expectError = [&](std::vector const& locatorVec, HostFunctionError expectedError) { + Slice locator(reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getCurrentLedgerObjNestedField(locator); if (BEAST_EXPECT(!result.has_value())) - BEAST_EXPECTS( - result.error() == expectedError, - std::to_string(static_cast(result.error()))); + BEAST_EXPECTS(result.error() == expectedError, std::to_string(static_cast(result.error()))); }; // Locator for non-existent base field expectError( @@ -802,40 +699,28 @@ struct HostFuncImpl_test : public beast::unit_test::suite HostFunctionError::FIELD_NOT_FOUND); // Locator for nesting into non-array/object field expectError( - {sfSignerQuorum - .fieldCode, // sfSignerQuorum is not an array or object + {sfSignerQuorum.fieldCode, // sfSignerQuorum is not an array or object 0, sfAccount.fieldCode}, HostFunctionError::LOCATOR_MALFORMED); // Locator for empty locator Slice emptyLocator(nullptr, 0); - auto const emptyResult = - hfs.getCurrentLedgerObjNestedField(emptyLocator); - BEAST_EXPECT( - !emptyResult.has_value() && - emptyResult.error() == HostFunctionError::LOCATOR_MALFORMED); + auto const emptyResult = hfs.getCurrentLedgerObjNestedField(emptyLocator); + BEAST_EXPECT(!emptyResult.has_value() && emptyResult.error() == HostFunctionError::LOCATOR_MALFORMED); // Locator for malformed locator (not multiple of 4) std::vector malformedLocatorVec = {sfMemos.fieldCode}; - Slice malformedLocator( - reinterpret_cast(malformedLocatorVec.data()), 3); - auto const malformedResult = - hfs.getCurrentLedgerObjNestedField(malformedLocator); - BEAST_EXPECT( - !malformedResult.has_value() && - malformedResult.error() == HostFunctionError::LOCATOR_MALFORMED); + Slice malformedLocator(reinterpret_cast(malformedLocatorVec.data()), 3); + auto const malformedResult = hfs.getCurrentLedgerObjNestedField(malformedLocator); + BEAST_EXPECT(!malformedResult.has_value() && malformedResult.error() == HostFunctionError::LOCATOR_MALFORMED); { - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master) + 5); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master) + 5); WasmHostFunctionsImpl dummyHfs(ac, dummyEscrow); std::vector const locatorVec = {sfAccount.fieldCode}; - Slice locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); - auto const result = - dummyHfs.getCurrentLedgerObjNestedField(locator); + Slice locator(reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); + auto const result = dummyHfs.getCurrentLedgerObjNestedField(locator); if (BEAST_EXPECT(!result.has_value())) BEAST_EXPECTS( result.error() == HostFunctionError::LEDGER_OBJ_NOT_FOUND, @@ -859,8 +744,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); // Cache the SignerList ledger object in slot 1 @@ -870,16 +754,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Locator for sfSignerEntries[0].sfAccount { - std::vector const locatorVec = { - sfSignerEntries.fieldCode, 0, sfAccount.fieldCode}; - Slice locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); + std::vector const locatorVec = {sfSignerEntries.fieldCode, 0, sfAccount.fieldCode}; + Slice locator(reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getLedgerObjNestedField(1, locator); - if (BEAST_EXPECTS( - result.has_value(), - std::to_string(static_cast(result.error())))) + if (BEAST_EXPECTS(result.has_value(), std::to_string(static_cast(result.error())))) { BEAST_EXPECT(std::ranges::equal(*result, alice.id())); } @@ -887,15 +766,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Locator for sfSignerEntries[1].sfAccount { - std::vector const locatorVec = { - sfSignerEntries.fieldCode, 1, sfAccount.fieldCode}; - Slice const locator = Slice( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); + std::vector const locatorVec = {sfSignerEntries.fieldCode, 1, sfAccount.fieldCode}; + Slice const locator = + Slice(reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); auto const result2 = hfs.getLedgerObjNestedField(1, locator); - if (BEAST_EXPECTS( - result2.has_value(), - std::to_string(static_cast(result2.error())))) + if (BEAST_EXPECTS(result2.has_value(), std::to_string(static_cast(result2.error())))) { BEAST_EXPECT(std::ranges::equal(*result2, becky.id())); } @@ -903,15 +778,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Locator for sfSignerEntries[0].sfSignerWeight { - std::vector const locatorVec = { - sfSignerEntries.fieldCode, 0, sfSignerWeight.fieldCode}; - Slice const locator = Slice( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); + std::vector const locatorVec = {sfSignerEntries.fieldCode, 0, sfSignerWeight.fieldCode}; + Slice const locator = + Slice(reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); auto const weightResult = hfs.getLedgerObjNestedField(1, locator); - if (BEAST_EXPECTS( - weightResult.has_value(), - std::to_string(static_cast(weightResult.error())))) + if (BEAST_EXPECTS(weightResult.has_value(), std::to_string(static_cast(weightResult.error())))) { // Should be 1 auto const expected = toBytes(static_cast(1)); @@ -922,13 +793,10 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Locator for base field sfSignerQuorum { std::vector const locatorVec = {sfSignerQuorum.fieldCode}; - Slice const locator = Slice( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); + Slice const locator = + Slice(reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); auto const quorumResult = hfs.getLedgerObjNestedField(1, locator); - if (BEAST_EXPECTS( - quorumResult.has_value(), - std::to_string(static_cast(quorumResult.error())))) + if (BEAST_EXPECTS(quorumResult.has_value(), std::to_string(static_cast(quorumResult.error())))) { auto const expected = toBytes(static_cast(2)); BEAST_EXPECT(*quorumResult == expected); @@ -936,17 +804,12 @@ struct HostFuncImpl_test : public beast::unit_test::suite } // Helper for error checks - auto expectError = [&](std::vector const& locatorVec, - HostFunctionError expectedError, - int slot = 1) { + auto expectError = [&](std::vector const& locatorVec, HostFunctionError expectedError, int slot = 1) { Slice const locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); + reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getLedgerObjNestedField(slot, locator); if (BEAST_EXPECT(!result.has_value())) - BEAST_EXPECTS( - result.error() == expectedError, - std::to_string(static_cast(result.error()))); + BEAST_EXPECTS(result.error() == expectedError, std::to_string(static_cast(result.error()))); }; // Error: base field not found @@ -973,45 +836,32 @@ struct HostFuncImpl_test : public beast::unit_test::suite HostFunctionError::FIELD_NOT_FOUND); // Error: invalid field code - expectError( - {field_code(99999, 99999), 0, sfAccount.fieldCode}, - HostFunctionError::INVALID_FIELD); + expectError({field_code(99999, 99999), 0, sfAccount.fieldCode}, HostFunctionError::INVALID_FIELD); // Error: invalid nested field code - expectError( - {sfSignerEntries.fieldCode, 0, field_code(99999, 99999)}, - HostFunctionError::INVALID_FIELD); + expectError({sfSignerEntries.fieldCode, 0, field_code(99999, 99999)}, HostFunctionError::INVALID_FIELD); // Error: slot out of range - expectError( - {sfSignerQuorum.fieldCode}, HostFunctionError::SLOT_OUT_RANGE, 0); - expectError( - {sfSignerQuorum.fieldCode}, HostFunctionError::SLOT_OUT_RANGE, 257); + expectError({sfSignerQuorum.fieldCode}, HostFunctionError::SLOT_OUT_RANGE, 0); + expectError({sfSignerQuorum.fieldCode}, HostFunctionError::SLOT_OUT_RANGE, 257); // Error: empty slot - expectError( - {sfSignerQuorum.fieldCode}, HostFunctionError::EMPTY_SLOT, 2); + expectError({sfSignerQuorum.fieldCode}, HostFunctionError::EMPTY_SLOT, 2); // Error: locator for STArray (not leaf field) - expectError( - {sfSignerEntries.fieldCode}, HostFunctionError::NOT_LEAF_FIELD); + expectError({sfSignerEntries.fieldCode}, HostFunctionError::NOT_LEAF_FIELD); // Error: nesting into non-array/object field - expectError( - {sfSignerQuorum.fieldCode, 0, sfAccount.fieldCode}, - HostFunctionError::LOCATOR_MALFORMED); + expectError({sfSignerQuorum.fieldCode, 0, sfAccount.fieldCode}, HostFunctionError::LOCATOR_MALFORMED); // Error: empty locator expectError({}, HostFunctionError::LOCATOR_MALFORMED); // Error: locator malformed (not multiple of 4) std::vector const locatorVec = {sfSignerEntries.fieldCode}; - Slice const locator = - Slice(reinterpret_cast(locatorVec.data()), 3); + Slice const locator = Slice(reinterpret_cast(locatorVec.data()), 3); auto const malformed = hfs.getLedgerObjNestedField(1, locator); - BEAST_EXPECT( - !malformed.has_value() && - malformed.error() == HostFunctionError::LOCATOR_MALFORMED); + BEAST_EXPECT(!malformed.has_value() && malformed.error() == HostFunctionError::LOCATOR_MALFORMED); } void @@ -1020,8 +870,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite testcase("getTxArrayLen"); using namespace test::jtx; - std::string const credIdHex = - "0011223344556677889900112233445566778899001122334455667788990011"; + std::string const credIdHex = "0011223344556677889900112233445566778899001122334455667788990011"; uint256 credId; BEAST_EXPECT(credId.parseHex(credIdHex)); @@ -1049,8 +898,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite }); ApplyContext ac = createApplyContext(env, ov, stx); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); // Should return 1 for sfMemos @@ -1066,8 +914,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Should return error for missing array field auto const missingArray = hfs.getTxArrayLen(sfSigners); if (BEAST_EXPECT(!missingArray.has_value())) - BEAST_EXPECT( - missingArray.error() == HostFunctionError::FIELD_NOT_FOUND); + BEAST_EXPECT(missingArray.error() == HostFunctionError::FIELD_NOT_FOUND); // Should return 1 for sfCredentialIDs auto const credIdsLen = hfs.getTxArrayLen(sfCredentialIDs); @@ -1094,8 +941,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const signerKeylet = keylet::signers(env.master.id()); WasmHostFunctionsImpl hfs(ac, signerKeylet); - auto const entriesLen = - hfs.getCurrentLedgerObjArrayLen(sfSignerEntries); + auto const entriesLen = hfs.getCurrentLedgerObjArrayLen(sfSignerEntries); if (BEAST_EXPECT(entriesLen.has_value())) BEAST_EXPECT(entriesLen.value() == 2); @@ -1109,13 +955,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(notArray.error() == HostFunctionError::NO_ARRAY); { - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master) + 5); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master) + 5); WasmHostFunctionsImpl dummyHfs(ac, dummyEscrow); auto const len = dummyHfs.getCurrentLedgerObjArrayLen(sfMemos); if (BEAST_EXPECT(!len.has_value())) - BEAST_EXPECT( - len.error() == HostFunctionError::LEDGER_OBJ_NOT_FOUND); + BEAST_EXPECT(len.error() == HostFunctionError::LEDGER_OBJ_NOT_FOUND); } } @@ -1135,8 +979,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto const signerListKeylet = keylet::signers(env.master.id()); @@ -1152,8 +995,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const arrLen = hfs.getLedgerObjArrayLen(0, sfSignerEntries); if (BEAST_EXPECT(!arrLen.has_value())) - BEAST_EXPECT( - arrLen.error() == HostFunctionError::SLOT_OUT_RANGE); + BEAST_EXPECT(arrLen.error() == HostFunctionError::SLOT_OUT_RANGE); } { @@ -1167,16 +1009,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Should return error for empty slot auto const emptySlot = hfs.getLedgerObjArrayLen(2, sfSignerEntries); if (BEAST_EXPECT(!emptySlot.has_value())) - BEAST_EXPECT( - emptySlot.error() == HostFunctionError::EMPTY_SLOT); + BEAST_EXPECT(emptySlot.error() == HostFunctionError::EMPTY_SLOT); } { // Should return error for missing array field auto const missingArray = hfs.getLedgerObjArrayLen(1, sfMemos); if (BEAST_EXPECT(!missingArray.has_value())) - BEAST_EXPECT( - missingArray.error() == HostFunctionError::FIELD_NOT_FOUND); + BEAST_EXPECT(missingArray.error() == HostFunctionError::FIELD_NOT_FOUND); } } @@ -1198,30 +1038,22 @@ struct HostFuncImpl_test : public beast::unit_test::suite }); ApplyContext ac = createApplyContext(env, ov, stx); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); // Helper for error checks - auto expectError = [&](std::vector const& locatorVec, - HostFunctionError expectedError, - int slot = 1) { + auto expectError = [&](std::vector const& locatorVec, HostFunctionError expectedError, int slot = 1) { Slice const locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); + reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getTxNestedArrayLen(locator); if (BEAST_EXPECT(!result.has_value())) - BEAST_EXPECTS( - result.error() == expectedError, - std::to_string(static_cast(result.error()))); + BEAST_EXPECTS(result.error() == expectedError, std::to_string(static_cast(result.error()))); }; // Locator for sfMemos { std::vector locatorVec = {sfMemos.fieldCode}; - Slice locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); + Slice locator(reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); auto const arrLen = hfs.getTxNestedArrayLen(locator); BEAST_EXPECT(arrLen.has_value() && arrLen.value() == 1); } @@ -1253,25 +1085,18 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmHostFunctionsImpl hfs(ac, signerKeylet); // Helper for error checks - auto expectError = [&](std::vector const& locatorVec, - HostFunctionError expectedError, - int slot = 1) { + auto expectError = [&](std::vector const& locatorVec, HostFunctionError expectedError, int slot = 1) { Slice const locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); + reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getCurrentLedgerObjNestedArrayLen(locator); if (BEAST_EXPECT(!result.has_value())) - BEAST_EXPECTS( - result.error() == expectedError, - std::to_string(static_cast(result.error()))); + BEAST_EXPECTS(result.error() == expectedError, std::to_string(static_cast(result.error()))); }; // Locator for sfSignerEntries { std::vector locatorVec = {sfSignerEntries.fieldCode}; - Slice locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); + Slice locator(reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); auto const arrLen = hfs.getCurrentLedgerObjNestedArrayLen(locator); BEAST_EXPECT(arrLen.has_value() && arrLen.value() == 2); } @@ -1283,15 +1108,12 @@ struct HostFuncImpl_test : public beast::unit_test::suite expectError({sfSigners.fieldCode}, HostFunctionError::FIELD_NOT_FOUND); { - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master) + 5); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master) + 5); WasmHostFunctionsImpl dummyHfs(ac, dummyEscrow); std::vector locatorVec = {sfAccount.fieldCode}; Slice const locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); - auto const result = - dummyHfs.getCurrentLedgerObjNestedArrayLen(locator); + reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); + auto const result = dummyHfs.getCurrentLedgerObjNestedArrayLen(locator); if (BEAST_EXPECT(!result.has_value())) BEAST_EXPECTS( result.error() == HostFunctionError::LEDGER_OBJ_NOT_FOUND, @@ -1314,8 +1136,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto const signerListKeylet = keylet::signers(env.master.id()); @@ -1324,25 +1145,18 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Locator for sfSignerEntries std::vector locatorVec = {sfSignerEntries.fieldCode}; - Slice locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); + Slice locator(reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); auto const arrLen = hfs.getLedgerObjNestedArrayLen(1, locator); if (BEAST_EXPECT(arrLen.has_value())) BEAST_EXPECT(arrLen.value() == 2); // Helper for error checks - auto expectError = [&](std::vector const& locatorVec, - HostFunctionError expectedError, - int slot = 1) { + auto expectError = [&](std::vector const& locatorVec, HostFunctionError expectedError, int slot = 1) { Slice const locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); + reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getLedgerObjNestedArrayLen(slot, locator); if (BEAST_EXPECT(!result.has_value())) - BEAST_EXPECTS( - result.error() == expectedError, - std::to_string(static_cast(result.error()))); + BEAST_EXPECTS(result.error() == expectedError, std::to_string(static_cast(result.error()))); }; // Error: non-array field @@ -1362,18 +1176,12 @@ struct HostFuncImpl_test : public beast::unit_test::suite expectError({}, HostFunctionError::LOCATOR_MALFORMED); // Error: locator malformed (not multiple of 4) - Slice malformedLocator( - reinterpret_cast(locator.data()), 3); - auto const malformed = - hfs.getLedgerObjNestedArrayLen(1, malformedLocator); - BEAST_EXPECT( - !malformed.has_value() && - malformed.error() == HostFunctionError::LOCATOR_MALFORMED); + Slice malformedLocator(reinterpret_cast(locator.data()), 3); + auto const malformed = hfs.getLedgerObjNestedArrayLen(1, malformedLocator); + BEAST_EXPECT(!malformed.has_value() && malformed.error() == HostFunctionError::LOCATOR_MALFORMED); // Error: locator for non-STArray field - expectError( - {sfSignerQuorum.fieldCode, 0, sfAccount.fieldCode}, - HostFunctionError::LOCATOR_MALFORMED); + expectError({sfSignerQuorum.fieldCode, 0, sfAccount.fieldCode}, HostFunctionError::LOCATOR_MALFORMED); } void @@ -1383,15 +1191,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this}; - env(escrow::create(env.master, env.master, XRP(100)), - escrow::finish_time(env.now() + std::chrono::seconds(1))); + env(escrow::create(env.master, env.master, XRP(100)), escrow::finish_time(env.now() + std::chrono::seconds(1))); env.close(); OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const escrowKeylet = - keylet::escrow(env.master, env.seq(env.master) - 1); + auto const escrowKeylet = keylet::escrow(env.master, env.seq(env.master) - 1); WasmHostFunctionsImpl hfs(ac, escrowKeylet); // Should succeed for small data @@ -1401,11 +1207,9 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Should fail for too large data std::vector bigData(maxWasmDataLength + 1, 0x42); - auto const tooBig = - hfs.updateData(Slice(bigData.data(), bigData.size())); + auto const tooBig = hfs.updateData(Slice(bigData.data(), bigData.size())); if (BEAST_EXPECT(!tooBig.has_value())) - BEAST_EXPECT( - tooBig.error() == HostFunctionError::DATA_FIELD_TOO_LARGE); + BEAST_EXPECT(tooBig.error() == HostFunctionError::DATA_FIELD_TOO_LARGE); } void @@ -1418,8 +1222,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); // Generate a keypair and sign a message @@ -1432,9 +1235,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Should succeed for valid signature { auto const result = hfs.checkSignature( - Slice(message.data(), message.size()), - Slice(sig.data(), sig.size()), - Slice(pk.data(), pk.size())); + Slice(message.data(), message.size()), Slice(sig.data(), sig.size()), Slice(pk.data(), pk.size())); BEAST_EXPECT(result.has_value()); BEAST_EXPECT(result.value() == 1); } @@ -1464,9 +1265,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Should fail for empty public key { auto const result = hfs.checkSignature( - Slice(message.data(), message.size()), - Slice(sig.data(), sig.size()), - Slice(nullptr, 0)); + Slice(message.data(), message.size()), Slice(sig.data(), sig.size()), Slice(nullptr, 0)); BEAST_EXPECT(!result.has_value()); BEAST_EXPECT(result.error() == HostFunctionError::INVALID_PARAMS); } @@ -1474,19 +1273,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Should fail for empty signature { auto const result = hfs.checkSignature( - Slice(message.data(), message.size()), - Slice(nullptr, 0), - Slice(pk.data(), pk.size())); + Slice(message.data(), message.size()), Slice(nullptr, 0), Slice(pk.data(), pk.size())); BEAST_EXPECT(result.has_value()); BEAST_EXPECT(result.value() == 0); } // Should fail for empty message { - auto const result = hfs.checkSignature( - Slice(nullptr, 0), - Slice(sig.data(), sig.size()), - Slice(pk.data(), pk.size())); + auto const result = + hfs.checkSignature(Slice(nullptr, 0), Slice(sig.data(), sig.size()), Slice(pk.data(), pk.size())); BEAST_EXPECT(result.has_value()); BEAST_EXPECT(result.value() == 0); } @@ -1502,13 +1297,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); std::string data = "hello world"; - auto const result = - hfs.computeSha512HalfHash(Slice(data.data(), data.size())); + auto const result = hfs.computeSha512HalfHash(Slice(data.data(), data.size())); BEAST_EXPECT(result.has_value()); // Should match direct call to sha512Half @@ -1526,12 +1319,10 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); - auto compareKeylet = [](std::vector const& bytes, - Keylet const& kl) { + auto compareKeylet = [](std::vector const& bytes, Keylet const& kl) { return std::ranges::equal(bytes, kl.key); }; // Lambda to compare a Bytes (std::vector) to a keylet @@ -1544,37 +1335,24 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(compareKeylet(actual.value(), expected)); \ } \ } -#define COMPARE_KEYLET_FAIL(hfsFunc, expected, ...) \ - { \ - auto actual = hfs.hfsFunc(__VA_ARGS__); \ - if (BEAST_EXPECT(!actual.has_value())) \ - { \ - BEAST_EXPECTS( \ - actual.error() == expected, \ - std::to_string(HfErrorToInt(actual.error()))); \ - } \ +#define COMPARE_KEYLET_FAIL(hfsFunc, expected, ...) \ + { \ + auto actual = hfs.hfsFunc(__VA_ARGS__); \ + if (BEAST_EXPECT(!actual.has_value())) \ + { \ + BEAST_EXPECTS(actual.error() == expected, std::to_string(HfErrorToInt(actual.error()))); \ + } \ } COMPARE_KEYLET(accountKeylet, keylet::account, env.master.id()); - COMPARE_KEYLET_FAIL( - accountKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount()); + COMPARE_KEYLET_FAIL(accountKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount()); - COMPARE_KEYLET( - ammKeylet, keylet::amm, xrpIssue(), env.master["USD"].issue()); - COMPARE_KEYLET_FAIL( - ammKeylet, - HostFunctionError::INVALID_PARAMS, - xrpIssue(), - xrpIssue()); - COMPARE_KEYLET_FAIL( - ammKeylet, - HostFunctionError::INVALID_PARAMS, - makeMptID(1, env.master.id()), - xrpIssue()); + COMPARE_KEYLET(ammKeylet, keylet::amm, xrpIssue(), env.master["USD"].issue()); + COMPARE_KEYLET_FAIL(ammKeylet, HostFunctionError::INVALID_PARAMS, xrpIssue(), xrpIssue()); + COMPARE_KEYLET_FAIL(ammKeylet, HostFunctionError::INVALID_PARAMS, makeMptID(1, env.master.id()), xrpIssue()); COMPARE_KEYLET(checkKeylet, keylet::check, env.master.id(), 1); - COMPARE_KEYLET_FAIL( - checkKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); + COMPARE_KEYLET_FAIL(checkKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); std::string const credType = "test"; COMPARE_KEYLET( @@ -1609,79 +1387,28 @@ struct HostFuncImpl_test : public beast::unit_test::suite Slice(credType.data(), credType.size())); COMPARE_KEYLET(didKeylet, keylet::did, env.master.id()); - COMPARE_KEYLET_FAIL( - didKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount()); + COMPARE_KEYLET_FAIL(didKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount()); - COMPARE_KEYLET( - delegateKeylet, keylet::delegate, env.master.id(), alice.id()); - COMPARE_KEYLET_FAIL( - delegateKeylet, - HostFunctionError::INVALID_PARAMS, - env.master.id(), - env.master.id()); - COMPARE_KEYLET_FAIL( - delegateKeylet, - HostFunctionError::INVALID_ACCOUNT, - env.master.id(), - xrpAccount()); - COMPARE_KEYLET_FAIL( - delegateKeylet, - HostFunctionError::INVALID_ACCOUNT, - xrpAccount(), - env.master.id()); + COMPARE_KEYLET(delegateKeylet, keylet::delegate, env.master.id(), alice.id()); + COMPARE_KEYLET_FAIL(delegateKeylet, HostFunctionError::INVALID_PARAMS, env.master.id(), env.master.id()); + COMPARE_KEYLET_FAIL(delegateKeylet, HostFunctionError::INVALID_ACCOUNT, env.master.id(), xrpAccount()); + COMPARE_KEYLET_FAIL(delegateKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), env.master.id()); - COMPARE_KEYLET( - depositPreauthKeylet, - keylet::depositPreauth, - env.master.id(), - alice.id()); - COMPARE_KEYLET_FAIL( - depositPreauthKeylet, - HostFunctionError::INVALID_PARAMS, - env.master.id(), - env.master.id()); - COMPARE_KEYLET_FAIL( - depositPreauthKeylet, - HostFunctionError::INVALID_ACCOUNT, - env.master.id(), - xrpAccount()); - COMPARE_KEYLET_FAIL( - depositPreauthKeylet, - HostFunctionError::INVALID_ACCOUNT, - xrpAccount(), - env.master.id()); + COMPARE_KEYLET(depositPreauthKeylet, keylet::depositPreauth, env.master.id(), alice.id()); + COMPARE_KEYLET_FAIL(depositPreauthKeylet, HostFunctionError::INVALID_PARAMS, env.master.id(), env.master.id()); + COMPARE_KEYLET_FAIL(depositPreauthKeylet, HostFunctionError::INVALID_ACCOUNT, env.master.id(), xrpAccount()); + COMPARE_KEYLET_FAIL(depositPreauthKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), env.master.id()); COMPARE_KEYLET(escrowKeylet, keylet::escrow, env.master.id(), 1); - COMPARE_KEYLET_FAIL( - escrowKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); + COMPARE_KEYLET_FAIL(escrowKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); Currency usd = to_currency("USD"); - COMPARE_KEYLET( - lineKeylet, keylet::line, env.master.id(), alice.id(), usd); + COMPARE_KEYLET(lineKeylet, keylet::line, env.master.id(), alice.id(), usd); + COMPARE_KEYLET_FAIL(lineKeylet, HostFunctionError::INVALID_PARAMS, env.master.id(), env.master.id(), usd); + COMPARE_KEYLET_FAIL(lineKeylet, HostFunctionError::INVALID_ACCOUNT, env.master.id(), xrpAccount(), usd); + COMPARE_KEYLET_FAIL(lineKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), env.master.id(), usd); COMPARE_KEYLET_FAIL( - lineKeylet, - HostFunctionError::INVALID_PARAMS, - env.master.id(), - env.master.id(), - usd); - COMPARE_KEYLET_FAIL( - lineKeylet, - HostFunctionError::INVALID_ACCOUNT, - env.master.id(), - xrpAccount(), - usd); - COMPARE_KEYLET_FAIL( - lineKeylet, - HostFunctionError::INVALID_ACCOUNT, - xrpAccount(), - env.master.id(), - usd); - COMPARE_KEYLET_FAIL( - lineKeylet, - HostFunctionError::INVALID_PARAMS, - env.master.id(), - alice.id(), - to_currency("")); + lineKeylet, HostFunctionError::INVALID_PARAMS, env.master.id(), alice.id(), to_currency("")); { auto actual = hfs.mptIssuanceKeylet(env.master.id(), 1); @@ -1694,81 +1421,39 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto actual = hfs.mptIssuanceKeylet(xrpAccount(), 1); if (BEAST_EXPECT(!actual.has_value())) - BEAST_EXPECT( - actual.error() == HostFunctionError::INVALID_ACCOUNT); + BEAST_EXPECT(actual.error() == HostFunctionError::INVALID_ACCOUNT); } auto const sampleMPTID = makeMptID(1, env.master.id()); COMPARE_KEYLET(mptokenKeylet, keylet::mptoken, sampleMPTID, alice.id()); - COMPARE_KEYLET_FAIL( - mptokenKeylet, - HostFunctionError::INVALID_PARAMS, - MPTID{}, - alice.id()); - COMPARE_KEYLET_FAIL( - mptokenKeylet, - HostFunctionError::INVALID_ACCOUNT, - sampleMPTID, - xrpAccount()); + COMPARE_KEYLET_FAIL(mptokenKeylet, HostFunctionError::INVALID_PARAMS, MPTID{}, alice.id()); + COMPARE_KEYLET_FAIL(mptokenKeylet, HostFunctionError::INVALID_ACCOUNT, sampleMPTID, xrpAccount()); COMPARE_KEYLET(nftOfferKeylet, keylet::nftoffer, env.master.id(), 1); - COMPARE_KEYLET_FAIL( - nftOfferKeylet, - HostFunctionError::INVALID_ACCOUNT, - xrpAccount(), - 1); + COMPARE_KEYLET_FAIL(nftOfferKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); COMPARE_KEYLET(offerKeylet, keylet::offer, env.master.id(), 1); - COMPARE_KEYLET_FAIL( - offerKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); + COMPARE_KEYLET_FAIL(offerKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); COMPARE_KEYLET(oracleKeylet, keylet::oracle, env.master.id(), 1); - COMPARE_KEYLET_FAIL( - oracleKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); + COMPARE_KEYLET_FAIL(oracleKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); - COMPARE_KEYLET( - paychanKeylet, keylet::payChan, env.master.id(), alice.id(), 1); - COMPARE_KEYLET_FAIL( - paychanKeylet, - HostFunctionError::INVALID_PARAMS, - env.master.id(), - env.master.id(), - 1); - COMPARE_KEYLET_FAIL( - paychanKeylet, - HostFunctionError::INVALID_ACCOUNT, - env.master.id(), - xrpAccount(), - 1); - COMPARE_KEYLET_FAIL( - paychanKeylet, - HostFunctionError::INVALID_ACCOUNT, - xrpAccount(), - env.master.id(), - 1); + COMPARE_KEYLET(paychanKeylet, keylet::payChan, env.master.id(), alice.id(), 1); + COMPARE_KEYLET_FAIL(paychanKeylet, HostFunctionError::INVALID_PARAMS, env.master.id(), env.master.id(), 1); + COMPARE_KEYLET_FAIL(paychanKeylet, HostFunctionError::INVALID_ACCOUNT, env.master.id(), xrpAccount(), 1); + COMPARE_KEYLET_FAIL(paychanKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), env.master.id(), 1); - COMPARE_KEYLET( - permissionedDomainKeylet, - keylet::permissionedDomain, - env.master.id(), - 1); - COMPARE_KEYLET_FAIL( - permissionedDomainKeylet, - HostFunctionError::INVALID_ACCOUNT, - xrpAccount(), - 1); + COMPARE_KEYLET(permissionedDomainKeylet, keylet::permissionedDomain, env.master.id(), 1); + COMPARE_KEYLET_FAIL(permissionedDomainKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); COMPARE_KEYLET(signersKeylet, keylet::signers, env.master.id()); - COMPARE_KEYLET_FAIL( - signersKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount()); + COMPARE_KEYLET_FAIL(signersKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount()); COMPARE_KEYLET(ticketKeylet, keylet::ticket, env.master.id(), 1); - COMPARE_KEYLET_FAIL( - ticketKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); + COMPARE_KEYLET_FAIL(ticketKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); COMPARE_KEYLET(vaultKeylet, keylet::vault, env.master.id(), 1); - COMPARE_KEYLET_FAIL( - vaultKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); + COMPARE_KEYLET_FAIL(vaultKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); } void @@ -1808,16 +1493,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const result = hfs.getNFT(xrpAccount(), nftId); if (BEAST_EXPECT(!result.has_value())) - BEAST_EXPECT( - result.error() == HostFunctionError::INVALID_ACCOUNT); + BEAST_EXPECT(result.error() == HostFunctionError::INVALID_ACCOUNT); } // Should fail for invalid nftId { auto const result = hfs.getNFT(alice.id(), uint256()); if (BEAST_EXPECT(!result.has_value())) - BEAST_EXPECT( - result.error() == HostFunctionError::INVALID_PARAMS); + BEAST_EXPECT(result.error() == HostFunctionError::INVALID_PARAMS); } // Should fail for invalid nftId @@ -1825,15 +1508,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const badId = token::getNextID(env, alice, 0u, 1u); auto const result = hfs.getNFT(alice.id(), badId); if (BEAST_EXPECT(!result.has_value())) - BEAST_EXPECT( - result.error() == HostFunctionError::LEDGER_OBJ_NOT_FOUND); + BEAST_EXPECT(result.error() == HostFunctionError::LEDGER_OBJ_NOT_FOUND); } { auto const result = hfs.getNFT(alice.id(), nftId2); if (BEAST_EXPECT(!result.has_value())) - BEAST_EXPECT( - result.error() == HostFunctionError::FIELD_NOT_FOUND); + BEAST_EXPECT(result.error() == HostFunctionError::FIELD_NOT_FOUND); } } @@ -1853,8 +1534,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); // Should succeed for valid NFT id @@ -1868,8 +1548,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const result = hfs.getNFTIssuer(uint256()); if (BEAST_EXPECT(!result.has_value())) - BEAST_EXPECT( - result.error() == HostFunctionError::INVALID_PARAMS); + BEAST_EXPECT(result.error() == HostFunctionError::INVALID_PARAMS); } } @@ -1889,8 +1568,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto const result = hfs.getNFTTaxon(nftId); @@ -1907,16 +1585,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env{*this}; // Mint NFT with default flags - uint256 const nftId = - token::getNextID(env, env.master, 0u, tfTransferable); + uint256 const nftId = token::getNextID(env, env.master, 0u, tfTransferable); env(token::mint(env.master, 0), txflags(tfTransferable)); env.close(); OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); { @@ -1942,18 +1618,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env{*this}; uint16_t const transferFee = 250; - uint256 const nftId = - token::getNextID(env, env.master, 0u, tfTransferable, transferFee); - env(token::mint(env.master, 0), - token::xferFee(transferFee), - txflags(tfTransferable)); + uint256 const nftId = token::getNextID(env, env.master, 0u, tfTransferable, transferFee); + env(token::mint(env.master, 0), token::xferFee(transferFee), txflags(tfTransferable)); env.close(); OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); { @@ -1987,8 +1659,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); { @@ -2018,8 +1689,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite beast::Journal jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); std::string msg = "test trace"; @@ -2041,8 +1711,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const messages = sink.messages().str(); std::string hex; hex.reserve(data.size() * 2); - boost::algorithm::hex( - data.begin(), data.end(), std::back_inserter(hex)); + boost::algorithm::hex(data.begin(), data.end(), std::back_inserter(hex)); BEAST_EXPECT(messages.find(msg) != std::string::npos); BEAST_EXPECT(messages.find(hex) != std::string::npos); } @@ -2056,8 +1725,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite beast::Journal jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); std::string msg = "test trace"; @@ -2083,8 +1751,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite beast::Journal jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); std::string msg = "trace number"; @@ -2095,8 +1762,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(result.value() == 0); auto const messages = sink.messages().str(); BEAST_EXPECT(messages.find(msg) != std::string::npos); - BEAST_EXPECT( - messages.find(std::to_string(num)) != std::string::npos); + BEAST_EXPECT(messages.find(std::to_string(num)) != std::string::npos); } } @@ -2108,8 +1774,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite beast::Journal jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); std::string msg = "trace number"; @@ -2134,8 +1799,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite beast::Journal jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); std::string msg = "trace account"; @@ -2145,8 +1809,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(result.value() == 0); auto const messages = sink.messages().str(); BEAST_EXPECT(messages.find(msg) != std::string::npos); - BEAST_EXPECT( - messages.find(env.master.human()) != std::string::npos); + BEAST_EXPECT(messages.find(env.master.human()) != std::string::npos); } } @@ -2158,8 +1821,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite beast::Journal jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); std::string msg = "trace account"; auto const result = hfs.traceAccount(msg, env.master.id()); @@ -2182,8 +1844,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite beast::Journal jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); std::string msg = "trace amount"; @@ -2195,9 +1856,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(*result == 0); auto const messages = sink.messages().str(); BEAST_EXPECT(messages.find(msg) != std::string::npos); - BEAST_EXPECT( - messages.find(amount.getFullText()) != - std::string::npos); + BEAST_EXPECT(messages.find(amount.getFullText()) != std::string::npos); } } @@ -2231,8 +1890,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite beast::Journal jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); std::string msg = "trace amount"; @@ -2280,8 +1938,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); std::string msg = "trace float"; @@ -2305,8 +1962,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite beast::Journal jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); std::string msg = "trace float"; @@ -2327,29 +1983,21 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env{*this}; OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); { - auto const result = - hfs.floatFromInt(std::numeric_limits::min(), -1); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + auto const result = hfs.floatFromInt(std::numeric_limits::min(), -1); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { - auto const result = - hfs.floatFromInt(std::numeric_limits::min(), 4); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + auto const result = hfs.floatFromInt(std::numeric_limits::min(), 4); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { - auto const result = - hfs.floatFromInt(std::numeric_limits::min(), 0); + auto const result = hfs.floatFromInt(std::numeric_limits::min(), 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntMin); } @@ -2359,8 +2007,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite } { - auto const result = - hfs.floatFromInt(std::numeric_limits::max(), 0); + auto const result = hfs.floatFromInt(std::numeric_limits::max(), 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntMax); } } @@ -2374,24 +2021,17 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env{*this}; OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); { - auto const result = - hfs.floatFromUint(std::numeric_limits::min(), -1); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + auto const result = hfs.floatFromUint(std::numeric_limits::min(), -1); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { - auto const result = - hfs.floatFromUint(std::numeric_limits::min(), 4); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + auto const result = hfs.floatFromUint(std::numeric_limits::min(), 4); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { @@ -2400,8 +2040,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite } { - auto const result = - hfs.floatFromUint(std::numeric_limits::max(), 0); + auto const result = hfs.floatFromUint(std::numeric_limits::max(), 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatUIntMax); } } @@ -2416,36 +2055,26 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env{*this}; OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); { auto const result = hfs.floatSet(1, 0, -1); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatSet(1, 0, 4); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { - auto const result = - hfs.floatSet(1, wasmMaxExponent + normalExp + 1, 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == - HostFunctionError::FLOAT_COMPUTATION_ERROR); + auto const result = hfs.floatSet(1, wasmMaxExponent + normalExp + 1, 0); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); } { - auto const result = - hfs.floatSet(1, wasmMinExponent + normalExp - 1, 0); + auto const result = hfs.floatSet(1, wasmMinExponent + normalExp - 1, 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); } @@ -2455,20 +2084,17 @@ struct HostFuncImpl_test : public beast::unit_test::suite } { - auto const result = - hfs.floatSet(-1, wasmMaxExponent + normalExp, 0); + auto const result = hfs.floatSet(-1, wasmMaxExponent + normalExp, 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMinusMaxExp); } { - auto const result = - hfs.floatSet(1, wasmMaxExponent + normalExp - 1, 0); + auto const result = hfs.floatSet(1, wasmMaxExponent + normalExp - 1, 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatPreMaxExp); } { - auto const result = - hfs.floatSet(STAmount::cMaxValue, wasmMaxExponent, 0); + auto const result = hfs.floatSet(STAmount::cMaxValue, wasmMaxExponent, 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMaxIOU); } @@ -2492,31 +2118,22 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env{*this}; OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); { auto const result = hfs.floatCompare(Slice(), Slice()); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { - auto const result = - hfs.floatCompare(makeSlice(floatInvalidZero), Slice()); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + auto const result = hfs.floatCompare(makeSlice(floatInvalidZero), Slice()); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { - auto const result = - hfs.floatCompare(makeSlice(float1), makeSlice(invalid)); - BEAST_EXPECT( - !result && - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + auto const result = hfs.floatCompare(makeSlice(float1), makeSlice(invalid)); + BEAST_EXPECT(!result && result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { @@ -2524,28 +2141,22 @@ struct HostFuncImpl_test : public beast::unit_test::suite // exp = 81 + 97 = 178 x[1] |= 0x80; x[1] &= 0xBF; - auto const result = - hfs.floatCompare(makeSlice(x), makeSlice(floatMaxExp)); - BEAST_EXPECT( - !result && - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + auto const result = hfs.floatCompare(makeSlice(x), makeSlice(floatMaxExp)); + BEAST_EXPECT(!result && result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { - auto const result = hfs.floatCompare( - makeSlice(floatIntMin), makeSlice(floatIntZero)); + auto const result = hfs.floatCompare(makeSlice(floatIntMin), makeSlice(floatIntZero)); BEAST_EXPECT(result) && BEAST_EXPECT(*result == 2); } { - auto const result = hfs.floatCompare( - makeSlice(floatIntMax), makeSlice(floatIntZero)); + auto const result = hfs.floatCompare(makeSlice(floatIntMax), makeSlice(floatIntZero)); BEAST_EXPECT(result) && BEAST_EXPECT(*result == 1); } { - auto const result = - hfs.floatCompare(makeSlice(float1), makeSlice(float1)); + auto const result = hfs.floatCompare(makeSlice(float1), makeSlice(float1)); BEAST_EXPECT(result) && BEAST_EXPECT(*result == 0); } } @@ -2559,50 +2170,36 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env{*this}; OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); { auto const result = hfs.floatAdd(Slice(), Slice(), -1); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatAdd(Slice(), Slice(), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { - auto const result = - hfs.floatAdd(makeSlice(float1), makeSlice(invalid), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + auto const result = hfs.floatAdd(makeSlice(float1), makeSlice(invalid), 0); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { - auto const result = - hfs.floatAdd(makeSlice(floatMaxIOU), makeSlice(floatMaxExp), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == - HostFunctionError::FLOAT_COMPUTATION_ERROR); + auto const result = hfs.floatAdd(makeSlice(floatMaxIOU), makeSlice(floatMaxExp), 0); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); } { - auto const result = hfs.floatAdd( - makeSlice(floatIntMin), makeSlice(floatIntZero), 0); + auto const result = hfs.floatAdd(makeSlice(floatIntMin), makeSlice(floatIntZero), 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntMin); } { - auto const result = - hfs.floatAdd(makeSlice(floatIntMax), makeSlice(floatIntMin), 0); + auto const result = hfs.floatAdd(makeSlice(floatIntMax), makeSlice(floatIntMin), 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); } } @@ -2616,50 +2213,36 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env{*this}; OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); { auto const result = hfs.floatSubtract(Slice(), Slice(), -1); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatSubtract(Slice(), Slice(), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { - auto const result = - hfs.floatSubtract(makeSlice(float1), makeSlice(invalid), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + auto const result = hfs.floatSubtract(makeSlice(float1), makeSlice(invalid), 0); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { - auto const result = hfs.floatSubtract( - makeSlice(floatMaxIOU), makeSlice(floatMinusMaxExp), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == - HostFunctionError::FLOAT_COMPUTATION_ERROR); + auto const result = hfs.floatSubtract(makeSlice(floatMaxIOU), makeSlice(floatMinusMaxExp), 0); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); } { - auto const result = hfs.floatSubtract( - makeSlice(floatIntMin), makeSlice(floatIntZero), 0); + auto const result = hfs.floatSubtract(makeSlice(floatIntMin), makeSlice(floatIntZero), 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntMin); } { - auto const result = hfs.floatSubtract( - makeSlice(floatIntZero), makeSlice(float1), 0); + auto const result = hfs.floatSubtract(makeSlice(floatIntZero), makeSlice(float1), 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMinus1); } } @@ -2673,56 +2256,41 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env{*this}; OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); { auto const result = hfs.floatMultiply(Slice(), Slice(), -1); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatMultiply(Slice(), Slice(), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { - auto const result = - hfs.floatMultiply(makeSlice(float1), makeSlice(invalid), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + auto const result = hfs.floatMultiply(makeSlice(float1), makeSlice(invalid), 0); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { - auto const result = hfs.floatMultiply( - makeSlice(floatMaxIOU), makeSlice(float1More), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == - HostFunctionError::FLOAT_COMPUTATION_ERROR); + auto const result = hfs.floatMultiply(makeSlice(floatMaxIOU), makeSlice(float1More), 0); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); } { - auto const result = - hfs.floatMultiply(makeSlice(float1), makeSlice(float1), 0); + auto const result = hfs.floatMultiply(makeSlice(float1), makeSlice(float1), 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == float1); } { - auto const result = hfs.floatMultiply( - makeSlice(floatIntZero), makeSlice(floatMaxIOU), 0); + auto const result = hfs.floatMultiply(makeSlice(floatIntZero), makeSlice(floatMaxIOU), 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); } { - auto const result = hfs.floatMultiply( - makeSlice(float10), makeSlice(floatPreMaxExp), 0); + auto const result = hfs.floatMultiply(makeSlice(float10), makeSlice(floatPreMaxExp), 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMaxExp); } } @@ -2736,64 +2304,45 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env{*this}; OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); { auto const result = hfs.floatDivide(Slice(), Slice(), -1); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatDivide(Slice(), Slice(), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { - auto const result = - hfs.floatDivide(makeSlice(float1), makeSlice(invalid), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + auto const result = hfs.floatDivide(makeSlice(float1), makeSlice(invalid), 0); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { - auto const result = - hfs.floatDivide(makeSlice(float1), makeSlice(floatIntZero), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == - HostFunctionError::FLOAT_COMPUTATION_ERROR); + auto const result = hfs.floatDivide(makeSlice(float1), makeSlice(floatIntZero), 0); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); } { - auto const y = hfs.floatSet( - STAmount::cMaxValue, -normalExp - 1, 0); // 0.9999999... + auto const y = hfs.floatSet(STAmount::cMaxValue, -normalExp - 1, 0); // 0.9999999... if (BEAST_EXPECT(y)) { - auto const result = - hfs.floatDivide(makeSlice(floatMaxIOU), makeSlice(*y), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == - HostFunctionError::FLOAT_COMPUTATION_ERROR); + auto const result = hfs.floatDivide(makeSlice(floatMaxIOU), makeSlice(*y), 0); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); } } { - auto const result = - hfs.floatDivide(makeSlice(floatIntZero), makeSlice(float1), 0); + auto const result = hfs.floatDivide(makeSlice(floatIntZero), makeSlice(float1), 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); } { - auto const result = - hfs.floatDivide(makeSlice(floatMaxExp), makeSlice(float10), 0); + auto const result = hfs.floatDivide(makeSlice(floatMaxExp), makeSlice(float10), 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatPreMaxExp); } } @@ -2807,29 +2356,22 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env{*this}; OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); { auto const result = hfs.floatRoot(Slice(), 2, -1); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatRoot(makeSlice(invalid), 3, 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatRoot(makeSlice(float1), -2, 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { @@ -2880,52 +2422,37 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env{*this}; OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); { auto const result = hfs.floatPower(Slice(), 2, -1); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatPower(makeSlice(invalid), 3, 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatPower(makeSlice(float1), -2, 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatPower(makeSlice(floatMaxIOU), 2, 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == - HostFunctionError::FLOAT_COMPUTATION_ERROR); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); } { auto const result = hfs.floatPower(makeSlice(floatMaxIOU), 81, 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatPower(makeSlice(floatMaxIOU), 2, 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == - HostFunctionError::FLOAT_COMPUTATION_ERROR); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); } { @@ -2967,22 +2494,17 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env{*this}; OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); { auto const result = hfs.floatLog(Slice(), -1); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { auto const result = hfs.floatLog(makeSlice(invalid), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT( - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } // perf test logs @@ -3026,8 +2548,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite // } { - auto const x = - hfs.floatSet(9'500'000'000'000'001, -14, 0); // almost 80+15 + auto const x = hfs.floatSet(9'500'000'000'000'001, -14, 0); // almost 80+15 if (BEAST_EXPECT(x)) { auto const result = hfs.floatLog(makeSlice(floatMaxExp), 0); @@ -3055,9 +2576,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite } { - auto const x = hfs.floatSet(1, -2, 0); // 0.01 - auto const y = - hfs.floatSet(-2'000'000'000'000'000ll, -15, 0); // -2 + auto const x = hfs.floatSet(1, -2, 0); // 0.01 + auto const y = hfs.floatSet(-2'000'000'000'000'000ll, -15, 0); // -2 if (BEAST_EXPECT(x && y)) { auto const result = hfs.floatLog(makeSlice(*x), 0); @@ -3075,8 +2595,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env{*this}; OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = - keylet::escrow(env.master, env.seq(env.master)); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto const y = hfs.floatSet(20, 0, 0); @@ -3091,19 +2610,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite x[7] = 10; { - auto const result = - hfs.floatCompare(makeSlice(x), makeSlice(float10)); - BEAST_EXPECT( - !result && - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + auto const result = hfs.floatCompare(makeSlice(x), makeSlice(float10)); + BEAST_EXPECT(!result && result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { - auto const result = - hfs.floatAdd(makeSlice(float10), makeSlice(x), 0); - BEAST_EXPECT( - !result && - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + auto const result = hfs.floatAdd(makeSlice(float10), makeSlice(x), 0); + BEAST_EXPECT(!result && result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } // MPT @@ -3112,19 +2625,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite x[7] = 10; { - auto const result = - hfs.floatCompare(makeSlice(x), makeSlice(float10)); - BEAST_EXPECT( - !result && - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + auto const result = hfs.floatCompare(makeSlice(x), makeSlice(float10)); + BEAST_EXPECT(!result && result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { - auto const result = - hfs.floatAdd(makeSlice(float10), makeSlice(x), 0); - BEAST_EXPECT( - !result && - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + auto const result = hfs.floatAdd(makeSlice(float10), makeSlice(x), 0); + BEAST_EXPECT(!result && result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } testcase("float non-canonical"); @@ -3133,11 +2640,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite Bytes x = float1; *reinterpret_cast(x.data()) = 0x0000C16FF286A3D4ull; { - auto const result = - hfs.floatCompare(makeSlice(x), makeSlice(float1)); - BEAST_EXPECT( - !result && - result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + auto const result = hfs.floatCompare(makeSlice(x), makeSlice(float1)); + BEAST_EXPECT(!result && result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } } } diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index 0938243cff..85f8049e94 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -19,8 +19,7 @@ struct TestLedgerDataProvider : public HostFunctions void const* rt_ = nullptr; public: - TestLedgerDataProvider(jtx::Env& env) - : HostFunctions(env.journal), env_(env) + TestLedgerDataProvider(jtx::Env& env) : HostFunctions(env.journal), env_(env) { } @@ -52,8 +51,7 @@ struct TestHostFunctions : public HostFunctions void const* rt_ = nullptr; public: - TestHostFunctions(test::jtx::Env& env, int cd = 0) - : HostFunctions(env.journal), env_(env), clock_drift_(cd) + TestHostFunctions(test::jtx::Env& env, int cd = 0) : HostFunctions(env.journal), env_(env), clock_drift_(cd) { accountID_ = env_.master.id(); std::string t = "10000"; @@ -148,8 +146,7 @@ public: return data_; else if (sn == "FinishAfter") { - auto t = - env_.current()->parentCloseTime().time_since_epoch().count(); + auto t = env_.current()->parentCloseTime().time_since_epoch().count(); std::string s = std::to_string(t); return Bytes{s.begin(), s.end()}; } @@ -185,10 +182,9 @@ public: return Bytes(accountID_.begin(), accountID_.end()); } } - uint8_t const a[] = {0x2b, 0x6a, 0x23, 0x2a, 0xa4, 0xc4, 0xbe, 0x41, - 0xbf, 0x49, 0xd2, 0x45, 0x9f, 0xa4, 0xa0, 0x34, - 0x7e, 0x1b, 0x54, 0x3a, 0x4c, 0x92, 0xfc, 0xee, - 0x08, 0x21, 0xc0, 0x20, 0x1e, 0x2e, 0x9a, 0x00}; + uint8_t const a[] = {0x2b, 0x6a, 0x23, 0x2a, 0xa4, 0xc4, 0xbe, 0x41, 0xbf, 0x49, 0xd2, + 0x45, 0x9f, 0xa4, 0xa0, 0x34, 0x7e, 0x1b, 0x54, 0x3a, 0x4c, 0x92, + 0xfc, 0xee, 0x08, 0x21, 0xc0, 0x20, 0x1e, 0x2e, 0x9a, 0x00}; return Bytes(&a[0], &a[sizeof(a)]); } @@ -204,10 +200,9 @@ public: return Bytes(accountID_.begin(), accountID_.end()); } } - uint8_t const a[] = {0x2b, 0x6a, 0x23, 0x2a, 0xa4, 0xc4, 0xbe, 0x41, - 0xbf, 0x49, 0xd2, 0x45, 0x9f, 0xa4, 0xa0, 0x34, - 0x7e, 0x1b, 0x54, 0x3a, 0x4c, 0x92, 0xfc, 0xee, - 0x08, 0x21, 0xc0, 0x20, 0x1e, 0x2e, 0x9a, 0x00}; + uint8_t const a[] = {0x2b, 0x6a, 0x23, 0x2a, 0xa4, 0xc4, 0xbe, 0x41, 0xbf, 0x49, 0xd2, + 0x45, 0x9f, 0xa4, 0xa0, 0x34, 0x7e, 0x1b, 0x54, 0x3a, 0x4c, 0x92, + 0xfc, 0xee, 0x08, 0x21, 0xc0, 0x20, 0x1e, 0x2e, 0x9a, 0x00}; return Bytes(&a[0], &a[sizeof(a)]); } @@ -223,10 +218,9 @@ public: return Bytes(accountID_.begin(), accountID_.end()); } } - uint8_t const a[] = {0x2b, 0x6a, 0x23, 0x2a, 0xa4, 0xc4, 0xbe, 0x41, - 0xbf, 0x49, 0xd2, 0x45, 0x9f, 0xa4, 0xa0, 0x34, - 0x7e, 0x1b, 0x54, 0x3a, 0x4c, 0x92, 0xfc, 0xee, - 0x08, 0x21, 0xc0, 0x20, 0x1e, 0x2e, 0x9a, 0x00}; + uint8_t const a[] = {0x2b, 0x6a, 0x23, 0x2a, 0xa4, 0xc4, 0xbe, 0x41, 0xbf, 0x49, 0xd2, + 0x45, 0x9f, 0xa4, 0xa0, 0x34, 0x7e, 0x1b, 0x54, 0x3a, 0x4c, 0x92, + 0xfc, 0xee, 0x08, 0x21, 0xc0, 0x20, 0x1e, 0x2e, 0x9a, 0x00}; return Bytes(&a[0], &a[sizeof(a)]); } @@ -273,10 +267,7 @@ public: } Expected - checkSignature( - Slice const& message, - Slice const& signature, - Slice const& pubkey) override + checkSignature(Slice const& message, Slice const& signature, Slice const& pubkey) override { return 1; } @@ -308,13 +299,9 @@ public: } Expected - credentialKeylet( - AccountID const& subject, - AccountID const& issuer, - Slice const& credentialType) override + credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) override { - if (!subject || !issuer || credentialType.empty() || - credentialType.size() > maxCredentialTypeLength) + if (!subject || !issuer || credentialType.empty() || credentialType.size() > maxCredentialTypeLength) return Unexpected(HostFunctionError::INVALID_ACCOUNT); auto const keylet = keylet::credential(subject, issuer, credentialType); return Bytes{keylet.key.begin(), keylet.key.end()}; @@ -403,18 +390,14 @@ public: { if (!asHex) { - log(msg, [&data] { - return std::string_view( - reinterpret_cast(data.data()), data.size()); - }); + log(msg, [&data] { return std::string_view(reinterpret_cast(data.data()), data.size()); }); } else { log(msg, [&data] { std::string hex; hex.reserve(data.size() * 2); - boost::algorithm::hex( - data.begin(), data.end(), std::back_inserter(hex)); + boost::algorithm::hex(data.begin(), data.end(), std::back_inserter(hex)); return hex; }); } @@ -550,10 +533,7 @@ struct PerfHostFunctions : public TestHostFunctions void const* rt_ = nullptr; - PerfHostFunctions( - test::jtx::Env& env, - Keylet const& k, - std::shared_ptr&& tx) + PerfHostFunctions(test::jtx::Env& env, Keylet const& k, std::shared_ptr&& tx) : TestHostFunctions(env), leKey(k), tx_(std::move(tx)) { } @@ -570,8 +550,7 @@ struct PerfHostFunctions : public TestHostFunctions Expected getParentLedgerTime() override { - auto time = - env_.current()->parentCloseTime().time_since_epoch().count(); + auto time = env_.current()->parentCloseTime().time_since_epoch().count(); if (time > std::numeric_limits::max()) return Unexpected(HostFunctionError::INTERNAL); return static_cast(time); @@ -727,16 +706,14 @@ struct PerfHostFunctions : public TestHostFunctions } break; case STI_UINT16: { - auto const& num( - static_cast const*>(obj)); + auto const& num(static_cast const*>(obj)); std::uint16_t const data = num->value(); auto const* b = reinterpret_cast(&data); auto const* e = reinterpret_cast(&data + 1); return Bytes{b, e}; } case STI_UINT32: { - auto const* num( - static_cast const*>(obj)); + auto const* num(static_cast const*>(obj)); std::uint32_t const data = num->value(); auto const* b = reinterpret_cast(&data); auto const* e = reinterpret_cast(&data + 1); @@ -781,8 +758,7 @@ struct PerfHostFunctions : public TestHostFunctions static inline bool noField(STBase const* field) { - return !field || (STI_NOTPRESENT == field->getSType()) || - (STI_UNKNOWN == field->getSType()); + return !field || (STI_NOTPRESENT == field->getSType()) || (STI_UNKNOWN == field->getSType()); } static Expected @@ -791,8 +767,7 @@ struct PerfHostFunctions : public TestHostFunctions if (locator.empty() || (locator.size() & 3)) // must be multiple of 4 return Unexpected(HostFunctionError::LOCATOR_MALFORMED); - int32_t const* locPtr = - reinterpret_cast(locator.data()); + int32_t const* locPtr = reinterpret_cast(locator.data()); int32_t const locSize = locator.size() / 4; STBase const* field = nullptr; auto const& knownSFields = SField::getKnownCodeToField(); @@ -1001,8 +976,7 @@ struct PerfHostFunctions : public TestHostFunctions if (data.size() > maxWasmDataLength) return Unexpected(HostFunctionError::DATA_FIELD_TOO_LARGE); - xrpl::detail::ApplyViewBase v( - env_.app().openLedger().current().get(), tapNONE); + xrpl::detail::ApplyViewBase v(env_.app().openLedger().current().get(), tapNONE); auto sle = v.peek(leKey); if (!sle) @@ -1015,10 +989,7 @@ struct PerfHostFunctions : public TestHostFunctions } Expected - checkSignature( - Slice const& message, - Slice const& signature, - Slice const& pubkey) override + checkSignature(Slice const& message, Slice const& signature, Slice const& pubkey) override { if (!publicKeyType(pubkey)) return Unexpected(HostFunctionError::INVALID_PARAMS); @@ -1067,16 +1038,12 @@ struct PerfHostFunctions : public TestHostFunctions } Expected - credentialKeylet( - AccountID const& subject, - AccountID const& issuer, - Slice const& credentialType) override + credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) override { if (!subject || !issuer) return Unexpected(HostFunctionError::INVALID_ACCOUNT); - if (credentialType.empty() || - credentialType.size() > maxCredentialTypeLength) + if (credentialType.empty() || credentialType.size() > maxCredentialTypeLength) return Unexpected(HostFunctionError::INVALID_PARAMS); auto const keylet = keylet::credential(subject, issuer, credentialType); @@ -1094,8 +1061,7 @@ struct PerfHostFunctions : public TestHostFunctions } Expected - delegateKeylet(AccountID const& account, AccountID const& authorize) - override + delegateKeylet(AccountID const& account, AccountID const& authorize) override { if (!account || !authorize) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -1106,8 +1072,7 @@ struct PerfHostFunctions : public TestHostFunctions } Expected - depositPreauthKeylet(AccountID const& account, AccountID const& authorize) - override + depositPreauthKeylet(AccountID const& account, AccountID const& authorize) override { if (!account || !authorize) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -1127,10 +1092,7 @@ struct PerfHostFunctions : public TestHostFunctions } Expected - lineKeylet( - AccountID const& account1, - AccountID const& account2, - Currency const& currency) override + lineKeylet(AccountID const& account1, AccountID const& account2, Currency const& currency) override { if (!account1 || !account2) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -1193,10 +1155,7 @@ struct PerfHostFunctions : public TestHostFunctions } Expected - paychanKeylet( - AccountID const& account, - AccountID const& destination, - std::uint32_t seq) override + paychanKeylet(AccountID const& account, AccountID const& destination, std::uint32_t seq) override { if (!account || !destination) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -1207,8 +1166,7 @@ struct PerfHostFunctions : public TestHostFunctions } Expected - permissionedDomainKeylet(AccountID const& account, std::uint32_t seq) - override + permissionedDomainKeylet(AccountID const& account, std::uint32_t seq) override { if (!account) return Unexpected(HostFunctionError::INVALID_ACCOUNT); diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index a26328039b..3305ca03b8 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -60,11 +60,8 @@ struct Wasm_test : public beast::unit_test::suite auto const lineStr = " (" + std::to_string(location.line()) + ")"; if (BEAST_EXPECTS(re.has_value(), transToken(re.error()) + lineStr)) { - BEAST_EXPECTS( - re->result == expectedResult, - std::to_string(re->result) + lineStr); - BEAST_EXPECTS( - re->cost == expectedCost, std::to_string(re->cost) + lineStr); + BEAST_EXPECTS(re->result == expectedResult, std::to_string(re->result) + lineStr); + BEAST_EXPECTS(re->cost == expectedCost, std::to_string(re->cost) + lineStr); } } @@ -111,8 +108,7 @@ struct Wasm_test : public beast::unit_test::suite auto& vm = WasmEngine::instance(); std::shared_ptr imports(std::make_shared()); - WasmImpFunc( - *imports, "func-add", reinterpret_cast(&Add)); + WasmImpFunc(*imports, "func-add", reinterpret_cast(&Add)); auto re = vm.run(wasm, "addTwo", wasmParams(1234, 5678), imports); @@ -164,8 +160,7 @@ struct Wasm_test : public beast::unit_test::suite "732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a" "6d756c746976616c7565"); - auto const re = - preflightEscrowWasm(badWasm, hfs, ESCROW_FUNCTION_NAME); + auto const re = preflightEscrowWasm(badWasm, hfs, ESCROW_FUNCTION_NAME); BEAST_EXPECT(!isTesSuccess(re)); } } @@ -182,18 +177,10 @@ struct Wasm_test : public beast::unit_test::suite Env env{*this}; std::shared_ptr hfs(new TestLedgerDataProvider(env)); auto imports = std::make_shared(); - WASM_IMPORT_FUNC2( - *imports, getLedgerSqn, "get_ledger_sqn", hfs.get(), 33); + WASM_IMPORT_FUNC2(*imports, getLedgerSqn, "get_ledger_sqn", hfs.get(), 33); auto& engine = WasmEngine::instance(); - auto re = engine.run( - ledgerSqnWasm, - ESCROW_FUNCTION_NAME, - {}, - imports, - hfs, - 1'000'000, - env.journal); + auto re = engine.run(ledgerSqnWasm, ESCROW_FUNCTION_NAME, {}, imports, hfs, 1'000'000, env.journal); checkResult(re, 0, 151); @@ -201,8 +188,7 @@ struct Wasm_test : public beast::unit_test::suite env.close(); // empty module - run the same instance - re = engine.run( - {}, ESCROW_FUNCTION_NAME, {}, imports, hfs, 1'000'000, env.journal); + re = engine.run({}, ESCROW_FUNCTION_NAME, {}, imports, hfs, 1'000'000, env.journal); checkResult(re, 5, 190); } @@ -228,8 +214,7 @@ struct Wasm_test : public beast::unit_test::suite auto const sha512Wasm = hexToBytes(sha512PureWasmHex); auto& engine = WasmEngine::instance(); - auto const re = engine.run( - sha512Wasm, "sha512_process", wasmParams(sha512PureWasmHex)); + auto const re = engine.run(sha512Wasm, "sha512_process", wasmParams(sha512PureWasmHex)); checkResult(re, 34'432, 151'155); } @@ -244,9 +229,7 @@ struct Wasm_test : public beast::unit_test::suite Bytes outb; outb.resize(1024); - auto const minsz = std::min( - static_cast(512), - static_cast(b58WasmHex.size())); + auto const minsz = std::min(static_cast(512), static_cast(b58WasmHex.size())); auto const s = std::string_view(b58WasmHex.c_str(), minsz); auto const re = engine.run(b58Wasm, "b58enco", wasmParams(outb, s)); @@ -272,14 +255,7 @@ struct Wasm_test : public beast::unit_test::suite for (auto& i : *imp) i.second.gas = 0; - auto re = engine.run( - allHostFuncWasm, - ESCROW_FUNCTION_NAME, - {}, - imp, - hfs, - 1'000'000, - env.journal); + auto re = engine.run(allHostFuncWasm, ESCROW_FUNCTION_NAME, {}, imp, hfs, 1'000'000, env.journal); checkResult(re, 1, 25'503); @@ -300,14 +276,7 @@ struct Wasm_test : public beast::unit_test::suite std::shared_ptr hfs(new TestHostFunctions(env, 0)); auto const imp = createWasmImport(*hfs); - auto re = engine.run( - allHostFuncWasm, - ESCROW_FUNCTION_NAME, - {}, - imp, - hfs, - 1'000'000, - env.journal); + auto re = engine.run(allHostFuncWasm, ESCROW_FUNCTION_NAME, {}, imp, hfs, 1'000'000, env.journal); checkResult(re, 1, 64'763); @@ -323,20 +292,11 @@ struct Wasm_test : public beast::unit_test::suite std::shared_ptr hfs(new TestHostFunctions(env, 0)); auto const imp = createWasmImport(*hfs); - auto re = engine.run( - allHostFuncWasm, - ESCROW_FUNCTION_NAME, - {}, - imp, - hfs, - 200, - env.journal); + auto re = engine.run(allHostFuncWasm, ESCROW_FUNCTION_NAME, {}, imp, hfs, 200, env.journal); if (BEAST_EXPECT(!re)) { - BEAST_EXPECTS( - re.error() == tecFAILED_PROCESSING, - std::to_string(TERtoInt(re.error()))); + BEAST_EXPECTS(re.error() == tecFAILED_PROCESSING, std::to_string(TERtoInt(re.error()))); } env.close(); @@ -354,16 +314,14 @@ struct Wasm_test : public beast::unit_test::suite Env env{*this}; { std::shared_ptr hfs(new TestHostFunctions(env, 0)); - auto re = runEscrowWasm( - allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); + auto re = runEscrowWasm(allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); checkResult(re, 1, 64'763); } { // max() gas std::shared_ptr hfs(new TestHostFunctions(env, 0)); - auto re = - runEscrowWasm(allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, -1); + auto re = runEscrowWasm(allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, -1); checkResult(re, 1, 64'763); } @@ -381,8 +339,7 @@ struct Wasm_test : public beast::unit_test::suite }; std::shared_ptr hfs(new BadTestHostFunctions(env)); - auto re = runEscrowWasm( - allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); + auto re = runEscrowWasm(allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); checkResult(re, -201, 28'148); } @@ -400,8 +357,7 @@ struct Wasm_test : public beast::unit_test::suite }; std::shared_ptr hfs(new BadTestHostFunctions(env)); - auto re = runEscrowWasm( - allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); + auto re = runEscrowWasm(allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); checkResult(re, -201, 28'148); } @@ -409,8 +365,7 @@ struct Wasm_test : public beast::unit_test::suite auto const deepWasm = hexToBytes(deepRecursionHex); - std::shared_ptr hfs( - new TestHostFunctionsSink(env)); + std::shared_ptr hfs(new TestHostFunctionsSink(env)); std::string funcName("finish"); auto re = runEscrowWasm(deepWasm, hfs, funcName, {}, 1'000'000'000); BEAST_EXPECT(!re && re.error()); @@ -418,8 +373,7 @@ struct Wasm_test : public beast::unit_test::suite // << std::endl; auto const& sink = hfs->getSink(); - auto countSubstr = [](std::string const& str, - std::string const& substr) { + auto countSubstr = [](std::string const& str, std::string const& substr) { std::size_t pos = 0; int occurrences = 0; while ((pos = str.find(substr, pos)) != std::string::npos) @@ -431,8 +385,7 @@ struct Wasm_test : public beast::unit_test::suite }; auto const s = sink.messages().str(); - BEAST_EXPECT( - countSubstr(s, "WASMI Error: failure to call func") == 1); + BEAST_EXPECT(countSubstr(s, "WASMI Error: failure to call func") == 1); BEAST_EXPECT(countSubstr(s, "exception: failure") > 0); } @@ -442,8 +395,7 @@ struct Wasm_test : public beast::unit_test::suite std::shared_ptr hfs(new TestHostFunctions(env, 0)); // infinite loop should be caught and fail - auto const re = - runEscrowWasm(infiniteLoopWasm, hfs, funcName, {}, 1'000'000); + auto const re = runEscrowWasm(infiniteLoopWasm, hfs, funcName, {}, 1'000'000); if (BEAST_EXPECT(!re.has_value())) { BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); @@ -455,19 +407,11 @@ struct Wasm_test : public beast::unit_test::suite auto const lgrSqnWasm = hexToBytes(ledgerSqnWasmHex); std::shared_ptr hfs(new TestLedgerDataProvider(env)); std::shared_ptr imports(std::make_shared()); - WASM_IMPORT_FUNC2( - *imports, getLedgerSqn, "get_ledger_sqn2", hfs.get()); + WASM_IMPORT_FUNC2(*imports, getLedgerSqn, "get_ledger_sqn2", hfs.get()); auto& engine = WasmEngine::instance(); - auto re = engine.run( - lgrSqnWasm, - ESCROW_FUNCTION_NAME, - {}, - imports, - hfs, - 1'000'000, - env.journal); + auto re = engine.run(lgrSqnWasm, ESCROW_FUNCTION_NAME, {}, imports, hfs, 1'000'000, env.journal); BEAST_EXPECT(!re); } @@ -477,20 +421,12 @@ struct Wasm_test : public beast::unit_test::suite auto const lgrSqnWasm = hexToBytes(ledgerSqnWasmHex); std::shared_ptr hfs(new TestLedgerDataProvider(env)); std::shared_ptr imports(std::make_shared()); - WASM_IMPORT_FUNC2( - *imports, getLedgerSqn, "get_ledger_sqn", hfs.get()); + WASM_IMPORT_FUNC2(*imports, getLedgerSqn, "get_ledger_sqn", hfs.get()); (*imports)[0].first = nullptr; auto& engine = WasmEngine::instance(); - auto re = engine.run( - lgrSqnWasm, - ESCROW_FUNCTION_NAME, - {}, - imports, - hfs, - 1'000'000, - env.journal); + auto re = engine.run(lgrSqnWasm, ESCROW_FUNCTION_NAME, {}, imports, hfs, 1'000'000, env.journal); BEAST_EXPECT(!re); } @@ -500,12 +436,10 @@ struct Wasm_test : public beast::unit_test::suite auto const lgrSqnWasm = hexToBytes(ledgerSqnWasmHex); std::shared_ptr hfs(new TestLedgerDataProvider(env)); std::shared_ptr imports(std::make_shared()); - WASM_IMPORT_FUNC2( - *imports, getLedgerSqn, "get_ledger_sqn", hfs.get()); + WASM_IMPORT_FUNC2(*imports, getLedgerSqn, "get_ledger_sqn", hfs.get()); auto& engine = WasmEngine::instance(); - auto re = engine.run( - lgrSqnWasm, "func1", {}, imports, hfs, 1'000'000, env.journal); + auto re = engine.run(lgrSqnWasm, "func1", {}, imports, hfs, 1'000'000, env.journal); BEAST_EXPECT(!re); } @@ -595,34 +529,28 @@ struct Wasm_test : public beast::unit_test::suite // {issuer, credType3}})); // create nft - [[maybe_unused]] uint256 const nft0{ - token::getNextID(env, alan, 0u)}; + [[maybe_unused]] uint256 const nft0{token::getNextID(env, alan, 0u)}; env(token::mint(alan, 0u)); auto const k = keylet::nftoffer(alan, 0); - [[maybe_unused]] uint256 const nft1{ - token::getNextID(env, alan, 0u)}; + [[maybe_unused]] uint256 const nft1{token::getNextID(env, alan, 0u)}; env(token::mint(alan, 0u), - token::uri( - "https://github.com/XRPLF/XRPL-Standards/discussions/" - "279?id=github.com/XRPLF/XRPL-Standards/discussions/" - "279&ut=github.com/XRPLF/XRPL-Standards/discussions/" - "279&sid=github.com/XRPLF/XRPL-Standards/discussions/" - "279&aot=github.com/XRPLF/XRPL-Standards/disc")); - [[maybe_unused]] uint256 const nft2{ - token::getNextID(env, alan, 0u)}; + token::uri("https://github.com/XRPLF/XRPL-Standards/discussions/" + "279?id=github.com/XRPLF/XRPL-Standards/discussions/" + "279&ut=github.com/XRPLF/XRPL-Standards/discussions/" + "279&sid=github.com/XRPLF/XRPL-Standards/discussions/" + "279&aot=github.com/XRPLF/XRPL-Standards/disc")); + [[maybe_unused]] uint256 const nft2{token::getNextID(env, alan, 0u)}; env(token::mint(alan, 0u)); env.close(); - std::shared_ptr hfs( - new PerfHostFunctions(env, k, env.tx())); + std::shared_ptr hfs(new PerfHostFunctions(env, k, env.tx())); auto re = runEscrowWasm(perfWasm, hfs, ESCROW_FUNCTION_NAME); if (BEAST_EXPECT(re.has_value())) { BEAST_EXPECT(re->result); - std::cout << "Res: " << re->result << " cost: " << re->cost - << std::endl; + std::cout << "Res: " << re->result << " cost: " << re->cost << std::endl; } // env(escrow::finish(alan, alan, seq), @@ -647,8 +575,7 @@ struct Wasm_test : public beast::unit_test::suite std::shared_ptr hfs(new TestHostFunctions(env, 0)); auto const allowance = 187'131; - auto re = runEscrowWasm( - codecovWasm, hfs, ESCROW_FUNCTION_NAME, {}, allowance); + auto re = runEscrowWasm(codecovWasm, hfs, ESCROW_FUNCTION_NAME, {}, allowance); checkResult(re, 1, allowance); } @@ -667,8 +594,7 @@ struct Wasm_test : public beast::unit_test::suite { // f32 set constant, opcode disabled exception - auto const re = - runEscrowWasm(disabledFloatWasm, hfs, funcName, {}, 1'000'000); + auto const re = runEscrowWasm(disabledFloatWasm, hfs, funcName, {}, 1'000'000); if (BEAST_EXPECT(!re.has_value())) { BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); @@ -678,8 +604,7 @@ struct Wasm_test : public beast::unit_test::suite { // f32 add, can't create module exception disabledFloatWasm[0x117] = 0x92; - auto const re = - runEscrowWasm(disabledFloatWasm, hfs, funcName, {}, 1'000'000); + auto const re = runEscrowWasm(disabledFloatWasm, hfs, funcName, {}, 1'000'000); if (BEAST_EXPECT(!re.has_value())) { BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); @@ -692,23 +617,16 @@ struct Wasm_test : public beast::unit_test::suite { testcase("Wasm additional memory limit tests"); BEAST_EXPECT(runFinishFunction(memoryPointerAtLimitHex).value() == 1); - BEAST_EXPECT( - runFinishFunction(memoryPointerOverLimitHex).has_value() == false); - BEAST_EXPECT( - runFinishFunction(memoryOffsetOverLimitHex).has_value() == false); - BEAST_EXPECT( - runFinishFunction(memoryEndOfWordOverLimitHex).has_value() == - false); + BEAST_EXPECT(runFinishFunction(memoryPointerOverLimitHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(memoryOffsetOverLimitHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(memoryEndOfWordOverLimitHex).has_value() == false); BEAST_EXPECT(runFinishFunction(memoryGrow0To1PageHex).value() == 1); BEAST_EXPECT(runFinishFunction(memoryGrow1To0PageHex).value() == -1); BEAST_EXPECT(runFinishFunction(memoryLastByteOf8MBHex).value() == 1); - BEAST_EXPECT( - runFinishFunction(memoryGrow1MoreThan8MBHex).value() == -1); + BEAST_EXPECT(runFinishFunction(memoryGrow1MoreThan8MBHex).value() == -1); BEAST_EXPECT(runFinishFunction(memoryGrow0MoreThan8MBHex).value() == 1); - BEAST_EXPECT( - runFinishFunction(memoryInit1MoreThan8MBHex).has_value() == false); - BEAST_EXPECT( - runFinishFunction(memoryNegativeAddressHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(memoryInit1MoreThan8MBHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(memoryNegativeAddressHex).has_value() == false); } void @@ -716,8 +634,7 @@ struct Wasm_test : public beast::unit_test::suite { testcase("Wasm table limit tests"); BEAST_EXPECT(runFinishFunction(table64ElementsHex).value() == 1); - BEAST_EXPECT( - runFinishFunction(table65ElementsHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(table65ElementsHex).has_value() == false); BEAST_EXPECT(runFinishFunction(table2TablesHex).has_value() == false); BEAST_EXPECT(runFinishFunction(table0ElementsHex).value() == 1); BEAST_EXPECT(runFinishFunction(tableUintMaxHex).has_value() == false); @@ -727,32 +644,19 @@ struct Wasm_test : public beast::unit_test::suite testWasmProposal() { testcase("Wasm disabled proposal tests"); - BEAST_EXPECT( - runFinishFunction(proposalMutableGlobalHex).has_value() == false); - BEAST_EXPECT( - runFinishFunction(proposalGcStructNewHex).has_value() == false); - BEAST_EXPECT( - runFinishFunction(proposalMultiValueHex).has_value() == false); - BEAST_EXPECT( - runFinishFunction(proposalSignExtHex).has_value() == false); - BEAST_EXPECT( - runFinishFunction(proposalFloatToIntHex).has_value() == false); - BEAST_EXPECT( - runFinishFunction(proposalBulkMemoryHex).has_value() == false); - BEAST_EXPECT( - runFinishFunction(proposalRefTypesHex).has_value() == false); - BEAST_EXPECT( - runFinishFunction(proposalTailCallHex).has_value() == false); - BEAST_EXPECT( - runFinishFunction(proposalExtendedConstHex).has_value() == false); - BEAST_EXPECT( - runFinishFunction(proposalMultiMemoryHex).has_value() == false); - BEAST_EXPECT( - runFinishFunction(proposalCustomPageSizesHex).has_value() == false); - BEAST_EXPECT( - runFinishFunction(proposalMemory64Hex).has_value() == false); - BEAST_EXPECT( - runFinishFunction(proposalWideArithmeticHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(proposalMutableGlobalHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(proposalGcStructNewHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(proposalMultiValueHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(proposalSignExtHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(proposalFloatToIntHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(proposalBulkMemoryHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(proposalRefTypesHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(proposalTailCallHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(proposalExtendedConstHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(proposalMultiMemoryHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(proposalCustomPageSizesHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(proposalMemory64Hex).has_value() == false); + BEAST_EXPECT(runFinishFunction(proposalWideArithmeticHex).has_value() == false); } void @@ -760,13 +664,10 @@ struct Wasm_test : public beast::unit_test::suite { testcase("Wasm trap tests"); BEAST_EXPECT(runFinishFunction(trapDivideBy0Hex).has_value() == false); - BEAST_EXPECT( - runFinishFunction(trapIntOverflowHex).has_value() == false); - BEAST_EXPECT( - runFinishFunction(trapUnreachableHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(trapIntOverflowHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(trapUnreachableHex).has_value() == false); BEAST_EXPECT(runFinishFunction(trapNullCallHex).has_value() == false); - BEAST_EXPECT( - runFinishFunction(trapFuncSigMismatchHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(trapFuncSigMismatchHex).has_value() == false); } void @@ -782,21 +683,15 @@ struct Wasm_test : public beast::unit_test::suite { testcase("Wasm Section Corruption tests"); BEAST_EXPECT(runFinishFunction(badMagicNumberHex).has_value() == false); - BEAST_EXPECT( - runFinishFunction(badVersionNumberHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(badVersionNumberHex).has_value() == false); BEAST_EXPECT(runFinishFunction(lyingHeaderHex).has_value() == false); - BEAST_EXPECT( - runFinishFunction(neverEndingNumberHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(neverEndingNumberHex).has_value() == false); BEAST_EXPECT(runFinishFunction(vectorLieHex).has_value() == false); - BEAST_EXPECT( - runFinishFunction(sectionOrderingHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(sectionOrderingHex).has_value() == false); BEAST_EXPECT(runFinishFunction(ghostPayloadHex).has_value() == false); - BEAST_EXPECT( - runFinishFunction(junkAfterSectionHex).has_value() == false); - BEAST_EXPECT( - runFinishFunction(invalidSectionIdHex).has_value() == false); - BEAST_EXPECT( - runFinishFunction(localVariableBombHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(junkAfterSectionHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(invalidSectionIdHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(localVariableBombHex).has_value() == false); } void @@ -812,22 +707,11 @@ struct Wasm_test : public beast::unit_test::suite std::shared_ptr imports(std::make_shared()); auto& engine = WasmEngine::instance(); - auto checkRes = engine.check( - startLoopWasm, "finish", {}, imports, hfs, env.journal); - BEAST_EXPECTS( - checkRes == tesSUCCESS, std::to_string(TERtoInt(checkRes))); + auto checkRes = engine.check(startLoopWasm, "finish", {}, imports, hfs, env.journal); + BEAST_EXPECTS(checkRes == tesSUCCESS, std::to_string(TERtoInt(checkRes))); - auto re = engine.run( - startLoopWasm, - ESCROW_FUNCTION_NAME, - {}, - imports, - hfs, - 1'000'000, - env.journal); - BEAST_EXPECTS( - re.error() == tecFAILED_PROCESSING, - std::to_string(TERtoInt(re.error()))); + auto re = engine.run(startLoopWasm, ESCROW_FUNCTION_NAME, {}, imports, hfs, 1'000'000, env.journal); + BEAST_EXPECTS(re.error() == tecFAILED_PROCESSING, std::to_string(TERtoInt(re.error()))); } void @@ -846,13 +730,10 @@ struct Wasm_test : public beast::unit_test::suite // std::shared_ptr imports(std::make_shared()); uint8_t buf1[8] = {7, 8, 9, 10, 11, 12, 13, 14}; { // forged "allocate" return valid address - std::vector params = { - {.type = WT_U8V, - .of = {.u8v = {.d = buf1, .sz = sizeof(buf1)}}}}; + std::vector params = {{.type = WT_U8V, .of = {.u8v = {.d = buf1, .sz = sizeof(buf1)}}}}; auto& engine = WasmEngine::instance(); - auto re = engine.run( - badAllocWasm, "test", params, {}, hfs, 1'000'000, env.journal); + auto re = engine.run(badAllocWasm, "test", params, {}, hfs, 1'000'000, env.journal); if (BEAST_EXPECT(re)) { BEAST_EXPECTS(re->result == 7, std::to_string(re->result)); @@ -861,44 +742,32 @@ struct Wasm_test : public beast::unit_test::suite } { // return 0 whithout calling wasm - std::vector params = { - {.type = WT_U8V, .of = {.u8v = {.d = buf1, .sz = 0}}}}; + std::vector params = {{.type = WT_U8V, .of = {.u8v = {.d = buf1, .sz = 0}}}}; auto& engine = WasmEngine::instance(); - auto re = engine.run( - badAllocWasm, "test", params, {}, hfs, 1'000'000, env.journal); - BEAST_EXPECT(!re) && - BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); + auto re = engine.run(badAllocWasm, "test", params, {}, hfs, 1'000'000, env.journal); + BEAST_EXPECT(!re) && BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); } { // forged "allocate" return 8Mb (which is more than memory limit) - std::vector params = { - {.type = WT_U8V, .of = {.u8v = {.d = buf1, .sz = 1}}}}; + std::vector params = {{.type = WT_U8V, .of = {.u8v = {.d = buf1, .sz = 1}}}}; auto& engine = WasmEngine::instance(); - auto re = engine.run( - badAllocWasm, "test", params, {}, hfs, 1'000'000, env.journal); - BEAST_EXPECT(!re) && - BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); + auto re = engine.run(badAllocWasm, "test", params, {}, hfs, 1'000'000, env.journal); + BEAST_EXPECT(!re) && BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); } { // forged "allocate" return 0 - std::vector params = { - {.type = WT_U8V, .of = {.u8v = {.d = buf1, .sz = 2}}}}; + std::vector params = {{.type = WT_U8V, .of = {.u8v = {.d = buf1, .sz = 2}}}}; auto& engine = WasmEngine::instance(); - auto re = engine.run( - badAllocWasm, "test", params, {}, hfs, 1'000'000, env.journal); - BEAST_EXPECT(!re) && - BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); + auto re = engine.run(badAllocWasm, "test", params, {}, hfs, 1'000'000, env.journal); + BEAST_EXPECT(!re) && BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); } { // forged "allocate" return -1 - std::vector params = { - {.type = WT_U8V, .of = {.u8v = {.d = buf1, .sz = 3}}}}; + std::vector params = {{.type = WT_U8V, .of = {.u8v = {.d = buf1, .sz = 3}}}}; auto& engine = WasmEngine::instance(); - auto re = engine.run( - badAllocWasm, "test", params, {}, hfs, 1'000'000, env.journal); + auto re = engine.run(badAllocWasm, "test", params, {}, hfs, 1'000'000, env.journal); - BEAST_EXPECT(!re) && - BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); + BEAST_EXPECT(!re) && BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); } { @@ -913,9 +782,7 @@ struct Wasm_test : public beast::unit_test::suite { what = e.what(); } - BEAST_EXPECT( - what.find("can't allocate memory, size: 2147483648") != - std::string::npos); + BEAST_EXPECT(what.find("can't allocate memory, size: 2147483648") != std::string::npos); } env.close(); @@ -939,8 +806,7 @@ struct Wasm_test : public beast::unit_test::suite // Can be checked through codecov auto& engine = WasmEngine::instance(); - auto re = engine.run( - badAlignWasm, "test", {}, imports, hfs, 1'000'000, env.journal); + auto re = engine.run(badAlignWasm, "test", {}, imports, hfs, 1'000'000, env.journal); BEAST_EXPECT(re && re->result == 0xbab88d46); } @@ -964,8 +830,7 @@ struct Wasm_test : public beast::unit_test::suite "071302066d656d6f727902000666696e69736800000a0a01" "08004280808080100b"; auto const wasm = hexToBytes(wasmHex); - auto const re = - runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); + auto const re = runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); BEAST_EXPECT(!re); } @@ -981,8 +846,7 @@ struct Wasm_test : public beast::unit_test::suite "0061736d01000000010401600000030201000503010001071302066d656d6f" "727902000666696e69736800000a050103000f0b"; auto const wasm = hexToBytes(wasmHex); - auto const re = - runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); + auto const re = runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); BEAST_EXPECT(!re); } @@ -997,8 +861,7 @@ struct Wasm_test : public beast::unit_test::suite "6d6f727902000666696e69736800000a10010e0041808080800141ff818080" "010b"; auto const wasm = hexToBytes(wasmHex); - auto const re = - runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); + auto const re = runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); BEAST_EXPECT(!re); } } diff --git a/src/test/app/wasm_fixtures/b58.c b/src/test/app/wasm_fixtures/b58.c index 00b6178ec0..56defdbb32 100644 --- a/src/test/app/wasm_fixtures/b58.c +++ b/src/test/app/wasm_fixtures/b58.c @@ -1,7 +1,6 @@ #include -static char const b58digits_ordered[] = - "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; +static char const b58digits_ordered[] = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; uint8_t e_data[32 * 1024]; diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index e826f621c3..6bff452705 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -1277,8 +1277,7 @@ extern std::string const vectorLieHex = "0061736d010000000105ffffffff0f"; // data += b'\x0a\x02\x00\x0b' // # Function Section (ID 3) - usually 3rd // data += b'\x03\x02\x00\x00' -extern std::string const sectionOrderingHex = - "0061736d010000000a02000b03020000"; +extern std::string const sectionOrderingHex = "0061736d010000000a02000b03020000"; // Corruption Test: ghostPayload // Scenario: Valid headers, but file is truncated in the middle of a payload. @@ -1305,8 +1304,7 @@ extern std::string const ghostPayloadHex = "0061736d01000000010a0160"; // data += b'\x01\x60\x00\x00' // # Remaining 6 bytes are junk padding within the section size // data += b'\x00' * 6 -extern std::string const junkAfterSectionHex = - "0061736d01000000010a01600000000000000000"; +extern std::string const junkAfterSectionHex = "0061736d01000000010a01600000000000000000"; // Corruption Test: invalidSectionId // Scenario: A section ID that doesn't exist (0xFF). @@ -1337,8 +1335,7 @@ extern std::string const invalidSectionIdHex = "0061736d01000000ff0100"; // data += b'\xff\xff\xff\xff\x0f\x7f' // # Instruction: end (0x0b) // data += b'\x0b' -extern std::string const localVariableBombHex = - "0061736d01000000010401600000030201000a0f010d01ffffffff0f7f0b"; +extern std::string const localVariableBombHex = "0061736d01000000010401600000030201000a0f010d01ffffffff0f7f0b"; extern std::string const infiniteLoopWasmHex = "0061736d010000000108026000006000017f030302000105030100020638097f004180080b" diff --git a/src/test/app/wasm_fixtures/sha512Pure.c b/src/test/app/wasm_fixtures/sha512Pure.c index fe82aa2a65..2c736bb218 100644 --- a/src/test/app/wasm_fixtures/sha512Pure.c +++ b/src/test/app/wasm_fixtures/sha512Pure.c @@ -2,33 +2,22 @@ #include static uint64_t const K512[] = { - 0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, - 0xe9b5dba58189dbbc, 0x3956c25bf348b538, 0x59f111f1b605d019, - 0x923f82a4af194f9b, 0xab1c5ed5da6d8118, 0xd807aa98a3030242, - 0x12835b0145706fbe, 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2, - 0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235, - 0xc19bf174cf692694, 0xe49b69c19ef14ad2, 0xefbe4786384f25e3, - 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65, 0x2de92c6f592b0275, - 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5, - 0x983e5152ee66dfab, 0xa831c66d2db43210, 0xb00327c898fb213f, - 0xbf597fc7beef0ee4, 0xc6e00bf33da88fc2, 0xd5a79147930aa725, - 0x06ca6351e003826f, 0x142929670a0e6e70, 0x27b70a8546d22ffc, - 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed, 0x53380d139d95b3df, - 0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, - 0x92722c851482353b, 0xa2bfe8a14cf10364, 0xa81a664bbc423001, - 0xc24b8b70d0f89791, 0xc76c51a30654be30, 0xd192e819d6ef5218, - 0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8, - 0x19a4c116b8d2d0c8, 0x1e376c085141ab53, 0x2748774cdf8eeb99, - 0x34b0bcb5e19b48a8, 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, - 0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3, 0x748f82ee5defb2fc, - 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec, - 0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, - 0xc67178f2e372532b, 0xca273eceea26619c, 0xd186b8c721c0c207, - 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178, 0x06f067aa72176fba, - 0x0a637dc5a2c898a6, 0x113f9804bef90dae, 0x1b710b35131c471b, - 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc, - 0x431d67c49c100d4c, 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, - 0x5fcb6fab3ad6faec, 0x6c44198c4a475817}; + 0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc, 0x3956c25bf348b538, + 0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118, 0xd807aa98a3030242, 0x12835b0145706fbe, + 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2, 0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235, + 0xc19bf174cf692694, 0xe49b69c19ef14ad2, 0xefbe4786384f25e3, 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65, + 0x2de92c6f592b0275, 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5, 0x983e5152ee66dfab, + 0xa831c66d2db43210, 0xb00327c898fb213f, 0xbf597fc7beef0ee4, 0xc6e00bf33da88fc2, 0xd5a79147930aa725, + 0x06ca6351e003826f, 0x142929670a0e6e70, 0x27b70a8546d22ffc, 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed, + 0x53380d139d95b3df, 0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, 0x92722c851482353b, + 0xa2bfe8a14cf10364, 0xa81a664bbc423001, 0xc24b8b70d0f89791, 0xc76c51a30654be30, 0xd192e819d6ef5218, + 0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8, 0x19a4c116b8d2d0c8, 0x1e376c085141ab53, + 0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8, 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, 0x5b9cca4f7763e373, + 0x682e6ff3d6b2b8a3, 0x748f82ee5defb2fc, 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec, + 0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, 0xc67178f2e372532b, 0xca273eceea26619c, + 0xd186b8c721c0c207, 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178, 0x06f067aa72176fba, 0x0a637dc5a2c898a6, + 0x113f9804bef90dae, 0x1b710b35131c471b, 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc, + 0x431d67c49c100d4c, 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, 0x5fcb6fab3ad6faec, 0x6c44198c4a475817}; #define ROTATE(x, y) (((x) >> (y)) | ((x) << (64 - (y)))) #define Sigma0(x) (ROTATE((x), 28) ^ ROTATE((x), 34) ^ ROTATE((x), 39)) @@ -81,9 +70,8 @@ sha512_process(uint8_t const* data, int32_t length) unsigned i; for (i = 0; i < 16; i++) { - X[i] = B2U64(data[0], 56) | B2U64(data[1], 48) | - B2U64(data[2], 40) | B2U64(data[3], 32) | B2U64(data[4], 24) | - B2U64(data[5], 16) | B2U64(data[6], 8) | B2U64(data[7], 0); + X[i] = B2U64(data[0], 56) | B2U64(data[1], 48) | B2U64(data[2], 40) | B2U64(data[3], 32) | + B2U64(data[4], 24) | B2U64(data[5], 16) | B2U64(data[6], 8) | B2U64(data[7], 0); data += 8; T1 = h; diff --git a/src/test/basics/Number_test.cpp b/src/test/basics/Number_test.cpp index b7170b9e00..5838a98a15 100644 --- a/src/test/basics/Number_test.cpp +++ b/src/test/basics/Number_test.cpp @@ -1361,25 +1361,11 @@ public: {Number{5625, -4}, Number{-2'498'774'732'165'998, -16}}}); auto const cLarge = std::to_array( - {{Number{ - false, Number::maxMantissa() - 9, -1, Number::normalized{}}, - Number{ - false, - 1'746'901'684'478'673'451ll, - -17, - Number::normalized{}}}, + {{Number{false, Number::maxMantissa() - 9, -1, Number::normalized{}}, + Number{false, 1'746'901'684'478'673'451ll, -17, Number::normalized{}}}, {Number{false, Number::maxMantissa() - 9, 0, Number::normalized{}}, - Number{ - false, - 1'846'901'684'478'673'451ll, - -17, - Number::normalized{}}}, - {Number{Number::maxRep}, - Number{ - false, - 1'861'728'612'932'620'011ll, - -17, - Number::normalized{}}}}); + Number{false, 1'846'901'684'478'673'451ll, -17, Number::normalized{}}}, + {Number{Number::maxRep}, Number{false, 1'861'728'612'932'620'011ll, -17, Number::normalized{}}}}); if (Number::getMantissaScale() == MantissaRange::small) { diff --git a/src/xrpld/app/wasm/HostFunc.h b/src/xrpld/app/wasm/HostFunc.h index 0ee4a615ce..c49e58eb38 100644 --- a/src/xrpld/app/wasm/HostFunc.h +++ b/src/xrpld/app/wasm/HostFunc.h @@ -88,9 +88,7 @@ struct HostFunctions { beast::Journal j_; - HostFunctions( - beast::Journal j = beast::Journal{beast::Journal::getNullSink()}) - : j_(j) + HostFunctions(beast::Journal j = beast::Journal{beast::Journal::getNullSink()}) : j_(j) { } @@ -245,10 +243,7 @@ struct HostFunctions } virtual Expected - checkSignature( - Slice const& message, - Slice const& signature, - Slice const& pubkey) + checkSignature(Slice const& message, Slice const& signature, Slice const& pubkey) { return Unexpected(HostFunctionError::INTERNAL); } @@ -278,10 +273,7 @@ struct HostFunctions } virtual Expected - credentialKeylet( - AccountID const& subject, - AccountID const& issuer, - Slice const& credentialType) + credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) { return Unexpected(HostFunctionError::INTERNAL); } @@ -311,10 +303,7 @@ struct HostFunctions } virtual Expected - lineKeylet( - AccountID const& account1, - AccountID const& account2, - Currency const& currency) + lineKeylet(AccountID const& account1, AccountID const& account2, Currency const& currency) { return Unexpected(HostFunctionError::INTERNAL); } @@ -350,10 +339,7 @@ struct HostFunctions } virtual Expected - paychanKeylet( - AccountID const& account, - AccountID const& destination, - std::uint32_t seq) + paychanKeylet(AccountID const& account, AccountID const& destination, std::uint32_t seq) { return Unexpected(HostFunctionError::INTERNAL); } diff --git a/src/xrpld/app/wasm/HostFuncImpl.h b/src/xrpld/app/wasm/HostFuncImpl.h index 4acdc85dfb..b5ce367004 100644 --- a/src/xrpld/app/wasm/HostFuncImpl.h +++ b/src/xrpld/app/wasm/HostFuncImpl.h @@ -52,8 +52,7 @@ class WasmHostFunctionsImpl : public HostFunctions return; auto j = getJournal().trace(); #endif - j << "WasmTrace[" << to_short_string(leKey.key) << "]: " << msg << " " - << dataFn(); + j << "WasmTrace[" << to_short_string(leKey.key) << "]: " << msg << " " << dataFn(); #ifdef DEBUG_OUTPUT j << std::endl; @@ -61,8 +60,7 @@ class WasmHostFunctionsImpl : public HostFunctions } public: - WasmHostFunctionsImpl(ApplyContext& ct, Keylet const& leKey) - : HostFunctions(ct.journal), ctx(ct), leKey(leKey) + WasmHostFunctionsImpl(ApplyContext& ct, Keylet const& leKey) : HostFunctions(ct.journal), ctx(ct), leKey(leKey) { } @@ -145,10 +143,7 @@ public: updateData(Slice const& data) override; Expected - checkSignature( - Slice const& message, - Slice const& signature, - Slice const& pubkey) override; + checkSignature(Slice const& message, Slice const& signature, Slice const& pubkey) override; Expected computeSha512HalfHash(Slice const& data) override; @@ -163,30 +158,22 @@ public: checkKeylet(AccountID const& account, std::uint32_t seq) override; Expected - credentialKeylet( - AccountID const& subject, - AccountID const& issuer, - Slice const& credentialType) override; + credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) override; Expected didKeylet(AccountID const& account) override; Expected - delegateKeylet(AccountID const& account, AccountID const& authorize) - override; + delegateKeylet(AccountID const& account, AccountID const& authorize) override; Expected - depositPreauthKeylet(AccountID const& account, AccountID const& authorize) - override; + depositPreauthKeylet(AccountID const& account, AccountID const& authorize) override; Expected escrowKeylet(AccountID const& account, std::uint32_t seq) override; Expected - lineKeylet( - AccountID const& account1, - AccountID const& account2, - Currency const& currency) override; + lineKeylet(AccountID const& account1, AccountID const& account2, Currency const& currency) override; Expected mptIssuanceKeylet(AccountID const& issuer, std::uint32_t seq) override; @@ -204,14 +191,10 @@ public: oracleKeylet(AccountID const& account, std::uint32_t docId) override; Expected - paychanKeylet( - AccountID const& account, - AccountID const& destination, - std::uint32_t seq) override; + paychanKeylet(AccountID const& account, AccountID const& destination, std::uint32_t seq) override; Expected - permissionedDomainKeylet(AccountID const& account, std::uint32_t seq) - override; + permissionedDomainKeylet(AccountID const& account, std::uint32_t seq) override; Expected signersKeylet(AccountID const& account) override; @@ -247,8 +230,7 @@ public: traceNum(std::string_view const& msg, int64_t data) override; Expected - traceAccount(std::string_view const& msg, AccountID const& account) - override; + traceAccount(std::string_view const& msg, AccountID const& account) override; Expected traceFloat(std::string_view const& msg, Slice const& data) override; diff --git a/src/xrpld/app/wasm/HostFuncWrapper.h b/src/xrpld/app/wasm/HostFuncWrapper.h index 745bbe9a2c..8555fd69a1 100644 --- a/src/xrpld/app/wasm/HostFuncWrapper.h +++ b/src/xrpld/app/wasm/HostFuncWrapper.h @@ -6,399 +6,191 @@ namespace xrpl { using getLedgerSqn_proto = int32_t(); wasm_trap_t* -getLedgerSqn_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +getLedgerSqn_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); using getParentLedgerTime_proto = int32_t(); wasm_trap_t* -getParentLedgerTime_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +getParentLedgerTime_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); using getParentLedgerHash_proto = int32_t(uint8_t*, int32_t); wasm_trap_t* -getParentLedgerHash_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +getParentLedgerHash_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); using getBaseFee_proto = int32_t(); wasm_trap_t* -getBaseFee_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +getBaseFee_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); using isAmendmentEnabled_proto = int32_t(uint8_t const*, int32_t); wasm_trap_t* -isAmendmentEnabled_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +isAmendmentEnabled_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); using cacheLedgerObj_proto = int32_t(uint8_t const*, int32_t, int32_t); wasm_trap_t* -cacheLedgerObj_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +cacheLedgerObj_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); using getTxField_proto = int32_t(int32_t, uint8_t*, int32_t); wasm_trap_t* -getTxField_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +getTxField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); using getCurrentLedgerObjField_proto = int32_t(int32_t, uint8_t*, int32_t); wasm_trap_t* -getCurrentLedgerObjField_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +getCurrentLedgerObjField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); using getLedgerObjField_proto = int32_t(int32_t, int32_t, uint8_t*, int32_t); wasm_trap_t* -getLedgerObjField_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +getLedgerObjField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using getTxNestedField_proto = - int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); +using getTxNestedField_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* -getTxNestedField_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +getTxNestedField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using getCurrentLedgerObjNestedField_proto = - int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); +using getCurrentLedgerObjNestedField_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* -getCurrentLedgerObjNestedField_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +getCurrentLedgerObjNestedField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using getLedgerObjNestedField_proto = - int32_t(int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); +using getLedgerObjNestedField_proto = int32_t(int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* -getLedgerObjNestedField_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +getLedgerObjNestedField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); using getTxArrayLen_proto = int32_t(int32_t); wasm_trap_t* -getTxArrayLen_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +getTxArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); using getCurrentLedgerObjArrayLen_proto = int32_t(int32_t); wasm_trap_t* -getCurrentLedgerObjArrayLen_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +getCurrentLedgerObjArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); using getLedgerObjArrayLen_proto = int32_t(int32_t, int32_t); wasm_trap_t* -getLedgerObjArrayLen_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +getLedgerObjArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); using getTxNestedArrayLen_proto = int32_t(uint8_t const*, int32_t); wasm_trap_t* -getTxNestedArrayLen_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +getTxNestedArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using getCurrentLedgerObjNestedArrayLen_proto = - int32_t(uint8_t const*, int32_t); +using getCurrentLedgerObjNestedArrayLen_proto = int32_t(uint8_t const*, int32_t); wasm_trap_t* -getCurrentLedgerObjNestedArrayLen_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +getCurrentLedgerObjNestedArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using getLedgerObjNestedArrayLen_proto = - int32_t(int32_t, uint8_t const*, int32_t); +using getLedgerObjNestedArrayLen_proto = int32_t(int32_t, uint8_t const*, int32_t); wasm_trap_t* -getLedgerObjNestedArrayLen_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +getLedgerObjNestedArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); using updateData_proto = int32_t(uint8_t const*, int32_t); wasm_trap_t* -updateData_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +updateData_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using checkSignature_proto = int32_t( - uint8_t const*, - int32_t, - uint8_t const*, - int32_t, - uint8_t const*, - int32_t); +using checkSignature_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t const*, int32_t); wasm_trap_t* -checkSignature_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +checkSignature_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using computeSha512HalfHash_proto = - int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); +using computeSha512HalfHash_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* -computeSha512HalfHash_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +computeSha512HalfHash_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); using accountKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* -accountKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +accountKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using ammKeylet_proto = int32_t( - uint8_t const*, - int32_t, - uint8_t const*, - int32_t, - uint8_t*, - int32_t); +using ammKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* -ammKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +ammKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using checkKeylet_proto = - int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using checkKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); wasm_trap_t* -checkKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +checkKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using credentialKeylet_proto = int32_t( - uint8_t const*, - int32_t, - uint8_t const*, - int32_t, - uint8_t const*, - int32_t, - uint8_t*, - int32_t); +using credentialKeylet_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* -credentialKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +credentialKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using delegateKeylet_proto = int32_t( - uint8_t const*, - int32_t, - uint8_t const*, - int32_t, - uint8_t*, - int32_t); +using delegateKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* -delegateKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +delegateKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using depositPreauthKeylet_proto = int32_t( - uint8_t const*, - int32_t, - uint8_t const*, - int32_t, - uint8_t*, - int32_t); +using depositPreauthKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* -depositPreauthKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +depositPreauthKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); using didKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* -didKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +didKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using escrowKeylet_proto = - int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using escrowKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); wasm_trap_t* -escrowKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +escrowKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using lineKeylet_proto = int32_t( - uint8_t const*, - int32_t, - uint8_t const*, - int32_t, - uint8_t const*, - int32_t, - uint8_t*, - int32_t); +using lineKeylet_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* -lineKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +lineKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using mptIssuanceKeylet_proto = - int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using mptIssuanceKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); wasm_trap_t* -mptIssuanceKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +mptIssuanceKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using mptokenKeylet_proto = int32_t( - uint8_t const*, - int32_t, - uint8_t const*, - int32_t, - uint8_t*, - int32_t); +using mptokenKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* -mptokenKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +mptokenKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using nftOfferKeylet_proto = - int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using nftOfferKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); wasm_trap_t* -nftOfferKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +nftOfferKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using offerKeylet_proto = - int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using offerKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); wasm_trap_t* -offerKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +offerKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using oracleKeylet_proto = - int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using oracleKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); wasm_trap_t* -oracleKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +oracleKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using paychanKeylet_proto = int32_t( - uint8_t const*, - int32_t, - uint8_t const*, - int32_t, - int32_t, - uint8_t*, - int32_t); +using paychanKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); wasm_trap_t* -paychanKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +paychanKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using permissionedDomainKeylet_proto = - int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using permissionedDomainKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); wasm_trap_t* -permissionedDomainKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +permissionedDomainKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); using signersKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* -signersKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +signersKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using ticketKeylet_proto = - int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using ticketKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); wasm_trap_t* -ticketKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +ticketKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using vaultKeylet_proto = - int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using vaultKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); wasm_trap_t* -vaultKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +vaultKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using getNFT_proto = int32_t( - uint8_t const*, - int32_t, - uint8_t const*, - int32_t, - uint8_t*, - int32_t); +using getNFT_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* getNFT_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); using getNFTIssuer_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* -getNFTIssuer_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +getNFTIssuer_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); using getNFTTaxon_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* -getNFTTaxon_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +getNFTTaxon_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); using getNFTFlags_proto = int32_t(uint8_t const*, int32_t); wasm_trap_t* -getNFTFlags_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +getNFTFlags_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); using getNFTTransferFee_proto = int32_t(uint8_t const*, int32_t); wasm_trap_t* -getNFTTransferFee_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +getNFTTransferFee_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); using getNFTSerial_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* -getNFTSerial_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +getNFTSerial_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using trace_proto = - int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, int32_t); +using trace_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, int32_t); wasm_trap_t* trace_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); @@ -406,128 +198,59 @@ using traceNum_proto = int32_t(uint8_t const*, int32_t, int64_t); wasm_trap_t* traceNum_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using traceAccount_proto = - int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t); +using traceAccount_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t); wasm_trap_t* -traceAccount_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +traceAccount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using traceFloat_proto = - int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t); +using traceFloat_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t); wasm_trap_t* -traceFloat_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +traceFloat_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using traceAmount_proto = - int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t); +using traceAmount_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t); wasm_trap_t* -traceAmount_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +traceAmount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); using floatFromInt_proto = int32_t(int64_t, uint8_t*, int32_t, int32_t); wasm_trap_t* -floatFromInt_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +floatFromInt_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using floatFromUint_proto = - int32_t(uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); +using floatFromUint_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); wasm_trap_t* -floatFromUint_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +floatFromUint_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); using floatSet_proto = int32_t(int32_t, int64_t, uint8_t*, int32_t, int32_t); wasm_trap_t* floatSet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using floatCompare_proto = - int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t); +using floatCompare_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t); wasm_trap_t* -floatCompare_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +floatCompare_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using floatAdd_proto = int32_t( - uint8_t const*, - int32_t, - uint8_t const*, - int32_t, - uint8_t*, - int32_t, - int32_t); +using floatAdd_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); wasm_trap_t* floatAdd_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using floatSubtract_proto = int32_t( - uint8_t const*, - int32_t, - uint8_t const*, - int32_t, - uint8_t*, - int32_t, - int32_t); +using floatSubtract_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); wasm_trap_t* -floatSubtract_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +floatSubtract_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using floatMultiply_proto = int32_t( - uint8_t const*, - int32_t, - uint8_t const*, - int32_t, - uint8_t*, - int32_t, - int32_t); +using floatMultiply_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); wasm_trap_t* -floatMultiply_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +floatMultiply_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using floatDivide_proto = int32_t( - uint8_t const*, - int32_t, - uint8_t const*, - int32_t, - uint8_t*, - int32_t, - int32_t); +using floatDivide_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); wasm_trap_t* -floatDivide_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +floatDivide_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using floatRoot_proto = - int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t, int32_t); +using floatRoot_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t, int32_t); wasm_trap_t* -floatRoot_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +floatRoot_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using floatPower_proto = - int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t, int32_t); +using floatPower_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t, int32_t); wasm_trap_t* -floatPower_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +floatPower_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using floatLog_proto = - int32_t(uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); +using floatLog_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); wasm_trap_t* floatLog_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); diff --git a/src/xrpld/app/wasm/ParamsHelper.h b/src/xrpld/app/wasm/ParamsHelper.h index a7546ce092..90ecb4caa5 100644 --- a/src/xrpld/app/wasm/ParamsHelper.h +++ b/src/xrpld/app/wasm/ParamsHelper.h @@ -50,13 +50,9 @@ struct WasmImportFunc typedef std::pair WasmUserData; typedef std::vector ImportVec; -#define WASM_IMPORT_FUNC(v, f, ...) \ - WasmImpFunc( \ - v, #f, reinterpret_cast(&f##_wrap), ##__VA_ARGS__) +#define WASM_IMPORT_FUNC(v, f, ...) WasmImpFunc(v, #f, reinterpret_cast(&f##_wrap), ##__VA_ARGS__) -#define WASM_IMPORT_FUNC2(v, f, n, ...) \ - WasmImpFunc( \ - v, n, reinterpret_cast(&f##_wrap), ##__VA_ARGS__) +#define WASM_IMPORT_FUNC2(v, f, n, ...) WasmImpFunc(v, n, reinterpret_cast(&f##_wrap), ##__VA_ARGS__) template void @@ -91,8 +87,7 @@ WasmImpRet(WasmImportFunc& e) e.result = WT_I64; else if constexpr (std::is_void_v) e.result.reset(); -#if (defined(__GNUC__) && (__GNUC__ >= 14)) || \ - ((defined(__clang_major__)) && (__clang_major__ >= 18)) +#if (defined(__GNUC__) && (__GNUC__ >= 14)) || ((defined(__clang_major__)) && (__clang_major__ >= 18)) else static_assert(false, "Unsupported return type"); #endif @@ -113,12 +108,7 @@ WasmImpFuncHelper(WasmImportFunc& e) template void -WasmImpFunc( - ImportVec& v, - std::string_view imp_name, - void* f_wrap, - void* data = nullptr, - uint32_t gas = 0) +WasmImpFunc(ImportVec& v, std::string_view imp_name, void* f_wrap, void* data = nullptr, uint32_t gas = 0) { WasmImportFunc e; e.name = imp_name; @@ -185,11 +175,7 @@ wasmParamsHlp(std::vector& v, std::int64_t p, Types&&... args) template inline void -wasmParamsHlp( - std::vector& v, - std::uint8_t const* dt, - std::int32_t sz, - Types&&... args) +wasmParamsHlp(std::vector& v, std::uint8_t const* dt, std::int32_t sz, Types&&... args) { v.push_back({.type = WT_U8V, .of = {.u8v = {.d = dt, .sz = sz}}}); wasmParamsHlp(v, std::forward(args)...); @@ -200,27 +186,17 @@ inline void wasmParamsHlp(std::vector& v, Bytes const& p, Types&&... args) { if (p.size() > std::numeric_limits::max()) - throw std::runtime_error( - "can't allocate memory, size: " + - std::to_string(p.size())); // LCOV_EXCL_LINE + throw std::runtime_error("can't allocate memory, size: " + std::to_string(p.size())); // LCOV_EXCL_LINE - wasmParamsHlp( - v, - p.data(), - static_cast(p.size()), - std::forward(args)...); + wasmParamsHlp(v, p.data(), static_cast(p.size()), std::forward(args)...); } template inline void -wasmParamsHlp( - std::vector& v, - std::string_view const& p, - Types&&... args) +wasmParamsHlp(std::vector& v, std::string_view const& p, Types&&... args) { if (p.size() > std::numeric_limits::max()) - throw std::runtime_error( - "can't allocate memory, size: " + std::to_string(p.size())); + throw std::runtime_error("can't allocate memory, size: " + std::to_string(p.size())); wasmParamsHlp( v, @@ -234,9 +210,7 @@ inline void wasmParamsHlp(std::vector& v, std::string const& p, Types&&... args) { if (p.size() > std::numeric_limits::max()) - throw std::runtime_error( - "can't allocate memory, size: " + - std::to_string(p.size())); // LCOV_EXCL_LINE + throw std::runtime_error("can't allocate memory, size: " + std::to_string(p.size())); // LCOV_EXCL_LINE wasmParamsHlp( v, diff --git a/src/xrpld/app/wasm/WasmiVM.h b/src/xrpld/app/wasm/WasmiVM.h index c64e7951c0..d4ea0bfaa9 100644 --- a/src/xrpld/app/wasm/WasmiVM.h +++ b/src/xrpld/app/wasm/WasmiVM.h @@ -60,26 +60,13 @@ struct WasmVec } }; -using WasmValtypeVec = WasmVec< - wasm_valtype_vec_t, - &wasm_valtype_vec_new_uninitialized, - &wasm_valtype_vec_delete>; -using WasmValVec = WasmVec< - wasm_val_vec_t, - &wasm_val_vec_new_uninitialized, - &wasm_val_vec_delete>; -using WasmExternVec = WasmVec< - wasm_extern_vec_t, - &wasm_extern_vec_new_uninitialized, - &wasm_extern_vec_delete>; -using WasmExporttypeVec = WasmVec< - wasm_exporttype_vec_t, - &wasm_exporttype_vec_new_uninitialized, - &wasm_exporttype_vec_delete>; -using WasmImporttypeVec = WasmVec< - wasm_importtype_vec_t, - &wasm_importtype_vec_new_uninitialized, - &wasm_importtype_vec_delete>; +using WasmValtypeVec = WasmVec; +using WasmValVec = WasmVec; +using WasmExternVec = WasmVec; +using WasmExporttypeVec = + WasmVec; +using WasmImporttypeVec = + WasmVec; struct WasmiResult { @@ -97,8 +84,7 @@ struct WasmiResult }; using ModulePtr = std::unique_ptr; -using InstancePtr = - std::unique_ptr; +using InstancePtr = std::unique_ptr; using EnginePtr = std::unique_ptr; using StorePtr = std::unique_ptr; @@ -114,12 +100,7 @@ struct InstanceWrapper private: static InstancePtr - init( - StorePtr& s, - ModulePtr& m, - WasmExternVec& expt, - WasmExternVec const& imports, - beast::Journal j); + init(StorePtr& s, ModulePtr& m, WasmExternVec& expt, WasmExternVec const& imports, beast::Journal j); public: InstanceWrapper(); @@ -129,19 +110,14 @@ public: InstanceWrapper& operator=(InstanceWrapper&& o); - InstanceWrapper( - StorePtr& s, - ModulePtr& m, - WasmExternVec const& imports, - beast::Journal j); + InstanceWrapper(StorePtr& s, ModulePtr& m, WasmExternVec const& imports, beast::Journal j); ~InstanceWrapper() = default; operator bool() const; FuncInfo - getFunc(std::string_view funcName, WasmExporttypeVec const& exportTypes) - const; + getFunc(std::string_view funcName, WasmExporttypeVec const& exportTypes) const; wmem getMem() const; @@ -260,17 +236,10 @@ private: allocate(int32_t size); Expected, TER> - runHlp( - Bytes const& wasmCode, - std::string_view funcName, - std::vector const& params, - int64_t gas); + runHlp(Bytes const& wasmCode, std::string_view funcName, std::vector const& params, int64_t gas); NotTEC - checkHlp( - Bytes const& wasmCode, - std::string_view funcName, - std::vector const& params); + checkHlp(Bytes const& wasmCode, std::string_view funcName, std::vector const& params); int addModule(Bytes const& wasmCode, bool instantiate, int64_t gas); @@ -292,9 +261,7 @@ private: convertParams(std::vector const& params); static int - compareParamTypes( - wasm_valtype_vec_t const* ftp, - std::vector const& p); + compareParamTypes(wasm_valtype_vec_t const* ftp, std::vector const& p); static void add_param(std::vector& in, int32_t p); @@ -315,36 +282,19 @@ private: template inline WasmiResult - call( - FuncInfo const& f, - std::vector& in, - std::int32_t p, - Types&&... args); + call(FuncInfo const& f, std::vector& in, std::int32_t p, Types&&... args); template inline WasmiResult - call( - FuncInfo const& f, - std::vector& in, - std::int64_t p, - Types&&... args); + call(FuncInfo const& f, std::vector& in, std::int64_t p, Types&&... args); template inline WasmiResult - call( - FuncInfo const& f, - std::vector& in, - uint8_t const* d, - int32_t sz, - Types&&... args); + call(FuncInfo const& f, std::vector& in, uint8_t const* d, int32_t sz, Types&&... args); template inline WasmiResult - call( - FuncInfo const& f, - std::vector& in, - Bytes const& p, - Types&&... args); + call(FuncInfo const& f, std::vector& in, Bytes const& p, Types&&... args); }; } // namespace xrpl diff --git a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp index c0c514129f..dfff35727f 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp @@ -25,10 +25,7 @@ WasmHostFunctionsImpl::updateData(Slice const& data) // ========================================================= Expected -WasmHostFunctionsImpl::checkSignature( - Slice const& message, - Slice const& signature, - Slice const& pubkey) +WasmHostFunctionsImpl::checkSignature(Slice const& message, Slice const& signature, Slice const& pubkey) { if (!publicKeyType(pubkey)) return Unexpected(HostFunctionError::INVALID_PARAMS); diff --git a/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp b/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp index 29a0dd545f..36231ec37d 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp @@ -23,8 +23,7 @@ protected: static_assert(wasmMinExponent < 0); - static uint64_t constexpr maxEncodedMantissa = - (1ull << (encodedMantissaBits + 1)) - 1; + static uint64_t constexpr maxEncodedMantissa = (1ull << (encodedMantissaBits + 1)) - 1; bool good_; @@ -44,16 +43,13 @@ public: if (!(v & STAmount::cIssuedCurrency)) return; - int32_t const e = - static_cast((v >> encodedMantissaBits) & 0xFFull); + int32_t const e = static_cast((v >> encodedMantissaBits) & 0xFFull); int32_t const decodedExponent = e + wasmMinExponent - 1; // e - 97 - if (decodedExponent < wasmMinExponent || - decodedExponent > wasmMaxExponent) + if (decodedExponent < wasmMinExponent || decodedExponent > wasmMaxExponent) return; int64_t const neg = (v & STAmount::cPositive) ? 1 : -1; - int64_t const m = - neg * static_cast(v & ((1ull << encodedMantissaBits) - 1)); + int64_t const m = neg * static_cast(v & ((1ull << encodedMantissaBits) - 1)); if (!m) return; @@ -89,8 +85,7 @@ public: good_ = true; } - Number2(Number const& n) - : Number2(n.mantissa(), n.exponent()) // ensure Number canonized + Number2(Number const& n) : Number2(n.mantissa(), n.exponent()) // ensure Number canonized { } @@ -132,8 +127,7 @@ public: } else if (absM > maxEncodedMantissa) { - return Unexpected( - HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_LINE + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_LINE } v |= absM; @@ -149,8 +143,7 @@ public: auto const data = msg.getData(); #ifdef DEBUG_OUTPUT - std::cout << "m: " << std::setw(20) << mantissa() - << ", e: " << std::setw(12) << exponent() << ", hex: "; + std::cout << "m: " << std::setw(20) << mantissa() << ", e: " << std::setw(12) << exponent() << ", hex: "; std::cout << std::hex << std::uppercase << std::setfill('0'); for (auto const& c : data) std::cout << std::setw(2) << (unsigned)c << " "; @@ -161,8 +154,7 @@ public: } }; -Bytes const Number2::floatNull = - {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; +Bytes const Number2::floatNull = {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; struct FloatState { @@ -170,13 +162,9 @@ struct FloatState MantissaRange::mantissa_scale oldScale_; bool good_; - FloatState(int32_t mode) - : oldMode_(Number::getround()) - , oldScale_(Number::getMantissaScale()) - , good_(false) + FloatState(int32_t mode) : oldMode_(Number::getround()), oldScale_(Number::getMantissaScale()), good_(false) { - if (mode < Number::rounding_mode::to_nearest || - mode > Number::rounding_mode::upward) + if (mode < Number::rounding_mode::to_nearest || mode > Number::rounding_mode::upward) return; Number::setround(static_cast(mode)); @@ -208,8 +196,7 @@ floatToString(Slice const& data) { std::string hex; hex.reserve(data.size() * 2); - boost::algorithm::hex( - data.begin(), data.end(), std::back_inserter(hex)); + boost::algorithm::hex(data.begin(), data.end(), std::back_inserter(hex)); return "Invalid data: " + hex; } @@ -505,10 +492,7 @@ WasmHostFunctionsImpl::floatFromUint(uint64_t x, int32_t mode) } Expected -WasmHostFunctionsImpl::floatSet( - int64_t mantissa, - int32_t exponent, - int32_t mode) +WasmHostFunctionsImpl::floatSet(int64_t mantissa, int32_t exponent, int32_t mode) { return wasm_float::floatSetImpl(mantissa, exponent, mode); } @@ -526,19 +510,13 @@ WasmHostFunctionsImpl::floatAdd(Slice const& x, Slice const& y, int32_t mode) } Expected -WasmHostFunctionsImpl::floatSubtract( - Slice const& x, - Slice const& y, - int32_t mode) +WasmHostFunctionsImpl::floatSubtract(Slice const& x, Slice const& y, int32_t mode) { return wasm_float::floatSubtractImpl(x, y, mode); } Expected -WasmHostFunctionsImpl::floatMultiply( - Slice const& x, - Slice const& y, - int32_t mode) +WasmHostFunctionsImpl::floatMultiply(Slice const& x, Slice const& y, int32_t mode) { return wasm_float::floatMultiplyImpl(x, y, mode); } diff --git a/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp b/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp index 70fb1b5304..0a3247604a 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp @@ -126,8 +126,7 @@ getAnyFieldData(FieldValue const& variantObj) static inline bool noField(STBase const* field) { - return !field || (STI_NOTPRESENT == field->getSType()) || - (STI_UNKNOWN == field->getSType()); + return !field || (STI_NOTPRESENT == field->getSType()) || (STI_UNKNOWN == field->getSType()); } static Expected @@ -272,8 +271,7 @@ WasmHostFunctionsImpl::getLedgerObjField(int32_t cacheIdx, SField const& fname) auto const normalizedIdx = normalizeCacheIndex(cacheIdx); if (!normalizedIdx.has_value()) return Unexpected(normalizedIdx.error()); - return detail::getAnyFieldData( - cache[normalizedIdx.value()]->peekAtPField(fname)); + return detail::getAnyFieldData(cache[normalizedIdx.value()]->peekAtPField(fname)); } // Subsection: nested getters @@ -303,9 +301,7 @@ WasmHostFunctionsImpl::getCurrentLedgerObjNestedField(Slice const& locator) } Expected -WasmHostFunctionsImpl::getLedgerObjNestedField( - int32_t cacheIdx, - Slice const& locator) +WasmHostFunctionsImpl::getLedgerObjNestedField(int32_t cacheIdx, Slice const& locator) { auto const normalizedIdx = normalizeCacheIndex(cacheIdx); if (!normalizedIdx.has_value()) @@ -351,9 +347,7 @@ WasmHostFunctionsImpl::getCurrentLedgerObjArrayLen(SField const& fname) } Expected -WasmHostFunctionsImpl::getLedgerObjArrayLen( - int32_t cacheIdx, - SField const& fname) +WasmHostFunctionsImpl::getLedgerObjArrayLen(int32_t cacheIdx, SField const& fname) { if (fname.fieldType != STI_ARRAY && fname.fieldType != STI_VECTOR256) return Unexpected(HostFunctionError::NO_ARRAY); @@ -397,9 +391,7 @@ WasmHostFunctionsImpl::getCurrentLedgerObjNestedArrayLen(Slice const& locator) } Expected -WasmHostFunctionsImpl::getLedgerObjNestedArrayLen( - int32_t cacheIdx, - Slice const& locator) +WasmHostFunctionsImpl::getLedgerObjNestedArrayLen(int32_t cacheIdx, Slice const& locator) { auto const normalizedIdx = normalizeCacheIndex(cacheIdx); if (!normalizedIdx.has_value()) diff --git a/src/xrpld/app/wasm/detail/HostFuncImplKeylet.cpp b/src/xrpld/app/wasm/detail/HostFuncImplKeylet.cpp index 89ec35cd3b..a006b584e4 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplKeylet.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplKeylet.cpp @@ -38,16 +38,12 @@ WasmHostFunctionsImpl::checkKeylet(AccountID const& account, std::uint32_t seq) } Expected -WasmHostFunctionsImpl::credentialKeylet( - AccountID const& subject, - AccountID const& issuer, - Slice const& credentialType) +WasmHostFunctionsImpl::credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) { if (!subject || !issuer) return Unexpected(HostFunctionError::INVALID_ACCOUNT); - if (credentialType.empty() || - credentialType.size() > maxCredentialTypeLength) + if (credentialType.empty() || credentialType.size() > maxCredentialTypeLength) return Unexpected(HostFunctionError::INVALID_PARAMS); auto const keylet = keylet::credential(subject, issuer, credentialType); @@ -65,9 +61,7 @@ WasmHostFunctionsImpl::didKeylet(AccountID const& account) } Expected -WasmHostFunctionsImpl::delegateKeylet( - AccountID const& account, - AccountID const& authorize) +WasmHostFunctionsImpl::delegateKeylet(AccountID const& account, AccountID const& authorize) { if (!account || !authorize) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -78,9 +72,7 @@ WasmHostFunctionsImpl::delegateKeylet( } Expected -WasmHostFunctionsImpl::depositPreauthKeylet( - AccountID const& account, - AccountID const& authorize) +WasmHostFunctionsImpl::depositPreauthKeylet(AccountID const& account, AccountID const& authorize) { if (!account || !authorize) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -100,10 +92,7 @@ WasmHostFunctionsImpl::escrowKeylet(AccountID const& account, std::uint32_t seq) } Expected -WasmHostFunctionsImpl::lineKeylet( - AccountID const& account1, - AccountID const& account2, - Currency const& currency) +WasmHostFunctionsImpl::lineKeylet(AccountID const& account1, AccountID const& account2, Currency const& currency) { if (!account1 || !account2) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -117,9 +106,7 @@ WasmHostFunctionsImpl::lineKeylet( } Expected -WasmHostFunctionsImpl::mptIssuanceKeylet( - AccountID const& issuer, - std::uint32_t seq) +WasmHostFunctionsImpl::mptIssuanceKeylet(AccountID const& issuer, std::uint32_t seq) { if (!issuer) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -129,9 +116,7 @@ WasmHostFunctionsImpl::mptIssuanceKeylet( } Expected -WasmHostFunctionsImpl::mptokenKeylet( - MPTID const& mptid, - AccountID const& holder) +WasmHostFunctionsImpl::mptokenKeylet(MPTID const& mptid, AccountID const& holder) { if (!mptid) return Unexpected(HostFunctionError::INVALID_PARAMS); @@ -143,9 +128,7 @@ WasmHostFunctionsImpl::mptokenKeylet( } Expected -WasmHostFunctionsImpl::nftOfferKeylet( - AccountID const& account, - std::uint32_t seq) +WasmHostFunctionsImpl::nftOfferKeylet(AccountID const& account, std::uint32_t seq) { if (!account) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -163,9 +146,7 @@ WasmHostFunctionsImpl::offerKeylet(AccountID const& account, std::uint32_t seq) } Expected -WasmHostFunctionsImpl::oracleKeylet( - AccountID const& account, - std::uint32_t documentId) +WasmHostFunctionsImpl::oracleKeylet(AccountID const& account, std::uint32_t documentId) { if (!account) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -174,10 +155,7 @@ WasmHostFunctionsImpl::oracleKeylet( } Expected -WasmHostFunctionsImpl::paychanKeylet( - AccountID const& account, - AccountID const& destination, - std::uint32_t seq) +WasmHostFunctionsImpl::paychanKeylet(AccountID const& account, AccountID const& destination, std::uint32_t seq) { if (!account || !destination) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -188,9 +166,7 @@ WasmHostFunctionsImpl::paychanKeylet( } Expected -WasmHostFunctionsImpl::permissionedDomainKeylet( - AccountID const& account, - std::uint32_t seq) +WasmHostFunctionsImpl::permissionedDomainKeylet(AccountID const& account, std::uint32_t seq) { if (!account) return Unexpected(HostFunctionError::INVALID_ACCOUNT); diff --git a/src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp b/src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp index 31e90df7ab..c3b0b95529 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp @@ -10,25 +10,18 @@ namespace xrpl { Expected -WasmHostFunctionsImpl::trace( - std::string_view const& msg, - Slice const& data, - bool asHex) +WasmHostFunctionsImpl::trace(std::string_view const& msg, Slice const& data, bool asHex) { if (!asHex) { - log(msg, [&data] { - return std::string_view( - reinterpret_cast(data.data()), data.size()); - }); + log(msg, [&data] { return std::string_view(reinterpret_cast(data.data()), data.size()); }); } else { log(msg, [&data] { std::string hex; hex.reserve(data.size() * 2); - boost::algorithm::hex( - data.begin(), data.end(), std::back_inserter(hex)); + boost::algorithm::hex(data.begin(), data.end(), std::back_inserter(hex)); return hex; }); } @@ -44,27 +37,21 @@ WasmHostFunctionsImpl::traceNum(std::string_view const& msg, int64_t data) } Expected -WasmHostFunctionsImpl::traceAccount( - std::string_view const& msg, - AccountID const& account) +WasmHostFunctionsImpl::traceAccount(std::string_view const& msg, AccountID const& account) { log(msg, [&account] { return toBase58(account); }); return 0; } Expected -WasmHostFunctionsImpl::traceFloat( - std::string_view const& msg, - Slice const& data) +WasmHostFunctionsImpl::traceFloat(std::string_view const& msg, Slice const& data) { log(msg, [&data] { return wasm_float::floatToString(data); }); return 0; } Expected -WasmHostFunctionsImpl::traceAmount( - std::string_view const& msg, - STAmount const& amount) +WasmHostFunctionsImpl::traceAmount(std::string_view const& msg, STAmount const& amount) { log(msg, [&amount] { return amount.getFullText(); }); return 0; diff --git a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp index da768ff6eb..ffae4de7ed 100644 --- a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp @@ -11,12 +11,7 @@ namespace xrpl { using SFieldCRef = std::reference_wrapper; static int32_t -setData( - InstanceWrapper const* runtime, - int32_t dst, - int32_t dstSize, - uint8_t const* src, - int32_t srcSize) +setData(InstanceWrapper const* runtime, int32_t dst, int32_t dstSize, uint8_t const* src, int32_t srcSize) { if (!srcSize) return 0; // LCOV_EXCL_LINE @@ -98,11 +93,7 @@ getDataSField(IW const* _runtime, wasm_val_vec_t const* params, int32_t& i) template Expected -getDataSlice( - IW const* runtime, - wasm_val_vec_t const* params, - int32_t& i, - bool isUpdate = false) +getDataSlice(IW const* runtime, wasm_val_vec_t const* params, int32_t& i, bool isUpdate = false) { int64_t const ptr = params->data[i].of.i32; int64_t const size = params->data[i + 1].of.i32; @@ -209,9 +200,8 @@ getDataAsset(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) if (slice->size() == (AccountID::bytes + Currency::bytes)) { - auto const issue = Issue( - Currency::fromVoid(slice->data()), - AccountID::fromVoid(slice->data() + Currency::bytes)); + auto const issue = + Issue(Currency::fromVoid(slice->data()), AccountID::fromVoid(slice->data() + Currency::bytes)); if (issue.native()) return Unexpected(HostFunctionError::INVALID_PARAMS); @@ -228,8 +218,7 @@ getDataString(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) auto const slice = getDataSlice(runtime, params, i); if (!slice) return Unexpected(slice.error()); - return std::string_view( - reinterpret_cast(slice->data()), slice->size()); + return std::string_view(reinterpret_cast(slice->data()), slice->size()); } std::nullptr_t @@ -267,23 +256,13 @@ returnResult( { return hfResult( results, - setData( - runtime, - params->data[index].of.i32, - params->data[index + 1].of.i32, - res->data(), - res->size())); + setData(runtime, params->data[index].of.i32, params->data[index + 1].of.i32, res->data(), res->size())); } else if constexpr (std::is_same_v) { return hfResult( results, - setData( - runtime, - params->data[index].of.i32, - params->data[index + 1].of.i32, - res->data(), - res->size())); + setData(runtime, params->data[index].of.i32, params->data[index + 1].of.i32, res->data(), res->size())); } else if constexpr (std::is_same_v) { @@ -303,8 +282,7 @@ returnResult( } else { - static_assert( - [] { return false; }(), "Unhandled return type in returnResult"); + static_assert([] { return false; }(), "Unhandled return type in returnResult"); } } @@ -325,9 +303,9 @@ checkGas(void* env) auto const* runtime = reinterpret_cast(hf->getRT()); if (!runtime) { - wasm_trap_t* trap = reinterpret_cast( - WasmEngine::instance().newTrap("hf no runtime")); // LCOV_EXCL_LINE - return Unexpected(trap); // LCOV_EXCL_LINE + wasm_trap_t* trap = + reinterpret_cast(WasmEngine::instance().newTrap("hf no runtime")); // LCOV_EXCL_LINE + return Unexpected(trap); // LCOV_EXCL_LINE } int64_t const gas = runtime->getGas(); @@ -336,15 +314,14 @@ checkGas(void* env) if (runtime->setGas(x) < 0) { - wasm_trap_t* trap = reinterpret_cast( - WasmEngine::instance().newTrap("can't set gas")); // LCOV_EXCL_LINE - return Unexpected(trap); // LCOV_EXCL_LINE + wasm_trap_t* trap = + reinterpret_cast(WasmEngine::instance().newTrap("can't set gas")); // LCOV_EXCL_LINE + return Unexpected(trap); // LCOV_EXCL_LINE } if (gas < impFunc.gas) { - wasm_trap_t* trap = reinterpret_cast( - WasmEngine::instance().newTrap("hf out of gas")); + wasm_trap_t* trap = reinterpret_cast(WasmEngine::instance().newTrap("hf out of gas")); return Unexpected(trap); } @@ -353,10 +330,7 @@ checkGas(void* env) //---------------------------------------------------------------------------------------------------------------------- wasm_trap_t* -getLedgerSqn_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +getLedgerSqn_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -368,10 +342,7 @@ getLedgerSqn_wrap( } wasm_trap_t* -getParentLedgerTime_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +getParentLedgerTime_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -379,15 +350,11 @@ getParentLedgerTime_wrap( auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; - return returnResult( - runtime, params, results, hf->getParentLedgerTime(), index); + return returnResult(runtime, params, results, hf->getParentLedgerTime(), index); } wasm_trap_t* -getParentLedgerHash_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +getParentLedgerHash_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -395,15 +362,11 @@ getParentLedgerHash_wrap( auto const* runtime = reinterpret_cast(hf->getRT()); int index = 0; - return returnResult( - runtime, params, results, hf->getParentLedgerHash(), index); + return returnResult(runtime, params, results, hf->getParentLedgerHash(), index); } wasm_trap_t* -getBaseFee_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +getBaseFee_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -415,10 +378,7 @@ getBaseFee_wrap( } wasm_trap_t* -isAmendmentEnabled_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +isAmendmentEnabled_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -434,8 +394,7 @@ isAmendmentEnabled_wrap( if (slice->size() == uint256::bytes) { - if (auto ret = hf->isAmendmentEnabled(uint256::fromVoid(slice->data())); - *ret == 1) + if (auto ret = hf->isAmendmentEnabled(uint256::fromVoid(slice->data())); *ret == 1) { return returnResult(runtime, params, results, ret, index); } @@ -446,17 +405,12 @@ isAmendmentEnabled_wrap( return hfResult(results, HostFunctionError::DATA_FIELD_TOO_LARGE); } - auto const str = std::string_view( - reinterpret_cast(slice->data()), slice->size()); - return returnResult( - runtime, params, results, hf->isAmendmentEnabled(str), index); + auto const str = std::string_view(reinterpret_cast(slice->data()), slice->size()); + return returnResult(runtime, params, results, hf->isAmendmentEnabled(str), index); } wasm_trap_t* -cacheLedgerObj_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +cacheLedgerObj_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -476,15 +430,11 @@ cacheLedgerObj_wrap( return hfResult(results, cache.error()); // LCOV_EXCL_LINE } - return returnResult( - runtime, params, results, hf->cacheLedgerObj(*id, *cache), index); + return returnResult(runtime, params, results, hf->cacheLedgerObj(*id, *cache), index); } wasm_trap_t* -getTxField_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +getTxField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -497,15 +447,11 @@ getTxField_wrap( { return hfResult(results, fname.error()); } - return returnResult( - runtime, params, results, hf->getTxField(*fname), index); + return returnResult(runtime, params, results, hf->getTxField(*fname), index); } wasm_trap_t* -getCurrentLedgerObjField_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +getCurrentLedgerObjField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -519,15 +465,11 @@ getCurrentLedgerObjField_wrap( return hfResult(results, fname.error()); } - return returnResult( - runtime, params, results, hf->getCurrentLedgerObjField(*fname), index); + return returnResult(runtime, params, results, hf->getCurrentLedgerObjField(*fname), index); } wasm_trap_t* -getLedgerObjField_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +getLedgerObjField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -547,15 +489,11 @@ getLedgerObjField_wrap( return hfResult(results, fname.error()); } - return returnResult( - runtime, params, results, hf->getLedgerObjField(*cache, *fname), index); + return returnResult(runtime, params, results, hf->getLedgerObjField(*cache, *fname), index); } wasm_trap_t* -getTxNestedField_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +getTxNestedField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -569,15 +507,11 @@ getTxNestedField_wrap( return hfResult(results, bytes.error()); } - return returnResult( - runtime, params, results, hf->getTxNestedField(*bytes), index); + return returnResult(runtime, params, results, hf->getTxNestedField(*bytes), index); } wasm_trap_t* -getCurrentLedgerObjNestedField_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +getCurrentLedgerObjNestedField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -590,19 +524,11 @@ getCurrentLedgerObjNestedField_wrap( { return hfResult(results, bytes.error()); } - return returnResult( - runtime, - params, - results, - hf->getCurrentLedgerObjNestedField(*bytes), - index); + return returnResult(runtime, params, results, hf->getCurrentLedgerObjNestedField(*bytes), index); } wasm_trap_t* -getLedgerObjNestedField_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +getLedgerObjNestedField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -622,19 +548,11 @@ getLedgerObjNestedField_wrap( return hfResult(results, bytes.error()); } - return returnResult( - runtime, - params, - results, - hf->getLedgerObjNestedField(*cache, *bytes), - index); + return returnResult(runtime, params, results, hf->getLedgerObjNestedField(*cache, *bytes), index); } wasm_trap_t* -getTxArrayLen_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +getTxArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -648,15 +566,11 @@ getTxArrayLen_wrap( return hfResult(results, fname.error()); } - return returnResult( - runtime, params, results, hf->getTxArrayLen(*fname), index); + return returnResult(runtime, params, results, hf->getTxArrayLen(*fname), index); } wasm_trap_t* -getCurrentLedgerObjArrayLen_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +getCurrentLedgerObjArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -670,19 +584,11 @@ getCurrentLedgerObjArrayLen_wrap( return hfResult(results, fname.error()); } - return returnResult( - runtime, - params, - results, - hf->getCurrentLedgerObjArrayLen(*fname), - index); + return returnResult(runtime, params, results, hf->getCurrentLedgerObjArrayLen(*fname), index); } wasm_trap_t* -getLedgerObjArrayLen_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +getLedgerObjArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -702,19 +608,11 @@ getLedgerObjArrayLen_wrap( return hfResult(results, fname.error()); } - return returnResult( - runtime, - params, - results, - hf->getLedgerObjArrayLen(*cache, *fname), - index); + return returnResult(runtime, params, results, hf->getLedgerObjArrayLen(*cache, *fname), index); } wasm_trap_t* -getTxNestedArrayLen_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +getTxNestedArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -728,15 +626,11 @@ getTxNestedArrayLen_wrap( return hfResult(results, bytes.error()); } - return returnResult( - runtime, params, results, hf->getTxNestedArrayLen(*bytes), index); + return returnResult(runtime, params, results, hf->getTxNestedArrayLen(*bytes), index); } wasm_trap_t* -getCurrentLedgerObjNestedArrayLen_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +getCurrentLedgerObjNestedArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -750,18 +644,10 @@ getCurrentLedgerObjNestedArrayLen_wrap( return hfResult(results, bytes.error()); } - return returnResult( - runtime, - params, - results, - hf->getCurrentLedgerObjNestedArrayLen(*bytes), - index); + return returnResult(runtime, params, results, hf->getCurrentLedgerObjNestedArrayLen(*bytes), index); } wasm_trap_t* -getLedgerObjNestedArrayLen_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +getLedgerObjNestedArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -780,19 +666,11 @@ getLedgerObjNestedArrayLen_wrap( { return hfResult(results, bytes.error()); } - return returnResult( - runtime, - params, - results, - hf->getLedgerObjNestedArrayLen(*cache, *bytes), - index); + return returnResult(runtime, params, results, hf->getLedgerObjNestedArrayLen(*cache, *bytes), index); } wasm_trap_t* -updateData_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +updateData_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -806,15 +684,11 @@ updateData_wrap( return hfResult(results, bytes.error()); } - return returnResult( - runtime, params, results, hf->updateData(*bytes), index); + return returnResult(runtime, params, results, hf->updateData(*bytes), index); } wasm_trap_t* -checkSignature_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +checkSignature_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -840,19 +714,11 @@ checkSignature_wrap( return hfResult(results, pubkey.error()); } - return returnResult( - runtime, - params, - results, - hf->checkSignature(*message, *signature, *pubkey), - index); + return returnResult(runtime, params, results, hf->checkSignature(*message, *signature, *pubkey), index); } wasm_trap_t* -computeSha512HalfHash_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +computeSha512HalfHash_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -865,15 +731,11 @@ computeSha512HalfHash_wrap( { return hfResult(results, bytes.error()); } - return returnResult( - runtime, params, results, hf->computeSha512HalfHash(*bytes), index); + return returnResult(runtime, params, results, hf->computeSha512HalfHash(*bytes), index); } wasm_trap_t* -accountKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +accountKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -887,8 +749,7 @@ accountKeylet_wrap( return hfResult(results, acc.error()); } - return returnResult( - runtime, params, results, hf->accountKeylet(*acc), index); + return returnResult(runtime, params, results, hf->accountKeylet(*acc), index); } wasm_trap_t* @@ -912,19 +773,11 @@ ammKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) return hfResult(results, issue2.error()); } - return returnResult( - runtime, - params, - results, - hf->ammKeylet(issue1.value(), issue2.value()), - index); + return returnResult(runtime, params, results, hf->ammKeylet(issue1.value(), issue2.value()), index); } wasm_trap_t* -checkKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +checkKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -944,15 +797,11 @@ checkKeylet_wrap( return hfResult(results, seq.error()); // LCOV_EXCL_LINE } - return returnResult( - runtime, params, results, hf->checkKeylet(acc.value(), *seq), index); + return returnResult(runtime, params, results, hf->checkKeylet(acc.value(), *seq), index); } wasm_trap_t* -credentialKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +credentialKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -978,19 +827,11 @@ credentialKeylet_wrap( return hfResult(results, credType.error()); } - return returnResult( - runtime, - params, - results, - hf->credentialKeylet(*subj, *iss, *credType), - index); + return returnResult(runtime, params, results, hf->credentialKeylet(*subj, *iss, *credType), index); } wasm_trap_t* -delegateKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +delegateKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1010,19 +851,11 @@ delegateKeylet_wrap( return hfResult(results, authorize.error()); } - return returnResult( - runtime, - params, - results, - hf->delegateKeylet(acc.value(), authorize.value()), - index); + return returnResult(runtime, params, results, hf->delegateKeylet(acc.value(), authorize.value()), index); } wasm_trap_t* -depositPreauthKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +depositPreauthKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1042,12 +875,7 @@ depositPreauthKeylet_wrap( return hfResult(results, authorize.error()); } - return returnResult( - runtime, - params, - results, - hf->depositPreauthKeylet(acc.value(), authorize.value()), - index); + return returnResult(runtime, params, results, hf->depositPreauthKeylet(acc.value(), authorize.value()), index); } wasm_trap_t* @@ -1065,15 +893,11 @@ didKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) return hfResult(results, acc.error()); } - return returnResult( - runtime, params, results, hf->didKeylet(acc.value()), index); + return returnResult(runtime, params, results, hf->didKeylet(acc.value()), index); } wasm_trap_t* -escrowKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +escrowKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1093,15 +917,11 @@ escrowKeylet_wrap( return hfResult(results, seq.error()); // LCOV_EXCL_LINE } - return returnResult( - runtime, params, results, hf->escrowKeylet(*acc, *seq), index); + return returnResult(runtime, params, results, hf->escrowKeylet(*acc, *seq), index); } wasm_trap_t* -lineKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +lineKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1127,19 +947,11 @@ lineKeylet_wrap( return hfResult(results, currency.error()); } - return returnResult( - runtime, - params, - results, - hf->lineKeylet(acc1.value(), acc2.value(), currency.value()), - index); + return returnResult(runtime, params, results, hf->lineKeylet(acc1.value(), acc2.value(), currency.value()), index); } wasm_trap_t* -mptIssuanceKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +mptIssuanceKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1159,19 +971,11 @@ mptIssuanceKeylet_wrap( return hfResult(results, seq.error()); // LCOV_EXCL_LINE } - return returnResult( - runtime, - params, - results, - hf->mptIssuanceKeylet(acc.value(), seq.value()), - index); + return returnResult(runtime, params, results, hf->mptIssuanceKeylet(acc.value(), seq.value()), index); } wasm_trap_t* -mptokenKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +mptokenKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1197,19 +1001,11 @@ mptokenKeylet_wrap( return hfResult(results, holder.error()); } - return returnResult( - runtime, - params, - results, - hf->mptokenKeylet(mptid, holder.value()), - index); + return returnResult(runtime, params, results, hf->mptokenKeylet(mptid, holder.value()), index); } wasm_trap_t* -nftOfferKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +nftOfferKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1229,19 +1025,11 @@ nftOfferKeylet_wrap( return hfResult(results, seq.error()); // LCOV_EXCL_LINE } - return returnResult( - runtime, - params, - results, - hf->nftOfferKeylet(acc.value(), seq.value()), - index); + return returnResult(runtime, params, results, hf->nftOfferKeylet(acc.value(), seq.value()), index); } wasm_trap_t* -offerKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +offerKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1261,19 +1049,11 @@ offerKeylet_wrap( return hfResult(results, seq.error()); // LCOV_EXCL_LINE } - return returnResult( - runtime, - params, - results, - hf->offerKeylet(acc.value(), seq.value()), - index); + return returnResult(runtime, params, results, hf->offerKeylet(acc.value(), seq.value()), index); } wasm_trap_t* -oracleKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +oracleKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1292,15 +1072,11 @@ oracleKeylet_wrap( { return hfResult(results, documentId.error()); // LCOV_EXCL_LINE } - return returnResult( - runtime, params, results, hf->oracleKeylet(*acc, *documentId), index); + return returnResult(runtime, params, results, hf->oracleKeylet(*acc, *documentId), index); } wasm_trap_t* -paychanKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +paychanKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1326,19 +1102,11 @@ paychanKeylet_wrap( return hfResult(results, seq.error()); // LCOV_EXCL_LINE } - return returnResult( - runtime, - params, - results, - hf->paychanKeylet(acc.value(), dest.value(), seq.value()), - index); + return returnResult(runtime, params, results, hf->paychanKeylet(acc.value(), dest.value(), seq.value()), index); } wasm_trap_t* -permissionedDomainKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +permissionedDomainKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1358,19 +1126,11 @@ permissionedDomainKeylet_wrap( return hfResult(results, seq.error()); // LCOV_EXCL_LINE } - return returnResult( - runtime, - params, - results, - hf->permissionedDomainKeylet(acc.value(), seq.value()), - index); + return returnResult(runtime, params, results, hf->permissionedDomainKeylet(acc.value(), seq.value()), index); } wasm_trap_t* -signersKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +signersKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1384,15 +1144,11 @@ signersKeylet_wrap( return hfResult(results, acc.error()); } - return returnResult( - runtime, params, results, hf->signersKeylet(acc.value()), index); + return returnResult(runtime, params, results, hf->signersKeylet(acc.value()), index); } wasm_trap_t* -ticketKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +ticketKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1412,19 +1168,11 @@ ticketKeylet_wrap( return hfResult(results, seq.error()); // LCOV_EXCL_LINE } - return returnResult( - runtime, - params, - results, - hf->ticketKeylet(acc.value(), seq.value()), - index); + return returnResult(runtime, params, results, hf->ticketKeylet(acc.value(), seq.value()), index); } wasm_trap_t* -vaultKeylet_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +vaultKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1444,12 +1192,7 @@ vaultKeylet_wrap( return hfResult(results, seq.error()); // LCOV_EXCL_LINE } - return returnResult( - runtime, - params, - results, - hf->vaultKeylet(acc.value(), seq.value()), - index); + return returnResult(runtime, params, results, hf->vaultKeylet(acc.value(), seq.value()), index); } wasm_trap_t* @@ -1473,15 +1216,11 @@ getNFT_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) return hfResult(results, nftId.error()); } - return returnResult( - runtime, params, results, hf->getNFT(*acc, *nftId), index); + return returnResult(runtime, params, results, hf->getNFT(*acc, *nftId), index); } wasm_trap_t* -getNFTIssuer_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +getNFTIssuer_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1495,15 +1234,11 @@ getNFTIssuer_wrap( return hfResult(results, nftId.error()); } - return returnResult( - runtime, params, results, hf->getNFTIssuer(*nftId), index); + return returnResult(runtime, params, results, hf->getNFTIssuer(*nftId), index); } wasm_trap_t* -getNFTTaxon_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +getNFTTaxon_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1517,15 +1252,11 @@ getNFTTaxon_wrap( return hfResult(results, nftId.error()); } - return returnResult( - runtime, params, results, hf->getNFTTaxon(*nftId), index); + return returnResult(runtime, params, results, hf->getNFTTaxon(*nftId), index); } wasm_trap_t* -getNFTFlags_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +getNFTFlags_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1539,15 +1270,11 @@ getNFTFlags_wrap( return hfResult(results, nftId.error()); } - return returnResult( - runtime, params, results, hf->getNFTFlags(*nftId), index); + return returnResult(runtime, params, results, hf->getNFTFlags(*nftId), index); } wasm_trap_t* -getNFTTransferFee_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +getNFTTransferFee_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1561,15 +1288,11 @@ getNFTTransferFee_wrap( return hfResult(results, nftId.error()); } - return returnResult( - runtime, params, results, hf->getNFTTransferFee(*nftId), index); + return returnResult(runtime, params, results, hf->getNFTTransferFee(*nftId), index); } wasm_trap_t* -getNFTSerial_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +getNFTSerial_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1583,8 +1306,7 @@ getNFTSerial_wrap( return hfResult(results, nftId.error()); } - return returnResult( - runtime, params, results, hf->getNFTSerial(*nftId), index); + return returnResult(runtime, params, results, hf->getNFTSerial(*nftId), index); } wasm_trap_t* @@ -1619,8 +1341,7 @@ trace_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) return hfResult(results, asHex.error()); // LCOV_EXCL_LINE } - return returnResult( - runtime, params, results, hf->trace(*msg, *data, *asHex), index); + return returnResult(runtime, params, results, hf->trace(*msg, *data, *asHex), index); } wasm_trap_t* @@ -1648,15 +1369,11 @@ traceNum_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) return hfResult(results, number.error()); // LCOV_EXCL_LINE } - return returnResult( - runtime, params, results, hf->traceNum(*msg, *number), index); + return returnResult(runtime, params, results, hf->traceNum(*msg, *number), index); } wasm_trap_t* -traceAccount_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +traceAccount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1675,15 +1392,11 @@ traceAccount_wrap( if (!account) return hfResult(results, account.error()); - return returnResult( - runtime, params, results, hf->traceAccount(*msg, *account), i); + return returnResult(runtime, params, results, hf->traceAccount(*msg, *account), i); } wasm_trap_t* -traceFloat_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +traceFloat_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1702,15 +1415,11 @@ traceFloat_wrap( if (!number) return hfResult(results, number.error()); - return returnResult( - runtime, params, results, hf->traceFloat(*msg, *number), i); + return returnResult(runtime, params, results, hf->traceFloat(*msg, *number), i); } wasm_trap_t* -traceAmount_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +traceAmount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1744,15 +1453,11 @@ traceAmount_wrap( if (!amount) return hfResult(results, HostFunctionError::INVALID_PARAMS); - return returnResult( - runtime, params, results, hf->traceAmount(*msg, *amount), i); + return returnResult(runtime, params, results, hf->traceAmount(*msg, *amount), i); } wasm_trap_t* -floatFromInt_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +floatFromInt_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1770,15 +1475,11 @@ floatFromInt_wrap( return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 1; - return returnResult( - runtime, params, results, hf->floatFromInt(*x, *rounding), i); + return returnResult(runtime, params, results, hf->floatFromInt(*x, *rounding), i); } wasm_trap_t* -floatFromUint_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +floatFromUint_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1796,8 +1497,7 @@ floatFromUint_wrap( return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 2; - return returnResult( - runtime, params, results, hf->floatFromUint(*x, *rounding), i); + return returnResult(runtime, params, results, hf->floatFromUint(*x, *rounding), i); } wasm_trap_t* @@ -1823,15 +1523,11 @@ floatSet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 2; - return returnResult( - runtime, params, results, hf->floatSet(*mant, *exp, *rounding), i); + return returnResult(runtime, params, results, hf->floatSet(*mant, *exp, *rounding), i); } wasm_trap_t* -floatCompare_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +floatCompare_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1873,15 +1569,11 @@ floatAdd_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 4; - return returnResult( - runtime, params, results, hf->floatAdd(*x, *y, *rounding), i); + return returnResult(runtime, params, results, hf->floatAdd(*x, *y, *rounding), i); } wasm_trap_t* -floatSubtract_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +floatSubtract_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1903,15 +1595,11 @@ floatSubtract_wrap( return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 4; - return returnResult( - runtime, params, results, hf->floatSubtract(*x, *y, *rounding), i); + return returnResult(runtime, params, results, hf->floatSubtract(*x, *y, *rounding), i); } wasm_trap_t* -floatMultiply_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +floatMultiply_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1933,15 +1621,11 @@ floatMultiply_wrap( return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 4; - return returnResult( - runtime, params, results, hf->floatMultiply(*x, *y, *rounding), i); + return returnResult(runtime, params, results, hf->floatMultiply(*x, *y, *rounding), i); } wasm_trap_t* -floatDivide_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +floatDivide_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1963,8 +1647,7 @@ floatDivide_wrap( return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 4; - return returnResult( - runtime, params, results, hf->floatDivide(*x, *y, *rounding), i); + return returnResult(runtime, params, results, hf->floatDivide(*x, *y, *rounding), i); } wasm_trap_t* @@ -1990,15 +1673,11 @@ floatRoot_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 3; - return returnResult( - runtime, params, results, hf->floatRoot(*x, *n, *rounding), i); + return returnResult(runtime, params, results, hf->floatRoot(*x, *n, *rounding), i); } wasm_trap_t* -floatPower_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +floatPower_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -2020,8 +1699,7 @@ floatPower_wrap( return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 3; - return returnResult( - runtime, params, results, hf->floatPower(*x, *n, *rounding), i); + return returnResult(runtime, params, results, hf->floatPower(*x, *n, *rounding), i); } wasm_trap_t* @@ -2043,8 +1721,7 @@ floatLog_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 2; - return returnResult( - runtime, params, results, hf->floatLog(*x, *rounding), i); + return returnResult(runtime, params, results, hf->floatLog(*x, *rounding), i); } // LCOV_EXCL_START @@ -2072,8 +1749,7 @@ testGetDataIncrement() { wasm_val_t values[4]; - std::array buffer = { - 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'}; + std::array buffer = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'}; MockInstanceWrapper runtime(wmem{buffer.data(), buffer.size()}); { @@ -2134,18 +1810,14 @@ testGetDataIncrement() int index = 0; auto const result = getDataString(&runtime, ¶ms, index); - if (!result || - result.value() != - std::string_view( - reinterpret_cast(buffer.data()), 5) || + if (!result || result.value() != std::string_view(reinterpret_cast(buffer.data()), 5) || index != 2) return false; } { // test account - AccountID const id(calcAccountID( - generateKeyPair(KeyType::secp256k1, generateSeed("alice")).first)); + AccountID const id(calcAccountID(generateKeyPair(KeyType::secp256k1, generateSeed("alice")).first)); wasm_val_vec_t params = {2, &values[0]}; diff --git a/src/xrpld/app/wasm/detail/WasmVM.cpp b/src/xrpld/app/wasm/detail/WasmVM.cpp index c7fa3bbb5b..23edbd2370 100644 --- a/src/xrpld/app/wasm/detail/WasmVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmVM.cpp @@ -112,14 +112,7 @@ runEscrowWasm( auto& vm = WasmEngine::instance(); // vm.initMaxPages(MAX_PAGES); - auto const ret = vm.run( - wasmCode, - funcName, - params, - createWasmImport(*hfs), - hfs, - gasLimit, - hfs->getJournal()); + auto const ret = vm.run(wasmCode, funcName, params, createWasmImport(*hfs), hfs, gasLimit, hfs->getJournal()); // std::cout << "runEscrowWasm, mod size: " << wasmCode.size() // << ", gasLimit: " << gasLimit << ", funcName: " << funcName; @@ -133,8 +126,7 @@ runEscrowWasm( } #ifdef DEBUG_OUTPUT - std::cout << ", ret: " << ret->result << ", gas spent: " << ret->cost - << std::endl; + std::cout << ", ret: " << ret->result << ", gas spent: " << ret->cost << std::endl; #endif return EscrowResult{ret->result, ret->cost}; } @@ -150,13 +142,7 @@ preflightEscrowWasm( auto& vm = WasmEngine::instance(); // vm.initMaxPages(MAX_PAGES); - auto const ret = vm.check( - wasmCode, - funcName, - params, - createWasmImport(*hfs), - hfs, - hfs->getJournal()); + auto const ret = vm.check(wasmCode, funcName, params, createWasmImport(*hfs), hfs, hfs->getJournal()); return ret; } diff --git a/src/xrpld/app/wasm/detail/WasmiVM.cpp b/src/xrpld/app/wasm/detail/WasmiVM.cpp index a0f8b612da..6ef0315b97 100644 --- a/src/xrpld/app/wasm/detail/WasmiVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmiVM.cpp @@ -30,8 +30,7 @@ print_wasm_error(std::string_view msg, wasm_trap_t* trap, beast::Journal jlog) if (error_message.size) { - j << "WASMI Error: " << msg << ", " - << std::string_view(error_message.data, error_message.size - 1); + j << "WASMI Error: " << msg << ", " << std::string_view(error_message.data, error_message.size - 1); } else j << "WASMI Error: " << msg; @@ -52,17 +51,10 @@ print_wasm_error(std::string_view msg, wasm_trap_t* trap, beast::Journal jlog) } // namespace InstancePtr -InstanceWrapper::init( - StorePtr& s, - ModulePtr& m, - WasmExternVec& expt, - WasmExternVec const& imports, - beast::Journal j) +InstanceWrapper::init(StorePtr& s, ModulePtr& m, WasmExternVec& expt, WasmExternVec const& imports, beast::Journal j) { wasm_trap_t* trap = nullptr; - InstancePtr mi = InstancePtr( - wasm_instance_new(s.get(), m.get(), &imports.vec_, &trap), - &wasm_instance_delete); + InstancePtr mi = InstancePtr(wasm_instance_new(s.get(), m.get(), &imports.vec_, &trap), &wasm_instance_delete); if (!mi || trap) { @@ -78,18 +70,13 @@ InstanceWrapper::InstanceWrapper() : instance_(nullptr, &wasm_instance_delete) } // LCOV_EXCL_START -InstanceWrapper::InstanceWrapper(InstanceWrapper&& o) - : instance_(nullptr, &wasm_instance_delete) +InstanceWrapper::InstanceWrapper(InstanceWrapper&& o) : instance_(nullptr, &wasm_instance_delete) { *this = std::move(o); } // LCOV_EXCL_STOP -InstanceWrapper::InstanceWrapper( - StorePtr& s, - ModulePtr& m, - WasmExternVec const& imports, - beast::Journal j) +InstanceWrapper::InstanceWrapper(StorePtr& s, ModulePtr& m, WasmExternVec const& imports, beast::Journal j) : store_(s.get()), instance_(init(s, m, exports_, imports, j)), j_(j) { } @@ -118,9 +105,7 @@ InstanceWrapper::operator bool() const } FuncInfo -InstanceWrapper::getFunc( - std::string_view funcName, - WasmExporttypeVec const& exportTypes) const +InstanceWrapper::getFunc(std::string_view funcName, WasmExporttypeVec const& exportTypes) const { wasm_func_t const* f = nullptr; wasm_functype_t const* ft = nullptr; @@ -155,8 +140,7 @@ InstanceWrapper::getFunc( } if (!f || !ft) - throw std::runtime_error( - "can't find function <" + std::string(funcName) + ">"); + throw std::runtime_error("can't find function <" + std::string(funcName) + ">"); return {f, ft}; } @@ -168,9 +152,7 @@ InstanceWrapper::getMem() const { auto* e(exports_.vec_.data[memIdx_]); wasm_memory_t* mem = wasm_extern_as_memory(e); - return { - reinterpret_cast(wasm_memory_data(mem)), - wasm_memory_data_size(mem)}; + return {reinterpret_cast(wasm_memory_data(mem)), wasm_memory_data_size(mem)}; } wasm_memory_t* mem = nullptr; @@ -188,9 +170,7 @@ InstanceWrapper::getMem() const if (!mem) return {}; // LCOV_EXCL_LINE - return { - reinterpret_cast(wasm_memory_data(mem)), - wasm_memory_data_size(mem)}; + return {reinterpret_cast(wasm_memory_data(mem)), wasm_memory_data_size(mem)}; } std::int64_t @@ -211,8 +191,7 @@ InstanceWrapper::setGas(std::int64_t gas) const if (gas < 0) gas = std::numeric_limits::max(); - wasmi_error_t* err = - wasm_store_set_fuel(store_, static_cast(gas)); + wasmi_error_t* err = wasm_store_set_fuel(store_, static_cast(gas)); if (err) { // LCOV_EXCL_START @@ -231,8 +210,7 @@ ModulePtr ModuleWrapper::init(StorePtr& s, Bytes const& wasmBin, beast::Journal j) { wasm_byte_vec_t const code{wasmBin.size(), (char*)(wasmBin.data())}; - ModulePtr m = - ModulePtr(wasm_module_new(s.get(), &code), &wasm_module_delete); + ModulePtr m = ModulePtr(wasm_module_new(s.get(), &code), &wasm_module_delete); if (!m) throw std::runtime_error("can't create module"); @@ -244,8 +222,7 @@ ModuleWrapper::ModuleWrapper() : module_(nullptr, &wasm_module_delete) { } -ModuleWrapper::ModuleWrapper(ModuleWrapper&& o) - : module_(nullptr, &wasm_module_delete) +ModuleWrapper::ModuleWrapper(ModuleWrapper&& o) : module_(nullptr, &wasm_module_delete) { *this = std::move(o); } @@ -342,9 +319,7 @@ makeImpReturn(WasmImportFunc const& imp) } WasmExternVec -ModuleWrapper::buildImports( - StorePtr& s, - std::shared_ptr const& imports) +ModuleWrapper::buildImports(StorePtr& s, std::shared_ptr const& imports) { WasmImporttypeVec importTypes; wasm_module_imports(module_.get(), &importTypes.vec_); @@ -366,12 +341,9 @@ ModuleWrapper::buildImports( wasm_name_t const* fn = wasm_importtype_name(importType); auto fieldName = std::string_view(fn->data, fn->size); - wasm_externkind_t const itype = - wasm_externtype_kind(wasm_importtype_type(importType)); + wasm_externkind_t const itype = wasm_externtype_kind(wasm_importtype_type(importType)); if ((itype) != WASM_EXTERN_FUNC) - throw std::runtime_error( - "Invalid import type " + - std::to_string(itype)); // LCOV_EXCL_LINE + throw std::runtime_error("Invalid import type " + std::to_string(itype)); // LCOV_EXCL_LINE // for multi-module support // if ((W_ENV != modName) && (W_HOST_LIB != modName)) @@ -387,25 +359,18 @@ ModuleWrapper::buildImports( WasmValtypeVec params(makeImpParams(imp)); WasmValtypeVec results(makeImpReturn(imp)); - std::unique_ptr - ftype( - wasm_functype_new(¶ms.vec_, &results.vec_), - &wasm_functype_delete); + std::unique_ptr ftype( + wasm_functype_new(¶ms.vec_, &results.vec_), &wasm_functype_delete); params.release(); results.release(); wasm_func_t* func = wasm_func_new_with_env( - s.get(), - ftype.get(), - reinterpret_cast(imp.wrap), - (void*)&obj, - nullptr); + s.get(), ftype.get(), reinterpret_cast(imp.wrap), (void*)&obj, nullptr); if (!func) { // LCOV_EXCL_START - throw std::runtime_error( - "can't create import function " + imp.name); + throw std::runtime_error("can't create import function " + imp.name); // LCOV_EXCL_STOP } @@ -418,16 +383,15 @@ ModuleWrapper::buildImports( if (!impSet) { - print_wasm_error( - "Import not found: " + std::string(fieldName), nullptr, j_); + print_wasm_error("Import not found: " + std::string(fieldName), nullptr, j_); } } if (impCnt != importTypes.vec_.size) { print_wasm_error( - std::string("Imports not finished: ") + std::to_string(impCnt) + - "/" + std::to_string(importTypes.vec_.size), + std::string("Imports not finished: ") + std::to_string(impCnt) + "/" + + std::to_string(importTypes.vec_.size), nullptr, j_); throw std::runtime_error("Missing imports"); @@ -450,16 +414,13 @@ ModuleWrapper::getFuncType(std::string_view funcName) const auto const* exp_type(exportTypes_.vec_.data[i]); wasm_name_t const* name = wasm_exporttype_name(exp_type); wasm_externtype_t const* exn_type = wasm_exporttype_type(exp_type); - if (wasm_externtype_kind(exn_type) == WASM_EXTERN_FUNC && - funcName == std::string_view(name->data, name->size)) + if (wasm_externtype_kind(exn_type) == WASM_EXTERN_FUNC && funcName == std::string_view(name->data, name->size)) { - return wasm_externtype_as_functype( - const_cast(exn_type)); + return wasm_externtype_as_functype(const_cast(exn_type)); } } - throw std::runtime_error( - "can't find function <" + std::string(funcName) + ">"); + throw std::runtime_error("can't find function <" + std::string(funcName) + ">"); } wmem @@ -534,8 +495,7 @@ WasmiEngine::init() wasm_engine_new_with_config(config), &wasm_engine_delete); } -WasmiEngine::WasmiEngine() - : engine_(init()), store_(nullptr, &wasm_store_delete) +WasmiEngine::WasmiEngine() : engine_(init()), store_(nullptr, &wasm_store_delete) { } @@ -544,14 +504,11 @@ WasmiEngine::addModule(Bytes const& wasmCode, bool instantiate, int64_t gas) { moduleWrap_.reset(); store_.reset(); // to free the memory before creating new store - store_ = { - wasm_store_new_with_memory_max_pages(engine_.get(), MAX_PAGES), - &wasm_store_delete}; + store_ = {wasm_store_new_with_memory_max_pages(engine_.get(), MAX_PAGES), &wasm_store_delete}; if (gas < 0) gas = std::numeric_limits::max(); - wasmi_error_t* err = - wasm_store_set_fuel(store_.get(), static_cast(gas)); + wasmi_error_t* err = wasm_store_set_fuel(store_.get(), static_cast(gas)); if (err) { // LCOV_EXCL_START @@ -561,12 +518,10 @@ WasmiEngine::addModule(Bytes const& wasmCode, bool instantiate, int64_t gas) // LCOV_EXCL_STOP } - moduleWrap_ = std::make_unique( - store_, wasmCode, instantiate, imports_, j_); + moduleWrap_ = std::make_unique(store_, wasmCode, instantiate, imports_, j_); if (!moduleWrap_) - throw std::runtime_error( - "can't create module wrapper"); // LCOV_EXCL_LINE + throw std::runtime_error("can't create module wrapper"); // LCOV_EXCL_LINE return moduleWrap_ ? 0 : -1; } @@ -603,8 +558,7 @@ WasmiEngine::convertParams(std::vector const& params) case WT_U8V: { auto mem = getMem(); if (!mem.s) - throw std::runtime_error( - "no memory exported"); // LCOV_EXCL_LINE + throw std::runtime_error("no memory exported"); // LCOV_EXCL_LINE auto const sz = p.of.u8v.sz; auto const ptr = allocate(sz); memcpy(mem.p + ptr, p.of.u8v.d, sz); @@ -614,8 +568,7 @@ WasmiEngine::convertParams(std::vector const& params) break; // LCOV_EXCL_START default: - throw std::runtime_error( - "unknown parameter type: " + std::to_string(p.type)); + throw std::runtime_error("unknown parameter type: " + std::to_string(p.type)); break; // LCOV_EXCL_STOP } @@ -625,9 +578,7 @@ WasmiEngine::convertParams(std::vector const& params) } int -WasmiEngine::compareParamTypes( - wasm_valtype_vec_t const* ftp, - std::vector const& p) +WasmiEngine::compareParamTypes(wasm_valtype_vec_t const* ftp, std::vector const& p) { if (ftp->size != p.size()) return std::min(ftp->size, p.size()); @@ -684,10 +635,9 @@ WasmiEngine::call(FuncInfo const& f, Types&&... args) static inline uint64_t usecs() { - uint64_t x = - std::chrono::duration_cast( - std::chrono::high_resolution_clock::now().time_since_epoch()) - .count(); + uint64_t x = std::chrono::duration_cast( + std::chrono::high_resolution_clock::now().time_since_epoch()) + .count(); return x; } #endif @@ -701,9 +651,7 @@ WasmiEngine::call(FuncInfo const& f, std::vector& in) // if (NR) { wasm_val_vec_new_uninitialized(&ret, NR); // // wasm_val_vec_new(&ret, NR, &rs[0]); // ret = WASM_ARRAY_VEC(rs); } - wasm_val_vec_t const inv = in.empty() - ? wasm_val_vec_t WASM_EMPTY_VEC - : wasm_val_vec_t{in.size(), in.data()}; + wasm_val_vec_t const inv = in.empty() ? wasm_val_vec_t WASM_EMPTY_VEC : wasm_val_vec_t{in.size(), in.data()}; #ifdef SHOW_CALL_TIME auto const start = usecs(); @@ -731,11 +679,7 @@ WasmiEngine::call(FuncInfo const& f, std::vector& in) template WasmiResult -WasmiEngine::call( - FuncInfo const& f, - std::vector& in, - std::int32_t p, - Types&&... args) +WasmiEngine::call(FuncInfo const& f, std::vector& in, std::int32_t p, Types&&... args) { add_param(in, p); return call(f, in, std::forward(args)...); @@ -743,11 +687,7 @@ WasmiEngine::call( template WasmiResult -WasmiEngine::call( - FuncInfo const& f, - std::vector& in, - std::int64_t p, - Types&&... args) +WasmiEngine::call(FuncInfo const& f, std::vector& in, std::int64_t p, Types&&... args) { add_param(in, p); return call(f, in, std::forward(args)...); @@ -755,12 +695,7 @@ WasmiEngine::call( template WasmiResult -WasmiEngine::call( - FuncInfo const& f, - std::vector& in, - uint8_t const* d, - int32_t sz, - Types&&... args) +WasmiEngine::call(FuncInfo const& f, std::vector& in, uint8_t const* d, int32_t sz, Types&&... args) { auto mem = getMem(); if (!mem.s) @@ -776,11 +711,7 @@ WasmiEngine::call( template WasmiResult -WasmiEngine::call( - FuncInfo const& f, - std::vector& in, - Bytes const& p, - Types&&... args) +WasmiEngine::call(FuncInfo const& f, std::vector& in, Bytes const& p, Types&&... args) { return call(f, in, p.data(), p.size(), std::forward(args)...); } @@ -833,11 +764,7 @@ WasmiEngine::run( } Expected, TER> -WasmiEngine::runHlp( - Bytes const& wasmCode, - std::string_view funcName, - std::vector const& params, - int64_t gas) +WasmiEngine::runHlp(Bytes const& wasmCode, std::string_view funcName, std::vector const& params, int64_t gas) { // currently only 1 module support, possible parallel UT run std::lock_guard lg(m_); @@ -863,26 +790,22 @@ WasmiEngine::runHlp( auto p = convertParams(params); if (int const comp = compareParamTypes(ftp, p); comp >= 0) - throw std::runtime_error( - "invalid parameter type #" + std::to_string(comp)); + throw std::runtime_error("invalid parameter type #" + std::to_string(comp)); auto const res = call<1>(f, p); if (res.f) throw std::runtime_error("<" + std::string(funcName) + "> failure"); else if (!res.r.vec_.size) - throw std::runtime_error( - "<" + std::string(funcName) + - "> return nothing"); // LCOV_EXCL_LINE + throw std::runtime_error("<" + std::string(funcName) + "> return nothing"); // LCOV_EXCL_LINE else if (res.r.vec_.data[0].kind != WASM_I32) throw std::runtime_error( - "<" + std::string(funcName) + "> return type mismatch, ret: " + - std::to_string(static_cast(res.r.vec_.data[0].kind))); + "<" + std::string(funcName) + + "> return type mismatch, ret: " + std::to_string(static_cast(res.r.vec_.data[0].kind))); if (gas == -1) gas = std::numeric_limits::max(); - WasmResult const ret{ - res.r.vec_.data[0].of.i32, gas - moduleWrap_->getGas()}; + WasmResult const ret{res.r.vec_.data[0].of.i32, gas - moduleWrap_->getGas()}; // #ifdef DEBUG_OUTPUT // auto& j = std::cerr; @@ -932,10 +855,7 @@ WasmiEngine::check( } NotTEC -WasmiEngine::checkHlp( - Bytes const& wasmCode, - std::string_view funcName, - std::vector const& params) +WasmiEngine::checkHlp(Bytes const& wasmCode, std::string_view funcName, std::vector const& params) { // currently only 1 module support, possible parallel UT run std::lock_guard lg(m_); @@ -949,14 +869,12 @@ WasmiEngine::checkHlp( throw std::runtime_error("no module"); // LCOV_EXCL_LINE // Looking for a func and compare parameter types - auto const f = - moduleWrap_->getFuncType(!funcName.empty() ? funcName : "_start"); + auto const f = moduleWrap_->getFuncType(!funcName.empty() ? funcName : "_start"); auto const* ftp = wasm_functype_params(f); auto const p = convertParams(params); if (int const comp = compareParamTypes(ftp, p); comp >= 0) - throw std::runtime_error( - "invalid parameter type #" + std::to_string(comp)); + throw std::runtime_error("invalid parameter type #" + std::to_string(comp)); return tesSUCCESS; } @@ -987,21 +905,17 @@ int32_t WasmiEngine::allocate(int32_t sz) { if (sz <= 0) - throw std::runtime_error( - "can't allocate memory, " + std::to_string(sz) + " bytes"); + throw std::runtime_error("can't allocate memory, " + std::to_string(sz) + " bytes"); auto res = call<1>(W_ALLOC, sz); if (res.f || !res.r.vec_.size || (res.r.vec_.data[0].kind != WASM_I32)) - throw std::runtime_error( - "can't allocate memory, " + std::to_string(sz) + - " bytes"); // LCOV_EXCL_LINE + throw std::runtime_error("can't allocate memory, " + std::to_string(sz) + " bytes"); // LCOV_EXCL_LINE int32_t const p = res.r.vec_.data[0].of.i32; auto const mem = getMem(); if (p <= 0 || p + sz > mem.s) - throw std::runtime_error( - "invalid memory allocation, " + std::to_string(sz) + " bytes"); + throw std::runtime_error("invalid memory allocation, " + std::to_string(sz) + " bytes"); return p; } From 7c8279ec83d5c0246568b75de44a305e14ad6b0c Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 3 Feb 2026 16:08:46 -0500 Subject: [PATCH 076/137] use buffers for uint32 WASM params (#6291) --- src/test/app/HostFuncImpl_test.cpp | 32 - src/test/app/TestHostFunctions.h | 38 +- src/test/app/Wasm_test.cpp | 25 +- .../all_host_functions/Cargo.lock | 4 +- .../all_host_functions/Cargo.toml | 2 +- .../all_host_functions/src/lib.rs | 23 +- .../app/wasm_fixtures/all_keylets/Cargo.lock | 4 +- .../app/wasm_fixtures/all_keylets/Cargo.toml | 2 +- src/test/app/wasm_fixtures/bad_align.c | 48 +- .../wasm_fixtures/codecov_tests/Cargo.lock | 4 +- .../wasm_fixtures/codecov_tests/Cargo.toml | 2 +- .../wasm_fixtures/codecov_tests/src/lib.rs | 376 +++- src/test/app/wasm_fixtures/copyFixtures.py | 14 +- src/test/app/wasm_fixtures/fixtures.cpp | 1543 ++++++++--------- src/test/app/wasm_fixtures/fixtures.h | 2 +- .../app/wasm_fixtures/float_tests/Cargo.lock | 4 +- .../app/wasm_fixtures/float_tests/Cargo.toml | 2 +- src/test/app/wasm_fixtures/ledgerSqn.c | 23 +- src/xrpld/app/wasm/HostFunc.h | 6 +- src/xrpld/app/wasm/HostFuncImpl.h | 6 +- src/xrpld/app/wasm/HostFuncWrapper.h | 27 +- .../wasm/detail/HostFuncImplLedgerHeader.cpp | 21 +- src/xrpld/app/wasm/detail/HostFuncWrapper.cpp | 85 +- 23 files changed, 1244 insertions(+), 1049 deletions(-) diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 811166c013..d786c4498a 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -117,16 +117,6 @@ struct HostFuncImpl_test : public beast::unit_test::suite if (BEAST_EXPECT(result.has_value())) BEAST_EXPECT(result.value() == env.current()->parentCloseTime().time_since_epoch().count()); } - - env.close(env.now() + std::chrono::seconds(std::numeric_limits::max() - 1)); - { - OpenView ov{*env.current()}; - ApplyContext ac = createApplyContext(env, ov); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); - auto const result = hfs.getParentLedgerTime(); - if (BEAST_EXPECTS(!result.has_value(), std::to_string(result.value()))) - BEAST_EXPECT(result.error() == HostFunctionError::INTERNAL); - } } void @@ -163,28 +153,6 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const result = hfs.getBaseFee(); if (BEAST_EXPECT(result.has_value())) BEAST_EXPECT(result.value() == env.current()->fees().base.drops()); - - { - Env env2( - *this, - envconfig([](std::unique_ptr cfg) { - cfg->FEES.reference_fee = static_cast(std::numeric_limits::max()) + 1; - return cfg; - }), - testable_amendments()); - // Run past the flag ledger so that a Fee change vote occurs and - // updates FeeSettings. (It also activates all supported - // amendments.) - for (auto i = env.current()->seq(); i <= 257; ++i) - env.close(); - - OpenView ov2{*env2.current()}; - ApplyContext ac2 = createApplyContext(env2, ov2); - WasmHostFunctionsImpl hfs2(ac2, dummyEscrow); - auto const result2 = hfs2.getBaseFee(); - if (BEAST_EXPECT(!result2.has_value())) - BEAST_EXPECT(result2.error() == HostFunctionError::INTERNAL); - } } void diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index 85f8049e94..68cf42b362 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -35,7 +35,7 @@ public: return rt_; } - Expected + Expected getLedgerSqn() override { return env_.current()->seq(); @@ -70,13 +70,13 @@ public: return rt_; } - Expected + Expected getLedgerSqn() override { return 12345; } - Expected + Expected getParentLedgerTime() override { return 67890; @@ -88,7 +88,7 @@ public: return env_.current()->header().parentHash; } - Expected + Expected getBaseFee() override { return 10; @@ -298,6 +298,15 @@ public: return Bytes{keylet.key.begin(), keylet.key.end()}; } + Expected + checkKeylet(AccountID const& account, std::uint32_t seq) override + { + if (!account) + return Unexpected(HostFunctionError::INVALID_ACCOUNT); + auto const keylet = keylet::check(account, seq); + return Bytes{keylet.key.begin(), keylet.key.end()}; + } + Expected credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) override { @@ -538,22 +547,16 @@ struct PerfHostFunctions : public TestHostFunctions { } - Expected + Expected getLedgerSqn() override { - auto seq = env_.current()->seq(); - if (seq > std::numeric_limits::max()) - return Unexpected(HostFunctionError::INTERNAL); // LCOV_EXCL_LINE - return static_cast(seq); + return env_.current()->seq(); } - Expected + Expected getParentLedgerTime() override { - auto time = env_.current()->parentCloseTime().time_since_epoch().count(); - if (time > std::numeric_limits::max()) - return Unexpected(HostFunctionError::INTERNAL); - return static_cast(time); + return env_.current()->parentCloseTime().time_since_epoch().count(); } Expected @@ -562,13 +565,10 @@ struct PerfHostFunctions : public TestHostFunctions return env_.current()->header().parentHash; } - Expected + Expected getBaseFee() override { - auto fee = env_.current()->fees().base.drops(); - if (fee > std::numeric_limits::max()) - return Unexpected(HostFunctionError::INTERNAL); - return static_cast(fee); + return env_.current()->fees().base.drops(); } Expected diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 3305ca03b8..c4ca26250c 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -182,7 +182,7 @@ struct Wasm_test : public beast::unit_test::suite auto re = engine.run(ledgerSqnWasm, ESCROW_FUNCTION_NAME, {}, imports, hfs, 1'000'000, env.journal); - checkResult(re, 0, 151); + checkResult(re, 0, 440); env.close(); env.close(); @@ -190,7 +190,7 @@ struct Wasm_test : public beast::unit_test::suite // empty module - run the same instance re = engine.run({}, ESCROW_FUNCTION_NAME, {}, imports, hfs, 1'000'000, env.journal); - checkResult(re, 5, 190); + checkResult(re, 5, 488); } void @@ -257,7 +257,7 @@ struct Wasm_test : public beast::unit_test::suite auto re = engine.run(allHostFuncWasm, ESCROW_FUNCTION_NAME, {}, imp, hfs, 1'000'000, env.journal); - checkResult(re, 1, 25'503); + checkResult(re, 1, 27'080); env.close(); } @@ -278,7 +278,7 @@ struct Wasm_test : public beast::unit_test::suite auto re = engine.run(allHostFuncWasm, ESCROW_FUNCTION_NAME, {}, imp, hfs, 1'000'000, env.journal); - checkResult(re, 1, 64'763); + checkResult(re, 1, 66'340); env.close(); } @@ -315,14 +315,14 @@ struct Wasm_test : public beast::unit_test::suite { std::shared_ptr hfs(new TestHostFunctions(env, 0)); auto re = runEscrowWasm(allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); - checkResult(re, 1, 64'763); + checkResult(re, 1, 66'340); } { // max() gas std::shared_ptr hfs(new TestHostFunctions(env, 0)); auto re = runEscrowWasm(allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, -1); - checkResult(re, 1, 64'763); + checkResult(re, 1, 66'340); } { // fail because trying to access nonexistent field @@ -340,7 +340,7 @@ struct Wasm_test : public beast::unit_test::suite std::shared_ptr hfs(new BadTestHostFunctions(env)); auto re = runEscrowWasm(allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); - checkResult(re, -201, 28'148); + checkResult(re, -201, 28'965); } { // fail because trying to allocate more than MAX_PAGES memory @@ -358,7 +358,7 @@ struct Wasm_test : public beast::unit_test::suite std::shared_ptr hfs(new BadTestHostFunctions(env)); auto re = runEscrowWasm(allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); - checkResult(re, -201, 28'148); + checkResult(re, -201, 28'965); } { // fail because recursion too deep @@ -574,7 +574,7 @@ struct Wasm_test : public beast::unit_test::suite auto const codecovWasm = hexToBytes(codecovTestsWasmHex); std::shared_ptr hfs(new TestHostFunctions(env, 0)); - auto const allowance = 187'131; + auto const allowance = 201'503; auto re = runEscrowWasm(codecovWasm, hfs, ESCROW_FUNCTION_NAME, {}, allowance); checkResult(re, 1, allowance); @@ -794,7 +794,7 @@ struct Wasm_test : public beast::unit_test::suite testcase("Wasm Bad Align"); // bad_align.c - auto const badAlignWasm = hexToBytes(badAlignHex); + auto const badAlignWasm = hexToBytes(badAlignWasmHex); using namespace test::jtx; @@ -807,7 +807,10 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); auto re = engine.run(badAlignWasm, "test", {}, imports, hfs, 1'000'000, env.journal); - BEAST_EXPECT(re && re->result == 0xbab88d46); + if (BEAST_EXPECTS(re, transToken(re.error()))) + { + BEAST_EXPECTS(re->result == 0x684f7941, std::to_string(re->result)); + } } env.close(); diff --git a/src/test/app/wasm_fixtures/all_host_functions/Cargo.lock b/src/test/app/wasm_fixtures/all_host_functions/Cargo.lock index 25ea64bbd2..dc4aa73edb 100644 --- a/src/test/app/wasm_fixtures/all_host_functions/Cargo.lock +++ b/src/test/app/wasm_fixtures/all_host_functions/Cargo.lock @@ -154,7 +154,7 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "xrpl-address-macro" version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git#d27d3e0b4abf3c0215aade729d89053805efe48e" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=u32-buffer#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" dependencies = [ "bs58", "quote", @@ -165,7 +165,7 @@ dependencies = [ [[package]] name = "xrpl-wasm-stdlib" version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git#d27d3e0b4abf3c0215aade729d89053805efe48e" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=u32-buffer#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" dependencies = [ "xrpl-address-macro", ] diff --git a/src/test/app/wasm_fixtures/all_host_functions/Cargo.toml b/src/test/app/wasm_fixtures/all_host_functions/Cargo.toml index 82f6ce05a3..102eb32cc0 100644 --- a/src/test/app/wasm_fixtures/all_host_functions/Cargo.toml +++ b/src/test/app/wasm_fixtures/all_host_functions/Cargo.toml @@ -10,7 +10,7 @@ edition = "2024" crate-type = ["cdylib"] [dependencies] -xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib" } +xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib", branch = "u32-buffer" } [profile.dev] panic = "abort" diff --git a/src/test/app/wasm_fixtures/all_host_functions/src/lib.rs b/src/test/app/wasm_fixtures/all_host_functions/src/lib.rs index 942e1c67c6..444fcaddfa 100644 --- a/src/test/app/wasm_fixtures/all_host_functions/src/lib.rs +++ b/src/test/app/wasm_fixtures/all_host_functions/src/lib.rs @@ -97,22 +97,27 @@ fn test_ledger_header_functions() -> i32 { let _ = trace("--- Category 1: Ledger Header Functions ---"); // Test 1.1: get_ledger_sqn() - should return current ledger sequence number - let sqn_result = unsafe { host::get_ledger_sqn() }; + let mut sqn_buffer = [0u8; 4]; + let sqn_result = unsafe { host::get_ledger_sqn(sqn_buffer.as_mut_ptr(), sqn_buffer.len()) }; if sqn_result <= 0 { let _ = trace_num("ERROR: get_ledger_sqn failed:", sqn_result as i64); return -101; // Ledger sequence number test failed } - let _ = trace_num("Ledger sequence number:", sqn_result as i64); + let ledger_sqn = u32::from_be_bytes(sqn_buffer); + let _ = trace_num("Ledger sequence number:", ledger_sqn as i64); // Test 1.2: get_parent_ledger_time() - should return parent ledger timestamp - let time_result = unsafe { host::get_parent_ledger_time() }; + let mut time_buffer = [0u8; 4]; + let time_result = + unsafe { host::get_parent_ledger_time(time_buffer.as_mut_ptr(), time_buffer.len()) }; if time_result <= 0 { let _ = trace_num("ERROR: get_parent_ledger_time failed:", time_result as i64); return -102; // Parent ledger time test failed } - let _ = trace_num("Parent ledger time:", time_result as i64); + let parent_ledger_time = u32::from_be_bytes(time_buffer); + let _ = trace_num("Parent ledger time:", parent_ledger_time as i64); // Test 1.3: get_parent_ledger_hash() - should return parent ledger hash (32 bytes) let mut hash_buffer = [0u8; 32]; @@ -616,11 +621,14 @@ fn test_keylet_generation_functions() -> i32 { // Test 5.3: escrow_keylet() - Generate keylet for escrow let mut escrow_keylet_buffer = [0u8; 32]; + let sequence_number: i32 = 1000; + let sequence_number_bytes = sequence_number.to_be_bytes(); let escrow_keylet_result = unsafe { host::escrow_keylet( account_id.0.as_ptr(), account_id.0.len(), - 1000, // Sequence number + sequence_number_bytes.as_ptr(), + sequence_number_bytes.len(), escrow_keylet_buffer.as_mut_ptr(), escrow_keylet_buffer.len(), ) @@ -634,11 +642,14 @@ fn test_keylet_generation_functions() -> i32 { // Test 5.4: oracle_keylet() - Generate keylet for oracle let mut oracle_keylet_buffer = [0u8; 32]; + let document_id: i32 = 42; + let document_id_bytes = document_id.to_be_bytes(); let oracle_keylet_result = unsafe { host::oracle_keylet( account_id.0.as_ptr(), account_id.0.len(), - 42, // Document ID + document_id_bytes.as_ptr(), + document_id_bytes.len(), oracle_keylet_buffer.as_mut_ptr(), oracle_keylet_buffer.len(), ) diff --git a/src/test/app/wasm_fixtures/all_keylets/Cargo.lock b/src/test/app/wasm_fixtures/all_keylets/Cargo.lock index 88a6e34459..d45ec0df78 100644 --- a/src/test/app/wasm_fixtures/all_keylets/Cargo.lock +++ b/src/test/app/wasm_fixtures/all_keylets/Cargo.lock @@ -154,7 +154,7 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "xrpl-address-macro" version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git#d27d3e0b4abf3c0215aade729d89053805efe48e" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=u32-buffer#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" dependencies = [ "bs58", "quote", @@ -165,7 +165,7 @@ dependencies = [ [[package]] name = "xrpl-wasm-stdlib" version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git#d27d3e0b4abf3c0215aade729d89053805efe48e" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=u32-buffer#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" dependencies = [ "xrpl-address-macro", ] diff --git a/src/test/app/wasm_fixtures/all_keylets/Cargo.toml b/src/test/app/wasm_fixtures/all_keylets/Cargo.toml index 823de4127d..abd232e636 100644 --- a/src/test/app/wasm_fixtures/all_keylets/Cargo.toml +++ b/src/test/app/wasm_fixtures/all_keylets/Cargo.toml @@ -15,7 +15,7 @@ opt-level = 's' panic = "abort" [dependencies] -xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib" } +xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib", branch = "u32-buffer" } [profile.dev] panic = "abort" diff --git a/src/test/app/wasm_fixtures/bad_align.c b/src/test/app/wasm_fixtures/bad_align.c index ff29456c2a..edb045560d 100644 --- a/src/test/app/wasm_fixtures/bad_align.c +++ b/src/test/app/wasm_fixtures/bad_align.c @@ -3,21 +3,45 @@ int32_t float_from_uint(uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); int32_t -get_tx_nested_field(uint8_t const*, int32_t, uint8_t*, int32_t); +check_keylet(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); -uint8_t e_data[32 * 1024]; +uint8_t e_data1[32 * 1024]; +uint8_t e_data2[32 * 1024]; + +int32_t +test1() +{ + e_data1[1] = 0xFF; + e_data1[2] = 0xFF; + e_data1[3] = 0xFF; + e_data1[4] = 0xFF; + e_data1[5] = 0xFF; + e_data1[6] = 0xFF; + e_data1[7] = 0xFF; + e_data1[8] = 0xFF; + int32_t result = float_from_uint(&e_data1[1], 8, &e_data1[35], 12, 0); + return result >= 0 ? *((int32_t*)(&e_data1[36])) : result; +} + +int32_t +test2() +{ + // Set up misaligned uint32 (seq) at offset 1 + e_data2[1] = 0xFF; + e_data2[2] = 0xFF; + e_data2[3] = 0xFF; + e_data2[4] = 0xFF; + // Set up valid non-zero AccountID (20 bytes) at offset 10 + for (int i = 0; i < 20; i++) + e_data2[10 + i] = i + 1; + // Call check_keylet with misaligned uint32 at &e_data2[1] to hit line 72 in HostFuncWrapper.cpp + int32_t result = check_keylet(&e_data2[10], 20, &e_data2[1], 4, &e_data2[35], 32); + // Return the misaligned value directly to validate it was read correctly (-1 if all 0xFF) + return result >= 0 ? *((int32_t*)(&e_data2[36])) : result; +} int32_t test() { - e_data[1] = 0xFF; - e_data[2] = 0xFF; - e_data[3] = 0xFF; - e_data[4] = 0xFF; - e_data[5] = 0xFF; - e_data[6] = 0xFF; - e_data[7] = 0xFF; - e_data[8] = 0xFF; - float_from_uint(&e_data[1], 8, &e_data[35], 12, 0); - return *((int32_t*)(&e_data[36])); + return test1() + test2(); } diff --git a/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock b/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock index e44fd14755..4a4b71bdcc 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock +++ b/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock @@ -154,7 +154,7 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "xrpl-address-macro" version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git#d27d3e0b4abf3c0215aade729d89053805efe48e" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=u32-buffer#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" dependencies = [ "bs58", "quote", @@ -165,7 +165,7 @@ dependencies = [ [[package]] name = "xrpl-wasm-stdlib" version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git#d27d3e0b4abf3c0215aade729d89053805efe48e" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=u32-buffer#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" dependencies = [ "xrpl-address-macro", ] diff --git a/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml b/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml index 5031bcb566..81a682bb37 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml +++ b/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml @@ -15,4 +15,4 @@ opt-level = 's' panic = "abort" [dependencies] -xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib" } +xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib", branch = "u32-buffer" } diff --git a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs index aa05eec9d9..5e58d13ecd 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs +++ b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs @@ -55,12 +55,20 @@ pub extern "C" fn finish() -> i32 { // that's in a separate test file (all_keylets). // The float tests are also in a separate file (float_tests). // ######################################## - check_result(unsafe { host::get_ledger_sqn() }, 12345, "get_ledger_sqn"); - check_result( - unsafe { host::get_parent_ledger_time() }, - 67890, - "get_parent_ledger_time", - ); + with_buffer::<4, _, _>(|ptr, len| { + check_result( + unsafe { host::get_ledger_sqn(ptr, len) }, + 4, + "get_ledger_sqn", + ); + }); + with_buffer::<4, _, _>(|ptr, len| { + check_result( + unsafe { host::get_parent_ledger_time(ptr, len) }, + 4, + "get_parent_ledger_time", + ); + }); with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { host::get_parent_ledger_hash(ptr, len) }, @@ -68,7 +76,9 @@ pub extern "C" fn finish() -> i32 { "get_parent_ledger_hash", ); }); - check_result(unsafe { host::get_base_fee() }, 10, "get_base_fee"); + with_buffer::<4, _, _>(|ptr, len| { + check_result(unsafe { host::get_base_fee(ptr, len) }, 4, "get_base_fee"); + }); let amendment_name: &[u8] = b"test_amendment"; let amendment_id: [u8; 32] = [1; 32]; check_result( @@ -312,38 +322,6 @@ pub extern "C" fn finish() -> i32 { // Step #3: Test getData[Type] edge cases // ######################################## - // uint64 - with_buffer::<32, _, _>(|ptr, len| { - check_result( - unsafe { - host::float_from_uint( - locator.as_ptr().wrapping_add(1_000_000_000), - 8, - ptr, - len, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }, - error_codes::POINTER_OUT_OF_BOUNDS, - "float_from_uint_len_oob", - ) - }); - with_buffer::<32, _, _>(|ptr, len| { - check_result( - unsafe { - host::float_from_uint( - locator.as_ptr(), - locator.len(), - ptr, - len, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }, - error_codes::INVALID_PARAMS, - "float_from_uint_wrong_len", - ) - }); - // SField check_result( unsafe { host::get_tx_array_len(2) }, // not a valid SField value @@ -381,6 +359,72 @@ pub extern "C" fn finish() -> i32 { "get_tx_nested_array_len_ptr_oob", ); + // uint32 + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::check_keylet( + account.0.as_ptr(), + account.0.len(), + locator.as_ptr().wrapping_add(1_000_000_000), + 8, + ptr, + len, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "check_keylet_oob_len_u32", + ) + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::check_keylet( + account.0.as_ptr(), + account.0.len(), + account.0.as_ptr(), + account.0.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "check_keylet_wrong_len_u32", + ) + }); + + // uint64 + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_from_uint( + locator.as_ptr().wrapping_add(1_000_000_000), + 8, + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_from_uint_len_oob", + ) + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_from_uint( + locator.as_ptr(), + locator.len(), + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::INVALID_PARAMS, + "float_from_uint_wrong_len_uint64", + ) + }); + // uint256 check_result( unsafe { @@ -1011,6 +1055,155 @@ pub extern "C" fn finish() -> i32 { ) }); + // invalid UInt32 + + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::escrow_keylet( + account.0.as_ptr(), + account.0.len(), + account.0.as_ptr(), + account.0.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "escrow_keylet_wrong_size_uint32", + ) + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::mpt_issuance_keylet( + account.0.as_ptr(), + account.0.len(), + account.0.as_ptr(), + account.0.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "mpt_issuance_keylet_wrong_size_uint32", + ) + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::nft_offer_keylet( + account.0.as_ptr(), + account.0.len(), + account.0.as_ptr(), + account.0.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "nft_offer_keylet_wrong_size_uint32", + ) + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::offer_keylet( + account.0.as_ptr(), + account.0.len(), + account.0.as_ptr(), + account.0.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "offer_keylet_wrong_size_uint32", + ) + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::oracle_keylet( + account.0.as_ptr(), + account.0.len(), + account.0.as_ptr(), + account.0.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "oracle_keylet_wrong_size_uint32", + ) + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::paychan_keylet( + account.0.as_ptr(), + account.0.len(), + account.0.as_ptr(), + account.0.len(), + account.0.as_ptr(), + account.0.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "paychan_keylet_wrong_size_uint32", + ) + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::permissioned_domain_keylet( + account.0.as_ptr(), + account.0.len(), + account.0.as_ptr(), + account.0.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "permissioned_domain_keylet_wrong_size_uint32", + ) + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::ticket_keylet( + account.0.as_ptr(), + account.0.len(), + account.0.as_ptr(), + account.0.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "ticket_keylet_wrong_size_uint32", + ) + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::vault_keylet( + account.0.as_ptr(), + account.0.len(), + account.0.as_ptr(), + account.0.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "vault_keylet_wrong_size_uint32", + ) + }); + // invalid UInt256 check_result( @@ -1075,9 +1268,20 @@ pub extern "C" fn finish() -> i32 { "account_keylet_wrong_size_accountid", ) }); + let seq: i32 = 1; + let seq_bytes = seq.to_be_bytes(); with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::check_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) }, + unsafe { + host::check_keylet( + locator.as_ptr(), + locator.len(), + seq_bytes.as_ptr(), + seq_bytes.len(), + ptr, + len, + ) + }, error_codes::INVALID_PARAMS, "check_keylet_wrong_size_accountid", ) @@ -1191,7 +1395,16 @@ pub extern "C" fn finish() -> i32 { }); with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::escrow_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) }, + unsafe { + host::escrow_keylet( + locator.as_ptr(), + locator.len(), + seq_bytes.as_ptr(), + seq_bytes.len(), + ptr, + len, + ) + }, error_codes::INVALID_PARAMS, "escrow_keylet_wrong_size_accountid", ) @@ -1234,7 +1447,16 @@ pub extern "C" fn finish() -> i32 { }); with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::mpt_issuance_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) }, + unsafe { + host::mpt_issuance_keylet( + locator.as_ptr(), + locator.len(), + seq_bytes.as_ptr(), + seq_bytes.len(), + ptr, + len, + ) + }, error_codes::INVALID_PARAMS, "mpt_issuance_keylet_wrong_size_accountid", ) @@ -1257,21 +1479,48 @@ pub extern "C" fn finish() -> i32 { }); with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::nft_offer_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) }, + unsafe { + host::nft_offer_keylet( + locator.as_ptr(), + locator.len(), + seq_bytes.as_ptr(), + seq_bytes.len(), + ptr, + len, + ) + }, error_codes::INVALID_PARAMS, "nft_offer_keylet_wrong_size_accountid", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::offer_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) }, + unsafe { + host::offer_keylet( + locator.as_ptr(), + locator.len(), + seq_bytes.as_ptr(), + seq_bytes.len(), + ptr, + len, + ) + }, error_codes::INVALID_PARAMS, "offer_keylet_wrong_size_accountid", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::oracle_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) }, + unsafe { + host::oracle_keylet( + locator.as_ptr(), + locator.len(), + seq_bytes.as_ptr(), + seq_bytes.len(), + ptr, + len, + ) + }, error_codes::INVALID_PARAMS, "oracle_keylet_wrong_size_accountid", ) @@ -1284,7 +1533,8 @@ pub extern "C" fn finish() -> i32 { locator.len(), account.0.as_ptr(), account.0.len(), - 1, + seq_bytes.as_ptr(), + seq_bytes.len(), ptr, len, ) @@ -1301,7 +1551,8 @@ pub extern "C" fn finish() -> i32 { account.0.len(), locator.as_ptr(), // invalid AccountID size locator.len(), - 1, + seq_bytes.as_ptr(), + seq_bytes.len(), ptr, len, ) @@ -1313,7 +1564,14 @@ pub extern "C" fn finish() -> i32 { with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::permissioned_domain_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) + host::permissioned_domain_keylet( + locator.as_ptr(), + locator.len(), + seq_bytes.as_ptr(), + seq_bytes.len(), + ptr, + len, + ) }, error_codes::INVALID_PARAMS, "permissioned_domain_keylet_wrong_size_accountid", @@ -1328,14 +1586,32 @@ pub extern "C" fn finish() -> i32 { }); with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::ticket_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) }, + unsafe { + host::ticket_keylet( + locator.as_ptr(), + locator.len(), + seq_bytes.as_ptr(), + seq_bytes.len(), + ptr, + len, + ) + }, error_codes::INVALID_PARAMS, "ticket_keylet_wrong_size_accountid", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::vault_keylet(locator.as_ptr(), locator.len(), 1, ptr, len) }, + unsafe { + host::vault_keylet( + locator.as_ptr(), + locator.len(), + seq_bytes.as_ptr(), + seq_bytes.len(), + ptr, + len, + ) + }, error_codes::INVALID_PARAMS, "vault_keylet_wrong_size_accountid", ) diff --git a/src/test/app/wasm_fixtures/copyFixtures.py b/src/test/app/wasm_fixtures/copyFixtures.py index cd53184b5e..2c0abc560d 100644 --- a/src/test/app/wasm_fixtures/copyFixtures.py +++ b/src/test/app/wasm_fixtures/copyFixtures.py @@ -54,12 +54,7 @@ def process_rust(project_name): ")" ) try: - result = subprocess.run( - build_cmd, shell=True, check=True, capture_output=True, text=True - ) - print(f"stdout: {result.stdout}") - if result.stderr: - print(f"stderr: {result.stderr}") + subprocess.run(build_cmd, shell=True, check=True) print(f"WASM file for {project_name} has been built and optimized.") except subprocess.CalledProcessError as e: print(f"exec error: {e}") @@ -91,12 +86,7 @@ def process_c(project_name): f"&& wasm-opt {wasm_path} {OPT} -o {wasm_path}" ) try: - result = subprocess.run( - build_cmd, shell=True, check=True, capture_output=True, text=True - ) - print(f"stdout: {result.stdout}") - if result.stderr: - print(f"stderr: {result.stderr}") + subprocess.run(build_cmd, shell=True, check=True) print( f"WASM file for {project_name} has been built with WASI support using clang." ) diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 6bff452705..9df5201e9f 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -104,238 +104,239 @@ extern std::string const sha512PureWasmHex = "7065732b0a6d756c746976616c7565"; extern std::string const ledgerSqnWasmHex = - "0061736d010000000108026000017f60000002160103656e760e6765745f6c65646765725f" - "73716e000003030201000503010002063e0a7f004180080b7f004180080b7f004180100b7f" - "004180100b7f00418090040b7f004180080b7f00418090040b7f00418080080b7f0041000b" - "7f0041010b07b0010d066d656d6f72790200115f5f7761736d5f63616c6c5f63746f727300" - "010666696e69736800020362756603000c5f5f64736f5f68616e646c6503010a5f5f646174" - "615f656e6403020b5f5f737461636b5f6c6f7703030c5f5f737461636b5f6869676803040d" - "5f5f676c6f62616c5f6261736503050b5f5f686561705f6261736503060a5f5f686561705f" - "656e6403070d5f5f6d656d6f72795f6261736503080c5f5f7461626c655f6261736503090a" - "150202000b1001017f100022004100200041044b1b0b007f0970726f647563657273010c70" - "726f6365737365642d62790105636c616e675f31392e312e352d776173692d73646b202868" - "747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a6563742061" - "62346235613264623538323935386166316565333038613739306366646234326264323437" - "32302900490f7461726765745f6665617475726573042b0f6d757461626c652d676c6f6261" - "6c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976" - "616c7565"; + "0061736d01000000010e0360027f7f017f6000006000017f02160103656e760e6765745f6c65646765725f73716e0000030302010205030100" + "02063f0a7f01418088040b7f004180080b7f004180080b7f004180080b7f00418088040b7f004180080b7f00418088040b7f00418080080b7f" + "0041000b7f0041010b07aa010c066d656d6f72790200115f5f7761736d5f63616c6c5f63746f727300010666696e69736800020c5f5f64736f" + "5f68616e646c6503010a5f5f646174615f656e6403020b5f5f737461636b5f6c6f7703030c5f5f737461636b5f6869676803040d5f5f676c6f" + "62616c5f6261736503050b5f5f686561705f6261736503060a5f5f686561705f656e6403070d5f5f6d656d6f72795f6261736503080c5f5f74" + "61626c655f6261736503090a3d0202000b3801037f230041106b220024002000410c6a410410002101200028020c2102200041106a24002001" + "41054100200241054f1b20014100481b0b007f0970726f647563657273010c70726f6365737365642d62790105636c616e675f31392e312e35" + "2d776173692d73646b202868747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a65637420616234623561326462" + "353832393538616631656533303861373930636664623432626432343732302900490f7461726765745f6665617475726573042b0f6d757461" + "626c652d676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; extern std::string const allHostFunctionsWasmHex = - "0061736d0100000001540c60047f7f7f7f017f60027f7f017f60037f7f7f017f60057f7f7f" - "7f7f017f6000017f60017f017f60037f7f7f0060037f7f7e017f60087f7f7f7f7f7f7f7f01" - "7f60067f7f7f7f7f7f017f60017f0060027f7f0002ae061a08686f73745f6c69620c676574" - "5f74785f6669656c64000208686f73745f6c69620974726163655f6e756d000708686f7374" - "5f6c6962057472616365000308686f73745f6c69620e6765745f6c65646765725f73716e00" - "0408686f73745f6c6962166765745f706172656e745f6c65646765725f74696d6500040868" - "6f73745f6c6962166765745f706172656e745f6c65646765725f68617368000108686f7374" - "5f6c69620d74726163655f6163636f756e74000008686f73745f6c6962136765745f74785f" - "6e65737465645f6669656c64000008686f73745f6c6962106765745f74785f61727261795f" - "6c656e000508686f73745f6c6962176765745f74785f6e65737465645f61727261795f6c65" - "6e000108686f73745f6c69621c6765745f63757272656e745f6c65646765725f6f626a5f66" - "69656c64000208686f73745f6c6962236765745f63757272656e745f6c65646765725f6f62" - "6a5f6e65737465645f6669656c64000008686f73745f6c6962206765745f63757272656e74" - "5f6c65646765725f6f626a5f61727261795f6c656e000508686f73745f6c6962276765745f" - "63757272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e0001" - "08686f73745f6c69620e6163636f756e745f6b65796c6574000008686f73745f6c69621063" - "616368655f6c65646765725f6f626a000208686f73745f6c6962146765745f6c6564676572" - "5f6f626a5f6669656c64000008686f73745f6c69621b6765745f6c65646765725f6f626a5f" - "6e65737465645f6669656c64000308686f73745f6c6962186765745f6c65646765725f6f62" - "6a5f61727261795f6c656e000108686f73745f6c69621f6765745f6c65646765725f6f626a" - "5f6e65737465645f61727261795f6c656e000208686f73745f6c69621163726564656e7469" - "616c5f6b65796c6574000808686f73745f6c69620d657363726f775f6b65796c6574000308" - "686f73745f6c69620d6f7261636c655f6b65796c6574000308686f73745f6c696213636f6d" - "707574655f7368613531325f68616c66000008686f73745f6c6962076765745f6e66740009" - "08686f73745f6c69620b7570646174655f6461746100010306050a0b060604050301001106" - "19037f01418080c0000b7f0041af99c0000b7f0041b099c0000b072e04066d656d6f727902" - "000666696e697368001e0a5f5f646174615f656e6403010b5f5f686561705f626173650302" - "0ae61b057c01027f230041206b220124002000027f418180202001410c6a41141000220241" - "14470440024020024100480440200020023602040c010b2000417f3602040b41010c010b20" - "00200129000c370001200041116a2001411c6a280000360000200041096a200141146a2900" - "0037000041000b3a0000200141206a24000b450020012d0000450440200020012900013700" - "00200041106a200141116a280000360000200041086a200141096a2900003700000f0b4180" - "80c000410b20013402041001000b1900200241214f0440000b200020023602042000200136" - "02000b1900200241094f0440000b20002002360204200020013602000bec1901097f230041" - "b0036b22002400418b80c000411b41004100410010021a41a680c000411941004100410010" - "021a41e780c000412b41004100410010021a027f0240024002400240024002400240100322" - "0141004a0440419281c00041172001ad10011a1004220141004c0d0141a981c00041132001" - "ad10011a200041c8016a22034200370300200041c0016a22054200370300200041b8016a22" - "044200370300200042003703b001200041b0016a22064120100522014120470d0241bc81c0" - "00411320064120410110021a41cf81c000412041004100410010021a41dc82c000412e4100" - "4100410010021a200041a0016a410036020020004198016a42003703002000420037039001" - "4181802020004190016a22024114100022014114470d03418a83c00041142002411410061a" - "2000420037037041888018200041f0006a22024108100022014108470d04419e83c0004117" - "420810011a41b583c000412820024108410110021a2000410036025041848008200041d000" - "6a22024104100022014104470d0541dd83c000411520024104410110021a200041013b003c" - "200342003703002005420037030020044200370300200042003703b00102402000413c6a41" - "02200641201007220141004e044041f283c00041142001ad10011a200041306a2006200110" - "1c418684c000410d20002802302000280234410110021a0c010b419384c00041292001ac10" - "011a0b41bc84c00041154183803c1008ac10011a41d184c00041134189803c1008ac10011a" - "02402000413c6a41021009220141004e044041e484c00041142001ad10011a0c010b41f884" - "c000412d2001ac10011a0b41a585c000412341004100410010021a41de86c0004133410041" - "00410010021a2000420037037041828018200041f0006a22014108100a220241004c0d0620" - "024108460440419187c000412b420810011a41bc87c000412f20014108410110021a0c080b" - "41eb87c000412f2002ad10011a200041286a200041f0006a2002101d419a88c00041172000" - "280228200028022c410110021a0c070b41bf82c000411d2001ac10011a419b7f0c070b419a" - "82c00041252001ac10011a419a7f0c060b41ef81c000412b2001ac10011a41997f0c050b41" - "b486c000412a2001ac10011a41b77e0c040b41f385c00041c1002001ac10011a41b67e0c03" - "0b41c885c000412b2001ac10011a41b57e0c020b41b188c00041c5002002ac10011a0b2000" - "41a0016a410036020020004198016a42003703002000420037039001024041818020200041" - "90016a22024114100a220141004a044041f688c000411e2002411410061a0c010b419489c0" - "0041332001ac10011a0b200041013b0050200041c8016a4200370300200041c0016a420037" - "0300200041b8016a4200370300200042003703b0010240200041d0006a4102200041b0016a" - "22014120100b220241004e044041c789c000411c2002ad10011a200041206a20012002101c" - "41e389c000411520002802202000280224410110021a0c010b41f889c00041392002ac1001" - "1a0b41b18ac00041244183803c100cac10011a0240200041d0006a4102100d220141004e04" - "4041d58ac000411c2001ad10011a0c010b41f18ac000413d2001ac10011a0b41ae8bc00041" - "2841004100410010021a41d68bc000412f41004100410010021a200041b0016a2202101a20" - "0041f0006a22012002101b200041a8016a4200370300200041a0016a420037030020004198" - "016a42003703002000420037039001024002400240024002402001411420004190016a2202" - "4120100e22014120460440200241204100100f220441004a044041858cc00041232004ad10" - "011a20004200370350200441828018200041d0006a220141081010220241004c0d02200241" - "0846044041a88cc000412a420810011a41d28cc000412e20014108410110021a0c060b4180" - "8dc000412e2002ad10011a200041186a200041d0006a2002101d41ae8dc000411620002802" - "18200028021c410110021a0c050b41e68fc000413c2004ac10011a200041c8016a42003703" - "00200041c0016a4200370300200041b8016a4200370300200042003703b001410141828018" - "200041b0016a4120101022014100480d020c030b41ba92c000412e2001ac10011a41ef7c0c" - "050b41c48dc000412b2002ac10011a0c020b41a290c00041c1002001ac10011a0b20004101" - "3b00504101200041d0006a4102200041b0016a412010112201410048044041e390c0004135" - "2001ac10011a0b41014183803c101222014100480440419891c00041322001ac10011a0b41" - "01200041d0006a410210132201410048044041ca91c00041392001ac10011a0b418392c000" - "413741004100410010021a0c010b200041013b003c200041c8016a4200370300200041c001" - "6a4200370300200041b8016a4200370300200042003703b001024020042000413c6a410220" - "0041b0016a220141201011220241004e044041ef8dc000411b2002ad10011a200041106a20" - "012002101c418a8ec000411420002802102000280214410110021a0c010b419e8ec0004131" - "2002ac10011a0b41cf8ec000412320044183803c1012ac10011a024020042000413c6a4102" - "1013220141004e044041f28ec000411b2001ad10011a0c010b418d8fc00041352001ac1001" - "1a0b41c28fc000412441004100410010021a0b41e892c000412f41004100410010021a2000" - "41b0016a2201101a2000413c6a22042001101b200041e8006a4200370300200041e0006a42" - "00370300200041d8006a420037030020004200370350024002400240024002400240200441" - "14200041d0006a22024120100e22014120460440419793c000410f20024120410110021a20" - "004188016a420037030020004180016a4200370300200041f8006a42003703002000420037" - "03700240200441142004411441a693c0004109200041f0006a220141201014220241004a04" - "40200041086a20012002101c41ae93c00041122000280208200028020c410110021a0c010b" - "41c093c000413c2002ac10011a0b200041a8016a22084200370300200041a0016a22034200" - "37030020004198016a2205420037030020004200370390012000413c6a2202411441e80720" - "004190016a22074120101522014120470d0141fc93c000410e20074120410110021a200041" - "c8016a4200370300200041c0016a4200370300200041b8016a4200370300200042003703b0" - "0120024114412a200041b0016a22044120101622014120470d02418a94c000410e20044120" - "410110021a419894c000412441004100410010021a419195c000412541004100410010021a" - "20004188016a420037030020004180016a4200370300200041f8006a420037030020004200" - "37037041b695c0004117200041f0006a22024120101722014120470d0341cd95c000410b41" - "b695c0004117410110021a41d895c000411120024120410110021a2004101a200041d0006a" - "22062004101b20084200370300200342003703002005420037030020004200370390010240" - "200422032003410020036b41037122026a22054f0d0020020440200221010340200341003a" - "0000200341016a2103200141016b22010d000b0b200241016b4107490d000340200341003a" - "0000200341076a41003a0000200341066a41003a0000200341056a41003a0000200341046a" - "41003a0000200341036a41003a0000200341026a41003a0000200341016a41003a00002003" - "41086a22032005470d000b0b200541800220026b2201417c716a220320054b044003402005" - "4100360200200541046a22052003490d000b0b024020032001410371220120036a22024f0d" - "002001220504400340200341003a0000200341016a2103200541016b22050d000b0b200141" - "016b4107490d000340200341003a0000200341076a41003a0000200341066a41003a000020" - "0341056a41003a0000200341046a41003a0000200341036a41003a0000200341026a41003a" - "0000200341016a41003a0000200341086a22032002470d000b0b0240200641142007412020" - "044180021018220141004a044041e995c00041102001ad10011a20014181024f0d0641f995" - "c000410920042001410110021a0c010b418296c000412e2001ac10011a0b41b096c0004112" - "41c296c00041074101100222014100480d0541c996c000411d2001ad10011a41e696c00041" - "11422a10014100480d0641f796c000411c420010011a419397c000411a4100410041001002" - "1a41ff97c000412941004100410010021a41a898c000412810192201412846044041d098c0" - "00412741a898c0004128410110021a41f798c000411e41004100410010021a41bf80c00041" - "2841004100410010021a41010c080b419599c000411a2001ac10011a41c37a0c070b41f494" - "c000411d2001ac10011a418b7c0c060b41d894c000411c2001ac10011a41897c0c050b41bc" - "94c000411c2001ac10011a41887c0c040b41dd97c00041222001ac10011a41a77b0c030b00" - "0b41c797c00041162001ac10011a41a57b0c010b41ad97c000411a42a47b10011a41a47b0b" - "200041b0036a24000b0bb9190100418080c0000baf196572726f725f636f64653d3d3d3d20" - "484f53542046554e4354494f4e532054455354203d3d3d54657374696e6720323620686f73" - "742066756e6374696f6e73535543434553533a20416c6c20686f73742066756e6374696f6e" - "20746573747320706173736564212d2d2d2043617465676f727920313a204c656467657220" - "4865616465722046756e6374696f6e73202d2d2d4c65646765722073657175656e6365206e" - "756d6265723a506172656e74206c65646765722074696d653a506172656e74206c65646765" - "7220686173683a535543434553533a204c6564676572206865616465722066756e6374696f" - "6e734552524f523a206765745f706172656e745f6c65646765725f686173682077726f6e67" - "206c656e6774683a4552524f523a206765745f706172656e745f6c65646765725f74696d65" - "206661696c65643a4552524f523a206765745f6c65646765725f73716e206661696c65643a" - "2d2d2d2043617465676f727920323a205472616e73616374696f6e20446174612046756e63" - "74696f6e73202d2d2d5472616e73616374696f6e204163636f756e743a5472616e73616374" - "696f6e20466565206c656e6774683a5472616e73616374696f6e2046656520287365726961" - "6c697a65642058525020616d6f756e74293a5472616e73616374696f6e2053657175656e63" - "653a4e6573746564206669656c64206c656e6774683a4e6573746564206669656c643a494e" - "464f3a206765745f74785f6e65737465645f6669656c64206e6f74206170706c696361626c" - "653a5369676e657273206172726179206c656e6774683a4d656d6f73206172726179206c65" - "6e6774683a4e6573746564206172726179206c656e6774683a494e464f3a206765745f7478" - "5f6e65737465645f61727261795f6c656e206e6f74206170706c696361626c653a53554343" - "4553533a205472616e73616374696f6e20646174612066756e6374696f6e734552524f523a" - "206765745f74785f6669656c642853657175656e6365292077726f6e67206c656e6774683a" - "4552524f523a206765745f74785f6669656c6428466565292077726f6e67206c656e677468" - "20286578706563746564203820627974657320666f7220585250293a4552524f523a206765" - "745f74785f6669656c64284163636f756e74292077726f6e67206c656e6774683a2d2d2d20" - "43617465676f727920333a2043757272656e74204c6564676572204f626a6563742046756e" - "6374696f6e73202d2d2d43757272656e74206f626a6563742062616c616e6365206c656e67" - "7468202858525020616d6f756e74293a43757272656e74206f626a6563742062616c616e63" - "65202873657269616c697a65642058525020616d6f756e74293a43757272656e74206f626a" - "6563742062616c616e6365206c656e67746820286e6f6e2d58525020616d6f756e74293a43" - "757272656e74206f626a6563742062616c616e63653a494e464f3a206765745f6375727265" - "6e745f6c65646765725f6f626a5f6669656c642842616c616e636529206661696c65642028" - "6d6179206265206578706563746564293a43757272656e74206c6564676572206f626a6563" - "74206163636f756e743a494e464f3a206765745f63757272656e745f6c65646765725f6f62" - "6a5f6669656c64284163636f756e7429206661696c65643a43757272656e74206e65737465" - "64206669656c64206c656e6774683a43757272656e74206e6573746564206669656c643a49" - "4e464f3a206765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669" - "656c64206e6f74206170706c696361626c653a43757272656e74206f626a65637420536967" - "6e657273206172726179206c656e6774683a43757272656e74206e65737465642061727261" - "79206c656e6774683a494e464f3a206765745f63757272656e745f6c65646765725f6f626a" - "5f6e65737465645f61727261795f6c656e206e6f74206170706c696361626c653a53554343" - "4553533a2043757272656e74206c6564676572206f626a6563742066756e6374696f6e732d" - "2d2d2043617465676f727920343a20416e79204c6564676572204f626a6563742046756e63" - "74696f6e73202d2d2d5375636365737366756c6c7920636163686564206f626a6563742069" - "6e20736c6f743a436163686564206f626a6563742062616c616e6365206c656e6774682028" - "58525020616d6f756e74293a436163686564206f626a6563742062616c616e636520287365" - "7269616c697a65642058525020616d6f756e74293a436163686564206f626a656374206261" - "6c616e6365206c656e67746820286e6f6e2d58525020616d6f756e74293a43616368656420" - "6f626a6563742062616c616e63653a494e464f3a206765745f6c65646765725f6f626a5f66" - "69656c642842616c616e636529206661696c65643a436163686564206e6573746564206669" - "656c64206c656e6774683a436163686564206e6573746564206669656c643a494e464f3a20" - "6765745f6c65646765725f6f626a5f6e65737465645f6669656c64206e6f74206170706c69" - "6361626c653a436163686564206f626a656374205369676e657273206172726179206c656e" - "6774683a436163686564206e6573746564206172726179206c656e6774683a494e464f3a20" - "6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e206e6f742061" - "70706c696361626c653a535543434553533a20416e79206c6564676572206f626a65637420" - "66756e6374696f6e73494e464f3a2063616368655f6c65646765725f6f626a206661696c65" - "642028657870656374656420776974682074657374206669787475726573293a494e464f3a" - "206765745f6c65646765725f6f626a5f6669656c64206661696c6564206173206578706563" - "74656420286e6f20636163686564206f626a656374293a494e464f3a206765745f6c656467" - "65725f6f626a5f6e65737465645f6669656c64206661696c65642061732065787065637465" - "643a494e464f3a206765745f6c65646765725f6f626a5f61727261795f6c656e206661696c" - "65642061732065787065637465643a494e464f3a206765745f6c65646765725f6f626a5f6e" - "65737465645f61727261795f6c656e206661696c65642061732065787065637465643a5355" - "43434553533a20416e79206c6564676572206f626a6563742066756e6374696f6e73202869" - "6e7465726661636520746573746564294552524f523a206163636f756e745f6b65796c6574" - "206661696c656420666f722063616368696e6720746573743a2d2d2d2043617465676f7279" - "20353a204b65796c65742047656e65726174696f6e2046756e6374696f6e73202d2d2d4163" - "636f756e74206b65796c65743a546573745479706543726564656e7469616c206b65796c65" - "743a494e464f3a2063726564656e7469616c5f6b65796c6574206661696c65642028657870" - "6563746564202d20696e74657266616365206973737565293a457363726f77206b65796c65" - "743a4f7261636c65206b65796c65743a535543434553533a204b65796c65742067656e6572" - "6174696f6e2066756e6374696f6e734552524f523a206f7261636c655f6b65796c65742066" - "61696c65643a4552524f523a20657363726f775f6b65796c6574206661696c65643a455252" - "4f523a206163636f756e745f6b65796c6574206661696c65643a2d2d2d2043617465676f72" - "7920363a205574696c6974792046756e6374696f6e73202d2d2d48656c6c6f2c205852504c" - "205741534d20776f726c6421496e70757420646174613a5348413531322068616c66206861" - "73683a4e46542064617461206c656e6774683a4e465420646174613a494e464f3a20676574" - "5f6e6674206661696c656420286578706563746564202d206e6f2073756368204e4654293a" - "54657374207472616365206d6573736167657061796c6f616454726163652066756e637469" - "6f6e206279746573207772697474656e3a54657374206e756d626572207472616365547261" - "63655f6e756d2066756e6374696f6e20737563636565646564535543434553533a20557469" - "6c6974792066756e6374696f6e734552524f523a2074726163655f6e756d2829206661696c" - "65643a4552524f523a2074726163652829206661696c65643a4552524f523a20636f6d7075" - "74655f7368613531325f68616c66206661696c65643a2d2d2d2043617465676f727920373a" - "2044617461205570646174652046756e6374696f6e73202d2d2d55706461746564206c6564" - "67657220656e74727920646174612066726f6d205741534d20746573745375636365737366" - "756c6c792075706461746564206c656467657220656e74727920776974683a535543434553" - "533a2044617461207570646174652066756e6374696f6e734552524f523a20757064617465" - "5f64617461206661696c65643a004d0970726f64756365727302086c616e67756167650104" - "52757374000c70726f6365737365642d6279010572757374631d312e38352e312028346562" - "31363132353020323032352d30332d313529002c0f7461726765745f666561747572657302" - "2b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; + "0061736d0100000001540c60027f7f017f60037f7f7f017f60047f7f7f7f017f60017f017f" + "60067f7f7f7f7f7f017f60037f7f7f0060057f7f7f7f7f017f60037f7f7e017f60087f7f7f" + "7f7f7f7f7f017f60017f0060027f7f006000017f02ae061a08686f73745f6c69620c676574" + "5f74785f6669656c64000108686f73745f6c69620974726163655f6e756d000708686f7374" + "5f6c6962057472616365000608686f73745f6c69620e6765745f6c65646765725f73716e00" + "0008686f73745f6c6962166765745f706172656e745f6c65646765725f74696d6500000868" + "6f73745f6c6962166765745f706172656e745f6c65646765725f68617368000008686f7374" + "5f6c6962136765745f74785f6e65737465645f6669656c64000208686f73745f6c69621067" + "65745f74785f61727261795f6c656e000308686f73745f6c6962176765745f74785f6e6573" + "7465645f61727261795f6c656e000008686f73745f6c69621c6765745f63757272656e745f" + "6c65646765725f6f626a5f6669656c64000108686f73745f6c6962236765745f6375727265" + "6e745f6c65646765725f6f626a5f6e65737465645f6669656c64000208686f73745f6c6962" + "206765745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e00030868" + "6f73745f6c6962276765745f63757272656e745f6c65646765725f6f626a5f6e6573746564" + "5f61727261795f6c656e000008686f73745f6c69621063616368655f6c65646765725f6f62" + "6a000108686f73745f6c69621163726564656e7469616c5f6b65796c6574000808686f7374" + "5f6c69620d657363726f775f6b65796c6574000408686f73745f6c69620d6f7261636c655f" + "6b65796c6574000408686f73745f6c696213636f6d707574655f7368613531325f68616c66" + "000208686f73745f6c6962076765745f6e6674000408686f73745f6c69620b757064617465" + "5f64617461000008686f73745f6c6962146765745f6c65646765725f6f626a5f6669656c64" + "000208686f73745f6c69621b6765745f6c65646765725f6f626a5f6e65737465645f666965" + "6c64000608686f73745f6c6962186765745f6c65646765725f6f626a5f61727261795f6c65" + "6e000008686f73745f6c69621f6765745f6c65646765725f6f626a5f6e65737465645f6172" + "7261795f6c656e000108686f73745f6c69620e6163636f756e745f6b65796c657400020868" + "6f73745f6c69620d74726163655f6163636f756e740002030c0b090a05050b050001010300" + "05030100110619037f01418080c0000b7f0041af99c0000b7f0041b099c0000b072e04066d" + "656d6f727902000666696e697368001e0a5f5f646174615f656e6403010b5f5f686561705f" + "6261736503020ac61d0b990101027f230041306b220124002000027f418180202001411c6a" + "4114100022024114470440417f20022002417f4e1b210241010c010b200020012f001c3b00" + "01200041036a2001411e6a2d00003a0000200120012900233703082001200141286a290000" + "37000d200128001f21022000410d6a200129000d3700002000200129030837020841000b3a" + "000020002002360204200141306a24000b460020012d00004101460440418080c000410b20" + "013402041001000b20002001290001370000200041106a200141116a280000360000200041" + "086a200141096a2900003700000b1900200241214f0440000b200020023602042000200136" + "02000b1900200241094f0440000b20002002360204200020013602000bde1a01097f230041" + "b0036b22002400418b80c000411b41014100410010021a41a680c000411941014100410010" + "021a41e780c000412b41014100410010021a20004100360270024002400240024002400240" + "02400240200041f0006a220741041003220141004a0440419281c000411720002802702201" + "41187420014180fe03714108747220014108764180fe037120014118767272ad10011a2000" + "41003602900120004190016a220341041004220141004c0d0141a981c00041132000280290" + "01220141187420014180fe03714108747220014108764180fe037120014118767272ad1001" + "1a200041c8016a22024200370300200041c0016a22054200370300200041b8016a22044200" + "370300200042003703b001200041b0016a22064120100522014120470d0241bc81c0004113" + "20064120410110021a41cf81c000412041014100410010021a41dc82c000412e4101410041" + "0010021a200041a0016a410036020020004198016a42003703002000420037039001418180" + "2020034114100022014114470d03418a83c00041142003101f200042003703704188801820" + "074108100022014108470d04419e83c0004117420810011a41b583c0004128200741084101" + "10021a2000410036024841848008200041c8006a22034104100022014104470d0541dd83c0" + "00411520034104410110021a200041013b0034200242003703002005420037030020044200" + "370300200042003703b0010240200041346a4102200641201006220141004e044041f283c0" + "0041142001ad10011a200041286a20062001101c418684c000410d2000280228200028022c" + "410110021a0c010b419384c00041292001ac10011a0b41bc84c00041154183803c1007ac10" + "011a41d184c00041134189803c1007ac10011a0240200041346a41021008220141004e0440" + "41e484c00041142001ad10011a0c010b41f884c000412d2001ac10011a0b41a585c0004123" + "41014100410010021a41de86c000413341014100410010021a200042003703704182801820" + "0041f0006a220141081009220341004c0d0620034108460440419187c000412b420810011a" + "41bc87c000412f20014108410110021a0c080b41eb87c000412f2003ad10011a200041206a" + "200041f0006a2003101d419a88c000411720002802202000280224410110021a0c070b41bf" + "82c000411d2001ac10011a419b7f21020c070b419a82c00041252001ac10011a419a7f2102" + "0c060b41ef81c000412b2001ac10011a41997f21020c050b41b486c000412a2001ac10011a" + "41b77e21020c040b41f385c00041c1002001ac10011a41b67e21020c030b41c885c000412b" + "2001ac10011a41b57e21020c020b41b188c00041c5002003ac10011a0b200041a0016a4100" + "36020020004198016a4200370300200042003703900102404181802020004190016a220341" + "141009220141004a044041f688c000411e2003101f0c010b419489c00041332001ac10011a" + "0b200041013b0048200041c8016a4200370300200041c0016a4200370300200041b8016a42" + "00370300200042003703b0010240200041c8006a4102200041b0016a22014120100a220341" + "004e044041c789c000411c2003ad10011a200041186a20012003101c41e389c00041152000" + "280218200028021c410110021a0c010b41f889c00041392003ac10011a0b41b18ac0004124" + "4183803c100bac10011a0240200041c8006a4102100c220141004e044041d58ac000411c20" + "01ad10011a0c010b41f18ac000413d2001ac10011a0b41ae8bc00041284101410041001002" + "1a41d68bc000412f41014100410010021a200041b0016a2203101a200041f0006a22012003" + "101b200041a8016a4200370300200041a0016a420037030020004198016a42003703002000" + "42003703900102400240024002400240200120004190016a22031020220141204604402003" + "41204100100d220441004a044041858cc00041232004ad10011a2000420037034820042000" + "41c8006a220141081021220341004c0d022003410846044041a88cc000412a420810011a41" + "d28cc000412e20014108410110021a0c060b41808dc000412e2003ad10011a200041106a20" + "0041c8006a2003101d41ae8dc000411620002802102000280214410110021a0c050b41e68f" + "c000413c2004ac10011a200041c8016a4200370300200041c0016a4200370300200041b801" + "6a4200370300200042003703b0014101200041b0016a4120102122014100480d020c030b41" + "ba92c000412e2001ac10011a41ef7c21020c050b41c48dc000412b2003ac10011a0c020b41" + "a290c00041c1002001ac10011a0b200041013b00484101200041c8006a200041b0016a1022" + "2201410048044041e390c00041352001ac10011a0b4101102322014100480440419891c000" + "41322001ac10011a0b4101200041c8006a10242201410048044041ca91c00041392001ac10" + "011a0b418392c000413741014100410010021a0c010b200041013b0034200041c8016a4200" + "370300200041c0016a4200370300200041b8016a4200370300200042003703b00102402004" + "200041346a200041b0016a22011022220341004e044041ef8dc000411b2003ad10011a2000" + "41086a20012003101c418a8ec00041142000280208200028020c410110021a0c010b419e8e" + "c00041312003ac10011a0b41cf8ec000412320041023ac10011a02402004200041346a1024" + "220141004e044041f28ec000411b2001ad10011a0c010b418d8fc00041352001ac10011a0b" + "41c28fc000412441014100410010021a0b41e892c000412f41014100410010021a200041b0" + "016a2201101a200041346a22042001101b200041e0006a4200370300200041d8006a420037" + "0300200041d0006a420037030020004200370348024002400240024002402004200041c800" + "6a2203102022014120460440419793c000410f20034120410110021a20004188016a420037" + "030020004180016a4200370300200041f8006a420037030020004200370370024020044114" + "2004411441a693c0004109200041f0006a22014120100e220341004a044020002001200310" + "1c41ae93c000411220002802002000280204410110021a0c010b41c093c000413c2003ac10" + "011a0b200041a8016a22064200370300200041a0016a2202420037030020004198016a2205" + "4200370300200042003703900120004180808cc07e360268200041346a22034114200041e8" + "006a410420004190016a22084120100f22014120470d0141fc93c000410e20084120410110" + "021a200041c8016a4200370300200041c0016a4200370300200041b8016a42003703002000" + "42003703b001200041808080d00236026c20034114200041ec006a4104200041b0016a2204" + "4120101022014120470d02418a94c000410e20044120410110021a419894c0004124410141" + "00410010021a419195c000412541014100410010021a20004188016a420037030020004180" + "016a4200370300200041f8006a42003703002000420037037041b695c0004117200041f000" + "6a22034120101122014120470d0341cd95c000410b41b695c0004117410110021a41d895c0" + "00411120034120410110021a2004101a200041c8006a22072004101b200642003703002002" + "420037030020054200370300200042003703900102404100200422026b410371220320026a" + "220520024d0d0020030440200321010340200241003a0000200241016a2102200141016b22" + "010d000b0b200341016b4107490d000340200241003a0000200241076a41003a0000200241" + "066a41003a0000200241056a41003a0000200241046a41003a0000200241036a41003a0000" + "200241026a41003a0000200241016a41003a0000200241086a22022005470d000b0b200541" + "800220036b2201417c716a220220054b0440034020054100360200200541046a2205200249" + "0d000b0b024020022001410371220120026a22034f0d002001220504400340200241003a00" + "00200241016a2102200541016b22050d000b0b200141016b4107490d000340200241003a00" + "00200241076a41003a0000200241066a41003a0000200241056a41003a0000200241046a41" + "003a0000200241036a41003a0000200241026a41003a0000200241016a41003a0000200241" + "086a22022003470d000b0b0240200741142008412020044180021012220141004a044041e9" + "95c00041102001ad10011a20014181024f0d0641f995c000410920042001410110021a0c01" + "0b418296c000412e2001ac10011a0b41b096c000411241c296c00041074101100222014100" + "480d0541c996c000411d2001ad10011a41e696c0004111422a1001410048044041ad97c000" + "411a42a47b10011a41a47b21020c070b41f796c000411c420010011a41012102419397c000" + "411a41014100410010021a41ff97c000412941014100410010021a41a898c0004128101322" + "01412846044041d098c000412741a898c0004128410110021a41f798c000411e4101410041" + "0010021a41bf80c000412841014100410010021a0c070b419599c000411a2001ac10011a41" + "c37a21020c060b41f494c000411d2001ac10011a418b7c21020c050b41d894c000411c2001" + "ac10011a41897c21020c040b41bc94c000411c2001ac10011a41887c21020c030b41dd97c0" + "0041222001ac10011a41a77b21020c020b000b41c797c00041162001ac10011a41a57b2102" + "0b200041b0036a240020020b0d00200020012002411410191a0b0c00200041142001412010" + "180b0e002000418280182001200210140b0e002000200141022002412010150b0a00200041" + "83803c10160b0a0020002001410210170b0bb9190100418080c0000baf196572726f725f63" + "6f64653d3d3d3d20484f53542046554e4354494f4e532054455354203d3d3d54657374696e" + "6720323620686f73742066756e6374696f6e73535543434553533a20416c6c20686f737420" + "66756e6374696f6e20746573747320706173736564212d2d2d2043617465676f727920313a" + "204c6564676572204865616465722046756e6374696f6e73202d2d2d4c6564676572207365" + "7175656e6365206e756d6265723a506172656e74206c65646765722074696d653a50617265" + "6e74206c656467657220686173683a535543434553533a204c656467657220686561646572" + "2066756e6374696f6e734552524f523a206765745f706172656e745f6c65646765725f6861" + "73682077726f6e67206c656e6774683a4552524f523a206765745f706172656e745f6c6564" + "6765725f74696d65206661696c65643a4552524f523a206765745f6c65646765725f73716e" + "206661696c65643a2d2d2d2043617465676f727920323a205472616e73616374696f6e2044" + "6174612046756e6374696f6e73202d2d2d5472616e73616374696f6e204163636f756e743a" + "5472616e73616374696f6e20466565206c656e6774683a5472616e73616374696f6e204665" + "65202873657269616c697a65642058525020616d6f756e74293a5472616e73616374696f6e" + "2053657175656e63653a4e6573746564206669656c64206c656e6774683a4e657374656420" + "6669656c643a494e464f3a206765745f74785f6e65737465645f6669656c64206e6f742061" + "70706c696361626c653a5369676e657273206172726179206c656e6774683a4d656d6f7320" + "6172726179206c656e6774683a4e6573746564206172726179206c656e6774683a494e464f" + "3a206765745f74785f6e65737465645f61727261795f6c656e206e6f74206170706c696361" + "626c653a535543434553533a205472616e73616374696f6e20646174612066756e6374696f" + "6e734552524f523a206765745f74785f6669656c642853657175656e6365292077726f6e67" + "206c656e6774683a4552524f523a206765745f74785f6669656c6428466565292077726f6e" + "67206c656e67746820286578706563746564203820627974657320666f7220585250293a45" + "52524f523a206765745f74785f6669656c64284163636f756e74292077726f6e67206c656e" + "6774683a2d2d2d2043617465676f727920333a2043757272656e74204c6564676572204f62" + "6a6563742046756e6374696f6e73202d2d2d43757272656e74206f626a6563742062616c61" + "6e6365206c656e677468202858525020616d6f756e74293a43757272656e74206f626a6563" + "742062616c616e6365202873657269616c697a65642058525020616d6f756e74293a437572" + "72656e74206f626a6563742062616c616e6365206c656e67746820286e6f6e2d5852502061" + "6d6f756e74293a43757272656e74206f626a6563742062616c616e63653a494e464f3a2067" + "65745f63757272656e745f6c65646765725f6f626a5f6669656c642842616c616e63652920" + "6661696c656420286d6179206265206578706563746564293a43757272656e74206c656467" + "6572206f626a656374206163636f756e743a494e464f3a206765745f63757272656e745f6c" + "65646765725f6f626a5f6669656c64284163636f756e7429206661696c65643a4375727265" + "6e74206e6573746564206669656c64206c656e6774683a43757272656e74206e6573746564" + "206669656c643a494e464f3a206765745f63757272656e745f6c65646765725f6f626a5f6e" + "65737465645f6669656c64206e6f74206170706c696361626c653a43757272656e74206f62" + "6a656374205369676e657273206172726179206c656e6774683a43757272656e74206e6573" + "746564206172726179206c656e6774683a494e464f3a206765745f63757272656e745f6c65" + "646765725f6f626a5f6e65737465645f61727261795f6c656e206e6f74206170706c696361" + "626c653a535543434553533a2043757272656e74206c6564676572206f626a656374206675" + "6e6374696f6e732d2d2d2043617465676f727920343a20416e79204c6564676572204f626a" + "6563742046756e6374696f6e73202d2d2d5375636365737366756c6c792063616368656420" + "6f626a65637420696e20736c6f743a436163686564206f626a6563742062616c616e636520" + "6c656e677468202858525020616d6f756e74293a436163686564206f626a6563742062616c" + "616e6365202873657269616c697a65642058525020616d6f756e74293a436163686564206f" + "626a6563742062616c616e6365206c656e67746820286e6f6e2d58525020616d6f756e7429" + "3a436163686564206f626a6563742062616c616e63653a494e464f3a206765745f6c656467" + "65725f6f626a5f6669656c642842616c616e636529206661696c65643a436163686564206e" + "6573746564206669656c64206c656e6774683a436163686564206e6573746564206669656c" + "643a494e464f3a206765745f6c65646765725f6f626a5f6e65737465645f6669656c64206e" + "6f74206170706c696361626c653a436163686564206f626a656374205369676e6572732061" + "72726179206c656e6774683a436163686564206e6573746564206172726179206c656e6774" + "683a494e464f3a206765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c" + "656e206e6f74206170706c696361626c653a535543434553533a20416e79206c6564676572" + "206f626a6563742066756e6374696f6e73494e464f3a2063616368655f6c65646765725f6f" + "626a206661696c656420286578706563746564207769746820746573742066697874757265" + "73293a494e464f3a206765745f6c65646765725f6f626a5f6669656c64206661696c656420" + "617320657870656374656420286e6f20636163686564206f626a656374293a494e464f3a20" + "6765745f6c65646765725f6f626a5f6e65737465645f6669656c64206661696c6564206173" + "2065787065637465643a494e464f3a206765745f6c65646765725f6f626a5f61727261795f" + "6c656e206661696c65642061732065787065637465643a494e464f3a206765745f6c656467" + "65725f6f626a5f6e65737465645f61727261795f6c656e206661696c656420617320657870" + "65637465643a535543434553533a20416e79206c6564676572206f626a6563742066756e63" + "74696f6e732028696e7465726661636520746573746564294552524f523a206163636f756e" + "745f6b65796c6574206661696c656420666f722063616368696e6720746573743a2d2d2d20" + "43617465676f727920353a204b65796c65742047656e65726174696f6e2046756e6374696f" + "6e73202d2d2d4163636f756e74206b65796c65743a546573745479706543726564656e7469" + "616c206b65796c65743a494e464f3a2063726564656e7469616c5f6b65796c657420666169" + "6c656420286578706563746564202d20696e74657266616365206973737565293a45736372" + "6f77206b65796c65743a4f7261636c65206b65796c65743a535543434553533a204b65796c" + "65742067656e65726174696f6e2066756e6374696f6e734552524f523a206f7261636c655f" + "6b65796c6574206661696c65643a4552524f523a20657363726f775f6b65796c6574206661" + "696c65643a4552524f523a206163636f756e745f6b65796c6574206661696c65643a2d2d2d" + "2043617465676f727920363a205574696c6974792046756e6374696f6e73202d2d2d48656c" + "6c6f2c205852504c205741534d20776f726c6421496e70757420646174613a534841353132" + "2068616c6620686173683a4e46542064617461206c656e6774683a4e465420646174613a49" + "4e464f3a206765745f6e6674206661696c656420286578706563746564202d206e6f207375" + "6368204e4654293a54657374207472616365206d6573736167657061796c6f616454726163" + "652066756e6374696f6e206279746573207772697474656e3a54657374206e756d62657220" + "747261636554726163655f6e756d2066756e6374696f6e2073756363656564656453554343" + "4553533a205574696c6974792066756e6374696f6e734552524f523a2074726163655f6e75" + "6d2829206661696c65643a4552524f523a2074726163652829206661696c65643a4552524f" + "523a20636f6d707574655f7368613531325f68616c66206661696c65643a2d2d2d20436174" + "65676f727920373a2044617461205570646174652046756e6374696f6e73202d2d2d557064" + "61746564206c656467657220656e74727920646174612066726f6d205741534d2074657374" + "5375636365737366756c6c792075706461746564206c656467657220656e74727920776974" + "683a535543434553533a2044617461207570646174652066756e6374696f6e734552524f52" + "3a207570646174655f64617461206661696c65643a004d0970726f64756365727302086c61" + "6e6775616765010452757374000c70726f6365737365642d6279010572757374631d312e38" + "372e30202831373036376539616320323032352d30352d303929002c0f7461726765745f66" + "65617475726573022b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; extern std::string const deepRecursionHex = "0061736d010000000105016000017f030201000608017f0141c0843d0b070a010666696e69" @@ -376,535 +377,460 @@ extern std::string const hfPerfTest = "0a6d756c746976616c7565"; extern std::string const allKeyletsWasmHex = - "0061736d0100000001530a60057f7f7f7f7f017f60047f7f7f7f017f60067f7f7f7f7f7f01" - "7f60037f7f7f017f60087f7f7f7f7f7f7f7f017f60037f7f7e017f60077f7f7f7f7f7f7f01" - "7f60057f7f7f7f7f006000017f60037f7f7f000284051808686f73745f6c69620574726163" - "65000008686f73745f6c69621063616368655f6c65646765725f6f626a000308686f73745f" - "6c69620974726163655f6e756d000508686f73745f6c6962146765745f6c65646765725f6f" - "626a5f6669656c64000108686f73745f6c69621c6765745f63757272656e745f6c65646765" - "725f6f626a5f6669656c64000308686f73745f6c69620d74726163655f6163636f756e7400" - "0108686f73745f6c69620e6163636f756e745f6b65796c6574000108686f73745f6c69620b" - "6c696e655f6b65796c6574000408686f73745f6c69620a616d6d5f6b65796c657400020868" - "6f73745f6c69620c636865636b5f6b65796c6574000008686f73745f6c6962116372656465" - "6e7469616c5f6b65796c6574000408686f73745f6c69620f64656c65676174655f6b65796c" - "6574000208686f73745f6c6962166465706f7369745f707265617574685f6b65796c657400" - "0208686f73745f6c69620a6469645f6b65796c6574000108686f73745f6c69620d65736372" - "6f775f6b65796c6574000008686f73745f6c6962136d70745f69737375616e63655f6b6579" - "6c6574000008686f73745f6c69620e6d70746f6b656e5f6b65796c6574000208686f73745f" - "6c6962106e66745f6f666665725f6b65796c6574000008686f73745f6c69620c6f66666572" - "5f6b65796c6574000008686f73745f6c69620e7061796368616e5f6b65796c657400060868" - "6f73745f6c69621a7065726d697373696f6e65645f646f6d61696e5f6b65796c6574000008" - "686f73745f6c69620e7369676e6572735f6b65796c6574000108686f73745f6c69620d7469" - "636b65745f6b65796c6574000008686f73745f6c69620c7661756c745f6b65796c65740000" - "03040307080905030100110619037f01418080c0000b7f0041ad8ac0000b7f0041b08ac000" - "0b073e05066d656d6f727902000d6f626a6563745f65786973747300180666696e69736800" - "190a5f5f646174615f656e6403010b5f5f686561705f6261736503020ad53103fb0402017f" - "027e23004180016b2205240002400240024020012d0000450440200541186a200141196a29" - "0000370300200541106a200141116a290000370300200541086a200141096a290000370300" - "200520012900013703002002200320054120410110001a2005412041001001220141004c0d" - "01024002402004450440418b80c000410f4285801410021a200141858014200541e0006a41" - "20100322014120460d0141a680c0004115417f20012001417f4e1b2201ac10021a20004101" - "3a0000200020013602040c060b418b80c000410f2004ac10021a20012004200541e0006a41" - "14100322014114460d0141a680c0004115417f20012001417f4e1b2201ac10021a20004101" - "3a0000200020013602040c050b200541c2006a200541e2006a2d00003a0000200541286a20" - "0541ef006a2900002206370300200541306a200541f7006a2900002207370300200541386a" - "200541ff006a2d000022013a0000200541cf006a2006370000200541d7006a200737000020" - "0541df006a20013a0000200520052f00603b01402005200529006722063703202005200528" - "006336004320052006370047419a80c000410c200541406b4120410110001a0c030b200541" - "c2006a200541e2006a2d00003a0000200520052900673703202005200541ec006a29000037" - "0025200541cc006a2005290025370000200520052f00603b01402005200528006336004320" - "052005290320370047419a80c000410c200541406b4114410110001a0c020b41c280c00041" - "1620012802042201ac10021a200041013a0000200020013602040c020b41bb80c000410720" - "01ac10021a200041013a0000200020013602040c010b20004180023b01000b20054180016a" - "24000bd627020a7f027e23004180076b2200240041d880c000412341004100410010001a02" - "402000027f02404181802020004188016a22034114100422044114460440200041066a2000" - "418a016a22012d00003a00002000200029008f013703e001200020004194016a2202290000" - "3700e501200041106a20002900e501370000200020002f0088013b01042000200028008b01" - "360007200020002903e00137000b41fb80c0004108200041046a2205411410051a41838020" - "20034114100422044114470d032000411a6a20012d00003a00002000200029008f013703e0" - "01200020022900003700e501200041246a20002900e501370000200020002f0088013b0118" - "2000200028008b0136001b200020002903e00137001f418381c000410c200041186a411410" - "051a200041a0016a2201420037030020004198016a2202420037030020004190016a420037" - "030020004200370388012005411420034120100622044120460d0102402004410048044020" - "0020043602300c010b2000417f3602300b41010c020b0c020b200041c5006a200129030037" - "00002000413d6a2002290300370000200041356a20004190016a2903003700002000200029" - "03880137002d41000b3a002c20004188016a22032000412c6a418f81c00041074181802010" - "180240024020002d00880145044041002104419681c000413541004100410010001a200041" - "de006a41c4003a0000200041d8006a4100360200200041e3006a41003a0000200041d5a601" - "3b015c200042003703502000410036005f200041a0016a2201420037030020004198016a22" - "02420037030020004190016a220542003703002000420037038801200041046a4114200041" - "186a4114200041d0006a411420034120100722034120470440024020034100480440200020" - "033602680c010b2000417f3602680b410121040c020b200041fd006a200129030037000020" - "0041f5006a2002290300370000200041ed006a200529030037000020002000290388013700" - "650c010b200028028c01210441878ac0004112420510021a0c010b200020043a0064200041" - "88016a200041e4006a41cb81c000410941001018024020002d00880145044041d481c00041" - "3741004100410010001a200041f0016a200041286a2201280100360200200041e8016a2000" - "41206a2202290100370300200041fc016a200041d8006a290300220a37020020004184026a" - "200041e0006a2802002203360200200020002901183703e00120002000290350220b3702f4" - "01200041e8066a22042003360200200041e0066a2203200a3703002000200b3703d8062000" - "41f4066a2002290100370200200041fc066a2001280100360200200020002901183702ec06" - "20004188026a200041d8066a22014128101a2000418c016a200041e0016a41d000101a2000" - "410136028801200041f0066a22024200370300200442003703002003420037030020004200" - "3703d80641998ac0004114200041b4016a4128200141201008220141204704400240200141" - "00480440200020013602e4010c010b2000417f3602e4010b410121040c020b200041f9016a" - "2002290300370000200041f1016a2004290300370000200041e9016a200329030037000020" - "0020002903d8063700e101410021040c010b200028028c01210441878ac000411242051002" - "1a0c010b200020043a00e001200041b4026a200041e0016a2203418b82c000410341818020" - "1018024020002d00b40245044041002104418e82c000413141004100410010001a200041f8" - "016a22014200370300200041f0016a22024200370300200041e8016a220542003703002000" - "42003703e001200041046a4114410620034120100922034120470440024020034100480440" - "200020033602c0020c010b2000417f3602c0020b410121040c020b200041d5026a20012903" - "00370000200041cd026a2002290300370000200041c5026a20052903003700002000200029" - "03e0013700bd020c010b20002802b802210441878ac0004112420610021a0c010b20002004" - "3a00bc02200041e0016a2203200041bc026a41bf82c0004105418180201018024020002d00" - "e0014504404100210441c482c000413341004100410010001a200041f8016a220142003703" - "00200041f0016a22024200370300200041e8016a22054200370300200042003703e0012000" - "41046a220941142009411441f782c000411220034120100a22034120470440024020034100" - "480440200020033602e4020c010b2000417f3602e4020b410121040c020b200041f9026a20" - "01290300370000200041f1026a2002290300370000200041e9026a20052903003700002000" - "20002903e0013700e1020c010b20002802e401210441878ac0004112420610021a0c010b20" - "0020043a00e002200041e0016a2203200041e0026a418983c000410a419880201018024020" - "002d00e00145044041002104419383c000413841004100410010001a200041f8016a220142" - "00370300200041f0016a22024200370300200041e8016a22054200370300200042003703e0" - "01200041046a4114200041186a411420034120100b22034120470440024020034100480440" - "20002003360288030c010b2000417f360288030b410121040c020b2000419d036a20012903" - "0037000020004195036a20022903003700002000418d036a20052903003700002000200029" - "03e001370085030c010b20002802e401210441878ac0004112420710021a0c010b20002004" - "3a008403200041e0016a220520004184036a41cb83c0004108418180201018024002400240" - "0240024002400240024002400240024020002d00e00145044041d383c00041364100410041" - "0010001a230041206b22032400200341186a22064200370300200341106a22074200370300" - "200341086a2208420037030020034200370300200041a8036a2201027f200041046a220441" - "14200041186a2209411420034120100c220241204704400240200241004804402001200236" - "02040c010b2001417f3602040b41010c010b20012003290300370001200141196a20062903" - "00370000200141116a2007290300370000200141096a200829030037000041000b3a000020" - "0341206a240020052001418984c000410e41818020101820002d00e0010d01419784c00041" - "3c41004100410010001a230041206b22032400200341186a22064200370300200341106a22" - "074200370300200341086a2208420037030020034200370300200041cc036a2201027f2004" - "411420034120100d22024120470440024020024100480440200120023602040c010b200141" - "7f3602040b41010c010b20012003290300370001200141196a200629030037000020014111" - "6a2007290300370000200141096a200829030037000041000b3a0000200341206a24002005" - "200141d384c000410341818020101820002d00e0010d0241d684c000413141004100410010" - "001a230041206b22032400200341186a22064200370300200341106a220742003703002003" - "41086a2208420037030020034200370300200041f0036a2201027f20044114410b20034120" - "100e22024120470440024020024100480440200120023602040c010b2001417f3602040b41" - "010c010b20012003290300370001200141196a2006290300370000200141116a2007290300" - "370000200141096a200829030037000041000b3a0000200341206a240020052001418785c0" - "00410641818020101820002d00e0010d03418d85c000413441004100410010001a23004120" - "6b22032400200341186a22064200370300200341106a22074200370300200341086a220842" - "003703002003420037030020004194046a2201027f20044114410c20034120100f22024120" - "470440024020024100480440200120023602040c010b2001417f3602040b41010c010b2001" - "2003290300370001200141196a2006290300370000200141116a2007290300370000200141" - "096a200829030037000041000b3a0000200341206a2400200041f4016a200041146a280100" - "360200200041ec016a2000410c6a290100370200200020002901043702e401200041808080" - "e0003602e001200041d8066a2203200141c185c000410b41848020101820002d00d8060d04" - "41cc85c000413941004100410010001a230041206b22012400200141186a22064200370300" - "200141106a22074200370300200141086a2208420037030020014200370300200041b8046a" - "2202027f200541182009411420014120101022054120470440024020054100480440200220" - "053602040c010b2002417f3602040b41010c010b20022001290300370001200241196a2006" - "290300370000200241116a2007290300370000200241096a200829030037000041000b3a00" - "00200141206a240020032002418586c000410741818020101820002d00d8060d05418c86c0" - "00413541004100410010001a230041206b22012400200141186a2206420037030020014110" - "6a22074200370300200141086a2208420037030020014200370300200041dc046a2202027f" - "20094114410620014120101122054120470440024020054100480440200220053602040c01" - "0b2002417f3602040b41010c010b20022001290300370001200241196a2006290300370000" - "200241116a2007290300370000200241096a200829030037000041000b3a0000200141206a" - "24002003200241c186c000410c41828020101820002d00d8060d0641cd86c000413a410041" - "00410010001a230041206b22012400200141186a22064200370300200141106a2207420037" - "0300200141086a220842003703002001420037030020004180056a2202027f20044114410d" - "20014120101222054120470440024020054100480440200220053602040c010b2002417f36" - "02040b41010c010b20022001290300370001200241196a2006290300370000200241116a20" - "07290300370000200241096a200829030037000041000b3a0000200141206a240020032002" - "418787c000410541818020101820002d00d8060d07418c87c000413341004100410010001a" - "230041206b22012400200141186a22064200370300200141106a2207420037030020014108" - "6a2208420037030020014200370300200041a4056a2202027f2004411420094114410e2001" - "4120101322054120470440024020054100480440200220053602040c010b2002417f360204" - "0b41010c010b20022001290300370001200241196a2006290300370000200241116a200729" - "0300370000200241096a200829030037000041000b3a0000200141206a24002003200241bf" - "87c000410a41818020101820002d00d8060d0841c987c000413841004100410010001a2300" - "41206b22012400200141186a22094200370300200141106a22064200370300200141086a22" - "07420037030020014200370300200041c8056a2202027f20044114410f2001412010142205" - "4120470440024020054100480440200220053602040c010b2002417f3602040b41010c010b" - "20022001290300370001200241196a2009290300370000200241116a200629030037000020" - "0241096a200729030037000041000b3a0000200141206a240020032002418188c000411241" - "828020101820002d00d8060d09419388c00041c00041004100410010001a230041206b2201" - "2400200141186a22094200370300200141106a22064200370300200141086a220742003703" - "0020014200370300200041ec056a2202027f20044114200141201015220541204704400240" - "20054100480440200220053602040c010b2002417f3602040b41010c010b20022001290300" - "370001200241196a2009290300370000200241116a2006290300370000200241096a200729" - "030037000041000b3a0000200141206a24002003200241d388c000410a4100101820002d00" - "d8060d0a41dd88c000413841004100410010001a230041206b22012400200141186a220942" - "00370300200141106a22064200370300200141086a22074200370300200142003703002000" - "4190066a2202027f2004411441122001412010162205412047044002402005410048044020" - "0220053602040c010b2002417f3602040b41010c010b20022001290300370001200241196a" - "2009290300370000200241116a2006290300370000200241096a200729030037000041000b" - "3a0000200141206a240020032002419589c000410641818020101820002d00d8060d0b419b" - "89c000413441004100410010001a230041206b22012400200141186a220542003703002001" - "41106a22094200370300200141086a2206420037030020014200370300200041b4066a2202" - "027f2004411441132001412010172204412047044002402004410048044020022004360204" - "0c010b2002417f3602040b41010c010b20022001290300370001200241196a200529030037" - "0000200241116a2009290300370000200241096a200629030037000041000b3a0000200141" - "206a24002003200241cf89c000410541818020101820002d00d80645044041d489c0004133" - "41004100410010001a410121040c0d0b20002802dc06210441878ac0004112421310021a0c" - "0c0b20002802e401210441878ac0004112420810021a0c0b0b20002802e401210441878ac0" - "004112420910021a0c0a0b20002802e401210441878ac0004112420a10021a0c090b200028" - "02e401210441878ac0004112420b10021a0c080b20002802dc06210441878ac0004112420c" - "10021a0c070b20002802dc06210441878ac0004112420d10021a0c060b20002802dc062104" - "41878ac0004112420d10021a0c050b20002802dc06210441878ac0004112420d10021a0c04" - "0b20002802dc06210441878ac0004112420e10021a0c030b20002802dc06210441878ac000" - "4112420f10021a0c020b20002802dc06210441878ac0004112421010021a0c010b20002802" - "dc06210441878ac0004112421210021a0b20004180076a240020040f0b418080c000410b41" - "7f20042004417f4e1bac1002000bfd0401067f200241104f044002402000410020006b4103" - "7122056a220420004d0d002001210320050440200521060340200020032d00003a00002003" - "41016a2103200041016a2100200641016b22060d000b0b200541016b4107490d0003402000" - "20032d00003a0000200041016a200341016a2d00003a0000200041026a200341026a2d0000" - "3a0000200041036a200341036a2d00003a0000200041046a200341046a2d00003a00002000" - "41056a200341056a2d00003a0000200041066a200341066a2d00003a0000200041076a2003" - "41076a2d00003a0000200341086a2103200041086a22002004470d000b0b2004200220056b" - "2207417c7122086a21000240200120056a2206410371450440200020044d0d012006210103" - "4020042001280200360200200141046a2101200441046a22042000490d000b0c010b200020" - "044d0d002006410374220541187121032006417c71220241046a2101410020056b41187121" - "05200228020021020340200420022003762001280200220220057472360200200141046a21" - "01200441046a22042000490d000b0b20074103712102200620086a21010b02402000200020" - "026a22064f0d002002410771220304400340200020012d00003a0000200141016a21012000" - "41016a2100200341016b22030d000b0b200241016b4107490d000340200020012d00003a00" - "00200041016a200141016a2d00003a0000200041026a200141026a2d00003a000020004103" - "6a200141036a2d00003a0000200041046a200141046a2d00003a0000200041056a20014105" - "6a2d00003a0000200041066a200141066a2d00003a0000200041076a200141076a2d00003a" - "0000200141086a2101200041086a22002006470d000b0b0b0ba30a0100418080c0000b990a" - "6572726f725f636f64653d47657474696e67206669656c643a204669656c6420646174613a" - "204572726f722067657474696e67206669656c643a204572726f723a204572726f72206765" - "7474696e67206b65796c65743a202424242424205354415254494e47205741534d20455845" - "435554494f4e2024242424244163636f756e743a44657374696e6174696f6e3a4163636f75" - "6e744163636f756e74206f626a656374206578697374732c2070726f63656564696e672077" - "69746820657363726f772066696e6973682e54727573746c696e6554727573746c696e6520" - "6f626a656374206578697374732c2070726f63656564696e67207769746820657363726f77" - "2066696e6973682e414d4d414d4d206f626a656374206578697374732c2070726f63656564" - "696e67207769746820657363726f772066696e6973682e436865636b436865636b206f626a" - "656374206578697374732c2070726f63656564696e67207769746820657363726f77206669" - "6e6973682e7465726d73616e64636f6e646974696f6e7343726564656e7469616c43726564" - "656e7469616c206f626a656374206578697374732c2070726f63656564696e672077697468" - "20657363726f772066696e6973682e44656c656761746544656c6567617465206f626a6563" - "74206578697374732c2070726f63656564696e67207769746820657363726f772066696e69" - "73682e4465706f736974507265617574684465706f73697450726561757468206f626a6563" - "74206578697374732c2070726f63656564696e67207769746820657363726f772066696e69" - "73682e444944444944206f626a656374206578697374732c2070726f63656564696e672077" - "69746820657363726f772066696e6973682e457363726f77457363726f77206f626a656374" + "0061736d0100000001480960067f7f7f7f7f7f017f60047f7f7f7f017f60087f7f7f7f7f7f" + "7f7f017f60037f7f7f017f60037f7f7e017f60057f7f7f7f7f017f60057f7f7f7f7f006000" + "017f60037f7f7f000284051808686f73745f6c69620974726163655f6e756d000408686f73" + "745f6c6962057472616365000508686f73745f6c69621063616368655f6c65646765725f6f" + "626a000308686f73745f6c6962146765745f6c65646765725f6f626a5f6669656c64000108" + "686f73745f6c69621c6765745f63757272656e745f6c65646765725f6f626a5f6669656c64" + "000308686f73745f6c69620d74726163655f6163636f756e74000108686f73745f6c69620e" + "6163636f756e745f6b65796c6574000108686f73745f6c69620b6c696e655f6b65796c6574" + "000208686f73745f6c69620a616d6d5f6b65796c6574000008686f73745f6c69620c636865" + "636b5f6b65796c6574000008686f73745f6c69621163726564656e7469616c5f6b65796c65" + "74000208686f73745f6c69620f64656c65676174655f6b65796c6574000008686f73745f6c" + "6962166465706f7369745f707265617574685f6b65796c6574000008686f73745f6c69620a" + "6469645f6b65796c6574000108686f73745f6c69620d657363726f775f6b65796c65740000" + "08686f73745f6c6962136d70745f69737375616e63655f6b65796c6574000008686f73745f" + "6c69620e6d70746f6b656e5f6b65796c6574000008686f73745f6c6962106e66745f6f6666" + "65725f6b65796c6574000008686f73745f6c69620c6f666665725f6b65796c657400000868" + "6f73745f6c69620e7061796368616e5f6b65796c6574000208686f73745f6c69621a706572" + "6d697373696f6e65645f646f6d61696e5f6b65796c6574000008686f73745f6c69620e7369" + "676e6572735f6b65796c6574000108686f73745f6c69620d7469636b65745f6b65796c6574" + "000008686f73745f6c69620c7661756c745f6b65796c657400000304030607080503010011" + "0619037f01418080c0000b7f0041ad8ac0000b7f0041b08ac0000b073e05066d656d6f7279" + "02000d6f626a6563745f65786973747300180666696e69736800190a5f5f646174615f656e" + "6403010b5f5f686561705f6261736503020ab73403a80502017f017e230041a0016b220524" + "00024020012d0000410146044041c280c000411620012802042201ac10001a200041013a00" + "00200020013602040c010b200541186a200141196a290000370300200541106a200141116a" + "290000370300200541086a200141096a290000370300200520012900013703002002200320" + "054120410110011a02402005412041001002220141004a04402004450440418b80c000410f" + "4285801410001a20014185801420054180016a412010032201412047044041a680c0004115" + "417f20012001417f4e1b2201ac10001a200041013a0000200020013602040c040b200541c2" + "006a20054182016a2d00003a0000200541f0006a20054197016a2900002206370300200541" + "286a22012005418f016a290000370300200541306a22022006370300200541386a22032005" + "419f016a2d00003a0000200520052f0080013b014020052005290087013703202005200528" + "008301360043200541df006a20032d00003a0000200541d7006a2002290300370000200541" + "cf006a200129030037000020052005290320370047419a80c000410c200541406b41204101" + "10011a0c020b418b80c000410f2004ac10001a2001200420054180016a4114100322014114" + "47044041a680c0004115417f20012001417f4e1b2201ac10001a200041013a000020002001" + "3602040c030b200541c2006a20054182016a2d00003a000020052005290087013703602005" + "2005418c016a290000370065200520052f0080013b01402005200529036037032020052005" + "2900653700252005200528008301360043200541cc006a2005290025370000200520052903" + "20370047419a80c000410c200541406b4114410110011a0c010b41bb80c00041072001ac10" + "001a200041013a0000200020013602040c010b20004180023b01000b200541a0016a24000b" + "8b2a02087f027e23004180076b2200240041d880c000412341014100410010011a02402000" + "027f02404181802020004188016a22024114100422014114460440200041066a2000418a01" + "6a22032d00003a00002000200029008f013703e001200020004194016a22042900003700e5" + "01200020002f0088013b0104200020002903e0013703d806200020002900e5013700dd0620" + "00200028008b01360007200041106a20002900dd06370000200020002903d80637000b41fb" + "80c0004108200041046a2205411410051a4183802020024114100422014114470d03200041" + "1a6a20032d00003a00002000200029008f013703e001200020042900003700e50120002000" + "2f0088013b0118200020002903e0013703d806200020002900e5013700dd06200020002800" + "8b0136001b200041246a20002900dd06370000200020002903d80637001f418381c000410c" + "200041186a411410051a200041a0016a2203420037030020004198016a2204420037030020" + "004190016a420037030020004200370388012005411420024120100622014120460d010240" + "20014100480440200020013602300c010b2000417f3602300b41010c020b0c020b200041c5" + "006a20032903003700002000413d6a2004290300370000200041356a20004190016a290300" + "370000200020002903880137002d41000b3a002c20004188016a2000412c6a418f81c00041" + "07418180201018024020002d0088014101460440200028028c01210141878ac00041124205" + "10001a0c010b41002101419681c000413541014100410010011a200041de006a41c4003a00" + "00200041d8006a4100360200200041e3006a41003a0000200041d5a6013b015c2000420037" + "03502000410036005f200041a0016a2203420037030020004198016a220442003703002000" + "4190016a2205420037030020004200370388010240200041046a4114200041186a41142000" + "41d0006a411420004188016a41201007220241204704400240200241004804402000200236" + "02680c010b2000417f3602680b410121010c010b200041fd006a2003290300370000200041" + "f5006a2004290300370000200041ed006a200529030037000020002000290388013700650b" + "200020013a006420004188016a200041e4006a41cb81c00041094100101820002d00880141" + "01460440200028028c01210141878ac0004112420510001a0c010b41d481c0004137410141" + "00410010011a200041f0016a200041286a2203280100360200200041e8016a200041206a22" + "04290100370300200041fc016a200041d8006a290300220837020020004184026a200041e0" + "006a2802002202360200200020002901183703e0012000200029035022093702f401200041" + "e8066a22012002360200200041e0066a22022008370300200020093703d806200041f4066a" + "2004290100370200200041fc066a2003280100360200200020002901183702ec0620004188" + "026a200041d8066a22034128101a2000418c016a200041e0016a41d000101a200041013602" + "8801200041f0066a220442003703002001420037030020024200370300200042003703d806" + "2000027f41998ac0004114200041b4016a4128200341201008220341204704400240200341" + "00480440200020033602e4010c010b2000417f3602e4010b41010c010b200041f9016a2004" + "290300370000200041f1016a2001290300370000200041e9016a2002290300370000200020" + "002903d8063700e10141000b3a00e001200041b4026a200041e0016a418b82c00041034181" + "8020101820002d00b402410146044020002802b802210141878ac0004112420610001a0c01" + "0b41002101418e82c000413141014100410010011a200041808080303602d806200041f801" + "6a22034200370300200041f0016a22044200370300200041e8016a22054200370300200042" + "003703e0010240200041046a4114200041d8066a4104200041e0016a412010092202412047" + "0440024020024100480440200020023602c0020c010b2000417f3602c0020b410121010c01" + "0b200041d5026a2003290300370000200041cd026a2004290300370000200041c5026a2005" + "290300370000200020002903e0013700bd020b200020013a00bc02200041e0016a200041bc" + "026a41bf82c000410541818020101820002d00e001410146044020002802e401210141878a" + "c0004112420610001a0c010b4100210141c482c000413341014100410010011a200041f801" + "6a22034200370300200041f0016a22044200370300200041e8016a22054200370300200042" + "003703e0010240200041046a220241142002411441f782c0004112200041e0016a4120100a" + "22024120470440024020024100480440200020023602e4020c010b2000417f3602e4020b41" + "0121010c010b200041f9026a2003290300370000200041f1026a2004290300370000200041" + "e9026a2005290300370000200020002903e0013700e1020b200020013a00e002200041e001" + "6a200041e0026a418983c000410a41988020101820002d00e001410146044020002802e401" + "210141878ac0004112420710001a0c010b41002101419383c000413841014100410010011a" + "200041f8016a22034200370300200041f0016a22044200370300200041e8016a2205420037" + "0300200042003703e0010240200041046a4114200041186a4114200041e0016a4120100b22" + "02412047044002402002410048044020002002360288030c010b2000417f360288030b4101" + "21010c010b2000419d036a200329030037000020004195036a20042903003700002000418d" + "036a2005290300370000200020002903e001370085030b200020013a008403200041e0016a" + "20004184036a41cb83c000410841818020101820002d00e001410146044020002802e40121" + "0141878ac0004112420810001a0c010b41d383c000413641014100410010011a230041206b" + "22012400200141186a22044200370300200141106a22054200370300200141086a22064200" + "37030020014200370300200041a8036a2202027f200041046a4114200041186a4114200141" + "20100c22034120470440024020034100480440200220033602040c010b2002417f3602040b" + "41010c010b20022001290300370001200241196a2004290300370000200241116a20052903" + "00370000200241096a200629030037000041000b3a0000200141206a2400200041e0016a20" + "02418984c000410e41818020101820002d00e001410146044020002802e401210141878ac0" + "004112420910001a0c010b419784c000413c41014100410010011a230041206b2201240020" + "0141186a22044200370300200141106a22054200370300200141086a220642003703002001" + "4200370300200041cc036a2202027f200041046a411420014120100d220341204704400240" + "20034100480440200220033602040c010b2002417f3602040b41010c010b20022001290300" + "370001200241196a2004290300370000200241116a2005290300370000200241096a200629" + "030037000041000b3a0000200141206a2400200041e0016a200241d384c000410341818020" + "101820002d00e001410146044020002802e401210141878ac0004112420a10001a0c010b41" + "d684c000413141014100410010011a230041306b22012400200141808080d80036020c2001" + "41286a22044200370300200141206a22054200370300200141186a22064200370300200142" + "00370310200041f0036a2202027f200041046a41142001410c6a4104200141106a4120100e" + "22034120470440024020034100480440200220033602040c010b2002417f3602040b41010c" + "010b20022001290310370001200241196a2004290300370000200241116a20052903003700" + "00200241096a200629030037000041000b3a0000200141306a2400200041e0016a20024187" + "85c000410641818020101820002d00e001410146044020002802e401210141878ac0004112" + "420b10001a0c010b418d85c000413441014100410010011a230041306b2201240020014180" + "8080e00036020c200141286a22044200370300200141206a22054200370300200141186a22" + "0642003703002001420037031020004194046a2202027f200041046a41142001410c6a4104" + "200141106a4120100f22034120470440024020034100480440200220033602040c010b2002" + "417f3602040b41010c010b20022001290310370001200241196a2004290300370000200241" + "116a2005290300370000200241096a200629030037000041000b3a0000200141306a240020" + "0041f4016a200041146a280100360200200041ec016a2000410c6a29010037020020002000" + "2901043702e401200041808080e0003602e001200041d8066a200241c185c000410b418480" + "20101820002d00d806410146044020002802dc06210141878ac0004112420c10001a0c010b" + "41cc85c000413941014100410010011a230041206b22012400200141186a22044200370300" + "200141106a22054200370300200141086a2206420037030020014200370300200041b8046a" + "2202027f200041e0016a4118200041186a4114200141201010220341204704400240200341" + "00480440200220033602040c010b2002417f3602040b41010c010b20022001290300370001" + "200241196a2004290300370000200241116a2005290300370000200241096a200629030037" + "000041000b3a0000200141206a2400200041d8066a2002418586c000410741818020101820" + "002d00d806410146044020002802dc06210141878ac0004112420d10001a0c010b418c86c0" + "00413541014100410010011a230041306b220124002001418080803036020c200141286a22" + "044200370300200141206a22054200370300200141186a2206420037030020014200370310" + "200041dc046a2202027f200041186a41142001410c6a4104200141106a4120101122034120" + "470440024020034100480440200220033602040c010b2002417f3602040b41010c010b2002" + "2001290310370001200241196a2004290300370000200241116a2005290300370000200241" + "096a200629030037000041000b3a0000200141306a2400200041d8066a200241c186c00041" + "0c41828020101820002d00d806410146044020002802dc06210141878ac0004112420d1000" + "1a0c010b41cd86c000413a41014100410010011a230041306b22012400200141808080e800" + "36020c200141286a22044200370300200141206a22054200370300200141186a2206420037" + "03002001420037031020004180056a2202027f200041046a41142001410c6a410420014110" + "6a4120101222034120470440024020034100480440200220033602040c010b2002417f3602" + "040b41010c010b20022001290310370001200241196a2004290300370000200241116a2005" + "290300370000200241096a200629030037000041000b3a0000200141306a2400200041d806" + "6a2002418787c000410541818020101820002d00d806410146044020002802dc0621014187" + "8ac0004112420d10001a0c010b418c87c000413341014100410010011a230041306b220124" + "00200141808080f00036020c200141286a22044200370300200141206a2205420037030020" + "0141186a2206420037030020014200370310200041a4056a2202027f200041046a41142000" + "41186a41142001410c6a4104200141106a4120101322034120470440024020034100480440" + "200220033602040c010b2002417f3602040b41010c010b2002200129031037000120024119" + "6a2004290300370000200241116a2005290300370000200241096a20062903003700004100" + "0b3a0000200141306a2400200041d8066a200241bf87c000410a41818020101820002d00d8" + "06410146044020002802dc06210141878ac0004112420e10001a0c010b41c987c000413841" + "014100410010011a230041306b22012400200141808080f80036020c200141286a22044200" + "370300200141206a22054200370300200141186a2206420037030020014200370310200041" + "c8056a2202027f200041046a41142001410c6a4104200141106a4120101422034120470440" + "024020034100480440200220033602040c010b2002417f3602040b41010c010b2002200129" + "0310370001200241196a2004290300370000200241116a2005290300370000200241096a20" + "0629030037000041000b3a0000200141306a2400200041d8066a2002418188c00041124182" + "8020101820002d00d806410146044020002802dc06210141878ac0004112420f10001a0c01" + "0b419388c00041c00041014100410010011a230041206b22012400200141186a2204420037" + "0300200141106a22054200370300200141086a2206420037030020014200370300200041ec" + "056a2202027f200041046a4114200141201015220341204704400240200341004804402002" + "20033602040c010b2002417f3602040b41010c010b20022001290300370001200241196a20" + "04290300370000200241116a2005290300370000200241096a200629030037000041000b3a" + "0000200141206a2400200041d8066a200241d388c000410a4100101820002d00d806410146" + "044020002802dc06210141878ac0004112421010001a0c010b41dd88c00041384101410041" + "0010011a230041306b22012400200141808080900136020c200141286a2204420037030020" + "0141206a22054200370300200141186a220642003703002001420037031020004190066a22" + "02027f200041046a41142001410c6a4104200141106a412010162203412047044002402003" + "4100480440200220033602040c010b2002417f3602040b41010c010b200220012903103700" + "01200241196a2004290300370000200241116a2005290300370000200241096a2006290300" + "37000041000b3a0000200141306a2400200041d8066a2002419589c0004106418180201018" + "20002d00d806410146044020002802dc06210141878ac0004112421210001a0c010b410121" + "01419b89c000413441014100410010011a230041306b22022400200241808080980136020c" + "200241286a22054200370300200241206a22064200370300200241186a2207420037030020" + "024200370310200041b4066a2203027f200041046a41142002410c6a4104200241106a4120" + "101722044120470440024020044100480440200320043602040c010b2003417f3602040b41" + "010c010b20032002290310370001200341196a2005290300370000200341116a2006290300" + "370000200341096a200729030037000041000b3a0000200241306a2400200041d8066a2003" + "41cf89c000410541818020101820002d00d806410146044020002802dc06210141878ac000" + "4112421310001a0c010b41d489c000413341014100410010011a0b20004180076a24002001" + "0f0b418080c000410b417f20012001417f4e1bac1000000bfd0401067f200241104f044002" + "4020002000410020006b41037122056a22044f0d0020012103200504402005210603402000" + "20032d00003a0000200341016a2103200041016a2100200641016b22060d000b0b20054101" + "6b4107490d000340200020032d00003a0000200041016a200341016a2d00003a0000200041" + "026a200341026a2d00003a0000200041036a200341036a2d00003a0000200041046a200341" + "046a2d00003a0000200041056a200341056a2d00003a0000200041066a200341066a2d0000" + "3a0000200041076a200341076a2d00003a0000200341086a2103200041086a22002004470d" + "000b0b2004200220056b2207417c7122086a21000240200120056a22064103714504402000" + "20044d0d0120062101034020042001280200360200200141046a2101200441046a22042000" + "490d000b0c010b200020044d0d002006410374220541187121032006417c71220241046a21" + "01410020056b41187121052002280200210203402004200220037620012802002202200574" + "72360200200141046a2101200441046a22042000490d000b0b20074103712102200620086a" + "21010b02402000200020026a22064f0d002002410771220304400340200020012d00003a00" + "00200141016a2101200041016a2100200341016b22030d000b0b200241016b4107490d0003" + "40200020012d00003a0000200041016a200141016a2d00003a0000200041026a200141026a" + "2d00003a0000200041036a200141036a2d00003a0000200041046a200141046a2d00003a00" + "00200041056a200141056a2d00003a0000200041066a200141066a2d00003a000020004107" + "6a200141076a2d00003a0000200141086a2101200041086a22002006470d000b0b0b0ba30a" + "0100418080c0000b990a6572726f725f636f64653d47657474696e67206669656c643a2046" + "69656c6420646174613a204572726f722067657474696e67206669656c643a204572726f72" + "3a204572726f722067657474696e67206b65796c65743a202424242424205354415254494e" + "47205741534d20455845435554494f4e2024242424244163636f756e743a44657374696e61" + "74696f6e3a4163636f756e744163636f756e74206f626a656374206578697374732c207072" + "6f63656564696e67207769746820657363726f772066696e6973682e54727573746c696e65" + "54727573746c696e65206f626a656374206578697374732c2070726f63656564696e672077" + "69746820657363726f772066696e6973682e414d4d414d4d206f626a656374206578697374" + "732c2070726f63656564696e67207769746820657363726f772066696e6973682e43686563" + "6b436865636b206f626a656374206578697374732c2070726f63656564696e672077697468" + "20657363726f772066696e6973682e7465726d73616e64636f6e646974696f6e7343726564" + "656e7469616c43726564656e7469616c206f626a656374206578697374732c2070726f6365" + "6564696e67207769746820657363726f772066696e6973682e44656c656761746544656c65" + "67617465206f626a656374206578697374732c2070726f63656564696e6720776974682065" + "7363726f772066696e6973682e4465706f736974507265617574684465706f736974507265" + "61757468206f626a656374206578697374732c2070726f63656564696e6720776974682065" + "7363726f772066696e6973682e444944444944206f626a656374206578697374732c207072" + "6f63656564696e67207769746820657363726f772066696e6973682e457363726f77457363" + "726f77206f626a656374206578697374732c2070726f63656564696e672077697468206573" + "63726f772066696e6973682e4d505449737375616e63654d505449737375616e6365206f62" + "6a656374206578697374732c2070726f63656564696e67207769746820657363726f772066" + "696e6973682e4d50546f6b656e4d50546f6b656e206f626a656374206578697374732c2070" + "726f63656564696e67207769746820657363726f772066696e6973682e4e46546f6b656e4f" + "666665724e46546f6b656e4f66666572206f626a656374206578697374732c2070726f6365" + "6564696e67207769746820657363726f772066696e6973682e4f666665724f66666572206f" + "626a656374206578697374732c2070726f63656564696e67207769746820657363726f7720" + "66696e6973682e5061794368616e6e656c5061794368616e6e656c206f626a656374206578" + "697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e50" + "65726d697373696f6e6564446f6d61696e5065726d697373696f6e6564446f6d61696e206f" + "626a656374206578697374732c2070726f63656564696e67207769746820657363726f7720" + "66696e6973682e5369676e65724c6973745369676e65724c697374206f626a656374206578" + "697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e54" + "69636b65745469636b6574206f626a656374206578697374732c2070726f63656564696e67" + "207769746820657363726f772066696e6973682e5661756c745661756c74206f626a656374" "206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973" - "682e4d505449737375616e63654d505449737375616e6365206f626a656374206578697374" - "732c2070726f63656564696e67207769746820657363726f772066696e6973682e4d50546f" - "6b656e4d50546f6b656e206f626a656374206578697374732c2070726f63656564696e6720" - "7769746820657363726f772066696e6973682e4e46546f6b656e4f666665724e46546f6b65" - "6e4f66666572206f626a656374206578697374732c2070726f63656564696e672077697468" - "20657363726f772066696e6973682e4f666665724f66666572206f626a6563742065786973" - "74732c2070726f63656564696e67207769746820657363726f772066696e6973682e506179" - "4368616e6e656c5061794368616e6e656c206f626a656374206578697374732c2070726f63" - "656564696e67207769746820657363726f772066696e6973682e5065726d697373696f6e65" - "64446f6d61696e5065726d697373696f6e6564446f6d61696e206f626a6563742065786973" - "74732c2070726f63656564696e67207769746820657363726f772066696e6973682e536967" - "6e65724c6973745369676e65724c697374206f626a656374206578697374732c2070726f63" - "656564696e67207769746820657363726f772066696e6973682e5469636b65745469636b65" - "74206f626a656374206578697374732c2070726f63656564696e6720776974682065736372" - "6f772066696e6973682e5661756c745661756c74206f626a656374206578697374732c2070" - "726f63656564696e67207769746820657363726f772066696e6973682e43757272656e7420" - "7365712076616c75653a004d0970726f64756365727302086c616e67756167650104527573" - "74000c70726f6365737365642d6279010572757374631d312e38352e312028346562313631" - "32353020323032352d30332d313529002c0f7461726765745f6665617475726573022b0f6d" - "757461626c652d676c6f62616c732b087369676e2d657874"; + "682e43757272656e74207365712076616c75653a004d0970726f64756365727302086c616e" + "6775616765010452757374000c70726f6365737365642d6279010572757374631d312e3837" + "2e30202831373036376539616320323032352d30352d303929002c0f7461726765745f6665" + "617475726573022b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; extern std::string const codecovTestsWasmHex = - "0061736d0100000001570b60047f7f7f7f017f60057f7f7f7f7f017f60027f7f017f60067f" - "7f7f7f7f7f017f60077f7f7f7f7f7f7f017f6000017f60037f7f7f017f60017f017f60087f" - "7f7f7f7f7f7f7f017f60037f7f7e017f60047f7f7f7f0002990d3c08686f73745f6c696205" - "7472616365000108686f73745f6c69620974726163655f6e756d000908686f73745f6c6962" - "0e6765745f6c65646765725f73716e000508686f73745f6c6962166765745f706172656e74" - "5f6c65646765725f74696d65000508686f73745f6c6962166765745f706172656e745f6c65" - "646765725f68617368000208686f73745f6c69620c6765745f626173655f66656500050868" - "6f73745f6c696211616d656e646d656e745f656e61626c6564000208686f73745f6c69620c" - "6765745f74785f6669656c64000608686f73745f6c69620e6163636f756e745f6b65796c65" - "74000008686f73745f6c69621063616368655f6c65646765725f6f626a000608686f73745f" - "6c69621c6765745f63757272656e745f6c65646765725f6f626a5f6669656c64000608686f" - "73745f6c6962146765745f6c65646765725f6f626a5f6669656c64000008686f73745f6c69" - "62136765745f74785f6e65737465645f6669656c64000008686f73745f6c6962236765745f" - "63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c64000008686f73" - "745f6c69621b6765745f6c65646765725f6f626a5f6e65737465645f6669656c6400010868" - "6f73745f6c6962106765745f74785f61727261795f6c656e000708686f73745f6c69622067" - "65745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e000708686f73" - "745f6c6962186765745f6c65646765725f6f626a5f61727261795f6c656e000208686f7374" - "5f6c6962176765745f74785f6e65737465645f61727261795f6c656e000208686f73745f6c" - "6962276765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f61727261" - "795f6c656e000208686f73745f6c69621f6765745f6c65646765725f6f626a5f6e65737465" - "645f61727261795f6c656e000608686f73745f6c69620b7570646174655f64617461000208" - "686f73745f6c696213636f6d707574655f7368613531325f68616c66000008686f73745f6c" - "696209636865636b5f736967000308686f73745f6c6962076765745f6e6674000308686f73" - "745f6c69620e6765745f6e66745f697373756572000008686f73745f6c69620d6765745f6e" - "66745f7461786f6e000008686f73745f6c69620d6765745f6e66745f666c61677300020868" - "6f73745f6c6962146765745f6e66745f7472616e736665725f666565000208686f73745f6c" - "69620e6765745f6e66745f73657269616c000008686f73745f6c69620d74726163655f6163" - "636f756e74000008686f73745f6c69620c74726163655f616d6f756e74000008686f73745f" - "6c69620f666c6f61745f66726f6d5f75696e74000108686f73745f6c69620b6c696e655f6b" - "65796c6574000808686f73745f6c69620a616d6d5f6b65796c6574000308686f73745f6c69" - "621163726564656e7469616c5f6b65796c6574000808686f73745f6c69620e6d70746f6b65" - "6e5f6b65796c6574000308686f73745f6c69621274726163655f6f70617175655f666c6f61" - "74000008686f73745f6c69620d666c6f61745f636f6d70617265000008686f73745f6c6962" - "09666c6f61745f616464000408686f73745f6c69620e666c6f61745f737562747261637400" - "0408686f73745f6c69620e666c6f61745f6d756c7469706c79000408686f73745f6c69620c" - "666c6f61745f646976696465000408686f73745f6c69620a666c6f61745f726f6f74000308" - "686f73745f6c696209666c6f61745f706f77000308686f73745f6c696209666c6f61745f6c" - "6f67000108686f73745f6c69620c636865636b5f6b65796c6574000108686f73745f6c6962" - "0f64656c65676174655f6b65796c6574000308686f73745f6c6962166465706f7369745f70" - "7265617574685f6b65796c6574000308686f73745f6c69620a6469645f6b65796c65740000" - "08686f73745f6c69620d657363726f775f6b65796c6574000108686f73745f6c6962136d70" - "745f69737375616e63655f6b65796c6574000108686f73745f6c6962106e66745f6f666665" - "725f6b65796c6574000108686f73745f6c69620c6f666665725f6b65796c6574000108686f" - "73745f6c69620d6f7261636c655f6b65796c6574000108686f73745f6c69620e7061796368" - "616e5f6b65796c6574000408686f73745f6c69621a7065726d697373696f6e65645f646f6d" - "61696e5f6b65796c6574000108686f73745f6c69620e7369676e6572735f6b65796c657400" - "0008686f73745f6c69620d7469636b65745f6b65796c6574000108686f73745f6c69620c76" - "61756c745f6b65796c657400010303020a0505030100110619037f01418080c0000b7f0041" - "a99ec0000b7f0041b09ec0000b072e04066d656d6f727902000666696e697368003d0a5f5f" - "646174615f656e6403010b5f5f686561705f6261736503020aeb2602460002402000200147" - "04402002200341004100410010001a20004100480d01418b80c000410b2000ad1001000b20" - "0220032000ac10011a0f0b418b80c000410b2000ac1001000ba126020a7f017e230041f001" - "6b22002400419680c000412341004100410010001a100241b9e00041b980c000410e103c10" - "0341b2920441c780c0004116103c200041f0006a22054200370300200041e8006a22064200" - "370300200041e0006a2203420037030020004200370358200041d8006a2201412010044120" - "41d88cc0004116103c1005410a41dd80c000410c103c200041186a2207428182848890a0c0" - "8001370300200041106a2208428182848890a0c08001370300200041086a22094281828488" - "90a0c080013703002000428182848890a0c0800137030041e980c000410e1006410141f780" - "c0004111103c200041201006410141f780c0004111103c4181802020014114100722024114" - "4604400240200041266a200041da006a2d00003a00002000200029005f3703c80120002000" - "41e4006a2900003700cd01200041306a20002900cd01370000200020002f00583b01242000" - "200028005b360027200020002903c80137002b200542003703002006420037030020034200" - "37030020004200370358200041246a2205411420014120100822024120470d002000413a6a" - "20002d005a3a0000200041d0016a2202200041e7006a290000220a370300200041c7006a20" - "0a370000200041cf006a200041ef006a290000370000200041d7006a200041f7006a2d0000" - "3a0000200020002f01583b01382000200028005b36003b2000200029005f37003f20004138" - "6a4120410010094101418881c0004110103c20064100360200200342003703002000420037" - "03584181802020014114100a411441ee8cc000411c103c2006410036020020034200370300" - "2000420037035841014181802020014114100b4114418a8dc0004114103c20004104360298" - "01200041818020360258200041d8016a2203410036020020024200370300200042003703c8" - "0120014104200041c8016a22064114100c4114419e8dc0004113103c200341003602002002" - "4200370300200042003703c801200120002802980120064114100d411441b18dc000412310" - "3c2003410036020020024200370300200042003703c8014101200120002802980120064114" - "100e411441d48dc000411b103c4189803c100f4120419881c0004110103c4189803c101041" - "2041a881c0004120103c41014189803c1011412041c881c0004118103c2001200028029801" - "1012412041e081c0004117103c20012000280298011013412041f781c0004127103c410120" - "0120002802980110144120419e82c000411f103c200541141015411441bd82c000410b103c" - "200041e0016a220442003703002003420037030020024200370300200042003703c8012001" - "200028029801200641201016412041ef8dc0004113103c41c882c000410c41d482c000410b" - "41df82c000410e1017410141ed82c0004109103c200041b8016a2007290300370300200041" - "b0016a2008290300370300200041a8016a2009290300370300200020002903003703a00120" - "0341003b010020024200370300200042003703c80120054114200041a0016a220741202006" - "41121018411241828ec0004107103c2003410036020020024200370300200042003703c801" - "20074120200641141019411441898ec000410e103c200041003602c8012007412020064104" - "101a410441978ec000410d103c20074120101b410841f682c000410d103c20074120101c41" - "0a418383c0004114103c200041003602c8012007412020064104101d410441a48ec000410e" - "103c419783c000410d20054114101e410041a483c000410d103c419783c000410d41b183c0" - "004108101f410041b983c000410c103c419783c000410d41c583c0004108101f410041cd83" - "c0004111103c417f41041004417141de83c000411e103c200041003602c8012006417f1004" - "417141b28ec000411e103c200041ca016a41003a0000200041003b01c80120064103100441" - "7d41d08ec0004124103c200041003602c8012006418094ebdc031004417341f48ec0004123" - "103c200442003703002003420037030020024200370300200042003703c801200041d894eb" - "dc036a220741082006412041001020417341978fc0004117103c2004420037030020034200" - "37030020024200370300200042003703c80120012000280298012006412041001020417141" - "ae8fc0004119103c4102100f416f41fc83c000411f103c417f20002802980110124171419b" - "84c000411f103c2001417f1012417141ba84c000411f103c20014181201012417441d984c0" - "004120103c20072000280298011012417341f984c000411f103c2007200028029801410110" - "094173419885c0004118103c200120002802980141011009417141b085c000411a103c2004" - "42003703002003420037030020024200370300200042003703c80120072000280298012006" - "41201008417341c78fc0004116103c20044200370300200342003703002002420037030020" - "0042003703c8012001200028029801200641201008417141dd8fc0004118103c2004420037" - "03002003420037030020024200370300200042003703c80120054114200541142007200028" - "029801200641201021417341f58fc000411c103c2004420037030020034200370300200242" - "00370300200042003703c80120054114200541142001200028029801200641201021417141" - "9190c000411e103c200442003703002003420037030020024200370300200042003703c801" - "41959ec00041142007200028029801200641201022417341af90c0004119103c2004420037" - "03002003420037030020024200370300200042003703c80141959ec0004114200120002802" - "9801200641201022417141c890c000411f103c200442003703002003420037030020024200" - "370300200042003703c80141959ec000411441ca85c0004114200641201022417141e790c0" - "004129103c200442003703002003420037030020024200370300200042003703c80141de85" - "c000412841959ec00041142006412010224171419091c0004125103c200041dc016a200041" - "346a280100360200200041d4016a2000412c6a290100370200200020002901243702cc0120" - "0041808080083602c801200041003b01c0012006411841959ec0004114200041c0016a2203" - "41021022417141b591c000410e103c2007200028029801422a10014173418686c000411110" - "3c200041003b01c0014102200341021007416f41c391c000411b103c200041003b01c00141" - "0220034102100a416f41de91c000412b103c200041003b01c0014101410220034102100b41" - "6f418992c0004123103c4102100f416f41fc83c000411f103c41021010416f419786c00041" - "2f103c410141021011416f41c686c0004127103c41e980c0004181201006417441ed86c000" - "411f103c41e980c00041c10010064174418c87c000411a103c200041003b01c00120014181" - "2020034102100c417441ac92c0004121103c200041003b01c001200141812020034102100d" - "417441cd92c0004131103c200041003b01c0014101200141812020034102100e417441fe92" - "c0004129103c20014181201012417441a687c0004125103c20014181201013417441cb87c0" - "004135103c4101200141812010144174418088c000412d103c20014181201015417441ad88" - "c0004119103c419783c00041812041d482c000410b41df82c000410e1017417441ed82c000" - "4109103c419783c000410d41d482c00041812041df82c000410e1017417441ed82c0004109" - "103c419783c000410d41d482c000410b41df82c0004181201017417441ed82c0004109103c" - "200041003b01c0012001418120200341021016417441a793c0004121103c200041003b01c0" - "0141959ec00041812041959ec0004114200341021022417441c893c0004118103c20004100" - "3b01c00120054114200541142001418120200341021023417441e093c000411f103c200041" - "003b01c001200641812020054114200341021024417441ff93c0004122103c419783c00041" - "0d200720002802980141001000417341c688c000410f103c200042d487b6f4c7d4b1c00037" - "00c001419783c000410d200041c095ebdc036a220441081025417341d588c000411c103c41" - "9783c000410d2007200028029801101f417341f188c0004116103c20044108200341081026" - "4173418789c0004118103c200341082004410810264173419f89c0004118103c200041003b" - "01ec012004410820034108200041ec016a2202410241001027417341a194c0004114103c20" - "0041003b01ec0120034108200441082002410241001027417341b594c0004114103c200041" - "003b01ec0120044108200341082002410241001028417341c994c0004119103c200041003b" - "01ec0120034108200441082002410241001028417341e294c0004119103c200041003b01ec" - "0120044108200341082002410241001029417341fb94c0004119103c200041003b01ec0120" - "0341082004410820024102410010294173419495c0004119103c200041003b01ec01200441" - "0820034108200241024100102a417341ad95c0004117103c200041003b01ec012003410820" - "044108200241024100102a417341c495c0004117103c200041003b01ec0120044108410320" - "0241024100102b417341db95c0004114103c200041003b01ec012004410841032002410241" - "00102c417341ef95c0004113103c200041003b01ec0120044108200241024100102d417341" - "8296c0004113103c200120002802980141001009417141b789c0004123103c200041003b01" - "ec012005411420012000280298012002410210184171419596c000411a103c200041003b01" - "ec012001200028029801200241021019417141af96c0004121103c200041003b01ec012001" - "20002802980120024102101a417141d096c0004120103c2001200028029801101b417141da" - "89c0004120103c2001200028029801101c417141fa89c0004127103c200041003602ec0120" - "0120002802980120024104101d417141f096c0004121103c200041003b01ec012001200028" - "0298012002410210084171419197c0004123103c200041003b01ec01200120002802980141" - "0120024102102e417141b497c0004121103c200041003b01ec012001200028029801220420" - "05411420012004200241021023417141d597c0004127103c200041003b01ec012005411420" - "01200028029801220420012004200241021023417141fc97c0004127103c200041003b01ec" - "0120012000280298012005411420024102102f417141a398c0004125103c200041003b01ec" - "0120054114200120002802980120024102102f417141c898c0004125103c200041003b01ec" - "01200120002802980120054114200241021030417141ed98c000412c103c200041003b01ec" - "012005411420012000280298012002410210304171419999c000412c103c200041003b01ec" - "012001200028029801200241021031417141c599c000411f103c200041003b01ec01200120" - "00280298014101200241021032417141e499c0004122103c200041003b01ec012001200028" - "0298012005411441ca85c0004114200241021021417141869ac0004121103c200041003b01" - "ec0120054114200120002802980141ca85c0004114200241021021417141a79ac000412110" - "3c200041003b01ec0120012000280298014101200241021033417141c89ac0004128103c20" - "0041003b01ec01200641182001200028029801200241021024417141f09ac0004123103c20" - "0041003b01ec0120012000280298014101200241021034417141939bc0004125103c200041" - "003b01ec0120012000280298014101200241021035417141b89bc0004121103c200041003b" - "01ec0120012000280298014101200241021036417141d99bc0004122103c200041003b01ec" - "012001200028029801200541144101200241021037417141fb9bc0004124103c200041003b" - "01ec0120054114200120002802980141012002410210374171419f9cc0004124103c200041" - "003b01ec0120012000280298014101200241021038417141c39cc000412f103c200041003b" - "01ec012001200028029801200241021039417141f29cc0004123103c200041003b01ec0120" - "01200028029801410120024102103a417141959dc0004122103c200041003b01ec01200120" - "0028029801410120024102103b417141b79dc0004121103c200041003b01ec012001200028" - "02980141a18ac0004120200241021018417141d89dc000411c103c419783c000410d200120" - "0028029801101e417141c18ac0004122103c419797abdd03410d41a18ac000412041001000" - "417341e38ac0004110103c419797abdd03410d200341081025417341f38ac000411d103c41" - "9797abdd03410d20054114101e417341908bc0004118103c419797abdd03410d41c583c000" - "4108101f417341a88bc0004117103c2001200028029801200141812041001000417441bf8b" - "c000410e103c200141812042011001417441cd8bc0004112103c419783c000418120200341" - "081025417441df8bc000411b103c419783c00041812020054114101e417441fa8bc0004116" - "103c419783c00041812041c583c0004108101f417441908cc0004115103c419783c000410d" - "2001200028029801101f417141a58cc0004119103c200041003b01ec012001200028029801" - "20054114200241021024417141f49dc0004121103c4101410020054114101e410041be8cc0" - "00411a103c200041f0016a240041010f0b0b418080c000410b417f20022002417f4e1bac10" - "01000b0b801e0200418080c0000bde056572726f725f636f64653d54455354204641494c45" - "442424242424205354415254494e47205741534d20455845435554494f4e20242424242467" - "65745f6c65646765725f73716e6765745f706172656e745f6c65646765725f74696d656765" - "745f626173655f666565746573745f616d656e646d656e74616d656e646d656e745f656e61" - "626c656463616368655f6c65646765725f6f626a6765745f74785f61727261795f6c656e67" - "65745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e6765745f6c65" - "646765725f6f626a5f61727261795f6c656e6765745f74785f6e65737465645f6172726179" - "5f6c656e6765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f617272" - "61795f6c656e6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e" - "7570646174655f6461746174657374206d65737361676574657374207075626b6579746573" - "74207369676e6174757265636865636b5f7369676765745f6e66745f666c6167736765745f" - "6e66745f7472616e736665725f66656574657374696e6720747261636574726163655f6163" - "636f756e74400000000000005f74726163655f616d6f756e74400000000000000074726163" - "655f616d6f756e745f7a65726f6765745f706172656e745f6c65646765725f686173685f6e" - "65675f7074726765745f74785f61727261795f6c656e5f696e76616c69645f736669656c64" - "6765745f74785f6e65737465645f61727261795f6c656e5f6e65675f7074726765745f7478" - "5f6e65737465645f61727261795f6c656e5f6e65675f6c656e6765745f74785f6e65737465" - "645f61727261795f6c656e5f746f6f5f6c6f6e676765745f74785f6e65737465645f617272" - "61795f6c656e5f7074725f6f6f6263616368655f6c65646765725f6f626a5f7074725f6f6f" - "6263616368655f6c65646765725f6f626a5f77726f6e675f6c656e55534430303030303030" - "3030303030303030303000418686c0000b8f1874726163655f6e756d5f6f6f625f73747267" - "65745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e5f696e76616c" - "69645f736669656c646765745f6c65646765725f6f626a5f61727261795f6c656e5f696e76" - "616c69645f736669656c64616d656e646d656e745f656e61626c65645f746f6f5f6269675f" - "736c696365616d656e646d656e745f656e61626c65645f746f6f5f6c6f6e676765745f7478" - "5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f6375" - "7272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f" - "5f6269675f736c6963656765745f6c65646765725f6f626a5f6e65737465645f6172726179" - "5f6c656e5f746f6f5f6269675f736c6963657570646174655f646174615f746f6f5f626967" - "5f736c69636574726163655f6f6f625f736c69636574726163655f6f70617175655f666c6f" - "61745f6f6f625f736c69636574726163655f616d6f756e745f6f6f625f736c696365666c6f" - "61745f636f6d706172655f6f6f625f736c69636531666c6f61745f636f6d706172655f6f6f" - "625f736c6963653263616368655f6c65646765725f6f626a5f77726f6e675f73697a655f75" - "696e743235366765745f6e66745f666c6167735f77726f6e675f73697a655f75696e743235" - "366765745f6e66745f7472616e736665725f6665655f77726f6e675f73697a655f75696e74" - "32353630303030303030303030303030303030303030303030303030303030303030317472" - "6163655f6163636f756e745f77726f6e675f73697a655f6163636f756e7469647472616365" - "5f6f6f625f737472696e6774726163655f6f70617175655f666c6f61745f6f6f625f737472" - "696e6774726163655f6163636f756e745f6f6f625f737472696e6774726163655f616d6f75" - "6e745f6f6f625f737472696e6774726163655f746f6f5f6c6f6e6774726163655f6e756d5f" - "746f6f5f6c6f6e6774726163655f6f70617175655f666c6f61745f746f6f5f6c6f6e677472" - "6163655f6163636f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f746f6f5f" - "6c6f6e6774726163655f616d6f756e745f77726f6e675f6c656e67746874726163655f6163" - "636f756e745f636865636b5f646573796e636765745f706172656e745f6c65646765725f68" - "6173686765745f63757272656e745f6c65646765725f6f626a5f6669656c646765745f6c65" - "646765725f6f626a5f6669656c646765745f74785f6e65737465645f6669656c646765745f" - "63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c646765745f6c65" - "646765725f6f626a5f6e65737465645f6669656c64636f6d707574655f7368613531325f68" - "616c666765745f6e66746765745f6e66745f6973737565726765745f6e66745f7461786f6e" - "6765745f6e66745f73657269616c6765745f706172656e745f6c65646765725f686173685f" - "6e65675f6c656e6765745f706172656e745f6c65646765725f686173685f6275665f746f6f" - "5f736d616c6c6765745f706172656e745f6c65646765725f686173685f6c656e5f746f6f5f" - "6c6f6e67666c6f61745f66726f6d5f75696e745f6c656e5f6f6f62666c6f61745f66726f6d" - "5f75696e745f77726f6e675f6c656e6163636f756e745f6b65796c65745f6c656e5f6f6f62" - "6163636f756e745f6b65796c65745f77726f6e675f6c656e6c696e655f6b65796c65745f6c" - "656e5f6f6f625f63757272656e63796c696e655f6b65796c65745f77726f6e675f6c656e5f" - "63757272656e6379616d6d5f6b65796c65745f6c656e5f6f6f625f617373657432616d6d5f" - "6b65796c65745f6c656e5f77726f6e675f6c656e5f617373657432616d6d5f6b65796c6574" - "5f6c656e5f77726f6e675f6e6f6e5f7872705f63757272656e63795f6c656e616d6d5f6b65" - "796c65745f6c656e5f77726f6e675f7872705f63757272656e63795f6c656e616d6d5f6b65" - "796c65745f6d70746765745f74785f6669656c645f696e76616c69645f736669656c646765" - "745f63757272656e745f6c65646765725f6f626a5f6669656c645f696e76616c69645f7366" - "69656c646765745f6c65646765725f6f626a5f6669656c645f696e76616c69645f73666965" - "6c646765745f74785f6e65737465645f6669656c645f746f6f5f6269675f736c6963656765" - "745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c645f746f6f" - "5f6269675f736c6963656765745f6c65646765725f6f626a5f6e65737465645f6669656c64" - "5f746f6f5f6269675f736c696365636f6d707574655f7368613531325f68616c665f746f6f" - "5f6269675f736c696365616d6d5f6b65796c65745f746f6f5f6269675f736c696365637265" - "64656e7469616c5f6b65796c65745f746f6f5f6269675f736c6963656d70746f6b656e5f6b" - "65796c65745f746f6f5f6269675f736c6963655f6d70746964666c6f61745f6164645f6f6f" - "625f736c69636531666c6f61745f6164645f6f6f625f736c69636532666c6f61745f737562" - "74726163745f6f6f625f736c69636531666c6f61745f73756274726163745f6f6f625f736c" - "69636532666c6f61745f6d756c7469706c795f6f6f625f736c69636531666c6f61745f6d75" - "6c7469706c795f6f6f625f736c69636532666c6f61745f6469766964655f6f6f625f736c69" - "636531666c6f61745f6469766964655f6f6f625f736c69636532666c6f61745f726f6f745f" - "6f6f625f736c696365666c6f61745f706f775f6f6f625f736c696365666c6f61745f6c6f67" - "5f6f6f625f736c6963656765745f6e66745f77726f6e675f73697a655f75696e7432353667" - "65745f6e66745f6973737565725f77726f6e675f73697a655f75696e743235366765745f6e" - "66745f7461786f6e5f77726f6e675f73697a655f75696e743235366765745f6e66745f7365" - "7269616c5f77726f6e675f73697a655f75696e743235366163636f756e745f6b65796c6574" - "5f77726f6e675f73697a655f6163636f756e746964636865636b5f6b65796c65745f77726f" - "6e675f73697a655f6163636f756e74696463726564656e7469616c5f6b65796c65745f7772" - "6f6e675f73697a655f6163636f756e7469643163726564656e7469616c5f6b65796c65745f" - "77726f6e675f73697a655f6163636f756e7469643264656c65676174655f6b65796c65745f" - "77726f6e675f73697a655f6163636f756e7469643164656c65676174655f6b65796c65745f" - "77726f6e675f73697a655f6163636f756e746964326465706f7369745f707265617574685f" - "6b65796c65745f77726f6e675f73697a655f6163636f756e746964316465706f7369745f70" - "7265617574685f6b65796c65745f77726f6e675f73697a655f6163636f756e746964326469" - "645f6b65796c65745f77726f6e675f73697a655f6163636f756e746964657363726f775f6b" - "65796c65745f77726f6e675f73697a655f6163636f756e7469646c696e655f6b65796c6574" - "5f77726f6e675f73697a655f6163636f756e746964316c696e655f6b65796c65745f77726f" - "6e675f73697a655f6163636f756e746964326d70745f69737375616e63655f6b65796c6574" - "5f77726f6e675f73697a655f6163636f756e7469646d70746f6b656e5f6b65796c65745f77" - "726f6e675f73697a655f6163636f756e7469646e66745f6f666665725f6b65796c65745f77" - "726f6e675f73697a655f6163636f756e7469646f666665725f6b65796c65745f77726f6e67" - "5f73697a655f6163636f756e7469646f7261636c655f6b65796c65745f77726f6e675f7369" - "7a655f6163636f756e7469647061796368616e5f6b65796c65745f77726f6e675f73697a65" - "5f6163636f756e746964317061796368616e5f6b65796c65745f77726f6e675f73697a655f" - "6163636f756e746964327065726d697373696f6e65645f646f6d61696e5f6b65796c65745f" - "77726f6e675f73697a655f6163636f756e7469647369676e6572735f6b65796c65745f7772" - "6f6e675f73697a655f6163636f756e7469647469636b65745f6b65796c65745f77726f6e67" - "5f73697a655f6163636f756e7469647661756c745f6b65796c65745f77726f6e675f73697a" - "655f6163636f756e7469646765745f6e66745f77726f6e675f73697a655f6163636f756e74" - "69646d70746f6b656e5f6b65796c65745f6d707469645f77726f6e675f6c656e677468004d" - "0970726f64756365727302086c616e6775616765010452757374000c70726f636573736564" - "2d6279010572757374631d312e38372e30202831373036376539616320323032352d30352d" - "303929002c0f7461726765745f6665617475726573022b0f6d757461626c652d676c6f6261" - "6c732b087369676e2d657874"; + "0061736d0100000001570b60067f7f7f7f7f7f017f60047f7f7f7f017f60027f7f017f60057f7f7f7f7f017f60037f7f7f017f60077f7f7f7f" + "7f7f7f017f60087f7f7f7f7f7f7f7f017f60017f017f60037f7f7e017f60047f7f7f7f006000017f02990d3c08686f73745f6c696205747261" + "6365000308686f73745f6c69620974726163655f6e756d000808686f73745f6c69620e6765745f6c65646765725f73716e000208686f73745f" + "6c6962166765745f706172656e745f6c65646765725f74696d65000208686f73745f6c6962166765745f706172656e745f6c65646765725f68" + "617368000208686f73745f6c69620c6765745f626173655f666565000208686f73745f6c696211616d656e646d656e745f656e61626c656400" + "0208686f73745f6c69620c6765745f74785f6669656c64000408686f73745f6c69620e6163636f756e745f6b65796c6574000108686f73745f" + "6c69621063616368655f6c65646765725f6f626a000408686f73745f6c69621c6765745f63757272656e745f6c65646765725f6f626a5f6669" + "656c64000408686f73745f6c6962146765745f6c65646765725f6f626a5f6669656c64000108686f73745f6c6962136765745f74785f6e6573" + "7465645f6669656c64000108686f73745f6c6962236765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c6400" + "0108686f73745f6c69621b6765745f6c65646765725f6f626a5f6e65737465645f6669656c64000308686f73745f6c6962106765745f74785f" + "61727261795f6c656e000708686f73745f6c6962206765745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e00070868" + "6f73745f6c6962186765745f6c65646765725f6f626a5f61727261795f6c656e000208686f73745f6c6962176765745f74785f6e6573746564" + "5f61727261795f6c656e000208686f73745f6c6962276765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6172726179" + "5f6c656e000208686f73745f6c69621f6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e000408686f73745f6c69" + "620b7570646174655f64617461000208686f73745f6c696213636f6d707574655f7368613531325f68616c66000108686f73745f6c69620963" + "6865636b5f736967000008686f73745f6c6962076765745f6e6674000008686f73745f6c69620e6765745f6e66745f69737375657200010868" + "6f73745f6c69620d6765745f6e66745f7461786f6e000108686f73745f6c69620d6765745f6e66745f666c616773000208686f73745f6c6962" + "146765745f6e66745f7472616e736665725f666565000208686f73745f6c69620e6765745f6e66745f73657269616c000108686f73745f6c69" + "620d74726163655f6163636f756e74000108686f73745f6c69620c74726163655f616d6f756e74000108686f73745f6c69620c636865636b5f" + "6b65796c6574000008686f73745f6c69620f666c6f61745f66726f6d5f75696e74000308686f73745f6c69620b6c696e655f6b65796c657400" + "0608686f73745f6c69620a616d6d5f6b65796c6574000008686f73745f6c69621163726564656e7469616c5f6b65796c6574000608686f7374" + "5f6c69620e6d70746f6b656e5f6b65796c6574000008686f73745f6c69621274726163655f6f70617175655f666c6f6174000108686f73745f" + "6c69620d666c6f61745f636f6d70617265000108686f73745f6c696209666c6f61745f616464000508686f73745f6c69620e666c6f61745f73" + "75627472616374000508686f73745f6c69620e666c6f61745f6d756c7469706c79000508686f73745f6c69620c666c6f61745f646976696465" + "000508686f73745f6c69620a666c6f61745f726f6f74000008686f73745f6c696209666c6f61745f706f77000008686f73745f6c696209666c" + "6f61745f6c6f67000308686f73745f6c69620d657363726f775f6b65796c6574000008686f73745f6c6962136d70745f69737375616e63655f" + "6b65796c6574000008686f73745f6c6962106e66745f6f666665725f6b65796c6574000008686f73745f6c69620c6f666665725f6b65796c65" + "74000008686f73745f6c69620d6f7261636c655f6b65796c6574000008686f73745f6c69620e7061796368616e5f6b65796c6574000608686f" + "73745f6c69621a7065726d697373696f6e65645f646f6d61696e5f6b65796c6574000008686f73745f6c69620d7469636b65745f6b65796c65" + "74000008686f73745f6c69620c7661756c745f6b65796c6574000008686f73745f6c69620f64656c65676174655f6b65796c6574000008686f" + "73745f6c6962166465706f7369745f707265617574685f6b65796c6574000008686f73745f6c69620a6469645f6b65796c6574000108686f73" + "745f6c69620e7369676e6572735f6b65796c65740001030302090a05030100110619037f01418080c0000b7f00418ea1c0000b7f004190a1c0" + "000b072e04066d656d6f727902000666696e697368003d0a5f5f646174615f656e6403010b5f5f686561705f6261736503020aa12c02460002" + "40200020014704402002200341014100410010001a20004100480d01418b80c000410b2000ad1001000b200220032000ac10011a0f0b418b80" + "c000410b2000ac1001000bd72b020a7f017e23004190026b22002400419680c000412341014100410010001a20004100360260200041e0006a" + "220241041002410441a88cc000410e103c20004100360260200241041003410441b68cc0004116103c200041f8006a22044200370300200041" + "f0006a22014200370300200041e8006a2205420037030020004200370360200241201004412041cc8cc0004116103c20004100360260200241" + "041005410441e28cc000410c103c200041106a2207428182848890a0c08001370300200041186a2206428182848890a0c08001370300200041" + "206a2209428182848890a0c080013703002000428182848890a0c0800137030841b980c000410e1006410141c780c0004111103c200041086a" + "41201006410141c780c0004111103c418180202002411410072203411446044002402000412e6a200041e2006a2d00003a0000200020002900" + "673703e8012000200041ec006a2900003700ed01200020002f00603b012c200020002903e8013703a801200020002900ed013700ad01200020" + "0028006336002f200041386a20002900ad01370000200020002903a80137003320044200370300200142003703002005420037030020004200" + "3703602000412c6a2204411420024120100822034120470d00200041c2006a20002d00623a0000200041f0016a2203200041ef006a29000022" + "0a370300200041cf006a200a370000200041d7006a200041f7006a290000370000200041df006a200041ff006a2d00003a0000200020002f01" + "603b01402000200028006336004320002000290067370047200041406b412041001009410141d880c0004110103c2001410036020020054200" + "370300200042003703604181802020024114100a411441ee8cc000411c103c2001410036020020054200370300200042003703604101418180" + "2020024114100b4114418a8dc0004114103c200041043602a001200041818020360260200041f8016a22054100360200200342003703002000" + "42003703e80120024104200041e8016a22014114100c4114419e8dc0004113103c2005410036020020034200370300200042003703e8012002" + "20002802a00120014114100d411441b18dc0004123103c2005410036020020034200370300200042003703e8014101200220002802a0012001" + "4114100e411441d48dc000411b103c4189803c100f412041e880c0004110103c4189803c1010412041f880c0004120103c41014189803c1011" + "4120419881c0004118103c200220002802a0011012412041b081c0004117103c200220002802a0011013412041c781c0004127103c41012002" + "20002802a0011014412041ee81c000411f103c2004411410154114418d82c000410b103c20004180026a220842003703002005420037030020" + "034200370300200042003703e801200220002802a001200141201016412041ef8dc0004113103c419882c000410c41a482c000410b41af82c0" + "00410e1017410141bd82c0004109103c200041c0016a2009290300370300200041b8016a2006290300370300200041b0016a20072903003703" + "00200020002903083703a801200541003b010020034200370300200042003703e80120044114200041a8016a22074120200141121018411241" + "828ec0004107103c2005410036020020034200370300200042003703e80120074120200141141019411441898ec000410e103c200041003602" + "e8012007412020014104101a410441978ec000410d103c20074120101b410841c682c000410d103c20074120101c410a41d382c0004114103c" + "200041003602e8012007412020014104101d410441a48ec000410e103c41e782c000410d20044114101e410041f482c000410d103c41e782c0" + "00410d418183c0004108101f4100418983c000410c103c41e782c000410d419583c0004108101f4100419d83c0004111103c417f4104100441" + "7141ae83c000411e103c200041003602e8012001417f1004417141b28ec000411e103c200041ea016a41003a0000200041003b01e801200141" + "031004417d41d08ec0004124103c200041003602e8012001418094ebdc031004417341f48ec0004123103c4102100f416f41cc83c000411f10" + "3c417f20002802a0011012417141eb83c000411f103c2002417f10124171418a84c000411f103c20024181201012417441a984c0004120103c" + "200041e094ebdc036a220620002802a0011012417341c984c000411f103c200842003703002005420037030020034200370300200042003703" + "e8012004411420064108200141201020417341978fc0004118103c200842003703002005420037030020034200370300200042003703e80120" + "04411420044114200141201020417141af8fc000411a103c200842003703002005420037030020034200370300200042003703e80120064108" + "2001412041001021417341c98fc0004117103c200842003703002005420037030020034200370300200042003703e801200220002802a00120" + "01412041001021417141e08fc0004120103c200620002802a00141011009417341e884c0004118103c200220002802a0014101100941714180" + "85c000411a103c200842003703002005420037030020034200370300200042003703e801200620002802a0012001412010084173418090c000" + "4116103c200842003703002005420037030020034200370300200042003703e801200220002802a0012001412010084171419690c000411810" + "3c200842003703002005420037030020034200370300200042003703e8012004411420044114200620002802a001200141201022417341ae90" + "c000411c103c200842003703002005420037030020034200370300200042003703e8012004411420044114200220002802a001200141201022" + "417141ca90c000411e103c200842003703002005420037030020034200370300200042003703e80141faa0c0004114200620002802a0012001" + "41201023417341e890c0004119103c200842003703002005420037030020034200370300200042003703e80141faa0c0004114200220002802" + "a0012001412010234171418191c000411f103c200842003703002005420037030020034200370300200042003703e80141faa0c0004114419a" + "85c0004114200141201023417141a091c0004129103c200842003703002005420037030020034200370300200042003703e80141ae85c00041" + "2841faa0c0004114200141201023417141c991c0004125103c200041dc016a2000413c6a280100360200200041d4016a200041346a29010037" + "02002000200029012c3702cc01200041808080083602c801200041003b01e801200041c8016a2209411841faa0c00041142001410210234171" + "41ee91c000410e103c200620002802a001422a1001417341d685c0004111103c200041003b01e8014102200141021007416f41fc91c000411b" + "103c200041003b01e801410220014102100a416f419792c000412b103c200041003b01e8014101410220014102100b416f41c292c000412310" + "3c4102100f416f41cc83c000411f103c41021010416f41e785c000412f103c410141021011416f419686c0004127103c41b980c00041812010" + "06417441bd86c000411f103c41b980c00041c1001006417441dc86c000411a103c200041003b01e801200241812020014102100c417441e592" + "c0004121103c200041003b01e801200241812020014102100d4174418693c0004131103c200041003b01e8014101200241812020014102100e" + "417441b793c0004129103c20024181201012417441f686c0004125103c200241812010134174419b87c0004135103c41012002418120101441" + "7441d087c000412d103c20024181201015417441fd87c0004119103c41e782c00041812041a482c000410b41af82c000410e1017417441bd82" + "c0004109103c41e782c000410d41a482c00041812041af82c000410e1017417441bd82c0004109103c41e782c000410d41a482c000410b41af" + "82c0004181201017417441bd82c0004109103c200041003b01e8012002418120200141021016417441e093c0004121103c200041003b01e801" + "41faa0c00041812041faa0c00041142001410210234174418194c0004118103c200041003b01e8012004411420044114200241812020014102" + "10244174419994c000411f103c200041003b01e801200941812020044114200141021025417441b894c0004122103c41e782c000410d200620" + "002802a001410010004173419688c000410f103c200042d487b6f4c7d4b1c0003700e00141e782c000410d200041e095ebdc036a2207410810" + "26417341a588c000411c103c41e782c000410d200620002802a001101f417341c188c0004116103c20074108200041e0016a22064108102741" + "7341d788c0004118103c20064108200741081027417341ef88c0004118103c200041003b01e801200741082006410820014102410010284173" + "41da94c0004114103c200041003b01e80120064108200741082001410241001028417341ee94c0004114103c200041003b01e8012007410820" + "06410820014102410010294173418295c0004119103c200041003b01e801200641082007410820014102410010294173419b95c0004119103c" + "200041003b01e8012007410820064108200141024100102a417341b495c0004119103c200041003b01e8012006410820074108200141024100" + "102a417341cd95c0004119103c200041003b01e8012007410820064108200141024100102b417341e695c0004117103c200041003b01e80120" + "06410820074108200141024100102b417341fd95c0004117103c200041003b01e801200741084103200141024100102c4173419496c0004114" + "103c200041003b01e801200741084103200141024100102d417341a896c0004113103c200041003b01e80120074108200141024100102e4173" + "41bb96c0004113103c200842003703002005420037030020034200370300200042003703e801200441142004411420014120102f417141ce96" + "c000411f103c200842003703002005420037030020034200370300200042003703e8012004411420044114200141201030417141ed96c00041" + "25103c200842003703002005420037030020034200370300200042003703e80120044114200441142001412010314171419297c0004122103c" + "200842003703002005420037030020034200370300200042003703e8012004411420044114200141201032417141b497c000411e103c200842" + "003703002005420037030020034200370300200042003703e8012004411420044114200141201033417141d297c000411f103c200842003703" + "002005420037030020034200370300200042003703e801200441142004411420044114200141201034417141f197c0004120103c2008420037" + "03002005420037030020034200370300200042003703e80120044114200441142001412010354171419198c000412c103c2008420037030020" + "05420037030020034200370300200042003703e8012004411420044114200141201036417141bd98c000411f103c2008420037030020054200" + "37030020034200370300200042003703e8012004411420044114200141201037417141dc98c000411e103c200220002802a001410010094171" + "418789c0004123103c200041003b01e80120044114200220002802a001200141021018417141fa98c000411a103c200041003b01e801200220" + "002802a0012001410210194171419499c0004121103c200041003b01e801200220002802a00120014102101a417141b599c0004120103c2002" + "20002802a001101b417141aa89c0004120103c200220002802a001101c417141ca89c0004127103c200041003602e801200220002802a00120" + "014104101d417141d599c0004121103c200041003b01e801200220002802a001200141021008417141f699c0004123103c2000418080800836" + "02e801200041003b018e02200220002802a001200141042000418e026a220341021020417141999ac0004121103c200041003b018e02200220" + "002802a00122052004411420022005200341021024417141ba9ac0004127103c200041003b018e0220044114200220002802a0012205200220" + "05200341021024417141e19ac0004127103c200041003b018e02200220002802a00120044114200341021038417141889bc0004125103c2000" + "41003b018e0220044114200220002802a001200341021038417141ad9bc0004125103c200041003b018e02200220002802a001200441142003" + "41021039417141d29bc000412c103c200041003b018e0220044114200220002802a001200341021039417141fe9bc000412c103c200041003b" + "018e02200220002802a00120034102103a417141aa9cc000411f103c200041003b018e02200220002802a0012001410420034102102f417141" + "c99cc0004122103c200041003b018e02200220002802a00120044114419a85c0004114200341021022417141eb9cc0004121103c200041003b" + "018e0220044114200220002802a001419a85c00041142003410210224171418c9dc0004121103c200041003b018e02200220002802a0012001" + "4104200341021030417141ad9dc0004128103c200041003b018e0220094118200220002802a001200341021025417141d59dc0004123103c20" + "0041003b018e02200220002802a00120014104200341021031417141f89dc0004125103c200041003b018e02200220002802a0012001410420" + "03410210324171419d9ec0004121103c200041003b018e02200220002802a00120014104200341021033417141be9ec0004122103c20004100" + "3b018e02200220002802a0012004411420014104200341021034417141e09ec0004124103c200041003b018e0220044114200220002802a001" + "20014104200341021034417141849fc0004124103c200041003b018e02200220002802a00120014104200341021035417141a89fc000412f10" + "3c200041003b018e02200220002802a00120034102103b417141d79fc0004123103c200041003b018e02200220002802a00120014104200341" + "021036417141fa9fc0004122103c200041003b018e02200220002802a001200141042003410210374171419ca0c0004121103c200041003b01" + "8e02200220002802a00141f189c0004120200341021018417141bda0c000411c103c41e782c000410d200220002802a001101e417141918ac0" + "004122103c41e796abdd03410d41f189c000412041001000417341b38ac0004110103c41e796abdd03410d200641081026417341c38ac00041" + "1d103c41e796abdd03410d20044114101e417341e08ac0004118103c41e796abdd03410d419583c0004108101f417341f88ac0004117103c20" + "0220002802a0012002418120410010004174418f8bc000410e103c2002418120420110014174419d8bc0004112103c41e782c0004181202006" + "41081026417441af8bc000411b103c41e782c00041812020044114101e417441ca8bc0004116103c41e782c000418120419583c0004108101f" + "417441e08bc0004115103c41e782c000410d200220002802a001101f417141f58bc0004119103c200041003b018e02200220002802a0012004" + "4114200341021025417141d9a0c0004121103c4101410020044114101e4100418e8cc000411a103c20004190026a240041010f0b0b418080c0" + "00410b417f20032003417f4e1bac1001000b0be5200200418080c0000bae056572726f725f636f64653d54455354204641494c454424242424" + "24205354415254494e47205741534d20455845435554494f4e202424242424746573745f616d656e646d656e74616d656e646d656e745f656e" + "61626c656463616368655f6c65646765725f6f626a6765745f74785f61727261795f6c656e6765745f63757272656e745f6c65646765725f6f" + "626a5f61727261795f6c656e6765745f6c65646765725f6f626a5f61727261795f6c656e6765745f74785f6e65737465645f61727261795f6c" + "656e6765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e6765745f6c65646765725f6f626a5f6e" + "65737465645f61727261795f6c656e7570646174655f6461746174657374206d65737361676574657374207075626b65797465737420736967" + "6e6174757265636865636b5f7369676765745f6e66745f666c6167736765745f6e66745f7472616e736665725f66656574657374696e672074" + "7261636574726163655f6163636f756e74400000000000005f74726163655f616d6f756e74400000000000000074726163655f616d6f756e74" + "5f7a65726f6765745f706172656e745f6c65646765725f686173685f6e65675f7074726765745f74785f61727261795f6c656e5f696e76616c" + "69645f736669656c646765745f74785f6e65737465645f61727261795f6c656e5f6e65675f7074726765745f74785f6e65737465645f617272" + "61795f6c656e5f6e65675f6c656e6765745f74785f6e65737465645f61727261795f6c656e5f746f6f5f6c6f6e676765745f74785f6e657374" + "65645f61727261795f6c656e5f7074725f6f6f6263616368655f6c65646765725f6f626a5f7074725f6f6f6263616368655f6c65646765725f" + "6f626a5f77726f6e675f6c656e55534430303030303030303030303030303030300041d685c0000ba41b74726163655f6e756d5f6f6f625f73" + "74726765745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e5f696e76616c69645f736669656c646765745f6c656467" + "65725f6f626a5f61727261795f6c656e5f696e76616c69645f736669656c64616d656e646d656e745f656e61626c65645f746f6f5f6269675f" + "736c696365616d656e646d656e745f656e61626c65645f746f6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f746f" + "6f5f6269675f736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f5f6269" + "675f736c6963656765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963657570646174" + "655f646174615f746f6f5f6269675f736c69636574726163655f6f6f625f736c69636574726163655f6f70617175655f666c6f61745f6f6f62" + "5f736c69636574726163655f616d6f756e745f6f6f625f736c696365666c6f61745f636f6d706172655f6f6f625f736c69636531666c6f6174" + "5f636f6d706172655f6f6f625f736c6963653263616368655f6c65646765725f6f626a5f77726f6e675f73697a655f75696e74323536676574" + "5f6e66745f666c6167735f77726f6e675f73697a655f75696e743235366765745f6e66745f7472616e736665725f6665655f77726f6e675f73" + "697a655f75696e74323536303030303030303030303030303030303030303030303030303030303030303174726163655f6163636f756e745f" + "77726f6e675f73697a655f6163636f756e74696474726163655f6f6f625f737472696e6774726163655f6f70617175655f666c6f61745f6f6f" + "625f737472696e6774726163655f6163636f756e745f6f6f625f737472696e6774726163655f616d6f756e745f6f6f625f737472696e677472" + "6163655f746f6f5f6c6f6e6774726163655f6e756d5f746f6f5f6c6f6e6774726163655f6f70617175655f666c6f61745f746f6f5f6c6f6e67" + "74726163655f6163636f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f77" + "726f6e675f6c656e67746874726163655f6163636f756e745f636865636b5f646573796e636765745f6c65646765725f73716e6765745f7061" + "72656e745f6c65646765725f74696d656765745f706172656e745f6c65646765725f686173686765745f626173655f6665656765745f637572" + "72656e745f6c65646765725f6f626a5f6669656c646765745f6c65646765725f6f626a5f6669656c646765745f74785f6e65737465645f6669" + "656c646765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c646765745f6c65646765725f6f626a5f6e657374" + "65645f6669656c64636f6d707574655f7368613531325f68616c666765745f6e66746765745f6e66745f6973737565726765745f6e66745f74" + "61786f6e6765745f6e66745f73657269616c6765745f706172656e745f6c65646765725f686173685f6e65675f6c656e6765745f706172656e" + "745f6c65646765725f686173685f6275665f746f6f5f736d616c6c6765745f706172656e745f6c65646765725f686173685f6c656e5f746f6f" + "5f6c6f6e67636865636b5f6b65796c65745f6f6f625f6c656e5f753332636865636b5f6b65796c65745f77726f6e675f6c656e5f753332666c" + "6f61745f66726f6d5f75696e745f6c656e5f6f6f62666c6f61745f66726f6d5f75696e745f77726f6e675f6c656e5f75696e7436346163636f" + "756e745f6b65796c65745f6c656e5f6f6f626163636f756e745f6b65796c65745f77726f6e675f6c656e6c696e655f6b65796c65745f6c656e" + "5f6f6f625f63757272656e63796c696e655f6b65796c65745f77726f6e675f6c656e5f63757272656e6379616d6d5f6b65796c65745f6c656e" + "5f6f6f625f617373657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6c656e5f617373657432616d6d5f6b65796c65745f6c656e5f" + "77726f6e675f6e6f6e5f7872705f63757272656e63795f6c656e616d6d5f6b65796c65745f6c656e5f77726f6e675f7872705f63757272656e" + "63795f6c656e616d6d5f6b65796c65745f6d70746765745f74785f6669656c645f696e76616c69645f736669656c646765745f63757272656e" + "745f6c65646765725f6f626a5f6669656c645f696e76616c69645f736669656c646765745f6c65646765725f6f626a5f6669656c645f696e76" + "616c69645f736669656c646765745f74785f6e65737465645f6669656c645f746f6f5f6269675f736c6963656765745f63757272656e745f6c" + "65646765725f6f626a5f6e65737465645f6669656c645f746f6f5f6269675f736c6963656765745f6c65646765725f6f626a5f6e6573746564" + "5f6669656c645f746f6f5f6269675f736c696365636f6d707574655f7368613531325f68616c665f746f6f5f6269675f736c696365616d6d5f" + "6b65796c65745f746f6f5f6269675f736c69636563726564656e7469616c5f6b65796c65745f746f6f5f6269675f736c6963656d70746f6b65" + "6e5f6b65796c65745f746f6f5f6269675f736c6963655f6d70746964666c6f61745f6164645f6f6f625f736c69636531666c6f61745f616464" + "5f6f6f625f736c69636532666c6f61745f73756274726163745f6f6f625f736c69636531666c6f61745f73756274726163745f6f6f625f736c" + "69636532666c6f61745f6d756c7469706c795f6f6f625f736c69636531666c6f61745f6d756c7469706c795f6f6f625f736c69636532666c6f" + "61745f6469766964655f6f6f625f736c69636531666c6f61745f6469766964655f6f6f625f736c69636532666c6f61745f726f6f745f6f6f62" + "5f736c696365666c6f61745f706f775f6f6f625f736c696365666c6f61745f6c6f675f6f6f625f736c696365657363726f775f6b65796c6574" + "5f77726f6e675f73697a655f75696e7433326d70745f69737375616e63655f6b65796c65745f77726f6e675f73697a655f75696e7433326e66" + "745f6f666665725f6b65796c65745f77726f6e675f73697a655f75696e7433326f666665725f6b65796c65745f77726f6e675f73697a655f75" + "696e7433326f7261636c655f6b65796c65745f77726f6e675f73697a655f75696e7433327061796368616e5f6b65796c65745f77726f6e675f" + "73697a655f75696e7433327065726d697373696f6e65645f646f6d61696e5f6b65796c65745f77726f6e675f73697a655f75696e7433327469" + "636b65745f6b65796c65745f77726f6e675f73697a655f75696e7433327661756c745f6b65796c65745f77726f6e675f73697a655f75696e74" + "33326765745f6e66745f77726f6e675f73697a655f75696e743235366765745f6e66745f6973737565725f77726f6e675f73697a655f75696e" + "743235366765745f6e66745f7461786f6e5f77726f6e675f73697a655f75696e743235366765745f6e66745f73657269616c5f77726f6e675f" + "73697a655f75696e743235366163636f756e745f6b65796c65745f77726f6e675f73697a655f6163636f756e746964636865636b5f6b65796c" + "65745f77726f6e675f73697a655f6163636f756e74696463726564656e7469616c5f6b65796c65745f77726f6e675f73697a655f6163636f75" + "6e7469643163726564656e7469616c5f6b65796c65745f77726f6e675f73697a655f6163636f756e7469643264656c65676174655f6b65796c" + "65745f77726f6e675f73697a655f6163636f756e7469643164656c65676174655f6b65796c65745f77726f6e675f73697a655f6163636f756e" + "746964326465706f7369745f707265617574685f6b65796c65745f77726f6e675f73697a655f6163636f756e746964316465706f7369745f70" + "7265617574685f6b65796c65745f77726f6e675f73697a655f6163636f756e746964326469645f6b65796c65745f77726f6e675f73697a655f" + "6163636f756e746964657363726f775f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646c696e655f6b65796c65745f7772" + "6f6e675f73697a655f6163636f756e746964316c696e655f6b65796c65745f77726f6e675f73697a655f6163636f756e746964326d70745f69" + "737375616e63655f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646d70746f6b656e5f6b65796c65745f77726f6e675f73" + "697a655f6163636f756e7469646e66745f6f666665725f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646f666665725f6b" + "65796c65745f77726f6e675f73697a655f6163636f756e7469646f7261636c655f6b65796c65745f77726f6e675f73697a655f6163636f756e" + "7469647061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e746964317061796368616e5f6b65796c65745f77726f" + "6e675f73697a655f6163636f756e746964327065726d697373696f6e65645f646f6d61696e5f6b65796c65745f77726f6e675f73697a655f61" + "63636f756e7469647369676e6572735f6b65796c65745f77726f6e675f73697a655f6163636f756e7469647469636b65745f6b65796c65745f" + "77726f6e675f73697a655f6163636f756e7469647661756c745f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646765745f" + "6e66745f77726f6e675f73697a655f6163636f756e7469646d70746f6b656e5f6b65796c65745f6d707469645f77726f6e675f6c656e677468" + "004d0970726f64756365727302086c616e6775616765010452757374000c70726f6365737365642d6279010572757374631d312e38372e3020" + "2831373036376539616320323032352d30352d303929002c0f7461726765745f6665617475726573022b0f6d757461626c652d676c6f62616c" + "732b087369676e2d657874"; extern std::string const floatTestsWasmHex = "0061736d0100000001430860077f7f7f7f7f7f7f017f60057f7f7f7f7f017f60047f7f7f7f" @@ -921,57 +847,57 @@ extern std::string const floatTestsWasmHex = "00010302010705030100110619037f01418080c0000b7f0041d28ac0000b7f0041e08ac000" "0b072e04066d656d6f727902000666696e697368000e0a5f5f646174615f656e6403010b5f" "5f686561705f6261736503020af20e01ef0e01047f230041206b22012400418080c000411d" - "41004100410010001a200142003703100240428ce000200141106a22004108410010014108" + "41014100410010001a200142003703100240428ce000200141106a22004108410010014108" "460440419d80c00041172000410810021a41b480c000411e20004108410110001a0c010b41" - "d280c000411e41004100410010001a0b2001428ce0003703180240200141186a4108200141" + "d280c000411e41014100410010001a0b2001428ce0003703180240200141186a4108200141" "106a2200410841001003410846044041f080c00041172000410810021a0c010b418781c000" - "411e41004100410010001a0b0240410242fb00200141106a22004108410010044108460440" - "41a581c00041212000410810021a0c010b41c681c000412641004100410010001a0b41ec81" - "c0004115418182c000410810021a418982c0004116419f82c000410810021a41a782c00041" - "1b41004100410010001a2001420037031802404201200141186a2200410841001001410846" - "044041c282c000410f2000410810021a0c010b41d182c000411641004100410010001a0b02" - "40200141186a4108418182c0004108100545044041e782c000411b41004100410010001a0c" - "010b418283c000411b41004100410010001a0b0240200141186a4108419f82c00041081005" - "4101460440419d83c000412341004100410010001a0c010b41c083c0004124410041004100" - "10001a0b0240419f82c0004108200141186a41081005410246044041e483c0004123410041" - "00410010001a0c010b418784c000412441004100410010001a0b41ab84c000412041004100" + "411e41014100410010001a0b0240410242fb00200141106a22004108410010044108460440" + "41a581c00041212000410810021a0c010b41c681c000412641014100410010001a0b41ec81" + "c0004115418182c000410810021a419182c0004116418982c000410810021a41a782c00041" + "1b41014100410010001a2001420037031802404201200141186a2200410841001001410846" + "044041c282c000410f2000410810021a0c010b41d182c000411641014100410010001a0b02" + "40200141186a4108418182c0004108100545044041e782c000411b41014100410010001a0c" + "010b418283c000411b41014100410010001a0b0240200141186a4108418982c00041081005" + "4101460440419d83c000412341014100410010001a0c010b41c083c0004124410141004100" + "10001a0b0240418982c0004108200141186a41081005410246044041e483c0004123410141" + "00410010001a0c010b418784c000412441014100410010001a0b41ab84c000412041014100" "410010001a200142d487b6f4c7d4b1c000370310410921000340200141106a220241084181" "82c000410820024108410010061a200041016b22000d000b20014200370318420a20014118" - "6a22004108410010011a02402000410820024108100545044041cb84c00041144100410041" - "0010001a0c010b41df84c000411341004100410010001a0b410b21000340200141106a2202" - "4108418182c000410820024108410010071a200041016b22000d000b024020024108419f82" - "c0004108100545044041f284c000411941004100410010001a0c010b418b85c00041184100" - "4100410010001a0b41a385c000412341004100410010001a20014200370300420a20014108" + "6a22004108410010011a02402000410820024108100545044041cb84c00041144101410041" + "0010001a0c010b41df84c000411341014100410010001a0b410b21000340200141106a2202" + "4108418182c000410820024108410010071a200041016b22000d000b024020024108418982" + "c0004108100545044041f284c000411941014100410010001a0c010b418b85c00041184101" + "4100410010001a0b41a385c000412341014100410010001a20014200370300420a20014108" "410010011a200142d487b6f4c7d4b1c000370308410621000340200141086a220241082001" "410820024108410010081a200041016b22000d000b2001420037031042c0843d200141106a" - "22004108410010011a02402000410820024108100545044041c685c0004119410041004100" - "10001a0c010b41df85c000411841004100410010001a0b410721000340200141086a220241" + "22004108410010011a02402000410820024108100545044041c685c0004119410141004100" + "10001a0c010b41df85c000411841014100410010001a0b410721000340200141086a220241" "082001410820024108410010091a200041016b22000d000b20014200370318417f42012001" - "41186a22004108410010041a02402002410820004108100545044041f785c0004117410041" - "00410010001a0c010b418e86c000411641004100410010001a0b41a486c000411741004100" + "41186a22004108410010041a02402002410820004108100545044041f785c0004117410141" + "00410010001a0c010b418e86c000411641014100410010001a0b41a486c000411741014100" "410010001a20014200370308418182c00041084103200141086a220041084100100a1a41bb" - "86c00041122000410810021a419f82c00041084106200041084100100a1a41cd86c0004118" + "86c00041122000410810021a418982c00041084106200041084100100a1a41cd86c0004118" "2000410810021a200142003703104209200141106a22024108410010011a20024108410220" "0041084100100a1a41e586c00041142000410810021a200241084100200041084100100a1a" "41f986c00041172000410810021a200142003703184200200141186a22034108410010011a" "200341084102200041084100100a1a419087c00041142000410810021a41a487c000413820" - "0341084100200041084100100aac100b1a41dc87c000411841004100410010001a20014200" + "0341084100200041084100100aac100b1a41dc87c000411841014100410010001a20014200" "370308420920004108410010011a20014200370310200041084102200241084100100c1a41" "f487c00041122002410810021a200041084103200241084100100c1a418688c00041122002" "410810021a2001420037031842c0843d20034108410010011a200341084103200241084100" "100c1a419888c00041182002410810021a200341084106200241084100100c1a41b088c000" - "411c2002410810021a41cc88c000411741004100410010001a2001420037031042c0843d20" + "411c2002410810021a41cc88c000411741014100410010001a2001420037031042c0843d20" "024108410010011a2001420037031820024108200341084100100d1a41e388c00041142003" - "410810021a41f788c000411a41004100410010001a20014200370318418182c0004108419f" - "82c000410820034108410010081a0240419f82c0004108200341081005450440419189c000" - "411641004100410010001a0c010b41a789c000411541004100410010001a0b419f82c00041" - "08419f82c0004108200141186a22004108410010081a0240418182c0004108200041081005" - "45044041bc89c000411741004100410010001a0c010b41d389c00041164100410041001000" - "1a0b41e989c000411a41004100410010001a2001420037031020014200370318420a200141" + "410810021a41f788c000411a41014100410010001a20014200370318418182c00041084189" + "82c000410820034108410010081a0240418982c0004108200341081005450440419189c000" + "411641014100410010001a0c010b41a789c000411541014100410010001a0b418982c00041" + "08418982c0004108200141186a22004108410010081a0240418182c0004108200041081005" + "45044041bc89c000411741014100410010001a0c010b41d389c00041164101410041001000" + "1a0b41e989c000411a41014100410010001a2001420037031020014200370318420a200141" "186a22024108410010011a418182c000410820024108200141106a22004108410010091a41" "838ac00041192000410810021a418182c00041082000410820004108410010091a419c8ac0" - "00410f2000410810021a02402002410820004108100545044041ab8ac00041144100410041" - "0010001a0c010b41bf8ac000411341004100410010001a0b200141206a240041010b0bdc0a" + "00410f2000410810021a02402002410820004108100545044041ab8ac00041144101410041" + "0010001a0c010b41bf8ac000411341014100410010001a0b200141206a240041010b0bdc0a" "0100418080c0000bd20a0a24242420746573745f666c6f61745f66726f6d5f7761736d2024" "24242020666c6f61742066726f6d206936342031323330303a2020666c6f61742066726f6d" "20693634203132333030206173204845583a2020666c6f61742066726f6d20693634203132" @@ -979,8 +905,8 @@ extern std::string const floatTestsWasmHex = "6c6f61742066726f6d207536342031323330303a206661696c65642020666c6f6174206672" "6f6d2065787020322c206d616e7469737361203132333a2020666c6f61742066726f6d2065" "787020322c206d616e746973736120333a206661696c65642020666c6f61742066726f6d20" - "636f6e737420313ad4838d7ea4c680002020666c6f61742066726f6d20636f6e7374202d31" - "3a94838d7ea4c680000a24242420746573745f666c6f61745f636f6d706172652024242420" + "636f6e737420313ad4838d7ea4c6800094838d7ea4c680002020666c6f61742066726f6d20" + "636f6e7374202d313a0a24242420746573745f666c6f61745f636f6d706172652024242420" "20666c6f61742066726f6d20313a2020666c6f61742066726f6d20313a206661696c656420" "20666c6f61742066726f6d2031203d3d20464c4f41545f4f4e452020666c6f61742066726f" "6d203120213d20464c4f41545f4f4e452020666c6f61742066726f6d2031203e20464c4f41" @@ -1010,8 +936,8 @@ extern std::string const floatTestsWasmHex = "696e76657274206120666c6f61742066726f6d2031303a2020696e7665727420616761696e" "3a2020696e766572742074776963653a20676f6f642020696e766572742074776963653a20" "626164004d0970726f64756365727302086c616e6775616765010452757374000c70726f63" - "65737365642d6279010572757374631d312e38352e31202834656231363132353020323032" - "352d30332d313529002c0f7461726765745f6665617475726573022b0f6d757461626c652d" + "65737365642d6279010572757374631d312e38372e30202831373036376539616320323032" + "352d30352d303929002c0f7461726765745f6665617475726573022b0f6d757461626c652d" "676c6f62616c732b087369676e2d657874"; extern std::string const float0Hex = @@ -1375,19 +1301,20 @@ extern std::string const badAllocHex = "616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c7469" "76616c7565"; -extern std::string const badAlignHex = - "0061736d0100000001110360057f7f7f7f7f017f6000006000017f02170103656e760f666c" - "6f61745f66726f6d5f75696e7400000303020102050301000206400a7f004180080b7f0041" - "80080b7f00418088020b7f00418088020b7f00418088060b7f004180080b7f00418088060b" - "7f00418080080b7f0041000b7f0041010b07b1010d066d656d6f72790200115f5f7761736d" - "5f63616c6c5f63746f727300010474657374000206655f6461746103000c5f5f64736f5f68" - "616e646c6503010a5f5f646174615f656e6403020b5f5f737461636b5f6c6f7703030c5f5f" - "737461636b5f6869676803040d5f5f676c6f62616c5f6261736503050b5f5f686561705f62" - "61736503060a5f5f686561705f656e6403070d5f5f6d656d6f72795f6261736503080c5f5f" - "7461626c655f6261736503090a240202000b1f00418108427f370000418108410841a30841" - "0c410010001a41a4082802000b007f0970726f647563657273010c70726f6365737365642d" - "62790105636c616e675f31392e312e352d776173692d73646b202868747470733a2f2f6769" - "746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a6563742061623462356132646235" - "3832393538616631656533303861373930636664623432626432343732302900490f746172" - "6765745f6665617475726573042b0f6d757461626c652d676c6f62616c732b087369676e2d" - "6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; +extern std::string const badAlignWasmHex = + "0061736d01000000011b046000017f60057f7f7f7f7f017f60067f7f7f7f7f7f017f600000022a0203656e760f666c6f61745f66726f6d5f75" + "696e74000103656e760c636865636b5f6b65796c6574000203050403000000050301000306470b7f004180080b7f00418088020b7f00418008" + "0b7f00418088040b7f00418088040b7f00418088080b7f004180080b7f00418088080b7f004180800c0b7f0041000b7f0041010b07cc011006" + "6d656d6f72790200115f5f7761736d5f63616c6c5f63746f72730002057465737431000307655f64617461310300057465737432000407655f" + "64617461320301047465737400050c5f5f64736f5f68616e646c6503020a5f5f646174615f656e6403030b5f5f737461636b5f6c6f7703040c" + "5f5f737461636b5f6869676803050d5f5f676c6f62616c5f6261736503060b5f5f686561705f6261736503070a5f5f686561705f656e640308" + "0d5f5f6d656d6f72795f6261736503090c5f5f7461626c655f62617365030a0a99020402000b2801017f418108427f370000418108410841a3" + "08410c41001000220041a40828020020004100481b0b5f01017f419a88024191a4cca00136010041928802428994ace0d0c1c3871037010041" + "8a88024281848ca0d0c0c1830837010041818802417f360000418a8802411441818802410441a3880241201001220041a48802280200200041" + "00481b0b8a0101037f418108427f370000418108410841a308410c410010002100419a88024191a4cca00136010041928802428994ace0d0c1" + "c38710370100418a88024281848ca0d0c0c1830837010041818802417f36000041a4082802002101418a8802411441818802410441a3880241" + "201001220241a4880228020020024100481b2000200120004100481b6a0b007f0970726f647563657273010c70726f6365737365642d627901" + "05636c616e675f31392e312e352d776173692d73646b202868747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a" + "65637420616234623561326462353832393538616631656533303861373930636664623432626432343732302900490f7461726765745f6665" + "617475726573042b0f6d757461626c652d676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c74" + "6976616c7565"; diff --git a/src/test/app/wasm_fixtures/fixtures.h b/src/test/app/wasm_fixtures/fixtures.h index ff72711000..12f7b2ee6c 100644 --- a/src/test/app/wasm_fixtures/fixtures.h +++ b/src/test/app/wasm_fixtures/fixtures.h @@ -84,4 +84,4 @@ extern std::string const infiniteLoopWasmHex; extern std::string const startLoopHex; extern std::string const badAllocHex; -extern std::string const badAlignHex; +extern std::string const badAlignWasmHex; diff --git a/src/test/app/wasm_fixtures/float_tests/Cargo.lock b/src/test/app/wasm_fixtures/float_tests/Cargo.lock index 175adf0254..efad3253e7 100644 --- a/src/test/app/wasm_fixtures/float_tests/Cargo.lock +++ b/src/test/app/wasm_fixtures/float_tests/Cargo.lock @@ -154,7 +154,7 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "xrpl-address-macro" version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git#d27d3e0b4abf3c0215aade729d89053805efe48e" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=u32-buffer#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" dependencies = [ "bs58", "quote", @@ -165,7 +165,7 @@ dependencies = [ [[package]] name = "xrpl-wasm-stdlib" version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git#d27d3e0b4abf3c0215aade729d89053805efe48e" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=u32-buffer#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" dependencies = [ "xrpl-address-macro", ] diff --git a/src/test/app/wasm_fixtures/float_tests/Cargo.toml b/src/test/app/wasm_fixtures/float_tests/Cargo.toml index b369cac501..a115dc006f 100644 --- a/src/test/app/wasm_fixtures/float_tests/Cargo.toml +++ b/src/test/app/wasm_fixtures/float_tests/Cargo.toml @@ -15,7 +15,7 @@ opt-level = 's' panic = "abort" [dependencies] -xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib" } +xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib", branch = "u32-buffer" } [profile.dev] panic = "abort" diff --git a/src/test/app/wasm_fixtures/ledgerSqn.c b/src/test/app/wasm_fixtures/ledgerSqn.c index 3458b02872..020fafc78f 100644 --- a/src/test/app/wasm_fixtures/ledgerSqn.c +++ b/src/test/app/wasm_fixtures/ledgerSqn.c @@ -1,27 +1,16 @@ #include int32_t -get_ledger_sqn(); -// int32_t trace(uint8_t const*, int32_t, uint8_t const*, int32_t, int32_t); -// int32_t trace_num(uint8_t const*, int32_t, int64_t); - -// uint8_t buf[1024]; - -// char const test_res[] = "sqn: "; -// char const test_name[] = "TEST get_ledger_sqn"; +get_ledger_sqn(uint8_t*, int32_t); int finish() { - // trace((uint8_t const *)test_name, sizeof(test_name) - 1, 0, 0, 0); + uint32_t sqn; + int32_t result = get_ledger_sqn((uint8_t*)&sqn, sizeof(sqn)); - // memset(buf, 0, sizeof(buf)); - // for(int i = 0; i < sizeof(buf); ++i) buf[i] = 0; + if (result < 0) + return result; - int x = get_ledger_sqn(); - // if (x >= 0) - // x = *((int32_t*)buf); - // trace_num((uint8_t const *)test`_res, sizeof(test_res) - 1, x); - - return x < 0 ? x : (x >= 5 ? x : 0); + return sqn >= 5 ? 5 : 0; } diff --git a/src/xrpld/app/wasm/HostFunc.h b/src/xrpld/app/wasm/HostFunc.h index c49e58eb38..f3ed5ad6f9 100644 --- a/src/xrpld/app/wasm/HostFunc.h +++ b/src/xrpld/app/wasm/HostFunc.h @@ -122,13 +122,13 @@ struct HostFunctions return j_; } - virtual Expected + virtual Expected getLedgerSqn() { return Unexpected(HostFunctionError::INTERNAL); } - virtual Expected + virtual Expected getParentLedgerTime() { return Unexpected(HostFunctionError::INTERNAL); @@ -140,7 +140,7 @@ struct HostFunctions return Unexpected(HostFunctionError::INTERNAL); } - virtual Expected + virtual Expected getBaseFee() { return Unexpected(HostFunctionError::INTERNAL); diff --git a/src/xrpld/app/wasm/HostFuncImpl.h b/src/xrpld/app/wasm/HostFuncImpl.h index b5ce367004..d8e080a8ef 100644 --- a/src/xrpld/app/wasm/HostFuncImpl.h +++ b/src/xrpld/app/wasm/HostFuncImpl.h @@ -82,16 +82,16 @@ public: return data_; } - Expected + Expected getLedgerSqn() override; - Expected + Expected getParentLedgerTime() override; Expected getParentLedgerHash() override; - Expected + Expected getBaseFee() override; Expected diff --git a/src/xrpld/app/wasm/HostFuncWrapper.h b/src/xrpld/app/wasm/HostFuncWrapper.h index 8555fd69a1..601e9372dd 100644 --- a/src/xrpld/app/wasm/HostFuncWrapper.h +++ b/src/xrpld/app/wasm/HostFuncWrapper.h @@ -4,11 +4,11 @@ namespace xrpl { -using getLedgerSqn_proto = int32_t(); +using getLedgerSqn_proto = int32_t(uint8_t*, int32_t); wasm_trap_t* getLedgerSqn_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using getParentLedgerTime_proto = int32_t(); +using getParentLedgerTime_proto = int32_t(uint8_t*, int32_t); wasm_trap_t* getParentLedgerTime_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); @@ -16,7 +16,7 @@ using getParentLedgerHash_proto = int32_t(uint8_t*, int32_t); wasm_trap_t* getParentLedgerHash_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using getBaseFee_proto = int32_t(); +using getBaseFee_proto = int32_t(uint8_t*, int32_t); wasm_trap_t* getBaseFee_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); @@ -96,7 +96,7 @@ using ammKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t wasm_trap_t* ammKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using checkKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using checkKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* checkKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); @@ -117,7 +117,7 @@ using didKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* didKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using escrowKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using escrowKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* escrowKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); @@ -126,7 +126,7 @@ using lineKeylet_proto = wasm_trap_t* lineKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using mptIssuanceKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using mptIssuanceKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* mptIssuanceKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); @@ -134,23 +134,24 @@ using mptokenKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int wasm_trap_t* mptokenKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using nftOfferKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using nftOfferKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* nftOfferKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using offerKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using offerKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* offerKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using oracleKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using oracleKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* oracleKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using paychanKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using paychanKeylet_proto = + int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* paychanKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using permissionedDomainKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using permissionedDomainKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* permissionedDomainKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); @@ -158,11 +159,11 @@ using signersKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* signersKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using ticketKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using ticketKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* ticketKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using vaultKeylet_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t); +using vaultKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* vaultKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); diff --git a/src/xrpld/app/wasm/detail/HostFuncImplLedgerHeader.cpp b/src/xrpld/app/wasm/detail/HostFuncImplLedgerHeader.cpp index 1889341ebe..57ef79e11a 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplLedgerHeader.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplLedgerHeader.cpp @@ -9,22 +9,16 @@ namespace xrpl { // SECTION: LEDGER HEADER FUNCTIONS // ========================================================= -Expected +Expected WasmHostFunctionsImpl::getLedgerSqn() { - auto seq = ctx.view().seq(); - if (seq > std::numeric_limits::max()) - return Unexpected(HostFunctionError::INTERNAL); // LCOV_EXCL_LINE - return static_cast(seq); + return ctx.view().seq(); } -Expected +Expected WasmHostFunctionsImpl::getParentLedgerTime() { - auto time = ctx.view().parentCloseTime().time_since_epoch().count(); - if (time > std::numeric_limits::max()) - return Unexpected(HostFunctionError::INTERNAL); - return static_cast(time); + return ctx.view().parentCloseTime().time_since_epoch().count(); } Expected @@ -33,13 +27,10 @@ WasmHostFunctionsImpl::getParentLedgerHash() return ctx.view().header().parentHash; } -Expected +Expected WasmHostFunctionsImpl::getBaseFee() { - auto fee = ctx.view().fees().base.drops(); - if (fee > std::numeric_limits::max()) - return Unexpected(HostFunctionError::INTERNAL); - return static_cast(fee); + return ctx.view().fees().base.drops(); } Expected diff --git a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp index ffae4de7ed..34cfac416e 100644 --- a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp @@ -56,25 +56,40 @@ getDataInt64(IW const* _runtime, wasm_val_vec_t const* params, int32_t& i) return result; } +template +Expected +getDataUnsigned(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) +{ + static_assert(std::is_unsigned_v); + auto const r = getDataSlice(runtime, params, i); + if (!r) + return Unexpected(r.error()); + if (r->size() != sizeof(T)) + return Unexpected(HostFunctionError::INVALID_PARAMS); + + T x; + uintptr_t p = reinterpret_cast(r->data()); + if (p & (alignof(T) - 1)) // unaligned + memcpy(&x, r->data(), sizeof(T)); + else + x = *reinterpret_cast(r->data()); + x = adjustWasmEndianess(x); + + return x; +} + +template +Expected +getDataUInt32(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) +{ + return getDataUnsigned(runtime, params, i); +} + template Expected getDataUInt64(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) { - auto const r = getDataSlice(runtime, params, i); - if (!r) - return Unexpected(r.error()); - if (r->size() != sizeof(uint64_t)) - return Unexpected(HostFunctionError::INVALID_PARAMS); - - uint64_t x; - uintptr_t p = reinterpret_cast(r->data()); - if (p & (alignof(uint64_t) - 1)) // unaligned - memcpy(&x, r->data(), sizeof(uint64_t)); - else - x = *reinterpret_cast(r->data()); - x = adjustWasmEndianess(x); - - return x; + return getDataUnsigned(runtime, params, i); } template @@ -791,10 +806,10 @@ checkKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result return hfResult(results, acc.error()); } - auto const seq = getDataInt32(runtime, params, index); + auto const seq = getDataUInt32(runtime, params, index); if (!seq) { - return hfResult(results, seq.error()); // LCOV_EXCL_LINE + return hfResult(results, seq.error()); } return returnResult(runtime, params, results, hf->checkKeylet(acc.value(), *seq), index); @@ -911,10 +926,10 @@ escrowKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul return hfResult(results, acc.error()); } - auto const seq = getDataInt32(runtime, params, index); + auto const seq = getDataUInt32(runtime, params, index); if (!seq) { - return hfResult(results, seq.error()); // LCOV_EXCL_LINE + return hfResult(results, seq.error()); } return returnResult(runtime, params, results, hf->escrowKeylet(*acc, *seq), index); @@ -965,10 +980,10 @@ mptIssuanceKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* return hfResult(results, acc.error()); } - auto const seq = getDataInt32(runtime, params, index); + auto const seq = getDataUInt32(runtime, params, index); if (!seq) { - return hfResult(results, seq.error()); // LCOV_EXCL_LINE + return hfResult(results, seq.error()); } return returnResult(runtime, params, results, hf->mptIssuanceKeylet(acc.value(), seq.value()), index); @@ -1019,10 +1034,10 @@ nftOfferKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* res return hfResult(results, acc.error()); } - auto const seq = getDataInt32(runtime, params, index); + auto const seq = getDataUInt32(runtime, params, index); if (!seq) { - return hfResult(results, seq.error()); // LCOV_EXCL_LINE + return hfResult(results, seq.error()); } return returnResult(runtime, params, results, hf->nftOfferKeylet(acc.value(), seq.value()), index); @@ -1043,10 +1058,10 @@ offerKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result return hfResult(results, acc.error()); } - auto const seq = getDataInt32(runtime, params, index); + auto const seq = getDataUInt32(runtime, params, index); if (!seq) { - return hfResult(results, seq.error()); // LCOV_EXCL_LINE + return hfResult(results, seq.error()); } return returnResult(runtime, params, results, hf->offerKeylet(acc.value(), seq.value()), index); @@ -1067,10 +1082,10 @@ oracleKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul return hfResult(results, acc.error()); } - auto const documentId = getDataInt32(runtime, params, index); + auto const documentId = getDataUInt32(runtime, params, index); if (!documentId) { - return hfResult(results, documentId.error()); // LCOV_EXCL_LINE + return hfResult(results, documentId.error()); } return returnResult(runtime, params, results, hf->oracleKeylet(*acc, *documentId), index); } @@ -1096,10 +1111,10 @@ paychanKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu return hfResult(results, dest.error()); } - auto const seq = getDataInt32(runtime, params, index); + auto const seq = getDataUInt32(runtime, params, index); if (!seq) { - return hfResult(results, seq.error()); // LCOV_EXCL_LINE + return hfResult(results, seq.error()); } return returnResult(runtime, params, results, hf->paychanKeylet(acc.value(), dest.value(), seq.value()), index); @@ -1120,10 +1135,10 @@ permissionedDomainKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_ return hfResult(results, acc.error()); } - auto const seq = getDataInt32(runtime, params, index); + auto const seq = getDataUInt32(runtime, params, index); if (!seq) { - return hfResult(results, seq.error()); // LCOV_EXCL_LINE + return hfResult(results, seq.error()); } return returnResult(runtime, params, results, hf->permissionedDomainKeylet(acc.value(), seq.value()), index); @@ -1162,10 +1177,10 @@ ticketKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul return hfResult(results, acc.error()); } - auto const seq = getDataInt32(runtime, params, index); + auto const seq = getDataUInt32(runtime, params, index); if (!seq) { - return hfResult(results, seq.error()); // LCOV_EXCL_LINE + return hfResult(results, seq.error()); } return returnResult(runtime, params, results, hf->ticketKeylet(acc.value(), seq.value()), index); @@ -1186,10 +1201,10 @@ vaultKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result return hfResult(results, acc.error()); } - auto const seq = getDataInt32(runtime, params, index); + auto const seq = getDataUInt32(runtime, params, index); if (!seq) { - return hfResult(results, seq.error()); // LCOV_EXCL_LINE + return hfResult(results, seq.error()); } return returnResult(runtime, params, results, hf->vaultKeylet(acc.value(), seq.value()), index); From ba03a8a9d29a0f4bcd9f351832239cef50bb398b Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Tue, 3 Feb 2026 17:43:54 -0500 Subject: [PATCH 077/137] Fix negation of int64_t (#6296) --- src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp b/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp index 36231ec37d..abff96a08d 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp @@ -93,7 +93,7 @@ public: makeNumber(int64_t mantissa, int32_t exponent) { if (mantissa < 0) - return Number(true, -mantissa, exponent, Number::normalized()); + return Number(true, -static_cast(mantissa), exponent, Number::normalized()); return Number(false, mantissa, exponent, Number::normalized()); } From 65f9cf80c083f95fe0436195e4dc24cad8be07c4 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 9 Feb 2026 12:13:39 -0500 Subject: [PATCH 078/137] add readme to src/xrpld/app/wasm (#6340) * add readme to src/xrpl/app/wasm * important block * respond to copilot --- src/xrpld/app/wasm/README.md | 189 +++++++++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 src/xrpld/app/wasm/README.md diff --git a/src/xrpld/app/wasm/README.md b/src/xrpld/app/wasm/README.md new file mode 100644 index 0000000000..3275011b49 --- /dev/null +++ b/src/xrpld/app/wasm/README.md @@ -0,0 +1,189 @@ +# WASM Module for Programmable Escrows + +This module provides WebAssembly (WASM) execution capabilities for programmable +escrows on the XRP Ledger. When an escrow is finished, the WASM code runs to +determine whether the escrow conditions are met, enabling custom programmable +logic for escrow release conditions. + +For the full specification, see +[XLS-0102: WASM VM](https://xls.xrpl.org/xls/XLS-0102-wasm-vm.html). + +## Architecture + +The module follows a layered architecture: + +``` +┌─────────────────────────────────────────────────────────────┐ +│ WasmEngine (WasmVM.h) │ +│ runEscrowWasm(), preflightEscrowWasm() │ +│ Host function registration │ +├─────────────────────────────────────────────────────────────┤ +│ WasmiEngine (WasmiVM.h) │ +│ Low-level wasmi interpreter integration │ +├─────────────────────────────────────────────────────────────┤ +│ HostFuncWrapper │ HostFuncImpl │ +│ C-style WASM bridges │ C++ implementations │ +├─────────────────────────────────────────────────────────────┤ +│ HostFunc (Interface) │ +│ Abstract base class for host functions │ +└─────────────────────────────────────────────────────────────┘ +``` + +### Key Components + +- **`WasmVM.h` / `detail/WasmVM.cpp`** - High-level facade providing: + - `WasmEngine` singleton that wraps the underlying WASM interpreter + - `runEscrowWasm()` - Execute WASM code for escrow finish + - `preflightEscrowWasm()` - Validate WASM code during preflight + - `createWasmImport()` - Register all host functions + +- **`WasmiVM.h` / `detail/WasmiVM.cpp`** - Low-level integration with the + [wasmi](https://github.com/wasmi-labs/wasmi) WebAssembly interpreter: + - `WasmiEngine` - Manages WASM modules, instances, and execution + - Memory management and gas metering + - Function invocation and result handling + +- **`HostFunc.h`** - Abstract `HostFunctions` base class defining the interface + for all callable host functions. Each method returns + `Expected`. + +- **`HostFuncImpl.h` / `detail/HostFuncImpl*.cpp`** - Concrete + `WasmHostFunctionsImpl` class that implements host functions with access to + `ApplyContext` for ledger state queries. Implementation split across files: + - `HostFuncImpl.cpp` - Core utilities (updateData, checkSignature, etc.) + - `HostFuncImplFloat.cpp` - Float/number arithmetic operations + - `HostFuncImplGetter.cpp` - Field access (transaction, ledger objects) + - `HostFuncImplKeylet.cpp` - Keylet construction functions + - `HostFuncImplLedgerHeader.cpp` - Ledger header info access + - `HostFuncImplNFT.cpp` - NFT-related queries + - `HostFuncImplTrace.cpp` - Debugging/tracing functions + +- **`HostFuncWrapper.h` / `detail/HostFuncWrapper.cpp`** - C-style wrapper + functions that bridge WASM calls to C++ `HostFunctions` methods. Each host + function has: + - A `_proto` type alias defining the function signature + - A `_wrap` function that extracts parameters and calls the implementation + +- **`ParamsHelper.h`** - Utilities for WASM parameter handling: + - `WASM_IMPORT_FUNC` / `WASM_IMPORT_FUNC2` macros for registration + - `wasmParams()` helper for building parameter vectors + - Type conversion between WASM and C++ types + +## Host Functions + +Host functions allow WASM code to interact with the XRP Ledger. They are +organized into categories: + +- **Ledger Information** - Access ledger sequence, timestamps, hashes, fees +- **Transaction & Ledger Object Access** - Read fields from the transaction + and ledger objects (including the current escrow object) +- **Keylet Construction** - Build keylets to look up various ledger object types +- **Cryptography** - Signature verification and hashing +- **Float Arithmetic** - Mathematical operations for amount calculations +- **NFT Operations** - Query NFT properties +- **Tracing/Debugging** - Log messages for debugging + +For the complete list of available host functions, their WASM names, and gas +costs, see the [XLS-0102 specification](https://xls.xrpl.org/xls/XLS-0102-wasm-vm.html) +or `detail/WasmVM.cpp` where they are registered via `WASM_IMPORT_FUNC2` macros. +For method signatures, see `HostFunc.h`. + +## Gas Model + +Each host function has an associated gas cost. The gas cost is specified when +registering the function in `detail/WasmVM.cpp`: + +```cpp +WASM_IMPORT_FUNC2(i, getLedgerSqn, "get_ledger_sqn", hfs, 60); +// ^^ gas cost +``` + +WASM execution is metered, and if the gas limit is exceeded, execution fails. + +## Entry Point + +The WASM module must export a function with the name defined by +`ESCROW_FUNCTION_NAME` (currently `"finish"`). This function: + +- Takes no parameters (or parameters passed via host function calls) +- Returns an `int32_t`: + - `1` (or positive): Escrow conditions are met, allow finish + - `0` (or negative): Escrow conditions are not met, reject finish + +## Adding a New Host Function + +To add a new host function, follow these steps: + +### 1. Add to HostFunc.h (Base Class) + +Add a virtual method declaration with a default implementation that returns an +error: + +```cpp +virtual Expected +myNewFunction(ParamType1 param1, ParamType2 param2) +{ + return Unexpected(HostFunctionError::INTERNAL); +} +``` + +### 2. Add to HostFuncImpl.h (Declaration) + +Add the method override declaration in `WasmHostFunctionsImpl`: + +```cpp +Expected +myNewFunction(ParamType1 param1, ParamType2 param2) override; +``` + +### 3. Implement in detail/HostFuncImpl\*.cpp + +Add the implementation in the appropriate file: + +```cpp +Expected +WasmHostFunctionsImpl::myNewFunction(ParamType1 param1, ParamType2 param2) +{ + // Implementation using ctx (ApplyContext) for ledger access + return result; +} +``` + +### 4. Add Wrapper to HostFuncWrapper.h + +Add the prototype and wrapper declaration: + +```cpp +using myNewFunction_proto = int32_t(uint8_t const*, int32_t, ...); +wasm_trap_t* +myNewFunction_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +``` + +### 5. Implement Wrapper in detail/HostFuncWrapper.cpp + +Implement the C-style wrapper that bridges WASM to C++: + +```cpp +wasm_trap_t* +myNewFunction_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +{ + // Extract parameters from params + // Call hfs->myNewFunction(...) + // Set results and return +} +``` + +### 6. Register in WasmVM.cpp + +Add the function registration in `setCommonHostFunctions()` or +`createWasmImport()`: + +```cpp +WASM_IMPORT_FUNC2(i, myNewFunction, "my_new_function", hfs, 100); +// ^^ WASM name ^^ gas cost +``` + +> [!IMPORTANT] +> New host functions MUST be amendment-gated in `WasmVM.cpp`. +> Wrap the registration in an amendment check to ensure the function is only +> available after the corresponding amendment is enabled on the network. From 77673663cad4ddca4a921df8a32d008fa7f37869 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 10 Feb 2026 17:42:41 -0500 Subject: [PATCH 079/137] fix cspell issues in tests (#6348) --- cspell.config.yaml | 3 + src/test/app/Wasm_test.cpp | 6 +- .../wasm_fixtures/codecov_tests/src/lib.rs | 56 +++++++++---------- src/test/app/wasm_fixtures/copyFixtures.py | 1 + 4 files changed, 35 insertions(+), 31 deletions(-) diff --git a/cspell.config.yaml b/cspell.config.yaml index a4f5e52cf8..d03eda58f9 100644 --- a/cspell.config.yaml +++ b/cspell.config.yaml @@ -6,6 +6,8 @@ ignorePaths: - docs/**/*.puml - cmake/** - LICENSE.md + - src/test/app/wasm_fixtures/**/*.wat + - src/test/app/wasm_fixtures/*.c language: en allowCompoundWords: true # TODO (#6334) ignoreRandomStrings: true @@ -59,6 +61,7 @@ words: - Britto - Btrfs - canonicality + - cdylib - changespq - checkme - choco diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index c4ca26250c..1802cd9d44 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -229,8 +229,8 @@ struct Wasm_test : public beast::unit_test::suite Bytes outb; outb.resize(1024); - auto const minsz = std::min(static_cast(512), static_cast(b58WasmHex.size())); - auto const s = std::string_view(b58WasmHex.c_str(), minsz); + auto const minSize = std::min(static_cast(512), static_cast(b58WasmHex.size())); + auto const s = std::string_view(b58WasmHex.c_str(), minSize); auto const re = engine.run(b58Wasm, "b58enco", wasmParams(outb, s)); @@ -802,7 +802,7 @@ struct Wasm_test : public beast::unit_test::suite std::shared_ptr hfs(new TestHostFunctions(env, 0)); auto imports = createWasmImport(*hfs); - { // Calls float_from_uint with bad aligment. + { // Calls float_from_uint with bad alignment. // Can be checked through codecov auto& engine = WasmEngine::instance(); diff --git a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs index 5e58d13ecd..59ff5bc164 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs +++ b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs @@ -564,13 +564,13 @@ pub extern "C" fn finish() -> i32 { "amm_keylet_len_wrong_non_xrp_currency_len", ) }); - let xrpissue: &[u8] = &[0; 40]; // 40 bytes + let xrp_issue: &[u8] = &[0; 40]; // 40 bytes with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { host::amm_keylet( - xrpissue.as_ptr(), - xrpissue.len(), + xrp_issue.as_ptr(), + xrp_issue.len(), asset1_bytes.as_ptr(), asset1_bytes.len(), ptr, @@ -1265,7 +1265,7 @@ pub extern "C" fn finish() -> i32 { check_result( unsafe { host::account_keylet(locator.as_ptr(), locator.len(), ptr, len) }, error_codes::INVALID_PARAMS, - "account_keylet_wrong_size_accountid", + "account_keylet_wrong_size_account_id", ) }); let seq: i32 = 1; @@ -1283,7 +1283,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "check_keylet_wrong_size_accountid", + "check_keylet_wrong_size_account_id", ) }); with_buffer::<2, _, _>(|ptr, len| { @@ -1301,7 +1301,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "credential_keylet_wrong_size_accountid1", + "credential_keylet_wrong_size_account_id1", ) }); with_buffer::<2, _, _>(|ptr, len| { @@ -1319,7 +1319,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "credential_keylet_wrong_size_accountid2", + "credential_keylet_wrong_size_account_id2", ) }); with_buffer::<2, _, _>(|ptr, len| { @@ -1335,7 +1335,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "delegate_keylet_wrong_size_accountid1", + "delegate_keylet_wrong_size_account_id1", ) }); with_buffer::<2, _, _>(|ptr, len| { @@ -1351,7 +1351,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "delegate_keylet_wrong_size_accountid2", + "delegate_keylet_wrong_size_account_id2", ) }); with_buffer::<2, _, _>(|ptr, len| { @@ -1367,7 +1367,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "deposit_preauth_keylet_wrong_size_accountid1", + "deposit_preauth_keylet_wrong_size_account_id1", ) }); with_buffer::<2, _, _>(|ptr, len| { @@ -1383,14 +1383,14 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "deposit_preauth_keylet_wrong_size_accountid2", + "deposit_preauth_keylet_wrong_size_account_id2", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { host::did_keylet(locator.as_ptr(), locator.len(), ptr, len) }, error_codes::INVALID_PARAMS, - "did_keylet_wrong_size_accountid", + "did_keylet_wrong_size_account_id", ) }); with_buffer::<2, _, _>(|ptr, len| { @@ -1406,7 +1406,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "escrow_keylet_wrong_size_accountid", + "escrow_keylet_wrong_size_account_id", ) }); with_buffer::<2, _, _>(|ptr, len| { @@ -1424,7 +1424,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "line_keylet_wrong_size_accountid1", + "line_keylet_wrong_size_account_id1", ) }); with_buffer::<2, _, _>(|ptr, len| { @@ -1442,7 +1442,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "line_keylet_wrong_size_accountid2", + "line_keylet_wrong_size_account_id2", ) }); with_buffer::<2, _, _>(|ptr, len| { @@ -1458,7 +1458,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "mpt_issuance_keylet_wrong_size_accountid", + "mpt_issuance_keylet_wrong_size_account_id", ) }); with_buffer::<2, _, _>(|ptr, len| { @@ -1474,7 +1474,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "mptoken_keylet_wrong_size_accountid", + "mptoken_keylet_wrong_size_account_id", ) }); with_buffer::<2, _, _>(|ptr, len| { @@ -1490,7 +1490,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "nft_offer_keylet_wrong_size_accountid", + "nft_offer_keylet_wrong_size_account_id", ) }); with_buffer::<2, _, _>(|ptr, len| { @@ -1506,7 +1506,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "offer_keylet_wrong_size_accountid", + "offer_keylet_wrong_size_account_id", ) }); with_buffer::<2, _, _>(|ptr, len| { @@ -1522,7 +1522,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "oracle_keylet_wrong_size_accountid", + "oracle_keylet_wrong_size_account_id", ) }); with_buffer::<2, _, _>(|ptr, len| { @@ -1540,7 +1540,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "paychan_keylet_wrong_size_accountid1", + "paychan_keylet_wrong_size_account_id1", ) }); with_buffer::<2, _, _>(|ptr, len| { @@ -1558,7 +1558,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "paychan_keylet_wrong_size_accountid2", + "paychan_keylet_wrong_size_account_id2", ) }); with_buffer::<2, _, _>(|ptr, len| { @@ -1574,14 +1574,14 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "permissioned_domain_keylet_wrong_size_accountid", + "permissioned_domain_keylet_wrong_size_account_id", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { host::signers_keylet(locator.as_ptr(), locator.len(), ptr, len) }, error_codes::INVALID_PARAMS, - "signers_keylet_wrong_size_accountid", + "signers_keylet_wrong_size_account_id", ) }); with_buffer::<2, _, _>(|ptr, len| { @@ -1597,7 +1597,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "ticket_keylet_wrong_size_accountid", + "ticket_keylet_wrong_size_account_id", ) }); with_buffer::<2, _, _>(|ptr, len| { @@ -1613,7 +1613,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "vault_keylet_wrong_size_accountid", + "vault_keylet_wrong_size_account_id", ) }); let uint256: &[u8] = b"00000000000000000000000000000001"; @@ -1630,7 +1630,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "get_nft_wrong_size_accountid", + "get_nft_wrong_size_account_id", ) }); check_result( @@ -1643,7 +1643,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "trace_account_wrong_size_accountid", + "trace_account_wrong_size_account_id", ); // invalid Currency was already tested above diff --git a/src/test/app/wasm_fixtures/copyFixtures.py b/src/test/app/wasm_fixtures/copyFixtures.py index 2c0abc560d..3d9faddbed 100644 --- a/src/test/app/wasm_fixtures/copyFixtures.py +++ b/src/test/app/wasm_fixtures/copyFixtures.py @@ -1,3 +1,4 @@ +# cspell: disable import os import sys import subprocess From 6728ab52b76a9e0baca57694422ce4c8d53e60c3 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Tue, 10 Feb 2026 18:10:33 -0500 Subject: [PATCH 080/137] Add tests for wasm functions with many parameters (#6343) * Add functions with many parameters * Add 10k locals function * Module with 5k functions * fix typo Co-authored-by: Mayukha Vadari --------- Co-authored-by: Mayukha Vadari --- src/test/app/Wasm_test.cpp | 50 + src/test/app/wasm_fixtures/fixtures.cpp | 3786 ++ src/test/app/wasm_fixtures/fixtures.h | 5 + src/test/app/wasm_fixtures/thousand1_params.c | 264 + src/test/app/wasm_fixtures/thousand_params.c | 262 + .../app/wasm_fixtures/wat/functions_5k.wat | 45002 ++++++++++++++ src/test/app/wasm_fixtures/wat/locals_10k.wat | 50000 ++++++++++++++++ 7 files changed, 99369 insertions(+) create mode 100644 src/test/app/wasm_fixtures/thousand1_params.c create mode 100644 src/test/app/wasm_fixtures/thousand_params.c create mode 100644 src/test/app/wasm_fixtures/wat/functions_5k.wat create mode 100644 src/test/app/wasm_fixtures/wat/locals_10k.wat diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 1802cd9d44..d781875cc6 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -923,6 +923,55 @@ struct Wasm_test : public beast::unit_test::suite BEAST_EXPECT(b6 == SWAP_DATAI16); } + void + testManyParams() + { + testcase("Wasm Many params"); + + auto const params1k = hexToBytes(thousandParamsHex); + auto const params1k1 = hexToBytes(thousand1ParamsHex); + + using namespace test::jtx; + + Env env{*this}; + std::shared_ptr hfs(new TestHostFunctions(env, 0)); + auto imports = createWasmImport(*hfs); + + // add 1k parameter (max that wasmi support) + std::vector params; + for (int i = 0; i < 1000; ++i) + params.push_back({.type = WT_I32, .of = {.i32 = 2 * i}}); + + auto& engine = WasmEngine::instance(); + { + auto re = engine.run(params1k, "test", params, imports, hfs, 1'000'000, env.journal); + BEAST_EXPECT(re && re->result == 999000); + } + + // add 1 more parameter, module can't be created now + params.push_back({.type = WT_I32, .of = {.i32 = 2 * 1000}}); + { + auto re = engine.run(params1k1, "test", params, imports, hfs, 1'000'000, env.journal); + BEAST_EXPECT(!re); + } + + // function that create 10k local variables + auto const locals10k = hexToBytes(locals10kHex); + { + auto re = engine.run(locals10k, "test", wasmParams(0, 1), imports, hfs, 1'000'000, env.journal); + BEAST_EXPECT(re && re->result == 890'489'442); + } + + // module has 5k functions + auto const functions5k = hexToBytes(functions5kHex); + { + auto re = engine.run(functions5k, "test0001", wasmParams(2, 3), imports, hfs, 1'000'000, env.journal); + BEAST_EXPECT(re && re->result == 5); + } + + env.close(); + } + void run() override { @@ -956,6 +1005,7 @@ struct Wasm_test : public beast::unit_test::suite testBadAlign(); testReturnType(); testSwapBytes(); + testManyParams(); // perfTest(); } diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 9df5201e9f..db77313a42 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -1318,3 +1318,3789 @@ extern std::string const badAlignWasmHex = "65637420616234623561326462353832393538616631656533303861373930636664623432626432343732302900490f7461726765745f6665" "617475726573042b0f6d757461626c652d676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c74" "6976616c7565"; + +extern std::string const thousandParamsHex = + "0061736d0100000001f1070260000060e8077f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f017f030302000105" + "030100020638097f004180080b7f004180080b7f004180080b7f00418088040b7f004180080b7f00418088040b7f00418080080b7f0041000b" + "7f0041010b07a8010c066d656d6f72790200115f5f7761736d5f63616c6c5f63746f72730000047465737400010c5f5f64736f5f68616e646c" + "6503000a5f5f646174615f656e6403010b5f5f737461636b5f6c6f7703020c5f5f737461636b5f6869676803030d5f5f676c6f62616c5f6261" + "736503040b5f5f686561705f6261736503050a5f5f686561705f656e6403060d5f5f6d656d6f72795f6261736503070c5f5f7461626c655f62" + "61736503080aa71e0202000ba11e00200020016a20026a20036a20046a20056a20066a20076a20086a20096a200a6a200b6a200c6a200d6a20" + "0e6a200f6a20106a20116a20126a20136a20146a20156a20166a20176a20186a20196a201a6a201b6a201c6a201d6a201e6a201f6a20206a20" + "216a20226a20236a20246a20256a20266a20276a20286a20296a202a6a202b6a202c6a202d6a202e6a202f6a20306a20316a20326a20336a20" + "346a20356a20366a20376a20386a20396a203a6a203b6a203c6a203d6a203e6a203f6a20406a20416a20426a20436a20446a20456a20466a20" + "476a20486a20496a204a6a204b6a204c6a204d6a204e6a204f6a20506a20516a20526a20536a20546a20556a20566a20576a20586a20596a20" + "5a6a205b6a205c6a205d6a205e6a205f6a20606a20616a20626a20636a20646a20656a20666a20676a20686a20696a206a6a206b6a206c6a20" + "6d6a206e6a206f6a20706a20716a20726a20736a20746a20756a20766a20776a20786a20796a207a6a207b6a207c6a207d6a207e6a207f6a20" + "80016a2081016a2082016a2083016a2084016a2085016a2086016a2087016a2088016a2089016a208a016a208b016a208c016a208d016a208e" + "016a208f016a2090016a2091016a2092016a2093016a2094016a2095016a2096016a2097016a2098016a2099016a209a016a209b016a209c01" + "6a209d016a209e016a209f016a20a0016a20a1016a20a2016a20a3016a20a4016a20a5016a20a6016a20a7016a20a8016a20a9016a20aa016a" + "20ab016a20ac016a20ad016a20ae016a20af016a20b0016a20b1016a20b2016a20b3016a20b4016a20b5016a20b6016a20b7016a20b8016a20" + "b9016a20ba016a20bb016a20bc016a20bd016a20be016a20bf016a20c0016a20c1016a20c2016a20c3016a20c4016a20c5016a20c6016a20c7" + "016a20c8016a20c9016a20ca016a20cb016a20cc016a20cd016a20ce016a20cf016a20d0016a20d1016a20d2016a20d3016a20d4016a20d501" + "6a20d6016a20d7016a20d8016a20d9016a20da016a20db016a20dc016a20dd016a20de016a20df016a20e0016a20e1016a20e2016a20e3016a" + "20e4016a20e5016a20e6016a20e7016a20e8016a20e9016a20ea016a20eb016a20ec016a20ed016a20ee016a20ef016a20f0016a20f1016a20" + "f2016a20f3016a20f4016a20f5016a20f6016a20f7016a20f8016a20f9016a20fa016a20fb016a20fc016a20fd016a20fe016a20ff016a2080" + "026a2081026a2082026a2083026a2084026a2085026a2086026a2087026a2088026a2089026a208a026a208b026a208c026a208d026a208e02" + "6a208f026a2090026a2091026a2092026a2093026a2094026a2095026a2096026a2097026a2098026a2099026a209a026a209b026a209c026a" + "209d026a209e026a209f026a20a0026a20a1026a20a2026a20a3026a20a4026a20a5026a20a6026a20a7026a20a8026a20a9026a20aa026a20" + "ab026a20ac026a20ad026a20ae026a20af026a20b0026a20b1026a20b2026a20b3026a20b4026a20b5026a20b6026a20b7026a20b8026a20b9" + "026a20ba026a20bb026a20bc026a20bd026a20be026a20bf026a20c0026a20c1026a20c2026a20c3026a20c4026a20c5026a20c6026a20c702" + "6a20c8026a20c9026a20ca026a20cb026a20cc026a20cd026a20ce026a20cf026a20d0026a20d1026a20d2026a20d3026a20d4026a20d5026a" + "20d6026a20d7026a20d8026a20d9026a20da026a20db026a20dc026a20dd026a20de026a20df026a20e0026a20e1026a20e2026a20e3026a20" + "e4026a20e5026a20e6026a20e7026a20e8026a20e9026a20ea026a20eb026a20ec026a20ed026a20ee026a20ef026a20f0026a20f1026a20f2" + "026a20f3026a20f4026a20f5026a20f6026a20f7026a20f8026a20f9026a20fa026a20fb026a20fc026a20fd026a20fe026a20ff026a208003" + "6a2081036a2082036a2083036a2084036a2085036a2086036a2087036a2088036a2089036a208a036a208b036a208c036a208d036a208e036a" + "208f036a2090036a2091036a2092036a2093036a2094036a2095036a2096036a2097036a2098036a2099036a209a036a209b036a209c036a20" + "9d036a209e036a209f036a20a0036a20a1036a20a2036a20a3036a20a4036a20a5036a20a6036a20a7036a20a8036a20a9036a20aa036a20ab" + "036a20ac036a20ad036a20ae036a20af036a20b0036a20b1036a20b2036a20b3036a20b4036a20b5036a20b6036a20b7036a20b8036a20b903" + "6a20ba036a20bb036a20bc036a20bd036a20be036a20bf036a20c0036a20c1036a20c2036a20c3036a20c4036a20c5036a20c6036a20c7036a" + "20c8036a20c9036a20ca036a20cb036a20cc036a20cd036a20ce036a20cf036a20d0036a20d1036a20d2036a20d3036a20d4036a20d5036a20" + "d6036a20d7036a20d8036a20d9036a20da036a20db036a20dc036a20dd036a20de036a20df036a20e0036a20e1036a20e2036a20e3036a20e4" + "036a20e5036a20e6036a20e7036a20e8036a20e9036a20ea036a20eb036a20ec036a20ed036a20ee036a20ef036a20f0036a20f1036a20f203" + "6a20f3036a20f4036a20f5036a20f6036a20f7036a20f8036a20f9036a20fa036a20fb036a20fc036a20fd036a20fe036a20ff036a2080046a" + "2081046a2082046a2083046a2084046a2085046a2086046a2087046a2088046a2089046a208a046a208b046a208c046a208d046a208e046a20" + "8f046a2090046a2091046a2092046a2093046a2094046a2095046a2096046a2097046a2098046a2099046a209a046a209b046a209c046a209d" + "046a209e046a209f046a20a0046a20a1046a20a2046a20a3046a20a4046a20a5046a20a6046a20a7046a20a8046a20a9046a20aa046a20ab04" + "6a20ac046a20ad046a20ae046a20af046a20b0046a20b1046a20b2046a20b3046a20b4046a20b5046a20b6046a20b7046a20b8046a20b9046a" + "20ba046a20bb046a20bc046a20bd046a20be046a20bf046a20c0046a20c1046a20c2046a20c3046a20c4046a20c5046a20c6046a20c7046a20" + "c8046a20c9046a20ca046a20cb046a20cc046a20cd046a20ce046a20cf046a20d0046a20d1046a20d2046a20d3046a20d4046a20d5046a20d6" + "046a20d7046a20d8046a20d9046a20da046a20db046a20dc046a20dd046a20de046a20df046a20e0046a20e1046a20e2046a20e3046a20e404" + "6a20e5046a20e6046a20e7046a20e8046a20e9046a20ea046a20eb046a20ec046a20ed046a20ee046a20ef046a20f0046a20f1046a20f2046a" + "20f3046a20f4046a20f5046a20f6046a20f7046a20f8046a20f9046a20fa046a20fb046a20fc046a20fd046a20fe046a20ff046a2080056a20" + "81056a2082056a2083056a2084056a2085056a2086056a2087056a2088056a2089056a208a056a208b056a208c056a208d056a208e056a208f" + "056a2090056a2091056a2092056a2093056a2094056a2095056a2096056a2097056a2098056a2099056a209a056a209b056a209c056a209d05" + "6a209e056a209f056a20a0056a20a1056a20a2056a20a3056a20a4056a20a5056a20a6056a20a7056a20a8056a20a9056a20aa056a20ab056a" + "20ac056a20ad056a20ae056a20af056a20b0056a20b1056a20b2056a20b3056a20b4056a20b5056a20b6056a20b7056a20b8056a20b9056a20" + "ba056a20bb056a20bc056a20bd056a20be056a20bf056a20c0056a20c1056a20c2056a20c3056a20c4056a20c5056a20c6056a20c7056a20c8" + "056a20c9056a20ca056a20cb056a20cc056a20cd056a20ce056a20cf056a20d0056a20d1056a20d2056a20d3056a20d4056a20d5056a20d605" + "6a20d7056a20d8056a20d9056a20da056a20db056a20dc056a20dd056a20de056a20df056a20e0056a20e1056a20e2056a20e3056a20e4056a" + "20e5056a20e6056a20e7056a20e8056a20e9056a20ea056a20eb056a20ec056a20ed056a20ee056a20ef056a20f0056a20f1056a20f2056a20" + "f3056a20f4056a20f5056a20f6056a20f7056a20f8056a20f9056a20fa056a20fb056a20fc056a20fd056a20fe056a20ff056a2080066a2081" + "066a2082066a2083066a2084066a2085066a2086066a2087066a2088066a2089066a208a066a208b066a208c066a208d066a208e066a208f06" + "6a2090066a2091066a2092066a2093066a2094066a2095066a2096066a2097066a2098066a2099066a209a066a209b066a209c066a209d066a" + "209e066a209f066a20a0066a20a1066a20a2066a20a3066a20a4066a20a5066a20a6066a20a7066a20a8066a20a9066a20aa066a20ab066a20" + "ac066a20ad066a20ae066a20af066a20b0066a20b1066a20b2066a20b3066a20b4066a20b5066a20b6066a20b7066a20b8066a20b9066a20ba" + "066a20bb066a20bc066a20bd066a20be066a20bf066a20c0066a20c1066a20c2066a20c3066a20c4066a20c5066a20c6066a20c7066a20c806" + "6a20c9066a20ca066a20cb066a20cc066a20cd066a20ce066a20cf066a20d0066a20d1066a20d2066a20d3066a20d4066a20d5066a20d6066a" + "20d7066a20d8066a20d9066a20da066a20db066a20dc066a20dd066a20de066a20df066a20e0066a20e1066a20e2066a20e3066a20e4066a20" + "e5066a20e6066a20e7066a20e8066a20e9066a20ea066a20eb066a20ec066a20ed066a20ee066a20ef066a20f0066a20f1066a20f2066a20f3" + "066a20f4066a20f5066a20f6066a20f7066a20f8066a20f9066a20fa066a20fb066a20fc066a20fd066a20fe066a20ff066a2080076a208107" + "6a2082076a2083076a2084076a2085076a2086076a2087076a2088076a2089076a208a076a208b076a208c076a208d076a208e076a208f076a" + "2090076a2091076a2092076a2093076a2094076a2095076a2096076a2097076a2098076a2099076a209a076a209b076a209c076a209d076a20" + "9e076a209f076a20a0076a20a1076a20a2076a20a3076a20a4076a20a5076a20a6076a20a7076a20a8076a20a9076a20aa076a20ab076a20ac" + "076a20ad076a20ae076a20af076a20b0076a20b1076a20b2076a20b3076a20b4076a20b5076a20b6076a20b7076a20b8076a20b9076a20ba07" + "6a20bb076a20bc076a20bd076a20be076a20bf076a20c0076a20c1076a20c2076a20c3076a20c4076a20c5076a20c6076a20c7076a20c8076a" + "20c9076a20ca076a20cb076a20cc076a20cd076a20ce076a20cf076a20d0076a20d1076a20d2076a20d3076a20d4076a20d5076a20d6076a20" + "d7076a20d8076a20d9076a20da076a20db076a20dc076a20dd076a20de076a20df076a20e0076a20e1076a20e2076a20e3076a20e4076a20e5" + "076a20e6076a20e7076a0b007f0970726f647563657273010c70726f6365737365642d62790105636c616e675f31392e312e352d776173692d" + "73646b202868747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a65637420616234623561326462353832393538" + "616631656533303861373930636664623432626432343732302900490f7461726765745f6665617475726573042b0f6d757461626c652d676c" + "6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; + +extern std::string const thousand1ParamsHex = + "0061736d0100000001f2070260000060e9077f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f017f0303020001" + "05030100020638097f004180080b7f004180080b7f004180080b7f00418088040b7f004180080b7f00418088040b7f00418080080b7f004100" + "0b7f0041010b07a8010c066d656d6f72790200115f5f7761736d5f63616c6c5f63746f72730000047465737400010c5f5f64736f5f68616e64" + "6c6503000a5f5f646174615f656e6403010b5f5f737461636b5f6c6f7703020c5f5f737461636b5f6869676803030d5f5f676c6f62616c5f62" + "61736503040b5f5f686561705f6261736503050a5f5f686561705f656e6403060d5f5f6d656d6f72795f6261736503070c5f5f7461626c655f" + "6261736503080aab1e0202000ba51e00200020016a20026a20036a20046a20056a20066a20076a20086a20096a200a6a200b6a200c6a200d6a" + "200e6a200f6a20106a20116a20126a20136a20146a20156a20166a20176a20186a20196a201a6a201b6a201c6a201d6a201e6a201f6a20206a" + "20216a20226a20236a20246a20256a20266a20276a20286a20296a202a6a202b6a202c6a202d6a202e6a202f6a20306a20316a20326a20336a" + "20346a20356a20366a20376a20386a20396a203a6a203b6a203c6a203d6a203e6a203f6a20406a20416a20426a20436a20446a20456a20466a" + "20476a20486a20496a204a6a204b6a204c6a204d6a204e6a204f6a20506a20516a20526a20536a20546a20556a20566a20576a20586a20596a" + "205a6a205b6a205c6a205d6a205e6a205f6a20606a20616a20626a20636a20646a20656a20666a20676a20686a20696a206a6a206b6a206c6a" + "206d6a206e6a206f6a20706a20716a20726a20736a20746a20756a20766a20776a20786a20796a207a6a207b6a207c6a207d6a207e6a207f6a" + "2080016a2081016a2082016a2083016a2084016a2085016a2086016a2087016a2088016a2089016a208a016a208b016a208c016a208d016a20" + "8e016a208f016a2090016a2091016a2092016a2093016a2094016a2095016a2096016a2097016a2098016a2099016a209a016a209b016a209c" + "016a209d016a209e016a209f016a20a0016a20a1016a20a2016a20a3016a20a4016a20a5016a20a6016a20a7016a20a8016a20a9016a20aa01" + "6a20ab016a20ac016a20ad016a20ae016a20af016a20b0016a20b1016a20b2016a20b3016a20b4016a20b5016a20b6016a20b7016a20b8016a" + "20b9016a20ba016a20bb016a20bc016a20bd016a20be016a20bf016a20c0016a20c1016a20c2016a20c3016a20c4016a20c5016a20c6016a20" + "c7016a20c8016a20c9016a20ca016a20cb016a20cc016a20cd016a20ce016a20cf016a20d0016a20d1016a20d2016a20d3016a20d4016a20d5" + "016a20d6016a20d7016a20d8016a20d9016a20da016a20db016a20dc016a20dd016a20de016a20df016a20e0016a20e1016a20e2016a20e301" + "6a20e4016a20e5016a20e6016a20e7016a20e8016a20e9016a20ea016a20eb016a20ec016a20ed016a20ee016a20ef016a20f0016a20f1016a" + "20f2016a20f3016a20f4016a20f5016a20f6016a20f7016a20f8016a20f9016a20fa016a20fb016a20fc016a20fd016a20fe016a20ff016a20" + "80026a2081026a2082026a2083026a2084026a2085026a2086026a2087026a2088026a2089026a208a026a208b026a208c026a208d026a208e" + "026a208f026a2090026a2091026a2092026a2093026a2094026a2095026a2096026a2097026a2098026a2099026a209a026a209b026a209c02" + "6a209d026a209e026a209f026a20a0026a20a1026a20a2026a20a3026a20a4026a20a5026a20a6026a20a7026a20a8026a20a9026a20aa026a" + "20ab026a20ac026a20ad026a20ae026a20af026a20b0026a20b1026a20b2026a20b3026a20b4026a20b5026a20b6026a20b7026a20b8026a20" + "b9026a20ba026a20bb026a20bc026a20bd026a20be026a20bf026a20c0026a20c1026a20c2026a20c3026a20c4026a20c5026a20c6026a20c7" + "026a20c8026a20c9026a20ca026a20cb026a20cc026a20cd026a20ce026a20cf026a20d0026a20d1026a20d2026a20d3026a20d4026a20d502" + "6a20d6026a20d7026a20d8026a20d9026a20da026a20db026a20dc026a20dd026a20de026a20df026a20e0026a20e1026a20e2026a20e3026a" + "20e4026a20e5026a20e6026a20e7026a20e8026a20e9026a20ea026a20eb026a20ec026a20ed026a20ee026a20ef026a20f0026a20f1026a20" + "f2026a20f3026a20f4026a20f5026a20f6026a20f7026a20f8026a20f9026a20fa026a20fb026a20fc026a20fd026a20fe026a20ff026a2080" + "036a2081036a2082036a2083036a2084036a2085036a2086036a2087036a2088036a2089036a208a036a208b036a208c036a208d036a208e03" + "6a208f036a2090036a2091036a2092036a2093036a2094036a2095036a2096036a2097036a2098036a2099036a209a036a209b036a209c036a" + "209d036a209e036a209f036a20a0036a20a1036a20a2036a20a3036a20a4036a20a5036a20a6036a20a7036a20a8036a20a9036a20aa036a20" + "ab036a20ac036a20ad036a20ae036a20af036a20b0036a20b1036a20b2036a20b3036a20b4036a20b5036a20b6036a20b7036a20b8036a20b9" + "036a20ba036a20bb036a20bc036a20bd036a20be036a20bf036a20c0036a20c1036a20c2036a20c3036a20c4036a20c5036a20c6036a20c703" + "6a20c8036a20c9036a20ca036a20cb036a20cc036a20cd036a20ce036a20cf036a20d0036a20d1036a20d2036a20d3036a20d4036a20d5036a" + "20d6036a20d7036a20d8036a20d9036a20da036a20db036a20dc036a20dd036a20de036a20df036a20e0036a20e1036a20e2036a20e3036a20" + "e4036a20e5036a20e6036a20e7036a20e8036a20e9036a20ea036a20eb036a20ec036a20ed036a20ee036a20ef036a20f0036a20f1036a20f2" + "036a20f3036a20f4036a20f5036a20f6036a20f7036a20f8036a20f9036a20fa036a20fb036a20fc036a20fd036a20fe036a20ff036a208004" + "6a2081046a2082046a2083046a2084046a2085046a2086046a2087046a2088046a2089046a208a046a208b046a208c046a208d046a208e046a" + "208f046a2090046a2091046a2092046a2093046a2094046a2095046a2096046a2097046a2098046a2099046a209a046a209b046a209c046a20" + "9d046a209e046a209f046a20a0046a20a1046a20a2046a20a3046a20a4046a20a5046a20a6046a20a7046a20a8046a20a9046a20aa046a20ab" + "046a20ac046a20ad046a20ae046a20af046a20b0046a20b1046a20b2046a20b3046a20b4046a20b5046a20b6046a20b7046a20b8046a20b904" + "6a20ba046a20bb046a20bc046a20bd046a20be046a20bf046a20c0046a20c1046a20c2046a20c3046a20c4046a20c5046a20c6046a20c7046a" + "20c8046a20c9046a20ca046a20cb046a20cc046a20cd046a20ce046a20cf046a20d0046a20d1046a20d2046a20d3046a20d4046a20d5046a20" + "d6046a20d7046a20d8046a20d9046a20da046a20db046a20dc046a20dd046a20de046a20df046a20e0046a20e1046a20e2046a20e3046a20e4" + "046a20e5046a20e6046a20e7046a20e8046a20e9046a20ea046a20eb046a20ec046a20ed046a20ee046a20ef046a20f0046a20f1046a20f204" + "6a20f3046a20f4046a20f5046a20f6046a20f7046a20f8046a20f9046a20fa046a20fb046a20fc046a20fd046a20fe046a20ff046a2080056a" + "2081056a2082056a2083056a2084056a2085056a2086056a2087056a2088056a2089056a208a056a208b056a208c056a208d056a208e056a20" + "8f056a2090056a2091056a2092056a2093056a2094056a2095056a2096056a2097056a2098056a2099056a209a056a209b056a209c056a209d" + "056a209e056a209f056a20a0056a20a1056a20a2056a20a3056a20a4056a20a5056a20a6056a20a7056a20a8056a20a9056a20aa056a20ab05" + "6a20ac056a20ad056a20ae056a20af056a20b0056a20b1056a20b2056a20b3056a20b4056a20b5056a20b6056a20b7056a20b8056a20b9056a" + "20ba056a20bb056a20bc056a20bd056a20be056a20bf056a20c0056a20c1056a20c2056a20c3056a20c4056a20c5056a20c6056a20c7056a20" + "c8056a20c9056a20ca056a20cb056a20cc056a20cd056a20ce056a20cf056a20d0056a20d1056a20d2056a20d3056a20d4056a20d5056a20d6" + "056a20d7056a20d8056a20d9056a20da056a20db056a20dc056a20dd056a20de056a20df056a20e0056a20e1056a20e2056a20e3056a20e405" + "6a20e5056a20e6056a20e7056a20e8056a20e9056a20ea056a20eb056a20ec056a20ed056a20ee056a20ef056a20f0056a20f1056a20f2056a" + "20f3056a20f4056a20f5056a20f6056a20f7056a20f8056a20f9056a20fa056a20fb056a20fc056a20fd056a20fe056a20ff056a2080066a20" + "81066a2082066a2083066a2084066a2085066a2086066a2087066a2088066a2089066a208a066a208b066a208c066a208d066a208e066a208f" + "066a2090066a2091066a2092066a2093066a2094066a2095066a2096066a2097066a2098066a2099066a209a066a209b066a209c066a209d06" + "6a209e066a209f066a20a0066a20a1066a20a2066a20a3066a20a4066a20a5066a20a6066a20a7066a20a8066a20a9066a20aa066a20ab066a" + "20ac066a20ad066a20ae066a20af066a20b0066a20b1066a20b2066a20b3066a20b4066a20b5066a20b6066a20b7066a20b8066a20b9066a20" + "ba066a20bb066a20bc066a20bd066a20be066a20bf066a20c0066a20c1066a20c2066a20c3066a20c4066a20c5066a20c6066a20c7066a20c8" + "066a20c9066a20ca066a20cb066a20cc066a20cd066a20ce066a20cf066a20d0066a20d1066a20d2066a20d3066a20d4066a20d5066a20d606" + "6a20d7066a20d8066a20d9066a20da066a20db066a20dc066a20dd066a20de066a20df066a20e0066a20e1066a20e2066a20e3066a20e4066a" + "20e5066a20e6066a20e7066a20e8066a20e9066a20ea066a20eb066a20ec066a20ed066a20ee066a20ef066a20f0066a20f1066a20f2066a20" + "f3066a20f4066a20f5066a20f6066a20f7066a20f8066a20f9066a20fa066a20fb066a20fc066a20fd066a20fe066a20ff066a2080076a2081" + "076a2082076a2083076a2084076a2085076a2086076a2087076a2088076a2089076a208a076a208b076a208c076a208d076a208e076a208f07" + "6a2090076a2091076a2092076a2093076a2094076a2095076a2096076a2097076a2098076a2099076a209a076a209b076a209c076a209d076a" + "209e076a209f076a20a0076a20a1076a20a2076a20a3076a20a4076a20a5076a20a6076a20a7076a20a8076a20a9076a20aa076a20ab076a20" + "ac076a20ad076a20ae076a20af076a20b0076a20b1076a20b2076a20b3076a20b4076a20b5076a20b6076a20b7076a20b8076a20b9076a20ba" + "076a20bb076a20bc076a20bd076a20be076a20bf076a20c0076a20c1076a20c2076a20c3076a20c4076a20c5076a20c6076a20c7076a20c807" + "6a20c9076a20ca076a20cb076a20cc076a20cd076a20ce076a20cf076a20d0076a20d1076a20d2076a20d3076a20d4076a20d5076a20d6076a" + "20d7076a20d8076a20d9076a20da076a20db076a20dc076a20dd076a20de076a20df076a20e0076a20e1076a20e2076a20e3076a20e4076a20" + "e5076a20e6076a20e7076a20e8076a0b007f0970726f647563657273010c70726f6365737365642d62790105636c616e675f31392e312e352d" + "776173692d73646b202868747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a6563742061623462356132646235" + "3832393538616631656533303861373930636664623432626432343732302900490f7461726765745f6665617475726573042b0f6d75746162" + "6c652d676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; + +extern std::string const locals10kHex = + "0061736d0100000001070160027f7f017f03020100070801047465737400000a9b8a0601978a06018e4e7f200020016a2102200120026a2103" + "200220036a2104200320046a2105200420056a2106200520066a2107200620076a2108200720086a2109200820096a210a2009200a6a210b20" + "0a200b6a210c200b200c6a210d200c200d6a210e200d200e6a210f200e200f6a2110200f20106a2111201020116a2112201120126a21132012" + "20136a2114201320146a2115201420156a2116201520166a2117201620176a2118201720186a2119201820196a211a2019201a6a211b201a20" + "1b6a211c201b201c6a211d201c201d6a211e201d201e6a211f201e201f6a2120201f20206a2121202020216a2122202120226a212320222023" + "6a2124202320246a2125202420256a2126202520266a2127202620276a2128202720286a2129202820296a212a2029202a6a212b202a202b6a" + "212c202b202c6a212d202c202d6a212e202d202e6a212f202e202f6a2130202f20306a2131203020316a2132203120326a2133203220336a21" + "34203320346a2135203420356a2136203520366a2137203620376a2138203720386a2139203820396a213a2039203a6a213b203a203b6a213c" + "203b203c6a213d203c203d6a213e203d203e6a213f203e203f6a2140203f20406a2141204020416a2142204120426a2143204220436a214420" + "4320446a2145204420456a2146204520466a2147204620476a2148204720486a2149204820496a214a2049204a6a214b204a204b6a214c204b" + "204c6a214d204c204d6a214e204d204e6a214f204e204f6a2150204f20506a2151205020516a2152205120526a2153205220536a2154205320" + "546a2155205420556a2156205520566a2157205620576a2158205720586a2159205820596a215a2059205a6a215b205a205b6a215c205b205c" + "6a215d205c205d6a215e205d205e6a215f205e205f6a2160205f20606a2161206020616a2162206120626a2163206220636a2164206320646a" + "2165206420656a2166206520666a2167206620676a2168206720686a2169206820696a216a2069206a6a216b206a206b6a216c206b206c6a21" + "6d206c206d6a216e206d206e6a216f206e206f6a2170206f20706a2171207020716a2172207120726a2173207220736a2174207320746a2175" + "207420756a2176207520766a2177207620776a2178207720786a2179207820796a217a2079207a6a217b207a207b6a217c207b207c6a217d20" + "7c207d6a217e207d207e6a217f207e207f6a218001207f2080016a2181012080012081016a2182012081012082016a2183012082012083016a" + "2184012083012084016a2185012084012085016a2186012085012086016a2187012086012087016a2188012087012088016a21890120880120" + "89016a218a01208901208a016a218b01208a01208b016a218c01208b01208c016a218d01208c01208d016a218e01208d01208e016a218f0120" + "8e01208f016a219001208f012090016a2191012090012091016a2192012091012092016a2193012092012093016a2194012093012094016a21" + "95012094012095016a2196012095012096016a2197012096012097016a2198012097012098016a2199012098012099016a219a01209901209a" + "016a219b01209a01209b016a219c01209b01209c016a219d01209c01209d016a219e01209d01209e016a219f01209e01209f016a21a001209f" + "0120a0016a21a10120a00120a1016a21a20120a10120a2016a21a30120a20120a3016a21a40120a30120a4016a21a50120a40120a5016a21a6" + "0120a50120a6016a21a70120a60120a7016a21a80120a70120a8016a21a90120a80120a9016a21aa0120a90120aa016a21ab0120aa0120ab01" + "6a21ac0120ab0120ac016a21ad0120ac0120ad016a21ae0120ad0120ae016a21af0120ae0120af016a21b00120af0120b0016a21b10120b001" + "20b1016a21b20120b10120b2016a21b30120b20120b3016a21b40120b30120b4016a21b50120b40120b5016a21b60120b50120b6016a21b701" + "20b60120b7016a21b80120b70120b8016a21b90120b80120b9016a21ba0120b90120ba016a21bb0120ba0120bb016a21bc0120bb0120bc016a" + "21bd0120bc0120bd016a21be0120bd0120be016a21bf0120be0120bf016a21c00120bf0120c0016a21c10120c00120c1016a21c20120c10120" + "c2016a21c30120c20120c3016a21c40120c30120c4016a21c50120c40120c5016a21c60120c50120c6016a21c70120c60120c7016a21c80120" + "c70120c8016a21c90120c80120c9016a21ca0120c90120ca016a21cb0120ca0120cb016a21cc0120cb0120cc016a21cd0120cc0120cd016a21" + "ce0120cd0120ce016a21cf0120ce0120cf016a21d00120cf0120d0016a21d10120d00120d1016a21d20120d10120d2016a21d30120d20120d3" + "016a21d40120d30120d4016a21d50120d40120d5016a21d60120d50120d6016a21d70120d60120d7016a21d80120d70120d8016a21d90120d8" + "0120d9016a21da0120d90120da016a21db0120da0120db016a21dc0120db0120dc016a21dd0120dc0120dd016a21de0120dd0120de016a21df" + "0120de0120df016a21e00120df0120e0016a21e10120e00120e1016a21e20120e10120e2016a21e30120e20120e3016a21e40120e30120e401" + "6a21e50120e40120e5016a21e60120e50120e6016a21e70120e60120e7016a21e80120e70120e8016a21e90120e80120e9016a21ea0120e901" + "20ea016a21eb0120ea0120eb016a21ec0120eb0120ec016a21ed0120ec0120ed016a21ee0120ed0120ee016a21ef0120ee0120ef016a21f001" + "20ef0120f0016a21f10120f00120f1016a21f20120f10120f2016a21f30120f20120f3016a21f40120f30120f4016a21f50120f40120f5016a" + "21f60120f50120f6016a21f70120f60120f7016a21f80120f70120f8016a21f90120f80120f9016a21fa0120f90120fa016a21fb0120fa0120" + "fb016a21fc0120fb0120fc016a21fd0120fc0120fd016a21fe0120fd0120fe016a21ff0120fe0120ff016a21800220ff012080026a21810220" + "80022081026a2182022081022082026a2183022082022083026a2184022083022084026a2185022084022085026a2186022085022086026a21" + "87022086022087026a2188022087022088026a2189022088022089026a218a02208902208a026a218b02208a02208b026a218c02208b02208c" + "026a218d02208c02208d026a218e02208d02208e026a218f02208e02208f026a219002208f022090026a2191022090022091026a2192022091" + "022092026a2193022092022093026a2194022093022094026a2195022094022095026a2196022095022096026a2197022096022097026a2198" + "022097022098026a2199022098022099026a219a02209902209a026a219b02209a02209b026a219c02209b02209c026a219d02209c02209d02" + "6a219e02209d02209e026a219f02209e02209f026a21a002209f0220a0026a21a10220a00220a1026a21a20220a10220a2026a21a30220a202" + "20a3026a21a40220a30220a4026a21a50220a40220a5026a21a60220a50220a6026a21a70220a60220a7026a21a80220a70220a8026a21a902" + "20a80220a9026a21aa0220a90220aa026a21ab0220aa0220ab026a21ac0220ab0220ac026a21ad0220ac0220ad026a21ae0220ad0220ae026a" + "21af0220ae0220af026a21b00220af0220b0026a21b10220b00220b1026a21b20220b10220b2026a21b30220b20220b3026a21b40220b30220" + "b4026a21b50220b40220b5026a21b60220b50220b6026a21b70220b60220b7026a21b80220b70220b8026a21b90220b80220b9026a21ba0220" + "b90220ba026a21bb0220ba0220bb026a21bc0220bb0220bc026a21bd0220bc0220bd026a21be0220bd0220be026a21bf0220be0220bf026a21" + "c00220bf0220c0026a21c10220c00220c1026a21c20220c10220c2026a21c30220c20220c3026a21c40220c30220c4026a21c50220c40220c5" + "026a21c60220c50220c6026a21c70220c60220c7026a21c80220c70220c8026a21c90220c80220c9026a21ca0220c90220ca026a21cb0220ca" + "0220cb026a21cc0220cb0220cc026a21cd0220cc0220cd026a21ce0220cd0220ce026a21cf0220ce0220cf026a21d00220cf0220d0026a21d1" + "0220d00220d1026a21d20220d10220d2026a21d30220d20220d3026a21d40220d30220d4026a21d50220d40220d5026a21d60220d50220d602" + "6a21d70220d60220d7026a21d80220d70220d8026a21d90220d80220d9026a21da0220d90220da026a21db0220da0220db026a21dc0220db02" + "20dc026a21dd0220dc0220dd026a21de0220dd0220de026a21df0220de0220df026a21e00220df0220e0026a21e10220e00220e1026a21e202" + "20e10220e2026a21e30220e20220e3026a21e40220e30220e4026a21e50220e40220e5026a21e60220e50220e6026a21e70220e60220e7026a" + "21e80220e70220e8026a21e90220e80220e9026a21ea0220e90220ea026a21eb0220ea0220eb026a21ec0220eb0220ec026a21ed0220ec0220" + "ed026a21ee0220ed0220ee026a21ef0220ee0220ef026a21f00220ef0220f0026a21f10220f00220f1026a21f20220f10220f2026a21f30220" + "f20220f3026a21f40220f30220f4026a21f50220f40220f5026a21f60220f50220f6026a21f70220f60220f7026a21f80220f70220f8026a21" + "f90220f80220f9026a21fa0220f90220fa026a21fb0220fa0220fb026a21fc0220fb0220fc026a21fd0220fc0220fd026a21fe0220fd0220fe" + "026a21ff0220fe0220ff026a21800320ff022080036a2181032080032081036a2182032081032082036a2183032082032083036a2184032083" + "032084036a2185032084032085036a2186032085032086036a2187032086032087036a2188032087032088036a2189032088032089036a218a" + "03208903208a036a218b03208a03208b036a218c03208b03208c036a218d03208c03208d036a218e03208d03208e036a218f03208e03208f03" + "6a219003208f032090036a2191032090032091036a2192032091032092036a2193032092032093036a2194032093032094036a219503209403" + "2095036a2196032095032096036a2197032096032097036a2198032097032098036a2199032098032099036a219a03209903209a036a219b03" + "209a03209b036a219c03209b03209c036a219d03209c03209d036a219e03209d03209e036a219f03209e03209f036a21a003209f0320a0036a" + "21a10320a00320a1036a21a20320a10320a2036a21a30320a20320a3036a21a40320a30320a4036a21a50320a40320a5036a21a60320a50320" + "a6036a21a70320a60320a7036a21a80320a70320a8036a21a90320a80320a9036a21aa0320a90320aa036a21ab0320aa0320ab036a21ac0320" + "ab0320ac036a21ad0320ac0320ad036a21ae0320ad0320ae036a21af0320ae0320af036a21b00320af0320b0036a21b10320b00320b1036a21" + "b20320b10320b2036a21b30320b20320b3036a21b40320b30320b4036a21b50320b40320b5036a21b60320b50320b6036a21b70320b60320b7" + "036a21b80320b70320b8036a21b90320b80320b9036a21ba0320b90320ba036a21bb0320ba0320bb036a21bc0320bb0320bc036a21bd0320bc" + "0320bd036a21be0320bd0320be036a21bf0320be0320bf036a21c00320bf0320c0036a21c10320c00320c1036a21c20320c10320c2036a21c3" + "0320c20320c3036a21c40320c30320c4036a21c50320c40320c5036a21c60320c50320c6036a21c70320c60320c7036a21c80320c70320c803" + "6a21c90320c80320c9036a21ca0320c90320ca036a21cb0320ca0320cb036a21cc0320cb0320cc036a21cd0320cc0320cd036a21ce0320cd03" + "20ce036a21cf0320ce0320cf036a21d00320cf0320d0036a21d10320d00320d1036a21d20320d10320d2036a21d30320d20320d3036a21d403" + "20d30320d4036a21d50320d40320d5036a21d60320d50320d6036a21d70320d60320d7036a21d80320d70320d8036a21d90320d80320d9036a" + "21da0320d90320da036a21db0320da0320db036a21dc0320db0320dc036a21dd0320dc0320dd036a21de0320dd0320de036a21df0320de0320" + "df036a21e00320df0320e0036a21e10320e00320e1036a21e20320e10320e2036a21e30320e20320e3036a21e40320e30320e4036a21e50320" + "e40320e5036a21e60320e50320e6036a21e70320e60320e7036a21e80320e70320e8036a21e90320e80320e9036a21ea0320e90320ea036a21" + "eb0320ea0320eb036a21ec0320eb0320ec036a21ed0320ec0320ed036a21ee0320ed0320ee036a21ef0320ee0320ef036a21f00320ef0320f0" + "036a21f10320f00320f1036a21f20320f10320f2036a21f30320f20320f3036a21f40320f30320f4036a21f50320f40320f5036a21f60320f5" + "0320f6036a21f70320f60320f7036a21f80320f70320f8036a21f90320f80320f9036a21fa0320f90320fa036a21fb0320fa0320fb036a21fc" + "0320fb0320fc036a21fd0320fc0320fd036a21fe0320fd0320fe036a21ff0320fe0320ff036a21800420ff032080046a218104208004208104" + "6a2182042081042082046a2183042082042083046a2184042083042084046a2185042084042085046a2186042085042086046a218704208604" + "2087046a2188042087042088046a2189042088042089046a218a04208904208a046a218b04208a04208b046a218c04208b04208c046a218d04" + "208c04208d046a218e04208d04208e046a218f04208e04208f046a219004208f042090046a2191042090042091046a2192042091042092046a" + "2193042092042093046a2194042093042094046a2195042094042095046a2196042095042096046a2197042096042097046a21980420970420" + "98046a2199042098042099046a219a04209904209a046a219b04209a04209b046a219c04209b04209c046a219d04209c04209d046a219e0420" + "9d04209e046a219f04209e04209f046a21a004209f0420a0046a21a10420a00420a1046a21a20420a10420a2046a21a30420a20420a3046a21" + "a40420a30420a4046a21a50420a40420a5046a21a60420a50420a6046a21a70420a60420a7046a21a80420a70420a8046a21a90420a80420a9" + "046a21aa0420a90420aa046a21ab0420aa0420ab046a21ac0420ab0420ac046a21ad0420ac0420ad046a21ae0420ad0420ae046a21af0420ae" + "0420af046a21b00420af0420b0046a21b10420b00420b1046a21b20420b10420b2046a21b30420b20420b3046a21b40420b30420b4046a21b5" + "0420b40420b5046a21b60420b50420b6046a21b70420b60420b7046a21b80420b70420b8046a21b90420b80420b9046a21ba0420b90420ba04" + "6a21bb0420ba0420bb046a21bc0420bb0420bc046a21bd0420bc0420bd046a21be0420bd0420be046a21bf0420be0420bf046a21c00420bf04" + "20c0046a21c10420c00420c1046a21c20420c10420c2046a21c30420c20420c3046a21c40420c30420c4046a21c50420c40420c5046a21c604" + "20c50420c6046a21c70420c60420c7046a21c80420c70420c8046a21c90420c80420c9046a21ca0420c90420ca046a21cb0420ca0420cb046a" + "21cc0420cb0420cc046a21cd0420cc0420cd046a21ce0420cd0420ce046a21cf0420ce0420cf046a21d00420cf0420d0046a21d10420d00420" + "d1046a21d20420d10420d2046a21d30420d20420d3046a21d40420d30420d4046a21d50420d40420d5046a21d60420d50420d6046a21d70420" + "d60420d7046a21d80420d70420d8046a21d90420d80420d9046a21da0420d90420da046a21db0420da0420db046a21dc0420db0420dc046a21" + "dd0420dc0420dd046a21de0420dd0420de046a21df0420de0420df046a21e00420df0420e0046a21e10420e00420e1046a21e20420e10420e2" + "046a21e30420e20420e3046a21e40420e30420e4046a21e50420e40420e5046a21e60420e50420e6046a21e70420e60420e7046a21e80420e7" + "0420e8046a21e90420e80420e9046a21ea0420e90420ea046a21eb0420ea0420eb046a21ec0420eb0420ec046a21ed0420ec0420ed046a21ee" + "0420ed0420ee046a21ef0420ee0420ef046a21f00420ef0420f0046a21f10420f00420f1046a21f20420f10420f2046a21f30420f20420f304" + "6a21f40420f30420f4046a21f50420f40420f5046a21f60420f50420f6046a21f70420f60420f7046a21f80420f70420f8046a21f90420f804" + "20f9046a21fa0420f90420fa046a21fb0420fa0420fb046a21fc0420fb0420fc046a21fd0420fc0420fd046a21fe0420fd0420fe046a21ff04" + "20fe0420ff046a21800520ff042080056a2181052080052081056a2182052081052082056a2183052082052083056a2184052083052084056a" + "2185052084052085056a2186052085052086056a2187052086052087056a2188052087052088056a2189052088052089056a218a0520890520" + "8a056a218b05208a05208b056a218c05208b05208c056a218d05208c05208d056a218e05208d05208e056a218f05208e05208f056a21900520" + "8f052090056a2191052090052091056a2192052091052092056a2193052092052093056a2194052093052094056a2195052094052095056a21" + "96052095052096056a2197052096052097056a2198052097052098056a2199052098052099056a219a05209905209a056a219b05209a05209b" + "056a219c05209b05209c056a219d05209c05209d056a219e05209d05209e056a219f05209e05209f056a21a005209f0520a0056a21a10520a0" + "0520a1056a21a20520a10520a2056a21a30520a20520a3056a21a40520a30520a4056a21a50520a40520a5056a21a60520a50520a6056a21a7" + "0520a60520a7056a21a80520a70520a8056a21a90520a80520a9056a21aa0520a90520aa056a21ab0520aa0520ab056a21ac0520ab0520ac05" + "6a21ad0520ac0520ad056a21ae0520ad0520ae056a21af0520ae0520af056a21b00520af0520b0056a21b10520b00520b1056a21b20520b105" + "20b2056a21b30520b20520b3056a21b40520b30520b4056a21b50520b40520b5056a21b60520b50520b6056a21b70520b60520b7056a21b805" + "20b70520b8056a21b90520b80520b9056a21ba0520b90520ba056a21bb0520ba0520bb056a21bc0520bb0520bc056a21bd0520bc0520bd056a" + "21be0520bd0520be056a21bf0520be0520bf056a21c00520bf0520c0056a21c10520c00520c1056a21c20520c10520c2056a21c30520c20520" + "c3056a21c40520c30520c4056a21c50520c40520c5056a21c60520c50520c6056a21c70520c60520c7056a21c80520c70520c8056a21c90520" + "c80520c9056a21ca0520c90520ca056a21cb0520ca0520cb056a21cc0520cb0520cc056a21cd0520cc0520cd056a21ce0520cd0520ce056a21" + "cf0520ce0520cf056a21d00520cf0520d0056a21d10520d00520d1056a21d20520d10520d2056a21d30520d20520d3056a21d40520d30520d4" + "056a21d50520d40520d5056a21d60520d50520d6056a21d70520d60520d7056a21d80520d70520d8056a21d90520d80520d9056a21da0520d9" + "0520da056a21db0520da0520db056a21dc0520db0520dc056a21dd0520dc0520dd056a21de0520dd0520de056a21df0520de0520df056a21e0" + "0520df0520e0056a21e10520e00520e1056a21e20520e10520e2056a21e30520e20520e3056a21e40520e30520e4056a21e50520e40520e505" + "6a21e60520e50520e6056a21e70520e60520e7056a21e80520e70520e8056a21e90520e80520e9056a21ea0520e90520ea056a21eb0520ea05" + "20eb056a21ec0520eb0520ec056a21ed0520ec0520ed056a21ee0520ed0520ee056a21ef0520ee0520ef056a21f00520ef0520f0056a21f105" + "20f00520f1056a21f20520f10520f2056a21f30520f20520f3056a21f40520f30520f4056a21f50520f40520f5056a21f60520f50520f6056a" + "21f70520f60520f7056a21f80520f70520f8056a21f90520f80520f9056a21fa0520f90520fa056a21fb0520fa0520fb056a21fc0520fb0520" + "fc056a21fd0520fc0520fd056a21fe0520fd0520fe056a21ff0520fe0520ff056a21800620ff052080066a2181062080062081066a21820620" + "81062082066a2183062082062083066a2184062083062084066a2185062084062085066a2186062085062086066a2187062086062087066a21" + "88062087062088066a2189062088062089066a218a06208906208a066a218b06208a06208b066a218c06208b06208c066a218d06208c06208d" + "066a218e06208d06208e066a218f06208e06208f066a219006208f062090066a2191062090062091066a2192062091062092066a2193062092" + "062093066a2194062093062094066a2195062094062095066a2196062095062096066a2197062096062097066a2198062097062098066a2199" + "062098062099066a219a06209906209a066a219b06209a06209b066a219c06209b06209c066a219d06209c06209d066a219e06209d06209e06" + "6a219f06209e06209f066a21a006209f0620a0066a21a10620a00620a1066a21a20620a10620a2066a21a30620a20620a3066a21a40620a306" + "20a4066a21a50620a40620a5066a21a60620a50620a6066a21a70620a60620a7066a21a80620a70620a8066a21a90620a80620a9066a21aa06" + "20a90620aa066a21ab0620aa0620ab066a21ac0620ab0620ac066a21ad0620ac0620ad066a21ae0620ad0620ae066a21af0620ae0620af066a" + "21b00620af0620b0066a21b10620b00620b1066a21b20620b10620b2066a21b30620b20620b3066a21b40620b30620b4066a21b50620b40620" + "b5066a21b60620b50620b6066a21b70620b60620b7066a21b80620b70620b8066a21b90620b80620b9066a21ba0620b90620ba066a21bb0620" + "ba0620bb066a21bc0620bb0620bc066a21bd0620bc0620bd066a21be0620bd0620be066a21bf0620be0620bf066a21c00620bf0620c0066a21" + "c10620c00620c1066a21c20620c10620c2066a21c30620c20620c3066a21c40620c30620c4066a21c50620c40620c5066a21c60620c50620c6" + "066a21c70620c60620c7066a21c80620c70620c8066a21c90620c80620c9066a21ca0620c90620ca066a21cb0620ca0620cb066a21cc0620cb" + "0620cc066a21cd0620cc0620cd066a21ce0620cd0620ce066a21cf0620ce0620cf066a21d00620cf0620d0066a21d10620d00620d1066a21d2" + "0620d10620d2066a21d30620d20620d3066a21d40620d30620d4066a21d50620d40620d5066a21d60620d50620d6066a21d70620d60620d706" + "6a21d80620d70620d8066a21d90620d80620d9066a21da0620d90620da066a21db0620da0620db066a21dc0620db0620dc066a21dd0620dc06" + "20dd066a21de0620dd0620de066a21df0620de0620df066a21e00620df0620e0066a21e10620e00620e1066a21e20620e10620e2066a21e306" + "20e20620e3066a21e40620e30620e4066a21e50620e40620e5066a21e60620e50620e6066a21e70620e60620e7066a21e80620e70620e8066a" + "21e90620e80620e9066a21ea0620e90620ea066a21eb0620ea0620eb066a21ec0620eb0620ec066a21ed0620ec0620ed066a21ee0620ed0620" + "ee066a21ef0620ee0620ef066a21f00620ef0620f0066a21f10620f00620f1066a21f20620f10620f2066a21f30620f20620f3066a21f40620" + "f30620f4066a21f50620f40620f5066a21f60620f50620f6066a21f70620f60620f7066a21f80620f70620f8066a21f90620f80620f9066a21" + "fa0620f90620fa066a21fb0620fa0620fb066a21fc0620fb0620fc066a21fd0620fc0620fd066a21fe0620fd0620fe066a21ff0620fe0620ff" + "066a21800720ff062080076a2181072080072081076a2182072081072082076a2183072082072083076a2184072083072084076a2185072084" + "072085076a2186072085072086076a2187072086072087076a2188072087072088076a2189072088072089076a218a07208907208a076a218b" + "07208a07208b076a218c07208b07208c076a218d07208c07208d076a218e07208d07208e076a218f07208e07208f076a219007208f07209007" + "6a2191072090072091076a2192072091072092076a2193072092072093076a2194072093072094076a2195072094072095076a219607209507" + "2096076a2197072096072097076a2198072097072098076a2199072098072099076a219a07209907209a076a219b07209a07209b076a219c07" + "209b07209c076a219d07209c07209d076a219e07209d07209e076a219f07209e07209f076a21a007209f0720a0076a21a10720a00720a1076a" + "21a20720a10720a2076a21a30720a20720a3076a21a40720a30720a4076a21a50720a40720a5076a21a60720a50720a6076a21a70720a60720" + "a7076a21a80720a70720a8076a21a90720a80720a9076a21aa0720a90720aa076a21ab0720aa0720ab076a21ac0720ab0720ac076a21ad0720" + "ac0720ad076a21ae0720ad0720ae076a21af0720ae0720af076a21b00720af0720b0076a21b10720b00720b1076a21b20720b10720b2076a21" + "b30720b20720b3076a21b40720b30720b4076a21b50720b40720b5076a21b60720b50720b6076a21b70720b60720b7076a21b80720b70720b8" + "076a21b90720b80720b9076a21ba0720b90720ba076a21bb0720ba0720bb076a21bc0720bb0720bc076a21bd0720bc0720bd076a21be0720bd" + "0720be076a21bf0720be0720bf076a21c00720bf0720c0076a21c10720c00720c1076a21c20720c10720c2076a21c30720c20720c3076a21c4" + "0720c30720c4076a21c50720c40720c5076a21c60720c50720c6076a21c70720c60720c7076a21c80720c70720c8076a21c90720c80720c907" + "6a21ca0720c90720ca076a21cb0720ca0720cb076a21cc0720cb0720cc076a21cd0720cc0720cd076a21ce0720cd0720ce076a21cf0720ce07" + "20cf076a21d00720cf0720d0076a21d10720d00720d1076a21d20720d10720d2076a21d30720d20720d3076a21d40720d30720d4076a21d507" + "20d40720d5076a21d60720d50720d6076a21d70720d60720d7076a21d80720d70720d8076a21d90720d80720d9076a21da0720d90720da076a" + "21db0720da0720db076a21dc0720db0720dc076a21dd0720dc0720dd076a21de0720dd0720de076a21df0720de0720df076a21e00720df0720" + "e0076a21e10720e00720e1076a21e20720e10720e2076a21e30720e20720e3076a21e40720e30720e4076a21e50720e40720e5076a21e60720" + "e50720e6076a21e70720e60720e7076a21e80720e70720e8076a21e90720e80720e9076a21ea0720e90720ea076a21eb0720ea0720eb076a21" + "ec0720eb0720ec076a21ed0720ec0720ed076a21ee0720ed0720ee076a21ef0720ee0720ef076a21f00720ef0720f0076a21f10720f00720f1" + "076a21f20720f10720f2076a21f30720f20720f3076a21f40720f30720f4076a21f50720f40720f5076a21f60720f50720f6076a21f70720f6" + "0720f7076a21f80720f70720f8076a21f90720f80720f9076a21fa0720f90720fa076a21fb0720fa0720fb076a21fc0720fb0720fc076a21fd" + "0720fc0720fd076a21fe0720fd0720fe076a21ff0720fe0720ff076a21800820ff072080086a2181082080082081086a218208208108208208" + "6a2183082082082083086a2184082083082084086a2185082084082085086a2186082085082086086a2187082086082087086a218808208708" + "2088086a2189082088082089086a218a08208908208a086a218b08208a08208b086a218c08208b08208c086a218d08208c08208d086a218e08" + "208d08208e086a218f08208e08208f086a219008208f082090086a2191082090082091086a2192082091082092086a2193082092082093086a" + "2194082093082094086a2195082094082095086a2196082095082096086a2197082096082097086a2198082097082098086a21990820980820" + "99086a219a08209908209a086a219b08209a08209b086a219c08209b08209c086a219d08209c08209d086a219e08209d08209e086a219f0820" + "9e08209f086a21a008209f0820a0086a21a10820a00820a1086a21a20820a10820a2086a21a30820a20820a3086a21a40820a30820a4086a21" + "a50820a40820a5086a21a60820a50820a6086a21a70820a60820a7086a21a80820a70820a8086a21a90820a80820a9086a21aa0820a90820aa" + "086a21ab0820aa0820ab086a21ac0820ab0820ac086a21ad0820ac0820ad086a21ae0820ad0820ae086a21af0820ae0820af086a21b00820af" + "0820b0086a21b10820b00820b1086a21b20820b10820b2086a21b30820b20820b3086a21b40820b30820b4086a21b50820b40820b5086a21b6" + "0820b50820b6086a21b70820b60820b7086a21b80820b70820b8086a21b90820b80820b9086a21ba0820b90820ba086a21bb0820ba0820bb08" + "6a21bc0820bb0820bc086a21bd0820bc0820bd086a21be0820bd0820be086a21bf0820be0820bf086a21c00820bf0820c0086a21c10820c008" + "20c1086a21c20820c10820c2086a21c30820c20820c3086a21c40820c30820c4086a21c50820c40820c5086a21c60820c50820c6086a21c708" + "20c60820c7086a21c80820c70820c8086a21c90820c80820c9086a21ca0820c90820ca086a21cb0820ca0820cb086a21cc0820cb0820cc086a" + "21cd0820cc0820cd086a21ce0820cd0820ce086a21cf0820ce0820cf086a21d00820cf0820d0086a21d10820d00820d1086a21d20820d10820" + "d2086a21d30820d20820d3086a21d40820d30820d4086a21d50820d40820d5086a21d60820d50820d6086a21d70820d60820d7086a21d80820" + "d70820d8086a21d90820d80820d9086a21da0820d90820da086a21db0820da0820db086a21dc0820db0820dc086a21dd0820dc0820dd086a21" + "de0820dd0820de086a21df0820de0820df086a21e00820df0820e0086a21e10820e00820e1086a21e20820e10820e2086a21e30820e20820e3" + "086a21e40820e30820e4086a21e50820e40820e5086a21e60820e50820e6086a21e70820e60820e7086a21e80820e70820e8086a21e90820e8" + "0820e9086a21ea0820e90820ea086a21eb0820ea0820eb086a21ec0820eb0820ec086a21ed0820ec0820ed086a21ee0820ed0820ee086a21ef" + "0820ee0820ef086a21f00820ef0820f0086a21f10820f00820f1086a21f20820f10820f2086a21f30820f20820f3086a21f40820f30820f408" + "6a21f50820f40820f5086a21f60820f50820f6086a21f70820f60820f7086a21f80820f70820f8086a21f90820f80820f9086a21fa0820f908" + "20fa086a21fb0820fa0820fb086a21fc0820fb0820fc086a21fd0820fc0820fd086a21fe0820fd0820fe086a21ff0820fe0820ff086a218009" + "20ff082080096a2181092080092081096a2182092081092082096a2183092082092083096a2184092083092084096a2185092084092085096a" + "2186092085092086096a2187092086092087096a2188092087092088096a2189092088092089096a218a09208909208a096a218b09208a0920" + "8b096a218c09208b09208c096a218d09208c09208d096a218e09208d09208e096a218f09208e09208f096a219009208f092090096a21910920" + "90092091096a2192092091092092096a2193092092092093096a2194092093092094096a2195092094092095096a2196092095092096096a21" + "97092096092097096a2198092097092098096a2199092098092099096a219a09209909209a096a219b09209a09209b096a219c09209b09209c" + "096a219d09209c09209d096a219e09209d09209e096a219f09209e09209f096a21a009209f0920a0096a21a10920a00920a1096a21a20920a1" + "0920a2096a21a30920a20920a3096a21a40920a30920a4096a21a50920a40920a5096a21a60920a50920a6096a21a70920a60920a7096a21a8" + "0920a70920a8096a21a90920a80920a9096a21aa0920a90920aa096a21ab0920aa0920ab096a21ac0920ab0920ac096a21ad0920ac0920ad09" + "6a21ae0920ad0920ae096a21af0920ae0920af096a21b00920af0920b0096a21b10920b00920b1096a21b20920b10920b2096a21b30920b209" + "20b3096a21b40920b30920b4096a21b50920b40920b5096a21b60920b50920b6096a21b70920b60920b7096a21b80920b70920b8096a21b909" + "20b80920b9096a21ba0920b90920ba096a21bb0920ba0920bb096a21bc0920bb0920bc096a21bd0920bc0920bd096a21be0920bd0920be096a" + "21bf0920be0920bf096a21c00920bf0920c0096a21c10920c00920c1096a21c20920c10920c2096a21c30920c20920c3096a21c40920c30920" + "c4096a21c50920c40920c5096a21c60920c50920c6096a21c70920c60920c7096a21c80920c70920c8096a21c90920c80920c9096a21ca0920" + "c90920ca096a21cb0920ca0920cb096a21cc0920cb0920cc096a21cd0920cc0920cd096a21ce0920cd0920ce096a21cf0920ce0920cf096a21" + "d00920cf0920d0096a21d10920d00920d1096a21d20920d10920d2096a21d30920d20920d3096a21d40920d30920d4096a21d50920d40920d5" + "096a21d60920d50920d6096a21d70920d60920d7096a21d80920d70920d8096a21d90920d80920d9096a21da0920d90920da096a21db0920da" + "0920db096a21dc0920db0920dc096a21dd0920dc0920dd096a21de0920dd0920de096a21df0920de0920df096a21e00920df0920e0096a21e1" + "0920e00920e1096a21e20920e10920e2096a21e30920e20920e3096a21e40920e30920e4096a21e50920e40920e5096a21e60920e50920e609" + "6a21e70920e60920e7096a21e80920e70920e8096a21e90920e80920e9096a21ea0920e90920ea096a21eb0920ea0920eb096a21ec0920eb09" + "20ec096a21ed0920ec0920ed096a21ee0920ed0920ee096a21ef0920ee0920ef096a21f00920ef0920f0096a21f10920f00920f1096a21f209" + "20f10920f2096a21f30920f20920f3096a21f40920f30920f4096a21f50920f40920f5096a21f60920f50920f6096a21f70920f60920f7096a" + "21f80920f70920f8096a21f90920f80920f9096a21fa0920f90920fa096a21fb0920fa0920fb096a21fc0920fb0920fc096a21fd0920fc0920" + "fd096a21fe0920fd0920fe096a21ff0920fe0920ff096a21800a20ff0920800a6a21810a20800a20810a6a21820a20810a20820a6a21830a20" + "820a20830a6a21840a20830a20840a6a21850a20840a20850a6a21860a20850a20860a6a21870a20860a20870a6a21880a20870a20880a6a21" + "890a20880a20890a6a218a0a20890a208a0a6a218b0a208a0a208b0a6a218c0a208b0a208c0a6a218d0a208c0a208d0a6a218e0a208d0a208e" + "0a6a218f0a208e0a208f0a6a21900a208f0a20900a6a21910a20900a20910a6a21920a20910a20920a6a21930a20920a20930a6a21940a2093" + "0a20940a6a21950a20940a20950a6a21960a20950a20960a6a21970a20960a20970a6a21980a20970a20980a6a21990a20980a20990a6a219a" + "0a20990a209a0a6a219b0a209a0a209b0a6a219c0a209b0a209c0a6a219d0a209c0a209d0a6a219e0a209d0a209e0a6a219f0a209e0a209f0a" + "6a21a00a209f0a20a00a6a21a10a20a00a20a10a6a21a20a20a10a20a20a6a21a30a20a20a20a30a6a21a40a20a30a20a40a6a21a50a20a40a" + "20a50a6a21a60a20a50a20a60a6a21a70a20a60a20a70a6a21a80a20a70a20a80a6a21a90a20a80a20a90a6a21aa0a20a90a20aa0a6a21ab0a" + "20aa0a20ab0a6a21ac0a20ab0a20ac0a6a21ad0a20ac0a20ad0a6a21ae0a20ad0a20ae0a6a21af0a20ae0a20af0a6a21b00a20af0a20b00a6a" + "21b10a20b00a20b10a6a21b20a20b10a20b20a6a21b30a20b20a20b30a6a21b40a20b30a20b40a6a21b50a20b40a20b50a6a21b60a20b50a20" + "b60a6a21b70a20b60a20b70a6a21b80a20b70a20b80a6a21b90a20b80a20b90a6a21ba0a20b90a20ba0a6a21bb0a20ba0a20bb0a6a21bc0a20" + "bb0a20bc0a6a21bd0a20bc0a20bd0a6a21be0a20bd0a20be0a6a21bf0a20be0a20bf0a6a21c00a20bf0a20c00a6a21c10a20c00a20c10a6a21" + "c20a20c10a20c20a6a21c30a20c20a20c30a6a21c40a20c30a20c40a6a21c50a20c40a20c50a6a21c60a20c50a20c60a6a21c70a20c60a20c7" + "0a6a21c80a20c70a20c80a6a21c90a20c80a20c90a6a21ca0a20c90a20ca0a6a21cb0a20ca0a20cb0a6a21cc0a20cb0a20cc0a6a21cd0a20cc" + "0a20cd0a6a21ce0a20cd0a20ce0a6a21cf0a20ce0a20cf0a6a21d00a20cf0a20d00a6a21d10a20d00a20d10a6a21d20a20d10a20d20a6a21d3" + "0a20d20a20d30a6a21d40a20d30a20d40a6a21d50a20d40a20d50a6a21d60a20d50a20d60a6a21d70a20d60a20d70a6a21d80a20d70a20d80a" + "6a21d90a20d80a20d90a6a21da0a20d90a20da0a6a21db0a20da0a20db0a6a21dc0a20db0a20dc0a6a21dd0a20dc0a20dd0a6a21de0a20dd0a" + "20de0a6a21df0a20de0a20df0a6a21e00a20df0a20e00a6a21e10a20e00a20e10a6a21e20a20e10a20e20a6a21e30a20e20a20e30a6a21e40a" + "20e30a20e40a6a21e50a20e40a20e50a6a21e60a20e50a20e60a6a21e70a20e60a20e70a6a21e80a20e70a20e80a6a21e90a20e80a20e90a6a" + "21ea0a20e90a20ea0a6a21eb0a20ea0a20eb0a6a21ec0a20eb0a20ec0a6a21ed0a20ec0a20ed0a6a21ee0a20ed0a20ee0a6a21ef0a20ee0a20" + "ef0a6a21f00a20ef0a20f00a6a21f10a20f00a20f10a6a21f20a20f10a20f20a6a21f30a20f20a20f30a6a21f40a20f30a20f40a6a21f50a20" + "f40a20f50a6a21f60a20f50a20f60a6a21f70a20f60a20f70a6a21f80a20f70a20f80a6a21f90a20f80a20f90a6a21fa0a20f90a20fa0a6a21" + "fb0a20fa0a20fb0a6a21fc0a20fb0a20fc0a6a21fd0a20fc0a20fd0a6a21fe0a20fd0a20fe0a6a21ff0a20fe0a20ff0a6a21800b20ff0a2080" + "0b6a21810b20800b20810b6a21820b20810b20820b6a21830b20820b20830b6a21840b20830b20840b6a21850b20840b20850b6a21860b2085" + "0b20860b6a21870b20860b20870b6a21880b20870b20880b6a21890b20880b20890b6a218a0b20890b208a0b6a218b0b208a0b208b0b6a218c" + "0b208b0b208c0b6a218d0b208c0b208d0b6a218e0b208d0b208e0b6a218f0b208e0b208f0b6a21900b208f0b20900b6a21910b20900b20910b" + "6a21920b20910b20920b6a21930b20920b20930b6a21940b20930b20940b6a21950b20940b20950b6a21960b20950b20960b6a21970b20960b" + "20970b6a21980b20970b20980b6a21990b20980b20990b6a219a0b20990b209a0b6a219b0b209a0b209b0b6a219c0b209b0b209c0b6a219d0b" + "209c0b209d0b6a219e0b209d0b209e0b6a219f0b209e0b209f0b6a21a00b209f0b20a00b6a21a10b20a00b20a10b6a21a20b20a10b20a20b6a" + "21a30b20a20b20a30b6a21a40b20a30b20a40b6a21a50b20a40b20a50b6a21a60b20a50b20a60b6a21a70b20a60b20a70b6a21a80b20a70b20" + "a80b6a21a90b20a80b20a90b6a21aa0b20a90b20aa0b6a21ab0b20aa0b20ab0b6a21ac0b20ab0b20ac0b6a21ad0b20ac0b20ad0b6a21ae0b20" + "ad0b20ae0b6a21af0b20ae0b20af0b6a21b00b20af0b20b00b6a21b10b20b00b20b10b6a21b20b20b10b20b20b6a21b30b20b20b20b30b6a21" + "b40b20b30b20b40b6a21b50b20b40b20b50b6a21b60b20b50b20b60b6a21b70b20b60b20b70b6a21b80b20b70b20b80b6a21b90b20b80b20b9" + "0b6a21ba0b20b90b20ba0b6a21bb0b20ba0b20bb0b6a21bc0b20bb0b20bc0b6a21bd0b20bc0b20bd0b6a21be0b20bd0b20be0b6a21bf0b20be" + "0b20bf0b6a21c00b20bf0b20c00b6a21c10b20c00b20c10b6a21c20b20c10b20c20b6a21c30b20c20b20c30b6a21c40b20c30b20c40b6a21c5" + "0b20c40b20c50b6a21c60b20c50b20c60b6a21c70b20c60b20c70b6a21c80b20c70b20c80b6a21c90b20c80b20c90b6a21ca0b20c90b20ca0b" + "6a21cb0b20ca0b20cb0b6a21cc0b20cb0b20cc0b6a21cd0b20cc0b20cd0b6a21ce0b20cd0b20ce0b6a21cf0b20ce0b20cf0b6a21d00b20cf0b" + "20d00b6a21d10b20d00b20d10b6a21d20b20d10b20d20b6a21d30b20d20b20d30b6a21d40b20d30b20d40b6a21d50b20d40b20d50b6a21d60b" + "20d50b20d60b6a21d70b20d60b20d70b6a21d80b20d70b20d80b6a21d90b20d80b20d90b6a21da0b20d90b20da0b6a21db0b20da0b20db0b6a" + "21dc0b20db0b20dc0b6a21dd0b20dc0b20dd0b6a21de0b20dd0b20de0b6a21df0b20de0b20df0b6a21e00b20df0b20e00b6a21e10b20e00b20" + "e10b6a21e20b20e10b20e20b6a21e30b20e20b20e30b6a21e40b20e30b20e40b6a21e50b20e40b20e50b6a21e60b20e50b20e60b6a21e70b20" + "e60b20e70b6a21e80b20e70b20e80b6a21e90b20e80b20e90b6a21ea0b20e90b20ea0b6a21eb0b20ea0b20eb0b6a21ec0b20eb0b20ec0b6a21" + "ed0b20ec0b20ed0b6a21ee0b20ed0b20ee0b6a21ef0b20ee0b20ef0b6a21f00b20ef0b20f00b6a21f10b20f00b20f10b6a21f20b20f10b20f2" + "0b6a21f30b20f20b20f30b6a21f40b20f30b20f40b6a21f50b20f40b20f50b6a21f60b20f50b20f60b6a21f70b20f60b20f70b6a21f80b20f7" + "0b20f80b6a21f90b20f80b20f90b6a21fa0b20f90b20fa0b6a21fb0b20fa0b20fb0b6a21fc0b20fb0b20fc0b6a21fd0b20fc0b20fd0b6a21fe" + "0b20fd0b20fe0b6a21ff0b20fe0b20ff0b6a21800c20ff0b20800c6a21810c20800c20810c6a21820c20810c20820c6a21830c20820c20830c" + "6a21840c20830c20840c6a21850c20840c20850c6a21860c20850c20860c6a21870c20860c20870c6a21880c20870c20880c6a21890c20880c" + "20890c6a218a0c20890c208a0c6a218b0c208a0c208b0c6a218c0c208b0c208c0c6a218d0c208c0c208d0c6a218e0c208d0c208e0c6a218f0c" + "208e0c208f0c6a21900c208f0c20900c6a21910c20900c20910c6a21920c20910c20920c6a21930c20920c20930c6a21940c20930c20940c6a" + "21950c20940c20950c6a21960c20950c20960c6a21970c20960c20970c6a21980c20970c20980c6a21990c20980c20990c6a219a0c20990c20" + "9a0c6a219b0c209a0c209b0c6a219c0c209b0c209c0c6a219d0c209c0c209d0c6a219e0c209d0c209e0c6a219f0c209e0c209f0c6a21a00c20" + "9f0c20a00c6a21a10c20a00c20a10c6a21a20c20a10c20a20c6a21a30c20a20c20a30c6a21a40c20a30c20a40c6a21a50c20a40c20a50c6a21" + "a60c20a50c20a60c6a21a70c20a60c20a70c6a21a80c20a70c20a80c6a21a90c20a80c20a90c6a21aa0c20a90c20aa0c6a21ab0c20aa0c20ab" + "0c6a21ac0c20ab0c20ac0c6a21ad0c20ac0c20ad0c6a21ae0c20ad0c20ae0c6a21af0c20ae0c20af0c6a21b00c20af0c20b00c6a21b10c20b0" + "0c20b10c6a21b20c20b10c20b20c6a21b30c20b20c20b30c6a21b40c20b30c20b40c6a21b50c20b40c20b50c6a21b60c20b50c20b60c6a21b7" + "0c20b60c20b70c6a21b80c20b70c20b80c6a21b90c20b80c20b90c6a21ba0c20b90c20ba0c6a21bb0c20ba0c20bb0c6a21bc0c20bb0c20bc0c" + "6a21bd0c20bc0c20bd0c6a21be0c20bd0c20be0c6a21bf0c20be0c20bf0c6a21c00c20bf0c20c00c6a21c10c20c00c20c10c6a21c20c20c10c" + "20c20c6a21c30c20c20c20c30c6a21c40c20c30c20c40c6a21c50c20c40c20c50c6a21c60c20c50c20c60c6a21c70c20c60c20c70c6a21c80c" + "20c70c20c80c6a21c90c20c80c20c90c6a21ca0c20c90c20ca0c6a21cb0c20ca0c20cb0c6a21cc0c20cb0c20cc0c6a21cd0c20cc0c20cd0c6a" + "21ce0c20cd0c20ce0c6a21cf0c20ce0c20cf0c6a21d00c20cf0c20d00c6a21d10c20d00c20d10c6a21d20c20d10c20d20c6a21d30c20d20c20" + "d30c6a21d40c20d30c20d40c6a21d50c20d40c20d50c6a21d60c20d50c20d60c6a21d70c20d60c20d70c6a21d80c20d70c20d80c6a21d90c20" + "d80c20d90c6a21da0c20d90c20da0c6a21db0c20da0c20db0c6a21dc0c20db0c20dc0c6a21dd0c20dc0c20dd0c6a21de0c20dd0c20de0c6a21" + "df0c20de0c20df0c6a21e00c20df0c20e00c6a21e10c20e00c20e10c6a21e20c20e10c20e20c6a21e30c20e20c20e30c6a21e40c20e30c20e4" + "0c6a21e50c20e40c20e50c6a21e60c20e50c20e60c6a21e70c20e60c20e70c6a21e80c20e70c20e80c6a21e90c20e80c20e90c6a21ea0c20e9" + "0c20ea0c6a21eb0c20ea0c20eb0c6a21ec0c20eb0c20ec0c6a21ed0c20ec0c20ed0c6a21ee0c20ed0c20ee0c6a21ef0c20ee0c20ef0c6a21f0" + "0c20ef0c20f00c6a21f10c20f00c20f10c6a21f20c20f10c20f20c6a21f30c20f20c20f30c6a21f40c20f30c20f40c6a21f50c20f40c20f50c" + "6a21f60c20f50c20f60c6a21f70c20f60c20f70c6a21f80c20f70c20f80c6a21f90c20f80c20f90c6a21fa0c20f90c20fa0c6a21fb0c20fa0c" + "20fb0c6a21fc0c20fb0c20fc0c6a21fd0c20fc0c20fd0c6a21fe0c20fd0c20fe0c6a21ff0c20fe0c20ff0c6a21800d20ff0c20800d6a21810d" + "20800d20810d6a21820d20810d20820d6a21830d20820d20830d6a21840d20830d20840d6a21850d20840d20850d6a21860d20850d20860d6a" + "21870d20860d20870d6a21880d20870d20880d6a21890d20880d20890d6a218a0d20890d208a0d6a218b0d208a0d208b0d6a218c0d208b0d20" + "8c0d6a218d0d208c0d208d0d6a218e0d208d0d208e0d6a218f0d208e0d208f0d6a21900d208f0d20900d6a21910d20900d20910d6a21920d20" + "910d20920d6a21930d20920d20930d6a21940d20930d20940d6a21950d20940d20950d6a21960d20950d20960d6a21970d20960d20970d6a21" + "980d20970d20980d6a21990d20980d20990d6a219a0d20990d209a0d6a219b0d209a0d209b0d6a219c0d209b0d209c0d6a219d0d209c0d209d" + "0d6a219e0d209d0d209e0d6a219f0d209e0d209f0d6a21a00d209f0d20a00d6a21a10d20a00d20a10d6a21a20d20a10d20a20d6a21a30d20a2" + "0d20a30d6a21a40d20a30d20a40d6a21a50d20a40d20a50d6a21a60d20a50d20a60d6a21a70d20a60d20a70d6a21a80d20a70d20a80d6a21a9" + "0d20a80d20a90d6a21aa0d20a90d20aa0d6a21ab0d20aa0d20ab0d6a21ac0d20ab0d20ac0d6a21ad0d20ac0d20ad0d6a21ae0d20ad0d20ae0d" + "6a21af0d20ae0d20af0d6a21b00d20af0d20b00d6a21b10d20b00d20b10d6a21b20d20b10d20b20d6a21b30d20b20d20b30d6a21b40d20b30d" + "20b40d6a21b50d20b40d20b50d6a21b60d20b50d20b60d6a21b70d20b60d20b70d6a21b80d20b70d20b80d6a21b90d20b80d20b90d6a21ba0d" + "20b90d20ba0d6a21bb0d20ba0d20bb0d6a21bc0d20bb0d20bc0d6a21bd0d20bc0d20bd0d6a21be0d20bd0d20be0d6a21bf0d20be0d20bf0d6a" + "21c00d20bf0d20c00d6a21c10d20c00d20c10d6a21c20d20c10d20c20d6a21c30d20c20d20c30d6a21c40d20c30d20c40d6a21c50d20c40d20" + "c50d6a21c60d20c50d20c60d6a21c70d20c60d20c70d6a21c80d20c70d20c80d6a21c90d20c80d20c90d6a21ca0d20c90d20ca0d6a21cb0d20" + "ca0d20cb0d6a21cc0d20cb0d20cc0d6a21cd0d20cc0d20cd0d6a21ce0d20cd0d20ce0d6a21cf0d20ce0d20cf0d6a21d00d20cf0d20d00d6a21" + "d10d20d00d20d10d6a21d20d20d10d20d20d6a21d30d20d20d20d30d6a21d40d20d30d20d40d6a21d50d20d40d20d50d6a21d60d20d50d20d6" + "0d6a21d70d20d60d20d70d6a21d80d20d70d20d80d6a21d90d20d80d20d90d6a21da0d20d90d20da0d6a21db0d20da0d20db0d6a21dc0d20db" + "0d20dc0d6a21dd0d20dc0d20dd0d6a21de0d20dd0d20de0d6a21df0d20de0d20df0d6a21e00d20df0d20e00d6a21e10d20e00d20e10d6a21e2" + "0d20e10d20e20d6a21e30d20e20d20e30d6a21e40d20e30d20e40d6a21e50d20e40d20e50d6a21e60d20e50d20e60d6a21e70d20e60d20e70d" + "6a21e80d20e70d20e80d6a21e90d20e80d20e90d6a21ea0d20e90d20ea0d6a21eb0d20ea0d20eb0d6a21ec0d20eb0d20ec0d6a21ed0d20ec0d" + "20ed0d6a21ee0d20ed0d20ee0d6a21ef0d20ee0d20ef0d6a21f00d20ef0d20f00d6a21f10d20f00d20f10d6a21f20d20f10d20f20d6a21f30d" + "20f20d20f30d6a21f40d20f30d20f40d6a21f50d20f40d20f50d6a21f60d20f50d20f60d6a21f70d20f60d20f70d6a21f80d20f70d20f80d6a" + "21f90d20f80d20f90d6a21fa0d20f90d20fa0d6a21fb0d20fa0d20fb0d6a21fc0d20fb0d20fc0d6a21fd0d20fc0d20fd0d6a21fe0d20fd0d20" + "fe0d6a21ff0d20fe0d20ff0d6a21800e20ff0d20800e6a21810e20800e20810e6a21820e20810e20820e6a21830e20820e20830e6a21840e20" + "830e20840e6a21850e20840e20850e6a21860e20850e20860e6a21870e20860e20870e6a21880e20870e20880e6a21890e20880e20890e6a21" + "8a0e20890e208a0e6a218b0e208a0e208b0e6a218c0e208b0e208c0e6a218d0e208c0e208d0e6a218e0e208d0e208e0e6a218f0e208e0e208f" + "0e6a21900e208f0e20900e6a21910e20900e20910e6a21920e20910e20920e6a21930e20920e20930e6a21940e20930e20940e6a21950e2094" + "0e20950e6a21960e20950e20960e6a21970e20960e20970e6a21980e20970e20980e6a21990e20980e20990e6a219a0e20990e209a0e6a219b" + "0e209a0e209b0e6a219c0e209b0e209c0e6a219d0e209c0e209d0e6a219e0e209d0e209e0e6a219f0e209e0e209f0e6a21a00e209f0e20a00e" + "6a21a10e20a00e20a10e6a21a20e20a10e20a20e6a21a30e20a20e20a30e6a21a40e20a30e20a40e6a21a50e20a40e20a50e6a21a60e20a50e" + "20a60e6a21a70e20a60e20a70e6a21a80e20a70e20a80e6a21a90e20a80e20a90e6a21aa0e20a90e20aa0e6a21ab0e20aa0e20ab0e6a21ac0e" + "20ab0e20ac0e6a21ad0e20ac0e20ad0e6a21ae0e20ad0e20ae0e6a21af0e20ae0e20af0e6a21b00e20af0e20b00e6a21b10e20b00e20b10e6a" + "21b20e20b10e20b20e6a21b30e20b20e20b30e6a21b40e20b30e20b40e6a21b50e20b40e20b50e6a21b60e20b50e20b60e6a21b70e20b60e20" + "b70e6a21b80e20b70e20b80e6a21b90e20b80e20b90e6a21ba0e20b90e20ba0e6a21bb0e20ba0e20bb0e6a21bc0e20bb0e20bc0e6a21bd0e20" + "bc0e20bd0e6a21be0e20bd0e20be0e6a21bf0e20be0e20bf0e6a21c00e20bf0e20c00e6a21c10e20c00e20c10e6a21c20e20c10e20c20e6a21" + "c30e20c20e20c30e6a21c40e20c30e20c40e6a21c50e20c40e20c50e6a21c60e20c50e20c60e6a21c70e20c60e20c70e6a21c80e20c70e20c8" + "0e6a21c90e20c80e20c90e6a21ca0e20c90e20ca0e6a21cb0e20ca0e20cb0e6a21cc0e20cb0e20cc0e6a21cd0e20cc0e20cd0e6a21ce0e20cd" + "0e20ce0e6a21cf0e20ce0e20cf0e6a21d00e20cf0e20d00e6a21d10e20d00e20d10e6a21d20e20d10e20d20e6a21d30e20d20e20d30e6a21d4" + "0e20d30e20d40e6a21d50e20d40e20d50e6a21d60e20d50e20d60e6a21d70e20d60e20d70e6a21d80e20d70e20d80e6a21d90e20d80e20d90e" + "6a21da0e20d90e20da0e6a21db0e20da0e20db0e6a21dc0e20db0e20dc0e6a21dd0e20dc0e20dd0e6a21de0e20dd0e20de0e6a21df0e20de0e" + "20df0e6a21e00e20df0e20e00e6a21e10e20e00e20e10e6a21e20e20e10e20e20e6a21e30e20e20e20e30e6a21e40e20e30e20e40e6a21e50e" + "20e40e20e50e6a21e60e20e50e20e60e6a21e70e20e60e20e70e6a21e80e20e70e20e80e6a21e90e20e80e20e90e6a21ea0e20e90e20ea0e6a" + "21eb0e20ea0e20eb0e6a21ec0e20eb0e20ec0e6a21ed0e20ec0e20ed0e6a21ee0e20ed0e20ee0e6a21ef0e20ee0e20ef0e6a21f00e20ef0e20" + "f00e6a21f10e20f00e20f10e6a21f20e20f10e20f20e6a21f30e20f20e20f30e6a21f40e20f30e20f40e6a21f50e20f40e20f50e6a21f60e20" + "f50e20f60e6a21f70e20f60e20f70e6a21f80e20f70e20f80e6a21f90e20f80e20f90e6a21fa0e20f90e20fa0e6a21fb0e20fa0e20fb0e6a21" + "fc0e20fb0e20fc0e6a21fd0e20fc0e20fd0e6a21fe0e20fd0e20fe0e6a21ff0e20fe0e20ff0e6a21800f20ff0e20800f6a21810f20800f2081" + "0f6a21820f20810f20820f6a21830f20820f20830f6a21840f20830f20840f6a21850f20840f20850f6a21860f20850f20860f6a21870f2086" + "0f20870f6a21880f20870f20880f6a21890f20880f20890f6a218a0f20890f208a0f6a218b0f208a0f208b0f6a218c0f208b0f208c0f6a218d" + "0f208c0f208d0f6a218e0f208d0f208e0f6a218f0f208e0f208f0f6a21900f208f0f20900f6a21910f20900f20910f6a21920f20910f20920f" + "6a21930f20920f20930f6a21940f20930f20940f6a21950f20940f20950f6a21960f20950f20960f6a21970f20960f20970f6a21980f20970f" + "20980f6a21990f20980f20990f6a219a0f20990f209a0f6a219b0f209a0f209b0f6a219c0f209b0f209c0f6a219d0f209c0f209d0f6a219e0f" + "209d0f209e0f6a219f0f209e0f209f0f6a21a00f209f0f20a00f6a21a10f20a00f20a10f6a21a20f20a10f20a20f6a21a30f20a20f20a30f6a" + "21a40f20a30f20a40f6a21a50f20a40f20a50f6a21a60f20a50f20a60f6a21a70f20a60f20a70f6a21a80f20a70f20a80f6a21a90f20a80f20" + "a90f6a21aa0f20a90f20aa0f6a21ab0f20aa0f20ab0f6a21ac0f20ab0f20ac0f6a21ad0f20ac0f20ad0f6a21ae0f20ad0f20ae0f6a21af0f20" + "ae0f20af0f6a21b00f20af0f20b00f6a21b10f20b00f20b10f6a21b20f20b10f20b20f6a21b30f20b20f20b30f6a21b40f20b30f20b40f6a21" + "b50f20b40f20b50f6a21b60f20b50f20b60f6a21b70f20b60f20b70f6a21b80f20b70f20b80f6a21b90f20b80f20b90f6a21ba0f20b90f20ba" + "0f6a21bb0f20ba0f20bb0f6a21bc0f20bb0f20bc0f6a21bd0f20bc0f20bd0f6a21be0f20bd0f20be0f6a21bf0f20be0f20bf0f6a21c00f20bf" + "0f20c00f6a21c10f20c00f20c10f6a21c20f20c10f20c20f6a21c30f20c20f20c30f6a21c40f20c30f20c40f6a21c50f20c40f20c50f6a21c6" + "0f20c50f20c60f6a21c70f20c60f20c70f6a21c80f20c70f20c80f6a21c90f20c80f20c90f6a21ca0f20c90f20ca0f6a21cb0f20ca0f20cb0f" + "6a21cc0f20cb0f20cc0f6a21cd0f20cc0f20cd0f6a21ce0f20cd0f20ce0f6a21cf0f20ce0f20cf0f6a21d00f20cf0f20d00f6a21d10f20d00f" + "20d10f6a21d20f20d10f20d20f6a21d30f20d20f20d30f6a21d40f20d30f20d40f6a21d50f20d40f20d50f6a21d60f20d50f20d60f6a21d70f" + "20d60f20d70f6a21d80f20d70f20d80f6a21d90f20d80f20d90f6a21da0f20d90f20da0f6a21db0f20da0f20db0f6a21dc0f20db0f20dc0f6a" + "21dd0f20dc0f20dd0f6a21de0f20dd0f20de0f6a21df0f20de0f20df0f6a21e00f20df0f20e00f6a21e10f20e00f20e10f6a21e20f20e10f20" + "e20f6a21e30f20e20f20e30f6a21e40f20e30f20e40f6a21e50f20e40f20e50f6a21e60f20e50f20e60f6a21e70f20e60f20e70f6a21e80f20" + "e70f20e80f6a21e90f20e80f20e90f6a21ea0f20e90f20ea0f6a21eb0f20ea0f20eb0f6a21ec0f20eb0f20ec0f6a21ed0f20ec0f20ed0f6a21" + "ee0f20ed0f20ee0f6a21ef0f20ee0f20ef0f6a21f00f20ef0f20f00f6a21f10f20f00f20f10f6a21f20f20f10f20f20f6a21f30f20f20f20f3" + "0f6a21f40f20f30f20f40f6a21f50f20f40f20f50f6a21f60f20f50f20f60f6a21f70f20f60f20f70f6a21f80f20f70f20f80f6a21f90f20f8" + "0f20f90f6a21fa0f20f90f20fa0f6a21fb0f20fa0f20fb0f6a21fc0f20fb0f20fc0f6a21fd0f20fc0f20fd0f6a21fe0f20fd0f20fe0f6a21ff" + "0f20fe0f20ff0f6a21801020ff0f2080106a2181102080102081106a2182102081102082106a2183102082102083106a218410208310208410" + "6a2185102084102085106a2186102085102086106a2187102086102087106a2188102087102088106a2189102088102089106a218a10208910" + "208a106a218b10208a10208b106a218c10208b10208c106a218d10208c10208d106a218e10208d10208e106a218f10208e10208f106a219010" + "208f102090106a2191102090102091106a2192102091102092106a2193102092102093106a2194102093102094106a2195102094102095106a" + "2196102095102096106a2197102096102097106a2198102097102098106a2199102098102099106a219a10209910209a106a219b10209a1020" + "9b106a219c10209b10209c106a219d10209c10209d106a219e10209d10209e106a219f10209e10209f106a21a010209f1020a0106a21a11020" + "a01020a1106a21a21020a11020a2106a21a31020a21020a3106a21a41020a31020a4106a21a51020a41020a5106a21a61020a51020a6106a21" + "a71020a61020a7106a21a81020a71020a8106a21a91020a81020a9106a21aa1020a91020aa106a21ab1020aa1020ab106a21ac1020ab1020ac" + "106a21ad1020ac1020ad106a21ae1020ad1020ae106a21af1020ae1020af106a21b01020af1020b0106a21b11020b01020b1106a21b21020b1" + "1020b2106a21b31020b21020b3106a21b41020b31020b4106a21b51020b41020b5106a21b61020b51020b6106a21b71020b61020b7106a21b8" + "1020b71020b8106a21b91020b81020b9106a21ba1020b91020ba106a21bb1020ba1020bb106a21bc1020bb1020bc106a21bd1020bc1020bd10" + "6a21be1020bd1020be106a21bf1020be1020bf106a21c01020bf1020c0106a21c11020c01020c1106a21c21020c11020c2106a21c31020c210" + "20c3106a21c41020c31020c4106a21c51020c41020c5106a21c61020c51020c6106a21c71020c61020c7106a21c81020c71020c8106a21c910" + "20c81020c9106a21ca1020c91020ca106a21cb1020ca1020cb106a21cc1020cb1020cc106a21cd1020cc1020cd106a21ce1020cd1020ce106a" + "21cf1020ce1020cf106a21d01020cf1020d0106a21d11020d01020d1106a21d21020d11020d2106a21d31020d21020d3106a21d41020d31020" + "d4106a21d51020d41020d5106a21d61020d51020d6106a21d71020d61020d7106a21d81020d71020d8106a21d91020d81020d9106a21da1020" + "d91020da106a21db1020da1020db106a21dc1020db1020dc106a21dd1020dc1020dd106a21de1020dd1020de106a21df1020de1020df106a21" + "e01020df1020e0106a21e11020e01020e1106a21e21020e11020e2106a21e31020e21020e3106a21e41020e31020e4106a21e51020e41020e5" + "106a21e61020e51020e6106a21e71020e61020e7106a21e81020e71020e8106a21e91020e81020e9106a21ea1020e91020ea106a21eb1020ea" + "1020eb106a21ec1020eb1020ec106a21ed1020ec1020ed106a21ee1020ed1020ee106a21ef1020ee1020ef106a21f01020ef1020f0106a21f1" + "1020f01020f1106a21f21020f11020f2106a21f31020f21020f3106a21f41020f31020f4106a21f51020f41020f5106a21f61020f51020f610" + "6a21f71020f61020f7106a21f81020f71020f8106a21f91020f81020f9106a21fa1020f91020fa106a21fb1020fa1020fb106a21fc1020fb10" + "20fc106a21fd1020fc1020fd106a21fe1020fd1020fe106a21ff1020fe1020ff106a21801120ff102080116a2181112080112081116a218211" + "2081112082116a2183112082112083116a2184112083112084116a2185112084112085116a2186112085112086116a2187112086112087116a" + "2188112087112088116a2189112088112089116a218a11208911208a116a218b11208a11208b116a218c11208b11208c116a218d11208c1120" + "8d116a218e11208d11208e116a218f11208e11208f116a219011208f112090116a2191112090112091116a2192112091112092116a21931120" + "92112093116a2194112093112094116a2195112094112095116a2196112095112096116a2197112096112097116a2198112097112098116a21" + "99112098112099116a219a11209911209a116a219b11209a11209b116a219c11209b11209c116a219d11209c11209d116a219e11209d11209e" + "116a219f11209e11209f116a21a011209f1120a0116a21a11120a01120a1116a21a21120a11120a2116a21a31120a21120a3116a21a41120a3" + "1120a4116a21a51120a41120a5116a21a61120a51120a6116a21a71120a61120a7116a21a81120a71120a8116a21a91120a81120a9116a21aa" + "1120a91120aa116a21ab1120aa1120ab116a21ac1120ab1120ac116a21ad1120ac1120ad116a21ae1120ad1120ae116a21af1120ae1120af11" + "6a21b01120af1120b0116a21b11120b01120b1116a21b21120b11120b2116a21b31120b21120b3116a21b41120b31120b4116a21b51120b411" + "20b5116a21b61120b51120b6116a21b71120b61120b7116a21b81120b71120b8116a21b91120b81120b9116a21ba1120b91120ba116a21bb11" + "20ba1120bb116a21bc1120bb1120bc116a21bd1120bc1120bd116a21be1120bd1120be116a21bf1120be1120bf116a21c01120bf1120c0116a" + "21c11120c01120c1116a21c21120c11120c2116a21c31120c21120c3116a21c41120c31120c4116a21c51120c41120c5116a21c61120c51120" + "c6116a21c71120c61120c7116a21c81120c71120c8116a21c91120c81120c9116a21ca1120c91120ca116a21cb1120ca1120cb116a21cc1120" + "cb1120cc116a21cd1120cc1120cd116a21ce1120cd1120ce116a21cf1120ce1120cf116a21d01120cf1120d0116a21d11120d01120d1116a21" + "d21120d11120d2116a21d31120d21120d3116a21d41120d31120d4116a21d51120d41120d5116a21d61120d51120d6116a21d71120d61120d7" + "116a21d81120d71120d8116a21d91120d81120d9116a21da1120d91120da116a21db1120da1120db116a21dc1120db1120dc116a21dd1120dc" + "1120dd116a21de1120dd1120de116a21df1120de1120df116a21e01120df1120e0116a21e11120e01120e1116a21e21120e11120e2116a21e3" + "1120e21120e3116a21e41120e31120e4116a21e51120e41120e5116a21e61120e51120e6116a21e71120e61120e7116a21e81120e71120e811" + "6a21e91120e81120e9116a21ea1120e91120ea116a21eb1120ea1120eb116a21ec1120eb1120ec116a21ed1120ec1120ed116a21ee1120ed11" + "20ee116a21ef1120ee1120ef116a21f01120ef1120f0116a21f11120f01120f1116a21f21120f11120f2116a21f31120f21120f3116a21f411" + "20f31120f4116a21f51120f41120f5116a21f61120f51120f6116a21f71120f61120f7116a21f81120f71120f8116a21f91120f81120f9116a" + "21fa1120f91120fa116a21fb1120fa1120fb116a21fc1120fb1120fc116a21fd1120fc1120fd116a21fe1120fd1120fe116a21ff1120fe1120" + "ff116a21801220ff112080126a2181122080122081126a2182122081122082126a2183122082122083126a2184122083122084126a21851220" + "84122085126a2186122085122086126a2187122086122087126a2188122087122088126a2189122088122089126a218a12208912208a126a21" + "8b12208a12208b126a218c12208b12208c126a218d12208c12208d126a218e12208d12208e126a218f12208e12208f126a219012208f122090" + "126a2191122090122091126a2192122091122092126a2193122092122093126a2194122093122094126a2195122094122095126a2196122095" + "122096126a2197122096122097126a2198122097122098126a2199122098122099126a219a12209912209a126a219b12209a12209b126a219c" + "12209b12209c126a219d12209c12209d126a219e12209d12209e126a219f12209e12209f126a21a012209f1220a0126a21a11220a01220a112" + "6a21a21220a11220a2126a21a31220a21220a3126a21a41220a31220a4126a21a51220a41220a5126a21a61220a51220a6126a21a71220a612" + "20a7126a21a81220a71220a8126a21a91220a81220a9126a21aa1220a91220aa126a21ab1220aa1220ab126a21ac1220ab1220ac126a21ad12" + "20ac1220ad126a21ae1220ad1220ae126a21af1220ae1220af126a21b01220af1220b0126a21b11220b01220b1126a21b21220b11220b2126a" + "21b31220b21220b3126a21b41220b31220b4126a21b51220b41220b5126a21b61220b51220b6126a21b71220b61220b7126a21b81220b71220" + "b8126a21b91220b81220b9126a21ba1220b91220ba126a21bb1220ba1220bb126a21bc1220bb1220bc126a21bd1220bc1220bd126a21be1220" + "bd1220be126a21bf1220be1220bf126a21c01220bf1220c0126a21c11220c01220c1126a21c21220c11220c2126a21c31220c21220c3126a21" + "c41220c31220c4126a21c51220c41220c5126a21c61220c51220c6126a21c71220c61220c7126a21c81220c71220c8126a21c91220c81220c9" + "126a21ca1220c91220ca126a21cb1220ca1220cb126a21cc1220cb1220cc126a21cd1220cc1220cd126a21ce1220cd1220ce126a21cf1220ce" + "1220cf126a21d01220cf1220d0126a21d11220d01220d1126a21d21220d11220d2126a21d31220d21220d3126a21d41220d31220d4126a21d5" + "1220d41220d5126a21d61220d51220d6126a21d71220d61220d7126a21d81220d71220d8126a21d91220d81220d9126a21da1220d91220da12" + "6a21db1220da1220db126a21dc1220db1220dc126a21dd1220dc1220dd126a21de1220dd1220de126a21df1220de1220df126a21e01220df12" + "20e0126a21e11220e01220e1126a21e21220e11220e2126a21e31220e21220e3126a21e41220e31220e4126a21e51220e41220e5126a21e612" + "20e51220e6126a21e71220e61220e7126a21e81220e71220e8126a21e91220e81220e9126a21ea1220e91220ea126a21eb1220ea1220eb126a" + "21ec1220eb1220ec126a21ed1220ec1220ed126a21ee1220ed1220ee126a21ef1220ee1220ef126a21f01220ef1220f0126a21f11220f01220" + "f1126a21f21220f11220f2126a21f31220f21220f3126a21f41220f31220f4126a21f51220f41220f5126a21f61220f51220f6126a21f71220" + "f61220f7126a21f81220f71220f8126a21f91220f81220f9126a21fa1220f91220fa126a21fb1220fa1220fb126a21fc1220fb1220fc126a21" + "fd1220fc1220fd126a21fe1220fd1220fe126a21ff1220fe1220ff126a21801320ff122080136a2181132080132081136a2182132081132082" + "136a2183132082132083136a2184132083132084136a2185132084132085136a2186132085132086136a2187132086132087136a2188132087" + "132088136a2189132088132089136a218a13208913208a136a218b13208a13208b136a218c13208b13208c136a218d13208c13208d136a218e" + "13208d13208e136a218f13208e13208f136a219013208f132090136a2191132090132091136a2192132091132092136a219313209213209313" + "6a2194132093132094136a2195132094132095136a2196132095132096136a2197132096132097136a2198132097132098136a219913209813" + "2099136a219a13209913209a136a219b13209a13209b136a219c13209b13209c136a219d13209c13209d136a219e13209d13209e136a219f13" + "209e13209f136a21a013209f1320a0136a21a11320a01320a1136a21a21320a11320a2136a21a31320a21320a3136a21a41320a31320a4136a" + "21a51320a41320a5136a21a61320a51320a6136a21a71320a61320a7136a21a81320a71320a8136a21a91320a81320a9136a21aa1320a91320" + "aa136a21ab1320aa1320ab136a21ac1320ab1320ac136a21ad1320ac1320ad136a21ae1320ad1320ae136a21af1320ae1320af136a21b01320" + "af1320b0136a21b11320b01320b1136a21b21320b11320b2136a21b31320b21320b3136a21b41320b31320b4136a21b51320b41320b5136a21" + "b61320b51320b6136a21b71320b61320b7136a21b81320b71320b8136a21b91320b81320b9136a21ba1320b91320ba136a21bb1320ba1320bb" + "136a21bc1320bb1320bc136a21bd1320bc1320bd136a21be1320bd1320be136a21bf1320be1320bf136a21c01320bf1320c0136a21c11320c0" + "1320c1136a21c21320c11320c2136a21c31320c21320c3136a21c41320c31320c4136a21c51320c41320c5136a21c61320c51320c6136a21c7" + "1320c61320c7136a21c81320c71320c8136a21c91320c81320c9136a21ca1320c91320ca136a21cb1320ca1320cb136a21cc1320cb1320cc13" + "6a21cd1320cc1320cd136a21ce1320cd1320ce136a21cf1320ce1320cf136a21d01320cf1320d0136a21d11320d01320d1136a21d21320d113" + "20d2136a21d31320d21320d3136a21d41320d31320d4136a21d51320d41320d5136a21d61320d51320d6136a21d71320d61320d7136a21d813" + "20d71320d8136a21d91320d81320d9136a21da1320d91320da136a21db1320da1320db136a21dc1320db1320dc136a21dd1320dc1320dd136a" + "21de1320dd1320de136a21df1320de1320df136a21e01320df1320e0136a21e11320e01320e1136a21e21320e11320e2136a21e31320e21320" + "e3136a21e41320e31320e4136a21e51320e41320e5136a21e61320e51320e6136a21e71320e61320e7136a21e81320e71320e8136a21e91320" + "e81320e9136a21ea1320e91320ea136a21eb1320ea1320eb136a21ec1320eb1320ec136a21ed1320ec1320ed136a21ee1320ed1320ee136a21" + "ef1320ee1320ef136a21f01320ef1320f0136a21f11320f01320f1136a21f21320f11320f2136a21f31320f21320f3136a21f41320f31320f4" + "136a21f51320f41320f5136a21f61320f51320f6136a21f71320f61320f7136a21f81320f71320f8136a21f91320f81320f9136a21fa1320f9" + "1320fa136a21fb1320fa1320fb136a21fc1320fb1320fc136a21fd1320fc1320fd136a21fe1320fd1320fe136a21ff1320fe1320ff136a2180" + "1420ff132080146a2181142080142081146a2182142081142082146a2183142082142083146a2184142083142084146a218514208414208514" + "6a2186142085142086146a2187142086142087146a2188142087142088146a2189142088142089146a218a14208914208a146a218b14208a14" + "208b146a218c14208b14208c146a218d14208c14208d146a218e14208d14208e146a218f14208e14208f146a219014208f142090146a219114" + "2090142091146a2192142091142092146a2193142092142093146a2194142093142094146a2195142094142095146a2196142095142096146a" + "2197142096142097146a2198142097142098146a2199142098142099146a219a14209914209a146a219b14209a14209b146a219c14209b1420" + "9c146a219d14209c14209d146a219e14209d14209e146a219f14209e14209f146a21a014209f1420a0146a21a11420a01420a1146a21a21420" + "a11420a2146a21a31420a21420a3146a21a41420a31420a4146a21a51420a41420a5146a21a61420a51420a6146a21a71420a61420a7146a21" + "a81420a71420a8146a21a91420a81420a9146a21aa1420a91420aa146a21ab1420aa1420ab146a21ac1420ab1420ac146a21ad1420ac1420ad" + "146a21ae1420ad1420ae146a21af1420ae1420af146a21b01420af1420b0146a21b11420b01420b1146a21b21420b11420b2146a21b31420b2" + "1420b3146a21b41420b31420b4146a21b51420b41420b5146a21b61420b51420b6146a21b71420b61420b7146a21b81420b71420b8146a21b9" + "1420b81420b9146a21ba1420b91420ba146a21bb1420ba1420bb146a21bc1420bb1420bc146a21bd1420bc1420bd146a21be1420bd1420be14" + "6a21bf1420be1420bf146a21c01420bf1420c0146a21c11420c01420c1146a21c21420c11420c2146a21c31420c21420c3146a21c41420c314" + "20c4146a21c51420c41420c5146a21c61420c51420c6146a21c71420c61420c7146a21c81420c71420c8146a21c91420c81420c9146a21ca14" + "20c91420ca146a21cb1420ca1420cb146a21cc1420cb1420cc146a21cd1420cc1420cd146a21ce1420cd1420ce146a21cf1420ce1420cf146a" + "21d01420cf1420d0146a21d11420d01420d1146a21d21420d11420d2146a21d31420d21420d3146a21d41420d31420d4146a21d51420d41420" + "d5146a21d61420d51420d6146a21d71420d61420d7146a21d81420d71420d8146a21d91420d81420d9146a21da1420d91420da146a21db1420" + "da1420db146a21dc1420db1420dc146a21dd1420dc1420dd146a21de1420dd1420de146a21df1420de1420df146a21e01420df1420e0146a21" + "e11420e01420e1146a21e21420e11420e2146a21e31420e21420e3146a21e41420e31420e4146a21e51420e41420e5146a21e61420e51420e6" + "146a21e71420e61420e7146a21e81420e71420e8146a21e91420e81420e9146a21ea1420e91420ea146a21eb1420ea1420eb146a21ec1420eb" + "1420ec146a21ed1420ec1420ed146a21ee1420ed1420ee146a21ef1420ee1420ef146a21f01420ef1420f0146a21f11420f01420f1146a21f2" + "1420f11420f2146a21f31420f21420f3146a21f41420f31420f4146a21f51420f41420f5146a21f61420f51420f6146a21f71420f61420f714" + "6a21f81420f71420f8146a21f91420f81420f9146a21fa1420f91420fa146a21fb1420fa1420fb146a21fc1420fb1420fc146a21fd1420fc14" + "20fd146a21fe1420fd1420fe146a21ff1420fe1420ff146a21801520ff142080156a2181152080152081156a2182152081152082156a218315" + "2082152083156a2184152083152084156a2185152084152085156a2186152085152086156a2187152086152087156a2188152087152088156a" + "2189152088152089156a218a15208915208a156a218b15208a15208b156a218c15208b15208c156a218d15208c15208d156a218e15208d1520" + "8e156a218f15208e15208f156a219015208f152090156a2191152090152091156a2192152091152092156a2193152092152093156a21941520" + "93152094156a2195152094152095156a2196152095152096156a2197152096152097156a2198152097152098156a2199152098152099156a21" + "9a15209915209a156a219b15209a15209b156a219c15209b15209c156a219d15209c15209d156a219e15209d15209e156a219f15209e15209f" + "156a21a015209f1520a0156a21a11520a01520a1156a21a21520a11520a2156a21a31520a21520a3156a21a41520a31520a4156a21a51520a4" + "1520a5156a21a61520a51520a6156a21a71520a61520a7156a21a81520a71520a8156a21a91520a81520a9156a21aa1520a91520aa156a21ab" + "1520aa1520ab156a21ac1520ab1520ac156a21ad1520ac1520ad156a21ae1520ad1520ae156a21af1520ae1520af156a21b01520af1520b015" + "6a21b11520b01520b1156a21b21520b11520b2156a21b31520b21520b3156a21b41520b31520b4156a21b51520b41520b5156a21b61520b515" + "20b6156a21b71520b61520b7156a21b81520b71520b8156a21b91520b81520b9156a21ba1520b91520ba156a21bb1520ba1520bb156a21bc15" + "20bb1520bc156a21bd1520bc1520bd156a21be1520bd1520be156a21bf1520be1520bf156a21c01520bf1520c0156a21c11520c01520c1156a" + "21c21520c11520c2156a21c31520c21520c3156a21c41520c31520c4156a21c51520c41520c5156a21c61520c51520c6156a21c71520c61520" + "c7156a21c81520c71520c8156a21c91520c81520c9156a21ca1520c91520ca156a21cb1520ca1520cb156a21cc1520cb1520cc156a21cd1520" + "cc1520cd156a21ce1520cd1520ce156a21cf1520ce1520cf156a21d01520cf1520d0156a21d11520d01520d1156a21d21520d11520d2156a21" + "d31520d21520d3156a21d41520d31520d4156a21d51520d41520d5156a21d61520d51520d6156a21d71520d61520d7156a21d81520d71520d8" + "156a21d91520d81520d9156a21da1520d91520da156a21db1520da1520db156a21dc1520db1520dc156a21dd1520dc1520dd156a21de1520dd" + "1520de156a21df1520de1520df156a21e01520df1520e0156a21e11520e01520e1156a21e21520e11520e2156a21e31520e21520e3156a21e4" + "1520e31520e4156a21e51520e41520e5156a21e61520e51520e6156a21e71520e61520e7156a21e81520e71520e8156a21e91520e81520e915" + "6a21ea1520e91520ea156a21eb1520ea1520eb156a21ec1520eb1520ec156a21ed1520ec1520ed156a21ee1520ed1520ee156a21ef1520ee15" + "20ef156a21f01520ef1520f0156a21f11520f01520f1156a21f21520f11520f2156a21f31520f21520f3156a21f41520f31520f4156a21f515" + "20f41520f5156a21f61520f51520f6156a21f71520f61520f7156a21f81520f71520f8156a21f91520f81520f9156a21fa1520f91520fa156a" + "21fb1520fa1520fb156a21fc1520fb1520fc156a21fd1520fc1520fd156a21fe1520fd1520fe156a21ff1520fe1520ff156a21801620ff1520" + "80166a2181162080162081166a2182162081162082166a2183162082162083166a2184162083162084166a2185162084162085166a21861620" + "85162086166a2187162086162087166a2188162087162088166a2189162088162089166a218a16208916208a166a218b16208a16208b166a21" + "8c16208b16208c166a218d16208c16208d166a218e16208d16208e166a218f16208e16208f166a219016208f162090166a2191162090162091" + "166a2192162091162092166a2193162092162093166a2194162093162094166a2195162094162095166a2196162095162096166a2197162096" + "162097166a2198162097162098166a2199162098162099166a219a16209916209a166a219b16209a16209b166a219c16209b16209c166a219d" + "16209c16209d166a219e16209d16209e166a219f16209e16209f166a21a016209f1620a0166a21a11620a01620a1166a21a21620a11620a216" + "6a21a31620a21620a3166a21a41620a31620a4166a21a51620a41620a5166a21a61620a51620a6166a21a71620a61620a7166a21a81620a716" + "20a8166a21a91620a81620a9166a21aa1620a91620aa166a21ab1620aa1620ab166a21ac1620ab1620ac166a21ad1620ac1620ad166a21ae16" + "20ad1620ae166a21af1620ae1620af166a21b01620af1620b0166a21b11620b01620b1166a21b21620b11620b2166a21b31620b21620b3166a" + "21b41620b31620b4166a21b51620b41620b5166a21b61620b51620b6166a21b71620b61620b7166a21b81620b71620b8166a21b91620b81620" + "b9166a21ba1620b91620ba166a21bb1620ba1620bb166a21bc1620bb1620bc166a21bd1620bc1620bd166a21be1620bd1620be166a21bf1620" + "be1620bf166a21c01620bf1620c0166a21c11620c01620c1166a21c21620c11620c2166a21c31620c21620c3166a21c41620c31620c4166a21" + "c51620c41620c5166a21c61620c51620c6166a21c71620c61620c7166a21c81620c71620c8166a21c91620c81620c9166a21ca1620c91620ca" + "166a21cb1620ca1620cb166a21cc1620cb1620cc166a21cd1620cc1620cd166a21ce1620cd1620ce166a21cf1620ce1620cf166a21d01620cf" + "1620d0166a21d11620d01620d1166a21d21620d11620d2166a21d31620d21620d3166a21d41620d31620d4166a21d51620d41620d5166a21d6" + "1620d51620d6166a21d71620d61620d7166a21d81620d71620d8166a21d91620d81620d9166a21da1620d91620da166a21db1620da1620db16" + "6a21dc1620db1620dc166a21dd1620dc1620dd166a21de1620dd1620de166a21df1620de1620df166a21e01620df1620e0166a21e11620e016" + "20e1166a21e21620e11620e2166a21e31620e21620e3166a21e41620e31620e4166a21e51620e41620e5166a21e61620e51620e6166a21e716" + "20e61620e7166a21e81620e71620e8166a21e91620e81620e9166a21ea1620e91620ea166a21eb1620ea1620eb166a21ec1620eb1620ec166a" + "21ed1620ec1620ed166a21ee1620ed1620ee166a21ef1620ee1620ef166a21f01620ef1620f0166a21f11620f01620f1166a21f21620f11620" + "f2166a21f31620f21620f3166a21f41620f31620f4166a21f51620f41620f5166a21f61620f51620f6166a21f71620f61620f7166a21f81620" + "f71620f8166a21f91620f81620f9166a21fa1620f91620fa166a21fb1620fa1620fb166a21fc1620fb1620fc166a21fd1620fc1620fd166a21" + "fe1620fd1620fe166a21ff1620fe1620ff166a21801720ff162080176a2181172080172081176a2182172081172082176a2183172082172083" + "176a2184172083172084176a2185172084172085176a2186172085172086176a2187172086172087176a2188172087172088176a2189172088" + "172089176a218a17208917208a176a218b17208a17208b176a218c17208b17208c176a218d17208c17208d176a218e17208d17208e176a218f" + "17208e17208f176a219017208f172090176a2191172090172091176a2192172091172092176a2193172092172093176a219417209317209417" + "6a2195172094172095176a2196172095172096176a2197172096172097176a2198172097172098176a2199172098172099176a219a17209917" + "209a176a219b17209a17209b176a219c17209b17209c176a219d17209c17209d176a219e17209d17209e176a219f17209e17209f176a21a017" + "209f1720a0176a21a11720a01720a1176a21a21720a11720a2176a21a31720a21720a3176a21a41720a31720a4176a21a51720a41720a5176a" + "21a61720a51720a6176a21a71720a61720a7176a21a81720a71720a8176a21a91720a81720a9176a21aa1720a91720aa176a21ab1720aa1720" + "ab176a21ac1720ab1720ac176a21ad1720ac1720ad176a21ae1720ad1720ae176a21af1720ae1720af176a21b01720af1720b0176a21b11720" + "b01720b1176a21b21720b11720b2176a21b31720b21720b3176a21b41720b31720b4176a21b51720b41720b5176a21b61720b51720b6176a21" + "b71720b61720b7176a21b81720b71720b8176a21b91720b81720b9176a21ba1720b91720ba176a21bb1720ba1720bb176a21bc1720bb1720bc" + "176a21bd1720bc1720bd176a21be1720bd1720be176a21bf1720be1720bf176a21c01720bf1720c0176a21c11720c01720c1176a21c21720c1" + "1720c2176a21c31720c21720c3176a21c41720c31720c4176a21c51720c41720c5176a21c61720c51720c6176a21c71720c61720c7176a21c8" + "1720c71720c8176a21c91720c81720c9176a21ca1720c91720ca176a21cb1720ca1720cb176a21cc1720cb1720cc176a21cd1720cc1720cd17" + "6a21ce1720cd1720ce176a21cf1720ce1720cf176a21d01720cf1720d0176a21d11720d01720d1176a21d21720d11720d2176a21d31720d217" + "20d3176a21d41720d31720d4176a21d51720d41720d5176a21d61720d51720d6176a21d71720d61720d7176a21d81720d71720d8176a21d917" + "20d81720d9176a21da1720d91720da176a21db1720da1720db176a21dc1720db1720dc176a21dd1720dc1720dd176a21de1720dd1720de176a" + "21df1720de1720df176a21e01720df1720e0176a21e11720e01720e1176a21e21720e11720e2176a21e31720e21720e3176a21e41720e31720" + "e4176a21e51720e41720e5176a21e61720e51720e6176a21e71720e61720e7176a21e81720e71720e8176a21e91720e81720e9176a21ea1720" + "e91720ea176a21eb1720ea1720eb176a21ec1720eb1720ec176a21ed1720ec1720ed176a21ee1720ed1720ee176a21ef1720ee1720ef176a21" + "f01720ef1720f0176a21f11720f01720f1176a21f21720f11720f2176a21f31720f21720f3176a21f41720f31720f4176a21f51720f41720f5" + "176a21f61720f51720f6176a21f71720f61720f7176a21f81720f71720f8176a21f91720f81720f9176a21fa1720f91720fa176a21fb1720fa" + "1720fb176a21fc1720fb1720fc176a21fd1720fc1720fd176a21fe1720fd1720fe176a21ff1720fe1720ff176a21801820ff172080186a2181" + "182080182081186a2182182081182082186a2183182082182083186a2184182083182084186a2185182084182085186a218618208518208618" + "6a2187182086182087186a2188182087182088186a2189182088182089186a218a18208918208a186a218b18208a18208b186a218c18208b18" + "208c186a218d18208c18208d186a218e18208d18208e186a218f18208e18208f186a219018208f182090186a2191182090182091186a219218" + "2091182092186a2193182092182093186a2194182093182094186a2195182094182095186a2196182095182096186a2197182096182097186a" + "2198182097182098186a2199182098182099186a219a18209918209a186a219b18209a18209b186a219c18209b18209c186a219d18209c1820" + "9d186a219e18209d18209e186a219f18209e18209f186a21a018209f1820a0186a21a11820a01820a1186a21a21820a11820a2186a21a31820" + "a21820a3186a21a41820a31820a4186a21a51820a41820a5186a21a61820a51820a6186a21a71820a61820a7186a21a81820a71820a8186a21" + "a91820a81820a9186a21aa1820a91820aa186a21ab1820aa1820ab186a21ac1820ab1820ac186a21ad1820ac1820ad186a21ae1820ad1820ae" + "186a21af1820ae1820af186a21b01820af1820b0186a21b11820b01820b1186a21b21820b11820b2186a21b31820b21820b3186a21b41820b3" + "1820b4186a21b51820b41820b5186a21b61820b51820b6186a21b71820b61820b7186a21b81820b71820b8186a21b91820b81820b9186a21ba" + "1820b91820ba186a21bb1820ba1820bb186a21bc1820bb1820bc186a21bd1820bc1820bd186a21be1820bd1820be186a21bf1820be1820bf18" + "6a21c01820bf1820c0186a21c11820c01820c1186a21c21820c11820c2186a21c31820c21820c3186a21c41820c31820c4186a21c51820c418" + "20c5186a21c61820c51820c6186a21c71820c61820c7186a21c81820c71820c8186a21c91820c81820c9186a21ca1820c91820ca186a21cb18" + "20ca1820cb186a21cc1820cb1820cc186a21cd1820cc1820cd186a21ce1820cd1820ce186a21cf1820ce1820cf186a21d01820cf1820d0186a" + "21d11820d01820d1186a21d21820d11820d2186a21d31820d21820d3186a21d41820d31820d4186a21d51820d41820d5186a21d61820d51820" + "d6186a21d71820d61820d7186a21d81820d71820d8186a21d91820d81820d9186a21da1820d91820da186a21db1820da1820db186a21dc1820" + "db1820dc186a21dd1820dc1820dd186a21de1820dd1820de186a21df1820de1820df186a21e01820df1820e0186a21e11820e01820e1186a21" + "e21820e11820e2186a21e31820e21820e3186a21e41820e31820e4186a21e51820e41820e5186a21e61820e51820e6186a21e71820e61820e7" + "186a21e81820e71820e8186a21e91820e81820e9186a21ea1820e91820ea186a21eb1820ea1820eb186a21ec1820eb1820ec186a21ed1820ec" + "1820ed186a21ee1820ed1820ee186a21ef1820ee1820ef186a21f01820ef1820f0186a21f11820f01820f1186a21f21820f11820f2186a21f3" + "1820f21820f3186a21f41820f31820f4186a21f51820f41820f5186a21f61820f51820f6186a21f71820f61820f7186a21f81820f71820f818" + "6a21f91820f81820f9186a21fa1820f91820fa186a21fb1820fa1820fb186a21fc1820fb1820fc186a21fd1820fc1820fd186a21fe1820fd18" + "20fe186a21ff1820fe1820ff186a21801920ff182080196a2181192080192081196a2182192081192082196a2183192082192083196a218419" + "2083192084196a2185192084192085196a2186192085192086196a2187192086192087196a2188192087192088196a2189192088192089196a" + "218a19208919208a196a218b19208a19208b196a218c19208b19208c196a218d19208c19208d196a218e19208d19208e196a218f19208e1920" + "8f196a219019208f192090196a2191192090192091196a2192192091192092196a2193192092192093196a2194192093192094196a21951920" + "94192095196a2196192095192096196a2197192096192097196a2198192097192098196a2199192098192099196a219a19209919209a196a21" + "9b19209a19209b196a219c19209b19209c196a219d19209c19209d196a219e19209d19209e196a219f19209e19209f196a21a019209f1920a0" + "196a21a11920a01920a1196a21a21920a11920a2196a21a31920a21920a3196a21a41920a31920a4196a21a51920a41920a5196a21a61920a5" + "1920a6196a21a71920a61920a7196a21a81920a71920a8196a21a91920a81920a9196a21aa1920a91920aa196a21ab1920aa1920ab196a21ac" + "1920ab1920ac196a21ad1920ac1920ad196a21ae1920ad1920ae196a21af1920ae1920af196a21b01920af1920b0196a21b11920b01920b119" + "6a21b21920b11920b2196a21b31920b21920b3196a21b41920b31920b4196a21b51920b41920b5196a21b61920b51920b6196a21b71920b619" + "20b7196a21b81920b71920b8196a21b91920b81920b9196a21ba1920b91920ba196a21bb1920ba1920bb196a21bc1920bb1920bc196a21bd19" + "20bc1920bd196a21be1920bd1920be196a21bf1920be1920bf196a21c01920bf1920c0196a21c11920c01920c1196a21c21920c11920c2196a" + "21c31920c21920c3196a21c41920c31920c4196a21c51920c41920c5196a21c61920c51920c6196a21c71920c61920c7196a21c81920c71920" + "c8196a21c91920c81920c9196a21ca1920c91920ca196a21cb1920ca1920cb196a21cc1920cb1920cc196a21cd1920cc1920cd196a21ce1920" + "cd1920ce196a21cf1920ce1920cf196a21d01920cf1920d0196a21d11920d01920d1196a21d21920d11920d2196a21d31920d21920d3196a21" + "d41920d31920d4196a21d51920d41920d5196a21d61920d51920d6196a21d71920d61920d7196a21d81920d71920d8196a21d91920d81920d9" + "196a21da1920d91920da196a21db1920da1920db196a21dc1920db1920dc196a21dd1920dc1920dd196a21de1920dd1920de196a21df1920de" + "1920df196a21e01920df1920e0196a21e11920e01920e1196a21e21920e11920e2196a21e31920e21920e3196a21e41920e31920e4196a21e5" + "1920e41920e5196a21e61920e51920e6196a21e71920e61920e7196a21e81920e71920e8196a21e91920e81920e9196a21ea1920e91920ea19" + "6a21eb1920ea1920eb196a21ec1920eb1920ec196a21ed1920ec1920ed196a21ee1920ed1920ee196a21ef1920ee1920ef196a21f01920ef19" + "20f0196a21f11920f01920f1196a21f21920f11920f2196a21f31920f21920f3196a21f41920f31920f4196a21f51920f41920f5196a21f619" + "20f51920f6196a21f71920f61920f7196a21f81920f71920f8196a21f91920f81920f9196a21fa1920f91920fa196a21fb1920fa1920fb196a" + "21fc1920fb1920fc196a21fd1920fc1920fd196a21fe1920fd1920fe196a21ff1920fe1920ff196a21801a20ff1920801a6a21811a20801a20" + "811a6a21821a20811a20821a6a21831a20821a20831a6a21841a20831a20841a6a21851a20841a20851a6a21861a20851a20861a6a21871a20" + "861a20871a6a21881a20871a20881a6a21891a20881a20891a6a218a1a20891a208a1a6a218b1a208a1a208b1a6a218c1a208b1a208c1a6a21" + "8d1a208c1a208d1a6a218e1a208d1a208e1a6a218f1a208e1a208f1a6a21901a208f1a20901a6a21911a20901a20911a6a21921a20911a2092" + "1a6a21931a20921a20931a6a21941a20931a20941a6a21951a20941a20951a6a21961a20951a20961a6a21971a20961a20971a6a21981a2097" + "1a20981a6a21991a20981a20991a6a219a1a20991a209a1a6a219b1a209a1a209b1a6a219c1a209b1a209c1a6a219d1a209c1a209d1a6a219e" + "1a209d1a209e1a6a219f1a209e1a209f1a6a21a01a209f1a20a01a6a21a11a20a01a20a11a6a21a21a20a11a20a21a6a21a31a20a21a20a31a" + "6a21a41a20a31a20a41a6a21a51a20a41a20a51a6a21a61a20a51a20a61a6a21a71a20a61a20a71a6a21a81a20a71a20a81a6a21a91a20a81a" + "20a91a6a21aa1a20a91a20aa1a6a21ab1a20aa1a20ab1a6a21ac1a20ab1a20ac1a6a21ad1a20ac1a20ad1a6a21ae1a20ad1a20ae1a6a21af1a" + "20ae1a20af1a6a21b01a20af1a20b01a6a21b11a20b01a20b11a6a21b21a20b11a20b21a6a21b31a20b21a20b31a6a21b41a20b31a20b41a6a" + "21b51a20b41a20b51a6a21b61a20b51a20b61a6a21b71a20b61a20b71a6a21b81a20b71a20b81a6a21b91a20b81a20b91a6a21ba1a20b91a20" + "ba1a6a21bb1a20ba1a20bb1a6a21bc1a20bb1a20bc1a6a21bd1a20bc1a20bd1a6a21be1a20bd1a20be1a6a21bf1a20be1a20bf1a6a21c01a20" + "bf1a20c01a6a21c11a20c01a20c11a6a21c21a20c11a20c21a6a21c31a20c21a20c31a6a21c41a20c31a20c41a6a21c51a20c41a20c51a6a21" + "c61a20c51a20c61a6a21c71a20c61a20c71a6a21c81a20c71a20c81a6a21c91a20c81a20c91a6a21ca1a20c91a20ca1a6a21cb1a20ca1a20cb" + "1a6a21cc1a20cb1a20cc1a6a21cd1a20cc1a20cd1a6a21ce1a20cd1a20ce1a6a21cf1a20ce1a20cf1a6a21d01a20cf1a20d01a6a21d11a20d0" + "1a20d11a6a21d21a20d11a20d21a6a21d31a20d21a20d31a6a21d41a20d31a20d41a6a21d51a20d41a20d51a6a21d61a20d51a20d61a6a21d7" + "1a20d61a20d71a6a21d81a20d71a20d81a6a21d91a20d81a20d91a6a21da1a20d91a20da1a6a21db1a20da1a20db1a6a21dc1a20db1a20dc1a" + "6a21dd1a20dc1a20dd1a6a21de1a20dd1a20de1a6a21df1a20de1a20df1a6a21e01a20df1a20e01a6a21e11a20e01a20e11a6a21e21a20e11a" + "20e21a6a21e31a20e21a20e31a6a21e41a20e31a20e41a6a21e51a20e41a20e51a6a21e61a20e51a20e61a6a21e71a20e61a20e71a6a21e81a" + "20e71a20e81a6a21e91a20e81a20e91a6a21ea1a20e91a20ea1a6a21eb1a20ea1a20eb1a6a21ec1a20eb1a20ec1a6a21ed1a20ec1a20ed1a6a" + "21ee1a20ed1a20ee1a6a21ef1a20ee1a20ef1a6a21f01a20ef1a20f01a6a21f11a20f01a20f11a6a21f21a20f11a20f21a6a21f31a20f21a20" + "f31a6a21f41a20f31a20f41a6a21f51a20f41a20f51a6a21f61a20f51a20f61a6a21f71a20f61a20f71a6a21f81a20f71a20f81a6a21f91a20" + "f81a20f91a6a21fa1a20f91a20fa1a6a21fb1a20fa1a20fb1a6a21fc1a20fb1a20fc1a6a21fd1a20fc1a20fd1a6a21fe1a20fd1a20fe1a6a21" + "ff1a20fe1a20ff1a6a21801b20ff1a20801b6a21811b20801b20811b6a21821b20811b20821b6a21831b20821b20831b6a21841b20831b2084" + "1b6a21851b20841b20851b6a21861b20851b20861b6a21871b20861b20871b6a21881b20871b20881b6a21891b20881b20891b6a218a1b2089" + "1b208a1b6a218b1b208a1b208b1b6a218c1b208b1b208c1b6a218d1b208c1b208d1b6a218e1b208d1b208e1b6a218f1b208e1b208f1b6a2190" + "1b208f1b20901b6a21911b20901b20911b6a21921b20911b20921b6a21931b20921b20931b6a21941b20931b20941b6a21951b20941b20951b" + "6a21961b20951b20961b6a21971b20961b20971b6a21981b20971b20981b6a21991b20981b20991b6a219a1b20991b209a1b6a219b1b209a1b" + "209b1b6a219c1b209b1b209c1b6a219d1b209c1b209d1b6a219e1b209d1b209e1b6a219f1b209e1b209f1b6a21a01b209f1b20a01b6a21a11b" + "20a01b20a11b6a21a21b20a11b20a21b6a21a31b20a21b20a31b6a21a41b20a31b20a41b6a21a51b20a41b20a51b6a21a61b20a51b20a61b6a" + "21a71b20a61b20a71b6a21a81b20a71b20a81b6a21a91b20a81b20a91b6a21aa1b20a91b20aa1b6a21ab1b20aa1b20ab1b6a21ac1b20ab1b20" + "ac1b6a21ad1b20ac1b20ad1b6a21ae1b20ad1b20ae1b6a21af1b20ae1b20af1b6a21b01b20af1b20b01b6a21b11b20b01b20b11b6a21b21b20" + "b11b20b21b6a21b31b20b21b20b31b6a21b41b20b31b20b41b6a21b51b20b41b20b51b6a21b61b20b51b20b61b6a21b71b20b61b20b71b6a21" + "b81b20b71b20b81b6a21b91b20b81b20b91b6a21ba1b20b91b20ba1b6a21bb1b20ba1b20bb1b6a21bc1b20bb1b20bc1b6a21bd1b20bc1b20bd" + "1b6a21be1b20bd1b20be1b6a21bf1b20be1b20bf1b6a21c01b20bf1b20c01b6a21c11b20c01b20c11b6a21c21b20c11b20c21b6a21c31b20c2" + "1b20c31b6a21c41b20c31b20c41b6a21c51b20c41b20c51b6a21c61b20c51b20c61b6a21c71b20c61b20c71b6a21c81b20c71b20c81b6a21c9" + "1b20c81b20c91b6a21ca1b20c91b20ca1b6a21cb1b20ca1b20cb1b6a21cc1b20cb1b20cc1b6a21cd1b20cc1b20cd1b6a21ce1b20cd1b20ce1b" + "6a21cf1b20ce1b20cf1b6a21d01b20cf1b20d01b6a21d11b20d01b20d11b6a21d21b20d11b20d21b6a21d31b20d21b20d31b6a21d41b20d31b" + "20d41b6a21d51b20d41b20d51b6a21d61b20d51b20d61b6a21d71b20d61b20d71b6a21d81b20d71b20d81b6a21d91b20d81b20d91b6a21da1b" + "20d91b20da1b6a21db1b20da1b20db1b6a21dc1b20db1b20dc1b6a21dd1b20dc1b20dd1b6a21de1b20dd1b20de1b6a21df1b20de1b20df1b6a" + "21e01b20df1b20e01b6a21e11b20e01b20e11b6a21e21b20e11b20e21b6a21e31b20e21b20e31b6a21e41b20e31b20e41b6a21e51b20e41b20" + "e51b6a21e61b20e51b20e61b6a21e71b20e61b20e71b6a21e81b20e71b20e81b6a21e91b20e81b20e91b6a21ea1b20e91b20ea1b6a21eb1b20" + "ea1b20eb1b6a21ec1b20eb1b20ec1b6a21ed1b20ec1b20ed1b6a21ee1b20ed1b20ee1b6a21ef1b20ee1b20ef1b6a21f01b20ef1b20f01b6a21" + "f11b20f01b20f11b6a21f21b20f11b20f21b6a21f31b20f21b20f31b6a21f41b20f31b20f41b6a21f51b20f41b20f51b6a21f61b20f51b20f6" + "1b6a21f71b20f61b20f71b6a21f81b20f71b20f81b6a21f91b20f81b20f91b6a21fa1b20f91b20fa1b6a21fb1b20fa1b20fb1b6a21fc1b20fb" + "1b20fc1b6a21fd1b20fc1b20fd1b6a21fe1b20fd1b20fe1b6a21ff1b20fe1b20ff1b6a21801c20ff1b20801c6a21811c20801c20811c6a2182" + "1c20811c20821c6a21831c20821c20831c6a21841c20831c20841c6a21851c20841c20851c6a21861c20851c20861c6a21871c20861c20871c" + "6a21881c20871c20881c6a21891c20881c20891c6a218a1c20891c208a1c6a218b1c208a1c208b1c6a218c1c208b1c208c1c6a218d1c208c1c" + "208d1c6a218e1c208d1c208e1c6a218f1c208e1c208f1c6a21901c208f1c20901c6a21911c20901c20911c6a21921c20911c20921c6a21931c" + "20921c20931c6a21941c20931c20941c6a21951c20941c20951c6a21961c20951c20961c6a21971c20961c20971c6a21981c20971c20981c6a" + "21991c20981c20991c6a219a1c20991c209a1c6a219b1c209a1c209b1c6a219c1c209b1c209c1c6a219d1c209c1c209d1c6a219e1c209d1c20" + "9e1c6a219f1c209e1c209f1c6a21a01c209f1c20a01c6a21a11c20a01c20a11c6a21a21c20a11c20a21c6a21a31c20a21c20a31c6a21a41c20" + "a31c20a41c6a21a51c20a41c20a51c6a21a61c20a51c20a61c6a21a71c20a61c20a71c6a21a81c20a71c20a81c6a21a91c20a81c20a91c6a21" + "aa1c20a91c20aa1c6a21ab1c20aa1c20ab1c6a21ac1c20ab1c20ac1c6a21ad1c20ac1c20ad1c6a21ae1c20ad1c20ae1c6a21af1c20ae1c20af" + "1c6a21b01c20af1c20b01c6a21b11c20b01c20b11c6a21b21c20b11c20b21c6a21b31c20b21c20b31c6a21b41c20b31c20b41c6a21b51c20b4" + "1c20b51c6a21b61c20b51c20b61c6a21b71c20b61c20b71c6a21b81c20b71c20b81c6a21b91c20b81c20b91c6a21ba1c20b91c20ba1c6a21bb" + "1c20ba1c20bb1c6a21bc1c20bb1c20bc1c6a21bd1c20bc1c20bd1c6a21be1c20bd1c20be1c6a21bf1c20be1c20bf1c6a21c01c20bf1c20c01c" + "6a21c11c20c01c20c11c6a21c21c20c11c20c21c6a21c31c20c21c20c31c6a21c41c20c31c20c41c6a21c51c20c41c20c51c6a21c61c20c51c" + "20c61c6a21c71c20c61c20c71c6a21c81c20c71c20c81c6a21c91c20c81c20c91c6a21ca1c20c91c20ca1c6a21cb1c20ca1c20cb1c6a21cc1c" + "20cb1c20cc1c6a21cd1c20cc1c20cd1c6a21ce1c20cd1c20ce1c6a21cf1c20ce1c20cf1c6a21d01c20cf1c20d01c6a21d11c20d01c20d11c6a" + "21d21c20d11c20d21c6a21d31c20d21c20d31c6a21d41c20d31c20d41c6a21d51c20d41c20d51c6a21d61c20d51c20d61c6a21d71c20d61c20" + "d71c6a21d81c20d71c20d81c6a21d91c20d81c20d91c6a21da1c20d91c20da1c6a21db1c20da1c20db1c6a21dc1c20db1c20dc1c6a21dd1c20" + "dc1c20dd1c6a21de1c20dd1c20de1c6a21df1c20de1c20df1c6a21e01c20df1c20e01c6a21e11c20e01c20e11c6a21e21c20e11c20e21c6a21" + "e31c20e21c20e31c6a21e41c20e31c20e41c6a21e51c20e41c20e51c6a21e61c20e51c20e61c6a21e71c20e61c20e71c6a21e81c20e71c20e8" + "1c6a21e91c20e81c20e91c6a21ea1c20e91c20ea1c6a21eb1c20ea1c20eb1c6a21ec1c20eb1c20ec1c6a21ed1c20ec1c20ed1c6a21ee1c20ed" + "1c20ee1c6a21ef1c20ee1c20ef1c6a21f01c20ef1c20f01c6a21f11c20f01c20f11c6a21f21c20f11c20f21c6a21f31c20f21c20f31c6a21f4" + "1c20f31c20f41c6a21f51c20f41c20f51c6a21f61c20f51c20f61c6a21f71c20f61c20f71c6a21f81c20f71c20f81c6a21f91c20f81c20f91c" + "6a21fa1c20f91c20fa1c6a21fb1c20fa1c20fb1c6a21fc1c20fb1c20fc1c6a21fd1c20fc1c20fd1c6a21fe1c20fd1c20fe1c6a21ff1c20fe1c" + "20ff1c6a21801d20ff1c20801d6a21811d20801d20811d6a21821d20811d20821d6a21831d20821d20831d6a21841d20831d20841d6a21851d" + "20841d20851d6a21861d20851d20861d6a21871d20861d20871d6a21881d20871d20881d6a21891d20881d20891d6a218a1d20891d208a1d6a" + "218b1d208a1d208b1d6a218c1d208b1d208c1d6a218d1d208c1d208d1d6a218e1d208d1d208e1d6a218f1d208e1d208f1d6a21901d208f1d20" + "901d6a21911d20901d20911d6a21921d20911d20921d6a21931d20921d20931d6a21941d20931d20941d6a21951d20941d20951d6a21961d20" + "951d20961d6a21971d20961d20971d6a21981d20971d20981d6a21991d20981d20991d6a219a1d20991d209a1d6a219b1d209a1d209b1d6a21" + "9c1d209b1d209c1d6a219d1d209c1d209d1d6a219e1d209d1d209e1d6a219f1d209e1d209f1d6a21a01d209f1d20a01d6a21a11d20a01d20a1" + "1d6a21a21d20a11d20a21d6a21a31d20a21d20a31d6a21a41d20a31d20a41d6a21a51d20a41d20a51d6a21a61d20a51d20a61d6a21a71d20a6" + "1d20a71d6a21a81d20a71d20a81d6a21a91d20a81d20a91d6a21aa1d20a91d20aa1d6a21ab1d20aa1d20ab1d6a21ac1d20ab1d20ac1d6a21ad" + "1d20ac1d20ad1d6a21ae1d20ad1d20ae1d6a21af1d20ae1d20af1d6a21b01d20af1d20b01d6a21b11d20b01d20b11d6a21b21d20b11d20b21d" + "6a21b31d20b21d20b31d6a21b41d20b31d20b41d6a21b51d20b41d20b51d6a21b61d20b51d20b61d6a21b71d20b61d20b71d6a21b81d20b71d" + "20b81d6a21b91d20b81d20b91d6a21ba1d20b91d20ba1d6a21bb1d20ba1d20bb1d6a21bc1d20bb1d20bc1d6a21bd1d20bc1d20bd1d6a21be1d" + "20bd1d20be1d6a21bf1d20be1d20bf1d6a21c01d20bf1d20c01d6a21c11d20c01d20c11d6a21c21d20c11d20c21d6a21c31d20c21d20c31d6a" + "21c41d20c31d20c41d6a21c51d20c41d20c51d6a21c61d20c51d20c61d6a21c71d20c61d20c71d6a21c81d20c71d20c81d6a21c91d20c81d20" + "c91d6a21ca1d20c91d20ca1d6a21cb1d20ca1d20cb1d6a21cc1d20cb1d20cc1d6a21cd1d20cc1d20cd1d6a21ce1d20cd1d20ce1d6a21cf1d20" + "ce1d20cf1d6a21d01d20cf1d20d01d6a21d11d20d01d20d11d6a21d21d20d11d20d21d6a21d31d20d21d20d31d6a21d41d20d31d20d41d6a21" + "d51d20d41d20d51d6a21d61d20d51d20d61d6a21d71d20d61d20d71d6a21d81d20d71d20d81d6a21d91d20d81d20d91d6a21da1d20d91d20da" + "1d6a21db1d20da1d20db1d6a21dc1d20db1d20dc1d6a21dd1d20dc1d20dd1d6a21de1d20dd1d20de1d6a21df1d20de1d20df1d6a21e01d20df" + "1d20e01d6a21e11d20e01d20e11d6a21e21d20e11d20e21d6a21e31d20e21d20e31d6a21e41d20e31d20e41d6a21e51d20e41d20e51d6a21e6" + "1d20e51d20e61d6a21e71d20e61d20e71d6a21e81d20e71d20e81d6a21e91d20e81d20e91d6a21ea1d20e91d20ea1d6a21eb1d20ea1d20eb1d" + "6a21ec1d20eb1d20ec1d6a21ed1d20ec1d20ed1d6a21ee1d20ed1d20ee1d6a21ef1d20ee1d20ef1d6a21f01d20ef1d20f01d6a21f11d20f01d" + "20f11d6a21f21d20f11d20f21d6a21f31d20f21d20f31d6a21f41d20f31d20f41d6a21f51d20f41d20f51d6a21f61d20f51d20f61d6a21f71d" + "20f61d20f71d6a21f81d20f71d20f81d6a21f91d20f81d20f91d6a21fa1d20f91d20fa1d6a21fb1d20fa1d20fb1d6a21fc1d20fb1d20fc1d6a" + "21fd1d20fc1d20fd1d6a21fe1d20fd1d20fe1d6a21ff1d20fe1d20ff1d6a21801e20ff1d20801e6a21811e20801e20811e6a21821e20811e20" + "821e6a21831e20821e20831e6a21841e20831e20841e6a21851e20841e20851e6a21861e20851e20861e6a21871e20861e20871e6a21881e20" + "871e20881e6a21891e20881e20891e6a218a1e20891e208a1e6a218b1e208a1e208b1e6a218c1e208b1e208c1e6a218d1e208c1e208d1e6a21" + "8e1e208d1e208e1e6a218f1e208e1e208f1e6a21901e208f1e20901e6a21911e20901e20911e6a21921e20911e20921e6a21931e20921e2093" + "1e6a21941e20931e20941e6a21951e20941e20951e6a21961e20951e20961e6a21971e20961e20971e6a21981e20971e20981e6a21991e2098" + "1e20991e6a219a1e20991e209a1e6a219b1e209a1e209b1e6a219c1e209b1e209c1e6a219d1e209c1e209d1e6a219e1e209d1e209e1e6a219f" + "1e209e1e209f1e6a21a01e209f1e20a01e6a21a11e20a01e20a11e6a21a21e20a11e20a21e6a21a31e20a21e20a31e6a21a41e20a31e20a41e" + "6a21a51e20a41e20a51e6a21a61e20a51e20a61e6a21a71e20a61e20a71e6a21a81e20a71e20a81e6a21a91e20a81e20a91e6a21aa1e20a91e" + "20aa1e6a21ab1e20aa1e20ab1e6a21ac1e20ab1e20ac1e6a21ad1e20ac1e20ad1e6a21ae1e20ad1e20ae1e6a21af1e20ae1e20af1e6a21b01e" + "20af1e20b01e6a21b11e20b01e20b11e6a21b21e20b11e20b21e6a21b31e20b21e20b31e6a21b41e20b31e20b41e6a21b51e20b41e20b51e6a" + "21b61e20b51e20b61e6a21b71e20b61e20b71e6a21b81e20b71e20b81e6a21b91e20b81e20b91e6a21ba1e20b91e20ba1e6a21bb1e20ba1e20" + "bb1e6a21bc1e20bb1e20bc1e6a21bd1e20bc1e20bd1e6a21be1e20bd1e20be1e6a21bf1e20be1e20bf1e6a21c01e20bf1e20c01e6a21c11e20" + "c01e20c11e6a21c21e20c11e20c21e6a21c31e20c21e20c31e6a21c41e20c31e20c41e6a21c51e20c41e20c51e6a21c61e20c51e20c61e6a21" + "c71e20c61e20c71e6a21c81e20c71e20c81e6a21c91e20c81e20c91e6a21ca1e20c91e20ca1e6a21cb1e20ca1e20cb1e6a21cc1e20cb1e20cc" + "1e6a21cd1e20cc1e20cd1e6a21ce1e20cd1e20ce1e6a21cf1e20ce1e20cf1e6a21d01e20cf1e20d01e6a21d11e20d01e20d11e6a21d21e20d1" + "1e20d21e6a21d31e20d21e20d31e6a21d41e20d31e20d41e6a21d51e20d41e20d51e6a21d61e20d51e20d61e6a21d71e20d61e20d71e6a21d8" + "1e20d71e20d81e6a21d91e20d81e20d91e6a21da1e20d91e20da1e6a21db1e20da1e20db1e6a21dc1e20db1e20dc1e6a21dd1e20dc1e20dd1e" + "6a21de1e20dd1e20de1e6a21df1e20de1e20df1e6a21e01e20df1e20e01e6a21e11e20e01e20e11e6a21e21e20e11e20e21e6a21e31e20e21e" + "20e31e6a21e41e20e31e20e41e6a21e51e20e41e20e51e6a21e61e20e51e20e61e6a21e71e20e61e20e71e6a21e81e20e71e20e81e6a21e91e" + "20e81e20e91e6a21ea1e20e91e20ea1e6a21eb1e20ea1e20eb1e6a21ec1e20eb1e20ec1e6a21ed1e20ec1e20ed1e6a21ee1e20ed1e20ee1e6a" + "21ef1e20ee1e20ef1e6a21f01e20ef1e20f01e6a21f11e20f01e20f11e6a21f21e20f11e20f21e6a21f31e20f21e20f31e6a21f41e20f31e20" + "f41e6a21f51e20f41e20f51e6a21f61e20f51e20f61e6a21f71e20f61e20f71e6a21f81e20f71e20f81e6a21f91e20f81e20f91e6a21fa1e20" + "f91e20fa1e6a21fb1e20fa1e20fb1e6a21fc1e20fb1e20fc1e6a21fd1e20fc1e20fd1e6a21fe1e20fd1e20fe1e6a21ff1e20fe1e20ff1e6a21" + "801f20ff1e20801f6a21811f20801f20811f6a21821f20811f20821f6a21831f20821f20831f6a21841f20831f20841f6a21851f20841f2085" + "1f6a21861f20851f20861f6a21871f20861f20871f6a21881f20871f20881f6a21891f20881f20891f6a218a1f20891f208a1f6a218b1f208a" + "1f208b1f6a218c1f208b1f208c1f6a218d1f208c1f208d1f6a218e1f208d1f208e1f6a218f1f208e1f208f1f6a21901f208f1f20901f6a2191" + "1f20901f20911f6a21921f20911f20921f6a21931f20921f20931f6a21941f20931f20941f6a21951f20941f20951f6a21961f20951f20961f" + "6a21971f20961f20971f6a21981f20971f20981f6a21991f20981f20991f6a219a1f20991f209a1f6a219b1f209a1f209b1f6a219c1f209b1f" + "209c1f6a219d1f209c1f209d1f6a219e1f209d1f209e1f6a219f1f209e1f209f1f6a21a01f209f1f20a01f6a21a11f20a01f20a11f6a21a21f" + "20a11f20a21f6a21a31f20a21f20a31f6a21a41f20a31f20a41f6a21a51f20a41f20a51f6a21a61f20a51f20a61f6a21a71f20a61f20a71f6a" + "21a81f20a71f20a81f6a21a91f20a81f20a91f6a21aa1f20a91f20aa1f6a21ab1f20aa1f20ab1f6a21ac1f20ab1f20ac1f6a21ad1f20ac1f20" + "ad1f6a21ae1f20ad1f20ae1f6a21af1f20ae1f20af1f6a21b01f20af1f20b01f6a21b11f20b01f20b11f6a21b21f20b11f20b21f6a21b31f20" + "b21f20b31f6a21b41f20b31f20b41f6a21b51f20b41f20b51f6a21b61f20b51f20b61f6a21b71f20b61f20b71f6a21b81f20b71f20b81f6a21" + "b91f20b81f20b91f6a21ba1f20b91f20ba1f6a21bb1f20ba1f20bb1f6a21bc1f20bb1f20bc1f6a21bd1f20bc1f20bd1f6a21be1f20bd1f20be" + "1f6a21bf1f20be1f20bf1f6a21c01f20bf1f20c01f6a21c11f20c01f20c11f6a21c21f20c11f20c21f6a21c31f20c21f20c31f6a21c41f20c3" + "1f20c41f6a21c51f20c41f20c51f6a21c61f20c51f20c61f6a21c71f20c61f20c71f6a21c81f20c71f20c81f6a21c91f20c81f20c91f6a21ca" + "1f20c91f20ca1f6a21cb1f20ca1f20cb1f6a21cc1f20cb1f20cc1f6a21cd1f20cc1f20cd1f6a21ce1f20cd1f20ce1f6a21cf1f20ce1f20cf1f" + "6a21d01f20cf1f20d01f6a21d11f20d01f20d11f6a21d21f20d11f20d21f6a21d31f20d21f20d31f6a21d41f20d31f20d41f6a21d51f20d41f" + "20d51f6a21d61f20d51f20d61f6a21d71f20d61f20d71f6a21d81f20d71f20d81f6a21d91f20d81f20d91f6a21da1f20d91f20da1f6a21db1f" + "20da1f20db1f6a21dc1f20db1f20dc1f6a21dd1f20dc1f20dd1f6a21de1f20dd1f20de1f6a21df1f20de1f20df1f6a21e01f20df1f20e01f6a" + "21e11f20e01f20e11f6a21e21f20e11f20e21f6a21e31f20e21f20e31f6a21e41f20e31f20e41f6a21e51f20e41f20e51f6a21e61f20e51f20" + "e61f6a21e71f20e61f20e71f6a21e81f20e71f20e81f6a21e91f20e81f20e91f6a21ea1f20e91f20ea1f6a21eb1f20ea1f20eb1f6a21ec1f20" + "eb1f20ec1f6a21ed1f20ec1f20ed1f6a21ee1f20ed1f20ee1f6a21ef1f20ee1f20ef1f6a21f01f20ef1f20f01f6a21f11f20f01f20f11f6a21" + "f21f20f11f20f21f6a21f31f20f21f20f31f6a21f41f20f31f20f41f6a21f51f20f41f20f51f6a21f61f20f51f20f61f6a21f71f20f61f20f7" + "1f6a21f81f20f71f20f81f6a21f91f20f81f20f91f6a21fa1f20f91f20fa1f6a21fb1f20fa1f20fb1f6a21fc1f20fb1f20fc1f6a21fd1f20fc" + "1f20fd1f6a21fe1f20fd1f20fe1f6a21ff1f20fe1f20ff1f6a21802020ff1f2080206a2181202080202081206a2182202081202082206a2183" + "202082202083206a2184202083202084206a2185202084202085206a2186202085202086206a2187202086202087206a218820208720208820" + "6a2189202088202089206a218a20208920208a206a218b20208a20208b206a218c20208b20208c206a218d20208c20208d206a218e20208d20" + "208e206a218f20208e20208f206a219020208f202090206a2191202090202091206a2192202091202092206a2193202092202093206a219420" + "2093202094206a2195202094202095206a2196202095202096206a2197202096202097206a2198202097202098206a2199202098202099206a" + "219a20209920209a206a219b20209a20209b206a219c20209b20209c206a219d20209c20209d206a219e20209d20209e206a219f20209e2020" + "9f206a21a020209f2020a0206a21a12020a02020a1206a21a22020a12020a2206a21a32020a22020a3206a21a42020a32020a4206a21a52020" + "a42020a5206a21a62020a52020a6206a21a72020a62020a7206a21a82020a72020a8206a21a92020a82020a9206a21aa2020a92020aa206a21" + "ab2020aa2020ab206a21ac2020ab2020ac206a21ad2020ac2020ad206a21ae2020ad2020ae206a21af2020ae2020af206a21b02020af2020b0" + "206a21b12020b02020b1206a21b22020b12020b2206a21b32020b22020b3206a21b42020b32020b4206a21b52020b42020b5206a21b62020b5" + "2020b6206a21b72020b62020b7206a21b82020b72020b8206a21b92020b82020b9206a21ba2020b92020ba206a21bb2020ba2020bb206a21bc" + "2020bb2020bc206a21bd2020bc2020bd206a21be2020bd2020be206a21bf2020be2020bf206a21c02020bf2020c0206a21c12020c02020c120" + "6a21c22020c12020c2206a21c32020c22020c3206a21c42020c32020c4206a21c52020c42020c5206a21c62020c52020c6206a21c72020c620" + "20c7206a21c82020c72020c8206a21c92020c82020c9206a21ca2020c92020ca206a21cb2020ca2020cb206a21cc2020cb2020cc206a21cd20" + "20cc2020cd206a21ce2020cd2020ce206a21cf2020ce2020cf206a21d02020cf2020d0206a21d12020d02020d1206a21d22020d12020d2206a" + "21d32020d22020d3206a21d42020d32020d4206a21d52020d42020d5206a21d62020d52020d6206a21d72020d62020d7206a21d82020d72020" + "d8206a21d92020d82020d9206a21da2020d92020da206a21db2020da2020db206a21dc2020db2020dc206a21dd2020dc2020dd206a21de2020" + "dd2020de206a21df2020de2020df206a21e02020df2020e0206a21e12020e02020e1206a21e22020e12020e2206a21e32020e22020e3206a21" + "e42020e32020e4206a21e52020e42020e5206a21e62020e52020e6206a21e72020e62020e7206a21e82020e72020e8206a21e92020e82020e9" + "206a21ea2020e92020ea206a21eb2020ea2020eb206a21ec2020eb2020ec206a21ed2020ec2020ed206a21ee2020ed2020ee206a21ef2020ee" + "2020ef206a21f02020ef2020f0206a21f12020f02020f1206a21f22020f12020f2206a21f32020f22020f3206a21f42020f32020f4206a21f5" + "2020f42020f5206a21f62020f52020f6206a21f72020f62020f7206a21f82020f72020f8206a21f92020f82020f9206a21fa2020f92020fa20" + "6a21fb2020fa2020fb206a21fc2020fb2020fc206a21fd2020fc2020fd206a21fe2020fd2020fe206a21ff2020fe2020ff206a21802120ff20" + "2080216a2181212080212081216a2182212081212082216a2183212082212083216a2184212083212084216a2185212084212085216a218621" + "2085212086216a2187212086212087216a2188212087212088216a2189212088212089216a218a21208921208a216a218b21208a21208b216a" + "218c21208b21208c216a218d21208c21208d216a218e21208d21208e216a218f21208e21208f216a219021208f212090216a21912120902120" + "91216a2192212091212092216a2193212092212093216a2194212093212094216a2195212094212095216a2196212095212096216a21972120" + "96212097216a2198212097212098216a2199212098212099216a219a21209921209a216a219b21209a21209b216a219c21209b21209c216a21" + "9d21209c21209d216a219e21209d21209e216a219f21209e21209f216a21a021209f2120a0216a21a12120a02120a1216a21a22120a12120a2" + "216a21a32120a22120a3216a21a42120a32120a4216a21a52120a42120a5216a21a62120a52120a6216a21a72120a62120a7216a21a82120a7" + "2120a8216a21a92120a82120a9216a21aa2120a92120aa216a21ab2120aa2120ab216a21ac2120ab2120ac216a21ad2120ac2120ad216a21ae" + "2120ad2120ae216a21af2120ae2120af216a21b02120af2120b0216a21b12120b02120b1216a21b22120b12120b2216a21b32120b22120b321" + "6a21b42120b32120b4216a21b52120b42120b5216a21b62120b52120b6216a21b72120b62120b7216a21b82120b72120b8216a21b92120b821" + "20b9216a21ba2120b92120ba216a21bb2120ba2120bb216a21bc2120bb2120bc216a21bd2120bc2120bd216a21be2120bd2120be216a21bf21" + "20be2120bf216a21c02120bf2120c0216a21c12120c02120c1216a21c22120c12120c2216a21c32120c22120c3216a21c42120c32120c4216a" + "21c52120c42120c5216a21c62120c52120c6216a21c72120c62120c7216a21c82120c72120c8216a21c92120c82120c9216a21ca2120c92120" + "ca216a21cb2120ca2120cb216a21cc2120cb2120cc216a21cd2120cc2120cd216a21ce2120cd2120ce216a21cf2120ce2120cf216a21d02120" + "cf2120d0216a21d12120d02120d1216a21d22120d12120d2216a21d32120d22120d3216a21d42120d32120d4216a21d52120d42120d5216a21" + "d62120d52120d6216a21d72120d62120d7216a21d82120d72120d8216a21d92120d82120d9216a21da2120d92120da216a21db2120da2120db" + "216a21dc2120db2120dc216a21dd2120dc2120dd216a21de2120dd2120de216a21df2120de2120df216a21e02120df2120e0216a21e12120e0" + "2120e1216a21e22120e12120e2216a21e32120e22120e3216a21e42120e32120e4216a21e52120e42120e5216a21e62120e52120e6216a21e7" + "2120e62120e7216a21e82120e72120e8216a21e92120e82120e9216a21ea2120e92120ea216a21eb2120ea2120eb216a21ec2120eb2120ec21" + "6a21ed2120ec2120ed216a21ee2120ed2120ee216a21ef2120ee2120ef216a21f02120ef2120f0216a21f12120f02120f1216a21f22120f121" + "20f2216a21f32120f22120f3216a21f42120f32120f4216a21f52120f42120f5216a21f62120f52120f6216a21f72120f62120f7216a21f821" + "20f72120f8216a21f92120f82120f9216a21fa2120f92120fa216a21fb2120fa2120fb216a21fc2120fb2120fc216a21fd2120fc2120fd216a" + "21fe2120fd2120fe216a21ff2120fe2120ff216a21802220ff212080226a2181222080222081226a2182222081222082226a21832220822220" + "83226a2184222083222084226a2185222084222085226a2186222085222086226a2187222086222087226a2188222087222088226a21892220" + "88222089226a218a22208922208a226a218b22208a22208b226a218c22208b22208c226a218d22208c22208d226a218e22208d22208e226a21" + "8f22208e22208f226a219022208f222090226a2191222090222091226a2192222091222092226a2193222092222093226a2194222093222094" + "226a2195222094222095226a2196222095222096226a2197222096222097226a2198222097222098226a2199222098222099226a219a222099" + "22209a226a219b22209a22209b226a219c22209b22209c226a219d22209c22209d226a219e22209d22209e226a219f22209e22209f226a21a0" + "22209f2220a0226a21a12220a02220a1226a21a22220a12220a2226a21a32220a22220a3226a21a42220a32220a4226a21a52220a42220a522" + "6a21a62220a52220a6226a21a72220a62220a7226a21a82220a72220a8226a21a92220a82220a9226a21aa2220a92220aa226a21ab2220aa22" + "20ab226a21ac2220ab2220ac226a21ad2220ac2220ad226a21ae2220ad2220ae226a21af2220ae2220af226a21b02220af2220b0226a21b122" + "20b02220b1226a21b22220b12220b2226a21b32220b22220b3226a21b42220b32220b4226a21b52220b42220b5226a21b62220b52220b6226a" + "21b72220b62220b7226a21b82220b72220b8226a21b92220b82220b9226a21ba2220b92220ba226a21bb2220ba2220bb226a21bc2220bb2220" + "bc226a21bd2220bc2220bd226a21be2220bd2220be226a21bf2220be2220bf226a21c02220bf2220c0226a21c12220c02220c1226a21c22220" + "c12220c2226a21c32220c22220c3226a21c42220c32220c4226a21c52220c42220c5226a21c62220c52220c6226a21c72220c62220c7226a21" + "c82220c72220c8226a21c92220c82220c9226a21ca2220c92220ca226a21cb2220ca2220cb226a21cc2220cb2220cc226a21cd2220cc2220cd" + "226a21ce2220cd2220ce226a21cf2220ce2220cf226a21d02220cf2220d0226a21d12220d02220d1226a21d22220d12220d2226a21d32220d2" + "2220d3226a21d42220d32220d4226a21d52220d42220d5226a21d62220d52220d6226a21d72220d62220d7226a21d82220d72220d8226a21d9" + "2220d82220d9226a21da2220d92220da226a21db2220da2220db226a21dc2220db2220dc226a21dd2220dc2220dd226a21de2220dd2220de22" + "6a21df2220de2220df226a21e02220df2220e0226a21e12220e02220e1226a21e22220e12220e2226a21e32220e22220e3226a21e42220e322" + "20e4226a21e52220e42220e5226a21e62220e52220e6226a21e72220e62220e7226a21e82220e72220e8226a21e92220e82220e9226a21ea22" + "20e92220ea226a21eb2220ea2220eb226a21ec2220eb2220ec226a21ed2220ec2220ed226a21ee2220ed2220ee226a21ef2220ee2220ef226a" + "21f02220ef2220f0226a21f12220f02220f1226a21f22220f12220f2226a21f32220f22220f3226a21f42220f32220f4226a21f52220f42220" + "f5226a21f62220f52220f6226a21f72220f62220f7226a21f82220f72220f8226a21f92220f82220f9226a21fa2220f92220fa226a21fb2220" + "fa2220fb226a21fc2220fb2220fc226a21fd2220fc2220fd226a21fe2220fd2220fe226a21ff2220fe2220ff226a21802320ff222080236a21" + "81232080232081236a2182232081232082236a2183232082232083236a2184232083232084236a2185232084232085236a2186232085232086" + "236a2187232086232087236a2188232087232088236a2189232088232089236a218a23208923208a236a218b23208a23208b236a218c23208b" + "23208c236a218d23208c23208d236a218e23208d23208e236a218f23208e23208f236a219023208f232090236a2191232090232091236a2192" + "232091232092236a2193232092232093236a2194232093232094236a2195232094232095236a2196232095232096236a219723209623209723" + "6a2198232097232098236a2199232098232099236a219a23209923209a236a219b23209a23209b236a219c23209b23209c236a219d23209c23" + "209d236a219e23209d23209e236a219f23209e23209f236a21a023209f2320a0236a21a12320a02320a1236a21a22320a12320a2236a21a323" + "20a22320a3236a21a42320a32320a4236a21a52320a42320a5236a21a62320a52320a6236a21a72320a62320a7236a21a82320a72320a8236a" + "21a92320a82320a9236a21aa2320a92320aa236a21ab2320aa2320ab236a21ac2320ab2320ac236a21ad2320ac2320ad236a21ae2320ad2320" + "ae236a21af2320ae2320af236a21b02320af2320b0236a21b12320b02320b1236a21b22320b12320b2236a21b32320b22320b3236a21b42320" + "b32320b4236a21b52320b42320b5236a21b62320b52320b6236a21b72320b62320b7236a21b82320b72320b8236a21b92320b82320b9236a21" + "ba2320b92320ba236a21bb2320ba2320bb236a21bc2320bb2320bc236a21bd2320bc2320bd236a21be2320bd2320be236a21bf2320be2320bf" + "236a21c02320bf2320c0236a21c12320c02320c1236a21c22320c12320c2236a21c32320c22320c3236a21c42320c32320c4236a21c52320c4" + "2320c5236a21c62320c52320c6236a21c72320c62320c7236a21c82320c72320c8236a21c92320c82320c9236a21ca2320c92320ca236a21cb" + "2320ca2320cb236a21cc2320cb2320cc236a21cd2320cc2320cd236a21ce2320cd2320ce236a21cf2320ce2320cf236a21d02320cf2320d023" + "6a21d12320d02320d1236a21d22320d12320d2236a21d32320d22320d3236a21d42320d32320d4236a21d52320d42320d5236a21d62320d523" + "20d6236a21d72320d62320d7236a21d82320d72320d8236a21d92320d82320d9236a21da2320d92320da236a21db2320da2320db236a21dc23" + "20db2320dc236a21dd2320dc2320dd236a21de2320dd2320de236a21df2320de2320df236a21e02320df2320e0236a21e12320e02320e1236a" + "21e22320e12320e2236a21e32320e22320e3236a21e42320e32320e4236a21e52320e42320e5236a21e62320e52320e6236a21e72320e62320" + "e7236a21e82320e72320e8236a21e92320e82320e9236a21ea2320e92320ea236a21eb2320ea2320eb236a21ec2320eb2320ec236a21ed2320" + "ec2320ed236a21ee2320ed2320ee236a21ef2320ee2320ef236a21f02320ef2320f0236a21f12320f02320f1236a21f22320f12320f2236a21" + "f32320f22320f3236a21f42320f32320f4236a21f52320f42320f5236a21f62320f52320f6236a21f72320f62320f7236a21f82320f72320f8" + "236a21f92320f82320f9236a21fa2320f92320fa236a21fb2320fa2320fb236a21fc2320fb2320fc236a21fd2320fc2320fd236a21fe2320fd" + "2320fe236a21ff2320fe2320ff236a21802420ff232080246a2181242080242081246a2182242081242082246a2183242082242083246a2184" + "242083242084246a2185242084242085246a2186242085242086246a2187242086242087246a2188242087242088246a218924208824208924" + "6a218a24208924208a246a218b24208a24208b246a218c24208b24208c246a218d24208c24208d246a218e24208d24208e246a218f24208e24" + "208f246a219024208f242090246a2191242090242091246a2192242091242092246a2193242092242093246a2194242093242094246a219524" + "2094242095246a2196242095242096246a2197242096242097246a2198242097242098246a2199242098242099246a219a24209924209a246a" + "219b24209a24209b246a219c24209b24209c246a219d24209c24209d246a219e24209d24209e246a219f24209e24209f246a21a024209f2420" + "a0246a21a12420a02420a1246a21a22420a12420a2246a21a32420a22420a3246a21a42420a32420a4246a21a52420a42420a5246a21a62420" + "a52420a6246a21a72420a62420a7246a21a82420a72420a8246a21a92420a82420a9246a21aa2420a92420aa246a21ab2420aa2420ab246a21" + "ac2420ab2420ac246a21ad2420ac2420ad246a21ae2420ad2420ae246a21af2420ae2420af246a21b02420af2420b0246a21b12420b02420b1" + "246a21b22420b12420b2246a21b32420b22420b3246a21b42420b32420b4246a21b52420b42420b5246a21b62420b52420b6246a21b72420b6" + "2420b7246a21b82420b72420b8246a21b92420b82420b9246a21ba2420b92420ba246a21bb2420ba2420bb246a21bc2420bb2420bc246a21bd" + "2420bc2420bd246a21be2420bd2420be246a21bf2420be2420bf246a21c02420bf2420c0246a21c12420c02420c1246a21c22420c12420c224" + "6a21c32420c22420c3246a21c42420c32420c4246a21c52420c42420c5246a21c62420c52420c6246a21c72420c62420c7246a21c82420c724" + "20c8246a21c92420c82420c9246a21ca2420c92420ca246a21cb2420ca2420cb246a21cc2420cb2420cc246a21cd2420cc2420cd246a21ce24" + "20cd2420ce246a21cf2420ce2420cf246a21d02420cf2420d0246a21d12420d02420d1246a21d22420d12420d2246a21d32420d22420d3246a" + "21d42420d32420d4246a21d52420d42420d5246a21d62420d52420d6246a21d72420d62420d7246a21d82420d72420d8246a21d92420d82420" + "d9246a21da2420d92420da246a21db2420da2420db246a21dc2420db2420dc246a21dd2420dc2420dd246a21de2420dd2420de246a21df2420" + "de2420df246a21e02420df2420e0246a21e12420e02420e1246a21e22420e12420e2246a21e32420e22420e3246a21e42420e32420e4246a21" + "e52420e42420e5246a21e62420e52420e6246a21e72420e62420e7246a21e82420e72420e8246a21e92420e82420e9246a21ea2420e92420ea" + "246a21eb2420ea2420eb246a21ec2420eb2420ec246a21ed2420ec2420ed246a21ee2420ed2420ee246a21ef2420ee2420ef246a21f02420ef" + "2420f0246a21f12420f02420f1246a21f22420f12420f2246a21f32420f22420f3246a21f42420f32420f4246a21f52420f42420f5246a21f6" + "2420f52420f6246a21f72420f62420f7246a21f82420f72420f8246a21f92420f82420f9246a21fa2420f92420fa246a21fb2420fa2420fb24" + "6a21fc2420fb2420fc246a21fd2420fc2420fd246a21fe2420fd2420fe246a21ff2420fe2420ff246a21802520ff242080256a218125208025" + "2081256a2182252081252082256a2183252082252083256a2184252083252084256a2185252084252085256a2186252085252086256a218725" + "2086252087256a2188252087252088256a2189252088252089256a218a25208925208a256a218b25208a25208b256a218c25208b25208c256a" + "218d25208c25208d256a218e25208d25208e256a218f25208e25208f256a219025208f252090256a2191252090252091256a21922520912520" + "92256a2193252092252093256a2194252093252094256a2195252094252095256a2196252095252096256a2197252096252097256a21982520" + "97252098256a2199252098252099256a219a25209925209a256a219b25209a25209b256a219c25209b25209c256a219d25209c25209d256a21" + "9e25209d25209e256a219f25209e25209f256a21a025209f2520a0256a21a12520a02520a1256a21a22520a12520a2256a21a32520a22520a3" + "256a21a42520a32520a4256a21a52520a42520a5256a21a62520a52520a6256a21a72520a62520a7256a21a82520a72520a8256a21a92520a8" + "2520a9256a21aa2520a92520aa256a21ab2520aa2520ab256a21ac2520ab2520ac256a21ad2520ac2520ad256a21ae2520ad2520ae256a21af" + "2520ae2520af256a21b02520af2520b0256a21b12520b02520b1256a21b22520b12520b2256a21b32520b22520b3256a21b42520b32520b425" + "6a21b52520b42520b5256a21b62520b52520b6256a21b72520b62520b7256a21b82520b72520b8256a21b92520b82520b9256a21ba2520b925" + "20ba256a21bb2520ba2520bb256a21bc2520bb2520bc256a21bd2520bc2520bd256a21be2520bd2520be256a21bf2520be2520bf256a21c025" + "20bf2520c0256a21c12520c02520c1256a21c22520c12520c2256a21c32520c22520c3256a21c42520c32520c4256a21c52520c42520c5256a" + "21c62520c52520c6256a21c72520c62520c7256a21c82520c72520c8256a21c92520c82520c9256a21ca2520c92520ca256a21cb2520ca2520" + "cb256a21cc2520cb2520cc256a21cd2520cc2520cd256a21ce2520cd2520ce256a21cf2520ce2520cf256a21d02520cf2520d0256a21d12520" + "d02520d1256a21d22520d12520d2256a21d32520d22520d3256a21d42520d32520d4256a21d52520d42520d5256a21d62520d52520d6256a21" + "d72520d62520d7256a21d82520d72520d8256a21d92520d82520d9256a21da2520d92520da256a21db2520da2520db256a21dc2520db2520dc" + "256a21dd2520dc2520dd256a21de2520dd2520de256a21df2520de2520df256a21e02520df2520e0256a21e12520e02520e1256a21e22520e1" + "2520e2256a21e32520e22520e3256a21e42520e32520e4256a21e52520e42520e5256a21e62520e52520e6256a21e72520e62520e7256a21e8" + "2520e72520e8256a21e92520e82520e9256a21ea2520e92520ea256a21eb2520ea2520eb256a21ec2520eb2520ec256a21ed2520ec2520ed25" + "6a21ee2520ed2520ee256a21ef2520ee2520ef256a21f02520ef2520f0256a21f12520f02520f1256a21f22520f12520f2256a21f32520f225" + "20f3256a21f42520f32520f4256a21f52520f42520f5256a21f62520f52520f6256a21f72520f62520f7256a21f82520f72520f8256a21f925" + "20f82520f9256a21fa2520f92520fa256a21fb2520fa2520fb256a21fc2520fb2520fc256a21fd2520fc2520fd256a21fe2520fd2520fe256a" + "21ff2520fe2520ff256a21802620ff252080266a2181262080262081266a2182262081262082266a2183262082262083266a21842620832620" + "84266a2185262084262085266a2186262085262086266a2187262086262087266a2188262087262088266a2189262088262089266a218a2620" + "8926208a266a218b26208a26208b266a218c26208b26208c266a218d26208c26208d266a218e26208d26208e266a218f26208e26208f266a21" + "9026208f262090266a2191262090262091266a2192262091262092266a2193262092262093266a2194262093262094266a2195262094262095" + "266a2196262095262096266a2197262096262097266a2198262097262098266a2199262098262099266a219a26209926209a266a219b26209a" + "26209b266a219c26209b26209c266a219d26209c26209d266a219e26209d26209e266a219f26209e26209f266a21a026209f2620a0266a21a1" + "2620a02620a1266a21a22620a12620a2266a21a32620a22620a3266a21a42620a32620a4266a21a52620a42620a5266a21a62620a52620a626" + "6a21a72620a62620a7266a21a82620a72620a8266a21a92620a82620a9266a21aa2620a92620aa266a21ab2620aa2620ab266a21ac2620ab26" + "20ac266a21ad2620ac2620ad266a21ae2620ad2620ae266a21af2620ae2620af266a21b02620af2620b0266a21b12620b02620b1266a21b226" + "20b12620b2266a21b32620b22620b3266a21b42620b32620b4266a21b52620b42620b5266a21b62620b52620b6266a21b72620b62620b7266a" + "21b82620b72620b8266a21b92620b82620b9266a21ba2620b92620ba266a21bb2620ba2620bb266a21bc2620bb2620bc266a21bd2620bc2620" + "bd266a21be2620bd2620be266a21bf2620be2620bf266a21c02620bf2620c0266a21c12620c02620c1266a21c22620c12620c2266a21c32620" + "c22620c3266a21c42620c32620c4266a21c52620c42620c5266a21c62620c52620c6266a21c72620c62620c7266a21c82620c72620c8266a21" + "c92620c82620c9266a21ca2620c92620ca266a21cb2620ca2620cb266a21cc2620cb2620cc266a21cd2620cc2620cd266a21ce2620cd2620ce" + "266a21cf2620ce2620cf266a21d02620cf2620d0266a21d12620d02620d1266a21d22620d12620d2266a21d32620d22620d3266a21d42620d3" + "2620d4266a21d52620d42620d5266a21d62620d52620d6266a21d72620d62620d7266a21d82620d72620d8266a21d92620d82620d9266a21da" + "2620d92620da266a21db2620da2620db266a21dc2620db2620dc266a21dd2620dc2620dd266a21de2620dd2620de266a21df2620de2620df26" + "6a21e02620df2620e0266a21e12620e02620e1266a21e22620e12620e2266a21e32620e22620e3266a21e42620e32620e4266a21e52620e426" + "20e5266a21e62620e52620e6266a21e72620e62620e7266a21e82620e72620e8266a21e92620e82620e9266a21ea2620e92620ea266a21eb26" + "20ea2620eb266a21ec2620eb2620ec266a21ed2620ec2620ed266a21ee2620ed2620ee266a21ef2620ee2620ef266a21f02620ef2620f0266a" + "21f12620f02620f1266a21f22620f12620f2266a21f32620f22620f3266a21f42620f32620f4266a21f52620f42620f5266a21f62620f52620" + "f6266a21f72620f62620f7266a21f82620f72620f8266a21f92620f82620f9266a21fa2620f92620fa266a21fb2620fa2620fb266a21fc2620" + "fb2620fc266a21fd2620fc2620fd266a21fe2620fd2620fe266a21ff2620fe2620ff266a21802720ff262080276a2181272080272081276a21" + "82272081272082276a2183272082272083276a2184272083272084276a2185272084272085276a2186272085272086276a2187272086272087" + "276a2188272087272088276a2189272088272089276a218a27208927208a276a218b27208a27208b276a218c27208b27208c276a218d27208c" + "27208d276a218e27208d27208e276a218f27208e27208f276a219027208f272090276a2191272090272091276a2192272091272092276a2193" + "272092272093276a2194272093272094276a2195272094272095276a2196272095272096276a2197272096272097276a219827209727209827" + "6a2199272098272099276a219a27209927209a276a219b27209a27209b276a219c27209b27209c276a219d27209c27209d276a219e27209d27" + "209e276a219f27209e27209f276a21a027209f2720a0276a21a12720a02720a1276a21a22720a12720a2276a21a32720a22720a3276a21a427" + "20a32720a4276a21a52720a42720a5276a21a62720a52720a6276a21a72720a62720a7276a21a82720a72720a8276a21a92720a82720a9276a" + "21aa2720a92720aa276a21ab2720aa2720ab276a21ac2720ab2720ac276a21ad2720ac2720ad276a21ae2720ad2720ae276a21af2720ae2720" + "af276a21b02720af2720b0276a21b12720b02720b1276a21b22720b12720b2276a21b32720b22720b3276a21b42720b32720b4276a21b52720" + "b42720b5276a21b62720b52720b6276a21b72720b62720b7276a21b82720b72720b8276a21b92720b82720b9276a21ba2720b92720ba276a21" + "bb2720ba2720bb276a21bc2720bb2720bc276a21bd2720bc2720bd276a21be2720bd2720be276a21bf2720be2720bf276a21c02720bf2720c0" + "276a21c12720c02720c1276a21c22720c12720c2276a21c32720c22720c3276a21c42720c32720c4276a21c52720c42720c5276a21c62720c5" + "2720c6276a21c72720c62720c7276a21c82720c72720c8276a21c92720c82720c9276a21ca2720c92720ca276a21cb2720ca2720cb276a21cc" + "2720cb2720cc276a21cd2720cc2720cd276a21ce2720cd2720ce276a21cf2720ce2720cf276a21d02720cf2720d0276a21d12720d02720d127" + "6a21d22720d12720d2276a21d32720d22720d3276a21d42720d32720d4276a21d52720d42720d5276a21d62720d52720d6276a21d72720d627" + "20d7276a21d82720d72720d8276a21d92720d82720d9276a21da2720d92720da276a21db2720da2720db276a21dc2720db2720dc276a21dd27" + "20dc2720dd276a21de2720dd2720de276a21df2720de2720df276a21e02720df2720e0276a21e12720e02720e1276a21e22720e12720e2276a" + "21e32720e22720e3276a21e42720e32720e4276a21e52720e42720e5276a21e62720e52720e6276a21e72720e62720e7276a21e82720e72720" + "e8276a21e92720e82720e9276a21ea2720e92720ea276a21eb2720ea2720eb276a21ec2720eb2720ec276a21ed2720ec2720ed276a21ee2720" + "ed2720ee276a21ef2720ee2720ef276a21f02720ef2720f0276a21f12720f02720f1276a21f22720f12720f2276a21f32720f22720f3276a21" + "f42720f32720f4276a21f52720f42720f5276a21f62720f52720f6276a21f72720f62720f7276a21f82720f72720f8276a21f92720f82720f9" + "276a21fa2720f92720fa276a21fb2720fa2720fb276a21fc2720fb2720fc276a21fd2720fc2720fd276a21fe2720fd2720fe276a21ff2720fe" + "2720ff276a21802820ff272080286a2181282080282081286a2182282081282082286a2183282082282083286a2184282083282084286a2185" + "282084282085286a2186282085282086286a2187282086282087286a2188282087282088286a2189282088282089286a218a28208928208a28" + "6a218b28208a28208b286a218c28208b28208c286a218d28208c28208d286a218e28208d28208e286a218f28208e28208f286a219028208f28" + "2090286a2191282090282091286a2192282091282092286a2193282092282093286a2194282093282094286a2195282094282095286a219628" + "2095282096286a2197282096282097286a2198282097282098286a2199282098282099286a219a28209928209a286a219b28209a28209b286a" + "219c28209b28209c286a219d28209c28209d286a219e28209d28209e286a219f28209e28209f286a21a028209f2820a0286a21a12820a02820" + "a1286a21a22820a12820a2286a21a32820a22820a3286a21a42820a32820a4286a21a52820a42820a5286a21a62820a52820a6286a21a72820" + "a62820a7286a21a82820a72820a8286a21a92820a82820a9286a21aa2820a92820aa286a21ab2820aa2820ab286a21ac2820ab2820ac286a21" + "ad2820ac2820ad286a21ae2820ad2820ae286a21af2820ae2820af286a21b02820af2820b0286a21b12820b02820b1286a21b22820b12820b2" + "286a21b32820b22820b3286a21b42820b32820b4286a21b52820b42820b5286a21b62820b52820b6286a21b72820b62820b7286a21b82820b7" + "2820b8286a21b92820b82820b9286a21ba2820b92820ba286a21bb2820ba2820bb286a21bc2820bb2820bc286a21bd2820bc2820bd286a21be" + "2820bd2820be286a21bf2820be2820bf286a21c02820bf2820c0286a21c12820c02820c1286a21c22820c12820c2286a21c32820c22820c328" + "6a21c42820c32820c4286a21c52820c42820c5286a21c62820c52820c6286a21c72820c62820c7286a21c82820c72820c8286a21c92820c828" + "20c9286a21ca2820c92820ca286a21cb2820ca2820cb286a21cc2820cb2820cc286a21cd2820cc2820cd286a21ce2820cd2820ce286a21cf28" + "20ce2820cf286a21d02820cf2820d0286a21d12820d02820d1286a21d22820d12820d2286a21d32820d22820d3286a21d42820d32820d4286a" + "21d52820d42820d5286a21d62820d52820d6286a21d72820d62820d7286a21d82820d72820d8286a21d92820d82820d9286a21da2820d92820" + "da286a21db2820da2820db286a21dc2820db2820dc286a21dd2820dc2820dd286a21de2820dd2820de286a21df2820de2820df286a21e02820" + "df2820e0286a21e12820e02820e1286a21e22820e12820e2286a21e32820e22820e3286a21e42820e32820e4286a21e52820e42820e5286a21" + "e62820e52820e6286a21e72820e62820e7286a21e82820e72820e8286a21e92820e82820e9286a21ea2820e92820ea286a21eb2820ea2820eb" + "286a21ec2820eb2820ec286a21ed2820ec2820ed286a21ee2820ed2820ee286a21ef2820ee2820ef286a21f02820ef2820f0286a21f12820f0" + "2820f1286a21f22820f12820f2286a21f32820f22820f3286a21f42820f32820f4286a21f52820f42820f5286a21f62820f52820f6286a21f7" + "2820f62820f7286a21f82820f72820f8286a21f92820f82820f9286a21fa2820f92820fa286a21fb2820fa2820fb286a21fc2820fb2820fc28" + "6a21fd2820fc2820fd286a21fe2820fd2820fe286a21ff2820fe2820ff286a21802920ff282080296a2181292080292081296a218229208129" + "2082296a2183292082292083296a2184292083292084296a2185292084292085296a2186292085292086296a2187292086292087296a218829" + "2087292088296a2189292088292089296a218a29208929208a296a218b29208a29208b296a218c29208b29208c296a218d29208c29208d296a" + "218e29208d29208e296a218f29208e29208f296a219029208f292090296a2191292090292091296a2192292091292092296a21932920922920" + "93296a2194292093292094296a2195292094292095296a2196292095292096296a2197292096292097296a2198292097292098296a21992920" + "98292099296a219a29209929209a296a219b29209a29209b296a219c29209b29209c296a219d29209c29209d296a219e29209d29209e296a21" + "9f29209e29209f296a21a029209f2920a0296a21a12920a02920a1296a21a22920a12920a2296a21a32920a22920a3296a21a42920a32920a4" + "296a21a52920a42920a5296a21a62920a52920a6296a21a72920a62920a7296a21a82920a72920a8296a21a92920a82920a9296a21aa2920a9" + "2920aa296a21ab2920aa2920ab296a21ac2920ab2920ac296a21ad2920ac2920ad296a21ae2920ad2920ae296a21af2920ae2920af296a21b0" + "2920af2920b0296a21b12920b02920b1296a21b22920b12920b2296a21b32920b22920b3296a21b42920b32920b4296a21b52920b42920b529" + "6a21b62920b52920b6296a21b72920b62920b7296a21b82920b72920b8296a21b92920b82920b9296a21ba2920b92920ba296a21bb2920ba29" + "20bb296a21bc2920bb2920bc296a21bd2920bc2920bd296a21be2920bd2920be296a21bf2920be2920bf296a21c02920bf2920c0296a21c129" + "20c02920c1296a21c22920c12920c2296a21c32920c22920c3296a21c42920c32920c4296a21c52920c42920c5296a21c62920c52920c6296a" + "21c72920c62920c7296a21c82920c72920c8296a21c92920c82920c9296a21ca2920c92920ca296a21cb2920ca2920cb296a21cc2920cb2920" + "cc296a21cd2920cc2920cd296a21ce2920cd2920ce296a21cf2920ce2920cf296a21d02920cf2920d0296a21d12920d02920d1296a21d22920" + "d12920d2296a21d32920d22920d3296a21d42920d32920d4296a21d52920d42920d5296a21d62920d52920d6296a21d72920d62920d7296a21" + "d82920d72920d8296a21d92920d82920d9296a21da2920d92920da296a21db2920da2920db296a21dc2920db2920dc296a21dd2920dc2920dd" + "296a21de2920dd2920de296a21df2920de2920df296a21e02920df2920e0296a21e12920e02920e1296a21e22920e12920e2296a21e32920e2" + "2920e3296a21e42920e32920e4296a21e52920e42920e5296a21e62920e52920e6296a21e72920e62920e7296a21e82920e72920e8296a21e9" + "2920e82920e9296a21ea2920e92920ea296a21eb2920ea2920eb296a21ec2920eb2920ec296a21ed2920ec2920ed296a21ee2920ed2920ee29" + "6a21ef2920ee2920ef296a21f02920ef2920f0296a21f12920f02920f1296a21f22920f12920f2296a21f32920f22920f3296a21f42920f329" + "20f4296a21f52920f42920f5296a21f62920f52920f6296a21f72920f62920f7296a21f82920f72920f8296a21f92920f82920f9296a21fa29" + "20f92920fa296a21fb2920fa2920fb296a21fc2920fb2920fc296a21fd2920fc2920fd296a21fe2920fd2920fe296a21ff2920fe2920ff296a" + "21802a20ff2920802a6a21812a20802a20812a6a21822a20812a20822a6a21832a20822a20832a6a21842a20832a20842a6a21852a20842a20" + "852a6a21862a20852a20862a6a21872a20862a20872a6a21882a20872a20882a6a21892a20882a20892a6a218a2a20892a208a2a6a218b2a20" + "8a2a208b2a6a218c2a208b2a208c2a6a218d2a208c2a208d2a6a218e2a208d2a208e2a6a218f2a208e2a208f2a6a21902a208f2a20902a6a21" + "912a20902a20912a6a21922a20912a20922a6a21932a20922a20932a6a21942a20932a20942a6a21952a20942a20952a6a21962a20952a2096" + "2a6a21972a20962a20972a6a21982a20972a20982a6a21992a20982a20992a6a219a2a20992a209a2a6a219b2a209a2a209b2a6a219c2a209b" + "2a209c2a6a219d2a209c2a209d2a6a219e2a209d2a209e2a6a219f2a209e2a209f2a6a21a02a209f2a20a02a6a21a12a20a02a20a12a6a21a2" + "2a20a12a20a22a6a21a32a20a22a20a32a6a21a42a20a32a20a42a6a21a52a20a42a20a52a6a21a62a20a52a20a62a6a21a72a20a62a20a72a" + "6a21a82a20a72a20a82a6a21a92a20a82a20a92a6a21aa2a20a92a20aa2a6a21ab2a20aa2a20ab2a6a21ac2a20ab2a20ac2a6a21ad2a20ac2a" + "20ad2a6a21ae2a20ad2a20ae2a6a21af2a20ae2a20af2a6a21b02a20af2a20b02a6a21b12a20b02a20b12a6a21b22a20b12a20b22a6a21b32a" + "20b22a20b32a6a21b42a20b32a20b42a6a21b52a20b42a20b52a6a21b62a20b52a20b62a6a21b72a20b62a20b72a6a21b82a20b72a20b82a6a" + "21b92a20b82a20b92a6a21ba2a20b92a20ba2a6a21bb2a20ba2a20bb2a6a21bc2a20bb2a20bc2a6a21bd2a20bc2a20bd2a6a21be2a20bd2a20" + "be2a6a21bf2a20be2a20bf2a6a21c02a20bf2a20c02a6a21c12a20c02a20c12a6a21c22a20c12a20c22a6a21c32a20c22a20c32a6a21c42a20" + "c32a20c42a6a21c52a20c42a20c52a6a21c62a20c52a20c62a6a21c72a20c62a20c72a6a21c82a20c72a20c82a6a21c92a20c82a20c92a6a21" + "ca2a20c92a20ca2a6a21cb2a20ca2a20cb2a6a21cc2a20cb2a20cc2a6a21cd2a20cc2a20cd2a6a21ce2a20cd2a20ce2a6a21cf2a20ce2a20cf" + "2a6a21d02a20cf2a20d02a6a21d12a20d02a20d12a6a21d22a20d12a20d22a6a21d32a20d22a20d32a6a21d42a20d32a20d42a6a21d52a20d4" + "2a20d52a6a21d62a20d52a20d62a6a21d72a20d62a20d72a6a21d82a20d72a20d82a6a21d92a20d82a20d92a6a21da2a20d92a20da2a6a21db" + "2a20da2a20db2a6a21dc2a20db2a20dc2a6a21dd2a20dc2a20dd2a6a21de2a20dd2a20de2a6a21df2a20de2a20df2a6a21e02a20df2a20e02a" + "6a21e12a20e02a20e12a6a21e22a20e12a20e22a6a21e32a20e22a20e32a6a21e42a20e32a20e42a6a21e52a20e42a20e52a6a21e62a20e52a" + "20e62a6a21e72a20e62a20e72a6a21e82a20e72a20e82a6a21e92a20e82a20e92a6a21ea2a20e92a20ea2a6a21eb2a20ea2a20eb2a6a21ec2a" + "20eb2a20ec2a6a21ed2a20ec2a20ed2a6a21ee2a20ed2a20ee2a6a21ef2a20ee2a20ef2a6a21f02a20ef2a20f02a6a21f12a20f02a20f12a6a" + "21f22a20f12a20f22a6a21f32a20f22a20f32a6a21f42a20f32a20f42a6a21f52a20f42a20f52a6a21f62a20f52a20f62a6a21f72a20f62a20" + "f72a6a21f82a20f72a20f82a6a21f92a20f82a20f92a6a21fa2a20f92a20fa2a6a21fb2a20fa2a20fb2a6a21fc2a20fb2a20fc2a6a21fd2a20" + "fc2a20fd2a6a21fe2a20fd2a20fe2a6a21ff2a20fe2a20ff2a6a21802b20ff2a20802b6a21812b20802b20812b6a21822b20812b20822b6a21" + "832b20822b20832b6a21842b20832b20842b6a21852b20842b20852b6a21862b20852b20862b6a21872b20862b20872b6a21882b20872b2088" + "2b6a21892b20882b20892b6a218a2b20892b208a2b6a218b2b208a2b208b2b6a218c2b208b2b208c2b6a218d2b208c2b208d2b6a218e2b208d" + "2b208e2b6a218f2b208e2b208f2b6a21902b208f2b20902b6a21912b20902b20912b6a21922b20912b20922b6a21932b20922b20932b6a2194" + "2b20932b20942b6a21952b20942b20952b6a21962b20952b20962b6a21972b20962b20972b6a21982b20972b20982b6a21992b20982b20992b" + "6a219a2b20992b209a2b6a219b2b209a2b209b2b6a219c2b209b2b209c2b6a219d2b209c2b209d2b6a219e2b209d2b209e2b6a219f2b209e2b" + "209f2b6a21a02b209f2b20a02b6a21a12b20a02b20a12b6a21a22b20a12b20a22b6a21a32b20a22b20a32b6a21a42b20a32b20a42b6a21a52b" + "20a42b20a52b6a21a62b20a52b20a62b6a21a72b20a62b20a72b6a21a82b20a72b20a82b6a21a92b20a82b20a92b6a21aa2b20a92b20aa2b6a" + "21ab2b20aa2b20ab2b6a21ac2b20ab2b20ac2b6a21ad2b20ac2b20ad2b6a21ae2b20ad2b20ae2b6a21af2b20ae2b20af2b6a21b02b20af2b20" + "b02b6a21b12b20b02b20b12b6a21b22b20b12b20b22b6a21b32b20b22b20b32b6a21b42b20b32b20b42b6a21b52b20b42b20b52b6a21b62b20" + "b52b20b62b6a21b72b20b62b20b72b6a21b82b20b72b20b82b6a21b92b20b82b20b92b6a21ba2b20b92b20ba2b6a21bb2b20ba2b20bb2b6a21" + "bc2b20bb2b20bc2b6a21bd2b20bc2b20bd2b6a21be2b20bd2b20be2b6a21bf2b20be2b20bf2b6a21c02b20bf2b20c02b6a21c12b20c02b20c1" + "2b6a21c22b20c12b20c22b6a21c32b20c22b20c32b6a21c42b20c32b20c42b6a21c52b20c42b20c52b6a21c62b20c52b20c62b6a21c72b20c6" + "2b20c72b6a21c82b20c72b20c82b6a21c92b20c82b20c92b6a21ca2b20c92b20ca2b6a21cb2b20ca2b20cb2b6a21cc2b20cb2b20cc2b6a21cd" + "2b20cc2b20cd2b6a21ce2b20cd2b20ce2b6a21cf2b20ce2b20cf2b6a21d02b20cf2b20d02b6a21d12b20d02b20d12b6a21d22b20d12b20d22b" + "6a21d32b20d22b20d32b6a21d42b20d32b20d42b6a21d52b20d42b20d52b6a21d62b20d52b20d62b6a21d72b20d62b20d72b6a21d82b20d72b" + "20d82b6a21d92b20d82b20d92b6a21da2b20d92b20da2b6a21db2b20da2b20db2b6a21dc2b20db2b20dc2b6a21dd2b20dc2b20dd2b6a21de2b" + "20dd2b20de2b6a21df2b20de2b20df2b6a21e02b20df2b20e02b6a21e12b20e02b20e12b6a21e22b20e12b20e22b6a21e32b20e22b20e32b6a" + "21e42b20e32b20e42b6a21e52b20e42b20e52b6a21e62b20e52b20e62b6a21e72b20e62b20e72b6a21e82b20e72b20e82b6a21e92b20e82b20" + "e92b6a21ea2b20e92b20ea2b6a21eb2b20ea2b20eb2b6a21ec2b20eb2b20ec2b6a21ed2b20ec2b20ed2b6a21ee2b20ed2b20ee2b6a21ef2b20" + "ee2b20ef2b6a21f02b20ef2b20f02b6a21f12b20f02b20f12b6a21f22b20f12b20f22b6a21f32b20f22b20f32b6a21f42b20f32b20f42b6a21" + "f52b20f42b20f52b6a21f62b20f52b20f62b6a21f72b20f62b20f72b6a21f82b20f72b20f82b6a21f92b20f82b20f92b6a21fa2b20f92b20fa" + "2b6a21fb2b20fa2b20fb2b6a21fc2b20fb2b20fc2b6a21fd2b20fc2b20fd2b6a21fe2b20fd2b20fe2b6a21ff2b20fe2b20ff2b6a21802c20ff" + "2b20802c6a21812c20802c20812c6a21822c20812c20822c6a21832c20822c20832c6a21842c20832c20842c6a21852c20842c20852c6a2186" + "2c20852c20862c6a21872c20862c20872c6a21882c20872c20882c6a21892c20882c20892c6a218a2c20892c208a2c6a218b2c208a2c208b2c" + "6a218c2c208b2c208c2c6a218d2c208c2c208d2c6a218e2c208d2c208e2c6a218f2c208e2c208f2c6a21902c208f2c20902c6a21912c20902c" + "20912c6a21922c20912c20922c6a21932c20922c20932c6a21942c20932c20942c6a21952c20942c20952c6a21962c20952c20962c6a21972c" + "20962c20972c6a21982c20972c20982c6a21992c20982c20992c6a219a2c20992c209a2c6a219b2c209a2c209b2c6a219c2c209b2c209c2c6a" + "219d2c209c2c209d2c6a219e2c209d2c209e2c6a219f2c209e2c209f2c6a21a02c209f2c20a02c6a21a12c20a02c20a12c6a21a22c20a12c20" + "a22c6a21a32c20a22c20a32c6a21a42c20a32c20a42c6a21a52c20a42c20a52c6a21a62c20a52c20a62c6a21a72c20a62c20a72c6a21a82c20" + "a72c20a82c6a21a92c20a82c20a92c6a21aa2c20a92c20aa2c6a21ab2c20aa2c20ab2c6a21ac2c20ab2c20ac2c6a21ad2c20ac2c20ad2c6a21" + "ae2c20ad2c20ae2c6a21af2c20ae2c20af2c6a21b02c20af2c20b02c6a21b12c20b02c20b12c6a21b22c20b12c20b22c6a21b32c20b22c20b3" + "2c6a21b42c20b32c20b42c6a21b52c20b42c20b52c6a21b62c20b52c20b62c6a21b72c20b62c20b72c6a21b82c20b72c20b82c6a21b92c20b8" + "2c20b92c6a21ba2c20b92c20ba2c6a21bb2c20ba2c20bb2c6a21bc2c20bb2c20bc2c6a21bd2c20bc2c20bd2c6a21be2c20bd2c20be2c6a21bf" + "2c20be2c20bf2c6a21c02c20bf2c20c02c6a21c12c20c02c20c12c6a21c22c20c12c20c22c6a21c32c20c22c20c32c6a21c42c20c32c20c42c" + "6a21c52c20c42c20c52c6a21c62c20c52c20c62c6a21c72c20c62c20c72c6a21c82c20c72c20c82c6a21c92c20c82c20c92c6a21ca2c20c92c" + "20ca2c6a21cb2c20ca2c20cb2c6a21cc2c20cb2c20cc2c6a21cd2c20cc2c20cd2c6a21ce2c20cd2c20ce2c6a21cf2c20ce2c20cf2c6a21d02c" + "20cf2c20d02c6a21d12c20d02c20d12c6a21d22c20d12c20d22c6a21d32c20d22c20d32c6a21d42c20d32c20d42c6a21d52c20d42c20d52c6a" + "21d62c20d52c20d62c6a21d72c20d62c20d72c6a21d82c20d72c20d82c6a21d92c20d82c20d92c6a21da2c20d92c20da2c6a21db2c20da2c20" + "db2c6a21dc2c20db2c20dc2c6a21dd2c20dc2c20dd2c6a21de2c20dd2c20de2c6a21df2c20de2c20df2c6a21e02c20df2c20e02c6a21e12c20" + "e02c20e12c6a21e22c20e12c20e22c6a21e32c20e22c20e32c6a21e42c20e32c20e42c6a21e52c20e42c20e52c6a21e62c20e52c20e62c6a21" + "e72c20e62c20e72c6a21e82c20e72c20e82c6a21e92c20e82c20e92c6a21ea2c20e92c20ea2c6a21eb2c20ea2c20eb2c6a21ec2c20eb2c20ec" + "2c6a21ed2c20ec2c20ed2c6a21ee2c20ed2c20ee2c6a21ef2c20ee2c20ef2c6a21f02c20ef2c20f02c6a21f12c20f02c20f12c6a21f22c20f1" + "2c20f22c6a21f32c20f22c20f32c6a21f42c20f32c20f42c6a21f52c20f42c20f52c6a21f62c20f52c20f62c6a21f72c20f62c20f72c6a21f8" + "2c20f72c20f82c6a21f92c20f82c20f92c6a21fa2c20f92c20fa2c6a21fb2c20fa2c20fb2c6a21fc2c20fb2c20fc2c6a21fd2c20fc2c20fd2c" + "6a21fe2c20fd2c20fe2c6a21ff2c20fe2c20ff2c6a21802d20ff2c20802d6a21812d20802d20812d6a21822d20812d20822d6a21832d20822d" + "20832d6a21842d20832d20842d6a21852d20842d20852d6a21862d20852d20862d6a21872d20862d20872d6a21882d20872d20882d6a21892d" + "20882d20892d6a218a2d20892d208a2d6a218b2d208a2d208b2d6a218c2d208b2d208c2d6a218d2d208c2d208d2d6a218e2d208d2d208e2d6a" + "218f2d208e2d208f2d6a21902d208f2d20902d6a21912d20902d20912d6a21922d20912d20922d6a21932d20922d20932d6a21942d20932d20" + "942d6a21952d20942d20952d6a21962d20952d20962d6a21972d20962d20972d6a21982d20972d20982d6a21992d20982d20992d6a219a2d20" + "992d209a2d6a219b2d209a2d209b2d6a219c2d209b2d209c2d6a219d2d209c2d209d2d6a219e2d209d2d209e2d6a219f2d209e2d209f2d6a21" + "a02d209f2d20a02d6a21a12d20a02d20a12d6a21a22d20a12d20a22d6a21a32d20a22d20a32d6a21a42d20a32d20a42d6a21a52d20a42d20a5" + "2d6a21a62d20a52d20a62d6a21a72d20a62d20a72d6a21a82d20a72d20a82d6a21a92d20a82d20a92d6a21aa2d20a92d20aa2d6a21ab2d20aa" + "2d20ab2d6a21ac2d20ab2d20ac2d6a21ad2d20ac2d20ad2d6a21ae2d20ad2d20ae2d6a21af2d20ae2d20af2d6a21b02d20af2d20b02d6a21b1" + "2d20b02d20b12d6a21b22d20b12d20b22d6a21b32d20b22d20b32d6a21b42d20b32d20b42d6a21b52d20b42d20b52d6a21b62d20b52d20b62d" + "6a21b72d20b62d20b72d6a21b82d20b72d20b82d6a21b92d20b82d20b92d6a21ba2d20b92d20ba2d6a21bb2d20ba2d20bb2d6a21bc2d20bb2d" + "20bc2d6a21bd2d20bc2d20bd2d6a21be2d20bd2d20be2d6a21bf2d20be2d20bf2d6a21c02d20bf2d20c02d6a21c12d20c02d20c12d6a21c22d" + "20c12d20c22d6a21c32d20c22d20c32d6a21c42d20c32d20c42d6a21c52d20c42d20c52d6a21c62d20c52d20c62d6a21c72d20c62d20c72d6a" + "21c82d20c72d20c82d6a21c92d20c82d20c92d6a21ca2d20c92d20ca2d6a21cb2d20ca2d20cb2d6a21cc2d20cb2d20cc2d6a21cd2d20cc2d20" + "cd2d6a21ce2d20cd2d20ce2d6a21cf2d20ce2d20cf2d6a21d02d20cf2d20d02d6a21d12d20d02d20d12d6a21d22d20d12d20d22d6a21d32d20" + "d22d20d32d6a21d42d20d32d20d42d6a21d52d20d42d20d52d6a21d62d20d52d20d62d6a21d72d20d62d20d72d6a21d82d20d72d20d82d6a21" + "d92d20d82d20d92d6a21da2d20d92d20da2d6a21db2d20da2d20db2d6a21dc2d20db2d20dc2d6a21dd2d20dc2d20dd2d6a21de2d20dd2d20de" + "2d6a21df2d20de2d20df2d6a21e02d20df2d20e02d6a21e12d20e02d20e12d6a21e22d20e12d20e22d6a21e32d20e22d20e32d6a21e42d20e3" + "2d20e42d6a21e52d20e42d20e52d6a21e62d20e52d20e62d6a21e72d20e62d20e72d6a21e82d20e72d20e82d6a21e92d20e82d20e92d6a21ea" + "2d20e92d20ea2d6a21eb2d20ea2d20eb2d6a21ec2d20eb2d20ec2d6a21ed2d20ec2d20ed2d6a21ee2d20ed2d20ee2d6a21ef2d20ee2d20ef2d" + "6a21f02d20ef2d20f02d6a21f12d20f02d20f12d6a21f22d20f12d20f22d6a21f32d20f22d20f32d6a21f42d20f32d20f42d6a21f52d20f42d" + "20f52d6a21f62d20f52d20f62d6a21f72d20f62d20f72d6a21f82d20f72d20f82d6a21f92d20f82d20f92d6a21fa2d20f92d20fa2d6a21fb2d" + "20fa2d20fb2d6a21fc2d20fb2d20fc2d6a21fd2d20fc2d20fd2d6a21fe2d20fd2d20fe2d6a21ff2d20fe2d20ff2d6a21802e20ff2d20802e6a" + "21812e20802e20812e6a21822e20812e20822e6a21832e20822e20832e6a21842e20832e20842e6a21852e20842e20852e6a21862e20852e20" + "862e6a21872e20862e20872e6a21882e20872e20882e6a21892e20882e20892e6a218a2e20892e208a2e6a218b2e208a2e208b2e6a218c2e20" + "8b2e208c2e6a218d2e208c2e208d2e6a218e2e208d2e208e2e6a218f2e208e2e208f2e6a21902e208f2e20902e6a21912e20902e20912e6a21" + "922e20912e20922e6a21932e20922e20932e6a21942e20932e20942e6a21952e20942e20952e6a21962e20952e20962e6a21972e20962e2097" + "2e6a21982e20972e20982e6a21992e20982e20992e6a219a2e20992e209a2e6a219b2e209a2e209b2e6a219c2e209b2e209c2e6a219d2e209c" + "2e209d2e6a219e2e209d2e209e2e6a219f2e209e2e209f2e6a21a02e209f2e20a02e6a21a12e20a02e20a12e6a21a22e20a12e20a22e6a21a3" + "2e20a22e20a32e6a21a42e20a32e20a42e6a21a52e20a42e20a52e6a21a62e20a52e20a62e6a21a72e20a62e20a72e6a21a82e20a72e20a82e" + "6a21a92e20a82e20a92e6a21aa2e20a92e20aa2e6a21ab2e20aa2e20ab2e6a21ac2e20ab2e20ac2e6a21ad2e20ac2e20ad2e6a21ae2e20ad2e" + "20ae2e6a21af2e20ae2e20af2e6a21b02e20af2e20b02e6a21b12e20b02e20b12e6a21b22e20b12e20b22e6a21b32e20b22e20b32e6a21b42e" + "20b32e20b42e6a21b52e20b42e20b52e6a21b62e20b52e20b62e6a21b72e20b62e20b72e6a21b82e20b72e20b82e6a21b92e20b82e20b92e6a" + "21ba2e20b92e20ba2e6a21bb2e20ba2e20bb2e6a21bc2e20bb2e20bc2e6a21bd2e20bc2e20bd2e6a21be2e20bd2e20be2e6a21bf2e20be2e20" + "bf2e6a21c02e20bf2e20c02e6a21c12e20c02e20c12e6a21c22e20c12e20c22e6a21c32e20c22e20c32e6a21c42e20c32e20c42e6a21c52e20" + "c42e20c52e6a21c62e20c52e20c62e6a21c72e20c62e20c72e6a21c82e20c72e20c82e6a21c92e20c82e20c92e6a21ca2e20c92e20ca2e6a21" + "cb2e20ca2e20cb2e6a21cc2e20cb2e20cc2e6a21cd2e20cc2e20cd2e6a21ce2e20cd2e20ce2e6a21cf2e20ce2e20cf2e6a21d02e20cf2e20d0" + "2e6a21d12e20d02e20d12e6a21d22e20d12e20d22e6a21d32e20d22e20d32e6a21d42e20d32e20d42e6a21d52e20d42e20d52e6a21d62e20d5" + "2e20d62e6a21d72e20d62e20d72e6a21d82e20d72e20d82e6a21d92e20d82e20d92e6a21da2e20d92e20da2e6a21db2e20da2e20db2e6a21dc" + "2e20db2e20dc2e6a21dd2e20dc2e20dd2e6a21de2e20dd2e20de2e6a21df2e20de2e20df2e6a21e02e20df2e20e02e6a21e12e20e02e20e12e" + "6a21e22e20e12e20e22e6a21e32e20e22e20e32e6a21e42e20e32e20e42e6a21e52e20e42e20e52e6a21e62e20e52e20e62e6a21e72e20e62e" + "20e72e6a21e82e20e72e20e82e6a21e92e20e82e20e92e6a21ea2e20e92e20ea2e6a21eb2e20ea2e20eb2e6a21ec2e20eb2e20ec2e6a21ed2e" + "20ec2e20ed2e6a21ee2e20ed2e20ee2e6a21ef2e20ee2e20ef2e6a21f02e20ef2e20f02e6a21f12e20f02e20f12e6a21f22e20f12e20f22e6a" + "21f32e20f22e20f32e6a21f42e20f32e20f42e6a21f52e20f42e20f52e6a21f62e20f52e20f62e6a21f72e20f62e20f72e6a21f82e20f72e20" + "f82e6a21f92e20f82e20f92e6a21fa2e20f92e20fa2e6a21fb2e20fa2e20fb2e6a21fc2e20fb2e20fc2e6a21fd2e20fc2e20fd2e6a21fe2e20" + "fd2e20fe2e6a21ff2e20fe2e20ff2e6a21802f20ff2e20802f6a21812f20802f20812f6a21822f20812f20822f6a21832f20822f20832f6a21" + "842f20832f20842f6a21852f20842f20852f6a21862f20852f20862f6a21872f20862f20872f6a21882f20872f20882f6a21892f20882f2089" + "2f6a218a2f20892f208a2f6a218b2f208a2f208b2f6a218c2f208b2f208c2f6a218d2f208c2f208d2f6a218e2f208d2f208e2f6a218f2f208e" + "2f208f2f6a21902f208f2f20902f6a21912f20902f20912f6a21922f20912f20922f6a21932f20922f20932f6a21942f20932f20942f6a2195" + "2f20942f20952f6a21962f20952f20962f6a21972f20962f20972f6a21982f20972f20982f6a21992f20982f20992f6a219a2f20992f209a2f" + "6a219b2f209a2f209b2f6a219c2f209b2f209c2f6a219d2f209c2f209d2f6a219e2f209d2f209e2f6a219f2f209e2f209f2f6a21a02f209f2f" + "20a02f6a21a12f20a02f20a12f6a21a22f20a12f20a22f6a21a32f20a22f20a32f6a21a42f20a32f20a42f6a21a52f20a42f20a52f6a21a62f" + "20a52f20a62f6a21a72f20a62f20a72f6a21a82f20a72f20a82f6a21a92f20a82f20a92f6a21aa2f20a92f20aa2f6a21ab2f20aa2f20ab2f6a" + "21ac2f20ab2f20ac2f6a21ad2f20ac2f20ad2f6a21ae2f20ad2f20ae2f6a21af2f20ae2f20af2f6a21b02f20af2f20b02f6a21b12f20b02f20" + "b12f6a21b22f20b12f20b22f6a21b32f20b22f20b32f6a21b42f20b32f20b42f6a21b52f20b42f20b52f6a21b62f20b52f20b62f6a21b72f20" + "b62f20b72f6a21b82f20b72f20b82f6a21b92f20b82f20b92f6a21ba2f20b92f20ba2f6a21bb2f20ba2f20bb2f6a21bc2f20bb2f20bc2f6a21" + "bd2f20bc2f20bd2f6a21be2f20bd2f20be2f6a21bf2f20be2f20bf2f6a21c02f20bf2f20c02f6a21c12f20c02f20c12f6a21c22f20c12f20c2" + "2f6a21c32f20c22f20c32f6a21c42f20c32f20c42f6a21c52f20c42f20c52f6a21c62f20c52f20c62f6a21c72f20c62f20c72f6a21c82f20c7" + "2f20c82f6a21c92f20c82f20c92f6a21ca2f20c92f20ca2f6a21cb2f20ca2f20cb2f6a21cc2f20cb2f20cc2f6a21cd2f20cc2f20cd2f6a21ce" + "2f20cd2f20ce2f6a21cf2f20ce2f20cf2f6a21d02f20cf2f20d02f6a21d12f20d02f20d12f6a21d22f20d12f20d22f6a21d32f20d22f20d32f" + "6a21d42f20d32f20d42f6a21d52f20d42f20d52f6a21d62f20d52f20d62f6a21d72f20d62f20d72f6a21d82f20d72f20d82f6a21d92f20d82f" + "20d92f6a21da2f20d92f20da2f6a21db2f20da2f20db2f6a21dc2f20db2f20dc2f6a21dd2f20dc2f20dd2f6a21de2f20dd2f20de2f6a21df2f" + "20de2f20df2f6a21e02f20df2f20e02f6a21e12f20e02f20e12f6a21e22f20e12f20e22f6a21e32f20e22f20e32f6a21e42f20e32f20e42f6a" + "21e52f20e42f20e52f6a21e62f20e52f20e62f6a21e72f20e62f20e72f6a21e82f20e72f20e82f6a21e92f20e82f20e92f6a21ea2f20e92f20" + "ea2f6a21eb2f20ea2f20eb2f6a21ec2f20eb2f20ec2f6a21ed2f20ec2f20ed2f6a21ee2f20ed2f20ee2f6a21ef2f20ee2f20ef2f6a21f02f20" + "ef2f20f02f6a21f12f20f02f20f12f6a21f22f20f12f20f22f6a21f32f20f22f20f32f6a21f42f20f32f20f42f6a21f52f20f42f20f52f6a21" + "f62f20f52f20f62f6a21f72f20f62f20f72f6a21f82f20f72f20f82f6a21f92f20f82f20f92f6a21fa2f20f92f20fa2f6a21fb2f20fa2f20fb" + "2f6a21fc2f20fb2f20fc2f6a21fd2f20fc2f20fd2f6a21fe2f20fd2f20fe2f6a21ff2f20fe2f20ff2f6a21803020ff2f2080306a2181302080" + "302081306a2182302081302082306a2183302082302083306a2184302083302084306a2185302084302085306a2186302085302086306a2187" + "302086302087306a2188302087302088306a2189302088302089306a218a30208930208a306a218b30208a30208b306a218c30208b30208c30" + "6a218d30208c30208d306a218e30208d30208e306a218f30208e30208f306a219030208f302090306a2191302090302091306a219230209130" + "2092306a2193302092302093306a2194302093302094306a2195302094302095306a2196302095302096306a2197302096302097306a219830" + "2097302098306a2199302098302099306a219a30209930209a306a219b30209a30209b306a219c30209b30209c306a219d30209c30209d306a" + "219e30209d30209e306a219f30209e30209f306a21a030209f3020a0306a21a13020a03020a1306a21a23020a13020a2306a21a33020a23020" + "a3306a21a43020a33020a4306a21a53020a43020a5306a21a63020a53020a6306a21a73020a63020a7306a21a83020a73020a8306a21a93020" + "a83020a9306a21aa3020a93020aa306a21ab3020aa3020ab306a21ac3020ab3020ac306a21ad3020ac3020ad306a21ae3020ad3020ae306a21" + "af3020ae3020af306a21b03020af3020b0306a21b13020b03020b1306a21b23020b13020b2306a21b33020b23020b3306a21b43020b33020b4" + "306a21b53020b43020b5306a21b63020b53020b6306a21b73020b63020b7306a21b83020b73020b8306a21b93020b83020b9306a21ba3020b9" + "3020ba306a21bb3020ba3020bb306a21bc3020bb3020bc306a21bd3020bc3020bd306a21be3020bd3020be306a21bf3020be3020bf306a21c0" + "3020bf3020c0306a21c13020c03020c1306a21c23020c13020c2306a21c33020c23020c3306a21c43020c33020c4306a21c53020c43020c530" + "6a21c63020c53020c6306a21c73020c63020c7306a21c83020c73020c8306a21c93020c83020c9306a21ca3020c93020ca306a21cb3020ca30" + "20cb306a21cc3020cb3020cc306a21cd3020cc3020cd306a21ce3020cd3020ce306a21cf3020ce3020cf306a21d03020cf3020d0306a21d130" + "20d03020d1306a21d23020d13020d2306a21d33020d23020d3306a21d43020d33020d4306a21d53020d43020d5306a21d63020d53020d6306a" + "21d73020d63020d7306a21d83020d73020d8306a21d93020d83020d9306a21da3020d93020da306a21db3020da3020db306a21dc3020db3020" + "dc306a21dd3020dc3020dd306a21de3020dd3020de306a21df3020de3020df306a21e03020df3020e0306a21e13020e03020e1306a21e23020" + "e13020e2306a21e33020e23020e3306a21e43020e33020e4306a21e53020e43020e5306a21e63020e53020e6306a21e73020e63020e7306a21" + "e83020e73020e8306a21e93020e83020e9306a21ea3020e93020ea306a21eb3020ea3020eb306a21ec3020eb3020ec306a21ed3020ec3020ed" + "306a21ee3020ed3020ee306a21ef3020ee3020ef306a21f03020ef3020f0306a21f13020f03020f1306a21f23020f13020f2306a21f33020f2" + "3020f3306a21f43020f33020f4306a21f53020f43020f5306a21f63020f53020f6306a21f73020f63020f7306a21f83020f73020f8306a21f9" + "3020f83020f9306a21fa3020f93020fa306a21fb3020fa3020fb306a21fc3020fb3020fc306a21fd3020fc3020fd306a21fe3020fd3020fe30" + "6a21ff3020fe3020ff306a21803120ff302080316a2181312080312081316a2182312081312082316a2183312082312083316a218431208331" + "2084316a2185312084312085316a2186312085312086316a2187312086312087316a2188312087312088316a2189312088312089316a218a31" + "208931208a316a218b31208a31208b316a218c31208b31208c316a218d31208c31208d316a218e31208d31208e316a218f31208e31208f316a" + "219031208f312090316a2191312090312091316a2192312091312092316a2193312092312093316a2194312093312094316a21953120943120" + "95316a2196312095312096316a2197312096312097316a2198312097312098316a2199312098312099316a219a31209931209a316a219b3120" + "9a31209b316a219c31209b31209c316a219d31209c31209d316a219e31209d31209e316a219f31209e31209f316a21a031209f3120a0316a21" + "a13120a03120a1316a21a23120a13120a2316a21a33120a23120a3316a21a43120a33120a4316a21a53120a43120a5316a21a63120a53120a6" + "316a21a73120a63120a7316a21a83120a73120a8316a21a93120a83120a9316a21aa3120a93120aa316a21ab3120aa3120ab316a21ac3120ab" + "3120ac316a21ad3120ac3120ad316a21ae3120ad3120ae316a21af3120ae3120af316a21b03120af3120b0316a21b13120b03120b1316a21b2" + "3120b13120b2316a21b33120b23120b3316a21b43120b33120b4316a21b53120b43120b5316a21b63120b53120b6316a21b73120b63120b731" + "6a21b83120b73120b8316a21b93120b83120b9316a21ba3120b93120ba316a21bb3120ba3120bb316a21bc3120bb3120bc316a21bd3120bc31" + "20bd316a21be3120bd3120be316a21bf3120be3120bf316a21c03120bf3120c0316a21c13120c03120c1316a21c23120c13120c2316a21c331" + "20c23120c3316a21c43120c33120c4316a21c53120c43120c5316a21c63120c53120c6316a21c73120c63120c7316a21c83120c73120c8316a" + "21c93120c83120c9316a21ca3120c93120ca316a21cb3120ca3120cb316a21cc3120cb3120cc316a21cd3120cc3120cd316a21ce3120cd3120" + "ce316a21cf3120ce3120cf316a21d03120cf3120d0316a21d13120d03120d1316a21d23120d13120d2316a21d33120d23120d3316a21d43120" + "d33120d4316a21d53120d43120d5316a21d63120d53120d6316a21d73120d63120d7316a21d83120d73120d8316a21d93120d83120d9316a21" + "da3120d93120da316a21db3120da3120db316a21dc3120db3120dc316a21dd3120dc3120dd316a21de3120dd3120de316a21df3120de3120df" + "316a21e03120df3120e0316a21e13120e03120e1316a21e23120e13120e2316a21e33120e23120e3316a21e43120e33120e4316a21e53120e4" + "3120e5316a21e63120e53120e6316a21e73120e63120e7316a21e83120e73120e8316a21e93120e83120e9316a21ea3120e93120ea316a21eb" + "3120ea3120eb316a21ec3120eb3120ec316a21ed3120ec3120ed316a21ee3120ed3120ee316a21ef3120ee3120ef316a21f03120ef3120f031" + "6a21f13120f03120f1316a21f23120f13120f2316a21f33120f23120f3316a21f43120f33120f4316a21f53120f43120f5316a21f63120f531" + "20f6316a21f73120f63120f7316a21f83120f73120f8316a21f93120f83120f9316a21fa3120f93120fa316a21fb3120fa3120fb316a21fc31" + "20fb3120fc316a21fd3120fc3120fd316a21fe3120fd3120fe316a21ff3120fe3120ff316a21803220ff312080326a2181322080322081326a" + "2182322081322082326a2183322082322083326a2184322083322084326a2185322084322085326a2186322085322086326a21873220863220" + "87326a2188322087322088326a2189322088322089326a218a32208932208a326a218b32208a32208b326a218c32208b32208c326a218d3220" + "8c32208d326a218e32208d32208e326a218f32208e32208f326a219032208f322090326a2191322090322091326a2192322091322092326a21" + "93322092322093326a2194322093322094326a2195322094322095326a2196322095322096326a2197322096322097326a2198322097322098" + "326a2199322098322099326a219a32209932209a326a219b32209a32209b326a219c32209b32209c326a219d32209c32209d326a219e32209d" + "32209e326a219f32209e32209f326a21a032209f3220a0326a21a13220a03220a1326a21a23220a13220a2326a21a33220a23220a3326a21a4" + "3220a33220a4326a21a53220a43220a5326a21a63220a53220a6326a21a73220a63220a7326a21a83220a73220a8326a21a93220a83220a932" + "6a21aa3220a93220aa326a21ab3220aa3220ab326a21ac3220ab3220ac326a21ad3220ac3220ad326a21ae3220ad3220ae326a21af3220ae32" + "20af326a21b03220af3220b0326a21b13220b03220b1326a21b23220b13220b2326a21b33220b23220b3326a21b43220b33220b4326a21b532" + "20b43220b5326a21b63220b53220b6326a21b73220b63220b7326a21b83220b73220b8326a21b93220b83220b9326a21ba3220b93220ba326a" + "21bb3220ba3220bb326a21bc3220bb3220bc326a21bd3220bc3220bd326a21be3220bd3220be326a21bf3220be3220bf326a21c03220bf3220" + "c0326a21c13220c03220c1326a21c23220c13220c2326a21c33220c23220c3326a21c43220c33220c4326a21c53220c43220c5326a21c63220" + "c53220c6326a21c73220c63220c7326a21c83220c73220c8326a21c93220c83220c9326a21ca3220c93220ca326a21cb3220ca3220cb326a21" + "cc3220cb3220cc326a21cd3220cc3220cd326a21ce3220cd3220ce326a21cf3220ce3220cf326a21d03220cf3220d0326a21d13220d03220d1" + "326a21d23220d13220d2326a21d33220d23220d3326a21d43220d33220d4326a21d53220d43220d5326a21d63220d53220d6326a21d73220d6" + "3220d7326a21d83220d73220d8326a21d93220d83220d9326a21da3220d93220da326a21db3220da3220db326a21dc3220db3220dc326a21dd" + "3220dc3220dd326a21de3220dd3220de326a21df3220de3220df326a21e03220df3220e0326a21e13220e03220e1326a21e23220e13220e232" + "6a21e33220e23220e3326a21e43220e33220e4326a21e53220e43220e5326a21e63220e53220e6326a21e73220e63220e7326a21e83220e732" + "20e8326a21e93220e83220e9326a21ea3220e93220ea326a21eb3220ea3220eb326a21ec3220eb3220ec326a21ed3220ec3220ed326a21ee32" + "20ed3220ee326a21ef3220ee3220ef326a21f03220ef3220f0326a21f13220f03220f1326a21f23220f13220f2326a21f33220f23220f3326a" + "21f43220f33220f4326a21f53220f43220f5326a21f63220f53220f6326a21f73220f63220f7326a21f83220f73220f8326a21f93220f83220" + "f9326a21fa3220f93220fa326a21fb3220fa3220fb326a21fc3220fb3220fc326a21fd3220fc3220fd326a21fe3220fd3220fe326a21ff3220" + "fe3220ff326a21803320ff322080336a2181332080332081336a2182332081332082336a2183332082332083336a2184332083332084336a21" + "85332084332085336a2186332085332086336a2187332086332087336a2188332087332088336a2189332088332089336a218a33208933208a" + "336a218b33208a33208b336a218c33208b33208c336a218d33208c33208d336a218e33208d33208e336a218f33208e33208f336a219033208f" + "332090336a2191332090332091336a2192332091332092336a2193332092332093336a2194332093332094336a2195332094332095336a2196" + "332095332096336a2197332096332097336a2198332097332098336a2199332098332099336a219a33209933209a336a219b33209a33209b33" + "6a219c33209b33209c336a219d33209c33209d336a219e33209d33209e336a219f33209e33209f336a21a033209f3320a0336a21a13320a033" + "20a1336a21a23320a13320a2336a21a33320a23320a3336a21a43320a33320a4336a21a53320a43320a5336a21a63320a53320a6336a21a733" + "20a63320a7336a21a83320a73320a8336a21a93320a83320a9336a21aa3320a93320aa336a21ab3320aa3320ab336a21ac3320ab3320ac336a" + "21ad3320ac3320ad336a21ae3320ad3320ae336a21af3320ae3320af336a21b03320af3320b0336a21b13320b03320b1336a21b23320b13320" + "b2336a21b33320b23320b3336a21b43320b33320b4336a21b53320b43320b5336a21b63320b53320b6336a21b73320b63320b7336a21b83320" + "b73320b8336a21b93320b83320b9336a21ba3320b93320ba336a21bb3320ba3320bb336a21bc3320bb3320bc336a21bd3320bc3320bd336a21" + "be3320bd3320be336a21bf3320be3320bf336a21c03320bf3320c0336a21c13320c03320c1336a21c23320c13320c2336a21c33320c23320c3" + "336a21c43320c33320c4336a21c53320c43320c5336a21c63320c53320c6336a21c73320c63320c7336a21c83320c73320c8336a21c93320c8" + "3320c9336a21ca3320c93320ca336a21cb3320ca3320cb336a21cc3320cb3320cc336a21cd3320cc3320cd336a21ce3320cd3320ce336a21cf" + "3320ce3320cf336a21d03320cf3320d0336a21d13320d03320d1336a21d23320d13320d2336a21d33320d23320d3336a21d43320d33320d433" + "6a21d53320d43320d5336a21d63320d53320d6336a21d73320d63320d7336a21d83320d73320d8336a21d93320d83320d9336a21da3320d933" + "20da336a21db3320da3320db336a21dc3320db3320dc336a21dd3320dc3320dd336a21de3320dd3320de336a21df3320de3320df336a21e033" + "20df3320e0336a21e13320e03320e1336a21e23320e13320e2336a21e33320e23320e3336a21e43320e33320e4336a21e53320e43320e5336a" + "21e63320e53320e6336a21e73320e63320e7336a21e83320e73320e8336a21e93320e83320e9336a21ea3320e93320ea336a21eb3320ea3320" + "eb336a21ec3320eb3320ec336a21ed3320ec3320ed336a21ee3320ed3320ee336a21ef3320ee3320ef336a21f03320ef3320f0336a21f13320" + "f03320f1336a21f23320f13320f2336a21f33320f23320f3336a21f43320f33320f4336a21f53320f43320f5336a21f63320f53320f6336a21" + "f73320f63320f7336a21f83320f73320f8336a21f93320f83320f9336a21fa3320f93320fa336a21fb3320fa3320fb336a21fc3320fb3320fc" + "336a21fd3320fc3320fd336a21fe3320fd3320fe336a21ff3320fe3320ff336a21803420ff332080346a2181342080342081346a2182342081" + "342082346a2183342082342083346a2184342083342084346a2185342084342085346a2186342085342086346a2187342086342087346a2188" + "342087342088346a2189342088342089346a218a34208934208a346a218b34208a34208b346a218c34208b34208c346a218d34208c34208d34" + "6a218e34208d34208e346a218f34208e34208f346a219034208f342090346a2191342090342091346a2192342091342092346a219334209234" + "2093346a2194342093342094346a2195342094342095346a2196342095342096346a2197342096342097346a2198342097342098346a219934" + "2098342099346a219a34209934209a346a219b34209a34209b346a219c34209b34209c346a219d34209c34209d346a219e34209d34209e346a" + "219f34209e34209f346a21a034209f3420a0346a21a13420a03420a1346a21a23420a13420a2346a21a33420a23420a3346a21a43420a33420" + "a4346a21a53420a43420a5346a21a63420a53420a6346a21a73420a63420a7346a21a83420a73420a8346a21a93420a83420a9346a21aa3420" + "a93420aa346a21ab3420aa3420ab346a21ac3420ab3420ac346a21ad3420ac3420ad346a21ae3420ad3420ae346a21af3420ae3420af346a21" + "b03420af3420b0346a21b13420b03420b1346a21b23420b13420b2346a21b33420b23420b3346a21b43420b33420b4346a21b53420b43420b5" + "346a21b63420b53420b6346a21b73420b63420b7346a21b83420b73420b8346a21b93420b83420b9346a21ba3420b93420ba346a21bb3420ba" + "3420bb346a21bc3420bb3420bc346a21bd3420bc3420bd346a21be3420bd3420be346a21bf3420be3420bf346a21c03420bf3420c0346a21c1" + "3420c03420c1346a21c23420c13420c2346a21c33420c23420c3346a21c43420c33420c4346a21c53420c43420c5346a21c63420c53420c634" + "6a21c73420c63420c7346a21c83420c73420c8346a21c93420c83420c9346a21ca3420c93420ca346a21cb3420ca3420cb346a21cc3420cb34" + "20cc346a21cd3420cc3420cd346a21ce3420cd3420ce346a21cf3420ce3420cf346a21d03420cf3420d0346a21d13420d03420d1346a21d234" + "20d13420d2346a21d33420d23420d3346a21d43420d33420d4346a21d53420d43420d5346a21d63420d53420d6346a21d73420d63420d7346a" + "21d83420d73420d8346a21d93420d83420d9346a21da3420d93420da346a21db3420da3420db346a21dc3420db3420dc346a21dd3420dc3420" + "dd346a21de3420dd3420de346a21df3420de3420df346a21e03420df3420e0346a21e13420e03420e1346a21e23420e13420e2346a21e33420" + "e23420e3346a21e43420e33420e4346a21e53420e43420e5346a21e63420e53420e6346a21e73420e63420e7346a21e83420e73420e8346a21" + "e93420e83420e9346a21ea3420e93420ea346a21eb3420ea3420eb346a21ec3420eb3420ec346a21ed3420ec3420ed346a21ee3420ed3420ee" + "346a21ef3420ee3420ef346a21f03420ef3420f0346a21f13420f03420f1346a21f23420f13420f2346a21f33420f23420f3346a21f43420f3" + "3420f4346a21f53420f43420f5346a21f63420f53420f6346a21f73420f63420f7346a21f83420f73420f8346a21f93420f83420f9346a21fa" + "3420f93420fa346a21fb3420fa3420fb346a21fc3420fb3420fc346a21fd3420fc3420fd346a21fe3420fd3420fe346a21ff3420fe3420ff34" + "6a21803520ff342080356a2181352080352081356a2182352081352082356a2183352082352083356a2184352083352084356a218535208435" + "2085356a2186352085352086356a2187352086352087356a2188352087352088356a2189352088352089356a218a35208935208a356a218b35" + "208a35208b356a218c35208b35208c356a218d35208c35208d356a218e35208d35208e356a218f35208e35208f356a219035208f352090356a" + "2191352090352091356a2192352091352092356a2193352092352093356a2194352093352094356a2195352094352095356a21963520953520" + "96356a2197352096352097356a2198352097352098356a2199352098352099356a219a35209935209a356a219b35209a35209b356a219c3520" + "9b35209c356a219d35209c35209d356a219e35209d35209e356a219f35209e35209f356a21a035209f3520a0356a21a13520a03520a1356a21" + "a23520a13520a2356a21a33520a23520a3356a21a43520a33520a4356a21a53520a43520a5356a21a63520a53520a6356a21a73520a63520a7" + "356a21a83520a73520a8356a21a93520a83520a9356a21aa3520a93520aa356a21ab3520aa3520ab356a21ac3520ab3520ac356a21ad3520ac" + "3520ad356a21ae3520ad3520ae356a21af3520ae3520af356a21b03520af3520b0356a21b13520b03520b1356a21b23520b13520b2356a21b3" + "3520b23520b3356a21b43520b33520b4356a21b53520b43520b5356a21b63520b53520b6356a21b73520b63520b7356a21b83520b73520b835" + "6a21b93520b83520b9356a21ba3520b93520ba356a21bb3520ba3520bb356a21bc3520bb3520bc356a21bd3520bc3520bd356a21be3520bd35" + "20be356a21bf3520be3520bf356a21c03520bf3520c0356a21c13520c03520c1356a21c23520c13520c2356a21c33520c23520c3356a21c435" + "20c33520c4356a21c53520c43520c5356a21c63520c53520c6356a21c73520c63520c7356a21c83520c73520c8356a21c93520c83520c9356a" + "21ca3520c93520ca356a21cb3520ca3520cb356a21cc3520cb3520cc356a21cd3520cc3520cd356a21ce3520cd3520ce356a21cf3520ce3520" + "cf356a21d03520cf3520d0356a21d13520d03520d1356a21d23520d13520d2356a21d33520d23520d3356a21d43520d33520d4356a21d53520" + "d43520d5356a21d63520d53520d6356a21d73520d63520d7356a21d83520d73520d8356a21d93520d83520d9356a21da3520d93520da356a21" + "db3520da3520db356a21dc3520db3520dc356a21dd3520dc3520dd356a21de3520dd3520de356a21df3520de3520df356a21e03520df3520e0" + "356a21e13520e03520e1356a21e23520e13520e2356a21e33520e23520e3356a21e43520e33520e4356a21e53520e43520e5356a21e63520e5" + "3520e6356a21e73520e63520e7356a21e83520e73520e8356a21e93520e83520e9356a21ea3520e93520ea356a21eb3520ea3520eb356a21ec" + "3520eb3520ec356a21ed3520ec3520ed356a21ee3520ed3520ee356a21ef3520ee3520ef356a21f03520ef3520f0356a21f13520f03520f135" + "6a21f23520f13520f2356a21f33520f23520f3356a21f43520f33520f4356a21f53520f43520f5356a21f63520f53520f6356a21f73520f635" + "20f7356a21f83520f73520f8356a21f93520f83520f9356a21fa3520f93520fa356a21fb3520fa3520fb356a21fc3520fb3520fc356a21fd35" + "20fc3520fd356a21fe3520fd3520fe356a21ff3520fe3520ff356a21803620ff352080366a2181362080362081366a2182362081362082366a" + "2183362082362083366a2184362083362084366a2185362084362085366a2186362085362086366a2187362086362087366a21883620873620" + "88366a2189362088362089366a218a36208936208a366a218b36208a36208b366a218c36208b36208c366a218d36208c36208d366a218e3620" + "8d36208e366a218f36208e36208f366a219036208f362090366a2191362090362091366a2192362091362092366a2193362092362093366a21" + "94362093362094366a2195362094362095366a2196362095362096366a2197362096362097366a2198362097362098366a2199362098362099" + "366a219a36209936209a366a219b36209a36209b366a219c36209b36209c366a219d36209c36209d366a219e36209d36209e366a219f36209e" + "36209f366a21a036209f3620a0366a21a13620a03620a1366a21a23620a13620a2366a21a33620a23620a3366a21a43620a33620a4366a21a5" + "3620a43620a5366a21a63620a53620a6366a21a73620a63620a7366a21a83620a73620a8366a21a93620a83620a9366a21aa3620a93620aa36" + "6a21ab3620aa3620ab366a21ac3620ab3620ac366a21ad3620ac3620ad366a21ae3620ad3620ae366a21af3620ae3620af366a21b03620af36" + "20b0366a21b13620b03620b1366a21b23620b13620b2366a21b33620b23620b3366a21b43620b33620b4366a21b53620b43620b5366a21b636" + "20b53620b6366a21b73620b63620b7366a21b83620b73620b8366a21b93620b83620b9366a21ba3620b93620ba366a21bb3620ba3620bb366a" + "21bc3620bb3620bc366a21bd3620bc3620bd366a21be3620bd3620be366a21bf3620be3620bf366a21c03620bf3620c0366a21c13620c03620" + "c1366a21c23620c13620c2366a21c33620c23620c3366a21c43620c33620c4366a21c53620c43620c5366a21c63620c53620c6366a21c73620" + "c63620c7366a21c83620c73620c8366a21c93620c83620c9366a21ca3620c93620ca366a21cb3620ca3620cb366a21cc3620cb3620cc366a21" + "cd3620cc3620cd366a21ce3620cd3620ce366a21cf3620ce3620cf366a21d03620cf3620d0366a21d13620d03620d1366a21d23620d13620d2" + "366a21d33620d23620d3366a21d43620d33620d4366a21d53620d43620d5366a21d63620d53620d6366a21d73620d63620d7366a21d83620d7" + "3620d8366a21d93620d83620d9366a21da3620d93620da366a21db3620da3620db366a21dc3620db3620dc366a21dd3620dc3620dd366a21de" + "3620dd3620de366a21df3620de3620df366a21e03620df3620e0366a21e13620e03620e1366a21e23620e13620e2366a21e33620e23620e336" + "6a21e43620e33620e4366a21e53620e43620e5366a21e63620e53620e6366a21e73620e63620e7366a21e83620e73620e8366a21e93620e836" + "20e9366a21ea3620e93620ea366a21eb3620ea3620eb366a21ec3620eb3620ec366a21ed3620ec3620ed366a21ee3620ed3620ee366a21ef36" + "20ee3620ef366a21f03620ef3620f0366a21f13620f03620f1366a21f23620f13620f2366a21f33620f23620f3366a21f43620f33620f4366a" + "21f53620f43620f5366a21f63620f53620f6366a21f73620f63620f7366a21f83620f73620f8366a21f93620f83620f9366a21fa3620f93620" + "fa366a21fb3620fa3620fb366a21fc3620fb3620fc366a21fd3620fc3620fd366a21fe3620fd3620fe366a21ff3620fe3620ff366a21803720" + "ff362080376a2181372080372081376a2182372081372082376a2183372082372083376a2184372083372084376a2185372084372085376a21" + "86372085372086376a2187372086372087376a2188372087372088376a2189372088372089376a218a37208937208a376a218b37208a37208b" + "376a218c37208b37208c376a218d37208c37208d376a218e37208d37208e376a218f37208e37208f376a219037208f372090376a2191372090" + "372091376a2192372091372092376a2193372092372093376a2194372093372094376a2195372094372095376a2196372095372096376a2197" + "372096372097376a2198372097372098376a2199372098372099376a219a37209937209a376a219b37209a37209b376a219c37209b37209c37" + "6a219d37209c37209d376a219e37209d37209e376a219f37209e37209f376a21a037209f3720a0376a21a13720a03720a1376a21a23720a137" + "20a2376a21a33720a23720a3376a21a43720a33720a4376a21a53720a43720a5376a21a63720a53720a6376a21a73720a63720a7376a21a837" + "20a73720a8376a21a93720a83720a9376a21aa3720a93720aa376a21ab3720aa3720ab376a21ac3720ab3720ac376a21ad3720ac3720ad376a" + "21ae3720ad3720ae376a21af3720ae3720af376a21b03720af3720b0376a21b13720b03720b1376a21b23720b13720b2376a21b33720b23720" + "b3376a21b43720b33720b4376a21b53720b43720b5376a21b63720b53720b6376a21b73720b63720b7376a21b83720b73720b8376a21b93720" + "b83720b9376a21ba3720b93720ba376a21bb3720ba3720bb376a21bc3720bb3720bc376a21bd3720bc3720bd376a21be3720bd3720be376a21" + "bf3720be3720bf376a21c03720bf3720c0376a21c13720c03720c1376a21c23720c13720c2376a21c33720c23720c3376a21c43720c33720c4" + "376a21c53720c43720c5376a21c63720c53720c6376a21c73720c63720c7376a21c83720c73720c8376a21c93720c83720c9376a21ca3720c9" + "3720ca376a21cb3720ca3720cb376a21cc3720cb3720cc376a21cd3720cc3720cd376a21ce3720cd3720ce376a21cf3720ce3720cf376a21d0" + "3720cf3720d0376a21d13720d03720d1376a21d23720d13720d2376a21d33720d23720d3376a21d43720d33720d4376a21d53720d43720d537" + "6a21d63720d53720d6376a21d73720d63720d7376a21d83720d73720d8376a21d93720d83720d9376a21da3720d93720da376a21db3720da37" + "20db376a21dc3720db3720dc376a21dd3720dc3720dd376a21de3720dd3720de376a21df3720de3720df376a21e03720df3720e0376a21e137" + "20e03720e1376a21e23720e13720e2376a21e33720e23720e3376a21e43720e33720e4376a21e53720e43720e5376a21e63720e53720e6376a" + "21e73720e63720e7376a21e83720e73720e8376a21e93720e83720e9376a21ea3720e93720ea376a21eb3720ea3720eb376a21ec3720eb3720" + "ec376a21ed3720ec3720ed376a21ee3720ed3720ee376a21ef3720ee3720ef376a21f03720ef3720f0376a21f13720f03720f1376a21f23720" + "f13720f2376a21f33720f23720f3376a21f43720f33720f4376a21f53720f43720f5376a21f63720f53720f6376a21f73720f63720f7376a21" + "f83720f73720f8376a21f93720f83720f9376a21fa3720f93720fa376a21fb3720fa3720fb376a21fc3720fb3720fc376a21fd3720fc3720fd" + "376a21fe3720fd3720fe376a21ff3720fe3720ff376a21803820ff372080386a2181382080382081386a2182382081382082386a2183382082" + "382083386a2184382083382084386a2185382084382085386a2186382085382086386a2187382086382087386a2188382087382088386a2189" + "382088382089386a218a38208938208a386a218b38208a38208b386a218c38208b38208c386a218d38208c38208d386a218e38208d38208e38" + "6a218f38208e38208f386a219038208f382090386a2191382090382091386a2192382091382092386a2193382092382093386a219438209338" + "2094386a2195382094382095386a2196382095382096386a2197382096382097386a2198382097382098386a2199382098382099386a219a38" + "209938209a386a219b38209a38209b386a219c38209b38209c386a219d38209c38209d386a219e38209d38209e386a219f38209e38209f386a" + "21a038209f3820a0386a21a13820a03820a1386a21a23820a13820a2386a21a33820a23820a3386a21a43820a33820a4386a21a53820a43820" + "a5386a21a63820a53820a6386a21a73820a63820a7386a21a83820a73820a8386a21a93820a83820a9386a21aa3820a93820aa386a21ab3820" + "aa3820ab386a21ac3820ab3820ac386a21ad3820ac3820ad386a21ae3820ad3820ae386a21af3820ae3820af386a21b03820af3820b0386a21" + "b13820b03820b1386a21b23820b13820b2386a21b33820b23820b3386a21b43820b33820b4386a21b53820b43820b5386a21b63820b53820b6" + "386a21b73820b63820b7386a21b83820b73820b8386a21b93820b83820b9386a21ba3820b93820ba386a21bb3820ba3820bb386a21bc3820bb" + "3820bc386a21bd3820bc3820bd386a21be3820bd3820be386a21bf3820be3820bf386a21c03820bf3820c0386a21c13820c03820c1386a21c2" + "3820c13820c2386a21c33820c23820c3386a21c43820c33820c4386a21c53820c43820c5386a21c63820c53820c6386a21c73820c63820c738" + "6a21c83820c73820c8386a21c93820c83820c9386a21ca3820c93820ca386a21cb3820ca3820cb386a21cc3820cb3820cc386a21cd3820cc38" + "20cd386a21ce3820cd3820ce386a21cf3820ce3820cf386a21d03820cf3820d0386a21d13820d03820d1386a21d23820d13820d2386a21d338" + "20d23820d3386a21d43820d33820d4386a21d53820d43820d5386a21d63820d53820d6386a21d73820d63820d7386a21d83820d73820d8386a" + "21d93820d83820d9386a21da3820d93820da386a21db3820da3820db386a21dc3820db3820dc386a21dd3820dc3820dd386a21de3820dd3820" + "de386a21df3820de3820df386a21e03820df3820e0386a21e13820e03820e1386a21e23820e13820e2386a21e33820e23820e3386a21e43820" + "e33820e4386a21e53820e43820e5386a21e63820e53820e6386a21e73820e63820e7386a21e83820e73820e8386a21e93820e83820e9386a21" + "ea3820e93820ea386a21eb3820ea3820eb386a21ec3820eb3820ec386a21ed3820ec3820ed386a21ee3820ed3820ee386a21ef3820ee3820ef" + "386a21f03820ef3820f0386a21f13820f03820f1386a21f23820f13820f2386a21f33820f23820f3386a21f43820f33820f4386a21f53820f4" + "3820f5386a21f63820f53820f6386a21f73820f63820f7386a21f83820f73820f8386a21f93820f83820f9386a21fa3820f93820fa386a21fb" + "3820fa3820fb386a21fc3820fb3820fc386a21fd3820fc3820fd386a21fe3820fd3820fe386a21ff3820fe3820ff386a21803920ff38208039" + "6a2181392080392081396a2182392081392082396a2183392082392083396a2184392083392084396a2185392084392085396a218639208539" + "2086396a2187392086392087396a2188392087392088396a2189392088392089396a218a39208939208a396a218b39208a39208b396a218c39" + "208b39208c396a218d39208c39208d396a218e39208d39208e396a218f39208e39208f396a219039208f392090396a2191392090392091396a" + "2192392091392092396a2193392092392093396a2194392093392094396a2195392094392095396a2196392095392096396a21973920963920" + "97396a2198392097392098396a2199392098392099396a219a39209939209a396a219b39209a39209b396a219c39209b39209c396a219d3920" + "9c39209d396a219e39209d39209e396a219f39209e39209f396a21a039209f3920a0396a21a13920a03920a1396a21a23920a13920a2396a21" + "a33920a23920a3396a21a43920a33920a4396a21a53920a43920a5396a21a63920a53920a6396a21a73920a63920a7396a21a83920a73920a8" + "396a21a93920a83920a9396a21aa3920a93920aa396a21ab3920aa3920ab396a21ac3920ab3920ac396a21ad3920ac3920ad396a21ae3920ad" + "3920ae396a21af3920ae3920af396a21b03920af3920b0396a21b13920b03920b1396a21b23920b13920b2396a21b33920b23920b3396a21b4" + "3920b33920b4396a21b53920b43920b5396a21b63920b53920b6396a21b73920b63920b7396a21b83920b73920b8396a21b93920b83920b939" + "6a21ba3920b93920ba396a21bb3920ba3920bb396a21bc3920bb3920bc396a21bd3920bc3920bd396a21be3920bd3920be396a21bf3920be39" + "20bf396a21c03920bf3920c0396a21c13920c03920c1396a21c23920c13920c2396a21c33920c23920c3396a21c43920c33920c4396a21c539" + "20c43920c5396a21c63920c53920c6396a21c73920c63920c7396a21c83920c73920c8396a21c93920c83920c9396a21ca3920c93920ca396a" + "21cb3920ca3920cb396a21cc3920cb3920cc396a21cd3920cc3920cd396a21ce3920cd3920ce396a21cf3920ce3920cf396a21d03920cf3920" + "d0396a21d13920d03920d1396a21d23920d13920d2396a21d33920d23920d3396a21d43920d33920d4396a21d53920d43920d5396a21d63920" + "d53920d6396a21d73920d63920d7396a21d83920d73920d8396a21d93920d83920d9396a21da3920d93920da396a21db3920da3920db396a21" + "dc3920db3920dc396a21dd3920dc3920dd396a21de3920dd3920de396a21df3920de3920df396a21e03920df3920e0396a21e13920e03920e1" + "396a21e23920e13920e2396a21e33920e23920e3396a21e43920e33920e4396a21e53920e43920e5396a21e63920e53920e6396a21e73920e6" + "3920e7396a21e83920e73920e8396a21e93920e83920e9396a21ea3920e93920ea396a21eb3920ea3920eb396a21ec3920eb3920ec396a21ed" + "3920ec3920ed396a21ee3920ed3920ee396a21ef3920ee3920ef396a21f03920ef3920f0396a21f13920f03920f1396a21f23920f13920f239" + "6a21f33920f23920f3396a21f43920f33920f4396a21f53920f43920f5396a21f63920f53920f6396a21f73920f63920f7396a21f83920f739" + "20f8396a21f93920f83920f9396a21fa3920f93920fa396a21fb3920fa3920fb396a21fc3920fb3920fc396a21fd3920fc3920fd396a21fe39" + "20fd3920fe396a21ff3920fe3920ff396a21803a20ff3920803a6a21813a20803a20813a6a21823a20813a20823a6a21833a20823a20833a6a" + "21843a20833a20843a6a21853a20843a20853a6a21863a20853a20863a6a21873a20863a20873a6a21883a20873a20883a6a21893a20883a20" + "893a6a218a3a20893a208a3a6a218b3a208a3a208b3a6a218c3a208b3a208c3a6a218d3a208c3a208d3a6a218e3a208d3a208e3a6a218f3a20" + "8e3a208f3a6a21903a208f3a20903a6a21913a20903a20913a6a21923a20913a20923a6a21933a20923a20933a6a21943a20933a20943a6a21" + "953a20943a20953a6a21963a20953a20963a6a21973a20963a20973a6a21983a20973a20983a6a21993a20983a20993a6a219a3a20993a209a" + "3a6a219b3a209a3a209b3a6a219c3a209b3a209c3a6a219d3a209c3a209d3a6a219e3a209d3a209e3a6a219f3a209e3a209f3a6a21a03a209f" + "3a20a03a6a21a13a20a03a20a13a6a21a23a20a13a20a23a6a21a33a20a23a20a33a6a21a43a20a33a20a43a6a21a53a20a43a20a53a6a21a6" + "3a20a53a20a63a6a21a73a20a63a20a73a6a21a83a20a73a20a83a6a21a93a20a83a20a93a6a21aa3a20a93a20aa3a6a21ab3a20aa3a20ab3a" + "6a21ac3a20ab3a20ac3a6a21ad3a20ac3a20ad3a6a21ae3a20ad3a20ae3a6a21af3a20ae3a20af3a6a21b03a20af3a20b03a6a21b13a20b03a" + "20b13a6a21b23a20b13a20b23a6a21b33a20b23a20b33a6a21b43a20b33a20b43a6a21b53a20b43a20b53a6a21b63a20b53a20b63a6a21b73a" + "20b63a20b73a6a21b83a20b73a20b83a6a21b93a20b83a20b93a6a21ba3a20b93a20ba3a6a21bb3a20ba3a20bb3a6a21bc3a20bb3a20bc3a6a" + "21bd3a20bc3a20bd3a6a21be3a20bd3a20be3a6a21bf3a20be3a20bf3a6a21c03a20bf3a20c03a6a21c13a20c03a20c13a6a21c23a20c13a20" + "c23a6a21c33a20c23a20c33a6a21c43a20c33a20c43a6a21c53a20c43a20c53a6a21c63a20c53a20c63a6a21c73a20c63a20c73a6a21c83a20" + "c73a20c83a6a21c93a20c83a20c93a6a21ca3a20c93a20ca3a6a21cb3a20ca3a20cb3a6a21cc3a20cb3a20cc3a6a21cd3a20cc3a20cd3a6a21" + "ce3a20cd3a20ce3a6a21cf3a20ce3a20cf3a6a21d03a20cf3a20d03a6a21d13a20d03a20d13a6a21d23a20d13a20d23a6a21d33a20d23a20d3" + "3a6a21d43a20d33a20d43a6a21d53a20d43a20d53a6a21d63a20d53a20d63a6a21d73a20d63a20d73a6a21d83a20d73a20d83a6a21d93a20d8" + "3a20d93a6a21da3a20d93a20da3a6a21db3a20da3a20db3a6a21dc3a20db3a20dc3a6a21dd3a20dc3a20dd3a6a21de3a20dd3a20de3a6a21df" + "3a20de3a20df3a6a21e03a20df3a20e03a6a21e13a20e03a20e13a6a21e23a20e13a20e23a6a21e33a20e23a20e33a6a21e43a20e33a20e43a" + "6a21e53a20e43a20e53a6a21e63a20e53a20e63a6a21e73a20e63a20e73a6a21e83a20e73a20e83a6a21e93a20e83a20e93a6a21ea3a20e93a" + "20ea3a6a21eb3a20ea3a20eb3a6a21ec3a20eb3a20ec3a6a21ed3a20ec3a20ed3a6a21ee3a20ed3a20ee3a6a21ef3a20ee3a20ef3a6a21f03a" + "20ef3a20f03a6a21f13a20f03a20f13a6a21f23a20f13a20f23a6a21f33a20f23a20f33a6a21f43a20f33a20f43a6a21f53a20f43a20f53a6a" + "21f63a20f53a20f63a6a21f73a20f63a20f73a6a21f83a20f73a20f83a6a21f93a20f83a20f93a6a21fa3a20f93a20fa3a6a21fb3a20fa3a20" + "fb3a6a21fc3a20fb3a20fc3a6a21fd3a20fc3a20fd3a6a21fe3a20fd3a20fe3a6a21ff3a20fe3a20ff3a6a21803b20ff3a20803b6a21813b20" + "803b20813b6a21823b20813b20823b6a21833b20823b20833b6a21843b20833b20843b6a21853b20843b20853b6a21863b20853b20863b6a21" + "873b20863b20873b6a21883b20873b20883b6a21893b20883b20893b6a218a3b20893b208a3b6a218b3b208a3b208b3b6a218c3b208b3b208c" + "3b6a218d3b208c3b208d3b6a218e3b208d3b208e3b6a218f3b208e3b208f3b6a21903b208f3b20903b6a21913b20903b20913b6a21923b2091" + "3b20923b6a21933b20923b20933b6a21943b20933b20943b6a21953b20943b20953b6a21963b20953b20963b6a21973b20963b20973b6a2198" + "3b20973b20983b6a21993b20983b20993b6a219a3b20993b209a3b6a219b3b209a3b209b3b6a219c3b209b3b209c3b6a219d3b209c3b209d3b" + "6a219e3b209d3b209e3b6a219f3b209e3b209f3b6a21a03b209f3b20a03b6a21a13b20a03b20a13b6a21a23b20a13b20a23b6a21a33b20a23b" + "20a33b6a21a43b20a33b20a43b6a21a53b20a43b20a53b6a21a63b20a53b20a63b6a21a73b20a63b20a73b6a21a83b20a73b20a83b6a21a93b" + "20a83b20a93b6a21aa3b20a93b20aa3b6a21ab3b20aa3b20ab3b6a21ac3b20ab3b20ac3b6a21ad3b20ac3b20ad3b6a21ae3b20ad3b20ae3b6a" + "21af3b20ae3b20af3b6a21b03b20af3b20b03b6a21b13b20b03b20b13b6a21b23b20b13b20b23b6a21b33b20b23b20b33b6a21b43b20b33b20" + "b43b6a21b53b20b43b20b53b6a21b63b20b53b20b63b6a21b73b20b63b20b73b6a21b83b20b73b20b83b6a21b93b20b83b20b93b6a21ba3b20" + "b93b20ba3b6a21bb3b20ba3b20bb3b6a21bc3b20bb3b20bc3b6a21bd3b20bc3b20bd3b6a21be3b20bd3b20be3b6a21bf3b20be3b20bf3b6a21" + "c03b20bf3b20c03b6a21c13b20c03b20c13b6a21c23b20c13b20c23b6a21c33b20c23b20c33b6a21c43b20c33b20c43b6a21c53b20c43b20c5" + "3b6a21c63b20c53b20c63b6a21c73b20c63b20c73b6a21c83b20c73b20c83b6a21c93b20c83b20c93b6a21ca3b20c93b20ca3b6a21cb3b20ca" + "3b20cb3b6a21cc3b20cb3b20cc3b6a21cd3b20cc3b20cd3b6a21ce3b20cd3b20ce3b6a21cf3b20ce3b20cf3b6a21d03b20cf3b20d03b6a21d1" + "3b20d03b20d13b6a21d23b20d13b20d23b6a21d33b20d23b20d33b6a21d43b20d33b20d43b6a21d53b20d43b20d53b6a21d63b20d53b20d63b" + "6a21d73b20d63b20d73b6a21d83b20d73b20d83b6a21d93b20d83b20d93b6a21da3b20d93b20da3b6a21db3b20da3b20db3b6a21dc3b20db3b" + "20dc3b6a21dd3b20dc3b20dd3b6a21de3b20dd3b20de3b6a21df3b20de3b20df3b6a21e03b20df3b20e03b6a21e13b20e03b20e13b6a21e23b" + "20e13b20e23b6a21e33b20e23b20e33b6a21e43b20e33b20e43b6a21e53b20e43b20e53b6a21e63b20e53b20e63b6a21e73b20e63b20e73b6a" + "21e83b20e73b20e83b6a21e93b20e83b20e93b6a21ea3b20e93b20ea3b6a21eb3b20ea3b20eb3b6a21ec3b20eb3b20ec3b6a21ed3b20ec3b20" + "ed3b6a21ee3b20ed3b20ee3b6a21ef3b20ee3b20ef3b6a21f03b20ef3b20f03b6a21f13b20f03b20f13b6a21f23b20f13b20f23b6a21f33b20" + "f23b20f33b6a21f43b20f33b20f43b6a21f53b20f43b20f53b6a21f63b20f53b20f63b6a21f73b20f63b20f73b6a21f83b20f73b20f83b6a21" + "f93b20f83b20f93b6a21fa3b20f93b20fa3b6a21fb3b20fa3b20fb3b6a21fc3b20fb3b20fc3b6a21fd3b20fc3b20fd3b6a21fe3b20fd3b20fe" + "3b6a21ff3b20fe3b20ff3b6a21803c20ff3b20803c6a21813c20803c20813c6a21823c20813c20823c6a21833c20823c20833c6a21843c2083" + "3c20843c6a21853c20843c20853c6a21863c20853c20863c6a21873c20863c20873c6a21883c20873c20883c6a21893c20883c20893c6a218a" + "3c20893c208a3c6a218b3c208a3c208b3c6a218c3c208b3c208c3c6a218d3c208c3c208d3c6a218e3c208d3c208e3c6a218f3c208e3c208f3c" + "6a21903c208f3c20903c6a21913c20903c20913c6a21923c20913c20923c6a21933c20923c20933c6a21943c20933c20943c6a21953c20943c" + "20953c6a21963c20953c20963c6a21973c20963c20973c6a21983c20973c20983c6a21993c20983c20993c6a219a3c20993c209a3c6a219b3c" + "209a3c209b3c6a219c3c209b3c209c3c6a219d3c209c3c209d3c6a219e3c209d3c209e3c6a219f3c209e3c209f3c6a21a03c209f3c20a03c6a" + "21a13c20a03c20a13c6a21a23c20a13c20a23c6a21a33c20a23c20a33c6a21a43c20a33c20a43c6a21a53c20a43c20a53c6a21a63c20a53c20" + "a63c6a21a73c20a63c20a73c6a21a83c20a73c20a83c6a21a93c20a83c20a93c6a21aa3c20a93c20aa3c6a21ab3c20aa3c20ab3c6a21ac3c20" + "ab3c20ac3c6a21ad3c20ac3c20ad3c6a21ae3c20ad3c20ae3c6a21af3c20ae3c20af3c6a21b03c20af3c20b03c6a21b13c20b03c20b13c6a21" + "b23c20b13c20b23c6a21b33c20b23c20b33c6a21b43c20b33c20b43c6a21b53c20b43c20b53c6a21b63c20b53c20b63c6a21b73c20b63c20b7" + "3c6a21b83c20b73c20b83c6a21b93c20b83c20b93c6a21ba3c20b93c20ba3c6a21bb3c20ba3c20bb3c6a21bc3c20bb3c20bc3c6a21bd3c20bc" + "3c20bd3c6a21be3c20bd3c20be3c6a21bf3c20be3c20bf3c6a21c03c20bf3c20c03c6a21c13c20c03c20c13c6a21c23c20c13c20c23c6a21c3" + "3c20c23c20c33c6a21c43c20c33c20c43c6a21c53c20c43c20c53c6a21c63c20c53c20c63c6a21c73c20c63c20c73c6a21c83c20c73c20c83c" + "6a21c93c20c83c20c93c6a21ca3c20c93c20ca3c6a21cb3c20ca3c20cb3c6a21cc3c20cb3c20cc3c6a21cd3c20cc3c20cd3c6a21ce3c20cd3c" + "20ce3c6a21cf3c20ce3c20cf3c6a21d03c20cf3c20d03c6a21d13c20d03c20d13c6a21d23c20d13c20d23c6a21d33c20d23c20d33c6a21d43c" + "20d33c20d43c6a21d53c20d43c20d53c6a21d63c20d53c20d63c6a21d73c20d63c20d73c6a21d83c20d73c20d83c6a21d93c20d83c20d93c6a" + "21da3c20d93c20da3c6a21db3c20da3c20db3c6a21dc3c20db3c20dc3c6a21dd3c20dc3c20dd3c6a21de3c20dd3c20de3c6a21df3c20de3c20" + "df3c6a21e03c20df3c20e03c6a21e13c20e03c20e13c6a21e23c20e13c20e23c6a21e33c20e23c20e33c6a21e43c20e33c20e43c6a21e53c20" + "e43c20e53c6a21e63c20e53c20e63c6a21e73c20e63c20e73c6a21e83c20e73c20e83c6a21e93c20e83c20e93c6a21ea3c20e93c20ea3c6a21" + "eb3c20ea3c20eb3c6a21ec3c20eb3c20ec3c6a21ed3c20ec3c20ed3c6a21ee3c20ed3c20ee3c6a21ef3c20ee3c20ef3c6a21f03c20ef3c20f0" + "3c6a21f13c20f03c20f13c6a21f23c20f13c20f23c6a21f33c20f23c20f33c6a21f43c20f33c20f43c6a21f53c20f43c20f53c6a21f63c20f5" + "3c20f63c6a21f73c20f63c20f73c6a21f83c20f73c20f83c6a21f93c20f83c20f93c6a21fa3c20f93c20fa3c6a21fb3c20fa3c20fb3c6a21fc" + "3c20fb3c20fc3c6a21fd3c20fc3c20fd3c6a21fe3c20fd3c20fe3c6a21ff3c20fe3c20ff3c6a21803d20ff3c20803d6a21813d20803d20813d" + "6a21823d20813d20823d6a21833d20823d20833d6a21843d20833d20843d6a21853d20843d20853d6a21863d20853d20863d6a21873d20863d" + "20873d6a21883d20873d20883d6a21893d20883d20893d6a218a3d20893d208a3d6a218b3d208a3d208b3d6a218c3d208b3d208c3d6a218d3d" + "208c3d208d3d6a218e3d208d3d208e3d6a218f3d208e3d208f3d6a21903d208f3d20903d6a21913d20903d20913d6a21923d20913d20923d6a" + "21933d20923d20933d6a21943d20933d20943d6a21953d20943d20953d6a21963d20953d20963d6a21973d20963d20973d6a21983d20973d20" + "983d6a21993d20983d20993d6a219a3d20993d209a3d6a219b3d209a3d209b3d6a219c3d209b3d209c3d6a219d3d209c3d209d3d6a219e3d20" + "9d3d209e3d6a219f3d209e3d209f3d6a21a03d209f3d20a03d6a21a13d20a03d20a13d6a21a23d20a13d20a23d6a21a33d20a23d20a33d6a21" + "a43d20a33d20a43d6a21a53d20a43d20a53d6a21a63d20a53d20a63d6a21a73d20a63d20a73d6a21a83d20a73d20a83d6a21a93d20a83d20a9" + "3d6a21aa3d20a93d20aa3d6a21ab3d20aa3d20ab3d6a21ac3d20ab3d20ac3d6a21ad3d20ac3d20ad3d6a21ae3d20ad3d20ae3d6a21af3d20ae" + "3d20af3d6a21b03d20af3d20b03d6a21b13d20b03d20b13d6a21b23d20b13d20b23d6a21b33d20b23d20b33d6a21b43d20b33d20b43d6a21b5" + "3d20b43d20b53d6a21b63d20b53d20b63d6a21b73d20b63d20b73d6a21b83d20b73d20b83d6a21b93d20b83d20b93d6a21ba3d20b93d20ba3d" + "6a21bb3d20ba3d20bb3d6a21bc3d20bb3d20bc3d6a21bd3d20bc3d20bd3d6a21be3d20bd3d20be3d6a21bf3d20be3d20bf3d6a21c03d20bf3d" + "20c03d6a21c13d20c03d20c13d6a21c23d20c13d20c23d6a21c33d20c23d20c33d6a21c43d20c33d20c43d6a21c53d20c43d20c53d6a21c63d" + "20c53d20c63d6a21c73d20c63d20c73d6a21c83d20c73d20c83d6a21c93d20c83d20c93d6a21ca3d20c93d20ca3d6a21cb3d20ca3d20cb3d6a" + "21cc3d20cb3d20cc3d6a21cd3d20cc3d20cd3d6a21ce3d20cd3d20ce3d6a21cf3d20ce3d20cf3d6a21d03d20cf3d20d03d6a21d13d20d03d20" + "d13d6a21d23d20d13d20d23d6a21d33d20d23d20d33d6a21d43d20d33d20d43d6a21d53d20d43d20d53d6a21d63d20d53d20d63d6a21d73d20" + "d63d20d73d6a21d83d20d73d20d83d6a21d93d20d83d20d93d6a21da3d20d93d20da3d6a21db3d20da3d20db3d6a21dc3d20db3d20dc3d6a21" + "dd3d20dc3d20dd3d6a21de3d20dd3d20de3d6a21df3d20de3d20df3d6a21e03d20df3d20e03d6a21e13d20e03d20e13d6a21e23d20e13d20e2" + "3d6a21e33d20e23d20e33d6a21e43d20e33d20e43d6a21e53d20e43d20e53d6a21e63d20e53d20e63d6a21e73d20e63d20e73d6a21e83d20e7" + "3d20e83d6a21e93d20e83d20e93d6a21ea3d20e93d20ea3d6a21eb3d20ea3d20eb3d6a21ec3d20eb3d20ec3d6a21ed3d20ec3d20ed3d6a21ee" + "3d20ed3d20ee3d6a21ef3d20ee3d20ef3d6a21f03d20ef3d20f03d6a21f13d20f03d20f13d6a21f23d20f13d20f23d6a21f33d20f23d20f33d" + "6a21f43d20f33d20f43d6a21f53d20f43d20f53d6a21f63d20f53d20f63d6a21f73d20f63d20f73d6a21f83d20f73d20f83d6a21f93d20f83d" + "20f93d6a21fa3d20f93d20fa3d6a21fb3d20fa3d20fb3d6a21fc3d20fb3d20fc3d6a21fd3d20fc3d20fd3d6a21fe3d20fd3d20fe3d6a21ff3d" + "20fe3d20ff3d6a21803e20ff3d20803e6a21813e20803e20813e6a21823e20813e20823e6a21833e20823e20833e6a21843e20833e20843e6a" + "21853e20843e20853e6a21863e20853e20863e6a21873e20863e20873e6a21883e20873e20883e6a21893e20883e20893e6a218a3e20893e20" + "8a3e6a218b3e208a3e208b3e6a218c3e208b3e208c3e6a218d3e208c3e208d3e6a218e3e208d3e208e3e6a218f3e208e3e208f3e6a21903e20" + "8f3e20903e6a21913e20903e20913e6a21923e20913e20923e6a21933e20923e20933e6a21943e20933e20943e6a21953e20943e20953e6a21" + "963e20953e20963e6a21973e20963e20973e6a21983e20973e20983e6a21993e20983e20993e6a219a3e20993e209a3e6a219b3e209a3e209b" + "3e6a219c3e209b3e209c3e6a219d3e209c3e209d3e6a219e3e209d3e209e3e6a219f3e209e3e209f3e6a21a03e209f3e20a03e6a21a13e20a0" + "3e20a13e6a21a23e20a13e20a23e6a21a33e20a23e20a33e6a21a43e20a33e20a43e6a21a53e20a43e20a53e6a21a63e20a53e20a63e6a21a7" + "3e20a63e20a73e6a21a83e20a73e20a83e6a21a93e20a83e20a93e6a21aa3e20a93e20aa3e6a21ab3e20aa3e20ab3e6a21ac3e20ab3e20ac3e" + "6a21ad3e20ac3e20ad3e6a21ae3e20ad3e20ae3e6a21af3e20ae3e20af3e6a21b03e20af3e20b03e6a21b13e20b03e20b13e6a21b23e20b13e" + "20b23e6a21b33e20b23e20b33e6a21b43e20b33e20b43e6a21b53e20b43e20b53e6a21b63e20b53e20b63e6a21b73e20b63e20b73e6a21b83e" + "20b73e20b83e6a21b93e20b83e20b93e6a21ba3e20b93e20ba3e6a21bb3e20ba3e20bb3e6a21bc3e20bb3e20bc3e6a21bd3e20bc3e20bd3e6a" + "21be3e20bd3e20be3e6a21bf3e20be3e20bf3e6a21c03e20bf3e20c03e6a21c13e20c03e20c13e6a21c23e20c13e20c23e6a21c33e20c23e20" + "c33e6a21c43e20c33e20c43e6a21c53e20c43e20c53e6a21c63e20c53e20c63e6a21c73e20c63e20c73e6a21c83e20c73e20c83e6a21c93e20" + "c83e20c93e6a21ca3e20c93e20ca3e6a21cb3e20ca3e20cb3e6a21cc3e20cb3e20cc3e6a21cd3e20cc3e20cd3e6a21ce3e20cd3e20ce3e6a21" + "cf3e20ce3e20cf3e6a21d03e20cf3e20d03e6a21d13e20d03e20d13e6a21d23e20d13e20d23e6a21d33e20d23e20d33e6a21d43e20d33e20d4" + "3e6a21d53e20d43e20d53e6a21d63e20d53e20d63e6a21d73e20d63e20d73e6a21d83e20d73e20d83e6a21d93e20d83e20d93e6a21da3e20d9" + "3e20da3e6a21db3e20da3e20db3e6a21dc3e20db3e20dc3e6a21dd3e20dc3e20dd3e6a21de3e20dd3e20de3e6a21df3e20de3e20df3e6a21e0" + "3e20df3e20e03e6a21e13e20e03e20e13e6a21e23e20e13e20e23e6a21e33e20e23e20e33e6a21e43e20e33e20e43e6a21e53e20e43e20e53e" + "6a21e63e20e53e20e63e6a21e73e20e63e20e73e6a21e83e20e73e20e83e6a21e93e20e83e20e93e6a21ea3e20e93e20ea3e6a21eb3e20ea3e" + "20eb3e6a21ec3e20eb3e20ec3e6a21ed3e20ec3e20ed3e6a21ee3e20ed3e20ee3e6a21ef3e20ee3e20ef3e6a21f03e20ef3e20f03e6a21f13e" + "20f03e20f13e6a21f23e20f13e20f23e6a21f33e20f23e20f33e6a21f43e20f33e20f43e6a21f53e20f43e20f53e6a21f63e20f53e20f63e6a" + "21f73e20f63e20f73e6a21f83e20f73e20f83e6a21f93e20f83e20f93e6a21fa3e20f93e20fa3e6a21fb3e20fa3e20fb3e6a21fc3e20fb3e20" + "fc3e6a21fd3e20fc3e20fd3e6a21fe3e20fd3e20fe3e6a21ff3e20fe3e20ff3e6a21803f20ff3e20803f6a21813f20803f20813f6a21823f20" + "813f20823f6a21833f20823f20833f6a21843f20833f20843f6a21853f20843f20853f6a21863f20853f20863f6a21873f20863f20873f6a21" + "883f20873f20883f6a21893f20883f20893f6a218a3f20893f208a3f6a218b3f208a3f208b3f6a218c3f208b3f208c3f6a218d3f208c3f208d" + "3f6a218e3f208d3f208e3f6a218f3f208e3f208f3f6a21903f208f3f20903f6a21913f20903f20913f6a21923f20913f20923f6a21933f2092" + "3f20933f6a21943f20933f20943f6a21953f20943f20953f6a21963f20953f20963f6a21973f20963f20973f6a21983f20973f20983f6a2199" + "3f20983f20993f6a219a3f20993f209a3f6a219b3f209a3f209b3f6a219c3f209b3f209c3f6a219d3f209c3f209d3f6a219e3f209d3f209e3f" + "6a219f3f209e3f209f3f6a21a03f209f3f20a03f6a21a13f20a03f20a13f6a21a23f20a13f20a23f6a21a33f20a23f20a33f6a21a43f20a33f" + "20a43f6a21a53f20a43f20a53f6a21a63f20a53f20a63f6a21a73f20a63f20a73f6a21a83f20a73f20a83f6a21a93f20a83f20a93f6a21aa3f" + "20a93f20aa3f6a21ab3f20aa3f20ab3f6a21ac3f20ab3f20ac3f6a21ad3f20ac3f20ad3f6a21ae3f20ad3f20ae3f6a21af3f20ae3f20af3f6a" + "21b03f20af3f20b03f6a21b13f20b03f20b13f6a21b23f20b13f20b23f6a21b33f20b23f20b33f6a21b43f20b33f20b43f6a21b53f20b43f20" + "b53f6a21b63f20b53f20b63f6a21b73f20b63f20b73f6a21b83f20b73f20b83f6a21b93f20b83f20b93f6a21ba3f20b93f20ba3f6a21bb3f20" + "ba3f20bb3f6a21bc3f20bb3f20bc3f6a21bd3f20bc3f20bd3f6a21be3f20bd3f20be3f6a21bf3f20be3f20bf3f6a21c03f20bf3f20c03f6a21" + "c13f20c03f20c13f6a21c23f20c13f20c23f6a21c33f20c23f20c33f6a21c43f20c33f20c43f6a21c53f20c43f20c53f6a21c63f20c53f20c6" + "3f6a21c73f20c63f20c73f6a21c83f20c73f20c83f6a21c93f20c83f20c93f6a21ca3f20c93f20ca3f6a21cb3f20ca3f20cb3f6a21cc3f20cb" + "3f20cc3f6a21cd3f20cc3f20cd3f6a21ce3f20cd3f20ce3f6a21cf3f20ce3f20cf3f6a21d03f20cf3f20d03f6a21d13f20d03f20d13f6a21d2" + "3f20d13f20d23f6a21d33f20d23f20d33f6a21d43f20d33f20d43f6a21d53f20d43f20d53f6a21d63f20d53f20d63f6a21d73f20d63f20d73f" + "6a21d83f20d73f20d83f6a21d93f20d83f20d93f6a21da3f20d93f20da3f6a21db3f20da3f20db3f6a21dc3f20db3f20dc3f6a21dd3f20dc3f" + "20dd3f6a21de3f20dd3f20de3f6a21df3f20de3f20df3f6a21e03f20df3f20e03f6a21e13f20e03f20e13f6a21e23f20e13f20e23f6a21e33f" + "20e23f20e33f6a21e43f20e33f20e43f6a21e53f20e43f20e53f6a21e63f20e53f20e63f6a21e73f20e63f20e73f6a21e83f20e73f20e83f6a" + "21e93f20e83f20e93f6a21ea3f20e93f20ea3f6a21eb3f20ea3f20eb3f6a21ec3f20eb3f20ec3f6a21ed3f20ec3f20ed3f6a21ee3f20ed3f20" + "ee3f6a21ef3f20ee3f20ef3f6a21f03f20ef3f20f03f6a21f13f20f03f20f13f6a21f23f20f13f20f23f6a21f33f20f23f20f33f6a21f43f20" + "f33f20f43f6a21f53f20f43f20f53f6a21f63f20f53f20f63f6a21f73f20f63f20f73f6a21f83f20f73f20f83f6a21f93f20f83f20f93f6a21" + "fa3f20f93f20fa3f6a21fb3f20fa3f20fb3f6a21fc3f20fb3f20fc3f6a21fd3f20fc3f20fd3f6a21fe3f20fd3f20fe3f6a21ff3f20fe3f20ff" + "3f6a21804020ff3f2080406a2181402080402081406a2182402081402082406a2183402082402083406a2184402083402084406a2185402084" + "402085406a2186402085402086406a2187402086402087406a2188402087402088406a2189402088402089406a218a40208940208a406a218b" + "40208a40208b406a218c40208b40208c406a218d40208c40208d406a218e40208d40208e406a218f40208e40208f406a219040208f40209040" + "6a2191402090402091406a2192402091402092406a2193402092402093406a2194402093402094406a2195402094402095406a219640209540" + "2096406a2197402096402097406a2198402097402098406a2199402098402099406a219a40209940209a406a219b40209a40209b406a219c40" + "209b40209c406a219d40209c40209d406a219e40209d40209e406a219f40209e40209f406a21a040209f4020a0406a21a14020a04020a1406a" + "21a24020a14020a2406a21a34020a24020a3406a21a44020a34020a4406a21a54020a44020a5406a21a64020a54020a6406a21a74020a64020" + "a7406a21a84020a74020a8406a21a94020a84020a9406a21aa4020a94020aa406a21ab4020aa4020ab406a21ac4020ab4020ac406a21ad4020" + "ac4020ad406a21ae4020ad4020ae406a21af4020ae4020af406a21b04020af4020b0406a21b14020b04020b1406a21b24020b14020b2406a21" + "b34020b24020b3406a21b44020b34020b4406a21b54020b44020b5406a21b64020b54020b6406a21b74020b64020b7406a21b84020b74020b8" + "406a21b94020b84020b9406a21ba4020b94020ba406a21bb4020ba4020bb406a21bc4020bb4020bc406a21bd4020bc4020bd406a21be4020bd" + "4020be406a21bf4020be4020bf406a21c04020bf4020c0406a21c14020c04020c1406a21c24020c14020c2406a21c34020c24020c3406a21c4" + "4020c34020c4406a21c54020c44020c5406a21c64020c54020c6406a21c74020c64020c7406a21c84020c74020c8406a21c94020c84020c940" + "6a21ca4020c94020ca406a21cb4020ca4020cb406a21cc4020cb4020cc406a21cd4020cc4020cd406a21ce4020cd4020ce406a21cf4020ce40" + "20cf406a21d04020cf4020d0406a21d14020d04020d1406a21d24020d14020d2406a21d34020d24020d3406a21d44020d34020d4406a21d540" + "20d44020d5406a21d64020d54020d6406a21d74020d64020d7406a21d84020d74020d8406a21d94020d84020d9406a21da4020d94020da406a" + "21db4020da4020db406a21dc4020db4020dc406a21dd4020dc4020dd406a21de4020dd4020de406a21df4020de4020df406a21e04020df4020" + "e0406a21e14020e04020e1406a21e24020e14020e2406a21e34020e24020e3406a21e44020e34020e4406a21e54020e44020e5406a21e64020" + "e54020e6406a21e74020e64020e7406a21e84020e74020e8406a21e94020e84020e9406a21ea4020e94020ea406a21eb4020ea4020eb406a21" + "ec4020eb4020ec406a21ed4020ec4020ed406a21ee4020ed4020ee406a21ef4020ee4020ef406a21f04020ef4020f0406a21f14020f04020f1" + "406a21f24020f14020f2406a21f34020f24020f3406a21f44020f34020f4406a21f54020f44020f5406a21f64020f54020f6406a21f74020f6" + "4020f7406a21f84020f74020f8406a21f94020f84020f9406a21fa4020f94020fa406a21fb4020fa4020fb406a21fc4020fb4020fc406a21fd" + "4020fc4020fd406a21fe4020fd4020fe406a21ff4020fe4020ff406a21804120ff402080416a2181412080412081416a218241208141208241" + "6a2183412082412083416a2184412083412084416a2185412084412085416a2186412085412086416a2187412086412087416a218841208741" + "2088416a2189412088412089416a218a41208941208a416a218b41208a41208b416a218c41208b41208c416a218d41208c41208d416a218e41" + "208d41208e416a218f41208e41208f416a219041208f412090416a2191412090412091416a2192412091412092416a2193412092412093416a" + "2194412093412094416a2195412094412095416a2196412095412096416a2197412096412097416a2198412097412098416a21994120984120" + "99416a219a41209941209a416a219b41209a41209b416a219c41209b41209c416a219d41209c41209d416a219e41209d41209e416a219f4120" + "9e41209f416a21a041209f4120a0416a21a14120a04120a1416a21a24120a14120a2416a21a34120a24120a3416a21a44120a34120a4416a21" + "a54120a44120a5416a21a64120a54120a6416a21a74120a64120a7416a21a84120a74120a8416a21a94120a84120a9416a21aa4120a94120aa" + "416a21ab4120aa4120ab416a21ac4120ab4120ac416a21ad4120ac4120ad416a21ae4120ad4120ae416a21af4120ae4120af416a21b04120af" + "4120b0416a21b14120b04120b1416a21b24120b14120b2416a21b34120b24120b3416a21b44120b34120b4416a21b54120b44120b5416a21b6" + "4120b54120b6416a21b74120b64120b7416a21b84120b74120b8416a21b94120b84120b9416a21ba4120b94120ba416a21bb4120ba4120bb41" + "6a21bc4120bb4120bc416a21bd4120bc4120bd416a21be4120bd4120be416a21bf4120be4120bf416a21c04120bf4120c0416a21c14120c041" + "20c1416a21c24120c14120c2416a21c34120c24120c3416a21c44120c34120c4416a21c54120c44120c5416a21c64120c54120c6416a21c741" + "20c64120c7416a21c84120c74120c8416a21c94120c84120c9416a21ca4120c94120ca416a21cb4120ca4120cb416a21cc4120cb4120cc416a" + "21cd4120cc4120cd416a21ce4120cd4120ce416a21cf4120ce4120cf416a21d04120cf4120d0416a21d14120d04120d1416a21d24120d14120" + "d2416a21d34120d24120d3416a21d44120d34120d4416a21d54120d44120d5416a21d64120d54120d6416a21d74120d64120d7416a21d84120" + "d74120d8416a21d94120d84120d9416a21da4120d94120da416a21db4120da4120db416a21dc4120db4120dc416a21dd4120dc4120dd416a21" + "de4120dd4120de416a21df4120de4120df416a21e04120df4120e0416a21e14120e04120e1416a21e24120e14120e2416a21e34120e24120e3" + "416a21e44120e34120e4416a21e54120e44120e5416a21e64120e54120e6416a21e74120e64120e7416a21e84120e74120e8416a21e94120e8" + "4120e9416a21ea4120e94120ea416a21eb4120ea4120eb416a21ec4120eb4120ec416a21ed4120ec4120ed416a21ee4120ed4120ee416a21ef" + "4120ee4120ef416a21f04120ef4120f0416a21f14120f04120f1416a21f24120f14120f2416a21f34120f24120f3416a21f44120f34120f441" + "6a21f54120f44120f5416a21f64120f54120f6416a21f74120f64120f7416a21f84120f74120f8416a21f94120f84120f9416a21fa4120f941" + "20fa416a21fb4120fa4120fb416a21fc4120fb4120fc416a21fd4120fc4120fd416a21fe4120fd4120fe416a21ff4120fe4120ff416a218042" + "20ff412080426a2181422080422081426a2182422081422082426a2183422082422083426a2184422083422084426a2185422084422085426a" + "2186422085422086426a2187422086422087426a2188422087422088426a2189422088422089426a218a42208942208a426a218b42208a4220" + "8b426a218c42208b42208c426a218d42208c42208d426a218e42208d42208e426a218f42208e42208f426a219042208f422090426a21914220" + "90422091426a2192422091422092426a2193422092422093426a2194422093422094426a2195422094422095426a2196422095422096426a21" + "97422096422097426a2198422097422098426a2199422098422099426a219a42209942209a426a219b42209a42209b426a219c42209b42209c" + "426a219d42209c42209d426a219e42209d42209e426a219f42209e42209f426a21a042209f4220a0426a21a14220a04220a1426a21a24220a1" + "4220a2426a21a34220a24220a3426a21a44220a34220a4426a21a54220a44220a5426a21a64220a54220a6426a21a74220a64220a7426a21a8" + "4220a74220a8426a21a94220a84220a9426a21aa4220a94220aa426a21ab4220aa4220ab426a21ac4220ab4220ac426a21ad4220ac4220ad42" + "6a21ae4220ad4220ae426a21af4220ae4220af426a21b04220af4220b0426a21b14220b04220b1426a21b24220b14220b2426a21b34220b242" + "20b3426a21b44220b34220b4426a21b54220b44220b5426a21b64220b54220b6426a21b74220b64220b7426a21b84220b74220b8426a21b942" + "20b84220b9426a21ba4220b94220ba426a21bb4220ba4220bb426a21bc4220bb4220bc426a21bd4220bc4220bd426a21be4220bd4220be426a" + "21bf4220be4220bf426a21c04220bf4220c0426a21c14220c04220c1426a21c24220c14220c2426a21c34220c24220c3426a21c44220c34220" + "c4426a21c54220c44220c5426a21c64220c54220c6426a21c74220c64220c7426a21c84220c74220c8426a21c94220c84220c9426a21ca4220" + "c94220ca426a21cb4220ca4220cb426a21cc4220cb4220cc426a21cd4220cc4220cd426a21ce4220cd4220ce426a21cf4220ce4220cf426a21" + "d04220cf4220d0426a21d14220d04220d1426a21d24220d14220d2426a21d34220d24220d3426a21d44220d34220d4426a21d54220d44220d5" + "426a21d64220d54220d6426a21d74220d64220d7426a21d84220d74220d8426a21d94220d84220d9426a21da4220d94220da426a21db4220da" + "4220db426a21dc4220db4220dc426a21dd4220dc4220dd426a21de4220dd4220de426a21df4220de4220df426a21e04220df4220e0426a21e1" + "4220e04220e1426a21e24220e14220e2426a21e34220e24220e3426a21e44220e34220e4426a21e54220e44220e5426a21e64220e54220e642" + "6a21e74220e64220e7426a21e84220e74220e8426a21e94220e84220e9426a21ea4220e94220ea426a21eb4220ea4220eb426a21ec4220eb42" + "20ec426a21ed4220ec4220ed426a21ee4220ed4220ee426a21ef4220ee4220ef426a21f04220ef4220f0426a21f14220f04220f1426a21f242" + "20f14220f2426a21f34220f24220f3426a21f44220f34220f4426a21f54220f44220f5426a21f64220f54220f6426a21f74220f64220f7426a" + "21f84220f74220f8426a21f94220f84220f9426a21fa4220f94220fa426a21fb4220fa4220fb426a21fc4220fb4220fc426a21fd4220fc4220" + "fd426a21fe4220fd4220fe426a21ff4220fe4220ff426a21804320ff422080436a2181432080432081436a2182432081432082436a21834320" + "82432083436a2184432083432084436a2185432084432085436a2186432085432086436a2187432086432087436a2188432087432088436a21" + "89432088432089436a218a43208943208a436a218b43208a43208b436a218c43208b43208c436a218d43208c43208d436a218e43208d43208e" + "436a218f43208e43208f436a219043208f432090436a2191432090432091436a2192432091432092436a2193432092432093436a2194432093" + "432094436a2195432094432095436a2196432095432096436a2197432096432097436a2198432097432098436a2199432098432099436a219a" + "43209943209a436a219b43209a43209b436a219c43209b43209c436a219d43209c43209d436a219e43209d43209e436a219f43209e43209f43" + "6a21a043209f4320a0436a21a14320a04320a1436a21a24320a14320a2436a21a34320a24320a3436a21a44320a34320a4436a21a54320a443" + "20a5436a21a64320a54320a6436a21a74320a64320a7436a21a84320a74320a8436a21a94320a84320a9436a21aa4320a94320aa436a21ab43" + "20aa4320ab436a21ac4320ab4320ac436a21ad4320ac4320ad436a21ae4320ad4320ae436a21af4320ae4320af436a21b04320af4320b0436a" + "21b14320b04320b1436a21b24320b14320b2436a21b34320b24320b3436a21b44320b34320b4436a21b54320b44320b5436a21b64320b54320" + "b6436a21b74320b64320b7436a21b84320b74320b8436a21b94320b84320b9436a21ba4320b94320ba436a21bb4320ba4320bb436a21bc4320" + "bb4320bc436a21bd4320bc4320bd436a21be4320bd4320be436a21bf4320be4320bf436a21c04320bf4320c0436a21c14320c04320c1436a21" + "c24320c14320c2436a21c34320c24320c3436a21c44320c34320c4436a21c54320c44320c5436a21c64320c54320c6436a21c74320c64320c7" + "436a21c84320c74320c8436a21c94320c84320c9436a21ca4320c94320ca436a21cb4320ca4320cb436a21cc4320cb4320cc436a21cd4320cc" + "4320cd436a21ce4320cd4320ce436a21cf4320ce4320cf436a21d04320cf4320d0436a21d14320d04320d1436a21d24320d14320d2436a21d3" + "4320d24320d3436a21d44320d34320d4436a21d54320d44320d5436a21d64320d54320d6436a21d74320d64320d7436a21d84320d74320d843" + "6a21d94320d84320d9436a21da4320d94320da436a21db4320da4320db436a21dc4320db4320dc436a21dd4320dc4320dd436a21de4320dd43" + "20de436a21df4320de4320df436a21e04320df4320e0436a21e14320e04320e1436a21e24320e14320e2436a21e34320e24320e3436a21e443" + "20e34320e4436a21e54320e44320e5436a21e64320e54320e6436a21e74320e64320e7436a21e84320e74320e8436a21e94320e84320e9436a" + "21ea4320e94320ea436a21eb4320ea4320eb436a21ec4320eb4320ec436a21ed4320ec4320ed436a21ee4320ed4320ee436a21ef4320ee4320" + "ef436a21f04320ef4320f0436a21f14320f04320f1436a21f24320f14320f2436a21f34320f24320f3436a21f44320f34320f4436a21f54320" + "f44320f5436a21f64320f54320f6436a21f74320f64320f7436a21f84320f74320f8436a21f94320f84320f9436a21fa4320f94320fa436a21" + "fb4320fa4320fb436a21fc4320fb4320fc436a21fd4320fc4320fd436a21fe4320fd4320fe436a21ff4320fe4320ff436a21804420ff432080" + "446a2181442080442081446a2182442081442082446a2183442082442083446a2184442083442084446a2185442084442085446a2186442085" + "442086446a2187442086442087446a2188442087442088446a2189442088442089446a218a44208944208a446a218b44208a44208b446a218c" + "44208b44208c446a218d44208c44208d446a218e44208d44208e446a218f44208e44208f446a219044208f442090446a219144209044209144" + "6a2192442091442092446a2193442092442093446a2194442093442094446a2195442094442095446a2196442095442096446a219744209644" + "2097446a2198442097442098446a2199442098442099446a219a44209944209a446a219b44209a44209b446a219c44209b44209c446a219d44" + "209c44209d446a219e44209d44209e446a219f44209e44209f446a21a044209f4420a0446a21a14420a04420a1446a21a24420a14420a2446a" + "21a34420a24420a3446a21a44420a34420a4446a21a54420a44420a5446a21a64420a54420a6446a21a74420a64420a7446a21a84420a74420" + "a8446a21a94420a84420a9446a21aa4420a94420aa446a21ab4420aa4420ab446a21ac4420ab4420ac446a21ad4420ac4420ad446a21ae4420" + "ad4420ae446a21af4420ae4420af446a21b04420af4420b0446a21b14420b04420b1446a21b24420b14420b2446a21b34420b24420b3446a21" + "b44420b34420b4446a21b54420b44420b5446a21b64420b54420b6446a21b74420b64420b7446a21b84420b74420b8446a21b94420b84420b9" + "446a21ba4420b94420ba446a21bb4420ba4420bb446a21bc4420bb4420bc446a21bd4420bc4420bd446a21be4420bd4420be446a21bf4420be" + "4420bf446a21c04420bf4420c0446a21c14420c04420c1446a21c24420c14420c2446a21c34420c24420c3446a21c44420c34420c4446a21c5" + "4420c44420c5446a21c64420c54420c6446a21c74420c64420c7446a21c84420c74420c8446a21c94420c84420c9446a21ca4420c94420ca44" + "6a21cb4420ca4420cb446a21cc4420cb4420cc446a21cd4420cc4420cd446a21ce4420cd4420ce446a21cf4420ce4420cf446a21d04420cf44" + "20d0446a21d14420d04420d1446a21d24420d14420d2446a21d34420d24420d3446a21d44420d34420d4446a21d54420d44420d5446a21d644" + "20d54420d6446a21d74420d64420d7446a21d84420d74420d8446a21d94420d84420d9446a21da4420d94420da446a21db4420da4420db446a" + "21dc4420db4420dc446a21dd4420dc4420dd446a21de4420dd4420de446a21df4420de4420df446a21e04420df4420e0446a21e14420e04420" + "e1446a21e24420e14420e2446a21e34420e24420e3446a21e44420e34420e4446a21e54420e44420e5446a21e64420e54420e6446a21e74420" + "e64420e7446a21e84420e74420e8446a21e94420e84420e9446a21ea4420e94420ea446a21eb4420ea4420eb446a21ec4420eb4420ec446a21" + "ed4420ec4420ed446a21ee4420ed4420ee446a21ef4420ee4420ef446a21f04420ef4420f0446a21f14420f04420f1446a21f24420f14420f2" + "446a21f34420f24420f3446a21f44420f34420f4446a21f54420f44420f5446a21f64420f54420f6446a21f74420f64420f7446a21f84420f7" + "4420f8446a21f94420f84420f9446a21fa4420f94420fa446a21fb4420fa4420fb446a21fc4420fb4420fc446a21fd4420fc4420fd446a21fe" + "4420fd4420fe446a21ff4420fe4420ff446a21804520ff442080456a2181452080452081456a2182452081452082456a218345208245208345" + "6a2184452083452084456a2185452084452085456a2186452085452086456a2187452086452087456a2188452087452088456a218945208845" + "2089456a218a45208945208a456a218b45208a45208b456a218c45208b45208c456a218d45208c45208d456a218e45208d45208e456a218f45" + "208e45208f456a219045208f452090456a2191452090452091456a2192452091452092456a2193452092452093456a2194452093452094456a" + "2195452094452095456a2196452095452096456a2197452096452097456a2198452097452098456a2199452098452099456a219a4520994520" + "9a456a219b45209a45209b456a219c45209b45209c456a219d45209c45209d456a219e45209d45209e456a219f45209e45209f456a21a04520" + "9f4520a0456a21a14520a04520a1456a21a24520a14520a2456a21a34520a24520a3456a21a44520a34520a4456a21a54520a44520a5456a21" + "a64520a54520a6456a21a74520a64520a7456a21a84520a74520a8456a21a94520a84520a9456a21aa4520a94520aa456a21ab4520aa4520ab" + "456a21ac4520ab4520ac456a21ad4520ac4520ad456a21ae4520ad4520ae456a21af4520ae4520af456a21b04520af4520b0456a21b14520b0" + "4520b1456a21b24520b14520b2456a21b34520b24520b3456a21b44520b34520b4456a21b54520b44520b5456a21b64520b54520b6456a21b7" + "4520b64520b7456a21b84520b74520b8456a21b94520b84520b9456a21ba4520b94520ba456a21bb4520ba4520bb456a21bc4520bb4520bc45" + "6a21bd4520bc4520bd456a21be4520bd4520be456a21bf4520be4520bf456a21c04520bf4520c0456a21c14520c04520c1456a21c24520c145" + "20c2456a21c34520c24520c3456a21c44520c34520c4456a21c54520c44520c5456a21c64520c54520c6456a21c74520c64520c7456a21c845" + "20c74520c8456a21c94520c84520c9456a21ca4520c94520ca456a21cb4520ca4520cb456a21cc4520cb4520cc456a21cd4520cc4520cd456a" + "21ce4520cd4520ce456a21cf4520ce4520cf456a21d04520cf4520d0456a21d14520d04520d1456a21d24520d14520d2456a21d34520d24520" + "d3456a21d44520d34520d4456a21d54520d44520d5456a21d64520d54520d6456a21d74520d64520d7456a21d84520d74520d8456a21d94520" + "d84520d9456a21da4520d94520da456a21db4520da4520db456a21dc4520db4520dc456a21dd4520dc4520dd456a21de4520dd4520de456a21" + "df4520de4520df456a21e04520df4520e0456a21e14520e04520e1456a21e24520e14520e2456a21e34520e24520e3456a21e44520e34520e4" + "456a21e54520e44520e5456a21e64520e54520e6456a21e74520e64520e7456a21e84520e74520e8456a21e94520e84520e9456a21ea4520e9" + "4520ea456a21eb4520ea4520eb456a21ec4520eb4520ec456a21ed4520ec4520ed456a21ee4520ed4520ee456a21ef4520ee4520ef456a21f0" + "4520ef4520f0456a21f14520f04520f1456a21f24520f14520f2456a21f34520f24520f3456a21f44520f34520f4456a21f54520f44520f545" + "6a21f64520f54520f6456a21f74520f64520f7456a21f84520f74520f8456a21f94520f84520f9456a21fa4520f94520fa456a21fb4520fa45" + "20fb456a21fc4520fb4520fc456a21fd4520fc4520fd456a21fe4520fd4520fe456a21ff4520fe4520ff456a21804620ff452080466a218146" + "2080462081466a2182462081462082466a2183462082462083466a2184462083462084466a2185462084462085466a2186462085462086466a" + "2187462086462087466a2188462087462088466a2189462088462089466a218a46208946208a466a218b46208a46208b466a218c46208b4620" + "8c466a218d46208c46208d466a218e46208d46208e466a218f46208e46208f466a219046208f462090466a2191462090462091466a21924620" + "91462092466a2193462092462093466a2194462093462094466a2195462094462095466a2196462095462096466a2197462096462097466a21" + "98462097462098466a2199462098462099466a219a46209946209a466a219b46209a46209b466a219c46209b46209c466a219d46209c46209d" + "466a219e46209d46209e466a219f46209e46209f466a21a046209f4620a0466a21a14620a04620a1466a21a24620a14620a2466a21a34620a2" + "4620a3466a21a44620a34620a4466a21a54620a44620a5466a21a64620a54620a6466a21a74620a64620a7466a21a84620a74620a8466a21a9" + "4620a84620a9466a21aa4620a94620aa466a21ab4620aa4620ab466a21ac4620ab4620ac466a21ad4620ac4620ad466a21ae4620ad4620ae46" + "6a21af4620ae4620af466a21b04620af4620b0466a21b14620b04620b1466a21b24620b14620b2466a21b34620b24620b3466a21b44620b346" + "20b4466a21b54620b44620b5466a21b64620b54620b6466a21b74620b64620b7466a21b84620b74620b8466a21b94620b84620b9466a21ba46" + "20b94620ba466a21bb4620ba4620bb466a21bc4620bb4620bc466a21bd4620bc4620bd466a21be4620bd4620be466a21bf4620be4620bf466a" + "21c04620bf4620c0466a21c14620c04620c1466a21c24620c14620c2466a21c34620c24620c3466a21c44620c34620c4466a21c54620c44620" + "c5466a21c64620c54620c6466a21c74620c64620c7466a21c84620c74620c8466a21c94620c84620c9466a21ca4620c94620ca466a21cb4620" + "ca4620cb466a21cc4620cb4620cc466a21cd4620cc4620cd466a21ce4620cd4620ce466a21cf4620ce4620cf466a21d04620cf4620d0466a21" + "d14620d04620d1466a21d24620d14620d2466a21d34620d24620d3466a21d44620d34620d4466a21d54620d44620d5466a21d64620d54620d6" + "466a21d74620d64620d7466a21d84620d74620d8466a21d94620d84620d9466a21da4620d94620da466a21db4620da4620db466a21dc4620db" + "4620dc466a21dd4620dc4620dd466a21de4620dd4620de466a21df4620de4620df466a21e04620df4620e0466a21e14620e04620e1466a21e2" + "4620e14620e2466a21e34620e24620e3466a21e44620e34620e4466a21e54620e44620e5466a21e64620e54620e6466a21e74620e64620e746" + "6a21e84620e74620e8466a21e94620e84620e9466a21ea4620e94620ea466a21eb4620ea4620eb466a21ec4620eb4620ec466a21ed4620ec46" + "20ed466a21ee4620ed4620ee466a21ef4620ee4620ef466a21f04620ef4620f0466a21f14620f04620f1466a21f24620f14620f2466a21f346" + "20f24620f3466a21f44620f34620f4466a21f54620f44620f5466a21f64620f54620f6466a21f74620f64620f7466a21f84620f74620f8466a" + "21f94620f84620f9466a21fa4620f94620fa466a21fb4620fa4620fb466a21fc4620fb4620fc466a21fd4620fc4620fd466a21fe4620fd4620" + "fe466a21ff4620fe4620ff466a21804720ff462080476a2181472080472081476a2182472081472082476a2183472082472083476a21844720" + "83472084476a2185472084472085476a2186472085472086476a2187472086472087476a2188472087472088476a2189472088472089476a21" + "8a47208947208a476a218b47208a47208b476a218c47208b47208c476a218d47208c47208d476a218e47208d47208e476a218f47208e47208f" + "476a219047208f472090476a2191472090472091476a2192472091472092476a2193472092472093476a2194472093472094476a2195472094" + "472095476a2196472095472096476a2197472096472097476a2198472097472098476a2199472098472099476a219a47209947209a476a219b" + "47209a47209b476a219c47209b47209c476a219d47209c47209d476a219e47209d47209e476a219f47209e47209f476a21a047209f4720a047" + "6a21a14720a04720a1476a21a24720a14720a2476a21a34720a24720a3476a21a44720a34720a4476a21a54720a44720a5476a21a64720a547" + "20a6476a21a74720a64720a7476a21a84720a74720a8476a21a94720a84720a9476a21aa4720a94720aa476a21ab4720aa4720ab476a21ac47" + "20ab4720ac476a21ad4720ac4720ad476a21ae4720ad4720ae476a21af4720ae4720af476a21b04720af4720b0476a21b14720b04720b1476a" + "21b24720b14720b2476a21b34720b24720b3476a21b44720b34720b4476a21b54720b44720b5476a21b64720b54720b6476a21b74720b64720" + "b7476a21b84720b74720b8476a21b94720b84720b9476a21ba4720b94720ba476a21bb4720ba4720bb476a21bc4720bb4720bc476a21bd4720" + "bc4720bd476a21be4720bd4720be476a21bf4720be4720bf476a21c04720bf4720c0476a21c14720c04720c1476a21c24720c14720c2476a21" + "c34720c24720c3476a21c44720c34720c4476a21c54720c44720c5476a21c64720c54720c6476a21c74720c64720c7476a21c84720c74720c8" + "476a21c94720c84720c9476a21ca4720c94720ca476a21cb4720ca4720cb476a21cc4720cb4720cc476a21cd4720cc4720cd476a21ce4720cd" + "4720ce476a21cf4720ce4720cf476a21d04720cf4720d0476a21d14720d04720d1476a21d24720d14720d2476a21d34720d24720d3476a21d4" + "4720d34720d4476a21d54720d44720d5476a21d64720d54720d6476a21d74720d64720d7476a21d84720d74720d8476a21d94720d84720d947" + "6a21da4720d94720da476a21db4720da4720db476a21dc4720db4720dc476a21dd4720dc4720dd476a21de4720dd4720de476a21df4720de47" + "20df476a21e04720df4720e0476a21e14720e04720e1476a21e24720e14720e2476a21e34720e24720e3476a21e44720e34720e4476a21e547" + "20e44720e5476a21e64720e54720e6476a21e74720e64720e7476a21e84720e74720e8476a21e94720e84720e9476a21ea4720e94720ea476a" + "21eb4720ea4720eb476a21ec4720eb4720ec476a21ed4720ec4720ed476a21ee4720ed4720ee476a21ef4720ee4720ef476a21f04720ef4720" + "f0476a21f14720f04720f1476a21f24720f14720f2476a21f34720f24720f3476a21f44720f34720f4476a21f54720f44720f5476a21f64720" + "f54720f6476a21f74720f64720f7476a21f84720f74720f8476a21f94720f84720f9476a21fa4720f94720fa476a21fb4720fa4720fb476a21" + "fc4720fb4720fc476a21fd4720fc4720fd476a21fe4720fd4720fe476a21ff4720fe4720ff476a21804820ff472080486a2181482080482081" + "486a2182482081482082486a2183482082482083486a2184482083482084486a2185482084482085486a2186482085482086486a2187482086" + "482087486a2188482087482088486a2189482088482089486a218a48208948208a486a218b48208a48208b486a218c48208b48208c486a218d" + "48208c48208d486a218e48208d48208e486a218f48208e48208f486a219048208f482090486a2191482090482091486a219248209148209248" + "6a2193482092482093486a2194482093482094486a2195482094482095486a2196482095482096486a2197482096482097486a219848209748" + "2098486a2199482098482099486a219a48209948209a486a219b48209a48209b486a219c48209b48209c486a219d48209c48209d486a219e48" + "209d48209e486a219f48209e48209f486a21a048209f4820a0486a21a14820a04820a1486a21a24820a14820a2486a21a34820a24820a3486a" + "21a44820a34820a4486a21a54820a44820a5486a21a64820a54820a6486a21a74820a64820a7486a21a84820a74820a8486a21a94820a84820" + "a9486a21aa4820a94820aa486a21ab4820aa4820ab486a21ac4820ab4820ac486a21ad4820ac4820ad486a21ae4820ad4820ae486a21af4820" + "ae4820af486a21b04820af4820b0486a21b14820b04820b1486a21b24820b14820b2486a21b34820b24820b3486a21b44820b34820b4486a21" + "b54820b44820b5486a21b64820b54820b6486a21b74820b64820b7486a21b84820b74820b8486a21b94820b84820b9486a21ba4820b94820ba" + "486a21bb4820ba4820bb486a21bc4820bb4820bc486a21bd4820bc4820bd486a21be4820bd4820be486a21bf4820be4820bf486a21c04820bf" + "4820c0486a21c14820c04820c1486a21c24820c14820c2486a21c34820c24820c3486a21c44820c34820c4486a21c54820c44820c5486a21c6" + "4820c54820c6486a21c74820c64820c7486a21c84820c74820c8486a21c94820c84820c9486a21ca4820c94820ca486a21cb4820ca4820cb48" + "6a21cc4820cb4820cc486a21cd4820cc4820cd486a21ce4820cd4820ce486a21cf4820ce4820cf486a21d04820cf4820d0486a21d14820d048" + "20d1486a21d24820d14820d2486a21d34820d24820d3486a21d44820d34820d4486a21d54820d44820d5486a21d64820d54820d6486a21d748" + "20d64820d7486a21d84820d74820d8486a21d94820d84820d9486a21da4820d94820da486a21db4820da4820db486a21dc4820db4820dc486a" + "21dd4820dc4820dd486a21de4820dd4820de486a21df4820de4820df486a21e04820df4820e0486a21e14820e04820e1486a21e24820e14820" + "e2486a21e34820e24820e3486a21e44820e34820e4486a21e54820e44820e5486a21e64820e54820e6486a21e74820e64820e7486a21e84820" + "e74820e8486a21e94820e84820e9486a21ea4820e94820ea486a21eb4820ea4820eb486a21ec4820eb4820ec486a21ed4820ec4820ed486a21" + "ee4820ed4820ee486a21ef4820ee4820ef486a21f04820ef4820f0486a21f14820f04820f1486a21f24820f14820f2486a21f34820f24820f3" + "486a21f44820f34820f4486a21f54820f44820f5486a21f64820f54820f6486a21f74820f64820f7486a21f84820f74820f8486a21f94820f8" + "4820f9486a21fa4820f94820fa486a21fb4820fa4820fb486a21fc4820fb4820fc486a21fd4820fc4820fd486a21fe4820fd4820fe486a21ff" + "4820fe4820ff486a21804920ff482080496a2181492080492081496a2182492081492082496a2183492082492083496a218449208349208449" + "6a2185492084492085496a2186492085492086496a2187492086492087496a2188492087492088496a2189492088492089496a218a49208949" + "208a496a218b49208a49208b496a218c49208b49208c496a218d49208c49208d496a218e49208d49208e496a218f49208e49208f496a219049" + "208f492090496a2191492090492091496a2192492091492092496a2193492092492093496a2194492093492094496a2195492094492095496a" + "2196492095492096496a2197492096492097496a2198492097492098496a2199492098492099496a219a49209949209a496a219b49209a4920" + "9b496a219c49209b49209c496a219d49209c49209d496a219e49209d49209e496a219f49209e49209f496a21a049209f4920a0496a21a14920" + "a04920a1496a21a24920a14920a2496a21a34920a24920a3496a21a44920a34920a4496a21a54920a44920a5496a21a64920a54920a6496a21" + "a74920a64920a7496a21a84920a74920a8496a21a94920a84920a9496a21aa4920a94920aa496a21ab4920aa4920ab496a21ac4920ab4920ac" + "496a21ad4920ac4920ad496a21ae4920ad4920ae496a21af4920ae4920af496a21b04920af4920b0496a21b14920b04920b1496a21b24920b1" + "4920b2496a21b34920b24920b3496a21b44920b34920b4496a21b54920b44920b5496a21b64920b54920b6496a21b74920b64920b7496a21b8" + "4920b74920b8496a21b94920b84920b9496a21ba4920b94920ba496a21bb4920ba4920bb496a21bc4920bb4920bc496a21bd4920bc4920bd49" + "6a21be4920bd4920be496a21bf4920be4920bf496a21c04920bf4920c0496a21c14920c04920c1496a21c24920c14920c2496a21c34920c249" + "20c3496a21c44920c34920c4496a21c54920c44920c5496a21c64920c54920c6496a21c74920c64920c7496a21c84920c74920c8496a21c949" + "20c84920c9496a21ca4920c94920ca496a21cb4920ca4920cb496a21cc4920cb4920cc496a21cd4920cc4920cd496a21ce4920cd4920ce496a" + "21cf4920ce4920cf496a21d04920cf4920d0496a21d14920d04920d1496a21d24920d14920d2496a21d34920d24920d3496a21d44920d34920" + "d4496a21d54920d44920d5496a21d64920d54920d6496a21d74920d64920d7496a21d84920d74920d8496a21d94920d84920d9496a21da4920" + "d94920da496a21db4920da4920db496a21dc4920db4920dc496a21dd4920dc4920dd496a21de4920dd4920de496a21df4920de4920df496a21" + "e04920df4920e0496a21e14920e04920e1496a21e24920e14920e2496a21e34920e24920e3496a21e44920e34920e4496a21e54920e44920e5" + "496a21e64920e54920e6496a21e74920e64920e7496a21e84920e74920e8496a21e94920e84920e9496a21ea4920e94920ea496a21eb4920ea" + "4920eb496a21ec4920eb4920ec496a21ed4920ec4920ed496a21ee4920ed4920ee496a21ef4920ee4920ef496a21f04920ef4920f0496a21f1" + "4920f04920f1496a21f24920f14920f2496a21f34920f24920f3496a21f44920f34920f4496a21f54920f44920f5496a21f64920f54920f649" + "6a21f74920f64920f7496a21f84920f74920f8496a21f94920f84920f9496a21fa4920f94920fa496a21fb4920fa4920fb496a21fc4920fb49" + "20fc496a21fd4920fc4920fd496a21fe4920fd4920fe496a21ff4920fe4920ff496a21804a20ff4920804a6a21814a20804a20814a6a21824a" + "20814a20824a6a21834a20824a20834a6a21844a20834a20844a6a21854a20844a20854a6a21864a20854a20864a6a21874a20864a20874a6a" + "21884a20874a20884a6a21894a20884a20894a6a218a4a20894a208a4a6a218b4a208a4a208b4a6a218c4a208b4a208c4a6a218d4a208c4a20" + "8d4a6a218e4a208d4a208e4a6a218f4a208e4a208f4a6a21904a208f4a20904a6a21914a20904a20914a6a21924a20914a20924a6a21934a20" + "924a20934a6a21944a20934a20944a6a21954a20944a20954a6a21964a20954a20964a6a21974a20964a20974a6a21984a20974a20984a6a21" + "994a20984a20994a6a219a4a20994a209a4a6a219b4a209a4a209b4a6a219c4a209b4a209c4a6a219d4a209c4a209d4a6a219e4a209d4a209e" + "4a6a219f4a209e4a209f4a6a21a04a209f4a20a04a6a21a14a20a04a20a14a6a21a24a20a14a20a24a6a21a34a20a24a20a34a6a21a44a20a3" + "4a20a44a6a21a54a20a44a20a54a6a21a64a20a54a20a64a6a21a74a20a64a20a74a6a21a84a20a74a20a84a6a21a94a20a84a20a94a6a21aa" + "4a20a94a20aa4a6a21ab4a20aa4a20ab4a6a21ac4a20ab4a20ac4a6a21ad4a20ac4a20ad4a6a21ae4a20ad4a20ae4a6a21af4a20ae4a20af4a" + "6a21b04a20af4a20b04a6a21b14a20b04a20b14a6a21b24a20b14a20b24a6a21b34a20b24a20b34a6a21b44a20b34a20b44a6a21b54a20b44a" + "20b54a6a21b64a20b54a20b64a6a21b74a20b64a20b74a6a21b84a20b74a20b84a6a21b94a20b84a20b94a6a21ba4a20b94a20ba4a6a21bb4a" + "20ba4a20bb4a6a21bc4a20bb4a20bc4a6a21bd4a20bc4a20bd4a6a21be4a20bd4a20be4a6a21bf4a20be4a20bf4a6a21c04a20bf4a20c04a6a" + "21c14a20c04a20c14a6a21c24a20c14a20c24a6a21c34a20c24a20c34a6a21c44a20c34a20c44a6a21c54a20c44a20c54a6a21c64a20c54a20" + "c64a6a21c74a20c64a20c74a6a21c84a20c74a20c84a6a21c94a20c84a20c94a6a21ca4a20c94a20ca4a6a21cb4a20ca4a20cb4a6a21cc4a20" + "cb4a20cc4a6a21cd4a20cc4a20cd4a6a21ce4a20cd4a20ce4a6a21cf4a20ce4a20cf4a6a21d04a20cf4a20d04a6a21d14a20d04a20d14a6a21" + "d24a20d14a20d24a6a21d34a20d24a20d34a6a21d44a20d34a20d44a6a21d54a20d44a20d54a6a21d64a20d54a20d64a6a21d74a20d64a20d7" + "4a6a21d84a20d74a20d84a6a21d94a20d84a20d94a6a21da4a20d94a20da4a6a21db4a20da4a20db4a6a21dc4a20db4a20dc4a6a21dd4a20dc" + "4a20dd4a6a21de4a20dd4a20de4a6a21df4a20de4a20df4a6a21e04a20df4a20e04a6a21e14a20e04a20e14a6a21e24a20e14a20e24a6a21e3" + "4a20e24a20e34a6a21e44a20e34a20e44a6a21e54a20e44a20e54a6a21e64a20e54a20e64a6a21e74a20e64a20e74a6a21e84a20e74a20e84a" + "6a21e94a20e84a20e94a6a21ea4a20e94a20ea4a6a21eb4a20ea4a20eb4a6a21ec4a20eb4a20ec4a6a21ed4a20ec4a20ed4a6a21ee4a20ed4a" + "20ee4a6a21ef4a20ee4a20ef4a6a21f04a20ef4a20f04a6a21f14a20f04a20f14a6a21f24a20f14a20f24a6a21f34a20f24a20f34a6a21f44a" + "20f34a20f44a6a21f54a20f44a20f54a6a21f64a20f54a20f64a6a21f74a20f64a20f74a6a21f84a20f74a20f84a6a21f94a20f84a20f94a6a" + "21fa4a20f94a20fa4a6a21fb4a20fa4a20fb4a6a21fc4a20fb4a20fc4a6a21fd4a20fc4a20fd4a6a21fe4a20fd4a20fe4a6a21ff4a20fe4a20" + "ff4a6a21804b20ff4a20804b6a21814b20804b20814b6a21824b20814b20824b6a21834b20824b20834b6a21844b20834b20844b6a21854b20" + "844b20854b6a21864b20854b20864b6a21874b20864b20874b6a21884b20874b20884b6a21894b20884b20894b6a218a4b20894b208a4b6a21" + "8b4b208a4b208b4b6a218c4b208b4b208c4b6a218d4b208c4b208d4b6a218e4b208d4b208e4b6a218f4b208e4b208f4b6a21904b208f4b2090" + "4b6a21914b20904b20914b6a21924b20914b20924b6a21934b20924b20934b6a21944b20934b20944b6a21954b20944b20954b6a21964b2095" + "4b20964b6a21974b20964b20974b6a21984b20974b20984b6a21994b20984b20994b6a219a4b20994b209a4b6a219b4b209a4b209b4b6a219c" + "4b209b4b209c4b6a219d4b209c4b209d4b6a219e4b209d4b209e4b6a219f4b209e4b209f4b6a21a04b209f4b20a04b6a21a14b20a04b20a14b" + "6a21a24b20a14b20a24b6a21a34b20a24b20a34b6a21a44b20a34b20a44b6a21a54b20a44b20a54b6a21a64b20a54b20a64b6a21a74b20a64b" + "20a74b6a21a84b20a74b20a84b6a21a94b20a84b20a94b6a21aa4b20a94b20aa4b6a21ab4b20aa4b20ab4b6a21ac4b20ab4b20ac4b6a21ad4b" + "20ac4b20ad4b6a21ae4b20ad4b20ae4b6a21af4b20ae4b20af4b6a21b04b20af4b20b04b6a21b14b20b04b20b14b6a21b24b20b14b20b24b6a" + "21b34b20b24b20b34b6a21b44b20b34b20b44b6a21b54b20b44b20b54b6a21b64b20b54b20b64b6a21b74b20b64b20b74b6a21b84b20b74b20" + "b84b6a21b94b20b84b20b94b6a21ba4b20b94b20ba4b6a21bb4b20ba4b20bb4b6a21bc4b20bb4b20bc4b6a21bd4b20bc4b20bd4b6a21be4b20" + "bd4b20be4b6a21bf4b20be4b20bf4b6a21c04b20bf4b20c04b6a21c14b20c04b20c14b6a21c24b20c14b20c24b6a21c34b20c24b20c34b6a21" + "c44b20c34b20c44b6a21c54b20c44b20c54b6a21c64b20c54b20c64b6a21c74b20c64b20c74b6a21c84b20c74b20c84b6a21c94b20c84b20c9" + "4b6a21ca4b20c94b20ca4b6a21cb4b20ca4b20cb4b6a21cc4b20cb4b20cc4b6a21cd4b20cc4b20cd4b6a21ce4b20cd4b20ce4b6a21cf4b20ce" + "4b20cf4b6a21d04b20cf4b20d04b6a21d14b20d04b20d14b6a21d24b20d14b20d24b6a21d34b20d24b20d34b6a21d44b20d34b20d44b6a21d5" + "4b20d44b20d54b6a21d64b20d54b20d64b6a21d74b20d64b20d74b6a21d84b20d74b20d84b6a21d94b20d84b20d94b6a21da4b20d94b20da4b" + "6a21db4b20da4b20db4b6a21dc4b20db4b20dc4b6a21dd4b20dc4b20dd4b6a21de4b20dd4b20de4b6a21df4b20de4b20df4b6a21e04b20df4b" + "20e04b6a21e14b20e04b20e14b6a21e24b20e14b20e24b6a21e34b20e24b20e34b6a21e44b20e34b20e44b6a21e54b20e44b20e54b6a21e64b" + "20e54b20e64b6a21e74b20e64b20e74b6a21e84b20e74b20e84b6a21e94b20e84b20e94b6a21ea4b20e94b20ea4b6a21eb4b20ea4b20eb4b6a" + "21ec4b20eb4b20ec4b6a21ed4b20ec4b20ed4b6a21ee4b20ed4b20ee4b6a21ef4b20ee4b20ef4b6a21f04b20ef4b20f04b6a21f14b20f04b20" + "f14b6a21f24b20f14b20f24b6a21f34b20f24b20f34b6a21f44b20f34b20f44b6a21f54b20f44b20f54b6a21f64b20f54b20f64b6a21f74b20" + "f64b20f74b6a21f84b20f74b20f84b6a21f94b20f84b20f94b6a21fa4b20f94b20fa4b6a21fb4b20fa4b20fb4b6a21fc4b20fb4b20fc4b6a21" + "fd4b20fc4b20fd4b6a21fe4b20fd4b20fe4b6a21ff4b20fe4b20ff4b6a21804c20ff4b20804c6a21814c20804c20814c6a21824c20814c2082" + "4c6a21834c20824c20834c6a21844c20834c20844c6a21854c20844c20854c6a21864c20854c20864c6a21874c20864c20874c6a21884c2087" + "4c20884c6a21894c20884c20894c6a218a4c20894c208a4c6a218b4c208a4c208b4c6a218c4c208b4c208c4c6a218d4c208c4c208d4c6a218e" + "4c208d4c208e4c6a218f4c208e4c208f4c6a21904c208f4c20904c6a21914c20904c20914c6a21924c20914c20924c6a21934c20924c20934c" + "6a21944c20934c20944c6a21954c20944c20954c6a21964c20954c20964c6a21974c20964c20974c6a21984c20974c20984c6a21994c20984c" + "20994c6a219a4c20994c209a4c6a219b4c209a4c209b4c6a219c4c209b4c209c4c6a219d4c209c4c209d4c6a219e4c209d4c209e4c6a219f4c" + "209e4c209f4c6a21a04c209f4c20a04c6a21a14c20a04c20a14c6a21a24c20a14c20a24c6a21a34c20a24c20a34c6a21a44c20a34c20a44c6a" + "21a54c20a44c20a54c6a21a64c20a54c20a64c6a21a74c20a64c20a74c6a21a84c20a74c20a84c6a21a94c20a84c20a94c6a21aa4c20a94c20" + "aa4c6a21ab4c20aa4c20ab4c6a21ac4c20ab4c20ac4c6a21ad4c20ac4c20ad4c6a21ae4c20ad4c20ae4c6a21af4c20ae4c20af4c6a21b04c20" + "af4c20b04c6a21b14c20b04c20b14c6a21b24c20b14c20b24c6a21b34c20b24c20b34c6a21b44c20b34c20b44c6a21b54c20b44c20b54c6a21" + "b64c20b54c20b64c6a21b74c20b64c20b74c6a21b84c20b74c20b84c6a21b94c20b84c20b94c6a21ba4c20b94c20ba4c6a21bb4c20ba4c20bb" + "4c6a21bc4c20bb4c20bc4c6a21bd4c20bc4c20bd4c6a21be4c20bd4c20be4c6a21bf4c20be4c20bf4c6a21c04c20bf4c20c04c6a21c14c20c0" + "4c20c14c6a21c24c20c14c20c24c6a21c34c20c24c20c34c6a21c44c20c34c20c44c6a21c54c20c44c20c54c6a21c64c20c54c20c64c6a21c7" + "4c20c64c20c74c6a21c84c20c74c20c84c6a21c94c20c84c20c94c6a21ca4c20c94c20ca4c6a21cb4c20ca4c20cb4c6a21cc4c20cb4c20cc4c" + "6a21cd4c20cc4c20cd4c6a21ce4c20cd4c20ce4c6a21cf4c20ce4c20cf4c6a21d04c20cf4c20d04c6a21d14c20d04c20d14c6a21d24c20d14c" + "20d24c6a21d34c20d24c20d34c6a21d44c20d34c20d44c6a21d54c20d44c20d54c6a21d64c20d54c20d64c6a21d74c20d64c20d74c6a21d84c" + "20d74c20d84c6a21d94c20d84c20d94c6a21da4c20d94c20da4c6a21db4c20da4c20db4c6a21dc4c20db4c20dc4c6a21dd4c20dc4c20dd4c6a" + "21de4c20dd4c20de4c6a21df4c20de4c20df4c6a21e04c20df4c20e04c6a21e14c20e04c20e14c6a21e24c20e14c20e24c6a21e34c20e24c20" + "e34c6a21e44c20e34c20e44c6a21e54c20e44c20e54c6a21e64c20e54c20e64c6a21e74c20e64c20e74c6a21e84c20e74c20e84c6a21e94c20" + "e84c20e94c6a21ea4c20e94c20ea4c6a21eb4c20ea4c20eb4c6a21ec4c20eb4c20ec4c6a21ed4c20ec4c20ed4c6a21ee4c20ed4c20ee4c6a21" + "ef4c20ee4c20ef4c6a21f04c20ef4c20f04c6a21f14c20f04c20f14c6a21f24c20f14c20f24c6a21f34c20f24c20f34c6a21f44c20f34c20f4" + "4c6a21f54c20f44c20f54c6a21f64c20f54c20f64c6a21f74c20f64c20f74c6a21f84c20f74c20f84c6a21f94c20f84c20f94c6a21fa4c20f9" + "4c20fa4c6a21fb4c20fa4c20fb4c6a21fc4c20fb4c20fc4c6a21fd4c20fc4c20fd4c6a21fe4c20fd4c20fe4c6a21ff4c20fe4c20ff4c6a2180" + "4d20ff4c20804d6a21814d20804d20814d6a21824d20814d20824d6a21834d20824d20834d6a21844d20834d20844d6a21854d20844d20854d" + "6a21864d20854d20864d6a21874d20864d20874d6a21884d20874d20884d6a21894d20884d20894d6a218a4d20894d208a4d6a218b4d208a4d" + "208b4d6a218c4d208b4d208c4d6a218d4d208c4d208d4d6a218e4d208d4d208e4d6a218f4d208e4d208f4d6a21904d208f4d20904d6a21914d" + "20904d20914d6a21924d20914d20924d6a21934d20924d20934d6a21944d20934d20944d6a21954d20944d20954d6a21964d20954d20964d6a" + "21974d20964d20974d6a21984d20974d20984d6a21994d20984d20994d6a219a4d20994d209a4d6a219b4d209a4d209b4d6a219c4d209b4d20" + "9c4d6a219d4d209c4d209d4d6a219e4d209d4d209e4d6a219f4d209e4d209f4d6a21a04d209f4d20a04d6a21a14d20a04d20a14d6a21a24d20" + "a14d20a24d6a21a34d20a24d20a34d6a21a44d20a34d20a44d6a21a54d20a44d20a54d6a21a64d20a54d20a64d6a21a74d20a64d20a74d6a21" + "a84d20a74d20a84d6a21a94d20a84d20a94d6a21aa4d20a94d20aa4d6a21ab4d20aa4d20ab4d6a21ac4d20ab4d20ac4d6a21ad4d20ac4d20ad" + "4d6a21ae4d20ad4d20ae4d6a21af4d20ae4d20af4d6a21b04d20af4d20b04d6a21b14d20b04d20b14d6a21b24d20b14d20b24d6a21b34d20b2" + "4d20b34d6a21b44d20b34d20b44d6a21b54d20b44d20b54d6a21b64d20b54d20b64d6a21b74d20b64d20b74d6a21b84d20b74d20b84d6a21b9" + "4d20b84d20b94d6a21ba4d20b94d20ba4d6a21bb4d20ba4d20bb4d6a21bc4d20bb4d20bc4d6a21bd4d20bc4d20bd4d6a21be4d20bd4d20be4d" + "6a21bf4d20be4d20bf4d6a21c04d20bf4d20c04d6a21c14d20c04d20c14d6a21c24d20c14d20c24d6a21c34d20c24d20c34d6a21c44d20c34d" + "20c44d6a21c54d20c44d20c54d6a21c64d20c54d20c64d6a21c74d20c64d20c74d6a21c84d20c74d20c84d6a21c94d20c84d20c94d6a21ca4d" + "20c94d20ca4d6a21cb4d20ca4d20cb4d6a21cc4d20cb4d20cc4d6a21cd4d20cc4d20cd4d6a21ce4d20cd4d20ce4d6a21cf4d20ce4d20cf4d6a" + "21d04d20cf4d20d04d6a21d14d20d04d20d14d6a21d24d20d14d20d24d6a21d34d20d24d20d34d6a21d44d20d34d20d44d6a21d54d20d44d20" + "d54d6a21d64d20d54d20d64d6a21d74d20d64d20d74d6a21d84d20d74d20d84d6a21d94d20d84d20d94d6a21da4d20d94d20da4d6a21db4d20" + "da4d20db4d6a21dc4d20db4d20dc4d6a21dd4d20dc4d20dd4d6a21de4d20dd4d20de4d6a21df4d20de4d20df4d6a21e04d20df4d20e04d6a21" + "e14d20e04d20e14d6a21e24d20e14d20e24d6a21e34d20e24d20e34d6a21e44d20e34d20e44d6a21e54d20e44d20e54d6a21e64d20e54d20e6" + "4d6a21e74d20e64d20e74d6a21e84d20e74d20e84d6a21e94d20e84d20e94d6a21ea4d20e94d20ea4d6a21eb4d20ea4d20eb4d6a21ec4d20eb" + "4d20ec4d6a21ed4d20ec4d20ed4d6a21ee4d20ed4d20ee4d6a21ef4d20ee4d20ef4d6a21f04d20ef4d20f04d6a21f14d20f04d20f14d6a21f2" + "4d20f14d20f24d6a21f34d20f24d20f34d6a21f44d20f34d20f44d6a21f54d20f44d20f54d6a21f64d20f54d20f64d6a21f74d20f64d20f74d" + "6a21f84d20f74d20f84d6a21f94d20f84d20f94d6a21fa4d20f94d20fa4d6a21fb4d20fa4d20fb4d6a21fc4d20fb4d20fc4d6a21fd4d20fc4d" + "20fd4d6a21fe4d20fd4d20fe4d6a21ff4d20fe4d20ff4d6a21804e20ff4d20804e6a21814e20804e20814e6a21824e20814e20824e6a21834e" + "20824e20834e6a21844e20834e20844e6a21854e20844e20854e6a21864e20854e20864e6a21874e20864e20874e6a21884e20874e20884e6a" + "21894e20884e20894e6a218a4e20894e208a4e6a218b4e208a4e208b4e6a218c4e208b4e208c4e6a218d4e208c4e208d4e6a218e4e208d4e20" + "8e4e6a218f4e208f4e0b"; + +extern std::string const functions5kHex = + "0061736d0100000001070160027f7f017f038a2788270000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000007e2d3038827087465737430303030000008746573743030303100010874657374303030320002087465737430303033000308" + "746573743030303400040874657374303030350005087465737430303036000608746573743030303700070874657374303030380008087465" + "7374303030390009087465737430303130000a087465737430303131000b087465737430303132000c087465737430303133000d0874657374" + "30303134000e087465737430303135000f08746573743030313600100874657374303031370011087465737430303138001208746573743030" + "313900130874657374303032300014087465737430303231001508746573743030323200160874657374303032330017087465737430303234" + "00180874657374303032350019087465737430303236001a087465737430303237001b087465737430303238001c087465737430303239001d" + "087465737430303330001e087465737430303331001f0874657374303033320020087465737430303333002108746573743030333400220874" + "657374303033350023087465737430303336002408746573743030333700250874657374303033380026087465737430303339002708746573" + "743030343000280874657374303034310029087465737430303432002a087465737430303433002b087465737430303434002c087465737430" + "303435002d087465737430303436002e087465737430303437002f087465737430303438003008746573743030343900310874657374303035" + "300032087465737430303531003308746573743030353200340874657374303035330035087465737430303534003608746573743030353500" + "3708746573743030353600380874657374303035370039087465737430303538003a087465737430303539003b087465737430303630003c08" + "7465737430303631003d087465737430303632003e087465737430303633003f08746573743030363400400874657374303036350041087465" + "737430303636004208746573743030363700430874657374303036380044087465737430303639004508746573743030373000460874657374" + "30303731004708746573743030373200480874657374303037330049087465737430303734004a087465737430303735004b08746573743030" + "3736004c087465737430303737004d087465737430303738004e087465737430303739004f0874657374303038300050087465737430303831" + "005108746573743030383200520874657374303038330053087465737430303834005408746573743030383500550874657374303038360056" + "087465737430303837005708746573743030383800580874657374303038390059087465737430303930005a087465737430303931005b0874" + "65737430303932005c087465737430303933005d087465737430303934005e087465737430303935005f087465737430303936006008746573" + "743030393700610874657374303039380062087465737430303939006308746573743031303000640874657374303130310065087465737430" + "3130320066087465737430313033006708746573743031303400680874657374303130350069087465737430313036006a0874657374303130" + "37006b087465737430313038006c087465737430313039006d087465737430313130006e087465737430313131006f08746573743031313200" + "700874657374303131330071087465737430313134007208746573743031313500730874657374303131360074087465737430313137007508" + "74657374303131380076087465737430313139007708746573743031323000780874657374303132310079087465737430313232007a087465" + "737430313233007b087465737430313234007c087465737430313235007d087465737430313236007e087465737430313237007f0874657374" + "303132380080010874657374303132390081010874657374303133300082010874657374303133310083010874657374303133320084010874" + "657374303133330085010874657374303133340086010874657374303133350087010874657374303133360088010874657374303133370089" + "01087465737430313338008a01087465737430313339008b01087465737430313430008c01087465737430313431008d010874657374303134" + "32008e01087465737430313433008f010874657374303134340090010874657374303134350091010874657374303134360092010874657374" + "303134370093010874657374303134380094010874657374303134390095010874657374303135300096010874657374303135310097010874" + "65737430313532009801087465737430313533009901087465737430313534009a01087465737430313535009b01087465737430313536009c" + "01087465737430313537009d01087465737430313538009e01087465737430313539009f0108746573743031363000a0010874657374303136" + "3100a10108746573743031363200a20108746573743031363300a30108746573743031363400a40108746573743031363500a5010874657374" + "3031363600a60108746573743031363700a70108746573743031363800a80108746573743031363900a90108746573743031373000aa010874" + "6573743031373100ab0108746573743031373200ac0108746573743031373300ad0108746573743031373400ae0108746573743031373500af" + "0108746573743031373600b00108746573743031373700b10108746573743031373800b20108746573743031373900b3010874657374303138" + "3000b40108746573743031383100b50108746573743031383200b60108746573743031383300b70108746573743031383400b8010874657374" + "3031383500b90108746573743031383600ba0108746573743031383700bb0108746573743031383800bc0108746573743031383900bd010874" + "6573743031393000be0108746573743031393100bf0108746573743031393200c00108746573743031393300c10108746573743031393400c2" + "0108746573743031393500c30108746573743031393600c40108746573743031393700c50108746573743031393800c6010874657374303139" + "3900c70108746573743032303000c80108746573743032303100c90108746573743032303200ca0108746573743032303300cb010874657374" + "3032303400cc0108746573743032303500cd0108746573743032303600ce0108746573743032303700cf0108746573743032303800d0010874" + "6573743032303900d10108746573743032313000d20108746573743032313100d30108746573743032313200d40108746573743032313300d5" + "0108746573743032313400d60108746573743032313500d70108746573743032313600d80108746573743032313700d9010874657374303231" + "3800da0108746573743032313900db0108746573743032323000dc0108746573743032323100dd0108746573743032323200de010874657374" + "3032323300df0108746573743032323400e00108746573743032323500e10108746573743032323600e20108746573743032323700e3010874" + "6573743032323800e40108746573743032323900e50108746573743032333000e60108746573743032333100e70108746573743032333200e8" + "0108746573743032333300e90108746573743032333400ea0108746573743032333500eb0108746573743032333600ec010874657374303233" + "3700ed0108746573743032333800ee0108746573743032333900ef0108746573743032343000f00108746573743032343100f1010874657374" + "3032343200f20108746573743032343300f30108746573743032343400f40108746573743032343500f50108746573743032343600f6010874" + "6573743032343700f70108746573743032343800f80108746573743032343900f90108746573743032353000fa0108746573743032353100fb" + "0108746573743032353200fc0108746573743032353300fd0108746573743032353400fe0108746573743032353500ff010874657374303235" + "360080020874657374303235370081020874657374303235380082020874657374303235390083020874657374303236300084020874657374" + "303236310085020874657374303236320086020874657374303236330087020874657374303236340088020874657374303236350089020874" + "65737430323636008a02087465737430323637008b02087465737430323638008c02087465737430323639008d02087465737430323730008e" + "02087465737430323731008f020874657374303237320090020874657374303237330091020874657374303237340092020874657374303237" + "350093020874657374303237360094020874657374303237370095020874657374303237380096020874657374303237390097020874657374" + "30323830009802087465737430323831009902087465737430323832009a02087465737430323833009b02087465737430323834009c020874" + "65737430323835009d02087465737430323836009e02087465737430323837009f0208746573743032383800a00208746573743032383900a1" + "0208746573743032393000a20208746573743032393100a30208746573743032393200a40208746573743032393300a5020874657374303239" + "3400a60208746573743032393500a70208746573743032393600a80208746573743032393700a90208746573743032393800aa020874657374" + "3032393900ab0208746573743033303000ac0208746573743033303100ad0208746573743033303200ae0208746573743033303300af020874" + "6573743033303400b00208746573743033303500b10208746573743033303600b20208746573743033303700b30208746573743033303800b4" + "0208746573743033303900b50208746573743033313000b60208746573743033313100b70208746573743033313200b8020874657374303331" + "3300b90208746573743033313400ba0208746573743033313500bb0208746573743033313600bc0208746573743033313700bd020874657374" + "3033313800be0208746573743033313900bf0208746573743033323000c00208746573743033323100c10208746573743033323200c2020874" + "6573743033323300c30208746573743033323400c40208746573743033323500c50208746573743033323600c60208746573743033323700c7" + "0208746573743033323800c80208746573743033323900c90208746573743033333000ca0208746573743033333100cb020874657374303333" + "3200cc0208746573743033333300cd0208746573743033333400ce0208746573743033333500cf0208746573743033333600d0020874657374" + "3033333700d10208746573743033333800d20208746573743033333900d30208746573743033343000d40208746573743033343100d5020874" + "6573743033343200d60208746573743033343300d70208746573743033343400d80208746573743033343500d90208746573743033343600da" + "0208746573743033343700db0208746573743033343800dc0208746573743033343900dd0208746573743033353000de020874657374303335" + "3100df0208746573743033353200e00208746573743033353300e10208746573743033353400e20208746573743033353500e3020874657374" + "3033353600e40208746573743033353700e50208746573743033353800e60208746573743033353900e70208746573743033363000e8020874" + "6573743033363100e90208746573743033363200ea0208746573743033363300eb0208746573743033363400ec0208746573743033363500ed" + "0208746573743033363600ee0208746573743033363700ef0208746573743033363800f00208746573743033363900f1020874657374303337" + "3000f20208746573743033373100f30208746573743033373200f40208746573743033373300f50208746573743033373400f6020874657374" + "3033373500f70208746573743033373600f80208746573743033373700f90208746573743033373800fa0208746573743033373900fb020874" + "6573743033383000fc0208746573743033383100fd0208746573743033383200fe0208746573743033383300ff020874657374303338340080" + "030874657374303338350081030874657374303338360082030874657374303338370083030874657374303338380084030874657374303338" + "390085030874657374303339300086030874657374303339310087030874657374303339320088030874657374303339330089030874657374" + "30333934008a03087465737430333935008b03087465737430333936008c03087465737430333937008d03087465737430333938008e030874" + "65737430333939008f030874657374303430300090030874657374303430310091030874657374303430320092030874657374303430330093" + "030874657374303430340094030874657374303430350095030874657374303430360096030874657374303430370097030874657374303430" + "38009803087465737430343039009903087465737430343130009a03087465737430343131009b03087465737430343132009c030874657374" + "30343133009d03087465737430343134009e03087465737430343135009f0308746573743034313600a00308746573743034313700a1030874" + "6573743034313800a20308746573743034313900a30308746573743034323000a40308746573743034323100a50308746573743034323200a6" + "0308746573743034323300a70308746573743034323400a80308746573743034323500a90308746573743034323600aa030874657374303432" + "3700ab0308746573743034323800ac0308746573743034323900ad0308746573743034333000ae0308746573743034333100af030874657374" + "3034333200b00308746573743034333300b10308746573743034333400b20308746573743034333500b30308746573743034333600b4030874" + "6573743034333700b50308746573743034333800b60308746573743034333900b70308746573743034343000b80308746573743034343100b9" + "0308746573743034343200ba0308746573743034343300bb0308746573743034343400bc0308746573743034343500bd030874657374303434" + "3600be0308746573743034343700bf0308746573743034343800c00308746573743034343900c10308746573743034353000c2030874657374" + "3034353100c30308746573743034353200c40308746573743034353300c50308746573743034353400c60308746573743034353500c7030874" + "6573743034353600c80308746573743034353700c90308746573743034353800ca0308746573743034353900cb0308746573743034363000cc" + "0308746573743034363100cd0308746573743034363200ce0308746573743034363300cf0308746573743034363400d0030874657374303436" + "3500d10308746573743034363600d20308746573743034363700d30308746573743034363800d40308746573743034363900d5030874657374" + "3034373000d60308746573743034373100d70308746573743034373200d80308746573743034373300d90308746573743034373400da030874" + "6573743034373500db0308746573743034373600dc0308746573743034373700dd0308746573743034373800de0308746573743034373900df" + "0308746573743034383000e00308746573743034383100e10308746573743034383200e20308746573743034383300e3030874657374303438" + "3400e40308746573743034383500e50308746573743034383600e60308746573743034383700e70308746573743034383800e8030874657374" + "3034383900e90308746573743034393000ea0308746573743034393100eb0308746573743034393200ec0308746573743034393300ed030874" + "6573743034393400ee0308746573743034393500ef0308746573743034393600f00308746573743034393700f10308746573743034393800f2" + "0308746573743034393900f30308746573743035303000f40308746573743035303100f50308746573743035303200f6030874657374303530" + "3300f70308746573743035303400f80308746573743035303500f90308746573743035303600fa0308746573743035303700fb030874657374" + "3035303800fc0308746573743035303900fd0308746573743035313000fe0308746573743035313100ff030874657374303531320080040874" + "657374303531330081040874657374303531340082040874657374303531350083040874657374303531360084040874657374303531370085" + "040874657374303531380086040874657374303531390087040874657374303532300088040874657374303532310089040874657374303532" + "32008a04087465737430353233008b04087465737430353234008c04087465737430353235008d04087465737430353236008e040874657374" + "30353237008f040874657374303532380090040874657374303532390091040874657374303533300092040874657374303533310093040874" + "657374303533320094040874657374303533330095040874657374303533340096040874657374303533350097040874657374303533360098" + "04087465737430353337009904087465737430353338009a04087465737430353339009b04087465737430353430009c040874657374303534" + "31009d04087465737430353432009e04087465737430353433009f0408746573743035343400a00408746573743035343500a1040874657374" + "3035343600a20408746573743035343700a30408746573743035343800a40408746573743035343900a50408746573743035353000a6040874" + "6573743035353100a70408746573743035353200a80408746573743035353300a90408746573743035353400aa0408746573743035353500ab" + "0408746573743035353600ac0408746573743035353700ad0408746573743035353800ae0408746573743035353900af040874657374303536" + "3000b00408746573743035363100b10408746573743035363200b20408746573743035363300b30408746573743035363400b4040874657374" + "3035363500b50408746573743035363600b60408746573743035363700b70408746573743035363800b80408746573743035363900b9040874" + "6573743035373000ba0408746573743035373100bb0408746573743035373200bc0408746573743035373300bd0408746573743035373400be" + "0408746573743035373500bf0408746573743035373600c00408746573743035373700c10408746573743035373800c2040874657374303537" + "3900c30408746573743035383000c40408746573743035383100c50408746573743035383200c60408746573743035383300c7040874657374" + "3035383400c80408746573743035383500c90408746573743035383600ca0408746573743035383700cb0408746573743035383800cc040874" + "6573743035383900cd0408746573743035393000ce0408746573743035393100cf0408746573743035393200d00408746573743035393300d1" + "0408746573743035393400d20408746573743035393500d30408746573743035393600d40408746573743035393700d5040874657374303539" + "3800d60408746573743035393900d70408746573743036303000d80408746573743036303100d90408746573743036303200da040874657374" + "3036303300db0408746573743036303400dc0408746573743036303500dd0408746573743036303600de0408746573743036303700df040874" + "6573743036303800e00408746573743036303900e10408746573743036313000e20408746573743036313100e30408746573743036313200e4" + "0408746573743036313300e50408746573743036313400e60408746573743036313500e70408746573743036313600e8040874657374303631" + "3700e90408746573743036313800ea0408746573743036313900eb0408746573743036323000ec0408746573743036323100ed040874657374" + "3036323200ee0408746573743036323300ef0408746573743036323400f00408746573743036323500f10408746573743036323600f2040874" + "6573743036323700f30408746573743036323800f40408746573743036323900f50408746573743036333000f60408746573743036333100f7" + "0408746573743036333200f80408746573743036333300f90408746573743036333400fa0408746573743036333500fb040874657374303633" + "3600fc0408746573743036333700fd0408746573743036333800fe0408746573743036333900ff040874657374303634300080050874657374" + "303634310081050874657374303634320082050874657374303634330083050874657374303634340084050874657374303634350085050874" + "65737430363436008605087465737430363437008705087465737430363438008805087465737430363439008905087465737430363530008a" + "05087465737430363531008b05087465737430363532008c05087465737430363533008d05087465737430363534008e050874657374303635" + "35008f050874657374303635360090050874657374303635370091050874657374303635380092050874657374303635390093050874657374" + "303636300094050874657374303636310095050874657374303636320096050874657374303636330097050874657374303636340098050874" + "65737430363635009905087465737430363636009a05087465737430363637009b05087465737430363638009c05087465737430363639009d" + "05087465737430363730009e05087465737430363731009f0508746573743036373200a00508746573743036373300a1050874657374303637" + "3400a20508746573743036373500a30508746573743036373600a40508746573743036373700a50508746573743036373800a6050874657374" + "3036373900a70508746573743036383000a80508746573743036383100a90508746573743036383200aa0508746573743036383300ab050874" + "6573743036383400ac0508746573743036383500ad0508746573743036383600ae0508746573743036383700af0508746573743036383800b0" + "0508746573743036383900b10508746573743036393000b20508746573743036393100b30508746573743036393200b4050874657374303639" + "3300b50508746573743036393400b60508746573743036393500b70508746573743036393600b80508746573743036393700b9050874657374" + "3036393800ba0508746573743036393900bb0508746573743037303000bc0508746573743037303100bd0508746573743037303200be050874" + "6573743037303300bf0508746573743037303400c00508746573743037303500c10508746573743037303600c20508746573743037303700c3" + "0508746573743037303800c40508746573743037303900c50508746573743037313000c60508746573743037313100c7050874657374303731" + "3200c80508746573743037313300c90508746573743037313400ca0508746573743037313500cb0508746573743037313600cc050874657374" + "3037313700cd0508746573743037313800ce0508746573743037313900cf0508746573743037323000d00508746573743037323100d1050874" + "6573743037323200d20508746573743037323300d30508746573743037323400d40508746573743037323500d50508746573743037323600d6" + "0508746573743037323700d70508746573743037323800d80508746573743037323900d90508746573743037333000da050874657374303733" + "3100db0508746573743037333200dc0508746573743037333300dd0508746573743037333400de0508746573743037333500df050874657374" + "3037333600e00508746573743037333700e10508746573743037333800e20508746573743037333900e30508746573743037343000e4050874" + "6573743037343100e50508746573743037343200e60508746573743037343300e70508746573743037343400e80508746573743037343500e9" + "0508746573743037343600ea0508746573743037343700eb0508746573743037343800ec0508746573743037343900ed050874657374303735" + "3000ee0508746573743037353100ef0508746573743037353200f00508746573743037353300f10508746573743037353400f2050874657374" + "3037353500f30508746573743037353600f40508746573743037353700f50508746573743037353800f60508746573743037353900f7050874" + "6573743037363000f80508746573743037363100f90508746573743037363200fa0508746573743037363300fb0508746573743037363400fc" + "0508746573743037363500fd0508746573743037363600fe0508746573743037363700ff050874657374303736380080060874657374303736" + "390081060874657374303737300082060874657374303737310083060874657374303737320084060874657374303737330085060874657374" + "30373734008606087465737430373735008706087465737430373736008806087465737430373737008906087465737430373738008a060874" + "65737430373739008b06087465737430373830008c06087465737430373831008d06087465737430373832008e06087465737430373833008f" + "060874657374303738340090060874657374303738350091060874657374303738360092060874657374303738370093060874657374303738" + "380094060874657374303738390095060874657374303739300096060874657374303739310097060874657374303739320098060874657374" + "30373933009906087465737430373934009a06087465737430373935009b06087465737430373936009c06087465737430373937009d060874" + "65737430373938009e06087465737430373939009f0608746573743038303000a00608746573743038303100a10608746573743038303200a2" + "0608746573743038303300a30608746573743038303400a40608746573743038303500a50608746573743038303600a6060874657374303830" + "3700a70608746573743038303800a80608746573743038303900a90608746573743038313000aa0608746573743038313100ab060874657374" + "3038313200ac0608746573743038313300ad0608746573743038313400ae0608746573743038313500af0608746573743038313600b0060874" + "6573743038313700b10608746573743038313800b20608746573743038313900b30608746573743038323000b40608746573743038323100b5" + "0608746573743038323200b60608746573743038323300b70608746573743038323400b80608746573743038323500b9060874657374303832" + "3600ba0608746573743038323700bb0608746573743038323800bc0608746573743038323900bd0608746573743038333000be060874657374" + "3038333100bf0608746573743038333200c00608746573743038333300c10608746573743038333400c20608746573743038333500c3060874" + "6573743038333600c40608746573743038333700c50608746573743038333800c60608746573743038333900c70608746573743038343000c8" + "0608746573743038343100c90608746573743038343200ca0608746573743038343300cb0608746573743038343400cc060874657374303834" + "3500cd0608746573743038343600ce0608746573743038343700cf0608746573743038343800d00608746573743038343900d1060874657374" + "3038353000d20608746573743038353100d30608746573743038353200d40608746573743038353300d50608746573743038353400d6060874" + "6573743038353500d70608746573743038353600d80608746573743038353700d90608746573743038353800da0608746573743038353900db" + "0608746573743038363000dc0608746573743038363100dd0608746573743038363200de0608746573743038363300df060874657374303836" + "3400e00608746573743038363500e10608746573743038363600e20608746573743038363700e30608746573743038363800e4060874657374" + "3038363900e50608746573743038373000e60608746573743038373100e70608746573743038373200e80608746573743038373300e9060874" + "6573743038373400ea0608746573743038373500eb0608746573743038373600ec0608746573743038373700ed0608746573743038373800ee" + "0608746573743038373900ef0608746573743038383000f00608746573743038383100f10608746573743038383200f2060874657374303838" + "3300f30608746573743038383400f40608746573743038383500f50608746573743038383600f60608746573743038383700f7060874657374" + "3038383800f80608746573743038383900f90608746573743038393000fa0608746573743038393100fb0608746573743038393200fc060874" + "6573743038393300fd0608746573743038393400fe0608746573743038393500ff060874657374303839360080070874657374303839370081" + "070874657374303839380082070874657374303839390083070874657374303930300084070874657374303930310085070874657374303930" + "32008607087465737430393033008707087465737430393034008807087465737430393035008907087465737430393036008a070874657374" + "30393037008b07087465737430393038008c07087465737430393039008d07087465737430393130008e07087465737430393131008f070874" + "657374303931320090070874657374303931330091070874657374303931340092070874657374303931350093070874657374303931360094" + "070874657374303931370095070874657374303931380096070874657374303931390097070874657374303932300098070874657374303932" + "31009907087465737430393232009a07087465737430393233009b07087465737430393234009c07087465737430393235009d070874657374" + "30393236009e07087465737430393237009f0708746573743039323800a00708746573743039323900a10708746573743039333000a2070874" + "6573743039333100a30708746573743039333200a40708746573743039333300a50708746573743039333400a60708746573743039333500a7" + "0708746573743039333600a80708746573743039333700a90708746573743039333800aa0708746573743039333900ab070874657374303934" + "3000ac0708746573743039343100ad0708746573743039343200ae0708746573743039343300af0708746573743039343400b0070874657374" + "3039343500b10708746573743039343600b20708746573743039343700b30708746573743039343800b40708746573743039343900b5070874" + "6573743039353000b60708746573743039353100b70708746573743039353200b80708746573743039353300b90708746573743039353400ba" + "0708746573743039353500bb0708746573743039353600bc0708746573743039353700bd0708746573743039353800be070874657374303935" + "3900bf0708746573743039363000c00708746573743039363100c10708746573743039363200c20708746573743039363300c3070874657374" + "3039363400c40708746573743039363500c50708746573743039363600c60708746573743039363700c70708746573743039363800c8070874" + "6573743039363900c90708746573743039373000ca0708746573743039373100cb0708746573743039373200cc0708746573743039373300cd" + "0708746573743039373400ce0708746573743039373500cf0708746573743039373600d00708746573743039373700d1070874657374303937" + "3800d20708746573743039373900d30708746573743039383000d40708746573743039383100d50708746573743039383200d6070874657374" + "3039383300d70708746573743039383400d80708746573743039383500d90708746573743039383600da0708746573743039383700db070874" + "6573743039383800dc0708746573743039383900dd0708746573743039393000de0708746573743039393100df0708746573743039393200e0" + "0708746573743039393300e10708746573743039393400e20708746573743039393500e30708746573743039393600e4070874657374303939" + "3700e50708746573743039393800e60708746573743039393900e70708746573743130303000e80708746573743130303100e9070874657374" + "3130303200ea0708746573743130303300eb0708746573743130303400ec0708746573743130303500ed0708746573743130303600ee070874" + "6573743130303700ef0708746573743130303800f00708746573743130303900f10708746573743130313000f20708746573743130313100f3" + "0708746573743130313200f40708746573743130313300f50708746573743130313400f60708746573743130313500f7070874657374313031" + "3600f80708746573743130313700f90708746573743130313800fa0708746573743130313900fb0708746573743130323000fc070874657374" + "3130323100fd0708746573743130323200fe0708746573743130323300ff070874657374313032340080080874657374313032350081080874" + "657374313032360082080874657374313032370083080874657374313032380084080874657374313032390085080874657374313033300086" + "08087465737431303331008708087465737431303332008808087465737431303333008908087465737431303334008a080874657374313033" + "35008b08087465737431303336008c08087465737431303337008d08087465737431303338008e08087465737431303339008f080874657374" + "313034300090080874657374313034310091080874657374313034320092080874657374313034330093080874657374313034340094080874" + "657374313034350095080874657374313034360096080874657374313034370097080874657374313034380098080874657374313034390099" + "08087465737431303530009a08087465737431303531009b08087465737431303532009c08087465737431303533009d080874657374313035" + "34009e08087465737431303535009f0808746573743130353600a00808746573743130353700a10808746573743130353800a2080874657374" + "3130353900a30808746573743130363000a40808746573743130363100a50808746573743130363200a60808746573743130363300a7080874" + "6573743130363400a80808746573743130363500a90808746573743130363600aa0808746573743130363700ab0808746573743130363800ac" + "0808746573743130363900ad0808746573743130373000ae0808746573743130373100af0808746573743130373200b0080874657374313037" + "3300b10808746573743130373400b20808746573743130373500b30808746573743130373600b40808746573743130373700b5080874657374" + "3130373800b60808746573743130373900b70808746573743130383000b80808746573743130383100b90808746573743130383200ba080874" + "6573743130383300bb0808746573743130383400bc0808746573743130383500bd0808746573743130383600be0808746573743130383700bf" + "0808746573743130383800c00808746573743130383900c10808746573743130393000c20808746573743130393100c3080874657374313039" + "3200c40808746573743130393300c50808746573743130393400c60808746573743130393500c70808746573743130393600c8080874657374" + "3130393700c90808746573743130393800ca0808746573743130393900cb0808746573743131303000cc0808746573743131303100cd080874" + "6573743131303200ce0808746573743131303300cf0808746573743131303400d00808746573743131303500d10808746573743131303600d2" + "0808746573743131303700d30808746573743131303800d40808746573743131303900d50808746573743131313000d6080874657374313131" + "3100d70808746573743131313200d80808746573743131313300d90808746573743131313400da0808746573743131313500db080874657374" + "3131313600dc0808746573743131313700dd0808746573743131313800de0808746573743131313900df0808746573743131323000e0080874" + "6573743131323100e10808746573743131323200e20808746573743131323300e30808746573743131323400e40808746573743131323500e5" + "0808746573743131323600e60808746573743131323700e70808746573743131323800e80808746573743131323900e9080874657374313133" + "3000ea0808746573743131333100eb0808746573743131333200ec0808746573743131333300ed0808746573743131333400ee080874657374" + "3131333500ef0808746573743131333600f00808746573743131333700f10808746573743131333800f20808746573743131333900f3080874" + "6573743131343000f40808746573743131343100f50808746573743131343200f60808746573743131343300f70808746573743131343400f8" + "0808746573743131343500f90808746573743131343600fa0808746573743131343700fb0808746573743131343800fc080874657374313134" + "3900fd0808746573743131353000fe0808746573743131353100ff080874657374313135320080090874657374313135330081090874657374" + "313135340082090874657374313135350083090874657374313135360084090874657374313135370085090874657374313135380086090874" + "65737431313539008709087465737431313630008809087465737431313631008909087465737431313632008a09087465737431313633008b" + "09087465737431313634008c09087465737431313635008d09087465737431313636008e09087465737431313637008f090874657374313136" + "380090090874657374313136390091090874657374313137300092090874657374313137310093090874657374313137320094090874657374" + "313137330095090874657374313137340096090874657374313137350097090874657374313137360098090874657374313137370099090874" + "65737431313738009a09087465737431313739009b09087465737431313830009c09087465737431313831009d09087465737431313832009e" + "09087465737431313833009f0908746573743131383400a00908746573743131383500a10908746573743131383600a2090874657374313138" + "3700a30908746573743131383800a40908746573743131383900a50908746573743131393000a60908746573743131393100a7090874657374" + "3131393200a80908746573743131393300a90908746573743131393400aa0908746573743131393500ab0908746573743131393600ac090874" + "6573743131393700ad0908746573743131393800ae0908746573743131393900af0908746573743132303000b00908746573743132303100b1" + "0908746573743132303200b20908746573743132303300b30908746573743132303400b40908746573743132303500b5090874657374313230" + "3600b60908746573743132303700b70908746573743132303800b80908746573743132303900b90908746573743132313000ba090874657374" + "3132313100bb0908746573743132313200bc0908746573743132313300bd0908746573743132313400be0908746573743132313500bf090874" + "6573743132313600c00908746573743132313700c10908746573743132313800c20908746573743132313900c30908746573743132323000c4" + "0908746573743132323100c50908746573743132323200c60908746573743132323300c70908746573743132323400c8090874657374313232" + "3500c90908746573743132323600ca0908746573743132323700cb0908746573743132323800cc0908746573743132323900cd090874657374" + "3132333000ce0908746573743132333100cf0908746573743132333200d00908746573743132333300d10908746573743132333400d2090874" + "6573743132333500d30908746573743132333600d40908746573743132333700d50908746573743132333800d60908746573743132333900d7" + "0908746573743132343000d80908746573743132343100d90908746573743132343200da0908746573743132343300db090874657374313234" + "3400dc0908746573743132343500dd0908746573743132343600de0908746573743132343700df0908746573743132343800e0090874657374" + "3132343900e10908746573743132353000e20908746573743132353100e30908746573743132353200e40908746573743132353300e5090874" + "6573743132353400e60908746573743132353500e70908746573743132353600e80908746573743132353700e90908746573743132353800ea" + "0908746573743132353900eb0908746573743132363000ec0908746573743132363100ed0908746573743132363200ee090874657374313236" + "3300ef0908746573743132363400f00908746573743132363500f10908746573743132363600f20908746573743132363700f3090874657374" + "3132363800f40908746573743132363900f50908746573743132373000f60908746573743132373100f70908746573743132373200f8090874" + "6573743132373300f90908746573743132373400fa0908746573743132373500fb0908746573743132373600fc0908746573743132373700fd" + "0908746573743132373800fe0908746573743132373900ff0908746573743132383000800a08746573743132383100810a0874657374313238" + "3200820a08746573743132383300830a08746573743132383400840a08746573743132383500850a08746573743132383600860a0874657374" + "3132383700870a08746573743132383800880a08746573743132383900890a087465737431323930008a0a087465737431323931008b0a0874" + "65737431323932008c0a087465737431323933008d0a087465737431323934008e0a087465737431323935008f0a0874657374313239360090" + "0a08746573743132393700910a08746573743132393800920a08746573743132393900930a08746573743133303000940a0874657374313330" + "3100950a08746573743133303200960a08746573743133303300970a08746573743133303400980a08746573743133303500990a0874657374" + "31333036009a0a087465737431333037009b0a087465737431333038009c0a087465737431333039009d0a087465737431333130009e0a0874" + "65737431333131009f0a08746573743133313200a00a08746573743133313300a10a08746573743133313400a20a08746573743133313500a3" + "0a08746573743133313600a40a08746573743133313700a50a08746573743133313800a60a08746573743133313900a70a0874657374313332" + "3000a80a08746573743133323100a90a08746573743133323200aa0a08746573743133323300ab0a08746573743133323400ac0a0874657374" + "3133323500ad0a08746573743133323600ae0a08746573743133323700af0a08746573743133323800b00a08746573743133323900b10a0874" + "6573743133333000b20a08746573743133333100b30a08746573743133333200b40a08746573743133333300b50a08746573743133333400b6" + "0a08746573743133333500b70a08746573743133333600b80a08746573743133333700b90a08746573743133333800ba0a0874657374313333" + "3900bb0a08746573743133343000bc0a08746573743133343100bd0a08746573743133343200be0a08746573743133343300bf0a0874657374" + "3133343400c00a08746573743133343500c10a08746573743133343600c20a08746573743133343700c30a08746573743133343800c40a0874" + "6573743133343900c50a08746573743133353000c60a08746573743133353100c70a08746573743133353200c80a08746573743133353300c9" + "0a08746573743133353400ca0a08746573743133353500cb0a08746573743133353600cc0a08746573743133353700cd0a0874657374313335" + "3800ce0a08746573743133353900cf0a08746573743133363000d00a08746573743133363100d10a08746573743133363200d20a0874657374" + "3133363300d30a08746573743133363400d40a08746573743133363500d50a08746573743133363600d60a08746573743133363700d70a0874" + "6573743133363800d80a08746573743133363900d90a08746573743133373000da0a08746573743133373100db0a08746573743133373200dc" + "0a08746573743133373300dd0a08746573743133373400de0a08746573743133373500df0a08746573743133373600e00a0874657374313337" + "3700e10a08746573743133373800e20a08746573743133373900e30a08746573743133383000e40a08746573743133383100e50a0874657374" + "3133383200e60a08746573743133383300e70a08746573743133383400e80a08746573743133383500e90a08746573743133383600ea0a0874" + "6573743133383700eb0a08746573743133383800ec0a08746573743133383900ed0a08746573743133393000ee0a08746573743133393100ef" + "0a08746573743133393200f00a08746573743133393300f10a08746573743133393400f20a08746573743133393500f30a0874657374313339" + "3600f40a08746573743133393700f50a08746573743133393800f60a08746573743133393900f70a08746573743134303000f80a0874657374" + "3134303100f90a08746573743134303200fa0a08746573743134303300fb0a08746573743134303400fc0a08746573743134303500fd0a0874" + "6573743134303600fe0a08746573743134303700ff0a08746573743134303800800b08746573743134303900810b0874657374313431300082" + "0b08746573743134313100830b08746573743134313200840b08746573743134313300850b08746573743134313400860b0874657374313431" + "3500870b08746573743134313600880b08746573743134313700890b087465737431343138008a0b087465737431343139008b0b0874657374" + "31343230008c0b087465737431343231008d0b087465737431343232008e0b087465737431343233008f0b08746573743134323400900b0874" + "6573743134323500910b08746573743134323600920b08746573743134323700930b08746573743134323800940b0874657374313432390095" + "0b08746573743134333000960b08746573743134333100970b08746573743134333200980b08746573743134333300990b0874657374313433" + "34009a0b087465737431343335009b0b087465737431343336009c0b087465737431343337009d0b087465737431343338009e0b0874657374" + "31343339009f0b08746573743134343000a00b08746573743134343100a10b08746573743134343200a20b08746573743134343300a30b0874" + "6573743134343400a40b08746573743134343500a50b08746573743134343600a60b08746573743134343700a70b08746573743134343800a8" + "0b08746573743134343900a90b08746573743134353000aa0b08746573743134353100ab0b08746573743134353200ac0b0874657374313435" + "3300ad0b08746573743134353400ae0b08746573743134353500af0b08746573743134353600b00b08746573743134353700b10b0874657374" + "3134353800b20b08746573743134353900b30b08746573743134363000b40b08746573743134363100b50b08746573743134363200b60b0874" + "6573743134363300b70b08746573743134363400b80b08746573743134363500b90b08746573743134363600ba0b08746573743134363700bb" + "0b08746573743134363800bc0b08746573743134363900bd0b08746573743134373000be0b08746573743134373100bf0b0874657374313437" + "3200c00b08746573743134373300c10b08746573743134373400c20b08746573743134373500c30b08746573743134373600c40b0874657374" + "3134373700c50b08746573743134373800c60b08746573743134373900c70b08746573743134383000c80b08746573743134383100c90b0874" + "6573743134383200ca0b08746573743134383300cb0b08746573743134383400cc0b08746573743134383500cd0b08746573743134383600ce" + "0b08746573743134383700cf0b08746573743134383800d00b08746573743134383900d10b08746573743134393000d20b0874657374313439" + "3100d30b08746573743134393200d40b08746573743134393300d50b08746573743134393400d60b08746573743134393500d70b0874657374" + "3134393600d80b08746573743134393700d90b08746573743134393800da0b08746573743134393900db0b08746573743135303000dc0b0874" + "6573743135303100dd0b08746573743135303200de0b08746573743135303300df0b08746573743135303400e00b08746573743135303500e1" + "0b08746573743135303600e20b08746573743135303700e30b08746573743135303800e40b08746573743135303900e50b0874657374313531" + "3000e60b08746573743135313100e70b08746573743135313200e80b08746573743135313300e90b08746573743135313400ea0b0874657374" + "3135313500eb0b08746573743135313600ec0b08746573743135313700ed0b08746573743135313800ee0b08746573743135313900ef0b0874" + "6573743135323000f00b08746573743135323100f10b08746573743135323200f20b08746573743135323300f30b08746573743135323400f4" + "0b08746573743135323500f50b08746573743135323600f60b08746573743135323700f70b08746573743135323800f80b0874657374313532" + "3900f90b08746573743135333000fa0b08746573743135333100fb0b08746573743135333200fc0b08746573743135333300fd0b0874657374" + "3135333400fe0b08746573743135333500ff0b08746573743135333600800c08746573743135333700810c08746573743135333800820c0874" + "6573743135333900830c08746573743135343000840c08746573743135343100850c08746573743135343200860c0874657374313534330087" + "0c08746573743135343400880c08746573743135343500890c087465737431353436008a0c087465737431353437008b0c0874657374313534" + "38008c0c087465737431353439008d0c087465737431353530008e0c087465737431353531008f0c08746573743135353200900c0874657374" + "3135353300910c08746573743135353400920c08746573743135353500930c08746573743135353600940c08746573743135353700950c0874" + "6573743135353800960c08746573743135353900970c08746573743135363000980c08746573743135363100990c087465737431353632009a" + "0c087465737431353633009b0c087465737431353634009c0c087465737431353635009d0c087465737431353636009e0c0874657374313536" + "37009f0c08746573743135363800a00c08746573743135363900a10c08746573743135373000a20c08746573743135373100a30c0874657374" + "3135373200a40c08746573743135373300a50c08746573743135373400a60c08746573743135373500a70c08746573743135373600a80c0874" + "6573743135373700a90c08746573743135373800aa0c08746573743135373900ab0c08746573743135383000ac0c08746573743135383100ad" + "0c08746573743135383200ae0c08746573743135383300af0c08746573743135383400b00c08746573743135383500b10c0874657374313538" + "3600b20c08746573743135383700b30c08746573743135383800b40c08746573743135383900b50c08746573743135393000b60c0874657374" + "3135393100b70c08746573743135393200b80c08746573743135393300b90c08746573743135393400ba0c08746573743135393500bb0c0874" + "6573743135393600bc0c08746573743135393700bd0c08746573743135393800be0c08746573743135393900bf0c08746573743136303000c0" + "0c08746573743136303100c10c08746573743136303200c20c08746573743136303300c30c08746573743136303400c40c0874657374313630" + "3500c50c08746573743136303600c60c08746573743136303700c70c08746573743136303800c80c08746573743136303900c90c0874657374" + "3136313000ca0c08746573743136313100cb0c08746573743136313200cc0c08746573743136313300cd0c08746573743136313400ce0c0874" + "6573743136313500cf0c08746573743136313600d00c08746573743136313700d10c08746573743136313800d20c08746573743136313900d3" + "0c08746573743136323000d40c08746573743136323100d50c08746573743136323200d60c08746573743136323300d70c0874657374313632" + "3400d80c08746573743136323500d90c08746573743136323600da0c08746573743136323700db0c08746573743136323800dc0c0874657374" + "3136323900dd0c08746573743136333000de0c08746573743136333100df0c08746573743136333200e00c08746573743136333300e10c0874" + "6573743136333400e20c08746573743136333500e30c08746573743136333600e40c08746573743136333700e50c08746573743136333800e6" + "0c08746573743136333900e70c08746573743136343000e80c08746573743136343100e90c08746573743136343200ea0c0874657374313634" + "3300eb0c08746573743136343400ec0c08746573743136343500ed0c08746573743136343600ee0c08746573743136343700ef0c0874657374" + "3136343800f00c08746573743136343900f10c08746573743136353000f20c08746573743136353100f30c08746573743136353200f40c0874" + "6573743136353300f50c08746573743136353400f60c08746573743136353500f70c08746573743136353600f80c08746573743136353700f9" + "0c08746573743136353800fa0c08746573743136353900fb0c08746573743136363000fc0c08746573743136363100fd0c0874657374313636" + "3200fe0c08746573743136363300ff0c08746573743136363400800d08746573743136363500810d08746573743136363600820d0874657374" + "3136363700830d08746573743136363800840d08746573743136363900850d08746573743136373000860d08746573743136373100870d0874" + "6573743136373200880d08746573743136373300890d087465737431363734008a0d087465737431363735008b0d087465737431363736008c" + "0d087465737431363737008d0d087465737431363738008e0d087465737431363739008f0d08746573743136383000900d0874657374313638" + "3100910d08746573743136383200920d08746573743136383300930d08746573743136383400940d08746573743136383500950d0874657374" + "3136383600960d08746573743136383700970d08746573743136383800980d08746573743136383900990d087465737431363930009a0d0874" + "65737431363931009b0d087465737431363932009c0d087465737431363933009d0d087465737431363934009e0d087465737431363935009f" + "0d08746573743136393600a00d08746573743136393700a10d08746573743136393800a20d08746573743136393900a30d0874657374313730" + "3000a40d08746573743137303100a50d08746573743137303200a60d08746573743137303300a70d08746573743137303400a80d0874657374" + "3137303500a90d08746573743137303600aa0d08746573743137303700ab0d08746573743137303800ac0d08746573743137303900ad0d0874" + "6573743137313000ae0d08746573743137313100af0d08746573743137313200b00d08746573743137313300b10d08746573743137313400b2" + "0d08746573743137313500b30d08746573743137313600b40d08746573743137313700b50d08746573743137313800b60d0874657374313731" + "3900b70d08746573743137323000b80d08746573743137323100b90d08746573743137323200ba0d08746573743137323300bb0d0874657374" + "3137323400bc0d08746573743137323500bd0d08746573743137323600be0d08746573743137323700bf0d08746573743137323800c00d0874" + "6573743137323900c10d08746573743137333000c20d08746573743137333100c30d08746573743137333200c40d08746573743137333300c5" + "0d08746573743137333400c60d08746573743137333500c70d08746573743137333600c80d08746573743137333700c90d0874657374313733" + "3800ca0d08746573743137333900cb0d08746573743137343000cc0d08746573743137343100cd0d08746573743137343200ce0d0874657374" + "3137343300cf0d08746573743137343400d00d08746573743137343500d10d08746573743137343600d20d08746573743137343700d30d0874" + "6573743137343800d40d08746573743137343900d50d08746573743137353000d60d08746573743137353100d70d08746573743137353200d8" + "0d08746573743137353300d90d08746573743137353400da0d08746573743137353500db0d08746573743137353600dc0d0874657374313735" + "3700dd0d08746573743137353800de0d08746573743137353900df0d08746573743137363000e00d08746573743137363100e10d0874657374" + "3137363200e20d08746573743137363300e30d08746573743137363400e40d08746573743137363500e50d08746573743137363600e60d0874" + "6573743137363700e70d08746573743137363800e80d08746573743137363900e90d08746573743137373000ea0d08746573743137373100eb" + "0d08746573743137373200ec0d08746573743137373300ed0d08746573743137373400ee0d08746573743137373500ef0d0874657374313737" + "3600f00d08746573743137373700f10d08746573743137373800f20d08746573743137373900f30d08746573743137383000f40d0874657374" + "3137383100f50d08746573743137383200f60d08746573743137383300f70d08746573743137383400f80d08746573743137383500f90d0874" + "6573743137383600fa0d08746573743137383700fb0d08746573743137383800fc0d08746573743137383900fd0d08746573743137393000fe" + "0d08746573743137393100ff0d08746573743137393200800e08746573743137393300810e08746573743137393400820e0874657374313739" + "3500830e08746573743137393600840e08746573743137393700850e08746573743137393800860e08746573743137393900870e0874657374" + "3138303000880e08746573743138303100890e087465737431383032008a0e087465737431383033008b0e087465737431383034008c0e0874" + "65737431383035008d0e087465737431383036008e0e087465737431383037008f0e08746573743138303800900e0874657374313830390091" + "0e08746573743138313000920e08746573743138313100930e08746573743138313200940e08746573743138313300950e0874657374313831" + "3400960e08746573743138313500970e08746573743138313600980e08746573743138313700990e087465737431383138009a0e0874657374" + "31383139009b0e087465737431383230009c0e087465737431383231009d0e087465737431383232009e0e087465737431383233009f0e0874" + "6573743138323400a00e08746573743138323500a10e08746573743138323600a20e08746573743138323700a30e08746573743138323800a4" + "0e08746573743138323900a50e08746573743138333000a60e08746573743138333100a70e08746573743138333200a80e0874657374313833" + "3300a90e08746573743138333400aa0e08746573743138333500ab0e08746573743138333600ac0e08746573743138333700ad0e0874657374" + "3138333800ae0e08746573743138333900af0e08746573743138343000b00e08746573743138343100b10e08746573743138343200b20e0874" + "6573743138343300b30e08746573743138343400b40e08746573743138343500b50e08746573743138343600b60e08746573743138343700b7" + "0e08746573743138343800b80e08746573743138343900b90e08746573743138353000ba0e08746573743138353100bb0e0874657374313835" + "3200bc0e08746573743138353300bd0e08746573743138353400be0e08746573743138353500bf0e08746573743138353600c00e0874657374" + "3138353700c10e08746573743138353800c20e08746573743138353900c30e08746573743138363000c40e08746573743138363100c50e0874" + "6573743138363200c60e08746573743138363300c70e08746573743138363400c80e08746573743138363500c90e08746573743138363600ca" + "0e08746573743138363700cb0e08746573743138363800cc0e08746573743138363900cd0e08746573743138373000ce0e0874657374313837" + "3100cf0e08746573743138373200d00e08746573743138373300d10e08746573743138373400d20e08746573743138373500d30e0874657374" + "3138373600d40e08746573743138373700d50e08746573743138373800d60e08746573743138373900d70e08746573743138383000d80e0874" + "6573743138383100d90e08746573743138383200da0e08746573743138383300db0e08746573743138383400dc0e08746573743138383500dd" + "0e08746573743138383600de0e08746573743138383700df0e08746573743138383800e00e08746573743138383900e10e0874657374313839" + "3000e20e08746573743138393100e30e08746573743138393200e40e08746573743138393300e50e08746573743138393400e60e0874657374" + "3138393500e70e08746573743138393600e80e08746573743138393700e90e08746573743138393800ea0e08746573743138393900eb0e0874" + "6573743139303000ec0e08746573743139303100ed0e08746573743139303200ee0e08746573743139303300ef0e08746573743139303400f0" + "0e08746573743139303500f10e08746573743139303600f20e08746573743139303700f30e08746573743139303800f40e0874657374313930" + "3900f50e08746573743139313000f60e08746573743139313100f70e08746573743139313200f80e08746573743139313300f90e0874657374" + "3139313400fa0e08746573743139313500fb0e08746573743139313600fc0e08746573743139313700fd0e08746573743139313800fe0e0874" + "6573743139313900ff0e08746573743139323000800f08746573743139323100810f08746573743139323200820f0874657374313932330083" + "0f08746573743139323400840f08746573743139323500850f08746573743139323600860f08746573743139323700870f0874657374313932" + "3800880f08746573743139323900890f087465737431393330008a0f087465737431393331008b0f087465737431393332008c0f0874657374" + "31393333008d0f087465737431393334008e0f087465737431393335008f0f08746573743139333600900f08746573743139333700910f0874" + "6573743139333800920f08746573743139333900930f08746573743139343000940f08746573743139343100950f0874657374313934320096" + "0f08746573743139343300970f08746573743139343400980f08746573743139343500990f087465737431393436009a0f0874657374313934" + "37009b0f087465737431393438009c0f087465737431393439009d0f087465737431393530009e0f087465737431393531009f0f0874657374" + "3139353200a00f08746573743139353300a10f08746573743139353400a20f08746573743139353500a30f08746573743139353600a40f0874" + "6573743139353700a50f08746573743139353800a60f08746573743139353900a70f08746573743139363000a80f08746573743139363100a9" + "0f08746573743139363200aa0f08746573743139363300ab0f08746573743139363400ac0f08746573743139363500ad0f0874657374313936" + "3600ae0f08746573743139363700af0f08746573743139363800b00f08746573743139363900b10f08746573743139373000b20f0874657374" + "3139373100b30f08746573743139373200b40f08746573743139373300b50f08746573743139373400b60f08746573743139373500b70f0874" + "6573743139373600b80f08746573743139373700b90f08746573743139373800ba0f08746573743139373900bb0f08746573743139383000bc" + "0f08746573743139383100bd0f08746573743139383200be0f08746573743139383300bf0f08746573743139383400c00f0874657374313938" + "3500c10f08746573743139383600c20f08746573743139383700c30f08746573743139383800c40f08746573743139383900c50f0874657374" + "3139393000c60f08746573743139393100c70f08746573743139393200c80f08746573743139393300c90f08746573743139393400ca0f0874" + "6573743139393500cb0f08746573743139393600cc0f08746573743139393700cd0f08746573743139393800ce0f08746573743139393900cf" + "0f08746573743230303000d00f08746573743230303100d10f08746573743230303200d20f08746573743230303300d30f0874657374323030" + "3400d40f08746573743230303500d50f08746573743230303600d60f08746573743230303700d70f08746573743230303800d80f0874657374" + "3230303900d90f08746573743230313000da0f08746573743230313100db0f08746573743230313200dc0f08746573743230313300dd0f0874" + "6573743230313400de0f08746573743230313500df0f08746573743230313600e00f08746573743230313700e10f08746573743230313800e2" + "0f08746573743230313900e30f08746573743230323000e40f08746573743230323100e50f08746573743230323200e60f0874657374323032" + "3300e70f08746573743230323400e80f08746573743230323500e90f08746573743230323600ea0f08746573743230323700eb0f0874657374" + "3230323800ec0f08746573743230323900ed0f08746573743230333000ee0f08746573743230333100ef0f08746573743230333200f00f0874" + "6573743230333300f10f08746573743230333400f20f08746573743230333500f30f08746573743230333600f40f08746573743230333700f5" + "0f08746573743230333800f60f08746573743230333900f70f08746573743230343000f80f08746573743230343100f90f0874657374323034" + "3200fa0f08746573743230343300fb0f08746573743230343400fc0f08746573743230343500fd0f08746573743230343600fe0f0874657374" + "3230343700ff0f0874657374323034380080100874657374323034390081100874657374323035300082100874657374323035310083100874" + "657374323035320084100874657374323035330085100874657374323035340086100874657374323035350087100874657374323035360088" + "10087465737432303537008910087465737432303538008a10087465737432303539008b10087465737432303630008c100874657374323036" + "31008d10087465737432303632008e10087465737432303633008f100874657374323036340090100874657374323036350091100874657374" + "323036360092100874657374323036370093100874657374323036380094100874657374323036390095100874657374323037300096100874" + "65737432303731009710087465737432303732009810087465737432303733009910087465737432303734009a10087465737432303735009b" + "10087465737432303736009c10087465737432303737009d10087465737432303738009e10087465737432303739009f100874657374323038" + "3000a01008746573743230383100a11008746573743230383200a21008746573743230383300a31008746573743230383400a4100874657374" + "3230383500a51008746573743230383600a61008746573743230383700a71008746573743230383800a81008746573743230383900a9100874" + "6573743230393000aa1008746573743230393100ab1008746573743230393200ac1008746573743230393300ad1008746573743230393400ae" + "1008746573743230393500af1008746573743230393600b01008746573743230393700b11008746573743230393800b2100874657374323039" + "3900b31008746573743231303000b41008746573743231303100b51008746573743231303200b61008746573743231303300b7100874657374" + "3231303400b81008746573743231303500b91008746573743231303600ba1008746573743231303700bb1008746573743231303800bc100874" + "6573743231303900bd1008746573743231313000be1008746573743231313100bf1008746573743231313200c01008746573743231313300c1" + "1008746573743231313400c21008746573743231313500c31008746573743231313600c41008746573743231313700c5100874657374323131" + "3800c61008746573743231313900c71008746573743231323000c81008746573743231323100c91008746573743231323200ca100874657374" + "3231323300cb1008746573743231323400cc1008746573743231323500cd1008746573743231323600ce1008746573743231323700cf100874" + "6573743231323800d01008746573743231323900d11008746573743231333000d21008746573743231333100d31008746573743231333200d4" + "1008746573743231333300d51008746573743231333400d61008746573743231333500d71008746573743231333600d8100874657374323133" + "3700d91008746573743231333800da1008746573743231333900db1008746573743231343000dc1008746573743231343100dd100874657374" + "3231343200de1008746573743231343300df1008746573743231343400e01008746573743231343500e11008746573743231343600e2100874" + "6573743231343700e31008746573743231343800e41008746573743231343900e51008746573743231353000e61008746573743231353100e7" + "1008746573743231353200e81008746573743231353300e91008746573743231353400ea1008746573743231353500eb100874657374323135" + "3600ec1008746573743231353700ed1008746573743231353800ee1008746573743231353900ef1008746573743231363000f0100874657374" + "3231363100f11008746573743231363200f21008746573743231363300f31008746573743231363400f41008746573743231363500f5100874" + "6573743231363600f61008746573743231363700f71008746573743231363800f81008746573743231363900f91008746573743231373000fa" + "1008746573743231373100fb1008746573743231373200fc1008746573743231373300fd1008746573743231373400fe100874657374323137" + "3500ff100874657374323137360080110874657374323137370081110874657374323137380082110874657374323137390083110874657374" + "323138300084110874657374323138310085110874657374323138320086110874657374323138330087110874657374323138340088110874" + "65737432313835008911087465737432313836008a11087465737432313837008b11087465737432313838008c11087465737432313839008d" + "11087465737432313930008e11087465737432313931008f110874657374323139320090110874657374323139330091110874657374323139" + "340092110874657374323139350093110874657374323139360094110874657374323139370095110874657374323139380096110874657374" + "32313939009711087465737432323030009811087465737432323031009911087465737432323032009a11087465737432323033009b110874" + "65737432323034009c11087465737432323035009d11087465737432323036009e11087465737432323037009f1108746573743232303800a0" + "1108746573743232303900a11108746573743232313000a21108746573743232313100a31108746573743232313200a4110874657374323231" + "3300a51108746573743232313400a61108746573743232313500a71108746573743232313600a81108746573743232313700a9110874657374" + "3232313800aa1108746573743232313900ab1108746573743232323000ac1108746573743232323100ad1108746573743232323200ae110874" + "6573743232323300af1108746573743232323400b01108746573743232323500b11108746573743232323600b21108746573743232323700b3" + "1108746573743232323800b41108746573743232323900b51108746573743232333000b61108746573743232333100b7110874657374323233" + "3200b81108746573743232333300b91108746573743232333400ba1108746573743232333500bb1108746573743232333600bc110874657374" + "3232333700bd1108746573743232333800be1108746573743232333900bf1108746573743232343000c01108746573743232343100c1110874" + "6573743232343200c21108746573743232343300c31108746573743232343400c41108746573743232343500c51108746573743232343600c6" + "1108746573743232343700c71108746573743232343800c81108746573743232343900c91108746573743232353000ca110874657374323235" + "3100cb1108746573743232353200cc1108746573743232353300cd1108746573743232353400ce1108746573743232353500cf110874657374" + "3232353600d01108746573743232353700d11108746573743232353800d21108746573743232353900d31108746573743232363000d4110874" + "6573743232363100d51108746573743232363200d61108746573743232363300d71108746573743232363400d81108746573743232363500d9" + "1108746573743232363600da1108746573743232363700db1108746573743232363800dc1108746573743232363900dd110874657374323237" + "3000de1108746573743232373100df1108746573743232373200e01108746573743232373300e11108746573743232373400e2110874657374" + "3232373500e31108746573743232373600e41108746573743232373700e51108746573743232373800e61108746573743232373900e7110874" + "6573743232383000e81108746573743232383100e91108746573743232383200ea1108746573743232383300eb1108746573743232383400ec" + "1108746573743232383500ed1108746573743232383600ee1108746573743232383700ef1108746573743232383800f0110874657374323238" + "3900f11108746573743232393000f21108746573743232393100f31108746573743232393200f41108746573743232393300f5110874657374" + "3232393400f61108746573743232393500f71108746573743232393600f81108746573743232393700f91108746573743232393800fa110874" + "6573743232393900fb1108746573743233303000fc1108746573743233303100fd1108746573743233303200fe1108746573743233303300ff" + "110874657374323330340080120874657374323330350081120874657374323330360082120874657374323330370083120874657374323330" + "380084120874657374323330390085120874657374323331300086120874657374323331310087120874657374323331320088120874657374" + "32333133008912087465737432333134008a12087465737432333135008b12087465737432333136008c12087465737432333137008d120874" + "65737432333138008e12087465737432333139008f120874657374323332300090120874657374323332310091120874657374323332320092" + "120874657374323332330093120874657374323332340094120874657374323332350095120874657374323332360096120874657374323332" + "37009712087465737432333238009812087465737432333239009912087465737432333330009a12087465737432333331009b120874657374" + "32333332009c12087465737432333333009d12087465737432333334009e12087465737432333335009f1208746573743233333600a0120874" + "6573743233333700a11208746573743233333800a21208746573743233333900a31208746573743233343000a41208746573743233343100a5" + "1208746573743233343200a61208746573743233343300a71208746573743233343400a81208746573743233343500a9120874657374323334" + "3600aa1208746573743233343700ab1208746573743233343800ac1208746573743233343900ad1208746573743233353000ae120874657374" + "3233353100af1208746573743233353200b01208746573743233353300b11208746573743233353400b21208746573743233353500b3120874" + "6573743233353600b41208746573743233353700b51208746573743233353800b61208746573743233353900b71208746573743233363000b8" + "1208746573743233363100b91208746573743233363200ba1208746573743233363300bb1208746573743233363400bc120874657374323336" + "3500bd1208746573743233363600be1208746573743233363700bf1208746573743233363800c01208746573743233363900c1120874657374" + "3233373000c21208746573743233373100c31208746573743233373200c41208746573743233373300c51208746573743233373400c6120874" + "6573743233373500c71208746573743233373600c81208746573743233373700c91208746573743233373800ca1208746573743233373900cb" + "1208746573743233383000cc1208746573743233383100cd1208746573743233383200ce1208746573743233383300cf120874657374323338" + "3400d01208746573743233383500d11208746573743233383600d21208746573743233383700d31208746573743233383800d4120874657374" + "3233383900d51208746573743233393000d61208746573743233393100d71208746573743233393200d81208746573743233393300d9120874" + "6573743233393400da1208746573743233393500db1208746573743233393600dc1208746573743233393700dd1208746573743233393800de" + "1208746573743233393900df1208746573743234303000e01208746573743234303100e11208746573743234303200e2120874657374323430" + "3300e31208746573743234303400e41208746573743234303500e51208746573743234303600e61208746573743234303700e7120874657374" + "3234303800e81208746573743234303900e91208746573743234313000ea1208746573743234313100eb1208746573743234313200ec120874" + "6573743234313300ed1208746573743234313400ee1208746573743234313500ef1208746573743234313600f01208746573743234313700f1" + "1208746573743234313800f21208746573743234313900f31208746573743234323000f41208746573743234323100f5120874657374323432" + "3200f61208746573743234323300f71208746573743234323400f81208746573743234323500f91208746573743234323600fa120874657374" + "3234323700fb1208746573743234323800fc1208746573743234323900fd1208746573743234333000fe1208746573743234333100ff120874" + "657374323433320080130874657374323433330081130874657374323433340082130874657374323433350083130874657374323433360084" + "130874657374323433370085130874657374323433380086130874657374323433390087130874657374323434300088130874657374323434" + "31008913087465737432343432008a13087465737432343433008b13087465737432343434008c13087465737432343435008d130874657374" + "32343436008e13087465737432343437008f130874657374323434380090130874657374323434390091130874657374323435300092130874" + "657374323435310093130874657374323435320094130874657374323435330095130874657374323435340096130874657374323435350097" + "13087465737432343536009813087465737432343537009913087465737432343538009a13087465737432343539009b130874657374323436" + "30009c13087465737432343631009d13087465737432343632009e13087465737432343633009f1308746573743234363400a0130874657374" + "3234363500a11308746573743234363600a21308746573743234363700a31308746573743234363800a41308746573743234363900a5130874" + "6573743234373000a61308746573743234373100a71308746573743234373200a81308746573743234373300a91308746573743234373400aa" + "1308746573743234373500ab1308746573743234373600ac1308746573743234373700ad1308746573743234373800ae130874657374323437" + "3900af1308746573743234383000b01308746573743234383100b11308746573743234383200b21308746573743234383300b3130874657374" + "3234383400b41308746573743234383500b51308746573743234383600b61308746573743234383700b71308746573743234383800b8130874" + "6573743234383900b91308746573743234393000ba1308746573743234393100bb1308746573743234393200bc1308746573743234393300bd" + "1308746573743234393400be1308746573743234393500bf1308746573743234393600c01308746573743234393700c1130874657374323439" + "3800c21308746573743234393900c31308746573743235303000c41308746573743235303100c51308746573743235303200c6130874657374" + "3235303300c71308746573743235303400c81308746573743235303500c91308746573743235303600ca1308746573743235303700cb130874" + "6573743235303800cc1308746573743235303900cd1308746573743235313000ce1308746573743235313100cf1308746573743235313200d0" + "1308746573743235313300d11308746573743235313400d21308746573743235313500d31308746573743235313600d4130874657374323531" + "3700d51308746573743235313800d61308746573743235313900d71308746573743235323000d81308746573743235323100d9130874657374" + "3235323200da1308746573743235323300db1308746573743235323400dc1308746573743235323500dd1308746573743235323600de130874" + "6573743235323700df1308746573743235323800e01308746573743235323900e11308746573743235333000e21308746573743235333100e3" + "1308746573743235333200e41308746573743235333300e51308746573743235333400e61308746573743235333500e7130874657374323533" + "3600e81308746573743235333700e91308746573743235333800ea1308746573743235333900eb1308746573743235343000ec130874657374" + "3235343100ed1308746573743235343200ee1308746573743235343300ef1308746573743235343400f01308746573743235343500f1130874" + "6573743235343600f21308746573743235343700f31308746573743235343800f41308746573743235343900f51308746573743235353000f6" + "1308746573743235353100f71308746573743235353200f81308746573743235353300f91308746573743235353400fa130874657374323535" + "3500fb1308746573743235353600fc1308746573743235353700fd1308746573743235353800fe1308746573743235353900ff130874657374" + "323536300080140874657374323536310081140874657374323536320082140874657374323536330083140874657374323536340084140874" + "657374323536350085140874657374323536360086140874657374323536370087140874657374323536380088140874657374323536390089" + "14087465737432353730008a14087465737432353731008b14087465737432353732008c14087465737432353733008d140874657374323537" + "34008e14087465737432353735008f140874657374323537360090140874657374323537370091140874657374323537380092140874657374" + "323537390093140874657374323538300094140874657374323538310095140874657374323538320096140874657374323538330097140874" + "65737432353834009814087465737432353835009914087465737432353836009a14087465737432353837009b14087465737432353838009c" + "14087465737432353839009d14087465737432353930009e14087465737432353931009f1408746573743235393200a0140874657374323539" + "3300a11408746573743235393400a21408746573743235393500a31408746573743235393600a41408746573743235393700a5140874657374" + "3235393800a61408746573743235393900a71408746573743236303000a81408746573743236303100a91408746573743236303200aa140874" + "6573743236303300ab1408746573743236303400ac1408746573743236303500ad1408746573743236303600ae1408746573743236303700af" + "1408746573743236303800b01408746573743236303900b11408746573743236313000b21408746573743236313100b3140874657374323631" + "3200b41408746573743236313300b51408746573743236313400b61408746573743236313500b71408746573743236313600b8140874657374" + "3236313700b91408746573743236313800ba1408746573743236313900bb1408746573743236323000bc1408746573743236323100bd140874" + "6573743236323200be1408746573743236323300bf1408746573743236323400c01408746573743236323500c11408746573743236323600c2" + "1408746573743236323700c31408746573743236323800c41408746573743236323900c51408746573743236333000c6140874657374323633" + "3100c71408746573743236333200c81408746573743236333300c91408746573743236333400ca1408746573743236333500cb140874657374" + "3236333600cc1408746573743236333700cd1408746573743236333800ce1408746573743236333900cf1408746573743236343000d0140874" + "6573743236343100d11408746573743236343200d21408746573743236343300d31408746573743236343400d41408746573743236343500d5" + "1408746573743236343600d61408746573743236343700d71408746573743236343800d81408746573743236343900d9140874657374323635" + "3000da1408746573743236353100db1408746573743236353200dc1408746573743236353300dd1408746573743236353400de140874657374" + "3236353500df1408746573743236353600e01408746573743236353700e11408746573743236353800e21408746573743236353900e3140874" + "6573743236363000e41408746573743236363100e51408746573743236363200e61408746573743236363300e71408746573743236363400e8" + "1408746573743236363500e91408746573743236363600ea1408746573743236363700eb1408746573743236363800ec140874657374323636" + "3900ed1408746573743236373000ee1408746573743236373100ef1408746573743236373200f01408746573743236373300f1140874657374" + "3236373400f21408746573743236373500f31408746573743236373600f41408746573743236373700f51408746573743236373800f6140874" + "6573743236373900f71408746573743236383000f81408746573743236383100f91408746573743236383200fa1408746573743236383300fb" + "1408746573743236383400fc1408746573743236383500fd1408746573743236383600fe1408746573743236383700ff140874657374323638" + "380080150874657374323638390081150874657374323639300082150874657374323639310083150874657374323639320084150874657374" + "323639330085150874657374323639340086150874657374323639350087150874657374323639360088150874657374323639370089150874" + "65737432363938008a15087465737432363939008b15087465737432373030008c15087465737432373031008d15087465737432373032008e" + "15087465737432373033008f150874657374323730340090150874657374323730350091150874657374323730360092150874657374323730" + "370093150874657374323730380094150874657374323730390095150874657374323731300096150874657374323731310097150874657374" + "32373132009815087465737432373133009915087465737432373134009a15087465737432373135009b15087465737432373136009c150874" + "65737432373137009d15087465737432373138009e15087465737432373139009f1508746573743237323000a01508746573743237323100a1" + "1508746573743237323200a21508746573743237323300a31508746573743237323400a41508746573743237323500a5150874657374323732" + "3600a61508746573743237323700a71508746573743237323800a81508746573743237323900a91508746573743237333000aa150874657374" + "3237333100ab1508746573743237333200ac1508746573743237333300ad1508746573743237333400ae1508746573743237333500af150874" + "6573743237333600b01508746573743237333700b11508746573743237333800b21508746573743237333900b31508746573743237343000b4" + "1508746573743237343100b51508746573743237343200b61508746573743237343300b71508746573743237343400b8150874657374323734" + "3500b91508746573743237343600ba1508746573743237343700bb1508746573743237343800bc1508746573743237343900bd150874657374" + "3237353000be1508746573743237353100bf1508746573743237353200c01508746573743237353300c11508746573743237353400c2150874" + "6573743237353500c31508746573743237353600c41508746573743237353700c51508746573743237353800c61508746573743237353900c7" + "1508746573743237363000c81508746573743237363100c91508746573743237363200ca1508746573743237363300cb150874657374323736" + "3400cc1508746573743237363500cd1508746573743237363600ce1508746573743237363700cf1508746573743237363800d0150874657374" + "3237363900d11508746573743237373000d21508746573743237373100d31508746573743237373200d41508746573743237373300d5150874" + "6573743237373400d61508746573743237373500d71508746573743237373600d81508746573743237373700d91508746573743237373800da" + "1508746573743237373900db1508746573743237383000dc1508746573743237383100dd1508746573743237383200de150874657374323738" + "3300df1508746573743237383400e01508746573743237383500e11508746573743237383600e21508746573743237383700e3150874657374" + "3237383800e41508746573743237383900e51508746573743237393000e61508746573743237393100e71508746573743237393200e8150874" + "6573743237393300e91508746573743237393400ea1508746573743237393500eb1508746573743237393600ec1508746573743237393700ed" + "1508746573743237393800ee1508746573743237393900ef1508746573743238303000f01508746573743238303100f1150874657374323830" + "3200f21508746573743238303300f31508746573743238303400f41508746573743238303500f51508746573743238303600f6150874657374" + "3238303700f71508746573743238303800f81508746573743238303900f91508746573743238313000fa1508746573743238313100fb150874" + "6573743238313200fc1508746573743238313300fd1508746573743238313400fe1508746573743238313500ff150874657374323831360080" + "160874657374323831370081160874657374323831380082160874657374323831390083160874657374323832300084160874657374323832" + "310085160874657374323832320086160874657374323832330087160874657374323832340088160874657374323832350089160874657374" + "32383236008a16087465737432383237008b16087465737432383238008c16087465737432383239008d16087465737432383330008e160874" + "65737432383331008f160874657374323833320090160874657374323833330091160874657374323833340092160874657374323833350093" + "160874657374323833360094160874657374323833370095160874657374323833380096160874657374323833390097160874657374323834" + "30009816087465737432383431009916087465737432383432009a16087465737432383433009b16087465737432383434009c160874657374" + "32383435009d16087465737432383436009e16087465737432383437009f1608746573743238343800a01608746573743238343900a1160874" + "6573743238353000a21608746573743238353100a31608746573743238353200a41608746573743238353300a51608746573743238353400a6" + "1608746573743238353500a71608746573743238353600a81608746573743238353700a91608746573743238353800aa160874657374323835" + "3900ab1608746573743238363000ac1608746573743238363100ad1608746573743238363200ae1608746573743238363300af160874657374" + "3238363400b01608746573743238363500b11608746573743238363600b21608746573743238363700b31608746573743238363800b4160874" + "6573743238363900b51608746573743238373000b61608746573743238373100b71608746573743238373200b81608746573743238373300b9" + "1608746573743238373400ba1608746573743238373500bb1608746573743238373600bc1608746573743238373700bd160874657374323837" + "3800be1608746573743238373900bf1608746573743238383000c01608746573743238383100c11608746573743238383200c2160874657374" + "3238383300c31608746573743238383400c41608746573743238383500c51608746573743238383600c61608746573743238383700c7160874" + "6573743238383800c81608746573743238383900c91608746573743238393000ca1608746573743238393100cb1608746573743238393200cc" + "1608746573743238393300cd1608746573743238393400ce1608746573743238393500cf1608746573743238393600d0160874657374323839" + "3700d11608746573743238393800d21608746573743238393900d31608746573743239303000d41608746573743239303100d5160874657374" + "3239303200d61608746573743239303300d71608746573743239303400d81608746573743239303500d91608746573743239303600da160874" + "6573743239303700db1608746573743239303800dc1608746573743239303900dd1608746573743239313000de1608746573743239313100df" + "1608746573743239313200e01608746573743239313300e11608746573743239313400e21608746573743239313500e3160874657374323931" + "3600e41608746573743239313700e51608746573743239313800e61608746573743239313900e71608746573743239323000e8160874657374" + "3239323100e91608746573743239323200ea1608746573743239323300eb1608746573743239323400ec1608746573743239323500ed160874" + "6573743239323600ee1608746573743239323700ef1608746573743239323800f01608746573743239323900f11608746573743239333000f2" + "1608746573743239333100f31608746573743239333200f41608746573743239333300f51608746573743239333400f6160874657374323933" + "3500f71608746573743239333600f81608746573743239333700f91608746573743239333800fa1608746573743239333900fb160874657374" + "3239343000fc1608746573743239343100fd1608746573743239343200fe1608746573743239343300ff160874657374323934340080170874" + "657374323934350081170874657374323934360082170874657374323934370083170874657374323934380084170874657374323934390085" + "170874657374323935300086170874657374323935310087170874657374323935320088170874657374323935330089170874657374323935" + "34008a17087465737432393535008b17087465737432393536008c17087465737432393537008d17087465737432393538008e170874657374" + "32393539008f170874657374323936300090170874657374323936310091170874657374323936320092170874657374323936330093170874" + "657374323936340094170874657374323936350095170874657374323936360096170874657374323936370097170874657374323936380098" + "17087465737432393639009917087465737432393730009a17087465737432393731009b17087465737432393732009c170874657374323937" + "33009d17087465737432393734009e17087465737432393735009f1708746573743239373600a01708746573743239373700a1170874657374" + "3239373800a21708746573743239373900a31708746573743239383000a41708746573743239383100a51708746573743239383200a6170874" + "6573743239383300a71708746573743239383400a81708746573743239383500a91708746573743239383600aa1708746573743239383700ab" + "1708746573743239383800ac1708746573743239383900ad1708746573743239393000ae1708746573743239393100af170874657374323939" + "3200b01708746573743239393300b11708746573743239393400b21708746573743239393500b31708746573743239393600b4170874657374" + "3239393700b51708746573743239393800b61708746573743239393900b71708746573743330303000b81708746573743330303100b9170874" + "6573743330303200ba1708746573743330303300bb1708746573743330303400bc1708746573743330303500bd1708746573743330303600be" + "1708746573743330303700bf1708746573743330303800c01708746573743330303900c11708746573743330313000c2170874657374333031" + "3100c31708746573743330313200c41708746573743330313300c51708746573743330313400c61708746573743330313500c7170874657374" + "3330313600c81708746573743330313700c91708746573743330313800ca1708746573743330313900cb1708746573743330323000cc170874" + "6573743330323100cd1708746573743330323200ce1708746573743330323300cf1708746573743330323400d01708746573743330323500d1" + "1708746573743330323600d21708746573743330323700d31708746573743330323800d41708746573743330323900d5170874657374333033" + "3000d61708746573743330333100d71708746573743330333200d81708746573743330333300d91708746573743330333400da170874657374" + "3330333500db1708746573743330333600dc1708746573743330333700dd1708746573743330333800de1708746573743330333900df170874" + "6573743330343000e01708746573743330343100e11708746573743330343200e21708746573743330343300e31708746573743330343400e4" + "1708746573743330343500e51708746573743330343600e61708746573743330343700e71708746573743330343800e8170874657374333034" + "3900e91708746573743330353000ea1708746573743330353100eb1708746573743330353200ec1708746573743330353300ed170874657374" + "3330353400ee1708746573743330353500ef1708746573743330353600f01708746573743330353700f11708746573743330353800f2170874" + "6573743330353900f31708746573743330363000f41708746573743330363100f51708746573743330363200f61708746573743330363300f7" + "1708746573743330363400f81708746573743330363500f91708746573743330363600fa1708746573743330363700fb170874657374333036" + "3800fc1708746573743330363900fd1708746573743330373000fe1708746573743330373100ff170874657374333037320080180874657374" + "333037330081180874657374333037340082180874657374333037350083180874657374333037360084180874657374333037370085180874" + "65737433303738008618087465737433303739008718087465737433303830008818087465737433303831008918087465737433303832008a" + "18087465737433303833008b18087465737433303834008c18087465737433303835008d18087465737433303836008e180874657374333038" + "37008f180874657374333038380090180874657374333038390091180874657374333039300092180874657374333039310093180874657374" + "333039320094180874657374333039330095180874657374333039340096180874657374333039350097180874657374333039360098180874" + "65737433303937009918087465737433303938009a18087465737433303939009b18087465737433313030009c18087465737433313031009d" + "18087465737433313032009e18087465737433313033009f1808746573743331303400a01808746573743331303500a1180874657374333130" + "3600a21808746573743331303700a31808746573743331303800a41808746573743331303900a51808746573743331313000a6180874657374" + "3331313100a71808746573743331313200a81808746573743331313300a91808746573743331313400aa1808746573743331313500ab180874" + "6573743331313600ac1808746573743331313700ad1808746573743331313800ae1808746573743331313900af1808746573743331323000b0" + "1808746573743331323100b11808746573743331323200b21808746573743331323300b31808746573743331323400b4180874657374333132" + "3500b51808746573743331323600b61808746573743331323700b71808746573743331323800b81808746573743331323900b9180874657374" + "3331333000ba1808746573743331333100bb1808746573743331333200bc1808746573743331333300bd1808746573743331333400be180874" + "6573743331333500bf1808746573743331333600c01808746573743331333700c11808746573743331333800c21808746573743331333900c3" + "1808746573743331343000c41808746573743331343100c51808746573743331343200c61808746573743331343300c7180874657374333134" + "3400c81808746573743331343500c91808746573743331343600ca1808746573743331343700cb1808746573743331343800cc180874657374" + "3331343900cd1808746573743331353000ce1808746573743331353100cf1808746573743331353200d01808746573743331353300d1180874" + "6573743331353400d21808746573743331353500d31808746573743331353600d41808746573743331353700d51808746573743331353800d6" + "1808746573743331353900d71808746573743331363000d81808746573743331363100d91808746573743331363200da180874657374333136" + "3300db1808746573743331363400dc1808746573743331363500dd1808746573743331363600de1808746573743331363700df180874657374" + "3331363800e01808746573743331363900e11808746573743331373000e21808746573743331373100e31808746573743331373200e4180874" + "6573743331373300e51808746573743331373400e61808746573743331373500e71808746573743331373600e81808746573743331373700e9" + "1808746573743331373800ea1808746573743331373900eb1808746573743331383000ec1808746573743331383100ed180874657374333138" + "3200ee1808746573743331383300ef1808746573743331383400f01808746573743331383500f11808746573743331383600f2180874657374" + "3331383700f31808746573743331383800f41808746573743331383900f51808746573743331393000f61808746573743331393100f7180874" + "6573743331393200f81808746573743331393300f91808746573743331393400fa1808746573743331393500fb1808746573743331393600fc" + "1808746573743331393700fd1808746573743331393800fe1808746573743331393900ff180874657374333230300080190874657374333230" + "310081190874657374333230320082190874657374333230330083190874657374333230340084190874657374333230350085190874657374" + "33323036008619087465737433323037008719087465737433323038008819087465737433323039008919087465737433323130008a190874" + "65737433323131008b19087465737433323132008c19087465737433323133008d19087465737433323134008e19087465737433323135008f" + "190874657374333231360090190874657374333231370091190874657374333231380092190874657374333231390093190874657374333232" + "300094190874657374333232310095190874657374333232320096190874657374333232330097190874657374333232340098190874657374" + "33323235009919087465737433323236009a19087465737433323237009b19087465737433323238009c19087465737433323239009d190874" + "65737433323330009e19087465737433323331009f1908746573743332333200a01908746573743332333300a11908746573743332333400a2" + "1908746573743332333500a31908746573743332333600a41908746573743332333700a51908746573743332333800a6190874657374333233" + "3900a71908746573743332343000a81908746573743332343100a91908746573743332343200aa1908746573743332343300ab190874657374" + "3332343400ac1908746573743332343500ad1908746573743332343600ae1908746573743332343700af1908746573743332343800b0190874" + "6573743332343900b11908746573743332353000b21908746573743332353100b31908746573743332353200b41908746573743332353300b5" + "1908746573743332353400b61908746573743332353500b71908746573743332353600b81908746573743332353700b9190874657374333235" + "3800ba1908746573743332353900bb1908746573743332363000bc1908746573743332363100bd1908746573743332363200be190874657374" + "3332363300bf1908746573743332363400c01908746573743332363500c11908746573743332363600c21908746573743332363700c3190874" + "6573743332363800c41908746573743332363900c51908746573743332373000c61908746573743332373100c71908746573743332373200c8" + "1908746573743332373300c91908746573743332373400ca1908746573743332373500cb1908746573743332373600cc190874657374333237" + "3700cd1908746573743332373800ce1908746573743332373900cf1908746573743332383000d01908746573743332383100d1190874657374" + "3332383200d21908746573743332383300d31908746573743332383400d41908746573743332383500d51908746573743332383600d6190874" + "6573743332383700d71908746573743332383800d81908746573743332383900d91908746573743332393000da1908746573743332393100db" + "1908746573743332393200dc1908746573743332393300dd1908746573743332393400de1908746573743332393500df190874657374333239" + "3600e01908746573743332393700e11908746573743332393800e21908746573743332393900e31908746573743333303000e4190874657374" + "3333303100e51908746573743333303200e61908746573743333303300e71908746573743333303400e81908746573743333303500e9190874" + "6573743333303600ea1908746573743333303700eb1908746573743333303800ec1908746573743333303900ed1908746573743333313000ee" + "1908746573743333313100ef1908746573743333313200f01908746573743333313300f11908746573743333313400f2190874657374333331" + "3500f31908746573743333313600f41908746573743333313700f51908746573743333313800f61908746573743333313900f7190874657374" + "3333323000f81908746573743333323100f91908746573743333323200fa1908746573743333323300fb1908746573743333323400fc190874" + "6573743333323500fd1908746573743333323600fe1908746573743333323700ff1908746573743333323800801a0874657374333332390081" + "1a08746573743333333000821a08746573743333333100831a08746573743333333200841a08746573743333333300851a0874657374333333" + "3400861a08746573743333333500871a08746573743333333600881a08746573743333333700891a087465737433333338008a1a0874657374" + "33333339008b1a087465737433333430008c1a087465737433333431008d1a087465737433333432008e1a087465737433333433008f1a0874" + "6573743333343400901a08746573743333343500911a08746573743333343600921a08746573743333343700931a0874657374333334380094" + "1a08746573743333343900951a08746573743333353000961a08746573743333353100971a08746573743333353200981a0874657374333335" + "3300991a087465737433333534009a1a087465737433333535009b1a087465737433333536009c1a087465737433333537009d1a0874657374" + "33333538009e1a087465737433333539009f1a08746573743333363000a01a08746573743333363100a11a08746573743333363200a21a0874" + "6573743333363300a31a08746573743333363400a41a08746573743333363500a51a08746573743333363600a61a08746573743333363700a7" + "1a08746573743333363800a81a08746573743333363900a91a08746573743333373000aa1a08746573743333373100ab1a0874657374333337" + "3200ac1a08746573743333373300ad1a08746573743333373400ae1a08746573743333373500af1a08746573743333373600b01a0874657374" + "3333373700b11a08746573743333373800b21a08746573743333373900b31a08746573743333383000b41a08746573743333383100b51a0874" + "6573743333383200b61a08746573743333383300b71a08746573743333383400b81a08746573743333383500b91a08746573743333383600ba" + "1a08746573743333383700bb1a08746573743333383800bc1a08746573743333383900bd1a08746573743333393000be1a0874657374333339" + "3100bf1a08746573743333393200c01a08746573743333393300c11a08746573743333393400c21a08746573743333393500c31a0874657374" + "3333393600c41a08746573743333393700c51a08746573743333393800c61a08746573743333393900c71a08746573743334303000c81a0874" + "6573743334303100c91a08746573743334303200ca1a08746573743334303300cb1a08746573743334303400cc1a08746573743334303500cd" + "1a08746573743334303600ce1a08746573743334303700cf1a08746573743334303800d01a08746573743334303900d11a0874657374333431" + "3000d21a08746573743334313100d31a08746573743334313200d41a08746573743334313300d51a08746573743334313400d61a0874657374" + "3334313500d71a08746573743334313600d81a08746573743334313700d91a08746573743334313800da1a08746573743334313900db1a0874" + "6573743334323000dc1a08746573743334323100dd1a08746573743334323200de1a08746573743334323300df1a08746573743334323400e0" + "1a08746573743334323500e11a08746573743334323600e21a08746573743334323700e31a08746573743334323800e41a0874657374333432" + "3900e51a08746573743334333000e61a08746573743334333100e71a08746573743334333200e81a08746573743334333300e91a0874657374" + "3334333400ea1a08746573743334333500eb1a08746573743334333600ec1a08746573743334333700ed1a08746573743334333800ee1a0874" + "6573743334333900ef1a08746573743334343000f01a08746573743334343100f11a08746573743334343200f21a08746573743334343300f3" + "1a08746573743334343400f41a08746573743334343500f51a08746573743334343600f61a08746573743334343700f71a0874657374333434" + "3800f81a08746573743334343900f91a08746573743334353000fa1a08746573743334353100fb1a08746573743334353200fc1a0874657374" + "3334353300fd1a08746573743334353400fe1a08746573743334353500ff1a08746573743334353600801b08746573743334353700811b0874" + "6573743334353800821b08746573743334353900831b08746573743334363000841b08746573743334363100851b0874657374333436320086" + "1b08746573743334363300871b08746573743334363400881b08746573743334363500891b087465737433343636008a1b0874657374333436" + "37008b1b087465737433343638008c1b087465737433343639008d1b087465737433343730008e1b087465737433343731008f1b0874657374" + "3334373200901b08746573743334373300911b08746573743334373400921b08746573743334373500931b08746573743334373600941b0874" + "6573743334373700951b08746573743334373800961b08746573743334373900971b08746573743334383000981b0874657374333438310099" + "1b087465737433343832009a1b087465737433343833009b1b087465737433343834009c1b087465737433343835009d1b0874657374333438" + "36009e1b087465737433343837009f1b08746573743334383800a01b08746573743334383900a11b08746573743334393000a21b0874657374" + "3334393100a31b08746573743334393200a41b08746573743334393300a51b08746573743334393400a61b08746573743334393500a71b0874" + "6573743334393600a81b08746573743334393700a91b08746573743334393800aa1b08746573743334393900ab1b08746573743335303000ac" + "1b08746573743335303100ad1b08746573743335303200ae1b08746573743335303300af1b08746573743335303400b01b0874657374333530" + "3500b11b08746573743335303600b21b08746573743335303700b31b08746573743335303800b41b08746573743335303900b51b0874657374" + "3335313000b61b08746573743335313100b71b08746573743335313200b81b08746573743335313300b91b08746573743335313400ba1b0874" + "6573743335313500bb1b08746573743335313600bc1b08746573743335313700bd1b08746573743335313800be1b08746573743335313900bf" + "1b08746573743335323000c01b08746573743335323100c11b08746573743335323200c21b08746573743335323300c31b0874657374333532" + "3400c41b08746573743335323500c51b08746573743335323600c61b08746573743335323700c71b08746573743335323800c81b0874657374" + "3335323900c91b08746573743335333000ca1b08746573743335333100cb1b08746573743335333200cc1b08746573743335333300cd1b0874" + "6573743335333400ce1b08746573743335333500cf1b08746573743335333600d01b08746573743335333700d11b08746573743335333800d2" + "1b08746573743335333900d31b08746573743335343000d41b08746573743335343100d51b08746573743335343200d61b0874657374333534" + "3300d71b08746573743335343400d81b08746573743335343500d91b08746573743335343600da1b08746573743335343700db1b0874657374" + "3335343800dc1b08746573743335343900dd1b08746573743335353000de1b08746573743335353100df1b08746573743335353200e01b0874" + "6573743335353300e11b08746573743335353400e21b08746573743335353500e31b08746573743335353600e41b08746573743335353700e5" + "1b08746573743335353800e61b08746573743335353900e71b08746573743335363000e81b08746573743335363100e91b0874657374333536" + "3200ea1b08746573743335363300eb1b08746573743335363400ec1b08746573743335363500ed1b08746573743335363600ee1b0874657374" + "3335363700ef1b08746573743335363800f01b08746573743335363900f11b08746573743335373000f21b08746573743335373100f31b0874" + "6573743335373200f41b08746573743335373300f51b08746573743335373400f61b08746573743335373500f71b08746573743335373600f8" + "1b08746573743335373700f91b08746573743335373800fa1b08746573743335373900fb1b08746573743335383000fc1b0874657374333538" + "3100fd1b08746573743335383200fe1b08746573743335383300ff1b08746573743335383400801c08746573743335383500811c0874657374" + "3335383600821c08746573743335383700831c08746573743335383800841c08746573743335383900851c08746573743335393000861c0874" + "6573743335393100871c08746573743335393200881c08746573743335393300891c087465737433353934008a1c087465737433353935008b" + "1c087465737433353936008c1c087465737433353937008d1c087465737433353938008e1c087465737433353939008f1c0874657374333630" + "3000901c08746573743336303100911c08746573743336303200921c08746573743336303300931c08746573743336303400941c0874657374" + "3336303500951c08746573743336303600961c08746573743336303700971c08746573743336303800981c08746573743336303900991c0874" + "65737433363130009a1c087465737433363131009b1c087465737433363132009c1c087465737433363133009d1c087465737433363134009e" + "1c087465737433363135009f1c08746573743336313600a01c08746573743336313700a11c08746573743336313800a21c0874657374333631" + "3900a31c08746573743336323000a41c08746573743336323100a51c08746573743336323200a61c08746573743336323300a71c0874657374" + "3336323400a81c08746573743336323500a91c08746573743336323600aa1c08746573743336323700ab1c08746573743336323800ac1c0874" + "6573743336323900ad1c08746573743336333000ae1c08746573743336333100af1c08746573743336333200b01c08746573743336333300b1" + "1c08746573743336333400b21c08746573743336333500b31c08746573743336333600b41c08746573743336333700b51c0874657374333633" + "3800b61c08746573743336333900b71c08746573743336343000b81c08746573743336343100b91c08746573743336343200ba1c0874657374" + "3336343300bb1c08746573743336343400bc1c08746573743336343500bd1c08746573743336343600be1c08746573743336343700bf1c0874" + "6573743336343800c01c08746573743336343900c11c08746573743336353000c21c08746573743336353100c31c08746573743336353200c4" + "1c08746573743336353300c51c08746573743336353400c61c08746573743336353500c71c08746573743336353600c81c0874657374333635" + "3700c91c08746573743336353800ca1c08746573743336353900cb1c08746573743336363000cc1c08746573743336363100cd1c0874657374" + "3336363200ce1c08746573743336363300cf1c08746573743336363400d01c08746573743336363500d11c08746573743336363600d21c0874" + "6573743336363700d31c08746573743336363800d41c08746573743336363900d51c08746573743336373000d61c08746573743336373100d7" + "1c08746573743336373200d81c08746573743336373300d91c08746573743336373400da1c08746573743336373500db1c0874657374333637" + "3600dc1c08746573743336373700dd1c08746573743336373800de1c08746573743336373900df1c08746573743336383000e01c0874657374" + "3336383100e11c08746573743336383200e21c08746573743336383300e31c08746573743336383400e41c08746573743336383500e51c0874" + "6573743336383600e61c08746573743336383700e71c08746573743336383800e81c08746573743336383900e91c08746573743336393000ea" + "1c08746573743336393100eb1c08746573743336393200ec1c08746573743336393300ed1c08746573743336393400ee1c0874657374333639" + "3500ef1c08746573743336393600f01c08746573743336393700f11c08746573743336393800f21c08746573743336393900f31c0874657374" + "3337303000f41c08746573743337303100f51c08746573743337303200f61c08746573743337303300f71c08746573743337303400f81c0874" + "6573743337303500f91c08746573743337303600fa1c08746573743337303700fb1c08746573743337303800fc1c08746573743337303900fd" + "1c08746573743337313000fe1c08746573743337313100ff1c08746573743337313200801d08746573743337313300811d0874657374333731" + "3400821d08746573743337313500831d08746573743337313600841d08746573743337313700851d08746573743337313800861d0874657374" + "3337313900871d08746573743337323000881d08746573743337323100891d087465737433373232008a1d087465737433373233008b1d0874" + "65737433373234008c1d087465737433373235008d1d087465737433373236008e1d087465737433373237008f1d0874657374333732380090" + "1d08746573743337323900911d08746573743337333000921d08746573743337333100931d08746573743337333200941d0874657374333733" + "3300951d08746573743337333400961d08746573743337333500971d08746573743337333600981d08746573743337333700991d0874657374" + "33373338009a1d087465737433373339009b1d087465737433373430009c1d087465737433373431009d1d087465737433373432009e1d0874" + "65737433373433009f1d08746573743337343400a01d08746573743337343500a11d08746573743337343600a21d08746573743337343700a3" + "1d08746573743337343800a41d08746573743337343900a51d08746573743337353000a61d08746573743337353100a71d0874657374333735" + "3200a81d08746573743337353300a91d08746573743337353400aa1d08746573743337353500ab1d08746573743337353600ac1d0874657374" + "3337353700ad1d08746573743337353800ae1d08746573743337353900af1d08746573743337363000b01d08746573743337363100b11d0874" + "6573743337363200b21d08746573743337363300b31d08746573743337363400b41d08746573743337363500b51d08746573743337363600b6" + "1d08746573743337363700b71d08746573743337363800b81d08746573743337363900b91d08746573743337373000ba1d0874657374333737" + "3100bb1d08746573743337373200bc1d08746573743337373300bd1d08746573743337373400be1d08746573743337373500bf1d0874657374" + "3337373600c01d08746573743337373700c11d08746573743337373800c21d08746573743337373900c31d08746573743337383000c41d0874" + "6573743337383100c51d08746573743337383200c61d08746573743337383300c71d08746573743337383400c81d08746573743337383500c9" + "1d08746573743337383600ca1d08746573743337383700cb1d08746573743337383800cc1d08746573743337383900cd1d0874657374333739" + "3000ce1d08746573743337393100cf1d08746573743337393200d01d08746573743337393300d11d08746573743337393400d21d0874657374" + "3337393500d31d08746573743337393600d41d08746573743337393700d51d08746573743337393800d61d08746573743337393900d71d0874" + "6573743338303000d81d08746573743338303100d91d08746573743338303200da1d08746573743338303300db1d08746573743338303400dc" + "1d08746573743338303500dd1d08746573743338303600de1d08746573743338303700df1d08746573743338303800e01d0874657374333830" + "3900e11d08746573743338313000e21d08746573743338313100e31d08746573743338313200e41d08746573743338313300e51d0874657374" + "3338313400e61d08746573743338313500e71d08746573743338313600e81d08746573743338313700e91d08746573743338313800ea1d0874" + "6573743338313900eb1d08746573743338323000ec1d08746573743338323100ed1d08746573743338323200ee1d08746573743338323300ef" + "1d08746573743338323400f01d08746573743338323500f11d08746573743338323600f21d08746573743338323700f31d0874657374333832" + "3800f41d08746573743338323900f51d08746573743338333000f61d08746573743338333100f71d08746573743338333200f81d0874657374" + "3338333300f91d08746573743338333400fa1d08746573743338333500fb1d08746573743338333600fc1d08746573743338333700fd1d0874" + "6573743338333800fe1d08746573743338333900ff1d08746573743338343000801e08746573743338343100811e0874657374333834320082" + "1e08746573743338343300831e08746573743338343400841e08746573743338343500851e08746573743338343600861e0874657374333834" + "3700871e08746573743338343800881e08746573743338343900891e087465737433383530008a1e087465737433383531008b1e0874657374" + "33383532008c1e087465737433383533008d1e087465737433383534008e1e087465737433383535008f1e08746573743338353600901e0874" + "6573743338353700911e08746573743338353800921e08746573743338353900931e08746573743338363000941e0874657374333836310095" + "1e08746573743338363200961e08746573743338363300971e08746573743338363400981e08746573743338363500991e0874657374333836" + "36009a1e087465737433383637009b1e087465737433383638009c1e087465737433383639009d1e087465737433383730009e1e0874657374" + "33383731009f1e08746573743338373200a01e08746573743338373300a11e08746573743338373400a21e08746573743338373500a31e0874" + "6573743338373600a41e08746573743338373700a51e08746573743338373800a61e08746573743338373900a71e08746573743338383000a8" + "1e08746573743338383100a91e08746573743338383200aa1e08746573743338383300ab1e08746573743338383400ac1e0874657374333838" + "3500ad1e08746573743338383600ae1e08746573743338383700af1e08746573743338383800b01e08746573743338383900b11e0874657374" + "3338393000b21e08746573743338393100b31e08746573743338393200b41e08746573743338393300b51e08746573743338393400b61e0874" + "6573743338393500b71e08746573743338393600b81e08746573743338393700b91e08746573743338393800ba1e08746573743338393900bb" + "1e08746573743339303000bc1e08746573743339303100bd1e08746573743339303200be1e08746573743339303300bf1e0874657374333930" + "3400c01e08746573743339303500c11e08746573743339303600c21e08746573743339303700c31e08746573743339303800c41e0874657374" + "3339303900c51e08746573743339313000c61e08746573743339313100c71e08746573743339313200c81e08746573743339313300c91e0874" + "6573743339313400ca1e08746573743339313500cb1e08746573743339313600cc1e08746573743339313700cd1e08746573743339313800ce" + "1e08746573743339313900cf1e08746573743339323000d01e08746573743339323100d11e08746573743339323200d21e0874657374333932" + "3300d31e08746573743339323400d41e08746573743339323500d51e08746573743339323600d61e08746573743339323700d71e0874657374" + "3339323800d81e08746573743339323900d91e08746573743339333000da1e08746573743339333100db1e08746573743339333200dc1e0874" + "6573743339333300dd1e08746573743339333400de1e08746573743339333500df1e08746573743339333600e01e08746573743339333700e1" + "1e08746573743339333800e21e08746573743339333900e31e08746573743339343000e41e08746573743339343100e51e0874657374333934" + "3200e61e08746573743339343300e71e08746573743339343400e81e08746573743339343500e91e08746573743339343600ea1e0874657374" + "3339343700eb1e08746573743339343800ec1e08746573743339343900ed1e08746573743339353000ee1e08746573743339353100ef1e0874" + "6573743339353200f01e08746573743339353300f11e08746573743339353400f21e08746573743339353500f31e08746573743339353600f4" + "1e08746573743339353700f51e08746573743339353800f61e08746573743339353900f71e08746573743339363000f81e0874657374333936" + "3100f91e08746573743339363200fa1e08746573743339363300fb1e08746573743339363400fc1e08746573743339363500fd1e0874657374" + "3339363600fe1e08746573743339363700ff1e08746573743339363800801f08746573743339363900811f08746573743339373000821f0874" + "6573743339373100831f08746573743339373200841f08746573743339373300851f08746573743339373400861f0874657374333937350087" + "1f08746573743339373600881f08746573743339373700891f087465737433393738008a1f087465737433393739008b1f0874657374333938" + "30008c1f087465737433393831008d1f087465737433393832008e1f087465737433393833008f1f08746573743339383400901f0874657374" + "3339383500911f08746573743339383600921f08746573743339383700931f08746573743339383800941f08746573743339383900951f0874" + "6573743339393000961f08746573743339393100971f08746573743339393200981f08746573743339393300991f087465737433393934009a" + "1f087465737433393935009b1f087465737433393936009c1f087465737433393937009d1f087465737433393938009e1f0874657374333939" + "39009f1f08746573743430303000a01f08746573743430303100a11f08746573743430303200a21f08746573743430303300a31f0874657374" + "3430303400a41f08746573743430303500a51f08746573743430303600a61f08746573743430303700a71f08746573743430303800a81f0874" + "6573743430303900a91f08746573743430313000aa1f08746573743430313100ab1f08746573743430313200ac1f08746573743430313300ad" + "1f08746573743430313400ae1f08746573743430313500af1f08746573743430313600b01f08746573743430313700b11f0874657374343031" + "3800b21f08746573743430313900b31f08746573743430323000b41f08746573743430323100b51f08746573743430323200b61f0874657374" + "3430323300b71f08746573743430323400b81f08746573743430323500b91f08746573743430323600ba1f08746573743430323700bb1f0874" + "6573743430323800bc1f08746573743430323900bd1f08746573743430333000be1f08746573743430333100bf1f08746573743430333200c0" + "1f08746573743430333300c11f08746573743430333400c21f08746573743430333500c31f08746573743430333600c41f0874657374343033" + "3700c51f08746573743430333800c61f08746573743430333900c71f08746573743430343000c81f08746573743430343100c91f0874657374" + "3430343200ca1f08746573743430343300cb1f08746573743430343400cc1f08746573743430343500cd1f08746573743430343600ce1f0874" + "6573743430343700cf1f08746573743430343800d01f08746573743430343900d11f08746573743430353000d21f08746573743430353100d3" + "1f08746573743430353200d41f08746573743430353300d51f08746573743430353400d61f08746573743430353500d71f0874657374343035" + "3600d81f08746573743430353700d91f08746573743430353800da1f08746573743430353900db1f08746573743430363000dc1f0874657374" + "3430363100dd1f08746573743430363200de1f08746573743430363300df1f08746573743430363400e01f08746573743430363500e11f0874" + "6573743430363600e21f08746573743430363700e31f08746573743430363800e41f08746573743430363900e51f08746573743430373000e6" + "1f08746573743430373100e71f08746573743430373200e81f08746573743430373300e91f08746573743430373400ea1f0874657374343037" + "3500eb1f08746573743430373600ec1f08746573743430373700ed1f08746573743430373800ee1f08746573743430373900ef1f0874657374" + "3430383000f01f08746573743430383100f11f08746573743430383200f21f08746573743430383300f31f08746573743430383400f41f0874" + "6573743430383500f51f08746573743430383600f61f08746573743430383700f71f08746573743430383800f81f08746573743430383900f9" + "1f08746573743430393000fa1f08746573743430393100fb1f08746573743430393200fc1f08746573743430393300fd1f0874657374343039" + "3400fe1f08746573743430393500ff1f0874657374343039360080200874657374343039370081200874657374343039380082200874657374" + "343039390083200874657374343130300084200874657374343130310085200874657374343130320086200874657374343130330087200874" + "65737434313034008820087465737434313035008920087465737434313036008a20087465737434313037008b20087465737434313038008c" + "20087465737434313039008d20087465737434313130008e20087465737434313131008f200874657374343131320090200874657374343131" + "330091200874657374343131340092200874657374343131350093200874657374343131360094200874657374343131370095200874657374" + "34313138009620087465737434313139009720087465737434313230009820087465737434313231009920087465737434313232009a200874" + "65737434313233009b20087465737434313234009c20087465737434313235009d20087465737434313236009e20087465737434313237009f" + "2008746573743431323800a02008746573743431323900a12008746573743431333000a22008746573743431333100a3200874657374343133" + "3200a42008746573743431333300a52008746573743431333400a62008746573743431333500a72008746573743431333600a8200874657374" + "3431333700a92008746573743431333800aa2008746573743431333900ab2008746573743431343000ac2008746573743431343100ad200874" + "6573743431343200ae2008746573743431343300af2008746573743431343400b02008746573743431343500b12008746573743431343600b2" + "2008746573743431343700b32008746573743431343800b42008746573743431343900b52008746573743431353000b6200874657374343135" + "3100b72008746573743431353200b82008746573743431353300b92008746573743431353400ba2008746573743431353500bb200874657374" + "3431353600bc2008746573743431353700bd2008746573743431353800be2008746573743431353900bf2008746573743431363000c0200874" + "6573743431363100c12008746573743431363200c22008746573743431363300c32008746573743431363400c42008746573743431363500c5" + "2008746573743431363600c62008746573743431363700c72008746573743431363800c82008746573743431363900c9200874657374343137" + "3000ca2008746573743431373100cb2008746573743431373200cc2008746573743431373300cd2008746573743431373400ce200874657374" + "3431373500cf2008746573743431373600d02008746573743431373700d12008746573743431373800d22008746573743431373900d3200874" + "6573743431383000d42008746573743431383100d52008746573743431383200d62008746573743431383300d72008746573743431383400d8" + "2008746573743431383500d92008746573743431383600da2008746573743431383700db2008746573743431383800dc200874657374343138" + "3900dd2008746573743431393000de2008746573743431393100df2008746573743431393200e02008746573743431393300e1200874657374" + "3431393400e22008746573743431393500e32008746573743431393600e42008746573743431393700e52008746573743431393800e6200874" + "6573743431393900e72008746573743432303000e82008746573743432303100e92008746573743432303200ea2008746573743432303300eb" + "2008746573743432303400ec2008746573743432303500ed2008746573743432303600ee2008746573743432303700ef200874657374343230" + "3800f02008746573743432303900f12008746573743432313000f22008746573743432313100f32008746573743432313200f4200874657374" + "3432313300f52008746573743432313400f62008746573743432313500f72008746573743432313600f82008746573743432313700f9200874" + "6573743432313800fa2008746573743432313900fb2008746573743432323000fc2008746573743432323100fd2008746573743432323200fe" + "2008746573743432323300ff200874657374343232340080210874657374343232350081210874657374343232360082210874657374343232" + "370083210874657374343232380084210874657374343232390085210874657374343233300086210874657374343233310087210874657374" + "34323332008821087465737434323333008921087465737434323334008a21087465737434323335008b21087465737434323336008c210874" + "65737434323337008d21087465737434323338008e21087465737434323339008f210874657374343234300090210874657374343234310091" + "210874657374343234320092210874657374343234330093210874657374343234340094210874657374343234350095210874657374343234" + "36009621087465737434323437009721087465737434323438009821087465737434323439009921087465737434323530009a210874657374" + "34323531009b21087465737434323532009c21087465737434323533009d21087465737434323534009e21087465737434323535009f210874" + "6573743432353600a02108746573743432353700a12108746573743432353800a22108746573743432353900a32108746573743432363000a4" + "2108746573743432363100a52108746573743432363200a62108746573743432363300a72108746573743432363400a8210874657374343236" + "3500a92108746573743432363600aa2108746573743432363700ab2108746573743432363800ac2108746573743432363900ad210874657374" + "3432373000ae2108746573743432373100af2108746573743432373200b02108746573743432373300b12108746573743432373400b2210874" + "6573743432373500b32108746573743432373600b42108746573743432373700b52108746573743432373800b62108746573743432373900b7" + "2108746573743432383000b82108746573743432383100b92108746573743432383200ba2108746573743432383300bb210874657374343238" + "3400bc2108746573743432383500bd2108746573743432383600be2108746573743432383700bf2108746573743432383800c0210874657374" + "3432383900c12108746573743432393000c22108746573743432393100c32108746573743432393200c42108746573743432393300c5210874" + "6573743432393400c62108746573743432393500c72108746573743432393600c82108746573743432393700c92108746573743432393800ca" + "2108746573743432393900cb2108746573743433303000cc2108746573743433303100cd2108746573743433303200ce210874657374343330" + "3300cf2108746573743433303400d02108746573743433303500d12108746573743433303600d22108746573743433303700d3210874657374" + "3433303800d42108746573743433303900d52108746573743433313000d62108746573743433313100d72108746573743433313200d8210874" + "6573743433313300d92108746573743433313400da2108746573743433313500db2108746573743433313600dc2108746573743433313700dd" + "2108746573743433313800de2108746573743433313900df2108746573743433323000e02108746573743433323100e1210874657374343332" + "3200e22108746573743433323300e32108746573743433323400e42108746573743433323500e52108746573743433323600e6210874657374" + "3433323700e72108746573743433323800e82108746573743433323900e92108746573743433333000ea2108746573743433333100eb210874" + "6573743433333200ec2108746573743433333300ed2108746573743433333400ee2108746573743433333500ef2108746573743433333600f0" + "2108746573743433333700f12108746573743433333800f22108746573743433333900f32108746573743433343000f4210874657374343334" + "3100f52108746573743433343200f62108746573743433343300f72108746573743433343400f82108746573743433343500f9210874657374" + "3433343600fa2108746573743433343700fb2108746573743433343800fc2108746573743433343900fd2108746573743433353000fe210874" + "6573743433353100ff210874657374343335320080220874657374343335330081220874657374343335340082220874657374343335350083" + "220874657374343335360084220874657374343335370085220874657374343335380086220874657374343335390087220874657374343336" + "30008822087465737434333631008922087465737434333632008a22087465737434333633008b22087465737434333634008c220874657374" + "34333635008d22087465737434333636008e22087465737434333637008f220874657374343336380090220874657374343336390091220874" + "657374343337300092220874657374343337310093220874657374343337320094220874657374343337330095220874657374343337340096" + "22087465737434333735009722087465737434333736009822087465737434333737009922087465737434333738009a220874657374343337" + "39009b22087465737434333830009c22087465737434333831009d22087465737434333832009e22087465737434333833009f220874657374" + "3433383400a02208746573743433383500a12208746573743433383600a22208746573743433383700a32208746573743433383800a4220874" + "6573743433383900a52208746573743433393000a62208746573743433393100a72208746573743433393200a82208746573743433393300a9" + "2208746573743433393400aa2208746573743433393500ab2208746573743433393600ac2208746573743433393700ad220874657374343339" + "3800ae2208746573743433393900af2208746573743434303000b02208746573743434303100b12208746573743434303200b2220874657374" + "3434303300b32208746573743434303400b42208746573743434303500b52208746573743434303600b62208746573743434303700b7220874" + "6573743434303800b82208746573743434303900b92208746573743434313000ba2208746573743434313100bb2208746573743434313200bc" + "2208746573743434313300bd2208746573743434313400be2208746573743434313500bf2208746573743434313600c0220874657374343431" + "3700c12208746573743434313800c22208746573743434313900c32208746573743434323000c42208746573743434323100c5220874657374" + "3434323200c62208746573743434323300c72208746573743434323400c82208746573743434323500c92208746573743434323600ca220874" + "6573743434323700cb2208746573743434323800cc2208746573743434323900cd2208746573743434333000ce2208746573743434333100cf" + "2208746573743434333200d02208746573743434333300d12208746573743434333400d22208746573743434333500d3220874657374343433" + "3600d42208746573743434333700d52208746573743434333800d62208746573743434333900d72208746573743434343000d8220874657374" + "3434343100d92208746573743434343200da2208746573743434343300db2208746573743434343400dc2208746573743434343500dd220874" + "6573743434343600de2208746573743434343700df2208746573743434343800e02208746573743434343900e12208746573743434353000e2" + "2208746573743434353100e32208746573743434353200e42208746573743434353300e52208746573743434353400e6220874657374343435" + "3500e72208746573743434353600e82208746573743434353700e92208746573743434353800ea2208746573743434353900eb220874657374" + "3434363000ec2208746573743434363100ed2208746573743434363200ee2208746573743434363300ef2208746573743434363400f0220874" + "6573743434363500f12208746573743434363600f22208746573743434363700f32208746573743434363800f42208746573743434363900f5" + "2208746573743434373000f62208746573743434373100f72208746573743434373200f82208746573743434373300f9220874657374343437" + "3400fa2208746573743434373500fb2208746573743434373600fc2208746573743434373700fd2208746573743434373800fe220874657374" + "3434373900ff220874657374343438300080230874657374343438310081230874657374343438320082230874657374343438330083230874" + "657374343438340084230874657374343438350085230874657374343438360086230874657374343438370087230874657374343438380088" + "23087465737434343839008923087465737434343930008a23087465737434343931008b23087465737434343932008c230874657374343439" + "33008d23087465737434343934008e23087465737434343935008f230874657374343439360090230874657374343439370091230874657374" + "343439380092230874657374343439390093230874657374343530300094230874657374343530310095230874657374343530320096230874" + "65737434353033009723087465737434353034009823087465737434353035009923087465737434353036009a23087465737434353037009b" + "23087465737434353038009c23087465737434353039009d23087465737434353130009e23087465737434353131009f230874657374343531" + "3200a02308746573743435313300a12308746573743435313400a22308746573743435313500a32308746573743435313600a4230874657374" + "3435313700a52308746573743435313800a62308746573743435313900a72308746573743435323000a82308746573743435323100a9230874" + "6573743435323200aa2308746573743435323300ab2308746573743435323400ac2308746573743435323500ad2308746573743435323600ae" + "2308746573743435323700af2308746573743435323800b02308746573743435323900b12308746573743435333000b2230874657374343533" + "3100b32308746573743435333200b42308746573743435333300b52308746573743435333400b62308746573743435333500b7230874657374" + "3435333600b82308746573743435333700b92308746573743435333800ba2308746573743435333900bb2308746573743435343000bc230874" + "6573743435343100bd2308746573743435343200be2308746573743435343300bf2308746573743435343400c02308746573743435343500c1" + "2308746573743435343600c22308746573743435343700c32308746573743435343800c42308746573743435343900c5230874657374343535" + "3000c62308746573743435353100c72308746573743435353200c82308746573743435353300c92308746573743435353400ca230874657374" + "3435353500cb2308746573743435353600cc2308746573743435353700cd2308746573743435353800ce2308746573743435353900cf230874" + "6573743435363000d02308746573743435363100d12308746573743435363200d22308746573743435363300d32308746573743435363400d4" + "2308746573743435363500d52308746573743435363600d62308746573743435363700d72308746573743435363800d8230874657374343536" + "3900d92308746573743435373000da2308746573743435373100db2308746573743435373200dc2308746573743435373300dd230874657374" + "3435373400de2308746573743435373500df2308746573743435373600e02308746573743435373700e12308746573743435373800e2230874" + "6573743435373900e32308746573743435383000e42308746573743435383100e52308746573743435383200e62308746573743435383300e7" + "2308746573743435383400e82308746573743435383500e92308746573743435383600ea2308746573743435383700eb230874657374343538" + "3800ec2308746573743435383900ed2308746573743435393000ee2308746573743435393100ef2308746573743435393200f0230874657374" + "3435393300f12308746573743435393400f22308746573743435393500f32308746573743435393600f42308746573743435393700f5230874" + "6573743435393800f62308746573743435393900f72308746573743436303000f82308746573743436303100f92308746573743436303200fa" + "2308746573743436303300fb2308746573743436303400fc2308746573743436303500fd2308746573743436303600fe230874657374343630" + "3700ff230874657374343630380080240874657374343630390081240874657374343631300082240874657374343631310083240874657374" + "343631320084240874657374343631330085240874657374343631340086240874657374343631350087240874657374343631360088240874" + "65737434363137008924087465737434363138008a24087465737434363139008b24087465737434363230008c24087465737434363231008d" + "24087465737434363232008e24087465737434363233008f240874657374343632340090240874657374343632350091240874657374343632" + "360092240874657374343632370093240874657374343632380094240874657374343632390095240874657374343633300096240874657374" + "34363331009724087465737434363332009824087465737434363333009924087465737434363334009a24087465737434363335009b240874" + "65737434363336009c24087465737434363337009d24087465737434363338009e24087465737434363339009f2408746573743436343000a0" + "2408746573743436343100a12408746573743436343200a22408746573743436343300a32408746573743436343400a4240874657374343634" + "3500a52408746573743436343600a62408746573743436343700a72408746573743436343800a82408746573743436343900a9240874657374" + "3436353000aa2408746573743436353100ab2408746573743436353200ac2408746573743436353300ad2408746573743436353400ae240874" + "6573743436353500af2408746573743436353600b02408746573743436353700b12408746573743436353800b22408746573743436353900b3" + "2408746573743436363000b42408746573743436363100b52408746573743436363200b62408746573743436363300b7240874657374343636" + "3400b82408746573743436363500b92408746573743436363600ba2408746573743436363700bb2408746573743436363800bc240874657374" + "3436363900bd2408746573743436373000be2408746573743436373100bf2408746573743436373200c02408746573743436373300c1240874" + "6573743436373400c22408746573743436373500c32408746573743436373600c42408746573743436373700c52408746573743436373800c6" + "2408746573743436373900c72408746573743436383000c82408746573743436383100c92408746573743436383200ca240874657374343638" + "3300cb2408746573743436383400cc2408746573743436383500cd2408746573743436383600ce2408746573743436383700cf240874657374" + "3436383800d02408746573743436383900d12408746573743436393000d22408746573743436393100d32408746573743436393200d4240874" + "6573743436393300d52408746573743436393400d62408746573743436393500d72408746573743436393600d82408746573743436393700d9" + "2408746573743436393800da2408746573743436393900db2408746573743437303000dc2408746573743437303100dd240874657374343730" + "3200de2408746573743437303300df2408746573743437303400e02408746573743437303500e12408746573743437303600e2240874657374" + "3437303700e32408746573743437303800e42408746573743437303900e52408746573743437313000e62408746573743437313100e7240874" + "6573743437313200e82408746573743437313300e92408746573743437313400ea2408746573743437313500eb2408746573743437313600ec" + "2408746573743437313700ed2408746573743437313800ee2408746573743437313900ef2408746573743437323000f0240874657374343732" + "3100f12408746573743437323200f22408746573743437323300f32408746573743437323400f42408746573743437323500f5240874657374" + "3437323600f62408746573743437323700f72408746573743437323800f82408746573743437323900f92408746573743437333000fa240874" + "6573743437333100fb2408746573743437333200fc2408746573743437333300fd2408746573743437333400fe2408746573743437333500ff" + "240874657374343733360080250874657374343733370081250874657374343733380082250874657374343733390083250874657374343734" + "300084250874657374343734310085250874657374343734320086250874657374343734330087250874657374343734340088250874657374" + "34373435008925087465737434373436008a25087465737434373437008b25087465737434373438008c25087465737434373439008d250874" + "65737434373530008e25087465737434373531008f250874657374343735320090250874657374343735330091250874657374343735340092" + "250874657374343735350093250874657374343735360094250874657374343735370095250874657374343735380096250874657374343735" + "39009725087465737434373630009825087465737434373631009925087465737434373632009a25087465737434373633009b250874657374" + "34373634009c25087465737434373635009d25087465737434373636009e25087465737434373637009f2508746573743437363800a0250874" + "6573743437363900a12508746573743437373000a22508746573743437373100a32508746573743437373200a42508746573743437373300a5" + "2508746573743437373400a62508746573743437373500a72508746573743437373600a82508746573743437373700a9250874657374343737" + "3800aa2508746573743437373900ab2508746573743437383000ac2508746573743437383100ad2508746573743437383200ae250874657374" + "3437383300af2508746573743437383400b02508746573743437383500b12508746573743437383600b22508746573743437383700b3250874" + "6573743437383800b42508746573743437383900b52508746573743437393000b62508746573743437393100b72508746573743437393200b8" + "2508746573743437393300b92508746573743437393400ba2508746573743437393500bb2508746573743437393600bc250874657374343739" + "3700bd2508746573743437393800be2508746573743437393900bf2508746573743438303000c02508746573743438303100c1250874657374" + "3438303200c22508746573743438303300c32508746573743438303400c42508746573743438303500c52508746573743438303600c6250874" + "6573743438303700c72508746573743438303800c82508746573743438303900c92508746573743438313000ca2508746573743438313100cb" + "2508746573743438313200cc2508746573743438313300cd2508746573743438313400ce2508746573743438313500cf250874657374343831" + "3600d02508746573743438313700d12508746573743438313800d22508746573743438313900d32508746573743438323000d4250874657374" + "3438323100d52508746573743438323200d62508746573743438323300d72508746573743438323400d82508746573743438323500d9250874" + "6573743438323600da2508746573743438323700db2508746573743438323800dc2508746573743438323900dd2508746573743438333000de" + "2508746573743438333100df2508746573743438333200e02508746573743438333300e12508746573743438333400e2250874657374343833" + "3500e32508746573743438333600e42508746573743438333700e52508746573743438333800e62508746573743438333900e7250874657374" + "3438343000e82508746573743438343100e92508746573743438343200ea2508746573743438343300eb2508746573743438343400ec250874" + "6573743438343500ed2508746573743438343600ee2508746573743438343700ef2508746573743438343800f02508746573743438343900f1" + "2508746573743438353000f22508746573743438353100f32508746573743438353200f42508746573743438353300f5250874657374343835" + "3400f62508746573743438353500f72508746573743438353600f82508746573743438353700f92508746573743438353800fa250874657374" + "3438353900fb2508746573743438363000fc2508746573743438363100fd2508746573743438363200fe2508746573743438363300ff250874" + "657374343836340080260874657374343836350081260874657374343836360082260874657374343836370083260874657374343836380084" + "260874657374343836390085260874657374343837300086260874657374343837310087260874657374343837320088260874657374343837" + "33008926087465737434383734008a26087465737434383735008b26087465737434383736008c26087465737434383737008d260874657374" + "34383738008e26087465737434383739008f260874657374343838300090260874657374343838310091260874657374343838320092260874" + "657374343838330093260874657374343838340094260874657374343838350095260874657374343838360096260874657374343838370097" + "26087465737434383838009826087465737434383839009926087465737434383930009a26087465737434383931009b260874657374343839" + "32009c26087465737434383933009d26087465737434383934009e26087465737434383935009f2608746573743438393600a0260874657374" + "3438393700a12608746573743438393800a22608746573743438393900a32608746573743439303000a42608746573743439303100a5260874" + "6573743439303200a62608746573743439303300a72608746573743439303400a82608746573743439303500a92608746573743439303600aa" + "2608746573743439303700ab2608746573743439303800ac2608746573743439303900ad2608746573743439313000ae260874657374343931" + "3100af2608746573743439313200b02608746573743439313300b12608746573743439313400b22608746573743439313500b3260874657374" + "3439313600b42608746573743439313700b52608746573743439313800b62608746573743439313900b72608746573743439323000b8260874" + "6573743439323100b92608746573743439323200ba2608746573743439323300bb2608746573743439323400bc2608746573743439323500bd" + "2608746573743439323600be2608746573743439323700bf2608746573743439323800c02608746573743439323900c1260874657374343933" + "3000c22608746573743439333100c32608746573743439333200c42608746573743439333300c52608746573743439333400c6260874657374" + "3439333500c72608746573743439333600c82608746573743439333700c92608746573743439333800ca2608746573743439333900cb260874" + "6573743439343000cc2608746573743439343100cd2608746573743439343200ce2608746573743439343300cf2608746573743439343400d0" + "2608746573743439343500d12608746573743439343600d22608746573743439343700d32608746573743439343800d4260874657374343934" + "3900d52608746573743439353000d62608746573743439353100d72608746573743439353200d82608746573743439353300d9260874657374" + "3439353400da2608746573743439353500db2608746573743439353600dc2608746573743439353700dd2608746573743439353800de260874" + "6573743439353900df2608746573743439363000e02608746573743439363100e12608746573743439363200e22608746573743439363300e3" + "2608746573743439363400e42608746573743439363500e52608746573743439363600e62608746573743439363700e7260874657374343936" + "3800e82608746573743439363900e92608746573743439373000ea2608746573743439373100eb2608746573743439373200ec260874657374" + "3439373300ed2608746573743439373400ee2608746573743439373500ef2608746573743439373600f02608746573743439373700f1260874" + "6573743439373800f22608746573743439373900f32608746573743439383000f42608746573743439383100f52608746573743439383200f6" + "2608746573743439383300f72608746573743439383400f82608746573743439383500f92608746573743439383600fa260874657374343938" + "3700fb2608746573743439383800fc2608746573743439383900fd2608746573743439393000fe2608746573743439393100ff260874657374" + "343939320080270874657374343939330081270874657374343939340082270874657374343939350083270874657374343939360084270874" + "657374343939370085270874657374343939380086270874657374343939390087270ac2b80288270700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b"; diff --git a/src/test/app/wasm_fixtures/fixtures.h b/src/test/app/wasm_fixtures/fixtures.h index 12f7b2ee6c..b453446a4c 100644 --- a/src/test/app/wasm_fixtures/fixtures.h +++ b/src/test/app/wasm_fixtures/fixtures.h @@ -85,3 +85,8 @@ extern std::string const startLoopHex; extern std::string const badAllocHex; extern std::string const badAlignWasmHex; + +extern std::string const thousandParamsHex; +extern std::string const thousand1ParamsHex; +extern std::string const locals10kHex; +extern std::string const functions5kHex; diff --git a/src/test/app/wasm_fixtures/thousand1_params.c b/src/test/app/wasm_fixtures/thousand1_params.c new file mode 100644 index 0000000000..1a281461c4 --- /dev/null +++ b/src/test/app/wasm_fixtures/thousand1_params.c @@ -0,0 +1,264 @@ +// clang-format off + +#include + +int32_t test( + int32_t p0, int32_t p1, int32_t p2, int32_t p3, int32_t p4, int32_t p5, int32_t p6, int32_t p7 +, int32_t p8, int32_t p9, int32_t p10, int32_t p11, int32_t p12, int32_t p13, int32_t p14, int32_t p15 +, int32_t p16, int32_t p17, int32_t p18, int32_t p19, int32_t p20, int32_t p21, int32_t p22, int32_t p23 +, int32_t p24, int32_t p25, int32_t p26, int32_t p27, int32_t p28, int32_t p29, int32_t p30, int32_t p31 +, int32_t p32, int32_t p33, int32_t p34, int32_t p35, int32_t p36, int32_t p37, int32_t p38, int32_t p39 +, int32_t p40, int32_t p41, int32_t p42, int32_t p43, int32_t p44, int32_t p45, int32_t p46, int32_t p47 +, int32_t p48, int32_t p49, int32_t p50, int32_t p51, int32_t p52, int32_t p53, int32_t p54, int32_t p55 +, int32_t p56, int32_t p57, int32_t p58, int32_t p59, int32_t p60, int32_t p61, int32_t p62, int32_t p63 +, int32_t p64, int32_t p65, int32_t p66, int32_t p67, int32_t p68, int32_t p69, int32_t p70, int32_t p71 +, int32_t p72, int32_t p73, int32_t p74, int32_t p75, int32_t p76, int32_t p77, int32_t p78, int32_t p79 +, int32_t p80, int32_t p81, int32_t p82, int32_t p83, int32_t p84, int32_t p85, int32_t p86, int32_t p87 +, int32_t p88, int32_t p89, int32_t p90, int32_t p91, int32_t p92, int32_t p93, int32_t p94, int32_t p95 +, int32_t p96, int32_t p97, int32_t p98, int32_t p99, int32_t p100, int32_t p101, int32_t p102, int32_t p103 +, int32_t p104, int32_t p105, int32_t p106, int32_t p107, int32_t p108, int32_t p109, int32_t p110, int32_t p111 +, int32_t p112, int32_t p113, int32_t p114, int32_t p115, int32_t p116, int32_t p117, int32_t p118, int32_t p119 +, int32_t p120, int32_t p121, int32_t p122, int32_t p123, int32_t p124, int32_t p125, int32_t p126, int32_t p127 +, int32_t p128, int32_t p129, int32_t p130, int32_t p131, int32_t p132, int32_t p133, int32_t p134, int32_t p135 +, int32_t p136, int32_t p137, int32_t p138, int32_t p139, int32_t p140, int32_t p141, int32_t p142, int32_t p143 +, int32_t p144, int32_t p145, int32_t p146, int32_t p147, int32_t p148, int32_t p149, int32_t p150, int32_t p151 +, int32_t p152, int32_t p153, int32_t p154, int32_t p155, int32_t p156, int32_t p157, int32_t p158, int32_t p159 +, int32_t p160, int32_t p161, int32_t p162, int32_t p163, int32_t p164, int32_t p165, int32_t p166, int32_t p167 +, int32_t p168, int32_t p169, int32_t p170, int32_t p171, int32_t p172, int32_t p173, int32_t p174, int32_t p175 +, int32_t p176, int32_t p177, int32_t p178, int32_t p179, int32_t p180, int32_t p181, int32_t p182, int32_t p183 +, int32_t p184, int32_t p185, int32_t p186, int32_t p187, int32_t p188, int32_t p189, int32_t p190, int32_t p191 +, int32_t p192, int32_t p193, int32_t p194, int32_t p195, int32_t p196, int32_t p197, int32_t p198, int32_t p199 +, int32_t p200, int32_t p201, int32_t p202, int32_t p203, int32_t p204, int32_t p205, int32_t p206, int32_t p207 +, int32_t p208, int32_t p209, int32_t p210, int32_t p211, int32_t p212, int32_t p213, int32_t p214, int32_t p215 +, int32_t p216, int32_t p217, int32_t p218, int32_t p219, int32_t p220, int32_t p221, int32_t p222, int32_t p223 +, int32_t p224, int32_t p225, int32_t p226, int32_t p227, int32_t p228, int32_t p229, int32_t p230, int32_t p231 +, int32_t p232, int32_t p233, int32_t p234, int32_t p235, int32_t p236, int32_t p237, int32_t p238, int32_t p239 +, int32_t p240, int32_t p241, int32_t p242, int32_t p243, int32_t p244, int32_t p245, int32_t p246, int32_t p247 +, int32_t p248, int32_t p249, int32_t p250, int32_t p251, int32_t p252, int32_t p253, int32_t p254, int32_t p255 +, int32_t p256, int32_t p257, int32_t p258, int32_t p259, int32_t p260, int32_t p261, int32_t p262, int32_t p263 +, int32_t p264, int32_t p265, int32_t p266, int32_t p267, int32_t p268, int32_t p269, int32_t p270, int32_t p271 +, int32_t p272, int32_t p273, int32_t p274, int32_t p275, int32_t p276, int32_t p277, int32_t p278, int32_t p279 +, int32_t p280, int32_t p281, int32_t p282, int32_t p283, int32_t p284, int32_t p285, int32_t p286, int32_t p287 +, int32_t p288, int32_t p289, int32_t p290, int32_t p291, int32_t p292, int32_t p293, int32_t p294, int32_t p295 +, int32_t p296, int32_t p297, int32_t p298, int32_t p299, int32_t p300, int32_t p301, int32_t p302, int32_t p303 +, int32_t p304, int32_t p305, int32_t p306, int32_t p307, int32_t p308, int32_t p309, int32_t p310, int32_t p311 +, int32_t p312, int32_t p313, int32_t p314, int32_t p315, int32_t p316, int32_t p317, int32_t p318, int32_t p319 +, int32_t p320, int32_t p321, int32_t p322, int32_t p323, int32_t p324, int32_t p325, int32_t p326, int32_t p327 +, int32_t p328, int32_t p329, int32_t p330, int32_t p331, int32_t p332, int32_t p333, int32_t p334, int32_t p335 +, int32_t p336, int32_t p337, int32_t p338, int32_t p339, int32_t p340, int32_t p341, int32_t p342, int32_t p343 +, int32_t p344, int32_t p345, int32_t p346, int32_t p347, int32_t p348, int32_t p349, int32_t p350, int32_t p351 +, int32_t p352, int32_t p353, int32_t p354, int32_t p355, int32_t p356, int32_t p357, int32_t p358, int32_t p359 +, int32_t p360, int32_t p361, int32_t p362, int32_t p363, int32_t p364, int32_t p365, int32_t p366, int32_t p367 +, int32_t p368, int32_t p369, int32_t p370, int32_t p371, int32_t p372, int32_t p373, int32_t p374, int32_t p375 +, int32_t p376, int32_t p377, int32_t p378, int32_t p379, int32_t p380, int32_t p381, int32_t p382, int32_t p383 +, int32_t p384, int32_t p385, int32_t p386, int32_t p387, int32_t p388, int32_t p389, int32_t p390, int32_t p391 +, int32_t p392, int32_t p393, int32_t p394, int32_t p395, int32_t p396, int32_t p397, int32_t p398, int32_t p399 +, int32_t p400, int32_t p401, int32_t p402, int32_t p403, int32_t p404, int32_t p405, int32_t p406, int32_t p407 +, int32_t p408, int32_t p409, int32_t p410, int32_t p411, int32_t p412, int32_t p413, int32_t p414, int32_t p415 +, int32_t p416, int32_t p417, int32_t p418, int32_t p419, int32_t p420, int32_t p421, int32_t p422, int32_t p423 +, int32_t p424, int32_t p425, int32_t p426, int32_t p427, int32_t p428, int32_t p429, int32_t p430, int32_t p431 +, int32_t p432, int32_t p433, int32_t p434, int32_t p435, int32_t p436, int32_t p437, int32_t p438, int32_t p439 +, int32_t p440, int32_t p441, int32_t p442, int32_t p443, int32_t p444, int32_t p445, int32_t p446, int32_t p447 +, int32_t p448, int32_t p449, int32_t p450, int32_t p451, int32_t p452, int32_t p453, int32_t p454, int32_t p455 +, int32_t p456, int32_t p457, int32_t p458, int32_t p459, int32_t p460, int32_t p461, int32_t p462, int32_t p463 +, int32_t p464, int32_t p465, int32_t p466, int32_t p467, int32_t p468, int32_t p469, int32_t p470, int32_t p471 +, int32_t p472, int32_t p473, int32_t p474, int32_t p475, int32_t p476, int32_t p477, int32_t p478, int32_t p479 +, int32_t p480, int32_t p481, int32_t p482, int32_t p483, int32_t p484, int32_t p485, int32_t p486, int32_t p487 +, int32_t p488, int32_t p489, int32_t p490, int32_t p491, int32_t p492, int32_t p493, int32_t p494, int32_t p495 +, int32_t p496, int32_t p497, int32_t p498, int32_t p499, int32_t p500, int32_t p501, int32_t p502, int32_t p503 +, int32_t p504, int32_t p505, int32_t p506, int32_t p507, int32_t p508, int32_t p509, int32_t p510, int32_t p511 +, int32_t p512, int32_t p513, int32_t p514, int32_t p515, int32_t p516, int32_t p517, int32_t p518, int32_t p519 +, int32_t p520, int32_t p521, int32_t p522, int32_t p523, int32_t p524, int32_t p525, int32_t p526, int32_t p527 +, int32_t p528, int32_t p529, int32_t p530, int32_t p531, int32_t p532, int32_t p533, int32_t p534, int32_t p535 +, int32_t p536, int32_t p537, int32_t p538, int32_t p539, int32_t p540, int32_t p541, int32_t p542, int32_t p543 +, int32_t p544, int32_t p545, int32_t p546, int32_t p547, int32_t p548, int32_t p549, int32_t p550, int32_t p551 +, int32_t p552, int32_t p553, int32_t p554, int32_t p555, int32_t p556, int32_t p557, int32_t p558, int32_t p559 +, int32_t p560, int32_t p561, int32_t p562, int32_t p563, int32_t p564, int32_t p565, int32_t p566, int32_t p567 +, int32_t p568, int32_t p569, int32_t p570, int32_t p571, int32_t p572, int32_t p573, int32_t p574, int32_t p575 +, int32_t p576, int32_t p577, int32_t p578, int32_t p579, int32_t p580, int32_t p581, int32_t p582, int32_t p583 +, int32_t p584, int32_t p585, int32_t p586, int32_t p587, int32_t p588, int32_t p589, int32_t p590, int32_t p591 +, int32_t p592, int32_t p593, int32_t p594, int32_t p595, int32_t p596, int32_t p597, int32_t p598, int32_t p599 +, int32_t p600, int32_t p601, int32_t p602, int32_t p603, int32_t p604, int32_t p605, int32_t p606, int32_t p607 +, int32_t p608, int32_t p609, int32_t p610, int32_t p611, int32_t p612, int32_t p613, int32_t p614, int32_t p615 +, int32_t p616, int32_t p617, int32_t p618, int32_t p619, int32_t p620, int32_t p621, int32_t p622, int32_t p623 +, int32_t p624, int32_t p625, int32_t p626, int32_t p627, int32_t p628, int32_t p629, int32_t p630, int32_t p631 +, int32_t p632, int32_t p633, int32_t p634, int32_t p635, int32_t p636, int32_t p637, int32_t p638, int32_t p639 +, int32_t p640, int32_t p641, int32_t p642, int32_t p643, int32_t p644, int32_t p645, int32_t p646, int32_t p647 +, int32_t p648, int32_t p649, int32_t p650, int32_t p651, int32_t p652, int32_t p653, int32_t p654, int32_t p655 +, int32_t p656, int32_t p657, int32_t p658, int32_t p659, int32_t p660, int32_t p661, int32_t p662, int32_t p663 +, int32_t p664, int32_t p665, int32_t p666, int32_t p667, int32_t p668, int32_t p669, int32_t p670, int32_t p671 +, int32_t p672, int32_t p673, int32_t p674, int32_t p675, int32_t p676, int32_t p677, int32_t p678, int32_t p679 +, int32_t p680, int32_t p681, int32_t p682, int32_t p683, int32_t p684, int32_t p685, int32_t p686, int32_t p687 +, int32_t p688, int32_t p689, int32_t p690, int32_t p691, int32_t p692, int32_t p693, int32_t p694, int32_t p695 +, int32_t p696, int32_t p697, int32_t p698, int32_t p699, int32_t p700, int32_t p701, int32_t p702, int32_t p703 +, int32_t p704, int32_t p705, int32_t p706, int32_t p707, int32_t p708, int32_t p709, int32_t p710, int32_t p711 +, int32_t p712, int32_t p713, int32_t p714, int32_t p715, int32_t p716, int32_t p717, int32_t p718, int32_t p719 +, int32_t p720, int32_t p721, int32_t p722, int32_t p723, int32_t p724, int32_t p725, int32_t p726, int32_t p727 +, int32_t p728, int32_t p729, int32_t p730, int32_t p731, int32_t p732, int32_t p733, int32_t p734, int32_t p735 +, int32_t p736, int32_t p737, int32_t p738, int32_t p739, int32_t p740, int32_t p741, int32_t p742, int32_t p743 +, int32_t p744, int32_t p745, int32_t p746, int32_t p747, int32_t p748, int32_t p749, int32_t p750, int32_t p751 +, int32_t p752, int32_t p753, int32_t p754, int32_t p755, int32_t p756, int32_t p757, int32_t p758, int32_t p759 +, int32_t p760, int32_t p761, int32_t p762, int32_t p763, int32_t p764, int32_t p765, int32_t p766, int32_t p767 +, int32_t p768, int32_t p769, int32_t p770, int32_t p771, int32_t p772, int32_t p773, int32_t p774, int32_t p775 +, int32_t p776, int32_t p777, int32_t p778, int32_t p779, int32_t p780, int32_t p781, int32_t p782, int32_t p783 +, int32_t p784, int32_t p785, int32_t p786, int32_t p787, int32_t p788, int32_t p789, int32_t p790, int32_t p791 +, int32_t p792, int32_t p793, int32_t p794, int32_t p795, int32_t p796, int32_t p797, int32_t p798, int32_t p799 +, int32_t p800, int32_t p801, int32_t p802, int32_t p803, int32_t p804, int32_t p805, int32_t p806, int32_t p807 +, int32_t p808, int32_t p809, int32_t p810, int32_t p811, int32_t p812, int32_t p813, int32_t p814, int32_t p815 +, int32_t p816, int32_t p817, int32_t p818, int32_t p819, int32_t p820, int32_t p821, int32_t p822, int32_t p823 +, int32_t p824, int32_t p825, int32_t p826, int32_t p827, int32_t p828, int32_t p829, int32_t p830, int32_t p831 +, int32_t p832, int32_t p833, int32_t p834, int32_t p835, int32_t p836, int32_t p837, int32_t p838, int32_t p839 +, int32_t p840, int32_t p841, int32_t p842, int32_t p843, int32_t p844, int32_t p845, int32_t p846, int32_t p847 +, int32_t p848, int32_t p849, int32_t p850, int32_t p851, int32_t p852, int32_t p853, int32_t p854, int32_t p855 +, int32_t p856, int32_t p857, int32_t p858, int32_t p859, int32_t p860, int32_t p861, int32_t p862, int32_t p863 +, int32_t p864, int32_t p865, int32_t p866, int32_t p867, int32_t p868, int32_t p869, int32_t p870, int32_t p871 +, int32_t p872, int32_t p873, int32_t p874, int32_t p875, int32_t p876, int32_t p877, int32_t p878, int32_t p879 +, int32_t p880, int32_t p881, int32_t p882, int32_t p883, int32_t p884, int32_t p885, int32_t p886, int32_t p887 +, int32_t p888, int32_t p889, int32_t p890, int32_t p891, int32_t p892, int32_t p893, int32_t p894, int32_t p895 +, int32_t p896, int32_t p897, int32_t p898, int32_t p899, int32_t p900, int32_t p901, int32_t p902, int32_t p903 +, int32_t p904, int32_t p905, int32_t p906, int32_t p907, int32_t p908, int32_t p909, int32_t p910, int32_t p911 +, int32_t p912, int32_t p913, int32_t p914, int32_t p915, int32_t p916, int32_t p917, int32_t p918, int32_t p919 +, int32_t p920, int32_t p921, int32_t p922, int32_t p923, int32_t p924, int32_t p925, int32_t p926, int32_t p927 +, int32_t p928, int32_t p929, int32_t p930, int32_t p931, int32_t p932, int32_t p933, int32_t p934, int32_t p935 +, int32_t p936, int32_t p937, int32_t p938, int32_t p939, int32_t p940, int32_t p941, int32_t p942, int32_t p943 +, int32_t p944, int32_t p945, int32_t p946, int32_t p947, int32_t p948, int32_t p949, int32_t p950, int32_t p951 +, int32_t p952, int32_t p953, int32_t p954, int32_t p955, int32_t p956, int32_t p957, int32_t p958, int32_t p959 +, int32_t p960, int32_t p961, int32_t p962, int32_t p963, int32_t p964, int32_t p965, int32_t p966, int32_t p967 +, int32_t p968, int32_t p969, int32_t p970, int32_t p971, int32_t p972, int32_t p973, int32_t p974, int32_t p975 +, int32_t p976, int32_t p977, int32_t p978, int32_t p979, int32_t p980, int32_t p981, int32_t p982, int32_t p983 +, int32_t p984, int32_t p985, int32_t p986, int32_t p987, int32_t p988, int32_t p989, int32_t p990, int32_t p991 +, int32_t p992, int32_t p993, int32_t p994, int32_t p995, int32_t p996, int32_t p997, int32_t p998, int32_t p999 +, int32_t p1000 +) +{ + int32_t x; + x = p0 + p1 + p2 + p3 + p4 + p5 + p6 + p7 + + p8 + p9 + p10 + p11 + p12 + p13 + p14 + p15 + + p16 + p17 + p18 + p19 + p20 + p21 + p22 + p23 + + p24 + p25 + p26 + p27 + p28 + p29 + p30 + p31 + + p32 + p33 + p34 + p35 + p36 + p37 + p38 + p39 + + p40 + p41 + p42 + p43 + p44 + p45 + p46 + p47 + + p48 + p49 + p50 + p51 + p52 + p53 + p54 + p55 + + p56 + p57 + p58 + p59 + p60 + p61 + p62 + p63 + + p64 + p65 + p66 + p67 + p68 + p69 + p70 + p71 + + p72 + p73 + p74 + p75 + p76 + p77 + p78 + p79 + + p80 + p81 + p82 + p83 + p84 + p85 + p86 + p87 + + p88 + p89 + p90 + p91 + p92 + p93 + p94 + p95 + + p96 + p97 + p98 + p99 + p100 + p101 + p102 + p103 + + p104 + p105 + p106 + p107 + p108 + p109 + p110 + p111 + + p112 + p113 + p114 + p115 + p116 + p117 + p118 + p119 + + p120 + p121 + p122 + p123 + p124 + p125 + p126 + p127 + + p128 + p129 + p130 + p131 + p132 + p133 + p134 + p135 + + p136 + p137 + p138 + p139 + p140 + p141 + p142 + p143 + + p144 + p145 + p146 + p147 + p148 + p149 + p150 + p151 + + p152 + p153 + p154 + p155 + p156 + p157 + p158 + p159 + + p160 + p161 + p162 + p163 + p164 + p165 + p166 + p167 + + p168 + p169 + p170 + p171 + p172 + p173 + p174 + p175 + + p176 + p177 + p178 + p179 + p180 + p181 + p182 + p183 + + p184 + p185 + p186 + p187 + p188 + p189 + p190 + p191 + + p192 + p193 + p194 + p195 + p196 + p197 + p198 + p199 + + p200 + p201 + p202 + p203 + p204 + p205 + p206 + p207 + + p208 + p209 + p210 + p211 + p212 + p213 + p214 + p215 + + p216 + p217 + p218 + p219 + p220 + p221 + p222 + p223 + + p224 + p225 + p226 + p227 + p228 + p229 + p230 + p231 + + p232 + p233 + p234 + p235 + p236 + p237 + p238 + p239 + + p240 + p241 + p242 + p243 + p244 + p245 + p246 + p247 + + p248 + p249 + p250 + p251 + p252 + p253 + p254 + p255 + + p256 + p257 + p258 + p259 + p260 + p261 + p262 + p263 + + p264 + p265 + p266 + p267 + p268 + p269 + p270 + p271 + + p272 + p273 + p274 + p275 + p276 + p277 + p278 + p279 + + p280 + p281 + p282 + p283 + p284 + p285 + p286 + p287 + + p288 + p289 + p290 + p291 + p292 + p293 + p294 + p295 + + p296 + p297 + p298 + p299 + p300 + p301 + p302 + p303 + + p304 + p305 + p306 + p307 + p308 + p309 + p310 + p311 + + p312 + p313 + p314 + p315 + p316 + p317 + p318 + p319 + + p320 + p321 + p322 + p323 + p324 + p325 + p326 + p327 + + p328 + p329 + p330 + p331 + p332 + p333 + p334 + p335 + + p336 + p337 + p338 + p339 + p340 + p341 + p342 + p343 + + p344 + p345 + p346 + p347 + p348 + p349 + p350 + p351 + + p352 + p353 + p354 + p355 + p356 + p357 + p358 + p359 + + p360 + p361 + p362 + p363 + p364 + p365 + p366 + p367 + + p368 + p369 + p370 + p371 + p372 + p373 + p374 + p375 + + p376 + p377 + p378 + p379 + p380 + p381 + p382 + p383 + + p384 + p385 + p386 + p387 + p388 + p389 + p390 + p391 + + p392 + p393 + p394 + p395 + p396 + p397 + p398 + p399 + + p400 + p401 + p402 + p403 + p404 + p405 + p406 + p407 + + p408 + p409 + p410 + p411 + p412 + p413 + p414 + p415 + + p416 + p417 + p418 + p419 + p420 + p421 + p422 + p423 + + p424 + p425 + p426 + p427 + p428 + p429 + p430 + p431 + + p432 + p433 + p434 + p435 + p436 + p437 + p438 + p439 + + p440 + p441 + p442 + p443 + p444 + p445 + p446 + p447 + + p448 + p449 + p450 + p451 + p452 + p453 + p454 + p455 + + p456 + p457 + p458 + p459 + p460 + p461 + p462 + p463 + + p464 + p465 + p466 + p467 + p468 + p469 + p470 + p471 + + p472 + p473 + p474 + p475 + p476 + p477 + p478 + p479 + + p480 + p481 + p482 + p483 + p484 + p485 + p486 + p487 + + p488 + p489 + p490 + p491 + p492 + p493 + p494 + p495 + + p496 + p497 + p498 + p499 + p500 + p501 + p502 + p503 + + p504 + p505 + p506 + p507 + p508 + p509 + p510 + p511 + + p512 + p513 + p514 + p515 + p516 + p517 + p518 + p519 + + p520 + p521 + p522 + p523 + p524 + p525 + p526 + p527 + + p528 + p529 + p530 + p531 + p532 + p533 + p534 + p535 + + p536 + p537 + p538 + p539 + p540 + p541 + p542 + p543 + + p544 + p545 + p546 + p547 + p548 + p549 + p550 + p551 + + p552 + p553 + p554 + p555 + p556 + p557 + p558 + p559 + + p560 + p561 + p562 + p563 + p564 + p565 + p566 + p567 + + p568 + p569 + p570 + p571 + p572 + p573 + p574 + p575 + + p576 + p577 + p578 + p579 + p580 + p581 + p582 + p583 + + p584 + p585 + p586 + p587 + p588 + p589 + p590 + p591 + + p592 + p593 + p594 + p595 + p596 + p597 + p598 + p599 + + p600 + p601 + p602 + p603 + p604 + p605 + p606 + p607 + + p608 + p609 + p610 + p611 + p612 + p613 + p614 + p615 + + p616 + p617 + p618 + p619 + p620 + p621 + p622 + p623 + + p624 + p625 + p626 + p627 + p628 + p629 + p630 + p631 + + p632 + p633 + p634 + p635 + p636 + p637 + p638 + p639 + + p640 + p641 + p642 + p643 + p644 + p645 + p646 + p647 + + p648 + p649 + p650 + p651 + p652 + p653 + p654 + p655 + + p656 + p657 + p658 + p659 + p660 + p661 + p662 + p663 + + p664 + p665 + p666 + p667 + p668 + p669 + p670 + p671 + + p672 + p673 + p674 + p675 + p676 + p677 + p678 + p679 + + p680 + p681 + p682 + p683 + p684 + p685 + p686 + p687 + + p688 + p689 + p690 + p691 + p692 + p693 + p694 + p695 + + p696 + p697 + p698 + p699 + p700 + p701 + p702 + p703 + + p704 + p705 + p706 + p707 + p708 + p709 + p710 + p711 + + p712 + p713 + p714 + p715 + p716 + p717 + p718 + p719 + + p720 + p721 + p722 + p723 + p724 + p725 + p726 + p727 + + p728 + p729 + p730 + p731 + p732 + p733 + p734 + p735 + + p736 + p737 + p738 + p739 + p740 + p741 + p742 + p743 + + p744 + p745 + p746 + p747 + p748 + p749 + p750 + p751 + + p752 + p753 + p754 + p755 + p756 + p757 + p758 + p759 + + p760 + p761 + p762 + p763 + p764 + p765 + p766 + p767 + + p768 + p769 + p770 + p771 + p772 + p773 + p774 + p775 + + p776 + p777 + p778 + p779 + p780 + p781 + p782 + p783 + + p784 + p785 + p786 + p787 + p788 + p789 + p790 + p791 + + p792 + p793 + p794 + p795 + p796 + p797 + p798 + p799 + + p800 + p801 + p802 + p803 + p804 + p805 + p806 + p807 + + p808 + p809 + p810 + p811 + p812 + p813 + p814 + p815 + + p816 + p817 + p818 + p819 + p820 + p821 + p822 + p823 + + p824 + p825 + p826 + p827 + p828 + p829 + p830 + p831 + + p832 + p833 + p834 + p835 + p836 + p837 + p838 + p839 + + p840 + p841 + p842 + p843 + p844 + p845 + p846 + p847 + + p848 + p849 + p850 + p851 + p852 + p853 + p854 + p855 + + p856 + p857 + p858 + p859 + p860 + p861 + p862 + p863 + + p864 + p865 + p866 + p867 + p868 + p869 + p870 + p871 + + p872 + p873 + p874 + p875 + p876 + p877 + p878 + p879 + + p880 + p881 + p882 + p883 + p884 + p885 + p886 + p887 + + p888 + p889 + p890 + p891 + p892 + p893 + p894 + p895 + + p896 + p897 + p898 + p899 + p900 + p901 + p902 + p903 + + p904 + p905 + p906 + p907 + p908 + p909 + p910 + p911 + + p912 + p913 + p914 + p915 + p916 + p917 + p918 + p919 + + p920 + p921 + p922 + p923 + p924 + p925 + p926 + p927 + + p928 + p929 + p930 + p931 + p932 + p933 + p934 + p935 + + p936 + p937 + p938 + p939 + p940 + p941 + p942 + p943 + + p944 + p945 + p946 + p947 + p948 + p949 + p950 + p951 + + p952 + p953 + p954 + p955 + p956 + p957 + p958 + p959 + + p960 + p961 + p962 + p963 + p964 + p965 + p966 + p967 + + p968 + p969 + p970 + p971 + p972 + p973 + p974 + p975 + + p976 + p977 + p978 + p979 + p980 + p981 + p982 + p983 + + p984 + p985 + p986 + p987 + p988 + p989 + p990 + p991 + + p992 + p993 + p994 + p995 + p996 + p997 + p998 + p999 + + p1000; + return x; +} + +// clang-format on diff --git a/src/test/app/wasm_fixtures/thousand_params.c b/src/test/app/wasm_fixtures/thousand_params.c new file mode 100644 index 0000000000..d934ca38c8 --- /dev/null +++ b/src/test/app/wasm_fixtures/thousand_params.c @@ -0,0 +1,262 @@ +// clang-format off + +#include + +int32_t test( + int32_t p0, int32_t p1, int32_t p2, int32_t p3, int32_t p4, int32_t p5, int32_t p6, int32_t p7 +, int32_t p8, int32_t p9, int32_t p10, int32_t p11, int32_t p12, int32_t p13, int32_t p14, int32_t p15 +, int32_t p16, int32_t p17, int32_t p18, int32_t p19, int32_t p20, int32_t p21, int32_t p22, int32_t p23 +, int32_t p24, int32_t p25, int32_t p26, int32_t p27, int32_t p28, int32_t p29, int32_t p30, int32_t p31 +, int32_t p32, int32_t p33, int32_t p34, int32_t p35, int32_t p36, int32_t p37, int32_t p38, int32_t p39 +, int32_t p40, int32_t p41, int32_t p42, int32_t p43, int32_t p44, int32_t p45, int32_t p46, int32_t p47 +, int32_t p48, int32_t p49, int32_t p50, int32_t p51, int32_t p52, int32_t p53, int32_t p54, int32_t p55 +, int32_t p56, int32_t p57, int32_t p58, int32_t p59, int32_t p60, int32_t p61, int32_t p62, int32_t p63 +, int32_t p64, int32_t p65, int32_t p66, int32_t p67, int32_t p68, int32_t p69, int32_t p70, int32_t p71 +, int32_t p72, int32_t p73, int32_t p74, int32_t p75, int32_t p76, int32_t p77, int32_t p78, int32_t p79 +, int32_t p80, int32_t p81, int32_t p82, int32_t p83, int32_t p84, int32_t p85, int32_t p86, int32_t p87 +, int32_t p88, int32_t p89, int32_t p90, int32_t p91, int32_t p92, int32_t p93, int32_t p94, int32_t p95 +, int32_t p96, int32_t p97, int32_t p98, int32_t p99, int32_t p100, int32_t p101, int32_t p102, int32_t p103 +, int32_t p104, int32_t p105, int32_t p106, int32_t p107, int32_t p108, int32_t p109, int32_t p110, int32_t p111 +, int32_t p112, int32_t p113, int32_t p114, int32_t p115, int32_t p116, int32_t p117, int32_t p118, int32_t p119 +, int32_t p120, int32_t p121, int32_t p122, int32_t p123, int32_t p124, int32_t p125, int32_t p126, int32_t p127 +, int32_t p128, int32_t p129, int32_t p130, int32_t p131, int32_t p132, int32_t p133, int32_t p134, int32_t p135 +, int32_t p136, int32_t p137, int32_t p138, int32_t p139, int32_t p140, int32_t p141, int32_t p142, int32_t p143 +, int32_t p144, int32_t p145, int32_t p146, int32_t p147, int32_t p148, int32_t p149, int32_t p150, int32_t p151 +, int32_t p152, int32_t p153, int32_t p154, int32_t p155, int32_t p156, int32_t p157, int32_t p158, int32_t p159 +, int32_t p160, int32_t p161, int32_t p162, int32_t p163, int32_t p164, int32_t p165, int32_t p166, int32_t p167 +, int32_t p168, int32_t p169, int32_t p170, int32_t p171, int32_t p172, int32_t p173, int32_t p174, int32_t p175 +, int32_t p176, int32_t p177, int32_t p178, int32_t p179, int32_t p180, int32_t p181, int32_t p182, int32_t p183 +, int32_t p184, int32_t p185, int32_t p186, int32_t p187, int32_t p188, int32_t p189, int32_t p190, int32_t p191 +, int32_t p192, int32_t p193, int32_t p194, int32_t p195, int32_t p196, int32_t p197, int32_t p198, int32_t p199 +, int32_t p200, int32_t p201, int32_t p202, int32_t p203, int32_t p204, int32_t p205, int32_t p206, int32_t p207 +, int32_t p208, int32_t p209, int32_t p210, int32_t p211, int32_t p212, int32_t p213, int32_t p214, int32_t p215 +, int32_t p216, int32_t p217, int32_t p218, int32_t p219, int32_t p220, int32_t p221, int32_t p222, int32_t p223 +, int32_t p224, int32_t p225, int32_t p226, int32_t p227, int32_t p228, int32_t p229, int32_t p230, int32_t p231 +, int32_t p232, int32_t p233, int32_t p234, int32_t p235, int32_t p236, int32_t p237, int32_t p238, int32_t p239 +, int32_t p240, int32_t p241, int32_t p242, int32_t p243, int32_t p244, int32_t p245, int32_t p246, int32_t p247 +, int32_t p248, int32_t p249, int32_t p250, int32_t p251, int32_t p252, int32_t p253, int32_t p254, int32_t p255 +, int32_t p256, int32_t p257, int32_t p258, int32_t p259, int32_t p260, int32_t p261, int32_t p262, int32_t p263 +, int32_t p264, int32_t p265, int32_t p266, int32_t p267, int32_t p268, int32_t p269, int32_t p270, int32_t p271 +, int32_t p272, int32_t p273, int32_t p274, int32_t p275, int32_t p276, int32_t p277, int32_t p278, int32_t p279 +, int32_t p280, int32_t p281, int32_t p282, int32_t p283, int32_t p284, int32_t p285, int32_t p286, int32_t p287 +, int32_t p288, int32_t p289, int32_t p290, int32_t p291, int32_t p292, int32_t p293, int32_t p294, int32_t p295 +, int32_t p296, int32_t p297, int32_t p298, int32_t p299, int32_t p300, int32_t p301, int32_t p302, int32_t p303 +, int32_t p304, int32_t p305, int32_t p306, int32_t p307, int32_t p308, int32_t p309, int32_t p310, int32_t p311 +, int32_t p312, int32_t p313, int32_t p314, int32_t p315, int32_t p316, int32_t p317, int32_t p318, int32_t p319 +, int32_t p320, int32_t p321, int32_t p322, int32_t p323, int32_t p324, int32_t p325, int32_t p326, int32_t p327 +, int32_t p328, int32_t p329, int32_t p330, int32_t p331, int32_t p332, int32_t p333, int32_t p334, int32_t p335 +, int32_t p336, int32_t p337, int32_t p338, int32_t p339, int32_t p340, int32_t p341, int32_t p342, int32_t p343 +, int32_t p344, int32_t p345, int32_t p346, int32_t p347, int32_t p348, int32_t p349, int32_t p350, int32_t p351 +, int32_t p352, int32_t p353, int32_t p354, int32_t p355, int32_t p356, int32_t p357, int32_t p358, int32_t p359 +, int32_t p360, int32_t p361, int32_t p362, int32_t p363, int32_t p364, int32_t p365, int32_t p366, int32_t p367 +, int32_t p368, int32_t p369, int32_t p370, int32_t p371, int32_t p372, int32_t p373, int32_t p374, int32_t p375 +, int32_t p376, int32_t p377, int32_t p378, int32_t p379, int32_t p380, int32_t p381, int32_t p382, int32_t p383 +, int32_t p384, int32_t p385, int32_t p386, int32_t p387, int32_t p388, int32_t p389, int32_t p390, int32_t p391 +, int32_t p392, int32_t p393, int32_t p394, int32_t p395, int32_t p396, int32_t p397, int32_t p398, int32_t p399 +, int32_t p400, int32_t p401, int32_t p402, int32_t p403, int32_t p404, int32_t p405, int32_t p406, int32_t p407 +, int32_t p408, int32_t p409, int32_t p410, int32_t p411, int32_t p412, int32_t p413, int32_t p414, int32_t p415 +, int32_t p416, int32_t p417, int32_t p418, int32_t p419, int32_t p420, int32_t p421, int32_t p422, int32_t p423 +, int32_t p424, int32_t p425, int32_t p426, int32_t p427, int32_t p428, int32_t p429, int32_t p430, int32_t p431 +, int32_t p432, int32_t p433, int32_t p434, int32_t p435, int32_t p436, int32_t p437, int32_t p438, int32_t p439 +, int32_t p440, int32_t p441, int32_t p442, int32_t p443, int32_t p444, int32_t p445, int32_t p446, int32_t p447 +, int32_t p448, int32_t p449, int32_t p450, int32_t p451, int32_t p452, int32_t p453, int32_t p454, int32_t p455 +, int32_t p456, int32_t p457, int32_t p458, int32_t p459, int32_t p460, int32_t p461, int32_t p462, int32_t p463 +, int32_t p464, int32_t p465, int32_t p466, int32_t p467, int32_t p468, int32_t p469, int32_t p470, int32_t p471 +, int32_t p472, int32_t p473, int32_t p474, int32_t p475, int32_t p476, int32_t p477, int32_t p478, int32_t p479 +, int32_t p480, int32_t p481, int32_t p482, int32_t p483, int32_t p484, int32_t p485, int32_t p486, int32_t p487 +, int32_t p488, int32_t p489, int32_t p490, int32_t p491, int32_t p492, int32_t p493, int32_t p494, int32_t p495 +, int32_t p496, int32_t p497, int32_t p498, int32_t p499, int32_t p500, int32_t p501, int32_t p502, int32_t p503 +, int32_t p504, int32_t p505, int32_t p506, int32_t p507, int32_t p508, int32_t p509, int32_t p510, int32_t p511 +, int32_t p512, int32_t p513, int32_t p514, int32_t p515, int32_t p516, int32_t p517, int32_t p518, int32_t p519 +, int32_t p520, int32_t p521, int32_t p522, int32_t p523, int32_t p524, int32_t p525, int32_t p526, int32_t p527 +, int32_t p528, int32_t p529, int32_t p530, int32_t p531, int32_t p532, int32_t p533, int32_t p534, int32_t p535 +, int32_t p536, int32_t p537, int32_t p538, int32_t p539, int32_t p540, int32_t p541, int32_t p542, int32_t p543 +, int32_t p544, int32_t p545, int32_t p546, int32_t p547, int32_t p548, int32_t p549, int32_t p550, int32_t p551 +, int32_t p552, int32_t p553, int32_t p554, int32_t p555, int32_t p556, int32_t p557, int32_t p558, int32_t p559 +, int32_t p560, int32_t p561, int32_t p562, int32_t p563, int32_t p564, int32_t p565, int32_t p566, int32_t p567 +, int32_t p568, int32_t p569, int32_t p570, int32_t p571, int32_t p572, int32_t p573, int32_t p574, int32_t p575 +, int32_t p576, int32_t p577, int32_t p578, int32_t p579, int32_t p580, int32_t p581, int32_t p582, int32_t p583 +, int32_t p584, int32_t p585, int32_t p586, int32_t p587, int32_t p588, int32_t p589, int32_t p590, int32_t p591 +, int32_t p592, int32_t p593, int32_t p594, int32_t p595, int32_t p596, int32_t p597, int32_t p598, int32_t p599 +, int32_t p600, int32_t p601, int32_t p602, int32_t p603, int32_t p604, int32_t p605, int32_t p606, int32_t p607 +, int32_t p608, int32_t p609, int32_t p610, int32_t p611, int32_t p612, int32_t p613, int32_t p614, int32_t p615 +, int32_t p616, int32_t p617, int32_t p618, int32_t p619, int32_t p620, int32_t p621, int32_t p622, int32_t p623 +, int32_t p624, int32_t p625, int32_t p626, int32_t p627, int32_t p628, int32_t p629, int32_t p630, int32_t p631 +, int32_t p632, int32_t p633, int32_t p634, int32_t p635, int32_t p636, int32_t p637, int32_t p638, int32_t p639 +, int32_t p640, int32_t p641, int32_t p642, int32_t p643, int32_t p644, int32_t p645, int32_t p646, int32_t p647 +, int32_t p648, int32_t p649, int32_t p650, int32_t p651, int32_t p652, int32_t p653, int32_t p654, int32_t p655 +, int32_t p656, int32_t p657, int32_t p658, int32_t p659, int32_t p660, int32_t p661, int32_t p662, int32_t p663 +, int32_t p664, int32_t p665, int32_t p666, int32_t p667, int32_t p668, int32_t p669, int32_t p670, int32_t p671 +, int32_t p672, int32_t p673, int32_t p674, int32_t p675, int32_t p676, int32_t p677, int32_t p678, int32_t p679 +, int32_t p680, int32_t p681, int32_t p682, int32_t p683, int32_t p684, int32_t p685, int32_t p686, int32_t p687 +, int32_t p688, int32_t p689, int32_t p690, int32_t p691, int32_t p692, int32_t p693, int32_t p694, int32_t p695 +, int32_t p696, int32_t p697, int32_t p698, int32_t p699, int32_t p700, int32_t p701, int32_t p702, int32_t p703 +, int32_t p704, int32_t p705, int32_t p706, int32_t p707, int32_t p708, int32_t p709, int32_t p710, int32_t p711 +, int32_t p712, int32_t p713, int32_t p714, int32_t p715, int32_t p716, int32_t p717, int32_t p718, int32_t p719 +, int32_t p720, int32_t p721, int32_t p722, int32_t p723, int32_t p724, int32_t p725, int32_t p726, int32_t p727 +, int32_t p728, int32_t p729, int32_t p730, int32_t p731, int32_t p732, int32_t p733, int32_t p734, int32_t p735 +, int32_t p736, int32_t p737, int32_t p738, int32_t p739, int32_t p740, int32_t p741, int32_t p742, int32_t p743 +, int32_t p744, int32_t p745, int32_t p746, int32_t p747, int32_t p748, int32_t p749, int32_t p750, int32_t p751 +, int32_t p752, int32_t p753, int32_t p754, int32_t p755, int32_t p756, int32_t p757, int32_t p758, int32_t p759 +, int32_t p760, int32_t p761, int32_t p762, int32_t p763, int32_t p764, int32_t p765, int32_t p766, int32_t p767 +, int32_t p768, int32_t p769, int32_t p770, int32_t p771, int32_t p772, int32_t p773, int32_t p774, int32_t p775 +, int32_t p776, int32_t p777, int32_t p778, int32_t p779, int32_t p780, int32_t p781, int32_t p782, int32_t p783 +, int32_t p784, int32_t p785, int32_t p786, int32_t p787, int32_t p788, int32_t p789, int32_t p790, int32_t p791 +, int32_t p792, int32_t p793, int32_t p794, int32_t p795, int32_t p796, int32_t p797, int32_t p798, int32_t p799 +, int32_t p800, int32_t p801, int32_t p802, int32_t p803, int32_t p804, int32_t p805, int32_t p806, int32_t p807 +, int32_t p808, int32_t p809, int32_t p810, int32_t p811, int32_t p812, int32_t p813, int32_t p814, int32_t p815 +, int32_t p816, int32_t p817, int32_t p818, int32_t p819, int32_t p820, int32_t p821, int32_t p822, int32_t p823 +, int32_t p824, int32_t p825, int32_t p826, int32_t p827, int32_t p828, int32_t p829, int32_t p830, int32_t p831 +, int32_t p832, int32_t p833, int32_t p834, int32_t p835, int32_t p836, int32_t p837, int32_t p838, int32_t p839 +, int32_t p840, int32_t p841, int32_t p842, int32_t p843, int32_t p844, int32_t p845, int32_t p846, int32_t p847 +, int32_t p848, int32_t p849, int32_t p850, int32_t p851, int32_t p852, int32_t p853, int32_t p854, int32_t p855 +, int32_t p856, int32_t p857, int32_t p858, int32_t p859, int32_t p860, int32_t p861, int32_t p862, int32_t p863 +, int32_t p864, int32_t p865, int32_t p866, int32_t p867, int32_t p868, int32_t p869, int32_t p870, int32_t p871 +, int32_t p872, int32_t p873, int32_t p874, int32_t p875, int32_t p876, int32_t p877, int32_t p878, int32_t p879 +, int32_t p880, int32_t p881, int32_t p882, int32_t p883, int32_t p884, int32_t p885, int32_t p886, int32_t p887 +, int32_t p888, int32_t p889, int32_t p890, int32_t p891, int32_t p892, int32_t p893, int32_t p894, int32_t p895 +, int32_t p896, int32_t p897, int32_t p898, int32_t p899, int32_t p900, int32_t p901, int32_t p902, int32_t p903 +, int32_t p904, int32_t p905, int32_t p906, int32_t p907, int32_t p908, int32_t p909, int32_t p910, int32_t p911 +, int32_t p912, int32_t p913, int32_t p914, int32_t p915, int32_t p916, int32_t p917, int32_t p918, int32_t p919 +, int32_t p920, int32_t p921, int32_t p922, int32_t p923, int32_t p924, int32_t p925, int32_t p926, int32_t p927 +, int32_t p928, int32_t p929, int32_t p930, int32_t p931, int32_t p932, int32_t p933, int32_t p934, int32_t p935 +, int32_t p936, int32_t p937, int32_t p938, int32_t p939, int32_t p940, int32_t p941, int32_t p942, int32_t p943 +, int32_t p944, int32_t p945, int32_t p946, int32_t p947, int32_t p948, int32_t p949, int32_t p950, int32_t p951 +, int32_t p952, int32_t p953, int32_t p954, int32_t p955, int32_t p956, int32_t p957, int32_t p958, int32_t p959 +, int32_t p960, int32_t p961, int32_t p962, int32_t p963, int32_t p964, int32_t p965, int32_t p966, int32_t p967 +, int32_t p968, int32_t p969, int32_t p970, int32_t p971, int32_t p972, int32_t p973, int32_t p974, int32_t p975 +, int32_t p976, int32_t p977, int32_t p978, int32_t p979, int32_t p980, int32_t p981, int32_t p982, int32_t p983 +, int32_t p984, int32_t p985, int32_t p986, int32_t p987, int32_t p988, int32_t p989, int32_t p990, int32_t p991 +, int32_t p992, int32_t p993, int32_t p994, int32_t p995, int32_t p996, int32_t p997, int32_t p998, int32_t p999 +) +{ + int32_t x; + x = p0 + p1 + p2 + p3 + p4 + p5 + p6 + p7 + + p8 + p9 + p10 + p11 + p12 + p13 + p14 + p15 + + p16 + p17 + p18 + p19 + p20 + p21 + p22 + p23 + + p24 + p25 + p26 + p27 + p28 + p29 + p30 + p31 + + p32 + p33 + p34 + p35 + p36 + p37 + p38 + p39 + + p40 + p41 + p42 + p43 + p44 + p45 + p46 + p47 + + p48 + p49 + p50 + p51 + p52 + p53 + p54 + p55 + + p56 + p57 + p58 + p59 + p60 + p61 + p62 + p63 + + p64 + p65 + p66 + p67 + p68 + p69 + p70 + p71 + + p72 + p73 + p74 + p75 + p76 + p77 + p78 + p79 + + p80 + p81 + p82 + p83 + p84 + p85 + p86 + p87 + + p88 + p89 + p90 + p91 + p92 + p93 + p94 + p95 + + p96 + p97 + p98 + p99 + p100 + p101 + p102 + p103 + + p104 + p105 + p106 + p107 + p108 + p109 + p110 + p111 + + p112 + p113 + p114 + p115 + p116 + p117 + p118 + p119 + + p120 + p121 + p122 + p123 + p124 + p125 + p126 + p127 + + p128 + p129 + p130 + p131 + p132 + p133 + p134 + p135 + + p136 + p137 + p138 + p139 + p140 + p141 + p142 + p143 + + p144 + p145 + p146 + p147 + p148 + p149 + p150 + p151 + + p152 + p153 + p154 + p155 + p156 + p157 + p158 + p159 + + p160 + p161 + p162 + p163 + p164 + p165 + p166 + p167 + + p168 + p169 + p170 + p171 + p172 + p173 + p174 + p175 + + p176 + p177 + p178 + p179 + p180 + p181 + p182 + p183 + + p184 + p185 + p186 + p187 + p188 + p189 + p190 + p191 + + p192 + p193 + p194 + p195 + p196 + p197 + p198 + p199 + + p200 + p201 + p202 + p203 + p204 + p205 + p206 + p207 + + p208 + p209 + p210 + p211 + p212 + p213 + p214 + p215 + + p216 + p217 + p218 + p219 + p220 + p221 + p222 + p223 + + p224 + p225 + p226 + p227 + p228 + p229 + p230 + p231 + + p232 + p233 + p234 + p235 + p236 + p237 + p238 + p239 + + p240 + p241 + p242 + p243 + p244 + p245 + p246 + p247 + + p248 + p249 + p250 + p251 + p252 + p253 + p254 + p255 + + p256 + p257 + p258 + p259 + p260 + p261 + p262 + p263 + + p264 + p265 + p266 + p267 + p268 + p269 + p270 + p271 + + p272 + p273 + p274 + p275 + p276 + p277 + p278 + p279 + + p280 + p281 + p282 + p283 + p284 + p285 + p286 + p287 + + p288 + p289 + p290 + p291 + p292 + p293 + p294 + p295 + + p296 + p297 + p298 + p299 + p300 + p301 + p302 + p303 + + p304 + p305 + p306 + p307 + p308 + p309 + p310 + p311 + + p312 + p313 + p314 + p315 + p316 + p317 + p318 + p319 + + p320 + p321 + p322 + p323 + p324 + p325 + p326 + p327 + + p328 + p329 + p330 + p331 + p332 + p333 + p334 + p335 + + p336 + p337 + p338 + p339 + p340 + p341 + p342 + p343 + + p344 + p345 + p346 + p347 + p348 + p349 + p350 + p351 + + p352 + p353 + p354 + p355 + p356 + p357 + p358 + p359 + + p360 + p361 + p362 + p363 + p364 + p365 + p366 + p367 + + p368 + p369 + p370 + p371 + p372 + p373 + p374 + p375 + + p376 + p377 + p378 + p379 + p380 + p381 + p382 + p383 + + p384 + p385 + p386 + p387 + p388 + p389 + p390 + p391 + + p392 + p393 + p394 + p395 + p396 + p397 + p398 + p399 + + p400 + p401 + p402 + p403 + p404 + p405 + p406 + p407 + + p408 + p409 + p410 + p411 + p412 + p413 + p414 + p415 + + p416 + p417 + p418 + p419 + p420 + p421 + p422 + p423 + + p424 + p425 + p426 + p427 + p428 + p429 + p430 + p431 + + p432 + p433 + p434 + p435 + p436 + p437 + p438 + p439 + + p440 + p441 + p442 + p443 + p444 + p445 + p446 + p447 + + p448 + p449 + p450 + p451 + p452 + p453 + p454 + p455 + + p456 + p457 + p458 + p459 + p460 + p461 + p462 + p463 + + p464 + p465 + p466 + p467 + p468 + p469 + p470 + p471 + + p472 + p473 + p474 + p475 + p476 + p477 + p478 + p479 + + p480 + p481 + p482 + p483 + p484 + p485 + p486 + p487 + + p488 + p489 + p490 + p491 + p492 + p493 + p494 + p495 + + p496 + p497 + p498 + p499 + p500 + p501 + p502 + p503 + + p504 + p505 + p506 + p507 + p508 + p509 + p510 + p511 + + p512 + p513 + p514 + p515 + p516 + p517 + p518 + p519 + + p520 + p521 + p522 + p523 + p524 + p525 + p526 + p527 + + p528 + p529 + p530 + p531 + p532 + p533 + p534 + p535 + + p536 + p537 + p538 + p539 + p540 + p541 + p542 + p543 + + p544 + p545 + p546 + p547 + p548 + p549 + p550 + p551 + + p552 + p553 + p554 + p555 + p556 + p557 + p558 + p559 + + p560 + p561 + p562 + p563 + p564 + p565 + p566 + p567 + + p568 + p569 + p570 + p571 + p572 + p573 + p574 + p575 + + p576 + p577 + p578 + p579 + p580 + p581 + p582 + p583 + + p584 + p585 + p586 + p587 + p588 + p589 + p590 + p591 + + p592 + p593 + p594 + p595 + p596 + p597 + p598 + p599 + + p600 + p601 + p602 + p603 + p604 + p605 + p606 + p607 + + p608 + p609 + p610 + p611 + p612 + p613 + p614 + p615 + + p616 + p617 + p618 + p619 + p620 + p621 + p622 + p623 + + p624 + p625 + p626 + p627 + p628 + p629 + p630 + p631 + + p632 + p633 + p634 + p635 + p636 + p637 + p638 + p639 + + p640 + p641 + p642 + p643 + p644 + p645 + p646 + p647 + + p648 + p649 + p650 + p651 + p652 + p653 + p654 + p655 + + p656 + p657 + p658 + p659 + p660 + p661 + p662 + p663 + + p664 + p665 + p666 + p667 + p668 + p669 + p670 + p671 + + p672 + p673 + p674 + p675 + p676 + p677 + p678 + p679 + + p680 + p681 + p682 + p683 + p684 + p685 + p686 + p687 + + p688 + p689 + p690 + p691 + p692 + p693 + p694 + p695 + + p696 + p697 + p698 + p699 + p700 + p701 + p702 + p703 + + p704 + p705 + p706 + p707 + p708 + p709 + p710 + p711 + + p712 + p713 + p714 + p715 + p716 + p717 + p718 + p719 + + p720 + p721 + p722 + p723 + p724 + p725 + p726 + p727 + + p728 + p729 + p730 + p731 + p732 + p733 + p734 + p735 + + p736 + p737 + p738 + p739 + p740 + p741 + p742 + p743 + + p744 + p745 + p746 + p747 + p748 + p749 + p750 + p751 + + p752 + p753 + p754 + p755 + p756 + p757 + p758 + p759 + + p760 + p761 + p762 + p763 + p764 + p765 + p766 + p767 + + p768 + p769 + p770 + p771 + p772 + p773 + p774 + p775 + + p776 + p777 + p778 + p779 + p780 + p781 + p782 + p783 + + p784 + p785 + p786 + p787 + p788 + p789 + p790 + p791 + + p792 + p793 + p794 + p795 + p796 + p797 + p798 + p799 + + p800 + p801 + p802 + p803 + p804 + p805 + p806 + p807 + + p808 + p809 + p810 + p811 + p812 + p813 + p814 + p815 + + p816 + p817 + p818 + p819 + p820 + p821 + p822 + p823 + + p824 + p825 + p826 + p827 + p828 + p829 + p830 + p831 + + p832 + p833 + p834 + p835 + p836 + p837 + p838 + p839 + + p840 + p841 + p842 + p843 + p844 + p845 + p846 + p847 + + p848 + p849 + p850 + p851 + p852 + p853 + p854 + p855 + + p856 + p857 + p858 + p859 + p860 + p861 + p862 + p863 + + p864 + p865 + p866 + p867 + p868 + p869 + p870 + p871 + + p872 + p873 + p874 + p875 + p876 + p877 + p878 + p879 + + p880 + p881 + p882 + p883 + p884 + p885 + p886 + p887 + + p888 + p889 + p890 + p891 + p892 + p893 + p894 + p895 + + p896 + p897 + p898 + p899 + p900 + p901 + p902 + p903 + + p904 + p905 + p906 + p907 + p908 + p909 + p910 + p911 + + p912 + p913 + p914 + p915 + p916 + p917 + p918 + p919 + + p920 + p921 + p922 + p923 + p924 + p925 + p926 + p927 + + p928 + p929 + p930 + p931 + p932 + p933 + p934 + p935 + + p936 + p937 + p938 + p939 + p940 + p941 + p942 + p943 + + p944 + p945 + p946 + p947 + p948 + p949 + p950 + p951 + + p952 + p953 + p954 + p955 + p956 + p957 + p958 + p959 + + p960 + p961 + p962 + p963 + p964 + p965 + p966 + p967 + + p968 + p969 + p970 + p971 + p972 + p973 + p974 + p975 + + p976 + p977 + p978 + p979 + p980 + p981 + p982 + p983 + + p984 + p985 + p986 + p987 + p988 + p989 + p990 + p991 + + p992 + p993 + p994 + p995 + p996 + p997 + p998 + p999; + return x; +} + +// clang-format on diff --git a/src/test/app/wasm_fixtures/wat/functions_5k.wat b/src/test/app/wasm_fixtures/wat/functions_5k.wat new file mode 100644 index 0000000000..819472726d --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/functions_5k.wat @@ -0,0 +1,45002 @@ +(module + (func $test0000 (export "test0000") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0001 (export "test0001") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0002 (export "test0002") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0003 (export "test0003") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0004 (export "test0004") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0005 (export "test0005") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0006 (export "test0006") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0007 (export "test0007") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0008 (export "test0008") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0009 (export "test0009") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0010 (export "test0010") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0011 (export "test0011") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0012 (export "test0012") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0013 (export "test0013") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0014 (export "test0014") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0015 (export "test0015") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0016 (export "test0016") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0017 (export "test0017") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0018 (export "test0018") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0019 (export "test0019") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0020 (export "test0020") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0021 (export "test0021") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0022 (export "test0022") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0023 (export "test0023") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0024 (export "test0024") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0025 (export "test0025") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0026 (export "test0026") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0027 (export "test0027") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0028 (export "test0028") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0029 (export "test0029") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0030 (export "test0030") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0031 (export "test0031") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0032 (export "test0032") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0033 (export "test0033") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0034 (export "test0034") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0035 (export "test0035") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0036 (export "test0036") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0037 (export "test0037") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0038 (export "test0038") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0039 (export "test0039") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0040 (export "test0040") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0041 (export "test0041") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0042 (export "test0042") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0043 (export "test0043") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0044 (export "test0044") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0045 (export "test0045") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0046 (export "test0046") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0047 (export "test0047") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0048 (export "test0048") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0049 (export "test0049") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0050 (export "test0050") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0051 (export "test0051") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0052 (export "test0052") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0053 (export "test0053") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0054 (export "test0054") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0055 (export "test0055") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0056 (export "test0056") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0057 (export "test0057") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0058 (export "test0058") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0059 (export "test0059") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0060 (export "test0060") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0061 (export "test0061") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0062 (export "test0062") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0063 (export "test0063") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0064 (export "test0064") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0065 (export "test0065") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0066 (export "test0066") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0067 (export "test0067") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0068 (export "test0068") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0069 (export "test0069") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0070 (export "test0070") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0071 (export "test0071") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0072 (export "test0072") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0073 (export "test0073") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0074 (export "test0074") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0075 (export "test0075") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0076 (export "test0076") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0077 (export "test0077") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0078 (export "test0078") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0079 (export "test0079") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0080 (export "test0080") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0081 (export "test0081") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0082 (export "test0082") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0083 (export "test0083") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0084 (export "test0084") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0085 (export "test0085") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0086 (export "test0086") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0087 (export "test0087") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0088 (export "test0088") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0089 (export "test0089") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0090 (export "test0090") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0091 (export "test0091") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0092 (export "test0092") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0093 (export "test0093") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0094 (export "test0094") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0095 (export "test0095") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0096 (export "test0096") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0097 (export "test0097") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0098 (export "test0098") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0099 (export "test0099") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0100 (export "test0100") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0101 (export "test0101") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0102 (export "test0102") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0103 (export "test0103") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0104 (export "test0104") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0105 (export "test0105") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0106 (export "test0106") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0107 (export "test0107") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0108 (export "test0108") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0109 (export "test0109") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0110 (export "test0110") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0111 (export "test0111") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0112 (export "test0112") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0113 (export "test0113") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0114 (export "test0114") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0115 (export "test0115") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0116 (export "test0116") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0117 (export "test0117") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0118 (export "test0118") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0119 (export "test0119") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0120 (export "test0120") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0121 (export "test0121") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0122 (export "test0122") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0123 (export "test0123") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0124 (export "test0124") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0125 (export "test0125") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0126 (export "test0126") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0127 (export "test0127") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0128 (export "test0128") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0129 (export "test0129") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0130 (export "test0130") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0131 (export "test0131") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0132 (export "test0132") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0133 (export "test0133") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0134 (export "test0134") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0135 (export "test0135") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0136 (export "test0136") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0137 (export "test0137") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0138 (export "test0138") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0139 (export "test0139") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0140 (export "test0140") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0141 (export "test0141") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0142 (export "test0142") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0143 (export "test0143") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0144 (export "test0144") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0145 (export "test0145") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0146 (export "test0146") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0147 (export "test0147") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0148 (export "test0148") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0149 (export "test0149") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0150 (export "test0150") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0151 (export "test0151") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0152 (export "test0152") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0153 (export "test0153") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0154 (export "test0154") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0155 (export "test0155") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0156 (export "test0156") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0157 (export "test0157") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0158 (export "test0158") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0159 (export "test0159") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0160 (export "test0160") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0161 (export "test0161") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0162 (export "test0162") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0163 (export "test0163") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0164 (export "test0164") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0165 (export "test0165") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0166 (export "test0166") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0167 (export "test0167") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0168 (export "test0168") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0169 (export "test0169") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0170 (export "test0170") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0171 (export "test0171") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0172 (export "test0172") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0173 (export "test0173") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0174 (export "test0174") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0175 (export "test0175") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0176 (export "test0176") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0177 (export "test0177") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0178 (export "test0178") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0179 (export "test0179") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0180 (export "test0180") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0181 (export "test0181") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0182 (export "test0182") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0183 (export "test0183") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0184 (export "test0184") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0185 (export "test0185") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0186 (export "test0186") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0187 (export "test0187") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0188 (export "test0188") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0189 (export "test0189") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0190 (export "test0190") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0191 (export "test0191") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0192 (export "test0192") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0193 (export "test0193") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0194 (export "test0194") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0195 (export "test0195") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0196 (export "test0196") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0197 (export "test0197") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0198 (export "test0198") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0199 (export "test0199") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0200 (export "test0200") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0201 (export "test0201") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0202 (export "test0202") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0203 (export "test0203") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0204 (export "test0204") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0205 (export "test0205") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0206 (export "test0206") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0207 (export "test0207") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0208 (export "test0208") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0209 (export "test0209") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0210 (export "test0210") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0211 (export "test0211") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0212 (export "test0212") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0213 (export "test0213") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0214 (export "test0214") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0215 (export "test0215") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0216 (export "test0216") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0217 (export "test0217") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0218 (export "test0218") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0219 (export "test0219") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0220 (export "test0220") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0221 (export "test0221") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0222 (export "test0222") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0223 (export "test0223") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0224 (export "test0224") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0225 (export "test0225") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0226 (export "test0226") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0227 (export "test0227") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0228 (export "test0228") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0229 (export "test0229") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0230 (export "test0230") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0231 (export "test0231") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0232 (export "test0232") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0233 (export "test0233") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0234 (export "test0234") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0235 (export "test0235") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0236 (export "test0236") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0237 (export "test0237") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0238 (export "test0238") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0239 (export "test0239") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0240 (export "test0240") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0241 (export "test0241") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0242 (export "test0242") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0243 (export "test0243") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0244 (export "test0244") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0245 (export "test0245") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0246 (export "test0246") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0247 (export "test0247") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0248 (export "test0248") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0249 (export "test0249") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0250 (export "test0250") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0251 (export "test0251") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0252 (export "test0252") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0253 (export "test0253") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0254 (export "test0254") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0255 (export "test0255") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0256 (export "test0256") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0257 (export "test0257") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0258 (export "test0258") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0259 (export "test0259") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0260 (export "test0260") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0261 (export "test0261") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0262 (export "test0262") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0263 (export "test0263") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0264 (export "test0264") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0265 (export "test0265") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0266 (export "test0266") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0267 (export "test0267") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0268 (export "test0268") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0269 (export "test0269") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0270 (export "test0270") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0271 (export "test0271") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0272 (export "test0272") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0273 (export "test0273") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0274 (export "test0274") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0275 (export "test0275") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0276 (export "test0276") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0277 (export "test0277") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0278 (export "test0278") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0279 (export "test0279") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0280 (export "test0280") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0281 (export "test0281") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0282 (export "test0282") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0283 (export "test0283") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0284 (export "test0284") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0285 (export "test0285") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0286 (export "test0286") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0287 (export "test0287") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0288 (export "test0288") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0289 (export "test0289") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0290 (export "test0290") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0291 (export "test0291") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0292 (export "test0292") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0293 (export "test0293") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0294 (export "test0294") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0295 (export "test0295") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0296 (export "test0296") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0297 (export "test0297") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0298 (export "test0298") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0299 (export "test0299") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0300 (export "test0300") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0301 (export "test0301") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0302 (export "test0302") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0303 (export "test0303") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0304 (export "test0304") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0305 (export "test0305") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0306 (export "test0306") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0307 (export "test0307") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0308 (export "test0308") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0309 (export "test0309") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0310 (export "test0310") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0311 (export "test0311") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0312 (export "test0312") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0313 (export "test0313") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0314 (export "test0314") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0315 (export "test0315") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0316 (export "test0316") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0317 (export "test0317") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0318 (export "test0318") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0319 (export "test0319") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0320 (export "test0320") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0321 (export "test0321") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0322 (export "test0322") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0323 (export "test0323") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0324 (export "test0324") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0325 (export "test0325") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0326 (export "test0326") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0327 (export "test0327") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0328 (export "test0328") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0329 (export "test0329") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0330 (export "test0330") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0331 (export "test0331") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0332 (export "test0332") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0333 (export "test0333") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0334 (export "test0334") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0335 (export "test0335") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0336 (export "test0336") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0337 (export "test0337") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0338 (export "test0338") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0339 (export "test0339") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0340 (export "test0340") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0341 (export "test0341") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0342 (export "test0342") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0343 (export "test0343") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0344 (export "test0344") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0345 (export "test0345") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0346 (export "test0346") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0347 (export "test0347") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0348 (export "test0348") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0349 (export "test0349") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0350 (export "test0350") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0351 (export "test0351") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0352 (export "test0352") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0353 (export "test0353") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0354 (export "test0354") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0355 (export "test0355") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0356 (export "test0356") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0357 (export "test0357") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0358 (export "test0358") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0359 (export "test0359") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0360 (export "test0360") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0361 (export "test0361") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0362 (export "test0362") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0363 (export "test0363") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0364 (export "test0364") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0365 (export "test0365") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0366 (export "test0366") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0367 (export "test0367") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0368 (export "test0368") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0369 (export "test0369") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0370 (export "test0370") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0371 (export "test0371") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0372 (export "test0372") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0373 (export "test0373") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0374 (export "test0374") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0375 (export "test0375") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0376 (export "test0376") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0377 (export "test0377") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0378 (export "test0378") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0379 (export "test0379") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0380 (export "test0380") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0381 (export "test0381") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0382 (export "test0382") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0383 (export "test0383") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0384 (export "test0384") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0385 (export "test0385") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0386 (export "test0386") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0387 (export "test0387") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0388 (export "test0388") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0389 (export "test0389") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0390 (export "test0390") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0391 (export "test0391") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0392 (export "test0392") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0393 (export "test0393") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0394 (export "test0394") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0395 (export "test0395") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0396 (export "test0396") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0397 (export "test0397") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0398 (export "test0398") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0399 (export "test0399") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0400 (export "test0400") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0401 (export "test0401") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0402 (export "test0402") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0403 (export "test0403") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0404 (export "test0404") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0405 (export "test0405") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0406 (export "test0406") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0407 (export "test0407") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0408 (export "test0408") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0409 (export "test0409") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0410 (export "test0410") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0411 (export "test0411") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0412 (export "test0412") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0413 (export "test0413") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0414 (export "test0414") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0415 (export "test0415") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0416 (export "test0416") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0417 (export "test0417") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0418 (export "test0418") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0419 (export "test0419") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0420 (export "test0420") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0421 (export "test0421") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0422 (export "test0422") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0423 (export "test0423") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0424 (export "test0424") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0425 (export "test0425") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0426 (export "test0426") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0427 (export "test0427") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0428 (export "test0428") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0429 (export "test0429") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0430 (export "test0430") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0431 (export "test0431") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0432 (export "test0432") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0433 (export "test0433") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0434 (export "test0434") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0435 (export "test0435") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0436 (export "test0436") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0437 (export "test0437") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0438 (export "test0438") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0439 (export "test0439") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0440 (export "test0440") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0441 (export "test0441") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0442 (export "test0442") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0443 (export "test0443") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0444 (export "test0444") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0445 (export "test0445") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0446 (export "test0446") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0447 (export "test0447") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0448 (export "test0448") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0449 (export "test0449") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0450 (export "test0450") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0451 (export "test0451") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0452 (export "test0452") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0453 (export "test0453") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0454 (export "test0454") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0455 (export "test0455") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0456 (export "test0456") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0457 (export "test0457") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0458 (export "test0458") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0459 (export "test0459") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0460 (export "test0460") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0461 (export "test0461") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0462 (export "test0462") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0463 (export "test0463") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0464 (export "test0464") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0465 (export "test0465") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0466 (export "test0466") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0467 (export "test0467") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0468 (export "test0468") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0469 (export "test0469") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0470 (export "test0470") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0471 (export "test0471") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0472 (export "test0472") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0473 (export "test0473") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0474 (export "test0474") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0475 (export "test0475") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0476 (export "test0476") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0477 (export "test0477") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0478 (export "test0478") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0479 (export "test0479") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0480 (export "test0480") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0481 (export "test0481") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0482 (export "test0482") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0483 (export "test0483") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0484 (export "test0484") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0485 (export "test0485") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0486 (export "test0486") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0487 (export "test0487") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0488 (export "test0488") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0489 (export "test0489") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0490 (export "test0490") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0491 (export "test0491") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0492 (export "test0492") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0493 (export "test0493") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0494 (export "test0494") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0495 (export "test0495") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0496 (export "test0496") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0497 (export "test0497") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0498 (export "test0498") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0499 (export "test0499") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0500 (export "test0500") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0501 (export "test0501") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0502 (export "test0502") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0503 (export "test0503") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0504 (export "test0504") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0505 (export "test0505") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0506 (export "test0506") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0507 (export "test0507") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0508 (export "test0508") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0509 (export "test0509") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0510 (export "test0510") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0511 (export "test0511") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0512 (export "test0512") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0513 (export "test0513") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0514 (export "test0514") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0515 (export "test0515") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0516 (export "test0516") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0517 (export "test0517") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0518 (export "test0518") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0519 (export "test0519") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0520 (export "test0520") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0521 (export "test0521") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0522 (export "test0522") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0523 (export "test0523") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0524 (export "test0524") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0525 (export "test0525") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0526 (export "test0526") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0527 (export "test0527") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0528 (export "test0528") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0529 (export "test0529") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0530 (export "test0530") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0531 (export "test0531") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0532 (export "test0532") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0533 (export "test0533") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0534 (export "test0534") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0535 (export "test0535") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0536 (export "test0536") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0537 (export "test0537") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0538 (export "test0538") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0539 (export "test0539") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0540 (export "test0540") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0541 (export "test0541") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0542 (export "test0542") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0543 (export "test0543") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0544 (export "test0544") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0545 (export "test0545") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0546 (export "test0546") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0547 (export "test0547") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0548 (export "test0548") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0549 (export "test0549") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0550 (export "test0550") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0551 (export "test0551") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0552 (export "test0552") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0553 (export "test0553") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0554 (export "test0554") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0555 (export "test0555") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0556 (export "test0556") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0557 (export "test0557") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0558 (export "test0558") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0559 (export "test0559") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0560 (export "test0560") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0561 (export "test0561") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0562 (export "test0562") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0563 (export "test0563") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0564 (export "test0564") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0565 (export "test0565") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0566 (export "test0566") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0567 (export "test0567") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0568 (export "test0568") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0569 (export "test0569") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0570 (export "test0570") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0571 (export "test0571") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0572 (export "test0572") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0573 (export "test0573") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0574 (export "test0574") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0575 (export "test0575") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0576 (export "test0576") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0577 (export "test0577") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0578 (export "test0578") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0579 (export "test0579") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0580 (export "test0580") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0581 (export "test0581") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0582 (export "test0582") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0583 (export "test0583") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0584 (export "test0584") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0585 (export "test0585") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0586 (export "test0586") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0587 (export "test0587") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0588 (export "test0588") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0589 (export "test0589") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0590 (export "test0590") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0591 (export "test0591") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0592 (export "test0592") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0593 (export "test0593") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0594 (export "test0594") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0595 (export "test0595") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0596 (export "test0596") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0597 (export "test0597") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0598 (export "test0598") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0599 (export "test0599") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0600 (export "test0600") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0601 (export "test0601") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0602 (export "test0602") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0603 (export "test0603") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0604 (export "test0604") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0605 (export "test0605") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0606 (export "test0606") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0607 (export "test0607") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0608 (export "test0608") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0609 (export "test0609") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0610 (export "test0610") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0611 (export "test0611") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0612 (export "test0612") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0613 (export "test0613") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0614 (export "test0614") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0615 (export "test0615") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0616 (export "test0616") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0617 (export "test0617") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0618 (export "test0618") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0619 (export "test0619") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0620 (export "test0620") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0621 (export "test0621") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0622 (export "test0622") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0623 (export "test0623") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0624 (export "test0624") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0625 (export "test0625") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0626 (export "test0626") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0627 (export "test0627") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0628 (export "test0628") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0629 (export "test0629") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0630 (export "test0630") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0631 (export "test0631") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0632 (export "test0632") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0633 (export "test0633") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0634 (export "test0634") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0635 (export "test0635") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0636 (export "test0636") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0637 (export "test0637") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0638 (export "test0638") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0639 (export "test0639") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0640 (export "test0640") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0641 (export "test0641") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0642 (export "test0642") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0643 (export "test0643") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0644 (export "test0644") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0645 (export "test0645") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0646 (export "test0646") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0647 (export "test0647") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0648 (export "test0648") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0649 (export "test0649") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0650 (export "test0650") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0651 (export "test0651") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0652 (export "test0652") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0653 (export "test0653") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0654 (export "test0654") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0655 (export "test0655") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0656 (export "test0656") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0657 (export "test0657") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0658 (export "test0658") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0659 (export "test0659") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0660 (export "test0660") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0661 (export "test0661") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0662 (export "test0662") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0663 (export "test0663") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0664 (export "test0664") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0665 (export "test0665") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0666 (export "test0666") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0667 (export "test0667") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0668 (export "test0668") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0669 (export "test0669") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0670 (export "test0670") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0671 (export "test0671") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0672 (export "test0672") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0673 (export "test0673") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0674 (export "test0674") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0675 (export "test0675") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0676 (export "test0676") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0677 (export "test0677") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0678 (export "test0678") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0679 (export "test0679") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0680 (export "test0680") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0681 (export "test0681") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0682 (export "test0682") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0683 (export "test0683") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0684 (export "test0684") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0685 (export "test0685") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0686 (export "test0686") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0687 (export "test0687") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0688 (export "test0688") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0689 (export "test0689") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0690 (export "test0690") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0691 (export "test0691") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0692 (export "test0692") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0693 (export "test0693") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0694 (export "test0694") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0695 (export "test0695") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0696 (export "test0696") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0697 (export "test0697") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0698 (export "test0698") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0699 (export "test0699") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0700 (export "test0700") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0701 (export "test0701") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0702 (export "test0702") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0703 (export "test0703") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0704 (export "test0704") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0705 (export "test0705") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0706 (export "test0706") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0707 (export "test0707") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0708 (export "test0708") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0709 (export "test0709") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0710 (export "test0710") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0711 (export "test0711") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0712 (export "test0712") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0713 (export "test0713") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0714 (export "test0714") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0715 (export "test0715") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0716 (export "test0716") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0717 (export "test0717") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0718 (export "test0718") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0719 (export "test0719") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0720 (export "test0720") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0721 (export "test0721") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0722 (export "test0722") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0723 (export "test0723") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0724 (export "test0724") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0725 (export "test0725") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0726 (export "test0726") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0727 (export "test0727") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0728 (export "test0728") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0729 (export "test0729") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0730 (export "test0730") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0731 (export "test0731") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0732 (export "test0732") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0733 (export "test0733") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0734 (export "test0734") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0735 (export "test0735") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0736 (export "test0736") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0737 (export "test0737") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0738 (export "test0738") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0739 (export "test0739") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0740 (export "test0740") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0741 (export "test0741") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0742 (export "test0742") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0743 (export "test0743") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0744 (export "test0744") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0745 (export "test0745") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0746 (export "test0746") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0747 (export "test0747") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0748 (export "test0748") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0749 (export "test0749") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0750 (export "test0750") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0751 (export "test0751") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0752 (export "test0752") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0753 (export "test0753") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0754 (export "test0754") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0755 (export "test0755") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0756 (export "test0756") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0757 (export "test0757") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0758 (export "test0758") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0759 (export "test0759") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0760 (export "test0760") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0761 (export "test0761") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0762 (export "test0762") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0763 (export "test0763") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0764 (export "test0764") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0765 (export "test0765") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0766 (export "test0766") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0767 (export "test0767") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0768 (export "test0768") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0769 (export "test0769") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0770 (export "test0770") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0771 (export "test0771") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0772 (export "test0772") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0773 (export "test0773") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0774 (export "test0774") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0775 (export "test0775") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0776 (export "test0776") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0777 (export "test0777") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0778 (export "test0778") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0779 (export "test0779") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0780 (export "test0780") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0781 (export "test0781") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0782 (export "test0782") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0783 (export "test0783") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0784 (export "test0784") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0785 (export "test0785") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0786 (export "test0786") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0787 (export "test0787") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0788 (export "test0788") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0789 (export "test0789") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0790 (export "test0790") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0791 (export "test0791") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0792 (export "test0792") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0793 (export "test0793") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0794 (export "test0794") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0795 (export "test0795") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0796 (export "test0796") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0797 (export "test0797") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0798 (export "test0798") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0799 (export "test0799") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0800 (export "test0800") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0801 (export "test0801") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0802 (export "test0802") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0803 (export "test0803") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0804 (export "test0804") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0805 (export "test0805") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0806 (export "test0806") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0807 (export "test0807") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0808 (export "test0808") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0809 (export "test0809") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0810 (export "test0810") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0811 (export "test0811") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0812 (export "test0812") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0813 (export "test0813") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0814 (export "test0814") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0815 (export "test0815") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0816 (export "test0816") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0817 (export "test0817") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0818 (export "test0818") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0819 (export "test0819") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0820 (export "test0820") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0821 (export "test0821") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0822 (export "test0822") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0823 (export "test0823") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0824 (export "test0824") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0825 (export "test0825") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0826 (export "test0826") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0827 (export "test0827") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0828 (export "test0828") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0829 (export "test0829") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0830 (export "test0830") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0831 (export "test0831") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0832 (export "test0832") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0833 (export "test0833") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0834 (export "test0834") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0835 (export "test0835") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0836 (export "test0836") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0837 (export "test0837") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0838 (export "test0838") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0839 (export "test0839") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0840 (export "test0840") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0841 (export "test0841") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0842 (export "test0842") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0843 (export "test0843") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0844 (export "test0844") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0845 (export "test0845") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0846 (export "test0846") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0847 (export "test0847") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0848 (export "test0848") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0849 (export "test0849") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0850 (export "test0850") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0851 (export "test0851") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0852 (export "test0852") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0853 (export "test0853") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0854 (export "test0854") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0855 (export "test0855") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0856 (export "test0856") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0857 (export "test0857") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0858 (export "test0858") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0859 (export "test0859") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0860 (export "test0860") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0861 (export "test0861") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0862 (export "test0862") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0863 (export "test0863") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0864 (export "test0864") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0865 (export "test0865") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0866 (export "test0866") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0867 (export "test0867") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0868 (export "test0868") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0869 (export "test0869") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0870 (export "test0870") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0871 (export "test0871") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0872 (export "test0872") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0873 (export "test0873") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0874 (export "test0874") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0875 (export "test0875") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0876 (export "test0876") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0877 (export "test0877") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0878 (export "test0878") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0879 (export "test0879") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0880 (export "test0880") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0881 (export "test0881") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0882 (export "test0882") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0883 (export "test0883") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0884 (export "test0884") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0885 (export "test0885") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0886 (export "test0886") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0887 (export "test0887") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0888 (export "test0888") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0889 (export "test0889") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0890 (export "test0890") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0891 (export "test0891") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0892 (export "test0892") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0893 (export "test0893") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0894 (export "test0894") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0895 (export "test0895") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0896 (export "test0896") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0897 (export "test0897") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0898 (export "test0898") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0899 (export "test0899") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0900 (export "test0900") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0901 (export "test0901") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0902 (export "test0902") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0903 (export "test0903") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0904 (export "test0904") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0905 (export "test0905") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0906 (export "test0906") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0907 (export "test0907") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0908 (export "test0908") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0909 (export "test0909") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0910 (export "test0910") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0911 (export "test0911") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0912 (export "test0912") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0913 (export "test0913") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0914 (export "test0914") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0915 (export "test0915") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0916 (export "test0916") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0917 (export "test0917") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0918 (export "test0918") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0919 (export "test0919") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0920 (export "test0920") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0921 (export "test0921") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0922 (export "test0922") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0923 (export "test0923") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0924 (export "test0924") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0925 (export "test0925") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0926 (export "test0926") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0927 (export "test0927") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0928 (export "test0928") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0929 (export "test0929") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0930 (export "test0930") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0931 (export "test0931") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0932 (export "test0932") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0933 (export "test0933") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0934 (export "test0934") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0935 (export "test0935") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0936 (export "test0936") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0937 (export "test0937") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0938 (export "test0938") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0939 (export "test0939") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0940 (export "test0940") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0941 (export "test0941") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0942 (export "test0942") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0943 (export "test0943") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0944 (export "test0944") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0945 (export "test0945") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0946 (export "test0946") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0947 (export "test0947") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0948 (export "test0948") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0949 (export "test0949") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0950 (export "test0950") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0951 (export "test0951") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0952 (export "test0952") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0953 (export "test0953") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0954 (export "test0954") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0955 (export "test0955") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0956 (export "test0956") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0957 (export "test0957") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0958 (export "test0958") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0959 (export "test0959") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0960 (export "test0960") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0961 (export "test0961") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0962 (export "test0962") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0963 (export "test0963") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0964 (export "test0964") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0965 (export "test0965") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0966 (export "test0966") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0967 (export "test0967") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0968 (export "test0968") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0969 (export "test0969") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0970 (export "test0970") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0971 (export "test0971") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0972 (export "test0972") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0973 (export "test0973") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0974 (export "test0974") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0975 (export "test0975") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0976 (export "test0976") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0977 (export "test0977") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0978 (export "test0978") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0979 (export "test0979") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0980 (export "test0980") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0981 (export "test0981") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0982 (export "test0982") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0983 (export "test0983") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0984 (export "test0984") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0985 (export "test0985") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0986 (export "test0986") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0987 (export "test0987") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0988 (export "test0988") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0989 (export "test0989") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0990 (export "test0990") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0991 (export "test0991") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0992 (export "test0992") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0993 (export "test0993") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0994 (export "test0994") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0995 (export "test0995") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0996 (export "test0996") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0997 (export "test0997") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0998 (export "test0998") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test0999 (export "test0999") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1000 (export "test1000") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1001 (export "test1001") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1002 (export "test1002") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1003 (export "test1003") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1004 (export "test1004") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1005 (export "test1005") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1006 (export "test1006") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1007 (export "test1007") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1008 (export "test1008") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1009 (export "test1009") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1010 (export "test1010") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1011 (export "test1011") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1012 (export "test1012") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1013 (export "test1013") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1014 (export "test1014") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1015 (export "test1015") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1016 (export "test1016") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1017 (export "test1017") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1018 (export "test1018") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1019 (export "test1019") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1020 (export "test1020") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1021 (export "test1021") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1022 (export "test1022") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1023 (export "test1023") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1024 (export "test1024") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1025 (export "test1025") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1026 (export "test1026") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1027 (export "test1027") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1028 (export "test1028") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1029 (export "test1029") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1030 (export "test1030") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1031 (export "test1031") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1032 (export "test1032") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1033 (export "test1033") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1034 (export "test1034") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1035 (export "test1035") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1036 (export "test1036") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1037 (export "test1037") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1038 (export "test1038") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1039 (export "test1039") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1040 (export "test1040") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1041 (export "test1041") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1042 (export "test1042") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1043 (export "test1043") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1044 (export "test1044") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1045 (export "test1045") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1046 (export "test1046") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1047 (export "test1047") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1048 (export "test1048") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1049 (export "test1049") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1050 (export "test1050") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1051 (export "test1051") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1052 (export "test1052") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1053 (export "test1053") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1054 (export "test1054") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1055 (export "test1055") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1056 (export "test1056") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1057 (export "test1057") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1058 (export "test1058") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1059 (export "test1059") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1060 (export "test1060") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1061 (export "test1061") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1062 (export "test1062") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1063 (export "test1063") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1064 (export "test1064") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1065 (export "test1065") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1066 (export "test1066") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1067 (export "test1067") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1068 (export "test1068") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1069 (export "test1069") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1070 (export "test1070") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1071 (export "test1071") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1072 (export "test1072") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1073 (export "test1073") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1074 (export "test1074") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1075 (export "test1075") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1076 (export "test1076") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1077 (export "test1077") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1078 (export "test1078") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1079 (export "test1079") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1080 (export "test1080") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1081 (export "test1081") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1082 (export "test1082") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1083 (export "test1083") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1084 (export "test1084") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1085 (export "test1085") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1086 (export "test1086") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1087 (export "test1087") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1088 (export "test1088") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1089 (export "test1089") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1090 (export "test1090") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1091 (export "test1091") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1092 (export "test1092") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1093 (export "test1093") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1094 (export "test1094") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1095 (export "test1095") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1096 (export "test1096") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1097 (export "test1097") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1098 (export "test1098") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1099 (export "test1099") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1100 (export "test1100") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1101 (export "test1101") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1102 (export "test1102") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1103 (export "test1103") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1104 (export "test1104") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1105 (export "test1105") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1106 (export "test1106") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1107 (export "test1107") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1108 (export "test1108") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1109 (export "test1109") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1110 (export "test1110") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1111 (export "test1111") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1112 (export "test1112") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1113 (export "test1113") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1114 (export "test1114") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1115 (export "test1115") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1116 (export "test1116") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1117 (export "test1117") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1118 (export "test1118") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1119 (export "test1119") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1120 (export "test1120") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1121 (export "test1121") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1122 (export "test1122") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1123 (export "test1123") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1124 (export "test1124") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1125 (export "test1125") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1126 (export "test1126") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1127 (export "test1127") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1128 (export "test1128") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1129 (export "test1129") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1130 (export "test1130") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1131 (export "test1131") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1132 (export "test1132") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1133 (export "test1133") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1134 (export "test1134") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1135 (export "test1135") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1136 (export "test1136") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1137 (export "test1137") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1138 (export "test1138") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1139 (export "test1139") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1140 (export "test1140") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1141 (export "test1141") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1142 (export "test1142") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1143 (export "test1143") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1144 (export "test1144") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1145 (export "test1145") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1146 (export "test1146") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1147 (export "test1147") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1148 (export "test1148") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1149 (export "test1149") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1150 (export "test1150") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1151 (export "test1151") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1152 (export "test1152") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1153 (export "test1153") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1154 (export "test1154") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1155 (export "test1155") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1156 (export "test1156") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1157 (export "test1157") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1158 (export "test1158") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1159 (export "test1159") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1160 (export "test1160") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1161 (export "test1161") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1162 (export "test1162") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1163 (export "test1163") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1164 (export "test1164") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1165 (export "test1165") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1166 (export "test1166") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1167 (export "test1167") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1168 (export "test1168") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1169 (export "test1169") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1170 (export "test1170") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1171 (export "test1171") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1172 (export "test1172") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1173 (export "test1173") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1174 (export "test1174") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1175 (export "test1175") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1176 (export "test1176") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1177 (export "test1177") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1178 (export "test1178") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1179 (export "test1179") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1180 (export "test1180") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1181 (export "test1181") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1182 (export "test1182") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1183 (export "test1183") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1184 (export "test1184") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1185 (export "test1185") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1186 (export "test1186") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1187 (export "test1187") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1188 (export "test1188") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1189 (export "test1189") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1190 (export "test1190") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1191 (export "test1191") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1192 (export "test1192") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1193 (export "test1193") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1194 (export "test1194") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1195 (export "test1195") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1196 (export "test1196") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1197 (export "test1197") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1198 (export "test1198") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1199 (export "test1199") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1200 (export "test1200") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1201 (export "test1201") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1202 (export "test1202") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1203 (export "test1203") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1204 (export "test1204") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1205 (export "test1205") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1206 (export "test1206") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1207 (export "test1207") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1208 (export "test1208") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1209 (export "test1209") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1210 (export "test1210") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1211 (export "test1211") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1212 (export "test1212") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1213 (export "test1213") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1214 (export "test1214") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1215 (export "test1215") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1216 (export "test1216") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1217 (export "test1217") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1218 (export "test1218") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1219 (export "test1219") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1220 (export "test1220") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1221 (export "test1221") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1222 (export "test1222") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1223 (export "test1223") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1224 (export "test1224") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1225 (export "test1225") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1226 (export "test1226") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1227 (export "test1227") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1228 (export "test1228") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1229 (export "test1229") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1230 (export "test1230") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1231 (export "test1231") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1232 (export "test1232") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1233 (export "test1233") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1234 (export "test1234") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1235 (export "test1235") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1236 (export "test1236") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1237 (export "test1237") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1238 (export "test1238") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1239 (export "test1239") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1240 (export "test1240") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1241 (export "test1241") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1242 (export "test1242") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1243 (export "test1243") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1244 (export "test1244") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1245 (export "test1245") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1246 (export "test1246") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1247 (export "test1247") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1248 (export "test1248") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1249 (export "test1249") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1250 (export "test1250") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1251 (export "test1251") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1252 (export "test1252") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1253 (export "test1253") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1254 (export "test1254") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1255 (export "test1255") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1256 (export "test1256") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1257 (export "test1257") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1258 (export "test1258") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1259 (export "test1259") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1260 (export "test1260") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1261 (export "test1261") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1262 (export "test1262") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1263 (export "test1263") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1264 (export "test1264") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1265 (export "test1265") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1266 (export "test1266") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1267 (export "test1267") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1268 (export "test1268") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1269 (export "test1269") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1270 (export "test1270") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1271 (export "test1271") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1272 (export "test1272") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1273 (export "test1273") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1274 (export "test1274") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1275 (export "test1275") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1276 (export "test1276") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1277 (export "test1277") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1278 (export "test1278") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1279 (export "test1279") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1280 (export "test1280") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1281 (export "test1281") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1282 (export "test1282") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1283 (export "test1283") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1284 (export "test1284") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1285 (export "test1285") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1286 (export "test1286") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1287 (export "test1287") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1288 (export "test1288") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1289 (export "test1289") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1290 (export "test1290") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1291 (export "test1291") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1292 (export "test1292") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1293 (export "test1293") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1294 (export "test1294") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1295 (export "test1295") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1296 (export "test1296") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1297 (export "test1297") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1298 (export "test1298") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1299 (export "test1299") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1300 (export "test1300") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1301 (export "test1301") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1302 (export "test1302") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1303 (export "test1303") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1304 (export "test1304") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1305 (export "test1305") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1306 (export "test1306") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1307 (export "test1307") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1308 (export "test1308") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1309 (export "test1309") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1310 (export "test1310") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1311 (export "test1311") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1312 (export "test1312") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1313 (export "test1313") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1314 (export "test1314") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1315 (export "test1315") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1316 (export "test1316") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1317 (export "test1317") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1318 (export "test1318") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1319 (export "test1319") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1320 (export "test1320") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1321 (export "test1321") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1322 (export "test1322") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1323 (export "test1323") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1324 (export "test1324") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1325 (export "test1325") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1326 (export "test1326") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1327 (export "test1327") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1328 (export "test1328") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1329 (export "test1329") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1330 (export "test1330") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1331 (export "test1331") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1332 (export "test1332") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1333 (export "test1333") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1334 (export "test1334") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1335 (export "test1335") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1336 (export "test1336") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1337 (export "test1337") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1338 (export "test1338") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1339 (export "test1339") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1340 (export "test1340") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1341 (export "test1341") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1342 (export "test1342") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1343 (export "test1343") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1344 (export "test1344") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1345 (export "test1345") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1346 (export "test1346") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1347 (export "test1347") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1348 (export "test1348") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1349 (export "test1349") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1350 (export "test1350") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1351 (export "test1351") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1352 (export "test1352") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1353 (export "test1353") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1354 (export "test1354") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1355 (export "test1355") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1356 (export "test1356") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1357 (export "test1357") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1358 (export "test1358") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1359 (export "test1359") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1360 (export "test1360") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1361 (export "test1361") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1362 (export "test1362") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1363 (export "test1363") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1364 (export "test1364") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1365 (export "test1365") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1366 (export "test1366") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1367 (export "test1367") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1368 (export "test1368") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1369 (export "test1369") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1370 (export "test1370") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1371 (export "test1371") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1372 (export "test1372") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1373 (export "test1373") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1374 (export "test1374") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1375 (export "test1375") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1376 (export "test1376") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1377 (export "test1377") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1378 (export "test1378") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1379 (export "test1379") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1380 (export "test1380") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1381 (export "test1381") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1382 (export "test1382") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1383 (export "test1383") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1384 (export "test1384") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1385 (export "test1385") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1386 (export "test1386") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1387 (export "test1387") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1388 (export "test1388") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1389 (export "test1389") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1390 (export "test1390") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1391 (export "test1391") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1392 (export "test1392") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1393 (export "test1393") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1394 (export "test1394") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1395 (export "test1395") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1396 (export "test1396") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1397 (export "test1397") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1398 (export "test1398") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1399 (export "test1399") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1400 (export "test1400") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1401 (export "test1401") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1402 (export "test1402") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1403 (export "test1403") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1404 (export "test1404") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1405 (export "test1405") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1406 (export "test1406") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1407 (export "test1407") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1408 (export "test1408") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1409 (export "test1409") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1410 (export "test1410") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1411 (export "test1411") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1412 (export "test1412") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1413 (export "test1413") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1414 (export "test1414") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1415 (export "test1415") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1416 (export "test1416") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1417 (export "test1417") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1418 (export "test1418") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1419 (export "test1419") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1420 (export "test1420") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1421 (export "test1421") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1422 (export "test1422") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1423 (export "test1423") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1424 (export "test1424") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1425 (export "test1425") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1426 (export "test1426") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1427 (export "test1427") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1428 (export "test1428") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1429 (export "test1429") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1430 (export "test1430") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1431 (export "test1431") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1432 (export "test1432") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1433 (export "test1433") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1434 (export "test1434") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1435 (export "test1435") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1436 (export "test1436") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1437 (export "test1437") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1438 (export "test1438") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1439 (export "test1439") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1440 (export "test1440") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1441 (export "test1441") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1442 (export "test1442") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1443 (export "test1443") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1444 (export "test1444") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1445 (export "test1445") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1446 (export "test1446") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1447 (export "test1447") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1448 (export "test1448") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1449 (export "test1449") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1450 (export "test1450") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1451 (export "test1451") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1452 (export "test1452") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1453 (export "test1453") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1454 (export "test1454") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1455 (export "test1455") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1456 (export "test1456") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1457 (export "test1457") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1458 (export "test1458") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1459 (export "test1459") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1460 (export "test1460") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1461 (export "test1461") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1462 (export "test1462") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1463 (export "test1463") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1464 (export "test1464") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1465 (export "test1465") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1466 (export "test1466") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1467 (export "test1467") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1468 (export "test1468") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1469 (export "test1469") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1470 (export "test1470") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1471 (export "test1471") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1472 (export "test1472") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1473 (export "test1473") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1474 (export "test1474") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1475 (export "test1475") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1476 (export "test1476") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1477 (export "test1477") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1478 (export "test1478") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1479 (export "test1479") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1480 (export "test1480") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1481 (export "test1481") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1482 (export "test1482") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1483 (export "test1483") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1484 (export "test1484") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1485 (export "test1485") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1486 (export "test1486") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1487 (export "test1487") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1488 (export "test1488") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1489 (export "test1489") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1490 (export "test1490") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1491 (export "test1491") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1492 (export "test1492") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1493 (export "test1493") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1494 (export "test1494") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1495 (export "test1495") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1496 (export "test1496") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1497 (export "test1497") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1498 (export "test1498") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1499 (export "test1499") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1500 (export "test1500") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1501 (export "test1501") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1502 (export "test1502") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1503 (export "test1503") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1504 (export "test1504") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1505 (export "test1505") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1506 (export "test1506") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1507 (export "test1507") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1508 (export "test1508") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1509 (export "test1509") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1510 (export "test1510") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1511 (export "test1511") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1512 (export "test1512") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1513 (export "test1513") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1514 (export "test1514") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1515 (export "test1515") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1516 (export "test1516") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1517 (export "test1517") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1518 (export "test1518") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1519 (export "test1519") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1520 (export "test1520") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1521 (export "test1521") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1522 (export "test1522") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1523 (export "test1523") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1524 (export "test1524") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1525 (export "test1525") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1526 (export "test1526") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1527 (export "test1527") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1528 (export "test1528") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1529 (export "test1529") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1530 (export "test1530") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1531 (export "test1531") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1532 (export "test1532") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1533 (export "test1533") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1534 (export "test1534") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1535 (export "test1535") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1536 (export "test1536") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1537 (export "test1537") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1538 (export "test1538") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1539 (export "test1539") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1540 (export "test1540") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1541 (export "test1541") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1542 (export "test1542") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1543 (export "test1543") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1544 (export "test1544") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1545 (export "test1545") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1546 (export "test1546") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1547 (export "test1547") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1548 (export "test1548") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1549 (export "test1549") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1550 (export "test1550") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1551 (export "test1551") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1552 (export "test1552") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1553 (export "test1553") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1554 (export "test1554") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1555 (export "test1555") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1556 (export "test1556") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1557 (export "test1557") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1558 (export "test1558") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1559 (export "test1559") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1560 (export "test1560") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1561 (export "test1561") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1562 (export "test1562") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1563 (export "test1563") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1564 (export "test1564") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1565 (export "test1565") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1566 (export "test1566") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1567 (export "test1567") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1568 (export "test1568") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1569 (export "test1569") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1570 (export "test1570") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1571 (export "test1571") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1572 (export "test1572") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1573 (export "test1573") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1574 (export "test1574") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1575 (export "test1575") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1576 (export "test1576") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1577 (export "test1577") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1578 (export "test1578") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1579 (export "test1579") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1580 (export "test1580") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1581 (export "test1581") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1582 (export "test1582") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1583 (export "test1583") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1584 (export "test1584") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1585 (export "test1585") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1586 (export "test1586") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1587 (export "test1587") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1588 (export "test1588") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1589 (export "test1589") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1590 (export "test1590") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1591 (export "test1591") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1592 (export "test1592") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1593 (export "test1593") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1594 (export "test1594") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1595 (export "test1595") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1596 (export "test1596") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1597 (export "test1597") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1598 (export "test1598") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1599 (export "test1599") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1600 (export "test1600") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1601 (export "test1601") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1602 (export "test1602") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1603 (export "test1603") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1604 (export "test1604") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1605 (export "test1605") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1606 (export "test1606") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1607 (export "test1607") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1608 (export "test1608") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1609 (export "test1609") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1610 (export "test1610") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1611 (export "test1611") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1612 (export "test1612") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1613 (export "test1613") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1614 (export "test1614") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1615 (export "test1615") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1616 (export "test1616") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1617 (export "test1617") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1618 (export "test1618") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1619 (export "test1619") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1620 (export "test1620") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1621 (export "test1621") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1622 (export "test1622") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1623 (export "test1623") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1624 (export "test1624") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1625 (export "test1625") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1626 (export "test1626") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1627 (export "test1627") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1628 (export "test1628") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1629 (export "test1629") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1630 (export "test1630") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1631 (export "test1631") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1632 (export "test1632") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1633 (export "test1633") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1634 (export "test1634") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1635 (export "test1635") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1636 (export "test1636") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1637 (export "test1637") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1638 (export "test1638") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1639 (export "test1639") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1640 (export "test1640") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1641 (export "test1641") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1642 (export "test1642") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1643 (export "test1643") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1644 (export "test1644") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1645 (export "test1645") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1646 (export "test1646") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1647 (export "test1647") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1648 (export "test1648") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1649 (export "test1649") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1650 (export "test1650") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1651 (export "test1651") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1652 (export "test1652") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1653 (export "test1653") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1654 (export "test1654") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1655 (export "test1655") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1656 (export "test1656") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1657 (export "test1657") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1658 (export "test1658") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1659 (export "test1659") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1660 (export "test1660") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1661 (export "test1661") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1662 (export "test1662") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1663 (export "test1663") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1664 (export "test1664") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1665 (export "test1665") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1666 (export "test1666") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1667 (export "test1667") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1668 (export "test1668") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1669 (export "test1669") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1670 (export "test1670") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1671 (export "test1671") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1672 (export "test1672") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1673 (export "test1673") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1674 (export "test1674") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1675 (export "test1675") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1676 (export "test1676") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1677 (export "test1677") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1678 (export "test1678") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1679 (export "test1679") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1680 (export "test1680") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1681 (export "test1681") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1682 (export "test1682") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1683 (export "test1683") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1684 (export "test1684") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1685 (export "test1685") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1686 (export "test1686") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1687 (export "test1687") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1688 (export "test1688") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1689 (export "test1689") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1690 (export "test1690") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1691 (export "test1691") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1692 (export "test1692") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1693 (export "test1693") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1694 (export "test1694") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1695 (export "test1695") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1696 (export "test1696") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1697 (export "test1697") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1698 (export "test1698") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1699 (export "test1699") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1700 (export "test1700") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1701 (export "test1701") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1702 (export "test1702") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1703 (export "test1703") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1704 (export "test1704") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1705 (export "test1705") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1706 (export "test1706") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1707 (export "test1707") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1708 (export "test1708") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1709 (export "test1709") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1710 (export "test1710") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1711 (export "test1711") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1712 (export "test1712") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1713 (export "test1713") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1714 (export "test1714") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1715 (export "test1715") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1716 (export "test1716") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1717 (export "test1717") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1718 (export "test1718") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1719 (export "test1719") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1720 (export "test1720") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1721 (export "test1721") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1722 (export "test1722") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1723 (export "test1723") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1724 (export "test1724") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1725 (export "test1725") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1726 (export "test1726") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1727 (export "test1727") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1728 (export "test1728") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1729 (export "test1729") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1730 (export "test1730") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1731 (export "test1731") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1732 (export "test1732") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1733 (export "test1733") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1734 (export "test1734") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1735 (export "test1735") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1736 (export "test1736") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1737 (export "test1737") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1738 (export "test1738") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1739 (export "test1739") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1740 (export "test1740") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1741 (export "test1741") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1742 (export "test1742") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1743 (export "test1743") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1744 (export "test1744") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1745 (export "test1745") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1746 (export "test1746") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1747 (export "test1747") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1748 (export "test1748") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1749 (export "test1749") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1750 (export "test1750") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1751 (export "test1751") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1752 (export "test1752") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1753 (export "test1753") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1754 (export "test1754") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1755 (export "test1755") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1756 (export "test1756") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1757 (export "test1757") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1758 (export "test1758") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1759 (export "test1759") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1760 (export "test1760") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1761 (export "test1761") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1762 (export "test1762") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1763 (export "test1763") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1764 (export "test1764") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1765 (export "test1765") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1766 (export "test1766") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1767 (export "test1767") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1768 (export "test1768") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1769 (export "test1769") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1770 (export "test1770") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1771 (export "test1771") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1772 (export "test1772") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1773 (export "test1773") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1774 (export "test1774") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1775 (export "test1775") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1776 (export "test1776") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1777 (export "test1777") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1778 (export "test1778") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1779 (export "test1779") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1780 (export "test1780") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1781 (export "test1781") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1782 (export "test1782") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1783 (export "test1783") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1784 (export "test1784") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1785 (export "test1785") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1786 (export "test1786") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1787 (export "test1787") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1788 (export "test1788") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1789 (export "test1789") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1790 (export "test1790") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1791 (export "test1791") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1792 (export "test1792") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1793 (export "test1793") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1794 (export "test1794") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1795 (export "test1795") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1796 (export "test1796") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1797 (export "test1797") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1798 (export "test1798") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1799 (export "test1799") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1800 (export "test1800") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1801 (export "test1801") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1802 (export "test1802") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1803 (export "test1803") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1804 (export "test1804") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1805 (export "test1805") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1806 (export "test1806") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1807 (export "test1807") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1808 (export "test1808") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1809 (export "test1809") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1810 (export "test1810") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1811 (export "test1811") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1812 (export "test1812") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1813 (export "test1813") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1814 (export "test1814") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1815 (export "test1815") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1816 (export "test1816") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1817 (export "test1817") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1818 (export "test1818") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1819 (export "test1819") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1820 (export "test1820") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1821 (export "test1821") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1822 (export "test1822") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1823 (export "test1823") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1824 (export "test1824") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1825 (export "test1825") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1826 (export "test1826") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1827 (export "test1827") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1828 (export "test1828") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1829 (export "test1829") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1830 (export "test1830") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1831 (export "test1831") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1832 (export "test1832") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1833 (export "test1833") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1834 (export "test1834") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1835 (export "test1835") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1836 (export "test1836") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1837 (export "test1837") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1838 (export "test1838") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1839 (export "test1839") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1840 (export "test1840") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1841 (export "test1841") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1842 (export "test1842") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1843 (export "test1843") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1844 (export "test1844") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1845 (export "test1845") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1846 (export "test1846") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1847 (export "test1847") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1848 (export "test1848") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1849 (export "test1849") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1850 (export "test1850") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1851 (export "test1851") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1852 (export "test1852") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1853 (export "test1853") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1854 (export "test1854") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1855 (export "test1855") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1856 (export "test1856") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1857 (export "test1857") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1858 (export "test1858") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1859 (export "test1859") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1860 (export "test1860") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1861 (export "test1861") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1862 (export "test1862") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1863 (export "test1863") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1864 (export "test1864") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1865 (export "test1865") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1866 (export "test1866") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1867 (export "test1867") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1868 (export "test1868") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1869 (export "test1869") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1870 (export "test1870") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1871 (export "test1871") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1872 (export "test1872") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1873 (export "test1873") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1874 (export "test1874") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1875 (export "test1875") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1876 (export "test1876") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1877 (export "test1877") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1878 (export "test1878") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1879 (export "test1879") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1880 (export "test1880") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1881 (export "test1881") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1882 (export "test1882") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1883 (export "test1883") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1884 (export "test1884") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1885 (export "test1885") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1886 (export "test1886") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1887 (export "test1887") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1888 (export "test1888") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1889 (export "test1889") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1890 (export "test1890") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1891 (export "test1891") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1892 (export "test1892") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1893 (export "test1893") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1894 (export "test1894") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1895 (export "test1895") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1896 (export "test1896") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1897 (export "test1897") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1898 (export "test1898") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1899 (export "test1899") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1900 (export "test1900") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1901 (export "test1901") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1902 (export "test1902") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1903 (export "test1903") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1904 (export "test1904") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1905 (export "test1905") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1906 (export "test1906") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1907 (export "test1907") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1908 (export "test1908") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1909 (export "test1909") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1910 (export "test1910") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1911 (export "test1911") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1912 (export "test1912") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1913 (export "test1913") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1914 (export "test1914") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1915 (export "test1915") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1916 (export "test1916") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1917 (export "test1917") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1918 (export "test1918") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1919 (export "test1919") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1920 (export "test1920") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1921 (export "test1921") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1922 (export "test1922") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1923 (export "test1923") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1924 (export "test1924") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1925 (export "test1925") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1926 (export "test1926") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1927 (export "test1927") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1928 (export "test1928") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1929 (export "test1929") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1930 (export "test1930") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1931 (export "test1931") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1932 (export "test1932") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1933 (export "test1933") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1934 (export "test1934") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1935 (export "test1935") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1936 (export "test1936") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1937 (export "test1937") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1938 (export "test1938") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1939 (export "test1939") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1940 (export "test1940") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1941 (export "test1941") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1942 (export "test1942") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1943 (export "test1943") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1944 (export "test1944") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1945 (export "test1945") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1946 (export "test1946") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1947 (export "test1947") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1948 (export "test1948") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1949 (export "test1949") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1950 (export "test1950") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1951 (export "test1951") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1952 (export "test1952") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1953 (export "test1953") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1954 (export "test1954") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1955 (export "test1955") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1956 (export "test1956") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1957 (export "test1957") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1958 (export "test1958") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1959 (export "test1959") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1960 (export "test1960") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1961 (export "test1961") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1962 (export "test1962") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1963 (export "test1963") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1964 (export "test1964") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1965 (export "test1965") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1966 (export "test1966") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1967 (export "test1967") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1968 (export "test1968") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1969 (export "test1969") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1970 (export "test1970") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1971 (export "test1971") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1972 (export "test1972") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1973 (export "test1973") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1974 (export "test1974") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1975 (export "test1975") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1976 (export "test1976") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1977 (export "test1977") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1978 (export "test1978") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1979 (export "test1979") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1980 (export "test1980") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1981 (export "test1981") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1982 (export "test1982") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1983 (export "test1983") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1984 (export "test1984") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1985 (export "test1985") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1986 (export "test1986") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1987 (export "test1987") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1988 (export "test1988") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1989 (export "test1989") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1990 (export "test1990") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1991 (export "test1991") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1992 (export "test1992") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1993 (export "test1993") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1994 (export "test1994") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1995 (export "test1995") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1996 (export "test1996") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1997 (export "test1997") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1998 (export "test1998") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test1999 (export "test1999") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2000 (export "test2000") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2001 (export "test2001") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2002 (export "test2002") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2003 (export "test2003") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2004 (export "test2004") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2005 (export "test2005") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2006 (export "test2006") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2007 (export "test2007") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2008 (export "test2008") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2009 (export "test2009") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2010 (export "test2010") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2011 (export "test2011") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2012 (export "test2012") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2013 (export "test2013") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2014 (export "test2014") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2015 (export "test2015") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2016 (export "test2016") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2017 (export "test2017") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2018 (export "test2018") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2019 (export "test2019") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2020 (export "test2020") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2021 (export "test2021") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2022 (export "test2022") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2023 (export "test2023") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2024 (export "test2024") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2025 (export "test2025") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2026 (export "test2026") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2027 (export "test2027") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2028 (export "test2028") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2029 (export "test2029") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2030 (export "test2030") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2031 (export "test2031") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2032 (export "test2032") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2033 (export "test2033") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2034 (export "test2034") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2035 (export "test2035") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2036 (export "test2036") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2037 (export "test2037") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2038 (export "test2038") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2039 (export "test2039") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2040 (export "test2040") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2041 (export "test2041") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2042 (export "test2042") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2043 (export "test2043") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2044 (export "test2044") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2045 (export "test2045") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2046 (export "test2046") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2047 (export "test2047") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2048 (export "test2048") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2049 (export "test2049") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2050 (export "test2050") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2051 (export "test2051") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2052 (export "test2052") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2053 (export "test2053") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2054 (export "test2054") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2055 (export "test2055") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2056 (export "test2056") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2057 (export "test2057") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2058 (export "test2058") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2059 (export "test2059") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2060 (export "test2060") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2061 (export "test2061") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2062 (export "test2062") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2063 (export "test2063") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2064 (export "test2064") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2065 (export "test2065") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2066 (export "test2066") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2067 (export "test2067") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2068 (export "test2068") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2069 (export "test2069") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2070 (export "test2070") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2071 (export "test2071") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2072 (export "test2072") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2073 (export "test2073") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2074 (export "test2074") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2075 (export "test2075") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2076 (export "test2076") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2077 (export "test2077") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2078 (export "test2078") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2079 (export "test2079") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2080 (export "test2080") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2081 (export "test2081") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2082 (export "test2082") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2083 (export "test2083") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2084 (export "test2084") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2085 (export "test2085") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2086 (export "test2086") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2087 (export "test2087") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2088 (export "test2088") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2089 (export "test2089") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2090 (export "test2090") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2091 (export "test2091") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2092 (export "test2092") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2093 (export "test2093") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2094 (export "test2094") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2095 (export "test2095") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2096 (export "test2096") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2097 (export "test2097") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2098 (export "test2098") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2099 (export "test2099") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2100 (export "test2100") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2101 (export "test2101") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2102 (export "test2102") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2103 (export "test2103") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2104 (export "test2104") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2105 (export "test2105") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2106 (export "test2106") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2107 (export "test2107") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2108 (export "test2108") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2109 (export "test2109") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2110 (export "test2110") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2111 (export "test2111") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2112 (export "test2112") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2113 (export "test2113") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2114 (export "test2114") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2115 (export "test2115") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2116 (export "test2116") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2117 (export "test2117") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2118 (export "test2118") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2119 (export "test2119") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2120 (export "test2120") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2121 (export "test2121") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2122 (export "test2122") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2123 (export "test2123") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2124 (export "test2124") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2125 (export "test2125") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2126 (export "test2126") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2127 (export "test2127") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2128 (export "test2128") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2129 (export "test2129") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2130 (export "test2130") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2131 (export "test2131") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2132 (export "test2132") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2133 (export "test2133") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2134 (export "test2134") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2135 (export "test2135") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2136 (export "test2136") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2137 (export "test2137") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2138 (export "test2138") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2139 (export "test2139") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2140 (export "test2140") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2141 (export "test2141") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2142 (export "test2142") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2143 (export "test2143") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2144 (export "test2144") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2145 (export "test2145") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2146 (export "test2146") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2147 (export "test2147") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2148 (export "test2148") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2149 (export "test2149") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2150 (export "test2150") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2151 (export "test2151") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2152 (export "test2152") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2153 (export "test2153") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2154 (export "test2154") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2155 (export "test2155") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2156 (export "test2156") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2157 (export "test2157") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2158 (export "test2158") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2159 (export "test2159") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2160 (export "test2160") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2161 (export "test2161") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2162 (export "test2162") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2163 (export "test2163") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2164 (export "test2164") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2165 (export "test2165") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2166 (export "test2166") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2167 (export "test2167") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2168 (export "test2168") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2169 (export "test2169") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2170 (export "test2170") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2171 (export "test2171") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2172 (export "test2172") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2173 (export "test2173") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2174 (export "test2174") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2175 (export "test2175") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2176 (export "test2176") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2177 (export "test2177") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2178 (export "test2178") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2179 (export "test2179") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2180 (export "test2180") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2181 (export "test2181") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2182 (export "test2182") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2183 (export "test2183") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2184 (export "test2184") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2185 (export "test2185") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2186 (export "test2186") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2187 (export "test2187") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2188 (export "test2188") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2189 (export "test2189") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2190 (export "test2190") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2191 (export "test2191") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2192 (export "test2192") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2193 (export "test2193") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2194 (export "test2194") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2195 (export "test2195") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2196 (export "test2196") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2197 (export "test2197") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2198 (export "test2198") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2199 (export "test2199") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2200 (export "test2200") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2201 (export "test2201") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2202 (export "test2202") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2203 (export "test2203") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2204 (export "test2204") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2205 (export "test2205") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2206 (export "test2206") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2207 (export "test2207") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2208 (export "test2208") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2209 (export "test2209") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2210 (export "test2210") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2211 (export "test2211") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2212 (export "test2212") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2213 (export "test2213") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2214 (export "test2214") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2215 (export "test2215") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2216 (export "test2216") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2217 (export "test2217") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2218 (export "test2218") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2219 (export "test2219") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2220 (export "test2220") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2221 (export "test2221") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2222 (export "test2222") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2223 (export "test2223") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2224 (export "test2224") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2225 (export "test2225") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2226 (export "test2226") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2227 (export "test2227") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2228 (export "test2228") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2229 (export "test2229") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2230 (export "test2230") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2231 (export "test2231") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2232 (export "test2232") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2233 (export "test2233") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2234 (export "test2234") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2235 (export "test2235") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2236 (export "test2236") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2237 (export "test2237") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2238 (export "test2238") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2239 (export "test2239") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2240 (export "test2240") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2241 (export "test2241") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2242 (export "test2242") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2243 (export "test2243") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2244 (export "test2244") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2245 (export "test2245") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2246 (export "test2246") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2247 (export "test2247") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2248 (export "test2248") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2249 (export "test2249") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2250 (export "test2250") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2251 (export "test2251") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2252 (export "test2252") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2253 (export "test2253") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2254 (export "test2254") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2255 (export "test2255") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2256 (export "test2256") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2257 (export "test2257") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2258 (export "test2258") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2259 (export "test2259") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2260 (export "test2260") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2261 (export "test2261") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2262 (export "test2262") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2263 (export "test2263") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2264 (export "test2264") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2265 (export "test2265") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2266 (export "test2266") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2267 (export "test2267") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2268 (export "test2268") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2269 (export "test2269") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2270 (export "test2270") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2271 (export "test2271") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2272 (export "test2272") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2273 (export "test2273") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2274 (export "test2274") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2275 (export "test2275") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2276 (export "test2276") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2277 (export "test2277") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2278 (export "test2278") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2279 (export "test2279") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2280 (export "test2280") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2281 (export "test2281") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2282 (export "test2282") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2283 (export "test2283") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2284 (export "test2284") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2285 (export "test2285") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2286 (export "test2286") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2287 (export "test2287") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2288 (export "test2288") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2289 (export "test2289") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2290 (export "test2290") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2291 (export "test2291") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2292 (export "test2292") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2293 (export "test2293") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2294 (export "test2294") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2295 (export "test2295") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2296 (export "test2296") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2297 (export "test2297") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2298 (export "test2298") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2299 (export "test2299") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2300 (export "test2300") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2301 (export "test2301") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2302 (export "test2302") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2303 (export "test2303") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2304 (export "test2304") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2305 (export "test2305") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2306 (export "test2306") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2307 (export "test2307") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2308 (export "test2308") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2309 (export "test2309") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2310 (export "test2310") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2311 (export "test2311") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2312 (export "test2312") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2313 (export "test2313") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2314 (export "test2314") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2315 (export "test2315") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2316 (export "test2316") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2317 (export "test2317") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2318 (export "test2318") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2319 (export "test2319") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2320 (export "test2320") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2321 (export "test2321") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2322 (export "test2322") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2323 (export "test2323") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2324 (export "test2324") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2325 (export "test2325") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2326 (export "test2326") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2327 (export "test2327") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2328 (export "test2328") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2329 (export "test2329") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2330 (export "test2330") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2331 (export "test2331") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2332 (export "test2332") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2333 (export "test2333") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2334 (export "test2334") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2335 (export "test2335") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2336 (export "test2336") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2337 (export "test2337") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2338 (export "test2338") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2339 (export "test2339") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2340 (export "test2340") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2341 (export "test2341") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2342 (export "test2342") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2343 (export "test2343") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2344 (export "test2344") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2345 (export "test2345") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2346 (export "test2346") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2347 (export "test2347") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2348 (export "test2348") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2349 (export "test2349") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2350 (export "test2350") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2351 (export "test2351") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2352 (export "test2352") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2353 (export "test2353") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2354 (export "test2354") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2355 (export "test2355") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2356 (export "test2356") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2357 (export "test2357") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2358 (export "test2358") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2359 (export "test2359") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2360 (export "test2360") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2361 (export "test2361") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2362 (export "test2362") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2363 (export "test2363") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2364 (export "test2364") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2365 (export "test2365") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2366 (export "test2366") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2367 (export "test2367") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2368 (export "test2368") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2369 (export "test2369") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2370 (export "test2370") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2371 (export "test2371") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2372 (export "test2372") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2373 (export "test2373") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2374 (export "test2374") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2375 (export "test2375") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2376 (export "test2376") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2377 (export "test2377") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2378 (export "test2378") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2379 (export "test2379") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2380 (export "test2380") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2381 (export "test2381") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2382 (export "test2382") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2383 (export "test2383") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2384 (export "test2384") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2385 (export "test2385") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2386 (export "test2386") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2387 (export "test2387") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2388 (export "test2388") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2389 (export "test2389") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2390 (export "test2390") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2391 (export "test2391") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2392 (export "test2392") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2393 (export "test2393") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2394 (export "test2394") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2395 (export "test2395") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2396 (export "test2396") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2397 (export "test2397") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2398 (export "test2398") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2399 (export "test2399") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2400 (export "test2400") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2401 (export "test2401") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2402 (export "test2402") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2403 (export "test2403") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2404 (export "test2404") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2405 (export "test2405") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2406 (export "test2406") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2407 (export "test2407") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2408 (export "test2408") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2409 (export "test2409") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2410 (export "test2410") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2411 (export "test2411") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2412 (export "test2412") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2413 (export "test2413") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2414 (export "test2414") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2415 (export "test2415") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2416 (export "test2416") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2417 (export "test2417") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2418 (export "test2418") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2419 (export "test2419") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2420 (export "test2420") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2421 (export "test2421") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2422 (export "test2422") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2423 (export "test2423") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2424 (export "test2424") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2425 (export "test2425") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2426 (export "test2426") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2427 (export "test2427") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2428 (export "test2428") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2429 (export "test2429") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2430 (export "test2430") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2431 (export "test2431") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2432 (export "test2432") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2433 (export "test2433") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2434 (export "test2434") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2435 (export "test2435") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2436 (export "test2436") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2437 (export "test2437") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2438 (export "test2438") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2439 (export "test2439") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2440 (export "test2440") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2441 (export "test2441") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2442 (export "test2442") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2443 (export "test2443") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2444 (export "test2444") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2445 (export "test2445") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2446 (export "test2446") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2447 (export "test2447") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2448 (export "test2448") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2449 (export "test2449") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2450 (export "test2450") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2451 (export "test2451") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2452 (export "test2452") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2453 (export "test2453") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2454 (export "test2454") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2455 (export "test2455") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2456 (export "test2456") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2457 (export "test2457") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2458 (export "test2458") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2459 (export "test2459") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2460 (export "test2460") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2461 (export "test2461") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2462 (export "test2462") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2463 (export "test2463") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2464 (export "test2464") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2465 (export "test2465") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2466 (export "test2466") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2467 (export "test2467") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2468 (export "test2468") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2469 (export "test2469") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2470 (export "test2470") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2471 (export "test2471") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2472 (export "test2472") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2473 (export "test2473") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2474 (export "test2474") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2475 (export "test2475") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2476 (export "test2476") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2477 (export "test2477") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2478 (export "test2478") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2479 (export "test2479") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2480 (export "test2480") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2481 (export "test2481") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2482 (export "test2482") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2483 (export "test2483") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2484 (export "test2484") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2485 (export "test2485") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2486 (export "test2486") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2487 (export "test2487") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2488 (export "test2488") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2489 (export "test2489") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2490 (export "test2490") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2491 (export "test2491") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2492 (export "test2492") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2493 (export "test2493") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2494 (export "test2494") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2495 (export "test2495") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2496 (export "test2496") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2497 (export "test2497") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2498 (export "test2498") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2499 (export "test2499") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2500 (export "test2500") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2501 (export "test2501") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2502 (export "test2502") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2503 (export "test2503") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2504 (export "test2504") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2505 (export "test2505") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2506 (export "test2506") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2507 (export "test2507") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2508 (export "test2508") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2509 (export "test2509") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2510 (export "test2510") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2511 (export "test2511") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2512 (export "test2512") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2513 (export "test2513") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2514 (export "test2514") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2515 (export "test2515") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2516 (export "test2516") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2517 (export "test2517") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2518 (export "test2518") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2519 (export "test2519") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2520 (export "test2520") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2521 (export "test2521") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2522 (export "test2522") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2523 (export "test2523") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2524 (export "test2524") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2525 (export "test2525") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2526 (export "test2526") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2527 (export "test2527") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2528 (export "test2528") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2529 (export "test2529") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2530 (export "test2530") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2531 (export "test2531") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2532 (export "test2532") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2533 (export "test2533") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2534 (export "test2534") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2535 (export "test2535") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2536 (export "test2536") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2537 (export "test2537") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2538 (export "test2538") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2539 (export "test2539") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2540 (export "test2540") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2541 (export "test2541") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2542 (export "test2542") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2543 (export "test2543") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2544 (export "test2544") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2545 (export "test2545") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2546 (export "test2546") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2547 (export "test2547") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2548 (export "test2548") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2549 (export "test2549") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2550 (export "test2550") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2551 (export "test2551") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2552 (export "test2552") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2553 (export "test2553") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2554 (export "test2554") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2555 (export "test2555") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2556 (export "test2556") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2557 (export "test2557") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2558 (export "test2558") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2559 (export "test2559") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2560 (export "test2560") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2561 (export "test2561") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2562 (export "test2562") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2563 (export "test2563") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2564 (export "test2564") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2565 (export "test2565") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2566 (export "test2566") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2567 (export "test2567") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2568 (export "test2568") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2569 (export "test2569") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2570 (export "test2570") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2571 (export "test2571") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2572 (export "test2572") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2573 (export "test2573") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2574 (export "test2574") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2575 (export "test2575") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2576 (export "test2576") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2577 (export "test2577") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2578 (export "test2578") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2579 (export "test2579") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2580 (export "test2580") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2581 (export "test2581") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2582 (export "test2582") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2583 (export "test2583") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2584 (export "test2584") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2585 (export "test2585") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2586 (export "test2586") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2587 (export "test2587") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2588 (export "test2588") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2589 (export "test2589") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2590 (export "test2590") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2591 (export "test2591") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2592 (export "test2592") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2593 (export "test2593") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2594 (export "test2594") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2595 (export "test2595") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2596 (export "test2596") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2597 (export "test2597") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2598 (export "test2598") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2599 (export "test2599") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2600 (export "test2600") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2601 (export "test2601") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2602 (export "test2602") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2603 (export "test2603") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2604 (export "test2604") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2605 (export "test2605") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2606 (export "test2606") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2607 (export "test2607") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2608 (export "test2608") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2609 (export "test2609") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2610 (export "test2610") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2611 (export "test2611") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2612 (export "test2612") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2613 (export "test2613") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2614 (export "test2614") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2615 (export "test2615") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2616 (export "test2616") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2617 (export "test2617") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2618 (export "test2618") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2619 (export "test2619") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2620 (export "test2620") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2621 (export "test2621") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2622 (export "test2622") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2623 (export "test2623") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2624 (export "test2624") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2625 (export "test2625") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2626 (export "test2626") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2627 (export "test2627") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2628 (export "test2628") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2629 (export "test2629") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2630 (export "test2630") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2631 (export "test2631") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2632 (export "test2632") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2633 (export "test2633") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2634 (export "test2634") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2635 (export "test2635") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2636 (export "test2636") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2637 (export "test2637") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2638 (export "test2638") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2639 (export "test2639") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2640 (export "test2640") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2641 (export "test2641") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2642 (export "test2642") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2643 (export "test2643") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2644 (export "test2644") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2645 (export "test2645") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2646 (export "test2646") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2647 (export "test2647") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2648 (export "test2648") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2649 (export "test2649") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2650 (export "test2650") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2651 (export "test2651") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2652 (export "test2652") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2653 (export "test2653") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2654 (export "test2654") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2655 (export "test2655") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2656 (export "test2656") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2657 (export "test2657") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2658 (export "test2658") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2659 (export "test2659") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2660 (export "test2660") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2661 (export "test2661") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2662 (export "test2662") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2663 (export "test2663") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2664 (export "test2664") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2665 (export "test2665") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2666 (export "test2666") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2667 (export "test2667") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2668 (export "test2668") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2669 (export "test2669") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2670 (export "test2670") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2671 (export "test2671") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2672 (export "test2672") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2673 (export "test2673") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2674 (export "test2674") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2675 (export "test2675") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2676 (export "test2676") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2677 (export "test2677") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2678 (export "test2678") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2679 (export "test2679") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2680 (export "test2680") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2681 (export "test2681") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2682 (export "test2682") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2683 (export "test2683") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2684 (export "test2684") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2685 (export "test2685") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2686 (export "test2686") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2687 (export "test2687") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2688 (export "test2688") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2689 (export "test2689") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2690 (export "test2690") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2691 (export "test2691") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2692 (export "test2692") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2693 (export "test2693") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2694 (export "test2694") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2695 (export "test2695") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2696 (export "test2696") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2697 (export "test2697") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2698 (export "test2698") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2699 (export "test2699") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2700 (export "test2700") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2701 (export "test2701") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2702 (export "test2702") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2703 (export "test2703") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2704 (export "test2704") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2705 (export "test2705") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2706 (export "test2706") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2707 (export "test2707") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2708 (export "test2708") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2709 (export "test2709") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2710 (export "test2710") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2711 (export "test2711") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2712 (export "test2712") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2713 (export "test2713") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2714 (export "test2714") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2715 (export "test2715") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2716 (export "test2716") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2717 (export "test2717") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2718 (export "test2718") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2719 (export "test2719") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2720 (export "test2720") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2721 (export "test2721") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2722 (export "test2722") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2723 (export "test2723") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2724 (export "test2724") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2725 (export "test2725") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2726 (export "test2726") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2727 (export "test2727") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2728 (export "test2728") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2729 (export "test2729") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2730 (export "test2730") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2731 (export "test2731") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2732 (export "test2732") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2733 (export "test2733") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2734 (export "test2734") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2735 (export "test2735") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2736 (export "test2736") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2737 (export "test2737") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2738 (export "test2738") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2739 (export "test2739") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2740 (export "test2740") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2741 (export "test2741") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2742 (export "test2742") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2743 (export "test2743") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2744 (export "test2744") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2745 (export "test2745") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2746 (export "test2746") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2747 (export "test2747") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2748 (export "test2748") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2749 (export "test2749") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2750 (export "test2750") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2751 (export "test2751") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2752 (export "test2752") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2753 (export "test2753") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2754 (export "test2754") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2755 (export "test2755") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2756 (export "test2756") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2757 (export "test2757") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2758 (export "test2758") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2759 (export "test2759") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2760 (export "test2760") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2761 (export "test2761") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2762 (export "test2762") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2763 (export "test2763") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2764 (export "test2764") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2765 (export "test2765") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2766 (export "test2766") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2767 (export "test2767") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2768 (export "test2768") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2769 (export "test2769") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2770 (export "test2770") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2771 (export "test2771") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2772 (export "test2772") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2773 (export "test2773") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2774 (export "test2774") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2775 (export "test2775") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2776 (export "test2776") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2777 (export "test2777") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2778 (export "test2778") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2779 (export "test2779") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2780 (export "test2780") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2781 (export "test2781") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2782 (export "test2782") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2783 (export "test2783") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2784 (export "test2784") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2785 (export "test2785") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2786 (export "test2786") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2787 (export "test2787") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2788 (export "test2788") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2789 (export "test2789") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2790 (export "test2790") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2791 (export "test2791") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2792 (export "test2792") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2793 (export "test2793") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2794 (export "test2794") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2795 (export "test2795") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2796 (export "test2796") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2797 (export "test2797") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2798 (export "test2798") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2799 (export "test2799") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2800 (export "test2800") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2801 (export "test2801") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2802 (export "test2802") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2803 (export "test2803") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2804 (export "test2804") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2805 (export "test2805") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2806 (export "test2806") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2807 (export "test2807") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2808 (export "test2808") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2809 (export "test2809") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2810 (export "test2810") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2811 (export "test2811") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2812 (export "test2812") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2813 (export "test2813") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2814 (export "test2814") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2815 (export "test2815") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2816 (export "test2816") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2817 (export "test2817") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2818 (export "test2818") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2819 (export "test2819") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2820 (export "test2820") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2821 (export "test2821") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2822 (export "test2822") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2823 (export "test2823") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2824 (export "test2824") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2825 (export "test2825") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2826 (export "test2826") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2827 (export "test2827") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2828 (export "test2828") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2829 (export "test2829") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2830 (export "test2830") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2831 (export "test2831") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2832 (export "test2832") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2833 (export "test2833") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2834 (export "test2834") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2835 (export "test2835") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2836 (export "test2836") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2837 (export "test2837") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2838 (export "test2838") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2839 (export "test2839") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2840 (export "test2840") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2841 (export "test2841") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2842 (export "test2842") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2843 (export "test2843") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2844 (export "test2844") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2845 (export "test2845") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2846 (export "test2846") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2847 (export "test2847") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2848 (export "test2848") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2849 (export "test2849") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2850 (export "test2850") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2851 (export "test2851") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2852 (export "test2852") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2853 (export "test2853") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2854 (export "test2854") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2855 (export "test2855") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2856 (export "test2856") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2857 (export "test2857") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2858 (export "test2858") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2859 (export "test2859") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2860 (export "test2860") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2861 (export "test2861") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2862 (export "test2862") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2863 (export "test2863") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2864 (export "test2864") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2865 (export "test2865") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2866 (export "test2866") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2867 (export "test2867") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2868 (export "test2868") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2869 (export "test2869") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2870 (export "test2870") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2871 (export "test2871") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2872 (export "test2872") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2873 (export "test2873") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2874 (export "test2874") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2875 (export "test2875") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2876 (export "test2876") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2877 (export "test2877") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2878 (export "test2878") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2879 (export "test2879") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2880 (export "test2880") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2881 (export "test2881") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2882 (export "test2882") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2883 (export "test2883") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2884 (export "test2884") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2885 (export "test2885") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2886 (export "test2886") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2887 (export "test2887") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2888 (export "test2888") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2889 (export "test2889") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2890 (export "test2890") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2891 (export "test2891") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2892 (export "test2892") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2893 (export "test2893") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2894 (export "test2894") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2895 (export "test2895") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2896 (export "test2896") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2897 (export "test2897") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2898 (export "test2898") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2899 (export "test2899") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2900 (export "test2900") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2901 (export "test2901") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2902 (export "test2902") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2903 (export "test2903") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2904 (export "test2904") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2905 (export "test2905") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2906 (export "test2906") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2907 (export "test2907") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2908 (export "test2908") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2909 (export "test2909") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2910 (export "test2910") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2911 (export "test2911") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2912 (export "test2912") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2913 (export "test2913") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2914 (export "test2914") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2915 (export "test2915") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2916 (export "test2916") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2917 (export "test2917") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2918 (export "test2918") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2919 (export "test2919") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2920 (export "test2920") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2921 (export "test2921") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2922 (export "test2922") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2923 (export "test2923") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2924 (export "test2924") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2925 (export "test2925") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2926 (export "test2926") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2927 (export "test2927") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2928 (export "test2928") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2929 (export "test2929") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2930 (export "test2930") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2931 (export "test2931") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2932 (export "test2932") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2933 (export "test2933") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2934 (export "test2934") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2935 (export "test2935") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2936 (export "test2936") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2937 (export "test2937") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2938 (export "test2938") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2939 (export "test2939") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2940 (export "test2940") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2941 (export "test2941") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2942 (export "test2942") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2943 (export "test2943") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2944 (export "test2944") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2945 (export "test2945") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2946 (export "test2946") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2947 (export "test2947") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2948 (export "test2948") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2949 (export "test2949") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2950 (export "test2950") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2951 (export "test2951") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2952 (export "test2952") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2953 (export "test2953") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2954 (export "test2954") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2955 (export "test2955") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2956 (export "test2956") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2957 (export "test2957") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2958 (export "test2958") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2959 (export "test2959") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2960 (export "test2960") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2961 (export "test2961") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2962 (export "test2962") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2963 (export "test2963") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2964 (export "test2964") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2965 (export "test2965") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2966 (export "test2966") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2967 (export "test2967") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2968 (export "test2968") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2969 (export "test2969") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2970 (export "test2970") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2971 (export "test2971") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2972 (export "test2972") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2973 (export "test2973") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2974 (export "test2974") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2975 (export "test2975") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2976 (export "test2976") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2977 (export "test2977") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2978 (export "test2978") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2979 (export "test2979") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2980 (export "test2980") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2981 (export "test2981") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2982 (export "test2982") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2983 (export "test2983") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2984 (export "test2984") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2985 (export "test2985") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2986 (export "test2986") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2987 (export "test2987") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2988 (export "test2988") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2989 (export "test2989") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2990 (export "test2990") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2991 (export "test2991") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2992 (export "test2992") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2993 (export "test2993") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2994 (export "test2994") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2995 (export "test2995") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2996 (export "test2996") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2997 (export "test2997") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2998 (export "test2998") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test2999 (export "test2999") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3000 (export "test3000") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3001 (export "test3001") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3002 (export "test3002") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3003 (export "test3003") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3004 (export "test3004") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3005 (export "test3005") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3006 (export "test3006") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3007 (export "test3007") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3008 (export "test3008") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3009 (export "test3009") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3010 (export "test3010") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3011 (export "test3011") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3012 (export "test3012") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3013 (export "test3013") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3014 (export "test3014") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3015 (export "test3015") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3016 (export "test3016") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3017 (export "test3017") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3018 (export "test3018") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3019 (export "test3019") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3020 (export "test3020") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3021 (export "test3021") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3022 (export "test3022") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3023 (export "test3023") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3024 (export "test3024") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3025 (export "test3025") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3026 (export "test3026") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3027 (export "test3027") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3028 (export "test3028") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3029 (export "test3029") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3030 (export "test3030") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3031 (export "test3031") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3032 (export "test3032") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3033 (export "test3033") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3034 (export "test3034") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3035 (export "test3035") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3036 (export "test3036") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3037 (export "test3037") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3038 (export "test3038") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3039 (export "test3039") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3040 (export "test3040") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3041 (export "test3041") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3042 (export "test3042") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3043 (export "test3043") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3044 (export "test3044") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3045 (export "test3045") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3046 (export "test3046") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3047 (export "test3047") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3048 (export "test3048") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3049 (export "test3049") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3050 (export "test3050") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3051 (export "test3051") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3052 (export "test3052") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3053 (export "test3053") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3054 (export "test3054") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3055 (export "test3055") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3056 (export "test3056") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3057 (export "test3057") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3058 (export "test3058") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3059 (export "test3059") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3060 (export "test3060") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3061 (export "test3061") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3062 (export "test3062") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3063 (export "test3063") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3064 (export "test3064") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3065 (export "test3065") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3066 (export "test3066") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3067 (export "test3067") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3068 (export "test3068") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3069 (export "test3069") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3070 (export "test3070") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3071 (export "test3071") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3072 (export "test3072") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3073 (export "test3073") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3074 (export "test3074") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3075 (export "test3075") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3076 (export "test3076") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3077 (export "test3077") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3078 (export "test3078") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3079 (export "test3079") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3080 (export "test3080") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3081 (export "test3081") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3082 (export "test3082") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3083 (export "test3083") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3084 (export "test3084") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3085 (export "test3085") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3086 (export "test3086") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3087 (export "test3087") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3088 (export "test3088") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3089 (export "test3089") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3090 (export "test3090") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3091 (export "test3091") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3092 (export "test3092") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3093 (export "test3093") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3094 (export "test3094") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3095 (export "test3095") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3096 (export "test3096") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3097 (export "test3097") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3098 (export "test3098") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3099 (export "test3099") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3100 (export "test3100") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3101 (export "test3101") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3102 (export "test3102") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3103 (export "test3103") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3104 (export "test3104") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3105 (export "test3105") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3106 (export "test3106") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3107 (export "test3107") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3108 (export "test3108") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3109 (export "test3109") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3110 (export "test3110") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3111 (export "test3111") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3112 (export "test3112") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3113 (export "test3113") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3114 (export "test3114") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3115 (export "test3115") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3116 (export "test3116") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3117 (export "test3117") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3118 (export "test3118") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3119 (export "test3119") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3120 (export "test3120") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3121 (export "test3121") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3122 (export "test3122") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3123 (export "test3123") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3124 (export "test3124") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3125 (export "test3125") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3126 (export "test3126") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3127 (export "test3127") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3128 (export "test3128") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3129 (export "test3129") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3130 (export "test3130") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3131 (export "test3131") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3132 (export "test3132") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3133 (export "test3133") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3134 (export "test3134") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3135 (export "test3135") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3136 (export "test3136") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3137 (export "test3137") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3138 (export "test3138") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3139 (export "test3139") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3140 (export "test3140") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3141 (export "test3141") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3142 (export "test3142") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3143 (export "test3143") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3144 (export "test3144") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3145 (export "test3145") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3146 (export "test3146") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3147 (export "test3147") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3148 (export "test3148") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3149 (export "test3149") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3150 (export "test3150") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3151 (export "test3151") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3152 (export "test3152") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3153 (export "test3153") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3154 (export "test3154") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3155 (export "test3155") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3156 (export "test3156") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3157 (export "test3157") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3158 (export "test3158") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3159 (export "test3159") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3160 (export "test3160") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3161 (export "test3161") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3162 (export "test3162") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3163 (export "test3163") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3164 (export "test3164") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3165 (export "test3165") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3166 (export "test3166") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3167 (export "test3167") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3168 (export "test3168") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3169 (export "test3169") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3170 (export "test3170") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3171 (export "test3171") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3172 (export "test3172") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3173 (export "test3173") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3174 (export "test3174") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3175 (export "test3175") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3176 (export "test3176") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3177 (export "test3177") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3178 (export "test3178") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3179 (export "test3179") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3180 (export "test3180") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3181 (export "test3181") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3182 (export "test3182") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3183 (export "test3183") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3184 (export "test3184") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3185 (export "test3185") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3186 (export "test3186") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3187 (export "test3187") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3188 (export "test3188") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3189 (export "test3189") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3190 (export "test3190") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3191 (export "test3191") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3192 (export "test3192") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3193 (export "test3193") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3194 (export "test3194") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3195 (export "test3195") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3196 (export "test3196") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3197 (export "test3197") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3198 (export "test3198") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3199 (export "test3199") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3200 (export "test3200") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3201 (export "test3201") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3202 (export "test3202") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3203 (export "test3203") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3204 (export "test3204") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3205 (export "test3205") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3206 (export "test3206") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3207 (export "test3207") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3208 (export "test3208") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3209 (export "test3209") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3210 (export "test3210") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3211 (export "test3211") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3212 (export "test3212") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3213 (export "test3213") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3214 (export "test3214") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3215 (export "test3215") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3216 (export "test3216") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3217 (export "test3217") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3218 (export "test3218") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3219 (export "test3219") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3220 (export "test3220") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3221 (export "test3221") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3222 (export "test3222") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3223 (export "test3223") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3224 (export "test3224") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3225 (export "test3225") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3226 (export "test3226") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3227 (export "test3227") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3228 (export "test3228") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3229 (export "test3229") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3230 (export "test3230") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3231 (export "test3231") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3232 (export "test3232") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3233 (export "test3233") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3234 (export "test3234") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3235 (export "test3235") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3236 (export "test3236") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3237 (export "test3237") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3238 (export "test3238") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3239 (export "test3239") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3240 (export "test3240") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3241 (export "test3241") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3242 (export "test3242") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3243 (export "test3243") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3244 (export "test3244") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3245 (export "test3245") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3246 (export "test3246") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3247 (export "test3247") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3248 (export "test3248") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3249 (export "test3249") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3250 (export "test3250") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3251 (export "test3251") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3252 (export "test3252") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3253 (export "test3253") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3254 (export "test3254") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3255 (export "test3255") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3256 (export "test3256") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3257 (export "test3257") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3258 (export "test3258") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3259 (export "test3259") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3260 (export "test3260") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3261 (export "test3261") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3262 (export "test3262") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3263 (export "test3263") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3264 (export "test3264") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3265 (export "test3265") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3266 (export "test3266") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3267 (export "test3267") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3268 (export "test3268") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3269 (export "test3269") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3270 (export "test3270") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3271 (export "test3271") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3272 (export "test3272") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3273 (export "test3273") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3274 (export "test3274") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3275 (export "test3275") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3276 (export "test3276") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3277 (export "test3277") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3278 (export "test3278") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3279 (export "test3279") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3280 (export "test3280") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3281 (export "test3281") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3282 (export "test3282") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3283 (export "test3283") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3284 (export "test3284") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3285 (export "test3285") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3286 (export "test3286") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3287 (export "test3287") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3288 (export "test3288") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3289 (export "test3289") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3290 (export "test3290") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3291 (export "test3291") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3292 (export "test3292") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3293 (export "test3293") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3294 (export "test3294") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3295 (export "test3295") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3296 (export "test3296") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3297 (export "test3297") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3298 (export "test3298") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3299 (export "test3299") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3300 (export "test3300") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3301 (export "test3301") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3302 (export "test3302") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3303 (export "test3303") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3304 (export "test3304") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3305 (export "test3305") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3306 (export "test3306") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3307 (export "test3307") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3308 (export "test3308") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3309 (export "test3309") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3310 (export "test3310") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3311 (export "test3311") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3312 (export "test3312") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3313 (export "test3313") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3314 (export "test3314") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3315 (export "test3315") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3316 (export "test3316") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3317 (export "test3317") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3318 (export "test3318") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3319 (export "test3319") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3320 (export "test3320") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3321 (export "test3321") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3322 (export "test3322") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3323 (export "test3323") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3324 (export "test3324") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3325 (export "test3325") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3326 (export "test3326") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3327 (export "test3327") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3328 (export "test3328") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3329 (export "test3329") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3330 (export "test3330") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3331 (export "test3331") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3332 (export "test3332") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3333 (export "test3333") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3334 (export "test3334") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3335 (export "test3335") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3336 (export "test3336") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3337 (export "test3337") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3338 (export "test3338") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3339 (export "test3339") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3340 (export "test3340") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3341 (export "test3341") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3342 (export "test3342") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3343 (export "test3343") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3344 (export "test3344") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3345 (export "test3345") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3346 (export "test3346") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3347 (export "test3347") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3348 (export "test3348") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3349 (export "test3349") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3350 (export "test3350") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3351 (export "test3351") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3352 (export "test3352") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3353 (export "test3353") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3354 (export "test3354") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3355 (export "test3355") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3356 (export "test3356") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3357 (export "test3357") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3358 (export "test3358") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3359 (export "test3359") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3360 (export "test3360") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3361 (export "test3361") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3362 (export "test3362") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3363 (export "test3363") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3364 (export "test3364") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3365 (export "test3365") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3366 (export "test3366") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3367 (export "test3367") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3368 (export "test3368") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3369 (export "test3369") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3370 (export "test3370") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3371 (export "test3371") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3372 (export "test3372") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3373 (export "test3373") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3374 (export "test3374") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3375 (export "test3375") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3376 (export "test3376") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3377 (export "test3377") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3378 (export "test3378") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3379 (export "test3379") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3380 (export "test3380") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3381 (export "test3381") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3382 (export "test3382") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3383 (export "test3383") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3384 (export "test3384") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3385 (export "test3385") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3386 (export "test3386") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3387 (export "test3387") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3388 (export "test3388") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3389 (export "test3389") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3390 (export "test3390") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3391 (export "test3391") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3392 (export "test3392") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3393 (export "test3393") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3394 (export "test3394") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3395 (export "test3395") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3396 (export "test3396") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3397 (export "test3397") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3398 (export "test3398") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3399 (export "test3399") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3400 (export "test3400") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3401 (export "test3401") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3402 (export "test3402") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3403 (export "test3403") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3404 (export "test3404") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3405 (export "test3405") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3406 (export "test3406") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3407 (export "test3407") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3408 (export "test3408") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3409 (export "test3409") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3410 (export "test3410") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3411 (export "test3411") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3412 (export "test3412") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3413 (export "test3413") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3414 (export "test3414") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3415 (export "test3415") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3416 (export "test3416") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3417 (export "test3417") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3418 (export "test3418") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3419 (export "test3419") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3420 (export "test3420") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3421 (export "test3421") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3422 (export "test3422") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3423 (export "test3423") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3424 (export "test3424") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3425 (export "test3425") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3426 (export "test3426") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3427 (export "test3427") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3428 (export "test3428") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3429 (export "test3429") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3430 (export "test3430") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3431 (export "test3431") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3432 (export "test3432") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3433 (export "test3433") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3434 (export "test3434") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3435 (export "test3435") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3436 (export "test3436") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3437 (export "test3437") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3438 (export "test3438") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3439 (export "test3439") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3440 (export "test3440") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3441 (export "test3441") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3442 (export "test3442") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3443 (export "test3443") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3444 (export "test3444") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3445 (export "test3445") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3446 (export "test3446") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3447 (export "test3447") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3448 (export "test3448") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3449 (export "test3449") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3450 (export "test3450") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3451 (export "test3451") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3452 (export "test3452") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3453 (export "test3453") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3454 (export "test3454") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3455 (export "test3455") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3456 (export "test3456") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3457 (export "test3457") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3458 (export "test3458") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3459 (export "test3459") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3460 (export "test3460") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3461 (export "test3461") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3462 (export "test3462") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3463 (export "test3463") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3464 (export "test3464") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3465 (export "test3465") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3466 (export "test3466") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3467 (export "test3467") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3468 (export "test3468") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3469 (export "test3469") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3470 (export "test3470") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3471 (export "test3471") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3472 (export "test3472") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3473 (export "test3473") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3474 (export "test3474") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3475 (export "test3475") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3476 (export "test3476") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3477 (export "test3477") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3478 (export "test3478") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3479 (export "test3479") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3480 (export "test3480") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3481 (export "test3481") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3482 (export "test3482") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3483 (export "test3483") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3484 (export "test3484") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3485 (export "test3485") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3486 (export "test3486") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3487 (export "test3487") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3488 (export "test3488") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3489 (export "test3489") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3490 (export "test3490") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3491 (export "test3491") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3492 (export "test3492") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3493 (export "test3493") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3494 (export "test3494") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3495 (export "test3495") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3496 (export "test3496") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3497 (export "test3497") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3498 (export "test3498") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3499 (export "test3499") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3500 (export "test3500") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3501 (export "test3501") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3502 (export "test3502") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3503 (export "test3503") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3504 (export "test3504") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3505 (export "test3505") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3506 (export "test3506") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3507 (export "test3507") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3508 (export "test3508") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3509 (export "test3509") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3510 (export "test3510") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3511 (export "test3511") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3512 (export "test3512") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3513 (export "test3513") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3514 (export "test3514") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3515 (export "test3515") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3516 (export "test3516") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3517 (export "test3517") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3518 (export "test3518") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3519 (export "test3519") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3520 (export "test3520") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3521 (export "test3521") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3522 (export "test3522") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3523 (export "test3523") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3524 (export "test3524") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3525 (export "test3525") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3526 (export "test3526") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3527 (export "test3527") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3528 (export "test3528") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3529 (export "test3529") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3530 (export "test3530") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3531 (export "test3531") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3532 (export "test3532") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3533 (export "test3533") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3534 (export "test3534") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3535 (export "test3535") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3536 (export "test3536") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3537 (export "test3537") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3538 (export "test3538") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3539 (export "test3539") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3540 (export "test3540") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3541 (export "test3541") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3542 (export "test3542") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3543 (export "test3543") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3544 (export "test3544") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3545 (export "test3545") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3546 (export "test3546") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3547 (export "test3547") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3548 (export "test3548") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3549 (export "test3549") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3550 (export "test3550") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3551 (export "test3551") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3552 (export "test3552") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3553 (export "test3553") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3554 (export "test3554") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3555 (export "test3555") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3556 (export "test3556") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3557 (export "test3557") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3558 (export "test3558") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3559 (export "test3559") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3560 (export "test3560") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3561 (export "test3561") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3562 (export "test3562") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3563 (export "test3563") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3564 (export "test3564") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3565 (export "test3565") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3566 (export "test3566") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3567 (export "test3567") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3568 (export "test3568") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3569 (export "test3569") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3570 (export "test3570") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3571 (export "test3571") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3572 (export "test3572") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3573 (export "test3573") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3574 (export "test3574") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3575 (export "test3575") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3576 (export "test3576") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3577 (export "test3577") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3578 (export "test3578") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3579 (export "test3579") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3580 (export "test3580") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3581 (export "test3581") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3582 (export "test3582") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3583 (export "test3583") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3584 (export "test3584") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3585 (export "test3585") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3586 (export "test3586") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3587 (export "test3587") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3588 (export "test3588") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3589 (export "test3589") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3590 (export "test3590") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3591 (export "test3591") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3592 (export "test3592") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3593 (export "test3593") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3594 (export "test3594") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3595 (export "test3595") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3596 (export "test3596") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3597 (export "test3597") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3598 (export "test3598") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3599 (export "test3599") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3600 (export "test3600") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3601 (export "test3601") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3602 (export "test3602") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3603 (export "test3603") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3604 (export "test3604") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3605 (export "test3605") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3606 (export "test3606") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3607 (export "test3607") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3608 (export "test3608") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3609 (export "test3609") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3610 (export "test3610") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3611 (export "test3611") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3612 (export "test3612") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3613 (export "test3613") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3614 (export "test3614") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3615 (export "test3615") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3616 (export "test3616") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3617 (export "test3617") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3618 (export "test3618") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3619 (export "test3619") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3620 (export "test3620") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3621 (export "test3621") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3622 (export "test3622") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3623 (export "test3623") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3624 (export "test3624") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3625 (export "test3625") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3626 (export "test3626") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3627 (export "test3627") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3628 (export "test3628") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3629 (export "test3629") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3630 (export "test3630") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3631 (export "test3631") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3632 (export "test3632") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3633 (export "test3633") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3634 (export "test3634") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3635 (export "test3635") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3636 (export "test3636") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3637 (export "test3637") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3638 (export "test3638") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3639 (export "test3639") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3640 (export "test3640") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3641 (export "test3641") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3642 (export "test3642") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3643 (export "test3643") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3644 (export "test3644") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3645 (export "test3645") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3646 (export "test3646") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3647 (export "test3647") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3648 (export "test3648") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3649 (export "test3649") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3650 (export "test3650") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3651 (export "test3651") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3652 (export "test3652") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3653 (export "test3653") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3654 (export "test3654") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3655 (export "test3655") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3656 (export "test3656") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3657 (export "test3657") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3658 (export "test3658") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3659 (export "test3659") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3660 (export "test3660") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3661 (export "test3661") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3662 (export "test3662") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3663 (export "test3663") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3664 (export "test3664") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3665 (export "test3665") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3666 (export "test3666") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3667 (export "test3667") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3668 (export "test3668") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3669 (export "test3669") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3670 (export "test3670") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3671 (export "test3671") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3672 (export "test3672") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3673 (export "test3673") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3674 (export "test3674") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3675 (export "test3675") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3676 (export "test3676") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3677 (export "test3677") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3678 (export "test3678") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3679 (export "test3679") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3680 (export "test3680") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3681 (export "test3681") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3682 (export "test3682") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3683 (export "test3683") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3684 (export "test3684") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3685 (export "test3685") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3686 (export "test3686") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3687 (export "test3687") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3688 (export "test3688") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3689 (export "test3689") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3690 (export "test3690") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3691 (export "test3691") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3692 (export "test3692") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3693 (export "test3693") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3694 (export "test3694") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3695 (export "test3695") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3696 (export "test3696") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3697 (export "test3697") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3698 (export "test3698") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3699 (export "test3699") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3700 (export "test3700") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3701 (export "test3701") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3702 (export "test3702") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3703 (export "test3703") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3704 (export "test3704") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3705 (export "test3705") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3706 (export "test3706") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3707 (export "test3707") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3708 (export "test3708") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3709 (export "test3709") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3710 (export "test3710") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3711 (export "test3711") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3712 (export "test3712") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3713 (export "test3713") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3714 (export "test3714") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3715 (export "test3715") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3716 (export "test3716") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3717 (export "test3717") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3718 (export "test3718") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3719 (export "test3719") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3720 (export "test3720") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3721 (export "test3721") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3722 (export "test3722") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3723 (export "test3723") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3724 (export "test3724") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3725 (export "test3725") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3726 (export "test3726") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3727 (export "test3727") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3728 (export "test3728") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3729 (export "test3729") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3730 (export "test3730") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3731 (export "test3731") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3732 (export "test3732") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3733 (export "test3733") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3734 (export "test3734") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3735 (export "test3735") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3736 (export "test3736") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3737 (export "test3737") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3738 (export "test3738") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3739 (export "test3739") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3740 (export "test3740") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3741 (export "test3741") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3742 (export "test3742") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3743 (export "test3743") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3744 (export "test3744") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3745 (export "test3745") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3746 (export "test3746") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3747 (export "test3747") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3748 (export "test3748") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3749 (export "test3749") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3750 (export "test3750") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3751 (export "test3751") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3752 (export "test3752") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3753 (export "test3753") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3754 (export "test3754") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3755 (export "test3755") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3756 (export "test3756") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3757 (export "test3757") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3758 (export "test3758") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3759 (export "test3759") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3760 (export "test3760") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3761 (export "test3761") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3762 (export "test3762") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3763 (export "test3763") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3764 (export "test3764") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3765 (export "test3765") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3766 (export "test3766") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3767 (export "test3767") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3768 (export "test3768") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3769 (export "test3769") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3770 (export "test3770") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3771 (export "test3771") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3772 (export "test3772") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3773 (export "test3773") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3774 (export "test3774") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3775 (export "test3775") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3776 (export "test3776") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3777 (export "test3777") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3778 (export "test3778") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3779 (export "test3779") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3780 (export "test3780") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3781 (export "test3781") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3782 (export "test3782") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3783 (export "test3783") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3784 (export "test3784") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3785 (export "test3785") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3786 (export "test3786") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3787 (export "test3787") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3788 (export "test3788") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3789 (export "test3789") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3790 (export "test3790") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3791 (export "test3791") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3792 (export "test3792") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3793 (export "test3793") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3794 (export "test3794") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3795 (export "test3795") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3796 (export "test3796") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3797 (export "test3797") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3798 (export "test3798") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3799 (export "test3799") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3800 (export "test3800") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3801 (export "test3801") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3802 (export "test3802") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3803 (export "test3803") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3804 (export "test3804") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3805 (export "test3805") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3806 (export "test3806") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3807 (export "test3807") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3808 (export "test3808") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3809 (export "test3809") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3810 (export "test3810") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3811 (export "test3811") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3812 (export "test3812") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3813 (export "test3813") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3814 (export "test3814") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3815 (export "test3815") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3816 (export "test3816") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3817 (export "test3817") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3818 (export "test3818") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3819 (export "test3819") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3820 (export "test3820") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3821 (export "test3821") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3822 (export "test3822") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3823 (export "test3823") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3824 (export "test3824") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3825 (export "test3825") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3826 (export "test3826") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3827 (export "test3827") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3828 (export "test3828") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3829 (export "test3829") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3830 (export "test3830") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3831 (export "test3831") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3832 (export "test3832") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3833 (export "test3833") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3834 (export "test3834") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3835 (export "test3835") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3836 (export "test3836") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3837 (export "test3837") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3838 (export "test3838") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3839 (export "test3839") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3840 (export "test3840") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3841 (export "test3841") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3842 (export "test3842") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3843 (export "test3843") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3844 (export "test3844") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3845 (export "test3845") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3846 (export "test3846") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3847 (export "test3847") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3848 (export "test3848") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3849 (export "test3849") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3850 (export "test3850") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3851 (export "test3851") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3852 (export "test3852") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3853 (export "test3853") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3854 (export "test3854") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3855 (export "test3855") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3856 (export "test3856") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3857 (export "test3857") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3858 (export "test3858") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3859 (export "test3859") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3860 (export "test3860") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3861 (export "test3861") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3862 (export "test3862") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3863 (export "test3863") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3864 (export "test3864") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3865 (export "test3865") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3866 (export "test3866") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3867 (export "test3867") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3868 (export "test3868") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3869 (export "test3869") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3870 (export "test3870") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3871 (export "test3871") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3872 (export "test3872") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3873 (export "test3873") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3874 (export "test3874") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3875 (export "test3875") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3876 (export "test3876") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3877 (export "test3877") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3878 (export "test3878") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3879 (export "test3879") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3880 (export "test3880") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3881 (export "test3881") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3882 (export "test3882") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3883 (export "test3883") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3884 (export "test3884") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3885 (export "test3885") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3886 (export "test3886") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3887 (export "test3887") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3888 (export "test3888") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3889 (export "test3889") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3890 (export "test3890") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3891 (export "test3891") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3892 (export "test3892") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3893 (export "test3893") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3894 (export "test3894") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3895 (export "test3895") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3896 (export "test3896") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3897 (export "test3897") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3898 (export "test3898") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3899 (export "test3899") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3900 (export "test3900") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3901 (export "test3901") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3902 (export "test3902") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3903 (export "test3903") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3904 (export "test3904") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3905 (export "test3905") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3906 (export "test3906") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3907 (export "test3907") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3908 (export "test3908") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3909 (export "test3909") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3910 (export "test3910") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3911 (export "test3911") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3912 (export "test3912") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3913 (export "test3913") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3914 (export "test3914") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3915 (export "test3915") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3916 (export "test3916") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3917 (export "test3917") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3918 (export "test3918") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3919 (export "test3919") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3920 (export "test3920") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3921 (export "test3921") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3922 (export "test3922") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3923 (export "test3923") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3924 (export "test3924") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3925 (export "test3925") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3926 (export "test3926") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3927 (export "test3927") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3928 (export "test3928") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3929 (export "test3929") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3930 (export "test3930") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3931 (export "test3931") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3932 (export "test3932") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3933 (export "test3933") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3934 (export "test3934") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3935 (export "test3935") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3936 (export "test3936") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3937 (export "test3937") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3938 (export "test3938") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3939 (export "test3939") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3940 (export "test3940") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3941 (export "test3941") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3942 (export "test3942") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3943 (export "test3943") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3944 (export "test3944") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3945 (export "test3945") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3946 (export "test3946") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3947 (export "test3947") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3948 (export "test3948") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3949 (export "test3949") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3950 (export "test3950") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3951 (export "test3951") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3952 (export "test3952") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3953 (export "test3953") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3954 (export "test3954") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3955 (export "test3955") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3956 (export "test3956") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3957 (export "test3957") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3958 (export "test3958") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3959 (export "test3959") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3960 (export "test3960") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3961 (export "test3961") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3962 (export "test3962") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3963 (export "test3963") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3964 (export "test3964") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3965 (export "test3965") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3966 (export "test3966") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3967 (export "test3967") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3968 (export "test3968") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3969 (export "test3969") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3970 (export "test3970") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3971 (export "test3971") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3972 (export "test3972") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3973 (export "test3973") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3974 (export "test3974") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3975 (export "test3975") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3976 (export "test3976") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3977 (export "test3977") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3978 (export "test3978") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3979 (export "test3979") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3980 (export "test3980") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3981 (export "test3981") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3982 (export "test3982") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3983 (export "test3983") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3984 (export "test3984") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3985 (export "test3985") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3986 (export "test3986") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3987 (export "test3987") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3988 (export "test3988") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3989 (export "test3989") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3990 (export "test3990") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3991 (export "test3991") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3992 (export "test3992") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3993 (export "test3993") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3994 (export "test3994") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3995 (export "test3995") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3996 (export "test3996") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3997 (export "test3997") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3998 (export "test3998") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test3999 (export "test3999") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4000 (export "test4000") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4001 (export "test4001") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4002 (export "test4002") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4003 (export "test4003") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4004 (export "test4004") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4005 (export "test4005") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4006 (export "test4006") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4007 (export "test4007") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4008 (export "test4008") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4009 (export "test4009") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4010 (export "test4010") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4011 (export "test4011") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4012 (export "test4012") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4013 (export "test4013") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4014 (export "test4014") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4015 (export "test4015") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4016 (export "test4016") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4017 (export "test4017") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4018 (export "test4018") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4019 (export "test4019") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4020 (export "test4020") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4021 (export "test4021") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4022 (export "test4022") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4023 (export "test4023") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4024 (export "test4024") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4025 (export "test4025") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4026 (export "test4026") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4027 (export "test4027") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4028 (export "test4028") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4029 (export "test4029") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4030 (export "test4030") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4031 (export "test4031") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4032 (export "test4032") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4033 (export "test4033") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4034 (export "test4034") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4035 (export "test4035") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4036 (export "test4036") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4037 (export "test4037") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4038 (export "test4038") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4039 (export "test4039") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4040 (export "test4040") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4041 (export "test4041") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4042 (export "test4042") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4043 (export "test4043") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4044 (export "test4044") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4045 (export "test4045") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4046 (export "test4046") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4047 (export "test4047") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4048 (export "test4048") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4049 (export "test4049") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4050 (export "test4050") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4051 (export "test4051") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4052 (export "test4052") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4053 (export "test4053") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4054 (export "test4054") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4055 (export "test4055") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4056 (export "test4056") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4057 (export "test4057") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4058 (export "test4058") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4059 (export "test4059") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4060 (export "test4060") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4061 (export "test4061") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4062 (export "test4062") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4063 (export "test4063") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4064 (export "test4064") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4065 (export "test4065") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4066 (export "test4066") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4067 (export "test4067") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4068 (export "test4068") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4069 (export "test4069") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4070 (export "test4070") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4071 (export "test4071") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4072 (export "test4072") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4073 (export "test4073") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4074 (export "test4074") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4075 (export "test4075") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4076 (export "test4076") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4077 (export "test4077") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4078 (export "test4078") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4079 (export "test4079") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4080 (export "test4080") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4081 (export "test4081") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4082 (export "test4082") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4083 (export "test4083") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4084 (export "test4084") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4085 (export "test4085") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4086 (export "test4086") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4087 (export "test4087") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4088 (export "test4088") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4089 (export "test4089") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4090 (export "test4090") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4091 (export "test4091") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4092 (export "test4092") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4093 (export "test4093") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4094 (export "test4094") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4095 (export "test4095") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4096 (export "test4096") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4097 (export "test4097") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4098 (export "test4098") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4099 (export "test4099") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4100 (export "test4100") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4101 (export "test4101") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4102 (export "test4102") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4103 (export "test4103") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4104 (export "test4104") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4105 (export "test4105") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4106 (export "test4106") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4107 (export "test4107") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4108 (export "test4108") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4109 (export "test4109") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4110 (export "test4110") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4111 (export "test4111") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4112 (export "test4112") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4113 (export "test4113") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4114 (export "test4114") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4115 (export "test4115") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4116 (export "test4116") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4117 (export "test4117") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4118 (export "test4118") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4119 (export "test4119") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4120 (export "test4120") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4121 (export "test4121") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4122 (export "test4122") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4123 (export "test4123") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4124 (export "test4124") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4125 (export "test4125") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4126 (export "test4126") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4127 (export "test4127") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4128 (export "test4128") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4129 (export "test4129") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4130 (export "test4130") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4131 (export "test4131") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4132 (export "test4132") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4133 (export "test4133") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4134 (export "test4134") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4135 (export "test4135") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4136 (export "test4136") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4137 (export "test4137") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4138 (export "test4138") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4139 (export "test4139") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4140 (export "test4140") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4141 (export "test4141") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4142 (export "test4142") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4143 (export "test4143") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4144 (export "test4144") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4145 (export "test4145") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4146 (export "test4146") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4147 (export "test4147") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4148 (export "test4148") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4149 (export "test4149") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4150 (export "test4150") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4151 (export "test4151") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4152 (export "test4152") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4153 (export "test4153") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4154 (export "test4154") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4155 (export "test4155") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4156 (export "test4156") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4157 (export "test4157") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4158 (export "test4158") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4159 (export "test4159") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4160 (export "test4160") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4161 (export "test4161") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4162 (export "test4162") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4163 (export "test4163") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4164 (export "test4164") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4165 (export "test4165") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4166 (export "test4166") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4167 (export "test4167") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4168 (export "test4168") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4169 (export "test4169") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4170 (export "test4170") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4171 (export "test4171") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4172 (export "test4172") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4173 (export "test4173") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4174 (export "test4174") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4175 (export "test4175") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4176 (export "test4176") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4177 (export "test4177") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4178 (export "test4178") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4179 (export "test4179") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4180 (export "test4180") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4181 (export "test4181") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4182 (export "test4182") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4183 (export "test4183") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4184 (export "test4184") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4185 (export "test4185") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4186 (export "test4186") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4187 (export "test4187") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4188 (export "test4188") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4189 (export "test4189") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4190 (export "test4190") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4191 (export "test4191") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4192 (export "test4192") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4193 (export "test4193") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4194 (export "test4194") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4195 (export "test4195") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4196 (export "test4196") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4197 (export "test4197") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4198 (export "test4198") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4199 (export "test4199") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4200 (export "test4200") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4201 (export "test4201") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4202 (export "test4202") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4203 (export "test4203") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4204 (export "test4204") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4205 (export "test4205") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4206 (export "test4206") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4207 (export "test4207") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4208 (export "test4208") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4209 (export "test4209") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4210 (export "test4210") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4211 (export "test4211") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4212 (export "test4212") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4213 (export "test4213") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4214 (export "test4214") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4215 (export "test4215") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4216 (export "test4216") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4217 (export "test4217") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4218 (export "test4218") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4219 (export "test4219") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4220 (export "test4220") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4221 (export "test4221") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4222 (export "test4222") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4223 (export "test4223") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4224 (export "test4224") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4225 (export "test4225") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4226 (export "test4226") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4227 (export "test4227") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4228 (export "test4228") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4229 (export "test4229") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4230 (export "test4230") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4231 (export "test4231") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4232 (export "test4232") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4233 (export "test4233") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4234 (export "test4234") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4235 (export "test4235") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4236 (export "test4236") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4237 (export "test4237") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4238 (export "test4238") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4239 (export "test4239") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4240 (export "test4240") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4241 (export "test4241") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4242 (export "test4242") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4243 (export "test4243") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4244 (export "test4244") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4245 (export "test4245") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4246 (export "test4246") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4247 (export "test4247") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4248 (export "test4248") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4249 (export "test4249") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4250 (export "test4250") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4251 (export "test4251") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4252 (export "test4252") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4253 (export "test4253") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4254 (export "test4254") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4255 (export "test4255") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4256 (export "test4256") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4257 (export "test4257") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4258 (export "test4258") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4259 (export "test4259") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4260 (export "test4260") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4261 (export "test4261") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4262 (export "test4262") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4263 (export "test4263") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4264 (export "test4264") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4265 (export "test4265") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4266 (export "test4266") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4267 (export "test4267") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4268 (export "test4268") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4269 (export "test4269") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4270 (export "test4270") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4271 (export "test4271") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4272 (export "test4272") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4273 (export "test4273") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4274 (export "test4274") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4275 (export "test4275") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4276 (export "test4276") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4277 (export "test4277") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4278 (export "test4278") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4279 (export "test4279") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4280 (export "test4280") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4281 (export "test4281") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4282 (export "test4282") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4283 (export "test4283") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4284 (export "test4284") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4285 (export "test4285") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4286 (export "test4286") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4287 (export "test4287") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4288 (export "test4288") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4289 (export "test4289") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4290 (export "test4290") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4291 (export "test4291") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4292 (export "test4292") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4293 (export "test4293") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4294 (export "test4294") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4295 (export "test4295") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4296 (export "test4296") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4297 (export "test4297") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4298 (export "test4298") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4299 (export "test4299") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4300 (export "test4300") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4301 (export "test4301") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4302 (export "test4302") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4303 (export "test4303") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4304 (export "test4304") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4305 (export "test4305") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4306 (export "test4306") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4307 (export "test4307") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4308 (export "test4308") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4309 (export "test4309") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4310 (export "test4310") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4311 (export "test4311") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4312 (export "test4312") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4313 (export "test4313") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4314 (export "test4314") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4315 (export "test4315") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4316 (export "test4316") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4317 (export "test4317") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4318 (export "test4318") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4319 (export "test4319") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4320 (export "test4320") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4321 (export "test4321") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4322 (export "test4322") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4323 (export "test4323") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4324 (export "test4324") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4325 (export "test4325") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4326 (export "test4326") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4327 (export "test4327") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4328 (export "test4328") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4329 (export "test4329") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4330 (export "test4330") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4331 (export "test4331") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4332 (export "test4332") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4333 (export "test4333") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4334 (export "test4334") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4335 (export "test4335") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4336 (export "test4336") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4337 (export "test4337") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4338 (export "test4338") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4339 (export "test4339") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4340 (export "test4340") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4341 (export "test4341") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4342 (export "test4342") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4343 (export "test4343") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4344 (export "test4344") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4345 (export "test4345") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4346 (export "test4346") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4347 (export "test4347") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4348 (export "test4348") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4349 (export "test4349") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4350 (export "test4350") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4351 (export "test4351") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4352 (export "test4352") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4353 (export "test4353") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4354 (export "test4354") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4355 (export "test4355") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4356 (export "test4356") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4357 (export "test4357") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4358 (export "test4358") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4359 (export "test4359") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4360 (export "test4360") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4361 (export "test4361") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4362 (export "test4362") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4363 (export "test4363") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4364 (export "test4364") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4365 (export "test4365") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4366 (export "test4366") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4367 (export "test4367") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4368 (export "test4368") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4369 (export "test4369") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4370 (export "test4370") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4371 (export "test4371") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4372 (export "test4372") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4373 (export "test4373") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4374 (export "test4374") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4375 (export "test4375") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4376 (export "test4376") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4377 (export "test4377") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4378 (export "test4378") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4379 (export "test4379") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4380 (export "test4380") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4381 (export "test4381") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4382 (export "test4382") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4383 (export "test4383") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4384 (export "test4384") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4385 (export "test4385") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4386 (export "test4386") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4387 (export "test4387") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4388 (export "test4388") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4389 (export "test4389") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4390 (export "test4390") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4391 (export "test4391") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4392 (export "test4392") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4393 (export "test4393") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4394 (export "test4394") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4395 (export "test4395") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4396 (export "test4396") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4397 (export "test4397") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4398 (export "test4398") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4399 (export "test4399") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4400 (export "test4400") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4401 (export "test4401") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4402 (export "test4402") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4403 (export "test4403") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4404 (export "test4404") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4405 (export "test4405") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4406 (export "test4406") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4407 (export "test4407") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4408 (export "test4408") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4409 (export "test4409") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4410 (export "test4410") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4411 (export "test4411") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4412 (export "test4412") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4413 (export "test4413") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4414 (export "test4414") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4415 (export "test4415") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4416 (export "test4416") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4417 (export "test4417") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4418 (export "test4418") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4419 (export "test4419") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4420 (export "test4420") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4421 (export "test4421") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4422 (export "test4422") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4423 (export "test4423") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4424 (export "test4424") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4425 (export "test4425") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4426 (export "test4426") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4427 (export "test4427") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4428 (export "test4428") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4429 (export "test4429") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4430 (export "test4430") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4431 (export "test4431") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4432 (export "test4432") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4433 (export "test4433") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4434 (export "test4434") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4435 (export "test4435") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4436 (export "test4436") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4437 (export "test4437") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4438 (export "test4438") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4439 (export "test4439") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4440 (export "test4440") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4441 (export "test4441") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4442 (export "test4442") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4443 (export "test4443") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4444 (export "test4444") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4445 (export "test4445") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4446 (export "test4446") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4447 (export "test4447") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4448 (export "test4448") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4449 (export "test4449") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4450 (export "test4450") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4451 (export "test4451") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4452 (export "test4452") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4453 (export "test4453") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4454 (export "test4454") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4455 (export "test4455") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4456 (export "test4456") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4457 (export "test4457") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4458 (export "test4458") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4459 (export "test4459") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4460 (export "test4460") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4461 (export "test4461") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4462 (export "test4462") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4463 (export "test4463") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4464 (export "test4464") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4465 (export "test4465") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4466 (export "test4466") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4467 (export "test4467") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4468 (export "test4468") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4469 (export "test4469") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4470 (export "test4470") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4471 (export "test4471") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4472 (export "test4472") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4473 (export "test4473") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4474 (export "test4474") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4475 (export "test4475") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4476 (export "test4476") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4477 (export "test4477") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4478 (export "test4478") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4479 (export "test4479") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4480 (export "test4480") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4481 (export "test4481") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4482 (export "test4482") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4483 (export "test4483") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4484 (export "test4484") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4485 (export "test4485") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4486 (export "test4486") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4487 (export "test4487") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4488 (export "test4488") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4489 (export "test4489") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4490 (export "test4490") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4491 (export "test4491") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4492 (export "test4492") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4493 (export "test4493") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4494 (export "test4494") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4495 (export "test4495") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4496 (export "test4496") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4497 (export "test4497") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4498 (export "test4498") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4499 (export "test4499") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4500 (export "test4500") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4501 (export "test4501") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4502 (export "test4502") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4503 (export "test4503") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4504 (export "test4504") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4505 (export "test4505") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4506 (export "test4506") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4507 (export "test4507") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4508 (export "test4508") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4509 (export "test4509") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4510 (export "test4510") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4511 (export "test4511") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4512 (export "test4512") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4513 (export "test4513") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4514 (export "test4514") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4515 (export "test4515") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4516 (export "test4516") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4517 (export "test4517") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4518 (export "test4518") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4519 (export "test4519") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4520 (export "test4520") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4521 (export "test4521") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4522 (export "test4522") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4523 (export "test4523") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4524 (export "test4524") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4525 (export "test4525") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4526 (export "test4526") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4527 (export "test4527") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4528 (export "test4528") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4529 (export "test4529") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4530 (export "test4530") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4531 (export "test4531") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4532 (export "test4532") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4533 (export "test4533") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4534 (export "test4534") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4535 (export "test4535") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4536 (export "test4536") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4537 (export "test4537") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4538 (export "test4538") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4539 (export "test4539") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4540 (export "test4540") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4541 (export "test4541") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4542 (export "test4542") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4543 (export "test4543") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4544 (export "test4544") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4545 (export "test4545") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4546 (export "test4546") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4547 (export "test4547") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4548 (export "test4548") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4549 (export "test4549") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4550 (export "test4550") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4551 (export "test4551") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4552 (export "test4552") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4553 (export "test4553") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4554 (export "test4554") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4555 (export "test4555") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4556 (export "test4556") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4557 (export "test4557") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4558 (export "test4558") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4559 (export "test4559") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4560 (export "test4560") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4561 (export "test4561") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4562 (export "test4562") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4563 (export "test4563") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4564 (export "test4564") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4565 (export "test4565") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4566 (export "test4566") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4567 (export "test4567") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4568 (export "test4568") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4569 (export "test4569") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4570 (export "test4570") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4571 (export "test4571") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4572 (export "test4572") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4573 (export "test4573") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4574 (export "test4574") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4575 (export "test4575") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4576 (export "test4576") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4577 (export "test4577") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4578 (export "test4578") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4579 (export "test4579") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4580 (export "test4580") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4581 (export "test4581") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4582 (export "test4582") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4583 (export "test4583") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4584 (export "test4584") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4585 (export "test4585") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4586 (export "test4586") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4587 (export "test4587") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4588 (export "test4588") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4589 (export "test4589") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4590 (export "test4590") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4591 (export "test4591") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4592 (export "test4592") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4593 (export "test4593") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4594 (export "test4594") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4595 (export "test4595") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4596 (export "test4596") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4597 (export "test4597") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4598 (export "test4598") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4599 (export "test4599") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4600 (export "test4600") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4601 (export "test4601") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4602 (export "test4602") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4603 (export "test4603") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4604 (export "test4604") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4605 (export "test4605") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4606 (export "test4606") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4607 (export "test4607") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4608 (export "test4608") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4609 (export "test4609") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4610 (export "test4610") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4611 (export "test4611") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4612 (export "test4612") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4613 (export "test4613") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4614 (export "test4614") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4615 (export "test4615") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4616 (export "test4616") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4617 (export "test4617") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4618 (export "test4618") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4619 (export "test4619") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4620 (export "test4620") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4621 (export "test4621") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4622 (export "test4622") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4623 (export "test4623") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4624 (export "test4624") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4625 (export "test4625") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4626 (export "test4626") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4627 (export "test4627") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4628 (export "test4628") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4629 (export "test4629") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4630 (export "test4630") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4631 (export "test4631") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4632 (export "test4632") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4633 (export "test4633") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4634 (export "test4634") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4635 (export "test4635") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4636 (export "test4636") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4637 (export "test4637") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4638 (export "test4638") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4639 (export "test4639") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4640 (export "test4640") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4641 (export "test4641") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4642 (export "test4642") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4643 (export "test4643") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4644 (export "test4644") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4645 (export "test4645") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4646 (export "test4646") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4647 (export "test4647") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4648 (export "test4648") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4649 (export "test4649") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4650 (export "test4650") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4651 (export "test4651") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4652 (export "test4652") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4653 (export "test4653") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4654 (export "test4654") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4655 (export "test4655") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4656 (export "test4656") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4657 (export "test4657") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4658 (export "test4658") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4659 (export "test4659") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4660 (export "test4660") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4661 (export "test4661") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4662 (export "test4662") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4663 (export "test4663") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4664 (export "test4664") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4665 (export "test4665") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4666 (export "test4666") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4667 (export "test4667") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4668 (export "test4668") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4669 (export "test4669") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4670 (export "test4670") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4671 (export "test4671") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4672 (export "test4672") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4673 (export "test4673") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4674 (export "test4674") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4675 (export "test4675") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4676 (export "test4676") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4677 (export "test4677") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4678 (export "test4678") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4679 (export "test4679") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4680 (export "test4680") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4681 (export "test4681") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4682 (export "test4682") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4683 (export "test4683") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4684 (export "test4684") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4685 (export "test4685") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4686 (export "test4686") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4687 (export "test4687") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4688 (export "test4688") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4689 (export "test4689") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4690 (export "test4690") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4691 (export "test4691") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4692 (export "test4692") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4693 (export "test4693") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4694 (export "test4694") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4695 (export "test4695") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4696 (export "test4696") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4697 (export "test4697") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4698 (export "test4698") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4699 (export "test4699") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4700 (export "test4700") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4701 (export "test4701") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4702 (export "test4702") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4703 (export "test4703") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4704 (export "test4704") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4705 (export "test4705") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4706 (export "test4706") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4707 (export "test4707") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4708 (export "test4708") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4709 (export "test4709") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4710 (export "test4710") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4711 (export "test4711") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4712 (export "test4712") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4713 (export "test4713") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4714 (export "test4714") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4715 (export "test4715") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4716 (export "test4716") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4717 (export "test4717") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4718 (export "test4718") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4719 (export "test4719") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4720 (export "test4720") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4721 (export "test4721") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4722 (export "test4722") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4723 (export "test4723") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4724 (export "test4724") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4725 (export "test4725") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4726 (export "test4726") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4727 (export "test4727") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4728 (export "test4728") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4729 (export "test4729") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4730 (export "test4730") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4731 (export "test4731") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4732 (export "test4732") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4733 (export "test4733") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4734 (export "test4734") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4735 (export "test4735") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4736 (export "test4736") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4737 (export "test4737") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4738 (export "test4738") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4739 (export "test4739") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4740 (export "test4740") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4741 (export "test4741") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4742 (export "test4742") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4743 (export "test4743") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4744 (export "test4744") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4745 (export "test4745") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4746 (export "test4746") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4747 (export "test4747") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4748 (export "test4748") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4749 (export "test4749") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4750 (export "test4750") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4751 (export "test4751") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4752 (export "test4752") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4753 (export "test4753") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4754 (export "test4754") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4755 (export "test4755") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4756 (export "test4756") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4757 (export "test4757") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4758 (export "test4758") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4759 (export "test4759") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4760 (export "test4760") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4761 (export "test4761") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4762 (export "test4762") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4763 (export "test4763") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4764 (export "test4764") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4765 (export "test4765") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4766 (export "test4766") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4767 (export "test4767") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4768 (export "test4768") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4769 (export "test4769") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4770 (export "test4770") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4771 (export "test4771") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4772 (export "test4772") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4773 (export "test4773") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4774 (export "test4774") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4775 (export "test4775") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4776 (export "test4776") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4777 (export "test4777") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4778 (export "test4778") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4779 (export "test4779") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4780 (export "test4780") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4781 (export "test4781") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4782 (export "test4782") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4783 (export "test4783") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4784 (export "test4784") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4785 (export "test4785") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4786 (export "test4786") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4787 (export "test4787") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4788 (export "test4788") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4789 (export "test4789") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4790 (export "test4790") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4791 (export "test4791") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4792 (export "test4792") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4793 (export "test4793") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4794 (export "test4794") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4795 (export "test4795") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4796 (export "test4796") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4797 (export "test4797") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4798 (export "test4798") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4799 (export "test4799") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4800 (export "test4800") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4801 (export "test4801") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4802 (export "test4802") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4803 (export "test4803") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4804 (export "test4804") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4805 (export "test4805") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4806 (export "test4806") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4807 (export "test4807") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4808 (export "test4808") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4809 (export "test4809") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4810 (export "test4810") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4811 (export "test4811") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4812 (export "test4812") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4813 (export "test4813") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4814 (export "test4814") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4815 (export "test4815") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4816 (export "test4816") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4817 (export "test4817") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4818 (export "test4818") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4819 (export "test4819") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4820 (export "test4820") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4821 (export "test4821") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4822 (export "test4822") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4823 (export "test4823") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4824 (export "test4824") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4825 (export "test4825") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4826 (export "test4826") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4827 (export "test4827") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4828 (export "test4828") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4829 (export "test4829") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4830 (export "test4830") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4831 (export "test4831") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4832 (export "test4832") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4833 (export "test4833") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4834 (export "test4834") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4835 (export "test4835") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4836 (export "test4836") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4837 (export "test4837") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4838 (export "test4838") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4839 (export "test4839") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4840 (export "test4840") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4841 (export "test4841") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4842 (export "test4842") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4843 (export "test4843") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4844 (export "test4844") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4845 (export "test4845") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4846 (export "test4846") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4847 (export "test4847") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4848 (export "test4848") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4849 (export "test4849") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4850 (export "test4850") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4851 (export "test4851") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4852 (export "test4852") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4853 (export "test4853") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4854 (export "test4854") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4855 (export "test4855") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4856 (export "test4856") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4857 (export "test4857") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4858 (export "test4858") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4859 (export "test4859") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4860 (export "test4860") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4861 (export "test4861") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4862 (export "test4862") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4863 (export "test4863") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4864 (export "test4864") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4865 (export "test4865") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4866 (export "test4866") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4867 (export "test4867") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4868 (export "test4868") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4869 (export "test4869") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4870 (export "test4870") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4871 (export "test4871") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4872 (export "test4872") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4873 (export "test4873") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4874 (export "test4874") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4875 (export "test4875") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4876 (export "test4876") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4877 (export "test4877") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4878 (export "test4878") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4879 (export "test4879") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4880 (export "test4880") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4881 (export "test4881") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4882 (export "test4882") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4883 (export "test4883") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4884 (export "test4884") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4885 (export "test4885") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4886 (export "test4886") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4887 (export "test4887") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4888 (export "test4888") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4889 (export "test4889") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4890 (export "test4890") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4891 (export "test4891") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4892 (export "test4892") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4893 (export "test4893") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4894 (export "test4894") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4895 (export "test4895") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4896 (export "test4896") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4897 (export "test4897") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4898 (export "test4898") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4899 (export "test4899") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4900 (export "test4900") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4901 (export "test4901") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4902 (export "test4902") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4903 (export "test4903") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4904 (export "test4904") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4905 (export "test4905") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4906 (export "test4906") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4907 (export "test4907") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4908 (export "test4908") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4909 (export "test4909") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4910 (export "test4910") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4911 (export "test4911") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4912 (export "test4912") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4913 (export "test4913") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4914 (export "test4914") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4915 (export "test4915") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4916 (export "test4916") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4917 (export "test4917") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4918 (export "test4918") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4919 (export "test4919") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4920 (export "test4920") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4921 (export "test4921") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4922 (export "test4922") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4923 (export "test4923") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4924 (export "test4924") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4925 (export "test4925") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4926 (export "test4926") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4927 (export "test4927") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4928 (export "test4928") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4929 (export "test4929") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4930 (export "test4930") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4931 (export "test4931") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4932 (export "test4932") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4933 (export "test4933") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4934 (export "test4934") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4935 (export "test4935") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4936 (export "test4936") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4937 (export "test4937") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4938 (export "test4938") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4939 (export "test4939") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4940 (export "test4940") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4941 (export "test4941") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4942 (export "test4942") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4943 (export "test4943") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4944 (export "test4944") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4945 (export "test4945") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4946 (export "test4946") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4947 (export "test4947") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4948 (export "test4948") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4949 (export "test4949") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4950 (export "test4950") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4951 (export "test4951") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4952 (export "test4952") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4953 (export "test4953") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4954 (export "test4954") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4955 (export "test4955") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4956 (export "test4956") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4957 (export "test4957") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4958 (export "test4958") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4959 (export "test4959") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4960 (export "test4960") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4961 (export "test4961") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4962 (export "test4962") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4963 (export "test4963") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4964 (export "test4964") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4965 (export "test4965") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4966 (export "test4966") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4967 (export "test4967") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4968 (export "test4968") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4969 (export "test4969") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4970 (export "test4970") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4971 (export "test4971") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4972 (export "test4972") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4973 (export "test4973") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4974 (export "test4974") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4975 (export "test4975") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4976 (export "test4976") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4977 (export "test4977") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4978 (export "test4978") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4979 (export "test4979") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4980 (export "test4980") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4981 (export "test4981") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4982 (export "test4982") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4983 (export "test4983") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4984 (export "test4984") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4985 (export "test4985") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4986 (export "test4986") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4987 (export "test4987") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4988 (export "test4988") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4989 (export "test4989") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4990 (export "test4990") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4991 (export "test4991") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4992 (export "test4992") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4993 (export "test4993") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4994 (export "test4994") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4995 (export "test4995") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4996 (export "test4996") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4997 (export "test4997") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4998 (export "test4998") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) + (func $test4999 (export "test4999") + (param $p0 i32) + (param $p1 i32) + (result i32) + ;; Return sum of p0 + p1 + local.get $p0 + local.get $p1 + i32.add + ) +) diff --git a/src/test/app/wasm_fixtures/wat/locals_10k.wat b/src/test/app/wasm_fixtures/wat/locals_10k.wat new file mode 100644 index 0000000000..6cd6d4baf4 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/locals_10k.wat @@ -0,0 +1,50000 @@ +(module + (func $test (export "test") + (param $p0 i32) + (param $p1 i32) + (result i32) + (local $l2 i32) + (local $l3 i32) + (local $l4 i32) + (local $l5 i32) + (local $l6 i32) + (local $l7 i32) + (local $l8 i32) + (local $l9 i32) + (local $l10 i32) + (local $l11 i32) + (local $l12 i32) + (local $l13 i32) + (local $l14 i32) + (local $l15 i32) + (local $l16 i32) + (local $l17 i32) + (local $l18 i32) + (local $l19 i32) + (local $l20 i32) + (local $l21 i32) + (local $l22 i32) + (local $l23 i32) + (local $l24 i32) + (local $l25 i32) + (local $l26 i32) + (local $l27 i32) + (local $l28 i32) + (local $l29 i32) + (local $l30 i32) + (local $l31 i32) + (local $l32 i32) + (local $l33 i32) + (local $l34 i32) + (local $l35 i32) + (local $l36 i32) + (local $l37 i32) + (local $l38 i32) + (local $l39 i32) + (local $l40 i32) + (local $l41 i32) + (local $l42 i32) + (local $l43 i32) + (local $l44 i32) + (local $l45 i32) + (local $l46 i32) + (local $l47 i32) + (local $l48 i32) + (local $l49 i32) + (local $l50 i32) + (local $l51 i32) + (local $l52 i32) + (local $l53 i32) + (local $l54 i32) + (local $l55 i32) + (local $l56 i32) + (local $l57 i32) + (local $l58 i32) + (local $l59 i32) + (local $l60 i32) + (local $l61 i32) + (local $l62 i32) + (local $l63 i32) + (local $l64 i32) + (local $l65 i32) + (local $l66 i32) + (local $l67 i32) + (local $l68 i32) + (local $l69 i32) + (local $l70 i32) + (local $l71 i32) + (local $l72 i32) + (local $l73 i32) + (local $l74 i32) + (local $l75 i32) + (local $l76 i32) + (local $l77 i32) + (local $l78 i32) + (local $l79 i32) + (local $l80 i32) + (local $l81 i32) + (local $l82 i32) + (local $l83 i32) + (local $l84 i32) + (local $l85 i32) + (local $l86 i32) + (local $l87 i32) + (local $l88 i32) + (local $l89 i32) + (local $l90 i32) + (local $l91 i32) + (local $l92 i32) + (local $l93 i32) + (local $l94 i32) + (local $l95 i32) + (local $l96 i32) + (local $l97 i32) + (local $l98 i32) + (local $l99 i32) + (local $l100 i32) + (local $l101 i32) + (local $l102 i32) + (local $l103 i32) + (local $l104 i32) + (local $l105 i32) + (local $l106 i32) + (local $l107 i32) + (local $l108 i32) + (local $l109 i32) + (local $l110 i32) + (local $l111 i32) + (local $l112 i32) + (local $l113 i32) + (local $l114 i32) + (local $l115 i32) + (local $l116 i32) + (local $l117 i32) + (local $l118 i32) + (local $l119 i32) + (local $l120 i32) + (local $l121 i32) + (local $l122 i32) + (local $l123 i32) + (local $l124 i32) + (local $l125 i32) + (local $l126 i32) + (local $l127 i32) + (local $l128 i32) + (local $l129 i32) + (local $l130 i32) + (local $l131 i32) + (local $l132 i32) + (local $l133 i32) + (local $l134 i32) + (local $l135 i32) + (local $l136 i32) + (local $l137 i32) + (local $l138 i32) + (local $l139 i32) + (local $l140 i32) + (local $l141 i32) + (local $l142 i32) + (local $l143 i32) + (local $l144 i32) + (local $l145 i32) + (local $l146 i32) + (local $l147 i32) + (local $l148 i32) + (local $l149 i32) + (local $l150 i32) + (local $l151 i32) + (local $l152 i32) + (local $l153 i32) + (local $l154 i32) + (local $l155 i32) + (local $l156 i32) + (local $l157 i32) + (local $l158 i32) + (local $l159 i32) + (local $l160 i32) + (local $l161 i32) + (local $l162 i32) + (local $l163 i32) + (local $l164 i32) + (local $l165 i32) + (local $l166 i32) + (local $l167 i32) + (local $l168 i32) + (local $l169 i32) + (local $l170 i32) + (local $l171 i32) + (local $l172 i32) + (local $l173 i32) + (local $l174 i32) + (local $l175 i32) + (local $l176 i32) + (local $l177 i32) + (local $l178 i32) + (local $l179 i32) + (local $l180 i32) + (local $l181 i32) + (local $l182 i32) + (local $l183 i32) + (local $l184 i32) + (local $l185 i32) + (local $l186 i32) + (local $l187 i32) + (local $l188 i32) + (local $l189 i32) + (local $l190 i32) + (local $l191 i32) + (local $l192 i32) + (local $l193 i32) + (local $l194 i32) + (local $l195 i32) + (local $l196 i32) + (local $l197 i32) + (local $l198 i32) + (local $l199 i32) + (local $l200 i32) + (local $l201 i32) + (local $l202 i32) + (local $l203 i32) + (local $l204 i32) + (local $l205 i32) + (local $l206 i32) + (local $l207 i32) + (local $l208 i32) + (local $l209 i32) + (local $l210 i32) + (local $l211 i32) + (local $l212 i32) + (local $l213 i32) + (local $l214 i32) + (local $l215 i32) + (local $l216 i32) + (local $l217 i32) + (local $l218 i32) + (local $l219 i32) + (local $l220 i32) + (local $l221 i32) + (local $l222 i32) + (local $l223 i32) + (local $l224 i32) + (local $l225 i32) + (local $l226 i32) + (local $l227 i32) + (local $l228 i32) + (local $l229 i32) + (local $l230 i32) + (local $l231 i32) + (local $l232 i32) + (local $l233 i32) + (local $l234 i32) + (local $l235 i32) + (local $l236 i32) + (local $l237 i32) + (local $l238 i32) + (local $l239 i32) + (local $l240 i32) + (local $l241 i32) + (local $l242 i32) + (local $l243 i32) + (local $l244 i32) + (local $l245 i32) + (local $l246 i32) + (local $l247 i32) + (local $l248 i32) + (local $l249 i32) + (local $l250 i32) + (local $l251 i32) + (local $l252 i32) + (local $l253 i32) + (local $l254 i32) + (local $l255 i32) + (local $l256 i32) + (local $l257 i32) + (local $l258 i32) + (local $l259 i32) + (local $l260 i32) + (local $l261 i32) + (local $l262 i32) + (local $l263 i32) + (local $l264 i32) + (local $l265 i32) + (local $l266 i32) + (local $l267 i32) + (local $l268 i32) + (local $l269 i32) + (local $l270 i32) + (local $l271 i32) + (local $l272 i32) + (local $l273 i32) + (local $l274 i32) + (local $l275 i32) + (local $l276 i32) + (local $l277 i32) + (local $l278 i32) + (local $l279 i32) + (local $l280 i32) + (local $l281 i32) + (local $l282 i32) + (local $l283 i32) + (local $l284 i32) + (local $l285 i32) + (local $l286 i32) + (local $l287 i32) + (local $l288 i32) + (local $l289 i32) + (local $l290 i32) + (local $l291 i32) + (local $l292 i32) + (local $l293 i32) + (local $l294 i32) + (local $l295 i32) + (local $l296 i32) + (local $l297 i32) + (local $l298 i32) + (local $l299 i32) + (local $l300 i32) + (local $l301 i32) + (local $l302 i32) + (local $l303 i32) + (local $l304 i32) + (local $l305 i32) + (local $l306 i32) + (local $l307 i32) + (local $l308 i32) + (local $l309 i32) + (local $l310 i32) + (local $l311 i32) + (local $l312 i32) + (local $l313 i32) + (local $l314 i32) + (local $l315 i32) + (local $l316 i32) + (local $l317 i32) + (local $l318 i32) + (local $l319 i32) + (local $l320 i32) + (local $l321 i32) + (local $l322 i32) + (local $l323 i32) + (local $l324 i32) + (local $l325 i32) + (local $l326 i32) + (local $l327 i32) + (local $l328 i32) + (local $l329 i32) + (local $l330 i32) + (local $l331 i32) + (local $l332 i32) + (local $l333 i32) + (local $l334 i32) + (local $l335 i32) + (local $l336 i32) + (local $l337 i32) + (local $l338 i32) + (local $l339 i32) + (local $l340 i32) + (local $l341 i32) + (local $l342 i32) + (local $l343 i32) + (local $l344 i32) + (local $l345 i32) + (local $l346 i32) + (local $l347 i32) + (local $l348 i32) + (local $l349 i32) + (local $l350 i32) + (local $l351 i32) + (local $l352 i32) + (local $l353 i32) + (local $l354 i32) + (local $l355 i32) + (local $l356 i32) + (local $l357 i32) + (local $l358 i32) + (local $l359 i32) + (local $l360 i32) + (local $l361 i32) + (local $l362 i32) + (local $l363 i32) + (local $l364 i32) + (local $l365 i32) + (local $l366 i32) + (local $l367 i32) + (local $l368 i32) + (local $l369 i32) + (local $l370 i32) + (local $l371 i32) + (local $l372 i32) + (local $l373 i32) + (local $l374 i32) + (local $l375 i32) + (local $l376 i32) + (local $l377 i32) + (local $l378 i32) + (local $l379 i32) + (local $l380 i32) + (local $l381 i32) + (local $l382 i32) + (local $l383 i32) + (local $l384 i32) + (local $l385 i32) + (local $l386 i32) + (local $l387 i32) + (local $l388 i32) + (local $l389 i32) + (local $l390 i32) + (local $l391 i32) + (local $l392 i32) + (local $l393 i32) + (local $l394 i32) + (local $l395 i32) + (local $l396 i32) + (local $l397 i32) + (local $l398 i32) + (local $l399 i32) + (local $l400 i32) + (local $l401 i32) + (local $l402 i32) + (local $l403 i32) + (local $l404 i32) + (local $l405 i32) + (local $l406 i32) + (local $l407 i32) + (local $l408 i32) + (local $l409 i32) + (local $l410 i32) + (local $l411 i32) + (local $l412 i32) + (local $l413 i32) + (local $l414 i32) + (local $l415 i32) + (local $l416 i32) + (local $l417 i32) + (local $l418 i32) + (local $l419 i32) + (local $l420 i32) + (local $l421 i32) + (local $l422 i32) + (local $l423 i32) + (local $l424 i32) + (local $l425 i32) + (local $l426 i32) + (local $l427 i32) + (local $l428 i32) + (local $l429 i32) + (local $l430 i32) + (local $l431 i32) + (local $l432 i32) + (local $l433 i32) + (local $l434 i32) + (local $l435 i32) + (local $l436 i32) + (local $l437 i32) + (local $l438 i32) + (local $l439 i32) + (local $l440 i32) + (local $l441 i32) + (local $l442 i32) + (local $l443 i32) + (local $l444 i32) + (local $l445 i32) + (local $l446 i32) + (local $l447 i32) + (local $l448 i32) + (local $l449 i32) + (local $l450 i32) + (local $l451 i32) + (local $l452 i32) + (local $l453 i32) + (local $l454 i32) + (local $l455 i32) + (local $l456 i32) + (local $l457 i32) + (local $l458 i32) + (local $l459 i32) + (local $l460 i32) + (local $l461 i32) + (local $l462 i32) + (local $l463 i32) + (local $l464 i32) + (local $l465 i32) + (local $l466 i32) + (local $l467 i32) + (local $l468 i32) + (local $l469 i32) + (local $l470 i32) + (local $l471 i32) + (local $l472 i32) + (local $l473 i32) + (local $l474 i32) + (local $l475 i32) + (local $l476 i32) + (local $l477 i32) + (local $l478 i32) + (local $l479 i32) + (local $l480 i32) + (local $l481 i32) + (local $l482 i32) + (local $l483 i32) + (local $l484 i32) + (local $l485 i32) + (local $l486 i32) + (local $l487 i32) + (local $l488 i32) + (local $l489 i32) + (local $l490 i32) + (local $l491 i32) + (local $l492 i32) + (local $l493 i32) + (local $l494 i32) + (local $l495 i32) + (local $l496 i32) + (local $l497 i32) + (local $l498 i32) + (local $l499 i32) + (local $l500 i32) + (local $l501 i32) + (local $l502 i32) + (local $l503 i32) + (local $l504 i32) + (local $l505 i32) + (local $l506 i32) + (local $l507 i32) + (local $l508 i32) + (local $l509 i32) + (local $l510 i32) + (local $l511 i32) + (local $l512 i32) + (local $l513 i32) + (local $l514 i32) + (local $l515 i32) + (local $l516 i32) + (local $l517 i32) + (local $l518 i32) + (local $l519 i32) + (local $l520 i32) + (local $l521 i32) + (local $l522 i32) + (local $l523 i32) + (local $l524 i32) + (local $l525 i32) + (local $l526 i32) + (local $l527 i32) + (local $l528 i32) + (local $l529 i32) + (local $l530 i32) + (local $l531 i32) + (local $l532 i32) + (local $l533 i32) + (local $l534 i32) + (local $l535 i32) + (local $l536 i32) + (local $l537 i32) + (local $l538 i32) + (local $l539 i32) + (local $l540 i32) + (local $l541 i32) + (local $l542 i32) + (local $l543 i32) + (local $l544 i32) + (local $l545 i32) + (local $l546 i32) + (local $l547 i32) + (local $l548 i32) + (local $l549 i32) + (local $l550 i32) + (local $l551 i32) + (local $l552 i32) + (local $l553 i32) + (local $l554 i32) + (local $l555 i32) + (local $l556 i32) + (local $l557 i32) + (local $l558 i32) + (local $l559 i32) + (local $l560 i32) + (local $l561 i32) + (local $l562 i32) + (local $l563 i32) + (local $l564 i32) + (local $l565 i32) + (local $l566 i32) + (local $l567 i32) + (local $l568 i32) + (local $l569 i32) + (local $l570 i32) + (local $l571 i32) + (local $l572 i32) + (local $l573 i32) + (local $l574 i32) + (local $l575 i32) + (local $l576 i32) + (local $l577 i32) + (local $l578 i32) + (local $l579 i32) + (local $l580 i32) + (local $l581 i32) + (local $l582 i32) + (local $l583 i32) + (local $l584 i32) + (local $l585 i32) + (local $l586 i32) + (local $l587 i32) + (local $l588 i32) + (local $l589 i32) + (local $l590 i32) + (local $l591 i32) + (local $l592 i32) + (local $l593 i32) + (local $l594 i32) + (local $l595 i32) + (local $l596 i32) + (local $l597 i32) + (local $l598 i32) + (local $l599 i32) + (local $l600 i32) + (local $l601 i32) + (local $l602 i32) + (local $l603 i32) + (local $l604 i32) + (local $l605 i32) + (local $l606 i32) + (local $l607 i32) + (local $l608 i32) + (local $l609 i32) + (local $l610 i32) + (local $l611 i32) + (local $l612 i32) + (local $l613 i32) + (local $l614 i32) + (local $l615 i32) + (local $l616 i32) + (local $l617 i32) + (local $l618 i32) + (local $l619 i32) + (local $l620 i32) + (local $l621 i32) + (local $l622 i32) + (local $l623 i32) + (local $l624 i32) + (local $l625 i32) + (local $l626 i32) + (local $l627 i32) + (local $l628 i32) + (local $l629 i32) + (local $l630 i32) + (local $l631 i32) + (local $l632 i32) + (local $l633 i32) + (local $l634 i32) + (local $l635 i32) + (local $l636 i32) + (local $l637 i32) + (local $l638 i32) + (local $l639 i32) + (local $l640 i32) + (local $l641 i32) + (local $l642 i32) + (local $l643 i32) + (local $l644 i32) + (local $l645 i32) + (local $l646 i32) + (local $l647 i32) + (local $l648 i32) + (local $l649 i32) + (local $l650 i32) + (local $l651 i32) + (local $l652 i32) + (local $l653 i32) + (local $l654 i32) + (local $l655 i32) + (local $l656 i32) + (local $l657 i32) + (local $l658 i32) + (local $l659 i32) + (local $l660 i32) + (local $l661 i32) + (local $l662 i32) + (local $l663 i32) + (local $l664 i32) + (local $l665 i32) + (local $l666 i32) + (local $l667 i32) + (local $l668 i32) + (local $l669 i32) + (local $l670 i32) + (local $l671 i32) + (local $l672 i32) + (local $l673 i32) + (local $l674 i32) + (local $l675 i32) + (local $l676 i32) + (local $l677 i32) + (local $l678 i32) + (local $l679 i32) + (local $l680 i32) + (local $l681 i32) + (local $l682 i32) + (local $l683 i32) + (local $l684 i32) + (local $l685 i32) + (local $l686 i32) + (local $l687 i32) + (local $l688 i32) + (local $l689 i32) + (local $l690 i32) + (local $l691 i32) + (local $l692 i32) + (local $l693 i32) + (local $l694 i32) + (local $l695 i32) + (local $l696 i32) + (local $l697 i32) + (local $l698 i32) + (local $l699 i32) + (local $l700 i32) + (local $l701 i32) + (local $l702 i32) + (local $l703 i32) + (local $l704 i32) + (local $l705 i32) + (local $l706 i32) + (local $l707 i32) + (local $l708 i32) + (local $l709 i32) + (local $l710 i32) + (local $l711 i32) + (local $l712 i32) + (local $l713 i32) + (local $l714 i32) + (local $l715 i32) + (local $l716 i32) + (local $l717 i32) + (local $l718 i32) + (local $l719 i32) + (local $l720 i32) + (local $l721 i32) + (local $l722 i32) + (local $l723 i32) + (local $l724 i32) + (local $l725 i32) + (local $l726 i32) + (local $l727 i32) + (local $l728 i32) + (local $l729 i32) + (local $l730 i32) + (local $l731 i32) + (local $l732 i32) + (local $l733 i32) + (local $l734 i32) + (local $l735 i32) + (local $l736 i32) + (local $l737 i32) + (local $l738 i32) + (local $l739 i32) + (local $l740 i32) + (local $l741 i32) + (local $l742 i32) + (local $l743 i32) + (local $l744 i32) + (local $l745 i32) + (local $l746 i32) + (local $l747 i32) + (local $l748 i32) + (local $l749 i32) + (local $l750 i32) + (local $l751 i32) + (local $l752 i32) + (local $l753 i32) + (local $l754 i32) + (local $l755 i32) + (local $l756 i32) + (local $l757 i32) + (local $l758 i32) + (local $l759 i32) + (local $l760 i32) + (local $l761 i32) + (local $l762 i32) + (local $l763 i32) + (local $l764 i32) + (local $l765 i32) + (local $l766 i32) + (local $l767 i32) + (local $l768 i32) + (local $l769 i32) + (local $l770 i32) + (local $l771 i32) + (local $l772 i32) + (local $l773 i32) + (local $l774 i32) + (local $l775 i32) + (local $l776 i32) + (local $l777 i32) + (local $l778 i32) + (local $l779 i32) + (local $l780 i32) + (local $l781 i32) + (local $l782 i32) + (local $l783 i32) + (local $l784 i32) + (local $l785 i32) + (local $l786 i32) + (local $l787 i32) + (local $l788 i32) + (local $l789 i32) + (local $l790 i32) + (local $l791 i32) + (local $l792 i32) + (local $l793 i32) + (local $l794 i32) + (local $l795 i32) + (local $l796 i32) + (local $l797 i32) + (local $l798 i32) + (local $l799 i32) + (local $l800 i32) + (local $l801 i32) + (local $l802 i32) + (local $l803 i32) + (local $l804 i32) + (local $l805 i32) + (local $l806 i32) + (local $l807 i32) + (local $l808 i32) + (local $l809 i32) + (local $l810 i32) + (local $l811 i32) + (local $l812 i32) + (local $l813 i32) + (local $l814 i32) + (local $l815 i32) + (local $l816 i32) + (local $l817 i32) + (local $l818 i32) + (local $l819 i32) + (local $l820 i32) + (local $l821 i32) + (local $l822 i32) + (local $l823 i32) + (local $l824 i32) + (local $l825 i32) + (local $l826 i32) + (local $l827 i32) + (local $l828 i32) + (local $l829 i32) + (local $l830 i32) + (local $l831 i32) + (local $l832 i32) + (local $l833 i32) + (local $l834 i32) + (local $l835 i32) + (local $l836 i32) + (local $l837 i32) + (local $l838 i32) + (local $l839 i32) + (local $l840 i32) + (local $l841 i32) + (local $l842 i32) + (local $l843 i32) + (local $l844 i32) + (local $l845 i32) + (local $l846 i32) + (local $l847 i32) + (local $l848 i32) + (local $l849 i32) + (local $l850 i32) + (local $l851 i32) + (local $l852 i32) + (local $l853 i32) + (local $l854 i32) + (local $l855 i32) + (local $l856 i32) + (local $l857 i32) + (local $l858 i32) + (local $l859 i32) + (local $l860 i32) + (local $l861 i32) + (local $l862 i32) + (local $l863 i32) + (local $l864 i32) + (local $l865 i32) + (local $l866 i32) + (local $l867 i32) + (local $l868 i32) + (local $l869 i32) + (local $l870 i32) + (local $l871 i32) + (local $l872 i32) + (local $l873 i32) + (local $l874 i32) + (local $l875 i32) + (local $l876 i32) + (local $l877 i32) + (local $l878 i32) + (local $l879 i32) + (local $l880 i32) + (local $l881 i32) + (local $l882 i32) + (local $l883 i32) + (local $l884 i32) + (local $l885 i32) + (local $l886 i32) + (local $l887 i32) + (local $l888 i32) + (local $l889 i32) + (local $l890 i32) + (local $l891 i32) + (local $l892 i32) + (local $l893 i32) + (local $l894 i32) + (local $l895 i32) + (local $l896 i32) + (local $l897 i32) + (local $l898 i32) + (local $l899 i32) + (local $l900 i32) + (local $l901 i32) + (local $l902 i32) + (local $l903 i32) + (local $l904 i32) + (local $l905 i32) + (local $l906 i32) + (local $l907 i32) + (local $l908 i32) + (local $l909 i32) + (local $l910 i32) + (local $l911 i32) + (local $l912 i32) + (local $l913 i32) + (local $l914 i32) + (local $l915 i32) + (local $l916 i32) + (local $l917 i32) + (local $l918 i32) + (local $l919 i32) + (local $l920 i32) + (local $l921 i32) + (local $l922 i32) + (local $l923 i32) + (local $l924 i32) + (local $l925 i32) + (local $l926 i32) + (local $l927 i32) + (local $l928 i32) + (local $l929 i32) + (local $l930 i32) + (local $l931 i32) + (local $l932 i32) + (local $l933 i32) + (local $l934 i32) + (local $l935 i32) + (local $l936 i32) + (local $l937 i32) + (local $l938 i32) + (local $l939 i32) + (local $l940 i32) + (local $l941 i32) + (local $l942 i32) + (local $l943 i32) + (local $l944 i32) + (local $l945 i32) + (local $l946 i32) + (local $l947 i32) + (local $l948 i32) + (local $l949 i32) + (local $l950 i32) + (local $l951 i32) + (local $l952 i32) + (local $l953 i32) + (local $l954 i32) + (local $l955 i32) + (local $l956 i32) + (local $l957 i32) + (local $l958 i32) + (local $l959 i32) + (local $l960 i32) + (local $l961 i32) + (local $l962 i32) + (local $l963 i32) + (local $l964 i32) + (local $l965 i32) + (local $l966 i32) + (local $l967 i32) + (local $l968 i32) + (local $l969 i32) + (local $l970 i32) + (local $l971 i32) + (local $l972 i32) + (local $l973 i32) + (local $l974 i32) + (local $l975 i32) + (local $l976 i32) + (local $l977 i32) + (local $l978 i32) + (local $l979 i32) + (local $l980 i32) + (local $l981 i32) + (local $l982 i32) + (local $l983 i32) + (local $l984 i32) + (local $l985 i32) + (local $l986 i32) + (local $l987 i32) + (local $l988 i32) + (local $l989 i32) + (local $l990 i32) + (local $l991 i32) + (local $l992 i32) + (local $l993 i32) + (local $l994 i32) + (local $l995 i32) + (local $l996 i32) + (local $l997 i32) + (local $l998 i32) + (local $l999 i32) + (local $l1000 i32) + (local $l1001 i32) + (local $l1002 i32) + (local $l1003 i32) + (local $l1004 i32) + (local $l1005 i32) + (local $l1006 i32) + (local $l1007 i32) + (local $l1008 i32) + (local $l1009 i32) + (local $l1010 i32) + (local $l1011 i32) + (local $l1012 i32) + (local $l1013 i32) + (local $l1014 i32) + (local $l1015 i32) + (local $l1016 i32) + (local $l1017 i32) + (local $l1018 i32) + (local $l1019 i32) + (local $l1020 i32) + (local $l1021 i32) + (local $l1022 i32) + (local $l1023 i32) + (local $l1024 i32) + (local $l1025 i32) + (local $l1026 i32) + (local $l1027 i32) + (local $l1028 i32) + (local $l1029 i32) + (local $l1030 i32) + (local $l1031 i32) + (local $l1032 i32) + (local $l1033 i32) + (local $l1034 i32) + (local $l1035 i32) + (local $l1036 i32) + (local $l1037 i32) + (local $l1038 i32) + (local $l1039 i32) + (local $l1040 i32) + (local $l1041 i32) + (local $l1042 i32) + (local $l1043 i32) + (local $l1044 i32) + (local $l1045 i32) + (local $l1046 i32) + (local $l1047 i32) + (local $l1048 i32) + (local $l1049 i32) + (local $l1050 i32) + (local $l1051 i32) + (local $l1052 i32) + (local $l1053 i32) + (local $l1054 i32) + (local $l1055 i32) + (local $l1056 i32) + (local $l1057 i32) + (local $l1058 i32) + (local $l1059 i32) + (local $l1060 i32) + (local $l1061 i32) + (local $l1062 i32) + (local $l1063 i32) + (local $l1064 i32) + (local $l1065 i32) + (local $l1066 i32) + (local $l1067 i32) + (local $l1068 i32) + (local $l1069 i32) + (local $l1070 i32) + (local $l1071 i32) + (local $l1072 i32) + (local $l1073 i32) + (local $l1074 i32) + (local $l1075 i32) + (local $l1076 i32) + (local $l1077 i32) + (local $l1078 i32) + (local $l1079 i32) + (local $l1080 i32) + (local $l1081 i32) + (local $l1082 i32) + (local $l1083 i32) + (local $l1084 i32) + (local $l1085 i32) + (local $l1086 i32) + (local $l1087 i32) + (local $l1088 i32) + (local $l1089 i32) + (local $l1090 i32) + (local $l1091 i32) + (local $l1092 i32) + (local $l1093 i32) + (local $l1094 i32) + (local $l1095 i32) + (local $l1096 i32) + (local $l1097 i32) + (local $l1098 i32) + (local $l1099 i32) + (local $l1100 i32) + (local $l1101 i32) + (local $l1102 i32) + (local $l1103 i32) + (local $l1104 i32) + (local $l1105 i32) + (local $l1106 i32) + (local $l1107 i32) + (local $l1108 i32) + (local $l1109 i32) + (local $l1110 i32) + (local $l1111 i32) + (local $l1112 i32) + (local $l1113 i32) + (local $l1114 i32) + (local $l1115 i32) + (local $l1116 i32) + (local $l1117 i32) + (local $l1118 i32) + (local $l1119 i32) + (local $l1120 i32) + (local $l1121 i32) + (local $l1122 i32) + (local $l1123 i32) + (local $l1124 i32) + (local $l1125 i32) + (local $l1126 i32) + (local $l1127 i32) + (local $l1128 i32) + (local $l1129 i32) + (local $l1130 i32) + (local $l1131 i32) + (local $l1132 i32) + (local $l1133 i32) + (local $l1134 i32) + (local $l1135 i32) + (local $l1136 i32) + (local $l1137 i32) + (local $l1138 i32) + (local $l1139 i32) + (local $l1140 i32) + (local $l1141 i32) + (local $l1142 i32) + (local $l1143 i32) + (local $l1144 i32) + (local $l1145 i32) + (local $l1146 i32) + (local $l1147 i32) + (local $l1148 i32) + (local $l1149 i32) + (local $l1150 i32) + (local $l1151 i32) + (local $l1152 i32) + (local $l1153 i32) + (local $l1154 i32) + (local $l1155 i32) + (local $l1156 i32) + (local $l1157 i32) + (local $l1158 i32) + (local $l1159 i32) + (local $l1160 i32) + (local $l1161 i32) + (local $l1162 i32) + (local $l1163 i32) + (local $l1164 i32) + (local $l1165 i32) + (local $l1166 i32) + (local $l1167 i32) + (local $l1168 i32) + (local $l1169 i32) + (local $l1170 i32) + (local $l1171 i32) + (local $l1172 i32) + (local $l1173 i32) + (local $l1174 i32) + (local $l1175 i32) + (local $l1176 i32) + (local $l1177 i32) + (local $l1178 i32) + (local $l1179 i32) + (local $l1180 i32) + (local $l1181 i32) + (local $l1182 i32) + (local $l1183 i32) + (local $l1184 i32) + (local $l1185 i32) + (local $l1186 i32) + (local $l1187 i32) + (local $l1188 i32) + (local $l1189 i32) + (local $l1190 i32) + (local $l1191 i32) + (local $l1192 i32) + (local $l1193 i32) + (local $l1194 i32) + (local $l1195 i32) + (local $l1196 i32) + (local $l1197 i32) + (local $l1198 i32) + (local $l1199 i32) + (local $l1200 i32) + (local $l1201 i32) + (local $l1202 i32) + (local $l1203 i32) + (local $l1204 i32) + (local $l1205 i32) + (local $l1206 i32) + (local $l1207 i32) + (local $l1208 i32) + (local $l1209 i32) + (local $l1210 i32) + (local $l1211 i32) + (local $l1212 i32) + (local $l1213 i32) + (local $l1214 i32) + (local $l1215 i32) + (local $l1216 i32) + (local $l1217 i32) + (local $l1218 i32) + (local $l1219 i32) + (local $l1220 i32) + (local $l1221 i32) + (local $l1222 i32) + (local $l1223 i32) + (local $l1224 i32) + (local $l1225 i32) + (local $l1226 i32) + (local $l1227 i32) + (local $l1228 i32) + (local $l1229 i32) + (local $l1230 i32) + (local $l1231 i32) + (local $l1232 i32) + (local $l1233 i32) + (local $l1234 i32) + (local $l1235 i32) + (local $l1236 i32) + (local $l1237 i32) + (local $l1238 i32) + (local $l1239 i32) + (local $l1240 i32) + (local $l1241 i32) + (local $l1242 i32) + (local $l1243 i32) + (local $l1244 i32) + (local $l1245 i32) + (local $l1246 i32) + (local $l1247 i32) + (local $l1248 i32) + (local $l1249 i32) + (local $l1250 i32) + (local $l1251 i32) + (local $l1252 i32) + (local $l1253 i32) + (local $l1254 i32) + (local $l1255 i32) + (local $l1256 i32) + (local $l1257 i32) + (local $l1258 i32) + (local $l1259 i32) + (local $l1260 i32) + (local $l1261 i32) + (local $l1262 i32) + (local $l1263 i32) + (local $l1264 i32) + (local $l1265 i32) + (local $l1266 i32) + (local $l1267 i32) + (local $l1268 i32) + (local $l1269 i32) + (local $l1270 i32) + (local $l1271 i32) + (local $l1272 i32) + (local $l1273 i32) + (local $l1274 i32) + (local $l1275 i32) + (local $l1276 i32) + (local $l1277 i32) + (local $l1278 i32) + (local $l1279 i32) + (local $l1280 i32) + (local $l1281 i32) + (local $l1282 i32) + (local $l1283 i32) + (local $l1284 i32) + (local $l1285 i32) + (local $l1286 i32) + (local $l1287 i32) + (local $l1288 i32) + (local $l1289 i32) + (local $l1290 i32) + (local $l1291 i32) + (local $l1292 i32) + (local $l1293 i32) + (local $l1294 i32) + (local $l1295 i32) + (local $l1296 i32) + (local $l1297 i32) + (local $l1298 i32) + (local $l1299 i32) + (local $l1300 i32) + (local $l1301 i32) + (local $l1302 i32) + (local $l1303 i32) + (local $l1304 i32) + (local $l1305 i32) + (local $l1306 i32) + (local $l1307 i32) + (local $l1308 i32) + (local $l1309 i32) + (local $l1310 i32) + (local $l1311 i32) + (local $l1312 i32) + (local $l1313 i32) + (local $l1314 i32) + (local $l1315 i32) + (local $l1316 i32) + (local $l1317 i32) + (local $l1318 i32) + (local $l1319 i32) + (local $l1320 i32) + (local $l1321 i32) + (local $l1322 i32) + (local $l1323 i32) + (local $l1324 i32) + (local $l1325 i32) + (local $l1326 i32) + (local $l1327 i32) + (local $l1328 i32) + (local $l1329 i32) + (local $l1330 i32) + (local $l1331 i32) + (local $l1332 i32) + (local $l1333 i32) + (local $l1334 i32) + (local $l1335 i32) + (local $l1336 i32) + (local $l1337 i32) + (local $l1338 i32) + (local $l1339 i32) + (local $l1340 i32) + (local $l1341 i32) + (local $l1342 i32) + (local $l1343 i32) + (local $l1344 i32) + (local $l1345 i32) + (local $l1346 i32) + (local $l1347 i32) + (local $l1348 i32) + (local $l1349 i32) + (local $l1350 i32) + (local $l1351 i32) + (local $l1352 i32) + (local $l1353 i32) + (local $l1354 i32) + (local $l1355 i32) + (local $l1356 i32) + (local $l1357 i32) + (local $l1358 i32) + (local $l1359 i32) + (local $l1360 i32) + (local $l1361 i32) + (local $l1362 i32) + (local $l1363 i32) + (local $l1364 i32) + (local $l1365 i32) + (local $l1366 i32) + (local $l1367 i32) + (local $l1368 i32) + (local $l1369 i32) + (local $l1370 i32) + (local $l1371 i32) + (local $l1372 i32) + (local $l1373 i32) + (local $l1374 i32) + (local $l1375 i32) + (local $l1376 i32) + (local $l1377 i32) + (local $l1378 i32) + (local $l1379 i32) + (local $l1380 i32) + (local $l1381 i32) + (local $l1382 i32) + (local $l1383 i32) + (local $l1384 i32) + (local $l1385 i32) + (local $l1386 i32) + (local $l1387 i32) + (local $l1388 i32) + (local $l1389 i32) + (local $l1390 i32) + (local $l1391 i32) + (local $l1392 i32) + (local $l1393 i32) + (local $l1394 i32) + (local $l1395 i32) + (local $l1396 i32) + (local $l1397 i32) + (local $l1398 i32) + (local $l1399 i32) + (local $l1400 i32) + (local $l1401 i32) + (local $l1402 i32) + (local $l1403 i32) + (local $l1404 i32) + (local $l1405 i32) + (local $l1406 i32) + (local $l1407 i32) + (local $l1408 i32) + (local $l1409 i32) + (local $l1410 i32) + (local $l1411 i32) + (local $l1412 i32) + (local $l1413 i32) + (local $l1414 i32) + (local $l1415 i32) + (local $l1416 i32) + (local $l1417 i32) + (local $l1418 i32) + (local $l1419 i32) + (local $l1420 i32) + (local $l1421 i32) + (local $l1422 i32) + (local $l1423 i32) + (local $l1424 i32) + (local $l1425 i32) + (local $l1426 i32) + (local $l1427 i32) + (local $l1428 i32) + (local $l1429 i32) + (local $l1430 i32) + (local $l1431 i32) + (local $l1432 i32) + (local $l1433 i32) + (local $l1434 i32) + (local $l1435 i32) + (local $l1436 i32) + (local $l1437 i32) + (local $l1438 i32) + (local $l1439 i32) + (local $l1440 i32) + (local $l1441 i32) + (local $l1442 i32) + (local $l1443 i32) + (local $l1444 i32) + (local $l1445 i32) + (local $l1446 i32) + (local $l1447 i32) + (local $l1448 i32) + (local $l1449 i32) + (local $l1450 i32) + (local $l1451 i32) + (local $l1452 i32) + (local $l1453 i32) + (local $l1454 i32) + (local $l1455 i32) + (local $l1456 i32) + (local $l1457 i32) + (local $l1458 i32) + (local $l1459 i32) + (local $l1460 i32) + (local $l1461 i32) + (local $l1462 i32) + (local $l1463 i32) + (local $l1464 i32) + (local $l1465 i32) + (local $l1466 i32) + (local $l1467 i32) + (local $l1468 i32) + (local $l1469 i32) + (local $l1470 i32) + (local $l1471 i32) + (local $l1472 i32) + (local $l1473 i32) + (local $l1474 i32) + (local $l1475 i32) + (local $l1476 i32) + (local $l1477 i32) + (local $l1478 i32) + (local $l1479 i32) + (local $l1480 i32) + (local $l1481 i32) + (local $l1482 i32) + (local $l1483 i32) + (local $l1484 i32) + (local $l1485 i32) + (local $l1486 i32) + (local $l1487 i32) + (local $l1488 i32) + (local $l1489 i32) + (local $l1490 i32) + (local $l1491 i32) + (local $l1492 i32) + (local $l1493 i32) + (local $l1494 i32) + (local $l1495 i32) + (local $l1496 i32) + (local $l1497 i32) + (local $l1498 i32) + (local $l1499 i32) + (local $l1500 i32) + (local $l1501 i32) + (local $l1502 i32) + (local $l1503 i32) + (local $l1504 i32) + (local $l1505 i32) + (local $l1506 i32) + (local $l1507 i32) + (local $l1508 i32) + (local $l1509 i32) + (local $l1510 i32) + (local $l1511 i32) + (local $l1512 i32) + (local $l1513 i32) + (local $l1514 i32) + (local $l1515 i32) + (local $l1516 i32) + (local $l1517 i32) + (local $l1518 i32) + (local $l1519 i32) + (local $l1520 i32) + (local $l1521 i32) + (local $l1522 i32) + (local $l1523 i32) + (local $l1524 i32) + (local $l1525 i32) + (local $l1526 i32) + (local $l1527 i32) + (local $l1528 i32) + (local $l1529 i32) + (local $l1530 i32) + (local $l1531 i32) + (local $l1532 i32) + (local $l1533 i32) + (local $l1534 i32) + (local $l1535 i32) + (local $l1536 i32) + (local $l1537 i32) + (local $l1538 i32) + (local $l1539 i32) + (local $l1540 i32) + (local $l1541 i32) + (local $l1542 i32) + (local $l1543 i32) + (local $l1544 i32) + (local $l1545 i32) + (local $l1546 i32) + (local $l1547 i32) + (local $l1548 i32) + (local $l1549 i32) + (local $l1550 i32) + (local $l1551 i32) + (local $l1552 i32) + (local $l1553 i32) + (local $l1554 i32) + (local $l1555 i32) + (local $l1556 i32) + (local $l1557 i32) + (local $l1558 i32) + (local $l1559 i32) + (local $l1560 i32) + (local $l1561 i32) + (local $l1562 i32) + (local $l1563 i32) + (local $l1564 i32) + (local $l1565 i32) + (local $l1566 i32) + (local $l1567 i32) + (local $l1568 i32) + (local $l1569 i32) + (local $l1570 i32) + (local $l1571 i32) + (local $l1572 i32) + (local $l1573 i32) + (local $l1574 i32) + (local $l1575 i32) + (local $l1576 i32) + (local $l1577 i32) + (local $l1578 i32) + (local $l1579 i32) + (local $l1580 i32) + (local $l1581 i32) + (local $l1582 i32) + (local $l1583 i32) + (local $l1584 i32) + (local $l1585 i32) + (local $l1586 i32) + (local $l1587 i32) + (local $l1588 i32) + (local $l1589 i32) + (local $l1590 i32) + (local $l1591 i32) + (local $l1592 i32) + (local $l1593 i32) + (local $l1594 i32) + (local $l1595 i32) + (local $l1596 i32) + (local $l1597 i32) + (local $l1598 i32) + (local $l1599 i32) + (local $l1600 i32) + (local $l1601 i32) + (local $l1602 i32) + (local $l1603 i32) + (local $l1604 i32) + (local $l1605 i32) + (local $l1606 i32) + (local $l1607 i32) + (local $l1608 i32) + (local $l1609 i32) + (local $l1610 i32) + (local $l1611 i32) + (local $l1612 i32) + (local $l1613 i32) + (local $l1614 i32) + (local $l1615 i32) + (local $l1616 i32) + (local $l1617 i32) + (local $l1618 i32) + (local $l1619 i32) + (local $l1620 i32) + (local $l1621 i32) + (local $l1622 i32) + (local $l1623 i32) + (local $l1624 i32) + (local $l1625 i32) + (local $l1626 i32) + (local $l1627 i32) + (local $l1628 i32) + (local $l1629 i32) + (local $l1630 i32) + (local $l1631 i32) + (local $l1632 i32) + (local $l1633 i32) + (local $l1634 i32) + (local $l1635 i32) + (local $l1636 i32) + (local $l1637 i32) + (local $l1638 i32) + (local $l1639 i32) + (local $l1640 i32) + (local $l1641 i32) + (local $l1642 i32) + (local $l1643 i32) + (local $l1644 i32) + (local $l1645 i32) + (local $l1646 i32) + (local $l1647 i32) + (local $l1648 i32) + (local $l1649 i32) + (local $l1650 i32) + (local $l1651 i32) + (local $l1652 i32) + (local $l1653 i32) + (local $l1654 i32) + (local $l1655 i32) + (local $l1656 i32) + (local $l1657 i32) + (local $l1658 i32) + (local $l1659 i32) + (local $l1660 i32) + (local $l1661 i32) + (local $l1662 i32) + (local $l1663 i32) + (local $l1664 i32) + (local $l1665 i32) + (local $l1666 i32) + (local $l1667 i32) + (local $l1668 i32) + (local $l1669 i32) + (local $l1670 i32) + (local $l1671 i32) + (local $l1672 i32) + (local $l1673 i32) + (local $l1674 i32) + (local $l1675 i32) + (local $l1676 i32) + (local $l1677 i32) + (local $l1678 i32) + (local $l1679 i32) + (local $l1680 i32) + (local $l1681 i32) + (local $l1682 i32) + (local $l1683 i32) + (local $l1684 i32) + (local $l1685 i32) + (local $l1686 i32) + (local $l1687 i32) + (local $l1688 i32) + (local $l1689 i32) + (local $l1690 i32) + (local $l1691 i32) + (local $l1692 i32) + (local $l1693 i32) + (local $l1694 i32) + (local $l1695 i32) + (local $l1696 i32) + (local $l1697 i32) + (local $l1698 i32) + (local $l1699 i32) + (local $l1700 i32) + (local $l1701 i32) + (local $l1702 i32) + (local $l1703 i32) + (local $l1704 i32) + (local $l1705 i32) + (local $l1706 i32) + (local $l1707 i32) + (local $l1708 i32) + (local $l1709 i32) + (local $l1710 i32) + (local $l1711 i32) + (local $l1712 i32) + (local $l1713 i32) + (local $l1714 i32) + (local $l1715 i32) + (local $l1716 i32) + (local $l1717 i32) + (local $l1718 i32) + (local $l1719 i32) + (local $l1720 i32) + (local $l1721 i32) + (local $l1722 i32) + (local $l1723 i32) + (local $l1724 i32) + (local $l1725 i32) + (local $l1726 i32) + (local $l1727 i32) + (local $l1728 i32) + (local $l1729 i32) + (local $l1730 i32) + (local $l1731 i32) + (local $l1732 i32) + (local $l1733 i32) + (local $l1734 i32) + (local $l1735 i32) + (local $l1736 i32) + (local $l1737 i32) + (local $l1738 i32) + (local $l1739 i32) + (local $l1740 i32) + (local $l1741 i32) + (local $l1742 i32) + (local $l1743 i32) + (local $l1744 i32) + (local $l1745 i32) + (local $l1746 i32) + (local $l1747 i32) + (local $l1748 i32) + (local $l1749 i32) + (local $l1750 i32) + (local $l1751 i32) + (local $l1752 i32) + (local $l1753 i32) + (local $l1754 i32) + (local $l1755 i32) + (local $l1756 i32) + (local $l1757 i32) + (local $l1758 i32) + (local $l1759 i32) + (local $l1760 i32) + (local $l1761 i32) + (local $l1762 i32) + (local $l1763 i32) + (local $l1764 i32) + (local $l1765 i32) + (local $l1766 i32) + (local $l1767 i32) + (local $l1768 i32) + (local $l1769 i32) + (local $l1770 i32) + (local $l1771 i32) + (local $l1772 i32) + (local $l1773 i32) + (local $l1774 i32) + (local $l1775 i32) + (local $l1776 i32) + (local $l1777 i32) + (local $l1778 i32) + (local $l1779 i32) + (local $l1780 i32) + (local $l1781 i32) + (local $l1782 i32) + (local $l1783 i32) + (local $l1784 i32) + (local $l1785 i32) + (local $l1786 i32) + (local $l1787 i32) + (local $l1788 i32) + (local $l1789 i32) + (local $l1790 i32) + (local $l1791 i32) + (local $l1792 i32) + (local $l1793 i32) + (local $l1794 i32) + (local $l1795 i32) + (local $l1796 i32) + (local $l1797 i32) + (local $l1798 i32) + (local $l1799 i32) + (local $l1800 i32) + (local $l1801 i32) + (local $l1802 i32) + (local $l1803 i32) + (local $l1804 i32) + (local $l1805 i32) + (local $l1806 i32) + (local $l1807 i32) + (local $l1808 i32) + (local $l1809 i32) + (local $l1810 i32) + (local $l1811 i32) + (local $l1812 i32) + (local $l1813 i32) + (local $l1814 i32) + (local $l1815 i32) + (local $l1816 i32) + (local $l1817 i32) + (local $l1818 i32) + (local $l1819 i32) + (local $l1820 i32) + (local $l1821 i32) + (local $l1822 i32) + (local $l1823 i32) + (local $l1824 i32) + (local $l1825 i32) + (local $l1826 i32) + (local $l1827 i32) + (local $l1828 i32) + (local $l1829 i32) + (local $l1830 i32) + (local $l1831 i32) + (local $l1832 i32) + (local $l1833 i32) + (local $l1834 i32) + (local $l1835 i32) + (local $l1836 i32) + (local $l1837 i32) + (local $l1838 i32) + (local $l1839 i32) + (local $l1840 i32) + (local $l1841 i32) + (local $l1842 i32) + (local $l1843 i32) + (local $l1844 i32) + (local $l1845 i32) + (local $l1846 i32) + (local $l1847 i32) + (local $l1848 i32) + (local $l1849 i32) + (local $l1850 i32) + (local $l1851 i32) + (local $l1852 i32) + (local $l1853 i32) + (local $l1854 i32) + (local $l1855 i32) + (local $l1856 i32) + (local $l1857 i32) + (local $l1858 i32) + (local $l1859 i32) + (local $l1860 i32) + (local $l1861 i32) + (local $l1862 i32) + (local $l1863 i32) + (local $l1864 i32) + (local $l1865 i32) + (local $l1866 i32) + (local $l1867 i32) + (local $l1868 i32) + (local $l1869 i32) + (local $l1870 i32) + (local $l1871 i32) + (local $l1872 i32) + (local $l1873 i32) + (local $l1874 i32) + (local $l1875 i32) + (local $l1876 i32) + (local $l1877 i32) + (local $l1878 i32) + (local $l1879 i32) + (local $l1880 i32) + (local $l1881 i32) + (local $l1882 i32) + (local $l1883 i32) + (local $l1884 i32) + (local $l1885 i32) + (local $l1886 i32) + (local $l1887 i32) + (local $l1888 i32) + (local $l1889 i32) + (local $l1890 i32) + (local $l1891 i32) + (local $l1892 i32) + (local $l1893 i32) + (local $l1894 i32) + (local $l1895 i32) + (local $l1896 i32) + (local $l1897 i32) + (local $l1898 i32) + (local $l1899 i32) + (local $l1900 i32) + (local $l1901 i32) + (local $l1902 i32) + (local $l1903 i32) + (local $l1904 i32) + (local $l1905 i32) + (local $l1906 i32) + (local $l1907 i32) + (local $l1908 i32) + (local $l1909 i32) + (local $l1910 i32) + (local $l1911 i32) + (local $l1912 i32) + (local $l1913 i32) + (local $l1914 i32) + (local $l1915 i32) + (local $l1916 i32) + (local $l1917 i32) + (local $l1918 i32) + (local $l1919 i32) + (local $l1920 i32) + (local $l1921 i32) + (local $l1922 i32) + (local $l1923 i32) + (local $l1924 i32) + (local $l1925 i32) + (local $l1926 i32) + (local $l1927 i32) + (local $l1928 i32) + (local $l1929 i32) + (local $l1930 i32) + (local $l1931 i32) + (local $l1932 i32) + (local $l1933 i32) + (local $l1934 i32) + (local $l1935 i32) + (local $l1936 i32) + (local $l1937 i32) + (local $l1938 i32) + (local $l1939 i32) + (local $l1940 i32) + (local $l1941 i32) + (local $l1942 i32) + (local $l1943 i32) + (local $l1944 i32) + (local $l1945 i32) + (local $l1946 i32) + (local $l1947 i32) + (local $l1948 i32) + (local $l1949 i32) + (local $l1950 i32) + (local $l1951 i32) + (local $l1952 i32) + (local $l1953 i32) + (local $l1954 i32) + (local $l1955 i32) + (local $l1956 i32) + (local $l1957 i32) + (local $l1958 i32) + (local $l1959 i32) + (local $l1960 i32) + (local $l1961 i32) + (local $l1962 i32) + (local $l1963 i32) + (local $l1964 i32) + (local $l1965 i32) + (local $l1966 i32) + (local $l1967 i32) + (local $l1968 i32) + (local $l1969 i32) + (local $l1970 i32) + (local $l1971 i32) + (local $l1972 i32) + (local $l1973 i32) + (local $l1974 i32) + (local $l1975 i32) + (local $l1976 i32) + (local $l1977 i32) + (local $l1978 i32) + (local $l1979 i32) + (local $l1980 i32) + (local $l1981 i32) + (local $l1982 i32) + (local $l1983 i32) + (local $l1984 i32) + (local $l1985 i32) + (local $l1986 i32) + (local $l1987 i32) + (local $l1988 i32) + (local $l1989 i32) + (local $l1990 i32) + (local $l1991 i32) + (local $l1992 i32) + (local $l1993 i32) + (local $l1994 i32) + (local $l1995 i32) + (local $l1996 i32) + (local $l1997 i32) + (local $l1998 i32) + (local $l1999 i32) + (local $l2000 i32) + (local $l2001 i32) + (local $l2002 i32) + (local $l2003 i32) + (local $l2004 i32) + (local $l2005 i32) + (local $l2006 i32) + (local $l2007 i32) + (local $l2008 i32) + (local $l2009 i32) + (local $l2010 i32) + (local $l2011 i32) + (local $l2012 i32) + (local $l2013 i32) + (local $l2014 i32) + (local $l2015 i32) + (local $l2016 i32) + (local $l2017 i32) + (local $l2018 i32) + (local $l2019 i32) + (local $l2020 i32) + (local $l2021 i32) + (local $l2022 i32) + (local $l2023 i32) + (local $l2024 i32) + (local $l2025 i32) + (local $l2026 i32) + (local $l2027 i32) + (local $l2028 i32) + (local $l2029 i32) + (local $l2030 i32) + (local $l2031 i32) + (local $l2032 i32) + (local $l2033 i32) + (local $l2034 i32) + (local $l2035 i32) + (local $l2036 i32) + (local $l2037 i32) + (local $l2038 i32) + (local $l2039 i32) + (local $l2040 i32) + (local $l2041 i32) + (local $l2042 i32) + (local $l2043 i32) + (local $l2044 i32) + (local $l2045 i32) + (local $l2046 i32) + (local $l2047 i32) + (local $l2048 i32) + (local $l2049 i32) + (local $l2050 i32) + (local $l2051 i32) + (local $l2052 i32) + (local $l2053 i32) + (local $l2054 i32) + (local $l2055 i32) + (local $l2056 i32) + (local $l2057 i32) + (local $l2058 i32) + (local $l2059 i32) + (local $l2060 i32) + (local $l2061 i32) + (local $l2062 i32) + (local $l2063 i32) + (local $l2064 i32) + (local $l2065 i32) + (local $l2066 i32) + (local $l2067 i32) + (local $l2068 i32) + (local $l2069 i32) + (local $l2070 i32) + (local $l2071 i32) + (local $l2072 i32) + (local $l2073 i32) + (local $l2074 i32) + (local $l2075 i32) + (local $l2076 i32) + (local $l2077 i32) + (local $l2078 i32) + (local $l2079 i32) + (local $l2080 i32) + (local $l2081 i32) + (local $l2082 i32) + (local $l2083 i32) + (local $l2084 i32) + (local $l2085 i32) + (local $l2086 i32) + (local $l2087 i32) + (local $l2088 i32) + (local $l2089 i32) + (local $l2090 i32) + (local $l2091 i32) + (local $l2092 i32) + (local $l2093 i32) + (local $l2094 i32) + (local $l2095 i32) + (local $l2096 i32) + (local $l2097 i32) + (local $l2098 i32) + (local $l2099 i32) + (local $l2100 i32) + (local $l2101 i32) + (local $l2102 i32) + (local $l2103 i32) + (local $l2104 i32) + (local $l2105 i32) + (local $l2106 i32) + (local $l2107 i32) + (local $l2108 i32) + (local $l2109 i32) + (local $l2110 i32) + (local $l2111 i32) + (local $l2112 i32) + (local $l2113 i32) + (local $l2114 i32) + (local $l2115 i32) + (local $l2116 i32) + (local $l2117 i32) + (local $l2118 i32) + (local $l2119 i32) + (local $l2120 i32) + (local $l2121 i32) + (local $l2122 i32) + (local $l2123 i32) + (local $l2124 i32) + (local $l2125 i32) + (local $l2126 i32) + (local $l2127 i32) + (local $l2128 i32) + (local $l2129 i32) + (local $l2130 i32) + (local $l2131 i32) + (local $l2132 i32) + (local $l2133 i32) + (local $l2134 i32) + (local $l2135 i32) + (local $l2136 i32) + (local $l2137 i32) + (local $l2138 i32) + (local $l2139 i32) + (local $l2140 i32) + (local $l2141 i32) + (local $l2142 i32) + (local $l2143 i32) + (local $l2144 i32) + (local $l2145 i32) + (local $l2146 i32) + (local $l2147 i32) + (local $l2148 i32) + (local $l2149 i32) + (local $l2150 i32) + (local $l2151 i32) + (local $l2152 i32) + (local $l2153 i32) + (local $l2154 i32) + (local $l2155 i32) + (local $l2156 i32) + (local $l2157 i32) + (local $l2158 i32) + (local $l2159 i32) + (local $l2160 i32) + (local $l2161 i32) + (local $l2162 i32) + (local $l2163 i32) + (local $l2164 i32) + (local $l2165 i32) + (local $l2166 i32) + (local $l2167 i32) + (local $l2168 i32) + (local $l2169 i32) + (local $l2170 i32) + (local $l2171 i32) + (local $l2172 i32) + (local $l2173 i32) + (local $l2174 i32) + (local $l2175 i32) + (local $l2176 i32) + (local $l2177 i32) + (local $l2178 i32) + (local $l2179 i32) + (local $l2180 i32) + (local $l2181 i32) + (local $l2182 i32) + (local $l2183 i32) + (local $l2184 i32) + (local $l2185 i32) + (local $l2186 i32) + (local $l2187 i32) + (local $l2188 i32) + (local $l2189 i32) + (local $l2190 i32) + (local $l2191 i32) + (local $l2192 i32) + (local $l2193 i32) + (local $l2194 i32) + (local $l2195 i32) + (local $l2196 i32) + (local $l2197 i32) + (local $l2198 i32) + (local $l2199 i32) + (local $l2200 i32) + (local $l2201 i32) + (local $l2202 i32) + (local $l2203 i32) + (local $l2204 i32) + (local $l2205 i32) + (local $l2206 i32) + (local $l2207 i32) + (local $l2208 i32) + (local $l2209 i32) + (local $l2210 i32) + (local $l2211 i32) + (local $l2212 i32) + (local $l2213 i32) + (local $l2214 i32) + (local $l2215 i32) + (local $l2216 i32) + (local $l2217 i32) + (local $l2218 i32) + (local $l2219 i32) + (local $l2220 i32) + (local $l2221 i32) + (local $l2222 i32) + (local $l2223 i32) + (local $l2224 i32) + (local $l2225 i32) + (local $l2226 i32) + (local $l2227 i32) + (local $l2228 i32) + (local $l2229 i32) + (local $l2230 i32) + (local $l2231 i32) + (local $l2232 i32) + (local $l2233 i32) + (local $l2234 i32) + (local $l2235 i32) + (local $l2236 i32) + (local $l2237 i32) + (local $l2238 i32) + (local $l2239 i32) + (local $l2240 i32) + (local $l2241 i32) + (local $l2242 i32) + (local $l2243 i32) + (local $l2244 i32) + (local $l2245 i32) + (local $l2246 i32) + (local $l2247 i32) + (local $l2248 i32) + (local $l2249 i32) + (local $l2250 i32) + (local $l2251 i32) + (local $l2252 i32) + (local $l2253 i32) + (local $l2254 i32) + (local $l2255 i32) + (local $l2256 i32) + (local $l2257 i32) + (local $l2258 i32) + (local $l2259 i32) + (local $l2260 i32) + (local $l2261 i32) + (local $l2262 i32) + (local $l2263 i32) + (local $l2264 i32) + (local $l2265 i32) + (local $l2266 i32) + (local $l2267 i32) + (local $l2268 i32) + (local $l2269 i32) + (local $l2270 i32) + (local $l2271 i32) + (local $l2272 i32) + (local $l2273 i32) + (local $l2274 i32) + (local $l2275 i32) + (local $l2276 i32) + (local $l2277 i32) + (local $l2278 i32) + (local $l2279 i32) + (local $l2280 i32) + (local $l2281 i32) + (local $l2282 i32) + (local $l2283 i32) + (local $l2284 i32) + (local $l2285 i32) + (local $l2286 i32) + (local $l2287 i32) + (local $l2288 i32) + (local $l2289 i32) + (local $l2290 i32) + (local $l2291 i32) + (local $l2292 i32) + (local $l2293 i32) + (local $l2294 i32) + (local $l2295 i32) + (local $l2296 i32) + (local $l2297 i32) + (local $l2298 i32) + (local $l2299 i32) + (local $l2300 i32) + (local $l2301 i32) + (local $l2302 i32) + (local $l2303 i32) + (local $l2304 i32) + (local $l2305 i32) + (local $l2306 i32) + (local $l2307 i32) + (local $l2308 i32) + (local $l2309 i32) + (local $l2310 i32) + (local $l2311 i32) + (local $l2312 i32) + (local $l2313 i32) + (local $l2314 i32) + (local $l2315 i32) + (local $l2316 i32) + (local $l2317 i32) + (local $l2318 i32) + (local $l2319 i32) + (local $l2320 i32) + (local $l2321 i32) + (local $l2322 i32) + (local $l2323 i32) + (local $l2324 i32) + (local $l2325 i32) + (local $l2326 i32) + (local $l2327 i32) + (local $l2328 i32) + (local $l2329 i32) + (local $l2330 i32) + (local $l2331 i32) + (local $l2332 i32) + (local $l2333 i32) + (local $l2334 i32) + (local $l2335 i32) + (local $l2336 i32) + (local $l2337 i32) + (local $l2338 i32) + (local $l2339 i32) + (local $l2340 i32) + (local $l2341 i32) + (local $l2342 i32) + (local $l2343 i32) + (local $l2344 i32) + (local $l2345 i32) + (local $l2346 i32) + (local $l2347 i32) + (local $l2348 i32) + (local $l2349 i32) + (local $l2350 i32) + (local $l2351 i32) + (local $l2352 i32) + (local $l2353 i32) + (local $l2354 i32) + (local $l2355 i32) + (local $l2356 i32) + (local $l2357 i32) + (local $l2358 i32) + (local $l2359 i32) + (local $l2360 i32) + (local $l2361 i32) + (local $l2362 i32) + (local $l2363 i32) + (local $l2364 i32) + (local $l2365 i32) + (local $l2366 i32) + (local $l2367 i32) + (local $l2368 i32) + (local $l2369 i32) + (local $l2370 i32) + (local $l2371 i32) + (local $l2372 i32) + (local $l2373 i32) + (local $l2374 i32) + (local $l2375 i32) + (local $l2376 i32) + (local $l2377 i32) + (local $l2378 i32) + (local $l2379 i32) + (local $l2380 i32) + (local $l2381 i32) + (local $l2382 i32) + (local $l2383 i32) + (local $l2384 i32) + (local $l2385 i32) + (local $l2386 i32) + (local $l2387 i32) + (local $l2388 i32) + (local $l2389 i32) + (local $l2390 i32) + (local $l2391 i32) + (local $l2392 i32) + (local $l2393 i32) + (local $l2394 i32) + (local $l2395 i32) + (local $l2396 i32) + (local $l2397 i32) + (local $l2398 i32) + (local $l2399 i32) + (local $l2400 i32) + (local $l2401 i32) + (local $l2402 i32) + (local $l2403 i32) + (local $l2404 i32) + (local $l2405 i32) + (local $l2406 i32) + (local $l2407 i32) + (local $l2408 i32) + (local $l2409 i32) + (local $l2410 i32) + (local $l2411 i32) + (local $l2412 i32) + (local $l2413 i32) + (local $l2414 i32) + (local $l2415 i32) + (local $l2416 i32) + (local $l2417 i32) + (local $l2418 i32) + (local $l2419 i32) + (local $l2420 i32) + (local $l2421 i32) + (local $l2422 i32) + (local $l2423 i32) + (local $l2424 i32) + (local $l2425 i32) + (local $l2426 i32) + (local $l2427 i32) + (local $l2428 i32) + (local $l2429 i32) + (local $l2430 i32) + (local $l2431 i32) + (local $l2432 i32) + (local $l2433 i32) + (local $l2434 i32) + (local $l2435 i32) + (local $l2436 i32) + (local $l2437 i32) + (local $l2438 i32) + (local $l2439 i32) + (local $l2440 i32) + (local $l2441 i32) + (local $l2442 i32) + (local $l2443 i32) + (local $l2444 i32) + (local $l2445 i32) + (local $l2446 i32) + (local $l2447 i32) + (local $l2448 i32) + (local $l2449 i32) + (local $l2450 i32) + (local $l2451 i32) + (local $l2452 i32) + (local $l2453 i32) + (local $l2454 i32) + (local $l2455 i32) + (local $l2456 i32) + (local $l2457 i32) + (local $l2458 i32) + (local $l2459 i32) + (local $l2460 i32) + (local $l2461 i32) + (local $l2462 i32) + (local $l2463 i32) + (local $l2464 i32) + (local $l2465 i32) + (local $l2466 i32) + (local $l2467 i32) + (local $l2468 i32) + (local $l2469 i32) + (local $l2470 i32) + (local $l2471 i32) + (local $l2472 i32) + (local $l2473 i32) + (local $l2474 i32) + (local $l2475 i32) + (local $l2476 i32) + (local $l2477 i32) + (local $l2478 i32) + (local $l2479 i32) + (local $l2480 i32) + (local $l2481 i32) + (local $l2482 i32) + (local $l2483 i32) + (local $l2484 i32) + (local $l2485 i32) + (local $l2486 i32) + (local $l2487 i32) + (local $l2488 i32) + (local $l2489 i32) + (local $l2490 i32) + (local $l2491 i32) + (local $l2492 i32) + (local $l2493 i32) + (local $l2494 i32) + (local $l2495 i32) + (local $l2496 i32) + (local $l2497 i32) + (local $l2498 i32) + (local $l2499 i32) + (local $l2500 i32) + (local $l2501 i32) + (local $l2502 i32) + (local $l2503 i32) + (local $l2504 i32) + (local $l2505 i32) + (local $l2506 i32) + (local $l2507 i32) + (local $l2508 i32) + (local $l2509 i32) + (local $l2510 i32) + (local $l2511 i32) + (local $l2512 i32) + (local $l2513 i32) + (local $l2514 i32) + (local $l2515 i32) + (local $l2516 i32) + (local $l2517 i32) + (local $l2518 i32) + (local $l2519 i32) + (local $l2520 i32) + (local $l2521 i32) + (local $l2522 i32) + (local $l2523 i32) + (local $l2524 i32) + (local $l2525 i32) + (local $l2526 i32) + (local $l2527 i32) + (local $l2528 i32) + (local $l2529 i32) + (local $l2530 i32) + (local $l2531 i32) + (local $l2532 i32) + (local $l2533 i32) + (local $l2534 i32) + (local $l2535 i32) + (local $l2536 i32) + (local $l2537 i32) + (local $l2538 i32) + (local $l2539 i32) + (local $l2540 i32) + (local $l2541 i32) + (local $l2542 i32) + (local $l2543 i32) + (local $l2544 i32) + (local $l2545 i32) + (local $l2546 i32) + (local $l2547 i32) + (local $l2548 i32) + (local $l2549 i32) + (local $l2550 i32) + (local $l2551 i32) + (local $l2552 i32) + (local $l2553 i32) + (local $l2554 i32) + (local $l2555 i32) + (local $l2556 i32) + (local $l2557 i32) + (local $l2558 i32) + (local $l2559 i32) + (local $l2560 i32) + (local $l2561 i32) + (local $l2562 i32) + (local $l2563 i32) + (local $l2564 i32) + (local $l2565 i32) + (local $l2566 i32) + (local $l2567 i32) + (local $l2568 i32) + (local $l2569 i32) + (local $l2570 i32) + (local $l2571 i32) + (local $l2572 i32) + (local $l2573 i32) + (local $l2574 i32) + (local $l2575 i32) + (local $l2576 i32) + (local $l2577 i32) + (local $l2578 i32) + (local $l2579 i32) + (local $l2580 i32) + (local $l2581 i32) + (local $l2582 i32) + (local $l2583 i32) + (local $l2584 i32) + (local $l2585 i32) + (local $l2586 i32) + (local $l2587 i32) + (local $l2588 i32) + (local $l2589 i32) + (local $l2590 i32) + (local $l2591 i32) + (local $l2592 i32) + (local $l2593 i32) + (local $l2594 i32) + (local $l2595 i32) + (local $l2596 i32) + (local $l2597 i32) + (local $l2598 i32) + (local $l2599 i32) + (local $l2600 i32) + (local $l2601 i32) + (local $l2602 i32) + (local $l2603 i32) + (local $l2604 i32) + (local $l2605 i32) + (local $l2606 i32) + (local $l2607 i32) + (local $l2608 i32) + (local $l2609 i32) + (local $l2610 i32) + (local $l2611 i32) + (local $l2612 i32) + (local $l2613 i32) + (local $l2614 i32) + (local $l2615 i32) + (local $l2616 i32) + (local $l2617 i32) + (local $l2618 i32) + (local $l2619 i32) + (local $l2620 i32) + (local $l2621 i32) + (local $l2622 i32) + (local $l2623 i32) + (local $l2624 i32) + (local $l2625 i32) + (local $l2626 i32) + (local $l2627 i32) + (local $l2628 i32) + (local $l2629 i32) + (local $l2630 i32) + (local $l2631 i32) + (local $l2632 i32) + (local $l2633 i32) + (local $l2634 i32) + (local $l2635 i32) + (local $l2636 i32) + (local $l2637 i32) + (local $l2638 i32) + (local $l2639 i32) + (local $l2640 i32) + (local $l2641 i32) + (local $l2642 i32) + (local $l2643 i32) + (local $l2644 i32) + (local $l2645 i32) + (local $l2646 i32) + (local $l2647 i32) + (local $l2648 i32) + (local $l2649 i32) + (local $l2650 i32) + (local $l2651 i32) + (local $l2652 i32) + (local $l2653 i32) + (local $l2654 i32) + (local $l2655 i32) + (local $l2656 i32) + (local $l2657 i32) + (local $l2658 i32) + (local $l2659 i32) + (local $l2660 i32) + (local $l2661 i32) + (local $l2662 i32) + (local $l2663 i32) + (local $l2664 i32) + (local $l2665 i32) + (local $l2666 i32) + (local $l2667 i32) + (local $l2668 i32) + (local $l2669 i32) + (local $l2670 i32) + (local $l2671 i32) + (local $l2672 i32) + (local $l2673 i32) + (local $l2674 i32) + (local $l2675 i32) + (local $l2676 i32) + (local $l2677 i32) + (local $l2678 i32) + (local $l2679 i32) + (local $l2680 i32) + (local $l2681 i32) + (local $l2682 i32) + (local $l2683 i32) + (local $l2684 i32) + (local $l2685 i32) + (local $l2686 i32) + (local $l2687 i32) + (local $l2688 i32) + (local $l2689 i32) + (local $l2690 i32) + (local $l2691 i32) + (local $l2692 i32) + (local $l2693 i32) + (local $l2694 i32) + (local $l2695 i32) + (local $l2696 i32) + (local $l2697 i32) + (local $l2698 i32) + (local $l2699 i32) + (local $l2700 i32) + (local $l2701 i32) + (local $l2702 i32) + (local $l2703 i32) + (local $l2704 i32) + (local $l2705 i32) + (local $l2706 i32) + (local $l2707 i32) + (local $l2708 i32) + (local $l2709 i32) + (local $l2710 i32) + (local $l2711 i32) + (local $l2712 i32) + (local $l2713 i32) + (local $l2714 i32) + (local $l2715 i32) + (local $l2716 i32) + (local $l2717 i32) + (local $l2718 i32) + (local $l2719 i32) + (local $l2720 i32) + (local $l2721 i32) + (local $l2722 i32) + (local $l2723 i32) + (local $l2724 i32) + (local $l2725 i32) + (local $l2726 i32) + (local $l2727 i32) + (local $l2728 i32) + (local $l2729 i32) + (local $l2730 i32) + (local $l2731 i32) + (local $l2732 i32) + (local $l2733 i32) + (local $l2734 i32) + (local $l2735 i32) + (local $l2736 i32) + (local $l2737 i32) + (local $l2738 i32) + (local $l2739 i32) + (local $l2740 i32) + (local $l2741 i32) + (local $l2742 i32) + (local $l2743 i32) + (local $l2744 i32) + (local $l2745 i32) + (local $l2746 i32) + (local $l2747 i32) + (local $l2748 i32) + (local $l2749 i32) + (local $l2750 i32) + (local $l2751 i32) + (local $l2752 i32) + (local $l2753 i32) + (local $l2754 i32) + (local $l2755 i32) + (local $l2756 i32) + (local $l2757 i32) + (local $l2758 i32) + (local $l2759 i32) + (local $l2760 i32) + (local $l2761 i32) + (local $l2762 i32) + (local $l2763 i32) + (local $l2764 i32) + (local $l2765 i32) + (local $l2766 i32) + (local $l2767 i32) + (local $l2768 i32) + (local $l2769 i32) + (local $l2770 i32) + (local $l2771 i32) + (local $l2772 i32) + (local $l2773 i32) + (local $l2774 i32) + (local $l2775 i32) + (local $l2776 i32) + (local $l2777 i32) + (local $l2778 i32) + (local $l2779 i32) + (local $l2780 i32) + (local $l2781 i32) + (local $l2782 i32) + (local $l2783 i32) + (local $l2784 i32) + (local $l2785 i32) + (local $l2786 i32) + (local $l2787 i32) + (local $l2788 i32) + (local $l2789 i32) + (local $l2790 i32) + (local $l2791 i32) + (local $l2792 i32) + (local $l2793 i32) + (local $l2794 i32) + (local $l2795 i32) + (local $l2796 i32) + (local $l2797 i32) + (local $l2798 i32) + (local $l2799 i32) + (local $l2800 i32) + (local $l2801 i32) + (local $l2802 i32) + (local $l2803 i32) + (local $l2804 i32) + (local $l2805 i32) + (local $l2806 i32) + (local $l2807 i32) + (local $l2808 i32) + (local $l2809 i32) + (local $l2810 i32) + (local $l2811 i32) + (local $l2812 i32) + (local $l2813 i32) + (local $l2814 i32) + (local $l2815 i32) + (local $l2816 i32) + (local $l2817 i32) + (local $l2818 i32) + (local $l2819 i32) + (local $l2820 i32) + (local $l2821 i32) + (local $l2822 i32) + (local $l2823 i32) + (local $l2824 i32) + (local $l2825 i32) + (local $l2826 i32) + (local $l2827 i32) + (local $l2828 i32) + (local $l2829 i32) + (local $l2830 i32) + (local $l2831 i32) + (local $l2832 i32) + (local $l2833 i32) + (local $l2834 i32) + (local $l2835 i32) + (local $l2836 i32) + (local $l2837 i32) + (local $l2838 i32) + (local $l2839 i32) + (local $l2840 i32) + (local $l2841 i32) + (local $l2842 i32) + (local $l2843 i32) + (local $l2844 i32) + (local $l2845 i32) + (local $l2846 i32) + (local $l2847 i32) + (local $l2848 i32) + (local $l2849 i32) + (local $l2850 i32) + (local $l2851 i32) + (local $l2852 i32) + (local $l2853 i32) + (local $l2854 i32) + (local $l2855 i32) + (local $l2856 i32) + (local $l2857 i32) + (local $l2858 i32) + (local $l2859 i32) + (local $l2860 i32) + (local $l2861 i32) + (local $l2862 i32) + (local $l2863 i32) + (local $l2864 i32) + (local $l2865 i32) + (local $l2866 i32) + (local $l2867 i32) + (local $l2868 i32) + (local $l2869 i32) + (local $l2870 i32) + (local $l2871 i32) + (local $l2872 i32) + (local $l2873 i32) + (local $l2874 i32) + (local $l2875 i32) + (local $l2876 i32) + (local $l2877 i32) + (local $l2878 i32) + (local $l2879 i32) + (local $l2880 i32) + (local $l2881 i32) + (local $l2882 i32) + (local $l2883 i32) + (local $l2884 i32) + (local $l2885 i32) + (local $l2886 i32) + (local $l2887 i32) + (local $l2888 i32) + (local $l2889 i32) + (local $l2890 i32) + (local $l2891 i32) + (local $l2892 i32) + (local $l2893 i32) + (local $l2894 i32) + (local $l2895 i32) + (local $l2896 i32) + (local $l2897 i32) + (local $l2898 i32) + (local $l2899 i32) + (local $l2900 i32) + (local $l2901 i32) + (local $l2902 i32) + (local $l2903 i32) + (local $l2904 i32) + (local $l2905 i32) + (local $l2906 i32) + (local $l2907 i32) + (local $l2908 i32) + (local $l2909 i32) + (local $l2910 i32) + (local $l2911 i32) + (local $l2912 i32) + (local $l2913 i32) + (local $l2914 i32) + (local $l2915 i32) + (local $l2916 i32) + (local $l2917 i32) + (local $l2918 i32) + (local $l2919 i32) + (local $l2920 i32) + (local $l2921 i32) + (local $l2922 i32) + (local $l2923 i32) + (local $l2924 i32) + (local $l2925 i32) + (local $l2926 i32) + (local $l2927 i32) + (local $l2928 i32) + (local $l2929 i32) + (local $l2930 i32) + (local $l2931 i32) + (local $l2932 i32) + (local $l2933 i32) + (local $l2934 i32) + (local $l2935 i32) + (local $l2936 i32) + (local $l2937 i32) + (local $l2938 i32) + (local $l2939 i32) + (local $l2940 i32) + (local $l2941 i32) + (local $l2942 i32) + (local $l2943 i32) + (local $l2944 i32) + (local $l2945 i32) + (local $l2946 i32) + (local $l2947 i32) + (local $l2948 i32) + (local $l2949 i32) + (local $l2950 i32) + (local $l2951 i32) + (local $l2952 i32) + (local $l2953 i32) + (local $l2954 i32) + (local $l2955 i32) + (local $l2956 i32) + (local $l2957 i32) + (local $l2958 i32) + (local $l2959 i32) + (local $l2960 i32) + (local $l2961 i32) + (local $l2962 i32) + (local $l2963 i32) + (local $l2964 i32) + (local $l2965 i32) + (local $l2966 i32) + (local $l2967 i32) + (local $l2968 i32) + (local $l2969 i32) + (local $l2970 i32) + (local $l2971 i32) + (local $l2972 i32) + (local $l2973 i32) + (local $l2974 i32) + (local $l2975 i32) + (local $l2976 i32) + (local $l2977 i32) + (local $l2978 i32) + (local $l2979 i32) + (local $l2980 i32) + (local $l2981 i32) + (local $l2982 i32) + (local $l2983 i32) + (local $l2984 i32) + (local $l2985 i32) + (local $l2986 i32) + (local $l2987 i32) + (local $l2988 i32) + (local $l2989 i32) + (local $l2990 i32) + (local $l2991 i32) + (local $l2992 i32) + (local $l2993 i32) + (local $l2994 i32) + (local $l2995 i32) + (local $l2996 i32) + (local $l2997 i32) + (local $l2998 i32) + (local $l2999 i32) + (local $l3000 i32) + (local $l3001 i32) + (local $l3002 i32) + (local $l3003 i32) + (local $l3004 i32) + (local $l3005 i32) + (local $l3006 i32) + (local $l3007 i32) + (local $l3008 i32) + (local $l3009 i32) + (local $l3010 i32) + (local $l3011 i32) + (local $l3012 i32) + (local $l3013 i32) + (local $l3014 i32) + (local $l3015 i32) + (local $l3016 i32) + (local $l3017 i32) + (local $l3018 i32) + (local $l3019 i32) + (local $l3020 i32) + (local $l3021 i32) + (local $l3022 i32) + (local $l3023 i32) + (local $l3024 i32) + (local $l3025 i32) + (local $l3026 i32) + (local $l3027 i32) + (local $l3028 i32) + (local $l3029 i32) + (local $l3030 i32) + (local $l3031 i32) + (local $l3032 i32) + (local $l3033 i32) + (local $l3034 i32) + (local $l3035 i32) + (local $l3036 i32) + (local $l3037 i32) + (local $l3038 i32) + (local $l3039 i32) + (local $l3040 i32) + (local $l3041 i32) + (local $l3042 i32) + (local $l3043 i32) + (local $l3044 i32) + (local $l3045 i32) + (local $l3046 i32) + (local $l3047 i32) + (local $l3048 i32) + (local $l3049 i32) + (local $l3050 i32) + (local $l3051 i32) + (local $l3052 i32) + (local $l3053 i32) + (local $l3054 i32) + (local $l3055 i32) + (local $l3056 i32) + (local $l3057 i32) + (local $l3058 i32) + (local $l3059 i32) + (local $l3060 i32) + (local $l3061 i32) + (local $l3062 i32) + (local $l3063 i32) + (local $l3064 i32) + (local $l3065 i32) + (local $l3066 i32) + (local $l3067 i32) + (local $l3068 i32) + (local $l3069 i32) + (local $l3070 i32) + (local $l3071 i32) + (local $l3072 i32) + (local $l3073 i32) + (local $l3074 i32) + (local $l3075 i32) + (local $l3076 i32) + (local $l3077 i32) + (local $l3078 i32) + (local $l3079 i32) + (local $l3080 i32) + (local $l3081 i32) + (local $l3082 i32) + (local $l3083 i32) + (local $l3084 i32) + (local $l3085 i32) + (local $l3086 i32) + (local $l3087 i32) + (local $l3088 i32) + (local $l3089 i32) + (local $l3090 i32) + (local $l3091 i32) + (local $l3092 i32) + (local $l3093 i32) + (local $l3094 i32) + (local $l3095 i32) + (local $l3096 i32) + (local $l3097 i32) + (local $l3098 i32) + (local $l3099 i32) + (local $l3100 i32) + (local $l3101 i32) + (local $l3102 i32) + (local $l3103 i32) + (local $l3104 i32) + (local $l3105 i32) + (local $l3106 i32) + (local $l3107 i32) + (local $l3108 i32) + (local $l3109 i32) + (local $l3110 i32) + (local $l3111 i32) + (local $l3112 i32) + (local $l3113 i32) + (local $l3114 i32) + (local $l3115 i32) + (local $l3116 i32) + (local $l3117 i32) + (local $l3118 i32) + (local $l3119 i32) + (local $l3120 i32) + (local $l3121 i32) + (local $l3122 i32) + (local $l3123 i32) + (local $l3124 i32) + (local $l3125 i32) + (local $l3126 i32) + (local $l3127 i32) + (local $l3128 i32) + (local $l3129 i32) + (local $l3130 i32) + (local $l3131 i32) + (local $l3132 i32) + (local $l3133 i32) + (local $l3134 i32) + (local $l3135 i32) + (local $l3136 i32) + (local $l3137 i32) + (local $l3138 i32) + (local $l3139 i32) + (local $l3140 i32) + (local $l3141 i32) + (local $l3142 i32) + (local $l3143 i32) + (local $l3144 i32) + (local $l3145 i32) + (local $l3146 i32) + (local $l3147 i32) + (local $l3148 i32) + (local $l3149 i32) + (local $l3150 i32) + (local $l3151 i32) + (local $l3152 i32) + (local $l3153 i32) + (local $l3154 i32) + (local $l3155 i32) + (local $l3156 i32) + (local $l3157 i32) + (local $l3158 i32) + (local $l3159 i32) + (local $l3160 i32) + (local $l3161 i32) + (local $l3162 i32) + (local $l3163 i32) + (local $l3164 i32) + (local $l3165 i32) + (local $l3166 i32) + (local $l3167 i32) + (local $l3168 i32) + (local $l3169 i32) + (local $l3170 i32) + (local $l3171 i32) + (local $l3172 i32) + (local $l3173 i32) + (local $l3174 i32) + (local $l3175 i32) + (local $l3176 i32) + (local $l3177 i32) + (local $l3178 i32) + (local $l3179 i32) + (local $l3180 i32) + (local $l3181 i32) + (local $l3182 i32) + (local $l3183 i32) + (local $l3184 i32) + (local $l3185 i32) + (local $l3186 i32) + (local $l3187 i32) + (local $l3188 i32) + (local $l3189 i32) + (local $l3190 i32) + (local $l3191 i32) + (local $l3192 i32) + (local $l3193 i32) + (local $l3194 i32) + (local $l3195 i32) + (local $l3196 i32) + (local $l3197 i32) + (local $l3198 i32) + (local $l3199 i32) + (local $l3200 i32) + (local $l3201 i32) + (local $l3202 i32) + (local $l3203 i32) + (local $l3204 i32) + (local $l3205 i32) + (local $l3206 i32) + (local $l3207 i32) + (local $l3208 i32) + (local $l3209 i32) + (local $l3210 i32) + (local $l3211 i32) + (local $l3212 i32) + (local $l3213 i32) + (local $l3214 i32) + (local $l3215 i32) + (local $l3216 i32) + (local $l3217 i32) + (local $l3218 i32) + (local $l3219 i32) + (local $l3220 i32) + (local $l3221 i32) + (local $l3222 i32) + (local $l3223 i32) + (local $l3224 i32) + (local $l3225 i32) + (local $l3226 i32) + (local $l3227 i32) + (local $l3228 i32) + (local $l3229 i32) + (local $l3230 i32) + (local $l3231 i32) + (local $l3232 i32) + (local $l3233 i32) + (local $l3234 i32) + (local $l3235 i32) + (local $l3236 i32) + (local $l3237 i32) + (local $l3238 i32) + (local $l3239 i32) + (local $l3240 i32) + (local $l3241 i32) + (local $l3242 i32) + (local $l3243 i32) + (local $l3244 i32) + (local $l3245 i32) + (local $l3246 i32) + (local $l3247 i32) + (local $l3248 i32) + (local $l3249 i32) + (local $l3250 i32) + (local $l3251 i32) + (local $l3252 i32) + (local $l3253 i32) + (local $l3254 i32) + (local $l3255 i32) + (local $l3256 i32) + (local $l3257 i32) + (local $l3258 i32) + (local $l3259 i32) + (local $l3260 i32) + (local $l3261 i32) + (local $l3262 i32) + (local $l3263 i32) + (local $l3264 i32) + (local $l3265 i32) + (local $l3266 i32) + (local $l3267 i32) + (local $l3268 i32) + (local $l3269 i32) + (local $l3270 i32) + (local $l3271 i32) + (local $l3272 i32) + (local $l3273 i32) + (local $l3274 i32) + (local $l3275 i32) + (local $l3276 i32) + (local $l3277 i32) + (local $l3278 i32) + (local $l3279 i32) + (local $l3280 i32) + (local $l3281 i32) + (local $l3282 i32) + (local $l3283 i32) + (local $l3284 i32) + (local $l3285 i32) + (local $l3286 i32) + (local $l3287 i32) + (local $l3288 i32) + (local $l3289 i32) + (local $l3290 i32) + (local $l3291 i32) + (local $l3292 i32) + (local $l3293 i32) + (local $l3294 i32) + (local $l3295 i32) + (local $l3296 i32) + (local $l3297 i32) + (local $l3298 i32) + (local $l3299 i32) + (local $l3300 i32) + (local $l3301 i32) + (local $l3302 i32) + (local $l3303 i32) + (local $l3304 i32) + (local $l3305 i32) + (local $l3306 i32) + (local $l3307 i32) + (local $l3308 i32) + (local $l3309 i32) + (local $l3310 i32) + (local $l3311 i32) + (local $l3312 i32) + (local $l3313 i32) + (local $l3314 i32) + (local $l3315 i32) + (local $l3316 i32) + (local $l3317 i32) + (local $l3318 i32) + (local $l3319 i32) + (local $l3320 i32) + (local $l3321 i32) + (local $l3322 i32) + (local $l3323 i32) + (local $l3324 i32) + (local $l3325 i32) + (local $l3326 i32) + (local $l3327 i32) + (local $l3328 i32) + (local $l3329 i32) + (local $l3330 i32) + (local $l3331 i32) + (local $l3332 i32) + (local $l3333 i32) + (local $l3334 i32) + (local $l3335 i32) + (local $l3336 i32) + (local $l3337 i32) + (local $l3338 i32) + (local $l3339 i32) + (local $l3340 i32) + (local $l3341 i32) + (local $l3342 i32) + (local $l3343 i32) + (local $l3344 i32) + (local $l3345 i32) + (local $l3346 i32) + (local $l3347 i32) + (local $l3348 i32) + (local $l3349 i32) + (local $l3350 i32) + (local $l3351 i32) + (local $l3352 i32) + (local $l3353 i32) + (local $l3354 i32) + (local $l3355 i32) + (local $l3356 i32) + (local $l3357 i32) + (local $l3358 i32) + (local $l3359 i32) + (local $l3360 i32) + (local $l3361 i32) + (local $l3362 i32) + (local $l3363 i32) + (local $l3364 i32) + (local $l3365 i32) + (local $l3366 i32) + (local $l3367 i32) + (local $l3368 i32) + (local $l3369 i32) + (local $l3370 i32) + (local $l3371 i32) + (local $l3372 i32) + (local $l3373 i32) + (local $l3374 i32) + (local $l3375 i32) + (local $l3376 i32) + (local $l3377 i32) + (local $l3378 i32) + (local $l3379 i32) + (local $l3380 i32) + (local $l3381 i32) + (local $l3382 i32) + (local $l3383 i32) + (local $l3384 i32) + (local $l3385 i32) + (local $l3386 i32) + (local $l3387 i32) + (local $l3388 i32) + (local $l3389 i32) + (local $l3390 i32) + (local $l3391 i32) + (local $l3392 i32) + (local $l3393 i32) + (local $l3394 i32) + (local $l3395 i32) + (local $l3396 i32) + (local $l3397 i32) + (local $l3398 i32) + (local $l3399 i32) + (local $l3400 i32) + (local $l3401 i32) + (local $l3402 i32) + (local $l3403 i32) + (local $l3404 i32) + (local $l3405 i32) + (local $l3406 i32) + (local $l3407 i32) + (local $l3408 i32) + (local $l3409 i32) + (local $l3410 i32) + (local $l3411 i32) + (local $l3412 i32) + (local $l3413 i32) + (local $l3414 i32) + (local $l3415 i32) + (local $l3416 i32) + (local $l3417 i32) + (local $l3418 i32) + (local $l3419 i32) + (local $l3420 i32) + (local $l3421 i32) + (local $l3422 i32) + (local $l3423 i32) + (local $l3424 i32) + (local $l3425 i32) + (local $l3426 i32) + (local $l3427 i32) + (local $l3428 i32) + (local $l3429 i32) + (local $l3430 i32) + (local $l3431 i32) + (local $l3432 i32) + (local $l3433 i32) + (local $l3434 i32) + (local $l3435 i32) + (local $l3436 i32) + (local $l3437 i32) + (local $l3438 i32) + (local $l3439 i32) + (local $l3440 i32) + (local $l3441 i32) + (local $l3442 i32) + (local $l3443 i32) + (local $l3444 i32) + (local $l3445 i32) + (local $l3446 i32) + (local $l3447 i32) + (local $l3448 i32) + (local $l3449 i32) + (local $l3450 i32) + (local $l3451 i32) + (local $l3452 i32) + (local $l3453 i32) + (local $l3454 i32) + (local $l3455 i32) + (local $l3456 i32) + (local $l3457 i32) + (local $l3458 i32) + (local $l3459 i32) + (local $l3460 i32) + (local $l3461 i32) + (local $l3462 i32) + (local $l3463 i32) + (local $l3464 i32) + (local $l3465 i32) + (local $l3466 i32) + (local $l3467 i32) + (local $l3468 i32) + (local $l3469 i32) + (local $l3470 i32) + (local $l3471 i32) + (local $l3472 i32) + (local $l3473 i32) + (local $l3474 i32) + (local $l3475 i32) + (local $l3476 i32) + (local $l3477 i32) + (local $l3478 i32) + (local $l3479 i32) + (local $l3480 i32) + (local $l3481 i32) + (local $l3482 i32) + (local $l3483 i32) + (local $l3484 i32) + (local $l3485 i32) + (local $l3486 i32) + (local $l3487 i32) + (local $l3488 i32) + (local $l3489 i32) + (local $l3490 i32) + (local $l3491 i32) + (local $l3492 i32) + (local $l3493 i32) + (local $l3494 i32) + (local $l3495 i32) + (local $l3496 i32) + (local $l3497 i32) + (local $l3498 i32) + (local $l3499 i32) + (local $l3500 i32) + (local $l3501 i32) + (local $l3502 i32) + (local $l3503 i32) + (local $l3504 i32) + (local $l3505 i32) + (local $l3506 i32) + (local $l3507 i32) + (local $l3508 i32) + (local $l3509 i32) + (local $l3510 i32) + (local $l3511 i32) + (local $l3512 i32) + (local $l3513 i32) + (local $l3514 i32) + (local $l3515 i32) + (local $l3516 i32) + (local $l3517 i32) + (local $l3518 i32) + (local $l3519 i32) + (local $l3520 i32) + (local $l3521 i32) + (local $l3522 i32) + (local $l3523 i32) + (local $l3524 i32) + (local $l3525 i32) + (local $l3526 i32) + (local $l3527 i32) + (local $l3528 i32) + (local $l3529 i32) + (local $l3530 i32) + (local $l3531 i32) + (local $l3532 i32) + (local $l3533 i32) + (local $l3534 i32) + (local $l3535 i32) + (local $l3536 i32) + (local $l3537 i32) + (local $l3538 i32) + (local $l3539 i32) + (local $l3540 i32) + (local $l3541 i32) + (local $l3542 i32) + (local $l3543 i32) + (local $l3544 i32) + (local $l3545 i32) + (local $l3546 i32) + (local $l3547 i32) + (local $l3548 i32) + (local $l3549 i32) + (local $l3550 i32) + (local $l3551 i32) + (local $l3552 i32) + (local $l3553 i32) + (local $l3554 i32) + (local $l3555 i32) + (local $l3556 i32) + (local $l3557 i32) + (local $l3558 i32) + (local $l3559 i32) + (local $l3560 i32) + (local $l3561 i32) + (local $l3562 i32) + (local $l3563 i32) + (local $l3564 i32) + (local $l3565 i32) + (local $l3566 i32) + (local $l3567 i32) + (local $l3568 i32) + (local $l3569 i32) + (local $l3570 i32) + (local $l3571 i32) + (local $l3572 i32) + (local $l3573 i32) + (local $l3574 i32) + (local $l3575 i32) + (local $l3576 i32) + (local $l3577 i32) + (local $l3578 i32) + (local $l3579 i32) + (local $l3580 i32) + (local $l3581 i32) + (local $l3582 i32) + (local $l3583 i32) + (local $l3584 i32) + (local $l3585 i32) + (local $l3586 i32) + (local $l3587 i32) + (local $l3588 i32) + (local $l3589 i32) + (local $l3590 i32) + (local $l3591 i32) + (local $l3592 i32) + (local $l3593 i32) + (local $l3594 i32) + (local $l3595 i32) + (local $l3596 i32) + (local $l3597 i32) + (local $l3598 i32) + (local $l3599 i32) + (local $l3600 i32) + (local $l3601 i32) + (local $l3602 i32) + (local $l3603 i32) + (local $l3604 i32) + (local $l3605 i32) + (local $l3606 i32) + (local $l3607 i32) + (local $l3608 i32) + (local $l3609 i32) + (local $l3610 i32) + (local $l3611 i32) + (local $l3612 i32) + (local $l3613 i32) + (local $l3614 i32) + (local $l3615 i32) + (local $l3616 i32) + (local $l3617 i32) + (local $l3618 i32) + (local $l3619 i32) + (local $l3620 i32) + (local $l3621 i32) + (local $l3622 i32) + (local $l3623 i32) + (local $l3624 i32) + (local $l3625 i32) + (local $l3626 i32) + (local $l3627 i32) + (local $l3628 i32) + (local $l3629 i32) + (local $l3630 i32) + (local $l3631 i32) + (local $l3632 i32) + (local $l3633 i32) + (local $l3634 i32) + (local $l3635 i32) + (local $l3636 i32) + (local $l3637 i32) + (local $l3638 i32) + (local $l3639 i32) + (local $l3640 i32) + (local $l3641 i32) + (local $l3642 i32) + (local $l3643 i32) + (local $l3644 i32) + (local $l3645 i32) + (local $l3646 i32) + (local $l3647 i32) + (local $l3648 i32) + (local $l3649 i32) + (local $l3650 i32) + (local $l3651 i32) + (local $l3652 i32) + (local $l3653 i32) + (local $l3654 i32) + (local $l3655 i32) + (local $l3656 i32) + (local $l3657 i32) + (local $l3658 i32) + (local $l3659 i32) + (local $l3660 i32) + (local $l3661 i32) + (local $l3662 i32) + (local $l3663 i32) + (local $l3664 i32) + (local $l3665 i32) + (local $l3666 i32) + (local $l3667 i32) + (local $l3668 i32) + (local $l3669 i32) + (local $l3670 i32) + (local $l3671 i32) + (local $l3672 i32) + (local $l3673 i32) + (local $l3674 i32) + (local $l3675 i32) + (local $l3676 i32) + (local $l3677 i32) + (local $l3678 i32) + (local $l3679 i32) + (local $l3680 i32) + (local $l3681 i32) + (local $l3682 i32) + (local $l3683 i32) + (local $l3684 i32) + (local $l3685 i32) + (local $l3686 i32) + (local $l3687 i32) + (local $l3688 i32) + (local $l3689 i32) + (local $l3690 i32) + (local $l3691 i32) + (local $l3692 i32) + (local $l3693 i32) + (local $l3694 i32) + (local $l3695 i32) + (local $l3696 i32) + (local $l3697 i32) + (local $l3698 i32) + (local $l3699 i32) + (local $l3700 i32) + (local $l3701 i32) + (local $l3702 i32) + (local $l3703 i32) + (local $l3704 i32) + (local $l3705 i32) + (local $l3706 i32) + (local $l3707 i32) + (local $l3708 i32) + (local $l3709 i32) + (local $l3710 i32) + (local $l3711 i32) + (local $l3712 i32) + (local $l3713 i32) + (local $l3714 i32) + (local $l3715 i32) + (local $l3716 i32) + (local $l3717 i32) + (local $l3718 i32) + (local $l3719 i32) + (local $l3720 i32) + (local $l3721 i32) + (local $l3722 i32) + (local $l3723 i32) + (local $l3724 i32) + (local $l3725 i32) + (local $l3726 i32) + (local $l3727 i32) + (local $l3728 i32) + (local $l3729 i32) + (local $l3730 i32) + (local $l3731 i32) + (local $l3732 i32) + (local $l3733 i32) + (local $l3734 i32) + (local $l3735 i32) + (local $l3736 i32) + (local $l3737 i32) + (local $l3738 i32) + (local $l3739 i32) + (local $l3740 i32) + (local $l3741 i32) + (local $l3742 i32) + (local $l3743 i32) + (local $l3744 i32) + (local $l3745 i32) + (local $l3746 i32) + (local $l3747 i32) + (local $l3748 i32) + (local $l3749 i32) + (local $l3750 i32) + (local $l3751 i32) + (local $l3752 i32) + (local $l3753 i32) + (local $l3754 i32) + (local $l3755 i32) + (local $l3756 i32) + (local $l3757 i32) + (local $l3758 i32) + (local $l3759 i32) + (local $l3760 i32) + (local $l3761 i32) + (local $l3762 i32) + (local $l3763 i32) + (local $l3764 i32) + (local $l3765 i32) + (local $l3766 i32) + (local $l3767 i32) + (local $l3768 i32) + (local $l3769 i32) + (local $l3770 i32) + (local $l3771 i32) + (local $l3772 i32) + (local $l3773 i32) + (local $l3774 i32) + (local $l3775 i32) + (local $l3776 i32) + (local $l3777 i32) + (local $l3778 i32) + (local $l3779 i32) + (local $l3780 i32) + (local $l3781 i32) + (local $l3782 i32) + (local $l3783 i32) + (local $l3784 i32) + (local $l3785 i32) + (local $l3786 i32) + (local $l3787 i32) + (local $l3788 i32) + (local $l3789 i32) + (local $l3790 i32) + (local $l3791 i32) + (local $l3792 i32) + (local $l3793 i32) + (local $l3794 i32) + (local $l3795 i32) + (local $l3796 i32) + (local $l3797 i32) + (local $l3798 i32) + (local $l3799 i32) + (local $l3800 i32) + (local $l3801 i32) + (local $l3802 i32) + (local $l3803 i32) + (local $l3804 i32) + (local $l3805 i32) + (local $l3806 i32) + (local $l3807 i32) + (local $l3808 i32) + (local $l3809 i32) + (local $l3810 i32) + (local $l3811 i32) + (local $l3812 i32) + (local $l3813 i32) + (local $l3814 i32) + (local $l3815 i32) + (local $l3816 i32) + (local $l3817 i32) + (local $l3818 i32) + (local $l3819 i32) + (local $l3820 i32) + (local $l3821 i32) + (local $l3822 i32) + (local $l3823 i32) + (local $l3824 i32) + (local $l3825 i32) + (local $l3826 i32) + (local $l3827 i32) + (local $l3828 i32) + (local $l3829 i32) + (local $l3830 i32) + (local $l3831 i32) + (local $l3832 i32) + (local $l3833 i32) + (local $l3834 i32) + (local $l3835 i32) + (local $l3836 i32) + (local $l3837 i32) + (local $l3838 i32) + (local $l3839 i32) + (local $l3840 i32) + (local $l3841 i32) + (local $l3842 i32) + (local $l3843 i32) + (local $l3844 i32) + (local $l3845 i32) + (local $l3846 i32) + (local $l3847 i32) + (local $l3848 i32) + (local $l3849 i32) + (local $l3850 i32) + (local $l3851 i32) + (local $l3852 i32) + (local $l3853 i32) + (local $l3854 i32) + (local $l3855 i32) + (local $l3856 i32) + (local $l3857 i32) + (local $l3858 i32) + (local $l3859 i32) + (local $l3860 i32) + (local $l3861 i32) + (local $l3862 i32) + (local $l3863 i32) + (local $l3864 i32) + (local $l3865 i32) + (local $l3866 i32) + (local $l3867 i32) + (local $l3868 i32) + (local $l3869 i32) + (local $l3870 i32) + (local $l3871 i32) + (local $l3872 i32) + (local $l3873 i32) + (local $l3874 i32) + (local $l3875 i32) + (local $l3876 i32) + (local $l3877 i32) + (local $l3878 i32) + (local $l3879 i32) + (local $l3880 i32) + (local $l3881 i32) + (local $l3882 i32) + (local $l3883 i32) + (local $l3884 i32) + (local $l3885 i32) + (local $l3886 i32) + (local $l3887 i32) + (local $l3888 i32) + (local $l3889 i32) + (local $l3890 i32) + (local $l3891 i32) + (local $l3892 i32) + (local $l3893 i32) + (local $l3894 i32) + (local $l3895 i32) + (local $l3896 i32) + (local $l3897 i32) + (local $l3898 i32) + (local $l3899 i32) + (local $l3900 i32) + (local $l3901 i32) + (local $l3902 i32) + (local $l3903 i32) + (local $l3904 i32) + (local $l3905 i32) + (local $l3906 i32) + (local $l3907 i32) + (local $l3908 i32) + (local $l3909 i32) + (local $l3910 i32) + (local $l3911 i32) + (local $l3912 i32) + (local $l3913 i32) + (local $l3914 i32) + (local $l3915 i32) + (local $l3916 i32) + (local $l3917 i32) + (local $l3918 i32) + (local $l3919 i32) + (local $l3920 i32) + (local $l3921 i32) + (local $l3922 i32) + (local $l3923 i32) + (local $l3924 i32) + (local $l3925 i32) + (local $l3926 i32) + (local $l3927 i32) + (local $l3928 i32) + (local $l3929 i32) + (local $l3930 i32) + (local $l3931 i32) + (local $l3932 i32) + (local $l3933 i32) + (local $l3934 i32) + (local $l3935 i32) + (local $l3936 i32) + (local $l3937 i32) + (local $l3938 i32) + (local $l3939 i32) + (local $l3940 i32) + (local $l3941 i32) + (local $l3942 i32) + (local $l3943 i32) + (local $l3944 i32) + (local $l3945 i32) + (local $l3946 i32) + (local $l3947 i32) + (local $l3948 i32) + (local $l3949 i32) + (local $l3950 i32) + (local $l3951 i32) + (local $l3952 i32) + (local $l3953 i32) + (local $l3954 i32) + (local $l3955 i32) + (local $l3956 i32) + (local $l3957 i32) + (local $l3958 i32) + (local $l3959 i32) + (local $l3960 i32) + (local $l3961 i32) + (local $l3962 i32) + (local $l3963 i32) + (local $l3964 i32) + (local $l3965 i32) + (local $l3966 i32) + (local $l3967 i32) + (local $l3968 i32) + (local $l3969 i32) + (local $l3970 i32) + (local $l3971 i32) + (local $l3972 i32) + (local $l3973 i32) + (local $l3974 i32) + (local $l3975 i32) + (local $l3976 i32) + (local $l3977 i32) + (local $l3978 i32) + (local $l3979 i32) + (local $l3980 i32) + (local $l3981 i32) + (local $l3982 i32) + (local $l3983 i32) + (local $l3984 i32) + (local $l3985 i32) + (local $l3986 i32) + (local $l3987 i32) + (local $l3988 i32) + (local $l3989 i32) + (local $l3990 i32) + (local $l3991 i32) + (local $l3992 i32) + (local $l3993 i32) + (local $l3994 i32) + (local $l3995 i32) + (local $l3996 i32) + (local $l3997 i32) + (local $l3998 i32) + (local $l3999 i32) + (local $l4000 i32) + (local $l4001 i32) + (local $l4002 i32) + (local $l4003 i32) + (local $l4004 i32) + (local $l4005 i32) + (local $l4006 i32) + (local $l4007 i32) + (local $l4008 i32) + (local $l4009 i32) + (local $l4010 i32) + (local $l4011 i32) + (local $l4012 i32) + (local $l4013 i32) + (local $l4014 i32) + (local $l4015 i32) + (local $l4016 i32) + (local $l4017 i32) + (local $l4018 i32) + (local $l4019 i32) + (local $l4020 i32) + (local $l4021 i32) + (local $l4022 i32) + (local $l4023 i32) + (local $l4024 i32) + (local $l4025 i32) + (local $l4026 i32) + (local $l4027 i32) + (local $l4028 i32) + (local $l4029 i32) + (local $l4030 i32) + (local $l4031 i32) + (local $l4032 i32) + (local $l4033 i32) + (local $l4034 i32) + (local $l4035 i32) + (local $l4036 i32) + (local $l4037 i32) + (local $l4038 i32) + (local $l4039 i32) + (local $l4040 i32) + (local $l4041 i32) + (local $l4042 i32) + (local $l4043 i32) + (local $l4044 i32) + (local $l4045 i32) + (local $l4046 i32) + (local $l4047 i32) + (local $l4048 i32) + (local $l4049 i32) + (local $l4050 i32) + (local $l4051 i32) + (local $l4052 i32) + (local $l4053 i32) + (local $l4054 i32) + (local $l4055 i32) + (local $l4056 i32) + (local $l4057 i32) + (local $l4058 i32) + (local $l4059 i32) + (local $l4060 i32) + (local $l4061 i32) + (local $l4062 i32) + (local $l4063 i32) + (local $l4064 i32) + (local $l4065 i32) + (local $l4066 i32) + (local $l4067 i32) + (local $l4068 i32) + (local $l4069 i32) + (local $l4070 i32) + (local $l4071 i32) + (local $l4072 i32) + (local $l4073 i32) + (local $l4074 i32) + (local $l4075 i32) + (local $l4076 i32) + (local $l4077 i32) + (local $l4078 i32) + (local $l4079 i32) + (local $l4080 i32) + (local $l4081 i32) + (local $l4082 i32) + (local $l4083 i32) + (local $l4084 i32) + (local $l4085 i32) + (local $l4086 i32) + (local $l4087 i32) + (local $l4088 i32) + (local $l4089 i32) + (local $l4090 i32) + (local $l4091 i32) + (local $l4092 i32) + (local $l4093 i32) + (local $l4094 i32) + (local $l4095 i32) + (local $l4096 i32) + (local $l4097 i32) + (local $l4098 i32) + (local $l4099 i32) + (local $l4100 i32) + (local $l4101 i32) + (local $l4102 i32) + (local $l4103 i32) + (local $l4104 i32) + (local $l4105 i32) + (local $l4106 i32) + (local $l4107 i32) + (local $l4108 i32) + (local $l4109 i32) + (local $l4110 i32) + (local $l4111 i32) + (local $l4112 i32) + (local $l4113 i32) + (local $l4114 i32) + (local $l4115 i32) + (local $l4116 i32) + (local $l4117 i32) + (local $l4118 i32) + (local $l4119 i32) + (local $l4120 i32) + (local $l4121 i32) + (local $l4122 i32) + (local $l4123 i32) + (local $l4124 i32) + (local $l4125 i32) + (local $l4126 i32) + (local $l4127 i32) + (local $l4128 i32) + (local $l4129 i32) + (local $l4130 i32) + (local $l4131 i32) + (local $l4132 i32) + (local $l4133 i32) + (local $l4134 i32) + (local $l4135 i32) + (local $l4136 i32) + (local $l4137 i32) + (local $l4138 i32) + (local $l4139 i32) + (local $l4140 i32) + (local $l4141 i32) + (local $l4142 i32) + (local $l4143 i32) + (local $l4144 i32) + (local $l4145 i32) + (local $l4146 i32) + (local $l4147 i32) + (local $l4148 i32) + (local $l4149 i32) + (local $l4150 i32) + (local $l4151 i32) + (local $l4152 i32) + (local $l4153 i32) + (local $l4154 i32) + (local $l4155 i32) + (local $l4156 i32) + (local $l4157 i32) + (local $l4158 i32) + (local $l4159 i32) + (local $l4160 i32) + (local $l4161 i32) + (local $l4162 i32) + (local $l4163 i32) + (local $l4164 i32) + (local $l4165 i32) + (local $l4166 i32) + (local $l4167 i32) + (local $l4168 i32) + (local $l4169 i32) + (local $l4170 i32) + (local $l4171 i32) + (local $l4172 i32) + (local $l4173 i32) + (local $l4174 i32) + (local $l4175 i32) + (local $l4176 i32) + (local $l4177 i32) + (local $l4178 i32) + (local $l4179 i32) + (local $l4180 i32) + (local $l4181 i32) + (local $l4182 i32) + (local $l4183 i32) + (local $l4184 i32) + (local $l4185 i32) + (local $l4186 i32) + (local $l4187 i32) + (local $l4188 i32) + (local $l4189 i32) + (local $l4190 i32) + (local $l4191 i32) + (local $l4192 i32) + (local $l4193 i32) + (local $l4194 i32) + (local $l4195 i32) + (local $l4196 i32) + (local $l4197 i32) + (local $l4198 i32) + (local $l4199 i32) + (local $l4200 i32) + (local $l4201 i32) + (local $l4202 i32) + (local $l4203 i32) + (local $l4204 i32) + (local $l4205 i32) + (local $l4206 i32) + (local $l4207 i32) + (local $l4208 i32) + (local $l4209 i32) + (local $l4210 i32) + (local $l4211 i32) + (local $l4212 i32) + (local $l4213 i32) + (local $l4214 i32) + (local $l4215 i32) + (local $l4216 i32) + (local $l4217 i32) + (local $l4218 i32) + (local $l4219 i32) + (local $l4220 i32) + (local $l4221 i32) + (local $l4222 i32) + (local $l4223 i32) + (local $l4224 i32) + (local $l4225 i32) + (local $l4226 i32) + (local $l4227 i32) + (local $l4228 i32) + (local $l4229 i32) + (local $l4230 i32) + (local $l4231 i32) + (local $l4232 i32) + (local $l4233 i32) + (local $l4234 i32) + (local $l4235 i32) + (local $l4236 i32) + (local $l4237 i32) + (local $l4238 i32) + (local $l4239 i32) + (local $l4240 i32) + (local $l4241 i32) + (local $l4242 i32) + (local $l4243 i32) + (local $l4244 i32) + (local $l4245 i32) + (local $l4246 i32) + (local $l4247 i32) + (local $l4248 i32) + (local $l4249 i32) + (local $l4250 i32) + (local $l4251 i32) + (local $l4252 i32) + (local $l4253 i32) + (local $l4254 i32) + (local $l4255 i32) + (local $l4256 i32) + (local $l4257 i32) + (local $l4258 i32) + (local $l4259 i32) + (local $l4260 i32) + (local $l4261 i32) + (local $l4262 i32) + (local $l4263 i32) + (local $l4264 i32) + (local $l4265 i32) + (local $l4266 i32) + (local $l4267 i32) + (local $l4268 i32) + (local $l4269 i32) + (local $l4270 i32) + (local $l4271 i32) + (local $l4272 i32) + (local $l4273 i32) + (local $l4274 i32) + (local $l4275 i32) + (local $l4276 i32) + (local $l4277 i32) + (local $l4278 i32) + (local $l4279 i32) + (local $l4280 i32) + (local $l4281 i32) + (local $l4282 i32) + (local $l4283 i32) + (local $l4284 i32) + (local $l4285 i32) + (local $l4286 i32) + (local $l4287 i32) + (local $l4288 i32) + (local $l4289 i32) + (local $l4290 i32) + (local $l4291 i32) + (local $l4292 i32) + (local $l4293 i32) + (local $l4294 i32) + (local $l4295 i32) + (local $l4296 i32) + (local $l4297 i32) + (local $l4298 i32) + (local $l4299 i32) + (local $l4300 i32) + (local $l4301 i32) + (local $l4302 i32) + (local $l4303 i32) + (local $l4304 i32) + (local $l4305 i32) + (local $l4306 i32) + (local $l4307 i32) + (local $l4308 i32) + (local $l4309 i32) + (local $l4310 i32) + (local $l4311 i32) + (local $l4312 i32) + (local $l4313 i32) + (local $l4314 i32) + (local $l4315 i32) + (local $l4316 i32) + (local $l4317 i32) + (local $l4318 i32) + (local $l4319 i32) + (local $l4320 i32) + (local $l4321 i32) + (local $l4322 i32) + (local $l4323 i32) + (local $l4324 i32) + (local $l4325 i32) + (local $l4326 i32) + (local $l4327 i32) + (local $l4328 i32) + (local $l4329 i32) + (local $l4330 i32) + (local $l4331 i32) + (local $l4332 i32) + (local $l4333 i32) + (local $l4334 i32) + (local $l4335 i32) + (local $l4336 i32) + (local $l4337 i32) + (local $l4338 i32) + (local $l4339 i32) + (local $l4340 i32) + (local $l4341 i32) + (local $l4342 i32) + (local $l4343 i32) + (local $l4344 i32) + (local $l4345 i32) + (local $l4346 i32) + (local $l4347 i32) + (local $l4348 i32) + (local $l4349 i32) + (local $l4350 i32) + (local $l4351 i32) + (local $l4352 i32) + (local $l4353 i32) + (local $l4354 i32) + (local $l4355 i32) + (local $l4356 i32) + (local $l4357 i32) + (local $l4358 i32) + (local $l4359 i32) + (local $l4360 i32) + (local $l4361 i32) + (local $l4362 i32) + (local $l4363 i32) + (local $l4364 i32) + (local $l4365 i32) + (local $l4366 i32) + (local $l4367 i32) + (local $l4368 i32) + (local $l4369 i32) + (local $l4370 i32) + (local $l4371 i32) + (local $l4372 i32) + (local $l4373 i32) + (local $l4374 i32) + (local $l4375 i32) + (local $l4376 i32) + (local $l4377 i32) + (local $l4378 i32) + (local $l4379 i32) + (local $l4380 i32) + (local $l4381 i32) + (local $l4382 i32) + (local $l4383 i32) + (local $l4384 i32) + (local $l4385 i32) + (local $l4386 i32) + (local $l4387 i32) + (local $l4388 i32) + (local $l4389 i32) + (local $l4390 i32) + (local $l4391 i32) + (local $l4392 i32) + (local $l4393 i32) + (local $l4394 i32) + (local $l4395 i32) + (local $l4396 i32) + (local $l4397 i32) + (local $l4398 i32) + (local $l4399 i32) + (local $l4400 i32) + (local $l4401 i32) + (local $l4402 i32) + (local $l4403 i32) + (local $l4404 i32) + (local $l4405 i32) + (local $l4406 i32) + (local $l4407 i32) + (local $l4408 i32) + (local $l4409 i32) + (local $l4410 i32) + (local $l4411 i32) + (local $l4412 i32) + (local $l4413 i32) + (local $l4414 i32) + (local $l4415 i32) + (local $l4416 i32) + (local $l4417 i32) + (local $l4418 i32) + (local $l4419 i32) + (local $l4420 i32) + (local $l4421 i32) + (local $l4422 i32) + (local $l4423 i32) + (local $l4424 i32) + (local $l4425 i32) + (local $l4426 i32) + (local $l4427 i32) + (local $l4428 i32) + (local $l4429 i32) + (local $l4430 i32) + (local $l4431 i32) + (local $l4432 i32) + (local $l4433 i32) + (local $l4434 i32) + (local $l4435 i32) + (local $l4436 i32) + (local $l4437 i32) + (local $l4438 i32) + (local $l4439 i32) + (local $l4440 i32) + (local $l4441 i32) + (local $l4442 i32) + (local $l4443 i32) + (local $l4444 i32) + (local $l4445 i32) + (local $l4446 i32) + (local $l4447 i32) + (local $l4448 i32) + (local $l4449 i32) + (local $l4450 i32) + (local $l4451 i32) + (local $l4452 i32) + (local $l4453 i32) + (local $l4454 i32) + (local $l4455 i32) + (local $l4456 i32) + (local $l4457 i32) + (local $l4458 i32) + (local $l4459 i32) + (local $l4460 i32) + (local $l4461 i32) + (local $l4462 i32) + (local $l4463 i32) + (local $l4464 i32) + (local $l4465 i32) + (local $l4466 i32) + (local $l4467 i32) + (local $l4468 i32) + (local $l4469 i32) + (local $l4470 i32) + (local $l4471 i32) + (local $l4472 i32) + (local $l4473 i32) + (local $l4474 i32) + (local $l4475 i32) + (local $l4476 i32) + (local $l4477 i32) + (local $l4478 i32) + (local $l4479 i32) + (local $l4480 i32) + (local $l4481 i32) + (local $l4482 i32) + (local $l4483 i32) + (local $l4484 i32) + (local $l4485 i32) + (local $l4486 i32) + (local $l4487 i32) + (local $l4488 i32) + (local $l4489 i32) + (local $l4490 i32) + (local $l4491 i32) + (local $l4492 i32) + (local $l4493 i32) + (local $l4494 i32) + (local $l4495 i32) + (local $l4496 i32) + (local $l4497 i32) + (local $l4498 i32) + (local $l4499 i32) + (local $l4500 i32) + (local $l4501 i32) + (local $l4502 i32) + (local $l4503 i32) + (local $l4504 i32) + (local $l4505 i32) + (local $l4506 i32) + (local $l4507 i32) + (local $l4508 i32) + (local $l4509 i32) + (local $l4510 i32) + (local $l4511 i32) + (local $l4512 i32) + (local $l4513 i32) + (local $l4514 i32) + (local $l4515 i32) + (local $l4516 i32) + (local $l4517 i32) + (local $l4518 i32) + (local $l4519 i32) + (local $l4520 i32) + (local $l4521 i32) + (local $l4522 i32) + (local $l4523 i32) + (local $l4524 i32) + (local $l4525 i32) + (local $l4526 i32) + (local $l4527 i32) + (local $l4528 i32) + (local $l4529 i32) + (local $l4530 i32) + (local $l4531 i32) + (local $l4532 i32) + (local $l4533 i32) + (local $l4534 i32) + (local $l4535 i32) + (local $l4536 i32) + (local $l4537 i32) + (local $l4538 i32) + (local $l4539 i32) + (local $l4540 i32) + (local $l4541 i32) + (local $l4542 i32) + (local $l4543 i32) + (local $l4544 i32) + (local $l4545 i32) + (local $l4546 i32) + (local $l4547 i32) + (local $l4548 i32) + (local $l4549 i32) + (local $l4550 i32) + (local $l4551 i32) + (local $l4552 i32) + (local $l4553 i32) + (local $l4554 i32) + (local $l4555 i32) + (local $l4556 i32) + (local $l4557 i32) + (local $l4558 i32) + (local $l4559 i32) + (local $l4560 i32) + (local $l4561 i32) + (local $l4562 i32) + (local $l4563 i32) + (local $l4564 i32) + (local $l4565 i32) + (local $l4566 i32) + (local $l4567 i32) + (local $l4568 i32) + (local $l4569 i32) + (local $l4570 i32) + (local $l4571 i32) + (local $l4572 i32) + (local $l4573 i32) + (local $l4574 i32) + (local $l4575 i32) + (local $l4576 i32) + (local $l4577 i32) + (local $l4578 i32) + (local $l4579 i32) + (local $l4580 i32) + (local $l4581 i32) + (local $l4582 i32) + (local $l4583 i32) + (local $l4584 i32) + (local $l4585 i32) + (local $l4586 i32) + (local $l4587 i32) + (local $l4588 i32) + (local $l4589 i32) + (local $l4590 i32) + (local $l4591 i32) + (local $l4592 i32) + (local $l4593 i32) + (local $l4594 i32) + (local $l4595 i32) + (local $l4596 i32) + (local $l4597 i32) + (local $l4598 i32) + (local $l4599 i32) + (local $l4600 i32) + (local $l4601 i32) + (local $l4602 i32) + (local $l4603 i32) + (local $l4604 i32) + (local $l4605 i32) + (local $l4606 i32) + (local $l4607 i32) + (local $l4608 i32) + (local $l4609 i32) + (local $l4610 i32) + (local $l4611 i32) + (local $l4612 i32) + (local $l4613 i32) + (local $l4614 i32) + (local $l4615 i32) + (local $l4616 i32) + (local $l4617 i32) + (local $l4618 i32) + (local $l4619 i32) + (local $l4620 i32) + (local $l4621 i32) + (local $l4622 i32) + (local $l4623 i32) + (local $l4624 i32) + (local $l4625 i32) + (local $l4626 i32) + (local $l4627 i32) + (local $l4628 i32) + (local $l4629 i32) + (local $l4630 i32) + (local $l4631 i32) + (local $l4632 i32) + (local $l4633 i32) + (local $l4634 i32) + (local $l4635 i32) + (local $l4636 i32) + (local $l4637 i32) + (local $l4638 i32) + (local $l4639 i32) + (local $l4640 i32) + (local $l4641 i32) + (local $l4642 i32) + (local $l4643 i32) + (local $l4644 i32) + (local $l4645 i32) + (local $l4646 i32) + (local $l4647 i32) + (local $l4648 i32) + (local $l4649 i32) + (local $l4650 i32) + (local $l4651 i32) + (local $l4652 i32) + (local $l4653 i32) + (local $l4654 i32) + (local $l4655 i32) + (local $l4656 i32) + (local $l4657 i32) + (local $l4658 i32) + (local $l4659 i32) + (local $l4660 i32) + (local $l4661 i32) + (local $l4662 i32) + (local $l4663 i32) + (local $l4664 i32) + (local $l4665 i32) + (local $l4666 i32) + (local $l4667 i32) + (local $l4668 i32) + (local $l4669 i32) + (local $l4670 i32) + (local $l4671 i32) + (local $l4672 i32) + (local $l4673 i32) + (local $l4674 i32) + (local $l4675 i32) + (local $l4676 i32) + (local $l4677 i32) + (local $l4678 i32) + (local $l4679 i32) + (local $l4680 i32) + (local $l4681 i32) + (local $l4682 i32) + (local $l4683 i32) + (local $l4684 i32) + (local $l4685 i32) + (local $l4686 i32) + (local $l4687 i32) + (local $l4688 i32) + (local $l4689 i32) + (local $l4690 i32) + (local $l4691 i32) + (local $l4692 i32) + (local $l4693 i32) + (local $l4694 i32) + (local $l4695 i32) + (local $l4696 i32) + (local $l4697 i32) + (local $l4698 i32) + (local $l4699 i32) + (local $l4700 i32) + (local $l4701 i32) + (local $l4702 i32) + (local $l4703 i32) + (local $l4704 i32) + (local $l4705 i32) + (local $l4706 i32) + (local $l4707 i32) + (local $l4708 i32) + (local $l4709 i32) + (local $l4710 i32) + (local $l4711 i32) + (local $l4712 i32) + (local $l4713 i32) + (local $l4714 i32) + (local $l4715 i32) + (local $l4716 i32) + (local $l4717 i32) + (local $l4718 i32) + (local $l4719 i32) + (local $l4720 i32) + (local $l4721 i32) + (local $l4722 i32) + (local $l4723 i32) + (local $l4724 i32) + (local $l4725 i32) + (local $l4726 i32) + (local $l4727 i32) + (local $l4728 i32) + (local $l4729 i32) + (local $l4730 i32) + (local $l4731 i32) + (local $l4732 i32) + (local $l4733 i32) + (local $l4734 i32) + (local $l4735 i32) + (local $l4736 i32) + (local $l4737 i32) + (local $l4738 i32) + (local $l4739 i32) + (local $l4740 i32) + (local $l4741 i32) + (local $l4742 i32) + (local $l4743 i32) + (local $l4744 i32) + (local $l4745 i32) + (local $l4746 i32) + (local $l4747 i32) + (local $l4748 i32) + (local $l4749 i32) + (local $l4750 i32) + (local $l4751 i32) + (local $l4752 i32) + (local $l4753 i32) + (local $l4754 i32) + (local $l4755 i32) + (local $l4756 i32) + (local $l4757 i32) + (local $l4758 i32) + (local $l4759 i32) + (local $l4760 i32) + (local $l4761 i32) + (local $l4762 i32) + (local $l4763 i32) + (local $l4764 i32) + (local $l4765 i32) + (local $l4766 i32) + (local $l4767 i32) + (local $l4768 i32) + (local $l4769 i32) + (local $l4770 i32) + (local $l4771 i32) + (local $l4772 i32) + (local $l4773 i32) + (local $l4774 i32) + (local $l4775 i32) + (local $l4776 i32) + (local $l4777 i32) + (local $l4778 i32) + (local $l4779 i32) + (local $l4780 i32) + (local $l4781 i32) + (local $l4782 i32) + (local $l4783 i32) + (local $l4784 i32) + (local $l4785 i32) + (local $l4786 i32) + (local $l4787 i32) + (local $l4788 i32) + (local $l4789 i32) + (local $l4790 i32) + (local $l4791 i32) + (local $l4792 i32) + (local $l4793 i32) + (local $l4794 i32) + (local $l4795 i32) + (local $l4796 i32) + (local $l4797 i32) + (local $l4798 i32) + (local $l4799 i32) + (local $l4800 i32) + (local $l4801 i32) + (local $l4802 i32) + (local $l4803 i32) + (local $l4804 i32) + (local $l4805 i32) + (local $l4806 i32) + (local $l4807 i32) + (local $l4808 i32) + (local $l4809 i32) + (local $l4810 i32) + (local $l4811 i32) + (local $l4812 i32) + (local $l4813 i32) + (local $l4814 i32) + (local $l4815 i32) + (local $l4816 i32) + (local $l4817 i32) + (local $l4818 i32) + (local $l4819 i32) + (local $l4820 i32) + (local $l4821 i32) + (local $l4822 i32) + (local $l4823 i32) + (local $l4824 i32) + (local $l4825 i32) + (local $l4826 i32) + (local $l4827 i32) + (local $l4828 i32) + (local $l4829 i32) + (local $l4830 i32) + (local $l4831 i32) + (local $l4832 i32) + (local $l4833 i32) + (local $l4834 i32) + (local $l4835 i32) + (local $l4836 i32) + (local $l4837 i32) + (local $l4838 i32) + (local $l4839 i32) + (local $l4840 i32) + (local $l4841 i32) + (local $l4842 i32) + (local $l4843 i32) + (local $l4844 i32) + (local $l4845 i32) + (local $l4846 i32) + (local $l4847 i32) + (local $l4848 i32) + (local $l4849 i32) + (local $l4850 i32) + (local $l4851 i32) + (local $l4852 i32) + (local $l4853 i32) + (local $l4854 i32) + (local $l4855 i32) + (local $l4856 i32) + (local $l4857 i32) + (local $l4858 i32) + (local $l4859 i32) + (local $l4860 i32) + (local $l4861 i32) + (local $l4862 i32) + (local $l4863 i32) + (local $l4864 i32) + (local $l4865 i32) + (local $l4866 i32) + (local $l4867 i32) + (local $l4868 i32) + (local $l4869 i32) + (local $l4870 i32) + (local $l4871 i32) + (local $l4872 i32) + (local $l4873 i32) + (local $l4874 i32) + (local $l4875 i32) + (local $l4876 i32) + (local $l4877 i32) + (local $l4878 i32) + (local $l4879 i32) + (local $l4880 i32) + (local $l4881 i32) + (local $l4882 i32) + (local $l4883 i32) + (local $l4884 i32) + (local $l4885 i32) + (local $l4886 i32) + (local $l4887 i32) + (local $l4888 i32) + (local $l4889 i32) + (local $l4890 i32) + (local $l4891 i32) + (local $l4892 i32) + (local $l4893 i32) + (local $l4894 i32) + (local $l4895 i32) + (local $l4896 i32) + (local $l4897 i32) + (local $l4898 i32) + (local $l4899 i32) + (local $l4900 i32) + (local $l4901 i32) + (local $l4902 i32) + (local $l4903 i32) + (local $l4904 i32) + (local $l4905 i32) + (local $l4906 i32) + (local $l4907 i32) + (local $l4908 i32) + (local $l4909 i32) + (local $l4910 i32) + (local $l4911 i32) + (local $l4912 i32) + (local $l4913 i32) + (local $l4914 i32) + (local $l4915 i32) + (local $l4916 i32) + (local $l4917 i32) + (local $l4918 i32) + (local $l4919 i32) + (local $l4920 i32) + (local $l4921 i32) + (local $l4922 i32) + (local $l4923 i32) + (local $l4924 i32) + (local $l4925 i32) + (local $l4926 i32) + (local $l4927 i32) + (local $l4928 i32) + (local $l4929 i32) + (local $l4930 i32) + (local $l4931 i32) + (local $l4932 i32) + (local $l4933 i32) + (local $l4934 i32) + (local $l4935 i32) + (local $l4936 i32) + (local $l4937 i32) + (local $l4938 i32) + (local $l4939 i32) + (local $l4940 i32) + (local $l4941 i32) + (local $l4942 i32) + (local $l4943 i32) + (local $l4944 i32) + (local $l4945 i32) + (local $l4946 i32) + (local $l4947 i32) + (local $l4948 i32) + (local $l4949 i32) + (local $l4950 i32) + (local $l4951 i32) + (local $l4952 i32) + (local $l4953 i32) + (local $l4954 i32) + (local $l4955 i32) + (local $l4956 i32) + (local $l4957 i32) + (local $l4958 i32) + (local $l4959 i32) + (local $l4960 i32) + (local $l4961 i32) + (local $l4962 i32) + (local $l4963 i32) + (local $l4964 i32) + (local $l4965 i32) + (local $l4966 i32) + (local $l4967 i32) + (local $l4968 i32) + (local $l4969 i32) + (local $l4970 i32) + (local $l4971 i32) + (local $l4972 i32) + (local $l4973 i32) + (local $l4974 i32) + (local $l4975 i32) + (local $l4976 i32) + (local $l4977 i32) + (local $l4978 i32) + (local $l4979 i32) + (local $l4980 i32) + (local $l4981 i32) + (local $l4982 i32) + (local $l4983 i32) + (local $l4984 i32) + (local $l4985 i32) + (local $l4986 i32) + (local $l4987 i32) + (local $l4988 i32) + (local $l4989 i32) + (local $l4990 i32) + (local $l4991 i32) + (local $l4992 i32) + (local $l4993 i32) + (local $l4994 i32) + (local $l4995 i32) + (local $l4996 i32) + (local $l4997 i32) + (local $l4998 i32) + (local $l4999 i32) + (local $l5000 i32) + (local $l5001 i32) + (local $l5002 i32) + (local $l5003 i32) + (local $l5004 i32) + (local $l5005 i32) + (local $l5006 i32) + (local $l5007 i32) + (local $l5008 i32) + (local $l5009 i32) + (local $l5010 i32) + (local $l5011 i32) + (local $l5012 i32) + (local $l5013 i32) + (local $l5014 i32) + (local $l5015 i32) + (local $l5016 i32) + (local $l5017 i32) + (local $l5018 i32) + (local $l5019 i32) + (local $l5020 i32) + (local $l5021 i32) + (local $l5022 i32) + (local $l5023 i32) + (local $l5024 i32) + (local $l5025 i32) + (local $l5026 i32) + (local $l5027 i32) + (local $l5028 i32) + (local $l5029 i32) + (local $l5030 i32) + (local $l5031 i32) + (local $l5032 i32) + (local $l5033 i32) + (local $l5034 i32) + (local $l5035 i32) + (local $l5036 i32) + (local $l5037 i32) + (local $l5038 i32) + (local $l5039 i32) + (local $l5040 i32) + (local $l5041 i32) + (local $l5042 i32) + (local $l5043 i32) + (local $l5044 i32) + (local $l5045 i32) + (local $l5046 i32) + (local $l5047 i32) + (local $l5048 i32) + (local $l5049 i32) + (local $l5050 i32) + (local $l5051 i32) + (local $l5052 i32) + (local $l5053 i32) + (local $l5054 i32) + (local $l5055 i32) + (local $l5056 i32) + (local $l5057 i32) + (local $l5058 i32) + (local $l5059 i32) + (local $l5060 i32) + (local $l5061 i32) + (local $l5062 i32) + (local $l5063 i32) + (local $l5064 i32) + (local $l5065 i32) + (local $l5066 i32) + (local $l5067 i32) + (local $l5068 i32) + (local $l5069 i32) + (local $l5070 i32) + (local $l5071 i32) + (local $l5072 i32) + (local $l5073 i32) + (local $l5074 i32) + (local $l5075 i32) + (local $l5076 i32) + (local $l5077 i32) + (local $l5078 i32) + (local $l5079 i32) + (local $l5080 i32) + (local $l5081 i32) + (local $l5082 i32) + (local $l5083 i32) + (local $l5084 i32) + (local $l5085 i32) + (local $l5086 i32) + (local $l5087 i32) + (local $l5088 i32) + (local $l5089 i32) + (local $l5090 i32) + (local $l5091 i32) + (local $l5092 i32) + (local $l5093 i32) + (local $l5094 i32) + (local $l5095 i32) + (local $l5096 i32) + (local $l5097 i32) + (local $l5098 i32) + (local $l5099 i32) + (local $l5100 i32) + (local $l5101 i32) + (local $l5102 i32) + (local $l5103 i32) + (local $l5104 i32) + (local $l5105 i32) + (local $l5106 i32) + (local $l5107 i32) + (local $l5108 i32) + (local $l5109 i32) + (local $l5110 i32) + (local $l5111 i32) + (local $l5112 i32) + (local $l5113 i32) + (local $l5114 i32) + (local $l5115 i32) + (local $l5116 i32) + (local $l5117 i32) + (local $l5118 i32) + (local $l5119 i32) + (local $l5120 i32) + (local $l5121 i32) + (local $l5122 i32) + (local $l5123 i32) + (local $l5124 i32) + (local $l5125 i32) + (local $l5126 i32) + (local $l5127 i32) + (local $l5128 i32) + (local $l5129 i32) + (local $l5130 i32) + (local $l5131 i32) + (local $l5132 i32) + (local $l5133 i32) + (local $l5134 i32) + (local $l5135 i32) + (local $l5136 i32) + (local $l5137 i32) + (local $l5138 i32) + (local $l5139 i32) + (local $l5140 i32) + (local $l5141 i32) + (local $l5142 i32) + (local $l5143 i32) + (local $l5144 i32) + (local $l5145 i32) + (local $l5146 i32) + (local $l5147 i32) + (local $l5148 i32) + (local $l5149 i32) + (local $l5150 i32) + (local $l5151 i32) + (local $l5152 i32) + (local $l5153 i32) + (local $l5154 i32) + (local $l5155 i32) + (local $l5156 i32) + (local $l5157 i32) + (local $l5158 i32) + (local $l5159 i32) + (local $l5160 i32) + (local $l5161 i32) + (local $l5162 i32) + (local $l5163 i32) + (local $l5164 i32) + (local $l5165 i32) + (local $l5166 i32) + (local $l5167 i32) + (local $l5168 i32) + (local $l5169 i32) + (local $l5170 i32) + (local $l5171 i32) + (local $l5172 i32) + (local $l5173 i32) + (local $l5174 i32) + (local $l5175 i32) + (local $l5176 i32) + (local $l5177 i32) + (local $l5178 i32) + (local $l5179 i32) + (local $l5180 i32) + (local $l5181 i32) + (local $l5182 i32) + (local $l5183 i32) + (local $l5184 i32) + (local $l5185 i32) + (local $l5186 i32) + (local $l5187 i32) + (local $l5188 i32) + (local $l5189 i32) + (local $l5190 i32) + (local $l5191 i32) + (local $l5192 i32) + (local $l5193 i32) + (local $l5194 i32) + (local $l5195 i32) + (local $l5196 i32) + (local $l5197 i32) + (local $l5198 i32) + (local $l5199 i32) + (local $l5200 i32) + (local $l5201 i32) + (local $l5202 i32) + (local $l5203 i32) + (local $l5204 i32) + (local $l5205 i32) + (local $l5206 i32) + (local $l5207 i32) + (local $l5208 i32) + (local $l5209 i32) + (local $l5210 i32) + (local $l5211 i32) + (local $l5212 i32) + (local $l5213 i32) + (local $l5214 i32) + (local $l5215 i32) + (local $l5216 i32) + (local $l5217 i32) + (local $l5218 i32) + (local $l5219 i32) + (local $l5220 i32) + (local $l5221 i32) + (local $l5222 i32) + (local $l5223 i32) + (local $l5224 i32) + (local $l5225 i32) + (local $l5226 i32) + (local $l5227 i32) + (local $l5228 i32) + (local $l5229 i32) + (local $l5230 i32) + (local $l5231 i32) + (local $l5232 i32) + (local $l5233 i32) + (local $l5234 i32) + (local $l5235 i32) + (local $l5236 i32) + (local $l5237 i32) + (local $l5238 i32) + (local $l5239 i32) + (local $l5240 i32) + (local $l5241 i32) + (local $l5242 i32) + (local $l5243 i32) + (local $l5244 i32) + (local $l5245 i32) + (local $l5246 i32) + (local $l5247 i32) + (local $l5248 i32) + (local $l5249 i32) + (local $l5250 i32) + (local $l5251 i32) + (local $l5252 i32) + (local $l5253 i32) + (local $l5254 i32) + (local $l5255 i32) + (local $l5256 i32) + (local $l5257 i32) + (local $l5258 i32) + (local $l5259 i32) + (local $l5260 i32) + (local $l5261 i32) + (local $l5262 i32) + (local $l5263 i32) + (local $l5264 i32) + (local $l5265 i32) + (local $l5266 i32) + (local $l5267 i32) + (local $l5268 i32) + (local $l5269 i32) + (local $l5270 i32) + (local $l5271 i32) + (local $l5272 i32) + (local $l5273 i32) + (local $l5274 i32) + (local $l5275 i32) + (local $l5276 i32) + (local $l5277 i32) + (local $l5278 i32) + (local $l5279 i32) + (local $l5280 i32) + (local $l5281 i32) + (local $l5282 i32) + (local $l5283 i32) + (local $l5284 i32) + (local $l5285 i32) + (local $l5286 i32) + (local $l5287 i32) + (local $l5288 i32) + (local $l5289 i32) + (local $l5290 i32) + (local $l5291 i32) + (local $l5292 i32) + (local $l5293 i32) + (local $l5294 i32) + (local $l5295 i32) + (local $l5296 i32) + (local $l5297 i32) + (local $l5298 i32) + (local $l5299 i32) + (local $l5300 i32) + (local $l5301 i32) + (local $l5302 i32) + (local $l5303 i32) + (local $l5304 i32) + (local $l5305 i32) + (local $l5306 i32) + (local $l5307 i32) + (local $l5308 i32) + (local $l5309 i32) + (local $l5310 i32) + (local $l5311 i32) + (local $l5312 i32) + (local $l5313 i32) + (local $l5314 i32) + (local $l5315 i32) + (local $l5316 i32) + (local $l5317 i32) + (local $l5318 i32) + (local $l5319 i32) + (local $l5320 i32) + (local $l5321 i32) + (local $l5322 i32) + (local $l5323 i32) + (local $l5324 i32) + (local $l5325 i32) + (local $l5326 i32) + (local $l5327 i32) + (local $l5328 i32) + (local $l5329 i32) + (local $l5330 i32) + (local $l5331 i32) + (local $l5332 i32) + (local $l5333 i32) + (local $l5334 i32) + (local $l5335 i32) + (local $l5336 i32) + (local $l5337 i32) + (local $l5338 i32) + (local $l5339 i32) + (local $l5340 i32) + (local $l5341 i32) + (local $l5342 i32) + (local $l5343 i32) + (local $l5344 i32) + (local $l5345 i32) + (local $l5346 i32) + (local $l5347 i32) + (local $l5348 i32) + (local $l5349 i32) + (local $l5350 i32) + (local $l5351 i32) + (local $l5352 i32) + (local $l5353 i32) + (local $l5354 i32) + (local $l5355 i32) + (local $l5356 i32) + (local $l5357 i32) + (local $l5358 i32) + (local $l5359 i32) + (local $l5360 i32) + (local $l5361 i32) + (local $l5362 i32) + (local $l5363 i32) + (local $l5364 i32) + (local $l5365 i32) + (local $l5366 i32) + (local $l5367 i32) + (local $l5368 i32) + (local $l5369 i32) + (local $l5370 i32) + (local $l5371 i32) + (local $l5372 i32) + (local $l5373 i32) + (local $l5374 i32) + (local $l5375 i32) + (local $l5376 i32) + (local $l5377 i32) + (local $l5378 i32) + (local $l5379 i32) + (local $l5380 i32) + (local $l5381 i32) + (local $l5382 i32) + (local $l5383 i32) + (local $l5384 i32) + (local $l5385 i32) + (local $l5386 i32) + (local $l5387 i32) + (local $l5388 i32) + (local $l5389 i32) + (local $l5390 i32) + (local $l5391 i32) + (local $l5392 i32) + (local $l5393 i32) + (local $l5394 i32) + (local $l5395 i32) + (local $l5396 i32) + (local $l5397 i32) + (local $l5398 i32) + (local $l5399 i32) + (local $l5400 i32) + (local $l5401 i32) + (local $l5402 i32) + (local $l5403 i32) + (local $l5404 i32) + (local $l5405 i32) + (local $l5406 i32) + (local $l5407 i32) + (local $l5408 i32) + (local $l5409 i32) + (local $l5410 i32) + (local $l5411 i32) + (local $l5412 i32) + (local $l5413 i32) + (local $l5414 i32) + (local $l5415 i32) + (local $l5416 i32) + (local $l5417 i32) + (local $l5418 i32) + (local $l5419 i32) + (local $l5420 i32) + (local $l5421 i32) + (local $l5422 i32) + (local $l5423 i32) + (local $l5424 i32) + (local $l5425 i32) + (local $l5426 i32) + (local $l5427 i32) + (local $l5428 i32) + (local $l5429 i32) + (local $l5430 i32) + (local $l5431 i32) + (local $l5432 i32) + (local $l5433 i32) + (local $l5434 i32) + (local $l5435 i32) + (local $l5436 i32) + (local $l5437 i32) + (local $l5438 i32) + (local $l5439 i32) + (local $l5440 i32) + (local $l5441 i32) + (local $l5442 i32) + (local $l5443 i32) + (local $l5444 i32) + (local $l5445 i32) + (local $l5446 i32) + (local $l5447 i32) + (local $l5448 i32) + (local $l5449 i32) + (local $l5450 i32) + (local $l5451 i32) + (local $l5452 i32) + (local $l5453 i32) + (local $l5454 i32) + (local $l5455 i32) + (local $l5456 i32) + (local $l5457 i32) + (local $l5458 i32) + (local $l5459 i32) + (local $l5460 i32) + (local $l5461 i32) + (local $l5462 i32) + (local $l5463 i32) + (local $l5464 i32) + (local $l5465 i32) + (local $l5466 i32) + (local $l5467 i32) + (local $l5468 i32) + (local $l5469 i32) + (local $l5470 i32) + (local $l5471 i32) + (local $l5472 i32) + (local $l5473 i32) + (local $l5474 i32) + (local $l5475 i32) + (local $l5476 i32) + (local $l5477 i32) + (local $l5478 i32) + (local $l5479 i32) + (local $l5480 i32) + (local $l5481 i32) + (local $l5482 i32) + (local $l5483 i32) + (local $l5484 i32) + (local $l5485 i32) + (local $l5486 i32) + (local $l5487 i32) + (local $l5488 i32) + (local $l5489 i32) + (local $l5490 i32) + (local $l5491 i32) + (local $l5492 i32) + (local $l5493 i32) + (local $l5494 i32) + (local $l5495 i32) + (local $l5496 i32) + (local $l5497 i32) + (local $l5498 i32) + (local $l5499 i32) + (local $l5500 i32) + (local $l5501 i32) + (local $l5502 i32) + (local $l5503 i32) + (local $l5504 i32) + (local $l5505 i32) + (local $l5506 i32) + (local $l5507 i32) + (local $l5508 i32) + (local $l5509 i32) + (local $l5510 i32) + (local $l5511 i32) + (local $l5512 i32) + (local $l5513 i32) + (local $l5514 i32) + (local $l5515 i32) + (local $l5516 i32) + (local $l5517 i32) + (local $l5518 i32) + (local $l5519 i32) + (local $l5520 i32) + (local $l5521 i32) + (local $l5522 i32) + (local $l5523 i32) + (local $l5524 i32) + (local $l5525 i32) + (local $l5526 i32) + (local $l5527 i32) + (local $l5528 i32) + (local $l5529 i32) + (local $l5530 i32) + (local $l5531 i32) + (local $l5532 i32) + (local $l5533 i32) + (local $l5534 i32) + (local $l5535 i32) + (local $l5536 i32) + (local $l5537 i32) + (local $l5538 i32) + (local $l5539 i32) + (local $l5540 i32) + (local $l5541 i32) + (local $l5542 i32) + (local $l5543 i32) + (local $l5544 i32) + (local $l5545 i32) + (local $l5546 i32) + (local $l5547 i32) + (local $l5548 i32) + (local $l5549 i32) + (local $l5550 i32) + (local $l5551 i32) + (local $l5552 i32) + (local $l5553 i32) + (local $l5554 i32) + (local $l5555 i32) + (local $l5556 i32) + (local $l5557 i32) + (local $l5558 i32) + (local $l5559 i32) + (local $l5560 i32) + (local $l5561 i32) + (local $l5562 i32) + (local $l5563 i32) + (local $l5564 i32) + (local $l5565 i32) + (local $l5566 i32) + (local $l5567 i32) + (local $l5568 i32) + (local $l5569 i32) + (local $l5570 i32) + (local $l5571 i32) + (local $l5572 i32) + (local $l5573 i32) + (local $l5574 i32) + (local $l5575 i32) + (local $l5576 i32) + (local $l5577 i32) + (local $l5578 i32) + (local $l5579 i32) + (local $l5580 i32) + (local $l5581 i32) + (local $l5582 i32) + (local $l5583 i32) + (local $l5584 i32) + (local $l5585 i32) + (local $l5586 i32) + (local $l5587 i32) + (local $l5588 i32) + (local $l5589 i32) + (local $l5590 i32) + (local $l5591 i32) + (local $l5592 i32) + (local $l5593 i32) + (local $l5594 i32) + (local $l5595 i32) + (local $l5596 i32) + (local $l5597 i32) + (local $l5598 i32) + (local $l5599 i32) + (local $l5600 i32) + (local $l5601 i32) + (local $l5602 i32) + (local $l5603 i32) + (local $l5604 i32) + (local $l5605 i32) + (local $l5606 i32) + (local $l5607 i32) + (local $l5608 i32) + (local $l5609 i32) + (local $l5610 i32) + (local $l5611 i32) + (local $l5612 i32) + (local $l5613 i32) + (local $l5614 i32) + (local $l5615 i32) + (local $l5616 i32) + (local $l5617 i32) + (local $l5618 i32) + (local $l5619 i32) + (local $l5620 i32) + (local $l5621 i32) + (local $l5622 i32) + (local $l5623 i32) + (local $l5624 i32) + (local $l5625 i32) + (local $l5626 i32) + (local $l5627 i32) + (local $l5628 i32) + (local $l5629 i32) + (local $l5630 i32) + (local $l5631 i32) + (local $l5632 i32) + (local $l5633 i32) + (local $l5634 i32) + (local $l5635 i32) + (local $l5636 i32) + (local $l5637 i32) + (local $l5638 i32) + (local $l5639 i32) + (local $l5640 i32) + (local $l5641 i32) + (local $l5642 i32) + (local $l5643 i32) + (local $l5644 i32) + (local $l5645 i32) + (local $l5646 i32) + (local $l5647 i32) + (local $l5648 i32) + (local $l5649 i32) + (local $l5650 i32) + (local $l5651 i32) + (local $l5652 i32) + (local $l5653 i32) + (local $l5654 i32) + (local $l5655 i32) + (local $l5656 i32) + (local $l5657 i32) + (local $l5658 i32) + (local $l5659 i32) + (local $l5660 i32) + (local $l5661 i32) + (local $l5662 i32) + (local $l5663 i32) + (local $l5664 i32) + (local $l5665 i32) + (local $l5666 i32) + (local $l5667 i32) + (local $l5668 i32) + (local $l5669 i32) + (local $l5670 i32) + (local $l5671 i32) + (local $l5672 i32) + (local $l5673 i32) + (local $l5674 i32) + (local $l5675 i32) + (local $l5676 i32) + (local $l5677 i32) + (local $l5678 i32) + (local $l5679 i32) + (local $l5680 i32) + (local $l5681 i32) + (local $l5682 i32) + (local $l5683 i32) + (local $l5684 i32) + (local $l5685 i32) + (local $l5686 i32) + (local $l5687 i32) + (local $l5688 i32) + (local $l5689 i32) + (local $l5690 i32) + (local $l5691 i32) + (local $l5692 i32) + (local $l5693 i32) + (local $l5694 i32) + (local $l5695 i32) + (local $l5696 i32) + (local $l5697 i32) + (local $l5698 i32) + (local $l5699 i32) + (local $l5700 i32) + (local $l5701 i32) + (local $l5702 i32) + (local $l5703 i32) + (local $l5704 i32) + (local $l5705 i32) + (local $l5706 i32) + (local $l5707 i32) + (local $l5708 i32) + (local $l5709 i32) + (local $l5710 i32) + (local $l5711 i32) + (local $l5712 i32) + (local $l5713 i32) + (local $l5714 i32) + (local $l5715 i32) + (local $l5716 i32) + (local $l5717 i32) + (local $l5718 i32) + (local $l5719 i32) + (local $l5720 i32) + (local $l5721 i32) + (local $l5722 i32) + (local $l5723 i32) + (local $l5724 i32) + (local $l5725 i32) + (local $l5726 i32) + (local $l5727 i32) + (local $l5728 i32) + (local $l5729 i32) + (local $l5730 i32) + (local $l5731 i32) + (local $l5732 i32) + (local $l5733 i32) + (local $l5734 i32) + (local $l5735 i32) + (local $l5736 i32) + (local $l5737 i32) + (local $l5738 i32) + (local $l5739 i32) + (local $l5740 i32) + (local $l5741 i32) + (local $l5742 i32) + (local $l5743 i32) + (local $l5744 i32) + (local $l5745 i32) + (local $l5746 i32) + (local $l5747 i32) + (local $l5748 i32) + (local $l5749 i32) + (local $l5750 i32) + (local $l5751 i32) + (local $l5752 i32) + (local $l5753 i32) + (local $l5754 i32) + (local $l5755 i32) + (local $l5756 i32) + (local $l5757 i32) + (local $l5758 i32) + (local $l5759 i32) + (local $l5760 i32) + (local $l5761 i32) + (local $l5762 i32) + (local $l5763 i32) + (local $l5764 i32) + (local $l5765 i32) + (local $l5766 i32) + (local $l5767 i32) + (local $l5768 i32) + (local $l5769 i32) + (local $l5770 i32) + (local $l5771 i32) + (local $l5772 i32) + (local $l5773 i32) + (local $l5774 i32) + (local $l5775 i32) + (local $l5776 i32) + (local $l5777 i32) + (local $l5778 i32) + (local $l5779 i32) + (local $l5780 i32) + (local $l5781 i32) + (local $l5782 i32) + (local $l5783 i32) + (local $l5784 i32) + (local $l5785 i32) + (local $l5786 i32) + (local $l5787 i32) + (local $l5788 i32) + (local $l5789 i32) + (local $l5790 i32) + (local $l5791 i32) + (local $l5792 i32) + (local $l5793 i32) + (local $l5794 i32) + (local $l5795 i32) + (local $l5796 i32) + (local $l5797 i32) + (local $l5798 i32) + (local $l5799 i32) + (local $l5800 i32) + (local $l5801 i32) + (local $l5802 i32) + (local $l5803 i32) + (local $l5804 i32) + (local $l5805 i32) + (local $l5806 i32) + (local $l5807 i32) + (local $l5808 i32) + (local $l5809 i32) + (local $l5810 i32) + (local $l5811 i32) + (local $l5812 i32) + (local $l5813 i32) + (local $l5814 i32) + (local $l5815 i32) + (local $l5816 i32) + (local $l5817 i32) + (local $l5818 i32) + (local $l5819 i32) + (local $l5820 i32) + (local $l5821 i32) + (local $l5822 i32) + (local $l5823 i32) + (local $l5824 i32) + (local $l5825 i32) + (local $l5826 i32) + (local $l5827 i32) + (local $l5828 i32) + (local $l5829 i32) + (local $l5830 i32) + (local $l5831 i32) + (local $l5832 i32) + (local $l5833 i32) + (local $l5834 i32) + (local $l5835 i32) + (local $l5836 i32) + (local $l5837 i32) + (local $l5838 i32) + (local $l5839 i32) + (local $l5840 i32) + (local $l5841 i32) + (local $l5842 i32) + (local $l5843 i32) + (local $l5844 i32) + (local $l5845 i32) + (local $l5846 i32) + (local $l5847 i32) + (local $l5848 i32) + (local $l5849 i32) + (local $l5850 i32) + (local $l5851 i32) + (local $l5852 i32) + (local $l5853 i32) + (local $l5854 i32) + (local $l5855 i32) + (local $l5856 i32) + (local $l5857 i32) + (local $l5858 i32) + (local $l5859 i32) + (local $l5860 i32) + (local $l5861 i32) + (local $l5862 i32) + (local $l5863 i32) + (local $l5864 i32) + (local $l5865 i32) + (local $l5866 i32) + (local $l5867 i32) + (local $l5868 i32) + (local $l5869 i32) + (local $l5870 i32) + (local $l5871 i32) + (local $l5872 i32) + (local $l5873 i32) + (local $l5874 i32) + (local $l5875 i32) + (local $l5876 i32) + (local $l5877 i32) + (local $l5878 i32) + (local $l5879 i32) + (local $l5880 i32) + (local $l5881 i32) + (local $l5882 i32) + (local $l5883 i32) + (local $l5884 i32) + (local $l5885 i32) + (local $l5886 i32) + (local $l5887 i32) + (local $l5888 i32) + (local $l5889 i32) + (local $l5890 i32) + (local $l5891 i32) + (local $l5892 i32) + (local $l5893 i32) + (local $l5894 i32) + (local $l5895 i32) + (local $l5896 i32) + (local $l5897 i32) + (local $l5898 i32) + (local $l5899 i32) + (local $l5900 i32) + (local $l5901 i32) + (local $l5902 i32) + (local $l5903 i32) + (local $l5904 i32) + (local $l5905 i32) + (local $l5906 i32) + (local $l5907 i32) + (local $l5908 i32) + (local $l5909 i32) + (local $l5910 i32) + (local $l5911 i32) + (local $l5912 i32) + (local $l5913 i32) + (local $l5914 i32) + (local $l5915 i32) + (local $l5916 i32) + (local $l5917 i32) + (local $l5918 i32) + (local $l5919 i32) + (local $l5920 i32) + (local $l5921 i32) + (local $l5922 i32) + (local $l5923 i32) + (local $l5924 i32) + (local $l5925 i32) + (local $l5926 i32) + (local $l5927 i32) + (local $l5928 i32) + (local $l5929 i32) + (local $l5930 i32) + (local $l5931 i32) + (local $l5932 i32) + (local $l5933 i32) + (local $l5934 i32) + (local $l5935 i32) + (local $l5936 i32) + (local $l5937 i32) + (local $l5938 i32) + (local $l5939 i32) + (local $l5940 i32) + (local $l5941 i32) + (local $l5942 i32) + (local $l5943 i32) + (local $l5944 i32) + (local $l5945 i32) + (local $l5946 i32) + (local $l5947 i32) + (local $l5948 i32) + (local $l5949 i32) + (local $l5950 i32) + (local $l5951 i32) + (local $l5952 i32) + (local $l5953 i32) + (local $l5954 i32) + (local $l5955 i32) + (local $l5956 i32) + (local $l5957 i32) + (local $l5958 i32) + (local $l5959 i32) + (local $l5960 i32) + (local $l5961 i32) + (local $l5962 i32) + (local $l5963 i32) + (local $l5964 i32) + (local $l5965 i32) + (local $l5966 i32) + (local $l5967 i32) + (local $l5968 i32) + (local $l5969 i32) + (local $l5970 i32) + (local $l5971 i32) + (local $l5972 i32) + (local $l5973 i32) + (local $l5974 i32) + (local $l5975 i32) + (local $l5976 i32) + (local $l5977 i32) + (local $l5978 i32) + (local $l5979 i32) + (local $l5980 i32) + (local $l5981 i32) + (local $l5982 i32) + (local $l5983 i32) + (local $l5984 i32) + (local $l5985 i32) + (local $l5986 i32) + (local $l5987 i32) + (local $l5988 i32) + (local $l5989 i32) + (local $l5990 i32) + (local $l5991 i32) + (local $l5992 i32) + (local $l5993 i32) + (local $l5994 i32) + (local $l5995 i32) + (local $l5996 i32) + (local $l5997 i32) + (local $l5998 i32) + (local $l5999 i32) + (local $l6000 i32) + (local $l6001 i32) + (local $l6002 i32) + (local $l6003 i32) + (local $l6004 i32) + (local $l6005 i32) + (local $l6006 i32) + (local $l6007 i32) + (local $l6008 i32) + (local $l6009 i32) + (local $l6010 i32) + (local $l6011 i32) + (local $l6012 i32) + (local $l6013 i32) + (local $l6014 i32) + (local $l6015 i32) + (local $l6016 i32) + (local $l6017 i32) + (local $l6018 i32) + (local $l6019 i32) + (local $l6020 i32) + (local $l6021 i32) + (local $l6022 i32) + (local $l6023 i32) + (local $l6024 i32) + (local $l6025 i32) + (local $l6026 i32) + (local $l6027 i32) + (local $l6028 i32) + (local $l6029 i32) + (local $l6030 i32) + (local $l6031 i32) + (local $l6032 i32) + (local $l6033 i32) + (local $l6034 i32) + (local $l6035 i32) + (local $l6036 i32) + (local $l6037 i32) + (local $l6038 i32) + (local $l6039 i32) + (local $l6040 i32) + (local $l6041 i32) + (local $l6042 i32) + (local $l6043 i32) + (local $l6044 i32) + (local $l6045 i32) + (local $l6046 i32) + (local $l6047 i32) + (local $l6048 i32) + (local $l6049 i32) + (local $l6050 i32) + (local $l6051 i32) + (local $l6052 i32) + (local $l6053 i32) + (local $l6054 i32) + (local $l6055 i32) + (local $l6056 i32) + (local $l6057 i32) + (local $l6058 i32) + (local $l6059 i32) + (local $l6060 i32) + (local $l6061 i32) + (local $l6062 i32) + (local $l6063 i32) + (local $l6064 i32) + (local $l6065 i32) + (local $l6066 i32) + (local $l6067 i32) + (local $l6068 i32) + (local $l6069 i32) + (local $l6070 i32) + (local $l6071 i32) + (local $l6072 i32) + (local $l6073 i32) + (local $l6074 i32) + (local $l6075 i32) + (local $l6076 i32) + (local $l6077 i32) + (local $l6078 i32) + (local $l6079 i32) + (local $l6080 i32) + (local $l6081 i32) + (local $l6082 i32) + (local $l6083 i32) + (local $l6084 i32) + (local $l6085 i32) + (local $l6086 i32) + (local $l6087 i32) + (local $l6088 i32) + (local $l6089 i32) + (local $l6090 i32) + (local $l6091 i32) + (local $l6092 i32) + (local $l6093 i32) + (local $l6094 i32) + (local $l6095 i32) + (local $l6096 i32) + (local $l6097 i32) + (local $l6098 i32) + (local $l6099 i32) + (local $l6100 i32) + (local $l6101 i32) + (local $l6102 i32) + (local $l6103 i32) + (local $l6104 i32) + (local $l6105 i32) + (local $l6106 i32) + (local $l6107 i32) + (local $l6108 i32) + (local $l6109 i32) + (local $l6110 i32) + (local $l6111 i32) + (local $l6112 i32) + (local $l6113 i32) + (local $l6114 i32) + (local $l6115 i32) + (local $l6116 i32) + (local $l6117 i32) + (local $l6118 i32) + (local $l6119 i32) + (local $l6120 i32) + (local $l6121 i32) + (local $l6122 i32) + (local $l6123 i32) + (local $l6124 i32) + (local $l6125 i32) + (local $l6126 i32) + (local $l6127 i32) + (local $l6128 i32) + (local $l6129 i32) + (local $l6130 i32) + (local $l6131 i32) + (local $l6132 i32) + (local $l6133 i32) + (local $l6134 i32) + (local $l6135 i32) + (local $l6136 i32) + (local $l6137 i32) + (local $l6138 i32) + (local $l6139 i32) + (local $l6140 i32) + (local $l6141 i32) + (local $l6142 i32) + (local $l6143 i32) + (local $l6144 i32) + (local $l6145 i32) + (local $l6146 i32) + (local $l6147 i32) + (local $l6148 i32) + (local $l6149 i32) + (local $l6150 i32) + (local $l6151 i32) + (local $l6152 i32) + (local $l6153 i32) + (local $l6154 i32) + (local $l6155 i32) + (local $l6156 i32) + (local $l6157 i32) + (local $l6158 i32) + (local $l6159 i32) + (local $l6160 i32) + (local $l6161 i32) + (local $l6162 i32) + (local $l6163 i32) + (local $l6164 i32) + (local $l6165 i32) + (local $l6166 i32) + (local $l6167 i32) + (local $l6168 i32) + (local $l6169 i32) + (local $l6170 i32) + (local $l6171 i32) + (local $l6172 i32) + (local $l6173 i32) + (local $l6174 i32) + (local $l6175 i32) + (local $l6176 i32) + (local $l6177 i32) + (local $l6178 i32) + (local $l6179 i32) + (local $l6180 i32) + (local $l6181 i32) + (local $l6182 i32) + (local $l6183 i32) + (local $l6184 i32) + (local $l6185 i32) + (local $l6186 i32) + (local $l6187 i32) + (local $l6188 i32) + (local $l6189 i32) + (local $l6190 i32) + (local $l6191 i32) + (local $l6192 i32) + (local $l6193 i32) + (local $l6194 i32) + (local $l6195 i32) + (local $l6196 i32) + (local $l6197 i32) + (local $l6198 i32) + (local $l6199 i32) + (local $l6200 i32) + (local $l6201 i32) + (local $l6202 i32) + (local $l6203 i32) + (local $l6204 i32) + (local $l6205 i32) + (local $l6206 i32) + (local $l6207 i32) + (local $l6208 i32) + (local $l6209 i32) + (local $l6210 i32) + (local $l6211 i32) + (local $l6212 i32) + (local $l6213 i32) + (local $l6214 i32) + (local $l6215 i32) + (local $l6216 i32) + (local $l6217 i32) + (local $l6218 i32) + (local $l6219 i32) + (local $l6220 i32) + (local $l6221 i32) + (local $l6222 i32) + (local $l6223 i32) + (local $l6224 i32) + (local $l6225 i32) + (local $l6226 i32) + (local $l6227 i32) + (local $l6228 i32) + (local $l6229 i32) + (local $l6230 i32) + (local $l6231 i32) + (local $l6232 i32) + (local $l6233 i32) + (local $l6234 i32) + (local $l6235 i32) + (local $l6236 i32) + (local $l6237 i32) + (local $l6238 i32) + (local $l6239 i32) + (local $l6240 i32) + (local $l6241 i32) + (local $l6242 i32) + (local $l6243 i32) + (local $l6244 i32) + (local $l6245 i32) + (local $l6246 i32) + (local $l6247 i32) + (local $l6248 i32) + (local $l6249 i32) + (local $l6250 i32) + (local $l6251 i32) + (local $l6252 i32) + (local $l6253 i32) + (local $l6254 i32) + (local $l6255 i32) + (local $l6256 i32) + (local $l6257 i32) + (local $l6258 i32) + (local $l6259 i32) + (local $l6260 i32) + (local $l6261 i32) + (local $l6262 i32) + (local $l6263 i32) + (local $l6264 i32) + (local $l6265 i32) + (local $l6266 i32) + (local $l6267 i32) + (local $l6268 i32) + (local $l6269 i32) + (local $l6270 i32) + (local $l6271 i32) + (local $l6272 i32) + (local $l6273 i32) + (local $l6274 i32) + (local $l6275 i32) + (local $l6276 i32) + (local $l6277 i32) + (local $l6278 i32) + (local $l6279 i32) + (local $l6280 i32) + (local $l6281 i32) + (local $l6282 i32) + (local $l6283 i32) + (local $l6284 i32) + (local $l6285 i32) + (local $l6286 i32) + (local $l6287 i32) + (local $l6288 i32) + (local $l6289 i32) + (local $l6290 i32) + (local $l6291 i32) + (local $l6292 i32) + (local $l6293 i32) + (local $l6294 i32) + (local $l6295 i32) + (local $l6296 i32) + (local $l6297 i32) + (local $l6298 i32) + (local $l6299 i32) + (local $l6300 i32) + (local $l6301 i32) + (local $l6302 i32) + (local $l6303 i32) + (local $l6304 i32) + (local $l6305 i32) + (local $l6306 i32) + (local $l6307 i32) + (local $l6308 i32) + (local $l6309 i32) + (local $l6310 i32) + (local $l6311 i32) + (local $l6312 i32) + (local $l6313 i32) + (local $l6314 i32) + (local $l6315 i32) + (local $l6316 i32) + (local $l6317 i32) + (local $l6318 i32) + (local $l6319 i32) + (local $l6320 i32) + (local $l6321 i32) + (local $l6322 i32) + (local $l6323 i32) + (local $l6324 i32) + (local $l6325 i32) + (local $l6326 i32) + (local $l6327 i32) + (local $l6328 i32) + (local $l6329 i32) + (local $l6330 i32) + (local $l6331 i32) + (local $l6332 i32) + (local $l6333 i32) + (local $l6334 i32) + (local $l6335 i32) + (local $l6336 i32) + (local $l6337 i32) + (local $l6338 i32) + (local $l6339 i32) + (local $l6340 i32) + (local $l6341 i32) + (local $l6342 i32) + (local $l6343 i32) + (local $l6344 i32) + (local $l6345 i32) + (local $l6346 i32) + (local $l6347 i32) + (local $l6348 i32) + (local $l6349 i32) + (local $l6350 i32) + (local $l6351 i32) + (local $l6352 i32) + (local $l6353 i32) + (local $l6354 i32) + (local $l6355 i32) + (local $l6356 i32) + (local $l6357 i32) + (local $l6358 i32) + (local $l6359 i32) + (local $l6360 i32) + (local $l6361 i32) + (local $l6362 i32) + (local $l6363 i32) + (local $l6364 i32) + (local $l6365 i32) + (local $l6366 i32) + (local $l6367 i32) + (local $l6368 i32) + (local $l6369 i32) + (local $l6370 i32) + (local $l6371 i32) + (local $l6372 i32) + (local $l6373 i32) + (local $l6374 i32) + (local $l6375 i32) + (local $l6376 i32) + (local $l6377 i32) + (local $l6378 i32) + (local $l6379 i32) + (local $l6380 i32) + (local $l6381 i32) + (local $l6382 i32) + (local $l6383 i32) + (local $l6384 i32) + (local $l6385 i32) + (local $l6386 i32) + (local $l6387 i32) + (local $l6388 i32) + (local $l6389 i32) + (local $l6390 i32) + (local $l6391 i32) + (local $l6392 i32) + (local $l6393 i32) + (local $l6394 i32) + (local $l6395 i32) + (local $l6396 i32) + (local $l6397 i32) + (local $l6398 i32) + (local $l6399 i32) + (local $l6400 i32) + (local $l6401 i32) + (local $l6402 i32) + (local $l6403 i32) + (local $l6404 i32) + (local $l6405 i32) + (local $l6406 i32) + (local $l6407 i32) + (local $l6408 i32) + (local $l6409 i32) + (local $l6410 i32) + (local $l6411 i32) + (local $l6412 i32) + (local $l6413 i32) + (local $l6414 i32) + (local $l6415 i32) + (local $l6416 i32) + (local $l6417 i32) + (local $l6418 i32) + (local $l6419 i32) + (local $l6420 i32) + (local $l6421 i32) + (local $l6422 i32) + (local $l6423 i32) + (local $l6424 i32) + (local $l6425 i32) + (local $l6426 i32) + (local $l6427 i32) + (local $l6428 i32) + (local $l6429 i32) + (local $l6430 i32) + (local $l6431 i32) + (local $l6432 i32) + (local $l6433 i32) + (local $l6434 i32) + (local $l6435 i32) + (local $l6436 i32) + (local $l6437 i32) + (local $l6438 i32) + (local $l6439 i32) + (local $l6440 i32) + (local $l6441 i32) + (local $l6442 i32) + (local $l6443 i32) + (local $l6444 i32) + (local $l6445 i32) + (local $l6446 i32) + (local $l6447 i32) + (local $l6448 i32) + (local $l6449 i32) + (local $l6450 i32) + (local $l6451 i32) + (local $l6452 i32) + (local $l6453 i32) + (local $l6454 i32) + (local $l6455 i32) + (local $l6456 i32) + (local $l6457 i32) + (local $l6458 i32) + (local $l6459 i32) + (local $l6460 i32) + (local $l6461 i32) + (local $l6462 i32) + (local $l6463 i32) + (local $l6464 i32) + (local $l6465 i32) + (local $l6466 i32) + (local $l6467 i32) + (local $l6468 i32) + (local $l6469 i32) + (local $l6470 i32) + (local $l6471 i32) + (local $l6472 i32) + (local $l6473 i32) + (local $l6474 i32) + (local $l6475 i32) + (local $l6476 i32) + (local $l6477 i32) + (local $l6478 i32) + (local $l6479 i32) + (local $l6480 i32) + (local $l6481 i32) + (local $l6482 i32) + (local $l6483 i32) + (local $l6484 i32) + (local $l6485 i32) + (local $l6486 i32) + (local $l6487 i32) + (local $l6488 i32) + (local $l6489 i32) + (local $l6490 i32) + (local $l6491 i32) + (local $l6492 i32) + (local $l6493 i32) + (local $l6494 i32) + (local $l6495 i32) + (local $l6496 i32) + (local $l6497 i32) + (local $l6498 i32) + (local $l6499 i32) + (local $l6500 i32) + (local $l6501 i32) + (local $l6502 i32) + (local $l6503 i32) + (local $l6504 i32) + (local $l6505 i32) + (local $l6506 i32) + (local $l6507 i32) + (local $l6508 i32) + (local $l6509 i32) + (local $l6510 i32) + (local $l6511 i32) + (local $l6512 i32) + (local $l6513 i32) + (local $l6514 i32) + (local $l6515 i32) + (local $l6516 i32) + (local $l6517 i32) + (local $l6518 i32) + (local $l6519 i32) + (local $l6520 i32) + (local $l6521 i32) + (local $l6522 i32) + (local $l6523 i32) + (local $l6524 i32) + (local $l6525 i32) + (local $l6526 i32) + (local $l6527 i32) + (local $l6528 i32) + (local $l6529 i32) + (local $l6530 i32) + (local $l6531 i32) + (local $l6532 i32) + (local $l6533 i32) + (local $l6534 i32) + (local $l6535 i32) + (local $l6536 i32) + (local $l6537 i32) + (local $l6538 i32) + (local $l6539 i32) + (local $l6540 i32) + (local $l6541 i32) + (local $l6542 i32) + (local $l6543 i32) + (local $l6544 i32) + (local $l6545 i32) + (local $l6546 i32) + (local $l6547 i32) + (local $l6548 i32) + (local $l6549 i32) + (local $l6550 i32) + (local $l6551 i32) + (local $l6552 i32) + (local $l6553 i32) + (local $l6554 i32) + (local $l6555 i32) + (local $l6556 i32) + (local $l6557 i32) + (local $l6558 i32) + (local $l6559 i32) + (local $l6560 i32) + (local $l6561 i32) + (local $l6562 i32) + (local $l6563 i32) + (local $l6564 i32) + (local $l6565 i32) + (local $l6566 i32) + (local $l6567 i32) + (local $l6568 i32) + (local $l6569 i32) + (local $l6570 i32) + (local $l6571 i32) + (local $l6572 i32) + (local $l6573 i32) + (local $l6574 i32) + (local $l6575 i32) + (local $l6576 i32) + (local $l6577 i32) + (local $l6578 i32) + (local $l6579 i32) + (local $l6580 i32) + (local $l6581 i32) + (local $l6582 i32) + (local $l6583 i32) + (local $l6584 i32) + (local $l6585 i32) + (local $l6586 i32) + (local $l6587 i32) + (local $l6588 i32) + (local $l6589 i32) + (local $l6590 i32) + (local $l6591 i32) + (local $l6592 i32) + (local $l6593 i32) + (local $l6594 i32) + (local $l6595 i32) + (local $l6596 i32) + (local $l6597 i32) + (local $l6598 i32) + (local $l6599 i32) + (local $l6600 i32) + (local $l6601 i32) + (local $l6602 i32) + (local $l6603 i32) + (local $l6604 i32) + (local $l6605 i32) + (local $l6606 i32) + (local $l6607 i32) + (local $l6608 i32) + (local $l6609 i32) + (local $l6610 i32) + (local $l6611 i32) + (local $l6612 i32) + (local $l6613 i32) + (local $l6614 i32) + (local $l6615 i32) + (local $l6616 i32) + (local $l6617 i32) + (local $l6618 i32) + (local $l6619 i32) + (local $l6620 i32) + (local $l6621 i32) + (local $l6622 i32) + (local $l6623 i32) + (local $l6624 i32) + (local $l6625 i32) + (local $l6626 i32) + (local $l6627 i32) + (local $l6628 i32) + (local $l6629 i32) + (local $l6630 i32) + (local $l6631 i32) + (local $l6632 i32) + (local $l6633 i32) + (local $l6634 i32) + (local $l6635 i32) + (local $l6636 i32) + (local $l6637 i32) + (local $l6638 i32) + (local $l6639 i32) + (local $l6640 i32) + (local $l6641 i32) + (local $l6642 i32) + (local $l6643 i32) + (local $l6644 i32) + (local $l6645 i32) + (local $l6646 i32) + (local $l6647 i32) + (local $l6648 i32) + (local $l6649 i32) + (local $l6650 i32) + (local $l6651 i32) + (local $l6652 i32) + (local $l6653 i32) + (local $l6654 i32) + (local $l6655 i32) + (local $l6656 i32) + (local $l6657 i32) + (local $l6658 i32) + (local $l6659 i32) + (local $l6660 i32) + (local $l6661 i32) + (local $l6662 i32) + (local $l6663 i32) + (local $l6664 i32) + (local $l6665 i32) + (local $l6666 i32) + (local $l6667 i32) + (local $l6668 i32) + (local $l6669 i32) + (local $l6670 i32) + (local $l6671 i32) + (local $l6672 i32) + (local $l6673 i32) + (local $l6674 i32) + (local $l6675 i32) + (local $l6676 i32) + (local $l6677 i32) + (local $l6678 i32) + (local $l6679 i32) + (local $l6680 i32) + (local $l6681 i32) + (local $l6682 i32) + (local $l6683 i32) + (local $l6684 i32) + (local $l6685 i32) + (local $l6686 i32) + (local $l6687 i32) + (local $l6688 i32) + (local $l6689 i32) + (local $l6690 i32) + (local $l6691 i32) + (local $l6692 i32) + (local $l6693 i32) + (local $l6694 i32) + (local $l6695 i32) + (local $l6696 i32) + (local $l6697 i32) + (local $l6698 i32) + (local $l6699 i32) + (local $l6700 i32) + (local $l6701 i32) + (local $l6702 i32) + (local $l6703 i32) + (local $l6704 i32) + (local $l6705 i32) + (local $l6706 i32) + (local $l6707 i32) + (local $l6708 i32) + (local $l6709 i32) + (local $l6710 i32) + (local $l6711 i32) + (local $l6712 i32) + (local $l6713 i32) + (local $l6714 i32) + (local $l6715 i32) + (local $l6716 i32) + (local $l6717 i32) + (local $l6718 i32) + (local $l6719 i32) + (local $l6720 i32) + (local $l6721 i32) + (local $l6722 i32) + (local $l6723 i32) + (local $l6724 i32) + (local $l6725 i32) + (local $l6726 i32) + (local $l6727 i32) + (local $l6728 i32) + (local $l6729 i32) + (local $l6730 i32) + (local $l6731 i32) + (local $l6732 i32) + (local $l6733 i32) + (local $l6734 i32) + (local $l6735 i32) + (local $l6736 i32) + (local $l6737 i32) + (local $l6738 i32) + (local $l6739 i32) + (local $l6740 i32) + (local $l6741 i32) + (local $l6742 i32) + (local $l6743 i32) + (local $l6744 i32) + (local $l6745 i32) + (local $l6746 i32) + (local $l6747 i32) + (local $l6748 i32) + (local $l6749 i32) + (local $l6750 i32) + (local $l6751 i32) + (local $l6752 i32) + (local $l6753 i32) + (local $l6754 i32) + (local $l6755 i32) + (local $l6756 i32) + (local $l6757 i32) + (local $l6758 i32) + (local $l6759 i32) + (local $l6760 i32) + (local $l6761 i32) + (local $l6762 i32) + (local $l6763 i32) + (local $l6764 i32) + (local $l6765 i32) + (local $l6766 i32) + (local $l6767 i32) + (local $l6768 i32) + (local $l6769 i32) + (local $l6770 i32) + (local $l6771 i32) + (local $l6772 i32) + (local $l6773 i32) + (local $l6774 i32) + (local $l6775 i32) + (local $l6776 i32) + (local $l6777 i32) + (local $l6778 i32) + (local $l6779 i32) + (local $l6780 i32) + (local $l6781 i32) + (local $l6782 i32) + (local $l6783 i32) + (local $l6784 i32) + (local $l6785 i32) + (local $l6786 i32) + (local $l6787 i32) + (local $l6788 i32) + (local $l6789 i32) + (local $l6790 i32) + (local $l6791 i32) + (local $l6792 i32) + (local $l6793 i32) + (local $l6794 i32) + (local $l6795 i32) + (local $l6796 i32) + (local $l6797 i32) + (local $l6798 i32) + (local $l6799 i32) + (local $l6800 i32) + (local $l6801 i32) + (local $l6802 i32) + (local $l6803 i32) + (local $l6804 i32) + (local $l6805 i32) + (local $l6806 i32) + (local $l6807 i32) + (local $l6808 i32) + (local $l6809 i32) + (local $l6810 i32) + (local $l6811 i32) + (local $l6812 i32) + (local $l6813 i32) + (local $l6814 i32) + (local $l6815 i32) + (local $l6816 i32) + (local $l6817 i32) + (local $l6818 i32) + (local $l6819 i32) + (local $l6820 i32) + (local $l6821 i32) + (local $l6822 i32) + (local $l6823 i32) + (local $l6824 i32) + (local $l6825 i32) + (local $l6826 i32) + (local $l6827 i32) + (local $l6828 i32) + (local $l6829 i32) + (local $l6830 i32) + (local $l6831 i32) + (local $l6832 i32) + (local $l6833 i32) + (local $l6834 i32) + (local $l6835 i32) + (local $l6836 i32) + (local $l6837 i32) + (local $l6838 i32) + (local $l6839 i32) + (local $l6840 i32) + (local $l6841 i32) + (local $l6842 i32) + (local $l6843 i32) + (local $l6844 i32) + (local $l6845 i32) + (local $l6846 i32) + (local $l6847 i32) + (local $l6848 i32) + (local $l6849 i32) + (local $l6850 i32) + (local $l6851 i32) + (local $l6852 i32) + (local $l6853 i32) + (local $l6854 i32) + (local $l6855 i32) + (local $l6856 i32) + (local $l6857 i32) + (local $l6858 i32) + (local $l6859 i32) + (local $l6860 i32) + (local $l6861 i32) + (local $l6862 i32) + (local $l6863 i32) + (local $l6864 i32) + (local $l6865 i32) + (local $l6866 i32) + (local $l6867 i32) + (local $l6868 i32) + (local $l6869 i32) + (local $l6870 i32) + (local $l6871 i32) + (local $l6872 i32) + (local $l6873 i32) + (local $l6874 i32) + (local $l6875 i32) + (local $l6876 i32) + (local $l6877 i32) + (local $l6878 i32) + (local $l6879 i32) + (local $l6880 i32) + (local $l6881 i32) + (local $l6882 i32) + (local $l6883 i32) + (local $l6884 i32) + (local $l6885 i32) + (local $l6886 i32) + (local $l6887 i32) + (local $l6888 i32) + (local $l6889 i32) + (local $l6890 i32) + (local $l6891 i32) + (local $l6892 i32) + (local $l6893 i32) + (local $l6894 i32) + (local $l6895 i32) + (local $l6896 i32) + (local $l6897 i32) + (local $l6898 i32) + (local $l6899 i32) + (local $l6900 i32) + (local $l6901 i32) + (local $l6902 i32) + (local $l6903 i32) + (local $l6904 i32) + (local $l6905 i32) + (local $l6906 i32) + (local $l6907 i32) + (local $l6908 i32) + (local $l6909 i32) + (local $l6910 i32) + (local $l6911 i32) + (local $l6912 i32) + (local $l6913 i32) + (local $l6914 i32) + (local $l6915 i32) + (local $l6916 i32) + (local $l6917 i32) + (local $l6918 i32) + (local $l6919 i32) + (local $l6920 i32) + (local $l6921 i32) + (local $l6922 i32) + (local $l6923 i32) + (local $l6924 i32) + (local $l6925 i32) + (local $l6926 i32) + (local $l6927 i32) + (local $l6928 i32) + (local $l6929 i32) + (local $l6930 i32) + (local $l6931 i32) + (local $l6932 i32) + (local $l6933 i32) + (local $l6934 i32) + (local $l6935 i32) + (local $l6936 i32) + (local $l6937 i32) + (local $l6938 i32) + (local $l6939 i32) + (local $l6940 i32) + (local $l6941 i32) + (local $l6942 i32) + (local $l6943 i32) + (local $l6944 i32) + (local $l6945 i32) + (local $l6946 i32) + (local $l6947 i32) + (local $l6948 i32) + (local $l6949 i32) + (local $l6950 i32) + (local $l6951 i32) + (local $l6952 i32) + (local $l6953 i32) + (local $l6954 i32) + (local $l6955 i32) + (local $l6956 i32) + (local $l6957 i32) + (local $l6958 i32) + (local $l6959 i32) + (local $l6960 i32) + (local $l6961 i32) + (local $l6962 i32) + (local $l6963 i32) + (local $l6964 i32) + (local $l6965 i32) + (local $l6966 i32) + (local $l6967 i32) + (local $l6968 i32) + (local $l6969 i32) + (local $l6970 i32) + (local $l6971 i32) + (local $l6972 i32) + (local $l6973 i32) + (local $l6974 i32) + (local $l6975 i32) + (local $l6976 i32) + (local $l6977 i32) + (local $l6978 i32) + (local $l6979 i32) + (local $l6980 i32) + (local $l6981 i32) + (local $l6982 i32) + (local $l6983 i32) + (local $l6984 i32) + (local $l6985 i32) + (local $l6986 i32) + (local $l6987 i32) + (local $l6988 i32) + (local $l6989 i32) + (local $l6990 i32) + (local $l6991 i32) + (local $l6992 i32) + (local $l6993 i32) + (local $l6994 i32) + (local $l6995 i32) + (local $l6996 i32) + (local $l6997 i32) + (local $l6998 i32) + (local $l6999 i32) + (local $l7000 i32) + (local $l7001 i32) + (local $l7002 i32) + (local $l7003 i32) + (local $l7004 i32) + (local $l7005 i32) + (local $l7006 i32) + (local $l7007 i32) + (local $l7008 i32) + (local $l7009 i32) + (local $l7010 i32) + (local $l7011 i32) + (local $l7012 i32) + (local $l7013 i32) + (local $l7014 i32) + (local $l7015 i32) + (local $l7016 i32) + (local $l7017 i32) + (local $l7018 i32) + (local $l7019 i32) + (local $l7020 i32) + (local $l7021 i32) + (local $l7022 i32) + (local $l7023 i32) + (local $l7024 i32) + (local $l7025 i32) + (local $l7026 i32) + (local $l7027 i32) + (local $l7028 i32) + (local $l7029 i32) + (local $l7030 i32) + (local $l7031 i32) + (local $l7032 i32) + (local $l7033 i32) + (local $l7034 i32) + (local $l7035 i32) + (local $l7036 i32) + (local $l7037 i32) + (local $l7038 i32) + (local $l7039 i32) + (local $l7040 i32) + (local $l7041 i32) + (local $l7042 i32) + (local $l7043 i32) + (local $l7044 i32) + (local $l7045 i32) + (local $l7046 i32) + (local $l7047 i32) + (local $l7048 i32) + (local $l7049 i32) + (local $l7050 i32) + (local $l7051 i32) + (local $l7052 i32) + (local $l7053 i32) + (local $l7054 i32) + (local $l7055 i32) + (local $l7056 i32) + (local $l7057 i32) + (local $l7058 i32) + (local $l7059 i32) + (local $l7060 i32) + (local $l7061 i32) + (local $l7062 i32) + (local $l7063 i32) + (local $l7064 i32) + (local $l7065 i32) + (local $l7066 i32) + (local $l7067 i32) + (local $l7068 i32) + (local $l7069 i32) + (local $l7070 i32) + (local $l7071 i32) + (local $l7072 i32) + (local $l7073 i32) + (local $l7074 i32) + (local $l7075 i32) + (local $l7076 i32) + (local $l7077 i32) + (local $l7078 i32) + (local $l7079 i32) + (local $l7080 i32) + (local $l7081 i32) + (local $l7082 i32) + (local $l7083 i32) + (local $l7084 i32) + (local $l7085 i32) + (local $l7086 i32) + (local $l7087 i32) + (local $l7088 i32) + (local $l7089 i32) + (local $l7090 i32) + (local $l7091 i32) + (local $l7092 i32) + (local $l7093 i32) + (local $l7094 i32) + (local $l7095 i32) + (local $l7096 i32) + (local $l7097 i32) + (local $l7098 i32) + (local $l7099 i32) + (local $l7100 i32) + (local $l7101 i32) + (local $l7102 i32) + (local $l7103 i32) + (local $l7104 i32) + (local $l7105 i32) + (local $l7106 i32) + (local $l7107 i32) + (local $l7108 i32) + (local $l7109 i32) + (local $l7110 i32) + (local $l7111 i32) + (local $l7112 i32) + (local $l7113 i32) + (local $l7114 i32) + (local $l7115 i32) + (local $l7116 i32) + (local $l7117 i32) + (local $l7118 i32) + (local $l7119 i32) + (local $l7120 i32) + (local $l7121 i32) + (local $l7122 i32) + (local $l7123 i32) + (local $l7124 i32) + (local $l7125 i32) + (local $l7126 i32) + (local $l7127 i32) + (local $l7128 i32) + (local $l7129 i32) + (local $l7130 i32) + (local $l7131 i32) + (local $l7132 i32) + (local $l7133 i32) + (local $l7134 i32) + (local $l7135 i32) + (local $l7136 i32) + (local $l7137 i32) + (local $l7138 i32) + (local $l7139 i32) + (local $l7140 i32) + (local $l7141 i32) + (local $l7142 i32) + (local $l7143 i32) + (local $l7144 i32) + (local $l7145 i32) + (local $l7146 i32) + (local $l7147 i32) + (local $l7148 i32) + (local $l7149 i32) + (local $l7150 i32) + (local $l7151 i32) + (local $l7152 i32) + (local $l7153 i32) + (local $l7154 i32) + (local $l7155 i32) + (local $l7156 i32) + (local $l7157 i32) + (local $l7158 i32) + (local $l7159 i32) + (local $l7160 i32) + (local $l7161 i32) + (local $l7162 i32) + (local $l7163 i32) + (local $l7164 i32) + (local $l7165 i32) + (local $l7166 i32) + (local $l7167 i32) + (local $l7168 i32) + (local $l7169 i32) + (local $l7170 i32) + (local $l7171 i32) + (local $l7172 i32) + (local $l7173 i32) + (local $l7174 i32) + (local $l7175 i32) + (local $l7176 i32) + (local $l7177 i32) + (local $l7178 i32) + (local $l7179 i32) + (local $l7180 i32) + (local $l7181 i32) + (local $l7182 i32) + (local $l7183 i32) + (local $l7184 i32) + (local $l7185 i32) + (local $l7186 i32) + (local $l7187 i32) + (local $l7188 i32) + (local $l7189 i32) + (local $l7190 i32) + (local $l7191 i32) + (local $l7192 i32) + (local $l7193 i32) + (local $l7194 i32) + (local $l7195 i32) + (local $l7196 i32) + (local $l7197 i32) + (local $l7198 i32) + (local $l7199 i32) + (local $l7200 i32) + (local $l7201 i32) + (local $l7202 i32) + (local $l7203 i32) + (local $l7204 i32) + (local $l7205 i32) + (local $l7206 i32) + (local $l7207 i32) + (local $l7208 i32) + (local $l7209 i32) + (local $l7210 i32) + (local $l7211 i32) + (local $l7212 i32) + (local $l7213 i32) + (local $l7214 i32) + (local $l7215 i32) + (local $l7216 i32) + (local $l7217 i32) + (local $l7218 i32) + (local $l7219 i32) + (local $l7220 i32) + (local $l7221 i32) + (local $l7222 i32) + (local $l7223 i32) + (local $l7224 i32) + (local $l7225 i32) + (local $l7226 i32) + (local $l7227 i32) + (local $l7228 i32) + (local $l7229 i32) + (local $l7230 i32) + (local $l7231 i32) + (local $l7232 i32) + (local $l7233 i32) + (local $l7234 i32) + (local $l7235 i32) + (local $l7236 i32) + (local $l7237 i32) + (local $l7238 i32) + (local $l7239 i32) + (local $l7240 i32) + (local $l7241 i32) + (local $l7242 i32) + (local $l7243 i32) + (local $l7244 i32) + (local $l7245 i32) + (local $l7246 i32) + (local $l7247 i32) + (local $l7248 i32) + (local $l7249 i32) + (local $l7250 i32) + (local $l7251 i32) + (local $l7252 i32) + (local $l7253 i32) + (local $l7254 i32) + (local $l7255 i32) + (local $l7256 i32) + (local $l7257 i32) + (local $l7258 i32) + (local $l7259 i32) + (local $l7260 i32) + (local $l7261 i32) + (local $l7262 i32) + (local $l7263 i32) + (local $l7264 i32) + (local $l7265 i32) + (local $l7266 i32) + (local $l7267 i32) + (local $l7268 i32) + (local $l7269 i32) + (local $l7270 i32) + (local $l7271 i32) + (local $l7272 i32) + (local $l7273 i32) + (local $l7274 i32) + (local $l7275 i32) + (local $l7276 i32) + (local $l7277 i32) + (local $l7278 i32) + (local $l7279 i32) + (local $l7280 i32) + (local $l7281 i32) + (local $l7282 i32) + (local $l7283 i32) + (local $l7284 i32) + (local $l7285 i32) + (local $l7286 i32) + (local $l7287 i32) + (local $l7288 i32) + (local $l7289 i32) + (local $l7290 i32) + (local $l7291 i32) + (local $l7292 i32) + (local $l7293 i32) + (local $l7294 i32) + (local $l7295 i32) + (local $l7296 i32) + (local $l7297 i32) + (local $l7298 i32) + (local $l7299 i32) + (local $l7300 i32) + (local $l7301 i32) + (local $l7302 i32) + (local $l7303 i32) + (local $l7304 i32) + (local $l7305 i32) + (local $l7306 i32) + (local $l7307 i32) + (local $l7308 i32) + (local $l7309 i32) + (local $l7310 i32) + (local $l7311 i32) + (local $l7312 i32) + (local $l7313 i32) + (local $l7314 i32) + (local $l7315 i32) + (local $l7316 i32) + (local $l7317 i32) + (local $l7318 i32) + (local $l7319 i32) + (local $l7320 i32) + (local $l7321 i32) + (local $l7322 i32) + (local $l7323 i32) + (local $l7324 i32) + (local $l7325 i32) + (local $l7326 i32) + (local $l7327 i32) + (local $l7328 i32) + (local $l7329 i32) + (local $l7330 i32) + (local $l7331 i32) + (local $l7332 i32) + (local $l7333 i32) + (local $l7334 i32) + (local $l7335 i32) + (local $l7336 i32) + (local $l7337 i32) + (local $l7338 i32) + (local $l7339 i32) + (local $l7340 i32) + (local $l7341 i32) + (local $l7342 i32) + (local $l7343 i32) + (local $l7344 i32) + (local $l7345 i32) + (local $l7346 i32) + (local $l7347 i32) + (local $l7348 i32) + (local $l7349 i32) + (local $l7350 i32) + (local $l7351 i32) + (local $l7352 i32) + (local $l7353 i32) + (local $l7354 i32) + (local $l7355 i32) + (local $l7356 i32) + (local $l7357 i32) + (local $l7358 i32) + (local $l7359 i32) + (local $l7360 i32) + (local $l7361 i32) + (local $l7362 i32) + (local $l7363 i32) + (local $l7364 i32) + (local $l7365 i32) + (local $l7366 i32) + (local $l7367 i32) + (local $l7368 i32) + (local $l7369 i32) + (local $l7370 i32) + (local $l7371 i32) + (local $l7372 i32) + (local $l7373 i32) + (local $l7374 i32) + (local $l7375 i32) + (local $l7376 i32) + (local $l7377 i32) + (local $l7378 i32) + (local $l7379 i32) + (local $l7380 i32) + (local $l7381 i32) + (local $l7382 i32) + (local $l7383 i32) + (local $l7384 i32) + (local $l7385 i32) + (local $l7386 i32) + (local $l7387 i32) + (local $l7388 i32) + (local $l7389 i32) + (local $l7390 i32) + (local $l7391 i32) + (local $l7392 i32) + (local $l7393 i32) + (local $l7394 i32) + (local $l7395 i32) + (local $l7396 i32) + (local $l7397 i32) + (local $l7398 i32) + (local $l7399 i32) + (local $l7400 i32) + (local $l7401 i32) + (local $l7402 i32) + (local $l7403 i32) + (local $l7404 i32) + (local $l7405 i32) + (local $l7406 i32) + (local $l7407 i32) + (local $l7408 i32) + (local $l7409 i32) + (local $l7410 i32) + (local $l7411 i32) + (local $l7412 i32) + (local $l7413 i32) + (local $l7414 i32) + (local $l7415 i32) + (local $l7416 i32) + (local $l7417 i32) + (local $l7418 i32) + (local $l7419 i32) + (local $l7420 i32) + (local $l7421 i32) + (local $l7422 i32) + (local $l7423 i32) + (local $l7424 i32) + (local $l7425 i32) + (local $l7426 i32) + (local $l7427 i32) + (local $l7428 i32) + (local $l7429 i32) + (local $l7430 i32) + (local $l7431 i32) + (local $l7432 i32) + (local $l7433 i32) + (local $l7434 i32) + (local $l7435 i32) + (local $l7436 i32) + (local $l7437 i32) + (local $l7438 i32) + (local $l7439 i32) + (local $l7440 i32) + (local $l7441 i32) + (local $l7442 i32) + (local $l7443 i32) + (local $l7444 i32) + (local $l7445 i32) + (local $l7446 i32) + (local $l7447 i32) + (local $l7448 i32) + (local $l7449 i32) + (local $l7450 i32) + (local $l7451 i32) + (local $l7452 i32) + (local $l7453 i32) + (local $l7454 i32) + (local $l7455 i32) + (local $l7456 i32) + (local $l7457 i32) + (local $l7458 i32) + (local $l7459 i32) + (local $l7460 i32) + (local $l7461 i32) + (local $l7462 i32) + (local $l7463 i32) + (local $l7464 i32) + (local $l7465 i32) + (local $l7466 i32) + (local $l7467 i32) + (local $l7468 i32) + (local $l7469 i32) + (local $l7470 i32) + (local $l7471 i32) + (local $l7472 i32) + (local $l7473 i32) + (local $l7474 i32) + (local $l7475 i32) + (local $l7476 i32) + (local $l7477 i32) + (local $l7478 i32) + (local $l7479 i32) + (local $l7480 i32) + (local $l7481 i32) + (local $l7482 i32) + (local $l7483 i32) + (local $l7484 i32) + (local $l7485 i32) + (local $l7486 i32) + (local $l7487 i32) + (local $l7488 i32) + (local $l7489 i32) + (local $l7490 i32) + (local $l7491 i32) + (local $l7492 i32) + (local $l7493 i32) + (local $l7494 i32) + (local $l7495 i32) + (local $l7496 i32) + (local $l7497 i32) + (local $l7498 i32) + (local $l7499 i32) + (local $l7500 i32) + (local $l7501 i32) + (local $l7502 i32) + (local $l7503 i32) + (local $l7504 i32) + (local $l7505 i32) + (local $l7506 i32) + (local $l7507 i32) + (local $l7508 i32) + (local $l7509 i32) + (local $l7510 i32) + (local $l7511 i32) + (local $l7512 i32) + (local $l7513 i32) + (local $l7514 i32) + (local $l7515 i32) + (local $l7516 i32) + (local $l7517 i32) + (local $l7518 i32) + (local $l7519 i32) + (local $l7520 i32) + (local $l7521 i32) + (local $l7522 i32) + (local $l7523 i32) + (local $l7524 i32) + (local $l7525 i32) + (local $l7526 i32) + (local $l7527 i32) + (local $l7528 i32) + (local $l7529 i32) + (local $l7530 i32) + (local $l7531 i32) + (local $l7532 i32) + (local $l7533 i32) + (local $l7534 i32) + (local $l7535 i32) + (local $l7536 i32) + (local $l7537 i32) + (local $l7538 i32) + (local $l7539 i32) + (local $l7540 i32) + (local $l7541 i32) + (local $l7542 i32) + (local $l7543 i32) + (local $l7544 i32) + (local $l7545 i32) + (local $l7546 i32) + (local $l7547 i32) + (local $l7548 i32) + (local $l7549 i32) + (local $l7550 i32) + (local $l7551 i32) + (local $l7552 i32) + (local $l7553 i32) + (local $l7554 i32) + (local $l7555 i32) + (local $l7556 i32) + (local $l7557 i32) + (local $l7558 i32) + (local $l7559 i32) + (local $l7560 i32) + (local $l7561 i32) + (local $l7562 i32) + (local $l7563 i32) + (local $l7564 i32) + (local $l7565 i32) + (local $l7566 i32) + (local $l7567 i32) + (local $l7568 i32) + (local $l7569 i32) + (local $l7570 i32) + (local $l7571 i32) + (local $l7572 i32) + (local $l7573 i32) + (local $l7574 i32) + (local $l7575 i32) + (local $l7576 i32) + (local $l7577 i32) + (local $l7578 i32) + (local $l7579 i32) + (local $l7580 i32) + (local $l7581 i32) + (local $l7582 i32) + (local $l7583 i32) + (local $l7584 i32) + (local $l7585 i32) + (local $l7586 i32) + (local $l7587 i32) + (local $l7588 i32) + (local $l7589 i32) + (local $l7590 i32) + (local $l7591 i32) + (local $l7592 i32) + (local $l7593 i32) + (local $l7594 i32) + (local $l7595 i32) + (local $l7596 i32) + (local $l7597 i32) + (local $l7598 i32) + (local $l7599 i32) + (local $l7600 i32) + (local $l7601 i32) + (local $l7602 i32) + (local $l7603 i32) + (local $l7604 i32) + (local $l7605 i32) + (local $l7606 i32) + (local $l7607 i32) + (local $l7608 i32) + (local $l7609 i32) + (local $l7610 i32) + (local $l7611 i32) + (local $l7612 i32) + (local $l7613 i32) + (local $l7614 i32) + (local $l7615 i32) + (local $l7616 i32) + (local $l7617 i32) + (local $l7618 i32) + (local $l7619 i32) + (local $l7620 i32) + (local $l7621 i32) + (local $l7622 i32) + (local $l7623 i32) + (local $l7624 i32) + (local $l7625 i32) + (local $l7626 i32) + (local $l7627 i32) + (local $l7628 i32) + (local $l7629 i32) + (local $l7630 i32) + (local $l7631 i32) + (local $l7632 i32) + (local $l7633 i32) + (local $l7634 i32) + (local $l7635 i32) + (local $l7636 i32) + (local $l7637 i32) + (local $l7638 i32) + (local $l7639 i32) + (local $l7640 i32) + (local $l7641 i32) + (local $l7642 i32) + (local $l7643 i32) + (local $l7644 i32) + (local $l7645 i32) + (local $l7646 i32) + (local $l7647 i32) + (local $l7648 i32) + (local $l7649 i32) + (local $l7650 i32) + (local $l7651 i32) + (local $l7652 i32) + (local $l7653 i32) + (local $l7654 i32) + (local $l7655 i32) + (local $l7656 i32) + (local $l7657 i32) + (local $l7658 i32) + (local $l7659 i32) + (local $l7660 i32) + (local $l7661 i32) + (local $l7662 i32) + (local $l7663 i32) + (local $l7664 i32) + (local $l7665 i32) + (local $l7666 i32) + (local $l7667 i32) + (local $l7668 i32) + (local $l7669 i32) + (local $l7670 i32) + (local $l7671 i32) + (local $l7672 i32) + (local $l7673 i32) + (local $l7674 i32) + (local $l7675 i32) + (local $l7676 i32) + (local $l7677 i32) + (local $l7678 i32) + (local $l7679 i32) + (local $l7680 i32) + (local $l7681 i32) + (local $l7682 i32) + (local $l7683 i32) + (local $l7684 i32) + (local $l7685 i32) + (local $l7686 i32) + (local $l7687 i32) + (local $l7688 i32) + (local $l7689 i32) + (local $l7690 i32) + (local $l7691 i32) + (local $l7692 i32) + (local $l7693 i32) + (local $l7694 i32) + (local $l7695 i32) + (local $l7696 i32) + (local $l7697 i32) + (local $l7698 i32) + (local $l7699 i32) + (local $l7700 i32) + (local $l7701 i32) + (local $l7702 i32) + (local $l7703 i32) + (local $l7704 i32) + (local $l7705 i32) + (local $l7706 i32) + (local $l7707 i32) + (local $l7708 i32) + (local $l7709 i32) + (local $l7710 i32) + (local $l7711 i32) + (local $l7712 i32) + (local $l7713 i32) + (local $l7714 i32) + (local $l7715 i32) + (local $l7716 i32) + (local $l7717 i32) + (local $l7718 i32) + (local $l7719 i32) + (local $l7720 i32) + (local $l7721 i32) + (local $l7722 i32) + (local $l7723 i32) + (local $l7724 i32) + (local $l7725 i32) + (local $l7726 i32) + (local $l7727 i32) + (local $l7728 i32) + (local $l7729 i32) + (local $l7730 i32) + (local $l7731 i32) + (local $l7732 i32) + (local $l7733 i32) + (local $l7734 i32) + (local $l7735 i32) + (local $l7736 i32) + (local $l7737 i32) + (local $l7738 i32) + (local $l7739 i32) + (local $l7740 i32) + (local $l7741 i32) + (local $l7742 i32) + (local $l7743 i32) + (local $l7744 i32) + (local $l7745 i32) + (local $l7746 i32) + (local $l7747 i32) + (local $l7748 i32) + (local $l7749 i32) + (local $l7750 i32) + (local $l7751 i32) + (local $l7752 i32) + (local $l7753 i32) + (local $l7754 i32) + (local $l7755 i32) + (local $l7756 i32) + (local $l7757 i32) + (local $l7758 i32) + (local $l7759 i32) + (local $l7760 i32) + (local $l7761 i32) + (local $l7762 i32) + (local $l7763 i32) + (local $l7764 i32) + (local $l7765 i32) + (local $l7766 i32) + (local $l7767 i32) + (local $l7768 i32) + (local $l7769 i32) + (local $l7770 i32) + (local $l7771 i32) + (local $l7772 i32) + (local $l7773 i32) + (local $l7774 i32) + (local $l7775 i32) + (local $l7776 i32) + (local $l7777 i32) + (local $l7778 i32) + (local $l7779 i32) + (local $l7780 i32) + (local $l7781 i32) + (local $l7782 i32) + (local $l7783 i32) + (local $l7784 i32) + (local $l7785 i32) + (local $l7786 i32) + (local $l7787 i32) + (local $l7788 i32) + (local $l7789 i32) + (local $l7790 i32) + (local $l7791 i32) + (local $l7792 i32) + (local $l7793 i32) + (local $l7794 i32) + (local $l7795 i32) + (local $l7796 i32) + (local $l7797 i32) + (local $l7798 i32) + (local $l7799 i32) + (local $l7800 i32) + (local $l7801 i32) + (local $l7802 i32) + (local $l7803 i32) + (local $l7804 i32) + (local $l7805 i32) + (local $l7806 i32) + (local $l7807 i32) + (local $l7808 i32) + (local $l7809 i32) + (local $l7810 i32) + (local $l7811 i32) + (local $l7812 i32) + (local $l7813 i32) + (local $l7814 i32) + (local $l7815 i32) + (local $l7816 i32) + (local $l7817 i32) + (local $l7818 i32) + (local $l7819 i32) + (local $l7820 i32) + (local $l7821 i32) + (local $l7822 i32) + (local $l7823 i32) + (local $l7824 i32) + (local $l7825 i32) + (local $l7826 i32) + (local $l7827 i32) + (local $l7828 i32) + (local $l7829 i32) + (local $l7830 i32) + (local $l7831 i32) + (local $l7832 i32) + (local $l7833 i32) + (local $l7834 i32) + (local $l7835 i32) + (local $l7836 i32) + (local $l7837 i32) + (local $l7838 i32) + (local $l7839 i32) + (local $l7840 i32) + (local $l7841 i32) + (local $l7842 i32) + (local $l7843 i32) + (local $l7844 i32) + (local $l7845 i32) + (local $l7846 i32) + (local $l7847 i32) + (local $l7848 i32) + (local $l7849 i32) + (local $l7850 i32) + (local $l7851 i32) + (local $l7852 i32) + (local $l7853 i32) + (local $l7854 i32) + (local $l7855 i32) + (local $l7856 i32) + (local $l7857 i32) + (local $l7858 i32) + (local $l7859 i32) + (local $l7860 i32) + (local $l7861 i32) + (local $l7862 i32) + (local $l7863 i32) + (local $l7864 i32) + (local $l7865 i32) + (local $l7866 i32) + (local $l7867 i32) + (local $l7868 i32) + (local $l7869 i32) + (local $l7870 i32) + (local $l7871 i32) + (local $l7872 i32) + (local $l7873 i32) + (local $l7874 i32) + (local $l7875 i32) + (local $l7876 i32) + (local $l7877 i32) + (local $l7878 i32) + (local $l7879 i32) + (local $l7880 i32) + (local $l7881 i32) + (local $l7882 i32) + (local $l7883 i32) + (local $l7884 i32) + (local $l7885 i32) + (local $l7886 i32) + (local $l7887 i32) + (local $l7888 i32) + (local $l7889 i32) + (local $l7890 i32) + (local $l7891 i32) + (local $l7892 i32) + (local $l7893 i32) + (local $l7894 i32) + (local $l7895 i32) + (local $l7896 i32) + (local $l7897 i32) + (local $l7898 i32) + (local $l7899 i32) + (local $l7900 i32) + (local $l7901 i32) + (local $l7902 i32) + (local $l7903 i32) + (local $l7904 i32) + (local $l7905 i32) + (local $l7906 i32) + (local $l7907 i32) + (local $l7908 i32) + (local $l7909 i32) + (local $l7910 i32) + (local $l7911 i32) + (local $l7912 i32) + (local $l7913 i32) + (local $l7914 i32) + (local $l7915 i32) + (local $l7916 i32) + (local $l7917 i32) + (local $l7918 i32) + (local $l7919 i32) + (local $l7920 i32) + (local $l7921 i32) + (local $l7922 i32) + (local $l7923 i32) + (local $l7924 i32) + (local $l7925 i32) + (local $l7926 i32) + (local $l7927 i32) + (local $l7928 i32) + (local $l7929 i32) + (local $l7930 i32) + (local $l7931 i32) + (local $l7932 i32) + (local $l7933 i32) + (local $l7934 i32) + (local $l7935 i32) + (local $l7936 i32) + (local $l7937 i32) + (local $l7938 i32) + (local $l7939 i32) + (local $l7940 i32) + (local $l7941 i32) + (local $l7942 i32) + (local $l7943 i32) + (local $l7944 i32) + (local $l7945 i32) + (local $l7946 i32) + (local $l7947 i32) + (local $l7948 i32) + (local $l7949 i32) + (local $l7950 i32) + (local $l7951 i32) + (local $l7952 i32) + (local $l7953 i32) + (local $l7954 i32) + (local $l7955 i32) + (local $l7956 i32) + (local $l7957 i32) + (local $l7958 i32) + (local $l7959 i32) + (local $l7960 i32) + (local $l7961 i32) + (local $l7962 i32) + (local $l7963 i32) + (local $l7964 i32) + (local $l7965 i32) + (local $l7966 i32) + (local $l7967 i32) + (local $l7968 i32) + (local $l7969 i32) + (local $l7970 i32) + (local $l7971 i32) + (local $l7972 i32) + (local $l7973 i32) + (local $l7974 i32) + (local $l7975 i32) + (local $l7976 i32) + (local $l7977 i32) + (local $l7978 i32) + (local $l7979 i32) + (local $l7980 i32) + (local $l7981 i32) + (local $l7982 i32) + (local $l7983 i32) + (local $l7984 i32) + (local $l7985 i32) + (local $l7986 i32) + (local $l7987 i32) + (local $l7988 i32) + (local $l7989 i32) + (local $l7990 i32) + (local $l7991 i32) + (local $l7992 i32) + (local $l7993 i32) + (local $l7994 i32) + (local $l7995 i32) + (local $l7996 i32) + (local $l7997 i32) + (local $l7998 i32) + (local $l7999 i32) + (local $l8000 i32) + (local $l8001 i32) + (local $l8002 i32) + (local $l8003 i32) + (local $l8004 i32) + (local $l8005 i32) + (local $l8006 i32) + (local $l8007 i32) + (local $l8008 i32) + (local $l8009 i32) + (local $l8010 i32) + (local $l8011 i32) + (local $l8012 i32) + (local $l8013 i32) + (local $l8014 i32) + (local $l8015 i32) + (local $l8016 i32) + (local $l8017 i32) + (local $l8018 i32) + (local $l8019 i32) + (local $l8020 i32) + (local $l8021 i32) + (local $l8022 i32) + (local $l8023 i32) + (local $l8024 i32) + (local $l8025 i32) + (local $l8026 i32) + (local $l8027 i32) + (local $l8028 i32) + (local $l8029 i32) + (local $l8030 i32) + (local $l8031 i32) + (local $l8032 i32) + (local $l8033 i32) + (local $l8034 i32) + (local $l8035 i32) + (local $l8036 i32) + (local $l8037 i32) + (local $l8038 i32) + (local $l8039 i32) + (local $l8040 i32) + (local $l8041 i32) + (local $l8042 i32) + (local $l8043 i32) + (local $l8044 i32) + (local $l8045 i32) + (local $l8046 i32) + (local $l8047 i32) + (local $l8048 i32) + (local $l8049 i32) + (local $l8050 i32) + (local $l8051 i32) + (local $l8052 i32) + (local $l8053 i32) + (local $l8054 i32) + (local $l8055 i32) + (local $l8056 i32) + (local $l8057 i32) + (local $l8058 i32) + (local $l8059 i32) + (local $l8060 i32) + (local $l8061 i32) + (local $l8062 i32) + (local $l8063 i32) + (local $l8064 i32) + (local $l8065 i32) + (local $l8066 i32) + (local $l8067 i32) + (local $l8068 i32) + (local $l8069 i32) + (local $l8070 i32) + (local $l8071 i32) + (local $l8072 i32) + (local $l8073 i32) + (local $l8074 i32) + (local $l8075 i32) + (local $l8076 i32) + (local $l8077 i32) + (local $l8078 i32) + (local $l8079 i32) + (local $l8080 i32) + (local $l8081 i32) + (local $l8082 i32) + (local $l8083 i32) + (local $l8084 i32) + (local $l8085 i32) + (local $l8086 i32) + (local $l8087 i32) + (local $l8088 i32) + (local $l8089 i32) + (local $l8090 i32) + (local $l8091 i32) + (local $l8092 i32) + (local $l8093 i32) + (local $l8094 i32) + (local $l8095 i32) + (local $l8096 i32) + (local $l8097 i32) + (local $l8098 i32) + (local $l8099 i32) + (local $l8100 i32) + (local $l8101 i32) + (local $l8102 i32) + (local $l8103 i32) + (local $l8104 i32) + (local $l8105 i32) + (local $l8106 i32) + (local $l8107 i32) + (local $l8108 i32) + (local $l8109 i32) + (local $l8110 i32) + (local $l8111 i32) + (local $l8112 i32) + (local $l8113 i32) + (local $l8114 i32) + (local $l8115 i32) + (local $l8116 i32) + (local $l8117 i32) + (local $l8118 i32) + (local $l8119 i32) + (local $l8120 i32) + (local $l8121 i32) + (local $l8122 i32) + (local $l8123 i32) + (local $l8124 i32) + (local $l8125 i32) + (local $l8126 i32) + (local $l8127 i32) + (local $l8128 i32) + (local $l8129 i32) + (local $l8130 i32) + (local $l8131 i32) + (local $l8132 i32) + (local $l8133 i32) + (local $l8134 i32) + (local $l8135 i32) + (local $l8136 i32) + (local $l8137 i32) + (local $l8138 i32) + (local $l8139 i32) + (local $l8140 i32) + (local $l8141 i32) + (local $l8142 i32) + (local $l8143 i32) + (local $l8144 i32) + (local $l8145 i32) + (local $l8146 i32) + (local $l8147 i32) + (local $l8148 i32) + (local $l8149 i32) + (local $l8150 i32) + (local $l8151 i32) + (local $l8152 i32) + (local $l8153 i32) + (local $l8154 i32) + (local $l8155 i32) + (local $l8156 i32) + (local $l8157 i32) + (local $l8158 i32) + (local $l8159 i32) + (local $l8160 i32) + (local $l8161 i32) + (local $l8162 i32) + (local $l8163 i32) + (local $l8164 i32) + (local $l8165 i32) + (local $l8166 i32) + (local $l8167 i32) + (local $l8168 i32) + (local $l8169 i32) + (local $l8170 i32) + (local $l8171 i32) + (local $l8172 i32) + (local $l8173 i32) + (local $l8174 i32) + (local $l8175 i32) + (local $l8176 i32) + (local $l8177 i32) + (local $l8178 i32) + (local $l8179 i32) + (local $l8180 i32) + (local $l8181 i32) + (local $l8182 i32) + (local $l8183 i32) + (local $l8184 i32) + (local $l8185 i32) + (local $l8186 i32) + (local $l8187 i32) + (local $l8188 i32) + (local $l8189 i32) + (local $l8190 i32) + (local $l8191 i32) + (local $l8192 i32) + (local $l8193 i32) + (local $l8194 i32) + (local $l8195 i32) + (local $l8196 i32) + (local $l8197 i32) + (local $l8198 i32) + (local $l8199 i32) + (local $l8200 i32) + (local $l8201 i32) + (local $l8202 i32) + (local $l8203 i32) + (local $l8204 i32) + (local $l8205 i32) + (local $l8206 i32) + (local $l8207 i32) + (local $l8208 i32) + (local $l8209 i32) + (local $l8210 i32) + (local $l8211 i32) + (local $l8212 i32) + (local $l8213 i32) + (local $l8214 i32) + (local $l8215 i32) + (local $l8216 i32) + (local $l8217 i32) + (local $l8218 i32) + (local $l8219 i32) + (local $l8220 i32) + (local $l8221 i32) + (local $l8222 i32) + (local $l8223 i32) + (local $l8224 i32) + (local $l8225 i32) + (local $l8226 i32) + (local $l8227 i32) + (local $l8228 i32) + (local $l8229 i32) + (local $l8230 i32) + (local $l8231 i32) + (local $l8232 i32) + (local $l8233 i32) + (local $l8234 i32) + (local $l8235 i32) + (local $l8236 i32) + (local $l8237 i32) + (local $l8238 i32) + (local $l8239 i32) + (local $l8240 i32) + (local $l8241 i32) + (local $l8242 i32) + (local $l8243 i32) + (local $l8244 i32) + (local $l8245 i32) + (local $l8246 i32) + (local $l8247 i32) + (local $l8248 i32) + (local $l8249 i32) + (local $l8250 i32) + (local $l8251 i32) + (local $l8252 i32) + (local $l8253 i32) + (local $l8254 i32) + (local $l8255 i32) + (local $l8256 i32) + (local $l8257 i32) + (local $l8258 i32) + (local $l8259 i32) + (local $l8260 i32) + (local $l8261 i32) + (local $l8262 i32) + (local $l8263 i32) + (local $l8264 i32) + (local $l8265 i32) + (local $l8266 i32) + (local $l8267 i32) + (local $l8268 i32) + (local $l8269 i32) + (local $l8270 i32) + (local $l8271 i32) + (local $l8272 i32) + (local $l8273 i32) + (local $l8274 i32) + (local $l8275 i32) + (local $l8276 i32) + (local $l8277 i32) + (local $l8278 i32) + (local $l8279 i32) + (local $l8280 i32) + (local $l8281 i32) + (local $l8282 i32) + (local $l8283 i32) + (local $l8284 i32) + (local $l8285 i32) + (local $l8286 i32) + (local $l8287 i32) + (local $l8288 i32) + (local $l8289 i32) + (local $l8290 i32) + (local $l8291 i32) + (local $l8292 i32) + (local $l8293 i32) + (local $l8294 i32) + (local $l8295 i32) + (local $l8296 i32) + (local $l8297 i32) + (local $l8298 i32) + (local $l8299 i32) + (local $l8300 i32) + (local $l8301 i32) + (local $l8302 i32) + (local $l8303 i32) + (local $l8304 i32) + (local $l8305 i32) + (local $l8306 i32) + (local $l8307 i32) + (local $l8308 i32) + (local $l8309 i32) + (local $l8310 i32) + (local $l8311 i32) + (local $l8312 i32) + (local $l8313 i32) + (local $l8314 i32) + (local $l8315 i32) + (local $l8316 i32) + (local $l8317 i32) + (local $l8318 i32) + (local $l8319 i32) + (local $l8320 i32) + (local $l8321 i32) + (local $l8322 i32) + (local $l8323 i32) + (local $l8324 i32) + (local $l8325 i32) + (local $l8326 i32) + (local $l8327 i32) + (local $l8328 i32) + (local $l8329 i32) + (local $l8330 i32) + (local $l8331 i32) + (local $l8332 i32) + (local $l8333 i32) + (local $l8334 i32) + (local $l8335 i32) + (local $l8336 i32) + (local $l8337 i32) + (local $l8338 i32) + (local $l8339 i32) + (local $l8340 i32) + (local $l8341 i32) + (local $l8342 i32) + (local $l8343 i32) + (local $l8344 i32) + (local $l8345 i32) + (local $l8346 i32) + (local $l8347 i32) + (local $l8348 i32) + (local $l8349 i32) + (local $l8350 i32) + (local $l8351 i32) + (local $l8352 i32) + (local $l8353 i32) + (local $l8354 i32) + (local $l8355 i32) + (local $l8356 i32) + (local $l8357 i32) + (local $l8358 i32) + (local $l8359 i32) + (local $l8360 i32) + (local $l8361 i32) + (local $l8362 i32) + (local $l8363 i32) + (local $l8364 i32) + (local $l8365 i32) + (local $l8366 i32) + (local $l8367 i32) + (local $l8368 i32) + (local $l8369 i32) + (local $l8370 i32) + (local $l8371 i32) + (local $l8372 i32) + (local $l8373 i32) + (local $l8374 i32) + (local $l8375 i32) + (local $l8376 i32) + (local $l8377 i32) + (local $l8378 i32) + (local $l8379 i32) + (local $l8380 i32) + (local $l8381 i32) + (local $l8382 i32) + (local $l8383 i32) + (local $l8384 i32) + (local $l8385 i32) + (local $l8386 i32) + (local $l8387 i32) + (local $l8388 i32) + (local $l8389 i32) + (local $l8390 i32) + (local $l8391 i32) + (local $l8392 i32) + (local $l8393 i32) + (local $l8394 i32) + (local $l8395 i32) + (local $l8396 i32) + (local $l8397 i32) + (local $l8398 i32) + (local $l8399 i32) + (local $l8400 i32) + (local $l8401 i32) + (local $l8402 i32) + (local $l8403 i32) + (local $l8404 i32) + (local $l8405 i32) + (local $l8406 i32) + (local $l8407 i32) + (local $l8408 i32) + (local $l8409 i32) + (local $l8410 i32) + (local $l8411 i32) + (local $l8412 i32) + (local $l8413 i32) + (local $l8414 i32) + (local $l8415 i32) + (local $l8416 i32) + (local $l8417 i32) + (local $l8418 i32) + (local $l8419 i32) + (local $l8420 i32) + (local $l8421 i32) + (local $l8422 i32) + (local $l8423 i32) + (local $l8424 i32) + (local $l8425 i32) + (local $l8426 i32) + (local $l8427 i32) + (local $l8428 i32) + (local $l8429 i32) + (local $l8430 i32) + (local $l8431 i32) + (local $l8432 i32) + (local $l8433 i32) + (local $l8434 i32) + (local $l8435 i32) + (local $l8436 i32) + (local $l8437 i32) + (local $l8438 i32) + (local $l8439 i32) + (local $l8440 i32) + (local $l8441 i32) + (local $l8442 i32) + (local $l8443 i32) + (local $l8444 i32) + (local $l8445 i32) + (local $l8446 i32) + (local $l8447 i32) + (local $l8448 i32) + (local $l8449 i32) + (local $l8450 i32) + (local $l8451 i32) + (local $l8452 i32) + (local $l8453 i32) + (local $l8454 i32) + (local $l8455 i32) + (local $l8456 i32) + (local $l8457 i32) + (local $l8458 i32) + (local $l8459 i32) + (local $l8460 i32) + (local $l8461 i32) + (local $l8462 i32) + (local $l8463 i32) + (local $l8464 i32) + (local $l8465 i32) + (local $l8466 i32) + (local $l8467 i32) + (local $l8468 i32) + (local $l8469 i32) + (local $l8470 i32) + (local $l8471 i32) + (local $l8472 i32) + (local $l8473 i32) + (local $l8474 i32) + (local $l8475 i32) + (local $l8476 i32) + (local $l8477 i32) + (local $l8478 i32) + (local $l8479 i32) + (local $l8480 i32) + (local $l8481 i32) + (local $l8482 i32) + (local $l8483 i32) + (local $l8484 i32) + (local $l8485 i32) + (local $l8486 i32) + (local $l8487 i32) + (local $l8488 i32) + (local $l8489 i32) + (local $l8490 i32) + (local $l8491 i32) + (local $l8492 i32) + (local $l8493 i32) + (local $l8494 i32) + (local $l8495 i32) + (local $l8496 i32) + (local $l8497 i32) + (local $l8498 i32) + (local $l8499 i32) + (local $l8500 i32) + (local $l8501 i32) + (local $l8502 i32) + (local $l8503 i32) + (local $l8504 i32) + (local $l8505 i32) + (local $l8506 i32) + (local $l8507 i32) + (local $l8508 i32) + (local $l8509 i32) + (local $l8510 i32) + (local $l8511 i32) + (local $l8512 i32) + (local $l8513 i32) + (local $l8514 i32) + (local $l8515 i32) + (local $l8516 i32) + (local $l8517 i32) + (local $l8518 i32) + (local $l8519 i32) + (local $l8520 i32) + (local $l8521 i32) + (local $l8522 i32) + (local $l8523 i32) + (local $l8524 i32) + (local $l8525 i32) + (local $l8526 i32) + (local $l8527 i32) + (local $l8528 i32) + (local $l8529 i32) + (local $l8530 i32) + (local $l8531 i32) + (local $l8532 i32) + (local $l8533 i32) + (local $l8534 i32) + (local $l8535 i32) + (local $l8536 i32) + (local $l8537 i32) + (local $l8538 i32) + (local $l8539 i32) + (local $l8540 i32) + (local $l8541 i32) + (local $l8542 i32) + (local $l8543 i32) + (local $l8544 i32) + (local $l8545 i32) + (local $l8546 i32) + (local $l8547 i32) + (local $l8548 i32) + (local $l8549 i32) + (local $l8550 i32) + (local $l8551 i32) + (local $l8552 i32) + (local $l8553 i32) + (local $l8554 i32) + (local $l8555 i32) + (local $l8556 i32) + (local $l8557 i32) + (local $l8558 i32) + (local $l8559 i32) + (local $l8560 i32) + (local $l8561 i32) + (local $l8562 i32) + (local $l8563 i32) + (local $l8564 i32) + (local $l8565 i32) + (local $l8566 i32) + (local $l8567 i32) + (local $l8568 i32) + (local $l8569 i32) + (local $l8570 i32) + (local $l8571 i32) + (local $l8572 i32) + (local $l8573 i32) + (local $l8574 i32) + (local $l8575 i32) + (local $l8576 i32) + (local $l8577 i32) + (local $l8578 i32) + (local $l8579 i32) + (local $l8580 i32) + (local $l8581 i32) + (local $l8582 i32) + (local $l8583 i32) + (local $l8584 i32) + (local $l8585 i32) + (local $l8586 i32) + (local $l8587 i32) + (local $l8588 i32) + (local $l8589 i32) + (local $l8590 i32) + (local $l8591 i32) + (local $l8592 i32) + (local $l8593 i32) + (local $l8594 i32) + (local $l8595 i32) + (local $l8596 i32) + (local $l8597 i32) + (local $l8598 i32) + (local $l8599 i32) + (local $l8600 i32) + (local $l8601 i32) + (local $l8602 i32) + (local $l8603 i32) + (local $l8604 i32) + (local $l8605 i32) + (local $l8606 i32) + (local $l8607 i32) + (local $l8608 i32) + (local $l8609 i32) + (local $l8610 i32) + (local $l8611 i32) + (local $l8612 i32) + (local $l8613 i32) + (local $l8614 i32) + (local $l8615 i32) + (local $l8616 i32) + (local $l8617 i32) + (local $l8618 i32) + (local $l8619 i32) + (local $l8620 i32) + (local $l8621 i32) + (local $l8622 i32) + (local $l8623 i32) + (local $l8624 i32) + (local $l8625 i32) + (local $l8626 i32) + (local $l8627 i32) + (local $l8628 i32) + (local $l8629 i32) + (local $l8630 i32) + (local $l8631 i32) + (local $l8632 i32) + (local $l8633 i32) + (local $l8634 i32) + (local $l8635 i32) + (local $l8636 i32) + (local $l8637 i32) + (local $l8638 i32) + (local $l8639 i32) + (local $l8640 i32) + (local $l8641 i32) + (local $l8642 i32) + (local $l8643 i32) + (local $l8644 i32) + (local $l8645 i32) + (local $l8646 i32) + (local $l8647 i32) + (local $l8648 i32) + (local $l8649 i32) + (local $l8650 i32) + (local $l8651 i32) + (local $l8652 i32) + (local $l8653 i32) + (local $l8654 i32) + (local $l8655 i32) + (local $l8656 i32) + (local $l8657 i32) + (local $l8658 i32) + (local $l8659 i32) + (local $l8660 i32) + (local $l8661 i32) + (local $l8662 i32) + (local $l8663 i32) + (local $l8664 i32) + (local $l8665 i32) + (local $l8666 i32) + (local $l8667 i32) + (local $l8668 i32) + (local $l8669 i32) + (local $l8670 i32) + (local $l8671 i32) + (local $l8672 i32) + (local $l8673 i32) + (local $l8674 i32) + (local $l8675 i32) + (local $l8676 i32) + (local $l8677 i32) + (local $l8678 i32) + (local $l8679 i32) + (local $l8680 i32) + (local $l8681 i32) + (local $l8682 i32) + (local $l8683 i32) + (local $l8684 i32) + (local $l8685 i32) + (local $l8686 i32) + (local $l8687 i32) + (local $l8688 i32) + (local $l8689 i32) + (local $l8690 i32) + (local $l8691 i32) + (local $l8692 i32) + (local $l8693 i32) + (local $l8694 i32) + (local $l8695 i32) + (local $l8696 i32) + (local $l8697 i32) + (local $l8698 i32) + (local $l8699 i32) + (local $l8700 i32) + (local $l8701 i32) + (local $l8702 i32) + (local $l8703 i32) + (local $l8704 i32) + (local $l8705 i32) + (local $l8706 i32) + (local $l8707 i32) + (local $l8708 i32) + (local $l8709 i32) + (local $l8710 i32) + (local $l8711 i32) + (local $l8712 i32) + (local $l8713 i32) + (local $l8714 i32) + (local $l8715 i32) + (local $l8716 i32) + (local $l8717 i32) + (local $l8718 i32) + (local $l8719 i32) + (local $l8720 i32) + (local $l8721 i32) + (local $l8722 i32) + (local $l8723 i32) + (local $l8724 i32) + (local $l8725 i32) + (local $l8726 i32) + (local $l8727 i32) + (local $l8728 i32) + (local $l8729 i32) + (local $l8730 i32) + (local $l8731 i32) + (local $l8732 i32) + (local $l8733 i32) + (local $l8734 i32) + (local $l8735 i32) + (local $l8736 i32) + (local $l8737 i32) + (local $l8738 i32) + (local $l8739 i32) + (local $l8740 i32) + (local $l8741 i32) + (local $l8742 i32) + (local $l8743 i32) + (local $l8744 i32) + (local $l8745 i32) + (local $l8746 i32) + (local $l8747 i32) + (local $l8748 i32) + (local $l8749 i32) + (local $l8750 i32) + (local $l8751 i32) + (local $l8752 i32) + (local $l8753 i32) + (local $l8754 i32) + (local $l8755 i32) + (local $l8756 i32) + (local $l8757 i32) + (local $l8758 i32) + (local $l8759 i32) + (local $l8760 i32) + (local $l8761 i32) + (local $l8762 i32) + (local $l8763 i32) + (local $l8764 i32) + (local $l8765 i32) + (local $l8766 i32) + (local $l8767 i32) + (local $l8768 i32) + (local $l8769 i32) + (local $l8770 i32) + (local $l8771 i32) + (local $l8772 i32) + (local $l8773 i32) + (local $l8774 i32) + (local $l8775 i32) + (local $l8776 i32) + (local $l8777 i32) + (local $l8778 i32) + (local $l8779 i32) + (local $l8780 i32) + (local $l8781 i32) + (local $l8782 i32) + (local $l8783 i32) + (local $l8784 i32) + (local $l8785 i32) + (local $l8786 i32) + (local $l8787 i32) + (local $l8788 i32) + (local $l8789 i32) + (local $l8790 i32) + (local $l8791 i32) + (local $l8792 i32) + (local $l8793 i32) + (local $l8794 i32) + (local $l8795 i32) + (local $l8796 i32) + (local $l8797 i32) + (local $l8798 i32) + (local $l8799 i32) + (local $l8800 i32) + (local $l8801 i32) + (local $l8802 i32) + (local $l8803 i32) + (local $l8804 i32) + (local $l8805 i32) + (local $l8806 i32) + (local $l8807 i32) + (local $l8808 i32) + (local $l8809 i32) + (local $l8810 i32) + (local $l8811 i32) + (local $l8812 i32) + (local $l8813 i32) + (local $l8814 i32) + (local $l8815 i32) + (local $l8816 i32) + (local $l8817 i32) + (local $l8818 i32) + (local $l8819 i32) + (local $l8820 i32) + (local $l8821 i32) + (local $l8822 i32) + (local $l8823 i32) + (local $l8824 i32) + (local $l8825 i32) + (local $l8826 i32) + (local $l8827 i32) + (local $l8828 i32) + (local $l8829 i32) + (local $l8830 i32) + (local $l8831 i32) + (local $l8832 i32) + (local $l8833 i32) + (local $l8834 i32) + (local $l8835 i32) + (local $l8836 i32) + (local $l8837 i32) + (local $l8838 i32) + (local $l8839 i32) + (local $l8840 i32) + (local $l8841 i32) + (local $l8842 i32) + (local $l8843 i32) + (local $l8844 i32) + (local $l8845 i32) + (local $l8846 i32) + (local $l8847 i32) + (local $l8848 i32) + (local $l8849 i32) + (local $l8850 i32) + (local $l8851 i32) + (local $l8852 i32) + (local $l8853 i32) + (local $l8854 i32) + (local $l8855 i32) + (local $l8856 i32) + (local $l8857 i32) + (local $l8858 i32) + (local $l8859 i32) + (local $l8860 i32) + (local $l8861 i32) + (local $l8862 i32) + (local $l8863 i32) + (local $l8864 i32) + (local $l8865 i32) + (local $l8866 i32) + (local $l8867 i32) + (local $l8868 i32) + (local $l8869 i32) + (local $l8870 i32) + (local $l8871 i32) + (local $l8872 i32) + (local $l8873 i32) + (local $l8874 i32) + (local $l8875 i32) + (local $l8876 i32) + (local $l8877 i32) + (local $l8878 i32) + (local $l8879 i32) + (local $l8880 i32) + (local $l8881 i32) + (local $l8882 i32) + (local $l8883 i32) + (local $l8884 i32) + (local $l8885 i32) + (local $l8886 i32) + (local $l8887 i32) + (local $l8888 i32) + (local $l8889 i32) + (local $l8890 i32) + (local $l8891 i32) + (local $l8892 i32) + (local $l8893 i32) + (local $l8894 i32) + (local $l8895 i32) + (local $l8896 i32) + (local $l8897 i32) + (local $l8898 i32) + (local $l8899 i32) + (local $l8900 i32) + (local $l8901 i32) + (local $l8902 i32) + (local $l8903 i32) + (local $l8904 i32) + (local $l8905 i32) + (local $l8906 i32) + (local $l8907 i32) + (local $l8908 i32) + (local $l8909 i32) + (local $l8910 i32) + (local $l8911 i32) + (local $l8912 i32) + (local $l8913 i32) + (local $l8914 i32) + (local $l8915 i32) + (local $l8916 i32) + (local $l8917 i32) + (local $l8918 i32) + (local $l8919 i32) + (local $l8920 i32) + (local $l8921 i32) + (local $l8922 i32) + (local $l8923 i32) + (local $l8924 i32) + (local $l8925 i32) + (local $l8926 i32) + (local $l8927 i32) + (local $l8928 i32) + (local $l8929 i32) + (local $l8930 i32) + (local $l8931 i32) + (local $l8932 i32) + (local $l8933 i32) + (local $l8934 i32) + (local $l8935 i32) + (local $l8936 i32) + (local $l8937 i32) + (local $l8938 i32) + (local $l8939 i32) + (local $l8940 i32) + (local $l8941 i32) + (local $l8942 i32) + (local $l8943 i32) + (local $l8944 i32) + (local $l8945 i32) + (local $l8946 i32) + (local $l8947 i32) + (local $l8948 i32) + (local $l8949 i32) + (local $l8950 i32) + (local $l8951 i32) + (local $l8952 i32) + (local $l8953 i32) + (local $l8954 i32) + (local $l8955 i32) + (local $l8956 i32) + (local $l8957 i32) + (local $l8958 i32) + (local $l8959 i32) + (local $l8960 i32) + (local $l8961 i32) + (local $l8962 i32) + (local $l8963 i32) + (local $l8964 i32) + (local $l8965 i32) + (local $l8966 i32) + (local $l8967 i32) + (local $l8968 i32) + (local $l8969 i32) + (local $l8970 i32) + (local $l8971 i32) + (local $l8972 i32) + (local $l8973 i32) + (local $l8974 i32) + (local $l8975 i32) + (local $l8976 i32) + (local $l8977 i32) + (local $l8978 i32) + (local $l8979 i32) + (local $l8980 i32) + (local $l8981 i32) + (local $l8982 i32) + (local $l8983 i32) + (local $l8984 i32) + (local $l8985 i32) + (local $l8986 i32) + (local $l8987 i32) + (local $l8988 i32) + (local $l8989 i32) + (local $l8990 i32) + (local $l8991 i32) + (local $l8992 i32) + (local $l8993 i32) + (local $l8994 i32) + (local $l8995 i32) + (local $l8996 i32) + (local $l8997 i32) + (local $l8998 i32) + (local $l8999 i32) + (local $l9000 i32) + (local $l9001 i32) + (local $l9002 i32) + (local $l9003 i32) + (local $l9004 i32) + (local $l9005 i32) + (local $l9006 i32) + (local $l9007 i32) + (local $l9008 i32) + (local $l9009 i32) + (local $l9010 i32) + (local $l9011 i32) + (local $l9012 i32) + (local $l9013 i32) + (local $l9014 i32) + (local $l9015 i32) + (local $l9016 i32) + (local $l9017 i32) + (local $l9018 i32) + (local $l9019 i32) + (local $l9020 i32) + (local $l9021 i32) + (local $l9022 i32) + (local $l9023 i32) + (local $l9024 i32) + (local $l9025 i32) + (local $l9026 i32) + (local $l9027 i32) + (local $l9028 i32) + (local $l9029 i32) + (local $l9030 i32) + (local $l9031 i32) + (local $l9032 i32) + (local $l9033 i32) + (local $l9034 i32) + (local $l9035 i32) + (local $l9036 i32) + (local $l9037 i32) + (local $l9038 i32) + (local $l9039 i32) + (local $l9040 i32) + (local $l9041 i32) + (local $l9042 i32) + (local $l9043 i32) + (local $l9044 i32) + (local $l9045 i32) + (local $l9046 i32) + (local $l9047 i32) + (local $l9048 i32) + (local $l9049 i32) + (local $l9050 i32) + (local $l9051 i32) + (local $l9052 i32) + (local $l9053 i32) + (local $l9054 i32) + (local $l9055 i32) + (local $l9056 i32) + (local $l9057 i32) + (local $l9058 i32) + (local $l9059 i32) + (local $l9060 i32) + (local $l9061 i32) + (local $l9062 i32) + (local $l9063 i32) + (local $l9064 i32) + (local $l9065 i32) + (local $l9066 i32) + (local $l9067 i32) + (local $l9068 i32) + (local $l9069 i32) + (local $l9070 i32) + (local $l9071 i32) + (local $l9072 i32) + (local $l9073 i32) + (local $l9074 i32) + (local $l9075 i32) + (local $l9076 i32) + (local $l9077 i32) + (local $l9078 i32) + (local $l9079 i32) + (local $l9080 i32) + (local $l9081 i32) + (local $l9082 i32) + (local $l9083 i32) + (local $l9084 i32) + (local $l9085 i32) + (local $l9086 i32) + (local $l9087 i32) + (local $l9088 i32) + (local $l9089 i32) + (local $l9090 i32) + (local $l9091 i32) + (local $l9092 i32) + (local $l9093 i32) + (local $l9094 i32) + (local $l9095 i32) + (local $l9096 i32) + (local $l9097 i32) + (local $l9098 i32) + (local $l9099 i32) + (local $l9100 i32) + (local $l9101 i32) + (local $l9102 i32) + (local $l9103 i32) + (local $l9104 i32) + (local $l9105 i32) + (local $l9106 i32) + (local $l9107 i32) + (local $l9108 i32) + (local $l9109 i32) + (local $l9110 i32) + (local $l9111 i32) + (local $l9112 i32) + (local $l9113 i32) + (local $l9114 i32) + (local $l9115 i32) + (local $l9116 i32) + (local $l9117 i32) + (local $l9118 i32) + (local $l9119 i32) + (local $l9120 i32) + (local $l9121 i32) + (local $l9122 i32) + (local $l9123 i32) + (local $l9124 i32) + (local $l9125 i32) + (local $l9126 i32) + (local $l9127 i32) + (local $l9128 i32) + (local $l9129 i32) + (local $l9130 i32) + (local $l9131 i32) + (local $l9132 i32) + (local $l9133 i32) + (local $l9134 i32) + (local $l9135 i32) + (local $l9136 i32) + (local $l9137 i32) + (local $l9138 i32) + (local $l9139 i32) + (local $l9140 i32) + (local $l9141 i32) + (local $l9142 i32) + (local $l9143 i32) + (local $l9144 i32) + (local $l9145 i32) + (local $l9146 i32) + (local $l9147 i32) + (local $l9148 i32) + (local $l9149 i32) + (local $l9150 i32) + (local $l9151 i32) + (local $l9152 i32) + (local $l9153 i32) + (local $l9154 i32) + (local $l9155 i32) + (local $l9156 i32) + (local $l9157 i32) + (local $l9158 i32) + (local $l9159 i32) + (local $l9160 i32) + (local $l9161 i32) + (local $l9162 i32) + (local $l9163 i32) + (local $l9164 i32) + (local $l9165 i32) + (local $l9166 i32) + (local $l9167 i32) + (local $l9168 i32) + (local $l9169 i32) + (local $l9170 i32) + (local $l9171 i32) + (local $l9172 i32) + (local $l9173 i32) + (local $l9174 i32) + (local $l9175 i32) + (local $l9176 i32) + (local $l9177 i32) + (local $l9178 i32) + (local $l9179 i32) + (local $l9180 i32) + (local $l9181 i32) + (local $l9182 i32) + (local $l9183 i32) + (local $l9184 i32) + (local $l9185 i32) + (local $l9186 i32) + (local $l9187 i32) + (local $l9188 i32) + (local $l9189 i32) + (local $l9190 i32) + (local $l9191 i32) + (local $l9192 i32) + (local $l9193 i32) + (local $l9194 i32) + (local $l9195 i32) + (local $l9196 i32) + (local $l9197 i32) + (local $l9198 i32) + (local $l9199 i32) + (local $l9200 i32) + (local $l9201 i32) + (local $l9202 i32) + (local $l9203 i32) + (local $l9204 i32) + (local $l9205 i32) + (local $l9206 i32) + (local $l9207 i32) + (local $l9208 i32) + (local $l9209 i32) + (local $l9210 i32) + (local $l9211 i32) + (local $l9212 i32) + (local $l9213 i32) + (local $l9214 i32) + (local $l9215 i32) + (local $l9216 i32) + (local $l9217 i32) + (local $l9218 i32) + (local $l9219 i32) + (local $l9220 i32) + (local $l9221 i32) + (local $l9222 i32) + (local $l9223 i32) + (local $l9224 i32) + (local $l9225 i32) + (local $l9226 i32) + (local $l9227 i32) + (local $l9228 i32) + (local $l9229 i32) + (local $l9230 i32) + (local $l9231 i32) + (local $l9232 i32) + (local $l9233 i32) + (local $l9234 i32) + (local $l9235 i32) + (local $l9236 i32) + (local $l9237 i32) + (local $l9238 i32) + (local $l9239 i32) + (local $l9240 i32) + (local $l9241 i32) + (local $l9242 i32) + (local $l9243 i32) + (local $l9244 i32) + (local $l9245 i32) + (local $l9246 i32) + (local $l9247 i32) + (local $l9248 i32) + (local $l9249 i32) + (local $l9250 i32) + (local $l9251 i32) + (local $l9252 i32) + (local $l9253 i32) + (local $l9254 i32) + (local $l9255 i32) + (local $l9256 i32) + (local $l9257 i32) + (local $l9258 i32) + (local $l9259 i32) + (local $l9260 i32) + (local $l9261 i32) + (local $l9262 i32) + (local $l9263 i32) + (local $l9264 i32) + (local $l9265 i32) + (local $l9266 i32) + (local $l9267 i32) + (local $l9268 i32) + (local $l9269 i32) + (local $l9270 i32) + (local $l9271 i32) + (local $l9272 i32) + (local $l9273 i32) + (local $l9274 i32) + (local $l9275 i32) + (local $l9276 i32) + (local $l9277 i32) + (local $l9278 i32) + (local $l9279 i32) + (local $l9280 i32) + (local $l9281 i32) + (local $l9282 i32) + (local $l9283 i32) + (local $l9284 i32) + (local $l9285 i32) + (local $l9286 i32) + (local $l9287 i32) + (local $l9288 i32) + (local $l9289 i32) + (local $l9290 i32) + (local $l9291 i32) + (local $l9292 i32) + (local $l9293 i32) + (local $l9294 i32) + (local $l9295 i32) + (local $l9296 i32) + (local $l9297 i32) + (local $l9298 i32) + (local $l9299 i32) + (local $l9300 i32) + (local $l9301 i32) + (local $l9302 i32) + (local $l9303 i32) + (local $l9304 i32) + (local $l9305 i32) + (local $l9306 i32) + (local $l9307 i32) + (local $l9308 i32) + (local $l9309 i32) + (local $l9310 i32) + (local $l9311 i32) + (local $l9312 i32) + (local $l9313 i32) + (local $l9314 i32) + (local $l9315 i32) + (local $l9316 i32) + (local $l9317 i32) + (local $l9318 i32) + (local $l9319 i32) + (local $l9320 i32) + (local $l9321 i32) + (local $l9322 i32) + (local $l9323 i32) + (local $l9324 i32) + (local $l9325 i32) + (local $l9326 i32) + (local $l9327 i32) + (local $l9328 i32) + (local $l9329 i32) + (local $l9330 i32) + (local $l9331 i32) + (local $l9332 i32) + (local $l9333 i32) + (local $l9334 i32) + (local $l9335 i32) + (local $l9336 i32) + (local $l9337 i32) + (local $l9338 i32) + (local $l9339 i32) + (local $l9340 i32) + (local $l9341 i32) + (local $l9342 i32) + (local $l9343 i32) + (local $l9344 i32) + (local $l9345 i32) + (local $l9346 i32) + (local $l9347 i32) + (local $l9348 i32) + (local $l9349 i32) + (local $l9350 i32) + (local $l9351 i32) + (local $l9352 i32) + (local $l9353 i32) + (local $l9354 i32) + (local $l9355 i32) + (local $l9356 i32) + (local $l9357 i32) + (local $l9358 i32) + (local $l9359 i32) + (local $l9360 i32) + (local $l9361 i32) + (local $l9362 i32) + (local $l9363 i32) + (local $l9364 i32) + (local $l9365 i32) + (local $l9366 i32) + (local $l9367 i32) + (local $l9368 i32) + (local $l9369 i32) + (local $l9370 i32) + (local $l9371 i32) + (local $l9372 i32) + (local $l9373 i32) + (local $l9374 i32) + (local $l9375 i32) + (local $l9376 i32) + (local $l9377 i32) + (local $l9378 i32) + (local $l9379 i32) + (local $l9380 i32) + (local $l9381 i32) + (local $l9382 i32) + (local $l9383 i32) + (local $l9384 i32) + (local $l9385 i32) + (local $l9386 i32) + (local $l9387 i32) + (local $l9388 i32) + (local $l9389 i32) + (local $l9390 i32) + (local $l9391 i32) + (local $l9392 i32) + (local $l9393 i32) + (local $l9394 i32) + (local $l9395 i32) + (local $l9396 i32) + (local $l9397 i32) + (local $l9398 i32) + (local $l9399 i32) + (local $l9400 i32) + (local $l9401 i32) + (local $l9402 i32) + (local $l9403 i32) + (local $l9404 i32) + (local $l9405 i32) + (local $l9406 i32) + (local $l9407 i32) + (local $l9408 i32) + (local $l9409 i32) + (local $l9410 i32) + (local $l9411 i32) + (local $l9412 i32) + (local $l9413 i32) + (local $l9414 i32) + (local $l9415 i32) + (local $l9416 i32) + (local $l9417 i32) + (local $l9418 i32) + (local $l9419 i32) + (local $l9420 i32) + (local $l9421 i32) + (local $l9422 i32) + (local $l9423 i32) + (local $l9424 i32) + (local $l9425 i32) + (local $l9426 i32) + (local $l9427 i32) + (local $l9428 i32) + (local $l9429 i32) + (local $l9430 i32) + (local $l9431 i32) + (local $l9432 i32) + (local $l9433 i32) + (local $l9434 i32) + (local $l9435 i32) + (local $l9436 i32) + (local $l9437 i32) + (local $l9438 i32) + (local $l9439 i32) + (local $l9440 i32) + (local $l9441 i32) + (local $l9442 i32) + (local $l9443 i32) + (local $l9444 i32) + (local $l9445 i32) + (local $l9446 i32) + (local $l9447 i32) + (local $l9448 i32) + (local $l9449 i32) + (local $l9450 i32) + (local $l9451 i32) + (local $l9452 i32) + (local $l9453 i32) + (local $l9454 i32) + (local $l9455 i32) + (local $l9456 i32) + (local $l9457 i32) + (local $l9458 i32) + (local $l9459 i32) + (local $l9460 i32) + (local $l9461 i32) + (local $l9462 i32) + (local $l9463 i32) + (local $l9464 i32) + (local $l9465 i32) + (local $l9466 i32) + (local $l9467 i32) + (local $l9468 i32) + (local $l9469 i32) + (local $l9470 i32) + (local $l9471 i32) + (local $l9472 i32) + (local $l9473 i32) + (local $l9474 i32) + (local $l9475 i32) + (local $l9476 i32) + (local $l9477 i32) + (local $l9478 i32) + (local $l9479 i32) + (local $l9480 i32) + (local $l9481 i32) + (local $l9482 i32) + (local $l9483 i32) + (local $l9484 i32) + (local $l9485 i32) + (local $l9486 i32) + (local $l9487 i32) + (local $l9488 i32) + (local $l9489 i32) + (local $l9490 i32) + (local $l9491 i32) + (local $l9492 i32) + (local $l9493 i32) + (local $l9494 i32) + (local $l9495 i32) + (local $l9496 i32) + (local $l9497 i32) + (local $l9498 i32) + (local $l9499 i32) + (local $l9500 i32) + (local $l9501 i32) + (local $l9502 i32) + (local $l9503 i32) + (local $l9504 i32) + (local $l9505 i32) + (local $l9506 i32) + (local $l9507 i32) + (local $l9508 i32) + (local $l9509 i32) + (local $l9510 i32) + (local $l9511 i32) + (local $l9512 i32) + (local $l9513 i32) + (local $l9514 i32) + (local $l9515 i32) + (local $l9516 i32) + (local $l9517 i32) + (local $l9518 i32) + (local $l9519 i32) + (local $l9520 i32) + (local $l9521 i32) + (local $l9522 i32) + (local $l9523 i32) + (local $l9524 i32) + (local $l9525 i32) + (local $l9526 i32) + (local $l9527 i32) + (local $l9528 i32) + (local $l9529 i32) + (local $l9530 i32) + (local $l9531 i32) + (local $l9532 i32) + (local $l9533 i32) + (local $l9534 i32) + (local $l9535 i32) + (local $l9536 i32) + (local $l9537 i32) + (local $l9538 i32) + (local $l9539 i32) + (local $l9540 i32) + (local $l9541 i32) + (local $l9542 i32) + (local $l9543 i32) + (local $l9544 i32) + (local $l9545 i32) + (local $l9546 i32) + (local $l9547 i32) + (local $l9548 i32) + (local $l9549 i32) + (local $l9550 i32) + (local $l9551 i32) + (local $l9552 i32) + (local $l9553 i32) + (local $l9554 i32) + (local $l9555 i32) + (local $l9556 i32) + (local $l9557 i32) + (local $l9558 i32) + (local $l9559 i32) + (local $l9560 i32) + (local $l9561 i32) + (local $l9562 i32) + (local $l9563 i32) + (local $l9564 i32) + (local $l9565 i32) + (local $l9566 i32) + (local $l9567 i32) + (local $l9568 i32) + (local $l9569 i32) + (local $l9570 i32) + (local $l9571 i32) + (local $l9572 i32) + (local $l9573 i32) + (local $l9574 i32) + (local $l9575 i32) + (local $l9576 i32) + (local $l9577 i32) + (local $l9578 i32) + (local $l9579 i32) + (local $l9580 i32) + (local $l9581 i32) + (local $l9582 i32) + (local $l9583 i32) + (local $l9584 i32) + (local $l9585 i32) + (local $l9586 i32) + (local $l9587 i32) + (local $l9588 i32) + (local $l9589 i32) + (local $l9590 i32) + (local $l9591 i32) + (local $l9592 i32) + (local $l9593 i32) + (local $l9594 i32) + (local $l9595 i32) + (local $l9596 i32) + (local $l9597 i32) + (local $l9598 i32) + (local $l9599 i32) + (local $l9600 i32) + (local $l9601 i32) + (local $l9602 i32) + (local $l9603 i32) + (local $l9604 i32) + (local $l9605 i32) + (local $l9606 i32) + (local $l9607 i32) + (local $l9608 i32) + (local $l9609 i32) + (local $l9610 i32) + (local $l9611 i32) + (local $l9612 i32) + (local $l9613 i32) + (local $l9614 i32) + (local $l9615 i32) + (local $l9616 i32) + (local $l9617 i32) + (local $l9618 i32) + (local $l9619 i32) + (local $l9620 i32) + (local $l9621 i32) + (local $l9622 i32) + (local $l9623 i32) + (local $l9624 i32) + (local $l9625 i32) + (local $l9626 i32) + (local $l9627 i32) + (local $l9628 i32) + (local $l9629 i32) + (local $l9630 i32) + (local $l9631 i32) + (local $l9632 i32) + (local $l9633 i32) + (local $l9634 i32) + (local $l9635 i32) + (local $l9636 i32) + (local $l9637 i32) + (local $l9638 i32) + (local $l9639 i32) + (local $l9640 i32) + (local $l9641 i32) + (local $l9642 i32) + (local $l9643 i32) + (local $l9644 i32) + (local $l9645 i32) + (local $l9646 i32) + (local $l9647 i32) + (local $l9648 i32) + (local $l9649 i32) + (local $l9650 i32) + (local $l9651 i32) + (local $l9652 i32) + (local $l9653 i32) + (local $l9654 i32) + (local $l9655 i32) + (local $l9656 i32) + (local $l9657 i32) + (local $l9658 i32) + (local $l9659 i32) + (local $l9660 i32) + (local $l9661 i32) + (local $l9662 i32) + (local $l9663 i32) + (local $l9664 i32) + (local $l9665 i32) + (local $l9666 i32) + (local $l9667 i32) + (local $l9668 i32) + (local $l9669 i32) + (local $l9670 i32) + (local $l9671 i32) + (local $l9672 i32) + (local $l9673 i32) + (local $l9674 i32) + (local $l9675 i32) + (local $l9676 i32) + (local $l9677 i32) + (local $l9678 i32) + (local $l9679 i32) + (local $l9680 i32) + (local $l9681 i32) + (local $l9682 i32) + (local $l9683 i32) + (local $l9684 i32) + (local $l9685 i32) + (local $l9686 i32) + (local $l9687 i32) + (local $l9688 i32) + (local $l9689 i32) + (local $l9690 i32) + (local $l9691 i32) + (local $l9692 i32) + (local $l9693 i32) + (local $l9694 i32) + (local $l9695 i32) + (local $l9696 i32) + (local $l9697 i32) + (local $l9698 i32) + (local $l9699 i32) + (local $l9700 i32) + (local $l9701 i32) + (local $l9702 i32) + (local $l9703 i32) + (local $l9704 i32) + (local $l9705 i32) + (local $l9706 i32) + (local $l9707 i32) + (local $l9708 i32) + (local $l9709 i32) + (local $l9710 i32) + (local $l9711 i32) + (local $l9712 i32) + (local $l9713 i32) + (local $l9714 i32) + (local $l9715 i32) + (local $l9716 i32) + (local $l9717 i32) + (local $l9718 i32) + (local $l9719 i32) + (local $l9720 i32) + (local $l9721 i32) + (local $l9722 i32) + (local $l9723 i32) + (local $l9724 i32) + (local $l9725 i32) + (local $l9726 i32) + (local $l9727 i32) + (local $l9728 i32) + (local $l9729 i32) + (local $l9730 i32) + (local $l9731 i32) + (local $l9732 i32) + (local $l9733 i32) + (local $l9734 i32) + (local $l9735 i32) + (local $l9736 i32) + (local $l9737 i32) + (local $l9738 i32) + (local $l9739 i32) + (local $l9740 i32) + (local $l9741 i32) + (local $l9742 i32) + (local $l9743 i32) + (local $l9744 i32) + (local $l9745 i32) + (local $l9746 i32) + (local $l9747 i32) + (local $l9748 i32) + (local $l9749 i32) + (local $l9750 i32) + (local $l9751 i32) + (local $l9752 i32) + (local $l9753 i32) + (local $l9754 i32) + (local $l9755 i32) + (local $l9756 i32) + (local $l9757 i32) + (local $l9758 i32) + (local $l9759 i32) + (local $l9760 i32) + (local $l9761 i32) + (local $l9762 i32) + (local $l9763 i32) + (local $l9764 i32) + (local $l9765 i32) + (local $l9766 i32) + (local $l9767 i32) + (local $l9768 i32) + (local $l9769 i32) + (local $l9770 i32) + (local $l9771 i32) + (local $l9772 i32) + (local $l9773 i32) + (local $l9774 i32) + (local $l9775 i32) + (local $l9776 i32) + (local $l9777 i32) + (local $l9778 i32) + (local $l9779 i32) + (local $l9780 i32) + (local $l9781 i32) + (local $l9782 i32) + (local $l9783 i32) + (local $l9784 i32) + (local $l9785 i32) + (local $l9786 i32) + (local $l9787 i32) + (local $l9788 i32) + (local $l9789 i32) + (local $l9790 i32) + (local $l9791 i32) + (local $l9792 i32) + (local $l9793 i32) + (local $l9794 i32) + (local $l9795 i32) + (local $l9796 i32) + (local $l9797 i32) + (local $l9798 i32) + (local $l9799 i32) + (local $l9800 i32) + (local $l9801 i32) + (local $l9802 i32) + (local $l9803 i32) + (local $l9804 i32) + (local $l9805 i32) + (local $l9806 i32) + (local $l9807 i32) + (local $l9808 i32) + (local $l9809 i32) + (local $l9810 i32) + (local $l9811 i32) + (local $l9812 i32) + (local $l9813 i32) + (local $l9814 i32) + (local $l9815 i32) + (local $l9816 i32) + (local $l9817 i32) + (local $l9818 i32) + (local $l9819 i32) + (local $l9820 i32) + (local $l9821 i32) + (local $l9822 i32) + (local $l9823 i32) + (local $l9824 i32) + (local $l9825 i32) + (local $l9826 i32) + (local $l9827 i32) + (local $l9828 i32) + (local $l9829 i32) + (local $l9830 i32) + (local $l9831 i32) + (local $l9832 i32) + (local $l9833 i32) + (local $l9834 i32) + (local $l9835 i32) + (local $l9836 i32) + (local $l9837 i32) + (local $l9838 i32) + (local $l9839 i32) + (local $l9840 i32) + (local $l9841 i32) + (local $l9842 i32) + (local $l9843 i32) + (local $l9844 i32) + (local $l9845 i32) + (local $l9846 i32) + (local $l9847 i32) + (local $l9848 i32) + (local $l9849 i32) + (local $l9850 i32) + (local $l9851 i32) + (local $l9852 i32) + (local $l9853 i32) + (local $l9854 i32) + (local $l9855 i32) + (local $l9856 i32) + (local $l9857 i32) + (local $l9858 i32) + (local $l9859 i32) + (local $l9860 i32) + (local $l9861 i32) + (local $l9862 i32) + (local $l9863 i32) + (local $l9864 i32) + (local $l9865 i32) + (local $l9866 i32) + (local $l9867 i32) + (local $l9868 i32) + (local $l9869 i32) + (local $l9870 i32) + (local $l9871 i32) + (local $l9872 i32) + (local $l9873 i32) + (local $l9874 i32) + (local $l9875 i32) + (local $l9876 i32) + (local $l9877 i32) + (local $l9878 i32) + (local $l9879 i32) + (local $l9880 i32) + (local $l9881 i32) + (local $l9882 i32) + (local $l9883 i32) + (local $l9884 i32) + (local $l9885 i32) + (local $l9886 i32) + (local $l9887 i32) + (local $l9888 i32) + (local $l9889 i32) + (local $l9890 i32) + (local $l9891 i32) + (local $l9892 i32) + (local $l9893 i32) + (local $l9894 i32) + (local $l9895 i32) + (local $l9896 i32) + (local $l9897 i32) + (local $l9898 i32) + (local $l9899 i32) + (local $l9900 i32) + (local $l9901 i32) + (local $l9902 i32) + (local $l9903 i32) + (local $l9904 i32) + (local $l9905 i32) + (local $l9906 i32) + (local $l9907 i32) + (local $l9908 i32) + (local $l9909 i32) + (local $l9910 i32) + (local $l9911 i32) + (local $l9912 i32) + (local $l9913 i32) + (local $l9914 i32) + (local $l9915 i32) + (local $l9916 i32) + (local $l9917 i32) + (local $l9918 i32) + (local $l9919 i32) + (local $l9920 i32) + (local $l9921 i32) + (local $l9922 i32) + (local $l9923 i32) + (local $l9924 i32) + (local $l9925 i32) + (local $l9926 i32) + (local $l9927 i32) + (local $l9928 i32) + (local $l9929 i32) + (local $l9930 i32) + (local $l9931 i32) + (local $l9932 i32) + (local $l9933 i32) + (local $l9934 i32) + (local $l9935 i32) + (local $l9936 i32) + (local $l9937 i32) + (local $l9938 i32) + (local $l9939 i32) + (local $l9940 i32) + (local $l9941 i32) + (local $l9942 i32) + (local $l9943 i32) + (local $l9944 i32) + (local $l9945 i32) + (local $l9946 i32) + (local $l9947 i32) + (local $l9948 i32) + (local $l9949 i32) + (local $l9950 i32) + (local $l9951 i32) + (local $l9952 i32) + (local $l9953 i32) + (local $l9954 i32) + (local $l9955 i32) + (local $l9956 i32) + (local $l9957 i32) + (local $l9958 i32) + (local $l9959 i32) + (local $l9960 i32) + (local $l9961 i32) + (local $l9962 i32) + (local $l9963 i32) + (local $l9964 i32) + (local $l9965 i32) + (local $l9966 i32) + (local $l9967 i32) + (local $l9968 i32) + (local $l9969 i32) + (local $l9970 i32) + (local $l9971 i32) + (local $l9972 i32) + (local $l9973 i32) + (local $l9974 i32) + (local $l9975 i32) + (local $l9976 i32) + (local $l9977 i32) + (local $l9978 i32) + (local $l9979 i32) + (local $l9980 i32) + (local $l9981 i32) + (local $l9982 i32) + (local $l9983 i32) + (local $l9984 i32) + (local $l9985 i32) + (local $l9986 i32) + (local $l9987 i32) + (local $l9988 i32) + (local $l9989 i32) + (local $l9990 i32) + (local $l9991 i32) + (local $l9992 i32) + (local $l9993 i32) + (local $l9994 i32) + (local $l9995 i32) + (local $l9996 i32) + (local $l9997 i32) + (local $l9998 i32) + (local $l9999 i32) + ;; Initialize locals as sum of previous two + local.get $p0 + local.get $p1 + i32.add + local.set $l2 + local.get $p1 + local.get $l2 + i32.add + local.set $l3 + local.get $l2 + local.get $l3 + i32.add + local.set $l4 + local.get $l3 + local.get $l4 + i32.add + local.set $l5 + local.get $l4 + local.get $l5 + i32.add + local.set $l6 + local.get $l5 + local.get $l6 + i32.add + local.set $l7 + local.get $l6 + local.get $l7 + i32.add + local.set $l8 + local.get $l7 + local.get $l8 + i32.add + local.set $l9 + local.get $l8 + local.get $l9 + i32.add + local.set $l10 + local.get $l9 + local.get $l10 + i32.add + local.set $l11 + local.get $l10 + local.get $l11 + i32.add + local.set $l12 + local.get $l11 + local.get $l12 + i32.add + local.set $l13 + local.get $l12 + local.get $l13 + i32.add + local.set $l14 + local.get $l13 + local.get $l14 + i32.add + local.set $l15 + local.get $l14 + local.get $l15 + i32.add + local.set $l16 + local.get $l15 + local.get $l16 + i32.add + local.set $l17 + local.get $l16 + local.get $l17 + i32.add + local.set $l18 + local.get $l17 + local.get $l18 + i32.add + local.set $l19 + local.get $l18 + local.get $l19 + i32.add + local.set $l20 + local.get $l19 + local.get $l20 + i32.add + local.set $l21 + local.get $l20 + local.get $l21 + i32.add + local.set $l22 + local.get $l21 + local.get $l22 + i32.add + local.set $l23 + local.get $l22 + local.get $l23 + i32.add + local.set $l24 + local.get $l23 + local.get $l24 + i32.add + local.set $l25 + local.get $l24 + local.get $l25 + i32.add + local.set $l26 + local.get $l25 + local.get $l26 + i32.add + local.set $l27 + local.get $l26 + local.get $l27 + i32.add + local.set $l28 + local.get $l27 + local.get $l28 + i32.add + local.set $l29 + local.get $l28 + local.get $l29 + i32.add + local.set $l30 + local.get $l29 + local.get $l30 + i32.add + local.set $l31 + local.get $l30 + local.get $l31 + i32.add + local.set $l32 + local.get $l31 + local.get $l32 + i32.add + local.set $l33 + local.get $l32 + local.get $l33 + i32.add + local.set $l34 + local.get $l33 + local.get $l34 + i32.add + local.set $l35 + local.get $l34 + local.get $l35 + i32.add + local.set $l36 + local.get $l35 + local.get $l36 + i32.add + local.set $l37 + local.get $l36 + local.get $l37 + i32.add + local.set $l38 + local.get $l37 + local.get $l38 + i32.add + local.set $l39 + local.get $l38 + local.get $l39 + i32.add + local.set $l40 + local.get $l39 + local.get $l40 + i32.add + local.set $l41 + local.get $l40 + local.get $l41 + i32.add + local.set $l42 + local.get $l41 + local.get $l42 + i32.add + local.set $l43 + local.get $l42 + local.get $l43 + i32.add + local.set $l44 + local.get $l43 + local.get $l44 + i32.add + local.set $l45 + local.get $l44 + local.get $l45 + i32.add + local.set $l46 + local.get $l45 + local.get $l46 + i32.add + local.set $l47 + local.get $l46 + local.get $l47 + i32.add + local.set $l48 + local.get $l47 + local.get $l48 + i32.add + local.set $l49 + local.get $l48 + local.get $l49 + i32.add + local.set $l50 + local.get $l49 + local.get $l50 + i32.add + local.set $l51 + local.get $l50 + local.get $l51 + i32.add + local.set $l52 + local.get $l51 + local.get $l52 + i32.add + local.set $l53 + local.get $l52 + local.get $l53 + i32.add + local.set $l54 + local.get $l53 + local.get $l54 + i32.add + local.set $l55 + local.get $l54 + local.get $l55 + i32.add + local.set $l56 + local.get $l55 + local.get $l56 + i32.add + local.set $l57 + local.get $l56 + local.get $l57 + i32.add + local.set $l58 + local.get $l57 + local.get $l58 + i32.add + local.set $l59 + local.get $l58 + local.get $l59 + i32.add + local.set $l60 + local.get $l59 + local.get $l60 + i32.add + local.set $l61 + local.get $l60 + local.get $l61 + i32.add + local.set $l62 + local.get $l61 + local.get $l62 + i32.add + local.set $l63 + local.get $l62 + local.get $l63 + i32.add + local.set $l64 + local.get $l63 + local.get $l64 + i32.add + local.set $l65 + local.get $l64 + local.get $l65 + i32.add + local.set $l66 + local.get $l65 + local.get $l66 + i32.add + local.set $l67 + local.get $l66 + local.get $l67 + i32.add + local.set $l68 + local.get $l67 + local.get $l68 + i32.add + local.set $l69 + local.get $l68 + local.get $l69 + i32.add + local.set $l70 + local.get $l69 + local.get $l70 + i32.add + local.set $l71 + local.get $l70 + local.get $l71 + i32.add + local.set $l72 + local.get $l71 + local.get $l72 + i32.add + local.set $l73 + local.get $l72 + local.get $l73 + i32.add + local.set $l74 + local.get $l73 + local.get $l74 + i32.add + local.set $l75 + local.get $l74 + local.get $l75 + i32.add + local.set $l76 + local.get $l75 + local.get $l76 + i32.add + local.set $l77 + local.get $l76 + local.get $l77 + i32.add + local.set $l78 + local.get $l77 + local.get $l78 + i32.add + local.set $l79 + local.get $l78 + local.get $l79 + i32.add + local.set $l80 + local.get $l79 + local.get $l80 + i32.add + local.set $l81 + local.get $l80 + local.get $l81 + i32.add + local.set $l82 + local.get $l81 + local.get $l82 + i32.add + local.set $l83 + local.get $l82 + local.get $l83 + i32.add + local.set $l84 + local.get $l83 + local.get $l84 + i32.add + local.set $l85 + local.get $l84 + local.get $l85 + i32.add + local.set $l86 + local.get $l85 + local.get $l86 + i32.add + local.set $l87 + local.get $l86 + local.get $l87 + i32.add + local.set $l88 + local.get $l87 + local.get $l88 + i32.add + local.set $l89 + local.get $l88 + local.get $l89 + i32.add + local.set $l90 + local.get $l89 + local.get $l90 + i32.add + local.set $l91 + local.get $l90 + local.get $l91 + i32.add + local.set $l92 + local.get $l91 + local.get $l92 + i32.add + local.set $l93 + local.get $l92 + local.get $l93 + i32.add + local.set $l94 + local.get $l93 + local.get $l94 + i32.add + local.set $l95 + local.get $l94 + local.get $l95 + i32.add + local.set $l96 + local.get $l95 + local.get $l96 + i32.add + local.set $l97 + local.get $l96 + local.get $l97 + i32.add + local.set $l98 + local.get $l97 + local.get $l98 + i32.add + local.set $l99 + local.get $l98 + local.get $l99 + i32.add + local.set $l100 + local.get $l99 + local.get $l100 + i32.add + local.set $l101 + local.get $l100 + local.get $l101 + i32.add + local.set $l102 + local.get $l101 + local.get $l102 + i32.add + local.set $l103 + local.get $l102 + local.get $l103 + i32.add + local.set $l104 + local.get $l103 + local.get $l104 + i32.add + local.set $l105 + local.get $l104 + local.get $l105 + i32.add + local.set $l106 + local.get $l105 + local.get $l106 + i32.add + local.set $l107 + local.get $l106 + local.get $l107 + i32.add + local.set $l108 + local.get $l107 + local.get $l108 + i32.add + local.set $l109 + local.get $l108 + local.get $l109 + i32.add + local.set $l110 + local.get $l109 + local.get $l110 + i32.add + local.set $l111 + local.get $l110 + local.get $l111 + i32.add + local.set $l112 + local.get $l111 + local.get $l112 + i32.add + local.set $l113 + local.get $l112 + local.get $l113 + i32.add + local.set $l114 + local.get $l113 + local.get $l114 + i32.add + local.set $l115 + local.get $l114 + local.get $l115 + i32.add + local.set $l116 + local.get $l115 + local.get $l116 + i32.add + local.set $l117 + local.get $l116 + local.get $l117 + i32.add + local.set $l118 + local.get $l117 + local.get $l118 + i32.add + local.set $l119 + local.get $l118 + local.get $l119 + i32.add + local.set $l120 + local.get $l119 + local.get $l120 + i32.add + local.set $l121 + local.get $l120 + local.get $l121 + i32.add + local.set $l122 + local.get $l121 + local.get $l122 + i32.add + local.set $l123 + local.get $l122 + local.get $l123 + i32.add + local.set $l124 + local.get $l123 + local.get $l124 + i32.add + local.set $l125 + local.get $l124 + local.get $l125 + i32.add + local.set $l126 + local.get $l125 + local.get $l126 + i32.add + local.set $l127 + local.get $l126 + local.get $l127 + i32.add + local.set $l128 + local.get $l127 + local.get $l128 + i32.add + local.set $l129 + local.get $l128 + local.get $l129 + i32.add + local.set $l130 + local.get $l129 + local.get $l130 + i32.add + local.set $l131 + local.get $l130 + local.get $l131 + i32.add + local.set $l132 + local.get $l131 + local.get $l132 + i32.add + local.set $l133 + local.get $l132 + local.get $l133 + i32.add + local.set $l134 + local.get $l133 + local.get $l134 + i32.add + local.set $l135 + local.get $l134 + local.get $l135 + i32.add + local.set $l136 + local.get $l135 + local.get $l136 + i32.add + local.set $l137 + local.get $l136 + local.get $l137 + i32.add + local.set $l138 + local.get $l137 + local.get $l138 + i32.add + local.set $l139 + local.get $l138 + local.get $l139 + i32.add + local.set $l140 + local.get $l139 + local.get $l140 + i32.add + local.set $l141 + local.get $l140 + local.get $l141 + i32.add + local.set $l142 + local.get $l141 + local.get $l142 + i32.add + local.set $l143 + local.get $l142 + local.get $l143 + i32.add + local.set $l144 + local.get $l143 + local.get $l144 + i32.add + local.set $l145 + local.get $l144 + local.get $l145 + i32.add + local.set $l146 + local.get $l145 + local.get $l146 + i32.add + local.set $l147 + local.get $l146 + local.get $l147 + i32.add + local.set $l148 + local.get $l147 + local.get $l148 + i32.add + local.set $l149 + local.get $l148 + local.get $l149 + i32.add + local.set $l150 + local.get $l149 + local.get $l150 + i32.add + local.set $l151 + local.get $l150 + local.get $l151 + i32.add + local.set $l152 + local.get $l151 + local.get $l152 + i32.add + local.set $l153 + local.get $l152 + local.get $l153 + i32.add + local.set $l154 + local.get $l153 + local.get $l154 + i32.add + local.set $l155 + local.get $l154 + local.get $l155 + i32.add + local.set $l156 + local.get $l155 + local.get $l156 + i32.add + local.set $l157 + local.get $l156 + local.get $l157 + i32.add + local.set $l158 + local.get $l157 + local.get $l158 + i32.add + local.set $l159 + local.get $l158 + local.get $l159 + i32.add + local.set $l160 + local.get $l159 + local.get $l160 + i32.add + local.set $l161 + local.get $l160 + local.get $l161 + i32.add + local.set $l162 + local.get $l161 + local.get $l162 + i32.add + local.set $l163 + local.get $l162 + local.get $l163 + i32.add + local.set $l164 + local.get $l163 + local.get $l164 + i32.add + local.set $l165 + local.get $l164 + local.get $l165 + i32.add + local.set $l166 + local.get $l165 + local.get $l166 + i32.add + local.set $l167 + local.get $l166 + local.get $l167 + i32.add + local.set $l168 + local.get $l167 + local.get $l168 + i32.add + local.set $l169 + local.get $l168 + local.get $l169 + i32.add + local.set $l170 + local.get $l169 + local.get $l170 + i32.add + local.set $l171 + local.get $l170 + local.get $l171 + i32.add + local.set $l172 + local.get $l171 + local.get $l172 + i32.add + local.set $l173 + local.get $l172 + local.get $l173 + i32.add + local.set $l174 + local.get $l173 + local.get $l174 + i32.add + local.set $l175 + local.get $l174 + local.get $l175 + i32.add + local.set $l176 + local.get $l175 + local.get $l176 + i32.add + local.set $l177 + local.get $l176 + local.get $l177 + i32.add + local.set $l178 + local.get $l177 + local.get $l178 + i32.add + local.set $l179 + local.get $l178 + local.get $l179 + i32.add + local.set $l180 + local.get $l179 + local.get $l180 + i32.add + local.set $l181 + local.get $l180 + local.get $l181 + i32.add + local.set $l182 + local.get $l181 + local.get $l182 + i32.add + local.set $l183 + local.get $l182 + local.get $l183 + i32.add + local.set $l184 + local.get $l183 + local.get $l184 + i32.add + local.set $l185 + local.get $l184 + local.get $l185 + i32.add + local.set $l186 + local.get $l185 + local.get $l186 + i32.add + local.set $l187 + local.get $l186 + local.get $l187 + i32.add + local.set $l188 + local.get $l187 + local.get $l188 + i32.add + local.set $l189 + local.get $l188 + local.get $l189 + i32.add + local.set $l190 + local.get $l189 + local.get $l190 + i32.add + local.set $l191 + local.get $l190 + local.get $l191 + i32.add + local.set $l192 + local.get $l191 + local.get $l192 + i32.add + local.set $l193 + local.get $l192 + local.get $l193 + i32.add + local.set $l194 + local.get $l193 + local.get $l194 + i32.add + local.set $l195 + local.get $l194 + local.get $l195 + i32.add + local.set $l196 + local.get $l195 + local.get $l196 + i32.add + local.set $l197 + local.get $l196 + local.get $l197 + i32.add + local.set $l198 + local.get $l197 + local.get $l198 + i32.add + local.set $l199 + local.get $l198 + local.get $l199 + i32.add + local.set $l200 + local.get $l199 + local.get $l200 + i32.add + local.set $l201 + local.get $l200 + local.get $l201 + i32.add + local.set $l202 + local.get $l201 + local.get $l202 + i32.add + local.set $l203 + local.get $l202 + local.get $l203 + i32.add + local.set $l204 + local.get $l203 + local.get $l204 + i32.add + local.set $l205 + local.get $l204 + local.get $l205 + i32.add + local.set $l206 + local.get $l205 + local.get $l206 + i32.add + local.set $l207 + local.get $l206 + local.get $l207 + i32.add + local.set $l208 + local.get $l207 + local.get $l208 + i32.add + local.set $l209 + local.get $l208 + local.get $l209 + i32.add + local.set $l210 + local.get $l209 + local.get $l210 + i32.add + local.set $l211 + local.get $l210 + local.get $l211 + i32.add + local.set $l212 + local.get $l211 + local.get $l212 + i32.add + local.set $l213 + local.get $l212 + local.get $l213 + i32.add + local.set $l214 + local.get $l213 + local.get $l214 + i32.add + local.set $l215 + local.get $l214 + local.get $l215 + i32.add + local.set $l216 + local.get $l215 + local.get $l216 + i32.add + local.set $l217 + local.get $l216 + local.get $l217 + i32.add + local.set $l218 + local.get $l217 + local.get $l218 + i32.add + local.set $l219 + local.get $l218 + local.get $l219 + i32.add + local.set $l220 + local.get $l219 + local.get $l220 + i32.add + local.set $l221 + local.get $l220 + local.get $l221 + i32.add + local.set $l222 + local.get $l221 + local.get $l222 + i32.add + local.set $l223 + local.get $l222 + local.get $l223 + i32.add + local.set $l224 + local.get $l223 + local.get $l224 + i32.add + local.set $l225 + local.get $l224 + local.get $l225 + i32.add + local.set $l226 + local.get $l225 + local.get $l226 + i32.add + local.set $l227 + local.get $l226 + local.get $l227 + i32.add + local.set $l228 + local.get $l227 + local.get $l228 + i32.add + local.set $l229 + local.get $l228 + local.get $l229 + i32.add + local.set $l230 + local.get $l229 + local.get $l230 + i32.add + local.set $l231 + local.get $l230 + local.get $l231 + i32.add + local.set $l232 + local.get $l231 + local.get $l232 + i32.add + local.set $l233 + local.get $l232 + local.get $l233 + i32.add + local.set $l234 + local.get $l233 + local.get $l234 + i32.add + local.set $l235 + local.get $l234 + local.get $l235 + i32.add + local.set $l236 + local.get $l235 + local.get $l236 + i32.add + local.set $l237 + local.get $l236 + local.get $l237 + i32.add + local.set $l238 + local.get $l237 + local.get $l238 + i32.add + local.set $l239 + local.get $l238 + local.get $l239 + i32.add + local.set $l240 + local.get $l239 + local.get $l240 + i32.add + local.set $l241 + local.get $l240 + local.get $l241 + i32.add + local.set $l242 + local.get $l241 + local.get $l242 + i32.add + local.set $l243 + local.get $l242 + local.get $l243 + i32.add + local.set $l244 + local.get $l243 + local.get $l244 + i32.add + local.set $l245 + local.get $l244 + local.get $l245 + i32.add + local.set $l246 + local.get $l245 + local.get $l246 + i32.add + local.set $l247 + local.get $l246 + local.get $l247 + i32.add + local.set $l248 + local.get $l247 + local.get $l248 + i32.add + local.set $l249 + local.get $l248 + local.get $l249 + i32.add + local.set $l250 + local.get $l249 + local.get $l250 + i32.add + local.set $l251 + local.get $l250 + local.get $l251 + i32.add + local.set $l252 + local.get $l251 + local.get $l252 + i32.add + local.set $l253 + local.get $l252 + local.get $l253 + i32.add + local.set $l254 + local.get $l253 + local.get $l254 + i32.add + local.set $l255 + local.get $l254 + local.get $l255 + i32.add + local.set $l256 + local.get $l255 + local.get $l256 + i32.add + local.set $l257 + local.get $l256 + local.get $l257 + i32.add + local.set $l258 + local.get $l257 + local.get $l258 + i32.add + local.set $l259 + local.get $l258 + local.get $l259 + i32.add + local.set $l260 + local.get $l259 + local.get $l260 + i32.add + local.set $l261 + local.get $l260 + local.get $l261 + i32.add + local.set $l262 + local.get $l261 + local.get $l262 + i32.add + local.set $l263 + local.get $l262 + local.get $l263 + i32.add + local.set $l264 + local.get $l263 + local.get $l264 + i32.add + local.set $l265 + local.get $l264 + local.get $l265 + i32.add + local.set $l266 + local.get $l265 + local.get $l266 + i32.add + local.set $l267 + local.get $l266 + local.get $l267 + i32.add + local.set $l268 + local.get $l267 + local.get $l268 + i32.add + local.set $l269 + local.get $l268 + local.get $l269 + i32.add + local.set $l270 + local.get $l269 + local.get $l270 + i32.add + local.set $l271 + local.get $l270 + local.get $l271 + i32.add + local.set $l272 + local.get $l271 + local.get $l272 + i32.add + local.set $l273 + local.get $l272 + local.get $l273 + i32.add + local.set $l274 + local.get $l273 + local.get $l274 + i32.add + local.set $l275 + local.get $l274 + local.get $l275 + i32.add + local.set $l276 + local.get $l275 + local.get $l276 + i32.add + local.set $l277 + local.get $l276 + local.get $l277 + i32.add + local.set $l278 + local.get $l277 + local.get $l278 + i32.add + local.set $l279 + local.get $l278 + local.get $l279 + i32.add + local.set $l280 + local.get $l279 + local.get $l280 + i32.add + local.set $l281 + local.get $l280 + local.get $l281 + i32.add + local.set $l282 + local.get $l281 + local.get $l282 + i32.add + local.set $l283 + local.get $l282 + local.get $l283 + i32.add + local.set $l284 + local.get $l283 + local.get $l284 + i32.add + local.set $l285 + local.get $l284 + local.get $l285 + i32.add + local.set $l286 + local.get $l285 + local.get $l286 + i32.add + local.set $l287 + local.get $l286 + local.get $l287 + i32.add + local.set $l288 + local.get $l287 + local.get $l288 + i32.add + local.set $l289 + local.get $l288 + local.get $l289 + i32.add + local.set $l290 + local.get $l289 + local.get $l290 + i32.add + local.set $l291 + local.get $l290 + local.get $l291 + i32.add + local.set $l292 + local.get $l291 + local.get $l292 + i32.add + local.set $l293 + local.get $l292 + local.get $l293 + i32.add + local.set $l294 + local.get $l293 + local.get $l294 + i32.add + local.set $l295 + local.get $l294 + local.get $l295 + i32.add + local.set $l296 + local.get $l295 + local.get $l296 + i32.add + local.set $l297 + local.get $l296 + local.get $l297 + i32.add + local.set $l298 + local.get $l297 + local.get $l298 + i32.add + local.set $l299 + local.get $l298 + local.get $l299 + i32.add + local.set $l300 + local.get $l299 + local.get $l300 + i32.add + local.set $l301 + local.get $l300 + local.get $l301 + i32.add + local.set $l302 + local.get $l301 + local.get $l302 + i32.add + local.set $l303 + local.get $l302 + local.get $l303 + i32.add + local.set $l304 + local.get $l303 + local.get $l304 + i32.add + local.set $l305 + local.get $l304 + local.get $l305 + i32.add + local.set $l306 + local.get $l305 + local.get $l306 + i32.add + local.set $l307 + local.get $l306 + local.get $l307 + i32.add + local.set $l308 + local.get $l307 + local.get $l308 + i32.add + local.set $l309 + local.get $l308 + local.get $l309 + i32.add + local.set $l310 + local.get $l309 + local.get $l310 + i32.add + local.set $l311 + local.get $l310 + local.get $l311 + i32.add + local.set $l312 + local.get $l311 + local.get $l312 + i32.add + local.set $l313 + local.get $l312 + local.get $l313 + i32.add + local.set $l314 + local.get $l313 + local.get $l314 + i32.add + local.set $l315 + local.get $l314 + local.get $l315 + i32.add + local.set $l316 + local.get $l315 + local.get $l316 + i32.add + local.set $l317 + local.get $l316 + local.get $l317 + i32.add + local.set $l318 + local.get $l317 + local.get $l318 + i32.add + local.set $l319 + local.get $l318 + local.get $l319 + i32.add + local.set $l320 + local.get $l319 + local.get $l320 + i32.add + local.set $l321 + local.get $l320 + local.get $l321 + i32.add + local.set $l322 + local.get $l321 + local.get $l322 + i32.add + local.set $l323 + local.get $l322 + local.get $l323 + i32.add + local.set $l324 + local.get $l323 + local.get $l324 + i32.add + local.set $l325 + local.get $l324 + local.get $l325 + i32.add + local.set $l326 + local.get $l325 + local.get $l326 + i32.add + local.set $l327 + local.get $l326 + local.get $l327 + i32.add + local.set $l328 + local.get $l327 + local.get $l328 + i32.add + local.set $l329 + local.get $l328 + local.get $l329 + i32.add + local.set $l330 + local.get $l329 + local.get $l330 + i32.add + local.set $l331 + local.get $l330 + local.get $l331 + i32.add + local.set $l332 + local.get $l331 + local.get $l332 + i32.add + local.set $l333 + local.get $l332 + local.get $l333 + i32.add + local.set $l334 + local.get $l333 + local.get $l334 + i32.add + local.set $l335 + local.get $l334 + local.get $l335 + i32.add + local.set $l336 + local.get $l335 + local.get $l336 + i32.add + local.set $l337 + local.get $l336 + local.get $l337 + i32.add + local.set $l338 + local.get $l337 + local.get $l338 + i32.add + local.set $l339 + local.get $l338 + local.get $l339 + i32.add + local.set $l340 + local.get $l339 + local.get $l340 + i32.add + local.set $l341 + local.get $l340 + local.get $l341 + i32.add + local.set $l342 + local.get $l341 + local.get $l342 + i32.add + local.set $l343 + local.get $l342 + local.get $l343 + i32.add + local.set $l344 + local.get $l343 + local.get $l344 + i32.add + local.set $l345 + local.get $l344 + local.get $l345 + i32.add + local.set $l346 + local.get $l345 + local.get $l346 + i32.add + local.set $l347 + local.get $l346 + local.get $l347 + i32.add + local.set $l348 + local.get $l347 + local.get $l348 + i32.add + local.set $l349 + local.get $l348 + local.get $l349 + i32.add + local.set $l350 + local.get $l349 + local.get $l350 + i32.add + local.set $l351 + local.get $l350 + local.get $l351 + i32.add + local.set $l352 + local.get $l351 + local.get $l352 + i32.add + local.set $l353 + local.get $l352 + local.get $l353 + i32.add + local.set $l354 + local.get $l353 + local.get $l354 + i32.add + local.set $l355 + local.get $l354 + local.get $l355 + i32.add + local.set $l356 + local.get $l355 + local.get $l356 + i32.add + local.set $l357 + local.get $l356 + local.get $l357 + i32.add + local.set $l358 + local.get $l357 + local.get $l358 + i32.add + local.set $l359 + local.get $l358 + local.get $l359 + i32.add + local.set $l360 + local.get $l359 + local.get $l360 + i32.add + local.set $l361 + local.get $l360 + local.get $l361 + i32.add + local.set $l362 + local.get $l361 + local.get $l362 + i32.add + local.set $l363 + local.get $l362 + local.get $l363 + i32.add + local.set $l364 + local.get $l363 + local.get $l364 + i32.add + local.set $l365 + local.get $l364 + local.get $l365 + i32.add + local.set $l366 + local.get $l365 + local.get $l366 + i32.add + local.set $l367 + local.get $l366 + local.get $l367 + i32.add + local.set $l368 + local.get $l367 + local.get $l368 + i32.add + local.set $l369 + local.get $l368 + local.get $l369 + i32.add + local.set $l370 + local.get $l369 + local.get $l370 + i32.add + local.set $l371 + local.get $l370 + local.get $l371 + i32.add + local.set $l372 + local.get $l371 + local.get $l372 + i32.add + local.set $l373 + local.get $l372 + local.get $l373 + i32.add + local.set $l374 + local.get $l373 + local.get $l374 + i32.add + local.set $l375 + local.get $l374 + local.get $l375 + i32.add + local.set $l376 + local.get $l375 + local.get $l376 + i32.add + local.set $l377 + local.get $l376 + local.get $l377 + i32.add + local.set $l378 + local.get $l377 + local.get $l378 + i32.add + local.set $l379 + local.get $l378 + local.get $l379 + i32.add + local.set $l380 + local.get $l379 + local.get $l380 + i32.add + local.set $l381 + local.get $l380 + local.get $l381 + i32.add + local.set $l382 + local.get $l381 + local.get $l382 + i32.add + local.set $l383 + local.get $l382 + local.get $l383 + i32.add + local.set $l384 + local.get $l383 + local.get $l384 + i32.add + local.set $l385 + local.get $l384 + local.get $l385 + i32.add + local.set $l386 + local.get $l385 + local.get $l386 + i32.add + local.set $l387 + local.get $l386 + local.get $l387 + i32.add + local.set $l388 + local.get $l387 + local.get $l388 + i32.add + local.set $l389 + local.get $l388 + local.get $l389 + i32.add + local.set $l390 + local.get $l389 + local.get $l390 + i32.add + local.set $l391 + local.get $l390 + local.get $l391 + i32.add + local.set $l392 + local.get $l391 + local.get $l392 + i32.add + local.set $l393 + local.get $l392 + local.get $l393 + i32.add + local.set $l394 + local.get $l393 + local.get $l394 + i32.add + local.set $l395 + local.get $l394 + local.get $l395 + i32.add + local.set $l396 + local.get $l395 + local.get $l396 + i32.add + local.set $l397 + local.get $l396 + local.get $l397 + i32.add + local.set $l398 + local.get $l397 + local.get $l398 + i32.add + local.set $l399 + local.get $l398 + local.get $l399 + i32.add + local.set $l400 + local.get $l399 + local.get $l400 + i32.add + local.set $l401 + local.get $l400 + local.get $l401 + i32.add + local.set $l402 + local.get $l401 + local.get $l402 + i32.add + local.set $l403 + local.get $l402 + local.get $l403 + i32.add + local.set $l404 + local.get $l403 + local.get $l404 + i32.add + local.set $l405 + local.get $l404 + local.get $l405 + i32.add + local.set $l406 + local.get $l405 + local.get $l406 + i32.add + local.set $l407 + local.get $l406 + local.get $l407 + i32.add + local.set $l408 + local.get $l407 + local.get $l408 + i32.add + local.set $l409 + local.get $l408 + local.get $l409 + i32.add + local.set $l410 + local.get $l409 + local.get $l410 + i32.add + local.set $l411 + local.get $l410 + local.get $l411 + i32.add + local.set $l412 + local.get $l411 + local.get $l412 + i32.add + local.set $l413 + local.get $l412 + local.get $l413 + i32.add + local.set $l414 + local.get $l413 + local.get $l414 + i32.add + local.set $l415 + local.get $l414 + local.get $l415 + i32.add + local.set $l416 + local.get $l415 + local.get $l416 + i32.add + local.set $l417 + local.get $l416 + local.get $l417 + i32.add + local.set $l418 + local.get $l417 + local.get $l418 + i32.add + local.set $l419 + local.get $l418 + local.get $l419 + i32.add + local.set $l420 + local.get $l419 + local.get $l420 + i32.add + local.set $l421 + local.get $l420 + local.get $l421 + i32.add + local.set $l422 + local.get $l421 + local.get $l422 + i32.add + local.set $l423 + local.get $l422 + local.get $l423 + i32.add + local.set $l424 + local.get $l423 + local.get $l424 + i32.add + local.set $l425 + local.get $l424 + local.get $l425 + i32.add + local.set $l426 + local.get $l425 + local.get $l426 + i32.add + local.set $l427 + local.get $l426 + local.get $l427 + i32.add + local.set $l428 + local.get $l427 + local.get $l428 + i32.add + local.set $l429 + local.get $l428 + local.get $l429 + i32.add + local.set $l430 + local.get $l429 + local.get $l430 + i32.add + local.set $l431 + local.get $l430 + local.get $l431 + i32.add + local.set $l432 + local.get $l431 + local.get $l432 + i32.add + local.set $l433 + local.get $l432 + local.get $l433 + i32.add + local.set $l434 + local.get $l433 + local.get $l434 + i32.add + local.set $l435 + local.get $l434 + local.get $l435 + i32.add + local.set $l436 + local.get $l435 + local.get $l436 + i32.add + local.set $l437 + local.get $l436 + local.get $l437 + i32.add + local.set $l438 + local.get $l437 + local.get $l438 + i32.add + local.set $l439 + local.get $l438 + local.get $l439 + i32.add + local.set $l440 + local.get $l439 + local.get $l440 + i32.add + local.set $l441 + local.get $l440 + local.get $l441 + i32.add + local.set $l442 + local.get $l441 + local.get $l442 + i32.add + local.set $l443 + local.get $l442 + local.get $l443 + i32.add + local.set $l444 + local.get $l443 + local.get $l444 + i32.add + local.set $l445 + local.get $l444 + local.get $l445 + i32.add + local.set $l446 + local.get $l445 + local.get $l446 + i32.add + local.set $l447 + local.get $l446 + local.get $l447 + i32.add + local.set $l448 + local.get $l447 + local.get $l448 + i32.add + local.set $l449 + local.get $l448 + local.get $l449 + i32.add + local.set $l450 + local.get $l449 + local.get $l450 + i32.add + local.set $l451 + local.get $l450 + local.get $l451 + i32.add + local.set $l452 + local.get $l451 + local.get $l452 + i32.add + local.set $l453 + local.get $l452 + local.get $l453 + i32.add + local.set $l454 + local.get $l453 + local.get $l454 + i32.add + local.set $l455 + local.get $l454 + local.get $l455 + i32.add + local.set $l456 + local.get $l455 + local.get $l456 + i32.add + local.set $l457 + local.get $l456 + local.get $l457 + i32.add + local.set $l458 + local.get $l457 + local.get $l458 + i32.add + local.set $l459 + local.get $l458 + local.get $l459 + i32.add + local.set $l460 + local.get $l459 + local.get $l460 + i32.add + local.set $l461 + local.get $l460 + local.get $l461 + i32.add + local.set $l462 + local.get $l461 + local.get $l462 + i32.add + local.set $l463 + local.get $l462 + local.get $l463 + i32.add + local.set $l464 + local.get $l463 + local.get $l464 + i32.add + local.set $l465 + local.get $l464 + local.get $l465 + i32.add + local.set $l466 + local.get $l465 + local.get $l466 + i32.add + local.set $l467 + local.get $l466 + local.get $l467 + i32.add + local.set $l468 + local.get $l467 + local.get $l468 + i32.add + local.set $l469 + local.get $l468 + local.get $l469 + i32.add + local.set $l470 + local.get $l469 + local.get $l470 + i32.add + local.set $l471 + local.get $l470 + local.get $l471 + i32.add + local.set $l472 + local.get $l471 + local.get $l472 + i32.add + local.set $l473 + local.get $l472 + local.get $l473 + i32.add + local.set $l474 + local.get $l473 + local.get $l474 + i32.add + local.set $l475 + local.get $l474 + local.get $l475 + i32.add + local.set $l476 + local.get $l475 + local.get $l476 + i32.add + local.set $l477 + local.get $l476 + local.get $l477 + i32.add + local.set $l478 + local.get $l477 + local.get $l478 + i32.add + local.set $l479 + local.get $l478 + local.get $l479 + i32.add + local.set $l480 + local.get $l479 + local.get $l480 + i32.add + local.set $l481 + local.get $l480 + local.get $l481 + i32.add + local.set $l482 + local.get $l481 + local.get $l482 + i32.add + local.set $l483 + local.get $l482 + local.get $l483 + i32.add + local.set $l484 + local.get $l483 + local.get $l484 + i32.add + local.set $l485 + local.get $l484 + local.get $l485 + i32.add + local.set $l486 + local.get $l485 + local.get $l486 + i32.add + local.set $l487 + local.get $l486 + local.get $l487 + i32.add + local.set $l488 + local.get $l487 + local.get $l488 + i32.add + local.set $l489 + local.get $l488 + local.get $l489 + i32.add + local.set $l490 + local.get $l489 + local.get $l490 + i32.add + local.set $l491 + local.get $l490 + local.get $l491 + i32.add + local.set $l492 + local.get $l491 + local.get $l492 + i32.add + local.set $l493 + local.get $l492 + local.get $l493 + i32.add + local.set $l494 + local.get $l493 + local.get $l494 + i32.add + local.set $l495 + local.get $l494 + local.get $l495 + i32.add + local.set $l496 + local.get $l495 + local.get $l496 + i32.add + local.set $l497 + local.get $l496 + local.get $l497 + i32.add + local.set $l498 + local.get $l497 + local.get $l498 + i32.add + local.set $l499 + local.get $l498 + local.get $l499 + i32.add + local.set $l500 + local.get $l499 + local.get $l500 + i32.add + local.set $l501 + local.get $l500 + local.get $l501 + i32.add + local.set $l502 + local.get $l501 + local.get $l502 + i32.add + local.set $l503 + local.get $l502 + local.get $l503 + i32.add + local.set $l504 + local.get $l503 + local.get $l504 + i32.add + local.set $l505 + local.get $l504 + local.get $l505 + i32.add + local.set $l506 + local.get $l505 + local.get $l506 + i32.add + local.set $l507 + local.get $l506 + local.get $l507 + i32.add + local.set $l508 + local.get $l507 + local.get $l508 + i32.add + local.set $l509 + local.get $l508 + local.get $l509 + i32.add + local.set $l510 + local.get $l509 + local.get $l510 + i32.add + local.set $l511 + local.get $l510 + local.get $l511 + i32.add + local.set $l512 + local.get $l511 + local.get $l512 + i32.add + local.set $l513 + local.get $l512 + local.get $l513 + i32.add + local.set $l514 + local.get $l513 + local.get $l514 + i32.add + local.set $l515 + local.get $l514 + local.get $l515 + i32.add + local.set $l516 + local.get $l515 + local.get $l516 + i32.add + local.set $l517 + local.get $l516 + local.get $l517 + i32.add + local.set $l518 + local.get $l517 + local.get $l518 + i32.add + local.set $l519 + local.get $l518 + local.get $l519 + i32.add + local.set $l520 + local.get $l519 + local.get $l520 + i32.add + local.set $l521 + local.get $l520 + local.get $l521 + i32.add + local.set $l522 + local.get $l521 + local.get $l522 + i32.add + local.set $l523 + local.get $l522 + local.get $l523 + i32.add + local.set $l524 + local.get $l523 + local.get $l524 + i32.add + local.set $l525 + local.get $l524 + local.get $l525 + i32.add + local.set $l526 + local.get $l525 + local.get $l526 + i32.add + local.set $l527 + local.get $l526 + local.get $l527 + i32.add + local.set $l528 + local.get $l527 + local.get $l528 + i32.add + local.set $l529 + local.get $l528 + local.get $l529 + i32.add + local.set $l530 + local.get $l529 + local.get $l530 + i32.add + local.set $l531 + local.get $l530 + local.get $l531 + i32.add + local.set $l532 + local.get $l531 + local.get $l532 + i32.add + local.set $l533 + local.get $l532 + local.get $l533 + i32.add + local.set $l534 + local.get $l533 + local.get $l534 + i32.add + local.set $l535 + local.get $l534 + local.get $l535 + i32.add + local.set $l536 + local.get $l535 + local.get $l536 + i32.add + local.set $l537 + local.get $l536 + local.get $l537 + i32.add + local.set $l538 + local.get $l537 + local.get $l538 + i32.add + local.set $l539 + local.get $l538 + local.get $l539 + i32.add + local.set $l540 + local.get $l539 + local.get $l540 + i32.add + local.set $l541 + local.get $l540 + local.get $l541 + i32.add + local.set $l542 + local.get $l541 + local.get $l542 + i32.add + local.set $l543 + local.get $l542 + local.get $l543 + i32.add + local.set $l544 + local.get $l543 + local.get $l544 + i32.add + local.set $l545 + local.get $l544 + local.get $l545 + i32.add + local.set $l546 + local.get $l545 + local.get $l546 + i32.add + local.set $l547 + local.get $l546 + local.get $l547 + i32.add + local.set $l548 + local.get $l547 + local.get $l548 + i32.add + local.set $l549 + local.get $l548 + local.get $l549 + i32.add + local.set $l550 + local.get $l549 + local.get $l550 + i32.add + local.set $l551 + local.get $l550 + local.get $l551 + i32.add + local.set $l552 + local.get $l551 + local.get $l552 + i32.add + local.set $l553 + local.get $l552 + local.get $l553 + i32.add + local.set $l554 + local.get $l553 + local.get $l554 + i32.add + local.set $l555 + local.get $l554 + local.get $l555 + i32.add + local.set $l556 + local.get $l555 + local.get $l556 + i32.add + local.set $l557 + local.get $l556 + local.get $l557 + i32.add + local.set $l558 + local.get $l557 + local.get $l558 + i32.add + local.set $l559 + local.get $l558 + local.get $l559 + i32.add + local.set $l560 + local.get $l559 + local.get $l560 + i32.add + local.set $l561 + local.get $l560 + local.get $l561 + i32.add + local.set $l562 + local.get $l561 + local.get $l562 + i32.add + local.set $l563 + local.get $l562 + local.get $l563 + i32.add + local.set $l564 + local.get $l563 + local.get $l564 + i32.add + local.set $l565 + local.get $l564 + local.get $l565 + i32.add + local.set $l566 + local.get $l565 + local.get $l566 + i32.add + local.set $l567 + local.get $l566 + local.get $l567 + i32.add + local.set $l568 + local.get $l567 + local.get $l568 + i32.add + local.set $l569 + local.get $l568 + local.get $l569 + i32.add + local.set $l570 + local.get $l569 + local.get $l570 + i32.add + local.set $l571 + local.get $l570 + local.get $l571 + i32.add + local.set $l572 + local.get $l571 + local.get $l572 + i32.add + local.set $l573 + local.get $l572 + local.get $l573 + i32.add + local.set $l574 + local.get $l573 + local.get $l574 + i32.add + local.set $l575 + local.get $l574 + local.get $l575 + i32.add + local.set $l576 + local.get $l575 + local.get $l576 + i32.add + local.set $l577 + local.get $l576 + local.get $l577 + i32.add + local.set $l578 + local.get $l577 + local.get $l578 + i32.add + local.set $l579 + local.get $l578 + local.get $l579 + i32.add + local.set $l580 + local.get $l579 + local.get $l580 + i32.add + local.set $l581 + local.get $l580 + local.get $l581 + i32.add + local.set $l582 + local.get $l581 + local.get $l582 + i32.add + local.set $l583 + local.get $l582 + local.get $l583 + i32.add + local.set $l584 + local.get $l583 + local.get $l584 + i32.add + local.set $l585 + local.get $l584 + local.get $l585 + i32.add + local.set $l586 + local.get $l585 + local.get $l586 + i32.add + local.set $l587 + local.get $l586 + local.get $l587 + i32.add + local.set $l588 + local.get $l587 + local.get $l588 + i32.add + local.set $l589 + local.get $l588 + local.get $l589 + i32.add + local.set $l590 + local.get $l589 + local.get $l590 + i32.add + local.set $l591 + local.get $l590 + local.get $l591 + i32.add + local.set $l592 + local.get $l591 + local.get $l592 + i32.add + local.set $l593 + local.get $l592 + local.get $l593 + i32.add + local.set $l594 + local.get $l593 + local.get $l594 + i32.add + local.set $l595 + local.get $l594 + local.get $l595 + i32.add + local.set $l596 + local.get $l595 + local.get $l596 + i32.add + local.set $l597 + local.get $l596 + local.get $l597 + i32.add + local.set $l598 + local.get $l597 + local.get $l598 + i32.add + local.set $l599 + local.get $l598 + local.get $l599 + i32.add + local.set $l600 + local.get $l599 + local.get $l600 + i32.add + local.set $l601 + local.get $l600 + local.get $l601 + i32.add + local.set $l602 + local.get $l601 + local.get $l602 + i32.add + local.set $l603 + local.get $l602 + local.get $l603 + i32.add + local.set $l604 + local.get $l603 + local.get $l604 + i32.add + local.set $l605 + local.get $l604 + local.get $l605 + i32.add + local.set $l606 + local.get $l605 + local.get $l606 + i32.add + local.set $l607 + local.get $l606 + local.get $l607 + i32.add + local.set $l608 + local.get $l607 + local.get $l608 + i32.add + local.set $l609 + local.get $l608 + local.get $l609 + i32.add + local.set $l610 + local.get $l609 + local.get $l610 + i32.add + local.set $l611 + local.get $l610 + local.get $l611 + i32.add + local.set $l612 + local.get $l611 + local.get $l612 + i32.add + local.set $l613 + local.get $l612 + local.get $l613 + i32.add + local.set $l614 + local.get $l613 + local.get $l614 + i32.add + local.set $l615 + local.get $l614 + local.get $l615 + i32.add + local.set $l616 + local.get $l615 + local.get $l616 + i32.add + local.set $l617 + local.get $l616 + local.get $l617 + i32.add + local.set $l618 + local.get $l617 + local.get $l618 + i32.add + local.set $l619 + local.get $l618 + local.get $l619 + i32.add + local.set $l620 + local.get $l619 + local.get $l620 + i32.add + local.set $l621 + local.get $l620 + local.get $l621 + i32.add + local.set $l622 + local.get $l621 + local.get $l622 + i32.add + local.set $l623 + local.get $l622 + local.get $l623 + i32.add + local.set $l624 + local.get $l623 + local.get $l624 + i32.add + local.set $l625 + local.get $l624 + local.get $l625 + i32.add + local.set $l626 + local.get $l625 + local.get $l626 + i32.add + local.set $l627 + local.get $l626 + local.get $l627 + i32.add + local.set $l628 + local.get $l627 + local.get $l628 + i32.add + local.set $l629 + local.get $l628 + local.get $l629 + i32.add + local.set $l630 + local.get $l629 + local.get $l630 + i32.add + local.set $l631 + local.get $l630 + local.get $l631 + i32.add + local.set $l632 + local.get $l631 + local.get $l632 + i32.add + local.set $l633 + local.get $l632 + local.get $l633 + i32.add + local.set $l634 + local.get $l633 + local.get $l634 + i32.add + local.set $l635 + local.get $l634 + local.get $l635 + i32.add + local.set $l636 + local.get $l635 + local.get $l636 + i32.add + local.set $l637 + local.get $l636 + local.get $l637 + i32.add + local.set $l638 + local.get $l637 + local.get $l638 + i32.add + local.set $l639 + local.get $l638 + local.get $l639 + i32.add + local.set $l640 + local.get $l639 + local.get $l640 + i32.add + local.set $l641 + local.get $l640 + local.get $l641 + i32.add + local.set $l642 + local.get $l641 + local.get $l642 + i32.add + local.set $l643 + local.get $l642 + local.get $l643 + i32.add + local.set $l644 + local.get $l643 + local.get $l644 + i32.add + local.set $l645 + local.get $l644 + local.get $l645 + i32.add + local.set $l646 + local.get $l645 + local.get $l646 + i32.add + local.set $l647 + local.get $l646 + local.get $l647 + i32.add + local.set $l648 + local.get $l647 + local.get $l648 + i32.add + local.set $l649 + local.get $l648 + local.get $l649 + i32.add + local.set $l650 + local.get $l649 + local.get $l650 + i32.add + local.set $l651 + local.get $l650 + local.get $l651 + i32.add + local.set $l652 + local.get $l651 + local.get $l652 + i32.add + local.set $l653 + local.get $l652 + local.get $l653 + i32.add + local.set $l654 + local.get $l653 + local.get $l654 + i32.add + local.set $l655 + local.get $l654 + local.get $l655 + i32.add + local.set $l656 + local.get $l655 + local.get $l656 + i32.add + local.set $l657 + local.get $l656 + local.get $l657 + i32.add + local.set $l658 + local.get $l657 + local.get $l658 + i32.add + local.set $l659 + local.get $l658 + local.get $l659 + i32.add + local.set $l660 + local.get $l659 + local.get $l660 + i32.add + local.set $l661 + local.get $l660 + local.get $l661 + i32.add + local.set $l662 + local.get $l661 + local.get $l662 + i32.add + local.set $l663 + local.get $l662 + local.get $l663 + i32.add + local.set $l664 + local.get $l663 + local.get $l664 + i32.add + local.set $l665 + local.get $l664 + local.get $l665 + i32.add + local.set $l666 + local.get $l665 + local.get $l666 + i32.add + local.set $l667 + local.get $l666 + local.get $l667 + i32.add + local.set $l668 + local.get $l667 + local.get $l668 + i32.add + local.set $l669 + local.get $l668 + local.get $l669 + i32.add + local.set $l670 + local.get $l669 + local.get $l670 + i32.add + local.set $l671 + local.get $l670 + local.get $l671 + i32.add + local.set $l672 + local.get $l671 + local.get $l672 + i32.add + local.set $l673 + local.get $l672 + local.get $l673 + i32.add + local.set $l674 + local.get $l673 + local.get $l674 + i32.add + local.set $l675 + local.get $l674 + local.get $l675 + i32.add + local.set $l676 + local.get $l675 + local.get $l676 + i32.add + local.set $l677 + local.get $l676 + local.get $l677 + i32.add + local.set $l678 + local.get $l677 + local.get $l678 + i32.add + local.set $l679 + local.get $l678 + local.get $l679 + i32.add + local.set $l680 + local.get $l679 + local.get $l680 + i32.add + local.set $l681 + local.get $l680 + local.get $l681 + i32.add + local.set $l682 + local.get $l681 + local.get $l682 + i32.add + local.set $l683 + local.get $l682 + local.get $l683 + i32.add + local.set $l684 + local.get $l683 + local.get $l684 + i32.add + local.set $l685 + local.get $l684 + local.get $l685 + i32.add + local.set $l686 + local.get $l685 + local.get $l686 + i32.add + local.set $l687 + local.get $l686 + local.get $l687 + i32.add + local.set $l688 + local.get $l687 + local.get $l688 + i32.add + local.set $l689 + local.get $l688 + local.get $l689 + i32.add + local.set $l690 + local.get $l689 + local.get $l690 + i32.add + local.set $l691 + local.get $l690 + local.get $l691 + i32.add + local.set $l692 + local.get $l691 + local.get $l692 + i32.add + local.set $l693 + local.get $l692 + local.get $l693 + i32.add + local.set $l694 + local.get $l693 + local.get $l694 + i32.add + local.set $l695 + local.get $l694 + local.get $l695 + i32.add + local.set $l696 + local.get $l695 + local.get $l696 + i32.add + local.set $l697 + local.get $l696 + local.get $l697 + i32.add + local.set $l698 + local.get $l697 + local.get $l698 + i32.add + local.set $l699 + local.get $l698 + local.get $l699 + i32.add + local.set $l700 + local.get $l699 + local.get $l700 + i32.add + local.set $l701 + local.get $l700 + local.get $l701 + i32.add + local.set $l702 + local.get $l701 + local.get $l702 + i32.add + local.set $l703 + local.get $l702 + local.get $l703 + i32.add + local.set $l704 + local.get $l703 + local.get $l704 + i32.add + local.set $l705 + local.get $l704 + local.get $l705 + i32.add + local.set $l706 + local.get $l705 + local.get $l706 + i32.add + local.set $l707 + local.get $l706 + local.get $l707 + i32.add + local.set $l708 + local.get $l707 + local.get $l708 + i32.add + local.set $l709 + local.get $l708 + local.get $l709 + i32.add + local.set $l710 + local.get $l709 + local.get $l710 + i32.add + local.set $l711 + local.get $l710 + local.get $l711 + i32.add + local.set $l712 + local.get $l711 + local.get $l712 + i32.add + local.set $l713 + local.get $l712 + local.get $l713 + i32.add + local.set $l714 + local.get $l713 + local.get $l714 + i32.add + local.set $l715 + local.get $l714 + local.get $l715 + i32.add + local.set $l716 + local.get $l715 + local.get $l716 + i32.add + local.set $l717 + local.get $l716 + local.get $l717 + i32.add + local.set $l718 + local.get $l717 + local.get $l718 + i32.add + local.set $l719 + local.get $l718 + local.get $l719 + i32.add + local.set $l720 + local.get $l719 + local.get $l720 + i32.add + local.set $l721 + local.get $l720 + local.get $l721 + i32.add + local.set $l722 + local.get $l721 + local.get $l722 + i32.add + local.set $l723 + local.get $l722 + local.get $l723 + i32.add + local.set $l724 + local.get $l723 + local.get $l724 + i32.add + local.set $l725 + local.get $l724 + local.get $l725 + i32.add + local.set $l726 + local.get $l725 + local.get $l726 + i32.add + local.set $l727 + local.get $l726 + local.get $l727 + i32.add + local.set $l728 + local.get $l727 + local.get $l728 + i32.add + local.set $l729 + local.get $l728 + local.get $l729 + i32.add + local.set $l730 + local.get $l729 + local.get $l730 + i32.add + local.set $l731 + local.get $l730 + local.get $l731 + i32.add + local.set $l732 + local.get $l731 + local.get $l732 + i32.add + local.set $l733 + local.get $l732 + local.get $l733 + i32.add + local.set $l734 + local.get $l733 + local.get $l734 + i32.add + local.set $l735 + local.get $l734 + local.get $l735 + i32.add + local.set $l736 + local.get $l735 + local.get $l736 + i32.add + local.set $l737 + local.get $l736 + local.get $l737 + i32.add + local.set $l738 + local.get $l737 + local.get $l738 + i32.add + local.set $l739 + local.get $l738 + local.get $l739 + i32.add + local.set $l740 + local.get $l739 + local.get $l740 + i32.add + local.set $l741 + local.get $l740 + local.get $l741 + i32.add + local.set $l742 + local.get $l741 + local.get $l742 + i32.add + local.set $l743 + local.get $l742 + local.get $l743 + i32.add + local.set $l744 + local.get $l743 + local.get $l744 + i32.add + local.set $l745 + local.get $l744 + local.get $l745 + i32.add + local.set $l746 + local.get $l745 + local.get $l746 + i32.add + local.set $l747 + local.get $l746 + local.get $l747 + i32.add + local.set $l748 + local.get $l747 + local.get $l748 + i32.add + local.set $l749 + local.get $l748 + local.get $l749 + i32.add + local.set $l750 + local.get $l749 + local.get $l750 + i32.add + local.set $l751 + local.get $l750 + local.get $l751 + i32.add + local.set $l752 + local.get $l751 + local.get $l752 + i32.add + local.set $l753 + local.get $l752 + local.get $l753 + i32.add + local.set $l754 + local.get $l753 + local.get $l754 + i32.add + local.set $l755 + local.get $l754 + local.get $l755 + i32.add + local.set $l756 + local.get $l755 + local.get $l756 + i32.add + local.set $l757 + local.get $l756 + local.get $l757 + i32.add + local.set $l758 + local.get $l757 + local.get $l758 + i32.add + local.set $l759 + local.get $l758 + local.get $l759 + i32.add + local.set $l760 + local.get $l759 + local.get $l760 + i32.add + local.set $l761 + local.get $l760 + local.get $l761 + i32.add + local.set $l762 + local.get $l761 + local.get $l762 + i32.add + local.set $l763 + local.get $l762 + local.get $l763 + i32.add + local.set $l764 + local.get $l763 + local.get $l764 + i32.add + local.set $l765 + local.get $l764 + local.get $l765 + i32.add + local.set $l766 + local.get $l765 + local.get $l766 + i32.add + local.set $l767 + local.get $l766 + local.get $l767 + i32.add + local.set $l768 + local.get $l767 + local.get $l768 + i32.add + local.set $l769 + local.get $l768 + local.get $l769 + i32.add + local.set $l770 + local.get $l769 + local.get $l770 + i32.add + local.set $l771 + local.get $l770 + local.get $l771 + i32.add + local.set $l772 + local.get $l771 + local.get $l772 + i32.add + local.set $l773 + local.get $l772 + local.get $l773 + i32.add + local.set $l774 + local.get $l773 + local.get $l774 + i32.add + local.set $l775 + local.get $l774 + local.get $l775 + i32.add + local.set $l776 + local.get $l775 + local.get $l776 + i32.add + local.set $l777 + local.get $l776 + local.get $l777 + i32.add + local.set $l778 + local.get $l777 + local.get $l778 + i32.add + local.set $l779 + local.get $l778 + local.get $l779 + i32.add + local.set $l780 + local.get $l779 + local.get $l780 + i32.add + local.set $l781 + local.get $l780 + local.get $l781 + i32.add + local.set $l782 + local.get $l781 + local.get $l782 + i32.add + local.set $l783 + local.get $l782 + local.get $l783 + i32.add + local.set $l784 + local.get $l783 + local.get $l784 + i32.add + local.set $l785 + local.get $l784 + local.get $l785 + i32.add + local.set $l786 + local.get $l785 + local.get $l786 + i32.add + local.set $l787 + local.get $l786 + local.get $l787 + i32.add + local.set $l788 + local.get $l787 + local.get $l788 + i32.add + local.set $l789 + local.get $l788 + local.get $l789 + i32.add + local.set $l790 + local.get $l789 + local.get $l790 + i32.add + local.set $l791 + local.get $l790 + local.get $l791 + i32.add + local.set $l792 + local.get $l791 + local.get $l792 + i32.add + local.set $l793 + local.get $l792 + local.get $l793 + i32.add + local.set $l794 + local.get $l793 + local.get $l794 + i32.add + local.set $l795 + local.get $l794 + local.get $l795 + i32.add + local.set $l796 + local.get $l795 + local.get $l796 + i32.add + local.set $l797 + local.get $l796 + local.get $l797 + i32.add + local.set $l798 + local.get $l797 + local.get $l798 + i32.add + local.set $l799 + local.get $l798 + local.get $l799 + i32.add + local.set $l800 + local.get $l799 + local.get $l800 + i32.add + local.set $l801 + local.get $l800 + local.get $l801 + i32.add + local.set $l802 + local.get $l801 + local.get $l802 + i32.add + local.set $l803 + local.get $l802 + local.get $l803 + i32.add + local.set $l804 + local.get $l803 + local.get $l804 + i32.add + local.set $l805 + local.get $l804 + local.get $l805 + i32.add + local.set $l806 + local.get $l805 + local.get $l806 + i32.add + local.set $l807 + local.get $l806 + local.get $l807 + i32.add + local.set $l808 + local.get $l807 + local.get $l808 + i32.add + local.set $l809 + local.get $l808 + local.get $l809 + i32.add + local.set $l810 + local.get $l809 + local.get $l810 + i32.add + local.set $l811 + local.get $l810 + local.get $l811 + i32.add + local.set $l812 + local.get $l811 + local.get $l812 + i32.add + local.set $l813 + local.get $l812 + local.get $l813 + i32.add + local.set $l814 + local.get $l813 + local.get $l814 + i32.add + local.set $l815 + local.get $l814 + local.get $l815 + i32.add + local.set $l816 + local.get $l815 + local.get $l816 + i32.add + local.set $l817 + local.get $l816 + local.get $l817 + i32.add + local.set $l818 + local.get $l817 + local.get $l818 + i32.add + local.set $l819 + local.get $l818 + local.get $l819 + i32.add + local.set $l820 + local.get $l819 + local.get $l820 + i32.add + local.set $l821 + local.get $l820 + local.get $l821 + i32.add + local.set $l822 + local.get $l821 + local.get $l822 + i32.add + local.set $l823 + local.get $l822 + local.get $l823 + i32.add + local.set $l824 + local.get $l823 + local.get $l824 + i32.add + local.set $l825 + local.get $l824 + local.get $l825 + i32.add + local.set $l826 + local.get $l825 + local.get $l826 + i32.add + local.set $l827 + local.get $l826 + local.get $l827 + i32.add + local.set $l828 + local.get $l827 + local.get $l828 + i32.add + local.set $l829 + local.get $l828 + local.get $l829 + i32.add + local.set $l830 + local.get $l829 + local.get $l830 + i32.add + local.set $l831 + local.get $l830 + local.get $l831 + i32.add + local.set $l832 + local.get $l831 + local.get $l832 + i32.add + local.set $l833 + local.get $l832 + local.get $l833 + i32.add + local.set $l834 + local.get $l833 + local.get $l834 + i32.add + local.set $l835 + local.get $l834 + local.get $l835 + i32.add + local.set $l836 + local.get $l835 + local.get $l836 + i32.add + local.set $l837 + local.get $l836 + local.get $l837 + i32.add + local.set $l838 + local.get $l837 + local.get $l838 + i32.add + local.set $l839 + local.get $l838 + local.get $l839 + i32.add + local.set $l840 + local.get $l839 + local.get $l840 + i32.add + local.set $l841 + local.get $l840 + local.get $l841 + i32.add + local.set $l842 + local.get $l841 + local.get $l842 + i32.add + local.set $l843 + local.get $l842 + local.get $l843 + i32.add + local.set $l844 + local.get $l843 + local.get $l844 + i32.add + local.set $l845 + local.get $l844 + local.get $l845 + i32.add + local.set $l846 + local.get $l845 + local.get $l846 + i32.add + local.set $l847 + local.get $l846 + local.get $l847 + i32.add + local.set $l848 + local.get $l847 + local.get $l848 + i32.add + local.set $l849 + local.get $l848 + local.get $l849 + i32.add + local.set $l850 + local.get $l849 + local.get $l850 + i32.add + local.set $l851 + local.get $l850 + local.get $l851 + i32.add + local.set $l852 + local.get $l851 + local.get $l852 + i32.add + local.set $l853 + local.get $l852 + local.get $l853 + i32.add + local.set $l854 + local.get $l853 + local.get $l854 + i32.add + local.set $l855 + local.get $l854 + local.get $l855 + i32.add + local.set $l856 + local.get $l855 + local.get $l856 + i32.add + local.set $l857 + local.get $l856 + local.get $l857 + i32.add + local.set $l858 + local.get $l857 + local.get $l858 + i32.add + local.set $l859 + local.get $l858 + local.get $l859 + i32.add + local.set $l860 + local.get $l859 + local.get $l860 + i32.add + local.set $l861 + local.get $l860 + local.get $l861 + i32.add + local.set $l862 + local.get $l861 + local.get $l862 + i32.add + local.set $l863 + local.get $l862 + local.get $l863 + i32.add + local.set $l864 + local.get $l863 + local.get $l864 + i32.add + local.set $l865 + local.get $l864 + local.get $l865 + i32.add + local.set $l866 + local.get $l865 + local.get $l866 + i32.add + local.set $l867 + local.get $l866 + local.get $l867 + i32.add + local.set $l868 + local.get $l867 + local.get $l868 + i32.add + local.set $l869 + local.get $l868 + local.get $l869 + i32.add + local.set $l870 + local.get $l869 + local.get $l870 + i32.add + local.set $l871 + local.get $l870 + local.get $l871 + i32.add + local.set $l872 + local.get $l871 + local.get $l872 + i32.add + local.set $l873 + local.get $l872 + local.get $l873 + i32.add + local.set $l874 + local.get $l873 + local.get $l874 + i32.add + local.set $l875 + local.get $l874 + local.get $l875 + i32.add + local.set $l876 + local.get $l875 + local.get $l876 + i32.add + local.set $l877 + local.get $l876 + local.get $l877 + i32.add + local.set $l878 + local.get $l877 + local.get $l878 + i32.add + local.set $l879 + local.get $l878 + local.get $l879 + i32.add + local.set $l880 + local.get $l879 + local.get $l880 + i32.add + local.set $l881 + local.get $l880 + local.get $l881 + i32.add + local.set $l882 + local.get $l881 + local.get $l882 + i32.add + local.set $l883 + local.get $l882 + local.get $l883 + i32.add + local.set $l884 + local.get $l883 + local.get $l884 + i32.add + local.set $l885 + local.get $l884 + local.get $l885 + i32.add + local.set $l886 + local.get $l885 + local.get $l886 + i32.add + local.set $l887 + local.get $l886 + local.get $l887 + i32.add + local.set $l888 + local.get $l887 + local.get $l888 + i32.add + local.set $l889 + local.get $l888 + local.get $l889 + i32.add + local.set $l890 + local.get $l889 + local.get $l890 + i32.add + local.set $l891 + local.get $l890 + local.get $l891 + i32.add + local.set $l892 + local.get $l891 + local.get $l892 + i32.add + local.set $l893 + local.get $l892 + local.get $l893 + i32.add + local.set $l894 + local.get $l893 + local.get $l894 + i32.add + local.set $l895 + local.get $l894 + local.get $l895 + i32.add + local.set $l896 + local.get $l895 + local.get $l896 + i32.add + local.set $l897 + local.get $l896 + local.get $l897 + i32.add + local.set $l898 + local.get $l897 + local.get $l898 + i32.add + local.set $l899 + local.get $l898 + local.get $l899 + i32.add + local.set $l900 + local.get $l899 + local.get $l900 + i32.add + local.set $l901 + local.get $l900 + local.get $l901 + i32.add + local.set $l902 + local.get $l901 + local.get $l902 + i32.add + local.set $l903 + local.get $l902 + local.get $l903 + i32.add + local.set $l904 + local.get $l903 + local.get $l904 + i32.add + local.set $l905 + local.get $l904 + local.get $l905 + i32.add + local.set $l906 + local.get $l905 + local.get $l906 + i32.add + local.set $l907 + local.get $l906 + local.get $l907 + i32.add + local.set $l908 + local.get $l907 + local.get $l908 + i32.add + local.set $l909 + local.get $l908 + local.get $l909 + i32.add + local.set $l910 + local.get $l909 + local.get $l910 + i32.add + local.set $l911 + local.get $l910 + local.get $l911 + i32.add + local.set $l912 + local.get $l911 + local.get $l912 + i32.add + local.set $l913 + local.get $l912 + local.get $l913 + i32.add + local.set $l914 + local.get $l913 + local.get $l914 + i32.add + local.set $l915 + local.get $l914 + local.get $l915 + i32.add + local.set $l916 + local.get $l915 + local.get $l916 + i32.add + local.set $l917 + local.get $l916 + local.get $l917 + i32.add + local.set $l918 + local.get $l917 + local.get $l918 + i32.add + local.set $l919 + local.get $l918 + local.get $l919 + i32.add + local.set $l920 + local.get $l919 + local.get $l920 + i32.add + local.set $l921 + local.get $l920 + local.get $l921 + i32.add + local.set $l922 + local.get $l921 + local.get $l922 + i32.add + local.set $l923 + local.get $l922 + local.get $l923 + i32.add + local.set $l924 + local.get $l923 + local.get $l924 + i32.add + local.set $l925 + local.get $l924 + local.get $l925 + i32.add + local.set $l926 + local.get $l925 + local.get $l926 + i32.add + local.set $l927 + local.get $l926 + local.get $l927 + i32.add + local.set $l928 + local.get $l927 + local.get $l928 + i32.add + local.set $l929 + local.get $l928 + local.get $l929 + i32.add + local.set $l930 + local.get $l929 + local.get $l930 + i32.add + local.set $l931 + local.get $l930 + local.get $l931 + i32.add + local.set $l932 + local.get $l931 + local.get $l932 + i32.add + local.set $l933 + local.get $l932 + local.get $l933 + i32.add + local.set $l934 + local.get $l933 + local.get $l934 + i32.add + local.set $l935 + local.get $l934 + local.get $l935 + i32.add + local.set $l936 + local.get $l935 + local.get $l936 + i32.add + local.set $l937 + local.get $l936 + local.get $l937 + i32.add + local.set $l938 + local.get $l937 + local.get $l938 + i32.add + local.set $l939 + local.get $l938 + local.get $l939 + i32.add + local.set $l940 + local.get $l939 + local.get $l940 + i32.add + local.set $l941 + local.get $l940 + local.get $l941 + i32.add + local.set $l942 + local.get $l941 + local.get $l942 + i32.add + local.set $l943 + local.get $l942 + local.get $l943 + i32.add + local.set $l944 + local.get $l943 + local.get $l944 + i32.add + local.set $l945 + local.get $l944 + local.get $l945 + i32.add + local.set $l946 + local.get $l945 + local.get $l946 + i32.add + local.set $l947 + local.get $l946 + local.get $l947 + i32.add + local.set $l948 + local.get $l947 + local.get $l948 + i32.add + local.set $l949 + local.get $l948 + local.get $l949 + i32.add + local.set $l950 + local.get $l949 + local.get $l950 + i32.add + local.set $l951 + local.get $l950 + local.get $l951 + i32.add + local.set $l952 + local.get $l951 + local.get $l952 + i32.add + local.set $l953 + local.get $l952 + local.get $l953 + i32.add + local.set $l954 + local.get $l953 + local.get $l954 + i32.add + local.set $l955 + local.get $l954 + local.get $l955 + i32.add + local.set $l956 + local.get $l955 + local.get $l956 + i32.add + local.set $l957 + local.get $l956 + local.get $l957 + i32.add + local.set $l958 + local.get $l957 + local.get $l958 + i32.add + local.set $l959 + local.get $l958 + local.get $l959 + i32.add + local.set $l960 + local.get $l959 + local.get $l960 + i32.add + local.set $l961 + local.get $l960 + local.get $l961 + i32.add + local.set $l962 + local.get $l961 + local.get $l962 + i32.add + local.set $l963 + local.get $l962 + local.get $l963 + i32.add + local.set $l964 + local.get $l963 + local.get $l964 + i32.add + local.set $l965 + local.get $l964 + local.get $l965 + i32.add + local.set $l966 + local.get $l965 + local.get $l966 + i32.add + local.set $l967 + local.get $l966 + local.get $l967 + i32.add + local.set $l968 + local.get $l967 + local.get $l968 + i32.add + local.set $l969 + local.get $l968 + local.get $l969 + i32.add + local.set $l970 + local.get $l969 + local.get $l970 + i32.add + local.set $l971 + local.get $l970 + local.get $l971 + i32.add + local.set $l972 + local.get $l971 + local.get $l972 + i32.add + local.set $l973 + local.get $l972 + local.get $l973 + i32.add + local.set $l974 + local.get $l973 + local.get $l974 + i32.add + local.set $l975 + local.get $l974 + local.get $l975 + i32.add + local.set $l976 + local.get $l975 + local.get $l976 + i32.add + local.set $l977 + local.get $l976 + local.get $l977 + i32.add + local.set $l978 + local.get $l977 + local.get $l978 + i32.add + local.set $l979 + local.get $l978 + local.get $l979 + i32.add + local.set $l980 + local.get $l979 + local.get $l980 + i32.add + local.set $l981 + local.get $l980 + local.get $l981 + i32.add + local.set $l982 + local.get $l981 + local.get $l982 + i32.add + local.set $l983 + local.get $l982 + local.get $l983 + i32.add + local.set $l984 + local.get $l983 + local.get $l984 + i32.add + local.set $l985 + local.get $l984 + local.get $l985 + i32.add + local.set $l986 + local.get $l985 + local.get $l986 + i32.add + local.set $l987 + local.get $l986 + local.get $l987 + i32.add + local.set $l988 + local.get $l987 + local.get $l988 + i32.add + local.set $l989 + local.get $l988 + local.get $l989 + i32.add + local.set $l990 + local.get $l989 + local.get $l990 + i32.add + local.set $l991 + local.get $l990 + local.get $l991 + i32.add + local.set $l992 + local.get $l991 + local.get $l992 + i32.add + local.set $l993 + local.get $l992 + local.get $l993 + i32.add + local.set $l994 + local.get $l993 + local.get $l994 + i32.add + local.set $l995 + local.get $l994 + local.get $l995 + i32.add + local.set $l996 + local.get $l995 + local.get $l996 + i32.add + local.set $l997 + local.get $l996 + local.get $l997 + i32.add + local.set $l998 + local.get $l997 + local.get $l998 + i32.add + local.set $l999 + local.get $l998 + local.get $l999 + i32.add + local.set $l1000 + local.get $l999 + local.get $l1000 + i32.add + local.set $l1001 + local.get $l1000 + local.get $l1001 + i32.add + local.set $l1002 + local.get $l1001 + local.get $l1002 + i32.add + local.set $l1003 + local.get $l1002 + local.get $l1003 + i32.add + local.set $l1004 + local.get $l1003 + local.get $l1004 + i32.add + local.set $l1005 + local.get $l1004 + local.get $l1005 + i32.add + local.set $l1006 + local.get $l1005 + local.get $l1006 + i32.add + local.set $l1007 + local.get $l1006 + local.get $l1007 + i32.add + local.set $l1008 + local.get $l1007 + local.get $l1008 + i32.add + local.set $l1009 + local.get $l1008 + local.get $l1009 + i32.add + local.set $l1010 + local.get $l1009 + local.get $l1010 + i32.add + local.set $l1011 + local.get $l1010 + local.get $l1011 + i32.add + local.set $l1012 + local.get $l1011 + local.get $l1012 + i32.add + local.set $l1013 + local.get $l1012 + local.get $l1013 + i32.add + local.set $l1014 + local.get $l1013 + local.get $l1014 + i32.add + local.set $l1015 + local.get $l1014 + local.get $l1015 + i32.add + local.set $l1016 + local.get $l1015 + local.get $l1016 + i32.add + local.set $l1017 + local.get $l1016 + local.get $l1017 + i32.add + local.set $l1018 + local.get $l1017 + local.get $l1018 + i32.add + local.set $l1019 + local.get $l1018 + local.get $l1019 + i32.add + local.set $l1020 + local.get $l1019 + local.get $l1020 + i32.add + local.set $l1021 + local.get $l1020 + local.get $l1021 + i32.add + local.set $l1022 + local.get $l1021 + local.get $l1022 + i32.add + local.set $l1023 + local.get $l1022 + local.get $l1023 + i32.add + local.set $l1024 + local.get $l1023 + local.get $l1024 + i32.add + local.set $l1025 + local.get $l1024 + local.get $l1025 + i32.add + local.set $l1026 + local.get $l1025 + local.get $l1026 + i32.add + local.set $l1027 + local.get $l1026 + local.get $l1027 + i32.add + local.set $l1028 + local.get $l1027 + local.get $l1028 + i32.add + local.set $l1029 + local.get $l1028 + local.get $l1029 + i32.add + local.set $l1030 + local.get $l1029 + local.get $l1030 + i32.add + local.set $l1031 + local.get $l1030 + local.get $l1031 + i32.add + local.set $l1032 + local.get $l1031 + local.get $l1032 + i32.add + local.set $l1033 + local.get $l1032 + local.get $l1033 + i32.add + local.set $l1034 + local.get $l1033 + local.get $l1034 + i32.add + local.set $l1035 + local.get $l1034 + local.get $l1035 + i32.add + local.set $l1036 + local.get $l1035 + local.get $l1036 + i32.add + local.set $l1037 + local.get $l1036 + local.get $l1037 + i32.add + local.set $l1038 + local.get $l1037 + local.get $l1038 + i32.add + local.set $l1039 + local.get $l1038 + local.get $l1039 + i32.add + local.set $l1040 + local.get $l1039 + local.get $l1040 + i32.add + local.set $l1041 + local.get $l1040 + local.get $l1041 + i32.add + local.set $l1042 + local.get $l1041 + local.get $l1042 + i32.add + local.set $l1043 + local.get $l1042 + local.get $l1043 + i32.add + local.set $l1044 + local.get $l1043 + local.get $l1044 + i32.add + local.set $l1045 + local.get $l1044 + local.get $l1045 + i32.add + local.set $l1046 + local.get $l1045 + local.get $l1046 + i32.add + local.set $l1047 + local.get $l1046 + local.get $l1047 + i32.add + local.set $l1048 + local.get $l1047 + local.get $l1048 + i32.add + local.set $l1049 + local.get $l1048 + local.get $l1049 + i32.add + local.set $l1050 + local.get $l1049 + local.get $l1050 + i32.add + local.set $l1051 + local.get $l1050 + local.get $l1051 + i32.add + local.set $l1052 + local.get $l1051 + local.get $l1052 + i32.add + local.set $l1053 + local.get $l1052 + local.get $l1053 + i32.add + local.set $l1054 + local.get $l1053 + local.get $l1054 + i32.add + local.set $l1055 + local.get $l1054 + local.get $l1055 + i32.add + local.set $l1056 + local.get $l1055 + local.get $l1056 + i32.add + local.set $l1057 + local.get $l1056 + local.get $l1057 + i32.add + local.set $l1058 + local.get $l1057 + local.get $l1058 + i32.add + local.set $l1059 + local.get $l1058 + local.get $l1059 + i32.add + local.set $l1060 + local.get $l1059 + local.get $l1060 + i32.add + local.set $l1061 + local.get $l1060 + local.get $l1061 + i32.add + local.set $l1062 + local.get $l1061 + local.get $l1062 + i32.add + local.set $l1063 + local.get $l1062 + local.get $l1063 + i32.add + local.set $l1064 + local.get $l1063 + local.get $l1064 + i32.add + local.set $l1065 + local.get $l1064 + local.get $l1065 + i32.add + local.set $l1066 + local.get $l1065 + local.get $l1066 + i32.add + local.set $l1067 + local.get $l1066 + local.get $l1067 + i32.add + local.set $l1068 + local.get $l1067 + local.get $l1068 + i32.add + local.set $l1069 + local.get $l1068 + local.get $l1069 + i32.add + local.set $l1070 + local.get $l1069 + local.get $l1070 + i32.add + local.set $l1071 + local.get $l1070 + local.get $l1071 + i32.add + local.set $l1072 + local.get $l1071 + local.get $l1072 + i32.add + local.set $l1073 + local.get $l1072 + local.get $l1073 + i32.add + local.set $l1074 + local.get $l1073 + local.get $l1074 + i32.add + local.set $l1075 + local.get $l1074 + local.get $l1075 + i32.add + local.set $l1076 + local.get $l1075 + local.get $l1076 + i32.add + local.set $l1077 + local.get $l1076 + local.get $l1077 + i32.add + local.set $l1078 + local.get $l1077 + local.get $l1078 + i32.add + local.set $l1079 + local.get $l1078 + local.get $l1079 + i32.add + local.set $l1080 + local.get $l1079 + local.get $l1080 + i32.add + local.set $l1081 + local.get $l1080 + local.get $l1081 + i32.add + local.set $l1082 + local.get $l1081 + local.get $l1082 + i32.add + local.set $l1083 + local.get $l1082 + local.get $l1083 + i32.add + local.set $l1084 + local.get $l1083 + local.get $l1084 + i32.add + local.set $l1085 + local.get $l1084 + local.get $l1085 + i32.add + local.set $l1086 + local.get $l1085 + local.get $l1086 + i32.add + local.set $l1087 + local.get $l1086 + local.get $l1087 + i32.add + local.set $l1088 + local.get $l1087 + local.get $l1088 + i32.add + local.set $l1089 + local.get $l1088 + local.get $l1089 + i32.add + local.set $l1090 + local.get $l1089 + local.get $l1090 + i32.add + local.set $l1091 + local.get $l1090 + local.get $l1091 + i32.add + local.set $l1092 + local.get $l1091 + local.get $l1092 + i32.add + local.set $l1093 + local.get $l1092 + local.get $l1093 + i32.add + local.set $l1094 + local.get $l1093 + local.get $l1094 + i32.add + local.set $l1095 + local.get $l1094 + local.get $l1095 + i32.add + local.set $l1096 + local.get $l1095 + local.get $l1096 + i32.add + local.set $l1097 + local.get $l1096 + local.get $l1097 + i32.add + local.set $l1098 + local.get $l1097 + local.get $l1098 + i32.add + local.set $l1099 + local.get $l1098 + local.get $l1099 + i32.add + local.set $l1100 + local.get $l1099 + local.get $l1100 + i32.add + local.set $l1101 + local.get $l1100 + local.get $l1101 + i32.add + local.set $l1102 + local.get $l1101 + local.get $l1102 + i32.add + local.set $l1103 + local.get $l1102 + local.get $l1103 + i32.add + local.set $l1104 + local.get $l1103 + local.get $l1104 + i32.add + local.set $l1105 + local.get $l1104 + local.get $l1105 + i32.add + local.set $l1106 + local.get $l1105 + local.get $l1106 + i32.add + local.set $l1107 + local.get $l1106 + local.get $l1107 + i32.add + local.set $l1108 + local.get $l1107 + local.get $l1108 + i32.add + local.set $l1109 + local.get $l1108 + local.get $l1109 + i32.add + local.set $l1110 + local.get $l1109 + local.get $l1110 + i32.add + local.set $l1111 + local.get $l1110 + local.get $l1111 + i32.add + local.set $l1112 + local.get $l1111 + local.get $l1112 + i32.add + local.set $l1113 + local.get $l1112 + local.get $l1113 + i32.add + local.set $l1114 + local.get $l1113 + local.get $l1114 + i32.add + local.set $l1115 + local.get $l1114 + local.get $l1115 + i32.add + local.set $l1116 + local.get $l1115 + local.get $l1116 + i32.add + local.set $l1117 + local.get $l1116 + local.get $l1117 + i32.add + local.set $l1118 + local.get $l1117 + local.get $l1118 + i32.add + local.set $l1119 + local.get $l1118 + local.get $l1119 + i32.add + local.set $l1120 + local.get $l1119 + local.get $l1120 + i32.add + local.set $l1121 + local.get $l1120 + local.get $l1121 + i32.add + local.set $l1122 + local.get $l1121 + local.get $l1122 + i32.add + local.set $l1123 + local.get $l1122 + local.get $l1123 + i32.add + local.set $l1124 + local.get $l1123 + local.get $l1124 + i32.add + local.set $l1125 + local.get $l1124 + local.get $l1125 + i32.add + local.set $l1126 + local.get $l1125 + local.get $l1126 + i32.add + local.set $l1127 + local.get $l1126 + local.get $l1127 + i32.add + local.set $l1128 + local.get $l1127 + local.get $l1128 + i32.add + local.set $l1129 + local.get $l1128 + local.get $l1129 + i32.add + local.set $l1130 + local.get $l1129 + local.get $l1130 + i32.add + local.set $l1131 + local.get $l1130 + local.get $l1131 + i32.add + local.set $l1132 + local.get $l1131 + local.get $l1132 + i32.add + local.set $l1133 + local.get $l1132 + local.get $l1133 + i32.add + local.set $l1134 + local.get $l1133 + local.get $l1134 + i32.add + local.set $l1135 + local.get $l1134 + local.get $l1135 + i32.add + local.set $l1136 + local.get $l1135 + local.get $l1136 + i32.add + local.set $l1137 + local.get $l1136 + local.get $l1137 + i32.add + local.set $l1138 + local.get $l1137 + local.get $l1138 + i32.add + local.set $l1139 + local.get $l1138 + local.get $l1139 + i32.add + local.set $l1140 + local.get $l1139 + local.get $l1140 + i32.add + local.set $l1141 + local.get $l1140 + local.get $l1141 + i32.add + local.set $l1142 + local.get $l1141 + local.get $l1142 + i32.add + local.set $l1143 + local.get $l1142 + local.get $l1143 + i32.add + local.set $l1144 + local.get $l1143 + local.get $l1144 + i32.add + local.set $l1145 + local.get $l1144 + local.get $l1145 + i32.add + local.set $l1146 + local.get $l1145 + local.get $l1146 + i32.add + local.set $l1147 + local.get $l1146 + local.get $l1147 + i32.add + local.set $l1148 + local.get $l1147 + local.get $l1148 + i32.add + local.set $l1149 + local.get $l1148 + local.get $l1149 + i32.add + local.set $l1150 + local.get $l1149 + local.get $l1150 + i32.add + local.set $l1151 + local.get $l1150 + local.get $l1151 + i32.add + local.set $l1152 + local.get $l1151 + local.get $l1152 + i32.add + local.set $l1153 + local.get $l1152 + local.get $l1153 + i32.add + local.set $l1154 + local.get $l1153 + local.get $l1154 + i32.add + local.set $l1155 + local.get $l1154 + local.get $l1155 + i32.add + local.set $l1156 + local.get $l1155 + local.get $l1156 + i32.add + local.set $l1157 + local.get $l1156 + local.get $l1157 + i32.add + local.set $l1158 + local.get $l1157 + local.get $l1158 + i32.add + local.set $l1159 + local.get $l1158 + local.get $l1159 + i32.add + local.set $l1160 + local.get $l1159 + local.get $l1160 + i32.add + local.set $l1161 + local.get $l1160 + local.get $l1161 + i32.add + local.set $l1162 + local.get $l1161 + local.get $l1162 + i32.add + local.set $l1163 + local.get $l1162 + local.get $l1163 + i32.add + local.set $l1164 + local.get $l1163 + local.get $l1164 + i32.add + local.set $l1165 + local.get $l1164 + local.get $l1165 + i32.add + local.set $l1166 + local.get $l1165 + local.get $l1166 + i32.add + local.set $l1167 + local.get $l1166 + local.get $l1167 + i32.add + local.set $l1168 + local.get $l1167 + local.get $l1168 + i32.add + local.set $l1169 + local.get $l1168 + local.get $l1169 + i32.add + local.set $l1170 + local.get $l1169 + local.get $l1170 + i32.add + local.set $l1171 + local.get $l1170 + local.get $l1171 + i32.add + local.set $l1172 + local.get $l1171 + local.get $l1172 + i32.add + local.set $l1173 + local.get $l1172 + local.get $l1173 + i32.add + local.set $l1174 + local.get $l1173 + local.get $l1174 + i32.add + local.set $l1175 + local.get $l1174 + local.get $l1175 + i32.add + local.set $l1176 + local.get $l1175 + local.get $l1176 + i32.add + local.set $l1177 + local.get $l1176 + local.get $l1177 + i32.add + local.set $l1178 + local.get $l1177 + local.get $l1178 + i32.add + local.set $l1179 + local.get $l1178 + local.get $l1179 + i32.add + local.set $l1180 + local.get $l1179 + local.get $l1180 + i32.add + local.set $l1181 + local.get $l1180 + local.get $l1181 + i32.add + local.set $l1182 + local.get $l1181 + local.get $l1182 + i32.add + local.set $l1183 + local.get $l1182 + local.get $l1183 + i32.add + local.set $l1184 + local.get $l1183 + local.get $l1184 + i32.add + local.set $l1185 + local.get $l1184 + local.get $l1185 + i32.add + local.set $l1186 + local.get $l1185 + local.get $l1186 + i32.add + local.set $l1187 + local.get $l1186 + local.get $l1187 + i32.add + local.set $l1188 + local.get $l1187 + local.get $l1188 + i32.add + local.set $l1189 + local.get $l1188 + local.get $l1189 + i32.add + local.set $l1190 + local.get $l1189 + local.get $l1190 + i32.add + local.set $l1191 + local.get $l1190 + local.get $l1191 + i32.add + local.set $l1192 + local.get $l1191 + local.get $l1192 + i32.add + local.set $l1193 + local.get $l1192 + local.get $l1193 + i32.add + local.set $l1194 + local.get $l1193 + local.get $l1194 + i32.add + local.set $l1195 + local.get $l1194 + local.get $l1195 + i32.add + local.set $l1196 + local.get $l1195 + local.get $l1196 + i32.add + local.set $l1197 + local.get $l1196 + local.get $l1197 + i32.add + local.set $l1198 + local.get $l1197 + local.get $l1198 + i32.add + local.set $l1199 + local.get $l1198 + local.get $l1199 + i32.add + local.set $l1200 + local.get $l1199 + local.get $l1200 + i32.add + local.set $l1201 + local.get $l1200 + local.get $l1201 + i32.add + local.set $l1202 + local.get $l1201 + local.get $l1202 + i32.add + local.set $l1203 + local.get $l1202 + local.get $l1203 + i32.add + local.set $l1204 + local.get $l1203 + local.get $l1204 + i32.add + local.set $l1205 + local.get $l1204 + local.get $l1205 + i32.add + local.set $l1206 + local.get $l1205 + local.get $l1206 + i32.add + local.set $l1207 + local.get $l1206 + local.get $l1207 + i32.add + local.set $l1208 + local.get $l1207 + local.get $l1208 + i32.add + local.set $l1209 + local.get $l1208 + local.get $l1209 + i32.add + local.set $l1210 + local.get $l1209 + local.get $l1210 + i32.add + local.set $l1211 + local.get $l1210 + local.get $l1211 + i32.add + local.set $l1212 + local.get $l1211 + local.get $l1212 + i32.add + local.set $l1213 + local.get $l1212 + local.get $l1213 + i32.add + local.set $l1214 + local.get $l1213 + local.get $l1214 + i32.add + local.set $l1215 + local.get $l1214 + local.get $l1215 + i32.add + local.set $l1216 + local.get $l1215 + local.get $l1216 + i32.add + local.set $l1217 + local.get $l1216 + local.get $l1217 + i32.add + local.set $l1218 + local.get $l1217 + local.get $l1218 + i32.add + local.set $l1219 + local.get $l1218 + local.get $l1219 + i32.add + local.set $l1220 + local.get $l1219 + local.get $l1220 + i32.add + local.set $l1221 + local.get $l1220 + local.get $l1221 + i32.add + local.set $l1222 + local.get $l1221 + local.get $l1222 + i32.add + local.set $l1223 + local.get $l1222 + local.get $l1223 + i32.add + local.set $l1224 + local.get $l1223 + local.get $l1224 + i32.add + local.set $l1225 + local.get $l1224 + local.get $l1225 + i32.add + local.set $l1226 + local.get $l1225 + local.get $l1226 + i32.add + local.set $l1227 + local.get $l1226 + local.get $l1227 + i32.add + local.set $l1228 + local.get $l1227 + local.get $l1228 + i32.add + local.set $l1229 + local.get $l1228 + local.get $l1229 + i32.add + local.set $l1230 + local.get $l1229 + local.get $l1230 + i32.add + local.set $l1231 + local.get $l1230 + local.get $l1231 + i32.add + local.set $l1232 + local.get $l1231 + local.get $l1232 + i32.add + local.set $l1233 + local.get $l1232 + local.get $l1233 + i32.add + local.set $l1234 + local.get $l1233 + local.get $l1234 + i32.add + local.set $l1235 + local.get $l1234 + local.get $l1235 + i32.add + local.set $l1236 + local.get $l1235 + local.get $l1236 + i32.add + local.set $l1237 + local.get $l1236 + local.get $l1237 + i32.add + local.set $l1238 + local.get $l1237 + local.get $l1238 + i32.add + local.set $l1239 + local.get $l1238 + local.get $l1239 + i32.add + local.set $l1240 + local.get $l1239 + local.get $l1240 + i32.add + local.set $l1241 + local.get $l1240 + local.get $l1241 + i32.add + local.set $l1242 + local.get $l1241 + local.get $l1242 + i32.add + local.set $l1243 + local.get $l1242 + local.get $l1243 + i32.add + local.set $l1244 + local.get $l1243 + local.get $l1244 + i32.add + local.set $l1245 + local.get $l1244 + local.get $l1245 + i32.add + local.set $l1246 + local.get $l1245 + local.get $l1246 + i32.add + local.set $l1247 + local.get $l1246 + local.get $l1247 + i32.add + local.set $l1248 + local.get $l1247 + local.get $l1248 + i32.add + local.set $l1249 + local.get $l1248 + local.get $l1249 + i32.add + local.set $l1250 + local.get $l1249 + local.get $l1250 + i32.add + local.set $l1251 + local.get $l1250 + local.get $l1251 + i32.add + local.set $l1252 + local.get $l1251 + local.get $l1252 + i32.add + local.set $l1253 + local.get $l1252 + local.get $l1253 + i32.add + local.set $l1254 + local.get $l1253 + local.get $l1254 + i32.add + local.set $l1255 + local.get $l1254 + local.get $l1255 + i32.add + local.set $l1256 + local.get $l1255 + local.get $l1256 + i32.add + local.set $l1257 + local.get $l1256 + local.get $l1257 + i32.add + local.set $l1258 + local.get $l1257 + local.get $l1258 + i32.add + local.set $l1259 + local.get $l1258 + local.get $l1259 + i32.add + local.set $l1260 + local.get $l1259 + local.get $l1260 + i32.add + local.set $l1261 + local.get $l1260 + local.get $l1261 + i32.add + local.set $l1262 + local.get $l1261 + local.get $l1262 + i32.add + local.set $l1263 + local.get $l1262 + local.get $l1263 + i32.add + local.set $l1264 + local.get $l1263 + local.get $l1264 + i32.add + local.set $l1265 + local.get $l1264 + local.get $l1265 + i32.add + local.set $l1266 + local.get $l1265 + local.get $l1266 + i32.add + local.set $l1267 + local.get $l1266 + local.get $l1267 + i32.add + local.set $l1268 + local.get $l1267 + local.get $l1268 + i32.add + local.set $l1269 + local.get $l1268 + local.get $l1269 + i32.add + local.set $l1270 + local.get $l1269 + local.get $l1270 + i32.add + local.set $l1271 + local.get $l1270 + local.get $l1271 + i32.add + local.set $l1272 + local.get $l1271 + local.get $l1272 + i32.add + local.set $l1273 + local.get $l1272 + local.get $l1273 + i32.add + local.set $l1274 + local.get $l1273 + local.get $l1274 + i32.add + local.set $l1275 + local.get $l1274 + local.get $l1275 + i32.add + local.set $l1276 + local.get $l1275 + local.get $l1276 + i32.add + local.set $l1277 + local.get $l1276 + local.get $l1277 + i32.add + local.set $l1278 + local.get $l1277 + local.get $l1278 + i32.add + local.set $l1279 + local.get $l1278 + local.get $l1279 + i32.add + local.set $l1280 + local.get $l1279 + local.get $l1280 + i32.add + local.set $l1281 + local.get $l1280 + local.get $l1281 + i32.add + local.set $l1282 + local.get $l1281 + local.get $l1282 + i32.add + local.set $l1283 + local.get $l1282 + local.get $l1283 + i32.add + local.set $l1284 + local.get $l1283 + local.get $l1284 + i32.add + local.set $l1285 + local.get $l1284 + local.get $l1285 + i32.add + local.set $l1286 + local.get $l1285 + local.get $l1286 + i32.add + local.set $l1287 + local.get $l1286 + local.get $l1287 + i32.add + local.set $l1288 + local.get $l1287 + local.get $l1288 + i32.add + local.set $l1289 + local.get $l1288 + local.get $l1289 + i32.add + local.set $l1290 + local.get $l1289 + local.get $l1290 + i32.add + local.set $l1291 + local.get $l1290 + local.get $l1291 + i32.add + local.set $l1292 + local.get $l1291 + local.get $l1292 + i32.add + local.set $l1293 + local.get $l1292 + local.get $l1293 + i32.add + local.set $l1294 + local.get $l1293 + local.get $l1294 + i32.add + local.set $l1295 + local.get $l1294 + local.get $l1295 + i32.add + local.set $l1296 + local.get $l1295 + local.get $l1296 + i32.add + local.set $l1297 + local.get $l1296 + local.get $l1297 + i32.add + local.set $l1298 + local.get $l1297 + local.get $l1298 + i32.add + local.set $l1299 + local.get $l1298 + local.get $l1299 + i32.add + local.set $l1300 + local.get $l1299 + local.get $l1300 + i32.add + local.set $l1301 + local.get $l1300 + local.get $l1301 + i32.add + local.set $l1302 + local.get $l1301 + local.get $l1302 + i32.add + local.set $l1303 + local.get $l1302 + local.get $l1303 + i32.add + local.set $l1304 + local.get $l1303 + local.get $l1304 + i32.add + local.set $l1305 + local.get $l1304 + local.get $l1305 + i32.add + local.set $l1306 + local.get $l1305 + local.get $l1306 + i32.add + local.set $l1307 + local.get $l1306 + local.get $l1307 + i32.add + local.set $l1308 + local.get $l1307 + local.get $l1308 + i32.add + local.set $l1309 + local.get $l1308 + local.get $l1309 + i32.add + local.set $l1310 + local.get $l1309 + local.get $l1310 + i32.add + local.set $l1311 + local.get $l1310 + local.get $l1311 + i32.add + local.set $l1312 + local.get $l1311 + local.get $l1312 + i32.add + local.set $l1313 + local.get $l1312 + local.get $l1313 + i32.add + local.set $l1314 + local.get $l1313 + local.get $l1314 + i32.add + local.set $l1315 + local.get $l1314 + local.get $l1315 + i32.add + local.set $l1316 + local.get $l1315 + local.get $l1316 + i32.add + local.set $l1317 + local.get $l1316 + local.get $l1317 + i32.add + local.set $l1318 + local.get $l1317 + local.get $l1318 + i32.add + local.set $l1319 + local.get $l1318 + local.get $l1319 + i32.add + local.set $l1320 + local.get $l1319 + local.get $l1320 + i32.add + local.set $l1321 + local.get $l1320 + local.get $l1321 + i32.add + local.set $l1322 + local.get $l1321 + local.get $l1322 + i32.add + local.set $l1323 + local.get $l1322 + local.get $l1323 + i32.add + local.set $l1324 + local.get $l1323 + local.get $l1324 + i32.add + local.set $l1325 + local.get $l1324 + local.get $l1325 + i32.add + local.set $l1326 + local.get $l1325 + local.get $l1326 + i32.add + local.set $l1327 + local.get $l1326 + local.get $l1327 + i32.add + local.set $l1328 + local.get $l1327 + local.get $l1328 + i32.add + local.set $l1329 + local.get $l1328 + local.get $l1329 + i32.add + local.set $l1330 + local.get $l1329 + local.get $l1330 + i32.add + local.set $l1331 + local.get $l1330 + local.get $l1331 + i32.add + local.set $l1332 + local.get $l1331 + local.get $l1332 + i32.add + local.set $l1333 + local.get $l1332 + local.get $l1333 + i32.add + local.set $l1334 + local.get $l1333 + local.get $l1334 + i32.add + local.set $l1335 + local.get $l1334 + local.get $l1335 + i32.add + local.set $l1336 + local.get $l1335 + local.get $l1336 + i32.add + local.set $l1337 + local.get $l1336 + local.get $l1337 + i32.add + local.set $l1338 + local.get $l1337 + local.get $l1338 + i32.add + local.set $l1339 + local.get $l1338 + local.get $l1339 + i32.add + local.set $l1340 + local.get $l1339 + local.get $l1340 + i32.add + local.set $l1341 + local.get $l1340 + local.get $l1341 + i32.add + local.set $l1342 + local.get $l1341 + local.get $l1342 + i32.add + local.set $l1343 + local.get $l1342 + local.get $l1343 + i32.add + local.set $l1344 + local.get $l1343 + local.get $l1344 + i32.add + local.set $l1345 + local.get $l1344 + local.get $l1345 + i32.add + local.set $l1346 + local.get $l1345 + local.get $l1346 + i32.add + local.set $l1347 + local.get $l1346 + local.get $l1347 + i32.add + local.set $l1348 + local.get $l1347 + local.get $l1348 + i32.add + local.set $l1349 + local.get $l1348 + local.get $l1349 + i32.add + local.set $l1350 + local.get $l1349 + local.get $l1350 + i32.add + local.set $l1351 + local.get $l1350 + local.get $l1351 + i32.add + local.set $l1352 + local.get $l1351 + local.get $l1352 + i32.add + local.set $l1353 + local.get $l1352 + local.get $l1353 + i32.add + local.set $l1354 + local.get $l1353 + local.get $l1354 + i32.add + local.set $l1355 + local.get $l1354 + local.get $l1355 + i32.add + local.set $l1356 + local.get $l1355 + local.get $l1356 + i32.add + local.set $l1357 + local.get $l1356 + local.get $l1357 + i32.add + local.set $l1358 + local.get $l1357 + local.get $l1358 + i32.add + local.set $l1359 + local.get $l1358 + local.get $l1359 + i32.add + local.set $l1360 + local.get $l1359 + local.get $l1360 + i32.add + local.set $l1361 + local.get $l1360 + local.get $l1361 + i32.add + local.set $l1362 + local.get $l1361 + local.get $l1362 + i32.add + local.set $l1363 + local.get $l1362 + local.get $l1363 + i32.add + local.set $l1364 + local.get $l1363 + local.get $l1364 + i32.add + local.set $l1365 + local.get $l1364 + local.get $l1365 + i32.add + local.set $l1366 + local.get $l1365 + local.get $l1366 + i32.add + local.set $l1367 + local.get $l1366 + local.get $l1367 + i32.add + local.set $l1368 + local.get $l1367 + local.get $l1368 + i32.add + local.set $l1369 + local.get $l1368 + local.get $l1369 + i32.add + local.set $l1370 + local.get $l1369 + local.get $l1370 + i32.add + local.set $l1371 + local.get $l1370 + local.get $l1371 + i32.add + local.set $l1372 + local.get $l1371 + local.get $l1372 + i32.add + local.set $l1373 + local.get $l1372 + local.get $l1373 + i32.add + local.set $l1374 + local.get $l1373 + local.get $l1374 + i32.add + local.set $l1375 + local.get $l1374 + local.get $l1375 + i32.add + local.set $l1376 + local.get $l1375 + local.get $l1376 + i32.add + local.set $l1377 + local.get $l1376 + local.get $l1377 + i32.add + local.set $l1378 + local.get $l1377 + local.get $l1378 + i32.add + local.set $l1379 + local.get $l1378 + local.get $l1379 + i32.add + local.set $l1380 + local.get $l1379 + local.get $l1380 + i32.add + local.set $l1381 + local.get $l1380 + local.get $l1381 + i32.add + local.set $l1382 + local.get $l1381 + local.get $l1382 + i32.add + local.set $l1383 + local.get $l1382 + local.get $l1383 + i32.add + local.set $l1384 + local.get $l1383 + local.get $l1384 + i32.add + local.set $l1385 + local.get $l1384 + local.get $l1385 + i32.add + local.set $l1386 + local.get $l1385 + local.get $l1386 + i32.add + local.set $l1387 + local.get $l1386 + local.get $l1387 + i32.add + local.set $l1388 + local.get $l1387 + local.get $l1388 + i32.add + local.set $l1389 + local.get $l1388 + local.get $l1389 + i32.add + local.set $l1390 + local.get $l1389 + local.get $l1390 + i32.add + local.set $l1391 + local.get $l1390 + local.get $l1391 + i32.add + local.set $l1392 + local.get $l1391 + local.get $l1392 + i32.add + local.set $l1393 + local.get $l1392 + local.get $l1393 + i32.add + local.set $l1394 + local.get $l1393 + local.get $l1394 + i32.add + local.set $l1395 + local.get $l1394 + local.get $l1395 + i32.add + local.set $l1396 + local.get $l1395 + local.get $l1396 + i32.add + local.set $l1397 + local.get $l1396 + local.get $l1397 + i32.add + local.set $l1398 + local.get $l1397 + local.get $l1398 + i32.add + local.set $l1399 + local.get $l1398 + local.get $l1399 + i32.add + local.set $l1400 + local.get $l1399 + local.get $l1400 + i32.add + local.set $l1401 + local.get $l1400 + local.get $l1401 + i32.add + local.set $l1402 + local.get $l1401 + local.get $l1402 + i32.add + local.set $l1403 + local.get $l1402 + local.get $l1403 + i32.add + local.set $l1404 + local.get $l1403 + local.get $l1404 + i32.add + local.set $l1405 + local.get $l1404 + local.get $l1405 + i32.add + local.set $l1406 + local.get $l1405 + local.get $l1406 + i32.add + local.set $l1407 + local.get $l1406 + local.get $l1407 + i32.add + local.set $l1408 + local.get $l1407 + local.get $l1408 + i32.add + local.set $l1409 + local.get $l1408 + local.get $l1409 + i32.add + local.set $l1410 + local.get $l1409 + local.get $l1410 + i32.add + local.set $l1411 + local.get $l1410 + local.get $l1411 + i32.add + local.set $l1412 + local.get $l1411 + local.get $l1412 + i32.add + local.set $l1413 + local.get $l1412 + local.get $l1413 + i32.add + local.set $l1414 + local.get $l1413 + local.get $l1414 + i32.add + local.set $l1415 + local.get $l1414 + local.get $l1415 + i32.add + local.set $l1416 + local.get $l1415 + local.get $l1416 + i32.add + local.set $l1417 + local.get $l1416 + local.get $l1417 + i32.add + local.set $l1418 + local.get $l1417 + local.get $l1418 + i32.add + local.set $l1419 + local.get $l1418 + local.get $l1419 + i32.add + local.set $l1420 + local.get $l1419 + local.get $l1420 + i32.add + local.set $l1421 + local.get $l1420 + local.get $l1421 + i32.add + local.set $l1422 + local.get $l1421 + local.get $l1422 + i32.add + local.set $l1423 + local.get $l1422 + local.get $l1423 + i32.add + local.set $l1424 + local.get $l1423 + local.get $l1424 + i32.add + local.set $l1425 + local.get $l1424 + local.get $l1425 + i32.add + local.set $l1426 + local.get $l1425 + local.get $l1426 + i32.add + local.set $l1427 + local.get $l1426 + local.get $l1427 + i32.add + local.set $l1428 + local.get $l1427 + local.get $l1428 + i32.add + local.set $l1429 + local.get $l1428 + local.get $l1429 + i32.add + local.set $l1430 + local.get $l1429 + local.get $l1430 + i32.add + local.set $l1431 + local.get $l1430 + local.get $l1431 + i32.add + local.set $l1432 + local.get $l1431 + local.get $l1432 + i32.add + local.set $l1433 + local.get $l1432 + local.get $l1433 + i32.add + local.set $l1434 + local.get $l1433 + local.get $l1434 + i32.add + local.set $l1435 + local.get $l1434 + local.get $l1435 + i32.add + local.set $l1436 + local.get $l1435 + local.get $l1436 + i32.add + local.set $l1437 + local.get $l1436 + local.get $l1437 + i32.add + local.set $l1438 + local.get $l1437 + local.get $l1438 + i32.add + local.set $l1439 + local.get $l1438 + local.get $l1439 + i32.add + local.set $l1440 + local.get $l1439 + local.get $l1440 + i32.add + local.set $l1441 + local.get $l1440 + local.get $l1441 + i32.add + local.set $l1442 + local.get $l1441 + local.get $l1442 + i32.add + local.set $l1443 + local.get $l1442 + local.get $l1443 + i32.add + local.set $l1444 + local.get $l1443 + local.get $l1444 + i32.add + local.set $l1445 + local.get $l1444 + local.get $l1445 + i32.add + local.set $l1446 + local.get $l1445 + local.get $l1446 + i32.add + local.set $l1447 + local.get $l1446 + local.get $l1447 + i32.add + local.set $l1448 + local.get $l1447 + local.get $l1448 + i32.add + local.set $l1449 + local.get $l1448 + local.get $l1449 + i32.add + local.set $l1450 + local.get $l1449 + local.get $l1450 + i32.add + local.set $l1451 + local.get $l1450 + local.get $l1451 + i32.add + local.set $l1452 + local.get $l1451 + local.get $l1452 + i32.add + local.set $l1453 + local.get $l1452 + local.get $l1453 + i32.add + local.set $l1454 + local.get $l1453 + local.get $l1454 + i32.add + local.set $l1455 + local.get $l1454 + local.get $l1455 + i32.add + local.set $l1456 + local.get $l1455 + local.get $l1456 + i32.add + local.set $l1457 + local.get $l1456 + local.get $l1457 + i32.add + local.set $l1458 + local.get $l1457 + local.get $l1458 + i32.add + local.set $l1459 + local.get $l1458 + local.get $l1459 + i32.add + local.set $l1460 + local.get $l1459 + local.get $l1460 + i32.add + local.set $l1461 + local.get $l1460 + local.get $l1461 + i32.add + local.set $l1462 + local.get $l1461 + local.get $l1462 + i32.add + local.set $l1463 + local.get $l1462 + local.get $l1463 + i32.add + local.set $l1464 + local.get $l1463 + local.get $l1464 + i32.add + local.set $l1465 + local.get $l1464 + local.get $l1465 + i32.add + local.set $l1466 + local.get $l1465 + local.get $l1466 + i32.add + local.set $l1467 + local.get $l1466 + local.get $l1467 + i32.add + local.set $l1468 + local.get $l1467 + local.get $l1468 + i32.add + local.set $l1469 + local.get $l1468 + local.get $l1469 + i32.add + local.set $l1470 + local.get $l1469 + local.get $l1470 + i32.add + local.set $l1471 + local.get $l1470 + local.get $l1471 + i32.add + local.set $l1472 + local.get $l1471 + local.get $l1472 + i32.add + local.set $l1473 + local.get $l1472 + local.get $l1473 + i32.add + local.set $l1474 + local.get $l1473 + local.get $l1474 + i32.add + local.set $l1475 + local.get $l1474 + local.get $l1475 + i32.add + local.set $l1476 + local.get $l1475 + local.get $l1476 + i32.add + local.set $l1477 + local.get $l1476 + local.get $l1477 + i32.add + local.set $l1478 + local.get $l1477 + local.get $l1478 + i32.add + local.set $l1479 + local.get $l1478 + local.get $l1479 + i32.add + local.set $l1480 + local.get $l1479 + local.get $l1480 + i32.add + local.set $l1481 + local.get $l1480 + local.get $l1481 + i32.add + local.set $l1482 + local.get $l1481 + local.get $l1482 + i32.add + local.set $l1483 + local.get $l1482 + local.get $l1483 + i32.add + local.set $l1484 + local.get $l1483 + local.get $l1484 + i32.add + local.set $l1485 + local.get $l1484 + local.get $l1485 + i32.add + local.set $l1486 + local.get $l1485 + local.get $l1486 + i32.add + local.set $l1487 + local.get $l1486 + local.get $l1487 + i32.add + local.set $l1488 + local.get $l1487 + local.get $l1488 + i32.add + local.set $l1489 + local.get $l1488 + local.get $l1489 + i32.add + local.set $l1490 + local.get $l1489 + local.get $l1490 + i32.add + local.set $l1491 + local.get $l1490 + local.get $l1491 + i32.add + local.set $l1492 + local.get $l1491 + local.get $l1492 + i32.add + local.set $l1493 + local.get $l1492 + local.get $l1493 + i32.add + local.set $l1494 + local.get $l1493 + local.get $l1494 + i32.add + local.set $l1495 + local.get $l1494 + local.get $l1495 + i32.add + local.set $l1496 + local.get $l1495 + local.get $l1496 + i32.add + local.set $l1497 + local.get $l1496 + local.get $l1497 + i32.add + local.set $l1498 + local.get $l1497 + local.get $l1498 + i32.add + local.set $l1499 + local.get $l1498 + local.get $l1499 + i32.add + local.set $l1500 + local.get $l1499 + local.get $l1500 + i32.add + local.set $l1501 + local.get $l1500 + local.get $l1501 + i32.add + local.set $l1502 + local.get $l1501 + local.get $l1502 + i32.add + local.set $l1503 + local.get $l1502 + local.get $l1503 + i32.add + local.set $l1504 + local.get $l1503 + local.get $l1504 + i32.add + local.set $l1505 + local.get $l1504 + local.get $l1505 + i32.add + local.set $l1506 + local.get $l1505 + local.get $l1506 + i32.add + local.set $l1507 + local.get $l1506 + local.get $l1507 + i32.add + local.set $l1508 + local.get $l1507 + local.get $l1508 + i32.add + local.set $l1509 + local.get $l1508 + local.get $l1509 + i32.add + local.set $l1510 + local.get $l1509 + local.get $l1510 + i32.add + local.set $l1511 + local.get $l1510 + local.get $l1511 + i32.add + local.set $l1512 + local.get $l1511 + local.get $l1512 + i32.add + local.set $l1513 + local.get $l1512 + local.get $l1513 + i32.add + local.set $l1514 + local.get $l1513 + local.get $l1514 + i32.add + local.set $l1515 + local.get $l1514 + local.get $l1515 + i32.add + local.set $l1516 + local.get $l1515 + local.get $l1516 + i32.add + local.set $l1517 + local.get $l1516 + local.get $l1517 + i32.add + local.set $l1518 + local.get $l1517 + local.get $l1518 + i32.add + local.set $l1519 + local.get $l1518 + local.get $l1519 + i32.add + local.set $l1520 + local.get $l1519 + local.get $l1520 + i32.add + local.set $l1521 + local.get $l1520 + local.get $l1521 + i32.add + local.set $l1522 + local.get $l1521 + local.get $l1522 + i32.add + local.set $l1523 + local.get $l1522 + local.get $l1523 + i32.add + local.set $l1524 + local.get $l1523 + local.get $l1524 + i32.add + local.set $l1525 + local.get $l1524 + local.get $l1525 + i32.add + local.set $l1526 + local.get $l1525 + local.get $l1526 + i32.add + local.set $l1527 + local.get $l1526 + local.get $l1527 + i32.add + local.set $l1528 + local.get $l1527 + local.get $l1528 + i32.add + local.set $l1529 + local.get $l1528 + local.get $l1529 + i32.add + local.set $l1530 + local.get $l1529 + local.get $l1530 + i32.add + local.set $l1531 + local.get $l1530 + local.get $l1531 + i32.add + local.set $l1532 + local.get $l1531 + local.get $l1532 + i32.add + local.set $l1533 + local.get $l1532 + local.get $l1533 + i32.add + local.set $l1534 + local.get $l1533 + local.get $l1534 + i32.add + local.set $l1535 + local.get $l1534 + local.get $l1535 + i32.add + local.set $l1536 + local.get $l1535 + local.get $l1536 + i32.add + local.set $l1537 + local.get $l1536 + local.get $l1537 + i32.add + local.set $l1538 + local.get $l1537 + local.get $l1538 + i32.add + local.set $l1539 + local.get $l1538 + local.get $l1539 + i32.add + local.set $l1540 + local.get $l1539 + local.get $l1540 + i32.add + local.set $l1541 + local.get $l1540 + local.get $l1541 + i32.add + local.set $l1542 + local.get $l1541 + local.get $l1542 + i32.add + local.set $l1543 + local.get $l1542 + local.get $l1543 + i32.add + local.set $l1544 + local.get $l1543 + local.get $l1544 + i32.add + local.set $l1545 + local.get $l1544 + local.get $l1545 + i32.add + local.set $l1546 + local.get $l1545 + local.get $l1546 + i32.add + local.set $l1547 + local.get $l1546 + local.get $l1547 + i32.add + local.set $l1548 + local.get $l1547 + local.get $l1548 + i32.add + local.set $l1549 + local.get $l1548 + local.get $l1549 + i32.add + local.set $l1550 + local.get $l1549 + local.get $l1550 + i32.add + local.set $l1551 + local.get $l1550 + local.get $l1551 + i32.add + local.set $l1552 + local.get $l1551 + local.get $l1552 + i32.add + local.set $l1553 + local.get $l1552 + local.get $l1553 + i32.add + local.set $l1554 + local.get $l1553 + local.get $l1554 + i32.add + local.set $l1555 + local.get $l1554 + local.get $l1555 + i32.add + local.set $l1556 + local.get $l1555 + local.get $l1556 + i32.add + local.set $l1557 + local.get $l1556 + local.get $l1557 + i32.add + local.set $l1558 + local.get $l1557 + local.get $l1558 + i32.add + local.set $l1559 + local.get $l1558 + local.get $l1559 + i32.add + local.set $l1560 + local.get $l1559 + local.get $l1560 + i32.add + local.set $l1561 + local.get $l1560 + local.get $l1561 + i32.add + local.set $l1562 + local.get $l1561 + local.get $l1562 + i32.add + local.set $l1563 + local.get $l1562 + local.get $l1563 + i32.add + local.set $l1564 + local.get $l1563 + local.get $l1564 + i32.add + local.set $l1565 + local.get $l1564 + local.get $l1565 + i32.add + local.set $l1566 + local.get $l1565 + local.get $l1566 + i32.add + local.set $l1567 + local.get $l1566 + local.get $l1567 + i32.add + local.set $l1568 + local.get $l1567 + local.get $l1568 + i32.add + local.set $l1569 + local.get $l1568 + local.get $l1569 + i32.add + local.set $l1570 + local.get $l1569 + local.get $l1570 + i32.add + local.set $l1571 + local.get $l1570 + local.get $l1571 + i32.add + local.set $l1572 + local.get $l1571 + local.get $l1572 + i32.add + local.set $l1573 + local.get $l1572 + local.get $l1573 + i32.add + local.set $l1574 + local.get $l1573 + local.get $l1574 + i32.add + local.set $l1575 + local.get $l1574 + local.get $l1575 + i32.add + local.set $l1576 + local.get $l1575 + local.get $l1576 + i32.add + local.set $l1577 + local.get $l1576 + local.get $l1577 + i32.add + local.set $l1578 + local.get $l1577 + local.get $l1578 + i32.add + local.set $l1579 + local.get $l1578 + local.get $l1579 + i32.add + local.set $l1580 + local.get $l1579 + local.get $l1580 + i32.add + local.set $l1581 + local.get $l1580 + local.get $l1581 + i32.add + local.set $l1582 + local.get $l1581 + local.get $l1582 + i32.add + local.set $l1583 + local.get $l1582 + local.get $l1583 + i32.add + local.set $l1584 + local.get $l1583 + local.get $l1584 + i32.add + local.set $l1585 + local.get $l1584 + local.get $l1585 + i32.add + local.set $l1586 + local.get $l1585 + local.get $l1586 + i32.add + local.set $l1587 + local.get $l1586 + local.get $l1587 + i32.add + local.set $l1588 + local.get $l1587 + local.get $l1588 + i32.add + local.set $l1589 + local.get $l1588 + local.get $l1589 + i32.add + local.set $l1590 + local.get $l1589 + local.get $l1590 + i32.add + local.set $l1591 + local.get $l1590 + local.get $l1591 + i32.add + local.set $l1592 + local.get $l1591 + local.get $l1592 + i32.add + local.set $l1593 + local.get $l1592 + local.get $l1593 + i32.add + local.set $l1594 + local.get $l1593 + local.get $l1594 + i32.add + local.set $l1595 + local.get $l1594 + local.get $l1595 + i32.add + local.set $l1596 + local.get $l1595 + local.get $l1596 + i32.add + local.set $l1597 + local.get $l1596 + local.get $l1597 + i32.add + local.set $l1598 + local.get $l1597 + local.get $l1598 + i32.add + local.set $l1599 + local.get $l1598 + local.get $l1599 + i32.add + local.set $l1600 + local.get $l1599 + local.get $l1600 + i32.add + local.set $l1601 + local.get $l1600 + local.get $l1601 + i32.add + local.set $l1602 + local.get $l1601 + local.get $l1602 + i32.add + local.set $l1603 + local.get $l1602 + local.get $l1603 + i32.add + local.set $l1604 + local.get $l1603 + local.get $l1604 + i32.add + local.set $l1605 + local.get $l1604 + local.get $l1605 + i32.add + local.set $l1606 + local.get $l1605 + local.get $l1606 + i32.add + local.set $l1607 + local.get $l1606 + local.get $l1607 + i32.add + local.set $l1608 + local.get $l1607 + local.get $l1608 + i32.add + local.set $l1609 + local.get $l1608 + local.get $l1609 + i32.add + local.set $l1610 + local.get $l1609 + local.get $l1610 + i32.add + local.set $l1611 + local.get $l1610 + local.get $l1611 + i32.add + local.set $l1612 + local.get $l1611 + local.get $l1612 + i32.add + local.set $l1613 + local.get $l1612 + local.get $l1613 + i32.add + local.set $l1614 + local.get $l1613 + local.get $l1614 + i32.add + local.set $l1615 + local.get $l1614 + local.get $l1615 + i32.add + local.set $l1616 + local.get $l1615 + local.get $l1616 + i32.add + local.set $l1617 + local.get $l1616 + local.get $l1617 + i32.add + local.set $l1618 + local.get $l1617 + local.get $l1618 + i32.add + local.set $l1619 + local.get $l1618 + local.get $l1619 + i32.add + local.set $l1620 + local.get $l1619 + local.get $l1620 + i32.add + local.set $l1621 + local.get $l1620 + local.get $l1621 + i32.add + local.set $l1622 + local.get $l1621 + local.get $l1622 + i32.add + local.set $l1623 + local.get $l1622 + local.get $l1623 + i32.add + local.set $l1624 + local.get $l1623 + local.get $l1624 + i32.add + local.set $l1625 + local.get $l1624 + local.get $l1625 + i32.add + local.set $l1626 + local.get $l1625 + local.get $l1626 + i32.add + local.set $l1627 + local.get $l1626 + local.get $l1627 + i32.add + local.set $l1628 + local.get $l1627 + local.get $l1628 + i32.add + local.set $l1629 + local.get $l1628 + local.get $l1629 + i32.add + local.set $l1630 + local.get $l1629 + local.get $l1630 + i32.add + local.set $l1631 + local.get $l1630 + local.get $l1631 + i32.add + local.set $l1632 + local.get $l1631 + local.get $l1632 + i32.add + local.set $l1633 + local.get $l1632 + local.get $l1633 + i32.add + local.set $l1634 + local.get $l1633 + local.get $l1634 + i32.add + local.set $l1635 + local.get $l1634 + local.get $l1635 + i32.add + local.set $l1636 + local.get $l1635 + local.get $l1636 + i32.add + local.set $l1637 + local.get $l1636 + local.get $l1637 + i32.add + local.set $l1638 + local.get $l1637 + local.get $l1638 + i32.add + local.set $l1639 + local.get $l1638 + local.get $l1639 + i32.add + local.set $l1640 + local.get $l1639 + local.get $l1640 + i32.add + local.set $l1641 + local.get $l1640 + local.get $l1641 + i32.add + local.set $l1642 + local.get $l1641 + local.get $l1642 + i32.add + local.set $l1643 + local.get $l1642 + local.get $l1643 + i32.add + local.set $l1644 + local.get $l1643 + local.get $l1644 + i32.add + local.set $l1645 + local.get $l1644 + local.get $l1645 + i32.add + local.set $l1646 + local.get $l1645 + local.get $l1646 + i32.add + local.set $l1647 + local.get $l1646 + local.get $l1647 + i32.add + local.set $l1648 + local.get $l1647 + local.get $l1648 + i32.add + local.set $l1649 + local.get $l1648 + local.get $l1649 + i32.add + local.set $l1650 + local.get $l1649 + local.get $l1650 + i32.add + local.set $l1651 + local.get $l1650 + local.get $l1651 + i32.add + local.set $l1652 + local.get $l1651 + local.get $l1652 + i32.add + local.set $l1653 + local.get $l1652 + local.get $l1653 + i32.add + local.set $l1654 + local.get $l1653 + local.get $l1654 + i32.add + local.set $l1655 + local.get $l1654 + local.get $l1655 + i32.add + local.set $l1656 + local.get $l1655 + local.get $l1656 + i32.add + local.set $l1657 + local.get $l1656 + local.get $l1657 + i32.add + local.set $l1658 + local.get $l1657 + local.get $l1658 + i32.add + local.set $l1659 + local.get $l1658 + local.get $l1659 + i32.add + local.set $l1660 + local.get $l1659 + local.get $l1660 + i32.add + local.set $l1661 + local.get $l1660 + local.get $l1661 + i32.add + local.set $l1662 + local.get $l1661 + local.get $l1662 + i32.add + local.set $l1663 + local.get $l1662 + local.get $l1663 + i32.add + local.set $l1664 + local.get $l1663 + local.get $l1664 + i32.add + local.set $l1665 + local.get $l1664 + local.get $l1665 + i32.add + local.set $l1666 + local.get $l1665 + local.get $l1666 + i32.add + local.set $l1667 + local.get $l1666 + local.get $l1667 + i32.add + local.set $l1668 + local.get $l1667 + local.get $l1668 + i32.add + local.set $l1669 + local.get $l1668 + local.get $l1669 + i32.add + local.set $l1670 + local.get $l1669 + local.get $l1670 + i32.add + local.set $l1671 + local.get $l1670 + local.get $l1671 + i32.add + local.set $l1672 + local.get $l1671 + local.get $l1672 + i32.add + local.set $l1673 + local.get $l1672 + local.get $l1673 + i32.add + local.set $l1674 + local.get $l1673 + local.get $l1674 + i32.add + local.set $l1675 + local.get $l1674 + local.get $l1675 + i32.add + local.set $l1676 + local.get $l1675 + local.get $l1676 + i32.add + local.set $l1677 + local.get $l1676 + local.get $l1677 + i32.add + local.set $l1678 + local.get $l1677 + local.get $l1678 + i32.add + local.set $l1679 + local.get $l1678 + local.get $l1679 + i32.add + local.set $l1680 + local.get $l1679 + local.get $l1680 + i32.add + local.set $l1681 + local.get $l1680 + local.get $l1681 + i32.add + local.set $l1682 + local.get $l1681 + local.get $l1682 + i32.add + local.set $l1683 + local.get $l1682 + local.get $l1683 + i32.add + local.set $l1684 + local.get $l1683 + local.get $l1684 + i32.add + local.set $l1685 + local.get $l1684 + local.get $l1685 + i32.add + local.set $l1686 + local.get $l1685 + local.get $l1686 + i32.add + local.set $l1687 + local.get $l1686 + local.get $l1687 + i32.add + local.set $l1688 + local.get $l1687 + local.get $l1688 + i32.add + local.set $l1689 + local.get $l1688 + local.get $l1689 + i32.add + local.set $l1690 + local.get $l1689 + local.get $l1690 + i32.add + local.set $l1691 + local.get $l1690 + local.get $l1691 + i32.add + local.set $l1692 + local.get $l1691 + local.get $l1692 + i32.add + local.set $l1693 + local.get $l1692 + local.get $l1693 + i32.add + local.set $l1694 + local.get $l1693 + local.get $l1694 + i32.add + local.set $l1695 + local.get $l1694 + local.get $l1695 + i32.add + local.set $l1696 + local.get $l1695 + local.get $l1696 + i32.add + local.set $l1697 + local.get $l1696 + local.get $l1697 + i32.add + local.set $l1698 + local.get $l1697 + local.get $l1698 + i32.add + local.set $l1699 + local.get $l1698 + local.get $l1699 + i32.add + local.set $l1700 + local.get $l1699 + local.get $l1700 + i32.add + local.set $l1701 + local.get $l1700 + local.get $l1701 + i32.add + local.set $l1702 + local.get $l1701 + local.get $l1702 + i32.add + local.set $l1703 + local.get $l1702 + local.get $l1703 + i32.add + local.set $l1704 + local.get $l1703 + local.get $l1704 + i32.add + local.set $l1705 + local.get $l1704 + local.get $l1705 + i32.add + local.set $l1706 + local.get $l1705 + local.get $l1706 + i32.add + local.set $l1707 + local.get $l1706 + local.get $l1707 + i32.add + local.set $l1708 + local.get $l1707 + local.get $l1708 + i32.add + local.set $l1709 + local.get $l1708 + local.get $l1709 + i32.add + local.set $l1710 + local.get $l1709 + local.get $l1710 + i32.add + local.set $l1711 + local.get $l1710 + local.get $l1711 + i32.add + local.set $l1712 + local.get $l1711 + local.get $l1712 + i32.add + local.set $l1713 + local.get $l1712 + local.get $l1713 + i32.add + local.set $l1714 + local.get $l1713 + local.get $l1714 + i32.add + local.set $l1715 + local.get $l1714 + local.get $l1715 + i32.add + local.set $l1716 + local.get $l1715 + local.get $l1716 + i32.add + local.set $l1717 + local.get $l1716 + local.get $l1717 + i32.add + local.set $l1718 + local.get $l1717 + local.get $l1718 + i32.add + local.set $l1719 + local.get $l1718 + local.get $l1719 + i32.add + local.set $l1720 + local.get $l1719 + local.get $l1720 + i32.add + local.set $l1721 + local.get $l1720 + local.get $l1721 + i32.add + local.set $l1722 + local.get $l1721 + local.get $l1722 + i32.add + local.set $l1723 + local.get $l1722 + local.get $l1723 + i32.add + local.set $l1724 + local.get $l1723 + local.get $l1724 + i32.add + local.set $l1725 + local.get $l1724 + local.get $l1725 + i32.add + local.set $l1726 + local.get $l1725 + local.get $l1726 + i32.add + local.set $l1727 + local.get $l1726 + local.get $l1727 + i32.add + local.set $l1728 + local.get $l1727 + local.get $l1728 + i32.add + local.set $l1729 + local.get $l1728 + local.get $l1729 + i32.add + local.set $l1730 + local.get $l1729 + local.get $l1730 + i32.add + local.set $l1731 + local.get $l1730 + local.get $l1731 + i32.add + local.set $l1732 + local.get $l1731 + local.get $l1732 + i32.add + local.set $l1733 + local.get $l1732 + local.get $l1733 + i32.add + local.set $l1734 + local.get $l1733 + local.get $l1734 + i32.add + local.set $l1735 + local.get $l1734 + local.get $l1735 + i32.add + local.set $l1736 + local.get $l1735 + local.get $l1736 + i32.add + local.set $l1737 + local.get $l1736 + local.get $l1737 + i32.add + local.set $l1738 + local.get $l1737 + local.get $l1738 + i32.add + local.set $l1739 + local.get $l1738 + local.get $l1739 + i32.add + local.set $l1740 + local.get $l1739 + local.get $l1740 + i32.add + local.set $l1741 + local.get $l1740 + local.get $l1741 + i32.add + local.set $l1742 + local.get $l1741 + local.get $l1742 + i32.add + local.set $l1743 + local.get $l1742 + local.get $l1743 + i32.add + local.set $l1744 + local.get $l1743 + local.get $l1744 + i32.add + local.set $l1745 + local.get $l1744 + local.get $l1745 + i32.add + local.set $l1746 + local.get $l1745 + local.get $l1746 + i32.add + local.set $l1747 + local.get $l1746 + local.get $l1747 + i32.add + local.set $l1748 + local.get $l1747 + local.get $l1748 + i32.add + local.set $l1749 + local.get $l1748 + local.get $l1749 + i32.add + local.set $l1750 + local.get $l1749 + local.get $l1750 + i32.add + local.set $l1751 + local.get $l1750 + local.get $l1751 + i32.add + local.set $l1752 + local.get $l1751 + local.get $l1752 + i32.add + local.set $l1753 + local.get $l1752 + local.get $l1753 + i32.add + local.set $l1754 + local.get $l1753 + local.get $l1754 + i32.add + local.set $l1755 + local.get $l1754 + local.get $l1755 + i32.add + local.set $l1756 + local.get $l1755 + local.get $l1756 + i32.add + local.set $l1757 + local.get $l1756 + local.get $l1757 + i32.add + local.set $l1758 + local.get $l1757 + local.get $l1758 + i32.add + local.set $l1759 + local.get $l1758 + local.get $l1759 + i32.add + local.set $l1760 + local.get $l1759 + local.get $l1760 + i32.add + local.set $l1761 + local.get $l1760 + local.get $l1761 + i32.add + local.set $l1762 + local.get $l1761 + local.get $l1762 + i32.add + local.set $l1763 + local.get $l1762 + local.get $l1763 + i32.add + local.set $l1764 + local.get $l1763 + local.get $l1764 + i32.add + local.set $l1765 + local.get $l1764 + local.get $l1765 + i32.add + local.set $l1766 + local.get $l1765 + local.get $l1766 + i32.add + local.set $l1767 + local.get $l1766 + local.get $l1767 + i32.add + local.set $l1768 + local.get $l1767 + local.get $l1768 + i32.add + local.set $l1769 + local.get $l1768 + local.get $l1769 + i32.add + local.set $l1770 + local.get $l1769 + local.get $l1770 + i32.add + local.set $l1771 + local.get $l1770 + local.get $l1771 + i32.add + local.set $l1772 + local.get $l1771 + local.get $l1772 + i32.add + local.set $l1773 + local.get $l1772 + local.get $l1773 + i32.add + local.set $l1774 + local.get $l1773 + local.get $l1774 + i32.add + local.set $l1775 + local.get $l1774 + local.get $l1775 + i32.add + local.set $l1776 + local.get $l1775 + local.get $l1776 + i32.add + local.set $l1777 + local.get $l1776 + local.get $l1777 + i32.add + local.set $l1778 + local.get $l1777 + local.get $l1778 + i32.add + local.set $l1779 + local.get $l1778 + local.get $l1779 + i32.add + local.set $l1780 + local.get $l1779 + local.get $l1780 + i32.add + local.set $l1781 + local.get $l1780 + local.get $l1781 + i32.add + local.set $l1782 + local.get $l1781 + local.get $l1782 + i32.add + local.set $l1783 + local.get $l1782 + local.get $l1783 + i32.add + local.set $l1784 + local.get $l1783 + local.get $l1784 + i32.add + local.set $l1785 + local.get $l1784 + local.get $l1785 + i32.add + local.set $l1786 + local.get $l1785 + local.get $l1786 + i32.add + local.set $l1787 + local.get $l1786 + local.get $l1787 + i32.add + local.set $l1788 + local.get $l1787 + local.get $l1788 + i32.add + local.set $l1789 + local.get $l1788 + local.get $l1789 + i32.add + local.set $l1790 + local.get $l1789 + local.get $l1790 + i32.add + local.set $l1791 + local.get $l1790 + local.get $l1791 + i32.add + local.set $l1792 + local.get $l1791 + local.get $l1792 + i32.add + local.set $l1793 + local.get $l1792 + local.get $l1793 + i32.add + local.set $l1794 + local.get $l1793 + local.get $l1794 + i32.add + local.set $l1795 + local.get $l1794 + local.get $l1795 + i32.add + local.set $l1796 + local.get $l1795 + local.get $l1796 + i32.add + local.set $l1797 + local.get $l1796 + local.get $l1797 + i32.add + local.set $l1798 + local.get $l1797 + local.get $l1798 + i32.add + local.set $l1799 + local.get $l1798 + local.get $l1799 + i32.add + local.set $l1800 + local.get $l1799 + local.get $l1800 + i32.add + local.set $l1801 + local.get $l1800 + local.get $l1801 + i32.add + local.set $l1802 + local.get $l1801 + local.get $l1802 + i32.add + local.set $l1803 + local.get $l1802 + local.get $l1803 + i32.add + local.set $l1804 + local.get $l1803 + local.get $l1804 + i32.add + local.set $l1805 + local.get $l1804 + local.get $l1805 + i32.add + local.set $l1806 + local.get $l1805 + local.get $l1806 + i32.add + local.set $l1807 + local.get $l1806 + local.get $l1807 + i32.add + local.set $l1808 + local.get $l1807 + local.get $l1808 + i32.add + local.set $l1809 + local.get $l1808 + local.get $l1809 + i32.add + local.set $l1810 + local.get $l1809 + local.get $l1810 + i32.add + local.set $l1811 + local.get $l1810 + local.get $l1811 + i32.add + local.set $l1812 + local.get $l1811 + local.get $l1812 + i32.add + local.set $l1813 + local.get $l1812 + local.get $l1813 + i32.add + local.set $l1814 + local.get $l1813 + local.get $l1814 + i32.add + local.set $l1815 + local.get $l1814 + local.get $l1815 + i32.add + local.set $l1816 + local.get $l1815 + local.get $l1816 + i32.add + local.set $l1817 + local.get $l1816 + local.get $l1817 + i32.add + local.set $l1818 + local.get $l1817 + local.get $l1818 + i32.add + local.set $l1819 + local.get $l1818 + local.get $l1819 + i32.add + local.set $l1820 + local.get $l1819 + local.get $l1820 + i32.add + local.set $l1821 + local.get $l1820 + local.get $l1821 + i32.add + local.set $l1822 + local.get $l1821 + local.get $l1822 + i32.add + local.set $l1823 + local.get $l1822 + local.get $l1823 + i32.add + local.set $l1824 + local.get $l1823 + local.get $l1824 + i32.add + local.set $l1825 + local.get $l1824 + local.get $l1825 + i32.add + local.set $l1826 + local.get $l1825 + local.get $l1826 + i32.add + local.set $l1827 + local.get $l1826 + local.get $l1827 + i32.add + local.set $l1828 + local.get $l1827 + local.get $l1828 + i32.add + local.set $l1829 + local.get $l1828 + local.get $l1829 + i32.add + local.set $l1830 + local.get $l1829 + local.get $l1830 + i32.add + local.set $l1831 + local.get $l1830 + local.get $l1831 + i32.add + local.set $l1832 + local.get $l1831 + local.get $l1832 + i32.add + local.set $l1833 + local.get $l1832 + local.get $l1833 + i32.add + local.set $l1834 + local.get $l1833 + local.get $l1834 + i32.add + local.set $l1835 + local.get $l1834 + local.get $l1835 + i32.add + local.set $l1836 + local.get $l1835 + local.get $l1836 + i32.add + local.set $l1837 + local.get $l1836 + local.get $l1837 + i32.add + local.set $l1838 + local.get $l1837 + local.get $l1838 + i32.add + local.set $l1839 + local.get $l1838 + local.get $l1839 + i32.add + local.set $l1840 + local.get $l1839 + local.get $l1840 + i32.add + local.set $l1841 + local.get $l1840 + local.get $l1841 + i32.add + local.set $l1842 + local.get $l1841 + local.get $l1842 + i32.add + local.set $l1843 + local.get $l1842 + local.get $l1843 + i32.add + local.set $l1844 + local.get $l1843 + local.get $l1844 + i32.add + local.set $l1845 + local.get $l1844 + local.get $l1845 + i32.add + local.set $l1846 + local.get $l1845 + local.get $l1846 + i32.add + local.set $l1847 + local.get $l1846 + local.get $l1847 + i32.add + local.set $l1848 + local.get $l1847 + local.get $l1848 + i32.add + local.set $l1849 + local.get $l1848 + local.get $l1849 + i32.add + local.set $l1850 + local.get $l1849 + local.get $l1850 + i32.add + local.set $l1851 + local.get $l1850 + local.get $l1851 + i32.add + local.set $l1852 + local.get $l1851 + local.get $l1852 + i32.add + local.set $l1853 + local.get $l1852 + local.get $l1853 + i32.add + local.set $l1854 + local.get $l1853 + local.get $l1854 + i32.add + local.set $l1855 + local.get $l1854 + local.get $l1855 + i32.add + local.set $l1856 + local.get $l1855 + local.get $l1856 + i32.add + local.set $l1857 + local.get $l1856 + local.get $l1857 + i32.add + local.set $l1858 + local.get $l1857 + local.get $l1858 + i32.add + local.set $l1859 + local.get $l1858 + local.get $l1859 + i32.add + local.set $l1860 + local.get $l1859 + local.get $l1860 + i32.add + local.set $l1861 + local.get $l1860 + local.get $l1861 + i32.add + local.set $l1862 + local.get $l1861 + local.get $l1862 + i32.add + local.set $l1863 + local.get $l1862 + local.get $l1863 + i32.add + local.set $l1864 + local.get $l1863 + local.get $l1864 + i32.add + local.set $l1865 + local.get $l1864 + local.get $l1865 + i32.add + local.set $l1866 + local.get $l1865 + local.get $l1866 + i32.add + local.set $l1867 + local.get $l1866 + local.get $l1867 + i32.add + local.set $l1868 + local.get $l1867 + local.get $l1868 + i32.add + local.set $l1869 + local.get $l1868 + local.get $l1869 + i32.add + local.set $l1870 + local.get $l1869 + local.get $l1870 + i32.add + local.set $l1871 + local.get $l1870 + local.get $l1871 + i32.add + local.set $l1872 + local.get $l1871 + local.get $l1872 + i32.add + local.set $l1873 + local.get $l1872 + local.get $l1873 + i32.add + local.set $l1874 + local.get $l1873 + local.get $l1874 + i32.add + local.set $l1875 + local.get $l1874 + local.get $l1875 + i32.add + local.set $l1876 + local.get $l1875 + local.get $l1876 + i32.add + local.set $l1877 + local.get $l1876 + local.get $l1877 + i32.add + local.set $l1878 + local.get $l1877 + local.get $l1878 + i32.add + local.set $l1879 + local.get $l1878 + local.get $l1879 + i32.add + local.set $l1880 + local.get $l1879 + local.get $l1880 + i32.add + local.set $l1881 + local.get $l1880 + local.get $l1881 + i32.add + local.set $l1882 + local.get $l1881 + local.get $l1882 + i32.add + local.set $l1883 + local.get $l1882 + local.get $l1883 + i32.add + local.set $l1884 + local.get $l1883 + local.get $l1884 + i32.add + local.set $l1885 + local.get $l1884 + local.get $l1885 + i32.add + local.set $l1886 + local.get $l1885 + local.get $l1886 + i32.add + local.set $l1887 + local.get $l1886 + local.get $l1887 + i32.add + local.set $l1888 + local.get $l1887 + local.get $l1888 + i32.add + local.set $l1889 + local.get $l1888 + local.get $l1889 + i32.add + local.set $l1890 + local.get $l1889 + local.get $l1890 + i32.add + local.set $l1891 + local.get $l1890 + local.get $l1891 + i32.add + local.set $l1892 + local.get $l1891 + local.get $l1892 + i32.add + local.set $l1893 + local.get $l1892 + local.get $l1893 + i32.add + local.set $l1894 + local.get $l1893 + local.get $l1894 + i32.add + local.set $l1895 + local.get $l1894 + local.get $l1895 + i32.add + local.set $l1896 + local.get $l1895 + local.get $l1896 + i32.add + local.set $l1897 + local.get $l1896 + local.get $l1897 + i32.add + local.set $l1898 + local.get $l1897 + local.get $l1898 + i32.add + local.set $l1899 + local.get $l1898 + local.get $l1899 + i32.add + local.set $l1900 + local.get $l1899 + local.get $l1900 + i32.add + local.set $l1901 + local.get $l1900 + local.get $l1901 + i32.add + local.set $l1902 + local.get $l1901 + local.get $l1902 + i32.add + local.set $l1903 + local.get $l1902 + local.get $l1903 + i32.add + local.set $l1904 + local.get $l1903 + local.get $l1904 + i32.add + local.set $l1905 + local.get $l1904 + local.get $l1905 + i32.add + local.set $l1906 + local.get $l1905 + local.get $l1906 + i32.add + local.set $l1907 + local.get $l1906 + local.get $l1907 + i32.add + local.set $l1908 + local.get $l1907 + local.get $l1908 + i32.add + local.set $l1909 + local.get $l1908 + local.get $l1909 + i32.add + local.set $l1910 + local.get $l1909 + local.get $l1910 + i32.add + local.set $l1911 + local.get $l1910 + local.get $l1911 + i32.add + local.set $l1912 + local.get $l1911 + local.get $l1912 + i32.add + local.set $l1913 + local.get $l1912 + local.get $l1913 + i32.add + local.set $l1914 + local.get $l1913 + local.get $l1914 + i32.add + local.set $l1915 + local.get $l1914 + local.get $l1915 + i32.add + local.set $l1916 + local.get $l1915 + local.get $l1916 + i32.add + local.set $l1917 + local.get $l1916 + local.get $l1917 + i32.add + local.set $l1918 + local.get $l1917 + local.get $l1918 + i32.add + local.set $l1919 + local.get $l1918 + local.get $l1919 + i32.add + local.set $l1920 + local.get $l1919 + local.get $l1920 + i32.add + local.set $l1921 + local.get $l1920 + local.get $l1921 + i32.add + local.set $l1922 + local.get $l1921 + local.get $l1922 + i32.add + local.set $l1923 + local.get $l1922 + local.get $l1923 + i32.add + local.set $l1924 + local.get $l1923 + local.get $l1924 + i32.add + local.set $l1925 + local.get $l1924 + local.get $l1925 + i32.add + local.set $l1926 + local.get $l1925 + local.get $l1926 + i32.add + local.set $l1927 + local.get $l1926 + local.get $l1927 + i32.add + local.set $l1928 + local.get $l1927 + local.get $l1928 + i32.add + local.set $l1929 + local.get $l1928 + local.get $l1929 + i32.add + local.set $l1930 + local.get $l1929 + local.get $l1930 + i32.add + local.set $l1931 + local.get $l1930 + local.get $l1931 + i32.add + local.set $l1932 + local.get $l1931 + local.get $l1932 + i32.add + local.set $l1933 + local.get $l1932 + local.get $l1933 + i32.add + local.set $l1934 + local.get $l1933 + local.get $l1934 + i32.add + local.set $l1935 + local.get $l1934 + local.get $l1935 + i32.add + local.set $l1936 + local.get $l1935 + local.get $l1936 + i32.add + local.set $l1937 + local.get $l1936 + local.get $l1937 + i32.add + local.set $l1938 + local.get $l1937 + local.get $l1938 + i32.add + local.set $l1939 + local.get $l1938 + local.get $l1939 + i32.add + local.set $l1940 + local.get $l1939 + local.get $l1940 + i32.add + local.set $l1941 + local.get $l1940 + local.get $l1941 + i32.add + local.set $l1942 + local.get $l1941 + local.get $l1942 + i32.add + local.set $l1943 + local.get $l1942 + local.get $l1943 + i32.add + local.set $l1944 + local.get $l1943 + local.get $l1944 + i32.add + local.set $l1945 + local.get $l1944 + local.get $l1945 + i32.add + local.set $l1946 + local.get $l1945 + local.get $l1946 + i32.add + local.set $l1947 + local.get $l1946 + local.get $l1947 + i32.add + local.set $l1948 + local.get $l1947 + local.get $l1948 + i32.add + local.set $l1949 + local.get $l1948 + local.get $l1949 + i32.add + local.set $l1950 + local.get $l1949 + local.get $l1950 + i32.add + local.set $l1951 + local.get $l1950 + local.get $l1951 + i32.add + local.set $l1952 + local.get $l1951 + local.get $l1952 + i32.add + local.set $l1953 + local.get $l1952 + local.get $l1953 + i32.add + local.set $l1954 + local.get $l1953 + local.get $l1954 + i32.add + local.set $l1955 + local.get $l1954 + local.get $l1955 + i32.add + local.set $l1956 + local.get $l1955 + local.get $l1956 + i32.add + local.set $l1957 + local.get $l1956 + local.get $l1957 + i32.add + local.set $l1958 + local.get $l1957 + local.get $l1958 + i32.add + local.set $l1959 + local.get $l1958 + local.get $l1959 + i32.add + local.set $l1960 + local.get $l1959 + local.get $l1960 + i32.add + local.set $l1961 + local.get $l1960 + local.get $l1961 + i32.add + local.set $l1962 + local.get $l1961 + local.get $l1962 + i32.add + local.set $l1963 + local.get $l1962 + local.get $l1963 + i32.add + local.set $l1964 + local.get $l1963 + local.get $l1964 + i32.add + local.set $l1965 + local.get $l1964 + local.get $l1965 + i32.add + local.set $l1966 + local.get $l1965 + local.get $l1966 + i32.add + local.set $l1967 + local.get $l1966 + local.get $l1967 + i32.add + local.set $l1968 + local.get $l1967 + local.get $l1968 + i32.add + local.set $l1969 + local.get $l1968 + local.get $l1969 + i32.add + local.set $l1970 + local.get $l1969 + local.get $l1970 + i32.add + local.set $l1971 + local.get $l1970 + local.get $l1971 + i32.add + local.set $l1972 + local.get $l1971 + local.get $l1972 + i32.add + local.set $l1973 + local.get $l1972 + local.get $l1973 + i32.add + local.set $l1974 + local.get $l1973 + local.get $l1974 + i32.add + local.set $l1975 + local.get $l1974 + local.get $l1975 + i32.add + local.set $l1976 + local.get $l1975 + local.get $l1976 + i32.add + local.set $l1977 + local.get $l1976 + local.get $l1977 + i32.add + local.set $l1978 + local.get $l1977 + local.get $l1978 + i32.add + local.set $l1979 + local.get $l1978 + local.get $l1979 + i32.add + local.set $l1980 + local.get $l1979 + local.get $l1980 + i32.add + local.set $l1981 + local.get $l1980 + local.get $l1981 + i32.add + local.set $l1982 + local.get $l1981 + local.get $l1982 + i32.add + local.set $l1983 + local.get $l1982 + local.get $l1983 + i32.add + local.set $l1984 + local.get $l1983 + local.get $l1984 + i32.add + local.set $l1985 + local.get $l1984 + local.get $l1985 + i32.add + local.set $l1986 + local.get $l1985 + local.get $l1986 + i32.add + local.set $l1987 + local.get $l1986 + local.get $l1987 + i32.add + local.set $l1988 + local.get $l1987 + local.get $l1988 + i32.add + local.set $l1989 + local.get $l1988 + local.get $l1989 + i32.add + local.set $l1990 + local.get $l1989 + local.get $l1990 + i32.add + local.set $l1991 + local.get $l1990 + local.get $l1991 + i32.add + local.set $l1992 + local.get $l1991 + local.get $l1992 + i32.add + local.set $l1993 + local.get $l1992 + local.get $l1993 + i32.add + local.set $l1994 + local.get $l1993 + local.get $l1994 + i32.add + local.set $l1995 + local.get $l1994 + local.get $l1995 + i32.add + local.set $l1996 + local.get $l1995 + local.get $l1996 + i32.add + local.set $l1997 + local.get $l1996 + local.get $l1997 + i32.add + local.set $l1998 + local.get $l1997 + local.get $l1998 + i32.add + local.set $l1999 + local.get $l1998 + local.get $l1999 + i32.add + local.set $l2000 + local.get $l1999 + local.get $l2000 + i32.add + local.set $l2001 + local.get $l2000 + local.get $l2001 + i32.add + local.set $l2002 + local.get $l2001 + local.get $l2002 + i32.add + local.set $l2003 + local.get $l2002 + local.get $l2003 + i32.add + local.set $l2004 + local.get $l2003 + local.get $l2004 + i32.add + local.set $l2005 + local.get $l2004 + local.get $l2005 + i32.add + local.set $l2006 + local.get $l2005 + local.get $l2006 + i32.add + local.set $l2007 + local.get $l2006 + local.get $l2007 + i32.add + local.set $l2008 + local.get $l2007 + local.get $l2008 + i32.add + local.set $l2009 + local.get $l2008 + local.get $l2009 + i32.add + local.set $l2010 + local.get $l2009 + local.get $l2010 + i32.add + local.set $l2011 + local.get $l2010 + local.get $l2011 + i32.add + local.set $l2012 + local.get $l2011 + local.get $l2012 + i32.add + local.set $l2013 + local.get $l2012 + local.get $l2013 + i32.add + local.set $l2014 + local.get $l2013 + local.get $l2014 + i32.add + local.set $l2015 + local.get $l2014 + local.get $l2015 + i32.add + local.set $l2016 + local.get $l2015 + local.get $l2016 + i32.add + local.set $l2017 + local.get $l2016 + local.get $l2017 + i32.add + local.set $l2018 + local.get $l2017 + local.get $l2018 + i32.add + local.set $l2019 + local.get $l2018 + local.get $l2019 + i32.add + local.set $l2020 + local.get $l2019 + local.get $l2020 + i32.add + local.set $l2021 + local.get $l2020 + local.get $l2021 + i32.add + local.set $l2022 + local.get $l2021 + local.get $l2022 + i32.add + local.set $l2023 + local.get $l2022 + local.get $l2023 + i32.add + local.set $l2024 + local.get $l2023 + local.get $l2024 + i32.add + local.set $l2025 + local.get $l2024 + local.get $l2025 + i32.add + local.set $l2026 + local.get $l2025 + local.get $l2026 + i32.add + local.set $l2027 + local.get $l2026 + local.get $l2027 + i32.add + local.set $l2028 + local.get $l2027 + local.get $l2028 + i32.add + local.set $l2029 + local.get $l2028 + local.get $l2029 + i32.add + local.set $l2030 + local.get $l2029 + local.get $l2030 + i32.add + local.set $l2031 + local.get $l2030 + local.get $l2031 + i32.add + local.set $l2032 + local.get $l2031 + local.get $l2032 + i32.add + local.set $l2033 + local.get $l2032 + local.get $l2033 + i32.add + local.set $l2034 + local.get $l2033 + local.get $l2034 + i32.add + local.set $l2035 + local.get $l2034 + local.get $l2035 + i32.add + local.set $l2036 + local.get $l2035 + local.get $l2036 + i32.add + local.set $l2037 + local.get $l2036 + local.get $l2037 + i32.add + local.set $l2038 + local.get $l2037 + local.get $l2038 + i32.add + local.set $l2039 + local.get $l2038 + local.get $l2039 + i32.add + local.set $l2040 + local.get $l2039 + local.get $l2040 + i32.add + local.set $l2041 + local.get $l2040 + local.get $l2041 + i32.add + local.set $l2042 + local.get $l2041 + local.get $l2042 + i32.add + local.set $l2043 + local.get $l2042 + local.get $l2043 + i32.add + local.set $l2044 + local.get $l2043 + local.get $l2044 + i32.add + local.set $l2045 + local.get $l2044 + local.get $l2045 + i32.add + local.set $l2046 + local.get $l2045 + local.get $l2046 + i32.add + local.set $l2047 + local.get $l2046 + local.get $l2047 + i32.add + local.set $l2048 + local.get $l2047 + local.get $l2048 + i32.add + local.set $l2049 + local.get $l2048 + local.get $l2049 + i32.add + local.set $l2050 + local.get $l2049 + local.get $l2050 + i32.add + local.set $l2051 + local.get $l2050 + local.get $l2051 + i32.add + local.set $l2052 + local.get $l2051 + local.get $l2052 + i32.add + local.set $l2053 + local.get $l2052 + local.get $l2053 + i32.add + local.set $l2054 + local.get $l2053 + local.get $l2054 + i32.add + local.set $l2055 + local.get $l2054 + local.get $l2055 + i32.add + local.set $l2056 + local.get $l2055 + local.get $l2056 + i32.add + local.set $l2057 + local.get $l2056 + local.get $l2057 + i32.add + local.set $l2058 + local.get $l2057 + local.get $l2058 + i32.add + local.set $l2059 + local.get $l2058 + local.get $l2059 + i32.add + local.set $l2060 + local.get $l2059 + local.get $l2060 + i32.add + local.set $l2061 + local.get $l2060 + local.get $l2061 + i32.add + local.set $l2062 + local.get $l2061 + local.get $l2062 + i32.add + local.set $l2063 + local.get $l2062 + local.get $l2063 + i32.add + local.set $l2064 + local.get $l2063 + local.get $l2064 + i32.add + local.set $l2065 + local.get $l2064 + local.get $l2065 + i32.add + local.set $l2066 + local.get $l2065 + local.get $l2066 + i32.add + local.set $l2067 + local.get $l2066 + local.get $l2067 + i32.add + local.set $l2068 + local.get $l2067 + local.get $l2068 + i32.add + local.set $l2069 + local.get $l2068 + local.get $l2069 + i32.add + local.set $l2070 + local.get $l2069 + local.get $l2070 + i32.add + local.set $l2071 + local.get $l2070 + local.get $l2071 + i32.add + local.set $l2072 + local.get $l2071 + local.get $l2072 + i32.add + local.set $l2073 + local.get $l2072 + local.get $l2073 + i32.add + local.set $l2074 + local.get $l2073 + local.get $l2074 + i32.add + local.set $l2075 + local.get $l2074 + local.get $l2075 + i32.add + local.set $l2076 + local.get $l2075 + local.get $l2076 + i32.add + local.set $l2077 + local.get $l2076 + local.get $l2077 + i32.add + local.set $l2078 + local.get $l2077 + local.get $l2078 + i32.add + local.set $l2079 + local.get $l2078 + local.get $l2079 + i32.add + local.set $l2080 + local.get $l2079 + local.get $l2080 + i32.add + local.set $l2081 + local.get $l2080 + local.get $l2081 + i32.add + local.set $l2082 + local.get $l2081 + local.get $l2082 + i32.add + local.set $l2083 + local.get $l2082 + local.get $l2083 + i32.add + local.set $l2084 + local.get $l2083 + local.get $l2084 + i32.add + local.set $l2085 + local.get $l2084 + local.get $l2085 + i32.add + local.set $l2086 + local.get $l2085 + local.get $l2086 + i32.add + local.set $l2087 + local.get $l2086 + local.get $l2087 + i32.add + local.set $l2088 + local.get $l2087 + local.get $l2088 + i32.add + local.set $l2089 + local.get $l2088 + local.get $l2089 + i32.add + local.set $l2090 + local.get $l2089 + local.get $l2090 + i32.add + local.set $l2091 + local.get $l2090 + local.get $l2091 + i32.add + local.set $l2092 + local.get $l2091 + local.get $l2092 + i32.add + local.set $l2093 + local.get $l2092 + local.get $l2093 + i32.add + local.set $l2094 + local.get $l2093 + local.get $l2094 + i32.add + local.set $l2095 + local.get $l2094 + local.get $l2095 + i32.add + local.set $l2096 + local.get $l2095 + local.get $l2096 + i32.add + local.set $l2097 + local.get $l2096 + local.get $l2097 + i32.add + local.set $l2098 + local.get $l2097 + local.get $l2098 + i32.add + local.set $l2099 + local.get $l2098 + local.get $l2099 + i32.add + local.set $l2100 + local.get $l2099 + local.get $l2100 + i32.add + local.set $l2101 + local.get $l2100 + local.get $l2101 + i32.add + local.set $l2102 + local.get $l2101 + local.get $l2102 + i32.add + local.set $l2103 + local.get $l2102 + local.get $l2103 + i32.add + local.set $l2104 + local.get $l2103 + local.get $l2104 + i32.add + local.set $l2105 + local.get $l2104 + local.get $l2105 + i32.add + local.set $l2106 + local.get $l2105 + local.get $l2106 + i32.add + local.set $l2107 + local.get $l2106 + local.get $l2107 + i32.add + local.set $l2108 + local.get $l2107 + local.get $l2108 + i32.add + local.set $l2109 + local.get $l2108 + local.get $l2109 + i32.add + local.set $l2110 + local.get $l2109 + local.get $l2110 + i32.add + local.set $l2111 + local.get $l2110 + local.get $l2111 + i32.add + local.set $l2112 + local.get $l2111 + local.get $l2112 + i32.add + local.set $l2113 + local.get $l2112 + local.get $l2113 + i32.add + local.set $l2114 + local.get $l2113 + local.get $l2114 + i32.add + local.set $l2115 + local.get $l2114 + local.get $l2115 + i32.add + local.set $l2116 + local.get $l2115 + local.get $l2116 + i32.add + local.set $l2117 + local.get $l2116 + local.get $l2117 + i32.add + local.set $l2118 + local.get $l2117 + local.get $l2118 + i32.add + local.set $l2119 + local.get $l2118 + local.get $l2119 + i32.add + local.set $l2120 + local.get $l2119 + local.get $l2120 + i32.add + local.set $l2121 + local.get $l2120 + local.get $l2121 + i32.add + local.set $l2122 + local.get $l2121 + local.get $l2122 + i32.add + local.set $l2123 + local.get $l2122 + local.get $l2123 + i32.add + local.set $l2124 + local.get $l2123 + local.get $l2124 + i32.add + local.set $l2125 + local.get $l2124 + local.get $l2125 + i32.add + local.set $l2126 + local.get $l2125 + local.get $l2126 + i32.add + local.set $l2127 + local.get $l2126 + local.get $l2127 + i32.add + local.set $l2128 + local.get $l2127 + local.get $l2128 + i32.add + local.set $l2129 + local.get $l2128 + local.get $l2129 + i32.add + local.set $l2130 + local.get $l2129 + local.get $l2130 + i32.add + local.set $l2131 + local.get $l2130 + local.get $l2131 + i32.add + local.set $l2132 + local.get $l2131 + local.get $l2132 + i32.add + local.set $l2133 + local.get $l2132 + local.get $l2133 + i32.add + local.set $l2134 + local.get $l2133 + local.get $l2134 + i32.add + local.set $l2135 + local.get $l2134 + local.get $l2135 + i32.add + local.set $l2136 + local.get $l2135 + local.get $l2136 + i32.add + local.set $l2137 + local.get $l2136 + local.get $l2137 + i32.add + local.set $l2138 + local.get $l2137 + local.get $l2138 + i32.add + local.set $l2139 + local.get $l2138 + local.get $l2139 + i32.add + local.set $l2140 + local.get $l2139 + local.get $l2140 + i32.add + local.set $l2141 + local.get $l2140 + local.get $l2141 + i32.add + local.set $l2142 + local.get $l2141 + local.get $l2142 + i32.add + local.set $l2143 + local.get $l2142 + local.get $l2143 + i32.add + local.set $l2144 + local.get $l2143 + local.get $l2144 + i32.add + local.set $l2145 + local.get $l2144 + local.get $l2145 + i32.add + local.set $l2146 + local.get $l2145 + local.get $l2146 + i32.add + local.set $l2147 + local.get $l2146 + local.get $l2147 + i32.add + local.set $l2148 + local.get $l2147 + local.get $l2148 + i32.add + local.set $l2149 + local.get $l2148 + local.get $l2149 + i32.add + local.set $l2150 + local.get $l2149 + local.get $l2150 + i32.add + local.set $l2151 + local.get $l2150 + local.get $l2151 + i32.add + local.set $l2152 + local.get $l2151 + local.get $l2152 + i32.add + local.set $l2153 + local.get $l2152 + local.get $l2153 + i32.add + local.set $l2154 + local.get $l2153 + local.get $l2154 + i32.add + local.set $l2155 + local.get $l2154 + local.get $l2155 + i32.add + local.set $l2156 + local.get $l2155 + local.get $l2156 + i32.add + local.set $l2157 + local.get $l2156 + local.get $l2157 + i32.add + local.set $l2158 + local.get $l2157 + local.get $l2158 + i32.add + local.set $l2159 + local.get $l2158 + local.get $l2159 + i32.add + local.set $l2160 + local.get $l2159 + local.get $l2160 + i32.add + local.set $l2161 + local.get $l2160 + local.get $l2161 + i32.add + local.set $l2162 + local.get $l2161 + local.get $l2162 + i32.add + local.set $l2163 + local.get $l2162 + local.get $l2163 + i32.add + local.set $l2164 + local.get $l2163 + local.get $l2164 + i32.add + local.set $l2165 + local.get $l2164 + local.get $l2165 + i32.add + local.set $l2166 + local.get $l2165 + local.get $l2166 + i32.add + local.set $l2167 + local.get $l2166 + local.get $l2167 + i32.add + local.set $l2168 + local.get $l2167 + local.get $l2168 + i32.add + local.set $l2169 + local.get $l2168 + local.get $l2169 + i32.add + local.set $l2170 + local.get $l2169 + local.get $l2170 + i32.add + local.set $l2171 + local.get $l2170 + local.get $l2171 + i32.add + local.set $l2172 + local.get $l2171 + local.get $l2172 + i32.add + local.set $l2173 + local.get $l2172 + local.get $l2173 + i32.add + local.set $l2174 + local.get $l2173 + local.get $l2174 + i32.add + local.set $l2175 + local.get $l2174 + local.get $l2175 + i32.add + local.set $l2176 + local.get $l2175 + local.get $l2176 + i32.add + local.set $l2177 + local.get $l2176 + local.get $l2177 + i32.add + local.set $l2178 + local.get $l2177 + local.get $l2178 + i32.add + local.set $l2179 + local.get $l2178 + local.get $l2179 + i32.add + local.set $l2180 + local.get $l2179 + local.get $l2180 + i32.add + local.set $l2181 + local.get $l2180 + local.get $l2181 + i32.add + local.set $l2182 + local.get $l2181 + local.get $l2182 + i32.add + local.set $l2183 + local.get $l2182 + local.get $l2183 + i32.add + local.set $l2184 + local.get $l2183 + local.get $l2184 + i32.add + local.set $l2185 + local.get $l2184 + local.get $l2185 + i32.add + local.set $l2186 + local.get $l2185 + local.get $l2186 + i32.add + local.set $l2187 + local.get $l2186 + local.get $l2187 + i32.add + local.set $l2188 + local.get $l2187 + local.get $l2188 + i32.add + local.set $l2189 + local.get $l2188 + local.get $l2189 + i32.add + local.set $l2190 + local.get $l2189 + local.get $l2190 + i32.add + local.set $l2191 + local.get $l2190 + local.get $l2191 + i32.add + local.set $l2192 + local.get $l2191 + local.get $l2192 + i32.add + local.set $l2193 + local.get $l2192 + local.get $l2193 + i32.add + local.set $l2194 + local.get $l2193 + local.get $l2194 + i32.add + local.set $l2195 + local.get $l2194 + local.get $l2195 + i32.add + local.set $l2196 + local.get $l2195 + local.get $l2196 + i32.add + local.set $l2197 + local.get $l2196 + local.get $l2197 + i32.add + local.set $l2198 + local.get $l2197 + local.get $l2198 + i32.add + local.set $l2199 + local.get $l2198 + local.get $l2199 + i32.add + local.set $l2200 + local.get $l2199 + local.get $l2200 + i32.add + local.set $l2201 + local.get $l2200 + local.get $l2201 + i32.add + local.set $l2202 + local.get $l2201 + local.get $l2202 + i32.add + local.set $l2203 + local.get $l2202 + local.get $l2203 + i32.add + local.set $l2204 + local.get $l2203 + local.get $l2204 + i32.add + local.set $l2205 + local.get $l2204 + local.get $l2205 + i32.add + local.set $l2206 + local.get $l2205 + local.get $l2206 + i32.add + local.set $l2207 + local.get $l2206 + local.get $l2207 + i32.add + local.set $l2208 + local.get $l2207 + local.get $l2208 + i32.add + local.set $l2209 + local.get $l2208 + local.get $l2209 + i32.add + local.set $l2210 + local.get $l2209 + local.get $l2210 + i32.add + local.set $l2211 + local.get $l2210 + local.get $l2211 + i32.add + local.set $l2212 + local.get $l2211 + local.get $l2212 + i32.add + local.set $l2213 + local.get $l2212 + local.get $l2213 + i32.add + local.set $l2214 + local.get $l2213 + local.get $l2214 + i32.add + local.set $l2215 + local.get $l2214 + local.get $l2215 + i32.add + local.set $l2216 + local.get $l2215 + local.get $l2216 + i32.add + local.set $l2217 + local.get $l2216 + local.get $l2217 + i32.add + local.set $l2218 + local.get $l2217 + local.get $l2218 + i32.add + local.set $l2219 + local.get $l2218 + local.get $l2219 + i32.add + local.set $l2220 + local.get $l2219 + local.get $l2220 + i32.add + local.set $l2221 + local.get $l2220 + local.get $l2221 + i32.add + local.set $l2222 + local.get $l2221 + local.get $l2222 + i32.add + local.set $l2223 + local.get $l2222 + local.get $l2223 + i32.add + local.set $l2224 + local.get $l2223 + local.get $l2224 + i32.add + local.set $l2225 + local.get $l2224 + local.get $l2225 + i32.add + local.set $l2226 + local.get $l2225 + local.get $l2226 + i32.add + local.set $l2227 + local.get $l2226 + local.get $l2227 + i32.add + local.set $l2228 + local.get $l2227 + local.get $l2228 + i32.add + local.set $l2229 + local.get $l2228 + local.get $l2229 + i32.add + local.set $l2230 + local.get $l2229 + local.get $l2230 + i32.add + local.set $l2231 + local.get $l2230 + local.get $l2231 + i32.add + local.set $l2232 + local.get $l2231 + local.get $l2232 + i32.add + local.set $l2233 + local.get $l2232 + local.get $l2233 + i32.add + local.set $l2234 + local.get $l2233 + local.get $l2234 + i32.add + local.set $l2235 + local.get $l2234 + local.get $l2235 + i32.add + local.set $l2236 + local.get $l2235 + local.get $l2236 + i32.add + local.set $l2237 + local.get $l2236 + local.get $l2237 + i32.add + local.set $l2238 + local.get $l2237 + local.get $l2238 + i32.add + local.set $l2239 + local.get $l2238 + local.get $l2239 + i32.add + local.set $l2240 + local.get $l2239 + local.get $l2240 + i32.add + local.set $l2241 + local.get $l2240 + local.get $l2241 + i32.add + local.set $l2242 + local.get $l2241 + local.get $l2242 + i32.add + local.set $l2243 + local.get $l2242 + local.get $l2243 + i32.add + local.set $l2244 + local.get $l2243 + local.get $l2244 + i32.add + local.set $l2245 + local.get $l2244 + local.get $l2245 + i32.add + local.set $l2246 + local.get $l2245 + local.get $l2246 + i32.add + local.set $l2247 + local.get $l2246 + local.get $l2247 + i32.add + local.set $l2248 + local.get $l2247 + local.get $l2248 + i32.add + local.set $l2249 + local.get $l2248 + local.get $l2249 + i32.add + local.set $l2250 + local.get $l2249 + local.get $l2250 + i32.add + local.set $l2251 + local.get $l2250 + local.get $l2251 + i32.add + local.set $l2252 + local.get $l2251 + local.get $l2252 + i32.add + local.set $l2253 + local.get $l2252 + local.get $l2253 + i32.add + local.set $l2254 + local.get $l2253 + local.get $l2254 + i32.add + local.set $l2255 + local.get $l2254 + local.get $l2255 + i32.add + local.set $l2256 + local.get $l2255 + local.get $l2256 + i32.add + local.set $l2257 + local.get $l2256 + local.get $l2257 + i32.add + local.set $l2258 + local.get $l2257 + local.get $l2258 + i32.add + local.set $l2259 + local.get $l2258 + local.get $l2259 + i32.add + local.set $l2260 + local.get $l2259 + local.get $l2260 + i32.add + local.set $l2261 + local.get $l2260 + local.get $l2261 + i32.add + local.set $l2262 + local.get $l2261 + local.get $l2262 + i32.add + local.set $l2263 + local.get $l2262 + local.get $l2263 + i32.add + local.set $l2264 + local.get $l2263 + local.get $l2264 + i32.add + local.set $l2265 + local.get $l2264 + local.get $l2265 + i32.add + local.set $l2266 + local.get $l2265 + local.get $l2266 + i32.add + local.set $l2267 + local.get $l2266 + local.get $l2267 + i32.add + local.set $l2268 + local.get $l2267 + local.get $l2268 + i32.add + local.set $l2269 + local.get $l2268 + local.get $l2269 + i32.add + local.set $l2270 + local.get $l2269 + local.get $l2270 + i32.add + local.set $l2271 + local.get $l2270 + local.get $l2271 + i32.add + local.set $l2272 + local.get $l2271 + local.get $l2272 + i32.add + local.set $l2273 + local.get $l2272 + local.get $l2273 + i32.add + local.set $l2274 + local.get $l2273 + local.get $l2274 + i32.add + local.set $l2275 + local.get $l2274 + local.get $l2275 + i32.add + local.set $l2276 + local.get $l2275 + local.get $l2276 + i32.add + local.set $l2277 + local.get $l2276 + local.get $l2277 + i32.add + local.set $l2278 + local.get $l2277 + local.get $l2278 + i32.add + local.set $l2279 + local.get $l2278 + local.get $l2279 + i32.add + local.set $l2280 + local.get $l2279 + local.get $l2280 + i32.add + local.set $l2281 + local.get $l2280 + local.get $l2281 + i32.add + local.set $l2282 + local.get $l2281 + local.get $l2282 + i32.add + local.set $l2283 + local.get $l2282 + local.get $l2283 + i32.add + local.set $l2284 + local.get $l2283 + local.get $l2284 + i32.add + local.set $l2285 + local.get $l2284 + local.get $l2285 + i32.add + local.set $l2286 + local.get $l2285 + local.get $l2286 + i32.add + local.set $l2287 + local.get $l2286 + local.get $l2287 + i32.add + local.set $l2288 + local.get $l2287 + local.get $l2288 + i32.add + local.set $l2289 + local.get $l2288 + local.get $l2289 + i32.add + local.set $l2290 + local.get $l2289 + local.get $l2290 + i32.add + local.set $l2291 + local.get $l2290 + local.get $l2291 + i32.add + local.set $l2292 + local.get $l2291 + local.get $l2292 + i32.add + local.set $l2293 + local.get $l2292 + local.get $l2293 + i32.add + local.set $l2294 + local.get $l2293 + local.get $l2294 + i32.add + local.set $l2295 + local.get $l2294 + local.get $l2295 + i32.add + local.set $l2296 + local.get $l2295 + local.get $l2296 + i32.add + local.set $l2297 + local.get $l2296 + local.get $l2297 + i32.add + local.set $l2298 + local.get $l2297 + local.get $l2298 + i32.add + local.set $l2299 + local.get $l2298 + local.get $l2299 + i32.add + local.set $l2300 + local.get $l2299 + local.get $l2300 + i32.add + local.set $l2301 + local.get $l2300 + local.get $l2301 + i32.add + local.set $l2302 + local.get $l2301 + local.get $l2302 + i32.add + local.set $l2303 + local.get $l2302 + local.get $l2303 + i32.add + local.set $l2304 + local.get $l2303 + local.get $l2304 + i32.add + local.set $l2305 + local.get $l2304 + local.get $l2305 + i32.add + local.set $l2306 + local.get $l2305 + local.get $l2306 + i32.add + local.set $l2307 + local.get $l2306 + local.get $l2307 + i32.add + local.set $l2308 + local.get $l2307 + local.get $l2308 + i32.add + local.set $l2309 + local.get $l2308 + local.get $l2309 + i32.add + local.set $l2310 + local.get $l2309 + local.get $l2310 + i32.add + local.set $l2311 + local.get $l2310 + local.get $l2311 + i32.add + local.set $l2312 + local.get $l2311 + local.get $l2312 + i32.add + local.set $l2313 + local.get $l2312 + local.get $l2313 + i32.add + local.set $l2314 + local.get $l2313 + local.get $l2314 + i32.add + local.set $l2315 + local.get $l2314 + local.get $l2315 + i32.add + local.set $l2316 + local.get $l2315 + local.get $l2316 + i32.add + local.set $l2317 + local.get $l2316 + local.get $l2317 + i32.add + local.set $l2318 + local.get $l2317 + local.get $l2318 + i32.add + local.set $l2319 + local.get $l2318 + local.get $l2319 + i32.add + local.set $l2320 + local.get $l2319 + local.get $l2320 + i32.add + local.set $l2321 + local.get $l2320 + local.get $l2321 + i32.add + local.set $l2322 + local.get $l2321 + local.get $l2322 + i32.add + local.set $l2323 + local.get $l2322 + local.get $l2323 + i32.add + local.set $l2324 + local.get $l2323 + local.get $l2324 + i32.add + local.set $l2325 + local.get $l2324 + local.get $l2325 + i32.add + local.set $l2326 + local.get $l2325 + local.get $l2326 + i32.add + local.set $l2327 + local.get $l2326 + local.get $l2327 + i32.add + local.set $l2328 + local.get $l2327 + local.get $l2328 + i32.add + local.set $l2329 + local.get $l2328 + local.get $l2329 + i32.add + local.set $l2330 + local.get $l2329 + local.get $l2330 + i32.add + local.set $l2331 + local.get $l2330 + local.get $l2331 + i32.add + local.set $l2332 + local.get $l2331 + local.get $l2332 + i32.add + local.set $l2333 + local.get $l2332 + local.get $l2333 + i32.add + local.set $l2334 + local.get $l2333 + local.get $l2334 + i32.add + local.set $l2335 + local.get $l2334 + local.get $l2335 + i32.add + local.set $l2336 + local.get $l2335 + local.get $l2336 + i32.add + local.set $l2337 + local.get $l2336 + local.get $l2337 + i32.add + local.set $l2338 + local.get $l2337 + local.get $l2338 + i32.add + local.set $l2339 + local.get $l2338 + local.get $l2339 + i32.add + local.set $l2340 + local.get $l2339 + local.get $l2340 + i32.add + local.set $l2341 + local.get $l2340 + local.get $l2341 + i32.add + local.set $l2342 + local.get $l2341 + local.get $l2342 + i32.add + local.set $l2343 + local.get $l2342 + local.get $l2343 + i32.add + local.set $l2344 + local.get $l2343 + local.get $l2344 + i32.add + local.set $l2345 + local.get $l2344 + local.get $l2345 + i32.add + local.set $l2346 + local.get $l2345 + local.get $l2346 + i32.add + local.set $l2347 + local.get $l2346 + local.get $l2347 + i32.add + local.set $l2348 + local.get $l2347 + local.get $l2348 + i32.add + local.set $l2349 + local.get $l2348 + local.get $l2349 + i32.add + local.set $l2350 + local.get $l2349 + local.get $l2350 + i32.add + local.set $l2351 + local.get $l2350 + local.get $l2351 + i32.add + local.set $l2352 + local.get $l2351 + local.get $l2352 + i32.add + local.set $l2353 + local.get $l2352 + local.get $l2353 + i32.add + local.set $l2354 + local.get $l2353 + local.get $l2354 + i32.add + local.set $l2355 + local.get $l2354 + local.get $l2355 + i32.add + local.set $l2356 + local.get $l2355 + local.get $l2356 + i32.add + local.set $l2357 + local.get $l2356 + local.get $l2357 + i32.add + local.set $l2358 + local.get $l2357 + local.get $l2358 + i32.add + local.set $l2359 + local.get $l2358 + local.get $l2359 + i32.add + local.set $l2360 + local.get $l2359 + local.get $l2360 + i32.add + local.set $l2361 + local.get $l2360 + local.get $l2361 + i32.add + local.set $l2362 + local.get $l2361 + local.get $l2362 + i32.add + local.set $l2363 + local.get $l2362 + local.get $l2363 + i32.add + local.set $l2364 + local.get $l2363 + local.get $l2364 + i32.add + local.set $l2365 + local.get $l2364 + local.get $l2365 + i32.add + local.set $l2366 + local.get $l2365 + local.get $l2366 + i32.add + local.set $l2367 + local.get $l2366 + local.get $l2367 + i32.add + local.set $l2368 + local.get $l2367 + local.get $l2368 + i32.add + local.set $l2369 + local.get $l2368 + local.get $l2369 + i32.add + local.set $l2370 + local.get $l2369 + local.get $l2370 + i32.add + local.set $l2371 + local.get $l2370 + local.get $l2371 + i32.add + local.set $l2372 + local.get $l2371 + local.get $l2372 + i32.add + local.set $l2373 + local.get $l2372 + local.get $l2373 + i32.add + local.set $l2374 + local.get $l2373 + local.get $l2374 + i32.add + local.set $l2375 + local.get $l2374 + local.get $l2375 + i32.add + local.set $l2376 + local.get $l2375 + local.get $l2376 + i32.add + local.set $l2377 + local.get $l2376 + local.get $l2377 + i32.add + local.set $l2378 + local.get $l2377 + local.get $l2378 + i32.add + local.set $l2379 + local.get $l2378 + local.get $l2379 + i32.add + local.set $l2380 + local.get $l2379 + local.get $l2380 + i32.add + local.set $l2381 + local.get $l2380 + local.get $l2381 + i32.add + local.set $l2382 + local.get $l2381 + local.get $l2382 + i32.add + local.set $l2383 + local.get $l2382 + local.get $l2383 + i32.add + local.set $l2384 + local.get $l2383 + local.get $l2384 + i32.add + local.set $l2385 + local.get $l2384 + local.get $l2385 + i32.add + local.set $l2386 + local.get $l2385 + local.get $l2386 + i32.add + local.set $l2387 + local.get $l2386 + local.get $l2387 + i32.add + local.set $l2388 + local.get $l2387 + local.get $l2388 + i32.add + local.set $l2389 + local.get $l2388 + local.get $l2389 + i32.add + local.set $l2390 + local.get $l2389 + local.get $l2390 + i32.add + local.set $l2391 + local.get $l2390 + local.get $l2391 + i32.add + local.set $l2392 + local.get $l2391 + local.get $l2392 + i32.add + local.set $l2393 + local.get $l2392 + local.get $l2393 + i32.add + local.set $l2394 + local.get $l2393 + local.get $l2394 + i32.add + local.set $l2395 + local.get $l2394 + local.get $l2395 + i32.add + local.set $l2396 + local.get $l2395 + local.get $l2396 + i32.add + local.set $l2397 + local.get $l2396 + local.get $l2397 + i32.add + local.set $l2398 + local.get $l2397 + local.get $l2398 + i32.add + local.set $l2399 + local.get $l2398 + local.get $l2399 + i32.add + local.set $l2400 + local.get $l2399 + local.get $l2400 + i32.add + local.set $l2401 + local.get $l2400 + local.get $l2401 + i32.add + local.set $l2402 + local.get $l2401 + local.get $l2402 + i32.add + local.set $l2403 + local.get $l2402 + local.get $l2403 + i32.add + local.set $l2404 + local.get $l2403 + local.get $l2404 + i32.add + local.set $l2405 + local.get $l2404 + local.get $l2405 + i32.add + local.set $l2406 + local.get $l2405 + local.get $l2406 + i32.add + local.set $l2407 + local.get $l2406 + local.get $l2407 + i32.add + local.set $l2408 + local.get $l2407 + local.get $l2408 + i32.add + local.set $l2409 + local.get $l2408 + local.get $l2409 + i32.add + local.set $l2410 + local.get $l2409 + local.get $l2410 + i32.add + local.set $l2411 + local.get $l2410 + local.get $l2411 + i32.add + local.set $l2412 + local.get $l2411 + local.get $l2412 + i32.add + local.set $l2413 + local.get $l2412 + local.get $l2413 + i32.add + local.set $l2414 + local.get $l2413 + local.get $l2414 + i32.add + local.set $l2415 + local.get $l2414 + local.get $l2415 + i32.add + local.set $l2416 + local.get $l2415 + local.get $l2416 + i32.add + local.set $l2417 + local.get $l2416 + local.get $l2417 + i32.add + local.set $l2418 + local.get $l2417 + local.get $l2418 + i32.add + local.set $l2419 + local.get $l2418 + local.get $l2419 + i32.add + local.set $l2420 + local.get $l2419 + local.get $l2420 + i32.add + local.set $l2421 + local.get $l2420 + local.get $l2421 + i32.add + local.set $l2422 + local.get $l2421 + local.get $l2422 + i32.add + local.set $l2423 + local.get $l2422 + local.get $l2423 + i32.add + local.set $l2424 + local.get $l2423 + local.get $l2424 + i32.add + local.set $l2425 + local.get $l2424 + local.get $l2425 + i32.add + local.set $l2426 + local.get $l2425 + local.get $l2426 + i32.add + local.set $l2427 + local.get $l2426 + local.get $l2427 + i32.add + local.set $l2428 + local.get $l2427 + local.get $l2428 + i32.add + local.set $l2429 + local.get $l2428 + local.get $l2429 + i32.add + local.set $l2430 + local.get $l2429 + local.get $l2430 + i32.add + local.set $l2431 + local.get $l2430 + local.get $l2431 + i32.add + local.set $l2432 + local.get $l2431 + local.get $l2432 + i32.add + local.set $l2433 + local.get $l2432 + local.get $l2433 + i32.add + local.set $l2434 + local.get $l2433 + local.get $l2434 + i32.add + local.set $l2435 + local.get $l2434 + local.get $l2435 + i32.add + local.set $l2436 + local.get $l2435 + local.get $l2436 + i32.add + local.set $l2437 + local.get $l2436 + local.get $l2437 + i32.add + local.set $l2438 + local.get $l2437 + local.get $l2438 + i32.add + local.set $l2439 + local.get $l2438 + local.get $l2439 + i32.add + local.set $l2440 + local.get $l2439 + local.get $l2440 + i32.add + local.set $l2441 + local.get $l2440 + local.get $l2441 + i32.add + local.set $l2442 + local.get $l2441 + local.get $l2442 + i32.add + local.set $l2443 + local.get $l2442 + local.get $l2443 + i32.add + local.set $l2444 + local.get $l2443 + local.get $l2444 + i32.add + local.set $l2445 + local.get $l2444 + local.get $l2445 + i32.add + local.set $l2446 + local.get $l2445 + local.get $l2446 + i32.add + local.set $l2447 + local.get $l2446 + local.get $l2447 + i32.add + local.set $l2448 + local.get $l2447 + local.get $l2448 + i32.add + local.set $l2449 + local.get $l2448 + local.get $l2449 + i32.add + local.set $l2450 + local.get $l2449 + local.get $l2450 + i32.add + local.set $l2451 + local.get $l2450 + local.get $l2451 + i32.add + local.set $l2452 + local.get $l2451 + local.get $l2452 + i32.add + local.set $l2453 + local.get $l2452 + local.get $l2453 + i32.add + local.set $l2454 + local.get $l2453 + local.get $l2454 + i32.add + local.set $l2455 + local.get $l2454 + local.get $l2455 + i32.add + local.set $l2456 + local.get $l2455 + local.get $l2456 + i32.add + local.set $l2457 + local.get $l2456 + local.get $l2457 + i32.add + local.set $l2458 + local.get $l2457 + local.get $l2458 + i32.add + local.set $l2459 + local.get $l2458 + local.get $l2459 + i32.add + local.set $l2460 + local.get $l2459 + local.get $l2460 + i32.add + local.set $l2461 + local.get $l2460 + local.get $l2461 + i32.add + local.set $l2462 + local.get $l2461 + local.get $l2462 + i32.add + local.set $l2463 + local.get $l2462 + local.get $l2463 + i32.add + local.set $l2464 + local.get $l2463 + local.get $l2464 + i32.add + local.set $l2465 + local.get $l2464 + local.get $l2465 + i32.add + local.set $l2466 + local.get $l2465 + local.get $l2466 + i32.add + local.set $l2467 + local.get $l2466 + local.get $l2467 + i32.add + local.set $l2468 + local.get $l2467 + local.get $l2468 + i32.add + local.set $l2469 + local.get $l2468 + local.get $l2469 + i32.add + local.set $l2470 + local.get $l2469 + local.get $l2470 + i32.add + local.set $l2471 + local.get $l2470 + local.get $l2471 + i32.add + local.set $l2472 + local.get $l2471 + local.get $l2472 + i32.add + local.set $l2473 + local.get $l2472 + local.get $l2473 + i32.add + local.set $l2474 + local.get $l2473 + local.get $l2474 + i32.add + local.set $l2475 + local.get $l2474 + local.get $l2475 + i32.add + local.set $l2476 + local.get $l2475 + local.get $l2476 + i32.add + local.set $l2477 + local.get $l2476 + local.get $l2477 + i32.add + local.set $l2478 + local.get $l2477 + local.get $l2478 + i32.add + local.set $l2479 + local.get $l2478 + local.get $l2479 + i32.add + local.set $l2480 + local.get $l2479 + local.get $l2480 + i32.add + local.set $l2481 + local.get $l2480 + local.get $l2481 + i32.add + local.set $l2482 + local.get $l2481 + local.get $l2482 + i32.add + local.set $l2483 + local.get $l2482 + local.get $l2483 + i32.add + local.set $l2484 + local.get $l2483 + local.get $l2484 + i32.add + local.set $l2485 + local.get $l2484 + local.get $l2485 + i32.add + local.set $l2486 + local.get $l2485 + local.get $l2486 + i32.add + local.set $l2487 + local.get $l2486 + local.get $l2487 + i32.add + local.set $l2488 + local.get $l2487 + local.get $l2488 + i32.add + local.set $l2489 + local.get $l2488 + local.get $l2489 + i32.add + local.set $l2490 + local.get $l2489 + local.get $l2490 + i32.add + local.set $l2491 + local.get $l2490 + local.get $l2491 + i32.add + local.set $l2492 + local.get $l2491 + local.get $l2492 + i32.add + local.set $l2493 + local.get $l2492 + local.get $l2493 + i32.add + local.set $l2494 + local.get $l2493 + local.get $l2494 + i32.add + local.set $l2495 + local.get $l2494 + local.get $l2495 + i32.add + local.set $l2496 + local.get $l2495 + local.get $l2496 + i32.add + local.set $l2497 + local.get $l2496 + local.get $l2497 + i32.add + local.set $l2498 + local.get $l2497 + local.get $l2498 + i32.add + local.set $l2499 + local.get $l2498 + local.get $l2499 + i32.add + local.set $l2500 + local.get $l2499 + local.get $l2500 + i32.add + local.set $l2501 + local.get $l2500 + local.get $l2501 + i32.add + local.set $l2502 + local.get $l2501 + local.get $l2502 + i32.add + local.set $l2503 + local.get $l2502 + local.get $l2503 + i32.add + local.set $l2504 + local.get $l2503 + local.get $l2504 + i32.add + local.set $l2505 + local.get $l2504 + local.get $l2505 + i32.add + local.set $l2506 + local.get $l2505 + local.get $l2506 + i32.add + local.set $l2507 + local.get $l2506 + local.get $l2507 + i32.add + local.set $l2508 + local.get $l2507 + local.get $l2508 + i32.add + local.set $l2509 + local.get $l2508 + local.get $l2509 + i32.add + local.set $l2510 + local.get $l2509 + local.get $l2510 + i32.add + local.set $l2511 + local.get $l2510 + local.get $l2511 + i32.add + local.set $l2512 + local.get $l2511 + local.get $l2512 + i32.add + local.set $l2513 + local.get $l2512 + local.get $l2513 + i32.add + local.set $l2514 + local.get $l2513 + local.get $l2514 + i32.add + local.set $l2515 + local.get $l2514 + local.get $l2515 + i32.add + local.set $l2516 + local.get $l2515 + local.get $l2516 + i32.add + local.set $l2517 + local.get $l2516 + local.get $l2517 + i32.add + local.set $l2518 + local.get $l2517 + local.get $l2518 + i32.add + local.set $l2519 + local.get $l2518 + local.get $l2519 + i32.add + local.set $l2520 + local.get $l2519 + local.get $l2520 + i32.add + local.set $l2521 + local.get $l2520 + local.get $l2521 + i32.add + local.set $l2522 + local.get $l2521 + local.get $l2522 + i32.add + local.set $l2523 + local.get $l2522 + local.get $l2523 + i32.add + local.set $l2524 + local.get $l2523 + local.get $l2524 + i32.add + local.set $l2525 + local.get $l2524 + local.get $l2525 + i32.add + local.set $l2526 + local.get $l2525 + local.get $l2526 + i32.add + local.set $l2527 + local.get $l2526 + local.get $l2527 + i32.add + local.set $l2528 + local.get $l2527 + local.get $l2528 + i32.add + local.set $l2529 + local.get $l2528 + local.get $l2529 + i32.add + local.set $l2530 + local.get $l2529 + local.get $l2530 + i32.add + local.set $l2531 + local.get $l2530 + local.get $l2531 + i32.add + local.set $l2532 + local.get $l2531 + local.get $l2532 + i32.add + local.set $l2533 + local.get $l2532 + local.get $l2533 + i32.add + local.set $l2534 + local.get $l2533 + local.get $l2534 + i32.add + local.set $l2535 + local.get $l2534 + local.get $l2535 + i32.add + local.set $l2536 + local.get $l2535 + local.get $l2536 + i32.add + local.set $l2537 + local.get $l2536 + local.get $l2537 + i32.add + local.set $l2538 + local.get $l2537 + local.get $l2538 + i32.add + local.set $l2539 + local.get $l2538 + local.get $l2539 + i32.add + local.set $l2540 + local.get $l2539 + local.get $l2540 + i32.add + local.set $l2541 + local.get $l2540 + local.get $l2541 + i32.add + local.set $l2542 + local.get $l2541 + local.get $l2542 + i32.add + local.set $l2543 + local.get $l2542 + local.get $l2543 + i32.add + local.set $l2544 + local.get $l2543 + local.get $l2544 + i32.add + local.set $l2545 + local.get $l2544 + local.get $l2545 + i32.add + local.set $l2546 + local.get $l2545 + local.get $l2546 + i32.add + local.set $l2547 + local.get $l2546 + local.get $l2547 + i32.add + local.set $l2548 + local.get $l2547 + local.get $l2548 + i32.add + local.set $l2549 + local.get $l2548 + local.get $l2549 + i32.add + local.set $l2550 + local.get $l2549 + local.get $l2550 + i32.add + local.set $l2551 + local.get $l2550 + local.get $l2551 + i32.add + local.set $l2552 + local.get $l2551 + local.get $l2552 + i32.add + local.set $l2553 + local.get $l2552 + local.get $l2553 + i32.add + local.set $l2554 + local.get $l2553 + local.get $l2554 + i32.add + local.set $l2555 + local.get $l2554 + local.get $l2555 + i32.add + local.set $l2556 + local.get $l2555 + local.get $l2556 + i32.add + local.set $l2557 + local.get $l2556 + local.get $l2557 + i32.add + local.set $l2558 + local.get $l2557 + local.get $l2558 + i32.add + local.set $l2559 + local.get $l2558 + local.get $l2559 + i32.add + local.set $l2560 + local.get $l2559 + local.get $l2560 + i32.add + local.set $l2561 + local.get $l2560 + local.get $l2561 + i32.add + local.set $l2562 + local.get $l2561 + local.get $l2562 + i32.add + local.set $l2563 + local.get $l2562 + local.get $l2563 + i32.add + local.set $l2564 + local.get $l2563 + local.get $l2564 + i32.add + local.set $l2565 + local.get $l2564 + local.get $l2565 + i32.add + local.set $l2566 + local.get $l2565 + local.get $l2566 + i32.add + local.set $l2567 + local.get $l2566 + local.get $l2567 + i32.add + local.set $l2568 + local.get $l2567 + local.get $l2568 + i32.add + local.set $l2569 + local.get $l2568 + local.get $l2569 + i32.add + local.set $l2570 + local.get $l2569 + local.get $l2570 + i32.add + local.set $l2571 + local.get $l2570 + local.get $l2571 + i32.add + local.set $l2572 + local.get $l2571 + local.get $l2572 + i32.add + local.set $l2573 + local.get $l2572 + local.get $l2573 + i32.add + local.set $l2574 + local.get $l2573 + local.get $l2574 + i32.add + local.set $l2575 + local.get $l2574 + local.get $l2575 + i32.add + local.set $l2576 + local.get $l2575 + local.get $l2576 + i32.add + local.set $l2577 + local.get $l2576 + local.get $l2577 + i32.add + local.set $l2578 + local.get $l2577 + local.get $l2578 + i32.add + local.set $l2579 + local.get $l2578 + local.get $l2579 + i32.add + local.set $l2580 + local.get $l2579 + local.get $l2580 + i32.add + local.set $l2581 + local.get $l2580 + local.get $l2581 + i32.add + local.set $l2582 + local.get $l2581 + local.get $l2582 + i32.add + local.set $l2583 + local.get $l2582 + local.get $l2583 + i32.add + local.set $l2584 + local.get $l2583 + local.get $l2584 + i32.add + local.set $l2585 + local.get $l2584 + local.get $l2585 + i32.add + local.set $l2586 + local.get $l2585 + local.get $l2586 + i32.add + local.set $l2587 + local.get $l2586 + local.get $l2587 + i32.add + local.set $l2588 + local.get $l2587 + local.get $l2588 + i32.add + local.set $l2589 + local.get $l2588 + local.get $l2589 + i32.add + local.set $l2590 + local.get $l2589 + local.get $l2590 + i32.add + local.set $l2591 + local.get $l2590 + local.get $l2591 + i32.add + local.set $l2592 + local.get $l2591 + local.get $l2592 + i32.add + local.set $l2593 + local.get $l2592 + local.get $l2593 + i32.add + local.set $l2594 + local.get $l2593 + local.get $l2594 + i32.add + local.set $l2595 + local.get $l2594 + local.get $l2595 + i32.add + local.set $l2596 + local.get $l2595 + local.get $l2596 + i32.add + local.set $l2597 + local.get $l2596 + local.get $l2597 + i32.add + local.set $l2598 + local.get $l2597 + local.get $l2598 + i32.add + local.set $l2599 + local.get $l2598 + local.get $l2599 + i32.add + local.set $l2600 + local.get $l2599 + local.get $l2600 + i32.add + local.set $l2601 + local.get $l2600 + local.get $l2601 + i32.add + local.set $l2602 + local.get $l2601 + local.get $l2602 + i32.add + local.set $l2603 + local.get $l2602 + local.get $l2603 + i32.add + local.set $l2604 + local.get $l2603 + local.get $l2604 + i32.add + local.set $l2605 + local.get $l2604 + local.get $l2605 + i32.add + local.set $l2606 + local.get $l2605 + local.get $l2606 + i32.add + local.set $l2607 + local.get $l2606 + local.get $l2607 + i32.add + local.set $l2608 + local.get $l2607 + local.get $l2608 + i32.add + local.set $l2609 + local.get $l2608 + local.get $l2609 + i32.add + local.set $l2610 + local.get $l2609 + local.get $l2610 + i32.add + local.set $l2611 + local.get $l2610 + local.get $l2611 + i32.add + local.set $l2612 + local.get $l2611 + local.get $l2612 + i32.add + local.set $l2613 + local.get $l2612 + local.get $l2613 + i32.add + local.set $l2614 + local.get $l2613 + local.get $l2614 + i32.add + local.set $l2615 + local.get $l2614 + local.get $l2615 + i32.add + local.set $l2616 + local.get $l2615 + local.get $l2616 + i32.add + local.set $l2617 + local.get $l2616 + local.get $l2617 + i32.add + local.set $l2618 + local.get $l2617 + local.get $l2618 + i32.add + local.set $l2619 + local.get $l2618 + local.get $l2619 + i32.add + local.set $l2620 + local.get $l2619 + local.get $l2620 + i32.add + local.set $l2621 + local.get $l2620 + local.get $l2621 + i32.add + local.set $l2622 + local.get $l2621 + local.get $l2622 + i32.add + local.set $l2623 + local.get $l2622 + local.get $l2623 + i32.add + local.set $l2624 + local.get $l2623 + local.get $l2624 + i32.add + local.set $l2625 + local.get $l2624 + local.get $l2625 + i32.add + local.set $l2626 + local.get $l2625 + local.get $l2626 + i32.add + local.set $l2627 + local.get $l2626 + local.get $l2627 + i32.add + local.set $l2628 + local.get $l2627 + local.get $l2628 + i32.add + local.set $l2629 + local.get $l2628 + local.get $l2629 + i32.add + local.set $l2630 + local.get $l2629 + local.get $l2630 + i32.add + local.set $l2631 + local.get $l2630 + local.get $l2631 + i32.add + local.set $l2632 + local.get $l2631 + local.get $l2632 + i32.add + local.set $l2633 + local.get $l2632 + local.get $l2633 + i32.add + local.set $l2634 + local.get $l2633 + local.get $l2634 + i32.add + local.set $l2635 + local.get $l2634 + local.get $l2635 + i32.add + local.set $l2636 + local.get $l2635 + local.get $l2636 + i32.add + local.set $l2637 + local.get $l2636 + local.get $l2637 + i32.add + local.set $l2638 + local.get $l2637 + local.get $l2638 + i32.add + local.set $l2639 + local.get $l2638 + local.get $l2639 + i32.add + local.set $l2640 + local.get $l2639 + local.get $l2640 + i32.add + local.set $l2641 + local.get $l2640 + local.get $l2641 + i32.add + local.set $l2642 + local.get $l2641 + local.get $l2642 + i32.add + local.set $l2643 + local.get $l2642 + local.get $l2643 + i32.add + local.set $l2644 + local.get $l2643 + local.get $l2644 + i32.add + local.set $l2645 + local.get $l2644 + local.get $l2645 + i32.add + local.set $l2646 + local.get $l2645 + local.get $l2646 + i32.add + local.set $l2647 + local.get $l2646 + local.get $l2647 + i32.add + local.set $l2648 + local.get $l2647 + local.get $l2648 + i32.add + local.set $l2649 + local.get $l2648 + local.get $l2649 + i32.add + local.set $l2650 + local.get $l2649 + local.get $l2650 + i32.add + local.set $l2651 + local.get $l2650 + local.get $l2651 + i32.add + local.set $l2652 + local.get $l2651 + local.get $l2652 + i32.add + local.set $l2653 + local.get $l2652 + local.get $l2653 + i32.add + local.set $l2654 + local.get $l2653 + local.get $l2654 + i32.add + local.set $l2655 + local.get $l2654 + local.get $l2655 + i32.add + local.set $l2656 + local.get $l2655 + local.get $l2656 + i32.add + local.set $l2657 + local.get $l2656 + local.get $l2657 + i32.add + local.set $l2658 + local.get $l2657 + local.get $l2658 + i32.add + local.set $l2659 + local.get $l2658 + local.get $l2659 + i32.add + local.set $l2660 + local.get $l2659 + local.get $l2660 + i32.add + local.set $l2661 + local.get $l2660 + local.get $l2661 + i32.add + local.set $l2662 + local.get $l2661 + local.get $l2662 + i32.add + local.set $l2663 + local.get $l2662 + local.get $l2663 + i32.add + local.set $l2664 + local.get $l2663 + local.get $l2664 + i32.add + local.set $l2665 + local.get $l2664 + local.get $l2665 + i32.add + local.set $l2666 + local.get $l2665 + local.get $l2666 + i32.add + local.set $l2667 + local.get $l2666 + local.get $l2667 + i32.add + local.set $l2668 + local.get $l2667 + local.get $l2668 + i32.add + local.set $l2669 + local.get $l2668 + local.get $l2669 + i32.add + local.set $l2670 + local.get $l2669 + local.get $l2670 + i32.add + local.set $l2671 + local.get $l2670 + local.get $l2671 + i32.add + local.set $l2672 + local.get $l2671 + local.get $l2672 + i32.add + local.set $l2673 + local.get $l2672 + local.get $l2673 + i32.add + local.set $l2674 + local.get $l2673 + local.get $l2674 + i32.add + local.set $l2675 + local.get $l2674 + local.get $l2675 + i32.add + local.set $l2676 + local.get $l2675 + local.get $l2676 + i32.add + local.set $l2677 + local.get $l2676 + local.get $l2677 + i32.add + local.set $l2678 + local.get $l2677 + local.get $l2678 + i32.add + local.set $l2679 + local.get $l2678 + local.get $l2679 + i32.add + local.set $l2680 + local.get $l2679 + local.get $l2680 + i32.add + local.set $l2681 + local.get $l2680 + local.get $l2681 + i32.add + local.set $l2682 + local.get $l2681 + local.get $l2682 + i32.add + local.set $l2683 + local.get $l2682 + local.get $l2683 + i32.add + local.set $l2684 + local.get $l2683 + local.get $l2684 + i32.add + local.set $l2685 + local.get $l2684 + local.get $l2685 + i32.add + local.set $l2686 + local.get $l2685 + local.get $l2686 + i32.add + local.set $l2687 + local.get $l2686 + local.get $l2687 + i32.add + local.set $l2688 + local.get $l2687 + local.get $l2688 + i32.add + local.set $l2689 + local.get $l2688 + local.get $l2689 + i32.add + local.set $l2690 + local.get $l2689 + local.get $l2690 + i32.add + local.set $l2691 + local.get $l2690 + local.get $l2691 + i32.add + local.set $l2692 + local.get $l2691 + local.get $l2692 + i32.add + local.set $l2693 + local.get $l2692 + local.get $l2693 + i32.add + local.set $l2694 + local.get $l2693 + local.get $l2694 + i32.add + local.set $l2695 + local.get $l2694 + local.get $l2695 + i32.add + local.set $l2696 + local.get $l2695 + local.get $l2696 + i32.add + local.set $l2697 + local.get $l2696 + local.get $l2697 + i32.add + local.set $l2698 + local.get $l2697 + local.get $l2698 + i32.add + local.set $l2699 + local.get $l2698 + local.get $l2699 + i32.add + local.set $l2700 + local.get $l2699 + local.get $l2700 + i32.add + local.set $l2701 + local.get $l2700 + local.get $l2701 + i32.add + local.set $l2702 + local.get $l2701 + local.get $l2702 + i32.add + local.set $l2703 + local.get $l2702 + local.get $l2703 + i32.add + local.set $l2704 + local.get $l2703 + local.get $l2704 + i32.add + local.set $l2705 + local.get $l2704 + local.get $l2705 + i32.add + local.set $l2706 + local.get $l2705 + local.get $l2706 + i32.add + local.set $l2707 + local.get $l2706 + local.get $l2707 + i32.add + local.set $l2708 + local.get $l2707 + local.get $l2708 + i32.add + local.set $l2709 + local.get $l2708 + local.get $l2709 + i32.add + local.set $l2710 + local.get $l2709 + local.get $l2710 + i32.add + local.set $l2711 + local.get $l2710 + local.get $l2711 + i32.add + local.set $l2712 + local.get $l2711 + local.get $l2712 + i32.add + local.set $l2713 + local.get $l2712 + local.get $l2713 + i32.add + local.set $l2714 + local.get $l2713 + local.get $l2714 + i32.add + local.set $l2715 + local.get $l2714 + local.get $l2715 + i32.add + local.set $l2716 + local.get $l2715 + local.get $l2716 + i32.add + local.set $l2717 + local.get $l2716 + local.get $l2717 + i32.add + local.set $l2718 + local.get $l2717 + local.get $l2718 + i32.add + local.set $l2719 + local.get $l2718 + local.get $l2719 + i32.add + local.set $l2720 + local.get $l2719 + local.get $l2720 + i32.add + local.set $l2721 + local.get $l2720 + local.get $l2721 + i32.add + local.set $l2722 + local.get $l2721 + local.get $l2722 + i32.add + local.set $l2723 + local.get $l2722 + local.get $l2723 + i32.add + local.set $l2724 + local.get $l2723 + local.get $l2724 + i32.add + local.set $l2725 + local.get $l2724 + local.get $l2725 + i32.add + local.set $l2726 + local.get $l2725 + local.get $l2726 + i32.add + local.set $l2727 + local.get $l2726 + local.get $l2727 + i32.add + local.set $l2728 + local.get $l2727 + local.get $l2728 + i32.add + local.set $l2729 + local.get $l2728 + local.get $l2729 + i32.add + local.set $l2730 + local.get $l2729 + local.get $l2730 + i32.add + local.set $l2731 + local.get $l2730 + local.get $l2731 + i32.add + local.set $l2732 + local.get $l2731 + local.get $l2732 + i32.add + local.set $l2733 + local.get $l2732 + local.get $l2733 + i32.add + local.set $l2734 + local.get $l2733 + local.get $l2734 + i32.add + local.set $l2735 + local.get $l2734 + local.get $l2735 + i32.add + local.set $l2736 + local.get $l2735 + local.get $l2736 + i32.add + local.set $l2737 + local.get $l2736 + local.get $l2737 + i32.add + local.set $l2738 + local.get $l2737 + local.get $l2738 + i32.add + local.set $l2739 + local.get $l2738 + local.get $l2739 + i32.add + local.set $l2740 + local.get $l2739 + local.get $l2740 + i32.add + local.set $l2741 + local.get $l2740 + local.get $l2741 + i32.add + local.set $l2742 + local.get $l2741 + local.get $l2742 + i32.add + local.set $l2743 + local.get $l2742 + local.get $l2743 + i32.add + local.set $l2744 + local.get $l2743 + local.get $l2744 + i32.add + local.set $l2745 + local.get $l2744 + local.get $l2745 + i32.add + local.set $l2746 + local.get $l2745 + local.get $l2746 + i32.add + local.set $l2747 + local.get $l2746 + local.get $l2747 + i32.add + local.set $l2748 + local.get $l2747 + local.get $l2748 + i32.add + local.set $l2749 + local.get $l2748 + local.get $l2749 + i32.add + local.set $l2750 + local.get $l2749 + local.get $l2750 + i32.add + local.set $l2751 + local.get $l2750 + local.get $l2751 + i32.add + local.set $l2752 + local.get $l2751 + local.get $l2752 + i32.add + local.set $l2753 + local.get $l2752 + local.get $l2753 + i32.add + local.set $l2754 + local.get $l2753 + local.get $l2754 + i32.add + local.set $l2755 + local.get $l2754 + local.get $l2755 + i32.add + local.set $l2756 + local.get $l2755 + local.get $l2756 + i32.add + local.set $l2757 + local.get $l2756 + local.get $l2757 + i32.add + local.set $l2758 + local.get $l2757 + local.get $l2758 + i32.add + local.set $l2759 + local.get $l2758 + local.get $l2759 + i32.add + local.set $l2760 + local.get $l2759 + local.get $l2760 + i32.add + local.set $l2761 + local.get $l2760 + local.get $l2761 + i32.add + local.set $l2762 + local.get $l2761 + local.get $l2762 + i32.add + local.set $l2763 + local.get $l2762 + local.get $l2763 + i32.add + local.set $l2764 + local.get $l2763 + local.get $l2764 + i32.add + local.set $l2765 + local.get $l2764 + local.get $l2765 + i32.add + local.set $l2766 + local.get $l2765 + local.get $l2766 + i32.add + local.set $l2767 + local.get $l2766 + local.get $l2767 + i32.add + local.set $l2768 + local.get $l2767 + local.get $l2768 + i32.add + local.set $l2769 + local.get $l2768 + local.get $l2769 + i32.add + local.set $l2770 + local.get $l2769 + local.get $l2770 + i32.add + local.set $l2771 + local.get $l2770 + local.get $l2771 + i32.add + local.set $l2772 + local.get $l2771 + local.get $l2772 + i32.add + local.set $l2773 + local.get $l2772 + local.get $l2773 + i32.add + local.set $l2774 + local.get $l2773 + local.get $l2774 + i32.add + local.set $l2775 + local.get $l2774 + local.get $l2775 + i32.add + local.set $l2776 + local.get $l2775 + local.get $l2776 + i32.add + local.set $l2777 + local.get $l2776 + local.get $l2777 + i32.add + local.set $l2778 + local.get $l2777 + local.get $l2778 + i32.add + local.set $l2779 + local.get $l2778 + local.get $l2779 + i32.add + local.set $l2780 + local.get $l2779 + local.get $l2780 + i32.add + local.set $l2781 + local.get $l2780 + local.get $l2781 + i32.add + local.set $l2782 + local.get $l2781 + local.get $l2782 + i32.add + local.set $l2783 + local.get $l2782 + local.get $l2783 + i32.add + local.set $l2784 + local.get $l2783 + local.get $l2784 + i32.add + local.set $l2785 + local.get $l2784 + local.get $l2785 + i32.add + local.set $l2786 + local.get $l2785 + local.get $l2786 + i32.add + local.set $l2787 + local.get $l2786 + local.get $l2787 + i32.add + local.set $l2788 + local.get $l2787 + local.get $l2788 + i32.add + local.set $l2789 + local.get $l2788 + local.get $l2789 + i32.add + local.set $l2790 + local.get $l2789 + local.get $l2790 + i32.add + local.set $l2791 + local.get $l2790 + local.get $l2791 + i32.add + local.set $l2792 + local.get $l2791 + local.get $l2792 + i32.add + local.set $l2793 + local.get $l2792 + local.get $l2793 + i32.add + local.set $l2794 + local.get $l2793 + local.get $l2794 + i32.add + local.set $l2795 + local.get $l2794 + local.get $l2795 + i32.add + local.set $l2796 + local.get $l2795 + local.get $l2796 + i32.add + local.set $l2797 + local.get $l2796 + local.get $l2797 + i32.add + local.set $l2798 + local.get $l2797 + local.get $l2798 + i32.add + local.set $l2799 + local.get $l2798 + local.get $l2799 + i32.add + local.set $l2800 + local.get $l2799 + local.get $l2800 + i32.add + local.set $l2801 + local.get $l2800 + local.get $l2801 + i32.add + local.set $l2802 + local.get $l2801 + local.get $l2802 + i32.add + local.set $l2803 + local.get $l2802 + local.get $l2803 + i32.add + local.set $l2804 + local.get $l2803 + local.get $l2804 + i32.add + local.set $l2805 + local.get $l2804 + local.get $l2805 + i32.add + local.set $l2806 + local.get $l2805 + local.get $l2806 + i32.add + local.set $l2807 + local.get $l2806 + local.get $l2807 + i32.add + local.set $l2808 + local.get $l2807 + local.get $l2808 + i32.add + local.set $l2809 + local.get $l2808 + local.get $l2809 + i32.add + local.set $l2810 + local.get $l2809 + local.get $l2810 + i32.add + local.set $l2811 + local.get $l2810 + local.get $l2811 + i32.add + local.set $l2812 + local.get $l2811 + local.get $l2812 + i32.add + local.set $l2813 + local.get $l2812 + local.get $l2813 + i32.add + local.set $l2814 + local.get $l2813 + local.get $l2814 + i32.add + local.set $l2815 + local.get $l2814 + local.get $l2815 + i32.add + local.set $l2816 + local.get $l2815 + local.get $l2816 + i32.add + local.set $l2817 + local.get $l2816 + local.get $l2817 + i32.add + local.set $l2818 + local.get $l2817 + local.get $l2818 + i32.add + local.set $l2819 + local.get $l2818 + local.get $l2819 + i32.add + local.set $l2820 + local.get $l2819 + local.get $l2820 + i32.add + local.set $l2821 + local.get $l2820 + local.get $l2821 + i32.add + local.set $l2822 + local.get $l2821 + local.get $l2822 + i32.add + local.set $l2823 + local.get $l2822 + local.get $l2823 + i32.add + local.set $l2824 + local.get $l2823 + local.get $l2824 + i32.add + local.set $l2825 + local.get $l2824 + local.get $l2825 + i32.add + local.set $l2826 + local.get $l2825 + local.get $l2826 + i32.add + local.set $l2827 + local.get $l2826 + local.get $l2827 + i32.add + local.set $l2828 + local.get $l2827 + local.get $l2828 + i32.add + local.set $l2829 + local.get $l2828 + local.get $l2829 + i32.add + local.set $l2830 + local.get $l2829 + local.get $l2830 + i32.add + local.set $l2831 + local.get $l2830 + local.get $l2831 + i32.add + local.set $l2832 + local.get $l2831 + local.get $l2832 + i32.add + local.set $l2833 + local.get $l2832 + local.get $l2833 + i32.add + local.set $l2834 + local.get $l2833 + local.get $l2834 + i32.add + local.set $l2835 + local.get $l2834 + local.get $l2835 + i32.add + local.set $l2836 + local.get $l2835 + local.get $l2836 + i32.add + local.set $l2837 + local.get $l2836 + local.get $l2837 + i32.add + local.set $l2838 + local.get $l2837 + local.get $l2838 + i32.add + local.set $l2839 + local.get $l2838 + local.get $l2839 + i32.add + local.set $l2840 + local.get $l2839 + local.get $l2840 + i32.add + local.set $l2841 + local.get $l2840 + local.get $l2841 + i32.add + local.set $l2842 + local.get $l2841 + local.get $l2842 + i32.add + local.set $l2843 + local.get $l2842 + local.get $l2843 + i32.add + local.set $l2844 + local.get $l2843 + local.get $l2844 + i32.add + local.set $l2845 + local.get $l2844 + local.get $l2845 + i32.add + local.set $l2846 + local.get $l2845 + local.get $l2846 + i32.add + local.set $l2847 + local.get $l2846 + local.get $l2847 + i32.add + local.set $l2848 + local.get $l2847 + local.get $l2848 + i32.add + local.set $l2849 + local.get $l2848 + local.get $l2849 + i32.add + local.set $l2850 + local.get $l2849 + local.get $l2850 + i32.add + local.set $l2851 + local.get $l2850 + local.get $l2851 + i32.add + local.set $l2852 + local.get $l2851 + local.get $l2852 + i32.add + local.set $l2853 + local.get $l2852 + local.get $l2853 + i32.add + local.set $l2854 + local.get $l2853 + local.get $l2854 + i32.add + local.set $l2855 + local.get $l2854 + local.get $l2855 + i32.add + local.set $l2856 + local.get $l2855 + local.get $l2856 + i32.add + local.set $l2857 + local.get $l2856 + local.get $l2857 + i32.add + local.set $l2858 + local.get $l2857 + local.get $l2858 + i32.add + local.set $l2859 + local.get $l2858 + local.get $l2859 + i32.add + local.set $l2860 + local.get $l2859 + local.get $l2860 + i32.add + local.set $l2861 + local.get $l2860 + local.get $l2861 + i32.add + local.set $l2862 + local.get $l2861 + local.get $l2862 + i32.add + local.set $l2863 + local.get $l2862 + local.get $l2863 + i32.add + local.set $l2864 + local.get $l2863 + local.get $l2864 + i32.add + local.set $l2865 + local.get $l2864 + local.get $l2865 + i32.add + local.set $l2866 + local.get $l2865 + local.get $l2866 + i32.add + local.set $l2867 + local.get $l2866 + local.get $l2867 + i32.add + local.set $l2868 + local.get $l2867 + local.get $l2868 + i32.add + local.set $l2869 + local.get $l2868 + local.get $l2869 + i32.add + local.set $l2870 + local.get $l2869 + local.get $l2870 + i32.add + local.set $l2871 + local.get $l2870 + local.get $l2871 + i32.add + local.set $l2872 + local.get $l2871 + local.get $l2872 + i32.add + local.set $l2873 + local.get $l2872 + local.get $l2873 + i32.add + local.set $l2874 + local.get $l2873 + local.get $l2874 + i32.add + local.set $l2875 + local.get $l2874 + local.get $l2875 + i32.add + local.set $l2876 + local.get $l2875 + local.get $l2876 + i32.add + local.set $l2877 + local.get $l2876 + local.get $l2877 + i32.add + local.set $l2878 + local.get $l2877 + local.get $l2878 + i32.add + local.set $l2879 + local.get $l2878 + local.get $l2879 + i32.add + local.set $l2880 + local.get $l2879 + local.get $l2880 + i32.add + local.set $l2881 + local.get $l2880 + local.get $l2881 + i32.add + local.set $l2882 + local.get $l2881 + local.get $l2882 + i32.add + local.set $l2883 + local.get $l2882 + local.get $l2883 + i32.add + local.set $l2884 + local.get $l2883 + local.get $l2884 + i32.add + local.set $l2885 + local.get $l2884 + local.get $l2885 + i32.add + local.set $l2886 + local.get $l2885 + local.get $l2886 + i32.add + local.set $l2887 + local.get $l2886 + local.get $l2887 + i32.add + local.set $l2888 + local.get $l2887 + local.get $l2888 + i32.add + local.set $l2889 + local.get $l2888 + local.get $l2889 + i32.add + local.set $l2890 + local.get $l2889 + local.get $l2890 + i32.add + local.set $l2891 + local.get $l2890 + local.get $l2891 + i32.add + local.set $l2892 + local.get $l2891 + local.get $l2892 + i32.add + local.set $l2893 + local.get $l2892 + local.get $l2893 + i32.add + local.set $l2894 + local.get $l2893 + local.get $l2894 + i32.add + local.set $l2895 + local.get $l2894 + local.get $l2895 + i32.add + local.set $l2896 + local.get $l2895 + local.get $l2896 + i32.add + local.set $l2897 + local.get $l2896 + local.get $l2897 + i32.add + local.set $l2898 + local.get $l2897 + local.get $l2898 + i32.add + local.set $l2899 + local.get $l2898 + local.get $l2899 + i32.add + local.set $l2900 + local.get $l2899 + local.get $l2900 + i32.add + local.set $l2901 + local.get $l2900 + local.get $l2901 + i32.add + local.set $l2902 + local.get $l2901 + local.get $l2902 + i32.add + local.set $l2903 + local.get $l2902 + local.get $l2903 + i32.add + local.set $l2904 + local.get $l2903 + local.get $l2904 + i32.add + local.set $l2905 + local.get $l2904 + local.get $l2905 + i32.add + local.set $l2906 + local.get $l2905 + local.get $l2906 + i32.add + local.set $l2907 + local.get $l2906 + local.get $l2907 + i32.add + local.set $l2908 + local.get $l2907 + local.get $l2908 + i32.add + local.set $l2909 + local.get $l2908 + local.get $l2909 + i32.add + local.set $l2910 + local.get $l2909 + local.get $l2910 + i32.add + local.set $l2911 + local.get $l2910 + local.get $l2911 + i32.add + local.set $l2912 + local.get $l2911 + local.get $l2912 + i32.add + local.set $l2913 + local.get $l2912 + local.get $l2913 + i32.add + local.set $l2914 + local.get $l2913 + local.get $l2914 + i32.add + local.set $l2915 + local.get $l2914 + local.get $l2915 + i32.add + local.set $l2916 + local.get $l2915 + local.get $l2916 + i32.add + local.set $l2917 + local.get $l2916 + local.get $l2917 + i32.add + local.set $l2918 + local.get $l2917 + local.get $l2918 + i32.add + local.set $l2919 + local.get $l2918 + local.get $l2919 + i32.add + local.set $l2920 + local.get $l2919 + local.get $l2920 + i32.add + local.set $l2921 + local.get $l2920 + local.get $l2921 + i32.add + local.set $l2922 + local.get $l2921 + local.get $l2922 + i32.add + local.set $l2923 + local.get $l2922 + local.get $l2923 + i32.add + local.set $l2924 + local.get $l2923 + local.get $l2924 + i32.add + local.set $l2925 + local.get $l2924 + local.get $l2925 + i32.add + local.set $l2926 + local.get $l2925 + local.get $l2926 + i32.add + local.set $l2927 + local.get $l2926 + local.get $l2927 + i32.add + local.set $l2928 + local.get $l2927 + local.get $l2928 + i32.add + local.set $l2929 + local.get $l2928 + local.get $l2929 + i32.add + local.set $l2930 + local.get $l2929 + local.get $l2930 + i32.add + local.set $l2931 + local.get $l2930 + local.get $l2931 + i32.add + local.set $l2932 + local.get $l2931 + local.get $l2932 + i32.add + local.set $l2933 + local.get $l2932 + local.get $l2933 + i32.add + local.set $l2934 + local.get $l2933 + local.get $l2934 + i32.add + local.set $l2935 + local.get $l2934 + local.get $l2935 + i32.add + local.set $l2936 + local.get $l2935 + local.get $l2936 + i32.add + local.set $l2937 + local.get $l2936 + local.get $l2937 + i32.add + local.set $l2938 + local.get $l2937 + local.get $l2938 + i32.add + local.set $l2939 + local.get $l2938 + local.get $l2939 + i32.add + local.set $l2940 + local.get $l2939 + local.get $l2940 + i32.add + local.set $l2941 + local.get $l2940 + local.get $l2941 + i32.add + local.set $l2942 + local.get $l2941 + local.get $l2942 + i32.add + local.set $l2943 + local.get $l2942 + local.get $l2943 + i32.add + local.set $l2944 + local.get $l2943 + local.get $l2944 + i32.add + local.set $l2945 + local.get $l2944 + local.get $l2945 + i32.add + local.set $l2946 + local.get $l2945 + local.get $l2946 + i32.add + local.set $l2947 + local.get $l2946 + local.get $l2947 + i32.add + local.set $l2948 + local.get $l2947 + local.get $l2948 + i32.add + local.set $l2949 + local.get $l2948 + local.get $l2949 + i32.add + local.set $l2950 + local.get $l2949 + local.get $l2950 + i32.add + local.set $l2951 + local.get $l2950 + local.get $l2951 + i32.add + local.set $l2952 + local.get $l2951 + local.get $l2952 + i32.add + local.set $l2953 + local.get $l2952 + local.get $l2953 + i32.add + local.set $l2954 + local.get $l2953 + local.get $l2954 + i32.add + local.set $l2955 + local.get $l2954 + local.get $l2955 + i32.add + local.set $l2956 + local.get $l2955 + local.get $l2956 + i32.add + local.set $l2957 + local.get $l2956 + local.get $l2957 + i32.add + local.set $l2958 + local.get $l2957 + local.get $l2958 + i32.add + local.set $l2959 + local.get $l2958 + local.get $l2959 + i32.add + local.set $l2960 + local.get $l2959 + local.get $l2960 + i32.add + local.set $l2961 + local.get $l2960 + local.get $l2961 + i32.add + local.set $l2962 + local.get $l2961 + local.get $l2962 + i32.add + local.set $l2963 + local.get $l2962 + local.get $l2963 + i32.add + local.set $l2964 + local.get $l2963 + local.get $l2964 + i32.add + local.set $l2965 + local.get $l2964 + local.get $l2965 + i32.add + local.set $l2966 + local.get $l2965 + local.get $l2966 + i32.add + local.set $l2967 + local.get $l2966 + local.get $l2967 + i32.add + local.set $l2968 + local.get $l2967 + local.get $l2968 + i32.add + local.set $l2969 + local.get $l2968 + local.get $l2969 + i32.add + local.set $l2970 + local.get $l2969 + local.get $l2970 + i32.add + local.set $l2971 + local.get $l2970 + local.get $l2971 + i32.add + local.set $l2972 + local.get $l2971 + local.get $l2972 + i32.add + local.set $l2973 + local.get $l2972 + local.get $l2973 + i32.add + local.set $l2974 + local.get $l2973 + local.get $l2974 + i32.add + local.set $l2975 + local.get $l2974 + local.get $l2975 + i32.add + local.set $l2976 + local.get $l2975 + local.get $l2976 + i32.add + local.set $l2977 + local.get $l2976 + local.get $l2977 + i32.add + local.set $l2978 + local.get $l2977 + local.get $l2978 + i32.add + local.set $l2979 + local.get $l2978 + local.get $l2979 + i32.add + local.set $l2980 + local.get $l2979 + local.get $l2980 + i32.add + local.set $l2981 + local.get $l2980 + local.get $l2981 + i32.add + local.set $l2982 + local.get $l2981 + local.get $l2982 + i32.add + local.set $l2983 + local.get $l2982 + local.get $l2983 + i32.add + local.set $l2984 + local.get $l2983 + local.get $l2984 + i32.add + local.set $l2985 + local.get $l2984 + local.get $l2985 + i32.add + local.set $l2986 + local.get $l2985 + local.get $l2986 + i32.add + local.set $l2987 + local.get $l2986 + local.get $l2987 + i32.add + local.set $l2988 + local.get $l2987 + local.get $l2988 + i32.add + local.set $l2989 + local.get $l2988 + local.get $l2989 + i32.add + local.set $l2990 + local.get $l2989 + local.get $l2990 + i32.add + local.set $l2991 + local.get $l2990 + local.get $l2991 + i32.add + local.set $l2992 + local.get $l2991 + local.get $l2992 + i32.add + local.set $l2993 + local.get $l2992 + local.get $l2993 + i32.add + local.set $l2994 + local.get $l2993 + local.get $l2994 + i32.add + local.set $l2995 + local.get $l2994 + local.get $l2995 + i32.add + local.set $l2996 + local.get $l2995 + local.get $l2996 + i32.add + local.set $l2997 + local.get $l2996 + local.get $l2997 + i32.add + local.set $l2998 + local.get $l2997 + local.get $l2998 + i32.add + local.set $l2999 + local.get $l2998 + local.get $l2999 + i32.add + local.set $l3000 + local.get $l2999 + local.get $l3000 + i32.add + local.set $l3001 + local.get $l3000 + local.get $l3001 + i32.add + local.set $l3002 + local.get $l3001 + local.get $l3002 + i32.add + local.set $l3003 + local.get $l3002 + local.get $l3003 + i32.add + local.set $l3004 + local.get $l3003 + local.get $l3004 + i32.add + local.set $l3005 + local.get $l3004 + local.get $l3005 + i32.add + local.set $l3006 + local.get $l3005 + local.get $l3006 + i32.add + local.set $l3007 + local.get $l3006 + local.get $l3007 + i32.add + local.set $l3008 + local.get $l3007 + local.get $l3008 + i32.add + local.set $l3009 + local.get $l3008 + local.get $l3009 + i32.add + local.set $l3010 + local.get $l3009 + local.get $l3010 + i32.add + local.set $l3011 + local.get $l3010 + local.get $l3011 + i32.add + local.set $l3012 + local.get $l3011 + local.get $l3012 + i32.add + local.set $l3013 + local.get $l3012 + local.get $l3013 + i32.add + local.set $l3014 + local.get $l3013 + local.get $l3014 + i32.add + local.set $l3015 + local.get $l3014 + local.get $l3015 + i32.add + local.set $l3016 + local.get $l3015 + local.get $l3016 + i32.add + local.set $l3017 + local.get $l3016 + local.get $l3017 + i32.add + local.set $l3018 + local.get $l3017 + local.get $l3018 + i32.add + local.set $l3019 + local.get $l3018 + local.get $l3019 + i32.add + local.set $l3020 + local.get $l3019 + local.get $l3020 + i32.add + local.set $l3021 + local.get $l3020 + local.get $l3021 + i32.add + local.set $l3022 + local.get $l3021 + local.get $l3022 + i32.add + local.set $l3023 + local.get $l3022 + local.get $l3023 + i32.add + local.set $l3024 + local.get $l3023 + local.get $l3024 + i32.add + local.set $l3025 + local.get $l3024 + local.get $l3025 + i32.add + local.set $l3026 + local.get $l3025 + local.get $l3026 + i32.add + local.set $l3027 + local.get $l3026 + local.get $l3027 + i32.add + local.set $l3028 + local.get $l3027 + local.get $l3028 + i32.add + local.set $l3029 + local.get $l3028 + local.get $l3029 + i32.add + local.set $l3030 + local.get $l3029 + local.get $l3030 + i32.add + local.set $l3031 + local.get $l3030 + local.get $l3031 + i32.add + local.set $l3032 + local.get $l3031 + local.get $l3032 + i32.add + local.set $l3033 + local.get $l3032 + local.get $l3033 + i32.add + local.set $l3034 + local.get $l3033 + local.get $l3034 + i32.add + local.set $l3035 + local.get $l3034 + local.get $l3035 + i32.add + local.set $l3036 + local.get $l3035 + local.get $l3036 + i32.add + local.set $l3037 + local.get $l3036 + local.get $l3037 + i32.add + local.set $l3038 + local.get $l3037 + local.get $l3038 + i32.add + local.set $l3039 + local.get $l3038 + local.get $l3039 + i32.add + local.set $l3040 + local.get $l3039 + local.get $l3040 + i32.add + local.set $l3041 + local.get $l3040 + local.get $l3041 + i32.add + local.set $l3042 + local.get $l3041 + local.get $l3042 + i32.add + local.set $l3043 + local.get $l3042 + local.get $l3043 + i32.add + local.set $l3044 + local.get $l3043 + local.get $l3044 + i32.add + local.set $l3045 + local.get $l3044 + local.get $l3045 + i32.add + local.set $l3046 + local.get $l3045 + local.get $l3046 + i32.add + local.set $l3047 + local.get $l3046 + local.get $l3047 + i32.add + local.set $l3048 + local.get $l3047 + local.get $l3048 + i32.add + local.set $l3049 + local.get $l3048 + local.get $l3049 + i32.add + local.set $l3050 + local.get $l3049 + local.get $l3050 + i32.add + local.set $l3051 + local.get $l3050 + local.get $l3051 + i32.add + local.set $l3052 + local.get $l3051 + local.get $l3052 + i32.add + local.set $l3053 + local.get $l3052 + local.get $l3053 + i32.add + local.set $l3054 + local.get $l3053 + local.get $l3054 + i32.add + local.set $l3055 + local.get $l3054 + local.get $l3055 + i32.add + local.set $l3056 + local.get $l3055 + local.get $l3056 + i32.add + local.set $l3057 + local.get $l3056 + local.get $l3057 + i32.add + local.set $l3058 + local.get $l3057 + local.get $l3058 + i32.add + local.set $l3059 + local.get $l3058 + local.get $l3059 + i32.add + local.set $l3060 + local.get $l3059 + local.get $l3060 + i32.add + local.set $l3061 + local.get $l3060 + local.get $l3061 + i32.add + local.set $l3062 + local.get $l3061 + local.get $l3062 + i32.add + local.set $l3063 + local.get $l3062 + local.get $l3063 + i32.add + local.set $l3064 + local.get $l3063 + local.get $l3064 + i32.add + local.set $l3065 + local.get $l3064 + local.get $l3065 + i32.add + local.set $l3066 + local.get $l3065 + local.get $l3066 + i32.add + local.set $l3067 + local.get $l3066 + local.get $l3067 + i32.add + local.set $l3068 + local.get $l3067 + local.get $l3068 + i32.add + local.set $l3069 + local.get $l3068 + local.get $l3069 + i32.add + local.set $l3070 + local.get $l3069 + local.get $l3070 + i32.add + local.set $l3071 + local.get $l3070 + local.get $l3071 + i32.add + local.set $l3072 + local.get $l3071 + local.get $l3072 + i32.add + local.set $l3073 + local.get $l3072 + local.get $l3073 + i32.add + local.set $l3074 + local.get $l3073 + local.get $l3074 + i32.add + local.set $l3075 + local.get $l3074 + local.get $l3075 + i32.add + local.set $l3076 + local.get $l3075 + local.get $l3076 + i32.add + local.set $l3077 + local.get $l3076 + local.get $l3077 + i32.add + local.set $l3078 + local.get $l3077 + local.get $l3078 + i32.add + local.set $l3079 + local.get $l3078 + local.get $l3079 + i32.add + local.set $l3080 + local.get $l3079 + local.get $l3080 + i32.add + local.set $l3081 + local.get $l3080 + local.get $l3081 + i32.add + local.set $l3082 + local.get $l3081 + local.get $l3082 + i32.add + local.set $l3083 + local.get $l3082 + local.get $l3083 + i32.add + local.set $l3084 + local.get $l3083 + local.get $l3084 + i32.add + local.set $l3085 + local.get $l3084 + local.get $l3085 + i32.add + local.set $l3086 + local.get $l3085 + local.get $l3086 + i32.add + local.set $l3087 + local.get $l3086 + local.get $l3087 + i32.add + local.set $l3088 + local.get $l3087 + local.get $l3088 + i32.add + local.set $l3089 + local.get $l3088 + local.get $l3089 + i32.add + local.set $l3090 + local.get $l3089 + local.get $l3090 + i32.add + local.set $l3091 + local.get $l3090 + local.get $l3091 + i32.add + local.set $l3092 + local.get $l3091 + local.get $l3092 + i32.add + local.set $l3093 + local.get $l3092 + local.get $l3093 + i32.add + local.set $l3094 + local.get $l3093 + local.get $l3094 + i32.add + local.set $l3095 + local.get $l3094 + local.get $l3095 + i32.add + local.set $l3096 + local.get $l3095 + local.get $l3096 + i32.add + local.set $l3097 + local.get $l3096 + local.get $l3097 + i32.add + local.set $l3098 + local.get $l3097 + local.get $l3098 + i32.add + local.set $l3099 + local.get $l3098 + local.get $l3099 + i32.add + local.set $l3100 + local.get $l3099 + local.get $l3100 + i32.add + local.set $l3101 + local.get $l3100 + local.get $l3101 + i32.add + local.set $l3102 + local.get $l3101 + local.get $l3102 + i32.add + local.set $l3103 + local.get $l3102 + local.get $l3103 + i32.add + local.set $l3104 + local.get $l3103 + local.get $l3104 + i32.add + local.set $l3105 + local.get $l3104 + local.get $l3105 + i32.add + local.set $l3106 + local.get $l3105 + local.get $l3106 + i32.add + local.set $l3107 + local.get $l3106 + local.get $l3107 + i32.add + local.set $l3108 + local.get $l3107 + local.get $l3108 + i32.add + local.set $l3109 + local.get $l3108 + local.get $l3109 + i32.add + local.set $l3110 + local.get $l3109 + local.get $l3110 + i32.add + local.set $l3111 + local.get $l3110 + local.get $l3111 + i32.add + local.set $l3112 + local.get $l3111 + local.get $l3112 + i32.add + local.set $l3113 + local.get $l3112 + local.get $l3113 + i32.add + local.set $l3114 + local.get $l3113 + local.get $l3114 + i32.add + local.set $l3115 + local.get $l3114 + local.get $l3115 + i32.add + local.set $l3116 + local.get $l3115 + local.get $l3116 + i32.add + local.set $l3117 + local.get $l3116 + local.get $l3117 + i32.add + local.set $l3118 + local.get $l3117 + local.get $l3118 + i32.add + local.set $l3119 + local.get $l3118 + local.get $l3119 + i32.add + local.set $l3120 + local.get $l3119 + local.get $l3120 + i32.add + local.set $l3121 + local.get $l3120 + local.get $l3121 + i32.add + local.set $l3122 + local.get $l3121 + local.get $l3122 + i32.add + local.set $l3123 + local.get $l3122 + local.get $l3123 + i32.add + local.set $l3124 + local.get $l3123 + local.get $l3124 + i32.add + local.set $l3125 + local.get $l3124 + local.get $l3125 + i32.add + local.set $l3126 + local.get $l3125 + local.get $l3126 + i32.add + local.set $l3127 + local.get $l3126 + local.get $l3127 + i32.add + local.set $l3128 + local.get $l3127 + local.get $l3128 + i32.add + local.set $l3129 + local.get $l3128 + local.get $l3129 + i32.add + local.set $l3130 + local.get $l3129 + local.get $l3130 + i32.add + local.set $l3131 + local.get $l3130 + local.get $l3131 + i32.add + local.set $l3132 + local.get $l3131 + local.get $l3132 + i32.add + local.set $l3133 + local.get $l3132 + local.get $l3133 + i32.add + local.set $l3134 + local.get $l3133 + local.get $l3134 + i32.add + local.set $l3135 + local.get $l3134 + local.get $l3135 + i32.add + local.set $l3136 + local.get $l3135 + local.get $l3136 + i32.add + local.set $l3137 + local.get $l3136 + local.get $l3137 + i32.add + local.set $l3138 + local.get $l3137 + local.get $l3138 + i32.add + local.set $l3139 + local.get $l3138 + local.get $l3139 + i32.add + local.set $l3140 + local.get $l3139 + local.get $l3140 + i32.add + local.set $l3141 + local.get $l3140 + local.get $l3141 + i32.add + local.set $l3142 + local.get $l3141 + local.get $l3142 + i32.add + local.set $l3143 + local.get $l3142 + local.get $l3143 + i32.add + local.set $l3144 + local.get $l3143 + local.get $l3144 + i32.add + local.set $l3145 + local.get $l3144 + local.get $l3145 + i32.add + local.set $l3146 + local.get $l3145 + local.get $l3146 + i32.add + local.set $l3147 + local.get $l3146 + local.get $l3147 + i32.add + local.set $l3148 + local.get $l3147 + local.get $l3148 + i32.add + local.set $l3149 + local.get $l3148 + local.get $l3149 + i32.add + local.set $l3150 + local.get $l3149 + local.get $l3150 + i32.add + local.set $l3151 + local.get $l3150 + local.get $l3151 + i32.add + local.set $l3152 + local.get $l3151 + local.get $l3152 + i32.add + local.set $l3153 + local.get $l3152 + local.get $l3153 + i32.add + local.set $l3154 + local.get $l3153 + local.get $l3154 + i32.add + local.set $l3155 + local.get $l3154 + local.get $l3155 + i32.add + local.set $l3156 + local.get $l3155 + local.get $l3156 + i32.add + local.set $l3157 + local.get $l3156 + local.get $l3157 + i32.add + local.set $l3158 + local.get $l3157 + local.get $l3158 + i32.add + local.set $l3159 + local.get $l3158 + local.get $l3159 + i32.add + local.set $l3160 + local.get $l3159 + local.get $l3160 + i32.add + local.set $l3161 + local.get $l3160 + local.get $l3161 + i32.add + local.set $l3162 + local.get $l3161 + local.get $l3162 + i32.add + local.set $l3163 + local.get $l3162 + local.get $l3163 + i32.add + local.set $l3164 + local.get $l3163 + local.get $l3164 + i32.add + local.set $l3165 + local.get $l3164 + local.get $l3165 + i32.add + local.set $l3166 + local.get $l3165 + local.get $l3166 + i32.add + local.set $l3167 + local.get $l3166 + local.get $l3167 + i32.add + local.set $l3168 + local.get $l3167 + local.get $l3168 + i32.add + local.set $l3169 + local.get $l3168 + local.get $l3169 + i32.add + local.set $l3170 + local.get $l3169 + local.get $l3170 + i32.add + local.set $l3171 + local.get $l3170 + local.get $l3171 + i32.add + local.set $l3172 + local.get $l3171 + local.get $l3172 + i32.add + local.set $l3173 + local.get $l3172 + local.get $l3173 + i32.add + local.set $l3174 + local.get $l3173 + local.get $l3174 + i32.add + local.set $l3175 + local.get $l3174 + local.get $l3175 + i32.add + local.set $l3176 + local.get $l3175 + local.get $l3176 + i32.add + local.set $l3177 + local.get $l3176 + local.get $l3177 + i32.add + local.set $l3178 + local.get $l3177 + local.get $l3178 + i32.add + local.set $l3179 + local.get $l3178 + local.get $l3179 + i32.add + local.set $l3180 + local.get $l3179 + local.get $l3180 + i32.add + local.set $l3181 + local.get $l3180 + local.get $l3181 + i32.add + local.set $l3182 + local.get $l3181 + local.get $l3182 + i32.add + local.set $l3183 + local.get $l3182 + local.get $l3183 + i32.add + local.set $l3184 + local.get $l3183 + local.get $l3184 + i32.add + local.set $l3185 + local.get $l3184 + local.get $l3185 + i32.add + local.set $l3186 + local.get $l3185 + local.get $l3186 + i32.add + local.set $l3187 + local.get $l3186 + local.get $l3187 + i32.add + local.set $l3188 + local.get $l3187 + local.get $l3188 + i32.add + local.set $l3189 + local.get $l3188 + local.get $l3189 + i32.add + local.set $l3190 + local.get $l3189 + local.get $l3190 + i32.add + local.set $l3191 + local.get $l3190 + local.get $l3191 + i32.add + local.set $l3192 + local.get $l3191 + local.get $l3192 + i32.add + local.set $l3193 + local.get $l3192 + local.get $l3193 + i32.add + local.set $l3194 + local.get $l3193 + local.get $l3194 + i32.add + local.set $l3195 + local.get $l3194 + local.get $l3195 + i32.add + local.set $l3196 + local.get $l3195 + local.get $l3196 + i32.add + local.set $l3197 + local.get $l3196 + local.get $l3197 + i32.add + local.set $l3198 + local.get $l3197 + local.get $l3198 + i32.add + local.set $l3199 + local.get $l3198 + local.get $l3199 + i32.add + local.set $l3200 + local.get $l3199 + local.get $l3200 + i32.add + local.set $l3201 + local.get $l3200 + local.get $l3201 + i32.add + local.set $l3202 + local.get $l3201 + local.get $l3202 + i32.add + local.set $l3203 + local.get $l3202 + local.get $l3203 + i32.add + local.set $l3204 + local.get $l3203 + local.get $l3204 + i32.add + local.set $l3205 + local.get $l3204 + local.get $l3205 + i32.add + local.set $l3206 + local.get $l3205 + local.get $l3206 + i32.add + local.set $l3207 + local.get $l3206 + local.get $l3207 + i32.add + local.set $l3208 + local.get $l3207 + local.get $l3208 + i32.add + local.set $l3209 + local.get $l3208 + local.get $l3209 + i32.add + local.set $l3210 + local.get $l3209 + local.get $l3210 + i32.add + local.set $l3211 + local.get $l3210 + local.get $l3211 + i32.add + local.set $l3212 + local.get $l3211 + local.get $l3212 + i32.add + local.set $l3213 + local.get $l3212 + local.get $l3213 + i32.add + local.set $l3214 + local.get $l3213 + local.get $l3214 + i32.add + local.set $l3215 + local.get $l3214 + local.get $l3215 + i32.add + local.set $l3216 + local.get $l3215 + local.get $l3216 + i32.add + local.set $l3217 + local.get $l3216 + local.get $l3217 + i32.add + local.set $l3218 + local.get $l3217 + local.get $l3218 + i32.add + local.set $l3219 + local.get $l3218 + local.get $l3219 + i32.add + local.set $l3220 + local.get $l3219 + local.get $l3220 + i32.add + local.set $l3221 + local.get $l3220 + local.get $l3221 + i32.add + local.set $l3222 + local.get $l3221 + local.get $l3222 + i32.add + local.set $l3223 + local.get $l3222 + local.get $l3223 + i32.add + local.set $l3224 + local.get $l3223 + local.get $l3224 + i32.add + local.set $l3225 + local.get $l3224 + local.get $l3225 + i32.add + local.set $l3226 + local.get $l3225 + local.get $l3226 + i32.add + local.set $l3227 + local.get $l3226 + local.get $l3227 + i32.add + local.set $l3228 + local.get $l3227 + local.get $l3228 + i32.add + local.set $l3229 + local.get $l3228 + local.get $l3229 + i32.add + local.set $l3230 + local.get $l3229 + local.get $l3230 + i32.add + local.set $l3231 + local.get $l3230 + local.get $l3231 + i32.add + local.set $l3232 + local.get $l3231 + local.get $l3232 + i32.add + local.set $l3233 + local.get $l3232 + local.get $l3233 + i32.add + local.set $l3234 + local.get $l3233 + local.get $l3234 + i32.add + local.set $l3235 + local.get $l3234 + local.get $l3235 + i32.add + local.set $l3236 + local.get $l3235 + local.get $l3236 + i32.add + local.set $l3237 + local.get $l3236 + local.get $l3237 + i32.add + local.set $l3238 + local.get $l3237 + local.get $l3238 + i32.add + local.set $l3239 + local.get $l3238 + local.get $l3239 + i32.add + local.set $l3240 + local.get $l3239 + local.get $l3240 + i32.add + local.set $l3241 + local.get $l3240 + local.get $l3241 + i32.add + local.set $l3242 + local.get $l3241 + local.get $l3242 + i32.add + local.set $l3243 + local.get $l3242 + local.get $l3243 + i32.add + local.set $l3244 + local.get $l3243 + local.get $l3244 + i32.add + local.set $l3245 + local.get $l3244 + local.get $l3245 + i32.add + local.set $l3246 + local.get $l3245 + local.get $l3246 + i32.add + local.set $l3247 + local.get $l3246 + local.get $l3247 + i32.add + local.set $l3248 + local.get $l3247 + local.get $l3248 + i32.add + local.set $l3249 + local.get $l3248 + local.get $l3249 + i32.add + local.set $l3250 + local.get $l3249 + local.get $l3250 + i32.add + local.set $l3251 + local.get $l3250 + local.get $l3251 + i32.add + local.set $l3252 + local.get $l3251 + local.get $l3252 + i32.add + local.set $l3253 + local.get $l3252 + local.get $l3253 + i32.add + local.set $l3254 + local.get $l3253 + local.get $l3254 + i32.add + local.set $l3255 + local.get $l3254 + local.get $l3255 + i32.add + local.set $l3256 + local.get $l3255 + local.get $l3256 + i32.add + local.set $l3257 + local.get $l3256 + local.get $l3257 + i32.add + local.set $l3258 + local.get $l3257 + local.get $l3258 + i32.add + local.set $l3259 + local.get $l3258 + local.get $l3259 + i32.add + local.set $l3260 + local.get $l3259 + local.get $l3260 + i32.add + local.set $l3261 + local.get $l3260 + local.get $l3261 + i32.add + local.set $l3262 + local.get $l3261 + local.get $l3262 + i32.add + local.set $l3263 + local.get $l3262 + local.get $l3263 + i32.add + local.set $l3264 + local.get $l3263 + local.get $l3264 + i32.add + local.set $l3265 + local.get $l3264 + local.get $l3265 + i32.add + local.set $l3266 + local.get $l3265 + local.get $l3266 + i32.add + local.set $l3267 + local.get $l3266 + local.get $l3267 + i32.add + local.set $l3268 + local.get $l3267 + local.get $l3268 + i32.add + local.set $l3269 + local.get $l3268 + local.get $l3269 + i32.add + local.set $l3270 + local.get $l3269 + local.get $l3270 + i32.add + local.set $l3271 + local.get $l3270 + local.get $l3271 + i32.add + local.set $l3272 + local.get $l3271 + local.get $l3272 + i32.add + local.set $l3273 + local.get $l3272 + local.get $l3273 + i32.add + local.set $l3274 + local.get $l3273 + local.get $l3274 + i32.add + local.set $l3275 + local.get $l3274 + local.get $l3275 + i32.add + local.set $l3276 + local.get $l3275 + local.get $l3276 + i32.add + local.set $l3277 + local.get $l3276 + local.get $l3277 + i32.add + local.set $l3278 + local.get $l3277 + local.get $l3278 + i32.add + local.set $l3279 + local.get $l3278 + local.get $l3279 + i32.add + local.set $l3280 + local.get $l3279 + local.get $l3280 + i32.add + local.set $l3281 + local.get $l3280 + local.get $l3281 + i32.add + local.set $l3282 + local.get $l3281 + local.get $l3282 + i32.add + local.set $l3283 + local.get $l3282 + local.get $l3283 + i32.add + local.set $l3284 + local.get $l3283 + local.get $l3284 + i32.add + local.set $l3285 + local.get $l3284 + local.get $l3285 + i32.add + local.set $l3286 + local.get $l3285 + local.get $l3286 + i32.add + local.set $l3287 + local.get $l3286 + local.get $l3287 + i32.add + local.set $l3288 + local.get $l3287 + local.get $l3288 + i32.add + local.set $l3289 + local.get $l3288 + local.get $l3289 + i32.add + local.set $l3290 + local.get $l3289 + local.get $l3290 + i32.add + local.set $l3291 + local.get $l3290 + local.get $l3291 + i32.add + local.set $l3292 + local.get $l3291 + local.get $l3292 + i32.add + local.set $l3293 + local.get $l3292 + local.get $l3293 + i32.add + local.set $l3294 + local.get $l3293 + local.get $l3294 + i32.add + local.set $l3295 + local.get $l3294 + local.get $l3295 + i32.add + local.set $l3296 + local.get $l3295 + local.get $l3296 + i32.add + local.set $l3297 + local.get $l3296 + local.get $l3297 + i32.add + local.set $l3298 + local.get $l3297 + local.get $l3298 + i32.add + local.set $l3299 + local.get $l3298 + local.get $l3299 + i32.add + local.set $l3300 + local.get $l3299 + local.get $l3300 + i32.add + local.set $l3301 + local.get $l3300 + local.get $l3301 + i32.add + local.set $l3302 + local.get $l3301 + local.get $l3302 + i32.add + local.set $l3303 + local.get $l3302 + local.get $l3303 + i32.add + local.set $l3304 + local.get $l3303 + local.get $l3304 + i32.add + local.set $l3305 + local.get $l3304 + local.get $l3305 + i32.add + local.set $l3306 + local.get $l3305 + local.get $l3306 + i32.add + local.set $l3307 + local.get $l3306 + local.get $l3307 + i32.add + local.set $l3308 + local.get $l3307 + local.get $l3308 + i32.add + local.set $l3309 + local.get $l3308 + local.get $l3309 + i32.add + local.set $l3310 + local.get $l3309 + local.get $l3310 + i32.add + local.set $l3311 + local.get $l3310 + local.get $l3311 + i32.add + local.set $l3312 + local.get $l3311 + local.get $l3312 + i32.add + local.set $l3313 + local.get $l3312 + local.get $l3313 + i32.add + local.set $l3314 + local.get $l3313 + local.get $l3314 + i32.add + local.set $l3315 + local.get $l3314 + local.get $l3315 + i32.add + local.set $l3316 + local.get $l3315 + local.get $l3316 + i32.add + local.set $l3317 + local.get $l3316 + local.get $l3317 + i32.add + local.set $l3318 + local.get $l3317 + local.get $l3318 + i32.add + local.set $l3319 + local.get $l3318 + local.get $l3319 + i32.add + local.set $l3320 + local.get $l3319 + local.get $l3320 + i32.add + local.set $l3321 + local.get $l3320 + local.get $l3321 + i32.add + local.set $l3322 + local.get $l3321 + local.get $l3322 + i32.add + local.set $l3323 + local.get $l3322 + local.get $l3323 + i32.add + local.set $l3324 + local.get $l3323 + local.get $l3324 + i32.add + local.set $l3325 + local.get $l3324 + local.get $l3325 + i32.add + local.set $l3326 + local.get $l3325 + local.get $l3326 + i32.add + local.set $l3327 + local.get $l3326 + local.get $l3327 + i32.add + local.set $l3328 + local.get $l3327 + local.get $l3328 + i32.add + local.set $l3329 + local.get $l3328 + local.get $l3329 + i32.add + local.set $l3330 + local.get $l3329 + local.get $l3330 + i32.add + local.set $l3331 + local.get $l3330 + local.get $l3331 + i32.add + local.set $l3332 + local.get $l3331 + local.get $l3332 + i32.add + local.set $l3333 + local.get $l3332 + local.get $l3333 + i32.add + local.set $l3334 + local.get $l3333 + local.get $l3334 + i32.add + local.set $l3335 + local.get $l3334 + local.get $l3335 + i32.add + local.set $l3336 + local.get $l3335 + local.get $l3336 + i32.add + local.set $l3337 + local.get $l3336 + local.get $l3337 + i32.add + local.set $l3338 + local.get $l3337 + local.get $l3338 + i32.add + local.set $l3339 + local.get $l3338 + local.get $l3339 + i32.add + local.set $l3340 + local.get $l3339 + local.get $l3340 + i32.add + local.set $l3341 + local.get $l3340 + local.get $l3341 + i32.add + local.set $l3342 + local.get $l3341 + local.get $l3342 + i32.add + local.set $l3343 + local.get $l3342 + local.get $l3343 + i32.add + local.set $l3344 + local.get $l3343 + local.get $l3344 + i32.add + local.set $l3345 + local.get $l3344 + local.get $l3345 + i32.add + local.set $l3346 + local.get $l3345 + local.get $l3346 + i32.add + local.set $l3347 + local.get $l3346 + local.get $l3347 + i32.add + local.set $l3348 + local.get $l3347 + local.get $l3348 + i32.add + local.set $l3349 + local.get $l3348 + local.get $l3349 + i32.add + local.set $l3350 + local.get $l3349 + local.get $l3350 + i32.add + local.set $l3351 + local.get $l3350 + local.get $l3351 + i32.add + local.set $l3352 + local.get $l3351 + local.get $l3352 + i32.add + local.set $l3353 + local.get $l3352 + local.get $l3353 + i32.add + local.set $l3354 + local.get $l3353 + local.get $l3354 + i32.add + local.set $l3355 + local.get $l3354 + local.get $l3355 + i32.add + local.set $l3356 + local.get $l3355 + local.get $l3356 + i32.add + local.set $l3357 + local.get $l3356 + local.get $l3357 + i32.add + local.set $l3358 + local.get $l3357 + local.get $l3358 + i32.add + local.set $l3359 + local.get $l3358 + local.get $l3359 + i32.add + local.set $l3360 + local.get $l3359 + local.get $l3360 + i32.add + local.set $l3361 + local.get $l3360 + local.get $l3361 + i32.add + local.set $l3362 + local.get $l3361 + local.get $l3362 + i32.add + local.set $l3363 + local.get $l3362 + local.get $l3363 + i32.add + local.set $l3364 + local.get $l3363 + local.get $l3364 + i32.add + local.set $l3365 + local.get $l3364 + local.get $l3365 + i32.add + local.set $l3366 + local.get $l3365 + local.get $l3366 + i32.add + local.set $l3367 + local.get $l3366 + local.get $l3367 + i32.add + local.set $l3368 + local.get $l3367 + local.get $l3368 + i32.add + local.set $l3369 + local.get $l3368 + local.get $l3369 + i32.add + local.set $l3370 + local.get $l3369 + local.get $l3370 + i32.add + local.set $l3371 + local.get $l3370 + local.get $l3371 + i32.add + local.set $l3372 + local.get $l3371 + local.get $l3372 + i32.add + local.set $l3373 + local.get $l3372 + local.get $l3373 + i32.add + local.set $l3374 + local.get $l3373 + local.get $l3374 + i32.add + local.set $l3375 + local.get $l3374 + local.get $l3375 + i32.add + local.set $l3376 + local.get $l3375 + local.get $l3376 + i32.add + local.set $l3377 + local.get $l3376 + local.get $l3377 + i32.add + local.set $l3378 + local.get $l3377 + local.get $l3378 + i32.add + local.set $l3379 + local.get $l3378 + local.get $l3379 + i32.add + local.set $l3380 + local.get $l3379 + local.get $l3380 + i32.add + local.set $l3381 + local.get $l3380 + local.get $l3381 + i32.add + local.set $l3382 + local.get $l3381 + local.get $l3382 + i32.add + local.set $l3383 + local.get $l3382 + local.get $l3383 + i32.add + local.set $l3384 + local.get $l3383 + local.get $l3384 + i32.add + local.set $l3385 + local.get $l3384 + local.get $l3385 + i32.add + local.set $l3386 + local.get $l3385 + local.get $l3386 + i32.add + local.set $l3387 + local.get $l3386 + local.get $l3387 + i32.add + local.set $l3388 + local.get $l3387 + local.get $l3388 + i32.add + local.set $l3389 + local.get $l3388 + local.get $l3389 + i32.add + local.set $l3390 + local.get $l3389 + local.get $l3390 + i32.add + local.set $l3391 + local.get $l3390 + local.get $l3391 + i32.add + local.set $l3392 + local.get $l3391 + local.get $l3392 + i32.add + local.set $l3393 + local.get $l3392 + local.get $l3393 + i32.add + local.set $l3394 + local.get $l3393 + local.get $l3394 + i32.add + local.set $l3395 + local.get $l3394 + local.get $l3395 + i32.add + local.set $l3396 + local.get $l3395 + local.get $l3396 + i32.add + local.set $l3397 + local.get $l3396 + local.get $l3397 + i32.add + local.set $l3398 + local.get $l3397 + local.get $l3398 + i32.add + local.set $l3399 + local.get $l3398 + local.get $l3399 + i32.add + local.set $l3400 + local.get $l3399 + local.get $l3400 + i32.add + local.set $l3401 + local.get $l3400 + local.get $l3401 + i32.add + local.set $l3402 + local.get $l3401 + local.get $l3402 + i32.add + local.set $l3403 + local.get $l3402 + local.get $l3403 + i32.add + local.set $l3404 + local.get $l3403 + local.get $l3404 + i32.add + local.set $l3405 + local.get $l3404 + local.get $l3405 + i32.add + local.set $l3406 + local.get $l3405 + local.get $l3406 + i32.add + local.set $l3407 + local.get $l3406 + local.get $l3407 + i32.add + local.set $l3408 + local.get $l3407 + local.get $l3408 + i32.add + local.set $l3409 + local.get $l3408 + local.get $l3409 + i32.add + local.set $l3410 + local.get $l3409 + local.get $l3410 + i32.add + local.set $l3411 + local.get $l3410 + local.get $l3411 + i32.add + local.set $l3412 + local.get $l3411 + local.get $l3412 + i32.add + local.set $l3413 + local.get $l3412 + local.get $l3413 + i32.add + local.set $l3414 + local.get $l3413 + local.get $l3414 + i32.add + local.set $l3415 + local.get $l3414 + local.get $l3415 + i32.add + local.set $l3416 + local.get $l3415 + local.get $l3416 + i32.add + local.set $l3417 + local.get $l3416 + local.get $l3417 + i32.add + local.set $l3418 + local.get $l3417 + local.get $l3418 + i32.add + local.set $l3419 + local.get $l3418 + local.get $l3419 + i32.add + local.set $l3420 + local.get $l3419 + local.get $l3420 + i32.add + local.set $l3421 + local.get $l3420 + local.get $l3421 + i32.add + local.set $l3422 + local.get $l3421 + local.get $l3422 + i32.add + local.set $l3423 + local.get $l3422 + local.get $l3423 + i32.add + local.set $l3424 + local.get $l3423 + local.get $l3424 + i32.add + local.set $l3425 + local.get $l3424 + local.get $l3425 + i32.add + local.set $l3426 + local.get $l3425 + local.get $l3426 + i32.add + local.set $l3427 + local.get $l3426 + local.get $l3427 + i32.add + local.set $l3428 + local.get $l3427 + local.get $l3428 + i32.add + local.set $l3429 + local.get $l3428 + local.get $l3429 + i32.add + local.set $l3430 + local.get $l3429 + local.get $l3430 + i32.add + local.set $l3431 + local.get $l3430 + local.get $l3431 + i32.add + local.set $l3432 + local.get $l3431 + local.get $l3432 + i32.add + local.set $l3433 + local.get $l3432 + local.get $l3433 + i32.add + local.set $l3434 + local.get $l3433 + local.get $l3434 + i32.add + local.set $l3435 + local.get $l3434 + local.get $l3435 + i32.add + local.set $l3436 + local.get $l3435 + local.get $l3436 + i32.add + local.set $l3437 + local.get $l3436 + local.get $l3437 + i32.add + local.set $l3438 + local.get $l3437 + local.get $l3438 + i32.add + local.set $l3439 + local.get $l3438 + local.get $l3439 + i32.add + local.set $l3440 + local.get $l3439 + local.get $l3440 + i32.add + local.set $l3441 + local.get $l3440 + local.get $l3441 + i32.add + local.set $l3442 + local.get $l3441 + local.get $l3442 + i32.add + local.set $l3443 + local.get $l3442 + local.get $l3443 + i32.add + local.set $l3444 + local.get $l3443 + local.get $l3444 + i32.add + local.set $l3445 + local.get $l3444 + local.get $l3445 + i32.add + local.set $l3446 + local.get $l3445 + local.get $l3446 + i32.add + local.set $l3447 + local.get $l3446 + local.get $l3447 + i32.add + local.set $l3448 + local.get $l3447 + local.get $l3448 + i32.add + local.set $l3449 + local.get $l3448 + local.get $l3449 + i32.add + local.set $l3450 + local.get $l3449 + local.get $l3450 + i32.add + local.set $l3451 + local.get $l3450 + local.get $l3451 + i32.add + local.set $l3452 + local.get $l3451 + local.get $l3452 + i32.add + local.set $l3453 + local.get $l3452 + local.get $l3453 + i32.add + local.set $l3454 + local.get $l3453 + local.get $l3454 + i32.add + local.set $l3455 + local.get $l3454 + local.get $l3455 + i32.add + local.set $l3456 + local.get $l3455 + local.get $l3456 + i32.add + local.set $l3457 + local.get $l3456 + local.get $l3457 + i32.add + local.set $l3458 + local.get $l3457 + local.get $l3458 + i32.add + local.set $l3459 + local.get $l3458 + local.get $l3459 + i32.add + local.set $l3460 + local.get $l3459 + local.get $l3460 + i32.add + local.set $l3461 + local.get $l3460 + local.get $l3461 + i32.add + local.set $l3462 + local.get $l3461 + local.get $l3462 + i32.add + local.set $l3463 + local.get $l3462 + local.get $l3463 + i32.add + local.set $l3464 + local.get $l3463 + local.get $l3464 + i32.add + local.set $l3465 + local.get $l3464 + local.get $l3465 + i32.add + local.set $l3466 + local.get $l3465 + local.get $l3466 + i32.add + local.set $l3467 + local.get $l3466 + local.get $l3467 + i32.add + local.set $l3468 + local.get $l3467 + local.get $l3468 + i32.add + local.set $l3469 + local.get $l3468 + local.get $l3469 + i32.add + local.set $l3470 + local.get $l3469 + local.get $l3470 + i32.add + local.set $l3471 + local.get $l3470 + local.get $l3471 + i32.add + local.set $l3472 + local.get $l3471 + local.get $l3472 + i32.add + local.set $l3473 + local.get $l3472 + local.get $l3473 + i32.add + local.set $l3474 + local.get $l3473 + local.get $l3474 + i32.add + local.set $l3475 + local.get $l3474 + local.get $l3475 + i32.add + local.set $l3476 + local.get $l3475 + local.get $l3476 + i32.add + local.set $l3477 + local.get $l3476 + local.get $l3477 + i32.add + local.set $l3478 + local.get $l3477 + local.get $l3478 + i32.add + local.set $l3479 + local.get $l3478 + local.get $l3479 + i32.add + local.set $l3480 + local.get $l3479 + local.get $l3480 + i32.add + local.set $l3481 + local.get $l3480 + local.get $l3481 + i32.add + local.set $l3482 + local.get $l3481 + local.get $l3482 + i32.add + local.set $l3483 + local.get $l3482 + local.get $l3483 + i32.add + local.set $l3484 + local.get $l3483 + local.get $l3484 + i32.add + local.set $l3485 + local.get $l3484 + local.get $l3485 + i32.add + local.set $l3486 + local.get $l3485 + local.get $l3486 + i32.add + local.set $l3487 + local.get $l3486 + local.get $l3487 + i32.add + local.set $l3488 + local.get $l3487 + local.get $l3488 + i32.add + local.set $l3489 + local.get $l3488 + local.get $l3489 + i32.add + local.set $l3490 + local.get $l3489 + local.get $l3490 + i32.add + local.set $l3491 + local.get $l3490 + local.get $l3491 + i32.add + local.set $l3492 + local.get $l3491 + local.get $l3492 + i32.add + local.set $l3493 + local.get $l3492 + local.get $l3493 + i32.add + local.set $l3494 + local.get $l3493 + local.get $l3494 + i32.add + local.set $l3495 + local.get $l3494 + local.get $l3495 + i32.add + local.set $l3496 + local.get $l3495 + local.get $l3496 + i32.add + local.set $l3497 + local.get $l3496 + local.get $l3497 + i32.add + local.set $l3498 + local.get $l3497 + local.get $l3498 + i32.add + local.set $l3499 + local.get $l3498 + local.get $l3499 + i32.add + local.set $l3500 + local.get $l3499 + local.get $l3500 + i32.add + local.set $l3501 + local.get $l3500 + local.get $l3501 + i32.add + local.set $l3502 + local.get $l3501 + local.get $l3502 + i32.add + local.set $l3503 + local.get $l3502 + local.get $l3503 + i32.add + local.set $l3504 + local.get $l3503 + local.get $l3504 + i32.add + local.set $l3505 + local.get $l3504 + local.get $l3505 + i32.add + local.set $l3506 + local.get $l3505 + local.get $l3506 + i32.add + local.set $l3507 + local.get $l3506 + local.get $l3507 + i32.add + local.set $l3508 + local.get $l3507 + local.get $l3508 + i32.add + local.set $l3509 + local.get $l3508 + local.get $l3509 + i32.add + local.set $l3510 + local.get $l3509 + local.get $l3510 + i32.add + local.set $l3511 + local.get $l3510 + local.get $l3511 + i32.add + local.set $l3512 + local.get $l3511 + local.get $l3512 + i32.add + local.set $l3513 + local.get $l3512 + local.get $l3513 + i32.add + local.set $l3514 + local.get $l3513 + local.get $l3514 + i32.add + local.set $l3515 + local.get $l3514 + local.get $l3515 + i32.add + local.set $l3516 + local.get $l3515 + local.get $l3516 + i32.add + local.set $l3517 + local.get $l3516 + local.get $l3517 + i32.add + local.set $l3518 + local.get $l3517 + local.get $l3518 + i32.add + local.set $l3519 + local.get $l3518 + local.get $l3519 + i32.add + local.set $l3520 + local.get $l3519 + local.get $l3520 + i32.add + local.set $l3521 + local.get $l3520 + local.get $l3521 + i32.add + local.set $l3522 + local.get $l3521 + local.get $l3522 + i32.add + local.set $l3523 + local.get $l3522 + local.get $l3523 + i32.add + local.set $l3524 + local.get $l3523 + local.get $l3524 + i32.add + local.set $l3525 + local.get $l3524 + local.get $l3525 + i32.add + local.set $l3526 + local.get $l3525 + local.get $l3526 + i32.add + local.set $l3527 + local.get $l3526 + local.get $l3527 + i32.add + local.set $l3528 + local.get $l3527 + local.get $l3528 + i32.add + local.set $l3529 + local.get $l3528 + local.get $l3529 + i32.add + local.set $l3530 + local.get $l3529 + local.get $l3530 + i32.add + local.set $l3531 + local.get $l3530 + local.get $l3531 + i32.add + local.set $l3532 + local.get $l3531 + local.get $l3532 + i32.add + local.set $l3533 + local.get $l3532 + local.get $l3533 + i32.add + local.set $l3534 + local.get $l3533 + local.get $l3534 + i32.add + local.set $l3535 + local.get $l3534 + local.get $l3535 + i32.add + local.set $l3536 + local.get $l3535 + local.get $l3536 + i32.add + local.set $l3537 + local.get $l3536 + local.get $l3537 + i32.add + local.set $l3538 + local.get $l3537 + local.get $l3538 + i32.add + local.set $l3539 + local.get $l3538 + local.get $l3539 + i32.add + local.set $l3540 + local.get $l3539 + local.get $l3540 + i32.add + local.set $l3541 + local.get $l3540 + local.get $l3541 + i32.add + local.set $l3542 + local.get $l3541 + local.get $l3542 + i32.add + local.set $l3543 + local.get $l3542 + local.get $l3543 + i32.add + local.set $l3544 + local.get $l3543 + local.get $l3544 + i32.add + local.set $l3545 + local.get $l3544 + local.get $l3545 + i32.add + local.set $l3546 + local.get $l3545 + local.get $l3546 + i32.add + local.set $l3547 + local.get $l3546 + local.get $l3547 + i32.add + local.set $l3548 + local.get $l3547 + local.get $l3548 + i32.add + local.set $l3549 + local.get $l3548 + local.get $l3549 + i32.add + local.set $l3550 + local.get $l3549 + local.get $l3550 + i32.add + local.set $l3551 + local.get $l3550 + local.get $l3551 + i32.add + local.set $l3552 + local.get $l3551 + local.get $l3552 + i32.add + local.set $l3553 + local.get $l3552 + local.get $l3553 + i32.add + local.set $l3554 + local.get $l3553 + local.get $l3554 + i32.add + local.set $l3555 + local.get $l3554 + local.get $l3555 + i32.add + local.set $l3556 + local.get $l3555 + local.get $l3556 + i32.add + local.set $l3557 + local.get $l3556 + local.get $l3557 + i32.add + local.set $l3558 + local.get $l3557 + local.get $l3558 + i32.add + local.set $l3559 + local.get $l3558 + local.get $l3559 + i32.add + local.set $l3560 + local.get $l3559 + local.get $l3560 + i32.add + local.set $l3561 + local.get $l3560 + local.get $l3561 + i32.add + local.set $l3562 + local.get $l3561 + local.get $l3562 + i32.add + local.set $l3563 + local.get $l3562 + local.get $l3563 + i32.add + local.set $l3564 + local.get $l3563 + local.get $l3564 + i32.add + local.set $l3565 + local.get $l3564 + local.get $l3565 + i32.add + local.set $l3566 + local.get $l3565 + local.get $l3566 + i32.add + local.set $l3567 + local.get $l3566 + local.get $l3567 + i32.add + local.set $l3568 + local.get $l3567 + local.get $l3568 + i32.add + local.set $l3569 + local.get $l3568 + local.get $l3569 + i32.add + local.set $l3570 + local.get $l3569 + local.get $l3570 + i32.add + local.set $l3571 + local.get $l3570 + local.get $l3571 + i32.add + local.set $l3572 + local.get $l3571 + local.get $l3572 + i32.add + local.set $l3573 + local.get $l3572 + local.get $l3573 + i32.add + local.set $l3574 + local.get $l3573 + local.get $l3574 + i32.add + local.set $l3575 + local.get $l3574 + local.get $l3575 + i32.add + local.set $l3576 + local.get $l3575 + local.get $l3576 + i32.add + local.set $l3577 + local.get $l3576 + local.get $l3577 + i32.add + local.set $l3578 + local.get $l3577 + local.get $l3578 + i32.add + local.set $l3579 + local.get $l3578 + local.get $l3579 + i32.add + local.set $l3580 + local.get $l3579 + local.get $l3580 + i32.add + local.set $l3581 + local.get $l3580 + local.get $l3581 + i32.add + local.set $l3582 + local.get $l3581 + local.get $l3582 + i32.add + local.set $l3583 + local.get $l3582 + local.get $l3583 + i32.add + local.set $l3584 + local.get $l3583 + local.get $l3584 + i32.add + local.set $l3585 + local.get $l3584 + local.get $l3585 + i32.add + local.set $l3586 + local.get $l3585 + local.get $l3586 + i32.add + local.set $l3587 + local.get $l3586 + local.get $l3587 + i32.add + local.set $l3588 + local.get $l3587 + local.get $l3588 + i32.add + local.set $l3589 + local.get $l3588 + local.get $l3589 + i32.add + local.set $l3590 + local.get $l3589 + local.get $l3590 + i32.add + local.set $l3591 + local.get $l3590 + local.get $l3591 + i32.add + local.set $l3592 + local.get $l3591 + local.get $l3592 + i32.add + local.set $l3593 + local.get $l3592 + local.get $l3593 + i32.add + local.set $l3594 + local.get $l3593 + local.get $l3594 + i32.add + local.set $l3595 + local.get $l3594 + local.get $l3595 + i32.add + local.set $l3596 + local.get $l3595 + local.get $l3596 + i32.add + local.set $l3597 + local.get $l3596 + local.get $l3597 + i32.add + local.set $l3598 + local.get $l3597 + local.get $l3598 + i32.add + local.set $l3599 + local.get $l3598 + local.get $l3599 + i32.add + local.set $l3600 + local.get $l3599 + local.get $l3600 + i32.add + local.set $l3601 + local.get $l3600 + local.get $l3601 + i32.add + local.set $l3602 + local.get $l3601 + local.get $l3602 + i32.add + local.set $l3603 + local.get $l3602 + local.get $l3603 + i32.add + local.set $l3604 + local.get $l3603 + local.get $l3604 + i32.add + local.set $l3605 + local.get $l3604 + local.get $l3605 + i32.add + local.set $l3606 + local.get $l3605 + local.get $l3606 + i32.add + local.set $l3607 + local.get $l3606 + local.get $l3607 + i32.add + local.set $l3608 + local.get $l3607 + local.get $l3608 + i32.add + local.set $l3609 + local.get $l3608 + local.get $l3609 + i32.add + local.set $l3610 + local.get $l3609 + local.get $l3610 + i32.add + local.set $l3611 + local.get $l3610 + local.get $l3611 + i32.add + local.set $l3612 + local.get $l3611 + local.get $l3612 + i32.add + local.set $l3613 + local.get $l3612 + local.get $l3613 + i32.add + local.set $l3614 + local.get $l3613 + local.get $l3614 + i32.add + local.set $l3615 + local.get $l3614 + local.get $l3615 + i32.add + local.set $l3616 + local.get $l3615 + local.get $l3616 + i32.add + local.set $l3617 + local.get $l3616 + local.get $l3617 + i32.add + local.set $l3618 + local.get $l3617 + local.get $l3618 + i32.add + local.set $l3619 + local.get $l3618 + local.get $l3619 + i32.add + local.set $l3620 + local.get $l3619 + local.get $l3620 + i32.add + local.set $l3621 + local.get $l3620 + local.get $l3621 + i32.add + local.set $l3622 + local.get $l3621 + local.get $l3622 + i32.add + local.set $l3623 + local.get $l3622 + local.get $l3623 + i32.add + local.set $l3624 + local.get $l3623 + local.get $l3624 + i32.add + local.set $l3625 + local.get $l3624 + local.get $l3625 + i32.add + local.set $l3626 + local.get $l3625 + local.get $l3626 + i32.add + local.set $l3627 + local.get $l3626 + local.get $l3627 + i32.add + local.set $l3628 + local.get $l3627 + local.get $l3628 + i32.add + local.set $l3629 + local.get $l3628 + local.get $l3629 + i32.add + local.set $l3630 + local.get $l3629 + local.get $l3630 + i32.add + local.set $l3631 + local.get $l3630 + local.get $l3631 + i32.add + local.set $l3632 + local.get $l3631 + local.get $l3632 + i32.add + local.set $l3633 + local.get $l3632 + local.get $l3633 + i32.add + local.set $l3634 + local.get $l3633 + local.get $l3634 + i32.add + local.set $l3635 + local.get $l3634 + local.get $l3635 + i32.add + local.set $l3636 + local.get $l3635 + local.get $l3636 + i32.add + local.set $l3637 + local.get $l3636 + local.get $l3637 + i32.add + local.set $l3638 + local.get $l3637 + local.get $l3638 + i32.add + local.set $l3639 + local.get $l3638 + local.get $l3639 + i32.add + local.set $l3640 + local.get $l3639 + local.get $l3640 + i32.add + local.set $l3641 + local.get $l3640 + local.get $l3641 + i32.add + local.set $l3642 + local.get $l3641 + local.get $l3642 + i32.add + local.set $l3643 + local.get $l3642 + local.get $l3643 + i32.add + local.set $l3644 + local.get $l3643 + local.get $l3644 + i32.add + local.set $l3645 + local.get $l3644 + local.get $l3645 + i32.add + local.set $l3646 + local.get $l3645 + local.get $l3646 + i32.add + local.set $l3647 + local.get $l3646 + local.get $l3647 + i32.add + local.set $l3648 + local.get $l3647 + local.get $l3648 + i32.add + local.set $l3649 + local.get $l3648 + local.get $l3649 + i32.add + local.set $l3650 + local.get $l3649 + local.get $l3650 + i32.add + local.set $l3651 + local.get $l3650 + local.get $l3651 + i32.add + local.set $l3652 + local.get $l3651 + local.get $l3652 + i32.add + local.set $l3653 + local.get $l3652 + local.get $l3653 + i32.add + local.set $l3654 + local.get $l3653 + local.get $l3654 + i32.add + local.set $l3655 + local.get $l3654 + local.get $l3655 + i32.add + local.set $l3656 + local.get $l3655 + local.get $l3656 + i32.add + local.set $l3657 + local.get $l3656 + local.get $l3657 + i32.add + local.set $l3658 + local.get $l3657 + local.get $l3658 + i32.add + local.set $l3659 + local.get $l3658 + local.get $l3659 + i32.add + local.set $l3660 + local.get $l3659 + local.get $l3660 + i32.add + local.set $l3661 + local.get $l3660 + local.get $l3661 + i32.add + local.set $l3662 + local.get $l3661 + local.get $l3662 + i32.add + local.set $l3663 + local.get $l3662 + local.get $l3663 + i32.add + local.set $l3664 + local.get $l3663 + local.get $l3664 + i32.add + local.set $l3665 + local.get $l3664 + local.get $l3665 + i32.add + local.set $l3666 + local.get $l3665 + local.get $l3666 + i32.add + local.set $l3667 + local.get $l3666 + local.get $l3667 + i32.add + local.set $l3668 + local.get $l3667 + local.get $l3668 + i32.add + local.set $l3669 + local.get $l3668 + local.get $l3669 + i32.add + local.set $l3670 + local.get $l3669 + local.get $l3670 + i32.add + local.set $l3671 + local.get $l3670 + local.get $l3671 + i32.add + local.set $l3672 + local.get $l3671 + local.get $l3672 + i32.add + local.set $l3673 + local.get $l3672 + local.get $l3673 + i32.add + local.set $l3674 + local.get $l3673 + local.get $l3674 + i32.add + local.set $l3675 + local.get $l3674 + local.get $l3675 + i32.add + local.set $l3676 + local.get $l3675 + local.get $l3676 + i32.add + local.set $l3677 + local.get $l3676 + local.get $l3677 + i32.add + local.set $l3678 + local.get $l3677 + local.get $l3678 + i32.add + local.set $l3679 + local.get $l3678 + local.get $l3679 + i32.add + local.set $l3680 + local.get $l3679 + local.get $l3680 + i32.add + local.set $l3681 + local.get $l3680 + local.get $l3681 + i32.add + local.set $l3682 + local.get $l3681 + local.get $l3682 + i32.add + local.set $l3683 + local.get $l3682 + local.get $l3683 + i32.add + local.set $l3684 + local.get $l3683 + local.get $l3684 + i32.add + local.set $l3685 + local.get $l3684 + local.get $l3685 + i32.add + local.set $l3686 + local.get $l3685 + local.get $l3686 + i32.add + local.set $l3687 + local.get $l3686 + local.get $l3687 + i32.add + local.set $l3688 + local.get $l3687 + local.get $l3688 + i32.add + local.set $l3689 + local.get $l3688 + local.get $l3689 + i32.add + local.set $l3690 + local.get $l3689 + local.get $l3690 + i32.add + local.set $l3691 + local.get $l3690 + local.get $l3691 + i32.add + local.set $l3692 + local.get $l3691 + local.get $l3692 + i32.add + local.set $l3693 + local.get $l3692 + local.get $l3693 + i32.add + local.set $l3694 + local.get $l3693 + local.get $l3694 + i32.add + local.set $l3695 + local.get $l3694 + local.get $l3695 + i32.add + local.set $l3696 + local.get $l3695 + local.get $l3696 + i32.add + local.set $l3697 + local.get $l3696 + local.get $l3697 + i32.add + local.set $l3698 + local.get $l3697 + local.get $l3698 + i32.add + local.set $l3699 + local.get $l3698 + local.get $l3699 + i32.add + local.set $l3700 + local.get $l3699 + local.get $l3700 + i32.add + local.set $l3701 + local.get $l3700 + local.get $l3701 + i32.add + local.set $l3702 + local.get $l3701 + local.get $l3702 + i32.add + local.set $l3703 + local.get $l3702 + local.get $l3703 + i32.add + local.set $l3704 + local.get $l3703 + local.get $l3704 + i32.add + local.set $l3705 + local.get $l3704 + local.get $l3705 + i32.add + local.set $l3706 + local.get $l3705 + local.get $l3706 + i32.add + local.set $l3707 + local.get $l3706 + local.get $l3707 + i32.add + local.set $l3708 + local.get $l3707 + local.get $l3708 + i32.add + local.set $l3709 + local.get $l3708 + local.get $l3709 + i32.add + local.set $l3710 + local.get $l3709 + local.get $l3710 + i32.add + local.set $l3711 + local.get $l3710 + local.get $l3711 + i32.add + local.set $l3712 + local.get $l3711 + local.get $l3712 + i32.add + local.set $l3713 + local.get $l3712 + local.get $l3713 + i32.add + local.set $l3714 + local.get $l3713 + local.get $l3714 + i32.add + local.set $l3715 + local.get $l3714 + local.get $l3715 + i32.add + local.set $l3716 + local.get $l3715 + local.get $l3716 + i32.add + local.set $l3717 + local.get $l3716 + local.get $l3717 + i32.add + local.set $l3718 + local.get $l3717 + local.get $l3718 + i32.add + local.set $l3719 + local.get $l3718 + local.get $l3719 + i32.add + local.set $l3720 + local.get $l3719 + local.get $l3720 + i32.add + local.set $l3721 + local.get $l3720 + local.get $l3721 + i32.add + local.set $l3722 + local.get $l3721 + local.get $l3722 + i32.add + local.set $l3723 + local.get $l3722 + local.get $l3723 + i32.add + local.set $l3724 + local.get $l3723 + local.get $l3724 + i32.add + local.set $l3725 + local.get $l3724 + local.get $l3725 + i32.add + local.set $l3726 + local.get $l3725 + local.get $l3726 + i32.add + local.set $l3727 + local.get $l3726 + local.get $l3727 + i32.add + local.set $l3728 + local.get $l3727 + local.get $l3728 + i32.add + local.set $l3729 + local.get $l3728 + local.get $l3729 + i32.add + local.set $l3730 + local.get $l3729 + local.get $l3730 + i32.add + local.set $l3731 + local.get $l3730 + local.get $l3731 + i32.add + local.set $l3732 + local.get $l3731 + local.get $l3732 + i32.add + local.set $l3733 + local.get $l3732 + local.get $l3733 + i32.add + local.set $l3734 + local.get $l3733 + local.get $l3734 + i32.add + local.set $l3735 + local.get $l3734 + local.get $l3735 + i32.add + local.set $l3736 + local.get $l3735 + local.get $l3736 + i32.add + local.set $l3737 + local.get $l3736 + local.get $l3737 + i32.add + local.set $l3738 + local.get $l3737 + local.get $l3738 + i32.add + local.set $l3739 + local.get $l3738 + local.get $l3739 + i32.add + local.set $l3740 + local.get $l3739 + local.get $l3740 + i32.add + local.set $l3741 + local.get $l3740 + local.get $l3741 + i32.add + local.set $l3742 + local.get $l3741 + local.get $l3742 + i32.add + local.set $l3743 + local.get $l3742 + local.get $l3743 + i32.add + local.set $l3744 + local.get $l3743 + local.get $l3744 + i32.add + local.set $l3745 + local.get $l3744 + local.get $l3745 + i32.add + local.set $l3746 + local.get $l3745 + local.get $l3746 + i32.add + local.set $l3747 + local.get $l3746 + local.get $l3747 + i32.add + local.set $l3748 + local.get $l3747 + local.get $l3748 + i32.add + local.set $l3749 + local.get $l3748 + local.get $l3749 + i32.add + local.set $l3750 + local.get $l3749 + local.get $l3750 + i32.add + local.set $l3751 + local.get $l3750 + local.get $l3751 + i32.add + local.set $l3752 + local.get $l3751 + local.get $l3752 + i32.add + local.set $l3753 + local.get $l3752 + local.get $l3753 + i32.add + local.set $l3754 + local.get $l3753 + local.get $l3754 + i32.add + local.set $l3755 + local.get $l3754 + local.get $l3755 + i32.add + local.set $l3756 + local.get $l3755 + local.get $l3756 + i32.add + local.set $l3757 + local.get $l3756 + local.get $l3757 + i32.add + local.set $l3758 + local.get $l3757 + local.get $l3758 + i32.add + local.set $l3759 + local.get $l3758 + local.get $l3759 + i32.add + local.set $l3760 + local.get $l3759 + local.get $l3760 + i32.add + local.set $l3761 + local.get $l3760 + local.get $l3761 + i32.add + local.set $l3762 + local.get $l3761 + local.get $l3762 + i32.add + local.set $l3763 + local.get $l3762 + local.get $l3763 + i32.add + local.set $l3764 + local.get $l3763 + local.get $l3764 + i32.add + local.set $l3765 + local.get $l3764 + local.get $l3765 + i32.add + local.set $l3766 + local.get $l3765 + local.get $l3766 + i32.add + local.set $l3767 + local.get $l3766 + local.get $l3767 + i32.add + local.set $l3768 + local.get $l3767 + local.get $l3768 + i32.add + local.set $l3769 + local.get $l3768 + local.get $l3769 + i32.add + local.set $l3770 + local.get $l3769 + local.get $l3770 + i32.add + local.set $l3771 + local.get $l3770 + local.get $l3771 + i32.add + local.set $l3772 + local.get $l3771 + local.get $l3772 + i32.add + local.set $l3773 + local.get $l3772 + local.get $l3773 + i32.add + local.set $l3774 + local.get $l3773 + local.get $l3774 + i32.add + local.set $l3775 + local.get $l3774 + local.get $l3775 + i32.add + local.set $l3776 + local.get $l3775 + local.get $l3776 + i32.add + local.set $l3777 + local.get $l3776 + local.get $l3777 + i32.add + local.set $l3778 + local.get $l3777 + local.get $l3778 + i32.add + local.set $l3779 + local.get $l3778 + local.get $l3779 + i32.add + local.set $l3780 + local.get $l3779 + local.get $l3780 + i32.add + local.set $l3781 + local.get $l3780 + local.get $l3781 + i32.add + local.set $l3782 + local.get $l3781 + local.get $l3782 + i32.add + local.set $l3783 + local.get $l3782 + local.get $l3783 + i32.add + local.set $l3784 + local.get $l3783 + local.get $l3784 + i32.add + local.set $l3785 + local.get $l3784 + local.get $l3785 + i32.add + local.set $l3786 + local.get $l3785 + local.get $l3786 + i32.add + local.set $l3787 + local.get $l3786 + local.get $l3787 + i32.add + local.set $l3788 + local.get $l3787 + local.get $l3788 + i32.add + local.set $l3789 + local.get $l3788 + local.get $l3789 + i32.add + local.set $l3790 + local.get $l3789 + local.get $l3790 + i32.add + local.set $l3791 + local.get $l3790 + local.get $l3791 + i32.add + local.set $l3792 + local.get $l3791 + local.get $l3792 + i32.add + local.set $l3793 + local.get $l3792 + local.get $l3793 + i32.add + local.set $l3794 + local.get $l3793 + local.get $l3794 + i32.add + local.set $l3795 + local.get $l3794 + local.get $l3795 + i32.add + local.set $l3796 + local.get $l3795 + local.get $l3796 + i32.add + local.set $l3797 + local.get $l3796 + local.get $l3797 + i32.add + local.set $l3798 + local.get $l3797 + local.get $l3798 + i32.add + local.set $l3799 + local.get $l3798 + local.get $l3799 + i32.add + local.set $l3800 + local.get $l3799 + local.get $l3800 + i32.add + local.set $l3801 + local.get $l3800 + local.get $l3801 + i32.add + local.set $l3802 + local.get $l3801 + local.get $l3802 + i32.add + local.set $l3803 + local.get $l3802 + local.get $l3803 + i32.add + local.set $l3804 + local.get $l3803 + local.get $l3804 + i32.add + local.set $l3805 + local.get $l3804 + local.get $l3805 + i32.add + local.set $l3806 + local.get $l3805 + local.get $l3806 + i32.add + local.set $l3807 + local.get $l3806 + local.get $l3807 + i32.add + local.set $l3808 + local.get $l3807 + local.get $l3808 + i32.add + local.set $l3809 + local.get $l3808 + local.get $l3809 + i32.add + local.set $l3810 + local.get $l3809 + local.get $l3810 + i32.add + local.set $l3811 + local.get $l3810 + local.get $l3811 + i32.add + local.set $l3812 + local.get $l3811 + local.get $l3812 + i32.add + local.set $l3813 + local.get $l3812 + local.get $l3813 + i32.add + local.set $l3814 + local.get $l3813 + local.get $l3814 + i32.add + local.set $l3815 + local.get $l3814 + local.get $l3815 + i32.add + local.set $l3816 + local.get $l3815 + local.get $l3816 + i32.add + local.set $l3817 + local.get $l3816 + local.get $l3817 + i32.add + local.set $l3818 + local.get $l3817 + local.get $l3818 + i32.add + local.set $l3819 + local.get $l3818 + local.get $l3819 + i32.add + local.set $l3820 + local.get $l3819 + local.get $l3820 + i32.add + local.set $l3821 + local.get $l3820 + local.get $l3821 + i32.add + local.set $l3822 + local.get $l3821 + local.get $l3822 + i32.add + local.set $l3823 + local.get $l3822 + local.get $l3823 + i32.add + local.set $l3824 + local.get $l3823 + local.get $l3824 + i32.add + local.set $l3825 + local.get $l3824 + local.get $l3825 + i32.add + local.set $l3826 + local.get $l3825 + local.get $l3826 + i32.add + local.set $l3827 + local.get $l3826 + local.get $l3827 + i32.add + local.set $l3828 + local.get $l3827 + local.get $l3828 + i32.add + local.set $l3829 + local.get $l3828 + local.get $l3829 + i32.add + local.set $l3830 + local.get $l3829 + local.get $l3830 + i32.add + local.set $l3831 + local.get $l3830 + local.get $l3831 + i32.add + local.set $l3832 + local.get $l3831 + local.get $l3832 + i32.add + local.set $l3833 + local.get $l3832 + local.get $l3833 + i32.add + local.set $l3834 + local.get $l3833 + local.get $l3834 + i32.add + local.set $l3835 + local.get $l3834 + local.get $l3835 + i32.add + local.set $l3836 + local.get $l3835 + local.get $l3836 + i32.add + local.set $l3837 + local.get $l3836 + local.get $l3837 + i32.add + local.set $l3838 + local.get $l3837 + local.get $l3838 + i32.add + local.set $l3839 + local.get $l3838 + local.get $l3839 + i32.add + local.set $l3840 + local.get $l3839 + local.get $l3840 + i32.add + local.set $l3841 + local.get $l3840 + local.get $l3841 + i32.add + local.set $l3842 + local.get $l3841 + local.get $l3842 + i32.add + local.set $l3843 + local.get $l3842 + local.get $l3843 + i32.add + local.set $l3844 + local.get $l3843 + local.get $l3844 + i32.add + local.set $l3845 + local.get $l3844 + local.get $l3845 + i32.add + local.set $l3846 + local.get $l3845 + local.get $l3846 + i32.add + local.set $l3847 + local.get $l3846 + local.get $l3847 + i32.add + local.set $l3848 + local.get $l3847 + local.get $l3848 + i32.add + local.set $l3849 + local.get $l3848 + local.get $l3849 + i32.add + local.set $l3850 + local.get $l3849 + local.get $l3850 + i32.add + local.set $l3851 + local.get $l3850 + local.get $l3851 + i32.add + local.set $l3852 + local.get $l3851 + local.get $l3852 + i32.add + local.set $l3853 + local.get $l3852 + local.get $l3853 + i32.add + local.set $l3854 + local.get $l3853 + local.get $l3854 + i32.add + local.set $l3855 + local.get $l3854 + local.get $l3855 + i32.add + local.set $l3856 + local.get $l3855 + local.get $l3856 + i32.add + local.set $l3857 + local.get $l3856 + local.get $l3857 + i32.add + local.set $l3858 + local.get $l3857 + local.get $l3858 + i32.add + local.set $l3859 + local.get $l3858 + local.get $l3859 + i32.add + local.set $l3860 + local.get $l3859 + local.get $l3860 + i32.add + local.set $l3861 + local.get $l3860 + local.get $l3861 + i32.add + local.set $l3862 + local.get $l3861 + local.get $l3862 + i32.add + local.set $l3863 + local.get $l3862 + local.get $l3863 + i32.add + local.set $l3864 + local.get $l3863 + local.get $l3864 + i32.add + local.set $l3865 + local.get $l3864 + local.get $l3865 + i32.add + local.set $l3866 + local.get $l3865 + local.get $l3866 + i32.add + local.set $l3867 + local.get $l3866 + local.get $l3867 + i32.add + local.set $l3868 + local.get $l3867 + local.get $l3868 + i32.add + local.set $l3869 + local.get $l3868 + local.get $l3869 + i32.add + local.set $l3870 + local.get $l3869 + local.get $l3870 + i32.add + local.set $l3871 + local.get $l3870 + local.get $l3871 + i32.add + local.set $l3872 + local.get $l3871 + local.get $l3872 + i32.add + local.set $l3873 + local.get $l3872 + local.get $l3873 + i32.add + local.set $l3874 + local.get $l3873 + local.get $l3874 + i32.add + local.set $l3875 + local.get $l3874 + local.get $l3875 + i32.add + local.set $l3876 + local.get $l3875 + local.get $l3876 + i32.add + local.set $l3877 + local.get $l3876 + local.get $l3877 + i32.add + local.set $l3878 + local.get $l3877 + local.get $l3878 + i32.add + local.set $l3879 + local.get $l3878 + local.get $l3879 + i32.add + local.set $l3880 + local.get $l3879 + local.get $l3880 + i32.add + local.set $l3881 + local.get $l3880 + local.get $l3881 + i32.add + local.set $l3882 + local.get $l3881 + local.get $l3882 + i32.add + local.set $l3883 + local.get $l3882 + local.get $l3883 + i32.add + local.set $l3884 + local.get $l3883 + local.get $l3884 + i32.add + local.set $l3885 + local.get $l3884 + local.get $l3885 + i32.add + local.set $l3886 + local.get $l3885 + local.get $l3886 + i32.add + local.set $l3887 + local.get $l3886 + local.get $l3887 + i32.add + local.set $l3888 + local.get $l3887 + local.get $l3888 + i32.add + local.set $l3889 + local.get $l3888 + local.get $l3889 + i32.add + local.set $l3890 + local.get $l3889 + local.get $l3890 + i32.add + local.set $l3891 + local.get $l3890 + local.get $l3891 + i32.add + local.set $l3892 + local.get $l3891 + local.get $l3892 + i32.add + local.set $l3893 + local.get $l3892 + local.get $l3893 + i32.add + local.set $l3894 + local.get $l3893 + local.get $l3894 + i32.add + local.set $l3895 + local.get $l3894 + local.get $l3895 + i32.add + local.set $l3896 + local.get $l3895 + local.get $l3896 + i32.add + local.set $l3897 + local.get $l3896 + local.get $l3897 + i32.add + local.set $l3898 + local.get $l3897 + local.get $l3898 + i32.add + local.set $l3899 + local.get $l3898 + local.get $l3899 + i32.add + local.set $l3900 + local.get $l3899 + local.get $l3900 + i32.add + local.set $l3901 + local.get $l3900 + local.get $l3901 + i32.add + local.set $l3902 + local.get $l3901 + local.get $l3902 + i32.add + local.set $l3903 + local.get $l3902 + local.get $l3903 + i32.add + local.set $l3904 + local.get $l3903 + local.get $l3904 + i32.add + local.set $l3905 + local.get $l3904 + local.get $l3905 + i32.add + local.set $l3906 + local.get $l3905 + local.get $l3906 + i32.add + local.set $l3907 + local.get $l3906 + local.get $l3907 + i32.add + local.set $l3908 + local.get $l3907 + local.get $l3908 + i32.add + local.set $l3909 + local.get $l3908 + local.get $l3909 + i32.add + local.set $l3910 + local.get $l3909 + local.get $l3910 + i32.add + local.set $l3911 + local.get $l3910 + local.get $l3911 + i32.add + local.set $l3912 + local.get $l3911 + local.get $l3912 + i32.add + local.set $l3913 + local.get $l3912 + local.get $l3913 + i32.add + local.set $l3914 + local.get $l3913 + local.get $l3914 + i32.add + local.set $l3915 + local.get $l3914 + local.get $l3915 + i32.add + local.set $l3916 + local.get $l3915 + local.get $l3916 + i32.add + local.set $l3917 + local.get $l3916 + local.get $l3917 + i32.add + local.set $l3918 + local.get $l3917 + local.get $l3918 + i32.add + local.set $l3919 + local.get $l3918 + local.get $l3919 + i32.add + local.set $l3920 + local.get $l3919 + local.get $l3920 + i32.add + local.set $l3921 + local.get $l3920 + local.get $l3921 + i32.add + local.set $l3922 + local.get $l3921 + local.get $l3922 + i32.add + local.set $l3923 + local.get $l3922 + local.get $l3923 + i32.add + local.set $l3924 + local.get $l3923 + local.get $l3924 + i32.add + local.set $l3925 + local.get $l3924 + local.get $l3925 + i32.add + local.set $l3926 + local.get $l3925 + local.get $l3926 + i32.add + local.set $l3927 + local.get $l3926 + local.get $l3927 + i32.add + local.set $l3928 + local.get $l3927 + local.get $l3928 + i32.add + local.set $l3929 + local.get $l3928 + local.get $l3929 + i32.add + local.set $l3930 + local.get $l3929 + local.get $l3930 + i32.add + local.set $l3931 + local.get $l3930 + local.get $l3931 + i32.add + local.set $l3932 + local.get $l3931 + local.get $l3932 + i32.add + local.set $l3933 + local.get $l3932 + local.get $l3933 + i32.add + local.set $l3934 + local.get $l3933 + local.get $l3934 + i32.add + local.set $l3935 + local.get $l3934 + local.get $l3935 + i32.add + local.set $l3936 + local.get $l3935 + local.get $l3936 + i32.add + local.set $l3937 + local.get $l3936 + local.get $l3937 + i32.add + local.set $l3938 + local.get $l3937 + local.get $l3938 + i32.add + local.set $l3939 + local.get $l3938 + local.get $l3939 + i32.add + local.set $l3940 + local.get $l3939 + local.get $l3940 + i32.add + local.set $l3941 + local.get $l3940 + local.get $l3941 + i32.add + local.set $l3942 + local.get $l3941 + local.get $l3942 + i32.add + local.set $l3943 + local.get $l3942 + local.get $l3943 + i32.add + local.set $l3944 + local.get $l3943 + local.get $l3944 + i32.add + local.set $l3945 + local.get $l3944 + local.get $l3945 + i32.add + local.set $l3946 + local.get $l3945 + local.get $l3946 + i32.add + local.set $l3947 + local.get $l3946 + local.get $l3947 + i32.add + local.set $l3948 + local.get $l3947 + local.get $l3948 + i32.add + local.set $l3949 + local.get $l3948 + local.get $l3949 + i32.add + local.set $l3950 + local.get $l3949 + local.get $l3950 + i32.add + local.set $l3951 + local.get $l3950 + local.get $l3951 + i32.add + local.set $l3952 + local.get $l3951 + local.get $l3952 + i32.add + local.set $l3953 + local.get $l3952 + local.get $l3953 + i32.add + local.set $l3954 + local.get $l3953 + local.get $l3954 + i32.add + local.set $l3955 + local.get $l3954 + local.get $l3955 + i32.add + local.set $l3956 + local.get $l3955 + local.get $l3956 + i32.add + local.set $l3957 + local.get $l3956 + local.get $l3957 + i32.add + local.set $l3958 + local.get $l3957 + local.get $l3958 + i32.add + local.set $l3959 + local.get $l3958 + local.get $l3959 + i32.add + local.set $l3960 + local.get $l3959 + local.get $l3960 + i32.add + local.set $l3961 + local.get $l3960 + local.get $l3961 + i32.add + local.set $l3962 + local.get $l3961 + local.get $l3962 + i32.add + local.set $l3963 + local.get $l3962 + local.get $l3963 + i32.add + local.set $l3964 + local.get $l3963 + local.get $l3964 + i32.add + local.set $l3965 + local.get $l3964 + local.get $l3965 + i32.add + local.set $l3966 + local.get $l3965 + local.get $l3966 + i32.add + local.set $l3967 + local.get $l3966 + local.get $l3967 + i32.add + local.set $l3968 + local.get $l3967 + local.get $l3968 + i32.add + local.set $l3969 + local.get $l3968 + local.get $l3969 + i32.add + local.set $l3970 + local.get $l3969 + local.get $l3970 + i32.add + local.set $l3971 + local.get $l3970 + local.get $l3971 + i32.add + local.set $l3972 + local.get $l3971 + local.get $l3972 + i32.add + local.set $l3973 + local.get $l3972 + local.get $l3973 + i32.add + local.set $l3974 + local.get $l3973 + local.get $l3974 + i32.add + local.set $l3975 + local.get $l3974 + local.get $l3975 + i32.add + local.set $l3976 + local.get $l3975 + local.get $l3976 + i32.add + local.set $l3977 + local.get $l3976 + local.get $l3977 + i32.add + local.set $l3978 + local.get $l3977 + local.get $l3978 + i32.add + local.set $l3979 + local.get $l3978 + local.get $l3979 + i32.add + local.set $l3980 + local.get $l3979 + local.get $l3980 + i32.add + local.set $l3981 + local.get $l3980 + local.get $l3981 + i32.add + local.set $l3982 + local.get $l3981 + local.get $l3982 + i32.add + local.set $l3983 + local.get $l3982 + local.get $l3983 + i32.add + local.set $l3984 + local.get $l3983 + local.get $l3984 + i32.add + local.set $l3985 + local.get $l3984 + local.get $l3985 + i32.add + local.set $l3986 + local.get $l3985 + local.get $l3986 + i32.add + local.set $l3987 + local.get $l3986 + local.get $l3987 + i32.add + local.set $l3988 + local.get $l3987 + local.get $l3988 + i32.add + local.set $l3989 + local.get $l3988 + local.get $l3989 + i32.add + local.set $l3990 + local.get $l3989 + local.get $l3990 + i32.add + local.set $l3991 + local.get $l3990 + local.get $l3991 + i32.add + local.set $l3992 + local.get $l3991 + local.get $l3992 + i32.add + local.set $l3993 + local.get $l3992 + local.get $l3993 + i32.add + local.set $l3994 + local.get $l3993 + local.get $l3994 + i32.add + local.set $l3995 + local.get $l3994 + local.get $l3995 + i32.add + local.set $l3996 + local.get $l3995 + local.get $l3996 + i32.add + local.set $l3997 + local.get $l3996 + local.get $l3997 + i32.add + local.set $l3998 + local.get $l3997 + local.get $l3998 + i32.add + local.set $l3999 + local.get $l3998 + local.get $l3999 + i32.add + local.set $l4000 + local.get $l3999 + local.get $l4000 + i32.add + local.set $l4001 + local.get $l4000 + local.get $l4001 + i32.add + local.set $l4002 + local.get $l4001 + local.get $l4002 + i32.add + local.set $l4003 + local.get $l4002 + local.get $l4003 + i32.add + local.set $l4004 + local.get $l4003 + local.get $l4004 + i32.add + local.set $l4005 + local.get $l4004 + local.get $l4005 + i32.add + local.set $l4006 + local.get $l4005 + local.get $l4006 + i32.add + local.set $l4007 + local.get $l4006 + local.get $l4007 + i32.add + local.set $l4008 + local.get $l4007 + local.get $l4008 + i32.add + local.set $l4009 + local.get $l4008 + local.get $l4009 + i32.add + local.set $l4010 + local.get $l4009 + local.get $l4010 + i32.add + local.set $l4011 + local.get $l4010 + local.get $l4011 + i32.add + local.set $l4012 + local.get $l4011 + local.get $l4012 + i32.add + local.set $l4013 + local.get $l4012 + local.get $l4013 + i32.add + local.set $l4014 + local.get $l4013 + local.get $l4014 + i32.add + local.set $l4015 + local.get $l4014 + local.get $l4015 + i32.add + local.set $l4016 + local.get $l4015 + local.get $l4016 + i32.add + local.set $l4017 + local.get $l4016 + local.get $l4017 + i32.add + local.set $l4018 + local.get $l4017 + local.get $l4018 + i32.add + local.set $l4019 + local.get $l4018 + local.get $l4019 + i32.add + local.set $l4020 + local.get $l4019 + local.get $l4020 + i32.add + local.set $l4021 + local.get $l4020 + local.get $l4021 + i32.add + local.set $l4022 + local.get $l4021 + local.get $l4022 + i32.add + local.set $l4023 + local.get $l4022 + local.get $l4023 + i32.add + local.set $l4024 + local.get $l4023 + local.get $l4024 + i32.add + local.set $l4025 + local.get $l4024 + local.get $l4025 + i32.add + local.set $l4026 + local.get $l4025 + local.get $l4026 + i32.add + local.set $l4027 + local.get $l4026 + local.get $l4027 + i32.add + local.set $l4028 + local.get $l4027 + local.get $l4028 + i32.add + local.set $l4029 + local.get $l4028 + local.get $l4029 + i32.add + local.set $l4030 + local.get $l4029 + local.get $l4030 + i32.add + local.set $l4031 + local.get $l4030 + local.get $l4031 + i32.add + local.set $l4032 + local.get $l4031 + local.get $l4032 + i32.add + local.set $l4033 + local.get $l4032 + local.get $l4033 + i32.add + local.set $l4034 + local.get $l4033 + local.get $l4034 + i32.add + local.set $l4035 + local.get $l4034 + local.get $l4035 + i32.add + local.set $l4036 + local.get $l4035 + local.get $l4036 + i32.add + local.set $l4037 + local.get $l4036 + local.get $l4037 + i32.add + local.set $l4038 + local.get $l4037 + local.get $l4038 + i32.add + local.set $l4039 + local.get $l4038 + local.get $l4039 + i32.add + local.set $l4040 + local.get $l4039 + local.get $l4040 + i32.add + local.set $l4041 + local.get $l4040 + local.get $l4041 + i32.add + local.set $l4042 + local.get $l4041 + local.get $l4042 + i32.add + local.set $l4043 + local.get $l4042 + local.get $l4043 + i32.add + local.set $l4044 + local.get $l4043 + local.get $l4044 + i32.add + local.set $l4045 + local.get $l4044 + local.get $l4045 + i32.add + local.set $l4046 + local.get $l4045 + local.get $l4046 + i32.add + local.set $l4047 + local.get $l4046 + local.get $l4047 + i32.add + local.set $l4048 + local.get $l4047 + local.get $l4048 + i32.add + local.set $l4049 + local.get $l4048 + local.get $l4049 + i32.add + local.set $l4050 + local.get $l4049 + local.get $l4050 + i32.add + local.set $l4051 + local.get $l4050 + local.get $l4051 + i32.add + local.set $l4052 + local.get $l4051 + local.get $l4052 + i32.add + local.set $l4053 + local.get $l4052 + local.get $l4053 + i32.add + local.set $l4054 + local.get $l4053 + local.get $l4054 + i32.add + local.set $l4055 + local.get $l4054 + local.get $l4055 + i32.add + local.set $l4056 + local.get $l4055 + local.get $l4056 + i32.add + local.set $l4057 + local.get $l4056 + local.get $l4057 + i32.add + local.set $l4058 + local.get $l4057 + local.get $l4058 + i32.add + local.set $l4059 + local.get $l4058 + local.get $l4059 + i32.add + local.set $l4060 + local.get $l4059 + local.get $l4060 + i32.add + local.set $l4061 + local.get $l4060 + local.get $l4061 + i32.add + local.set $l4062 + local.get $l4061 + local.get $l4062 + i32.add + local.set $l4063 + local.get $l4062 + local.get $l4063 + i32.add + local.set $l4064 + local.get $l4063 + local.get $l4064 + i32.add + local.set $l4065 + local.get $l4064 + local.get $l4065 + i32.add + local.set $l4066 + local.get $l4065 + local.get $l4066 + i32.add + local.set $l4067 + local.get $l4066 + local.get $l4067 + i32.add + local.set $l4068 + local.get $l4067 + local.get $l4068 + i32.add + local.set $l4069 + local.get $l4068 + local.get $l4069 + i32.add + local.set $l4070 + local.get $l4069 + local.get $l4070 + i32.add + local.set $l4071 + local.get $l4070 + local.get $l4071 + i32.add + local.set $l4072 + local.get $l4071 + local.get $l4072 + i32.add + local.set $l4073 + local.get $l4072 + local.get $l4073 + i32.add + local.set $l4074 + local.get $l4073 + local.get $l4074 + i32.add + local.set $l4075 + local.get $l4074 + local.get $l4075 + i32.add + local.set $l4076 + local.get $l4075 + local.get $l4076 + i32.add + local.set $l4077 + local.get $l4076 + local.get $l4077 + i32.add + local.set $l4078 + local.get $l4077 + local.get $l4078 + i32.add + local.set $l4079 + local.get $l4078 + local.get $l4079 + i32.add + local.set $l4080 + local.get $l4079 + local.get $l4080 + i32.add + local.set $l4081 + local.get $l4080 + local.get $l4081 + i32.add + local.set $l4082 + local.get $l4081 + local.get $l4082 + i32.add + local.set $l4083 + local.get $l4082 + local.get $l4083 + i32.add + local.set $l4084 + local.get $l4083 + local.get $l4084 + i32.add + local.set $l4085 + local.get $l4084 + local.get $l4085 + i32.add + local.set $l4086 + local.get $l4085 + local.get $l4086 + i32.add + local.set $l4087 + local.get $l4086 + local.get $l4087 + i32.add + local.set $l4088 + local.get $l4087 + local.get $l4088 + i32.add + local.set $l4089 + local.get $l4088 + local.get $l4089 + i32.add + local.set $l4090 + local.get $l4089 + local.get $l4090 + i32.add + local.set $l4091 + local.get $l4090 + local.get $l4091 + i32.add + local.set $l4092 + local.get $l4091 + local.get $l4092 + i32.add + local.set $l4093 + local.get $l4092 + local.get $l4093 + i32.add + local.set $l4094 + local.get $l4093 + local.get $l4094 + i32.add + local.set $l4095 + local.get $l4094 + local.get $l4095 + i32.add + local.set $l4096 + local.get $l4095 + local.get $l4096 + i32.add + local.set $l4097 + local.get $l4096 + local.get $l4097 + i32.add + local.set $l4098 + local.get $l4097 + local.get $l4098 + i32.add + local.set $l4099 + local.get $l4098 + local.get $l4099 + i32.add + local.set $l4100 + local.get $l4099 + local.get $l4100 + i32.add + local.set $l4101 + local.get $l4100 + local.get $l4101 + i32.add + local.set $l4102 + local.get $l4101 + local.get $l4102 + i32.add + local.set $l4103 + local.get $l4102 + local.get $l4103 + i32.add + local.set $l4104 + local.get $l4103 + local.get $l4104 + i32.add + local.set $l4105 + local.get $l4104 + local.get $l4105 + i32.add + local.set $l4106 + local.get $l4105 + local.get $l4106 + i32.add + local.set $l4107 + local.get $l4106 + local.get $l4107 + i32.add + local.set $l4108 + local.get $l4107 + local.get $l4108 + i32.add + local.set $l4109 + local.get $l4108 + local.get $l4109 + i32.add + local.set $l4110 + local.get $l4109 + local.get $l4110 + i32.add + local.set $l4111 + local.get $l4110 + local.get $l4111 + i32.add + local.set $l4112 + local.get $l4111 + local.get $l4112 + i32.add + local.set $l4113 + local.get $l4112 + local.get $l4113 + i32.add + local.set $l4114 + local.get $l4113 + local.get $l4114 + i32.add + local.set $l4115 + local.get $l4114 + local.get $l4115 + i32.add + local.set $l4116 + local.get $l4115 + local.get $l4116 + i32.add + local.set $l4117 + local.get $l4116 + local.get $l4117 + i32.add + local.set $l4118 + local.get $l4117 + local.get $l4118 + i32.add + local.set $l4119 + local.get $l4118 + local.get $l4119 + i32.add + local.set $l4120 + local.get $l4119 + local.get $l4120 + i32.add + local.set $l4121 + local.get $l4120 + local.get $l4121 + i32.add + local.set $l4122 + local.get $l4121 + local.get $l4122 + i32.add + local.set $l4123 + local.get $l4122 + local.get $l4123 + i32.add + local.set $l4124 + local.get $l4123 + local.get $l4124 + i32.add + local.set $l4125 + local.get $l4124 + local.get $l4125 + i32.add + local.set $l4126 + local.get $l4125 + local.get $l4126 + i32.add + local.set $l4127 + local.get $l4126 + local.get $l4127 + i32.add + local.set $l4128 + local.get $l4127 + local.get $l4128 + i32.add + local.set $l4129 + local.get $l4128 + local.get $l4129 + i32.add + local.set $l4130 + local.get $l4129 + local.get $l4130 + i32.add + local.set $l4131 + local.get $l4130 + local.get $l4131 + i32.add + local.set $l4132 + local.get $l4131 + local.get $l4132 + i32.add + local.set $l4133 + local.get $l4132 + local.get $l4133 + i32.add + local.set $l4134 + local.get $l4133 + local.get $l4134 + i32.add + local.set $l4135 + local.get $l4134 + local.get $l4135 + i32.add + local.set $l4136 + local.get $l4135 + local.get $l4136 + i32.add + local.set $l4137 + local.get $l4136 + local.get $l4137 + i32.add + local.set $l4138 + local.get $l4137 + local.get $l4138 + i32.add + local.set $l4139 + local.get $l4138 + local.get $l4139 + i32.add + local.set $l4140 + local.get $l4139 + local.get $l4140 + i32.add + local.set $l4141 + local.get $l4140 + local.get $l4141 + i32.add + local.set $l4142 + local.get $l4141 + local.get $l4142 + i32.add + local.set $l4143 + local.get $l4142 + local.get $l4143 + i32.add + local.set $l4144 + local.get $l4143 + local.get $l4144 + i32.add + local.set $l4145 + local.get $l4144 + local.get $l4145 + i32.add + local.set $l4146 + local.get $l4145 + local.get $l4146 + i32.add + local.set $l4147 + local.get $l4146 + local.get $l4147 + i32.add + local.set $l4148 + local.get $l4147 + local.get $l4148 + i32.add + local.set $l4149 + local.get $l4148 + local.get $l4149 + i32.add + local.set $l4150 + local.get $l4149 + local.get $l4150 + i32.add + local.set $l4151 + local.get $l4150 + local.get $l4151 + i32.add + local.set $l4152 + local.get $l4151 + local.get $l4152 + i32.add + local.set $l4153 + local.get $l4152 + local.get $l4153 + i32.add + local.set $l4154 + local.get $l4153 + local.get $l4154 + i32.add + local.set $l4155 + local.get $l4154 + local.get $l4155 + i32.add + local.set $l4156 + local.get $l4155 + local.get $l4156 + i32.add + local.set $l4157 + local.get $l4156 + local.get $l4157 + i32.add + local.set $l4158 + local.get $l4157 + local.get $l4158 + i32.add + local.set $l4159 + local.get $l4158 + local.get $l4159 + i32.add + local.set $l4160 + local.get $l4159 + local.get $l4160 + i32.add + local.set $l4161 + local.get $l4160 + local.get $l4161 + i32.add + local.set $l4162 + local.get $l4161 + local.get $l4162 + i32.add + local.set $l4163 + local.get $l4162 + local.get $l4163 + i32.add + local.set $l4164 + local.get $l4163 + local.get $l4164 + i32.add + local.set $l4165 + local.get $l4164 + local.get $l4165 + i32.add + local.set $l4166 + local.get $l4165 + local.get $l4166 + i32.add + local.set $l4167 + local.get $l4166 + local.get $l4167 + i32.add + local.set $l4168 + local.get $l4167 + local.get $l4168 + i32.add + local.set $l4169 + local.get $l4168 + local.get $l4169 + i32.add + local.set $l4170 + local.get $l4169 + local.get $l4170 + i32.add + local.set $l4171 + local.get $l4170 + local.get $l4171 + i32.add + local.set $l4172 + local.get $l4171 + local.get $l4172 + i32.add + local.set $l4173 + local.get $l4172 + local.get $l4173 + i32.add + local.set $l4174 + local.get $l4173 + local.get $l4174 + i32.add + local.set $l4175 + local.get $l4174 + local.get $l4175 + i32.add + local.set $l4176 + local.get $l4175 + local.get $l4176 + i32.add + local.set $l4177 + local.get $l4176 + local.get $l4177 + i32.add + local.set $l4178 + local.get $l4177 + local.get $l4178 + i32.add + local.set $l4179 + local.get $l4178 + local.get $l4179 + i32.add + local.set $l4180 + local.get $l4179 + local.get $l4180 + i32.add + local.set $l4181 + local.get $l4180 + local.get $l4181 + i32.add + local.set $l4182 + local.get $l4181 + local.get $l4182 + i32.add + local.set $l4183 + local.get $l4182 + local.get $l4183 + i32.add + local.set $l4184 + local.get $l4183 + local.get $l4184 + i32.add + local.set $l4185 + local.get $l4184 + local.get $l4185 + i32.add + local.set $l4186 + local.get $l4185 + local.get $l4186 + i32.add + local.set $l4187 + local.get $l4186 + local.get $l4187 + i32.add + local.set $l4188 + local.get $l4187 + local.get $l4188 + i32.add + local.set $l4189 + local.get $l4188 + local.get $l4189 + i32.add + local.set $l4190 + local.get $l4189 + local.get $l4190 + i32.add + local.set $l4191 + local.get $l4190 + local.get $l4191 + i32.add + local.set $l4192 + local.get $l4191 + local.get $l4192 + i32.add + local.set $l4193 + local.get $l4192 + local.get $l4193 + i32.add + local.set $l4194 + local.get $l4193 + local.get $l4194 + i32.add + local.set $l4195 + local.get $l4194 + local.get $l4195 + i32.add + local.set $l4196 + local.get $l4195 + local.get $l4196 + i32.add + local.set $l4197 + local.get $l4196 + local.get $l4197 + i32.add + local.set $l4198 + local.get $l4197 + local.get $l4198 + i32.add + local.set $l4199 + local.get $l4198 + local.get $l4199 + i32.add + local.set $l4200 + local.get $l4199 + local.get $l4200 + i32.add + local.set $l4201 + local.get $l4200 + local.get $l4201 + i32.add + local.set $l4202 + local.get $l4201 + local.get $l4202 + i32.add + local.set $l4203 + local.get $l4202 + local.get $l4203 + i32.add + local.set $l4204 + local.get $l4203 + local.get $l4204 + i32.add + local.set $l4205 + local.get $l4204 + local.get $l4205 + i32.add + local.set $l4206 + local.get $l4205 + local.get $l4206 + i32.add + local.set $l4207 + local.get $l4206 + local.get $l4207 + i32.add + local.set $l4208 + local.get $l4207 + local.get $l4208 + i32.add + local.set $l4209 + local.get $l4208 + local.get $l4209 + i32.add + local.set $l4210 + local.get $l4209 + local.get $l4210 + i32.add + local.set $l4211 + local.get $l4210 + local.get $l4211 + i32.add + local.set $l4212 + local.get $l4211 + local.get $l4212 + i32.add + local.set $l4213 + local.get $l4212 + local.get $l4213 + i32.add + local.set $l4214 + local.get $l4213 + local.get $l4214 + i32.add + local.set $l4215 + local.get $l4214 + local.get $l4215 + i32.add + local.set $l4216 + local.get $l4215 + local.get $l4216 + i32.add + local.set $l4217 + local.get $l4216 + local.get $l4217 + i32.add + local.set $l4218 + local.get $l4217 + local.get $l4218 + i32.add + local.set $l4219 + local.get $l4218 + local.get $l4219 + i32.add + local.set $l4220 + local.get $l4219 + local.get $l4220 + i32.add + local.set $l4221 + local.get $l4220 + local.get $l4221 + i32.add + local.set $l4222 + local.get $l4221 + local.get $l4222 + i32.add + local.set $l4223 + local.get $l4222 + local.get $l4223 + i32.add + local.set $l4224 + local.get $l4223 + local.get $l4224 + i32.add + local.set $l4225 + local.get $l4224 + local.get $l4225 + i32.add + local.set $l4226 + local.get $l4225 + local.get $l4226 + i32.add + local.set $l4227 + local.get $l4226 + local.get $l4227 + i32.add + local.set $l4228 + local.get $l4227 + local.get $l4228 + i32.add + local.set $l4229 + local.get $l4228 + local.get $l4229 + i32.add + local.set $l4230 + local.get $l4229 + local.get $l4230 + i32.add + local.set $l4231 + local.get $l4230 + local.get $l4231 + i32.add + local.set $l4232 + local.get $l4231 + local.get $l4232 + i32.add + local.set $l4233 + local.get $l4232 + local.get $l4233 + i32.add + local.set $l4234 + local.get $l4233 + local.get $l4234 + i32.add + local.set $l4235 + local.get $l4234 + local.get $l4235 + i32.add + local.set $l4236 + local.get $l4235 + local.get $l4236 + i32.add + local.set $l4237 + local.get $l4236 + local.get $l4237 + i32.add + local.set $l4238 + local.get $l4237 + local.get $l4238 + i32.add + local.set $l4239 + local.get $l4238 + local.get $l4239 + i32.add + local.set $l4240 + local.get $l4239 + local.get $l4240 + i32.add + local.set $l4241 + local.get $l4240 + local.get $l4241 + i32.add + local.set $l4242 + local.get $l4241 + local.get $l4242 + i32.add + local.set $l4243 + local.get $l4242 + local.get $l4243 + i32.add + local.set $l4244 + local.get $l4243 + local.get $l4244 + i32.add + local.set $l4245 + local.get $l4244 + local.get $l4245 + i32.add + local.set $l4246 + local.get $l4245 + local.get $l4246 + i32.add + local.set $l4247 + local.get $l4246 + local.get $l4247 + i32.add + local.set $l4248 + local.get $l4247 + local.get $l4248 + i32.add + local.set $l4249 + local.get $l4248 + local.get $l4249 + i32.add + local.set $l4250 + local.get $l4249 + local.get $l4250 + i32.add + local.set $l4251 + local.get $l4250 + local.get $l4251 + i32.add + local.set $l4252 + local.get $l4251 + local.get $l4252 + i32.add + local.set $l4253 + local.get $l4252 + local.get $l4253 + i32.add + local.set $l4254 + local.get $l4253 + local.get $l4254 + i32.add + local.set $l4255 + local.get $l4254 + local.get $l4255 + i32.add + local.set $l4256 + local.get $l4255 + local.get $l4256 + i32.add + local.set $l4257 + local.get $l4256 + local.get $l4257 + i32.add + local.set $l4258 + local.get $l4257 + local.get $l4258 + i32.add + local.set $l4259 + local.get $l4258 + local.get $l4259 + i32.add + local.set $l4260 + local.get $l4259 + local.get $l4260 + i32.add + local.set $l4261 + local.get $l4260 + local.get $l4261 + i32.add + local.set $l4262 + local.get $l4261 + local.get $l4262 + i32.add + local.set $l4263 + local.get $l4262 + local.get $l4263 + i32.add + local.set $l4264 + local.get $l4263 + local.get $l4264 + i32.add + local.set $l4265 + local.get $l4264 + local.get $l4265 + i32.add + local.set $l4266 + local.get $l4265 + local.get $l4266 + i32.add + local.set $l4267 + local.get $l4266 + local.get $l4267 + i32.add + local.set $l4268 + local.get $l4267 + local.get $l4268 + i32.add + local.set $l4269 + local.get $l4268 + local.get $l4269 + i32.add + local.set $l4270 + local.get $l4269 + local.get $l4270 + i32.add + local.set $l4271 + local.get $l4270 + local.get $l4271 + i32.add + local.set $l4272 + local.get $l4271 + local.get $l4272 + i32.add + local.set $l4273 + local.get $l4272 + local.get $l4273 + i32.add + local.set $l4274 + local.get $l4273 + local.get $l4274 + i32.add + local.set $l4275 + local.get $l4274 + local.get $l4275 + i32.add + local.set $l4276 + local.get $l4275 + local.get $l4276 + i32.add + local.set $l4277 + local.get $l4276 + local.get $l4277 + i32.add + local.set $l4278 + local.get $l4277 + local.get $l4278 + i32.add + local.set $l4279 + local.get $l4278 + local.get $l4279 + i32.add + local.set $l4280 + local.get $l4279 + local.get $l4280 + i32.add + local.set $l4281 + local.get $l4280 + local.get $l4281 + i32.add + local.set $l4282 + local.get $l4281 + local.get $l4282 + i32.add + local.set $l4283 + local.get $l4282 + local.get $l4283 + i32.add + local.set $l4284 + local.get $l4283 + local.get $l4284 + i32.add + local.set $l4285 + local.get $l4284 + local.get $l4285 + i32.add + local.set $l4286 + local.get $l4285 + local.get $l4286 + i32.add + local.set $l4287 + local.get $l4286 + local.get $l4287 + i32.add + local.set $l4288 + local.get $l4287 + local.get $l4288 + i32.add + local.set $l4289 + local.get $l4288 + local.get $l4289 + i32.add + local.set $l4290 + local.get $l4289 + local.get $l4290 + i32.add + local.set $l4291 + local.get $l4290 + local.get $l4291 + i32.add + local.set $l4292 + local.get $l4291 + local.get $l4292 + i32.add + local.set $l4293 + local.get $l4292 + local.get $l4293 + i32.add + local.set $l4294 + local.get $l4293 + local.get $l4294 + i32.add + local.set $l4295 + local.get $l4294 + local.get $l4295 + i32.add + local.set $l4296 + local.get $l4295 + local.get $l4296 + i32.add + local.set $l4297 + local.get $l4296 + local.get $l4297 + i32.add + local.set $l4298 + local.get $l4297 + local.get $l4298 + i32.add + local.set $l4299 + local.get $l4298 + local.get $l4299 + i32.add + local.set $l4300 + local.get $l4299 + local.get $l4300 + i32.add + local.set $l4301 + local.get $l4300 + local.get $l4301 + i32.add + local.set $l4302 + local.get $l4301 + local.get $l4302 + i32.add + local.set $l4303 + local.get $l4302 + local.get $l4303 + i32.add + local.set $l4304 + local.get $l4303 + local.get $l4304 + i32.add + local.set $l4305 + local.get $l4304 + local.get $l4305 + i32.add + local.set $l4306 + local.get $l4305 + local.get $l4306 + i32.add + local.set $l4307 + local.get $l4306 + local.get $l4307 + i32.add + local.set $l4308 + local.get $l4307 + local.get $l4308 + i32.add + local.set $l4309 + local.get $l4308 + local.get $l4309 + i32.add + local.set $l4310 + local.get $l4309 + local.get $l4310 + i32.add + local.set $l4311 + local.get $l4310 + local.get $l4311 + i32.add + local.set $l4312 + local.get $l4311 + local.get $l4312 + i32.add + local.set $l4313 + local.get $l4312 + local.get $l4313 + i32.add + local.set $l4314 + local.get $l4313 + local.get $l4314 + i32.add + local.set $l4315 + local.get $l4314 + local.get $l4315 + i32.add + local.set $l4316 + local.get $l4315 + local.get $l4316 + i32.add + local.set $l4317 + local.get $l4316 + local.get $l4317 + i32.add + local.set $l4318 + local.get $l4317 + local.get $l4318 + i32.add + local.set $l4319 + local.get $l4318 + local.get $l4319 + i32.add + local.set $l4320 + local.get $l4319 + local.get $l4320 + i32.add + local.set $l4321 + local.get $l4320 + local.get $l4321 + i32.add + local.set $l4322 + local.get $l4321 + local.get $l4322 + i32.add + local.set $l4323 + local.get $l4322 + local.get $l4323 + i32.add + local.set $l4324 + local.get $l4323 + local.get $l4324 + i32.add + local.set $l4325 + local.get $l4324 + local.get $l4325 + i32.add + local.set $l4326 + local.get $l4325 + local.get $l4326 + i32.add + local.set $l4327 + local.get $l4326 + local.get $l4327 + i32.add + local.set $l4328 + local.get $l4327 + local.get $l4328 + i32.add + local.set $l4329 + local.get $l4328 + local.get $l4329 + i32.add + local.set $l4330 + local.get $l4329 + local.get $l4330 + i32.add + local.set $l4331 + local.get $l4330 + local.get $l4331 + i32.add + local.set $l4332 + local.get $l4331 + local.get $l4332 + i32.add + local.set $l4333 + local.get $l4332 + local.get $l4333 + i32.add + local.set $l4334 + local.get $l4333 + local.get $l4334 + i32.add + local.set $l4335 + local.get $l4334 + local.get $l4335 + i32.add + local.set $l4336 + local.get $l4335 + local.get $l4336 + i32.add + local.set $l4337 + local.get $l4336 + local.get $l4337 + i32.add + local.set $l4338 + local.get $l4337 + local.get $l4338 + i32.add + local.set $l4339 + local.get $l4338 + local.get $l4339 + i32.add + local.set $l4340 + local.get $l4339 + local.get $l4340 + i32.add + local.set $l4341 + local.get $l4340 + local.get $l4341 + i32.add + local.set $l4342 + local.get $l4341 + local.get $l4342 + i32.add + local.set $l4343 + local.get $l4342 + local.get $l4343 + i32.add + local.set $l4344 + local.get $l4343 + local.get $l4344 + i32.add + local.set $l4345 + local.get $l4344 + local.get $l4345 + i32.add + local.set $l4346 + local.get $l4345 + local.get $l4346 + i32.add + local.set $l4347 + local.get $l4346 + local.get $l4347 + i32.add + local.set $l4348 + local.get $l4347 + local.get $l4348 + i32.add + local.set $l4349 + local.get $l4348 + local.get $l4349 + i32.add + local.set $l4350 + local.get $l4349 + local.get $l4350 + i32.add + local.set $l4351 + local.get $l4350 + local.get $l4351 + i32.add + local.set $l4352 + local.get $l4351 + local.get $l4352 + i32.add + local.set $l4353 + local.get $l4352 + local.get $l4353 + i32.add + local.set $l4354 + local.get $l4353 + local.get $l4354 + i32.add + local.set $l4355 + local.get $l4354 + local.get $l4355 + i32.add + local.set $l4356 + local.get $l4355 + local.get $l4356 + i32.add + local.set $l4357 + local.get $l4356 + local.get $l4357 + i32.add + local.set $l4358 + local.get $l4357 + local.get $l4358 + i32.add + local.set $l4359 + local.get $l4358 + local.get $l4359 + i32.add + local.set $l4360 + local.get $l4359 + local.get $l4360 + i32.add + local.set $l4361 + local.get $l4360 + local.get $l4361 + i32.add + local.set $l4362 + local.get $l4361 + local.get $l4362 + i32.add + local.set $l4363 + local.get $l4362 + local.get $l4363 + i32.add + local.set $l4364 + local.get $l4363 + local.get $l4364 + i32.add + local.set $l4365 + local.get $l4364 + local.get $l4365 + i32.add + local.set $l4366 + local.get $l4365 + local.get $l4366 + i32.add + local.set $l4367 + local.get $l4366 + local.get $l4367 + i32.add + local.set $l4368 + local.get $l4367 + local.get $l4368 + i32.add + local.set $l4369 + local.get $l4368 + local.get $l4369 + i32.add + local.set $l4370 + local.get $l4369 + local.get $l4370 + i32.add + local.set $l4371 + local.get $l4370 + local.get $l4371 + i32.add + local.set $l4372 + local.get $l4371 + local.get $l4372 + i32.add + local.set $l4373 + local.get $l4372 + local.get $l4373 + i32.add + local.set $l4374 + local.get $l4373 + local.get $l4374 + i32.add + local.set $l4375 + local.get $l4374 + local.get $l4375 + i32.add + local.set $l4376 + local.get $l4375 + local.get $l4376 + i32.add + local.set $l4377 + local.get $l4376 + local.get $l4377 + i32.add + local.set $l4378 + local.get $l4377 + local.get $l4378 + i32.add + local.set $l4379 + local.get $l4378 + local.get $l4379 + i32.add + local.set $l4380 + local.get $l4379 + local.get $l4380 + i32.add + local.set $l4381 + local.get $l4380 + local.get $l4381 + i32.add + local.set $l4382 + local.get $l4381 + local.get $l4382 + i32.add + local.set $l4383 + local.get $l4382 + local.get $l4383 + i32.add + local.set $l4384 + local.get $l4383 + local.get $l4384 + i32.add + local.set $l4385 + local.get $l4384 + local.get $l4385 + i32.add + local.set $l4386 + local.get $l4385 + local.get $l4386 + i32.add + local.set $l4387 + local.get $l4386 + local.get $l4387 + i32.add + local.set $l4388 + local.get $l4387 + local.get $l4388 + i32.add + local.set $l4389 + local.get $l4388 + local.get $l4389 + i32.add + local.set $l4390 + local.get $l4389 + local.get $l4390 + i32.add + local.set $l4391 + local.get $l4390 + local.get $l4391 + i32.add + local.set $l4392 + local.get $l4391 + local.get $l4392 + i32.add + local.set $l4393 + local.get $l4392 + local.get $l4393 + i32.add + local.set $l4394 + local.get $l4393 + local.get $l4394 + i32.add + local.set $l4395 + local.get $l4394 + local.get $l4395 + i32.add + local.set $l4396 + local.get $l4395 + local.get $l4396 + i32.add + local.set $l4397 + local.get $l4396 + local.get $l4397 + i32.add + local.set $l4398 + local.get $l4397 + local.get $l4398 + i32.add + local.set $l4399 + local.get $l4398 + local.get $l4399 + i32.add + local.set $l4400 + local.get $l4399 + local.get $l4400 + i32.add + local.set $l4401 + local.get $l4400 + local.get $l4401 + i32.add + local.set $l4402 + local.get $l4401 + local.get $l4402 + i32.add + local.set $l4403 + local.get $l4402 + local.get $l4403 + i32.add + local.set $l4404 + local.get $l4403 + local.get $l4404 + i32.add + local.set $l4405 + local.get $l4404 + local.get $l4405 + i32.add + local.set $l4406 + local.get $l4405 + local.get $l4406 + i32.add + local.set $l4407 + local.get $l4406 + local.get $l4407 + i32.add + local.set $l4408 + local.get $l4407 + local.get $l4408 + i32.add + local.set $l4409 + local.get $l4408 + local.get $l4409 + i32.add + local.set $l4410 + local.get $l4409 + local.get $l4410 + i32.add + local.set $l4411 + local.get $l4410 + local.get $l4411 + i32.add + local.set $l4412 + local.get $l4411 + local.get $l4412 + i32.add + local.set $l4413 + local.get $l4412 + local.get $l4413 + i32.add + local.set $l4414 + local.get $l4413 + local.get $l4414 + i32.add + local.set $l4415 + local.get $l4414 + local.get $l4415 + i32.add + local.set $l4416 + local.get $l4415 + local.get $l4416 + i32.add + local.set $l4417 + local.get $l4416 + local.get $l4417 + i32.add + local.set $l4418 + local.get $l4417 + local.get $l4418 + i32.add + local.set $l4419 + local.get $l4418 + local.get $l4419 + i32.add + local.set $l4420 + local.get $l4419 + local.get $l4420 + i32.add + local.set $l4421 + local.get $l4420 + local.get $l4421 + i32.add + local.set $l4422 + local.get $l4421 + local.get $l4422 + i32.add + local.set $l4423 + local.get $l4422 + local.get $l4423 + i32.add + local.set $l4424 + local.get $l4423 + local.get $l4424 + i32.add + local.set $l4425 + local.get $l4424 + local.get $l4425 + i32.add + local.set $l4426 + local.get $l4425 + local.get $l4426 + i32.add + local.set $l4427 + local.get $l4426 + local.get $l4427 + i32.add + local.set $l4428 + local.get $l4427 + local.get $l4428 + i32.add + local.set $l4429 + local.get $l4428 + local.get $l4429 + i32.add + local.set $l4430 + local.get $l4429 + local.get $l4430 + i32.add + local.set $l4431 + local.get $l4430 + local.get $l4431 + i32.add + local.set $l4432 + local.get $l4431 + local.get $l4432 + i32.add + local.set $l4433 + local.get $l4432 + local.get $l4433 + i32.add + local.set $l4434 + local.get $l4433 + local.get $l4434 + i32.add + local.set $l4435 + local.get $l4434 + local.get $l4435 + i32.add + local.set $l4436 + local.get $l4435 + local.get $l4436 + i32.add + local.set $l4437 + local.get $l4436 + local.get $l4437 + i32.add + local.set $l4438 + local.get $l4437 + local.get $l4438 + i32.add + local.set $l4439 + local.get $l4438 + local.get $l4439 + i32.add + local.set $l4440 + local.get $l4439 + local.get $l4440 + i32.add + local.set $l4441 + local.get $l4440 + local.get $l4441 + i32.add + local.set $l4442 + local.get $l4441 + local.get $l4442 + i32.add + local.set $l4443 + local.get $l4442 + local.get $l4443 + i32.add + local.set $l4444 + local.get $l4443 + local.get $l4444 + i32.add + local.set $l4445 + local.get $l4444 + local.get $l4445 + i32.add + local.set $l4446 + local.get $l4445 + local.get $l4446 + i32.add + local.set $l4447 + local.get $l4446 + local.get $l4447 + i32.add + local.set $l4448 + local.get $l4447 + local.get $l4448 + i32.add + local.set $l4449 + local.get $l4448 + local.get $l4449 + i32.add + local.set $l4450 + local.get $l4449 + local.get $l4450 + i32.add + local.set $l4451 + local.get $l4450 + local.get $l4451 + i32.add + local.set $l4452 + local.get $l4451 + local.get $l4452 + i32.add + local.set $l4453 + local.get $l4452 + local.get $l4453 + i32.add + local.set $l4454 + local.get $l4453 + local.get $l4454 + i32.add + local.set $l4455 + local.get $l4454 + local.get $l4455 + i32.add + local.set $l4456 + local.get $l4455 + local.get $l4456 + i32.add + local.set $l4457 + local.get $l4456 + local.get $l4457 + i32.add + local.set $l4458 + local.get $l4457 + local.get $l4458 + i32.add + local.set $l4459 + local.get $l4458 + local.get $l4459 + i32.add + local.set $l4460 + local.get $l4459 + local.get $l4460 + i32.add + local.set $l4461 + local.get $l4460 + local.get $l4461 + i32.add + local.set $l4462 + local.get $l4461 + local.get $l4462 + i32.add + local.set $l4463 + local.get $l4462 + local.get $l4463 + i32.add + local.set $l4464 + local.get $l4463 + local.get $l4464 + i32.add + local.set $l4465 + local.get $l4464 + local.get $l4465 + i32.add + local.set $l4466 + local.get $l4465 + local.get $l4466 + i32.add + local.set $l4467 + local.get $l4466 + local.get $l4467 + i32.add + local.set $l4468 + local.get $l4467 + local.get $l4468 + i32.add + local.set $l4469 + local.get $l4468 + local.get $l4469 + i32.add + local.set $l4470 + local.get $l4469 + local.get $l4470 + i32.add + local.set $l4471 + local.get $l4470 + local.get $l4471 + i32.add + local.set $l4472 + local.get $l4471 + local.get $l4472 + i32.add + local.set $l4473 + local.get $l4472 + local.get $l4473 + i32.add + local.set $l4474 + local.get $l4473 + local.get $l4474 + i32.add + local.set $l4475 + local.get $l4474 + local.get $l4475 + i32.add + local.set $l4476 + local.get $l4475 + local.get $l4476 + i32.add + local.set $l4477 + local.get $l4476 + local.get $l4477 + i32.add + local.set $l4478 + local.get $l4477 + local.get $l4478 + i32.add + local.set $l4479 + local.get $l4478 + local.get $l4479 + i32.add + local.set $l4480 + local.get $l4479 + local.get $l4480 + i32.add + local.set $l4481 + local.get $l4480 + local.get $l4481 + i32.add + local.set $l4482 + local.get $l4481 + local.get $l4482 + i32.add + local.set $l4483 + local.get $l4482 + local.get $l4483 + i32.add + local.set $l4484 + local.get $l4483 + local.get $l4484 + i32.add + local.set $l4485 + local.get $l4484 + local.get $l4485 + i32.add + local.set $l4486 + local.get $l4485 + local.get $l4486 + i32.add + local.set $l4487 + local.get $l4486 + local.get $l4487 + i32.add + local.set $l4488 + local.get $l4487 + local.get $l4488 + i32.add + local.set $l4489 + local.get $l4488 + local.get $l4489 + i32.add + local.set $l4490 + local.get $l4489 + local.get $l4490 + i32.add + local.set $l4491 + local.get $l4490 + local.get $l4491 + i32.add + local.set $l4492 + local.get $l4491 + local.get $l4492 + i32.add + local.set $l4493 + local.get $l4492 + local.get $l4493 + i32.add + local.set $l4494 + local.get $l4493 + local.get $l4494 + i32.add + local.set $l4495 + local.get $l4494 + local.get $l4495 + i32.add + local.set $l4496 + local.get $l4495 + local.get $l4496 + i32.add + local.set $l4497 + local.get $l4496 + local.get $l4497 + i32.add + local.set $l4498 + local.get $l4497 + local.get $l4498 + i32.add + local.set $l4499 + local.get $l4498 + local.get $l4499 + i32.add + local.set $l4500 + local.get $l4499 + local.get $l4500 + i32.add + local.set $l4501 + local.get $l4500 + local.get $l4501 + i32.add + local.set $l4502 + local.get $l4501 + local.get $l4502 + i32.add + local.set $l4503 + local.get $l4502 + local.get $l4503 + i32.add + local.set $l4504 + local.get $l4503 + local.get $l4504 + i32.add + local.set $l4505 + local.get $l4504 + local.get $l4505 + i32.add + local.set $l4506 + local.get $l4505 + local.get $l4506 + i32.add + local.set $l4507 + local.get $l4506 + local.get $l4507 + i32.add + local.set $l4508 + local.get $l4507 + local.get $l4508 + i32.add + local.set $l4509 + local.get $l4508 + local.get $l4509 + i32.add + local.set $l4510 + local.get $l4509 + local.get $l4510 + i32.add + local.set $l4511 + local.get $l4510 + local.get $l4511 + i32.add + local.set $l4512 + local.get $l4511 + local.get $l4512 + i32.add + local.set $l4513 + local.get $l4512 + local.get $l4513 + i32.add + local.set $l4514 + local.get $l4513 + local.get $l4514 + i32.add + local.set $l4515 + local.get $l4514 + local.get $l4515 + i32.add + local.set $l4516 + local.get $l4515 + local.get $l4516 + i32.add + local.set $l4517 + local.get $l4516 + local.get $l4517 + i32.add + local.set $l4518 + local.get $l4517 + local.get $l4518 + i32.add + local.set $l4519 + local.get $l4518 + local.get $l4519 + i32.add + local.set $l4520 + local.get $l4519 + local.get $l4520 + i32.add + local.set $l4521 + local.get $l4520 + local.get $l4521 + i32.add + local.set $l4522 + local.get $l4521 + local.get $l4522 + i32.add + local.set $l4523 + local.get $l4522 + local.get $l4523 + i32.add + local.set $l4524 + local.get $l4523 + local.get $l4524 + i32.add + local.set $l4525 + local.get $l4524 + local.get $l4525 + i32.add + local.set $l4526 + local.get $l4525 + local.get $l4526 + i32.add + local.set $l4527 + local.get $l4526 + local.get $l4527 + i32.add + local.set $l4528 + local.get $l4527 + local.get $l4528 + i32.add + local.set $l4529 + local.get $l4528 + local.get $l4529 + i32.add + local.set $l4530 + local.get $l4529 + local.get $l4530 + i32.add + local.set $l4531 + local.get $l4530 + local.get $l4531 + i32.add + local.set $l4532 + local.get $l4531 + local.get $l4532 + i32.add + local.set $l4533 + local.get $l4532 + local.get $l4533 + i32.add + local.set $l4534 + local.get $l4533 + local.get $l4534 + i32.add + local.set $l4535 + local.get $l4534 + local.get $l4535 + i32.add + local.set $l4536 + local.get $l4535 + local.get $l4536 + i32.add + local.set $l4537 + local.get $l4536 + local.get $l4537 + i32.add + local.set $l4538 + local.get $l4537 + local.get $l4538 + i32.add + local.set $l4539 + local.get $l4538 + local.get $l4539 + i32.add + local.set $l4540 + local.get $l4539 + local.get $l4540 + i32.add + local.set $l4541 + local.get $l4540 + local.get $l4541 + i32.add + local.set $l4542 + local.get $l4541 + local.get $l4542 + i32.add + local.set $l4543 + local.get $l4542 + local.get $l4543 + i32.add + local.set $l4544 + local.get $l4543 + local.get $l4544 + i32.add + local.set $l4545 + local.get $l4544 + local.get $l4545 + i32.add + local.set $l4546 + local.get $l4545 + local.get $l4546 + i32.add + local.set $l4547 + local.get $l4546 + local.get $l4547 + i32.add + local.set $l4548 + local.get $l4547 + local.get $l4548 + i32.add + local.set $l4549 + local.get $l4548 + local.get $l4549 + i32.add + local.set $l4550 + local.get $l4549 + local.get $l4550 + i32.add + local.set $l4551 + local.get $l4550 + local.get $l4551 + i32.add + local.set $l4552 + local.get $l4551 + local.get $l4552 + i32.add + local.set $l4553 + local.get $l4552 + local.get $l4553 + i32.add + local.set $l4554 + local.get $l4553 + local.get $l4554 + i32.add + local.set $l4555 + local.get $l4554 + local.get $l4555 + i32.add + local.set $l4556 + local.get $l4555 + local.get $l4556 + i32.add + local.set $l4557 + local.get $l4556 + local.get $l4557 + i32.add + local.set $l4558 + local.get $l4557 + local.get $l4558 + i32.add + local.set $l4559 + local.get $l4558 + local.get $l4559 + i32.add + local.set $l4560 + local.get $l4559 + local.get $l4560 + i32.add + local.set $l4561 + local.get $l4560 + local.get $l4561 + i32.add + local.set $l4562 + local.get $l4561 + local.get $l4562 + i32.add + local.set $l4563 + local.get $l4562 + local.get $l4563 + i32.add + local.set $l4564 + local.get $l4563 + local.get $l4564 + i32.add + local.set $l4565 + local.get $l4564 + local.get $l4565 + i32.add + local.set $l4566 + local.get $l4565 + local.get $l4566 + i32.add + local.set $l4567 + local.get $l4566 + local.get $l4567 + i32.add + local.set $l4568 + local.get $l4567 + local.get $l4568 + i32.add + local.set $l4569 + local.get $l4568 + local.get $l4569 + i32.add + local.set $l4570 + local.get $l4569 + local.get $l4570 + i32.add + local.set $l4571 + local.get $l4570 + local.get $l4571 + i32.add + local.set $l4572 + local.get $l4571 + local.get $l4572 + i32.add + local.set $l4573 + local.get $l4572 + local.get $l4573 + i32.add + local.set $l4574 + local.get $l4573 + local.get $l4574 + i32.add + local.set $l4575 + local.get $l4574 + local.get $l4575 + i32.add + local.set $l4576 + local.get $l4575 + local.get $l4576 + i32.add + local.set $l4577 + local.get $l4576 + local.get $l4577 + i32.add + local.set $l4578 + local.get $l4577 + local.get $l4578 + i32.add + local.set $l4579 + local.get $l4578 + local.get $l4579 + i32.add + local.set $l4580 + local.get $l4579 + local.get $l4580 + i32.add + local.set $l4581 + local.get $l4580 + local.get $l4581 + i32.add + local.set $l4582 + local.get $l4581 + local.get $l4582 + i32.add + local.set $l4583 + local.get $l4582 + local.get $l4583 + i32.add + local.set $l4584 + local.get $l4583 + local.get $l4584 + i32.add + local.set $l4585 + local.get $l4584 + local.get $l4585 + i32.add + local.set $l4586 + local.get $l4585 + local.get $l4586 + i32.add + local.set $l4587 + local.get $l4586 + local.get $l4587 + i32.add + local.set $l4588 + local.get $l4587 + local.get $l4588 + i32.add + local.set $l4589 + local.get $l4588 + local.get $l4589 + i32.add + local.set $l4590 + local.get $l4589 + local.get $l4590 + i32.add + local.set $l4591 + local.get $l4590 + local.get $l4591 + i32.add + local.set $l4592 + local.get $l4591 + local.get $l4592 + i32.add + local.set $l4593 + local.get $l4592 + local.get $l4593 + i32.add + local.set $l4594 + local.get $l4593 + local.get $l4594 + i32.add + local.set $l4595 + local.get $l4594 + local.get $l4595 + i32.add + local.set $l4596 + local.get $l4595 + local.get $l4596 + i32.add + local.set $l4597 + local.get $l4596 + local.get $l4597 + i32.add + local.set $l4598 + local.get $l4597 + local.get $l4598 + i32.add + local.set $l4599 + local.get $l4598 + local.get $l4599 + i32.add + local.set $l4600 + local.get $l4599 + local.get $l4600 + i32.add + local.set $l4601 + local.get $l4600 + local.get $l4601 + i32.add + local.set $l4602 + local.get $l4601 + local.get $l4602 + i32.add + local.set $l4603 + local.get $l4602 + local.get $l4603 + i32.add + local.set $l4604 + local.get $l4603 + local.get $l4604 + i32.add + local.set $l4605 + local.get $l4604 + local.get $l4605 + i32.add + local.set $l4606 + local.get $l4605 + local.get $l4606 + i32.add + local.set $l4607 + local.get $l4606 + local.get $l4607 + i32.add + local.set $l4608 + local.get $l4607 + local.get $l4608 + i32.add + local.set $l4609 + local.get $l4608 + local.get $l4609 + i32.add + local.set $l4610 + local.get $l4609 + local.get $l4610 + i32.add + local.set $l4611 + local.get $l4610 + local.get $l4611 + i32.add + local.set $l4612 + local.get $l4611 + local.get $l4612 + i32.add + local.set $l4613 + local.get $l4612 + local.get $l4613 + i32.add + local.set $l4614 + local.get $l4613 + local.get $l4614 + i32.add + local.set $l4615 + local.get $l4614 + local.get $l4615 + i32.add + local.set $l4616 + local.get $l4615 + local.get $l4616 + i32.add + local.set $l4617 + local.get $l4616 + local.get $l4617 + i32.add + local.set $l4618 + local.get $l4617 + local.get $l4618 + i32.add + local.set $l4619 + local.get $l4618 + local.get $l4619 + i32.add + local.set $l4620 + local.get $l4619 + local.get $l4620 + i32.add + local.set $l4621 + local.get $l4620 + local.get $l4621 + i32.add + local.set $l4622 + local.get $l4621 + local.get $l4622 + i32.add + local.set $l4623 + local.get $l4622 + local.get $l4623 + i32.add + local.set $l4624 + local.get $l4623 + local.get $l4624 + i32.add + local.set $l4625 + local.get $l4624 + local.get $l4625 + i32.add + local.set $l4626 + local.get $l4625 + local.get $l4626 + i32.add + local.set $l4627 + local.get $l4626 + local.get $l4627 + i32.add + local.set $l4628 + local.get $l4627 + local.get $l4628 + i32.add + local.set $l4629 + local.get $l4628 + local.get $l4629 + i32.add + local.set $l4630 + local.get $l4629 + local.get $l4630 + i32.add + local.set $l4631 + local.get $l4630 + local.get $l4631 + i32.add + local.set $l4632 + local.get $l4631 + local.get $l4632 + i32.add + local.set $l4633 + local.get $l4632 + local.get $l4633 + i32.add + local.set $l4634 + local.get $l4633 + local.get $l4634 + i32.add + local.set $l4635 + local.get $l4634 + local.get $l4635 + i32.add + local.set $l4636 + local.get $l4635 + local.get $l4636 + i32.add + local.set $l4637 + local.get $l4636 + local.get $l4637 + i32.add + local.set $l4638 + local.get $l4637 + local.get $l4638 + i32.add + local.set $l4639 + local.get $l4638 + local.get $l4639 + i32.add + local.set $l4640 + local.get $l4639 + local.get $l4640 + i32.add + local.set $l4641 + local.get $l4640 + local.get $l4641 + i32.add + local.set $l4642 + local.get $l4641 + local.get $l4642 + i32.add + local.set $l4643 + local.get $l4642 + local.get $l4643 + i32.add + local.set $l4644 + local.get $l4643 + local.get $l4644 + i32.add + local.set $l4645 + local.get $l4644 + local.get $l4645 + i32.add + local.set $l4646 + local.get $l4645 + local.get $l4646 + i32.add + local.set $l4647 + local.get $l4646 + local.get $l4647 + i32.add + local.set $l4648 + local.get $l4647 + local.get $l4648 + i32.add + local.set $l4649 + local.get $l4648 + local.get $l4649 + i32.add + local.set $l4650 + local.get $l4649 + local.get $l4650 + i32.add + local.set $l4651 + local.get $l4650 + local.get $l4651 + i32.add + local.set $l4652 + local.get $l4651 + local.get $l4652 + i32.add + local.set $l4653 + local.get $l4652 + local.get $l4653 + i32.add + local.set $l4654 + local.get $l4653 + local.get $l4654 + i32.add + local.set $l4655 + local.get $l4654 + local.get $l4655 + i32.add + local.set $l4656 + local.get $l4655 + local.get $l4656 + i32.add + local.set $l4657 + local.get $l4656 + local.get $l4657 + i32.add + local.set $l4658 + local.get $l4657 + local.get $l4658 + i32.add + local.set $l4659 + local.get $l4658 + local.get $l4659 + i32.add + local.set $l4660 + local.get $l4659 + local.get $l4660 + i32.add + local.set $l4661 + local.get $l4660 + local.get $l4661 + i32.add + local.set $l4662 + local.get $l4661 + local.get $l4662 + i32.add + local.set $l4663 + local.get $l4662 + local.get $l4663 + i32.add + local.set $l4664 + local.get $l4663 + local.get $l4664 + i32.add + local.set $l4665 + local.get $l4664 + local.get $l4665 + i32.add + local.set $l4666 + local.get $l4665 + local.get $l4666 + i32.add + local.set $l4667 + local.get $l4666 + local.get $l4667 + i32.add + local.set $l4668 + local.get $l4667 + local.get $l4668 + i32.add + local.set $l4669 + local.get $l4668 + local.get $l4669 + i32.add + local.set $l4670 + local.get $l4669 + local.get $l4670 + i32.add + local.set $l4671 + local.get $l4670 + local.get $l4671 + i32.add + local.set $l4672 + local.get $l4671 + local.get $l4672 + i32.add + local.set $l4673 + local.get $l4672 + local.get $l4673 + i32.add + local.set $l4674 + local.get $l4673 + local.get $l4674 + i32.add + local.set $l4675 + local.get $l4674 + local.get $l4675 + i32.add + local.set $l4676 + local.get $l4675 + local.get $l4676 + i32.add + local.set $l4677 + local.get $l4676 + local.get $l4677 + i32.add + local.set $l4678 + local.get $l4677 + local.get $l4678 + i32.add + local.set $l4679 + local.get $l4678 + local.get $l4679 + i32.add + local.set $l4680 + local.get $l4679 + local.get $l4680 + i32.add + local.set $l4681 + local.get $l4680 + local.get $l4681 + i32.add + local.set $l4682 + local.get $l4681 + local.get $l4682 + i32.add + local.set $l4683 + local.get $l4682 + local.get $l4683 + i32.add + local.set $l4684 + local.get $l4683 + local.get $l4684 + i32.add + local.set $l4685 + local.get $l4684 + local.get $l4685 + i32.add + local.set $l4686 + local.get $l4685 + local.get $l4686 + i32.add + local.set $l4687 + local.get $l4686 + local.get $l4687 + i32.add + local.set $l4688 + local.get $l4687 + local.get $l4688 + i32.add + local.set $l4689 + local.get $l4688 + local.get $l4689 + i32.add + local.set $l4690 + local.get $l4689 + local.get $l4690 + i32.add + local.set $l4691 + local.get $l4690 + local.get $l4691 + i32.add + local.set $l4692 + local.get $l4691 + local.get $l4692 + i32.add + local.set $l4693 + local.get $l4692 + local.get $l4693 + i32.add + local.set $l4694 + local.get $l4693 + local.get $l4694 + i32.add + local.set $l4695 + local.get $l4694 + local.get $l4695 + i32.add + local.set $l4696 + local.get $l4695 + local.get $l4696 + i32.add + local.set $l4697 + local.get $l4696 + local.get $l4697 + i32.add + local.set $l4698 + local.get $l4697 + local.get $l4698 + i32.add + local.set $l4699 + local.get $l4698 + local.get $l4699 + i32.add + local.set $l4700 + local.get $l4699 + local.get $l4700 + i32.add + local.set $l4701 + local.get $l4700 + local.get $l4701 + i32.add + local.set $l4702 + local.get $l4701 + local.get $l4702 + i32.add + local.set $l4703 + local.get $l4702 + local.get $l4703 + i32.add + local.set $l4704 + local.get $l4703 + local.get $l4704 + i32.add + local.set $l4705 + local.get $l4704 + local.get $l4705 + i32.add + local.set $l4706 + local.get $l4705 + local.get $l4706 + i32.add + local.set $l4707 + local.get $l4706 + local.get $l4707 + i32.add + local.set $l4708 + local.get $l4707 + local.get $l4708 + i32.add + local.set $l4709 + local.get $l4708 + local.get $l4709 + i32.add + local.set $l4710 + local.get $l4709 + local.get $l4710 + i32.add + local.set $l4711 + local.get $l4710 + local.get $l4711 + i32.add + local.set $l4712 + local.get $l4711 + local.get $l4712 + i32.add + local.set $l4713 + local.get $l4712 + local.get $l4713 + i32.add + local.set $l4714 + local.get $l4713 + local.get $l4714 + i32.add + local.set $l4715 + local.get $l4714 + local.get $l4715 + i32.add + local.set $l4716 + local.get $l4715 + local.get $l4716 + i32.add + local.set $l4717 + local.get $l4716 + local.get $l4717 + i32.add + local.set $l4718 + local.get $l4717 + local.get $l4718 + i32.add + local.set $l4719 + local.get $l4718 + local.get $l4719 + i32.add + local.set $l4720 + local.get $l4719 + local.get $l4720 + i32.add + local.set $l4721 + local.get $l4720 + local.get $l4721 + i32.add + local.set $l4722 + local.get $l4721 + local.get $l4722 + i32.add + local.set $l4723 + local.get $l4722 + local.get $l4723 + i32.add + local.set $l4724 + local.get $l4723 + local.get $l4724 + i32.add + local.set $l4725 + local.get $l4724 + local.get $l4725 + i32.add + local.set $l4726 + local.get $l4725 + local.get $l4726 + i32.add + local.set $l4727 + local.get $l4726 + local.get $l4727 + i32.add + local.set $l4728 + local.get $l4727 + local.get $l4728 + i32.add + local.set $l4729 + local.get $l4728 + local.get $l4729 + i32.add + local.set $l4730 + local.get $l4729 + local.get $l4730 + i32.add + local.set $l4731 + local.get $l4730 + local.get $l4731 + i32.add + local.set $l4732 + local.get $l4731 + local.get $l4732 + i32.add + local.set $l4733 + local.get $l4732 + local.get $l4733 + i32.add + local.set $l4734 + local.get $l4733 + local.get $l4734 + i32.add + local.set $l4735 + local.get $l4734 + local.get $l4735 + i32.add + local.set $l4736 + local.get $l4735 + local.get $l4736 + i32.add + local.set $l4737 + local.get $l4736 + local.get $l4737 + i32.add + local.set $l4738 + local.get $l4737 + local.get $l4738 + i32.add + local.set $l4739 + local.get $l4738 + local.get $l4739 + i32.add + local.set $l4740 + local.get $l4739 + local.get $l4740 + i32.add + local.set $l4741 + local.get $l4740 + local.get $l4741 + i32.add + local.set $l4742 + local.get $l4741 + local.get $l4742 + i32.add + local.set $l4743 + local.get $l4742 + local.get $l4743 + i32.add + local.set $l4744 + local.get $l4743 + local.get $l4744 + i32.add + local.set $l4745 + local.get $l4744 + local.get $l4745 + i32.add + local.set $l4746 + local.get $l4745 + local.get $l4746 + i32.add + local.set $l4747 + local.get $l4746 + local.get $l4747 + i32.add + local.set $l4748 + local.get $l4747 + local.get $l4748 + i32.add + local.set $l4749 + local.get $l4748 + local.get $l4749 + i32.add + local.set $l4750 + local.get $l4749 + local.get $l4750 + i32.add + local.set $l4751 + local.get $l4750 + local.get $l4751 + i32.add + local.set $l4752 + local.get $l4751 + local.get $l4752 + i32.add + local.set $l4753 + local.get $l4752 + local.get $l4753 + i32.add + local.set $l4754 + local.get $l4753 + local.get $l4754 + i32.add + local.set $l4755 + local.get $l4754 + local.get $l4755 + i32.add + local.set $l4756 + local.get $l4755 + local.get $l4756 + i32.add + local.set $l4757 + local.get $l4756 + local.get $l4757 + i32.add + local.set $l4758 + local.get $l4757 + local.get $l4758 + i32.add + local.set $l4759 + local.get $l4758 + local.get $l4759 + i32.add + local.set $l4760 + local.get $l4759 + local.get $l4760 + i32.add + local.set $l4761 + local.get $l4760 + local.get $l4761 + i32.add + local.set $l4762 + local.get $l4761 + local.get $l4762 + i32.add + local.set $l4763 + local.get $l4762 + local.get $l4763 + i32.add + local.set $l4764 + local.get $l4763 + local.get $l4764 + i32.add + local.set $l4765 + local.get $l4764 + local.get $l4765 + i32.add + local.set $l4766 + local.get $l4765 + local.get $l4766 + i32.add + local.set $l4767 + local.get $l4766 + local.get $l4767 + i32.add + local.set $l4768 + local.get $l4767 + local.get $l4768 + i32.add + local.set $l4769 + local.get $l4768 + local.get $l4769 + i32.add + local.set $l4770 + local.get $l4769 + local.get $l4770 + i32.add + local.set $l4771 + local.get $l4770 + local.get $l4771 + i32.add + local.set $l4772 + local.get $l4771 + local.get $l4772 + i32.add + local.set $l4773 + local.get $l4772 + local.get $l4773 + i32.add + local.set $l4774 + local.get $l4773 + local.get $l4774 + i32.add + local.set $l4775 + local.get $l4774 + local.get $l4775 + i32.add + local.set $l4776 + local.get $l4775 + local.get $l4776 + i32.add + local.set $l4777 + local.get $l4776 + local.get $l4777 + i32.add + local.set $l4778 + local.get $l4777 + local.get $l4778 + i32.add + local.set $l4779 + local.get $l4778 + local.get $l4779 + i32.add + local.set $l4780 + local.get $l4779 + local.get $l4780 + i32.add + local.set $l4781 + local.get $l4780 + local.get $l4781 + i32.add + local.set $l4782 + local.get $l4781 + local.get $l4782 + i32.add + local.set $l4783 + local.get $l4782 + local.get $l4783 + i32.add + local.set $l4784 + local.get $l4783 + local.get $l4784 + i32.add + local.set $l4785 + local.get $l4784 + local.get $l4785 + i32.add + local.set $l4786 + local.get $l4785 + local.get $l4786 + i32.add + local.set $l4787 + local.get $l4786 + local.get $l4787 + i32.add + local.set $l4788 + local.get $l4787 + local.get $l4788 + i32.add + local.set $l4789 + local.get $l4788 + local.get $l4789 + i32.add + local.set $l4790 + local.get $l4789 + local.get $l4790 + i32.add + local.set $l4791 + local.get $l4790 + local.get $l4791 + i32.add + local.set $l4792 + local.get $l4791 + local.get $l4792 + i32.add + local.set $l4793 + local.get $l4792 + local.get $l4793 + i32.add + local.set $l4794 + local.get $l4793 + local.get $l4794 + i32.add + local.set $l4795 + local.get $l4794 + local.get $l4795 + i32.add + local.set $l4796 + local.get $l4795 + local.get $l4796 + i32.add + local.set $l4797 + local.get $l4796 + local.get $l4797 + i32.add + local.set $l4798 + local.get $l4797 + local.get $l4798 + i32.add + local.set $l4799 + local.get $l4798 + local.get $l4799 + i32.add + local.set $l4800 + local.get $l4799 + local.get $l4800 + i32.add + local.set $l4801 + local.get $l4800 + local.get $l4801 + i32.add + local.set $l4802 + local.get $l4801 + local.get $l4802 + i32.add + local.set $l4803 + local.get $l4802 + local.get $l4803 + i32.add + local.set $l4804 + local.get $l4803 + local.get $l4804 + i32.add + local.set $l4805 + local.get $l4804 + local.get $l4805 + i32.add + local.set $l4806 + local.get $l4805 + local.get $l4806 + i32.add + local.set $l4807 + local.get $l4806 + local.get $l4807 + i32.add + local.set $l4808 + local.get $l4807 + local.get $l4808 + i32.add + local.set $l4809 + local.get $l4808 + local.get $l4809 + i32.add + local.set $l4810 + local.get $l4809 + local.get $l4810 + i32.add + local.set $l4811 + local.get $l4810 + local.get $l4811 + i32.add + local.set $l4812 + local.get $l4811 + local.get $l4812 + i32.add + local.set $l4813 + local.get $l4812 + local.get $l4813 + i32.add + local.set $l4814 + local.get $l4813 + local.get $l4814 + i32.add + local.set $l4815 + local.get $l4814 + local.get $l4815 + i32.add + local.set $l4816 + local.get $l4815 + local.get $l4816 + i32.add + local.set $l4817 + local.get $l4816 + local.get $l4817 + i32.add + local.set $l4818 + local.get $l4817 + local.get $l4818 + i32.add + local.set $l4819 + local.get $l4818 + local.get $l4819 + i32.add + local.set $l4820 + local.get $l4819 + local.get $l4820 + i32.add + local.set $l4821 + local.get $l4820 + local.get $l4821 + i32.add + local.set $l4822 + local.get $l4821 + local.get $l4822 + i32.add + local.set $l4823 + local.get $l4822 + local.get $l4823 + i32.add + local.set $l4824 + local.get $l4823 + local.get $l4824 + i32.add + local.set $l4825 + local.get $l4824 + local.get $l4825 + i32.add + local.set $l4826 + local.get $l4825 + local.get $l4826 + i32.add + local.set $l4827 + local.get $l4826 + local.get $l4827 + i32.add + local.set $l4828 + local.get $l4827 + local.get $l4828 + i32.add + local.set $l4829 + local.get $l4828 + local.get $l4829 + i32.add + local.set $l4830 + local.get $l4829 + local.get $l4830 + i32.add + local.set $l4831 + local.get $l4830 + local.get $l4831 + i32.add + local.set $l4832 + local.get $l4831 + local.get $l4832 + i32.add + local.set $l4833 + local.get $l4832 + local.get $l4833 + i32.add + local.set $l4834 + local.get $l4833 + local.get $l4834 + i32.add + local.set $l4835 + local.get $l4834 + local.get $l4835 + i32.add + local.set $l4836 + local.get $l4835 + local.get $l4836 + i32.add + local.set $l4837 + local.get $l4836 + local.get $l4837 + i32.add + local.set $l4838 + local.get $l4837 + local.get $l4838 + i32.add + local.set $l4839 + local.get $l4838 + local.get $l4839 + i32.add + local.set $l4840 + local.get $l4839 + local.get $l4840 + i32.add + local.set $l4841 + local.get $l4840 + local.get $l4841 + i32.add + local.set $l4842 + local.get $l4841 + local.get $l4842 + i32.add + local.set $l4843 + local.get $l4842 + local.get $l4843 + i32.add + local.set $l4844 + local.get $l4843 + local.get $l4844 + i32.add + local.set $l4845 + local.get $l4844 + local.get $l4845 + i32.add + local.set $l4846 + local.get $l4845 + local.get $l4846 + i32.add + local.set $l4847 + local.get $l4846 + local.get $l4847 + i32.add + local.set $l4848 + local.get $l4847 + local.get $l4848 + i32.add + local.set $l4849 + local.get $l4848 + local.get $l4849 + i32.add + local.set $l4850 + local.get $l4849 + local.get $l4850 + i32.add + local.set $l4851 + local.get $l4850 + local.get $l4851 + i32.add + local.set $l4852 + local.get $l4851 + local.get $l4852 + i32.add + local.set $l4853 + local.get $l4852 + local.get $l4853 + i32.add + local.set $l4854 + local.get $l4853 + local.get $l4854 + i32.add + local.set $l4855 + local.get $l4854 + local.get $l4855 + i32.add + local.set $l4856 + local.get $l4855 + local.get $l4856 + i32.add + local.set $l4857 + local.get $l4856 + local.get $l4857 + i32.add + local.set $l4858 + local.get $l4857 + local.get $l4858 + i32.add + local.set $l4859 + local.get $l4858 + local.get $l4859 + i32.add + local.set $l4860 + local.get $l4859 + local.get $l4860 + i32.add + local.set $l4861 + local.get $l4860 + local.get $l4861 + i32.add + local.set $l4862 + local.get $l4861 + local.get $l4862 + i32.add + local.set $l4863 + local.get $l4862 + local.get $l4863 + i32.add + local.set $l4864 + local.get $l4863 + local.get $l4864 + i32.add + local.set $l4865 + local.get $l4864 + local.get $l4865 + i32.add + local.set $l4866 + local.get $l4865 + local.get $l4866 + i32.add + local.set $l4867 + local.get $l4866 + local.get $l4867 + i32.add + local.set $l4868 + local.get $l4867 + local.get $l4868 + i32.add + local.set $l4869 + local.get $l4868 + local.get $l4869 + i32.add + local.set $l4870 + local.get $l4869 + local.get $l4870 + i32.add + local.set $l4871 + local.get $l4870 + local.get $l4871 + i32.add + local.set $l4872 + local.get $l4871 + local.get $l4872 + i32.add + local.set $l4873 + local.get $l4872 + local.get $l4873 + i32.add + local.set $l4874 + local.get $l4873 + local.get $l4874 + i32.add + local.set $l4875 + local.get $l4874 + local.get $l4875 + i32.add + local.set $l4876 + local.get $l4875 + local.get $l4876 + i32.add + local.set $l4877 + local.get $l4876 + local.get $l4877 + i32.add + local.set $l4878 + local.get $l4877 + local.get $l4878 + i32.add + local.set $l4879 + local.get $l4878 + local.get $l4879 + i32.add + local.set $l4880 + local.get $l4879 + local.get $l4880 + i32.add + local.set $l4881 + local.get $l4880 + local.get $l4881 + i32.add + local.set $l4882 + local.get $l4881 + local.get $l4882 + i32.add + local.set $l4883 + local.get $l4882 + local.get $l4883 + i32.add + local.set $l4884 + local.get $l4883 + local.get $l4884 + i32.add + local.set $l4885 + local.get $l4884 + local.get $l4885 + i32.add + local.set $l4886 + local.get $l4885 + local.get $l4886 + i32.add + local.set $l4887 + local.get $l4886 + local.get $l4887 + i32.add + local.set $l4888 + local.get $l4887 + local.get $l4888 + i32.add + local.set $l4889 + local.get $l4888 + local.get $l4889 + i32.add + local.set $l4890 + local.get $l4889 + local.get $l4890 + i32.add + local.set $l4891 + local.get $l4890 + local.get $l4891 + i32.add + local.set $l4892 + local.get $l4891 + local.get $l4892 + i32.add + local.set $l4893 + local.get $l4892 + local.get $l4893 + i32.add + local.set $l4894 + local.get $l4893 + local.get $l4894 + i32.add + local.set $l4895 + local.get $l4894 + local.get $l4895 + i32.add + local.set $l4896 + local.get $l4895 + local.get $l4896 + i32.add + local.set $l4897 + local.get $l4896 + local.get $l4897 + i32.add + local.set $l4898 + local.get $l4897 + local.get $l4898 + i32.add + local.set $l4899 + local.get $l4898 + local.get $l4899 + i32.add + local.set $l4900 + local.get $l4899 + local.get $l4900 + i32.add + local.set $l4901 + local.get $l4900 + local.get $l4901 + i32.add + local.set $l4902 + local.get $l4901 + local.get $l4902 + i32.add + local.set $l4903 + local.get $l4902 + local.get $l4903 + i32.add + local.set $l4904 + local.get $l4903 + local.get $l4904 + i32.add + local.set $l4905 + local.get $l4904 + local.get $l4905 + i32.add + local.set $l4906 + local.get $l4905 + local.get $l4906 + i32.add + local.set $l4907 + local.get $l4906 + local.get $l4907 + i32.add + local.set $l4908 + local.get $l4907 + local.get $l4908 + i32.add + local.set $l4909 + local.get $l4908 + local.get $l4909 + i32.add + local.set $l4910 + local.get $l4909 + local.get $l4910 + i32.add + local.set $l4911 + local.get $l4910 + local.get $l4911 + i32.add + local.set $l4912 + local.get $l4911 + local.get $l4912 + i32.add + local.set $l4913 + local.get $l4912 + local.get $l4913 + i32.add + local.set $l4914 + local.get $l4913 + local.get $l4914 + i32.add + local.set $l4915 + local.get $l4914 + local.get $l4915 + i32.add + local.set $l4916 + local.get $l4915 + local.get $l4916 + i32.add + local.set $l4917 + local.get $l4916 + local.get $l4917 + i32.add + local.set $l4918 + local.get $l4917 + local.get $l4918 + i32.add + local.set $l4919 + local.get $l4918 + local.get $l4919 + i32.add + local.set $l4920 + local.get $l4919 + local.get $l4920 + i32.add + local.set $l4921 + local.get $l4920 + local.get $l4921 + i32.add + local.set $l4922 + local.get $l4921 + local.get $l4922 + i32.add + local.set $l4923 + local.get $l4922 + local.get $l4923 + i32.add + local.set $l4924 + local.get $l4923 + local.get $l4924 + i32.add + local.set $l4925 + local.get $l4924 + local.get $l4925 + i32.add + local.set $l4926 + local.get $l4925 + local.get $l4926 + i32.add + local.set $l4927 + local.get $l4926 + local.get $l4927 + i32.add + local.set $l4928 + local.get $l4927 + local.get $l4928 + i32.add + local.set $l4929 + local.get $l4928 + local.get $l4929 + i32.add + local.set $l4930 + local.get $l4929 + local.get $l4930 + i32.add + local.set $l4931 + local.get $l4930 + local.get $l4931 + i32.add + local.set $l4932 + local.get $l4931 + local.get $l4932 + i32.add + local.set $l4933 + local.get $l4932 + local.get $l4933 + i32.add + local.set $l4934 + local.get $l4933 + local.get $l4934 + i32.add + local.set $l4935 + local.get $l4934 + local.get $l4935 + i32.add + local.set $l4936 + local.get $l4935 + local.get $l4936 + i32.add + local.set $l4937 + local.get $l4936 + local.get $l4937 + i32.add + local.set $l4938 + local.get $l4937 + local.get $l4938 + i32.add + local.set $l4939 + local.get $l4938 + local.get $l4939 + i32.add + local.set $l4940 + local.get $l4939 + local.get $l4940 + i32.add + local.set $l4941 + local.get $l4940 + local.get $l4941 + i32.add + local.set $l4942 + local.get $l4941 + local.get $l4942 + i32.add + local.set $l4943 + local.get $l4942 + local.get $l4943 + i32.add + local.set $l4944 + local.get $l4943 + local.get $l4944 + i32.add + local.set $l4945 + local.get $l4944 + local.get $l4945 + i32.add + local.set $l4946 + local.get $l4945 + local.get $l4946 + i32.add + local.set $l4947 + local.get $l4946 + local.get $l4947 + i32.add + local.set $l4948 + local.get $l4947 + local.get $l4948 + i32.add + local.set $l4949 + local.get $l4948 + local.get $l4949 + i32.add + local.set $l4950 + local.get $l4949 + local.get $l4950 + i32.add + local.set $l4951 + local.get $l4950 + local.get $l4951 + i32.add + local.set $l4952 + local.get $l4951 + local.get $l4952 + i32.add + local.set $l4953 + local.get $l4952 + local.get $l4953 + i32.add + local.set $l4954 + local.get $l4953 + local.get $l4954 + i32.add + local.set $l4955 + local.get $l4954 + local.get $l4955 + i32.add + local.set $l4956 + local.get $l4955 + local.get $l4956 + i32.add + local.set $l4957 + local.get $l4956 + local.get $l4957 + i32.add + local.set $l4958 + local.get $l4957 + local.get $l4958 + i32.add + local.set $l4959 + local.get $l4958 + local.get $l4959 + i32.add + local.set $l4960 + local.get $l4959 + local.get $l4960 + i32.add + local.set $l4961 + local.get $l4960 + local.get $l4961 + i32.add + local.set $l4962 + local.get $l4961 + local.get $l4962 + i32.add + local.set $l4963 + local.get $l4962 + local.get $l4963 + i32.add + local.set $l4964 + local.get $l4963 + local.get $l4964 + i32.add + local.set $l4965 + local.get $l4964 + local.get $l4965 + i32.add + local.set $l4966 + local.get $l4965 + local.get $l4966 + i32.add + local.set $l4967 + local.get $l4966 + local.get $l4967 + i32.add + local.set $l4968 + local.get $l4967 + local.get $l4968 + i32.add + local.set $l4969 + local.get $l4968 + local.get $l4969 + i32.add + local.set $l4970 + local.get $l4969 + local.get $l4970 + i32.add + local.set $l4971 + local.get $l4970 + local.get $l4971 + i32.add + local.set $l4972 + local.get $l4971 + local.get $l4972 + i32.add + local.set $l4973 + local.get $l4972 + local.get $l4973 + i32.add + local.set $l4974 + local.get $l4973 + local.get $l4974 + i32.add + local.set $l4975 + local.get $l4974 + local.get $l4975 + i32.add + local.set $l4976 + local.get $l4975 + local.get $l4976 + i32.add + local.set $l4977 + local.get $l4976 + local.get $l4977 + i32.add + local.set $l4978 + local.get $l4977 + local.get $l4978 + i32.add + local.set $l4979 + local.get $l4978 + local.get $l4979 + i32.add + local.set $l4980 + local.get $l4979 + local.get $l4980 + i32.add + local.set $l4981 + local.get $l4980 + local.get $l4981 + i32.add + local.set $l4982 + local.get $l4981 + local.get $l4982 + i32.add + local.set $l4983 + local.get $l4982 + local.get $l4983 + i32.add + local.set $l4984 + local.get $l4983 + local.get $l4984 + i32.add + local.set $l4985 + local.get $l4984 + local.get $l4985 + i32.add + local.set $l4986 + local.get $l4985 + local.get $l4986 + i32.add + local.set $l4987 + local.get $l4986 + local.get $l4987 + i32.add + local.set $l4988 + local.get $l4987 + local.get $l4988 + i32.add + local.set $l4989 + local.get $l4988 + local.get $l4989 + i32.add + local.set $l4990 + local.get $l4989 + local.get $l4990 + i32.add + local.set $l4991 + local.get $l4990 + local.get $l4991 + i32.add + local.set $l4992 + local.get $l4991 + local.get $l4992 + i32.add + local.set $l4993 + local.get $l4992 + local.get $l4993 + i32.add + local.set $l4994 + local.get $l4993 + local.get $l4994 + i32.add + local.set $l4995 + local.get $l4994 + local.get $l4995 + i32.add + local.set $l4996 + local.get $l4995 + local.get $l4996 + i32.add + local.set $l4997 + local.get $l4996 + local.get $l4997 + i32.add + local.set $l4998 + local.get $l4997 + local.get $l4998 + i32.add + local.set $l4999 + local.get $l4998 + local.get $l4999 + i32.add + local.set $l5000 + local.get $l4999 + local.get $l5000 + i32.add + local.set $l5001 + local.get $l5000 + local.get $l5001 + i32.add + local.set $l5002 + local.get $l5001 + local.get $l5002 + i32.add + local.set $l5003 + local.get $l5002 + local.get $l5003 + i32.add + local.set $l5004 + local.get $l5003 + local.get $l5004 + i32.add + local.set $l5005 + local.get $l5004 + local.get $l5005 + i32.add + local.set $l5006 + local.get $l5005 + local.get $l5006 + i32.add + local.set $l5007 + local.get $l5006 + local.get $l5007 + i32.add + local.set $l5008 + local.get $l5007 + local.get $l5008 + i32.add + local.set $l5009 + local.get $l5008 + local.get $l5009 + i32.add + local.set $l5010 + local.get $l5009 + local.get $l5010 + i32.add + local.set $l5011 + local.get $l5010 + local.get $l5011 + i32.add + local.set $l5012 + local.get $l5011 + local.get $l5012 + i32.add + local.set $l5013 + local.get $l5012 + local.get $l5013 + i32.add + local.set $l5014 + local.get $l5013 + local.get $l5014 + i32.add + local.set $l5015 + local.get $l5014 + local.get $l5015 + i32.add + local.set $l5016 + local.get $l5015 + local.get $l5016 + i32.add + local.set $l5017 + local.get $l5016 + local.get $l5017 + i32.add + local.set $l5018 + local.get $l5017 + local.get $l5018 + i32.add + local.set $l5019 + local.get $l5018 + local.get $l5019 + i32.add + local.set $l5020 + local.get $l5019 + local.get $l5020 + i32.add + local.set $l5021 + local.get $l5020 + local.get $l5021 + i32.add + local.set $l5022 + local.get $l5021 + local.get $l5022 + i32.add + local.set $l5023 + local.get $l5022 + local.get $l5023 + i32.add + local.set $l5024 + local.get $l5023 + local.get $l5024 + i32.add + local.set $l5025 + local.get $l5024 + local.get $l5025 + i32.add + local.set $l5026 + local.get $l5025 + local.get $l5026 + i32.add + local.set $l5027 + local.get $l5026 + local.get $l5027 + i32.add + local.set $l5028 + local.get $l5027 + local.get $l5028 + i32.add + local.set $l5029 + local.get $l5028 + local.get $l5029 + i32.add + local.set $l5030 + local.get $l5029 + local.get $l5030 + i32.add + local.set $l5031 + local.get $l5030 + local.get $l5031 + i32.add + local.set $l5032 + local.get $l5031 + local.get $l5032 + i32.add + local.set $l5033 + local.get $l5032 + local.get $l5033 + i32.add + local.set $l5034 + local.get $l5033 + local.get $l5034 + i32.add + local.set $l5035 + local.get $l5034 + local.get $l5035 + i32.add + local.set $l5036 + local.get $l5035 + local.get $l5036 + i32.add + local.set $l5037 + local.get $l5036 + local.get $l5037 + i32.add + local.set $l5038 + local.get $l5037 + local.get $l5038 + i32.add + local.set $l5039 + local.get $l5038 + local.get $l5039 + i32.add + local.set $l5040 + local.get $l5039 + local.get $l5040 + i32.add + local.set $l5041 + local.get $l5040 + local.get $l5041 + i32.add + local.set $l5042 + local.get $l5041 + local.get $l5042 + i32.add + local.set $l5043 + local.get $l5042 + local.get $l5043 + i32.add + local.set $l5044 + local.get $l5043 + local.get $l5044 + i32.add + local.set $l5045 + local.get $l5044 + local.get $l5045 + i32.add + local.set $l5046 + local.get $l5045 + local.get $l5046 + i32.add + local.set $l5047 + local.get $l5046 + local.get $l5047 + i32.add + local.set $l5048 + local.get $l5047 + local.get $l5048 + i32.add + local.set $l5049 + local.get $l5048 + local.get $l5049 + i32.add + local.set $l5050 + local.get $l5049 + local.get $l5050 + i32.add + local.set $l5051 + local.get $l5050 + local.get $l5051 + i32.add + local.set $l5052 + local.get $l5051 + local.get $l5052 + i32.add + local.set $l5053 + local.get $l5052 + local.get $l5053 + i32.add + local.set $l5054 + local.get $l5053 + local.get $l5054 + i32.add + local.set $l5055 + local.get $l5054 + local.get $l5055 + i32.add + local.set $l5056 + local.get $l5055 + local.get $l5056 + i32.add + local.set $l5057 + local.get $l5056 + local.get $l5057 + i32.add + local.set $l5058 + local.get $l5057 + local.get $l5058 + i32.add + local.set $l5059 + local.get $l5058 + local.get $l5059 + i32.add + local.set $l5060 + local.get $l5059 + local.get $l5060 + i32.add + local.set $l5061 + local.get $l5060 + local.get $l5061 + i32.add + local.set $l5062 + local.get $l5061 + local.get $l5062 + i32.add + local.set $l5063 + local.get $l5062 + local.get $l5063 + i32.add + local.set $l5064 + local.get $l5063 + local.get $l5064 + i32.add + local.set $l5065 + local.get $l5064 + local.get $l5065 + i32.add + local.set $l5066 + local.get $l5065 + local.get $l5066 + i32.add + local.set $l5067 + local.get $l5066 + local.get $l5067 + i32.add + local.set $l5068 + local.get $l5067 + local.get $l5068 + i32.add + local.set $l5069 + local.get $l5068 + local.get $l5069 + i32.add + local.set $l5070 + local.get $l5069 + local.get $l5070 + i32.add + local.set $l5071 + local.get $l5070 + local.get $l5071 + i32.add + local.set $l5072 + local.get $l5071 + local.get $l5072 + i32.add + local.set $l5073 + local.get $l5072 + local.get $l5073 + i32.add + local.set $l5074 + local.get $l5073 + local.get $l5074 + i32.add + local.set $l5075 + local.get $l5074 + local.get $l5075 + i32.add + local.set $l5076 + local.get $l5075 + local.get $l5076 + i32.add + local.set $l5077 + local.get $l5076 + local.get $l5077 + i32.add + local.set $l5078 + local.get $l5077 + local.get $l5078 + i32.add + local.set $l5079 + local.get $l5078 + local.get $l5079 + i32.add + local.set $l5080 + local.get $l5079 + local.get $l5080 + i32.add + local.set $l5081 + local.get $l5080 + local.get $l5081 + i32.add + local.set $l5082 + local.get $l5081 + local.get $l5082 + i32.add + local.set $l5083 + local.get $l5082 + local.get $l5083 + i32.add + local.set $l5084 + local.get $l5083 + local.get $l5084 + i32.add + local.set $l5085 + local.get $l5084 + local.get $l5085 + i32.add + local.set $l5086 + local.get $l5085 + local.get $l5086 + i32.add + local.set $l5087 + local.get $l5086 + local.get $l5087 + i32.add + local.set $l5088 + local.get $l5087 + local.get $l5088 + i32.add + local.set $l5089 + local.get $l5088 + local.get $l5089 + i32.add + local.set $l5090 + local.get $l5089 + local.get $l5090 + i32.add + local.set $l5091 + local.get $l5090 + local.get $l5091 + i32.add + local.set $l5092 + local.get $l5091 + local.get $l5092 + i32.add + local.set $l5093 + local.get $l5092 + local.get $l5093 + i32.add + local.set $l5094 + local.get $l5093 + local.get $l5094 + i32.add + local.set $l5095 + local.get $l5094 + local.get $l5095 + i32.add + local.set $l5096 + local.get $l5095 + local.get $l5096 + i32.add + local.set $l5097 + local.get $l5096 + local.get $l5097 + i32.add + local.set $l5098 + local.get $l5097 + local.get $l5098 + i32.add + local.set $l5099 + local.get $l5098 + local.get $l5099 + i32.add + local.set $l5100 + local.get $l5099 + local.get $l5100 + i32.add + local.set $l5101 + local.get $l5100 + local.get $l5101 + i32.add + local.set $l5102 + local.get $l5101 + local.get $l5102 + i32.add + local.set $l5103 + local.get $l5102 + local.get $l5103 + i32.add + local.set $l5104 + local.get $l5103 + local.get $l5104 + i32.add + local.set $l5105 + local.get $l5104 + local.get $l5105 + i32.add + local.set $l5106 + local.get $l5105 + local.get $l5106 + i32.add + local.set $l5107 + local.get $l5106 + local.get $l5107 + i32.add + local.set $l5108 + local.get $l5107 + local.get $l5108 + i32.add + local.set $l5109 + local.get $l5108 + local.get $l5109 + i32.add + local.set $l5110 + local.get $l5109 + local.get $l5110 + i32.add + local.set $l5111 + local.get $l5110 + local.get $l5111 + i32.add + local.set $l5112 + local.get $l5111 + local.get $l5112 + i32.add + local.set $l5113 + local.get $l5112 + local.get $l5113 + i32.add + local.set $l5114 + local.get $l5113 + local.get $l5114 + i32.add + local.set $l5115 + local.get $l5114 + local.get $l5115 + i32.add + local.set $l5116 + local.get $l5115 + local.get $l5116 + i32.add + local.set $l5117 + local.get $l5116 + local.get $l5117 + i32.add + local.set $l5118 + local.get $l5117 + local.get $l5118 + i32.add + local.set $l5119 + local.get $l5118 + local.get $l5119 + i32.add + local.set $l5120 + local.get $l5119 + local.get $l5120 + i32.add + local.set $l5121 + local.get $l5120 + local.get $l5121 + i32.add + local.set $l5122 + local.get $l5121 + local.get $l5122 + i32.add + local.set $l5123 + local.get $l5122 + local.get $l5123 + i32.add + local.set $l5124 + local.get $l5123 + local.get $l5124 + i32.add + local.set $l5125 + local.get $l5124 + local.get $l5125 + i32.add + local.set $l5126 + local.get $l5125 + local.get $l5126 + i32.add + local.set $l5127 + local.get $l5126 + local.get $l5127 + i32.add + local.set $l5128 + local.get $l5127 + local.get $l5128 + i32.add + local.set $l5129 + local.get $l5128 + local.get $l5129 + i32.add + local.set $l5130 + local.get $l5129 + local.get $l5130 + i32.add + local.set $l5131 + local.get $l5130 + local.get $l5131 + i32.add + local.set $l5132 + local.get $l5131 + local.get $l5132 + i32.add + local.set $l5133 + local.get $l5132 + local.get $l5133 + i32.add + local.set $l5134 + local.get $l5133 + local.get $l5134 + i32.add + local.set $l5135 + local.get $l5134 + local.get $l5135 + i32.add + local.set $l5136 + local.get $l5135 + local.get $l5136 + i32.add + local.set $l5137 + local.get $l5136 + local.get $l5137 + i32.add + local.set $l5138 + local.get $l5137 + local.get $l5138 + i32.add + local.set $l5139 + local.get $l5138 + local.get $l5139 + i32.add + local.set $l5140 + local.get $l5139 + local.get $l5140 + i32.add + local.set $l5141 + local.get $l5140 + local.get $l5141 + i32.add + local.set $l5142 + local.get $l5141 + local.get $l5142 + i32.add + local.set $l5143 + local.get $l5142 + local.get $l5143 + i32.add + local.set $l5144 + local.get $l5143 + local.get $l5144 + i32.add + local.set $l5145 + local.get $l5144 + local.get $l5145 + i32.add + local.set $l5146 + local.get $l5145 + local.get $l5146 + i32.add + local.set $l5147 + local.get $l5146 + local.get $l5147 + i32.add + local.set $l5148 + local.get $l5147 + local.get $l5148 + i32.add + local.set $l5149 + local.get $l5148 + local.get $l5149 + i32.add + local.set $l5150 + local.get $l5149 + local.get $l5150 + i32.add + local.set $l5151 + local.get $l5150 + local.get $l5151 + i32.add + local.set $l5152 + local.get $l5151 + local.get $l5152 + i32.add + local.set $l5153 + local.get $l5152 + local.get $l5153 + i32.add + local.set $l5154 + local.get $l5153 + local.get $l5154 + i32.add + local.set $l5155 + local.get $l5154 + local.get $l5155 + i32.add + local.set $l5156 + local.get $l5155 + local.get $l5156 + i32.add + local.set $l5157 + local.get $l5156 + local.get $l5157 + i32.add + local.set $l5158 + local.get $l5157 + local.get $l5158 + i32.add + local.set $l5159 + local.get $l5158 + local.get $l5159 + i32.add + local.set $l5160 + local.get $l5159 + local.get $l5160 + i32.add + local.set $l5161 + local.get $l5160 + local.get $l5161 + i32.add + local.set $l5162 + local.get $l5161 + local.get $l5162 + i32.add + local.set $l5163 + local.get $l5162 + local.get $l5163 + i32.add + local.set $l5164 + local.get $l5163 + local.get $l5164 + i32.add + local.set $l5165 + local.get $l5164 + local.get $l5165 + i32.add + local.set $l5166 + local.get $l5165 + local.get $l5166 + i32.add + local.set $l5167 + local.get $l5166 + local.get $l5167 + i32.add + local.set $l5168 + local.get $l5167 + local.get $l5168 + i32.add + local.set $l5169 + local.get $l5168 + local.get $l5169 + i32.add + local.set $l5170 + local.get $l5169 + local.get $l5170 + i32.add + local.set $l5171 + local.get $l5170 + local.get $l5171 + i32.add + local.set $l5172 + local.get $l5171 + local.get $l5172 + i32.add + local.set $l5173 + local.get $l5172 + local.get $l5173 + i32.add + local.set $l5174 + local.get $l5173 + local.get $l5174 + i32.add + local.set $l5175 + local.get $l5174 + local.get $l5175 + i32.add + local.set $l5176 + local.get $l5175 + local.get $l5176 + i32.add + local.set $l5177 + local.get $l5176 + local.get $l5177 + i32.add + local.set $l5178 + local.get $l5177 + local.get $l5178 + i32.add + local.set $l5179 + local.get $l5178 + local.get $l5179 + i32.add + local.set $l5180 + local.get $l5179 + local.get $l5180 + i32.add + local.set $l5181 + local.get $l5180 + local.get $l5181 + i32.add + local.set $l5182 + local.get $l5181 + local.get $l5182 + i32.add + local.set $l5183 + local.get $l5182 + local.get $l5183 + i32.add + local.set $l5184 + local.get $l5183 + local.get $l5184 + i32.add + local.set $l5185 + local.get $l5184 + local.get $l5185 + i32.add + local.set $l5186 + local.get $l5185 + local.get $l5186 + i32.add + local.set $l5187 + local.get $l5186 + local.get $l5187 + i32.add + local.set $l5188 + local.get $l5187 + local.get $l5188 + i32.add + local.set $l5189 + local.get $l5188 + local.get $l5189 + i32.add + local.set $l5190 + local.get $l5189 + local.get $l5190 + i32.add + local.set $l5191 + local.get $l5190 + local.get $l5191 + i32.add + local.set $l5192 + local.get $l5191 + local.get $l5192 + i32.add + local.set $l5193 + local.get $l5192 + local.get $l5193 + i32.add + local.set $l5194 + local.get $l5193 + local.get $l5194 + i32.add + local.set $l5195 + local.get $l5194 + local.get $l5195 + i32.add + local.set $l5196 + local.get $l5195 + local.get $l5196 + i32.add + local.set $l5197 + local.get $l5196 + local.get $l5197 + i32.add + local.set $l5198 + local.get $l5197 + local.get $l5198 + i32.add + local.set $l5199 + local.get $l5198 + local.get $l5199 + i32.add + local.set $l5200 + local.get $l5199 + local.get $l5200 + i32.add + local.set $l5201 + local.get $l5200 + local.get $l5201 + i32.add + local.set $l5202 + local.get $l5201 + local.get $l5202 + i32.add + local.set $l5203 + local.get $l5202 + local.get $l5203 + i32.add + local.set $l5204 + local.get $l5203 + local.get $l5204 + i32.add + local.set $l5205 + local.get $l5204 + local.get $l5205 + i32.add + local.set $l5206 + local.get $l5205 + local.get $l5206 + i32.add + local.set $l5207 + local.get $l5206 + local.get $l5207 + i32.add + local.set $l5208 + local.get $l5207 + local.get $l5208 + i32.add + local.set $l5209 + local.get $l5208 + local.get $l5209 + i32.add + local.set $l5210 + local.get $l5209 + local.get $l5210 + i32.add + local.set $l5211 + local.get $l5210 + local.get $l5211 + i32.add + local.set $l5212 + local.get $l5211 + local.get $l5212 + i32.add + local.set $l5213 + local.get $l5212 + local.get $l5213 + i32.add + local.set $l5214 + local.get $l5213 + local.get $l5214 + i32.add + local.set $l5215 + local.get $l5214 + local.get $l5215 + i32.add + local.set $l5216 + local.get $l5215 + local.get $l5216 + i32.add + local.set $l5217 + local.get $l5216 + local.get $l5217 + i32.add + local.set $l5218 + local.get $l5217 + local.get $l5218 + i32.add + local.set $l5219 + local.get $l5218 + local.get $l5219 + i32.add + local.set $l5220 + local.get $l5219 + local.get $l5220 + i32.add + local.set $l5221 + local.get $l5220 + local.get $l5221 + i32.add + local.set $l5222 + local.get $l5221 + local.get $l5222 + i32.add + local.set $l5223 + local.get $l5222 + local.get $l5223 + i32.add + local.set $l5224 + local.get $l5223 + local.get $l5224 + i32.add + local.set $l5225 + local.get $l5224 + local.get $l5225 + i32.add + local.set $l5226 + local.get $l5225 + local.get $l5226 + i32.add + local.set $l5227 + local.get $l5226 + local.get $l5227 + i32.add + local.set $l5228 + local.get $l5227 + local.get $l5228 + i32.add + local.set $l5229 + local.get $l5228 + local.get $l5229 + i32.add + local.set $l5230 + local.get $l5229 + local.get $l5230 + i32.add + local.set $l5231 + local.get $l5230 + local.get $l5231 + i32.add + local.set $l5232 + local.get $l5231 + local.get $l5232 + i32.add + local.set $l5233 + local.get $l5232 + local.get $l5233 + i32.add + local.set $l5234 + local.get $l5233 + local.get $l5234 + i32.add + local.set $l5235 + local.get $l5234 + local.get $l5235 + i32.add + local.set $l5236 + local.get $l5235 + local.get $l5236 + i32.add + local.set $l5237 + local.get $l5236 + local.get $l5237 + i32.add + local.set $l5238 + local.get $l5237 + local.get $l5238 + i32.add + local.set $l5239 + local.get $l5238 + local.get $l5239 + i32.add + local.set $l5240 + local.get $l5239 + local.get $l5240 + i32.add + local.set $l5241 + local.get $l5240 + local.get $l5241 + i32.add + local.set $l5242 + local.get $l5241 + local.get $l5242 + i32.add + local.set $l5243 + local.get $l5242 + local.get $l5243 + i32.add + local.set $l5244 + local.get $l5243 + local.get $l5244 + i32.add + local.set $l5245 + local.get $l5244 + local.get $l5245 + i32.add + local.set $l5246 + local.get $l5245 + local.get $l5246 + i32.add + local.set $l5247 + local.get $l5246 + local.get $l5247 + i32.add + local.set $l5248 + local.get $l5247 + local.get $l5248 + i32.add + local.set $l5249 + local.get $l5248 + local.get $l5249 + i32.add + local.set $l5250 + local.get $l5249 + local.get $l5250 + i32.add + local.set $l5251 + local.get $l5250 + local.get $l5251 + i32.add + local.set $l5252 + local.get $l5251 + local.get $l5252 + i32.add + local.set $l5253 + local.get $l5252 + local.get $l5253 + i32.add + local.set $l5254 + local.get $l5253 + local.get $l5254 + i32.add + local.set $l5255 + local.get $l5254 + local.get $l5255 + i32.add + local.set $l5256 + local.get $l5255 + local.get $l5256 + i32.add + local.set $l5257 + local.get $l5256 + local.get $l5257 + i32.add + local.set $l5258 + local.get $l5257 + local.get $l5258 + i32.add + local.set $l5259 + local.get $l5258 + local.get $l5259 + i32.add + local.set $l5260 + local.get $l5259 + local.get $l5260 + i32.add + local.set $l5261 + local.get $l5260 + local.get $l5261 + i32.add + local.set $l5262 + local.get $l5261 + local.get $l5262 + i32.add + local.set $l5263 + local.get $l5262 + local.get $l5263 + i32.add + local.set $l5264 + local.get $l5263 + local.get $l5264 + i32.add + local.set $l5265 + local.get $l5264 + local.get $l5265 + i32.add + local.set $l5266 + local.get $l5265 + local.get $l5266 + i32.add + local.set $l5267 + local.get $l5266 + local.get $l5267 + i32.add + local.set $l5268 + local.get $l5267 + local.get $l5268 + i32.add + local.set $l5269 + local.get $l5268 + local.get $l5269 + i32.add + local.set $l5270 + local.get $l5269 + local.get $l5270 + i32.add + local.set $l5271 + local.get $l5270 + local.get $l5271 + i32.add + local.set $l5272 + local.get $l5271 + local.get $l5272 + i32.add + local.set $l5273 + local.get $l5272 + local.get $l5273 + i32.add + local.set $l5274 + local.get $l5273 + local.get $l5274 + i32.add + local.set $l5275 + local.get $l5274 + local.get $l5275 + i32.add + local.set $l5276 + local.get $l5275 + local.get $l5276 + i32.add + local.set $l5277 + local.get $l5276 + local.get $l5277 + i32.add + local.set $l5278 + local.get $l5277 + local.get $l5278 + i32.add + local.set $l5279 + local.get $l5278 + local.get $l5279 + i32.add + local.set $l5280 + local.get $l5279 + local.get $l5280 + i32.add + local.set $l5281 + local.get $l5280 + local.get $l5281 + i32.add + local.set $l5282 + local.get $l5281 + local.get $l5282 + i32.add + local.set $l5283 + local.get $l5282 + local.get $l5283 + i32.add + local.set $l5284 + local.get $l5283 + local.get $l5284 + i32.add + local.set $l5285 + local.get $l5284 + local.get $l5285 + i32.add + local.set $l5286 + local.get $l5285 + local.get $l5286 + i32.add + local.set $l5287 + local.get $l5286 + local.get $l5287 + i32.add + local.set $l5288 + local.get $l5287 + local.get $l5288 + i32.add + local.set $l5289 + local.get $l5288 + local.get $l5289 + i32.add + local.set $l5290 + local.get $l5289 + local.get $l5290 + i32.add + local.set $l5291 + local.get $l5290 + local.get $l5291 + i32.add + local.set $l5292 + local.get $l5291 + local.get $l5292 + i32.add + local.set $l5293 + local.get $l5292 + local.get $l5293 + i32.add + local.set $l5294 + local.get $l5293 + local.get $l5294 + i32.add + local.set $l5295 + local.get $l5294 + local.get $l5295 + i32.add + local.set $l5296 + local.get $l5295 + local.get $l5296 + i32.add + local.set $l5297 + local.get $l5296 + local.get $l5297 + i32.add + local.set $l5298 + local.get $l5297 + local.get $l5298 + i32.add + local.set $l5299 + local.get $l5298 + local.get $l5299 + i32.add + local.set $l5300 + local.get $l5299 + local.get $l5300 + i32.add + local.set $l5301 + local.get $l5300 + local.get $l5301 + i32.add + local.set $l5302 + local.get $l5301 + local.get $l5302 + i32.add + local.set $l5303 + local.get $l5302 + local.get $l5303 + i32.add + local.set $l5304 + local.get $l5303 + local.get $l5304 + i32.add + local.set $l5305 + local.get $l5304 + local.get $l5305 + i32.add + local.set $l5306 + local.get $l5305 + local.get $l5306 + i32.add + local.set $l5307 + local.get $l5306 + local.get $l5307 + i32.add + local.set $l5308 + local.get $l5307 + local.get $l5308 + i32.add + local.set $l5309 + local.get $l5308 + local.get $l5309 + i32.add + local.set $l5310 + local.get $l5309 + local.get $l5310 + i32.add + local.set $l5311 + local.get $l5310 + local.get $l5311 + i32.add + local.set $l5312 + local.get $l5311 + local.get $l5312 + i32.add + local.set $l5313 + local.get $l5312 + local.get $l5313 + i32.add + local.set $l5314 + local.get $l5313 + local.get $l5314 + i32.add + local.set $l5315 + local.get $l5314 + local.get $l5315 + i32.add + local.set $l5316 + local.get $l5315 + local.get $l5316 + i32.add + local.set $l5317 + local.get $l5316 + local.get $l5317 + i32.add + local.set $l5318 + local.get $l5317 + local.get $l5318 + i32.add + local.set $l5319 + local.get $l5318 + local.get $l5319 + i32.add + local.set $l5320 + local.get $l5319 + local.get $l5320 + i32.add + local.set $l5321 + local.get $l5320 + local.get $l5321 + i32.add + local.set $l5322 + local.get $l5321 + local.get $l5322 + i32.add + local.set $l5323 + local.get $l5322 + local.get $l5323 + i32.add + local.set $l5324 + local.get $l5323 + local.get $l5324 + i32.add + local.set $l5325 + local.get $l5324 + local.get $l5325 + i32.add + local.set $l5326 + local.get $l5325 + local.get $l5326 + i32.add + local.set $l5327 + local.get $l5326 + local.get $l5327 + i32.add + local.set $l5328 + local.get $l5327 + local.get $l5328 + i32.add + local.set $l5329 + local.get $l5328 + local.get $l5329 + i32.add + local.set $l5330 + local.get $l5329 + local.get $l5330 + i32.add + local.set $l5331 + local.get $l5330 + local.get $l5331 + i32.add + local.set $l5332 + local.get $l5331 + local.get $l5332 + i32.add + local.set $l5333 + local.get $l5332 + local.get $l5333 + i32.add + local.set $l5334 + local.get $l5333 + local.get $l5334 + i32.add + local.set $l5335 + local.get $l5334 + local.get $l5335 + i32.add + local.set $l5336 + local.get $l5335 + local.get $l5336 + i32.add + local.set $l5337 + local.get $l5336 + local.get $l5337 + i32.add + local.set $l5338 + local.get $l5337 + local.get $l5338 + i32.add + local.set $l5339 + local.get $l5338 + local.get $l5339 + i32.add + local.set $l5340 + local.get $l5339 + local.get $l5340 + i32.add + local.set $l5341 + local.get $l5340 + local.get $l5341 + i32.add + local.set $l5342 + local.get $l5341 + local.get $l5342 + i32.add + local.set $l5343 + local.get $l5342 + local.get $l5343 + i32.add + local.set $l5344 + local.get $l5343 + local.get $l5344 + i32.add + local.set $l5345 + local.get $l5344 + local.get $l5345 + i32.add + local.set $l5346 + local.get $l5345 + local.get $l5346 + i32.add + local.set $l5347 + local.get $l5346 + local.get $l5347 + i32.add + local.set $l5348 + local.get $l5347 + local.get $l5348 + i32.add + local.set $l5349 + local.get $l5348 + local.get $l5349 + i32.add + local.set $l5350 + local.get $l5349 + local.get $l5350 + i32.add + local.set $l5351 + local.get $l5350 + local.get $l5351 + i32.add + local.set $l5352 + local.get $l5351 + local.get $l5352 + i32.add + local.set $l5353 + local.get $l5352 + local.get $l5353 + i32.add + local.set $l5354 + local.get $l5353 + local.get $l5354 + i32.add + local.set $l5355 + local.get $l5354 + local.get $l5355 + i32.add + local.set $l5356 + local.get $l5355 + local.get $l5356 + i32.add + local.set $l5357 + local.get $l5356 + local.get $l5357 + i32.add + local.set $l5358 + local.get $l5357 + local.get $l5358 + i32.add + local.set $l5359 + local.get $l5358 + local.get $l5359 + i32.add + local.set $l5360 + local.get $l5359 + local.get $l5360 + i32.add + local.set $l5361 + local.get $l5360 + local.get $l5361 + i32.add + local.set $l5362 + local.get $l5361 + local.get $l5362 + i32.add + local.set $l5363 + local.get $l5362 + local.get $l5363 + i32.add + local.set $l5364 + local.get $l5363 + local.get $l5364 + i32.add + local.set $l5365 + local.get $l5364 + local.get $l5365 + i32.add + local.set $l5366 + local.get $l5365 + local.get $l5366 + i32.add + local.set $l5367 + local.get $l5366 + local.get $l5367 + i32.add + local.set $l5368 + local.get $l5367 + local.get $l5368 + i32.add + local.set $l5369 + local.get $l5368 + local.get $l5369 + i32.add + local.set $l5370 + local.get $l5369 + local.get $l5370 + i32.add + local.set $l5371 + local.get $l5370 + local.get $l5371 + i32.add + local.set $l5372 + local.get $l5371 + local.get $l5372 + i32.add + local.set $l5373 + local.get $l5372 + local.get $l5373 + i32.add + local.set $l5374 + local.get $l5373 + local.get $l5374 + i32.add + local.set $l5375 + local.get $l5374 + local.get $l5375 + i32.add + local.set $l5376 + local.get $l5375 + local.get $l5376 + i32.add + local.set $l5377 + local.get $l5376 + local.get $l5377 + i32.add + local.set $l5378 + local.get $l5377 + local.get $l5378 + i32.add + local.set $l5379 + local.get $l5378 + local.get $l5379 + i32.add + local.set $l5380 + local.get $l5379 + local.get $l5380 + i32.add + local.set $l5381 + local.get $l5380 + local.get $l5381 + i32.add + local.set $l5382 + local.get $l5381 + local.get $l5382 + i32.add + local.set $l5383 + local.get $l5382 + local.get $l5383 + i32.add + local.set $l5384 + local.get $l5383 + local.get $l5384 + i32.add + local.set $l5385 + local.get $l5384 + local.get $l5385 + i32.add + local.set $l5386 + local.get $l5385 + local.get $l5386 + i32.add + local.set $l5387 + local.get $l5386 + local.get $l5387 + i32.add + local.set $l5388 + local.get $l5387 + local.get $l5388 + i32.add + local.set $l5389 + local.get $l5388 + local.get $l5389 + i32.add + local.set $l5390 + local.get $l5389 + local.get $l5390 + i32.add + local.set $l5391 + local.get $l5390 + local.get $l5391 + i32.add + local.set $l5392 + local.get $l5391 + local.get $l5392 + i32.add + local.set $l5393 + local.get $l5392 + local.get $l5393 + i32.add + local.set $l5394 + local.get $l5393 + local.get $l5394 + i32.add + local.set $l5395 + local.get $l5394 + local.get $l5395 + i32.add + local.set $l5396 + local.get $l5395 + local.get $l5396 + i32.add + local.set $l5397 + local.get $l5396 + local.get $l5397 + i32.add + local.set $l5398 + local.get $l5397 + local.get $l5398 + i32.add + local.set $l5399 + local.get $l5398 + local.get $l5399 + i32.add + local.set $l5400 + local.get $l5399 + local.get $l5400 + i32.add + local.set $l5401 + local.get $l5400 + local.get $l5401 + i32.add + local.set $l5402 + local.get $l5401 + local.get $l5402 + i32.add + local.set $l5403 + local.get $l5402 + local.get $l5403 + i32.add + local.set $l5404 + local.get $l5403 + local.get $l5404 + i32.add + local.set $l5405 + local.get $l5404 + local.get $l5405 + i32.add + local.set $l5406 + local.get $l5405 + local.get $l5406 + i32.add + local.set $l5407 + local.get $l5406 + local.get $l5407 + i32.add + local.set $l5408 + local.get $l5407 + local.get $l5408 + i32.add + local.set $l5409 + local.get $l5408 + local.get $l5409 + i32.add + local.set $l5410 + local.get $l5409 + local.get $l5410 + i32.add + local.set $l5411 + local.get $l5410 + local.get $l5411 + i32.add + local.set $l5412 + local.get $l5411 + local.get $l5412 + i32.add + local.set $l5413 + local.get $l5412 + local.get $l5413 + i32.add + local.set $l5414 + local.get $l5413 + local.get $l5414 + i32.add + local.set $l5415 + local.get $l5414 + local.get $l5415 + i32.add + local.set $l5416 + local.get $l5415 + local.get $l5416 + i32.add + local.set $l5417 + local.get $l5416 + local.get $l5417 + i32.add + local.set $l5418 + local.get $l5417 + local.get $l5418 + i32.add + local.set $l5419 + local.get $l5418 + local.get $l5419 + i32.add + local.set $l5420 + local.get $l5419 + local.get $l5420 + i32.add + local.set $l5421 + local.get $l5420 + local.get $l5421 + i32.add + local.set $l5422 + local.get $l5421 + local.get $l5422 + i32.add + local.set $l5423 + local.get $l5422 + local.get $l5423 + i32.add + local.set $l5424 + local.get $l5423 + local.get $l5424 + i32.add + local.set $l5425 + local.get $l5424 + local.get $l5425 + i32.add + local.set $l5426 + local.get $l5425 + local.get $l5426 + i32.add + local.set $l5427 + local.get $l5426 + local.get $l5427 + i32.add + local.set $l5428 + local.get $l5427 + local.get $l5428 + i32.add + local.set $l5429 + local.get $l5428 + local.get $l5429 + i32.add + local.set $l5430 + local.get $l5429 + local.get $l5430 + i32.add + local.set $l5431 + local.get $l5430 + local.get $l5431 + i32.add + local.set $l5432 + local.get $l5431 + local.get $l5432 + i32.add + local.set $l5433 + local.get $l5432 + local.get $l5433 + i32.add + local.set $l5434 + local.get $l5433 + local.get $l5434 + i32.add + local.set $l5435 + local.get $l5434 + local.get $l5435 + i32.add + local.set $l5436 + local.get $l5435 + local.get $l5436 + i32.add + local.set $l5437 + local.get $l5436 + local.get $l5437 + i32.add + local.set $l5438 + local.get $l5437 + local.get $l5438 + i32.add + local.set $l5439 + local.get $l5438 + local.get $l5439 + i32.add + local.set $l5440 + local.get $l5439 + local.get $l5440 + i32.add + local.set $l5441 + local.get $l5440 + local.get $l5441 + i32.add + local.set $l5442 + local.get $l5441 + local.get $l5442 + i32.add + local.set $l5443 + local.get $l5442 + local.get $l5443 + i32.add + local.set $l5444 + local.get $l5443 + local.get $l5444 + i32.add + local.set $l5445 + local.get $l5444 + local.get $l5445 + i32.add + local.set $l5446 + local.get $l5445 + local.get $l5446 + i32.add + local.set $l5447 + local.get $l5446 + local.get $l5447 + i32.add + local.set $l5448 + local.get $l5447 + local.get $l5448 + i32.add + local.set $l5449 + local.get $l5448 + local.get $l5449 + i32.add + local.set $l5450 + local.get $l5449 + local.get $l5450 + i32.add + local.set $l5451 + local.get $l5450 + local.get $l5451 + i32.add + local.set $l5452 + local.get $l5451 + local.get $l5452 + i32.add + local.set $l5453 + local.get $l5452 + local.get $l5453 + i32.add + local.set $l5454 + local.get $l5453 + local.get $l5454 + i32.add + local.set $l5455 + local.get $l5454 + local.get $l5455 + i32.add + local.set $l5456 + local.get $l5455 + local.get $l5456 + i32.add + local.set $l5457 + local.get $l5456 + local.get $l5457 + i32.add + local.set $l5458 + local.get $l5457 + local.get $l5458 + i32.add + local.set $l5459 + local.get $l5458 + local.get $l5459 + i32.add + local.set $l5460 + local.get $l5459 + local.get $l5460 + i32.add + local.set $l5461 + local.get $l5460 + local.get $l5461 + i32.add + local.set $l5462 + local.get $l5461 + local.get $l5462 + i32.add + local.set $l5463 + local.get $l5462 + local.get $l5463 + i32.add + local.set $l5464 + local.get $l5463 + local.get $l5464 + i32.add + local.set $l5465 + local.get $l5464 + local.get $l5465 + i32.add + local.set $l5466 + local.get $l5465 + local.get $l5466 + i32.add + local.set $l5467 + local.get $l5466 + local.get $l5467 + i32.add + local.set $l5468 + local.get $l5467 + local.get $l5468 + i32.add + local.set $l5469 + local.get $l5468 + local.get $l5469 + i32.add + local.set $l5470 + local.get $l5469 + local.get $l5470 + i32.add + local.set $l5471 + local.get $l5470 + local.get $l5471 + i32.add + local.set $l5472 + local.get $l5471 + local.get $l5472 + i32.add + local.set $l5473 + local.get $l5472 + local.get $l5473 + i32.add + local.set $l5474 + local.get $l5473 + local.get $l5474 + i32.add + local.set $l5475 + local.get $l5474 + local.get $l5475 + i32.add + local.set $l5476 + local.get $l5475 + local.get $l5476 + i32.add + local.set $l5477 + local.get $l5476 + local.get $l5477 + i32.add + local.set $l5478 + local.get $l5477 + local.get $l5478 + i32.add + local.set $l5479 + local.get $l5478 + local.get $l5479 + i32.add + local.set $l5480 + local.get $l5479 + local.get $l5480 + i32.add + local.set $l5481 + local.get $l5480 + local.get $l5481 + i32.add + local.set $l5482 + local.get $l5481 + local.get $l5482 + i32.add + local.set $l5483 + local.get $l5482 + local.get $l5483 + i32.add + local.set $l5484 + local.get $l5483 + local.get $l5484 + i32.add + local.set $l5485 + local.get $l5484 + local.get $l5485 + i32.add + local.set $l5486 + local.get $l5485 + local.get $l5486 + i32.add + local.set $l5487 + local.get $l5486 + local.get $l5487 + i32.add + local.set $l5488 + local.get $l5487 + local.get $l5488 + i32.add + local.set $l5489 + local.get $l5488 + local.get $l5489 + i32.add + local.set $l5490 + local.get $l5489 + local.get $l5490 + i32.add + local.set $l5491 + local.get $l5490 + local.get $l5491 + i32.add + local.set $l5492 + local.get $l5491 + local.get $l5492 + i32.add + local.set $l5493 + local.get $l5492 + local.get $l5493 + i32.add + local.set $l5494 + local.get $l5493 + local.get $l5494 + i32.add + local.set $l5495 + local.get $l5494 + local.get $l5495 + i32.add + local.set $l5496 + local.get $l5495 + local.get $l5496 + i32.add + local.set $l5497 + local.get $l5496 + local.get $l5497 + i32.add + local.set $l5498 + local.get $l5497 + local.get $l5498 + i32.add + local.set $l5499 + local.get $l5498 + local.get $l5499 + i32.add + local.set $l5500 + local.get $l5499 + local.get $l5500 + i32.add + local.set $l5501 + local.get $l5500 + local.get $l5501 + i32.add + local.set $l5502 + local.get $l5501 + local.get $l5502 + i32.add + local.set $l5503 + local.get $l5502 + local.get $l5503 + i32.add + local.set $l5504 + local.get $l5503 + local.get $l5504 + i32.add + local.set $l5505 + local.get $l5504 + local.get $l5505 + i32.add + local.set $l5506 + local.get $l5505 + local.get $l5506 + i32.add + local.set $l5507 + local.get $l5506 + local.get $l5507 + i32.add + local.set $l5508 + local.get $l5507 + local.get $l5508 + i32.add + local.set $l5509 + local.get $l5508 + local.get $l5509 + i32.add + local.set $l5510 + local.get $l5509 + local.get $l5510 + i32.add + local.set $l5511 + local.get $l5510 + local.get $l5511 + i32.add + local.set $l5512 + local.get $l5511 + local.get $l5512 + i32.add + local.set $l5513 + local.get $l5512 + local.get $l5513 + i32.add + local.set $l5514 + local.get $l5513 + local.get $l5514 + i32.add + local.set $l5515 + local.get $l5514 + local.get $l5515 + i32.add + local.set $l5516 + local.get $l5515 + local.get $l5516 + i32.add + local.set $l5517 + local.get $l5516 + local.get $l5517 + i32.add + local.set $l5518 + local.get $l5517 + local.get $l5518 + i32.add + local.set $l5519 + local.get $l5518 + local.get $l5519 + i32.add + local.set $l5520 + local.get $l5519 + local.get $l5520 + i32.add + local.set $l5521 + local.get $l5520 + local.get $l5521 + i32.add + local.set $l5522 + local.get $l5521 + local.get $l5522 + i32.add + local.set $l5523 + local.get $l5522 + local.get $l5523 + i32.add + local.set $l5524 + local.get $l5523 + local.get $l5524 + i32.add + local.set $l5525 + local.get $l5524 + local.get $l5525 + i32.add + local.set $l5526 + local.get $l5525 + local.get $l5526 + i32.add + local.set $l5527 + local.get $l5526 + local.get $l5527 + i32.add + local.set $l5528 + local.get $l5527 + local.get $l5528 + i32.add + local.set $l5529 + local.get $l5528 + local.get $l5529 + i32.add + local.set $l5530 + local.get $l5529 + local.get $l5530 + i32.add + local.set $l5531 + local.get $l5530 + local.get $l5531 + i32.add + local.set $l5532 + local.get $l5531 + local.get $l5532 + i32.add + local.set $l5533 + local.get $l5532 + local.get $l5533 + i32.add + local.set $l5534 + local.get $l5533 + local.get $l5534 + i32.add + local.set $l5535 + local.get $l5534 + local.get $l5535 + i32.add + local.set $l5536 + local.get $l5535 + local.get $l5536 + i32.add + local.set $l5537 + local.get $l5536 + local.get $l5537 + i32.add + local.set $l5538 + local.get $l5537 + local.get $l5538 + i32.add + local.set $l5539 + local.get $l5538 + local.get $l5539 + i32.add + local.set $l5540 + local.get $l5539 + local.get $l5540 + i32.add + local.set $l5541 + local.get $l5540 + local.get $l5541 + i32.add + local.set $l5542 + local.get $l5541 + local.get $l5542 + i32.add + local.set $l5543 + local.get $l5542 + local.get $l5543 + i32.add + local.set $l5544 + local.get $l5543 + local.get $l5544 + i32.add + local.set $l5545 + local.get $l5544 + local.get $l5545 + i32.add + local.set $l5546 + local.get $l5545 + local.get $l5546 + i32.add + local.set $l5547 + local.get $l5546 + local.get $l5547 + i32.add + local.set $l5548 + local.get $l5547 + local.get $l5548 + i32.add + local.set $l5549 + local.get $l5548 + local.get $l5549 + i32.add + local.set $l5550 + local.get $l5549 + local.get $l5550 + i32.add + local.set $l5551 + local.get $l5550 + local.get $l5551 + i32.add + local.set $l5552 + local.get $l5551 + local.get $l5552 + i32.add + local.set $l5553 + local.get $l5552 + local.get $l5553 + i32.add + local.set $l5554 + local.get $l5553 + local.get $l5554 + i32.add + local.set $l5555 + local.get $l5554 + local.get $l5555 + i32.add + local.set $l5556 + local.get $l5555 + local.get $l5556 + i32.add + local.set $l5557 + local.get $l5556 + local.get $l5557 + i32.add + local.set $l5558 + local.get $l5557 + local.get $l5558 + i32.add + local.set $l5559 + local.get $l5558 + local.get $l5559 + i32.add + local.set $l5560 + local.get $l5559 + local.get $l5560 + i32.add + local.set $l5561 + local.get $l5560 + local.get $l5561 + i32.add + local.set $l5562 + local.get $l5561 + local.get $l5562 + i32.add + local.set $l5563 + local.get $l5562 + local.get $l5563 + i32.add + local.set $l5564 + local.get $l5563 + local.get $l5564 + i32.add + local.set $l5565 + local.get $l5564 + local.get $l5565 + i32.add + local.set $l5566 + local.get $l5565 + local.get $l5566 + i32.add + local.set $l5567 + local.get $l5566 + local.get $l5567 + i32.add + local.set $l5568 + local.get $l5567 + local.get $l5568 + i32.add + local.set $l5569 + local.get $l5568 + local.get $l5569 + i32.add + local.set $l5570 + local.get $l5569 + local.get $l5570 + i32.add + local.set $l5571 + local.get $l5570 + local.get $l5571 + i32.add + local.set $l5572 + local.get $l5571 + local.get $l5572 + i32.add + local.set $l5573 + local.get $l5572 + local.get $l5573 + i32.add + local.set $l5574 + local.get $l5573 + local.get $l5574 + i32.add + local.set $l5575 + local.get $l5574 + local.get $l5575 + i32.add + local.set $l5576 + local.get $l5575 + local.get $l5576 + i32.add + local.set $l5577 + local.get $l5576 + local.get $l5577 + i32.add + local.set $l5578 + local.get $l5577 + local.get $l5578 + i32.add + local.set $l5579 + local.get $l5578 + local.get $l5579 + i32.add + local.set $l5580 + local.get $l5579 + local.get $l5580 + i32.add + local.set $l5581 + local.get $l5580 + local.get $l5581 + i32.add + local.set $l5582 + local.get $l5581 + local.get $l5582 + i32.add + local.set $l5583 + local.get $l5582 + local.get $l5583 + i32.add + local.set $l5584 + local.get $l5583 + local.get $l5584 + i32.add + local.set $l5585 + local.get $l5584 + local.get $l5585 + i32.add + local.set $l5586 + local.get $l5585 + local.get $l5586 + i32.add + local.set $l5587 + local.get $l5586 + local.get $l5587 + i32.add + local.set $l5588 + local.get $l5587 + local.get $l5588 + i32.add + local.set $l5589 + local.get $l5588 + local.get $l5589 + i32.add + local.set $l5590 + local.get $l5589 + local.get $l5590 + i32.add + local.set $l5591 + local.get $l5590 + local.get $l5591 + i32.add + local.set $l5592 + local.get $l5591 + local.get $l5592 + i32.add + local.set $l5593 + local.get $l5592 + local.get $l5593 + i32.add + local.set $l5594 + local.get $l5593 + local.get $l5594 + i32.add + local.set $l5595 + local.get $l5594 + local.get $l5595 + i32.add + local.set $l5596 + local.get $l5595 + local.get $l5596 + i32.add + local.set $l5597 + local.get $l5596 + local.get $l5597 + i32.add + local.set $l5598 + local.get $l5597 + local.get $l5598 + i32.add + local.set $l5599 + local.get $l5598 + local.get $l5599 + i32.add + local.set $l5600 + local.get $l5599 + local.get $l5600 + i32.add + local.set $l5601 + local.get $l5600 + local.get $l5601 + i32.add + local.set $l5602 + local.get $l5601 + local.get $l5602 + i32.add + local.set $l5603 + local.get $l5602 + local.get $l5603 + i32.add + local.set $l5604 + local.get $l5603 + local.get $l5604 + i32.add + local.set $l5605 + local.get $l5604 + local.get $l5605 + i32.add + local.set $l5606 + local.get $l5605 + local.get $l5606 + i32.add + local.set $l5607 + local.get $l5606 + local.get $l5607 + i32.add + local.set $l5608 + local.get $l5607 + local.get $l5608 + i32.add + local.set $l5609 + local.get $l5608 + local.get $l5609 + i32.add + local.set $l5610 + local.get $l5609 + local.get $l5610 + i32.add + local.set $l5611 + local.get $l5610 + local.get $l5611 + i32.add + local.set $l5612 + local.get $l5611 + local.get $l5612 + i32.add + local.set $l5613 + local.get $l5612 + local.get $l5613 + i32.add + local.set $l5614 + local.get $l5613 + local.get $l5614 + i32.add + local.set $l5615 + local.get $l5614 + local.get $l5615 + i32.add + local.set $l5616 + local.get $l5615 + local.get $l5616 + i32.add + local.set $l5617 + local.get $l5616 + local.get $l5617 + i32.add + local.set $l5618 + local.get $l5617 + local.get $l5618 + i32.add + local.set $l5619 + local.get $l5618 + local.get $l5619 + i32.add + local.set $l5620 + local.get $l5619 + local.get $l5620 + i32.add + local.set $l5621 + local.get $l5620 + local.get $l5621 + i32.add + local.set $l5622 + local.get $l5621 + local.get $l5622 + i32.add + local.set $l5623 + local.get $l5622 + local.get $l5623 + i32.add + local.set $l5624 + local.get $l5623 + local.get $l5624 + i32.add + local.set $l5625 + local.get $l5624 + local.get $l5625 + i32.add + local.set $l5626 + local.get $l5625 + local.get $l5626 + i32.add + local.set $l5627 + local.get $l5626 + local.get $l5627 + i32.add + local.set $l5628 + local.get $l5627 + local.get $l5628 + i32.add + local.set $l5629 + local.get $l5628 + local.get $l5629 + i32.add + local.set $l5630 + local.get $l5629 + local.get $l5630 + i32.add + local.set $l5631 + local.get $l5630 + local.get $l5631 + i32.add + local.set $l5632 + local.get $l5631 + local.get $l5632 + i32.add + local.set $l5633 + local.get $l5632 + local.get $l5633 + i32.add + local.set $l5634 + local.get $l5633 + local.get $l5634 + i32.add + local.set $l5635 + local.get $l5634 + local.get $l5635 + i32.add + local.set $l5636 + local.get $l5635 + local.get $l5636 + i32.add + local.set $l5637 + local.get $l5636 + local.get $l5637 + i32.add + local.set $l5638 + local.get $l5637 + local.get $l5638 + i32.add + local.set $l5639 + local.get $l5638 + local.get $l5639 + i32.add + local.set $l5640 + local.get $l5639 + local.get $l5640 + i32.add + local.set $l5641 + local.get $l5640 + local.get $l5641 + i32.add + local.set $l5642 + local.get $l5641 + local.get $l5642 + i32.add + local.set $l5643 + local.get $l5642 + local.get $l5643 + i32.add + local.set $l5644 + local.get $l5643 + local.get $l5644 + i32.add + local.set $l5645 + local.get $l5644 + local.get $l5645 + i32.add + local.set $l5646 + local.get $l5645 + local.get $l5646 + i32.add + local.set $l5647 + local.get $l5646 + local.get $l5647 + i32.add + local.set $l5648 + local.get $l5647 + local.get $l5648 + i32.add + local.set $l5649 + local.get $l5648 + local.get $l5649 + i32.add + local.set $l5650 + local.get $l5649 + local.get $l5650 + i32.add + local.set $l5651 + local.get $l5650 + local.get $l5651 + i32.add + local.set $l5652 + local.get $l5651 + local.get $l5652 + i32.add + local.set $l5653 + local.get $l5652 + local.get $l5653 + i32.add + local.set $l5654 + local.get $l5653 + local.get $l5654 + i32.add + local.set $l5655 + local.get $l5654 + local.get $l5655 + i32.add + local.set $l5656 + local.get $l5655 + local.get $l5656 + i32.add + local.set $l5657 + local.get $l5656 + local.get $l5657 + i32.add + local.set $l5658 + local.get $l5657 + local.get $l5658 + i32.add + local.set $l5659 + local.get $l5658 + local.get $l5659 + i32.add + local.set $l5660 + local.get $l5659 + local.get $l5660 + i32.add + local.set $l5661 + local.get $l5660 + local.get $l5661 + i32.add + local.set $l5662 + local.get $l5661 + local.get $l5662 + i32.add + local.set $l5663 + local.get $l5662 + local.get $l5663 + i32.add + local.set $l5664 + local.get $l5663 + local.get $l5664 + i32.add + local.set $l5665 + local.get $l5664 + local.get $l5665 + i32.add + local.set $l5666 + local.get $l5665 + local.get $l5666 + i32.add + local.set $l5667 + local.get $l5666 + local.get $l5667 + i32.add + local.set $l5668 + local.get $l5667 + local.get $l5668 + i32.add + local.set $l5669 + local.get $l5668 + local.get $l5669 + i32.add + local.set $l5670 + local.get $l5669 + local.get $l5670 + i32.add + local.set $l5671 + local.get $l5670 + local.get $l5671 + i32.add + local.set $l5672 + local.get $l5671 + local.get $l5672 + i32.add + local.set $l5673 + local.get $l5672 + local.get $l5673 + i32.add + local.set $l5674 + local.get $l5673 + local.get $l5674 + i32.add + local.set $l5675 + local.get $l5674 + local.get $l5675 + i32.add + local.set $l5676 + local.get $l5675 + local.get $l5676 + i32.add + local.set $l5677 + local.get $l5676 + local.get $l5677 + i32.add + local.set $l5678 + local.get $l5677 + local.get $l5678 + i32.add + local.set $l5679 + local.get $l5678 + local.get $l5679 + i32.add + local.set $l5680 + local.get $l5679 + local.get $l5680 + i32.add + local.set $l5681 + local.get $l5680 + local.get $l5681 + i32.add + local.set $l5682 + local.get $l5681 + local.get $l5682 + i32.add + local.set $l5683 + local.get $l5682 + local.get $l5683 + i32.add + local.set $l5684 + local.get $l5683 + local.get $l5684 + i32.add + local.set $l5685 + local.get $l5684 + local.get $l5685 + i32.add + local.set $l5686 + local.get $l5685 + local.get $l5686 + i32.add + local.set $l5687 + local.get $l5686 + local.get $l5687 + i32.add + local.set $l5688 + local.get $l5687 + local.get $l5688 + i32.add + local.set $l5689 + local.get $l5688 + local.get $l5689 + i32.add + local.set $l5690 + local.get $l5689 + local.get $l5690 + i32.add + local.set $l5691 + local.get $l5690 + local.get $l5691 + i32.add + local.set $l5692 + local.get $l5691 + local.get $l5692 + i32.add + local.set $l5693 + local.get $l5692 + local.get $l5693 + i32.add + local.set $l5694 + local.get $l5693 + local.get $l5694 + i32.add + local.set $l5695 + local.get $l5694 + local.get $l5695 + i32.add + local.set $l5696 + local.get $l5695 + local.get $l5696 + i32.add + local.set $l5697 + local.get $l5696 + local.get $l5697 + i32.add + local.set $l5698 + local.get $l5697 + local.get $l5698 + i32.add + local.set $l5699 + local.get $l5698 + local.get $l5699 + i32.add + local.set $l5700 + local.get $l5699 + local.get $l5700 + i32.add + local.set $l5701 + local.get $l5700 + local.get $l5701 + i32.add + local.set $l5702 + local.get $l5701 + local.get $l5702 + i32.add + local.set $l5703 + local.get $l5702 + local.get $l5703 + i32.add + local.set $l5704 + local.get $l5703 + local.get $l5704 + i32.add + local.set $l5705 + local.get $l5704 + local.get $l5705 + i32.add + local.set $l5706 + local.get $l5705 + local.get $l5706 + i32.add + local.set $l5707 + local.get $l5706 + local.get $l5707 + i32.add + local.set $l5708 + local.get $l5707 + local.get $l5708 + i32.add + local.set $l5709 + local.get $l5708 + local.get $l5709 + i32.add + local.set $l5710 + local.get $l5709 + local.get $l5710 + i32.add + local.set $l5711 + local.get $l5710 + local.get $l5711 + i32.add + local.set $l5712 + local.get $l5711 + local.get $l5712 + i32.add + local.set $l5713 + local.get $l5712 + local.get $l5713 + i32.add + local.set $l5714 + local.get $l5713 + local.get $l5714 + i32.add + local.set $l5715 + local.get $l5714 + local.get $l5715 + i32.add + local.set $l5716 + local.get $l5715 + local.get $l5716 + i32.add + local.set $l5717 + local.get $l5716 + local.get $l5717 + i32.add + local.set $l5718 + local.get $l5717 + local.get $l5718 + i32.add + local.set $l5719 + local.get $l5718 + local.get $l5719 + i32.add + local.set $l5720 + local.get $l5719 + local.get $l5720 + i32.add + local.set $l5721 + local.get $l5720 + local.get $l5721 + i32.add + local.set $l5722 + local.get $l5721 + local.get $l5722 + i32.add + local.set $l5723 + local.get $l5722 + local.get $l5723 + i32.add + local.set $l5724 + local.get $l5723 + local.get $l5724 + i32.add + local.set $l5725 + local.get $l5724 + local.get $l5725 + i32.add + local.set $l5726 + local.get $l5725 + local.get $l5726 + i32.add + local.set $l5727 + local.get $l5726 + local.get $l5727 + i32.add + local.set $l5728 + local.get $l5727 + local.get $l5728 + i32.add + local.set $l5729 + local.get $l5728 + local.get $l5729 + i32.add + local.set $l5730 + local.get $l5729 + local.get $l5730 + i32.add + local.set $l5731 + local.get $l5730 + local.get $l5731 + i32.add + local.set $l5732 + local.get $l5731 + local.get $l5732 + i32.add + local.set $l5733 + local.get $l5732 + local.get $l5733 + i32.add + local.set $l5734 + local.get $l5733 + local.get $l5734 + i32.add + local.set $l5735 + local.get $l5734 + local.get $l5735 + i32.add + local.set $l5736 + local.get $l5735 + local.get $l5736 + i32.add + local.set $l5737 + local.get $l5736 + local.get $l5737 + i32.add + local.set $l5738 + local.get $l5737 + local.get $l5738 + i32.add + local.set $l5739 + local.get $l5738 + local.get $l5739 + i32.add + local.set $l5740 + local.get $l5739 + local.get $l5740 + i32.add + local.set $l5741 + local.get $l5740 + local.get $l5741 + i32.add + local.set $l5742 + local.get $l5741 + local.get $l5742 + i32.add + local.set $l5743 + local.get $l5742 + local.get $l5743 + i32.add + local.set $l5744 + local.get $l5743 + local.get $l5744 + i32.add + local.set $l5745 + local.get $l5744 + local.get $l5745 + i32.add + local.set $l5746 + local.get $l5745 + local.get $l5746 + i32.add + local.set $l5747 + local.get $l5746 + local.get $l5747 + i32.add + local.set $l5748 + local.get $l5747 + local.get $l5748 + i32.add + local.set $l5749 + local.get $l5748 + local.get $l5749 + i32.add + local.set $l5750 + local.get $l5749 + local.get $l5750 + i32.add + local.set $l5751 + local.get $l5750 + local.get $l5751 + i32.add + local.set $l5752 + local.get $l5751 + local.get $l5752 + i32.add + local.set $l5753 + local.get $l5752 + local.get $l5753 + i32.add + local.set $l5754 + local.get $l5753 + local.get $l5754 + i32.add + local.set $l5755 + local.get $l5754 + local.get $l5755 + i32.add + local.set $l5756 + local.get $l5755 + local.get $l5756 + i32.add + local.set $l5757 + local.get $l5756 + local.get $l5757 + i32.add + local.set $l5758 + local.get $l5757 + local.get $l5758 + i32.add + local.set $l5759 + local.get $l5758 + local.get $l5759 + i32.add + local.set $l5760 + local.get $l5759 + local.get $l5760 + i32.add + local.set $l5761 + local.get $l5760 + local.get $l5761 + i32.add + local.set $l5762 + local.get $l5761 + local.get $l5762 + i32.add + local.set $l5763 + local.get $l5762 + local.get $l5763 + i32.add + local.set $l5764 + local.get $l5763 + local.get $l5764 + i32.add + local.set $l5765 + local.get $l5764 + local.get $l5765 + i32.add + local.set $l5766 + local.get $l5765 + local.get $l5766 + i32.add + local.set $l5767 + local.get $l5766 + local.get $l5767 + i32.add + local.set $l5768 + local.get $l5767 + local.get $l5768 + i32.add + local.set $l5769 + local.get $l5768 + local.get $l5769 + i32.add + local.set $l5770 + local.get $l5769 + local.get $l5770 + i32.add + local.set $l5771 + local.get $l5770 + local.get $l5771 + i32.add + local.set $l5772 + local.get $l5771 + local.get $l5772 + i32.add + local.set $l5773 + local.get $l5772 + local.get $l5773 + i32.add + local.set $l5774 + local.get $l5773 + local.get $l5774 + i32.add + local.set $l5775 + local.get $l5774 + local.get $l5775 + i32.add + local.set $l5776 + local.get $l5775 + local.get $l5776 + i32.add + local.set $l5777 + local.get $l5776 + local.get $l5777 + i32.add + local.set $l5778 + local.get $l5777 + local.get $l5778 + i32.add + local.set $l5779 + local.get $l5778 + local.get $l5779 + i32.add + local.set $l5780 + local.get $l5779 + local.get $l5780 + i32.add + local.set $l5781 + local.get $l5780 + local.get $l5781 + i32.add + local.set $l5782 + local.get $l5781 + local.get $l5782 + i32.add + local.set $l5783 + local.get $l5782 + local.get $l5783 + i32.add + local.set $l5784 + local.get $l5783 + local.get $l5784 + i32.add + local.set $l5785 + local.get $l5784 + local.get $l5785 + i32.add + local.set $l5786 + local.get $l5785 + local.get $l5786 + i32.add + local.set $l5787 + local.get $l5786 + local.get $l5787 + i32.add + local.set $l5788 + local.get $l5787 + local.get $l5788 + i32.add + local.set $l5789 + local.get $l5788 + local.get $l5789 + i32.add + local.set $l5790 + local.get $l5789 + local.get $l5790 + i32.add + local.set $l5791 + local.get $l5790 + local.get $l5791 + i32.add + local.set $l5792 + local.get $l5791 + local.get $l5792 + i32.add + local.set $l5793 + local.get $l5792 + local.get $l5793 + i32.add + local.set $l5794 + local.get $l5793 + local.get $l5794 + i32.add + local.set $l5795 + local.get $l5794 + local.get $l5795 + i32.add + local.set $l5796 + local.get $l5795 + local.get $l5796 + i32.add + local.set $l5797 + local.get $l5796 + local.get $l5797 + i32.add + local.set $l5798 + local.get $l5797 + local.get $l5798 + i32.add + local.set $l5799 + local.get $l5798 + local.get $l5799 + i32.add + local.set $l5800 + local.get $l5799 + local.get $l5800 + i32.add + local.set $l5801 + local.get $l5800 + local.get $l5801 + i32.add + local.set $l5802 + local.get $l5801 + local.get $l5802 + i32.add + local.set $l5803 + local.get $l5802 + local.get $l5803 + i32.add + local.set $l5804 + local.get $l5803 + local.get $l5804 + i32.add + local.set $l5805 + local.get $l5804 + local.get $l5805 + i32.add + local.set $l5806 + local.get $l5805 + local.get $l5806 + i32.add + local.set $l5807 + local.get $l5806 + local.get $l5807 + i32.add + local.set $l5808 + local.get $l5807 + local.get $l5808 + i32.add + local.set $l5809 + local.get $l5808 + local.get $l5809 + i32.add + local.set $l5810 + local.get $l5809 + local.get $l5810 + i32.add + local.set $l5811 + local.get $l5810 + local.get $l5811 + i32.add + local.set $l5812 + local.get $l5811 + local.get $l5812 + i32.add + local.set $l5813 + local.get $l5812 + local.get $l5813 + i32.add + local.set $l5814 + local.get $l5813 + local.get $l5814 + i32.add + local.set $l5815 + local.get $l5814 + local.get $l5815 + i32.add + local.set $l5816 + local.get $l5815 + local.get $l5816 + i32.add + local.set $l5817 + local.get $l5816 + local.get $l5817 + i32.add + local.set $l5818 + local.get $l5817 + local.get $l5818 + i32.add + local.set $l5819 + local.get $l5818 + local.get $l5819 + i32.add + local.set $l5820 + local.get $l5819 + local.get $l5820 + i32.add + local.set $l5821 + local.get $l5820 + local.get $l5821 + i32.add + local.set $l5822 + local.get $l5821 + local.get $l5822 + i32.add + local.set $l5823 + local.get $l5822 + local.get $l5823 + i32.add + local.set $l5824 + local.get $l5823 + local.get $l5824 + i32.add + local.set $l5825 + local.get $l5824 + local.get $l5825 + i32.add + local.set $l5826 + local.get $l5825 + local.get $l5826 + i32.add + local.set $l5827 + local.get $l5826 + local.get $l5827 + i32.add + local.set $l5828 + local.get $l5827 + local.get $l5828 + i32.add + local.set $l5829 + local.get $l5828 + local.get $l5829 + i32.add + local.set $l5830 + local.get $l5829 + local.get $l5830 + i32.add + local.set $l5831 + local.get $l5830 + local.get $l5831 + i32.add + local.set $l5832 + local.get $l5831 + local.get $l5832 + i32.add + local.set $l5833 + local.get $l5832 + local.get $l5833 + i32.add + local.set $l5834 + local.get $l5833 + local.get $l5834 + i32.add + local.set $l5835 + local.get $l5834 + local.get $l5835 + i32.add + local.set $l5836 + local.get $l5835 + local.get $l5836 + i32.add + local.set $l5837 + local.get $l5836 + local.get $l5837 + i32.add + local.set $l5838 + local.get $l5837 + local.get $l5838 + i32.add + local.set $l5839 + local.get $l5838 + local.get $l5839 + i32.add + local.set $l5840 + local.get $l5839 + local.get $l5840 + i32.add + local.set $l5841 + local.get $l5840 + local.get $l5841 + i32.add + local.set $l5842 + local.get $l5841 + local.get $l5842 + i32.add + local.set $l5843 + local.get $l5842 + local.get $l5843 + i32.add + local.set $l5844 + local.get $l5843 + local.get $l5844 + i32.add + local.set $l5845 + local.get $l5844 + local.get $l5845 + i32.add + local.set $l5846 + local.get $l5845 + local.get $l5846 + i32.add + local.set $l5847 + local.get $l5846 + local.get $l5847 + i32.add + local.set $l5848 + local.get $l5847 + local.get $l5848 + i32.add + local.set $l5849 + local.get $l5848 + local.get $l5849 + i32.add + local.set $l5850 + local.get $l5849 + local.get $l5850 + i32.add + local.set $l5851 + local.get $l5850 + local.get $l5851 + i32.add + local.set $l5852 + local.get $l5851 + local.get $l5852 + i32.add + local.set $l5853 + local.get $l5852 + local.get $l5853 + i32.add + local.set $l5854 + local.get $l5853 + local.get $l5854 + i32.add + local.set $l5855 + local.get $l5854 + local.get $l5855 + i32.add + local.set $l5856 + local.get $l5855 + local.get $l5856 + i32.add + local.set $l5857 + local.get $l5856 + local.get $l5857 + i32.add + local.set $l5858 + local.get $l5857 + local.get $l5858 + i32.add + local.set $l5859 + local.get $l5858 + local.get $l5859 + i32.add + local.set $l5860 + local.get $l5859 + local.get $l5860 + i32.add + local.set $l5861 + local.get $l5860 + local.get $l5861 + i32.add + local.set $l5862 + local.get $l5861 + local.get $l5862 + i32.add + local.set $l5863 + local.get $l5862 + local.get $l5863 + i32.add + local.set $l5864 + local.get $l5863 + local.get $l5864 + i32.add + local.set $l5865 + local.get $l5864 + local.get $l5865 + i32.add + local.set $l5866 + local.get $l5865 + local.get $l5866 + i32.add + local.set $l5867 + local.get $l5866 + local.get $l5867 + i32.add + local.set $l5868 + local.get $l5867 + local.get $l5868 + i32.add + local.set $l5869 + local.get $l5868 + local.get $l5869 + i32.add + local.set $l5870 + local.get $l5869 + local.get $l5870 + i32.add + local.set $l5871 + local.get $l5870 + local.get $l5871 + i32.add + local.set $l5872 + local.get $l5871 + local.get $l5872 + i32.add + local.set $l5873 + local.get $l5872 + local.get $l5873 + i32.add + local.set $l5874 + local.get $l5873 + local.get $l5874 + i32.add + local.set $l5875 + local.get $l5874 + local.get $l5875 + i32.add + local.set $l5876 + local.get $l5875 + local.get $l5876 + i32.add + local.set $l5877 + local.get $l5876 + local.get $l5877 + i32.add + local.set $l5878 + local.get $l5877 + local.get $l5878 + i32.add + local.set $l5879 + local.get $l5878 + local.get $l5879 + i32.add + local.set $l5880 + local.get $l5879 + local.get $l5880 + i32.add + local.set $l5881 + local.get $l5880 + local.get $l5881 + i32.add + local.set $l5882 + local.get $l5881 + local.get $l5882 + i32.add + local.set $l5883 + local.get $l5882 + local.get $l5883 + i32.add + local.set $l5884 + local.get $l5883 + local.get $l5884 + i32.add + local.set $l5885 + local.get $l5884 + local.get $l5885 + i32.add + local.set $l5886 + local.get $l5885 + local.get $l5886 + i32.add + local.set $l5887 + local.get $l5886 + local.get $l5887 + i32.add + local.set $l5888 + local.get $l5887 + local.get $l5888 + i32.add + local.set $l5889 + local.get $l5888 + local.get $l5889 + i32.add + local.set $l5890 + local.get $l5889 + local.get $l5890 + i32.add + local.set $l5891 + local.get $l5890 + local.get $l5891 + i32.add + local.set $l5892 + local.get $l5891 + local.get $l5892 + i32.add + local.set $l5893 + local.get $l5892 + local.get $l5893 + i32.add + local.set $l5894 + local.get $l5893 + local.get $l5894 + i32.add + local.set $l5895 + local.get $l5894 + local.get $l5895 + i32.add + local.set $l5896 + local.get $l5895 + local.get $l5896 + i32.add + local.set $l5897 + local.get $l5896 + local.get $l5897 + i32.add + local.set $l5898 + local.get $l5897 + local.get $l5898 + i32.add + local.set $l5899 + local.get $l5898 + local.get $l5899 + i32.add + local.set $l5900 + local.get $l5899 + local.get $l5900 + i32.add + local.set $l5901 + local.get $l5900 + local.get $l5901 + i32.add + local.set $l5902 + local.get $l5901 + local.get $l5902 + i32.add + local.set $l5903 + local.get $l5902 + local.get $l5903 + i32.add + local.set $l5904 + local.get $l5903 + local.get $l5904 + i32.add + local.set $l5905 + local.get $l5904 + local.get $l5905 + i32.add + local.set $l5906 + local.get $l5905 + local.get $l5906 + i32.add + local.set $l5907 + local.get $l5906 + local.get $l5907 + i32.add + local.set $l5908 + local.get $l5907 + local.get $l5908 + i32.add + local.set $l5909 + local.get $l5908 + local.get $l5909 + i32.add + local.set $l5910 + local.get $l5909 + local.get $l5910 + i32.add + local.set $l5911 + local.get $l5910 + local.get $l5911 + i32.add + local.set $l5912 + local.get $l5911 + local.get $l5912 + i32.add + local.set $l5913 + local.get $l5912 + local.get $l5913 + i32.add + local.set $l5914 + local.get $l5913 + local.get $l5914 + i32.add + local.set $l5915 + local.get $l5914 + local.get $l5915 + i32.add + local.set $l5916 + local.get $l5915 + local.get $l5916 + i32.add + local.set $l5917 + local.get $l5916 + local.get $l5917 + i32.add + local.set $l5918 + local.get $l5917 + local.get $l5918 + i32.add + local.set $l5919 + local.get $l5918 + local.get $l5919 + i32.add + local.set $l5920 + local.get $l5919 + local.get $l5920 + i32.add + local.set $l5921 + local.get $l5920 + local.get $l5921 + i32.add + local.set $l5922 + local.get $l5921 + local.get $l5922 + i32.add + local.set $l5923 + local.get $l5922 + local.get $l5923 + i32.add + local.set $l5924 + local.get $l5923 + local.get $l5924 + i32.add + local.set $l5925 + local.get $l5924 + local.get $l5925 + i32.add + local.set $l5926 + local.get $l5925 + local.get $l5926 + i32.add + local.set $l5927 + local.get $l5926 + local.get $l5927 + i32.add + local.set $l5928 + local.get $l5927 + local.get $l5928 + i32.add + local.set $l5929 + local.get $l5928 + local.get $l5929 + i32.add + local.set $l5930 + local.get $l5929 + local.get $l5930 + i32.add + local.set $l5931 + local.get $l5930 + local.get $l5931 + i32.add + local.set $l5932 + local.get $l5931 + local.get $l5932 + i32.add + local.set $l5933 + local.get $l5932 + local.get $l5933 + i32.add + local.set $l5934 + local.get $l5933 + local.get $l5934 + i32.add + local.set $l5935 + local.get $l5934 + local.get $l5935 + i32.add + local.set $l5936 + local.get $l5935 + local.get $l5936 + i32.add + local.set $l5937 + local.get $l5936 + local.get $l5937 + i32.add + local.set $l5938 + local.get $l5937 + local.get $l5938 + i32.add + local.set $l5939 + local.get $l5938 + local.get $l5939 + i32.add + local.set $l5940 + local.get $l5939 + local.get $l5940 + i32.add + local.set $l5941 + local.get $l5940 + local.get $l5941 + i32.add + local.set $l5942 + local.get $l5941 + local.get $l5942 + i32.add + local.set $l5943 + local.get $l5942 + local.get $l5943 + i32.add + local.set $l5944 + local.get $l5943 + local.get $l5944 + i32.add + local.set $l5945 + local.get $l5944 + local.get $l5945 + i32.add + local.set $l5946 + local.get $l5945 + local.get $l5946 + i32.add + local.set $l5947 + local.get $l5946 + local.get $l5947 + i32.add + local.set $l5948 + local.get $l5947 + local.get $l5948 + i32.add + local.set $l5949 + local.get $l5948 + local.get $l5949 + i32.add + local.set $l5950 + local.get $l5949 + local.get $l5950 + i32.add + local.set $l5951 + local.get $l5950 + local.get $l5951 + i32.add + local.set $l5952 + local.get $l5951 + local.get $l5952 + i32.add + local.set $l5953 + local.get $l5952 + local.get $l5953 + i32.add + local.set $l5954 + local.get $l5953 + local.get $l5954 + i32.add + local.set $l5955 + local.get $l5954 + local.get $l5955 + i32.add + local.set $l5956 + local.get $l5955 + local.get $l5956 + i32.add + local.set $l5957 + local.get $l5956 + local.get $l5957 + i32.add + local.set $l5958 + local.get $l5957 + local.get $l5958 + i32.add + local.set $l5959 + local.get $l5958 + local.get $l5959 + i32.add + local.set $l5960 + local.get $l5959 + local.get $l5960 + i32.add + local.set $l5961 + local.get $l5960 + local.get $l5961 + i32.add + local.set $l5962 + local.get $l5961 + local.get $l5962 + i32.add + local.set $l5963 + local.get $l5962 + local.get $l5963 + i32.add + local.set $l5964 + local.get $l5963 + local.get $l5964 + i32.add + local.set $l5965 + local.get $l5964 + local.get $l5965 + i32.add + local.set $l5966 + local.get $l5965 + local.get $l5966 + i32.add + local.set $l5967 + local.get $l5966 + local.get $l5967 + i32.add + local.set $l5968 + local.get $l5967 + local.get $l5968 + i32.add + local.set $l5969 + local.get $l5968 + local.get $l5969 + i32.add + local.set $l5970 + local.get $l5969 + local.get $l5970 + i32.add + local.set $l5971 + local.get $l5970 + local.get $l5971 + i32.add + local.set $l5972 + local.get $l5971 + local.get $l5972 + i32.add + local.set $l5973 + local.get $l5972 + local.get $l5973 + i32.add + local.set $l5974 + local.get $l5973 + local.get $l5974 + i32.add + local.set $l5975 + local.get $l5974 + local.get $l5975 + i32.add + local.set $l5976 + local.get $l5975 + local.get $l5976 + i32.add + local.set $l5977 + local.get $l5976 + local.get $l5977 + i32.add + local.set $l5978 + local.get $l5977 + local.get $l5978 + i32.add + local.set $l5979 + local.get $l5978 + local.get $l5979 + i32.add + local.set $l5980 + local.get $l5979 + local.get $l5980 + i32.add + local.set $l5981 + local.get $l5980 + local.get $l5981 + i32.add + local.set $l5982 + local.get $l5981 + local.get $l5982 + i32.add + local.set $l5983 + local.get $l5982 + local.get $l5983 + i32.add + local.set $l5984 + local.get $l5983 + local.get $l5984 + i32.add + local.set $l5985 + local.get $l5984 + local.get $l5985 + i32.add + local.set $l5986 + local.get $l5985 + local.get $l5986 + i32.add + local.set $l5987 + local.get $l5986 + local.get $l5987 + i32.add + local.set $l5988 + local.get $l5987 + local.get $l5988 + i32.add + local.set $l5989 + local.get $l5988 + local.get $l5989 + i32.add + local.set $l5990 + local.get $l5989 + local.get $l5990 + i32.add + local.set $l5991 + local.get $l5990 + local.get $l5991 + i32.add + local.set $l5992 + local.get $l5991 + local.get $l5992 + i32.add + local.set $l5993 + local.get $l5992 + local.get $l5993 + i32.add + local.set $l5994 + local.get $l5993 + local.get $l5994 + i32.add + local.set $l5995 + local.get $l5994 + local.get $l5995 + i32.add + local.set $l5996 + local.get $l5995 + local.get $l5996 + i32.add + local.set $l5997 + local.get $l5996 + local.get $l5997 + i32.add + local.set $l5998 + local.get $l5997 + local.get $l5998 + i32.add + local.set $l5999 + local.get $l5998 + local.get $l5999 + i32.add + local.set $l6000 + local.get $l5999 + local.get $l6000 + i32.add + local.set $l6001 + local.get $l6000 + local.get $l6001 + i32.add + local.set $l6002 + local.get $l6001 + local.get $l6002 + i32.add + local.set $l6003 + local.get $l6002 + local.get $l6003 + i32.add + local.set $l6004 + local.get $l6003 + local.get $l6004 + i32.add + local.set $l6005 + local.get $l6004 + local.get $l6005 + i32.add + local.set $l6006 + local.get $l6005 + local.get $l6006 + i32.add + local.set $l6007 + local.get $l6006 + local.get $l6007 + i32.add + local.set $l6008 + local.get $l6007 + local.get $l6008 + i32.add + local.set $l6009 + local.get $l6008 + local.get $l6009 + i32.add + local.set $l6010 + local.get $l6009 + local.get $l6010 + i32.add + local.set $l6011 + local.get $l6010 + local.get $l6011 + i32.add + local.set $l6012 + local.get $l6011 + local.get $l6012 + i32.add + local.set $l6013 + local.get $l6012 + local.get $l6013 + i32.add + local.set $l6014 + local.get $l6013 + local.get $l6014 + i32.add + local.set $l6015 + local.get $l6014 + local.get $l6015 + i32.add + local.set $l6016 + local.get $l6015 + local.get $l6016 + i32.add + local.set $l6017 + local.get $l6016 + local.get $l6017 + i32.add + local.set $l6018 + local.get $l6017 + local.get $l6018 + i32.add + local.set $l6019 + local.get $l6018 + local.get $l6019 + i32.add + local.set $l6020 + local.get $l6019 + local.get $l6020 + i32.add + local.set $l6021 + local.get $l6020 + local.get $l6021 + i32.add + local.set $l6022 + local.get $l6021 + local.get $l6022 + i32.add + local.set $l6023 + local.get $l6022 + local.get $l6023 + i32.add + local.set $l6024 + local.get $l6023 + local.get $l6024 + i32.add + local.set $l6025 + local.get $l6024 + local.get $l6025 + i32.add + local.set $l6026 + local.get $l6025 + local.get $l6026 + i32.add + local.set $l6027 + local.get $l6026 + local.get $l6027 + i32.add + local.set $l6028 + local.get $l6027 + local.get $l6028 + i32.add + local.set $l6029 + local.get $l6028 + local.get $l6029 + i32.add + local.set $l6030 + local.get $l6029 + local.get $l6030 + i32.add + local.set $l6031 + local.get $l6030 + local.get $l6031 + i32.add + local.set $l6032 + local.get $l6031 + local.get $l6032 + i32.add + local.set $l6033 + local.get $l6032 + local.get $l6033 + i32.add + local.set $l6034 + local.get $l6033 + local.get $l6034 + i32.add + local.set $l6035 + local.get $l6034 + local.get $l6035 + i32.add + local.set $l6036 + local.get $l6035 + local.get $l6036 + i32.add + local.set $l6037 + local.get $l6036 + local.get $l6037 + i32.add + local.set $l6038 + local.get $l6037 + local.get $l6038 + i32.add + local.set $l6039 + local.get $l6038 + local.get $l6039 + i32.add + local.set $l6040 + local.get $l6039 + local.get $l6040 + i32.add + local.set $l6041 + local.get $l6040 + local.get $l6041 + i32.add + local.set $l6042 + local.get $l6041 + local.get $l6042 + i32.add + local.set $l6043 + local.get $l6042 + local.get $l6043 + i32.add + local.set $l6044 + local.get $l6043 + local.get $l6044 + i32.add + local.set $l6045 + local.get $l6044 + local.get $l6045 + i32.add + local.set $l6046 + local.get $l6045 + local.get $l6046 + i32.add + local.set $l6047 + local.get $l6046 + local.get $l6047 + i32.add + local.set $l6048 + local.get $l6047 + local.get $l6048 + i32.add + local.set $l6049 + local.get $l6048 + local.get $l6049 + i32.add + local.set $l6050 + local.get $l6049 + local.get $l6050 + i32.add + local.set $l6051 + local.get $l6050 + local.get $l6051 + i32.add + local.set $l6052 + local.get $l6051 + local.get $l6052 + i32.add + local.set $l6053 + local.get $l6052 + local.get $l6053 + i32.add + local.set $l6054 + local.get $l6053 + local.get $l6054 + i32.add + local.set $l6055 + local.get $l6054 + local.get $l6055 + i32.add + local.set $l6056 + local.get $l6055 + local.get $l6056 + i32.add + local.set $l6057 + local.get $l6056 + local.get $l6057 + i32.add + local.set $l6058 + local.get $l6057 + local.get $l6058 + i32.add + local.set $l6059 + local.get $l6058 + local.get $l6059 + i32.add + local.set $l6060 + local.get $l6059 + local.get $l6060 + i32.add + local.set $l6061 + local.get $l6060 + local.get $l6061 + i32.add + local.set $l6062 + local.get $l6061 + local.get $l6062 + i32.add + local.set $l6063 + local.get $l6062 + local.get $l6063 + i32.add + local.set $l6064 + local.get $l6063 + local.get $l6064 + i32.add + local.set $l6065 + local.get $l6064 + local.get $l6065 + i32.add + local.set $l6066 + local.get $l6065 + local.get $l6066 + i32.add + local.set $l6067 + local.get $l6066 + local.get $l6067 + i32.add + local.set $l6068 + local.get $l6067 + local.get $l6068 + i32.add + local.set $l6069 + local.get $l6068 + local.get $l6069 + i32.add + local.set $l6070 + local.get $l6069 + local.get $l6070 + i32.add + local.set $l6071 + local.get $l6070 + local.get $l6071 + i32.add + local.set $l6072 + local.get $l6071 + local.get $l6072 + i32.add + local.set $l6073 + local.get $l6072 + local.get $l6073 + i32.add + local.set $l6074 + local.get $l6073 + local.get $l6074 + i32.add + local.set $l6075 + local.get $l6074 + local.get $l6075 + i32.add + local.set $l6076 + local.get $l6075 + local.get $l6076 + i32.add + local.set $l6077 + local.get $l6076 + local.get $l6077 + i32.add + local.set $l6078 + local.get $l6077 + local.get $l6078 + i32.add + local.set $l6079 + local.get $l6078 + local.get $l6079 + i32.add + local.set $l6080 + local.get $l6079 + local.get $l6080 + i32.add + local.set $l6081 + local.get $l6080 + local.get $l6081 + i32.add + local.set $l6082 + local.get $l6081 + local.get $l6082 + i32.add + local.set $l6083 + local.get $l6082 + local.get $l6083 + i32.add + local.set $l6084 + local.get $l6083 + local.get $l6084 + i32.add + local.set $l6085 + local.get $l6084 + local.get $l6085 + i32.add + local.set $l6086 + local.get $l6085 + local.get $l6086 + i32.add + local.set $l6087 + local.get $l6086 + local.get $l6087 + i32.add + local.set $l6088 + local.get $l6087 + local.get $l6088 + i32.add + local.set $l6089 + local.get $l6088 + local.get $l6089 + i32.add + local.set $l6090 + local.get $l6089 + local.get $l6090 + i32.add + local.set $l6091 + local.get $l6090 + local.get $l6091 + i32.add + local.set $l6092 + local.get $l6091 + local.get $l6092 + i32.add + local.set $l6093 + local.get $l6092 + local.get $l6093 + i32.add + local.set $l6094 + local.get $l6093 + local.get $l6094 + i32.add + local.set $l6095 + local.get $l6094 + local.get $l6095 + i32.add + local.set $l6096 + local.get $l6095 + local.get $l6096 + i32.add + local.set $l6097 + local.get $l6096 + local.get $l6097 + i32.add + local.set $l6098 + local.get $l6097 + local.get $l6098 + i32.add + local.set $l6099 + local.get $l6098 + local.get $l6099 + i32.add + local.set $l6100 + local.get $l6099 + local.get $l6100 + i32.add + local.set $l6101 + local.get $l6100 + local.get $l6101 + i32.add + local.set $l6102 + local.get $l6101 + local.get $l6102 + i32.add + local.set $l6103 + local.get $l6102 + local.get $l6103 + i32.add + local.set $l6104 + local.get $l6103 + local.get $l6104 + i32.add + local.set $l6105 + local.get $l6104 + local.get $l6105 + i32.add + local.set $l6106 + local.get $l6105 + local.get $l6106 + i32.add + local.set $l6107 + local.get $l6106 + local.get $l6107 + i32.add + local.set $l6108 + local.get $l6107 + local.get $l6108 + i32.add + local.set $l6109 + local.get $l6108 + local.get $l6109 + i32.add + local.set $l6110 + local.get $l6109 + local.get $l6110 + i32.add + local.set $l6111 + local.get $l6110 + local.get $l6111 + i32.add + local.set $l6112 + local.get $l6111 + local.get $l6112 + i32.add + local.set $l6113 + local.get $l6112 + local.get $l6113 + i32.add + local.set $l6114 + local.get $l6113 + local.get $l6114 + i32.add + local.set $l6115 + local.get $l6114 + local.get $l6115 + i32.add + local.set $l6116 + local.get $l6115 + local.get $l6116 + i32.add + local.set $l6117 + local.get $l6116 + local.get $l6117 + i32.add + local.set $l6118 + local.get $l6117 + local.get $l6118 + i32.add + local.set $l6119 + local.get $l6118 + local.get $l6119 + i32.add + local.set $l6120 + local.get $l6119 + local.get $l6120 + i32.add + local.set $l6121 + local.get $l6120 + local.get $l6121 + i32.add + local.set $l6122 + local.get $l6121 + local.get $l6122 + i32.add + local.set $l6123 + local.get $l6122 + local.get $l6123 + i32.add + local.set $l6124 + local.get $l6123 + local.get $l6124 + i32.add + local.set $l6125 + local.get $l6124 + local.get $l6125 + i32.add + local.set $l6126 + local.get $l6125 + local.get $l6126 + i32.add + local.set $l6127 + local.get $l6126 + local.get $l6127 + i32.add + local.set $l6128 + local.get $l6127 + local.get $l6128 + i32.add + local.set $l6129 + local.get $l6128 + local.get $l6129 + i32.add + local.set $l6130 + local.get $l6129 + local.get $l6130 + i32.add + local.set $l6131 + local.get $l6130 + local.get $l6131 + i32.add + local.set $l6132 + local.get $l6131 + local.get $l6132 + i32.add + local.set $l6133 + local.get $l6132 + local.get $l6133 + i32.add + local.set $l6134 + local.get $l6133 + local.get $l6134 + i32.add + local.set $l6135 + local.get $l6134 + local.get $l6135 + i32.add + local.set $l6136 + local.get $l6135 + local.get $l6136 + i32.add + local.set $l6137 + local.get $l6136 + local.get $l6137 + i32.add + local.set $l6138 + local.get $l6137 + local.get $l6138 + i32.add + local.set $l6139 + local.get $l6138 + local.get $l6139 + i32.add + local.set $l6140 + local.get $l6139 + local.get $l6140 + i32.add + local.set $l6141 + local.get $l6140 + local.get $l6141 + i32.add + local.set $l6142 + local.get $l6141 + local.get $l6142 + i32.add + local.set $l6143 + local.get $l6142 + local.get $l6143 + i32.add + local.set $l6144 + local.get $l6143 + local.get $l6144 + i32.add + local.set $l6145 + local.get $l6144 + local.get $l6145 + i32.add + local.set $l6146 + local.get $l6145 + local.get $l6146 + i32.add + local.set $l6147 + local.get $l6146 + local.get $l6147 + i32.add + local.set $l6148 + local.get $l6147 + local.get $l6148 + i32.add + local.set $l6149 + local.get $l6148 + local.get $l6149 + i32.add + local.set $l6150 + local.get $l6149 + local.get $l6150 + i32.add + local.set $l6151 + local.get $l6150 + local.get $l6151 + i32.add + local.set $l6152 + local.get $l6151 + local.get $l6152 + i32.add + local.set $l6153 + local.get $l6152 + local.get $l6153 + i32.add + local.set $l6154 + local.get $l6153 + local.get $l6154 + i32.add + local.set $l6155 + local.get $l6154 + local.get $l6155 + i32.add + local.set $l6156 + local.get $l6155 + local.get $l6156 + i32.add + local.set $l6157 + local.get $l6156 + local.get $l6157 + i32.add + local.set $l6158 + local.get $l6157 + local.get $l6158 + i32.add + local.set $l6159 + local.get $l6158 + local.get $l6159 + i32.add + local.set $l6160 + local.get $l6159 + local.get $l6160 + i32.add + local.set $l6161 + local.get $l6160 + local.get $l6161 + i32.add + local.set $l6162 + local.get $l6161 + local.get $l6162 + i32.add + local.set $l6163 + local.get $l6162 + local.get $l6163 + i32.add + local.set $l6164 + local.get $l6163 + local.get $l6164 + i32.add + local.set $l6165 + local.get $l6164 + local.get $l6165 + i32.add + local.set $l6166 + local.get $l6165 + local.get $l6166 + i32.add + local.set $l6167 + local.get $l6166 + local.get $l6167 + i32.add + local.set $l6168 + local.get $l6167 + local.get $l6168 + i32.add + local.set $l6169 + local.get $l6168 + local.get $l6169 + i32.add + local.set $l6170 + local.get $l6169 + local.get $l6170 + i32.add + local.set $l6171 + local.get $l6170 + local.get $l6171 + i32.add + local.set $l6172 + local.get $l6171 + local.get $l6172 + i32.add + local.set $l6173 + local.get $l6172 + local.get $l6173 + i32.add + local.set $l6174 + local.get $l6173 + local.get $l6174 + i32.add + local.set $l6175 + local.get $l6174 + local.get $l6175 + i32.add + local.set $l6176 + local.get $l6175 + local.get $l6176 + i32.add + local.set $l6177 + local.get $l6176 + local.get $l6177 + i32.add + local.set $l6178 + local.get $l6177 + local.get $l6178 + i32.add + local.set $l6179 + local.get $l6178 + local.get $l6179 + i32.add + local.set $l6180 + local.get $l6179 + local.get $l6180 + i32.add + local.set $l6181 + local.get $l6180 + local.get $l6181 + i32.add + local.set $l6182 + local.get $l6181 + local.get $l6182 + i32.add + local.set $l6183 + local.get $l6182 + local.get $l6183 + i32.add + local.set $l6184 + local.get $l6183 + local.get $l6184 + i32.add + local.set $l6185 + local.get $l6184 + local.get $l6185 + i32.add + local.set $l6186 + local.get $l6185 + local.get $l6186 + i32.add + local.set $l6187 + local.get $l6186 + local.get $l6187 + i32.add + local.set $l6188 + local.get $l6187 + local.get $l6188 + i32.add + local.set $l6189 + local.get $l6188 + local.get $l6189 + i32.add + local.set $l6190 + local.get $l6189 + local.get $l6190 + i32.add + local.set $l6191 + local.get $l6190 + local.get $l6191 + i32.add + local.set $l6192 + local.get $l6191 + local.get $l6192 + i32.add + local.set $l6193 + local.get $l6192 + local.get $l6193 + i32.add + local.set $l6194 + local.get $l6193 + local.get $l6194 + i32.add + local.set $l6195 + local.get $l6194 + local.get $l6195 + i32.add + local.set $l6196 + local.get $l6195 + local.get $l6196 + i32.add + local.set $l6197 + local.get $l6196 + local.get $l6197 + i32.add + local.set $l6198 + local.get $l6197 + local.get $l6198 + i32.add + local.set $l6199 + local.get $l6198 + local.get $l6199 + i32.add + local.set $l6200 + local.get $l6199 + local.get $l6200 + i32.add + local.set $l6201 + local.get $l6200 + local.get $l6201 + i32.add + local.set $l6202 + local.get $l6201 + local.get $l6202 + i32.add + local.set $l6203 + local.get $l6202 + local.get $l6203 + i32.add + local.set $l6204 + local.get $l6203 + local.get $l6204 + i32.add + local.set $l6205 + local.get $l6204 + local.get $l6205 + i32.add + local.set $l6206 + local.get $l6205 + local.get $l6206 + i32.add + local.set $l6207 + local.get $l6206 + local.get $l6207 + i32.add + local.set $l6208 + local.get $l6207 + local.get $l6208 + i32.add + local.set $l6209 + local.get $l6208 + local.get $l6209 + i32.add + local.set $l6210 + local.get $l6209 + local.get $l6210 + i32.add + local.set $l6211 + local.get $l6210 + local.get $l6211 + i32.add + local.set $l6212 + local.get $l6211 + local.get $l6212 + i32.add + local.set $l6213 + local.get $l6212 + local.get $l6213 + i32.add + local.set $l6214 + local.get $l6213 + local.get $l6214 + i32.add + local.set $l6215 + local.get $l6214 + local.get $l6215 + i32.add + local.set $l6216 + local.get $l6215 + local.get $l6216 + i32.add + local.set $l6217 + local.get $l6216 + local.get $l6217 + i32.add + local.set $l6218 + local.get $l6217 + local.get $l6218 + i32.add + local.set $l6219 + local.get $l6218 + local.get $l6219 + i32.add + local.set $l6220 + local.get $l6219 + local.get $l6220 + i32.add + local.set $l6221 + local.get $l6220 + local.get $l6221 + i32.add + local.set $l6222 + local.get $l6221 + local.get $l6222 + i32.add + local.set $l6223 + local.get $l6222 + local.get $l6223 + i32.add + local.set $l6224 + local.get $l6223 + local.get $l6224 + i32.add + local.set $l6225 + local.get $l6224 + local.get $l6225 + i32.add + local.set $l6226 + local.get $l6225 + local.get $l6226 + i32.add + local.set $l6227 + local.get $l6226 + local.get $l6227 + i32.add + local.set $l6228 + local.get $l6227 + local.get $l6228 + i32.add + local.set $l6229 + local.get $l6228 + local.get $l6229 + i32.add + local.set $l6230 + local.get $l6229 + local.get $l6230 + i32.add + local.set $l6231 + local.get $l6230 + local.get $l6231 + i32.add + local.set $l6232 + local.get $l6231 + local.get $l6232 + i32.add + local.set $l6233 + local.get $l6232 + local.get $l6233 + i32.add + local.set $l6234 + local.get $l6233 + local.get $l6234 + i32.add + local.set $l6235 + local.get $l6234 + local.get $l6235 + i32.add + local.set $l6236 + local.get $l6235 + local.get $l6236 + i32.add + local.set $l6237 + local.get $l6236 + local.get $l6237 + i32.add + local.set $l6238 + local.get $l6237 + local.get $l6238 + i32.add + local.set $l6239 + local.get $l6238 + local.get $l6239 + i32.add + local.set $l6240 + local.get $l6239 + local.get $l6240 + i32.add + local.set $l6241 + local.get $l6240 + local.get $l6241 + i32.add + local.set $l6242 + local.get $l6241 + local.get $l6242 + i32.add + local.set $l6243 + local.get $l6242 + local.get $l6243 + i32.add + local.set $l6244 + local.get $l6243 + local.get $l6244 + i32.add + local.set $l6245 + local.get $l6244 + local.get $l6245 + i32.add + local.set $l6246 + local.get $l6245 + local.get $l6246 + i32.add + local.set $l6247 + local.get $l6246 + local.get $l6247 + i32.add + local.set $l6248 + local.get $l6247 + local.get $l6248 + i32.add + local.set $l6249 + local.get $l6248 + local.get $l6249 + i32.add + local.set $l6250 + local.get $l6249 + local.get $l6250 + i32.add + local.set $l6251 + local.get $l6250 + local.get $l6251 + i32.add + local.set $l6252 + local.get $l6251 + local.get $l6252 + i32.add + local.set $l6253 + local.get $l6252 + local.get $l6253 + i32.add + local.set $l6254 + local.get $l6253 + local.get $l6254 + i32.add + local.set $l6255 + local.get $l6254 + local.get $l6255 + i32.add + local.set $l6256 + local.get $l6255 + local.get $l6256 + i32.add + local.set $l6257 + local.get $l6256 + local.get $l6257 + i32.add + local.set $l6258 + local.get $l6257 + local.get $l6258 + i32.add + local.set $l6259 + local.get $l6258 + local.get $l6259 + i32.add + local.set $l6260 + local.get $l6259 + local.get $l6260 + i32.add + local.set $l6261 + local.get $l6260 + local.get $l6261 + i32.add + local.set $l6262 + local.get $l6261 + local.get $l6262 + i32.add + local.set $l6263 + local.get $l6262 + local.get $l6263 + i32.add + local.set $l6264 + local.get $l6263 + local.get $l6264 + i32.add + local.set $l6265 + local.get $l6264 + local.get $l6265 + i32.add + local.set $l6266 + local.get $l6265 + local.get $l6266 + i32.add + local.set $l6267 + local.get $l6266 + local.get $l6267 + i32.add + local.set $l6268 + local.get $l6267 + local.get $l6268 + i32.add + local.set $l6269 + local.get $l6268 + local.get $l6269 + i32.add + local.set $l6270 + local.get $l6269 + local.get $l6270 + i32.add + local.set $l6271 + local.get $l6270 + local.get $l6271 + i32.add + local.set $l6272 + local.get $l6271 + local.get $l6272 + i32.add + local.set $l6273 + local.get $l6272 + local.get $l6273 + i32.add + local.set $l6274 + local.get $l6273 + local.get $l6274 + i32.add + local.set $l6275 + local.get $l6274 + local.get $l6275 + i32.add + local.set $l6276 + local.get $l6275 + local.get $l6276 + i32.add + local.set $l6277 + local.get $l6276 + local.get $l6277 + i32.add + local.set $l6278 + local.get $l6277 + local.get $l6278 + i32.add + local.set $l6279 + local.get $l6278 + local.get $l6279 + i32.add + local.set $l6280 + local.get $l6279 + local.get $l6280 + i32.add + local.set $l6281 + local.get $l6280 + local.get $l6281 + i32.add + local.set $l6282 + local.get $l6281 + local.get $l6282 + i32.add + local.set $l6283 + local.get $l6282 + local.get $l6283 + i32.add + local.set $l6284 + local.get $l6283 + local.get $l6284 + i32.add + local.set $l6285 + local.get $l6284 + local.get $l6285 + i32.add + local.set $l6286 + local.get $l6285 + local.get $l6286 + i32.add + local.set $l6287 + local.get $l6286 + local.get $l6287 + i32.add + local.set $l6288 + local.get $l6287 + local.get $l6288 + i32.add + local.set $l6289 + local.get $l6288 + local.get $l6289 + i32.add + local.set $l6290 + local.get $l6289 + local.get $l6290 + i32.add + local.set $l6291 + local.get $l6290 + local.get $l6291 + i32.add + local.set $l6292 + local.get $l6291 + local.get $l6292 + i32.add + local.set $l6293 + local.get $l6292 + local.get $l6293 + i32.add + local.set $l6294 + local.get $l6293 + local.get $l6294 + i32.add + local.set $l6295 + local.get $l6294 + local.get $l6295 + i32.add + local.set $l6296 + local.get $l6295 + local.get $l6296 + i32.add + local.set $l6297 + local.get $l6296 + local.get $l6297 + i32.add + local.set $l6298 + local.get $l6297 + local.get $l6298 + i32.add + local.set $l6299 + local.get $l6298 + local.get $l6299 + i32.add + local.set $l6300 + local.get $l6299 + local.get $l6300 + i32.add + local.set $l6301 + local.get $l6300 + local.get $l6301 + i32.add + local.set $l6302 + local.get $l6301 + local.get $l6302 + i32.add + local.set $l6303 + local.get $l6302 + local.get $l6303 + i32.add + local.set $l6304 + local.get $l6303 + local.get $l6304 + i32.add + local.set $l6305 + local.get $l6304 + local.get $l6305 + i32.add + local.set $l6306 + local.get $l6305 + local.get $l6306 + i32.add + local.set $l6307 + local.get $l6306 + local.get $l6307 + i32.add + local.set $l6308 + local.get $l6307 + local.get $l6308 + i32.add + local.set $l6309 + local.get $l6308 + local.get $l6309 + i32.add + local.set $l6310 + local.get $l6309 + local.get $l6310 + i32.add + local.set $l6311 + local.get $l6310 + local.get $l6311 + i32.add + local.set $l6312 + local.get $l6311 + local.get $l6312 + i32.add + local.set $l6313 + local.get $l6312 + local.get $l6313 + i32.add + local.set $l6314 + local.get $l6313 + local.get $l6314 + i32.add + local.set $l6315 + local.get $l6314 + local.get $l6315 + i32.add + local.set $l6316 + local.get $l6315 + local.get $l6316 + i32.add + local.set $l6317 + local.get $l6316 + local.get $l6317 + i32.add + local.set $l6318 + local.get $l6317 + local.get $l6318 + i32.add + local.set $l6319 + local.get $l6318 + local.get $l6319 + i32.add + local.set $l6320 + local.get $l6319 + local.get $l6320 + i32.add + local.set $l6321 + local.get $l6320 + local.get $l6321 + i32.add + local.set $l6322 + local.get $l6321 + local.get $l6322 + i32.add + local.set $l6323 + local.get $l6322 + local.get $l6323 + i32.add + local.set $l6324 + local.get $l6323 + local.get $l6324 + i32.add + local.set $l6325 + local.get $l6324 + local.get $l6325 + i32.add + local.set $l6326 + local.get $l6325 + local.get $l6326 + i32.add + local.set $l6327 + local.get $l6326 + local.get $l6327 + i32.add + local.set $l6328 + local.get $l6327 + local.get $l6328 + i32.add + local.set $l6329 + local.get $l6328 + local.get $l6329 + i32.add + local.set $l6330 + local.get $l6329 + local.get $l6330 + i32.add + local.set $l6331 + local.get $l6330 + local.get $l6331 + i32.add + local.set $l6332 + local.get $l6331 + local.get $l6332 + i32.add + local.set $l6333 + local.get $l6332 + local.get $l6333 + i32.add + local.set $l6334 + local.get $l6333 + local.get $l6334 + i32.add + local.set $l6335 + local.get $l6334 + local.get $l6335 + i32.add + local.set $l6336 + local.get $l6335 + local.get $l6336 + i32.add + local.set $l6337 + local.get $l6336 + local.get $l6337 + i32.add + local.set $l6338 + local.get $l6337 + local.get $l6338 + i32.add + local.set $l6339 + local.get $l6338 + local.get $l6339 + i32.add + local.set $l6340 + local.get $l6339 + local.get $l6340 + i32.add + local.set $l6341 + local.get $l6340 + local.get $l6341 + i32.add + local.set $l6342 + local.get $l6341 + local.get $l6342 + i32.add + local.set $l6343 + local.get $l6342 + local.get $l6343 + i32.add + local.set $l6344 + local.get $l6343 + local.get $l6344 + i32.add + local.set $l6345 + local.get $l6344 + local.get $l6345 + i32.add + local.set $l6346 + local.get $l6345 + local.get $l6346 + i32.add + local.set $l6347 + local.get $l6346 + local.get $l6347 + i32.add + local.set $l6348 + local.get $l6347 + local.get $l6348 + i32.add + local.set $l6349 + local.get $l6348 + local.get $l6349 + i32.add + local.set $l6350 + local.get $l6349 + local.get $l6350 + i32.add + local.set $l6351 + local.get $l6350 + local.get $l6351 + i32.add + local.set $l6352 + local.get $l6351 + local.get $l6352 + i32.add + local.set $l6353 + local.get $l6352 + local.get $l6353 + i32.add + local.set $l6354 + local.get $l6353 + local.get $l6354 + i32.add + local.set $l6355 + local.get $l6354 + local.get $l6355 + i32.add + local.set $l6356 + local.get $l6355 + local.get $l6356 + i32.add + local.set $l6357 + local.get $l6356 + local.get $l6357 + i32.add + local.set $l6358 + local.get $l6357 + local.get $l6358 + i32.add + local.set $l6359 + local.get $l6358 + local.get $l6359 + i32.add + local.set $l6360 + local.get $l6359 + local.get $l6360 + i32.add + local.set $l6361 + local.get $l6360 + local.get $l6361 + i32.add + local.set $l6362 + local.get $l6361 + local.get $l6362 + i32.add + local.set $l6363 + local.get $l6362 + local.get $l6363 + i32.add + local.set $l6364 + local.get $l6363 + local.get $l6364 + i32.add + local.set $l6365 + local.get $l6364 + local.get $l6365 + i32.add + local.set $l6366 + local.get $l6365 + local.get $l6366 + i32.add + local.set $l6367 + local.get $l6366 + local.get $l6367 + i32.add + local.set $l6368 + local.get $l6367 + local.get $l6368 + i32.add + local.set $l6369 + local.get $l6368 + local.get $l6369 + i32.add + local.set $l6370 + local.get $l6369 + local.get $l6370 + i32.add + local.set $l6371 + local.get $l6370 + local.get $l6371 + i32.add + local.set $l6372 + local.get $l6371 + local.get $l6372 + i32.add + local.set $l6373 + local.get $l6372 + local.get $l6373 + i32.add + local.set $l6374 + local.get $l6373 + local.get $l6374 + i32.add + local.set $l6375 + local.get $l6374 + local.get $l6375 + i32.add + local.set $l6376 + local.get $l6375 + local.get $l6376 + i32.add + local.set $l6377 + local.get $l6376 + local.get $l6377 + i32.add + local.set $l6378 + local.get $l6377 + local.get $l6378 + i32.add + local.set $l6379 + local.get $l6378 + local.get $l6379 + i32.add + local.set $l6380 + local.get $l6379 + local.get $l6380 + i32.add + local.set $l6381 + local.get $l6380 + local.get $l6381 + i32.add + local.set $l6382 + local.get $l6381 + local.get $l6382 + i32.add + local.set $l6383 + local.get $l6382 + local.get $l6383 + i32.add + local.set $l6384 + local.get $l6383 + local.get $l6384 + i32.add + local.set $l6385 + local.get $l6384 + local.get $l6385 + i32.add + local.set $l6386 + local.get $l6385 + local.get $l6386 + i32.add + local.set $l6387 + local.get $l6386 + local.get $l6387 + i32.add + local.set $l6388 + local.get $l6387 + local.get $l6388 + i32.add + local.set $l6389 + local.get $l6388 + local.get $l6389 + i32.add + local.set $l6390 + local.get $l6389 + local.get $l6390 + i32.add + local.set $l6391 + local.get $l6390 + local.get $l6391 + i32.add + local.set $l6392 + local.get $l6391 + local.get $l6392 + i32.add + local.set $l6393 + local.get $l6392 + local.get $l6393 + i32.add + local.set $l6394 + local.get $l6393 + local.get $l6394 + i32.add + local.set $l6395 + local.get $l6394 + local.get $l6395 + i32.add + local.set $l6396 + local.get $l6395 + local.get $l6396 + i32.add + local.set $l6397 + local.get $l6396 + local.get $l6397 + i32.add + local.set $l6398 + local.get $l6397 + local.get $l6398 + i32.add + local.set $l6399 + local.get $l6398 + local.get $l6399 + i32.add + local.set $l6400 + local.get $l6399 + local.get $l6400 + i32.add + local.set $l6401 + local.get $l6400 + local.get $l6401 + i32.add + local.set $l6402 + local.get $l6401 + local.get $l6402 + i32.add + local.set $l6403 + local.get $l6402 + local.get $l6403 + i32.add + local.set $l6404 + local.get $l6403 + local.get $l6404 + i32.add + local.set $l6405 + local.get $l6404 + local.get $l6405 + i32.add + local.set $l6406 + local.get $l6405 + local.get $l6406 + i32.add + local.set $l6407 + local.get $l6406 + local.get $l6407 + i32.add + local.set $l6408 + local.get $l6407 + local.get $l6408 + i32.add + local.set $l6409 + local.get $l6408 + local.get $l6409 + i32.add + local.set $l6410 + local.get $l6409 + local.get $l6410 + i32.add + local.set $l6411 + local.get $l6410 + local.get $l6411 + i32.add + local.set $l6412 + local.get $l6411 + local.get $l6412 + i32.add + local.set $l6413 + local.get $l6412 + local.get $l6413 + i32.add + local.set $l6414 + local.get $l6413 + local.get $l6414 + i32.add + local.set $l6415 + local.get $l6414 + local.get $l6415 + i32.add + local.set $l6416 + local.get $l6415 + local.get $l6416 + i32.add + local.set $l6417 + local.get $l6416 + local.get $l6417 + i32.add + local.set $l6418 + local.get $l6417 + local.get $l6418 + i32.add + local.set $l6419 + local.get $l6418 + local.get $l6419 + i32.add + local.set $l6420 + local.get $l6419 + local.get $l6420 + i32.add + local.set $l6421 + local.get $l6420 + local.get $l6421 + i32.add + local.set $l6422 + local.get $l6421 + local.get $l6422 + i32.add + local.set $l6423 + local.get $l6422 + local.get $l6423 + i32.add + local.set $l6424 + local.get $l6423 + local.get $l6424 + i32.add + local.set $l6425 + local.get $l6424 + local.get $l6425 + i32.add + local.set $l6426 + local.get $l6425 + local.get $l6426 + i32.add + local.set $l6427 + local.get $l6426 + local.get $l6427 + i32.add + local.set $l6428 + local.get $l6427 + local.get $l6428 + i32.add + local.set $l6429 + local.get $l6428 + local.get $l6429 + i32.add + local.set $l6430 + local.get $l6429 + local.get $l6430 + i32.add + local.set $l6431 + local.get $l6430 + local.get $l6431 + i32.add + local.set $l6432 + local.get $l6431 + local.get $l6432 + i32.add + local.set $l6433 + local.get $l6432 + local.get $l6433 + i32.add + local.set $l6434 + local.get $l6433 + local.get $l6434 + i32.add + local.set $l6435 + local.get $l6434 + local.get $l6435 + i32.add + local.set $l6436 + local.get $l6435 + local.get $l6436 + i32.add + local.set $l6437 + local.get $l6436 + local.get $l6437 + i32.add + local.set $l6438 + local.get $l6437 + local.get $l6438 + i32.add + local.set $l6439 + local.get $l6438 + local.get $l6439 + i32.add + local.set $l6440 + local.get $l6439 + local.get $l6440 + i32.add + local.set $l6441 + local.get $l6440 + local.get $l6441 + i32.add + local.set $l6442 + local.get $l6441 + local.get $l6442 + i32.add + local.set $l6443 + local.get $l6442 + local.get $l6443 + i32.add + local.set $l6444 + local.get $l6443 + local.get $l6444 + i32.add + local.set $l6445 + local.get $l6444 + local.get $l6445 + i32.add + local.set $l6446 + local.get $l6445 + local.get $l6446 + i32.add + local.set $l6447 + local.get $l6446 + local.get $l6447 + i32.add + local.set $l6448 + local.get $l6447 + local.get $l6448 + i32.add + local.set $l6449 + local.get $l6448 + local.get $l6449 + i32.add + local.set $l6450 + local.get $l6449 + local.get $l6450 + i32.add + local.set $l6451 + local.get $l6450 + local.get $l6451 + i32.add + local.set $l6452 + local.get $l6451 + local.get $l6452 + i32.add + local.set $l6453 + local.get $l6452 + local.get $l6453 + i32.add + local.set $l6454 + local.get $l6453 + local.get $l6454 + i32.add + local.set $l6455 + local.get $l6454 + local.get $l6455 + i32.add + local.set $l6456 + local.get $l6455 + local.get $l6456 + i32.add + local.set $l6457 + local.get $l6456 + local.get $l6457 + i32.add + local.set $l6458 + local.get $l6457 + local.get $l6458 + i32.add + local.set $l6459 + local.get $l6458 + local.get $l6459 + i32.add + local.set $l6460 + local.get $l6459 + local.get $l6460 + i32.add + local.set $l6461 + local.get $l6460 + local.get $l6461 + i32.add + local.set $l6462 + local.get $l6461 + local.get $l6462 + i32.add + local.set $l6463 + local.get $l6462 + local.get $l6463 + i32.add + local.set $l6464 + local.get $l6463 + local.get $l6464 + i32.add + local.set $l6465 + local.get $l6464 + local.get $l6465 + i32.add + local.set $l6466 + local.get $l6465 + local.get $l6466 + i32.add + local.set $l6467 + local.get $l6466 + local.get $l6467 + i32.add + local.set $l6468 + local.get $l6467 + local.get $l6468 + i32.add + local.set $l6469 + local.get $l6468 + local.get $l6469 + i32.add + local.set $l6470 + local.get $l6469 + local.get $l6470 + i32.add + local.set $l6471 + local.get $l6470 + local.get $l6471 + i32.add + local.set $l6472 + local.get $l6471 + local.get $l6472 + i32.add + local.set $l6473 + local.get $l6472 + local.get $l6473 + i32.add + local.set $l6474 + local.get $l6473 + local.get $l6474 + i32.add + local.set $l6475 + local.get $l6474 + local.get $l6475 + i32.add + local.set $l6476 + local.get $l6475 + local.get $l6476 + i32.add + local.set $l6477 + local.get $l6476 + local.get $l6477 + i32.add + local.set $l6478 + local.get $l6477 + local.get $l6478 + i32.add + local.set $l6479 + local.get $l6478 + local.get $l6479 + i32.add + local.set $l6480 + local.get $l6479 + local.get $l6480 + i32.add + local.set $l6481 + local.get $l6480 + local.get $l6481 + i32.add + local.set $l6482 + local.get $l6481 + local.get $l6482 + i32.add + local.set $l6483 + local.get $l6482 + local.get $l6483 + i32.add + local.set $l6484 + local.get $l6483 + local.get $l6484 + i32.add + local.set $l6485 + local.get $l6484 + local.get $l6485 + i32.add + local.set $l6486 + local.get $l6485 + local.get $l6486 + i32.add + local.set $l6487 + local.get $l6486 + local.get $l6487 + i32.add + local.set $l6488 + local.get $l6487 + local.get $l6488 + i32.add + local.set $l6489 + local.get $l6488 + local.get $l6489 + i32.add + local.set $l6490 + local.get $l6489 + local.get $l6490 + i32.add + local.set $l6491 + local.get $l6490 + local.get $l6491 + i32.add + local.set $l6492 + local.get $l6491 + local.get $l6492 + i32.add + local.set $l6493 + local.get $l6492 + local.get $l6493 + i32.add + local.set $l6494 + local.get $l6493 + local.get $l6494 + i32.add + local.set $l6495 + local.get $l6494 + local.get $l6495 + i32.add + local.set $l6496 + local.get $l6495 + local.get $l6496 + i32.add + local.set $l6497 + local.get $l6496 + local.get $l6497 + i32.add + local.set $l6498 + local.get $l6497 + local.get $l6498 + i32.add + local.set $l6499 + local.get $l6498 + local.get $l6499 + i32.add + local.set $l6500 + local.get $l6499 + local.get $l6500 + i32.add + local.set $l6501 + local.get $l6500 + local.get $l6501 + i32.add + local.set $l6502 + local.get $l6501 + local.get $l6502 + i32.add + local.set $l6503 + local.get $l6502 + local.get $l6503 + i32.add + local.set $l6504 + local.get $l6503 + local.get $l6504 + i32.add + local.set $l6505 + local.get $l6504 + local.get $l6505 + i32.add + local.set $l6506 + local.get $l6505 + local.get $l6506 + i32.add + local.set $l6507 + local.get $l6506 + local.get $l6507 + i32.add + local.set $l6508 + local.get $l6507 + local.get $l6508 + i32.add + local.set $l6509 + local.get $l6508 + local.get $l6509 + i32.add + local.set $l6510 + local.get $l6509 + local.get $l6510 + i32.add + local.set $l6511 + local.get $l6510 + local.get $l6511 + i32.add + local.set $l6512 + local.get $l6511 + local.get $l6512 + i32.add + local.set $l6513 + local.get $l6512 + local.get $l6513 + i32.add + local.set $l6514 + local.get $l6513 + local.get $l6514 + i32.add + local.set $l6515 + local.get $l6514 + local.get $l6515 + i32.add + local.set $l6516 + local.get $l6515 + local.get $l6516 + i32.add + local.set $l6517 + local.get $l6516 + local.get $l6517 + i32.add + local.set $l6518 + local.get $l6517 + local.get $l6518 + i32.add + local.set $l6519 + local.get $l6518 + local.get $l6519 + i32.add + local.set $l6520 + local.get $l6519 + local.get $l6520 + i32.add + local.set $l6521 + local.get $l6520 + local.get $l6521 + i32.add + local.set $l6522 + local.get $l6521 + local.get $l6522 + i32.add + local.set $l6523 + local.get $l6522 + local.get $l6523 + i32.add + local.set $l6524 + local.get $l6523 + local.get $l6524 + i32.add + local.set $l6525 + local.get $l6524 + local.get $l6525 + i32.add + local.set $l6526 + local.get $l6525 + local.get $l6526 + i32.add + local.set $l6527 + local.get $l6526 + local.get $l6527 + i32.add + local.set $l6528 + local.get $l6527 + local.get $l6528 + i32.add + local.set $l6529 + local.get $l6528 + local.get $l6529 + i32.add + local.set $l6530 + local.get $l6529 + local.get $l6530 + i32.add + local.set $l6531 + local.get $l6530 + local.get $l6531 + i32.add + local.set $l6532 + local.get $l6531 + local.get $l6532 + i32.add + local.set $l6533 + local.get $l6532 + local.get $l6533 + i32.add + local.set $l6534 + local.get $l6533 + local.get $l6534 + i32.add + local.set $l6535 + local.get $l6534 + local.get $l6535 + i32.add + local.set $l6536 + local.get $l6535 + local.get $l6536 + i32.add + local.set $l6537 + local.get $l6536 + local.get $l6537 + i32.add + local.set $l6538 + local.get $l6537 + local.get $l6538 + i32.add + local.set $l6539 + local.get $l6538 + local.get $l6539 + i32.add + local.set $l6540 + local.get $l6539 + local.get $l6540 + i32.add + local.set $l6541 + local.get $l6540 + local.get $l6541 + i32.add + local.set $l6542 + local.get $l6541 + local.get $l6542 + i32.add + local.set $l6543 + local.get $l6542 + local.get $l6543 + i32.add + local.set $l6544 + local.get $l6543 + local.get $l6544 + i32.add + local.set $l6545 + local.get $l6544 + local.get $l6545 + i32.add + local.set $l6546 + local.get $l6545 + local.get $l6546 + i32.add + local.set $l6547 + local.get $l6546 + local.get $l6547 + i32.add + local.set $l6548 + local.get $l6547 + local.get $l6548 + i32.add + local.set $l6549 + local.get $l6548 + local.get $l6549 + i32.add + local.set $l6550 + local.get $l6549 + local.get $l6550 + i32.add + local.set $l6551 + local.get $l6550 + local.get $l6551 + i32.add + local.set $l6552 + local.get $l6551 + local.get $l6552 + i32.add + local.set $l6553 + local.get $l6552 + local.get $l6553 + i32.add + local.set $l6554 + local.get $l6553 + local.get $l6554 + i32.add + local.set $l6555 + local.get $l6554 + local.get $l6555 + i32.add + local.set $l6556 + local.get $l6555 + local.get $l6556 + i32.add + local.set $l6557 + local.get $l6556 + local.get $l6557 + i32.add + local.set $l6558 + local.get $l6557 + local.get $l6558 + i32.add + local.set $l6559 + local.get $l6558 + local.get $l6559 + i32.add + local.set $l6560 + local.get $l6559 + local.get $l6560 + i32.add + local.set $l6561 + local.get $l6560 + local.get $l6561 + i32.add + local.set $l6562 + local.get $l6561 + local.get $l6562 + i32.add + local.set $l6563 + local.get $l6562 + local.get $l6563 + i32.add + local.set $l6564 + local.get $l6563 + local.get $l6564 + i32.add + local.set $l6565 + local.get $l6564 + local.get $l6565 + i32.add + local.set $l6566 + local.get $l6565 + local.get $l6566 + i32.add + local.set $l6567 + local.get $l6566 + local.get $l6567 + i32.add + local.set $l6568 + local.get $l6567 + local.get $l6568 + i32.add + local.set $l6569 + local.get $l6568 + local.get $l6569 + i32.add + local.set $l6570 + local.get $l6569 + local.get $l6570 + i32.add + local.set $l6571 + local.get $l6570 + local.get $l6571 + i32.add + local.set $l6572 + local.get $l6571 + local.get $l6572 + i32.add + local.set $l6573 + local.get $l6572 + local.get $l6573 + i32.add + local.set $l6574 + local.get $l6573 + local.get $l6574 + i32.add + local.set $l6575 + local.get $l6574 + local.get $l6575 + i32.add + local.set $l6576 + local.get $l6575 + local.get $l6576 + i32.add + local.set $l6577 + local.get $l6576 + local.get $l6577 + i32.add + local.set $l6578 + local.get $l6577 + local.get $l6578 + i32.add + local.set $l6579 + local.get $l6578 + local.get $l6579 + i32.add + local.set $l6580 + local.get $l6579 + local.get $l6580 + i32.add + local.set $l6581 + local.get $l6580 + local.get $l6581 + i32.add + local.set $l6582 + local.get $l6581 + local.get $l6582 + i32.add + local.set $l6583 + local.get $l6582 + local.get $l6583 + i32.add + local.set $l6584 + local.get $l6583 + local.get $l6584 + i32.add + local.set $l6585 + local.get $l6584 + local.get $l6585 + i32.add + local.set $l6586 + local.get $l6585 + local.get $l6586 + i32.add + local.set $l6587 + local.get $l6586 + local.get $l6587 + i32.add + local.set $l6588 + local.get $l6587 + local.get $l6588 + i32.add + local.set $l6589 + local.get $l6588 + local.get $l6589 + i32.add + local.set $l6590 + local.get $l6589 + local.get $l6590 + i32.add + local.set $l6591 + local.get $l6590 + local.get $l6591 + i32.add + local.set $l6592 + local.get $l6591 + local.get $l6592 + i32.add + local.set $l6593 + local.get $l6592 + local.get $l6593 + i32.add + local.set $l6594 + local.get $l6593 + local.get $l6594 + i32.add + local.set $l6595 + local.get $l6594 + local.get $l6595 + i32.add + local.set $l6596 + local.get $l6595 + local.get $l6596 + i32.add + local.set $l6597 + local.get $l6596 + local.get $l6597 + i32.add + local.set $l6598 + local.get $l6597 + local.get $l6598 + i32.add + local.set $l6599 + local.get $l6598 + local.get $l6599 + i32.add + local.set $l6600 + local.get $l6599 + local.get $l6600 + i32.add + local.set $l6601 + local.get $l6600 + local.get $l6601 + i32.add + local.set $l6602 + local.get $l6601 + local.get $l6602 + i32.add + local.set $l6603 + local.get $l6602 + local.get $l6603 + i32.add + local.set $l6604 + local.get $l6603 + local.get $l6604 + i32.add + local.set $l6605 + local.get $l6604 + local.get $l6605 + i32.add + local.set $l6606 + local.get $l6605 + local.get $l6606 + i32.add + local.set $l6607 + local.get $l6606 + local.get $l6607 + i32.add + local.set $l6608 + local.get $l6607 + local.get $l6608 + i32.add + local.set $l6609 + local.get $l6608 + local.get $l6609 + i32.add + local.set $l6610 + local.get $l6609 + local.get $l6610 + i32.add + local.set $l6611 + local.get $l6610 + local.get $l6611 + i32.add + local.set $l6612 + local.get $l6611 + local.get $l6612 + i32.add + local.set $l6613 + local.get $l6612 + local.get $l6613 + i32.add + local.set $l6614 + local.get $l6613 + local.get $l6614 + i32.add + local.set $l6615 + local.get $l6614 + local.get $l6615 + i32.add + local.set $l6616 + local.get $l6615 + local.get $l6616 + i32.add + local.set $l6617 + local.get $l6616 + local.get $l6617 + i32.add + local.set $l6618 + local.get $l6617 + local.get $l6618 + i32.add + local.set $l6619 + local.get $l6618 + local.get $l6619 + i32.add + local.set $l6620 + local.get $l6619 + local.get $l6620 + i32.add + local.set $l6621 + local.get $l6620 + local.get $l6621 + i32.add + local.set $l6622 + local.get $l6621 + local.get $l6622 + i32.add + local.set $l6623 + local.get $l6622 + local.get $l6623 + i32.add + local.set $l6624 + local.get $l6623 + local.get $l6624 + i32.add + local.set $l6625 + local.get $l6624 + local.get $l6625 + i32.add + local.set $l6626 + local.get $l6625 + local.get $l6626 + i32.add + local.set $l6627 + local.get $l6626 + local.get $l6627 + i32.add + local.set $l6628 + local.get $l6627 + local.get $l6628 + i32.add + local.set $l6629 + local.get $l6628 + local.get $l6629 + i32.add + local.set $l6630 + local.get $l6629 + local.get $l6630 + i32.add + local.set $l6631 + local.get $l6630 + local.get $l6631 + i32.add + local.set $l6632 + local.get $l6631 + local.get $l6632 + i32.add + local.set $l6633 + local.get $l6632 + local.get $l6633 + i32.add + local.set $l6634 + local.get $l6633 + local.get $l6634 + i32.add + local.set $l6635 + local.get $l6634 + local.get $l6635 + i32.add + local.set $l6636 + local.get $l6635 + local.get $l6636 + i32.add + local.set $l6637 + local.get $l6636 + local.get $l6637 + i32.add + local.set $l6638 + local.get $l6637 + local.get $l6638 + i32.add + local.set $l6639 + local.get $l6638 + local.get $l6639 + i32.add + local.set $l6640 + local.get $l6639 + local.get $l6640 + i32.add + local.set $l6641 + local.get $l6640 + local.get $l6641 + i32.add + local.set $l6642 + local.get $l6641 + local.get $l6642 + i32.add + local.set $l6643 + local.get $l6642 + local.get $l6643 + i32.add + local.set $l6644 + local.get $l6643 + local.get $l6644 + i32.add + local.set $l6645 + local.get $l6644 + local.get $l6645 + i32.add + local.set $l6646 + local.get $l6645 + local.get $l6646 + i32.add + local.set $l6647 + local.get $l6646 + local.get $l6647 + i32.add + local.set $l6648 + local.get $l6647 + local.get $l6648 + i32.add + local.set $l6649 + local.get $l6648 + local.get $l6649 + i32.add + local.set $l6650 + local.get $l6649 + local.get $l6650 + i32.add + local.set $l6651 + local.get $l6650 + local.get $l6651 + i32.add + local.set $l6652 + local.get $l6651 + local.get $l6652 + i32.add + local.set $l6653 + local.get $l6652 + local.get $l6653 + i32.add + local.set $l6654 + local.get $l6653 + local.get $l6654 + i32.add + local.set $l6655 + local.get $l6654 + local.get $l6655 + i32.add + local.set $l6656 + local.get $l6655 + local.get $l6656 + i32.add + local.set $l6657 + local.get $l6656 + local.get $l6657 + i32.add + local.set $l6658 + local.get $l6657 + local.get $l6658 + i32.add + local.set $l6659 + local.get $l6658 + local.get $l6659 + i32.add + local.set $l6660 + local.get $l6659 + local.get $l6660 + i32.add + local.set $l6661 + local.get $l6660 + local.get $l6661 + i32.add + local.set $l6662 + local.get $l6661 + local.get $l6662 + i32.add + local.set $l6663 + local.get $l6662 + local.get $l6663 + i32.add + local.set $l6664 + local.get $l6663 + local.get $l6664 + i32.add + local.set $l6665 + local.get $l6664 + local.get $l6665 + i32.add + local.set $l6666 + local.get $l6665 + local.get $l6666 + i32.add + local.set $l6667 + local.get $l6666 + local.get $l6667 + i32.add + local.set $l6668 + local.get $l6667 + local.get $l6668 + i32.add + local.set $l6669 + local.get $l6668 + local.get $l6669 + i32.add + local.set $l6670 + local.get $l6669 + local.get $l6670 + i32.add + local.set $l6671 + local.get $l6670 + local.get $l6671 + i32.add + local.set $l6672 + local.get $l6671 + local.get $l6672 + i32.add + local.set $l6673 + local.get $l6672 + local.get $l6673 + i32.add + local.set $l6674 + local.get $l6673 + local.get $l6674 + i32.add + local.set $l6675 + local.get $l6674 + local.get $l6675 + i32.add + local.set $l6676 + local.get $l6675 + local.get $l6676 + i32.add + local.set $l6677 + local.get $l6676 + local.get $l6677 + i32.add + local.set $l6678 + local.get $l6677 + local.get $l6678 + i32.add + local.set $l6679 + local.get $l6678 + local.get $l6679 + i32.add + local.set $l6680 + local.get $l6679 + local.get $l6680 + i32.add + local.set $l6681 + local.get $l6680 + local.get $l6681 + i32.add + local.set $l6682 + local.get $l6681 + local.get $l6682 + i32.add + local.set $l6683 + local.get $l6682 + local.get $l6683 + i32.add + local.set $l6684 + local.get $l6683 + local.get $l6684 + i32.add + local.set $l6685 + local.get $l6684 + local.get $l6685 + i32.add + local.set $l6686 + local.get $l6685 + local.get $l6686 + i32.add + local.set $l6687 + local.get $l6686 + local.get $l6687 + i32.add + local.set $l6688 + local.get $l6687 + local.get $l6688 + i32.add + local.set $l6689 + local.get $l6688 + local.get $l6689 + i32.add + local.set $l6690 + local.get $l6689 + local.get $l6690 + i32.add + local.set $l6691 + local.get $l6690 + local.get $l6691 + i32.add + local.set $l6692 + local.get $l6691 + local.get $l6692 + i32.add + local.set $l6693 + local.get $l6692 + local.get $l6693 + i32.add + local.set $l6694 + local.get $l6693 + local.get $l6694 + i32.add + local.set $l6695 + local.get $l6694 + local.get $l6695 + i32.add + local.set $l6696 + local.get $l6695 + local.get $l6696 + i32.add + local.set $l6697 + local.get $l6696 + local.get $l6697 + i32.add + local.set $l6698 + local.get $l6697 + local.get $l6698 + i32.add + local.set $l6699 + local.get $l6698 + local.get $l6699 + i32.add + local.set $l6700 + local.get $l6699 + local.get $l6700 + i32.add + local.set $l6701 + local.get $l6700 + local.get $l6701 + i32.add + local.set $l6702 + local.get $l6701 + local.get $l6702 + i32.add + local.set $l6703 + local.get $l6702 + local.get $l6703 + i32.add + local.set $l6704 + local.get $l6703 + local.get $l6704 + i32.add + local.set $l6705 + local.get $l6704 + local.get $l6705 + i32.add + local.set $l6706 + local.get $l6705 + local.get $l6706 + i32.add + local.set $l6707 + local.get $l6706 + local.get $l6707 + i32.add + local.set $l6708 + local.get $l6707 + local.get $l6708 + i32.add + local.set $l6709 + local.get $l6708 + local.get $l6709 + i32.add + local.set $l6710 + local.get $l6709 + local.get $l6710 + i32.add + local.set $l6711 + local.get $l6710 + local.get $l6711 + i32.add + local.set $l6712 + local.get $l6711 + local.get $l6712 + i32.add + local.set $l6713 + local.get $l6712 + local.get $l6713 + i32.add + local.set $l6714 + local.get $l6713 + local.get $l6714 + i32.add + local.set $l6715 + local.get $l6714 + local.get $l6715 + i32.add + local.set $l6716 + local.get $l6715 + local.get $l6716 + i32.add + local.set $l6717 + local.get $l6716 + local.get $l6717 + i32.add + local.set $l6718 + local.get $l6717 + local.get $l6718 + i32.add + local.set $l6719 + local.get $l6718 + local.get $l6719 + i32.add + local.set $l6720 + local.get $l6719 + local.get $l6720 + i32.add + local.set $l6721 + local.get $l6720 + local.get $l6721 + i32.add + local.set $l6722 + local.get $l6721 + local.get $l6722 + i32.add + local.set $l6723 + local.get $l6722 + local.get $l6723 + i32.add + local.set $l6724 + local.get $l6723 + local.get $l6724 + i32.add + local.set $l6725 + local.get $l6724 + local.get $l6725 + i32.add + local.set $l6726 + local.get $l6725 + local.get $l6726 + i32.add + local.set $l6727 + local.get $l6726 + local.get $l6727 + i32.add + local.set $l6728 + local.get $l6727 + local.get $l6728 + i32.add + local.set $l6729 + local.get $l6728 + local.get $l6729 + i32.add + local.set $l6730 + local.get $l6729 + local.get $l6730 + i32.add + local.set $l6731 + local.get $l6730 + local.get $l6731 + i32.add + local.set $l6732 + local.get $l6731 + local.get $l6732 + i32.add + local.set $l6733 + local.get $l6732 + local.get $l6733 + i32.add + local.set $l6734 + local.get $l6733 + local.get $l6734 + i32.add + local.set $l6735 + local.get $l6734 + local.get $l6735 + i32.add + local.set $l6736 + local.get $l6735 + local.get $l6736 + i32.add + local.set $l6737 + local.get $l6736 + local.get $l6737 + i32.add + local.set $l6738 + local.get $l6737 + local.get $l6738 + i32.add + local.set $l6739 + local.get $l6738 + local.get $l6739 + i32.add + local.set $l6740 + local.get $l6739 + local.get $l6740 + i32.add + local.set $l6741 + local.get $l6740 + local.get $l6741 + i32.add + local.set $l6742 + local.get $l6741 + local.get $l6742 + i32.add + local.set $l6743 + local.get $l6742 + local.get $l6743 + i32.add + local.set $l6744 + local.get $l6743 + local.get $l6744 + i32.add + local.set $l6745 + local.get $l6744 + local.get $l6745 + i32.add + local.set $l6746 + local.get $l6745 + local.get $l6746 + i32.add + local.set $l6747 + local.get $l6746 + local.get $l6747 + i32.add + local.set $l6748 + local.get $l6747 + local.get $l6748 + i32.add + local.set $l6749 + local.get $l6748 + local.get $l6749 + i32.add + local.set $l6750 + local.get $l6749 + local.get $l6750 + i32.add + local.set $l6751 + local.get $l6750 + local.get $l6751 + i32.add + local.set $l6752 + local.get $l6751 + local.get $l6752 + i32.add + local.set $l6753 + local.get $l6752 + local.get $l6753 + i32.add + local.set $l6754 + local.get $l6753 + local.get $l6754 + i32.add + local.set $l6755 + local.get $l6754 + local.get $l6755 + i32.add + local.set $l6756 + local.get $l6755 + local.get $l6756 + i32.add + local.set $l6757 + local.get $l6756 + local.get $l6757 + i32.add + local.set $l6758 + local.get $l6757 + local.get $l6758 + i32.add + local.set $l6759 + local.get $l6758 + local.get $l6759 + i32.add + local.set $l6760 + local.get $l6759 + local.get $l6760 + i32.add + local.set $l6761 + local.get $l6760 + local.get $l6761 + i32.add + local.set $l6762 + local.get $l6761 + local.get $l6762 + i32.add + local.set $l6763 + local.get $l6762 + local.get $l6763 + i32.add + local.set $l6764 + local.get $l6763 + local.get $l6764 + i32.add + local.set $l6765 + local.get $l6764 + local.get $l6765 + i32.add + local.set $l6766 + local.get $l6765 + local.get $l6766 + i32.add + local.set $l6767 + local.get $l6766 + local.get $l6767 + i32.add + local.set $l6768 + local.get $l6767 + local.get $l6768 + i32.add + local.set $l6769 + local.get $l6768 + local.get $l6769 + i32.add + local.set $l6770 + local.get $l6769 + local.get $l6770 + i32.add + local.set $l6771 + local.get $l6770 + local.get $l6771 + i32.add + local.set $l6772 + local.get $l6771 + local.get $l6772 + i32.add + local.set $l6773 + local.get $l6772 + local.get $l6773 + i32.add + local.set $l6774 + local.get $l6773 + local.get $l6774 + i32.add + local.set $l6775 + local.get $l6774 + local.get $l6775 + i32.add + local.set $l6776 + local.get $l6775 + local.get $l6776 + i32.add + local.set $l6777 + local.get $l6776 + local.get $l6777 + i32.add + local.set $l6778 + local.get $l6777 + local.get $l6778 + i32.add + local.set $l6779 + local.get $l6778 + local.get $l6779 + i32.add + local.set $l6780 + local.get $l6779 + local.get $l6780 + i32.add + local.set $l6781 + local.get $l6780 + local.get $l6781 + i32.add + local.set $l6782 + local.get $l6781 + local.get $l6782 + i32.add + local.set $l6783 + local.get $l6782 + local.get $l6783 + i32.add + local.set $l6784 + local.get $l6783 + local.get $l6784 + i32.add + local.set $l6785 + local.get $l6784 + local.get $l6785 + i32.add + local.set $l6786 + local.get $l6785 + local.get $l6786 + i32.add + local.set $l6787 + local.get $l6786 + local.get $l6787 + i32.add + local.set $l6788 + local.get $l6787 + local.get $l6788 + i32.add + local.set $l6789 + local.get $l6788 + local.get $l6789 + i32.add + local.set $l6790 + local.get $l6789 + local.get $l6790 + i32.add + local.set $l6791 + local.get $l6790 + local.get $l6791 + i32.add + local.set $l6792 + local.get $l6791 + local.get $l6792 + i32.add + local.set $l6793 + local.get $l6792 + local.get $l6793 + i32.add + local.set $l6794 + local.get $l6793 + local.get $l6794 + i32.add + local.set $l6795 + local.get $l6794 + local.get $l6795 + i32.add + local.set $l6796 + local.get $l6795 + local.get $l6796 + i32.add + local.set $l6797 + local.get $l6796 + local.get $l6797 + i32.add + local.set $l6798 + local.get $l6797 + local.get $l6798 + i32.add + local.set $l6799 + local.get $l6798 + local.get $l6799 + i32.add + local.set $l6800 + local.get $l6799 + local.get $l6800 + i32.add + local.set $l6801 + local.get $l6800 + local.get $l6801 + i32.add + local.set $l6802 + local.get $l6801 + local.get $l6802 + i32.add + local.set $l6803 + local.get $l6802 + local.get $l6803 + i32.add + local.set $l6804 + local.get $l6803 + local.get $l6804 + i32.add + local.set $l6805 + local.get $l6804 + local.get $l6805 + i32.add + local.set $l6806 + local.get $l6805 + local.get $l6806 + i32.add + local.set $l6807 + local.get $l6806 + local.get $l6807 + i32.add + local.set $l6808 + local.get $l6807 + local.get $l6808 + i32.add + local.set $l6809 + local.get $l6808 + local.get $l6809 + i32.add + local.set $l6810 + local.get $l6809 + local.get $l6810 + i32.add + local.set $l6811 + local.get $l6810 + local.get $l6811 + i32.add + local.set $l6812 + local.get $l6811 + local.get $l6812 + i32.add + local.set $l6813 + local.get $l6812 + local.get $l6813 + i32.add + local.set $l6814 + local.get $l6813 + local.get $l6814 + i32.add + local.set $l6815 + local.get $l6814 + local.get $l6815 + i32.add + local.set $l6816 + local.get $l6815 + local.get $l6816 + i32.add + local.set $l6817 + local.get $l6816 + local.get $l6817 + i32.add + local.set $l6818 + local.get $l6817 + local.get $l6818 + i32.add + local.set $l6819 + local.get $l6818 + local.get $l6819 + i32.add + local.set $l6820 + local.get $l6819 + local.get $l6820 + i32.add + local.set $l6821 + local.get $l6820 + local.get $l6821 + i32.add + local.set $l6822 + local.get $l6821 + local.get $l6822 + i32.add + local.set $l6823 + local.get $l6822 + local.get $l6823 + i32.add + local.set $l6824 + local.get $l6823 + local.get $l6824 + i32.add + local.set $l6825 + local.get $l6824 + local.get $l6825 + i32.add + local.set $l6826 + local.get $l6825 + local.get $l6826 + i32.add + local.set $l6827 + local.get $l6826 + local.get $l6827 + i32.add + local.set $l6828 + local.get $l6827 + local.get $l6828 + i32.add + local.set $l6829 + local.get $l6828 + local.get $l6829 + i32.add + local.set $l6830 + local.get $l6829 + local.get $l6830 + i32.add + local.set $l6831 + local.get $l6830 + local.get $l6831 + i32.add + local.set $l6832 + local.get $l6831 + local.get $l6832 + i32.add + local.set $l6833 + local.get $l6832 + local.get $l6833 + i32.add + local.set $l6834 + local.get $l6833 + local.get $l6834 + i32.add + local.set $l6835 + local.get $l6834 + local.get $l6835 + i32.add + local.set $l6836 + local.get $l6835 + local.get $l6836 + i32.add + local.set $l6837 + local.get $l6836 + local.get $l6837 + i32.add + local.set $l6838 + local.get $l6837 + local.get $l6838 + i32.add + local.set $l6839 + local.get $l6838 + local.get $l6839 + i32.add + local.set $l6840 + local.get $l6839 + local.get $l6840 + i32.add + local.set $l6841 + local.get $l6840 + local.get $l6841 + i32.add + local.set $l6842 + local.get $l6841 + local.get $l6842 + i32.add + local.set $l6843 + local.get $l6842 + local.get $l6843 + i32.add + local.set $l6844 + local.get $l6843 + local.get $l6844 + i32.add + local.set $l6845 + local.get $l6844 + local.get $l6845 + i32.add + local.set $l6846 + local.get $l6845 + local.get $l6846 + i32.add + local.set $l6847 + local.get $l6846 + local.get $l6847 + i32.add + local.set $l6848 + local.get $l6847 + local.get $l6848 + i32.add + local.set $l6849 + local.get $l6848 + local.get $l6849 + i32.add + local.set $l6850 + local.get $l6849 + local.get $l6850 + i32.add + local.set $l6851 + local.get $l6850 + local.get $l6851 + i32.add + local.set $l6852 + local.get $l6851 + local.get $l6852 + i32.add + local.set $l6853 + local.get $l6852 + local.get $l6853 + i32.add + local.set $l6854 + local.get $l6853 + local.get $l6854 + i32.add + local.set $l6855 + local.get $l6854 + local.get $l6855 + i32.add + local.set $l6856 + local.get $l6855 + local.get $l6856 + i32.add + local.set $l6857 + local.get $l6856 + local.get $l6857 + i32.add + local.set $l6858 + local.get $l6857 + local.get $l6858 + i32.add + local.set $l6859 + local.get $l6858 + local.get $l6859 + i32.add + local.set $l6860 + local.get $l6859 + local.get $l6860 + i32.add + local.set $l6861 + local.get $l6860 + local.get $l6861 + i32.add + local.set $l6862 + local.get $l6861 + local.get $l6862 + i32.add + local.set $l6863 + local.get $l6862 + local.get $l6863 + i32.add + local.set $l6864 + local.get $l6863 + local.get $l6864 + i32.add + local.set $l6865 + local.get $l6864 + local.get $l6865 + i32.add + local.set $l6866 + local.get $l6865 + local.get $l6866 + i32.add + local.set $l6867 + local.get $l6866 + local.get $l6867 + i32.add + local.set $l6868 + local.get $l6867 + local.get $l6868 + i32.add + local.set $l6869 + local.get $l6868 + local.get $l6869 + i32.add + local.set $l6870 + local.get $l6869 + local.get $l6870 + i32.add + local.set $l6871 + local.get $l6870 + local.get $l6871 + i32.add + local.set $l6872 + local.get $l6871 + local.get $l6872 + i32.add + local.set $l6873 + local.get $l6872 + local.get $l6873 + i32.add + local.set $l6874 + local.get $l6873 + local.get $l6874 + i32.add + local.set $l6875 + local.get $l6874 + local.get $l6875 + i32.add + local.set $l6876 + local.get $l6875 + local.get $l6876 + i32.add + local.set $l6877 + local.get $l6876 + local.get $l6877 + i32.add + local.set $l6878 + local.get $l6877 + local.get $l6878 + i32.add + local.set $l6879 + local.get $l6878 + local.get $l6879 + i32.add + local.set $l6880 + local.get $l6879 + local.get $l6880 + i32.add + local.set $l6881 + local.get $l6880 + local.get $l6881 + i32.add + local.set $l6882 + local.get $l6881 + local.get $l6882 + i32.add + local.set $l6883 + local.get $l6882 + local.get $l6883 + i32.add + local.set $l6884 + local.get $l6883 + local.get $l6884 + i32.add + local.set $l6885 + local.get $l6884 + local.get $l6885 + i32.add + local.set $l6886 + local.get $l6885 + local.get $l6886 + i32.add + local.set $l6887 + local.get $l6886 + local.get $l6887 + i32.add + local.set $l6888 + local.get $l6887 + local.get $l6888 + i32.add + local.set $l6889 + local.get $l6888 + local.get $l6889 + i32.add + local.set $l6890 + local.get $l6889 + local.get $l6890 + i32.add + local.set $l6891 + local.get $l6890 + local.get $l6891 + i32.add + local.set $l6892 + local.get $l6891 + local.get $l6892 + i32.add + local.set $l6893 + local.get $l6892 + local.get $l6893 + i32.add + local.set $l6894 + local.get $l6893 + local.get $l6894 + i32.add + local.set $l6895 + local.get $l6894 + local.get $l6895 + i32.add + local.set $l6896 + local.get $l6895 + local.get $l6896 + i32.add + local.set $l6897 + local.get $l6896 + local.get $l6897 + i32.add + local.set $l6898 + local.get $l6897 + local.get $l6898 + i32.add + local.set $l6899 + local.get $l6898 + local.get $l6899 + i32.add + local.set $l6900 + local.get $l6899 + local.get $l6900 + i32.add + local.set $l6901 + local.get $l6900 + local.get $l6901 + i32.add + local.set $l6902 + local.get $l6901 + local.get $l6902 + i32.add + local.set $l6903 + local.get $l6902 + local.get $l6903 + i32.add + local.set $l6904 + local.get $l6903 + local.get $l6904 + i32.add + local.set $l6905 + local.get $l6904 + local.get $l6905 + i32.add + local.set $l6906 + local.get $l6905 + local.get $l6906 + i32.add + local.set $l6907 + local.get $l6906 + local.get $l6907 + i32.add + local.set $l6908 + local.get $l6907 + local.get $l6908 + i32.add + local.set $l6909 + local.get $l6908 + local.get $l6909 + i32.add + local.set $l6910 + local.get $l6909 + local.get $l6910 + i32.add + local.set $l6911 + local.get $l6910 + local.get $l6911 + i32.add + local.set $l6912 + local.get $l6911 + local.get $l6912 + i32.add + local.set $l6913 + local.get $l6912 + local.get $l6913 + i32.add + local.set $l6914 + local.get $l6913 + local.get $l6914 + i32.add + local.set $l6915 + local.get $l6914 + local.get $l6915 + i32.add + local.set $l6916 + local.get $l6915 + local.get $l6916 + i32.add + local.set $l6917 + local.get $l6916 + local.get $l6917 + i32.add + local.set $l6918 + local.get $l6917 + local.get $l6918 + i32.add + local.set $l6919 + local.get $l6918 + local.get $l6919 + i32.add + local.set $l6920 + local.get $l6919 + local.get $l6920 + i32.add + local.set $l6921 + local.get $l6920 + local.get $l6921 + i32.add + local.set $l6922 + local.get $l6921 + local.get $l6922 + i32.add + local.set $l6923 + local.get $l6922 + local.get $l6923 + i32.add + local.set $l6924 + local.get $l6923 + local.get $l6924 + i32.add + local.set $l6925 + local.get $l6924 + local.get $l6925 + i32.add + local.set $l6926 + local.get $l6925 + local.get $l6926 + i32.add + local.set $l6927 + local.get $l6926 + local.get $l6927 + i32.add + local.set $l6928 + local.get $l6927 + local.get $l6928 + i32.add + local.set $l6929 + local.get $l6928 + local.get $l6929 + i32.add + local.set $l6930 + local.get $l6929 + local.get $l6930 + i32.add + local.set $l6931 + local.get $l6930 + local.get $l6931 + i32.add + local.set $l6932 + local.get $l6931 + local.get $l6932 + i32.add + local.set $l6933 + local.get $l6932 + local.get $l6933 + i32.add + local.set $l6934 + local.get $l6933 + local.get $l6934 + i32.add + local.set $l6935 + local.get $l6934 + local.get $l6935 + i32.add + local.set $l6936 + local.get $l6935 + local.get $l6936 + i32.add + local.set $l6937 + local.get $l6936 + local.get $l6937 + i32.add + local.set $l6938 + local.get $l6937 + local.get $l6938 + i32.add + local.set $l6939 + local.get $l6938 + local.get $l6939 + i32.add + local.set $l6940 + local.get $l6939 + local.get $l6940 + i32.add + local.set $l6941 + local.get $l6940 + local.get $l6941 + i32.add + local.set $l6942 + local.get $l6941 + local.get $l6942 + i32.add + local.set $l6943 + local.get $l6942 + local.get $l6943 + i32.add + local.set $l6944 + local.get $l6943 + local.get $l6944 + i32.add + local.set $l6945 + local.get $l6944 + local.get $l6945 + i32.add + local.set $l6946 + local.get $l6945 + local.get $l6946 + i32.add + local.set $l6947 + local.get $l6946 + local.get $l6947 + i32.add + local.set $l6948 + local.get $l6947 + local.get $l6948 + i32.add + local.set $l6949 + local.get $l6948 + local.get $l6949 + i32.add + local.set $l6950 + local.get $l6949 + local.get $l6950 + i32.add + local.set $l6951 + local.get $l6950 + local.get $l6951 + i32.add + local.set $l6952 + local.get $l6951 + local.get $l6952 + i32.add + local.set $l6953 + local.get $l6952 + local.get $l6953 + i32.add + local.set $l6954 + local.get $l6953 + local.get $l6954 + i32.add + local.set $l6955 + local.get $l6954 + local.get $l6955 + i32.add + local.set $l6956 + local.get $l6955 + local.get $l6956 + i32.add + local.set $l6957 + local.get $l6956 + local.get $l6957 + i32.add + local.set $l6958 + local.get $l6957 + local.get $l6958 + i32.add + local.set $l6959 + local.get $l6958 + local.get $l6959 + i32.add + local.set $l6960 + local.get $l6959 + local.get $l6960 + i32.add + local.set $l6961 + local.get $l6960 + local.get $l6961 + i32.add + local.set $l6962 + local.get $l6961 + local.get $l6962 + i32.add + local.set $l6963 + local.get $l6962 + local.get $l6963 + i32.add + local.set $l6964 + local.get $l6963 + local.get $l6964 + i32.add + local.set $l6965 + local.get $l6964 + local.get $l6965 + i32.add + local.set $l6966 + local.get $l6965 + local.get $l6966 + i32.add + local.set $l6967 + local.get $l6966 + local.get $l6967 + i32.add + local.set $l6968 + local.get $l6967 + local.get $l6968 + i32.add + local.set $l6969 + local.get $l6968 + local.get $l6969 + i32.add + local.set $l6970 + local.get $l6969 + local.get $l6970 + i32.add + local.set $l6971 + local.get $l6970 + local.get $l6971 + i32.add + local.set $l6972 + local.get $l6971 + local.get $l6972 + i32.add + local.set $l6973 + local.get $l6972 + local.get $l6973 + i32.add + local.set $l6974 + local.get $l6973 + local.get $l6974 + i32.add + local.set $l6975 + local.get $l6974 + local.get $l6975 + i32.add + local.set $l6976 + local.get $l6975 + local.get $l6976 + i32.add + local.set $l6977 + local.get $l6976 + local.get $l6977 + i32.add + local.set $l6978 + local.get $l6977 + local.get $l6978 + i32.add + local.set $l6979 + local.get $l6978 + local.get $l6979 + i32.add + local.set $l6980 + local.get $l6979 + local.get $l6980 + i32.add + local.set $l6981 + local.get $l6980 + local.get $l6981 + i32.add + local.set $l6982 + local.get $l6981 + local.get $l6982 + i32.add + local.set $l6983 + local.get $l6982 + local.get $l6983 + i32.add + local.set $l6984 + local.get $l6983 + local.get $l6984 + i32.add + local.set $l6985 + local.get $l6984 + local.get $l6985 + i32.add + local.set $l6986 + local.get $l6985 + local.get $l6986 + i32.add + local.set $l6987 + local.get $l6986 + local.get $l6987 + i32.add + local.set $l6988 + local.get $l6987 + local.get $l6988 + i32.add + local.set $l6989 + local.get $l6988 + local.get $l6989 + i32.add + local.set $l6990 + local.get $l6989 + local.get $l6990 + i32.add + local.set $l6991 + local.get $l6990 + local.get $l6991 + i32.add + local.set $l6992 + local.get $l6991 + local.get $l6992 + i32.add + local.set $l6993 + local.get $l6992 + local.get $l6993 + i32.add + local.set $l6994 + local.get $l6993 + local.get $l6994 + i32.add + local.set $l6995 + local.get $l6994 + local.get $l6995 + i32.add + local.set $l6996 + local.get $l6995 + local.get $l6996 + i32.add + local.set $l6997 + local.get $l6996 + local.get $l6997 + i32.add + local.set $l6998 + local.get $l6997 + local.get $l6998 + i32.add + local.set $l6999 + local.get $l6998 + local.get $l6999 + i32.add + local.set $l7000 + local.get $l6999 + local.get $l7000 + i32.add + local.set $l7001 + local.get $l7000 + local.get $l7001 + i32.add + local.set $l7002 + local.get $l7001 + local.get $l7002 + i32.add + local.set $l7003 + local.get $l7002 + local.get $l7003 + i32.add + local.set $l7004 + local.get $l7003 + local.get $l7004 + i32.add + local.set $l7005 + local.get $l7004 + local.get $l7005 + i32.add + local.set $l7006 + local.get $l7005 + local.get $l7006 + i32.add + local.set $l7007 + local.get $l7006 + local.get $l7007 + i32.add + local.set $l7008 + local.get $l7007 + local.get $l7008 + i32.add + local.set $l7009 + local.get $l7008 + local.get $l7009 + i32.add + local.set $l7010 + local.get $l7009 + local.get $l7010 + i32.add + local.set $l7011 + local.get $l7010 + local.get $l7011 + i32.add + local.set $l7012 + local.get $l7011 + local.get $l7012 + i32.add + local.set $l7013 + local.get $l7012 + local.get $l7013 + i32.add + local.set $l7014 + local.get $l7013 + local.get $l7014 + i32.add + local.set $l7015 + local.get $l7014 + local.get $l7015 + i32.add + local.set $l7016 + local.get $l7015 + local.get $l7016 + i32.add + local.set $l7017 + local.get $l7016 + local.get $l7017 + i32.add + local.set $l7018 + local.get $l7017 + local.get $l7018 + i32.add + local.set $l7019 + local.get $l7018 + local.get $l7019 + i32.add + local.set $l7020 + local.get $l7019 + local.get $l7020 + i32.add + local.set $l7021 + local.get $l7020 + local.get $l7021 + i32.add + local.set $l7022 + local.get $l7021 + local.get $l7022 + i32.add + local.set $l7023 + local.get $l7022 + local.get $l7023 + i32.add + local.set $l7024 + local.get $l7023 + local.get $l7024 + i32.add + local.set $l7025 + local.get $l7024 + local.get $l7025 + i32.add + local.set $l7026 + local.get $l7025 + local.get $l7026 + i32.add + local.set $l7027 + local.get $l7026 + local.get $l7027 + i32.add + local.set $l7028 + local.get $l7027 + local.get $l7028 + i32.add + local.set $l7029 + local.get $l7028 + local.get $l7029 + i32.add + local.set $l7030 + local.get $l7029 + local.get $l7030 + i32.add + local.set $l7031 + local.get $l7030 + local.get $l7031 + i32.add + local.set $l7032 + local.get $l7031 + local.get $l7032 + i32.add + local.set $l7033 + local.get $l7032 + local.get $l7033 + i32.add + local.set $l7034 + local.get $l7033 + local.get $l7034 + i32.add + local.set $l7035 + local.get $l7034 + local.get $l7035 + i32.add + local.set $l7036 + local.get $l7035 + local.get $l7036 + i32.add + local.set $l7037 + local.get $l7036 + local.get $l7037 + i32.add + local.set $l7038 + local.get $l7037 + local.get $l7038 + i32.add + local.set $l7039 + local.get $l7038 + local.get $l7039 + i32.add + local.set $l7040 + local.get $l7039 + local.get $l7040 + i32.add + local.set $l7041 + local.get $l7040 + local.get $l7041 + i32.add + local.set $l7042 + local.get $l7041 + local.get $l7042 + i32.add + local.set $l7043 + local.get $l7042 + local.get $l7043 + i32.add + local.set $l7044 + local.get $l7043 + local.get $l7044 + i32.add + local.set $l7045 + local.get $l7044 + local.get $l7045 + i32.add + local.set $l7046 + local.get $l7045 + local.get $l7046 + i32.add + local.set $l7047 + local.get $l7046 + local.get $l7047 + i32.add + local.set $l7048 + local.get $l7047 + local.get $l7048 + i32.add + local.set $l7049 + local.get $l7048 + local.get $l7049 + i32.add + local.set $l7050 + local.get $l7049 + local.get $l7050 + i32.add + local.set $l7051 + local.get $l7050 + local.get $l7051 + i32.add + local.set $l7052 + local.get $l7051 + local.get $l7052 + i32.add + local.set $l7053 + local.get $l7052 + local.get $l7053 + i32.add + local.set $l7054 + local.get $l7053 + local.get $l7054 + i32.add + local.set $l7055 + local.get $l7054 + local.get $l7055 + i32.add + local.set $l7056 + local.get $l7055 + local.get $l7056 + i32.add + local.set $l7057 + local.get $l7056 + local.get $l7057 + i32.add + local.set $l7058 + local.get $l7057 + local.get $l7058 + i32.add + local.set $l7059 + local.get $l7058 + local.get $l7059 + i32.add + local.set $l7060 + local.get $l7059 + local.get $l7060 + i32.add + local.set $l7061 + local.get $l7060 + local.get $l7061 + i32.add + local.set $l7062 + local.get $l7061 + local.get $l7062 + i32.add + local.set $l7063 + local.get $l7062 + local.get $l7063 + i32.add + local.set $l7064 + local.get $l7063 + local.get $l7064 + i32.add + local.set $l7065 + local.get $l7064 + local.get $l7065 + i32.add + local.set $l7066 + local.get $l7065 + local.get $l7066 + i32.add + local.set $l7067 + local.get $l7066 + local.get $l7067 + i32.add + local.set $l7068 + local.get $l7067 + local.get $l7068 + i32.add + local.set $l7069 + local.get $l7068 + local.get $l7069 + i32.add + local.set $l7070 + local.get $l7069 + local.get $l7070 + i32.add + local.set $l7071 + local.get $l7070 + local.get $l7071 + i32.add + local.set $l7072 + local.get $l7071 + local.get $l7072 + i32.add + local.set $l7073 + local.get $l7072 + local.get $l7073 + i32.add + local.set $l7074 + local.get $l7073 + local.get $l7074 + i32.add + local.set $l7075 + local.get $l7074 + local.get $l7075 + i32.add + local.set $l7076 + local.get $l7075 + local.get $l7076 + i32.add + local.set $l7077 + local.get $l7076 + local.get $l7077 + i32.add + local.set $l7078 + local.get $l7077 + local.get $l7078 + i32.add + local.set $l7079 + local.get $l7078 + local.get $l7079 + i32.add + local.set $l7080 + local.get $l7079 + local.get $l7080 + i32.add + local.set $l7081 + local.get $l7080 + local.get $l7081 + i32.add + local.set $l7082 + local.get $l7081 + local.get $l7082 + i32.add + local.set $l7083 + local.get $l7082 + local.get $l7083 + i32.add + local.set $l7084 + local.get $l7083 + local.get $l7084 + i32.add + local.set $l7085 + local.get $l7084 + local.get $l7085 + i32.add + local.set $l7086 + local.get $l7085 + local.get $l7086 + i32.add + local.set $l7087 + local.get $l7086 + local.get $l7087 + i32.add + local.set $l7088 + local.get $l7087 + local.get $l7088 + i32.add + local.set $l7089 + local.get $l7088 + local.get $l7089 + i32.add + local.set $l7090 + local.get $l7089 + local.get $l7090 + i32.add + local.set $l7091 + local.get $l7090 + local.get $l7091 + i32.add + local.set $l7092 + local.get $l7091 + local.get $l7092 + i32.add + local.set $l7093 + local.get $l7092 + local.get $l7093 + i32.add + local.set $l7094 + local.get $l7093 + local.get $l7094 + i32.add + local.set $l7095 + local.get $l7094 + local.get $l7095 + i32.add + local.set $l7096 + local.get $l7095 + local.get $l7096 + i32.add + local.set $l7097 + local.get $l7096 + local.get $l7097 + i32.add + local.set $l7098 + local.get $l7097 + local.get $l7098 + i32.add + local.set $l7099 + local.get $l7098 + local.get $l7099 + i32.add + local.set $l7100 + local.get $l7099 + local.get $l7100 + i32.add + local.set $l7101 + local.get $l7100 + local.get $l7101 + i32.add + local.set $l7102 + local.get $l7101 + local.get $l7102 + i32.add + local.set $l7103 + local.get $l7102 + local.get $l7103 + i32.add + local.set $l7104 + local.get $l7103 + local.get $l7104 + i32.add + local.set $l7105 + local.get $l7104 + local.get $l7105 + i32.add + local.set $l7106 + local.get $l7105 + local.get $l7106 + i32.add + local.set $l7107 + local.get $l7106 + local.get $l7107 + i32.add + local.set $l7108 + local.get $l7107 + local.get $l7108 + i32.add + local.set $l7109 + local.get $l7108 + local.get $l7109 + i32.add + local.set $l7110 + local.get $l7109 + local.get $l7110 + i32.add + local.set $l7111 + local.get $l7110 + local.get $l7111 + i32.add + local.set $l7112 + local.get $l7111 + local.get $l7112 + i32.add + local.set $l7113 + local.get $l7112 + local.get $l7113 + i32.add + local.set $l7114 + local.get $l7113 + local.get $l7114 + i32.add + local.set $l7115 + local.get $l7114 + local.get $l7115 + i32.add + local.set $l7116 + local.get $l7115 + local.get $l7116 + i32.add + local.set $l7117 + local.get $l7116 + local.get $l7117 + i32.add + local.set $l7118 + local.get $l7117 + local.get $l7118 + i32.add + local.set $l7119 + local.get $l7118 + local.get $l7119 + i32.add + local.set $l7120 + local.get $l7119 + local.get $l7120 + i32.add + local.set $l7121 + local.get $l7120 + local.get $l7121 + i32.add + local.set $l7122 + local.get $l7121 + local.get $l7122 + i32.add + local.set $l7123 + local.get $l7122 + local.get $l7123 + i32.add + local.set $l7124 + local.get $l7123 + local.get $l7124 + i32.add + local.set $l7125 + local.get $l7124 + local.get $l7125 + i32.add + local.set $l7126 + local.get $l7125 + local.get $l7126 + i32.add + local.set $l7127 + local.get $l7126 + local.get $l7127 + i32.add + local.set $l7128 + local.get $l7127 + local.get $l7128 + i32.add + local.set $l7129 + local.get $l7128 + local.get $l7129 + i32.add + local.set $l7130 + local.get $l7129 + local.get $l7130 + i32.add + local.set $l7131 + local.get $l7130 + local.get $l7131 + i32.add + local.set $l7132 + local.get $l7131 + local.get $l7132 + i32.add + local.set $l7133 + local.get $l7132 + local.get $l7133 + i32.add + local.set $l7134 + local.get $l7133 + local.get $l7134 + i32.add + local.set $l7135 + local.get $l7134 + local.get $l7135 + i32.add + local.set $l7136 + local.get $l7135 + local.get $l7136 + i32.add + local.set $l7137 + local.get $l7136 + local.get $l7137 + i32.add + local.set $l7138 + local.get $l7137 + local.get $l7138 + i32.add + local.set $l7139 + local.get $l7138 + local.get $l7139 + i32.add + local.set $l7140 + local.get $l7139 + local.get $l7140 + i32.add + local.set $l7141 + local.get $l7140 + local.get $l7141 + i32.add + local.set $l7142 + local.get $l7141 + local.get $l7142 + i32.add + local.set $l7143 + local.get $l7142 + local.get $l7143 + i32.add + local.set $l7144 + local.get $l7143 + local.get $l7144 + i32.add + local.set $l7145 + local.get $l7144 + local.get $l7145 + i32.add + local.set $l7146 + local.get $l7145 + local.get $l7146 + i32.add + local.set $l7147 + local.get $l7146 + local.get $l7147 + i32.add + local.set $l7148 + local.get $l7147 + local.get $l7148 + i32.add + local.set $l7149 + local.get $l7148 + local.get $l7149 + i32.add + local.set $l7150 + local.get $l7149 + local.get $l7150 + i32.add + local.set $l7151 + local.get $l7150 + local.get $l7151 + i32.add + local.set $l7152 + local.get $l7151 + local.get $l7152 + i32.add + local.set $l7153 + local.get $l7152 + local.get $l7153 + i32.add + local.set $l7154 + local.get $l7153 + local.get $l7154 + i32.add + local.set $l7155 + local.get $l7154 + local.get $l7155 + i32.add + local.set $l7156 + local.get $l7155 + local.get $l7156 + i32.add + local.set $l7157 + local.get $l7156 + local.get $l7157 + i32.add + local.set $l7158 + local.get $l7157 + local.get $l7158 + i32.add + local.set $l7159 + local.get $l7158 + local.get $l7159 + i32.add + local.set $l7160 + local.get $l7159 + local.get $l7160 + i32.add + local.set $l7161 + local.get $l7160 + local.get $l7161 + i32.add + local.set $l7162 + local.get $l7161 + local.get $l7162 + i32.add + local.set $l7163 + local.get $l7162 + local.get $l7163 + i32.add + local.set $l7164 + local.get $l7163 + local.get $l7164 + i32.add + local.set $l7165 + local.get $l7164 + local.get $l7165 + i32.add + local.set $l7166 + local.get $l7165 + local.get $l7166 + i32.add + local.set $l7167 + local.get $l7166 + local.get $l7167 + i32.add + local.set $l7168 + local.get $l7167 + local.get $l7168 + i32.add + local.set $l7169 + local.get $l7168 + local.get $l7169 + i32.add + local.set $l7170 + local.get $l7169 + local.get $l7170 + i32.add + local.set $l7171 + local.get $l7170 + local.get $l7171 + i32.add + local.set $l7172 + local.get $l7171 + local.get $l7172 + i32.add + local.set $l7173 + local.get $l7172 + local.get $l7173 + i32.add + local.set $l7174 + local.get $l7173 + local.get $l7174 + i32.add + local.set $l7175 + local.get $l7174 + local.get $l7175 + i32.add + local.set $l7176 + local.get $l7175 + local.get $l7176 + i32.add + local.set $l7177 + local.get $l7176 + local.get $l7177 + i32.add + local.set $l7178 + local.get $l7177 + local.get $l7178 + i32.add + local.set $l7179 + local.get $l7178 + local.get $l7179 + i32.add + local.set $l7180 + local.get $l7179 + local.get $l7180 + i32.add + local.set $l7181 + local.get $l7180 + local.get $l7181 + i32.add + local.set $l7182 + local.get $l7181 + local.get $l7182 + i32.add + local.set $l7183 + local.get $l7182 + local.get $l7183 + i32.add + local.set $l7184 + local.get $l7183 + local.get $l7184 + i32.add + local.set $l7185 + local.get $l7184 + local.get $l7185 + i32.add + local.set $l7186 + local.get $l7185 + local.get $l7186 + i32.add + local.set $l7187 + local.get $l7186 + local.get $l7187 + i32.add + local.set $l7188 + local.get $l7187 + local.get $l7188 + i32.add + local.set $l7189 + local.get $l7188 + local.get $l7189 + i32.add + local.set $l7190 + local.get $l7189 + local.get $l7190 + i32.add + local.set $l7191 + local.get $l7190 + local.get $l7191 + i32.add + local.set $l7192 + local.get $l7191 + local.get $l7192 + i32.add + local.set $l7193 + local.get $l7192 + local.get $l7193 + i32.add + local.set $l7194 + local.get $l7193 + local.get $l7194 + i32.add + local.set $l7195 + local.get $l7194 + local.get $l7195 + i32.add + local.set $l7196 + local.get $l7195 + local.get $l7196 + i32.add + local.set $l7197 + local.get $l7196 + local.get $l7197 + i32.add + local.set $l7198 + local.get $l7197 + local.get $l7198 + i32.add + local.set $l7199 + local.get $l7198 + local.get $l7199 + i32.add + local.set $l7200 + local.get $l7199 + local.get $l7200 + i32.add + local.set $l7201 + local.get $l7200 + local.get $l7201 + i32.add + local.set $l7202 + local.get $l7201 + local.get $l7202 + i32.add + local.set $l7203 + local.get $l7202 + local.get $l7203 + i32.add + local.set $l7204 + local.get $l7203 + local.get $l7204 + i32.add + local.set $l7205 + local.get $l7204 + local.get $l7205 + i32.add + local.set $l7206 + local.get $l7205 + local.get $l7206 + i32.add + local.set $l7207 + local.get $l7206 + local.get $l7207 + i32.add + local.set $l7208 + local.get $l7207 + local.get $l7208 + i32.add + local.set $l7209 + local.get $l7208 + local.get $l7209 + i32.add + local.set $l7210 + local.get $l7209 + local.get $l7210 + i32.add + local.set $l7211 + local.get $l7210 + local.get $l7211 + i32.add + local.set $l7212 + local.get $l7211 + local.get $l7212 + i32.add + local.set $l7213 + local.get $l7212 + local.get $l7213 + i32.add + local.set $l7214 + local.get $l7213 + local.get $l7214 + i32.add + local.set $l7215 + local.get $l7214 + local.get $l7215 + i32.add + local.set $l7216 + local.get $l7215 + local.get $l7216 + i32.add + local.set $l7217 + local.get $l7216 + local.get $l7217 + i32.add + local.set $l7218 + local.get $l7217 + local.get $l7218 + i32.add + local.set $l7219 + local.get $l7218 + local.get $l7219 + i32.add + local.set $l7220 + local.get $l7219 + local.get $l7220 + i32.add + local.set $l7221 + local.get $l7220 + local.get $l7221 + i32.add + local.set $l7222 + local.get $l7221 + local.get $l7222 + i32.add + local.set $l7223 + local.get $l7222 + local.get $l7223 + i32.add + local.set $l7224 + local.get $l7223 + local.get $l7224 + i32.add + local.set $l7225 + local.get $l7224 + local.get $l7225 + i32.add + local.set $l7226 + local.get $l7225 + local.get $l7226 + i32.add + local.set $l7227 + local.get $l7226 + local.get $l7227 + i32.add + local.set $l7228 + local.get $l7227 + local.get $l7228 + i32.add + local.set $l7229 + local.get $l7228 + local.get $l7229 + i32.add + local.set $l7230 + local.get $l7229 + local.get $l7230 + i32.add + local.set $l7231 + local.get $l7230 + local.get $l7231 + i32.add + local.set $l7232 + local.get $l7231 + local.get $l7232 + i32.add + local.set $l7233 + local.get $l7232 + local.get $l7233 + i32.add + local.set $l7234 + local.get $l7233 + local.get $l7234 + i32.add + local.set $l7235 + local.get $l7234 + local.get $l7235 + i32.add + local.set $l7236 + local.get $l7235 + local.get $l7236 + i32.add + local.set $l7237 + local.get $l7236 + local.get $l7237 + i32.add + local.set $l7238 + local.get $l7237 + local.get $l7238 + i32.add + local.set $l7239 + local.get $l7238 + local.get $l7239 + i32.add + local.set $l7240 + local.get $l7239 + local.get $l7240 + i32.add + local.set $l7241 + local.get $l7240 + local.get $l7241 + i32.add + local.set $l7242 + local.get $l7241 + local.get $l7242 + i32.add + local.set $l7243 + local.get $l7242 + local.get $l7243 + i32.add + local.set $l7244 + local.get $l7243 + local.get $l7244 + i32.add + local.set $l7245 + local.get $l7244 + local.get $l7245 + i32.add + local.set $l7246 + local.get $l7245 + local.get $l7246 + i32.add + local.set $l7247 + local.get $l7246 + local.get $l7247 + i32.add + local.set $l7248 + local.get $l7247 + local.get $l7248 + i32.add + local.set $l7249 + local.get $l7248 + local.get $l7249 + i32.add + local.set $l7250 + local.get $l7249 + local.get $l7250 + i32.add + local.set $l7251 + local.get $l7250 + local.get $l7251 + i32.add + local.set $l7252 + local.get $l7251 + local.get $l7252 + i32.add + local.set $l7253 + local.get $l7252 + local.get $l7253 + i32.add + local.set $l7254 + local.get $l7253 + local.get $l7254 + i32.add + local.set $l7255 + local.get $l7254 + local.get $l7255 + i32.add + local.set $l7256 + local.get $l7255 + local.get $l7256 + i32.add + local.set $l7257 + local.get $l7256 + local.get $l7257 + i32.add + local.set $l7258 + local.get $l7257 + local.get $l7258 + i32.add + local.set $l7259 + local.get $l7258 + local.get $l7259 + i32.add + local.set $l7260 + local.get $l7259 + local.get $l7260 + i32.add + local.set $l7261 + local.get $l7260 + local.get $l7261 + i32.add + local.set $l7262 + local.get $l7261 + local.get $l7262 + i32.add + local.set $l7263 + local.get $l7262 + local.get $l7263 + i32.add + local.set $l7264 + local.get $l7263 + local.get $l7264 + i32.add + local.set $l7265 + local.get $l7264 + local.get $l7265 + i32.add + local.set $l7266 + local.get $l7265 + local.get $l7266 + i32.add + local.set $l7267 + local.get $l7266 + local.get $l7267 + i32.add + local.set $l7268 + local.get $l7267 + local.get $l7268 + i32.add + local.set $l7269 + local.get $l7268 + local.get $l7269 + i32.add + local.set $l7270 + local.get $l7269 + local.get $l7270 + i32.add + local.set $l7271 + local.get $l7270 + local.get $l7271 + i32.add + local.set $l7272 + local.get $l7271 + local.get $l7272 + i32.add + local.set $l7273 + local.get $l7272 + local.get $l7273 + i32.add + local.set $l7274 + local.get $l7273 + local.get $l7274 + i32.add + local.set $l7275 + local.get $l7274 + local.get $l7275 + i32.add + local.set $l7276 + local.get $l7275 + local.get $l7276 + i32.add + local.set $l7277 + local.get $l7276 + local.get $l7277 + i32.add + local.set $l7278 + local.get $l7277 + local.get $l7278 + i32.add + local.set $l7279 + local.get $l7278 + local.get $l7279 + i32.add + local.set $l7280 + local.get $l7279 + local.get $l7280 + i32.add + local.set $l7281 + local.get $l7280 + local.get $l7281 + i32.add + local.set $l7282 + local.get $l7281 + local.get $l7282 + i32.add + local.set $l7283 + local.get $l7282 + local.get $l7283 + i32.add + local.set $l7284 + local.get $l7283 + local.get $l7284 + i32.add + local.set $l7285 + local.get $l7284 + local.get $l7285 + i32.add + local.set $l7286 + local.get $l7285 + local.get $l7286 + i32.add + local.set $l7287 + local.get $l7286 + local.get $l7287 + i32.add + local.set $l7288 + local.get $l7287 + local.get $l7288 + i32.add + local.set $l7289 + local.get $l7288 + local.get $l7289 + i32.add + local.set $l7290 + local.get $l7289 + local.get $l7290 + i32.add + local.set $l7291 + local.get $l7290 + local.get $l7291 + i32.add + local.set $l7292 + local.get $l7291 + local.get $l7292 + i32.add + local.set $l7293 + local.get $l7292 + local.get $l7293 + i32.add + local.set $l7294 + local.get $l7293 + local.get $l7294 + i32.add + local.set $l7295 + local.get $l7294 + local.get $l7295 + i32.add + local.set $l7296 + local.get $l7295 + local.get $l7296 + i32.add + local.set $l7297 + local.get $l7296 + local.get $l7297 + i32.add + local.set $l7298 + local.get $l7297 + local.get $l7298 + i32.add + local.set $l7299 + local.get $l7298 + local.get $l7299 + i32.add + local.set $l7300 + local.get $l7299 + local.get $l7300 + i32.add + local.set $l7301 + local.get $l7300 + local.get $l7301 + i32.add + local.set $l7302 + local.get $l7301 + local.get $l7302 + i32.add + local.set $l7303 + local.get $l7302 + local.get $l7303 + i32.add + local.set $l7304 + local.get $l7303 + local.get $l7304 + i32.add + local.set $l7305 + local.get $l7304 + local.get $l7305 + i32.add + local.set $l7306 + local.get $l7305 + local.get $l7306 + i32.add + local.set $l7307 + local.get $l7306 + local.get $l7307 + i32.add + local.set $l7308 + local.get $l7307 + local.get $l7308 + i32.add + local.set $l7309 + local.get $l7308 + local.get $l7309 + i32.add + local.set $l7310 + local.get $l7309 + local.get $l7310 + i32.add + local.set $l7311 + local.get $l7310 + local.get $l7311 + i32.add + local.set $l7312 + local.get $l7311 + local.get $l7312 + i32.add + local.set $l7313 + local.get $l7312 + local.get $l7313 + i32.add + local.set $l7314 + local.get $l7313 + local.get $l7314 + i32.add + local.set $l7315 + local.get $l7314 + local.get $l7315 + i32.add + local.set $l7316 + local.get $l7315 + local.get $l7316 + i32.add + local.set $l7317 + local.get $l7316 + local.get $l7317 + i32.add + local.set $l7318 + local.get $l7317 + local.get $l7318 + i32.add + local.set $l7319 + local.get $l7318 + local.get $l7319 + i32.add + local.set $l7320 + local.get $l7319 + local.get $l7320 + i32.add + local.set $l7321 + local.get $l7320 + local.get $l7321 + i32.add + local.set $l7322 + local.get $l7321 + local.get $l7322 + i32.add + local.set $l7323 + local.get $l7322 + local.get $l7323 + i32.add + local.set $l7324 + local.get $l7323 + local.get $l7324 + i32.add + local.set $l7325 + local.get $l7324 + local.get $l7325 + i32.add + local.set $l7326 + local.get $l7325 + local.get $l7326 + i32.add + local.set $l7327 + local.get $l7326 + local.get $l7327 + i32.add + local.set $l7328 + local.get $l7327 + local.get $l7328 + i32.add + local.set $l7329 + local.get $l7328 + local.get $l7329 + i32.add + local.set $l7330 + local.get $l7329 + local.get $l7330 + i32.add + local.set $l7331 + local.get $l7330 + local.get $l7331 + i32.add + local.set $l7332 + local.get $l7331 + local.get $l7332 + i32.add + local.set $l7333 + local.get $l7332 + local.get $l7333 + i32.add + local.set $l7334 + local.get $l7333 + local.get $l7334 + i32.add + local.set $l7335 + local.get $l7334 + local.get $l7335 + i32.add + local.set $l7336 + local.get $l7335 + local.get $l7336 + i32.add + local.set $l7337 + local.get $l7336 + local.get $l7337 + i32.add + local.set $l7338 + local.get $l7337 + local.get $l7338 + i32.add + local.set $l7339 + local.get $l7338 + local.get $l7339 + i32.add + local.set $l7340 + local.get $l7339 + local.get $l7340 + i32.add + local.set $l7341 + local.get $l7340 + local.get $l7341 + i32.add + local.set $l7342 + local.get $l7341 + local.get $l7342 + i32.add + local.set $l7343 + local.get $l7342 + local.get $l7343 + i32.add + local.set $l7344 + local.get $l7343 + local.get $l7344 + i32.add + local.set $l7345 + local.get $l7344 + local.get $l7345 + i32.add + local.set $l7346 + local.get $l7345 + local.get $l7346 + i32.add + local.set $l7347 + local.get $l7346 + local.get $l7347 + i32.add + local.set $l7348 + local.get $l7347 + local.get $l7348 + i32.add + local.set $l7349 + local.get $l7348 + local.get $l7349 + i32.add + local.set $l7350 + local.get $l7349 + local.get $l7350 + i32.add + local.set $l7351 + local.get $l7350 + local.get $l7351 + i32.add + local.set $l7352 + local.get $l7351 + local.get $l7352 + i32.add + local.set $l7353 + local.get $l7352 + local.get $l7353 + i32.add + local.set $l7354 + local.get $l7353 + local.get $l7354 + i32.add + local.set $l7355 + local.get $l7354 + local.get $l7355 + i32.add + local.set $l7356 + local.get $l7355 + local.get $l7356 + i32.add + local.set $l7357 + local.get $l7356 + local.get $l7357 + i32.add + local.set $l7358 + local.get $l7357 + local.get $l7358 + i32.add + local.set $l7359 + local.get $l7358 + local.get $l7359 + i32.add + local.set $l7360 + local.get $l7359 + local.get $l7360 + i32.add + local.set $l7361 + local.get $l7360 + local.get $l7361 + i32.add + local.set $l7362 + local.get $l7361 + local.get $l7362 + i32.add + local.set $l7363 + local.get $l7362 + local.get $l7363 + i32.add + local.set $l7364 + local.get $l7363 + local.get $l7364 + i32.add + local.set $l7365 + local.get $l7364 + local.get $l7365 + i32.add + local.set $l7366 + local.get $l7365 + local.get $l7366 + i32.add + local.set $l7367 + local.get $l7366 + local.get $l7367 + i32.add + local.set $l7368 + local.get $l7367 + local.get $l7368 + i32.add + local.set $l7369 + local.get $l7368 + local.get $l7369 + i32.add + local.set $l7370 + local.get $l7369 + local.get $l7370 + i32.add + local.set $l7371 + local.get $l7370 + local.get $l7371 + i32.add + local.set $l7372 + local.get $l7371 + local.get $l7372 + i32.add + local.set $l7373 + local.get $l7372 + local.get $l7373 + i32.add + local.set $l7374 + local.get $l7373 + local.get $l7374 + i32.add + local.set $l7375 + local.get $l7374 + local.get $l7375 + i32.add + local.set $l7376 + local.get $l7375 + local.get $l7376 + i32.add + local.set $l7377 + local.get $l7376 + local.get $l7377 + i32.add + local.set $l7378 + local.get $l7377 + local.get $l7378 + i32.add + local.set $l7379 + local.get $l7378 + local.get $l7379 + i32.add + local.set $l7380 + local.get $l7379 + local.get $l7380 + i32.add + local.set $l7381 + local.get $l7380 + local.get $l7381 + i32.add + local.set $l7382 + local.get $l7381 + local.get $l7382 + i32.add + local.set $l7383 + local.get $l7382 + local.get $l7383 + i32.add + local.set $l7384 + local.get $l7383 + local.get $l7384 + i32.add + local.set $l7385 + local.get $l7384 + local.get $l7385 + i32.add + local.set $l7386 + local.get $l7385 + local.get $l7386 + i32.add + local.set $l7387 + local.get $l7386 + local.get $l7387 + i32.add + local.set $l7388 + local.get $l7387 + local.get $l7388 + i32.add + local.set $l7389 + local.get $l7388 + local.get $l7389 + i32.add + local.set $l7390 + local.get $l7389 + local.get $l7390 + i32.add + local.set $l7391 + local.get $l7390 + local.get $l7391 + i32.add + local.set $l7392 + local.get $l7391 + local.get $l7392 + i32.add + local.set $l7393 + local.get $l7392 + local.get $l7393 + i32.add + local.set $l7394 + local.get $l7393 + local.get $l7394 + i32.add + local.set $l7395 + local.get $l7394 + local.get $l7395 + i32.add + local.set $l7396 + local.get $l7395 + local.get $l7396 + i32.add + local.set $l7397 + local.get $l7396 + local.get $l7397 + i32.add + local.set $l7398 + local.get $l7397 + local.get $l7398 + i32.add + local.set $l7399 + local.get $l7398 + local.get $l7399 + i32.add + local.set $l7400 + local.get $l7399 + local.get $l7400 + i32.add + local.set $l7401 + local.get $l7400 + local.get $l7401 + i32.add + local.set $l7402 + local.get $l7401 + local.get $l7402 + i32.add + local.set $l7403 + local.get $l7402 + local.get $l7403 + i32.add + local.set $l7404 + local.get $l7403 + local.get $l7404 + i32.add + local.set $l7405 + local.get $l7404 + local.get $l7405 + i32.add + local.set $l7406 + local.get $l7405 + local.get $l7406 + i32.add + local.set $l7407 + local.get $l7406 + local.get $l7407 + i32.add + local.set $l7408 + local.get $l7407 + local.get $l7408 + i32.add + local.set $l7409 + local.get $l7408 + local.get $l7409 + i32.add + local.set $l7410 + local.get $l7409 + local.get $l7410 + i32.add + local.set $l7411 + local.get $l7410 + local.get $l7411 + i32.add + local.set $l7412 + local.get $l7411 + local.get $l7412 + i32.add + local.set $l7413 + local.get $l7412 + local.get $l7413 + i32.add + local.set $l7414 + local.get $l7413 + local.get $l7414 + i32.add + local.set $l7415 + local.get $l7414 + local.get $l7415 + i32.add + local.set $l7416 + local.get $l7415 + local.get $l7416 + i32.add + local.set $l7417 + local.get $l7416 + local.get $l7417 + i32.add + local.set $l7418 + local.get $l7417 + local.get $l7418 + i32.add + local.set $l7419 + local.get $l7418 + local.get $l7419 + i32.add + local.set $l7420 + local.get $l7419 + local.get $l7420 + i32.add + local.set $l7421 + local.get $l7420 + local.get $l7421 + i32.add + local.set $l7422 + local.get $l7421 + local.get $l7422 + i32.add + local.set $l7423 + local.get $l7422 + local.get $l7423 + i32.add + local.set $l7424 + local.get $l7423 + local.get $l7424 + i32.add + local.set $l7425 + local.get $l7424 + local.get $l7425 + i32.add + local.set $l7426 + local.get $l7425 + local.get $l7426 + i32.add + local.set $l7427 + local.get $l7426 + local.get $l7427 + i32.add + local.set $l7428 + local.get $l7427 + local.get $l7428 + i32.add + local.set $l7429 + local.get $l7428 + local.get $l7429 + i32.add + local.set $l7430 + local.get $l7429 + local.get $l7430 + i32.add + local.set $l7431 + local.get $l7430 + local.get $l7431 + i32.add + local.set $l7432 + local.get $l7431 + local.get $l7432 + i32.add + local.set $l7433 + local.get $l7432 + local.get $l7433 + i32.add + local.set $l7434 + local.get $l7433 + local.get $l7434 + i32.add + local.set $l7435 + local.get $l7434 + local.get $l7435 + i32.add + local.set $l7436 + local.get $l7435 + local.get $l7436 + i32.add + local.set $l7437 + local.get $l7436 + local.get $l7437 + i32.add + local.set $l7438 + local.get $l7437 + local.get $l7438 + i32.add + local.set $l7439 + local.get $l7438 + local.get $l7439 + i32.add + local.set $l7440 + local.get $l7439 + local.get $l7440 + i32.add + local.set $l7441 + local.get $l7440 + local.get $l7441 + i32.add + local.set $l7442 + local.get $l7441 + local.get $l7442 + i32.add + local.set $l7443 + local.get $l7442 + local.get $l7443 + i32.add + local.set $l7444 + local.get $l7443 + local.get $l7444 + i32.add + local.set $l7445 + local.get $l7444 + local.get $l7445 + i32.add + local.set $l7446 + local.get $l7445 + local.get $l7446 + i32.add + local.set $l7447 + local.get $l7446 + local.get $l7447 + i32.add + local.set $l7448 + local.get $l7447 + local.get $l7448 + i32.add + local.set $l7449 + local.get $l7448 + local.get $l7449 + i32.add + local.set $l7450 + local.get $l7449 + local.get $l7450 + i32.add + local.set $l7451 + local.get $l7450 + local.get $l7451 + i32.add + local.set $l7452 + local.get $l7451 + local.get $l7452 + i32.add + local.set $l7453 + local.get $l7452 + local.get $l7453 + i32.add + local.set $l7454 + local.get $l7453 + local.get $l7454 + i32.add + local.set $l7455 + local.get $l7454 + local.get $l7455 + i32.add + local.set $l7456 + local.get $l7455 + local.get $l7456 + i32.add + local.set $l7457 + local.get $l7456 + local.get $l7457 + i32.add + local.set $l7458 + local.get $l7457 + local.get $l7458 + i32.add + local.set $l7459 + local.get $l7458 + local.get $l7459 + i32.add + local.set $l7460 + local.get $l7459 + local.get $l7460 + i32.add + local.set $l7461 + local.get $l7460 + local.get $l7461 + i32.add + local.set $l7462 + local.get $l7461 + local.get $l7462 + i32.add + local.set $l7463 + local.get $l7462 + local.get $l7463 + i32.add + local.set $l7464 + local.get $l7463 + local.get $l7464 + i32.add + local.set $l7465 + local.get $l7464 + local.get $l7465 + i32.add + local.set $l7466 + local.get $l7465 + local.get $l7466 + i32.add + local.set $l7467 + local.get $l7466 + local.get $l7467 + i32.add + local.set $l7468 + local.get $l7467 + local.get $l7468 + i32.add + local.set $l7469 + local.get $l7468 + local.get $l7469 + i32.add + local.set $l7470 + local.get $l7469 + local.get $l7470 + i32.add + local.set $l7471 + local.get $l7470 + local.get $l7471 + i32.add + local.set $l7472 + local.get $l7471 + local.get $l7472 + i32.add + local.set $l7473 + local.get $l7472 + local.get $l7473 + i32.add + local.set $l7474 + local.get $l7473 + local.get $l7474 + i32.add + local.set $l7475 + local.get $l7474 + local.get $l7475 + i32.add + local.set $l7476 + local.get $l7475 + local.get $l7476 + i32.add + local.set $l7477 + local.get $l7476 + local.get $l7477 + i32.add + local.set $l7478 + local.get $l7477 + local.get $l7478 + i32.add + local.set $l7479 + local.get $l7478 + local.get $l7479 + i32.add + local.set $l7480 + local.get $l7479 + local.get $l7480 + i32.add + local.set $l7481 + local.get $l7480 + local.get $l7481 + i32.add + local.set $l7482 + local.get $l7481 + local.get $l7482 + i32.add + local.set $l7483 + local.get $l7482 + local.get $l7483 + i32.add + local.set $l7484 + local.get $l7483 + local.get $l7484 + i32.add + local.set $l7485 + local.get $l7484 + local.get $l7485 + i32.add + local.set $l7486 + local.get $l7485 + local.get $l7486 + i32.add + local.set $l7487 + local.get $l7486 + local.get $l7487 + i32.add + local.set $l7488 + local.get $l7487 + local.get $l7488 + i32.add + local.set $l7489 + local.get $l7488 + local.get $l7489 + i32.add + local.set $l7490 + local.get $l7489 + local.get $l7490 + i32.add + local.set $l7491 + local.get $l7490 + local.get $l7491 + i32.add + local.set $l7492 + local.get $l7491 + local.get $l7492 + i32.add + local.set $l7493 + local.get $l7492 + local.get $l7493 + i32.add + local.set $l7494 + local.get $l7493 + local.get $l7494 + i32.add + local.set $l7495 + local.get $l7494 + local.get $l7495 + i32.add + local.set $l7496 + local.get $l7495 + local.get $l7496 + i32.add + local.set $l7497 + local.get $l7496 + local.get $l7497 + i32.add + local.set $l7498 + local.get $l7497 + local.get $l7498 + i32.add + local.set $l7499 + local.get $l7498 + local.get $l7499 + i32.add + local.set $l7500 + local.get $l7499 + local.get $l7500 + i32.add + local.set $l7501 + local.get $l7500 + local.get $l7501 + i32.add + local.set $l7502 + local.get $l7501 + local.get $l7502 + i32.add + local.set $l7503 + local.get $l7502 + local.get $l7503 + i32.add + local.set $l7504 + local.get $l7503 + local.get $l7504 + i32.add + local.set $l7505 + local.get $l7504 + local.get $l7505 + i32.add + local.set $l7506 + local.get $l7505 + local.get $l7506 + i32.add + local.set $l7507 + local.get $l7506 + local.get $l7507 + i32.add + local.set $l7508 + local.get $l7507 + local.get $l7508 + i32.add + local.set $l7509 + local.get $l7508 + local.get $l7509 + i32.add + local.set $l7510 + local.get $l7509 + local.get $l7510 + i32.add + local.set $l7511 + local.get $l7510 + local.get $l7511 + i32.add + local.set $l7512 + local.get $l7511 + local.get $l7512 + i32.add + local.set $l7513 + local.get $l7512 + local.get $l7513 + i32.add + local.set $l7514 + local.get $l7513 + local.get $l7514 + i32.add + local.set $l7515 + local.get $l7514 + local.get $l7515 + i32.add + local.set $l7516 + local.get $l7515 + local.get $l7516 + i32.add + local.set $l7517 + local.get $l7516 + local.get $l7517 + i32.add + local.set $l7518 + local.get $l7517 + local.get $l7518 + i32.add + local.set $l7519 + local.get $l7518 + local.get $l7519 + i32.add + local.set $l7520 + local.get $l7519 + local.get $l7520 + i32.add + local.set $l7521 + local.get $l7520 + local.get $l7521 + i32.add + local.set $l7522 + local.get $l7521 + local.get $l7522 + i32.add + local.set $l7523 + local.get $l7522 + local.get $l7523 + i32.add + local.set $l7524 + local.get $l7523 + local.get $l7524 + i32.add + local.set $l7525 + local.get $l7524 + local.get $l7525 + i32.add + local.set $l7526 + local.get $l7525 + local.get $l7526 + i32.add + local.set $l7527 + local.get $l7526 + local.get $l7527 + i32.add + local.set $l7528 + local.get $l7527 + local.get $l7528 + i32.add + local.set $l7529 + local.get $l7528 + local.get $l7529 + i32.add + local.set $l7530 + local.get $l7529 + local.get $l7530 + i32.add + local.set $l7531 + local.get $l7530 + local.get $l7531 + i32.add + local.set $l7532 + local.get $l7531 + local.get $l7532 + i32.add + local.set $l7533 + local.get $l7532 + local.get $l7533 + i32.add + local.set $l7534 + local.get $l7533 + local.get $l7534 + i32.add + local.set $l7535 + local.get $l7534 + local.get $l7535 + i32.add + local.set $l7536 + local.get $l7535 + local.get $l7536 + i32.add + local.set $l7537 + local.get $l7536 + local.get $l7537 + i32.add + local.set $l7538 + local.get $l7537 + local.get $l7538 + i32.add + local.set $l7539 + local.get $l7538 + local.get $l7539 + i32.add + local.set $l7540 + local.get $l7539 + local.get $l7540 + i32.add + local.set $l7541 + local.get $l7540 + local.get $l7541 + i32.add + local.set $l7542 + local.get $l7541 + local.get $l7542 + i32.add + local.set $l7543 + local.get $l7542 + local.get $l7543 + i32.add + local.set $l7544 + local.get $l7543 + local.get $l7544 + i32.add + local.set $l7545 + local.get $l7544 + local.get $l7545 + i32.add + local.set $l7546 + local.get $l7545 + local.get $l7546 + i32.add + local.set $l7547 + local.get $l7546 + local.get $l7547 + i32.add + local.set $l7548 + local.get $l7547 + local.get $l7548 + i32.add + local.set $l7549 + local.get $l7548 + local.get $l7549 + i32.add + local.set $l7550 + local.get $l7549 + local.get $l7550 + i32.add + local.set $l7551 + local.get $l7550 + local.get $l7551 + i32.add + local.set $l7552 + local.get $l7551 + local.get $l7552 + i32.add + local.set $l7553 + local.get $l7552 + local.get $l7553 + i32.add + local.set $l7554 + local.get $l7553 + local.get $l7554 + i32.add + local.set $l7555 + local.get $l7554 + local.get $l7555 + i32.add + local.set $l7556 + local.get $l7555 + local.get $l7556 + i32.add + local.set $l7557 + local.get $l7556 + local.get $l7557 + i32.add + local.set $l7558 + local.get $l7557 + local.get $l7558 + i32.add + local.set $l7559 + local.get $l7558 + local.get $l7559 + i32.add + local.set $l7560 + local.get $l7559 + local.get $l7560 + i32.add + local.set $l7561 + local.get $l7560 + local.get $l7561 + i32.add + local.set $l7562 + local.get $l7561 + local.get $l7562 + i32.add + local.set $l7563 + local.get $l7562 + local.get $l7563 + i32.add + local.set $l7564 + local.get $l7563 + local.get $l7564 + i32.add + local.set $l7565 + local.get $l7564 + local.get $l7565 + i32.add + local.set $l7566 + local.get $l7565 + local.get $l7566 + i32.add + local.set $l7567 + local.get $l7566 + local.get $l7567 + i32.add + local.set $l7568 + local.get $l7567 + local.get $l7568 + i32.add + local.set $l7569 + local.get $l7568 + local.get $l7569 + i32.add + local.set $l7570 + local.get $l7569 + local.get $l7570 + i32.add + local.set $l7571 + local.get $l7570 + local.get $l7571 + i32.add + local.set $l7572 + local.get $l7571 + local.get $l7572 + i32.add + local.set $l7573 + local.get $l7572 + local.get $l7573 + i32.add + local.set $l7574 + local.get $l7573 + local.get $l7574 + i32.add + local.set $l7575 + local.get $l7574 + local.get $l7575 + i32.add + local.set $l7576 + local.get $l7575 + local.get $l7576 + i32.add + local.set $l7577 + local.get $l7576 + local.get $l7577 + i32.add + local.set $l7578 + local.get $l7577 + local.get $l7578 + i32.add + local.set $l7579 + local.get $l7578 + local.get $l7579 + i32.add + local.set $l7580 + local.get $l7579 + local.get $l7580 + i32.add + local.set $l7581 + local.get $l7580 + local.get $l7581 + i32.add + local.set $l7582 + local.get $l7581 + local.get $l7582 + i32.add + local.set $l7583 + local.get $l7582 + local.get $l7583 + i32.add + local.set $l7584 + local.get $l7583 + local.get $l7584 + i32.add + local.set $l7585 + local.get $l7584 + local.get $l7585 + i32.add + local.set $l7586 + local.get $l7585 + local.get $l7586 + i32.add + local.set $l7587 + local.get $l7586 + local.get $l7587 + i32.add + local.set $l7588 + local.get $l7587 + local.get $l7588 + i32.add + local.set $l7589 + local.get $l7588 + local.get $l7589 + i32.add + local.set $l7590 + local.get $l7589 + local.get $l7590 + i32.add + local.set $l7591 + local.get $l7590 + local.get $l7591 + i32.add + local.set $l7592 + local.get $l7591 + local.get $l7592 + i32.add + local.set $l7593 + local.get $l7592 + local.get $l7593 + i32.add + local.set $l7594 + local.get $l7593 + local.get $l7594 + i32.add + local.set $l7595 + local.get $l7594 + local.get $l7595 + i32.add + local.set $l7596 + local.get $l7595 + local.get $l7596 + i32.add + local.set $l7597 + local.get $l7596 + local.get $l7597 + i32.add + local.set $l7598 + local.get $l7597 + local.get $l7598 + i32.add + local.set $l7599 + local.get $l7598 + local.get $l7599 + i32.add + local.set $l7600 + local.get $l7599 + local.get $l7600 + i32.add + local.set $l7601 + local.get $l7600 + local.get $l7601 + i32.add + local.set $l7602 + local.get $l7601 + local.get $l7602 + i32.add + local.set $l7603 + local.get $l7602 + local.get $l7603 + i32.add + local.set $l7604 + local.get $l7603 + local.get $l7604 + i32.add + local.set $l7605 + local.get $l7604 + local.get $l7605 + i32.add + local.set $l7606 + local.get $l7605 + local.get $l7606 + i32.add + local.set $l7607 + local.get $l7606 + local.get $l7607 + i32.add + local.set $l7608 + local.get $l7607 + local.get $l7608 + i32.add + local.set $l7609 + local.get $l7608 + local.get $l7609 + i32.add + local.set $l7610 + local.get $l7609 + local.get $l7610 + i32.add + local.set $l7611 + local.get $l7610 + local.get $l7611 + i32.add + local.set $l7612 + local.get $l7611 + local.get $l7612 + i32.add + local.set $l7613 + local.get $l7612 + local.get $l7613 + i32.add + local.set $l7614 + local.get $l7613 + local.get $l7614 + i32.add + local.set $l7615 + local.get $l7614 + local.get $l7615 + i32.add + local.set $l7616 + local.get $l7615 + local.get $l7616 + i32.add + local.set $l7617 + local.get $l7616 + local.get $l7617 + i32.add + local.set $l7618 + local.get $l7617 + local.get $l7618 + i32.add + local.set $l7619 + local.get $l7618 + local.get $l7619 + i32.add + local.set $l7620 + local.get $l7619 + local.get $l7620 + i32.add + local.set $l7621 + local.get $l7620 + local.get $l7621 + i32.add + local.set $l7622 + local.get $l7621 + local.get $l7622 + i32.add + local.set $l7623 + local.get $l7622 + local.get $l7623 + i32.add + local.set $l7624 + local.get $l7623 + local.get $l7624 + i32.add + local.set $l7625 + local.get $l7624 + local.get $l7625 + i32.add + local.set $l7626 + local.get $l7625 + local.get $l7626 + i32.add + local.set $l7627 + local.get $l7626 + local.get $l7627 + i32.add + local.set $l7628 + local.get $l7627 + local.get $l7628 + i32.add + local.set $l7629 + local.get $l7628 + local.get $l7629 + i32.add + local.set $l7630 + local.get $l7629 + local.get $l7630 + i32.add + local.set $l7631 + local.get $l7630 + local.get $l7631 + i32.add + local.set $l7632 + local.get $l7631 + local.get $l7632 + i32.add + local.set $l7633 + local.get $l7632 + local.get $l7633 + i32.add + local.set $l7634 + local.get $l7633 + local.get $l7634 + i32.add + local.set $l7635 + local.get $l7634 + local.get $l7635 + i32.add + local.set $l7636 + local.get $l7635 + local.get $l7636 + i32.add + local.set $l7637 + local.get $l7636 + local.get $l7637 + i32.add + local.set $l7638 + local.get $l7637 + local.get $l7638 + i32.add + local.set $l7639 + local.get $l7638 + local.get $l7639 + i32.add + local.set $l7640 + local.get $l7639 + local.get $l7640 + i32.add + local.set $l7641 + local.get $l7640 + local.get $l7641 + i32.add + local.set $l7642 + local.get $l7641 + local.get $l7642 + i32.add + local.set $l7643 + local.get $l7642 + local.get $l7643 + i32.add + local.set $l7644 + local.get $l7643 + local.get $l7644 + i32.add + local.set $l7645 + local.get $l7644 + local.get $l7645 + i32.add + local.set $l7646 + local.get $l7645 + local.get $l7646 + i32.add + local.set $l7647 + local.get $l7646 + local.get $l7647 + i32.add + local.set $l7648 + local.get $l7647 + local.get $l7648 + i32.add + local.set $l7649 + local.get $l7648 + local.get $l7649 + i32.add + local.set $l7650 + local.get $l7649 + local.get $l7650 + i32.add + local.set $l7651 + local.get $l7650 + local.get $l7651 + i32.add + local.set $l7652 + local.get $l7651 + local.get $l7652 + i32.add + local.set $l7653 + local.get $l7652 + local.get $l7653 + i32.add + local.set $l7654 + local.get $l7653 + local.get $l7654 + i32.add + local.set $l7655 + local.get $l7654 + local.get $l7655 + i32.add + local.set $l7656 + local.get $l7655 + local.get $l7656 + i32.add + local.set $l7657 + local.get $l7656 + local.get $l7657 + i32.add + local.set $l7658 + local.get $l7657 + local.get $l7658 + i32.add + local.set $l7659 + local.get $l7658 + local.get $l7659 + i32.add + local.set $l7660 + local.get $l7659 + local.get $l7660 + i32.add + local.set $l7661 + local.get $l7660 + local.get $l7661 + i32.add + local.set $l7662 + local.get $l7661 + local.get $l7662 + i32.add + local.set $l7663 + local.get $l7662 + local.get $l7663 + i32.add + local.set $l7664 + local.get $l7663 + local.get $l7664 + i32.add + local.set $l7665 + local.get $l7664 + local.get $l7665 + i32.add + local.set $l7666 + local.get $l7665 + local.get $l7666 + i32.add + local.set $l7667 + local.get $l7666 + local.get $l7667 + i32.add + local.set $l7668 + local.get $l7667 + local.get $l7668 + i32.add + local.set $l7669 + local.get $l7668 + local.get $l7669 + i32.add + local.set $l7670 + local.get $l7669 + local.get $l7670 + i32.add + local.set $l7671 + local.get $l7670 + local.get $l7671 + i32.add + local.set $l7672 + local.get $l7671 + local.get $l7672 + i32.add + local.set $l7673 + local.get $l7672 + local.get $l7673 + i32.add + local.set $l7674 + local.get $l7673 + local.get $l7674 + i32.add + local.set $l7675 + local.get $l7674 + local.get $l7675 + i32.add + local.set $l7676 + local.get $l7675 + local.get $l7676 + i32.add + local.set $l7677 + local.get $l7676 + local.get $l7677 + i32.add + local.set $l7678 + local.get $l7677 + local.get $l7678 + i32.add + local.set $l7679 + local.get $l7678 + local.get $l7679 + i32.add + local.set $l7680 + local.get $l7679 + local.get $l7680 + i32.add + local.set $l7681 + local.get $l7680 + local.get $l7681 + i32.add + local.set $l7682 + local.get $l7681 + local.get $l7682 + i32.add + local.set $l7683 + local.get $l7682 + local.get $l7683 + i32.add + local.set $l7684 + local.get $l7683 + local.get $l7684 + i32.add + local.set $l7685 + local.get $l7684 + local.get $l7685 + i32.add + local.set $l7686 + local.get $l7685 + local.get $l7686 + i32.add + local.set $l7687 + local.get $l7686 + local.get $l7687 + i32.add + local.set $l7688 + local.get $l7687 + local.get $l7688 + i32.add + local.set $l7689 + local.get $l7688 + local.get $l7689 + i32.add + local.set $l7690 + local.get $l7689 + local.get $l7690 + i32.add + local.set $l7691 + local.get $l7690 + local.get $l7691 + i32.add + local.set $l7692 + local.get $l7691 + local.get $l7692 + i32.add + local.set $l7693 + local.get $l7692 + local.get $l7693 + i32.add + local.set $l7694 + local.get $l7693 + local.get $l7694 + i32.add + local.set $l7695 + local.get $l7694 + local.get $l7695 + i32.add + local.set $l7696 + local.get $l7695 + local.get $l7696 + i32.add + local.set $l7697 + local.get $l7696 + local.get $l7697 + i32.add + local.set $l7698 + local.get $l7697 + local.get $l7698 + i32.add + local.set $l7699 + local.get $l7698 + local.get $l7699 + i32.add + local.set $l7700 + local.get $l7699 + local.get $l7700 + i32.add + local.set $l7701 + local.get $l7700 + local.get $l7701 + i32.add + local.set $l7702 + local.get $l7701 + local.get $l7702 + i32.add + local.set $l7703 + local.get $l7702 + local.get $l7703 + i32.add + local.set $l7704 + local.get $l7703 + local.get $l7704 + i32.add + local.set $l7705 + local.get $l7704 + local.get $l7705 + i32.add + local.set $l7706 + local.get $l7705 + local.get $l7706 + i32.add + local.set $l7707 + local.get $l7706 + local.get $l7707 + i32.add + local.set $l7708 + local.get $l7707 + local.get $l7708 + i32.add + local.set $l7709 + local.get $l7708 + local.get $l7709 + i32.add + local.set $l7710 + local.get $l7709 + local.get $l7710 + i32.add + local.set $l7711 + local.get $l7710 + local.get $l7711 + i32.add + local.set $l7712 + local.get $l7711 + local.get $l7712 + i32.add + local.set $l7713 + local.get $l7712 + local.get $l7713 + i32.add + local.set $l7714 + local.get $l7713 + local.get $l7714 + i32.add + local.set $l7715 + local.get $l7714 + local.get $l7715 + i32.add + local.set $l7716 + local.get $l7715 + local.get $l7716 + i32.add + local.set $l7717 + local.get $l7716 + local.get $l7717 + i32.add + local.set $l7718 + local.get $l7717 + local.get $l7718 + i32.add + local.set $l7719 + local.get $l7718 + local.get $l7719 + i32.add + local.set $l7720 + local.get $l7719 + local.get $l7720 + i32.add + local.set $l7721 + local.get $l7720 + local.get $l7721 + i32.add + local.set $l7722 + local.get $l7721 + local.get $l7722 + i32.add + local.set $l7723 + local.get $l7722 + local.get $l7723 + i32.add + local.set $l7724 + local.get $l7723 + local.get $l7724 + i32.add + local.set $l7725 + local.get $l7724 + local.get $l7725 + i32.add + local.set $l7726 + local.get $l7725 + local.get $l7726 + i32.add + local.set $l7727 + local.get $l7726 + local.get $l7727 + i32.add + local.set $l7728 + local.get $l7727 + local.get $l7728 + i32.add + local.set $l7729 + local.get $l7728 + local.get $l7729 + i32.add + local.set $l7730 + local.get $l7729 + local.get $l7730 + i32.add + local.set $l7731 + local.get $l7730 + local.get $l7731 + i32.add + local.set $l7732 + local.get $l7731 + local.get $l7732 + i32.add + local.set $l7733 + local.get $l7732 + local.get $l7733 + i32.add + local.set $l7734 + local.get $l7733 + local.get $l7734 + i32.add + local.set $l7735 + local.get $l7734 + local.get $l7735 + i32.add + local.set $l7736 + local.get $l7735 + local.get $l7736 + i32.add + local.set $l7737 + local.get $l7736 + local.get $l7737 + i32.add + local.set $l7738 + local.get $l7737 + local.get $l7738 + i32.add + local.set $l7739 + local.get $l7738 + local.get $l7739 + i32.add + local.set $l7740 + local.get $l7739 + local.get $l7740 + i32.add + local.set $l7741 + local.get $l7740 + local.get $l7741 + i32.add + local.set $l7742 + local.get $l7741 + local.get $l7742 + i32.add + local.set $l7743 + local.get $l7742 + local.get $l7743 + i32.add + local.set $l7744 + local.get $l7743 + local.get $l7744 + i32.add + local.set $l7745 + local.get $l7744 + local.get $l7745 + i32.add + local.set $l7746 + local.get $l7745 + local.get $l7746 + i32.add + local.set $l7747 + local.get $l7746 + local.get $l7747 + i32.add + local.set $l7748 + local.get $l7747 + local.get $l7748 + i32.add + local.set $l7749 + local.get $l7748 + local.get $l7749 + i32.add + local.set $l7750 + local.get $l7749 + local.get $l7750 + i32.add + local.set $l7751 + local.get $l7750 + local.get $l7751 + i32.add + local.set $l7752 + local.get $l7751 + local.get $l7752 + i32.add + local.set $l7753 + local.get $l7752 + local.get $l7753 + i32.add + local.set $l7754 + local.get $l7753 + local.get $l7754 + i32.add + local.set $l7755 + local.get $l7754 + local.get $l7755 + i32.add + local.set $l7756 + local.get $l7755 + local.get $l7756 + i32.add + local.set $l7757 + local.get $l7756 + local.get $l7757 + i32.add + local.set $l7758 + local.get $l7757 + local.get $l7758 + i32.add + local.set $l7759 + local.get $l7758 + local.get $l7759 + i32.add + local.set $l7760 + local.get $l7759 + local.get $l7760 + i32.add + local.set $l7761 + local.get $l7760 + local.get $l7761 + i32.add + local.set $l7762 + local.get $l7761 + local.get $l7762 + i32.add + local.set $l7763 + local.get $l7762 + local.get $l7763 + i32.add + local.set $l7764 + local.get $l7763 + local.get $l7764 + i32.add + local.set $l7765 + local.get $l7764 + local.get $l7765 + i32.add + local.set $l7766 + local.get $l7765 + local.get $l7766 + i32.add + local.set $l7767 + local.get $l7766 + local.get $l7767 + i32.add + local.set $l7768 + local.get $l7767 + local.get $l7768 + i32.add + local.set $l7769 + local.get $l7768 + local.get $l7769 + i32.add + local.set $l7770 + local.get $l7769 + local.get $l7770 + i32.add + local.set $l7771 + local.get $l7770 + local.get $l7771 + i32.add + local.set $l7772 + local.get $l7771 + local.get $l7772 + i32.add + local.set $l7773 + local.get $l7772 + local.get $l7773 + i32.add + local.set $l7774 + local.get $l7773 + local.get $l7774 + i32.add + local.set $l7775 + local.get $l7774 + local.get $l7775 + i32.add + local.set $l7776 + local.get $l7775 + local.get $l7776 + i32.add + local.set $l7777 + local.get $l7776 + local.get $l7777 + i32.add + local.set $l7778 + local.get $l7777 + local.get $l7778 + i32.add + local.set $l7779 + local.get $l7778 + local.get $l7779 + i32.add + local.set $l7780 + local.get $l7779 + local.get $l7780 + i32.add + local.set $l7781 + local.get $l7780 + local.get $l7781 + i32.add + local.set $l7782 + local.get $l7781 + local.get $l7782 + i32.add + local.set $l7783 + local.get $l7782 + local.get $l7783 + i32.add + local.set $l7784 + local.get $l7783 + local.get $l7784 + i32.add + local.set $l7785 + local.get $l7784 + local.get $l7785 + i32.add + local.set $l7786 + local.get $l7785 + local.get $l7786 + i32.add + local.set $l7787 + local.get $l7786 + local.get $l7787 + i32.add + local.set $l7788 + local.get $l7787 + local.get $l7788 + i32.add + local.set $l7789 + local.get $l7788 + local.get $l7789 + i32.add + local.set $l7790 + local.get $l7789 + local.get $l7790 + i32.add + local.set $l7791 + local.get $l7790 + local.get $l7791 + i32.add + local.set $l7792 + local.get $l7791 + local.get $l7792 + i32.add + local.set $l7793 + local.get $l7792 + local.get $l7793 + i32.add + local.set $l7794 + local.get $l7793 + local.get $l7794 + i32.add + local.set $l7795 + local.get $l7794 + local.get $l7795 + i32.add + local.set $l7796 + local.get $l7795 + local.get $l7796 + i32.add + local.set $l7797 + local.get $l7796 + local.get $l7797 + i32.add + local.set $l7798 + local.get $l7797 + local.get $l7798 + i32.add + local.set $l7799 + local.get $l7798 + local.get $l7799 + i32.add + local.set $l7800 + local.get $l7799 + local.get $l7800 + i32.add + local.set $l7801 + local.get $l7800 + local.get $l7801 + i32.add + local.set $l7802 + local.get $l7801 + local.get $l7802 + i32.add + local.set $l7803 + local.get $l7802 + local.get $l7803 + i32.add + local.set $l7804 + local.get $l7803 + local.get $l7804 + i32.add + local.set $l7805 + local.get $l7804 + local.get $l7805 + i32.add + local.set $l7806 + local.get $l7805 + local.get $l7806 + i32.add + local.set $l7807 + local.get $l7806 + local.get $l7807 + i32.add + local.set $l7808 + local.get $l7807 + local.get $l7808 + i32.add + local.set $l7809 + local.get $l7808 + local.get $l7809 + i32.add + local.set $l7810 + local.get $l7809 + local.get $l7810 + i32.add + local.set $l7811 + local.get $l7810 + local.get $l7811 + i32.add + local.set $l7812 + local.get $l7811 + local.get $l7812 + i32.add + local.set $l7813 + local.get $l7812 + local.get $l7813 + i32.add + local.set $l7814 + local.get $l7813 + local.get $l7814 + i32.add + local.set $l7815 + local.get $l7814 + local.get $l7815 + i32.add + local.set $l7816 + local.get $l7815 + local.get $l7816 + i32.add + local.set $l7817 + local.get $l7816 + local.get $l7817 + i32.add + local.set $l7818 + local.get $l7817 + local.get $l7818 + i32.add + local.set $l7819 + local.get $l7818 + local.get $l7819 + i32.add + local.set $l7820 + local.get $l7819 + local.get $l7820 + i32.add + local.set $l7821 + local.get $l7820 + local.get $l7821 + i32.add + local.set $l7822 + local.get $l7821 + local.get $l7822 + i32.add + local.set $l7823 + local.get $l7822 + local.get $l7823 + i32.add + local.set $l7824 + local.get $l7823 + local.get $l7824 + i32.add + local.set $l7825 + local.get $l7824 + local.get $l7825 + i32.add + local.set $l7826 + local.get $l7825 + local.get $l7826 + i32.add + local.set $l7827 + local.get $l7826 + local.get $l7827 + i32.add + local.set $l7828 + local.get $l7827 + local.get $l7828 + i32.add + local.set $l7829 + local.get $l7828 + local.get $l7829 + i32.add + local.set $l7830 + local.get $l7829 + local.get $l7830 + i32.add + local.set $l7831 + local.get $l7830 + local.get $l7831 + i32.add + local.set $l7832 + local.get $l7831 + local.get $l7832 + i32.add + local.set $l7833 + local.get $l7832 + local.get $l7833 + i32.add + local.set $l7834 + local.get $l7833 + local.get $l7834 + i32.add + local.set $l7835 + local.get $l7834 + local.get $l7835 + i32.add + local.set $l7836 + local.get $l7835 + local.get $l7836 + i32.add + local.set $l7837 + local.get $l7836 + local.get $l7837 + i32.add + local.set $l7838 + local.get $l7837 + local.get $l7838 + i32.add + local.set $l7839 + local.get $l7838 + local.get $l7839 + i32.add + local.set $l7840 + local.get $l7839 + local.get $l7840 + i32.add + local.set $l7841 + local.get $l7840 + local.get $l7841 + i32.add + local.set $l7842 + local.get $l7841 + local.get $l7842 + i32.add + local.set $l7843 + local.get $l7842 + local.get $l7843 + i32.add + local.set $l7844 + local.get $l7843 + local.get $l7844 + i32.add + local.set $l7845 + local.get $l7844 + local.get $l7845 + i32.add + local.set $l7846 + local.get $l7845 + local.get $l7846 + i32.add + local.set $l7847 + local.get $l7846 + local.get $l7847 + i32.add + local.set $l7848 + local.get $l7847 + local.get $l7848 + i32.add + local.set $l7849 + local.get $l7848 + local.get $l7849 + i32.add + local.set $l7850 + local.get $l7849 + local.get $l7850 + i32.add + local.set $l7851 + local.get $l7850 + local.get $l7851 + i32.add + local.set $l7852 + local.get $l7851 + local.get $l7852 + i32.add + local.set $l7853 + local.get $l7852 + local.get $l7853 + i32.add + local.set $l7854 + local.get $l7853 + local.get $l7854 + i32.add + local.set $l7855 + local.get $l7854 + local.get $l7855 + i32.add + local.set $l7856 + local.get $l7855 + local.get $l7856 + i32.add + local.set $l7857 + local.get $l7856 + local.get $l7857 + i32.add + local.set $l7858 + local.get $l7857 + local.get $l7858 + i32.add + local.set $l7859 + local.get $l7858 + local.get $l7859 + i32.add + local.set $l7860 + local.get $l7859 + local.get $l7860 + i32.add + local.set $l7861 + local.get $l7860 + local.get $l7861 + i32.add + local.set $l7862 + local.get $l7861 + local.get $l7862 + i32.add + local.set $l7863 + local.get $l7862 + local.get $l7863 + i32.add + local.set $l7864 + local.get $l7863 + local.get $l7864 + i32.add + local.set $l7865 + local.get $l7864 + local.get $l7865 + i32.add + local.set $l7866 + local.get $l7865 + local.get $l7866 + i32.add + local.set $l7867 + local.get $l7866 + local.get $l7867 + i32.add + local.set $l7868 + local.get $l7867 + local.get $l7868 + i32.add + local.set $l7869 + local.get $l7868 + local.get $l7869 + i32.add + local.set $l7870 + local.get $l7869 + local.get $l7870 + i32.add + local.set $l7871 + local.get $l7870 + local.get $l7871 + i32.add + local.set $l7872 + local.get $l7871 + local.get $l7872 + i32.add + local.set $l7873 + local.get $l7872 + local.get $l7873 + i32.add + local.set $l7874 + local.get $l7873 + local.get $l7874 + i32.add + local.set $l7875 + local.get $l7874 + local.get $l7875 + i32.add + local.set $l7876 + local.get $l7875 + local.get $l7876 + i32.add + local.set $l7877 + local.get $l7876 + local.get $l7877 + i32.add + local.set $l7878 + local.get $l7877 + local.get $l7878 + i32.add + local.set $l7879 + local.get $l7878 + local.get $l7879 + i32.add + local.set $l7880 + local.get $l7879 + local.get $l7880 + i32.add + local.set $l7881 + local.get $l7880 + local.get $l7881 + i32.add + local.set $l7882 + local.get $l7881 + local.get $l7882 + i32.add + local.set $l7883 + local.get $l7882 + local.get $l7883 + i32.add + local.set $l7884 + local.get $l7883 + local.get $l7884 + i32.add + local.set $l7885 + local.get $l7884 + local.get $l7885 + i32.add + local.set $l7886 + local.get $l7885 + local.get $l7886 + i32.add + local.set $l7887 + local.get $l7886 + local.get $l7887 + i32.add + local.set $l7888 + local.get $l7887 + local.get $l7888 + i32.add + local.set $l7889 + local.get $l7888 + local.get $l7889 + i32.add + local.set $l7890 + local.get $l7889 + local.get $l7890 + i32.add + local.set $l7891 + local.get $l7890 + local.get $l7891 + i32.add + local.set $l7892 + local.get $l7891 + local.get $l7892 + i32.add + local.set $l7893 + local.get $l7892 + local.get $l7893 + i32.add + local.set $l7894 + local.get $l7893 + local.get $l7894 + i32.add + local.set $l7895 + local.get $l7894 + local.get $l7895 + i32.add + local.set $l7896 + local.get $l7895 + local.get $l7896 + i32.add + local.set $l7897 + local.get $l7896 + local.get $l7897 + i32.add + local.set $l7898 + local.get $l7897 + local.get $l7898 + i32.add + local.set $l7899 + local.get $l7898 + local.get $l7899 + i32.add + local.set $l7900 + local.get $l7899 + local.get $l7900 + i32.add + local.set $l7901 + local.get $l7900 + local.get $l7901 + i32.add + local.set $l7902 + local.get $l7901 + local.get $l7902 + i32.add + local.set $l7903 + local.get $l7902 + local.get $l7903 + i32.add + local.set $l7904 + local.get $l7903 + local.get $l7904 + i32.add + local.set $l7905 + local.get $l7904 + local.get $l7905 + i32.add + local.set $l7906 + local.get $l7905 + local.get $l7906 + i32.add + local.set $l7907 + local.get $l7906 + local.get $l7907 + i32.add + local.set $l7908 + local.get $l7907 + local.get $l7908 + i32.add + local.set $l7909 + local.get $l7908 + local.get $l7909 + i32.add + local.set $l7910 + local.get $l7909 + local.get $l7910 + i32.add + local.set $l7911 + local.get $l7910 + local.get $l7911 + i32.add + local.set $l7912 + local.get $l7911 + local.get $l7912 + i32.add + local.set $l7913 + local.get $l7912 + local.get $l7913 + i32.add + local.set $l7914 + local.get $l7913 + local.get $l7914 + i32.add + local.set $l7915 + local.get $l7914 + local.get $l7915 + i32.add + local.set $l7916 + local.get $l7915 + local.get $l7916 + i32.add + local.set $l7917 + local.get $l7916 + local.get $l7917 + i32.add + local.set $l7918 + local.get $l7917 + local.get $l7918 + i32.add + local.set $l7919 + local.get $l7918 + local.get $l7919 + i32.add + local.set $l7920 + local.get $l7919 + local.get $l7920 + i32.add + local.set $l7921 + local.get $l7920 + local.get $l7921 + i32.add + local.set $l7922 + local.get $l7921 + local.get $l7922 + i32.add + local.set $l7923 + local.get $l7922 + local.get $l7923 + i32.add + local.set $l7924 + local.get $l7923 + local.get $l7924 + i32.add + local.set $l7925 + local.get $l7924 + local.get $l7925 + i32.add + local.set $l7926 + local.get $l7925 + local.get $l7926 + i32.add + local.set $l7927 + local.get $l7926 + local.get $l7927 + i32.add + local.set $l7928 + local.get $l7927 + local.get $l7928 + i32.add + local.set $l7929 + local.get $l7928 + local.get $l7929 + i32.add + local.set $l7930 + local.get $l7929 + local.get $l7930 + i32.add + local.set $l7931 + local.get $l7930 + local.get $l7931 + i32.add + local.set $l7932 + local.get $l7931 + local.get $l7932 + i32.add + local.set $l7933 + local.get $l7932 + local.get $l7933 + i32.add + local.set $l7934 + local.get $l7933 + local.get $l7934 + i32.add + local.set $l7935 + local.get $l7934 + local.get $l7935 + i32.add + local.set $l7936 + local.get $l7935 + local.get $l7936 + i32.add + local.set $l7937 + local.get $l7936 + local.get $l7937 + i32.add + local.set $l7938 + local.get $l7937 + local.get $l7938 + i32.add + local.set $l7939 + local.get $l7938 + local.get $l7939 + i32.add + local.set $l7940 + local.get $l7939 + local.get $l7940 + i32.add + local.set $l7941 + local.get $l7940 + local.get $l7941 + i32.add + local.set $l7942 + local.get $l7941 + local.get $l7942 + i32.add + local.set $l7943 + local.get $l7942 + local.get $l7943 + i32.add + local.set $l7944 + local.get $l7943 + local.get $l7944 + i32.add + local.set $l7945 + local.get $l7944 + local.get $l7945 + i32.add + local.set $l7946 + local.get $l7945 + local.get $l7946 + i32.add + local.set $l7947 + local.get $l7946 + local.get $l7947 + i32.add + local.set $l7948 + local.get $l7947 + local.get $l7948 + i32.add + local.set $l7949 + local.get $l7948 + local.get $l7949 + i32.add + local.set $l7950 + local.get $l7949 + local.get $l7950 + i32.add + local.set $l7951 + local.get $l7950 + local.get $l7951 + i32.add + local.set $l7952 + local.get $l7951 + local.get $l7952 + i32.add + local.set $l7953 + local.get $l7952 + local.get $l7953 + i32.add + local.set $l7954 + local.get $l7953 + local.get $l7954 + i32.add + local.set $l7955 + local.get $l7954 + local.get $l7955 + i32.add + local.set $l7956 + local.get $l7955 + local.get $l7956 + i32.add + local.set $l7957 + local.get $l7956 + local.get $l7957 + i32.add + local.set $l7958 + local.get $l7957 + local.get $l7958 + i32.add + local.set $l7959 + local.get $l7958 + local.get $l7959 + i32.add + local.set $l7960 + local.get $l7959 + local.get $l7960 + i32.add + local.set $l7961 + local.get $l7960 + local.get $l7961 + i32.add + local.set $l7962 + local.get $l7961 + local.get $l7962 + i32.add + local.set $l7963 + local.get $l7962 + local.get $l7963 + i32.add + local.set $l7964 + local.get $l7963 + local.get $l7964 + i32.add + local.set $l7965 + local.get $l7964 + local.get $l7965 + i32.add + local.set $l7966 + local.get $l7965 + local.get $l7966 + i32.add + local.set $l7967 + local.get $l7966 + local.get $l7967 + i32.add + local.set $l7968 + local.get $l7967 + local.get $l7968 + i32.add + local.set $l7969 + local.get $l7968 + local.get $l7969 + i32.add + local.set $l7970 + local.get $l7969 + local.get $l7970 + i32.add + local.set $l7971 + local.get $l7970 + local.get $l7971 + i32.add + local.set $l7972 + local.get $l7971 + local.get $l7972 + i32.add + local.set $l7973 + local.get $l7972 + local.get $l7973 + i32.add + local.set $l7974 + local.get $l7973 + local.get $l7974 + i32.add + local.set $l7975 + local.get $l7974 + local.get $l7975 + i32.add + local.set $l7976 + local.get $l7975 + local.get $l7976 + i32.add + local.set $l7977 + local.get $l7976 + local.get $l7977 + i32.add + local.set $l7978 + local.get $l7977 + local.get $l7978 + i32.add + local.set $l7979 + local.get $l7978 + local.get $l7979 + i32.add + local.set $l7980 + local.get $l7979 + local.get $l7980 + i32.add + local.set $l7981 + local.get $l7980 + local.get $l7981 + i32.add + local.set $l7982 + local.get $l7981 + local.get $l7982 + i32.add + local.set $l7983 + local.get $l7982 + local.get $l7983 + i32.add + local.set $l7984 + local.get $l7983 + local.get $l7984 + i32.add + local.set $l7985 + local.get $l7984 + local.get $l7985 + i32.add + local.set $l7986 + local.get $l7985 + local.get $l7986 + i32.add + local.set $l7987 + local.get $l7986 + local.get $l7987 + i32.add + local.set $l7988 + local.get $l7987 + local.get $l7988 + i32.add + local.set $l7989 + local.get $l7988 + local.get $l7989 + i32.add + local.set $l7990 + local.get $l7989 + local.get $l7990 + i32.add + local.set $l7991 + local.get $l7990 + local.get $l7991 + i32.add + local.set $l7992 + local.get $l7991 + local.get $l7992 + i32.add + local.set $l7993 + local.get $l7992 + local.get $l7993 + i32.add + local.set $l7994 + local.get $l7993 + local.get $l7994 + i32.add + local.set $l7995 + local.get $l7994 + local.get $l7995 + i32.add + local.set $l7996 + local.get $l7995 + local.get $l7996 + i32.add + local.set $l7997 + local.get $l7996 + local.get $l7997 + i32.add + local.set $l7998 + local.get $l7997 + local.get $l7998 + i32.add + local.set $l7999 + local.get $l7998 + local.get $l7999 + i32.add + local.set $l8000 + local.get $l7999 + local.get $l8000 + i32.add + local.set $l8001 + local.get $l8000 + local.get $l8001 + i32.add + local.set $l8002 + local.get $l8001 + local.get $l8002 + i32.add + local.set $l8003 + local.get $l8002 + local.get $l8003 + i32.add + local.set $l8004 + local.get $l8003 + local.get $l8004 + i32.add + local.set $l8005 + local.get $l8004 + local.get $l8005 + i32.add + local.set $l8006 + local.get $l8005 + local.get $l8006 + i32.add + local.set $l8007 + local.get $l8006 + local.get $l8007 + i32.add + local.set $l8008 + local.get $l8007 + local.get $l8008 + i32.add + local.set $l8009 + local.get $l8008 + local.get $l8009 + i32.add + local.set $l8010 + local.get $l8009 + local.get $l8010 + i32.add + local.set $l8011 + local.get $l8010 + local.get $l8011 + i32.add + local.set $l8012 + local.get $l8011 + local.get $l8012 + i32.add + local.set $l8013 + local.get $l8012 + local.get $l8013 + i32.add + local.set $l8014 + local.get $l8013 + local.get $l8014 + i32.add + local.set $l8015 + local.get $l8014 + local.get $l8015 + i32.add + local.set $l8016 + local.get $l8015 + local.get $l8016 + i32.add + local.set $l8017 + local.get $l8016 + local.get $l8017 + i32.add + local.set $l8018 + local.get $l8017 + local.get $l8018 + i32.add + local.set $l8019 + local.get $l8018 + local.get $l8019 + i32.add + local.set $l8020 + local.get $l8019 + local.get $l8020 + i32.add + local.set $l8021 + local.get $l8020 + local.get $l8021 + i32.add + local.set $l8022 + local.get $l8021 + local.get $l8022 + i32.add + local.set $l8023 + local.get $l8022 + local.get $l8023 + i32.add + local.set $l8024 + local.get $l8023 + local.get $l8024 + i32.add + local.set $l8025 + local.get $l8024 + local.get $l8025 + i32.add + local.set $l8026 + local.get $l8025 + local.get $l8026 + i32.add + local.set $l8027 + local.get $l8026 + local.get $l8027 + i32.add + local.set $l8028 + local.get $l8027 + local.get $l8028 + i32.add + local.set $l8029 + local.get $l8028 + local.get $l8029 + i32.add + local.set $l8030 + local.get $l8029 + local.get $l8030 + i32.add + local.set $l8031 + local.get $l8030 + local.get $l8031 + i32.add + local.set $l8032 + local.get $l8031 + local.get $l8032 + i32.add + local.set $l8033 + local.get $l8032 + local.get $l8033 + i32.add + local.set $l8034 + local.get $l8033 + local.get $l8034 + i32.add + local.set $l8035 + local.get $l8034 + local.get $l8035 + i32.add + local.set $l8036 + local.get $l8035 + local.get $l8036 + i32.add + local.set $l8037 + local.get $l8036 + local.get $l8037 + i32.add + local.set $l8038 + local.get $l8037 + local.get $l8038 + i32.add + local.set $l8039 + local.get $l8038 + local.get $l8039 + i32.add + local.set $l8040 + local.get $l8039 + local.get $l8040 + i32.add + local.set $l8041 + local.get $l8040 + local.get $l8041 + i32.add + local.set $l8042 + local.get $l8041 + local.get $l8042 + i32.add + local.set $l8043 + local.get $l8042 + local.get $l8043 + i32.add + local.set $l8044 + local.get $l8043 + local.get $l8044 + i32.add + local.set $l8045 + local.get $l8044 + local.get $l8045 + i32.add + local.set $l8046 + local.get $l8045 + local.get $l8046 + i32.add + local.set $l8047 + local.get $l8046 + local.get $l8047 + i32.add + local.set $l8048 + local.get $l8047 + local.get $l8048 + i32.add + local.set $l8049 + local.get $l8048 + local.get $l8049 + i32.add + local.set $l8050 + local.get $l8049 + local.get $l8050 + i32.add + local.set $l8051 + local.get $l8050 + local.get $l8051 + i32.add + local.set $l8052 + local.get $l8051 + local.get $l8052 + i32.add + local.set $l8053 + local.get $l8052 + local.get $l8053 + i32.add + local.set $l8054 + local.get $l8053 + local.get $l8054 + i32.add + local.set $l8055 + local.get $l8054 + local.get $l8055 + i32.add + local.set $l8056 + local.get $l8055 + local.get $l8056 + i32.add + local.set $l8057 + local.get $l8056 + local.get $l8057 + i32.add + local.set $l8058 + local.get $l8057 + local.get $l8058 + i32.add + local.set $l8059 + local.get $l8058 + local.get $l8059 + i32.add + local.set $l8060 + local.get $l8059 + local.get $l8060 + i32.add + local.set $l8061 + local.get $l8060 + local.get $l8061 + i32.add + local.set $l8062 + local.get $l8061 + local.get $l8062 + i32.add + local.set $l8063 + local.get $l8062 + local.get $l8063 + i32.add + local.set $l8064 + local.get $l8063 + local.get $l8064 + i32.add + local.set $l8065 + local.get $l8064 + local.get $l8065 + i32.add + local.set $l8066 + local.get $l8065 + local.get $l8066 + i32.add + local.set $l8067 + local.get $l8066 + local.get $l8067 + i32.add + local.set $l8068 + local.get $l8067 + local.get $l8068 + i32.add + local.set $l8069 + local.get $l8068 + local.get $l8069 + i32.add + local.set $l8070 + local.get $l8069 + local.get $l8070 + i32.add + local.set $l8071 + local.get $l8070 + local.get $l8071 + i32.add + local.set $l8072 + local.get $l8071 + local.get $l8072 + i32.add + local.set $l8073 + local.get $l8072 + local.get $l8073 + i32.add + local.set $l8074 + local.get $l8073 + local.get $l8074 + i32.add + local.set $l8075 + local.get $l8074 + local.get $l8075 + i32.add + local.set $l8076 + local.get $l8075 + local.get $l8076 + i32.add + local.set $l8077 + local.get $l8076 + local.get $l8077 + i32.add + local.set $l8078 + local.get $l8077 + local.get $l8078 + i32.add + local.set $l8079 + local.get $l8078 + local.get $l8079 + i32.add + local.set $l8080 + local.get $l8079 + local.get $l8080 + i32.add + local.set $l8081 + local.get $l8080 + local.get $l8081 + i32.add + local.set $l8082 + local.get $l8081 + local.get $l8082 + i32.add + local.set $l8083 + local.get $l8082 + local.get $l8083 + i32.add + local.set $l8084 + local.get $l8083 + local.get $l8084 + i32.add + local.set $l8085 + local.get $l8084 + local.get $l8085 + i32.add + local.set $l8086 + local.get $l8085 + local.get $l8086 + i32.add + local.set $l8087 + local.get $l8086 + local.get $l8087 + i32.add + local.set $l8088 + local.get $l8087 + local.get $l8088 + i32.add + local.set $l8089 + local.get $l8088 + local.get $l8089 + i32.add + local.set $l8090 + local.get $l8089 + local.get $l8090 + i32.add + local.set $l8091 + local.get $l8090 + local.get $l8091 + i32.add + local.set $l8092 + local.get $l8091 + local.get $l8092 + i32.add + local.set $l8093 + local.get $l8092 + local.get $l8093 + i32.add + local.set $l8094 + local.get $l8093 + local.get $l8094 + i32.add + local.set $l8095 + local.get $l8094 + local.get $l8095 + i32.add + local.set $l8096 + local.get $l8095 + local.get $l8096 + i32.add + local.set $l8097 + local.get $l8096 + local.get $l8097 + i32.add + local.set $l8098 + local.get $l8097 + local.get $l8098 + i32.add + local.set $l8099 + local.get $l8098 + local.get $l8099 + i32.add + local.set $l8100 + local.get $l8099 + local.get $l8100 + i32.add + local.set $l8101 + local.get $l8100 + local.get $l8101 + i32.add + local.set $l8102 + local.get $l8101 + local.get $l8102 + i32.add + local.set $l8103 + local.get $l8102 + local.get $l8103 + i32.add + local.set $l8104 + local.get $l8103 + local.get $l8104 + i32.add + local.set $l8105 + local.get $l8104 + local.get $l8105 + i32.add + local.set $l8106 + local.get $l8105 + local.get $l8106 + i32.add + local.set $l8107 + local.get $l8106 + local.get $l8107 + i32.add + local.set $l8108 + local.get $l8107 + local.get $l8108 + i32.add + local.set $l8109 + local.get $l8108 + local.get $l8109 + i32.add + local.set $l8110 + local.get $l8109 + local.get $l8110 + i32.add + local.set $l8111 + local.get $l8110 + local.get $l8111 + i32.add + local.set $l8112 + local.get $l8111 + local.get $l8112 + i32.add + local.set $l8113 + local.get $l8112 + local.get $l8113 + i32.add + local.set $l8114 + local.get $l8113 + local.get $l8114 + i32.add + local.set $l8115 + local.get $l8114 + local.get $l8115 + i32.add + local.set $l8116 + local.get $l8115 + local.get $l8116 + i32.add + local.set $l8117 + local.get $l8116 + local.get $l8117 + i32.add + local.set $l8118 + local.get $l8117 + local.get $l8118 + i32.add + local.set $l8119 + local.get $l8118 + local.get $l8119 + i32.add + local.set $l8120 + local.get $l8119 + local.get $l8120 + i32.add + local.set $l8121 + local.get $l8120 + local.get $l8121 + i32.add + local.set $l8122 + local.get $l8121 + local.get $l8122 + i32.add + local.set $l8123 + local.get $l8122 + local.get $l8123 + i32.add + local.set $l8124 + local.get $l8123 + local.get $l8124 + i32.add + local.set $l8125 + local.get $l8124 + local.get $l8125 + i32.add + local.set $l8126 + local.get $l8125 + local.get $l8126 + i32.add + local.set $l8127 + local.get $l8126 + local.get $l8127 + i32.add + local.set $l8128 + local.get $l8127 + local.get $l8128 + i32.add + local.set $l8129 + local.get $l8128 + local.get $l8129 + i32.add + local.set $l8130 + local.get $l8129 + local.get $l8130 + i32.add + local.set $l8131 + local.get $l8130 + local.get $l8131 + i32.add + local.set $l8132 + local.get $l8131 + local.get $l8132 + i32.add + local.set $l8133 + local.get $l8132 + local.get $l8133 + i32.add + local.set $l8134 + local.get $l8133 + local.get $l8134 + i32.add + local.set $l8135 + local.get $l8134 + local.get $l8135 + i32.add + local.set $l8136 + local.get $l8135 + local.get $l8136 + i32.add + local.set $l8137 + local.get $l8136 + local.get $l8137 + i32.add + local.set $l8138 + local.get $l8137 + local.get $l8138 + i32.add + local.set $l8139 + local.get $l8138 + local.get $l8139 + i32.add + local.set $l8140 + local.get $l8139 + local.get $l8140 + i32.add + local.set $l8141 + local.get $l8140 + local.get $l8141 + i32.add + local.set $l8142 + local.get $l8141 + local.get $l8142 + i32.add + local.set $l8143 + local.get $l8142 + local.get $l8143 + i32.add + local.set $l8144 + local.get $l8143 + local.get $l8144 + i32.add + local.set $l8145 + local.get $l8144 + local.get $l8145 + i32.add + local.set $l8146 + local.get $l8145 + local.get $l8146 + i32.add + local.set $l8147 + local.get $l8146 + local.get $l8147 + i32.add + local.set $l8148 + local.get $l8147 + local.get $l8148 + i32.add + local.set $l8149 + local.get $l8148 + local.get $l8149 + i32.add + local.set $l8150 + local.get $l8149 + local.get $l8150 + i32.add + local.set $l8151 + local.get $l8150 + local.get $l8151 + i32.add + local.set $l8152 + local.get $l8151 + local.get $l8152 + i32.add + local.set $l8153 + local.get $l8152 + local.get $l8153 + i32.add + local.set $l8154 + local.get $l8153 + local.get $l8154 + i32.add + local.set $l8155 + local.get $l8154 + local.get $l8155 + i32.add + local.set $l8156 + local.get $l8155 + local.get $l8156 + i32.add + local.set $l8157 + local.get $l8156 + local.get $l8157 + i32.add + local.set $l8158 + local.get $l8157 + local.get $l8158 + i32.add + local.set $l8159 + local.get $l8158 + local.get $l8159 + i32.add + local.set $l8160 + local.get $l8159 + local.get $l8160 + i32.add + local.set $l8161 + local.get $l8160 + local.get $l8161 + i32.add + local.set $l8162 + local.get $l8161 + local.get $l8162 + i32.add + local.set $l8163 + local.get $l8162 + local.get $l8163 + i32.add + local.set $l8164 + local.get $l8163 + local.get $l8164 + i32.add + local.set $l8165 + local.get $l8164 + local.get $l8165 + i32.add + local.set $l8166 + local.get $l8165 + local.get $l8166 + i32.add + local.set $l8167 + local.get $l8166 + local.get $l8167 + i32.add + local.set $l8168 + local.get $l8167 + local.get $l8168 + i32.add + local.set $l8169 + local.get $l8168 + local.get $l8169 + i32.add + local.set $l8170 + local.get $l8169 + local.get $l8170 + i32.add + local.set $l8171 + local.get $l8170 + local.get $l8171 + i32.add + local.set $l8172 + local.get $l8171 + local.get $l8172 + i32.add + local.set $l8173 + local.get $l8172 + local.get $l8173 + i32.add + local.set $l8174 + local.get $l8173 + local.get $l8174 + i32.add + local.set $l8175 + local.get $l8174 + local.get $l8175 + i32.add + local.set $l8176 + local.get $l8175 + local.get $l8176 + i32.add + local.set $l8177 + local.get $l8176 + local.get $l8177 + i32.add + local.set $l8178 + local.get $l8177 + local.get $l8178 + i32.add + local.set $l8179 + local.get $l8178 + local.get $l8179 + i32.add + local.set $l8180 + local.get $l8179 + local.get $l8180 + i32.add + local.set $l8181 + local.get $l8180 + local.get $l8181 + i32.add + local.set $l8182 + local.get $l8181 + local.get $l8182 + i32.add + local.set $l8183 + local.get $l8182 + local.get $l8183 + i32.add + local.set $l8184 + local.get $l8183 + local.get $l8184 + i32.add + local.set $l8185 + local.get $l8184 + local.get $l8185 + i32.add + local.set $l8186 + local.get $l8185 + local.get $l8186 + i32.add + local.set $l8187 + local.get $l8186 + local.get $l8187 + i32.add + local.set $l8188 + local.get $l8187 + local.get $l8188 + i32.add + local.set $l8189 + local.get $l8188 + local.get $l8189 + i32.add + local.set $l8190 + local.get $l8189 + local.get $l8190 + i32.add + local.set $l8191 + local.get $l8190 + local.get $l8191 + i32.add + local.set $l8192 + local.get $l8191 + local.get $l8192 + i32.add + local.set $l8193 + local.get $l8192 + local.get $l8193 + i32.add + local.set $l8194 + local.get $l8193 + local.get $l8194 + i32.add + local.set $l8195 + local.get $l8194 + local.get $l8195 + i32.add + local.set $l8196 + local.get $l8195 + local.get $l8196 + i32.add + local.set $l8197 + local.get $l8196 + local.get $l8197 + i32.add + local.set $l8198 + local.get $l8197 + local.get $l8198 + i32.add + local.set $l8199 + local.get $l8198 + local.get $l8199 + i32.add + local.set $l8200 + local.get $l8199 + local.get $l8200 + i32.add + local.set $l8201 + local.get $l8200 + local.get $l8201 + i32.add + local.set $l8202 + local.get $l8201 + local.get $l8202 + i32.add + local.set $l8203 + local.get $l8202 + local.get $l8203 + i32.add + local.set $l8204 + local.get $l8203 + local.get $l8204 + i32.add + local.set $l8205 + local.get $l8204 + local.get $l8205 + i32.add + local.set $l8206 + local.get $l8205 + local.get $l8206 + i32.add + local.set $l8207 + local.get $l8206 + local.get $l8207 + i32.add + local.set $l8208 + local.get $l8207 + local.get $l8208 + i32.add + local.set $l8209 + local.get $l8208 + local.get $l8209 + i32.add + local.set $l8210 + local.get $l8209 + local.get $l8210 + i32.add + local.set $l8211 + local.get $l8210 + local.get $l8211 + i32.add + local.set $l8212 + local.get $l8211 + local.get $l8212 + i32.add + local.set $l8213 + local.get $l8212 + local.get $l8213 + i32.add + local.set $l8214 + local.get $l8213 + local.get $l8214 + i32.add + local.set $l8215 + local.get $l8214 + local.get $l8215 + i32.add + local.set $l8216 + local.get $l8215 + local.get $l8216 + i32.add + local.set $l8217 + local.get $l8216 + local.get $l8217 + i32.add + local.set $l8218 + local.get $l8217 + local.get $l8218 + i32.add + local.set $l8219 + local.get $l8218 + local.get $l8219 + i32.add + local.set $l8220 + local.get $l8219 + local.get $l8220 + i32.add + local.set $l8221 + local.get $l8220 + local.get $l8221 + i32.add + local.set $l8222 + local.get $l8221 + local.get $l8222 + i32.add + local.set $l8223 + local.get $l8222 + local.get $l8223 + i32.add + local.set $l8224 + local.get $l8223 + local.get $l8224 + i32.add + local.set $l8225 + local.get $l8224 + local.get $l8225 + i32.add + local.set $l8226 + local.get $l8225 + local.get $l8226 + i32.add + local.set $l8227 + local.get $l8226 + local.get $l8227 + i32.add + local.set $l8228 + local.get $l8227 + local.get $l8228 + i32.add + local.set $l8229 + local.get $l8228 + local.get $l8229 + i32.add + local.set $l8230 + local.get $l8229 + local.get $l8230 + i32.add + local.set $l8231 + local.get $l8230 + local.get $l8231 + i32.add + local.set $l8232 + local.get $l8231 + local.get $l8232 + i32.add + local.set $l8233 + local.get $l8232 + local.get $l8233 + i32.add + local.set $l8234 + local.get $l8233 + local.get $l8234 + i32.add + local.set $l8235 + local.get $l8234 + local.get $l8235 + i32.add + local.set $l8236 + local.get $l8235 + local.get $l8236 + i32.add + local.set $l8237 + local.get $l8236 + local.get $l8237 + i32.add + local.set $l8238 + local.get $l8237 + local.get $l8238 + i32.add + local.set $l8239 + local.get $l8238 + local.get $l8239 + i32.add + local.set $l8240 + local.get $l8239 + local.get $l8240 + i32.add + local.set $l8241 + local.get $l8240 + local.get $l8241 + i32.add + local.set $l8242 + local.get $l8241 + local.get $l8242 + i32.add + local.set $l8243 + local.get $l8242 + local.get $l8243 + i32.add + local.set $l8244 + local.get $l8243 + local.get $l8244 + i32.add + local.set $l8245 + local.get $l8244 + local.get $l8245 + i32.add + local.set $l8246 + local.get $l8245 + local.get $l8246 + i32.add + local.set $l8247 + local.get $l8246 + local.get $l8247 + i32.add + local.set $l8248 + local.get $l8247 + local.get $l8248 + i32.add + local.set $l8249 + local.get $l8248 + local.get $l8249 + i32.add + local.set $l8250 + local.get $l8249 + local.get $l8250 + i32.add + local.set $l8251 + local.get $l8250 + local.get $l8251 + i32.add + local.set $l8252 + local.get $l8251 + local.get $l8252 + i32.add + local.set $l8253 + local.get $l8252 + local.get $l8253 + i32.add + local.set $l8254 + local.get $l8253 + local.get $l8254 + i32.add + local.set $l8255 + local.get $l8254 + local.get $l8255 + i32.add + local.set $l8256 + local.get $l8255 + local.get $l8256 + i32.add + local.set $l8257 + local.get $l8256 + local.get $l8257 + i32.add + local.set $l8258 + local.get $l8257 + local.get $l8258 + i32.add + local.set $l8259 + local.get $l8258 + local.get $l8259 + i32.add + local.set $l8260 + local.get $l8259 + local.get $l8260 + i32.add + local.set $l8261 + local.get $l8260 + local.get $l8261 + i32.add + local.set $l8262 + local.get $l8261 + local.get $l8262 + i32.add + local.set $l8263 + local.get $l8262 + local.get $l8263 + i32.add + local.set $l8264 + local.get $l8263 + local.get $l8264 + i32.add + local.set $l8265 + local.get $l8264 + local.get $l8265 + i32.add + local.set $l8266 + local.get $l8265 + local.get $l8266 + i32.add + local.set $l8267 + local.get $l8266 + local.get $l8267 + i32.add + local.set $l8268 + local.get $l8267 + local.get $l8268 + i32.add + local.set $l8269 + local.get $l8268 + local.get $l8269 + i32.add + local.set $l8270 + local.get $l8269 + local.get $l8270 + i32.add + local.set $l8271 + local.get $l8270 + local.get $l8271 + i32.add + local.set $l8272 + local.get $l8271 + local.get $l8272 + i32.add + local.set $l8273 + local.get $l8272 + local.get $l8273 + i32.add + local.set $l8274 + local.get $l8273 + local.get $l8274 + i32.add + local.set $l8275 + local.get $l8274 + local.get $l8275 + i32.add + local.set $l8276 + local.get $l8275 + local.get $l8276 + i32.add + local.set $l8277 + local.get $l8276 + local.get $l8277 + i32.add + local.set $l8278 + local.get $l8277 + local.get $l8278 + i32.add + local.set $l8279 + local.get $l8278 + local.get $l8279 + i32.add + local.set $l8280 + local.get $l8279 + local.get $l8280 + i32.add + local.set $l8281 + local.get $l8280 + local.get $l8281 + i32.add + local.set $l8282 + local.get $l8281 + local.get $l8282 + i32.add + local.set $l8283 + local.get $l8282 + local.get $l8283 + i32.add + local.set $l8284 + local.get $l8283 + local.get $l8284 + i32.add + local.set $l8285 + local.get $l8284 + local.get $l8285 + i32.add + local.set $l8286 + local.get $l8285 + local.get $l8286 + i32.add + local.set $l8287 + local.get $l8286 + local.get $l8287 + i32.add + local.set $l8288 + local.get $l8287 + local.get $l8288 + i32.add + local.set $l8289 + local.get $l8288 + local.get $l8289 + i32.add + local.set $l8290 + local.get $l8289 + local.get $l8290 + i32.add + local.set $l8291 + local.get $l8290 + local.get $l8291 + i32.add + local.set $l8292 + local.get $l8291 + local.get $l8292 + i32.add + local.set $l8293 + local.get $l8292 + local.get $l8293 + i32.add + local.set $l8294 + local.get $l8293 + local.get $l8294 + i32.add + local.set $l8295 + local.get $l8294 + local.get $l8295 + i32.add + local.set $l8296 + local.get $l8295 + local.get $l8296 + i32.add + local.set $l8297 + local.get $l8296 + local.get $l8297 + i32.add + local.set $l8298 + local.get $l8297 + local.get $l8298 + i32.add + local.set $l8299 + local.get $l8298 + local.get $l8299 + i32.add + local.set $l8300 + local.get $l8299 + local.get $l8300 + i32.add + local.set $l8301 + local.get $l8300 + local.get $l8301 + i32.add + local.set $l8302 + local.get $l8301 + local.get $l8302 + i32.add + local.set $l8303 + local.get $l8302 + local.get $l8303 + i32.add + local.set $l8304 + local.get $l8303 + local.get $l8304 + i32.add + local.set $l8305 + local.get $l8304 + local.get $l8305 + i32.add + local.set $l8306 + local.get $l8305 + local.get $l8306 + i32.add + local.set $l8307 + local.get $l8306 + local.get $l8307 + i32.add + local.set $l8308 + local.get $l8307 + local.get $l8308 + i32.add + local.set $l8309 + local.get $l8308 + local.get $l8309 + i32.add + local.set $l8310 + local.get $l8309 + local.get $l8310 + i32.add + local.set $l8311 + local.get $l8310 + local.get $l8311 + i32.add + local.set $l8312 + local.get $l8311 + local.get $l8312 + i32.add + local.set $l8313 + local.get $l8312 + local.get $l8313 + i32.add + local.set $l8314 + local.get $l8313 + local.get $l8314 + i32.add + local.set $l8315 + local.get $l8314 + local.get $l8315 + i32.add + local.set $l8316 + local.get $l8315 + local.get $l8316 + i32.add + local.set $l8317 + local.get $l8316 + local.get $l8317 + i32.add + local.set $l8318 + local.get $l8317 + local.get $l8318 + i32.add + local.set $l8319 + local.get $l8318 + local.get $l8319 + i32.add + local.set $l8320 + local.get $l8319 + local.get $l8320 + i32.add + local.set $l8321 + local.get $l8320 + local.get $l8321 + i32.add + local.set $l8322 + local.get $l8321 + local.get $l8322 + i32.add + local.set $l8323 + local.get $l8322 + local.get $l8323 + i32.add + local.set $l8324 + local.get $l8323 + local.get $l8324 + i32.add + local.set $l8325 + local.get $l8324 + local.get $l8325 + i32.add + local.set $l8326 + local.get $l8325 + local.get $l8326 + i32.add + local.set $l8327 + local.get $l8326 + local.get $l8327 + i32.add + local.set $l8328 + local.get $l8327 + local.get $l8328 + i32.add + local.set $l8329 + local.get $l8328 + local.get $l8329 + i32.add + local.set $l8330 + local.get $l8329 + local.get $l8330 + i32.add + local.set $l8331 + local.get $l8330 + local.get $l8331 + i32.add + local.set $l8332 + local.get $l8331 + local.get $l8332 + i32.add + local.set $l8333 + local.get $l8332 + local.get $l8333 + i32.add + local.set $l8334 + local.get $l8333 + local.get $l8334 + i32.add + local.set $l8335 + local.get $l8334 + local.get $l8335 + i32.add + local.set $l8336 + local.get $l8335 + local.get $l8336 + i32.add + local.set $l8337 + local.get $l8336 + local.get $l8337 + i32.add + local.set $l8338 + local.get $l8337 + local.get $l8338 + i32.add + local.set $l8339 + local.get $l8338 + local.get $l8339 + i32.add + local.set $l8340 + local.get $l8339 + local.get $l8340 + i32.add + local.set $l8341 + local.get $l8340 + local.get $l8341 + i32.add + local.set $l8342 + local.get $l8341 + local.get $l8342 + i32.add + local.set $l8343 + local.get $l8342 + local.get $l8343 + i32.add + local.set $l8344 + local.get $l8343 + local.get $l8344 + i32.add + local.set $l8345 + local.get $l8344 + local.get $l8345 + i32.add + local.set $l8346 + local.get $l8345 + local.get $l8346 + i32.add + local.set $l8347 + local.get $l8346 + local.get $l8347 + i32.add + local.set $l8348 + local.get $l8347 + local.get $l8348 + i32.add + local.set $l8349 + local.get $l8348 + local.get $l8349 + i32.add + local.set $l8350 + local.get $l8349 + local.get $l8350 + i32.add + local.set $l8351 + local.get $l8350 + local.get $l8351 + i32.add + local.set $l8352 + local.get $l8351 + local.get $l8352 + i32.add + local.set $l8353 + local.get $l8352 + local.get $l8353 + i32.add + local.set $l8354 + local.get $l8353 + local.get $l8354 + i32.add + local.set $l8355 + local.get $l8354 + local.get $l8355 + i32.add + local.set $l8356 + local.get $l8355 + local.get $l8356 + i32.add + local.set $l8357 + local.get $l8356 + local.get $l8357 + i32.add + local.set $l8358 + local.get $l8357 + local.get $l8358 + i32.add + local.set $l8359 + local.get $l8358 + local.get $l8359 + i32.add + local.set $l8360 + local.get $l8359 + local.get $l8360 + i32.add + local.set $l8361 + local.get $l8360 + local.get $l8361 + i32.add + local.set $l8362 + local.get $l8361 + local.get $l8362 + i32.add + local.set $l8363 + local.get $l8362 + local.get $l8363 + i32.add + local.set $l8364 + local.get $l8363 + local.get $l8364 + i32.add + local.set $l8365 + local.get $l8364 + local.get $l8365 + i32.add + local.set $l8366 + local.get $l8365 + local.get $l8366 + i32.add + local.set $l8367 + local.get $l8366 + local.get $l8367 + i32.add + local.set $l8368 + local.get $l8367 + local.get $l8368 + i32.add + local.set $l8369 + local.get $l8368 + local.get $l8369 + i32.add + local.set $l8370 + local.get $l8369 + local.get $l8370 + i32.add + local.set $l8371 + local.get $l8370 + local.get $l8371 + i32.add + local.set $l8372 + local.get $l8371 + local.get $l8372 + i32.add + local.set $l8373 + local.get $l8372 + local.get $l8373 + i32.add + local.set $l8374 + local.get $l8373 + local.get $l8374 + i32.add + local.set $l8375 + local.get $l8374 + local.get $l8375 + i32.add + local.set $l8376 + local.get $l8375 + local.get $l8376 + i32.add + local.set $l8377 + local.get $l8376 + local.get $l8377 + i32.add + local.set $l8378 + local.get $l8377 + local.get $l8378 + i32.add + local.set $l8379 + local.get $l8378 + local.get $l8379 + i32.add + local.set $l8380 + local.get $l8379 + local.get $l8380 + i32.add + local.set $l8381 + local.get $l8380 + local.get $l8381 + i32.add + local.set $l8382 + local.get $l8381 + local.get $l8382 + i32.add + local.set $l8383 + local.get $l8382 + local.get $l8383 + i32.add + local.set $l8384 + local.get $l8383 + local.get $l8384 + i32.add + local.set $l8385 + local.get $l8384 + local.get $l8385 + i32.add + local.set $l8386 + local.get $l8385 + local.get $l8386 + i32.add + local.set $l8387 + local.get $l8386 + local.get $l8387 + i32.add + local.set $l8388 + local.get $l8387 + local.get $l8388 + i32.add + local.set $l8389 + local.get $l8388 + local.get $l8389 + i32.add + local.set $l8390 + local.get $l8389 + local.get $l8390 + i32.add + local.set $l8391 + local.get $l8390 + local.get $l8391 + i32.add + local.set $l8392 + local.get $l8391 + local.get $l8392 + i32.add + local.set $l8393 + local.get $l8392 + local.get $l8393 + i32.add + local.set $l8394 + local.get $l8393 + local.get $l8394 + i32.add + local.set $l8395 + local.get $l8394 + local.get $l8395 + i32.add + local.set $l8396 + local.get $l8395 + local.get $l8396 + i32.add + local.set $l8397 + local.get $l8396 + local.get $l8397 + i32.add + local.set $l8398 + local.get $l8397 + local.get $l8398 + i32.add + local.set $l8399 + local.get $l8398 + local.get $l8399 + i32.add + local.set $l8400 + local.get $l8399 + local.get $l8400 + i32.add + local.set $l8401 + local.get $l8400 + local.get $l8401 + i32.add + local.set $l8402 + local.get $l8401 + local.get $l8402 + i32.add + local.set $l8403 + local.get $l8402 + local.get $l8403 + i32.add + local.set $l8404 + local.get $l8403 + local.get $l8404 + i32.add + local.set $l8405 + local.get $l8404 + local.get $l8405 + i32.add + local.set $l8406 + local.get $l8405 + local.get $l8406 + i32.add + local.set $l8407 + local.get $l8406 + local.get $l8407 + i32.add + local.set $l8408 + local.get $l8407 + local.get $l8408 + i32.add + local.set $l8409 + local.get $l8408 + local.get $l8409 + i32.add + local.set $l8410 + local.get $l8409 + local.get $l8410 + i32.add + local.set $l8411 + local.get $l8410 + local.get $l8411 + i32.add + local.set $l8412 + local.get $l8411 + local.get $l8412 + i32.add + local.set $l8413 + local.get $l8412 + local.get $l8413 + i32.add + local.set $l8414 + local.get $l8413 + local.get $l8414 + i32.add + local.set $l8415 + local.get $l8414 + local.get $l8415 + i32.add + local.set $l8416 + local.get $l8415 + local.get $l8416 + i32.add + local.set $l8417 + local.get $l8416 + local.get $l8417 + i32.add + local.set $l8418 + local.get $l8417 + local.get $l8418 + i32.add + local.set $l8419 + local.get $l8418 + local.get $l8419 + i32.add + local.set $l8420 + local.get $l8419 + local.get $l8420 + i32.add + local.set $l8421 + local.get $l8420 + local.get $l8421 + i32.add + local.set $l8422 + local.get $l8421 + local.get $l8422 + i32.add + local.set $l8423 + local.get $l8422 + local.get $l8423 + i32.add + local.set $l8424 + local.get $l8423 + local.get $l8424 + i32.add + local.set $l8425 + local.get $l8424 + local.get $l8425 + i32.add + local.set $l8426 + local.get $l8425 + local.get $l8426 + i32.add + local.set $l8427 + local.get $l8426 + local.get $l8427 + i32.add + local.set $l8428 + local.get $l8427 + local.get $l8428 + i32.add + local.set $l8429 + local.get $l8428 + local.get $l8429 + i32.add + local.set $l8430 + local.get $l8429 + local.get $l8430 + i32.add + local.set $l8431 + local.get $l8430 + local.get $l8431 + i32.add + local.set $l8432 + local.get $l8431 + local.get $l8432 + i32.add + local.set $l8433 + local.get $l8432 + local.get $l8433 + i32.add + local.set $l8434 + local.get $l8433 + local.get $l8434 + i32.add + local.set $l8435 + local.get $l8434 + local.get $l8435 + i32.add + local.set $l8436 + local.get $l8435 + local.get $l8436 + i32.add + local.set $l8437 + local.get $l8436 + local.get $l8437 + i32.add + local.set $l8438 + local.get $l8437 + local.get $l8438 + i32.add + local.set $l8439 + local.get $l8438 + local.get $l8439 + i32.add + local.set $l8440 + local.get $l8439 + local.get $l8440 + i32.add + local.set $l8441 + local.get $l8440 + local.get $l8441 + i32.add + local.set $l8442 + local.get $l8441 + local.get $l8442 + i32.add + local.set $l8443 + local.get $l8442 + local.get $l8443 + i32.add + local.set $l8444 + local.get $l8443 + local.get $l8444 + i32.add + local.set $l8445 + local.get $l8444 + local.get $l8445 + i32.add + local.set $l8446 + local.get $l8445 + local.get $l8446 + i32.add + local.set $l8447 + local.get $l8446 + local.get $l8447 + i32.add + local.set $l8448 + local.get $l8447 + local.get $l8448 + i32.add + local.set $l8449 + local.get $l8448 + local.get $l8449 + i32.add + local.set $l8450 + local.get $l8449 + local.get $l8450 + i32.add + local.set $l8451 + local.get $l8450 + local.get $l8451 + i32.add + local.set $l8452 + local.get $l8451 + local.get $l8452 + i32.add + local.set $l8453 + local.get $l8452 + local.get $l8453 + i32.add + local.set $l8454 + local.get $l8453 + local.get $l8454 + i32.add + local.set $l8455 + local.get $l8454 + local.get $l8455 + i32.add + local.set $l8456 + local.get $l8455 + local.get $l8456 + i32.add + local.set $l8457 + local.get $l8456 + local.get $l8457 + i32.add + local.set $l8458 + local.get $l8457 + local.get $l8458 + i32.add + local.set $l8459 + local.get $l8458 + local.get $l8459 + i32.add + local.set $l8460 + local.get $l8459 + local.get $l8460 + i32.add + local.set $l8461 + local.get $l8460 + local.get $l8461 + i32.add + local.set $l8462 + local.get $l8461 + local.get $l8462 + i32.add + local.set $l8463 + local.get $l8462 + local.get $l8463 + i32.add + local.set $l8464 + local.get $l8463 + local.get $l8464 + i32.add + local.set $l8465 + local.get $l8464 + local.get $l8465 + i32.add + local.set $l8466 + local.get $l8465 + local.get $l8466 + i32.add + local.set $l8467 + local.get $l8466 + local.get $l8467 + i32.add + local.set $l8468 + local.get $l8467 + local.get $l8468 + i32.add + local.set $l8469 + local.get $l8468 + local.get $l8469 + i32.add + local.set $l8470 + local.get $l8469 + local.get $l8470 + i32.add + local.set $l8471 + local.get $l8470 + local.get $l8471 + i32.add + local.set $l8472 + local.get $l8471 + local.get $l8472 + i32.add + local.set $l8473 + local.get $l8472 + local.get $l8473 + i32.add + local.set $l8474 + local.get $l8473 + local.get $l8474 + i32.add + local.set $l8475 + local.get $l8474 + local.get $l8475 + i32.add + local.set $l8476 + local.get $l8475 + local.get $l8476 + i32.add + local.set $l8477 + local.get $l8476 + local.get $l8477 + i32.add + local.set $l8478 + local.get $l8477 + local.get $l8478 + i32.add + local.set $l8479 + local.get $l8478 + local.get $l8479 + i32.add + local.set $l8480 + local.get $l8479 + local.get $l8480 + i32.add + local.set $l8481 + local.get $l8480 + local.get $l8481 + i32.add + local.set $l8482 + local.get $l8481 + local.get $l8482 + i32.add + local.set $l8483 + local.get $l8482 + local.get $l8483 + i32.add + local.set $l8484 + local.get $l8483 + local.get $l8484 + i32.add + local.set $l8485 + local.get $l8484 + local.get $l8485 + i32.add + local.set $l8486 + local.get $l8485 + local.get $l8486 + i32.add + local.set $l8487 + local.get $l8486 + local.get $l8487 + i32.add + local.set $l8488 + local.get $l8487 + local.get $l8488 + i32.add + local.set $l8489 + local.get $l8488 + local.get $l8489 + i32.add + local.set $l8490 + local.get $l8489 + local.get $l8490 + i32.add + local.set $l8491 + local.get $l8490 + local.get $l8491 + i32.add + local.set $l8492 + local.get $l8491 + local.get $l8492 + i32.add + local.set $l8493 + local.get $l8492 + local.get $l8493 + i32.add + local.set $l8494 + local.get $l8493 + local.get $l8494 + i32.add + local.set $l8495 + local.get $l8494 + local.get $l8495 + i32.add + local.set $l8496 + local.get $l8495 + local.get $l8496 + i32.add + local.set $l8497 + local.get $l8496 + local.get $l8497 + i32.add + local.set $l8498 + local.get $l8497 + local.get $l8498 + i32.add + local.set $l8499 + local.get $l8498 + local.get $l8499 + i32.add + local.set $l8500 + local.get $l8499 + local.get $l8500 + i32.add + local.set $l8501 + local.get $l8500 + local.get $l8501 + i32.add + local.set $l8502 + local.get $l8501 + local.get $l8502 + i32.add + local.set $l8503 + local.get $l8502 + local.get $l8503 + i32.add + local.set $l8504 + local.get $l8503 + local.get $l8504 + i32.add + local.set $l8505 + local.get $l8504 + local.get $l8505 + i32.add + local.set $l8506 + local.get $l8505 + local.get $l8506 + i32.add + local.set $l8507 + local.get $l8506 + local.get $l8507 + i32.add + local.set $l8508 + local.get $l8507 + local.get $l8508 + i32.add + local.set $l8509 + local.get $l8508 + local.get $l8509 + i32.add + local.set $l8510 + local.get $l8509 + local.get $l8510 + i32.add + local.set $l8511 + local.get $l8510 + local.get $l8511 + i32.add + local.set $l8512 + local.get $l8511 + local.get $l8512 + i32.add + local.set $l8513 + local.get $l8512 + local.get $l8513 + i32.add + local.set $l8514 + local.get $l8513 + local.get $l8514 + i32.add + local.set $l8515 + local.get $l8514 + local.get $l8515 + i32.add + local.set $l8516 + local.get $l8515 + local.get $l8516 + i32.add + local.set $l8517 + local.get $l8516 + local.get $l8517 + i32.add + local.set $l8518 + local.get $l8517 + local.get $l8518 + i32.add + local.set $l8519 + local.get $l8518 + local.get $l8519 + i32.add + local.set $l8520 + local.get $l8519 + local.get $l8520 + i32.add + local.set $l8521 + local.get $l8520 + local.get $l8521 + i32.add + local.set $l8522 + local.get $l8521 + local.get $l8522 + i32.add + local.set $l8523 + local.get $l8522 + local.get $l8523 + i32.add + local.set $l8524 + local.get $l8523 + local.get $l8524 + i32.add + local.set $l8525 + local.get $l8524 + local.get $l8525 + i32.add + local.set $l8526 + local.get $l8525 + local.get $l8526 + i32.add + local.set $l8527 + local.get $l8526 + local.get $l8527 + i32.add + local.set $l8528 + local.get $l8527 + local.get $l8528 + i32.add + local.set $l8529 + local.get $l8528 + local.get $l8529 + i32.add + local.set $l8530 + local.get $l8529 + local.get $l8530 + i32.add + local.set $l8531 + local.get $l8530 + local.get $l8531 + i32.add + local.set $l8532 + local.get $l8531 + local.get $l8532 + i32.add + local.set $l8533 + local.get $l8532 + local.get $l8533 + i32.add + local.set $l8534 + local.get $l8533 + local.get $l8534 + i32.add + local.set $l8535 + local.get $l8534 + local.get $l8535 + i32.add + local.set $l8536 + local.get $l8535 + local.get $l8536 + i32.add + local.set $l8537 + local.get $l8536 + local.get $l8537 + i32.add + local.set $l8538 + local.get $l8537 + local.get $l8538 + i32.add + local.set $l8539 + local.get $l8538 + local.get $l8539 + i32.add + local.set $l8540 + local.get $l8539 + local.get $l8540 + i32.add + local.set $l8541 + local.get $l8540 + local.get $l8541 + i32.add + local.set $l8542 + local.get $l8541 + local.get $l8542 + i32.add + local.set $l8543 + local.get $l8542 + local.get $l8543 + i32.add + local.set $l8544 + local.get $l8543 + local.get $l8544 + i32.add + local.set $l8545 + local.get $l8544 + local.get $l8545 + i32.add + local.set $l8546 + local.get $l8545 + local.get $l8546 + i32.add + local.set $l8547 + local.get $l8546 + local.get $l8547 + i32.add + local.set $l8548 + local.get $l8547 + local.get $l8548 + i32.add + local.set $l8549 + local.get $l8548 + local.get $l8549 + i32.add + local.set $l8550 + local.get $l8549 + local.get $l8550 + i32.add + local.set $l8551 + local.get $l8550 + local.get $l8551 + i32.add + local.set $l8552 + local.get $l8551 + local.get $l8552 + i32.add + local.set $l8553 + local.get $l8552 + local.get $l8553 + i32.add + local.set $l8554 + local.get $l8553 + local.get $l8554 + i32.add + local.set $l8555 + local.get $l8554 + local.get $l8555 + i32.add + local.set $l8556 + local.get $l8555 + local.get $l8556 + i32.add + local.set $l8557 + local.get $l8556 + local.get $l8557 + i32.add + local.set $l8558 + local.get $l8557 + local.get $l8558 + i32.add + local.set $l8559 + local.get $l8558 + local.get $l8559 + i32.add + local.set $l8560 + local.get $l8559 + local.get $l8560 + i32.add + local.set $l8561 + local.get $l8560 + local.get $l8561 + i32.add + local.set $l8562 + local.get $l8561 + local.get $l8562 + i32.add + local.set $l8563 + local.get $l8562 + local.get $l8563 + i32.add + local.set $l8564 + local.get $l8563 + local.get $l8564 + i32.add + local.set $l8565 + local.get $l8564 + local.get $l8565 + i32.add + local.set $l8566 + local.get $l8565 + local.get $l8566 + i32.add + local.set $l8567 + local.get $l8566 + local.get $l8567 + i32.add + local.set $l8568 + local.get $l8567 + local.get $l8568 + i32.add + local.set $l8569 + local.get $l8568 + local.get $l8569 + i32.add + local.set $l8570 + local.get $l8569 + local.get $l8570 + i32.add + local.set $l8571 + local.get $l8570 + local.get $l8571 + i32.add + local.set $l8572 + local.get $l8571 + local.get $l8572 + i32.add + local.set $l8573 + local.get $l8572 + local.get $l8573 + i32.add + local.set $l8574 + local.get $l8573 + local.get $l8574 + i32.add + local.set $l8575 + local.get $l8574 + local.get $l8575 + i32.add + local.set $l8576 + local.get $l8575 + local.get $l8576 + i32.add + local.set $l8577 + local.get $l8576 + local.get $l8577 + i32.add + local.set $l8578 + local.get $l8577 + local.get $l8578 + i32.add + local.set $l8579 + local.get $l8578 + local.get $l8579 + i32.add + local.set $l8580 + local.get $l8579 + local.get $l8580 + i32.add + local.set $l8581 + local.get $l8580 + local.get $l8581 + i32.add + local.set $l8582 + local.get $l8581 + local.get $l8582 + i32.add + local.set $l8583 + local.get $l8582 + local.get $l8583 + i32.add + local.set $l8584 + local.get $l8583 + local.get $l8584 + i32.add + local.set $l8585 + local.get $l8584 + local.get $l8585 + i32.add + local.set $l8586 + local.get $l8585 + local.get $l8586 + i32.add + local.set $l8587 + local.get $l8586 + local.get $l8587 + i32.add + local.set $l8588 + local.get $l8587 + local.get $l8588 + i32.add + local.set $l8589 + local.get $l8588 + local.get $l8589 + i32.add + local.set $l8590 + local.get $l8589 + local.get $l8590 + i32.add + local.set $l8591 + local.get $l8590 + local.get $l8591 + i32.add + local.set $l8592 + local.get $l8591 + local.get $l8592 + i32.add + local.set $l8593 + local.get $l8592 + local.get $l8593 + i32.add + local.set $l8594 + local.get $l8593 + local.get $l8594 + i32.add + local.set $l8595 + local.get $l8594 + local.get $l8595 + i32.add + local.set $l8596 + local.get $l8595 + local.get $l8596 + i32.add + local.set $l8597 + local.get $l8596 + local.get $l8597 + i32.add + local.set $l8598 + local.get $l8597 + local.get $l8598 + i32.add + local.set $l8599 + local.get $l8598 + local.get $l8599 + i32.add + local.set $l8600 + local.get $l8599 + local.get $l8600 + i32.add + local.set $l8601 + local.get $l8600 + local.get $l8601 + i32.add + local.set $l8602 + local.get $l8601 + local.get $l8602 + i32.add + local.set $l8603 + local.get $l8602 + local.get $l8603 + i32.add + local.set $l8604 + local.get $l8603 + local.get $l8604 + i32.add + local.set $l8605 + local.get $l8604 + local.get $l8605 + i32.add + local.set $l8606 + local.get $l8605 + local.get $l8606 + i32.add + local.set $l8607 + local.get $l8606 + local.get $l8607 + i32.add + local.set $l8608 + local.get $l8607 + local.get $l8608 + i32.add + local.set $l8609 + local.get $l8608 + local.get $l8609 + i32.add + local.set $l8610 + local.get $l8609 + local.get $l8610 + i32.add + local.set $l8611 + local.get $l8610 + local.get $l8611 + i32.add + local.set $l8612 + local.get $l8611 + local.get $l8612 + i32.add + local.set $l8613 + local.get $l8612 + local.get $l8613 + i32.add + local.set $l8614 + local.get $l8613 + local.get $l8614 + i32.add + local.set $l8615 + local.get $l8614 + local.get $l8615 + i32.add + local.set $l8616 + local.get $l8615 + local.get $l8616 + i32.add + local.set $l8617 + local.get $l8616 + local.get $l8617 + i32.add + local.set $l8618 + local.get $l8617 + local.get $l8618 + i32.add + local.set $l8619 + local.get $l8618 + local.get $l8619 + i32.add + local.set $l8620 + local.get $l8619 + local.get $l8620 + i32.add + local.set $l8621 + local.get $l8620 + local.get $l8621 + i32.add + local.set $l8622 + local.get $l8621 + local.get $l8622 + i32.add + local.set $l8623 + local.get $l8622 + local.get $l8623 + i32.add + local.set $l8624 + local.get $l8623 + local.get $l8624 + i32.add + local.set $l8625 + local.get $l8624 + local.get $l8625 + i32.add + local.set $l8626 + local.get $l8625 + local.get $l8626 + i32.add + local.set $l8627 + local.get $l8626 + local.get $l8627 + i32.add + local.set $l8628 + local.get $l8627 + local.get $l8628 + i32.add + local.set $l8629 + local.get $l8628 + local.get $l8629 + i32.add + local.set $l8630 + local.get $l8629 + local.get $l8630 + i32.add + local.set $l8631 + local.get $l8630 + local.get $l8631 + i32.add + local.set $l8632 + local.get $l8631 + local.get $l8632 + i32.add + local.set $l8633 + local.get $l8632 + local.get $l8633 + i32.add + local.set $l8634 + local.get $l8633 + local.get $l8634 + i32.add + local.set $l8635 + local.get $l8634 + local.get $l8635 + i32.add + local.set $l8636 + local.get $l8635 + local.get $l8636 + i32.add + local.set $l8637 + local.get $l8636 + local.get $l8637 + i32.add + local.set $l8638 + local.get $l8637 + local.get $l8638 + i32.add + local.set $l8639 + local.get $l8638 + local.get $l8639 + i32.add + local.set $l8640 + local.get $l8639 + local.get $l8640 + i32.add + local.set $l8641 + local.get $l8640 + local.get $l8641 + i32.add + local.set $l8642 + local.get $l8641 + local.get $l8642 + i32.add + local.set $l8643 + local.get $l8642 + local.get $l8643 + i32.add + local.set $l8644 + local.get $l8643 + local.get $l8644 + i32.add + local.set $l8645 + local.get $l8644 + local.get $l8645 + i32.add + local.set $l8646 + local.get $l8645 + local.get $l8646 + i32.add + local.set $l8647 + local.get $l8646 + local.get $l8647 + i32.add + local.set $l8648 + local.get $l8647 + local.get $l8648 + i32.add + local.set $l8649 + local.get $l8648 + local.get $l8649 + i32.add + local.set $l8650 + local.get $l8649 + local.get $l8650 + i32.add + local.set $l8651 + local.get $l8650 + local.get $l8651 + i32.add + local.set $l8652 + local.get $l8651 + local.get $l8652 + i32.add + local.set $l8653 + local.get $l8652 + local.get $l8653 + i32.add + local.set $l8654 + local.get $l8653 + local.get $l8654 + i32.add + local.set $l8655 + local.get $l8654 + local.get $l8655 + i32.add + local.set $l8656 + local.get $l8655 + local.get $l8656 + i32.add + local.set $l8657 + local.get $l8656 + local.get $l8657 + i32.add + local.set $l8658 + local.get $l8657 + local.get $l8658 + i32.add + local.set $l8659 + local.get $l8658 + local.get $l8659 + i32.add + local.set $l8660 + local.get $l8659 + local.get $l8660 + i32.add + local.set $l8661 + local.get $l8660 + local.get $l8661 + i32.add + local.set $l8662 + local.get $l8661 + local.get $l8662 + i32.add + local.set $l8663 + local.get $l8662 + local.get $l8663 + i32.add + local.set $l8664 + local.get $l8663 + local.get $l8664 + i32.add + local.set $l8665 + local.get $l8664 + local.get $l8665 + i32.add + local.set $l8666 + local.get $l8665 + local.get $l8666 + i32.add + local.set $l8667 + local.get $l8666 + local.get $l8667 + i32.add + local.set $l8668 + local.get $l8667 + local.get $l8668 + i32.add + local.set $l8669 + local.get $l8668 + local.get $l8669 + i32.add + local.set $l8670 + local.get $l8669 + local.get $l8670 + i32.add + local.set $l8671 + local.get $l8670 + local.get $l8671 + i32.add + local.set $l8672 + local.get $l8671 + local.get $l8672 + i32.add + local.set $l8673 + local.get $l8672 + local.get $l8673 + i32.add + local.set $l8674 + local.get $l8673 + local.get $l8674 + i32.add + local.set $l8675 + local.get $l8674 + local.get $l8675 + i32.add + local.set $l8676 + local.get $l8675 + local.get $l8676 + i32.add + local.set $l8677 + local.get $l8676 + local.get $l8677 + i32.add + local.set $l8678 + local.get $l8677 + local.get $l8678 + i32.add + local.set $l8679 + local.get $l8678 + local.get $l8679 + i32.add + local.set $l8680 + local.get $l8679 + local.get $l8680 + i32.add + local.set $l8681 + local.get $l8680 + local.get $l8681 + i32.add + local.set $l8682 + local.get $l8681 + local.get $l8682 + i32.add + local.set $l8683 + local.get $l8682 + local.get $l8683 + i32.add + local.set $l8684 + local.get $l8683 + local.get $l8684 + i32.add + local.set $l8685 + local.get $l8684 + local.get $l8685 + i32.add + local.set $l8686 + local.get $l8685 + local.get $l8686 + i32.add + local.set $l8687 + local.get $l8686 + local.get $l8687 + i32.add + local.set $l8688 + local.get $l8687 + local.get $l8688 + i32.add + local.set $l8689 + local.get $l8688 + local.get $l8689 + i32.add + local.set $l8690 + local.get $l8689 + local.get $l8690 + i32.add + local.set $l8691 + local.get $l8690 + local.get $l8691 + i32.add + local.set $l8692 + local.get $l8691 + local.get $l8692 + i32.add + local.set $l8693 + local.get $l8692 + local.get $l8693 + i32.add + local.set $l8694 + local.get $l8693 + local.get $l8694 + i32.add + local.set $l8695 + local.get $l8694 + local.get $l8695 + i32.add + local.set $l8696 + local.get $l8695 + local.get $l8696 + i32.add + local.set $l8697 + local.get $l8696 + local.get $l8697 + i32.add + local.set $l8698 + local.get $l8697 + local.get $l8698 + i32.add + local.set $l8699 + local.get $l8698 + local.get $l8699 + i32.add + local.set $l8700 + local.get $l8699 + local.get $l8700 + i32.add + local.set $l8701 + local.get $l8700 + local.get $l8701 + i32.add + local.set $l8702 + local.get $l8701 + local.get $l8702 + i32.add + local.set $l8703 + local.get $l8702 + local.get $l8703 + i32.add + local.set $l8704 + local.get $l8703 + local.get $l8704 + i32.add + local.set $l8705 + local.get $l8704 + local.get $l8705 + i32.add + local.set $l8706 + local.get $l8705 + local.get $l8706 + i32.add + local.set $l8707 + local.get $l8706 + local.get $l8707 + i32.add + local.set $l8708 + local.get $l8707 + local.get $l8708 + i32.add + local.set $l8709 + local.get $l8708 + local.get $l8709 + i32.add + local.set $l8710 + local.get $l8709 + local.get $l8710 + i32.add + local.set $l8711 + local.get $l8710 + local.get $l8711 + i32.add + local.set $l8712 + local.get $l8711 + local.get $l8712 + i32.add + local.set $l8713 + local.get $l8712 + local.get $l8713 + i32.add + local.set $l8714 + local.get $l8713 + local.get $l8714 + i32.add + local.set $l8715 + local.get $l8714 + local.get $l8715 + i32.add + local.set $l8716 + local.get $l8715 + local.get $l8716 + i32.add + local.set $l8717 + local.get $l8716 + local.get $l8717 + i32.add + local.set $l8718 + local.get $l8717 + local.get $l8718 + i32.add + local.set $l8719 + local.get $l8718 + local.get $l8719 + i32.add + local.set $l8720 + local.get $l8719 + local.get $l8720 + i32.add + local.set $l8721 + local.get $l8720 + local.get $l8721 + i32.add + local.set $l8722 + local.get $l8721 + local.get $l8722 + i32.add + local.set $l8723 + local.get $l8722 + local.get $l8723 + i32.add + local.set $l8724 + local.get $l8723 + local.get $l8724 + i32.add + local.set $l8725 + local.get $l8724 + local.get $l8725 + i32.add + local.set $l8726 + local.get $l8725 + local.get $l8726 + i32.add + local.set $l8727 + local.get $l8726 + local.get $l8727 + i32.add + local.set $l8728 + local.get $l8727 + local.get $l8728 + i32.add + local.set $l8729 + local.get $l8728 + local.get $l8729 + i32.add + local.set $l8730 + local.get $l8729 + local.get $l8730 + i32.add + local.set $l8731 + local.get $l8730 + local.get $l8731 + i32.add + local.set $l8732 + local.get $l8731 + local.get $l8732 + i32.add + local.set $l8733 + local.get $l8732 + local.get $l8733 + i32.add + local.set $l8734 + local.get $l8733 + local.get $l8734 + i32.add + local.set $l8735 + local.get $l8734 + local.get $l8735 + i32.add + local.set $l8736 + local.get $l8735 + local.get $l8736 + i32.add + local.set $l8737 + local.get $l8736 + local.get $l8737 + i32.add + local.set $l8738 + local.get $l8737 + local.get $l8738 + i32.add + local.set $l8739 + local.get $l8738 + local.get $l8739 + i32.add + local.set $l8740 + local.get $l8739 + local.get $l8740 + i32.add + local.set $l8741 + local.get $l8740 + local.get $l8741 + i32.add + local.set $l8742 + local.get $l8741 + local.get $l8742 + i32.add + local.set $l8743 + local.get $l8742 + local.get $l8743 + i32.add + local.set $l8744 + local.get $l8743 + local.get $l8744 + i32.add + local.set $l8745 + local.get $l8744 + local.get $l8745 + i32.add + local.set $l8746 + local.get $l8745 + local.get $l8746 + i32.add + local.set $l8747 + local.get $l8746 + local.get $l8747 + i32.add + local.set $l8748 + local.get $l8747 + local.get $l8748 + i32.add + local.set $l8749 + local.get $l8748 + local.get $l8749 + i32.add + local.set $l8750 + local.get $l8749 + local.get $l8750 + i32.add + local.set $l8751 + local.get $l8750 + local.get $l8751 + i32.add + local.set $l8752 + local.get $l8751 + local.get $l8752 + i32.add + local.set $l8753 + local.get $l8752 + local.get $l8753 + i32.add + local.set $l8754 + local.get $l8753 + local.get $l8754 + i32.add + local.set $l8755 + local.get $l8754 + local.get $l8755 + i32.add + local.set $l8756 + local.get $l8755 + local.get $l8756 + i32.add + local.set $l8757 + local.get $l8756 + local.get $l8757 + i32.add + local.set $l8758 + local.get $l8757 + local.get $l8758 + i32.add + local.set $l8759 + local.get $l8758 + local.get $l8759 + i32.add + local.set $l8760 + local.get $l8759 + local.get $l8760 + i32.add + local.set $l8761 + local.get $l8760 + local.get $l8761 + i32.add + local.set $l8762 + local.get $l8761 + local.get $l8762 + i32.add + local.set $l8763 + local.get $l8762 + local.get $l8763 + i32.add + local.set $l8764 + local.get $l8763 + local.get $l8764 + i32.add + local.set $l8765 + local.get $l8764 + local.get $l8765 + i32.add + local.set $l8766 + local.get $l8765 + local.get $l8766 + i32.add + local.set $l8767 + local.get $l8766 + local.get $l8767 + i32.add + local.set $l8768 + local.get $l8767 + local.get $l8768 + i32.add + local.set $l8769 + local.get $l8768 + local.get $l8769 + i32.add + local.set $l8770 + local.get $l8769 + local.get $l8770 + i32.add + local.set $l8771 + local.get $l8770 + local.get $l8771 + i32.add + local.set $l8772 + local.get $l8771 + local.get $l8772 + i32.add + local.set $l8773 + local.get $l8772 + local.get $l8773 + i32.add + local.set $l8774 + local.get $l8773 + local.get $l8774 + i32.add + local.set $l8775 + local.get $l8774 + local.get $l8775 + i32.add + local.set $l8776 + local.get $l8775 + local.get $l8776 + i32.add + local.set $l8777 + local.get $l8776 + local.get $l8777 + i32.add + local.set $l8778 + local.get $l8777 + local.get $l8778 + i32.add + local.set $l8779 + local.get $l8778 + local.get $l8779 + i32.add + local.set $l8780 + local.get $l8779 + local.get $l8780 + i32.add + local.set $l8781 + local.get $l8780 + local.get $l8781 + i32.add + local.set $l8782 + local.get $l8781 + local.get $l8782 + i32.add + local.set $l8783 + local.get $l8782 + local.get $l8783 + i32.add + local.set $l8784 + local.get $l8783 + local.get $l8784 + i32.add + local.set $l8785 + local.get $l8784 + local.get $l8785 + i32.add + local.set $l8786 + local.get $l8785 + local.get $l8786 + i32.add + local.set $l8787 + local.get $l8786 + local.get $l8787 + i32.add + local.set $l8788 + local.get $l8787 + local.get $l8788 + i32.add + local.set $l8789 + local.get $l8788 + local.get $l8789 + i32.add + local.set $l8790 + local.get $l8789 + local.get $l8790 + i32.add + local.set $l8791 + local.get $l8790 + local.get $l8791 + i32.add + local.set $l8792 + local.get $l8791 + local.get $l8792 + i32.add + local.set $l8793 + local.get $l8792 + local.get $l8793 + i32.add + local.set $l8794 + local.get $l8793 + local.get $l8794 + i32.add + local.set $l8795 + local.get $l8794 + local.get $l8795 + i32.add + local.set $l8796 + local.get $l8795 + local.get $l8796 + i32.add + local.set $l8797 + local.get $l8796 + local.get $l8797 + i32.add + local.set $l8798 + local.get $l8797 + local.get $l8798 + i32.add + local.set $l8799 + local.get $l8798 + local.get $l8799 + i32.add + local.set $l8800 + local.get $l8799 + local.get $l8800 + i32.add + local.set $l8801 + local.get $l8800 + local.get $l8801 + i32.add + local.set $l8802 + local.get $l8801 + local.get $l8802 + i32.add + local.set $l8803 + local.get $l8802 + local.get $l8803 + i32.add + local.set $l8804 + local.get $l8803 + local.get $l8804 + i32.add + local.set $l8805 + local.get $l8804 + local.get $l8805 + i32.add + local.set $l8806 + local.get $l8805 + local.get $l8806 + i32.add + local.set $l8807 + local.get $l8806 + local.get $l8807 + i32.add + local.set $l8808 + local.get $l8807 + local.get $l8808 + i32.add + local.set $l8809 + local.get $l8808 + local.get $l8809 + i32.add + local.set $l8810 + local.get $l8809 + local.get $l8810 + i32.add + local.set $l8811 + local.get $l8810 + local.get $l8811 + i32.add + local.set $l8812 + local.get $l8811 + local.get $l8812 + i32.add + local.set $l8813 + local.get $l8812 + local.get $l8813 + i32.add + local.set $l8814 + local.get $l8813 + local.get $l8814 + i32.add + local.set $l8815 + local.get $l8814 + local.get $l8815 + i32.add + local.set $l8816 + local.get $l8815 + local.get $l8816 + i32.add + local.set $l8817 + local.get $l8816 + local.get $l8817 + i32.add + local.set $l8818 + local.get $l8817 + local.get $l8818 + i32.add + local.set $l8819 + local.get $l8818 + local.get $l8819 + i32.add + local.set $l8820 + local.get $l8819 + local.get $l8820 + i32.add + local.set $l8821 + local.get $l8820 + local.get $l8821 + i32.add + local.set $l8822 + local.get $l8821 + local.get $l8822 + i32.add + local.set $l8823 + local.get $l8822 + local.get $l8823 + i32.add + local.set $l8824 + local.get $l8823 + local.get $l8824 + i32.add + local.set $l8825 + local.get $l8824 + local.get $l8825 + i32.add + local.set $l8826 + local.get $l8825 + local.get $l8826 + i32.add + local.set $l8827 + local.get $l8826 + local.get $l8827 + i32.add + local.set $l8828 + local.get $l8827 + local.get $l8828 + i32.add + local.set $l8829 + local.get $l8828 + local.get $l8829 + i32.add + local.set $l8830 + local.get $l8829 + local.get $l8830 + i32.add + local.set $l8831 + local.get $l8830 + local.get $l8831 + i32.add + local.set $l8832 + local.get $l8831 + local.get $l8832 + i32.add + local.set $l8833 + local.get $l8832 + local.get $l8833 + i32.add + local.set $l8834 + local.get $l8833 + local.get $l8834 + i32.add + local.set $l8835 + local.get $l8834 + local.get $l8835 + i32.add + local.set $l8836 + local.get $l8835 + local.get $l8836 + i32.add + local.set $l8837 + local.get $l8836 + local.get $l8837 + i32.add + local.set $l8838 + local.get $l8837 + local.get $l8838 + i32.add + local.set $l8839 + local.get $l8838 + local.get $l8839 + i32.add + local.set $l8840 + local.get $l8839 + local.get $l8840 + i32.add + local.set $l8841 + local.get $l8840 + local.get $l8841 + i32.add + local.set $l8842 + local.get $l8841 + local.get $l8842 + i32.add + local.set $l8843 + local.get $l8842 + local.get $l8843 + i32.add + local.set $l8844 + local.get $l8843 + local.get $l8844 + i32.add + local.set $l8845 + local.get $l8844 + local.get $l8845 + i32.add + local.set $l8846 + local.get $l8845 + local.get $l8846 + i32.add + local.set $l8847 + local.get $l8846 + local.get $l8847 + i32.add + local.set $l8848 + local.get $l8847 + local.get $l8848 + i32.add + local.set $l8849 + local.get $l8848 + local.get $l8849 + i32.add + local.set $l8850 + local.get $l8849 + local.get $l8850 + i32.add + local.set $l8851 + local.get $l8850 + local.get $l8851 + i32.add + local.set $l8852 + local.get $l8851 + local.get $l8852 + i32.add + local.set $l8853 + local.get $l8852 + local.get $l8853 + i32.add + local.set $l8854 + local.get $l8853 + local.get $l8854 + i32.add + local.set $l8855 + local.get $l8854 + local.get $l8855 + i32.add + local.set $l8856 + local.get $l8855 + local.get $l8856 + i32.add + local.set $l8857 + local.get $l8856 + local.get $l8857 + i32.add + local.set $l8858 + local.get $l8857 + local.get $l8858 + i32.add + local.set $l8859 + local.get $l8858 + local.get $l8859 + i32.add + local.set $l8860 + local.get $l8859 + local.get $l8860 + i32.add + local.set $l8861 + local.get $l8860 + local.get $l8861 + i32.add + local.set $l8862 + local.get $l8861 + local.get $l8862 + i32.add + local.set $l8863 + local.get $l8862 + local.get $l8863 + i32.add + local.set $l8864 + local.get $l8863 + local.get $l8864 + i32.add + local.set $l8865 + local.get $l8864 + local.get $l8865 + i32.add + local.set $l8866 + local.get $l8865 + local.get $l8866 + i32.add + local.set $l8867 + local.get $l8866 + local.get $l8867 + i32.add + local.set $l8868 + local.get $l8867 + local.get $l8868 + i32.add + local.set $l8869 + local.get $l8868 + local.get $l8869 + i32.add + local.set $l8870 + local.get $l8869 + local.get $l8870 + i32.add + local.set $l8871 + local.get $l8870 + local.get $l8871 + i32.add + local.set $l8872 + local.get $l8871 + local.get $l8872 + i32.add + local.set $l8873 + local.get $l8872 + local.get $l8873 + i32.add + local.set $l8874 + local.get $l8873 + local.get $l8874 + i32.add + local.set $l8875 + local.get $l8874 + local.get $l8875 + i32.add + local.set $l8876 + local.get $l8875 + local.get $l8876 + i32.add + local.set $l8877 + local.get $l8876 + local.get $l8877 + i32.add + local.set $l8878 + local.get $l8877 + local.get $l8878 + i32.add + local.set $l8879 + local.get $l8878 + local.get $l8879 + i32.add + local.set $l8880 + local.get $l8879 + local.get $l8880 + i32.add + local.set $l8881 + local.get $l8880 + local.get $l8881 + i32.add + local.set $l8882 + local.get $l8881 + local.get $l8882 + i32.add + local.set $l8883 + local.get $l8882 + local.get $l8883 + i32.add + local.set $l8884 + local.get $l8883 + local.get $l8884 + i32.add + local.set $l8885 + local.get $l8884 + local.get $l8885 + i32.add + local.set $l8886 + local.get $l8885 + local.get $l8886 + i32.add + local.set $l8887 + local.get $l8886 + local.get $l8887 + i32.add + local.set $l8888 + local.get $l8887 + local.get $l8888 + i32.add + local.set $l8889 + local.get $l8888 + local.get $l8889 + i32.add + local.set $l8890 + local.get $l8889 + local.get $l8890 + i32.add + local.set $l8891 + local.get $l8890 + local.get $l8891 + i32.add + local.set $l8892 + local.get $l8891 + local.get $l8892 + i32.add + local.set $l8893 + local.get $l8892 + local.get $l8893 + i32.add + local.set $l8894 + local.get $l8893 + local.get $l8894 + i32.add + local.set $l8895 + local.get $l8894 + local.get $l8895 + i32.add + local.set $l8896 + local.get $l8895 + local.get $l8896 + i32.add + local.set $l8897 + local.get $l8896 + local.get $l8897 + i32.add + local.set $l8898 + local.get $l8897 + local.get $l8898 + i32.add + local.set $l8899 + local.get $l8898 + local.get $l8899 + i32.add + local.set $l8900 + local.get $l8899 + local.get $l8900 + i32.add + local.set $l8901 + local.get $l8900 + local.get $l8901 + i32.add + local.set $l8902 + local.get $l8901 + local.get $l8902 + i32.add + local.set $l8903 + local.get $l8902 + local.get $l8903 + i32.add + local.set $l8904 + local.get $l8903 + local.get $l8904 + i32.add + local.set $l8905 + local.get $l8904 + local.get $l8905 + i32.add + local.set $l8906 + local.get $l8905 + local.get $l8906 + i32.add + local.set $l8907 + local.get $l8906 + local.get $l8907 + i32.add + local.set $l8908 + local.get $l8907 + local.get $l8908 + i32.add + local.set $l8909 + local.get $l8908 + local.get $l8909 + i32.add + local.set $l8910 + local.get $l8909 + local.get $l8910 + i32.add + local.set $l8911 + local.get $l8910 + local.get $l8911 + i32.add + local.set $l8912 + local.get $l8911 + local.get $l8912 + i32.add + local.set $l8913 + local.get $l8912 + local.get $l8913 + i32.add + local.set $l8914 + local.get $l8913 + local.get $l8914 + i32.add + local.set $l8915 + local.get $l8914 + local.get $l8915 + i32.add + local.set $l8916 + local.get $l8915 + local.get $l8916 + i32.add + local.set $l8917 + local.get $l8916 + local.get $l8917 + i32.add + local.set $l8918 + local.get $l8917 + local.get $l8918 + i32.add + local.set $l8919 + local.get $l8918 + local.get $l8919 + i32.add + local.set $l8920 + local.get $l8919 + local.get $l8920 + i32.add + local.set $l8921 + local.get $l8920 + local.get $l8921 + i32.add + local.set $l8922 + local.get $l8921 + local.get $l8922 + i32.add + local.set $l8923 + local.get $l8922 + local.get $l8923 + i32.add + local.set $l8924 + local.get $l8923 + local.get $l8924 + i32.add + local.set $l8925 + local.get $l8924 + local.get $l8925 + i32.add + local.set $l8926 + local.get $l8925 + local.get $l8926 + i32.add + local.set $l8927 + local.get $l8926 + local.get $l8927 + i32.add + local.set $l8928 + local.get $l8927 + local.get $l8928 + i32.add + local.set $l8929 + local.get $l8928 + local.get $l8929 + i32.add + local.set $l8930 + local.get $l8929 + local.get $l8930 + i32.add + local.set $l8931 + local.get $l8930 + local.get $l8931 + i32.add + local.set $l8932 + local.get $l8931 + local.get $l8932 + i32.add + local.set $l8933 + local.get $l8932 + local.get $l8933 + i32.add + local.set $l8934 + local.get $l8933 + local.get $l8934 + i32.add + local.set $l8935 + local.get $l8934 + local.get $l8935 + i32.add + local.set $l8936 + local.get $l8935 + local.get $l8936 + i32.add + local.set $l8937 + local.get $l8936 + local.get $l8937 + i32.add + local.set $l8938 + local.get $l8937 + local.get $l8938 + i32.add + local.set $l8939 + local.get $l8938 + local.get $l8939 + i32.add + local.set $l8940 + local.get $l8939 + local.get $l8940 + i32.add + local.set $l8941 + local.get $l8940 + local.get $l8941 + i32.add + local.set $l8942 + local.get $l8941 + local.get $l8942 + i32.add + local.set $l8943 + local.get $l8942 + local.get $l8943 + i32.add + local.set $l8944 + local.get $l8943 + local.get $l8944 + i32.add + local.set $l8945 + local.get $l8944 + local.get $l8945 + i32.add + local.set $l8946 + local.get $l8945 + local.get $l8946 + i32.add + local.set $l8947 + local.get $l8946 + local.get $l8947 + i32.add + local.set $l8948 + local.get $l8947 + local.get $l8948 + i32.add + local.set $l8949 + local.get $l8948 + local.get $l8949 + i32.add + local.set $l8950 + local.get $l8949 + local.get $l8950 + i32.add + local.set $l8951 + local.get $l8950 + local.get $l8951 + i32.add + local.set $l8952 + local.get $l8951 + local.get $l8952 + i32.add + local.set $l8953 + local.get $l8952 + local.get $l8953 + i32.add + local.set $l8954 + local.get $l8953 + local.get $l8954 + i32.add + local.set $l8955 + local.get $l8954 + local.get $l8955 + i32.add + local.set $l8956 + local.get $l8955 + local.get $l8956 + i32.add + local.set $l8957 + local.get $l8956 + local.get $l8957 + i32.add + local.set $l8958 + local.get $l8957 + local.get $l8958 + i32.add + local.set $l8959 + local.get $l8958 + local.get $l8959 + i32.add + local.set $l8960 + local.get $l8959 + local.get $l8960 + i32.add + local.set $l8961 + local.get $l8960 + local.get $l8961 + i32.add + local.set $l8962 + local.get $l8961 + local.get $l8962 + i32.add + local.set $l8963 + local.get $l8962 + local.get $l8963 + i32.add + local.set $l8964 + local.get $l8963 + local.get $l8964 + i32.add + local.set $l8965 + local.get $l8964 + local.get $l8965 + i32.add + local.set $l8966 + local.get $l8965 + local.get $l8966 + i32.add + local.set $l8967 + local.get $l8966 + local.get $l8967 + i32.add + local.set $l8968 + local.get $l8967 + local.get $l8968 + i32.add + local.set $l8969 + local.get $l8968 + local.get $l8969 + i32.add + local.set $l8970 + local.get $l8969 + local.get $l8970 + i32.add + local.set $l8971 + local.get $l8970 + local.get $l8971 + i32.add + local.set $l8972 + local.get $l8971 + local.get $l8972 + i32.add + local.set $l8973 + local.get $l8972 + local.get $l8973 + i32.add + local.set $l8974 + local.get $l8973 + local.get $l8974 + i32.add + local.set $l8975 + local.get $l8974 + local.get $l8975 + i32.add + local.set $l8976 + local.get $l8975 + local.get $l8976 + i32.add + local.set $l8977 + local.get $l8976 + local.get $l8977 + i32.add + local.set $l8978 + local.get $l8977 + local.get $l8978 + i32.add + local.set $l8979 + local.get $l8978 + local.get $l8979 + i32.add + local.set $l8980 + local.get $l8979 + local.get $l8980 + i32.add + local.set $l8981 + local.get $l8980 + local.get $l8981 + i32.add + local.set $l8982 + local.get $l8981 + local.get $l8982 + i32.add + local.set $l8983 + local.get $l8982 + local.get $l8983 + i32.add + local.set $l8984 + local.get $l8983 + local.get $l8984 + i32.add + local.set $l8985 + local.get $l8984 + local.get $l8985 + i32.add + local.set $l8986 + local.get $l8985 + local.get $l8986 + i32.add + local.set $l8987 + local.get $l8986 + local.get $l8987 + i32.add + local.set $l8988 + local.get $l8987 + local.get $l8988 + i32.add + local.set $l8989 + local.get $l8988 + local.get $l8989 + i32.add + local.set $l8990 + local.get $l8989 + local.get $l8990 + i32.add + local.set $l8991 + local.get $l8990 + local.get $l8991 + i32.add + local.set $l8992 + local.get $l8991 + local.get $l8992 + i32.add + local.set $l8993 + local.get $l8992 + local.get $l8993 + i32.add + local.set $l8994 + local.get $l8993 + local.get $l8994 + i32.add + local.set $l8995 + local.get $l8994 + local.get $l8995 + i32.add + local.set $l8996 + local.get $l8995 + local.get $l8996 + i32.add + local.set $l8997 + local.get $l8996 + local.get $l8997 + i32.add + local.set $l8998 + local.get $l8997 + local.get $l8998 + i32.add + local.set $l8999 + local.get $l8998 + local.get $l8999 + i32.add + local.set $l9000 + local.get $l8999 + local.get $l9000 + i32.add + local.set $l9001 + local.get $l9000 + local.get $l9001 + i32.add + local.set $l9002 + local.get $l9001 + local.get $l9002 + i32.add + local.set $l9003 + local.get $l9002 + local.get $l9003 + i32.add + local.set $l9004 + local.get $l9003 + local.get $l9004 + i32.add + local.set $l9005 + local.get $l9004 + local.get $l9005 + i32.add + local.set $l9006 + local.get $l9005 + local.get $l9006 + i32.add + local.set $l9007 + local.get $l9006 + local.get $l9007 + i32.add + local.set $l9008 + local.get $l9007 + local.get $l9008 + i32.add + local.set $l9009 + local.get $l9008 + local.get $l9009 + i32.add + local.set $l9010 + local.get $l9009 + local.get $l9010 + i32.add + local.set $l9011 + local.get $l9010 + local.get $l9011 + i32.add + local.set $l9012 + local.get $l9011 + local.get $l9012 + i32.add + local.set $l9013 + local.get $l9012 + local.get $l9013 + i32.add + local.set $l9014 + local.get $l9013 + local.get $l9014 + i32.add + local.set $l9015 + local.get $l9014 + local.get $l9015 + i32.add + local.set $l9016 + local.get $l9015 + local.get $l9016 + i32.add + local.set $l9017 + local.get $l9016 + local.get $l9017 + i32.add + local.set $l9018 + local.get $l9017 + local.get $l9018 + i32.add + local.set $l9019 + local.get $l9018 + local.get $l9019 + i32.add + local.set $l9020 + local.get $l9019 + local.get $l9020 + i32.add + local.set $l9021 + local.get $l9020 + local.get $l9021 + i32.add + local.set $l9022 + local.get $l9021 + local.get $l9022 + i32.add + local.set $l9023 + local.get $l9022 + local.get $l9023 + i32.add + local.set $l9024 + local.get $l9023 + local.get $l9024 + i32.add + local.set $l9025 + local.get $l9024 + local.get $l9025 + i32.add + local.set $l9026 + local.get $l9025 + local.get $l9026 + i32.add + local.set $l9027 + local.get $l9026 + local.get $l9027 + i32.add + local.set $l9028 + local.get $l9027 + local.get $l9028 + i32.add + local.set $l9029 + local.get $l9028 + local.get $l9029 + i32.add + local.set $l9030 + local.get $l9029 + local.get $l9030 + i32.add + local.set $l9031 + local.get $l9030 + local.get $l9031 + i32.add + local.set $l9032 + local.get $l9031 + local.get $l9032 + i32.add + local.set $l9033 + local.get $l9032 + local.get $l9033 + i32.add + local.set $l9034 + local.get $l9033 + local.get $l9034 + i32.add + local.set $l9035 + local.get $l9034 + local.get $l9035 + i32.add + local.set $l9036 + local.get $l9035 + local.get $l9036 + i32.add + local.set $l9037 + local.get $l9036 + local.get $l9037 + i32.add + local.set $l9038 + local.get $l9037 + local.get $l9038 + i32.add + local.set $l9039 + local.get $l9038 + local.get $l9039 + i32.add + local.set $l9040 + local.get $l9039 + local.get $l9040 + i32.add + local.set $l9041 + local.get $l9040 + local.get $l9041 + i32.add + local.set $l9042 + local.get $l9041 + local.get $l9042 + i32.add + local.set $l9043 + local.get $l9042 + local.get $l9043 + i32.add + local.set $l9044 + local.get $l9043 + local.get $l9044 + i32.add + local.set $l9045 + local.get $l9044 + local.get $l9045 + i32.add + local.set $l9046 + local.get $l9045 + local.get $l9046 + i32.add + local.set $l9047 + local.get $l9046 + local.get $l9047 + i32.add + local.set $l9048 + local.get $l9047 + local.get $l9048 + i32.add + local.set $l9049 + local.get $l9048 + local.get $l9049 + i32.add + local.set $l9050 + local.get $l9049 + local.get $l9050 + i32.add + local.set $l9051 + local.get $l9050 + local.get $l9051 + i32.add + local.set $l9052 + local.get $l9051 + local.get $l9052 + i32.add + local.set $l9053 + local.get $l9052 + local.get $l9053 + i32.add + local.set $l9054 + local.get $l9053 + local.get $l9054 + i32.add + local.set $l9055 + local.get $l9054 + local.get $l9055 + i32.add + local.set $l9056 + local.get $l9055 + local.get $l9056 + i32.add + local.set $l9057 + local.get $l9056 + local.get $l9057 + i32.add + local.set $l9058 + local.get $l9057 + local.get $l9058 + i32.add + local.set $l9059 + local.get $l9058 + local.get $l9059 + i32.add + local.set $l9060 + local.get $l9059 + local.get $l9060 + i32.add + local.set $l9061 + local.get $l9060 + local.get $l9061 + i32.add + local.set $l9062 + local.get $l9061 + local.get $l9062 + i32.add + local.set $l9063 + local.get $l9062 + local.get $l9063 + i32.add + local.set $l9064 + local.get $l9063 + local.get $l9064 + i32.add + local.set $l9065 + local.get $l9064 + local.get $l9065 + i32.add + local.set $l9066 + local.get $l9065 + local.get $l9066 + i32.add + local.set $l9067 + local.get $l9066 + local.get $l9067 + i32.add + local.set $l9068 + local.get $l9067 + local.get $l9068 + i32.add + local.set $l9069 + local.get $l9068 + local.get $l9069 + i32.add + local.set $l9070 + local.get $l9069 + local.get $l9070 + i32.add + local.set $l9071 + local.get $l9070 + local.get $l9071 + i32.add + local.set $l9072 + local.get $l9071 + local.get $l9072 + i32.add + local.set $l9073 + local.get $l9072 + local.get $l9073 + i32.add + local.set $l9074 + local.get $l9073 + local.get $l9074 + i32.add + local.set $l9075 + local.get $l9074 + local.get $l9075 + i32.add + local.set $l9076 + local.get $l9075 + local.get $l9076 + i32.add + local.set $l9077 + local.get $l9076 + local.get $l9077 + i32.add + local.set $l9078 + local.get $l9077 + local.get $l9078 + i32.add + local.set $l9079 + local.get $l9078 + local.get $l9079 + i32.add + local.set $l9080 + local.get $l9079 + local.get $l9080 + i32.add + local.set $l9081 + local.get $l9080 + local.get $l9081 + i32.add + local.set $l9082 + local.get $l9081 + local.get $l9082 + i32.add + local.set $l9083 + local.get $l9082 + local.get $l9083 + i32.add + local.set $l9084 + local.get $l9083 + local.get $l9084 + i32.add + local.set $l9085 + local.get $l9084 + local.get $l9085 + i32.add + local.set $l9086 + local.get $l9085 + local.get $l9086 + i32.add + local.set $l9087 + local.get $l9086 + local.get $l9087 + i32.add + local.set $l9088 + local.get $l9087 + local.get $l9088 + i32.add + local.set $l9089 + local.get $l9088 + local.get $l9089 + i32.add + local.set $l9090 + local.get $l9089 + local.get $l9090 + i32.add + local.set $l9091 + local.get $l9090 + local.get $l9091 + i32.add + local.set $l9092 + local.get $l9091 + local.get $l9092 + i32.add + local.set $l9093 + local.get $l9092 + local.get $l9093 + i32.add + local.set $l9094 + local.get $l9093 + local.get $l9094 + i32.add + local.set $l9095 + local.get $l9094 + local.get $l9095 + i32.add + local.set $l9096 + local.get $l9095 + local.get $l9096 + i32.add + local.set $l9097 + local.get $l9096 + local.get $l9097 + i32.add + local.set $l9098 + local.get $l9097 + local.get $l9098 + i32.add + local.set $l9099 + local.get $l9098 + local.get $l9099 + i32.add + local.set $l9100 + local.get $l9099 + local.get $l9100 + i32.add + local.set $l9101 + local.get $l9100 + local.get $l9101 + i32.add + local.set $l9102 + local.get $l9101 + local.get $l9102 + i32.add + local.set $l9103 + local.get $l9102 + local.get $l9103 + i32.add + local.set $l9104 + local.get $l9103 + local.get $l9104 + i32.add + local.set $l9105 + local.get $l9104 + local.get $l9105 + i32.add + local.set $l9106 + local.get $l9105 + local.get $l9106 + i32.add + local.set $l9107 + local.get $l9106 + local.get $l9107 + i32.add + local.set $l9108 + local.get $l9107 + local.get $l9108 + i32.add + local.set $l9109 + local.get $l9108 + local.get $l9109 + i32.add + local.set $l9110 + local.get $l9109 + local.get $l9110 + i32.add + local.set $l9111 + local.get $l9110 + local.get $l9111 + i32.add + local.set $l9112 + local.get $l9111 + local.get $l9112 + i32.add + local.set $l9113 + local.get $l9112 + local.get $l9113 + i32.add + local.set $l9114 + local.get $l9113 + local.get $l9114 + i32.add + local.set $l9115 + local.get $l9114 + local.get $l9115 + i32.add + local.set $l9116 + local.get $l9115 + local.get $l9116 + i32.add + local.set $l9117 + local.get $l9116 + local.get $l9117 + i32.add + local.set $l9118 + local.get $l9117 + local.get $l9118 + i32.add + local.set $l9119 + local.get $l9118 + local.get $l9119 + i32.add + local.set $l9120 + local.get $l9119 + local.get $l9120 + i32.add + local.set $l9121 + local.get $l9120 + local.get $l9121 + i32.add + local.set $l9122 + local.get $l9121 + local.get $l9122 + i32.add + local.set $l9123 + local.get $l9122 + local.get $l9123 + i32.add + local.set $l9124 + local.get $l9123 + local.get $l9124 + i32.add + local.set $l9125 + local.get $l9124 + local.get $l9125 + i32.add + local.set $l9126 + local.get $l9125 + local.get $l9126 + i32.add + local.set $l9127 + local.get $l9126 + local.get $l9127 + i32.add + local.set $l9128 + local.get $l9127 + local.get $l9128 + i32.add + local.set $l9129 + local.get $l9128 + local.get $l9129 + i32.add + local.set $l9130 + local.get $l9129 + local.get $l9130 + i32.add + local.set $l9131 + local.get $l9130 + local.get $l9131 + i32.add + local.set $l9132 + local.get $l9131 + local.get $l9132 + i32.add + local.set $l9133 + local.get $l9132 + local.get $l9133 + i32.add + local.set $l9134 + local.get $l9133 + local.get $l9134 + i32.add + local.set $l9135 + local.get $l9134 + local.get $l9135 + i32.add + local.set $l9136 + local.get $l9135 + local.get $l9136 + i32.add + local.set $l9137 + local.get $l9136 + local.get $l9137 + i32.add + local.set $l9138 + local.get $l9137 + local.get $l9138 + i32.add + local.set $l9139 + local.get $l9138 + local.get $l9139 + i32.add + local.set $l9140 + local.get $l9139 + local.get $l9140 + i32.add + local.set $l9141 + local.get $l9140 + local.get $l9141 + i32.add + local.set $l9142 + local.get $l9141 + local.get $l9142 + i32.add + local.set $l9143 + local.get $l9142 + local.get $l9143 + i32.add + local.set $l9144 + local.get $l9143 + local.get $l9144 + i32.add + local.set $l9145 + local.get $l9144 + local.get $l9145 + i32.add + local.set $l9146 + local.get $l9145 + local.get $l9146 + i32.add + local.set $l9147 + local.get $l9146 + local.get $l9147 + i32.add + local.set $l9148 + local.get $l9147 + local.get $l9148 + i32.add + local.set $l9149 + local.get $l9148 + local.get $l9149 + i32.add + local.set $l9150 + local.get $l9149 + local.get $l9150 + i32.add + local.set $l9151 + local.get $l9150 + local.get $l9151 + i32.add + local.set $l9152 + local.get $l9151 + local.get $l9152 + i32.add + local.set $l9153 + local.get $l9152 + local.get $l9153 + i32.add + local.set $l9154 + local.get $l9153 + local.get $l9154 + i32.add + local.set $l9155 + local.get $l9154 + local.get $l9155 + i32.add + local.set $l9156 + local.get $l9155 + local.get $l9156 + i32.add + local.set $l9157 + local.get $l9156 + local.get $l9157 + i32.add + local.set $l9158 + local.get $l9157 + local.get $l9158 + i32.add + local.set $l9159 + local.get $l9158 + local.get $l9159 + i32.add + local.set $l9160 + local.get $l9159 + local.get $l9160 + i32.add + local.set $l9161 + local.get $l9160 + local.get $l9161 + i32.add + local.set $l9162 + local.get $l9161 + local.get $l9162 + i32.add + local.set $l9163 + local.get $l9162 + local.get $l9163 + i32.add + local.set $l9164 + local.get $l9163 + local.get $l9164 + i32.add + local.set $l9165 + local.get $l9164 + local.get $l9165 + i32.add + local.set $l9166 + local.get $l9165 + local.get $l9166 + i32.add + local.set $l9167 + local.get $l9166 + local.get $l9167 + i32.add + local.set $l9168 + local.get $l9167 + local.get $l9168 + i32.add + local.set $l9169 + local.get $l9168 + local.get $l9169 + i32.add + local.set $l9170 + local.get $l9169 + local.get $l9170 + i32.add + local.set $l9171 + local.get $l9170 + local.get $l9171 + i32.add + local.set $l9172 + local.get $l9171 + local.get $l9172 + i32.add + local.set $l9173 + local.get $l9172 + local.get $l9173 + i32.add + local.set $l9174 + local.get $l9173 + local.get $l9174 + i32.add + local.set $l9175 + local.get $l9174 + local.get $l9175 + i32.add + local.set $l9176 + local.get $l9175 + local.get $l9176 + i32.add + local.set $l9177 + local.get $l9176 + local.get $l9177 + i32.add + local.set $l9178 + local.get $l9177 + local.get $l9178 + i32.add + local.set $l9179 + local.get $l9178 + local.get $l9179 + i32.add + local.set $l9180 + local.get $l9179 + local.get $l9180 + i32.add + local.set $l9181 + local.get $l9180 + local.get $l9181 + i32.add + local.set $l9182 + local.get $l9181 + local.get $l9182 + i32.add + local.set $l9183 + local.get $l9182 + local.get $l9183 + i32.add + local.set $l9184 + local.get $l9183 + local.get $l9184 + i32.add + local.set $l9185 + local.get $l9184 + local.get $l9185 + i32.add + local.set $l9186 + local.get $l9185 + local.get $l9186 + i32.add + local.set $l9187 + local.get $l9186 + local.get $l9187 + i32.add + local.set $l9188 + local.get $l9187 + local.get $l9188 + i32.add + local.set $l9189 + local.get $l9188 + local.get $l9189 + i32.add + local.set $l9190 + local.get $l9189 + local.get $l9190 + i32.add + local.set $l9191 + local.get $l9190 + local.get $l9191 + i32.add + local.set $l9192 + local.get $l9191 + local.get $l9192 + i32.add + local.set $l9193 + local.get $l9192 + local.get $l9193 + i32.add + local.set $l9194 + local.get $l9193 + local.get $l9194 + i32.add + local.set $l9195 + local.get $l9194 + local.get $l9195 + i32.add + local.set $l9196 + local.get $l9195 + local.get $l9196 + i32.add + local.set $l9197 + local.get $l9196 + local.get $l9197 + i32.add + local.set $l9198 + local.get $l9197 + local.get $l9198 + i32.add + local.set $l9199 + local.get $l9198 + local.get $l9199 + i32.add + local.set $l9200 + local.get $l9199 + local.get $l9200 + i32.add + local.set $l9201 + local.get $l9200 + local.get $l9201 + i32.add + local.set $l9202 + local.get $l9201 + local.get $l9202 + i32.add + local.set $l9203 + local.get $l9202 + local.get $l9203 + i32.add + local.set $l9204 + local.get $l9203 + local.get $l9204 + i32.add + local.set $l9205 + local.get $l9204 + local.get $l9205 + i32.add + local.set $l9206 + local.get $l9205 + local.get $l9206 + i32.add + local.set $l9207 + local.get $l9206 + local.get $l9207 + i32.add + local.set $l9208 + local.get $l9207 + local.get $l9208 + i32.add + local.set $l9209 + local.get $l9208 + local.get $l9209 + i32.add + local.set $l9210 + local.get $l9209 + local.get $l9210 + i32.add + local.set $l9211 + local.get $l9210 + local.get $l9211 + i32.add + local.set $l9212 + local.get $l9211 + local.get $l9212 + i32.add + local.set $l9213 + local.get $l9212 + local.get $l9213 + i32.add + local.set $l9214 + local.get $l9213 + local.get $l9214 + i32.add + local.set $l9215 + local.get $l9214 + local.get $l9215 + i32.add + local.set $l9216 + local.get $l9215 + local.get $l9216 + i32.add + local.set $l9217 + local.get $l9216 + local.get $l9217 + i32.add + local.set $l9218 + local.get $l9217 + local.get $l9218 + i32.add + local.set $l9219 + local.get $l9218 + local.get $l9219 + i32.add + local.set $l9220 + local.get $l9219 + local.get $l9220 + i32.add + local.set $l9221 + local.get $l9220 + local.get $l9221 + i32.add + local.set $l9222 + local.get $l9221 + local.get $l9222 + i32.add + local.set $l9223 + local.get $l9222 + local.get $l9223 + i32.add + local.set $l9224 + local.get $l9223 + local.get $l9224 + i32.add + local.set $l9225 + local.get $l9224 + local.get $l9225 + i32.add + local.set $l9226 + local.get $l9225 + local.get $l9226 + i32.add + local.set $l9227 + local.get $l9226 + local.get $l9227 + i32.add + local.set $l9228 + local.get $l9227 + local.get $l9228 + i32.add + local.set $l9229 + local.get $l9228 + local.get $l9229 + i32.add + local.set $l9230 + local.get $l9229 + local.get $l9230 + i32.add + local.set $l9231 + local.get $l9230 + local.get $l9231 + i32.add + local.set $l9232 + local.get $l9231 + local.get $l9232 + i32.add + local.set $l9233 + local.get $l9232 + local.get $l9233 + i32.add + local.set $l9234 + local.get $l9233 + local.get $l9234 + i32.add + local.set $l9235 + local.get $l9234 + local.get $l9235 + i32.add + local.set $l9236 + local.get $l9235 + local.get $l9236 + i32.add + local.set $l9237 + local.get $l9236 + local.get $l9237 + i32.add + local.set $l9238 + local.get $l9237 + local.get $l9238 + i32.add + local.set $l9239 + local.get $l9238 + local.get $l9239 + i32.add + local.set $l9240 + local.get $l9239 + local.get $l9240 + i32.add + local.set $l9241 + local.get $l9240 + local.get $l9241 + i32.add + local.set $l9242 + local.get $l9241 + local.get $l9242 + i32.add + local.set $l9243 + local.get $l9242 + local.get $l9243 + i32.add + local.set $l9244 + local.get $l9243 + local.get $l9244 + i32.add + local.set $l9245 + local.get $l9244 + local.get $l9245 + i32.add + local.set $l9246 + local.get $l9245 + local.get $l9246 + i32.add + local.set $l9247 + local.get $l9246 + local.get $l9247 + i32.add + local.set $l9248 + local.get $l9247 + local.get $l9248 + i32.add + local.set $l9249 + local.get $l9248 + local.get $l9249 + i32.add + local.set $l9250 + local.get $l9249 + local.get $l9250 + i32.add + local.set $l9251 + local.get $l9250 + local.get $l9251 + i32.add + local.set $l9252 + local.get $l9251 + local.get $l9252 + i32.add + local.set $l9253 + local.get $l9252 + local.get $l9253 + i32.add + local.set $l9254 + local.get $l9253 + local.get $l9254 + i32.add + local.set $l9255 + local.get $l9254 + local.get $l9255 + i32.add + local.set $l9256 + local.get $l9255 + local.get $l9256 + i32.add + local.set $l9257 + local.get $l9256 + local.get $l9257 + i32.add + local.set $l9258 + local.get $l9257 + local.get $l9258 + i32.add + local.set $l9259 + local.get $l9258 + local.get $l9259 + i32.add + local.set $l9260 + local.get $l9259 + local.get $l9260 + i32.add + local.set $l9261 + local.get $l9260 + local.get $l9261 + i32.add + local.set $l9262 + local.get $l9261 + local.get $l9262 + i32.add + local.set $l9263 + local.get $l9262 + local.get $l9263 + i32.add + local.set $l9264 + local.get $l9263 + local.get $l9264 + i32.add + local.set $l9265 + local.get $l9264 + local.get $l9265 + i32.add + local.set $l9266 + local.get $l9265 + local.get $l9266 + i32.add + local.set $l9267 + local.get $l9266 + local.get $l9267 + i32.add + local.set $l9268 + local.get $l9267 + local.get $l9268 + i32.add + local.set $l9269 + local.get $l9268 + local.get $l9269 + i32.add + local.set $l9270 + local.get $l9269 + local.get $l9270 + i32.add + local.set $l9271 + local.get $l9270 + local.get $l9271 + i32.add + local.set $l9272 + local.get $l9271 + local.get $l9272 + i32.add + local.set $l9273 + local.get $l9272 + local.get $l9273 + i32.add + local.set $l9274 + local.get $l9273 + local.get $l9274 + i32.add + local.set $l9275 + local.get $l9274 + local.get $l9275 + i32.add + local.set $l9276 + local.get $l9275 + local.get $l9276 + i32.add + local.set $l9277 + local.get $l9276 + local.get $l9277 + i32.add + local.set $l9278 + local.get $l9277 + local.get $l9278 + i32.add + local.set $l9279 + local.get $l9278 + local.get $l9279 + i32.add + local.set $l9280 + local.get $l9279 + local.get $l9280 + i32.add + local.set $l9281 + local.get $l9280 + local.get $l9281 + i32.add + local.set $l9282 + local.get $l9281 + local.get $l9282 + i32.add + local.set $l9283 + local.get $l9282 + local.get $l9283 + i32.add + local.set $l9284 + local.get $l9283 + local.get $l9284 + i32.add + local.set $l9285 + local.get $l9284 + local.get $l9285 + i32.add + local.set $l9286 + local.get $l9285 + local.get $l9286 + i32.add + local.set $l9287 + local.get $l9286 + local.get $l9287 + i32.add + local.set $l9288 + local.get $l9287 + local.get $l9288 + i32.add + local.set $l9289 + local.get $l9288 + local.get $l9289 + i32.add + local.set $l9290 + local.get $l9289 + local.get $l9290 + i32.add + local.set $l9291 + local.get $l9290 + local.get $l9291 + i32.add + local.set $l9292 + local.get $l9291 + local.get $l9292 + i32.add + local.set $l9293 + local.get $l9292 + local.get $l9293 + i32.add + local.set $l9294 + local.get $l9293 + local.get $l9294 + i32.add + local.set $l9295 + local.get $l9294 + local.get $l9295 + i32.add + local.set $l9296 + local.get $l9295 + local.get $l9296 + i32.add + local.set $l9297 + local.get $l9296 + local.get $l9297 + i32.add + local.set $l9298 + local.get $l9297 + local.get $l9298 + i32.add + local.set $l9299 + local.get $l9298 + local.get $l9299 + i32.add + local.set $l9300 + local.get $l9299 + local.get $l9300 + i32.add + local.set $l9301 + local.get $l9300 + local.get $l9301 + i32.add + local.set $l9302 + local.get $l9301 + local.get $l9302 + i32.add + local.set $l9303 + local.get $l9302 + local.get $l9303 + i32.add + local.set $l9304 + local.get $l9303 + local.get $l9304 + i32.add + local.set $l9305 + local.get $l9304 + local.get $l9305 + i32.add + local.set $l9306 + local.get $l9305 + local.get $l9306 + i32.add + local.set $l9307 + local.get $l9306 + local.get $l9307 + i32.add + local.set $l9308 + local.get $l9307 + local.get $l9308 + i32.add + local.set $l9309 + local.get $l9308 + local.get $l9309 + i32.add + local.set $l9310 + local.get $l9309 + local.get $l9310 + i32.add + local.set $l9311 + local.get $l9310 + local.get $l9311 + i32.add + local.set $l9312 + local.get $l9311 + local.get $l9312 + i32.add + local.set $l9313 + local.get $l9312 + local.get $l9313 + i32.add + local.set $l9314 + local.get $l9313 + local.get $l9314 + i32.add + local.set $l9315 + local.get $l9314 + local.get $l9315 + i32.add + local.set $l9316 + local.get $l9315 + local.get $l9316 + i32.add + local.set $l9317 + local.get $l9316 + local.get $l9317 + i32.add + local.set $l9318 + local.get $l9317 + local.get $l9318 + i32.add + local.set $l9319 + local.get $l9318 + local.get $l9319 + i32.add + local.set $l9320 + local.get $l9319 + local.get $l9320 + i32.add + local.set $l9321 + local.get $l9320 + local.get $l9321 + i32.add + local.set $l9322 + local.get $l9321 + local.get $l9322 + i32.add + local.set $l9323 + local.get $l9322 + local.get $l9323 + i32.add + local.set $l9324 + local.get $l9323 + local.get $l9324 + i32.add + local.set $l9325 + local.get $l9324 + local.get $l9325 + i32.add + local.set $l9326 + local.get $l9325 + local.get $l9326 + i32.add + local.set $l9327 + local.get $l9326 + local.get $l9327 + i32.add + local.set $l9328 + local.get $l9327 + local.get $l9328 + i32.add + local.set $l9329 + local.get $l9328 + local.get $l9329 + i32.add + local.set $l9330 + local.get $l9329 + local.get $l9330 + i32.add + local.set $l9331 + local.get $l9330 + local.get $l9331 + i32.add + local.set $l9332 + local.get $l9331 + local.get $l9332 + i32.add + local.set $l9333 + local.get $l9332 + local.get $l9333 + i32.add + local.set $l9334 + local.get $l9333 + local.get $l9334 + i32.add + local.set $l9335 + local.get $l9334 + local.get $l9335 + i32.add + local.set $l9336 + local.get $l9335 + local.get $l9336 + i32.add + local.set $l9337 + local.get $l9336 + local.get $l9337 + i32.add + local.set $l9338 + local.get $l9337 + local.get $l9338 + i32.add + local.set $l9339 + local.get $l9338 + local.get $l9339 + i32.add + local.set $l9340 + local.get $l9339 + local.get $l9340 + i32.add + local.set $l9341 + local.get $l9340 + local.get $l9341 + i32.add + local.set $l9342 + local.get $l9341 + local.get $l9342 + i32.add + local.set $l9343 + local.get $l9342 + local.get $l9343 + i32.add + local.set $l9344 + local.get $l9343 + local.get $l9344 + i32.add + local.set $l9345 + local.get $l9344 + local.get $l9345 + i32.add + local.set $l9346 + local.get $l9345 + local.get $l9346 + i32.add + local.set $l9347 + local.get $l9346 + local.get $l9347 + i32.add + local.set $l9348 + local.get $l9347 + local.get $l9348 + i32.add + local.set $l9349 + local.get $l9348 + local.get $l9349 + i32.add + local.set $l9350 + local.get $l9349 + local.get $l9350 + i32.add + local.set $l9351 + local.get $l9350 + local.get $l9351 + i32.add + local.set $l9352 + local.get $l9351 + local.get $l9352 + i32.add + local.set $l9353 + local.get $l9352 + local.get $l9353 + i32.add + local.set $l9354 + local.get $l9353 + local.get $l9354 + i32.add + local.set $l9355 + local.get $l9354 + local.get $l9355 + i32.add + local.set $l9356 + local.get $l9355 + local.get $l9356 + i32.add + local.set $l9357 + local.get $l9356 + local.get $l9357 + i32.add + local.set $l9358 + local.get $l9357 + local.get $l9358 + i32.add + local.set $l9359 + local.get $l9358 + local.get $l9359 + i32.add + local.set $l9360 + local.get $l9359 + local.get $l9360 + i32.add + local.set $l9361 + local.get $l9360 + local.get $l9361 + i32.add + local.set $l9362 + local.get $l9361 + local.get $l9362 + i32.add + local.set $l9363 + local.get $l9362 + local.get $l9363 + i32.add + local.set $l9364 + local.get $l9363 + local.get $l9364 + i32.add + local.set $l9365 + local.get $l9364 + local.get $l9365 + i32.add + local.set $l9366 + local.get $l9365 + local.get $l9366 + i32.add + local.set $l9367 + local.get $l9366 + local.get $l9367 + i32.add + local.set $l9368 + local.get $l9367 + local.get $l9368 + i32.add + local.set $l9369 + local.get $l9368 + local.get $l9369 + i32.add + local.set $l9370 + local.get $l9369 + local.get $l9370 + i32.add + local.set $l9371 + local.get $l9370 + local.get $l9371 + i32.add + local.set $l9372 + local.get $l9371 + local.get $l9372 + i32.add + local.set $l9373 + local.get $l9372 + local.get $l9373 + i32.add + local.set $l9374 + local.get $l9373 + local.get $l9374 + i32.add + local.set $l9375 + local.get $l9374 + local.get $l9375 + i32.add + local.set $l9376 + local.get $l9375 + local.get $l9376 + i32.add + local.set $l9377 + local.get $l9376 + local.get $l9377 + i32.add + local.set $l9378 + local.get $l9377 + local.get $l9378 + i32.add + local.set $l9379 + local.get $l9378 + local.get $l9379 + i32.add + local.set $l9380 + local.get $l9379 + local.get $l9380 + i32.add + local.set $l9381 + local.get $l9380 + local.get $l9381 + i32.add + local.set $l9382 + local.get $l9381 + local.get $l9382 + i32.add + local.set $l9383 + local.get $l9382 + local.get $l9383 + i32.add + local.set $l9384 + local.get $l9383 + local.get $l9384 + i32.add + local.set $l9385 + local.get $l9384 + local.get $l9385 + i32.add + local.set $l9386 + local.get $l9385 + local.get $l9386 + i32.add + local.set $l9387 + local.get $l9386 + local.get $l9387 + i32.add + local.set $l9388 + local.get $l9387 + local.get $l9388 + i32.add + local.set $l9389 + local.get $l9388 + local.get $l9389 + i32.add + local.set $l9390 + local.get $l9389 + local.get $l9390 + i32.add + local.set $l9391 + local.get $l9390 + local.get $l9391 + i32.add + local.set $l9392 + local.get $l9391 + local.get $l9392 + i32.add + local.set $l9393 + local.get $l9392 + local.get $l9393 + i32.add + local.set $l9394 + local.get $l9393 + local.get $l9394 + i32.add + local.set $l9395 + local.get $l9394 + local.get $l9395 + i32.add + local.set $l9396 + local.get $l9395 + local.get $l9396 + i32.add + local.set $l9397 + local.get $l9396 + local.get $l9397 + i32.add + local.set $l9398 + local.get $l9397 + local.get $l9398 + i32.add + local.set $l9399 + local.get $l9398 + local.get $l9399 + i32.add + local.set $l9400 + local.get $l9399 + local.get $l9400 + i32.add + local.set $l9401 + local.get $l9400 + local.get $l9401 + i32.add + local.set $l9402 + local.get $l9401 + local.get $l9402 + i32.add + local.set $l9403 + local.get $l9402 + local.get $l9403 + i32.add + local.set $l9404 + local.get $l9403 + local.get $l9404 + i32.add + local.set $l9405 + local.get $l9404 + local.get $l9405 + i32.add + local.set $l9406 + local.get $l9405 + local.get $l9406 + i32.add + local.set $l9407 + local.get $l9406 + local.get $l9407 + i32.add + local.set $l9408 + local.get $l9407 + local.get $l9408 + i32.add + local.set $l9409 + local.get $l9408 + local.get $l9409 + i32.add + local.set $l9410 + local.get $l9409 + local.get $l9410 + i32.add + local.set $l9411 + local.get $l9410 + local.get $l9411 + i32.add + local.set $l9412 + local.get $l9411 + local.get $l9412 + i32.add + local.set $l9413 + local.get $l9412 + local.get $l9413 + i32.add + local.set $l9414 + local.get $l9413 + local.get $l9414 + i32.add + local.set $l9415 + local.get $l9414 + local.get $l9415 + i32.add + local.set $l9416 + local.get $l9415 + local.get $l9416 + i32.add + local.set $l9417 + local.get $l9416 + local.get $l9417 + i32.add + local.set $l9418 + local.get $l9417 + local.get $l9418 + i32.add + local.set $l9419 + local.get $l9418 + local.get $l9419 + i32.add + local.set $l9420 + local.get $l9419 + local.get $l9420 + i32.add + local.set $l9421 + local.get $l9420 + local.get $l9421 + i32.add + local.set $l9422 + local.get $l9421 + local.get $l9422 + i32.add + local.set $l9423 + local.get $l9422 + local.get $l9423 + i32.add + local.set $l9424 + local.get $l9423 + local.get $l9424 + i32.add + local.set $l9425 + local.get $l9424 + local.get $l9425 + i32.add + local.set $l9426 + local.get $l9425 + local.get $l9426 + i32.add + local.set $l9427 + local.get $l9426 + local.get $l9427 + i32.add + local.set $l9428 + local.get $l9427 + local.get $l9428 + i32.add + local.set $l9429 + local.get $l9428 + local.get $l9429 + i32.add + local.set $l9430 + local.get $l9429 + local.get $l9430 + i32.add + local.set $l9431 + local.get $l9430 + local.get $l9431 + i32.add + local.set $l9432 + local.get $l9431 + local.get $l9432 + i32.add + local.set $l9433 + local.get $l9432 + local.get $l9433 + i32.add + local.set $l9434 + local.get $l9433 + local.get $l9434 + i32.add + local.set $l9435 + local.get $l9434 + local.get $l9435 + i32.add + local.set $l9436 + local.get $l9435 + local.get $l9436 + i32.add + local.set $l9437 + local.get $l9436 + local.get $l9437 + i32.add + local.set $l9438 + local.get $l9437 + local.get $l9438 + i32.add + local.set $l9439 + local.get $l9438 + local.get $l9439 + i32.add + local.set $l9440 + local.get $l9439 + local.get $l9440 + i32.add + local.set $l9441 + local.get $l9440 + local.get $l9441 + i32.add + local.set $l9442 + local.get $l9441 + local.get $l9442 + i32.add + local.set $l9443 + local.get $l9442 + local.get $l9443 + i32.add + local.set $l9444 + local.get $l9443 + local.get $l9444 + i32.add + local.set $l9445 + local.get $l9444 + local.get $l9445 + i32.add + local.set $l9446 + local.get $l9445 + local.get $l9446 + i32.add + local.set $l9447 + local.get $l9446 + local.get $l9447 + i32.add + local.set $l9448 + local.get $l9447 + local.get $l9448 + i32.add + local.set $l9449 + local.get $l9448 + local.get $l9449 + i32.add + local.set $l9450 + local.get $l9449 + local.get $l9450 + i32.add + local.set $l9451 + local.get $l9450 + local.get $l9451 + i32.add + local.set $l9452 + local.get $l9451 + local.get $l9452 + i32.add + local.set $l9453 + local.get $l9452 + local.get $l9453 + i32.add + local.set $l9454 + local.get $l9453 + local.get $l9454 + i32.add + local.set $l9455 + local.get $l9454 + local.get $l9455 + i32.add + local.set $l9456 + local.get $l9455 + local.get $l9456 + i32.add + local.set $l9457 + local.get $l9456 + local.get $l9457 + i32.add + local.set $l9458 + local.get $l9457 + local.get $l9458 + i32.add + local.set $l9459 + local.get $l9458 + local.get $l9459 + i32.add + local.set $l9460 + local.get $l9459 + local.get $l9460 + i32.add + local.set $l9461 + local.get $l9460 + local.get $l9461 + i32.add + local.set $l9462 + local.get $l9461 + local.get $l9462 + i32.add + local.set $l9463 + local.get $l9462 + local.get $l9463 + i32.add + local.set $l9464 + local.get $l9463 + local.get $l9464 + i32.add + local.set $l9465 + local.get $l9464 + local.get $l9465 + i32.add + local.set $l9466 + local.get $l9465 + local.get $l9466 + i32.add + local.set $l9467 + local.get $l9466 + local.get $l9467 + i32.add + local.set $l9468 + local.get $l9467 + local.get $l9468 + i32.add + local.set $l9469 + local.get $l9468 + local.get $l9469 + i32.add + local.set $l9470 + local.get $l9469 + local.get $l9470 + i32.add + local.set $l9471 + local.get $l9470 + local.get $l9471 + i32.add + local.set $l9472 + local.get $l9471 + local.get $l9472 + i32.add + local.set $l9473 + local.get $l9472 + local.get $l9473 + i32.add + local.set $l9474 + local.get $l9473 + local.get $l9474 + i32.add + local.set $l9475 + local.get $l9474 + local.get $l9475 + i32.add + local.set $l9476 + local.get $l9475 + local.get $l9476 + i32.add + local.set $l9477 + local.get $l9476 + local.get $l9477 + i32.add + local.set $l9478 + local.get $l9477 + local.get $l9478 + i32.add + local.set $l9479 + local.get $l9478 + local.get $l9479 + i32.add + local.set $l9480 + local.get $l9479 + local.get $l9480 + i32.add + local.set $l9481 + local.get $l9480 + local.get $l9481 + i32.add + local.set $l9482 + local.get $l9481 + local.get $l9482 + i32.add + local.set $l9483 + local.get $l9482 + local.get $l9483 + i32.add + local.set $l9484 + local.get $l9483 + local.get $l9484 + i32.add + local.set $l9485 + local.get $l9484 + local.get $l9485 + i32.add + local.set $l9486 + local.get $l9485 + local.get $l9486 + i32.add + local.set $l9487 + local.get $l9486 + local.get $l9487 + i32.add + local.set $l9488 + local.get $l9487 + local.get $l9488 + i32.add + local.set $l9489 + local.get $l9488 + local.get $l9489 + i32.add + local.set $l9490 + local.get $l9489 + local.get $l9490 + i32.add + local.set $l9491 + local.get $l9490 + local.get $l9491 + i32.add + local.set $l9492 + local.get $l9491 + local.get $l9492 + i32.add + local.set $l9493 + local.get $l9492 + local.get $l9493 + i32.add + local.set $l9494 + local.get $l9493 + local.get $l9494 + i32.add + local.set $l9495 + local.get $l9494 + local.get $l9495 + i32.add + local.set $l9496 + local.get $l9495 + local.get $l9496 + i32.add + local.set $l9497 + local.get $l9496 + local.get $l9497 + i32.add + local.set $l9498 + local.get $l9497 + local.get $l9498 + i32.add + local.set $l9499 + local.get $l9498 + local.get $l9499 + i32.add + local.set $l9500 + local.get $l9499 + local.get $l9500 + i32.add + local.set $l9501 + local.get $l9500 + local.get $l9501 + i32.add + local.set $l9502 + local.get $l9501 + local.get $l9502 + i32.add + local.set $l9503 + local.get $l9502 + local.get $l9503 + i32.add + local.set $l9504 + local.get $l9503 + local.get $l9504 + i32.add + local.set $l9505 + local.get $l9504 + local.get $l9505 + i32.add + local.set $l9506 + local.get $l9505 + local.get $l9506 + i32.add + local.set $l9507 + local.get $l9506 + local.get $l9507 + i32.add + local.set $l9508 + local.get $l9507 + local.get $l9508 + i32.add + local.set $l9509 + local.get $l9508 + local.get $l9509 + i32.add + local.set $l9510 + local.get $l9509 + local.get $l9510 + i32.add + local.set $l9511 + local.get $l9510 + local.get $l9511 + i32.add + local.set $l9512 + local.get $l9511 + local.get $l9512 + i32.add + local.set $l9513 + local.get $l9512 + local.get $l9513 + i32.add + local.set $l9514 + local.get $l9513 + local.get $l9514 + i32.add + local.set $l9515 + local.get $l9514 + local.get $l9515 + i32.add + local.set $l9516 + local.get $l9515 + local.get $l9516 + i32.add + local.set $l9517 + local.get $l9516 + local.get $l9517 + i32.add + local.set $l9518 + local.get $l9517 + local.get $l9518 + i32.add + local.set $l9519 + local.get $l9518 + local.get $l9519 + i32.add + local.set $l9520 + local.get $l9519 + local.get $l9520 + i32.add + local.set $l9521 + local.get $l9520 + local.get $l9521 + i32.add + local.set $l9522 + local.get $l9521 + local.get $l9522 + i32.add + local.set $l9523 + local.get $l9522 + local.get $l9523 + i32.add + local.set $l9524 + local.get $l9523 + local.get $l9524 + i32.add + local.set $l9525 + local.get $l9524 + local.get $l9525 + i32.add + local.set $l9526 + local.get $l9525 + local.get $l9526 + i32.add + local.set $l9527 + local.get $l9526 + local.get $l9527 + i32.add + local.set $l9528 + local.get $l9527 + local.get $l9528 + i32.add + local.set $l9529 + local.get $l9528 + local.get $l9529 + i32.add + local.set $l9530 + local.get $l9529 + local.get $l9530 + i32.add + local.set $l9531 + local.get $l9530 + local.get $l9531 + i32.add + local.set $l9532 + local.get $l9531 + local.get $l9532 + i32.add + local.set $l9533 + local.get $l9532 + local.get $l9533 + i32.add + local.set $l9534 + local.get $l9533 + local.get $l9534 + i32.add + local.set $l9535 + local.get $l9534 + local.get $l9535 + i32.add + local.set $l9536 + local.get $l9535 + local.get $l9536 + i32.add + local.set $l9537 + local.get $l9536 + local.get $l9537 + i32.add + local.set $l9538 + local.get $l9537 + local.get $l9538 + i32.add + local.set $l9539 + local.get $l9538 + local.get $l9539 + i32.add + local.set $l9540 + local.get $l9539 + local.get $l9540 + i32.add + local.set $l9541 + local.get $l9540 + local.get $l9541 + i32.add + local.set $l9542 + local.get $l9541 + local.get $l9542 + i32.add + local.set $l9543 + local.get $l9542 + local.get $l9543 + i32.add + local.set $l9544 + local.get $l9543 + local.get $l9544 + i32.add + local.set $l9545 + local.get $l9544 + local.get $l9545 + i32.add + local.set $l9546 + local.get $l9545 + local.get $l9546 + i32.add + local.set $l9547 + local.get $l9546 + local.get $l9547 + i32.add + local.set $l9548 + local.get $l9547 + local.get $l9548 + i32.add + local.set $l9549 + local.get $l9548 + local.get $l9549 + i32.add + local.set $l9550 + local.get $l9549 + local.get $l9550 + i32.add + local.set $l9551 + local.get $l9550 + local.get $l9551 + i32.add + local.set $l9552 + local.get $l9551 + local.get $l9552 + i32.add + local.set $l9553 + local.get $l9552 + local.get $l9553 + i32.add + local.set $l9554 + local.get $l9553 + local.get $l9554 + i32.add + local.set $l9555 + local.get $l9554 + local.get $l9555 + i32.add + local.set $l9556 + local.get $l9555 + local.get $l9556 + i32.add + local.set $l9557 + local.get $l9556 + local.get $l9557 + i32.add + local.set $l9558 + local.get $l9557 + local.get $l9558 + i32.add + local.set $l9559 + local.get $l9558 + local.get $l9559 + i32.add + local.set $l9560 + local.get $l9559 + local.get $l9560 + i32.add + local.set $l9561 + local.get $l9560 + local.get $l9561 + i32.add + local.set $l9562 + local.get $l9561 + local.get $l9562 + i32.add + local.set $l9563 + local.get $l9562 + local.get $l9563 + i32.add + local.set $l9564 + local.get $l9563 + local.get $l9564 + i32.add + local.set $l9565 + local.get $l9564 + local.get $l9565 + i32.add + local.set $l9566 + local.get $l9565 + local.get $l9566 + i32.add + local.set $l9567 + local.get $l9566 + local.get $l9567 + i32.add + local.set $l9568 + local.get $l9567 + local.get $l9568 + i32.add + local.set $l9569 + local.get $l9568 + local.get $l9569 + i32.add + local.set $l9570 + local.get $l9569 + local.get $l9570 + i32.add + local.set $l9571 + local.get $l9570 + local.get $l9571 + i32.add + local.set $l9572 + local.get $l9571 + local.get $l9572 + i32.add + local.set $l9573 + local.get $l9572 + local.get $l9573 + i32.add + local.set $l9574 + local.get $l9573 + local.get $l9574 + i32.add + local.set $l9575 + local.get $l9574 + local.get $l9575 + i32.add + local.set $l9576 + local.get $l9575 + local.get $l9576 + i32.add + local.set $l9577 + local.get $l9576 + local.get $l9577 + i32.add + local.set $l9578 + local.get $l9577 + local.get $l9578 + i32.add + local.set $l9579 + local.get $l9578 + local.get $l9579 + i32.add + local.set $l9580 + local.get $l9579 + local.get $l9580 + i32.add + local.set $l9581 + local.get $l9580 + local.get $l9581 + i32.add + local.set $l9582 + local.get $l9581 + local.get $l9582 + i32.add + local.set $l9583 + local.get $l9582 + local.get $l9583 + i32.add + local.set $l9584 + local.get $l9583 + local.get $l9584 + i32.add + local.set $l9585 + local.get $l9584 + local.get $l9585 + i32.add + local.set $l9586 + local.get $l9585 + local.get $l9586 + i32.add + local.set $l9587 + local.get $l9586 + local.get $l9587 + i32.add + local.set $l9588 + local.get $l9587 + local.get $l9588 + i32.add + local.set $l9589 + local.get $l9588 + local.get $l9589 + i32.add + local.set $l9590 + local.get $l9589 + local.get $l9590 + i32.add + local.set $l9591 + local.get $l9590 + local.get $l9591 + i32.add + local.set $l9592 + local.get $l9591 + local.get $l9592 + i32.add + local.set $l9593 + local.get $l9592 + local.get $l9593 + i32.add + local.set $l9594 + local.get $l9593 + local.get $l9594 + i32.add + local.set $l9595 + local.get $l9594 + local.get $l9595 + i32.add + local.set $l9596 + local.get $l9595 + local.get $l9596 + i32.add + local.set $l9597 + local.get $l9596 + local.get $l9597 + i32.add + local.set $l9598 + local.get $l9597 + local.get $l9598 + i32.add + local.set $l9599 + local.get $l9598 + local.get $l9599 + i32.add + local.set $l9600 + local.get $l9599 + local.get $l9600 + i32.add + local.set $l9601 + local.get $l9600 + local.get $l9601 + i32.add + local.set $l9602 + local.get $l9601 + local.get $l9602 + i32.add + local.set $l9603 + local.get $l9602 + local.get $l9603 + i32.add + local.set $l9604 + local.get $l9603 + local.get $l9604 + i32.add + local.set $l9605 + local.get $l9604 + local.get $l9605 + i32.add + local.set $l9606 + local.get $l9605 + local.get $l9606 + i32.add + local.set $l9607 + local.get $l9606 + local.get $l9607 + i32.add + local.set $l9608 + local.get $l9607 + local.get $l9608 + i32.add + local.set $l9609 + local.get $l9608 + local.get $l9609 + i32.add + local.set $l9610 + local.get $l9609 + local.get $l9610 + i32.add + local.set $l9611 + local.get $l9610 + local.get $l9611 + i32.add + local.set $l9612 + local.get $l9611 + local.get $l9612 + i32.add + local.set $l9613 + local.get $l9612 + local.get $l9613 + i32.add + local.set $l9614 + local.get $l9613 + local.get $l9614 + i32.add + local.set $l9615 + local.get $l9614 + local.get $l9615 + i32.add + local.set $l9616 + local.get $l9615 + local.get $l9616 + i32.add + local.set $l9617 + local.get $l9616 + local.get $l9617 + i32.add + local.set $l9618 + local.get $l9617 + local.get $l9618 + i32.add + local.set $l9619 + local.get $l9618 + local.get $l9619 + i32.add + local.set $l9620 + local.get $l9619 + local.get $l9620 + i32.add + local.set $l9621 + local.get $l9620 + local.get $l9621 + i32.add + local.set $l9622 + local.get $l9621 + local.get $l9622 + i32.add + local.set $l9623 + local.get $l9622 + local.get $l9623 + i32.add + local.set $l9624 + local.get $l9623 + local.get $l9624 + i32.add + local.set $l9625 + local.get $l9624 + local.get $l9625 + i32.add + local.set $l9626 + local.get $l9625 + local.get $l9626 + i32.add + local.set $l9627 + local.get $l9626 + local.get $l9627 + i32.add + local.set $l9628 + local.get $l9627 + local.get $l9628 + i32.add + local.set $l9629 + local.get $l9628 + local.get $l9629 + i32.add + local.set $l9630 + local.get $l9629 + local.get $l9630 + i32.add + local.set $l9631 + local.get $l9630 + local.get $l9631 + i32.add + local.set $l9632 + local.get $l9631 + local.get $l9632 + i32.add + local.set $l9633 + local.get $l9632 + local.get $l9633 + i32.add + local.set $l9634 + local.get $l9633 + local.get $l9634 + i32.add + local.set $l9635 + local.get $l9634 + local.get $l9635 + i32.add + local.set $l9636 + local.get $l9635 + local.get $l9636 + i32.add + local.set $l9637 + local.get $l9636 + local.get $l9637 + i32.add + local.set $l9638 + local.get $l9637 + local.get $l9638 + i32.add + local.set $l9639 + local.get $l9638 + local.get $l9639 + i32.add + local.set $l9640 + local.get $l9639 + local.get $l9640 + i32.add + local.set $l9641 + local.get $l9640 + local.get $l9641 + i32.add + local.set $l9642 + local.get $l9641 + local.get $l9642 + i32.add + local.set $l9643 + local.get $l9642 + local.get $l9643 + i32.add + local.set $l9644 + local.get $l9643 + local.get $l9644 + i32.add + local.set $l9645 + local.get $l9644 + local.get $l9645 + i32.add + local.set $l9646 + local.get $l9645 + local.get $l9646 + i32.add + local.set $l9647 + local.get $l9646 + local.get $l9647 + i32.add + local.set $l9648 + local.get $l9647 + local.get $l9648 + i32.add + local.set $l9649 + local.get $l9648 + local.get $l9649 + i32.add + local.set $l9650 + local.get $l9649 + local.get $l9650 + i32.add + local.set $l9651 + local.get $l9650 + local.get $l9651 + i32.add + local.set $l9652 + local.get $l9651 + local.get $l9652 + i32.add + local.set $l9653 + local.get $l9652 + local.get $l9653 + i32.add + local.set $l9654 + local.get $l9653 + local.get $l9654 + i32.add + local.set $l9655 + local.get $l9654 + local.get $l9655 + i32.add + local.set $l9656 + local.get $l9655 + local.get $l9656 + i32.add + local.set $l9657 + local.get $l9656 + local.get $l9657 + i32.add + local.set $l9658 + local.get $l9657 + local.get $l9658 + i32.add + local.set $l9659 + local.get $l9658 + local.get $l9659 + i32.add + local.set $l9660 + local.get $l9659 + local.get $l9660 + i32.add + local.set $l9661 + local.get $l9660 + local.get $l9661 + i32.add + local.set $l9662 + local.get $l9661 + local.get $l9662 + i32.add + local.set $l9663 + local.get $l9662 + local.get $l9663 + i32.add + local.set $l9664 + local.get $l9663 + local.get $l9664 + i32.add + local.set $l9665 + local.get $l9664 + local.get $l9665 + i32.add + local.set $l9666 + local.get $l9665 + local.get $l9666 + i32.add + local.set $l9667 + local.get $l9666 + local.get $l9667 + i32.add + local.set $l9668 + local.get $l9667 + local.get $l9668 + i32.add + local.set $l9669 + local.get $l9668 + local.get $l9669 + i32.add + local.set $l9670 + local.get $l9669 + local.get $l9670 + i32.add + local.set $l9671 + local.get $l9670 + local.get $l9671 + i32.add + local.set $l9672 + local.get $l9671 + local.get $l9672 + i32.add + local.set $l9673 + local.get $l9672 + local.get $l9673 + i32.add + local.set $l9674 + local.get $l9673 + local.get $l9674 + i32.add + local.set $l9675 + local.get $l9674 + local.get $l9675 + i32.add + local.set $l9676 + local.get $l9675 + local.get $l9676 + i32.add + local.set $l9677 + local.get $l9676 + local.get $l9677 + i32.add + local.set $l9678 + local.get $l9677 + local.get $l9678 + i32.add + local.set $l9679 + local.get $l9678 + local.get $l9679 + i32.add + local.set $l9680 + local.get $l9679 + local.get $l9680 + i32.add + local.set $l9681 + local.get $l9680 + local.get $l9681 + i32.add + local.set $l9682 + local.get $l9681 + local.get $l9682 + i32.add + local.set $l9683 + local.get $l9682 + local.get $l9683 + i32.add + local.set $l9684 + local.get $l9683 + local.get $l9684 + i32.add + local.set $l9685 + local.get $l9684 + local.get $l9685 + i32.add + local.set $l9686 + local.get $l9685 + local.get $l9686 + i32.add + local.set $l9687 + local.get $l9686 + local.get $l9687 + i32.add + local.set $l9688 + local.get $l9687 + local.get $l9688 + i32.add + local.set $l9689 + local.get $l9688 + local.get $l9689 + i32.add + local.set $l9690 + local.get $l9689 + local.get $l9690 + i32.add + local.set $l9691 + local.get $l9690 + local.get $l9691 + i32.add + local.set $l9692 + local.get $l9691 + local.get $l9692 + i32.add + local.set $l9693 + local.get $l9692 + local.get $l9693 + i32.add + local.set $l9694 + local.get $l9693 + local.get $l9694 + i32.add + local.set $l9695 + local.get $l9694 + local.get $l9695 + i32.add + local.set $l9696 + local.get $l9695 + local.get $l9696 + i32.add + local.set $l9697 + local.get $l9696 + local.get $l9697 + i32.add + local.set $l9698 + local.get $l9697 + local.get $l9698 + i32.add + local.set $l9699 + local.get $l9698 + local.get $l9699 + i32.add + local.set $l9700 + local.get $l9699 + local.get $l9700 + i32.add + local.set $l9701 + local.get $l9700 + local.get $l9701 + i32.add + local.set $l9702 + local.get $l9701 + local.get $l9702 + i32.add + local.set $l9703 + local.get $l9702 + local.get $l9703 + i32.add + local.set $l9704 + local.get $l9703 + local.get $l9704 + i32.add + local.set $l9705 + local.get $l9704 + local.get $l9705 + i32.add + local.set $l9706 + local.get $l9705 + local.get $l9706 + i32.add + local.set $l9707 + local.get $l9706 + local.get $l9707 + i32.add + local.set $l9708 + local.get $l9707 + local.get $l9708 + i32.add + local.set $l9709 + local.get $l9708 + local.get $l9709 + i32.add + local.set $l9710 + local.get $l9709 + local.get $l9710 + i32.add + local.set $l9711 + local.get $l9710 + local.get $l9711 + i32.add + local.set $l9712 + local.get $l9711 + local.get $l9712 + i32.add + local.set $l9713 + local.get $l9712 + local.get $l9713 + i32.add + local.set $l9714 + local.get $l9713 + local.get $l9714 + i32.add + local.set $l9715 + local.get $l9714 + local.get $l9715 + i32.add + local.set $l9716 + local.get $l9715 + local.get $l9716 + i32.add + local.set $l9717 + local.get $l9716 + local.get $l9717 + i32.add + local.set $l9718 + local.get $l9717 + local.get $l9718 + i32.add + local.set $l9719 + local.get $l9718 + local.get $l9719 + i32.add + local.set $l9720 + local.get $l9719 + local.get $l9720 + i32.add + local.set $l9721 + local.get $l9720 + local.get $l9721 + i32.add + local.set $l9722 + local.get $l9721 + local.get $l9722 + i32.add + local.set $l9723 + local.get $l9722 + local.get $l9723 + i32.add + local.set $l9724 + local.get $l9723 + local.get $l9724 + i32.add + local.set $l9725 + local.get $l9724 + local.get $l9725 + i32.add + local.set $l9726 + local.get $l9725 + local.get $l9726 + i32.add + local.set $l9727 + local.get $l9726 + local.get $l9727 + i32.add + local.set $l9728 + local.get $l9727 + local.get $l9728 + i32.add + local.set $l9729 + local.get $l9728 + local.get $l9729 + i32.add + local.set $l9730 + local.get $l9729 + local.get $l9730 + i32.add + local.set $l9731 + local.get $l9730 + local.get $l9731 + i32.add + local.set $l9732 + local.get $l9731 + local.get $l9732 + i32.add + local.set $l9733 + local.get $l9732 + local.get $l9733 + i32.add + local.set $l9734 + local.get $l9733 + local.get $l9734 + i32.add + local.set $l9735 + local.get $l9734 + local.get $l9735 + i32.add + local.set $l9736 + local.get $l9735 + local.get $l9736 + i32.add + local.set $l9737 + local.get $l9736 + local.get $l9737 + i32.add + local.set $l9738 + local.get $l9737 + local.get $l9738 + i32.add + local.set $l9739 + local.get $l9738 + local.get $l9739 + i32.add + local.set $l9740 + local.get $l9739 + local.get $l9740 + i32.add + local.set $l9741 + local.get $l9740 + local.get $l9741 + i32.add + local.set $l9742 + local.get $l9741 + local.get $l9742 + i32.add + local.set $l9743 + local.get $l9742 + local.get $l9743 + i32.add + local.set $l9744 + local.get $l9743 + local.get $l9744 + i32.add + local.set $l9745 + local.get $l9744 + local.get $l9745 + i32.add + local.set $l9746 + local.get $l9745 + local.get $l9746 + i32.add + local.set $l9747 + local.get $l9746 + local.get $l9747 + i32.add + local.set $l9748 + local.get $l9747 + local.get $l9748 + i32.add + local.set $l9749 + local.get $l9748 + local.get $l9749 + i32.add + local.set $l9750 + local.get $l9749 + local.get $l9750 + i32.add + local.set $l9751 + local.get $l9750 + local.get $l9751 + i32.add + local.set $l9752 + local.get $l9751 + local.get $l9752 + i32.add + local.set $l9753 + local.get $l9752 + local.get $l9753 + i32.add + local.set $l9754 + local.get $l9753 + local.get $l9754 + i32.add + local.set $l9755 + local.get $l9754 + local.get $l9755 + i32.add + local.set $l9756 + local.get $l9755 + local.get $l9756 + i32.add + local.set $l9757 + local.get $l9756 + local.get $l9757 + i32.add + local.set $l9758 + local.get $l9757 + local.get $l9758 + i32.add + local.set $l9759 + local.get $l9758 + local.get $l9759 + i32.add + local.set $l9760 + local.get $l9759 + local.get $l9760 + i32.add + local.set $l9761 + local.get $l9760 + local.get $l9761 + i32.add + local.set $l9762 + local.get $l9761 + local.get $l9762 + i32.add + local.set $l9763 + local.get $l9762 + local.get $l9763 + i32.add + local.set $l9764 + local.get $l9763 + local.get $l9764 + i32.add + local.set $l9765 + local.get $l9764 + local.get $l9765 + i32.add + local.set $l9766 + local.get $l9765 + local.get $l9766 + i32.add + local.set $l9767 + local.get $l9766 + local.get $l9767 + i32.add + local.set $l9768 + local.get $l9767 + local.get $l9768 + i32.add + local.set $l9769 + local.get $l9768 + local.get $l9769 + i32.add + local.set $l9770 + local.get $l9769 + local.get $l9770 + i32.add + local.set $l9771 + local.get $l9770 + local.get $l9771 + i32.add + local.set $l9772 + local.get $l9771 + local.get $l9772 + i32.add + local.set $l9773 + local.get $l9772 + local.get $l9773 + i32.add + local.set $l9774 + local.get $l9773 + local.get $l9774 + i32.add + local.set $l9775 + local.get $l9774 + local.get $l9775 + i32.add + local.set $l9776 + local.get $l9775 + local.get $l9776 + i32.add + local.set $l9777 + local.get $l9776 + local.get $l9777 + i32.add + local.set $l9778 + local.get $l9777 + local.get $l9778 + i32.add + local.set $l9779 + local.get $l9778 + local.get $l9779 + i32.add + local.set $l9780 + local.get $l9779 + local.get $l9780 + i32.add + local.set $l9781 + local.get $l9780 + local.get $l9781 + i32.add + local.set $l9782 + local.get $l9781 + local.get $l9782 + i32.add + local.set $l9783 + local.get $l9782 + local.get $l9783 + i32.add + local.set $l9784 + local.get $l9783 + local.get $l9784 + i32.add + local.set $l9785 + local.get $l9784 + local.get $l9785 + i32.add + local.set $l9786 + local.get $l9785 + local.get $l9786 + i32.add + local.set $l9787 + local.get $l9786 + local.get $l9787 + i32.add + local.set $l9788 + local.get $l9787 + local.get $l9788 + i32.add + local.set $l9789 + local.get $l9788 + local.get $l9789 + i32.add + local.set $l9790 + local.get $l9789 + local.get $l9790 + i32.add + local.set $l9791 + local.get $l9790 + local.get $l9791 + i32.add + local.set $l9792 + local.get $l9791 + local.get $l9792 + i32.add + local.set $l9793 + local.get $l9792 + local.get $l9793 + i32.add + local.set $l9794 + local.get $l9793 + local.get $l9794 + i32.add + local.set $l9795 + local.get $l9794 + local.get $l9795 + i32.add + local.set $l9796 + local.get $l9795 + local.get $l9796 + i32.add + local.set $l9797 + local.get $l9796 + local.get $l9797 + i32.add + local.set $l9798 + local.get $l9797 + local.get $l9798 + i32.add + local.set $l9799 + local.get $l9798 + local.get $l9799 + i32.add + local.set $l9800 + local.get $l9799 + local.get $l9800 + i32.add + local.set $l9801 + local.get $l9800 + local.get $l9801 + i32.add + local.set $l9802 + local.get $l9801 + local.get $l9802 + i32.add + local.set $l9803 + local.get $l9802 + local.get $l9803 + i32.add + local.set $l9804 + local.get $l9803 + local.get $l9804 + i32.add + local.set $l9805 + local.get $l9804 + local.get $l9805 + i32.add + local.set $l9806 + local.get $l9805 + local.get $l9806 + i32.add + local.set $l9807 + local.get $l9806 + local.get $l9807 + i32.add + local.set $l9808 + local.get $l9807 + local.get $l9808 + i32.add + local.set $l9809 + local.get $l9808 + local.get $l9809 + i32.add + local.set $l9810 + local.get $l9809 + local.get $l9810 + i32.add + local.set $l9811 + local.get $l9810 + local.get $l9811 + i32.add + local.set $l9812 + local.get $l9811 + local.get $l9812 + i32.add + local.set $l9813 + local.get $l9812 + local.get $l9813 + i32.add + local.set $l9814 + local.get $l9813 + local.get $l9814 + i32.add + local.set $l9815 + local.get $l9814 + local.get $l9815 + i32.add + local.set $l9816 + local.get $l9815 + local.get $l9816 + i32.add + local.set $l9817 + local.get $l9816 + local.get $l9817 + i32.add + local.set $l9818 + local.get $l9817 + local.get $l9818 + i32.add + local.set $l9819 + local.get $l9818 + local.get $l9819 + i32.add + local.set $l9820 + local.get $l9819 + local.get $l9820 + i32.add + local.set $l9821 + local.get $l9820 + local.get $l9821 + i32.add + local.set $l9822 + local.get $l9821 + local.get $l9822 + i32.add + local.set $l9823 + local.get $l9822 + local.get $l9823 + i32.add + local.set $l9824 + local.get $l9823 + local.get $l9824 + i32.add + local.set $l9825 + local.get $l9824 + local.get $l9825 + i32.add + local.set $l9826 + local.get $l9825 + local.get $l9826 + i32.add + local.set $l9827 + local.get $l9826 + local.get $l9827 + i32.add + local.set $l9828 + local.get $l9827 + local.get $l9828 + i32.add + local.set $l9829 + local.get $l9828 + local.get $l9829 + i32.add + local.set $l9830 + local.get $l9829 + local.get $l9830 + i32.add + local.set $l9831 + local.get $l9830 + local.get $l9831 + i32.add + local.set $l9832 + local.get $l9831 + local.get $l9832 + i32.add + local.set $l9833 + local.get $l9832 + local.get $l9833 + i32.add + local.set $l9834 + local.get $l9833 + local.get $l9834 + i32.add + local.set $l9835 + local.get $l9834 + local.get $l9835 + i32.add + local.set $l9836 + local.get $l9835 + local.get $l9836 + i32.add + local.set $l9837 + local.get $l9836 + local.get $l9837 + i32.add + local.set $l9838 + local.get $l9837 + local.get $l9838 + i32.add + local.set $l9839 + local.get $l9838 + local.get $l9839 + i32.add + local.set $l9840 + local.get $l9839 + local.get $l9840 + i32.add + local.set $l9841 + local.get $l9840 + local.get $l9841 + i32.add + local.set $l9842 + local.get $l9841 + local.get $l9842 + i32.add + local.set $l9843 + local.get $l9842 + local.get $l9843 + i32.add + local.set $l9844 + local.get $l9843 + local.get $l9844 + i32.add + local.set $l9845 + local.get $l9844 + local.get $l9845 + i32.add + local.set $l9846 + local.get $l9845 + local.get $l9846 + i32.add + local.set $l9847 + local.get $l9846 + local.get $l9847 + i32.add + local.set $l9848 + local.get $l9847 + local.get $l9848 + i32.add + local.set $l9849 + local.get $l9848 + local.get $l9849 + i32.add + local.set $l9850 + local.get $l9849 + local.get $l9850 + i32.add + local.set $l9851 + local.get $l9850 + local.get $l9851 + i32.add + local.set $l9852 + local.get $l9851 + local.get $l9852 + i32.add + local.set $l9853 + local.get $l9852 + local.get $l9853 + i32.add + local.set $l9854 + local.get $l9853 + local.get $l9854 + i32.add + local.set $l9855 + local.get $l9854 + local.get $l9855 + i32.add + local.set $l9856 + local.get $l9855 + local.get $l9856 + i32.add + local.set $l9857 + local.get $l9856 + local.get $l9857 + i32.add + local.set $l9858 + local.get $l9857 + local.get $l9858 + i32.add + local.set $l9859 + local.get $l9858 + local.get $l9859 + i32.add + local.set $l9860 + local.get $l9859 + local.get $l9860 + i32.add + local.set $l9861 + local.get $l9860 + local.get $l9861 + i32.add + local.set $l9862 + local.get $l9861 + local.get $l9862 + i32.add + local.set $l9863 + local.get $l9862 + local.get $l9863 + i32.add + local.set $l9864 + local.get $l9863 + local.get $l9864 + i32.add + local.set $l9865 + local.get $l9864 + local.get $l9865 + i32.add + local.set $l9866 + local.get $l9865 + local.get $l9866 + i32.add + local.set $l9867 + local.get $l9866 + local.get $l9867 + i32.add + local.set $l9868 + local.get $l9867 + local.get $l9868 + i32.add + local.set $l9869 + local.get $l9868 + local.get $l9869 + i32.add + local.set $l9870 + local.get $l9869 + local.get $l9870 + i32.add + local.set $l9871 + local.get $l9870 + local.get $l9871 + i32.add + local.set $l9872 + local.get $l9871 + local.get $l9872 + i32.add + local.set $l9873 + local.get $l9872 + local.get $l9873 + i32.add + local.set $l9874 + local.get $l9873 + local.get $l9874 + i32.add + local.set $l9875 + local.get $l9874 + local.get $l9875 + i32.add + local.set $l9876 + local.get $l9875 + local.get $l9876 + i32.add + local.set $l9877 + local.get $l9876 + local.get $l9877 + i32.add + local.set $l9878 + local.get $l9877 + local.get $l9878 + i32.add + local.set $l9879 + local.get $l9878 + local.get $l9879 + i32.add + local.set $l9880 + local.get $l9879 + local.get $l9880 + i32.add + local.set $l9881 + local.get $l9880 + local.get $l9881 + i32.add + local.set $l9882 + local.get $l9881 + local.get $l9882 + i32.add + local.set $l9883 + local.get $l9882 + local.get $l9883 + i32.add + local.set $l9884 + local.get $l9883 + local.get $l9884 + i32.add + local.set $l9885 + local.get $l9884 + local.get $l9885 + i32.add + local.set $l9886 + local.get $l9885 + local.get $l9886 + i32.add + local.set $l9887 + local.get $l9886 + local.get $l9887 + i32.add + local.set $l9888 + local.get $l9887 + local.get $l9888 + i32.add + local.set $l9889 + local.get $l9888 + local.get $l9889 + i32.add + local.set $l9890 + local.get $l9889 + local.get $l9890 + i32.add + local.set $l9891 + local.get $l9890 + local.get $l9891 + i32.add + local.set $l9892 + local.get $l9891 + local.get $l9892 + i32.add + local.set $l9893 + local.get $l9892 + local.get $l9893 + i32.add + local.set $l9894 + local.get $l9893 + local.get $l9894 + i32.add + local.set $l9895 + local.get $l9894 + local.get $l9895 + i32.add + local.set $l9896 + local.get $l9895 + local.get $l9896 + i32.add + local.set $l9897 + local.get $l9896 + local.get $l9897 + i32.add + local.set $l9898 + local.get $l9897 + local.get $l9898 + i32.add + local.set $l9899 + local.get $l9898 + local.get $l9899 + i32.add + local.set $l9900 + local.get $l9899 + local.get $l9900 + i32.add + local.set $l9901 + local.get $l9900 + local.get $l9901 + i32.add + local.set $l9902 + local.get $l9901 + local.get $l9902 + i32.add + local.set $l9903 + local.get $l9902 + local.get $l9903 + i32.add + local.set $l9904 + local.get $l9903 + local.get $l9904 + i32.add + local.set $l9905 + local.get $l9904 + local.get $l9905 + i32.add + local.set $l9906 + local.get $l9905 + local.get $l9906 + i32.add + local.set $l9907 + local.get $l9906 + local.get $l9907 + i32.add + local.set $l9908 + local.get $l9907 + local.get $l9908 + i32.add + local.set $l9909 + local.get $l9908 + local.get $l9909 + i32.add + local.set $l9910 + local.get $l9909 + local.get $l9910 + i32.add + local.set $l9911 + local.get $l9910 + local.get $l9911 + i32.add + local.set $l9912 + local.get $l9911 + local.get $l9912 + i32.add + local.set $l9913 + local.get $l9912 + local.get $l9913 + i32.add + local.set $l9914 + local.get $l9913 + local.get $l9914 + i32.add + local.set $l9915 + local.get $l9914 + local.get $l9915 + i32.add + local.set $l9916 + local.get $l9915 + local.get $l9916 + i32.add + local.set $l9917 + local.get $l9916 + local.get $l9917 + i32.add + local.set $l9918 + local.get $l9917 + local.get $l9918 + i32.add + local.set $l9919 + local.get $l9918 + local.get $l9919 + i32.add + local.set $l9920 + local.get $l9919 + local.get $l9920 + i32.add + local.set $l9921 + local.get $l9920 + local.get $l9921 + i32.add + local.set $l9922 + local.get $l9921 + local.get $l9922 + i32.add + local.set $l9923 + local.get $l9922 + local.get $l9923 + i32.add + local.set $l9924 + local.get $l9923 + local.get $l9924 + i32.add + local.set $l9925 + local.get $l9924 + local.get $l9925 + i32.add + local.set $l9926 + local.get $l9925 + local.get $l9926 + i32.add + local.set $l9927 + local.get $l9926 + local.get $l9927 + i32.add + local.set $l9928 + local.get $l9927 + local.get $l9928 + i32.add + local.set $l9929 + local.get $l9928 + local.get $l9929 + i32.add + local.set $l9930 + local.get $l9929 + local.get $l9930 + i32.add + local.set $l9931 + local.get $l9930 + local.get $l9931 + i32.add + local.set $l9932 + local.get $l9931 + local.get $l9932 + i32.add + local.set $l9933 + local.get $l9932 + local.get $l9933 + i32.add + local.set $l9934 + local.get $l9933 + local.get $l9934 + i32.add + local.set $l9935 + local.get $l9934 + local.get $l9935 + i32.add + local.set $l9936 + local.get $l9935 + local.get $l9936 + i32.add + local.set $l9937 + local.get $l9936 + local.get $l9937 + i32.add + local.set $l9938 + local.get $l9937 + local.get $l9938 + i32.add + local.set $l9939 + local.get $l9938 + local.get $l9939 + i32.add + local.set $l9940 + local.get $l9939 + local.get $l9940 + i32.add + local.set $l9941 + local.get $l9940 + local.get $l9941 + i32.add + local.set $l9942 + local.get $l9941 + local.get $l9942 + i32.add + local.set $l9943 + local.get $l9942 + local.get $l9943 + i32.add + local.set $l9944 + local.get $l9943 + local.get $l9944 + i32.add + local.set $l9945 + local.get $l9944 + local.get $l9945 + i32.add + local.set $l9946 + local.get $l9945 + local.get $l9946 + i32.add + local.set $l9947 + local.get $l9946 + local.get $l9947 + i32.add + local.set $l9948 + local.get $l9947 + local.get $l9948 + i32.add + local.set $l9949 + local.get $l9948 + local.get $l9949 + i32.add + local.set $l9950 + local.get $l9949 + local.get $l9950 + i32.add + local.set $l9951 + local.get $l9950 + local.get $l9951 + i32.add + local.set $l9952 + local.get $l9951 + local.get $l9952 + i32.add + local.set $l9953 + local.get $l9952 + local.get $l9953 + i32.add + local.set $l9954 + local.get $l9953 + local.get $l9954 + i32.add + local.set $l9955 + local.get $l9954 + local.get $l9955 + i32.add + local.set $l9956 + local.get $l9955 + local.get $l9956 + i32.add + local.set $l9957 + local.get $l9956 + local.get $l9957 + i32.add + local.set $l9958 + local.get $l9957 + local.get $l9958 + i32.add + local.set $l9959 + local.get $l9958 + local.get $l9959 + i32.add + local.set $l9960 + local.get $l9959 + local.get $l9960 + i32.add + local.set $l9961 + local.get $l9960 + local.get $l9961 + i32.add + local.set $l9962 + local.get $l9961 + local.get $l9962 + i32.add + local.set $l9963 + local.get $l9962 + local.get $l9963 + i32.add + local.set $l9964 + local.get $l9963 + local.get $l9964 + i32.add + local.set $l9965 + local.get $l9964 + local.get $l9965 + i32.add + local.set $l9966 + local.get $l9965 + local.get $l9966 + i32.add + local.set $l9967 + local.get $l9966 + local.get $l9967 + i32.add + local.set $l9968 + local.get $l9967 + local.get $l9968 + i32.add + local.set $l9969 + local.get $l9968 + local.get $l9969 + i32.add + local.set $l9970 + local.get $l9969 + local.get $l9970 + i32.add + local.set $l9971 + local.get $l9970 + local.get $l9971 + i32.add + local.set $l9972 + local.get $l9971 + local.get $l9972 + i32.add + local.set $l9973 + local.get $l9972 + local.get $l9973 + i32.add + local.set $l9974 + local.get $l9973 + local.get $l9974 + i32.add + local.set $l9975 + local.get $l9974 + local.get $l9975 + i32.add + local.set $l9976 + local.get $l9975 + local.get $l9976 + i32.add + local.set $l9977 + local.get $l9976 + local.get $l9977 + i32.add + local.set $l9978 + local.get $l9977 + local.get $l9978 + i32.add + local.set $l9979 + local.get $l9978 + local.get $l9979 + i32.add + local.set $l9980 + local.get $l9979 + local.get $l9980 + i32.add + local.set $l9981 + local.get $l9980 + local.get $l9981 + i32.add + local.set $l9982 + local.get $l9981 + local.get $l9982 + i32.add + local.set $l9983 + local.get $l9982 + local.get $l9983 + i32.add + local.set $l9984 + local.get $l9983 + local.get $l9984 + i32.add + local.set $l9985 + local.get $l9984 + local.get $l9985 + i32.add + local.set $l9986 + local.get $l9985 + local.get $l9986 + i32.add + local.set $l9987 + local.get $l9986 + local.get $l9987 + i32.add + local.set $l9988 + local.get $l9987 + local.get $l9988 + i32.add + local.set $l9989 + local.get $l9988 + local.get $l9989 + i32.add + local.set $l9990 + local.get $l9989 + local.get $l9990 + i32.add + local.set $l9991 + local.get $l9990 + local.get $l9991 + i32.add + local.set $l9992 + local.get $l9991 + local.get $l9992 + i32.add + local.set $l9993 + local.get $l9992 + local.get $l9993 + i32.add + local.set $l9994 + local.get $l9993 + local.get $l9994 + i32.add + local.set $l9995 + local.get $l9994 + local.get $l9995 + i32.add + local.set $l9996 + local.get $l9995 + local.get $l9996 + i32.add + local.set $l9997 + local.get $l9996 + local.get $l9997 + i32.add + local.set $l9998 + local.get $l9997 + local.get $l9998 + i32.add + local.set $l9999 + ;; Return the last local variable + local.get $l9999 + ) +) From f73d8a6cf2386d787113f3b79499085bd07b9dbb Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Fri, 13 Feb 2026 11:27:50 -0500 Subject: [PATCH 081/137] clean up some hf code (#6354) * clean up some hf code * fix comments * fix ubsan * Revert "fix ubsan" --- src/test/app/Wasm_test.cpp | 14 +- .../wasm_fixtures/codecov_tests/src/lib.rs | 13 + src/test/app/wasm_fixtures/fixtures.cpp | 311 +++++++++--------- .../app/wasm/detail/HostFuncImplGetter.cpp | 52 ++- src/xrpld/app/wasm/detail/HostFuncWrapper.cpp | 4 + 5 files changed, 202 insertions(+), 192 deletions(-) diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index d781875cc6..8a7792dc51 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -326,9 +326,9 @@ struct Wasm_test : public beast::unit_test::suite } { // fail because trying to access nonexistent field - struct BadTestHostFunctions : public TestHostFunctions + struct FieldNotFoundHostFunctions : public TestHostFunctions { - explicit BadTestHostFunctions(Env& env) : TestHostFunctions(env) + explicit FieldNotFoundHostFunctions(Env& env) : TestHostFunctions(env) { } Expected @@ -338,15 +338,15 @@ struct Wasm_test : public beast::unit_test::suite } }; - std::shared_ptr hfs(new BadTestHostFunctions(env)); + std::shared_ptr hfs(new FieldNotFoundHostFunctions(env)); auto re = runEscrowWasm(allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); checkResult(re, -201, 28'965); } { // fail because trying to allocate more than MAX_PAGES memory - struct BadTestHostFunctions : public TestHostFunctions + struct OversizedFieldHostFunctions : public TestHostFunctions { - explicit BadTestHostFunctions(Env& env) : TestHostFunctions(env) + explicit OversizedFieldHostFunctions(Env& env) : TestHostFunctions(env) { } Expected @@ -356,7 +356,7 @@ struct Wasm_test : public beast::unit_test::suite } }; - std::shared_ptr hfs(new BadTestHostFunctions(env)); + std::shared_ptr hfs(new OversizedFieldHostFunctions(env)); auto re = runEscrowWasm(allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); checkResult(re, -201, 28'965); } @@ -574,7 +574,7 @@ struct Wasm_test : public beast::unit_test::suite auto const codecovWasm = hexToBytes(codecovTestsWasmHex); std::shared_ptr hfs(new TestHostFunctions(env, 0)); - auto const allowance = 201'503; + auto const allowance = 202'724; auto re = runEscrowWasm(codecovWasm, hfs, ESCROW_FUNCTION_NAME, {}, allowance); checkResult(re, 1, allowance); diff --git a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs index 59ff5bc164..67e16c5cec 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs +++ b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs @@ -1777,6 +1777,19 @@ pub extern "C" fn finish() -> i32 { "mptoken_keylet_mptid_wrong_length", ) }); + check_result( + unsafe { + host::trace( + message.as_ptr(), + message.len(), + locator.as_ptr(), + locator.len(), + 2, + ) + }, + error_codes::INVALID_PARAMS, + "trace_invalid_as_hex", + ); // ensure that the Slice index desync issue is fixed let empty: &[u8] = b""; diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index db77313a42..2767becda0 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -653,13 +653,13 @@ extern std::string const codecovTestsWasmHex = "73745f6c69621a7065726d697373696f6e65645f646f6d61696e5f6b65796c6574000008686f73745f6c69620d7469636b65745f6b65796c65" "74000008686f73745f6c69620c7661756c745f6b65796c6574000008686f73745f6c69620f64656c65676174655f6b65796c6574000008686f" "73745f6c6962166465706f7369745f707265617574685f6b65796c6574000008686f73745f6c69620a6469645f6b65796c6574000108686f73" - "745f6c69620e7369676e6572735f6b65796c65740001030302090a05030100110619037f01418080c0000b7f00418ea1c0000b7f004190a1c0" - "000b072e04066d656d6f727902000666696e697368003d0a5f5f646174615f656e6403010b5f5f686561705f6261736503020aa12c02460002" + "745f6c69620e7369676e6572735f6b65796c65740001030302090a05030100110619037f01418080c0000b7f0041bba1c0000b7f0041c0a1c0" + "000b072e04066d656d6f727902000666696e697368003d0a5f5f646174615f656e6403010b5f5f686561705f6261736503020abf2c02460002" "40200020014704402002200341014100410010001a20004100480d01418b80c000410b2000ad1001000b200220032000ac10011a0f0b418b80" - "c000410b2000ac1001000bd72b020a7f017e23004190026b22002400419680c000412341014100410010001a20004100360260200041e0006a" - "220241041002410441a88cc000410e103c20004100360260200241041003410441b68cc0004116103c200041f8006a22044200370300200041" - "f0006a22014200370300200041e8006a2205420037030020004200370360200241201004412041cc8cc0004116103c20004100360260200241" - "041005410441e28cc000410c103c200041106a2207428182848890a0c08001370300200041186a2206428182848890a0c08001370300200041" + "c000410b2000ac1001000bf52b020a7f017e23004190026b22002400419680c000412341014100410010001a20004100360260200041e0006a" + "220241041002410441bd8cc000410e103c20004100360260200241041003410441cb8cc0004116103c200041f8006a22044200370300200041" + "f0006a22014200370300200041e8006a2205420037030020004200370360200241201004412041e18cc0004116103c20004100360260200241" + "041005410441f78cc000410c103c200041106a2207428182848890a0c08001370300200041186a2206428182848890a0c08001370300200041" "206a2209428182848890a0c080013703002000428182848890a0c0800137030841b980c000410e1006410141c780c0004111103c200041086a" "41201006410141c780c0004111103c418180202002411410072203411446044002402000412e6a200041e2006a2d00003a0000200020002900" "673703e8012000200041ec006a2900003700ed01200020002f00603b012c200020002903e8013703a801200020002900ed013700ad01200020" @@ -667,170 +667,171 @@ extern std::string const codecovTestsWasmHex = "3703602000412c6a2204411420024120100822034120470d00200041c2006a20002d00623a0000200041f0016a2203200041ef006a29000022" "0a370300200041cf006a200a370000200041d7006a200041f7006a290000370000200041df006a200041ff006a2d00003a0000200020002f01" "603b01402000200028006336004320002000290067370047200041406b412041001009410141d880c0004110103c2001410036020020054200" - "370300200042003703604181802020024114100a411441ee8cc000411c103c2001410036020020054200370300200042003703604101418180" - "2020024114100b4114418a8dc0004114103c200041043602a001200041818020360260200041f8016a22054100360200200342003703002000" - "42003703e80120024104200041e8016a22014114100c4114419e8dc0004113103c2005410036020020034200370300200042003703e8012002" - "20002802a00120014114100d411441b18dc0004123103c2005410036020020034200370300200042003703e8014101200220002802a0012001" - "4114100e411441d48dc000411b103c4189803c100f412041e880c0004110103c4189803c1010412041f880c0004120103c41014189803c1011" + "370300200042003703604181802020024114100a411441838dc000411c103c2001410036020020054200370300200042003703604101418180" + "2020024114100b4114419f8dc0004114103c200041043602a001200041818020360260200041f8016a22054100360200200342003703002000" + "42003703e80120024104200041e8016a22014114100c411441b38dc0004113103c2005410036020020034200370300200042003703e8012002" + "20002802a00120014114100d411441c68dc0004123103c2005410036020020034200370300200042003703e8014101200220002802a0012001" + "4114100e411441e98dc000411b103c4189803c100f412041e880c0004110103c4189803c1010412041f880c0004120103c41014189803c1011" "4120419881c0004118103c200220002802a0011012412041b081c0004117103c200220002802a0011013412041c781c0004127103c41012002" "20002802a0011014412041ee81c000411f103c2004411410154114418d82c000410b103c20004180026a220842003703002005420037030020" - "034200370300200042003703e801200220002802a001200141201016412041ef8dc0004113103c419882c000410c41a482c000410b41af82c0" + "034200370300200042003703e801200220002802a001200141201016412041848ec0004113103c419882c000410c41a482c000410b41af82c0" "00410e1017410141bd82c0004109103c200041c0016a2009290300370300200041b8016a2006290300370300200041b0016a20072903003703" "00200020002903083703a801200541003b010020034200370300200042003703e80120044114200041a8016a22074120200141121018411241" - "828ec0004107103c2005410036020020034200370300200042003703e80120074120200141141019411441898ec000410e103c200041003602" - "e8012007412020014104101a410441978ec000410d103c20074120101b410841c682c000410d103c20074120101c410a41d382c0004114103c" - "200041003602e8012007412020014104101d410441a48ec000410e103c41e782c000410d20044114101e410041f482c000410d103c41e782c0" + "978ec0004107103c2005410036020020034200370300200042003703e801200741202001411410194114419e8ec000410e103c200041003602" + "e8012007412020014104101a410441ac8ec000410d103c20074120101b410841c682c000410d103c20074120101c410a41d382c0004114103c" + "200041003602e8012007412020014104101d410441b98ec000410e103c41e782c000410d20044114101e410041f482c000410d103c41e782c0" "00410d418183c0004108101f4100418983c000410c103c41e782c000410d419583c0004108101f4100419d83c0004111103c417f4104100441" - "7141ae83c000411e103c200041003602e8012001417f1004417141b28ec000411e103c200041ea016a41003a0000200041003b01e801200141" - "031004417d41d08ec0004124103c200041003602e8012001418094ebdc031004417341f48ec0004123103c4102100f416f41cc83c000411f10" + "7141ae83c000411e103c200041003602e8012001417f1004417141c78ec000411e103c200041ea016a41003a0000200041003b01e801200141" + "031004417d41e58ec0004124103c200041003602e8012001418094ebdc031004417341898fc0004123103c4102100f416f41cc83c000411f10" "3c417f20002802a0011012417141eb83c000411f103c2002417f10124171418a84c000411f103c20024181201012417441a984c0004120103c" "200041e094ebdc036a220620002802a0011012417341c984c000411f103c200842003703002005420037030020034200370300200042003703" - "e8012004411420064108200141201020417341978fc0004118103c200842003703002005420037030020034200370300200042003703e80120" - "04411420044114200141201020417141af8fc000411a103c200842003703002005420037030020034200370300200042003703e80120064108" - "2001412041001021417341c98fc0004117103c200842003703002005420037030020034200370300200042003703e801200220002802a00120" - "01412041001021417141e08fc0004120103c200620002802a00141011009417341e884c0004118103c200220002802a0014101100941714180" - "85c000411a103c200842003703002005420037030020034200370300200042003703e801200620002802a0012001412010084173418090c000" - "4116103c200842003703002005420037030020034200370300200042003703e801200220002802a0012001412010084171419690c000411810" - "3c200842003703002005420037030020034200370300200042003703e8012004411420044114200620002802a001200141201022417341ae90" + "e8012004411420064108200141201020417341ac8fc0004118103c200842003703002005420037030020034200370300200042003703e80120" + "04411420044114200141201020417141c48fc000411a103c200842003703002005420037030020034200370300200042003703e80120064108" + "2001412041001021417341de8fc0004117103c200842003703002005420037030020034200370300200042003703e801200220002802a00120" + "01412041001021417141f58fc0004120103c200620002802a00141011009417341e884c0004118103c200220002802a0014101100941714180" + "85c000411a103c200842003703002005420037030020034200370300200042003703e801200620002802a0012001412010084173419590c000" + "4116103c200842003703002005420037030020034200370300200042003703e801200220002802a001200141201008417141ab90c000411810" + "3c200842003703002005420037030020034200370300200042003703e8012004411420044114200620002802a001200141201022417341c390" "c000411c103c200842003703002005420037030020034200370300200042003703e8012004411420044114200220002802a001200141201022" - "417141ca90c000411e103c200842003703002005420037030020034200370300200042003703e80141faa0c0004114200620002802a0012001" - "41201023417341e890c0004119103c200842003703002005420037030020034200370300200042003703e80141faa0c0004114200220002802" - "a0012001412010234171418191c000411f103c200842003703002005420037030020034200370300200042003703e80141faa0c0004114419a" - "85c0004114200141201023417141a091c0004129103c200842003703002005420037030020034200370300200042003703e80141ae85c00041" - "2841faa0c0004114200141201023417141c991c0004125103c200041dc016a2000413c6a280100360200200041d4016a200041346a29010037" - "02002000200029012c3702cc01200041808080083602c801200041003b01e801200041c8016a2209411841faa0c00041142001410210234171" - "41ee91c000410e103c200620002802a001422a1001417341d685c0004111103c200041003b01e8014102200141021007416f41fc91c000411b" - "103c200041003b01e801410220014102100a416f419792c000412b103c200041003b01e8014101410220014102100b416f41c292c000412310" + "417141df90c000411e103c200842003703002005420037030020034200370300200042003703e80141a7a1c0004114200620002802a0012001" + "41201023417341fd90c0004119103c200842003703002005420037030020034200370300200042003703e80141a7a1c0004114200220002802" + "a0012001412010234171419691c000411f103c200842003703002005420037030020034200370300200042003703e80141a7a1c0004114419a" + "85c0004114200141201023417141b591c0004129103c200842003703002005420037030020034200370300200042003703e80141ae85c00041" + "2841a7a1c0004114200141201023417141de91c0004125103c200041dc016a2000413c6a280100360200200041d4016a200041346a29010037" + "02002000200029012c3702cc01200041808080083602c801200041003b01e801200041c8016a2209411841a7a1c00041142001410210234171" + "418392c000410e103c200620002802a001422a1001417341d685c0004111103c200041003b01e8014102200141021007416f419192c000411b" + "103c200041003b01e801410220014102100a416f41ac92c000412b103c200041003b01e8014101410220014102100b416f41d792c000412310" "3c4102100f416f41cc83c000411f103c41021010416f41e785c000412f103c410141021011416f419686c0004127103c41b980c00041812010" - "06417441bd86c000411f103c41b980c00041c1001006417441dc86c000411a103c200041003b01e801200241812020014102100c417441e592" - "c0004121103c200041003b01e801200241812020014102100d4174418693c0004131103c200041003b01e8014101200241812020014102100e" - "417441b793c0004129103c20024181201012417441f686c0004125103c200241812010134174419b87c0004135103c41012002418120101441" + "06417441bd86c000411f103c41b980c00041c1001006417441dc86c000411a103c200041003b01e801200241812020014102100c417441fa92" + "c0004121103c200041003b01e801200241812020014102100d4174419b93c0004131103c200041003b01e8014101200241812020014102100e" + "417441cc93c0004129103c20024181201012417441f686c0004125103c200241812010134174419b87c0004135103c41012002418120101441" "7441d087c000412d103c20024181201015417441fd87c0004119103c41e782c00041812041a482c000410b41af82c000410e1017417441bd82" "c0004109103c41e782c000410d41a482c00041812041af82c000410e1017417441bd82c0004109103c41e782c000410d41a482c000410b41af" - "82c0004181201017417441bd82c0004109103c200041003b01e8012002418120200141021016417441e093c0004121103c200041003b01e801" - "41faa0c00041812041faa0c00041142001410210234174418194c0004118103c200041003b01e8012004411420044114200241812020014102" - "10244174419994c000411f103c200041003b01e801200941812020044114200141021025417441b894c0004122103c41e782c000410d200620" + "82c0004181201017417441bd82c0004109103c200041003b01e8012002418120200141021016417441f593c0004121103c200041003b01e801" + "41a7a1c00041812041a7a1c00041142001410210234174419694c0004118103c200041003b01e8012004411420044114200241812020014102" + "1024417441ae94c000411f103c200041003b01e801200941812020044114200141021025417441cd94c0004122103c41e782c000410d200620" "002802a001410010004173419688c000410f103c200042d487b6f4c7d4b1c0003700e00141e782c000410d200041e095ebdc036a2207410810" "26417341a588c000411c103c41e782c000410d200620002802a001101f417341c188c0004116103c20074108200041e0016a22064108102741" "7341d788c0004118103c20064108200741081027417341ef88c0004118103c200041003b01e801200741082006410820014102410010284173" - "41da94c0004114103c200041003b01e80120064108200741082001410241001028417341ee94c0004114103c200041003b01e8012007410820" - "06410820014102410010294173418295c0004119103c200041003b01e801200641082007410820014102410010294173419b95c0004119103c" - "200041003b01e8012007410820064108200141024100102a417341b495c0004119103c200041003b01e8012006410820074108200141024100" - "102a417341cd95c0004119103c200041003b01e8012007410820064108200141024100102b417341e695c0004117103c200041003b01e80120" - "06410820074108200141024100102b417341fd95c0004117103c200041003b01e801200741084103200141024100102c4173419496c0004114" - "103c200041003b01e801200741084103200141024100102d417341a896c0004113103c200041003b01e80120074108200141024100102e4173" - "41bb96c0004113103c200842003703002005420037030020034200370300200042003703e801200441142004411420014120102f417141ce96" - "c000411f103c200842003703002005420037030020034200370300200042003703e8012004411420044114200141201030417141ed96c00041" - "25103c200842003703002005420037030020034200370300200042003703e80120044114200441142001412010314171419297c0004122103c" - "200842003703002005420037030020034200370300200042003703e8012004411420044114200141201032417141b497c000411e103c200842" - "003703002005420037030020034200370300200042003703e8012004411420044114200141201033417141d297c000411f103c200842003703" - "002005420037030020034200370300200042003703e801200441142004411420044114200141201034417141f197c0004120103c2008420037" - "03002005420037030020034200370300200042003703e80120044114200441142001412010354171419198c000412c103c2008420037030020" - "05420037030020034200370300200042003703e8012004411420044114200141201036417141bd98c000411f103c2008420037030020054200" - "37030020034200370300200042003703e8012004411420044114200141201037417141dc98c000411e103c200220002802a001410010094171" - "418789c0004123103c200041003b01e80120044114200220002802a001200141021018417141fa98c000411a103c200041003b01e801200220" - "002802a0012001410210194171419499c0004121103c200041003b01e801200220002802a00120014102101a417141b599c0004120103c2002" + "41ef94c0004114103c200041003b01e801200641082007410820014102410010284173418395c0004114103c200041003b01e8012007410820" + "06410820014102410010294173419795c0004119103c200041003b01e80120064108200741082001410241001029417341b095c0004119103c" + "200041003b01e8012007410820064108200141024100102a417341c995c0004119103c200041003b01e8012006410820074108200141024100" + "102a417341e295c0004119103c200041003b01e8012007410820064108200141024100102b417341fb95c0004117103c200041003b01e80120" + "06410820074108200141024100102b4173419296c0004117103c200041003b01e801200741084103200141024100102c417341a996c0004114" + "103c200041003b01e801200741084103200141024100102d417341bd96c0004113103c200041003b01e80120074108200141024100102e4173" + "41d096c0004113103c200842003703002005420037030020034200370300200042003703e801200441142004411420014120102f417141e396" + "c000411f103c200842003703002005420037030020034200370300200042003703e80120044114200441142001412010304171418297c00041" + "25103c200842003703002005420037030020034200370300200042003703e8012004411420044114200141201031417141a797c0004122103c" + "200842003703002005420037030020034200370300200042003703e8012004411420044114200141201032417141c997c000411e103c200842" + "003703002005420037030020034200370300200042003703e8012004411420044114200141201033417141e797c000411f103c200842003703" + "002005420037030020034200370300200042003703e8012004411420044114200441142001412010344171418698c0004120103c2008420037" + "03002005420037030020034200370300200042003703e8012004411420044114200141201035417141a698c000412c103c2008420037030020" + "05420037030020034200370300200042003703e8012004411420044114200141201036417141d298c000411f103c2008420037030020054200" + "37030020034200370300200042003703e8012004411420044114200141201037417141f198c000411e103c200220002802a001410010094171" + "418789c0004123103c200041003b01e80120044114200220002802a0012001410210184171418f99c000411a103c200041003b01e801200220" + "002802a001200141021019417141a999c0004121103c200041003b01e801200220002802a00120014102101a417141ca99c0004120103c2002" "20002802a001101b417141aa89c0004120103c200220002802a001101c417141ca89c0004127103c200041003602e801200220002802a00120" - "014104101d417141d599c0004121103c200041003b01e801200220002802a001200141021008417141f699c0004123103c2000418080800836" - "02e801200041003b018e02200220002802a001200141042000418e026a220341021020417141999ac0004121103c200041003b018e02200220" - "002802a00122052004411420022005200341021024417141ba9ac0004127103c200041003b018e0220044114200220002802a0012205200220" - "05200341021024417141e19ac0004127103c200041003b018e02200220002802a00120044114200341021038417141889bc0004125103c2000" - "41003b018e0220044114200220002802a001200341021038417141ad9bc0004125103c200041003b018e02200220002802a001200441142003" - "41021039417141d29bc000412c103c200041003b018e0220044114200220002802a001200341021039417141fe9bc000412c103c200041003b" - "018e02200220002802a00120034102103a417141aa9cc000411f103c200041003b018e02200220002802a0012001410420034102102f417141" - "c99cc0004122103c200041003b018e02200220002802a00120044114419a85c0004114200341021022417141eb9cc0004121103c200041003b" - "018e0220044114200220002802a001419a85c00041142003410210224171418c9dc0004121103c200041003b018e02200220002802a0012001" - "4104200341021030417141ad9dc0004128103c200041003b018e0220094118200220002802a001200341021025417141d59dc0004123103c20" - "0041003b018e02200220002802a00120014104200341021031417141f89dc0004125103c200041003b018e02200220002802a0012001410420" - "03410210324171419d9ec0004121103c200041003b018e02200220002802a00120014104200341021033417141be9ec0004122103c20004100" - "3b018e02200220002802a0012004411420014104200341021034417141e09ec0004124103c200041003b018e0220044114200220002802a001" - "20014104200341021034417141849fc0004124103c200041003b018e02200220002802a00120014104200341021035417141a89fc000412f10" - "3c200041003b018e02200220002802a00120034102103b417141d79fc0004123103c200041003b018e02200220002802a00120014104200341" - "021036417141fa9fc0004122103c200041003b018e02200220002802a001200141042003410210374171419ca0c0004121103c200041003b01" - "8e02200220002802a00141f189c0004120200341021018417141bda0c000411c103c41e782c000410d200220002802a001101e417141918ac0" - "004122103c41e796abdd03410d41f189c000412041001000417341b38ac0004110103c41e796abdd03410d200641081026417341c38ac00041" - "1d103c41e796abdd03410d20044114101e417341e08ac0004118103c41e796abdd03410d419583c0004108101f417341f88ac0004117103c20" - "0220002802a0012002418120410010004174418f8bc000410e103c2002418120420110014174419d8bc0004112103c41e782c0004181202006" - "41081026417441af8bc000411b103c41e782c00041812020044114101e417441ca8bc0004116103c41e782c000418120419583c0004108101f" - "417441e08bc0004115103c41e782c000410d200220002802a001101f417141f58bc0004119103c200041003b018e02200220002802a0012004" - "4114200341021025417141d9a0c0004121103c4101410020044114101e4100418e8cc000411a103c20004190026a240041010f0b0b418080c0" - "00410b417f20032003417f4e1bac1001000b0be5200200418080c0000bae056572726f725f636f64653d54455354204641494c454424242424" - "24205354415254494e47205741534d20455845435554494f4e202424242424746573745f616d656e646d656e74616d656e646d656e745f656e" - "61626c656463616368655f6c65646765725f6f626a6765745f74785f61727261795f6c656e6765745f63757272656e745f6c65646765725f6f" - "626a5f61727261795f6c656e6765745f6c65646765725f6f626a5f61727261795f6c656e6765745f74785f6e65737465645f61727261795f6c" - "656e6765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e6765745f6c65646765725f6f626a5f6e" - "65737465645f61727261795f6c656e7570646174655f6461746174657374206d65737361676574657374207075626b65797465737420736967" - "6e6174757265636865636b5f7369676765745f6e66745f666c6167736765745f6e66745f7472616e736665725f66656574657374696e672074" - "7261636574726163655f6163636f756e74400000000000005f74726163655f616d6f756e74400000000000000074726163655f616d6f756e74" - "5f7a65726f6765745f706172656e745f6c65646765725f686173685f6e65675f7074726765745f74785f61727261795f6c656e5f696e76616c" - "69645f736669656c646765745f74785f6e65737465645f61727261795f6c656e5f6e65675f7074726765745f74785f6e65737465645f617272" - "61795f6c656e5f6e65675f6c656e6765745f74785f6e65737465645f61727261795f6c656e5f746f6f5f6c6f6e676765745f74785f6e657374" - "65645f61727261795f6c656e5f7074725f6f6f6263616368655f6c65646765725f6f626a5f7074725f6f6f6263616368655f6c65646765725f" - "6f626a5f77726f6e675f6c656e55534430303030303030303030303030303030300041d685c0000ba41b74726163655f6e756d5f6f6f625f73" - "74726765745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e5f696e76616c69645f736669656c646765745f6c656467" - "65725f6f626a5f61727261795f6c656e5f696e76616c69645f736669656c64616d656e646d656e745f656e61626c65645f746f6f5f6269675f" - "736c696365616d656e646d656e745f656e61626c65645f746f6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f746f" - "6f5f6269675f736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f5f6269" - "675f736c6963656765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963657570646174" - "655f646174615f746f6f5f6269675f736c69636574726163655f6f6f625f736c69636574726163655f6f70617175655f666c6f61745f6f6f62" - "5f736c69636574726163655f616d6f756e745f6f6f625f736c696365666c6f61745f636f6d706172655f6f6f625f736c69636531666c6f6174" - "5f636f6d706172655f6f6f625f736c6963653263616368655f6c65646765725f6f626a5f77726f6e675f73697a655f75696e74323536676574" - "5f6e66745f666c6167735f77726f6e675f73697a655f75696e743235366765745f6e66745f7472616e736665725f6665655f77726f6e675f73" - "697a655f75696e74323536303030303030303030303030303030303030303030303030303030303030303174726163655f6163636f756e745f" - "77726f6e675f73697a655f6163636f756e74696474726163655f6f6f625f737472696e6774726163655f6f70617175655f666c6f61745f6f6f" - "625f737472696e6774726163655f6163636f756e745f6f6f625f737472696e6774726163655f616d6f756e745f6f6f625f737472696e677472" - "6163655f746f6f5f6c6f6e6774726163655f6e756d5f746f6f5f6c6f6e6774726163655f6f70617175655f666c6f61745f746f6f5f6c6f6e67" - "74726163655f6163636f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f77" - "726f6e675f6c656e67746874726163655f6163636f756e745f636865636b5f646573796e636765745f6c65646765725f73716e6765745f7061" - "72656e745f6c65646765725f74696d656765745f706172656e745f6c65646765725f686173686765745f626173655f6665656765745f637572" - "72656e745f6c65646765725f6f626a5f6669656c646765745f6c65646765725f6f626a5f6669656c646765745f74785f6e65737465645f6669" - "656c646765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c646765745f6c65646765725f6f626a5f6e657374" - "65645f6669656c64636f6d707574655f7368613531325f68616c666765745f6e66746765745f6e66745f6973737565726765745f6e66745f74" - "61786f6e6765745f6e66745f73657269616c6765745f706172656e745f6c65646765725f686173685f6e65675f6c656e6765745f706172656e" - "745f6c65646765725f686173685f6275665f746f6f5f736d616c6c6765745f706172656e745f6c65646765725f686173685f6c656e5f746f6f" - "5f6c6f6e67636865636b5f6b65796c65745f6f6f625f6c656e5f753332636865636b5f6b65796c65745f77726f6e675f6c656e5f753332666c" - "6f61745f66726f6d5f75696e745f6c656e5f6f6f62666c6f61745f66726f6d5f75696e745f77726f6e675f6c656e5f75696e7436346163636f" - "756e745f6b65796c65745f6c656e5f6f6f626163636f756e745f6b65796c65745f77726f6e675f6c656e6c696e655f6b65796c65745f6c656e" - "5f6f6f625f63757272656e63796c696e655f6b65796c65745f77726f6e675f6c656e5f63757272656e6379616d6d5f6b65796c65745f6c656e" - "5f6f6f625f617373657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6c656e5f617373657432616d6d5f6b65796c65745f6c656e5f" - "77726f6e675f6e6f6e5f7872705f63757272656e63795f6c656e616d6d5f6b65796c65745f6c656e5f77726f6e675f7872705f63757272656e" - "63795f6c656e616d6d5f6b65796c65745f6d70746765745f74785f6669656c645f696e76616c69645f736669656c646765745f63757272656e" - "745f6c65646765725f6f626a5f6669656c645f696e76616c69645f736669656c646765745f6c65646765725f6f626a5f6669656c645f696e76" - "616c69645f736669656c646765745f74785f6e65737465645f6669656c645f746f6f5f6269675f736c6963656765745f63757272656e745f6c" - "65646765725f6f626a5f6e65737465645f6669656c645f746f6f5f6269675f736c6963656765745f6c65646765725f6f626a5f6e6573746564" - "5f6669656c645f746f6f5f6269675f736c696365636f6d707574655f7368613531325f68616c665f746f6f5f6269675f736c696365616d6d5f" - "6b65796c65745f746f6f5f6269675f736c69636563726564656e7469616c5f6b65796c65745f746f6f5f6269675f736c6963656d70746f6b65" - "6e5f6b65796c65745f746f6f5f6269675f736c6963655f6d70746964666c6f61745f6164645f6f6f625f736c69636531666c6f61745f616464" - "5f6f6f625f736c69636532666c6f61745f73756274726163745f6f6f625f736c69636531666c6f61745f73756274726163745f6f6f625f736c" - "69636532666c6f61745f6d756c7469706c795f6f6f625f736c69636531666c6f61745f6d756c7469706c795f6f6f625f736c69636532666c6f" - "61745f6469766964655f6f6f625f736c69636531666c6f61745f6469766964655f6f6f625f736c69636532666c6f61745f726f6f745f6f6f62" - "5f736c696365666c6f61745f706f775f6f6f625f736c696365666c6f61745f6c6f675f6f6f625f736c696365657363726f775f6b65796c6574" - "5f77726f6e675f73697a655f75696e7433326d70745f69737375616e63655f6b65796c65745f77726f6e675f73697a655f75696e7433326e66" - "745f6f666665725f6b65796c65745f77726f6e675f73697a655f75696e7433326f666665725f6b65796c65745f77726f6e675f73697a655f75" - "696e7433326f7261636c655f6b65796c65745f77726f6e675f73697a655f75696e7433327061796368616e5f6b65796c65745f77726f6e675f" - "73697a655f75696e7433327065726d697373696f6e65645f646f6d61696e5f6b65796c65745f77726f6e675f73697a655f75696e7433327469" - "636b65745f6b65796c65745f77726f6e675f73697a655f75696e7433327661756c745f6b65796c65745f77726f6e675f73697a655f75696e74" - "33326765745f6e66745f77726f6e675f73697a655f75696e743235366765745f6e66745f6973737565725f77726f6e675f73697a655f75696e" - "743235366765745f6e66745f7461786f6e5f77726f6e675f73697a655f75696e743235366765745f6e66745f73657269616c5f77726f6e675f" - "73697a655f75696e743235366163636f756e745f6b65796c65745f77726f6e675f73697a655f6163636f756e746964636865636b5f6b65796c" - "65745f77726f6e675f73697a655f6163636f756e74696463726564656e7469616c5f6b65796c65745f77726f6e675f73697a655f6163636f75" - "6e7469643163726564656e7469616c5f6b65796c65745f77726f6e675f73697a655f6163636f756e7469643264656c65676174655f6b65796c" - "65745f77726f6e675f73697a655f6163636f756e7469643164656c65676174655f6b65796c65745f77726f6e675f73697a655f6163636f756e" - "746964326465706f7369745f707265617574685f6b65796c65745f77726f6e675f73697a655f6163636f756e746964316465706f7369745f70" - "7265617574685f6b65796c65745f77726f6e675f73697a655f6163636f756e746964326469645f6b65796c65745f77726f6e675f73697a655f" - "6163636f756e746964657363726f775f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646c696e655f6b65796c65745f7772" - "6f6e675f73697a655f6163636f756e746964316c696e655f6b65796c65745f77726f6e675f73697a655f6163636f756e746964326d70745f69" - "737375616e63655f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646d70746f6b656e5f6b65796c65745f77726f6e675f73" - "697a655f6163636f756e7469646e66745f6f666665725f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646f666665725f6b" - "65796c65745f77726f6e675f73697a655f6163636f756e7469646f7261636c655f6b65796c65745f77726f6e675f73697a655f6163636f756e" - "7469647061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e746964317061796368616e5f6b65796c65745f77726f" - "6e675f73697a655f6163636f756e746964327065726d697373696f6e65645f646f6d61696e5f6b65796c65745f77726f6e675f73697a655f61" - "63636f756e7469647369676e6572735f6b65796c65745f77726f6e675f73697a655f6163636f756e7469647469636b65745f6b65796c65745f" - "77726f6e675f73697a655f6163636f756e7469647661756c745f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646765745f" - "6e66745f77726f6e675f73697a655f6163636f756e7469646d70746f6b656e5f6b65796c65745f6d707469645f77726f6e675f6c656e677468" - "004d0970726f64756365727302086c616e6775616765010452757374000c70726f6365737365642d6279010572757374631d312e38372e3020" - "2831373036376539616320323032352d30352d303929002c0f7461726765745f6665617475726573022b0f6d757461626c652d676c6f62616c" - "732b087369676e2d657874"; + "014104101d417141ea99c0004121103c200041003b01e801200220002802a0012001410210084171418b9ac0004124103c2000418080800836" + "02e801200041003b018e02200220002802a001200141042000418e026a220341021020417141af9ac0004122103c200041003b018e02200220" + "002802a00122052004411420022005200341021024417141d19ac0004128103c200041003b018e0220044114200220002802a0012205200220" + "05200341021024417141f99ac0004128103c200041003b018e02200220002802a00120044114200341021038417141a19bc0004126103c2000" + "41003b018e0220044114200220002802a001200341021038417141c79bc0004126103c200041003b018e02200220002802a001200441142003" + "41021039417141ed9bc000412d103c200041003b018e0220044114200220002802a0012003410210394171419a9cc000412d103c200041003b" + "018e02200220002802a00120034102103a417141c79cc0004120103c200041003b018e02200220002802a0012001410420034102102f417141" + "e79cc0004123103c200041003b018e02200220002802a00120044114419a85c00041142003410210224171418a9dc0004122103c200041003b" + "018e0220044114200220002802a001419a85c0004114200341021022417141ac9dc0004122103c200041003b018e02200220002802a0012001" + "4104200341021030417141ce9dc0004129103c200041003b018e0220094118200220002802a001200341021025417141f79dc0004124103c20" + "0041003b018e02200220002802a001200141042003410210314171419b9ec0004126103c200041003b018e02200220002802a0012001410420" + "0341021032417141c19ec0004122103c200041003b018e02200220002802a00120014104200341021033417141e39ec0004123103c20004100" + "3b018e02200220002802a0012004411420014104200341021034417141869fc0004125103c200041003b018e0220044114200220002802a001" + "20014104200341021034417141ab9fc0004125103c200041003b018e02200220002802a00120014104200341021035417141d09fc000413010" + "3c200041003b018e02200220002802a00120034102103b41714180a0c0004124103c200041003b018e02200220002802a00120014104200341" + "021036417141a4a0c0004123103c200041003b018e02200220002802a00120014104200341021037417141c7a0c0004122103c200041003b01" + "8e02200220002802a00141f189c0004120200341021018417141e9a0c000411d103c41e782c000410d200220002802a001101e417141918ac0" + "004123103c41e796abdd03410d41f189c000412041001000417341b48ac0004110103c41e796abdd03410d200641081026417341c48ac00041" + "1d103c41e796abdd03410d20044114101e417341e18ac0004118103c41e796abdd03410d419583c0004108101f417341f98ac0004117103c20" + "0220002802a001200241812041001000417441908bc000410e103c2002418120420110014174419e8bc0004112103c41e782c0004181202006" + "41081026417441b08bc000411b103c41e782c00041812020044114101e417441cb8bc0004116103c41e782c000418120419583c0004108101f" + "417441e18bc0004115103c41e782c000410d200220002802a001101f417141f68bc0004119103c200041003b018e02200220002802a0012004" + "411420034102102541714186a1c0004121103c41e782c000410d200220002802a001410210004171418f8cc0004114103c4101410020044114" + "101e410041a38cc000411a103c20004190026a240041010f0b0b418080c000410b417f20032003417f4e1bac1001000b0b92210200418080c0" + "000bae056572726f725f636f64653d54455354204641494c45442424242424205354415254494e47205741534d20455845435554494f4e2024" + "24242424746573745f616d656e646d656e74616d656e646d656e745f656e61626c656463616368655f6c65646765725f6f626a6765745f7478" + "5f61727261795f6c656e6765745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e6765745f6c65646765725f6f626a5f" + "61727261795f6c656e6765745f74785f6e65737465645f61727261795f6c656e6765745f63757272656e745f6c65646765725f6f626a5f6e65" + "737465645f61727261795f6c656e6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e7570646174655f6461746174" + "657374206d65737361676574657374207075626b657974657374207369676e6174757265636865636b5f7369676765745f6e66745f666c6167" + "736765745f6e66745f7472616e736665725f66656574657374696e6720747261636574726163655f6163636f756e74400000000000005f7472" + "6163655f616d6f756e74400000000000000074726163655f616d6f756e745f7a65726f6765745f706172656e745f6c65646765725f68617368" + "5f6e65675f7074726765745f74785f61727261795f6c656e5f696e76616c69645f736669656c646765745f74785f6e65737465645f61727261" + "795f6c656e5f6e65675f7074726765745f74785f6e65737465645f61727261795f6c656e5f6e65675f6c656e6765745f74785f6e6573746564" + "5f61727261795f6c656e5f746f6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f7074725f6f6f6263616368655f6c" + "65646765725f6f626a5f7074725f6f6f6263616368655f6c65646765725f6f626a5f77726f6e675f6c656e5553443030303030303030303030" + "3030303030300041d685c0000bd11b74726163655f6e756d5f6f6f625f7374726765745f63757272656e745f6c65646765725f6f626a5f6172" + "7261795f6c656e5f696e76616c69645f736669656c646765745f6c65646765725f6f626a5f61727261795f6c656e5f696e76616c69645f7366" + "69656c64616d656e646d656e745f656e61626c65645f746f6f5f6269675f736c696365616d656e646d656e745f656e61626c65645f746f6f5f" + "6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f63757272656e745f6c656467" + "65725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f6c65646765725f6f626a5f6e65737465" + "645f61727261795f6c656e5f746f6f5f6269675f736c6963657570646174655f646174615f746f6f5f6269675f736c69636574726163655f6f" + "6f625f736c69636574726163655f6f70617175655f666c6f61745f6f6f625f736c69636574726163655f616d6f756e745f6f6f625f736c6963" + "65666c6f61745f636f6d706172655f6f6f625f736c69636531666c6f61745f636f6d706172655f6f6f625f736c6963653263616368655f6c65" + "646765725f6f626a5f77726f6e675f73697a655f75696e743235366765745f6e66745f666c6167735f77726f6e675f73697a655f75696e7432" + "35366765745f6e66745f7472616e736665725f6665655f77726f6e675f73697a655f75696e7432353630303030303030303030303030303030" + "3030303030303030303030303030303174726163655f6163636f756e745f77726f6e675f73697a655f6163636f756e745f696474726163655f" + "6f6f625f737472696e6774726163655f6f70617175655f666c6f61745f6f6f625f737472696e6774726163655f6163636f756e745f6f6f625f" + "737472696e6774726163655f616d6f756e745f6f6f625f737472696e6774726163655f746f6f5f6c6f6e6774726163655f6e756d5f746f6f5f" + "6c6f6e6774726163655f6f70617175655f666c6f61745f746f6f5f6c6f6e6774726163655f6163636f756e745f746f6f5f6c6f6e6774726163" + "655f616d6f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f77726f6e675f6c656e67746874726163655f696e76616c69645f61" + "735f68657874726163655f6163636f756e745f636865636b5f646573796e636765745f6c65646765725f73716e6765745f706172656e745f6c" + "65646765725f74696d656765745f706172656e745f6c65646765725f686173686765745f626173655f6665656765745f63757272656e745f6c" + "65646765725f6f626a5f6669656c646765745f6c65646765725f6f626a5f6669656c646765745f74785f6e65737465645f6669656c64676574" + "5f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c646765745f6c65646765725f6f626a5f6e65737465645f666965" + "6c64636f6d707574655f7368613531325f68616c666765745f6e66746765745f6e66745f6973737565726765745f6e66745f7461786f6e6765" + "745f6e66745f73657269616c6765745f706172656e745f6c65646765725f686173685f6e65675f6c656e6765745f706172656e745f6c656467" + "65725f686173685f6275665f746f6f5f736d616c6c6765745f706172656e745f6c65646765725f686173685f6c656e5f746f6f5f6c6f6e6763" + "6865636b5f6b65796c65745f6f6f625f6c656e5f753332636865636b5f6b65796c65745f77726f6e675f6c656e5f753332666c6f61745f6672" + "6f6d5f75696e745f6c656e5f6f6f62666c6f61745f66726f6d5f75696e745f77726f6e675f6c656e5f75696e7436346163636f756e745f6b65" + "796c65745f6c656e5f6f6f626163636f756e745f6b65796c65745f77726f6e675f6c656e6c696e655f6b65796c65745f6c656e5f6f6f625f63" + "757272656e63796c696e655f6b65796c65745f77726f6e675f6c656e5f63757272656e6379616d6d5f6b65796c65745f6c656e5f6f6f625f61" + "7373657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6c656e5f617373657432616d6d5f6b65796c65745f6c656e5f77726f6e675f" + "6e6f6e5f7872705f63757272656e63795f6c656e616d6d5f6b65796c65745f6c656e5f77726f6e675f7872705f63757272656e63795f6c656e" + "616d6d5f6b65796c65745f6d70746765745f74785f6669656c645f696e76616c69645f736669656c646765745f63757272656e745f6c656467" + "65725f6f626a5f6669656c645f696e76616c69645f736669656c646765745f6c65646765725f6f626a5f6669656c645f696e76616c69645f73" + "6669656c646765745f74785f6e65737465645f6669656c645f746f6f5f6269675f736c6963656765745f63757272656e745f6c65646765725f" + "6f626a5f6e65737465645f6669656c645f746f6f5f6269675f736c6963656765745f6c65646765725f6f626a5f6e65737465645f6669656c64" + "5f746f6f5f6269675f736c696365636f6d707574655f7368613531325f68616c665f746f6f5f6269675f736c696365616d6d5f6b65796c6574" + "5f746f6f5f6269675f736c69636563726564656e7469616c5f6b65796c65745f746f6f5f6269675f736c6963656d70746f6b656e5f6b65796c" + "65745f746f6f5f6269675f736c6963655f6d70746964666c6f61745f6164645f6f6f625f736c69636531666c6f61745f6164645f6f6f625f73" + "6c69636532666c6f61745f73756274726163745f6f6f625f736c69636531666c6f61745f73756274726163745f6f6f625f736c69636532666c" + "6f61745f6d756c7469706c795f6f6f625f736c69636531666c6f61745f6d756c7469706c795f6f6f625f736c69636532666c6f61745f646976" + "6964655f6f6f625f736c69636531666c6f61745f6469766964655f6f6f625f736c69636532666c6f61745f726f6f745f6f6f625f736c696365" + "666c6f61745f706f775f6f6f625f736c696365666c6f61745f6c6f675f6f6f625f736c696365657363726f775f6b65796c65745f77726f6e67" + "5f73697a655f75696e7433326d70745f69737375616e63655f6b65796c65745f77726f6e675f73697a655f75696e7433326e66745f6f666665" + "725f6b65796c65745f77726f6e675f73697a655f75696e7433326f666665725f6b65796c65745f77726f6e675f73697a655f75696e7433326f" + "7261636c655f6b65796c65745f77726f6e675f73697a655f75696e7433327061796368616e5f6b65796c65745f77726f6e675f73697a655f75" + "696e7433327065726d697373696f6e65645f646f6d61696e5f6b65796c65745f77726f6e675f73697a655f75696e7433327469636b65745f6b" + "65796c65745f77726f6e675f73697a655f75696e7433327661756c745f6b65796c65745f77726f6e675f73697a655f75696e7433326765745f" + "6e66745f77726f6e675f73697a655f75696e743235366765745f6e66745f6973737565725f77726f6e675f73697a655f75696e743235366765" + "745f6e66745f7461786f6e5f77726f6e675f73697a655f75696e743235366765745f6e66745f73657269616c5f77726f6e675f73697a655f75" + "696e743235366163636f756e745f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964636865636b5f6b65796c65745f7772" + "6f6e675f73697a655f6163636f756e745f696463726564656e7469616c5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69" + "643163726564656e7469616c5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69643264656c65676174655f6b65796c6574" + "5f77726f6e675f73697a655f6163636f756e745f69643164656c65676174655f6b65796c65745f77726f6e675f73697a655f6163636f756e74" + "5f6964326465706f7369745f707265617574685f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964316465706f7369745f" + "707265617574685f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964326469645f6b65796c65745f77726f6e675f73697a" + "655f6163636f756e745f6964657363726f775f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69646c696e655f6b65796c65" + "745f77726f6e675f73697a655f6163636f756e745f6964316c696e655f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964" + "326d70745f69737375616e63655f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69646d70746f6b656e5f6b65796c65745f" + "77726f6e675f73697a655f6163636f756e745f69646e66745f6f666665725f6b65796c65745f77726f6e675f73697a655f6163636f756e745f" + "69646f666665725f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69646f7261636c655f6b65796c65745f77726f6e675f73" + "697a655f6163636f756e745f69647061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f696431706179636861" + "6e5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964327065726d697373696f6e65645f646f6d61696e5f6b65796c6574" + "5f77726f6e675f73697a655f6163636f756e745f69647369676e6572735f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69" + "647469636b65745f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69647661756c745f6b65796c65745f77726f6e675f7369" + "7a655f6163636f756e745f69646765745f6e66745f77726f6e675f73697a655f6163636f756e745f69646d70746f6b656e5f6b65796c65745f" + "6d707469645f77726f6e675f6c656e677468004d0970726f64756365727302086c616e6775616765010452757374000c70726f636573736564" + "2d6279010572757374631d312e38372e30202831373036376539616320323032352d30352d303929002c0f7461726765745f66656174757265" + "73022b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; extern std::string const floatTestsWasmHex = "0061736d0100000001430860077f7f7f7f7f7f7f017f60057f7f7f7f7f017f60047f7f7f7f" diff --git a/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp b/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp index 0a3247604a..163ab4e65f 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp @@ -35,77 +35,69 @@ getAnyFieldData(STBase const* obj) case STI_UNKNOWN: case STI_NOTPRESENT: return Unexpected(HostFunctionError::FIELD_NOT_FOUND); - break; - // LCOV_EXCL_STOP + // LCOV_EXCL_STOP + case STI_OBJECT: case STI_ARRAY: case STI_VECTOR256: return Unexpected(HostFunctionError::NOT_LEAF_FIELD); - break; + case STI_ACCOUNT: { auto const* account(static_cast(obj)); auto const& data = account->value(); return Bytes{data.begin(), data.end()}; } - break; - case STI_AMOUNT: - // will be processed by serializer - break; + case STI_ISSUE: { auto const* issue(static_cast(obj)); Asset const& asset(issue->value()); // XRP and IOU will be processed by serializer if (asset.holds()) { - // MPT auto const& mptIssue = asset.get(); auto const& mptID = mptIssue.getMptID(); return Bytes{mptID.cbegin(), mptID.cend()}; } + break; // Use serializer } - break; + case STI_VL: { auto const* vl(static_cast(obj)); auto const& data = vl->value(); return Bytes{data.begin(), data.end()}; } - break; - case STI_UINT16: { + + case STI_UINT16: return getIntBytes(obj); - } - break; - case STI_UINT32: { + + case STI_UINT32: return getIntBytes(obj); - } + // LCOV_EXCL_START - case STI_UINT64: { + case STI_UINT64: return getIntBytes(obj); - } - break; - case STI_INT32: { + + case STI_INT32: return getIntBytes(obj); - } - break; - case STI_INT64: { + + case STI_INT64: return getIntBytes(obj); - } - // LCOV_EXCL_STOP - break; + // LCOV_EXCL_STOP + case STI_UINT256: { auto const* uint256Obj(static_cast(obj)); auto const& data = uint256Obj->value(); return Bytes{data.begin(), data.end()}; } - break; + + case STI_AMOUNT: default: - break; // default to serializer + break; // Use serializer } Serializer msg; obj->add(msg); - auto const data = msg.getData(); - - return data; + return msg.getData(); } static Expected diff --git a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp index 34cfac416e..0d245c526c 100644 --- a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp @@ -1355,6 +1355,10 @@ trace_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { return hfResult(results, asHex.error()); // LCOV_EXCL_LINE } + if (*asHex != 0 && *asHex != 1) + { + return hfResult(results, HostFunctionError::INVALID_PARAMS); + } return returnResult(runtime, params, results, hf->trace(*msg, *data, *asHex), index); } From fd524c4be9c63f91ef1029a06f179500ab682d68 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 18 Feb 2026 12:41:56 -0500 Subject: [PATCH 082/137] fix pre-commit --- src/test/app/Wasm_test.cpp | 11 +- src/test/app/wasm_fixtures/b58.c | 101 ++++++----- src/test/app/wasm_fixtures/bad_align.c | 66 ++++---- src/test/app/wasm_fixtures/bad_alloc.c | 30 ++-- src/test/app/wasm_fixtures/fib.c | 13 +- src/test/app/wasm_fixtures/infiniteLoop.c | 11 +- src/test/app/wasm_fixtures/ledgerSqn.c | 16 +- src/test/app/wasm_fixtures/sha512Pure.c | 198 +++++++++++----------- src/xrpld/app/wasm/WasmiVM.h | 3 +- src/xrpld/app/wasm/detail/WasmiVM.cpp | 6 +- 10 files changed, 224 insertions(+), 231 deletions(-) diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 8a7792dc51..1d8f165679 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -535,11 +535,12 @@ struct Wasm_test : public beast::unit_test::suite [[maybe_unused]] uint256 const nft1{token::getNextID(env, alan, 0u)}; env(token::mint(alan, 0u), - token::uri("https://github.com/XRPLF/XRPL-Standards/discussions/" - "279?id=github.com/XRPLF/XRPL-Standards/discussions/" - "279&ut=github.com/XRPLF/XRPL-Standards/discussions/" - "279&sid=github.com/XRPLF/XRPL-Standards/discussions/" - "279&aot=github.com/XRPLF/XRPL-Standards/disc")); + token::uri( + "https://github.com/XRPLF/XRPL-Standards/discussions/" + "279?id=github.com/XRPLF/XRPL-Standards/discussions/" + "279&ut=github.com/XRPLF/XRPL-Standards/discussions/" + "279&sid=github.com/XRPLF/XRPL-Standards/discussions/" + "279&aot=github.com/XRPLF/XRPL-Standards/disc")); [[maybe_unused]] uint256 const nft2{token::getNextID(env, alan, 0u)}; env(token::mint(alan, 0u)); env.close(); diff --git a/src/test/app/wasm_fixtures/b58.c b/src/test/app/wasm_fixtures/b58.c index 56defdbb32..8935a9f1a5 100644 --- a/src/test/app/wasm_fixtures/b58.c +++ b/src/test/app/wasm_fixtures/b58.c @@ -1,72 +1,69 @@ #include -static char const b58digits_ordered[] = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; +static char const b58digits_ordered[] = + "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; uint8_t e_data[32 * 1024]; -void* -allocate(int sz) +void *allocate(int sz) { - static int idx = 0; - if (idx >= 32) - return 0; - if (sz > 1024) - return 0; - return &e_data[idx++ << 10]; + static int idx = 0; + if (idx >= 32) + return 0; + if (sz > 1024) + return 0; + return &e_data[idx++ << 10]; } -void -deallocate(void* p) +void deallocate(void *p) {} + +extern int32_t b58enco(char *b58, int32_t b58sz, void const *data, + int32_t binsz) { -} + uint8_t const *bin = data; + int32_t carry; + int32_t i, j, high, zcount = 0; + int32_t size; -extern int32_t -b58enco(char* b58, int32_t b58sz, void const* data, int32_t binsz) -{ - uint8_t const* bin = data; - int32_t carry; - int32_t i, j, high, zcount = 0; - int32_t size; + while (zcount < binsz && !bin[zcount]) + ++zcount; - while (zcount < binsz && !bin[zcount]) - ++zcount; + size = (binsz - zcount) * 138 / 100 + 1; + uint8_t *buf = allocate(size); + if (!buf) + return 0; + // memset(buf, 0, size); + for (i = 0; i < size; ++i) + buf[i] = 0; - size = (binsz - zcount) * 138 / 100 + 1; - uint8_t* buf = allocate(size); - if (!buf) - return 0; - // memset(buf, 0, size); - for (i = 0; i < size; ++i) - buf[i] = 0; - - for (i = zcount, high = size - 1; i < binsz; ++i, high = j) + for (i = zcount, high = size - 1; i < binsz; ++i, high = j) + { + for (carry = bin[i], j = size - 1; (j > high) || carry; --j) { - for (carry = bin[i], j = size - 1; (j > high) || carry; --j) - { - carry += 256 * buf[j]; - buf[j] = carry % 58; - carry /= 58; - if (!j) - break; - } + carry += 256 * buf[j]; + buf[j] = carry % 58; + carry /= 58; + if (!j) + break; } + } - for (j = 0; j < size && !buf[j]; ++j) - ; + for (j = 0; j < size && !buf[j]; ++j) + ; - if (b58sz <= zcount + size - j) - return 0; + if (b58sz <= zcount + size - j) + return 0; - if (zcount) - { - // memset(b58, '1', zcount); - for (i = 0; i < zcount; ++i) - b58[i] = '1'; - } + if (zcount) + { + // memset(b58, '1', zcount); + for (i = 0; i < zcount; ++i) + b58[i] = '1'; + } - for (i = zcount; j < size; ++i, ++j) - b58[i] = b58digits_ordered[buf[j]]; - b58[i] = '\0'; + for (i = zcount; j < size; ++i, ++j) + b58[i] = b58digits_ordered[buf[j]]; + b58[i] = '\0'; - return i + 1; + return i + 1; } diff --git a/src/test/app/wasm_fixtures/bad_align.c b/src/test/app/wasm_fixtures/bad_align.c index edb045560d..cc291c70f1 100644 --- a/src/test/app/wasm_fixtures/bad_align.c +++ b/src/test/app/wasm_fixtures/bad_align.c @@ -1,47 +1,43 @@ #include -int32_t -float_from_uint(uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); -int32_t -check_keylet(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); +int32_t float_from_uint(uint8_t const *, int32_t, uint8_t *, int32_t, int32_t); +int32_t check_keylet(uint8_t const *, int32_t, uint8_t const *, int32_t, + uint8_t *, int32_t); uint8_t e_data1[32 * 1024]; uint8_t e_data2[32 * 1024]; -int32_t -test1() +int32_t test1() { - e_data1[1] = 0xFF; - e_data1[2] = 0xFF; - e_data1[3] = 0xFF; - e_data1[4] = 0xFF; - e_data1[5] = 0xFF; - e_data1[6] = 0xFF; - e_data1[7] = 0xFF; - e_data1[8] = 0xFF; - int32_t result = float_from_uint(&e_data1[1], 8, &e_data1[35], 12, 0); - return result >= 0 ? *((int32_t*)(&e_data1[36])) : result; + e_data1[1] = 0xFF; + e_data1[2] = 0xFF; + e_data1[3] = 0xFF; + e_data1[4] = 0xFF; + e_data1[5] = 0xFF; + e_data1[6] = 0xFF; + e_data1[7] = 0xFF; + e_data1[8] = 0xFF; + int32_t result = float_from_uint(&e_data1[1], 8, &e_data1[35], 12, 0); + return result >= 0 ? *((int32_t *)(&e_data1[36])) : result; } -int32_t -test2() +int32_t test2() { - // Set up misaligned uint32 (seq) at offset 1 - e_data2[1] = 0xFF; - e_data2[2] = 0xFF; - e_data2[3] = 0xFF; - e_data2[4] = 0xFF; - // Set up valid non-zero AccountID (20 bytes) at offset 10 - for (int i = 0; i < 20; i++) - e_data2[10 + i] = i + 1; - // Call check_keylet with misaligned uint32 at &e_data2[1] to hit line 72 in HostFuncWrapper.cpp - int32_t result = check_keylet(&e_data2[10], 20, &e_data2[1], 4, &e_data2[35], 32); - // Return the misaligned value directly to validate it was read correctly (-1 if all 0xFF) - return result >= 0 ? *((int32_t*)(&e_data2[36])) : result; + // Set up misaligned uint32 (seq) at offset 1 + e_data2[1] = 0xFF; + e_data2[2] = 0xFF; + e_data2[3] = 0xFF; + e_data2[4] = 0xFF; + // Set up valid non-zero AccountID (20 bytes) at offset 10 + for (int i = 0; i < 20; i++) + e_data2[10 + i] = i + 1; + // Call check_keylet with misaligned uint32 at &e_data2[1] to hit line 72 in + // HostFuncWrapper.cpp + int32_t result = + check_keylet(&e_data2[10], 20, &e_data2[1], 4, &e_data2[35], 32); + // Return the misaligned value directly to validate it was read correctly (-1 + // if all 0xFF) + return result >= 0 ? *((int32_t *)(&e_data2[36])) : result; } -int32_t -test() -{ - return test1() + test2(); -} +int32_t test() { return test1() + test2(); } diff --git a/src/test/app/wasm_fixtures/bad_alloc.c b/src/test/app/wasm_fixtures/bad_alloc.c index 9a0233e8a5..7735679365 100644 --- a/src/test/app/wasm_fixtures/bad_alloc.c +++ b/src/test/app/wasm_fixtures/bad_alloc.c @@ -2,26 +2,24 @@ char buf[1024]; -void* -allocate(int sz) +void *allocate(int sz) { - if (!sz) - return 0; + if (!sz) + return 0; - if (sz == 1) - return ((void*)(8 * 1024 * 1024)); - if (sz == 2) - return 0; - if (sz == 3) - return ((void*)(0xFFFFFFFF)); + if (sz == 1) + return ((void *)(8 * 1024 * 1024)); + if (sz == 2) + return 0; + if (sz == 3) + return ((void *)(0xFFFFFFFF)); - return &buf[sz]; + return &buf[sz]; } -int32_t -test(char* p, int32_t sz) +int32_t test(char *p, int32_t sz) { - if (!sz) - return 0; - return p[0]; + if (!sz) + return 0; + return p[0]; } diff --git a/src/test/app/wasm_fixtures/fib.c b/src/test/app/wasm_fixtures/fib.c index 4410923054..e45cc4fe6c 100644 --- a/src/test/app/wasm_fixtures/fib.c +++ b/src/test/app/wasm_fixtures/fib.c @@ -1,12 +1,11 @@ // typedef long long mint; typedef int mint; -mint -fib(mint n) +mint fib(mint n) { - if (!n) - return 0; - if (n <= 2) - return 1; - return fib(n - 1) + fib(n - 2); + if (!n) + return 0; + if (n <= 2) + return 1; + return fib(n - 1) + fib(n - 2); } diff --git a/src/test/app/wasm_fixtures/infiniteLoop.c b/src/test/app/wasm_fixtures/infiniteLoop.c index 037a843cac..ba84a92ac1 100644 --- a/src/test/app/wasm_fixtures/infiniteLoop.c +++ b/src/test/app/wasm_fixtures/infiniteLoop.c @@ -1,8 +1,7 @@ -int -loop() +int loop() { - int volatile x = 0; - while (1) - x++; - return x; + int volatile x = 0; + while (1) + x++; + return x; } diff --git a/src/test/app/wasm_fixtures/ledgerSqn.c b/src/test/app/wasm_fixtures/ledgerSqn.c index 020fafc78f..e4d57b8593 100644 --- a/src/test/app/wasm_fixtures/ledgerSqn.c +++ b/src/test/app/wasm_fixtures/ledgerSqn.c @@ -1,16 +1,14 @@ #include -int32_t -get_ledger_sqn(uint8_t*, int32_t); +int32_t get_ledger_sqn(uint8_t *, int32_t); -int -finish() +int finish() { - uint32_t sqn; - int32_t result = get_ledger_sqn((uint8_t*)&sqn, sizeof(sqn)); + uint32_t sqn; + int32_t result = get_ledger_sqn((uint8_t *)&sqn, sizeof(sqn)); - if (result < 0) - return result; + if (result < 0) + return result; - return sqn >= 5 ? 5 : 0; + return sqn >= 5 ? 5 : 0; } diff --git a/src/test/app/wasm_fixtures/sha512Pure.c b/src/test/app/wasm_fixtures/sha512Pure.c index 2c736bb218..347bf8827b 100644 --- a/src/test/app/wasm_fixtures/sha512Pure.c +++ b/src/test/app/wasm_fixtures/sha512Pure.c @@ -2,22 +2,33 @@ #include static uint64_t const K512[] = { - 0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc, 0x3956c25bf348b538, - 0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118, 0xd807aa98a3030242, 0x12835b0145706fbe, - 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2, 0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235, - 0xc19bf174cf692694, 0xe49b69c19ef14ad2, 0xefbe4786384f25e3, 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65, - 0x2de92c6f592b0275, 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5, 0x983e5152ee66dfab, - 0xa831c66d2db43210, 0xb00327c898fb213f, 0xbf597fc7beef0ee4, 0xc6e00bf33da88fc2, 0xd5a79147930aa725, - 0x06ca6351e003826f, 0x142929670a0e6e70, 0x27b70a8546d22ffc, 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed, - 0x53380d139d95b3df, 0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, 0x92722c851482353b, - 0xa2bfe8a14cf10364, 0xa81a664bbc423001, 0xc24b8b70d0f89791, 0xc76c51a30654be30, 0xd192e819d6ef5218, - 0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8, 0x19a4c116b8d2d0c8, 0x1e376c085141ab53, - 0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8, 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, 0x5b9cca4f7763e373, - 0x682e6ff3d6b2b8a3, 0x748f82ee5defb2fc, 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec, - 0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, 0xc67178f2e372532b, 0xca273eceea26619c, - 0xd186b8c721c0c207, 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178, 0x06f067aa72176fba, 0x0a637dc5a2c898a6, - 0x113f9804bef90dae, 0x1b710b35131c471b, 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc, - 0x431d67c49c100d4c, 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, 0x5fcb6fab3ad6faec, 0x6c44198c4a475817}; + 0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, + 0xe9b5dba58189dbbc, 0x3956c25bf348b538, 0x59f111f1b605d019, + 0x923f82a4af194f9b, 0xab1c5ed5da6d8118, 0xd807aa98a3030242, + 0x12835b0145706fbe, 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2, + 0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235, + 0xc19bf174cf692694, 0xe49b69c19ef14ad2, 0xefbe4786384f25e3, + 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65, 0x2de92c6f592b0275, + 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5, + 0x983e5152ee66dfab, 0xa831c66d2db43210, 0xb00327c898fb213f, + 0xbf597fc7beef0ee4, 0xc6e00bf33da88fc2, 0xd5a79147930aa725, + 0x06ca6351e003826f, 0x142929670a0e6e70, 0x27b70a8546d22ffc, + 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed, 0x53380d139d95b3df, + 0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, + 0x92722c851482353b, 0xa2bfe8a14cf10364, 0xa81a664bbc423001, + 0xc24b8b70d0f89791, 0xc76c51a30654be30, 0xd192e819d6ef5218, + 0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8, + 0x19a4c116b8d2d0c8, 0x1e376c085141ab53, 0x2748774cdf8eeb99, + 0x34b0bcb5e19b48a8, 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, + 0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3, 0x748f82ee5defb2fc, + 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec, + 0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, + 0xc67178f2e372532b, 0xca273eceea26619c, 0xd186b8c721c0c207, + 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178, 0x06f067aa72176fba, + 0x0a637dc5a2c898a6, 0x113f9804bef90dae, 0x1b710b35131c471b, + 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc, + 0x431d67c49c100d4c, 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, + 0x5fcb6fab3ad6faec, 0x6c44198c4a475817}; #define ROTATE(x, y) (((x) >> (y)) | ((x) << (64 - (y)))) #define Sigma0(x) (ROTATE((x), 28) ^ ROTATE((x), 34) ^ ROTATE((x), 39)) @@ -28,103 +39,94 @@ static uint64_t const K512[] = { #define Ch(x, y, z) (((x) & (y)) ^ ((~(x)) & (z))) #define Maj(x, y, z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) -static inline uint64_t -B2U64(uint8_t val, uint8_t sh) +static inline uint64_t B2U64(uint8_t val, uint8_t sh) { - return ((uint64_t)val) << sh; + return ((uint64_t)val) << sh; } -void* -allocate(int sz) -{ - return malloc(sz); -} -void -deallocate(void* p) -{ - free(p); -} +void *allocate(int sz) { return malloc(sz); } +void deallocate(void *p) { free(p); } uint8_t e_data[32 * 1024]; -uint8_t* -sha512_process(uint8_t const* data, int32_t length) +uint8_t *sha512_process(uint8_t const *data, int32_t length) { - static uint64_t state[8] = {0, 0, 0, 0, 0, 0, 0, 0}; + static uint64_t state[8] = {0, 0, 0, 0, 0, 0, 0, 0}; - uint64_t a, b, c, d, e, f, g, h, s0, s1, T1, T2; - uint64_t X[16]; + uint64_t a, b, c, d, e, f, g, h, s0, s1, T1, T2; + uint64_t X[16]; - uint64_t blocks = length / 128; - while (blocks--) + uint64_t blocks = length / 128; + while (blocks--) + { + a = state[0]; + b = state[1]; + c = state[2]; + d = state[3]; + e = state[4]; + f = state[5]; + g = state[6]; + h = state[7]; + + unsigned i; + for (i = 0; i < 16; i++) { - a = state[0]; - b = state[1]; - c = state[2]; - d = state[3]; - e = state[4]; - f = state[5]; - g = state[6]; - h = state[7]; + X[i] = B2U64(data[0], 56) | B2U64(data[1], 48) | B2U64(data[2], 40) | + B2U64(data[3], 32) | B2U64(data[4], 24) | B2U64(data[5], 16) | + B2U64(data[6], 8) | B2U64(data[7], 0); + data += 8; - unsigned i; - for (i = 0; i < 16; i++) - { - X[i] = B2U64(data[0], 56) | B2U64(data[1], 48) | B2U64(data[2], 40) | B2U64(data[3], 32) | - B2U64(data[4], 24) | B2U64(data[5], 16) | B2U64(data[6], 8) | B2U64(data[7], 0); - data += 8; + T1 = h; + T1 += Sigma1(e); + T1 += Ch(e, f, g); + T1 += K512[i]; + T1 += X[i]; - T1 = h; - T1 += Sigma1(e); - T1 += Ch(e, f, g); - T1 += K512[i]; - T1 += X[i]; + T2 = Sigma0(a); + T2 += Maj(a, b, c); - T2 = Sigma0(a); - T2 += Maj(a, b, c); - - h = g; - g = f; - f = e; - e = d + T1; - d = c; - c = b; - b = a; - a = T1 + T2; - } - - for (i = 16; i < 80; i++) - { - s0 = X[(i + 1) & 0x0f]; - s0 = sigma0(s0); - s1 = X[(i + 14) & 0x0f]; - s1 = sigma1(s1); - - T1 = X[i & 0xf] += s0 + s1 + X[(i + 9) & 0xf]; - T1 += h + Sigma1(e) + Ch(e, f, g) + K512[i]; - T2 = Sigma0(a) + Maj(a, b, c); - - h = g; - g = f; - f = e; - e = d + T1; - d = c; - c = b; - b = a; - a = T1 + T2; - } - - state[0] += a; - state[1] += b; - state[2] += c; - state[3] += d; - state[4] += e; - state[5] += f; - state[6] += g; - state[7] += h; + h = g; + g = f; + f = e; + e = d + T1; + d = c; + c = b; + b = a; + a = T1 + T2; } - return (uint8_t*)(state); + for (i = 16; i < 80; i++) + { + s0 = X[(i + 1) & 0x0f]; + s0 = sigma0(s0); + s1 = X[(i + 14) & 0x0f]; + s1 = sigma1(s1); + + T1 = X[i & 0xf] += s0 + s1 + X[(i + 9) & 0xf]; + T1 += h + Sigma1(e) + Ch(e, f, g) + K512[i]; + T2 = Sigma0(a) + Maj(a, b, c); + + h = g; + g = f; + f = e; + e = d + T1; + d = c; + c = b; + b = a; + a = T1 + T2; + } + + state[0] += a; + state[1] += b; + state[2] += c; + state[3] += d; + state[4] += e; + state[5] += f; + state[6] += g; + state[7] += h; + } + + return (uint8_t *)(state); } // int main () diff --git a/src/xrpld/app/wasm/WasmiVM.h b/src/xrpld/app/wasm/WasmiVM.h index d4ea0bfaa9..9274375632 100644 --- a/src/xrpld/app/wasm/WasmiVM.h +++ b/src/xrpld/app/wasm/WasmiVM.h @@ -125,7 +125,8 @@ public: std::int64_t getGas() const; - std::int64_t setGas(std::int64_t) const; + std::int64_t + setGas(std::int64_t) const; }; struct ModuleWrapper diff --git a/src/xrpld/app/wasm/detail/WasmiVM.cpp b/src/xrpld/app/wasm/detail/WasmiVM.cpp index 6ef0315b97..bdf60ac7ec 100644 --- a/src/xrpld/app/wasm/detail/WasmiVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmiVM.cpp @@ -99,7 +99,8 @@ InstanceWrapper::operator=(InstanceWrapper&& o) return *this; } -InstanceWrapper::operator bool() const +InstanceWrapper:: +operator bool() const { return static_cast(instance_); } @@ -259,7 +260,8 @@ ModuleWrapper::operator=(ModuleWrapper&& o) return *this; } -ModuleWrapper::operator bool() const +ModuleWrapper:: +operator bool() const { return instanceWrap_; } From 1b4a564369e6b39defdc63004c5fba4cf73e47f6 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 18 Feb 2026 13:20:29 -0500 Subject: [PATCH 083/137] fix build issues --- src/test/app/TestHostFunctions.h | 4 ++-- src/xrpld/app/wasm/HostFuncImpl.h | 3 ++- src/xrpld/app/wasm/detail/HostFuncImplLedgerHeader.cpp | 4 ++-- src/xrpld/app/wasm/detail/HostFuncImplNFT.cpp | 2 +- src/xrpld/app/wasm/detail/HostFuncWrapper.cpp | 6 +++++- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index 68cf42b362..205c9cc1a0 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -1,13 +1,13 @@ #include #include -#include -#include #include #include +#include #include #include +#include namespace xrpl { diff --git a/src/xrpld/app/wasm/HostFuncImpl.h b/src/xrpld/app/wasm/HostFuncImpl.h index d8e080a8ef..1760be7c02 100644 --- a/src/xrpld/app/wasm/HostFuncImpl.h +++ b/src/xrpld/app/wasm/HostFuncImpl.h @@ -1,8 +1,9 @@ #pragma once -#include #include +#include + namespace xrpl { class WasmHostFunctionsImpl : public HostFunctions { diff --git a/src/xrpld/app/wasm/detail/HostFuncImplLedgerHeader.cpp b/src/xrpld/app/wasm/detail/HostFuncImplLedgerHeader.cpp index 57ef79e11a..37e2796bf6 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplLedgerHeader.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplLedgerHeader.cpp @@ -1,6 +1,6 @@ -#include #include +#include #include namespace xrpl { @@ -42,7 +42,7 @@ WasmHostFunctionsImpl::isAmendmentEnabled(uint256 const& amendmentId) Expected WasmHostFunctionsImpl::isAmendmentEnabled(std::string_view const& amendmentName) { - auto const& table = ctx.app.getAmendmentTable(); + auto const& table = ctx.registry.getAmendmentTable(); auto const amendment = table.find(std::string(amendmentName)); return ctx.view().rules().enabled(amendment); } diff --git a/src/xrpld/app/wasm/detail/HostFuncImplNFT.cpp b/src/xrpld/app/wasm/detail/HostFuncImplNFT.cpp index 7c4ee00406..298cd1f941 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplNFT.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplNFT.cpp @@ -1,8 +1,8 @@ -#include #include #include #include +#include namespace xrpl { diff --git a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp index 0d245c526c..bbe6003d63 100644 --- a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp @@ -1,9 +1,13 @@ -#include #include #include #include +#include +#include +#include #include +#include +#include #include namespace xrpl { From 0392846a174b2c524c86cad0aaa19e6e3df90d28 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Wed, 25 Feb 2026 11:49:27 -0500 Subject: [PATCH 084/137] UT for wasm parameters (#6413) --- src/test/app/Wasm_test.cpp | 54 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 1d8f165679..9850a9ceef 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -824,6 +824,8 @@ struct Wasm_test : public beast::unit_test::suite Env env(*this); std::shared_ptr hfs(new TestHostFunctions(env, 0)); + testcase("Wasm invalid return type"); + // return int64. { // (module // (memory (export "memory") 1) @@ -870,6 +872,57 @@ struct Wasm_test : public beast::unit_test::suite } } + void + testParameterType() + { + using namespace test::jtx; + Env env(*this); + std::shared_ptr hfs(new TestHostFunctions(env, 0)); + + testcase("Wasm invalid params"); + + // (module + // (memory (export "memory") 1) + // (func $test1 (export "test1") (param i32) (result i32) + // i32.const 1000) + // (func $test2 (export "test2") (param i32 i32) (result i32) + // i32.const 1001)) + auto const wasmHex = + "0061736d01000000010c0260017f017f60027f7f017f03030200010503010001071a03066d656d6f7279020005746573743100" + "0005746573743200010a0d02050041e8070b050041e9070b"; + auto const wasm = hexToBytes(wasmHex); + + // good params, module is working properly + { + auto const re = runEscrowWasm(wasm, hfs, "test2", wasmParams(2, 10), 100'000); + BEAST_EXPECT(re && re->result == 1001 && re->cost == 37); + } + + // no params + { + auto const re = runEscrowWasm(wasm, hfs, "test1", {}, 100'000); + BEAST_EXPECT(!re); + } + + // more params + { + auto const re = runEscrowWasm(wasm, hfs, "test1", wasmParams(0, 1), 100'000); + BEAST_EXPECT(!re); + } + + // less params + { + auto const re = runEscrowWasm(wasm, hfs, "test2", wasmParams(1), 100'000); + BEAST_EXPECT(!re); + } + + // invalid type + { + auto const re = runEscrowWasm(wasm, hfs, "test1", wasmParams(std::int64_t(15)), 100'000); + BEAST_EXPECT(!re); + } + } + void testSwapBytes() { @@ -1007,6 +1060,7 @@ struct Wasm_test : public beast::unit_test::suite testReturnType(); testSwapBytes(); testManyParams(); + testParameterType(); // perfTest(); } From 1d9ec843506146ec514d07d88ef729d5d9aa3b60 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Thu, 26 Feb 2026 09:59:30 -0500 Subject: [PATCH 085/137] Test invalid opcodes (#6392) --- src/test/app/Wasm_test.cpp | 520 ++++++++++++++++++ src/test/app/wasm_fixtures/fixtures.cpp | 6 + src/test/app/wasm_fixtures/fixtures.h | 2 + .../app/wasm_fixtures/wat/opc_reserved.wat | 98 ++++ 4 files changed, 626 insertions(+) create mode 100644 src/test/app/wasm_fixtures/wat/opc_reserved.wat diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 9850a9ceef..42ef5b3590 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -1026,6 +1026,524 @@ struct Wasm_test : public beast::unit_test::suite env.close(); } + template + std::size_t + uleb128(IT& it, std::uint16_t val) + { + std::size_t count = 0; + do + { + std::uint8_t byte = val & 0x7f; + val >>= 7; + if (val) + byte |= 0x80; + *it++ = byte; + ++count; + } while (val != 0); + return count; + } + + void + testOpcodes() + { + using namespace test::jtx; + + unsigned const RESERVED = 64; + std::uint8_t nop = 0x01; + std::array const codeMarker = { + nop, nop, nop, nop, nop, nop, nop, nop, nop, nop, nop, nop, nop, nop, nop, nop}; + auto const opcReserved = hexToBytes(opcReservedHex); + + Env env{*this}; + auto& engine = WasmEngine::instance(); + + std::shared_ptr hfs(new TestHostFunctions(env, 0)); + auto imports = createWasmImport(*hfs); + env.close(); + + { + auto run = [&](std::vector const& code, + bool good = false, + int64_t cost = -1, + std::source_location const location = std::source_location::current()) { + auto const lineStr = " (" + std::to_string(location.line()) + ")"; + auto re = engine.run(code, "all_instructions", {}, imports, hfs, 1'000'000, env.journal); + if (BEAST_EXPECTS(re.has_value() == good, transToken(re.error()) + lineStr) && good) + BEAST_EXPECTS(re->cost == cost, std::to_string(re->cost) + lineStr); + }; + + // 1 byte instruction + auto test = [&](std::uint8_t start, + std::uint8_t finish, + bool good = false, + int64_t cost = -1, + std::source_location const location = std::source_location::current()) { + auto const lineStr = " (" + std::to_string(location.line()) + ")"; + auto code = opcReserved; + auto codeRange = std::ranges::search(code, codeMarker); + if (!BEAST_EXPECTS(!codeRange.empty(), lineStr)) + return; + + auto it = codeRange.begin(); + for (std::uint16_t i = start; i <= finish; ++i) + { + *it = i; + run(code, good, cost, location); + } + }; + + // 2 bytes instruction + auto test2 = [&](std::uint8_t major, + std::uint16_t start, + std::uint16_t finish, + bool good = false, + int64_t cost = -1, + std::source_location const location = std::source_location::current()) { + auto const lineStr = " (" + std::to_string(location.line()) + ")"; + auto code = opcReserved; + auto codeRange = std::ranges::search(code, codeMarker); + if (!BEAST_EXPECTS(!codeRange.empty(), lineStr)) + return; + + auto it = codeRange.begin(); + *it++ = major; + for (std::uint16_t i = start; i <= finish; ++i) + { + auto it2 = it; + uleb128(it2, i); + run(code, good, cost, location); + } + }; + + // multibytes instructions + auto testMB = [&](std::vector const& codeSnap, + bool good = false, + int64_t cost = -1, + std::source_location const location = std::source_location::current()) { + auto const lineStr = " (" + std::to_string(location.line()) + ")"; + auto code = opcReserved; + auto codeRange = std::ranges::search(code, codeMarker); + if (!BEAST_EXPECTS(!codeRange.empty(), lineStr)) + return; + + if (!BEAST_EXPECTS(codeSnap.size() < RESERVED, lineStr)) + return; + auto it = codeRange.begin(); + for (auto x : codeSnap) + *it++ = x; + run(code, good, cost, location); + }; + + // normal run + testcase("Wasm reserved opcodes main"); + test(nop, nop, true, 534); + + // reserved main + test(0x06, 0x0A); + test(0x12, 0x19); + test(0x25, 0x27); + test(0xC0, 0xFA); + test(0xFF, 0xFF); + + // reserved gc, string + testcase("Wasm reserved opcodes gc"); + test2(0xFB, 0x00, 0xBF); // not supported by compiler + + // reserved FC + testcase("Wasm reserved opcodes FC"); + test2(0xFC, 0x00, 0x07); // floats, disabled + test2(0xFC, 0x12, 0x1F); + + // reserved SIMD + testcase("Wasm reserved opcodes SIMD"); + test2(0xFD, 0x9A, 0x9A); + test2(0xFD, 0xA2, 0xA2); + test2(0xFD, 0xA5, 0xA6); + test2(0xFD, 0xAF, 0xB0); + test2(0xFD, 0xB2, 0xB4); + test2(0xFD, 0xB8, 0xB8); + test2(0xFD, 0xC2, 0xC2); + test2(0xFD, 0xC5, 0xC6); + test2(0xFD, 0xCF, 0xD0); + test2(0xFD, 0xD2, 0xD4); + test2(0xFD, 0xE2, 0xE2); + test2(0xFD, 0xEE, 0xEE); + test2(0xFD, 0x115, 0x12F); + + testcase("Wasm opcodes THREADS"); + test2(0xFE, 0x00, 0x4F); // not supported by compiler + + // FC mem instructions + testMB({0x41, 0x00, 0x41, 0x00, 0x41, 0x04, 0xFC, 0x08, 0x00, 0x00}); // memory.init + testMB({0xFC, 0x09, 0x00}); // data.drop + testMB({0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0xFC, 0x0A, 0x00, 0x00}); // memory.copy + testMB({0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0xFC, 0x0B, 0x00}); // memory.fill + testMB({0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0xFC, 0x0C, 0x00, 0x00}); // table.init + testMB({0xFC, 0x0D, 0x00}); // elem.drop + testMB({0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0xFC, 0x0E, 0x00, 0x00}); // table.copy + testMB({0xD2, 0x00, 0x41, 0x00, 0xFC, 0x0F, 0x00, 0x1A}); // table.grow + testMB({0x1A, 0xFC, 0x10, 0x00, 0x1A}); // table.size + testMB({0x41, 0x00, 0xD2, 0x00, 0x41, 0x00, 0xFC, 0x11, 0x00}); // table.fill + + testcase("Wasm opcodes SIMD"); + // clang-format off + + // generated by auggie + // SIMD instructions + testMB({0x41, 0x00, 0xFD, 0x00, 0x04, 0x00, 0x1A}); // v128.load + testMB({0x41, 0x00, 0xFD, 0x01, 0x03, 0x00, 0x1A}); // v128.load8x8_s + testMB({0x41, 0x00, 0xFD, 0x02, 0x03, 0x00, 0x1A}); // v128.load8x8_u + testMB({0x41, 0x00, 0xFD, 0x03, 0x03, 0x00, 0x1A}); // v128.load16x4_s + testMB({0x41, 0x00, 0xFD, 0x04, 0x03, 0x00, 0x1A}); // v128.load16x4_u + testMB({0x41, 0x00, 0xFD, 0x05, 0x03, 0x00, 0x1A}); // v128.load32x2_s + testMB({0x41, 0x00, 0xFD, 0x06, 0x03, 0x00, 0x1A}); // v128.load32x2_u + testMB({0x41, 0x00, 0xFD, 0x07, 0x00, 0x00, 0x1A}); // v128.load8_splat + testMB({0x41, 0x00, 0xFD, 0x08, 0x01, 0x00, 0x1A}); // v128.load16_splat + testMB({0x41, 0x00, 0xFD, 0x09, 0x02, 0x00, 0x1A}); // v128.load32_splat + testMB({0x41, 0x00, 0xFD, 0x0A, 0x03, 0x00, 0x1A}); // v128.load64_splat + testMB({0x41, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0B, 0x04, 0x00}); // v128.store + testMB({0xFD, 0x0C, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1A}); // v128.const + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0D, 0x00, 0x01, 0x02, 0x03, + 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x1A}); // i8x16.shuffle + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0E, 0x1A}); // i8x16.swizzle + testMB({0x41, 0x2A, 0xFD, 0x0F, 0x1A}); // i8x16.splat + testMB({0x41, 0x2A, 0xFD, 0x10, 0x1A}); // i16x8.splat + testMB({0x41, 0x2A, 0xFD, 0x11, 0x1A}); // i32x4.splat + testMB({0x42, 0x2A, 0xFD, 0x12, 0x1A}); // i64x2.splat + + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x15, 0x00, 0x1A}); // i8x16.extract_lane_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x16, 0x00, 0x1A}); // i8x16.extract_lane_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x2A, 0xFD, 0x17, 0x00, 0x1A}); // i8x16.replace_lane + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x18, 0x00, 0x1A}); // i16x8.extract_lane_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x19, 0x00, 0x1A}); // i16x8.extract_lane_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x2A, 0xFD, 0x1A, 0x00, 0x1A}); // i16x8.replace_lane + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1B, 0x00, 0x1A}); // i32x4.extract_lane + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x2A, 0xFD, 0x1C, 0x00, 0x1A}); // i32x4.replace_lane + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1D, 0x00, 0x1A}); // i64x2.extract_lane + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x2A, 0xFD, 0x1E, 0x00, 0x1A}); // i64x2.replace_lane + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x1A}); // f32x4.extract_lane + testMB( + {0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x80, 0x3F, 0xFD, 0x20, 0x00, 0x1A}); // f32x4.replace_lane + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x21, 0x00, 0x1A}); // f64x2.extract_lane + testMB( + {0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x3F, 0xFD, 0x22, 0x00, 0x1A}); // f64x2.replace_lane + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x23, 0x1A}); // i8x16.eq + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x24, 0x1A}); // i8x16.ne + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x25, 0x1A}); // i8x16.lt_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x26, 0x1A}); // i8x16.lt_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x27, 0x1A}); // i8x16.gt_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x28, 0x1A}); // i8x16.gt_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x29, 0x1A}); // i8x16.le_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x2A, 0x1A}); // i8x16.le_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x2B, 0x1A}); // i8x16.ge_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x2C, 0x1A}); // i8x16.ge_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x2D, 0x1A}); // i16x8.eq + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x2E, 0x1A}); // i16x8.ne + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x2F, 0x1A}); // i16x8.lt_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x30, 0x1A}); // i16x8.lt_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x31, 0x1A}); // i16x8.gt_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x32, 0x1A}); // i16x8.gt_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x33, 0x1A}); // i16x8.le_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x34, 0x1A}); // i16x8.le_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x35, 0x1A}); // i16x8.ge_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x36, 0x1A}); // i16x8.ge_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x37, 0x1A}); // i32x4.eq + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x38, 0x1A}); // i32x4.ne + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x39, 0x1A}); // i32x4.lt_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x3A, 0x1A}); // i32x4.lt_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x3B, 0x1A}); // i32x4.gt_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x3C, 0x1A}); // i32x4.gt_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x3D, 0x1A}); // i32x4.le_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x3E, 0x1A}); // i32x4.le_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x3F, 0x1A}); // i32x4.ge_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x40, 0x1A}); // i32x4.ge_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x4D, 0x1A}); // v128.not + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x4E, 0x1A}); // v128.and + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x4F, 0x1A}); // v128.andnot + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x50, 0x1A}); // v128.or + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x51, 0x1A}); // v128.xor + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x52, 0x1A}); // v128.bitselect + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x53, 0x1A}); // v128.any_true + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x60, 0x1A}); // i8x16.abs + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x61, 0x1A}); // i8x16.neg + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x62, 0x1A}); // i8x16.popcnt + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x63, 0x1A}); // i8x16.all_true + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x64, 0x1A}); // i8x16.bitmask + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0xFD, 0x6B, 0x1A}); // i8x16.shl + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0xFD, 0x6C, 0x1A}); // i8x16.shr_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0xFD, 0x6D, 0x1A}); // i8x16.shr_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x6E, 0x1A}); // i8x16.add + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x6F, 0x1A}); // i8x16.add_sat_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x70, 0x1A}); // i8x16.add_sat_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x71, 0x1A}); // i8x16.sub + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x72, 0x1A}); // i8x16.sub_sat_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x73, 0x1A}); // i8x16.sub_sat_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x76, 0x1A}); // i8x16.min_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x77, 0x1A}); // i8x16.min_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x78, 0x1A}); // i8x16.max_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x79, 0x1A}); // i8x16.max_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x7B, 0x1A}); // i8x16.avgr_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x80, 0x01, 0x1A}); // i16x8.abs + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x81, 0x01, 0x1A}); // i16x8.neg + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x83, 0x01, 0x1A}); // i16x8.all_true + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x84, 0x01, 0x1A}); // i16x8.bitmask + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0xFD, 0x8B, 0x01, 0x1A}); // i16x8.shl + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0xFD, 0x8C, 0x01, 0x1A}); // i16x8.shr_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0xFD, 0x8D, 0x01, 0x1A}); // i16x8.shr_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x8E, 0x01, 0x1A}); // i16x8.add + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x8F, 0x01, 0x1A}); // i16x8.add_sat_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x90, 0x01, 0x1A}); // i16x8.add_sat_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x91, 0x01, 0x1A}); // i16x8.sub + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x92, 0x01, 0x1A}); // i16x8.sub_sat_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x93, 0x01, 0x1A}); // i16x8.sub_sat_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x95, 0x01, 0x1A}); // i16x8.mul + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x96, 0x01, 0x1A}); // i16x8.min_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x97, 0x01, 0x1A}); // i16x8.min_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x98, 0x01, 0x1A}); // i16x8.max_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x99, 0x01, 0x1A}); // i16x8.max_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x9B, 0x01, 0x1A}); // i16x8.avgr_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xA0, 0x01, 0x1A}); // i32x4.abs + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xA1, 0x01, 0x1A}); // i32x4.neg + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xA3, 0x01, 0x1A}); // i32x4.all_true + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xA4, 0x01, 0x1A}); // i32x4.bitmask + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0xFD, 0xAB, 0x01, 0x1A}); // i32x4.shl + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0xFD, 0xAC, 0x01, 0x1A}); // i32x4.shr_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0xFD, 0xAD, 0x01, 0x1A}); // i32x4.shr_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xAE, 0x01, 0x1A}); // i32x4.add + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xB1, 0x01, 0x1A}); // i32x4.sub + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xB5, 0x01, 0x1A}); // i32x4.mul + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xB6, 0x01, 0x1A}); // i32x4.min_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xB7, 0x01, 0x1A}); // i32x4.min_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xB8, 0x01, 0x1A}); // i32x4.max_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xB9, 0x01, 0x1A}); // i32x4.max_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xBA, 0x01, 0x1A}); // i32x4.dot_i16x8_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xC0, 0x01, 0x1A}); // i64x2.abs + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xC1, 0x01, 0x1A}); // i64x2.neg + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xC3, 0x01, 0x1A}); // i64x2.all_true + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xC4, 0x01, 0x1A}); // i64x2.bitmask + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0xFD, 0xCB, 0x01, 0x1A}); // i64x2.shl + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0xFD, 0xCC, 0x01, 0x1A}); // i64x2.shr_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0xFD, 0xCD, 0x01, 0x1A}); // i64x2.shr_u + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xCE, 0x01, 0x1A}); // i64x2.add + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xD1, 0x01, 0x1A}); // i64x2.sub + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xD5, 0x01, 0x1A}); // i64x2.mul + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xD6, 0x01, 0x1A}); // i64x2.eq + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xD7, 0x01, 0x1A}); // i64x2.ne + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xD8, 0x01, 0x1A}); // i64x2.lt_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xD9, 0x01, 0x1A}); // i64x2.gt_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xDA, 0x01, 0x1A}); // i64x2.le_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xDB, 0x01, 0x1A}); // i64x2.ge_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xF8, 0x01, 0x1A}); // i32x4.trunc_sat_f32x4_s + testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xF9, 0x01, 0x1A}); // i32x4.trunc_sat_f32x4_u + + // clang-format on + } + } + void run() override { @@ -1062,6 +1580,8 @@ struct Wasm_test : public beast::unit_test::suite testManyParams(); testParameterType(); + testOpcodes(); + // perfTest(); } }; diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 2767becda0..7721482495 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -5105,3 +5105,9 @@ extern std::string const functions5kHex = "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" "6a0b0700200020016a0b0700200020016a0b0700200020016a0b"; + +extern std::string const opcReservedHex = + "0061736d010000000105016000017f03030200000404017000010503010001060b027f0141000b7e0142000b07140110616c6c5f696e737472" + "756374696f6e7300010907010041000b01000a53020400412a0b4c02017f017e01010101010101010101010101010101010101010101010101" + "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101410b0b0b0a010041000b04746573" + "74"; diff --git a/src/test/app/wasm_fixtures/fixtures.h b/src/test/app/wasm_fixtures/fixtures.h index b453446a4c..5c71698d67 100644 --- a/src/test/app/wasm_fixtures/fixtures.h +++ b/src/test/app/wasm_fixtures/fixtures.h @@ -90,3 +90,5 @@ extern std::string const thousandParamsHex; extern std::string const thousand1ParamsHex; extern std::string const locals10kHex; extern std::string const functions5kHex; + +extern std::string const opcReservedHex; diff --git a/src/test/app/wasm_fixtures/wat/opc_reserved.wat b/src/test/app/wasm_fixtures/wat/opc_reserved.wat new file mode 100644 index 0000000000..0bc61b52c3 --- /dev/null +++ b/src/test/app/wasm_fixtures/wat/opc_reserved.wat @@ -0,0 +1,98 @@ +(module + + ;; Type for call_indirect + (type (func (result i32))) + + ;; Memory and table declarations + (memory 1) + (table 1 funcref) + (data (i32.const 0) "test") + (elem (i32.const 0) $test_func) + + ;; Global declarations + (global $g0 (mut i32) (i32.const 0)) + (global $g1 (mut i64) (i64.const 0)) + + ;; Test function for call/call_indirect + (func $test_func (result i32) + i32.const 42 + ) + + + ;; Main function with all instructions in hex order + (func $all_instructions (export "all_instructions") (result i32) + (local $l0 i32) + (local $l1 i64) + + ;; 0x01: nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + i32.const 11 + ) +) From 953b9a35005aaa6321c4176064d51e281ee119ee Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Thu, 26 Feb 2026 15:30:46 -0500 Subject: [PATCH 086/137] Disable reusing wasm module (#6364) * Remove ability to re-use wasm module * Check that HFS object is always new * Fix clang format * Remove perf tests * temp build fix * Fix merge --- src/test/app/TestHostFunctions.h | 832 ++---------------- src/test/app/Wasm_test.cpp | 338 ++----- src/test/app/wasm_fixtures/b58.c | 69 -- src/test/app/wasm_fixtures/bad_alloc.c | 25 - src/test/app/wasm_fixtures/fixtures.cpp | 146 --- src/test/app/wasm_fixtures/fixtures.h | 19 +- src/test/app/wasm_fixtures/sha512Pure.c | 135 --- src/xrpld/app/wasm/HostFunc.h | 142 ++- src/xrpld/app/wasm/HostFuncImpl.h | 163 ++-- src/xrpld/app/wasm/ParamsHelper.h | 46 - src/xrpld/app/wasm/WasmVM.h | 16 +- src/xrpld/app/wasm/WasmiVM.h | 47 +- src/xrpld/app/wasm/detail/HostFuncImpl.cpp | 4 +- .../app/wasm/detail/HostFuncImplFloat.cpp | 22 +- .../app/wasm/detail/HostFuncImplGetter.cpp | 46 +- .../app/wasm/detail/HostFuncImplKeylet.cpp | 37 +- .../wasm/detail/HostFuncImplLedgerHeader.cpp | 26 +- src/xrpld/app/wasm/detail/HostFuncImplNFT.cpp | 14 +- .../app/wasm/detail/HostFuncImplTrace.cpp | 10 +- src/xrpld/app/wasm/detail/WasmVM.cpp | 36 +- src/xrpld/app/wasm/detail/WasmiVM.cpp | 126 +-- 21 files changed, 443 insertions(+), 1856 deletions(-) delete mode 100644 src/test/app/wasm_fixtures/b58.c delete mode 100644 src/test/app/wasm_fixtures/bad_alloc.c delete mode 100644 src/test/app/wasm_fixtures/sha512Pure.c diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index 205c9cc1a0..6de86988cc 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -36,7 +36,7 @@ public: } Expected - getLedgerSqn() override + getLedgerSqn() const override { return env_.current()->seq(); } @@ -71,37 +71,37 @@ public: } Expected - getLedgerSqn() override + getLedgerSqn() const override { return 12345; } Expected - getParentLedgerTime() override + getParentLedgerTime() const override { return 67890; } Expected - getParentLedgerHash() override + getParentLedgerHash() const override { return env_.current()->header().parentHash; } Expected - getBaseFee() override + getBaseFee() const override { return 10; } Expected - isAmendmentEnabled(uint256 const& amendmentId) override + isAmendmentEnabled(uint256 const& amendmentId) const override { return 1; } Expected - isAmendmentEnabled(std::string_view const& amendmentName) override + isAmendmentEnabled(std::string_view const& amendmentName) const override { return 1; } @@ -113,7 +113,7 @@ public: } Expected - getTxField(SField const& fname) override + getTxField(SField const& fname) const override { if (fname == sfAccount) return Bytes(accountID_.begin(), accountID_.end()); @@ -137,7 +137,7 @@ public: } Expected - getCurrentLedgerObjField(SField const& fname) override + getCurrentLedgerObjField(SField const& fname) const override { auto const& sn = fname.getName(); if (sn == "Destination" || sn == "Account") @@ -155,7 +155,7 @@ public: } Expected - getLedgerObjField(int32_t cacheIdx, SField const& fname) override + getLedgerObjField(int32_t cacheIdx, SField const& fname) const override { if (fname == sfBalance) { @@ -171,7 +171,7 @@ public: } Expected - getTxNestedField(Slice const& locator) override + getTxNestedField(Slice const& locator) const override { if (locator.size() == 4) { @@ -189,7 +189,7 @@ public: } Expected - getCurrentLedgerObjNestedField(Slice const& locator) override + getCurrentLedgerObjNestedField(Slice const& locator) const override { if (locator.size() == 4) { @@ -207,7 +207,7 @@ public: } Expected - getLedgerObjNestedField(int32_t cacheIdx, Slice const& locator) override + getLedgerObjNestedField(int32_t cacheIdx, Slice const& locator) const override { if (locator.size() == 4) { @@ -225,37 +225,37 @@ public: } Expected - getTxArrayLen(SField const& fname) override + getTxArrayLen(SField const& fname) const override { return 32; } Expected - getCurrentLedgerObjArrayLen(SField const& fname) override + getCurrentLedgerObjArrayLen(SField const& fname) const override { return 32; } Expected - getLedgerObjArrayLen(int32_t cacheIdx, SField const& fname) override + getLedgerObjArrayLen(int32_t cacheIdx, SField const& fname) const override { return 32; } Expected - getTxNestedArrayLen(Slice const& locator) override + getTxNestedArrayLen(Slice const& locator) const override { return 32; } Expected - getCurrentLedgerObjNestedArrayLen(Slice const& locator) override + getCurrentLedgerObjNestedArrayLen(Slice const& locator) const override { return 32; } Expected - getLedgerObjNestedArrayLen(int32_t cacheIdx, Slice const& locator) override + getLedgerObjNestedArrayLen(int32_t cacheIdx, Slice const& locator) const override { return 32; } @@ -267,19 +267,19 @@ public: } Expected - checkSignature(Slice const& message, Slice const& signature, Slice const& pubkey) override + checkSignature(Slice const& message, Slice const& signature, Slice const& pubkey) const override { return 1; } Expected - computeSha512HalfHash(Slice const& data) override + computeSha512HalfHash(Slice const& data) const override { return env_.current()->header().parentHash; } Expected - accountKeylet(AccountID const& account) override + accountKeylet(AccountID const& account) const override { if (!account) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -288,7 +288,7 @@ public: } Expected - ammKeylet(Asset const& issue1, Asset const& issue2) override + ammKeylet(Asset const& issue1, Asset const& issue2) const override { if (issue1 == issue2) return Unexpected(HostFunctionError::INVALID_PARAMS); @@ -299,7 +299,7 @@ public: } Expected - checkKeylet(AccountID const& account, std::uint32_t seq) override + checkKeylet(AccountID const& account, std::uint32_t seq) const override { if (!account) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -308,7 +308,7 @@ public: } Expected - credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) override + credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) const override { if (!subject || !issuer || credentialType.empty() || credentialType.size() > maxCredentialTypeLength) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -317,7 +317,7 @@ public: } Expected - escrowKeylet(AccountID const& account, std::uint32_t seq) override + escrowKeylet(AccountID const& account, std::uint32_t seq) const override { if (!account) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -326,7 +326,7 @@ public: } Expected - oracleKeylet(AccountID const& account, std::uint32_t documentId) override + oracleKeylet(AccountID const& account, std::uint32_t documentId) const override { if (!account) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -335,7 +335,7 @@ public: } Expected - getNFT(AccountID const& account, uint256 const& nftId) override + getNFT(AccountID const& account, uint256 const& nftId) const override { if (!account || !nftId) { @@ -347,38 +347,38 @@ public: } Expected - getNFTIssuer(uint256 const& nftId) override + getNFTIssuer(uint256 const& nftId) const override { return Bytes(accountID_.begin(), accountID_.end()); } Expected - getNFTTaxon(uint256 const& nftId) override + getNFTTaxon(uint256 const& nftId) const override { return 4; } Expected - getNFTFlags(uint256 const& nftId) override + getNFTFlags(uint256 const& nftId) const override { return 8; } Expected - getNFTTransferFee(uint256 const& nftId) override + getNFTTransferFee(uint256 const& nftId) const override { return 10; } Expected - getNFTSerial(uint256 const& nftId) override + getNFTSerial(uint256 const& nftId) const override { return 4; } template void - log(std::string_view const& msg, F&& dataFn) + log(std::string_view const& msg, F&& dataFn) const { #ifdef DEBUG_OUTPUT auto& j = std::cerr; @@ -395,7 +395,7 @@ public: } Expected - trace(std::string_view const& msg, Slice const& data, bool asHex) override + trace(std::string_view const& msg, Slice const& data, bool asHex) const override { if (!asHex) { @@ -415,95 +415,95 @@ public: } Expected - traceNum(std::string_view const& msg, int64_t data) override + traceNum(std::string_view const& msg, int64_t data) const override { log(msg, [data] { return data; }); return 0; } Expected - traceAccount(std::string_view const& msg, AccountID const& account) override + traceAccount(std::string_view const& msg, AccountID const& account) const override { log(msg, [&account] { return toBase58(account); }); return 0; } Expected - traceFloat(std::string_view const& msg, Slice const& data) override + traceFloat(std::string_view const& msg, Slice const& data) const override { log(msg, [&data] { return wasm_float::floatToString(data); }); return 0; } Expected - traceAmount(std::string_view const& msg, STAmount const& amount) override + traceAmount(std::string_view const& msg, STAmount const& amount) const override { log(msg, [&amount] { return amount.getFullText(); }); return 0; } Expected - floatFromInt(int64_t x, int32_t mode) override + floatFromInt(int64_t x, int32_t mode) const override { return wasm_float::floatFromIntImpl(x, mode); } Expected - floatFromUint(uint64_t x, int32_t mode) override + floatFromUint(uint64_t x, int32_t mode) const override { return wasm_float::floatFromUintImpl(x, mode); } Expected - floatSet(int64_t mantissa, int32_t exponent, int32_t mode) override + floatSet(int64_t mantissa, int32_t exponent, int32_t mode) const override { return wasm_float::floatSetImpl(mantissa, exponent, mode); } Expected - floatCompare(Slice const& x, Slice const& y) override + floatCompare(Slice const& x, Slice const& y) const override { return wasm_float::floatCompareImpl(x, y); } Expected - floatAdd(Slice const& x, Slice const& y, int32_t mode) override + floatAdd(Slice const& x, Slice const& y, int32_t mode) const override { return wasm_float::floatAddImpl(x, y, mode); } Expected - floatSubtract(Slice const& x, Slice const& y, int32_t mode) override + floatSubtract(Slice const& x, Slice const& y, int32_t mode) const override { return wasm_float::floatSubtractImpl(x, y, mode); } Expected - floatMultiply(Slice const& x, Slice const& y, int32_t mode) override + floatMultiply(Slice const& x, Slice const& y, int32_t mode) const override { return wasm_float::floatMultiplyImpl(x, y, mode); } Expected - floatDivide(Slice const& x, Slice const& y, int32_t mode) override + floatDivide(Slice const& x, Slice const& y, int32_t mode) const override { return wasm_float::floatDivideImpl(x, y, mode); } Expected - floatRoot(Slice const& x, int32_t n, int32_t mode) override + floatRoot(Slice const& x, int32_t n, int32_t mode) const override { return wasm_float::floatRootImpl(x, n, mode); } Expected - floatPower(Slice const& x, int32_t n, int32_t mode) override + floatPower(Slice const& x, int32_t n, int32_t mode) const override { return wasm_float::floatPowerImpl(x, n, mode); } Expected - floatLog(Slice const& x, int32_t mode) override + floatLog(Slice const& x, int32_t mode) const override { return wasm_float::floatLogImpl(x, mode); } @@ -528,737 +528,5 @@ public: } }; -struct PerfHostFunctions : public TestHostFunctions -{ - Keylet leKey; - std::shared_ptr currentLedgerObj = nullptr; - bool isLedgerObjCached = false; - - static int constexpr MAX_CACHE = 256; - std::array, MAX_CACHE> cache; - // std::optional data_; // deferred data update, not used in - // performance - std::shared_ptr tx_; - - void const* rt_ = nullptr; - - PerfHostFunctions(test::jtx::Env& env, Keylet const& k, std::shared_ptr&& tx) - : TestHostFunctions(env), leKey(k), tx_(std::move(tx)) - { - } - - Expected - getLedgerSqn() override - { - return env_.current()->seq(); - } - - Expected - getParentLedgerTime() override - { - return env_.current()->parentCloseTime().time_since_epoch().count(); - } - - Expected - getParentLedgerHash() override - { - return env_.current()->header().parentHash; - } - - Expected - getBaseFee() override - { - return env_.current()->fees().base.drops(); - } - - Expected - isAmendmentEnabled(uint256 const& amendmentId) override - { - return env_.current()->rules().enabled(amendmentId); - } - - Expected - isAmendmentEnabled(std::string_view const& amendmentName) override - { - auto const& table = env_.app().getAmendmentTable(); - auto const amendment = table.find(std::string(amendmentName)); - return env_.current()->rules().enabled(amendment); - } - - Expected, HostFunctionError> - getCurrentLedgerObj() - { - if (!isLedgerObjCached) - { - isLedgerObjCached = true; - currentLedgerObj = env_.le(leKey); - } - if (currentLedgerObj) - return currentLedgerObj; - return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); - } - - Expected, HostFunctionError> - peekCurrentLedgerObj(int32_t cacheIdx) - { - --cacheIdx; - if (cacheIdx < 0 || cacheIdx >= MAX_CACHE) - return Unexpected(HostFunctionError::SLOT_OUT_RANGE); - - if (!cache[cacheIdx]) - { // return Unexpected(HostFunctionError::INVALID_SLOT); - auto const r = getCurrentLedgerObj(); - if (!r) - return Unexpected(r.error()); - cache[cacheIdx] = *r; - } - - return cache[cacheIdx]; - } - - Expected - normalizeCacheIndex(int32_t cacheIdx) - { - --cacheIdx; - if (cacheIdx < 0 || cacheIdx >= MAX_CACHE) - return Unexpected(HostFunctionError::SLOT_OUT_RANGE); - if (!cache[cacheIdx]) - return Unexpected(HostFunctionError::EMPTY_SLOT); - return cacheIdx; - } - - virtual Expected - cacheLedgerObj(uint256 const&, int32_t cacheIdx) override - { - // auto const& keylet = keylet::unchecked(objId); - - static int32_t intIdx = 0; - - if (cacheIdx < 0 || cacheIdx > MAX_CACHE) - return Unexpected(HostFunctionError::SLOT_OUT_RANGE); - - if (!cacheIdx) - { - for (cacheIdx = 0; cacheIdx < MAX_CACHE; ++cacheIdx) - if (!cache[cacheIdx]) - break; - if (cacheIdx >= MAX_CACHE) - cacheIdx = intIdx++ % MAX_CACHE; - } - else - --cacheIdx; - - if (cacheIdx >= MAX_CACHE) - return Unexpected(HostFunctionError::SLOTS_FULL); - - cache[cacheIdx] = env_.le(leKey); - if (!cache[cacheIdx]) - return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); - return cacheIdx + 1; - } - - static Expected - getAnyFieldData(STBase const* obj) - { - // auto const& fname = obj.getFName(); - if (!obj) - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); - - auto const stype = obj->getSType(); - switch (stype) - { - // LCOV_EXCL_START - case STI_UNKNOWN: - case STI_NOTPRESENT: - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); - break; - // LCOV_EXCL_STOP - case STI_OBJECT: - case STI_ARRAY: - return Unexpected(HostFunctionError::NOT_LEAF_FIELD); - break; - case STI_ACCOUNT: { - auto const* account(static_cast(obj)); - auto const& data = account->value(); - return Bytes{data.begin(), data.end()}; - } - break; - case STI_AMOUNT: - // will be processed by serializer - break; - case STI_ISSUE: { - auto const* issue(static_cast(obj)); - Asset const& asset(issue->value()); - // XRP and IOU will be processed by serializer - if (asset.holds()) - { - // MPT - auto const& mptIssue = asset.get(); - auto const& mptID = mptIssue.getMptID(); - return Bytes{mptID.cbegin(), mptID.cend()}; - } - } - break; - case STI_VL: { - auto const* vl(static_cast(obj)); - auto const& data = vl->value(); - return Bytes{data.begin(), data.end()}; - } - break; - case STI_UINT16: { - auto const& num(static_cast const*>(obj)); - std::uint16_t const data = num->value(); - auto const* b = reinterpret_cast(&data); - auto const* e = reinterpret_cast(&data + 1); - return Bytes{b, e}; - } - case STI_UINT32: { - auto const* num(static_cast const*>(obj)); - std::uint32_t const data = num->value(); - auto const* b = reinterpret_cast(&data); - auto const* e = reinterpret_cast(&data + 1); - return Bytes{b, e}; - } - break; - default: - break; // default to serializer - } - - Serializer msg; - obj->add(msg); - auto const data = msg.getData(); - - return data; - } - - Expected - getTxField(SField const& fname) override - { - return getAnyFieldData(tx_->peekAtPField(fname)); - } - - Expected - getCurrentLedgerObjField(SField const& fname) override - { - auto const sle = getCurrentLedgerObj(); - if (!sle) - return Unexpected(sle.error()); - return getAnyFieldData((*sle)->peekAtPField(fname)); - } - - Expected - getLedgerObjField(int32_t cacheIdx, SField const& fname) override - { - auto const sle = peekCurrentLedgerObj(cacheIdx); - if (!sle) - return Unexpected(sle.error()); - return getAnyFieldData((*sle)->peekAtPField(fname)); - } - - static inline bool - noField(STBase const* field) - { - return !field || (STI_NOTPRESENT == field->getSType()) || (STI_UNKNOWN == field->getSType()); - } - - static Expected - locateField(STObject const& obj, Slice const& locator) - { - if (locator.empty() || (locator.size() & 3)) // must be multiple of 4 - return Unexpected(HostFunctionError::LOCATOR_MALFORMED); - - int32_t const* locPtr = reinterpret_cast(locator.data()); - int32_t const locSize = locator.size() / 4; - STBase const* field = nullptr; - auto const& knownSFields = SField::getKnownCodeToField(); - - { - int32_t const sfieldCode = locPtr[0]; - auto const it = knownSFields.find(sfieldCode); - if (it == knownSFields.end()) - return Unexpected(HostFunctionError::INVALID_FIELD); - - auto const& fname(*it->second); - field = obj.peekAtPField(fname); - if (noField(field)) - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); - } - - for (int i = 1; i < locSize; ++i) - { - int32_t const sfieldCode = locPtr[i]; - - if (STI_ARRAY == field->getSType()) - { - auto const* arr = static_cast(field); - if (sfieldCode >= arr->size()) - return Unexpected(HostFunctionError::INDEX_OUT_OF_BOUNDS); - field = &(arr->operator[](sfieldCode)); - } - else if (STI_OBJECT == field->getSType()) - { - auto const* o = static_cast(field); - - auto const it = knownSFields.find(sfieldCode); - if (it == knownSFields.end()) - return Unexpected(HostFunctionError::INVALID_FIELD); - - auto const& fname(*it->second); - field = o->peekAtPField(fname); - } - else // simple field must be the last one - { - return Unexpected(HostFunctionError::LOCATOR_MALFORMED); - } - - if (noField(field)) - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); - } - - return field; - } - - Expected - getTxNestedField(Slice const& locator) override - { - // std::cout << tx_->getJson(JsonOptions::none).toStyledString() << - // std::endl; - auto const r = locateField(*tx_, locator); - if (!r) - return Unexpected(r.error()); - return getAnyFieldData(*r); - } - - Expected - getCurrentLedgerObjNestedField(Slice const& locator) override - { - auto const sle = getCurrentLedgerObj(); - if (!sle) - return Unexpected(sle.error()); - - auto const r = locateField(**sle, locator); - if (!r) - return Unexpected(r.error()); - - return getAnyFieldData(*r); - } - - Expected - getLedgerObjNestedField(int32_t cacheIdx, Slice const& locator) override - { - auto const sle = peekCurrentLedgerObj(cacheIdx); - if (!sle) - return Unexpected(sle.error()); - - auto const r = locateField(**sle, locator); - if (!r) - return Unexpected(r.error()); - - return getAnyFieldData(*r); - } - - Expected - getTxArrayLen(SField const& fname) override - { - if (fname.fieldType != STI_ARRAY) - return Unexpected(HostFunctionError::NO_ARRAY); - - auto const* field = tx_->peekAtPField(fname); - if (noField(field)) - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); - - if (field->getSType() != STI_ARRAY) - return Unexpected(HostFunctionError::NO_ARRAY); - int32_t const sz = static_cast(field)->size(); - - return sz; - } - - Expected - getCurrentLedgerObjArrayLen(SField const& fname) override - { - if (fname.fieldType != STI_ARRAY) - return Unexpected(HostFunctionError::NO_ARRAY); - - auto const sle = getCurrentLedgerObj(); - if (!sle) - return Unexpected(sle.error()); - - auto const* field = (*sle)->peekAtPField(fname); - if (noField(field)) - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); - - if (field->getSType() != STI_ARRAY) - return Unexpected(HostFunctionError::NO_ARRAY); - int32_t const sz = static_cast(field)->size(); - - return sz; - } - - Expected - getLedgerObjArrayLen(int32_t cacheIdx, SField const& fname) override - { - if (fname.fieldType != STI_ARRAY) - return Unexpected(HostFunctionError::NO_ARRAY); - - auto const sle = peekCurrentLedgerObj(cacheIdx); - if (!sle) - return Unexpected(sle.error()); - - auto const* field = (*sle)->peekAtPField(fname); - if (noField(field)) - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); - - if (field->getSType() != STI_ARRAY) - return Unexpected(HostFunctionError::NO_ARRAY); - int32_t const sz = static_cast(field)->size(); - - return sz; - } - - Expected - getTxNestedArrayLen(Slice const& locator) override - { - auto const r = locateField(*tx_, locator); - if (!r) - return Unexpected(r.error()); - auto const* field = r.value(); - - if (field->getSType() != STI_ARRAY) - return Unexpected(HostFunctionError::NO_ARRAY); - int32_t const sz = static_cast(field)->size(); - - return sz; - } - - Expected - getCurrentLedgerObjNestedArrayLen(Slice const& locator) override - { - auto const sle = getCurrentLedgerObj(); - if (!sle) - return Unexpected(sle.error()); - - auto const r = locateField(**sle, locator); - if (!r) - return Unexpected(r.error()); - auto const* field = r.value(); - - if (field->getSType() != STI_ARRAY) - return Unexpected(HostFunctionError::NO_ARRAY); - int32_t const sz = static_cast(field)->size(); - - return sz; - } - - Expected - getLedgerObjNestedArrayLen(int32_t cacheIdx, Slice const& locator) override - { - auto const sle = peekCurrentLedgerObj(cacheIdx); - if (!sle) - return Unexpected(sle.error()); - - auto const r = locateField(**sle, locator); - if (!r) - return Unexpected(r.error()); - - auto const* field = r.value(); - - if (field->getSType() != STI_ARRAY) - return Unexpected(HostFunctionError::NO_ARRAY); - int32_t const sz = static_cast(field)->size(); - - return sz; - } - - Expected - updateData(Slice const& data) override - { - if (data.size() > maxWasmDataLength) - return Unexpected(HostFunctionError::DATA_FIELD_TOO_LARGE); - - xrpl::detail::ApplyViewBase v(env_.app().openLedger().current().get(), tapNONE); - - auto sle = v.peek(leKey); - if (!sle) - return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); - - sle->setFieldVL(sfData, data); - v.update(sle); - - return data.size(); - } - - Expected - checkSignature(Slice const& message, Slice const& signature, Slice const& pubkey) override - { - if (!publicKeyType(pubkey)) - return Unexpected(HostFunctionError::INVALID_PARAMS); - - PublicKey const pk(pubkey); - return verify(pk, message, signature); - } - - Expected - computeSha512HalfHash(Slice const& data) override - { - auto const hash = sha512Half(data); - return hash; - } - - Expected - accountKeylet(AccountID const& account) override - { - if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - auto const keylet = keylet::account(account); - return Bytes{keylet.key.begin(), keylet.key.end()}; - } - - Expected - ammKeylet(Asset const& issue1, Asset const& issue2) override - { - if (issue1 == issue2) - return Unexpected(HostFunctionError::INVALID_PARAMS); - - // note: this should be removed with the MPT DEX amendment - if (issue1.holds() || issue2.holds()) - return Unexpected(HostFunctionError::INVALID_PARAMS); - - auto const keylet = keylet::amm(issue1, issue2); - return Bytes{keylet.key.begin(), keylet.key.end()}; - } - - Expected - checkKeylet(AccountID const& account, std::uint32_t seq) override - { - if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - auto const keylet = keylet::check(account, seq); - return Bytes{keylet.key.begin(), keylet.key.end()}; - } - - Expected - credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) override - { - if (!subject || !issuer) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - - if (credentialType.empty() || credentialType.size() > maxCredentialTypeLength) - return Unexpected(HostFunctionError::INVALID_PARAMS); - - auto const keylet = keylet::credential(subject, issuer, credentialType); - - return Bytes{keylet.key.begin(), keylet.key.end()}; - } - - Expected - didKeylet(AccountID const& account) override - { - if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - auto const keylet = keylet::did(account); - return Bytes{keylet.key.begin(), keylet.key.end()}; - } - - Expected - delegateKeylet(AccountID const& account, AccountID const& authorize) override - { - if (!account || !authorize) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - if (account == authorize) - return Unexpected(HostFunctionError::INVALID_PARAMS); - auto const keylet = keylet::delegate(account, authorize); - return Bytes{keylet.key.begin(), keylet.key.end()}; - } - - Expected - depositPreauthKeylet(AccountID const& account, AccountID const& authorize) override - { - if (!account || !authorize) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - if (account == authorize) - return Unexpected(HostFunctionError::INVALID_PARAMS); - auto const keylet = keylet::depositPreauth(account, authorize); - return Bytes{keylet.key.begin(), keylet.key.end()}; - } - - Expected - escrowKeylet(AccountID const& account, std::uint32_t seq) override - { - if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - auto const keylet = keylet::escrow(account, seq); - return Bytes{keylet.key.begin(), keylet.key.end()}; - } - - Expected - lineKeylet(AccountID const& account1, AccountID const& account2, Currency const& currency) override - { - if (!account1 || !account2) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - if (account1 == account2) - return Unexpected(HostFunctionError::INVALID_PARAMS); - if (currency.isZero()) - return Unexpected(HostFunctionError::INVALID_PARAMS); - - auto const keylet = keylet::line(account1, account2, currency); - return Bytes{keylet.key.begin(), keylet.key.end()}; - } - - Expected - mptIssuanceKeylet(AccountID const& issuer, std::uint32_t seq) override - { - if (!issuer) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - - auto const keylet = keylet::mptIssuance(seq, issuer); - return Bytes{keylet.key.begin(), keylet.key.end()}; - } - - Expected - mptokenKeylet(MPTID const& mptid, AccountID const& holder) override - { - if (!mptid) - return Unexpected(HostFunctionError::INVALID_PARAMS); - if (!holder) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - - auto const keylet = keylet::mptoken(mptid, holder); - return Bytes{keylet.key.begin(), keylet.key.end()}; - } - - Expected - nftOfferKeylet(AccountID const& account, std::uint32_t seq) override - { - if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - auto const keylet = keylet::nftoffer(account, seq); - return Bytes{keylet.key.begin(), keylet.key.end()}; - } - - Expected - offerKeylet(AccountID const& account, std::uint32_t seq) override - { - if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - auto const keylet = keylet::offer(account, seq); - return Bytes{keylet.key.begin(), keylet.key.end()}; - } - - Expected - oracleKeylet(AccountID const& account, std::uint32_t documentId) override - { - if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - auto const keylet = keylet::oracle(account, documentId); - return Bytes{keylet.key.begin(), keylet.key.end()}; - } - - Expected - paychanKeylet(AccountID const& account, AccountID const& destination, std::uint32_t seq) override - { - if (!account || !destination) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - if (account == destination) - return Unexpected(HostFunctionError::INVALID_PARAMS); - auto const keylet = keylet::payChan(account, destination, seq); - return Bytes{keylet.key.begin(), keylet.key.end()}; - } - - Expected - permissionedDomainKeylet(AccountID const& account, std::uint32_t seq) override - { - if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - auto const keylet = keylet::permissionedDomain(account, seq); - return Bytes{keylet.key.begin(), keylet.key.end()}; - } - - Expected - signersKeylet(AccountID const& account) override - { - if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - auto const keylet = keylet::signers(account); - return Bytes{keylet.key.begin(), keylet.key.end()}; - } - - Expected - ticketKeylet(AccountID const& account, std::uint32_t seq) override - { - if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - auto const keylet = keylet::ticket(account, seq); - return Bytes{keylet.key.begin(), keylet.key.end()}; - } - - Expected - vaultKeylet(AccountID const& account, std::uint32_t seq) override - { - if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - auto const keylet = keylet::vault(account, seq); - return Bytes{keylet.key.begin(), keylet.key.end()}; - } - - Expected - getNFT(AccountID const& account, uint256 const& nftId) override - { - if (!account || !nftId) - { - getJournal().trace() << "WASM getNFT: Invalid account or NFT ID"; - return Unexpected(HostFunctionError::INVALID_PARAMS); - } - - auto obj = nft::findToken(*env_.current(), account, nftId); - if (!obj) - { - getJournal().trace() << "WASM getNFT: NFT not found"; - return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); - } - - auto ouri = obj->at(~sfURI); - if (!ouri) - return Bytes(); - - Slice const s = ouri->value(); - return Bytes(s.begin(), s.end()); - } - - Expected - getNFTIssuer(uint256 const& nftId) override - { - auto const issuer = nft::getIssuer(nftId); - if (!issuer) - return Unexpected(HostFunctionError::INVALID_PARAMS); - - return Bytes{issuer.begin(), issuer.end()}; - } - - Expected - getNFTTaxon(uint256 const& nftId) override - { - return nft::toUInt32(nft::getTaxon(nftId)); - } - - Expected - getNFTFlags(uint256 const& nftId) override - { - return nft::getFlags(nftId); - } - - Expected - getNFTTransferFee(uint256 const& nftId) override - { - return nft::getTransferFee(nftId); - } - - Expected - getNFTSerial(uint256 const& nftId) override - { - return nft::getSerial(nftId); - } -}; - } // namespace test } // namespace xrpl diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 42ef5b3590..1696950113 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -37,7 +37,8 @@ runFinishFunction(std::string const& code) { auto& engine = WasmEngine::instance(); auto const wasm = hexToBytes(code); - auto const re = engine.run(wasm, "finish"); + HostFunctions hfs; + auto const re = engine.run(wasm, hfs, "finish"); if (re.has_value()) { return std::optional(re->result); @@ -107,10 +108,11 @@ struct Wasm_test : public beast::unit_test::suite // clang-format on auto& vm = WasmEngine::instance(); - std::shared_ptr imports(std::make_shared()); - WasmImpFunc(*imports, "func-add", reinterpret_cast(&Add)); + HostFunctions hfs; + ImportVec imports; + WasmImpFunc(imports, "func-add", reinterpret_cast(&Add), &hfs); - auto re = vm.run(wasm, "addTwo", wasmParams(1234, 5678), imports); + auto re = vm.run(wasm, hfs, "addTwo", wasmParams(1234, 5678), imports); // if (res) printf("invokeAdd get the result: %d\n", res.value()); @@ -125,7 +127,7 @@ struct Wasm_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this}; - std::shared_ptr hfs(new HostFunctions(env.journal)); + HostFunctions hfs(env.journal); { auto wasm = hexToBytes("00000000"); @@ -175,22 +177,22 @@ struct Wasm_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this}; - std::shared_ptr hfs(new TestLedgerDataProvider(env)); - auto imports = std::make_shared(); - WASM_IMPORT_FUNC2(*imports, getLedgerSqn, "get_ledger_sqn", hfs.get(), 33); + TestLedgerDataProvider hfs(env); + ImportVec imports; + WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn", &hfs, 33); auto& engine = WasmEngine::instance(); - auto re = engine.run(ledgerSqnWasm, ESCROW_FUNCTION_NAME, {}, imports, hfs, 1'000'000, env.journal); + auto re = engine.run(ledgerSqnWasm, hfs, ESCROW_FUNCTION_NAME, {}, imports, 1'000'000, env.journal); checkResult(re, 0, 440); env.close(); env.close(); - // empty module - run the same instance - re = engine.run({}, ESCROW_FUNCTION_NAME, {}, imports, hfs, 1'000'000, env.journal); - - checkResult(re, 5, 488); + // empty module, throwing exception + re = engine.run({}, hfs, ESCROW_FUNCTION_NAME, {}, imports, 1'000'000, env.journal); + BEAST_EXPECT(!re); + env.close(); } void @@ -200,43 +202,13 @@ struct Wasm_test : public beast::unit_test::suite auto const fibWasm = hexToBytes(fibWasmHex); auto& engine = WasmEngine::instance(); + HostFunctions hfs; - auto const re = engine.run(fibWasm, "fib", wasmParams(10)); + auto const re = engine.run(fibWasm, hfs, "fib", wasmParams(10)); checkResult(re, 55, 1'137); } - void - testWasmSha() - { - testcase("Wasm sha"); - - auto const sha512Wasm = hexToBytes(sha512PureWasmHex); - auto& engine = WasmEngine::instance(); - - auto const re = engine.run(sha512Wasm, "sha512_process", wasmParams(sha512PureWasmHex)); - - checkResult(re, 34'432, 151'155); - } - - void - testWasmB58() - { - testcase("Wasm base58"); - auto const b58Wasm = hexToBytes(b58WasmHex); - auto& engine = WasmEngine::instance(); - - Bytes outb; - outb.resize(1024); - - auto const minSize = std::min(static_cast(512), static_cast(b58WasmHex.size())); - auto const s = std::string_view(b58WasmHex.c_str(), minSize); - - auto const re = engine.run(b58Wasm, "b58enco", wasmParams(outb, s)); - - checkResult(re, 700, 2'886'069); - } - void testHFCost() { @@ -250,12 +222,12 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); - std::shared_ptr hfs(new TestHostFunctions(env, 0)); - auto imp = createWasmImport(*hfs); - for (auto& i : *imp) + TestHostFunctions hfs(env, 0); + auto imp = createWasmImport(hfs); + for (auto& i : imp) i.second.gas = 0; - auto re = engine.run(allHostFuncWasm, ESCROW_FUNCTION_NAME, {}, imp, hfs, 1'000'000, env.journal); + auto re = engine.run(allHostFuncWasm, hfs, ESCROW_FUNCTION_NAME, {}, imp, 1'000'000, env.journal); checkResult(re, 1, 27'080); @@ -273,10 +245,10 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); - std::shared_ptr hfs(new TestHostFunctions(env, 0)); - auto const imp = createWasmImport(*hfs); + TestHostFunctions hfs(env, 0); + auto const imp = createWasmImport(hfs); - auto re = engine.run(allHostFuncWasm, ESCROW_FUNCTION_NAME, {}, imp, hfs, 1'000'000, env.journal); + auto re = engine.run(allHostFuncWasm, hfs, ESCROW_FUNCTION_NAME, {}, imp, 1'000'000, env.journal); checkResult(re, 1, 66'340); @@ -289,10 +261,10 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); - std::shared_ptr hfs(new TestHostFunctions(env, 0)); - auto const imp = createWasmImport(*hfs); + TestHostFunctions hfs(env, 0); + auto const imp = createWasmImport(hfs); - auto re = engine.run(allHostFuncWasm, ESCROW_FUNCTION_NAME, {}, imp, hfs, 200, env.journal); + auto re = engine.run(allHostFuncWasm, hfs, ESCROW_FUNCTION_NAME, {}, imp, 200, env.journal); if (BEAST_EXPECT(!re)) { @@ -313,14 +285,14 @@ struct Wasm_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this}; { - std::shared_ptr hfs(new TestHostFunctions(env, 0)); + TestHostFunctions hfs(env, 0); auto re = runEscrowWasm(allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); checkResult(re, 1, 66'340); } { // max() gas - std::shared_ptr hfs(new TestHostFunctions(env, 0)); + TestHostFunctions hfs(env, 0); auto re = runEscrowWasm(allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, -1); checkResult(re, 1, 66'340); } @@ -332,13 +304,13 @@ struct Wasm_test : public beast::unit_test::suite { } Expected - getTxField(SField const& fname) override + getTxField(SField const& fname) const override { return Unexpected(HostFunctionError::FIELD_NOT_FOUND); } }; - std::shared_ptr hfs(new FieldNotFoundHostFunctions(env)); + FieldNotFoundHostFunctions hfs(env); auto re = runEscrowWasm(allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); checkResult(re, -201, 28'965); } @@ -350,13 +322,13 @@ struct Wasm_test : public beast::unit_test::suite { } Expected - getTxField(SField const& fname) override + getTxField(SField const& fname) const override { return Bytes((128 + 1) * 64 * 1024, 1); } }; - std::shared_ptr hfs(new OversizedFieldHostFunctions(env)); + OversizedFieldHostFunctions hfs(env); auto re = runEscrowWasm(allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); checkResult(re, -201, 28'965); } @@ -365,14 +337,14 @@ struct Wasm_test : public beast::unit_test::suite auto const deepWasm = hexToBytes(deepRecursionHex); - std::shared_ptr hfs(new TestHostFunctionsSink(env)); + TestHostFunctionsSink hfs(env); std::string funcName("finish"); auto re = runEscrowWasm(deepWasm, hfs, funcName, {}, 1'000'000'000); BEAST_EXPECT(!re && re.error()); // std::cout << "bad case (deep recursion) result " << re.error() // << std::endl; - auto const& sink = hfs->getSink(); + auto const& sink = hfs.getSink(); auto countSubstr = [](std::string const& str, std::string const& substr) { std::size_t pos = 0; int occurrences = 0; @@ -392,7 +364,7 @@ struct Wasm_test : public beast::unit_test::suite { // infinite loop auto const infiniteLoopWasm = hexToBytes(infiniteLoopWasmHex); std::string const funcName("loop"); - std::shared_ptr hfs(new TestHostFunctions(env, 0)); + TestHostFunctions hfs(env, 0); // infinite loop should be caught and fail auto const re = runEscrowWasm(infiniteLoopWasm, hfs, funcName, {}, 1'000'000); @@ -405,13 +377,13 @@ struct Wasm_test : public beast::unit_test::suite { // expected import not provided auto const lgrSqnWasm = hexToBytes(ledgerSqnWasmHex); - std::shared_ptr hfs(new TestLedgerDataProvider(env)); - std::shared_ptr imports(std::make_shared()); - WASM_IMPORT_FUNC2(*imports, getLedgerSqn, "get_ledger_sqn2", hfs.get()); + TestLedgerDataProvider hfs(env); + ImportVec imports; + WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn2", &hfs); auto& engine = WasmEngine::instance(); - auto re = engine.run(lgrSqnWasm, ESCROW_FUNCTION_NAME, {}, imports, hfs, 1'000'000, env.journal); + auto re = engine.run(lgrSqnWasm, hfs, ESCROW_FUNCTION_NAME, {}, imports, 1'000'000, env.journal); BEAST_EXPECT(!re); } @@ -419,14 +391,14 @@ struct Wasm_test : public beast::unit_test::suite { // bad import format auto const lgrSqnWasm = hexToBytes(ledgerSqnWasmHex); - std::shared_ptr hfs(new TestLedgerDataProvider(env)); - std::shared_ptr imports(std::make_shared()); - WASM_IMPORT_FUNC2(*imports, getLedgerSqn, "get_ledger_sqn", hfs.get()); - (*imports)[0].first = nullptr; + TestLedgerDataProvider hfs(env); + ImportVec imports; + WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn", &hfs); + imports[0].first = nullptr; auto& engine = WasmEngine::instance(); - auto re = engine.run(lgrSqnWasm, ESCROW_FUNCTION_NAME, {}, imports, hfs, 1'000'000, env.journal); + auto re = engine.run(lgrSqnWasm, hfs, ESCROW_FUNCTION_NAME, {}, imports, 1'000'000, env.journal); BEAST_EXPECT(!re); } @@ -434,12 +406,12 @@ struct Wasm_test : public beast::unit_test::suite { // bad function name auto const lgrSqnWasm = hexToBytes(ledgerSqnWasmHex); - std::shared_ptr hfs(new TestLedgerDataProvider(env)); - std::shared_ptr imports(std::make_shared()); - WASM_IMPORT_FUNC2(*imports, getLedgerSqn, "get_ledger_sqn", hfs.get()); + TestLedgerDataProvider hfs(env); + ImportVec imports; + WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn", &hfs); auto& engine = WasmEngine::instance(); - auto re = engine.run(lgrSqnWasm, "func1", {}, imports, hfs, 1'000'000, env.journal); + auto re = engine.run(lgrSqnWasm, hfs, "func1", {}, imports, 1'000'000, env.journal); BEAST_EXPECT(!re); } @@ -458,7 +430,7 @@ struct Wasm_test : public beast::unit_test::suite { auto const floatTestWasm = hexToBytes(floatTestsWasmHex); - std::shared_ptr hfs(new TestHostFunctions(env, 0)); + TestHostFunctions hfs(env, 0); auto re = runEscrowWasm(floatTestWasm, hfs, funcName, {}, 200'000); checkResult(re, 1, 110'699); env.close(); @@ -467,102 +439,13 @@ struct Wasm_test : public beast::unit_test::suite { auto const float0Wasm = hexToBytes(float0Hex); - std::shared_ptr hfs(new TestHostFunctions(env, 0)); + TestHostFunctions hfs(env, 0); auto re = runEscrowWasm(float0Wasm, hfs, funcName, {}, 100'000); checkResult(re, 1, 4'259); env.close(); } } - void - perfTest() - { - testcase("Perf test host functions"); - - using namespace jtx; - using namespace std::chrono; - - // std::string const funcName("test"); - auto const perfWasm = hexToBytes(hfPerfTest); - - // std::string const credType = "abcde"; - // std::string const credType2 = "fghijk"; - // std::string const credType3 = "0123456"; - // char const uri[] = "uri"; - - Account const alan{"alan"}; - Account const bob{"bob"}; - Account const issuer{"issuer"}; - - { - Env env(*this); - // Env env(*this, envconfig(), {}, nullptr, - // beast::severities::kTrace); - env.fund(XRP(5000), alan, bob, issuer); - env.close(); - - // // create escrow - // auto const seq = env.seq(alan); - // auto const k = keylet::escrow(alan, seq); - // // auto const allowance = 3'600; - // auto escrowCreate = escrow::create(alan, bob, XRP(1000)); - // XRPAmount txnFees = env.current()->fees().base + 1000; - // env(escrowCreate, - // escrow::finish_function(wasmHex), - // escrow::finish_time(env.now() + 11s), - // escrow::cancel_time(env.now() + 100s), - // escrow::data("1000000000"), // 1000 XRP in drops - // memodata("memo1234567"), - // memodata("2memo1234567"), - // fee(txnFees)); - - // // create depositPreauth - // auto const k = keylet::depositPreauth( - // bob, - // {{issuer.id(), makeSlice(credType)}, - // {issuer.id(), makeSlice(credType2)}, - // {issuer.id(), makeSlice(credType3)}}); - // env(deposit::authCredentials( - // bob, - // {{issuer, credType}, - // {issuer, credType2}, - // {issuer, credType3}})); - - // create nft - [[maybe_unused]] uint256 const nft0{token::getNextID(env, alan, 0u)}; - env(token::mint(alan, 0u)); - auto const k = keylet::nftoffer(alan, 0); - [[maybe_unused]] uint256 const nft1{token::getNextID(env, alan, 0u)}; - - env(token::mint(alan, 0u), - token::uri( - "https://github.com/XRPLF/XRPL-Standards/discussions/" - "279?id=github.com/XRPLF/XRPL-Standards/discussions/" - "279&ut=github.com/XRPLF/XRPL-Standards/discussions/" - "279&sid=github.com/XRPLF/XRPL-Standards/discussions/" - "279&aot=github.com/XRPLF/XRPL-Standards/disc")); - [[maybe_unused]] uint256 const nft2{token::getNextID(env, alan, 0u)}; - env(token::mint(alan, 0u)); - env.close(); - - std::shared_ptr hfs(new PerfHostFunctions(env, k, env.tx())); - - auto re = runEscrowWasm(perfWasm, hfs, ESCROW_FUNCTION_NAME); - if (BEAST_EXPECT(re.has_value())) - { - BEAST_EXPECT(re->result); - std::cout << "Res: " << re->result << " cost: " << re->cost << std::endl; - } - - // env(escrow::finish(alan, alan, seq), - // escrow::comp_allowance(allowance), - // fee(txnFees), - // ter(tesSUCCESS)); - - env.close(); - } - } - void testCodecovWasm() { @@ -573,7 +456,7 @@ struct Wasm_test : public beast::unit_test::suite Env env{*this}; auto const codecovWasm = hexToBytes(codecovTestsWasmHex); - std::shared_ptr hfs(new TestHostFunctions(env, 0)); + TestHostFunctions hfs(env, 0); auto const allowance = 202'724; auto re = runEscrowWasm(codecovWasm, hfs, ESCROW_FUNCTION_NAME, {}, allowance); @@ -591,7 +474,7 @@ struct Wasm_test : public beast::unit_test::suite auto disabledFloatWasm = hexToBytes(disabledFloatHex); std::string const funcName("finish"); - std::shared_ptr hfs(new TestHostFunctions(env, 0)); + TestHostFunctions hfs(env, 0); { // f32 set constant, opcode disabled exception @@ -704,91 +587,17 @@ struct Wasm_test : public beast::unit_test::suite Env env(*this); auto const startLoopWasm = hexToBytes(startLoopHex); - std::shared_ptr hfs(new TestLedgerDataProvider(env)); - std::shared_ptr imports(std::make_shared()); + TestLedgerDataProvider hfs(env); + ImportVec imports; auto& engine = WasmEngine::instance(); - auto checkRes = engine.check(startLoopWasm, "finish", {}, imports, hfs, env.journal); + auto checkRes = engine.check(startLoopWasm, hfs, "finish", {}, imports, env.journal); BEAST_EXPECTS(checkRes == tesSUCCESS, std::to_string(TERtoInt(checkRes))); - auto re = engine.run(startLoopWasm, ESCROW_FUNCTION_NAME, {}, imports, hfs, 1'000'000, env.journal); + auto re = engine.run(startLoopWasm, hfs, ESCROW_FUNCTION_NAME, {}, imports, 1'000'000, env.journal); BEAST_EXPECTS(re.error() == tecFAILED_PROCESSING, std::to_string(TERtoInt(re.error()))); } - void - testBadAlloc() - { - testcase("Wasm Bad Alloc"); - - // bad_alloc.c - auto const badAllocWasm = hexToBytes(badAllocHex); - - using namespace test::jtx; - - Env env{*this}; - std::shared_ptr hfs(new TestLedgerDataProvider(env)); - - // std::shared_ptr imports(std::make_shared()); - uint8_t buf1[8] = {7, 8, 9, 10, 11, 12, 13, 14}; - { // forged "allocate" return valid address - std::vector params = {{.type = WT_U8V, .of = {.u8v = {.d = buf1, .sz = sizeof(buf1)}}}}; - auto& engine = WasmEngine::instance(); - - auto re = engine.run(badAllocWasm, "test", params, {}, hfs, 1'000'000, env.journal); - if (BEAST_EXPECT(re)) - { - BEAST_EXPECTS(re->result == 7, std::to_string(re->result)); - BEAST_EXPECTS(re->cost == 430, std::to_string(re->cost)); - } - } - - { // return 0 whithout calling wasm - std::vector params = {{.type = WT_U8V, .of = {.u8v = {.d = buf1, .sz = 0}}}}; - auto& engine = WasmEngine::instance(); - auto re = engine.run(badAllocWasm, "test", params, {}, hfs, 1'000'000, env.journal); - BEAST_EXPECT(!re) && BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); - } - - { // forged "allocate" return 8Mb (which is more than memory limit) - std::vector params = {{.type = WT_U8V, .of = {.u8v = {.d = buf1, .sz = 1}}}}; - auto& engine = WasmEngine::instance(); - auto re = engine.run(badAllocWasm, "test", params, {}, hfs, 1'000'000, env.journal); - BEAST_EXPECT(!re) && BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); - } - - { // forged "allocate" return 0 - std::vector params = {{.type = WT_U8V, .of = {.u8v = {.d = buf1, .sz = 2}}}}; - auto& engine = WasmEngine::instance(); - auto re = engine.run(badAllocWasm, "test", params, {}, hfs, 1'000'000, env.journal); - BEAST_EXPECT(!re) && BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); - } - - { // forged "allocate" return -1 - std::vector params = {{.type = WT_U8V, .of = {.u8v = {.d = buf1, .sz = 3}}}}; - auto& engine = WasmEngine::instance(); - auto re = engine.run(badAllocWasm, "test", params, {}, hfs, 1'000'000, env.journal); - - BEAST_EXPECT(!re) && BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); - } - - { - std::string what; - try - { - char const test[] = "test"; - std::size_t sz = std::numeric_limits::max() + 1ull; - auto p = wasmParams(std::string_view(test, sz)); - } - catch (std::exception const& e) - { - what = e.what(); - } - BEAST_EXPECT(what.find("can't allocate memory, size: 2147483648") != std::string::npos); - } - - env.close(); - } - void testBadAlign() { @@ -800,14 +609,14 @@ struct Wasm_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this}; - std::shared_ptr hfs(new TestHostFunctions(env, 0)); - auto imports = createWasmImport(*hfs); + TestHostFunctions hfs(env, 0); + auto imports = createWasmImport(hfs); { // Calls float_from_uint with bad alignment. // Can be checked through codecov auto& engine = WasmEngine::instance(); - auto re = engine.run(badAlignWasm, "test", {}, imports, hfs, 1'000'000, env.journal); + auto re = engine.run(badAlignWasm, hfs, "test", {}, imports, 1'000'000, env.journal); if (BEAST_EXPECTS(re, transToken(re.error()))) { BEAST_EXPECTS(re->result == 0x684f7941, std::to_string(re->result)); @@ -822,7 +631,7 @@ struct Wasm_test : public beast::unit_test::suite { using namespace test::jtx; Env env(*this); - std::shared_ptr hfs(new TestHostFunctions(env, 0)); + TestHostFunctions hfs(env, 0); testcase("Wasm invalid return type"); @@ -877,7 +686,7 @@ struct Wasm_test : public beast::unit_test::suite { using namespace test::jtx; Env env(*this); - std::shared_ptr hfs(new TestHostFunctions(env, 0)); + TestHostFunctions hfs(env, 0); testcase("Wasm invalid params"); @@ -988,8 +797,8 @@ struct Wasm_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this}; - std::shared_ptr hfs(new TestHostFunctions(env, 0)); - auto imports = createWasmImport(*hfs); + TestHostFunctions hfs(env, 0); + auto imports = createWasmImport(hfs); // add 1k parameter (max that wasmi support) std::vector params; @@ -998,28 +807,28 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); { - auto re = engine.run(params1k, "test", params, imports, hfs, 1'000'000, env.journal); + auto re = engine.run(params1k, hfs, "test", params, imports, 1'000'000, env.journal); BEAST_EXPECT(re && re->result == 999000); } // add 1 more parameter, module can't be created now params.push_back({.type = WT_I32, .of = {.i32 = 2 * 1000}}); { - auto re = engine.run(params1k1, "test", params, imports, hfs, 1'000'000, env.journal); + auto re = engine.run(params1k1, hfs, "test", params, imports, 1'000'000, env.journal); BEAST_EXPECT(!re); } // function that create 10k local variables auto const locals10k = hexToBytes(locals10kHex); { - auto re = engine.run(locals10k, "test", wasmParams(0, 1), imports, hfs, 1'000'000, env.journal); + auto re = engine.run(locals10k, hfs, "test", wasmParams(0, 1), imports, 1'000'000, env.journal); BEAST_EXPECT(re && re->result == 890'489'442); } // module has 5k functions auto const functions5k = hexToBytes(functions5kHex); { - auto re = engine.run(functions5k, "test0001", wasmParams(2, 3), imports, hfs, 1'000'000, env.journal); + auto re = engine.run(functions5k, hfs, "test0001", wasmParams(2, 3), imports, 1'000'000, env.journal); BEAST_EXPECT(re && re->result == 5); } @@ -1057,8 +866,8 @@ struct Wasm_test : public beast::unit_test::suite Env env{*this}; auto& engine = WasmEngine::instance(); - std::shared_ptr hfs(new TestHostFunctions(env, 0)); - auto imports = createWasmImport(*hfs); + TestHostFunctions hfs(env, 0); + auto imports = createWasmImport(hfs); env.close(); { @@ -1067,7 +876,7 @@ struct Wasm_test : public beast::unit_test::suite int64_t cost = -1, std::source_location const location = std::source_location::current()) { auto const lineStr = " (" + std::to_string(location.line()) + ")"; - auto re = engine.run(code, "all_instructions", {}, imports, hfs, 1'000'000, env.journal); + auto re = engine.run(code, hfs, "all_instructions", {}, imports, 1'000'000, env.journal); if (BEAST_EXPECTS(re.has_value() == good, transToken(re.error()) + lineStr) && good) BEAST_EXPECTS(re->cost == cost, std::to_string(re->cost) + lineStr); }; @@ -1555,8 +1364,6 @@ struct Wasm_test : public beast::unit_test::suite testWasmLedgerSqn(); testWasmFib(); - testWasmSha(); - testWasmB58(); testHFCost(); testEscrowWasmDN(); @@ -1573,7 +1380,6 @@ struct Wasm_test : public beast::unit_test::suite testWasmSectionCorruption(); testStartFunctionLoop(); - testBadAlloc(); testBadAlign(); testReturnType(); testSwapBytes(); @@ -1581,8 +1387,6 @@ struct Wasm_test : public beast::unit_test::suite testParameterType(); testOpcodes(); - - // perfTest(); } }; diff --git a/src/test/app/wasm_fixtures/b58.c b/src/test/app/wasm_fixtures/b58.c deleted file mode 100644 index 8935a9f1a5..0000000000 --- a/src/test/app/wasm_fixtures/b58.c +++ /dev/null @@ -1,69 +0,0 @@ -#include - -static char const b58digits_ordered[] = - "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; - -uint8_t e_data[32 * 1024]; - -void *allocate(int sz) -{ - static int idx = 0; - if (idx >= 32) - return 0; - if (sz > 1024) - return 0; - return &e_data[idx++ << 10]; -} - -void deallocate(void *p) {} - -extern int32_t b58enco(char *b58, int32_t b58sz, void const *data, - int32_t binsz) -{ - uint8_t const *bin = data; - int32_t carry; - int32_t i, j, high, zcount = 0; - int32_t size; - - while (zcount < binsz && !bin[zcount]) - ++zcount; - - size = (binsz - zcount) * 138 / 100 + 1; - uint8_t *buf = allocate(size); - if (!buf) - return 0; - // memset(buf, 0, size); - for (i = 0; i < size; ++i) - buf[i] = 0; - - for (i = zcount, high = size - 1; i < binsz; ++i, high = j) - { - for (carry = bin[i], j = size - 1; (j > high) || carry; --j) - { - carry += 256 * buf[j]; - buf[j] = carry % 58; - carry /= 58; - if (!j) - break; - } - } - - for (j = 0; j < size && !buf[j]; ++j) - ; - - if (b58sz <= zcount + size - j) - return 0; - - if (zcount) - { - // memset(b58, '1', zcount); - for (i = 0; i < zcount; ++i) - b58[i] = '1'; - } - - for (i = zcount; j < size; ++i, ++j) - b58[i] = b58digits_ordered[buf[j]]; - b58[i] = '\0'; - - return i + 1; -} diff --git a/src/test/app/wasm_fixtures/bad_alloc.c b/src/test/app/wasm_fixtures/bad_alloc.c deleted file mode 100644 index 7735679365..0000000000 --- a/src/test/app/wasm_fixtures/bad_alloc.c +++ /dev/null @@ -1,25 +0,0 @@ -#include - -char buf[1024]; - -void *allocate(int sz) -{ - if (!sz) - return 0; - - if (sz == 1) - return ((void *)(8 * 1024 * 1024)); - if (sz == 2) - return 0; - if (sz == 3) - return ((void *)(0xFFFFFFFF)); - - return &buf[sz]; -} - -int32_t test(char *p, int32_t sz) -{ - if (!sz) - return 0; - return p[0]; -} diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 7721482495..08d189a5ba 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -9,100 +9,6 @@ extern std::string const fibWasmHex = "0340200041036b100120016a2101200041026b220041044a0d000b200141" "016a0b"; -extern std::string const b58WasmHex = - "0061736d0100000001150460000060017f017f60017f0060047f7f7f7f01" - "7f0305040001020305030100020607017f0041d0080b074906066d656d6f" - "72790200115f5f7761736d5f63616c6c5f63746f7273000008616c6c6f63" - "617465000106655f6461746103000a6465616c6c6f636174650002076235" - "38656e636f00030ae8050402000b3401017f024020004180084a0d0041c0" - "082802002200411f4a0d0041c008200041016a3602002000410a7441d008" - "6a21010b20010b02000baa0501097f41d088060240200341004c0d000340" - "200220066a2d00000d012003200641016a2206470d000b200321060b2003" - "20066b220c418a016c41e4006d220741106a4170716b21090240200c4100" - "480d00200741016a220a410771210541002104200741074f0440200a41f8" - "ffff1f71210a0340200420096a4200370300200a200441086a2204470d00" - "0b0b2005450d00200420096a21040340200441003a0000200441016a2104" - "200541016b22050d000b0b200320064a0440200621052007210403402002" - "20056a2d0000210802402004220a20074e0440200721042008450d010b20" - "0721040340200420096a220b200b2d000041087420086a220b200b413a6d" - "2208413a6c6b3a00002004450440410021040c020b200441016b2204200a" - "4a0d00200b413a6b418d7f490d000b0b200541016a22052003470d000b0b" - "200741016a22022103410021040240200c4100480d000340200420096a2d" - "00000d012002200441016a2204470d000b200221040b2001200320066a20" - "046b4a047f02402006450d002006410771210841002105200641084f0440" - "200641787121010340200020056a42b1e2c48993a6cc9831370000200120" - "0541086a2205470d000b0b2008450d00200020056a21050340200541313a" - "0000200541016a2105200841016b22080d000b0b0240200420074a0d0020" - "0420076a410171047f200405200020066a200420096a2d00004180086a2d" - "00003a0000200641016a2106200441016a0b210520042007460d00200520" - "096a2101200720056b2102200020066a2103417f21040340200320046a22" - "0741016a200120046a220541016a2d00004180086a2d00003a0000200741" - "026a200541026a2d00004180086a2d00003a00002002200441026a220447" - "0d000b200420066a41016a21060b200020066a41003a0000200641016a05" - "41000b0b0b4101004180080b3a3132333435363738394142434445464748" - "4a4b4c4d4e505152535455565758595a6162636465666768696a6b6d6e6f" - "707172737475767778797a00490f7461726765745f666561747572657304" - "2b0f6d757461626c652d676c6f62616c732b087369676e2d6578742b0f72" - "65666572656e63652d74797065732b0a6d756c746976616c7565"; - -extern std::string const sha512PureWasmHex = - "0061736d0100000001130460000060017f017f60017f0060027f7f017f03" - "05040001020305030100020607017f0041800d0b075006066d656d6f7279" - "0200115f5f7761736d5f63616c6c5f63746f7273000008616c6c6f636174" - "65000106655f6461746103000a6465616c6c6f6361746500020e73686135" - "31325f70726f6365737300030aa4060402000b0f0041800d410020004180" - "80024d1b0b02000b8b0602147e037f200141ff006a41ff014f044041c08c" - "06211620014180016d41016bac210b41808d02290300210c41888d022903" - "00210d41908d02290300210e41988d02290300210f41a08d022903002110" - "41a88d02290300211141b08d02290300211241b88d022903002113034041" - "002101200c21092013210a201221082011210520102103200f2115200e21" - "06200d2102034020022107200120166a200020016a290000220242388620" - "024280fe0383422886842002428080fc0783421886200242808080f80f83" - "4208868484200242088842808080f80f832002421888428080fc07838420" - "024228884280fe03832002423888848484220237030020014180086a2903" - "00200a200322044232892004422e89852004421789857c2008220a200442" - "7f858320052208200483847c7c20027c2203200922024224892002421e89" - "85200242198985200220072006221485832006200783857c7c2109200320" - "157c2103200421052006211520072106200141086a2201418001470d000b" - "200020016a21004180092117411e210103402002210620162001410e6b41" - "0f714103746a221820182903002016200141056b410f714103746a290300" - "20162001410d6b410f714103746a2903002202423f892002423889852002" - "420788857c7c20162001410f714103746a2903002202422d892002420389" - "852002420688857c22023703002017290300200a20032205423289200542" - "2e89852005421789857c2005427f852008832004200583847c7c20027c22" - "03200922024224892002421e898520024219898520022006200785832006" - "200783857c7c2109200320147c2103201741086a21172008210a20042108" - "200521042007211420062107200141016a220141de00470d000b41b88d02" - "200a20137c221337030041b08d02200820127c221237030041a88d022004" - "20117c221137030041a08d02200320107c221037030041988d02200f2014" - "7c220f37030041908d022007200e7c220e37030041888d022002200d7c22" - "0d37030041808d022009200c7c220c370300200b420052200b42017d210b" - "0d000b0b41808d020b0b880501004180080b800522ae28d7982f8a42cd65" - "ef23914437712f3b4deccffbc0b5bcdb8981a5dbb5e938b548f35bc25639" - "19d005b6f111f1599b4f19afa4823f9218816ddad55e1cab420203a398aa" - "07d8be6f7045015b83128cb2e44ebe853124e2b4ffd5c37d0c556f897bf2" - "745dbe72b196163bfeb1de803512c725a706dc9b942669cf74f19bc1d24a" - "f19ec1699be4e3254f388647beefb5d58c8bc69dc10f659cac77cca10c24" - "75022b596f2ce92d83e4a66eaa84744ad4fb41bddca9b05cb5531183da88" - "f976abdf66ee52513e981032b42d6dc631a83f21fb98c82703b0e40eefbe" - "c77f59bfc28fa83df30be0c625a70a934791a7d56f8203e05163ca06706e" - "0e0a67292914fc2fd246850ab72726c9265c38211b2eed2ac45afc6d2c4d" - "dfb3959d130d3853de63af8b54730a65a8b2773cbb0a6a76e6aeed472ec9" - "c2813b358214852c72926403f14ca1e8bfa2013042bc4b661aa89197f8d0" - "708b4bc230be5406a3516cc71852efd619e892d110a96555240699d62a20" - "715785350ef4b8d1bb3270a06a10c8d0d2b816c1a41953ab4151086c371e" - "99eb8edf4c774827a8489be1b5bcb034635ac9c5b30c1c39cb8a41e34aaa" - "d84e73e363774fca9c5ba3b8b2d6f36f2e68fcb2ef5dee828f74602f1743" - "6f63a57872abf0a11478c884ec39641a0802c78c281e6323faffbe90e9bd" - "82deeb6c50a41579c6b2f7a3f9be2b5372e3f27871c69c6126eace3e27ca" - "07c2c021c7b886d11eebe0cdd67ddaea78d16eee7f4f7df5ba6f1772aa67" - "f006a698c8a2c57d630aae0df9be04983f111b471c13350b711b847d0423" - "f577db289324c7407babca32bcbec9150abe9e3c4c0d109cc4671d43b642" - "3ecbbed4c54c2a7e65fc9c297f59ecfad63aab6fcb5f1758474a8c19446c" - "00490f7461726765745f6665617475726573042b0f6d757461626c652d67" - "6c6f62616c732b087369676e2d6578742b0f7265666572656e63652d7479" - "7065732b0a6d756c746976616c7565"; - extern std::string const ledgerSqnWasmHex = "0061736d01000000010e0360027f7f017f6000006000017f02160103656e760e6765745f6c65646765725f73716e0000030302010205030100" "02063f0a7f01418088040b7f004180080b7f004180080b7f004180080b7f00418088040b7f004180080b7f00418088040b7f00418080080b7f" @@ -342,40 +248,6 @@ extern std::string const deepRecursionHex = "0061736d010000000105016000017f030201000608017f0141c0843d0b070a010666696e69" "736800000a16011400230045044041010f0b230041016b240010000b"; -extern std::string const hfPerfTest = - "0061736d0100000001190460057f7f7f7f7f017f60047f7f7f7f017f6000006000017f0236" - "0303656e7609666c6f61745f6c6f67000003656e76057472616365000003656e7612747261" - "63655f6f70617175655f666c6f617400010303020203050301000206aa011c7f0041b0090b" - "7f004193090b7f0041b0080b7f0041c0080b7f0041e0080b7f004180090b7f004180080b7f" - "004184080b7f004188080b7f00418c080b7f004190080b7f004194080b7f004198080b7f00" - "419c080b7f0041a0080b7f0041a4080b7f0041a8080b7f0041ac080b7f00419b090b7f0041" - "80080b7f0041b0110b7f0041b0110b7f0041b091040b7f004180080b7f0041b091040b7f00" - "418080080b7f0041000b7f0041010b0785031f066d656d6f72790200115f5f7761736d5f63" - "616c6c5f63746f727300030666696e697368000403627566030001610301086572725f6865" - "61640302096572725f6461746131030305696e707574030406726573756c74030508495445" - "525f4d4158030609484153485f53495a450307084143435f53495a4503080d43555252454e" - "43595f53495a4503090b4b45594c45545f53495a45030a0a53465f4163636f756e74030b0e" - "53465f44657374696e6174696f6e030c0853465f4d656d6f73030d0753465f4d656d6f030e" - "0b53465f4d656d6f44617461030f0753465f4461746103101753465f417574686f72697a65" - "43726564656e7469616c730311016203120c5f5f64736f5f68616e646c6503130a5f5f6461" - "74615f656e6403140b5f5f737461636b5f6c6f7703150c5f5f737461636b5f686967680316" - "0d5f5f676c6f62616c5f6261736503170b5f5f686561705f6261736503180a5f5f68656170" - "5f656e6403190d5f5f6d656d6f72795f62617365031a0c5f5f7461626c655f62617365031b" - "0a7c0202000b7701017f41807821000340200041b0116a4200370300200041086a22000d00" - "0b41c0843d210002400340419309410841b009418008410010004108460440200041016b22" - "000d010c020b0b41b008410f41c0084113410010011a0b41e0084111419309410810021a41" - "8009411241b009410810021a41010b0b9f0104004180080b53809698002000000014000000" - "1400000020000000010008000300080009000f000a000e000d0007001b0007001a000f0066" - "6c6f61745f6c6f67206572726f7200696e76616c69642072657475726e2073697a650041e0" - "080b11666c6f61745f6c6f6720696e7075743a20004180090b12666c6f61745f6c6f672072" - "6573756c743a20004193090b10d48b29430a256d21d920c49ba5e353f8007f0970726f6475" - "63657273010c70726f6365737365642d62790105636c616e675f31392e312e352d77617369" - "2d73646b202868747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d7072" - "6f6a6563742061623462356132646235383239353861663165653330386137393063666462" - "3432626432343732302900490f7461726765745f6665617475726573042b0f6d757461626c" - "652d676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b" - "0a6d756c746976616c7565"; - extern std::string const allKeyletsWasmHex = "0061736d0100000001480960067f7f7f7f7f7f017f60047f7f7f7f017f60087f7f7f7f7f7f" "7f7f017f60037f7f7f017f60037f7f7e017f60057f7f7f7f7f017f60057f7f7f7f7f006000" @@ -1284,24 +1156,6 @@ extern std::string const startLoopHex = "0061736d010000000108026000006000017f03030200010712020573746172740000066669" "6e69736800010801000a0e02070003400c000b0b040041010b"; -extern std::string const badAllocHex = - "0061736d01000000010f0360000060017f017f60027f7f017f030403000102050301000206" - "3e0a7f004180080b7f004180080b7f004180100b7f004180100b7f00418090040b7f004180" - "080b7f00418090040b7f00418080080b7f0041000b7f0041010b07b9010e066d656d6f7279" - "0200115f5f7761736d5f63616c6c5f63746f7273000008616c6c6f63617465000103627566" - "0300047465737400020c5f5f64736f5f68616e646c6503010a5f5f646174615f656e640302" - "0b5f5f737461636b5f6c6f7703030c5f5f737461636b5f6869676803040d5f5f676c6f6261" - "6c5f6261736503050b5f5f686561705f6261736503060a5f5f686561705f656e6403070d5f" - "5f6d656d6f72795f6261736503080c5f5f7461626c655f6261736503090a420302000b2c01" - "017f024002400240024020000e0403000301020b41808080040f0b417f0f0b20004180086a" - "21010b20010b1000200145044041000f0b20002c00000b007f0970726f647563657273010c" - "70726f6365737365642d62790105636c616e675f31392e312e352d776173692d73646b2028" - "68747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a65637420" - "61623462356132646235383239353861663165653330386137393063666462343262643234" - "3732302900490f7461726765745f6665617475726573042b0f6d757461626c652d676c6f62" - "616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c7469" - "76616c7565"; - extern std::string const badAlignWasmHex = "0061736d01000000011b046000017f60057f7f7f7f7f017f60067f7f7f7f7f7f017f600000022a0203656e760f666c6f61745f66726f6d5f75" "696e74000103656e760c636865636b5f6b65796c6574000203050403000000050301000306470b7f004180080b7f00418088020b7f00418008" diff --git a/src/test/app/wasm_fixtures/fixtures.h b/src/test/app/wasm_fixtures/fixtures.h index 5c71698d67..ceace76fc0 100644 --- a/src/test/app/wasm_fixtures/fixtures.h +++ b/src/test/app/wasm_fixtures/fixtures.h @@ -5,27 +5,14 @@ #include extern std::string const ledgerSqnWasmHex; - extern std::string const allHostFunctionsWasmHex; - -extern std::string const deepRecursionHex; +extern std::string const allKeyletsWasmHex; +extern std::string const codecovTestsWasmHex; extern std::string const fibWasmHex; -extern std::string const b58WasmHex; - -extern std::string const sha512PureWasmHex; - -extern std::string const hfPerfTest; - -extern std::string const allKeyletsWasmHex; - -extern std::string const codecovTestsWasmHex; - extern std::string const floatTestsWasmHex; - extern std::string const float0Hex; - extern std::string const disabledFloatHex; extern std::string const memoryPointerAtLimitHex; @@ -80,10 +67,10 @@ extern std::string const junkAfterSectionHex; extern std::string const invalidSectionIdHex; extern std::string const localVariableBombHex; +extern std::string const deepRecursionHex; extern std::string const infiniteLoopWasmHex; extern std::string const startLoopHex; -extern std::string const badAllocHex; extern std::string const badAlignWasmHex; extern std::string const thousandParamsHex; diff --git a/src/test/app/wasm_fixtures/sha512Pure.c b/src/test/app/wasm_fixtures/sha512Pure.c deleted file mode 100644 index 347bf8827b..0000000000 --- a/src/test/app/wasm_fixtures/sha512Pure.c +++ /dev/null @@ -1,135 +0,0 @@ -#include -#include - -static uint64_t const K512[] = { - 0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, - 0xe9b5dba58189dbbc, 0x3956c25bf348b538, 0x59f111f1b605d019, - 0x923f82a4af194f9b, 0xab1c5ed5da6d8118, 0xd807aa98a3030242, - 0x12835b0145706fbe, 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2, - 0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235, - 0xc19bf174cf692694, 0xe49b69c19ef14ad2, 0xefbe4786384f25e3, - 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65, 0x2de92c6f592b0275, - 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5, - 0x983e5152ee66dfab, 0xa831c66d2db43210, 0xb00327c898fb213f, - 0xbf597fc7beef0ee4, 0xc6e00bf33da88fc2, 0xd5a79147930aa725, - 0x06ca6351e003826f, 0x142929670a0e6e70, 0x27b70a8546d22ffc, - 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed, 0x53380d139d95b3df, - 0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, - 0x92722c851482353b, 0xa2bfe8a14cf10364, 0xa81a664bbc423001, - 0xc24b8b70d0f89791, 0xc76c51a30654be30, 0xd192e819d6ef5218, - 0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8, - 0x19a4c116b8d2d0c8, 0x1e376c085141ab53, 0x2748774cdf8eeb99, - 0x34b0bcb5e19b48a8, 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, - 0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3, 0x748f82ee5defb2fc, - 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec, - 0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, - 0xc67178f2e372532b, 0xca273eceea26619c, 0xd186b8c721c0c207, - 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178, 0x06f067aa72176fba, - 0x0a637dc5a2c898a6, 0x113f9804bef90dae, 0x1b710b35131c471b, - 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc, - 0x431d67c49c100d4c, 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, - 0x5fcb6fab3ad6faec, 0x6c44198c4a475817}; - -#define ROTATE(x, y) (((x) >> (y)) | ((x) << (64 - (y)))) -#define Sigma0(x) (ROTATE((x), 28) ^ ROTATE((x), 34) ^ ROTATE((x), 39)) -#define Sigma1(x) (ROTATE((x), 14) ^ ROTATE((x), 18) ^ ROTATE((x), 41)) -#define sigma0(x) (ROTATE((x), 1) ^ ROTATE((x), 8) ^ ((x) >> 7)) -#define sigma1(x) (ROTATE((x), 19) ^ ROTATE((x), 61) ^ ((x) >> 6)) - -#define Ch(x, y, z) (((x) & (y)) ^ ((~(x)) & (z))) -#define Maj(x, y, z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) - -static inline uint64_t B2U64(uint8_t val, uint8_t sh) -{ - return ((uint64_t)val) << sh; -} - -void *allocate(int sz) { return malloc(sz); } -void deallocate(void *p) { free(p); } - -uint8_t e_data[32 * 1024]; - -uint8_t *sha512_process(uint8_t const *data, int32_t length) -{ - static uint64_t state[8] = {0, 0, 0, 0, 0, 0, 0, 0}; - - uint64_t a, b, c, d, e, f, g, h, s0, s1, T1, T2; - uint64_t X[16]; - - uint64_t blocks = length / 128; - while (blocks--) - { - a = state[0]; - b = state[1]; - c = state[2]; - d = state[3]; - e = state[4]; - f = state[5]; - g = state[6]; - h = state[7]; - - unsigned i; - for (i = 0; i < 16; i++) - { - X[i] = B2U64(data[0], 56) | B2U64(data[1], 48) | B2U64(data[2], 40) | - B2U64(data[3], 32) | B2U64(data[4], 24) | B2U64(data[5], 16) | - B2U64(data[6], 8) | B2U64(data[7], 0); - data += 8; - - T1 = h; - T1 += Sigma1(e); - T1 += Ch(e, f, g); - T1 += K512[i]; - T1 += X[i]; - - T2 = Sigma0(a); - T2 += Maj(a, b, c); - - h = g; - g = f; - f = e; - e = d + T1; - d = c; - c = b; - b = a; - a = T1 + T2; - } - - for (i = 16; i < 80; i++) - { - s0 = X[(i + 1) & 0x0f]; - s0 = sigma0(s0); - s1 = X[(i + 14) & 0x0f]; - s1 = sigma1(s1); - - T1 = X[i & 0xf] += s0 + s1 + X[(i + 9) & 0xf]; - T1 += h + Sigma1(e) + Ch(e, f, g) + K512[i]; - T2 = Sigma0(a) + Maj(a, b, c); - - h = g; - g = f; - f = e; - e = d + T1; - d = c; - c = b; - b = a; - a = T1 + T2; - } - - state[0] += a; - state[1] += b; - state[2] += c; - state[3] += d; - state[4] += e; - state[5] += f; - state[6] += g; - state[7] += h; - } - - return (uint8_t *)(state); -} - -// int main () -//{ -// return 0; -// } diff --git a/src/xrpld/app/wasm/HostFunc.h b/src/xrpld/app/wasm/HostFunc.h index f3ed5ad6f9..ea1e171332 100644 --- a/src/xrpld/app/wasm/HostFunc.h +++ b/src/xrpld/app/wasm/HostFunc.h @@ -104,56 +104,50 @@ struct HostFunctions return nullptr; } - std::int64_t - getGas() - { - return -1; - } - - void - setGas(std::int64_t) - { - return; - } - beast::Journal - getJournal() + getJournal() const { return j_; } + virtual bool + checkSelf() const + { + return true; + } + virtual Expected - getLedgerSqn() + getLedgerSqn() const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - getParentLedgerTime() + getParentLedgerTime() const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - getParentLedgerHash() + getParentLedgerHash() const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - getBaseFee() + getBaseFee() const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - isAmendmentEnabled(uint256 const& amendmentId) + isAmendmentEnabled(uint256 const& amendmentId) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - isAmendmentEnabled(std::string_view const& amendmentName) + isAmendmentEnabled(std::string_view const& amendmentName) const { return Unexpected(HostFunctionError::INTERNAL); } @@ -165,73 +159,73 @@ struct HostFunctions } virtual Expected - getTxField(SField const& fname) + getTxField(SField const& fname) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - getCurrentLedgerObjField(SField const& fname) + getCurrentLedgerObjField(SField const& fname) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - getLedgerObjField(int32_t cacheIdx, SField const& fname) + getLedgerObjField(int32_t cacheIdx, SField const& fname) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - getTxNestedField(Slice const& locator) + getTxNestedField(Slice const& locator) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - getCurrentLedgerObjNestedField(Slice const& locator) + getCurrentLedgerObjNestedField(Slice const& locator) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - getLedgerObjNestedField(int32_t cacheIdx, Slice const& locator) + getLedgerObjNestedField(int32_t cacheIdx, Slice const& locator) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - getTxArrayLen(SField const& fname) + getTxArrayLen(SField const& fname) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - getCurrentLedgerObjArrayLen(SField const& fname) + getCurrentLedgerObjArrayLen(SField const& fname) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - getLedgerObjArrayLen(int32_t cacheIdx, SField const& fname) + getLedgerObjArrayLen(int32_t cacheIdx, SField const& fname) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - getTxNestedArrayLen(Slice const& locator) + getTxNestedArrayLen(Slice const& locator) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - getCurrentLedgerObjNestedArrayLen(Slice const& locator) + getCurrentLedgerObjNestedArrayLen(Slice const& locator) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - getLedgerObjNestedArrayLen(int32_t cacheIdx, Slice const& locator) + getLedgerObjNestedArrayLen(int32_t cacheIdx, Slice const& locator) const { return Unexpected(HostFunctionError::INTERNAL); } @@ -243,259 +237,259 @@ struct HostFunctions } virtual Expected - checkSignature(Slice const& message, Slice const& signature, Slice const& pubkey) + checkSignature(Slice const& message, Slice const& signature, Slice const& pubkey) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - computeSha512HalfHash(Slice const& data) + computeSha512HalfHash(Slice const& data) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - accountKeylet(AccountID const& account) + accountKeylet(AccountID const& account) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - ammKeylet(Asset const& issue1, Asset const& issue2) + ammKeylet(Asset const& issue1, Asset const& issue2) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - checkKeylet(AccountID const& account, std::uint32_t seq) + checkKeylet(AccountID const& account, std::uint32_t seq) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) + credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - didKeylet(AccountID const& account) + didKeylet(AccountID const& account) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - delegateKeylet(AccountID const& account, AccountID const& authorize) + delegateKeylet(AccountID const& account, AccountID const& authorize) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - depositPreauthKeylet(AccountID const& account, AccountID const& authorize) + depositPreauthKeylet(AccountID const& account, AccountID const& authorize) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - escrowKeylet(AccountID const& account, std::uint32_t seq) + escrowKeylet(AccountID const& account, std::uint32_t seq) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - lineKeylet(AccountID const& account1, AccountID const& account2, Currency const& currency) + lineKeylet(AccountID const& account1, AccountID const& account2, Currency const& currency) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - mptIssuanceKeylet(AccountID const& issuer, std::uint32_t seq) + mptIssuanceKeylet(AccountID const& issuer, std::uint32_t seq) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - mptokenKeylet(MPTID const& mptid, AccountID const& holder) + mptokenKeylet(MPTID const& mptid, AccountID const& holder) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - nftOfferKeylet(AccountID const& account, std::uint32_t seq) + nftOfferKeylet(AccountID const& account, std::uint32_t seq) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - offerKeylet(AccountID const& account, std::uint32_t seq) + offerKeylet(AccountID const& account, std::uint32_t seq) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - oracleKeylet(AccountID const& account, std::uint32_t docId) + oracleKeylet(AccountID const& account, std::uint32_t docId) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - paychanKeylet(AccountID const& account, AccountID const& destination, std::uint32_t seq) + paychanKeylet(AccountID const& account, AccountID const& destination, std::uint32_t seq) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - permissionedDomainKeylet(AccountID const& account, std::uint32_t seq) + permissionedDomainKeylet(AccountID const& account, std::uint32_t seq) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - signersKeylet(AccountID const& account) + signersKeylet(AccountID const& account) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - ticketKeylet(AccountID const& account, std::uint32_t seq) + ticketKeylet(AccountID const& account, std::uint32_t seq) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - vaultKeylet(AccountID const& account, std::uint32_t seq) + vaultKeylet(AccountID const& account, std::uint32_t seq) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - getNFT(AccountID const& account, uint256 const& nftId) + getNFT(AccountID const& account, uint256 const& nftId) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - getNFTIssuer(uint256 const& nftId) + getNFTIssuer(uint256 const& nftId) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - getNFTTaxon(uint256 const& nftId) + getNFTTaxon(uint256 const& nftId) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - getNFTFlags(uint256 const& nftId) + getNFTFlags(uint256 const& nftId) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - getNFTTransferFee(uint256 const& nftId) + getNFTTransferFee(uint256 const& nftId) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - getNFTSerial(uint256 const& nftId) + getNFTSerial(uint256 const& nftId) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - trace(std::string_view const& msg, Slice const& data, bool asHex) + trace(std::string_view const& msg, Slice const& data, bool asHex) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - traceNum(std::string_view const& msg, int64_t data) + traceNum(std::string_view const& msg, int64_t data) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - traceAccount(std::string_view const& msg, AccountID const& account) + traceAccount(std::string_view const& msg, AccountID const& account) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - traceFloat(std::string_view const& msg, Slice const& data) + traceFloat(std::string_view const& msg, Slice const& data) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - traceAmount(std::string_view const& msg, STAmount const& amount) + traceAmount(std::string_view const& msg, STAmount const& amount) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - floatFromInt(int64_t x, int32_t mode) + floatFromInt(int64_t x, int32_t mode) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - floatFromUint(uint64_t x, int32_t mode) + floatFromUint(uint64_t x, int32_t mode) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - floatSet(int64_t mantissa, int32_t exponent, int32_t mode) + floatSet(int64_t mantissa, int32_t exponent, int32_t mode) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - floatCompare(Slice const& x, Slice const& y) + floatCompare(Slice const& x, Slice const& y) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - floatAdd(Slice const& x, Slice const& y, int32_t mode) + floatAdd(Slice const& x, Slice const& y, int32_t mode) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - floatSubtract(Slice const& x, Slice const& y, int32_t mode) + floatSubtract(Slice const& x, Slice const& y, int32_t mode) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - floatMultiply(Slice const& x, Slice const& y, int32_t mode) + floatMultiply(Slice const& x, Slice const& y, int32_t mode) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - floatDivide(Slice const& x, Slice const& y, int32_t mode) + floatDivide(Slice const& x, Slice const& y, int32_t mode) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - floatRoot(Slice const& x, int32_t n, int32_t mode) + floatRoot(Slice const& x, int32_t n, int32_t mode) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - floatPower(Slice const& x, int32_t n, int32_t mode) + floatPower(Slice const& x, int32_t n, int32_t mode) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - floatLog(Slice const& x, int32_t mode) + floatLog(Slice const& x, int32_t mode) const { return Unexpected(HostFunctionError::INTERNAL); } diff --git a/src/xrpld/app/wasm/HostFuncImpl.h b/src/xrpld/app/wasm/HostFuncImpl.h index 1760be7c02..048f9338d7 100644 --- a/src/xrpld/app/wasm/HostFuncImpl.h +++ b/src/xrpld/app/wasm/HostFuncImpl.h @@ -7,44 +7,42 @@ namespace xrpl { class WasmHostFunctionsImpl : public HostFunctions { - ApplyContext& ctx; - Keylet leKey; - std::shared_ptr currentLedgerObj = nullptr; - bool isLedgerObjCached = false; + ApplyContext& ctx_; + + Keylet leKey_; + mutable std::optional> currentLedgerObj_; static int constexpr MAX_CACHE = 256; - std::array, MAX_CACHE> cache; + std::array, MAX_CACHE> cache_; + std::optional data_; void const* rt_ = nullptr; Expected, HostFunctionError> - getCurrentLedgerObj() + getCurrentLedgerObj() const { - if (!isLedgerObjCached) - { - isLedgerObjCached = true; - currentLedgerObj = ctx.view().read(leKey); - } - if (currentLedgerObj) - return currentLedgerObj; + if (!currentLedgerObj_) + currentLedgerObj_ = ctx_.view().read(leKey_); + if (*currentLedgerObj_) + return *currentLedgerObj_; return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); } Expected - normalizeCacheIndex(int32_t cacheIdx) + normalizeCacheIndex(int32_t cacheIdx) const { --cacheIdx; if (cacheIdx < 0 || cacheIdx >= MAX_CACHE) return Unexpected(HostFunctionError::SLOT_OUT_RANGE); - if (!cache[cacheIdx]) + if (!cache_[cacheIdx]) return Unexpected(HostFunctionError::EMPTY_SLOT); return cacheIdx; } template void - log(std::string_view const& msg, F&& dataFn) + log(std::string_view const& msg, F&& dataFn) const { #ifdef DEBUG_OUTPUT auto& j = std::cerr; @@ -53,7 +51,7 @@ class WasmHostFunctionsImpl : public HostFunctions return; auto j = getJournal().trace(); #endif - j << "WasmTrace[" << to_short_string(leKey.key) << "]: " << msg << " " << dataFn(); + j << "WasmTrace[" << to_short_string(leKey_.key) << "]: " << msg << " " << dataFn(); #ifdef DEBUG_OUTPUT j << std::endl; @@ -61,7 +59,7 @@ class WasmHostFunctionsImpl : public HostFunctions } public: - WasmHostFunctionsImpl(ApplyContext& ct, Keylet const& leKey) : HostFunctions(ct.journal), ctx(ct), leKey(leKey) + WasmHostFunctionsImpl(ApplyContext& ct, Keylet const& leKey) : HostFunctions(ct.journal), ctx_(ct), leKey_(leKey) { } @@ -77,6 +75,13 @@ public: return rt_; } + virtual bool + checkSelf() const override + { + return !currentLedgerObj_ && !data_ && + std::ranges::find_if(cache_, [](auto& p) { return !!p; }) == cache_.end(); + } + std::optional const& getData() const { @@ -84,193 +89,193 @@ public: } Expected - getLedgerSqn() override; + getLedgerSqn() const override; Expected - getParentLedgerTime() override; + getParentLedgerTime() const override; Expected - getParentLedgerHash() override; + getParentLedgerHash() const override; Expected - getBaseFee() override; + getBaseFee() const override; Expected - isAmendmentEnabled(uint256 const& amendmentId) override; + isAmendmentEnabled(uint256 const& amendmentId) const override; Expected - isAmendmentEnabled(std::string_view const& amendmentName) override; + isAmendmentEnabled(std::string_view const& amendmentName) const override; Expected cacheLedgerObj(uint256 const& objId, int32_t cacheIdx) override; Expected - getTxField(SField const& fname) override; + getTxField(SField const& fname) const override; Expected - getCurrentLedgerObjField(SField const& fname) override; + getCurrentLedgerObjField(SField const& fname) const override; Expected - getLedgerObjField(int32_t cacheIdx, SField const& fname) override; + getLedgerObjField(int32_t cacheIdx, SField const& fname) const override; Expected - getTxNestedField(Slice const& locator) override; + getTxNestedField(Slice const& locator) const override; Expected - getCurrentLedgerObjNestedField(Slice const& locator) override; + getCurrentLedgerObjNestedField(Slice const& locator) const override; Expected - getLedgerObjNestedField(int32_t cacheIdx, Slice const& locator) override; + getLedgerObjNestedField(int32_t cacheIdx, Slice const& locator) const override; Expected - getTxArrayLen(SField const& fname) override; + getTxArrayLen(SField const& fname) const override; Expected - getCurrentLedgerObjArrayLen(SField const& fname) override; + getCurrentLedgerObjArrayLen(SField const& fname) const override; Expected - getLedgerObjArrayLen(int32_t cacheIdx, SField const& fname) override; + getLedgerObjArrayLen(int32_t cacheIdx, SField const& fname) const override; Expected - getTxNestedArrayLen(Slice const& locator) override; + getTxNestedArrayLen(Slice const& locator) const override; Expected - getCurrentLedgerObjNestedArrayLen(Slice const& locator) override; + getCurrentLedgerObjNestedArrayLen(Slice const& locator) const override; Expected - getLedgerObjNestedArrayLen(int32_t cacheIdx, Slice const& locator) override; + getLedgerObjNestedArrayLen(int32_t cacheIdx, Slice const& locator) const override; Expected updateData(Slice const& data) override; Expected - checkSignature(Slice const& message, Slice const& signature, Slice const& pubkey) override; + checkSignature(Slice const& message, Slice const& signature, Slice const& pubkey) const override; Expected - computeSha512HalfHash(Slice const& data) override; + computeSha512HalfHash(Slice const& data) const override; Expected - accountKeylet(AccountID const& account) override; + accountKeylet(AccountID const& account) const override; Expected - ammKeylet(Asset const& issue1, Asset const& issue2) override; + ammKeylet(Asset const& issue1, Asset const& issue2) const override; Expected - checkKeylet(AccountID const& account, std::uint32_t seq) override; + checkKeylet(AccountID const& account, std::uint32_t seq) const override; Expected - credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) override; + credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) const override; Expected - didKeylet(AccountID const& account) override; + didKeylet(AccountID const& account) const override; Expected - delegateKeylet(AccountID const& account, AccountID const& authorize) override; + delegateKeylet(AccountID const& account, AccountID const& authorize) const override; Expected - depositPreauthKeylet(AccountID const& account, AccountID const& authorize) override; + depositPreauthKeylet(AccountID const& account, AccountID const& authorize) const override; Expected - escrowKeylet(AccountID const& account, std::uint32_t seq) override; + escrowKeylet(AccountID const& account, std::uint32_t seq) const override; Expected - lineKeylet(AccountID const& account1, AccountID const& account2, Currency const& currency) override; + lineKeylet(AccountID const& account1, AccountID const& account2, Currency const& currency) const override; Expected - mptIssuanceKeylet(AccountID const& issuer, std::uint32_t seq) override; + mptIssuanceKeylet(AccountID const& issuer, std::uint32_t seq) const override; Expected - mptokenKeylet(MPTID const& mptid, AccountID const& holder) override; + mptokenKeylet(MPTID const& mptid, AccountID const& holder) const override; Expected - nftOfferKeylet(AccountID const& account, std::uint32_t seq) override; + nftOfferKeylet(AccountID const& account, std::uint32_t seq) const override; Expected - offerKeylet(AccountID const& account, std::uint32_t seq) override; + offerKeylet(AccountID const& account, std::uint32_t seq) const override; Expected - oracleKeylet(AccountID const& account, std::uint32_t docId) override; + oracleKeylet(AccountID const& account, std::uint32_t docId) const override; Expected - paychanKeylet(AccountID const& account, AccountID const& destination, std::uint32_t seq) override; + paychanKeylet(AccountID const& account, AccountID const& destination, std::uint32_t seq) const override; Expected - permissionedDomainKeylet(AccountID const& account, std::uint32_t seq) override; + permissionedDomainKeylet(AccountID const& account, std::uint32_t seq) const override; Expected - signersKeylet(AccountID const& account) override; + signersKeylet(AccountID const& account) const override; Expected - ticketKeylet(AccountID const& account, std::uint32_t seq) override; + ticketKeylet(AccountID const& account, std::uint32_t seq) const override; Expected - vaultKeylet(AccountID const& account, std::uint32_t seq) override; + vaultKeylet(AccountID const& account, std::uint32_t seq) const override; Expected - getNFT(AccountID const& account, uint256 const& nftId) override; + getNFT(AccountID const& account, uint256 const& nftId) const override; Expected - getNFTIssuer(uint256 const& nftId) override; + getNFTIssuer(uint256 const& nftId) const override; Expected - getNFTTaxon(uint256 const& nftId) override; + getNFTTaxon(uint256 const& nftId) const override; Expected - getNFTFlags(uint256 const& nftId) override; + getNFTFlags(uint256 const& nftId) const override; Expected - getNFTTransferFee(uint256 const& nftId) override; + getNFTTransferFee(uint256 const& nftId) const override; Expected - getNFTSerial(uint256 const& nftId) override; + getNFTSerial(uint256 const& nftId) const override; Expected - trace(std::string_view const& msg, Slice const& data, bool asHex) override; + trace(std::string_view const& msg, Slice const& data, bool asHex) const override; Expected - traceNum(std::string_view const& msg, int64_t data) override; + traceNum(std::string_view const& msg, int64_t data) const override; Expected - traceAccount(std::string_view const& msg, AccountID const& account) override; + traceAccount(std::string_view const& msg, AccountID const& account) const override; Expected - traceFloat(std::string_view const& msg, Slice const& data) override; + traceFloat(std::string_view const& msg, Slice const& data) const override; Expected - traceAmount(std::string_view const& msg, STAmount const& amount) override; + traceAmount(std::string_view const& msg, STAmount const& amount) const override; Expected - floatFromInt(int64_t x, int32_t mode) override; + floatFromInt(int64_t x, int32_t mode) const override; Expected - floatFromUint(uint64_t x, int32_t mode) override; + floatFromUint(uint64_t x, int32_t mode) const override; Expected - floatSet(int64_t mantissa, int32_t exponent, int32_t mode) override; + floatSet(int64_t mantissa, int32_t exponent, int32_t mode) const override; Expected - floatCompare(Slice const& x, Slice const& y) override; + floatCompare(Slice const& x, Slice const& y) const override; Expected - floatAdd(Slice const& x, Slice const& y, int32_t mode) override; + floatAdd(Slice const& x, Slice const& y, int32_t mode) const override; Expected - floatSubtract(Slice const& x, Slice const& y, int32_t mode) override; + floatSubtract(Slice const& x, Slice const& y, int32_t mode) const override; Expected - floatMultiply(Slice const& x, Slice const& y, int32_t mode) override; + floatMultiply(Slice const& x, Slice const& y, int32_t mode) const override; Expected - floatDivide(Slice const& x, Slice const& y, int32_t mode) override; + floatDivide(Slice const& x, Slice const& y, int32_t mode) const override; Expected - floatRoot(Slice const& x, int32_t n, int32_t mode) override; + floatRoot(Slice const& x, int32_t n, int32_t mode) const override; Expected - floatPower(Slice const& x, int32_t n, int32_t mode) override; + floatPower(Slice const& x, int32_t n, int32_t mode) const override; Expected - floatLog(Slice const& x, int32_t mode) override; + floatLog(Slice const& x, int32_t mode) const override; }; namespace wasm_float { diff --git a/src/xrpld/app/wasm/ParamsHelper.h b/src/xrpld/app/wasm/ParamsHelper.h index 90ecb4caa5..40b9405dcc 100644 --- a/src/xrpld/app/wasm/ParamsHelper.h +++ b/src/xrpld/app/wasm/ParamsHelper.h @@ -173,52 +173,6 @@ wasmParamsHlp(std::vector& v, std::int64_t p, Types&&... args) // wasmParamsHlp(v, std::forward(args)...); // } -template -inline void -wasmParamsHlp(std::vector& v, std::uint8_t const* dt, std::int32_t sz, Types&&... args) -{ - v.push_back({.type = WT_U8V, .of = {.u8v = {.d = dt, .sz = sz}}}); - wasmParamsHlp(v, std::forward(args)...); -} - -template -inline void -wasmParamsHlp(std::vector& v, Bytes const& p, Types&&... args) -{ - if (p.size() > std::numeric_limits::max()) - throw std::runtime_error("can't allocate memory, size: " + std::to_string(p.size())); // LCOV_EXCL_LINE - - wasmParamsHlp(v, p.data(), static_cast(p.size()), std::forward(args)...); -} - -template -inline void -wasmParamsHlp(std::vector& v, std::string_view const& p, Types&&... args) -{ - if (p.size() > std::numeric_limits::max()) - throw std::runtime_error("can't allocate memory, size: " + std::to_string(p.size())); - - wasmParamsHlp( - v, - reinterpret_cast(p.data()), - static_cast(p.size()), - std::forward(args)...); -} - -template -inline void -wasmParamsHlp(std::vector& v, std::string const& p, Types&&... args) -{ - if (p.size() > std::numeric_limits::max()) - throw std::runtime_error("can't allocate memory, size: " + std::to_string(p.size())); // LCOV_EXCL_LINE - - wasmParamsHlp( - v, - reinterpret_cast(p.c_str()), - static_cast(p.size()), - std::forward(args)...); -} - inline void wasmParamsHlp(std::vector& v) { diff --git a/src/xrpld/app/wasm/WasmVM.h b/src/xrpld/app/wasm/WasmVM.h index f14c475dc5..27b1cc38c9 100644 --- a/src/xrpld/app/wasm/WasmVM.h +++ b/src/xrpld/app/wasm/WasmVM.h @@ -24,7 +24,7 @@ class WasmiEngine; class WasmEngine { - std::unique_ptr const impl; + std::unique_ptr const impl_; WasmEngine(); @@ -43,20 +43,20 @@ public: Expected, TER> run(Bytes const& wasmCode, + HostFunctions& hfs, std::string_view funcName = {}, std::vector const& params = {}, - std::shared_ptr const& imports = {}, - std::shared_ptr const& hfs = {}, + ImportVec const& imports = {}, int64_t gasLimit = -1, beast::Journal j = beast::Journal{beast::Journal::getNullSink()}); NotTEC check( Bytes const& wasmCode, + HostFunctions& hfs, std::string_view funcName, std::vector const& params = {}, - std::shared_ptr const& imports = {}, - std::shared_ptr const& hfs = {}, + ImportVec const& imports = {}, beast::Journal j = beast::Journal{beast::Journal::getNullSink()}); // Host functions helper functionality @@ -69,13 +69,13 @@ public: //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -std::shared_ptr +ImportVec createWasmImport(HostFunctions& hfs); Expected runEscrowWasm( Bytes const& wasmCode, - std::shared_ptr const& hfs, + HostFunctions& hfs, std::string_view funcName = ESCROW_FUNCTION_NAME, std::vector const& params = {}, int64_t gasLimit = -1); @@ -83,7 +83,7 @@ runEscrowWasm( NotTEC preflightEscrowWasm( Bytes const& wasmCode, - std::shared_ptr const& hfs, + HostFunctions& hfs, std::string_view funcName = ESCROW_FUNCTION_NAME, std::vector const& params = {}); diff --git a/src/xrpld/app/wasm/WasmiVM.h b/src/xrpld/app/wasm/WasmiVM.h index 9274375632..10381b3cc5 100644 --- a/src/xrpld/app/wasm/WasmiVM.h +++ b/src/xrpld/app/wasm/WasmiVM.h @@ -145,12 +145,7 @@ public: ModuleWrapper(ModuleWrapper&& o); ModuleWrapper& operator=(ModuleWrapper&& o); - ModuleWrapper( - StorePtr& s, - Bytes const& wasmBin, - bool instantiate, - std::shared_ptr const& imports, - beast::Journal j); + ModuleWrapper(StorePtr& s, Bytes const& wasmBin, bool instantiate, ImportVec const& imports, beast::Journal j); ~ModuleWrapper() = default; operator bool() const; @@ -175,7 +170,7 @@ public: private: WasmExternVec - buildImports(StorePtr& s, std::shared_ptr const& imports); + buildImports(StorePtr& s, ImportVec const& imports); }; class WasmiEngine @@ -187,10 +182,6 @@ class WasmiEngine std::mutex m_; // 1 instance mutex - // to ensure lifetime during next executions with the same module - std::shared_ptr imports_; - std::shared_ptr hfs_; - public: WasmiEngine(); ~WasmiEngine() = default; @@ -200,24 +191,24 @@ public: Expected, TER> run(Bytes const& wasmCode, + HostFunctions& hfs, std::string_view funcName, std::vector const& params, - std::shared_ptr const& imports, - std::shared_ptr const& hfs, + ImportVec const& imports, int64_t gas, beast::Journal j); NotTEC check( Bytes const& wasmCode, + HostFunctions& hfs, std::string_view funcName, std::vector const& params, - std::shared_ptr const& imports, - std::shared_ptr const& hfs, + ImportVec const& imports, beast::Journal j); std::int64_t - getGas(); + getGas() const; // Host functions helper functionality wasm_trap_t* @@ -228,22 +219,30 @@ public: private: InstanceWrapper const& - getRT(int m = 0, int i = 0); + getRT(int m = 0, int i = 0) const; wmem getMem() const; - int32_t - allocate(int32_t size); - Expected, TER> - runHlp(Bytes const& wasmCode, std::string_view funcName, std::vector const& params, int64_t gas); + runHlp( + Bytes const& wasmCode, + HostFunctions& hfs, + std::string_view funcName, + std::vector const& params, + ImportVec const& imports, + int64_t gas); NotTEC - checkHlp(Bytes const& wasmCode, std::string_view funcName, std::vector const& params); + checkHlp( + Bytes const& wasmCode, + HostFunctions& hfs, + std::string_view funcName, + std::vector const& params, + ImportVec const& imports); int - addModule(Bytes const& wasmCode, bool instantiate, int64_t gas); + addModule(Bytes const& wasmCode, bool instantiate, ImportVec const& imports, int64_t gas); void clearModules(); @@ -256,7 +255,7 @@ private: makeModule(Bytes const& wasmCode, WasmExternVec const& imports = {}); FuncInfo - getFunc(std::string_view funcName); + getFunc(std::string_view funcName) const; std::vector convertParams(std::vector const& params); diff --git a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp index dfff35727f..58420e5855 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImpl.cpp @@ -25,7 +25,7 @@ WasmHostFunctionsImpl::updateData(Slice const& data) // ========================================================= Expected -WasmHostFunctionsImpl::checkSignature(Slice const& message, Slice const& signature, Slice const& pubkey) +WasmHostFunctionsImpl::checkSignature(Slice const& message, Slice const& signature, Slice const& pubkey) const { if (!publicKeyType(pubkey)) return Unexpected(HostFunctionError::INVALID_PARAMS); @@ -35,7 +35,7 @@ WasmHostFunctionsImpl::checkSignature(Slice const& message, Slice const& signatu } Expected -WasmHostFunctionsImpl::computeSha512HalfHash(Slice const& data) +WasmHostFunctionsImpl::computeSha512HalfHash(Slice const& data) const { auto const hash = sha512Half(data); return hash; diff --git a/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp b/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp index abff96a08d..fca532407a 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp @@ -480,67 +480,67 @@ floatLogImpl(Slice const& x, int32_t mode) // ========================================================= Expected -WasmHostFunctionsImpl::floatFromInt(int64_t x, int32_t mode) +WasmHostFunctionsImpl::floatFromInt(int64_t x, int32_t mode) const { return wasm_float::floatFromIntImpl(x, mode); } Expected -WasmHostFunctionsImpl::floatFromUint(uint64_t x, int32_t mode) +WasmHostFunctionsImpl::floatFromUint(uint64_t x, int32_t mode) const { return wasm_float::floatFromUintImpl(x, mode); } Expected -WasmHostFunctionsImpl::floatSet(int64_t mantissa, int32_t exponent, int32_t mode) +WasmHostFunctionsImpl::floatSet(int64_t mantissa, int32_t exponent, int32_t mode) const { return wasm_float::floatSetImpl(mantissa, exponent, mode); } Expected -WasmHostFunctionsImpl::floatCompare(Slice const& x, Slice const& y) +WasmHostFunctionsImpl::floatCompare(Slice const& x, Slice const& y) const { return wasm_float::floatCompareImpl(x, y); } Expected -WasmHostFunctionsImpl::floatAdd(Slice const& x, Slice const& y, int32_t mode) +WasmHostFunctionsImpl::floatAdd(Slice const& x, Slice const& y, int32_t mode) const { return wasm_float::floatAddImpl(x, y, mode); } Expected -WasmHostFunctionsImpl::floatSubtract(Slice const& x, Slice const& y, int32_t mode) +WasmHostFunctionsImpl::floatSubtract(Slice const& x, Slice const& y, int32_t mode) const { return wasm_float::floatSubtractImpl(x, y, mode); } Expected -WasmHostFunctionsImpl::floatMultiply(Slice const& x, Slice const& y, int32_t mode) +WasmHostFunctionsImpl::floatMultiply(Slice const& x, Slice const& y, int32_t mode) const { return wasm_float::floatMultiplyImpl(x, y, mode); } Expected -WasmHostFunctionsImpl::floatDivide(Slice const& x, Slice const& y, int32_t mode) +WasmHostFunctionsImpl::floatDivide(Slice const& x, Slice const& y, int32_t mode) const { return wasm_float::floatDivideImpl(x, y, mode); } Expected -WasmHostFunctionsImpl::floatRoot(Slice const& x, int32_t n, int32_t mode) +WasmHostFunctionsImpl::floatRoot(Slice const& x, int32_t n, int32_t mode) const { return wasm_float::floatRootImpl(x, n, mode); } Expected -WasmHostFunctionsImpl::floatPower(Slice const& x, int32_t n, int32_t mode) +WasmHostFunctionsImpl::floatPower(Slice const& x, int32_t n, int32_t mode) const { return wasm_float::floatPowerImpl(x, n, mode); } Expected -WasmHostFunctionsImpl::floatLog(Slice const& x, int32_t mode) +WasmHostFunctionsImpl::floatLog(Slice const& x, int32_t mode) const { return wasm_float::floatLogImpl(x, mode); } diff --git a/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp b/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp index 163ab4e65f..f38e77091d 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp @@ -223,7 +223,7 @@ WasmHostFunctionsImpl::cacheLedgerObj(uint256 const& objId, int32_t cacheIdx) if (cacheIdx == 0) { for (cacheIdx = 0; cacheIdx < MAX_CACHE; ++cacheIdx) - if (!cache[cacheIdx]) + if (!cache_[cacheIdx]) break; } else @@ -234,8 +234,8 @@ WasmHostFunctionsImpl::cacheLedgerObj(uint256 const& objId, int32_t cacheIdx) if (cacheIdx >= MAX_CACHE) return Unexpected(HostFunctionError::SLOTS_FULL); - cache[cacheIdx] = ctx.view().read(keylet); - if (!cache[cacheIdx]) + cache_[cacheIdx] = ctx_.view().read(keylet); + if (!cache_[cacheIdx]) return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); return cacheIdx + 1; // return 1-based index } @@ -243,13 +243,13 @@ WasmHostFunctionsImpl::cacheLedgerObj(uint256 const& objId, int32_t cacheIdx) // Subsection: top level getters Expected -WasmHostFunctionsImpl::getTxField(SField const& fname) +WasmHostFunctionsImpl::getTxField(SField const& fname) const { - return detail::getAnyFieldData(ctx.tx.peekAtPField(fname)); + return detail::getAnyFieldData(ctx_.tx.peekAtPField(fname)); } Expected -WasmHostFunctionsImpl::getCurrentLedgerObjField(SField const& fname) +WasmHostFunctionsImpl::getCurrentLedgerObjField(SField const& fname) const { auto const sle = getCurrentLedgerObj(); if (!sle.has_value()) @@ -258,20 +258,20 @@ WasmHostFunctionsImpl::getCurrentLedgerObjField(SField const& fname) } Expected -WasmHostFunctionsImpl::getLedgerObjField(int32_t cacheIdx, SField const& fname) +WasmHostFunctionsImpl::getLedgerObjField(int32_t cacheIdx, SField const& fname) const { auto const normalizedIdx = normalizeCacheIndex(cacheIdx); if (!normalizedIdx.has_value()) return Unexpected(normalizedIdx.error()); - return detail::getAnyFieldData(cache[normalizedIdx.value()]->peekAtPField(fname)); + return detail::getAnyFieldData(cache_[normalizedIdx.value()]->peekAtPField(fname)); } // Subsection: nested getters Expected -WasmHostFunctionsImpl::getTxNestedField(Slice const& locator) +WasmHostFunctionsImpl::getTxNestedField(Slice const& locator) const { - auto const r = detail::locateField(ctx.tx, locator); + auto const r = detail::locateField(ctx_.tx, locator); if (!r) return Unexpected(r.error()); @@ -279,7 +279,7 @@ WasmHostFunctionsImpl::getTxNestedField(Slice const& locator) } Expected -WasmHostFunctionsImpl::getCurrentLedgerObjNestedField(Slice const& locator) +WasmHostFunctionsImpl::getCurrentLedgerObjNestedField(Slice const& locator) const { auto const sle = getCurrentLedgerObj(); if (!sle.has_value()) @@ -293,13 +293,13 @@ WasmHostFunctionsImpl::getCurrentLedgerObjNestedField(Slice const& locator) } Expected -WasmHostFunctionsImpl::getLedgerObjNestedField(int32_t cacheIdx, Slice const& locator) +WasmHostFunctionsImpl::getLedgerObjNestedField(int32_t cacheIdx, Slice const& locator) const { auto const normalizedIdx = normalizeCacheIndex(cacheIdx); if (!normalizedIdx.has_value()) return Unexpected(normalizedIdx.error()); - auto const r = detail::locateField(*cache[normalizedIdx.value()], locator); + auto const r = detail::locateField(*cache_[normalizedIdx.value()], locator); if (!r) return Unexpected(r.error()); @@ -309,12 +309,12 @@ WasmHostFunctionsImpl::getLedgerObjNestedField(int32_t cacheIdx, Slice const& lo // Subsection: array length getters Expected -WasmHostFunctionsImpl::getTxArrayLen(SField const& fname) +WasmHostFunctionsImpl::getTxArrayLen(SField const& fname) const { if (fname.fieldType != STI_ARRAY && fname.fieldType != STI_VECTOR256) return Unexpected(HostFunctionError::NO_ARRAY); - auto const* field = ctx.tx.peekAtPField(fname); + auto const* field = ctx_.tx.peekAtPField(fname); if (detail::noField(field)) return Unexpected(HostFunctionError::FIELD_NOT_FOUND); @@ -322,7 +322,7 @@ WasmHostFunctionsImpl::getTxArrayLen(SField const& fname) } Expected -WasmHostFunctionsImpl::getCurrentLedgerObjArrayLen(SField const& fname) +WasmHostFunctionsImpl::getCurrentLedgerObjArrayLen(SField const& fname) const { if (fname.fieldType != STI_ARRAY && fname.fieldType != STI_VECTOR256) return Unexpected(HostFunctionError::NO_ARRAY); @@ -339,7 +339,7 @@ WasmHostFunctionsImpl::getCurrentLedgerObjArrayLen(SField const& fname) } Expected -WasmHostFunctionsImpl::getLedgerObjArrayLen(int32_t cacheIdx, SField const& fname) +WasmHostFunctionsImpl::getLedgerObjArrayLen(int32_t cacheIdx, SField const& fname) const { if (fname.fieldType != STI_ARRAY && fname.fieldType != STI_VECTOR256) return Unexpected(HostFunctionError::NO_ARRAY); @@ -348,7 +348,7 @@ WasmHostFunctionsImpl::getLedgerObjArrayLen(int32_t cacheIdx, SField const& fnam if (!normalizedIdx.has_value()) return Unexpected(normalizedIdx.error()); - auto const* field = cache[normalizedIdx.value()]->peekAtPField(fname); + auto const* field = cache_[normalizedIdx.value()]->peekAtPField(fname); if (detail::noField(field)) return Unexpected(HostFunctionError::FIELD_NOT_FOUND); @@ -358,9 +358,9 @@ WasmHostFunctionsImpl::getLedgerObjArrayLen(int32_t cacheIdx, SField const& fnam // Subsection: nested array length getters Expected -WasmHostFunctionsImpl::getTxNestedArrayLen(Slice const& locator) +WasmHostFunctionsImpl::getTxNestedArrayLen(Slice const& locator) const { - auto const r = detail::locateField(ctx.tx, locator); + auto const r = detail::locateField(ctx_.tx, locator); if (!r) return Unexpected(r.error()); @@ -369,7 +369,7 @@ WasmHostFunctionsImpl::getTxNestedArrayLen(Slice const& locator) } Expected -WasmHostFunctionsImpl::getCurrentLedgerObjNestedArrayLen(Slice const& locator) +WasmHostFunctionsImpl::getCurrentLedgerObjNestedArrayLen(Slice const& locator) const { auto const sle = getCurrentLedgerObj(); if (!sle.has_value()) @@ -383,13 +383,13 @@ WasmHostFunctionsImpl::getCurrentLedgerObjNestedArrayLen(Slice const& locator) } Expected -WasmHostFunctionsImpl::getLedgerObjNestedArrayLen(int32_t cacheIdx, Slice const& locator) +WasmHostFunctionsImpl::getLedgerObjNestedArrayLen(int32_t cacheIdx, Slice const& locator) const { auto const normalizedIdx = normalizeCacheIndex(cacheIdx); if (!normalizedIdx.has_value()) return Unexpected(normalizedIdx.error()); - auto const r = detail::locateField(*cache[normalizedIdx.value()], locator); + auto const r = detail::locateField(*cache_[normalizedIdx.value()], locator); if (!r) return Unexpected(r.error()); diff --git a/src/xrpld/app/wasm/detail/HostFuncImplKeylet.cpp b/src/xrpld/app/wasm/detail/HostFuncImplKeylet.cpp index a006b584e4..64afce9d21 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplKeylet.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplKeylet.cpp @@ -6,7 +6,7 @@ namespace xrpl { Expected -WasmHostFunctionsImpl::accountKeylet(AccountID const& account) +WasmHostFunctionsImpl::accountKeylet(AccountID const& account) const { if (!account) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -15,7 +15,7 @@ WasmHostFunctionsImpl::accountKeylet(AccountID const& account) } Expected -WasmHostFunctionsImpl::ammKeylet(Asset const& issue1, Asset const& issue2) +WasmHostFunctionsImpl::ammKeylet(Asset const& issue1, Asset const& issue2) const { if (issue1 == issue2) return Unexpected(HostFunctionError::INVALID_PARAMS); @@ -29,7 +29,7 @@ WasmHostFunctionsImpl::ammKeylet(Asset const& issue1, Asset const& issue2) } Expected -WasmHostFunctionsImpl::checkKeylet(AccountID const& account, std::uint32_t seq) +WasmHostFunctionsImpl::checkKeylet(AccountID const& account, std::uint32_t seq) const { if (!account) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -39,6 +39,7 @@ WasmHostFunctionsImpl::checkKeylet(AccountID const& account, std::uint32_t seq) Expected WasmHostFunctionsImpl::credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) + const { if (!subject || !issuer) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -52,7 +53,7 @@ WasmHostFunctionsImpl::credentialKeylet(AccountID const& subject, AccountID cons } Expected -WasmHostFunctionsImpl::didKeylet(AccountID const& account) +WasmHostFunctionsImpl::didKeylet(AccountID const& account) const { if (!account) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -61,7 +62,7 @@ WasmHostFunctionsImpl::didKeylet(AccountID const& account) } Expected -WasmHostFunctionsImpl::delegateKeylet(AccountID const& account, AccountID const& authorize) +WasmHostFunctionsImpl::delegateKeylet(AccountID const& account, AccountID const& authorize) const { if (!account || !authorize) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -72,7 +73,7 @@ WasmHostFunctionsImpl::delegateKeylet(AccountID const& account, AccountID const& } Expected -WasmHostFunctionsImpl::depositPreauthKeylet(AccountID const& account, AccountID const& authorize) +WasmHostFunctionsImpl::depositPreauthKeylet(AccountID const& account, AccountID const& authorize) const { if (!account || !authorize) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -83,7 +84,7 @@ WasmHostFunctionsImpl::depositPreauthKeylet(AccountID const& account, AccountID } Expected -WasmHostFunctionsImpl::escrowKeylet(AccountID const& account, std::uint32_t seq) +WasmHostFunctionsImpl::escrowKeylet(AccountID const& account, std::uint32_t seq) const { if (!account) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -92,7 +93,7 @@ WasmHostFunctionsImpl::escrowKeylet(AccountID const& account, std::uint32_t seq) } Expected -WasmHostFunctionsImpl::lineKeylet(AccountID const& account1, AccountID const& account2, Currency const& currency) +WasmHostFunctionsImpl::lineKeylet(AccountID const& account1, AccountID const& account2, Currency const& currency) const { if (!account1 || !account2) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -106,7 +107,7 @@ WasmHostFunctionsImpl::lineKeylet(AccountID const& account1, AccountID const& ac } Expected -WasmHostFunctionsImpl::mptIssuanceKeylet(AccountID const& issuer, std::uint32_t seq) +WasmHostFunctionsImpl::mptIssuanceKeylet(AccountID const& issuer, std::uint32_t seq) const { if (!issuer) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -116,7 +117,7 @@ WasmHostFunctionsImpl::mptIssuanceKeylet(AccountID const& issuer, std::uint32_t } Expected -WasmHostFunctionsImpl::mptokenKeylet(MPTID const& mptid, AccountID const& holder) +WasmHostFunctionsImpl::mptokenKeylet(MPTID const& mptid, AccountID const& holder) const { if (!mptid) return Unexpected(HostFunctionError::INVALID_PARAMS); @@ -128,7 +129,7 @@ WasmHostFunctionsImpl::mptokenKeylet(MPTID const& mptid, AccountID const& holder } Expected -WasmHostFunctionsImpl::nftOfferKeylet(AccountID const& account, std::uint32_t seq) +WasmHostFunctionsImpl::nftOfferKeylet(AccountID const& account, std::uint32_t seq) const { if (!account) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -137,7 +138,7 @@ WasmHostFunctionsImpl::nftOfferKeylet(AccountID const& account, std::uint32_t se } Expected -WasmHostFunctionsImpl::offerKeylet(AccountID const& account, std::uint32_t seq) +WasmHostFunctionsImpl::offerKeylet(AccountID const& account, std::uint32_t seq) const { if (!account) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -146,7 +147,7 @@ WasmHostFunctionsImpl::offerKeylet(AccountID const& account, std::uint32_t seq) } Expected -WasmHostFunctionsImpl::oracleKeylet(AccountID const& account, std::uint32_t documentId) +WasmHostFunctionsImpl::oracleKeylet(AccountID const& account, std::uint32_t documentId) const { if (!account) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -155,7 +156,7 @@ WasmHostFunctionsImpl::oracleKeylet(AccountID const& account, std::uint32_t docu } Expected -WasmHostFunctionsImpl::paychanKeylet(AccountID const& account, AccountID const& destination, std::uint32_t seq) +WasmHostFunctionsImpl::paychanKeylet(AccountID const& account, AccountID const& destination, std::uint32_t seq) const { if (!account || !destination) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -166,7 +167,7 @@ WasmHostFunctionsImpl::paychanKeylet(AccountID const& account, AccountID const& } Expected -WasmHostFunctionsImpl::permissionedDomainKeylet(AccountID const& account, std::uint32_t seq) +WasmHostFunctionsImpl::permissionedDomainKeylet(AccountID const& account, std::uint32_t seq) const { if (!account) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -175,7 +176,7 @@ WasmHostFunctionsImpl::permissionedDomainKeylet(AccountID const& account, std::u } Expected -WasmHostFunctionsImpl::signersKeylet(AccountID const& account) +WasmHostFunctionsImpl::signersKeylet(AccountID const& account) const { if (!account) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -184,7 +185,7 @@ WasmHostFunctionsImpl::signersKeylet(AccountID const& account) } Expected -WasmHostFunctionsImpl::ticketKeylet(AccountID const& account, std::uint32_t seq) +WasmHostFunctionsImpl::ticketKeylet(AccountID const& account, std::uint32_t seq) const { if (!account) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -193,7 +194,7 @@ WasmHostFunctionsImpl::ticketKeylet(AccountID const& account, std::uint32_t seq) } Expected -WasmHostFunctionsImpl::vaultKeylet(AccountID const& account, std::uint32_t seq) +WasmHostFunctionsImpl::vaultKeylet(AccountID const& account, std::uint32_t seq) const { if (!account) return Unexpected(HostFunctionError::INVALID_ACCOUNT); diff --git a/src/xrpld/app/wasm/detail/HostFuncImplLedgerHeader.cpp b/src/xrpld/app/wasm/detail/HostFuncImplLedgerHeader.cpp index 37e2796bf6..e7cb31d851 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplLedgerHeader.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplLedgerHeader.cpp @@ -10,41 +10,41 @@ namespace xrpl { // ========================================================= Expected -WasmHostFunctionsImpl::getLedgerSqn() +WasmHostFunctionsImpl::getLedgerSqn() const { - return ctx.view().seq(); + return ctx_.view().seq(); } Expected -WasmHostFunctionsImpl::getParentLedgerTime() +WasmHostFunctionsImpl::getParentLedgerTime() const { - return ctx.view().parentCloseTime().time_since_epoch().count(); + return ctx_.view().parentCloseTime().time_since_epoch().count(); } Expected -WasmHostFunctionsImpl::getParentLedgerHash() +WasmHostFunctionsImpl::getParentLedgerHash() const { - return ctx.view().header().parentHash; + return ctx_.view().header().parentHash; } Expected -WasmHostFunctionsImpl::getBaseFee() +WasmHostFunctionsImpl::getBaseFee() const { - return ctx.view().fees().base.drops(); + return ctx_.view().fees().base.drops(); } Expected -WasmHostFunctionsImpl::isAmendmentEnabled(uint256 const& amendmentId) +WasmHostFunctionsImpl::isAmendmentEnabled(uint256 const& amendmentId) const { - return ctx.view().rules().enabled(amendmentId); + return ctx_.view().rules().enabled(amendmentId); } Expected -WasmHostFunctionsImpl::isAmendmentEnabled(std::string_view const& amendmentName) +WasmHostFunctionsImpl::isAmendmentEnabled(std::string_view const& amendmentName) const { - auto const& table = ctx.registry.getAmendmentTable(); + auto const& table = ctx_.registry.getAmendmentTable(); auto const amendment = table.find(std::string(amendmentName)); - return ctx.view().rules().enabled(amendment); + return ctx_.view().rules().enabled(amendment); } } // namespace xrpl diff --git a/src/xrpld/app/wasm/detail/HostFuncImplNFT.cpp b/src/xrpld/app/wasm/detail/HostFuncImplNFT.cpp index 298cd1f941..164d4d90fd 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplNFT.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplNFT.cpp @@ -11,7 +11,7 @@ namespace xrpl { // ========================================================= Expected -WasmHostFunctionsImpl::getNFT(AccountID const& account, uint256 const& nftId) +WasmHostFunctionsImpl::getNFT(AccountID const& account, uint256 const& nftId) const { if (!account) return Unexpected(HostFunctionError::INVALID_ACCOUNT); @@ -19,7 +19,7 @@ WasmHostFunctionsImpl::getNFT(AccountID const& account, uint256 const& nftId) if (!nftId) return Unexpected(HostFunctionError::INVALID_PARAMS); - auto obj = nft::findToken(ctx.view(), account, nftId); + auto obj = nft::findToken(ctx_.view(), account, nftId); if (!obj) return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); @@ -32,7 +32,7 @@ WasmHostFunctionsImpl::getNFT(AccountID const& account, uint256 const& nftId) } Expected -WasmHostFunctionsImpl::getNFTIssuer(uint256 const& nftId) +WasmHostFunctionsImpl::getNFTIssuer(uint256 const& nftId) const { auto const issuer = nft::getIssuer(nftId); if (!issuer) @@ -42,25 +42,25 @@ WasmHostFunctionsImpl::getNFTIssuer(uint256 const& nftId) } Expected -WasmHostFunctionsImpl::getNFTTaxon(uint256 const& nftId) +WasmHostFunctionsImpl::getNFTTaxon(uint256 const& nftId) const { return nft::toUInt32(nft::getTaxon(nftId)); } Expected -WasmHostFunctionsImpl::getNFTFlags(uint256 const& nftId) +WasmHostFunctionsImpl::getNFTFlags(uint256 const& nftId) const { return nft::getFlags(nftId); } Expected -WasmHostFunctionsImpl::getNFTTransferFee(uint256 const& nftId) +WasmHostFunctionsImpl::getNFTTransferFee(uint256 const& nftId) const { return nft::getTransferFee(nftId); } Expected -WasmHostFunctionsImpl::getNFTSerial(uint256 const& nftId) +WasmHostFunctionsImpl::getNFTSerial(uint256 const& nftId) const { return nft::getSerial(nftId); } diff --git a/src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp b/src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp index c3b0b95529..14a13a12c8 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp @@ -10,7 +10,7 @@ namespace xrpl { Expected -WasmHostFunctionsImpl::trace(std::string_view const& msg, Slice const& data, bool asHex) +WasmHostFunctionsImpl::trace(std::string_view const& msg, Slice const& data, bool asHex) const { if (!asHex) { @@ -30,28 +30,28 @@ WasmHostFunctionsImpl::trace(std::string_view const& msg, Slice const& data, boo } Expected -WasmHostFunctionsImpl::traceNum(std::string_view const& msg, int64_t data) +WasmHostFunctionsImpl::traceNum(std::string_view const& msg, int64_t data) const { log(msg, [data] { return data; }); return 0; } Expected -WasmHostFunctionsImpl::traceAccount(std::string_view const& msg, AccountID const& account) +WasmHostFunctionsImpl::traceAccount(std::string_view const& msg, AccountID const& account) const { log(msg, [&account] { return toBase58(account); }); return 0; } Expected -WasmHostFunctionsImpl::traceFloat(std::string_view const& msg, Slice const& data) +WasmHostFunctionsImpl::traceFloat(std::string_view const& msg, Slice const& data) const { log(msg, [&data] { return wasm_float::floatToString(data); }); return 0; } Expected -WasmHostFunctionsImpl::traceAmount(std::string_view const& msg, STAmount const& amount) +WasmHostFunctionsImpl::traceAmount(std::string_view const& msg, STAmount const& amount) const { log(msg, [&amount] { return amount.getFullText(); }); return 0; diff --git a/src/xrpld/app/wasm/detail/WasmVM.cpp b/src/xrpld/app/wasm/detail/WasmVM.cpp index 23edbd2370..99fe4f74d6 100644 --- a/src/xrpld/app/wasm/detail/WasmVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmVM.cpp @@ -89,21 +89,21 @@ setCommonHostFunctions(HostFunctions* hfs, ImportVec& i) // clang-format on } -std::shared_ptr +ImportVec createWasmImport(HostFunctions& hfs) { - std::shared_ptr i(std::make_shared()); + ImportVec import; - setCommonHostFunctions(&hfs, *i); - WASM_IMPORT_FUNC2(*i, updateData, "update_data", &hfs, 1000); + setCommonHostFunctions(&hfs, import); + WASM_IMPORT_FUNC2(import, updateData, "update_data", &hfs, 1000); - return i; + return import; } Expected runEscrowWasm( Bytes const& wasmCode, - std::shared_ptr const& hfs, + HostFunctions& hfs, std::string_view funcName, std::vector const& params, int64_t gasLimit) @@ -112,7 +112,7 @@ runEscrowWasm( auto& vm = WasmEngine::instance(); // vm.initMaxPages(MAX_PAGES); - auto const ret = vm.run(wasmCode, funcName, params, createWasmImport(*hfs), hfs, gasLimit, hfs->getJournal()); + auto const ret = vm.run(wasmCode, hfs, funcName, params, createWasmImport(hfs), gasLimit, hfs.getJournal()); // std::cout << "runEscrowWasm, mod size: " << wasmCode.size() // << ", gasLimit: " << gasLimit << ", funcName: " << funcName; @@ -134,7 +134,7 @@ runEscrowWasm( NotTEC preflightEscrowWasm( Bytes const& wasmCode, - std::shared_ptr const& hfs, + HostFunctions& hfs, std::string_view funcName, std::vector const& params) { @@ -142,14 +142,14 @@ preflightEscrowWasm( auto& vm = WasmEngine::instance(); // vm.initMaxPages(MAX_PAGES); - auto const ret = vm.check(wasmCode, funcName, params, createWasmImport(*hfs), hfs, hfs->getJournal()); + auto const ret = vm.check(wasmCode, hfs, funcName, params, createWasmImport(hfs), hfs.getJournal()); return ret; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -WasmEngine::WasmEngine() : impl(std::make_unique()) +WasmEngine::WasmEngine() : impl_(std::make_unique()) { } @@ -163,39 +163,39 @@ WasmEngine::instance() Expected, TER> WasmEngine::run( Bytes const& wasmCode, + HostFunctions& hfs, std::string_view funcName, std::vector const& params, - std::shared_ptr const& imports, - std::shared_ptr const& hfs, + ImportVec const& imports, int64_t gasLimit, beast::Journal j) { - return impl->run(wasmCode, funcName, params, imports, hfs, gasLimit, j); + return impl_->run(wasmCode, hfs, funcName, params, imports, gasLimit, j); } NotTEC WasmEngine::check( Bytes const& wasmCode, + HostFunctions& hfs, std::string_view funcName, std::vector const& params, - std::shared_ptr const& imports, - std::shared_ptr const& hfs, + ImportVec const& imports, beast::Journal j) { - return impl->check(wasmCode, funcName, params, imports, hfs, j); + return impl_->check(wasmCode, hfs, funcName, params, imports, j); } void* WasmEngine::newTrap(std::string const& msg) { - return impl->newTrap(msg); + return impl_->newTrap(msg); } // LCOV_EXCL_START beast::Journal WasmEngine::getJournal() const { - return impl->getJournal(); + return impl_->getJournal(); } // LCOV_EXCL_STOP diff --git a/src/xrpld/app/wasm/detail/WasmiVM.cpp b/src/xrpld/app/wasm/detail/WasmiVM.cpp index bdf60ac7ec..7472d554c7 100644 --- a/src/xrpld/app/wasm/detail/WasmiVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmiVM.cpp @@ -233,7 +233,7 @@ ModuleWrapper::ModuleWrapper( StorePtr& s, Bytes const& wasmBin, bool instantiate, - std::shared_ptr const& imports, + ImportVec const& imports, beast::Journal j) : module_(init(s, wasmBin, j)), j_(j) { @@ -321,14 +321,14 @@ makeImpReturn(WasmImportFunc const& imp) } WasmExternVec -ModuleWrapper::buildImports(StorePtr& s, std::shared_ptr const& imports) +ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) { WasmImporttypeVec importTypes; wasm_module_imports(module_.get(), &importTypes.vec_); if (!importTypes.vec_.size) return {}; - if (!imports) + if (imports.empty()) throw std::runtime_error("Missing imports"); WasmExternVec wimports(importTypes.vec_.size); @@ -352,7 +352,7 @@ ModuleWrapper::buildImports(StorePtr& s, std::shared_ptr const& impor // continue; bool impSet = false; - for (auto const& obj : *imports) + for (auto const& obj : imports) { auto const& imp = obj.second; if (imp.name != fieldName) @@ -502,7 +502,7 @@ WasmiEngine::WasmiEngine() : engine_(init()), store_(nullptr, &wasm_store_delete } int -WasmiEngine::addModule(Bytes const& wasmCode, bool instantiate, int64_t gas) +WasmiEngine::addModule(Bytes const& wasmCode, bool instantiate, ImportVec const& imports, int64_t gas) { moduleWrap_.reset(); store_.reset(); // to free the memory before creating new store @@ -520,7 +520,7 @@ WasmiEngine::addModule(Bytes const& wasmCode, bool instantiate, int64_t gas) // LCOV_EXCL_STOP } - moduleWrap_ = std::make_unique(store_, wasmCode, instantiate, imports_, j_); + moduleWrap_ = std::make_unique(store_, wasmCode, instantiate, imports, j_); if (!moduleWrap_) throw std::runtime_error("can't create module wrapper"); // LCOV_EXCL_LINE @@ -535,7 +535,7 @@ WasmiEngine::addModule(Bytes const& wasmCode, bool instantiate, int64_t gas) // } FuncInfo -WasmiEngine::getFunc(std::string_view funcName) +WasmiEngine::getFunc(std::string_view funcName) const { return moduleWrap_->getFunc(funcName); } @@ -556,19 +556,6 @@ WasmiEngine::convertParams(std::vector const& params) case WT_I64: v.push_back(WASM_I64_VAL(p.of.i64)); break; - // LCOV_EXCL_STOP - case WT_U8V: { - auto mem = getMem(); - if (!mem.s) - throw std::runtime_error("no memory exported"); // LCOV_EXCL_LINE - auto const sz = p.of.u8v.sz; - auto const ptr = allocate(sz); - memcpy(mem.p + ptr, p.of.u8v.d, sz); - v.push_back(WASM_I32_VAL(ptr)); - v.push_back(WASM_I32_VAL(sz)); - } - break; - // LCOV_EXCL_START default: throw std::runtime_error("unknown parameter type: " + std::to_string(p.type)); break; @@ -695,22 +682,6 @@ WasmiEngine::call(FuncInfo const& f, std::vector& in, std::int64_t p return call(f, in, std::forward(args)...); } -template -WasmiResult -WasmiEngine::call(FuncInfo const& f, std::vector& in, uint8_t const* d, int32_t sz, Types&&... args) -{ - auto mem = getMem(); - if (!mem.s) - throw std::runtime_error("no memory exported"); // LCOV_EXCL_LINE - - auto const ptr = allocate(sz); - memcpy(mem.p + ptr, d, sz); - - add_param(in, ptr); - add_param(in, static_cast(sz)); - return call(f, in, std::forward(args)...); -} - template WasmiResult WasmiEngine::call(FuncInfo const& f, std::vector& in, Bytes const& p, Types&&... args) @@ -731,26 +702,19 @@ checkImports(ImportVec const& imports, HostFunctions* hfs) Expected, TER> WasmiEngine::run( Bytes const& wasmCode, + HostFunctions& hfs, std::string_view funcName, std::vector const& params, - std::shared_ptr const& imports, - std::shared_ptr const& hfs, + ImportVec const& imports, int64_t gas, beast::Journal j) { j_ = j; - if (!wasmCode.empty()) - { // save values for reuse - imports_ = imports; - hfs_ = hfs; - } - try { - if (imports_) - checkImports(*imports_, hfs.get()); - return runHlp(wasmCode, funcName, params, gas); + checkImports(imports, &hfs); + return runHlp(wasmCode, hfs, funcName, params, imports, gas); } catch (std::exception const& e) { @@ -766,22 +730,29 @@ WasmiEngine::run( } Expected, TER> -WasmiEngine::runHlp(Bytes const& wasmCode, std::string_view funcName, std::vector const& params, int64_t gas) +WasmiEngine::runHlp( + Bytes const& wasmCode, + HostFunctions& hfs, + std::string_view funcName, + std::vector const& params, + ImportVec const& imports, + int64_t gas) { // currently only 1 module support, possible parallel UT run std::lock_guard lg(m_); + if (wasmCode.empty()) + throw std::runtime_error("empty module"); + if (!hfs.checkSelf()) + throw std::runtime_error("hfs isn't clean"); + // Create and instantiate the module. - if (!wasmCode.empty()) - { - [[maybe_unused]] int const m = addModule(wasmCode, true, gas); - } + [[maybe_unused]] int const m = addModule(wasmCode, true, imports, gas); if (!moduleWrap_ || !moduleWrap_->instanceWrap_) throw std::runtime_error("no instance"); // LCOV_EXCL_LINE - if (hfs_) - hfs_->setRT(&getRT()); + hfs.setRT(&getRT()); // Call main auto const f = getFunc(!funcName.empty() ? funcName : "_start"); @@ -822,25 +793,18 @@ WasmiEngine::runHlp(Bytes const& wasmCode, std::string_view funcName, std::vecto NotTEC WasmiEngine::check( Bytes const& wasmCode, + HostFunctions& hfs, std::string_view funcName, std::vector const& params, - std::shared_ptr const& imports, - std::shared_ptr const& hfs, + ImportVec const& imports, beast::Journal j) { j_ = j; - if (!wasmCode.empty()) - { - imports_ = imports; - hfs_ = hfs; - } - try { - if (imports_) - checkImports(*imports_, hfs_.get()); - return checkHlp(wasmCode, funcName, params); + checkImports(imports, &hfs); + return checkHlp(wasmCode, hfs, funcName, params, imports); } catch (std::exception const& e) { @@ -857,7 +821,12 @@ WasmiEngine::check( } NotTEC -WasmiEngine::checkHlp(Bytes const& wasmCode, std::string_view funcName, std::vector const& params) +WasmiEngine::checkHlp( + Bytes const& wasmCode, + HostFunctions& hfs, + std::string_view funcName, + std::vector const& params, + ImportVec const& imports) { // currently only 1 module support, possible parallel UT run std::lock_guard lg(m_); @@ -866,7 +835,7 @@ WasmiEngine::checkHlp(Bytes const& wasmCode, std::string_view funcName, std::vec if (wasmCode.empty()) throw std::runtime_error("empty nodule"); - int const m = addModule(wasmCode, false, -1); + int const m = addModule(wasmCode, false, imports, -1); if ((m < 0) || !moduleWrap_) throw std::runtime_error("no module"); // LCOV_EXCL_LINE @@ -883,7 +852,7 @@ WasmiEngine::checkHlp(Bytes const& wasmCode, std::string_view funcName, std::vec // LCOV_EXCL_START std::int64_t -WasmiEngine::getGas() +WasmiEngine::getGas() const { return moduleWrap_ ? moduleWrap_->getGas() : -1; } @@ -896,32 +865,13 @@ WasmiEngine::getMem() const } InstanceWrapper const& -WasmiEngine::getRT(int m, int i) +WasmiEngine::getRT(int m, int i) const { if (!moduleWrap_) throw std::runtime_error("no module"); return moduleWrap_->getInstance(i); } -int32_t -WasmiEngine::allocate(int32_t sz) -{ - if (sz <= 0) - throw std::runtime_error("can't allocate memory, " + std::to_string(sz) + " bytes"); - - auto res = call<1>(W_ALLOC, sz); - - if (res.f || !res.r.vec_.size || (res.r.vec_.data[0].kind != WASM_I32)) - throw std::runtime_error("can't allocate memory, " + std::to_string(sz) + " bytes"); // LCOV_EXCL_LINE - - int32_t const p = res.r.vec_.data[0].of.i32; - auto const mem = getMem(); - if (p <= 0 || p + sz > mem.s) - throw std::runtime_error("invalid memory allocation, " + std::to_string(sz) + " bytes"); - - return p; -} - wasm_trap_t* WasmiEngine::newTrap(std::string const& txt) { From 4df7d1a4bbd75bd2f346eac8d29d58f05f5e1e13 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 2 Mar 2026 16:48:02 -0400 Subject: [PATCH 087/137] rename variable --- src/xrpld/app/wasm/detail/WasmVM.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/xrpld/app/wasm/detail/WasmVM.cpp b/src/xrpld/app/wasm/detail/WasmVM.cpp index a23a2f8972..7a3e270c20 100644 --- a/src/xrpld/app/wasm/detail/WasmVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmVM.cpp @@ -92,12 +92,12 @@ setCommonHostFunctions(HostFunctions* hfs, ImportVec& i) ImportVec createWasmImport(HostFunctions& hfs) { - ImportVec import; + ImportVec i; - setCommonHostFunctions(&hfs, import); - WASM_IMPORT_FUNC2(import, updateData, "update_data", &hfs, 1000); + setCommonHostFunctions(&hfs, i); + WASM_IMPORT_FUNC2(i, updateData, "update_data", &hfs, 1000); - return import; + return i; } Expected From bc5ec3c9624ae8505a66703597e51012871429b7 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 4 Mar 2026 09:30:09 -0400 Subject: [PATCH 088/137] assorted fixes (#6376) --- include/xrpl/protocol/Protocol.h | 9 +- src/test/app/HostFuncImpl_test.cpp | 37 ++++++++ src/test/app/Wasm_test.cpp | 93 +++++++++++-------- src/xrpld/app/wasm/WasmVM.h | 6 +- src/xrpld/app/wasm/WasmiVM.h | 6 +- .../app/wasm/detail/HostFuncImplGetter.cpp | 4 +- src/xrpld/app/wasm/detail/WasmVM.cpp | 10 +- src/xrpld/app/wasm/detail/WasmiVM.cpp | 11 ++- 8 files changed, 116 insertions(+), 60 deletions(-) diff --git a/include/xrpl/protocol/Protocol.h b/include/xrpl/protocol/Protocol.h index 1a15cffbf5..6a3b81f5ae 100644 --- a/include/xrpl/protocol/Protocol.h +++ b/include/xrpl/protocol/Protocol.h @@ -251,12 +251,11 @@ std::uint8_t constexpr vaultMaximumIOUScale = 18; * another vault; counted from 0 */ std::uint8_t constexpr maxAssetCheckDepth = 5; -/** The maximum length of a Data field in Escrow object that can be updated by - * Wasm code */ -std::size_t constexpr maxWasmDataLength = 4 * 1024; +/** Maximum length of a Data field in Escrow object that can be updated by WASM code. */ +std::size_t constexpr maxWasmDataLength = 4 * 1024; // 4KB -/** The maximum length of a parameters passed from Wasm code*/ -std::size_t constexpr maxWasmParamLength = 1024; +/** Maximum length of parameters passed from WASM code to host functions. */ +std::size_t constexpr maxWasmParamLength = 1024; // 1KB /** A ledger index. */ using LedgerIndex = std::uint32_t; diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 91c80eabe2..dbcf9266fd 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -607,6 +607,18 @@ struct HostFuncImpl_test : public beast::unit_test::suite {sfCredentialIDs.fieldCode, 1}, // index 1 does not exist HostFunctionError::INDEX_OUT_OF_BOUNDS); + // Locator for negative index (STArray) + expectError( + {sfMemos.fieldCode, + -1, // negative index + sfMemoData.fieldCode}, + HostFunctionError::INDEX_OUT_OF_BOUNDS); + + // Locator for negative index (STVector256) + expectError( + {sfCredentialIDs.fieldCode, -1}, // negative index + HostFunctionError::INDEX_OUT_OF_BOUNDS); + // Locator for non-existent nested field expectError( {sfMemos.fieldCode, 0, sfURI.fieldCode}, // sfURI does not exist in the memo @@ -626,6 +638,31 @@ struct HostFuncImpl_test : public beast::unit_test::suite field_code(20000, 20000)}, HostFunctionError::INVALID_FIELD); + // Locator for negative base sfield code (-1 = sfInvalid, exists in map but not in tx) + expectError( + {-1, // sfInvalid's field code + 0, + sfAccount.fieldCode}, + HostFunctionError::FIELD_NOT_FOUND); + + // Locator for zero base sfield code (0 = sfGeneric, exists in map but not in tx) + expectError( + {0, // sfGeneric's field code + 0, + sfAccount.fieldCode}, + HostFunctionError::FIELD_NOT_FOUND); + + // Locator for very negative base sfield code (not in knownCodeToField map) + expectError( + {std::numeric_limits::min(), 0, sfAccount.fieldCode}, + HostFunctionError::INVALID_FIELD); + + // Locator for negative nested sfield code in STObject context + // (sfMemos[0] is an STObject, then -1 is looked up as SField) + expectError( + {sfMemos.fieldCode, 0, -1}, // -1 = sfInvalid, exists in map but not in memo object + HostFunctionError::FIELD_NOT_FOUND); + // Locator for STArray expectError({sfMemos.fieldCode}, HostFunctionError::NOT_LEAF_FIELD); diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 093698bc1d..a6fc86a247 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -38,7 +38,7 @@ runFinishFunction(std::string const& code) auto& engine = WasmEngine::instance(); auto const wasm = hexToBytes(code); HostFunctions hfs; - auto const re = engine.run(wasm, hfs, "finish"); + auto const re = engine.run(wasm, hfs, 10'000'000, "finish"); if (re.has_value()) { return std::optional(re->result); @@ -112,7 +112,7 @@ struct Wasm_test : public beast::unit_test::suite ImportVec imports; WasmImpFunc(imports, "func-add", reinterpret_cast(&Add), &hfs); - auto re = vm.run(wasm, hfs, "addTwo", wasmParams(1234, 5678), imports); + auto re = vm.run(wasm, hfs, 10'000'000, "addTwo", wasmParams(1234, 5678), imports); // if (res) printf("invokeAdd get the result: %d\n", res.value()); @@ -133,7 +133,7 @@ struct Wasm_test : public beast::unit_test::suite auto wasm = hexToBytes("00000000"); std::string funcName("mock_escrow"); - auto re = runEscrowWasm(wasm, hfs, funcName, {}, 15); + auto re = runEscrowWasm(wasm, hfs, 15, funcName, {}); BEAST_EXPECT(!re); } @@ -183,7 +183,7 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); auto re = engine.run( - ledgerSqnWasm, hfs, ESCROW_FUNCTION_NAME, {}, imports, 1'000'000, env.journal); + ledgerSqnWasm, hfs, 1'000'000, ESCROW_FUNCTION_NAME, {}, imports, env.journal); checkResult(re, 0, 440); @@ -191,7 +191,7 @@ struct Wasm_test : public beast::unit_test::suite env.close(); // empty module, throwing exception - re = engine.run({}, hfs, ESCROW_FUNCTION_NAME, {}, imports, 1'000'000, env.journal); + re = engine.run({}, hfs, 1'000'000, ESCROW_FUNCTION_NAME, {}, imports, env.journal); BEAST_EXPECT(!re); env.close(); } @@ -205,7 +205,7 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); HostFunctions hfs; - auto const re = engine.run(fibWasm, hfs, "fib", wasmParams(10)); + auto const re = engine.run(fibWasm, hfs, 10'000'000, "fib", wasmParams(10)); checkResult(re, 55, 1'137); } @@ -229,7 +229,7 @@ struct Wasm_test : public beast::unit_test::suite i.second.gas = 0; auto re = engine.run( - allHostFuncWasm, hfs, ESCROW_FUNCTION_NAME, {}, imp, 1'000'000, env.journal); + allHostFuncWasm, hfs, 1'000'000, ESCROW_FUNCTION_NAME, {}, imp, env.journal); checkResult(re, 1, 27'080); @@ -251,7 +251,7 @@ struct Wasm_test : public beast::unit_test::suite auto const imp = createWasmImport(hfs); auto re = engine.run( - allHostFuncWasm, hfs, ESCROW_FUNCTION_NAME, {}, imp, 1'000'000, env.journal); + allHostFuncWasm, hfs, 1'000'000, ESCROW_FUNCTION_NAME, {}, imp, env.journal); checkResult(re, 1, 66'340); @@ -268,7 +268,7 @@ struct Wasm_test : public beast::unit_test::suite auto const imp = createWasmImport(hfs); auto re = - engine.run(allHostFuncWasm, hfs, ESCROW_FUNCTION_NAME, {}, imp, 200, env.journal); + engine.run(allHostFuncWasm, hfs, 200, ESCROW_FUNCTION_NAME, {}, imp, env.journal); if (BEAST_EXPECT(!re)) { @@ -291,14 +291,31 @@ struct Wasm_test : public beast::unit_test::suite Env env{*this}; { TestHostFunctions hfs(env, 0); - auto re = runEscrowWasm(allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); + auto re = runEscrowWasm(allHFWasm, hfs, 100'000, ESCROW_FUNCTION_NAME, {}); checkResult(re, 1, 66'340); } + { + // Invalid gas limit (0) should be rejected (boundary condition) + TestHostFunctions hfs(env, 0); + auto re = runEscrowWasm(allHFWasm, hfs, -1, ESCROW_FUNCTION_NAME, {}); + BEAST_EXPECT(!re.has_value()); + BEAST_EXPECT(re.error() == temBAD_AMOUNT); + } + + { + // Invalid gas limit (-1) should be rejected + TestHostFunctions hfs(env, 0); + auto re = runEscrowWasm(allHFWasm, hfs, 0, ESCROW_FUNCTION_NAME, {}); + BEAST_EXPECT(!re.has_value()); + BEAST_EXPECT(re.error() == temBAD_AMOUNT); + } + { // max() gas TestHostFunctions hfs(env, 0); - auto re = runEscrowWasm(allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, -1); + auto re = runEscrowWasm( + allHFWasm, hfs, std::numeric_limits::max(), ESCROW_FUNCTION_NAME, {}); checkResult(re, 1, 66'340); } @@ -316,7 +333,7 @@ struct Wasm_test : public beast::unit_test::suite }; FieldNotFoundHostFunctions hfs(env); - auto re = runEscrowWasm(allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); + auto re = runEscrowWasm(allHFWasm, hfs, 100'000, ESCROW_FUNCTION_NAME, {}); checkResult(re, -201, 28'965); } @@ -334,7 +351,7 @@ struct Wasm_test : public beast::unit_test::suite }; OversizedFieldHostFunctions hfs(env); - auto re = runEscrowWasm(allHFWasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); + auto re = runEscrowWasm(allHFWasm, hfs, 100'000, ESCROW_FUNCTION_NAME, {}); checkResult(re, -201, 28'965); } @@ -344,7 +361,7 @@ struct Wasm_test : public beast::unit_test::suite TestHostFunctionsSink hfs(env); std::string funcName("finish"); - auto re = runEscrowWasm(deepWasm, hfs, funcName, {}, 1'000'000'000); + auto re = runEscrowWasm(deepWasm, hfs, 1'000'000'000, funcName, {}); BEAST_EXPECT(!re && re.error()); // std::cout << "bad case (deep recursion) result " << re.error() // << std::endl; @@ -372,7 +389,7 @@ struct Wasm_test : public beast::unit_test::suite TestHostFunctions hfs(env, 0); // infinite loop should be caught and fail - auto const re = runEscrowWasm(infiniteLoopWasm, hfs, funcName, {}, 1'000'000); + auto const re = runEscrowWasm(infiniteLoopWasm, hfs, 1'000'000, funcName, {}); if (BEAST_EXPECT(!re.has_value())) { BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); @@ -389,7 +406,7 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); auto re = engine.run( - lgrSqnWasm, hfs, ESCROW_FUNCTION_NAME, {}, imports, 1'000'000, env.journal); + lgrSqnWasm, hfs, 1'000'000, ESCROW_FUNCTION_NAME, {}, imports, env.journal); BEAST_EXPECT(!re); } @@ -405,7 +422,7 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); auto re = engine.run( - lgrSqnWasm, hfs, ESCROW_FUNCTION_NAME, {}, imports, 1'000'000, env.journal); + lgrSqnWasm, hfs, 1'000'000, ESCROW_FUNCTION_NAME, {}, imports, env.journal); BEAST_EXPECT(!re); } @@ -418,7 +435,7 @@ struct Wasm_test : public beast::unit_test::suite WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn", &hfs); auto& engine = WasmEngine::instance(); - auto re = engine.run(lgrSqnWasm, hfs, "func1", {}, imports, 1'000'000, env.journal); + auto re = engine.run(lgrSqnWasm, hfs, 1'000'000, "func1", {}, imports, env.journal); BEAST_EXPECT(!re); } @@ -438,7 +455,7 @@ struct Wasm_test : public beast::unit_test::suite auto const floatTestWasm = hexToBytes(floatTestsWasmHex); TestHostFunctions hfs(env, 0); - auto re = runEscrowWasm(floatTestWasm, hfs, funcName, {}, 200'000); + auto re = runEscrowWasm(floatTestWasm, hfs, 200'000, funcName, {}); checkResult(re, 1, 110'699); env.close(); } @@ -447,7 +464,7 @@ struct Wasm_test : public beast::unit_test::suite auto const float0Wasm = hexToBytes(float0Hex); TestHostFunctions hfs(env, 0); - auto re = runEscrowWasm(float0Wasm, hfs, funcName, {}, 100'000); + auto re = runEscrowWasm(float0Wasm, hfs, 100'000, funcName, {}); checkResult(re, 1, 4'259); env.close(); } @@ -466,7 +483,7 @@ struct Wasm_test : public beast::unit_test::suite TestHostFunctions hfs(env, 0); auto const allowance = 202'724; - auto re = runEscrowWasm(codecovWasm, hfs, ESCROW_FUNCTION_NAME, {}, allowance); + auto re = runEscrowWasm(codecovWasm, hfs, allowance, ESCROW_FUNCTION_NAME, {}); checkResult(re, 1, allowance); } @@ -485,7 +502,7 @@ struct Wasm_test : public beast::unit_test::suite { // f32 set constant, opcode disabled exception - auto const re = runEscrowWasm(disabledFloatWasm, hfs, funcName, {}, 1'000'000); + auto const re = runEscrowWasm(disabledFloatWasm, hfs, 1'000'000, funcName, {}); if (BEAST_EXPECT(!re.has_value())) { BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); @@ -495,7 +512,7 @@ struct Wasm_test : public beast::unit_test::suite { // f32 add, can't create module exception disabledFloatWasm[0x117] = 0x92; - auto const re = runEscrowWasm(disabledFloatWasm, hfs, funcName, {}, 1'000'000); + auto const re = runEscrowWasm(disabledFloatWasm, hfs, 1'000'000, funcName, {}); if (BEAST_EXPECT(!re.has_value())) { BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); @@ -602,7 +619,7 @@ struct Wasm_test : public beast::unit_test::suite BEAST_EXPECTS(checkRes == tesSUCCESS, std::to_string(TERtoInt(checkRes))); auto re = engine.run( - startLoopWasm, hfs, ESCROW_FUNCTION_NAME, {}, imports, 1'000'000, env.journal); + startLoopWasm, hfs, 1'000'000, ESCROW_FUNCTION_NAME, {}, imports, env.journal); BEAST_EXPECTS(re.error() == tecFAILED_PROCESSING, std::to_string(TERtoInt(re.error()))); } @@ -624,7 +641,7 @@ struct Wasm_test : public beast::unit_test::suite // Can be checked through codecov auto& engine = WasmEngine::instance(); - auto re = engine.run(badAlignWasm, hfs, "test", {}, imports, 1'000'000, env.journal); + auto re = engine.run(badAlignWasm, hfs, 1'000'000, "test", {}, imports, env.journal); if (BEAST_EXPECTS(re, transToken(re.error()))) { BEAST_EXPECTS(re->result == 0x684f7941, std::to_string(re->result)); @@ -653,7 +670,7 @@ struct Wasm_test : public beast::unit_test::suite "071302066d656d6f727902000666696e69736800000a0a01" "08004280808080100b"; auto const wasm = hexToBytes(wasmHex); - auto const re = runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); + auto const re = runEscrowWasm(wasm, hfs, 100'000, ESCROW_FUNCTION_NAME, {}); BEAST_EXPECT(!re); } @@ -669,7 +686,7 @@ struct Wasm_test : public beast::unit_test::suite "0061736d01000000010401600000030201000503010001071302066d656d6f" "727902000666696e69736800000a050103000f0b"; auto const wasm = hexToBytes(wasmHex); - auto const re = runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); + auto const re = runEscrowWasm(wasm, hfs, 100'000, ESCROW_FUNCTION_NAME, {}); BEAST_EXPECT(!re); } @@ -684,7 +701,7 @@ struct Wasm_test : public beast::unit_test::suite "6d6f727902000666696e69736800000a10010e0041808080800141ff818080" "010b"; auto const wasm = hexToBytes(wasmHex); - auto const re = runEscrowWasm(wasm, hfs, ESCROW_FUNCTION_NAME, {}, 100'000); + auto const re = runEscrowWasm(wasm, hfs, 100'000, ESCROW_FUNCTION_NAME, {}); BEAST_EXPECT(!re); } } @@ -712,32 +729,32 @@ struct Wasm_test : public beast::unit_test::suite // good params, module is working properly { - auto const re = runEscrowWasm(wasm, hfs, "test2", wasmParams(2, 10), 100'000); + auto const re = runEscrowWasm(wasm, hfs, 100'000, "test2", wasmParams(2, 10)); BEAST_EXPECT(re && re->result == 1001 && re->cost == 37); } // no params { - auto const re = runEscrowWasm(wasm, hfs, "test1", {}, 100'000); + auto const re = runEscrowWasm(wasm, hfs, 100'000, "test1", {}); BEAST_EXPECT(!re); } // more params { - auto const re = runEscrowWasm(wasm, hfs, "test1", wasmParams(0, 1), 100'000); + auto const re = runEscrowWasm(wasm, hfs, 100'000, "test1", wasmParams(0, 1)); BEAST_EXPECT(!re); } // less params { - auto const re = runEscrowWasm(wasm, hfs, "test2", wasmParams(1), 100'000); + auto const re = runEscrowWasm(wasm, hfs, 100'000, "test2", wasmParams(1)); BEAST_EXPECT(!re); } // invalid type { auto const re = - runEscrowWasm(wasm, hfs, "test1", wasmParams(std::int64_t(15)), 100'000); + runEscrowWasm(wasm, hfs, 100'000, "test1", wasmParams(std::int64_t(15))); BEAST_EXPECT(!re); } } @@ -817,14 +834,14 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); { - auto re = engine.run(params1k, hfs, "test", params, imports, 1'000'000, env.journal); + auto re = engine.run(params1k, hfs, 1'000'000, "test", params, imports, env.journal); BEAST_EXPECT(re && re->result == 999000); } // add 1 more parameter, module can't be created now params.push_back({.type = WT_I32, .of = {.i32 = 2 * 1000}}); { - auto re = engine.run(params1k1, hfs, "test", params, imports, 1'000'000, env.journal); + auto re = engine.run(params1k1, hfs, 1'000'000, "test", params, imports, env.journal); BEAST_EXPECT(!re); } @@ -832,7 +849,7 @@ struct Wasm_test : public beast::unit_test::suite auto const locals10k = hexToBytes(locals10kHex); { auto re = engine.run( - locals10k, hfs, "test", wasmParams(0, 1), imports, 1'000'000, env.journal); + locals10k, hfs, 1'000'000, "test", wasmParams(0, 1), imports, env.journal); BEAST_EXPECT(re && re->result == 890'489'442); } @@ -840,7 +857,7 @@ struct Wasm_test : public beast::unit_test::suite auto const functions5k = hexToBytes(functions5kHex); { auto re = engine.run( - functions5k, hfs, "test0001", wasmParams(2, 3), imports, 1'000'000, env.journal); + functions5k, hfs, 1'000'000, "test0001", wasmParams(2, 3), imports, env.journal); BEAST_EXPECT(re && re->result == 5); } @@ -889,7 +906,7 @@ struct Wasm_test : public beast::unit_test::suite std::source_location const location = std::source_location::current()) { auto const lineStr = " (" + std::to_string(location.line()) + ")"; auto re = - engine.run(code, hfs, "all_instructions", {}, imports, 1'000'000, env.journal); + engine.run(code, hfs, 1'000'000, "all_instructions", {}, imports, env.journal); if (BEAST_EXPECTS(re.has_value() == good, transToken(re.error()) + lineStr) && good) BEAST_EXPECTS(re->cost == cost, std::to_string(re->cost) + lineStr); }; diff --git a/src/xrpld/app/wasm/WasmVM.h b/src/xrpld/app/wasm/WasmVM.h index 27b1cc38c9..03ef79ff6f 100644 --- a/src/xrpld/app/wasm/WasmVM.h +++ b/src/xrpld/app/wasm/WasmVM.h @@ -44,10 +44,10 @@ public: Expected, TER> run(Bytes const& wasmCode, HostFunctions& hfs, + int64_t gasLimit, std::string_view funcName = {}, std::vector const& params = {}, ImportVec const& imports = {}, - int64_t gasLimit = -1, beast::Journal j = beast::Journal{beast::Journal::getNullSink()}); NotTEC @@ -76,9 +76,9 @@ Expected runEscrowWasm( Bytes const& wasmCode, HostFunctions& hfs, + int64_t gasLimit, std::string_view funcName = ESCROW_FUNCTION_NAME, - std::vector const& params = {}, - int64_t gasLimit = -1); + std::vector const& params = {}); NotTEC preflightEscrowWasm( diff --git a/src/xrpld/app/wasm/WasmiVM.h b/src/xrpld/app/wasm/WasmiVM.h index b49517633c..28e3b8d9d7 100644 --- a/src/xrpld/app/wasm/WasmiVM.h +++ b/src/xrpld/app/wasm/WasmiVM.h @@ -208,10 +208,10 @@ public: Expected, TER> run(Bytes const& wasmCode, HostFunctions& hfs, + int64_t gas, std::string_view funcName, std::vector const& params, ImportVec const& imports, - int64_t gas, beast::Journal j); NotTEC @@ -244,10 +244,10 @@ private: runHlp( Bytes const& wasmCode, HostFunctions& hfs, + int64_t gas, std::string_view funcName, std::vector const& params, - ImportVec const& imports, - int64_t gas); + ImportVec const& imports); NotTEC checkHlp( diff --git a/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp b/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp index f38e77091d..a1bb979a1e 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp @@ -162,7 +162,7 @@ locateField(STObject const& obj, Slice const& locator) if (STI_ARRAY == field->getSType()) { auto const* arr = static_cast(field); - if (sfieldCode >= arr->size()) + if (sfieldCode < 0 || std::cmp_greater_equal(sfieldCode, arr->size())) return Unexpected(HostFunctionError::INDEX_OUT_OF_BOUNDS); field = &(arr->operator[](sfieldCode)); } @@ -180,7 +180,7 @@ locateField(STObject const& obj, Slice const& locator) else if (STI_VECTOR256 == field->getSType()) { auto const* v = static_cast(field); - if (sfieldCode >= v->size()) + if (sfieldCode < 0 || std::cmp_greater_equal(sfieldCode, v->size())) return Unexpected(HostFunctionError::INDEX_OUT_OF_BOUNDS); return FieldValue(&(v->operator[](sfieldCode))); } diff --git a/src/xrpld/app/wasm/detail/WasmVM.cpp b/src/xrpld/app/wasm/detail/WasmVM.cpp index 7a3e270c20..4064a95924 100644 --- a/src/xrpld/app/wasm/detail/WasmVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmVM.cpp @@ -104,16 +104,16 @@ Expected runEscrowWasm( Bytes const& wasmCode, HostFunctions& hfs, + int64_t gasLimit, std::string_view funcName, - std::vector const& params, - int64_t gasLimit) + std::vector const& params) { // create VM and set cost limit auto& vm = WasmEngine::instance(); // vm.initMaxPages(MAX_PAGES); auto const ret = - vm.run(wasmCode, hfs, funcName, params, createWasmImport(hfs), gasLimit, hfs.getJournal()); + vm.run(wasmCode, hfs, gasLimit, funcName, params, createWasmImport(hfs), hfs.getJournal()); // std::cout << "runEscrowWasm, mod size: " << wasmCode.size() // << ", gasLimit: " << gasLimit << ", funcName: " << funcName; @@ -166,13 +166,13 @@ Expected, TER> WasmEngine::run( Bytes const& wasmCode, HostFunctions& hfs, + int64_t gasLimit, std::string_view funcName, std::vector const& params, ImportVec const& imports, - int64_t gasLimit, beast::Journal j) { - return impl_->run(wasmCode, hfs, funcName, params, imports, gasLimit, j); + return impl_->run(wasmCode, hfs, gasLimit, funcName, params, imports, j); } NotTEC diff --git a/src/xrpld/app/wasm/detail/WasmiVM.cpp b/src/xrpld/app/wasm/detail/WasmiVM.cpp index 50d53b743a..a29a58aa35 100644 --- a/src/xrpld/app/wasm/detail/WasmiVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmiVM.cpp @@ -725,18 +725,21 @@ Expected, TER> WasmiEngine::run( Bytes const& wasmCode, HostFunctions& hfs, + int64_t gas, std::string_view funcName, std::vector const& params, ImportVec const& imports, - int64_t gas, beast::Journal j) { j_ = j; + if (gas <= 0) + return Unexpected(temBAD_AMOUNT); + try { checkImports(imports, &hfs); - return runHlp(wasmCode, hfs, funcName, params, imports, gas); + return runHlp(wasmCode, hfs, gas, funcName, params, imports); } catch (std::exception const& e) { @@ -755,10 +758,10 @@ Expected, TER> WasmiEngine::runHlp( Bytes const& wasmCode, HostFunctions& hfs, + int64_t gas, std::string_view funcName, std::vector const& params, - ImportVec const& imports, - int64_t gas) + ImportVec const& imports) { // currently only 1 module support, possible parallel UT run std::lock_guard lg(m_); From 5afe8cc321ada60ea1c3ed7bbbc0b3fb129deb70 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Wed, 4 Mar 2026 11:30:33 -0500 Subject: [PATCH 089/137] Fix clang tidy (#6463) * Fix clang tidy * Add exponent overflow test --- src/test/app/HostFuncImpl_test.cpp | 6 ++++++ src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp | 11 +++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index dbcf9266fd..32379495dc 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -2252,6 +2252,12 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const result = hfs.floatSet(10, -1, 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == float1); } + + { + auto const result = hfs.floatSet(1, Number::maxExponent + normalExp + 1, 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); + } } void diff --git a/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp b/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp index f66e01d115..7e1b0382b1 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp @@ -221,6 +221,7 @@ floatFromIntImpl(int64_t x, int32_t mode) // LCOV_EXCL_START catch (...) { + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); } return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_STOP @@ -242,6 +243,7 @@ floatFromUintImpl(uint64_t x, int32_t mode) // LCOV_EXCL_START catch (...) { + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); } return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_STOP @@ -262,6 +264,7 @@ floatSetImpl(int64_t mantissa, int32_t exponent, int32_t mode) } catch (...) { + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); } return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); } @@ -284,6 +287,7 @@ floatCompareImpl(Slice const& x, Slice const& y) // LCOV_EXCL_START catch (...) { + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); } return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_STOP @@ -311,6 +315,7 @@ floatAddImpl(Slice const& x, Slice const& y, int32_t mode) // LCOV_EXCL_START catch (...) { + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); } return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_STOP @@ -337,6 +342,7 @@ floatSubtractImpl(Slice const& x, Slice const& y, int32_t mode) // LCOV_EXCL_START catch (...) { + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); } return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_STOP @@ -363,6 +369,7 @@ floatMultiplyImpl(Slice const& x, Slice const& y, int32_t mode) // LCOV_EXCL_START catch (...) { + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); } return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_STOP @@ -388,6 +395,7 @@ floatDivideImpl(Slice const& x, Slice const& y, int32_t mode) } catch (...) { + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); } return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); } @@ -415,6 +423,7 @@ floatRootImpl(Slice const& x, int32_t n, int32_t mode) // LCOV_EXCL_START catch (...) { + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); } return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_STOP @@ -445,6 +454,7 @@ floatPowerImpl(Slice const& x, int32_t n, int32_t mode) // LCOV_EXCL_START catch (...) { + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); } return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_STOP @@ -470,6 +480,7 @@ floatLogImpl(Slice const& x, int32_t mode) // LCOV_EXCL_START catch (...) { + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); } return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_STOP From a9ebf786c63d656778360ab8094cba9c226dd79e Mon Sep 17 00:00:00 2001 From: Jingchen Date: Wed, 4 Mar 2026 20:21:51 +0000 Subject: [PATCH 090/137] Modularise wasm (#6441) Signed-off-by: JCW --- {src/xrpld/app => include/xrpl/tx}/wasm/HostFunc.h | 3 +-- {src/xrpld/app => include/xrpl/tx}/wasm/HostFuncImpl.h | 3 +-- {src/xrpld/app => include/xrpl/tx}/wasm/HostFuncWrapper.h | 2 +- {src/xrpld/app => include/xrpl/tx}/wasm/ParamsHelper.h | 0 {src/xrpld/app => include/xrpl/tx}/wasm/README.md | 0 {src/xrpld/app => include/xrpl/tx}/wasm/WasmVM.h | 2 +- {src/xrpld/app => include/xrpl/tx}/wasm/WasmiVM.h | 2 +- .../app/wasm/detail => libxrpl/tx/wasm}/HostFuncImpl.cpp | 3 +-- .../wasm/detail => libxrpl/tx/wasm}/HostFuncImplFloat.cpp | 3 +-- .../wasm/detail => libxrpl/tx/wasm}/HostFuncImplGetter.cpp | 3 +-- .../wasm/detail => libxrpl/tx/wasm}/HostFuncImplKeylet.cpp | 3 +-- .../tx/wasm}/HostFuncImplLedgerHeader.cpp | 3 +-- .../wasm/detail => libxrpl/tx/wasm}/HostFuncImplNFT.cpp | 3 +-- .../wasm/detail => libxrpl/tx/wasm}/HostFuncImplTrace.cpp | 3 +-- .../wasm/detail => libxrpl/tx/wasm}/HostFuncWrapper.cpp | 5 ++--- src/{xrpld/app/wasm/detail => libxrpl/tx/wasm}/WasmVM.cpp | 7 +++---- src/{xrpld/app/wasm/detail => libxrpl/tx/wasm}/WasmiVM.cpp | 3 +-- src/test/app/HostFuncImpl_test.cpp | 3 +-- src/test/app/TestHostFunctions.h | 5 ++--- src/test/app/Wasm_test.cpp | 2 +- 20 files changed, 22 insertions(+), 36 deletions(-) rename {src/xrpld/app => include/xrpl/tx}/wasm/HostFunc.h (99%) rename {src/xrpld/app => include/xrpl/tx}/wasm/HostFuncImpl.h (99%) rename {src/xrpld/app => include/xrpl/tx}/wasm/HostFuncWrapper.h (99%) rename {src/xrpld/app => include/xrpl/tx}/wasm/ParamsHelper.h (100%) rename {src/xrpld/app => include/xrpl/tx}/wasm/README.md (100%) rename {src/xrpld/app => include/xrpl/tx}/wasm/WasmVM.h (98%) rename {src/xrpld/app => include/xrpl/tx}/wasm/WasmiVM.h (99%) rename src/{xrpld/app/wasm/detail => libxrpl/tx/wasm}/HostFuncImpl.cpp (96%) rename src/{xrpld/app/wasm/detail => libxrpl/tx/wasm}/HostFuncImplFloat.cpp (99%) rename src/{xrpld/app/wasm/detail => libxrpl/tx/wasm}/HostFuncImplGetter.cpp (99%) rename src/{xrpld/app/wasm/detail => libxrpl/tx/wasm}/HostFuncImplKeylet.cpp (99%) rename src/{xrpld/app/wasm/detail => libxrpl/tx/wasm}/HostFuncImplLedgerHeader.cpp (96%) rename src/{xrpld/app/wasm/detail => libxrpl/tx/wasm}/HostFuncImplNFT.cpp (97%) rename src/{xrpld/app/wasm/detail => libxrpl/tx/wasm}/HostFuncImplTrace.cpp (97%) rename src/{xrpld/app/wasm/detail => libxrpl/tx/wasm}/HostFuncWrapper.cpp (99%) rename src/{xrpld/app/wasm/detail => libxrpl/tx/wasm}/WasmVM.cpp (98%) rename src/{xrpld/app/wasm/detail => libxrpl/tx/wasm}/WasmiVM.cpp (99%) diff --git a/src/xrpld/app/wasm/HostFunc.h b/include/xrpl/tx/wasm/HostFunc.h similarity index 99% rename from src/xrpld/app/wasm/HostFunc.h rename to include/xrpl/tx/wasm/HostFunc.h index 63269bc98b..a3a26cfbaf 100644 --- a/src/xrpld/app/wasm/HostFunc.h +++ b/include/xrpl/tx/wasm/HostFunc.h @@ -1,7 +1,5 @@ #pragma once -#include - #include #include #include @@ -10,6 +8,7 @@ #include #include #include +#include namespace xrpl { diff --git a/src/xrpld/app/wasm/HostFuncImpl.h b/include/xrpl/tx/wasm/HostFuncImpl.h similarity index 99% rename from src/xrpld/app/wasm/HostFuncImpl.h rename to include/xrpl/tx/wasm/HostFuncImpl.h index da5e0e0708..6992e1f523 100644 --- a/src/xrpld/app/wasm/HostFuncImpl.h +++ b/include/xrpl/tx/wasm/HostFuncImpl.h @@ -1,8 +1,7 @@ #pragma once -#include - #include +#include namespace xrpl { class WasmHostFunctionsImpl : public HostFunctions diff --git a/src/xrpld/app/wasm/HostFuncWrapper.h b/include/xrpl/tx/wasm/HostFuncWrapper.h similarity index 99% rename from src/xrpld/app/wasm/HostFuncWrapper.h rename to include/xrpl/tx/wasm/HostFuncWrapper.h index 7dfba17f38..444c3be97c 100644 --- a/src/xrpld/app/wasm/HostFuncWrapper.h +++ b/include/xrpl/tx/wasm/HostFuncWrapper.h @@ -1,6 +1,6 @@ #pragma once -#include +#include namespace xrpl { diff --git a/src/xrpld/app/wasm/ParamsHelper.h b/include/xrpl/tx/wasm/ParamsHelper.h similarity index 100% rename from src/xrpld/app/wasm/ParamsHelper.h rename to include/xrpl/tx/wasm/ParamsHelper.h diff --git a/src/xrpld/app/wasm/README.md b/include/xrpl/tx/wasm/README.md similarity index 100% rename from src/xrpld/app/wasm/README.md rename to include/xrpl/tx/wasm/README.md diff --git a/src/xrpld/app/wasm/WasmVM.h b/include/xrpl/tx/wasm/WasmVM.h similarity index 98% rename from src/xrpld/app/wasm/WasmVM.h rename to include/xrpl/tx/wasm/WasmVM.h index 03ef79ff6f..b872adfc95 100644 --- a/src/xrpld/app/wasm/WasmVM.h +++ b/include/xrpl/tx/wasm/WasmVM.h @@ -1,6 +1,6 @@ #pragma once -#include +#include #include diff --git a/src/xrpld/app/wasm/WasmiVM.h b/include/xrpl/tx/wasm/WasmiVM.h similarity index 99% rename from src/xrpld/app/wasm/WasmiVM.h rename to include/xrpl/tx/wasm/WasmiVM.h index 28e3b8d9d7..bd37b4e42e 100644 --- a/src/xrpld/app/wasm/WasmiVM.h +++ b/include/xrpl/tx/wasm/WasmiVM.h @@ -1,6 +1,6 @@ #pragma once -#include +#include #include #include diff --git a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp b/src/libxrpl/tx/wasm/HostFuncImpl.cpp similarity index 96% rename from src/xrpld/app/wasm/detail/HostFuncImpl.cpp rename to src/libxrpl/tx/wasm/HostFuncImpl.cpp index 77a9d1e353..7f6dd4255c 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImpl.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImpl.cpp @@ -1,7 +1,6 @@ -#include - #include #include +#include namespace xrpl { diff --git a/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp similarity index 99% rename from src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp rename to src/libxrpl/tx/wasm/HostFuncImplFloat.cpp index 7e1b0382b1..030148da14 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplFloat.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp @@ -1,7 +1,6 @@ -#include - #include #include +#include #ifdef _DEBUG // #define DEBUG_OUTPUT 1 diff --git a/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp similarity index 99% rename from src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp rename to src/libxrpl/tx/wasm/HostFuncImplGetter.cpp index a1bb979a1e..1344d4f5bc 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplGetter.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp @@ -1,7 +1,6 @@ -#include - #include #include +#include namespace xrpl { diff --git a/src/xrpld/app/wasm/detail/HostFuncImplKeylet.cpp b/src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp similarity index 99% rename from src/xrpld/app/wasm/detail/HostFuncImplKeylet.cpp rename to src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp index 559267b3f0..8953790464 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplKeylet.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp @@ -1,7 +1,6 @@ -#include - #include #include +#include namespace xrpl { diff --git a/src/xrpld/app/wasm/detail/HostFuncImplLedgerHeader.cpp b/src/libxrpl/tx/wasm/HostFuncImplLedgerHeader.cpp similarity index 96% rename from src/xrpld/app/wasm/detail/HostFuncImplLedgerHeader.cpp rename to src/libxrpl/tx/wasm/HostFuncImplLedgerHeader.cpp index e7cb31d851..bb7e25614a 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplLedgerHeader.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplLedgerHeader.cpp @@ -1,7 +1,6 @@ -#include - #include #include +#include namespace xrpl { diff --git a/src/xrpld/app/wasm/detail/HostFuncImplNFT.cpp b/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp similarity index 97% rename from src/xrpld/app/wasm/detail/HostFuncImplNFT.cpp rename to src/libxrpl/tx/wasm/HostFuncImplNFT.cpp index 164d4d90fd..fbf85d8a12 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplNFT.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp @@ -1,8 +1,7 @@ -#include - #include #include #include +#include namespace xrpl { diff --git a/src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp b/src/libxrpl/tx/wasm/HostFuncImplTrace.cpp similarity index 97% rename from src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp rename to src/libxrpl/tx/wasm/HostFuncImplTrace.cpp index e7516b3567..33f9dc8e2b 100644 --- a/src/xrpld/app/wasm/detail/HostFuncImplTrace.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplTrace.cpp @@ -1,7 +1,6 @@ -#include - #include #include +#include #ifdef _DEBUG // #define DEBUG_OUTPUT 1 diff --git a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp similarity index 99% rename from src/xrpld/app/wasm/detail/HostFuncWrapper.cpp rename to src/libxrpl/tx/wasm/HostFuncWrapper.cpp index 2e22dca4bd..656e51f75e 100644 --- a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp +++ b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp @@ -1,6 +1,3 @@ -#include -#include - #include #include #include @@ -9,6 +6,8 @@ #include #include #include +#include +#include namespace xrpl { diff --git a/src/xrpld/app/wasm/detail/WasmVM.cpp b/src/libxrpl/tx/wasm/WasmVM.cpp similarity index 98% rename from src/xrpld/app/wasm/detail/WasmVM.cpp rename to src/libxrpl/tx/wasm/WasmVM.cpp index 4064a95924..7c755da2b3 100644 --- a/src/xrpld/app/wasm/detail/WasmVM.cpp +++ b/src/libxrpl/tx/wasm/WasmVM.cpp @@ -2,14 +2,13 @@ // #define DEBUG_OUTPUT 1 #endif -#include -#include -#include - #include #include #include #include +#include +#include +#include #include diff --git a/src/xrpld/app/wasm/detail/WasmiVM.cpp b/src/libxrpl/tx/wasm/WasmiVM.cpp similarity index 99% rename from src/xrpld/app/wasm/detail/WasmiVM.cpp rename to src/libxrpl/tx/wasm/WasmiVM.cpp index a29a58aa35..6d264c5e50 100644 --- a/src/xrpld/app/wasm/detail/WasmiVM.cpp +++ b/src/libxrpl/tx/wasm/WasmiVM.cpp @@ -1,6 +1,5 @@ -#include - #include +#include #include diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 32379495dc..a64031bd36 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -1,8 +1,7 @@ #include -#include - #include +#include namespace xrpl { namespace test { diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index 94d69b0e25..ec3d77803c 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -1,13 +1,12 @@ #include #include -#include -#include - #include #include #include #include +#include +#include namespace xrpl { diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index a6fc86a247..bf6bb0eb1a 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -4,7 +4,7 @@ #include -#include +#include #include From 27468ddbcf2e8de7e559189aee8dcea97bd31af8 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Thu, 19 Mar 2026 12:46:58 -0400 Subject: [PATCH 091/137] Add import / export sections test (#6497) --- src/test/app/Wasm_test.cpp | 166 +++++++++++++++++++++--- src/test/app/wasm_fixtures/fixtures.cpp | 6 + src/test/app/wasm_fixtures/fixtures.h | 2 + 3 files changed, 155 insertions(+), 19 deletions(-) diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index bf6bb0eb1a..041b73f0ca 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -32,6 +32,86 @@ hexToBytes(std::string const& hex) return Bytes(ws.begin(), ws.end()); } +template +unsigned +uleb128(IT& it, T val) +{ + unsigned count = 0; + do + { + std::uint8_t byte = val & 0x7f; + val >>= 7; + if (val) + byte |= 0x80; + *it++ = byte; + ++count; + } while (val != 0); + + return count; +} + +template +std::pair +uleb128(IT&& it) +{ + static_assert(sizeof(*it) == 1, "invalid iterator type"); + std::uint64_t val = 0; + std::uint64_t byte = 0; + unsigned shift = 0; + unsigned count = 0; + + do + { + if (shift > sizeof(std::uint64_t) * 8 - 7) + return {0, 0}; + byte = *it++; + val |= (byte & 0x7F) << shift; + shift += 7; + ++count; + } while (byte >= 0x80); + + return {val, count}; +} + +std::pair +getSection(Bytes const& module, std::uint8_t n) +{ + static std::uint8_t const hdr[] = {0x00, 0x61, 0x73, 0x6D}; + static std::uint8_t const ver[] = {0x01, 0x00, 0x00, 0x00}; + static std::uint8_t const lastSec = 12; + + // sections: + // 0: "Custom", 1: "Type", 2: "Import", 3: "Function", 4: "Table", 5: "Memory", 6: "Global", + // 7: "Export", 8: "Start", 9: "Element", 10: "Code", 11: "Data", 12: "DataCount" + + if (module.size() < sizeof(hdr) + sizeof(ver) + 2) + return {0, 0}; + if (memcmp(module.data(), hdr, sizeof(hdr)) != 0) + return {0, 0}; + if (memcmp(module.data() + sizeof(hdr), ver, sizeof(ver)) != 0) + return {0, 0}; + + unsigned pos = sizeof(hdr) + sizeof(ver); // sections start + for (; pos < module.size();) + { + auto const start = pos; + std::uint8_t const byte = module[pos++]; + if (byte > lastSec) + return {0, 0}; + + auto [sz, cnt] = uleb128(module.cbegin() + pos); + if (!cnt) + return {0, 0}; + if (pos + cnt + sz > module.size()) + return {0, 0}; + pos += cnt + sz; + + if (byte == n) + return {start, pos}; + } + return {0, 0}; +} + std::optional runFinishFunction(std::string const& code) { @@ -196,6 +276,71 @@ struct Wasm_test : public beast::unit_test::suite env.close(); } + void + testImpExp() + { + testcase("Wasm import/export functions"); + + auto impExpWasm = hexToBytes(impExpHex); + + using namespace test::jtx; + + Env env{*this}; + TestLedgerDataProvider hfs(env); + ImportVec imports; + WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn", &hfs, 33); + WASM_IMPORT_FUNC2(imports, getParentLedgerHash, "get_parent_ledger_hash", &hfs, 60); + auto& engine = WasmEngine::instance(); + + // Test exp_func1() - should return 1 + auto re = engine.run(impExpWasm, hfs, 1'000'000, "exp_func1", {}, imports, env.journal); + checkResult(re, 1, 30); + + // Test exp_func2(5) - should return 2 * 5 = 10 + re = engine.run( + impExpWasm, hfs, 1'000'000, "exp_func2", wasmParams(5), imports, env.journal); + checkResult(re, 10, 52); + + // Test test_imports() - should call get_ledger_sqn and get_parent_ledger_hash + re = engine.run(impExpWasm, hfs, 1'000'000, "test_imports", {}, imports, env.journal); + // Should return the ledger sequence number (3 by default in test env) + checkResult(re, 3, 294); + + // Test corrupted import/export sections - invert each byte and expect failure + testcase("Wasm import/export section corruption"); + { + // Import section(#2): bytes [26, 79) - 53 bytes + // Export section(#7): bytes [90, 141) - 51 bytes + auto [importStart, importEnd] = getSection(impExpWasm, 2); + auto [exportStart, exportEnd] = getSection(impExpWasm, 7); + + BEAST_EXPECTS(importStart == 26, std::to_string(importStart)); + BEAST_EXPECTS(importEnd == 79, std::to_string(importEnd)); + BEAST_EXPECTS(exportStart == 90, std::to_string(exportStart)); + BEAST_EXPECTS(exportEnd == 141, std::to_string(exportEnd)); + + auto testInv = [&](unsigned i) { + auto corruptedWasm = impExpWasm; + corruptedWasm[i] = ~corruptedWasm[i]; // Invert byte + + // Try to run any function - should fail due to corruption + auto result = engine.run( + corruptedWasm, hfs, 1'000'000, "exp_func1", {}, imports, env.journal); + BEAST_EXPECT(!result); + }; + + // Test each byte in import section + for (unsigned i = importStart; i < importEnd; ++i) + testInv(i); + + // Test each byte in export section + for (unsigned i = exportStart; i < exportEnd; ++i) + testInv(i); + } + + env.close(); + } + void testWasmFib() { @@ -723,8 +868,7 @@ struct Wasm_test : public beast::unit_test::suite // i32.const 1001)) auto const wasmHex = "0061736d01000000010c0260017f017f60027f7f017f03030200010503010001071a03066d656d6f727902" - "0005746573743100" - "0005746573743200010a0d02050041e8070b050041e9070b"; + "00057465737431000005746573743200010a0d02050041e8070b050041e9070b"; auto const wasm = hexToBytes(wasmHex); // good params, module is working properly @@ -864,23 +1008,6 @@ struct Wasm_test : public beast::unit_test::suite env.close(); } - template - std::size_t - uleb128(IT& it, std::uint16_t val) - { - std::size_t count = 0; - do - { - std::uint8_t byte = val & 0x7f; - val >>= 7; - if (val) - byte |= 0x80; - *it++ = byte; - ++count; - } while (val != 0); - return count; - } - void testOpcodes() { @@ -1394,6 +1521,7 @@ struct Wasm_test : public beast::unit_test::suite testWasmLib(); testBadWasm(); testWasmLedgerSqn(); + testImpExp(); testWasmFib(); diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index eeae8ea49b..454a5a4b2c 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -8978,3 +8978,9 @@ extern std::string const opcReservedHex = "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101410b0b0b" "0a010041000b04746573" "74"; + +extern std::string const impExpHex = + "0061736d0100000001100360027f7f017f6000017f60017f017f02330203656e760e6765745f6c65646765725f7371" + "6e000003656e76166765745f706172656e745f6c65646765725f686173680000030403010201050301000107310406" + "6d656d6f72790200096578705f66756e63310002096578705f66756e633200030c746573745f696d706f7274730004" + "0a2b03040041010b0700200041026c0b1c01027f4120410410001a41202802002100410041201001210120000b"; diff --git a/src/test/app/wasm_fixtures/fixtures.h b/src/test/app/wasm_fixtures/fixtures.h index ceace76fc0..b3b20a8f37 100644 --- a/src/test/app/wasm_fixtures/fixtures.h +++ b/src/test/app/wasm_fixtures/fixtures.h @@ -79,3 +79,5 @@ extern std::string const locals10kHex; extern std::string const functions5kHex; extern std::string const opcReservedHex; + +extern std::string const impExpHex; From 196e6a1b2703af6456db931a46a0bc537cb4c070 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Fri, 20 Mar 2026 14:26:26 -0400 Subject: [PATCH 092/137] Clang-format fixtures.cpp (#6610) --- src/test/app/wasm_fixtures/fixtures.cpp | 13559 ++++++++-------------- 1 file changed, 5123 insertions(+), 8436 deletions(-) diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 454a5a4b2c..7dcd5c4ea1 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -3,1244 +3,920 @@ #include extern std::string const fibWasmHex = - "0061736d0100000001090260000060017f017f0303020001071b02115f5f" - "7761736d5f63616c6c5f63746f727300000366696200010a440202000b3f" - "01017f200045044041000f0b2000410348044041010f0b200041026a2100" - "0340200041036b100120016a2101200041026b220041044a0d000b200141" - "016a0b"; + "0061736d0100000001090260000060017f017f0303020001071b02115f5f7761736d5f63616c6c5f63746f72730000" + "0366696200010a440202000b3f01017f200045044041000f0b2000410348044041010f0b200041026a210003402000" + "41036b100120016a2101200041026b220041044a0d000b200141016a0b"; extern std::string const ledgerSqnWasmHex = "0061736d01000000010e0360027f7f017f6000006000017f02160103656e760e6765745f6c65646765725f73716e00" - "00030302010205030100" - "02063f0a7f01418088040b7f004180080b7f004180080b7f004180080b7f00418088040b7f004180080b7f00418088" - "040b7f00418080080b7f" - "0041000b7f0041010b07aa010c066d656d6f72790200115f5f7761736d5f63616c6c5f63746f727300010666696e69" - "736800020c5f5f64736f" - "5f68616e646c6503010a5f5f646174615f656e6403020b5f5f737461636b5f6c6f7703030c5f5f737461636b5f6869" - "676803040d5f5f676c6f" - "62616c5f6261736503050b5f5f686561705f6261736503060a5f5f686561705f656e6403070d5f5f6d656d6f72795f" - "6261736503080c5f5f74" - "61626c655f6261736503090a3d0202000b3801037f230041106b220024002000410c6a410410002101200028020c21" - "02200041106a24002001" - "41054100200241054f1b20014100481b0b007f0970726f647563657273010c70726f6365737365642d62790105636c" - "616e675f31392e312e35" - "2d776173692d73646b202868747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a656374" - "20616234623561326462" - "353832393538616631656533303861373930636664623432626432343732302900490f7461726765745f6665617475" - "726573042b0f6d757461" - "626c652d676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c74697661" - "6c7565"; + "0003030201020503010002063f0a7f01418088040b7f004180080b7f004180080b7f004180080b7f00418088040b7f" + "004180080b7f00418088040b7f00418080080b7f0041000b7f0041010b07aa010c066d656d6f72790200115f5f7761" + "736d5f63616c6c5f63746f727300010666696e69736800020c5f5f64736f5f68616e646c6503010a5f5f646174615f" + "656e6403020b5f5f737461636b5f6c6f7703030c5f5f737461636b5f6869676803040d5f5f676c6f62616c5f626173" + "6503050b5f5f686561705f6261736503060a5f5f686561705f656e6403070d5f5f6d656d6f72795f6261736503080c" + "5f5f7461626c655f6261736503090a3d0202000b3801037f230041106b220024002000410c6a410410002101200028" + "020c2102200041106a2400200141054100200241054f1b20014100481b0b007f0970726f647563657273010c70726f" + "6365737365642d62790105636c616e675f31392e312e352d776173692d73646b202868747470733a2f2f6769746875" + "622e636f6d2f6c6c766d2f6c6c766d2d70726f6a656374206162346235613264623538323935386166316565333038" + "61373930636664623432626432343732302900490f7461726765745f6665617475726573042b0f6d757461626c652d" + "676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; extern std::string const allHostFunctionsWasmHex = - "0061736d0100000001540c60027f7f017f60037f7f7f017f60047f7f7f7f017f60017f017f" - "60067f7f7f7f7f7f017f60037f7f7f0060057f7f7f7f7f017f60037f7f7e017f60087f7f7f" - "7f7f7f7f7f017f60017f0060027f7f006000017f02ae061a08686f73745f6c69620c676574" - "5f74785f6669656c64000108686f73745f6c69620974726163655f6e756d000708686f7374" - "5f6c6962057472616365000608686f73745f6c69620e6765745f6c65646765725f73716e00" - "0008686f73745f6c6962166765745f706172656e745f6c65646765725f74696d6500000868" - "6f73745f6c6962166765745f706172656e745f6c65646765725f68617368000008686f7374" - "5f6c6962136765745f74785f6e65737465645f6669656c64000208686f73745f6c69621067" - "65745f74785f61727261795f6c656e000308686f73745f6c6962176765745f74785f6e6573" - "7465645f61727261795f6c656e000008686f73745f6c69621c6765745f63757272656e745f" - "6c65646765725f6f626a5f6669656c64000108686f73745f6c6962236765745f6375727265" - "6e745f6c65646765725f6f626a5f6e65737465645f6669656c64000208686f73745f6c6962" - "206765745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e00030868" - "6f73745f6c6962276765745f63757272656e745f6c65646765725f6f626a5f6e6573746564" - "5f61727261795f6c656e000008686f73745f6c69621063616368655f6c65646765725f6f62" - "6a000108686f73745f6c69621163726564656e7469616c5f6b65796c6574000808686f7374" - "5f6c69620d657363726f775f6b65796c6574000408686f73745f6c69620d6f7261636c655f" - "6b65796c6574000408686f73745f6c696213636f6d707574655f7368613531325f68616c66" - "000208686f73745f6c6962076765745f6e6674000408686f73745f6c69620b757064617465" - "5f64617461000008686f73745f6c6962146765745f6c65646765725f6f626a5f6669656c64" - "000208686f73745f6c69621b6765745f6c65646765725f6f626a5f6e65737465645f666965" - "6c64000608686f73745f6c6962186765745f6c65646765725f6f626a5f61727261795f6c65" - "6e000008686f73745f6c69621f6765745f6c65646765725f6f626a5f6e65737465645f6172" - "7261795f6c656e000108686f73745f6c69620e6163636f756e745f6b65796c657400020868" - "6f73745f6c69620d74726163655f6163636f756e740002030c0b090a05050b050001010300" - "05030100110619037f01418080c0000b7f0041af99c0000b7f0041b099c0000b072e04066d" - "656d6f727902000666696e697368001e0a5f5f646174615f656e6403010b5f5f686561705f" - "6261736503020ac61d0b990101027f230041306b220124002000027f418180202001411c6a" - "4114100022024114470440417f20022002417f4e1b210241010c010b200020012f001c3b00" - "01200041036a2001411e6a2d00003a0000200120012900233703082001200141286a290000" - "37000d200128001f21022000410d6a200129000d3700002000200129030837020841000b3a" - "000020002002360204200141306a24000b460020012d00004101460440418080c000410b20" - "013402041001000b20002001290001370000200041106a200141116a280000360000200041" - "086a200141096a2900003700000b1900200241214f0440000b200020023602042000200136" - "02000b1900200241094f0440000b20002002360204200020013602000bde1a01097f230041" - "b0036b22002400418b80c000411b41014100410010021a41a680c000411941014100410010" - "021a41e780c000412b41014100410010021a20004100360270024002400240024002400240" - "02400240200041f0006a220741041003220141004a0440419281c000411720002802702201" - "41187420014180fe03714108747220014108764180fe037120014118767272ad10011a2000" - "41003602900120004190016a220341041004220141004c0d0141a981c00041132000280290" - "01220141187420014180fe03714108747220014108764180fe037120014118767272ad1001" - "1a200041c8016a22024200370300200041c0016a22054200370300200041b8016a22044200" - "370300200042003703b001200041b0016a22064120100522014120470d0241bc81c0004113" - "20064120410110021a41cf81c000412041014100410010021a41dc82c000412e4101410041" - "0010021a200041a0016a410036020020004198016a42003703002000420037039001418180" - "2020034114100022014114470d03418a83c00041142003101f200042003703704188801820" - "074108100022014108470d04419e83c0004117420810011a41b583c0004128200741084101" - "10021a2000410036024841848008200041c8006a22034104100022014104470d0541dd83c0" - "00411520034104410110021a200041013b0034200242003703002005420037030020044200" - "370300200042003703b0010240200041346a4102200641201006220141004e044041f283c0" - "0041142001ad10011a200041286a20062001101c418684c000410d2000280228200028022c" - "410110021a0c010b419384c00041292001ac10011a0b41bc84c00041154183803c1007ac10" - "011a41d184c00041134189803c1007ac10011a0240200041346a41021008220141004e0440" - "41e484c00041142001ad10011a0c010b41f884c000412d2001ac10011a0b41a585c0004123" - "41014100410010021a41de86c000413341014100410010021a200042003703704182801820" - "0041f0006a220141081009220341004c0d0620034108460440419187c000412b420810011a" - "41bc87c000412f20014108410110021a0c080b41eb87c000412f2003ad10011a200041206a" - "200041f0006a2003101d419a88c000411720002802202000280224410110021a0c070b41bf" - "82c000411d2001ac10011a419b7f21020c070b419a82c00041252001ac10011a419a7f2102" - "0c060b41ef81c000412b2001ac10011a41997f21020c050b41b486c000412a2001ac10011a" - "41b77e21020c040b41f385c00041c1002001ac10011a41b67e21020c030b41c885c000412b" - "2001ac10011a41b57e21020c020b41b188c00041c5002003ac10011a0b200041a0016a4100" - "36020020004198016a4200370300200042003703900102404181802020004190016a220341" - "141009220141004a044041f688c000411e2003101f0c010b419489c00041332001ac10011a" - "0b200041013b0048200041c8016a4200370300200041c0016a4200370300200041b8016a42" - "00370300200042003703b0010240200041c8006a4102200041b0016a22014120100a220341" - "004e044041c789c000411c2003ad10011a200041186a20012003101c41e389c00041152000" - "280218200028021c410110021a0c010b41f889c00041392003ac10011a0b41b18ac0004124" - "4183803c100bac10011a0240200041c8006a4102100c220141004e044041d58ac000411c20" - "01ad10011a0c010b41f18ac000413d2001ac10011a0b41ae8bc00041284101410041001002" - "1a41d68bc000412f41014100410010021a200041b0016a2203101a200041f0006a22012003" - "101b200041a8016a4200370300200041a0016a420037030020004198016a42003703002000" - "42003703900102400240024002400240200120004190016a22031020220141204604402003" - "41204100100d220441004a044041858cc00041232004ad10011a2000420037034820042000" - "41c8006a220141081021220341004c0d022003410846044041a88cc000412a420810011a41" - "d28cc000412e20014108410110021a0c060b41808dc000412e2003ad10011a200041106a20" - "0041c8006a2003101d41ae8dc000411620002802102000280214410110021a0c050b41e68f" - "c000413c2004ac10011a200041c8016a4200370300200041c0016a4200370300200041b801" - "6a4200370300200042003703b0014101200041b0016a4120102122014100480d020c030b41" - "ba92c000412e2001ac10011a41ef7c21020c050b41c48dc000412b2003ac10011a0c020b41" - "a290c00041c1002001ac10011a0b200041013b00484101200041c8006a200041b0016a1022" - "2201410048044041e390c00041352001ac10011a0b4101102322014100480440419891c000" - "41322001ac10011a0b4101200041c8006a10242201410048044041ca91c00041392001ac10" - "011a0b418392c000413741014100410010021a0c010b200041013b0034200041c8016a4200" - "370300200041c0016a4200370300200041b8016a4200370300200042003703b00102402004" - "200041346a200041b0016a22011022220341004e044041ef8dc000411b2003ad10011a2000" - "41086a20012003101c418a8ec00041142000280208200028020c410110021a0c010b419e8e" - "c00041312003ac10011a0b41cf8ec000412320041023ac10011a02402004200041346a1024" - "220141004e044041f28ec000411b2001ad10011a0c010b418d8fc00041352001ac10011a0b" - "41c28fc000412441014100410010021a0b41e892c000412f41014100410010021a200041b0" - "016a2201101a200041346a22042001101b200041e0006a4200370300200041d8006a420037" - "0300200041d0006a420037030020004200370348024002400240024002402004200041c800" - "6a2203102022014120460440419793c000410f20034120410110021a20004188016a420037" - "030020004180016a4200370300200041f8006a420037030020004200370370024020044114" - "2004411441a693c0004109200041f0006a22014120100e220341004a044020002001200310" - "1c41ae93c000411220002802002000280204410110021a0c010b41c093c000413c2003ac10" - "011a0b200041a8016a22064200370300200041a0016a2202420037030020004198016a2205" - "4200370300200042003703900120004180808cc07e360268200041346a22034114200041e8" - "006a410420004190016a22084120100f22014120470d0141fc93c000410e20084120410110" - "021a200041c8016a4200370300200041c0016a4200370300200041b8016a42003703002000" - "42003703b001200041808080d00236026c20034114200041ec006a4104200041b0016a2204" - "4120101022014120470d02418a94c000410e20044120410110021a419894c0004124410141" - "00410010021a419195c000412541014100410010021a20004188016a420037030020004180" - "016a4200370300200041f8006a42003703002000420037037041b695c0004117200041f000" - "6a22034120101122014120470d0341cd95c000410b41b695c0004117410110021a41d895c0" - "00411120034120410110021a2004101a200041c8006a22072004101b200642003703002002" - "420037030020054200370300200042003703900102404100200422026b410371220320026a" - "220520024d0d0020030440200321010340200241003a0000200241016a2102200141016b22" - "010d000b0b200341016b4107490d000340200241003a0000200241076a41003a0000200241" - "066a41003a0000200241056a41003a0000200241046a41003a0000200241036a41003a0000" - "200241026a41003a0000200241016a41003a0000200241086a22022005470d000b0b200541" - "800220036b2201417c716a220220054b0440034020054100360200200541046a2205200249" - "0d000b0b024020022001410371220120026a22034f0d002001220504400340200241003a00" - "00200241016a2102200541016b22050d000b0b200141016b4107490d000340200241003a00" - "00200241076a41003a0000200241066a41003a0000200241056a41003a0000200241046a41" - "003a0000200241036a41003a0000200241026a41003a0000200241016a41003a0000200241" - "086a22022003470d000b0b0240200741142008412020044180021012220141004a044041e9" - "95c00041102001ad10011a20014181024f0d0641f995c000410920042001410110021a0c01" - "0b418296c000412e2001ac10011a0b41b096c000411241c296c00041074101100222014100" - "480d0541c996c000411d2001ad10011a41e696c0004111422a1001410048044041ad97c000" - "411a42a47b10011a41a47b21020c070b41f796c000411c420010011a41012102419397c000" - "411a41014100410010021a41ff97c000412941014100410010021a41a898c0004128101322" - "01412846044041d098c000412741a898c0004128410110021a41f798c000411e4101410041" - "0010021a41bf80c000412841014100410010021a0c070b419599c000411a2001ac10011a41" - "c37a21020c060b41f494c000411d2001ac10011a418b7c21020c050b41d894c000411c2001" - "ac10011a41897c21020c040b41bc94c000411c2001ac10011a41887c21020c030b41dd97c0" - "0041222001ac10011a41a77b21020c020b000b41c797c00041162001ac10011a41a57b2102" - "0b200041b0036a240020020b0d00200020012002411410191a0b0c00200041142001412010" - "180b0e002000418280182001200210140b0e002000200141022002412010150b0a00200041" - "83803c10160b0a0020002001410210170b0bb9190100418080c0000baf196572726f725f63" - "6f64653d3d3d3d20484f53542046554e4354494f4e532054455354203d3d3d54657374696e" - "6720323620686f73742066756e6374696f6e73535543434553533a20416c6c20686f737420" - "66756e6374696f6e20746573747320706173736564212d2d2d2043617465676f727920313a" - "204c6564676572204865616465722046756e6374696f6e73202d2d2d4c6564676572207365" - "7175656e6365206e756d6265723a506172656e74206c65646765722074696d653a50617265" - "6e74206c656467657220686173683a535543434553533a204c656467657220686561646572" - "2066756e6374696f6e734552524f523a206765745f706172656e745f6c65646765725f6861" - "73682077726f6e67206c656e6774683a4552524f523a206765745f706172656e745f6c6564" - "6765725f74696d65206661696c65643a4552524f523a206765745f6c65646765725f73716e" - "206661696c65643a2d2d2d2043617465676f727920323a205472616e73616374696f6e2044" - "6174612046756e6374696f6e73202d2d2d5472616e73616374696f6e204163636f756e743a" - "5472616e73616374696f6e20466565206c656e6774683a5472616e73616374696f6e204665" - "65202873657269616c697a65642058525020616d6f756e74293a5472616e73616374696f6e" - "2053657175656e63653a4e6573746564206669656c64206c656e6774683a4e657374656420" - "6669656c643a494e464f3a206765745f74785f6e65737465645f6669656c64206e6f742061" - "70706c696361626c653a5369676e657273206172726179206c656e6774683a4d656d6f7320" - "6172726179206c656e6774683a4e6573746564206172726179206c656e6774683a494e464f" - "3a206765745f74785f6e65737465645f61727261795f6c656e206e6f74206170706c696361" - "626c653a535543434553533a205472616e73616374696f6e20646174612066756e6374696f" - "6e734552524f523a206765745f74785f6669656c642853657175656e6365292077726f6e67" - "206c656e6774683a4552524f523a206765745f74785f6669656c6428466565292077726f6e" - "67206c656e67746820286578706563746564203820627974657320666f7220585250293a45" - "52524f523a206765745f74785f6669656c64284163636f756e74292077726f6e67206c656e" - "6774683a2d2d2d2043617465676f727920333a2043757272656e74204c6564676572204f62" - "6a6563742046756e6374696f6e73202d2d2d43757272656e74206f626a6563742062616c61" - "6e6365206c656e677468202858525020616d6f756e74293a43757272656e74206f626a6563" - "742062616c616e6365202873657269616c697a65642058525020616d6f756e74293a437572" - "72656e74206f626a6563742062616c616e6365206c656e67746820286e6f6e2d5852502061" - "6d6f756e74293a43757272656e74206f626a6563742062616c616e63653a494e464f3a2067" - "65745f63757272656e745f6c65646765725f6f626a5f6669656c642842616c616e63652920" - "6661696c656420286d6179206265206578706563746564293a43757272656e74206c656467" - "6572206f626a656374206163636f756e743a494e464f3a206765745f63757272656e745f6c" - "65646765725f6f626a5f6669656c64284163636f756e7429206661696c65643a4375727265" - "6e74206e6573746564206669656c64206c656e6774683a43757272656e74206e6573746564" - "206669656c643a494e464f3a206765745f63757272656e745f6c65646765725f6f626a5f6e" - "65737465645f6669656c64206e6f74206170706c696361626c653a43757272656e74206f62" - "6a656374205369676e657273206172726179206c656e6774683a43757272656e74206e6573" - "746564206172726179206c656e6774683a494e464f3a206765745f63757272656e745f6c65" - "646765725f6f626a5f6e65737465645f61727261795f6c656e206e6f74206170706c696361" - "626c653a535543434553533a2043757272656e74206c6564676572206f626a656374206675" - "6e6374696f6e732d2d2d2043617465676f727920343a20416e79204c6564676572204f626a" - "6563742046756e6374696f6e73202d2d2d5375636365737366756c6c792063616368656420" - "6f626a65637420696e20736c6f743a436163686564206f626a6563742062616c616e636520" - "6c656e677468202858525020616d6f756e74293a436163686564206f626a6563742062616c" - "616e6365202873657269616c697a65642058525020616d6f756e74293a436163686564206f" - "626a6563742062616c616e6365206c656e67746820286e6f6e2d58525020616d6f756e7429" - "3a436163686564206f626a6563742062616c616e63653a494e464f3a206765745f6c656467" - "65725f6f626a5f6669656c642842616c616e636529206661696c65643a436163686564206e" - "6573746564206669656c64206c656e6774683a436163686564206e6573746564206669656c" - "643a494e464f3a206765745f6c65646765725f6f626a5f6e65737465645f6669656c64206e" - "6f74206170706c696361626c653a436163686564206f626a656374205369676e6572732061" - "72726179206c656e6774683a436163686564206e6573746564206172726179206c656e6774" - "683a494e464f3a206765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c" - "656e206e6f74206170706c696361626c653a535543434553533a20416e79206c6564676572" - "206f626a6563742066756e6374696f6e73494e464f3a2063616368655f6c65646765725f6f" - "626a206661696c656420286578706563746564207769746820746573742066697874757265" - "73293a494e464f3a206765745f6c65646765725f6f626a5f6669656c64206661696c656420" - "617320657870656374656420286e6f20636163686564206f626a656374293a494e464f3a20" - "6765745f6c65646765725f6f626a5f6e65737465645f6669656c64206661696c6564206173" - "2065787065637465643a494e464f3a206765745f6c65646765725f6f626a5f61727261795f" - "6c656e206661696c65642061732065787065637465643a494e464f3a206765745f6c656467" - "65725f6f626a5f6e65737465645f61727261795f6c656e206661696c656420617320657870" - "65637465643a535543434553533a20416e79206c6564676572206f626a6563742066756e63" - "74696f6e732028696e7465726661636520746573746564294552524f523a206163636f756e" - "745f6b65796c6574206661696c656420666f722063616368696e6720746573743a2d2d2d20" - "43617465676f727920353a204b65796c65742047656e65726174696f6e2046756e6374696f" - "6e73202d2d2d4163636f756e74206b65796c65743a546573745479706543726564656e7469" - "616c206b65796c65743a494e464f3a2063726564656e7469616c5f6b65796c657420666169" - "6c656420286578706563746564202d20696e74657266616365206973737565293a45736372" - "6f77206b65796c65743a4f7261636c65206b65796c65743a535543434553533a204b65796c" - "65742067656e65726174696f6e2066756e6374696f6e734552524f523a206f7261636c655f" - "6b65796c6574206661696c65643a4552524f523a20657363726f775f6b65796c6574206661" - "696c65643a4552524f523a206163636f756e745f6b65796c6574206661696c65643a2d2d2d" - "2043617465676f727920363a205574696c6974792046756e6374696f6e73202d2d2d48656c" - "6c6f2c205852504c205741534d20776f726c6421496e70757420646174613a534841353132" - "2068616c6620686173683a4e46542064617461206c656e6774683a4e465420646174613a49" - "4e464f3a206765745f6e6674206661696c656420286578706563746564202d206e6f207375" - "6368204e4654293a54657374207472616365206d6573736167657061796c6f616454726163" - "652066756e6374696f6e206279746573207772697474656e3a54657374206e756d62657220" - "747261636554726163655f6e756d2066756e6374696f6e2073756363656564656453554343" - "4553533a205574696c6974792066756e6374696f6e734552524f523a2074726163655f6e75" - "6d2829206661696c65643a4552524f523a2074726163652829206661696c65643a4552524f" - "523a20636f6d707574655f7368613531325f68616c66206661696c65643a2d2d2d20436174" - "65676f727920373a2044617461205570646174652046756e6374696f6e73202d2d2d557064" - "61746564206c656467657220656e74727920646174612066726f6d205741534d2074657374" - "5375636365737366756c6c792075706461746564206c656467657220656e74727920776974" - "683a535543434553533a2044617461207570646174652066756e6374696f6e734552524f52" - "3a207570646174655f64617461206661696c65643a004d0970726f64756365727302086c61" - "6e6775616765010452757374000c70726f6365737365642d6279010572757374631d312e38" - "372e30202831373036376539616320323032352d30352d303929002c0f7461726765745f66" - "65617475726573022b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; + "0061736d0100000001540c60027f7f017f60037f7f7f017f60047f7f7f7f017f60017f017f60067f7f7f7f7f7f017f" + "60037f7f7f0060057f7f7f7f7f017f60037f7f7e017f60087f7f7f7f7f7f7f7f017f60017f0060027f7f006000017f" + "02ae061a08686f73745f6c69620c6765745f74785f6669656c64000108686f73745f6c69620974726163655f6e756d" + "000708686f73745f6c6962057472616365000608686f73745f6c69620e6765745f6c65646765725f73716e00000868" + "6f73745f6c6962166765745f706172656e745f6c65646765725f74696d65000008686f73745f6c6962166765745f70" + "6172656e745f6c65646765725f68617368000008686f73745f6c6962136765745f74785f6e65737465645f6669656c" + "64000208686f73745f6c6962106765745f74785f61727261795f6c656e000308686f73745f6c6962176765745f7478" + "5f6e65737465645f61727261795f6c656e000008686f73745f6c69621c6765745f63757272656e745f6c6564676572" + "5f6f626a5f6669656c64000108686f73745f6c6962236765745f63757272656e745f6c65646765725f6f626a5f6e65" + "737465645f6669656c64000208686f73745f6c6962206765745f63757272656e745f6c65646765725f6f626a5f6172" + "7261795f6c656e000308686f73745f6c6962276765745f63757272656e745f6c65646765725f6f626a5f6e65737465" + "645f61727261795f6c656e000008686f73745f6c69621063616368655f6c65646765725f6f626a000108686f73745f" + "6c69621163726564656e7469616c5f6b65796c6574000808686f73745f6c69620d657363726f775f6b65796c657400" + "0408686f73745f6c69620d6f7261636c655f6b65796c6574000408686f73745f6c696213636f6d707574655f736861" + "3531325f68616c66000208686f73745f6c6962076765745f6e6674000408686f73745f6c69620b7570646174655f64" + "617461000008686f73745f6c6962146765745f6c65646765725f6f626a5f6669656c64000208686f73745f6c69621b" + "6765745f6c65646765725f6f626a5f6e65737465645f6669656c64000608686f73745f6c6962186765745f6c656467" + "65725f6f626a5f61727261795f6c656e000008686f73745f6c69621f6765745f6c65646765725f6f626a5f6e657374" + "65645f61727261795f6c656e000108686f73745f6c69620e6163636f756e745f6b65796c6574000208686f73745f6c" + "69620d74726163655f6163636f756e740002030c0b090a05050b05000101030005030100110619037f01418080c000" + "0b7f0041af99c0000b7f0041b099c0000b072e04066d656d6f727902000666696e697368001e0a5f5f646174615f65" + "6e6403010b5f5f686561705f6261736503020ac61d0b990101027f230041306b220124002000027f41818020200141" + "1c6a4114100022024114470440417f20022002417f4e1b210241010c010b200020012f001c3b0001200041036a2001" + "411e6a2d00003a0000200120012900233703082001200141286a29000037000d200128001f21022000410d6a200129" + "000d3700002000200129030837020841000b3a000020002002360204200141306a24000b460020012d000041014604" + "40418080c000410b20013402041001000b20002001290001370000200041106a200141116a28000036000020004108" + "6a200141096a2900003700000b1900200241214f0440000b20002002360204200020013602000b1900200241094f04" + "40000b20002002360204200020013602000bde1a01097f230041b0036b22002400418b80c000411b41014100410010" + "021a41a680c000411941014100410010021a41e780c000412b41014100410010021a20004100360270024002400240" + "02400240024002400240200041f0006a220741041003220141004a0440419281c00041172000280270220141187420" + "014180fe03714108747220014108764180fe037120014118767272ad10011a200041003602900120004190016a2203" + "41041004220141004c0d0141a981c0004113200028029001220141187420014180fe03714108747220014108764180" + "fe037120014118767272ad10011a200041c8016a22024200370300200041c0016a22054200370300200041b8016a22" + "044200370300200042003703b001200041b0016a22064120100522014120470d0241bc81c000411320064120410110" + "021a41cf81c000412041014100410010021a41dc82c000412e41014100410010021a200041a0016a41003602002000" + "4198016a420037030020004200370390014181802020034114100022014114470d03418a83c00041142003101f2000" + "42003703704188801820074108100022014108470d04419e83c0004117420810011a41b583c0004128200741084101" + "10021a2000410036024841848008200041c8006a22034104100022014104470d0541dd83c000411520034104410110" + "021a200041013b0034200242003703002005420037030020044200370300200042003703b0010240200041346a4102" + "200641201006220141004e044041f283c00041142001ad10011a200041286a20062001101c418684c000410d200028" + "0228200028022c410110021a0c010b419384c00041292001ac10011a0b41bc84c00041154183803c1007ac10011a41" + "d184c00041134189803c1007ac10011a0240200041346a41021008220141004e044041e484c00041142001ad10011a" + "0c010b41f884c000412d2001ac10011a0b41a585c000412341014100410010021a41de86c000413341014100410010" + "021a2000420037037041828018200041f0006a220141081009220341004c0d0620034108460440419187c000412b42" + "0810011a41bc87c000412f20014108410110021a0c080b41eb87c000412f2003ad10011a200041206a200041f0006a" + "2003101d419a88c000411720002802202000280224410110021a0c070b41bf82c000411d2001ac10011a419b7f2102" + "0c070b419a82c00041252001ac10011a419a7f21020c060b41ef81c000412b2001ac10011a41997f21020c050b41b4" + "86c000412a2001ac10011a41b77e21020c040b41f385c00041c1002001ac10011a41b67e21020c030b41c885c00041" + "2b2001ac10011a41b57e21020c020b41b188c00041c5002003ac10011a0b200041a0016a410036020020004198016a" + "4200370300200042003703900102404181802020004190016a220341141009220141004a044041f688c000411e2003" + "101f0c010b419489c00041332001ac10011a0b200041013b0048200041c8016a4200370300200041c0016a42003703" + "00200041b8016a4200370300200042003703b0010240200041c8006a4102200041b0016a22014120100a220341004e" + "044041c789c000411c2003ad10011a200041186a20012003101c41e389c00041152000280218200028021c41011002" + "1a0c010b41f889c00041392003ac10011a0b41b18ac00041244183803c100bac10011a0240200041c8006a4102100c" + "220141004e044041d58ac000411c2001ad10011a0c010b41f18ac000413d2001ac10011a0b41ae8bc0004128410141" + "00410010021a41d68bc000412f41014100410010021a200041b0016a2203101a200041f0006a22012003101b200041" + "a8016a4200370300200041a0016a420037030020004198016a42003703002000420037039001024002400240024002" + "40200120004190016a2203102022014120460440200341204100100d220441004a044041858cc00041232004ad1001" + "1a200042003703482004200041c8006a220141081021220341004c0d022003410846044041a88cc000412a42081001" + "1a41d28cc000412e20014108410110021a0c060b41808dc000412e2003ad10011a200041106a200041c8006a200310" + "1d41ae8dc000411620002802102000280214410110021a0c050b41e68fc000413c2004ac10011a200041c8016a4200" + "370300200041c0016a4200370300200041b8016a4200370300200042003703b0014101200041b0016a412010212201" + "4100480d020c030b41ba92c000412e2001ac10011a41ef7c21020c050b41c48dc000412b2003ac10011a0c020b41a2" + "90c00041c1002001ac10011a0b200041013b00484101200041c8006a200041b0016a10222201410048044041e390c0" + "0041352001ac10011a0b4101102322014100480440419891c00041322001ac10011a0b4101200041c8006a10242201" + "410048044041ca91c00041392001ac10011a0b418392c000413741014100410010021a0c010b200041013b00342000" + "41c8016a4200370300200041c0016a4200370300200041b8016a4200370300200042003703b0010240200420004134" + "6a200041b0016a22011022220341004e044041ef8dc000411b2003ad10011a200041086a20012003101c418a8ec000" + "41142000280208200028020c410110021a0c010b419e8ec00041312003ac10011a0b41cf8ec000412320041023ac10" + "011a02402004200041346a1024220141004e044041f28ec000411b2001ad10011a0c010b418d8fc00041352001ac10" + "011a0b41c28fc000412441014100410010021a0b41e892c000412f41014100410010021a200041b0016a2201101a20" + "0041346a22042001101b200041e0006a4200370300200041d8006a4200370300200041d0006a420037030020004200" + "370348024002400240024002402004200041c8006a2203102022014120460440419793c000410f2003412041011002" + "1a20004188016a420037030020004180016a4200370300200041f8006a420037030020004200370370024020044114" + "2004411441a693c0004109200041f0006a22014120100e220341004a0440200020012003101c41ae93c00041122000" + "2802002000280204410110021a0c010b41c093c000413c2003ac10011a0b200041a8016a22064200370300200041a0" + "016a2202420037030020004198016a22054200370300200042003703900120004180808cc07e360268200041346a22" + "034114200041e8006a410420004190016a22084120100f22014120470d0141fc93c000410e20084120410110021a20" + "0041c8016a4200370300200041c0016a4200370300200041b8016a4200370300200042003703b001200041808080d0" + "0236026c20034114200041ec006a4104200041b0016a22044120101022014120470d02418a94c000410e2004412041" + "0110021a419894c000412441014100410010021a419195c000412541014100410010021a20004188016a4200370300" + "20004180016a4200370300200041f8006a42003703002000420037037041b695c0004117200041f0006a2203412010" + "1122014120470d0341cd95c000410b41b695c0004117410110021a41d895c000411120034120410110021a2004101a" + "200041c8006a22072004101b2006420037030020024200370300200542003703002000420037039001024041002004" + "22026b410371220320026a220520024d0d0020030440200321010340200241003a0000200241016a2102200141016b" + "22010d000b0b200341016b4107490d000340200241003a0000200241076a41003a0000200241066a41003a00002002" + "41056a41003a0000200241046a41003a0000200241036a41003a0000200241026a41003a0000200241016a41003a00" + "00200241086a22022005470d000b0b200541800220036b2201417c716a220220054b04400340200541003602002005" + "41046a22052002490d000b0b024020022001410371220120026a22034f0d002001220504400340200241003a000020" + "0241016a2102200541016b22050d000b0b200141016b4107490d000340200241003a0000200241076a41003a000020" + "0241066a41003a0000200241056a41003a0000200241046a41003a0000200241036a41003a0000200241026a41003a" + "0000200241016a41003a0000200241086a22022003470d000b0b024020074114200841202004418002101222014100" + "4a044041e995c00041102001ad10011a20014181024f0d0641f995c000410920042001410110021a0c010b418296c0" + "00412e2001ac10011a0b41b096c000411241c296c00041074101100222014100480d0541c996c000411d2001ad1001" + "1a41e696c0004111422a1001410048044041ad97c000411a42a47b10011a41a47b21020c070b41f796c000411c4200" + "10011a41012102419397c000411a41014100410010021a41ff97c000412941014100410010021a41a898c000412810" + "132201412846044041d098c000412741a898c0004128410110021a41f798c000411e41014100410010021a41bf80c0" + "00412841014100410010021a0c070b419599c000411a2001ac10011a41c37a21020c060b41f494c000411d2001ac10" + "011a418b7c21020c050b41d894c000411c2001ac10011a41897c21020c040b41bc94c000411c2001ac10011a41887c" + "21020c030b41dd97c00041222001ac10011a41a77b21020c020b000b41c797c00041162001ac10011a41a57b21020b" + "200041b0036a240020020b0d00200020012002411410191a0b0c00200041142001412010180b0e0020004182801820" + "01200210140b0e002000200141022002412010150b0a0020004183803c10160b0a0020002001410210170b0bb91901" + "00418080c0000baf196572726f725f636f64653d3d3d3d20484f53542046554e4354494f4e532054455354203d3d3d" + "54657374696e6720323620686f73742066756e6374696f6e73535543434553533a20416c6c20686f73742066756e63" + "74696f6e20746573747320706173736564212d2d2d2043617465676f727920313a204c656467657220486561646572" + "2046756e6374696f6e73202d2d2d4c65646765722073657175656e6365206e756d6265723a506172656e74206c6564" + "6765722074696d653a506172656e74206c656467657220686173683a535543434553533a204c656467657220686561" + "6465722066756e6374696f6e734552524f523a206765745f706172656e745f6c65646765725f686173682077726f6e" + "67206c656e6774683a4552524f523a206765745f706172656e745f6c65646765725f74696d65206661696c65643a45" + "52524f523a206765745f6c65646765725f73716e206661696c65643a2d2d2d2043617465676f727920323a20547261" + "6e73616374696f6e20446174612046756e6374696f6e73202d2d2d5472616e73616374696f6e204163636f756e743a" + "5472616e73616374696f6e20466565206c656e6774683a5472616e73616374696f6e20466565202873657269616c69" + "7a65642058525020616d6f756e74293a5472616e73616374696f6e2053657175656e63653a4e657374656420666965" + "6c64206c656e6774683a4e6573746564206669656c643a494e464f3a206765745f74785f6e65737465645f6669656c" + "64206e6f74206170706c696361626c653a5369676e657273206172726179206c656e6774683a4d656d6f7320617272" + "6179206c656e6774683a4e6573746564206172726179206c656e6774683a494e464f3a206765745f74785f6e657374" + "65645f61727261795f6c656e206e6f74206170706c696361626c653a535543434553533a205472616e73616374696f" + "6e20646174612066756e6374696f6e734552524f523a206765745f74785f6669656c642853657175656e6365292077" + "726f6e67206c656e6774683a4552524f523a206765745f74785f6669656c6428466565292077726f6e67206c656e67" + "746820286578706563746564203820627974657320666f7220585250293a4552524f523a206765745f74785f666965" + "6c64284163636f756e74292077726f6e67206c656e6774683a2d2d2d2043617465676f727920333a2043757272656e" + "74204c6564676572204f626a6563742046756e6374696f6e73202d2d2d43757272656e74206f626a6563742062616c" + "616e6365206c656e677468202858525020616d6f756e74293a43757272656e74206f626a6563742062616c616e6365" + "202873657269616c697a65642058525020616d6f756e74293a43757272656e74206f626a6563742062616c616e6365" + "206c656e67746820286e6f6e2d58525020616d6f756e74293a43757272656e74206f626a6563742062616c616e6365" + "3a494e464f3a206765745f63757272656e745f6c65646765725f6f626a5f6669656c642842616c616e636529206661" + "696c656420286d6179206265206578706563746564293a43757272656e74206c6564676572206f626a656374206163" + "636f756e743a494e464f3a206765745f63757272656e745f6c65646765725f6f626a5f6669656c64284163636f756e" + "7429206661696c65643a43757272656e74206e6573746564206669656c64206c656e6774683a43757272656e74206e" + "6573746564206669656c643a494e464f3a206765745f63757272656e745f6c65646765725f6f626a5f6e6573746564" + "5f6669656c64206e6f74206170706c696361626c653a43757272656e74206f626a656374205369676e657273206172" + "726179206c656e6774683a43757272656e74206e6573746564206172726179206c656e6774683a494e464f3a206765" + "745f63757272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e206e6f74206170706c69" + "6361626c653a535543434553533a2043757272656e74206c6564676572206f626a6563742066756e6374696f6e732d" + "2d2d2043617465676f727920343a20416e79204c6564676572204f626a6563742046756e6374696f6e73202d2d2d53" + "75636365737366756c6c7920636163686564206f626a65637420696e20736c6f743a436163686564206f626a656374" + "2062616c616e6365206c656e677468202858525020616d6f756e74293a436163686564206f626a6563742062616c61" + "6e6365202873657269616c697a65642058525020616d6f756e74293a436163686564206f626a6563742062616c616e" + "6365206c656e67746820286e6f6e2d58525020616d6f756e74293a436163686564206f626a6563742062616c616e63" + "653a494e464f3a206765745f6c65646765725f6f626a5f6669656c642842616c616e636529206661696c65643a4361" + "63686564206e6573746564206669656c64206c656e6774683a436163686564206e6573746564206669656c643a494e" + "464f3a206765745f6c65646765725f6f626a5f6e65737465645f6669656c64206e6f74206170706c696361626c653a" + "436163686564206f626a656374205369676e657273206172726179206c656e6774683a436163686564206e65737465" + "64206172726179206c656e6774683a494e464f3a206765745f6c65646765725f6f626a5f6e65737465645f61727261" + "795f6c656e206e6f74206170706c696361626c653a535543434553533a20416e79206c6564676572206f626a656374" + "2066756e6374696f6e73494e464f3a2063616368655f6c65646765725f6f626a206661696c65642028657870656374" + "656420776974682074657374206669787475726573293a494e464f3a206765745f6c65646765725f6f626a5f666965" + "6c64206661696c656420617320657870656374656420286e6f20636163686564206f626a656374293a494e464f3a20" + "6765745f6c65646765725f6f626a5f6e65737465645f6669656c64206661696c65642061732065787065637465643a" + "494e464f3a206765745f6c65646765725f6f626a5f61727261795f6c656e206661696c656420617320657870656374" + "65643a494e464f3a206765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e206661696c6564" + "2061732065787065637465643a535543434553533a20416e79206c6564676572206f626a6563742066756e6374696f" + "6e732028696e7465726661636520746573746564294552524f523a206163636f756e745f6b65796c6574206661696c" + "656420666f722063616368696e6720746573743a2d2d2d2043617465676f727920353a204b65796c65742047656e65" + "726174696f6e2046756e6374696f6e73202d2d2d4163636f756e74206b65796c65743a546573745479706543726564" + "656e7469616c206b65796c65743a494e464f3a2063726564656e7469616c5f6b65796c6574206661696c6564202865" + "78706563746564202d20696e74657266616365206973737565293a457363726f77206b65796c65743a4f7261636c65" + "206b65796c65743a535543434553533a204b65796c65742067656e65726174696f6e2066756e6374696f6e73455252" + "4f523a206f7261636c655f6b65796c6574206661696c65643a4552524f523a20657363726f775f6b65796c65742066" + "61696c65643a4552524f523a206163636f756e745f6b65796c6574206661696c65643a2d2d2d2043617465676f7279" + "20363a205574696c6974792046756e6374696f6e73202d2d2d48656c6c6f2c205852504c205741534d20776f726c64" + "21496e70757420646174613a5348413531322068616c6620686173683a4e46542064617461206c656e6774683a4e46" + "5420646174613a494e464f3a206765745f6e6674206661696c656420286578706563746564202d206e6f2073756368" + "204e4654293a54657374207472616365206d6573736167657061796c6f616454726163652066756e6374696f6e2062" + "79746573207772697474656e3a54657374206e756d62657220747261636554726163655f6e756d2066756e6374696f" + "6e20737563636565646564535543434553533a205574696c6974792066756e6374696f6e734552524f523a20747261" + "63655f6e756d2829206661696c65643a4552524f523a2074726163652829206661696c65643a4552524f523a20636f" + "6d707574655f7368613531325f68616c66206661696c65643a2d2d2d2043617465676f727920373a20446174612055" + "70646174652046756e6374696f6e73202d2d2d55706461746564206c656467657220656e7472792064617461206672" + "6f6d205741534d20746573745375636365737366756c6c792075706461746564206c656467657220656e7472792077" + "6974683a535543434553533a2044617461207570646174652066756e6374696f6e734552524f523a20757064617465" + "5f64617461206661696c65643a004d0970726f64756365727302086c616e6775616765010452757374000c70726f63" + "65737365642d6279010572757374631d312e38372e30202831373036376539616320323032352d30352d303929002c" + "0f7461726765745f6665617475726573022b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; extern std::string const deepRecursionHex = - "0061736d010000000105016000017f030201000608017f0141c0843d0b070a010666696e69" - "736800000a16011400230045044041010f0b230041016b240010000b"; + "0061736d010000000105016000017f030201000608017f0141c0843d0b070a010666696e69736800000a1601140023" + "0045044041010f0b230041016b240010000b"; extern std::string const allKeyletsWasmHex = - "0061736d0100000001480960067f7f7f7f7f7f017f60047f7f7f7f017f60087f7f7f7f7f7f" - "7f7f017f60037f7f7f017f60037f7f7e017f60057f7f7f7f7f017f60057f7f7f7f7f006000" - "017f60037f7f7f000284051808686f73745f6c69620974726163655f6e756d000408686f73" - "745f6c6962057472616365000508686f73745f6c69621063616368655f6c65646765725f6f" - "626a000308686f73745f6c6962146765745f6c65646765725f6f626a5f6669656c64000108" - "686f73745f6c69621c6765745f63757272656e745f6c65646765725f6f626a5f6669656c64" - "000308686f73745f6c69620d74726163655f6163636f756e74000108686f73745f6c69620e" - "6163636f756e745f6b65796c6574000108686f73745f6c69620b6c696e655f6b65796c6574" - "000208686f73745f6c69620a616d6d5f6b65796c6574000008686f73745f6c69620c636865" - "636b5f6b65796c6574000008686f73745f6c69621163726564656e7469616c5f6b65796c65" - "74000208686f73745f6c69620f64656c65676174655f6b65796c6574000008686f73745f6c" - "6962166465706f7369745f707265617574685f6b65796c6574000008686f73745f6c69620a" - "6469645f6b65796c6574000108686f73745f6c69620d657363726f775f6b65796c65740000" - "08686f73745f6c6962136d70745f69737375616e63655f6b65796c6574000008686f73745f" - "6c69620e6d70746f6b656e5f6b65796c6574000008686f73745f6c6962106e66745f6f6666" - "65725f6b65796c6574000008686f73745f6c69620c6f666665725f6b65796c657400000868" - "6f73745f6c69620e7061796368616e5f6b65796c6574000208686f73745f6c69621a706572" - "6d697373696f6e65645f646f6d61696e5f6b65796c6574000008686f73745f6c69620e7369" - "676e6572735f6b65796c6574000108686f73745f6c69620d7469636b65745f6b65796c6574" - "000008686f73745f6c69620c7661756c745f6b65796c657400000304030607080503010011" - "0619037f01418080c0000b7f0041ad8ac0000b7f0041b08ac0000b073e05066d656d6f7279" - "02000d6f626a6563745f65786973747300180666696e69736800190a5f5f646174615f656e" - "6403010b5f5f686561705f6261736503020ab73403a80502017f017e230041a0016b220524" - "00024020012d0000410146044041c280c000411620012802042201ac10001a200041013a00" - "00200020013602040c010b200541186a200141196a290000370300200541106a200141116a" - "290000370300200541086a200141096a290000370300200520012900013703002002200320" - "054120410110011a02402005412041001002220141004a04402004450440418b80c000410f" - "4285801410001a20014185801420054180016a412010032201412047044041a680c0004115" - "417f20012001417f4e1b2201ac10001a200041013a0000200020013602040c040b200541c2" - "006a20054182016a2d00003a0000200541f0006a20054197016a2900002206370300200541" - "286a22012005418f016a290000370300200541306a22022006370300200541386a22032005" - "419f016a2d00003a0000200520052f0080013b014020052005290087013703202005200528" - "008301360043200541df006a20032d00003a0000200541d7006a2002290300370000200541" - "cf006a200129030037000020052005290320370047419a80c000410c200541406b41204101" - "10011a0c020b418b80c000410f2004ac10001a2001200420054180016a4114100322014114" - "47044041a680c0004115417f20012001417f4e1b2201ac10001a200041013a000020002001" - "3602040c030b200541c2006a20054182016a2d00003a000020052005290087013703602005" - "2005418c016a290000370065200520052f0080013b01402005200529036037032020052005" - "2900653700252005200528008301360043200541cc006a2005290025370000200520052903" - "20370047419a80c000410c200541406b4114410110011a0c010b41bb80c00041072001ac10" - "001a200041013a0000200020013602040c010b20004180023b01000b200541a0016a24000b" - "8b2a02087f027e23004180076b2200240041d880c000412341014100410010011a02402000" - "027f02404181802020004188016a22024114100422014114460440200041066a2000418a01" - "6a22032d00003a00002000200029008f013703e001200020004194016a22042900003700e5" - "01200020002f0088013b0104200020002903e0013703d806200020002900e5013700dd0620" - "00200028008b01360007200041106a20002900dd06370000200020002903d80637000b41fb" - "80c0004108200041046a2205411410051a4183802020024114100422014114470d03200041" - "1a6a20032d00003a00002000200029008f013703e001200020042900003700e50120002000" - "2f0088013b0118200020002903e0013703d806200020002900e5013700dd06200020002800" - "8b0136001b200041246a20002900dd06370000200020002903d80637001f418381c000410c" - "200041186a411410051a200041a0016a2203420037030020004198016a2204420037030020" - "004190016a420037030020004200370388012005411420024120100622014120460d010240" - "20014100480440200020013602300c010b2000417f3602300b41010c020b0c020b200041c5" - "006a20032903003700002000413d6a2004290300370000200041356a20004190016a290300" - "370000200020002903880137002d41000b3a002c20004188016a2000412c6a418f81c00041" - "07418180201018024020002d0088014101460440200028028c01210141878ac00041124205" - "10001a0c010b41002101419681c000413541014100410010011a200041de006a41c4003a00" - "00200041d8006a4100360200200041e3006a41003a0000200041d5a6013b015c2000420037" - "03502000410036005f200041a0016a2203420037030020004198016a220442003703002000" - "4190016a2205420037030020004200370388010240200041046a4114200041186a41142000" - "41d0006a411420004188016a41201007220241204704400240200241004804402000200236" - "02680c010b2000417f3602680b410121010c010b200041fd006a2003290300370000200041" - "f5006a2004290300370000200041ed006a200529030037000020002000290388013700650b" - "200020013a006420004188016a200041e4006a41cb81c00041094100101820002d00880141" - "01460440200028028c01210141878ac0004112420510001a0c010b41d481c0004137410141" - "00410010011a200041f0016a200041286a2203280100360200200041e8016a200041206a22" - "04290100370300200041fc016a200041d8006a290300220837020020004184026a200041e0" - "006a2802002202360200200020002901183703e0012000200029035022093702f401200041" - "e8066a22012002360200200041e0066a22022008370300200020093703d806200041f4066a" - "2004290100370200200041fc066a2003280100360200200020002901183702ec0620004188" - "026a200041d8066a22034128101a2000418c016a200041e0016a41d000101a200041013602" - "8801200041f0066a220442003703002001420037030020024200370300200042003703d806" - "2000027f41998ac0004114200041b4016a4128200341201008220341204704400240200341" - "00480440200020033602e4010c010b2000417f3602e4010b41010c010b200041f9016a2004" - "290300370000200041f1016a2001290300370000200041e9016a2002290300370000200020" - "002903d8063700e10141000b3a00e001200041b4026a200041e0016a418b82c00041034181" - "8020101820002d00b402410146044020002802b802210141878ac0004112420610001a0c01" - "0b41002101418e82c000413141014100410010011a200041808080303602d806200041f801" - "6a22034200370300200041f0016a22044200370300200041e8016a22054200370300200042" - "003703e0010240200041046a4114200041d8066a4104200041e0016a412010092202412047" - "0440024020024100480440200020023602c0020c010b2000417f3602c0020b410121010c01" - "0b200041d5026a2003290300370000200041cd026a2004290300370000200041c5026a2005" - "290300370000200020002903e0013700bd020b200020013a00bc02200041e0016a200041bc" - "026a41bf82c000410541818020101820002d00e001410146044020002802e401210141878a" - "c0004112420610001a0c010b4100210141c482c000413341014100410010011a200041f801" - "6a22034200370300200041f0016a22044200370300200041e8016a22054200370300200042" - "003703e0010240200041046a220241142002411441f782c0004112200041e0016a4120100a" - "22024120470440024020024100480440200020023602e4020c010b2000417f3602e4020b41" - "0121010c010b200041f9026a2003290300370000200041f1026a2004290300370000200041" - "e9026a2005290300370000200020002903e0013700e1020b200020013a00e002200041e001" - "6a200041e0026a418983c000410a41988020101820002d00e001410146044020002802e401" - "210141878ac0004112420710001a0c010b41002101419383c000413841014100410010011a" - "200041f8016a22034200370300200041f0016a22044200370300200041e8016a2205420037" - "0300200042003703e0010240200041046a4114200041186a4114200041e0016a4120100b22" - "02412047044002402002410048044020002002360288030c010b2000417f360288030b4101" - "21010c010b2000419d036a200329030037000020004195036a20042903003700002000418d" - "036a2005290300370000200020002903e001370085030b200020013a008403200041e0016a" - "20004184036a41cb83c000410841818020101820002d00e001410146044020002802e40121" - "0141878ac0004112420810001a0c010b41d383c000413641014100410010011a230041206b" - "22012400200141186a22044200370300200141106a22054200370300200141086a22064200" - "37030020014200370300200041a8036a2202027f200041046a4114200041186a4114200141" - "20100c22034120470440024020034100480440200220033602040c010b2002417f3602040b" - "41010c010b20022001290300370001200241196a2004290300370000200241116a20052903" - "00370000200241096a200629030037000041000b3a0000200141206a2400200041e0016a20" - "02418984c000410e41818020101820002d00e001410146044020002802e401210141878ac0" - "004112420910001a0c010b419784c000413c41014100410010011a230041206b2201240020" - "0141186a22044200370300200141106a22054200370300200141086a220642003703002001" - "4200370300200041cc036a2202027f200041046a411420014120100d220341204704400240" - "20034100480440200220033602040c010b2002417f3602040b41010c010b20022001290300" - "370001200241196a2004290300370000200241116a2005290300370000200241096a200629" - "030037000041000b3a0000200141206a2400200041e0016a200241d384c000410341818020" - "101820002d00e001410146044020002802e401210141878ac0004112420a10001a0c010b41" - "d684c000413141014100410010011a230041306b22012400200141808080d80036020c2001" - "41286a22044200370300200141206a22054200370300200141186a22064200370300200142" - "00370310200041f0036a2202027f200041046a41142001410c6a4104200141106a4120100e" - "22034120470440024020034100480440200220033602040c010b2002417f3602040b41010c" - "010b20022001290310370001200241196a2004290300370000200241116a20052903003700" - "00200241096a200629030037000041000b3a0000200141306a2400200041e0016a20024187" - "85c000410641818020101820002d00e001410146044020002802e401210141878ac0004112" - "420b10001a0c010b418d85c000413441014100410010011a230041306b2201240020014180" - "8080e00036020c200141286a22044200370300200141206a22054200370300200141186a22" - "0642003703002001420037031020004194046a2202027f200041046a41142001410c6a4104" - "200141106a4120100f22034120470440024020034100480440200220033602040c010b2002" - "417f3602040b41010c010b20022001290310370001200241196a2004290300370000200241" - "116a2005290300370000200241096a200629030037000041000b3a0000200141306a240020" - "0041f4016a200041146a280100360200200041ec016a2000410c6a29010037020020002000" - "2901043702e401200041808080e0003602e001200041d8066a200241c185c000410b418480" - "20101820002d00d806410146044020002802dc06210141878ac0004112420c10001a0c010b" - "41cc85c000413941014100410010011a230041206b22012400200141186a22044200370300" - "200141106a22054200370300200141086a2206420037030020014200370300200041b8046a" - "2202027f200041e0016a4118200041186a4114200141201010220341204704400240200341" - "00480440200220033602040c010b2002417f3602040b41010c010b20022001290300370001" - "200241196a2004290300370000200241116a2005290300370000200241096a200629030037" - "000041000b3a0000200141206a2400200041d8066a2002418586c000410741818020101820" - "002d00d806410146044020002802dc06210141878ac0004112420d10001a0c010b418c86c0" - "00413541014100410010011a230041306b220124002001418080803036020c200141286a22" - "044200370300200141206a22054200370300200141186a2206420037030020014200370310" - "200041dc046a2202027f200041186a41142001410c6a4104200141106a4120101122034120" - "470440024020034100480440200220033602040c010b2002417f3602040b41010c010b2002" - "2001290310370001200241196a2004290300370000200241116a2005290300370000200241" - "096a200629030037000041000b3a0000200141306a2400200041d8066a200241c186c00041" - "0c41828020101820002d00d806410146044020002802dc06210141878ac0004112420d1000" - "1a0c010b41cd86c000413a41014100410010011a230041306b22012400200141808080e800" - "36020c200141286a22044200370300200141206a22054200370300200141186a2206420037" - "03002001420037031020004180056a2202027f200041046a41142001410c6a410420014110" - "6a4120101222034120470440024020034100480440200220033602040c010b2002417f3602" - "040b41010c010b20022001290310370001200241196a2004290300370000200241116a2005" - "290300370000200241096a200629030037000041000b3a0000200141306a2400200041d806" - "6a2002418787c000410541818020101820002d00d806410146044020002802dc0621014187" - "8ac0004112420d10001a0c010b418c87c000413341014100410010011a230041306b220124" - "00200141808080f00036020c200141286a22044200370300200141206a2205420037030020" - "0141186a2206420037030020014200370310200041a4056a2202027f200041046a41142000" - "41186a41142001410c6a4104200141106a4120101322034120470440024020034100480440" - "200220033602040c010b2002417f3602040b41010c010b2002200129031037000120024119" - "6a2004290300370000200241116a2005290300370000200241096a20062903003700004100" - "0b3a0000200141306a2400200041d8066a200241bf87c000410a41818020101820002d00d8" - "06410146044020002802dc06210141878ac0004112420e10001a0c010b41c987c000413841" - "014100410010011a230041306b22012400200141808080f80036020c200141286a22044200" - "370300200141206a22054200370300200141186a2206420037030020014200370310200041" - "c8056a2202027f200041046a41142001410c6a4104200141106a4120101422034120470440" - "024020034100480440200220033602040c010b2002417f3602040b41010c010b2002200129" - "0310370001200241196a2004290300370000200241116a2005290300370000200241096a20" - "0629030037000041000b3a0000200141306a2400200041d8066a2002418188c00041124182" - "8020101820002d00d806410146044020002802dc06210141878ac0004112420f10001a0c01" - "0b419388c00041c00041014100410010011a230041206b22012400200141186a2204420037" - "0300200141106a22054200370300200141086a2206420037030020014200370300200041ec" - "056a2202027f200041046a4114200141201015220341204704400240200341004804402002" - "20033602040c010b2002417f3602040b41010c010b20022001290300370001200241196a20" - "04290300370000200241116a2005290300370000200241096a200629030037000041000b3a" - "0000200141206a2400200041d8066a200241d388c000410a4100101820002d00d806410146" - "044020002802dc06210141878ac0004112421010001a0c010b41dd88c00041384101410041" - "0010011a230041306b22012400200141808080900136020c200141286a2204420037030020" - "0141206a22054200370300200141186a220642003703002001420037031020004190066a22" - "02027f200041046a41142001410c6a4104200141106a412010162203412047044002402003" - "4100480440200220033602040c010b2002417f3602040b41010c010b200220012903103700" - "01200241196a2004290300370000200241116a2005290300370000200241096a2006290300" - "37000041000b3a0000200141306a2400200041d8066a2002419589c0004106418180201018" - "20002d00d806410146044020002802dc06210141878ac0004112421210001a0c010b410121" - "01419b89c000413441014100410010011a230041306b22022400200241808080980136020c" - "200241286a22054200370300200241206a22064200370300200241186a2207420037030020" - "024200370310200041b4066a2203027f200041046a41142002410c6a4104200241106a4120" - "101722044120470440024020044100480440200320043602040c010b2003417f3602040b41" - "010c010b20032002290310370001200341196a2005290300370000200341116a2006290300" - "370000200341096a200729030037000041000b3a0000200241306a2400200041d8066a2003" - "41cf89c000410541818020101820002d00d806410146044020002802dc06210141878ac000" - "4112421310001a0c010b41d489c000413341014100410010011a0b20004180076a24002001" - "0f0b418080c000410b417f20012001417f4e1bac1000000bfd0401067f200241104f044002" - "4020002000410020006b41037122056a22044f0d0020012103200504402005210603402000" - "20032d00003a0000200341016a2103200041016a2100200641016b22060d000b0b20054101" - "6b4107490d000340200020032d00003a0000200041016a200341016a2d00003a0000200041" - "026a200341026a2d00003a0000200041036a200341036a2d00003a0000200041046a200341" - "046a2d00003a0000200041056a200341056a2d00003a0000200041066a200341066a2d0000" - "3a0000200041076a200341076a2d00003a0000200341086a2103200041086a22002004470d" - "000b0b2004200220056b2207417c7122086a21000240200120056a22064103714504402000" - "20044d0d0120062101034020042001280200360200200141046a2101200441046a22042000" - "490d000b0c010b200020044d0d002006410374220541187121032006417c71220241046a21" - "01410020056b41187121052002280200210203402004200220037620012802002202200574" - "72360200200141046a2101200441046a22042000490d000b0b20074103712102200620086a" - "21010b02402000200020026a22064f0d002002410771220304400340200020012d00003a00" - "00200141016a2101200041016a2100200341016b22030d000b0b200241016b4107490d0003" - "40200020012d00003a0000200041016a200141016a2d00003a0000200041026a200141026a" - "2d00003a0000200041036a200141036a2d00003a0000200041046a200141046a2d00003a00" - "00200041056a200141056a2d00003a0000200041066a200141066a2d00003a000020004107" - "6a200141076a2d00003a0000200141086a2101200041086a22002006470d000b0b0b0ba30a" - "0100418080c0000b990a6572726f725f636f64653d47657474696e67206669656c643a2046" - "69656c6420646174613a204572726f722067657474696e67206669656c643a204572726f72" - "3a204572726f722067657474696e67206b65796c65743a202424242424205354415254494e" - "47205741534d20455845435554494f4e2024242424244163636f756e743a44657374696e61" - "74696f6e3a4163636f756e744163636f756e74206f626a656374206578697374732c207072" - "6f63656564696e67207769746820657363726f772066696e6973682e54727573746c696e65" - "54727573746c696e65206f626a656374206578697374732c2070726f63656564696e672077" - "69746820657363726f772066696e6973682e414d4d414d4d206f626a656374206578697374" - "732c2070726f63656564696e67207769746820657363726f772066696e6973682e43686563" - "6b436865636b206f626a656374206578697374732c2070726f63656564696e672077697468" - "20657363726f772066696e6973682e7465726d73616e64636f6e646974696f6e7343726564" - "656e7469616c43726564656e7469616c206f626a656374206578697374732c2070726f6365" - "6564696e67207769746820657363726f772066696e6973682e44656c656761746544656c65" - "67617465206f626a656374206578697374732c2070726f63656564696e6720776974682065" - "7363726f772066696e6973682e4465706f736974507265617574684465706f736974507265" - "61757468206f626a656374206578697374732c2070726f63656564696e6720776974682065" - "7363726f772066696e6973682e444944444944206f626a656374206578697374732c207072" - "6f63656564696e67207769746820657363726f772066696e6973682e457363726f77457363" - "726f77206f626a656374206578697374732c2070726f63656564696e672077697468206573" - "63726f772066696e6973682e4d505449737375616e63654d505449737375616e6365206f62" - "6a656374206578697374732c2070726f63656564696e67207769746820657363726f772066" - "696e6973682e4d50546f6b656e4d50546f6b656e206f626a656374206578697374732c2070" - "726f63656564696e67207769746820657363726f772066696e6973682e4e46546f6b656e4f" - "666665724e46546f6b656e4f66666572206f626a656374206578697374732c2070726f6365" - "6564696e67207769746820657363726f772066696e6973682e4f666665724f66666572206f" - "626a656374206578697374732c2070726f63656564696e67207769746820657363726f7720" - "66696e6973682e5061794368616e6e656c5061794368616e6e656c206f626a656374206578" - "697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e50" - "65726d697373696f6e6564446f6d61696e5065726d697373696f6e6564446f6d61696e206f" - "626a656374206578697374732c2070726f63656564696e67207769746820657363726f7720" - "66696e6973682e5369676e65724c6973745369676e65724c697374206f626a656374206578" - "697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e54" - "69636b65745469636b6574206f626a656374206578697374732c2070726f63656564696e67" - "207769746820657363726f772066696e6973682e5661756c745661756c74206f626a656374" - "206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973" - "682e43757272656e74207365712076616c75653a004d0970726f64756365727302086c616e" - "6775616765010452757374000c70726f6365737365642d6279010572757374631d312e3837" - "2e30202831373036376539616320323032352d30352d303929002c0f7461726765745f6665" - "617475726573022b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; + "0061736d0100000001480960067f7f7f7f7f7f017f60047f7f7f7f017f60087f7f7f7f7f7f7f7f017f60037f7f7f01" + "7f60037f7f7e017f60057f7f7f7f7f017f60057f7f7f7f7f006000017f60037f7f7f000284051808686f73745f6c69" + "620974726163655f6e756d000408686f73745f6c6962057472616365000508686f73745f6c69621063616368655f6c" + "65646765725f6f626a000308686f73745f6c6962146765745f6c65646765725f6f626a5f6669656c64000108686f73" + "745f6c69621c6765745f63757272656e745f6c65646765725f6f626a5f6669656c64000308686f73745f6c69620d74" + "726163655f6163636f756e74000108686f73745f6c69620e6163636f756e745f6b65796c6574000108686f73745f6c" + "69620b6c696e655f6b65796c6574000208686f73745f6c69620a616d6d5f6b65796c6574000008686f73745f6c6962" + "0c636865636b5f6b65796c6574000008686f73745f6c69621163726564656e7469616c5f6b65796c6574000208686f" + "73745f6c69620f64656c65676174655f6b65796c6574000008686f73745f6c6962166465706f7369745f7072656175" + "74685f6b65796c6574000008686f73745f6c69620a6469645f6b65796c6574000108686f73745f6c69620d65736372" + "6f775f6b65796c6574000008686f73745f6c6962136d70745f69737375616e63655f6b65796c6574000008686f7374" + "5f6c69620e6d70746f6b656e5f6b65796c6574000008686f73745f6c6962106e66745f6f666665725f6b65796c6574" + "000008686f73745f6c69620c6f666665725f6b65796c6574000008686f73745f6c69620e7061796368616e5f6b6579" + "6c6574000208686f73745f6c69621a7065726d697373696f6e65645f646f6d61696e5f6b65796c6574000008686f73" + "745f6c69620e7369676e6572735f6b65796c6574000108686f73745f6c69620d7469636b65745f6b65796c65740000" + "08686f73745f6c69620c7661756c745f6b65796c6574000003040306070805030100110619037f01418080c0000b7f" + "0041ad8ac0000b7f0041b08ac0000b073e05066d656d6f727902000d6f626a6563745f65786973747300180666696e" + "69736800190a5f5f646174615f656e6403010b5f5f686561705f6261736503020ab73403a80502017f017e230041a0" + "016b22052400024020012d0000410146044041c280c000411620012802042201ac10001a200041013a000020002001" + "3602040c010b200541186a200141196a290000370300200541106a200141116a290000370300200541086a20014109" + "6a290000370300200520012900013703002002200320054120410110011a02402005412041001002220141004a0440" + "2004450440418b80c000410f4285801410001a20014185801420054180016a412010032201412047044041a680c000" + "4115417f20012001417f4e1b2201ac10001a200041013a0000200020013602040c040b200541c2006a20054182016a" + "2d00003a0000200541f0006a20054197016a2900002206370300200541286a22012005418f016a2900003703002005" + "41306a22022006370300200541386a22032005419f016a2d00003a0000200520052f0080013b014020052005290087" + "013703202005200528008301360043200541df006a20032d00003a0000200541d7006a2002290300370000200541cf" + "006a200129030037000020052005290320370047419a80c000410c200541406b4120410110011a0c020b418b80c000" + "410f2004ac10001a2001200420054180016a411410032201411447044041a680c0004115417f20012001417f4e1b22" + "01ac10001a200041013a0000200020013602040c030b200541c2006a20054182016a2d00003a000020052005290087" + "0137036020052005418c016a290000370065200520052f0080013b0140200520052903603703202005200529006537" + "00252005200528008301360043200541cc006a200529002537000020052005290320370047419a80c000410c200541" + "406b4114410110011a0c010b41bb80c00041072001ac10001a200041013a0000200020013602040c010b2000418002" + "3b01000b200541a0016a24000b8b2a02087f027e23004180076b2200240041d880c000412341014100410010011a02" + "402000027f02404181802020004188016a22024114100422014114460440200041066a2000418a016a22032d00003a" + "00002000200029008f013703e001200020004194016a22042900003700e501200020002f0088013b01042000200029" + "03e0013703d806200020002900e5013700dd062000200028008b01360007200041106a20002900dd06370000200020" + "002903d80637000b41fb80c0004108200041046a2205411410051a4183802020024114100422014114470d03200041" + "1a6a20032d00003a00002000200029008f013703e001200020042900003700e501200020002f0088013b0118200020" + "002903e0013703d806200020002900e5013700dd062000200028008b0136001b200041246a20002900dd0637000020" + "0020002903d80637001f418381c000410c200041186a411410051a200041a0016a2203420037030020004198016a22" + "04420037030020004190016a420037030020004200370388012005411420024120100622014120460d010240200141" + "00480440200020013602300c010b2000417f3602300b41010c020b0c020b200041c5006a2003290300370000200041" + "3d6a2004290300370000200041356a20004190016a290300370000200020002903880137002d41000b3a002c200041" + "88016a2000412c6a418f81c0004107418180201018024020002d0088014101460440200028028c01210141878ac000" + "4112420510001a0c010b41002101419681c000413541014100410010011a200041de006a41c4003a0000200041d800" + "6a4100360200200041e3006a41003a0000200041d5a6013b015c200042003703502000410036005f200041a0016a22" + "03420037030020004198016a2204420037030020004190016a2205420037030020004200370388010240200041046a" + "4114200041186a4114200041d0006a411420004188016a412010072202412047044002402002410048044020002002" + "3602680c010b2000417f3602680b410121010c010b200041fd006a2003290300370000200041f5006a200429030037" + "0000200041ed006a200529030037000020002000290388013700650b200020013a006420004188016a200041e4006a" + "41cb81c00041094100101820002d0088014101460440200028028c01210141878ac0004112420510001a0c010b41d4" + "81c000413741014100410010011a200041f0016a200041286a2203280100360200200041e8016a200041206a220429" + "0100370300200041fc016a200041d8006a290300220837020020004184026a200041e0006a28020022023602002000" + "20002901183703e0012000200029035022093702f401200041e8066a22012002360200200041e0066a220220083703" + "00200020093703d806200041f4066a2004290100370200200041fc066a2003280100360200200020002901183702ec" + "0620004188026a200041d8066a22034128101a2000418c016a200041e0016a41d000101a2000410136028801200041" + "f0066a220442003703002001420037030020024200370300200042003703d8062000027f41998ac0004114200041b4" + "016a412820034120100822034120470440024020034100480440200020033602e4010c010b2000417f3602e4010b41" + "010c010b200041f9016a2004290300370000200041f1016a2001290300370000200041e9016a200229030037000020" + "0020002903d8063700e10141000b3a00e001200041b4026a200041e0016a418b82c000410341818020101820002d00" + "b402410146044020002802b802210141878ac0004112420610001a0c010b41002101418e82c0004131410141004100" + "10011a200041808080303602d806200041f8016a22034200370300200041f0016a22044200370300200041e8016a22" + "054200370300200042003703e0010240200041046a4114200041d8066a4104200041e0016a41201009220241204704" + "40024020024100480440200020023602c0020c010b2000417f3602c0020b410121010c010b200041d5026a20032903" + "00370000200041cd026a2004290300370000200041c5026a2005290300370000200020002903e0013700bd020b2000" + "20013a00bc02200041e0016a200041bc026a41bf82c000410541818020101820002d00e001410146044020002802e4" + "01210141878ac0004112420610001a0c010b4100210141c482c000413341014100410010011a200041f8016a220342" + "00370300200041f0016a22044200370300200041e8016a22054200370300200042003703e0010240200041046a2202" + "41142002411441f782c0004112200041e0016a4120100a22024120470440024020024100480440200020023602e402" + "0c010b2000417f3602e4020b410121010c010b200041f9026a2003290300370000200041f1026a2004290300370000" + "200041e9026a2005290300370000200020002903e0013700e1020b200020013a00e002200041e0016a200041e0026a" + "418983c000410a41988020101820002d00e001410146044020002802e401210141878ac0004112420710001a0c010b" + "41002101419383c000413841014100410010011a200041f8016a22034200370300200041f0016a2204420037030020" + "0041e8016a22054200370300200042003703e0010240200041046a4114200041186a4114200041e0016a4120100b22" + "02412047044002402002410048044020002002360288030c010b2000417f360288030b410121010c010b2000419d03" + "6a200329030037000020004195036a20042903003700002000418d036a2005290300370000200020002903e0013700" + "85030b200020013a008403200041e0016a20004184036a41cb83c000410841818020101820002d00e0014101460440" + "20002802e401210141878ac0004112420810001a0c010b41d383c000413641014100410010011a230041206b220124" + "00200141186a22044200370300200141106a22054200370300200141086a2206420037030020014200370300200041" + "a8036a2202027f200041046a4114200041186a411420014120100c2203412047044002402003410048044020022003" + "3602040c010b2002417f3602040b41010c010b20022001290300370001200241196a2004290300370000200241116a" + "2005290300370000200241096a200629030037000041000b3a0000200141206a2400200041e0016a2002418984c000" + "410e41818020101820002d00e001410146044020002802e401210141878ac0004112420910001a0c010b419784c000" + "413c41014100410010011a230041206b22012400200141186a22044200370300200141106a22054200370300200141" + "086a2206420037030020014200370300200041cc036a2202027f200041046a411420014120100d2203412047044002" + "4020034100480440200220033602040c010b2002417f3602040b41010c010b20022001290300370001200241196a20" + "04290300370000200241116a2005290300370000200241096a200629030037000041000b3a0000200141206a240020" + "0041e0016a200241d384c000410341818020101820002d00e001410146044020002802e401210141878ac000411242" + "0a10001a0c010b41d684c000413141014100410010011a230041306b22012400200141808080d80036020c20014128" + "6a22044200370300200141206a22054200370300200141186a2206420037030020014200370310200041f0036a2202" + "027f200041046a41142001410c6a4104200141106a4120100e22034120470440024020034100480440200220033602" + "040c010b2002417f3602040b41010c010b20022001290310370001200241196a2004290300370000200241116a2005" + "290300370000200241096a200629030037000041000b3a0000200141306a2400200041e0016a2002418785c0004106" + "41818020101820002d00e001410146044020002802e401210141878ac0004112420b10001a0c010b418d85c0004134" + "41014100410010011a230041306b22012400200141808080e00036020c200141286a22044200370300200141206a22" + "054200370300200141186a220642003703002001420037031020004194046a2202027f200041046a41142001410c6a" + "4104200141106a4120100f22034120470440024020034100480440200220033602040c010b2002417f3602040b4101" + "0c010b20022001290310370001200241196a2004290300370000200241116a2005290300370000200241096a200629" + "030037000041000b3a0000200141306a2400200041f4016a200041146a280100360200200041ec016a2000410c6a29" + "0100370200200020002901043702e401200041808080e0003602e001200041d8066a200241c185c000410b41848020" + "101820002d00d806410146044020002802dc06210141878ac0004112420c10001a0c010b41cc85c000413941014100" + "410010011a230041206b22012400200141186a22044200370300200141106a22054200370300200141086a22064200" + "37030020014200370300200041b8046a2202027f200041e0016a4118200041186a4114200141201010220341204704" + "40024020034100480440200220033602040c010b2002417f3602040b41010c010b2002200129030037000120024119" + "6a2004290300370000200241116a2005290300370000200241096a200629030037000041000b3a0000200141206a24" + "00200041d8066a2002418586c000410741818020101820002d00d806410146044020002802dc06210141878ac00041" + "12420d10001a0c010b418c86c000413541014100410010011a230041306b220124002001418080803036020c200141" + "286a22044200370300200141206a22054200370300200141186a2206420037030020014200370310200041dc046a22" + "02027f200041186a41142001410c6a4104200141106a41201011220341204704400240200341004804402002200336" + "02040c010b2002417f3602040b41010c010b20022001290310370001200241196a2004290300370000200241116a20" + "05290300370000200241096a200629030037000041000b3a0000200141306a2400200041d8066a200241c186c00041" + "0c41828020101820002d00d806410146044020002802dc06210141878ac0004112420d10001a0c010b41cd86c00041" + "3a41014100410010011a230041306b22012400200141808080e80036020c200141286a22044200370300200141206a" + "22054200370300200141186a220642003703002001420037031020004180056a2202027f200041046a41142001410c" + "6a4104200141106a4120101222034120470440024020034100480440200220033602040c010b2002417f3602040b41" + "010c010b20022001290310370001200241196a2004290300370000200241116a2005290300370000200241096a2006" + "29030037000041000b3a0000200141306a2400200041d8066a2002418787c000410541818020101820002d00d80641" + "0146044020002802dc06210141878ac0004112420d10001a0c010b418c87c000413341014100410010011a23004130" + "6b22012400200141808080f00036020c200141286a22044200370300200141206a22054200370300200141186a2206" + "420037030020014200370310200041a4056a2202027f200041046a4114200041186a41142001410c6a410420014110" + "6a4120101322034120470440024020034100480440200220033602040c010b2002417f3602040b41010c010b200220" + "01290310370001200241196a2004290300370000200241116a2005290300370000200241096a200629030037000041" + "000b3a0000200141306a2400200041d8066a200241bf87c000410a41818020101820002d00d8064101460440200028" + "02dc06210141878ac0004112420e10001a0c010b41c987c000413841014100410010011a230041306b220124002001" + "41808080f80036020c200141286a22044200370300200141206a22054200370300200141186a220642003703002001" + "4200370310200041c8056a2202027f200041046a41142001410c6a4104200141106a41201014220341204704400240" + "20034100480440200220033602040c010b2002417f3602040b41010c010b20022001290310370001200241196a2004" + "290300370000200241116a2005290300370000200241096a200629030037000041000b3a0000200141306a24002000" + "41d8066a2002418188c000411241828020101820002d00d806410146044020002802dc06210141878ac0004112420f" + "10001a0c010b419388c00041c00041014100410010011a230041206b22012400200141186a22044200370300200141" + "106a22054200370300200141086a2206420037030020014200370300200041ec056a2202027f200041046a41142001" + "4120101522034120470440024020034100480440200220033602040c010b2002417f3602040b41010c010b20022001" + "290300370001200241196a2004290300370000200241116a2005290300370000200241096a20062903003700004100" + "0b3a0000200141206a2400200041d8066a200241d388c000410a4100101820002d00d806410146044020002802dc06" + "210141878ac0004112421010001a0c010b41dd88c000413841014100410010011a230041306b220124002001418080" + "80900136020c200141286a22044200370300200141206a22054200370300200141186a220642003703002001420037" + "031020004190066a2202027f200041046a41142001410c6a4104200141106a41201016220341204704400240200341" + "00480440200220033602040c010b2002417f3602040b41010c010b20022001290310370001200241196a2004290300" + "370000200241116a2005290300370000200241096a200629030037000041000b3a0000200141306a2400200041d806" + "6a2002419589c000410641818020101820002d00d806410146044020002802dc06210141878ac0004112421210001a" + "0c010b41012101419b89c000413441014100410010011a230041306b22022400200241808080980136020c20024128" + "6a22054200370300200241206a22064200370300200241186a2207420037030020024200370310200041b4066a2203" + "027f200041046a41142002410c6a4104200241106a4120101722044120470440024020044100480440200320043602" + "040c010b2003417f3602040b41010c010b20032002290310370001200341196a2005290300370000200341116a2006" + "290300370000200341096a200729030037000041000b3a0000200241306a2400200041d8066a200341cf89c0004105" + "41818020101820002d00d806410146044020002802dc06210141878ac0004112421310001a0c010b41d489c0004133" + "41014100410010011a0b20004180076a240020010f0b418080c000410b417f20012001417f4e1bac1000000bfd0401" + "067f200241104f0440024020002000410020006b41037122056a22044f0d0020012103200504402005210603402000" + "20032d00003a0000200341016a2103200041016a2100200641016b22060d000b0b200541016b4107490d0003402000" + "20032d00003a0000200041016a200341016a2d00003a0000200041026a200341026a2d00003a0000200041036a2003" + "41036a2d00003a0000200041046a200341046a2d00003a0000200041056a200341056a2d00003a0000200041066a20" + "0341066a2d00003a0000200041076a200341076a2d00003a0000200341086a2103200041086a22002004470d000b0b" + "2004200220056b2207417c7122086a21000240200120056a2206410371450440200020044d0d012006210103402004" + "2001280200360200200141046a2101200441046a22042000490d000b0c010b200020044d0d00200641037422054118" + "7121032006417c71220241046a2101410020056b411871210520022802002102034020042002200376200128020022" + "0220057472360200200141046a2101200441046a22042000490d000b0b20074103712102200620086a21010b024020" + "00200020026a22064f0d002002410771220304400340200020012d00003a0000200141016a2101200041016a210020" + "0341016b22030d000b0b200241016b4107490d000340200020012d00003a0000200041016a200141016a2d00003a00" + "00200041026a200141026a2d00003a0000200041036a200141036a2d00003a0000200041046a200141046a2d00003a" + "0000200041056a200141056a2d00003a0000200041066a200141066a2d00003a0000200041076a200141076a2d0000" + "3a0000200141086a2101200041086a22002006470d000b0b0b0ba30a0100418080c0000b990a6572726f725f636f64" + "653d47657474696e67206669656c643a204669656c6420646174613a204572726f722067657474696e67206669656c" + "643a204572726f723a204572726f722067657474696e67206b65796c65743a202424242424205354415254494e4720" + "5741534d20455845435554494f4e2024242424244163636f756e743a44657374696e6174696f6e3a4163636f756e74" + "4163636f756e74206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f772066" + "696e6973682e54727573746c696e6554727573746c696e65206f626a656374206578697374732c2070726f63656564" + "696e67207769746820657363726f772066696e6973682e414d4d414d4d206f626a656374206578697374732c207072" + "6f63656564696e67207769746820657363726f772066696e6973682e436865636b436865636b206f626a6563742065" + "78697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e7465726d73616e64636f" + "6e646974696f6e7343726564656e7469616c43726564656e7469616c206f626a656374206578697374732c2070726f" + "63656564696e67207769746820657363726f772066696e6973682e44656c656761746544656c6567617465206f626a" + "656374206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e4465706f73" + "6974507265617574684465706f73697450726561757468206f626a656374206578697374732c2070726f6365656469" + "6e67207769746820657363726f772066696e6973682e444944444944206f626a656374206578697374732c2070726f" + "63656564696e67207769746820657363726f772066696e6973682e457363726f77457363726f77206f626a65637420" + "6578697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e4d505449737375616e" + "63654d505449737375616e6365206f626a656374206578697374732c2070726f63656564696e672077697468206573" + "63726f772066696e6973682e4d50546f6b656e4d50546f6b656e206f626a656374206578697374732c2070726f6365" + "6564696e67207769746820657363726f772066696e6973682e4e46546f6b656e4f666665724e46546f6b656e4f6666" + "6572206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f772066696e697368" + "2e4f666665724f66666572206f626a656374206578697374732c2070726f63656564696e6720776974682065736372" + "6f772066696e6973682e5061794368616e6e656c5061794368616e6e656c206f626a656374206578697374732c2070" + "726f63656564696e67207769746820657363726f772066696e6973682e5065726d697373696f6e6564446f6d61696e" + "5065726d697373696f6e6564446f6d61696e206f626a656374206578697374732c2070726f63656564696e67207769" + "746820657363726f772066696e6973682e5369676e65724c6973745369676e65724c697374206f626a656374206578" + "697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e5469636b65745469636b65" + "74206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e" + "5661756c745661756c74206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f" + "772066696e6973682e43757272656e74207365712076616c75653a004d0970726f64756365727302086c616e677561" + "6765010452757374000c70726f6365737365642d6279010572757374631d312e38372e302028313730363765396163" + "20323032352d30352d303929002c0f7461726765745f6665617475726573022b0f6d757461626c652d676c6f62616c" + "732b087369676e2d657874"; extern std::string const codecovTestsWasmHex = "0061736d0100000001570b60067f7f7f7f7f7f017f60047f7f7f7f017f60027f7f017f60057f7f7f7f7f017f60037f" - "7f7f017f60077f7f7f7f" - "7f7f7f017f60087f7f7f7f7f7f7f7f017f60017f017f60037f7f7e017f60047f7f7f7f006000017f02990d3c08686f" - "73745f6c696205747261" - "6365000308686f73745f6c69620974726163655f6e756d000808686f73745f6c69620e6765745f6c65646765725f73" - "716e000208686f73745f" - "6c6962166765745f706172656e745f6c65646765725f74696d65000208686f73745f6c6962166765745f706172656e" - "745f6c65646765725f68" - "617368000208686f73745f6c69620c6765745f626173655f666565000208686f73745f6c696211616d656e646d656e" - "745f656e61626c656400" - "0208686f73745f6c69620c6765745f74785f6669656c64000408686f73745f6c69620e6163636f756e745f6b65796c" - "6574000108686f73745f" - "6c69621063616368655f6c65646765725f6f626a000408686f73745f6c69621c6765745f63757272656e745f6c6564" - "6765725f6f626a5f6669" - "656c64000408686f73745f6c6962146765745f6c65646765725f6f626a5f6669656c64000108686f73745f6c696213" - "6765745f74785f6e6573" - "7465645f6669656c64000108686f73745f6c6962236765745f63757272656e745f6c65646765725f6f626a5f6e6573" - "7465645f6669656c6400" - "0108686f73745f6c69621b6765745f6c65646765725f6f626a5f6e65737465645f6669656c64000308686f73745f6c" - "6962106765745f74785f" - "61727261795f6c656e000708686f73745f6c6962206765745f63757272656e745f6c65646765725f6f626a5f617272" - "61795f6c656e00070868" - "6f73745f6c6962186765745f6c65646765725f6f626a5f61727261795f6c656e000208686f73745f6c696217676574" - "5f74785f6e6573746564" - "5f61727261795f6c656e000208686f73745f6c6962276765745f63757272656e745f6c65646765725f6f626a5f6e65" - "737465645f6172726179" - "5f6c656e000208686f73745f6c69621f6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e" - "000408686f73745f6c69" - "620b7570646174655f64617461000208686f73745f6c696213636f6d707574655f7368613531325f68616c66000108" - "686f73745f6c69620963" - "6865636b5f736967000008686f73745f6c6962076765745f6e6674000008686f73745f6c69620e6765745f6e66745f" - "69737375657200010868" - "6f73745f6c69620d6765745f6e66745f7461786f6e000108686f73745f6c69620d6765745f6e66745f666c61677300" - "0208686f73745f6c6962" - "146765745f6e66745f7472616e736665725f666565000208686f73745f6c69620e6765745f6e66745f73657269616c" - "000108686f73745f6c69" - "620d74726163655f6163636f756e74000108686f73745f6c69620c74726163655f616d6f756e74000108686f73745f" - "6c69620c636865636b5f" - "6b65796c6574000008686f73745f6c69620f666c6f61745f66726f6d5f75696e74000308686f73745f6c69620b6c69" - "6e655f6b65796c657400" - "0608686f73745f6c69620a616d6d5f6b65796c6574000008686f73745f6c69621163726564656e7469616c5f6b6579" - "6c6574000608686f7374" - "5f6c69620e6d70746f6b656e5f6b65796c6574000008686f73745f6c69621274726163655f6f70617175655f666c6f" - "6174000108686f73745f" - "6c69620d666c6f61745f636f6d70617265000108686f73745f6c696209666c6f61745f616464000508686f73745f6c" - "69620e666c6f61745f73" - "75627472616374000508686f73745f6c69620e666c6f61745f6d756c7469706c79000508686f73745f6c69620c666c" - "6f61745f646976696465" - "000508686f73745f6c69620a666c6f61745f726f6f74000008686f73745f6c696209666c6f61745f706f7700000868" - "6f73745f6c696209666c" - "6f61745f6c6f67000308686f73745f6c69620d657363726f775f6b65796c6574000008686f73745f6c6962136d7074" - "5f69737375616e63655f" - "6b65796c6574000008686f73745f6c6962106e66745f6f666665725f6b65796c6574000008686f73745f6c69620c6f" - "666665725f6b65796c65" - "74000008686f73745f6c69620d6f7261636c655f6b65796c6574000008686f73745f6c69620e7061796368616e5f6b" - "65796c6574000608686f" - "73745f6c69621a7065726d697373696f6e65645f646f6d61696e5f6b65796c6574000008686f73745f6c69620d7469" - "636b65745f6b65796c65" - "74000008686f73745f6c69620c7661756c745f6b65796c6574000008686f73745f6c69620f64656c65676174655f6b" - "65796c6574000008686f" - "73745f6c6962166465706f7369745f707265617574685f6b65796c6574000008686f73745f6c69620a6469645f6b65" - "796c6574000108686f73" - "745f6c69620e7369676e6572735f6b65796c65740001030302090a05030100110619037f01418080c0000b7f0041bb" - "a1c0000b7f0041c0a1c0" - "000b072e04066d656d6f727902000666696e697368003d0a5f5f646174615f656e6403010b5f5f686561705f626173" - "6503020abf2c02460002" - "40200020014704402002200341014100410010001a20004100480d01418b80c000410b2000ad1001000b2002200320" - "00ac10011a0f0b418b80" - "c000410b2000ac1001000bf52b020a7f017e23004190026b22002400419680c000412341014100410010001a200041" - "00360260200041e0006a" - "220241041002410441bd8cc000410e103c20004100360260200241041003410441cb8cc0004116103c200041f8006a" - "22044200370300200041" - "f0006a22014200370300200041e8006a2205420037030020004200370360200241201004412041e18cc0004116103c" - "20004100360260200241" - "041005410441f78cc000410c103c200041106a2207428182848890a0c08001370300200041186a2206428182848890" - "a0c08001370300200041" - "206a2209428182848890a0c080013703002000428182848890a0c0800137030841b980c000410e1006410141c780c0" - "004111103c200041086a" - "41201006410141c780c0004111103c418180202002411410072203411446044002402000412e6a200041e2006a2d00" - "003a0000200020002900" - "673703e8012000200041ec006a2900003700ed01200020002f00603b012c200020002903e8013703a8012000200029" - "00ed013700ad01200020" - "0028006336002f200041386a20002900ad01370000200020002903a801370033200442003703002001420037030020" - "05420037030020004200" - "3703602000412c6a2204411420024120100822034120470d00200041c2006a20002d00623a0000200041f0016a2203" - "200041ef006a29000022" - "0a370300200041cf006a200a370000200041d7006a200041f7006a290000370000200041df006a200041ff006a2d00" - "003a0000200020002f01" - "603b01402000200028006336004320002000290067370047200041406b412041001009410141d880c0004110103c20" - "01410036020020054200" - "370300200042003703604181802020024114100a411441838dc000411c103c20014100360200200542003703002000" - "42003703604101418180" - "2020024114100b4114419f8dc0004114103c200041043602a001200041818020360260200041f8016a220541003602" - "00200342003703002000" + "7f7f017f60077f7f7f7f7f7f7f017f60087f7f7f7f7f7f7f7f017f60017f017f60037f7f7e017f60047f7f7f7f0060" + "00017f02990d3c08686f73745f6c6962057472616365000308686f73745f6c69620974726163655f6e756d00080868" + "6f73745f6c69620e6765745f6c65646765725f73716e000208686f73745f6c6962166765745f706172656e745f6c65" + "646765725f74696d65000208686f73745f6c6962166765745f706172656e745f6c65646765725f6861736800020868" + "6f73745f6c69620c6765745f626173655f666565000208686f73745f6c696211616d656e646d656e745f656e61626c" + "6564000208686f73745f6c69620c6765745f74785f6669656c64000408686f73745f6c69620e6163636f756e745f6b" + "65796c6574000108686f73745f6c69621063616368655f6c65646765725f6f626a000408686f73745f6c69621c6765" + "745f63757272656e745f6c65646765725f6f626a5f6669656c64000408686f73745f6c6962146765745f6c65646765" + "725f6f626a5f6669656c64000108686f73745f6c6962136765745f74785f6e65737465645f6669656c64000108686f" + "73745f6c6962236765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c64000108686f" + "73745f6c69621b6765745f6c65646765725f6f626a5f6e65737465645f6669656c64000308686f73745f6c69621067" + "65745f74785f61727261795f6c656e000708686f73745f6c6962206765745f63757272656e745f6c65646765725f6f" + "626a5f61727261795f6c656e000708686f73745f6c6962186765745f6c65646765725f6f626a5f61727261795f6c65" + "6e000208686f73745f6c6962176765745f74785f6e65737465645f61727261795f6c656e000208686f73745f6c6962" + "276765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e000208686f7374" + "5f6c69621f6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e000408686f73745f6c6962" + "0b7570646174655f64617461000208686f73745f6c696213636f6d707574655f7368613531325f68616c6600010868" + "6f73745f6c696209636865636b5f736967000008686f73745f6c6962076765745f6e6674000008686f73745f6c6962" + "0e6765745f6e66745f697373756572000108686f73745f6c69620d6765745f6e66745f7461786f6e000108686f7374" + "5f6c69620d6765745f6e66745f666c616773000208686f73745f6c6962146765745f6e66745f7472616e736665725f" + "666565000208686f73745f6c69620e6765745f6e66745f73657269616c000108686f73745f6c69620d74726163655f" + "6163636f756e74000108686f73745f6c69620c74726163655f616d6f756e74000108686f73745f6c69620c63686563" + "6b5f6b65796c6574000008686f73745f6c69620f666c6f61745f66726f6d5f75696e74000308686f73745f6c69620b" + "6c696e655f6b65796c6574000608686f73745f6c69620a616d6d5f6b65796c6574000008686f73745f6c6962116372" + "6564656e7469616c5f6b65796c6574000608686f73745f6c69620e6d70746f6b656e5f6b65796c6574000008686f73" + "745f6c69621274726163655f6f70617175655f666c6f6174000108686f73745f6c69620d666c6f61745f636f6d7061" + "7265000108686f73745f6c696209666c6f61745f616464000508686f73745f6c69620e666c6f61745f737562747261" + "6374000508686f73745f6c69620e666c6f61745f6d756c7469706c79000508686f73745f6c69620c666c6f61745f64" + "6976696465000508686f73745f6c69620a666c6f61745f726f6f74000008686f73745f6c696209666c6f61745f706f" + "77000008686f73745f6c696209666c6f61745f6c6f67000308686f73745f6c69620d657363726f775f6b65796c6574" + "000008686f73745f6c6962136d70745f69737375616e63655f6b65796c6574000008686f73745f6c6962106e66745f" + "6f666665725f6b65796c6574000008686f73745f6c69620c6f666665725f6b65796c6574000008686f73745f6c6962" + "0d6f7261636c655f6b65796c6574000008686f73745f6c69620e7061796368616e5f6b65796c6574000608686f7374" + "5f6c69621a7065726d697373696f6e65645f646f6d61696e5f6b65796c6574000008686f73745f6c69620d7469636b" + "65745f6b65796c6574000008686f73745f6c69620c7661756c745f6b65796c6574000008686f73745f6c69620f6465" + "6c65676174655f6b65796c6574000008686f73745f6c6962166465706f7369745f707265617574685f6b65796c6574" + "000008686f73745f6c69620a6469645f6b65796c6574000108686f73745f6c69620e7369676e6572735f6b65796c65" + "740001030302090a05030100110619037f01418080c0000b7f0041bba1c0000b7f0041c0a1c0000b072e04066d656d" + "6f727902000666696e697368003d0a5f5f646174615f656e6403010b5f5f686561705f6261736503020abf2c024600" + "0240200020014704402002200341014100410010001a20004100480d01418b80c000410b2000ad1001000b20022003" + "2000ac10011a0f0b418b80c000410b2000ac1001000bf52b020a7f017e23004190026b22002400419680c000412341" + "014100410010001a20004100360260200041e0006a220241041002410441bd8cc000410e103c200041003602602002" + "41041003410441cb8cc0004116103c200041f8006a22044200370300200041f0006a22014200370300200041e8006a" + "2205420037030020004200370360200241201004412041e18cc0004116103c20004100360260200241041005410441" + "f78cc000410c103c200041106a2207428182848890a0c08001370300200041186a2206428182848890a0c080013703" + "00200041206a2209428182848890a0c080013703002000428182848890a0c0800137030841b980c000410e10064101" + "41c780c0004111103c200041086a41201006410141c780c0004111103c418180202002411410072203411446044002" + "402000412e6a200041e2006a2d00003a0000200020002900673703e8012000200041ec006a2900003700ed01200020" + "002f00603b012c200020002903e8013703a801200020002900ed013700ad012000200028006336002f200041386a20" + "002900ad01370000200020002903a80137003320044200370300200142003703002005420037030020004200370360" + "2000412c6a2204411420024120100822034120470d00200041c2006a20002d00623a0000200041f0016a2203200041" + "ef006a290000220a370300200041cf006a200a370000200041d7006a200041f7006a290000370000200041df006a20" + "0041ff006a2d00003a0000200020002f01603b01402000200028006336004320002000290067370047200041406b41" + "2041001009410141d880c0004110103c2001410036020020054200370300200042003703604181802020024114100a" + "411441838dc000411c103c20014100360200200542003703002000420037036041014181802020024114100b411441" + "9f8dc0004114103c200041043602a001200041818020360260200041f8016a22054100360200200342003703002000" "42003703e80120024104200041e8016a22014114100c411441b38dc0004113103c2005410036020020034200370300" - "200042003703e8012002" - "20002802a00120014114100d411441c68dc0004123103c2005410036020020034200370300200042003703e8014101" - "200220002802a0012001" - "4114100e411441e98dc000411b103c4189803c100f412041e880c0004110103c4189803c1010412041f880c0004120" - "103c41014189803c1011" - "4120419881c0004118103c200220002802a0011012412041b081c0004117103c200220002802a0011013412041c781" - "c0004127103c41012002" - "20002802a0011014412041ee81c000411f103c2004411410154114418d82c000410b103c20004180026a2208420037" - "03002005420037030020" - "034200370300200042003703e801200220002802a001200141201016412041848ec0004113103c419882c000410c41" - "a482c000410b41af82c0" - "00410e1017410141bd82c0004109103c200041c0016a2009290300370300200041b8016a2006290300370300200041" - "b0016a20072903003703" - "00200020002903083703a801200541003b010020034200370300200042003703e80120044114200041a8016a220741" - "20200141121018411241" - "978ec0004107103c2005410036020020034200370300200042003703e801200741202001411410194114419e8ec000" - "410e103c200041003602" - "e8012007412020014104101a410441ac8ec000410d103c20074120101b410841c682c000410d103c20074120101c41" - "0a41d382c0004114103c" - "200041003602e8012007412020014104101d410441b98ec000410e103c41e782c000410d20044114101e410041f482" - "c000410d103c41e782c0" - "00410d418183c0004108101f4100418983c000410c103c41e782c000410d419583c0004108101f4100419d83c00041" - "11103c417f4104100441" - "7141ae83c000411e103c200041003602e8012001417f1004417141c78ec000411e103c200041ea016a41003a000020" - "0041003b01e801200141" - "031004417d41e58ec0004124103c200041003602e8012001418094ebdc031004417341898fc0004123103c4102100f" - "416f41cc83c000411f10" - "3c417f20002802a0011012417141eb83c000411f103c2002417f10124171418a84c000411f103c2002418120101241" - "7441a984c0004120103c" - "200041e094ebdc036a220620002802a0011012417341c984c000411f103c2008420037030020054200370300200342" - "00370300200042003703" - "e8012004411420064108200141201020417341ac8fc0004118103c2008420037030020054200370300200342003703" - "00200042003703e80120" - "04411420044114200141201020417141c48fc000411a103c2008420037030020054200370300200342003703002000" - "42003703e80120064108" - "2001412041001021417341de8fc0004117103c200842003703002005420037030020034200370300200042003703e8" - "01200220002802a00120" - "01412041001021417141f58fc0004120103c200620002802a00141011009417341e884c0004118103c200220002802" - "a0014101100941714180" - "85c000411a103c200842003703002005420037030020034200370300200042003703e801200620002802a001200141" - "2010084173419590c000" - "4116103c200842003703002005420037030020034200370300200042003703e801200220002802a001200141201008" - "417141ab90c000411810" - "3c200842003703002005420037030020034200370300200042003703e8012004411420044114200620002802a00120" - "0141201022417341c390" - "c000411c103c200842003703002005420037030020034200370300200042003703e801200441142004411420022000" - "2802a001200141201022" - "417141df90c000411e103c200842003703002005420037030020034200370300200042003703e80141a7a1c0004114" - "200620002802a0012001" - "41201023417341fd90c0004119103c200842003703002005420037030020034200370300200042003703e80141a7a1" - "c0004114200220002802" - "a0012001412010234171419691c000411f103c200842003703002005420037030020034200370300200042003703e8" - "0141a7a1c0004114419a" - "85c0004114200141201023417141b591c0004129103c20084200370300200542003703002003420037030020004200" - "3703e80141ae85c00041" - "2841a7a1c0004114200141201023417141de91c0004125103c200041dc016a2000413c6a280100360200200041d401" - "6a200041346a29010037" - "02002000200029012c3702cc01200041808080083602c801200041003b01e801200041c8016a2209411841a7a1c000" - "41142001410210234171" - "418392c000410e103c200620002802a001422a1001417341d685c0004111103c200041003b01e80141022001410210" - "07416f419192c000411b" - "103c200041003b01e801410220014102100a416f41ac92c000412b103c200041003b01e8014101410220014102100b" - "416f41d792c000412310" - "3c4102100f416f41cc83c000411f103c41021010416f41e785c000412f103c410141021011416f419686c000412710" - "3c41b980c00041812010" - "06417441bd86c000411f103c41b980c00041c1001006417441dc86c000411a103c200041003b01e801200241812020" - "014102100c417441fa92" - "c0004121103c200041003b01e801200241812020014102100d4174419b93c0004131103c200041003b01e801410120" - "0241812020014102100e" - "417441cc93c0004129103c20024181201012417441f686c0004125103c200241812010134174419b87c0004135103c" - "41012002418120101441" - "7441d087c000412d103c20024181201015417441fd87c0004119103c41e782c00041812041a482c000410b41af82c0" - "00410e1017417441bd82" - "c0004109103c41e782c000410d41a482c00041812041af82c000410e1017417441bd82c0004109103c41e782c00041" - "0d41a482c000410b41af" - "82c0004181201017417441bd82c0004109103c200041003b01e8012002418120200141021016417441f593c0004121" - "103c200041003b01e801" - "41a7a1c00041812041a7a1c00041142001410210234174419694c0004118103c200041003b01e80120044114200441" - "14200241812020014102" - "1024417441ae94c000411f103c200041003b01e801200941812020044114200141021025417441cd94c0004122103c" - "41e782c000410d200620" - "002802a001410010004173419688c000410f103c200042d487b6f4c7d4b1c0003700e00141e782c000410d200041e0" - "95ebdc036a2207410810" - "26417341a588c000411c103c41e782c000410d200620002802a001101f417341c188c0004116103c20074108200041" - "e0016a22064108102741" - "7341d788c0004118103c20064108200741081027417341ef88c0004118103c200041003b01e8012007410820064108" - "20014102410010284173" - "41ef94c0004114103c200041003b01e801200641082007410820014102410010284173418395c0004114103c200041" - "003b01e8012007410820" - "06410820014102410010294173419795c0004119103c200041003b01e8012006410820074108200141024100102941" - "7341b095c0004119103c" - "200041003b01e8012007410820064108200141024100102a417341c995c0004119103c200041003b01e80120064108" - "20074108200141024100" + "200042003703e801200220002802a00120014114100d411441c68dc0004123103c2005410036020020034200370300" + "200042003703e8014101200220002802a00120014114100e411441e98dc000411b103c4189803c100f412041e880c0" + "004110103c4189803c1010412041f880c0004120103c41014189803c10114120419881c0004118103c200220002802" + "a0011012412041b081c0004117103c200220002802a0011013412041c781c0004127103c4101200220002802a00110" + "14412041ee81c000411f103c2004411410154114418d82c000410b103c20004180026a220842003703002005420037" + "030020034200370300200042003703e801200220002802a001200141201016412041848ec0004113103c419882c000" + "410c41a482c000410b41af82c000410e1017410141bd82c0004109103c200041c0016a2009290300370300200041b8" + "016a2006290300370300200041b0016a2007290300370300200020002903083703a801200541003b01002003420037" + "0300200042003703e80120044114200041a8016a22074120200141121018411241978ec0004107103c200541003602" + "0020034200370300200042003703e801200741202001411410194114419e8ec000410e103c200041003602e8012007" + "412020014104101a410441ac8ec000410d103c20074120101b410841c682c000410d103c20074120101c410a41d382" + "c0004114103c200041003602e8012007412020014104101d410441b98ec000410e103c41e782c000410d2004411410" + "1e410041f482c000410d103c41e782c000410d418183c0004108101f4100418983c000410c103c41e782c000410d41" + "9583c0004108101f4100419d83c0004111103c417f41041004417141ae83c000411e103c200041003602e801200141" + "7f1004417141c78ec000411e103c200041ea016a41003a0000200041003b01e801200141031004417d41e58ec00041" + "24103c200041003602e8012001418094ebdc031004417341898fc0004123103c4102100f416f41cc83c000411f103c" + "417f20002802a0011012417141eb83c000411f103c2002417f10124171418a84c000411f103c200241812010124174" + "41a984c0004120103c200041e094ebdc036a220620002802a0011012417341c984c000411f103c2008420037030020" + "05420037030020034200370300200042003703e8012004411420064108200141201020417341ac8fc0004118103c20" + "0842003703002005420037030020034200370300200042003703e8012004411420044114200141201020417141c48f" + "c000411a103c200842003703002005420037030020034200370300200042003703e801200641082001412041001021" + "417341de8fc0004117103c200842003703002005420037030020034200370300200042003703e801200220002802a0" + "012001412041001021417141f58fc0004120103c200620002802a00141011009417341e884c0004118103c20022000" + "2802a001410110094171418085c000411a103c200842003703002005420037030020034200370300200042003703e8" + "01200620002802a0012001412010084173419590c0004116103c200842003703002005420037030020034200370300" + "200042003703e801200220002802a001200141201008417141ab90c0004118103c2008420037030020054200370300" + "20034200370300200042003703e8012004411420044114200620002802a001200141201022417341c390c000411c10" + "3c200842003703002005420037030020034200370300200042003703e8012004411420044114200220002802a00120" + "0141201022417141df90c000411e103c200842003703002005420037030020034200370300200042003703e80141a7" + "a1c0004114200620002802a001200141201023417341fd90c0004119103c2008420037030020054200370300200342" + "00370300200042003703e80141a7a1c0004114200220002802a0012001412010234171419691c000411f103c200842" + "003703002005420037030020034200370300200042003703e80141a7a1c0004114419a85c000411420014120102341" + "7141b591c0004129103c200842003703002005420037030020034200370300200042003703e80141ae85c000412841" + "a7a1c0004114200141201023417141de91c0004125103c200041dc016a2000413c6a280100360200200041d4016a20" + "0041346a2901003702002000200029012c3702cc01200041808080083602c801200041003b01e801200041c8016a22" + "09411841a7a1c00041142001410210234171418392c000410e103c200620002802a001422a1001417341d685c00041" + "11103c200041003b01e8014102200141021007416f419192c000411b103c200041003b01e801410220014102100a41" + "6f41ac92c000412b103c200041003b01e8014101410220014102100b416f41d792c0004123103c4102100f416f41cc" + "83c000411f103c41021010416f41e785c000412f103c410141021011416f419686c0004127103c41b980c000418120" + "1006417441bd86c000411f103c41b980c00041c1001006417441dc86c000411a103c200041003b01e8012002418120" + "20014102100c417441fa92c0004121103c200041003b01e801200241812020014102100d4174419b93c0004131103c" + "200041003b01e8014101200241812020014102100e417441cc93c0004129103c20024181201012417441f686c00041" + "25103c200241812010134174419b87c0004135103c410120024181201014417441d087c000412d103c200241812010" + "15417441fd87c0004119103c41e782c00041812041a482c000410b41af82c000410e1017417441bd82c0004109103c" + "41e782c000410d41a482c00041812041af82c000410e1017417441bd82c0004109103c41e782c000410d41a482c000" + "410b41af82c0004181201017417441bd82c0004109103c200041003b01e8012002418120200141021016417441f593" + "c0004121103c200041003b01e80141a7a1c00041812041a7a1c00041142001410210234174419694c0004118103c20" + "0041003b01e80120044114200441142002418120200141021024417441ae94c000411f103c200041003b01e8012009" + "41812020044114200141021025417441cd94c0004122103c41e782c000410d200620002802a0014100100041734196" + "88c000410f103c200042d487b6f4c7d4b1c0003700e00141e782c000410d200041e095ebdc036a2207410810264173" + "41a588c000411c103c41e782c000410d200620002802a001101f417341c188c0004116103c20074108200041e0016a" + "220641081027417341d788c0004118103c20064108200741081027417341ef88c0004118103c200041003b01e80120" + "074108200641082001410241001028417341ef94c0004114103c200041003b01e80120064108200741082001410241" + "0010284173418395c0004114103c200041003b01e801200741082006410820014102410010294173419795c0004119" + "103c200041003b01e80120064108200741082001410241001029417341b095c0004119103c200041003b01e8012007" + "410820064108200141024100102a417341c995c0004119103c200041003b01e8012006410820074108200141024100" "102a417341e295c0004119103c200041003b01e8012007410820064108200141024100102b417341fb95c000411710" - "3c200041003b01e80120" - "06410820074108200141024100102b4173419296c0004117103c200041003b01e80120074108410320014102410010" - "2c417341a996c0004114" - "103c200041003b01e801200741084103200141024100102d417341bd96c0004113103c200041003b01e80120074108" - "200141024100102e4173" - "41d096c0004113103c200842003703002005420037030020034200370300200042003703e801200441142004411420" - "014120102f417141e396" - "c000411f103c200842003703002005420037030020034200370300200042003703e801200441142004411420014120" - "10304171418297c00041" - "25103c200842003703002005420037030020034200370300200042003703e801200441142004411420014120103141" - "7141a797c0004122103c" - "200842003703002005420037030020034200370300200042003703e8012004411420044114200141201032417141c9" - "97c000411e103c200842" - "003703002005420037030020034200370300200042003703e8012004411420044114200141201033417141e797c000" - "411f103c200842003703" - "002005420037030020034200370300200042003703e8012004411420044114200441142001412010344171418698c0" - "004120103c2008420037" - "03002005420037030020034200370300200042003703e8012004411420044114200141201035417141a698c000412c" - "103c2008420037030020" - "05420037030020034200370300200042003703e8012004411420044114200141201036417141d298c000411f103c20" - "08420037030020054200" - "37030020034200370300200042003703e8012004411420044114200141201037417141f198c000411e103c20022000" - "2802a001410010094171" - "418789c0004123103c200041003b01e80120044114200220002802a0012001410210184171418f99c000411a103c20" - "0041003b01e801200220" - "002802a001200141021019417141a999c0004121103c200041003b01e801200220002802a00120014102101a417141" - "ca99c0004120103c2002" - "20002802a001101b417141aa89c0004120103c200220002802a001101c417141ca89c0004127103c200041003602e8" - "01200220002802a00120" - "014104101d417141ea99c0004121103c200041003b01e801200220002802a0012001410210084171418b9ac0004124" - "103c2000418080800836" - "02e801200041003b018e02200220002802a001200141042000418e026a220341021020417141af9ac0004122103c20" - "0041003b018e02200220" - "002802a00122052004411420022005200341021024417141d19ac0004128103c200041003b018e0220044114200220" - "002802a0012205200220" - "05200341021024417141f99ac0004128103c200041003b018e02200220002802a00120044114200341021038417141" - "a19bc0004126103c2000" - "41003b018e0220044114200220002802a001200341021038417141c79bc0004126103c200041003b018e0220022000" - "2802a001200441142003" - "41021039417141ed9bc000412d103c200041003b018e0220044114200220002802a0012003410210394171419a9cc0" - "00412d103c200041003b" - "018e02200220002802a00120034102103a417141c79cc0004120103c200041003b018e02200220002802a001200141" - "0420034102102f417141" - "e79cc0004123103c200041003b018e02200220002802a00120044114419a85c00041142003410210224171418a9dc0" - "004122103c200041003b" - "018e0220044114200220002802a001419a85c0004114200341021022417141ac9dc0004122103c200041003b018e02" - "200220002802a0012001" - "4104200341021030417141ce9dc0004129103c200041003b018e0220094118200220002802a0012003410210254171" - "41f79dc0004124103c20" - "0041003b018e02200220002802a001200141042003410210314171419b9ec0004126103c200041003b018e02200220" - "002802a0012001410420" - "0341021032417141c19ec0004122103c200041003b018e02200220002802a00120014104200341021033417141e39e" - "c0004123103c20004100" - "3b018e02200220002802a0012004411420014104200341021034417141869fc0004125103c200041003b018e022004" - "4114200220002802a001" - "20014104200341021034417141ab9fc0004125103c200041003b018e02200220002802a00120014104200341021035" - "417141d09fc000413010" - "3c200041003b018e02200220002802a00120034102103b41714180a0c0004124103c200041003b018e022002200028" - "02a00120014104200341" - "021036417141a4a0c0004123103c200041003b018e02200220002802a00120014104200341021037417141c7a0c000" - "4122103c200041003b01" - "8e02200220002802a00141f189c0004120200341021018417141e9a0c000411d103c41e782c000410d200220002802" - "a001101e417141918ac0" - "004123103c41e796abdd03410d41f189c000412041001000417341b48ac0004110103c41e796abdd03410d20064108" - "1026417341c48ac00041" - "1d103c41e796abdd03410d20044114101e417341e18ac0004118103c41e796abdd03410d419583c0004108101f4173" - "41f98ac0004117103c20" - "0220002802a001200241812041001000417441908bc000410e103c2002418120420110014174419e8bc0004112103c" - "41e782c0004181202006" - "41081026417441b08bc000411b103c41e782c00041812020044114101e417441cb8bc0004116103c41e782c0004181" - "20419583c0004108101f" - "417441e18bc0004115103c41e782c000410d200220002802a001101f417141f68bc0004119103c200041003b018e02" - "200220002802a0012004" - "411420034102102541714186a1c0004121103c41e782c000410d200220002802a001410210004171418f8cc0004114" - "103c4101410020044114" - "101e410041a38cc000411a103c20004190026a240041010f0b0b418080c000410b417f20032003417f4e1bac100100" - "0b0b92210200418080c0" - "000bae056572726f725f636f64653d54455354204641494c45442424242424205354415254494e47205741534d2045" - "5845435554494f4e2024" - "24242424746573745f616d656e646d656e74616d656e646d656e745f656e61626c656463616368655f6c6564676572" - "5f6f626a6765745f7478" - "5f61727261795f6c656e6765745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e6765745f6c" - "65646765725f6f626a5f" - "61727261795f6c656e6765745f74785f6e65737465645f61727261795f6c656e6765745f63757272656e745f6c6564" - "6765725f6f626a5f6e65" - "737465645f61727261795f6c656e6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e7570" - "646174655f6461746174" - "657374206d65737361676574657374207075626b657974657374207369676e6174757265636865636b5f7369676765" - "745f6e66745f666c6167" - "736765745f6e66745f7472616e736665725f66656574657374696e6720747261636574726163655f6163636f756e74" - "400000000000005f7472" - "6163655f616d6f756e74400000000000000074726163655f616d6f756e745f7a65726f6765745f706172656e745f6c" - "65646765725f68617368" + "3c200041003b01e8012006410820074108200141024100102b4173419296c0004117103c200041003b01e801200741" + "084103200141024100102c417341a996c0004114103c200041003b01e801200741084103200141024100102d417341" + "bd96c0004113103c200041003b01e80120074108200141024100102e417341d096c0004113103c2008420037030020" + "05420037030020034200370300200042003703e801200441142004411420014120102f417141e396c000411f103c20" + "0842003703002005420037030020034200370300200042003703e80120044114200441142001412010304171418297" + "c0004125103c200842003703002005420037030020034200370300200042003703e801200441142004411420014120" + "1031417141a797c0004122103c200842003703002005420037030020034200370300200042003703e8012004411420" + "044114200141201032417141c997c000411e103c200842003703002005420037030020034200370300200042003703" + "e8012004411420044114200141201033417141e797c000411f103c2008420037030020054200370300200342003703" + "00200042003703e8012004411420044114200441142001412010344171418698c0004120103c200842003703002005" + "420037030020034200370300200042003703e8012004411420044114200141201035417141a698c000412c103c2008" + "42003703002005420037030020034200370300200042003703e8012004411420044114200141201036417141d298c0" + "00411f103c200842003703002005420037030020034200370300200042003703e80120044114200441142001412010" + "37417141f198c000411e103c200220002802a001410010094171418789c0004123103c200041003b01e80120044114" + "200220002802a0012001410210184171418f99c000411a103c200041003b01e801200220002802a001200141021019" + "417141a999c0004121103c200041003b01e801200220002802a00120014102101a417141ca99c0004120103c200220" + "002802a001101b417141aa89c0004120103c200220002802a001101c417141ca89c0004127103c200041003602e801" + "200220002802a00120014104101d417141ea99c0004121103c200041003b01e801200220002802a001200141021008" + "4171418b9ac0004124103c200041808080083602e801200041003b018e02200220002802a001200141042000418e02" + "6a220341021020417141af9ac0004122103c200041003b018e02200220002802a00122052004411420022005200341" + "021024417141d19ac0004128103c200041003b018e0220044114200220002802a00122052002200520034102102441" + "7141f99ac0004128103c200041003b018e02200220002802a00120044114200341021038417141a19bc0004126103c" + "200041003b018e0220044114200220002802a001200341021038417141c79bc0004126103c200041003b018e022002" + "20002802a00120044114200341021039417141ed9bc000412d103c200041003b018e0220044114200220002802a001" + "2003410210394171419a9cc000412d103c200041003b018e02200220002802a00120034102103a417141c79cc00041" + "20103c200041003b018e02200220002802a0012001410420034102102f417141e79cc0004123103c200041003b018e" + "02200220002802a00120044114419a85c00041142003410210224171418a9dc0004122103c200041003b018e022004" + "4114200220002802a001419a85c0004114200341021022417141ac9dc0004122103c200041003b018e022002200028" + "02a00120014104200341021030417141ce9dc0004129103c200041003b018e0220094118200220002802a001200341" + "021025417141f79dc0004124103c200041003b018e02200220002802a001200141042003410210314171419b9ec000" + "4126103c200041003b018e02200220002802a00120014104200341021032417141c19ec0004122103c200041003b01" + "8e02200220002802a00120014104200341021033417141e39ec0004123103c200041003b018e02200220002802a001" + "2004411420014104200341021034417141869fc0004125103c200041003b018e0220044114200220002802a0012001" + "4104200341021034417141ab9fc0004125103c200041003b018e02200220002802a001200141042003410210354171" + "41d09fc0004130103c200041003b018e02200220002802a00120034102103b41714180a0c0004124103c200041003b" + "018e02200220002802a00120014104200341021036417141a4a0c0004123103c200041003b018e02200220002802a0" + "0120014104200341021037417141c7a0c0004122103c200041003b018e02200220002802a00141f189c00041202003" + "41021018417141e9a0c000411d103c41e782c000410d200220002802a001101e417141918ac0004123103c41e796ab" + "dd03410d41f189c000412041001000417341b48ac0004110103c41e796abdd03410d200641081026417341c48ac000" + "411d103c41e796abdd03410d20044114101e417341e18ac0004118103c41e796abdd03410d419583c0004108101f41" + "7341f98ac0004117103c200220002802a001200241812041001000417441908bc000410e103c200241812042011001" + "4174419e8bc0004112103c41e782c000418120200641081026417441b08bc000411b103c41e782c000418120200441" + "14101e417441cb8bc0004116103c41e782c000418120419583c0004108101f417441e18bc0004115103c41e782c000" + "410d200220002802a001101f417141f68bc0004119103c200041003b018e02200220002802a0012004411420034102" + "102541714186a1c0004121103c41e782c000410d200220002802a001410210004171418f8cc0004114103c41014100" + "20044114101e410041a38cc000411a103c20004190026a240041010f0b0b418080c000410b417f20032003417f4e1b" + "ac1001000b0b92210200418080c0000bae056572726f725f636f64653d54455354204641494c454424242424242053" + "54415254494e47205741534d20455845435554494f4e202424242424746573745f616d656e646d656e74616d656e64" + "6d656e745f656e61626c656463616368655f6c65646765725f6f626a6765745f74785f61727261795f6c656e676574" + "5f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e6765745f6c65646765725f6f626a5f617272" + "61795f6c656e6765745f74785f6e65737465645f61727261795f6c656e6765745f63757272656e745f6c6564676572" + "5f6f626a5f6e65737465645f61727261795f6c656e6765745f6c65646765725f6f626a5f6e65737465645f61727261" + "795f6c656e7570646174655f6461746174657374206d65737361676574657374207075626b65797465737420736967" + "6e6174757265636865636b5f7369676765745f6e66745f666c6167736765745f6e66745f7472616e736665725f6665" + "6574657374696e6720747261636574726163655f6163636f756e74400000000000005f74726163655f616d6f756e74" + "400000000000000074726163655f616d6f756e745f7a65726f6765745f706172656e745f6c65646765725f68617368" "5f6e65675f7074726765745f74785f61727261795f6c656e5f696e76616c69645f736669656c646765745f74785f6e" - "65737465645f61727261" - "795f6c656e5f6e65675f7074726765745f74785f6e65737465645f61727261795f6c656e5f6e65675f6c656e676574" - "5f74785f6e6573746564" - "5f61727261795f6c656e5f746f6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f7074725f" - "6f6f6263616368655f6c" - "65646765725f6f626a5f7074725f6f6f6263616368655f6c65646765725f6f626a5f77726f6e675f6c656e55534430" - "30303030303030303030" - "3030303030300041d685c0000bd11b74726163655f6e756d5f6f6f625f7374726765745f63757272656e745f6c6564" - "6765725f6f626a5f6172" - "7261795f6c656e5f696e76616c69645f736669656c646765745f6c65646765725f6f626a5f61727261795f6c656e5f" - "696e76616c69645f7366" - "69656c64616d656e646d656e745f656e61626c65645f746f6f5f6269675f736c696365616d656e646d656e745f656e" - "61626c65645f746f6f5f" - "6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f6375" - "7272656e745f6c656467" - "65725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f6c6564676572" - "5f6f626a5f6e65737465" - "645f61727261795f6c656e5f746f6f5f6269675f736c6963657570646174655f646174615f746f6f5f6269675f736c" - "69636574726163655f6f" - "6f625f736c69636574726163655f6f70617175655f666c6f61745f6f6f625f736c69636574726163655f616d6f756e" - "745f6f6f625f736c6963" - "65666c6f61745f636f6d706172655f6f6f625f736c69636531666c6f61745f636f6d706172655f6f6f625f736c6963" - "653263616368655f6c65" - "646765725f6f626a5f77726f6e675f73697a655f75696e743235366765745f6e66745f666c6167735f77726f6e675f" - "73697a655f75696e7432" - "35366765745f6e66745f7472616e736665725f6665655f77726f6e675f73697a655f75696e74323536303030303030" - "30303030303030303030" - "3030303030303030303030303030303174726163655f6163636f756e745f77726f6e675f73697a655f6163636f756e" - "745f696474726163655f" - "6f6f625f737472696e6774726163655f6f70617175655f666c6f61745f6f6f625f737472696e6774726163655f6163" - "636f756e745f6f6f625f" - "737472696e6774726163655f616d6f756e745f6f6f625f737472696e6774726163655f746f6f5f6c6f6e6774726163" - "655f6e756d5f746f6f5f" - "6c6f6e6774726163655f6f70617175655f666c6f61745f746f6f5f6c6f6e6774726163655f6163636f756e745f746f" - "6f5f6c6f6e6774726163" - "655f616d6f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f77726f6e675f6c656e6774687472616365" - "5f696e76616c69645f61" - "735f68657874726163655f6163636f756e745f636865636b5f646573796e636765745f6c65646765725f73716e6765" - "745f706172656e745f6c" - "65646765725f74696d656765745f706172656e745f6c65646765725f686173686765745f626173655f666565676574" - "5f63757272656e745f6c" - "65646765725f6f626a5f6669656c646765745f6c65646765725f6f626a5f6669656c646765745f74785f6e65737465" - "645f6669656c64676574" - "5f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c646765745f6c65646765725f6f626a5f" - "6e65737465645f666965" - "6c64636f6d707574655f7368613531325f68616c666765745f6e66746765745f6e66745f6973737565726765745f6e" - "66745f7461786f6e6765" - "745f6e66745f73657269616c6765745f706172656e745f6c65646765725f686173685f6e65675f6c656e6765745f70" - "6172656e745f6c656467" - "65725f686173685f6275665f746f6f5f736d616c6c6765745f706172656e745f6c65646765725f686173685f6c656e" - "5f746f6f5f6c6f6e6763" - "6865636b5f6b65796c65745f6f6f625f6c656e5f753332636865636b5f6b65796c65745f77726f6e675f6c656e5f75" - "3332666c6f61745f6672" - "6f6d5f75696e745f6c656e5f6f6f62666c6f61745f66726f6d5f75696e745f77726f6e675f6c656e5f75696e743634" - "6163636f756e745f6b65" - "796c65745f6c656e5f6f6f626163636f756e745f6b65796c65745f77726f6e675f6c656e6c696e655f6b65796c6574" - "5f6c656e5f6f6f625f63" - "757272656e63796c696e655f6b65796c65745f77726f6e675f6c656e5f63757272656e6379616d6d5f6b65796c6574" - "5f6c656e5f6f6f625f61" - "7373657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6c656e5f617373657432616d6d5f6b65796c65745f" - "6c656e5f77726f6e675f" - "6e6f6e5f7872705f63757272656e63795f6c656e616d6d5f6b65796c65745f6c656e5f77726f6e675f7872705f6375" - "7272656e63795f6c656e" - "616d6d5f6b65796c65745f6d70746765745f74785f6669656c645f696e76616c69645f736669656c646765745f6375" - "7272656e745f6c656467" - "65725f6f626a5f6669656c645f696e76616c69645f736669656c646765745f6c65646765725f6f626a5f6669656c64" - "5f696e76616c69645f73" - "6669656c646765745f74785f6e65737465645f6669656c645f746f6f5f6269675f736c6963656765745f6375727265" - "6e745f6c65646765725f" - "6f626a5f6e65737465645f6669656c645f746f6f5f6269675f736c6963656765745f6c65646765725f6f626a5f6e65" - "737465645f6669656c64" - "5f746f6f5f6269675f736c696365636f6d707574655f7368613531325f68616c665f746f6f5f6269675f736c696365" - "616d6d5f6b65796c6574" - "5f746f6f5f6269675f736c69636563726564656e7469616c5f6b65796c65745f746f6f5f6269675f736c6963656d70" - "746f6b656e5f6b65796c" - "65745f746f6f5f6269675f736c6963655f6d70746964666c6f61745f6164645f6f6f625f736c69636531666c6f6174" - "5f6164645f6f6f625f73" - "6c69636532666c6f61745f73756274726163745f6f6f625f736c69636531666c6f61745f73756274726163745f6f6f" - "625f736c69636532666c" - "6f61745f6d756c7469706c795f6f6f625f736c69636531666c6f61745f6d756c7469706c795f6f6f625f736c696365" - "32666c6f61745f646976" - "6964655f6f6f625f736c69636531666c6f61745f6469766964655f6f6f625f736c69636532666c6f61745f726f6f74" - "5f6f6f625f736c696365" - "666c6f61745f706f775f6f6f625f736c696365666c6f61745f6c6f675f6f6f625f736c696365657363726f775f6b65" - "796c65745f77726f6e67" - "5f73697a655f75696e7433326d70745f69737375616e63655f6b65796c65745f77726f6e675f73697a655f75696e74" - "33326e66745f6f666665" - "725f6b65796c65745f77726f6e675f73697a655f75696e7433326f666665725f6b65796c65745f77726f6e675f7369" - "7a655f75696e7433326f" - "7261636c655f6b65796c65745f77726f6e675f73697a655f75696e7433327061796368616e5f6b65796c65745f7772" - "6f6e675f73697a655f75" - "696e7433327065726d697373696f6e65645f646f6d61696e5f6b65796c65745f77726f6e675f73697a655f75696e74" - "33327469636b65745f6b" + "65737465645f61727261795f6c656e5f6e65675f7074726765745f74785f6e65737465645f61727261795f6c656e5f" + "6e65675f6c656e6765745f74785f6e65737465645f61727261795f6c656e5f746f6f5f6c6f6e676765745f74785f6e" + "65737465645f61727261795f6c656e5f7074725f6f6f6263616368655f6c65646765725f6f626a5f7074725f6f6f62" + "63616368655f6c65646765725f6f626a5f77726f6e675f6c656e555344303030303030303030303030303030303000" + "41d685c0000bd11b74726163655f6e756d5f6f6f625f7374726765745f63757272656e745f6c65646765725f6f626a" + "5f61727261795f6c656e5f696e76616c69645f736669656c646765745f6c65646765725f6f626a5f61727261795f6c" + "656e5f696e76616c69645f736669656c64616d656e646d656e745f656e61626c65645f746f6f5f6269675f736c6963" + "65616d656e646d656e745f656e61626c65645f746f6f5f6c6f6e676765745f74785f6e65737465645f61727261795f" + "6c656e5f746f6f5f6269675f736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f" + "61727261795f6c656e5f746f6f5f6269675f736c6963656765745f6c65646765725f6f626a5f6e65737465645f6172" + "7261795f6c656e5f746f6f5f6269675f736c6963657570646174655f646174615f746f6f5f6269675f736c69636574" + "726163655f6f6f625f736c69636574726163655f6f70617175655f666c6f61745f6f6f625f736c6963657472616365" + "5f616d6f756e745f6f6f625f736c696365666c6f61745f636f6d706172655f6f6f625f736c69636531666c6f61745f" + "636f6d706172655f6f6f625f736c6963653263616368655f6c65646765725f6f626a5f77726f6e675f73697a655f75" + "696e743235366765745f6e66745f666c6167735f77726f6e675f73697a655f75696e743235366765745f6e66745f74" + "72616e736665725f6665655f77726f6e675f73697a655f75696e743235363030303030303030303030303030303030" + "30303030303030303030303030303174726163655f6163636f756e745f77726f6e675f73697a655f6163636f756e74" + "5f696474726163655f6f6f625f737472696e6774726163655f6f70617175655f666c6f61745f6f6f625f737472696e" + "6774726163655f6163636f756e745f6f6f625f737472696e6774726163655f616d6f756e745f6f6f625f737472696e" + "6774726163655f746f6f5f6c6f6e6774726163655f6e756d5f746f6f5f6c6f6e6774726163655f6f70617175655f66" + "6c6f61745f746f6f5f6c6f6e6774726163655f6163636f756e745f746f6f5f6c6f6e6774726163655f616d6f756e74" + "5f746f6f5f6c6f6e6774726163655f616d6f756e745f77726f6e675f6c656e67746874726163655f696e76616c6964" + "5f61735f68657874726163655f6163636f756e745f636865636b5f646573796e636765745f6c65646765725f73716e" + "6765745f706172656e745f6c65646765725f74696d656765745f706172656e745f6c65646765725f68617368676574" + "5f626173655f6665656765745f63757272656e745f6c65646765725f6f626a5f6669656c646765745f6c6564676572" + "5f6f626a5f6669656c646765745f74785f6e65737465645f6669656c646765745f63757272656e745f6c6564676572" + "5f6f626a5f6e65737465645f6669656c646765745f6c65646765725f6f626a5f6e65737465645f6669656c64636f6d" + "707574655f7368613531325f68616c666765745f6e66746765745f6e66745f6973737565726765745f6e66745f7461" + "786f6e6765745f6e66745f73657269616c6765745f706172656e745f6c65646765725f686173685f6e65675f6c656e" + "6765745f706172656e745f6c65646765725f686173685f6275665f746f6f5f736d616c6c6765745f706172656e745f" + "6c65646765725f686173685f6c656e5f746f6f5f6c6f6e67636865636b5f6b65796c65745f6f6f625f6c656e5f7533" + "32636865636b5f6b65796c65745f77726f6e675f6c656e5f753332666c6f61745f66726f6d5f75696e745f6c656e5f" + "6f6f62666c6f61745f66726f6d5f75696e745f77726f6e675f6c656e5f75696e7436346163636f756e745f6b65796c" + "65745f6c656e5f6f6f626163636f756e745f6b65796c65745f77726f6e675f6c656e6c696e655f6b65796c65745f6c" + "656e5f6f6f625f63757272656e63796c696e655f6b65796c65745f77726f6e675f6c656e5f63757272656e6379616d" + "6d5f6b65796c65745f6c656e5f6f6f625f617373657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6c656e" + "5f617373657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6e6f6e5f7872705f63757272656e63795f6c65" + "6e616d6d5f6b65796c65745f6c656e5f77726f6e675f7872705f63757272656e63795f6c656e616d6d5f6b65796c65" + "745f6d70746765745f74785f6669656c645f696e76616c69645f736669656c646765745f63757272656e745f6c6564" + "6765725f6f626a5f6669656c645f696e76616c69645f736669656c646765745f6c65646765725f6f626a5f6669656c" + "645f696e76616c69645f736669656c646765745f74785f6e65737465645f6669656c645f746f6f5f6269675f736c69" + "63656765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c645f746f6f5f6269675f73" + "6c6963656765745f6c65646765725f6f626a5f6e65737465645f6669656c645f746f6f5f6269675f736c696365636f" + "6d707574655f7368613531325f68616c665f746f6f5f6269675f736c696365616d6d5f6b65796c65745f746f6f5f62" + "69675f736c69636563726564656e7469616c5f6b65796c65745f746f6f5f6269675f736c6963656d70746f6b656e5f" + "6b65796c65745f746f6f5f6269675f736c6963655f6d70746964666c6f61745f6164645f6f6f625f736c6963653166" + "6c6f61745f6164645f6f6f625f736c69636532666c6f61745f73756274726163745f6f6f625f736c69636531666c6f" + "61745f73756274726163745f6f6f625f736c69636532666c6f61745f6d756c7469706c795f6f6f625f736c69636531" + "666c6f61745f6d756c7469706c795f6f6f625f736c69636532666c6f61745f6469766964655f6f6f625f736c696365" + "31666c6f61745f6469766964655f6f6f625f736c69636532666c6f61745f726f6f745f6f6f625f736c696365666c6f" + "61745f706f775f6f6f625f736c696365666c6f61745f6c6f675f6f6f625f736c696365657363726f775f6b65796c65" + "745f77726f6e675f73697a655f75696e7433326d70745f69737375616e63655f6b65796c65745f77726f6e675f7369" + "7a655f75696e7433326e66745f6f666665725f6b65796c65745f77726f6e675f73697a655f75696e7433326f666665" + "725f6b65796c65745f77726f6e675f73697a655f75696e7433326f7261636c655f6b65796c65745f77726f6e675f73" + "697a655f75696e7433327061796368616e5f6b65796c65745f77726f6e675f73697a655f75696e7433327065726d69" + "7373696f6e65645f646f6d61696e5f6b65796c65745f77726f6e675f73697a655f75696e7433327469636b65745f6b" "65796c65745f77726f6e675f73697a655f75696e7433327661756c745f6b65796c65745f77726f6e675f73697a655f" - "75696e7433326765745f" - "6e66745f77726f6e675f73697a655f75696e743235366765745f6e66745f6973737565725f77726f6e675f73697a65" - "5f75696e743235366765" - "745f6e66745f7461786f6e5f77726f6e675f73697a655f75696e743235366765745f6e66745f73657269616c5f7772" - "6f6e675f73697a655f75" - "696e743235366163636f756e745f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964636865636b" - "5f6b65796c65745f7772" - "6f6e675f73697a655f6163636f756e745f696463726564656e7469616c5f6b65796c65745f77726f6e675f73697a65" - "5f6163636f756e745f69" - "643163726564656e7469616c5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69643264656c6567" - "6174655f6b65796c6574" - "5f77726f6e675f73697a655f6163636f756e745f69643164656c65676174655f6b65796c65745f77726f6e675f7369" - "7a655f6163636f756e74" - "5f6964326465706f7369745f707265617574685f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69" - "64316465706f7369745f" - "707265617574685f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964326469645f6b65796c6574" - "5f77726f6e675f73697a" - "655f6163636f756e745f6964657363726f775f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964" - "6c696e655f6b65796c65" - "745f77726f6e675f73697a655f6163636f756e745f6964316c696e655f6b65796c65745f77726f6e675f73697a655f" - "6163636f756e745f6964" - "326d70745f69737375616e63655f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69646d70746f6b" - "656e5f6b65796c65745f" - "77726f6e675f73697a655f6163636f756e745f69646e66745f6f666665725f6b65796c65745f77726f6e675f73697a" - "655f6163636f756e745f" - "69646f666665725f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69646f7261636c655f6b65796c" - "65745f77726f6e675f73" - "697a655f6163636f756e745f69647061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e74" - "5f696431706179636861" - "6e5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964327065726d697373696f6e65645f646f6d" - "61696e5f6b65796c6574" - "5f77726f6e675f73697a655f6163636f756e745f69647369676e6572735f6b65796c65745f77726f6e675f73697a65" - "5f6163636f756e745f69" - "647469636b65745f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69647661756c745f6b65796c65" - "745f77726f6e675f7369" - "7a655f6163636f756e745f69646765745f6e66745f77726f6e675f73697a655f6163636f756e745f69646d70746f6b" - "656e5f6b65796c65745f" - "6d707469645f77726f6e675f6c656e677468004d0970726f64756365727302086c616e677561676501045275737400" - "0c70726f636573736564" - "2d6279010572757374631d312e38372e30202831373036376539616320323032352d30352d303929002c0f74617267" - "65745f66656174757265" - "73022b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; + "75696e7433326765745f6e66745f77726f6e675f73697a655f75696e743235366765745f6e66745f6973737565725f" + "77726f6e675f73697a655f75696e743235366765745f6e66745f7461786f6e5f77726f6e675f73697a655f75696e74" + "3235366765745f6e66745f73657269616c5f77726f6e675f73697a655f75696e743235366163636f756e745f6b6579" + "6c65745f77726f6e675f73697a655f6163636f756e745f6964636865636b5f6b65796c65745f77726f6e675f73697a" + "655f6163636f756e745f696463726564656e7469616c5f6b65796c65745f77726f6e675f73697a655f6163636f756e" + "745f69643163726564656e7469616c5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964326465" + "6c65676174655f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69643164656c65676174655f6b65" + "796c65745f77726f6e675f73697a655f6163636f756e745f6964326465706f7369745f707265617574685f6b65796c" + "65745f77726f6e675f73697a655f6163636f756e745f6964316465706f7369745f707265617574685f6b65796c6574" + "5f77726f6e675f73697a655f6163636f756e745f6964326469645f6b65796c65745f77726f6e675f73697a655f6163" + "636f756e745f6964657363726f775f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69646c696e65" + "5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964316c696e655f6b65796c65745f77726f6e67" + "5f73697a655f6163636f756e745f6964326d70745f69737375616e63655f6b65796c65745f77726f6e675f73697a65" + "5f6163636f756e745f69646d70746f6b656e5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964" + "6e66745f6f666665725f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69646f666665725f6b6579" + "6c65745f77726f6e675f73697a655f6163636f756e745f69646f7261636c655f6b65796c65745f77726f6e675f7369" + "7a655f6163636f756e745f69647061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f" + "6964317061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964327065726d697373" + "696f6e65645f646f6d61696e5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69647369676e6572" + "735f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69647469636b65745f6b65796c65745f77726f" + "6e675f73697a655f6163636f756e745f69647661756c745f6b65796c65745f77726f6e675f73697a655f6163636f75" + "6e745f69646765745f6e66745f77726f6e675f73697a655f6163636f756e745f69646d70746f6b656e5f6b65796c65" + "745f6d707469645f77726f6e675f6c656e677468004d0970726f64756365727302086c616e67756167650104527573" + "74000c70726f6365737365642d6279010572757374631d312e38372e30202831373036376539616320323032352d30" + "352d303929002c0f7461726765745f6665617475726573022b0f6d757461626c652d676c6f62616c732b087369676e" + "2d657874"; extern std::string const floatTestsWasmHex = - "0061736d0100000001430860077f7f7f7f7f7f7f017f60057f7f7f7f7f017f60047f7f7f7f" - "017f60067f7f7f7f7f7f017f60047e7f7f7f017f60057f7e7f7f7f017f60037f7f7e017f60" - "00017f02c9020e08686f73745f6c6962057472616365000108686f73745f6c69620e666c6f" - "61745f66726f6d5f696e74000408686f73745f6c69621274726163655f6f70617175655f66" - "6c6f6174000208686f73745f6c69620f666c6f61745f66726f6d5f75696e74000108686f73" - "745f6c696209666c6f61745f736574000508686f73745f6c69620d666c6f61745f636f6d70" - "617265000208686f73745f6c696209666c6f61745f616464000008686f73745f6c69620e66" - "6c6f61745f7375627472616374000008686f73745f6c69620e666c6f61745f6d756c746970" - "6c79000008686f73745f6c69620c666c6f61745f646976696465000008686f73745f6c6962" - "09666c6f61745f706f77000308686f73745f6c69620974726163655f6e756d000608686f73" - "745f6c69620a666c6f61745f726f6f74000308686f73745f6c696209666c6f61745f6c6f67" - "00010302010705030100110619037f01418080c0000b7f0041d28ac0000b7f0041e08ac000" - "0b072e04066d656d6f727902000666696e697368000e0a5f5f646174615f656e6403010b5f" - "5f686561705f6261736503020af20e01ef0e01047f230041206b22012400418080c000411d" - "41014100410010001a200142003703100240428ce000200141106a22004108410010014108" - "460440419d80c00041172000410810021a41b480c000411e20004108410110001a0c010b41" - "d280c000411e41014100410010001a0b2001428ce0003703180240200141186a4108200141" - "106a2200410841001003410846044041f080c00041172000410810021a0c010b418781c000" - "411e41014100410010001a0b0240410242fb00200141106a22004108410010044108460440" - "41a581c00041212000410810021a0c010b41c681c000412641014100410010001a0b41ec81" - "c0004115418182c000410810021a419182c0004116418982c000410810021a41a782c00041" - "1b41014100410010001a2001420037031802404201200141186a2200410841001001410846" - "044041c282c000410f2000410810021a0c010b41d182c000411641014100410010001a0b02" - "40200141186a4108418182c0004108100545044041e782c000411b41014100410010001a0c" - "010b418283c000411b41014100410010001a0b0240200141186a4108418982c00041081005" - "4101460440419d83c000412341014100410010001a0c010b41c083c0004124410141004100" - "10001a0b0240418982c0004108200141186a41081005410246044041e483c0004123410141" - "00410010001a0c010b418784c000412441014100410010001a0b41ab84c000412041014100" - "410010001a200142d487b6f4c7d4b1c000370310410921000340200141106a220241084181" - "82c000410820024108410010061a200041016b22000d000b20014200370318420a20014118" - "6a22004108410010011a02402000410820024108100545044041cb84c00041144101410041" - "0010001a0c010b41df84c000411341014100410010001a0b410b21000340200141106a2202" - "4108418182c000410820024108410010071a200041016b22000d000b024020024108418982" - "c0004108100545044041f284c000411941014100410010001a0c010b418b85c00041184101" - "4100410010001a0b41a385c000412341014100410010001a20014200370300420a20014108" - "410010011a200142d487b6f4c7d4b1c000370308410621000340200141086a220241082001" - "410820024108410010081a200041016b22000d000b2001420037031042c0843d200141106a" - "22004108410010011a02402000410820024108100545044041c685c0004119410141004100" - "10001a0c010b41df85c000411841014100410010001a0b410721000340200141086a220241" - "082001410820024108410010091a200041016b22000d000b20014200370318417f42012001" - "41186a22004108410010041a02402002410820004108100545044041f785c0004117410141" - "00410010001a0c010b418e86c000411641014100410010001a0b41a486c000411741014100" - "410010001a20014200370308418182c00041084103200141086a220041084100100a1a41bb" - "86c00041122000410810021a418982c00041084106200041084100100a1a41cd86c0004118" - "2000410810021a200142003703104209200141106a22024108410010011a20024108410220" - "0041084100100a1a41e586c00041142000410810021a200241084100200041084100100a1a" - "41f986c00041172000410810021a200142003703184200200141186a22034108410010011a" - "200341084102200041084100100a1a419087c00041142000410810021a41a487c000413820" - "0341084100200041084100100aac100b1a41dc87c000411841014100410010001a20014200" - "370308420920004108410010011a20014200370310200041084102200241084100100c1a41" - "f487c00041122002410810021a200041084103200241084100100c1a418688c00041122002" - "410810021a2001420037031842c0843d20034108410010011a200341084103200241084100" - "100c1a419888c00041182002410810021a200341084106200241084100100c1a41b088c000" - "411c2002410810021a41cc88c000411741014100410010001a2001420037031042c0843d20" - "024108410010011a2001420037031820024108200341084100100d1a41e388c00041142003" - "410810021a41f788c000411a41014100410010001a20014200370318418182c00041084189" - "82c000410820034108410010081a0240418982c0004108200341081005450440419189c000" - "411641014100410010001a0c010b41a789c000411541014100410010001a0b418982c00041" - "08418982c0004108200141186a22004108410010081a0240418182c0004108200041081005" - "45044041bc89c000411741014100410010001a0c010b41d389c00041164101410041001000" - "1a0b41e989c000411a41014100410010001a2001420037031020014200370318420a200141" - "186a22024108410010011a418182c000410820024108200141106a22004108410010091a41" - "838ac00041192000410810021a418182c00041082000410820004108410010091a419c8ac0" - "00410f2000410810021a02402002410820004108100545044041ab8ac00041144101410041" - "0010001a0c010b41bf8ac000411341014100410010001a0b200141206a240041010b0bdc0a" - "0100418080c0000bd20a0a24242420746573745f666c6f61745f66726f6d5f7761736d2024" - "24242020666c6f61742066726f6d206936342031323330303a2020666c6f61742066726f6d" - "20693634203132333030206173204845583a2020666c6f61742066726f6d20693634203132" - "3330303a206661696c65642020666c6f61742066726f6d207536342031323330303a202066" - "6c6f61742066726f6d207536342031323330303a206661696c65642020666c6f6174206672" - "6f6d2065787020322c206d616e7469737361203132333a2020666c6f61742066726f6d2065" - "787020322c206d616e746973736120333a206661696c65642020666c6f61742066726f6d20" - "636f6e737420313ad4838d7ea4c6800094838d7ea4c680002020666c6f61742066726f6d20" - "636f6e7374202d313a0a24242420746573745f666c6f61745f636f6d706172652024242420" - "20666c6f61742066726f6d20313a2020666c6f61742066726f6d20313a206661696c656420" - "20666c6f61742066726f6d2031203d3d20464c4f41545f4f4e452020666c6f61742066726f" - "6d203120213d20464c4f41545f4f4e452020666c6f61742066726f6d2031203e20464c4f41" - "545f4e454741544956455f4f4e452020666c6f61742066726f6d203120213e20464c4f4154" - "5f4e454741544956455f4f4e452020464c4f41545f4e454741544956455f4f4e45203c2066" - "6c6f61742066726f6d20312020464c4f41545f4e454741544956455f4f4e4520213c20666c" - "6f61742066726f6d20310a24242420746573745f666c6f61745f6164645f73756274726163" - "742024242420207265706561746564206164643a20676f6f64202072657065617465642061" - "64643a20626164202072657065617465642073756274726163743a20676f6f642020726570" - "65617465642073756274726163743a206261640a24242420746573745f666c6f61745f6d75" - "6c7469706c795f6469766964652024242420207265706561746564206d756c7469706c793a" - "20676f6f6420207265706561746564206d756c7469706c793a206261642020726570656174" - "6564206469766964653a20676f6f6420207265706561746564206469766964653a20626164" - "0a24242420746573745f666c6f61745f706f77202424242020666c6f61742063756265206f" - "6620313a2020666c6f61742036746820706f776572206f66202d313a2020666c6f61742073" - "7175617265206f6620393a2020666c6f61742030746820706f776572206f6620393a202066" - "6c6f617420737175617265206f6620303a2020666c6f61742030746820706f776572206f66" - "20302028657870656374696e6720494e56414c49445f504152414d53206572726f72293a0a" - "24242420746573745f666c6f61745f726f6f74202424242020666c6f61742073717274206f" - "6620393a2020666c6f61742063627274206f6620393a2020666c6f61742063627274206f66" - "20313030303030303a2020666c6f61742036746820726f6f74206f6620313030303030303a" - "0a24242420746573745f666c6f61745f6c6f672024242420206c6f675f3130206f66203130" - "30303030303a0a24242420746573745f666c6f61745f6e65676174652024242420206e6567" - "61746520636f6e737420313a20676f6f6420206e656761746520636f6e737420313a206261" - "6420206e656761746520636f6e7374202d313a20676f6f6420206e656761746520636f6e73" - "74202d313a206261640a24242420746573745f666c6f61745f696e76657274202424242020" - "696e76657274206120666c6f61742066726f6d2031303a2020696e7665727420616761696e" - "3a2020696e766572742074776963653a20676f6f642020696e766572742074776963653a20" - "626164004d0970726f64756365727302086c616e6775616765010452757374000c70726f63" - "65737365642d6279010572757374631d312e38372e30202831373036376539616320323032" - "352d30352d303929002c0f7461726765745f6665617475726573022b0f6d757461626c652d" - "676c6f62616c732b087369676e2d657874"; + "0061736d0100000001430860077f7f7f7f7f7f7f017f60057f7f7f7f7f017f60047f7f7f7f017f60067f7f7f7f7f7f" + "017f60047e7f7f7f017f60057f7e7f7f7f017f60037f7f7e017f6000017f02c9020e08686f73745f6c696205747261" + "6365000108686f73745f6c69620e666c6f61745f66726f6d5f696e74000408686f73745f6c69621274726163655f6f" + "70617175655f666c6f6174000208686f73745f6c69620f666c6f61745f66726f6d5f75696e74000108686f73745f6c" + "696209666c6f61745f736574000508686f73745f6c69620d666c6f61745f636f6d70617265000208686f73745f6c69" + "6209666c6f61745f616464000008686f73745f6c69620e666c6f61745f7375627472616374000008686f73745f6c69" + "620e666c6f61745f6d756c7469706c79000008686f73745f6c69620c666c6f61745f646976696465000008686f7374" + "5f6c696209666c6f61745f706f77000308686f73745f6c69620974726163655f6e756d000608686f73745f6c69620a" + "666c6f61745f726f6f74000308686f73745f6c696209666c6f61745f6c6f6700010302010705030100110619037f01" + "418080c0000b7f0041d28ac0000b7f0041e08ac0000b072e04066d656d6f727902000666696e697368000e0a5f5f64" + "6174615f656e6403010b5f5f686561705f6261736503020af20e01ef0e01047f230041206b22012400418080c00041" + "1d41014100410010001a200142003703100240428ce000200141106a22004108410010014108460440419d80c00041" + "172000410810021a41b480c000411e20004108410110001a0c010b41d280c000411e41014100410010001a0b200142" + "8ce0003703180240200141186a4108200141106a2200410841001003410846044041f080c00041172000410810021a" + "0c010b418781c000411e41014100410010001a0b0240410242fb00200141106a2200410841001004410846044041a5" + "81c00041212000410810021a0c010b41c681c000412641014100410010001a0b41ec81c0004115418182c000410810" + "021a419182c0004116418982c000410810021a41a782c000411b41014100410010001a200142003703180240420120" + "0141186a2200410841001001410846044041c282c000410f2000410810021a0c010b41d182c0004116410141004100" + "10001a0b0240200141186a4108418182c0004108100545044041e782c000411b41014100410010001a0c010b418283" + "c000411b41014100410010001a0b0240200141186a4108418982c000410810054101460440419d83c0004123410141" + "00410010001a0c010b41c083c000412441014100410010001a0b0240418982c0004108200141186a41081005410246" + "044041e483c000412341014100410010001a0c010b418784c000412441014100410010001a0b41ab84c00041204101" + "4100410010001a200142d487b6f4c7d4b1c000370310410921000340200141106a22024108418182c0004108200241" + "08410010061a200041016b22000d000b20014200370318420a200141186a22004108410010011a0240200041082002" + "4108100545044041cb84c000411441014100410010001a0c010b41df84c000411341014100410010001a0b410b2100" + "0340200141106a22024108418182c000410820024108410010071a200041016b22000d000b024020024108418982c0" + "004108100545044041f284c000411941014100410010001a0c010b418b85c000411841014100410010001a0b41a385" + "c000412341014100410010001a20014200370300420a20014108410010011a200142d487b6f4c7d4b1c00037030841" + "0621000340200141086a220241082001410820024108410010081a200041016b22000d000b2001420037031042c084" + "3d200141106a22004108410010011a02402000410820024108100545044041c685c000411941014100410010001a0c" + "010b41df85c000411841014100410010001a0b410721000340200141086a220241082001410820024108410010091a" + "200041016b22000d000b20014200370318417f4201200141186a22004108410010041a024020024108200041081005" + "45044041f785c000411741014100410010001a0c010b418e86c000411641014100410010001a0b41a486c000411741" + "014100410010001a20014200370308418182c00041084103200141086a220041084100100a1a41bb86c00041122000" + "410810021a418982c00041084106200041084100100a1a41cd86c00041182000410810021a20014200370310420920" + "0141106a22024108410010011a200241084102200041084100100a1a41e586c00041142000410810021a2002410841" + "00200041084100100a1a41f986c00041172000410810021a200142003703184200200141186a22034108410010011a" + "200341084102200041084100100a1a419087c00041142000410810021a41a487c00041382003410841002000410841" + "00100aac100b1a41dc87c000411841014100410010001a20014200370308420920004108410010011a200142003703" + "10200041084102200241084100100c1a41f487c00041122002410810021a200041084103200241084100100c1a4186" + "88c00041122002410810021a2001420037031842c0843d20034108410010011a200341084103200241084100100c1a" + "419888c00041182002410810021a200341084106200241084100100c1a41b088c000411c2002410810021a41cc88c0" + "00411741014100410010001a2001420037031042c0843d20024108410010011a200142003703182002410820034108" + "4100100d1a41e388c00041142003410810021a41f788c000411a41014100410010001a20014200370318418182c000" + "4108418982c000410820034108410010081a0240418982c0004108200341081005450440419189c000411641014100" + "410010001a0c010b41a789c000411541014100410010001a0b418982c0004108418982c0004108200141186a220041" + "08410010081a0240418182c000410820004108100545044041bc89c000411741014100410010001a0c010b41d389c0" + "00411641014100410010001a0b41e989c000411a41014100410010001a2001420037031020014200370318420a2001" + "41186a22024108410010011a418182c000410820024108200141106a22004108410010091a41838ac0004119200041" + "0810021a418182c00041082000410820004108410010091a419c8ac000410f2000410810021a024020024108200041" + "08100545044041ab8ac000411441014100410010001a0c010b41bf8ac000411341014100410010001a0b200141206a" + "240041010b0bdc0a0100418080c0000bd20a0a24242420746573745f666c6f61745f66726f6d5f7761736d20242424" + "2020666c6f61742066726f6d206936342031323330303a2020666c6f61742066726f6d206936342031323330302061" + "73204845583a2020666c6f61742066726f6d206936342031323330303a206661696c65642020666c6f61742066726f" + "6d207536342031323330303a2020666c6f61742066726f6d207536342031323330303a206661696c65642020666c6f" + "61742066726f6d2065787020322c206d616e7469737361203132333a2020666c6f61742066726f6d2065787020322c" + "206d616e746973736120333a206661696c65642020666c6f61742066726f6d20636f6e737420313ad4838d7ea4c680" + "0094838d7ea4c680002020666c6f61742066726f6d20636f6e7374202d313a0a24242420746573745f666c6f61745f" + "636f6d70617265202424242020666c6f61742066726f6d20313a2020666c6f61742066726f6d20313a206661696c65" + "642020666c6f61742066726f6d2031203d3d20464c4f41545f4f4e452020666c6f61742066726f6d203120213d2046" + "4c4f41545f4f4e452020666c6f61742066726f6d2031203e20464c4f41545f4e454741544956455f4f4e452020666c" + "6f61742066726f6d203120213e20464c4f41545f4e454741544956455f4f4e452020464c4f41545f4e454741544956" + "455f4f4e45203c20666c6f61742066726f6d20312020464c4f41545f4e454741544956455f4f4e4520213c20666c6f" + "61742066726f6d20310a24242420746573745f666c6f61745f6164645f737562747261637420242424202072657065" + "61746564206164643a20676f6f6420207265706561746564206164643a206261642020726570656174656420737562" + "74726163743a20676f6f64202072657065617465642073756274726163743a206261640a24242420746573745f666c" + "6f61745f6d756c7469706c795f6469766964652024242420207265706561746564206d756c7469706c793a20676f6f" + "6420207265706561746564206d756c7469706c793a2062616420207265706561746564206469766964653a20676f6f" + "6420207265706561746564206469766964653a206261640a24242420746573745f666c6f61745f706f772024242420" + "20666c6f61742063756265206f6620313a2020666c6f61742036746820706f776572206f66202d313a2020666c6f61" + "7420737175617265206f6620393a2020666c6f61742030746820706f776572206f6620393a2020666c6f6174207371" + "75617265206f6620303a2020666c6f61742030746820706f776572206f6620302028657870656374696e6720494e56" + "414c49445f504152414d53206572726f72293a0a24242420746573745f666c6f61745f726f6f74202424242020666c" + "6f61742073717274206f6620393a2020666c6f61742063627274206f6620393a2020666c6f61742063627274206f66" + "20313030303030303a2020666c6f61742036746820726f6f74206f6620313030303030303a0a24242420746573745f" + "666c6f61745f6c6f672024242420206c6f675f3130206f6620313030303030303a0a24242420746573745f666c6f61" + "745f6e65676174652024242420206e656761746520636f6e737420313a20676f6f6420206e656761746520636f6e73" + "7420313a2062616420206e656761746520636f6e7374202d313a20676f6f6420206e656761746520636f6e7374202d" + "313a206261640a24242420746573745f666c6f61745f696e76657274202424242020696e76657274206120666c6f61" + "742066726f6d2031303a2020696e7665727420616761696e3a2020696e766572742074776963653a20676f6f642020" + "696e766572742074776963653a20626164004d0970726f64756365727302086c616e6775616765010452757374000c" + "70726f6365737365642d6279010572757374631d312e38372e30202831373036376539616320323032352d30352d30" + "3929002c0f7461726765745f6665617475726573022b0f6d757461626c652d676c6f62616c732b087369676e2d6578" + "74"; extern std::string const float0Hex = - "0061736d0100000001290560057f7f7f7f7f017f60047e7f7f7f017f6007" - "7f7f7f7f7f7f7f017f60047f7f7f7f017f6000017f025f0408686f73745f" - "6c6962057472616365000008686f73745f6c69620e666c6f61745f66726f" - "6d5f696e74000108686f73745f6c69620e666c6f61745f73756274726163" - "74000208686f73745f6c69620d666c6f61745f636f6d7061726500030302" - "010405030100110619037f01418080c0000b7f00419281c0000b7f0041a0" - "81c0000b072e04066d656d6f727902000666696e69736800040a5f5f6461" - "74615f656e6403010b5f5f686561705f6261736503020abe0201bb020101" - "7f23808080800041206b2200248080808000418080c08000411541004100" - "41001080808080001a200042003703084200200041086a41084100108180" - "8080001a20004200370310420a200041106a410841001081808080001a20" - "0042003703180240200041106a4108200041106a4108200041186a410841" - "001082808080004108460d00419580c08000411541004100410010808080" - "80001a0b02400240200041086a4108200041186a41081083808080000d00" - "41aa80c0800041174100410041001080808080001a0c010b41c180c08000" - "41164100410041001080808080001a0b02400240200041086a410841d780" - "c0800041081083808080000d0041df80c08000411a410041004100108080" - "8080001a0c010b41f980c0800041194100410041001080808080001a0b20" - "0041206a24808080800041010b0b9c010100418080c0000b92010a242424" - "20746573745f666c6f61745f30202424242020666c6f61742031302d3130" - "3a206661696c65642020666c6f6174203020636f6d706172653a20676f6f" - "642020666c6f6174203020636f6d706172653a2062616480000000000000" - "002020464c4f41545f5a45524f20636f6d706172653a20676f6f64202046" - "4c4f41545f5a45524f20636f6d706172653a20626164009502046e616d65" - "001110666c6f61745f74657374732e7761736d01da0105002b5f5a4e3878" - "72706c5f73746434686f7374357472616365313768616338383262323664" - "656162656436364501355f5a4e387872706c5f73746434686f7374313466" - "6c6f61745f66726f6d5f696e743137683032343066386533613839643139" - "39654502355f5a4e387872706c5f73746434686f73743134666c6f61745f" - "737562747261637431376864363430633135323334353432393563450334" - "5f5a4e387872706c5f73746434686f73743133666c6f61745f636f6d7061" - "72653137683663386465656231323864393638386645040666696e697368" - "071201000f5f5f737461636b5f706f696e746572090a0100072e726f6461" - "7461004d0970726f64756365727302086c616e6775616765010452757374" - "000c70726f6365737365642d6279010572757374631d312e38392e302028" - "32393438333838336520323032352d30382d3034290094010f7461726765" - "745f6665617475726573082b0b62756c6b2d6d656d6f72792b0f62756c6b" - "2d6d656d6f72792d6f70742b1663616c6c2d696e6469726563742d6f7665" - "726c6f6e672b0a6d756c746976616c75652b0f6d757461626c652d676c6f" - "62616c732b136e6f6e7472617070696e672d6670746f696e742b0f726566" - "6572656e63652d74797065732b087369676e2d657874"; + "0061736d0100000001290560057f7f7f7f7f017f60047e7f7f7f017f60077f7f7f7f7f7f7f017f60047f7f7f7f017f" + "6000017f025f0408686f73745f6c6962057472616365000008686f73745f6c69620e666c6f61745f66726f6d5f696e" + "74000108686f73745f6c69620e666c6f61745f7375627472616374000208686f73745f6c69620d666c6f61745f636f" + "6d7061726500030302010405030100110619037f01418080c0000b7f00419281c0000b7f0041a081c0000b072e0406" + "6d656d6f727902000666696e69736800040a5f5f646174615f656e6403010b5f5f686561705f6261736503020abe02" + "01bb0201017f23808080800041206b2200248080808000418080c0800041154100410041001080808080001a200042" + "003703084200200041086a410841001081808080001a20004200370310420a200041106a410841001081808080001a" + "200042003703180240200041106a4108200041106a4108200041186a410841001082808080004108460d00419580c0" + "800041154100410041001080808080001a0b02400240200041086a4108200041186a41081083808080000d0041aa80" + "c0800041174100410041001080808080001a0c010b41c180c0800041164100410041001080808080001a0b02400240" + "200041086a410841d780c0800041081083808080000d0041df80c08000411a4100410041001080808080001a0c010b" + "41f980c0800041194100410041001080808080001a0b200041206a24808080800041010b0b9c010100418080c0000b" + "92010a24242420746573745f666c6f61745f30202424242020666c6f61742031302d31303a206661696c6564202066" + "6c6f6174203020636f6d706172653a20676f6f642020666c6f6174203020636f6d706172653a206261648000000000" + "0000002020464c4f41545f5a45524f20636f6d706172653a20676f6f642020464c4f41545f5a45524f20636f6d7061" + "72653a20626164009502046e616d65001110666c6f61745f74657374732e7761736d01da0105002b5f5a4e38787270" + "6c5f73746434686f7374357472616365313768616338383262323664656162656436364501355f5a4e387872706c5f" + "73746434686f73743134666c6f61745f66726f6d5f696e74313768303234306638653361383964313939654502355f" + "5a4e387872706c5f73746434686f73743134666c6f61745f7375627472616374313768643634306331353233343534" + "323935634503345f5a4e387872706c5f73746434686f73743133666c6f61745f636f6d706172653137683663386465" + "656231323864393638386645040666696e697368071201000f5f5f737461636b5f706f696e746572090a0100072e72" + "6f64617461004d0970726f64756365727302086c616e6775616765010452757374000c70726f6365737365642d6279" + "010572757374631d312e38392e30202832393438333838336520323032352d30382d3034290094010f746172676574" + "5f6665617475726573082b0b62756c6b2d6d656d6f72792b0f62756c6b2d6d656d6f72792d6f70742b1663616c6c2d" + "696e6469726563742d6f7665726c6f6e672b0a6d756c746976616c75652b0f6d757461626c652d676c6f62616c732" + "b136e6f6e7472617070696e672d6670746f696e742b0f7265666572656e63652d74797065732b087369676e2d65787" + "4"; extern std::string const disabledFloatHex = - "0061736d010000000108026000006000017f03030200010503010002063e" - "0a7f004180080b7f004180080b7f004180100b7f004180100b7f00418090" - "040b7f004180080b7f00418090040b7f00418080080b7f0041000b7f0041" - "010b07b0010d066d656d6f72790200115f5f7761736d5f63616c6c5f6374" - "6f727300000666696e69736800010362756603000c5f5f64736f5f68616e" - "646c6503010a5f5f646174615f656e6403020b5f5f737461636b5f6c6f77" - "03030c5f5f737461636b5f6869676803040d5f5f676c6f62616c5f626173" - "6503050b5f5f686561705f6261736503060a5f5f686561705f656e640307" - "0d5f5f6d656d6f72795f6261736503080c5f5f7461626c655f6261736503" - "090a150202000b100043000000c54300200045921a41010b"; + "0061736d010000000108026000006000017f03030200010503010002063e0a7f004180080b7f004180080b7f004180" + "100b7f004180100b7f00418090040b7f004180080b7f00418090040b7f00418080080b7f0041000b7f0041010b07b0" + "010d066d656d6f72790200115f5f7761736d5f63616c6c5f63746f727300000666696e69736800010362756603000c" + "5f5f64736f5f68616e646c6503010a5f5f646174615f656e6403020b5f5f737461636b5f6c6f7703030c5f5f737461" + "636b5f6869676803040d5f5f676c6f62616c5f6261736503050b5f5f686561705f6261736503060a5f5f686561705f" + "656e6403070d5f5f6d656d6f72795f6261736503080c5f5f7461626c655f6261736503090a150202000b1000430000" + "00c54300200045921a41010b"; extern std::string const memoryPointerAtLimitHex = - "0061736d010000000105016000017f030201000503010001070a010666696e69736800000a" - "0e010c0041ffff032d00001a41010b"; + "0061736d010000000105016000017f030201000503010001070a010666696e69736800000a0e010c0041ffff032d00" + "001a41010b"; extern std::string const memoryPointerOverLimitHex = - "0061736d010000000105016000017f030201000503010001070a010666696e69736800000a" - "0e010c00418080042d00001a41010b"; + "0061736d010000000105016000017f030201000503010001070a010666696e69736800000a0e010c00418080042d00" + "001a41010b"; extern std::string const memoryOffsetOverLimitHex = - "0061736d010000000105016000017f030201000503010001071302066d656d6f7279020006" - "66696e69736800000a0e010c00410028028080041a41010b"; + "0061736d010000000105016000017f030201000503010001071302066d656d6f727902000666696e69736800000a0e" + "010c00410028028080041a41010b"; extern std::string const memoryEndOfWordOverLimitHex = - "0061736d010000000105016000017f030201000503010001071302066d656d6f7279020006" - "66696e69736800000a0e010c0041feff032802001a41010b"; + "0061736d010000000105016000017f030201000503010001071302066d656d6f727902000666696e69736800000a0e" + "010c0041feff032802001a41010b"; extern std::string const memoryGrow0To1PageHex = - "0061736d010000000105016000017f030201000503010000071302066d656d6f7279020006" - "66696e69736800000a0b010900410140001a41010b"; + "0061736d010000000105016000017f030201000503010000071302066d656d6f727902000666696e69736800000a0b" + "010900410140001a41010b"; extern std::string const memoryGrow1To0PageHex = - "0061736d010000000105016000017f030201000503010001071302066d656d6f7279020006" - "66696e69736800000a13011100417f4000417f460440417f0f0b41010b"; + "0061736d010000000105016000017f030201000503010001071302066d656d6f727902000666696e69736800000a13" + "011100417f4000417f460440417f0f0b41010b"; extern std::string const memoryLastByteOf8MBHex = - "0061736d010000000105016000017f030201000506010180018001071302066d656d6f7279" - "02000666696e69736800000a0f010d0041ffffff032d00001a41010b"; + "0061736d010000000105016000017f030201000506010180018001071302066d656d6f727902000666696e69736800" + "000a0f010d0041ffffff032d00001a41010b"; extern std::string const memoryGrow1MoreThan8MBHex = - "0061736d010000000105016000017f03020100050401008001071302066d656d6f72790200" - "0666696e69736800000a1301110041014000417f460440417f0f0b41010b"; + "0061736d010000000105016000017f03020100050401008001071302066d656d6f727902000666696e69736800000a" + "1301110041014000417f460440417f0f0b41010b"; extern std::string const memoryGrow0MoreThan8MBHex = - "0061736d010000000105016000017f03020100050401008001071302066d656d6f72790200" - "0666696e69736800000a1301110041004000417f460440417f0f0b41010b"; + "0061736d010000000105016000017f03020100050401008001071302066d656d6f727902000666696e69736800000a" + "1301110041004000417f460440417f0f0b41010b"; extern std::string const memoryInit1MoreThan8MBHex = - "0061736d010000000105016000017f030201000506010181018101071302066d656d6f7279" - "02000666696e69736800000a0f010d0041ffffff032d00001a41010b"; + "0061736d010000000105016000017f030201000506010181018101071302066d656d6f727902000666696e69736800" + "000a0f010d0041ffffff032d00001a41010b"; extern std::string const memoryNegativeAddressHex = - "0061736d010000000105016000017f030201000506010180018001071302066d656d6f7279" - "02000666696e69736800000a0c010a00417f2d00001a41010b"; + "0061736d010000000105016000017f030201000506010180018001071302066d656d6f727902000666696e69736800" + "000a0c010a00417f2d00001a41010b"; extern std::string const table64ElementsHex = - "0061736d010000000108026000006000017f0303020001040401700040070a010666696e69" - "736800010946010041000b4000000000000000000000000000000000000000000000000000" - "00000000000000000000000000000000000000000000000000000000000000000000000000" - "00000a090202000b040041010b"; + "0061736d010000000108026000006000017f0303020001040401700040070a010666696e6973680001094601004100" + "0b40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000a090202000b040041010b"; extern std::string const table65ElementsHex = - "0061736d010000000108026000006000017f0303020001040401700041070a010666696e69" - "736800010947010041000b4100000000000000000000000000000000000000000000000000" - "00000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000a090202000b040041010b"; + "0061736d010000000108026000006000017f0303020001040401700041070a010666696e6973680001094701004100" + "0b41000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000000000000000000000000a090202000b040041010b"; extern std::string const table2TablesHex = - "0061736d010000000108026000006000017f03030200010409027001010170010101070a01" - "0666696e6973680001090f020041000b0100020141000b0001000a090202000b040041010" - "b"; + "0061736d010000000108026000006000017f03030200010409027001010170010101070a010666696e697368000109" + "0f020041000b0100020141000b0001000a090202000b040041010b"; extern std::string const table0ElementsHex = - "0061736d010000000105016000017f03020100040401700000070a010666696e6973680000" - "0a0601040041010b"; + "0061736d010000000105016000017f03020100040401700000070a010666696e69736800000a0601040041010b"; extern std::string const tableUintMaxHex = - "0061736d010000000105016000017f030201000408017000ffffffff0f070a010666696e69" - "736800000a0601040041010b"; + "0061736d010000000105016000017f030201000408017000ffffffff0f070a010666696e69736800000a0601040041" + "010b"; extern std::string const proposalMutableGlobalHex = - "0061736d010000000105016000017f030201000606017f0141000b07140207636f756e7465" - "7203000666696e69736800000a0d010b00230041016a240041010b"; + "0061736d010000000105016000017f030201000606017f0141000b07140207636f756e74657203000666696e697368" + "00000a0d010b00230041016a240041010b"; extern std::string const proposalGcStructNewHex = - "0061736d01000000010b026000017f5f027f017f0103020100070a010666696e6973680000" - "0a0a010800fb01011a41010b"; + "0061736d01000000010b026000017f5f027f017f0103020100070a010666696e69736800000a0a010800fb01011a41" + "010b"; extern std::string const proposalMultiValueHex = - "0061736d010000000110036000027f7f6000017f60027f7f017f0303020001070a01066669" - "6e69736800010a14020600410a41140b0b00100002026a411e460b0b"; + "0061736d010000000110036000027f7f6000017f60027f7f017f0303020001070a010666696e69736800010a140206" + "00410a41140b0b00100002026a411e460b0b"; extern std::string const proposalSignExtHex = - "0061736d010000000105016000017f03020100070a010666696e69736800000a0b01090041" - "ff01c0417f460b"; + "0061736d010000000105016000017f03020100070a010666696e69736800000a0b01090041ff01c0417f460b"; extern std::string const proposalFloatToIntHex = - "0061736d010000000105016000017f03020100070a010666696e69736800000a1201100043" - "f9021550fc0041ffffffff07460b"; + "0061736d010000000105016000017f03020100070a010666696e69736800000a1201100043f9021550fc0041ffffff" + "ff07460b"; extern std::string const proposalBulkMemoryHex = - "0061736d010000000105016000017f030201000503010001071302066d656d6f7279020006" - "66696e69736800000a1f011d004100412a3a000041e40041004101fc0a000041e4002d0000" - "412a460b"; + "0061736d010000000105016000017f030201000503010001071302066d656d6f727902000666696e69736800000a1f" + "011d004100412a3a000041e40041004101fc0a000041e4002d0000412a460b"; extern std::string const proposalRefTypesHex = - "0061736d010000000105016000017f020f0103656e76057461626c65016f00010302010007" - "0a010666696e69736800000a0c010a004100d06f260041010b"; + "0061736d010000000105016000017f020f0103656e76057461626c65016f000103020100070a010666696e69736800" + "000a0c010a004100d06f260041010b"; extern std::string const proposalTailCallHex = - "0061736d010000000105016000017f0303020000070a010666696e69736800010a0b020400" - "41010b040012000b"; + "0061736d010000000105016000017f0303020000070a010666696e69736800010a0b02040041010b040012000b"; extern std::string const proposalExtendedConstHex = - "0061736d010000000105016000017f030201000609017f00410a41206a0b070a010666696e" - "69736800000a090107002300412a460b"; + "0061736d010000000105016000017f030201000609017f00410a41206a0b070a010666696e69736800000a09010700" + "2300412a460b"; extern std::string const proposalMultiMemoryHex = - "0061736d010000000105016000017f0302010005050200000001070a010666696e69736800" - "000a060104003f010b"; + "0061736d010000000105016000017f0302010005050200000001070a010666696e69736800000a060104003f010b"; extern std::string const proposalCustomPageSizesHex = - "0061736d010000000105016000017f0302010005040108010a070a010666696e6973680000" - "0a0601040041010b0010046e616d65010901000666696e697368"; + "0061736d010000000105016000017f0302010005040108010a070a010666696e69736800000a0601040041010b0010" + "046e616d65010901000666696e697368"; extern std::string const proposalMemory64Hex = - "0061736d010000000105016000017f030201000503010401070a010666696e69736800000a" - "10010e004200412a3a00003f004201510b0010046e616d65010901000666696e697368"; + "0061736d010000000105016000017f030201000503010401070a010666696e69736800000a10010e004200412a3a00" + "003f004201510b0010046e616d65010901000666696e697368"; extern std::string const proposalWideArithmeticHex = - "0061736d010000000105016000017f03020100070a010666696e69736800000a0e010c0042" - "014202fc161a1a41010b0010046e616d65010901000666696e697368"; + "0061736d010000000105016000017f03020100070a010666696e69736800000a0e010c0042014202fc161a1a41010b" + "0010046e616d65010901000666696e697368"; extern std::string const trapDivideBy0Hex = - "0061736d010000000105016000017f03020100070a010666696e69736800000a0c010a0041" - "2a41006d1a41010b"; + "0061736d010000000105016000017f03020100070a010666696e69736800000a0c010a00412a41006d1a41010b"; extern std::string const trapIntOverflowHex = - "0061736d010000000105016000017f03020100070a010666696e69736800000a0d010b0041" - "8080808078417f6d0b"; + "0061736d010000000105016000017f03020100070a010666696e69736800000a0d010b00418080808078417f6d0b"; extern std::string const trapUnreachableHex = - "0061736d010000000105016000017f03020100070a010666696e69736800000a0701050000" - "41010b"; + "0061736d010000000105016000017f03020100070a010666696e69736800000a070105000041010b"; extern std::string const trapNullCallHex = - "0061736d010000000105016000017f03020100040401700001070a010666696e6973680000" - "0a0901070041001100000b"; + "0061736d010000000105016000017f03020100040401700001070a010666696e69736800000a090107004100110000" + "0b"; extern std::string const trapFuncSigMismatchHex = - "0061736d010000000108026000006000017f0303020001040401700001070a010666696e69" - "736800010907010041000b01000a0d020300010b070041001101000b"; + "0061736d010000000108026000006000017f0303020001040401700001070a010666696e6973680001090701004100" + "0b01000a0d020300010b070041001101000b"; extern std::string const wasiGetTimeHex = - "0061736d01000000010c0260037f7e7f017f6000017f02290116776173695f736e61707368" - "6f745f70726576696577310e636c6f636b5f74696d655f6765740000030201010503010001" - "071302066d656d6f727902000666696e69736800010a16011400410042e807410010004504" - "7f410105417f0b0b"; + "0061736d01000000010c0260037f7e7f017f6000017f02290116776173695f736e617073686f745f70726576696577" + "310e636c6f636b5f74696d655f6765740000030201010503010001071302066d656d6f727902000666696e69736800" + "010a16011400410042e8074100100045047f410105417f0b0b"; extern std::string const wasiPrintHex = - "0061736d01000000010d0260047f7f7f7f017f6000017f02230116776173695f736e617073" - "686f745f70726576696577310866645f77726974650000030201010503010001071302066d" - "656d6f727902000666696e69736800010a1d011b01017f4118210041014100410120001000" - "45047f410105417f0b0b0b1e030041100b0648656c6c6f0a0041000b04100000000041040b" - "0406000000"; + "0061736d01000000010d0260047f7f7f7f017f6000017f02230116776173695f736e617073686f745f707265766965" + "77310866645f77726974650000030201010503010001071302066d656d6f727902000666696e69736800010a1d011b" + "01017f411821004101410041012000100045047f410105417f0b0b0b1e030041100b0648656c6c6f0a0041000b0410" + "0000000041040b0406000000"; // The following several wasm hex strings are for testing wasm section // corruption cases. They are illegal hence do not have corresponding @@ -1269,9 +945,9 @@ extern std::string const lyingHeaderHex = "0061736d01000000018080808008"; // # Vector count: Infinite stream of 0x80 (100 bytes) // data += b'\x80' * 100 extern std::string const neverEndingNumberHex = - "0061736d010000000105808080808080808080808080808080808080808080808080808080" - "80808080808080808080808080808080808080808080808080808080808080808080808080" - "808080808080808080808080808080808080808080808080808080808080808080808080"; + "0061736d01000000010580808080808080808080808080808080808080808080808080808080808080808080808080" + "8080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080" + "80808080808080808080808080808080"; // Corruption Test: vectorLie // Scenario: A vector declares it has 4 billion items, but provides none. @@ -1357,7627 +1033,4638 @@ extern std::string const localVariableBombHex = "0061736d01000000010401600000030201000a0f010d01ffffffff0f7f0b"; extern std::string const infiniteLoopWasmHex = - "0061736d010000000108026000006000017f030302000105030100020638097f004180080b" - "7f004180080b7f004180080b7f00418088040b7f004180080b7f00418088040b7f00418080" - "080b7f0041000b7f0041010b07a8010c066d656d6f72790200115f5f7761736d5f63616c6c" - "5f63746f72730000046c6f6f7000010c5f5f64736f5f68616e646c6503000a5f5f64617461" - "5f656e6403010b5f5f737461636b5f6c6f7703020c5f5f737461636b5f6869676803030d5f" - "5f676c6f62616c5f6261736503040b5f5f686561705f6261736503050a5f5f686561705f65" - "6e6403060d5f5f6d656d6f72795f6261736503070c5f5f7461626c655f6261736503080a27" - "0202000b220041fc87044100360200034041fc870441fc870428020041016a3602000c000b" - "000b007f0970726f647563657273010c70726f6365737365642d62790105636c616e675f31" - "392e312e352d776173692d73646b202868747470733a2f2f6769746875622e636f6d2f6c6c" - "766d2f6c6c766d2d70726f6a65637420616234623561326462353832393538616631656533" - "303861373930636664623432626432343732302900490f7461726765745f66656174757265" - "73042b0f6d757461626c652d676c6f62616c732b087369676e2d6578742b0f726566657265" - "6e63652d74797065732b0a6d756c746976616c7565"; + "0061736d010000000108026000006000017f030302000105030100020638097f004180080b7f004180080b7f004180" + "080b7f00418088040b7f004180080b7f00418088040b7f00418080080b7f0041000b7f0041010b07a8010c066d656d" + "6f72790200115f5f7761736d5f63616c6c5f63746f72730000046c6f6f7000010c5f5f64736f5f68616e646c650300" + "0a5f5f646174615f656e6403010b5f5f737461636b5f6c6f7703020c5f5f737461636b5f6869676803030d5f5f676c" + "6f62616c5f6261736503040b5f5f686561705f6261736503050a5f5f686561705f656e6403060d5f5f6d656d6f7279" + "5f6261736503070c5f5f7461626c655f6261736503080a270202000b220041fc87044100360200034041fc870441fc" + "870428020041016a3602000c000b000b007f0970726f647563657273010c70726f6365737365642d62790105636c61" + "6e675f31392e312e352d776173692d73646b202868747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c76" + "6d2d70726f6a6563742061623462356132646235383239353861663165653330386137393063666462343262643234" + "3732302900490f7461726765745f6665617475726573042b0f6d757461626c652d676c6f62616c732b087369676e2d" + "6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; extern std::string const startLoopHex = - "0061736d010000000108026000006000017f03030200010712020573746172740000066669" - "6e69736800010801000a0e02070003400c000b0b040041010b"; + "0061736d010000000108026000006000017f030302000107120205737461727400000666696e69736800010801000a" + "0e02070003400c000b0b040041010b"; extern std::string const badAlignWasmHex = "0061736d01000000011b046000017f60057f7f7f7f7f017f60067f7f7f7f7f7f017f600000022a0203656e760f666c" - "6f61745f66726f6d5f75" - "696e74000103656e760c636865636b5f6b65796c6574000203050403000000050301000306470b7f004180080b7f00" - "418088020b7f00418008" - "0b7f00418088040b7f00418088040b7f00418088080b7f004180080b7f00418088080b7f004180800c0b7f0041000b" - "7f0041010b07cc011006" - "6d656d6f72790200115f5f7761736d5f63616c6c5f63746f72730002057465737431000307655f6461746131030005" - "7465737432000407655f" - "64617461320301047465737400050c5f5f64736f5f68616e646c6503020a5f5f646174615f656e6403030b5f5f7374" - "61636b5f6c6f7703040c" - "5f5f737461636b5f6869676803050d5f5f676c6f62616c5f6261736503060b5f5f686561705f6261736503070a5f5f" - "686561705f656e640308" - "0d5f5f6d656d6f72795f6261736503090c5f5f7461626c655f62617365030a0a99020402000b2801017f418108427f" - "370000418108410841a3" - "08410c41001000220041a40828020020004100481b0b5f01017f419a88024191a4cca00136010041928802428994ac" - "e0d0c1c3871037010041" - "8a88024281848ca0d0c0c1830837010041818802417f360000418a8802411441818802410441a38802412010012200" - "41a48802280200200041" - "00481b0b8a0101037f418108427f370000418108410841a308410c410010002100419a88024191a4cca00136010041" - "928802428994ace0d0c1" - "c38710370100418a88024281848ca0d0c0c1830837010041818802417f36000041a4082802002101418a8802411441" - "818802410441a3880241" - "201001220241a4880228020020024100481b2000200120004100481b6a0b007f0970726f647563657273010c70726f" - "6365737365642d627901" - "05636c616e675f31392e312e352d776173692d73646b202868747470733a2f2f6769746875622e636f6d2f6c6c766d" - "2f6c6c766d2d70726f6a" - "6563742061623462356132646235383239353861663165653330386137393063666462343262643234373230290049" - "0f7461726765745f6665" - "617475726573042b0f6d757461626c652d676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74" - "797065732b0a6d756c74" - "6976616c7565"; + "6f61745f66726f6d5f75696e74000103656e760c636865636b5f6b65796c6574000203050403000000050301000306" + "470b7f004180080b7f00418088020b7f004180080b7f00418088040b7f00418088040b7f00418088080b7f00418008" + "0b7f00418088080b7f004180800c0b7f0041000b7f0041010b07cc0110066d656d6f72790200115f5f7761736d5f63" + "616c6c5f63746f72730002057465737431000307655f64617461310300057465737432000407655f64617461320301" + "047465737400050c5f5f64736f5f68616e646c6503020a5f5f646174615f656e6403030b5f5f737461636b5f6c6f77" + "03040c5f5f737461636b5f6869676803050d5f5f676c6f62616c5f6261736503060b5f5f686561705f626173650307" + "0a5f5f686561705f656e6403080d5f5f6d656d6f72795f6261736503090c5f5f7461626c655f62617365030a0a9902" + "0402000b2801017f418108427f370000418108410841a308410c41001000220041a40828020020004100481b0b5f01" + "017f419a88024191a4cca00136010041928802428994ace0d0c1c38710370100418a88024281848ca0d0c0c1830837" + "010041818802417f360000418a8802411441818802410441a3880241201001220041a4880228020020004100481b0b" + "8a0101037f418108427f370000418108410841a308410c410010002100419a88024191a4cca0013601004192880242" + "8994ace0d0c1c38710370100418a88024281848ca0d0c0c1830837010041818802417f36000041a408280200210141" + "8a8802411441818802410441a3880241201001220241a4880228020020024100481b2000200120004100481b6a0b00" + "7f0970726f647563657273010c70726f6365737365642d62790105636c616e675f31392e312e352d776173692d7364" + "6b202868747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a6563742061623462356132" + "6462353832393538616631656533303861373930636664623432626432343732302900490f7461726765745f666561" + "7475726573042b0f6d757461626c652d676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d7479" + "7065732b0a6d756c746976616c7565"; extern std::string const thousandParamsHex = "0061736d0100000001f1070260000060e8077f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f017f030302000105" - "030100020638097f004180080b7f004180080b7f004180080b7f00418088040b7f004180080b7f00418088040b7f00" - "418080080b7f0041000b" - "7f0041010b07a8010c066d656d6f72790200115f5f7761736d5f63616c6c5f63746f72730000047465737400010c5f" - "5f64736f5f68616e646c" - "6503000a5f5f646174615f656e6403010b5f5f737461636b5f6c6f7703020c5f5f737461636b5f6869676803030d5f" - "5f676c6f62616c5f6261" - "736503040b5f5f686561705f6261736503050a5f5f686561705f656e6403060d5f5f6d656d6f72795f626173650307" - "0c5f5f7461626c655f62" - "61736503080aa71e0202000ba11e00200020016a20026a20036a20046a20056a20066a20076a20086a20096a200a6a" - "200b6a200c6a200d6a20" - "0e6a200f6a20106a20116a20126a20136a20146a20156a20166a20176a20186a20196a201a6a201b6a201c6a201d6a" - "201e6a201f6a20206a20" - "216a20226a20236a20246a20256a20266a20276a20286a20296a202a6a202b6a202c6a202d6a202e6a202f6a20306a" - "20316a20326a20336a20" - "346a20356a20366a20376a20386a20396a203a6a203b6a203c6a203d6a203e6a203f6a20406a20416a20426a20436a" - "20446a20456a20466a20" - "476a20486a20496a204a6a204b6a204c6a204d6a204e6a204f6a20506a20516a20526a20536a20546a20556a20566a" - "20576a20586a20596a20" - "5a6a205b6a205c6a205d6a205e6a205f6a20606a20616a20626a20636a20646a20656a20666a20676a20686a20696a" - "206a6a206b6a206c6a20" - "6d6a206e6a206f6a20706a20716a20726a20736a20746a20756a20766a20776a20786a20796a207a6a207b6a207c6a" - "207d6a207e6a207f6a20" - "80016a2081016a2082016a2083016a2084016a2085016a2086016a2087016a2088016a2089016a208a016a208b016a" - "208c016a208d016a208e" - "016a208f016a2090016a2091016a2092016a2093016a2094016a2095016a2096016a2097016a2098016a2099016a20" - "9a016a209b016a209c01" - "6a209d016a209e016a209f016a20a0016a20a1016a20a2016a20a3016a20a4016a20a5016a20a6016a20a7016a20a8" - "016a20a9016a20aa016a" - "20ab016a20ac016a20ad016a20ae016a20af016a20b0016a20b1016a20b2016a20b3016a20b4016a20b5016a20b601" - "6a20b7016a20b8016a20" - "b9016a20ba016a20bb016a20bc016a20bd016a20be016a20bf016a20c0016a20c1016a20c2016a20c3016a20c4016a" - "20c5016a20c6016a20c7" - "016a20c8016a20c9016a20ca016a20cb016a20cc016a20cd016a20ce016a20cf016a20d0016a20d1016a20d2016a20" - "d3016a20d4016a20d501" - "6a20d6016a20d7016a20d8016a20d9016a20da016a20db016a20dc016a20dd016a20de016a20df016a20e0016a20e1" - "016a20e2016a20e3016a" - "20e4016a20e5016a20e6016a20e7016a20e8016a20e9016a20ea016a20eb016a20ec016a20ed016a20ee016a20ef01" - "6a20f0016a20f1016a20" - "f2016a20f3016a20f4016a20f5016a20f6016a20f7016a20f8016a20f9016a20fa016a20fb016a20fc016a20fd016a" - "20fe016a20ff016a2080" - "026a2081026a2082026a2083026a2084026a2085026a2086026a2087026a2088026a2089026a208a026a208b026a20" - "8c026a208d026a208e02" - "6a208f026a2090026a2091026a2092026a2093026a2094026a2095026a2096026a2097026a2098026a2099026a209a" - "026a209b026a209c026a" - "209d026a209e026a209f026a20a0026a20a1026a20a2026a20a3026a20a4026a20a5026a20a6026a20a7026a20a802" - "6a20a9026a20aa026a20" - "ab026a20ac026a20ad026a20ae026a20af026a20b0026a20b1026a20b2026a20b3026a20b4026a20b5026a20b6026a" - "20b7026a20b8026a20b9" - "026a20ba026a20bb026a20bc026a20bd026a20be026a20bf026a20c0026a20c1026a20c2026a20c3026a20c4026a20" - "c5026a20c6026a20c702" - "6a20c8026a20c9026a20ca026a20cb026a20cc026a20cd026a20ce026a20cf026a20d0026a20d1026a20d2026a20d3" - "026a20d4026a20d5026a" - "20d6026a20d7026a20d8026a20d9026a20da026a20db026a20dc026a20dd026a20de026a20df026a20e0026a20e102" - "6a20e2026a20e3026a20" - "e4026a20e5026a20e6026a20e7026a20e8026a20e9026a20ea026a20eb026a20ec026a20ed026a20ee026a20ef026a" - "20f0026a20f1026a20f2" - "026a20f3026a20f4026a20f5026a20f6026a20f7026a20f8026a20f9026a20fa026a20fb026a20fc026a20fd026a20" - "fe026a20ff026a208003" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f017f030302000105030100020638097f" + "004180080b7f004180080b7f004180080b7f00418088040b7f004180080b7f00418088040b7f00418080080b7f0041" + "000b7f0041010b07a8010c066d656d6f72790200115f5f7761736d5f63616c6c5f63746f7273000004746573740001" + "0c5f5f64736f5f68616e646c6503000a5f5f646174615f656e6403010b5f5f737461636b5f6c6f7703020c5f5f7374" + "61636b5f6869676803030d5f5f676c6f62616c5f6261736503040b5f5f686561705f6261736503050a5f5f68656170" + "5f656e6403060d5f5f6d656d6f72795f6261736503070c5f5f7461626c655f6261736503080aa71e0202000ba11e00" + "200020016a20026a20036a20046a20056a20066a20076a20086a20096a200a6a200b6a200c6a200d6a200e6a200f6a" + "20106a20116a20126a20136a20146a20156a20166a20176a20186a20196a201a6a201b6a201c6a201d6a201e6a201f" + "6a20206a20216a20226a20236a20246a20256a20266a20276a20286a20296a202a6a202b6a202c6a202d6a202e6a20" + "2f6a20306a20316a20326a20336a20346a20356a20366a20376a20386a20396a203a6a203b6a203c6a203d6a203e6a" + "203f6a20406a20416a20426a20436a20446a20456a20466a20476a20486a20496a204a6a204b6a204c6a204d6a204e" + "6a204f6a20506a20516a20526a20536a20546a20556a20566a20576a20586a20596a205a6a205b6a205c6a205d6a20" + "5e6a205f6a20606a20616a20626a20636a20646a20656a20666a20676a20686a20696a206a6a206b6a206c6a206d6a" + "206e6a206f6a20706a20716a20726a20736a20746a20756a20766a20776a20786a20796a207a6a207b6a207c6a207d" + "6a207e6a207f6a2080016a2081016a2082016a2083016a2084016a2085016a2086016a2087016a2088016a2089016a" + "208a016a208b016a208c016a208d016a208e016a208f016a2090016a2091016a2092016a2093016a2094016a209501" + "6a2096016a2097016a2098016a2099016a209a016a209b016a209c016a209d016a209e016a209f016a20a0016a20a1" + "016a20a2016a20a3016a20a4016a20a5016a20a6016a20a7016a20a8016a20a9016a20aa016a20ab016a20ac016a20" + "ad016a20ae016a20af016a20b0016a20b1016a20b2016a20b3016a20b4016a20b5016a20b6016a20b7016a20b8016a" + "20b9016a20ba016a20bb016a20bc016a20bd016a20be016a20bf016a20c0016a20c1016a20c2016a20c3016a20c401" + "6a20c5016a20c6016a20c7016a20c8016a20c9016a20ca016a20cb016a20cc016a20cd016a20ce016a20cf016a20d0" + "016a20d1016a20d2016a20d3016a20d4016a20d5016a20d6016a20d7016a20d8016a20d9016a20da016a20db016a20" + "dc016a20dd016a20de016a20df016a20e0016a20e1016a20e2016a20e3016a20e4016a20e5016a20e6016a20e7016a" + "20e8016a20e9016a20ea016a20eb016a20ec016a20ed016a20ee016a20ef016a20f0016a20f1016a20f2016a20f301" + "6a20f4016a20f5016a20f6016a20f7016a20f8016a20f9016a20fa016a20fb016a20fc016a20fd016a20fe016a20ff" + "016a2080026a2081026a2082026a2083026a2084026a2085026a2086026a2087026a2088026a2089026a208a026a20" + "8b026a208c026a208d026a208e026a208f026a2090026a2091026a2092026a2093026a2094026a2095026a2096026a" + "2097026a2098026a2099026a209a026a209b026a209c026a209d026a209e026a209f026a20a0026a20a1026a20a202" + "6a20a3026a20a4026a20a5026a20a6026a20a7026a20a8026a20a9026a20aa026a20ab026a20ac026a20ad026a20ae" + "026a20af026a20b0026a20b1026a20b2026a20b3026a20b4026a20b5026a20b6026a20b7026a20b8026a20b9026a20" + "ba026a20bb026a20bc026a20bd026a20be026a20bf026a20c0026a20c1026a20c2026a20c3026a20c4026a20c5026a" + "20c6026a20c7026a20c8026a20c9026a20ca026a20cb026a20cc026a20cd026a20ce026a20cf026a20d0026a20d102" + "6a20d2026a20d3026a20d4026a20d5026a20d6026a20d7026a20d8026a20d9026a20da026a20db026a20dc026a20dd" + "026a20de026a20df026a20e0026a20e1026a20e2026a20e3026a20e4026a20e5026a20e6026a20e7026a20e8026a20" + "e9026a20ea026a20eb026a20ec026a20ed026a20ee026a20ef026a20f0026a20f1026a20f2026a20f3026a20f4026a" + "20f5026a20f6026a20f7026a20f8026a20f9026a20fa026a20fb026a20fc026a20fd026a20fe026a20ff026a208003" "6a2081036a2082036a2083036a2084036a2085036a2086036a2087036a2088036a2089036a208a036a208b036a208c" - "036a208d036a208e036a" - "208f036a2090036a2091036a2092036a2093036a2094036a2095036a2096036a2097036a2098036a2099036a209a03" - "6a209b036a209c036a20" - "9d036a209e036a209f036a20a0036a20a1036a20a2036a20a3036a20a4036a20a5036a20a6036a20a7036a20a8036a" - "20a9036a20aa036a20ab" - "036a20ac036a20ad036a20ae036a20af036a20b0036a20b1036a20b2036a20b3036a20b4036a20b5036a20b6036a20" - "b7036a20b8036a20b903" - "6a20ba036a20bb036a20bc036a20bd036a20be036a20bf036a20c0036a20c1036a20c2036a20c3036a20c4036a20c5" - "036a20c6036a20c7036a" - "20c8036a20c9036a20ca036a20cb036a20cc036a20cd036a20ce036a20cf036a20d0036a20d1036a20d2036a20d303" - "6a20d4036a20d5036a20" - "d6036a20d7036a20d8036a20d9036a20da036a20db036a20dc036a20dd036a20de036a20df036a20e0036a20e1036a" - "20e2036a20e3036a20e4" - "036a20e5036a20e6036a20e7036a20e8036a20e9036a20ea036a20eb036a20ec036a20ed036a20ee036a20ef036a20" - "f0036a20f1036a20f203" - "6a20f3036a20f4036a20f5036a20f6036a20f7036a20f8036a20f9036a20fa036a20fb036a20fc036a20fd036a20fe" - "036a20ff036a2080046a" - "2081046a2082046a2083046a2084046a2085046a2086046a2087046a2088046a2089046a208a046a208b046a208c04" - "6a208d046a208e046a20" - "8f046a2090046a2091046a2092046a2093046a2094046a2095046a2096046a2097046a2098046a2099046a209a046a" - "209b046a209c046a209d" - "046a209e046a209f046a20a0046a20a1046a20a2046a20a3046a20a4046a20a5046a20a6046a20a7046a20a8046a20" - "a9046a20aa046a20ab04" - "6a20ac046a20ad046a20ae046a20af046a20b0046a20b1046a20b2046a20b3046a20b4046a20b5046a20b6046a20b7" - "046a20b8046a20b9046a" - "20ba046a20bb046a20bc046a20bd046a20be046a20bf046a20c0046a20c1046a20c2046a20c3046a20c4046a20c504" - "6a20c6046a20c7046a20" - "c8046a20c9046a20ca046a20cb046a20cc046a20cd046a20ce046a20cf046a20d0046a20d1046a20d2046a20d3046a" - "20d4046a20d5046a20d6" - "046a20d7046a20d8046a20d9046a20da046a20db046a20dc046a20dd046a20de046a20df046a20e0046a20e1046a20" - "e2046a20e3046a20e404" - "6a20e5046a20e6046a20e7046a20e8046a20e9046a20ea046a20eb046a20ec046a20ed046a20ee046a20ef046a20f0" - "046a20f1046a20f2046a" - "20f3046a20f4046a20f5046a20f6046a20f7046a20f8046a20f9046a20fa046a20fb046a20fc046a20fd046a20fe04" - "6a20ff046a2080056a20" - "81056a2082056a2083056a2084056a2085056a2086056a2087056a2088056a2089056a208a056a208b056a208c056a" - "208d056a208e056a208f" - "056a2090056a2091056a2092056a2093056a2094056a2095056a2096056a2097056a2098056a2099056a209a056a20" - "9b056a209c056a209d05" - "6a209e056a209f056a20a0056a20a1056a20a2056a20a3056a20a4056a20a5056a20a6056a20a7056a20a8056a20a9" - "056a20aa056a20ab056a" - "20ac056a20ad056a20ae056a20af056a20b0056a20b1056a20b2056a20b3056a20b4056a20b5056a20b6056a20b705" - "6a20b8056a20b9056a20" - "ba056a20bb056a20bc056a20bd056a20be056a20bf056a20c0056a20c1056a20c2056a20c3056a20c4056a20c5056a" - "20c6056a20c7056a20c8" - "056a20c9056a20ca056a20cb056a20cc056a20cd056a20ce056a20cf056a20d0056a20d1056a20d2056a20d3056a20" - "d4056a20d5056a20d605" - "6a20d7056a20d8056a20d9056a20da056a20db056a20dc056a20dd056a20de056a20df056a20e0056a20e1056a20e2" - "056a20e3056a20e4056a" - "20e5056a20e6056a20e7056a20e8056a20e9056a20ea056a20eb056a20ec056a20ed056a20ee056a20ef056a20f005" - "6a20f1056a20f2056a20" - "f3056a20f4056a20f5056a20f6056a20f7056a20f8056a20f9056a20fa056a20fb056a20fc056a20fd056a20fe056a" - "20ff056a2080066a2081" - "066a2082066a2083066a2084066a2085066a2086066a2087066a2088066a2089066a208a066a208b066a208c066a20" - "8d066a208e066a208f06" - "6a2090066a2091066a2092066a2093066a2094066a2095066a2096066a2097066a2098066a2099066a209a066a209b" - "066a209c066a209d066a" - "209e066a209f066a20a0066a20a1066a20a2066a20a3066a20a4066a20a5066a20a6066a20a7066a20a8066a20a906" - "6a20aa066a20ab066a20" - "ac066a20ad066a20ae066a20af066a20b0066a20b1066a20b2066a20b3066a20b4066a20b5066a20b6066a20b7066a" - "20b8066a20b9066a20ba" - "066a20bb066a20bc066a20bd066a20be066a20bf066a20c0066a20c1066a20c2066a20c3066a20c4066a20c5066a20" - "c6066a20c7066a20c806" - "6a20c9066a20ca066a20cb066a20cc066a20cd066a20ce066a20cf066a20d0066a20d1066a20d2066a20d3066a20d4" - "066a20d5066a20d6066a" - "20d7066a20d8066a20d9066a20da066a20db066a20dc066a20dd066a20de066a20df066a20e0066a20e1066a20e206" - "6a20e3066a20e4066a20" - "e5066a20e6066a20e7066a20e8066a20e9066a20ea066a20eb066a20ec066a20ed066a20ee066a20ef066a20f0066a" - "20f1066a20f2066a20f3" - "066a20f4066a20f5066a20f6066a20f7066a20f8066a20f9066a20fa066a20fb066a20fc066a20fd066a20fe066a20" - "ff066a2080076a208107" - "6a2082076a2083076a2084076a2085076a2086076a2087076a2088076a2089076a208a076a208b076a208c076a208d" - "076a208e076a208f076a" - "2090076a2091076a2092076a2093076a2094076a2095076a2096076a2097076a2098076a2099076a209a076a209b07" - "6a209c076a209d076a20" - "9e076a209f076a20a0076a20a1076a20a2076a20a3076a20a4076a20a5076a20a6076a20a7076a20a8076a20a9076a" - "20aa076a20ab076a20ac" - "076a20ad076a20ae076a20af076a20b0076a20b1076a20b2076a20b3076a20b4076a20b5076a20b6076a20b7076a20" - "b8076a20b9076a20ba07" - "6a20bb076a20bc076a20bd076a20be076a20bf076a20c0076a20c1076a20c2076a20c3076a20c4076a20c5076a20c6" - "076a20c7076a20c8076a" - "20c9076a20ca076a20cb076a20cc076a20cd076a20ce076a20cf076a20d0076a20d1076a20d2076a20d3076a20d407" - "6a20d5076a20d6076a20" - "d7076a20d8076a20d9076a20da076a20db076a20dc076a20dd076a20de076a20df076a20e0076a20e1076a20e2076a" - "20e3076a20e4076a20e5" - "076a20e6076a20e7076a0b007f0970726f647563657273010c70726f6365737365642d62790105636c616e675f3139" - "2e312e352d776173692d" - "73646b202868747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a656374206162346235" - "61326462353832393538" - "616631656533303861373930636664623432626432343732302900490f7461726765745f6665617475726573042b0f" - "6d757461626c652d676c" - "6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; + "036a208d036a208e036a208f036a2090036a2091036a2092036a2093036a2094036a2095036a2096036a2097036a20" + "98036a2099036a209a036a209b036a209c036a209d036a209e036a209f036a20a0036a20a1036a20a2036a20a3036a" + "20a4036a20a5036a20a6036a20a7036a20a8036a20a9036a20aa036a20ab036a20ac036a20ad036a20ae036a20af03" + "6a20b0036a20b1036a20b2036a20b3036a20b4036a20b5036a20b6036a20b7036a20b8036a20b9036a20ba036a20bb" + "036a20bc036a20bd036a20be036a20bf036a20c0036a20c1036a20c2036a20c3036a20c4036a20c5036a20c6036a20" + "c7036a20c8036a20c9036a20ca036a20cb036a20cc036a20cd036a20ce036a20cf036a20d0036a20d1036a20d2036a" + "20d3036a20d4036a20d5036a20d6036a20d7036a20d8036a20d9036a20da036a20db036a20dc036a20dd036a20de03" + "6a20df036a20e0036a20e1036a20e2036a20e3036a20e4036a20e5036a20e6036a20e7036a20e8036a20e9036a20ea" + "036a20eb036a20ec036a20ed036a20ee036a20ef036a20f0036a20f1036a20f2036a20f3036a20f4036a20f5036a20" + "f6036a20f7036a20f8036a20f9036a20fa036a20fb036a20fc036a20fd036a20fe036a20ff036a2080046a2081046a" + "2082046a2083046a2084046a2085046a2086046a2087046a2088046a2089046a208a046a208b046a208c046a208d04" + "6a208e046a208f046a2090046a2091046a2092046a2093046a2094046a2095046a2096046a2097046a2098046a2099" + "046a209a046a209b046a209c046a209d046a209e046a209f046a20a0046a20a1046a20a2046a20a3046a20a4046a20" + "a5046a20a6046a20a7046a20a8046a20a9046a20aa046a20ab046a20ac046a20ad046a20ae046a20af046a20b0046a" + "20b1046a20b2046a20b3046a20b4046a20b5046a20b6046a20b7046a20b8046a20b9046a20ba046a20bb046a20bc04" + "6a20bd046a20be046a20bf046a20c0046a20c1046a20c2046a20c3046a20c4046a20c5046a20c6046a20c7046a20c8" + "046a20c9046a20ca046a20cb046a20cc046a20cd046a20ce046a20cf046a20d0046a20d1046a20d2046a20d3046a20" + "d4046a20d5046a20d6046a20d7046a20d8046a20d9046a20da046a20db046a20dc046a20dd046a20de046a20df046a" + "20e0046a20e1046a20e2046a20e3046a20e4046a20e5046a20e6046a20e7046a20e8046a20e9046a20ea046a20eb04" + "6a20ec046a20ed046a20ee046a20ef046a20f0046a20f1046a20f2046a20f3046a20f4046a20f5046a20f6046a20f7" + "046a20f8046a20f9046a20fa046a20fb046a20fc046a20fd046a20fe046a20ff046a2080056a2081056a2082056a20" + "83056a2084056a2085056a2086056a2087056a2088056a2089056a208a056a208b056a208c056a208d056a208e056a" + "208f056a2090056a2091056a2092056a2093056a2094056a2095056a2096056a2097056a2098056a2099056a209a05" + "6a209b056a209c056a209d056a209e056a209f056a20a0056a20a1056a20a2056a20a3056a20a4056a20a5056a20a6" + "056a20a7056a20a8056a20a9056a20aa056a20ab056a20ac056a20ad056a20ae056a20af056a20b0056a20b1056a20" + "b2056a20b3056a20b4056a20b5056a20b6056a20b7056a20b8056a20b9056a20ba056a20bb056a20bc056a20bd056a" + "20be056a20bf056a20c0056a20c1056a20c2056a20c3056a20c4056a20c5056a20c6056a20c7056a20c8056a20c905" + "6a20ca056a20cb056a20cc056a20cd056a20ce056a20cf056a20d0056a20d1056a20d2056a20d3056a20d4056a20d5" + "056a20d6056a20d7056a20d8056a20d9056a20da056a20db056a20dc056a20dd056a20de056a20df056a20e0056a20" + "e1056a20e2056a20e3056a20e4056a20e5056a20e6056a20e7056a20e8056a20e9056a20ea056a20eb056a20ec056a" + "20ed056a20ee056a20ef056a20f0056a20f1056a20f2056a20f3056a20f4056a20f5056a20f6056a20f7056a20f805" + "6a20f9056a20fa056a20fb056a20fc056a20fd056a20fe056a20ff056a2080066a2081066a2082066a2083066a2084" + "066a2085066a2086066a2087066a2088066a2089066a208a066a208b066a208c066a208d066a208e066a208f066a20" + "90066a2091066a2092066a2093066a2094066a2095066a2096066a2097066a2098066a2099066a209a066a209b066a" + "209c066a209d066a209e066a209f066a20a0066a20a1066a20a2066a20a3066a20a4066a20a5066a20a6066a20a706" + "6a20a8066a20a9066a20aa066a20ab066a20ac066a20ad066a20ae066a20af066a20b0066a20b1066a20b2066a20b3" + "066a20b4066a20b5066a20b6066a20b7066a20b8066a20b9066a20ba066a20bb066a20bc066a20bd066a20be066a20" + "bf066a20c0066a20c1066a20c2066a20c3066a20c4066a20c5066a20c6066a20c7066a20c8066a20c9066a20ca066a" + "20cb066a20cc066a20cd066a20ce066a20cf066a20d0066a20d1066a20d2066a20d3066a20d4066a20d5066a20d606" + "6a20d7066a20d8066a20d9066a20da066a20db066a20dc066a20dd066a20de066a20df066a20e0066a20e1066a20e2" + "066a20e3066a20e4066a20e5066a20e6066a20e7066a20e8066a20e9066a20ea066a20eb066a20ec066a20ed066a20" + "ee066a20ef066a20f0066a20f1066a20f2066a20f3066a20f4066a20f5066a20f6066a20f7066a20f8066a20f9066a" + "20fa066a20fb066a20fc066a20fd066a20fe066a20ff066a2080076a2081076a2082076a2083076a2084076a208507" + "6a2086076a2087076a2088076a2089076a208a076a208b076a208c076a208d076a208e076a208f076a2090076a2091" + "076a2092076a2093076a2094076a2095076a2096076a2097076a2098076a2099076a209a076a209b076a209c076a20" + "9d076a209e076a209f076a20a0076a20a1076a20a2076a20a3076a20a4076a20a5076a20a6076a20a7076a20a8076a" + "20a9076a20aa076a20ab076a20ac076a20ad076a20ae076a20af076a20b0076a20b1076a20b2076a20b3076a20b407" + "6a20b5076a20b6076a20b7076a20b8076a20b9076a20ba076a20bb076a20bc076a20bd076a20be076a20bf076a20c0" + "076a20c1076a20c2076a20c3076a20c4076a20c5076a20c6076a20c7076a20c8076a20c9076a20ca076a20cb076a20" + "cc076a20cd076a20ce076a20cf076a20d0076a20d1076a20d2076a20d3076a20d4076a20d5076a20d6076a20d7076a" + "20d8076a20d9076a20da076a20db076a20dc076a20dd076a20de076a20df076a20e0076a20e1076a20e2076a20e307" + "6a20e4076a20e5076a20e6076a20e7076a0b007f0970726f647563657273010c70726f6365737365642d6279010563" + "6c616e675f31392e312e352d776173692d73646b202868747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c" + "6c766d2d70726f6a656374206162346235613264623538323935386166316565333038613739306366646234326264" + "32343732302900490f7461726765745f6665617475726573042b0f6d757461626c652d676c6f62616c732b08736967" + "6e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; extern std::string const thousand1ParamsHex = "0061736d0100000001f2070260000060e9077f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f017f0303020001" - "05030100020638097f004180080b7f004180080b7f004180080b7f00418088040b7f004180080b7f00418088040b7f" - "00418080080b7f004100" - "0b7f0041010b07a8010c066d656d6f72790200115f5f7761736d5f63616c6c5f63746f72730000047465737400010c" - "5f5f64736f5f68616e64" - "6c6503000a5f5f646174615f656e6403010b5f5f737461636b5f6c6f7703020c5f5f737461636b5f6869676803030d" - "5f5f676c6f62616c5f62" - "61736503040b5f5f686561705f6261736503050a5f5f686561705f656e6403060d5f5f6d656d6f72795f6261736503" - "070c5f5f7461626c655f" - "6261736503080aab1e0202000ba51e00200020016a20026a20036a20046a20056a20066a20076a20086a20096a200a" - "6a200b6a200c6a200d6a" - "200e6a200f6a20106a20116a20126a20136a20146a20156a20166a20176a20186a20196a201a6a201b6a201c6a201d" - "6a201e6a201f6a20206a" - "20216a20226a20236a20246a20256a20266a20276a20286a20296a202a6a202b6a202c6a202d6a202e6a202f6a2030" - "6a20316a20326a20336a" - "20346a20356a20366a20376a20386a20396a203a6a203b6a203c6a203d6a203e6a203f6a20406a20416a20426a2043" - "6a20446a20456a20466a" - "20476a20486a20496a204a6a204b6a204c6a204d6a204e6a204f6a20506a20516a20526a20536a20546a20556a2056" - "6a20576a20586a20596a" - "205a6a205b6a205c6a205d6a205e6a205f6a20606a20616a20626a20636a20646a20656a20666a20676a20686a2069" - "6a206a6a206b6a206c6a" - "206d6a206e6a206f6a20706a20716a20726a20736a20746a20756a20766a20776a20786a20796a207a6a207b6a207c" - "6a207d6a207e6a207f6a" - "2080016a2081016a2082016a2083016a2084016a2085016a2086016a2087016a2088016a2089016a208a016a208b01" - "6a208c016a208d016a20" - "8e016a208f016a2090016a2091016a2092016a2093016a2094016a2095016a2096016a2097016a2098016a2099016a" - "209a016a209b016a209c" - "016a209d016a209e016a209f016a20a0016a20a1016a20a2016a20a3016a20a4016a20a5016a20a6016a20a7016a20" - "a8016a20a9016a20aa01" - "6a20ab016a20ac016a20ad016a20ae016a20af016a20b0016a20b1016a20b2016a20b3016a20b4016a20b5016a20b6" - "016a20b7016a20b8016a" - "20b9016a20ba016a20bb016a20bc016a20bd016a20be016a20bf016a20c0016a20c1016a20c2016a20c3016a20c401" - "6a20c5016a20c6016a20" - "c7016a20c8016a20c9016a20ca016a20cb016a20cc016a20cd016a20ce016a20cf016a20d0016a20d1016a20d2016a" - "20d3016a20d4016a20d5" - "016a20d6016a20d7016a20d8016a20d9016a20da016a20db016a20dc016a20dd016a20de016a20df016a20e0016a20" - "e1016a20e2016a20e301" - "6a20e4016a20e5016a20e6016a20e7016a20e8016a20e9016a20ea016a20eb016a20ec016a20ed016a20ee016a20ef" - "016a20f0016a20f1016a" - "20f2016a20f3016a20f4016a20f5016a20f6016a20f7016a20f8016a20f9016a20fa016a20fb016a20fc016a20fd01" - "6a20fe016a20ff016a20" - "80026a2081026a2082026a2083026a2084026a2085026a2086026a2087026a2088026a2089026a208a026a208b026a" - "208c026a208d026a208e" - "026a208f026a2090026a2091026a2092026a2093026a2094026a2095026a2096026a2097026a2098026a2099026a20" - "9a026a209b026a209c02" - "6a209d026a209e026a209f026a20a0026a20a1026a20a2026a20a3026a20a4026a20a5026a20a6026a20a7026a20a8" - "026a20a9026a20aa026a" - "20ab026a20ac026a20ad026a20ae026a20af026a20b0026a20b1026a20b2026a20b3026a20b4026a20b5026a20b602" - "6a20b7026a20b8026a20" - "b9026a20ba026a20bb026a20bc026a20bd026a20be026a20bf026a20c0026a20c1026a20c2026a20c3026a20c4026a" - "20c5026a20c6026a20c7" - "026a20c8026a20c9026a20ca026a20cb026a20cc026a20cd026a20ce026a20cf026a20d0026a20d1026a20d2026a20" - "d3026a20d4026a20d502" - "6a20d6026a20d7026a20d8026a20d9026a20da026a20db026a20dc026a20dd026a20de026a20df026a20e0026a20e1" - "026a20e2026a20e3026a" - "20e4026a20e5026a20e6026a20e7026a20e8026a20e9026a20ea026a20eb026a20ec026a20ed026a20ee026a20ef02" - "6a20f0026a20f1026a20" - "f2026a20f3026a20f4026a20f5026a20f6026a20f7026a20f8026a20f9026a20fa026a20fb026a20fc026a20fd026a" - "20fe026a20ff026a2080" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f017f03030200010503010002063809" + "7f004180080b7f004180080b7f004180080b7f00418088040b7f004180080b7f00418088040b7f00418080080b7f00" + "41000b7f0041010b07a8010c066d656d6f72790200115f5f7761736d5f63616c6c5f63746f72730000047465737400" + "010c5f5f64736f5f68616e646c6503000a5f5f646174615f656e6403010b5f5f737461636b5f6c6f7703020c5f5f73" + "7461636b5f6869676803030d5f5f676c6f62616c5f6261736503040b5f5f686561705f6261736503050a5f5f686561" + "705f656e6403060d5f5f6d656d6f72795f6261736503070c5f5f7461626c655f6261736503080aab1e0202000ba51e" + "00200020016a20026a20036a20046a20056a20066a20076a20086a20096a200a6a200b6a200c6a200d6a200e6a200f" + "6a20106a20116a20126a20136a20146a20156a20166a20176a20186a20196a201a6a201b6a201c6a201d6a201e6a20" + "1f6a20206a20216a20226a20236a20246a20256a20266a20276a20286a20296a202a6a202b6a202c6a202d6a202e6a" + "202f6a20306a20316a20326a20336a20346a20356a20366a20376a20386a20396a203a6a203b6a203c6a203d6a203e" + "6a203f6a20406a20416a20426a20436a20446a20456a20466a20476a20486a20496a204a6a204b6a204c6a204d6a20" + "4e6a204f6a20506a20516a20526a20536a20546a20556a20566a20576a20586a20596a205a6a205b6a205c6a205d6a" + "205e6a205f6a20606a20616a20626a20636a20646a20656a20666a20676a20686a20696a206a6a206b6a206c6a206d" + "6a206e6a206f6a20706a20716a20726a20736a20746a20756a20766a20776a20786a20796a207a6a207b6a207c6a20" + "7d6a207e6a207f6a2080016a2081016a2082016a2083016a2084016a2085016a2086016a2087016a2088016a208901" + "6a208a016a208b016a208c016a208d016a208e016a208f016a2090016a2091016a2092016a2093016a2094016a2095" + "016a2096016a2097016a2098016a2099016a209a016a209b016a209c016a209d016a209e016a209f016a20a0016a20" + "a1016a20a2016a20a3016a20a4016a20a5016a20a6016a20a7016a20a8016a20a9016a20aa016a20ab016a20ac016a" + "20ad016a20ae016a20af016a20b0016a20b1016a20b2016a20b3016a20b4016a20b5016a20b6016a20b7016a20b801" + "6a20b9016a20ba016a20bb016a20bc016a20bd016a20be016a20bf016a20c0016a20c1016a20c2016a20c3016a20c4" + "016a20c5016a20c6016a20c7016a20c8016a20c9016a20ca016a20cb016a20cc016a20cd016a20ce016a20cf016a20" + "d0016a20d1016a20d2016a20d3016a20d4016a20d5016a20d6016a20d7016a20d8016a20d9016a20da016a20db016a" + "20dc016a20dd016a20de016a20df016a20e0016a20e1016a20e2016a20e3016a20e4016a20e5016a20e6016a20e701" + "6a20e8016a20e9016a20ea016a20eb016a20ec016a20ed016a20ee016a20ef016a20f0016a20f1016a20f2016a20f3" + "016a20f4016a20f5016a20f6016a20f7016a20f8016a20f9016a20fa016a20fb016a20fc016a20fd016a20fe016a20" + "ff016a2080026a2081026a2082026a2083026a2084026a2085026a2086026a2087026a2088026a2089026a208a026a" + "208b026a208c026a208d026a208e026a208f026a2090026a2091026a2092026a2093026a2094026a2095026a209602" + "6a2097026a2098026a2099026a209a026a209b026a209c026a209d026a209e026a209f026a20a0026a20a1026a20a2" + "026a20a3026a20a4026a20a5026a20a6026a20a7026a20a8026a20a9026a20aa026a20ab026a20ac026a20ad026a20" + "ae026a20af026a20b0026a20b1026a20b2026a20b3026a20b4026a20b5026a20b6026a20b7026a20b8026a20b9026a" + "20ba026a20bb026a20bc026a20bd026a20be026a20bf026a20c0026a20c1026a20c2026a20c3026a20c4026a20c502" + "6a20c6026a20c7026a20c8026a20c9026a20ca026a20cb026a20cc026a20cd026a20ce026a20cf026a20d0026a20d1" + "026a20d2026a20d3026a20d4026a20d5026a20d6026a20d7026a20d8026a20d9026a20da026a20db026a20dc026a20" + "dd026a20de026a20df026a20e0026a20e1026a20e2026a20e3026a20e4026a20e5026a20e6026a20e7026a20e8026a" + "20e9026a20ea026a20eb026a20ec026a20ed026a20ee026a20ef026a20f0026a20f1026a20f2026a20f3026a20f402" + "6a20f5026a20f6026a20f7026a20f8026a20f9026a20fa026a20fb026a20fc026a20fd026a20fe026a20ff026a2080" "036a2081036a2082036a2083036a2084036a2085036a2086036a2087036a2088036a2089036a208a036a208b036a20" - "8c036a208d036a208e03" - "6a208f036a2090036a2091036a2092036a2093036a2094036a2095036a2096036a2097036a2098036a2099036a209a" - "036a209b036a209c036a" - "209d036a209e036a209f036a20a0036a20a1036a20a2036a20a3036a20a4036a20a5036a20a6036a20a7036a20a803" - "6a20a9036a20aa036a20" - "ab036a20ac036a20ad036a20ae036a20af036a20b0036a20b1036a20b2036a20b3036a20b4036a20b5036a20b6036a" - "20b7036a20b8036a20b9" - "036a20ba036a20bb036a20bc036a20bd036a20be036a20bf036a20c0036a20c1036a20c2036a20c3036a20c4036a20" - "c5036a20c6036a20c703" - "6a20c8036a20c9036a20ca036a20cb036a20cc036a20cd036a20ce036a20cf036a20d0036a20d1036a20d2036a20d3" - "036a20d4036a20d5036a" - "20d6036a20d7036a20d8036a20d9036a20da036a20db036a20dc036a20dd036a20de036a20df036a20e0036a20e103" - "6a20e2036a20e3036a20" - "e4036a20e5036a20e6036a20e7036a20e8036a20e9036a20ea036a20eb036a20ec036a20ed036a20ee036a20ef036a" - "20f0036a20f1036a20f2" - "036a20f3036a20f4036a20f5036a20f6036a20f7036a20f8036a20f9036a20fa036a20fb036a20fc036a20fd036a20" - "fe036a20ff036a208004" - "6a2081046a2082046a2083046a2084046a2085046a2086046a2087046a2088046a2089046a208a046a208b046a208c" - "046a208d046a208e046a" - "208f046a2090046a2091046a2092046a2093046a2094046a2095046a2096046a2097046a2098046a2099046a209a04" - "6a209b046a209c046a20" - "9d046a209e046a209f046a20a0046a20a1046a20a2046a20a3046a20a4046a20a5046a20a6046a20a7046a20a8046a" - "20a9046a20aa046a20ab" - "046a20ac046a20ad046a20ae046a20af046a20b0046a20b1046a20b2046a20b3046a20b4046a20b5046a20b6046a20" - "b7046a20b8046a20b904" - "6a20ba046a20bb046a20bc046a20bd046a20be046a20bf046a20c0046a20c1046a20c2046a20c3046a20c4046a20c5" - "046a20c6046a20c7046a" - "20c8046a20c9046a20ca046a20cb046a20cc046a20cd046a20ce046a20cf046a20d0046a20d1046a20d2046a20d304" - "6a20d4046a20d5046a20" - "d6046a20d7046a20d8046a20d9046a20da046a20db046a20dc046a20dd046a20de046a20df046a20e0046a20e1046a" - "20e2046a20e3046a20e4" - "046a20e5046a20e6046a20e7046a20e8046a20e9046a20ea046a20eb046a20ec046a20ed046a20ee046a20ef046a20" - "f0046a20f1046a20f204" - "6a20f3046a20f4046a20f5046a20f6046a20f7046a20f8046a20f9046a20fa046a20fb046a20fc046a20fd046a20fe" - "046a20ff046a2080056a" - "2081056a2082056a2083056a2084056a2085056a2086056a2087056a2088056a2089056a208a056a208b056a208c05" - "6a208d056a208e056a20" - "8f056a2090056a2091056a2092056a2093056a2094056a2095056a2096056a2097056a2098056a2099056a209a056a" - "209b056a209c056a209d" - "056a209e056a209f056a20a0056a20a1056a20a2056a20a3056a20a4056a20a5056a20a6056a20a7056a20a8056a20" - "a9056a20aa056a20ab05" - "6a20ac056a20ad056a20ae056a20af056a20b0056a20b1056a20b2056a20b3056a20b4056a20b5056a20b6056a20b7" - "056a20b8056a20b9056a" - "20ba056a20bb056a20bc056a20bd056a20be056a20bf056a20c0056a20c1056a20c2056a20c3056a20c4056a20c505" - "6a20c6056a20c7056a20" - "c8056a20c9056a20ca056a20cb056a20cc056a20cd056a20ce056a20cf056a20d0056a20d1056a20d2056a20d3056a" - "20d4056a20d5056a20d6" - "056a20d7056a20d8056a20d9056a20da056a20db056a20dc056a20dd056a20de056a20df056a20e0056a20e1056a20" - "e2056a20e3056a20e405" - "6a20e5056a20e6056a20e7056a20e8056a20e9056a20ea056a20eb056a20ec056a20ed056a20ee056a20ef056a20f0" - "056a20f1056a20f2056a" - "20f3056a20f4056a20f5056a20f6056a20f7056a20f8056a20f9056a20fa056a20fb056a20fc056a20fd056a20fe05" - "6a20ff056a2080066a20" - "81066a2082066a2083066a2084066a2085066a2086066a2087066a2088066a2089066a208a066a208b066a208c066a" - "208d066a208e066a208f" - "066a2090066a2091066a2092066a2093066a2094066a2095066a2096066a2097066a2098066a2099066a209a066a20" - "9b066a209c066a209d06" - "6a209e066a209f066a20a0066a20a1066a20a2066a20a3066a20a4066a20a5066a20a6066a20a7066a20a8066a20a9" - "066a20aa066a20ab066a" - "20ac066a20ad066a20ae066a20af066a20b0066a20b1066a20b2066a20b3066a20b4066a20b5066a20b6066a20b706" - "6a20b8066a20b9066a20" - "ba066a20bb066a20bc066a20bd066a20be066a20bf066a20c0066a20c1066a20c2066a20c3066a20c4066a20c5066a" - "20c6066a20c7066a20c8" - "066a20c9066a20ca066a20cb066a20cc066a20cd066a20ce066a20cf066a20d0066a20d1066a20d2066a20d3066a20" - "d4066a20d5066a20d606" - "6a20d7066a20d8066a20d9066a20da066a20db066a20dc066a20dd066a20de066a20df066a20e0066a20e1066a20e2" - "066a20e3066a20e4066a" - "20e5066a20e6066a20e7066a20e8066a20e9066a20ea066a20eb066a20ec066a20ed066a20ee066a20ef066a20f006" - "6a20f1066a20f2066a20" - "f3066a20f4066a20f5066a20f6066a20f7066a20f8066a20f9066a20fa066a20fb066a20fc066a20fd066a20fe066a" - "20ff066a2080076a2081" - "076a2082076a2083076a2084076a2085076a2086076a2087076a2088076a2089076a208a076a208b076a208c076a20" - "8d076a208e076a208f07" - "6a2090076a2091076a2092076a2093076a2094076a2095076a2096076a2097076a2098076a2099076a209a076a209b" - "076a209c076a209d076a" - "209e076a209f076a20a0076a20a1076a20a2076a20a3076a20a4076a20a5076a20a6076a20a7076a20a8076a20a907" - "6a20aa076a20ab076a20" - "ac076a20ad076a20ae076a20af076a20b0076a20b1076a20b2076a20b3076a20b4076a20b5076a20b6076a20b7076a" - "20b8076a20b9076a20ba" - "076a20bb076a20bc076a20bd076a20be076a20bf076a20c0076a20c1076a20c2076a20c3076a20c4076a20c5076a20" - "c6076a20c7076a20c807" - "6a20c9076a20ca076a20cb076a20cc076a20cd076a20ce076a20cf076a20d0076a20d1076a20d2076a20d3076a20d4" - "076a20d5076a20d6076a" - "20d7076a20d8076a20d9076a20da076a20db076a20dc076a20dd076a20de076a20df076a20e0076a20e1076a20e207" - "6a20e3076a20e4076a20" - "e5076a20e6076a20e7076a20e8076a0b007f0970726f647563657273010c70726f6365737365642d62790105636c61" - "6e675f31392e312e352d" - "776173692d73646b202868747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a65637420" - "61623462356132646235" - "3832393538616631656533303861373930636664623432626432343732302900490f7461726765745f666561747572" - "6573042b0f6d75746162" - "6c652d676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c" - "7565"; + "8c036a208d036a208e036a208f036a2090036a2091036a2092036a2093036a2094036a2095036a2096036a2097036a" + "2098036a2099036a209a036a209b036a209c036a209d036a209e036a209f036a20a0036a20a1036a20a2036a20a303" + "6a20a4036a20a5036a20a6036a20a7036a20a8036a20a9036a20aa036a20ab036a20ac036a20ad036a20ae036a20af" + "036a20b0036a20b1036a20b2036a20b3036a20b4036a20b5036a20b6036a20b7036a20b8036a20b9036a20ba036a20" + "bb036a20bc036a20bd036a20be036a20bf036a20c0036a20c1036a20c2036a20c3036a20c4036a20c5036a20c6036a" + "20c7036a20c8036a20c9036a20ca036a20cb036a20cc036a20cd036a20ce036a20cf036a20d0036a20d1036a20d203" + "6a20d3036a20d4036a20d5036a20d6036a20d7036a20d8036a20d9036a20da036a20db036a20dc036a20dd036a20de" + "036a20df036a20e0036a20e1036a20e2036a20e3036a20e4036a20e5036a20e6036a20e7036a20e8036a20e9036a20" + "ea036a20eb036a20ec036a20ed036a20ee036a20ef036a20f0036a20f1036a20f2036a20f3036a20f4036a20f5036a" + "20f6036a20f7036a20f8036a20f9036a20fa036a20fb036a20fc036a20fd036a20fe036a20ff036a2080046a208104" + "6a2082046a2083046a2084046a2085046a2086046a2087046a2088046a2089046a208a046a208b046a208c046a208d" + "046a208e046a208f046a2090046a2091046a2092046a2093046a2094046a2095046a2096046a2097046a2098046a20" + "99046a209a046a209b046a209c046a209d046a209e046a209f046a20a0046a20a1046a20a2046a20a3046a20a4046a" + "20a5046a20a6046a20a7046a20a8046a20a9046a20aa046a20ab046a20ac046a20ad046a20ae046a20af046a20b004" + "6a20b1046a20b2046a20b3046a20b4046a20b5046a20b6046a20b7046a20b8046a20b9046a20ba046a20bb046a20bc" + "046a20bd046a20be046a20bf046a20c0046a20c1046a20c2046a20c3046a20c4046a20c5046a20c6046a20c7046a20" + "c8046a20c9046a20ca046a20cb046a20cc046a20cd046a20ce046a20cf046a20d0046a20d1046a20d2046a20d3046a" + "20d4046a20d5046a20d6046a20d7046a20d8046a20d9046a20da046a20db046a20dc046a20dd046a20de046a20df04" + "6a20e0046a20e1046a20e2046a20e3046a20e4046a20e5046a20e6046a20e7046a20e8046a20e9046a20ea046a20eb" + "046a20ec046a20ed046a20ee046a20ef046a20f0046a20f1046a20f2046a20f3046a20f4046a20f5046a20f6046a20" + "f7046a20f8046a20f9046a20fa046a20fb046a20fc046a20fd046a20fe046a20ff046a2080056a2081056a2082056a" + "2083056a2084056a2085056a2086056a2087056a2088056a2089056a208a056a208b056a208c056a208d056a208e05" + "6a208f056a2090056a2091056a2092056a2093056a2094056a2095056a2096056a2097056a2098056a2099056a209a" + "056a209b056a209c056a209d056a209e056a209f056a20a0056a20a1056a20a2056a20a3056a20a4056a20a5056a20" + "a6056a20a7056a20a8056a20a9056a20aa056a20ab056a20ac056a20ad056a20ae056a20af056a20b0056a20b1056a" + "20b2056a20b3056a20b4056a20b5056a20b6056a20b7056a20b8056a20b9056a20ba056a20bb056a20bc056a20bd05" + "6a20be056a20bf056a20c0056a20c1056a20c2056a20c3056a20c4056a20c5056a20c6056a20c7056a20c8056a20c9" + "056a20ca056a20cb056a20cc056a20cd056a20ce056a20cf056a20d0056a20d1056a20d2056a20d3056a20d4056a20" + "d5056a20d6056a20d7056a20d8056a20d9056a20da056a20db056a20dc056a20dd056a20de056a20df056a20e0056a" + "20e1056a20e2056a20e3056a20e4056a20e5056a20e6056a20e7056a20e8056a20e9056a20ea056a20eb056a20ec05" + "6a20ed056a20ee056a20ef056a20f0056a20f1056a20f2056a20f3056a20f4056a20f5056a20f6056a20f7056a20f8" + "056a20f9056a20fa056a20fb056a20fc056a20fd056a20fe056a20ff056a2080066a2081066a2082066a2083066a20" + "84066a2085066a2086066a2087066a2088066a2089066a208a066a208b066a208c066a208d066a208e066a208f066a" + "2090066a2091066a2092066a2093066a2094066a2095066a2096066a2097066a2098066a2099066a209a066a209b06" + "6a209c066a209d066a209e066a209f066a20a0066a20a1066a20a2066a20a3066a20a4066a20a5066a20a6066a20a7" + "066a20a8066a20a9066a20aa066a20ab066a20ac066a20ad066a20ae066a20af066a20b0066a20b1066a20b2066a20" + "b3066a20b4066a20b5066a20b6066a20b7066a20b8066a20b9066a20ba066a20bb066a20bc066a20bd066a20be066a" + "20bf066a20c0066a20c1066a20c2066a20c3066a20c4066a20c5066a20c6066a20c7066a20c8066a20c9066a20ca06" + "6a20cb066a20cc066a20cd066a20ce066a20cf066a20d0066a20d1066a20d2066a20d3066a20d4066a20d5066a20d6" + "066a20d7066a20d8066a20d9066a20da066a20db066a20dc066a20dd066a20de066a20df066a20e0066a20e1066a20" + "e2066a20e3066a20e4066a20e5066a20e6066a20e7066a20e8066a20e9066a20ea066a20eb066a20ec066a20ed066a" + "20ee066a20ef066a20f0066a20f1066a20f2066a20f3066a20f4066a20f5066a20f6066a20f7066a20f8066a20f906" + "6a20fa066a20fb066a20fc066a20fd066a20fe066a20ff066a2080076a2081076a2082076a2083076a2084076a2085" + "076a2086076a2087076a2088076a2089076a208a076a208b076a208c076a208d076a208e076a208f076a2090076a20" + "91076a2092076a2093076a2094076a2095076a2096076a2097076a2098076a2099076a209a076a209b076a209c076a" + "209d076a209e076a209f076a20a0076a20a1076a20a2076a20a3076a20a4076a20a5076a20a6076a20a7076a20a807" + "6a20a9076a20aa076a20ab076a20ac076a20ad076a20ae076a20af076a20b0076a20b1076a20b2076a20b3076a20b4" + "076a20b5076a20b6076a20b7076a20b8076a20b9076a20ba076a20bb076a20bc076a20bd076a20be076a20bf076a20" + "c0076a20c1076a20c2076a20c3076a20c4076a20c5076a20c6076a20c7076a20c8076a20c9076a20ca076a20cb076a" + "20cc076a20cd076a20ce076a20cf076a20d0076a20d1076a20d2076a20d3076a20d4076a20d5076a20d6076a20d707" + "6a20d8076a20d9076a20da076a20db076a20dc076a20dd076a20de076a20df076a20e0076a20e1076a20e2076a20e3" + "076a20e4076a20e5076a20e6076a20e7076a20e8076a0b007f0970726f647563657273010c70726f6365737365642d" + "62790105636c616e675f31392e312e352d776173692d73646b202868747470733a2f2f6769746875622e636f6d2f6c" + "6c766d2f6c6c766d2d70726f6a65637420616234623561326462353832393538616631656533303861373930636664" + "623432626432343732302900490f7461726765745f6665617475726573042b0f6d757461626c652d676c6f62616c73" + "2b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; extern std::string const locals10kHex = "0061736d0100000001070160027f7f017f03020100070801047465737400000a9b8a0601978a06018e4e7f20002001" - "6a2102200120026a2103" - "200220036a2104200320046a2105200420056a2106200520066a2107200620076a2108200720086a2109200820096a" - "210a2009200a6a210b20" - "0a200b6a210c200b200c6a210d200c200d6a210e200d200e6a210f200e200f6a2110200f20106a2111201020116a21" - "12201120126a21132012" - "20136a2114201320146a2115201420156a2116201520166a2117201620176a2118201720186a2119201820196a211a" - "2019201a6a211b201a20" - "1b6a211c201b201c6a211d201c201d6a211e201d201e6a211f201e201f6a2120201f20206a2121202020216a212220" - "2120226a212320222023" - "6a2124202320246a2125202420256a2126202520266a2127202620276a2128202720286a2129202820296a212a2029" - "202a6a212b202a202b6a" - "212c202b202c6a212d202c202d6a212e202d202e6a212f202e202f6a2130202f20306a2131203020316a2132203120" - "326a2133203220336a21" - "34203320346a2135203420356a2136203520366a2137203620376a2138203720386a2139203820396a213a2039203a" - "6a213b203a203b6a213c" - "203b203c6a213d203c203d6a213e203d203e6a213f203e203f6a2140203f20406a2141204020416a2142204120426a" - "2143204220436a214420" - "4320446a2145204420456a2146204520466a2147204620476a2148204720486a2149204820496a214a2049204a6a21" - "4b204a204b6a214c204b" - "204c6a214d204c204d6a214e204d204e6a214f204e204f6a2150204f20506a2151205020516a2152205120526a2153" - "205220536a2154205320" - "546a2155205420556a2156205520566a2157205620576a2158205720586a2159205820596a215a2059205a6a215b20" - "5a205b6a215c205b205c" - "6a215d205c205d6a215e205d205e6a215f205e205f6a2160205f20606a2161206020616a2162206120626a21632062" - "20636a2164206320646a" - "2165206420656a2166206520666a2167206620676a2168206720686a2169206820696a216a2069206a6a216b206a20" - "6b6a216c206b206c6a21" - "6d206c206d6a216e206d206e6a216f206e206f6a2170206f20706a2171207020716a2172207120726a217320722073" - "6a2174207320746a2175" - "207420756a2176207520766a2177207620776a2178207720786a2179207820796a217a2079207a6a217b207a207b6a" - "217c207b207c6a217d20" - "7c207d6a217e207d207e6a217f207e207f6a218001207f2080016a2181012080012081016a2182012081012082016a" - "2183012082012083016a" - "2184012083012084016a2185012084012085016a2186012085012086016a2187012086012087016a21880120870120" - "88016a21890120880120" - "89016a218a01208901208a016a218b01208a01208b016a218c01208b01208c016a218d01208c01208d016a218e0120" - "8d01208e016a218f0120" - "8e01208f016a219001208f012090016a2191012090012091016a2192012091012092016a2193012092012093016a21" - "94012093012094016a21" - "95012094012095016a2196012095012096016a2197012096012097016a2198012097012098016a2199012098012099" - "016a219a01209901209a" - "016a219b01209a01209b016a219c01209b01209c016a219d01209c01209d016a219e01209d01209e016a219f01209e" - "01209f016a21a001209f" - "0120a0016a21a10120a00120a1016a21a20120a10120a2016a21a30120a20120a3016a21a40120a30120a4016a21a5" - "0120a40120a5016a21a6" - "0120a50120a6016a21a70120a60120a7016a21a80120a70120a8016a21a90120a80120a9016a21aa0120a90120aa01" - "6a21ab0120aa0120ab01" - "6a21ac0120ab0120ac016a21ad0120ac0120ad016a21ae0120ad0120ae016a21af0120ae0120af016a21b00120af01" - "20b0016a21b10120b001" - "20b1016a21b20120b10120b2016a21b30120b20120b3016a21b40120b30120b4016a21b50120b40120b5016a21b601" - "20b50120b6016a21b701" - "20b60120b7016a21b80120b70120b8016a21b90120b80120b9016a21ba0120b90120ba016a21bb0120ba0120bb016a" - "21bc0120bb0120bc016a" - "21bd0120bc0120bd016a21be0120bd0120be016a21bf0120be0120bf016a21c00120bf0120c0016a21c10120c00120" - "c1016a21c20120c10120" - "c2016a21c30120c20120c3016a21c40120c30120c4016a21c50120c40120c5016a21c60120c50120c6016a21c70120" - "c60120c7016a21c80120" - "c70120c8016a21c90120c80120c9016a21ca0120c90120ca016a21cb0120ca0120cb016a21cc0120cb0120cc016a21" - "cd0120cc0120cd016a21" - "ce0120cd0120ce016a21cf0120ce0120cf016a21d00120cf0120d0016a21d10120d00120d1016a21d20120d10120d2" - "016a21d30120d20120d3" - "016a21d40120d30120d4016a21d50120d40120d5016a21d60120d50120d6016a21d70120d60120d7016a21d80120d7" - "0120d8016a21d90120d8" - "0120d9016a21da0120d90120da016a21db0120da0120db016a21dc0120db0120dc016a21dd0120dc0120dd016a21de" - "0120dd0120de016a21df" - "0120de0120df016a21e00120df0120e0016a21e10120e00120e1016a21e20120e10120e2016a21e30120e20120e301" - "6a21e40120e30120e401" - "6a21e50120e40120e5016a21e60120e50120e6016a21e70120e60120e7016a21e80120e70120e8016a21e90120e801" - "20e9016a21ea0120e901" - "20ea016a21eb0120ea0120eb016a21ec0120eb0120ec016a21ed0120ec0120ed016a21ee0120ed0120ee016a21ef01" - "20ee0120ef016a21f001" - "20ef0120f0016a21f10120f00120f1016a21f20120f10120f2016a21f30120f20120f3016a21f40120f30120f4016a" - "21f50120f40120f5016a" - "21f60120f50120f6016a21f70120f60120f7016a21f80120f70120f8016a21f90120f80120f9016a21fa0120f90120" - "fa016a21fb0120fa0120" - "fb016a21fc0120fb0120fc016a21fd0120fc0120fd016a21fe0120fd0120fe016a21ff0120fe0120ff016a21800220" - "ff012080026a21810220" - "80022081026a2182022081022082026a2183022082022083026a2184022083022084026a2185022084022085026a21" - "86022085022086026a21" - "87022086022087026a2188022087022088026a2189022088022089026a218a02208902208a026a218b02208a02208b" - "026a218c02208b02208c" - "026a218d02208c02208d026a218e02208d02208e026a218f02208e02208f026a219002208f022090026a2191022090" - "022091026a2192022091" - "022092026a2193022092022093026a2194022093022094026a2195022094022095026a2196022095022096026a2197" - "022096022097026a2198" - "022097022098026a2199022098022099026a219a02209902209a026a219b02209a02209b026a219c02209b02209c02" - "6a219d02209c02209d02" - "6a219e02209d02209e026a219f02209e02209f026a21a002209f0220a0026a21a10220a00220a1026a21a20220a102" - "20a2026a21a30220a202" - "20a3026a21a40220a30220a4026a21a50220a40220a5026a21a60220a50220a6026a21a70220a60220a7026a21a802" - "20a70220a8026a21a902" - "20a80220a9026a21aa0220a90220aa026a21ab0220aa0220ab026a21ac0220ab0220ac026a21ad0220ac0220ad026a" - "21ae0220ad0220ae026a" + "6a2102200120026a2103200220036a2104200320046a2105200420056a2106200520066a2107200620076a21082007" + "20086a2109200820096a210a2009200a6a210b200a200b6a210c200b200c6a210d200c200d6a210e200d200e6a210f" + "200e200f6a2110200f20106a2111201020116a2112201120126a2113201220136a2114201320146a2115201420156a" + "2116201520166a2117201620176a2118201720186a2119201820196a211a2019201a6a211b201a201b6a211c201b20" + "1c6a211d201c201d6a211e201d201e6a211f201e201f6a2120201f20206a2121202020216a2122202120226a212320" + "2220236a2124202320246a2125202420256a2126202520266a2127202620276a2128202720286a2129202820296a21" + "2a2029202a6a212b202a202b6a212c202b202c6a212d202c202d6a212e202d202e6a212f202e202f6a2130202f2030" + "6a2131203020316a2132203120326a2133203220336a2134203320346a2135203420356a2136203520366a21372036" + "20376a2138203720386a2139203820396a213a2039203a6a213b203a203b6a213c203b203c6a213d203c203d6a213e" + "203d203e6a213f203e203f6a2140203f20406a2141204020416a2142204120426a2143204220436a2144204320446a" + "2145204420456a2146204520466a2147204620476a2148204720486a2149204820496a214a2049204a6a214b204a20" + "4b6a214c204b204c6a214d204c204d6a214e204d204e6a214f204e204f6a2150204f20506a2151205020516a215220" + "5120526a2153205220536a2154205320546a2155205420556a2156205520566a2157205620576a2158205720586a21" + "59205820596a215a2059205a6a215b205a205b6a215c205b205c6a215d205c205d6a215e205d205e6a215f205e205f" + "6a2160205f20606a2161206020616a2162206120626a2163206220636a2164206320646a2165206420656a21662065" + "20666a2167206620676a2168206720686a2169206820696a216a2069206a6a216b206a206b6a216c206b206c6a216d" + "206c206d6a216e206d206e6a216f206e206f6a2170206f20706a2171207020716a2172207120726a2173207220736a" + "2174207320746a2175207420756a2176207520766a2177207620776a2178207720786a2179207820796a217a207920" + "7a6a217b207a207b6a217c207b207c6a217d207c207d6a217e207d207e6a217f207e207f6a218001207f2080016a21" + "81012080012081016a2182012081012082016a2183012082012083016a2184012083012084016a2185012084012085" + "016a2186012085012086016a2187012086012087016a2188012087012088016a2189012088012089016a218a012089" + "01208a016a218b01208a01208b016a218c01208b01208c016a218d01208c01208d016a218e01208d01208e016a218f" + "01208e01208f016a219001208f012090016a2191012090012091016a2192012091012092016a219301209201209301" + "6a2194012093012094016a2195012094012095016a2196012095012096016a2197012096012097016a219801209701" + "2098016a2199012098012099016a219a01209901209a016a219b01209a01209b016a219c01209b01209c016a219d01" + "209c01209d016a219e01209d01209e016a219f01209e01209f016a21a001209f0120a0016a21a10120a00120a1016a" + "21a20120a10120a2016a21a30120a20120a3016a21a40120a30120a4016a21a50120a40120a5016a21a60120a50120" + "a6016a21a70120a60120a7016a21a80120a70120a8016a21a90120a80120a9016a21aa0120a90120aa016a21ab0120" + "aa0120ab016a21ac0120ab0120ac016a21ad0120ac0120ad016a21ae0120ad0120ae016a21af0120ae0120af016a21" + "b00120af0120b0016a21b10120b00120b1016a21b20120b10120b2016a21b30120b20120b3016a21b40120b30120b4" + "016a21b50120b40120b5016a21b60120b50120b6016a21b70120b60120b7016a21b80120b70120b8016a21b90120b8" + "0120b9016a21ba0120b90120ba016a21bb0120ba0120bb016a21bc0120bb0120bc016a21bd0120bc0120bd016a21be" + "0120bd0120be016a21bf0120be0120bf016a21c00120bf0120c0016a21c10120c00120c1016a21c20120c10120c201" + "6a21c30120c20120c3016a21c40120c30120c4016a21c50120c40120c5016a21c60120c50120c6016a21c70120c601" + "20c7016a21c80120c70120c8016a21c90120c80120c9016a21ca0120c90120ca016a21cb0120ca0120cb016a21cc01" + "20cb0120cc016a21cd0120cc0120cd016a21ce0120cd0120ce016a21cf0120ce0120cf016a21d00120cf0120d0016a" + "21d10120d00120d1016a21d20120d10120d2016a21d30120d20120d3016a21d40120d30120d4016a21d50120d40120" + "d5016a21d60120d50120d6016a21d70120d60120d7016a21d80120d70120d8016a21d90120d80120d9016a21da0120" + "d90120da016a21db0120da0120db016a21dc0120db0120dc016a21dd0120dc0120dd016a21de0120dd0120de016a21" + "df0120de0120df016a21e00120df0120e0016a21e10120e00120e1016a21e20120e10120e2016a21e30120e20120e3" + "016a21e40120e30120e4016a21e50120e40120e5016a21e60120e50120e6016a21e70120e60120e7016a21e80120e7" + "0120e8016a21e90120e80120e9016a21ea0120e90120ea016a21eb0120ea0120eb016a21ec0120eb0120ec016a21ed" + "0120ec0120ed016a21ee0120ed0120ee016a21ef0120ee0120ef016a21f00120ef0120f0016a21f10120f00120f101" + "6a21f20120f10120f2016a21f30120f20120f3016a21f40120f30120f4016a21f50120f40120f5016a21f60120f501" + "20f6016a21f70120f60120f7016a21f80120f70120f8016a21f90120f80120f9016a21fa0120f90120fa016a21fb01" + "20fa0120fb016a21fc0120fb0120fc016a21fd0120fc0120fd016a21fe0120fd0120fe016a21ff0120fe0120ff016a" + "21800220ff012080026a2181022080022081026a2182022081022082026a2183022082022083026a21840220830220" + "84026a2185022084022085026a2186022085022086026a2187022086022087026a2188022087022088026a21890220" + "88022089026a218a02208902208a026a218b02208a02208b026a218c02208b02208c026a218d02208c02208d026a21" + "8e02208d02208e026a218f02208e02208f026a219002208f022090026a2191022090022091026a2192022091022092" + "026a2193022092022093026a2194022093022094026a2195022094022095026a2196022095022096026a2197022096" + "022097026a2198022097022098026a2199022098022099026a219a02209902209a026a219b02209a02209b026a219c" + "02209b02209c026a219d02209c02209d026a219e02209d02209e026a219f02209e02209f026a21a002209f0220a002" + "6a21a10220a00220a1026a21a20220a10220a2026a21a30220a20220a3026a21a40220a30220a4026a21a50220a402" + "20a5026a21a60220a50220a6026a21a70220a60220a7026a21a80220a70220a8026a21a90220a80220a9026a21aa02" + "20a90220aa026a21ab0220aa0220ab026a21ac0220ab0220ac026a21ad0220ac0220ad026a21ae0220ad0220ae026a" "21af0220ae0220af026a21b00220af0220b0026a21b10220b00220b1026a21b20220b10220b2026a21b30220b20220" - "b3026a21b40220b30220" - "b4026a21b50220b40220b5026a21b60220b50220b6026a21b70220b60220b7026a21b80220b70220b8026a21b90220" - "b80220b9026a21ba0220" - "b90220ba026a21bb0220ba0220bb026a21bc0220bb0220bc026a21bd0220bc0220bd026a21be0220bd0220be026a21" - "bf0220be0220bf026a21" - "c00220bf0220c0026a21c10220c00220c1026a21c20220c10220c2026a21c30220c20220c3026a21c40220c30220c4" - "026a21c50220c40220c5" - "026a21c60220c50220c6026a21c70220c60220c7026a21c80220c70220c8026a21c90220c80220c9026a21ca0220c9" - "0220ca026a21cb0220ca" - "0220cb026a21cc0220cb0220cc026a21cd0220cc0220cd026a21ce0220cd0220ce026a21cf0220ce0220cf026a21d0" - "0220cf0220d0026a21d1" - "0220d00220d1026a21d20220d10220d2026a21d30220d20220d3026a21d40220d30220d4026a21d50220d40220d502" - "6a21d60220d50220d602" - "6a21d70220d60220d7026a21d80220d70220d8026a21d90220d80220d9026a21da0220d90220da026a21db0220da02" - "20db026a21dc0220db02" - "20dc026a21dd0220dc0220dd026a21de0220dd0220de026a21df0220de0220df026a21e00220df0220e0026a21e102" - "20e00220e1026a21e202" - "20e10220e2026a21e30220e20220e3026a21e40220e30220e4026a21e50220e40220e5026a21e60220e50220e6026a" - "21e70220e60220e7026a" - "21e80220e70220e8026a21e90220e80220e9026a21ea0220e90220ea026a21eb0220ea0220eb026a21ec0220eb0220" - "ec026a21ed0220ec0220" - "ed026a21ee0220ed0220ee026a21ef0220ee0220ef026a21f00220ef0220f0026a21f10220f00220f1026a21f20220" - "f10220f2026a21f30220" - "f20220f3026a21f40220f30220f4026a21f50220f40220f5026a21f60220f50220f6026a21f70220f60220f7026a21" - "f80220f70220f8026a21" - "f90220f80220f9026a21fa0220f90220fa026a21fb0220fa0220fb026a21fc0220fb0220fc026a21fd0220fc0220fd" - "026a21fe0220fd0220fe" - "026a21ff0220fe0220ff026a21800320ff022080036a2181032080032081036a2182032081032082036a2183032082" - "032083036a2184032083" - "032084036a2185032084032085036a2186032085032086036a2187032086032087036a2188032087032088036a2189" - "032088032089036a218a" - "03208903208a036a218b03208a03208b036a218c03208b03208c036a218d03208c03208d036a218e03208d03208e03" - "6a218f03208e03208f03" - "6a219003208f032090036a2191032090032091036a2192032091032092036a2193032092032093036a219403209303" - "2094036a219503209403" - "2095036a2196032095032096036a2197032096032097036a2198032097032098036a2199032098032099036a219a03" - "209903209a036a219b03" - "209a03209b036a219c03209b03209c036a219d03209c03209d036a219e03209d03209e036a219f03209e03209f036a" - "21a003209f0320a0036a" - "21a10320a00320a1036a21a20320a10320a2036a21a30320a20320a3036a21a40320a30320a4036a21a50320a40320" - "a5036a21a60320a50320" - "a6036a21a70320a60320a7036a21a80320a70320a8036a21a90320a80320a9036a21aa0320a90320aa036a21ab0320" - "aa0320ab036a21ac0320" - "ab0320ac036a21ad0320ac0320ad036a21ae0320ad0320ae036a21af0320ae0320af036a21b00320af0320b0036a21" - "b10320b00320b1036a21" - "b20320b10320b2036a21b30320b20320b3036a21b40320b30320b4036a21b50320b40320b5036a21b60320b50320b6" - "036a21b70320b60320b7" - "036a21b80320b70320b8036a21b90320b80320b9036a21ba0320b90320ba036a21bb0320ba0320bb036a21bc0320bb" - "0320bc036a21bd0320bc" - "0320bd036a21be0320bd0320be036a21bf0320be0320bf036a21c00320bf0320c0036a21c10320c00320c1036a21c2" - "0320c10320c2036a21c3" - "0320c20320c3036a21c40320c30320c4036a21c50320c40320c5036a21c60320c50320c6036a21c70320c60320c703" - "6a21c80320c70320c803" - "6a21c90320c80320c9036a21ca0320c90320ca036a21cb0320ca0320cb036a21cc0320cb0320cc036a21cd0320cc03" - "20cd036a21ce0320cd03" - "20ce036a21cf0320ce0320cf036a21d00320cf0320d0036a21d10320d00320d1036a21d20320d10320d2036a21d303" - "20d20320d3036a21d403" - "20d30320d4036a21d50320d40320d5036a21d60320d50320d6036a21d70320d60320d7036a21d80320d70320d8036a" - "21d90320d80320d9036a" - "21da0320d90320da036a21db0320da0320db036a21dc0320db0320dc036a21dd0320dc0320dd036a21de0320dd0320" - "de036a21df0320de0320" - "df036a21e00320df0320e0036a21e10320e00320e1036a21e20320e10320e2036a21e30320e20320e3036a21e40320" - "e30320e4036a21e50320" - "e40320e5036a21e60320e50320e6036a21e70320e60320e7036a21e80320e70320e8036a21e90320e80320e9036a21" - "ea0320e90320ea036a21" - "eb0320ea0320eb036a21ec0320eb0320ec036a21ed0320ec0320ed036a21ee0320ed0320ee036a21ef0320ee0320ef" - "036a21f00320ef0320f0" - "036a21f10320f00320f1036a21f20320f10320f2036a21f30320f20320f3036a21f40320f30320f4036a21f50320f4" - "0320f5036a21f60320f5" - "0320f6036a21f70320f60320f7036a21f80320f70320f8036a21f90320f80320f9036a21fa0320f90320fa036a21fb" - "0320fa0320fb036a21fc" - "0320fb0320fc036a21fd0320fc0320fd036a21fe0320fd0320fe036a21ff0320fe0320ff036a21800420ff03208004" - "6a218104208004208104" - "6a2182042081042082046a2183042082042083046a2184042083042084046a2185042084042085046a218604208504" - "2086046a218704208604" - "2087046a2188042087042088046a2189042088042089046a218a04208904208a046a218b04208a04208b046a218c04" - "208b04208c046a218d04" - "208c04208d046a218e04208d04208e046a218f04208e04208f046a219004208f042090046a2191042090042091046a" - "2192042091042092046a" - "2193042092042093046a2194042093042094046a2195042094042095046a2196042095042096046a21970420960420" - "97046a21980420970420" - "98046a2199042098042099046a219a04209904209a046a219b04209a04209b046a219c04209b04209c046a219d0420" - "9c04209d046a219e0420" - "9d04209e046a219f04209e04209f046a21a004209f0420a0046a21a10420a00420a1046a21a20420a10420a2046a21" - "a30420a20420a3046a21" - "a40420a30420a4046a21a50420a40420a5046a21a60420a50420a6046a21a70420a60420a7046a21a80420a70420a8" - "046a21a90420a80420a9" - "046a21aa0420a90420aa046a21ab0420aa0420ab046a21ac0420ab0420ac046a21ad0420ac0420ad046a21ae0420ad" - "0420ae046a21af0420ae" - "0420af046a21b00420af0420b0046a21b10420b00420b1046a21b20420b10420b2046a21b30420b20420b3046a21b4" - "0420b30420b4046a21b5" - "0420b40420b5046a21b60420b50420b6046a21b70420b60420b7046a21b80420b70420b8046a21b90420b80420b904" - "6a21ba0420b90420ba04" + "b3026a21b40220b30220b4026a21b50220b40220b5026a21b60220b50220b6026a21b70220b60220b7026a21b80220" + "b70220b8026a21b90220b80220b9026a21ba0220b90220ba026a21bb0220ba0220bb026a21bc0220bb0220bc026a21" + "bd0220bc0220bd026a21be0220bd0220be026a21bf0220be0220bf026a21c00220bf0220c0026a21c10220c00220c1" + "026a21c20220c10220c2026a21c30220c20220c3026a21c40220c30220c4026a21c50220c40220c5026a21c60220c5" + "0220c6026a21c70220c60220c7026a21c80220c70220c8026a21c90220c80220c9026a21ca0220c90220ca026a21cb" + "0220ca0220cb026a21cc0220cb0220cc026a21cd0220cc0220cd026a21ce0220cd0220ce026a21cf0220ce0220cf02" + "6a21d00220cf0220d0026a21d10220d00220d1026a21d20220d10220d2026a21d30220d20220d3026a21d40220d302" + "20d4026a21d50220d40220d5026a21d60220d50220d6026a21d70220d60220d7026a21d80220d70220d8026a21d902" + "20d80220d9026a21da0220d90220da026a21db0220da0220db026a21dc0220db0220dc026a21dd0220dc0220dd026a" + "21de0220dd0220de026a21df0220de0220df026a21e00220df0220e0026a21e10220e00220e1026a21e20220e10220" + "e2026a21e30220e20220e3026a21e40220e30220e4026a21e50220e40220e5026a21e60220e50220e6026a21e70220" + "e60220e7026a21e80220e70220e8026a21e90220e80220e9026a21ea0220e90220ea026a21eb0220ea0220eb026a21" + "ec0220eb0220ec026a21ed0220ec0220ed026a21ee0220ed0220ee026a21ef0220ee0220ef026a21f00220ef0220f0" + "026a21f10220f00220f1026a21f20220f10220f2026a21f30220f20220f3026a21f40220f30220f4026a21f50220f4" + "0220f5026a21f60220f50220f6026a21f70220f60220f7026a21f80220f70220f8026a21f90220f80220f9026a21fa" + "0220f90220fa026a21fb0220fa0220fb026a21fc0220fb0220fc026a21fd0220fc0220fd026a21fe0220fd0220fe02" + "6a21ff0220fe0220ff026a21800320ff022080036a2181032080032081036a2182032081032082036a218303208203" + "2083036a2184032083032084036a2185032084032085036a2186032085032086036a2187032086032087036a218803" + "2087032088036a2189032088032089036a218a03208903208a036a218b03208a03208b036a218c03208b03208c036a" + "218d03208c03208d036a218e03208d03208e036a218f03208e03208f036a219003208f032090036a21910320900320" + "91036a2192032091032092036a2193032092032093036a2194032093032094036a2195032094032095036a21960320" + "95032096036a2197032096032097036a2198032097032098036a2199032098032099036a219a03209903209a036a21" + "9b03209a03209b036a219c03209b03209c036a219d03209c03209d036a219e03209d03209e036a219f03209e03209f" + "036a21a003209f0320a0036a21a10320a00320a1036a21a20320a10320a2036a21a30320a20320a3036a21a40320a3" + "0320a4036a21a50320a40320a5036a21a60320a50320a6036a21a70320a60320a7036a21a80320a70320a8036a21a9" + "0320a80320a9036a21aa0320a90320aa036a21ab0320aa0320ab036a21ac0320ab0320ac036a21ad0320ac0320ad03" + "6a21ae0320ad0320ae036a21af0320ae0320af036a21b00320af0320b0036a21b10320b00320b1036a21b20320b103" + "20b2036a21b30320b20320b3036a21b40320b30320b4036a21b50320b40320b5036a21b60320b50320b6036a21b703" + "20b60320b7036a21b80320b70320b8036a21b90320b80320b9036a21ba0320b90320ba036a21bb0320ba0320bb036a" + "21bc0320bb0320bc036a21bd0320bc0320bd036a21be0320bd0320be036a21bf0320be0320bf036a21c00320bf0320" + "c0036a21c10320c00320c1036a21c20320c10320c2036a21c30320c20320c3036a21c40320c30320c4036a21c50320" + "c40320c5036a21c60320c50320c6036a21c70320c60320c7036a21c80320c70320c8036a21c90320c80320c9036a21" + "ca0320c90320ca036a21cb0320ca0320cb036a21cc0320cb0320cc036a21cd0320cc0320cd036a21ce0320cd0320ce" + "036a21cf0320ce0320cf036a21d00320cf0320d0036a21d10320d00320d1036a21d20320d10320d2036a21d30320d2" + "0320d3036a21d40320d30320d4036a21d50320d40320d5036a21d60320d50320d6036a21d70320d60320d7036a21d8" + "0320d70320d8036a21d90320d80320d9036a21da0320d90320da036a21db0320da0320db036a21dc0320db0320dc03" + "6a21dd0320dc0320dd036a21de0320dd0320de036a21df0320de0320df036a21e00320df0320e0036a21e10320e003" + "20e1036a21e20320e10320e2036a21e30320e20320e3036a21e40320e30320e4036a21e50320e40320e5036a21e603" + "20e50320e6036a21e70320e60320e7036a21e80320e70320e8036a21e90320e80320e9036a21ea0320e90320ea036a" + "21eb0320ea0320eb036a21ec0320eb0320ec036a21ed0320ec0320ed036a21ee0320ed0320ee036a21ef0320ee0320" + "ef036a21f00320ef0320f0036a21f10320f00320f1036a21f20320f10320f2036a21f30320f20320f3036a21f40320" + "f30320f4036a21f50320f40320f5036a21f60320f50320f6036a21f70320f60320f7036a21f80320f70320f8036a21" + "f90320f80320f9036a21fa0320f90320fa036a21fb0320fa0320fb036a21fc0320fb0320fc036a21fd0320fc0320fd" + "036a21fe0320fd0320fe036a21ff0320fe0320ff036a21800420ff032080046a2181042080042081046a2182042081" + "042082046a2183042082042083046a2184042083042084046a2185042084042085046a2186042085042086046a2187" + "042086042087046a2188042087042088046a2189042088042089046a218a04208904208a046a218b04208a04208b04" + "6a218c04208b04208c046a218d04208c04208d046a218e04208d04208e046a218f04208e04208f046a219004208f04" + "2090046a2191042090042091046a2192042091042092046a2193042092042093046a2194042093042094046a219504" + "2094042095046a2196042095042096046a2197042096042097046a2198042097042098046a2199042098042099046a" + "219a04209904209a046a219b04209a04209b046a219c04209b04209c046a219d04209c04209d046a219e04209d0420" + "9e046a219f04209e04209f046a21a004209f0420a0046a21a10420a00420a1046a21a20420a10420a2046a21a30420" + "a20420a3046a21a40420a30420a4046a21a50420a40420a5046a21a60420a50420a6046a21a70420a60420a7046a21" + "a80420a70420a8046a21a90420a80420a9046a21aa0420a90420aa046a21ab0420aa0420ab046a21ac0420ab0420ac" + "046a21ad0420ac0420ad046a21ae0420ad0420ae046a21af0420ae0420af046a21b00420af0420b0046a21b10420b0" + "0420b1046a21b20420b10420b2046a21b30420b20420b3046a21b40420b30420b4046a21b50420b40420b5046a21b6" + "0420b50420b6046a21b70420b60420b7046a21b80420b70420b8046a21b90420b80420b9046a21ba0420b90420ba04" "6a21bb0420ba0420bb046a21bc0420bb0420bc046a21bd0420bc0420bd046a21be0420bd0420be046a21bf0420be04" - "20bf046a21c00420bf04" - "20c0046a21c10420c00420c1046a21c20420c10420c2046a21c30420c20420c3046a21c40420c30420c4046a21c504" - "20c40420c5046a21c604" - "20c50420c6046a21c70420c60420c7046a21c80420c70420c8046a21c90420c80420c9046a21ca0420c90420ca046a" - "21cb0420ca0420cb046a" - "21cc0420cb0420cc046a21cd0420cc0420cd046a21ce0420cd0420ce046a21cf0420ce0420cf046a21d00420cf0420" - "d0046a21d10420d00420" - "d1046a21d20420d10420d2046a21d30420d20420d3046a21d40420d30420d4046a21d50420d40420d5046a21d60420" - "d50420d6046a21d70420" - "d60420d7046a21d80420d70420d8046a21d90420d80420d9046a21da0420d90420da046a21db0420da0420db046a21" - "dc0420db0420dc046a21" - "dd0420dc0420dd046a21de0420dd0420de046a21df0420de0420df046a21e00420df0420e0046a21e10420e00420e1" - "046a21e20420e10420e2" - "046a21e30420e20420e3046a21e40420e30420e4046a21e50420e40420e5046a21e60420e50420e6046a21e70420e6" - "0420e7046a21e80420e7" - "0420e8046a21e90420e80420e9046a21ea0420e90420ea046a21eb0420ea0420eb046a21ec0420eb0420ec046a21ed" - "0420ec0420ed046a21ee" - "0420ed0420ee046a21ef0420ee0420ef046a21f00420ef0420f0046a21f10420f00420f1046a21f20420f10420f204" - "6a21f30420f20420f304" - "6a21f40420f30420f4046a21f50420f40420f5046a21f60420f50420f6046a21f70420f60420f7046a21f80420f704" - "20f8046a21f90420f804" - "20f9046a21fa0420f90420fa046a21fb0420fa0420fb046a21fc0420fb0420fc046a21fd0420fc0420fd046a21fe04" - "20fd0420fe046a21ff04" - "20fe0420ff046a21800520ff042080056a2181052080052081056a2182052081052082056a2183052082052083056a" - "2184052083052084056a" - "2185052084052085056a2186052085052086056a2187052086052087056a2188052087052088056a21890520880520" - "89056a218a0520890520" - "8a056a218b05208a05208b056a218c05208b05208c056a218d05208c05208d056a218e05208d05208e056a218f0520" - "8e05208f056a21900520" - "8f052090056a2191052090052091056a2192052091052092056a2193052092052093056a2194052093052094056a21" - "95052094052095056a21" - "96052095052096056a2197052096052097056a2198052097052098056a2199052098052099056a219a05209905209a" - "056a219b05209a05209b" - "056a219c05209b05209c056a219d05209c05209d056a219e05209d05209e056a219f05209e05209f056a21a005209f" - "0520a0056a21a10520a0" - "0520a1056a21a20520a10520a2056a21a30520a20520a3056a21a40520a30520a4056a21a50520a40520a5056a21a6" - "0520a50520a6056a21a7" - "0520a60520a7056a21a80520a70520a8056a21a90520a80520a9056a21aa0520a90520aa056a21ab0520aa0520ab05" - "6a21ac0520ab0520ac05" - "6a21ad0520ac0520ad056a21ae0520ad0520ae056a21af0520ae0520af056a21b00520af0520b0056a21b10520b005" - "20b1056a21b20520b105" - "20b2056a21b30520b20520b3056a21b40520b30520b4056a21b50520b40520b5056a21b60520b50520b6056a21b705" - "20b60520b7056a21b805" - "20b70520b8056a21b90520b80520b9056a21ba0520b90520ba056a21bb0520ba0520bb056a21bc0520bb0520bc056a" - "21bd0520bc0520bd056a" - "21be0520bd0520be056a21bf0520be0520bf056a21c00520bf0520c0056a21c10520c00520c1056a21c20520c10520" - "c2056a21c30520c20520" - "c3056a21c40520c30520c4056a21c50520c40520c5056a21c60520c50520c6056a21c70520c60520c7056a21c80520" - "c70520c8056a21c90520" - "c80520c9056a21ca0520c90520ca056a21cb0520ca0520cb056a21cc0520cb0520cc056a21cd0520cc0520cd056a21" - "ce0520cd0520ce056a21" - "cf0520ce0520cf056a21d00520cf0520d0056a21d10520d00520d1056a21d20520d10520d2056a21d30520d20520d3" - "056a21d40520d30520d4" - "056a21d50520d40520d5056a21d60520d50520d6056a21d70520d60520d7056a21d80520d70520d8056a21d90520d8" - "0520d9056a21da0520d9" - "0520da056a21db0520da0520db056a21dc0520db0520dc056a21dd0520dc0520dd056a21de0520dd0520de056a21df" - "0520de0520df056a21e0" - "0520df0520e0056a21e10520e00520e1056a21e20520e10520e2056a21e30520e20520e3056a21e40520e30520e405" - "6a21e50520e40520e505" - "6a21e60520e50520e6056a21e70520e60520e7056a21e80520e70520e8056a21e90520e80520e9056a21ea0520e905" - "20ea056a21eb0520ea05" - "20eb056a21ec0520eb0520ec056a21ed0520ec0520ed056a21ee0520ed0520ee056a21ef0520ee0520ef056a21f005" - "20ef0520f0056a21f105" - "20f00520f1056a21f20520f10520f2056a21f30520f20520f3056a21f40520f30520f4056a21f50520f40520f5056a" - "21f60520f50520f6056a" - "21f70520f60520f7056a21f80520f70520f8056a21f90520f80520f9056a21fa0520f90520fa056a21fb0520fa0520" - "fb056a21fc0520fb0520" - "fc056a21fd0520fc0520fd056a21fe0520fd0520fe056a21ff0520fe0520ff056a21800620ff052080066a21810620" - "80062081066a21820620" - "81062082066a2183062082062083066a2184062083062084066a2185062084062085066a2186062085062086066a21" - "87062086062087066a21" - "88062087062088066a2189062088062089066a218a06208906208a066a218b06208a06208b066a218c06208b06208c" - "066a218d06208c06208d" - "066a218e06208d06208e066a218f06208e06208f066a219006208f062090066a2191062090062091066a2192062091" - "062092066a2193062092" - "062093066a2194062093062094066a2195062094062095066a2196062095062096066a2197062096062097066a2198" - "062097062098066a2199" - "062098062099066a219a06209906209a066a219b06209a06209b066a219c06209b06209c066a219d06209c06209d06" - "6a219e06209d06209e06" - "6a219f06209e06209f066a21a006209f0620a0066a21a10620a00620a1066a21a20620a10620a2066a21a30620a206" - "20a3066a21a40620a306" - "20a4066a21a50620a40620a5066a21a60620a50620a6066a21a70620a60620a7066a21a80620a70620a8066a21a906" - "20a80620a9066a21aa06" - "20a90620aa066a21ab0620aa0620ab066a21ac0620ab0620ac066a21ad0620ac0620ad066a21ae0620ad0620ae066a" - "21af0620ae0620af066a" - "21b00620af0620b0066a21b10620b00620b1066a21b20620b10620b2066a21b30620b20620b3066a21b40620b30620" - "b4066a21b50620b40620" - "b5066a21b60620b50620b6066a21b70620b60620b7066a21b80620b70620b8066a21b90620b80620b9066a21ba0620" - "b90620ba066a21bb0620" - "ba0620bb066a21bc0620bb0620bc066a21bd0620bc0620bd066a21be0620bd0620be066a21bf0620be0620bf066a21" - "c00620bf0620c0066a21" - "c10620c00620c1066a21c20620c10620c2066a21c30620c20620c3066a21c40620c30620c4066a21c50620c40620c5" - "066a21c60620c50620c6" + "20bf046a21c00420bf0420c0046a21c10420c00420c1046a21c20420c10420c2046a21c30420c20420c3046a21c404" + "20c30420c4046a21c50420c40420c5046a21c60420c50420c6046a21c70420c60420c7046a21c80420c70420c8046a" + "21c90420c80420c9046a21ca0420c90420ca046a21cb0420ca0420cb046a21cc0420cb0420cc046a21cd0420cc0420" + "cd046a21ce0420cd0420ce046a21cf0420ce0420cf046a21d00420cf0420d0046a21d10420d00420d1046a21d20420" + "d10420d2046a21d30420d20420d3046a21d40420d30420d4046a21d50420d40420d5046a21d60420d50420d6046a21" + "d70420d60420d7046a21d80420d70420d8046a21d90420d80420d9046a21da0420d90420da046a21db0420da0420db" + "046a21dc0420db0420dc046a21dd0420dc0420dd046a21de0420dd0420de046a21df0420de0420df046a21e00420df" + "0420e0046a21e10420e00420e1046a21e20420e10420e2046a21e30420e20420e3046a21e40420e30420e4046a21e5" + "0420e40420e5046a21e60420e50420e6046a21e70420e60420e7046a21e80420e70420e8046a21e90420e80420e904" + "6a21ea0420e90420ea046a21eb0420ea0420eb046a21ec0420eb0420ec046a21ed0420ec0420ed046a21ee0420ed04" + "20ee046a21ef0420ee0420ef046a21f00420ef0420f0046a21f10420f00420f1046a21f20420f10420f2046a21f304" + "20f20420f3046a21f40420f30420f4046a21f50420f40420f5046a21f60420f50420f6046a21f70420f60420f7046a" + "21f80420f70420f8046a21f90420f80420f9046a21fa0420f90420fa046a21fb0420fa0420fb046a21fc0420fb0420" + "fc046a21fd0420fc0420fd046a21fe0420fd0420fe046a21ff0420fe0420ff046a21800520ff042080056a21810520" + "80052081056a2182052081052082056a2183052082052083056a2184052083052084056a2185052084052085056a21" + "86052085052086056a2187052086052087056a2188052087052088056a2189052088052089056a218a05208905208a" + "056a218b05208a05208b056a218c05208b05208c056a218d05208c05208d056a218e05208d05208e056a218f05208e" + "05208f056a219005208f052090056a2191052090052091056a2192052091052092056a2193052092052093056a2194" + "052093052094056a2195052094052095056a2196052095052096056a2197052096052097056a219805209705209805" + "6a2199052098052099056a219a05209905209a056a219b05209a05209b056a219c05209b05209c056a219d05209c05" + "209d056a219e05209d05209e056a219f05209e05209f056a21a005209f0520a0056a21a10520a00520a1056a21a205" + "20a10520a2056a21a30520a20520a3056a21a40520a30520a4056a21a50520a40520a5056a21a60520a50520a6056a" + "21a70520a60520a7056a21a80520a70520a8056a21a90520a80520a9056a21aa0520a90520aa056a21ab0520aa0520" + "ab056a21ac0520ab0520ac056a21ad0520ac0520ad056a21ae0520ad0520ae056a21af0520ae0520af056a21b00520" + "af0520b0056a21b10520b00520b1056a21b20520b10520b2056a21b30520b20520b3056a21b40520b30520b4056a21" + "b50520b40520b5056a21b60520b50520b6056a21b70520b60520b7056a21b80520b70520b8056a21b90520b80520b9" + "056a21ba0520b90520ba056a21bb0520ba0520bb056a21bc0520bb0520bc056a21bd0520bc0520bd056a21be0520bd" + "0520be056a21bf0520be0520bf056a21c00520bf0520c0056a21c10520c00520c1056a21c20520c10520c2056a21c3" + "0520c20520c3056a21c40520c30520c4056a21c50520c40520c5056a21c60520c50520c6056a21c70520c60520c705" + "6a21c80520c70520c8056a21c90520c80520c9056a21ca0520c90520ca056a21cb0520ca0520cb056a21cc0520cb05" + "20cc056a21cd0520cc0520cd056a21ce0520cd0520ce056a21cf0520ce0520cf056a21d00520cf0520d0056a21d105" + "20d00520d1056a21d20520d10520d2056a21d30520d20520d3056a21d40520d30520d4056a21d50520d40520d5056a" + "21d60520d50520d6056a21d70520d60520d7056a21d80520d70520d8056a21d90520d80520d9056a21da0520d90520" + "da056a21db0520da0520db056a21dc0520db0520dc056a21dd0520dc0520dd056a21de0520dd0520de056a21df0520" + "de0520df056a21e00520df0520e0056a21e10520e00520e1056a21e20520e10520e2056a21e30520e20520e3056a21" + "e40520e30520e4056a21e50520e40520e5056a21e60520e50520e6056a21e70520e60520e7056a21e80520e70520e8" + "056a21e90520e80520e9056a21ea0520e90520ea056a21eb0520ea0520eb056a21ec0520eb0520ec056a21ed0520ec" + "0520ed056a21ee0520ed0520ee056a21ef0520ee0520ef056a21f00520ef0520f0056a21f10520f00520f1056a21f2" + "0520f10520f2056a21f30520f20520f3056a21f40520f30520f4056a21f50520f40520f5056a21f60520f50520f605" + "6a21f70520f60520f7056a21f80520f70520f8056a21f90520f80520f9056a21fa0520f90520fa056a21fb0520fa05" + "20fb056a21fc0520fb0520fc056a21fd0520fc0520fd056a21fe0520fd0520fe056a21ff0520fe0520ff056a218006" + "20ff052080066a2181062080062081066a2182062081062082066a2183062082062083066a2184062083062084066a" + "2185062084062085066a2186062085062086066a2187062086062087066a2188062087062088066a21890620880620" + "89066a218a06208906208a066a218b06208a06208b066a218c06208b06208c066a218d06208c06208d066a218e0620" + "8d06208e066a218f06208e06208f066a219006208f062090066a2191062090062091066a2192062091062092066a21" + "93062092062093066a2194062093062094066a2195062094062095066a2196062095062096066a2197062096062097" + "066a2198062097062098066a2199062098062099066a219a06209906209a066a219b06209a06209b066a219c06209b" + "06209c066a219d06209c06209d066a219e06209d06209e066a219f06209e06209f066a21a006209f0620a0066a21a1" + "0620a00620a1066a21a20620a10620a2066a21a30620a20620a3066a21a40620a30620a4066a21a50620a40620a506" + "6a21a60620a50620a6066a21a70620a60620a7066a21a80620a70620a8066a21a90620a80620a9066a21aa0620a906" + "20aa066a21ab0620aa0620ab066a21ac0620ab0620ac066a21ad0620ac0620ad066a21ae0620ad0620ae066a21af06" + "20ae0620af066a21b00620af0620b0066a21b10620b00620b1066a21b20620b10620b2066a21b30620b20620b3066a" + "21b40620b30620b4066a21b50620b40620b5066a21b60620b50620b6066a21b70620b60620b7066a21b80620b70620" + "b8066a21b90620b80620b9066a21ba0620b90620ba066a21bb0620ba0620bb066a21bc0620bb0620bc066a21bd0620" + "bc0620bd066a21be0620bd0620be066a21bf0620be0620bf066a21c00620bf0620c0066a21c10620c00620c1066a21" + "c20620c10620c2066a21c30620c20620c3066a21c40620c30620c4066a21c50620c40620c5066a21c60620c50620c6" "066a21c70620c60620c7066a21c80620c70620c8066a21c90620c80620c9066a21ca0620c90620ca066a21cb0620ca" - "0620cb066a21cc0620cb" - "0620cc066a21cd0620cc0620cd066a21ce0620cd0620ce066a21cf0620ce0620cf066a21d00620cf0620d0066a21d1" - "0620d00620d1066a21d2" - "0620d10620d2066a21d30620d20620d3066a21d40620d30620d4066a21d50620d40620d5066a21d60620d50620d606" - "6a21d70620d60620d706" - "6a21d80620d70620d8066a21d90620d80620d9066a21da0620d90620da066a21db0620da0620db066a21dc0620db06" - "20dc066a21dd0620dc06" - "20dd066a21de0620dd0620de066a21df0620de0620df066a21e00620df0620e0066a21e10620e00620e1066a21e206" - "20e10620e2066a21e306" - "20e20620e3066a21e40620e30620e4066a21e50620e40620e5066a21e60620e50620e6066a21e70620e60620e7066a" - "21e80620e70620e8066a" - "21e90620e80620e9066a21ea0620e90620ea066a21eb0620ea0620eb066a21ec0620eb0620ec066a21ed0620ec0620" - "ed066a21ee0620ed0620" - "ee066a21ef0620ee0620ef066a21f00620ef0620f0066a21f10620f00620f1066a21f20620f10620f2066a21f30620" - "f20620f3066a21f40620" - "f30620f4066a21f50620f40620f5066a21f60620f50620f6066a21f70620f60620f7066a21f80620f70620f8066a21" - "f90620f80620f9066a21" - "fa0620f90620fa066a21fb0620fa0620fb066a21fc0620fb0620fc066a21fd0620fc0620fd066a21fe0620fd0620fe" - "066a21ff0620fe0620ff" - "066a21800720ff062080076a2181072080072081076a2182072081072082076a2183072082072083076a2184072083" - "072084076a2185072084" - "072085076a2186072085072086076a2187072086072087076a2188072087072088076a2189072088072089076a218a" - "07208907208a076a218b" - "07208a07208b076a218c07208b07208c076a218d07208c07208d076a218e07208d07208e076a218f07208e07208f07" - "6a219007208f07209007" - "6a2191072090072091076a2192072091072092076a2193072092072093076a2194072093072094076a219507209407" - "2095076a219607209507" - "2096076a2197072096072097076a2198072097072098076a2199072098072099076a219a07209907209a076a219b07" - "209a07209b076a219c07" - "209b07209c076a219d07209c07209d076a219e07209d07209e076a219f07209e07209f076a21a007209f0720a0076a" - "21a10720a00720a1076a" - "21a20720a10720a2076a21a30720a20720a3076a21a40720a30720a4076a21a50720a40720a5076a21a60720a50720" - "a6076a21a70720a60720" - "a7076a21a80720a70720a8076a21a90720a80720a9076a21aa0720a90720aa076a21ab0720aa0720ab076a21ac0720" - "ab0720ac076a21ad0720" - "ac0720ad076a21ae0720ad0720ae076a21af0720ae0720af076a21b00720af0720b0076a21b10720b00720b1076a21" - "b20720b10720b2076a21" - "b30720b20720b3076a21b40720b30720b4076a21b50720b40720b5076a21b60720b50720b6076a21b70720b60720b7" - "076a21b80720b70720b8" - "076a21b90720b80720b9076a21ba0720b90720ba076a21bb0720ba0720bb076a21bc0720bb0720bc076a21bd0720bc" - "0720bd076a21be0720bd" - "0720be076a21bf0720be0720bf076a21c00720bf0720c0076a21c10720c00720c1076a21c20720c10720c2076a21c3" - "0720c20720c3076a21c4" - "0720c30720c4076a21c50720c40720c5076a21c60720c50720c6076a21c70720c60720c7076a21c80720c70720c807" - "6a21c90720c80720c907" - "6a21ca0720c90720ca076a21cb0720ca0720cb076a21cc0720cb0720cc076a21cd0720cc0720cd076a21ce0720cd07" - "20ce076a21cf0720ce07" - "20cf076a21d00720cf0720d0076a21d10720d00720d1076a21d20720d10720d2076a21d30720d20720d3076a21d407" - "20d30720d4076a21d507" - "20d40720d5076a21d60720d50720d6076a21d70720d60720d7076a21d80720d70720d8076a21d90720d80720d9076a" - "21da0720d90720da076a" - "21db0720da0720db076a21dc0720db0720dc076a21dd0720dc0720dd076a21de0720dd0720de076a21df0720de0720" - "df076a21e00720df0720" - "e0076a21e10720e00720e1076a21e20720e10720e2076a21e30720e20720e3076a21e40720e30720e4076a21e50720" - "e40720e5076a21e60720" - "e50720e6076a21e70720e60720e7076a21e80720e70720e8076a21e90720e80720e9076a21ea0720e90720ea076a21" - "eb0720ea0720eb076a21" - "ec0720eb0720ec076a21ed0720ec0720ed076a21ee0720ed0720ee076a21ef0720ee0720ef076a21f00720ef0720f0" - "076a21f10720f00720f1" - "076a21f20720f10720f2076a21f30720f20720f3076a21f40720f30720f4076a21f50720f40720f5076a21f60720f5" - "0720f6076a21f70720f6" - "0720f7076a21f80720f70720f8076a21f90720f80720f9076a21fa0720f90720fa076a21fb0720fa0720fb076a21fc" - "0720fb0720fc076a21fd" - "0720fc0720fd076a21fe0720fd0720fe076a21ff0720fe0720ff076a21800820ff072080086a218108208008208108" - "6a218208208108208208" - "6a2183082082082083086a2184082083082084086a2185082084082085086a2186082085082086086a218708208608" - "2087086a218808208708" - "2088086a2189082088082089086a218a08208908208a086a218b08208a08208b086a218c08208b08208c086a218d08" - "208c08208d086a218e08" - "208d08208e086a218f08208e08208f086a219008208f082090086a2191082090082091086a2192082091082092086a" - "2193082092082093086a" - "2194082093082094086a2195082094082095086a2196082095082096086a2197082096082097086a21980820970820" - "98086a21990820980820" - "99086a219a08209908209a086a219b08209a08209b086a219c08209b08209c086a219d08209c08209d086a219e0820" - "9d08209e086a219f0820" - "9e08209f086a21a008209f0820a0086a21a10820a00820a1086a21a20820a10820a2086a21a30820a20820a3086a21" - "a40820a30820a4086a21" - "a50820a40820a5086a21a60820a50820a6086a21a70820a60820a7086a21a80820a70820a8086a21a90820a80820a9" - "086a21aa0820a90820aa" - "086a21ab0820aa0820ab086a21ac0820ab0820ac086a21ad0820ac0820ad086a21ae0820ad0820ae086a21af0820ae" - "0820af086a21b00820af" - "0820b0086a21b10820b00820b1086a21b20820b10820b2086a21b30820b20820b3086a21b40820b30820b4086a21b5" - "0820b40820b5086a21b6" - "0820b50820b6086a21b70820b60820b7086a21b80820b70820b8086a21b90820b80820b9086a21ba0820b90820ba08" - "6a21bb0820ba0820bb08" - "6a21bc0820bb0820bc086a21bd0820bc0820bd086a21be0820bd0820be086a21bf0820be0820bf086a21c00820bf08" - "20c0086a21c10820c008" - "20c1086a21c20820c10820c2086a21c30820c20820c3086a21c40820c30820c4086a21c50820c40820c5086a21c608" - "20c50820c6086a21c708" - "20c60820c7086a21c80820c70820c8086a21c90820c80820c9086a21ca0820c90820ca086a21cb0820ca0820cb086a" - "21cc0820cb0820cc086a" - "21cd0820cc0820cd086a21ce0820cd0820ce086a21cf0820ce0820cf086a21d00820cf0820d0086a21d10820d00820" - "d1086a21d20820d10820" + "0620cb066a21cc0620cb0620cc066a21cd0620cc0620cd066a21ce0620cd0620ce066a21cf0620ce0620cf066a21d0" + "0620cf0620d0066a21d10620d00620d1066a21d20620d10620d2066a21d30620d20620d3066a21d40620d30620d406" + "6a21d50620d40620d5066a21d60620d50620d6066a21d70620d60620d7066a21d80620d70620d8066a21d90620d806" + "20d9066a21da0620d90620da066a21db0620da0620db066a21dc0620db0620dc066a21dd0620dc0620dd066a21de06" + "20dd0620de066a21df0620de0620df066a21e00620df0620e0066a21e10620e00620e1066a21e20620e10620e2066a" + "21e30620e20620e3066a21e40620e30620e4066a21e50620e40620e5066a21e60620e50620e6066a21e70620e60620" + "e7066a21e80620e70620e8066a21e90620e80620e9066a21ea0620e90620ea066a21eb0620ea0620eb066a21ec0620" + "eb0620ec066a21ed0620ec0620ed066a21ee0620ed0620ee066a21ef0620ee0620ef066a21f00620ef0620f0066a21" + "f10620f00620f1066a21f20620f10620f2066a21f30620f20620f3066a21f40620f30620f4066a21f50620f40620f5" + "066a21f60620f50620f6066a21f70620f60620f7066a21f80620f70620f8066a21f90620f80620f9066a21fa0620f9" + "0620fa066a21fb0620fa0620fb066a21fc0620fb0620fc066a21fd0620fc0620fd066a21fe0620fd0620fe066a21ff" + "0620fe0620ff066a21800720ff062080076a2181072080072081076a2182072081072082076a218307208207208307" + "6a2184072083072084076a2185072084072085076a2186072085072086076a2187072086072087076a218807208707" + "2088076a2189072088072089076a218a07208907208a076a218b07208a07208b076a218c07208b07208c076a218d07" + "208c07208d076a218e07208d07208e076a218f07208e07208f076a219007208f072090076a2191072090072091076a" + "2192072091072092076a2193072092072093076a2194072093072094076a2195072094072095076a21960720950720" + "96076a2197072096072097076a2198072097072098076a2199072098072099076a219a07209907209a076a219b0720" + "9a07209b076a219c07209b07209c076a219d07209c07209d076a219e07209d07209e076a219f07209e07209f076a21" + "a007209f0720a0076a21a10720a00720a1076a21a20720a10720a2076a21a30720a20720a3076a21a40720a30720a4" + "076a21a50720a40720a5076a21a60720a50720a6076a21a70720a60720a7076a21a80720a70720a8076a21a90720a8" + "0720a9076a21aa0720a90720aa076a21ab0720aa0720ab076a21ac0720ab0720ac076a21ad0720ac0720ad076a21ae" + "0720ad0720ae076a21af0720ae0720af076a21b00720af0720b0076a21b10720b00720b1076a21b20720b10720b207" + "6a21b30720b20720b3076a21b40720b30720b4076a21b50720b40720b5076a21b60720b50720b6076a21b70720b607" + "20b7076a21b80720b70720b8076a21b90720b80720b9076a21ba0720b90720ba076a21bb0720ba0720bb076a21bc07" + "20bb0720bc076a21bd0720bc0720bd076a21be0720bd0720be076a21bf0720be0720bf076a21c00720bf0720c0076a" + "21c10720c00720c1076a21c20720c10720c2076a21c30720c20720c3076a21c40720c30720c4076a21c50720c40720" + "c5076a21c60720c50720c6076a21c70720c60720c7076a21c80720c70720c8076a21c90720c80720c9076a21ca0720" + "c90720ca076a21cb0720ca0720cb076a21cc0720cb0720cc076a21cd0720cc0720cd076a21ce0720cd0720ce076a21" + "cf0720ce0720cf076a21d00720cf0720d0076a21d10720d00720d1076a21d20720d10720d2076a21d30720d20720d3" + "076a21d40720d30720d4076a21d50720d40720d5076a21d60720d50720d6076a21d70720d60720d7076a21d80720d7" + "0720d8076a21d90720d80720d9076a21da0720d90720da076a21db0720da0720db076a21dc0720db0720dc076a21dd" + "0720dc0720dd076a21de0720dd0720de076a21df0720de0720df076a21e00720df0720e0076a21e10720e00720e107" + "6a21e20720e10720e2076a21e30720e20720e3076a21e40720e30720e4076a21e50720e40720e5076a21e60720e507" + "20e6076a21e70720e60720e7076a21e80720e70720e8076a21e90720e80720e9076a21ea0720e90720ea076a21eb07" + "20ea0720eb076a21ec0720eb0720ec076a21ed0720ec0720ed076a21ee0720ed0720ee076a21ef0720ee0720ef076a" + "21f00720ef0720f0076a21f10720f00720f1076a21f20720f10720f2076a21f30720f20720f3076a21f40720f30720" + "f4076a21f50720f40720f5076a21f60720f50720f6076a21f70720f60720f7076a21f80720f70720f8076a21f90720" + "f80720f9076a21fa0720f90720fa076a21fb0720fa0720fb076a21fc0720fb0720fc076a21fd0720fc0720fd076a21" + "fe0720fd0720fe076a21ff0720fe0720ff076a21800820ff072080086a2181082080082081086a2182082081082082" + "086a2183082082082083086a2184082083082084086a2185082084082085086a2186082085082086086a2187082086" + "082087086a2188082087082088086a2189082088082089086a218a08208908208a086a218b08208a08208b086a218c" + "08208b08208c086a218d08208c08208d086a218e08208d08208e086a218f08208e08208f086a219008208f08209008" + "6a2191082090082091086a2192082091082092086a2193082092082093086a2194082093082094086a219508209408" + "2095086a2196082095082096086a2197082096082097086a2198082097082098086a2199082098082099086a219a08" + "209908209a086a219b08209a08209b086a219c08209b08209c086a219d08209c08209d086a219e08209d08209e086a" + "219f08209e08209f086a21a008209f0820a0086a21a10820a00820a1086a21a20820a10820a2086a21a30820a20820" + "a3086a21a40820a30820a4086a21a50820a40820a5086a21a60820a50820a6086a21a70820a60820a7086a21a80820" + "a70820a8086a21a90820a80820a9086a21aa0820a90820aa086a21ab0820aa0820ab086a21ac0820ab0820ac086a21" + "ad0820ac0820ad086a21ae0820ad0820ae086a21af0820ae0820af086a21b00820af0820b0086a21b10820b00820b1" + "086a21b20820b10820b2086a21b30820b20820b3086a21b40820b30820b4086a21b50820b40820b5086a21b60820b5" + "0820b6086a21b70820b60820b7086a21b80820b70820b8086a21b90820b80820b9086a21ba0820b90820ba086a21bb" + "0820ba0820bb086a21bc0820bb0820bc086a21bd0820bc0820bd086a21be0820bd0820be086a21bf0820be0820bf08" + "6a21c00820bf0820c0086a21c10820c00820c1086a21c20820c10820c2086a21c30820c20820c3086a21c40820c308" + "20c4086a21c50820c40820c5086a21c60820c50820c6086a21c70820c60820c7086a21c80820c70820c8086a21c908" + "20c80820c9086a21ca0820c90820ca086a21cb0820ca0820cb086a21cc0820cb0820cc086a21cd0820cc0820cd086a" + "21ce0820cd0820ce086a21cf0820ce0820cf086a21d00820cf0820d0086a21d10820d00820d1086a21d20820d10820" "d2086a21d30820d20820d3086a21d40820d30820d4086a21d50820d40820d5086a21d60820d50820d6086a21d70820" - "d60820d7086a21d80820" - "d70820d8086a21d90820d80820d9086a21da0820d90820da086a21db0820da0820db086a21dc0820db0820dc086a21" - "dd0820dc0820dd086a21" - "de0820dd0820de086a21df0820de0820df086a21e00820df0820e0086a21e10820e00820e1086a21e20820e10820e2" - "086a21e30820e20820e3" - "086a21e40820e30820e4086a21e50820e40820e5086a21e60820e50820e6086a21e70820e60820e7086a21e80820e7" - "0820e8086a21e90820e8" - "0820e9086a21ea0820e90820ea086a21eb0820ea0820eb086a21ec0820eb0820ec086a21ed0820ec0820ed086a21ee" - "0820ed0820ee086a21ef" - "0820ee0820ef086a21f00820ef0820f0086a21f10820f00820f1086a21f20820f10820f2086a21f30820f20820f308" - "6a21f40820f30820f408" - "6a21f50820f40820f5086a21f60820f50820f6086a21f70820f60820f7086a21f80820f70820f8086a21f90820f808" - "20f9086a21fa0820f908" - "20fa086a21fb0820fa0820fb086a21fc0820fb0820fc086a21fd0820fc0820fd086a21fe0820fd0820fe086a21ff08" - "20fe0820ff086a218009" - "20ff082080096a2181092080092081096a2182092081092082096a2183092082092083096a2184092083092084096a" - "2185092084092085096a" - "2186092085092086096a2187092086092087096a2188092087092088096a2189092088092089096a218a0920890920" - "8a096a218b09208a0920" - "8b096a218c09208b09208c096a218d09208c09208d096a218e09208d09208e096a218f09208e09208f096a21900920" - "8f092090096a21910920" - "90092091096a2192092091092092096a2193092092092093096a2194092093092094096a2195092094092095096a21" - "96092095092096096a21" - "97092096092097096a2198092097092098096a2199092098092099096a219a09209909209a096a219b09209a09209b" - "096a219c09209b09209c" - "096a219d09209c09209d096a219e09209d09209e096a219f09209e09209f096a21a009209f0920a0096a21a10920a0" - "0920a1096a21a20920a1" - "0920a2096a21a30920a20920a3096a21a40920a30920a4096a21a50920a40920a5096a21a60920a50920a6096a21a7" - "0920a60920a7096a21a8" - "0920a70920a8096a21a90920a80920a9096a21aa0920a90920aa096a21ab0920aa0920ab096a21ac0920ab0920ac09" - "6a21ad0920ac0920ad09" - "6a21ae0920ad0920ae096a21af0920ae0920af096a21b00920af0920b0096a21b10920b00920b1096a21b20920b109" - "20b2096a21b30920b209" - "20b3096a21b40920b30920b4096a21b50920b40920b5096a21b60920b50920b6096a21b70920b60920b7096a21b809" - "20b70920b8096a21b909" - "20b80920b9096a21ba0920b90920ba096a21bb0920ba0920bb096a21bc0920bb0920bc096a21bd0920bc0920bd096a" - "21be0920bd0920be096a" - "21bf0920be0920bf096a21c00920bf0920c0096a21c10920c00920c1096a21c20920c10920c2096a21c30920c20920" - "c3096a21c40920c30920" - "c4096a21c50920c40920c5096a21c60920c50920c6096a21c70920c60920c7096a21c80920c70920c8096a21c90920" - "c80920c9096a21ca0920" - "c90920ca096a21cb0920ca0920cb096a21cc0920cb0920cc096a21cd0920cc0920cd096a21ce0920cd0920ce096a21" - "cf0920ce0920cf096a21" - "d00920cf0920d0096a21d10920d00920d1096a21d20920d10920d2096a21d30920d20920d3096a21d40920d30920d4" - "096a21d50920d40920d5" - "096a21d60920d50920d6096a21d70920d60920d7096a21d80920d70920d8096a21d90920d80920d9096a21da0920d9" - "0920da096a21db0920da" - "0920db096a21dc0920db0920dc096a21dd0920dc0920dd096a21de0920dd0920de096a21df0920de0920df096a21e0" - "0920df0920e0096a21e1" - "0920e00920e1096a21e20920e10920e2096a21e30920e20920e3096a21e40920e30920e4096a21e50920e40920e509" - "6a21e60920e50920e609" - "6a21e70920e60920e7096a21e80920e70920e8096a21e90920e80920e9096a21ea0920e90920ea096a21eb0920ea09" - "20eb096a21ec0920eb09" - "20ec096a21ed0920ec0920ed096a21ee0920ed0920ee096a21ef0920ee0920ef096a21f00920ef0920f0096a21f109" - "20f00920f1096a21f209" - "20f10920f2096a21f30920f20920f3096a21f40920f30920f4096a21f50920f40920f5096a21f60920f50920f6096a" - "21f70920f60920f7096a" - "21f80920f70920f8096a21f90920f80920f9096a21fa0920f90920fa096a21fb0920fa0920fb096a21fc0920fb0920" - "fc096a21fd0920fc0920" - "fd096a21fe0920fd0920fe096a21ff0920fe0920ff096a21800a20ff0920800a6a21810a20800a20810a6a21820a20" - "810a20820a6a21830a20" - "820a20830a6a21840a20830a20840a6a21850a20840a20850a6a21860a20850a20860a6a21870a20860a20870a6a21" - "880a20870a20880a6a21" - "890a20880a20890a6a218a0a20890a208a0a6a218b0a208a0a208b0a6a218c0a208b0a208c0a6a218d0a208c0a208d" - "0a6a218e0a208d0a208e" - "0a6a218f0a208e0a208f0a6a21900a208f0a20900a6a21910a20900a20910a6a21920a20910a20920a6a21930a2092" - "0a20930a6a21940a2093" - "0a20940a6a21950a20940a20950a6a21960a20950a20960a6a21970a20960a20970a6a21980a20970a20980a6a2199" - "0a20980a20990a6a219a" - "0a20990a209a0a6a219b0a209a0a209b0a6a219c0a209b0a209c0a6a219d0a209c0a209d0a6a219e0a209d0a209e0a" - "6a219f0a209e0a209f0a" - "6a21a00a209f0a20a00a6a21a10a20a00a20a10a6a21a20a20a10a20a20a6a21a30a20a20a20a30a6a21a40a20a30a" - "20a40a6a21a50a20a40a" - "20a50a6a21a60a20a50a20a60a6a21a70a20a60a20a70a6a21a80a20a70a20a80a6a21a90a20a80a20a90a6a21aa0a" - "20a90a20aa0a6a21ab0a" - "20aa0a20ab0a6a21ac0a20ab0a20ac0a6a21ad0a20ac0a20ad0a6a21ae0a20ad0a20ae0a6a21af0a20ae0a20af0a6a" - "21b00a20af0a20b00a6a" - "21b10a20b00a20b10a6a21b20a20b10a20b20a6a21b30a20b20a20b30a6a21b40a20b30a20b40a6a21b50a20b40a20" - "b50a6a21b60a20b50a20" - "b60a6a21b70a20b60a20b70a6a21b80a20b70a20b80a6a21b90a20b80a20b90a6a21ba0a20b90a20ba0a6a21bb0a20" - "ba0a20bb0a6a21bc0a20" - "bb0a20bc0a6a21bd0a20bc0a20bd0a6a21be0a20bd0a20be0a6a21bf0a20be0a20bf0a6a21c00a20bf0a20c00a6a21" - "c10a20c00a20c10a6a21" - "c20a20c10a20c20a6a21c30a20c20a20c30a6a21c40a20c30a20c40a6a21c50a20c40a20c50a6a21c60a20c50a20c6" - "0a6a21c70a20c60a20c7" - "0a6a21c80a20c70a20c80a6a21c90a20c80a20c90a6a21ca0a20c90a20ca0a6a21cb0a20ca0a20cb0a6a21cc0a20cb" - "0a20cc0a6a21cd0a20cc" - "0a20cd0a6a21ce0a20cd0a20ce0a6a21cf0a20ce0a20cf0a6a21d00a20cf0a20d00a6a21d10a20d00a20d10a6a21d2" - "0a20d10a20d20a6a21d3" - "0a20d20a20d30a6a21d40a20d30a20d40a6a21d50a20d40a20d50a6a21d60a20d50a20d60a6a21d70a20d60a20d70a" - "6a21d80a20d70a20d80a" - "6a21d90a20d80a20d90a6a21da0a20d90a20da0a6a21db0a20da0a20db0a6a21dc0a20db0a20dc0a6a21dd0a20dc0a" - "20dd0a6a21de0a20dd0a" + "d60820d7086a21d80820d70820d8086a21d90820d80820d9086a21da0820d90820da086a21db0820da0820db086a21" + "dc0820db0820dc086a21dd0820dc0820dd086a21de0820dd0820de086a21df0820de0820df086a21e00820df0820e0" + "086a21e10820e00820e1086a21e20820e10820e2086a21e30820e20820e3086a21e40820e30820e4086a21e50820e4" + "0820e5086a21e60820e50820e6086a21e70820e60820e7086a21e80820e70820e8086a21e90820e80820e9086a21ea" + "0820e90820ea086a21eb0820ea0820eb086a21ec0820eb0820ec086a21ed0820ec0820ed086a21ee0820ed0820ee08" + "6a21ef0820ee0820ef086a21f00820ef0820f0086a21f10820f00820f1086a21f20820f10820f2086a21f30820f208" + "20f3086a21f40820f30820f4086a21f50820f40820f5086a21f60820f50820f6086a21f70820f60820f7086a21f808" + "20f70820f8086a21f90820f80820f9086a21fa0820f90820fa086a21fb0820fa0820fb086a21fc0820fb0820fc086a" + "21fd0820fc0820fd086a21fe0820fd0820fe086a21ff0820fe0820ff086a21800920ff082080096a21810920800920" + "81096a2182092081092082096a2183092082092083096a2184092083092084096a2185092084092085096a21860920" + "85092086096a2187092086092087096a2188092087092088096a2189092088092089096a218a09208909208a096a21" + "8b09208a09208b096a218c09208b09208c096a218d09208c09208d096a218e09208d09208e096a218f09208e09208f" + "096a219009208f092090096a2191092090092091096a2192092091092092096a2193092092092093096a2194092093" + "092094096a2195092094092095096a2196092095092096096a2197092096092097096a2198092097092098096a2199" + "092098092099096a219a09209909209a096a219b09209a09209b096a219c09209b09209c096a219d09209c09209d09" + "6a219e09209d09209e096a219f09209e09209f096a21a009209f0920a0096a21a10920a00920a1096a21a20920a109" + "20a2096a21a30920a20920a3096a21a40920a30920a4096a21a50920a40920a5096a21a60920a50920a6096a21a709" + "20a60920a7096a21a80920a70920a8096a21a90920a80920a9096a21aa0920a90920aa096a21ab0920aa0920ab096a" + "21ac0920ab0920ac096a21ad0920ac0920ad096a21ae0920ad0920ae096a21af0920ae0920af096a21b00920af0920" + "b0096a21b10920b00920b1096a21b20920b10920b2096a21b30920b20920b3096a21b40920b30920b4096a21b50920" + "b40920b5096a21b60920b50920b6096a21b70920b60920b7096a21b80920b70920b8096a21b90920b80920b9096a21" + "ba0920b90920ba096a21bb0920ba0920bb096a21bc0920bb0920bc096a21bd0920bc0920bd096a21be0920bd0920be" + "096a21bf0920be0920bf096a21c00920bf0920c0096a21c10920c00920c1096a21c20920c10920c2096a21c30920c2" + "0920c3096a21c40920c30920c4096a21c50920c40920c5096a21c60920c50920c6096a21c70920c60920c7096a21c8" + "0920c70920c8096a21c90920c80920c9096a21ca0920c90920ca096a21cb0920ca0920cb096a21cc0920cb0920cc09" + "6a21cd0920cc0920cd096a21ce0920cd0920ce096a21cf0920ce0920cf096a21d00920cf0920d0096a21d10920d009" + "20d1096a21d20920d10920d2096a21d30920d20920d3096a21d40920d30920d4096a21d50920d40920d5096a21d609" + "20d50920d6096a21d70920d60920d7096a21d80920d70920d8096a21d90920d80920d9096a21da0920d90920da096a" + "21db0920da0920db096a21dc0920db0920dc096a21dd0920dc0920dd096a21de0920dd0920de096a21df0920de0920" + "df096a21e00920df0920e0096a21e10920e00920e1096a21e20920e10920e2096a21e30920e20920e3096a21e40920" + "e30920e4096a21e50920e40920e5096a21e60920e50920e6096a21e70920e60920e7096a21e80920e70920e8096a21" + "e90920e80920e9096a21ea0920e90920ea096a21eb0920ea0920eb096a21ec0920eb0920ec096a21ed0920ec0920ed" + "096a21ee0920ed0920ee096a21ef0920ee0920ef096a21f00920ef0920f0096a21f10920f00920f1096a21f20920f1" + "0920f2096a21f30920f20920f3096a21f40920f30920f4096a21f50920f40920f5096a21f60920f50920f6096a21f7" + "0920f60920f7096a21f80920f70920f8096a21f90920f80920f9096a21fa0920f90920fa096a21fb0920fa0920fb09" + "6a21fc0920fb0920fc096a21fd0920fc0920fd096a21fe0920fd0920fe096a21ff0920fe0920ff096a21800a20ff09" + "20800a6a21810a20800a20810a6a21820a20810a20820a6a21830a20820a20830a6a21840a20830a20840a6a21850a" + "20840a20850a6a21860a20850a20860a6a21870a20860a20870a6a21880a20870a20880a6a21890a20880a20890a6a" + "218a0a20890a208a0a6a218b0a208a0a208b0a6a218c0a208b0a208c0a6a218d0a208c0a208d0a6a218e0a208d0a20" + "8e0a6a218f0a208e0a208f0a6a21900a208f0a20900a6a21910a20900a20910a6a21920a20910a20920a6a21930a20" + "920a20930a6a21940a20930a20940a6a21950a20940a20950a6a21960a20950a20960a6a21970a20960a20970a6a21" + "980a20970a20980a6a21990a20980a20990a6a219a0a20990a209a0a6a219b0a209a0a209b0a6a219c0a209b0a209c" + "0a6a219d0a209c0a209d0a6a219e0a209d0a209e0a6a219f0a209e0a209f0a6a21a00a209f0a20a00a6a21a10a20a0" + "0a20a10a6a21a20a20a10a20a20a6a21a30a20a20a20a30a6a21a40a20a30a20a40a6a21a50a20a40a20a50a6a21a6" + "0a20a50a20a60a6a21a70a20a60a20a70a6a21a80a20a70a20a80a6a21a90a20a80a20a90a6a21aa0a20a90a20aa0a" + "6a21ab0a20aa0a20ab0a6a21ac0a20ab0a20ac0a6a21ad0a20ac0a20ad0a6a21ae0a20ad0a20ae0a6a21af0a20ae0a" + "20af0a6a21b00a20af0a20b00a6a21b10a20b00a20b10a6a21b20a20b10a20b20a6a21b30a20b20a20b30a6a21b40a" + "20b30a20b40a6a21b50a20b40a20b50a6a21b60a20b50a20b60a6a21b70a20b60a20b70a6a21b80a20b70a20b80a6a" + "21b90a20b80a20b90a6a21ba0a20b90a20ba0a6a21bb0a20ba0a20bb0a6a21bc0a20bb0a20bc0a6a21bd0a20bc0a20" + "bd0a6a21be0a20bd0a20be0a6a21bf0a20be0a20bf0a6a21c00a20bf0a20c00a6a21c10a20c00a20c10a6a21c20a20" + "c10a20c20a6a21c30a20c20a20c30a6a21c40a20c30a20c40a6a21c50a20c40a20c50a6a21c60a20c50a20c60a6a21" + "c70a20c60a20c70a6a21c80a20c70a20c80a6a21c90a20c80a20c90a6a21ca0a20c90a20ca0a6a21cb0a20ca0a20cb" + "0a6a21cc0a20cb0a20cc0a6a21cd0a20cc0a20cd0a6a21ce0a20cd0a20ce0a6a21cf0a20ce0a20cf0a6a21d00a20cf" + "0a20d00a6a21d10a20d00a20d10a6a21d20a20d10a20d20a6a21d30a20d20a20d30a6a21d40a20d30a20d40a6a21d5" + "0a20d40a20d50a6a21d60a20d50a20d60a6a21d70a20d60a20d70a6a21d80a20d70a20d80a6a21d90a20d80a20d90a" + "6a21da0a20d90a20da0a6a21db0a20da0a20db0a6a21dc0a20db0a20dc0a6a21dd0a20dc0a20dd0a6a21de0a20dd0a" "20de0a6a21df0a20de0a20df0a6a21e00a20df0a20e00a6a21e10a20e00a20e10a6a21e20a20e10a20e20a6a21e30a" - "20e20a20e30a6a21e40a" - "20e30a20e40a6a21e50a20e40a20e50a6a21e60a20e50a20e60a6a21e70a20e60a20e70a6a21e80a20e70a20e80a6a" - "21e90a20e80a20e90a6a" - "21ea0a20e90a20ea0a6a21eb0a20ea0a20eb0a6a21ec0a20eb0a20ec0a6a21ed0a20ec0a20ed0a6a21ee0a20ed0a20" - "ee0a6a21ef0a20ee0a20" - "ef0a6a21f00a20ef0a20f00a6a21f10a20f00a20f10a6a21f20a20f10a20f20a6a21f30a20f20a20f30a6a21f40a20" - "f30a20f40a6a21f50a20" - "f40a20f50a6a21f60a20f50a20f60a6a21f70a20f60a20f70a6a21f80a20f70a20f80a6a21f90a20f80a20f90a6a21" - "fa0a20f90a20fa0a6a21" - "fb0a20fa0a20fb0a6a21fc0a20fb0a20fc0a6a21fd0a20fc0a20fd0a6a21fe0a20fd0a20fe0a6a21ff0a20fe0a20ff" - "0a6a21800b20ff0a2080" - "0b6a21810b20800b20810b6a21820b20810b20820b6a21830b20820b20830b6a21840b20830b20840b6a21850b2084" - "0b20850b6a21860b2085" - "0b20860b6a21870b20860b20870b6a21880b20870b20880b6a21890b20880b20890b6a218a0b20890b208a0b6a218b" - "0b208a0b208b0b6a218c" - "0b208b0b208c0b6a218d0b208c0b208d0b6a218e0b208d0b208e0b6a218f0b208e0b208f0b6a21900b208f0b20900b" - "6a21910b20900b20910b" - "6a21920b20910b20920b6a21930b20920b20930b6a21940b20930b20940b6a21950b20940b20950b6a21960b20950b" - "20960b6a21970b20960b" - "20970b6a21980b20970b20980b6a21990b20980b20990b6a219a0b20990b209a0b6a219b0b209a0b209b0b6a219c0b" - "209b0b209c0b6a219d0b" - "209c0b209d0b6a219e0b209d0b209e0b6a219f0b209e0b209f0b6a21a00b209f0b20a00b6a21a10b20a00b20a10b6a" - "21a20b20a10b20a20b6a" - "21a30b20a20b20a30b6a21a40b20a30b20a40b6a21a50b20a40b20a50b6a21a60b20a50b20a60b6a21a70b20a60b20" - "a70b6a21a80b20a70b20" - "a80b6a21a90b20a80b20a90b6a21aa0b20a90b20aa0b6a21ab0b20aa0b20ab0b6a21ac0b20ab0b20ac0b6a21ad0b20" - "ac0b20ad0b6a21ae0b20" - "ad0b20ae0b6a21af0b20ae0b20af0b6a21b00b20af0b20b00b6a21b10b20b00b20b10b6a21b20b20b10b20b20b6a21" - "b30b20b20b20b30b6a21" - "b40b20b30b20b40b6a21b50b20b40b20b50b6a21b60b20b50b20b60b6a21b70b20b60b20b70b6a21b80b20b70b20b8" - "0b6a21b90b20b80b20b9" - "0b6a21ba0b20b90b20ba0b6a21bb0b20ba0b20bb0b6a21bc0b20bb0b20bc0b6a21bd0b20bc0b20bd0b6a21be0b20bd" - "0b20be0b6a21bf0b20be" - "0b20bf0b6a21c00b20bf0b20c00b6a21c10b20c00b20c10b6a21c20b20c10b20c20b6a21c30b20c20b20c30b6a21c4" - "0b20c30b20c40b6a21c5" - "0b20c40b20c50b6a21c60b20c50b20c60b6a21c70b20c60b20c70b6a21c80b20c70b20c80b6a21c90b20c80b20c90b" - "6a21ca0b20c90b20ca0b" - "6a21cb0b20ca0b20cb0b6a21cc0b20cb0b20cc0b6a21cd0b20cc0b20cd0b6a21ce0b20cd0b20ce0b6a21cf0b20ce0b" - "20cf0b6a21d00b20cf0b" - "20d00b6a21d10b20d00b20d10b6a21d20b20d10b20d20b6a21d30b20d20b20d30b6a21d40b20d30b20d40b6a21d50b" - "20d40b20d50b6a21d60b" - "20d50b20d60b6a21d70b20d60b20d70b6a21d80b20d70b20d80b6a21d90b20d80b20d90b6a21da0b20d90b20da0b6a" - "21db0b20da0b20db0b6a" - "21dc0b20db0b20dc0b6a21dd0b20dc0b20dd0b6a21de0b20dd0b20de0b6a21df0b20de0b20df0b6a21e00b20df0b20" - "e00b6a21e10b20e00b20" - "e10b6a21e20b20e10b20e20b6a21e30b20e20b20e30b6a21e40b20e30b20e40b6a21e50b20e40b20e50b6a21e60b20" - "e50b20e60b6a21e70b20" - "e60b20e70b6a21e80b20e70b20e80b6a21e90b20e80b20e90b6a21ea0b20e90b20ea0b6a21eb0b20ea0b20eb0b6a21" - "ec0b20eb0b20ec0b6a21" - "ed0b20ec0b20ed0b6a21ee0b20ed0b20ee0b6a21ef0b20ee0b20ef0b6a21f00b20ef0b20f00b6a21f10b20f00b20f1" - "0b6a21f20b20f10b20f2" - "0b6a21f30b20f20b20f30b6a21f40b20f30b20f40b6a21f50b20f40b20f50b6a21f60b20f50b20f60b6a21f70b20f6" - "0b20f70b6a21f80b20f7" - "0b20f80b6a21f90b20f80b20f90b6a21fa0b20f90b20fa0b6a21fb0b20fa0b20fb0b6a21fc0b20fb0b20fc0b6a21fd" - "0b20fc0b20fd0b6a21fe" - "0b20fd0b20fe0b6a21ff0b20fe0b20ff0b6a21800c20ff0b20800c6a21810c20800c20810c6a21820c20810c20820c" - "6a21830c20820c20830c" - "6a21840c20830c20840c6a21850c20840c20850c6a21860c20850c20860c6a21870c20860c20870c6a21880c20870c" - "20880c6a21890c20880c" - "20890c6a218a0c20890c208a0c6a218b0c208a0c208b0c6a218c0c208b0c208c0c6a218d0c208c0c208d0c6a218e0c" - "208d0c208e0c6a218f0c" - "208e0c208f0c6a21900c208f0c20900c6a21910c20900c20910c6a21920c20910c20920c6a21930c20920c20930c6a" - "21940c20930c20940c6a" - "21950c20940c20950c6a21960c20950c20960c6a21970c20960c20970c6a21980c20970c20980c6a21990c20980c20" - "990c6a219a0c20990c20" - "9a0c6a219b0c209a0c209b0c6a219c0c209b0c209c0c6a219d0c209c0c209d0c6a219e0c209d0c209e0c6a219f0c20" - "9e0c209f0c6a21a00c20" - "9f0c20a00c6a21a10c20a00c20a10c6a21a20c20a10c20a20c6a21a30c20a20c20a30c6a21a40c20a30c20a40c6a21" - "a50c20a40c20a50c6a21" - "a60c20a50c20a60c6a21a70c20a60c20a70c6a21a80c20a70c20a80c6a21a90c20a80c20a90c6a21aa0c20a90c20aa" - "0c6a21ab0c20aa0c20ab" - "0c6a21ac0c20ab0c20ac0c6a21ad0c20ac0c20ad0c6a21ae0c20ad0c20ae0c6a21af0c20ae0c20af0c6a21b00c20af" - "0c20b00c6a21b10c20b0" - "0c20b10c6a21b20c20b10c20b20c6a21b30c20b20c20b30c6a21b40c20b30c20b40c6a21b50c20b40c20b50c6a21b6" - "0c20b50c20b60c6a21b7" - "0c20b60c20b70c6a21b80c20b70c20b80c6a21b90c20b80c20b90c6a21ba0c20b90c20ba0c6a21bb0c20ba0c20bb0c" - "6a21bc0c20bb0c20bc0c" - "6a21bd0c20bc0c20bd0c6a21be0c20bd0c20be0c6a21bf0c20be0c20bf0c6a21c00c20bf0c20c00c6a21c10c20c00c" - "20c10c6a21c20c20c10c" - "20c20c6a21c30c20c20c20c30c6a21c40c20c30c20c40c6a21c50c20c40c20c50c6a21c60c20c50c20c60c6a21c70c" - "20c60c20c70c6a21c80c" - "20c70c20c80c6a21c90c20c80c20c90c6a21ca0c20c90c20ca0c6a21cb0c20ca0c20cb0c6a21cc0c20cb0c20cc0c6a" - "21cd0c20cc0c20cd0c6a" - "21ce0c20cd0c20ce0c6a21cf0c20ce0c20cf0c6a21d00c20cf0c20d00c6a21d10c20d00c20d10c6a21d20c20d10c20" - "d20c6a21d30c20d20c20" - "d30c6a21d40c20d30c20d40c6a21d50c20d40c20d50c6a21d60c20d50c20d60c6a21d70c20d60c20d70c6a21d80c20" - "d70c20d80c6a21d90c20" - "d80c20d90c6a21da0c20d90c20da0c6a21db0c20da0c20db0c6a21dc0c20db0c20dc0c6a21dd0c20dc0c20dd0c6a21" - "de0c20dd0c20de0c6a21" - "df0c20de0c20df0c6a21e00c20df0c20e00c6a21e10c20e00c20e10c6a21e20c20e10c20e20c6a21e30c20e20c20e3" - "0c6a21e40c20e30c20e4" - "0c6a21e50c20e40c20e50c6a21e60c20e50c20e60c6a21e70c20e60c20e70c6a21e80c20e70c20e80c6a21e90c20e8" - "0c20e90c6a21ea0c20e9" + "20e20a20e30a6a21e40a20e30a20e40a6a21e50a20e40a20e50a6a21e60a20e50a20e60a6a21e70a20e60a20e70a6a" + "21e80a20e70a20e80a6a21e90a20e80a20e90a6a21ea0a20e90a20ea0a6a21eb0a20ea0a20eb0a6a21ec0a20eb0a20" + "ec0a6a21ed0a20ec0a20ed0a6a21ee0a20ed0a20ee0a6a21ef0a20ee0a20ef0a6a21f00a20ef0a20f00a6a21f10a20" + "f00a20f10a6a21f20a20f10a20f20a6a21f30a20f20a20f30a6a21f40a20f30a20f40a6a21f50a20f40a20f50a6a21" + "f60a20f50a20f60a6a21f70a20f60a20f70a6a21f80a20f70a20f80a6a21f90a20f80a20f90a6a21fa0a20f90a20fa" + "0a6a21fb0a20fa0a20fb0a6a21fc0a20fb0a20fc0a6a21fd0a20fc0a20fd0a6a21fe0a20fd0a20fe0a6a21ff0a20fe" + "0a20ff0a6a21800b20ff0a20800b6a21810b20800b20810b6a21820b20810b20820b6a21830b20820b20830b6a2184" + "0b20830b20840b6a21850b20840b20850b6a21860b20850b20860b6a21870b20860b20870b6a21880b20870b20880b" + "6a21890b20880b20890b6a218a0b20890b208a0b6a218b0b208a0b208b0b6a218c0b208b0b208c0b6a218d0b208c0b" + "208d0b6a218e0b208d0b208e0b6a218f0b208e0b208f0b6a21900b208f0b20900b6a21910b20900b20910b6a21920b" + "20910b20920b6a21930b20920b20930b6a21940b20930b20940b6a21950b20940b20950b6a21960b20950b20960b6a" + "21970b20960b20970b6a21980b20970b20980b6a21990b20980b20990b6a219a0b20990b209a0b6a219b0b209a0b20" + "9b0b6a219c0b209b0b209c0b6a219d0b209c0b209d0b6a219e0b209d0b209e0b6a219f0b209e0b209f0b6a21a00b20" + "9f0b20a00b6a21a10b20a00b20a10b6a21a20b20a10b20a20b6a21a30b20a20b20a30b6a21a40b20a30b20a40b6a21" + "a50b20a40b20a50b6a21a60b20a50b20a60b6a21a70b20a60b20a70b6a21a80b20a70b20a80b6a21a90b20a80b20a9" + "0b6a21aa0b20a90b20aa0b6a21ab0b20aa0b20ab0b6a21ac0b20ab0b20ac0b6a21ad0b20ac0b20ad0b6a21ae0b20ad" + "0b20ae0b6a21af0b20ae0b20af0b6a21b00b20af0b20b00b6a21b10b20b00b20b10b6a21b20b20b10b20b20b6a21b3" + "0b20b20b20b30b6a21b40b20b30b20b40b6a21b50b20b40b20b50b6a21b60b20b50b20b60b6a21b70b20b60b20b70b" + "6a21b80b20b70b20b80b6a21b90b20b80b20b90b6a21ba0b20b90b20ba0b6a21bb0b20ba0b20bb0b6a21bc0b20bb0b" + "20bc0b6a21bd0b20bc0b20bd0b6a21be0b20bd0b20be0b6a21bf0b20be0b20bf0b6a21c00b20bf0b20c00b6a21c10b" + "20c00b20c10b6a21c20b20c10b20c20b6a21c30b20c20b20c30b6a21c40b20c30b20c40b6a21c50b20c40b20c50b6a" + "21c60b20c50b20c60b6a21c70b20c60b20c70b6a21c80b20c70b20c80b6a21c90b20c80b20c90b6a21ca0b20c90b20" + "ca0b6a21cb0b20ca0b20cb0b6a21cc0b20cb0b20cc0b6a21cd0b20cc0b20cd0b6a21ce0b20cd0b20ce0b6a21cf0b20" + "ce0b20cf0b6a21d00b20cf0b20d00b6a21d10b20d00b20d10b6a21d20b20d10b20d20b6a21d30b20d20b20d30b6a21" + "d40b20d30b20d40b6a21d50b20d40b20d50b6a21d60b20d50b20d60b6a21d70b20d60b20d70b6a21d80b20d70b20d8" + "0b6a21d90b20d80b20d90b6a21da0b20d90b20da0b6a21db0b20da0b20db0b6a21dc0b20db0b20dc0b6a21dd0b20dc" + "0b20dd0b6a21de0b20dd0b20de0b6a21df0b20de0b20df0b6a21e00b20df0b20e00b6a21e10b20e00b20e10b6a21e2" + "0b20e10b20e20b6a21e30b20e20b20e30b6a21e40b20e30b20e40b6a21e50b20e40b20e50b6a21e60b20e50b20e60b" + "6a21e70b20e60b20e70b6a21e80b20e70b20e80b6a21e90b20e80b20e90b6a21ea0b20e90b20ea0b6a21eb0b20ea0b" + "20eb0b6a21ec0b20eb0b20ec0b6a21ed0b20ec0b20ed0b6a21ee0b20ed0b20ee0b6a21ef0b20ee0b20ef0b6a21f00b" + "20ef0b20f00b6a21f10b20f00b20f10b6a21f20b20f10b20f20b6a21f30b20f20b20f30b6a21f40b20f30b20f40b6a" + "21f50b20f40b20f50b6a21f60b20f50b20f60b6a21f70b20f60b20f70b6a21f80b20f70b20f80b6a21f90b20f80b20" + "f90b6a21fa0b20f90b20fa0b6a21fb0b20fa0b20fb0b6a21fc0b20fb0b20fc0b6a21fd0b20fc0b20fd0b6a21fe0b20" + "fd0b20fe0b6a21ff0b20fe0b20ff0b6a21800c20ff0b20800c6a21810c20800c20810c6a21820c20810c20820c6a21" + "830c20820c20830c6a21840c20830c20840c6a21850c20840c20850c6a21860c20850c20860c6a21870c20860c2087" + "0c6a21880c20870c20880c6a21890c20880c20890c6a218a0c20890c208a0c6a218b0c208a0c208b0c6a218c0c208b" + "0c208c0c6a218d0c208c0c208d0c6a218e0c208d0c208e0c6a218f0c208e0c208f0c6a21900c208f0c20900c6a2191" + "0c20900c20910c6a21920c20910c20920c6a21930c20920c20930c6a21940c20930c20940c6a21950c20940c20950c" + "6a21960c20950c20960c6a21970c20960c20970c6a21980c20970c20980c6a21990c20980c20990c6a219a0c20990c" + "209a0c6a219b0c209a0c209b0c6a219c0c209b0c209c0c6a219d0c209c0c209d0c6a219e0c209d0c209e0c6a219f0c" + "209e0c209f0c6a21a00c209f0c20a00c6a21a10c20a00c20a10c6a21a20c20a10c20a20c6a21a30c20a20c20a30c6a" + "21a40c20a30c20a40c6a21a50c20a40c20a50c6a21a60c20a50c20a60c6a21a70c20a60c20a70c6a21a80c20a70c20" + "a80c6a21a90c20a80c20a90c6a21aa0c20a90c20aa0c6a21ab0c20aa0c20ab0c6a21ac0c20ab0c20ac0c6a21ad0c20" + "ac0c20ad0c6a21ae0c20ad0c20ae0c6a21af0c20ae0c20af0c6a21b00c20af0c20b00c6a21b10c20b00c20b10c6a21" + "b20c20b10c20b20c6a21b30c20b20c20b30c6a21b40c20b30c20b40c6a21b50c20b40c20b50c6a21b60c20b50c20b6" + "0c6a21b70c20b60c20b70c6a21b80c20b70c20b80c6a21b90c20b80c20b90c6a21ba0c20b90c20ba0c6a21bb0c20ba" + "0c20bb0c6a21bc0c20bb0c20bc0c6a21bd0c20bc0c20bd0c6a21be0c20bd0c20be0c6a21bf0c20be0c20bf0c6a21c0" + "0c20bf0c20c00c6a21c10c20c00c20c10c6a21c20c20c10c20c20c6a21c30c20c20c20c30c6a21c40c20c30c20c40c" + "6a21c50c20c40c20c50c6a21c60c20c50c20c60c6a21c70c20c60c20c70c6a21c80c20c70c20c80c6a21c90c20c80c" + "20c90c6a21ca0c20c90c20ca0c6a21cb0c20ca0c20cb0c6a21cc0c20cb0c20cc0c6a21cd0c20cc0c20cd0c6a21ce0c" + "20cd0c20ce0c6a21cf0c20ce0c20cf0c6a21d00c20cf0c20d00c6a21d10c20d00c20d10c6a21d20c20d10c20d20c6a" + "21d30c20d20c20d30c6a21d40c20d30c20d40c6a21d50c20d40c20d50c6a21d60c20d50c20d60c6a21d70c20d60c20" + "d70c6a21d80c20d70c20d80c6a21d90c20d80c20d90c6a21da0c20d90c20da0c6a21db0c20da0c20db0c6a21dc0c20" + "db0c20dc0c6a21dd0c20dc0c20dd0c6a21de0c20dd0c20de0c6a21df0c20de0c20df0c6a21e00c20df0c20e00c6a21" + "e10c20e00c20e10c6a21e20c20e10c20e20c6a21e30c20e20c20e30c6a21e40c20e30c20e40c6a21e50c20e40c20e5" + "0c6a21e60c20e50c20e60c6a21e70c20e60c20e70c6a21e80c20e70c20e80c6a21e90c20e80c20e90c6a21ea0c20e9" "0c20ea0c6a21eb0c20ea0c20eb0c6a21ec0c20eb0c20ec0c6a21ed0c20ec0c20ed0c6a21ee0c20ed0c20ee0c6a21ef" - "0c20ee0c20ef0c6a21f0" - "0c20ef0c20f00c6a21f10c20f00c20f10c6a21f20c20f10c20f20c6a21f30c20f20c20f30c6a21f40c20f30c20f40c" - "6a21f50c20f40c20f50c" - "6a21f60c20f50c20f60c6a21f70c20f60c20f70c6a21f80c20f70c20f80c6a21f90c20f80c20f90c6a21fa0c20f90c" - "20fa0c6a21fb0c20fa0c" - "20fb0c6a21fc0c20fb0c20fc0c6a21fd0c20fc0c20fd0c6a21fe0c20fd0c20fe0c6a21ff0c20fe0c20ff0c6a21800d" - "20ff0c20800d6a21810d" - "20800d20810d6a21820d20810d20820d6a21830d20820d20830d6a21840d20830d20840d6a21850d20840d20850d6a" - "21860d20850d20860d6a" - "21870d20860d20870d6a21880d20870d20880d6a21890d20880d20890d6a218a0d20890d208a0d6a218b0d208a0d20" - "8b0d6a218c0d208b0d20" - "8c0d6a218d0d208c0d208d0d6a218e0d208d0d208e0d6a218f0d208e0d208f0d6a21900d208f0d20900d6a21910d20" - "900d20910d6a21920d20" - "910d20920d6a21930d20920d20930d6a21940d20930d20940d6a21950d20940d20950d6a21960d20950d20960d6a21" - "970d20960d20970d6a21" - "980d20970d20980d6a21990d20980d20990d6a219a0d20990d209a0d6a219b0d209a0d209b0d6a219c0d209b0d209c" - "0d6a219d0d209c0d209d" - "0d6a219e0d209d0d209e0d6a219f0d209e0d209f0d6a21a00d209f0d20a00d6a21a10d20a00d20a10d6a21a20d20a1" - "0d20a20d6a21a30d20a2" - "0d20a30d6a21a40d20a30d20a40d6a21a50d20a40d20a50d6a21a60d20a50d20a60d6a21a70d20a60d20a70d6a21a8" - "0d20a70d20a80d6a21a9" - "0d20a80d20a90d6a21aa0d20a90d20aa0d6a21ab0d20aa0d20ab0d6a21ac0d20ab0d20ac0d6a21ad0d20ac0d20ad0d" - "6a21ae0d20ad0d20ae0d" - "6a21af0d20ae0d20af0d6a21b00d20af0d20b00d6a21b10d20b00d20b10d6a21b20d20b10d20b20d6a21b30d20b20d" - "20b30d6a21b40d20b30d" - "20b40d6a21b50d20b40d20b50d6a21b60d20b50d20b60d6a21b70d20b60d20b70d6a21b80d20b70d20b80d6a21b90d" - "20b80d20b90d6a21ba0d" - "20b90d20ba0d6a21bb0d20ba0d20bb0d6a21bc0d20bb0d20bc0d6a21bd0d20bc0d20bd0d6a21be0d20bd0d20be0d6a" - "21bf0d20be0d20bf0d6a" - "21c00d20bf0d20c00d6a21c10d20c00d20c10d6a21c20d20c10d20c20d6a21c30d20c20d20c30d6a21c40d20c30d20" - "c40d6a21c50d20c40d20" - "c50d6a21c60d20c50d20c60d6a21c70d20c60d20c70d6a21c80d20c70d20c80d6a21c90d20c80d20c90d6a21ca0d20" - "c90d20ca0d6a21cb0d20" - "ca0d20cb0d6a21cc0d20cb0d20cc0d6a21cd0d20cc0d20cd0d6a21ce0d20cd0d20ce0d6a21cf0d20ce0d20cf0d6a21" - "d00d20cf0d20d00d6a21" - "d10d20d00d20d10d6a21d20d20d10d20d20d6a21d30d20d20d20d30d6a21d40d20d30d20d40d6a21d50d20d40d20d5" - "0d6a21d60d20d50d20d6" - "0d6a21d70d20d60d20d70d6a21d80d20d70d20d80d6a21d90d20d80d20d90d6a21da0d20d90d20da0d6a21db0d20da" - "0d20db0d6a21dc0d20db" - "0d20dc0d6a21dd0d20dc0d20dd0d6a21de0d20dd0d20de0d6a21df0d20de0d20df0d6a21e00d20df0d20e00d6a21e1" - "0d20e00d20e10d6a21e2" - "0d20e10d20e20d6a21e30d20e20d20e30d6a21e40d20e30d20e40d6a21e50d20e40d20e50d6a21e60d20e50d20e60d" - "6a21e70d20e60d20e70d" - "6a21e80d20e70d20e80d6a21e90d20e80d20e90d6a21ea0d20e90d20ea0d6a21eb0d20ea0d20eb0d6a21ec0d20eb0d" - "20ec0d6a21ed0d20ec0d" - "20ed0d6a21ee0d20ed0d20ee0d6a21ef0d20ee0d20ef0d6a21f00d20ef0d20f00d6a21f10d20f00d20f10d6a21f20d" - "20f10d20f20d6a21f30d" - "20f20d20f30d6a21f40d20f30d20f40d6a21f50d20f40d20f50d6a21f60d20f50d20f60d6a21f70d20f60d20f70d6a" - "21f80d20f70d20f80d6a" - "21f90d20f80d20f90d6a21fa0d20f90d20fa0d6a21fb0d20fa0d20fb0d6a21fc0d20fb0d20fc0d6a21fd0d20fc0d20" - "fd0d6a21fe0d20fd0d20" - "fe0d6a21ff0d20fe0d20ff0d6a21800e20ff0d20800e6a21810e20800e20810e6a21820e20810e20820e6a21830e20" - "820e20830e6a21840e20" - "830e20840e6a21850e20840e20850e6a21860e20850e20860e6a21870e20860e20870e6a21880e20870e20880e6a21" - "890e20880e20890e6a21" - "8a0e20890e208a0e6a218b0e208a0e208b0e6a218c0e208b0e208c0e6a218d0e208c0e208d0e6a218e0e208d0e208e" - "0e6a218f0e208e0e208f" - "0e6a21900e208f0e20900e6a21910e20900e20910e6a21920e20910e20920e6a21930e20920e20930e6a21940e2093" - "0e20940e6a21950e2094" - "0e20950e6a21960e20950e20960e6a21970e20960e20970e6a21980e20970e20980e6a21990e20980e20990e6a219a" - "0e20990e209a0e6a219b" - "0e209a0e209b0e6a219c0e209b0e209c0e6a219d0e209c0e209d0e6a219e0e209d0e209e0e6a219f0e209e0e209f0e" - "6a21a00e209f0e20a00e" - "6a21a10e20a00e20a10e6a21a20e20a10e20a20e6a21a30e20a20e20a30e6a21a40e20a30e20a40e6a21a50e20a40e" - "20a50e6a21a60e20a50e" - "20a60e6a21a70e20a60e20a70e6a21a80e20a70e20a80e6a21a90e20a80e20a90e6a21aa0e20a90e20aa0e6a21ab0e" - "20aa0e20ab0e6a21ac0e" - "20ab0e20ac0e6a21ad0e20ac0e20ad0e6a21ae0e20ad0e20ae0e6a21af0e20ae0e20af0e6a21b00e20af0e20b00e6a" - "21b10e20b00e20b10e6a" - "21b20e20b10e20b20e6a21b30e20b20e20b30e6a21b40e20b30e20b40e6a21b50e20b40e20b50e6a21b60e20b50e20" - "b60e6a21b70e20b60e20" - "b70e6a21b80e20b70e20b80e6a21b90e20b80e20b90e6a21ba0e20b90e20ba0e6a21bb0e20ba0e20bb0e6a21bc0e20" - "bb0e20bc0e6a21bd0e20" - "bc0e20bd0e6a21be0e20bd0e20be0e6a21bf0e20be0e20bf0e6a21c00e20bf0e20c00e6a21c10e20c00e20c10e6a21" - "c20e20c10e20c20e6a21" - "c30e20c20e20c30e6a21c40e20c30e20c40e6a21c50e20c40e20c50e6a21c60e20c50e20c60e6a21c70e20c60e20c7" - "0e6a21c80e20c70e20c8" - "0e6a21c90e20c80e20c90e6a21ca0e20c90e20ca0e6a21cb0e20ca0e20cb0e6a21cc0e20cb0e20cc0e6a21cd0e20cc" - "0e20cd0e6a21ce0e20cd" - "0e20ce0e6a21cf0e20ce0e20cf0e6a21d00e20cf0e20d00e6a21d10e20d00e20d10e6a21d20e20d10e20d20e6a21d3" - "0e20d20e20d30e6a21d4" - "0e20d30e20d40e6a21d50e20d40e20d50e6a21d60e20d50e20d60e6a21d70e20d60e20d70e6a21d80e20d70e20d80e" - "6a21d90e20d80e20d90e" - "6a21da0e20d90e20da0e6a21db0e20da0e20db0e6a21dc0e20db0e20dc0e6a21dd0e20dc0e20dd0e6a21de0e20dd0e" - "20de0e6a21df0e20de0e" - "20df0e6a21e00e20df0e20e00e6a21e10e20e00e20e10e6a21e20e20e10e20e20e6a21e30e20e20e20e30e6a21e40e" - "20e30e20e40e6a21e50e" - "20e40e20e50e6a21e60e20e50e20e60e6a21e70e20e60e20e70e6a21e80e20e70e20e80e6a21e90e20e80e20e90e6a" - "21ea0e20e90e20ea0e6a" - "21eb0e20ea0e20eb0e6a21ec0e20eb0e20ec0e6a21ed0e20ec0e20ed0e6a21ee0e20ed0e20ee0e6a21ef0e20ee0e20" - "ef0e6a21f00e20ef0e20" - "f00e6a21f10e20f00e20f10e6a21f20e20f10e20f20e6a21f30e20f20e20f30e6a21f40e20f30e20f40e6a21f50e20" - "f40e20f50e6a21f60e20" + "0c20ee0c20ef0c6a21f00c20ef0c20f00c6a21f10c20f00c20f10c6a21f20c20f10c20f20c6a21f30c20f20c20f30c" + "6a21f40c20f30c20f40c6a21f50c20f40c20f50c6a21f60c20f50c20f60c6a21f70c20f60c20f70c6a21f80c20f70c" + "20f80c6a21f90c20f80c20f90c6a21fa0c20f90c20fa0c6a21fb0c20fa0c20fb0c6a21fc0c20fb0c20fc0c6a21fd0c" + "20fc0c20fd0c6a21fe0c20fd0c20fe0c6a21ff0c20fe0c20ff0c6a21800d20ff0c20800d6a21810d20800d20810d6a" + "21820d20810d20820d6a21830d20820d20830d6a21840d20830d20840d6a21850d20840d20850d6a21860d20850d20" + "860d6a21870d20860d20870d6a21880d20870d20880d6a21890d20880d20890d6a218a0d20890d208a0d6a218b0d20" + "8a0d208b0d6a218c0d208b0d208c0d6a218d0d208c0d208d0d6a218e0d208d0d208e0d6a218f0d208e0d208f0d6a21" + "900d208f0d20900d6a21910d20900d20910d6a21920d20910d20920d6a21930d20920d20930d6a21940d20930d2094" + "0d6a21950d20940d20950d6a21960d20950d20960d6a21970d20960d20970d6a21980d20970d20980d6a21990d2098" + "0d20990d6a219a0d20990d209a0d6a219b0d209a0d209b0d6a219c0d209b0d209c0d6a219d0d209c0d209d0d6a219e" + "0d209d0d209e0d6a219f0d209e0d209f0d6a21a00d209f0d20a00d6a21a10d20a00d20a10d6a21a20d20a10d20a20d" + "6a21a30d20a20d20a30d6a21a40d20a30d20a40d6a21a50d20a40d20a50d6a21a60d20a50d20a60d6a21a70d20a60d" + "20a70d6a21a80d20a70d20a80d6a21a90d20a80d20a90d6a21aa0d20a90d20aa0d6a21ab0d20aa0d20ab0d6a21ac0d" + "20ab0d20ac0d6a21ad0d20ac0d20ad0d6a21ae0d20ad0d20ae0d6a21af0d20ae0d20af0d6a21b00d20af0d20b00d6a" + "21b10d20b00d20b10d6a21b20d20b10d20b20d6a21b30d20b20d20b30d6a21b40d20b30d20b40d6a21b50d20b40d20" + "b50d6a21b60d20b50d20b60d6a21b70d20b60d20b70d6a21b80d20b70d20b80d6a21b90d20b80d20b90d6a21ba0d20" + "b90d20ba0d6a21bb0d20ba0d20bb0d6a21bc0d20bb0d20bc0d6a21bd0d20bc0d20bd0d6a21be0d20bd0d20be0d6a21" + "bf0d20be0d20bf0d6a21c00d20bf0d20c00d6a21c10d20c00d20c10d6a21c20d20c10d20c20d6a21c30d20c20d20c3" + "0d6a21c40d20c30d20c40d6a21c50d20c40d20c50d6a21c60d20c50d20c60d6a21c70d20c60d20c70d6a21c80d20c7" + "0d20c80d6a21c90d20c80d20c90d6a21ca0d20c90d20ca0d6a21cb0d20ca0d20cb0d6a21cc0d20cb0d20cc0d6a21cd" + "0d20cc0d20cd0d6a21ce0d20cd0d20ce0d6a21cf0d20ce0d20cf0d6a21d00d20cf0d20d00d6a21d10d20d00d20d10d" + "6a21d20d20d10d20d20d6a21d30d20d20d20d30d6a21d40d20d30d20d40d6a21d50d20d40d20d50d6a21d60d20d50d" + "20d60d6a21d70d20d60d20d70d6a21d80d20d70d20d80d6a21d90d20d80d20d90d6a21da0d20d90d20da0d6a21db0d" + "20da0d20db0d6a21dc0d20db0d20dc0d6a21dd0d20dc0d20dd0d6a21de0d20dd0d20de0d6a21df0d20de0d20df0d6a" + "21e00d20df0d20e00d6a21e10d20e00d20e10d6a21e20d20e10d20e20d6a21e30d20e20d20e30d6a21e40d20e30d20" + "e40d6a21e50d20e40d20e50d6a21e60d20e50d20e60d6a21e70d20e60d20e70d6a21e80d20e70d20e80d6a21e90d20" + "e80d20e90d6a21ea0d20e90d20ea0d6a21eb0d20ea0d20eb0d6a21ec0d20eb0d20ec0d6a21ed0d20ec0d20ed0d6a21" + "ee0d20ed0d20ee0d6a21ef0d20ee0d20ef0d6a21f00d20ef0d20f00d6a21f10d20f00d20f10d6a21f20d20f10d20f2" + "0d6a21f30d20f20d20f30d6a21f40d20f30d20f40d6a21f50d20f40d20f50d6a21f60d20f50d20f60d6a21f70d20f6" + "0d20f70d6a21f80d20f70d20f80d6a21f90d20f80d20f90d6a21fa0d20f90d20fa0d6a21fb0d20fa0d20fb0d6a21fc" + "0d20fb0d20fc0d6a21fd0d20fc0d20fd0d6a21fe0d20fd0d20fe0d6a21ff0d20fe0d20ff0d6a21800e20ff0d20800e" + "6a21810e20800e20810e6a21820e20810e20820e6a21830e20820e20830e6a21840e20830e20840e6a21850e20840e" + "20850e6a21860e20850e20860e6a21870e20860e20870e6a21880e20870e20880e6a21890e20880e20890e6a218a0e" + "20890e208a0e6a218b0e208a0e208b0e6a218c0e208b0e208c0e6a218d0e208c0e208d0e6a218e0e208d0e208e0e6a" + "218f0e208e0e208f0e6a21900e208f0e20900e6a21910e20900e20910e6a21920e20910e20920e6a21930e20920e20" + "930e6a21940e20930e20940e6a21950e20940e20950e6a21960e20950e20960e6a21970e20960e20970e6a21980e20" + "970e20980e6a21990e20980e20990e6a219a0e20990e209a0e6a219b0e209a0e209b0e6a219c0e209b0e209c0e6a21" + "9d0e209c0e209d0e6a219e0e209d0e209e0e6a219f0e209e0e209f0e6a21a00e209f0e20a00e6a21a10e20a00e20a1" + "0e6a21a20e20a10e20a20e6a21a30e20a20e20a30e6a21a40e20a30e20a40e6a21a50e20a40e20a50e6a21a60e20a5" + "0e20a60e6a21a70e20a60e20a70e6a21a80e20a70e20a80e6a21a90e20a80e20a90e6a21aa0e20a90e20aa0e6a21ab" + "0e20aa0e20ab0e6a21ac0e20ab0e20ac0e6a21ad0e20ac0e20ad0e6a21ae0e20ad0e20ae0e6a21af0e20ae0e20af0e" + "6a21b00e20af0e20b00e6a21b10e20b00e20b10e6a21b20e20b10e20b20e6a21b30e20b20e20b30e6a21b40e20b30e" + "20b40e6a21b50e20b40e20b50e6a21b60e20b50e20b60e6a21b70e20b60e20b70e6a21b80e20b70e20b80e6a21b90e" + "20b80e20b90e6a21ba0e20b90e20ba0e6a21bb0e20ba0e20bb0e6a21bc0e20bb0e20bc0e6a21bd0e20bc0e20bd0e6a" + "21be0e20bd0e20be0e6a21bf0e20be0e20bf0e6a21c00e20bf0e20c00e6a21c10e20c00e20c10e6a21c20e20c10e20" + "c20e6a21c30e20c20e20c30e6a21c40e20c30e20c40e6a21c50e20c40e20c50e6a21c60e20c50e20c60e6a21c70e20" + "c60e20c70e6a21c80e20c70e20c80e6a21c90e20c80e20c90e6a21ca0e20c90e20ca0e6a21cb0e20ca0e20cb0e6a21" + "cc0e20cb0e20cc0e6a21cd0e20cc0e20cd0e6a21ce0e20cd0e20ce0e6a21cf0e20ce0e20cf0e6a21d00e20cf0e20d0" + "0e6a21d10e20d00e20d10e6a21d20e20d10e20d20e6a21d30e20d20e20d30e6a21d40e20d30e20d40e6a21d50e20d4" + "0e20d50e6a21d60e20d50e20d60e6a21d70e20d60e20d70e6a21d80e20d70e20d80e6a21d90e20d80e20d90e6a21da" + "0e20d90e20da0e6a21db0e20da0e20db0e6a21dc0e20db0e20dc0e6a21dd0e20dc0e20dd0e6a21de0e20dd0e20de0e" + "6a21df0e20de0e20df0e6a21e00e20df0e20e00e6a21e10e20e00e20e10e6a21e20e20e10e20e20e6a21e30e20e20e" + "20e30e6a21e40e20e30e20e40e6a21e50e20e40e20e50e6a21e60e20e50e20e60e6a21e70e20e60e20e70e6a21e80e" + "20e70e20e80e6a21e90e20e80e20e90e6a21ea0e20e90e20ea0e6a21eb0e20ea0e20eb0e6a21ec0e20eb0e20ec0e6a" + "21ed0e20ec0e20ed0e6a21ee0e20ed0e20ee0e6a21ef0e20ee0e20ef0e6a21f00e20ef0e20f00e6a21f10e20f00e20" + "f10e6a21f20e20f10e20f20e6a21f30e20f20e20f30e6a21f40e20f30e20f40e6a21f50e20f40e20f50e6a21f60e20" "f50e20f60e6a21f70e20f60e20f70e6a21f80e20f70e20f80e6a21f90e20f80e20f90e6a21fa0e20f90e20fa0e6a21" - "fb0e20fa0e20fb0e6a21" - "fc0e20fb0e20fc0e6a21fd0e20fc0e20fd0e6a21fe0e20fd0e20fe0e6a21ff0e20fe0e20ff0e6a21800f20ff0e2080" - "0f6a21810f20800f2081" - "0f6a21820f20810f20820f6a21830f20820f20830f6a21840f20830f20840f6a21850f20840f20850f6a21860f2085" - "0f20860f6a21870f2086" - "0f20870f6a21880f20870f20880f6a21890f20880f20890f6a218a0f20890f208a0f6a218b0f208a0f208b0f6a218c" - "0f208b0f208c0f6a218d" - "0f208c0f208d0f6a218e0f208d0f208e0f6a218f0f208e0f208f0f6a21900f208f0f20900f6a21910f20900f20910f" - "6a21920f20910f20920f" - "6a21930f20920f20930f6a21940f20930f20940f6a21950f20940f20950f6a21960f20950f20960f6a21970f20960f" - "20970f6a21980f20970f" - "20980f6a21990f20980f20990f6a219a0f20990f209a0f6a219b0f209a0f209b0f6a219c0f209b0f209c0f6a219d0f" - "209c0f209d0f6a219e0f" - "209d0f209e0f6a219f0f209e0f209f0f6a21a00f209f0f20a00f6a21a10f20a00f20a10f6a21a20f20a10f20a20f6a" - "21a30f20a20f20a30f6a" - "21a40f20a30f20a40f6a21a50f20a40f20a50f6a21a60f20a50f20a60f6a21a70f20a60f20a70f6a21a80f20a70f20" - "a80f6a21a90f20a80f20" - "a90f6a21aa0f20a90f20aa0f6a21ab0f20aa0f20ab0f6a21ac0f20ab0f20ac0f6a21ad0f20ac0f20ad0f6a21ae0f20" - "ad0f20ae0f6a21af0f20" - "ae0f20af0f6a21b00f20af0f20b00f6a21b10f20b00f20b10f6a21b20f20b10f20b20f6a21b30f20b20f20b30f6a21" - "b40f20b30f20b40f6a21" - "b50f20b40f20b50f6a21b60f20b50f20b60f6a21b70f20b60f20b70f6a21b80f20b70f20b80f6a21b90f20b80f20b9" - "0f6a21ba0f20b90f20ba" - "0f6a21bb0f20ba0f20bb0f6a21bc0f20bb0f20bc0f6a21bd0f20bc0f20bd0f6a21be0f20bd0f20be0f6a21bf0f20be" - "0f20bf0f6a21c00f20bf" - "0f20c00f6a21c10f20c00f20c10f6a21c20f20c10f20c20f6a21c30f20c20f20c30f6a21c40f20c30f20c40f6a21c5" - "0f20c40f20c50f6a21c6" - "0f20c50f20c60f6a21c70f20c60f20c70f6a21c80f20c70f20c80f6a21c90f20c80f20c90f6a21ca0f20c90f20ca0f" - "6a21cb0f20ca0f20cb0f" - "6a21cc0f20cb0f20cc0f6a21cd0f20cc0f20cd0f6a21ce0f20cd0f20ce0f6a21cf0f20ce0f20cf0f6a21d00f20cf0f" - "20d00f6a21d10f20d00f" - "20d10f6a21d20f20d10f20d20f6a21d30f20d20f20d30f6a21d40f20d30f20d40f6a21d50f20d40f20d50f6a21d60f" - "20d50f20d60f6a21d70f" - "20d60f20d70f6a21d80f20d70f20d80f6a21d90f20d80f20d90f6a21da0f20d90f20da0f6a21db0f20da0f20db0f6a" - "21dc0f20db0f20dc0f6a" - "21dd0f20dc0f20dd0f6a21de0f20dd0f20de0f6a21df0f20de0f20df0f6a21e00f20df0f20e00f6a21e10f20e00f20" - "e10f6a21e20f20e10f20" - "e20f6a21e30f20e20f20e30f6a21e40f20e30f20e40f6a21e50f20e40f20e50f6a21e60f20e50f20e60f6a21e70f20" - "e60f20e70f6a21e80f20" - "e70f20e80f6a21e90f20e80f20e90f6a21ea0f20e90f20ea0f6a21eb0f20ea0f20eb0f6a21ec0f20eb0f20ec0f6a21" - "ed0f20ec0f20ed0f6a21" - "ee0f20ed0f20ee0f6a21ef0f20ee0f20ef0f6a21f00f20ef0f20f00f6a21f10f20f00f20f10f6a21f20f20f10f20f2" - "0f6a21f30f20f20f20f3" - "0f6a21f40f20f30f20f40f6a21f50f20f40f20f50f6a21f60f20f50f20f60f6a21f70f20f60f20f70f6a21f80f20f7" - "0f20f80f6a21f90f20f8" - "0f20f90f6a21fa0f20f90f20fa0f6a21fb0f20fa0f20fb0f6a21fc0f20fb0f20fc0f6a21fd0f20fc0f20fd0f6a21fe" - "0f20fd0f20fe0f6a21ff" - "0f20fe0f20ff0f6a21801020ff0f2080106a2181102080102081106a2182102081102082106a218310208210208310" - "6a218410208310208410" - "6a2185102084102085106a2186102085102086106a2187102086102087106a2188102087102088106a218910208810" - "2089106a218a10208910" - "208a106a218b10208a10208b106a218c10208b10208c106a218d10208c10208d106a218e10208d10208e106a218f10" - "208e10208f106a219010" - "208f102090106a2191102090102091106a2192102091102092106a2193102092102093106a2194102093102094106a" - "2195102094102095106a" - "2196102095102096106a2197102096102097106a2198102097102098106a2199102098102099106a219a1020991020" - "9a106a219b10209a1020" - "9b106a219c10209b10209c106a219d10209c10209d106a219e10209d10209e106a219f10209e10209f106a21a01020" - "9f1020a0106a21a11020" - "a01020a1106a21a21020a11020a2106a21a31020a21020a3106a21a41020a31020a4106a21a51020a41020a5106a21" - "a61020a51020a6106a21" - "a71020a61020a7106a21a81020a71020a8106a21a91020a81020a9106a21aa1020a91020aa106a21ab1020aa1020ab" - "106a21ac1020ab1020ac" - "106a21ad1020ac1020ad106a21ae1020ad1020ae106a21af1020ae1020af106a21b01020af1020b0106a21b11020b0" - "1020b1106a21b21020b1" - "1020b2106a21b31020b21020b3106a21b41020b31020b4106a21b51020b41020b5106a21b61020b51020b6106a21b7" - "1020b61020b7106a21b8" - "1020b71020b8106a21b91020b81020b9106a21ba1020b91020ba106a21bb1020ba1020bb106a21bc1020bb1020bc10" - "6a21bd1020bc1020bd10" - "6a21be1020bd1020be106a21bf1020be1020bf106a21c01020bf1020c0106a21c11020c01020c1106a21c21020c110" - "20c2106a21c31020c210" - "20c3106a21c41020c31020c4106a21c51020c41020c5106a21c61020c51020c6106a21c71020c61020c7106a21c810" - "20c71020c8106a21c910" - "20c81020c9106a21ca1020c91020ca106a21cb1020ca1020cb106a21cc1020cb1020cc106a21cd1020cc1020cd106a" - "21ce1020cd1020ce106a" - "21cf1020ce1020cf106a21d01020cf1020d0106a21d11020d01020d1106a21d21020d11020d2106a21d31020d21020" - "d3106a21d41020d31020" - "d4106a21d51020d41020d5106a21d61020d51020d6106a21d71020d61020d7106a21d81020d71020d8106a21d91020" - "d81020d9106a21da1020" - "d91020da106a21db1020da1020db106a21dc1020db1020dc106a21dd1020dc1020dd106a21de1020dd1020de106a21" - "df1020de1020df106a21" - "e01020df1020e0106a21e11020e01020e1106a21e21020e11020e2106a21e31020e21020e3106a21e41020e31020e4" - "106a21e51020e41020e5" - "106a21e61020e51020e6106a21e71020e61020e7106a21e81020e71020e8106a21e91020e81020e9106a21ea1020e9" - "1020ea106a21eb1020ea" - "1020eb106a21ec1020eb1020ec106a21ed1020ec1020ed106a21ee1020ed1020ee106a21ef1020ee1020ef106a21f0" - "1020ef1020f0106a21f1" - "1020f01020f1106a21f21020f11020f2106a21f31020f21020f3106a21f41020f31020f4106a21f51020f41020f510" - "6a21f61020f51020f610" - "6a21f71020f61020f7106a21f81020f71020f8106a21f91020f81020f9106a21fa1020f91020fa106a21fb1020fa10" - "20fb106a21fc1020fb10" - "20fc106a21fd1020fc1020fd106a21fe1020fd1020fe106a21ff1020fe1020ff106a21801120ff102080116a218111" - "2080112081116a218211" + "fb0e20fa0e20fb0e6a21fc0e20fb0e20fc0e6a21fd0e20fc0e20fd0e6a21fe0e20fd0e20fe0e6a21ff0e20fe0e20ff" + "0e6a21800f20ff0e20800f6a21810f20800f20810f6a21820f20810f20820f6a21830f20820f20830f6a21840f2083" + "0f20840f6a21850f20840f20850f6a21860f20850f20860f6a21870f20860f20870f6a21880f20870f20880f6a2189" + "0f20880f20890f6a218a0f20890f208a0f6a218b0f208a0f208b0f6a218c0f208b0f208c0f6a218d0f208c0f208d0f" + "6a218e0f208d0f208e0f6a218f0f208e0f208f0f6a21900f208f0f20900f6a21910f20900f20910f6a21920f20910f" + "20920f6a21930f20920f20930f6a21940f20930f20940f6a21950f20940f20950f6a21960f20950f20960f6a21970f" + "20960f20970f6a21980f20970f20980f6a21990f20980f20990f6a219a0f20990f209a0f6a219b0f209a0f209b0f6a" + "219c0f209b0f209c0f6a219d0f209c0f209d0f6a219e0f209d0f209e0f6a219f0f209e0f209f0f6a21a00f209f0f20" + "a00f6a21a10f20a00f20a10f6a21a20f20a10f20a20f6a21a30f20a20f20a30f6a21a40f20a30f20a40f6a21a50f20" + "a40f20a50f6a21a60f20a50f20a60f6a21a70f20a60f20a70f6a21a80f20a70f20a80f6a21a90f20a80f20a90f6a21" + "aa0f20a90f20aa0f6a21ab0f20aa0f20ab0f6a21ac0f20ab0f20ac0f6a21ad0f20ac0f20ad0f6a21ae0f20ad0f20ae" + "0f6a21af0f20ae0f20af0f6a21b00f20af0f20b00f6a21b10f20b00f20b10f6a21b20f20b10f20b20f6a21b30f20b2" + "0f20b30f6a21b40f20b30f20b40f6a21b50f20b40f20b50f6a21b60f20b50f20b60f6a21b70f20b60f20b70f6a21b8" + "0f20b70f20b80f6a21b90f20b80f20b90f6a21ba0f20b90f20ba0f6a21bb0f20ba0f20bb0f6a21bc0f20bb0f20bc0f" + "6a21bd0f20bc0f20bd0f6a21be0f20bd0f20be0f6a21bf0f20be0f20bf0f6a21c00f20bf0f20c00f6a21c10f20c00f" + "20c10f6a21c20f20c10f20c20f6a21c30f20c20f20c30f6a21c40f20c30f20c40f6a21c50f20c40f20c50f6a21c60f" + "20c50f20c60f6a21c70f20c60f20c70f6a21c80f20c70f20c80f6a21c90f20c80f20c90f6a21ca0f20c90f20ca0f6a" + "21cb0f20ca0f20cb0f6a21cc0f20cb0f20cc0f6a21cd0f20cc0f20cd0f6a21ce0f20cd0f20ce0f6a21cf0f20ce0f20" + "cf0f6a21d00f20cf0f20d00f6a21d10f20d00f20d10f6a21d20f20d10f20d20f6a21d30f20d20f20d30f6a21d40f20" + "d30f20d40f6a21d50f20d40f20d50f6a21d60f20d50f20d60f6a21d70f20d60f20d70f6a21d80f20d70f20d80f6a21" + "d90f20d80f20d90f6a21da0f20d90f20da0f6a21db0f20da0f20db0f6a21dc0f20db0f20dc0f6a21dd0f20dc0f20dd" + "0f6a21de0f20dd0f20de0f6a21df0f20de0f20df0f6a21e00f20df0f20e00f6a21e10f20e00f20e10f6a21e20f20e1" + "0f20e20f6a21e30f20e20f20e30f6a21e40f20e30f20e40f6a21e50f20e40f20e50f6a21e60f20e50f20e60f6a21e7" + "0f20e60f20e70f6a21e80f20e70f20e80f6a21e90f20e80f20e90f6a21ea0f20e90f20ea0f6a21eb0f20ea0f20eb0f" + "6a21ec0f20eb0f20ec0f6a21ed0f20ec0f20ed0f6a21ee0f20ed0f20ee0f6a21ef0f20ee0f20ef0f6a21f00f20ef0f" + "20f00f6a21f10f20f00f20f10f6a21f20f20f10f20f20f6a21f30f20f20f20f30f6a21f40f20f30f20f40f6a21f50f" + "20f40f20f50f6a21f60f20f50f20f60f6a21f70f20f60f20f70f6a21f80f20f70f20f80f6a21f90f20f80f20f90f6a" + "21fa0f20f90f20fa0f6a21fb0f20fa0f20fb0f6a21fc0f20fb0f20fc0f6a21fd0f20fc0f20fd0f6a21fe0f20fd0f20" + "fe0f6a21ff0f20fe0f20ff0f6a21801020ff0f2080106a2181102080102081106a2182102081102082106a21831020" + "82102083106a2184102083102084106a2185102084102085106a2186102085102086106a2187102086102087106a21" + "88102087102088106a2189102088102089106a218a10208910208a106a218b10208a10208b106a218c10208b10208c" + "106a218d10208c10208d106a218e10208d10208e106a218f10208e10208f106a219010208f102090106a2191102090" + "102091106a2192102091102092106a2193102092102093106a2194102093102094106a2195102094102095106a2196" + "102095102096106a2197102096102097106a2198102097102098106a2199102098102099106a219a10209910209a10" + "6a219b10209a10209b106a219c10209b10209c106a219d10209c10209d106a219e10209d10209e106a219f10209e10" + "209f106a21a010209f1020a0106a21a11020a01020a1106a21a21020a11020a2106a21a31020a21020a3106a21a410" + "20a31020a4106a21a51020a41020a5106a21a61020a51020a6106a21a71020a61020a7106a21a81020a71020a8106a" + "21a91020a81020a9106a21aa1020a91020aa106a21ab1020aa1020ab106a21ac1020ab1020ac106a21ad1020ac1020" + "ad106a21ae1020ad1020ae106a21af1020ae1020af106a21b01020af1020b0106a21b11020b01020b1106a21b21020" + "b11020b2106a21b31020b21020b3106a21b41020b31020b4106a21b51020b41020b5106a21b61020b51020b6106a21" + "b71020b61020b7106a21b81020b71020b8106a21b91020b81020b9106a21ba1020b91020ba106a21bb1020ba1020bb" + "106a21bc1020bb1020bc106a21bd1020bc1020bd106a21be1020bd1020be106a21bf1020be1020bf106a21c01020bf" + "1020c0106a21c11020c01020c1106a21c21020c11020c2106a21c31020c21020c3106a21c41020c31020c4106a21c5" + "1020c41020c5106a21c61020c51020c6106a21c71020c61020c7106a21c81020c71020c8106a21c91020c81020c910" + "6a21ca1020c91020ca106a21cb1020ca1020cb106a21cc1020cb1020cc106a21cd1020cc1020cd106a21ce1020cd10" + "20ce106a21cf1020ce1020cf106a21d01020cf1020d0106a21d11020d01020d1106a21d21020d11020d2106a21d310" + "20d21020d3106a21d41020d31020d4106a21d51020d41020d5106a21d61020d51020d6106a21d71020d61020d7106a" + "21d81020d71020d8106a21d91020d81020d9106a21da1020d91020da106a21db1020da1020db106a21dc1020db1020" + "dc106a21dd1020dc1020dd106a21de1020dd1020de106a21df1020de1020df106a21e01020df1020e0106a21e11020" + "e01020e1106a21e21020e11020e2106a21e31020e21020e3106a21e41020e31020e4106a21e51020e41020e5106a21" + "e61020e51020e6106a21e71020e61020e7106a21e81020e71020e8106a21e91020e81020e9106a21ea1020e91020ea" + "106a21eb1020ea1020eb106a21ec1020eb1020ec106a21ed1020ec1020ed106a21ee1020ed1020ee106a21ef1020ee" + "1020ef106a21f01020ef1020f0106a21f11020f01020f1106a21f21020f11020f2106a21f31020f21020f3106a21f4" + "1020f31020f4106a21f51020f41020f5106a21f61020f51020f6106a21f71020f61020f7106a21f81020f71020f810" + "6a21f91020f81020f9106a21fa1020f91020fa106a21fb1020fa1020fb106a21fc1020fb1020fc106a21fd1020fc10" + "20fd106a21fe1020fd1020fe106a21ff1020fe1020ff106a21801120ff102080116a2181112080112081116a218211" "2081112082116a2183112082112083116a2184112083112084116a2185112084112085116a2186112085112086116a" - "2187112086112087116a" - "2188112087112088116a2189112088112089116a218a11208911208a116a218b11208a11208b116a218c11208b1120" - "8c116a218d11208c1120" - "8d116a218e11208d11208e116a218f11208e11208f116a219011208f112090116a2191112090112091116a21921120" - "91112092116a21931120" - "92112093116a2194112093112094116a2195112094112095116a2196112095112096116a2197112096112097116a21" - "98112097112098116a21" - "99112098112099116a219a11209911209a116a219b11209a11209b116a219c11209b11209c116a219d11209c11209d" - "116a219e11209d11209e" - "116a219f11209e11209f116a21a011209f1120a0116a21a11120a01120a1116a21a21120a11120a2116a21a31120a2" - "1120a3116a21a41120a3" - "1120a4116a21a51120a41120a5116a21a61120a51120a6116a21a71120a61120a7116a21a81120a71120a8116a21a9" - "1120a81120a9116a21aa" - "1120a91120aa116a21ab1120aa1120ab116a21ac1120ab1120ac116a21ad1120ac1120ad116a21ae1120ad1120ae11" - "6a21af1120ae1120af11" - "6a21b01120af1120b0116a21b11120b01120b1116a21b21120b11120b2116a21b31120b21120b3116a21b41120b311" - "20b4116a21b51120b411" - "20b5116a21b61120b51120b6116a21b71120b61120b7116a21b81120b71120b8116a21b91120b81120b9116a21ba11" - "20b91120ba116a21bb11" - "20ba1120bb116a21bc1120bb1120bc116a21bd1120bc1120bd116a21be1120bd1120be116a21bf1120be1120bf116a" - "21c01120bf1120c0116a" - "21c11120c01120c1116a21c21120c11120c2116a21c31120c21120c3116a21c41120c31120c4116a21c51120c41120" - "c5116a21c61120c51120" - "c6116a21c71120c61120c7116a21c81120c71120c8116a21c91120c81120c9116a21ca1120c91120ca116a21cb1120" - "ca1120cb116a21cc1120" - "cb1120cc116a21cd1120cc1120cd116a21ce1120cd1120ce116a21cf1120ce1120cf116a21d01120cf1120d0116a21" - "d11120d01120d1116a21" - "d21120d11120d2116a21d31120d21120d3116a21d41120d31120d4116a21d51120d41120d5116a21d61120d51120d6" - "116a21d71120d61120d7" - "116a21d81120d71120d8116a21d91120d81120d9116a21da1120d91120da116a21db1120da1120db116a21dc1120db" - "1120dc116a21dd1120dc" - "1120dd116a21de1120dd1120de116a21df1120de1120df116a21e01120df1120e0116a21e11120e01120e1116a21e2" - "1120e11120e2116a21e3" - "1120e21120e3116a21e41120e31120e4116a21e51120e41120e5116a21e61120e51120e6116a21e71120e61120e711" - "6a21e81120e71120e811" - "6a21e91120e81120e9116a21ea1120e91120ea116a21eb1120ea1120eb116a21ec1120eb1120ec116a21ed1120ec11" - "20ed116a21ee1120ed11" - "20ee116a21ef1120ee1120ef116a21f01120ef1120f0116a21f11120f01120f1116a21f21120f11120f2116a21f311" - "20f21120f3116a21f411" - "20f31120f4116a21f51120f41120f5116a21f61120f51120f6116a21f71120f61120f7116a21f81120f71120f8116a" - "21f91120f81120f9116a" - "21fa1120f91120fa116a21fb1120fa1120fb116a21fc1120fb1120fc116a21fd1120fc1120fd116a21fe1120fd1120" - "fe116a21ff1120fe1120" - "ff116a21801220ff112080126a2181122080122081126a2182122081122082126a2183122082122083126a21841220" - "83122084126a21851220" - "84122085126a2186122085122086126a2187122086122087126a2188122087122088126a2189122088122089126a21" - "8a12208912208a126a21" - "8b12208a12208b126a218c12208b12208c126a218d12208c12208d126a218e12208d12208e126a218f12208e12208f" - "126a219012208f122090" - "126a2191122090122091126a2192122091122092126a2193122092122093126a2194122093122094126a2195122094" - "122095126a2196122095" - "122096126a2197122096122097126a2198122097122098126a2199122098122099126a219a12209912209a126a219b" - "12209a12209b126a219c" - "12209b12209c126a219d12209c12209d126a219e12209d12209e126a219f12209e12209f126a21a012209f1220a012" - "6a21a11220a01220a112" - "6a21a21220a11220a2126a21a31220a21220a3126a21a41220a31220a4126a21a51220a41220a5126a21a61220a512" - "20a6126a21a71220a612" - "20a7126a21a81220a71220a8126a21a91220a81220a9126a21aa1220a91220aa126a21ab1220aa1220ab126a21ac12" - "20ab1220ac126a21ad12" - "20ac1220ad126a21ae1220ad1220ae126a21af1220ae1220af126a21b01220af1220b0126a21b11220b01220b1126a" - "21b21220b11220b2126a" - "21b31220b21220b3126a21b41220b31220b4126a21b51220b41220b5126a21b61220b51220b6126a21b71220b61220" - "b7126a21b81220b71220" - "b8126a21b91220b81220b9126a21ba1220b91220ba126a21bb1220ba1220bb126a21bc1220bb1220bc126a21bd1220" - "bc1220bd126a21be1220" - "bd1220be126a21bf1220be1220bf126a21c01220bf1220c0126a21c11220c01220c1126a21c21220c11220c2126a21" - "c31220c21220c3126a21" - "c41220c31220c4126a21c51220c41220c5126a21c61220c51220c6126a21c71220c61220c7126a21c81220c71220c8" - "126a21c91220c81220c9" - "126a21ca1220c91220ca126a21cb1220ca1220cb126a21cc1220cb1220cc126a21cd1220cc1220cd126a21ce1220cd" - "1220ce126a21cf1220ce" - "1220cf126a21d01220cf1220d0126a21d11220d01220d1126a21d21220d11220d2126a21d31220d21220d3126a21d4" - "1220d31220d4126a21d5" - "1220d41220d5126a21d61220d51220d6126a21d71220d61220d7126a21d81220d71220d8126a21d91220d81220d912" - "6a21da1220d91220da12" - "6a21db1220da1220db126a21dc1220db1220dc126a21dd1220dc1220dd126a21de1220dd1220de126a21df1220de12" - "20df126a21e01220df12" - "20e0126a21e11220e01220e1126a21e21220e11220e2126a21e31220e21220e3126a21e41220e31220e4126a21e512" - "20e41220e5126a21e612" - "20e51220e6126a21e71220e61220e7126a21e81220e71220e8126a21e91220e81220e9126a21ea1220e91220ea126a" - "21eb1220ea1220eb126a" - "21ec1220eb1220ec126a21ed1220ec1220ed126a21ee1220ed1220ee126a21ef1220ee1220ef126a21f01220ef1220" - "f0126a21f11220f01220" - "f1126a21f21220f11220f2126a21f31220f21220f3126a21f41220f31220f4126a21f51220f41220f5126a21f61220" - "f51220f6126a21f71220" - "f61220f7126a21f81220f71220f8126a21f91220f81220f9126a21fa1220f91220fa126a21fb1220fa1220fb126a21" - "fc1220fb1220fc126a21" - "fd1220fc1220fd126a21fe1220fd1220fe126a21ff1220fe1220ff126a21801320ff122080136a2181132080132081" - "136a2182132081132082" - "136a2183132082132083136a2184132083132084136a2185132084132085136a2186132085132086136a2187132086" - "132087136a2188132087" - "132088136a2189132088132089136a218a13208913208a136a218b13208a13208b136a218c13208b13208c136a218d" - "13208c13208d136a218e" + "2187112086112087116a2188112087112088116a2189112088112089116a218a11208911208a116a218b11208a1120" + "8b116a218c11208b11208c116a218d11208c11208d116a218e11208d11208e116a218f11208e11208f116a21901120" + "8f112090116a2191112090112091116a2192112091112092116a2193112092112093116a2194112093112094116a21" + "95112094112095116a2196112095112096116a2197112096112097116a2198112097112098116a2199112098112099" + "116a219a11209911209a116a219b11209a11209b116a219c11209b11209c116a219d11209c11209d116a219e11209d" + "11209e116a219f11209e11209f116a21a011209f1120a0116a21a11120a01120a1116a21a21120a11120a2116a21a3" + "1120a21120a3116a21a41120a31120a4116a21a51120a41120a5116a21a61120a51120a6116a21a71120a61120a711" + "6a21a81120a71120a8116a21a91120a81120a9116a21aa1120a91120aa116a21ab1120aa1120ab116a21ac1120ab11" + "20ac116a21ad1120ac1120ad116a21ae1120ad1120ae116a21af1120ae1120af116a21b01120af1120b0116a21b111" + "20b01120b1116a21b21120b11120b2116a21b31120b21120b3116a21b41120b31120b4116a21b51120b41120b5116a" + "21b61120b51120b6116a21b71120b61120b7116a21b81120b71120b8116a21b91120b81120b9116a21ba1120b91120" + "ba116a21bb1120ba1120bb116a21bc1120bb1120bc116a21bd1120bc1120bd116a21be1120bd1120be116a21bf1120" + "be1120bf116a21c01120bf1120c0116a21c11120c01120c1116a21c21120c11120c2116a21c31120c21120c3116a21" + "c41120c31120c4116a21c51120c41120c5116a21c61120c51120c6116a21c71120c61120c7116a21c81120c71120c8" + "116a21c91120c81120c9116a21ca1120c91120ca116a21cb1120ca1120cb116a21cc1120cb1120cc116a21cd1120cc" + "1120cd116a21ce1120cd1120ce116a21cf1120ce1120cf116a21d01120cf1120d0116a21d11120d01120d1116a21d2" + "1120d11120d2116a21d31120d21120d3116a21d41120d31120d4116a21d51120d41120d5116a21d61120d51120d611" + "6a21d71120d61120d7116a21d81120d71120d8116a21d91120d81120d9116a21da1120d91120da116a21db1120da11" + "20db116a21dc1120db1120dc116a21dd1120dc1120dd116a21de1120dd1120de116a21df1120de1120df116a21e011" + "20df1120e0116a21e11120e01120e1116a21e21120e11120e2116a21e31120e21120e3116a21e41120e31120e4116a" + "21e51120e41120e5116a21e61120e51120e6116a21e71120e61120e7116a21e81120e71120e8116a21e91120e81120" + "e9116a21ea1120e91120ea116a21eb1120ea1120eb116a21ec1120eb1120ec116a21ed1120ec1120ed116a21ee1120" + "ed1120ee116a21ef1120ee1120ef116a21f01120ef1120f0116a21f11120f01120f1116a21f21120f11120f2116a21" + "f31120f21120f3116a21f41120f31120f4116a21f51120f41120f5116a21f61120f51120f6116a21f71120f61120f7" + "116a21f81120f71120f8116a21f91120f81120f9116a21fa1120f91120fa116a21fb1120fa1120fb116a21fc1120fb" + "1120fc116a21fd1120fc1120fd116a21fe1120fd1120fe116a21ff1120fe1120ff116a21801220ff112080126a2181" + "122080122081126a2182122081122082126a2183122082122083126a2184122083122084126a218512208412208512" + "6a2186122085122086126a2187122086122087126a2188122087122088126a2189122088122089126a218a12208912" + "208a126a218b12208a12208b126a218c12208b12208c126a218d12208c12208d126a218e12208d12208e126a218f12" + "208e12208f126a219012208f122090126a2191122090122091126a2192122091122092126a2193122092122093126a" + "2194122093122094126a2195122094122095126a2196122095122096126a2197122096122097126a21981220971220" + "98126a2199122098122099126a219a12209912209a126a219b12209a12209b126a219c12209b12209c126a219d1220" + "9c12209d126a219e12209d12209e126a219f12209e12209f126a21a012209f1220a0126a21a11220a01220a1126a21" + "a21220a11220a2126a21a31220a21220a3126a21a41220a31220a4126a21a51220a41220a5126a21a61220a51220a6" + "126a21a71220a61220a7126a21a81220a71220a8126a21a91220a81220a9126a21aa1220a91220aa126a21ab1220aa" + "1220ab126a21ac1220ab1220ac126a21ad1220ac1220ad126a21ae1220ad1220ae126a21af1220ae1220af126a21b0" + "1220af1220b0126a21b11220b01220b1126a21b21220b11220b2126a21b31220b21220b3126a21b41220b31220b412" + "6a21b51220b41220b5126a21b61220b51220b6126a21b71220b61220b7126a21b81220b71220b8126a21b91220b812" + "20b9126a21ba1220b91220ba126a21bb1220ba1220bb126a21bc1220bb1220bc126a21bd1220bc1220bd126a21be12" + "20bd1220be126a21bf1220be1220bf126a21c01220bf1220c0126a21c11220c01220c1126a21c21220c11220c2126a" + "21c31220c21220c3126a21c41220c31220c4126a21c51220c41220c5126a21c61220c51220c6126a21c71220c61220" + "c7126a21c81220c71220c8126a21c91220c81220c9126a21ca1220c91220ca126a21cb1220ca1220cb126a21cc1220" + "cb1220cc126a21cd1220cc1220cd126a21ce1220cd1220ce126a21cf1220ce1220cf126a21d01220cf1220d0126a21" + "d11220d01220d1126a21d21220d11220d2126a21d31220d21220d3126a21d41220d31220d4126a21d51220d41220d5" + "126a21d61220d51220d6126a21d71220d61220d7126a21d81220d71220d8126a21d91220d81220d9126a21da1220d9" + "1220da126a21db1220da1220db126a21dc1220db1220dc126a21dd1220dc1220dd126a21de1220dd1220de126a21df" + "1220de1220df126a21e01220df1220e0126a21e11220e01220e1126a21e21220e11220e2126a21e31220e21220e312" + "6a21e41220e31220e4126a21e51220e41220e5126a21e61220e51220e6126a21e71220e61220e7126a21e81220e712" + "20e8126a21e91220e81220e9126a21ea1220e91220ea126a21eb1220ea1220eb126a21ec1220eb1220ec126a21ed12" + "20ec1220ed126a21ee1220ed1220ee126a21ef1220ee1220ef126a21f01220ef1220f0126a21f11220f01220f1126a" + "21f21220f11220f2126a21f31220f21220f3126a21f41220f31220f4126a21f51220f41220f5126a21f61220f51220" + "f6126a21f71220f61220f7126a21f81220f71220f8126a21f91220f81220f9126a21fa1220f91220fa126a21fb1220" + "fa1220fb126a21fc1220fb1220fc126a21fd1220fc1220fd126a21fe1220fd1220fe126a21ff1220fe1220ff126a21" + "801320ff122080136a2181132080132081136a2182132081132082136a2183132082132083136a2184132083132084" + "136a2185132084132085136a2186132085132086136a2187132086132087136a2188132087132088136a2189132088" + "132089136a218a13208913208a136a218b13208a13208b136a218c13208b13208c136a218d13208c13208d136a218e" "13208d13208e136a218f13208e13208f136a219013208f132090136a2191132090132091136a219213209113209213" - "6a219313209213209313" - "6a2194132093132094136a2195132094132095136a2196132095132096136a2197132096132097136a219813209713" - "2098136a219913209813" - "2099136a219a13209913209a136a219b13209a13209b136a219c13209b13209c136a219d13209c13209d136a219e13" - "209d13209e136a219f13" - "209e13209f136a21a013209f1320a0136a21a11320a01320a1136a21a21320a11320a2136a21a31320a21320a3136a" - "21a41320a31320a4136a" - "21a51320a41320a5136a21a61320a51320a6136a21a71320a61320a7136a21a81320a71320a8136a21a91320a81320" - "a9136a21aa1320a91320" - "aa136a21ab1320aa1320ab136a21ac1320ab1320ac136a21ad1320ac1320ad136a21ae1320ad1320ae136a21af1320" - "ae1320af136a21b01320" - "af1320b0136a21b11320b01320b1136a21b21320b11320b2136a21b31320b21320b3136a21b41320b31320b4136a21" - "b51320b41320b5136a21" - "b61320b51320b6136a21b71320b61320b7136a21b81320b71320b8136a21b91320b81320b9136a21ba1320b91320ba" - "136a21bb1320ba1320bb" - "136a21bc1320bb1320bc136a21bd1320bc1320bd136a21be1320bd1320be136a21bf1320be1320bf136a21c01320bf" - "1320c0136a21c11320c0" - "1320c1136a21c21320c11320c2136a21c31320c21320c3136a21c41320c31320c4136a21c51320c41320c5136a21c6" - "1320c51320c6136a21c7" - "1320c61320c7136a21c81320c71320c8136a21c91320c81320c9136a21ca1320c91320ca136a21cb1320ca1320cb13" - "6a21cc1320cb1320cc13" - "6a21cd1320cc1320cd136a21ce1320cd1320ce136a21cf1320ce1320cf136a21d01320cf1320d0136a21d11320d013" - "20d1136a21d21320d113" - "20d2136a21d31320d21320d3136a21d41320d31320d4136a21d51320d41320d5136a21d61320d51320d6136a21d713" - "20d61320d7136a21d813" - "20d71320d8136a21d91320d81320d9136a21da1320d91320da136a21db1320da1320db136a21dc1320db1320dc136a" - "21dd1320dc1320dd136a" - "21de1320dd1320de136a21df1320de1320df136a21e01320df1320e0136a21e11320e01320e1136a21e21320e11320" - "e2136a21e31320e21320" - "e3136a21e41320e31320e4136a21e51320e41320e5136a21e61320e51320e6136a21e71320e61320e7136a21e81320" - "e71320e8136a21e91320" - "e81320e9136a21ea1320e91320ea136a21eb1320ea1320eb136a21ec1320eb1320ec136a21ed1320ec1320ed136a21" - "ee1320ed1320ee136a21" - "ef1320ee1320ef136a21f01320ef1320f0136a21f11320f01320f1136a21f21320f11320f2136a21f31320f21320f3" - "136a21f41320f31320f4" - "136a21f51320f41320f5136a21f61320f51320f6136a21f71320f61320f7136a21f81320f71320f8136a21f91320f8" - "1320f9136a21fa1320f9" - "1320fa136a21fb1320fa1320fb136a21fc1320fb1320fc136a21fd1320fc1320fd136a21fe1320fd1320fe136a21ff" - "1320fe1320ff136a2180" - "1420ff132080146a2181142080142081146a2182142081142082146a2183142082142083146a218414208314208414" - "6a218514208414208514" - "6a2186142085142086146a2187142086142087146a2188142087142088146a2189142088142089146a218a14208914" - "208a146a218b14208a14" - "208b146a218c14208b14208c146a218d14208c14208d146a218e14208d14208e146a218f14208e14208f146a219014" - "208f142090146a219114" - "2090142091146a2192142091142092146a2193142092142093146a2194142093142094146a2195142094142095146a" - "2196142095142096146a" - "2197142096142097146a2198142097142098146a2199142098142099146a219a14209914209a146a219b14209a1420" - "9b146a219c14209b1420" - "9c146a219d14209c14209d146a219e14209d14209e146a219f14209e14209f146a21a014209f1420a0146a21a11420" - "a01420a1146a21a21420" - "a11420a2146a21a31420a21420a3146a21a41420a31420a4146a21a51420a41420a5146a21a61420a51420a6146a21" - "a71420a61420a7146a21" - "a81420a71420a8146a21a91420a81420a9146a21aa1420a91420aa146a21ab1420aa1420ab146a21ac1420ab1420ac" - "146a21ad1420ac1420ad" - "146a21ae1420ad1420ae146a21af1420ae1420af146a21b01420af1420b0146a21b11420b01420b1146a21b21420b1" - "1420b2146a21b31420b2" - "1420b3146a21b41420b31420b4146a21b51420b41420b5146a21b61420b51420b6146a21b71420b61420b7146a21b8" - "1420b71420b8146a21b9" - "1420b81420b9146a21ba1420b91420ba146a21bb1420ba1420bb146a21bc1420bb1420bc146a21bd1420bc1420bd14" - "6a21be1420bd1420be14" - "6a21bf1420be1420bf146a21c01420bf1420c0146a21c11420c01420c1146a21c21420c11420c2146a21c31420c214" - "20c3146a21c41420c314" - "20c4146a21c51420c41420c5146a21c61420c51420c6146a21c71420c61420c7146a21c81420c71420c8146a21c914" - "20c81420c9146a21ca14" - "20c91420ca146a21cb1420ca1420cb146a21cc1420cb1420cc146a21cd1420cc1420cd146a21ce1420cd1420ce146a" - "21cf1420ce1420cf146a" - "21d01420cf1420d0146a21d11420d01420d1146a21d21420d11420d2146a21d31420d21420d3146a21d41420d31420" - "d4146a21d51420d41420" - "d5146a21d61420d51420d6146a21d71420d61420d7146a21d81420d71420d8146a21d91420d81420d9146a21da1420" - "d91420da146a21db1420" - "da1420db146a21dc1420db1420dc146a21dd1420dc1420dd146a21de1420dd1420de146a21df1420de1420df146a21" - "e01420df1420e0146a21" - "e11420e01420e1146a21e21420e11420e2146a21e31420e21420e3146a21e41420e31420e4146a21e51420e41420e5" - "146a21e61420e51420e6" - "146a21e71420e61420e7146a21e81420e71420e8146a21e91420e81420e9146a21ea1420e91420ea146a21eb1420ea" - "1420eb146a21ec1420eb" - "1420ec146a21ed1420ec1420ed146a21ee1420ed1420ee146a21ef1420ee1420ef146a21f01420ef1420f0146a21f1" - "1420f01420f1146a21f2" - "1420f11420f2146a21f31420f21420f3146a21f41420f31420f4146a21f51420f41420f5146a21f61420f51420f614" - "6a21f71420f61420f714" - "6a21f81420f71420f8146a21f91420f81420f9146a21fa1420f91420fa146a21fb1420fa1420fb146a21fc1420fb14" - "20fc146a21fd1420fc14" - "20fd146a21fe1420fd1420fe146a21ff1420fe1420ff146a21801520ff142080156a2181152080152081156a218215" - "2081152082156a218315" - "2082152083156a2184152083152084156a2185152084152085156a2186152085152086156a2187152086152087156a" - "2188152087152088156a" - "2189152088152089156a218a15208915208a156a218b15208a15208b156a218c15208b15208c156a218d15208c1520" - "8d156a218e15208d1520" - "8e156a218f15208e15208f156a219015208f152090156a2191152090152091156a2192152091152092156a21931520" - "92152093156a21941520" - "93152094156a2195152094152095156a2196152095152096156a2197152096152097156a2198152097152098156a21" - "99152098152099156a21" + "6a2193132092132093136a2194132093132094136a2195132094132095136a2196132095132096136a219713209613" + "2097136a2198132097132098136a2199132098132099136a219a13209913209a136a219b13209a13209b136a219c13" + "209b13209c136a219d13209c13209d136a219e13209d13209e136a219f13209e13209f136a21a013209f1320a0136a" + "21a11320a01320a1136a21a21320a11320a2136a21a31320a21320a3136a21a41320a31320a4136a21a51320a41320" + "a5136a21a61320a51320a6136a21a71320a61320a7136a21a81320a71320a8136a21a91320a81320a9136a21aa1320" + "a91320aa136a21ab1320aa1320ab136a21ac1320ab1320ac136a21ad1320ac1320ad136a21ae1320ad1320ae136a21" + "af1320ae1320af136a21b01320af1320b0136a21b11320b01320b1136a21b21320b11320b2136a21b31320b21320b3" + "136a21b41320b31320b4136a21b51320b41320b5136a21b61320b51320b6136a21b71320b61320b7136a21b81320b7" + "1320b8136a21b91320b81320b9136a21ba1320b91320ba136a21bb1320ba1320bb136a21bc1320bb1320bc136a21bd" + "1320bc1320bd136a21be1320bd1320be136a21bf1320be1320bf136a21c01320bf1320c0136a21c11320c01320c113" + "6a21c21320c11320c2136a21c31320c21320c3136a21c41320c31320c4136a21c51320c41320c5136a21c61320c513" + "20c6136a21c71320c61320c7136a21c81320c71320c8136a21c91320c81320c9136a21ca1320c91320ca136a21cb13" + "20ca1320cb136a21cc1320cb1320cc136a21cd1320cc1320cd136a21ce1320cd1320ce136a21cf1320ce1320cf136a" + "21d01320cf1320d0136a21d11320d01320d1136a21d21320d11320d2136a21d31320d21320d3136a21d41320d31320" + "d4136a21d51320d41320d5136a21d61320d51320d6136a21d71320d61320d7136a21d81320d71320d8136a21d91320" + "d81320d9136a21da1320d91320da136a21db1320da1320db136a21dc1320db1320dc136a21dd1320dc1320dd136a21" + "de1320dd1320de136a21df1320de1320df136a21e01320df1320e0136a21e11320e01320e1136a21e21320e11320e2" + "136a21e31320e21320e3136a21e41320e31320e4136a21e51320e41320e5136a21e61320e51320e6136a21e71320e6" + "1320e7136a21e81320e71320e8136a21e91320e81320e9136a21ea1320e91320ea136a21eb1320ea1320eb136a21ec" + "1320eb1320ec136a21ed1320ec1320ed136a21ee1320ed1320ee136a21ef1320ee1320ef136a21f01320ef1320f013" + "6a21f11320f01320f1136a21f21320f11320f2136a21f31320f21320f3136a21f41320f31320f4136a21f51320f413" + "20f5136a21f61320f51320f6136a21f71320f61320f7136a21f81320f71320f8136a21f91320f81320f9136a21fa13" + "20f91320fa136a21fb1320fa1320fb136a21fc1320fb1320fc136a21fd1320fc1320fd136a21fe1320fd1320fe136a" + "21ff1320fe1320ff136a21801420ff132080146a2181142080142081146a2182142081142082146a21831420821420" + "83146a2184142083142084146a2185142084142085146a2186142085142086146a2187142086142087146a21881420" + "87142088146a2189142088142089146a218a14208914208a146a218b14208a14208b146a218c14208b14208c146a21" + "8d14208c14208d146a218e14208d14208e146a218f14208e14208f146a219014208f142090146a2191142090142091" + "146a2192142091142092146a2193142092142093146a2194142093142094146a2195142094142095146a2196142095" + "142096146a2197142096142097146a2198142097142098146a2199142098142099146a219a14209914209a146a219b" + "14209a14209b146a219c14209b14209c146a219d14209c14209d146a219e14209d14209e146a219f14209e14209f14" + "6a21a014209f1420a0146a21a11420a01420a1146a21a21420a11420a2146a21a31420a21420a3146a21a41420a314" + "20a4146a21a51420a41420a5146a21a61420a51420a6146a21a71420a61420a7146a21a81420a71420a8146a21a914" + "20a81420a9146a21aa1420a91420aa146a21ab1420aa1420ab146a21ac1420ab1420ac146a21ad1420ac1420ad146a" + "21ae1420ad1420ae146a21af1420ae1420af146a21b01420af1420b0146a21b11420b01420b1146a21b21420b11420" + "b2146a21b31420b21420b3146a21b41420b31420b4146a21b51420b41420b5146a21b61420b51420b6146a21b71420" + "b61420b7146a21b81420b71420b8146a21b91420b81420b9146a21ba1420b91420ba146a21bb1420ba1420bb146a21" + "bc1420bb1420bc146a21bd1420bc1420bd146a21be1420bd1420be146a21bf1420be1420bf146a21c01420bf1420c0" + "146a21c11420c01420c1146a21c21420c11420c2146a21c31420c21420c3146a21c41420c31420c4146a21c51420c4" + "1420c5146a21c61420c51420c6146a21c71420c61420c7146a21c81420c71420c8146a21c91420c81420c9146a21ca" + "1420c91420ca146a21cb1420ca1420cb146a21cc1420cb1420cc146a21cd1420cc1420cd146a21ce1420cd1420ce14" + "6a21cf1420ce1420cf146a21d01420cf1420d0146a21d11420d01420d1146a21d21420d11420d2146a21d31420d214" + "20d3146a21d41420d31420d4146a21d51420d41420d5146a21d61420d51420d6146a21d71420d61420d7146a21d814" + "20d71420d8146a21d91420d81420d9146a21da1420d91420da146a21db1420da1420db146a21dc1420db1420dc146a" + "21dd1420dc1420dd146a21de1420dd1420de146a21df1420de1420df146a21e01420df1420e0146a21e11420e01420" + "e1146a21e21420e11420e2146a21e31420e21420e3146a21e41420e31420e4146a21e51420e41420e5146a21e61420" + "e51420e6146a21e71420e61420e7146a21e81420e71420e8146a21e91420e81420e9146a21ea1420e91420ea146a21" + "eb1420ea1420eb146a21ec1420eb1420ec146a21ed1420ec1420ed146a21ee1420ed1420ee146a21ef1420ee1420ef" + "146a21f01420ef1420f0146a21f11420f01420f1146a21f21420f11420f2146a21f31420f21420f3146a21f41420f3" + "1420f4146a21f51420f41420f5146a21f61420f51420f6146a21f71420f61420f7146a21f81420f71420f8146a21f9" + "1420f81420f9146a21fa1420f91420fa146a21fb1420fa1420fb146a21fc1420fb1420fc146a21fd1420fc1420fd14" + "6a21fe1420fd1420fe146a21ff1420fe1420ff146a21801520ff142080156a2181152080152081156a218215208115" + "2082156a2183152082152083156a2184152083152084156a2185152084152085156a2186152085152086156a218715" + "2086152087156a2188152087152088156a2189152088152089156a218a15208915208a156a218b15208a15208b156a" + "218c15208b15208c156a218d15208c15208d156a218e15208d15208e156a218f15208e15208f156a219015208f1520" + "90156a2191152090152091156a2192152091152092156a2193152092152093156a2194152093152094156a21951520" + "94152095156a2196152095152096156a2197152096152097156a2198152097152098156a2199152098152099156a21" "9a15209915209a156a219b15209a15209b156a219c15209b15209c156a219d15209c15209d156a219e15209d15209e" - "156a219f15209e15209f" - "156a21a015209f1520a0156a21a11520a01520a1156a21a21520a11520a2156a21a31520a21520a3156a21a41520a3" - "1520a4156a21a51520a4" - "1520a5156a21a61520a51520a6156a21a71520a61520a7156a21a81520a71520a8156a21a91520a81520a9156a21aa" - "1520a91520aa156a21ab" - "1520aa1520ab156a21ac1520ab1520ac156a21ad1520ac1520ad156a21ae1520ad1520ae156a21af1520ae1520af15" - "6a21b01520af1520b015" - "6a21b11520b01520b1156a21b21520b11520b2156a21b31520b21520b3156a21b41520b31520b4156a21b51520b415" - "20b5156a21b61520b515" - "20b6156a21b71520b61520b7156a21b81520b71520b8156a21b91520b81520b9156a21ba1520b91520ba156a21bb15" - "20ba1520bb156a21bc15" - "20bb1520bc156a21bd1520bc1520bd156a21be1520bd1520be156a21bf1520be1520bf156a21c01520bf1520c0156a" - "21c11520c01520c1156a" - "21c21520c11520c2156a21c31520c21520c3156a21c41520c31520c4156a21c51520c41520c5156a21c61520c51520" - "c6156a21c71520c61520" - "c7156a21c81520c71520c8156a21c91520c81520c9156a21ca1520c91520ca156a21cb1520ca1520cb156a21cc1520" - "cb1520cc156a21cd1520" - "cc1520cd156a21ce1520cd1520ce156a21cf1520ce1520cf156a21d01520cf1520d0156a21d11520d01520d1156a21" - "d21520d11520d2156a21" - "d31520d21520d3156a21d41520d31520d4156a21d51520d41520d5156a21d61520d51520d6156a21d71520d61520d7" - "156a21d81520d71520d8" - "156a21d91520d81520d9156a21da1520d91520da156a21db1520da1520db156a21dc1520db1520dc156a21dd1520dc" - "1520dd156a21de1520dd" - "1520de156a21df1520de1520df156a21e01520df1520e0156a21e11520e01520e1156a21e21520e11520e2156a21e3" - "1520e21520e3156a21e4" - "1520e31520e4156a21e51520e41520e5156a21e61520e51520e6156a21e71520e61520e7156a21e81520e71520e815" - "6a21e91520e81520e915" - "6a21ea1520e91520ea156a21eb1520ea1520eb156a21ec1520eb1520ec156a21ed1520ec1520ed156a21ee1520ed15" - "20ee156a21ef1520ee15" - "20ef156a21f01520ef1520f0156a21f11520f01520f1156a21f21520f11520f2156a21f31520f21520f3156a21f415" - "20f31520f4156a21f515" - "20f41520f5156a21f61520f51520f6156a21f71520f61520f7156a21f81520f71520f8156a21f91520f81520f9156a" - "21fa1520f91520fa156a" - "21fb1520fa1520fb156a21fc1520fb1520fc156a21fd1520fc1520fd156a21fe1520fd1520fe156a21ff1520fe1520" - "ff156a21801620ff1520" - "80166a2181162080162081166a2182162081162082166a2183162082162083166a2184162083162084166a21851620" - "84162085166a21861620" - "85162086166a2187162086162087166a2188162087162088166a2189162088162089166a218a16208916208a166a21" - "8b16208a16208b166a21" - "8c16208b16208c166a218d16208c16208d166a218e16208d16208e166a218f16208e16208f166a219016208f162090" - "166a2191162090162091" - "166a2192162091162092166a2193162092162093166a2194162093162094166a2195162094162095166a2196162095" - "162096166a2197162096" - "162097166a2198162097162098166a2199162098162099166a219a16209916209a166a219b16209a16209b166a219c" - "16209b16209c166a219d" - "16209c16209d166a219e16209d16209e166a219f16209e16209f166a21a016209f1620a0166a21a11620a01620a116" - "6a21a21620a11620a216" - "6a21a31620a21620a3166a21a41620a31620a4166a21a51620a41620a5166a21a61620a51620a6166a21a71620a616" - "20a7166a21a81620a716" - "20a8166a21a91620a81620a9166a21aa1620a91620aa166a21ab1620aa1620ab166a21ac1620ab1620ac166a21ad16" - "20ac1620ad166a21ae16" - "20ad1620ae166a21af1620ae1620af166a21b01620af1620b0166a21b11620b01620b1166a21b21620b11620b2166a" - "21b31620b21620b3166a" - "21b41620b31620b4166a21b51620b41620b5166a21b61620b51620b6166a21b71620b61620b7166a21b81620b71620" - "b8166a21b91620b81620" - "b9166a21ba1620b91620ba166a21bb1620ba1620bb166a21bc1620bb1620bc166a21bd1620bc1620bd166a21be1620" - "bd1620be166a21bf1620" - "be1620bf166a21c01620bf1620c0166a21c11620c01620c1166a21c21620c11620c2166a21c31620c21620c3166a21" - "c41620c31620c4166a21" - "c51620c41620c5166a21c61620c51620c6166a21c71620c61620c7166a21c81620c71620c8166a21c91620c81620c9" - "166a21ca1620c91620ca" - "166a21cb1620ca1620cb166a21cc1620cb1620cc166a21cd1620cc1620cd166a21ce1620cd1620ce166a21cf1620ce" - "1620cf166a21d01620cf" - "1620d0166a21d11620d01620d1166a21d21620d11620d2166a21d31620d21620d3166a21d41620d31620d4166a21d5" - "1620d41620d5166a21d6" - "1620d51620d6166a21d71620d61620d7166a21d81620d71620d8166a21d91620d81620d9166a21da1620d91620da16" - "6a21db1620da1620db16" - "6a21dc1620db1620dc166a21dd1620dc1620dd166a21de1620dd1620de166a21df1620de1620df166a21e01620df16" - "20e0166a21e11620e016" - "20e1166a21e21620e11620e2166a21e31620e21620e3166a21e41620e31620e4166a21e51620e41620e5166a21e616" - "20e51620e6166a21e716" - "20e61620e7166a21e81620e71620e8166a21e91620e81620e9166a21ea1620e91620ea166a21eb1620ea1620eb166a" - "21ec1620eb1620ec166a" - "21ed1620ec1620ed166a21ee1620ed1620ee166a21ef1620ee1620ef166a21f01620ef1620f0166a21f11620f01620" - "f1166a21f21620f11620" - "f2166a21f31620f21620f3166a21f41620f31620f4166a21f51620f41620f5166a21f61620f51620f6166a21f71620" - "f61620f7166a21f81620" - "f71620f8166a21f91620f81620f9166a21fa1620f91620fa166a21fb1620fa1620fb166a21fc1620fb1620fc166a21" - "fd1620fc1620fd166a21" - "fe1620fd1620fe166a21ff1620fe1620ff166a21801720ff162080176a2181172080172081176a2182172081172082" - "176a2183172082172083" - "176a2184172083172084176a2185172084172085176a2186172085172086176a2187172086172087176a2188172087" - "172088176a2189172088" - "172089176a218a17208917208a176a218b17208a17208b176a218c17208b17208c176a218d17208c17208d176a218e" - "17208d17208e176a218f" - "17208e17208f176a219017208f172090176a2191172090172091176a2192172091172092176a219317209217209317" - "6a219417209317209417" - "6a2195172094172095176a2196172095172096176a2197172096172097176a2198172097172098176a219917209817" - "2099176a219a17209917" - "209a176a219b17209a17209b176a219c17209b17209c176a219d17209c17209d176a219e17209d17209e176a219f17" - "209e17209f176a21a017" - "209f1720a0176a21a11720a01720a1176a21a21720a11720a2176a21a31720a21720a3176a21a41720a31720a4176a" - "21a51720a41720a5176a" + "156a219f15209e15209f156a21a015209f1520a0156a21a11520a01520a1156a21a21520a11520a2156a21a31520a2" + "1520a3156a21a41520a31520a4156a21a51520a41520a5156a21a61520a51520a6156a21a71520a61520a7156a21a8" + "1520a71520a8156a21a91520a81520a9156a21aa1520a91520aa156a21ab1520aa1520ab156a21ac1520ab1520ac15" + "6a21ad1520ac1520ad156a21ae1520ad1520ae156a21af1520ae1520af156a21b01520af1520b0156a21b11520b015" + "20b1156a21b21520b11520b2156a21b31520b21520b3156a21b41520b31520b4156a21b51520b41520b5156a21b615" + "20b51520b6156a21b71520b61520b7156a21b81520b71520b8156a21b91520b81520b9156a21ba1520b91520ba156a" + "21bb1520ba1520bb156a21bc1520bb1520bc156a21bd1520bc1520bd156a21be1520bd1520be156a21bf1520be1520" + "bf156a21c01520bf1520c0156a21c11520c01520c1156a21c21520c11520c2156a21c31520c21520c3156a21c41520" + "c31520c4156a21c51520c41520c5156a21c61520c51520c6156a21c71520c61520c7156a21c81520c71520c8156a21" + "c91520c81520c9156a21ca1520c91520ca156a21cb1520ca1520cb156a21cc1520cb1520cc156a21cd1520cc1520cd" + "156a21ce1520cd1520ce156a21cf1520ce1520cf156a21d01520cf1520d0156a21d11520d01520d1156a21d21520d1" + "1520d2156a21d31520d21520d3156a21d41520d31520d4156a21d51520d41520d5156a21d61520d51520d6156a21d7" + "1520d61520d7156a21d81520d71520d8156a21d91520d81520d9156a21da1520d91520da156a21db1520da1520db15" + "6a21dc1520db1520dc156a21dd1520dc1520dd156a21de1520dd1520de156a21df1520de1520df156a21e01520df15" + "20e0156a21e11520e01520e1156a21e21520e11520e2156a21e31520e21520e3156a21e41520e31520e4156a21e515" + "20e41520e5156a21e61520e51520e6156a21e71520e61520e7156a21e81520e71520e8156a21e91520e81520e9156a" + "21ea1520e91520ea156a21eb1520ea1520eb156a21ec1520eb1520ec156a21ed1520ec1520ed156a21ee1520ed1520" + "ee156a21ef1520ee1520ef156a21f01520ef1520f0156a21f11520f01520f1156a21f21520f11520f2156a21f31520" + "f21520f3156a21f41520f31520f4156a21f51520f41520f5156a21f61520f51520f6156a21f71520f61520f7156a21" + "f81520f71520f8156a21f91520f81520f9156a21fa1520f91520fa156a21fb1520fa1520fb156a21fc1520fb1520fc" + "156a21fd1520fc1520fd156a21fe1520fd1520fe156a21ff1520fe1520ff156a21801620ff152080166a2181162080" + "162081166a2182162081162082166a2183162082162083166a2184162083162084166a2185162084162085166a2186" + "162085162086166a2187162086162087166a2188162087162088166a2189162088162089166a218a16208916208a16" + "6a218b16208a16208b166a218c16208b16208c166a218d16208c16208d166a218e16208d16208e166a218f16208e16" + "208f166a219016208f162090166a2191162090162091166a2192162091162092166a2193162092162093166a219416" + "2093162094166a2195162094162095166a2196162095162096166a2197162096162097166a2198162097162098166a" + "2199162098162099166a219a16209916209a166a219b16209a16209b166a219c16209b16209c166a219d16209c1620" + "9d166a219e16209d16209e166a219f16209e16209f166a21a016209f1620a0166a21a11620a01620a1166a21a21620" + "a11620a2166a21a31620a21620a3166a21a41620a31620a4166a21a51620a41620a5166a21a61620a51620a6166a21" + "a71620a61620a7166a21a81620a71620a8166a21a91620a81620a9166a21aa1620a91620aa166a21ab1620aa1620ab" + "166a21ac1620ab1620ac166a21ad1620ac1620ad166a21ae1620ad1620ae166a21af1620ae1620af166a21b01620af" + "1620b0166a21b11620b01620b1166a21b21620b11620b2166a21b31620b21620b3166a21b41620b31620b4166a21b5" + "1620b41620b5166a21b61620b51620b6166a21b71620b61620b7166a21b81620b71620b8166a21b91620b81620b916" + "6a21ba1620b91620ba166a21bb1620ba1620bb166a21bc1620bb1620bc166a21bd1620bc1620bd166a21be1620bd16" + "20be166a21bf1620be1620bf166a21c01620bf1620c0166a21c11620c01620c1166a21c21620c11620c2166a21c316" + "20c21620c3166a21c41620c31620c4166a21c51620c41620c5166a21c61620c51620c6166a21c71620c61620c7166a" + "21c81620c71620c8166a21c91620c81620c9166a21ca1620c91620ca166a21cb1620ca1620cb166a21cc1620cb1620" + "cc166a21cd1620cc1620cd166a21ce1620cd1620ce166a21cf1620ce1620cf166a21d01620cf1620d0166a21d11620" + "d01620d1166a21d21620d11620d2166a21d31620d21620d3166a21d41620d31620d4166a21d51620d41620d5166a21" + "d61620d51620d6166a21d71620d61620d7166a21d81620d71620d8166a21d91620d81620d9166a21da1620d91620da" + "166a21db1620da1620db166a21dc1620db1620dc166a21dd1620dc1620dd166a21de1620dd1620de166a21df1620de" + "1620df166a21e01620df1620e0166a21e11620e01620e1166a21e21620e11620e2166a21e31620e21620e3166a21e4" + "1620e31620e4166a21e51620e41620e5166a21e61620e51620e6166a21e71620e61620e7166a21e81620e71620e816" + "6a21e91620e81620e9166a21ea1620e91620ea166a21eb1620ea1620eb166a21ec1620eb1620ec166a21ed1620ec16" + "20ed166a21ee1620ed1620ee166a21ef1620ee1620ef166a21f01620ef1620f0166a21f11620f01620f1166a21f216" + "20f11620f2166a21f31620f21620f3166a21f41620f31620f4166a21f51620f41620f5166a21f61620f51620f6166a" + "21f71620f61620f7166a21f81620f71620f8166a21f91620f81620f9166a21fa1620f91620fa166a21fb1620fa1620" + "fb166a21fc1620fb1620fc166a21fd1620fc1620fd166a21fe1620fd1620fe166a21ff1620fe1620ff166a21801720" + "ff162080176a2181172080172081176a2182172081172082176a2183172082172083176a2184172083172084176a21" + "85172084172085176a2186172085172086176a2187172086172087176a2188172087172088176a2189172088172089" + "176a218a17208917208a176a218b17208a17208b176a218c17208b17208c176a218d17208c17208d176a218e17208d" + "17208e176a218f17208e17208f176a219017208f172090176a2191172090172091176a2192172091172092176a2193" + "172092172093176a2194172093172094176a2195172094172095176a2196172095172096176a219717209617209717" + "6a2198172097172098176a2199172098172099176a219a17209917209a176a219b17209a17209b176a219c17209b17" + "209c176a219d17209c17209d176a219e17209d17209e176a219f17209e17209f176a21a017209f1720a0176a21a117" + "20a01720a1176a21a21720a11720a2176a21a31720a21720a3176a21a41720a31720a4176a21a51720a41720a5176a" "21a61720a51720a6176a21a71720a61720a7176a21a81720a71720a8176a21a91720a81720a9176a21aa1720a91720" - "aa176a21ab1720aa1720" - "ab176a21ac1720ab1720ac176a21ad1720ac1720ad176a21ae1720ad1720ae176a21af1720ae1720af176a21b01720" - "af1720b0176a21b11720" - "b01720b1176a21b21720b11720b2176a21b31720b21720b3176a21b41720b31720b4176a21b51720b41720b5176a21" - "b61720b51720b6176a21" - "b71720b61720b7176a21b81720b71720b8176a21b91720b81720b9176a21ba1720b91720ba176a21bb1720ba1720bb" - "176a21bc1720bb1720bc" - "176a21bd1720bc1720bd176a21be1720bd1720be176a21bf1720be1720bf176a21c01720bf1720c0176a21c11720c0" - "1720c1176a21c21720c1" - "1720c2176a21c31720c21720c3176a21c41720c31720c4176a21c51720c41720c5176a21c61720c51720c6176a21c7" - "1720c61720c7176a21c8" - "1720c71720c8176a21c91720c81720c9176a21ca1720c91720ca176a21cb1720ca1720cb176a21cc1720cb1720cc17" - "6a21cd1720cc1720cd17" - "6a21ce1720cd1720ce176a21cf1720ce1720cf176a21d01720cf1720d0176a21d11720d01720d1176a21d21720d117" - "20d2176a21d31720d217" - "20d3176a21d41720d31720d4176a21d51720d41720d5176a21d61720d51720d6176a21d71720d61720d7176a21d817" - "20d71720d8176a21d917" - "20d81720d9176a21da1720d91720da176a21db1720da1720db176a21dc1720db1720dc176a21dd1720dc1720dd176a" - "21de1720dd1720de176a" - "21df1720de1720df176a21e01720df1720e0176a21e11720e01720e1176a21e21720e11720e2176a21e31720e21720" - "e3176a21e41720e31720" - "e4176a21e51720e41720e5176a21e61720e51720e6176a21e71720e61720e7176a21e81720e71720e8176a21e91720" - "e81720e9176a21ea1720" - "e91720ea176a21eb1720ea1720eb176a21ec1720eb1720ec176a21ed1720ec1720ed176a21ee1720ed1720ee176a21" - "ef1720ee1720ef176a21" - "f01720ef1720f0176a21f11720f01720f1176a21f21720f11720f2176a21f31720f21720f3176a21f41720f31720f4" - "176a21f51720f41720f5" - "176a21f61720f51720f6176a21f71720f61720f7176a21f81720f71720f8176a21f91720f81720f9176a21fa1720f9" - "1720fa176a21fb1720fa" - "1720fb176a21fc1720fb1720fc176a21fd1720fc1720fd176a21fe1720fd1720fe176a21ff1720fe1720ff176a2180" - "1820ff172080186a2181" - "182080182081186a2182182081182082186a2183182082182083186a2184182083182084186a218518208418208518" - "6a218618208518208618" - "6a2187182086182087186a2188182087182088186a2189182088182089186a218a18208918208a186a218b18208a18" - "208b186a218c18208b18" - "208c186a218d18208c18208d186a218e18208d18208e186a218f18208e18208f186a219018208f182090186a219118" - "2090182091186a219218" - "2091182092186a2193182092182093186a2194182093182094186a2195182094182095186a2196182095182096186a" - "2197182096182097186a" - "2198182097182098186a2199182098182099186a219a18209918209a186a219b18209a18209b186a219c18209b1820" - "9c186a219d18209c1820" - "9d186a219e18209d18209e186a219f18209e18209f186a21a018209f1820a0186a21a11820a01820a1186a21a21820" - "a11820a2186a21a31820" - "a21820a3186a21a41820a31820a4186a21a51820a41820a5186a21a61820a51820a6186a21a71820a61820a7186a21" - "a81820a71820a8186a21" - "a91820a81820a9186a21aa1820a91820aa186a21ab1820aa1820ab186a21ac1820ab1820ac186a21ad1820ac1820ad" - "186a21ae1820ad1820ae" - "186a21af1820ae1820af186a21b01820af1820b0186a21b11820b01820b1186a21b21820b11820b2186a21b31820b2" - "1820b3186a21b41820b3" - "1820b4186a21b51820b41820b5186a21b61820b51820b6186a21b71820b61820b7186a21b81820b71820b8186a21b9" - "1820b81820b9186a21ba" - "1820b91820ba186a21bb1820ba1820bb186a21bc1820bb1820bc186a21bd1820bc1820bd186a21be1820bd1820be18" - "6a21bf1820be1820bf18" - "6a21c01820bf1820c0186a21c11820c01820c1186a21c21820c11820c2186a21c31820c21820c3186a21c41820c318" - "20c4186a21c51820c418" - "20c5186a21c61820c51820c6186a21c71820c61820c7186a21c81820c71820c8186a21c91820c81820c9186a21ca18" - "20c91820ca186a21cb18" - "20ca1820cb186a21cc1820cb1820cc186a21cd1820cc1820cd186a21ce1820cd1820ce186a21cf1820ce1820cf186a" - "21d01820cf1820d0186a" - "21d11820d01820d1186a21d21820d11820d2186a21d31820d21820d3186a21d41820d31820d4186a21d51820d41820" - "d5186a21d61820d51820" - "d6186a21d71820d61820d7186a21d81820d71820d8186a21d91820d81820d9186a21da1820d91820da186a21db1820" - "da1820db186a21dc1820" - "db1820dc186a21dd1820dc1820dd186a21de1820dd1820de186a21df1820de1820df186a21e01820df1820e0186a21" - "e11820e01820e1186a21" - "e21820e11820e2186a21e31820e21820e3186a21e41820e31820e4186a21e51820e41820e5186a21e61820e51820e6" - "186a21e71820e61820e7" - "186a21e81820e71820e8186a21e91820e81820e9186a21ea1820e91820ea186a21eb1820ea1820eb186a21ec1820eb" - "1820ec186a21ed1820ec" - "1820ed186a21ee1820ed1820ee186a21ef1820ee1820ef186a21f01820ef1820f0186a21f11820f01820f1186a21f2" - "1820f11820f2186a21f3" - "1820f21820f3186a21f41820f31820f4186a21f51820f41820f5186a21f61820f51820f6186a21f71820f61820f718" - "6a21f81820f71820f818" - "6a21f91820f81820f9186a21fa1820f91820fa186a21fb1820fa1820fb186a21fc1820fb1820fc186a21fd1820fc18" - "20fd186a21fe1820fd18" - "20fe186a21ff1820fe1820ff186a21801920ff182080196a2181192080192081196a2182192081192082196a218319" - "2082192083196a218419" - "2083192084196a2185192084192085196a2186192085192086196a2187192086192087196a2188192087192088196a" - "2189192088192089196a" - "218a19208919208a196a218b19208a19208b196a218c19208b19208c196a218d19208c19208d196a218e19208d1920" - "8e196a218f19208e1920" - "8f196a219019208f192090196a2191192090192091196a2192192091192092196a2193192092192093196a21941920" - "93192094196a21951920" - "94192095196a2196192095192096196a2197192096192097196a2198192097192098196a2199192098192099196a21" - "9a19209919209a196a21" - "9b19209a19209b196a219c19209b19209c196a219d19209c19209d196a219e19209d19209e196a219f19209e19209f" - "196a21a019209f1920a0" - "196a21a11920a01920a1196a21a21920a11920a2196a21a31920a21920a3196a21a41920a31920a4196a21a51920a4" - "1920a5196a21a61920a5" - "1920a6196a21a71920a61920a7196a21a81920a71920a8196a21a91920a81920a9196a21aa1920a91920aa196a21ab" - "1920aa1920ab196a21ac" - "1920ab1920ac196a21ad1920ac1920ad196a21ae1920ad1920ae196a21af1920ae1920af196a21b01920af1920b019" - "6a21b11920b01920b119" + "aa176a21ab1720aa1720ab176a21ac1720ab1720ac176a21ad1720ac1720ad176a21ae1720ad1720ae176a21af1720" + "ae1720af176a21b01720af1720b0176a21b11720b01720b1176a21b21720b11720b2176a21b31720b21720b3176a21" + "b41720b31720b4176a21b51720b41720b5176a21b61720b51720b6176a21b71720b61720b7176a21b81720b71720b8" + "176a21b91720b81720b9176a21ba1720b91720ba176a21bb1720ba1720bb176a21bc1720bb1720bc176a21bd1720bc" + "1720bd176a21be1720bd1720be176a21bf1720be1720bf176a21c01720bf1720c0176a21c11720c01720c1176a21c2" + "1720c11720c2176a21c31720c21720c3176a21c41720c31720c4176a21c51720c41720c5176a21c61720c51720c617" + "6a21c71720c61720c7176a21c81720c71720c8176a21c91720c81720c9176a21ca1720c91720ca176a21cb1720ca17" + "20cb176a21cc1720cb1720cc176a21cd1720cc1720cd176a21ce1720cd1720ce176a21cf1720ce1720cf176a21d017" + "20cf1720d0176a21d11720d01720d1176a21d21720d11720d2176a21d31720d21720d3176a21d41720d31720d4176a" + "21d51720d41720d5176a21d61720d51720d6176a21d71720d61720d7176a21d81720d71720d8176a21d91720d81720" + "d9176a21da1720d91720da176a21db1720da1720db176a21dc1720db1720dc176a21dd1720dc1720dd176a21de1720" + "dd1720de176a21df1720de1720df176a21e01720df1720e0176a21e11720e01720e1176a21e21720e11720e2176a21" + "e31720e21720e3176a21e41720e31720e4176a21e51720e41720e5176a21e61720e51720e6176a21e71720e61720e7" + "176a21e81720e71720e8176a21e91720e81720e9176a21ea1720e91720ea176a21eb1720ea1720eb176a21ec1720eb" + "1720ec176a21ed1720ec1720ed176a21ee1720ed1720ee176a21ef1720ee1720ef176a21f01720ef1720f0176a21f1" + "1720f01720f1176a21f21720f11720f2176a21f31720f21720f3176a21f41720f31720f4176a21f51720f41720f517" + "6a21f61720f51720f6176a21f71720f61720f7176a21f81720f71720f8176a21f91720f81720f9176a21fa1720f917" + "20fa176a21fb1720fa1720fb176a21fc1720fb1720fc176a21fd1720fc1720fd176a21fe1720fd1720fe176a21ff17" + "20fe1720ff176a21801820ff172080186a2181182080182081186a2182182081182082186a2183182082182083186a" + "2184182083182084186a2185182084182085186a2186182085182086186a2187182086182087186a21881820871820" + "88186a2189182088182089186a218a18208918208a186a218b18208a18208b186a218c18208b18208c186a218d1820" + "8c18208d186a218e18208d18208e186a218f18208e18208f186a219018208f182090186a2191182090182091186a21" + "92182091182092186a2193182092182093186a2194182093182094186a2195182094182095186a2196182095182096" + "186a2197182096182097186a2198182097182098186a2199182098182099186a219a18209918209a186a219b18209a" + "18209b186a219c18209b18209c186a219d18209c18209d186a219e18209d18209e186a219f18209e18209f186a21a0" + "18209f1820a0186a21a11820a01820a1186a21a21820a11820a2186a21a31820a21820a3186a21a41820a31820a418" + "6a21a51820a41820a5186a21a61820a51820a6186a21a71820a61820a7186a21a81820a71820a8186a21a91820a818" + "20a9186a21aa1820a91820aa186a21ab1820aa1820ab186a21ac1820ab1820ac186a21ad1820ac1820ad186a21ae18" + "20ad1820ae186a21af1820ae1820af186a21b01820af1820b0186a21b11820b01820b1186a21b21820b11820b2186a" + "21b31820b21820b3186a21b41820b31820b4186a21b51820b41820b5186a21b61820b51820b6186a21b71820b61820" + "b7186a21b81820b71820b8186a21b91820b81820b9186a21ba1820b91820ba186a21bb1820ba1820bb186a21bc1820" + "bb1820bc186a21bd1820bc1820bd186a21be1820bd1820be186a21bf1820be1820bf186a21c01820bf1820c0186a21" + "c11820c01820c1186a21c21820c11820c2186a21c31820c21820c3186a21c41820c31820c4186a21c51820c41820c5" + "186a21c61820c51820c6186a21c71820c61820c7186a21c81820c71820c8186a21c91820c81820c9186a21ca1820c9" + "1820ca186a21cb1820ca1820cb186a21cc1820cb1820cc186a21cd1820cc1820cd186a21ce1820cd1820ce186a21cf" + "1820ce1820cf186a21d01820cf1820d0186a21d11820d01820d1186a21d21820d11820d2186a21d31820d21820d318" + "6a21d41820d31820d4186a21d51820d41820d5186a21d61820d51820d6186a21d71820d61820d7186a21d81820d718" + "20d8186a21d91820d81820d9186a21da1820d91820da186a21db1820da1820db186a21dc1820db1820dc186a21dd18" + "20dc1820dd186a21de1820dd1820de186a21df1820de1820df186a21e01820df1820e0186a21e11820e01820e1186a" + "21e21820e11820e2186a21e31820e21820e3186a21e41820e31820e4186a21e51820e41820e5186a21e61820e51820" + "e6186a21e71820e61820e7186a21e81820e71820e8186a21e91820e81820e9186a21ea1820e91820ea186a21eb1820" + "ea1820eb186a21ec1820eb1820ec186a21ed1820ec1820ed186a21ee1820ed1820ee186a21ef1820ee1820ef186a21" + "f01820ef1820f0186a21f11820f01820f1186a21f21820f11820f2186a21f31820f21820f3186a21f41820f31820f4" + "186a21f51820f41820f5186a21f61820f51820f6186a21f71820f61820f7186a21f81820f71820f8186a21f91820f8" + "1820f9186a21fa1820f91820fa186a21fb1820fa1820fb186a21fc1820fb1820fc186a21fd1820fc1820fd186a21fe" + "1820fd1820fe186a21ff1820fe1820ff186a21801920ff182080196a2181192080192081196a218219208119208219" + "6a2183192082192083196a2184192083192084196a2185192084192085196a2186192085192086196a218719208619" + "2087196a2188192087192088196a2189192088192089196a218a19208919208a196a218b19208a19208b196a218c19" + "208b19208c196a218d19208c19208d196a218e19208d19208e196a218f19208e19208f196a219019208f192090196a" + "2191192090192091196a2192192091192092196a2193192092192093196a2194192093192094196a21951920941920" + "95196a2196192095192096196a2197192096192097196a2198192097192098196a2199192098192099196a219a1920" + "9919209a196a219b19209a19209b196a219c19209b19209c196a219d19209c19209d196a219e19209d19209e196a21" + "9f19209e19209f196a21a019209f1920a0196a21a11920a01920a1196a21a21920a11920a2196a21a31920a21920a3" + "196a21a41920a31920a4196a21a51920a41920a5196a21a61920a51920a6196a21a71920a61920a7196a21a81920a7" + "1920a8196a21a91920a81920a9196a21aa1920a91920aa196a21ab1920aa1920ab196a21ac1920ab1920ac196a21ad" + "1920ac1920ad196a21ae1920ad1920ae196a21af1920ae1920af196a21b01920af1920b0196a21b11920b01920b119" "6a21b21920b11920b2196a21b31920b21920b3196a21b41920b31920b4196a21b51920b41920b5196a21b61920b519" - "20b6196a21b71920b619" - "20b7196a21b81920b71920b8196a21b91920b81920b9196a21ba1920b91920ba196a21bb1920ba1920bb196a21bc19" - "20bb1920bc196a21bd19" - "20bc1920bd196a21be1920bd1920be196a21bf1920be1920bf196a21c01920bf1920c0196a21c11920c01920c1196a" - "21c21920c11920c2196a" - "21c31920c21920c3196a21c41920c31920c4196a21c51920c41920c5196a21c61920c51920c6196a21c71920c61920" - "c7196a21c81920c71920" - "c8196a21c91920c81920c9196a21ca1920c91920ca196a21cb1920ca1920cb196a21cc1920cb1920cc196a21cd1920" - "cc1920cd196a21ce1920" - "cd1920ce196a21cf1920ce1920cf196a21d01920cf1920d0196a21d11920d01920d1196a21d21920d11920d2196a21" - "d31920d21920d3196a21" - "d41920d31920d4196a21d51920d41920d5196a21d61920d51920d6196a21d71920d61920d7196a21d81920d71920d8" - "196a21d91920d81920d9" - "196a21da1920d91920da196a21db1920da1920db196a21dc1920db1920dc196a21dd1920dc1920dd196a21de1920dd" - "1920de196a21df1920de" - "1920df196a21e01920df1920e0196a21e11920e01920e1196a21e21920e11920e2196a21e31920e21920e3196a21e4" - "1920e31920e4196a21e5" - "1920e41920e5196a21e61920e51920e6196a21e71920e61920e7196a21e81920e71920e8196a21e91920e81920e919" - "6a21ea1920e91920ea19" - "6a21eb1920ea1920eb196a21ec1920eb1920ec196a21ed1920ec1920ed196a21ee1920ed1920ee196a21ef1920ee19" - "20ef196a21f01920ef19" - "20f0196a21f11920f01920f1196a21f21920f11920f2196a21f31920f21920f3196a21f41920f31920f4196a21f519" - "20f41920f5196a21f619" - "20f51920f6196a21f71920f61920f7196a21f81920f71920f8196a21f91920f81920f9196a21fa1920f91920fa196a" - "21fb1920fa1920fb196a" - "21fc1920fb1920fc196a21fd1920fc1920fd196a21fe1920fd1920fe196a21ff1920fe1920ff196a21801a20ff1920" - "801a6a21811a20801a20" - "811a6a21821a20811a20821a6a21831a20821a20831a6a21841a20831a20841a6a21851a20841a20851a6a21861a20" - "851a20861a6a21871a20" - "861a20871a6a21881a20871a20881a6a21891a20881a20891a6a218a1a20891a208a1a6a218b1a208a1a208b1a6a21" - "8c1a208b1a208c1a6a21" - "8d1a208c1a208d1a6a218e1a208d1a208e1a6a218f1a208e1a208f1a6a21901a208f1a20901a6a21911a20901a2091" - "1a6a21921a20911a2092" - "1a6a21931a20921a20931a6a21941a20931a20941a6a21951a20941a20951a6a21961a20951a20961a6a21971a2096" - "1a20971a6a21981a2097" - "1a20981a6a21991a20981a20991a6a219a1a20991a209a1a6a219b1a209a1a209b1a6a219c1a209b1a209c1a6a219d" - "1a209c1a209d1a6a219e" - "1a209d1a209e1a6a219f1a209e1a209f1a6a21a01a209f1a20a01a6a21a11a20a01a20a11a6a21a21a20a11a20a21a" - "6a21a31a20a21a20a31a" - "6a21a41a20a31a20a41a6a21a51a20a41a20a51a6a21a61a20a51a20a61a6a21a71a20a61a20a71a6a21a81a20a71a" - "20a81a6a21a91a20a81a" - "20a91a6a21aa1a20a91a20aa1a6a21ab1a20aa1a20ab1a6a21ac1a20ab1a20ac1a6a21ad1a20ac1a20ad1a6a21ae1a" - "20ad1a20ae1a6a21af1a" - "20ae1a20af1a6a21b01a20af1a20b01a6a21b11a20b01a20b11a6a21b21a20b11a20b21a6a21b31a20b21a20b31a6a" - "21b41a20b31a20b41a6a" - "21b51a20b41a20b51a6a21b61a20b51a20b61a6a21b71a20b61a20b71a6a21b81a20b71a20b81a6a21b91a20b81a20" - "b91a6a21ba1a20b91a20" - "ba1a6a21bb1a20ba1a20bb1a6a21bc1a20bb1a20bc1a6a21bd1a20bc1a20bd1a6a21be1a20bd1a20be1a6a21bf1a20" - "be1a20bf1a6a21c01a20" - "bf1a20c01a6a21c11a20c01a20c11a6a21c21a20c11a20c21a6a21c31a20c21a20c31a6a21c41a20c31a20c41a6a21" - "c51a20c41a20c51a6a21" - "c61a20c51a20c61a6a21c71a20c61a20c71a6a21c81a20c71a20c81a6a21c91a20c81a20c91a6a21ca1a20c91a20ca" - "1a6a21cb1a20ca1a20cb" - "1a6a21cc1a20cb1a20cc1a6a21cd1a20cc1a20cd1a6a21ce1a20cd1a20ce1a6a21cf1a20ce1a20cf1a6a21d01a20cf" - "1a20d01a6a21d11a20d0" - "1a20d11a6a21d21a20d11a20d21a6a21d31a20d21a20d31a6a21d41a20d31a20d41a6a21d51a20d41a20d51a6a21d6" - "1a20d51a20d61a6a21d7" - "1a20d61a20d71a6a21d81a20d71a20d81a6a21d91a20d81a20d91a6a21da1a20d91a20da1a6a21db1a20da1a20db1a" - "6a21dc1a20db1a20dc1a" - "6a21dd1a20dc1a20dd1a6a21de1a20dd1a20de1a6a21df1a20de1a20df1a6a21e01a20df1a20e01a6a21e11a20e01a" - "20e11a6a21e21a20e11a" - "20e21a6a21e31a20e21a20e31a6a21e41a20e31a20e41a6a21e51a20e41a20e51a6a21e61a20e51a20e61a6a21e71a" - "20e61a20e71a6a21e81a" - "20e71a20e81a6a21e91a20e81a20e91a6a21ea1a20e91a20ea1a6a21eb1a20ea1a20eb1a6a21ec1a20eb1a20ec1a6a" - "21ed1a20ec1a20ed1a6a" - "21ee1a20ed1a20ee1a6a21ef1a20ee1a20ef1a6a21f01a20ef1a20f01a6a21f11a20f01a20f11a6a21f21a20f11a20" - "f21a6a21f31a20f21a20" - "f31a6a21f41a20f31a20f41a6a21f51a20f41a20f51a6a21f61a20f51a20f61a6a21f71a20f61a20f71a6a21f81a20" - "f71a20f81a6a21f91a20" - "f81a20f91a6a21fa1a20f91a20fa1a6a21fb1a20fa1a20fb1a6a21fc1a20fb1a20fc1a6a21fd1a20fc1a20fd1a6a21" - "fe1a20fd1a20fe1a6a21" - "ff1a20fe1a20ff1a6a21801b20ff1a20801b6a21811b20801b20811b6a21821b20811b20821b6a21831b20821b2083" - "1b6a21841b20831b2084" - "1b6a21851b20841b20851b6a21861b20851b20861b6a21871b20861b20871b6a21881b20871b20881b6a21891b2088" - "1b20891b6a218a1b2089" - "1b208a1b6a218b1b208a1b208b1b6a218c1b208b1b208c1b6a218d1b208c1b208d1b6a218e1b208d1b208e1b6a218f" - "1b208e1b208f1b6a2190" - "1b208f1b20901b6a21911b20901b20911b6a21921b20911b20921b6a21931b20921b20931b6a21941b20931b20941b" - "6a21951b20941b20951b" - "6a21961b20951b20961b6a21971b20961b20971b6a21981b20971b20981b6a21991b20981b20991b6a219a1b20991b" - "209a1b6a219b1b209a1b" - "209b1b6a219c1b209b1b209c1b6a219d1b209c1b209d1b6a219e1b209d1b209e1b6a219f1b209e1b209f1b6a21a01b" - "209f1b20a01b6a21a11b" - "20a01b20a11b6a21a21b20a11b20a21b6a21a31b20a21b20a31b6a21a41b20a31b20a41b6a21a51b20a41b20a51b6a" - "21a61b20a51b20a61b6a" - "21a71b20a61b20a71b6a21a81b20a71b20a81b6a21a91b20a81b20a91b6a21aa1b20a91b20aa1b6a21ab1b20aa1b20" - "ab1b6a21ac1b20ab1b20" - "ac1b6a21ad1b20ac1b20ad1b6a21ae1b20ad1b20ae1b6a21af1b20ae1b20af1b6a21b01b20af1b20b01b6a21b11b20" - "b01b20b11b6a21b21b20" - "b11b20b21b6a21b31b20b21b20b31b6a21b41b20b31b20b41b6a21b51b20b41b20b51b6a21b61b20b51b20b61b6a21" - "b71b20b61b20b71b6a21" - "b81b20b71b20b81b6a21b91b20b81b20b91b6a21ba1b20b91b20ba1b6a21bb1b20ba1b20bb1b6a21bc1b20bb1b20bc" - "1b6a21bd1b20bc1b20bd" + "20b6196a21b71920b61920b7196a21b81920b71920b8196a21b91920b81920b9196a21ba1920b91920ba196a21bb19" + "20ba1920bb196a21bc1920bb1920bc196a21bd1920bc1920bd196a21be1920bd1920be196a21bf1920be1920bf196a" + "21c01920bf1920c0196a21c11920c01920c1196a21c21920c11920c2196a21c31920c21920c3196a21c41920c31920" + "c4196a21c51920c41920c5196a21c61920c51920c6196a21c71920c61920c7196a21c81920c71920c8196a21c91920" + "c81920c9196a21ca1920c91920ca196a21cb1920ca1920cb196a21cc1920cb1920cc196a21cd1920cc1920cd196a21" + "ce1920cd1920ce196a21cf1920ce1920cf196a21d01920cf1920d0196a21d11920d01920d1196a21d21920d11920d2" + "196a21d31920d21920d3196a21d41920d31920d4196a21d51920d41920d5196a21d61920d51920d6196a21d71920d6" + "1920d7196a21d81920d71920d8196a21d91920d81920d9196a21da1920d91920da196a21db1920da1920db196a21dc" + "1920db1920dc196a21dd1920dc1920dd196a21de1920dd1920de196a21df1920de1920df196a21e01920df1920e019" + "6a21e11920e01920e1196a21e21920e11920e2196a21e31920e21920e3196a21e41920e31920e4196a21e51920e419" + "20e5196a21e61920e51920e6196a21e71920e61920e7196a21e81920e71920e8196a21e91920e81920e9196a21ea19" + "20e91920ea196a21eb1920ea1920eb196a21ec1920eb1920ec196a21ed1920ec1920ed196a21ee1920ed1920ee196a" + "21ef1920ee1920ef196a21f01920ef1920f0196a21f11920f01920f1196a21f21920f11920f2196a21f31920f21920" + "f3196a21f41920f31920f4196a21f51920f41920f5196a21f61920f51920f6196a21f71920f61920f7196a21f81920" + "f71920f8196a21f91920f81920f9196a21fa1920f91920fa196a21fb1920fa1920fb196a21fc1920fb1920fc196a21" + "fd1920fc1920fd196a21fe1920fd1920fe196a21ff1920fe1920ff196a21801a20ff1920801a6a21811a20801a2081" + "1a6a21821a20811a20821a6a21831a20821a20831a6a21841a20831a20841a6a21851a20841a20851a6a21861a2085" + "1a20861a6a21871a20861a20871a6a21881a20871a20881a6a21891a20881a20891a6a218a1a20891a208a1a6a218b" + "1a208a1a208b1a6a218c1a208b1a208c1a6a218d1a208c1a208d1a6a218e1a208d1a208e1a6a218f1a208e1a208f1a" + "6a21901a208f1a20901a6a21911a20901a20911a6a21921a20911a20921a6a21931a20921a20931a6a21941a20931a" + "20941a6a21951a20941a20951a6a21961a20951a20961a6a21971a20961a20971a6a21981a20971a20981a6a21991a" + "20981a20991a6a219a1a20991a209a1a6a219b1a209a1a209b1a6a219c1a209b1a209c1a6a219d1a209c1a209d1a6a" + "219e1a209d1a209e1a6a219f1a209e1a209f1a6a21a01a209f1a20a01a6a21a11a20a01a20a11a6a21a21a20a11a20" + "a21a6a21a31a20a21a20a31a6a21a41a20a31a20a41a6a21a51a20a41a20a51a6a21a61a20a51a20a61a6a21a71a20" + "a61a20a71a6a21a81a20a71a20a81a6a21a91a20a81a20a91a6a21aa1a20a91a20aa1a6a21ab1a20aa1a20ab1a6a21" + "ac1a20ab1a20ac1a6a21ad1a20ac1a20ad1a6a21ae1a20ad1a20ae1a6a21af1a20ae1a20af1a6a21b01a20af1a20b0" + "1a6a21b11a20b01a20b11a6a21b21a20b11a20b21a6a21b31a20b21a20b31a6a21b41a20b31a20b41a6a21b51a20b4" + "1a20b51a6a21b61a20b51a20b61a6a21b71a20b61a20b71a6a21b81a20b71a20b81a6a21b91a20b81a20b91a6a21ba" + "1a20b91a20ba1a6a21bb1a20ba1a20bb1a6a21bc1a20bb1a20bc1a6a21bd1a20bc1a20bd1a6a21be1a20bd1a20be1a" + "6a21bf1a20be1a20bf1a6a21c01a20bf1a20c01a6a21c11a20c01a20c11a6a21c21a20c11a20c21a6a21c31a20c21a" + "20c31a6a21c41a20c31a20c41a6a21c51a20c41a20c51a6a21c61a20c51a20c61a6a21c71a20c61a20c71a6a21c81a" + "20c71a20c81a6a21c91a20c81a20c91a6a21ca1a20c91a20ca1a6a21cb1a20ca1a20cb1a6a21cc1a20cb1a20cc1a6a" + "21cd1a20cc1a20cd1a6a21ce1a20cd1a20ce1a6a21cf1a20ce1a20cf1a6a21d01a20cf1a20d01a6a21d11a20d01a20" + "d11a6a21d21a20d11a20d21a6a21d31a20d21a20d31a6a21d41a20d31a20d41a6a21d51a20d41a20d51a6a21d61a20" + "d51a20d61a6a21d71a20d61a20d71a6a21d81a20d71a20d81a6a21d91a20d81a20d91a6a21da1a20d91a20da1a6a21" + "db1a20da1a20db1a6a21dc1a20db1a20dc1a6a21dd1a20dc1a20dd1a6a21de1a20dd1a20de1a6a21df1a20de1a20df" + "1a6a21e01a20df1a20e01a6a21e11a20e01a20e11a6a21e21a20e11a20e21a6a21e31a20e21a20e31a6a21e41a20e3" + "1a20e41a6a21e51a20e41a20e51a6a21e61a20e51a20e61a6a21e71a20e61a20e71a6a21e81a20e71a20e81a6a21e9" + "1a20e81a20e91a6a21ea1a20e91a20ea1a6a21eb1a20ea1a20eb1a6a21ec1a20eb1a20ec1a6a21ed1a20ec1a20ed1a" + "6a21ee1a20ed1a20ee1a6a21ef1a20ee1a20ef1a6a21f01a20ef1a20f01a6a21f11a20f01a20f11a6a21f21a20f11a" + "20f21a6a21f31a20f21a20f31a6a21f41a20f31a20f41a6a21f51a20f41a20f51a6a21f61a20f51a20f61a6a21f71a" + "20f61a20f71a6a21f81a20f71a20f81a6a21f91a20f81a20f91a6a21fa1a20f91a20fa1a6a21fb1a20fa1a20fb1a6a" + "21fc1a20fb1a20fc1a6a21fd1a20fc1a20fd1a6a21fe1a20fd1a20fe1a6a21ff1a20fe1a20ff1a6a21801b20ff1a20" + "801b6a21811b20801b20811b6a21821b20811b20821b6a21831b20821b20831b6a21841b20831b20841b6a21851b20" + "841b20851b6a21861b20851b20861b6a21871b20861b20871b6a21881b20871b20881b6a21891b20881b20891b6a21" + "8a1b20891b208a1b6a218b1b208a1b208b1b6a218c1b208b1b208c1b6a218d1b208c1b208d1b6a218e1b208d1b208e" + "1b6a218f1b208e1b208f1b6a21901b208f1b20901b6a21911b20901b20911b6a21921b20911b20921b6a21931b2092" + "1b20931b6a21941b20931b20941b6a21951b20941b20951b6a21961b20951b20961b6a21971b20961b20971b6a2198" + "1b20971b20981b6a21991b20981b20991b6a219a1b20991b209a1b6a219b1b209a1b209b1b6a219c1b209b1b209c1b" + "6a219d1b209c1b209d1b6a219e1b209d1b209e1b6a219f1b209e1b209f1b6a21a01b209f1b20a01b6a21a11b20a01b" + "20a11b6a21a21b20a11b20a21b6a21a31b20a21b20a31b6a21a41b20a31b20a41b6a21a51b20a41b20a51b6a21a61b" + "20a51b20a61b6a21a71b20a61b20a71b6a21a81b20a71b20a81b6a21a91b20a81b20a91b6a21aa1b20a91b20aa1b6a" + "21ab1b20aa1b20ab1b6a21ac1b20ab1b20ac1b6a21ad1b20ac1b20ad1b6a21ae1b20ad1b20ae1b6a21af1b20ae1b20" + "af1b6a21b01b20af1b20b01b6a21b11b20b01b20b11b6a21b21b20b11b20b21b6a21b31b20b21b20b31b6a21b41b20" + "b31b20b41b6a21b51b20b41b20b51b6a21b61b20b51b20b61b6a21b71b20b61b20b71b6a21b81b20b71b20b81b6a21" + "b91b20b81b20b91b6a21ba1b20b91b20ba1b6a21bb1b20ba1b20bb1b6a21bc1b20bb1b20bc1b6a21bd1b20bc1b20bd" "1b6a21be1b20bd1b20be1b6a21bf1b20be1b20bf1b6a21c01b20bf1b20c01b6a21c11b20c01b20c11b6a21c21b20c1" - "1b20c21b6a21c31b20c2" - "1b20c31b6a21c41b20c31b20c41b6a21c51b20c41b20c51b6a21c61b20c51b20c61b6a21c71b20c61b20c71b6a21c8" - "1b20c71b20c81b6a21c9" - "1b20c81b20c91b6a21ca1b20c91b20ca1b6a21cb1b20ca1b20cb1b6a21cc1b20cb1b20cc1b6a21cd1b20cc1b20cd1b" - "6a21ce1b20cd1b20ce1b" - "6a21cf1b20ce1b20cf1b6a21d01b20cf1b20d01b6a21d11b20d01b20d11b6a21d21b20d11b20d21b6a21d31b20d21b" - "20d31b6a21d41b20d31b" - "20d41b6a21d51b20d41b20d51b6a21d61b20d51b20d61b6a21d71b20d61b20d71b6a21d81b20d71b20d81b6a21d91b" - "20d81b20d91b6a21da1b" - "20d91b20da1b6a21db1b20da1b20db1b6a21dc1b20db1b20dc1b6a21dd1b20dc1b20dd1b6a21de1b20dd1b20de1b6a" - "21df1b20de1b20df1b6a" - "21e01b20df1b20e01b6a21e11b20e01b20e11b6a21e21b20e11b20e21b6a21e31b20e21b20e31b6a21e41b20e31b20" - "e41b6a21e51b20e41b20" - "e51b6a21e61b20e51b20e61b6a21e71b20e61b20e71b6a21e81b20e71b20e81b6a21e91b20e81b20e91b6a21ea1b20" - "e91b20ea1b6a21eb1b20" - "ea1b20eb1b6a21ec1b20eb1b20ec1b6a21ed1b20ec1b20ed1b6a21ee1b20ed1b20ee1b6a21ef1b20ee1b20ef1b6a21" - "f01b20ef1b20f01b6a21" - "f11b20f01b20f11b6a21f21b20f11b20f21b6a21f31b20f21b20f31b6a21f41b20f31b20f41b6a21f51b20f41b20f5" - "1b6a21f61b20f51b20f6" - "1b6a21f71b20f61b20f71b6a21f81b20f71b20f81b6a21f91b20f81b20f91b6a21fa1b20f91b20fa1b6a21fb1b20fa" - "1b20fb1b6a21fc1b20fb" - "1b20fc1b6a21fd1b20fc1b20fd1b6a21fe1b20fd1b20fe1b6a21ff1b20fe1b20ff1b6a21801c20ff1b20801c6a2181" - "1c20801c20811c6a2182" - "1c20811c20821c6a21831c20821c20831c6a21841c20831c20841c6a21851c20841c20851c6a21861c20851c20861c" - "6a21871c20861c20871c" - "6a21881c20871c20881c6a21891c20881c20891c6a218a1c20891c208a1c6a218b1c208a1c208b1c6a218c1c208b1c" - "208c1c6a218d1c208c1c" - "208d1c6a218e1c208d1c208e1c6a218f1c208e1c208f1c6a21901c208f1c20901c6a21911c20901c20911c6a21921c" - "20911c20921c6a21931c" - "20921c20931c6a21941c20931c20941c6a21951c20941c20951c6a21961c20951c20961c6a21971c20961c20971c6a" - "21981c20971c20981c6a" - "21991c20981c20991c6a219a1c20991c209a1c6a219b1c209a1c209b1c6a219c1c209b1c209c1c6a219d1c209c1c20" - "9d1c6a219e1c209d1c20" - "9e1c6a219f1c209e1c209f1c6a21a01c209f1c20a01c6a21a11c20a01c20a11c6a21a21c20a11c20a21c6a21a31c20" - "a21c20a31c6a21a41c20" - "a31c20a41c6a21a51c20a41c20a51c6a21a61c20a51c20a61c6a21a71c20a61c20a71c6a21a81c20a71c20a81c6a21" - "a91c20a81c20a91c6a21" - "aa1c20a91c20aa1c6a21ab1c20aa1c20ab1c6a21ac1c20ab1c20ac1c6a21ad1c20ac1c20ad1c6a21ae1c20ad1c20ae" - "1c6a21af1c20ae1c20af" - "1c6a21b01c20af1c20b01c6a21b11c20b01c20b11c6a21b21c20b11c20b21c6a21b31c20b21c20b31c6a21b41c20b3" - "1c20b41c6a21b51c20b4" - "1c20b51c6a21b61c20b51c20b61c6a21b71c20b61c20b71c6a21b81c20b71c20b81c6a21b91c20b81c20b91c6a21ba" - "1c20b91c20ba1c6a21bb" - "1c20ba1c20bb1c6a21bc1c20bb1c20bc1c6a21bd1c20bc1c20bd1c6a21be1c20bd1c20be1c6a21bf1c20be1c20bf1c" - "6a21c01c20bf1c20c01c" - "6a21c11c20c01c20c11c6a21c21c20c11c20c21c6a21c31c20c21c20c31c6a21c41c20c31c20c41c6a21c51c20c41c" - "20c51c6a21c61c20c51c" - "20c61c6a21c71c20c61c20c71c6a21c81c20c71c20c81c6a21c91c20c81c20c91c6a21ca1c20c91c20ca1c6a21cb1c" - "20ca1c20cb1c6a21cc1c" - "20cb1c20cc1c6a21cd1c20cc1c20cd1c6a21ce1c20cd1c20ce1c6a21cf1c20ce1c20cf1c6a21d01c20cf1c20d01c6a" - "21d11c20d01c20d11c6a" - "21d21c20d11c20d21c6a21d31c20d21c20d31c6a21d41c20d31c20d41c6a21d51c20d41c20d51c6a21d61c20d51c20" - "d61c6a21d71c20d61c20" - "d71c6a21d81c20d71c20d81c6a21d91c20d81c20d91c6a21da1c20d91c20da1c6a21db1c20da1c20db1c6a21dc1c20" - "db1c20dc1c6a21dd1c20" - "dc1c20dd1c6a21de1c20dd1c20de1c6a21df1c20de1c20df1c6a21e01c20df1c20e01c6a21e11c20e01c20e11c6a21" - "e21c20e11c20e21c6a21" - "e31c20e21c20e31c6a21e41c20e31c20e41c6a21e51c20e41c20e51c6a21e61c20e51c20e61c6a21e71c20e61c20e7" - "1c6a21e81c20e71c20e8" - "1c6a21e91c20e81c20e91c6a21ea1c20e91c20ea1c6a21eb1c20ea1c20eb1c6a21ec1c20eb1c20ec1c6a21ed1c20ec" - "1c20ed1c6a21ee1c20ed" - "1c20ee1c6a21ef1c20ee1c20ef1c6a21f01c20ef1c20f01c6a21f11c20f01c20f11c6a21f21c20f11c20f21c6a21f3" - "1c20f21c20f31c6a21f4" - "1c20f31c20f41c6a21f51c20f41c20f51c6a21f61c20f51c20f61c6a21f71c20f61c20f71c6a21f81c20f71c20f81c" - "6a21f91c20f81c20f91c" - "6a21fa1c20f91c20fa1c6a21fb1c20fa1c20fb1c6a21fc1c20fb1c20fc1c6a21fd1c20fc1c20fd1c6a21fe1c20fd1c" - "20fe1c6a21ff1c20fe1c" - "20ff1c6a21801d20ff1c20801d6a21811d20801d20811d6a21821d20811d20821d6a21831d20821d20831d6a21841d" - "20831d20841d6a21851d" - "20841d20851d6a21861d20851d20861d6a21871d20861d20871d6a21881d20871d20881d6a21891d20881d20891d6a" - "218a1d20891d208a1d6a" - "218b1d208a1d208b1d6a218c1d208b1d208c1d6a218d1d208c1d208d1d6a218e1d208d1d208e1d6a218f1d208e1d20" - "8f1d6a21901d208f1d20" - "901d6a21911d20901d20911d6a21921d20911d20921d6a21931d20921d20931d6a21941d20931d20941d6a21951d20" - "941d20951d6a21961d20" - "951d20961d6a21971d20961d20971d6a21981d20971d20981d6a21991d20981d20991d6a219a1d20991d209a1d6a21" - "9b1d209a1d209b1d6a21" - "9c1d209b1d209c1d6a219d1d209c1d209d1d6a219e1d209d1d209e1d6a219f1d209e1d209f1d6a21a01d209f1d20a0" - "1d6a21a11d20a01d20a1" - "1d6a21a21d20a11d20a21d6a21a31d20a21d20a31d6a21a41d20a31d20a41d6a21a51d20a41d20a51d6a21a61d20a5" - "1d20a61d6a21a71d20a6" - "1d20a71d6a21a81d20a71d20a81d6a21a91d20a81d20a91d6a21aa1d20a91d20aa1d6a21ab1d20aa1d20ab1d6a21ac" - "1d20ab1d20ac1d6a21ad" - "1d20ac1d20ad1d6a21ae1d20ad1d20ae1d6a21af1d20ae1d20af1d6a21b01d20af1d20b01d6a21b11d20b01d20b11d" - "6a21b21d20b11d20b21d" - "6a21b31d20b21d20b31d6a21b41d20b31d20b41d6a21b51d20b41d20b51d6a21b61d20b51d20b61d6a21b71d20b61d" - "20b71d6a21b81d20b71d" - "20b81d6a21b91d20b81d20b91d6a21ba1d20b91d20ba1d6a21bb1d20ba1d20bb1d6a21bc1d20bb1d20bc1d6a21bd1d" - "20bc1d20bd1d6a21be1d" - "20bd1d20be1d6a21bf1d20be1d20bf1d6a21c01d20bf1d20c01d6a21c11d20c01d20c11d6a21c21d20c11d20c21d6a" - "21c31d20c21d20c31d6a" - "21c41d20c31d20c41d6a21c51d20c41d20c51d6a21c61d20c51d20c61d6a21c71d20c61d20c71d6a21c81d20c71d20" - "c81d6a21c91d20c81d20" + "1b20c21b6a21c31b20c21b20c31b6a21c41b20c31b20c41b6a21c51b20c41b20c51b6a21c61b20c51b20c61b6a21c7" + "1b20c61b20c71b6a21c81b20c71b20c81b6a21c91b20c81b20c91b6a21ca1b20c91b20ca1b6a21cb1b20ca1b20cb1b" + "6a21cc1b20cb1b20cc1b6a21cd1b20cc1b20cd1b6a21ce1b20cd1b20ce1b6a21cf1b20ce1b20cf1b6a21d01b20cf1b" + "20d01b6a21d11b20d01b20d11b6a21d21b20d11b20d21b6a21d31b20d21b20d31b6a21d41b20d31b20d41b6a21d51b" + "20d41b20d51b6a21d61b20d51b20d61b6a21d71b20d61b20d71b6a21d81b20d71b20d81b6a21d91b20d81b20d91b6a" + "21da1b20d91b20da1b6a21db1b20da1b20db1b6a21dc1b20db1b20dc1b6a21dd1b20dc1b20dd1b6a21de1b20dd1b20" + "de1b6a21df1b20de1b20df1b6a21e01b20df1b20e01b6a21e11b20e01b20e11b6a21e21b20e11b20e21b6a21e31b20" + "e21b20e31b6a21e41b20e31b20e41b6a21e51b20e41b20e51b6a21e61b20e51b20e61b6a21e71b20e61b20e71b6a21" + "e81b20e71b20e81b6a21e91b20e81b20e91b6a21ea1b20e91b20ea1b6a21eb1b20ea1b20eb1b6a21ec1b20eb1b20ec" + "1b6a21ed1b20ec1b20ed1b6a21ee1b20ed1b20ee1b6a21ef1b20ee1b20ef1b6a21f01b20ef1b20f01b6a21f11b20f0" + "1b20f11b6a21f21b20f11b20f21b6a21f31b20f21b20f31b6a21f41b20f31b20f41b6a21f51b20f41b20f51b6a21f6" + "1b20f51b20f61b6a21f71b20f61b20f71b6a21f81b20f71b20f81b6a21f91b20f81b20f91b6a21fa1b20f91b20fa1b" + "6a21fb1b20fa1b20fb1b6a21fc1b20fb1b20fc1b6a21fd1b20fc1b20fd1b6a21fe1b20fd1b20fe1b6a21ff1b20fe1b" + "20ff1b6a21801c20ff1b20801c6a21811c20801c20811c6a21821c20811c20821c6a21831c20821c20831c6a21841c" + "20831c20841c6a21851c20841c20851c6a21861c20851c20861c6a21871c20861c20871c6a21881c20871c20881c6a" + "21891c20881c20891c6a218a1c20891c208a1c6a218b1c208a1c208b1c6a218c1c208b1c208c1c6a218d1c208c1c20" + "8d1c6a218e1c208d1c208e1c6a218f1c208e1c208f1c6a21901c208f1c20901c6a21911c20901c20911c6a21921c20" + "911c20921c6a21931c20921c20931c6a21941c20931c20941c6a21951c20941c20951c6a21961c20951c20961c6a21" + "971c20961c20971c6a21981c20971c20981c6a21991c20981c20991c6a219a1c20991c209a1c6a219b1c209a1c209b" + "1c6a219c1c209b1c209c1c6a219d1c209c1c209d1c6a219e1c209d1c209e1c6a219f1c209e1c209f1c6a21a01c209f" + "1c20a01c6a21a11c20a01c20a11c6a21a21c20a11c20a21c6a21a31c20a21c20a31c6a21a41c20a31c20a41c6a21a5" + "1c20a41c20a51c6a21a61c20a51c20a61c6a21a71c20a61c20a71c6a21a81c20a71c20a81c6a21a91c20a81c20a91c" + "6a21aa1c20a91c20aa1c6a21ab1c20aa1c20ab1c6a21ac1c20ab1c20ac1c6a21ad1c20ac1c20ad1c6a21ae1c20ad1c" + "20ae1c6a21af1c20ae1c20af1c6a21b01c20af1c20b01c6a21b11c20b01c20b11c6a21b21c20b11c20b21c6a21b31c" + "20b21c20b31c6a21b41c20b31c20b41c6a21b51c20b41c20b51c6a21b61c20b51c20b61c6a21b71c20b61c20b71c6a" + "21b81c20b71c20b81c6a21b91c20b81c20b91c6a21ba1c20b91c20ba1c6a21bb1c20ba1c20bb1c6a21bc1c20bb1c20" + "bc1c6a21bd1c20bc1c20bd1c6a21be1c20bd1c20be1c6a21bf1c20be1c20bf1c6a21c01c20bf1c20c01c6a21c11c20" + "c01c20c11c6a21c21c20c11c20c21c6a21c31c20c21c20c31c6a21c41c20c31c20c41c6a21c51c20c41c20c51c6a21" + "c61c20c51c20c61c6a21c71c20c61c20c71c6a21c81c20c71c20c81c6a21c91c20c81c20c91c6a21ca1c20c91c20ca" + "1c6a21cb1c20ca1c20cb1c6a21cc1c20cb1c20cc1c6a21cd1c20cc1c20cd1c6a21ce1c20cd1c20ce1c6a21cf1c20ce" + "1c20cf1c6a21d01c20cf1c20d01c6a21d11c20d01c20d11c6a21d21c20d11c20d21c6a21d31c20d21c20d31c6a21d4" + "1c20d31c20d41c6a21d51c20d41c20d51c6a21d61c20d51c20d61c6a21d71c20d61c20d71c6a21d81c20d71c20d81c" + "6a21d91c20d81c20d91c6a21da1c20d91c20da1c6a21db1c20da1c20db1c6a21dc1c20db1c20dc1c6a21dd1c20dc1c" + "20dd1c6a21de1c20dd1c20de1c6a21df1c20de1c20df1c6a21e01c20df1c20e01c6a21e11c20e01c20e11c6a21e21c" + "20e11c20e21c6a21e31c20e21c20e31c6a21e41c20e31c20e41c6a21e51c20e41c20e51c6a21e61c20e51c20e61c6a" + "21e71c20e61c20e71c6a21e81c20e71c20e81c6a21e91c20e81c20e91c6a21ea1c20e91c20ea1c6a21eb1c20ea1c20" + "eb1c6a21ec1c20eb1c20ec1c6a21ed1c20ec1c20ed1c6a21ee1c20ed1c20ee1c6a21ef1c20ee1c20ef1c6a21f01c20" + "ef1c20f01c6a21f11c20f01c20f11c6a21f21c20f11c20f21c6a21f31c20f21c20f31c6a21f41c20f31c20f41c6a21" + "f51c20f41c20f51c6a21f61c20f51c20f61c6a21f71c20f61c20f71c6a21f81c20f71c20f81c6a21f91c20f81c20f9" + "1c6a21fa1c20f91c20fa1c6a21fb1c20fa1c20fb1c6a21fc1c20fb1c20fc1c6a21fd1c20fc1c20fd1c6a21fe1c20fd" + "1c20fe1c6a21ff1c20fe1c20ff1c6a21801d20ff1c20801d6a21811d20801d20811d6a21821d20811d20821d6a2183" + "1d20821d20831d6a21841d20831d20841d6a21851d20841d20851d6a21861d20851d20861d6a21871d20861d20871d" + "6a21881d20871d20881d6a21891d20881d20891d6a218a1d20891d208a1d6a218b1d208a1d208b1d6a218c1d208b1d" + "208c1d6a218d1d208c1d208d1d6a218e1d208d1d208e1d6a218f1d208e1d208f1d6a21901d208f1d20901d6a21911d" + "20901d20911d6a21921d20911d20921d6a21931d20921d20931d6a21941d20931d20941d6a21951d20941d20951d6a" + "21961d20951d20961d6a21971d20961d20971d6a21981d20971d20981d6a21991d20981d20991d6a219a1d20991d20" + "9a1d6a219b1d209a1d209b1d6a219c1d209b1d209c1d6a219d1d209c1d209d1d6a219e1d209d1d209e1d6a219f1d20" + "9e1d209f1d6a21a01d209f1d20a01d6a21a11d20a01d20a11d6a21a21d20a11d20a21d6a21a31d20a21d20a31d6a21" + "a41d20a31d20a41d6a21a51d20a41d20a51d6a21a61d20a51d20a61d6a21a71d20a61d20a71d6a21a81d20a71d20a8" + "1d6a21a91d20a81d20a91d6a21aa1d20a91d20aa1d6a21ab1d20aa1d20ab1d6a21ac1d20ab1d20ac1d6a21ad1d20ac" + "1d20ad1d6a21ae1d20ad1d20ae1d6a21af1d20ae1d20af1d6a21b01d20af1d20b01d6a21b11d20b01d20b11d6a21b2" + "1d20b11d20b21d6a21b31d20b21d20b31d6a21b41d20b31d20b41d6a21b51d20b41d20b51d6a21b61d20b51d20b61d" + "6a21b71d20b61d20b71d6a21b81d20b71d20b81d6a21b91d20b81d20b91d6a21ba1d20b91d20ba1d6a21bb1d20ba1d" + "20bb1d6a21bc1d20bb1d20bc1d6a21bd1d20bc1d20bd1d6a21be1d20bd1d20be1d6a21bf1d20be1d20bf1d6a21c01d" + "20bf1d20c01d6a21c11d20c01d20c11d6a21c21d20c11d20c21d6a21c31d20c21d20c31d6a21c41d20c31d20c41d6a" + "21c51d20c41d20c51d6a21c61d20c51d20c61d6a21c71d20c61d20c71d6a21c81d20c71d20c81d6a21c91d20c81d20" "c91d6a21ca1d20c91d20ca1d6a21cb1d20ca1d20cb1d6a21cc1d20cb1d20cc1d6a21cd1d20cc1d20cd1d6a21ce1d20" - "cd1d20ce1d6a21cf1d20" - "ce1d20cf1d6a21d01d20cf1d20d01d6a21d11d20d01d20d11d6a21d21d20d11d20d21d6a21d31d20d21d20d31d6a21" - "d41d20d31d20d41d6a21" - "d51d20d41d20d51d6a21d61d20d51d20d61d6a21d71d20d61d20d71d6a21d81d20d71d20d81d6a21d91d20d81d20d9" - "1d6a21da1d20d91d20da" - "1d6a21db1d20da1d20db1d6a21dc1d20db1d20dc1d6a21dd1d20dc1d20dd1d6a21de1d20dd1d20de1d6a21df1d20de" - "1d20df1d6a21e01d20df" - "1d20e01d6a21e11d20e01d20e11d6a21e21d20e11d20e21d6a21e31d20e21d20e31d6a21e41d20e31d20e41d6a21e5" - "1d20e41d20e51d6a21e6" - "1d20e51d20e61d6a21e71d20e61d20e71d6a21e81d20e71d20e81d6a21e91d20e81d20e91d6a21ea1d20e91d20ea1d" - "6a21eb1d20ea1d20eb1d" - "6a21ec1d20eb1d20ec1d6a21ed1d20ec1d20ed1d6a21ee1d20ed1d20ee1d6a21ef1d20ee1d20ef1d6a21f01d20ef1d" - "20f01d6a21f11d20f01d" - "20f11d6a21f21d20f11d20f21d6a21f31d20f21d20f31d6a21f41d20f31d20f41d6a21f51d20f41d20f51d6a21f61d" - "20f51d20f61d6a21f71d" - "20f61d20f71d6a21f81d20f71d20f81d6a21f91d20f81d20f91d6a21fa1d20f91d20fa1d6a21fb1d20fa1d20fb1d6a" - "21fc1d20fb1d20fc1d6a" - "21fd1d20fc1d20fd1d6a21fe1d20fd1d20fe1d6a21ff1d20fe1d20ff1d6a21801e20ff1d20801e6a21811e20801e20" - "811e6a21821e20811e20" - "821e6a21831e20821e20831e6a21841e20831e20841e6a21851e20841e20851e6a21861e20851e20861e6a21871e20" - "861e20871e6a21881e20" - "871e20881e6a21891e20881e20891e6a218a1e20891e208a1e6a218b1e208a1e208b1e6a218c1e208b1e208c1e6a21" - "8d1e208c1e208d1e6a21" - "8e1e208d1e208e1e6a218f1e208e1e208f1e6a21901e208f1e20901e6a21911e20901e20911e6a21921e20911e2092" - "1e6a21931e20921e2093" - "1e6a21941e20931e20941e6a21951e20941e20951e6a21961e20951e20961e6a21971e20961e20971e6a21981e2097" - "1e20981e6a21991e2098" - "1e20991e6a219a1e20991e209a1e6a219b1e209a1e209b1e6a219c1e209b1e209c1e6a219d1e209c1e209d1e6a219e" - "1e209d1e209e1e6a219f" - "1e209e1e209f1e6a21a01e209f1e20a01e6a21a11e20a01e20a11e6a21a21e20a11e20a21e6a21a31e20a21e20a31e" - "6a21a41e20a31e20a41e" - "6a21a51e20a41e20a51e6a21a61e20a51e20a61e6a21a71e20a61e20a71e6a21a81e20a71e20a81e6a21a91e20a81e" - "20a91e6a21aa1e20a91e" - "20aa1e6a21ab1e20aa1e20ab1e6a21ac1e20ab1e20ac1e6a21ad1e20ac1e20ad1e6a21ae1e20ad1e20ae1e6a21af1e" - "20ae1e20af1e6a21b01e" - "20af1e20b01e6a21b11e20b01e20b11e6a21b21e20b11e20b21e6a21b31e20b21e20b31e6a21b41e20b31e20b41e6a" - "21b51e20b41e20b51e6a" - "21b61e20b51e20b61e6a21b71e20b61e20b71e6a21b81e20b71e20b81e6a21b91e20b81e20b91e6a21ba1e20b91e20" - "ba1e6a21bb1e20ba1e20" - "bb1e6a21bc1e20bb1e20bc1e6a21bd1e20bc1e20bd1e6a21be1e20bd1e20be1e6a21bf1e20be1e20bf1e6a21c01e20" - "bf1e20c01e6a21c11e20" - "c01e20c11e6a21c21e20c11e20c21e6a21c31e20c21e20c31e6a21c41e20c31e20c41e6a21c51e20c41e20c51e6a21" - "c61e20c51e20c61e6a21" - "c71e20c61e20c71e6a21c81e20c71e20c81e6a21c91e20c81e20c91e6a21ca1e20c91e20ca1e6a21cb1e20ca1e20cb" - "1e6a21cc1e20cb1e20cc" - "1e6a21cd1e20cc1e20cd1e6a21ce1e20cd1e20ce1e6a21cf1e20ce1e20cf1e6a21d01e20cf1e20d01e6a21d11e20d0" - "1e20d11e6a21d21e20d1" - "1e20d21e6a21d31e20d21e20d31e6a21d41e20d31e20d41e6a21d51e20d41e20d51e6a21d61e20d51e20d61e6a21d7" - "1e20d61e20d71e6a21d8" - "1e20d71e20d81e6a21d91e20d81e20d91e6a21da1e20d91e20da1e6a21db1e20da1e20db1e6a21dc1e20db1e20dc1e" - "6a21dd1e20dc1e20dd1e" - "6a21de1e20dd1e20de1e6a21df1e20de1e20df1e6a21e01e20df1e20e01e6a21e11e20e01e20e11e6a21e21e20e11e" - "20e21e6a21e31e20e21e" - "20e31e6a21e41e20e31e20e41e6a21e51e20e41e20e51e6a21e61e20e51e20e61e6a21e71e20e61e20e71e6a21e81e" - "20e71e20e81e6a21e91e" - "20e81e20e91e6a21ea1e20e91e20ea1e6a21eb1e20ea1e20eb1e6a21ec1e20eb1e20ec1e6a21ed1e20ec1e20ed1e6a" - "21ee1e20ed1e20ee1e6a" - "21ef1e20ee1e20ef1e6a21f01e20ef1e20f01e6a21f11e20f01e20f11e6a21f21e20f11e20f21e6a21f31e20f21e20" - "f31e6a21f41e20f31e20" - "f41e6a21f51e20f41e20f51e6a21f61e20f51e20f61e6a21f71e20f61e20f71e6a21f81e20f71e20f81e6a21f91e20" - "f81e20f91e6a21fa1e20" - "f91e20fa1e6a21fb1e20fa1e20fb1e6a21fc1e20fb1e20fc1e6a21fd1e20fc1e20fd1e6a21fe1e20fd1e20fe1e6a21" - "ff1e20fe1e20ff1e6a21" - "801f20ff1e20801f6a21811f20801f20811f6a21821f20811f20821f6a21831f20821f20831f6a21841f20831f2084" - "1f6a21851f20841f2085" - "1f6a21861f20851f20861f6a21871f20861f20871f6a21881f20871f20881f6a21891f20881f20891f6a218a1f2089" - "1f208a1f6a218b1f208a" - "1f208b1f6a218c1f208b1f208c1f6a218d1f208c1f208d1f6a218e1f208d1f208e1f6a218f1f208e1f208f1f6a2190" - "1f208f1f20901f6a2191" - "1f20901f20911f6a21921f20911f20921f6a21931f20921f20931f6a21941f20931f20941f6a21951f20941f20951f" - "6a21961f20951f20961f" - "6a21971f20961f20971f6a21981f20971f20981f6a21991f20981f20991f6a219a1f20991f209a1f6a219b1f209a1f" - "209b1f6a219c1f209b1f" - "209c1f6a219d1f209c1f209d1f6a219e1f209d1f209e1f6a219f1f209e1f209f1f6a21a01f209f1f20a01f6a21a11f" - "20a01f20a11f6a21a21f" - "20a11f20a21f6a21a31f20a21f20a31f6a21a41f20a31f20a41f6a21a51f20a41f20a51f6a21a61f20a51f20a61f6a" - "21a71f20a61f20a71f6a" - "21a81f20a71f20a81f6a21a91f20a81f20a91f6a21aa1f20a91f20aa1f6a21ab1f20aa1f20ab1f6a21ac1f20ab1f20" - "ac1f6a21ad1f20ac1f20" - "ad1f6a21ae1f20ad1f20ae1f6a21af1f20ae1f20af1f6a21b01f20af1f20b01f6a21b11f20b01f20b11f6a21b21f20" - "b11f20b21f6a21b31f20" - "b21f20b31f6a21b41f20b31f20b41f6a21b51f20b41f20b51f6a21b61f20b51f20b61f6a21b71f20b61f20b71f6a21" - "b81f20b71f20b81f6a21" - "b91f20b81f20b91f6a21ba1f20b91f20ba1f6a21bb1f20ba1f20bb1f6a21bc1f20bb1f20bc1f6a21bd1f20bc1f20bd" - "1f6a21be1f20bd1f20be" - "1f6a21bf1f20be1f20bf1f6a21c01f20bf1f20c01f6a21c11f20c01f20c11f6a21c21f20c11f20c21f6a21c31f20c2" - "1f20c31f6a21c41f20c3" - "1f20c41f6a21c51f20c41f20c51f6a21c61f20c51f20c61f6a21c71f20c61f20c71f6a21c81f20c71f20c81f6a21c9" - "1f20c81f20c91f6a21ca" - "1f20c91f20ca1f6a21cb1f20ca1f20cb1f6a21cc1f20cb1f20cc1f6a21cd1f20cc1f20cd1f6a21ce1f20cd1f20ce1f" - "6a21cf1f20ce1f20cf1f" - "6a21d01f20cf1f20d01f6a21d11f20d01f20d11f6a21d21f20d11f20d21f6a21d31f20d21f20d31f6a21d41f20d31f" - "20d41f6a21d51f20d41f" + "cd1d20ce1d6a21cf1d20ce1d20cf1d6a21d01d20cf1d20d01d6a21d11d20d01d20d11d6a21d21d20d11d20d21d6a21" + "d31d20d21d20d31d6a21d41d20d31d20d41d6a21d51d20d41d20d51d6a21d61d20d51d20d61d6a21d71d20d61d20d7" + "1d6a21d81d20d71d20d81d6a21d91d20d81d20d91d6a21da1d20d91d20da1d6a21db1d20da1d20db1d6a21dc1d20db" + "1d20dc1d6a21dd1d20dc1d20dd1d6a21de1d20dd1d20de1d6a21df1d20de1d20df1d6a21e01d20df1d20e01d6a21e1" + "1d20e01d20e11d6a21e21d20e11d20e21d6a21e31d20e21d20e31d6a21e41d20e31d20e41d6a21e51d20e41d20e51d" + "6a21e61d20e51d20e61d6a21e71d20e61d20e71d6a21e81d20e71d20e81d6a21e91d20e81d20e91d6a21ea1d20e91d" + "20ea1d6a21eb1d20ea1d20eb1d6a21ec1d20eb1d20ec1d6a21ed1d20ec1d20ed1d6a21ee1d20ed1d20ee1d6a21ef1d" + "20ee1d20ef1d6a21f01d20ef1d20f01d6a21f11d20f01d20f11d6a21f21d20f11d20f21d6a21f31d20f21d20f31d6a" + "21f41d20f31d20f41d6a21f51d20f41d20f51d6a21f61d20f51d20f61d6a21f71d20f61d20f71d6a21f81d20f71d20" + "f81d6a21f91d20f81d20f91d6a21fa1d20f91d20fa1d6a21fb1d20fa1d20fb1d6a21fc1d20fb1d20fc1d6a21fd1d20" + "fc1d20fd1d6a21fe1d20fd1d20fe1d6a21ff1d20fe1d20ff1d6a21801e20ff1d20801e6a21811e20801e20811e6a21" + "821e20811e20821e6a21831e20821e20831e6a21841e20831e20841e6a21851e20841e20851e6a21861e20851e2086" + "1e6a21871e20861e20871e6a21881e20871e20881e6a21891e20881e20891e6a218a1e20891e208a1e6a218b1e208a" + "1e208b1e6a218c1e208b1e208c1e6a218d1e208c1e208d1e6a218e1e208d1e208e1e6a218f1e208e1e208f1e6a2190" + "1e208f1e20901e6a21911e20901e20911e6a21921e20911e20921e6a21931e20921e20931e6a21941e20931e20941e" + "6a21951e20941e20951e6a21961e20951e20961e6a21971e20961e20971e6a21981e20971e20981e6a21991e20981e" + "20991e6a219a1e20991e209a1e6a219b1e209a1e209b1e6a219c1e209b1e209c1e6a219d1e209c1e209d1e6a219e1e" + "209d1e209e1e6a219f1e209e1e209f1e6a21a01e209f1e20a01e6a21a11e20a01e20a11e6a21a21e20a11e20a21e6a" + "21a31e20a21e20a31e6a21a41e20a31e20a41e6a21a51e20a41e20a51e6a21a61e20a51e20a61e6a21a71e20a61e20" + "a71e6a21a81e20a71e20a81e6a21a91e20a81e20a91e6a21aa1e20a91e20aa1e6a21ab1e20aa1e20ab1e6a21ac1e20" + "ab1e20ac1e6a21ad1e20ac1e20ad1e6a21ae1e20ad1e20ae1e6a21af1e20ae1e20af1e6a21b01e20af1e20b01e6a21" + "b11e20b01e20b11e6a21b21e20b11e20b21e6a21b31e20b21e20b31e6a21b41e20b31e20b41e6a21b51e20b41e20b5" + "1e6a21b61e20b51e20b61e6a21b71e20b61e20b71e6a21b81e20b71e20b81e6a21b91e20b81e20b91e6a21ba1e20b9" + "1e20ba1e6a21bb1e20ba1e20bb1e6a21bc1e20bb1e20bc1e6a21bd1e20bc1e20bd1e6a21be1e20bd1e20be1e6a21bf" + "1e20be1e20bf1e6a21c01e20bf1e20c01e6a21c11e20c01e20c11e6a21c21e20c11e20c21e6a21c31e20c21e20c31e" + "6a21c41e20c31e20c41e6a21c51e20c41e20c51e6a21c61e20c51e20c61e6a21c71e20c61e20c71e6a21c81e20c71e" + "20c81e6a21c91e20c81e20c91e6a21ca1e20c91e20ca1e6a21cb1e20ca1e20cb1e6a21cc1e20cb1e20cc1e6a21cd1e" + "20cc1e20cd1e6a21ce1e20cd1e20ce1e6a21cf1e20ce1e20cf1e6a21d01e20cf1e20d01e6a21d11e20d01e20d11e6a" + "21d21e20d11e20d21e6a21d31e20d21e20d31e6a21d41e20d31e20d41e6a21d51e20d41e20d51e6a21d61e20d51e20" + "d61e6a21d71e20d61e20d71e6a21d81e20d71e20d81e6a21d91e20d81e20d91e6a21da1e20d91e20da1e6a21db1e20" + "da1e20db1e6a21dc1e20db1e20dc1e6a21dd1e20dc1e20dd1e6a21de1e20dd1e20de1e6a21df1e20de1e20df1e6a21" + "e01e20df1e20e01e6a21e11e20e01e20e11e6a21e21e20e11e20e21e6a21e31e20e21e20e31e6a21e41e20e31e20e4" + "1e6a21e51e20e41e20e51e6a21e61e20e51e20e61e6a21e71e20e61e20e71e6a21e81e20e71e20e81e6a21e91e20e8" + "1e20e91e6a21ea1e20e91e20ea1e6a21eb1e20ea1e20eb1e6a21ec1e20eb1e20ec1e6a21ed1e20ec1e20ed1e6a21ee" + "1e20ed1e20ee1e6a21ef1e20ee1e20ef1e6a21f01e20ef1e20f01e6a21f11e20f01e20f11e6a21f21e20f11e20f21e" + "6a21f31e20f21e20f31e6a21f41e20f31e20f41e6a21f51e20f41e20f51e6a21f61e20f51e20f61e6a21f71e20f61e" + "20f71e6a21f81e20f71e20f81e6a21f91e20f81e20f91e6a21fa1e20f91e20fa1e6a21fb1e20fa1e20fb1e6a21fc1e" + "20fb1e20fc1e6a21fd1e20fc1e20fd1e6a21fe1e20fd1e20fe1e6a21ff1e20fe1e20ff1e6a21801f20ff1e20801f6a" + "21811f20801f20811f6a21821f20811f20821f6a21831f20821f20831f6a21841f20831f20841f6a21851f20841f20" + "851f6a21861f20851f20861f6a21871f20861f20871f6a21881f20871f20881f6a21891f20881f20891f6a218a1f20" + "891f208a1f6a218b1f208a1f208b1f6a218c1f208b1f208c1f6a218d1f208c1f208d1f6a218e1f208d1f208e1f6a21" + "8f1f208e1f208f1f6a21901f208f1f20901f6a21911f20901f20911f6a21921f20911f20921f6a21931f20921f2093" + "1f6a21941f20931f20941f6a21951f20941f20951f6a21961f20951f20961f6a21971f20961f20971f6a21981f2097" + "1f20981f6a21991f20981f20991f6a219a1f20991f209a1f6a219b1f209a1f209b1f6a219c1f209b1f209c1f6a219d" + "1f209c1f209d1f6a219e1f209d1f209e1f6a219f1f209e1f209f1f6a21a01f209f1f20a01f6a21a11f20a01f20a11f" + "6a21a21f20a11f20a21f6a21a31f20a21f20a31f6a21a41f20a31f20a41f6a21a51f20a41f20a51f6a21a61f20a51f" + "20a61f6a21a71f20a61f20a71f6a21a81f20a71f20a81f6a21a91f20a81f20a91f6a21aa1f20a91f20aa1f6a21ab1f" + "20aa1f20ab1f6a21ac1f20ab1f20ac1f6a21ad1f20ac1f20ad1f6a21ae1f20ad1f20ae1f6a21af1f20ae1f20af1f6a" + "21b01f20af1f20b01f6a21b11f20b01f20b11f6a21b21f20b11f20b21f6a21b31f20b21f20b31f6a21b41f20b31f20" + "b41f6a21b51f20b41f20b51f6a21b61f20b51f20b61f6a21b71f20b61f20b71f6a21b81f20b71f20b81f6a21b91f20" + "b81f20b91f6a21ba1f20b91f20ba1f6a21bb1f20ba1f20bb1f6a21bc1f20bb1f20bc1f6a21bd1f20bc1f20bd1f6a21" + "be1f20bd1f20be1f6a21bf1f20be1f20bf1f6a21c01f20bf1f20c01f6a21c11f20c01f20c11f6a21c21f20c11f20c2" + "1f6a21c31f20c21f20c31f6a21c41f20c31f20c41f6a21c51f20c41f20c51f6a21c61f20c51f20c61f6a21c71f20c6" + "1f20c71f6a21c81f20c71f20c81f6a21c91f20c81f20c91f6a21ca1f20c91f20ca1f6a21cb1f20ca1f20cb1f6a21cc" + "1f20cb1f20cc1f6a21cd1f20cc1f20cd1f6a21ce1f20cd1f20ce1f6a21cf1f20ce1f20cf1f6a21d01f20cf1f20d01f" + "6a21d11f20d01f20d11f6a21d21f20d11f20d21f6a21d31f20d21f20d31f6a21d41f20d31f20d41f6a21d51f20d41f" "20d51f6a21d61f20d51f20d61f6a21d71f20d61f20d71f6a21d81f20d71f20d81f6a21d91f20d81f20d91f6a21da1f" - "20d91f20da1f6a21db1f" - "20da1f20db1f6a21dc1f20db1f20dc1f6a21dd1f20dc1f20dd1f6a21de1f20dd1f20de1f6a21df1f20de1f20df1f6a" - "21e01f20df1f20e01f6a" - "21e11f20e01f20e11f6a21e21f20e11f20e21f6a21e31f20e21f20e31f6a21e41f20e31f20e41f6a21e51f20e41f20" - "e51f6a21e61f20e51f20" - "e61f6a21e71f20e61f20e71f6a21e81f20e71f20e81f6a21e91f20e81f20e91f6a21ea1f20e91f20ea1f6a21eb1f20" - "ea1f20eb1f6a21ec1f20" - "eb1f20ec1f6a21ed1f20ec1f20ed1f6a21ee1f20ed1f20ee1f6a21ef1f20ee1f20ef1f6a21f01f20ef1f20f01f6a21" - "f11f20f01f20f11f6a21" - "f21f20f11f20f21f6a21f31f20f21f20f31f6a21f41f20f31f20f41f6a21f51f20f41f20f51f6a21f61f20f51f20f6" - "1f6a21f71f20f61f20f7" - "1f6a21f81f20f71f20f81f6a21f91f20f81f20f91f6a21fa1f20f91f20fa1f6a21fb1f20fa1f20fb1f6a21fc1f20fb" - "1f20fc1f6a21fd1f20fc" - "1f20fd1f6a21fe1f20fd1f20fe1f6a21ff1f20fe1f20ff1f6a21802020ff1f2080206a2181202080202081206a2182" - "202081202082206a2183" - "202082202083206a2184202083202084206a2185202084202085206a2186202085202086206a218720208620208720" - "6a218820208720208820" - "6a2189202088202089206a218a20208920208a206a218b20208a20208b206a218c20208b20208c206a218d20208c20" - "208d206a218e20208d20" - "208e206a218f20208e20208f206a219020208f202090206a2191202090202091206a2192202091202092206a219320" - "2092202093206a219420" - "2093202094206a2195202094202095206a2196202095202096206a2197202096202097206a2198202097202098206a" - "2199202098202099206a" - "219a20209920209a206a219b20209a20209b206a219c20209b20209c206a219d20209c20209d206a219e20209d2020" - "9e206a219f20209e2020" - "9f206a21a020209f2020a0206a21a12020a02020a1206a21a22020a12020a2206a21a32020a22020a3206a21a42020" - "a32020a4206a21a52020" - "a42020a5206a21a62020a52020a6206a21a72020a62020a7206a21a82020a72020a8206a21a92020a82020a9206a21" - "aa2020a92020aa206a21" - "ab2020aa2020ab206a21ac2020ab2020ac206a21ad2020ac2020ad206a21ae2020ad2020ae206a21af2020ae2020af" - "206a21b02020af2020b0" - "206a21b12020b02020b1206a21b22020b12020b2206a21b32020b22020b3206a21b42020b32020b4206a21b52020b4" - "2020b5206a21b62020b5" - "2020b6206a21b72020b62020b7206a21b82020b72020b8206a21b92020b82020b9206a21ba2020b92020ba206a21bb" - "2020ba2020bb206a21bc" - "2020bb2020bc206a21bd2020bc2020bd206a21be2020bd2020be206a21bf2020be2020bf206a21c02020bf2020c020" - "6a21c12020c02020c120" - "6a21c22020c12020c2206a21c32020c22020c3206a21c42020c32020c4206a21c52020c42020c5206a21c62020c520" - "20c6206a21c72020c620" - "20c7206a21c82020c72020c8206a21c92020c82020c9206a21ca2020c92020ca206a21cb2020ca2020cb206a21cc20" - "20cb2020cc206a21cd20" - "20cc2020cd206a21ce2020cd2020ce206a21cf2020ce2020cf206a21d02020cf2020d0206a21d12020d02020d1206a" - "21d22020d12020d2206a" - "21d32020d22020d3206a21d42020d32020d4206a21d52020d42020d5206a21d62020d52020d6206a21d72020d62020" - "d7206a21d82020d72020" - "d8206a21d92020d82020d9206a21da2020d92020da206a21db2020da2020db206a21dc2020db2020dc206a21dd2020" - "dc2020dd206a21de2020" - "dd2020de206a21df2020de2020df206a21e02020df2020e0206a21e12020e02020e1206a21e22020e12020e2206a21" - "e32020e22020e3206a21" - "e42020e32020e4206a21e52020e42020e5206a21e62020e52020e6206a21e72020e62020e7206a21e82020e72020e8" - "206a21e92020e82020e9" - "206a21ea2020e92020ea206a21eb2020ea2020eb206a21ec2020eb2020ec206a21ed2020ec2020ed206a21ee2020ed" - "2020ee206a21ef2020ee" - "2020ef206a21f02020ef2020f0206a21f12020f02020f1206a21f22020f12020f2206a21f32020f22020f3206a21f4" - "2020f32020f4206a21f5" - "2020f42020f5206a21f62020f52020f6206a21f72020f62020f7206a21f82020f72020f8206a21f92020f82020f920" - "6a21fa2020f92020fa20" - "6a21fb2020fa2020fb206a21fc2020fb2020fc206a21fd2020fc2020fd206a21fe2020fd2020fe206a21ff2020fe20" - "20ff206a21802120ff20" - "2080216a2181212080212081216a2182212081212082216a2183212082212083216a2184212083212084216a218521" - "2084212085216a218621" - "2085212086216a2187212086212087216a2188212087212088216a2189212088212089216a218a21208921208a216a" - "218b21208a21208b216a" - "218c21208b21208c216a218d21208c21208d216a218e21208d21208e216a218f21208e21208f216a219021208f2120" - "90216a21912120902120" - "91216a2192212091212092216a2193212092212093216a2194212093212094216a2195212094212095216a21962120" - "95212096216a21972120" - "96212097216a2198212097212098216a2199212098212099216a219a21209921209a216a219b21209a21209b216a21" - "9c21209b21209c216a21" - "9d21209c21209d216a219e21209d21209e216a219f21209e21209f216a21a021209f2120a0216a21a12120a02120a1" - "216a21a22120a12120a2" - "216a21a32120a22120a3216a21a42120a32120a4216a21a52120a42120a5216a21a62120a52120a6216a21a72120a6" - "2120a7216a21a82120a7" - "2120a8216a21a92120a82120a9216a21aa2120a92120aa216a21ab2120aa2120ab216a21ac2120ab2120ac216a21ad" - "2120ac2120ad216a21ae" - "2120ad2120ae216a21af2120ae2120af216a21b02120af2120b0216a21b12120b02120b1216a21b22120b12120b221" - "6a21b32120b22120b321" - "6a21b42120b32120b4216a21b52120b42120b5216a21b62120b52120b6216a21b72120b62120b7216a21b82120b721" - "20b8216a21b92120b821" - "20b9216a21ba2120b92120ba216a21bb2120ba2120bb216a21bc2120bb2120bc216a21bd2120bc2120bd216a21be21" - "20bd2120be216a21bf21" - "20be2120bf216a21c02120bf2120c0216a21c12120c02120c1216a21c22120c12120c2216a21c32120c22120c3216a" - "21c42120c32120c4216a" - "21c52120c42120c5216a21c62120c52120c6216a21c72120c62120c7216a21c82120c72120c8216a21c92120c82120" - "c9216a21ca2120c92120" - "ca216a21cb2120ca2120cb216a21cc2120cb2120cc216a21cd2120cc2120cd216a21ce2120cd2120ce216a21cf2120" - "ce2120cf216a21d02120" - "cf2120d0216a21d12120d02120d1216a21d22120d12120d2216a21d32120d22120d3216a21d42120d32120d4216a21" - "d52120d42120d5216a21" - "d62120d52120d6216a21d72120d62120d7216a21d82120d72120d8216a21d92120d82120d9216a21da2120d92120da" - "216a21db2120da2120db" - "216a21dc2120db2120dc216a21dd2120dc2120dd216a21de2120dd2120de216a21df2120de2120df216a21e02120df" - "2120e0216a21e12120e0" + "20d91f20da1f6a21db1f20da1f20db1f6a21dc1f20db1f20dc1f6a21dd1f20dc1f20dd1f6a21de1f20dd1f20de1f6a" + "21df1f20de1f20df1f6a21e01f20df1f20e01f6a21e11f20e01f20e11f6a21e21f20e11f20e21f6a21e31f20e21f20" + "e31f6a21e41f20e31f20e41f6a21e51f20e41f20e51f6a21e61f20e51f20e61f6a21e71f20e61f20e71f6a21e81f20" + "e71f20e81f6a21e91f20e81f20e91f6a21ea1f20e91f20ea1f6a21eb1f20ea1f20eb1f6a21ec1f20eb1f20ec1f6a21" + "ed1f20ec1f20ed1f6a21ee1f20ed1f20ee1f6a21ef1f20ee1f20ef1f6a21f01f20ef1f20f01f6a21f11f20f01f20f1" + "1f6a21f21f20f11f20f21f6a21f31f20f21f20f31f6a21f41f20f31f20f41f6a21f51f20f41f20f51f6a21f61f20f5" + "1f20f61f6a21f71f20f61f20f71f6a21f81f20f71f20f81f6a21f91f20f81f20f91f6a21fa1f20f91f20fa1f6a21fb" + "1f20fa1f20fb1f6a21fc1f20fb1f20fc1f6a21fd1f20fc1f20fd1f6a21fe1f20fd1f20fe1f6a21ff1f20fe1f20ff1f" + "6a21802020ff1f2080206a2181202080202081206a2182202081202082206a2183202082202083206a218420208320" + "2084206a2185202084202085206a2186202085202086206a2187202086202087206a2188202087202088206a218920" + "2088202089206a218a20208920208a206a218b20208a20208b206a218c20208b20208c206a218d20208c20208d206a" + "218e20208d20208e206a218f20208e20208f206a219020208f202090206a2191202090202091206a21922020912020" + "92206a2193202092202093206a2194202093202094206a2195202094202095206a2196202095202096206a21972020" + "96202097206a2198202097202098206a2199202098202099206a219a20209920209a206a219b20209a20209b206a21" + "9c20209b20209c206a219d20209c20209d206a219e20209d20209e206a219f20209e20209f206a21a020209f2020a0" + "206a21a12020a02020a1206a21a22020a12020a2206a21a32020a22020a3206a21a42020a32020a4206a21a52020a4" + "2020a5206a21a62020a52020a6206a21a72020a62020a7206a21a82020a72020a8206a21a92020a82020a9206a21aa" + "2020a92020aa206a21ab2020aa2020ab206a21ac2020ab2020ac206a21ad2020ac2020ad206a21ae2020ad2020ae20" + "6a21af2020ae2020af206a21b02020af2020b0206a21b12020b02020b1206a21b22020b12020b2206a21b32020b220" + "20b3206a21b42020b32020b4206a21b52020b42020b5206a21b62020b52020b6206a21b72020b62020b7206a21b820" + "20b72020b8206a21b92020b82020b9206a21ba2020b92020ba206a21bb2020ba2020bb206a21bc2020bb2020bc206a" + "21bd2020bc2020bd206a21be2020bd2020be206a21bf2020be2020bf206a21c02020bf2020c0206a21c12020c02020" + "c1206a21c22020c12020c2206a21c32020c22020c3206a21c42020c32020c4206a21c52020c42020c5206a21c62020" + "c52020c6206a21c72020c62020c7206a21c82020c72020c8206a21c92020c82020c9206a21ca2020c92020ca206a21" + "cb2020ca2020cb206a21cc2020cb2020cc206a21cd2020cc2020cd206a21ce2020cd2020ce206a21cf2020ce2020cf" + "206a21d02020cf2020d0206a21d12020d02020d1206a21d22020d12020d2206a21d32020d22020d3206a21d42020d3" + "2020d4206a21d52020d42020d5206a21d62020d52020d6206a21d72020d62020d7206a21d82020d72020d8206a21d9" + "2020d82020d9206a21da2020d92020da206a21db2020da2020db206a21dc2020db2020dc206a21dd2020dc2020dd20" + "6a21de2020dd2020de206a21df2020de2020df206a21e02020df2020e0206a21e12020e02020e1206a21e22020e120" + "20e2206a21e32020e22020e3206a21e42020e32020e4206a21e52020e42020e5206a21e62020e52020e6206a21e720" + "20e62020e7206a21e82020e72020e8206a21e92020e82020e9206a21ea2020e92020ea206a21eb2020ea2020eb206a" + "21ec2020eb2020ec206a21ed2020ec2020ed206a21ee2020ed2020ee206a21ef2020ee2020ef206a21f02020ef2020" + "f0206a21f12020f02020f1206a21f22020f12020f2206a21f32020f22020f3206a21f42020f32020f4206a21f52020" + "f42020f5206a21f62020f52020f6206a21f72020f62020f7206a21f82020f72020f8206a21f92020f82020f9206a21" + "fa2020f92020fa206a21fb2020fa2020fb206a21fc2020fb2020fc206a21fd2020fc2020fd206a21fe2020fd2020fe" + "206a21ff2020fe2020ff206a21802120ff202080216a2181212080212081216a2182212081212082216a2183212082" + "212083216a2184212083212084216a2185212084212085216a2186212085212086216a2187212086212087216a2188" + "212087212088216a2189212088212089216a218a21208921208a216a218b21208a21208b216a218c21208b21208c21" + "6a218d21208c21208d216a218e21208d21208e216a218f21208e21208f216a219021208f212090216a219121209021" + "2091216a2192212091212092216a2193212092212093216a2194212093212094216a2195212094212095216a219621" + "2095212096216a2197212096212097216a2198212097212098216a2199212098212099216a219a21209921209a216a" + "219b21209a21209b216a219c21209b21209c216a219d21209c21209d216a219e21209d21209e216a219f21209e2120" + "9f216a21a021209f2120a0216a21a12120a02120a1216a21a22120a12120a2216a21a32120a22120a3216a21a42120" + "a32120a4216a21a52120a42120a5216a21a62120a52120a6216a21a72120a62120a7216a21a82120a72120a8216a21" + "a92120a82120a9216a21aa2120a92120aa216a21ab2120aa2120ab216a21ac2120ab2120ac216a21ad2120ac2120ad" + "216a21ae2120ad2120ae216a21af2120ae2120af216a21b02120af2120b0216a21b12120b02120b1216a21b22120b1" + "2120b2216a21b32120b22120b3216a21b42120b32120b4216a21b52120b42120b5216a21b62120b52120b6216a21b7" + "2120b62120b7216a21b82120b72120b8216a21b92120b82120b9216a21ba2120b92120ba216a21bb2120ba2120bb21" + "6a21bc2120bb2120bc216a21bd2120bc2120bd216a21be2120bd2120be216a21bf2120be2120bf216a21c02120bf21" + "20c0216a21c12120c02120c1216a21c22120c12120c2216a21c32120c22120c3216a21c42120c32120c4216a21c521" + "20c42120c5216a21c62120c52120c6216a21c72120c62120c7216a21c82120c72120c8216a21c92120c82120c9216a" + "21ca2120c92120ca216a21cb2120ca2120cb216a21cc2120cb2120cc216a21cd2120cc2120cd216a21ce2120cd2120" + "ce216a21cf2120ce2120cf216a21d02120cf2120d0216a21d12120d02120d1216a21d22120d12120d2216a21d32120" + "d22120d3216a21d42120d32120d4216a21d52120d42120d5216a21d62120d52120d6216a21d72120d62120d7216a21" + "d82120d72120d8216a21d92120d82120d9216a21da2120d92120da216a21db2120da2120db216a21dc2120db2120dc" + "216a21dd2120dc2120dd216a21de2120dd2120de216a21df2120de2120df216a21e02120df2120e0216a21e12120e0" "2120e1216a21e22120e12120e2216a21e32120e22120e3216a21e42120e32120e4216a21e52120e42120e5216a21e6" - "2120e52120e6216a21e7" - "2120e62120e7216a21e82120e72120e8216a21e92120e82120e9216a21ea2120e92120ea216a21eb2120ea2120eb21" - "6a21ec2120eb2120ec21" - "6a21ed2120ec2120ed216a21ee2120ed2120ee216a21ef2120ee2120ef216a21f02120ef2120f0216a21f12120f021" - "20f1216a21f22120f121" - "20f2216a21f32120f22120f3216a21f42120f32120f4216a21f52120f42120f5216a21f62120f52120f6216a21f721" - "20f62120f7216a21f821" - "20f72120f8216a21f92120f82120f9216a21fa2120f92120fa216a21fb2120fa2120fb216a21fc2120fb2120fc216a" - "21fd2120fc2120fd216a" - "21fe2120fd2120fe216a21ff2120fe2120ff216a21802220ff212080226a2181222080222081226a21822220812220" - "82226a21832220822220" - "83226a2184222083222084226a2185222084222085226a2186222085222086226a2187222086222087226a21882220" - "87222088226a21892220" - "88222089226a218a22208922208a226a218b22208a22208b226a218c22208b22208c226a218d22208c22208d226a21" - "8e22208d22208e226a21" - "8f22208e22208f226a219022208f222090226a2191222090222091226a2192222091222092226a2193222092222093" - "226a2194222093222094" - "226a2195222094222095226a2196222095222096226a2197222096222097226a2198222097222098226a2199222098" - "222099226a219a222099" - "22209a226a219b22209a22209b226a219c22209b22209c226a219d22209c22209d226a219e22209d22209e226a219f" - "22209e22209f226a21a0" - "22209f2220a0226a21a12220a02220a1226a21a22220a12220a2226a21a32220a22220a3226a21a42220a32220a422" - "6a21a52220a42220a522" - "6a21a62220a52220a6226a21a72220a62220a7226a21a82220a72220a8226a21a92220a82220a9226a21aa2220a922" - "20aa226a21ab2220aa22" - "20ab226a21ac2220ab2220ac226a21ad2220ac2220ad226a21ae2220ad2220ae226a21af2220ae2220af226a21b022" - "20af2220b0226a21b122" - "20b02220b1226a21b22220b12220b2226a21b32220b22220b3226a21b42220b32220b4226a21b52220b42220b5226a" - "21b62220b52220b6226a" - "21b72220b62220b7226a21b82220b72220b8226a21b92220b82220b9226a21ba2220b92220ba226a21bb2220ba2220" - "bb226a21bc2220bb2220" - "bc226a21bd2220bc2220bd226a21be2220bd2220be226a21bf2220be2220bf226a21c02220bf2220c0226a21c12220" - "c02220c1226a21c22220" - "c12220c2226a21c32220c22220c3226a21c42220c32220c4226a21c52220c42220c5226a21c62220c52220c6226a21" - "c72220c62220c7226a21" - "c82220c72220c8226a21c92220c82220c9226a21ca2220c92220ca226a21cb2220ca2220cb226a21cc2220cb2220cc" - "226a21cd2220cc2220cd" - "226a21ce2220cd2220ce226a21cf2220ce2220cf226a21d02220cf2220d0226a21d12220d02220d1226a21d22220d1" - "2220d2226a21d32220d2" - "2220d3226a21d42220d32220d4226a21d52220d42220d5226a21d62220d52220d6226a21d72220d62220d7226a21d8" - "2220d72220d8226a21d9" - "2220d82220d9226a21da2220d92220da226a21db2220da2220db226a21dc2220db2220dc226a21dd2220dc2220dd22" - "6a21de2220dd2220de22" - "6a21df2220de2220df226a21e02220df2220e0226a21e12220e02220e1226a21e22220e12220e2226a21e32220e222" - "20e3226a21e42220e322" - "20e4226a21e52220e42220e5226a21e62220e52220e6226a21e72220e62220e7226a21e82220e72220e8226a21e922" - "20e82220e9226a21ea22" - "20e92220ea226a21eb2220ea2220eb226a21ec2220eb2220ec226a21ed2220ec2220ed226a21ee2220ed2220ee226a" - "21ef2220ee2220ef226a" - "21f02220ef2220f0226a21f12220f02220f1226a21f22220f12220f2226a21f32220f22220f3226a21f42220f32220" - "f4226a21f52220f42220" - "f5226a21f62220f52220f6226a21f72220f62220f7226a21f82220f72220f8226a21f92220f82220f9226a21fa2220" - "f92220fa226a21fb2220" - "fa2220fb226a21fc2220fb2220fc226a21fd2220fc2220fd226a21fe2220fd2220fe226a21ff2220fe2220ff226a21" - "802320ff222080236a21" - "81232080232081236a2182232081232082236a2183232082232083236a2184232083232084236a2185232084232085" - "236a2186232085232086" - "236a2187232086232087236a2188232087232088236a2189232088232089236a218a23208923208a236a218b23208a" - "23208b236a218c23208b" - "23208c236a218d23208c23208d236a218e23208d23208e236a218f23208e23208f236a219023208f232090236a2191" - "232090232091236a2192" - "232091232092236a2193232092232093236a2194232093232094236a2195232094232095236a219623209523209623" - "6a219723209623209723" - "6a2198232097232098236a2199232098232099236a219a23209923209a236a219b23209a23209b236a219c23209b23" - "209c236a219d23209c23" - "209d236a219e23209d23209e236a219f23209e23209f236a21a023209f2320a0236a21a12320a02320a1236a21a223" - "20a12320a2236a21a323" - "20a22320a3236a21a42320a32320a4236a21a52320a42320a5236a21a62320a52320a6236a21a72320a62320a7236a" - "21a82320a72320a8236a" - "21a92320a82320a9236a21aa2320a92320aa236a21ab2320aa2320ab236a21ac2320ab2320ac236a21ad2320ac2320" - "ad236a21ae2320ad2320" - "ae236a21af2320ae2320af236a21b02320af2320b0236a21b12320b02320b1236a21b22320b12320b2236a21b32320" - "b22320b3236a21b42320" - "b32320b4236a21b52320b42320b5236a21b62320b52320b6236a21b72320b62320b7236a21b82320b72320b8236a21" - "b92320b82320b9236a21" - "ba2320b92320ba236a21bb2320ba2320bb236a21bc2320bb2320bc236a21bd2320bc2320bd236a21be2320bd2320be" - "236a21bf2320be2320bf" - "236a21c02320bf2320c0236a21c12320c02320c1236a21c22320c12320c2236a21c32320c22320c3236a21c42320c3" - "2320c4236a21c52320c4" - "2320c5236a21c62320c52320c6236a21c72320c62320c7236a21c82320c72320c8236a21c92320c82320c9236a21ca" - "2320c92320ca236a21cb" - "2320ca2320cb236a21cc2320cb2320cc236a21cd2320cc2320cd236a21ce2320cd2320ce236a21cf2320ce2320cf23" - "6a21d02320cf2320d023" - "6a21d12320d02320d1236a21d22320d12320d2236a21d32320d22320d3236a21d42320d32320d4236a21d52320d423" - "20d5236a21d62320d523" - "20d6236a21d72320d62320d7236a21d82320d72320d8236a21d92320d82320d9236a21da2320d92320da236a21db23" - "20da2320db236a21dc23" - "20db2320dc236a21dd2320dc2320dd236a21de2320dd2320de236a21df2320de2320df236a21e02320df2320e0236a" - "21e12320e02320e1236a" - "21e22320e12320e2236a21e32320e22320e3236a21e42320e32320e4236a21e52320e42320e5236a21e62320e52320" - "e6236a21e72320e62320" - "e7236a21e82320e72320e8236a21e92320e82320e9236a21ea2320e92320ea236a21eb2320ea2320eb236a21ec2320" - "eb2320ec236a21ed2320" + "2120e52120e6216a21e72120e62120e7216a21e82120e72120e8216a21e92120e82120e9216a21ea2120e92120ea21" + "6a21eb2120ea2120eb216a21ec2120eb2120ec216a21ed2120ec2120ed216a21ee2120ed2120ee216a21ef2120ee21" + "20ef216a21f02120ef2120f0216a21f12120f02120f1216a21f22120f12120f2216a21f32120f22120f3216a21f421" + "20f32120f4216a21f52120f42120f5216a21f62120f52120f6216a21f72120f62120f7216a21f82120f72120f8216a" + "21f92120f82120f9216a21fa2120f92120fa216a21fb2120fa2120fb216a21fc2120fb2120fc216a21fd2120fc2120" + "fd216a21fe2120fd2120fe216a21ff2120fe2120ff216a21802220ff212080226a2181222080222081226a21822220" + "81222082226a2183222082222083226a2184222083222084226a2185222084222085226a2186222085222086226a21" + "87222086222087226a2188222087222088226a2189222088222089226a218a22208922208a226a218b22208a22208b" + "226a218c22208b22208c226a218d22208c22208d226a218e22208d22208e226a218f22208e22208f226a219022208f" + "222090226a2191222090222091226a2192222091222092226a2193222092222093226a2194222093222094226a2195" + "222094222095226a2196222095222096226a2197222096222097226a2198222097222098226a219922209822209922" + "6a219a22209922209a226a219b22209a22209b226a219c22209b22209c226a219d22209c22209d226a219e22209d22" + "209e226a219f22209e22209f226a21a022209f2220a0226a21a12220a02220a1226a21a22220a12220a2226a21a322" + "20a22220a3226a21a42220a32220a4226a21a52220a42220a5226a21a62220a52220a6226a21a72220a62220a7226a" + "21a82220a72220a8226a21a92220a82220a9226a21aa2220a92220aa226a21ab2220aa2220ab226a21ac2220ab2220" + "ac226a21ad2220ac2220ad226a21ae2220ad2220ae226a21af2220ae2220af226a21b02220af2220b0226a21b12220" + "b02220b1226a21b22220b12220b2226a21b32220b22220b3226a21b42220b32220b4226a21b52220b42220b5226a21" + "b62220b52220b6226a21b72220b62220b7226a21b82220b72220b8226a21b92220b82220b9226a21ba2220b92220ba" + "226a21bb2220ba2220bb226a21bc2220bb2220bc226a21bd2220bc2220bd226a21be2220bd2220be226a21bf2220be" + "2220bf226a21c02220bf2220c0226a21c12220c02220c1226a21c22220c12220c2226a21c32220c22220c3226a21c4" + "2220c32220c4226a21c52220c42220c5226a21c62220c52220c6226a21c72220c62220c7226a21c82220c72220c822" + "6a21c92220c82220c9226a21ca2220c92220ca226a21cb2220ca2220cb226a21cc2220cb2220cc226a21cd2220cc22" + "20cd226a21ce2220cd2220ce226a21cf2220ce2220cf226a21d02220cf2220d0226a21d12220d02220d1226a21d222" + "20d12220d2226a21d32220d22220d3226a21d42220d32220d4226a21d52220d42220d5226a21d62220d52220d6226a" + "21d72220d62220d7226a21d82220d72220d8226a21d92220d82220d9226a21da2220d92220da226a21db2220da2220" + "db226a21dc2220db2220dc226a21dd2220dc2220dd226a21de2220dd2220de226a21df2220de2220df226a21e02220" + "df2220e0226a21e12220e02220e1226a21e22220e12220e2226a21e32220e22220e3226a21e42220e32220e4226a21" + "e52220e42220e5226a21e62220e52220e6226a21e72220e62220e7226a21e82220e72220e8226a21e92220e82220e9" + "226a21ea2220e92220ea226a21eb2220ea2220eb226a21ec2220eb2220ec226a21ed2220ec2220ed226a21ee2220ed" + "2220ee226a21ef2220ee2220ef226a21f02220ef2220f0226a21f12220f02220f1226a21f22220f12220f2226a21f3" + "2220f22220f3226a21f42220f32220f4226a21f52220f42220f5226a21f62220f52220f6226a21f72220f62220f722" + "6a21f82220f72220f8226a21f92220f82220f9226a21fa2220f92220fa226a21fb2220fa2220fb226a21fc2220fb22" + "20fc226a21fd2220fc2220fd226a21fe2220fd2220fe226a21ff2220fe2220ff226a21802320ff222080236a218123" + "2080232081236a2182232081232082236a2183232082232083236a2184232083232084236a2185232084232085236a" + "2186232085232086236a2187232086232087236a2188232087232088236a2189232088232089236a218a2320892320" + "8a236a218b23208a23208b236a218c23208b23208c236a218d23208c23208d236a218e23208d23208e236a218f2320" + "8e23208f236a219023208f232090236a2191232090232091236a2192232091232092236a2193232092232093236a21" + "94232093232094236a2195232094232095236a2196232095232096236a2197232096232097236a2198232097232098" + "236a2199232098232099236a219a23209923209a236a219b23209a23209b236a219c23209b23209c236a219d23209c" + "23209d236a219e23209d23209e236a219f23209e23209f236a21a023209f2320a0236a21a12320a02320a1236a21a2" + "2320a12320a2236a21a32320a22320a3236a21a42320a32320a4236a21a52320a42320a5236a21a62320a52320a623" + "6a21a72320a62320a7236a21a82320a72320a8236a21a92320a82320a9236a21aa2320a92320aa236a21ab2320aa23" + "20ab236a21ac2320ab2320ac236a21ad2320ac2320ad236a21ae2320ad2320ae236a21af2320ae2320af236a21b023" + "20af2320b0236a21b12320b02320b1236a21b22320b12320b2236a21b32320b22320b3236a21b42320b32320b4236a" + "21b52320b42320b5236a21b62320b52320b6236a21b72320b62320b7236a21b82320b72320b8236a21b92320b82320" + "b9236a21ba2320b92320ba236a21bb2320ba2320bb236a21bc2320bb2320bc236a21bd2320bc2320bd236a21be2320" + "bd2320be236a21bf2320be2320bf236a21c02320bf2320c0236a21c12320c02320c1236a21c22320c12320c2236a21" + "c32320c22320c3236a21c42320c32320c4236a21c52320c42320c5236a21c62320c52320c6236a21c72320c62320c7" + "236a21c82320c72320c8236a21c92320c82320c9236a21ca2320c92320ca236a21cb2320ca2320cb236a21cc2320cb" + "2320cc236a21cd2320cc2320cd236a21ce2320cd2320ce236a21cf2320ce2320cf236a21d02320cf2320d0236a21d1" + "2320d02320d1236a21d22320d12320d2236a21d32320d22320d3236a21d42320d32320d4236a21d52320d42320d523" + "6a21d62320d52320d6236a21d72320d62320d7236a21d82320d72320d8236a21d92320d82320d9236a21da2320d923" + "20da236a21db2320da2320db236a21dc2320db2320dc236a21dd2320dc2320dd236a21de2320dd2320de236a21df23" + "20de2320df236a21e02320df2320e0236a21e12320e02320e1236a21e22320e12320e2236a21e32320e22320e3236a" + "21e42320e32320e4236a21e52320e42320e5236a21e62320e52320e6236a21e72320e62320e7236a21e82320e72320" + "e8236a21e92320e82320e9236a21ea2320e92320ea236a21eb2320ea2320eb236a21ec2320eb2320ec236a21ed2320" "ec2320ed236a21ee2320ed2320ee236a21ef2320ee2320ef236a21f02320ef2320f0236a21f12320f02320f1236a21" - "f22320f12320f2236a21" - "f32320f22320f3236a21f42320f32320f4236a21f52320f42320f5236a21f62320f52320f6236a21f72320f62320f7" - "236a21f82320f72320f8" - "236a21f92320f82320f9236a21fa2320f92320fa236a21fb2320fa2320fb236a21fc2320fb2320fc236a21fd2320fc" - "2320fd236a21fe2320fd" - "2320fe236a21ff2320fe2320ff236a21802420ff232080246a2181242080242081246a2182242081242082246a2183" - "242082242083246a2184" - "242083242084246a2185242084242085246a2186242085242086246a2187242086242087246a218824208724208824" - "6a218924208824208924" - "6a218a24208924208a246a218b24208a24208b246a218c24208b24208c246a218d24208c24208d246a218e24208d24" - "208e246a218f24208e24" - "208f246a219024208f242090246a2191242090242091246a2192242091242092246a2193242092242093246a219424" - "2093242094246a219524" - "2094242095246a2196242095242096246a2197242096242097246a2198242097242098246a2199242098242099246a" - "219a24209924209a246a" - "219b24209a24209b246a219c24209b24209c246a219d24209c24209d246a219e24209d24209e246a219f24209e2420" - "9f246a21a024209f2420" - "a0246a21a12420a02420a1246a21a22420a12420a2246a21a32420a22420a3246a21a42420a32420a4246a21a52420" - "a42420a5246a21a62420" - "a52420a6246a21a72420a62420a7246a21a82420a72420a8246a21a92420a82420a9246a21aa2420a92420aa246a21" - "ab2420aa2420ab246a21" - "ac2420ab2420ac246a21ad2420ac2420ad246a21ae2420ad2420ae246a21af2420ae2420af246a21b02420af2420b0" - "246a21b12420b02420b1" - "246a21b22420b12420b2246a21b32420b22420b3246a21b42420b32420b4246a21b52420b42420b5246a21b62420b5" - "2420b6246a21b72420b6" - "2420b7246a21b82420b72420b8246a21b92420b82420b9246a21ba2420b92420ba246a21bb2420ba2420bb246a21bc" - "2420bb2420bc246a21bd" - "2420bc2420bd246a21be2420bd2420be246a21bf2420be2420bf246a21c02420bf2420c0246a21c12420c02420c124" - "6a21c22420c12420c224" - "6a21c32420c22420c3246a21c42420c32420c4246a21c52420c42420c5246a21c62420c52420c6246a21c72420c624" - "20c7246a21c82420c724" - "20c8246a21c92420c82420c9246a21ca2420c92420ca246a21cb2420ca2420cb246a21cc2420cb2420cc246a21cd24" - "20cc2420cd246a21ce24" - "20cd2420ce246a21cf2420ce2420cf246a21d02420cf2420d0246a21d12420d02420d1246a21d22420d12420d2246a" - "21d32420d22420d3246a" - "21d42420d32420d4246a21d52420d42420d5246a21d62420d52420d6246a21d72420d62420d7246a21d82420d72420" - "d8246a21d92420d82420" - "d9246a21da2420d92420da246a21db2420da2420db246a21dc2420db2420dc246a21dd2420dc2420dd246a21de2420" - "dd2420de246a21df2420" - "de2420df246a21e02420df2420e0246a21e12420e02420e1246a21e22420e12420e2246a21e32420e22420e3246a21" - "e42420e32420e4246a21" - "e52420e42420e5246a21e62420e52420e6246a21e72420e62420e7246a21e82420e72420e8246a21e92420e82420e9" - "246a21ea2420e92420ea" - "246a21eb2420ea2420eb246a21ec2420eb2420ec246a21ed2420ec2420ed246a21ee2420ed2420ee246a21ef2420ee" - "2420ef246a21f02420ef" - "2420f0246a21f12420f02420f1246a21f22420f12420f2246a21f32420f22420f3246a21f42420f32420f4246a21f5" - "2420f42420f5246a21f6" - "2420f52420f6246a21f72420f62420f7246a21f82420f72420f8246a21f92420f82420f9246a21fa2420f92420fa24" - "6a21fb2420fa2420fb24" - "6a21fc2420fb2420fc246a21fd2420fc2420fd246a21fe2420fd2420fe246a21ff2420fe2420ff246a21802520ff24" - "2080256a218125208025" - "2081256a2182252081252082256a2183252082252083256a2184252083252084256a2185252084252085256a218625" - "2085252086256a218725" - "2086252087256a2188252087252088256a2189252088252089256a218a25208925208a256a218b25208a25208b256a" - "218c25208b25208c256a" - "218d25208c25208d256a218e25208d25208e256a218f25208e25208f256a219025208f252090256a21912520902520" - "91256a21922520912520" - "92256a2193252092252093256a2194252093252094256a2195252094252095256a2196252095252096256a21972520" - "96252097256a21982520" - "97252098256a2199252098252099256a219a25209925209a256a219b25209a25209b256a219c25209b25209c256a21" - "9d25209c25209d256a21" - "9e25209d25209e256a219f25209e25209f256a21a025209f2520a0256a21a12520a02520a1256a21a22520a12520a2" - "256a21a32520a22520a3" - "256a21a42520a32520a4256a21a52520a42520a5256a21a62520a52520a6256a21a72520a62520a7256a21a82520a7" - "2520a8256a21a92520a8" - "2520a9256a21aa2520a92520aa256a21ab2520aa2520ab256a21ac2520ab2520ac256a21ad2520ac2520ad256a21ae" - "2520ad2520ae256a21af" - "2520ae2520af256a21b02520af2520b0256a21b12520b02520b1256a21b22520b12520b2256a21b32520b22520b325" - "6a21b42520b32520b425" - "6a21b52520b42520b5256a21b62520b52520b6256a21b72520b62520b7256a21b82520b72520b8256a21b92520b825" - "20b9256a21ba2520b925" - "20ba256a21bb2520ba2520bb256a21bc2520bb2520bc256a21bd2520bc2520bd256a21be2520bd2520be256a21bf25" - "20be2520bf256a21c025" - "20bf2520c0256a21c12520c02520c1256a21c22520c12520c2256a21c32520c22520c3256a21c42520c32520c4256a" - "21c52520c42520c5256a" - "21c62520c52520c6256a21c72520c62520c7256a21c82520c72520c8256a21c92520c82520c9256a21ca2520c92520" - "ca256a21cb2520ca2520" - "cb256a21cc2520cb2520cc256a21cd2520cc2520cd256a21ce2520cd2520ce256a21cf2520ce2520cf256a21d02520" - "cf2520d0256a21d12520" - "d02520d1256a21d22520d12520d2256a21d32520d22520d3256a21d42520d32520d4256a21d52520d42520d5256a21" - "d62520d52520d6256a21" - "d72520d62520d7256a21d82520d72520d8256a21d92520d82520d9256a21da2520d92520da256a21db2520da2520db" - "256a21dc2520db2520dc" - "256a21dd2520dc2520dd256a21de2520dd2520de256a21df2520de2520df256a21e02520df2520e0256a21e12520e0" - "2520e1256a21e22520e1" - "2520e2256a21e32520e22520e3256a21e42520e32520e4256a21e52520e42520e5256a21e62520e52520e6256a21e7" - "2520e62520e7256a21e8" - "2520e72520e8256a21e92520e82520e9256a21ea2520e92520ea256a21eb2520ea2520eb256a21ec2520eb2520ec25" - "6a21ed2520ec2520ed25" - "6a21ee2520ed2520ee256a21ef2520ee2520ef256a21f02520ef2520f0256a21f12520f02520f1256a21f22520f125" - "20f2256a21f32520f225" - "20f3256a21f42520f32520f4256a21f52520f42520f5256a21f62520f52520f6256a21f72520f62520f7256a21f825" - "20f72520f8256a21f925" + "f22320f12320f2236a21f32320f22320f3236a21f42320f32320f4236a21f52320f42320f5236a21f62320f52320f6" + "236a21f72320f62320f7236a21f82320f72320f8236a21f92320f82320f9236a21fa2320f92320fa236a21fb2320fa" + "2320fb236a21fc2320fb2320fc236a21fd2320fc2320fd236a21fe2320fd2320fe236a21ff2320fe2320ff236a2180" + "2420ff232080246a2181242080242081246a2182242081242082246a2183242082242083246a218424208324208424" + "6a2185242084242085246a2186242085242086246a2187242086242087246a2188242087242088246a218924208824" + "2089246a218a24208924208a246a218b24208a24208b246a218c24208b24208c246a218d24208c24208d246a218e24" + "208d24208e246a218f24208e24208f246a219024208f242090246a2191242090242091246a2192242091242092246a" + "2193242092242093246a2194242093242094246a2195242094242095246a2196242095242096246a21972420962420" + "97246a2198242097242098246a2199242098242099246a219a24209924209a246a219b24209a24209b246a219c2420" + "9b24209c246a219d24209c24209d246a219e24209d24209e246a219f24209e24209f246a21a024209f2420a0246a21" + "a12420a02420a1246a21a22420a12420a2246a21a32420a22420a3246a21a42420a32420a4246a21a52420a42420a5" + "246a21a62420a52420a6246a21a72420a62420a7246a21a82420a72420a8246a21a92420a82420a9246a21aa2420a9" + "2420aa246a21ab2420aa2420ab246a21ac2420ab2420ac246a21ad2420ac2420ad246a21ae2420ad2420ae246a21af" + "2420ae2420af246a21b02420af2420b0246a21b12420b02420b1246a21b22420b12420b2246a21b32420b22420b324" + "6a21b42420b32420b4246a21b52420b42420b5246a21b62420b52420b6246a21b72420b62420b7246a21b82420b724" + "20b8246a21b92420b82420b9246a21ba2420b92420ba246a21bb2420ba2420bb246a21bc2420bb2420bc246a21bd24" + "20bc2420bd246a21be2420bd2420be246a21bf2420be2420bf246a21c02420bf2420c0246a21c12420c02420c1246a" + "21c22420c12420c2246a21c32420c22420c3246a21c42420c32420c4246a21c52420c42420c5246a21c62420c52420" + "c6246a21c72420c62420c7246a21c82420c72420c8246a21c92420c82420c9246a21ca2420c92420ca246a21cb2420" + "ca2420cb246a21cc2420cb2420cc246a21cd2420cc2420cd246a21ce2420cd2420ce246a21cf2420ce2420cf246a21" + "d02420cf2420d0246a21d12420d02420d1246a21d22420d12420d2246a21d32420d22420d3246a21d42420d32420d4" + "246a21d52420d42420d5246a21d62420d52420d6246a21d72420d62420d7246a21d82420d72420d8246a21d92420d8" + "2420d9246a21da2420d92420da246a21db2420da2420db246a21dc2420db2420dc246a21dd2420dc2420dd246a21de" + "2420dd2420de246a21df2420de2420df246a21e02420df2420e0246a21e12420e02420e1246a21e22420e12420e224" + "6a21e32420e22420e3246a21e42420e32420e4246a21e52420e42420e5246a21e62420e52420e6246a21e72420e624" + "20e7246a21e82420e72420e8246a21e92420e82420e9246a21ea2420e92420ea246a21eb2420ea2420eb246a21ec24" + "20eb2420ec246a21ed2420ec2420ed246a21ee2420ed2420ee246a21ef2420ee2420ef246a21f02420ef2420f0246a" + "21f12420f02420f1246a21f22420f12420f2246a21f32420f22420f3246a21f42420f32420f4246a21f52420f42420" + "f5246a21f62420f52420f6246a21f72420f62420f7246a21f82420f72420f8246a21f92420f82420f9246a21fa2420" + "f92420fa246a21fb2420fa2420fb246a21fc2420fb2420fc246a21fd2420fc2420fd246a21fe2420fd2420fe246a21" + "ff2420fe2420ff246a21802520ff242080256a2181252080252081256a2182252081252082256a2183252082252083" + "256a2184252083252084256a2185252084252085256a2186252085252086256a2187252086252087256a2188252087" + "252088256a2189252088252089256a218a25208925208a256a218b25208a25208b256a218c25208b25208c256a218d" + "25208c25208d256a218e25208d25208e256a218f25208e25208f256a219025208f252090256a219125209025209125" + "6a2192252091252092256a2193252092252093256a2194252093252094256a2195252094252095256a219625209525" + "2096256a2197252096252097256a2198252097252098256a2199252098252099256a219a25209925209a256a219b25" + "209a25209b256a219c25209b25209c256a219d25209c25209d256a219e25209d25209e256a219f25209e25209f256a" + "21a025209f2520a0256a21a12520a02520a1256a21a22520a12520a2256a21a32520a22520a3256a21a42520a32520" + "a4256a21a52520a42520a5256a21a62520a52520a6256a21a72520a62520a7256a21a82520a72520a8256a21a92520" + "a82520a9256a21aa2520a92520aa256a21ab2520aa2520ab256a21ac2520ab2520ac256a21ad2520ac2520ad256a21" + "ae2520ad2520ae256a21af2520ae2520af256a21b02520af2520b0256a21b12520b02520b1256a21b22520b12520b2" + "256a21b32520b22520b3256a21b42520b32520b4256a21b52520b42520b5256a21b62520b52520b6256a21b72520b6" + "2520b7256a21b82520b72520b8256a21b92520b82520b9256a21ba2520b92520ba256a21bb2520ba2520bb256a21bc" + "2520bb2520bc256a21bd2520bc2520bd256a21be2520bd2520be256a21bf2520be2520bf256a21c02520bf2520c025" + "6a21c12520c02520c1256a21c22520c12520c2256a21c32520c22520c3256a21c42520c32520c4256a21c52520c425" + "20c5256a21c62520c52520c6256a21c72520c62520c7256a21c82520c72520c8256a21c92520c82520c9256a21ca25" + "20c92520ca256a21cb2520ca2520cb256a21cc2520cb2520cc256a21cd2520cc2520cd256a21ce2520cd2520ce256a" + "21cf2520ce2520cf256a21d02520cf2520d0256a21d12520d02520d1256a21d22520d12520d2256a21d32520d22520" + "d3256a21d42520d32520d4256a21d52520d42520d5256a21d62520d52520d6256a21d72520d62520d7256a21d82520" + "d72520d8256a21d92520d82520d9256a21da2520d92520da256a21db2520da2520db256a21dc2520db2520dc256a21" + "dd2520dc2520dd256a21de2520dd2520de256a21df2520de2520df256a21e02520df2520e0256a21e12520e02520e1" + "256a21e22520e12520e2256a21e32520e22520e3256a21e42520e32520e4256a21e52520e42520e5256a21e62520e5" + "2520e6256a21e72520e62520e7256a21e82520e72520e8256a21e92520e82520e9256a21ea2520e92520ea256a21eb" + "2520ea2520eb256a21ec2520eb2520ec256a21ed2520ec2520ed256a21ee2520ed2520ee256a21ef2520ee2520ef25" + "6a21f02520ef2520f0256a21f12520f02520f1256a21f22520f12520f2256a21f32520f22520f3256a21f42520f325" + "20f4256a21f52520f42520f5256a21f62520f52520f6256a21f72520f62520f7256a21f82520f72520f8256a21f925" "20f82520f9256a21fa2520f92520fa256a21fb2520fa2520fb256a21fc2520fb2520fc256a21fd2520fc2520fd256a" - "21fe2520fd2520fe256a" - "21ff2520fe2520ff256a21802620ff252080266a2181262080262081266a2182262081262082266a21832620822620" - "83266a21842620832620" - "84266a2185262084262085266a2186262085262086266a2187262086262087266a2188262087262088266a21892620" - "88262089266a218a2620" - "8926208a266a218b26208a26208b266a218c26208b26208c266a218d26208c26208d266a218e26208d26208e266a21" - "8f26208e26208f266a21" - "9026208f262090266a2191262090262091266a2192262091262092266a2193262092262093266a2194262093262094" - "266a2195262094262095" - "266a2196262095262096266a2197262096262097266a2198262097262098266a2199262098262099266a219a262099" - "26209a266a219b26209a" - "26209b266a219c26209b26209c266a219d26209c26209d266a219e26209d26209e266a219f26209e26209f266a21a0" - "26209f2620a0266a21a1" - "2620a02620a1266a21a22620a12620a2266a21a32620a22620a3266a21a42620a32620a4266a21a52620a42620a526" - "6a21a62620a52620a626" - "6a21a72620a62620a7266a21a82620a72620a8266a21a92620a82620a9266a21aa2620a92620aa266a21ab2620aa26" - "20ab266a21ac2620ab26" - "20ac266a21ad2620ac2620ad266a21ae2620ad2620ae266a21af2620ae2620af266a21b02620af2620b0266a21b126" - "20b02620b1266a21b226" - "20b12620b2266a21b32620b22620b3266a21b42620b32620b4266a21b52620b42620b5266a21b62620b52620b6266a" - "21b72620b62620b7266a" - "21b82620b72620b8266a21b92620b82620b9266a21ba2620b92620ba266a21bb2620ba2620bb266a21bc2620bb2620" - "bc266a21bd2620bc2620" - "bd266a21be2620bd2620be266a21bf2620be2620bf266a21c02620bf2620c0266a21c12620c02620c1266a21c22620" - "c12620c2266a21c32620" - "c22620c3266a21c42620c32620c4266a21c52620c42620c5266a21c62620c52620c6266a21c72620c62620c7266a21" - "c82620c72620c8266a21" - "c92620c82620c9266a21ca2620c92620ca266a21cb2620ca2620cb266a21cc2620cb2620cc266a21cd2620cc2620cd" - "266a21ce2620cd2620ce" - "266a21cf2620ce2620cf266a21d02620cf2620d0266a21d12620d02620d1266a21d22620d12620d2266a21d32620d2" - "2620d3266a21d42620d3" - "2620d4266a21d52620d42620d5266a21d62620d52620d6266a21d72620d62620d7266a21d82620d72620d8266a21d9" - "2620d82620d9266a21da" - "2620d92620da266a21db2620da2620db266a21dc2620db2620dc266a21dd2620dc2620dd266a21de2620dd2620de26" - "6a21df2620de2620df26" - "6a21e02620df2620e0266a21e12620e02620e1266a21e22620e12620e2266a21e32620e22620e3266a21e42620e326" - "20e4266a21e52620e426" - "20e5266a21e62620e52620e6266a21e72620e62620e7266a21e82620e72620e8266a21e92620e82620e9266a21ea26" - "20e92620ea266a21eb26" - "20ea2620eb266a21ec2620eb2620ec266a21ed2620ec2620ed266a21ee2620ed2620ee266a21ef2620ee2620ef266a" - "21f02620ef2620f0266a" - "21f12620f02620f1266a21f22620f12620f2266a21f32620f22620f3266a21f42620f32620f4266a21f52620f42620" - "f5266a21f62620f52620" - "f6266a21f72620f62620f7266a21f82620f72620f8266a21f92620f82620f9266a21fa2620f92620fa266a21fb2620" - "fa2620fb266a21fc2620" - "fb2620fc266a21fd2620fc2620fd266a21fe2620fd2620fe266a21ff2620fe2620ff266a21802720ff262080276a21" - "81272080272081276a21" - "82272081272082276a2183272082272083276a2184272083272084276a2185272084272085276a2186272085272086" - "276a2187272086272087" - "276a2188272087272088276a2189272088272089276a218a27208927208a276a218b27208a27208b276a218c27208b" - "27208c276a218d27208c" - "27208d276a218e27208d27208e276a218f27208e27208f276a219027208f272090276a2191272090272091276a2192" - "272091272092276a2193" - "272092272093276a2194272093272094276a2195272094272095276a2196272095272096276a219727209627209727" - "6a219827209727209827" - "6a2199272098272099276a219a27209927209a276a219b27209a27209b276a219c27209b27209c276a219d27209c27" - "209d276a219e27209d27" - "209e276a219f27209e27209f276a21a027209f2720a0276a21a12720a02720a1276a21a22720a12720a2276a21a327" - "20a22720a3276a21a427" - "20a32720a4276a21a52720a42720a5276a21a62720a52720a6276a21a72720a62720a7276a21a82720a72720a8276a" - "21a92720a82720a9276a" - "21aa2720a92720aa276a21ab2720aa2720ab276a21ac2720ab2720ac276a21ad2720ac2720ad276a21ae2720ad2720" - "ae276a21af2720ae2720" - "af276a21b02720af2720b0276a21b12720b02720b1276a21b22720b12720b2276a21b32720b22720b3276a21b42720" - "b32720b4276a21b52720" - "b42720b5276a21b62720b52720b6276a21b72720b62720b7276a21b82720b72720b8276a21b92720b82720b9276a21" - "ba2720b92720ba276a21" - "bb2720ba2720bb276a21bc2720bb2720bc276a21bd2720bc2720bd276a21be2720bd2720be276a21bf2720be2720bf" - "276a21c02720bf2720c0" - "276a21c12720c02720c1276a21c22720c12720c2276a21c32720c22720c3276a21c42720c32720c4276a21c52720c4" - "2720c5276a21c62720c5" - "2720c6276a21c72720c62720c7276a21c82720c72720c8276a21c92720c82720c9276a21ca2720c92720ca276a21cb" - "2720ca2720cb276a21cc" - "2720cb2720cc276a21cd2720cc2720cd276a21ce2720cd2720ce276a21cf2720ce2720cf276a21d02720cf2720d027" - "6a21d12720d02720d127" - "6a21d22720d12720d2276a21d32720d22720d3276a21d42720d32720d4276a21d52720d42720d5276a21d62720d527" - "20d6276a21d72720d627" - "20d7276a21d82720d72720d8276a21d92720d82720d9276a21da2720d92720da276a21db2720da2720db276a21dc27" - "20db2720dc276a21dd27" - "20dc2720dd276a21de2720dd2720de276a21df2720de2720df276a21e02720df2720e0276a21e12720e02720e1276a" - "21e22720e12720e2276a" - "21e32720e22720e3276a21e42720e32720e4276a21e52720e42720e5276a21e62720e52720e6276a21e72720e62720" - "e7276a21e82720e72720" - "e8276a21e92720e82720e9276a21ea2720e92720ea276a21eb2720ea2720eb276a21ec2720eb2720ec276a21ed2720" - "ec2720ed276a21ee2720" - "ed2720ee276a21ef2720ee2720ef276a21f02720ef2720f0276a21f12720f02720f1276a21f22720f12720f2276a21" - "f32720f22720f3276a21" - "f42720f32720f4276a21f52720f42720f5276a21f62720f52720f6276a21f72720f62720f7276a21f82720f72720f8" - "276a21f92720f82720f9" - "276a21fa2720f92720fa276a21fb2720fa2720fb276a21fc2720fb2720fc276a21fd2720fc2720fd276a21fe2720fd" - "2720fe276a21ff2720fe" - "2720ff276a21802820ff272080286a2181282080282081286a2182282081282082286a2183282082282083286a2184" - "282083282084286a2185" + "21fe2520fd2520fe256a21ff2520fe2520ff256a21802620ff252080266a2181262080262081266a21822620812620" + "82266a2183262082262083266a2184262083262084266a2185262084262085266a2186262085262086266a21872620" + "86262087266a2188262087262088266a2189262088262089266a218a26208926208a266a218b26208a26208b266a21" + "8c26208b26208c266a218d26208c26208d266a218e26208d26208e266a218f26208e26208f266a219026208f262090" + "266a2191262090262091266a2192262091262092266a2193262092262093266a2194262093262094266a2195262094" + "262095266a2196262095262096266a2197262096262097266a2198262097262098266a2199262098262099266a219a" + "26209926209a266a219b26209a26209b266a219c26209b26209c266a219d26209c26209d266a219e26209d26209e26" + "6a219f26209e26209f266a21a026209f2620a0266a21a12620a02620a1266a21a22620a12620a2266a21a32620a226" + "20a3266a21a42620a32620a4266a21a52620a42620a5266a21a62620a52620a6266a21a72620a62620a7266a21a826" + "20a72620a8266a21a92620a82620a9266a21aa2620a92620aa266a21ab2620aa2620ab266a21ac2620ab2620ac266a" + "21ad2620ac2620ad266a21ae2620ad2620ae266a21af2620ae2620af266a21b02620af2620b0266a21b12620b02620" + "b1266a21b22620b12620b2266a21b32620b22620b3266a21b42620b32620b4266a21b52620b42620b5266a21b62620" + "b52620b6266a21b72620b62620b7266a21b82620b72620b8266a21b92620b82620b9266a21ba2620b92620ba266a21" + "bb2620ba2620bb266a21bc2620bb2620bc266a21bd2620bc2620bd266a21be2620bd2620be266a21bf2620be2620bf" + "266a21c02620bf2620c0266a21c12620c02620c1266a21c22620c12620c2266a21c32620c22620c3266a21c42620c3" + "2620c4266a21c52620c42620c5266a21c62620c52620c6266a21c72620c62620c7266a21c82620c72620c8266a21c9" + "2620c82620c9266a21ca2620c92620ca266a21cb2620ca2620cb266a21cc2620cb2620cc266a21cd2620cc2620cd26" + "6a21ce2620cd2620ce266a21cf2620ce2620cf266a21d02620cf2620d0266a21d12620d02620d1266a21d22620d126" + "20d2266a21d32620d22620d3266a21d42620d32620d4266a21d52620d42620d5266a21d62620d52620d6266a21d726" + "20d62620d7266a21d82620d72620d8266a21d92620d82620d9266a21da2620d92620da266a21db2620da2620db266a" + "21dc2620db2620dc266a21dd2620dc2620dd266a21de2620dd2620de266a21df2620de2620df266a21e02620df2620" + "e0266a21e12620e02620e1266a21e22620e12620e2266a21e32620e22620e3266a21e42620e32620e4266a21e52620" + "e42620e5266a21e62620e52620e6266a21e72620e62620e7266a21e82620e72620e8266a21e92620e82620e9266a21" + "ea2620e92620ea266a21eb2620ea2620eb266a21ec2620eb2620ec266a21ed2620ec2620ed266a21ee2620ed2620ee" + "266a21ef2620ee2620ef266a21f02620ef2620f0266a21f12620f02620f1266a21f22620f12620f2266a21f32620f2" + "2620f3266a21f42620f32620f4266a21f52620f42620f5266a21f62620f52620f6266a21f72620f62620f7266a21f8" + "2620f72620f8266a21f92620f82620f9266a21fa2620f92620fa266a21fb2620fa2620fb266a21fc2620fb2620fc26" + "6a21fd2620fc2620fd266a21fe2620fd2620fe266a21ff2620fe2620ff266a21802720ff262080276a218127208027" + "2081276a2182272081272082276a2183272082272083276a2184272083272084276a2185272084272085276a218627" + "2085272086276a2187272086272087276a2188272087272088276a2189272088272089276a218a27208927208a276a" + "218b27208a27208b276a218c27208b27208c276a218d27208c27208d276a218e27208d27208e276a218f27208e2720" + "8f276a219027208f272090276a2191272090272091276a2192272091272092276a2193272092272093276a21942720" + "93272094276a2195272094272095276a2196272095272096276a2197272096272097276a2198272097272098276a21" + "99272098272099276a219a27209927209a276a219b27209a27209b276a219c27209b27209c276a219d27209c27209d" + "276a219e27209d27209e276a219f27209e27209f276a21a027209f2720a0276a21a12720a02720a1276a21a22720a1" + "2720a2276a21a32720a22720a3276a21a42720a32720a4276a21a52720a42720a5276a21a62720a52720a6276a21a7" + "2720a62720a7276a21a82720a72720a8276a21a92720a82720a9276a21aa2720a92720aa276a21ab2720aa2720ab27" + "6a21ac2720ab2720ac276a21ad2720ac2720ad276a21ae2720ad2720ae276a21af2720ae2720af276a21b02720af27" + "20b0276a21b12720b02720b1276a21b22720b12720b2276a21b32720b22720b3276a21b42720b32720b4276a21b527" + "20b42720b5276a21b62720b52720b6276a21b72720b62720b7276a21b82720b72720b8276a21b92720b82720b9276a" + "21ba2720b92720ba276a21bb2720ba2720bb276a21bc2720bb2720bc276a21bd2720bc2720bd276a21be2720bd2720" + "be276a21bf2720be2720bf276a21c02720bf2720c0276a21c12720c02720c1276a21c22720c12720c2276a21c32720" + "c22720c3276a21c42720c32720c4276a21c52720c42720c5276a21c62720c52720c6276a21c72720c62720c7276a21" + "c82720c72720c8276a21c92720c82720c9276a21ca2720c92720ca276a21cb2720ca2720cb276a21cc2720cb2720cc" + "276a21cd2720cc2720cd276a21ce2720cd2720ce276a21cf2720ce2720cf276a21d02720cf2720d0276a21d12720d0" + "2720d1276a21d22720d12720d2276a21d32720d22720d3276a21d42720d32720d4276a21d52720d42720d5276a21d6" + "2720d52720d6276a21d72720d62720d7276a21d82720d72720d8276a21d92720d82720d9276a21da2720d92720da27" + "6a21db2720da2720db276a21dc2720db2720dc276a21dd2720dc2720dd276a21de2720dd2720de276a21df2720de27" + "20df276a21e02720df2720e0276a21e12720e02720e1276a21e22720e12720e2276a21e32720e22720e3276a21e427" + "20e32720e4276a21e52720e42720e5276a21e62720e52720e6276a21e72720e62720e7276a21e82720e72720e8276a" + "21e92720e82720e9276a21ea2720e92720ea276a21eb2720ea2720eb276a21ec2720eb2720ec276a21ed2720ec2720" + "ed276a21ee2720ed2720ee276a21ef2720ee2720ef276a21f02720ef2720f0276a21f12720f02720f1276a21f22720" + "f12720f2276a21f32720f22720f3276a21f42720f32720f4276a21f52720f42720f5276a21f62720f52720f6276a21" + "f72720f62720f7276a21f82720f72720f8276a21f92720f82720f9276a21fa2720f92720fa276a21fb2720fa2720fb" + "276a21fc2720fb2720fc276a21fd2720fc2720fd276a21fe2720fd2720fe276a21ff2720fe2720ff276a21802820ff" + "272080286a2181282080282081286a2182282081282082286a2183282082282083286a2184282083282084286a2185" "282084282085286a2186282085282086286a2187282086282087286a2188282087282088286a218928208828208928" - "6a218a28208928208a28" - "6a218b28208a28208b286a218c28208b28208c286a218d28208c28208d286a218e28208d28208e286a218f28208e28" - "208f286a219028208f28" - "2090286a2191282090282091286a2192282091282092286a2193282092282093286a2194282093282094286a219528" - "2094282095286a219628" - "2095282096286a2197282096282097286a2198282097282098286a2199282098282099286a219a28209928209a286a" - "219b28209a28209b286a" - "219c28209b28209c286a219d28209c28209d286a219e28209d28209e286a219f28209e28209f286a21a028209f2820" - "a0286a21a12820a02820" - "a1286a21a22820a12820a2286a21a32820a22820a3286a21a42820a32820a4286a21a52820a42820a5286a21a62820" - "a52820a6286a21a72820" - "a62820a7286a21a82820a72820a8286a21a92820a82820a9286a21aa2820a92820aa286a21ab2820aa2820ab286a21" - "ac2820ab2820ac286a21" - "ad2820ac2820ad286a21ae2820ad2820ae286a21af2820ae2820af286a21b02820af2820b0286a21b12820b02820b1" - "286a21b22820b12820b2" - "286a21b32820b22820b3286a21b42820b32820b4286a21b52820b42820b5286a21b62820b52820b6286a21b72820b6" - "2820b7286a21b82820b7" - "2820b8286a21b92820b82820b9286a21ba2820b92820ba286a21bb2820ba2820bb286a21bc2820bb2820bc286a21bd" - "2820bc2820bd286a21be" - "2820bd2820be286a21bf2820be2820bf286a21c02820bf2820c0286a21c12820c02820c1286a21c22820c12820c228" - "6a21c32820c22820c328" - "6a21c42820c32820c4286a21c52820c42820c5286a21c62820c52820c6286a21c72820c62820c7286a21c82820c728" - "20c8286a21c92820c828" - "20c9286a21ca2820c92820ca286a21cb2820ca2820cb286a21cc2820cb2820cc286a21cd2820cc2820cd286a21ce28" - "20cd2820ce286a21cf28" - "20ce2820cf286a21d02820cf2820d0286a21d12820d02820d1286a21d22820d12820d2286a21d32820d22820d3286a" - "21d42820d32820d4286a" - "21d52820d42820d5286a21d62820d52820d6286a21d72820d62820d7286a21d82820d72820d8286a21d92820d82820" - "d9286a21da2820d92820" - "da286a21db2820da2820db286a21dc2820db2820dc286a21dd2820dc2820dd286a21de2820dd2820de286a21df2820" - "de2820df286a21e02820" - "df2820e0286a21e12820e02820e1286a21e22820e12820e2286a21e32820e22820e3286a21e42820e32820e4286a21" - "e52820e42820e5286a21" - "e62820e52820e6286a21e72820e62820e7286a21e82820e72820e8286a21e92820e82820e9286a21ea2820e92820ea" - "286a21eb2820ea2820eb" - "286a21ec2820eb2820ec286a21ed2820ec2820ed286a21ee2820ed2820ee286a21ef2820ee2820ef286a21f02820ef" - "2820f0286a21f12820f0" - "2820f1286a21f22820f12820f2286a21f32820f22820f3286a21f42820f32820f4286a21f52820f42820f5286a21f6" - "2820f52820f6286a21f7" - "2820f62820f7286a21f82820f72820f8286a21f92820f82820f9286a21fa2820f92820fa286a21fb2820fa2820fb28" - "6a21fc2820fb2820fc28" - "6a21fd2820fc2820fd286a21fe2820fd2820fe286a21ff2820fe2820ff286a21802920ff282080296a218129208029" - "2081296a218229208129" - "2082296a2183292082292083296a2184292083292084296a2185292084292085296a2186292085292086296a218729" - "2086292087296a218829" - "2087292088296a2189292088292089296a218a29208929208a296a218b29208a29208b296a218c29208b29208c296a" - "218d29208c29208d296a" - "218e29208d29208e296a218f29208e29208f296a219029208f292090296a2191292090292091296a21922920912920" - "92296a21932920922920" - "93296a2194292093292094296a2195292094292095296a2196292095292096296a2197292096292097296a21982920" - "97292098296a21992920" - "98292099296a219a29209929209a296a219b29209a29209b296a219c29209b29209c296a219d29209c29209d296a21" - "9e29209d29209e296a21" - "9f29209e29209f296a21a029209f2920a0296a21a12920a02920a1296a21a22920a12920a2296a21a32920a22920a3" - "296a21a42920a32920a4" - "296a21a52920a42920a5296a21a62920a52920a6296a21a72920a62920a7296a21a82920a72920a8296a21a92920a8" - "2920a9296a21aa2920a9" - "2920aa296a21ab2920aa2920ab296a21ac2920ab2920ac296a21ad2920ac2920ad296a21ae2920ad2920ae296a21af" - "2920ae2920af296a21b0" - "2920af2920b0296a21b12920b02920b1296a21b22920b12920b2296a21b32920b22920b3296a21b42920b32920b429" - "6a21b52920b42920b529" - "6a21b62920b52920b6296a21b72920b62920b7296a21b82920b72920b8296a21b92920b82920b9296a21ba2920b929" - "20ba296a21bb2920ba29" - "20bb296a21bc2920bb2920bc296a21bd2920bc2920bd296a21be2920bd2920be296a21bf2920be2920bf296a21c029" - "20bf2920c0296a21c129" - "20c02920c1296a21c22920c12920c2296a21c32920c22920c3296a21c42920c32920c4296a21c52920c42920c5296a" - "21c62920c52920c6296a" - "21c72920c62920c7296a21c82920c72920c8296a21c92920c82920c9296a21ca2920c92920ca296a21cb2920ca2920" - "cb296a21cc2920cb2920" - "cc296a21cd2920cc2920cd296a21ce2920cd2920ce296a21cf2920ce2920cf296a21d02920cf2920d0296a21d12920" - "d02920d1296a21d22920" - "d12920d2296a21d32920d22920d3296a21d42920d32920d4296a21d52920d42920d5296a21d62920d52920d6296a21" - "d72920d62920d7296a21" - "d82920d72920d8296a21d92920d82920d9296a21da2920d92920da296a21db2920da2920db296a21dc2920db2920dc" - "296a21dd2920dc2920dd" - "296a21de2920dd2920de296a21df2920de2920df296a21e02920df2920e0296a21e12920e02920e1296a21e22920e1" - "2920e2296a21e32920e2" - "2920e3296a21e42920e32920e4296a21e52920e42920e5296a21e62920e52920e6296a21e72920e62920e7296a21e8" - "2920e72920e8296a21e9" - "2920e82920e9296a21ea2920e92920ea296a21eb2920ea2920eb296a21ec2920eb2920ec296a21ed2920ec2920ed29" - "6a21ee2920ed2920ee29" - "6a21ef2920ee2920ef296a21f02920ef2920f0296a21f12920f02920f1296a21f22920f12920f2296a21f32920f229" - "20f3296a21f42920f329" - "20f4296a21f52920f42920f5296a21f62920f52920f6296a21f72920f62920f7296a21f82920f72920f8296a21f929" - "20f82920f9296a21fa29" - "20f92920fa296a21fb2920fa2920fb296a21fc2920fb2920fc296a21fd2920fc2920fd296a21fe2920fd2920fe296a" - "21ff2920fe2920ff296a" - "21802a20ff2920802a6a21812a20802a20812a6a21822a20812a20822a6a21832a20822a20832a6a21842a20832a20" - "842a6a21852a20842a20" - "852a6a21862a20852a20862a6a21872a20862a20872a6a21882a20872a20882a6a21892a20882a20892a6a218a2a20" - "892a208a2a6a218b2a20" - "8a2a208b2a6a218c2a208b2a208c2a6a218d2a208c2a208d2a6a218e2a208d2a208e2a6a218f2a208e2a208f2a6a21" - "902a208f2a20902a6a21" + "6a218a28208928208a286a218b28208a28208b286a218c28208b28208c286a218d28208c28208d286a218e28208d28" + "208e286a218f28208e28208f286a219028208f282090286a2191282090282091286a2192282091282092286a219328" + "2092282093286a2194282093282094286a2195282094282095286a2196282095282096286a2197282096282097286a" + "2198282097282098286a2199282098282099286a219a28209928209a286a219b28209a28209b286a219c28209b2820" + "9c286a219d28209c28209d286a219e28209d28209e286a219f28209e28209f286a21a028209f2820a0286a21a12820" + "a02820a1286a21a22820a12820a2286a21a32820a22820a3286a21a42820a32820a4286a21a52820a42820a5286a21" + "a62820a52820a6286a21a72820a62820a7286a21a82820a72820a8286a21a92820a82820a9286a21aa2820a92820aa" + "286a21ab2820aa2820ab286a21ac2820ab2820ac286a21ad2820ac2820ad286a21ae2820ad2820ae286a21af2820ae" + "2820af286a21b02820af2820b0286a21b12820b02820b1286a21b22820b12820b2286a21b32820b22820b3286a21b4" + "2820b32820b4286a21b52820b42820b5286a21b62820b52820b6286a21b72820b62820b7286a21b82820b72820b828" + "6a21b92820b82820b9286a21ba2820b92820ba286a21bb2820ba2820bb286a21bc2820bb2820bc286a21bd2820bc28" + "20bd286a21be2820bd2820be286a21bf2820be2820bf286a21c02820bf2820c0286a21c12820c02820c1286a21c228" + "20c12820c2286a21c32820c22820c3286a21c42820c32820c4286a21c52820c42820c5286a21c62820c52820c6286a" + "21c72820c62820c7286a21c82820c72820c8286a21c92820c82820c9286a21ca2820c92820ca286a21cb2820ca2820" + "cb286a21cc2820cb2820cc286a21cd2820cc2820cd286a21ce2820cd2820ce286a21cf2820ce2820cf286a21d02820" + "cf2820d0286a21d12820d02820d1286a21d22820d12820d2286a21d32820d22820d3286a21d42820d32820d4286a21" + "d52820d42820d5286a21d62820d52820d6286a21d72820d62820d7286a21d82820d72820d8286a21d92820d82820d9" + "286a21da2820d92820da286a21db2820da2820db286a21dc2820db2820dc286a21dd2820dc2820dd286a21de2820dd" + "2820de286a21df2820de2820df286a21e02820df2820e0286a21e12820e02820e1286a21e22820e12820e2286a21e3" + "2820e22820e3286a21e42820e32820e4286a21e52820e42820e5286a21e62820e52820e6286a21e72820e62820e728" + "6a21e82820e72820e8286a21e92820e82820e9286a21ea2820e92820ea286a21eb2820ea2820eb286a21ec2820eb28" + "20ec286a21ed2820ec2820ed286a21ee2820ed2820ee286a21ef2820ee2820ef286a21f02820ef2820f0286a21f128" + "20f02820f1286a21f22820f12820f2286a21f32820f22820f3286a21f42820f32820f4286a21f52820f42820f5286a" + "21f62820f52820f6286a21f72820f62820f7286a21f82820f72820f8286a21f92820f82820f9286a21fa2820f92820" + "fa286a21fb2820fa2820fb286a21fc2820fb2820fc286a21fd2820fc2820fd286a21fe2820fd2820fe286a21ff2820" + "fe2820ff286a21802920ff282080296a2181292080292081296a2182292081292082296a2183292082292083296a21" + "84292083292084296a2185292084292085296a2186292085292086296a2187292086292087296a2188292087292088" + "296a2189292088292089296a218a29208929208a296a218b29208a29208b296a218c29208b29208c296a218d29208c" + "29208d296a218e29208d29208e296a218f29208e29208f296a219029208f292090296a2191292090292091296a2192" + "292091292092296a2193292092292093296a2194292093292094296a2195292094292095296a219629209529209629" + "6a2197292096292097296a2198292097292098296a2199292098292099296a219a29209929209a296a219b29209a29" + "209b296a219c29209b29209c296a219d29209c29209d296a219e29209d29209e296a219f29209e29209f296a21a029" + "209f2920a0296a21a12920a02920a1296a21a22920a12920a2296a21a32920a22920a3296a21a42920a32920a4296a" + "21a52920a42920a5296a21a62920a52920a6296a21a72920a62920a7296a21a82920a72920a8296a21a92920a82920" + "a9296a21aa2920a92920aa296a21ab2920aa2920ab296a21ac2920ab2920ac296a21ad2920ac2920ad296a21ae2920" + "ad2920ae296a21af2920ae2920af296a21b02920af2920b0296a21b12920b02920b1296a21b22920b12920b2296a21" + "b32920b22920b3296a21b42920b32920b4296a21b52920b42920b5296a21b62920b52920b6296a21b72920b62920b7" + "296a21b82920b72920b8296a21b92920b82920b9296a21ba2920b92920ba296a21bb2920ba2920bb296a21bc2920bb" + "2920bc296a21bd2920bc2920bd296a21be2920bd2920be296a21bf2920be2920bf296a21c02920bf2920c0296a21c1" + "2920c02920c1296a21c22920c12920c2296a21c32920c22920c3296a21c42920c32920c4296a21c52920c42920c529" + "6a21c62920c52920c6296a21c72920c62920c7296a21c82920c72920c8296a21c92920c82920c9296a21ca2920c929" + "20ca296a21cb2920ca2920cb296a21cc2920cb2920cc296a21cd2920cc2920cd296a21ce2920cd2920ce296a21cf29" + "20ce2920cf296a21d02920cf2920d0296a21d12920d02920d1296a21d22920d12920d2296a21d32920d22920d3296a" + "21d42920d32920d4296a21d52920d42920d5296a21d62920d52920d6296a21d72920d62920d7296a21d82920d72920" + "d8296a21d92920d82920d9296a21da2920d92920da296a21db2920da2920db296a21dc2920db2920dc296a21dd2920" + "dc2920dd296a21de2920dd2920de296a21df2920de2920df296a21e02920df2920e0296a21e12920e02920e1296a21" + "e22920e12920e2296a21e32920e22920e3296a21e42920e32920e4296a21e52920e42920e5296a21e62920e52920e6" + "296a21e72920e62920e7296a21e82920e72920e8296a21e92920e82920e9296a21ea2920e92920ea296a21eb2920ea" + "2920eb296a21ec2920eb2920ec296a21ed2920ec2920ed296a21ee2920ed2920ee296a21ef2920ee2920ef296a21f0" + "2920ef2920f0296a21f12920f02920f1296a21f22920f12920f2296a21f32920f22920f3296a21f42920f32920f429" + "6a21f52920f42920f5296a21f62920f52920f6296a21f72920f62920f7296a21f82920f72920f8296a21f92920f829" + "20f9296a21fa2920f92920fa296a21fb2920fa2920fb296a21fc2920fb2920fc296a21fd2920fc2920fd296a21fe29" + "20fd2920fe296a21ff2920fe2920ff296a21802a20ff2920802a6a21812a20802a20812a6a21822a20812a20822a6a" + "21832a20822a20832a6a21842a20832a20842a6a21852a20842a20852a6a21862a20852a20862a6a21872a20862a20" + "872a6a21882a20872a20882a6a21892a20882a20892a6a218a2a20892a208a2a6a218b2a208a2a208b2a6a218c2a20" + "8b2a208c2a6a218d2a208c2a208d2a6a218e2a208d2a208e2a6a218f2a208e2a208f2a6a21902a208f2a20902a6a21" "912a20902a20912a6a21922a20912a20922a6a21932a20922a20932a6a21942a20932a20942a6a21952a20942a2095" - "2a6a21962a20952a2096" - "2a6a21972a20962a20972a6a21982a20972a20982a6a21992a20982a20992a6a219a2a20992a209a2a6a219b2a209a" - "2a209b2a6a219c2a209b" - "2a209c2a6a219d2a209c2a209d2a6a219e2a209d2a209e2a6a219f2a209e2a209f2a6a21a02a209f2a20a02a6a21a1" - "2a20a02a20a12a6a21a2" - "2a20a12a20a22a6a21a32a20a22a20a32a6a21a42a20a32a20a42a6a21a52a20a42a20a52a6a21a62a20a52a20a62a" - "6a21a72a20a62a20a72a" - "6a21a82a20a72a20a82a6a21a92a20a82a20a92a6a21aa2a20a92a20aa2a6a21ab2a20aa2a20ab2a6a21ac2a20ab2a" - "20ac2a6a21ad2a20ac2a" - "20ad2a6a21ae2a20ad2a20ae2a6a21af2a20ae2a20af2a6a21b02a20af2a20b02a6a21b12a20b02a20b12a6a21b22a" - "20b12a20b22a6a21b32a" - "20b22a20b32a6a21b42a20b32a20b42a6a21b52a20b42a20b52a6a21b62a20b52a20b62a6a21b72a20b62a20b72a6a" - "21b82a20b72a20b82a6a" - "21b92a20b82a20b92a6a21ba2a20b92a20ba2a6a21bb2a20ba2a20bb2a6a21bc2a20bb2a20bc2a6a21bd2a20bc2a20" - "bd2a6a21be2a20bd2a20" - "be2a6a21bf2a20be2a20bf2a6a21c02a20bf2a20c02a6a21c12a20c02a20c12a6a21c22a20c12a20c22a6a21c32a20" - "c22a20c32a6a21c42a20" - "c32a20c42a6a21c52a20c42a20c52a6a21c62a20c52a20c62a6a21c72a20c62a20c72a6a21c82a20c72a20c82a6a21" - "c92a20c82a20c92a6a21" - "ca2a20c92a20ca2a6a21cb2a20ca2a20cb2a6a21cc2a20cb2a20cc2a6a21cd2a20cc2a20cd2a6a21ce2a20cd2a20ce" - "2a6a21cf2a20ce2a20cf" - "2a6a21d02a20cf2a20d02a6a21d12a20d02a20d12a6a21d22a20d12a20d22a6a21d32a20d22a20d32a6a21d42a20d3" - "2a20d42a6a21d52a20d4" - "2a20d52a6a21d62a20d52a20d62a6a21d72a20d62a20d72a6a21d82a20d72a20d82a6a21d92a20d82a20d92a6a21da" - "2a20d92a20da2a6a21db" - "2a20da2a20db2a6a21dc2a20db2a20dc2a6a21dd2a20dc2a20dd2a6a21de2a20dd2a20de2a6a21df2a20de2a20df2a" - "6a21e02a20df2a20e02a" - "6a21e12a20e02a20e12a6a21e22a20e12a20e22a6a21e32a20e22a20e32a6a21e42a20e32a20e42a6a21e52a20e42a" - "20e52a6a21e62a20e52a" - "20e62a6a21e72a20e62a20e72a6a21e82a20e72a20e82a6a21e92a20e82a20e92a6a21ea2a20e92a20ea2a6a21eb2a" - "20ea2a20eb2a6a21ec2a" - "20eb2a20ec2a6a21ed2a20ec2a20ed2a6a21ee2a20ed2a20ee2a6a21ef2a20ee2a20ef2a6a21f02a20ef2a20f02a6a" - "21f12a20f02a20f12a6a" - "21f22a20f12a20f22a6a21f32a20f22a20f32a6a21f42a20f32a20f42a6a21f52a20f42a20f52a6a21f62a20f52a20" - "f62a6a21f72a20f62a20" - "f72a6a21f82a20f72a20f82a6a21f92a20f82a20f92a6a21fa2a20f92a20fa2a6a21fb2a20fa2a20fb2a6a21fc2a20" - "fb2a20fc2a6a21fd2a20" - "fc2a20fd2a6a21fe2a20fd2a20fe2a6a21ff2a20fe2a20ff2a6a21802b20ff2a20802b6a21812b20802b20812b6a21" - "822b20812b20822b6a21" - "832b20822b20832b6a21842b20832b20842b6a21852b20842b20852b6a21862b20852b20862b6a21872b20862b2087" - "2b6a21882b20872b2088" - "2b6a21892b20882b20892b6a218a2b20892b208a2b6a218b2b208a2b208b2b6a218c2b208b2b208c2b6a218d2b208c" - "2b208d2b6a218e2b208d" - "2b208e2b6a218f2b208e2b208f2b6a21902b208f2b20902b6a21912b20902b20912b6a21922b20912b20922b6a2193" - "2b20922b20932b6a2194" - "2b20932b20942b6a21952b20942b20952b6a21962b20952b20962b6a21972b20962b20972b6a21982b20972b20982b" - "6a21992b20982b20992b" - "6a219a2b20992b209a2b6a219b2b209a2b209b2b6a219c2b209b2b209c2b6a219d2b209c2b209d2b6a219e2b209d2b" - "209e2b6a219f2b209e2b" - "209f2b6a21a02b209f2b20a02b6a21a12b20a02b20a12b6a21a22b20a12b20a22b6a21a32b20a22b20a32b6a21a42b" - "20a32b20a42b6a21a52b" - "20a42b20a52b6a21a62b20a52b20a62b6a21a72b20a62b20a72b6a21a82b20a72b20a82b6a21a92b20a82b20a92b6a" - "21aa2b20a92b20aa2b6a" - "21ab2b20aa2b20ab2b6a21ac2b20ab2b20ac2b6a21ad2b20ac2b20ad2b6a21ae2b20ad2b20ae2b6a21af2b20ae2b20" - "af2b6a21b02b20af2b20" - "b02b6a21b12b20b02b20b12b6a21b22b20b12b20b22b6a21b32b20b22b20b32b6a21b42b20b32b20b42b6a21b52b20" - "b42b20b52b6a21b62b20" - "b52b20b62b6a21b72b20b62b20b72b6a21b82b20b72b20b82b6a21b92b20b82b20b92b6a21ba2b20b92b20ba2b6a21" - "bb2b20ba2b20bb2b6a21" - "bc2b20bb2b20bc2b6a21bd2b20bc2b20bd2b6a21be2b20bd2b20be2b6a21bf2b20be2b20bf2b6a21c02b20bf2b20c0" - "2b6a21c12b20c02b20c1" - "2b6a21c22b20c12b20c22b6a21c32b20c22b20c32b6a21c42b20c32b20c42b6a21c52b20c42b20c52b6a21c62b20c5" - "2b20c62b6a21c72b20c6" - "2b20c72b6a21c82b20c72b20c82b6a21c92b20c82b20c92b6a21ca2b20c92b20ca2b6a21cb2b20ca2b20cb2b6a21cc" - "2b20cb2b20cc2b6a21cd" - "2b20cc2b20cd2b6a21ce2b20cd2b20ce2b6a21cf2b20ce2b20cf2b6a21d02b20cf2b20d02b6a21d12b20d02b20d12b" - "6a21d22b20d12b20d22b" - "6a21d32b20d22b20d32b6a21d42b20d32b20d42b6a21d52b20d42b20d52b6a21d62b20d52b20d62b6a21d72b20d62b" - "20d72b6a21d82b20d72b" - "20d82b6a21d92b20d82b20d92b6a21da2b20d92b20da2b6a21db2b20da2b20db2b6a21dc2b20db2b20dc2b6a21dd2b" - "20dc2b20dd2b6a21de2b" - "20dd2b20de2b6a21df2b20de2b20df2b6a21e02b20df2b20e02b6a21e12b20e02b20e12b6a21e22b20e12b20e22b6a" - "21e32b20e22b20e32b6a" - "21e42b20e32b20e42b6a21e52b20e42b20e52b6a21e62b20e52b20e62b6a21e72b20e62b20e72b6a21e82b20e72b20" - "e82b6a21e92b20e82b20" - "e92b6a21ea2b20e92b20ea2b6a21eb2b20ea2b20eb2b6a21ec2b20eb2b20ec2b6a21ed2b20ec2b20ed2b6a21ee2b20" - "ed2b20ee2b6a21ef2b20" - "ee2b20ef2b6a21f02b20ef2b20f02b6a21f12b20f02b20f12b6a21f22b20f12b20f22b6a21f32b20f22b20f32b6a21" - "f42b20f32b20f42b6a21" - "f52b20f42b20f52b6a21f62b20f52b20f62b6a21f72b20f62b20f72b6a21f82b20f72b20f82b6a21f92b20f82b20f9" - "2b6a21fa2b20f92b20fa" - "2b6a21fb2b20fa2b20fb2b6a21fc2b20fb2b20fc2b6a21fd2b20fc2b20fd2b6a21fe2b20fd2b20fe2b6a21ff2b20fe" - "2b20ff2b6a21802c20ff" - "2b20802c6a21812c20802c20812c6a21822c20812c20822c6a21832c20822c20832c6a21842c20832c20842c6a2185" - "2c20842c20852c6a2186" - "2c20852c20862c6a21872c20862c20872c6a21882c20872c20882c6a21892c20882c20892c6a218a2c20892c208a2c" - "6a218b2c208a2c208b2c" - "6a218c2c208b2c208c2c6a218d2c208c2c208d2c6a218e2c208d2c208e2c6a218f2c208e2c208f2c6a21902c208f2c" - "20902c6a21912c20902c" - "20912c6a21922c20912c20922c6a21932c20922c20932c6a21942c20932c20942c6a21952c20942c20952c6a21962c" - "20952c20962c6a21972c" - "20962c20972c6a21982c20972c20982c6a21992c20982c20992c6a219a2c20992c209a2c6a219b2c209a2c209b2c6a" - "219c2c209b2c209c2c6a" + "2a6a21962a20952a20962a6a21972a20962a20972a6a21982a20972a20982a6a21992a20982a20992a6a219a2a2099" + "2a209a2a6a219b2a209a2a209b2a6a219c2a209b2a209c2a6a219d2a209c2a209d2a6a219e2a209d2a209e2a6a219f" + "2a209e2a209f2a6a21a02a209f2a20a02a6a21a12a20a02a20a12a6a21a22a20a12a20a22a6a21a32a20a22a20a32a" + "6a21a42a20a32a20a42a6a21a52a20a42a20a52a6a21a62a20a52a20a62a6a21a72a20a62a20a72a6a21a82a20a72a" + "20a82a6a21a92a20a82a20a92a6a21aa2a20a92a20aa2a6a21ab2a20aa2a20ab2a6a21ac2a20ab2a20ac2a6a21ad2a" + "20ac2a20ad2a6a21ae2a20ad2a20ae2a6a21af2a20ae2a20af2a6a21b02a20af2a20b02a6a21b12a20b02a20b12a6a" + "21b22a20b12a20b22a6a21b32a20b22a20b32a6a21b42a20b32a20b42a6a21b52a20b42a20b52a6a21b62a20b52a20" + "b62a6a21b72a20b62a20b72a6a21b82a20b72a20b82a6a21b92a20b82a20b92a6a21ba2a20b92a20ba2a6a21bb2a20" + "ba2a20bb2a6a21bc2a20bb2a20bc2a6a21bd2a20bc2a20bd2a6a21be2a20bd2a20be2a6a21bf2a20be2a20bf2a6a21" + "c02a20bf2a20c02a6a21c12a20c02a20c12a6a21c22a20c12a20c22a6a21c32a20c22a20c32a6a21c42a20c32a20c4" + "2a6a21c52a20c42a20c52a6a21c62a20c52a20c62a6a21c72a20c62a20c72a6a21c82a20c72a20c82a6a21c92a20c8" + "2a20c92a6a21ca2a20c92a20ca2a6a21cb2a20ca2a20cb2a6a21cc2a20cb2a20cc2a6a21cd2a20cc2a20cd2a6a21ce" + "2a20cd2a20ce2a6a21cf2a20ce2a20cf2a6a21d02a20cf2a20d02a6a21d12a20d02a20d12a6a21d22a20d12a20d22a" + "6a21d32a20d22a20d32a6a21d42a20d32a20d42a6a21d52a20d42a20d52a6a21d62a20d52a20d62a6a21d72a20d62a" + "20d72a6a21d82a20d72a20d82a6a21d92a20d82a20d92a6a21da2a20d92a20da2a6a21db2a20da2a20db2a6a21dc2a" + "20db2a20dc2a6a21dd2a20dc2a20dd2a6a21de2a20dd2a20de2a6a21df2a20de2a20df2a6a21e02a20df2a20e02a6a" + "21e12a20e02a20e12a6a21e22a20e12a20e22a6a21e32a20e22a20e32a6a21e42a20e32a20e42a6a21e52a20e42a20" + "e52a6a21e62a20e52a20e62a6a21e72a20e62a20e72a6a21e82a20e72a20e82a6a21e92a20e82a20e92a6a21ea2a20" + "e92a20ea2a6a21eb2a20ea2a20eb2a6a21ec2a20eb2a20ec2a6a21ed2a20ec2a20ed2a6a21ee2a20ed2a20ee2a6a21" + "ef2a20ee2a20ef2a6a21f02a20ef2a20f02a6a21f12a20f02a20f12a6a21f22a20f12a20f22a6a21f32a20f22a20f3" + "2a6a21f42a20f32a20f42a6a21f52a20f42a20f52a6a21f62a20f52a20f62a6a21f72a20f62a20f72a6a21f82a20f7" + "2a20f82a6a21f92a20f82a20f92a6a21fa2a20f92a20fa2a6a21fb2a20fa2a20fb2a6a21fc2a20fb2a20fc2a6a21fd" + "2a20fc2a20fd2a6a21fe2a20fd2a20fe2a6a21ff2a20fe2a20ff2a6a21802b20ff2a20802b6a21812b20802b20812b" + "6a21822b20812b20822b6a21832b20822b20832b6a21842b20832b20842b6a21852b20842b20852b6a21862b20852b" + "20862b6a21872b20862b20872b6a21882b20872b20882b6a21892b20882b20892b6a218a2b20892b208a2b6a218b2b" + "208a2b208b2b6a218c2b208b2b208c2b6a218d2b208c2b208d2b6a218e2b208d2b208e2b6a218f2b208e2b208f2b6a" + "21902b208f2b20902b6a21912b20902b20912b6a21922b20912b20922b6a21932b20922b20932b6a21942b20932b20" + "942b6a21952b20942b20952b6a21962b20952b20962b6a21972b20962b20972b6a21982b20972b20982b6a21992b20" + "982b20992b6a219a2b20992b209a2b6a219b2b209a2b209b2b6a219c2b209b2b209c2b6a219d2b209c2b209d2b6a21" + "9e2b209d2b209e2b6a219f2b209e2b209f2b6a21a02b209f2b20a02b6a21a12b20a02b20a12b6a21a22b20a12b20a2" + "2b6a21a32b20a22b20a32b6a21a42b20a32b20a42b6a21a52b20a42b20a52b6a21a62b20a52b20a62b6a21a72b20a6" + "2b20a72b6a21a82b20a72b20a82b6a21a92b20a82b20a92b6a21aa2b20a92b20aa2b6a21ab2b20aa2b20ab2b6a21ac" + "2b20ab2b20ac2b6a21ad2b20ac2b20ad2b6a21ae2b20ad2b20ae2b6a21af2b20ae2b20af2b6a21b02b20af2b20b02b" + "6a21b12b20b02b20b12b6a21b22b20b12b20b22b6a21b32b20b22b20b32b6a21b42b20b32b20b42b6a21b52b20b42b" + "20b52b6a21b62b20b52b20b62b6a21b72b20b62b20b72b6a21b82b20b72b20b82b6a21b92b20b82b20b92b6a21ba2b" + "20b92b20ba2b6a21bb2b20ba2b20bb2b6a21bc2b20bb2b20bc2b6a21bd2b20bc2b20bd2b6a21be2b20bd2b20be2b6a" + "21bf2b20be2b20bf2b6a21c02b20bf2b20c02b6a21c12b20c02b20c12b6a21c22b20c12b20c22b6a21c32b20c22b20" + "c32b6a21c42b20c32b20c42b6a21c52b20c42b20c52b6a21c62b20c52b20c62b6a21c72b20c62b20c72b6a21c82b20" + "c72b20c82b6a21c92b20c82b20c92b6a21ca2b20c92b20ca2b6a21cb2b20ca2b20cb2b6a21cc2b20cb2b20cc2b6a21" + "cd2b20cc2b20cd2b6a21ce2b20cd2b20ce2b6a21cf2b20ce2b20cf2b6a21d02b20cf2b20d02b6a21d12b20d02b20d1" + "2b6a21d22b20d12b20d22b6a21d32b20d22b20d32b6a21d42b20d32b20d42b6a21d52b20d42b20d52b6a21d62b20d5" + "2b20d62b6a21d72b20d62b20d72b6a21d82b20d72b20d82b6a21d92b20d82b20d92b6a21da2b20d92b20da2b6a21db" + "2b20da2b20db2b6a21dc2b20db2b20dc2b6a21dd2b20dc2b20dd2b6a21de2b20dd2b20de2b6a21df2b20de2b20df2b" + "6a21e02b20df2b20e02b6a21e12b20e02b20e12b6a21e22b20e12b20e22b6a21e32b20e22b20e32b6a21e42b20e32b" + "20e42b6a21e52b20e42b20e52b6a21e62b20e52b20e62b6a21e72b20e62b20e72b6a21e82b20e72b20e82b6a21e92b" + "20e82b20e92b6a21ea2b20e92b20ea2b6a21eb2b20ea2b20eb2b6a21ec2b20eb2b20ec2b6a21ed2b20ec2b20ed2b6a" + "21ee2b20ed2b20ee2b6a21ef2b20ee2b20ef2b6a21f02b20ef2b20f02b6a21f12b20f02b20f12b6a21f22b20f12b20" + "f22b6a21f32b20f22b20f32b6a21f42b20f32b20f42b6a21f52b20f42b20f52b6a21f62b20f52b20f62b6a21f72b20" + "f62b20f72b6a21f82b20f72b20f82b6a21f92b20f82b20f92b6a21fa2b20f92b20fa2b6a21fb2b20fa2b20fb2b6a21" + "fc2b20fb2b20fc2b6a21fd2b20fc2b20fd2b6a21fe2b20fd2b20fe2b6a21ff2b20fe2b20ff2b6a21802c20ff2b2080" + "2c6a21812c20802c20812c6a21822c20812c20822c6a21832c20822c20832c6a21842c20832c20842c6a21852c2084" + "2c20852c6a21862c20852c20862c6a21872c20862c20872c6a21882c20872c20882c6a21892c20882c20892c6a218a" + "2c20892c208a2c6a218b2c208a2c208b2c6a218c2c208b2c208c2c6a218d2c208c2c208d2c6a218e2c208d2c208e2c" + "6a218f2c208e2c208f2c6a21902c208f2c20902c6a21912c20902c20912c6a21922c20912c20922c6a21932c20922c" + "20932c6a21942c20932c20942c6a21952c20942c20952c6a21962c20952c20962c6a21972c20962c20972c6a21982c" + "20972c20982c6a21992c20982c20992c6a219a2c20992c209a2c6a219b2c209a2c209b2c6a219c2c209b2c209c2c6a" "219d2c209c2c209d2c6a219e2c209d2c209e2c6a219f2c209e2c209f2c6a21a02c209f2c20a02c6a21a12c20a02c20" - "a12c6a21a22c20a12c20" - "a22c6a21a32c20a22c20a32c6a21a42c20a32c20a42c6a21a52c20a42c20a52c6a21a62c20a52c20a62c6a21a72c20" - "a62c20a72c6a21a82c20" - "a72c20a82c6a21a92c20a82c20a92c6a21aa2c20a92c20aa2c6a21ab2c20aa2c20ab2c6a21ac2c20ab2c20ac2c6a21" - "ad2c20ac2c20ad2c6a21" - "ae2c20ad2c20ae2c6a21af2c20ae2c20af2c6a21b02c20af2c20b02c6a21b12c20b02c20b12c6a21b22c20b12c20b2" - "2c6a21b32c20b22c20b3" - "2c6a21b42c20b32c20b42c6a21b52c20b42c20b52c6a21b62c20b52c20b62c6a21b72c20b62c20b72c6a21b82c20b7" - "2c20b82c6a21b92c20b8" - "2c20b92c6a21ba2c20b92c20ba2c6a21bb2c20ba2c20bb2c6a21bc2c20bb2c20bc2c6a21bd2c20bc2c20bd2c6a21be" - "2c20bd2c20be2c6a21bf" - "2c20be2c20bf2c6a21c02c20bf2c20c02c6a21c12c20c02c20c12c6a21c22c20c12c20c22c6a21c32c20c22c20c32c" - "6a21c42c20c32c20c42c" - "6a21c52c20c42c20c52c6a21c62c20c52c20c62c6a21c72c20c62c20c72c6a21c82c20c72c20c82c6a21c92c20c82c" - "20c92c6a21ca2c20c92c" - "20ca2c6a21cb2c20ca2c20cb2c6a21cc2c20cb2c20cc2c6a21cd2c20cc2c20cd2c6a21ce2c20cd2c20ce2c6a21cf2c" - "20ce2c20cf2c6a21d02c" - "20cf2c20d02c6a21d12c20d02c20d12c6a21d22c20d12c20d22c6a21d32c20d22c20d32c6a21d42c20d32c20d42c6a" - "21d52c20d42c20d52c6a" - "21d62c20d52c20d62c6a21d72c20d62c20d72c6a21d82c20d72c20d82c6a21d92c20d82c20d92c6a21da2c20d92c20" - "da2c6a21db2c20da2c20" - "db2c6a21dc2c20db2c20dc2c6a21dd2c20dc2c20dd2c6a21de2c20dd2c20de2c6a21df2c20de2c20df2c6a21e02c20" - "df2c20e02c6a21e12c20" - "e02c20e12c6a21e22c20e12c20e22c6a21e32c20e22c20e32c6a21e42c20e32c20e42c6a21e52c20e42c20e52c6a21" - "e62c20e52c20e62c6a21" - "e72c20e62c20e72c6a21e82c20e72c20e82c6a21e92c20e82c20e92c6a21ea2c20e92c20ea2c6a21eb2c20ea2c20eb" - "2c6a21ec2c20eb2c20ec" - "2c6a21ed2c20ec2c20ed2c6a21ee2c20ed2c20ee2c6a21ef2c20ee2c20ef2c6a21f02c20ef2c20f02c6a21f12c20f0" - "2c20f12c6a21f22c20f1" - "2c20f22c6a21f32c20f22c20f32c6a21f42c20f32c20f42c6a21f52c20f42c20f52c6a21f62c20f52c20f62c6a21f7" - "2c20f62c20f72c6a21f8" - "2c20f72c20f82c6a21f92c20f82c20f92c6a21fa2c20f92c20fa2c6a21fb2c20fa2c20fb2c6a21fc2c20fb2c20fc2c" - "6a21fd2c20fc2c20fd2c" - "6a21fe2c20fd2c20fe2c6a21ff2c20fe2c20ff2c6a21802d20ff2c20802d6a21812d20802d20812d6a21822d20812d" - "20822d6a21832d20822d" - "20832d6a21842d20832d20842d6a21852d20842d20852d6a21862d20852d20862d6a21872d20862d20872d6a21882d" - "20872d20882d6a21892d" - "20882d20892d6a218a2d20892d208a2d6a218b2d208a2d208b2d6a218c2d208b2d208c2d6a218d2d208c2d208d2d6a" - "218e2d208d2d208e2d6a" - "218f2d208e2d208f2d6a21902d208f2d20902d6a21912d20902d20912d6a21922d20912d20922d6a21932d20922d20" - "932d6a21942d20932d20" - "942d6a21952d20942d20952d6a21962d20952d20962d6a21972d20962d20972d6a21982d20972d20982d6a21992d20" - "982d20992d6a219a2d20" - "992d209a2d6a219b2d209a2d209b2d6a219c2d209b2d209c2d6a219d2d209c2d209d2d6a219e2d209d2d209e2d6a21" - "9f2d209e2d209f2d6a21" - "a02d209f2d20a02d6a21a12d20a02d20a12d6a21a22d20a12d20a22d6a21a32d20a22d20a32d6a21a42d20a32d20a4" - "2d6a21a52d20a42d20a5" - "2d6a21a62d20a52d20a62d6a21a72d20a62d20a72d6a21a82d20a72d20a82d6a21a92d20a82d20a92d6a21aa2d20a9" - "2d20aa2d6a21ab2d20aa" - "2d20ab2d6a21ac2d20ab2d20ac2d6a21ad2d20ac2d20ad2d6a21ae2d20ad2d20ae2d6a21af2d20ae2d20af2d6a21b0" - "2d20af2d20b02d6a21b1" - "2d20b02d20b12d6a21b22d20b12d20b22d6a21b32d20b22d20b32d6a21b42d20b32d20b42d6a21b52d20b42d20b52d" - "6a21b62d20b52d20b62d" - "6a21b72d20b62d20b72d6a21b82d20b72d20b82d6a21b92d20b82d20b92d6a21ba2d20b92d20ba2d6a21bb2d20ba2d" - "20bb2d6a21bc2d20bb2d" - "20bc2d6a21bd2d20bc2d20bd2d6a21be2d20bd2d20be2d6a21bf2d20be2d20bf2d6a21c02d20bf2d20c02d6a21c12d" - "20c02d20c12d6a21c22d" - "20c12d20c22d6a21c32d20c22d20c32d6a21c42d20c32d20c42d6a21c52d20c42d20c52d6a21c62d20c52d20c62d6a" - "21c72d20c62d20c72d6a" - "21c82d20c72d20c82d6a21c92d20c82d20c92d6a21ca2d20c92d20ca2d6a21cb2d20ca2d20cb2d6a21cc2d20cb2d20" - "cc2d6a21cd2d20cc2d20" - "cd2d6a21ce2d20cd2d20ce2d6a21cf2d20ce2d20cf2d6a21d02d20cf2d20d02d6a21d12d20d02d20d12d6a21d22d20" - "d12d20d22d6a21d32d20" - "d22d20d32d6a21d42d20d32d20d42d6a21d52d20d42d20d52d6a21d62d20d52d20d62d6a21d72d20d62d20d72d6a21" - "d82d20d72d20d82d6a21" - "d92d20d82d20d92d6a21da2d20d92d20da2d6a21db2d20da2d20db2d6a21dc2d20db2d20dc2d6a21dd2d20dc2d20dd" - "2d6a21de2d20dd2d20de" - "2d6a21df2d20de2d20df2d6a21e02d20df2d20e02d6a21e12d20e02d20e12d6a21e22d20e12d20e22d6a21e32d20e2" - "2d20e32d6a21e42d20e3" - "2d20e42d6a21e52d20e42d20e52d6a21e62d20e52d20e62d6a21e72d20e62d20e72d6a21e82d20e72d20e82d6a21e9" - "2d20e82d20e92d6a21ea" - "2d20e92d20ea2d6a21eb2d20ea2d20eb2d6a21ec2d20eb2d20ec2d6a21ed2d20ec2d20ed2d6a21ee2d20ed2d20ee2d" - "6a21ef2d20ee2d20ef2d" - "6a21f02d20ef2d20f02d6a21f12d20f02d20f12d6a21f22d20f12d20f22d6a21f32d20f22d20f32d6a21f42d20f32d" - "20f42d6a21f52d20f42d" - "20f52d6a21f62d20f52d20f62d6a21f72d20f62d20f72d6a21f82d20f72d20f82d6a21f92d20f82d20f92d6a21fa2d" - "20f92d20fa2d6a21fb2d" - "20fa2d20fb2d6a21fc2d20fb2d20fc2d6a21fd2d20fc2d20fd2d6a21fe2d20fd2d20fe2d6a21ff2d20fe2d20ff2d6a" - "21802e20ff2d20802e6a" - "21812e20802e20812e6a21822e20812e20822e6a21832e20822e20832e6a21842e20832e20842e6a21852e20842e20" - "852e6a21862e20852e20" - "862e6a21872e20862e20872e6a21882e20872e20882e6a21892e20882e20892e6a218a2e20892e208a2e6a218b2e20" - "8a2e208b2e6a218c2e20" - "8b2e208c2e6a218d2e208c2e208d2e6a218e2e208d2e208e2e6a218f2e208e2e208f2e6a21902e208f2e20902e6a21" - "912e20902e20912e6a21" - "922e20912e20922e6a21932e20922e20932e6a21942e20932e20942e6a21952e20942e20952e6a21962e20952e2096" - "2e6a21972e20962e2097" - "2e6a21982e20972e20982e6a21992e20982e20992e6a219a2e20992e209a2e6a219b2e209a2e209b2e6a219c2e209b" - "2e209c2e6a219d2e209c" - "2e209d2e6a219e2e209d2e209e2e6a219f2e209e2e209f2e6a21a02e209f2e20a02e6a21a12e20a02e20a12e6a21a2" - "2e20a12e20a22e6a21a3" - "2e20a22e20a32e6a21a42e20a32e20a42e6a21a52e20a42e20a52e6a21a62e20a52e20a62e6a21a72e20a62e20a72e" - "6a21a82e20a72e20a82e" + "a12c6a21a22c20a12c20a22c6a21a32c20a22c20a32c6a21a42c20a32c20a42c6a21a52c20a42c20a52c6a21a62c20" + "a52c20a62c6a21a72c20a62c20a72c6a21a82c20a72c20a82c6a21a92c20a82c20a92c6a21aa2c20a92c20aa2c6a21" + "ab2c20aa2c20ab2c6a21ac2c20ab2c20ac2c6a21ad2c20ac2c20ad2c6a21ae2c20ad2c20ae2c6a21af2c20ae2c20af" + "2c6a21b02c20af2c20b02c6a21b12c20b02c20b12c6a21b22c20b12c20b22c6a21b32c20b22c20b32c6a21b42c20b3" + "2c20b42c6a21b52c20b42c20b52c6a21b62c20b52c20b62c6a21b72c20b62c20b72c6a21b82c20b72c20b82c6a21b9" + "2c20b82c20b92c6a21ba2c20b92c20ba2c6a21bb2c20ba2c20bb2c6a21bc2c20bb2c20bc2c6a21bd2c20bc2c20bd2c" + "6a21be2c20bd2c20be2c6a21bf2c20be2c20bf2c6a21c02c20bf2c20c02c6a21c12c20c02c20c12c6a21c22c20c12c" + "20c22c6a21c32c20c22c20c32c6a21c42c20c32c20c42c6a21c52c20c42c20c52c6a21c62c20c52c20c62c6a21c72c" + "20c62c20c72c6a21c82c20c72c20c82c6a21c92c20c82c20c92c6a21ca2c20c92c20ca2c6a21cb2c20ca2c20cb2c6a" + "21cc2c20cb2c20cc2c6a21cd2c20cc2c20cd2c6a21ce2c20cd2c20ce2c6a21cf2c20ce2c20cf2c6a21d02c20cf2c20" + "d02c6a21d12c20d02c20d12c6a21d22c20d12c20d22c6a21d32c20d22c20d32c6a21d42c20d32c20d42c6a21d52c20" + "d42c20d52c6a21d62c20d52c20d62c6a21d72c20d62c20d72c6a21d82c20d72c20d82c6a21d92c20d82c20d92c6a21" + "da2c20d92c20da2c6a21db2c20da2c20db2c6a21dc2c20db2c20dc2c6a21dd2c20dc2c20dd2c6a21de2c20dd2c20de" + "2c6a21df2c20de2c20df2c6a21e02c20df2c20e02c6a21e12c20e02c20e12c6a21e22c20e12c20e22c6a21e32c20e2" + "2c20e32c6a21e42c20e32c20e42c6a21e52c20e42c20e52c6a21e62c20e52c20e62c6a21e72c20e62c20e72c6a21e8" + "2c20e72c20e82c6a21e92c20e82c20e92c6a21ea2c20e92c20ea2c6a21eb2c20ea2c20eb2c6a21ec2c20eb2c20ec2c" + "6a21ed2c20ec2c20ed2c6a21ee2c20ed2c20ee2c6a21ef2c20ee2c20ef2c6a21f02c20ef2c20f02c6a21f12c20f02c" + "20f12c6a21f22c20f12c20f22c6a21f32c20f22c20f32c6a21f42c20f32c20f42c6a21f52c20f42c20f52c6a21f62c" + "20f52c20f62c6a21f72c20f62c20f72c6a21f82c20f72c20f82c6a21f92c20f82c20f92c6a21fa2c20f92c20fa2c6a" + "21fb2c20fa2c20fb2c6a21fc2c20fb2c20fc2c6a21fd2c20fc2c20fd2c6a21fe2c20fd2c20fe2c6a21ff2c20fe2c20" + "ff2c6a21802d20ff2c20802d6a21812d20802d20812d6a21822d20812d20822d6a21832d20822d20832d6a21842d20" + "832d20842d6a21852d20842d20852d6a21862d20852d20862d6a21872d20862d20872d6a21882d20872d20882d6a21" + "892d20882d20892d6a218a2d20892d208a2d6a218b2d208a2d208b2d6a218c2d208b2d208c2d6a218d2d208c2d208d" + "2d6a218e2d208d2d208e2d6a218f2d208e2d208f2d6a21902d208f2d20902d6a21912d20902d20912d6a21922d2091" + "2d20922d6a21932d20922d20932d6a21942d20932d20942d6a21952d20942d20952d6a21962d20952d20962d6a2197" + "2d20962d20972d6a21982d20972d20982d6a21992d20982d20992d6a219a2d20992d209a2d6a219b2d209a2d209b2d" + "6a219c2d209b2d209c2d6a219d2d209c2d209d2d6a219e2d209d2d209e2d6a219f2d209e2d209f2d6a21a02d209f2d" + "20a02d6a21a12d20a02d20a12d6a21a22d20a12d20a22d6a21a32d20a22d20a32d6a21a42d20a32d20a42d6a21a52d" + "20a42d20a52d6a21a62d20a52d20a62d6a21a72d20a62d20a72d6a21a82d20a72d20a82d6a21a92d20a82d20a92d6a" + "21aa2d20a92d20aa2d6a21ab2d20aa2d20ab2d6a21ac2d20ab2d20ac2d6a21ad2d20ac2d20ad2d6a21ae2d20ad2d20" + "ae2d6a21af2d20ae2d20af2d6a21b02d20af2d20b02d6a21b12d20b02d20b12d6a21b22d20b12d20b22d6a21b32d20" + "b22d20b32d6a21b42d20b32d20b42d6a21b52d20b42d20b52d6a21b62d20b52d20b62d6a21b72d20b62d20b72d6a21" + "b82d20b72d20b82d6a21b92d20b82d20b92d6a21ba2d20b92d20ba2d6a21bb2d20ba2d20bb2d6a21bc2d20bb2d20bc" + "2d6a21bd2d20bc2d20bd2d6a21be2d20bd2d20be2d6a21bf2d20be2d20bf2d6a21c02d20bf2d20c02d6a21c12d20c0" + "2d20c12d6a21c22d20c12d20c22d6a21c32d20c22d20c32d6a21c42d20c32d20c42d6a21c52d20c42d20c52d6a21c6" + "2d20c52d20c62d6a21c72d20c62d20c72d6a21c82d20c72d20c82d6a21c92d20c82d20c92d6a21ca2d20c92d20ca2d" + "6a21cb2d20ca2d20cb2d6a21cc2d20cb2d20cc2d6a21cd2d20cc2d20cd2d6a21ce2d20cd2d20ce2d6a21cf2d20ce2d" + "20cf2d6a21d02d20cf2d20d02d6a21d12d20d02d20d12d6a21d22d20d12d20d22d6a21d32d20d22d20d32d6a21d42d" + "20d32d20d42d6a21d52d20d42d20d52d6a21d62d20d52d20d62d6a21d72d20d62d20d72d6a21d82d20d72d20d82d6a" + "21d92d20d82d20d92d6a21da2d20d92d20da2d6a21db2d20da2d20db2d6a21dc2d20db2d20dc2d6a21dd2d20dc2d20" + "dd2d6a21de2d20dd2d20de2d6a21df2d20de2d20df2d6a21e02d20df2d20e02d6a21e12d20e02d20e12d6a21e22d20" + "e12d20e22d6a21e32d20e22d20e32d6a21e42d20e32d20e42d6a21e52d20e42d20e52d6a21e62d20e52d20e62d6a21" + "e72d20e62d20e72d6a21e82d20e72d20e82d6a21e92d20e82d20e92d6a21ea2d20e92d20ea2d6a21eb2d20ea2d20eb" + "2d6a21ec2d20eb2d20ec2d6a21ed2d20ec2d20ed2d6a21ee2d20ed2d20ee2d6a21ef2d20ee2d20ef2d6a21f02d20ef" + "2d20f02d6a21f12d20f02d20f12d6a21f22d20f12d20f22d6a21f32d20f22d20f32d6a21f42d20f32d20f42d6a21f5" + "2d20f42d20f52d6a21f62d20f52d20f62d6a21f72d20f62d20f72d6a21f82d20f72d20f82d6a21f92d20f82d20f92d" + "6a21fa2d20f92d20fa2d6a21fb2d20fa2d20fb2d6a21fc2d20fb2d20fc2d6a21fd2d20fc2d20fd2d6a21fe2d20fd2d" + "20fe2d6a21ff2d20fe2d20ff2d6a21802e20ff2d20802e6a21812e20802e20812e6a21822e20812e20822e6a21832e" + "20822e20832e6a21842e20832e20842e6a21852e20842e20852e6a21862e20852e20862e6a21872e20862e20872e6a" + "21882e20872e20882e6a21892e20882e20892e6a218a2e20892e208a2e6a218b2e208a2e208b2e6a218c2e208b2e20" + "8c2e6a218d2e208c2e208d2e6a218e2e208d2e208e2e6a218f2e208e2e208f2e6a21902e208f2e20902e6a21912e20" + "902e20912e6a21922e20912e20922e6a21932e20922e20932e6a21942e20932e20942e6a21952e20942e20952e6a21" + "962e20952e20962e6a21972e20962e20972e6a21982e20972e20982e6a21992e20982e20992e6a219a2e20992e209a" + "2e6a219b2e209a2e209b2e6a219c2e209b2e209c2e6a219d2e209c2e209d2e6a219e2e209d2e209e2e6a219f2e209e" + "2e209f2e6a21a02e209f2e20a02e6a21a12e20a02e20a12e6a21a22e20a12e20a22e6a21a32e20a22e20a32e6a21a4" + "2e20a32e20a42e6a21a52e20a42e20a52e6a21a62e20a52e20a62e6a21a72e20a62e20a72e6a21a82e20a72e20a82e" "6a21a92e20a82e20a92e6a21aa2e20a92e20aa2e6a21ab2e20aa2e20ab2e6a21ac2e20ab2e20ac2e6a21ad2e20ac2e" - "20ad2e6a21ae2e20ad2e" - "20ae2e6a21af2e20ae2e20af2e6a21b02e20af2e20b02e6a21b12e20b02e20b12e6a21b22e20b12e20b22e6a21b32e" - "20b22e20b32e6a21b42e" - "20b32e20b42e6a21b52e20b42e20b52e6a21b62e20b52e20b62e6a21b72e20b62e20b72e6a21b82e20b72e20b82e6a" - "21b92e20b82e20b92e6a" - "21ba2e20b92e20ba2e6a21bb2e20ba2e20bb2e6a21bc2e20bb2e20bc2e6a21bd2e20bc2e20bd2e6a21be2e20bd2e20" - "be2e6a21bf2e20be2e20" - "bf2e6a21c02e20bf2e20c02e6a21c12e20c02e20c12e6a21c22e20c12e20c22e6a21c32e20c22e20c32e6a21c42e20" - "c32e20c42e6a21c52e20" - "c42e20c52e6a21c62e20c52e20c62e6a21c72e20c62e20c72e6a21c82e20c72e20c82e6a21c92e20c82e20c92e6a21" - "ca2e20c92e20ca2e6a21" - "cb2e20ca2e20cb2e6a21cc2e20cb2e20cc2e6a21cd2e20cc2e20cd2e6a21ce2e20cd2e20ce2e6a21cf2e20ce2e20cf" - "2e6a21d02e20cf2e20d0" - "2e6a21d12e20d02e20d12e6a21d22e20d12e20d22e6a21d32e20d22e20d32e6a21d42e20d32e20d42e6a21d52e20d4" - "2e20d52e6a21d62e20d5" - "2e20d62e6a21d72e20d62e20d72e6a21d82e20d72e20d82e6a21d92e20d82e20d92e6a21da2e20d92e20da2e6a21db" - "2e20da2e20db2e6a21dc" - "2e20db2e20dc2e6a21dd2e20dc2e20dd2e6a21de2e20dd2e20de2e6a21df2e20de2e20df2e6a21e02e20df2e20e02e" - "6a21e12e20e02e20e12e" - "6a21e22e20e12e20e22e6a21e32e20e22e20e32e6a21e42e20e32e20e42e6a21e52e20e42e20e52e6a21e62e20e52e" - "20e62e6a21e72e20e62e" - "20e72e6a21e82e20e72e20e82e6a21e92e20e82e20e92e6a21ea2e20e92e20ea2e6a21eb2e20ea2e20eb2e6a21ec2e" - "20eb2e20ec2e6a21ed2e" - "20ec2e20ed2e6a21ee2e20ed2e20ee2e6a21ef2e20ee2e20ef2e6a21f02e20ef2e20f02e6a21f12e20f02e20f12e6a" - "21f22e20f12e20f22e6a" - "21f32e20f22e20f32e6a21f42e20f32e20f42e6a21f52e20f42e20f52e6a21f62e20f52e20f62e6a21f72e20f62e20" - "f72e6a21f82e20f72e20" - "f82e6a21f92e20f82e20f92e6a21fa2e20f92e20fa2e6a21fb2e20fa2e20fb2e6a21fc2e20fb2e20fc2e6a21fd2e20" - "fc2e20fd2e6a21fe2e20" - "fd2e20fe2e6a21ff2e20fe2e20ff2e6a21802f20ff2e20802f6a21812f20802f20812f6a21822f20812f20822f6a21" - "832f20822f20832f6a21" - "842f20832f20842f6a21852f20842f20852f6a21862f20852f20862f6a21872f20862f20872f6a21882f20872f2088" - "2f6a21892f20882f2089" - "2f6a218a2f20892f208a2f6a218b2f208a2f208b2f6a218c2f208b2f208c2f6a218d2f208c2f208d2f6a218e2f208d" - "2f208e2f6a218f2f208e" - "2f208f2f6a21902f208f2f20902f6a21912f20902f20912f6a21922f20912f20922f6a21932f20922f20932f6a2194" - "2f20932f20942f6a2195" - "2f20942f20952f6a21962f20952f20962f6a21972f20962f20972f6a21982f20972f20982f6a21992f20982f20992f" - "6a219a2f20992f209a2f" - "6a219b2f209a2f209b2f6a219c2f209b2f209c2f6a219d2f209c2f209d2f6a219e2f209d2f209e2f6a219f2f209e2f" - "209f2f6a21a02f209f2f" - "20a02f6a21a12f20a02f20a12f6a21a22f20a12f20a22f6a21a32f20a22f20a32f6a21a42f20a32f20a42f6a21a52f" - "20a42f20a52f6a21a62f" - "20a52f20a62f6a21a72f20a62f20a72f6a21a82f20a72f20a82f6a21a92f20a82f20a92f6a21aa2f20a92f20aa2f6a" - "21ab2f20aa2f20ab2f6a" - "21ac2f20ab2f20ac2f6a21ad2f20ac2f20ad2f6a21ae2f20ad2f20ae2f6a21af2f20ae2f20af2f6a21b02f20af2f20" - "b02f6a21b12f20b02f20" - "b12f6a21b22f20b12f20b22f6a21b32f20b22f20b32f6a21b42f20b32f20b42f6a21b52f20b42f20b52f6a21b62f20" - "b52f20b62f6a21b72f20" - "b62f20b72f6a21b82f20b72f20b82f6a21b92f20b82f20b92f6a21ba2f20b92f20ba2f6a21bb2f20ba2f20bb2f6a21" - "bc2f20bb2f20bc2f6a21" - "bd2f20bc2f20bd2f6a21be2f20bd2f20be2f6a21bf2f20be2f20bf2f6a21c02f20bf2f20c02f6a21c12f20c02f20c1" - "2f6a21c22f20c12f20c2" - "2f6a21c32f20c22f20c32f6a21c42f20c32f20c42f6a21c52f20c42f20c52f6a21c62f20c52f20c62f6a21c72f20c6" - "2f20c72f6a21c82f20c7" - "2f20c82f6a21c92f20c82f20c92f6a21ca2f20c92f20ca2f6a21cb2f20ca2f20cb2f6a21cc2f20cb2f20cc2f6a21cd" - "2f20cc2f20cd2f6a21ce" - "2f20cd2f20ce2f6a21cf2f20ce2f20cf2f6a21d02f20cf2f20d02f6a21d12f20d02f20d12f6a21d22f20d12f20d22f" - "6a21d32f20d22f20d32f" - "6a21d42f20d32f20d42f6a21d52f20d42f20d52f6a21d62f20d52f20d62f6a21d72f20d62f20d72f6a21d82f20d72f" - "20d82f6a21d92f20d82f" - "20d92f6a21da2f20d92f20da2f6a21db2f20da2f20db2f6a21dc2f20db2f20dc2f6a21dd2f20dc2f20dd2f6a21de2f" - "20dd2f20de2f6a21df2f" - "20de2f20df2f6a21e02f20df2f20e02f6a21e12f20e02f20e12f6a21e22f20e12f20e22f6a21e32f20e22f20e32f6a" - "21e42f20e32f20e42f6a" - "21e52f20e42f20e52f6a21e62f20e52f20e62f6a21e72f20e62f20e72f6a21e82f20e72f20e82f6a21e92f20e82f20" - "e92f6a21ea2f20e92f20" - "ea2f6a21eb2f20ea2f20eb2f6a21ec2f20eb2f20ec2f6a21ed2f20ec2f20ed2f6a21ee2f20ed2f20ee2f6a21ef2f20" - "ee2f20ef2f6a21f02f20" - "ef2f20f02f6a21f12f20f02f20f12f6a21f22f20f12f20f22f6a21f32f20f22f20f32f6a21f42f20f32f20f42f6a21" - "f52f20f42f20f52f6a21" - "f62f20f52f20f62f6a21f72f20f62f20f72f6a21f82f20f72f20f82f6a21f92f20f82f20f92f6a21fa2f20f92f20fa" - "2f6a21fb2f20fa2f20fb" - "2f6a21fc2f20fb2f20fc2f6a21fd2f20fc2f20fd2f6a21fe2f20fd2f20fe2f6a21ff2f20fe2f20ff2f6a21803020ff" - "2f2080306a2181302080" - "302081306a2182302081302082306a2183302082302083306a2184302083302084306a2185302084302085306a2186" - "302085302086306a2187" - "302086302087306a2188302087302088306a2189302088302089306a218a30208930208a306a218b30208a30208b30" - "6a218c30208b30208c30" - "6a218d30208c30208d306a218e30208d30208e306a218f30208e30208f306a219030208f302090306a219130209030" - "2091306a219230209130" - "2092306a2193302092302093306a2194302093302094306a2195302094302095306a2196302095302096306a219730" - "2096302097306a219830" - "2097302098306a2199302098302099306a219a30209930209a306a219b30209a30209b306a219c30209b30209c306a" - "219d30209c30209d306a" - "219e30209d30209e306a219f30209e30209f306a21a030209f3020a0306a21a13020a03020a1306a21a23020a13020" - "a2306a21a33020a23020" - "a3306a21a43020a33020a4306a21a53020a43020a5306a21a63020a53020a6306a21a73020a63020a7306a21a83020" - "a73020a8306a21a93020" - "a83020a9306a21aa3020a93020aa306a21ab3020aa3020ab306a21ac3020ab3020ac306a21ad3020ac3020ad306a21" - "ae3020ad3020ae306a21" - "af3020ae3020af306a21b03020af3020b0306a21b13020b03020b1306a21b23020b13020b2306a21b33020b23020b3" - "306a21b43020b33020b4" + "20ad2e6a21ae2e20ad2e20ae2e6a21af2e20ae2e20af2e6a21b02e20af2e20b02e6a21b12e20b02e20b12e6a21b22e" + "20b12e20b22e6a21b32e20b22e20b32e6a21b42e20b32e20b42e6a21b52e20b42e20b52e6a21b62e20b52e20b62e6a" + "21b72e20b62e20b72e6a21b82e20b72e20b82e6a21b92e20b82e20b92e6a21ba2e20b92e20ba2e6a21bb2e20ba2e20" + "bb2e6a21bc2e20bb2e20bc2e6a21bd2e20bc2e20bd2e6a21be2e20bd2e20be2e6a21bf2e20be2e20bf2e6a21c02e20" + "bf2e20c02e6a21c12e20c02e20c12e6a21c22e20c12e20c22e6a21c32e20c22e20c32e6a21c42e20c32e20c42e6a21" + "c52e20c42e20c52e6a21c62e20c52e20c62e6a21c72e20c62e20c72e6a21c82e20c72e20c82e6a21c92e20c82e20c9" + "2e6a21ca2e20c92e20ca2e6a21cb2e20ca2e20cb2e6a21cc2e20cb2e20cc2e6a21cd2e20cc2e20cd2e6a21ce2e20cd" + "2e20ce2e6a21cf2e20ce2e20cf2e6a21d02e20cf2e20d02e6a21d12e20d02e20d12e6a21d22e20d12e20d22e6a21d3" + "2e20d22e20d32e6a21d42e20d32e20d42e6a21d52e20d42e20d52e6a21d62e20d52e20d62e6a21d72e20d62e20d72e" + "6a21d82e20d72e20d82e6a21d92e20d82e20d92e6a21da2e20d92e20da2e6a21db2e20da2e20db2e6a21dc2e20db2e" + "20dc2e6a21dd2e20dc2e20dd2e6a21de2e20dd2e20de2e6a21df2e20de2e20df2e6a21e02e20df2e20e02e6a21e12e" + "20e02e20e12e6a21e22e20e12e20e22e6a21e32e20e22e20e32e6a21e42e20e32e20e42e6a21e52e20e42e20e52e6a" + "21e62e20e52e20e62e6a21e72e20e62e20e72e6a21e82e20e72e20e82e6a21e92e20e82e20e92e6a21ea2e20e92e20" + "ea2e6a21eb2e20ea2e20eb2e6a21ec2e20eb2e20ec2e6a21ed2e20ec2e20ed2e6a21ee2e20ed2e20ee2e6a21ef2e20" + "ee2e20ef2e6a21f02e20ef2e20f02e6a21f12e20f02e20f12e6a21f22e20f12e20f22e6a21f32e20f22e20f32e6a21" + "f42e20f32e20f42e6a21f52e20f42e20f52e6a21f62e20f52e20f62e6a21f72e20f62e20f72e6a21f82e20f72e20f8" + "2e6a21f92e20f82e20f92e6a21fa2e20f92e20fa2e6a21fb2e20fa2e20fb2e6a21fc2e20fb2e20fc2e6a21fd2e20fc" + "2e20fd2e6a21fe2e20fd2e20fe2e6a21ff2e20fe2e20ff2e6a21802f20ff2e20802f6a21812f20802f20812f6a2182" + "2f20812f20822f6a21832f20822f20832f6a21842f20832f20842f6a21852f20842f20852f6a21862f20852f20862f" + "6a21872f20862f20872f6a21882f20872f20882f6a21892f20882f20892f6a218a2f20892f208a2f6a218b2f208a2f" + "208b2f6a218c2f208b2f208c2f6a218d2f208c2f208d2f6a218e2f208d2f208e2f6a218f2f208e2f208f2f6a21902f" + "208f2f20902f6a21912f20902f20912f6a21922f20912f20922f6a21932f20922f20932f6a21942f20932f20942f6a" + "21952f20942f20952f6a21962f20952f20962f6a21972f20962f20972f6a21982f20972f20982f6a21992f20982f20" + "992f6a219a2f20992f209a2f6a219b2f209a2f209b2f6a219c2f209b2f209c2f6a219d2f209c2f209d2f6a219e2f20" + "9d2f209e2f6a219f2f209e2f209f2f6a21a02f209f2f20a02f6a21a12f20a02f20a12f6a21a22f20a12f20a22f6a21" + "a32f20a22f20a32f6a21a42f20a32f20a42f6a21a52f20a42f20a52f6a21a62f20a52f20a62f6a21a72f20a62f20a7" + "2f6a21a82f20a72f20a82f6a21a92f20a82f20a92f6a21aa2f20a92f20aa2f6a21ab2f20aa2f20ab2f6a21ac2f20ab" + "2f20ac2f6a21ad2f20ac2f20ad2f6a21ae2f20ad2f20ae2f6a21af2f20ae2f20af2f6a21b02f20af2f20b02f6a21b1" + "2f20b02f20b12f6a21b22f20b12f20b22f6a21b32f20b22f20b32f6a21b42f20b32f20b42f6a21b52f20b42f20b52f" + "6a21b62f20b52f20b62f6a21b72f20b62f20b72f6a21b82f20b72f20b82f6a21b92f20b82f20b92f6a21ba2f20b92f" + "20ba2f6a21bb2f20ba2f20bb2f6a21bc2f20bb2f20bc2f6a21bd2f20bc2f20bd2f6a21be2f20bd2f20be2f6a21bf2f" + "20be2f20bf2f6a21c02f20bf2f20c02f6a21c12f20c02f20c12f6a21c22f20c12f20c22f6a21c32f20c22f20c32f6a" + "21c42f20c32f20c42f6a21c52f20c42f20c52f6a21c62f20c52f20c62f6a21c72f20c62f20c72f6a21c82f20c72f20" + "c82f6a21c92f20c82f20c92f6a21ca2f20c92f20ca2f6a21cb2f20ca2f20cb2f6a21cc2f20cb2f20cc2f6a21cd2f20" + "cc2f20cd2f6a21ce2f20cd2f20ce2f6a21cf2f20ce2f20cf2f6a21d02f20cf2f20d02f6a21d12f20d02f20d12f6a21" + "d22f20d12f20d22f6a21d32f20d22f20d32f6a21d42f20d32f20d42f6a21d52f20d42f20d52f6a21d62f20d52f20d6" + "2f6a21d72f20d62f20d72f6a21d82f20d72f20d82f6a21d92f20d82f20d92f6a21da2f20d92f20da2f6a21db2f20da" + "2f20db2f6a21dc2f20db2f20dc2f6a21dd2f20dc2f20dd2f6a21de2f20dd2f20de2f6a21df2f20de2f20df2f6a21e0" + "2f20df2f20e02f6a21e12f20e02f20e12f6a21e22f20e12f20e22f6a21e32f20e22f20e32f6a21e42f20e32f20e42f" + "6a21e52f20e42f20e52f6a21e62f20e52f20e62f6a21e72f20e62f20e72f6a21e82f20e72f20e82f6a21e92f20e82f" + "20e92f6a21ea2f20e92f20ea2f6a21eb2f20ea2f20eb2f6a21ec2f20eb2f20ec2f6a21ed2f20ec2f20ed2f6a21ee2f" + "20ed2f20ee2f6a21ef2f20ee2f20ef2f6a21f02f20ef2f20f02f6a21f12f20f02f20f12f6a21f22f20f12f20f22f6a" + "21f32f20f22f20f32f6a21f42f20f32f20f42f6a21f52f20f42f20f52f6a21f62f20f52f20f62f6a21f72f20f62f20" + "f72f6a21f82f20f72f20f82f6a21f92f20f82f20f92f6a21fa2f20f92f20fa2f6a21fb2f20fa2f20fb2f6a21fc2f20" + "fb2f20fc2f6a21fd2f20fc2f20fd2f6a21fe2f20fd2f20fe2f6a21ff2f20fe2f20ff2f6a21803020ff2f2080306a21" + "81302080302081306a2182302081302082306a2183302082302083306a2184302083302084306a2185302084302085" + "306a2186302085302086306a2187302086302087306a2188302087302088306a2189302088302089306a218a302089" + "30208a306a218b30208a30208b306a218c30208b30208c306a218d30208c30208d306a218e30208d30208e306a218f" + "30208e30208f306a219030208f302090306a2191302090302091306a2192302091302092306a219330209230209330" + "6a2194302093302094306a2195302094302095306a2196302095302096306a2197302096302097306a219830209730" + "2098306a2199302098302099306a219a30209930209a306a219b30209a30209b306a219c30209b30209c306a219d30" + "209c30209d306a219e30209d30209e306a219f30209e30209f306a21a030209f3020a0306a21a13020a03020a1306a" + "21a23020a13020a2306a21a33020a23020a3306a21a43020a33020a4306a21a53020a43020a5306a21a63020a53020" + "a6306a21a73020a63020a7306a21a83020a73020a8306a21a93020a83020a9306a21aa3020a93020aa306a21ab3020" + "aa3020ab306a21ac3020ab3020ac306a21ad3020ac3020ad306a21ae3020ad3020ae306a21af3020ae3020af306a21" + "b03020af3020b0306a21b13020b03020b1306a21b23020b13020b2306a21b33020b23020b3306a21b43020b33020b4" "306a21b53020b43020b5306a21b63020b53020b6306a21b73020b63020b7306a21b83020b73020b8306a21b93020b8" - "3020b9306a21ba3020b9" - "3020ba306a21bb3020ba3020bb306a21bc3020bb3020bc306a21bd3020bc3020bd306a21be3020bd3020be306a21bf" - "3020be3020bf306a21c0" - "3020bf3020c0306a21c13020c03020c1306a21c23020c13020c2306a21c33020c23020c3306a21c43020c33020c430" - "6a21c53020c43020c530" - "6a21c63020c53020c6306a21c73020c63020c7306a21c83020c73020c8306a21c93020c83020c9306a21ca3020c930" - "20ca306a21cb3020ca30" - "20cb306a21cc3020cb3020cc306a21cd3020cc3020cd306a21ce3020cd3020ce306a21cf3020ce3020cf306a21d030" - "20cf3020d0306a21d130" - "20d03020d1306a21d23020d13020d2306a21d33020d23020d3306a21d43020d33020d4306a21d53020d43020d5306a" - "21d63020d53020d6306a" - "21d73020d63020d7306a21d83020d73020d8306a21d93020d83020d9306a21da3020d93020da306a21db3020da3020" - "db306a21dc3020db3020" - "dc306a21dd3020dc3020dd306a21de3020dd3020de306a21df3020de3020df306a21e03020df3020e0306a21e13020" - "e03020e1306a21e23020" - "e13020e2306a21e33020e23020e3306a21e43020e33020e4306a21e53020e43020e5306a21e63020e53020e6306a21" - "e73020e63020e7306a21" - "e83020e73020e8306a21e93020e83020e9306a21ea3020e93020ea306a21eb3020ea3020eb306a21ec3020eb3020ec" - "306a21ed3020ec3020ed" - "306a21ee3020ed3020ee306a21ef3020ee3020ef306a21f03020ef3020f0306a21f13020f03020f1306a21f23020f1" - "3020f2306a21f33020f2" - "3020f3306a21f43020f33020f4306a21f53020f43020f5306a21f63020f53020f6306a21f73020f63020f7306a21f8" - "3020f73020f8306a21f9" - "3020f83020f9306a21fa3020f93020fa306a21fb3020fa3020fb306a21fc3020fb3020fc306a21fd3020fc3020fd30" - "6a21fe3020fd3020fe30" - "6a21ff3020fe3020ff306a21803120ff302080316a2181312080312081316a2182312081312082316a218331208231" - "2083316a218431208331" - "2084316a2185312084312085316a2186312085312086316a2187312086312087316a2188312087312088316a218931" - "2088312089316a218a31" - "208931208a316a218b31208a31208b316a218c31208b31208c316a218d31208c31208d316a218e31208d31208e316a" - "218f31208e31208f316a" - "219031208f312090316a2191312090312091316a2192312091312092316a2193312092312093316a21943120933120" - "94316a21953120943120" - "95316a2196312095312096316a2197312096312097316a2198312097312098316a2199312098312099316a219a3120" - "9931209a316a219b3120" - "9a31209b316a219c31209b31209c316a219d31209c31209d316a219e31209d31209e316a219f31209e31209f316a21" - "a031209f3120a0316a21" - "a13120a03120a1316a21a23120a13120a2316a21a33120a23120a3316a21a43120a33120a4316a21a53120a43120a5" - "316a21a63120a53120a6" - "316a21a73120a63120a7316a21a83120a73120a8316a21a93120a83120a9316a21aa3120a93120aa316a21ab3120aa" - "3120ab316a21ac3120ab" - "3120ac316a21ad3120ac3120ad316a21ae3120ad3120ae316a21af3120ae3120af316a21b03120af3120b0316a21b1" - "3120b03120b1316a21b2" - "3120b13120b2316a21b33120b23120b3316a21b43120b33120b4316a21b53120b43120b5316a21b63120b53120b631" - "6a21b73120b63120b731" - "6a21b83120b73120b8316a21b93120b83120b9316a21ba3120b93120ba316a21bb3120ba3120bb316a21bc3120bb31" - "20bc316a21bd3120bc31" - "20bd316a21be3120bd3120be316a21bf3120be3120bf316a21c03120bf3120c0316a21c13120c03120c1316a21c231" - "20c13120c2316a21c331" - "20c23120c3316a21c43120c33120c4316a21c53120c43120c5316a21c63120c53120c6316a21c73120c63120c7316a" - "21c83120c73120c8316a" - "21c93120c83120c9316a21ca3120c93120ca316a21cb3120ca3120cb316a21cc3120cb3120cc316a21cd3120cc3120" - "cd316a21ce3120cd3120" - "ce316a21cf3120ce3120cf316a21d03120cf3120d0316a21d13120d03120d1316a21d23120d13120d2316a21d33120" - "d23120d3316a21d43120" - "d33120d4316a21d53120d43120d5316a21d63120d53120d6316a21d73120d63120d7316a21d83120d73120d8316a21" - "d93120d83120d9316a21" - "da3120d93120da316a21db3120da3120db316a21dc3120db3120dc316a21dd3120dc3120dd316a21de3120dd3120de" - "316a21df3120de3120df" - "316a21e03120df3120e0316a21e13120e03120e1316a21e23120e13120e2316a21e33120e23120e3316a21e43120e3" - "3120e4316a21e53120e4" - "3120e5316a21e63120e53120e6316a21e73120e63120e7316a21e83120e73120e8316a21e93120e83120e9316a21ea" - "3120e93120ea316a21eb" - "3120ea3120eb316a21ec3120eb3120ec316a21ed3120ec3120ed316a21ee3120ed3120ee316a21ef3120ee3120ef31" - "6a21f03120ef3120f031" - "6a21f13120f03120f1316a21f23120f13120f2316a21f33120f23120f3316a21f43120f33120f4316a21f53120f431" - "20f5316a21f63120f531" - "20f6316a21f73120f63120f7316a21f83120f73120f8316a21f93120f83120f9316a21fa3120f93120fa316a21fb31" - "20fa3120fb316a21fc31" - "20fb3120fc316a21fd3120fc3120fd316a21fe3120fd3120fe316a21ff3120fe3120ff316a21803220ff312080326a" - "2181322080322081326a" - "2182322081322082326a2183322082322083326a2184322083322084326a2185322084322085326a21863220853220" - "86326a21873220863220" - "87326a2188322087322088326a2189322088322089326a218a32208932208a326a218b32208a32208b326a218c3220" - "8b32208c326a218d3220" - "8c32208d326a218e32208d32208e326a218f32208e32208f326a219032208f322090326a2191322090322091326a21" - "92322091322092326a21" - "93322092322093326a2194322093322094326a2195322094322095326a2196322095322096326a2197322096322097" - "326a2198322097322098" - "326a2199322098322099326a219a32209932209a326a219b32209a32209b326a219c32209b32209c326a219d32209c" - "32209d326a219e32209d" - "32209e326a219f32209e32209f326a21a032209f3220a0326a21a13220a03220a1326a21a23220a13220a2326a21a3" - "3220a23220a3326a21a4" - "3220a33220a4326a21a53220a43220a5326a21a63220a53220a6326a21a73220a63220a7326a21a83220a73220a832" - "6a21a93220a83220a932" - "6a21aa3220a93220aa326a21ab3220aa3220ab326a21ac3220ab3220ac326a21ad3220ac3220ad326a21ae3220ad32" - "20ae326a21af3220ae32" - "20af326a21b03220af3220b0326a21b13220b03220b1326a21b23220b13220b2326a21b33220b23220b3326a21b432" - "20b33220b4326a21b532" - "20b43220b5326a21b63220b53220b6326a21b73220b63220b7326a21b83220b73220b8326a21b93220b83220b9326a" - "21ba3220b93220ba326a" - "21bb3220ba3220bb326a21bc3220bb3220bc326a21bd3220bc3220bd326a21be3220bd3220be326a21bf3220be3220" - "bf326a21c03220bf3220" + "3020b9306a21ba3020b93020ba306a21bb3020ba3020bb306a21bc3020bb3020bc306a21bd3020bc3020bd306a21be" + "3020bd3020be306a21bf3020be3020bf306a21c03020bf3020c0306a21c13020c03020c1306a21c23020c13020c230" + "6a21c33020c23020c3306a21c43020c33020c4306a21c53020c43020c5306a21c63020c53020c6306a21c73020c630" + "20c7306a21c83020c73020c8306a21c93020c83020c9306a21ca3020c93020ca306a21cb3020ca3020cb306a21cc30" + "20cb3020cc306a21cd3020cc3020cd306a21ce3020cd3020ce306a21cf3020ce3020cf306a21d03020cf3020d0306a" + "21d13020d03020d1306a21d23020d13020d2306a21d33020d23020d3306a21d43020d33020d4306a21d53020d43020" + "d5306a21d63020d53020d6306a21d73020d63020d7306a21d83020d73020d8306a21d93020d83020d9306a21da3020" + "d93020da306a21db3020da3020db306a21dc3020db3020dc306a21dd3020dc3020dd306a21de3020dd3020de306a21" + "df3020de3020df306a21e03020df3020e0306a21e13020e03020e1306a21e23020e13020e2306a21e33020e23020e3" + "306a21e43020e33020e4306a21e53020e43020e5306a21e63020e53020e6306a21e73020e63020e7306a21e83020e7" + "3020e8306a21e93020e83020e9306a21ea3020e93020ea306a21eb3020ea3020eb306a21ec3020eb3020ec306a21ed" + "3020ec3020ed306a21ee3020ed3020ee306a21ef3020ee3020ef306a21f03020ef3020f0306a21f13020f03020f130" + "6a21f23020f13020f2306a21f33020f23020f3306a21f43020f33020f4306a21f53020f43020f5306a21f63020f530" + "20f6306a21f73020f63020f7306a21f83020f73020f8306a21f93020f83020f9306a21fa3020f93020fa306a21fb30" + "20fa3020fb306a21fc3020fb3020fc306a21fd3020fc3020fd306a21fe3020fd3020fe306a21ff3020fe3020ff306a" + "21803120ff302080316a2181312080312081316a2182312081312082316a2183312082312083316a21843120833120" + "84316a2185312084312085316a2186312085312086316a2187312086312087316a2188312087312088316a21893120" + "88312089316a218a31208931208a316a218b31208a31208b316a218c31208b31208c316a218d31208c31208d316a21" + "8e31208d31208e316a218f31208e31208f316a219031208f312090316a2191312090312091316a2192312091312092" + "316a2193312092312093316a2194312093312094316a2195312094312095316a2196312095312096316a2197312096" + "312097316a2198312097312098316a2199312098312099316a219a31209931209a316a219b31209a31209b316a219c" + "31209b31209c316a219d31209c31209d316a219e31209d31209e316a219f31209e31209f316a21a031209f3120a031" + "6a21a13120a03120a1316a21a23120a13120a2316a21a33120a23120a3316a21a43120a33120a4316a21a53120a431" + "20a5316a21a63120a53120a6316a21a73120a63120a7316a21a83120a73120a8316a21a93120a83120a9316a21aa31" + "20a93120aa316a21ab3120aa3120ab316a21ac3120ab3120ac316a21ad3120ac3120ad316a21ae3120ad3120ae316a" + "21af3120ae3120af316a21b03120af3120b0316a21b13120b03120b1316a21b23120b13120b2316a21b33120b23120" + "b3316a21b43120b33120b4316a21b53120b43120b5316a21b63120b53120b6316a21b73120b63120b7316a21b83120" + "b73120b8316a21b93120b83120b9316a21ba3120b93120ba316a21bb3120ba3120bb316a21bc3120bb3120bc316a21" + "bd3120bc3120bd316a21be3120bd3120be316a21bf3120be3120bf316a21c03120bf3120c0316a21c13120c03120c1" + "316a21c23120c13120c2316a21c33120c23120c3316a21c43120c33120c4316a21c53120c43120c5316a21c63120c5" + "3120c6316a21c73120c63120c7316a21c83120c73120c8316a21c93120c83120c9316a21ca3120c93120ca316a21cb" + "3120ca3120cb316a21cc3120cb3120cc316a21cd3120cc3120cd316a21ce3120cd3120ce316a21cf3120ce3120cf31" + "6a21d03120cf3120d0316a21d13120d03120d1316a21d23120d13120d2316a21d33120d23120d3316a21d43120d331" + "20d4316a21d53120d43120d5316a21d63120d53120d6316a21d73120d63120d7316a21d83120d73120d8316a21d931" + "20d83120d9316a21da3120d93120da316a21db3120da3120db316a21dc3120db3120dc316a21dd3120dc3120dd316a" + "21de3120dd3120de316a21df3120de3120df316a21e03120df3120e0316a21e13120e03120e1316a21e23120e13120" + "e2316a21e33120e23120e3316a21e43120e33120e4316a21e53120e43120e5316a21e63120e53120e6316a21e73120" + "e63120e7316a21e83120e73120e8316a21e93120e83120e9316a21ea3120e93120ea316a21eb3120ea3120eb316a21" + "ec3120eb3120ec316a21ed3120ec3120ed316a21ee3120ed3120ee316a21ef3120ee3120ef316a21f03120ef3120f0" + "316a21f13120f03120f1316a21f23120f13120f2316a21f33120f23120f3316a21f43120f33120f4316a21f53120f4" + "3120f5316a21f63120f53120f6316a21f73120f63120f7316a21f83120f73120f8316a21f93120f83120f9316a21fa" + "3120f93120fa316a21fb3120fa3120fb316a21fc3120fb3120fc316a21fd3120fc3120fd316a21fe3120fd3120fe31" + "6a21ff3120fe3120ff316a21803220ff312080326a2181322080322081326a2182322081322082326a218332208232" + "2083326a2184322083322084326a2185322084322085326a2186322085322086326a2187322086322087326a218832" + "2087322088326a2189322088322089326a218a32208932208a326a218b32208a32208b326a218c32208b32208c326a" + "218d32208c32208d326a218e32208d32208e326a218f32208e32208f326a219032208f322090326a21913220903220" + "91326a2192322091322092326a2193322092322093326a2194322093322094326a2195322094322095326a21963220" + "95322096326a2197322096322097326a2198322097322098326a2199322098322099326a219a32209932209a326a21" + "9b32209a32209b326a219c32209b32209c326a219d32209c32209d326a219e32209d32209e326a219f32209e32209f" + "326a21a032209f3220a0326a21a13220a03220a1326a21a23220a13220a2326a21a33220a23220a3326a21a43220a3" + "3220a4326a21a53220a43220a5326a21a63220a53220a6326a21a73220a63220a7326a21a83220a73220a8326a21a9" + "3220a83220a9326a21aa3220a93220aa326a21ab3220aa3220ab326a21ac3220ab3220ac326a21ad3220ac3220ad32" + "6a21ae3220ad3220ae326a21af3220ae3220af326a21b03220af3220b0326a21b13220b03220b1326a21b23220b132" + "20b2326a21b33220b23220b3326a21b43220b33220b4326a21b53220b43220b5326a21b63220b53220b6326a21b732" + "20b63220b7326a21b83220b73220b8326a21b93220b83220b9326a21ba3220b93220ba326a21bb3220ba3220bb326a" + "21bc3220bb3220bc326a21bd3220bc3220bd326a21be3220bd3220be326a21bf3220be3220bf326a21c03220bf3220" "c0326a21c13220c03220c1326a21c23220c13220c2326a21c33220c23220c3326a21c43220c33220c4326a21c53220" - "c43220c5326a21c63220" - "c53220c6326a21c73220c63220c7326a21c83220c73220c8326a21c93220c83220c9326a21ca3220c93220ca326a21" - "cb3220ca3220cb326a21" - "cc3220cb3220cc326a21cd3220cc3220cd326a21ce3220cd3220ce326a21cf3220ce3220cf326a21d03220cf3220d0" - "326a21d13220d03220d1" - "326a21d23220d13220d2326a21d33220d23220d3326a21d43220d33220d4326a21d53220d43220d5326a21d63220d5" - "3220d6326a21d73220d6" - "3220d7326a21d83220d73220d8326a21d93220d83220d9326a21da3220d93220da326a21db3220da3220db326a21dc" - "3220db3220dc326a21dd" - "3220dc3220dd326a21de3220dd3220de326a21df3220de3220df326a21e03220df3220e0326a21e13220e03220e132" - "6a21e23220e13220e232" - "6a21e33220e23220e3326a21e43220e33220e4326a21e53220e43220e5326a21e63220e53220e6326a21e73220e632" - "20e7326a21e83220e732" - "20e8326a21e93220e83220e9326a21ea3220e93220ea326a21eb3220ea3220eb326a21ec3220eb3220ec326a21ed32" - "20ec3220ed326a21ee32" - "20ed3220ee326a21ef3220ee3220ef326a21f03220ef3220f0326a21f13220f03220f1326a21f23220f13220f2326a" - "21f33220f23220f3326a" - "21f43220f33220f4326a21f53220f43220f5326a21f63220f53220f6326a21f73220f63220f7326a21f83220f73220" - "f8326a21f93220f83220" - "f9326a21fa3220f93220fa326a21fb3220fa3220fb326a21fc3220fb3220fc326a21fd3220fc3220fd326a21fe3220" - "fd3220fe326a21ff3220" - "fe3220ff326a21803320ff322080336a2181332080332081336a2182332081332082336a2183332082332083336a21" - "84332083332084336a21" - "85332084332085336a2186332085332086336a2187332086332087336a2188332087332088336a2189332088332089" - "336a218a33208933208a" - "336a218b33208a33208b336a218c33208b33208c336a218d33208c33208d336a218e33208d33208e336a218f33208e" - "33208f336a219033208f" - "332090336a2191332090332091336a2192332091332092336a2193332092332093336a2194332093332094336a2195" - "332094332095336a2196" - "332095332096336a2197332096332097336a2198332097332098336a2199332098332099336a219a33209933209a33" - "6a219b33209a33209b33" - "6a219c33209b33209c336a219d33209c33209d336a219e33209d33209e336a219f33209e33209f336a21a033209f33" - "20a0336a21a13320a033" - "20a1336a21a23320a13320a2336a21a33320a23320a3336a21a43320a33320a4336a21a53320a43320a5336a21a633" - "20a53320a6336a21a733" - "20a63320a7336a21a83320a73320a8336a21a93320a83320a9336a21aa3320a93320aa336a21ab3320aa3320ab336a" - "21ac3320ab3320ac336a" - "21ad3320ac3320ad336a21ae3320ad3320ae336a21af3320ae3320af336a21b03320af3320b0336a21b13320b03320" - "b1336a21b23320b13320" - "b2336a21b33320b23320b3336a21b43320b33320b4336a21b53320b43320b5336a21b63320b53320b6336a21b73320" - "b63320b7336a21b83320" - "b73320b8336a21b93320b83320b9336a21ba3320b93320ba336a21bb3320ba3320bb336a21bc3320bb3320bc336a21" - "bd3320bc3320bd336a21" - "be3320bd3320be336a21bf3320be3320bf336a21c03320bf3320c0336a21c13320c03320c1336a21c23320c13320c2" - "336a21c33320c23320c3" - "336a21c43320c33320c4336a21c53320c43320c5336a21c63320c53320c6336a21c73320c63320c7336a21c83320c7" - "3320c8336a21c93320c8" - "3320c9336a21ca3320c93320ca336a21cb3320ca3320cb336a21cc3320cb3320cc336a21cd3320cc3320cd336a21ce" - "3320cd3320ce336a21cf" - "3320ce3320cf336a21d03320cf3320d0336a21d13320d03320d1336a21d23320d13320d2336a21d33320d23320d333" - "6a21d43320d33320d433" - "6a21d53320d43320d5336a21d63320d53320d6336a21d73320d63320d7336a21d83320d73320d8336a21d93320d833" - "20d9336a21da3320d933" - "20da336a21db3320da3320db336a21dc3320db3320dc336a21dd3320dc3320dd336a21de3320dd3320de336a21df33" - "20de3320df336a21e033" - "20df3320e0336a21e13320e03320e1336a21e23320e13320e2336a21e33320e23320e3336a21e43320e33320e4336a" - "21e53320e43320e5336a" - "21e63320e53320e6336a21e73320e63320e7336a21e83320e73320e8336a21e93320e83320e9336a21ea3320e93320" - "ea336a21eb3320ea3320" - "eb336a21ec3320eb3320ec336a21ed3320ec3320ed336a21ee3320ed3320ee336a21ef3320ee3320ef336a21f03320" - "ef3320f0336a21f13320" - "f03320f1336a21f23320f13320f2336a21f33320f23320f3336a21f43320f33320f4336a21f53320f43320f5336a21" - "f63320f53320f6336a21" - "f73320f63320f7336a21f83320f73320f8336a21f93320f83320f9336a21fa3320f93320fa336a21fb3320fa3320fb" - "336a21fc3320fb3320fc" - "336a21fd3320fc3320fd336a21fe3320fd3320fe336a21ff3320fe3320ff336a21803420ff332080346a2181342080" - "342081346a2182342081" - "342082346a2183342082342083346a2184342083342084346a2185342084342085346a2186342085342086346a2187" - "342086342087346a2188" - "342087342088346a2189342088342089346a218a34208934208a346a218b34208a34208b346a218c34208b34208c34" - "6a218d34208c34208d34" - "6a218e34208d34208e346a218f34208e34208f346a219034208f342090346a2191342090342091346a219234209134" - "2092346a219334209234" - "2093346a2194342093342094346a2195342094342095346a2196342095342096346a2197342096342097346a219834" - "2097342098346a219934" - "2098342099346a219a34209934209a346a219b34209a34209b346a219c34209b34209c346a219d34209c34209d346a" - "219e34209d34209e346a" - "219f34209e34209f346a21a034209f3420a0346a21a13420a03420a1346a21a23420a13420a2346a21a33420a23420" - "a3346a21a43420a33420" - "a4346a21a53420a43420a5346a21a63420a53420a6346a21a73420a63420a7346a21a83420a73420a8346a21a93420" - "a83420a9346a21aa3420" - "a93420aa346a21ab3420aa3420ab346a21ac3420ab3420ac346a21ad3420ac3420ad346a21ae3420ad3420ae346a21" - "af3420ae3420af346a21" - "b03420af3420b0346a21b13420b03420b1346a21b23420b13420b2346a21b33420b23420b3346a21b43420b33420b4" - "346a21b53420b43420b5" - "346a21b63420b53420b6346a21b73420b63420b7346a21b83420b73420b8346a21b93420b83420b9346a21ba3420b9" - "3420ba346a21bb3420ba" - "3420bb346a21bc3420bb3420bc346a21bd3420bc3420bd346a21be3420bd3420be346a21bf3420be3420bf346a21c0" - "3420bf3420c0346a21c1" - "3420c03420c1346a21c23420c13420c2346a21c33420c23420c3346a21c43420c33420c4346a21c53420c43420c534" - "6a21c63420c53420c634" - "6a21c73420c63420c7346a21c83420c73420c8346a21c93420c83420c9346a21ca3420c93420ca346a21cb3420ca34" - "20cb346a21cc3420cb34" + "c43220c5326a21c63220c53220c6326a21c73220c63220c7326a21c83220c73220c8326a21c93220c83220c9326a21" + "ca3220c93220ca326a21cb3220ca3220cb326a21cc3220cb3220cc326a21cd3220cc3220cd326a21ce3220cd3220ce" + "326a21cf3220ce3220cf326a21d03220cf3220d0326a21d13220d03220d1326a21d23220d13220d2326a21d33220d2" + "3220d3326a21d43220d33220d4326a21d53220d43220d5326a21d63220d53220d6326a21d73220d63220d7326a21d8" + "3220d73220d8326a21d93220d83220d9326a21da3220d93220da326a21db3220da3220db326a21dc3220db3220dc32" + "6a21dd3220dc3220dd326a21de3220dd3220de326a21df3220de3220df326a21e03220df3220e0326a21e13220e032" + "20e1326a21e23220e13220e2326a21e33220e23220e3326a21e43220e33220e4326a21e53220e43220e5326a21e632" + "20e53220e6326a21e73220e63220e7326a21e83220e73220e8326a21e93220e83220e9326a21ea3220e93220ea326a" + "21eb3220ea3220eb326a21ec3220eb3220ec326a21ed3220ec3220ed326a21ee3220ed3220ee326a21ef3220ee3220" + "ef326a21f03220ef3220f0326a21f13220f03220f1326a21f23220f13220f2326a21f33220f23220f3326a21f43220" + "f33220f4326a21f53220f43220f5326a21f63220f53220f6326a21f73220f63220f7326a21f83220f73220f8326a21" + "f93220f83220f9326a21fa3220f93220fa326a21fb3220fa3220fb326a21fc3220fb3220fc326a21fd3220fc3220fd" + "326a21fe3220fd3220fe326a21ff3220fe3220ff326a21803320ff322080336a2181332080332081336a2182332081" + "332082336a2183332082332083336a2184332083332084336a2185332084332085336a2186332085332086336a2187" + "332086332087336a2188332087332088336a2189332088332089336a218a33208933208a336a218b33208a33208b33" + "6a218c33208b33208c336a218d33208c33208d336a218e33208d33208e336a218f33208e33208f336a219033208f33" + "2090336a2191332090332091336a2192332091332092336a2193332092332093336a2194332093332094336a219533" + "2094332095336a2196332095332096336a2197332096332097336a2198332097332098336a2199332098332099336a" + "219a33209933209a336a219b33209a33209b336a219c33209b33209c336a219d33209c33209d336a219e33209d3320" + "9e336a219f33209e33209f336a21a033209f3320a0336a21a13320a03320a1336a21a23320a13320a2336a21a33320" + "a23320a3336a21a43320a33320a4336a21a53320a43320a5336a21a63320a53320a6336a21a73320a63320a7336a21" + "a83320a73320a8336a21a93320a83320a9336a21aa3320a93320aa336a21ab3320aa3320ab336a21ac3320ab3320ac" + "336a21ad3320ac3320ad336a21ae3320ad3320ae336a21af3320ae3320af336a21b03320af3320b0336a21b13320b0" + "3320b1336a21b23320b13320b2336a21b33320b23320b3336a21b43320b33320b4336a21b53320b43320b5336a21b6" + "3320b53320b6336a21b73320b63320b7336a21b83320b73320b8336a21b93320b83320b9336a21ba3320b93320ba33" + "6a21bb3320ba3320bb336a21bc3320bb3320bc336a21bd3320bc3320bd336a21be3320bd3320be336a21bf3320be33" + "20bf336a21c03320bf3320c0336a21c13320c03320c1336a21c23320c13320c2336a21c33320c23320c3336a21c433" + "20c33320c4336a21c53320c43320c5336a21c63320c53320c6336a21c73320c63320c7336a21c83320c73320c8336a" + "21c93320c83320c9336a21ca3320c93320ca336a21cb3320ca3320cb336a21cc3320cb3320cc336a21cd3320cc3320" + "cd336a21ce3320cd3320ce336a21cf3320ce3320cf336a21d03320cf3320d0336a21d13320d03320d1336a21d23320" + "d13320d2336a21d33320d23320d3336a21d43320d33320d4336a21d53320d43320d5336a21d63320d53320d6336a21" + "d73320d63320d7336a21d83320d73320d8336a21d93320d83320d9336a21da3320d93320da336a21db3320da3320db" + "336a21dc3320db3320dc336a21dd3320dc3320dd336a21de3320dd3320de336a21df3320de3320df336a21e03320df" + "3320e0336a21e13320e03320e1336a21e23320e13320e2336a21e33320e23320e3336a21e43320e33320e4336a21e5" + "3320e43320e5336a21e63320e53320e6336a21e73320e63320e7336a21e83320e73320e8336a21e93320e83320e933" + "6a21ea3320e93320ea336a21eb3320ea3320eb336a21ec3320eb3320ec336a21ed3320ec3320ed336a21ee3320ed33" + "20ee336a21ef3320ee3320ef336a21f03320ef3320f0336a21f13320f03320f1336a21f23320f13320f2336a21f333" + "20f23320f3336a21f43320f33320f4336a21f53320f43320f5336a21f63320f53320f6336a21f73320f63320f7336a" + "21f83320f73320f8336a21f93320f83320f9336a21fa3320f93320fa336a21fb3320fa3320fb336a21fc3320fb3320" + "fc336a21fd3320fc3320fd336a21fe3320fd3320fe336a21ff3320fe3320ff336a21803420ff332080346a21813420" + "80342081346a2182342081342082346a2183342082342083346a2184342083342084346a2185342084342085346a21" + "86342085342086346a2187342086342087346a2188342087342088346a2189342088342089346a218a34208934208a" + "346a218b34208a34208b346a218c34208b34208c346a218d34208c34208d346a218e34208d34208e346a218f34208e" + "34208f346a219034208f342090346a2191342090342091346a2192342091342092346a2193342092342093346a2194" + "342093342094346a2195342094342095346a2196342095342096346a2197342096342097346a219834209734209834" + "6a2199342098342099346a219a34209934209a346a219b34209a34209b346a219c34209b34209c346a219d34209c34" + "209d346a219e34209d34209e346a219f34209e34209f346a21a034209f3420a0346a21a13420a03420a1346a21a234" + "20a13420a2346a21a33420a23420a3346a21a43420a33420a4346a21a53420a43420a5346a21a63420a53420a6346a" + "21a73420a63420a7346a21a83420a73420a8346a21a93420a83420a9346a21aa3420a93420aa346a21ab3420aa3420" + "ab346a21ac3420ab3420ac346a21ad3420ac3420ad346a21ae3420ad3420ae346a21af3420ae3420af346a21b03420" + "af3420b0346a21b13420b03420b1346a21b23420b13420b2346a21b33420b23420b3346a21b43420b33420b4346a21" + "b53420b43420b5346a21b63420b53420b6346a21b73420b63420b7346a21b83420b73420b8346a21b93420b83420b9" + "346a21ba3420b93420ba346a21bb3420ba3420bb346a21bc3420bb3420bc346a21bd3420bc3420bd346a21be3420bd" + "3420be346a21bf3420be3420bf346a21c03420bf3420c0346a21c13420c03420c1346a21c23420c13420c2346a21c3" + "3420c23420c3346a21c43420c33420c4346a21c53420c43420c5346a21c63420c53420c6346a21c73420c63420c734" + "6a21c83420c73420c8346a21c93420c83420c9346a21ca3420c93420ca346a21cb3420ca3420cb346a21cc3420cb34" "20cc346a21cd3420cc3420cd346a21ce3420cd3420ce346a21cf3420ce3420cf346a21d03420cf3420d0346a21d134" - "20d03420d1346a21d234" - "20d13420d2346a21d33420d23420d3346a21d43420d33420d4346a21d53420d43420d5346a21d63420d53420d6346a" - "21d73420d63420d7346a" - "21d83420d73420d8346a21d93420d83420d9346a21da3420d93420da346a21db3420da3420db346a21dc3420db3420" - "dc346a21dd3420dc3420" - "dd346a21de3420dd3420de346a21df3420de3420df346a21e03420df3420e0346a21e13420e03420e1346a21e23420" - "e13420e2346a21e33420" - "e23420e3346a21e43420e33420e4346a21e53420e43420e5346a21e63420e53420e6346a21e73420e63420e7346a21" - "e83420e73420e8346a21" - "e93420e83420e9346a21ea3420e93420ea346a21eb3420ea3420eb346a21ec3420eb3420ec346a21ed3420ec3420ed" - "346a21ee3420ed3420ee" - "346a21ef3420ee3420ef346a21f03420ef3420f0346a21f13420f03420f1346a21f23420f13420f2346a21f33420f2" - "3420f3346a21f43420f3" - "3420f4346a21f53420f43420f5346a21f63420f53420f6346a21f73420f63420f7346a21f83420f73420f8346a21f9" - "3420f83420f9346a21fa" - "3420f93420fa346a21fb3420fa3420fb346a21fc3420fb3420fc346a21fd3420fc3420fd346a21fe3420fd3420fe34" - "6a21ff3420fe3420ff34" - "6a21803520ff342080356a2181352080352081356a2182352081352082356a2183352082352083356a218435208335" - "2084356a218535208435" - "2085356a2186352085352086356a2187352086352087356a2188352087352088356a2189352088352089356a218a35" - "208935208a356a218b35" - "208a35208b356a218c35208b35208c356a218d35208c35208d356a218e35208d35208e356a218f35208e35208f356a" - "219035208f352090356a" - "2191352090352091356a2192352091352092356a2193352092352093356a2194352093352094356a21953520943520" - "95356a21963520953520" - "96356a2197352096352097356a2198352097352098356a2199352098352099356a219a35209935209a356a219b3520" - "9a35209b356a219c3520" - "9b35209c356a219d35209c35209d356a219e35209d35209e356a219f35209e35209f356a21a035209f3520a0356a21" - "a13520a03520a1356a21" - "a23520a13520a2356a21a33520a23520a3356a21a43520a33520a4356a21a53520a43520a5356a21a63520a53520a6" - "356a21a73520a63520a7" - "356a21a83520a73520a8356a21a93520a83520a9356a21aa3520a93520aa356a21ab3520aa3520ab356a21ac3520ab" - "3520ac356a21ad3520ac" - "3520ad356a21ae3520ad3520ae356a21af3520ae3520af356a21b03520af3520b0356a21b13520b03520b1356a21b2" - "3520b13520b2356a21b3" - "3520b23520b3356a21b43520b33520b4356a21b53520b43520b5356a21b63520b53520b6356a21b73520b63520b735" - "6a21b83520b73520b835" - "6a21b93520b83520b9356a21ba3520b93520ba356a21bb3520ba3520bb356a21bc3520bb3520bc356a21bd3520bc35" - "20bd356a21be3520bd35" - "20be356a21bf3520be3520bf356a21c03520bf3520c0356a21c13520c03520c1356a21c23520c13520c2356a21c335" - "20c23520c3356a21c435" - "20c33520c4356a21c53520c43520c5356a21c63520c53520c6356a21c73520c63520c7356a21c83520c73520c8356a" - "21c93520c83520c9356a" - "21ca3520c93520ca356a21cb3520ca3520cb356a21cc3520cb3520cc356a21cd3520cc3520cd356a21ce3520cd3520" - "ce356a21cf3520ce3520" - "cf356a21d03520cf3520d0356a21d13520d03520d1356a21d23520d13520d2356a21d33520d23520d3356a21d43520" - "d33520d4356a21d53520" - "d43520d5356a21d63520d53520d6356a21d73520d63520d7356a21d83520d73520d8356a21d93520d83520d9356a21" - "da3520d93520da356a21" - "db3520da3520db356a21dc3520db3520dc356a21dd3520dc3520dd356a21de3520dd3520de356a21df3520de3520df" - "356a21e03520df3520e0" - "356a21e13520e03520e1356a21e23520e13520e2356a21e33520e23520e3356a21e43520e33520e4356a21e53520e4" - "3520e5356a21e63520e5" - "3520e6356a21e73520e63520e7356a21e83520e73520e8356a21e93520e83520e9356a21ea3520e93520ea356a21eb" - "3520ea3520eb356a21ec" - "3520eb3520ec356a21ed3520ec3520ed356a21ee3520ed3520ee356a21ef3520ee3520ef356a21f03520ef3520f035" - "6a21f13520f03520f135" - "6a21f23520f13520f2356a21f33520f23520f3356a21f43520f33520f4356a21f53520f43520f5356a21f63520f535" - "20f6356a21f73520f635" - "20f7356a21f83520f73520f8356a21f93520f83520f9356a21fa3520f93520fa356a21fb3520fa3520fb356a21fc35" - "20fb3520fc356a21fd35" - "20fc3520fd356a21fe3520fd3520fe356a21ff3520fe3520ff356a21803620ff352080366a2181362080362081366a" - "2182362081362082366a" - "2183362082362083366a2184362083362084366a2185362084362085366a2186362085362086366a21873620863620" - "87366a21883620873620" - "88366a2189362088362089366a218a36208936208a366a218b36208a36208b366a218c36208b36208c366a218d3620" - "8c36208d366a218e3620" - "8d36208e366a218f36208e36208f366a219036208f362090366a2191362090362091366a2192362091362092366a21" - "93362092362093366a21" - "94362093362094366a2195362094362095366a2196362095362096366a2197362096362097366a2198362097362098" - "366a2199362098362099" - "366a219a36209936209a366a219b36209a36209b366a219c36209b36209c366a219d36209c36209d366a219e36209d" - "36209e366a219f36209e" - "36209f366a21a036209f3620a0366a21a13620a03620a1366a21a23620a13620a2366a21a33620a23620a3366a21a4" - "3620a33620a4366a21a5" - "3620a43620a5366a21a63620a53620a6366a21a73620a63620a7366a21a83620a73620a8366a21a93620a83620a936" - "6a21aa3620a93620aa36" - "6a21ab3620aa3620ab366a21ac3620ab3620ac366a21ad3620ac3620ad366a21ae3620ad3620ae366a21af3620ae36" - "20af366a21b03620af36" - "20b0366a21b13620b03620b1366a21b23620b13620b2366a21b33620b23620b3366a21b43620b33620b4366a21b536" - "20b43620b5366a21b636" - "20b53620b6366a21b73620b63620b7366a21b83620b73620b8366a21b93620b83620b9366a21ba3620b93620ba366a" - "21bb3620ba3620bb366a" - "21bc3620bb3620bc366a21bd3620bc3620bd366a21be3620bd3620be366a21bf3620be3620bf366a21c03620bf3620" - "c0366a21c13620c03620" - "c1366a21c23620c13620c2366a21c33620c23620c3366a21c43620c33620c4366a21c53620c43620c5366a21c63620" - "c53620c6366a21c73620" - "c63620c7366a21c83620c73620c8366a21c93620c83620c9366a21ca3620c93620ca366a21cb3620ca3620cb366a21" - "cc3620cb3620cc366a21" - "cd3620cc3620cd366a21ce3620cd3620ce366a21cf3620ce3620cf366a21d03620cf3620d0366a21d13620d03620d1" - "366a21d23620d13620d2" - "366a21d33620d23620d3366a21d43620d33620d4366a21d53620d43620d5366a21d63620d53620d6366a21d73620d6" - "3620d7366a21d83620d7" + "20d03420d1346a21d23420d13420d2346a21d33420d23420d3346a21d43420d33420d4346a21d53420d43420d5346a" + "21d63420d53420d6346a21d73420d63420d7346a21d83420d73420d8346a21d93420d83420d9346a21da3420d93420" + "da346a21db3420da3420db346a21dc3420db3420dc346a21dd3420dc3420dd346a21de3420dd3420de346a21df3420" + "de3420df346a21e03420df3420e0346a21e13420e03420e1346a21e23420e13420e2346a21e33420e23420e3346a21" + "e43420e33420e4346a21e53420e43420e5346a21e63420e53420e6346a21e73420e63420e7346a21e83420e73420e8" + "346a21e93420e83420e9346a21ea3420e93420ea346a21eb3420ea3420eb346a21ec3420eb3420ec346a21ed3420ec" + "3420ed346a21ee3420ed3420ee346a21ef3420ee3420ef346a21f03420ef3420f0346a21f13420f03420f1346a21f2" + "3420f13420f2346a21f33420f23420f3346a21f43420f33420f4346a21f53420f43420f5346a21f63420f53420f634" + "6a21f73420f63420f7346a21f83420f73420f8346a21f93420f83420f9346a21fa3420f93420fa346a21fb3420fa34" + "20fb346a21fc3420fb3420fc346a21fd3420fc3420fd346a21fe3420fd3420fe346a21ff3420fe3420ff346a218035" + "20ff342080356a2181352080352081356a2182352081352082356a2183352082352083356a2184352083352084356a" + "2185352084352085356a2186352085352086356a2187352086352087356a2188352087352088356a21893520883520" + "89356a218a35208935208a356a218b35208a35208b356a218c35208b35208c356a218d35208c35208d356a218e3520" + "8d35208e356a218f35208e35208f356a219035208f352090356a2191352090352091356a2192352091352092356a21" + "93352092352093356a2194352093352094356a2195352094352095356a2196352095352096356a2197352096352097" + "356a2198352097352098356a2199352098352099356a219a35209935209a356a219b35209a35209b356a219c35209b" + "35209c356a219d35209c35209d356a219e35209d35209e356a219f35209e35209f356a21a035209f3520a0356a21a1" + "3520a03520a1356a21a23520a13520a2356a21a33520a23520a3356a21a43520a33520a4356a21a53520a43520a535" + "6a21a63520a53520a6356a21a73520a63520a7356a21a83520a73520a8356a21a93520a83520a9356a21aa3520a935" + "20aa356a21ab3520aa3520ab356a21ac3520ab3520ac356a21ad3520ac3520ad356a21ae3520ad3520ae356a21af35" + "20ae3520af356a21b03520af3520b0356a21b13520b03520b1356a21b23520b13520b2356a21b33520b23520b3356a" + "21b43520b33520b4356a21b53520b43520b5356a21b63520b53520b6356a21b73520b63520b7356a21b83520b73520" + "b8356a21b93520b83520b9356a21ba3520b93520ba356a21bb3520ba3520bb356a21bc3520bb3520bc356a21bd3520" + "bc3520bd356a21be3520bd3520be356a21bf3520be3520bf356a21c03520bf3520c0356a21c13520c03520c1356a21" + "c23520c13520c2356a21c33520c23520c3356a21c43520c33520c4356a21c53520c43520c5356a21c63520c53520c6" + "356a21c73520c63520c7356a21c83520c73520c8356a21c93520c83520c9356a21ca3520c93520ca356a21cb3520ca" + "3520cb356a21cc3520cb3520cc356a21cd3520cc3520cd356a21ce3520cd3520ce356a21cf3520ce3520cf356a21d0" + "3520cf3520d0356a21d13520d03520d1356a21d23520d13520d2356a21d33520d23520d3356a21d43520d33520d435" + "6a21d53520d43520d5356a21d63520d53520d6356a21d73520d63520d7356a21d83520d73520d8356a21d93520d835" + "20d9356a21da3520d93520da356a21db3520da3520db356a21dc3520db3520dc356a21dd3520dc3520dd356a21de35" + "20dd3520de356a21df3520de3520df356a21e03520df3520e0356a21e13520e03520e1356a21e23520e13520e2356a" + "21e33520e23520e3356a21e43520e33520e4356a21e53520e43520e5356a21e63520e53520e6356a21e73520e63520" + "e7356a21e83520e73520e8356a21e93520e83520e9356a21ea3520e93520ea356a21eb3520ea3520eb356a21ec3520" + "eb3520ec356a21ed3520ec3520ed356a21ee3520ed3520ee356a21ef3520ee3520ef356a21f03520ef3520f0356a21" + "f13520f03520f1356a21f23520f13520f2356a21f33520f23520f3356a21f43520f33520f4356a21f53520f43520f5" + "356a21f63520f53520f6356a21f73520f63520f7356a21f83520f73520f8356a21f93520f83520f9356a21fa3520f9" + "3520fa356a21fb3520fa3520fb356a21fc3520fb3520fc356a21fd3520fc3520fd356a21fe3520fd3520fe356a21ff" + "3520fe3520ff356a21803620ff352080366a2181362080362081366a2182362081362082366a218336208236208336" + "6a2184362083362084366a2185362084362085366a2186362085362086366a2187362086362087366a218836208736" + "2088366a2189362088362089366a218a36208936208a366a218b36208a36208b366a218c36208b36208c366a218d36" + "208c36208d366a218e36208d36208e366a218f36208e36208f366a219036208f362090366a2191362090362091366a" + "2192362091362092366a2193362092362093366a2194362093362094366a2195362094362095366a21963620953620" + "96366a2197362096362097366a2198362097362098366a2199362098362099366a219a36209936209a366a219b3620" + "9a36209b366a219c36209b36209c366a219d36209c36209d366a219e36209d36209e366a219f36209e36209f366a21" + "a036209f3620a0366a21a13620a03620a1366a21a23620a13620a2366a21a33620a23620a3366a21a43620a33620a4" + "366a21a53620a43620a5366a21a63620a53620a6366a21a73620a63620a7366a21a83620a73620a8366a21a93620a8" + "3620a9366a21aa3620a93620aa366a21ab3620aa3620ab366a21ac3620ab3620ac366a21ad3620ac3620ad366a21ae" + "3620ad3620ae366a21af3620ae3620af366a21b03620af3620b0366a21b13620b03620b1366a21b23620b13620b236" + "6a21b33620b23620b3366a21b43620b33620b4366a21b53620b43620b5366a21b63620b53620b6366a21b73620b636" + "20b7366a21b83620b73620b8366a21b93620b83620b9366a21ba3620b93620ba366a21bb3620ba3620bb366a21bc36" + "20bb3620bc366a21bd3620bc3620bd366a21be3620bd3620be366a21bf3620be3620bf366a21c03620bf3620c0366a" + "21c13620c03620c1366a21c23620c13620c2366a21c33620c23620c3366a21c43620c33620c4366a21c53620c43620" + "c5366a21c63620c53620c6366a21c73620c63620c7366a21c83620c73620c8366a21c93620c83620c9366a21ca3620" + "c93620ca366a21cb3620ca3620cb366a21cc3620cb3620cc366a21cd3620cc3620cd366a21ce3620cd3620ce366a21" + "cf3620ce3620cf366a21d03620cf3620d0366a21d13620d03620d1366a21d23620d13620d2366a21d33620d23620d3" + "366a21d43620d33620d4366a21d53620d43620d5366a21d63620d53620d6366a21d73620d63620d7366a21d83620d7" "3620d8366a21d93620d83620d9366a21da3620d93620da366a21db3620da3620db366a21dc3620db3620dc366a21dd" - "3620dc3620dd366a21de" - "3620dd3620de366a21df3620de3620df366a21e03620df3620e0366a21e13620e03620e1366a21e23620e13620e236" - "6a21e33620e23620e336" - "6a21e43620e33620e4366a21e53620e43620e5366a21e63620e53620e6366a21e73620e63620e7366a21e83620e736" - "20e8366a21e93620e836" - "20e9366a21ea3620e93620ea366a21eb3620ea3620eb366a21ec3620eb3620ec366a21ed3620ec3620ed366a21ee36" - "20ed3620ee366a21ef36" - "20ee3620ef366a21f03620ef3620f0366a21f13620f03620f1366a21f23620f13620f2366a21f33620f23620f3366a" - "21f43620f33620f4366a" - "21f53620f43620f5366a21f63620f53620f6366a21f73620f63620f7366a21f83620f73620f8366a21f93620f83620" - "f9366a21fa3620f93620" - "fa366a21fb3620fa3620fb366a21fc3620fb3620fc366a21fd3620fc3620fd366a21fe3620fd3620fe366a21ff3620" - "fe3620ff366a21803720" - "ff362080376a2181372080372081376a2182372081372082376a2183372082372083376a2184372083372084376a21" - "85372084372085376a21" - "86372085372086376a2187372086372087376a2188372087372088376a2189372088372089376a218a37208937208a" - "376a218b37208a37208b" - "376a218c37208b37208c376a218d37208c37208d376a218e37208d37208e376a218f37208e37208f376a219037208f" - "372090376a2191372090" - "372091376a2192372091372092376a2193372092372093376a2194372093372094376a2195372094372095376a2196" - "372095372096376a2197" - "372096372097376a2198372097372098376a2199372098372099376a219a37209937209a376a219b37209a37209b37" - "6a219c37209b37209c37" - "6a219d37209c37209d376a219e37209d37209e376a219f37209e37209f376a21a037209f3720a0376a21a13720a037" - "20a1376a21a23720a137" - "20a2376a21a33720a23720a3376a21a43720a33720a4376a21a53720a43720a5376a21a63720a53720a6376a21a737" - "20a63720a7376a21a837" - "20a73720a8376a21a93720a83720a9376a21aa3720a93720aa376a21ab3720aa3720ab376a21ac3720ab3720ac376a" - "21ad3720ac3720ad376a" - "21ae3720ad3720ae376a21af3720ae3720af376a21b03720af3720b0376a21b13720b03720b1376a21b23720b13720" - "b2376a21b33720b23720" - "b3376a21b43720b33720b4376a21b53720b43720b5376a21b63720b53720b6376a21b73720b63720b7376a21b83720" - "b73720b8376a21b93720" - "b83720b9376a21ba3720b93720ba376a21bb3720ba3720bb376a21bc3720bb3720bc376a21bd3720bc3720bd376a21" - "be3720bd3720be376a21" - "bf3720be3720bf376a21c03720bf3720c0376a21c13720c03720c1376a21c23720c13720c2376a21c33720c23720c3" - "376a21c43720c33720c4" - "376a21c53720c43720c5376a21c63720c53720c6376a21c73720c63720c7376a21c83720c73720c8376a21c93720c8" - "3720c9376a21ca3720c9" - "3720ca376a21cb3720ca3720cb376a21cc3720cb3720cc376a21cd3720cc3720cd376a21ce3720cd3720ce376a21cf" - "3720ce3720cf376a21d0" - "3720cf3720d0376a21d13720d03720d1376a21d23720d13720d2376a21d33720d23720d3376a21d43720d33720d437" - "6a21d53720d43720d537" - "6a21d63720d53720d6376a21d73720d63720d7376a21d83720d73720d8376a21d93720d83720d9376a21da3720d937" - "20da376a21db3720da37" - "20db376a21dc3720db3720dc376a21dd3720dc3720dd376a21de3720dd3720de376a21df3720de3720df376a21e037" - "20df3720e0376a21e137" - "20e03720e1376a21e23720e13720e2376a21e33720e23720e3376a21e43720e33720e4376a21e53720e43720e5376a" - "21e63720e53720e6376a" - "21e73720e63720e7376a21e83720e73720e8376a21e93720e83720e9376a21ea3720e93720ea376a21eb3720ea3720" - "eb376a21ec3720eb3720" - "ec376a21ed3720ec3720ed376a21ee3720ed3720ee376a21ef3720ee3720ef376a21f03720ef3720f0376a21f13720" - "f03720f1376a21f23720" - "f13720f2376a21f33720f23720f3376a21f43720f33720f4376a21f53720f43720f5376a21f63720f53720f6376a21" - "f73720f63720f7376a21" - "f83720f73720f8376a21f93720f83720f9376a21fa3720f93720fa376a21fb3720fa3720fb376a21fc3720fb3720fc" - "376a21fd3720fc3720fd" - "376a21fe3720fd3720fe376a21ff3720fe3720ff376a21803820ff372080386a2181382080382081386a2182382081" - "382082386a2183382082" - "382083386a2184382083382084386a2185382084382085386a2186382085382086386a2187382086382087386a2188" - "382087382088386a2189" - "382088382089386a218a38208938208a386a218b38208a38208b386a218c38208b38208c386a218d38208c38208d38" - "6a218e38208d38208e38" - "6a218f38208e38208f386a219038208f382090386a2191382090382091386a2192382091382092386a219338209238" - "2093386a219438209338" - "2094386a2195382094382095386a2196382095382096386a2197382096382097386a2198382097382098386a219938" - "2098382099386a219a38" - "209938209a386a219b38209a38209b386a219c38209b38209c386a219d38209c38209d386a219e38209d38209e386a" - "219f38209e38209f386a" - "21a038209f3820a0386a21a13820a03820a1386a21a23820a13820a2386a21a33820a23820a3386a21a43820a33820" - "a4386a21a53820a43820" - "a5386a21a63820a53820a6386a21a73820a63820a7386a21a83820a73820a8386a21a93820a83820a9386a21aa3820" - "a93820aa386a21ab3820" - "aa3820ab386a21ac3820ab3820ac386a21ad3820ac3820ad386a21ae3820ad3820ae386a21af3820ae3820af386a21" - "b03820af3820b0386a21" - "b13820b03820b1386a21b23820b13820b2386a21b33820b23820b3386a21b43820b33820b4386a21b53820b43820b5" - "386a21b63820b53820b6" - "386a21b73820b63820b7386a21b83820b73820b8386a21b93820b83820b9386a21ba3820b93820ba386a21bb3820ba" - "3820bb386a21bc3820bb" - "3820bc386a21bd3820bc3820bd386a21be3820bd3820be386a21bf3820be3820bf386a21c03820bf3820c0386a21c1" - "3820c03820c1386a21c2" - "3820c13820c2386a21c33820c23820c3386a21c43820c33820c4386a21c53820c43820c5386a21c63820c53820c638" - "6a21c73820c63820c738" - "6a21c83820c73820c8386a21c93820c83820c9386a21ca3820c93820ca386a21cb3820ca3820cb386a21cc3820cb38" - "20cc386a21cd3820cc38" - "20cd386a21ce3820cd3820ce386a21cf3820ce3820cf386a21d03820cf3820d0386a21d13820d03820d1386a21d238" - "20d13820d2386a21d338" - "20d23820d3386a21d43820d33820d4386a21d53820d43820d5386a21d63820d53820d6386a21d73820d63820d7386a" - "21d83820d73820d8386a" - "21d93820d83820d9386a21da3820d93820da386a21db3820da3820db386a21dc3820db3820dc386a21dd3820dc3820" - "dd386a21de3820dd3820" - "de386a21df3820de3820df386a21e03820df3820e0386a21e13820e03820e1386a21e23820e13820e2386a21e33820" - "e23820e3386a21e43820" + "3620dc3620dd366a21de3620dd3620de366a21df3620de3620df366a21e03620df3620e0366a21e13620e03620e136" + "6a21e23620e13620e2366a21e33620e23620e3366a21e43620e33620e4366a21e53620e43620e5366a21e63620e536" + "20e6366a21e73620e63620e7366a21e83620e73620e8366a21e93620e83620e9366a21ea3620e93620ea366a21eb36" + "20ea3620eb366a21ec3620eb3620ec366a21ed3620ec3620ed366a21ee3620ed3620ee366a21ef3620ee3620ef366a" + "21f03620ef3620f0366a21f13620f03620f1366a21f23620f13620f2366a21f33620f23620f3366a21f43620f33620" + "f4366a21f53620f43620f5366a21f63620f53620f6366a21f73620f63620f7366a21f83620f73620f8366a21f93620" + "f83620f9366a21fa3620f93620fa366a21fb3620fa3620fb366a21fc3620fb3620fc366a21fd3620fc3620fd366a21" + "fe3620fd3620fe366a21ff3620fe3620ff366a21803720ff362080376a2181372080372081376a2182372081372082" + "376a2183372082372083376a2184372083372084376a2185372084372085376a2186372085372086376a2187372086" + "372087376a2188372087372088376a2189372088372089376a218a37208937208a376a218b37208a37208b376a218c" + "37208b37208c376a218d37208c37208d376a218e37208d37208e376a218f37208e37208f376a219037208f37209037" + "6a2191372090372091376a2192372091372092376a2193372092372093376a2194372093372094376a219537209437" + "2095376a2196372095372096376a2197372096372097376a2198372097372098376a2199372098372099376a219a37" + "209937209a376a219b37209a37209b376a219c37209b37209c376a219d37209c37209d376a219e37209d37209e376a" + "219f37209e37209f376a21a037209f3720a0376a21a13720a03720a1376a21a23720a13720a2376a21a33720a23720" + "a3376a21a43720a33720a4376a21a53720a43720a5376a21a63720a53720a6376a21a73720a63720a7376a21a83720" + "a73720a8376a21a93720a83720a9376a21aa3720a93720aa376a21ab3720aa3720ab376a21ac3720ab3720ac376a21" + "ad3720ac3720ad376a21ae3720ad3720ae376a21af3720ae3720af376a21b03720af3720b0376a21b13720b03720b1" + "376a21b23720b13720b2376a21b33720b23720b3376a21b43720b33720b4376a21b53720b43720b5376a21b63720b5" + "3720b6376a21b73720b63720b7376a21b83720b73720b8376a21b93720b83720b9376a21ba3720b93720ba376a21bb" + "3720ba3720bb376a21bc3720bb3720bc376a21bd3720bc3720bd376a21be3720bd3720be376a21bf3720be3720bf37" + "6a21c03720bf3720c0376a21c13720c03720c1376a21c23720c13720c2376a21c33720c23720c3376a21c43720c337" + "20c4376a21c53720c43720c5376a21c63720c53720c6376a21c73720c63720c7376a21c83720c73720c8376a21c937" + "20c83720c9376a21ca3720c93720ca376a21cb3720ca3720cb376a21cc3720cb3720cc376a21cd3720cc3720cd376a" + "21ce3720cd3720ce376a21cf3720ce3720cf376a21d03720cf3720d0376a21d13720d03720d1376a21d23720d13720" + "d2376a21d33720d23720d3376a21d43720d33720d4376a21d53720d43720d5376a21d63720d53720d6376a21d73720" + "d63720d7376a21d83720d73720d8376a21d93720d83720d9376a21da3720d93720da376a21db3720da3720db376a21" + "dc3720db3720dc376a21dd3720dc3720dd376a21de3720dd3720de376a21df3720de3720df376a21e03720df3720e0" + "376a21e13720e03720e1376a21e23720e13720e2376a21e33720e23720e3376a21e43720e33720e4376a21e53720e4" + "3720e5376a21e63720e53720e6376a21e73720e63720e7376a21e83720e73720e8376a21e93720e83720e9376a21ea" + "3720e93720ea376a21eb3720ea3720eb376a21ec3720eb3720ec376a21ed3720ec3720ed376a21ee3720ed3720ee37" + "6a21ef3720ee3720ef376a21f03720ef3720f0376a21f13720f03720f1376a21f23720f13720f2376a21f33720f237" + "20f3376a21f43720f33720f4376a21f53720f43720f5376a21f63720f53720f6376a21f73720f63720f7376a21f837" + "20f73720f8376a21f93720f83720f9376a21fa3720f93720fa376a21fb3720fa3720fb376a21fc3720fb3720fc376a" + "21fd3720fc3720fd376a21fe3720fd3720fe376a21ff3720fe3720ff376a21803820ff372080386a21813820803820" + "81386a2182382081382082386a2183382082382083386a2184382083382084386a2185382084382085386a21863820" + "85382086386a2187382086382087386a2188382087382088386a2189382088382089386a218a38208938208a386a21" + "8b38208a38208b386a218c38208b38208c386a218d38208c38208d386a218e38208d38208e386a218f38208e38208f" + "386a219038208f382090386a2191382090382091386a2192382091382092386a2193382092382093386a2194382093" + "382094386a2195382094382095386a2196382095382096386a2197382096382097386a2198382097382098386a2199" + "382098382099386a219a38209938209a386a219b38209a38209b386a219c38209b38209c386a219d38209c38209d38" + "6a219e38209d38209e386a219f38209e38209f386a21a038209f3820a0386a21a13820a03820a1386a21a23820a138" + "20a2386a21a33820a23820a3386a21a43820a33820a4386a21a53820a43820a5386a21a63820a53820a6386a21a738" + "20a63820a7386a21a83820a73820a8386a21a93820a83820a9386a21aa3820a93820aa386a21ab3820aa3820ab386a" + "21ac3820ab3820ac386a21ad3820ac3820ad386a21ae3820ad3820ae386a21af3820ae3820af386a21b03820af3820" + "b0386a21b13820b03820b1386a21b23820b13820b2386a21b33820b23820b3386a21b43820b33820b4386a21b53820" + "b43820b5386a21b63820b53820b6386a21b73820b63820b7386a21b83820b73820b8386a21b93820b83820b9386a21" + "ba3820b93820ba386a21bb3820ba3820bb386a21bc3820bb3820bc386a21bd3820bc3820bd386a21be3820bd3820be" + "386a21bf3820be3820bf386a21c03820bf3820c0386a21c13820c03820c1386a21c23820c13820c2386a21c33820c2" + "3820c3386a21c43820c33820c4386a21c53820c43820c5386a21c63820c53820c6386a21c73820c63820c7386a21c8" + "3820c73820c8386a21c93820c83820c9386a21ca3820c93820ca386a21cb3820ca3820cb386a21cc3820cb3820cc38" + "6a21cd3820cc3820cd386a21ce3820cd3820ce386a21cf3820ce3820cf386a21d03820cf3820d0386a21d13820d038" + "20d1386a21d23820d13820d2386a21d33820d23820d3386a21d43820d33820d4386a21d53820d43820d5386a21d638" + "20d53820d6386a21d73820d63820d7386a21d83820d73820d8386a21d93820d83820d9386a21da3820d93820da386a" + "21db3820da3820db386a21dc3820db3820dc386a21dd3820dc3820dd386a21de3820dd3820de386a21df3820de3820" + "df386a21e03820df3820e0386a21e13820e03820e1386a21e23820e13820e2386a21e33820e23820e3386a21e43820" "e33820e4386a21e53820e43820e5386a21e63820e53820e6386a21e73820e63820e7386a21e83820e73820e8386a21" - "e93820e83820e9386a21" - "ea3820e93820ea386a21eb3820ea3820eb386a21ec3820eb3820ec386a21ed3820ec3820ed386a21ee3820ed3820ee" - "386a21ef3820ee3820ef" - "386a21f03820ef3820f0386a21f13820f03820f1386a21f23820f13820f2386a21f33820f23820f3386a21f43820f3" - "3820f4386a21f53820f4" - "3820f5386a21f63820f53820f6386a21f73820f63820f7386a21f83820f73820f8386a21f93820f83820f9386a21fa" - "3820f93820fa386a21fb" - "3820fa3820fb386a21fc3820fb3820fc386a21fd3820fc3820fd386a21fe3820fd3820fe386a21ff3820fe3820ff38" - "6a21803920ff38208039" - "6a2181392080392081396a2182392081392082396a2183392082392083396a2184392083392084396a218539208439" - "2085396a218639208539" - "2086396a2187392086392087396a2188392087392088396a2189392088392089396a218a39208939208a396a218b39" - "208a39208b396a218c39" - "208b39208c396a218d39208c39208d396a218e39208d39208e396a218f39208e39208f396a219039208f392090396a" - "2191392090392091396a" - "2192392091392092396a2193392092392093396a2194392093392094396a2195392094392095396a21963920953920" - "96396a21973920963920" - "97396a2198392097392098396a2199392098392099396a219a39209939209a396a219b39209a39209b396a219c3920" - "9b39209c396a219d3920" - "9c39209d396a219e39209d39209e396a219f39209e39209f396a21a039209f3920a0396a21a13920a03920a1396a21" - "a23920a13920a2396a21" - "a33920a23920a3396a21a43920a33920a4396a21a53920a43920a5396a21a63920a53920a6396a21a73920a63920a7" - "396a21a83920a73920a8" - "396a21a93920a83920a9396a21aa3920a93920aa396a21ab3920aa3920ab396a21ac3920ab3920ac396a21ad3920ac" - "3920ad396a21ae3920ad" - "3920ae396a21af3920ae3920af396a21b03920af3920b0396a21b13920b03920b1396a21b23920b13920b2396a21b3" - "3920b23920b3396a21b4" - "3920b33920b4396a21b53920b43920b5396a21b63920b53920b6396a21b73920b63920b7396a21b83920b73920b839" - "6a21b93920b83920b939" - "6a21ba3920b93920ba396a21bb3920ba3920bb396a21bc3920bb3920bc396a21bd3920bc3920bd396a21be3920bd39" - "20be396a21bf3920be39" - "20bf396a21c03920bf3920c0396a21c13920c03920c1396a21c23920c13920c2396a21c33920c23920c3396a21c439" - "20c33920c4396a21c539" - "20c43920c5396a21c63920c53920c6396a21c73920c63920c7396a21c83920c73920c8396a21c93920c83920c9396a" - "21ca3920c93920ca396a" - "21cb3920ca3920cb396a21cc3920cb3920cc396a21cd3920cc3920cd396a21ce3920cd3920ce396a21cf3920ce3920" - "cf396a21d03920cf3920" - "d0396a21d13920d03920d1396a21d23920d13920d2396a21d33920d23920d3396a21d43920d33920d4396a21d53920" - "d43920d5396a21d63920" - "d53920d6396a21d73920d63920d7396a21d83920d73920d8396a21d93920d83920d9396a21da3920d93920da396a21" - "db3920da3920db396a21" - "dc3920db3920dc396a21dd3920dc3920dd396a21de3920dd3920de396a21df3920de3920df396a21e03920df3920e0" - "396a21e13920e03920e1" - "396a21e23920e13920e2396a21e33920e23920e3396a21e43920e33920e4396a21e53920e43920e5396a21e63920e5" - "3920e6396a21e73920e6" - "3920e7396a21e83920e73920e8396a21e93920e83920e9396a21ea3920e93920ea396a21eb3920ea3920eb396a21ec" - "3920eb3920ec396a21ed" - "3920ec3920ed396a21ee3920ed3920ee396a21ef3920ee3920ef396a21f03920ef3920f0396a21f13920f03920f139" - "6a21f23920f13920f239" - "6a21f33920f23920f3396a21f43920f33920f4396a21f53920f43920f5396a21f63920f53920f6396a21f73920f639" - "20f7396a21f83920f739" - "20f8396a21f93920f83920f9396a21fa3920f93920fa396a21fb3920fa3920fb396a21fc3920fb3920fc396a21fd39" - "20fc3920fd396a21fe39" - "20fd3920fe396a21ff3920fe3920ff396a21803a20ff3920803a6a21813a20803a20813a6a21823a20813a20823a6a" - "21833a20823a20833a6a" - "21843a20833a20843a6a21853a20843a20853a6a21863a20853a20863a6a21873a20863a20873a6a21883a20873a20" - "883a6a21893a20883a20" - "893a6a218a3a20893a208a3a6a218b3a208a3a208b3a6a218c3a208b3a208c3a6a218d3a208c3a208d3a6a218e3a20" - "8d3a208e3a6a218f3a20" - "8e3a208f3a6a21903a208f3a20903a6a21913a20903a20913a6a21923a20913a20923a6a21933a20923a20933a6a21" - "943a20933a20943a6a21" - "953a20943a20953a6a21963a20953a20963a6a21973a20963a20973a6a21983a20973a20983a6a21993a20983a2099" - "3a6a219a3a20993a209a" - "3a6a219b3a209a3a209b3a6a219c3a209b3a209c3a6a219d3a209c3a209d3a6a219e3a209d3a209e3a6a219f3a209e" - "3a209f3a6a21a03a209f" - "3a20a03a6a21a13a20a03a20a13a6a21a23a20a13a20a23a6a21a33a20a23a20a33a6a21a43a20a33a20a43a6a21a5" - "3a20a43a20a53a6a21a6" - "3a20a53a20a63a6a21a73a20a63a20a73a6a21a83a20a73a20a83a6a21a93a20a83a20a93a6a21aa3a20a93a20aa3a" - "6a21ab3a20aa3a20ab3a" - "6a21ac3a20ab3a20ac3a6a21ad3a20ac3a20ad3a6a21ae3a20ad3a20ae3a6a21af3a20ae3a20af3a6a21b03a20af3a" - "20b03a6a21b13a20b03a" - "20b13a6a21b23a20b13a20b23a6a21b33a20b23a20b33a6a21b43a20b33a20b43a6a21b53a20b43a20b53a6a21b63a" - "20b53a20b63a6a21b73a" - "20b63a20b73a6a21b83a20b73a20b83a6a21b93a20b83a20b93a6a21ba3a20b93a20ba3a6a21bb3a20ba3a20bb3a6a" - "21bc3a20bb3a20bc3a6a" - "21bd3a20bc3a20bd3a6a21be3a20bd3a20be3a6a21bf3a20be3a20bf3a6a21c03a20bf3a20c03a6a21c13a20c03a20" - "c13a6a21c23a20c13a20" - "c23a6a21c33a20c23a20c33a6a21c43a20c33a20c43a6a21c53a20c43a20c53a6a21c63a20c53a20c63a6a21c73a20" - "c63a20c73a6a21c83a20" - "c73a20c83a6a21c93a20c83a20c93a6a21ca3a20c93a20ca3a6a21cb3a20ca3a20cb3a6a21cc3a20cb3a20cc3a6a21" - "cd3a20cc3a20cd3a6a21" - "ce3a20cd3a20ce3a6a21cf3a20ce3a20cf3a6a21d03a20cf3a20d03a6a21d13a20d03a20d13a6a21d23a20d13a20d2" - "3a6a21d33a20d23a20d3" - "3a6a21d43a20d33a20d43a6a21d53a20d43a20d53a6a21d63a20d53a20d63a6a21d73a20d63a20d73a6a21d83a20d7" - "3a20d83a6a21d93a20d8" - "3a20d93a6a21da3a20d93a20da3a6a21db3a20da3a20db3a6a21dc3a20db3a20dc3a6a21dd3a20dc3a20dd3a6a21de" - "3a20dd3a20de3a6a21df" - "3a20de3a20df3a6a21e03a20df3a20e03a6a21e13a20e03a20e13a6a21e23a20e13a20e23a6a21e33a20e23a20e33a" - "6a21e43a20e33a20e43a" - "6a21e53a20e43a20e53a6a21e63a20e53a20e63a6a21e73a20e63a20e73a6a21e83a20e73a20e83a6a21e93a20e83a" - "20e93a6a21ea3a20e93a" - "20ea3a6a21eb3a20ea3a20eb3a6a21ec3a20eb3a20ec3a6a21ed3a20ec3a20ed3a6a21ee3a20ed3a20ee3a6a21ef3a" - "20ee3a20ef3a6a21f03a" + "e93820e83820e9386a21ea3820e93820ea386a21eb3820ea3820eb386a21ec3820eb3820ec386a21ed3820ec3820ed" + "386a21ee3820ed3820ee386a21ef3820ee3820ef386a21f03820ef3820f0386a21f13820f03820f1386a21f23820f1" + "3820f2386a21f33820f23820f3386a21f43820f33820f4386a21f53820f43820f5386a21f63820f53820f6386a21f7" + "3820f63820f7386a21f83820f73820f8386a21f93820f83820f9386a21fa3820f93820fa386a21fb3820fa3820fb38" + "6a21fc3820fb3820fc386a21fd3820fc3820fd386a21fe3820fd3820fe386a21ff3820fe3820ff386a21803920ff38" + "2080396a2181392080392081396a2182392081392082396a2183392082392083396a2184392083392084396a218539" + "2084392085396a2186392085392086396a2187392086392087396a2188392087392088396a2189392088392089396a" + "218a39208939208a396a218b39208a39208b396a218c39208b39208c396a218d39208c39208d396a218e39208d3920" + "8e396a218f39208e39208f396a219039208f392090396a2191392090392091396a2192392091392092396a21933920" + "92392093396a2194392093392094396a2195392094392095396a2196392095392096396a2197392096392097396a21" + "98392097392098396a2199392098392099396a219a39209939209a396a219b39209a39209b396a219c39209b39209c" + "396a219d39209c39209d396a219e39209d39209e396a219f39209e39209f396a21a039209f3920a0396a21a13920a0" + "3920a1396a21a23920a13920a2396a21a33920a23920a3396a21a43920a33920a4396a21a53920a43920a5396a21a6" + "3920a53920a6396a21a73920a63920a7396a21a83920a73920a8396a21a93920a83920a9396a21aa3920a93920aa39" + "6a21ab3920aa3920ab396a21ac3920ab3920ac396a21ad3920ac3920ad396a21ae3920ad3920ae396a21af3920ae39" + "20af396a21b03920af3920b0396a21b13920b03920b1396a21b23920b13920b2396a21b33920b23920b3396a21b439" + "20b33920b4396a21b53920b43920b5396a21b63920b53920b6396a21b73920b63920b7396a21b83920b73920b8396a" + "21b93920b83920b9396a21ba3920b93920ba396a21bb3920ba3920bb396a21bc3920bb3920bc396a21bd3920bc3920" + "bd396a21be3920bd3920be396a21bf3920be3920bf396a21c03920bf3920c0396a21c13920c03920c1396a21c23920" + "c13920c2396a21c33920c23920c3396a21c43920c33920c4396a21c53920c43920c5396a21c63920c53920c6396a21" + "c73920c63920c7396a21c83920c73920c8396a21c93920c83920c9396a21ca3920c93920ca396a21cb3920ca3920cb" + "396a21cc3920cb3920cc396a21cd3920cc3920cd396a21ce3920cd3920ce396a21cf3920ce3920cf396a21d03920cf" + "3920d0396a21d13920d03920d1396a21d23920d13920d2396a21d33920d23920d3396a21d43920d33920d4396a21d5" + "3920d43920d5396a21d63920d53920d6396a21d73920d63920d7396a21d83920d73920d8396a21d93920d83920d939" + "6a21da3920d93920da396a21db3920da3920db396a21dc3920db3920dc396a21dd3920dc3920dd396a21de3920dd39" + "20de396a21df3920de3920df396a21e03920df3920e0396a21e13920e03920e1396a21e23920e13920e2396a21e339" + "20e23920e3396a21e43920e33920e4396a21e53920e43920e5396a21e63920e53920e6396a21e73920e63920e7396a" + "21e83920e73920e8396a21e93920e83920e9396a21ea3920e93920ea396a21eb3920ea3920eb396a21ec3920eb3920" + "ec396a21ed3920ec3920ed396a21ee3920ed3920ee396a21ef3920ee3920ef396a21f03920ef3920f0396a21f13920" + "f03920f1396a21f23920f13920f2396a21f33920f23920f3396a21f43920f33920f4396a21f53920f43920f5396a21" + "f63920f53920f6396a21f73920f63920f7396a21f83920f73920f8396a21f93920f83920f9396a21fa3920f93920fa" + "396a21fb3920fa3920fb396a21fc3920fb3920fc396a21fd3920fc3920fd396a21fe3920fd3920fe396a21ff3920fe" + "3920ff396a21803a20ff3920803a6a21813a20803a20813a6a21823a20813a20823a6a21833a20823a20833a6a2184" + "3a20833a20843a6a21853a20843a20853a6a21863a20853a20863a6a21873a20863a20873a6a21883a20873a20883a" + "6a21893a20883a20893a6a218a3a20893a208a3a6a218b3a208a3a208b3a6a218c3a208b3a208c3a6a218d3a208c3a" + "208d3a6a218e3a208d3a208e3a6a218f3a208e3a208f3a6a21903a208f3a20903a6a21913a20903a20913a6a21923a" + "20913a20923a6a21933a20923a20933a6a21943a20933a20943a6a21953a20943a20953a6a21963a20953a20963a6a" + "21973a20963a20973a6a21983a20973a20983a6a21993a20983a20993a6a219a3a20993a209a3a6a219b3a209a3a20" + "9b3a6a219c3a209b3a209c3a6a219d3a209c3a209d3a6a219e3a209d3a209e3a6a219f3a209e3a209f3a6a21a03a20" + "9f3a20a03a6a21a13a20a03a20a13a6a21a23a20a13a20a23a6a21a33a20a23a20a33a6a21a43a20a33a20a43a6a21" + "a53a20a43a20a53a6a21a63a20a53a20a63a6a21a73a20a63a20a73a6a21a83a20a73a20a83a6a21a93a20a83a20a9" + "3a6a21aa3a20a93a20aa3a6a21ab3a20aa3a20ab3a6a21ac3a20ab3a20ac3a6a21ad3a20ac3a20ad3a6a21ae3a20ad" + "3a20ae3a6a21af3a20ae3a20af3a6a21b03a20af3a20b03a6a21b13a20b03a20b13a6a21b23a20b13a20b23a6a21b3" + "3a20b23a20b33a6a21b43a20b33a20b43a6a21b53a20b43a20b53a6a21b63a20b53a20b63a6a21b73a20b63a20b73a" + "6a21b83a20b73a20b83a6a21b93a20b83a20b93a6a21ba3a20b93a20ba3a6a21bb3a20ba3a20bb3a6a21bc3a20bb3a" + "20bc3a6a21bd3a20bc3a20bd3a6a21be3a20bd3a20be3a6a21bf3a20be3a20bf3a6a21c03a20bf3a20c03a6a21c13a" + "20c03a20c13a6a21c23a20c13a20c23a6a21c33a20c23a20c33a6a21c43a20c33a20c43a6a21c53a20c43a20c53a6a" + "21c63a20c53a20c63a6a21c73a20c63a20c73a6a21c83a20c73a20c83a6a21c93a20c83a20c93a6a21ca3a20c93a20" + "ca3a6a21cb3a20ca3a20cb3a6a21cc3a20cb3a20cc3a6a21cd3a20cc3a20cd3a6a21ce3a20cd3a20ce3a6a21cf3a20" + "ce3a20cf3a6a21d03a20cf3a20d03a6a21d13a20d03a20d13a6a21d23a20d13a20d23a6a21d33a20d23a20d33a6a21" + "d43a20d33a20d43a6a21d53a20d43a20d53a6a21d63a20d53a20d63a6a21d73a20d63a20d73a6a21d83a20d73a20d8" + "3a6a21d93a20d83a20d93a6a21da3a20d93a20da3a6a21db3a20da3a20db3a6a21dc3a20db3a20dc3a6a21dd3a20dc" + "3a20dd3a6a21de3a20dd3a20de3a6a21df3a20de3a20df3a6a21e03a20df3a20e03a6a21e13a20e03a20e13a6a21e2" + "3a20e13a20e23a6a21e33a20e23a20e33a6a21e43a20e33a20e43a6a21e53a20e43a20e53a6a21e63a20e53a20e63a" + "6a21e73a20e63a20e73a6a21e83a20e73a20e83a6a21e93a20e83a20e93a6a21ea3a20e93a20ea3a6a21eb3a20ea3a" + "20eb3a6a21ec3a20eb3a20ec3a6a21ed3a20ec3a20ed3a6a21ee3a20ed3a20ee3a6a21ef3a20ee3a20ef3a6a21f03a" "20ef3a20f03a6a21f13a20f03a20f13a6a21f23a20f13a20f23a6a21f33a20f23a20f33a6a21f43a20f33a20f43a6a" - "21f53a20f43a20f53a6a" - "21f63a20f53a20f63a6a21f73a20f63a20f73a6a21f83a20f73a20f83a6a21f93a20f83a20f93a6a21fa3a20f93a20" - "fa3a6a21fb3a20fa3a20" - "fb3a6a21fc3a20fb3a20fc3a6a21fd3a20fc3a20fd3a6a21fe3a20fd3a20fe3a6a21ff3a20fe3a20ff3a6a21803b20" - "ff3a20803b6a21813b20" - "803b20813b6a21823b20813b20823b6a21833b20823b20833b6a21843b20833b20843b6a21853b20843b20853b6a21" - "863b20853b20863b6a21" - "873b20863b20873b6a21883b20873b20883b6a21893b20883b20893b6a218a3b20893b208a3b6a218b3b208a3b208b" - "3b6a218c3b208b3b208c" - "3b6a218d3b208c3b208d3b6a218e3b208d3b208e3b6a218f3b208e3b208f3b6a21903b208f3b20903b6a21913b2090" - "3b20913b6a21923b2091" - "3b20923b6a21933b20923b20933b6a21943b20933b20943b6a21953b20943b20953b6a21963b20953b20963b6a2197" - "3b20963b20973b6a2198" - "3b20973b20983b6a21993b20983b20993b6a219a3b20993b209a3b6a219b3b209a3b209b3b6a219c3b209b3b209c3b" - "6a219d3b209c3b209d3b" - "6a219e3b209d3b209e3b6a219f3b209e3b209f3b6a21a03b209f3b20a03b6a21a13b20a03b20a13b6a21a23b20a13b" - "20a23b6a21a33b20a23b" - "20a33b6a21a43b20a33b20a43b6a21a53b20a43b20a53b6a21a63b20a53b20a63b6a21a73b20a63b20a73b6a21a83b" - "20a73b20a83b6a21a93b" - "20a83b20a93b6a21aa3b20a93b20aa3b6a21ab3b20aa3b20ab3b6a21ac3b20ab3b20ac3b6a21ad3b20ac3b20ad3b6a" - "21ae3b20ad3b20ae3b6a" - "21af3b20ae3b20af3b6a21b03b20af3b20b03b6a21b13b20b03b20b13b6a21b23b20b13b20b23b6a21b33b20b23b20" - "b33b6a21b43b20b33b20" - "b43b6a21b53b20b43b20b53b6a21b63b20b53b20b63b6a21b73b20b63b20b73b6a21b83b20b73b20b83b6a21b93b20" - "b83b20b93b6a21ba3b20" - "b93b20ba3b6a21bb3b20ba3b20bb3b6a21bc3b20bb3b20bc3b6a21bd3b20bc3b20bd3b6a21be3b20bd3b20be3b6a21" - "bf3b20be3b20bf3b6a21" - "c03b20bf3b20c03b6a21c13b20c03b20c13b6a21c23b20c13b20c23b6a21c33b20c23b20c33b6a21c43b20c33b20c4" - "3b6a21c53b20c43b20c5" - "3b6a21c63b20c53b20c63b6a21c73b20c63b20c73b6a21c83b20c73b20c83b6a21c93b20c83b20c93b6a21ca3b20c9" - "3b20ca3b6a21cb3b20ca" - "3b20cb3b6a21cc3b20cb3b20cc3b6a21cd3b20cc3b20cd3b6a21ce3b20cd3b20ce3b6a21cf3b20ce3b20cf3b6a21d0" - "3b20cf3b20d03b6a21d1" - "3b20d03b20d13b6a21d23b20d13b20d23b6a21d33b20d23b20d33b6a21d43b20d33b20d43b6a21d53b20d43b20d53b" - "6a21d63b20d53b20d63b" - "6a21d73b20d63b20d73b6a21d83b20d73b20d83b6a21d93b20d83b20d93b6a21da3b20d93b20da3b6a21db3b20da3b" - "20db3b6a21dc3b20db3b" - "20dc3b6a21dd3b20dc3b20dd3b6a21de3b20dd3b20de3b6a21df3b20de3b20df3b6a21e03b20df3b20e03b6a21e13b" - "20e03b20e13b6a21e23b" - "20e13b20e23b6a21e33b20e23b20e33b6a21e43b20e33b20e43b6a21e53b20e43b20e53b6a21e63b20e53b20e63b6a" - "21e73b20e63b20e73b6a" - "21e83b20e73b20e83b6a21e93b20e83b20e93b6a21ea3b20e93b20ea3b6a21eb3b20ea3b20eb3b6a21ec3b20eb3b20" - "ec3b6a21ed3b20ec3b20" - "ed3b6a21ee3b20ed3b20ee3b6a21ef3b20ee3b20ef3b6a21f03b20ef3b20f03b6a21f13b20f03b20f13b6a21f23b20" - "f13b20f23b6a21f33b20" - "f23b20f33b6a21f43b20f33b20f43b6a21f53b20f43b20f53b6a21f63b20f53b20f63b6a21f73b20f63b20f73b6a21" - "f83b20f73b20f83b6a21" - "f93b20f83b20f93b6a21fa3b20f93b20fa3b6a21fb3b20fa3b20fb3b6a21fc3b20fb3b20fc3b6a21fd3b20fc3b20fd" - "3b6a21fe3b20fd3b20fe" - "3b6a21ff3b20fe3b20ff3b6a21803c20ff3b20803c6a21813c20803c20813c6a21823c20813c20823c6a21833c2082" - "3c20833c6a21843c2083" - "3c20843c6a21853c20843c20853c6a21863c20853c20863c6a21873c20863c20873c6a21883c20873c20883c6a2189" - "3c20883c20893c6a218a" - "3c20893c208a3c6a218b3c208a3c208b3c6a218c3c208b3c208c3c6a218d3c208c3c208d3c6a218e3c208d3c208e3c" - "6a218f3c208e3c208f3c" - "6a21903c208f3c20903c6a21913c20903c20913c6a21923c20913c20923c6a21933c20923c20933c6a21943c20933c" - "20943c6a21953c20943c" - "20953c6a21963c20953c20963c6a21973c20963c20973c6a21983c20973c20983c6a21993c20983c20993c6a219a3c" - "20993c209a3c6a219b3c" - "209a3c209b3c6a219c3c209b3c209c3c6a219d3c209c3c209d3c6a219e3c209d3c209e3c6a219f3c209e3c209f3c6a" - "21a03c209f3c20a03c6a" - "21a13c20a03c20a13c6a21a23c20a13c20a23c6a21a33c20a23c20a33c6a21a43c20a33c20a43c6a21a53c20a43c20" - "a53c6a21a63c20a53c20" - "a63c6a21a73c20a63c20a73c6a21a83c20a73c20a83c6a21a93c20a83c20a93c6a21aa3c20a93c20aa3c6a21ab3c20" - "aa3c20ab3c6a21ac3c20" - "ab3c20ac3c6a21ad3c20ac3c20ad3c6a21ae3c20ad3c20ae3c6a21af3c20ae3c20af3c6a21b03c20af3c20b03c6a21" - "b13c20b03c20b13c6a21" - "b23c20b13c20b23c6a21b33c20b23c20b33c6a21b43c20b33c20b43c6a21b53c20b43c20b53c6a21b63c20b53c20b6" - "3c6a21b73c20b63c20b7" - "3c6a21b83c20b73c20b83c6a21b93c20b83c20b93c6a21ba3c20b93c20ba3c6a21bb3c20ba3c20bb3c6a21bc3c20bb" - "3c20bc3c6a21bd3c20bc" - "3c20bd3c6a21be3c20bd3c20be3c6a21bf3c20be3c20bf3c6a21c03c20bf3c20c03c6a21c13c20c03c20c13c6a21c2" - "3c20c13c20c23c6a21c3" - "3c20c23c20c33c6a21c43c20c33c20c43c6a21c53c20c43c20c53c6a21c63c20c53c20c63c6a21c73c20c63c20c73c" - "6a21c83c20c73c20c83c" - "6a21c93c20c83c20c93c6a21ca3c20c93c20ca3c6a21cb3c20ca3c20cb3c6a21cc3c20cb3c20cc3c6a21cd3c20cc3c" - "20cd3c6a21ce3c20cd3c" - "20ce3c6a21cf3c20ce3c20cf3c6a21d03c20cf3c20d03c6a21d13c20d03c20d13c6a21d23c20d13c20d23c6a21d33c" - "20d23c20d33c6a21d43c" - "20d33c20d43c6a21d53c20d43c20d53c6a21d63c20d53c20d63c6a21d73c20d63c20d73c6a21d83c20d73c20d83c6a" - "21d93c20d83c20d93c6a" - "21da3c20d93c20da3c6a21db3c20da3c20db3c6a21dc3c20db3c20dc3c6a21dd3c20dc3c20dd3c6a21de3c20dd3c20" - "de3c6a21df3c20de3c20" - "df3c6a21e03c20df3c20e03c6a21e13c20e03c20e13c6a21e23c20e13c20e23c6a21e33c20e23c20e33c6a21e43c20" - "e33c20e43c6a21e53c20" - "e43c20e53c6a21e63c20e53c20e63c6a21e73c20e63c20e73c6a21e83c20e73c20e83c6a21e93c20e83c20e93c6a21" - "ea3c20e93c20ea3c6a21" - "eb3c20ea3c20eb3c6a21ec3c20eb3c20ec3c6a21ed3c20ec3c20ed3c6a21ee3c20ed3c20ee3c6a21ef3c20ee3c20ef" - "3c6a21f03c20ef3c20f0" - "3c6a21f13c20f03c20f13c6a21f23c20f13c20f23c6a21f33c20f23c20f33c6a21f43c20f33c20f43c6a21f53c20f4" - "3c20f53c6a21f63c20f5" - "3c20f63c6a21f73c20f63c20f73c6a21f83c20f73c20f83c6a21f93c20f83c20f93c6a21fa3c20f93c20fa3c6a21fb" - "3c20fa3c20fb3c6a21fc" + "21f53a20f43a20f53a6a21f63a20f53a20f63a6a21f73a20f63a20f73a6a21f83a20f73a20f83a6a21f93a20f83a20" + "f93a6a21fa3a20f93a20fa3a6a21fb3a20fa3a20fb3a6a21fc3a20fb3a20fc3a6a21fd3a20fc3a20fd3a6a21fe3a20" + "fd3a20fe3a6a21ff3a20fe3a20ff3a6a21803b20ff3a20803b6a21813b20803b20813b6a21823b20813b20823b6a21" + "833b20823b20833b6a21843b20833b20843b6a21853b20843b20853b6a21863b20853b20863b6a21873b20863b2087" + "3b6a21883b20873b20883b6a21893b20883b20893b6a218a3b20893b208a3b6a218b3b208a3b208b3b6a218c3b208b" + "3b208c3b6a218d3b208c3b208d3b6a218e3b208d3b208e3b6a218f3b208e3b208f3b6a21903b208f3b20903b6a2191" + "3b20903b20913b6a21923b20913b20923b6a21933b20923b20933b6a21943b20933b20943b6a21953b20943b20953b" + "6a21963b20953b20963b6a21973b20963b20973b6a21983b20973b20983b6a21993b20983b20993b6a219a3b20993b" + "209a3b6a219b3b209a3b209b3b6a219c3b209b3b209c3b6a219d3b209c3b209d3b6a219e3b209d3b209e3b6a219f3b" + "209e3b209f3b6a21a03b209f3b20a03b6a21a13b20a03b20a13b6a21a23b20a13b20a23b6a21a33b20a23b20a33b6a" + "21a43b20a33b20a43b6a21a53b20a43b20a53b6a21a63b20a53b20a63b6a21a73b20a63b20a73b6a21a83b20a73b20" + "a83b6a21a93b20a83b20a93b6a21aa3b20a93b20aa3b6a21ab3b20aa3b20ab3b6a21ac3b20ab3b20ac3b6a21ad3b20" + "ac3b20ad3b6a21ae3b20ad3b20ae3b6a21af3b20ae3b20af3b6a21b03b20af3b20b03b6a21b13b20b03b20b13b6a21" + "b23b20b13b20b23b6a21b33b20b23b20b33b6a21b43b20b33b20b43b6a21b53b20b43b20b53b6a21b63b20b53b20b6" + "3b6a21b73b20b63b20b73b6a21b83b20b73b20b83b6a21b93b20b83b20b93b6a21ba3b20b93b20ba3b6a21bb3b20ba" + "3b20bb3b6a21bc3b20bb3b20bc3b6a21bd3b20bc3b20bd3b6a21be3b20bd3b20be3b6a21bf3b20be3b20bf3b6a21c0" + "3b20bf3b20c03b6a21c13b20c03b20c13b6a21c23b20c13b20c23b6a21c33b20c23b20c33b6a21c43b20c33b20c43b" + "6a21c53b20c43b20c53b6a21c63b20c53b20c63b6a21c73b20c63b20c73b6a21c83b20c73b20c83b6a21c93b20c83b" + "20c93b6a21ca3b20c93b20ca3b6a21cb3b20ca3b20cb3b6a21cc3b20cb3b20cc3b6a21cd3b20cc3b20cd3b6a21ce3b" + "20cd3b20ce3b6a21cf3b20ce3b20cf3b6a21d03b20cf3b20d03b6a21d13b20d03b20d13b6a21d23b20d13b20d23b6a" + "21d33b20d23b20d33b6a21d43b20d33b20d43b6a21d53b20d43b20d53b6a21d63b20d53b20d63b6a21d73b20d63b20" + "d73b6a21d83b20d73b20d83b6a21d93b20d83b20d93b6a21da3b20d93b20da3b6a21db3b20da3b20db3b6a21dc3b20" + "db3b20dc3b6a21dd3b20dc3b20dd3b6a21de3b20dd3b20de3b6a21df3b20de3b20df3b6a21e03b20df3b20e03b6a21" + "e13b20e03b20e13b6a21e23b20e13b20e23b6a21e33b20e23b20e33b6a21e43b20e33b20e43b6a21e53b20e43b20e5" + "3b6a21e63b20e53b20e63b6a21e73b20e63b20e73b6a21e83b20e73b20e83b6a21e93b20e83b20e93b6a21ea3b20e9" + "3b20ea3b6a21eb3b20ea3b20eb3b6a21ec3b20eb3b20ec3b6a21ed3b20ec3b20ed3b6a21ee3b20ed3b20ee3b6a21ef" + "3b20ee3b20ef3b6a21f03b20ef3b20f03b6a21f13b20f03b20f13b6a21f23b20f13b20f23b6a21f33b20f23b20f33b" + "6a21f43b20f33b20f43b6a21f53b20f43b20f53b6a21f63b20f53b20f63b6a21f73b20f63b20f73b6a21f83b20f73b" + "20f83b6a21f93b20f83b20f93b6a21fa3b20f93b20fa3b6a21fb3b20fa3b20fb3b6a21fc3b20fb3b20fc3b6a21fd3b" + "20fc3b20fd3b6a21fe3b20fd3b20fe3b6a21ff3b20fe3b20ff3b6a21803c20ff3b20803c6a21813c20803c20813c6a" + "21823c20813c20823c6a21833c20823c20833c6a21843c20833c20843c6a21853c20843c20853c6a21863c20853c20" + "863c6a21873c20863c20873c6a21883c20873c20883c6a21893c20883c20893c6a218a3c20893c208a3c6a218b3c20" + "8a3c208b3c6a218c3c208b3c208c3c6a218d3c208c3c208d3c6a218e3c208d3c208e3c6a218f3c208e3c208f3c6a21" + "903c208f3c20903c6a21913c20903c20913c6a21923c20913c20923c6a21933c20923c20933c6a21943c20933c2094" + "3c6a21953c20943c20953c6a21963c20953c20963c6a21973c20963c20973c6a21983c20973c20983c6a21993c2098" + "3c20993c6a219a3c20993c209a3c6a219b3c209a3c209b3c6a219c3c209b3c209c3c6a219d3c209c3c209d3c6a219e" + "3c209d3c209e3c6a219f3c209e3c209f3c6a21a03c209f3c20a03c6a21a13c20a03c20a13c6a21a23c20a13c20a23c" + "6a21a33c20a23c20a33c6a21a43c20a33c20a43c6a21a53c20a43c20a53c6a21a63c20a53c20a63c6a21a73c20a63c" + "20a73c6a21a83c20a73c20a83c6a21a93c20a83c20a93c6a21aa3c20a93c20aa3c6a21ab3c20aa3c20ab3c6a21ac3c" + "20ab3c20ac3c6a21ad3c20ac3c20ad3c6a21ae3c20ad3c20ae3c6a21af3c20ae3c20af3c6a21b03c20af3c20b03c6a" + "21b13c20b03c20b13c6a21b23c20b13c20b23c6a21b33c20b23c20b33c6a21b43c20b33c20b43c6a21b53c20b43c20" + "b53c6a21b63c20b53c20b63c6a21b73c20b63c20b73c6a21b83c20b73c20b83c6a21b93c20b83c20b93c6a21ba3c20" + "b93c20ba3c6a21bb3c20ba3c20bb3c6a21bc3c20bb3c20bc3c6a21bd3c20bc3c20bd3c6a21be3c20bd3c20be3c6a21" + "bf3c20be3c20bf3c6a21c03c20bf3c20c03c6a21c13c20c03c20c13c6a21c23c20c13c20c23c6a21c33c20c23c20c3" + "3c6a21c43c20c33c20c43c6a21c53c20c43c20c53c6a21c63c20c53c20c63c6a21c73c20c63c20c73c6a21c83c20c7" + "3c20c83c6a21c93c20c83c20c93c6a21ca3c20c93c20ca3c6a21cb3c20ca3c20cb3c6a21cc3c20cb3c20cc3c6a21cd" + "3c20cc3c20cd3c6a21ce3c20cd3c20ce3c6a21cf3c20ce3c20cf3c6a21d03c20cf3c20d03c6a21d13c20d03c20d13c" + "6a21d23c20d13c20d23c6a21d33c20d23c20d33c6a21d43c20d33c20d43c6a21d53c20d43c20d53c6a21d63c20d53c" + "20d63c6a21d73c20d63c20d73c6a21d83c20d73c20d83c6a21d93c20d83c20d93c6a21da3c20d93c20da3c6a21db3c" + "20da3c20db3c6a21dc3c20db3c20dc3c6a21dd3c20dc3c20dd3c6a21de3c20dd3c20de3c6a21df3c20de3c20df3c6a" + "21e03c20df3c20e03c6a21e13c20e03c20e13c6a21e23c20e13c20e23c6a21e33c20e23c20e33c6a21e43c20e33c20" + "e43c6a21e53c20e43c20e53c6a21e63c20e53c20e63c6a21e73c20e63c20e73c6a21e83c20e73c20e83c6a21e93c20" + "e83c20e93c6a21ea3c20e93c20ea3c6a21eb3c20ea3c20eb3c6a21ec3c20eb3c20ec3c6a21ed3c20ec3c20ed3c6a21" + "ee3c20ed3c20ee3c6a21ef3c20ee3c20ef3c6a21f03c20ef3c20f03c6a21f13c20f03c20f13c6a21f23c20f13c20f2" + "3c6a21f33c20f23c20f33c6a21f43c20f33c20f43c6a21f53c20f43c20f53c6a21f63c20f53c20f63c6a21f73c20f6" + "3c20f73c6a21f83c20f73c20f83c6a21f93c20f83c20f93c6a21fa3c20f93c20fa3c6a21fb3c20fa3c20fb3c6a21fc" "3c20fb3c20fc3c6a21fd3c20fc3c20fd3c6a21fe3c20fd3c20fe3c6a21ff3c20fe3c20ff3c6a21803d20ff3c20803d" - "6a21813d20803d20813d" - "6a21823d20813d20823d6a21833d20823d20833d6a21843d20833d20843d6a21853d20843d20853d6a21863d20853d" - "20863d6a21873d20863d" - "20873d6a21883d20873d20883d6a21893d20883d20893d6a218a3d20893d208a3d6a218b3d208a3d208b3d6a218c3d" - "208b3d208c3d6a218d3d" - "208c3d208d3d6a218e3d208d3d208e3d6a218f3d208e3d208f3d6a21903d208f3d20903d6a21913d20903d20913d6a" - "21923d20913d20923d6a" - "21933d20923d20933d6a21943d20933d20943d6a21953d20943d20953d6a21963d20953d20963d6a21973d20963d20" - "973d6a21983d20973d20" - "983d6a21993d20983d20993d6a219a3d20993d209a3d6a219b3d209a3d209b3d6a219c3d209b3d209c3d6a219d3d20" - "9c3d209d3d6a219e3d20" - "9d3d209e3d6a219f3d209e3d209f3d6a21a03d209f3d20a03d6a21a13d20a03d20a13d6a21a23d20a13d20a23d6a21" - "a33d20a23d20a33d6a21" - "a43d20a33d20a43d6a21a53d20a43d20a53d6a21a63d20a53d20a63d6a21a73d20a63d20a73d6a21a83d20a73d20a8" - "3d6a21a93d20a83d20a9" - "3d6a21aa3d20a93d20aa3d6a21ab3d20aa3d20ab3d6a21ac3d20ab3d20ac3d6a21ad3d20ac3d20ad3d6a21ae3d20ad" - "3d20ae3d6a21af3d20ae" - "3d20af3d6a21b03d20af3d20b03d6a21b13d20b03d20b13d6a21b23d20b13d20b23d6a21b33d20b23d20b33d6a21b4" - "3d20b33d20b43d6a21b5" - "3d20b43d20b53d6a21b63d20b53d20b63d6a21b73d20b63d20b73d6a21b83d20b73d20b83d6a21b93d20b83d20b93d" - "6a21ba3d20b93d20ba3d" - "6a21bb3d20ba3d20bb3d6a21bc3d20bb3d20bc3d6a21bd3d20bc3d20bd3d6a21be3d20bd3d20be3d6a21bf3d20be3d" - "20bf3d6a21c03d20bf3d" - "20c03d6a21c13d20c03d20c13d6a21c23d20c13d20c23d6a21c33d20c23d20c33d6a21c43d20c33d20c43d6a21c53d" - "20c43d20c53d6a21c63d" - "20c53d20c63d6a21c73d20c63d20c73d6a21c83d20c73d20c83d6a21c93d20c83d20c93d6a21ca3d20c93d20ca3d6a" - "21cb3d20ca3d20cb3d6a" - "21cc3d20cb3d20cc3d6a21cd3d20cc3d20cd3d6a21ce3d20cd3d20ce3d6a21cf3d20ce3d20cf3d6a21d03d20cf3d20" - "d03d6a21d13d20d03d20" - "d13d6a21d23d20d13d20d23d6a21d33d20d23d20d33d6a21d43d20d33d20d43d6a21d53d20d43d20d53d6a21d63d20" - "d53d20d63d6a21d73d20" - "d63d20d73d6a21d83d20d73d20d83d6a21d93d20d83d20d93d6a21da3d20d93d20da3d6a21db3d20da3d20db3d6a21" - "dc3d20db3d20dc3d6a21" - "dd3d20dc3d20dd3d6a21de3d20dd3d20de3d6a21df3d20de3d20df3d6a21e03d20df3d20e03d6a21e13d20e03d20e1" - "3d6a21e23d20e13d20e2" - "3d6a21e33d20e23d20e33d6a21e43d20e33d20e43d6a21e53d20e43d20e53d6a21e63d20e53d20e63d6a21e73d20e6" - "3d20e73d6a21e83d20e7" - "3d20e83d6a21e93d20e83d20e93d6a21ea3d20e93d20ea3d6a21eb3d20ea3d20eb3d6a21ec3d20eb3d20ec3d6a21ed" - "3d20ec3d20ed3d6a21ee" - "3d20ed3d20ee3d6a21ef3d20ee3d20ef3d6a21f03d20ef3d20f03d6a21f13d20f03d20f13d6a21f23d20f13d20f23d" - "6a21f33d20f23d20f33d" - "6a21f43d20f33d20f43d6a21f53d20f43d20f53d6a21f63d20f53d20f63d6a21f73d20f63d20f73d6a21f83d20f73d" - "20f83d6a21f93d20f83d" - "20f93d6a21fa3d20f93d20fa3d6a21fb3d20fa3d20fb3d6a21fc3d20fb3d20fc3d6a21fd3d20fc3d20fd3d6a21fe3d" - "20fd3d20fe3d6a21ff3d" - "20fe3d20ff3d6a21803e20ff3d20803e6a21813e20803e20813e6a21823e20813e20823e6a21833e20823e20833e6a" - "21843e20833e20843e6a" - "21853e20843e20853e6a21863e20853e20863e6a21873e20863e20873e6a21883e20873e20883e6a21893e20883e20" - "893e6a218a3e20893e20" - "8a3e6a218b3e208a3e208b3e6a218c3e208b3e208c3e6a218d3e208c3e208d3e6a218e3e208d3e208e3e6a218f3e20" - "8e3e208f3e6a21903e20" - "8f3e20903e6a21913e20903e20913e6a21923e20913e20923e6a21933e20923e20933e6a21943e20933e20943e6a21" - "953e20943e20953e6a21" - "963e20953e20963e6a21973e20963e20973e6a21983e20973e20983e6a21993e20983e20993e6a219a3e20993e209a" - "3e6a219b3e209a3e209b" - "3e6a219c3e209b3e209c3e6a219d3e209c3e209d3e6a219e3e209d3e209e3e6a219f3e209e3e209f3e6a21a03e209f" - "3e20a03e6a21a13e20a0" - "3e20a13e6a21a23e20a13e20a23e6a21a33e20a23e20a33e6a21a43e20a33e20a43e6a21a53e20a43e20a53e6a21a6" - "3e20a53e20a63e6a21a7" - "3e20a63e20a73e6a21a83e20a73e20a83e6a21a93e20a83e20a93e6a21aa3e20a93e20aa3e6a21ab3e20aa3e20ab3e" - "6a21ac3e20ab3e20ac3e" - "6a21ad3e20ac3e20ad3e6a21ae3e20ad3e20ae3e6a21af3e20ae3e20af3e6a21b03e20af3e20b03e6a21b13e20b03e" - "20b13e6a21b23e20b13e" - "20b23e6a21b33e20b23e20b33e6a21b43e20b33e20b43e6a21b53e20b43e20b53e6a21b63e20b53e20b63e6a21b73e" - "20b63e20b73e6a21b83e" - "20b73e20b83e6a21b93e20b83e20b93e6a21ba3e20b93e20ba3e6a21bb3e20ba3e20bb3e6a21bc3e20bb3e20bc3e6a" - "21bd3e20bc3e20bd3e6a" - "21be3e20bd3e20be3e6a21bf3e20be3e20bf3e6a21c03e20bf3e20c03e6a21c13e20c03e20c13e6a21c23e20c13e20" - "c23e6a21c33e20c23e20" - "c33e6a21c43e20c33e20c43e6a21c53e20c43e20c53e6a21c63e20c53e20c63e6a21c73e20c63e20c73e6a21c83e20" - "c73e20c83e6a21c93e20" - "c83e20c93e6a21ca3e20c93e20ca3e6a21cb3e20ca3e20cb3e6a21cc3e20cb3e20cc3e6a21cd3e20cc3e20cd3e6a21" - "ce3e20cd3e20ce3e6a21" - "cf3e20ce3e20cf3e6a21d03e20cf3e20d03e6a21d13e20d03e20d13e6a21d23e20d13e20d23e6a21d33e20d23e20d3" - "3e6a21d43e20d33e20d4" - "3e6a21d53e20d43e20d53e6a21d63e20d53e20d63e6a21d73e20d63e20d73e6a21d83e20d73e20d83e6a21d93e20d8" - "3e20d93e6a21da3e20d9" - "3e20da3e6a21db3e20da3e20db3e6a21dc3e20db3e20dc3e6a21dd3e20dc3e20dd3e6a21de3e20dd3e20de3e6a21df" - "3e20de3e20df3e6a21e0" - "3e20df3e20e03e6a21e13e20e03e20e13e6a21e23e20e13e20e23e6a21e33e20e23e20e33e6a21e43e20e33e20e43e" - "6a21e53e20e43e20e53e" - "6a21e63e20e53e20e63e6a21e73e20e63e20e73e6a21e83e20e73e20e83e6a21e93e20e83e20e93e6a21ea3e20e93e" - "20ea3e6a21eb3e20ea3e" - "20eb3e6a21ec3e20eb3e20ec3e6a21ed3e20ec3e20ed3e6a21ee3e20ed3e20ee3e6a21ef3e20ee3e20ef3e6a21f03e" - "20ef3e20f03e6a21f13e" - "20f03e20f13e6a21f23e20f13e20f23e6a21f33e20f23e20f33e6a21f43e20f33e20f43e6a21f53e20f43e20f53e6a" - "21f63e20f53e20f63e6a" - "21f73e20f63e20f73e6a21f83e20f73e20f83e6a21f93e20f83e20f93e6a21fa3e20f93e20fa3e6a21fb3e20fa3e20" - "fb3e6a21fc3e20fb3e20" - "fc3e6a21fd3e20fc3e20fd3e6a21fe3e20fd3e20fe3e6a21ff3e20fe3e20ff3e6a21803f20ff3e20803f6a21813f20" - "803f20813f6a21823f20" - "813f20823f6a21833f20823f20833f6a21843f20833f20843f6a21853f20843f20853f6a21863f20853f20863f6a21" - "873f20863f20873f6a21" + "6a21813d20803d20813d6a21823d20813d20823d6a21833d20823d20833d6a21843d20833d20843d6a21853d20843d" + "20853d6a21863d20853d20863d6a21873d20863d20873d6a21883d20873d20883d6a21893d20883d20893d6a218a3d" + "20893d208a3d6a218b3d208a3d208b3d6a218c3d208b3d208c3d6a218d3d208c3d208d3d6a218e3d208d3d208e3d6a" + "218f3d208e3d208f3d6a21903d208f3d20903d6a21913d20903d20913d6a21923d20913d20923d6a21933d20923d20" + "933d6a21943d20933d20943d6a21953d20943d20953d6a21963d20953d20963d6a21973d20963d20973d6a21983d20" + "973d20983d6a21993d20983d20993d6a219a3d20993d209a3d6a219b3d209a3d209b3d6a219c3d209b3d209c3d6a21" + "9d3d209c3d209d3d6a219e3d209d3d209e3d6a219f3d209e3d209f3d6a21a03d209f3d20a03d6a21a13d20a03d20a1" + "3d6a21a23d20a13d20a23d6a21a33d20a23d20a33d6a21a43d20a33d20a43d6a21a53d20a43d20a53d6a21a63d20a5" + "3d20a63d6a21a73d20a63d20a73d6a21a83d20a73d20a83d6a21a93d20a83d20a93d6a21aa3d20a93d20aa3d6a21ab" + "3d20aa3d20ab3d6a21ac3d20ab3d20ac3d6a21ad3d20ac3d20ad3d6a21ae3d20ad3d20ae3d6a21af3d20ae3d20af3d" + "6a21b03d20af3d20b03d6a21b13d20b03d20b13d6a21b23d20b13d20b23d6a21b33d20b23d20b33d6a21b43d20b33d" + "20b43d6a21b53d20b43d20b53d6a21b63d20b53d20b63d6a21b73d20b63d20b73d6a21b83d20b73d20b83d6a21b93d" + "20b83d20b93d6a21ba3d20b93d20ba3d6a21bb3d20ba3d20bb3d6a21bc3d20bb3d20bc3d6a21bd3d20bc3d20bd3d6a" + "21be3d20bd3d20be3d6a21bf3d20be3d20bf3d6a21c03d20bf3d20c03d6a21c13d20c03d20c13d6a21c23d20c13d20" + "c23d6a21c33d20c23d20c33d6a21c43d20c33d20c43d6a21c53d20c43d20c53d6a21c63d20c53d20c63d6a21c73d20" + "c63d20c73d6a21c83d20c73d20c83d6a21c93d20c83d20c93d6a21ca3d20c93d20ca3d6a21cb3d20ca3d20cb3d6a21" + "cc3d20cb3d20cc3d6a21cd3d20cc3d20cd3d6a21ce3d20cd3d20ce3d6a21cf3d20ce3d20cf3d6a21d03d20cf3d20d0" + "3d6a21d13d20d03d20d13d6a21d23d20d13d20d23d6a21d33d20d23d20d33d6a21d43d20d33d20d43d6a21d53d20d4" + "3d20d53d6a21d63d20d53d20d63d6a21d73d20d63d20d73d6a21d83d20d73d20d83d6a21d93d20d83d20d93d6a21da" + "3d20d93d20da3d6a21db3d20da3d20db3d6a21dc3d20db3d20dc3d6a21dd3d20dc3d20dd3d6a21de3d20dd3d20de3d" + "6a21df3d20de3d20df3d6a21e03d20df3d20e03d6a21e13d20e03d20e13d6a21e23d20e13d20e23d6a21e33d20e23d" + "20e33d6a21e43d20e33d20e43d6a21e53d20e43d20e53d6a21e63d20e53d20e63d6a21e73d20e63d20e73d6a21e83d" + "20e73d20e83d6a21e93d20e83d20e93d6a21ea3d20e93d20ea3d6a21eb3d20ea3d20eb3d6a21ec3d20eb3d20ec3d6a" + "21ed3d20ec3d20ed3d6a21ee3d20ed3d20ee3d6a21ef3d20ee3d20ef3d6a21f03d20ef3d20f03d6a21f13d20f03d20" + "f13d6a21f23d20f13d20f23d6a21f33d20f23d20f33d6a21f43d20f33d20f43d6a21f53d20f43d20f53d6a21f63d20" + "f53d20f63d6a21f73d20f63d20f73d6a21f83d20f73d20f83d6a21f93d20f83d20f93d6a21fa3d20f93d20fa3d6a21" + "fb3d20fa3d20fb3d6a21fc3d20fb3d20fc3d6a21fd3d20fc3d20fd3d6a21fe3d20fd3d20fe3d6a21ff3d20fe3d20ff" + "3d6a21803e20ff3d20803e6a21813e20803e20813e6a21823e20813e20823e6a21833e20823e20833e6a21843e2083" + "3e20843e6a21853e20843e20853e6a21863e20853e20863e6a21873e20863e20873e6a21883e20873e20883e6a2189" + "3e20883e20893e6a218a3e20893e208a3e6a218b3e208a3e208b3e6a218c3e208b3e208c3e6a218d3e208c3e208d3e" + "6a218e3e208d3e208e3e6a218f3e208e3e208f3e6a21903e208f3e20903e6a21913e20903e20913e6a21923e20913e" + "20923e6a21933e20923e20933e6a21943e20933e20943e6a21953e20943e20953e6a21963e20953e20963e6a21973e" + "20963e20973e6a21983e20973e20983e6a21993e20983e20993e6a219a3e20993e209a3e6a219b3e209a3e209b3e6a" + "219c3e209b3e209c3e6a219d3e209c3e209d3e6a219e3e209d3e209e3e6a219f3e209e3e209f3e6a21a03e209f3e20" + "a03e6a21a13e20a03e20a13e6a21a23e20a13e20a23e6a21a33e20a23e20a33e6a21a43e20a33e20a43e6a21a53e20" + "a43e20a53e6a21a63e20a53e20a63e6a21a73e20a63e20a73e6a21a83e20a73e20a83e6a21a93e20a83e20a93e6a21" + "aa3e20a93e20aa3e6a21ab3e20aa3e20ab3e6a21ac3e20ab3e20ac3e6a21ad3e20ac3e20ad3e6a21ae3e20ad3e20ae" + "3e6a21af3e20ae3e20af3e6a21b03e20af3e20b03e6a21b13e20b03e20b13e6a21b23e20b13e20b23e6a21b33e20b2" + "3e20b33e6a21b43e20b33e20b43e6a21b53e20b43e20b53e6a21b63e20b53e20b63e6a21b73e20b63e20b73e6a21b8" + "3e20b73e20b83e6a21b93e20b83e20b93e6a21ba3e20b93e20ba3e6a21bb3e20ba3e20bb3e6a21bc3e20bb3e20bc3e" + "6a21bd3e20bc3e20bd3e6a21be3e20bd3e20be3e6a21bf3e20be3e20bf3e6a21c03e20bf3e20c03e6a21c13e20c03e" + "20c13e6a21c23e20c13e20c23e6a21c33e20c23e20c33e6a21c43e20c33e20c43e6a21c53e20c43e20c53e6a21c63e" + "20c53e20c63e6a21c73e20c63e20c73e6a21c83e20c73e20c83e6a21c93e20c83e20c93e6a21ca3e20c93e20ca3e6a" + "21cb3e20ca3e20cb3e6a21cc3e20cb3e20cc3e6a21cd3e20cc3e20cd3e6a21ce3e20cd3e20ce3e6a21cf3e20ce3e20" + "cf3e6a21d03e20cf3e20d03e6a21d13e20d03e20d13e6a21d23e20d13e20d23e6a21d33e20d23e20d33e6a21d43e20" + "d33e20d43e6a21d53e20d43e20d53e6a21d63e20d53e20d63e6a21d73e20d63e20d73e6a21d83e20d73e20d83e6a21" + "d93e20d83e20d93e6a21da3e20d93e20da3e6a21db3e20da3e20db3e6a21dc3e20db3e20dc3e6a21dd3e20dc3e20dd" + "3e6a21de3e20dd3e20de3e6a21df3e20de3e20df3e6a21e03e20df3e20e03e6a21e13e20e03e20e13e6a21e23e20e1" + "3e20e23e6a21e33e20e23e20e33e6a21e43e20e33e20e43e6a21e53e20e43e20e53e6a21e63e20e53e20e63e6a21e7" + "3e20e63e20e73e6a21e83e20e73e20e83e6a21e93e20e83e20e93e6a21ea3e20e93e20ea3e6a21eb3e20ea3e20eb3e" + "6a21ec3e20eb3e20ec3e6a21ed3e20ec3e20ed3e6a21ee3e20ed3e20ee3e6a21ef3e20ee3e20ef3e6a21f03e20ef3e" + "20f03e6a21f13e20f03e20f13e6a21f23e20f13e20f23e6a21f33e20f23e20f33e6a21f43e20f33e20f43e6a21f53e" + "20f43e20f53e6a21f63e20f53e20f63e6a21f73e20f63e20f73e6a21f83e20f73e20f83e6a21f93e20f83e20f93e6a" + "21fa3e20f93e20fa3e6a21fb3e20fa3e20fb3e6a21fc3e20fb3e20fc3e6a21fd3e20fc3e20fd3e6a21fe3e20fd3e20" + "fe3e6a21ff3e20fe3e20ff3e6a21803f20ff3e20803f6a21813f20803f20813f6a21823f20813f20823f6a21833f20" + "823f20833f6a21843f20833f20843f6a21853f20843f20853f6a21863f20853f20863f6a21873f20863f20873f6a21" "883f20873f20883f6a21893f20883f20893f6a218a3f20893f208a3f6a218b3f208a3f208b3f6a218c3f208b3f208c" - "3f6a218d3f208c3f208d" - "3f6a218e3f208d3f208e3f6a218f3f208e3f208f3f6a21903f208f3f20903f6a21913f20903f20913f6a21923f2091" - "3f20923f6a21933f2092" - "3f20933f6a21943f20933f20943f6a21953f20943f20953f6a21963f20953f20963f6a21973f20963f20973f6a2198" - "3f20973f20983f6a2199" - "3f20983f20993f6a219a3f20993f209a3f6a219b3f209a3f209b3f6a219c3f209b3f209c3f6a219d3f209c3f209d3f" - "6a219e3f209d3f209e3f" - "6a219f3f209e3f209f3f6a21a03f209f3f20a03f6a21a13f20a03f20a13f6a21a23f20a13f20a23f6a21a33f20a23f" - "20a33f6a21a43f20a33f" - "20a43f6a21a53f20a43f20a53f6a21a63f20a53f20a63f6a21a73f20a63f20a73f6a21a83f20a73f20a83f6a21a93f" - "20a83f20a93f6a21aa3f" - "20a93f20aa3f6a21ab3f20aa3f20ab3f6a21ac3f20ab3f20ac3f6a21ad3f20ac3f20ad3f6a21ae3f20ad3f20ae3f6a" - "21af3f20ae3f20af3f6a" - "21b03f20af3f20b03f6a21b13f20b03f20b13f6a21b23f20b13f20b23f6a21b33f20b23f20b33f6a21b43f20b33f20" - "b43f6a21b53f20b43f20" - "b53f6a21b63f20b53f20b63f6a21b73f20b63f20b73f6a21b83f20b73f20b83f6a21b93f20b83f20b93f6a21ba3f20" - "b93f20ba3f6a21bb3f20" - "ba3f20bb3f6a21bc3f20bb3f20bc3f6a21bd3f20bc3f20bd3f6a21be3f20bd3f20be3f6a21bf3f20be3f20bf3f6a21" - "c03f20bf3f20c03f6a21" - "c13f20c03f20c13f6a21c23f20c13f20c23f6a21c33f20c23f20c33f6a21c43f20c33f20c43f6a21c53f20c43f20c5" - "3f6a21c63f20c53f20c6" - "3f6a21c73f20c63f20c73f6a21c83f20c73f20c83f6a21c93f20c83f20c93f6a21ca3f20c93f20ca3f6a21cb3f20ca" - "3f20cb3f6a21cc3f20cb" - "3f20cc3f6a21cd3f20cc3f20cd3f6a21ce3f20cd3f20ce3f6a21cf3f20ce3f20cf3f6a21d03f20cf3f20d03f6a21d1" - "3f20d03f20d13f6a21d2" - "3f20d13f20d23f6a21d33f20d23f20d33f6a21d43f20d33f20d43f6a21d53f20d43f20d53f6a21d63f20d53f20d63f" - "6a21d73f20d63f20d73f" - "6a21d83f20d73f20d83f6a21d93f20d83f20d93f6a21da3f20d93f20da3f6a21db3f20da3f20db3f6a21dc3f20db3f" - "20dc3f6a21dd3f20dc3f" - "20dd3f6a21de3f20dd3f20de3f6a21df3f20de3f20df3f6a21e03f20df3f20e03f6a21e13f20e03f20e13f6a21e23f" - "20e13f20e23f6a21e33f" - "20e23f20e33f6a21e43f20e33f20e43f6a21e53f20e43f20e53f6a21e63f20e53f20e63f6a21e73f20e63f20e73f6a" - "21e83f20e73f20e83f6a" - "21e93f20e83f20e93f6a21ea3f20e93f20ea3f6a21eb3f20ea3f20eb3f6a21ec3f20eb3f20ec3f6a21ed3f20ec3f20" - "ed3f6a21ee3f20ed3f20" - "ee3f6a21ef3f20ee3f20ef3f6a21f03f20ef3f20f03f6a21f13f20f03f20f13f6a21f23f20f13f20f23f6a21f33f20" - "f23f20f33f6a21f43f20" - "f33f20f43f6a21f53f20f43f20f53f6a21f63f20f53f20f63f6a21f73f20f63f20f73f6a21f83f20f73f20f83f6a21" - "f93f20f83f20f93f6a21" - "fa3f20f93f20fa3f6a21fb3f20fa3f20fb3f6a21fc3f20fb3f20fc3f6a21fd3f20fc3f20fd3f6a21fe3f20fd3f20fe" - "3f6a21ff3f20fe3f20ff" - "3f6a21804020ff3f2080406a2181402080402081406a2182402081402082406a2183402082402083406a2184402083" - "402084406a2185402084" - "402085406a2186402085402086406a2187402086402087406a2188402087402088406a2189402088402089406a218a" - "40208940208a406a218b" - "40208a40208b406a218c40208b40208c406a218d40208c40208d406a218e40208d40208e406a218f40208e40208f40" - "6a219040208f40209040" - "6a2191402090402091406a2192402091402092406a2193402092402093406a2194402093402094406a219540209440" - "2095406a219640209540" - "2096406a2197402096402097406a2198402097402098406a2199402098402099406a219a40209940209a406a219b40" - "209a40209b406a219c40" - "209b40209c406a219d40209c40209d406a219e40209d40209e406a219f40209e40209f406a21a040209f4020a0406a" - "21a14020a04020a1406a" - "21a24020a14020a2406a21a34020a24020a3406a21a44020a34020a4406a21a54020a44020a5406a21a64020a54020" - "a6406a21a74020a64020" - "a7406a21a84020a74020a8406a21a94020a84020a9406a21aa4020a94020aa406a21ab4020aa4020ab406a21ac4020" - "ab4020ac406a21ad4020" - "ac4020ad406a21ae4020ad4020ae406a21af4020ae4020af406a21b04020af4020b0406a21b14020b04020b1406a21" - "b24020b14020b2406a21" - "b34020b24020b3406a21b44020b34020b4406a21b54020b44020b5406a21b64020b54020b6406a21b74020b64020b7" - "406a21b84020b74020b8" - "406a21b94020b84020b9406a21ba4020b94020ba406a21bb4020ba4020bb406a21bc4020bb4020bc406a21bd4020bc" - "4020bd406a21be4020bd" - "4020be406a21bf4020be4020bf406a21c04020bf4020c0406a21c14020c04020c1406a21c24020c14020c2406a21c3" - "4020c24020c3406a21c4" - "4020c34020c4406a21c54020c44020c5406a21c64020c54020c6406a21c74020c64020c7406a21c84020c74020c840" - "6a21c94020c84020c940" - "6a21ca4020c94020ca406a21cb4020ca4020cb406a21cc4020cb4020cc406a21cd4020cc4020cd406a21ce4020cd40" - "20ce406a21cf4020ce40" - "20cf406a21d04020cf4020d0406a21d14020d04020d1406a21d24020d14020d2406a21d34020d24020d3406a21d440" - "20d34020d4406a21d540" - "20d44020d5406a21d64020d54020d6406a21d74020d64020d7406a21d84020d74020d8406a21d94020d84020d9406a" - "21da4020d94020da406a" - "21db4020da4020db406a21dc4020db4020dc406a21dd4020dc4020dd406a21de4020dd4020de406a21df4020de4020" - "df406a21e04020df4020" - "e0406a21e14020e04020e1406a21e24020e14020e2406a21e34020e24020e3406a21e44020e34020e4406a21e54020" - "e44020e5406a21e64020" - "e54020e6406a21e74020e64020e7406a21e84020e74020e8406a21e94020e84020e9406a21ea4020e94020ea406a21" - "eb4020ea4020eb406a21" - "ec4020eb4020ec406a21ed4020ec4020ed406a21ee4020ed4020ee406a21ef4020ee4020ef406a21f04020ef4020f0" - "406a21f14020f04020f1" - "406a21f24020f14020f2406a21f34020f24020f3406a21f44020f34020f4406a21f54020f44020f5406a21f64020f5" - "4020f6406a21f74020f6" - "4020f7406a21f84020f74020f8406a21f94020f84020f9406a21fa4020f94020fa406a21fb4020fa4020fb406a21fc" - "4020fb4020fc406a21fd" - "4020fc4020fd406a21fe4020fd4020fe406a21ff4020fe4020ff406a21804120ff402080416a218141208041208141" - "6a218241208141208241" - "6a2183412082412083416a2184412083412084416a2185412084412085416a2186412085412086416a218741208641" - "2087416a218841208741" - "2088416a2189412088412089416a218a41208941208a416a218b41208a41208b416a218c41208b41208c416a218d41" - "208c41208d416a218e41" - "208d41208e416a218f41208e41208f416a219041208f412090416a2191412090412091416a2192412091412092416a" - "2193412092412093416a" + "3f6a218d3f208c3f208d3f6a218e3f208d3f208e3f6a218f3f208e3f208f3f6a21903f208f3f20903f6a21913f2090" + "3f20913f6a21923f20913f20923f6a21933f20923f20933f6a21943f20933f20943f6a21953f20943f20953f6a2196" + "3f20953f20963f6a21973f20963f20973f6a21983f20973f20983f6a21993f20983f20993f6a219a3f20993f209a3f" + "6a219b3f209a3f209b3f6a219c3f209b3f209c3f6a219d3f209c3f209d3f6a219e3f209d3f209e3f6a219f3f209e3f" + "209f3f6a21a03f209f3f20a03f6a21a13f20a03f20a13f6a21a23f20a13f20a23f6a21a33f20a23f20a33f6a21a43f" + "20a33f20a43f6a21a53f20a43f20a53f6a21a63f20a53f20a63f6a21a73f20a63f20a73f6a21a83f20a73f20a83f6a" + "21a93f20a83f20a93f6a21aa3f20a93f20aa3f6a21ab3f20aa3f20ab3f6a21ac3f20ab3f20ac3f6a21ad3f20ac3f20" + "ad3f6a21ae3f20ad3f20ae3f6a21af3f20ae3f20af3f6a21b03f20af3f20b03f6a21b13f20b03f20b13f6a21b23f20" + "b13f20b23f6a21b33f20b23f20b33f6a21b43f20b33f20b43f6a21b53f20b43f20b53f6a21b63f20b53f20b63f6a21" + "b73f20b63f20b73f6a21b83f20b73f20b83f6a21b93f20b83f20b93f6a21ba3f20b93f20ba3f6a21bb3f20ba3f20bb" + "3f6a21bc3f20bb3f20bc3f6a21bd3f20bc3f20bd3f6a21be3f20bd3f20be3f6a21bf3f20be3f20bf3f6a21c03f20bf" + "3f20c03f6a21c13f20c03f20c13f6a21c23f20c13f20c23f6a21c33f20c23f20c33f6a21c43f20c33f20c43f6a21c5" + "3f20c43f20c53f6a21c63f20c53f20c63f6a21c73f20c63f20c73f6a21c83f20c73f20c83f6a21c93f20c83f20c93f" + "6a21ca3f20c93f20ca3f6a21cb3f20ca3f20cb3f6a21cc3f20cb3f20cc3f6a21cd3f20cc3f20cd3f6a21ce3f20cd3f" + "20ce3f6a21cf3f20ce3f20cf3f6a21d03f20cf3f20d03f6a21d13f20d03f20d13f6a21d23f20d13f20d23f6a21d33f" + "20d23f20d33f6a21d43f20d33f20d43f6a21d53f20d43f20d53f6a21d63f20d53f20d63f6a21d73f20d63f20d73f6a" + "21d83f20d73f20d83f6a21d93f20d83f20d93f6a21da3f20d93f20da3f6a21db3f20da3f20db3f6a21dc3f20db3f20" + "dc3f6a21dd3f20dc3f20dd3f6a21de3f20dd3f20de3f6a21df3f20de3f20df3f6a21e03f20df3f20e03f6a21e13f20" + "e03f20e13f6a21e23f20e13f20e23f6a21e33f20e23f20e33f6a21e43f20e33f20e43f6a21e53f20e43f20e53f6a21" + "e63f20e53f20e63f6a21e73f20e63f20e73f6a21e83f20e73f20e83f6a21e93f20e83f20e93f6a21ea3f20e93f20ea" + "3f6a21eb3f20ea3f20eb3f6a21ec3f20eb3f20ec3f6a21ed3f20ec3f20ed3f6a21ee3f20ed3f20ee3f6a21ef3f20ee" + "3f20ef3f6a21f03f20ef3f20f03f6a21f13f20f03f20f13f6a21f23f20f13f20f23f6a21f33f20f23f20f33f6a21f4" + "3f20f33f20f43f6a21f53f20f43f20f53f6a21f63f20f53f20f63f6a21f73f20f63f20f73f6a21f83f20f73f20f83f" + "6a21f93f20f83f20f93f6a21fa3f20f93f20fa3f6a21fb3f20fa3f20fb3f6a21fc3f20fb3f20fc3f6a21fd3f20fc3f" + "20fd3f6a21fe3f20fd3f20fe3f6a21ff3f20fe3f20ff3f6a21804020ff3f2080406a2181402080402081406a218240" + "2081402082406a2183402082402083406a2184402083402084406a2185402084402085406a2186402085402086406a" + "2187402086402087406a2188402087402088406a2189402088402089406a218a40208940208a406a218b40208a4020" + "8b406a218c40208b40208c406a218d40208c40208d406a218e40208d40208e406a218f40208e40208f406a21904020" + "8f402090406a2191402090402091406a2192402091402092406a2193402092402093406a2194402093402094406a21" + "95402094402095406a2196402095402096406a2197402096402097406a2198402097402098406a2199402098402099" + "406a219a40209940209a406a219b40209a40209b406a219c40209b40209c406a219d40209c40209d406a219e40209d" + "40209e406a219f40209e40209f406a21a040209f4020a0406a21a14020a04020a1406a21a24020a14020a2406a21a3" + "4020a24020a3406a21a44020a34020a4406a21a54020a44020a5406a21a64020a54020a6406a21a74020a64020a740" + "6a21a84020a74020a8406a21a94020a84020a9406a21aa4020a94020aa406a21ab4020aa4020ab406a21ac4020ab40" + "20ac406a21ad4020ac4020ad406a21ae4020ad4020ae406a21af4020ae4020af406a21b04020af4020b0406a21b140" + "20b04020b1406a21b24020b14020b2406a21b34020b24020b3406a21b44020b34020b4406a21b54020b44020b5406a" + "21b64020b54020b6406a21b74020b64020b7406a21b84020b74020b8406a21b94020b84020b9406a21ba4020b94020" + "ba406a21bb4020ba4020bb406a21bc4020bb4020bc406a21bd4020bc4020bd406a21be4020bd4020be406a21bf4020" + "be4020bf406a21c04020bf4020c0406a21c14020c04020c1406a21c24020c14020c2406a21c34020c24020c3406a21" + "c44020c34020c4406a21c54020c44020c5406a21c64020c54020c6406a21c74020c64020c7406a21c84020c74020c8" + "406a21c94020c84020c9406a21ca4020c94020ca406a21cb4020ca4020cb406a21cc4020cb4020cc406a21cd4020cc" + "4020cd406a21ce4020cd4020ce406a21cf4020ce4020cf406a21d04020cf4020d0406a21d14020d04020d1406a21d2" + "4020d14020d2406a21d34020d24020d3406a21d44020d34020d4406a21d54020d44020d5406a21d64020d54020d640" + "6a21d74020d64020d7406a21d84020d74020d8406a21d94020d84020d9406a21da4020d94020da406a21db4020da40" + "20db406a21dc4020db4020dc406a21dd4020dc4020dd406a21de4020dd4020de406a21df4020de4020df406a21e040" + "20df4020e0406a21e14020e04020e1406a21e24020e14020e2406a21e34020e24020e3406a21e44020e34020e4406a" + "21e54020e44020e5406a21e64020e54020e6406a21e74020e64020e7406a21e84020e74020e8406a21e94020e84020" + "e9406a21ea4020e94020ea406a21eb4020ea4020eb406a21ec4020eb4020ec406a21ed4020ec4020ed406a21ee4020" + "ed4020ee406a21ef4020ee4020ef406a21f04020ef4020f0406a21f14020f04020f1406a21f24020f14020f2406a21" + "f34020f24020f3406a21f44020f34020f4406a21f54020f44020f5406a21f64020f54020f6406a21f74020f64020f7" + "406a21f84020f74020f8406a21f94020f84020f9406a21fa4020f94020fa406a21fb4020fa4020fb406a21fc4020fb" + "4020fc406a21fd4020fc4020fd406a21fe4020fd4020fe406a21ff4020fe4020ff406a21804120ff402080416a2181" + "412080412081416a2182412081412082416a2183412082412083416a2184412083412084416a218541208441208541" + "6a2186412085412086416a2187412086412087416a2188412087412088416a2189412088412089416a218a41208941" + "208a416a218b41208a41208b416a218c41208b41208c416a218d41208c41208d416a218e41208d41208e416a218f41" + "208e41208f416a219041208f412090416a2191412090412091416a2192412091412092416a2193412092412093416a" "2194412093412094416a2195412094412095416a2196412095412096416a2197412096412097416a21984120974120" - "98416a21994120984120" - "99416a219a41209941209a416a219b41209a41209b416a219c41209b41209c416a219d41209c41209d416a219e4120" - "9d41209e416a219f4120" - "9e41209f416a21a041209f4120a0416a21a14120a04120a1416a21a24120a14120a2416a21a34120a24120a3416a21" - "a44120a34120a4416a21" - "a54120a44120a5416a21a64120a54120a6416a21a74120a64120a7416a21a84120a74120a8416a21a94120a84120a9" - "416a21aa4120a94120aa" - "416a21ab4120aa4120ab416a21ac4120ab4120ac416a21ad4120ac4120ad416a21ae4120ad4120ae416a21af4120ae" - "4120af416a21b04120af" - "4120b0416a21b14120b04120b1416a21b24120b14120b2416a21b34120b24120b3416a21b44120b34120b4416a21b5" - "4120b44120b5416a21b6" - "4120b54120b6416a21b74120b64120b7416a21b84120b74120b8416a21b94120b84120b9416a21ba4120b94120ba41" - "6a21bb4120ba4120bb41" - "6a21bc4120bb4120bc416a21bd4120bc4120bd416a21be4120bd4120be416a21bf4120be4120bf416a21c04120bf41" - "20c0416a21c14120c041" - "20c1416a21c24120c14120c2416a21c34120c24120c3416a21c44120c34120c4416a21c54120c44120c5416a21c641" - "20c54120c6416a21c741" - "20c64120c7416a21c84120c74120c8416a21c94120c84120c9416a21ca4120c94120ca416a21cb4120ca4120cb416a" - "21cc4120cb4120cc416a" - "21cd4120cc4120cd416a21ce4120cd4120ce416a21cf4120ce4120cf416a21d04120cf4120d0416a21d14120d04120" - "d1416a21d24120d14120" - "d2416a21d34120d24120d3416a21d44120d34120d4416a21d54120d44120d5416a21d64120d54120d6416a21d74120" - "d64120d7416a21d84120" - "d74120d8416a21d94120d84120d9416a21da4120d94120da416a21db4120da4120db416a21dc4120db4120dc416a21" - "dd4120dc4120dd416a21" - "de4120dd4120de416a21df4120de4120df416a21e04120df4120e0416a21e14120e04120e1416a21e24120e14120e2" - "416a21e34120e24120e3" - "416a21e44120e34120e4416a21e54120e44120e5416a21e64120e54120e6416a21e74120e64120e7416a21e84120e7" - "4120e8416a21e94120e8" - "4120e9416a21ea4120e94120ea416a21eb4120ea4120eb416a21ec4120eb4120ec416a21ed4120ec4120ed416a21ee" - "4120ed4120ee416a21ef" - "4120ee4120ef416a21f04120ef4120f0416a21f14120f04120f1416a21f24120f14120f2416a21f34120f24120f341" - "6a21f44120f34120f441" - "6a21f54120f44120f5416a21f64120f54120f6416a21f74120f64120f7416a21f84120f74120f8416a21f94120f841" - "20f9416a21fa4120f941" - "20fa416a21fb4120fa4120fb416a21fc4120fb4120fc416a21fd4120fc4120fd416a21fe4120fd4120fe416a21ff41" - "20fe4120ff416a218042" - "20ff412080426a2181422080422081426a2182422081422082426a2183422082422083426a2184422083422084426a" - "2185422084422085426a" - "2186422085422086426a2187422086422087426a2188422087422088426a2189422088422089426a218a4220894220" - "8a426a218b42208a4220" - "8b426a218c42208b42208c426a218d42208c42208d426a218e42208d42208e426a218f42208e42208f426a21904220" - "8f422090426a21914220" - "90422091426a2192422091422092426a2193422092422093426a2194422093422094426a2195422094422095426a21" - "96422095422096426a21" - "97422096422097426a2198422097422098426a2199422098422099426a219a42209942209a426a219b42209a42209b" - "426a219c42209b42209c" - "426a219d42209c42209d426a219e42209d42209e426a219f42209e42209f426a21a042209f4220a0426a21a14220a0" - "4220a1426a21a24220a1" - "4220a2426a21a34220a24220a3426a21a44220a34220a4426a21a54220a44220a5426a21a64220a54220a6426a21a7" - "4220a64220a7426a21a8" - "4220a74220a8426a21a94220a84220a9426a21aa4220a94220aa426a21ab4220aa4220ab426a21ac4220ab4220ac42" - "6a21ad4220ac4220ad42" - "6a21ae4220ad4220ae426a21af4220ae4220af426a21b04220af4220b0426a21b14220b04220b1426a21b24220b142" - "20b2426a21b34220b242" - "20b3426a21b44220b34220b4426a21b54220b44220b5426a21b64220b54220b6426a21b74220b64220b7426a21b842" - "20b74220b8426a21b942" - "20b84220b9426a21ba4220b94220ba426a21bb4220ba4220bb426a21bc4220bb4220bc426a21bd4220bc4220bd426a" - "21be4220bd4220be426a" - "21bf4220be4220bf426a21c04220bf4220c0426a21c14220c04220c1426a21c24220c14220c2426a21c34220c24220" - "c3426a21c44220c34220" - "c4426a21c54220c44220c5426a21c64220c54220c6426a21c74220c64220c7426a21c84220c74220c8426a21c94220" - "c84220c9426a21ca4220" - "c94220ca426a21cb4220ca4220cb426a21cc4220cb4220cc426a21cd4220cc4220cd426a21ce4220cd4220ce426a21" - "cf4220ce4220cf426a21" - "d04220cf4220d0426a21d14220d04220d1426a21d24220d14220d2426a21d34220d24220d3426a21d44220d34220d4" - "426a21d54220d44220d5" - "426a21d64220d54220d6426a21d74220d64220d7426a21d84220d74220d8426a21d94220d84220d9426a21da4220d9" - "4220da426a21db4220da" - "4220db426a21dc4220db4220dc426a21dd4220dc4220dd426a21de4220dd4220de426a21df4220de4220df426a21e0" - "4220df4220e0426a21e1" - "4220e04220e1426a21e24220e14220e2426a21e34220e24220e3426a21e44220e34220e4426a21e54220e44220e542" - "6a21e64220e54220e642" - "6a21e74220e64220e7426a21e84220e74220e8426a21e94220e84220e9426a21ea4220e94220ea426a21eb4220ea42" - "20eb426a21ec4220eb42" - "20ec426a21ed4220ec4220ed426a21ee4220ed4220ee426a21ef4220ee4220ef426a21f04220ef4220f0426a21f142" - "20f04220f1426a21f242" - "20f14220f2426a21f34220f24220f3426a21f44220f34220f4426a21f54220f44220f5426a21f64220f54220f6426a" - "21f74220f64220f7426a" - "21f84220f74220f8426a21f94220f84220f9426a21fa4220f94220fa426a21fb4220fa4220fb426a21fc4220fb4220" - "fc426a21fd4220fc4220" - "fd426a21fe4220fd4220fe426a21ff4220fe4220ff426a21804320ff422080436a2181432080432081436a21824320" - "81432082436a21834320" - "82432083436a2184432083432084436a2185432084432085436a2186432085432086436a2187432086432087436a21" - "88432087432088436a21" - "89432088432089436a218a43208943208a436a218b43208a43208b436a218c43208b43208c436a218d43208c43208d" - "436a218e43208d43208e" - "436a218f43208e43208f436a219043208f432090436a2191432090432091436a2192432091432092436a2193432092" - "432093436a2194432093" - "432094436a2195432094432095436a2196432095432096436a2197432096432097436a2198432097432098436a2199" - "432098432099436a219a" - "43209943209a436a219b43209a43209b436a219c43209b43209c436a219d43209c43209d436a219e43209d43209e43" - "6a219f43209e43209f43" + "98416a2199412098412099416a219a41209941209a416a219b41209a41209b416a219c41209b41209c416a219d4120" + "9c41209d416a219e41209d41209e416a219f41209e41209f416a21a041209f4120a0416a21a14120a04120a1416a21" + "a24120a14120a2416a21a34120a24120a3416a21a44120a34120a4416a21a54120a44120a5416a21a64120a54120a6" + "416a21a74120a64120a7416a21a84120a74120a8416a21a94120a84120a9416a21aa4120a94120aa416a21ab4120aa" + "4120ab416a21ac4120ab4120ac416a21ad4120ac4120ad416a21ae4120ad4120ae416a21af4120ae4120af416a21b0" + "4120af4120b0416a21b14120b04120b1416a21b24120b14120b2416a21b34120b24120b3416a21b44120b34120b441" + "6a21b54120b44120b5416a21b64120b54120b6416a21b74120b64120b7416a21b84120b74120b8416a21b94120b841" + "20b9416a21ba4120b94120ba416a21bb4120ba4120bb416a21bc4120bb4120bc416a21bd4120bc4120bd416a21be41" + "20bd4120be416a21bf4120be4120bf416a21c04120bf4120c0416a21c14120c04120c1416a21c24120c14120c2416a" + "21c34120c24120c3416a21c44120c34120c4416a21c54120c44120c5416a21c64120c54120c6416a21c74120c64120" + "c7416a21c84120c74120c8416a21c94120c84120c9416a21ca4120c94120ca416a21cb4120ca4120cb416a21cc4120" + "cb4120cc416a21cd4120cc4120cd416a21ce4120cd4120ce416a21cf4120ce4120cf416a21d04120cf4120d0416a21" + "d14120d04120d1416a21d24120d14120d2416a21d34120d24120d3416a21d44120d34120d4416a21d54120d44120d5" + "416a21d64120d54120d6416a21d74120d64120d7416a21d84120d74120d8416a21d94120d84120d9416a21da4120d9" + "4120da416a21db4120da4120db416a21dc4120db4120dc416a21dd4120dc4120dd416a21de4120dd4120de416a21df" + "4120de4120df416a21e04120df4120e0416a21e14120e04120e1416a21e24120e14120e2416a21e34120e24120e341" + "6a21e44120e34120e4416a21e54120e44120e5416a21e64120e54120e6416a21e74120e64120e7416a21e84120e741" + "20e8416a21e94120e84120e9416a21ea4120e94120ea416a21eb4120ea4120eb416a21ec4120eb4120ec416a21ed41" + "20ec4120ed416a21ee4120ed4120ee416a21ef4120ee4120ef416a21f04120ef4120f0416a21f14120f04120f1416a" + "21f24120f14120f2416a21f34120f24120f3416a21f44120f34120f4416a21f54120f44120f5416a21f64120f54120" + "f6416a21f74120f64120f7416a21f84120f74120f8416a21f94120f84120f9416a21fa4120f94120fa416a21fb4120" + "fa4120fb416a21fc4120fb4120fc416a21fd4120fc4120fd416a21fe4120fd4120fe416a21ff4120fe4120ff416a21" + "804220ff412080426a2181422080422081426a2182422081422082426a2183422082422083426a2184422083422084" + "426a2185422084422085426a2186422085422086426a2187422086422087426a2188422087422088426a2189422088" + "422089426a218a42208942208a426a218b42208a42208b426a218c42208b42208c426a218d42208c42208d426a218e" + "42208d42208e426a218f42208e42208f426a219042208f422090426a2191422090422091426a219242209142209242" + "6a2193422092422093426a2194422093422094426a2195422094422095426a2196422095422096426a219742209642" + "2097426a2198422097422098426a2199422098422099426a219a42209942209a426a219b42209a42209b426a219c42" + "209b42209c426a219d42209c42209d426a219e42209d42209e426a219f42209e42209f426a21a042209f4220a0426a" + "21a14220a04220a1426a21a24220a14220a2426a21a34220a24220a3426a21a44220a34220a4426a21a54220a44220" + "a5426a21a64220a54220a6426a21a74220a64220a7426a21a84220a74220a8426a21a94220a84220a9426a21aa4220" + "a94220aa426a21ab4220aa4220ab426a21ac4220ab4220ac426a21ad4220ac4220ad426a21ae4220ad4220ae426a21" + "af4220ae4220af426a21b04220af4220b0426a21b14220b04220b1426a21b24220b14220b2426a21b34220b24220b3" + "426a21b44220b34220b4426a21b54220b44220b5426a21b64220b54220b6426a21b74220b64220b7426a21b84220b7" + "4220b8426a21b94220b84220b9426a21ba4220b94220ba426a21bb4220ba4220bb426a21bc4220bb4220bc426a21bd" + "4220bc4220bd426a21be4220bd4220be426a21bf4220be4220bf426a21c04220bf4220c0426a21c14220c04220c142" + "6a21c24220c14220c2426a21c34220c24220c3426a21c44220c34220c4426a21c54220c44220c5426a21c64220c542" + "20c6426a21c74220c64220c7426a21c84220c74220c8426a21c94220c84220c9426a21ca4220c94220ca426a21cb42" + "20ca4220cb426a21cc4220cb4220cc426a21cd4220cc4220cd426a21ce4220cd4220ce426a21cf4220ce4220cf426a" + "21d04220cf4220d0426a21d14220d04220d1426a21d24220d14220d2426a21d34220d24220d3426a21d44220d34220" + "d4426a21d54220d44220d5426a21d64220d54220d6426a21d74220d64220d7426a21d84220d74220d8426a21d94220" + "d84220d9426a21da4220d94220da426a21db4220da4220db426a21dc4220db4220dc426a21dd4220dc4220dd426a21" + "de4220dd4220de426a21df4220de4220df426a21e04220df4220e0426a21e14220e04220e1426a21e24220e14220e2" + "426a21e34220e24220e3426a21e44220e34220e4426a21e54220e44220e5426a21e64220e54220e6426a21e74220e6" + "4220e7426a21e84220e74220e8426a21e94220e84220e9426a21ea4220e94220ea426a21eb4220ea4220eb426a21ec" + "4220eb4220ec426a21ed4220ec4220ed426a21ee4220ed4220ee426a21ef4220ee4220ef426a21f04220ef4220f042" + "6a21f14220f04220f1426a21f24220f14220f2426a21f34220f24220f3426a21f44220f34220f4426a21f54220f442" + "20f5426a21f64220f54220f6426a21f74220f64220f7426a21f84220f74220f8426a21f94220f84220f9426a21fa42" + "20f94220fa426a21fb4220fa4220fb426a21fc4220fb4220fc426a21fd4220fc4220fd426a21fe4220fd4220fe426a" + "21ff4220fe4220ff426a21804320ff422080436a2181432080432081436a2182432081432082436a21834320824320" + "83436a2184432083432084436a2185432084432085436a2186432085432086436a2187432086432087436a21884320" + "87432088436a2189432088432089436a218a43208943208a436a218b43208a43208b436a218c43208b43208c436a21" + "8d43208c43208d436a218e43208d43208e436a218f43208e43208f436a219043208f432090436a2191432090432091" + "436a2192432091432092436a2193432092432093436a2194432093432094436a2195432094432095436a2196432095" + "432096436a2197432096432097436a2198432097432098436a2199432098432099436a219a43209943209a436a219b" + "43209a43209b436a219c43209b43209c436a219d43209c43209d436a219e43209d43209e436a219f43209e43209f43" "6a21a043209f4320a0436a21a14320a04320a1436a21a24320a14320a2436a21a34320a24320a3436a21a44320a343" - "20a4436a21a54320a443" - "20a5436a21a64320a54320a6436a21a74320a64320a7436a21a84320a74320a8436a21a94320a84320a9436a21aa43" - "20a94320aa436a21ab43" - "20aa4320ab436a21ac4320ab4320ac436a21ad4320ac4320ad436a21ae4320ad4320ae436a21af4320ae4320af436a" - "21b04320af4320b0436a" - "21b14320b04320b1436a21b24320b14320b2436a21b34320b24320b3436a21b44320b34320b4436a21b54320b44320" - "b5436a21b64320b54320" - "b6436a21b74320b64320b7436a21b84320b74320b8436a21b94320b84320b9436a21ba4320b94320ba436a21bb4320" - "ba4320bb436a21bc4320" - "bb4320bc436a21bd4320bc4320bd436a21be4320bd4320be436a21bf4320be4320bf436a21c04320bf4320c0436a21" - "c14320c04320c1436a21" - "c24320c14320c2436a21c34320c24320c3436a21c44320c34320c4436a21c54320c44320c5436a21c64320c54320c6" - "436a21c74320c64320c7" - "436a21c84320c74320c8436a21c94320c84320c9436a21ca4320c94320ca436a21cb4320ca4320cb436a21cc4320cb" - "4320cc436a21cd4320cc" - "4320cd436a21ce4320cd4320ce436a21cf4320ce4320cf436a21d04320cf4320d0436a21d14320d04320d1436a21d2" - "4320d14320d2436a21d3" - "4320d24320d3436a21d44320d34320d4436a21d54320d44320d5436a21d64320d54320d6436a21d74320d64320d743" - "6a21d84320d74320d843" - "6a21d94320d84320d9436a21da4320d94320da436a21db4320da4320db436a21dc4320db4320dc436a21dd4320dc43" - "20dd436a21de4320dd43" - "20de436a21df4320de4320df436a21e04320df4320e0436a21e14320e04320e1436a21e24320e14320e2436a21e343" - "20e24320e3436a21e443" - "20e34320e4436a21e54320e44320e5436a21e64320e54320e6436a21e74320e64320e7436a21e84320e74320e8436a" - "21e94320e84320e9436a" - "21ea4320e94320ea436a21eb4320ea4320eb436a21ec4320eb4320ec436a21ed4320ec4320ed436a21ee4320ed4320" - "ee436a21ef4320ee4320" - "ef436a21f04320ef4320f0436a21f14320f04320f1436a21f24320f14320f2436a21f34320f24320f3436a21f44320" - "f34320f4436a21f54320" - "f44320f5436a21f64320f54320f6436a21f74320f64320f7436a21f84320f74320f8436a21f94320f84320f9436a21" - "fa4320f94320fa436a21" - "fb4320fa4320fb436a21fc4320fb4320fc436a21fd4320fc4320fd436a21fe4320fd4320fe436a21ff4320fe4320ff" - "436a21804420ff432080" - "446a2181442080442081446a2182442081442082446a2183442082442083446a2184442083442084446a2185442084" - "442085446a2186442085" - "442086446a2187442086442087446a2188442087442088446a2189442088442089446a218a44208944208a446a218b" - "44208a44208b446a218c" - "44208b44208c446a218d44208c44208d446a218e44208d44208e446a218f44208e44208f446a219044208f44209044" - "6a219144209044209144" - "6a2192442091442092446a2193442092442093446a2194442093442094446a2195442094442095446a219644209544" - "2096446a219744209644" - "2097446a2198442097442098446a2199442098442099446a219a44209944209a446a219b44209a44209b446a219c44" - "209b44209c446a219d44" - "209c44209d446a219e44209d44209e446a219f44209e44209f446a21a044209f4420a0446a21a14420a04420a1446a" - "21a24420a14420a2446a" - "21a34420a24420a3446a21a44420a34420a4446a21a54420a44420a5446a21a64420a54420a6446a21a74420a64420" - "a7446a21a84420a74420" - "a8446a21a94420a84420a9446a21aa4420a94420aa446a21ab4420aa4420ab446a21ac4420ab4420ac446a21ad4420" - "ac4420ad446a21ae4420" - "ad4420ae446a21af4420ae4420af446a21b04420af4420b0446a21b14420b04420b1446a21b24420b14420b2446a21" - "b34420b24420b3446a21" - "b44420b34420b4446a21b54420b44420b5446a21b64420b54420b6446a21b74420b64420b7446a21b84420b74420b8" - "446a21b94420b84420b9" - "446a21ba4420b94420ba446a21bb4420ba4420bb446a21bc4420bb4420bc446a21bd4420bc4420bd446a21be4420bd" - "4420be446a21bf4420be" - "4420bf446a21c04420bf4420c0446a21c14420c04420c1446a21c24420c14420c2446a21c34420c24420c3446a21c4" - "4420c34420c4446a21c5" - "4420c44420c5446a21c64420c54420c6446a21c74420c64420c7446a21c84420c74420c8446a21c94420c84420c944" - "6a21ca4420c94420ca44" - "6a21cb4420ca4420cb446a21cc4420cb4420cc446a21cd4420cc4420cd446a21ce4420cd4420ce446a21cf4420ce44" - "20cf446a21d04420cf44" - "20d0446a21d14420d04420d1446a21d24420d14420d2446a21d34420d24420d3446a21d44420d34420d4446a21d544" - "20d44420d5446a21d644" - "20d54420d6446a21d74420d64420d7446a21d84420d74420d8446a21d94420d84420d9446a21da4420d94420da446a" - "21db4420da4420db446a" - "21dc4420db4420dc446a21dd4420dc4420dd446a21de4420dd4420de446a21df4420de4420df446a21e04420df4420" - "e0446a21e14420e04420" - "e1446a21e24420e14420e2446a21e34420e24420e3446a21e44420e34420e4446a21e54420e44420e5446a21e64420" - "e54420e6446a21e74420" - "e64420e7446a21e84420e74420e8446a21e94420e84420e9446a21ea4420e94420ea446a21eb4420ea4420eb446a21" - "ec4420eb4420ec446a21" - "ed4420ec4420ed446a21ee4420ed4420ee446a21ef4420ee4420ef446a21f04420ef4420f0446a21f14420f04420f1" - "446a21f24420f14420f2" - "446a21f34420f24420f3446a21f44420f34420f4446a21f54420f44420f5446a21f64420f54420f6446a21f74420f6" - "4420f7446a21f84420f7" - "4420f8446a21f94420f84420f9446a21fa4420f94420fa446a21fb4420fa4420fb446a21fc4420fb4420fc446a21fd" - "4420fc4420fd446a21fe" - "4420fd4420fe446a21ff4420fe4420ff446a21804520ff442080456a2181452080452081456a218245208145208245" - "6a218345208245208345" - "6a2184452083452084456a2185452084452085456a2186452085452086456a2187452086452087456a218845208745" - "2088456a218945208845" - "2089456a218a45208945208a456a218b45208a45208b456a218c45208b45208c456a218d45208c45208d456a218e45" - "208d45208e456a218f45" - "208e45208f456a219045208f452090456a2191452090452091456a2192452091452092456a2193452092452093456a" - "2194452093452094456a" - "2195452094452095456a2196452095452096456a2197452096452097456a2198452097452098456a21994520984520" - "99456a219a4520994520" - "9a456a219b45209a45209b456a219c45209b45209c456a219d45209c45209d456a219e45209d45209e456a219f4520" - "9e45209f456a21a04520" - "9f4520a0456a21a14520a04520a1456a21a24520a14520a2456a21a34520a24520a3456a21a44520a34520a4456a21" - "a54520a44520a5456a21" - "a64520a54520a6456a21a74520a64520a7456a21a84520a74520a8456a21a94520a84520a9456a21aa4520a94520aa" - "456a21ab4520aa4520ab" + "20a4436a21a54320a44320a5436a21a64320a54320a6436a21a74320a64320a7436a21a84320a74320a8436a21a943" + "20a84320a9436a21aa4320a94320aa436a21ab4320aa4320ab436a21ac4320ab4320ac436a21ad4320ac4320ad436a" + "21ae4320ad4320ae436a21af4320ae4320af436a21b04320af4320b0436a21b14320b04320b1436a21b24320b14320" + "b2436a21b34320b24320b3436a21b44320b34320b4436a21b54320b44320b5436a21b64320b54320b6436a21b74320" + "b64320b7436a21b84320b74320b8436a21b94320b84320b9436a21ba4320b94320ba436a21bb4320ba4320bb436a21" + "bc4320bb4320bc436a21bd4320bc4320bd436a21be4320bd4320be436a21bf4320be4320bf436a21c04320bf4320c0" + "436a21c14320c04320c1436a21c24320c14320c2436a21c34320c24320c3436a21c44320c34320c4436a21c54320c4" + "4320c5436a21c64320c54320c6436a21c74320c64320c7436a21c84320c74320c8436a21c94320c84320c9436a21ca" + "4320c94320ca436a21cb4320ca4320cb436a21cc4320cb4320cc436a21cd4320cc4320cd436a21ce4320cd4320ce43" + "6a21cf4320ce4320cf436a21d04320cf4320d0436a21d14320d04320d1436a21d24320d14320d2436a21d34320d243" + "20d3436a21d44320d34320d4436a21d54320d44320d5436a21d64320d54320d6436a21d74320d64320d7436a21d843" + "20d74320d8436a21d94320d84320d9436a21da4320d94320da436a21db4320da4320db436a21dc4320db4320dc436a" + "21dd4320dc4320dd436a21de4320dd4320de436a21df4320de4320df436a21e04320df4320e0436a21e14320e04320" + "e1436a21e24320e14320e2436a21e34320e24320e3436a21e44320e34320e4436a21e54320e44320e5436a21e64320" + "e54320e6436a21e74320e64320e7436a21e84320e74320e8436a21e94320e84320e9436a21ea4320e94320ea436a21" + "eb4320ea4320eb436a21ec4320eb4320ec436a21ed4320ec4320ed436a21ee4320ed4320ee436a21ef4320ee4320ef" + "436a21f04320ef4320f0436a21f14320f04320f1436a21f24320f14320f2436a21f34320f24320f3436a21f44320f3" + "4320f4436a21f54320f44320f5436a21f64320f54320f6436a21f74320f64320f7436a21f84320f74320f8436a21f9" + "4320f84320f9436a21fa4320f94320fa436a21fb4320fa4320fb436a21fc4320fb4320fc436a21fd4320fc4320fd43" + "6a21fe4320fd4320fe436a21ff4320fe4320ff436a21804420ff432080446a2181442080442081446a218244208144" + "2082446a2183442082442083446a2184442083442084446a2185442084442085446a2186442085442086446a218744" + "2086442087446a2188442087442088446a2189442088442089446a218a44208944208a446a218b44208a44208b446a" + "218c44208b44208c446a218d44208c44208d446a218e44208d44208e446a218f44208e44208f446a219044208f4420" + "90446a2191442090442091446a2192442091442092446a2193442092442093446a2194442093442094446a21954420" + "94442095446a2196442095442096446a2197442096442097446a2198442097442098446a2199442098442099446a21" + "9a44209944209a446a219b44209a44209b446a219c44209b44209c446a219d44209c44209d446a219e44209d44209e" + "446a219f44209e44209f446a21a044209f4420a0446a21a14420a04420a1446a21a24420a14420a2446a21a34420a2" + "4420a3446a21a44420a34420a4446a21a54420a44420a5446a21a64420a54420a6446a21a74420a64420a7446a21a8" + "4420a74420a8446a21a94420a84420a9446a21aa4420a94420aa446a21ab4420aa4420ab446a21ac4420ab4420ac44" + "6a21ad4420ac4420ad446a21ae4420ad4420ae446a21af4420ae4420af446a21b04420af4420b0446a21b14420b044" + "20b1446a21b24420b14420b2446a21b34420b24420b3446a21b44420b34420b4446a21b54420b44420b5446a21b644" + "20b54420b6446a21b74420b64420b7446a21b84420b74420b8446a21b94420b84420b9446a21ba4420b94420ba446a" + "21bb4420ba4420bb446a21bc4420bb4420bc446a21bd4420bc4420bd446a21be4420bd4420be446a21bf4420be4420" + "bf446a21c04420bf4420c0446a21c14420c04420c1446a21c24420c14420c2446a21c34420c24420c3446a21c44420" + "c34420c4446a21c54420c44420c5446a21c64420c54420c6446a21c74420c64420c7446a21c84420c74420c8446a21" + "c94420c84420c9446a21ca4420c94420ca446a21cb4420ca4420cb446a21cc4420cb4420cc446a21cd4420cc4420cd" + "446a21ce4420cd4420ce446a21cf4420ce4420cf446a21d04420cf4420d0446a21d14420d04420d1446a21d24420d1" + "4420d2446a21d34420d24420d3446a21d44420d34420d4446a21d54420d44420d5446a21d64420d54420d6446a21d7" + "4420d64420d7446a21d84420d74420d8446a21d94420d84420d9446a21da4420d94420da446a21db4420da4420db44" + "6a21dc4420db4420dc446a21dd4420dc4420dd446a21de4420dd4420de446a21df4420de4420df446a21e04420df44" + "20e0446a21e14420e04420e1446a21e24420e14420e2446a21e34420e24420e3446a21e44420e34420e4446a21e544" + "20e44420e5446a21e64420e54420e6446a21e74420e64420e7446a21e84420e74420e8446a21e94420e84420e9446a" + "21ea4420e94420ea446a21eb4420ea4420eb446a21ec4420eb4420ec446a21ed4420ec4420ed446a21ee4420ed4420" + "ee446a21ef4420ee4420ef446a21f04420ef4420f0446a21f14420f04420f1446a21f24420f14420f2446a21f34420" + "f24420f3446a21f44420f34420f4446a21f54420f44420f5446a21f64420f54420f6446a21f74420f64420f7446a21" + "f84420f74420f8446a21f94420f84420f9446a21fa4420f94420fa446a21fb4420fa4420fb446a21fc4420fb4420fc" + "446a21fd4420fc4420fd446a21fe4420fd4420fe446a21ff4420fe4420ff446a21804520ff442080456a2181452080" + "452081456a2182452081452082456a2183452082452083456a2184452083452084456a2185452084452085456a2186" + "452085452086456a2187452086452087456a2188452087452088456a2189452088452089456a218a45208945208a45" + "6a218b45208a45208b456a218c45208b45208c456a218d45208c45208d456a218e45208d45208e456a218f45208e45" + "208f456a219045208f452090456a2191452090452091456a2192452091452092456a2193452092452093456a219445" + "2093452094456a2195452094452095456a2196452095452096456a2197452096452097456a2198452097452098456a" + "2199452098452099456a219a45209945209a456a219b45209a45209b456a219c45209b45209c456a219d45209c4520" + "9d456a219e45209d45209e456a219f45209e45209f456a21a045209f4520a0456a21a14520a04520a1456a21a24520" + "a14520a2456a21a34520a24520a3456a21a44520a34520a4456a21a54520a44520a5456a21a64520a54520a6456a21" + "a74520a64520a7456a21a84520a74520a8456a21a94520a84520a9456a21aa4520a94520aa456a21ab4520aa4520ab" "456a21ac4520ab4520ac456a21ad4520ac4520ad456a21ae4520ad4520ae456a21af4520ae4520af456a21b04520af" - "4520b0456a21b14520b0" - "4520b1456a21b24520b14520b2456a21b34520b24520b3456a21b44520b34520b4456a21b54520b44520b5456a21b6" - "4520b54520b6456a21b7" - "4520b64520b7456a21b84520b74520b8456a21b94520b84520b9456a21ba4520b94520ba456a21bb4520ba4520bb45" - "6a21bc4520bb4520bc45" - "6a21bd4520bc4520bd456a21be4520bd4520be456a21bf4520be4520bf456a21c04520bf4520c0456a21c14520c045" - "20c1456a21c24520c145" - "20c2456a21c34520c24520c3456a21c44520c34520c4456a21c54520c44520c5456a21c64520c54520c6456a21c745" - "20c64520c7456a21c845" - "20c74520c8456a21c94520c84520c9456a21ca4520c94520ca456a21cb4520ca4520cb456a21cc4520cb4520cc456a" - "21cd4520cc4520cd456a" - "21ce4520cd4520ce456a21cf4520ce4520cf456a21d04520cf4520d0456a21d14520d04520d1456a21d24520d14520" - "d2456a21d34520d24520" - "d3456a21d44520d34520d4456a21d54520d44520d5456a21d64520d54520d6456a21d74520d64520d7456a21d84520" - "d74520d8456a21d94520" - "d84520d9456a21da4520d94520da456a21db4520da4520db456a21dc4520db4520dc456a21dd4520dc4520dd456a21" - "de4520dd4520de456a21" - "df4520de4520df456a21e04520df4520e0456a21e14520e04520e1456a21e24520e14520e2456a21e34520e24520e3" - "456a21e44520e34520e4" - "456a21e54520e44520e5456a21e64520e54520e6456a21e74520e64520e7456a21e84520e74520e8456a21e94520e8" - "4520e9456a21ea4520e9" - "4520ea456a21eb4520ea4520eb456a21ec4520eb4520ec456a21ed4520ec4520ed456a21ee4520ed4520ee456a21ef" - "4520ee4520ef456a21f0" - "4520ef4520f0456a21f14520f04520f1456a21f24520f14520f2456a21f34520f24520f3456a21f44520f34520f445" - "6a21f54520f44520f545" - "6a21f64520f54520f6456a21f74520f64520f7456a21f84520f74520f8456a21f94520f84520f9456a21fa4520f945" - "20fa456a21fb4520fa45" - "20fb456a21fc4520fb4520fc456a21fd4520fc4520fd456a21fe4520fd4520fe456a21ff4520fe4520ff456a218046" - "20ff452080466a218146" - "2080462081466a2182462081462082466a2183462082462083466a2184462083462084466a2185462084462085466a" - "2186462085462086466a" - "2187462086462087466a2188462087462088466a2189462088462089466a218a46208946208a466a218b46208a4620" - "8b466a218c46208b4620" - "8c466a218d46208c46208d466a218e46208d46208e466a218f46208e46208f466a219046208f462090466a21914620" - "90462091466a21924620" - "91462092466a2193462092462093466a2194462093462094466a2195462094462095466a2196462095462096466a21" - "97462096462097466a21" - "98462097462098466a2199462098462099466a219a46209946209a466a219b46209a46209b466a219c46209b46209c" - "466a219d46209c46209d" - "466a219e46209d46209e466a219f46209e46209f466a21a046209f4620a0466a21a14620a04620a1466a21a24620a1" - "4620a2466a21a34620a2" - "4620a3466a21a44620a34620a4466a21a54620a44620a5466a21a64620a54620a6466a21a74620a64620a7466a21a8" - "4620a74620a8466a21a9" - "4620a84620a9466a21aa4620a94620aa466a21ab4620aa4620ab466a21ac4620ab4620ac466a21ad4620ac4620ad46" - "6a21ae4620ad4620ae46" - "6a21af4620ae4620af466a21b04620af4620b0466a21b14620b04620b1466a21b24620b14620b2466a21b34620b246" - "20b3466a21b44620b346" - "20b4466a21b54620b44620b5466a21b64620b54620b6466a21b74620b64620b7466a21b84620b74620b8466a21b946" - "20b84620b9466a21ba46" - "20b94620ba466a21bb4620ba4620bb466a21bc4620bb4620bc466a21bd4620bc4620bd466a21be4620bd4620be466a" - "21bf4620be4620bf466a" - "21c04620bf4620c0466a21c14620c04620c1466a21c24620c14620c2466a21c34620c24620c3466a21c44620c34620" - "c4466a21c54620c44620" - "c5466a21c64620c54620c6466a21c74620c64620c7466a21c84620c74620c8466a21c94620c84620c9466a21ca4620" - "c94620ca466a21cb4620" - "ca4620cb466a21cc4620cb4620cc466a21cd4620cc4620cd466a21ce4620cd4620ce466a21cf4620ce4620cf466a21" - "d04620cf4620d0466a21" - "d14620d04620d1466a21d24620d14620d2466a21d34620d24620d3466a21d44620d34620d4466a21d54620d44620d5" - "466a21d64620d54620d6" - "466a21d74620d64620d7466a21d84620d74620d8466a21d94620d84620d9466a21da4620d94620da466a21db4620da" - "4620db466a21dc4620db" - "4620dc466a21dd4620dc4620dd466a21de4620dd4620de466a21df4620de4620df466a21e04620df4620e0466a21e1" - "4620e04620e1466a21e2" - "4620e14620e2466a21e34620e24620e3466a21e44620e34620e4466a21e54620e44620e5466a21e64620e54620e646" - "6a21e74620e64620e746" - "6a21e84620e74620e8466a21e94620e84620e9466a21ea4620e94620ea466a21eb4620ea4620eb466a21ec4620eb46" - "20ec466a21ed4620ec46" - "20ed466a21ee4620ed4620ee466a21ef4620ee4620ef466a21f04620ef4620f0466a21f14620f04620f1466a21f246" - "20f14620f2466a21f346" - "20f24620f3466a21f44620f34620f4466a21f54620f44620f5466a21f64620f54620f6466a21f74620f64620f7466a" - "21f84620f74620f8466a" - "21f94620f84620f9466a21fa4620f94620fa466a21fb4620fa4620fb466a21fc4620fb4620fc466a21fd4620fc4620" - "fd466a21fe4620fd4620" - "fe466a21ff4620fe4620ff466a21804720ff462080476a2181472080472081476a2182472081472082476a21834720" - "82472083476a21844720" - "83472084476a2185472084472085476a2186472085472086476a2187472086472087476a2188472087472088476a21" - "89472088472089476a21" - "8a47208947208a476a218b47208a47208b476a218c47208b47208c476a218d47208c47208d476a218e47208d47208e" - "476a218f47208e47208f" - "476a219047208f472090476a2191472090472091476a2192472091472092476a2193472092472093476a2194472093" - "472094476a2195472094" - "472095476a2196472095472096476a2197472096472097476a2198472097472098476a2199472098472099476a219a" - "47209947209a476a219b" - "47209a47209b476a219c47209b47209c476a219d47209c47209d476a219e47209d47209e476a219f47209e47209f47" - "6a21a047209f4720a047" - "6a21a14720a04720a1476a21a24720a14720a2476a21a34720a24720a3476a21a44720a34720a4476a21a54720a447" - "20a5476a21a64720a547" - "20a6476a21a74720a64720a7476a21a84720a74720a8476a21a94720a84720a9476a21aa4720a94720aa476a21ab47" - "20aa4720ab476a21ac47" - "20ab4720ac476a21ad4720ac4720ad476a21ae4720ad4720ae476a21af4720ae4720af476a21b04720af4720b0476a" - "21b14720b04720b1476a" - "21b24720b14720b2476a21b34720b24720b3476a21b44720b34720b4476a21b54720b44720b5476a21b64720b54720" - "b6476a21b74720b64720" + "4520b0456a21b14520b04520b1456a21b24520b14520b2456a21b34520b24520b3456a21b44520b34520b4456a21b5" + "4520b44520b5456a21b64520b54520b6456a21b74520b64520b7456a21b84520b74520b8456a21b94520b84520b945" + "6a21ba4520b94520ba456a21bb4520ba4520bb456a21bc4520bb4520bc456a21bd4520bc4520bd456a21be4520bd45" + "20be456a21bf4520be4520bf456a21c04520bf4520c0456a21c14520c04520c1456a21c24520c14520c2456a21c345" + "20c24520c3456a21c44520c34520c4456a21c54520c44520c5456a21c64520c54520c6456a21c74520c64520c7456a" + "21c84520c74520c8456a21c94520c84520c9456a21ca4520c94520ca456a21cb4520ca4520cb456a21cc4520cb4520" + "cc456a21cd4520cc4520cd456a21ce4520cd4520ce456a21cf4520ce4520cf456a21d04520cf4520d0456a21d14520" + "d04520d1456a21d24520d14520d2456a21d34520d24520d3456a21d44520d34520d4456a21d54520d44520d5456a21" + "d64520d54520d6456a21d74520d64520d7456a21d84520d74520d8456a21d94520d84520d9456a21da4520d94520da" + "456a21db4520da4520db456a21dc4520db4520dc456a21dd4520dc4520dd456a21de4520dd4520de456a21df4520de" + "4520df456a21e04520df4520e0456a21e14520e04520e1456a21e24520e14520e2456a21e34520e24520e3456a21e4" + "4520e34520e4456a21e54520e44520e5456a21e64520e54520e6456a21e74520e64520e7456a21e84520e74520e845" + "6a21e94520e84520e9456a21ea4520e94520ea456a21eb4520ea4520eb456a21ec4520eb4520ec456a21ed4520ec45" + "20ed456a21ee4520ed4520ee456a21ef4520ee4520ef456a21f04520ef4520f0456a21f14520f04520f1456a21f245" + "20f14520f2456a21f34520f24520f3456a21f44520f34520f4456a21f54520f44520f5456a21f64520f54520f6456a" + "21f74520f64520f7456a21f84520f74520f8456a21f94520f84520f9456a21fa4520f94520fa456a21fb4520fa4520" + "fb456a21fc4520fb4520fc456a21fd4520fc4520fd456a21fe4520fd4520fe456a21ff4520fe4520ff456a21804620" + "ff452080466a2181462080462081466a2182462081462082466a2183462082462083466a2184462083462084466a21" + "85462084462085466a2186462085462086466a2187462086462087466a2188462087462088466a2189462088462089" + "466a218a46208946208a466a218b46208a46208b466a218c46208b46208c466a218d46208c46208d466a218e46208d" + "46208e466a218f46208e46208f466a219046208f462090466a2191462090462091466a2192462091462092466a2193" + "462092462093466a2194462093462094466a2195462094462095466a2196462095462096466a219746209646209746" + "6a2198462097462098466a2199462098462099466a219a46209946209a466a219b46209a46209b466a219c46209b46" + "209c466a219d46209c46209d466a219e46209d46209e466a219f46209e46209f466a21a046209f4620a0466a21a146" + "20a04620a1466a21a24620a14620a2466a21a34620a24620a3466a21a44620a34620a4466a21a54620a44620a5466a" + "21a64620a54620a6466a21a74620a64620a7466a21a84620a74620a8466a21a94620a84620a9466a21aa4620a94620" + "aa466a21ab4620aa4620ab466a21ac4620ab4620ac466a21ad4620ac4620ad466a21ae4620ad4620ae466a21af4620" + "ae4620af466a21b04620af4620b0466a21b14620b04620b1466a21b24620b14620b2466a21b34620b24620b3466a21" + "b44620b34620b4466a21b54620b44620b5466a21b64620b54620b6466a21b74620b64620b7466a21b84620b74620b8" + "466a21b94620b84620b9466a21ba4620b94620ba466a21bb4620ba4620bb466a21bc4620bb4620bc466a21bd4620bc" + "4620bd466a21be4620bd4620be466a21bf4620be4620bf466a21c04620bf4620c0466a21c14620c04620c1466a21c2" + "4620c14620c2466a21c34620c24620c3466a21c44620c34620c4466a21c54620c44620c5466a21c64620c54620c646" + "6a21c74620c64620c7466a21c84620c74620c8466a21c94620c84620c9466a21ca4620c94620ca466a21cb4620ca46" + "20cb466a21cc4620cb4620cc466a21cd4620cc4620cd466a21ce4620cd4620ce466a21cf4620ce4620cf466a21d046" + "20cf4620d0466a21d14620d04620d1466a21d24620d14620d2466a21d34620d24620d3466a21d44620d34620d4466a" + "21d54620d44620d5466a21d64620d54620d6466a21d74620d64620d7466a21d84620d74620d8466a21d94620d84620" + "d9466a21da4620d94620da466a21db4620da4620db466a21dc4620db4620dc466a21dd4620dc4620dd466a21de4620" + "dd4620de466a21df4620de4620df466a21e04620df4620e0466a21e14620e04620e1466a21e24620e14620e2466a21" + "e34620e24620e3466a21e44620e34620e4466a21e54620e44620e5466a21e64620e54620e6466a21e74620e64620e7" + "466a21e84620e74620e8466a21e94620e84620e9466a21ea4620e94620ea466a21eb4620ea4620eb466a21ec4620eb" + "4620ec466a21ed4620ec4620ed466a21ee4620ed4620ee466a21ef4620ee4620ef466a21f04620ef4620f0466a21f1" + "4620f04620f1466a21f24620f14620f2466a21f34620f24620f3466a21f44620f34620f4466a21f54620f44620f546" + "6a21f64620f54620f6466a21f74620f64620f7466a21f84620f74620f8466a21f94620f84620f9466a21fa4620f946" + "20fa466a21fb4620fa4620fb466a21fc4620fb4620fc466a21fd4620fc4620fd466a21fe4620fd4620fe466a21ff46" + "20fe4620ff466a21804720ff462080476a2181472080472081476a2182472081472082476a2183472082472083476a" + "2184472083472084476a2185472084472085476a2186472085472086476a2187472086472087476a21884720874720" + "88476a2189472088472089476a218a47208947208a476a218b47208a47208b476a218c47208b47208c476a218d4720" + "8c47208d476a218e47208d47208e476a218f47208e47208f476a219047208f472090476a2191472090472091476a21" + "92472091472092476a2193472092472093476a2194472093472094476a2195472094472095476a2196472095472096" + "476a2197472096472097476a2198472097472098476a2199472098472099476a219a47209947209a476a219b47209a" + "47209b476a219c47209b47209c476a219d47209c47209d476a219e47209d47209e476a219f47209e47209f476a21a0" + "47209f4720a0476a21a14720a04720a1476a21a24720a14720a2476a21a34720a24720a3476a21a44720a34720a447" + "6a21a54720a44720a5476a21a64720a54720a6476a21a74720a64720a7476a21a84720a74720a8476a21a94720a847" + "20a9476a21aa4720a94720aa476a21ab4720aa4720ab476a21ac4720ab4720ac476a21ad4720ac4720ad476a21ae47" + "20ad4720ae476a21af4720ae4720af476a21b04720af4720b0476a21b14720b04720b1476a21b24720b14720b2476a" + "21b34720b24720b3476a21b44720b34720b4476a21b54720b44720b5476a21b64720b54720b6476a21b74720b64720" "b7476a21b84720b74720b8476a21b94720b84720b9476a21ba4720b94720ba476a21bb4720ba4720bb476a21bc4720" - "bb4720bc476a21bd4720" - "bc4720bd476a21be4720bd4720be476a21bf4720be4720bf476a21c04720bf4720c0476a21c14720c04720c1476a21" - "c24720c14720c2476a21" - "c34720c24720c3476a21c44720c34720c4476a21c54720c44720c5476a21c64720c54720c6476a21c74720c64720c7" - "476a21c84720c74720c8" - "476a21c94720c84720c9476a21ca4720c94720ca476a21cb4720ca4720cb476a21cc4720cb4720cc476a21cd4720cc" - "4720cd476a21ce4720cd" - "4720ce476a21cf4720ce4720cf476a21d04720cf4720d0476a21d14720d04720d1476a21d24720d14720d2476a21d3" - "4720d24720d3476a21d4" - "4720d34720d4476a21d54720d44720d5476a21d64720d54720d6476a21d74720d64720d7476a21d84720d74720d847" - "6a21d94720d84720d947" - "6a21da4720d94720da476a21db4720da4720db476a21dc4720db4720dc476a21dd4720dc4720dd476a21de4720dd47" - "20de476a21df4720de47" - "20df476a21e04720df4720e0476a21e14720e04720e1476a21e24720e14720e2476a21e34720e24720e3476a21e447" - "20e34720e4476a21e547" - "20e44720e5476a21e64720e54720e6476a21e74720e64720e7476a21e84720e74720e8476a21e94720e84720e9476a" - "21ea4720e94720ea476a" - "21eb4720ea4720eb476a21ec4720eb4720ec476a21ed4720ec4720ed476a21ee4720ed4720ee476a21ef4720ee4720" - "ef476a21f04720ef4720" - "f0476a21f14720f04720f1476a21f24720f14720f2476a21f34720f24720f3476a21f44720f34720f4476a21f54720" - "f44720f5476a21f64720" - "f54720f6476a21f74720f64720f7476a21f84720f74720f8476a21f94720f84720f9476a21fa4720f94720fa476a21" - "fb4720fa4720fb476a21" - "fc4720fb4720fc476a21fd4720fc4720fd476a21fe4720fd4720fe476a21ff4720fe4720ff476a21804820ff472080" - "486a2181482080482081" - "486a2182482081482082486a2183482082482083486a2184482083482084486a2185482084482085486a2186482085" - "482086486a2187482086" - "482087486a2188482087482088486a2189482088482089486a218a48208948208a486a218b48208a48208b486a218c" - "48208b48208c486a218d" - "48208c48208d486a218e48208d48208e486a218f48208e48208f486a219048208f482090486a219148209048209148" - "6a219248209148209248" - "6a2193482092482093486a2194482093482094486a2195482094482095486a2196482095482096486a219748209648" - "2097486a219848209748" - "2098486a2199482098482099486a219a48209948209a486a219b48209a48209b486a219c48209b48209c486a219d48" - "209c48209d486a219e48" - "209d48209e486a219f48209e48209f486a21a048209f4820a0486a21a14820a04820a1486a21a24820a14820a2486a" - "21a34820a24820a3486a" - "21a44820a34820a4486a21a54820a44820a5486a21a64820a54820a6486a21a74820a64820a7486a21a84820a74820" - "a8486a21a94820a84820" - "a9486a21aa4820a94820aa486a21ab4820aa4820ab486a21ac4820ab4820ac486a21ad4820ac4820ad486a21ae4820" - "ad4820ae486a21af4820" - "ae4820af486a21b04820af4820b0486a21b14820b04820b1486a21b24820b14820b2486a21b34820b24820b3486a21" - "b44820b34820b4486a21" - "b54820b44820b5486a21b64820b54820b6486a21b74820b64820b7486a21b84820b74820b8486a21b94820b84820b9" - "486a21ba4820b94820ba" - "486a21bb4820ba4820bb486a21bc4820bb4820bc486a21bd4820bc4820bd486a21be4820bd4820be486a21bf4820be" - "4820bf486a21c04820bf" - "4820c0486a21c14820c04820c1486a21c24820c14820c2486a21c34820c24820c3486a21c44820c34820c4486a21c5" - "4820c44820c5486a21c6" - "4820c54820c6486a21c74820c64820c7486a21c84820c74820c8486a21c94820c84820c9486a21ca4820c94820ca48" - "6a21cb4820ca4820cb48" - "6a21cc4820cb4820cc486a21cd4820cc4820cd486a21ce4820cd4820ce486a21cf4820ce4820cf486a21d04820cf48" - "20d0486a21d14820d048" - "20d1486a21d24820d14820d2486a21d34820d24820d3486a21d44820d34820d4486a21d54820d44820d5486a21d648" - "20d54820d6486a21d748" - "20d64820d7486a21d84820d74820d8486a21d94820d84820d9486a21da4820d94820da486a21db4820da4820db486a" - "21dc4820db4820dc486a" - "21dd4820dc4820dd486a21de4820dd4820de486a21df4820de4820df486a21e04820df4820e0486a21e14820e04820" - "e1486a21e24820e14820" - "e2486a21e34820e24820e3486a21e44820e34820e4486a21e54820e44820e5486a21e64820e54820e6486a21e74820" - "e64820e7486a21e84820" - "e74820e8486a21e94820e84820e9486a21ea4820e94820ea486a21eb4820ea4820eb486a21ec4820eb4820ec486a21" - "ed4820ec4820ed486a21" - "ee4820ed4820ee486a21ef4820ee4820ef486a21f04820ef4820f0486a21f14820f04820f1486a21f24820f14820f2" - "486a21f34820f24820f3" - "486a21f44820f34820f4486a21f54820f44820f5486a21f64820f54820f6486a21f74820f64820f7486a21f84820f7" - "4820f8486a21f94820f8" - "4820f9486a21fa4820f94820fa486a21fb4820fa4820fb486a21fc4820fb4820fc486a21fd4820fc4820fd486a21fe" - "4820fd4820fe486a21ff" - "4820fe4820ff486a21804920ff482080496a2181492080492081496a2182492081492082496a218349208249208349" - "6a218449208349208449" - "6a2185492084492085496a2186492085492086496a2187492086492087496a2188492087492088496a218949208849" - "2089496a218a49208949" - "208a496a218b49208a49208b496a218c49208b49208c496a218d49208c49208d496a218e49208d49208e496a218f49" - "208e49208f496a219049" - "208f492090496a2191492090492091496a2192492091492092496a2193492092492093496a2194492093492094496a" - "2195492094492095496a" - "2196492095492096496a2197492096492097496a2198492097492098496a2199492098492099496a219a4920994920" - "9a496a219b49209a4920" - "9b496a219c49209b49209c496a219d49209c49209d496a219e49209d49209e496a219f49209e49209f496a21a04920" - "9f4920a0496a21a14920" - "a04920a1496a21a24920a14920a2496a21a34920a24920a3496a21a44920a34920a4496a21a54920a44920a5496a21" - "a64920a54920a6496a21" - "a74920a64920a7496a21a84920a74920a8496a21a94920a84920a9496a21aa4920a94920aa496a21ab4920aa4920ab" - "496a21ac4920ab4920ac" - "496a21ad4920ac4920ad496a21ae4920ad4920ae496a21af4920ae4920af496a21b04920af4920b0496a21b14920b0" - "4920b1496a21b24920b1" - "4920b2496a21b34920b24920b3496a21b44920b34920b4496a21b54920b44920b5496a21b64920b54920b6496a21b7" - "4920b64920b7496a21b8" - "4920b74920b8496a21b94920b84920b9496a21ba4920b94920ba496a21bb4920ba4920bb496a21bc4920bb4920bc49" - "6a21bd4920bc4920bd49" - "6a21be4920bd4920be496a21bf4920be4920bf496a21c04920bf4920c0496a21c14920c04920c1496a21c24920c149" - "20c2496a21c34920c249" + "bb4720bc476a21bd4720bc4720bd476a21be4720bd4720be476a21bf4720be4720bf476a21c04720bf4720c0476a21" + "c14720c04720c1476a21c24720c14720c2476a21c34720c24720c3476a21c44720c34720c4476a21c54720c44720c5" + "476a21c64720c54720c6476a21c74720c64720c7476a21c84720c74720c8476a21c94720c84720c9476a21ca4720c9" + "4720ca476a21cb4720ca4720cb476a21cc4720cb4720cc476a21cd4720cc4720cd476a21ce4720cd4720ce476a21cf" + "4720ce4720cf476a21d04720cf4720d0476a21d14720d04720d1476a21d24720d14720d2476a21d34720d24720d347" + "6a21d44720d34720d4476a21d54720d44720d5476a21d64720d54720d6476a21d74720d64720d7476a21d84720d747" + "20d8476a21d94720d84720d9476a21da4720d94720da476a21db4720da4720db476a21dc4720db4720dc476a21dd47" + "20dc4720dd476a21de4720dd4720de476a21df4720de4720df476a21e04720df4720e0476a21e14720e04720e1476a" + "21e24720e14720e2476a21e34720e24720e3476a21e44720e34720e4476a21e54720e44720e5476a21e64720e54720" + "e6476a21e74720e64720e7476a21e84720e74720e8476a21e94720e84720e9476a21ea4720e94720ea476a21eb4720" + "ea4720eb476a21ec4720eb4720ec476a21ed4720ec4720ed476a21ee4720ed4720ee476a21ef4720ee4720ef476a21" + "f04720ef4720f0476a21f14720f04720f1476a21f24720f14720f2476a21f34720f24720f3476a21f44720f34720f4" + "476a21f54720f44720f5476a21f64720f54720f6476a21f74720f64720f7476a21f84720f74720f8476a21f94720f8" + "4720f9476a21fa4720f94720fa476a21fb4720fa4720fb476a21fc4720fb4720fc476a21fd4720fc4720fd476a21fe" + "4720fd4720fe476a21ff4720fe4720ff476a21804820ff472080486a2181482080482081486a218248208148208248" + "6a2183482082482083486a2184482083482084486a2185482084482085486a2186482085482086486a218748208648" + "2087486a2188482087482088486a2189482088482089486a218a48208948208a486a218b48208a48208b486a218c48" + "208b48208c486a218d48208c48208d486a218e48208d48208e486a218f48208e48208f486a219048208f482090486a" + "2191482090482091486a2192482091482092486a2193482092482093486a2194482093482094486a21954820944820" + "95486a2196482095482096486a2197482096482097486a2198482097482098486a2199482098482099486a219a4820" + "9948209a486a219b48209a48209b486a219c48209b48209c486a219d48209c48209d486a219e48209d48209e486a21" + "9f48209e48209f486a21a048209f4820a0486a21a14820a04820a1486a21a24820a14820a2486a21a34820a24820a3" + "486a21a44820a34820a4486a21a54820a44820a5486a21a64820a54820a6486a21a74820a64820a7486a21a84820a7" + "4820a8486a21a94820a84820a9486a21aa4820a94820aa486a21ab4820aa4820ab486a21ac4820ab4820ac486a21ad" + "4820ac4820ad486a21ae4820ad4820ae486a21af4820ae4820af486a21b04820af4820b0486a21b14820b04820b148" + "6a21b24820b14820b2486a21b34820b24820b3486a21b44820b34820b4486a21b54820b44820b5486a21b64820b548" + "20b6486a21b74820b64820b7486a21b84820b74820b8486a21b94820b84820b9486a21ba4820b94820ba486a21bb48" + "20ba4820bb486a21bc4820bb4820bc486a21bd4820bc4820bd486a21be4820bd4820be486a21bf4820be4820bf486a" + "21c04820bf4820c0486a21c14820c04820c1486a21c24820c14820c2486a21c34820c24820c3486a21c44820c34820" + "c4486a21c54820c44820c5486a21c64820c54820c6486a21c74820c64820c7486a21c84820c74820c8486a21c94820" + "c84820c9486a21ca4820c94820ca486a21cb4820ca4820cb486a21cc4820cb4820cc486a21cd4820cc4820cd486a21" + "ce4820cd4820ce486a21cf4820ce4820cf486a21d04820cf4820d0486a21d14820d04820d1486a21d24820d14820d2" + "486a21d34820d24820d3486a21d44820d34820d4486a21d54820d44820d5486a21d64820d54820d6486a21d74820d6" + "4820d7486a21d84820d74820d8486a21d94820d84820d9486a21da4820d94820da486a21db4820da4820db486a21dc" + "4820db4820dc486a21dd4820dc4820dd486a21de4820dd4820de486a21df4820de4820df486a21e04820df4820e048" + "6a21e14820e04820e1486a21e24820e14820e2486a21e34820e24820e3486a21e44820e34820e4486a21e54820e448" + "20e5486a21e64820e54820e6486a21e74820e64820e7486a21e84820e74820e8486a21e94820e84820e9486a21ea48" + "20e94820ea486a21eb4820ea4820eb486a21ec4820eb4820ec486a21ed4820ec4820ed486a21ee4820ed4820ee486a" + "21ef4820ee4820ef486a21f04820ef4820f0486a21f14820f04820f1486a21f24820f14820f2486a21f34820f24820" + "f3486a21f44820f34820f4486a21f54820f44820f5486a21f64820f54820f6486a21f74820f64820f7486a21f84820" + "f74820f8486a21f94820f84820f9486a21fa4820f94820fa486a21fb4820fa4820fb486a21fc4820fb4820fc486a21" + "fd4820fc4820fd486a21fe4820fd4820fe486a21ff4820fe4820ff486a21804920ff482080496a2181492080492081" + "496a2182492081492082496a2183492082492083496a2184492083492084496a2185492084492085496a2186492085" + "492086496a2187492086492087496a2188492087492088496a2189492088492089496a218a49208949208a496a218b" + "49208a49208b496a218c49208b49208c496a218d49208c49208d496a218e49208d49208e496a218f49208e49208f49" + "6a219049208f492090496a2191492090492091496a2192492091492092496a2193492092492093496a219449209349" + "2094496a2195492094492095496a2196492095492096496a2197492096492097496a2198492097492098496a219949" + "2098492099496a219a49209949209a496a219b49209a49209b496a219c49209b49209c496a219d49209c49209d496a" + "219e49209d49209e496a219f49209e49209f496a21a049209f4920a0496a21a14920a04920a1496a21a24920a14920" + "a2496a21a34920a24920a3496a21a44920a34920a4496a21a54920a44920a5496a21a64920a54920a6496a21a74920" + "a64920a7496a21a84920a74920a8496a21a94920a84920a9496a21aa4920a94920aa496a21ab4920aa4920ab496a21" + "ac4920ab4920ac496a21ad4920ac4920ad496a21ae4920ad4920ae496a21af4920ae4920af496a21b04920af4920b0" + "496a21b14920b04920b1496a21b24920b14920b2496a21b34920b24920b3496a21b44920b34920b4496a21b54920b4" + "4920b5496a21b64920b54920b6496a21b74920b64920b7496a21b84920b74920b8496a21b94920b84920b9496a21ba" + "4920b94920ba496a21bb4920ba4920bb496a21bc4920bb4920bc496a21bd4920bc4920bd496a21be4920bd4920be49" + "6a21bf4920be4920bf496a21c04920bf4920c0496a21c14920c04920c1496a21c24920c14920c2496a21c34920c249" "20c3496a21c44920c34920c4496a21c54920c44920c5496a21c64920c54920c6496a21c74920c64920c7496a21c849" - "20c74920c8496a21c949" - "20c84920c9496a21ca4920c94920ca496a21cb4920ca4920cb496a21cc4920cb4920cc496a21cd4920cc4920cd496a" - "21ce4920cd4920ce496a" - "21cf4920ce4920cf496a21d04920cf4920d0496a21d14920d04920d1496a21d24920d14920d2496a21d34920d24920" - "d3496a21d44920d34920" - "d4496a21d54920d44920d5496a21d64920d54920d6496a21d74920d64920d7496a21d84920d74920d8496a21d94920" - "d84920d9496a21da4920" - "d94920da496a21db4920da4920db496a21dc4920db4920dc496a21dd4920dc4920dd496a21de4920dd4920de496a21" - "df4920de4920df496a21" - "e04920df4920e0496a21e14920e04920e1496a21e24920e14920e2496a21e34920e24920e3496a21e44920e34920e4" - "496a21e54920e44920e5" - "496a21e64920e54920e6496a21e74920e64920e7496a21e84920e74920e8496a21e94920e84920e9496a21ea4920e9" - "4920ea496a21eb4920ea" - "4920eb496a21ec4920eb4920ec496a21ed4920ec4920ed496a21ee4920ed4920ee496a21ef4920ee4920ef496a21f0" - "4920ef4920f0496a21f1" - "4920f04920f1496a21f24920f14920f2496a21f34920f24920f3496a21f44920f34920f4496a21f54920f44920f549" - "6a21f64920f54920f649" - "6a21f74920f64920f7496a21f84920f74920f8496a21f94920f84920f9496a21fa4920f94920fa496a21fb4920fa49" - "20fb496a21fc4920fb49" - "20fc496a21fd4920fc4920fd496a21fe4920fd4920fe496a21ff4920fe4920ff496a21804a20ff4920804a6a21814a" - "20804a20814a6a21824a" - "20814a20824a6a21834a20824a20834a6a21844a20834a20844a6a21854a20844a20854a6a21864a20854a20864a6a" - "21874a20864a20874a6a" - "21884a20874a20884a6a21894a20884a20894a6a218a4a20894a208a4a6a218b4a208a4a208b4a6a218c4a208b4a20" - "8c4a6a218d4a208c4a20" - "8d4a6a218e4a208d4a208e4a6a218f4a208e4a208f4a6a21904a208f4a20904a6a21914a20904a20914a6a21924a20" - "914a20924a6a21934a20" - "924a20934a6a21944a20934a20944a6a21954a20944a20954a6a21964a20954a20964a6a21974a20964a20974a6a21" - "984a20974a20984a6a21" - "994a20984a20994a6a219a4a20994a209a4a6a219b4a209a4a209b4a6a219c4a209b4a209c4a6a219d4a209c4a209d" - "4a6a219e4a209d4a209e" - "4a6a219f4a209e4a209f4a6a21a04a209f4a20a04a6a21a14a20a04a20a14a6a21a24a20a14a20a24a6a21a34a20a2" - "4a20a34a6a21a44a20a3" - "4a20a44a6a21a54a20a44a20a54a6a21a64a20a54a20a64a6a21a74a20a64a20a74a6a21a84a20a74a20a84a6a21a9" - "4a20a84a20a94a6a21aa" - "4a20a94a20aa4a6a21ab4a20aa4a20ab4a6a21ac4a20ab4a20ac4a6a21ad4a20ac4a20ad4a6a21ae4a20ad4a20ae4a" - "6a21af4a20ae4a20af4a" - "6a21b04a20af4a20b04a6a21b14a20b04a20b14a6a21b24a20b14a20b24a6a21b34a20b24a20b34a6a21b44a20b34a" - "20b44a6a21b54a20b44a" - "20b54a6a21b64a20b54a20b64a6a21b74a20b64a20b74a6a21b84a20b74a20b84a6a21b94a20b84a20b94a6a21ba4a" - "20b94a20ba4a6a21bb4a" - "20ba4a20bb4a6a21bc4a20bb4a20bc4a6a21bd4a20bc4a20bd4a6a21be4a20bd4a20be4a6a21bf4a20be4a20bf4a6a" - "21c04a20bf4a20c04a6a" - "21c14a20c04a20c14a6a21c24a20c14a20c24a6a21c34a20c24a20c34a6a21c44a20c34a20c44a6a21c54a20c44a20" - "c54a6a21c64a20c54a20" - "c64a6a21c74a20c64a20c74a6a21c84a20c74a20c84a6a21c94a20c84a20c94a6a21ca4a20c94a20ca4a6a21cb4a20" - "ca4a20cb4a6a21cc4a20" - "cb4a20cc4a6a21cd4a20cc4a20cd4a6a21ce4a20cd4a20ce4a6a21cf4a20ce4a20cf4a6a21d04a20cf4a20d04a6a21" - "d14a20d04a20d14a6a21" - "d24a20d14a20d24a6a21d34a20d24a20d34a6a21d44a20d34a20d44a6a21d54a20d44a20d54a6a21d64a20d54a20d6" - "4a6a21d74a20d64a20d7" - "4a6a21d84a20d74a20d84a6a21d94a20d84a20d94a6a21da4a20d94a20da4a6a21db4a20da4a20db4a6a21dc4a20db" - "4a20dc4a6a21dd4a20dc" - "4a20dd4a6a21de4a20dd4a20de4a6a21df4a20de4a20df4a6a21e04a20df4a20e04a6a21e14a20e04a20e14a6a21e2" - "4a20e14a20e24a6a21e3" - "4a20e24a20e34a6a21e44a20e34a20e44a6a21e54a20e44a20e54a6a21e64a20e54a20e64a6a21e74a20e64a20e74a" - "6a21e84a20e74a20e84a" - "6a21e94a20e84a20e94a6a21ea4a20e94a20ea4a6a21eb4a20ea4a20eb4a6a21ec4a20eb4a20ec4a6a21ed4a20ec4a" - "20ed4a6a21ee4a20ed4a" - "20ee4a6a21ef4a20ee4a20ef4a6a21f04a20ef4a20f04a6a21f14a20f04a20f14a6a21f24a20f14a20f24a6a21f34a" - "20f24a20f34a6a21f44a" - "20f34a20f44a6a21f54a20f44a20f54a6a21f64a20f54a20f64a6a21f74a20f64a20f74a6a21f84a20f74a20f84a6a" - "21f94a20f84a20f94a6a" - "21fa4a20f94a20fa4a6a21fb4a20fa4a20fb4a6a21fc4a20fb4a20fc4a6a21fd4a20fc4a20fd4a6a21fe4a20fd4a20" - "fe4a6a21ff4a20fe4a20" - "ff4a6a21804b20ff4a20804b6a21814b20804b20814b6a21824b20814b20824b6a21834b20824b20834b6a21844b20" - "834b20844b6a21854b20" - "844b20854b6a21864b20854b20864b6a21874b20864b20874b6a21884b20874b20884b6a21894b20884b20894b6a21" - "8a4b20894b208a4b6a21" - "8b4b208a4b208b4b6a218c4b208b4b208c4b6a218d4b208c4b208d4b6a218e4b208d4b208e4b6a218f4b208e4b208f" - "4b6a21904b208f4b2090" - "4b6a21914b20904b20914b6a21924b20914b20924b6a21934b20924b20934b6a21944b20934b20944b6a21954b2094" - "4b20954b6a21964b2095" - "4b20964b6a21974b20964b20974b6a21984b20974b20984b6a21994b20984b20994b6a219a4b20994b209a4b6a219b" - "4b209a4b209b4b6a219c" - "4b209b4b209c4b6a219d4b209c4b209d4b6a219e4b209d4b209e4b6a219f4b209e4b209f4b6a21a04b209f4b20a04b" - "6a21a14b20a04b20a14b" - "6a21a24b20a14b20a24b6a21a34b20a24b20a34b6a21a44b20a34b20a44b6a21a54b20a44b20a54b6a21a64b20a54b" - "20a64b6a21a74b20a64b" - "20a74b6a21a84b20a74b20a84b6a21a94b20a84b20a94b6a21aa4b20a94b20aa4b6a21ab4b20aa4b20ab4b6a21ac4b" - "20ab4b20ac4b6a21ad4b" - "20ac4b20ad4b6a21ae4b20ad4b20ae4b6a21af4b20ae4b20af4b6a21b04b20af4b20b04b6a21b14b20b04b20b14b6a" - "21b24b20b14b20b24b6a" - "21b34b20b24b20b34b6a21b44b20b34b20b44b6a21b54b20b44b20b54b6a21b64b20b54b20b64b6a21b74b20b64b20" - "b74b6a21b84b20b74b20" - "b84b6a21b94b20b84b20b94b6a21ba4b20b94b20ba4b6a21bb4b20ba4b20bb4b6a21bc4b20bb4b20bc4b6a21bd4b20" - "bc4b20bd4b6a21be4b20" - "bd4b20be4b6a21bf4b20be4b20bf4b6a21c04b20bf4b20c04b6a21c14b20c04b20c14b6a21c24b20c14b20c24b6a21" - "c34b20c24b20c34b6a21" - "c44b20c34b20c44b6a21c54b20c44b20c54b6a21c64b20c54b20c64b6a21c74b20c64b20c74b6a21c84b20c74b20c8" - "4b6a21c94b20c84b20c9" - "4b6a21ca4b20c94b20ca4b6a21cb4b20ca4b20cb4b6a21cc4b20cb4b20cc4b6a21cd4b20cc4b20cd4b6a21ce4b20cd" - "4b20ce4b6a21cf4b20ce" + "20c74920c8496a21c94920c84920c9496a21ca4920c94920ca496a21cb4920ca4920cb496a21cc4920cb4920cc496a" + "21cd4920cc4920cd496a21ce4920cd4920ce496a21cf4920ce4920cf496a21d04920cf4920d0496a21d14920d04920" + "d1496a21d24920d14920d2496a21d34920d24920d3496a21d44920d34920d4496a21d54920d44920d5496a21d64920" + "d54920d6496a21d74920d64920d7496a21d84920d74920d8496a21d94920d84920d9496a21da4920d94920da496a21" + "db4920da4920db496a21dc4920db4920dc496a21dd4920dc4920dd496a21de4920dd4920de496a21df4920de4920df" + "496a21e04920df4920e0496a21e14920e04920e1496a21e24920e14920e2496a21e34920e24920e3496a21e44920e3" + "4920e4496a21e54920e44920e5496a21e64920e54920e6496a21e74920e64920e7496a21e84920e74920e8496a21e9" + "4920e84920e9496a21ea4920e94920ea496a21eb4920ea4920eb496a21ec4920eb4920ec496a21ed4920ec4920ed49" + "6a21ee4920ed4920ee496a21ef4920ee4920ef496a21f04920ef4920f0496a21f14920f04920f1496a21f24920f149" + "20f2496a21f34920f24920f3496a21f44920f34920f4496a21f54920f44920f5496a21f64920f54920f6496a21f749" + "20f64920f7496a21f84920f74920f8496a21f94920f84920f9496a21fa4920f94920fa496a21fb4920fa4920fb496a" + "21fc4920fb4920fc496a21fd4920fc4920fd496a21fe4920fd4920fe496a21ff4920fe4920ff496a21804a20ff4920" + "804a6a21814a20804a20814a6a21824a20814a20824a6a21834a20824a20834a6a21844a20834a20844a6a21854a20" + "844a20854a6a21864a20854a20864a6a21874a20864a20874a6a21884a20874a20884a6a21894a20884a20894a6a21" + "8a4a20894a208a4a6a218b4a208a4a208b4a6a218c4a208b4a208c4a6a218d4a208c4a208d4a6a218e4a208d4a208e" + "4a6a218f4a208e4a208f4a6a21904a208f4a20904a6a21914a20904a20914a6a21924a20914a20924a6a21934a2092" + "4a20934a6a21944a20934a20944a6a21954a20944a20954a6a21964a20954a20964a6a21974a20964a20974a6a2198" + "4a20974a20984a6a21994a20984a20994a6a219a4a20994a209a4a6a219b4a209a4a209b4a6a219c4a209b4a209c4a" + "6a219d4a209c4a209d4a6a219e4a209d4a209e4a6a219f4a209e4a209f4a6a21a04a209f4a20a04a6a21a14a20a04a" + "20a14a6a21a24a20a14a20a24a6a21a34a20a24a20a34a6a21a44a20a34a20a44a6a21a54a20a44a20a54a6a21a64a" + "20a54a20a64a6a21a74a20a64a20a74a6a21a84a20a74a20a84a6a21a94a20a84a20a94a6a21aa4a20a94a20aa4a6a" + "21ab4a20aa4a20ab4a6a21ac4a20ab4a20ac4a6a21ad4a20ac4a20ad4a6a21ae4a20ad4a20ae4a6a21af4a20ae4a20" + "af4a6a21b04a20af4a20b04a6a21b14a20b04a20b14a6a21b24a20b14a20b24a6a21b34a20b24a20b34a6a21b44a20" + "b34a20b44a6a21b54a20b44a20b54a6a21b64a20b54a20b64a6a21b74a20b64a20b74a6a21b84a20b74a20b84a6a21" + "b94a20b84a20b94a6a21ba4a20b94a20ba4a6a21bb4a20ba4a20bb4a6a21bc4a20bb4a20bc4a6a21bd4a20bc4a20bd" + "4a6a21be4a20bd4a20be4a6a21bf4a20be4a20bf4a6a21c04a20bf4a20c04a6a21c14a20c04a20c14a6a21c24a20c1" + "4a20c24a6a21c34a20c24a20c34a6a21c44a20c34a20c44a6a21c54a20c44a20c54a6a21c64a20c54a20c64a6a21c7" + "4a20c64a20c74a6a21c84a20c74a20c84a6a21c94a20c84a20c94a6a21ca4a20c94a20ca4a6a21cb4a20ca4a20cb4a" + "6a21cc4a20cb4a20cc4a6a21cd4a20cc4a20cd4a6a21ce4a20cd4a20ce4a6a21cf4a20ce4a20cf4a6a21d04a20cf4a" + "20d04a6a21d14a20d04a20d14a6a21d24a20d14a20d24a6a21d34a20d24a20d34a6a21d44a20d34a20d44a6a21d54a" + "20d44a20d54a6a21d64a20d54a20d64a6a21d74a20d64a20d74a6a21d84a20d74a20d84a6a21d94a20d84a20d94a6a" + "21da4a20d94a20da4a6a21db4a20da4a20db4a6a21dc4a20db4a20dc4a6a21dd4a20dc4a20dd4a6a21de4a20dd4a20" + "de4a6a21df4a20de4a20df4a6a21e04a20df4a20e04a6a21e14a20e04a20e14a6a21e24a20e14a20e24a6a21e34a20" + "e24a20e34a6a21e44a20e34a20e44a6a21e54a20e44a20e54a6a21e64a20e54a20e64a6a21e74a20e64a20e74a6a21" + "e84a20e74a20e84a6a21e94a20e84a20e94a6a21ea4a20e94a20ea4a6a21eb4a20ea4a20eb4a6a21ec4a20eb4a20ec" + "4a6a21ed4a20ec4a20ed4a6a21ee4a20ed4a20ee4a6a21ef4a20ee4a20ef4a6a21f04a20ef4a20f04a6a21f14a20f0" + "4a20f14a6a21f24a20f14a20f24a6a21f34a20f24a20f34a6a21f44a20f34a20f44a6a21f54a20f44a20f54a6a21f6" + "4a20f54a20f64a6a21f74a20f64a20f74a6a21f84a20f74a20f84a6a21f94a20f84a20f94a6a21fa4a20f94a20fa4a" + "6a21fb4a20fa4a20fb4a6a21fc4a20fb4a20fc4a6a21fd4a20fc4a20fd4a6a21fe4a20fd4a20fe4a6a21ff4a20fe4a" + "20ff4a6a21804b20ff4a20804b6a21814b20804b20814b6a21824b20814b20824b6a21834b20824b20834b6a21844b" + "20834b20844b6a21854b20844b20854b6a21864b20854b20864b6a21874b20864b20874b6a21884b20874b20884b6a" + "21894b20884b20894b6a218a4b20894b208a4b6a218b4b208a4b208b4b6a218c4b208b4b208c4b6a218d4b208c4b20" + "8d4b6a218e4b208d4b208e4b6a218f4b208e4b208f4b6a21904b208f4b20904b6a21914b20904b20914b6a21924b20" + "914b20924b6a21934b20924b20934b6a21944b20934b20944b6a21954b20944b20954b6a21964b20954b20964b6a21" + "974b20964b20974b6a21984b20974b20984b6a21994b20984b20994b6a219a4b20994b209a4b6a219b4b209a4b209b" + "4b6a219c4b209b4b209c4b6a219d4b209c4b209d4b6a219e4b209d4b209e4b6a219f4b209e4b209f4b6a21a04b209f" + "4b20a04b6a21a14b20a04b20a14b6a21a24b20a14b20a24b6a21a34b20a24b20a34b6a21a44b20a34b20a44b6a21a5" + "4b20a44b20a54b6a21a64b20a54b20a64b6a21a74b20a64b20a74b6a21a84b20a74b20a84b6a21a94b20a84b20a94b" + "6a21aa4b20a94b20aa4b6a21ab4b20aa4b20ab4b6a21ac4b20ab4b20ac4b6a21ad4b20ac4b20ad4b6a21ae4b20ad4b" + "20ae4b6a21af4b20ae4b20af4b6a21b04b20af4b20b04b6a21b14b20b04b20b14b6a21b24b20b14b20b24b6a21b34b" + "20b24b20b34b6a21b44b20b34b20b44b6a21b54b20b44b20b54b6a21b64b20b54b20b64b6a21b74b20b64b20b74b6a" + "21b84b20b74b20b84b6a21b94b20b84b20b94b6a21ba4b20b94b20ba4b6a21bb4b20ba4b20bb4b6a21bc4b20bb4b20" + "bc4b6a21bd4b20bc4b20bd4b6a21be4b20bd4b20be4b6a21bf4b20be4b20bf4b6a21c04b20bf4b20c04b6a21c14b20" + "c04b20c14b6a21c24b20c14b20c24b6a21c34b20c24b20c34b6a21c44b20c34b20c44b6a21c54b20c44b20c54b6a21" + "c64b20c54b20c64b6a21c74b20c64b20c74b6a21c84b20c74b20c84b6a21c94b20c84b20c94b6a21ca4b20c94b20ca" + "4b6a21cb4b20ca4b20cb4b6a21cc4b20cb4b20cc4b6a21cd4b20cc4b20cd4b6a21ce4b20cd4b20ce4b6a21cf4b20ce" "4b20cf4b6a21d04b20cf4b20d04b6a21d14b20d04b20d14b6a21d24b20d14b20d24b6a21d34b20d24b20d34b6a21d4" - "4b20d34b20d44b6a21d5" - "4b20d44b20d54b6a21d64b20d54b20d64b6a21d74b20d64b20d74b6a21d84b20d74b20d84b6a21d94b20d84b20d94b" - "6a21da4b20d94b20da4b" - "6a21db4b20da4b20db4b6a21dc4b20db4b20dc4b6a21dd4b20dc4b20dd4b6a21de4b20dd4b20de4b6a21df4b20de4b" - "20df4b6a21e04b20df4b" - "20e04b6a21e14b20e04b20e14b6a21e24b20e14b20e24b6a21e34b20e24b20e34b6a21e44b20e34b20e44b6a21e54b" - "20e44b20e54b6a21e64b" - "20e54b20e64b6a21e74b20e64b20e74b6a21e84b20e74b20e84b6a21e94b20e84b20e94b6a21ea4b20e94b20ea4b6a" - "21eb4b20ea4b20eb4b6a" - "21ec4b20eb4b20ec4b6a21ed4b20ec4b20ed4b6a21ee4b20ed4b20ee4b6a21ef4b20ee4b20ef4b6a21f04b20ef4b20" - "f04b6a21f14b20f04b20" - "f14b6a21f24b20f14b20f24b6a21f34b20f24b20f34b6a21f44b20f34b20f44b6a21f54b20f44b20f54b6a21f64b20" - "f54b20f64b6a21f74b20" - "f64b20f74b6a21f84b20f74b20f84b6a21f94b20f84b20f94b6a21fa4b20f94b20fa4b6a21fb4b20fa4b20fb4b6a21" - "fc4b20fb4b20fc4b6a21" - "fd4b20fc4b20fd4b6a21fe4b20fd4b20fe4b6a21ff4b20fe4b20ff4b6a21804c20ff4b20804c6a21814c20804c2081" - "4c6a21824c20814c2082" - "4c6a21834c20824c20834c6a21844c20834c20844c6a21854c20844c20854c6a21864c20854c20864c6a21874c2086" - "4c20874c6a21884c2087" - "4c20884c6a21894c20884c20894c6a218a4c20894c208a4c6a218b4c208a4c208b4c6a218c4c208b4c208c4c6a218d" - "4c208c4c208d4c6a218e" - "4c208d4c208e4c6a218f4c208e4c208f4c6a21904c208f4c20904c6a21914c20904c20914c6a21924c20914c20924c" - "6a21934c20924c20934c" - "6a21944c20934c20944c6a21954c20944c20954c6a21964c20954c20964c6a21974c20964c20974c6a21984c20974c" - "20984c6a21994c20984c" - "20994c6a219a4c20994c209a4c6a219b4c209a4c209b4c6a219c4c209b4c209c4c6a219d4c209c4c209d4c6a219e4c" - "209d4c209e4c6a219f4c" - "209e4c209f4c6a21a04c209f4c20a04c6a21a14c20a04c20a14c6a21a24c20a14c20a24c6a21a34c20a24c20a34c6a" - "21a44c20a34c20a44c6a" - "21a54c20a44c20a54c6a21a64c20a54c20a64c6a21a74c20a64c20a74c6a21a84c20a74c20a84c6a21a94c20a84c20" - "a94c6a21aa4c20a94c20" - "aa4c6a21ab4c20aa4c20ab4c6a21ac4c20ab4c20ac4c6a21ad4c20ac4c20ad4c6a21ae4c20ad4c20ae4c6a21af4c20" - "ae4c20af4c6a21b04c20" - "af4c20b04c6a21b14c20b04c20b14c6a21b24c20b14c20b24c6a21b34c20b24c20b34c6a21b44c20b34c20b44c6a21" - "b54c20b44c20b54c6a21" - "b64c20b54c20b64c6a21b74c20b64c20b74c6a21b84c20b74c20b84c6a21b94c20b84c20b94c6a21ba4c20b94c20ba" - "4c6a21bb4c20ba4c20bb" - "4c6a21bc4c20bb4c20bc4c6a21bd4c20bc4c20bd4c6a21be4c20bd4c20be4c6a21bf4c20be4c20bf4c6a21c04c20bf" - "4c20c04c6a21c14c20c0" - "4c20c14c6a21c24c20c14c20c24c6a21c34c20c24c20c34c6a21c44c20c34c20c44c6a21c54c20c44c20c54c6a21c6" - "4c20c54c20c64c6a21c7" - "4c20c64c20c74c6a21c84c20c74c20c84c6a21c94c20c84c20c94c6a21ca4c20c94c20ca4c6a21cb4c20ca4c20cb4c" - "6a21cc4c20cb4c20cc4c" - "6a21cd4c20cc4c20cd4c6a21ce4c20cd4c20ce4c6a21cf4c20ce4c20cf4c6a21d04c20cf4c20d04c6a21d14c20d04c" - "20d14c6a21d24c20d14c" - "20d24c6a21d34c20d24c20d34c6a21d44c20d34c20d44c6a21d54c20d44c20d54c6a21d64c20d54c20d64c6a21d74c" - "20d64c20d74c6a21d84c" - "20d74c20d84c6a21d94c20d84c20d94c6a21da4c20d94c20da4c6a21db4c20da4c20db4c6a21dc4c20db4c20dc4c6a" - "21dd4c20dc4c20dd4c6a" - "21de4c20dd4c20de4c6a21df4c20de4c20df4c6a21e04c20df4c20e04c6a21e14c20e04c20e14c6a21e24c20e14c20" - "e24c6a21e34c20e24c20" - "e34c6a21e44c20e34c20e44c6a21e54c20e44c20e54c6a21e64c20e54c20e64c6a21e74c20e64c20e74c6a21e84c20" - "e74c20e84c6a21e94c20" - "e84c20e94c6a21ea4c20e94c20ea4c6a21eb4c20ea4c20eb4c6a21ec4c20eb4c20ec4c6a21ed4c20ec4c20ed4c6a21" - "ee4c20ed4c20ee4c6a21" - "ef4c20ee4c20ef4c6a21f04c20ef4c20f04c6a21f14c20f04c20f14c6a21f24c20f14c20f24c6a21f34c20f24c20f3" - "4c6a21f44c20f34c20f4" - "4c6a21f54c20f44c20f54c6a21f64c20f54c20f64c6a21f74c20f64c20f74c6a21f84c20f74c20f84c6a21f94c20f8" - "4c20f94c6a21fa4c20f9" - "4c20fa4c6a21fb4c20fa4c20fb4c6a21fc4c20fb4c20fc4c6a21fd4c20fc4c20fd4c6a21fe4c20fd4c20fe4c6a21ff" - "4c20fe4c20ff4c6a2180" - "4d20ff4c20804d6a21814d20804d20814d6a21824d20814d20824d6a21834d20824d20834d6a21844d20834d20844d" - "6a21854d20844d20854d" - "6a21864d20854d20864d6a21874d20864d20874d6a21884d20874d20884d6a21894d20884d20894d6a218a4d20894d" - "208a4d6a218b4d208a4d" - "208b4d6a218c4d208b4d208c4d6a218d4d208c4d208d4d6a218e4d208d4d208e4d6a218f4d208e4d208f4d6a21904d" - "208f4d20904d6a21914d" - "20904d20914d6a21924d20914d20924d6a21934d20924d20934d6a21944d20934d20944d6a21954d20944d20954d6a" - "21964d20954d20964d6a" - "21974d20964d20974d6a21984d20974d20984d6a21994d20984d20994d6a219a4d20994d209a4d6a219b4d209a4d20" - "9b4d6a219c4d209b4d20" - "9c4d6a219d4d209c4d209d4d6a219e4d209d4d209e4d6a219f4d209e4d209f4d6a21a04d209f4d20a04d6a21a14d20" - "a04d20a14d6a21a24d20" - "a14d20a24d6a21a34d20a24d20a34d6a21a44d20a34d20a44d6a21a54d20a44d20a54d6a21a64d20a54d20a64d6a21" - "a74d20a64d20a74d6a21" - "a84d20a74d20a84d6a21a94d20a84d20a94d6a21aa4d20a94d20aa4d6a21ab4d20aa4d20ab4d6a21ac4d20ab4d20ac" - "4d6a21ad4d20ac4d20ad" - "4d6a21ae4d20ad4d20ae4d6a21af4d20ae4d20af4d6a21b04d20af4d20b04d6a21b14d20b04d20b14d6a21b24d20b1" - "4d20b24d6a21b34d20b2" - "4d20b34d6a21b44d20b34d20b44d6a21b54d20b44d20b54d6a21b64d20b54d20b64d6a21b74d20b64d20b74d6a21b8" - "4d20b74d20b84d6a21b9" - "4d20b84d20b94d6a21ba4d20b94d20ba4d6a21bb4d20ba4d20bb4d6a21bc4d20bb4d20bc4d6a21bd4d20bc4d20bd4d" - "6a21be4d20bd4d20be4d" - "6a21bf4d20be4d20bf4d6a21c04d20bf4d20c04d6a21c14d20c04d20c14d6a21c24d20c14d20c24d6a21c34d20c24d" - "20c34d6a21c44d20c34d" - "20c44d6a21c54d20c44d20c54d6a21c64d20c54d20c64d6a21c74d20c64d20c74d6a21c84d20c74d20c84d6a21c94d" - "20c84d20c94d6a21ca4d" - "20c94d20ca4d6a21cb4d20ca4d20cb4d6a21cc4d20cb4d20cc4d6a21cd4d20cc4d20cd4d6a21ce4d20cd4d20ce4d6a" - "21cf4d20ce4d20cf4d6a" - "21d04d20cf4d20d04d6a21d14d20d04d20d14d6a21d24d20d14d20d24d6a21d34d20d24d20d34d6a21d44d20d34d20" - "d44d6a21d54d20d44d20" - "d54d6a21d64d20d54d20d64d6a21d74d20d64d20d74d6a21d84d20d74d20d84d6a21d94d20d84d20d94d6a21da4d20" - "d94d20da4d6a21db4d20" + "4b20d34b20d44b6a21d54b20d44b20d54b6a21d64b20d54b20d64b6a21d74b20d64b20d74b6a21d84b20d74b20d84b" + "6a21d94b20d84b20d94b6a21da4b20d94b20da4b6a21db4b20da4b20db4b6a21dc4b20db4b20dc4b6a21dd4b20dc4b" + "20dd4b6a21de4b20dd4b20de4b6a21df4b20de4b20df4b6a21e04b20df4b20e04b6a21e14b20e04b20e14b6a21e24b" + "20e14b20e24b6a21e34b20e24b20e34b6a21e44b20e34b20e44b6a21e54b20e44b20e54b6a21e64b20e54b20e64b6a" + "21e74b20e64b20e74b6a21e84b20e74b20e84b6a21e94b20e84b20e94b6a21ea4b20e94b20ea4b6a21eb4b20ea4b20" + "eb4b6a21ec4b20eb4b20ec4b6a21ed4b20ec4b20ed4b6a21ee4b20ed4b20ee4b6a21ef4b20ee4b20ef4b6a21f04b20" + "ef4b20f04b6a21f14b20f04b20f14b6a21f24b20f14b20f24b6a21f34b20f24b20f34b6a21f44b20f34b20f44b6a21" + "f54b20f44b20f54b6a21f64b20f54b20f64b6a21f74b20f64b20f74b6a21f84b20f74b20f84b6a21f94b20f84b20f9" + "4b6a21fa4b20f94b20fa4b6a21fb4b20fa4b20fb4b6a21fc4b20fb4b20fc4b6a21fd4b20fc4b20fd4b6a21fe4b20fd" + "4b20fe4b6a21ff4b20fe4b20ff4b6a21804c20ff4b20804c6a21814c20804c20814c6a21824c20814c20824c6a2183" + "4c20824c20834c6a21844c20834c20844c6a21854c20844c20854c6a21864c20854c20864c6a21874c20864c20874c" + "6a21884c20874c20884c6a21894c20884c20894c6a218a4c20894c208a4c6a218b4c208a4c208b4c6a218c4c208b4c" + "208c4c6a218d4c208c4c208d4c6a218e4c208d4c208e4c6a218f4c208e4c208f4c6a21904c208f4c20904c6a21914c" + "20904c20914c6a21924c20914c20924c6a21934c20924c20934c6a21944c20934c20944c6a21954c20944c20954c6a" + "21964c20954c20964c6a21974c20964c20974c6a21984c20974c20984c6a21994c20984c20994c6a219a4c20994c20" + "9a4c6a219b4c209a4c209b4c6a219c4c209b4c209c4c6a219d4c209c4c209d4c6a219e4c209d4c209e4c6a219f4c20" + "9e4c209f4c6a21a04c209f4c20a04c6a21a14c20a04c20a14c6a21a24c20a14c20a24c6a21a34c20a24c20a34c6a21" + "a44c20a34c20a44c6a21a54c20a44c20a54c6a21a64c20a54c20a64c6a21a74c20a64c20a74c6a21a84c20a74c20a8" + "4c6a21a94c20a84c20a94c6a21aa4c20a94c20aa4c6a21ab4c20aa4c20ab4c6a21ac4c20ab4c20ac4c6a21ad4c20ac" + "4c20ad4c6a21ae4c20ad4c20ae4c6a21af4c20ae4c20af4c6a21b04c20af4c20b04c6a21b14c20b04c20b14c6a21b2" + "4c20b14c20b24c6a21b34c20b24c20b34c6a21b44c20b34c20b44c6a21b54c20b44c20b54c6a21b64c20b54c20b64c" + "6a21b74c20b64c20b74c6a21b84c20b74c20b84c6a21b94c20b84c20b94c6a21ba4c20b94c20ba4c6a21bb4c20ba4c" + "20bb4c6a21bc4c20bb4c20bc4c6a21bd4c20bc4c20bd4c6a21be4c20bd4c20be4c6a21bf4c20be4c20bf4c6a21c04c" + "20bf4c20c04c6a21c14c20c04c20c14c6a21c24c20c14c20c24c6a21c34c20c24c20c34c6a21c44c20c34c20c44c6a" + "21c54c20c44c20c54c6a21c64c20c54c20c64c6a21c74c20c64c20c74c6a21c84c20c74c20c84c6a21c94c20c84c20" + "c94c6a21ca4c20c94c20ca4c6a21cb4c20ca4c20cb4c6a21cc4c20cb4c20cc4c6a21cd4c20cc4c20cd4c6a21ce4c20" + "cd4c20ce4c6a21cf4c20ce4c20cf4c6a21d04c20cf4c20d04c6a21d14c20d04c20d14c6a21d24c20d14c20d24c6a21" + "d34c20d24c20d34c6a21d44c20d34c20d44c6a21d54c20d44c20d54c6a21d64c20d54c20d64c6a21d74c20d64c20d7" + "4c6a21d84c20d74c20d84c6a21d94c20d84c20d94c6a21da4c20d94c20da4c6a21db4c20da4c20db4c6a21dc4c20db" + "4c20dc4c6a21dd4c20dc4c20dd4c6a21de4c20dd4c20de4c6a21df4c20de4c20df4c6a21e04c20df4c20e04c6a21e1" + "4c20e04c20e14c6a21e24c20e14c20e24c6a21e34c20e24c20e34c6a21e44c20e34c20e44c6a21e54c20e44c20e54c" + "6a21e64c20e54c20e64c6a21e74c20e64c20e74c6a21e84c20e74c20e84c6a21e94c20e84c20e94c6a21ea4c20e94c" + "20ea4c6a21eb4c20ea4c20eb4c6a21ec4c20eb4c20ec4c6a21ed4c20ec4c20ed4c6a21ee4c20ed4c20ee4c6a21ef4c" + "20ee4c20ef4c6a21f04c20ef4c20f04c6a21f14c20f04c20f14c6a21f24c20f14c20f24c6a21f34c20f24c20f34c6a" + "21f44c20f34c20f44c6a21f54c20f44c20f54c6a21f64c20f54c20f64c6a21f74c20f64c20f74c6a21f84c20f74c20" + "f84c6a21f94c20f84c20f94c6a21fa4c20f94c20fa4c6a21fb4c20fa4c20fb4c6a21fc4c20fb4c20fc4c6a21fd4c20" + "fc4c20fd4c6a21fe4c20fd4c20fe4c6a21ff4c20fe4c20ff4c6a21804d20ff4c20804d6a21814d20804d20814d6a21" + "824d20814d20824d6a21834d20824d20834d6a21844d20834d20844d6a21854d20844d20854d6a21864d20854d2086" + "4d6a21874d20864d20874d6a21884d20874d20884d6a21894d20884d20894d6a218a4d20894d208a4d6a218b4d208a" + "4d208b4d6a218c4d208b4d208c4d6a218d4d208c4d208d4d6a218e4d208d4d208e4d6a218f4d208e4d208f4d6a2190" + "4d208f4d20904d6a21914d20904d20914d6a21924d20914d20924d6a21934d20924d20934d6a21944d20934d20944d" + "6a21954d20944d20954d6a21964d20954d20964d6a21974d20964d20974d6a21984d20974d20984d6a21994d20984d" + "20994d6a219a4d20994d209a4d6a219b4d209a4d209b4d6a219c4d209b4d209c4d6a219d4d209c4d209d4d6a219e4d" + "209d4d209e4d6a219f4d209e4d209f4d6a21a04d209f4d20a04d6a21a14d20a04d20a14d6a21a24d20a14d20a24d6a" + "21a34d20a24d20a34d6a21a44d20a34d20a44d6a21a54d20a44d20a54d6a21a64d20a54d20a64d6a21a74d20a64d20" + "a74d6a21a84d20a74d20a84d6a21a94d20a84d20a94d6a21aa4d20a94d20aa4d6a21ab4d20aa4d20ab4d6a21ac4d20" + "ab4d20ac4d6a21ad4d20ac4d20ad4d6a21ae4d20ad4d20ae4d6a21af4d20ae4d20af4d6a21b04d20af4d20b04d6a21" + "b14d20b04d20b14d6a21b24d20b14d20b24d6a21b34d20b24d20b34d6a21b44d20b34d20b44d6a21b54d20b44d20b5" + "4d6a21b64d20b54d20b64d6a21b74d20b64d20b74d6a21b84d20b74d20b84d6a21b94d20b84d20b94d6a21ba4d20b9" + "4d20ba4d6a21bb4d20ba4d20bb4d6a21bc4d20bb4d20bc4d6a21bd4d20bc4d20bd4d6a21be4d20bd4d20be4d6a21bf" + "4d20be4d20bf4d6a21c04d20bf4d20c04d6a21c14d20c04d20c14d6a21c24d20c14d20c24d6a21c34d20c24d20c34d" + "6a21c44d20c34d20c44d6a21c54d20c44d20c54d6a21c64d20c54d20c64d6a21c74d20c64d20c74d6a21c84d20c74d" + "20c84d6a21c94d20c84d20c94d6a21ca4d20c94d20ca4d6a21cb4d20ca4d20cb4d6a21cc4d20cb4d20cc4d6a21cd4d" + "20cc4d20cd4d6a21ce4d20cd4d20ce4d6a21cf4d20ce4d20cf4d6a21d04d20cf4d20d04d6a21d14d20d04d20d14d6a" + "21d24d20d14d20d24d6a21d34d20d24d20d34d6a21d44d20d34d20d44d6a21d54d20d44d20d54d6a21d64d20d54d20" + "d64d6a21d74d20d64d20d74d6a21d84d20d74d20d84d6a21d94d20d84d20d94d6a21da4d20d94d20da4d6a21db4d20" "da4d20db4d6a21dc4d20db4d20dc4d6a21dd4d20dc4d20dd4d6a21de4d20dd4d20de4d6a21df4d20de4d20df4d6a21" - "e04d20df4d20e04d6a21" - "e14d20e04d20e14d6a21e24d20e14d20e24d6a21e34d20e24d20e34d6a21e44d20e34d20e44d6a21e54d20e44d20e5" - "4d6a21e64d20e54d20e6" - "4d6a21e74d20e64d20e74d6a21e84d20e74d20e84d6a21e94d20e84d20e94d6a21ea4d20e94d20ea4d6a21eb4d20ea" - "4d20eb4d6a21ec4d20eb" - "4d20ec4d6a21ed4d20ec4d20ed4d6a21ee4d20ed4d20ee4d6a21ef4d20ee4d20ef4d6a21f04d20ef4d20f04d6a21f1" - "4d20f04d20f14d6a21f2" - "4d20f14d20f24d6a21f34d20f24d20f34d6a21f44d20f34d20f44d6a21f54d20f44d20f54d6a21f64d20f54d20f64d" - "6a21f74d20f64d20f74d" - "6a21f84d20f74d20f84d6a21f94d20f84d20f94d6a21fa4d20f94d20fa4d6a21fb4d20fa4d20fb4d6a21fc4d20fb4d" - "20fc4d6a21fd4d20fc4d" - "20fd4d6a21fe4d20fd4d20fe4d6a21ff4d20fe4d20ff4d6a21804e20ff4d20804e6a21814e20804e20814e6a21824e" - "20814e20824e6a21834e" - "20824e20834e6a21844e20834e20844e6a21854e20844e20854e6a21864e20854e20864e6a21874e20864e20874e6a" - "21884e20874e20884e6a" - "21894e20884e20894e6a218a4e20894e208a4e6a218b4e208a4e208b4e6a218c4e208b4e208c4e6a218d4e208c4e20" - "8d4e6a218e4e208d4e20" - "8e4e6a218f4e208f4e0b"; + "e04d20df4d20e04d6a21e14d20e04d20e14d6a21e24d20e14d20e24d6a21e34d20e24d20e34d6a21e44d20e34d20e4" + "4d6a21e54d20e44d20e54d6a21e64d20e54d20e64d6a21e74d20e64d20e74d6a21e84d20e74d20e84d6a21e94d20e8" + "4d20e94d6a21ea4d20e94d20ea4d6a21eb4d20ea4d20eb4d6a21ec4d20eb4d20ec4d6a21ed4d20ec4d20ed4d6a21ee" + "4d20ed4d20ee4d6a21ef4d20ee4d20ef4d6a21f04d20ef4d20f04d6a21f14d20f04d20f14d6a21f24d20f14d20f24d" + "6a21f34d20f24d20f34d6a21f44d20f34d20f44d6a21f54d20f44d20f54d6a21f64d20f54d20f64d6a21f74d20f64d" + "20f74d6a21f84d20f74d20f84d6a21f94d20f84d20f94d6a21fa4d20f94d20fa4d6a21fb4d20fa4d20fb4d6a21fc4d" + "20fb4d20fc4d6a21fd4d20fc4d20fd4d6a21fe4d20fd4d20fe4d6a21ff4d20fe4d20ff4d6a21804e20ff4d20804e6a" + "21814e20804e20814e6a21824e20814e20824e6a21834e20824e20834e6a21844e20834e20844e6a21854e20844e20" + "854e6a21864e20854e20864e6a21874e20864e20874e6a21884e20874e20884e6a21894e20884e20894e6a218a4e20" + "894e208a4e6a218b4e208a4e208b4e6a218c4e208b4e208c4e6a218d4e208c4e208d4e6a218e4e208d4e208e4e6a21" + "8f4e208f4e0b"; extern std::string const functions5kHex = "0061736d0100000001070160027f7f017f038a27882700000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000" - "00000000000007e2d30388270874657374303030300000087465737430303031000108746573743030303200020874" - "65737430303033000308" - "7465737430303034000408746573743030303500050874657374303030360006087465737430303037000708746573" - "74303030380008087465" - "7374303030390009087465737430303130000a087465737430303131000b087465737430303132000c087465737430" - "303133000d0874657374" - "30303134000e087465737430303135000f087465737430303136001008746573743030313700110874657374303031" - "38001208746573743030" - "3139001308746573743030323000140874657374303032310015087465737430303232001608746573743030323300" - "17087465737430303234" - "00180874657374303032350019087465737430303236001a087465737430303237001b087465737430303238001c08" - "7465737430303239001d" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000007e2d303882708" + "7465737430303030000008746573743030303100010874657374303030320002087465737430303033000308746573" + "7430303034000408746573743030303500050874657374303030360006087465737430303037000708746573743030" + "303800080874657374303030390009087465737430303130000a087465737430303131000b08746573743030313200" + "0c087465737430303133000d087465737430303134000e087465737430303135000f08746573743030313600100874" + "6573743030313700110874657374303031380012087465737430303139001308746573743030323000140874657374" + "3030323100150874657374303032320016087465737430303233001708746573743030323400180874657374303032" + "350019087465737430303236001a087465737430303237001b087465737430303238001c087465737430303239001d" "087465737430303330001e087465737430303331001f08746573743030333200200874657374303033330021087465" - "73743030333400220874" - "6573743030333500230874657374303033360024087465737430303337002508746573743030333800260874657374" - "30303339002708746573" - "743030343000280874657374303034310029087465737430303432002a087465737430303433002b08746573743030" - "3434002c087465737430" - "303435002d087465737430303436002e087465737430303437002f0874657374303034380030087465737430303439" - "00310874657374303035" - "3000320874657374303035310033087465737430303532003408746573743030353300350874657374303035340036" - "08746573743030353500" - "3708746573743030353600380874657374303035370039087465737430303538003a087465737430303539003b0874" - "65737430303630003c08" - "7465737430303631003d087465737430303632003e087465737430303633003f087465737430303634004008746573" - "74303036350041087465" - "7374303036360042087465737430303637004308746573743030363800440874657374303036390045087465737430" - "30373000460874657374" - "30303731004708746573743030373200480874657374303037330049087465737430303734004a0874657374303037" - "35004b08746573743030" - "3736004c087465737430303737004d087465737430303738004e087465737430303739004f08746573743030383000" - "50087465737430303831" - "0051087465737430303832005208746573743030383300530874657374303038340054087465737430303835005508" - "74657374303038360056" - "087465737430303837005708746573743030383800580874657374303038390059087465737430303930005a087465" - "737430303931005b0874" - "65737430303932005c087465737430303933005d087465737430303934005e087465737430303935005f0874657374" - "30303936006008746573" - "7430303937006108746573743030393800620874657374303039390063087465737430313030006408746573743031" - "30310065087465737430" - "3130320066087465737430313033006708746573743031303400680874657374303130350069087465737430313036" - "006a0874657374303130" - "37006b087465737430313038006c087465737430313039006d087465737430313130006e087465737430313131006f" - "08746573743031313200" - "7008746573743031313300710874657374303131340072087465737430313135007308746573743031313600740874" - "65737430313137007508" - "7465737430313138007608746573743031313900770874657374303132300078087465737430313231007908746573" - "7430313232007a087465" - "737430313233007b087465737430313234007c087465737430313235007d087465737430313236007e087465737430" - "313237007f0874657374" - "3031323800800108746573743031323900810108746573743031333000820108746573743031333100830108746573" - "74303133320084010874" - "6573743031333300850108746573743031333400860108746573743031333500870108746573743031333600880108" - "74657374303133370089" - "01087465737430313338008a01087465737430313339008b01087465737430313430008c0108746573743031343100" - "8d010874657374303134" - "32008e01087465737430313433008f0108746573743031343400900108746573743031343500910108746573743031" - "34360092010874657374" - "3031343700930108746573743031343800940108746573743031343900950108746573743031353000960108746573" - "74303135310097010874" - "65737430313532009801087465737430313533009901087465737430313534009a01087465737430313535009b0108" - "7465737430313536009c" - "01087465737430313537009d01087465737430313538009e01087465737430313539009f0108746573743031363000" - "a0010874657374303136" - "3100a10108746573743031363200a20108746573743031363300a30108746573743031363400a40108746573743031" - "363500a5010874657374" - "3031363600a60108746573743031363700a70108746573743031363800a80108746573743031363900a90108746573" - "743031373000aa010874" - "6573743031373100ab0108746573743031373200ac0108746573743031373300ad0108746573743031373400ae0108" - "746573743031373500af" - "0108746573743031373600b00108746573743031373700b10108746573743031373800b20108746573743031373900" - "b3010874657374303138" - "3000b40108746573743031383100b50108746573743031383200b60108746573743031383300b70108746573743031" - "383400b8010874657374" - "3031383500b90108746573743031383600ba0108746573743031383700bb0108746573743031383800bc0108746573" - "743031383900bd010874" - "6573743031393000be0108746573743031393100bf0108746573743031393200c00108746573743031393300c10108" - "746573743031393400c2" - "0108746573743031393500c30108746573743031393600c40108746573743031393700c50108746573743031393800" - "c6010874657374303139" - "3900c70108746573743032303000c80108746573743032303100c90108746573743032303200ca0108746573743032" - "303300cb010874657374" - "3032303400cc0108746573743032303500cd0108746573743032303600ce0108746573743032303700cf0108746573" - "743032303800d0010874" - "6573743032303900d10108746573743032313000d20108746573743032313100d30108746573743032313200d40108" - "746573743032313300d5" - "0108746573743032313400d60108746573743032313500d70108746573743032313600d80108746573743032313700" - "d9010874657374303231" - "3800da0108746573743032313900db0108746573743032323000dc0108746573743032323100dd0108746573743032" - "323200de010874657374" - "3032323300df0108746573743032323400e00108746573743032323500e10108746573743032323600e20108746573" - "743032323700e3010874" - "6573743032323800e40108746573743032323900e50108746573743032333000e60108746573743032333100e70108" - "746573743032333200e8" - "0108746573743032333300e90108746573743032333400ea0108746573743032333500eb0108746573743032333600" - "ec010874657374303233" - "3700ed0108746573743032333800ee0108746573743032333900ef0108746573743032343000f00108746573743032" - "343100f1010874657374" - "3032343200f20108746573743032343300f30108746573743032343400f40108746573743032343500f50108746573" - "743032343600f6010874" - "6573743032343700f70108746573743032343800f80108746573743032343900f90108746573743032353000fa0108" - "746573743032353100fb" - "0108746573743032353200fc0108746573743032353300fd0108746573743032353400fe0108746573743032353500" - "ff010874657374303235" - "3600800208746573743032353700810208746573743032353800820208746573743032353900830208746573743032" - "36300084020874657374" + "7374303033340022087465737430303335002308746573743030333600240874657374303033370025087465737430" + "3033380026087465737430303339002708746573743030343000280874657374303034310029087465737430303432" + "002a087465737430303433002b087465737430303434002c087465737430303435002d087465737430303436002e08" + "7465737430303437002f08746573743030343800300874657374303034390031087465737430303530003208746573" + "7430303531003308746573743030353200340874657374303035330035087465737430303534003608746573743030" + "3535003708746573743030353600380874657374303035370039087465737430303538003a08746573743030353900" + "3b087465737430303630003c087465737430303631003d087465737430303632003e087465737430303633003f0874" + "6573743030363400400874657374303036350041087465737430303636004208746573743030363700430874657374" + "3030363800440874657374303036390045087465737430303730004608746573743030373100470874657374303037" + "3200480874657374303037330049087465737430303734004a087465737430303735004b087465737430303736004c" + "087465737430303737004d087465737430303738004e087465737430303739004f0874657374303038300050087465" + "7374303038310051087465737430303832005208746573743030383300530874657374303038340054087465737430" + "3038350055087465737430303836005608746573743030383700570874657374303038380058087465737430303839" + "0059087465737430303930005a087465737430303931005b087465737430303932005c087465737430303933005d08" + "7465737430303934005e087465737430303935005f0874657374303039360060087465737430303937006108746573" + "7430303938006208746573743030393900630874657374303130300064087465737430313031006508746573743031" + "3032006608746573743031303300670874657374303130340068087465737430313035006908746573743031303600" + "6a087465737430313037006b087465737430313038006c087465737430313039006d087465737430313130006e0874" + "65737430313131006f0874657374303131320070087465737430313133007108746573743031313400720874657374" + "3031313500730874657374303131360074087465737430313137007508746573743031313800760874657374303131" + "39007708746573743031323000780874657374303132310079087465737430313232007a087465737430313233007b" + "087465737430313234007c087465737430313235007d087465737430313236007e087465737430313237007f087465" + "7374303132380080010874657374303132390081010874657374303133300082010874657374303133310083010874" + "6573743031333200840108746573743031333300850108746573743031333400860108746573743031333500870108" + "7465737430313336008801087465737430313337008901087465737430313338008a01087465737430313339008b01" + "087465737430313430008c01087465737430313431008d01087465737430313432008e01087465737430313433008f" + "0108746573743031343400900108746573743031343500910108746573743031343600920108746573743031343700" + "9301087465737430313438009401087465737430313439009501087465737430313530009601087465737430313531" + "009701087465737430313532009801087465737430313533009901087465737430313534009a010874657374303135" + "35009b01087465737430313536009c01087465737430313537009d01087465737430313538009e0108746573743031" + "3539009f0108746573743031363000a00108746573743031363100a10108746573743031363200a201087465737430" + "31363300a30108746573743031363400a40108746573743031363500a50108746573743031363600a6010874657374" + "3031363700a70108746573743031363800a80108746573743031363900a90108746573743031373000aa0108746573" + "743031373100ab0108746573743031373200ac0108746573743031373300ad0108746573743031373400ae01087465" + "73743031373500af0108746573743031373600b00108746573743031373700b10108746573743031373800b2010874" + "6573743031373900b30108746573743031383000b40108746573743031383100b50108746573743031383200b60108" + "746573743031383300b70108746573743031383400b80108746573743031383500b90108746573743031383600ba01" + "08746573743031383700bb0108746573743031383800bc0108746573743031383900bd0108746573743031393000be" + "0108746573743031393100bf0108746573743031393200c00108746573743031393300c10108746573743031393400" + "c20108746573743031393500c30108746573743031393600c40108746573743031393700c501087465737430313938" + "00c60108746573743031393900c70108746573743032303000c80108746573743032303100c9010874657374303230" + "3200ca0108746573743032303300cb0108746573743032303400cc0108746573743032303500cd0108746573743032" + "303600ce0108746573743032303700cf0108746573743032303800d00108746573743032303900d101087465737430" + "32313000d20108746573743032313100d30108746573743032313200d40108746573743032313300d5010874657374" + "3032313400d60108746573743032313500d70108746573743032313600d80108746573743032313700d90108746573" + "743032313800da0108746573743032313900db0108746573743032323000dc0108746573743032323100dd01087465" + "73743032323200de0108746573743032323300df0108746573743032323400e00108746573743032323500e1010874" + "6573743032323600e20108746573743032323700e30108746573743032323800e40108746573743032323900e50108" + "746573743032333000e60108746573743032333100e70108746573743032333200e80108746573743032333300e901" + "08746573743032333400ea0108746573743032333500eb0108746573743032333600ec0108746573743032333700ed" + "0108746573743032333800ee0108746573743032333900ef0108746573743032343000f00108746573743032343100" + "f10108746573743032343200f20108746573743032343300f30108746573743032343400f401087465737430323435" + "00f50108746573743032343600f60108746573743032343700f70108746573743032343800f8010874657374303234" + "3900f90108746573743032353000fa0108746573743032353100fb0108746573743032353200fc0108746573743032" + "353300fd0108746573743032353400fe0108746573743032353500ff01087465737430323536008002087465737430" + "3235370081020874657374303235380082020874657374303235390083020874657374303236300084020874657374" "3032363100850208746573743032363200860208746573743032363300870208746573743032363400880208746573" - "74303236350089020874" - "65737430323636008a02087465737430323637008b02087465737430323638008c02087465737430323639008d0208" - "7465737430323730008e" - "02087465737430323731008f0208746573743032373200900208746573743032373300910208746573743032373400" - "92020874657374303237" - "3500930208746573743032373600940208746573743032373700950208746573743032373800960208746573743032" - "37390097020874657374" - "30323830009802087465737430323831009902087465737430323832009a02087465737430323833009b0208746573" - "7430323834009c020874" - "65737430323835009d02087465737430323836009e02087465737430323837009f0208746573743032383800a00208" - "746573743032383900a1" - "0208746573743032393000a20208746573743032393100a30208746573743032393200a40208746573743032393300" - "a5020874657374303239" - "3400a60208746573743032393500a70208746573743032393600a80208746573743032393700a90208746573743032" - "393800aa020874657374" - "3032393900ab0208746573743033303000ac0208746573743033303100ad0208746573743033303200ae0208746573" - "743033303300af020874" - "6573743033303400b00208746573743033303500b10208746573743033303600b20208746573743033303700b30208" - "746573743033303800b4" - "0208746573743033303900b50208746573743033313000b60208746573743033313100b70208746573743033313200" - "b8020874657374303331" - "3300b90208746573743033313400ba0208746573743033313500bb0208746573743033313600bc0208746573743033" - "313700bd020874657374" - "3033313800be0208746573743033313900bf0208746573743033323000c00208746573743033323100c10208746573" - "743033323200c2020874" - "6573743033323300c30208746573743033323400c40208746573743033323500c50208746573743033323600c60208" - "746573743033323700c7" - "0208746573743033323800c80208746573743033323900c90208746573743033333000ca0208746573743033333100" - "cb020874657374303333" - "3200cc0208746573743033333300cd0208746573743033333400ce0208746573743033333500cf0208746573743033" - "333600d0020874657374" - "3033333700d10208746573743033333800d20208746573743033333900d30208746573743033343000d40208746573" - "743033343100d5020874" - "6573743033343200d60208746573743033343300d70208746573743033343400d80208746573743033343500d90208" - "746573743033343600da" - "0208746573743033343700db0208746573743033343800dc0208746573743033343900dd0208746573743033353000" - "de020874657374303335" - "3100df0208746573743033353200e00208746573743033353300e10208746573743033353400e20208746573743033" - "353500e3020874657374" - "3033353600e40208746573743033353700e50208746573743033353800e60208746573743033353900e70208746573" - "743033363000e8020874" - "6573743033363100e90208746573743033363200ea0208746573743033363300eb0208746573743033363400ec0208" - "746573743033363500ed" - "0208746573743033363600ee0208746573743033363700ef0208746573743033363800f00208746573743033363900" - "f1020874657374303337" - "3000f20208746573743033373100f30208746573743033373200f40208746573743033373300f50208746573743033" - "373400f6020874657374" - "3033373500f70208746573743033373600f80208746573743033373700f90208746573743033373800fa0208746573" - "743033373900fb020874" - "6573743033383000fc0208746573743033383100fd0208746573743033383200fe0208746573743033383300ff0208" - "74657374303338340080" - "0308746573743033383500810308746573743033383600820308746573743033383700830308746573743033383800" - "84030874657374303338" - "3900850308746573743033393000860308746573743033393100870308746573743033393200880308746573743033" - "39330089030874657374" - "30333934008a03087465737430333935008b03087465737430333936008c03087465737430333937008d0308746573" - "7430333938008e030874" - "65737430333939008f0308746573743034303000900308746573743034303100910308746573743034303200920308" - "74657374303430330093" - "0308746573743034303400940308746573743034303500950308746573743034303600960308746573743034303700" - "97030874657374303430" - "38009803087465737430343039009903087465737430343130009a03087465737430343131009b0308746573743034" - "3132009c030874657374" - "30343133009d03087465737430343134009e03087465737430343135009f0308746573743034313600a00308746573" - "743034313700a1030874" - "6573743034313800a20308746573743034313900a30308746573743034323000a40308746573743034323100a50308" - "746573743034323200a6" - "0308746573743034323300a70308746573743034323400a80308746573743034323500a90308746573743034323600" - "aa030874657374303432" - "3700ab0308746573743034323800ac0308746573743034323900ad0308746573743034333000ae0308746573743034" - "333100af030874657374" - "3034333200b00308746573743034333300b10308746573743034333400b20308746573743034333500b30308746573" - "743034333600b4030874" - "6573743034333700b50308746573743034333800b60308746573743034333900b70308746573743034343000b80308" - "746573743034343100b9" - "0308746573743034343200ba0308746573743034343300bb0308746573743034343400bc0308746573743034343500" - "bd030874657374303434" - "3600be0308746573743034343700bf0308746573743034343800c00308746573743034343900c10308746573743034" - "353000c2030874657374" - "3034353100c30308746573743034353200c40308746573743034353300c50308746573743034353400c60308746573" - "743034353500c7030874" - "6573743034353600c80308746573743034353700c90308746573743034353800ca0308746573743034353900cb0308" - "746573743034363000cc" - "0308746573743034363100cd0308746573743034363200ce0308746573743034363300cf0308746573743034363400" - "d0030874657374303436" - "3500d10308746573743034363600d20308746573743034363700d30308746573743034363800d40308746573743034" - "363900d5030874657374" - "3034373000d60308746573743034373100d70308746573743034373200d80308746573743034373300d90308746573" - "743034373400da030874" - "6573743034373500db0308746573743034373600dc0308746573743034373700dd0308746573743034373800de0308" - "746573743034373900df" - "0308746573743034383000e00308746573743034383100e10308746573743034383200e20308746573743034383300" - "e3030874657374303438" + "7430323635008902087465737430323636008a02087465737430323637008b02087465737430323638008c02087465" + "737430323639008d02087465737430323730008e02087465737430323731008f020874657374303237320090020874" + "6573743032373300910208746573743032373400920208746573743032373500930208746573743032373600940208" + "7465737430323737009502087465737430323738009602087465737430323739009702087465737430323830009802" + "087465737430323831009902087465737430323832009a02087465737430323833009b02087465737430323834009c" + "02087465737430323835009d02087465737430323836009e02087465737430323837009f0208746573743032383800" + "a00208746573743032383900a10208746573743032393000a20208746573743032393100a302087465737430323932" + "00a40208746573743032393300a50208746573743032393400a60208746573743032393500a7020874657374303239" + "3600a80208746573743032393700a90208746573743032393800aa0208746573743032393900ab0208746573743033" + "303000ac0208746573743033303100ad0208746573743033303200ae0208746573743033303300af02087465737430" + "33303400b00208746573743033303500b10208746573743033303600b20208746573743033303700b3020874657374" + "3033303800b40208746573743033303900b50208746573743033313000b60208746573743033313100b70208746573" + "743033313200b80208746573743033313300b90208746573743033313400ba0208746573743033313500bb02087465" + "73743033313600bc0208746573743033313700bd0208746573743033313800be0208746573743033313900bf020874" + "6573743033323000c00208746573743033323100c10208746573743033323200c20208746573743033323300c30208" + "746573743033323400c40208746573743033323500c50208746573743033323600c60208746573743033323700c702" + "08746573743033323800c80208746573743033323900c90208746573743033333000ca0208746573743033333100cb" + "0208746573743033333200cc0208746573743033333300cd0208746573743033333400ce0208746573743033333500" + "cf0208746573743033333600d00208746573743033333700d10208746573743033333800d202087465737430333339" + "00d30208746573743033343000d40208746573743033343100d50208746573743033343200d6020874657374303334" + "3300d70208746573743033343400d80208746573743033343500d90208746573743033343600da0208746573743033" + "343700db0208746573743033343800dc0208746573743033343900dd0208746573743033353000de02087465737430" + "33353100df0208746573743033353200e00208746573743033353300e10208746573743033353400e2020874657374" + "3033353500e30208746573743033353600e40208746573743033353700e50208746573743033353800e60208746573" + "743033353900e70208746573743033363000e80208746573743033363100e90208746573743033363200ea02087465" + "73743033363300eb0208746573743033363400ec0208746573743033363500ed0208746573743033363600ee020874" + "6573743033363700ef0208746573743033363800f00208746573743033363900f10208746573743033373000f20208" + "746573743033373100f30208746573743033373200f40208746573743033373300f50208746573743033373400f602" + "08746573743033373500f70208746573743033373600f80208746573743033373700f90208746573743033373800fa" + "0208746573743033373900fb0208746573743033383000fc0208746573743033383100fd0208746573743033383200" + "fe0208746573743033383300ff02087465737430333834008003087465737430333835008103087465737430333836" + "0082030874657374303338370083030874657374303338380084030874657374303338390085030874657374303339" + "3000860308746573743033393100870308746573743033393200880308746573743033393300890308746573743033" + "3934008a03087465737430333935008b03087465737430333936008c03087465737430333937008d03087465737430" + "333938008e03087465737430333939008f030874657374303430300090030874657374303430310091030874657374" + "3034303200920308746573743034303300930308746573743034303400940308746573743034303500950308746573" + "7430343036009603087465737430343037009703087465737430343038009803087465737430343039009903087465" + "737430343130009a03087465737430343131009b03087465737430343132009c03087465737430343133009d030874" + "65737430343134009e03087465737430343135009f0308746573743034313600a00308746573743034313700a10308" + "746573743034313800a20308746573743034313900a30308746573743034323000a40308746573743034323100a503" + "08746573743034323200a60308746573743034323300a70308746573743034323400a80308746573743034323500a9" + "0308746573743034323600aa0308746573743034323700ab0308746573743034323800ac0308746573743034323900" + "ad0308746573743034333000ae0308746573743034333100af0308746573743034333200b003087465737430343333" + "00b10308746573743034333400b20308746573743034333500b30308746573743034333600b4030874657374303433" + "3700b50308746573743034333800b60308746573743034333900b70308746573743034343000b80308746573743034" + "343100b90308746573743034343200ba0308746573743034343300bb0308746573743034343400bc03087465737430" + "34343500bd0308746573743034343600be0308746573743034343700bf0308746573743034343800c0030874657374" + "3034343900c10308746573743034353000c20308746573743034353100c30308746573743034353200c40308746573" + "743034353300c50308746573743034353400c60308746573743034353500c70308746573743034353600c803087465" + "73743034353700c90308746573743034353800ca0308746573743034353900cb0308746573743034363000cc030874" + "6573743034363100cd0308746573743034363200ce0308746573743034363300cf0308746573743034363400d00308" + "746573743034363500d10308746573743034363600d20308746573743034363700d30308746573743034363800d403" + "08746573743034363900d50308746573743034373000d60308746573743034373100d70308746573743034373200d8" + "0308746573743034373300d90308746573743034373400da0308746573743034373500db0308746573743034373600" + "dc0308746573743034373700dd0308746573743034373800de0308746573743034373900df03087465737430343830" + "00e00308746573743034383100e10308746573743034383200e20308746573743034383300e3030874657374303438" "3400e40308746573743034383500e50308746573743034383600e60308746573743034383700e70308746573743034" - "383800e8030874657374" - "3034383900e90308746573743034393000ea0308746573743034393100eb0308746573743034393200ec0308746573" - "743034393300ed030874" - "6573743034393400ee0308746573743034393500ef0308746573743034393600f00308746573743034393700f10308" - "746573743034393800f2" - "0308746573743034393900f30308746573743035303000f40308746573743035303100f50308746573743035303200" - "f6030874657374303530" - "3300f70308746573743035303400f80308746573743035303500f90308746573743035303600fa0308746573743035" - "303700fb030874657374" - "3035303800fc0308746573743035303900fd0308746573743035313000fe0308746573743035313100ff0308746573" - "74303531320080040874" - "6573743035313300810408746573743035313400820408746573743035313500830408746573743035313600840408" - "74657374303531370085" - "0408746573743035313800860408746573743035313900870408746573743035323000880408746573743035323100" - "89040874657374303532" - "32008a04087465737430353233008b04087465737430353234008c04087465737430353235008d0408746573743035" - "3236008e040874657374" - "30353237008f0408746573743035323800900408746573743035323900910408746573743035333000920408746573" - "74303533310093040874" - "6573743035333200940408746573743035333300950408746573743035333400960408746573743035333500970408" - "74657374303533360098" - "04087465737430353337009904087465737430353338009a04087465737430353339009b0408746573743035343000" - "9c040874657374303534" - "31009d04087465737430353432009e04087465737430353433009f0408746573743035343400a00408746573743035" - "343500a1040874657374" - "3035343600a20408746573743035343700a30408746573743035343800a40408746573743035343900a50408746573" - "743035353000a6040874" - "6573743035353100a70408746573743035353200a80408746573743035353300a90408746573743035353400aa0408" - "746573743035353500ab" - "0408746573743035353600ac0408746573743035353700ad0408746573743035353800ae0408746573743035353900" - "af040874657374303536" - "3000b00408746573743035363100b10408746573743035363200b20408746573743035363300b30408746573743035" - "363400b4040874657374" - "3035363500b50408746573743035363600b60408746573743035363700b70408746573743035363800b80408746573" - "743035363900b9040874" - "6573743035373000ba0408746573743035373100bb0408746573743035373200bc0408746573743035373300bd0408" - "746573743035373400be" - "0408746573743035373500bf0408746573743035373600c00408746573743035373700c10408746573743035373800" - "c2040874657374303537" - "3900c30408746573743035383000c40408746573743035383100c50408746573743035383200c60408746573743035" - "383300c7040874657374" - "3035383400c80408746573743035383500c90408746573743035383600ca0408746573743035383700cb0408746573" - "743035383800cc040874" - "6573743035383900cd0408746573743035393000ce0408746573743035393100cf0408746573743035393200d00408" - "746573743035393300d1" - "0408746573743035393400d20408746573743035393500d30408746573743035393600d40408746573743035393700" - "d5040874657374303539" - "3800d60408746573743035393900d70408746573743036303000d80408746573743036303100d90408746573743036" - "303200da040874657374" - "3036303300db0408746573743036303400dc0408746573743036303500dd0408746573743036303600de0408746573" - "743036303700df040874" - "6573743036303800e00408746573743036303900e10408746573743036313000e20408746573743036313100e30408" - "746573743036313200e4" - "0408746573743036313300e50408746573743036313400e60408746573743036313500e70408746573743036313600" - "e8040874657374303631" - "3700e90408746573743036313800ea0408746573743036313900eb0408746573743036323000ec0408746573743036" - "323100ed040874657374" - "3036323200ee0408746573743036323300ef0408746573743036323400f00408746573743036323500f10408746573" - "743036323600f2040874" - "6573743036323700f30408746573743036323800f40408746573743036323900f50408746573743036333000f60408" - "746573743036333100f7" - "0408746573743036333200f80408746573743036333300f90408746573743036333400fa0408746573743036333500" - "fb040874657374303633" - "3600fc0408746573743036333700fd0408746573743036333800fe0408746573743036333900ff0408746573743036" - "34300080050874657374" - "3036343100810508746573743036343200820508746573743036343300830508746573743036343400840508746573" - "74303634350085050874" - "6573743036343600860508746573743036343700870508746573743036343800880508746573743036343900890508" - "7465737430363530008a" - "05087465737430363531008b05087465737430363532008c05087465737430363533008d0508746573743036353400" - "8e050874657374303635" - "35008f0508746573743036353600900508746573743036353700910508746573743036353800920508746573743036" - "35390093050874657374" - "3036363000940508746573743036363100950508746573743036363200960508746573743036363300970508746573" - "74303636340098050874" - "65737430363635009905087465737430363636009a05087465737430363637009b05087465737430363638009c0508" - "7465737430363639009d" - "05087465737430363730009e05087465737430363731009f0508746573743036373200a00508746573743036373300" - "a1050874657374303637" - "3400a20508746573743036373500a30508746573743036373600a40508746573743036373700a50508746573743036" - "373800a6050874657374" - "3036373900a70508746573743036383000a80508746573743036383100a90508746573743036383200aa0508746573" - "743036383300ab050874" - "6573743036383400ac0508746573743036383500ad0508746573743036383600ae0508746573743036383700af0508" - "746573743036383800b0" - "0508746573743036383900b10508746573743036393000b20508746573743036393100b30508746573743036393200" - "b4050874657374303639" - "3300b50508746573743036393400b60508746573743036393500b70508746573743036393600b80508746573743036" - "393700b9050874657374" - "3036393800ba0508746573743036393900bb0508746573743037303000bc0508746573743037303100bd0508746573" - "743037303200be050874" - "6573743037303300bf0508746573743037303400c00508746573743037303500c10508746573743037303600c20508" - "746573743037303700c3" + "383800e80308746573743034383900e90308746573743034393000ea0308746573743034393100eb03087465737430" + "34393200ec0308746573743034393300ed0308746573743034393400ee0308746573743034393500ef030874657374" + "3034393600f00308746573743034393700f10308746573743034393800f20308746573743034393900f30308746573" + "743035303000f40308746573743035303100f50308746573743035303200f60308746573743035303300f703087465" + "73743035303400f80308746573743035303500f90308746573743035303600fa0308746573743035303700fb030874" + "6573743035303800fc0308746573743035303900fd0308746573743035313000fe0308746573743035313100ff0308" + "7465737430353132008004087465737430353133008104087465737430353134008204087465737430353135008304" + "0874657374303531360084040874657374303531370085040874657374303531380086040874657374303531390087" + "04087465737430353230008804087465737430353231008904087465737430353232008a0408746573743035323300" + "8b04087465737430353234008c04087465737430353235008d04087465737430353236008e04087465737430353237" + "008f040874657374303532380090040874657374303532390091040874657374303533300092040874657374303533" + "3100930408746573743035333200940408746573743035333300950408746573743035333400960408746573743035" + "3335009704087465737430353336009804087465737430353337009904087465737430353338009a04087465737430" + "353339009b04087465737430353430009c04087465737430353431009d04087465737430353432009e040874657374" + "30353433009f0408746573743035343400a00408746573743035343500a10408746573743035343600a20408746573" + "743035343700a30408746573743035343800a40408746573743035343900a50408746573743035353000a604087465" + "73743035353100a70408746573743035353200a80408746573743035353300a90408746573743035353400aa040874" + "6573743035353500ab0408746573743035353600ac0408746573743035353700ad0408746573743035353800ae0408" + "746573743035353900af0408746573743035363000b00408746573743035363100b10408746573743035363200b204" + "08746573743035363300b30408746573743035363400b40408746573743035363500b50408746573743035363600b6" + "0408746573743035363700b70408746573743035363800b80408746573743035363900b90408746573743035373000" + "ba0408746573743035373100bb0408746573743035373200bc0408746573743035373300bd04087465737430353734" + "00be0408746573743035373500bf0408746573743035373600c00408746573743035373700c1040874657374303537" + "3800c20408746573743035373900c30408746573743035383000c40408746573743035383100c50408746573743035" + "383200c60408746573743035383300c70408746573743035383400c80408746573743035383500c904087465737430" + "35383600ca0408746573743035383700cb0408746573743035383800cc0408746573743035383900cd040874657374" + "3035393000ce0408746573743035393100cf0408746573743035393200d00408746573743035393300d10408746573" + "743035393400d20408746573743035393500d30408746573743035393600d40408746573743035393700d504087465" + "73743035393800d60408746573743035393900d70408746573743036303000d80408746573743036303100d9040874" + "6573743036303200da0408746573743036303300db0408746573743036303400dc0408746573743036303500dd0408" + "746573743036303600de0408746573743036303700df0408746573743036303800e00408746573743036303900e104" + "08746573743036313000e20408746573743036313100e30408746573743036313200e40408746573743036313300e5" + "0408746573743036313400e60408746573743036313500e70408746573743036313600e80408746573743036313700" + "e90408746573743036313800ea0408746573743036313900eb0408746573743036323000ec04087465737430363231" + "00ed0408746573743036323200ee0408746573743036323300ef0408746573743036323400f0040874657374303632" + "3500f10408746573743036323600f20408746573743036323700f30408746573743036323800f40408746573743036" + "323900f50408746573743036333000f60408746573743036333100f70408746573743036333200f804087465737430" + "36333300f90408746573743036333400fa0408746573743036333500fb0408746573743036333600fc040874657374" + "3036333700fd0408746573743036333800fe0408746573743036333900ff0408746573743036343000800508746573" + "7430363431008105087465737430363432008205087465737430363433008305087465737430363434008405087465" + "7374303634350085050874657374303634360086050874657374303634370087050874657374303634380088050874" + "65737430363439008905087465737430363530008a05087465737430363531008b05087465737430363532008c0508" + "7465737430363533008d05087465737430363534008e05087465737430363535008f05087465737430363536009005" + "0874657374303635370091050874657374303635380092050874657374303635390093050874657374303636300094" + "0508746573743036363100950508746573743036363200960508746573743036363300970508746573743036363400" + "9805087465737430363635009905087465737430363636009a05087465737430363637009b05087465737430363638" + "009c05087465737430363639009d05087465737430363730009e05087465737430363731009f050874657374303637" + "3200a00508746573743036373300a10508746573743036373400a20508746573743036373500a30508746573743036" + "373600a40508746573743036373700a50508746573743036373800a60508746573743036373900a705087465737430" + "36383000a80508746573743036383100a90508746573743036383200aa0508746573743036383300ab050874657374" + "3036383400ac0508746573743036383500ad0508746573743036383600ae0508746573743036383700af0508746573" + "743036383800b00508746573743036383900b10508746573743036393000b20508746573743036393100b305087465" + "73743036393200b40508746573743036393300b50508746573743036393400b60508746573743036393500b7050874" + "6573743036393600b80508746573743036393700b90508746573743036393800ba0508746573743036393900bb0508" + "746573743037303000bc0508746573743037303100bd0508746573743037303200be0508746573743037303300bf05" + "08746573743037303400c00508746573743037303500c10508746573743037303600c20508746573743037303700c3" "0508746573743037303800c40508746573743037303900c50508746573743037313000c60508746573743037313100" - "c7050874657374303731" - "3200c80508746573743037313300c90508746573743037313400ca0508746573743037313500cb0508746573743037" - "313600cc050874657374" - "3037313700cd0508746573743037313800ce0508746573743037313900cf0508746573743037323000d00508746573" - "743037323100d1050874" - "6573743037323200d20508746573743037323300d30508746573743037323400d40508746573743037323500d50508" - "746573743037323600d6" - "0508746573743037323700d70508746573743037323800d80508746573743037323900d90508746573743037333000" - "da050874657374303733" - "3100db0508746573743037333200dc0508746573743037333300dd0508746573743037333400de0508746573743037" - "333500df050874657374" - "3037333600e00508746573743037333700e10508746573743037333800e20508746573743037333900e30508746573" - "743037343000e4050874" - "6573743037343100e50508746573743037343200e60508746573743037343300e70508746573743037343400e80508" - "746573743037343500e9" - "0508746573743037343600ea0508746573743037343700eb0508746573743037343800ec0508746573743037343900" - "ed050874657374303735" - "3000ee0508746573743037353100ef0508746573743037353200f00508746573743037353300f10508746573743037" - "353400f2050874657374" - "3037353500f30508746573743037353600f40508746573743037353700f50508746573743037353800f60508746573" - "743037353900f7050874" - "6573743037363000f80508746573743037363100f90508746573743037363200fa0508746573743037363300fb0508" - "746573743037363400fc" - "0508746573743037363500fd0508746573743037363600fe0508746573743037363700ff0508746573743037363800" - "80060874657374303736" - "3900810608746573743037373000820608746573743037373100830608746573743037373200840608746573743037" - "37330085060874657374" - "3037373400860608746573743037373500870608746573743037373600880608746573743037373700890608746573" - "7430373738008a060874" - "65737430373739008b06087465737430373830008c06087465737430373831008d06087465737430373832008e0608" - "7465737430373833008f" - "0608746573743037383400900608746573743037383500910608746573743037383600920608746573743037383700" - "93060874657374303738" - "3800940608746573743037383900950608746573743037393000960608746573743037393100970608746573743037" - "39320098060874657374" - "30373933009906087465737430373934009a06087465737430373935009b06087465737430373936009c0608746573" - "7430373937009d060874" - "65737430373938009e06087465737430373939009f0608746573743038303000a00608746573743038303100a10608" - "746573743038303200a2" - "0608746573743038303300a30608746573743038303400a40608746573743038303500a50608746573743038303600" - "a6060874657374303830" - "3700a70608746573743038303800a80608746573743038303900a90608746573743038313000aa0608746573743038" - "313100ab060874657374" - "3038313200ac0608746573743038313300ad0608746573743038313400ae0608746573743038313500af0608746573" - "743038313600b0060874" - "6573743038313700b10608746573743038313800b20608746573743038313900b30608746573743038323000b40608" - "746573743038323100b5" - "0608746573743038323200b60608746573743038323300b70608746573743038323400b80608746573743038323500" - "b9060874657374303832" - "3600ba0608746573743038323700bb0608746573743038323800bc0608746573743038323900bd0608746573743038" - "333000be060874657374" - "3038333100bf0608746573743038333200c00608746573743038333300c10608746573743038333400c20608746573" - "743038333500c3060874" - "6573743038333600c40608746573743038333700c50608746573743038333800c60608746573743038333900c70608" - "746573743038343000c8" - "0608746573743038343100c90608746573743038343200ca0608746573743038343300cb0608746573743038343400" - "cc060874657374303834" - "3500cd0608746573743038343600ce0608746573743038343700cf0608746573743038343800d00608746573743038" - "343900d1060874657374" - "3038353000d20608746573743038353100d30608746573743038353200d40608746573743038353300d50608746573" - "743038353400d6060874" - "6573743038353500d70608746573743038353600d80608746573743038353700d90608746573743038353800da0608" - "746573743038353900db" - "0608746573743038363000dc0608746573743038363100dd0608746573743038363200de0608746573743038363300" - "df060874657374303836" - "3400e00608746573743038363500e10608746573743038363600e20608746573743038363700e30608746573743038" - "363800e4060874657374" - "3038363900e50608746573743038373000e60608746573743038373100e70608746573743038373200e80608746573" - "743038373300e9060874" - "6573743038373400ea0608746573743038373500eb0608746573743038373600ec0608746573743038373700ed0608" - "746573743038373800ee" - "0608746573743038373900ef0608746573743038383000f00608746573743038383100f10608746573743038383200" - "f2060874657374303838" - "3300f30608746573743038383400f40608746573743038383500f50608746573743038383600f60608746573743038" - "383700f7060874657374" - "3038383800f80608746573743038383900f90608746573743038393000fa0608746573743038393100fb0608746573" - "743038393200fc060874" - "6573743038393300fd0608746573743038393400fe0608746573743038393500ff0608746573743038393600800708" - "74657374303839370081" - "0708746573743038393800820708746573743038393900830708746573743039303000840708746573743039303100" - "85070874657374303930" - "3200860708746573743039303300870708746573743039303400880708746573743039303500890708746573743039" - "3036008a070874657374" - "30393037008b07087465737430393038008c07087465737430393039008d07087465737430393130008e0708746573" - "7430393131008f070874" - "6573743039313200900708746573743039313300910708746573743039313400920708746573743039313500930708" - "74657374303931360094" - "0708746573743039313700950708746573743039313800960708746573743039313900970708746573743039323000" - "98070874657374303932" - "31009907087465737430393232009a07087465737430393233009b07087465737430393234009c0708746573743039" - "3235009d070874657374" - "30393236009e07087465737430393237009f0708746573743039323800a00708746573743039323900a10708746573" - "743039333000a2070874" + "c70508746573743037313200c80508746573743037313300c90508746573743037313400ca05087465737430373135" + "00cb0508746573743037313600cc0508746573743037313700cd0508746573743037313800ce050874657374303731" + "3900cf0508746573743037323000d00508746573743037323100d10508746573743037323200d20508746573743037" + "323300d30508746573743037323400d40508746573743037323500d50508746573743037323600d605087465737430" + "37323700d70508746573743037323800d80508746573743037323900d90508746573743037333000da050874657374" + "3037333100db0508746573743037333200dc0508746573743037333300dd0508746573743037333400de0508746573" + "743037333500df0508746573743037333600e00508746573743037333700e10508746573743037333800e205087465" + "73743037333900e30508746573743037343000e40508746573743037343100e50508746573743037343200e6050874" + "6573743037343300e70508746573743037343400e80508746573743037343500e90508746573743037343600ea0508" + "746573743037343700eb0508746573743037343800ec0508746573743037343900ed0508746573743037353000ee05" + "08746573743037353100ef0508746573743037353200f00508746573743037353300f10508746573743037353400f2" + "0508746573743037353500f30508746573743037353600f40508746573743037353700f50508746573743037353800" + "f60508746573743037353900f70508746573743037363000f80508746573743037363100f905087465737430373632" + "00fa0508746573743037363300fb0508746573743037363400fc0508746573743037363500fd050874657374303736" + "3600fe0508746573743037363700ff0508746573743037363800800608746573743037363900810608746573743037" + "3730008206087465737430373731008306087465737430373732008406087465737430373733008506087465737430" + "3737340086060874657374303737350087060874657374303737360088060874657374303737370089060874657374" + "30373738008a06087465737430373739008b06087465737430373830008c06087465737430373831008d0608746573" + "7430373832008e06087465737430373833008f06087465737430373834009006087465737430373835009106087465" + "7374303738360092060874657374303738370093060874657374303738380094060874657374303738390095060874" + "6573743037393000960608746573743037393100970608746573743037393200980608746573743037393300990608" + "7465737430373934009a06087465737430373935009b06087465737430373936009c06087465737430373937009d06" + "087465737430373938009e06087465737430373939009f0608746573743038303000a00608746573743038303100a1" + "0608746573743038303200a20608746573743038303300a30608746573743038303400a40608746573743038303500" + "a50608746573743038303600a60608746573743038303700a70608746573743038303800a806087465737430383039" + "00a90608746573743038313000aa0608746573743038313100ab0608746573743038313200ac060874657374303831" + "3300ad0608746573743038313400ae0608746573743038313500af0608746573743038313600b00608746573743038" + "313700b10608746573743038313800b20608746573743038313900b30608746573743038323000b406087465737430" + "38323100b50608746573743038323200b60608746573743038323300b70608746573743038323400b8060874657374" + "3038323500b90608746573743038323600ba0608746573743038323700bb0608746573743038323800bc0608746573" + "743038323900bd0608746573743038333000be0608746573743038333100bf0608746573743038333200c006087465" + "73743038333300c10608746573743038333400c20608746573743038333500c30608746573743038333600c4060874" + "6573743038333700c50608746573743038333800c60608746573743038333900c70608746573743038343000c80608" + "746573743038343100c90608746573743038343200ca0608746573743038343300cb0608746573743038343400cc06" + "08746573743038343500cd0608746573743038343600ce0608746573743038343700cf0608746573743038343800d0" + "0608746573743038343900d10608746573743038353000d20608746573743038353100d30608746573743038353200" + "d40608746573743038353300d50608746573743038353400d60608746573743038353500d706087465737430383536" + "00d80608746573743038353700d90608746573743038353800da0608746573743038353900db060874657374303836" + "3000dc0608746573743038363100dd0608746573743038363200de0608746573743038363300df0608746573743038" + "363400e00608746573743038363500e10608746573743038363600e20608746573743038363700e306087465737430" + "38363800e40608746573743038363900e50608746573743038373000e60608746573743038373100e7060874657374" + "3038373200e80608746573743038373300e90608746573743038373400ea0608746573743038373500eb0608746573" + "743038373600ec0608746573743038373700ed0608746573743038373800ee0608746573743038373900ef06087465" + "73743038383000f00608746573743038383100f10608746573743038383200f20608746573743038383300f3060874" + "6573743038383400f40608746573743038383500f50608746573743038383600f60608746573743038383700f70608" + "746573743038383800f80608746573743038383900f90608746573743038393000fa0608746573743038393100fb06" + "08746573743038393200fc0608746573743038393300fd0608746573743038393400fe0608746573743038393500ff" + "0608746573743038393600800708746573743038393700810708746573743038393800820708746573743038393900" + "8307087465737430393030008407087465737430393031008507087465737430393032008607087465737430393033" + "008707087465737430393034008807087465737430393035008907087465737430393036008a070874657374303930" + "37008b07087465737430393038008c07087465737430393039008d07087465737430393130008e0708746573743039" + "3131008f07087465737430393132009007087465737430393133009107087465737430393134009207087465737430" + "3931350093070874657374303931360094070874657374303931370095070874657374303931380096070874657374" + "30393139009707087465737430393230009807087465737430393231009907087465737430393232009a0708746573" + "7430393233009b07087465737430393234009c07087465737430393235009d07087465737430393236009e07087465" + "737430393237009f0708746573743039323800a00708746573743039323900a10708746573743039333000a2070874" "6573743039333100a30708746573743039333200a40708746573743039333300a50708746573743039333400a60708" - "746573743039333500a7" - "0708746573743039333600a80708746573743039333700a90708746573743039333800aa0708746573743039333900" - "ab070874657374303934" - "3000ac0708746573743039343100ad0708746573743039343200ae0708746573743039343300af0708746573743039" - "343400b0070874657374" - "3039343500b10708746573743039343600b20708746573743039343700b30708746573743039343800b40708746573" - "743039343900b5070874" - "6573743039353000b60708746573743039353100b70708746573743039353200b80708746573743039353300b90708" - "746573743039353400ba" - "0708746573743039353500bb0708746573743039353600bc0708746573743039353700bd0708746573743039353800" - "be070874657374303935" - "3900bf0708746573743039363000c00708746573743039363100c10708746573743039363200c20708746573743039" - "363300c3070874657374" - "3039363400c40708746573743039363500c50708746573743039363600c60708746573743039363700c70708746573" - "743039363800c8070874" - "6573743039363900c90708746573743039373000ca0708746573743039373100cb0708746573743039373200cc0708" - "746573743039373300cd" - "0708746573743039373400ce0708746573743039373500cf0708746573743039373600d00708746573743039373700" - "d1070874657374303937" - "3800d20708746573743039373900d30708746573743039383000d40708746573743039383100d50708746573743039" - "383200d6070874657374" - "3039383300d70708746573743039383400d80708746573743039383500d90708746573743039383600da0708746573" - "743039383700db070874" - "6573743039383800dc0708746573743039383900dd0708746573743039393000de0708746573743039393100df0708" - "746573743039393200e0" - "0708746573743039393300e10708746573743039393400e20708746573743039393500e30708746573743039393600" - "e4070874657374303939" - "3700e50708746573743039393800e60708746573743039393900e70708746573743130303000e80708746573743130" - "303100e9070874657374" - "3130303200ea0708746573743130303300eb0708746573743130303400ec0708746573743130303500ed0708746573" - "743130303600ee070874" - "6573743130303700ef0708746573743130303800f00708746573743130303900f10708746573743130313000f20708" - "746573743130313100f3" - "0708746573743130313200f40708746573743130313300f50708746573743130313400f60708746573743130313500" - "f7070874657374313031" - "3600f80708746573743130313700f90708746573743130313800fa0708746573743130313900fb0708746573743130" - "323000fc070874657374" - "3130323100fd0708746573743130323200fe0708746573743130323300ff0708746573743130323400800808746573" - "74313032350081080874" - "6573743130323600820808746573743130323700830808746573743130323800840808746573743130323900850808" - "74657374313033300086" - "0808746573743130333100870808746573743130333200880808746573743130333300890808746573743130333400" - "8a080874657374313033" - "35008b08087465737431303336008c08087465737431303337008d08087465737431303338008e0808746573743130" - "3339008f080874657374" - "3130343000900808746573743130343100910808746573743130343200920808746573743130343300930808746573" - "74313034340094080874" - "6573743130343500950808746573743130343600960808746573743130343700970808746573743130343800980808" - "74657374313034390099" - "08087465737431303530009a08087465737431303531009b08087465737431303532009c0808746573743130353300" - "9d080874657374313035" - "34009e08087465737431303535009f0808746573743130353600a00808746573743130353700a10808746573743130" - "353800a2080874657374" - "3130353900a30808746573743130363000a40808746573743130363100a50808746573743130363200a60808746573" - "743130363300a7080874" - "6573743130363400a80808746573743130363500a90808746573743130363600aa0808746573743130363700ab0808" - "746573743130363800ac" - "0808746573743130363900ad0808746573743130373000ae0808746573743130373100af0808746573743130373200" - "b0080874657374313037" - "3300b10808746573743130373400b20808746573743130373500b30808746573743130373600b40808746573743130" - "373700b5080874657374" - "3130373800b60808746573743130373900b70808746573743130383000b80808746573743130383100b90808746573" - "743130383200ba080874" - "6573743130383300bb0808746573743130383400bc0808746573743130383500bd0808746573743130383600be0808" - "746573743130383700bf" - "0808746573743130383800c00808746573743130383900c10808746573743130393000c20808746573743130393100" - "c3080874657374313039" - "3200c40808746573743130393300c50808746573743130393400c60808746573743130393500c70808746573743130" - "393600c8080874657374" - "3130393700c90808746573743130393800ca0808746573743130393900cb0808746573743131303000cc0808746573" - "743131303100cd080874" - "6573743131303200ce0808746573743131303300cf0808746573743131303400d00808746573743131303500d10808" - "746573743131303600d2" - "0808746573743131303700d30808746573743131303800d40808746573743131303900d50808746573743131313000" - "d6080874657374313131" - "3100d70808746573743131313200d80808746573743131313300d90808746573743131313400da0808746573743131" - "313500db080874657374" - "3131313600dc0808746573743131313700dd0808746573743131313800de0808746573743131313900df0808746573" - "743131323000e0080874" - "6573743131323100e10808746573743131323200e20808746573743131323300e30808746573743131323400e40808" - "746573743131323500e5" - "0808746573743131323600e60808746573743131323700e70808746573743131323800e80808746573743131323900" - "e9080874657374313133" - "3000ea0808746573743131333100eb0808746573743131333200ec0808746573743131333300ed0808746573743131" - "333400ee080874657374" - "3131333500ef0808746573743131333600f00808746573743131333700f10808746573743131333800f20808746573" - "743131333900f3080874" - "6573743131343000f40808746573743131343100f50808746573743131343200f60808746573743131343300f70808" - "746573743131343400f8" - "0808746573743131343500f90808746573743131343600fa0808746573743131343700fb0808746573743131343800" - "fc080874657374313134" - "3900fd0808746573743131353000fe0808746573743131353100ff0808746573743131353200800908746573743131" - "35330081090874657374" + "746573743039333500a70708746573743039333600a80708746573743039333700a90708746573743039333800aa07" + "08746573743039333900ab0708746573743039343000ac0708746573743039343100ad0708746573743039343200ae" + "0708746573743039343300af0708746573743039343400b00708746573743039343500b10708746573743039343600" + "b20708746573743039343700b30708746573743039343800b40708746573743039343900b507087465737430393530" + "00b60708746573743039353100b70708746573743039353200b80708746573743039353300b9070874657374303935" + "3400ba0708746573743039353500bb0708746573743039353600bc0708746573743039353700bd0708746573743039" + "353800be0708746573743039353900bf0708746573743039363000c00708746573743039363100c107087465737430" + "39363200c20708746573743039363300c30708746573743039363400c40708746573743039363500c5070874657374" + "3039363600c60708746573743039363700c70708746573743039363800c80708746573743039363900c90708746573" + "743039373000ca0708746573743039373100cb0708746573743039373200cc0708746573743039373300cd07087465" + "73743039373400ce0708746573743039373500cf0708746573743039373600d00708746573743039373700d1070874" + "6573743039373800d20708746573743039373900d30708746573743039383000d40708746573743039383100d50708" + "746573743039383200d60708746573743039383300d70708746573743039383400d80708746573743039383500d907" + "08746573743039383600da0708746573743039383700db0708746573743039383800dc0708746573743039383900dd" + "0708746573743039393000de0708746573743039393100df0708746573743039393200e00708746573743039393300" + "e10708746573743039393400e20708746573743039393500e30708746573743039393600e407087465737430393937" + "00e50708746573743039393800e60708746573743039393900e70708746573743130303000e8070874657374313030" + "3100e90708746573743130303200ea0708746573743130303300eb0708746573743130303400ec0708746573743130" + "303500ed0708746573743130303600ee0708746573743130303700ef0708746573743130303800f007087465737431" + "30303900f10708746573743130313000f20708746573743130313100f30708746573743130313200f4070874657374" + "3130313300f50708746573743130313400f60708746573743130313500f70708746573743130313600f80708746573" + "743130313700f90708746573743130313800fa0708746573743130313900fb0708746573743130323000fc07087465" + "73743130323100fd0708746573743130323200fe0708746573743130323300ff070874657374313032340080080874" + "6573743130323500810808746573743130323600820808746573743130323700830808746573743130323800840808" + "7465737431303239008508087465737431303330008608087465737431303331008708087465737431303332008808" + "087465737431303333008908087465737431303334008a08087465737431303335008b08087465737431303336008c" + "08087465737431303337008d08087465737431303338008e08087465737431303339008f0808746573743130343000" + "9008087465737431303431009108087465737431303432009208087465737431303433009308087465737431303434" + "0094080874657374313034350095080874657374313034360096080874657374313034370097080874657374313034" + "38009808087465737431303439009908087465737431303530009a08087465737431303531009b0808746573743130" + "3532009c08087465737431303533009d08087465737431303534009e08087465737431303535009f08087465737431" + "30353600a00808746573743130353700a10808746573743130353800a20808746573743130353900a3080874657374" + "3130363000a40808746573743130363100a50808746573743130363200a60808746573743130363300a70808746573" + "743130363400a80808746573743130363500a90808746573743130363600aa0808746573743130363700ab08087465" + "73743130363800ac0808746573743130363900ad0808746573743130373000ae0808746573743130373100af080874" + "6573743130373200b00808746573743130373300b10808746573743130373400b20808746573743130373500b30808" + "746573743130373600b40808746573743130373700b50808746573743130373800b60808746573743130373900b708" + "08746573743130383000b80808746573743130383100b90808746573743130383200ba0808746573743130383300bb" + "0808746573743130383400bc0808746573743130383500bd0808746573743130383600be0808746573743130383700" + "bf0808746573743130383800c00808746573743130383900c10808746573743130393000c208087465737431303931" + "00c30808746573743130393200c40808746573743130393300c50808746573743130393400c6080874657374313039" + "3500c70808746573743130393600c80808746573743130393700c90808746573743130393800ca0808746573743130" + "393900cb0808746573743131303000cc0808746573743131303100cd0808746573743131303200ce08087465737431" + "31303300cf0808746573743131303400d00808746573743131303500d10808746573743131303600d2080874657374" + "3131303700d30808746573743131303800d40808746573743131303900d50808746573743131313000d60808746573" + "743131313100d70808746573743131313200d80808746573743131313300d90808746573743131313400da08087465" + "73743131313500db0808746573743131313600dc0808746573743131313700dd0808746573743131313800de080874" + "6573743131313900df0808746573743131323000e00808746573743131323100e10808746573743131323200e20808" + "746573743131323300e30808746573743131323400e40808746573743131323500e50808746573743131323600e608" + "08746573743131323700e70808746573743131323800e80808746573743131323900e90808746573743131333000ea" + "0808746573743131333100eb0808746573743131333200ec0808746573743131333300ed0808746573743131333400" + "ee0808746573743131333500ef0808746573743131333600f00808746573743131333700f108087465737431313338" + "00f20808746573743131333900f30808746573743131343000f40808746573743131343100f5080874657374313134" + "3200f60808746573743131343300f70808746573743131343400f80808746573743131343500f90808746573743131" + "343600fa0808746573743131343700fb0808746573743131343800fc0808746573743131343900fd08087465737431" + "31353000fe0808746573743131353100ff080874657374313135320080090874657374313135330081090874657374" "3131353400820908746573743131353500830908746573743131353600840908746573743131353700850908746573" - "74313135380086090874" - "65737431313539008709087465737431313630008809087465737431313631008909087465737431313632008a0908" - "7465737431313633008b" - "09087465737431313634008c09087465737431313635008d09087465737431313636008e0908746573743131363700" - "8f090874657374313136" - "3800900908746573743131363900910908746573743131373000920908746573743131373100930908746573743131" - "37320094090874657374" - "3131373300950908746573743131373400960908746573743131373500970908746573743131373600980908746573" - "74313137370099090874" - "65737431313738009a09087465737431313739009b09087465737431313830009c09087465737431313831009d0908" - "7465737431313832009e" - "09087465737431313833009f0908746573743131383400a00908746573743131383500a10908746573743131383600" - "a2090874657374313138" - "3700a30908746573743131383800a40908746573743131383900a50908746573743131393000a60908746573743131" - "393100a7090874657374" - "3131393200a80908746573743131393300a90908746573743131393400aa0908746573743131393500ab0908746573" - "743131393600ac090874" - "6573743131393700ad0908746573743131393800ae0908746573743131393900af0908746573743132303000b00908" - "746573743132303100b1" - "0908746573743132303200b20908746573743132303300b30908746573743132303400b40908746573743132303500" - "b5090874657374313230" - "3600b60908746573743132303700b70908746573743132303800b80908746573743132303900b90908746573743132" - "313000ba090874657374" - "3132313100bb0908746573743132313200bc0908746573743132313300bd0908746573743132313400be0908746573" - "743132313500bf090874" - "6573743132313600c00908746573743132313700c10908746573743132313800c20908746573743132313900c30908" - "746573743132323000c4" - "0908746573743132323100c50908746573743132323200c60908746573743132323300c70908746573743132323400" - "c8090874657374313232" - "3500c90908746573743132323600ca0908746573743132323700cb0908746573743132323800cc0908746573743132" - "323900cd090874657374" - "3132333000ce0908746573743132333100cf0908746573743132333200d00908746573743132333300d10908746573" - "743132333400d2090874" - "6573743132333500d30908746573743132333600d40908746573743132333700d50908746573743132333800d60908" - "746573743132333900d7" - "0908746573743132343000d80908746573743132343100d90908746573743132343200da0908746573743132343300" - "db090874657374313234" - "3400dc0908746573743132343500dd0908746573743132343600de0908746573743132343700df0908746573743132" - "343800e0090874657374" - "3132343900e10908746573743132353000e20908746573743132353100e30908746573743132353200e40908746573" - "743132353300e5090874" - "6573743132353400e60908746573743132353500e70908746573743132353600e80908746573743132353700e90908" - "746573743132353800ea" - "0908746573743132353900eb0908746573743132363000ec0908746573743132363100ed0908746573743132363200" - "ee090874657374313236" - "3300ef0908746573743132363400f00908746573743132363500f10908746573743132363600f20908746573743132" - "363700f3090874657374" - "3132363800f40908746573743132363900f50908746573743132373000f60908746573743132373100f70908746573" - "743132373200f8090874" - "6573743132373300f90908746573743132373400fa0908746573743132373500fb0908746573743132373600fc0908" - "746573743132373700fd" - "0908746573743132373800fe0908746573743132373900ff0908746573743132383000800a08746573743132383100" - "810a0874657374313238" - "3200820a08746573743132383300830a08746573743132383400840a08746573743132383500850a08746573743132" - "383600860a0874657374" - "3132383700870a08746573743132383800880a08746573743132383900890a087465737431323930008a0a08746573" - "7431323931008b0a0874" - "65737431323932008c0a087465737431323933008d0a087465737431323934008e0a087465737431323935008f0a08" - "74657374313239360090" - "0a08746573743132393700910a08746573743132393800920a08746573743132393900930a08746573743133303000" - "940a0874657374313330" - "3100950a08746573743133303200960a08746573743133303300970a08746573743133303400980a08746573743133" - "303500990a0874657374" - "31333036009a0a087465737431333037009b0a087465737431333038009c0a087465737431333039009d0a08746573" - "7431333130009e0a0874" - "65737431333131009f0a08746573743133313200a00a08746573743133313300a10a08746573743133313400a20a08" - "746573743133313500a3" - "0a08746573743133313600a40a08746573743133313700a50a08746573743133313800a60a08746573743133313900" - "a70a0874657374313332" - "3000a80a08746573743133323100a90a08746573743133323200aa0a08746573743133323300ab0a08746573743133" - "323400ac0a0874657374" - "3133323500ad0a08746573743133323600ae0a08746573743133323700af0a08746573743133323800b00a08746573" - "743133323900b10a0874" - "6573743133333000b20a08746573743133333100b30a08746573743133333200b40a08746573743133333300b50a08" - "746573743133333400b6" - "0a08746573743133333500b70a08746573743133333600b80a08746573743133333700b90a08746573743133333800" - "ba0a0874657374313333" - "3900bb0a08746573743133343000bc0a08746573743133343100bd0a08746573743133343200be0a08746573743133" - "343300bf0a0874657374" - "3133343400c00a08746573743133343500c10a08746573743133343600c20a08746573743133343700c30a08746573" - "743133343800c40a0874" - "6573743133343900c50a08746573743133353000c60a08746573743133353100c70a08746573743133353200c80a08" - "746573743133353300c9" - "0a08746573743133353400ca0a08746573743133353500cb0a08746573743133353600cc0a08746573743133353700" - "cd0a0874657374313335" - "3800ce0a08746573743133353900cf0a08746573743133363000d00a08746573743133363100d10a08746573743133" - "363200d20a0874657374" - "3133363300d30a08746573743133363400d40a08746573743133363500d50a08746573743133363600d60a08746573" - "743133363700d70a0874" - "6573743133363800d80a08746573743133363900d90a08746573743133373000da0a08746573743133373100db0a08" - "746573743133373200dc" - "0a08746573743133373300dd0a08746573743133373400de0a08746573743133373500df0a08746573743133373600" - "e00a0874657374313337" + "7431313538008609087465737431313539008709087465737431313630008809087465737431313631008909087465" + "737431313632008a09087465737431313633008b09087465737431313634008c09087465737431313635008d090874" + "65737431313636008e09087465737431313637008f0908746573743131363800900908746573743131363900910908" + "7465737431313730009209087465737431313731009309087465737431313732009409087465737431313733009509" + "0874657374313137340096090874657374313137350097090874657374313137360098090874657374313137370099" + "09087465737431313738009a09087465737431313739009b09087465737431313830009c0908746573743131383100" + "9d09087465737431313832009e09087465737431313833009f0908746573743131383400a009087465737431313835" + "00a10908746573743131383600a20908746573743131383700a30908746573743131383800a4090874657374313138" + "3900a50908746573743131393000a60908746573743131393100a70908746573743131393200a80908746573743131" + "393300a90908746573743131393400aa0908746573743131393500ab0908746573743131393600ac09087465737431" + "31393700ad0908746573743131393800ae0908746573743131393900af0908746573743132303000b0090874657374" + "3132303100b10908746573743132303200b20908746573743132303300b30908746573743132303400b40908746573" + "743132303500b50908746573743132303600b60908746573743132303700b70908746573743132303800b809087465" + "73743132303900b90908746573743132313000ba0908746573743132313100bb0908746573743132313200bc090874" + "6573743132313300bd0908746573743132313400be0908746573743132313500bf0908746573743132313600c00908" + "746573743132313700c10908746573743132313800c20908746573743132313900c30908746573743132323000c409" + "08746573743132323100c50908746573743132323200c60908746573743132323300c70908746573743132323400c8" + "0908746573743132323500c90908746573743132323600ca0908746573743132323700cb0908746573743132323800" + "cc0908746573743132323900cd0908746573743132333000ce0908746573743132333100cf09087465737431323332" + "00d00908746573743132333300d10908746573743132333400d20908746573743132333500d3090874657374313233" + "3600d40908746573743132333700d50908746573743132333800d60908746573743132333900d70908746573743132" + "343000d80908746573743132343100d90908746573743132343200da0908746573743132343300db09087465737431" + "32343400dc0908746573743132343500dd0908746573743132343600de0908746573743132343700df090874657374" + "3132343800e00908746573743132343900e10908746573743132353000e20908746573743132353100e30908746573" + "743132353200e40908746573743132353300e50908746573743132353400e60908746573743132353500e709087465" + "73743132353600e80908746573743132353700e90908746573743132353800ea0908746573743132353900eb090874" + "6573743132363000ec0908746573743132363100ed0908746573743132363200ee0908746573743132363300ef0908" + "746573743132363400f00908746573743132363500f10908746573743132363600f20908746573743132363700f309" + "08746573743132363800f40908746573743132363900f50908746573743132373000f60908746573743132373100f7" + "0908746573743132373200f80908746573743132373300f90908746573743132373400fa0908746573743132373500" + "fb0908746573743132373600fc0908746573743132373700fd0908746573743132373800fe09087465737431323739" + "00ff0908746573743132383000800a08746573743132383100810a08746573743132383200820a0874657374313238" + "3300830a08746573743132383400840a08746573743132383500850a08746573743132383600860a08746573743132" + "383700870a08746573743132383800880a08746573743132383900890a087465737431323930008a0a087465737431" + "323931008b0a087465737431323932008c0a087465737431323933008d0a087465737431323934008e0a0874657374" + "31323935008f0a08746573743132393600900a08746573743132393700910a08746573743132393800920a08746573" + "743132393900930a08746573743133303000940a08746573743133303100950a08746573743133303200960a087465" + "73743133303300970a08746573743133303400980a08746573743133303500990a087465737431333036009a0a0874" + "65737431333037009b0a087465737431333038009c0a087465737431333039009d0a087465737431333130009e0a08" + "7465737431333131009f0a08746573743133313200a00a08746573743133313300a10a08746573743133313400a20a" + "08746573743133313500a30a08746573743133313600a40a08746573743133313700a50a08746573743133313800a6" + "0a08746573743133313900a70a08746573743133323000a80a08746573743133323100a90a08746573743133323200" + "aa0a08746573743133323300ab0a08746573743133323400ac0a08746573743133323500ad0a087465737431333236" + "00ae0a08746573743133323700af0a08746573743133323800b00a08746573743133323900b10a0874657374313333" + "3000b20a08746573743133333100b30a08746573743133333200b40a08746573743133333300b50a08746573743133" + "333400b60a08746573743133333500b70a08746573743133333600b80a08746573743133333700b90a087465737431" + "33333800ba0a08746573743133333900bb0a08746573743133343000bc0a08746573743133343100bd0a0874657374" + "3133343200be0a08746573743133343300bf0a08746573743133343400c00a08746573743133343500c10a08746573" + "743133343600c20a08746573743133343700c30a08746573743133343800c40a08746573743133343900c50a087465" + "73743133353000c60a08746573743133353100c70a08746573743133353200c80a08746573743133353300c90a0874" + "6573743133353400ca0a08746573743133353500cb0a08746573743133353600cc0a08746573743133353700cd0a08" + "746573743133353800ce0a08746573743133353900cf0a08746573743133363000d00a08746573743133363100d10a" + "08746573743133363200d20a08746573743133363300d30a08746573743133363400d40a08746573743133363500d5" + "0a08746573743133363600d60a08746573743133363700d70a08746573743133363800d80a08746573743133363900" + "d90a08746573743133373000da0a08746573743133373100db0a08746573743133373200dc0a087465737431333733" + "00dd0a08746573743133373400de0a08746573743133373500df0a08746573743133373600e00a0874657374313337" "3700e10a08746573743133373800e20a08746573743133373900e30a08746573743133383000e40a08746573743133" - "383100e50a0874657374" - "3133383200e60a08746573743133383300e70a08746573743133383400e80a08746573743133383500e90a08746573" - "743133383600ea0a0874" - "6573743133383700eb0a08746573743133383800ec0a08746573743133383900ed0a08746573743133393000ee0a08" - "746573743133393100ef" - "0a08746573743133393200f00a08746573743133393300f10a08746573743133393400f20a08746573743133393500" - "f30a0874657374313339" - "3600f40a08746573743133393700f50a08746573743133393800f60a08746573743133393900f70a08746573743134" - "303000f80a0874657374" - "3134303100f90a08746573743134303200fa0a08746573743134303300fb0a08746573743134303400fc0a08746573" - "743134303500fd0a0874" - "6573743134303600fe0a08746573743134303700ff0a08746573743134303800800b08746573743134303900810b08" - "74657374313431300082" - "0b08746573743134313100830b08746573743134313200840b08746573743134313300850b08746573743134313400" - "860b0874657374313431" - "3500870b08746573743134313600880b08746573743134313700890b087465737431343138008a0b08746573743134" - "3139008b0b0874657374" - "31343230008c0b087465737431343231008d0b087465737431343232008e0b087465737431343233008f0b08746573" - "743134323400900b0874" - "6573743134323500910b08746573743134323600920b08746573743134323700930b08746573743134323800940b08" - "74657374313432390095" - "0b08746573743134333000960b08746573743134333100970b08746573743134333200980b08746573743134333300" - "990b0874657374313433" - "34009a0b087465737431343335009b0b087465737431343336009c0b087465737431343337009d0b08746573743134" - "3338009e0b0874657374" - "31343339009f0b08746573743134343000a00b08746573743134343100a10b08746573743134343200a20b08746573" - "743134343300a30b0874" - "6573743134343400a40b08746573743134343500a50b08746573743134343600a60b08746573743134343700a70b08" - "746573743134343800a8" - "0b08746573743134343900a90b08746573743134353000aa0b08746573743134353100ab0b08746573743134353200" - "ac0b0874657374313435" - "3300ad0b08746573743134353400ae0b08746573743134353500af0b08746573743134353600b00b08746573743134" - "353700b10b0874657374" - "3134353800b20b08746573743134353900b30b08746573743134363000b40b08746573743134363100b50b08746573" - "743134363200b60b0874" - "6573743134363300b70b08746573743134363400b80b08746573743134363500b90b08746573743134363600ba0b08" - "746573743134363700bb" - "0b08746573743134363800bc0b08746573743134363900bd0b08746573743134373000be0b08746573743134373100" - "bf0b0874657374313437" - "3200c00b08746573743134373300c10b08746573743134373400c20b08746573743134373500c30b08746573743134" - "373600c40b0874657374" - "3134373700c50b08746573743134373800c60b08746573743134373900c70b08746573743134383000c80b08746573" - "743134383100c90b0874" - "6573743134383200ca0b08746573743134383300cb0b08746573743134383400cc0b08746573743134383500cd0b08" - "746573743134383600ce" - "0b08746573743134383700cf0b08746573743134383800d00b08746573743134383900d10b08746573743134393000" - "d20b0874657374313439" - "3100d30b08746573743134393200d40b08746573743134393300d50b08746573743134393400d60b08746573743134" - "393500d70b0874657374" - "3134393600d80b08746573743134393700d90b08746573743134393800da0b08746573743134393900db0b08746573" - "743135303000dc0b0874" - "6573743135303100dd0b08746573743135303200de0b08746573743135303300df0b08746573743135303400e00b08" - "746573743135303500e1" - "0b08746573743135303600e20b08746573743135303700e30b08746573743135303800e40b08746573743135303900" - "e50b0874657374313531" - "3000e60b08746573743135313100e70b08746573743135313200e80b08746573743135313300e90b08746573743135" - "313400ea0b0874657374" - "3135313500eb0b08746573743135313600ec0b08746573743135313700ed0b08746573743135313800ee0b08746573" - "743135313900ef0b0874" - "6573743135323000f00b08746573743135323100f10b08746573743135323200f20b08746573743135323300f30b08" - "746573743135323400f4" - "0b08746573743135323500f50b08746573743135323600f60b08746573743135323700f70b08746573743135323800" - "f80b0874657374313532" - "3900f90b08746573743135333000fa0b08746573743135333100fb0b08746573743135333200fc0b08746573743135" - "333300fd0b0874657374" - "3135333400fe0b08746573743135333500ff0b08746573743135333600800c08746573743135333700810c08746573" - "743135333800820c0874" - "6573743135333900830c08746573743135343000840c08746573743135343100850c08746573743135343200860c08" - "74657374313534330087" - "0c08746573743135343400880c08746573743135343500890c087465737431353436008a0c08746573743135343700" - "8b0c0874657374313534" - "38008c0c087465737431353439008d0c087465737431353530008e0c087465737431353531008f0c08746573743135" - "353200900c0874657374" - "3135353300910c08746573743135353400920c08746573743135353500930c08746573743135353600940c08746573" - "743135353700950c0874" - "6573743135353800960c08746573743135353900970c08746573743135363000980c08746573743135363100990c08" - "7465737431353632009a" - "0c087465737431353633009b0c087465737431353634009c0c087465737431353635009d0c08746573743135363600" - "9e0c0874657374313536" - "37009f0c08746573743135363800a00c08746573743135363900a10c08746573743135373000a20c08746573743135" - "373100a30c0874657374" - "3135373200a40c08746573743135373300a50c08746573743135373400a60c08746573743135373500a70c08746573" - "743135373600a80c0874" - "6573743135373700a90c08746573743135373800aa0c08746573743135373900ab0c08746573743135383000ac0c08" - "746573743135383100ad" - "0c08746573743135383200ae0c08746573743135383300af0c08746573743135383400b00c08746573743135383500" - "b10c0874657374313538" - "3600b20c08746573743135383700b30c08746573743135383800b40c08746573743135383900b50c08746573743135" - "393000b60c0874657374" - "3135393100b70c08746573743135393200b80c08746573743135393300b90c08746573743135393400ba0c08746573" - "743135393500bb0c0874" - "6573743135393600bc0c08746573743135393700bd0c08746573743135393800be0c08746573743135393900bf0c08" - "746573743136303000c0" + "383100e50a08746573743133383200e60a08746573743133383300e70a08746573743133383400e80a087465737431" + "33383500e90a08746573743133383600ea0a08746573743133383700eb0a08746573743133383800ec0a0874657374" + "3133383900ed0a08746573743133393000ee0a08746573743133393100ef0a08746573743133393200f00a08746573" + "743133393300f10a08746573743133393400f20a08746573743133393500f30a08746573743133393600f40a087465" + "73743133393700f50a08746573743133393800f60a08746573743133393900f70a08746573743134303000f80a0874" + "6573743134303100f90a08746573743134303200fa0a08746573743134303300fb0a08746573743134303400fc0a08" + "746573743134303500fd0a08746573743134303600fe0a08746573743134303700ff0a08746573743134303800800b" + "08746573743134303900810b08746573743134313000820b08746573743134313100830b0874657374313431320084" + "0b08746573743134313300850b08746573743134313400860b08746573743134313500870b08746573743134313600" + "880b08746573743134313700890b087465737431343138008a0b087465737431343139008b0b087465737431343230" + "008c0b087465737431343231008d0b087465737431343232008e0b087465737431343233008f0b0874657374313432" + "3400900b08746573743134323500910b08746573743134323600920b08746573743134323700930b08746573743134" + "323800940b08746573743134323900950b08746573743134333000960b08746573743134333100970b087465737431" + "34333200980b08746573743134333300990b087465737431343334009a0b087465737431343335009b0b0874657374" + "31343336009c0b087465737431343337009d0b087465737431343338009e0b087465737431343339009f0b08746573" + "743134343000a00b08746573743134343100a10b08746573743134343200a20b08746573743134343300a30b087465" + "73743134343400a40b08746573743134343500a50b08746573743134343600a60b08746573743134343700a70b0874" + "6573743134343800a80b08746573743134343900a90b08746573743134353000aa0b08746573743134353100ab0b08" + "746573743134353200ac0b08746573743134353300ad0b08746573743134353400ae0b08746573743134353500af0b" + "08746573743134353600b00b08746573743134353700b10b08746573743134353800b20b08746573743134353900b3" + "0b08746573743134363000b40b08746573743134363100b50b08746573743134363200b60b08746573743134363300" + "b70b08746573743134363400b80b08746573743134363500b90b08746573743134363600ba0b087465737431343637" + "00bb0b08746573743134363800bc0b08746573743134363900bd0b08746573743134373000be0b0874657374313437" + "3100bf0b08746573743134373200c00b08746573743134373300c10b08746573743134373400c20b08746573743134" + "373500c30b08746573743134373600c40b08746573743134373700c50b08746573743134373800c60b087465737431" + "34373900c70b08746573743134383000c80b08746573743134383100c90b08746573743134383200ca0b0874657374" + "3134383300cb0b08746573743134383400cc0b08746573743134383500cd0b08746573743134383600ce0b08746573" + "743134383700cf0b08746573743134383800d00b08746573743134383900d10b08746573743134393000d20b087465" + "73743134393100d30b08746573743134393200d40b08746573743134393300d50b08746573743134393400d60b0874" + "6573743134393500d70b08746573743134393600d80b08746573743134393700d90b08746573743134393800da0b08" + "746573743134393900db0b08746573743135303000dc0b08746573743135303100dd0b08746573743135303200de0b" + "08746573743135303300df0b08746573743135303400e00b08746573743135303500e10b08746573743135303600e2" + "0b08746573743135303700e30b08746573743135303800e40b08746573743135303900e50b08746573743135313000" + "e60b08746573743135313100e70b08746573743135313200e80b08746573743135313300e90b087465737431353134" + "00ea0b08746573743135313500eb0b08746573743135313600ec0b08746573743135313700ed0b0874657374313531" + "3800ee0b08746573743135313900ef0b08746573743135323000f00b08746573743135323100f10b08746573743135" + "323200f20b08746573743135323300f30b08746573743135323400f40b08746573743135323500f50b087465737431" + "35323600f60b08746573743135323700f70b08746573743135323800f80b08746573743135323900f90b0874657374" + "3135333000fa0b08746573743135333100fb0b08746573743135333200fc0b08746573743135333300fd0b08746573" + "743135333400fe0b08746573743135333500ff0b08746573743135333600800c08746573743135333700810c087465" + "73743135333800820c08746573743135333900830c08746573743135343000840c08746573743135343100850c0874" + "6573743135343200860c08746573743135343300870c08746573743135343400880c08746573743135343500890c08" + "7465737431353436008a0c087465737431353437008b0c087465737431353438008c0c087465737431353439008d0c" + "087465737431353530008e0c087465737431353531008f0c08746573743135353200900c0874657374313535330091" + "0c08746573743135353400920c08746573743135353500930c08746573743135353600940c08746573743135353700" + "950c08746573743135353800960c08746573743135353900970c08746573743135363000980c087465737431353631" + "00990c087465737431353632009a0c087465737431353633009b0c087465737431353634009c0c0874657374313536" + "35009d0c087465737431353636009e0c087465737431353637009f0c08746573743135363800a00c08746573743135" + "363900a10c08746573743135373000a20c08746573743135373100a30c08746573743135373200a40c087465737431" + "35373300a50c08746573743135373400a60c08746573743135373500a70c08746573743135373600a80c0874657374" + "3135373700a90c08746573743135373800aa0c08746573743135373900ab0c08746573743135383000ac0c08746573" + "743135383100ad0c08746573743135383200ae0c08746573743135383300af0c08746573743135383400b00c087465" + "73743135383500b10c08746573743135383600b20c08746573743135383700b30c08746573743135383800b40c0874" + "6573743135383900b50c08746573743135393000b60c08746573743135393100b70c08746573743135393200b80c08" + "746573743135393300b90c08746573743135393400ba0c08746573743135393500bb0c08746573743135393600bc0c" + "08746573743135393700bd0c08746573743135393800be0c08746573743135393900bf0c08746573743136303000c0" "0c08746573743136303100c10c08746573743136303200c20c08746573743136303300c30c08746573743136303400" - "c40c0874657374313630" - "3500c50c08746573743136303600c60c08746573743136303700c70c08746573743136303800c80c08746573743136" - "303900c90c0874657374" - "3136313000ca0c08746573743136313100cb0c08746573743136313200cc0c08746573743136313300cd0c08746573" - "743136313400ce0c0874" - "6573743136313500cf0c08746573743136313600d00c08746573743136313700d10c08746573743136313800d20c08" - "746573743136313900d3" - "0c08746573743136323000d40c08746573743136323100d50c08746573743136323200d60c08746573743136323300" - "d70c0874657374313632" - "3400d80c08746573743136323500d90c08746573743136323600da0c08746573743136323700db0c08746573743136" - "323800dc0c0874657374" - "3136323900dd0c08746573743136333000de0c08746573743136333100df0c08746573743136333200e00c08746573" - "743136333300e10c0874" - "6573743136333400e20c08746573743136333500e30c08746573743136333600e40c08746573743136333700e50c08" - "746573743136333800e6" - "0c08746573743136333900e70c08746573743136343000e80c08746573743136343100e90c08746573743136343200" - "ea0c0874657374313634" - "3300eb0c08746573743136343400ec0c08746573743136343500ed0c08746573743136343600ee0c08746573743136" - "343700ef0c0874657374" - "3136343800f00c08746573743136343900f10c08746573743136353000f20c08746573743136353100f30c08746573" - "743136353200f40c0874" - "6573743136353300f50c08746573743136353400f60c08746573743136353500f70c08746573743136353600f80c08" - "746573743136353700f9" - "0c08746573743136353800fa0c08746573743136353900fb0c08746573743136363000fc0c08746573743136363100" - "fd0c0874657374313636" - "3200fe0c08746573743136363300ff0c08746573743136363400800d08746573743136363500810d08746573743136" - "363600820d0874657374" - "3136363700830d08746573743136363800840d08746573743136363900850d08746573743136373000860d08746573" - "743136373100870d0874" - "6573743136373200880d08746573743136373300890d087465737431363734008a0d087465737431363735008b0d08" - "7465737431363736008c" - "0d087465737431363737008d0d087465737431363738008e0d087465737431363739008f0d08746573743136383000" - "900d0874657374313638" - "3100910d08746573743136383200920d08746573743136383300930d08746573743136383400940d08746573743136" - "383500950d0874657374" - "3136383600960d08746573743136383700970d08746573743136383800980d08746573743136383900990d08746573" - "7431363930009a0d0874" - "65737431363931009b0d087465737431363932009c0d087465737431363933009d0d087465737431363934009e0d08" - "7465737431363935009f" - "0d08746573743136393600a00d08746573743136393700a10d08746573743136393800a20d08746573743136393900" - "a30d0874657374313730" - "3000a40d08746573743137303100a50d08746573743137303200a60d08746573743137303300a70d08746573743137" - "303400a80d0874657374" - "3137303500a90d08746573743137303600aa0d08746573743137303700ab0d08746573743137303800ac0d08746573" - "743137303900ad0d0874" - "6573743137313000ae0d08746573743137313100af0d08746573743137313200b00d08746573743137313300b10d08" - "746573743137313400b2" - "0d08746573743137313500b30d08746573743137313600b40d08746573743137313700b50d08746573743137313800" - "b60d0874657374313731" - "3900b70d08746573743137323000b80d08746573743137323100b90d08746573743137323200ba0d08746573743137" - "323300bb0d0874657374" - "3137323400bc0d08746573743137323500bd0d08746573743137323600be0d08746573743137323700bf0d08746573" - "743137323800c00d0874" - "6573743137323900c10d08746573743137333000c20d08746573743137333100c30d08746573743137333200c40d08" - "746573743137333300c5" - "0d08746573743137333400c60d08746573743137333500c70d08746573743137333600c80d08746573743137333700" - "c90d0874657374313733" - "3800ca0d08746573743137333900cb0d08746573743137343000cc0d08746573743137343100cd0d08746573743137" - "343200ce0d0874657374" - "3137343300cf0d08746573743137343400d00d08746573743137343500d10d08746573743137343600d20d08746573" - "743137343700d30d0874" - "6573743137343800d40d08746573743137343900d50d08746573743137353000d60d08746573743137353100d70d08" - "746573743137353200d8" - "0d08746573743137353300d90d08746573743137353400da0d08746573743137353500db0d08746573743137353600" - "dc0d0874657374313735" - "3700dd0d08746573743137353800de0d08746573743137353900df0d08746573743137363000e00d08746573743137" - "363100e10d0874657374" - "3137363200e20d08746573743137363300e30d08746573743137363400e40d08746573743137363500e50d08746573" - "743137363600e60d0874" - "6573743137363700e70d08746573743137363800e80d08746573743137363900e90d08746573743137373000ea0d08" - "746573743137373100eb" - "0d08746573743137373200ec0d08746573743137373300ed0d08746573743137373400ee0d08746573743137373500" - "ef0d0874657374313737" - "3600f00d08746573743137373700f10d08746573743137373800f20d08746573743137373900f30d08746573743137" - "383000f40d0874657374" - "3137383100f50d08746573743137383200f60d08746573743137383300f70d08746573743137383400f80d08746573" - "743137383500f90d0874" - "6573743137383600fa0d08746573743137383700fb0d08746573743137383800fc0d08746573743137383900fd0d08" - "746573743137393000fe" - "0d08746573743137393100ff0d08746573743137393200800e08746573743137393300810e08746573743137393400" - "820e0874657374313739" - "3500830e08746573743137393600840e08746573743137393700850e08746573743137393800860e08746573743137" - "393900870e0874657374" - "3138303000880e08746573743138303100890e087465737431383032008a0e087465737431383033008b0e08746573" - "7431383034008c0e0874" - "65737431383035008d0e087465737431383036008e0e087465737431383037008f0e08746573743138303800900e08" - "74657374313830390091" - "0e08746573743138313000920e08746573743138313100930e08746573743138313200940e08746573743138313300" - "950e0874657374313831" - "3400960e08746573743138313500970e08746573743138313600980e08746573743138313700990e08746573743138" - "3138009a0e0874657374" - "31383139009b0e087465737431383230009c0e087465737431383231009d0e087465737431383232009e0e08746573" - "7431383233009f0e0874" + "c40c08746573743136303500c50c08746573743136303600c60c08746573743136303700c70c087465737431363038" + "00c80c08746573743136303900c90c08746573743136313000ca0c08746573743136313100cb0c0874657374313631" + "3200cc0c08746573743136313300cd0c08746573743136313400ce0c08746573743136313500cf0c08746573743136" + "313600d00c08746573743136313700d10c08746573743136313800d20c08746573743136313900d30c087465737431" + "36323000d40c08746573743136323100d50c08746573743136323200d60c08746573743136323300d70c0874657374" + "3136323400d80c08746573743136323500d90c08746573743136323600da0c08746573743136323700db0c08746573" + "743136323800dc0c08746573743136323900dd0c08746573743136333000de0c08746573743136333100df0c087465" + "73743136333200e00c08746573743136333300e10c08746573743136333400e20c08746573743136333500e30c0874" + "6573743136333600e40c08746573743136333700e50c08746573743136333800e60c08746573743136333900e70c08" + "746573743136343000e80c08746573743136343100e90c08746573743136343200ea0c08746573743136343300eb0c" + "08746573743136343400ec0c08746573743136343500ed0c08746573743136343600ee0c08746573743136343700ef" + "0c08746573743136343800f00c08746573743136343900f10c08746573743136353000f20c08746573743136353100" + "f30c08746573743136353200f40c08746573743136353300f50c08746573743136353400f60c087465737431363535" + "00f70c08746573743136353600f80c08746573743136353700f90c08746573743136353800fa0c0874657374313635" + "3900fb0c08746573743136363000fc0c08746573743136363100fd0c08746573743136363200fe0c08746573743136" + "363300ff0c08746573743136363400800d08746573743136363500810d08746573743136363600820d087465737431" + "36363700830d08746573743136363800840d08746573743136363900850d08746573743136373000860d0874657374" + "3136373100870d08746573743136373200880d08746573743136373300890d087465737431363734008a0d08746573" + "7431363735008b0d087465737431363736008c0d087465737431363737008d0d087465737431363738008e0d087465" + "737431363739008f0d08746573743136383000900d08746573743136383100910d08746573743136383200920d0874" + "6573743136383300930d08746573743136383400940d08746573743136383500950d08746573743136383600960d08" + "746573743136383700970d08746573743136383800980d08746573743136383900990d087465737431363930009a0d" + "087465737431363931009b0d087465737431363932009c0d087465737431363933009d0d087465737431363934009e" + "0d087465737431363935009f0d08746573743136393600a00d08746573743136393700a10d08746573743136393800" + "a20d08746573743136393900a30d08746573743137303000a40d08746573743137303100a50d087465737431373032" + "00a60d08746573743137303300a70d08746573743137303400a80d08746573743137303500a90d0874657374313730" + "3600aa0d08746573743137303700ab0d08746573743137303800ac0d08746573743137303900ad0d08746573743137" + "313000ae0d08746573743137313100af0d08746573743137313200b00d08746573743137313300b10d087465737431" + "37313400b20d08746573743137313500b30d08746573743137313600b40d08746573743137313700b50d0874657374" + "3137313800b60d08746573743137313900b70d08746573743137323000b80d08746573743137323100b90d08746573" + "743137323200ba0d08746573743137323300bb0d08746573743137323400bc0d08746573743137323500bd0d087465" + "73743137323600be0d08746573743137323700bf0d08746573743137323800c00d08746573743137323900c10d0874" + "6573743137333000c20d08746573743137333100c30d08746573743137333200c40d08746573743137333300c50d08" + "746573743137333400c60d08746573743137333500c70d08746573743137333600c80d08746573743137333700c90d" + "08746573743137333800ca0d08746573743137333900cb0d08746573743137343000cc0d08746573743137343100cd" + "0d08746573743137343200ce0d08746573743137343300cf0d08746573743137343400d00d08746573743137343500" + "d10d08746573743137343600d20d08746573743137343700d30d08746573743137343800d40d087465737431373439" + "00d50d08746573743137353000d60d08746573743137353100d70d08746573743137353200d80d0874657374313735" + "3300d90d08746573743137353400da0d08746573743137353500db0d08746573743137353600dc0d08746573743137" + "353700dd0d08746573743137353800de0d08746573743137353900df0d08746573743137363000e00d087465737431" + "37363100e10d08746573743137363200e20d08746573743137363300e30d08746573743137363400e40d0874657374" + "3137363500e50d08746573743137363600e60d08746573743137363700e70d08746573743137363800e80d08746573" + "743137363900e90d08746573743137373000ea0d08746573743137373100eb0d08746573743137373200ec0d087465" + "73743137373300ed0d08746573743137373400ee0d08746573743137373500ef0d08746573743137373600f00d0874" + "6573743137373700f10d08746573743137373800f20d08746573743137373900f30d08746573743137383000f40d08" + "746573743137383100f50d08746573743137383200f60d08746573743137383300f70d08746573743137383400f80d" + "08746573743137383500f90d08746573743137383600fa0d08746573743137383700fb0d08746573743137383800fc" + "0d08746573743137383900fd0d08746573743137393000fe0d08746573743137393100ff0d08746573743137393200" + "800e08746573743137393300810e08746573743137393400820e08746573743137393500830e087465737431373936" + "00840e08746573743137393700850e08746573743137393800860e08746573743137393900870e0874657374313830" + "3000880e08746573743138303100890e087465737431383032008a0e087465737431383033008b0e08746573743138" + "3034008c0e087465737431383035008d0e087465737431383036008e0e087465737431383037008f0e087465737431" + "38303800900e08746573743138303900910e08746573743138313000920e08746573743138313100930e0874657374" + "3138313200940e08746573743138313300950e08746573743138313400960e08746573743138313500970e08746573" + "743138313600980e08746573743138313700990e087465737431383138009a0e087465737431383139009b0e087465" + "737431383230009c0e087465737431383231009d0e087465737431383232009e0e087465737431383233009f0e0874" "6573743138323400a00e08746573743138323500a10e08746573743138323600a20e08746573743138323700a30e08" - "746573743138323800a4" - "0e08746573743138323900a50e08746573743138333000a60e08746573743138333100a70e08746573743138333200" - "a80e0874657374313833" - "3300a90e08746573743138333400aa0e08746573743138333500ab0e08746573743138333600ac0e08746573743138" - "333700ad0e0874657374" - "3138333800ae0e08746573743138333900af0e08746573743138343000b00e08746573743138343100b10e08746573" - "743138343200b20e0874" - "6573743138343300b30e08746573743138343400b40e08746573743138343500b50e08746573743138343600b60e08" - "746573743138343700b7" - "0e08746573743138343800b80e08746573743138343900b90e08746573743138353000ba0e08746573743138353100" - "bb0e0874657374313835" - "3200bc0e08746573743138353300bd0e08746573743138353400be0e08746573743138353500bf0e08746573743138" - "353600c00e0874657374" - "3138353700c10e08746573743138353800c20e08746573743138353900c30e08746573743138363000c40e08746573" - "743138363100c50e0874" - "6573743138363200c60e08746573743138363300c70e08746573743138363400c80e08746573743138363500c90e08" - "746573743138363600ca" - "0e08746573743138363700cb0e08746573743138363800cc0e08746573743138363900cd0e08746573743138373000" - "ce0e0874657374313837" - "3100cf0e08746573743138373200d00e08746573743138373300d10e08746573743138373400d20e08746573743138" - "373500d30e0874657374" - "3138373600d40e08746573743138373700d50e08746573743138373800d60e08746573743138373900d70e08746573" - "743138383000d80e0874" - "6573743138383100d90e08746573743138383200da0e08746573743138383300db0e08746573743138383400dc0e08" - "746573743138383500dd" - "0e08746573743138383600de0e08746573743138383700df0e08746573743138383800e00e08746573743138383900" - "e10e0874657374313839" - "3000e20e08746573743138393100e30e08746573743138393200e40e08746573743138393300e50e08746573743138" - "393400e60e0874657374" - "3138393500e70e08746573743138393600e80e08746573743138393700e90e08746573743138393800ea0e08746573" - "743138393900eb0e0874" - "6573743139303000ec0e08746573743139303100ed0e08746573743139303200ee0e08746573743139303300ef0e08" - "746573743139303400f0" - "0e08746573743139303500f10e08746573743139303600f20e08746573743139303700f30e08746573743139303800" - "f40e0874657374313930" - "3900f50e08746573743139313000f60e08746573743139313100f70e08746573743139313200f80e08746573743139" - "313300f90e0874657374" - "3139313400fa0e08746573743139313500fb0e08746573743139313600fc0e08746573743139313700fd0e08746573" - "743139313800fe0e0874" - "6573743139313900ff0e08746573743139323000800f08746573743139323100810f08746573743139323200820f08" - "74657374313932330083" - "0f08746573743139323400840f08746573743139323500850f08746573743139323600860f08746573743139323700" - "870f0874657374313932" - "3800880f08746573743139323900890f087465737431393330008a0f087465737431393331008b0f08746573743139" - "3332008c0f0874657374" - "31393333008d0f087465737431393334008e0f087465737431393335008f0f08746573743139333600900f08746573" - "743139333700910f0874" - "6573743139333800920f08746573743139333900930f08746573743139343000940f08746573743139343100950f08" - "74657374313934320096" - "0f08746573743139343300970f08746573743139343400980f08746573743139343500990f08746573743139343600" - "9a0f0874657374313934" - "37009b0f087465737431393438009c0f087465737431393439009d0f087465737431393530009e0f08746573743139" - "3531009f0f0874657374" - "3139353200a00f08746573743139353300a10f08746573743139353400a20f08746573743139353500a30f08746573" - "743139353600a40f0874" - "6573743139353700a50f08746573743139353800a60f08746573743139353900a70f08746573743139363000a80f08" - "746573743139363100a9" - "0f08746573743139363200aa0f08746573743139363300ab0f08746573743139363400ac0f08746573743139363500" - "ad0f0874657374313936" - "3600ae0f08746573743139363700af0f08746573743139363800b00f08746573743139363900b10f08746573743139" - "373000b20f0874657374" - "3139373100b30f08746573743139373200b40f08746573743139373300b50f08746573743139373400b60f08746573" - "743139373500b70f0874" - "6573743139373600b80f08746573743139373700b90f08746573743139373800ba0f08746573743139373900bb0f08" - "746573743139383000bc" - "0f08746573743139383100bd0f08746573743139383200be0f08746573743139383300bf0f08746573743139383400" - "c00f0874657374313938" - "3500c10f08746573743139383600c20f08746573743139383700c30f08746573743139383800c40f08746573743139" - "383900c50f0874657374" - "3139393000c60f08746573743139393100c70f08746573743139393200c80f08746573743139393300c90f08746573" - "743139393400ca0f0874" - "6573743139393500cb0f08746573743139393600cc0f08746573743139393700cd0f08746573743139393800ce0f08" - "746573743139393900cf" - "0f08746573743230303000d00f08746573743230303100d10f08746573743230303200d20f08746573743230303300" - "d30f0874657374323030" - "3400d40f08746573743230303500d50f08746573743230303600d60f08746573743230303700d70f08746573743230" - "303800d80f0874657374" - "3230303900d90f08746573743230313000da0f08746573743230313100db0f08746573743230313200dc0f08746573" - "743230313300dd0f0874" - "6573743230313400de0f08746573743230313500df0f08746573743230313600e00f08746573743230313700e10f08" - "746573743230313800e2" - "0f08746573743230313900e30f08746573743230323000e40f08746573743230323100e50f08746573743230323200" - "e60f0874657374323032" - "3300e70f08746573743230323400e80f08746573743230323500e90f08746573743230323600ea0f08746573743230" - "323700eb0f0874657374" - "3230323800ec0f08746573743230323900ed0f08746573743230333000ee0f08746573743230333100ef0f08746573" - "743230333200f00f0874" - "6573743230333300f10f08746573743230333400f20f08746573743230333500f30f08746573743230333600f40f08" - "746573743230333700f5" - "0f08746573743230333800f60f08746573743230333900f70f08746573743230343000f80f08746573743230343100" - "f90f0874657374323034" - "3200fa0f08746573743230343300fb0f08746573743230343400fc0f08746573743230343500fd0f08746573743230" - "343600fe0f0874657374" + "746573743138323800a40e08746573743138323900a50e08746573743138333000a60e08746573743138333100a70e" + "08746573743138333200a80e08746573743138333300a90e08746573743138333400aa0e08746573743138333500ab" + "0e08746573743138333600ac0e08746573743138333700ad0e08746573743138333800ae0e08746573743138333900" + "af0e08746573743138343000b00e08746573743138343100b10e08746573743138343200b20e087465737431383433" + "00b30e08746573743138343400b40e08746573743138343500b50e08746573743138343600b60e0874657374313834" + "3700b70e08746573743138343800b80e08746573743138343900b90e08746573743138353000ba0e08746573743138" + "353100bb0e08746573743138353200bc0e08746573743138353300bd0e08746573743138353400be0e087465737431" + "38353500bf0e08746573743138353600c00e08746573743138353700c10e08746573743138353800c20e0874657374" + "3138353900c30e08746573743138363000c40e08746573743138363100c50e08746573743138363200c60e08746573" + "743138363300c70e08746573743138363400c80e08746573743138363500c90e08746573743138363600ca0e087465" + "73743138363700cb0e08746573743138363800cc0e08746573743138363900cd0e08746573743138373000ce0e0874" + "6573743138373100cf0e08746573743138373200d00e08746573743138373300d10e08746573743138373400d20e08" + "746573743138373500d30e08746573743138373600d40e08746573743138373700d50e08746573743138373800d60e" + "08746573743138373900d70e08746573743138383000d80e08746573743138383100d90e08746573743138383200da" + "0e08746573743138383300db0e08746573743138383400dc0e08746573743138383500dd0e08746573743138383600" + "de0e08746573743138383700df0e08746573743138383800e00e08746573743138383900e10e087465737431383930" + "00e20e08746573743138393100e30e08746573743138393200e40e08746573743138393300e50e0874657374313839" + "3400e60e08746573743138393500e70e08746573743138393600e80e08746573743138393700e90e08746573743138" + "393800ea0e08746573743138393900eb0e08746573743139303000ec0e08746573743139303100ed0e087465737431" + "39303200ee0e08746573743139303300ef0e08746573743139303400f00e08746573743139303500f10e0874657374" + "3139303600f20e08746573743139303700f30e08746573743139303800f40e08746573743139303900f50e08746573" + "743139313000f60e08746573743139313100f70e08746573743139313200f80e08746573743139313300f90e087465" + "73743139313400fa0e08746573743139313500fb0e08746573743139313600fc0e08746573743139313700fd0e0874" + "6573743139313800fe0e08746573743139313900ff0e08746573743139323000800f08746573743139323100810f08" + "746573743139323200820f08746573743139323300830f08746573743139323400840f08746573743139323500850f" + "08746573743139323600860f08746573743139323700870f08746573743139323800880f0874657374313932390089" + "0f087465737431393330008a0f087465737431393331008b0f087465737431393332008c0f08746573743139333300" + "8d0f087465737431393334008e0f087465737431393335008f0f08746573743139333600900f087465737431393337" + "00910f08746573743139333800920f08746573743139333900930f08746573743139343000940f0874657374313934" + "3100950f08746573743139343200960f08746573743139343300970f08746573743139343400980f08746573743139" + "343500990f087465737431393436009a0f087465737431393437009b0f087465737431393438009c0f087465737431" + "393439009d0f087465737431393530009e0f087465737431393531009f0f08746573743139353200a00f0874657374" + "3139353300a10f08746573743139353400a20f08746573743139353500a30f08746573743139353600a40f08746573" + "743139353700a50f08746573743139353800a60f08746573743139353900a70f08746573743139363000a80f087465" + "73743139363100a90f08746573743139363200aa0f08746573743139363300ab0f08746573743139363400ac0f0874" + "6573743139363500ad0f08746573743139363600ae0f08746573743139363700af0f08746573743139363800b00f08" + "746573743139363900b10f08746573743139373000b20f08746573743139373100b30f08746573743139373200b40f" + "08746573743139373300b50f08746573743139373400b60f08746573743139373500b70f08746573743139373600b8" + "0f08746573743139373700b90f08746573743139373800ba0f08746573743139373900bb0f08746573743139383000" + "bc0f08746573743139383100bd0f08746573743139383200be0f08746573743139383300bf0f087465737431393834" + "00c00f08746573743139383500c10f08746573743139383600c20f08746573743139383700c30f0874657374313938" + "3800c40f08746573743139383900c50f08746573743139393000c60f08746573743139393100c70f08746573743139" + "393200c80f08746573743139393300c90f08746573743139393400ca0f08746573743139393500cb0f087465737431" + "39393600cc0f08746573743139393700cd0f08746573743139393800ce0f08746573743139393900cf0f0874657374" + "3230303000d00f08746573743230303100d10f08746573743230303200d20f08746573743230303300d30f08746573" + "743230303400d40f08746573743230303500d50f08746573743230303600d60f08746573743230303700d70f087465" + "73743230303800d80f08746573743230303900d90f08746573743230313000da0f08746573743230313100db0f0874" + "6573743230313200dc0f08746573743230313300dd0f08746573743230313400de0f08746573743230313500df0f08" + "746573743230313600e00f08746573743230313700e10f08746573743230313800e20f08746573743230313900e30f" + "08746573743230323000e40f08746573743230323100e50f08746573743230323200e60f08746573743230323300e7" + "0f08746573743230323400e80f08746573743230323500e90f08746573743230323600ea0f08746573743230323700" + "eb0f08746573743230323800ec0f08746573743230323900ed0f08746573743230333000ee0f087465737432303331" + "00ef0f08746573743230333200f00f08746573743230333300f10f08746573743230333400f20f0874657374323033" + "3500f30f08746573743230333600f40f08746573743230333700f50f08746573743230333800f60f08746573743230" + "333900f70f08746573743230343000f80f08746573743230343100f90f08746573743230343200fa0f087465737432" + "30343300fb0f08746573743230343400fc0f08746573743230343500fd0f08746573743230343600fe0f0874657374" "3230343700ff0f08746573743230343800801008746573743230343900811008746573743230353000821008746573" - "74323035310083100874" - "6573743230353200841008746573743230353300851008746573743230353400861008746573743230353500871008" - "74657374323035360088" - "10087465737432303537008910087465737432303538008a10087465737432303539008b1008746573743230363000" - "8c100874657374323036" - "31008d10087465737432303632008e10087465737432303633008f1008746573743230363400901008746573743230" - "36350091100874657374" - "3230363600921008746573743230363700931008746573743230363800941008746573743230363900951008746573" - "74323037300096100874" - "65737432303731009710087465737432303732009810087465737432303733009910087465737432303734009a1008" - "7465737432303735009b" - "10087465737432303736009c10087465737432303737009d10087465737432303738009e1008746573743230373900" - "9f100874657374323038" - "3000a01008746573743230383100a11008746573743230383200a21008746573743230383300a31008746573743230" - "383400a4100874657374" - "3230383500a51008746573743230383600a61008746573743230383700a71008746573743230383800a81008746573" - "743230383900a9100874" - "6573743230393000aa1008746573743230393100ab1008746573743230393200ac1008746573743230393300ad1008" - "746573743230393400ae" - "1008746573743230393500af1008746573743230393600b01008746573743230393700b11008746573743230393800" - "b2100874657374323039" - "3900b31008746573743231303000b41008746573743231303100b51008746573743231303200b61008746573743231" - "303300b7100874657374" - "3231303400b81008746573743231303500b91008746573743231303600ba1008746573743231303700bb1008746573" - "743231303800bc100874" - "6573743231303900bd1008746573743231313000be1008746573743231313100bf1008746573743231313200c01008" - "746573743231313300c1" - "1008746573743231313400c21008746573743231313500c31008746573743231313600c41008746573743231313700" - "c5100874657374323131" - "3800c61008746573743231313900c71008746573743231323000c81008746573743231323100c91008746573743231" - "323200ca100874657374" - "3231323300cb1008746573743231323400cc1008746573743231323500cd1008746573743231323600ce1008746573" - "743231323700cf100874" - "6573743231323800d01008746573743231323900d11008746573743231333000d21008746573743231333100d31008" - "746573743231333200d4" - "1008746573743231333300d51008746573743231333400d61008746573743231333500d71008746573743231333600" - "d8100874657374323133" - "3700d91008746573743231333800da1008746573743231333900db1008746573743231343000dc1008746573743231" - "343100dd100874657374" - "3231343200de1008746573743231343300df1008746573743231343400e01008746573743231343500e11008746573" - "743231343600e2100874" - "6573743231343700e31008746573743231343800e41008746573743231343900e51008746573743231353000e61008" - "746573743231353100e7" - "1008746573743231353200e81008746573743231353300e91008746573743231353400ea1008746573743231353500" - "eb100874657374323135" - "3600ec1008746573743231353700ed1008746573743231353800ee1008746573743231353900ef1008746573743231" - "363000f0100874657374" - "3231363100f11008746573743231363200f21008746573743231363300f31008746573743231363400f41008746573" - "743231363500f5100874" - "6573743231363600f61008746573743231363700f71008746573743231363800f81008746573743231363900f91008" - "746573743231373000fa" - "1008746573743231373100fb1008746573743231373200fc1008746573743231373300fd1008746573743231373400" - "fe100874657374323137" - "3500ff1008746573743231373600801108746573743231373700811108746573743231373800821108746573743231" - "37390083110874657374" - "3231383000841108746573743231383100851108746573743231383200861108746573743231383300871108746573" - "74323138340088110874" - "65737432313835008911087465737432313836008a11087465737432313837008b11087465737432313838008c1108" - "7465737432313839008d" - "11087465737432313930008e11087465737432313931008f1108746573743231393200901108746573743231393300" - "91110874657374323139" - "3400921108746573743231393500931108746573743231393600941108746573743231393700951108746573743231" - "39380096110874657374" - "32313939009711087465737432323030009811087465737432323031009911087465737432323032009a1108746573" - "7432323033009b110874" - "65737432323034009c11087465737432323035009d11087465737432323036009e11087465737432323037009f1108" - "746573743232303800a0" - "1108746573743232303900a11108746573743232313000a21108746573743232313100a31108746573743232313200" - "a4110874657374323231" - "3300a51108746573743232313400a61108746573743232313500a71108746573743232313600a81108746573743232" - "313700a9110874657374" - "3232313800aa1108746573743232313900ab1108746573743232323000ac1108746573743232323100ad1108746573" - "743232323200ae110874" - "6573743232323300af1108746573743232323400b01108746573743232323500b11108746573743232323600b21108" - "746573743232323700b3" - "1108746573743232323800b41108746573743232323900b51108746573743232333000b61108746573743232333100" - "b7110874657374323233" - "3200b81108746573743232333300b91108746573743232333400ba1108746573743232333500bb1108746573743232" - "333600bc110874657374" - "3232333700bd1108746573743232333800be1108746573743232333900bf1108746573743232343000c01108746573" - "743232343100c1110874" - "6573743232343200c21108746573743232343300c31108746573743232343400c41108746573743232343500c51108" - "746573743232343600c6" - "1108746573743232343700c71108746573743232343800c81108746573743232343900c91108746573743232353000" - "ca110874657374323235" - "3100cb1108746573743232353200cc1108746573743232353300cd1108746573743232353400ce1108746573743232" - "353500cf110874657374" - "3232353600d01108746573743232353700d11108746573743232353800d21108746573743232353900d31108746573" - "743232363000d4110874" - "6573743232363100d51108746573743232363200d61108746573743232363300d71108746573743232363400d81108" - "746573743232363500d9" - "1108746573743232363600da1108746573743232363700db1108746573743232363800dc1108746573743232363900" - "dd110874657374323237" + "7432303531008310087465737432303532008410087465737432303533008510087465737432303534008610087465" + "737432303535008710087465737432303536008810087465737432303537008910087465737432303538008a100874" + "65737432303539008b10087465737432303630008c10087465737432303631008d10087465737432303632008e1008" + "7465737432303633008f10087465737432303634009010087465737432303635009110087465737432303636009210" + "0874657374323036370093100874657374323036380094100874657374323036390095100874657374323037300096" + "1008746573743230373100971008746573743230373200981008746573743230373300991008746573743230373400" + "9a10087465737432303735009b10087465737432303736009c10087465737432303737009d10087465737432303738" + "009e10087465737432303739009f1008746573743230383000a01008746573743230383100a1100874657374323038" + "3200a21008746573743230383300a31008746573743230383400a41008746573743230383500a51008746573743230" + "383600a61008746573743230383700a71008746573743230383800a81008746573743230383900a910087465737432" + "30393000aa1008746573743230393100ab1008746573743230393200ac1008746573743230393300ad100874657374" + "3230393400ae1008746573743230393500af1008746573743230393600b01008746573743230393700b11008746573" + "743230393800b21008746573743230393900b31008746573743231303000b41008746573743231303100b510087465" + "73743231303200b61008746573743231303300b71008746573743231303400b81008746573743231303500b9100874" + "6573743231303600ba1008746573743231303700bb1008746573743231303800bc1008746573743231303900bd1008" + "746573743231313000be1008746573743231313100bf1008746573743231313200c01008746573743231313300c110" + "08746573743231313400c21008746573743231313500c31008746573743231313600c41008746573743231313700c5" + "1008746573743231313800c61008746573743231313900c71008746573743231323000c81008746573743231323100" + "c91008746573743231323200ca1008746573743231323300cb1008746573743231323400cc10087465737432313235" + "00cd1008746573743231323600ce1008746573743231323700cf1008746573743231323800d0100874657374323132" + "3900d11008746573743231333000d21008746573743231333100d31008746573743231333200d41008746573743231" + "333300d51008746573743231333400d61008746573743231333500d71008746573743231333600d810087465737432" + "31333700d91008746573743231333800da1008746573743231333900db1008746573743231343000dc100874657374" + "3231343100dd1008746573743231343200de1008746573743231343300df1008746573743231343400e01008746573" + "743231343500e11008746573743231343600e21008746573743231343700e31008746573743231343800e410087465" + "73743231343900e51008746573743231353000e61008746573743231353100e71008746573743231353200e8100874" + "6573743231353300e91008746573743231353400ea1008746573743231353500eb1008746573743231353600ec1008" + "746573743231353700ed1008746573743231353800ee1008746573743231353900ef1008746573743231363000f010" + "08746573743231363100f11008746573743231363200f21008746573743231363300f31008746573743231363400f4" + "1008746573743231363500f51008746573743231363600f61008746573743231363700f71008746573743231363800" + "f81008746573743231363900f91008746573743231373000fa1008746573743231373100fb10087465737432313732" + "00fc1008746573743231373300fd1008746573743231373400fe1008746573743231373500ff100874657374323137" + "3600801108746573743231373700811108746573743231373800821108746573743231373900831108746573743231" + "3830008411087465737432313831008511087465737432313832008611087465737432313833008711087465737432" + "313834008811087465737432313835008911087465737432313836008a11087465737432313837008b110874657374" + "32313838008c11087465737432313839008d11087465737432313930008e11087465737432313931008f1108746573" + "7432313932009011087465737432313933009111087465737432313934009211087465737432313935009311087465" + "7374323139360094110874657374323139370095110874657374323139380096110874657374323139390097110874" + "65737432323030009811087465737432323031009911087465737432323032009a11087465737432323033009b1108" + "7465737432323034009c11087465737432323035009d11087465737432323036009e11087465737432323037009f11" + "08746573743232303800a01108746573743232303900a11108746573743232313000a21108746573743232313100a3" + "1108746573743232313200a41108746573743232313300a51108746573743232313400a61108746573743232313500" + "a71108746573743232313600a81108746573743232313700a91108746573743232313800aa11087465737432323139" + "00ab1108746573743232323000ac1108746573743232323100ad1108746573743232323200ae110874657374323232" + "3300af1108746573743232323400b01108746573743232323500b11108746573743232323600b21108746573743232" + "323700b31108746573743232323800b41108746573743232323900b51108746573743232333000b611087465737432" + "32333100b71108746573743232333200b81108746573743232333300b91108746573743232333400ba110874657374" + "3232333500bb1108746573743232333600bc1108746573743232333700bd1108746573743232333800be1108746573" + "743232333900bf1108746573743232343000c01108746573743232343100c11108746573743232343200c211087465" + "73743232343300c31108746573743232343400c41108746573743232343500c51108746573743232343600c6110874" + "6573743232343700c71108746573743232343800c81108746573743232343900c91108746573743232353000ca1108" + "746573743232353100cb1108746573743232353200cc1108746573743232353300cd1108746573743232353400ce11" + "08746573743232353500cf1108746573743232353600d01108746573743232353700d11108746573743232353800d2" + "1108746573743232353900d31108746573743232363000d41108746573743232363100d51108746573743232363200" + "d61108746573743232363300d71108746573743232363400d81108746573743232363500d911087465737432323636" + "00da1108746573743232363700db1108746573743232363800dc1108746573743232363900dd110874657374323237" "3000de1108746573743232373100df1108746573743232373200e01108746573743232373300e11108746573743232" - "373400e2110874657374" - "3232373500e31108746573743232373600e41108746573743232373700e51108746573743232373800e61108746573" - "743232373900e7110874" - "6573743232383000e81108746573743232383100e91108746573743232383200ea1108746573743232383300eb1108" - "746573743232383400ec" - "1108746573743232383500ed1108746573743232383600ee1108746573743232383700ef1108746573743232383800" - "f0110874657374323238" - "3900f11108746573743232393000f21108746573743232393100f31108746573743232393200f41108746573743232" - "393300f5110874657374" - "3232393400f61108746573743232393500f71108746573743232393600f81108746573743232393700f91108746573" - "743232393800fa110874" - "6573743232393900fb1108746573743233303000fc1108746573743233303100fd1108746573743233303200fe1108" - "746573743233303300ff" - "1108746573743233303400801208746573743233303500811208746573743233303600821208746573743233303700" - "83120874657374323330" - "3800841208746573743233303900851208746573743233313000861208746573743233313100871208746573743233" - "31320088120874657374" - "32333133008912087465737432333134008a12087465737432333135008b12087465737432333136008c1208746573" - "7432333137008d120874" - "65737432333138008e12087465737432333139008f1208746573743233323000901208746573743233323100911208" - "74657374323332320092" - "1208746573743233323300931208746573743233323400941208746573743233323500951208746573743233323600" - "96120874657374323332" - "37009712087465737432333238009812087465737432333239009912087465737432333330009a1208746573743233" - "3331009b120874657374" - "32333332009c12087465737432333333009d12087465737432333334009e12087465737432333335009f1208746573" - "743233333600a0120874" - "6573743233333700a11208746573743233333800a21208746573743233333900a31208746573743233343000a41208" - "746573743233343100a5" - "1208746573743233343200a61208746573743233343300a71208746573743233343400a81208746573743233343500" - "a9120874657374323334" - "3600aa1208746573743233343700ab1208746573743233343800ac1208746573743233343900ad1208746573743233" - "353000ae120874657374" - "3233353100af1208746573743233353200b01208746573743233353300b11208746573743233353400b21208746573" - "743233353500b3120874" - "6573743233353600b41208746573743233353700b51208746573743233353800b61208746573743233353900b71208" - "746573743233363000b8" - "1208746573743233363100b91208746573743233363200ba1208746573743233363300bb1208746573743233363400" - "bc120874657374323336" - "3500bd1208746573743233363600be1208746573743233363700bf1208746573743233363800c01208746573743233" - "363900c1120874657374" - "3233373000c21208746573743233373100c31208746573743233373200c41208746573743233373300c51208746573" - "743233373400c6120874" - "6573743233373500c71208746573743233373600c81208746573743233373700c91208746573743233373800ca1208" - "746573743233373900cb" - "1208746573743233383000cc1208746573743233383100cd1208746573743233383200ce1208746573743233383300" - "cf120874657374323338" - "3400d01208746573743233383500d11208746573743233383600d21208746573743233383700d31208746573743233" - "383800d4120874657374" - "3233383900d51208746573743233393000d61208746573743233393100d71208746573743233393200d81208746573" - "743233393300d9120874" - "6573743233393400da1208746573743233393500db1208746573743233393600dc1208746573743233393700dd1208" - "746573743233393800de" - "1208746573743233393900df1208746573743234303000e01208746573743234303100e11208746573743234303200" - "e2120874657374323430" - "3300e31208746573743234303400e41208746573743234303500e51208746573743234303600e61208746573743234" - "303700e7120874657374" - "3234303800e81208746573743234303900e91208746573743234313000ea1208746573743234313100eb1208746573" - "743234313200ec120874" - "6573743234313300ed1208746573743234313400ee1208746573743234313500ef1208746573743234313600f01208" - "746573743234313700f1" - "1208746573743234313800f21208746573743234313900f31208746573743234323000f41208746573743234323100" - "f5120874657374323432" - "3200f61208746573743234323300f71208746573743234323400f81208746573743234323500f91208746573743234" - "323600fa120874657374" - "3234323700fb1208746573743234323800fc1208746573743234323900fd1208746573743234333000fe1208746573" - "743234333100ff120874" - "6573743234333200801308746573743234333300811308746573743234333400821308746573743234333500831308" - "74657374323433360084" - "1308746573743234333700851308746573743234333800861308746573743234333900871308746573743234343000" - "88130874657374323434" - "31008913087465737432343432008a13087465737432343433008b13087465737432343434008c1308746573743234" - "3435008d130874657374" - "32343436008e13087465737432343437008f1308746573743234343800901308746573743234343900911308746573" - "74323435300092130874" - "6573743234353100931308746573743234353200941308746573743234353300951308746573743234353400961308" - "74657374323435350097" - "13087465737432343536009813087465737432343537009913087465737432343538009a1308746573743234353900" - "9b130874657374323436" - "30009c13087465737432343631009d13087465737432343632009e13087465737432343633009f1308746573743234" - "363400a0130874657374" - "3234363500a11308746573743234363600a21308746573743234363700a31308746573743234363800a41308746573" - "743234363900a5130874" - "6573743234373000a61308746573743234373100a71308746573743234373200a81308746573743234373300a91308" - "746573743234373400aa" - "1308746573743234373500ab1308746573743234373600ac1308746573743234373700ad1308746573743234373800" - "ae130874657374323437" - "3900af1308746573743234383000b01308746573743234383100b11308746573743234383200b21308746573743234" - "383300b3130874657374" - "3234383400b41308746573743234383500b51308746573743234383600b61308746573743234383700b71308746573" - "743234383800b8130874" - "6573743234383900b91308746573743234393000ba1308746573743234393100bb1308746573743234393200bc1308" - "746573743234393300bd" + "373400e21108746573743232373500e31108746573743232373600e41108746573743232373700e511087465737432" + "32373800e61108746573743232373900e71108746573743232383000e81108746573743232383100e9110874657374" + "3232383200ea1108746573743232383300eb1108746573743232383400ec1108746573743232383500ed1108746573" + "743232383600ee1108746573743232383700ef1108746573743232383800f01108746573743232383900f111087465" + "73743232393000f21108746573743232393100f31108746573743232393200f41108746573743232393300f5110874" + "6573743232393400f61108746573743232393500f71108746573743232393600f81108746573743232393700f91108" + "746573743232393800fa1108746573743232393900fb1108746573743233303000fc1108746573743233303100fd11" + "08746573743233303200fe1108746573743233303300ff110874657374323330340080120874657374323330350081" + "1208746573743233303600821208746573743233303700831208746573743233303800841208746573743233303900" + "8512087465737432333130008612087465737432333131008712087465737432333132008812087465737432333133" + "008912087465737432333134008a12087465737432333135008b12087465737432333136008c120874657374323331" + "37008d12087465737432333138008e12087465737432333139008f1208746573743233323000901208746573743233" + "3231009112087465737432333232009212087465737432333233009312087465737432333234009412087465737432" + "3332350095120874657374323332360096120874657374323332370097120874657374323332380098120874657374" + "32333239009912087465737432333330009a12087465737432333331009b12087465737432333332009c1208746573" + "7432333333009d12087465737432333334009e12087465737432333335009f1208746573743233333600a012087465" + "73743233333700a11208746573743233333800a21208746573743233333900a31208746573743233343000a4120874" + "6573743233343100a51208746573743233343200a61208746573743233343300a71208746573743233343400a81208" + "746573743233343500a91208746573743233343600aa1208746573743233343700ab1208746573743233343800ac12" + "08746573743233343900ad1208746573743233353000ae1208746573743233353100af1208746573743233353200b0" + "1208746573743233353300b11208746573743233353400b21208746573743233353500b31208746573743233353600" + "b41208746573743233353700b51208746573743233353800b61208746573743233353900b712087465737432333630" + "00b81208746573743233363100b91208746573743233363200ba1208746573743233363300bb120874657374323336" + "3400bc1208746573743233363500bd1208746573743233363600be1208746573743233363700bf1208746573743233" + "363800c01208746573743233363900c11208746573743233373000c21208746573743233373100c312087465737432" + "33373200c41208746573743233373300c51208746573743233373400c61208746573743233373500c7120874657374" + "3233373600c81208746573743233373700c91208746573743233373800ca1208746573743233373900cb1208746573" + "743233383000cc1208746573743233383100cd1208746573743233383200ce1208746573743233383300cf12087465" + "73743233383400d01208746573743233383500d11208746573743233383600d21208746573743233383700d3120874" + "6573743233383800d41208746573743233383900d51208746573743233393000d61208746573743233393100d71208" + "746573743233393200d81208746573743233393300d91208746573743233393400da1208746573743233393500db12" + "08746573743233393600dc1208746573743233393700dd1208746573743233393800de1208746573743233393900df" + "1208746573743234303000e01208746573743234303100e11208746573743234303200e21208746573743234303300" + "e31208746573743234303400e41208746573743234303500e51208746573743234303600e612087465737432343037" + "00e71208746573743234303800e81208746573743234303900e91208746573743234313000ea120874657374323431" + "3100eb1208746573743234313200ec1208746573743234313300ed1208746573743234313400ee1208746573743234" + "313500ef1208746573743234313600f01208746573743234313700f11208746573743234313800f212087465737432" + "34313900f31208746573743234323000f41208746573743234323100f51208746573743234323200f6120874657374" + "3234323300f71208746573743234323400f81208746573743234323500f91208746573743234323600fa1208746573" + "743234323700fb1208746573743234323800fc1208746573743234323900fd1208746573743234333000fe12087465" + "73743234333100ff120874657374323433320080130874657374323433330081130874657374323433340082130874" + "6573743234333500831308746573743234333600841308746573743234333700851308746573743234333800861308" + "7465737432343339008713087465737432343430008813087465737432343431008913087465737432343432008a13" + "087465737432343433008b13087465737432343434008c13087465737432343435008d13087465737432343436008e" + "13087465737432343437008f1308746573743234343800901308746573743234343900911308746573743234353000" + "9213087465737432343531009313087465737432343532009413087465737432343533009513087465737432343534" + "0096130874657374323435350097130874657374323435360098130874657374323435370099130874657374323435" + "38009a13087465737432343539009b13087465737432343630009c13087465737432343631009d1308746573743234" + "3632009e13087465737432343633009f1308746573743234363400a01308746573743234363500a113087465737432" + "34363600a21308746573743234363700a31308746573743234363800a41308746573743234363900a5130874657374" + "3234373000a61308746573743234373100a71308746573743234373200a81308746573743234373300a91308746573" + "743234373400aa1308746573743234373500ab1308746573743234373600ac1308746573743234373700ad13087465" + "73743234373800ae1308746573743234373900af1308746573743234383000b01308746573743234383100b1130874" + "6573743234383200b21308746573743234383300b31308746573743234383400b41308746573743234383500b51308" + "746573743234383600b61308746573743234383700b71308746573743234383800b81308746573743234383900b913" + "08746573743234393000ba1308746573743234393100bb1308746573743234393200bc1308746573743234393300bd" "1308746573743234393400be1308746573743234393500bf1308746573743234393600c01308746573743234393700" - "c1130874657374323439" - "3800c21308746573743234393900c31308746573743235303000c41308746573743235303100c51308746573743235" - "303200c6130874657374" - "3235303300c71308746573743235303400c81308746573743235303500c91308746573743235303600ca1308746573" - "743235303700cb130874" - "6573743235303800cc1308746573743235303900cd1308746573743235313000ce1308746573743235313100cf1308" - "746573743235313200d0" - "1308746573743235313300d11308746573743235313400d21308746573743235313500d31308746573743235313600" - "d4130874657374323531" - "3700d51308746573743235313800d61308746573743235313900d71308746573743235323000d81308746573743235" - "323100d9130874657374" - "3235323200da1308746573743235323300db1308746573743235323400dc1308746573743235323500dd1308746573" - "743235323600de130874" - "6573743235323700df1308746573743235323800e01308746573743235323900e11308746573743235333000e21308" - "746573743235333100e3" - "1308746573743235333200e41308746573743235333300e51308746573743235333400e61308746573743235333500" - "e7130874657374323533" - "3600e81308746573743235333700e91308746573743235333800ea1308746573743235333900eb1308746573743235" - "343000ec130874657374" - "3235343100ed1308746573743235343200ee1308746573743235343300ef1308746573743235343400f01308746573" - "743235343500f1130874" - "6573743235343600f21308746573743235343700f31308746573743235343800f41308746573743235343900f51308" - "746573743235353000f6" - "1308746573743235353100f71308746573743235353200f81308746573743235353300f91308746573743235353400" - "fa130874657374323535" - "3500fb1308746573743235353600fc1308746573743235353700fd1308746573743235353800fe1308746573743235" - "353900ff130874657374" - "3235363000801408746573743235363100811408746573743235363200821408746573743235363300831408746573" - "74323536340084140874" - "6573743235363500851408746573743235363600861408746573743235363700871408746573743235363800881408" - "74657374323536390089" - "14087465737432353730008a14087465737432353731008b14087465737432353732008c1408746573743235373300" - "8d140874657374323537" - "34008e14087465737432353735008f1408746573743235373600901408746573743235373700911408746573743235" - "37380092140874657374" - "3235373900931408746573743235383000941408746573743235383100951408746573743235383200961408746573" - "74323538330097140874" - "65737432353834009814087465737432353835009914087465737432353836009a14087465737432353837009b1408" - "7465737432353838009c" - "14087465737432353839009d14087465737432353930009e14087465737432353931009f1408746573743235393200" - "a0140874657374323539" - "3300a11408746573743235393400a21408746573743235393500a31408746573743235393600a41408746573743235" - "393700a5140874657374" - "3235393800a61408746573743235393900a71408746573743236303000a81408746573743236303100a91408746573" - "743236303200aa140874" - "6573743236303300ab1408746573743236303400ac1408746573743236303500ad1408746573743236303600ae1408" - "746573743236303700af" - "1408746573743236303800b01408746573743236303900b11408746573743236313000b21408746573743236313100" - "b3140874657374323631" - "3200b41408746573743236313300b51408746573743236313400b61408746573743236313500b71408746573743236" - "313600b8140874657374" - "3236313700b91408746573743236313800ba1408746573743236313900bb1408746573743236323000bc1408746573" - "743236323100bd140874" - "6573743236323200be1408746573743236323300bf1408746573743236323400c01408746573743236323500c11408" - "746573743236323600c2" - "1408746573743236323700c31408746573743236323800c41408746573743236323900c51408746573743236333000" - "c6140874657374323633" - "3100c71408746573743236333200c81408746573743236333300c91408746573743236333400ca1408746573743236" - "333500cb140874657374" - "3236333600cc1408746573743236333700cd1408746573743236333800ce1408746573743236333900cf1408746573" - "743236343000d0140874" - "6573743236343100d11408746573743236343200d21408746573743236343300d31408746573743236343400d41408" - "746573743236343500d5" - "1408746573743236343600d61408746573743236343700d71408746573743236343800d81408746573743236343900" - "d9140874657374323635" - "3000da1408746573743236353100db1408746573743236353200dc1408746573743236353300dd1408746573743236" - "353400de140874657374" - "3236353500df1408746573743236353600e01408746573743236353700e11408746573743236353800e21408746573" - "743236353900e3140874" - "6573743236363000e41408746573743236363100e51408746573743236363200e61408746573743236363300e71408" - "746573743236363400e8" - "1408746573743236363500e91408746573743236363600ea1408746573743236363700eb1408746573743236363800" - "ec140874657374323636" - "3900ed1408746573743236373000ee1408746573743236373100ef1408746573743236373200f01408746573743236" - "373300f1140874657374" - "3236373400f21408746573743236373500f31408746573743236373600f41408746573743236373700f51408746573" - "743236373800f6140874" - "6573743236373900f71408746573743236383000f81408746573743236383100f91408746573743236383200fa1408" - "746573743236383300fb" - "1408746573743236383400fc1408746573743236383500fd1408746573743236383600fe1408746573743236383700" - "ff140874657374323638" - "3800801508746573743236383900811508746573743236393000821508746573743236393100831508746573743236" - "39320084150874657374" - "3236393300851508746573743236393400861508746573743236393500871508746573743236393600881508746573" - "74323639370089150874" - "65737432363938008a15087465737432363939008b15087465737432373030008c15087465737432373031008d1508" - "7465737432373032008e" - "15087465737432373033008f1508746573743237303400901508746573743237303500911508746573743237303600" - "92150874657374323730" - "3700931508746573743237303800941508746573743237303900951508746573743237313000961508746573743237" - "31310097150874657374" - "32373132009815087465737432373133009915087465737432373134009a15087465737432373135009b1508746573" - "7432373136009c150874" + "c11308746573743234393800c21308746573743234393900c31308746573743235303000c413087465737432353031" + "00c51308746573743235303200c61308746573743235303300c71308746573743235303400c8130874657374323530" + "3500c91308746573743235303600ca1308746573743235303700cb1308746573743235303800cc1308746573743235" + "303900cd1308746573743235313000ce1308746573743235313100cf1308746573743235313200d013087465737432" + "35313300d11308746573743235313400d21308746573743235313500d31308746573743235313600d4130874657374" + "3235313700d51308746573743235313800d61308746573743235313900d71308746573743235323000d81308746573" + "743235323100d91308746573743235323200da1308746573743235323300db1308746573743235323400dc13087465" + "73743235323500dd1308746573743235323600de1308746573743235323700df1308746573743235323800e0130874" + "6573743235323900e11308746573743235333000e21308746573743235333100e31308746573743235333200e41308" + "746573743235333300e51308746573743235333400e61308746573743235333500e71308746573743235333600e813" + "08746573743235333700e91308746573743235333800ea1308746573743235333900eb1308746573743235343000ec" + "1308746573743235343100ed1308746573743235343200ee1308746573743235343300ef1308746573743235343400" + "f01308746573743235343500f11308746573743235343600f21308746573743235343700f313087465737432353438" + "00f41308746573743235343900f51308746573743235353000f61308746573743235353100f7130874657374323535" + "3200f81308746573743235353300f91308746573743235353400fa1308746573743235353500fb1308746573743235" + "353600fc1308746573743235353700fd1308746573743235353800fe1308746573743235353900ff13087465737432" + "3536300080140874657374323536310081140874657374323536320082140874657374323536330083140874657374" + "3235363400841408746573743235363500851408746573743235363600861408746573743235363700871408746573" + "7432353638008814087465737432353639008914087465737432353730008a14087465737432353731008b14087465" + "737432353732008c14087465737432353733008d14087465737432353734008e14087465737432353735008f140874" + "6573743235373600901408746573743235373700911408746573743235373800921408746573743235373900931408" + "7465737432353830009414087465737432353831009514087465737432353832009614087465737432353833009714" + "087465737432353834009814087465737432353835009914087465737432353836009a14087465737432353837009b" + "14087465737432353838009c14087465737432353839009d14087465737432353930009e1408746573743235393100" + "9f1408746573743235393200a01408746573743235393300a11408746573743235393400a214087465737432353935" + "00a31408746573743235393600a41408746573743235393700a51408746573743235393800a6140874657374323539" + "3900a71408746573743236303000a81408746573743236303100a91408746573743236303200aa1408746573743236" + "303300ab1408746573743236303400ac1408746573743236303500ad1408746573743236303600ae14087465737432" + "36303700af1408746573743236303800b01408746573743236303900b11408746573743236313000b2140874657374" + "3236313100b31408746573743236313200b41408746573743236313300b51408746573743236313400b61408746573" + "743236313500b71408746573743236313600b81408746573743236313700b91408746573743236313800ba14087465" + "73743236313900bb1408746573743236323000bc1408746573743236323100bd1408746573743236323200be140874" + "6573743236323300bf1408746573743236323400c01408746573743236323500c11408746573743236323600c21408" + "746573743236323700c31408746573743236323800c41408746573743236323900c51408746573743236333000c614" + "08746573743236333100c71408746573743236333200c81408746573743236333300c91408746573743236333400ca" + "1408746573743236333500cb1408746573743236333600cc1408746573743236333700cd1408746573743236333800" + "ce1408746573743236333900cf1408746573743236343000d01408746573743236343100d114087465737432363432" + "00d21408746573743236343300d31408746573743236343400d41408746573743236343500d5140874657374323634" + "3600d61408746573743236343700d71408746573743236343800d81408746573743236343900d91408746573743236" + "353000da1408746573743236353100db1408746573743236353200dc1408746573743236353300dd14087465737432" + "36353400de1408746573743236353500df1408746573743236353600e01408746573743236353700e1140874657374" + "3236353800e21408746573743236353900e31408746573743236363000e41408746573743236363100e51408746573" + "743236363200e61408746573743236363300e71408746573743236363400e81408746573743236363500e914087465" + "73743236363600ea1408746573743236363700eb1408746573743236363800ec1408746573743236363900ed140874" + "6573743236373000ee1408746573743236373100ef1408746573743236373200f01408746573743236373300f11408" + "746573743236373400f21408746573743236373500f31408746573743236373600f41408746573743236373700f514" + "08746573743236373800f61408746573743236373900f71408746573743236383000f81408746573743236383100f9" + "1408746573743236383200fa1408746573743236383300fb1408746573743236383400fc1408746573743236383500" + "fd1408746573743236383600fe1408746573743236383700ff14087465737432363838008015087465737432363839" + "0081150874657374323639300082150874657374323639310083150874657374323639320084150874657374323639" + "3300851508746573743236393400861508746573743236393500871508746573743236393600881508746573743236" + "3937008915087465737432363938008a15087465737432363939008b15087465737432373030008c15087465737432" + "373031008d15087465737432373032008e15087465737432373033008f150874657374323730340090150874657374" + "3237303500911508746573743237303600921508746573743237303700931508746573743237303800941508746573" + "7432373039009515087465737432373130009615087465737432373131009715087465737432373132009815087465" + "737432373133009915087465737432373134009a15087465737432373135009b15087465737432373136009c150874" "65737432373137009d15087465737432373138009e15087465737432373139009f1508746573743237323000a01508" - "746573743237323100a1" - "1508746573743237323200a21508746573743237323300a31508746573743237323400a41508746573743237323500" - "a5150874657374323732" - "3600a61508746573743237323700a71508746573743237323800a81508746573743237323900a91508746573743237" - "333000aa150874657374" - "3237333100ab1508746573743237333200ac1508746573743237333300ad1508746573743237333400ae1508746573" - "743237333500af150874" - "6573743237333600b01508746573743237333700b11508746573743237333800b21508746573743237333900b31508" - "746573743237343000b4" - "1508746573743237343100b51508746573743237343200b61508746573743237343300b71508746573743237343400" - "b8150874657374323734" - "3500b91508746573743237343600ba1508746573743237343700bb1508746573743237343800bc1508746573743237" - "343900bd150874657374" - "3237353000be1508746573743237353100bf1508746573743237353200c01508746573743237353300c11508746573" - "743237353400c2150874" - "6573743237353500c31508746573743237353600c41508746573743237353700c51508746573743237353800c61508" - "746573743237353900c7" - "1508746573743237363000c81508746573743237363100c91508746573743237363200ca1508746573743237363300" - "cb150874657374323736" - "3400cc1508746573743237363500cd1508746573743237363600ce1508746573743237363700cf1508746573743237" - "363800d0150874657374" - "3237363900d11508746573743237373000d21508746573743237373100d31508746573743237373200d41508746573" - "743237373300d5150874" - "6573743237373400d61508746573743237373500d71508746573743237373600d81508746573743237373700d91508" - "746573743237373800da" - "1508746573743237373900db1508746573743237383000dc1508746573743237383100dd1508746573743237383200" - "de150874657374323738" - "3300df1508746573743237383400e01508746573743237383500e11508746573743237383600e21508746573743237" - "383700e3150874657374" - "3237383800e41508746573743237383900e51508746573743237393000e61508746573743237393100e71508746573" - "743237393200e8150874" - "6573743237393300e91508746573743237393400ea1508746573743237393500eb1508746573743237393600ec1508" - "746573743237393700ed" - "1508746573743237393800ee1508746573743237393900ef1508746573743238303000f01508746573743238303100" - "f1150874657374323830" - "3200f21508746573743238303300f31508746573743238303400f41508746573743238303500f51508746573743238" - "303600f6150874657374" - "3238303700f71508746573743238303800f81508746573743238303900f91508746573743238313000fa1508746573" - "743238313100fb150874" - "6573743238313200fc1508746573743238313300fd1508746573743238313400fe1508746573743238313500ff1508" - "74657374323831360080" - "1608746573743238313700811608746573743238313800821608746573743238313900831608746573743238323000" - "84160874657374323832" - "3100851608746573743238323200861608746573743238323300871608746573743238323400881608746573743238" - "32350089160874657374" - "32383236008a16087465737432383237008b16087465737432383238008c16087465737432383239008d1608746573" - "7432383330008e160874" - "65737432383331008f1608746573743238333200901608746573743238333300911608746573743238333400921608" - "74657374323833350093" - "1608746573743238333600941608746573743238333700951608746573743238333800961608746573743238333900" - "97160874657374323834" - "30009816087465737432383431009916087465737432383432009a16087465737432383433009b1608746573743238" - "3434009c160874657374" - "32383435009d16087465737432383436009e16087465737432383437009f1608746573743238343800a01608746573" - "743238343900a1160874" - "6573743238353000a21608746573743238353100a31608746573743238353200a41608746573743238353300a51608" - "746573743238353400a6" - "1608746573743238353500a71608746573743238353600a81608746573743238353700a91608746573743238353800" - "aa160874657374323835" - "3900ab1608746573743238363000ac1608746573743238363100ad1608746573743238363200ae1608746573743238" - "363300af160874657374" - "3238363400b01608746573743238363500b11608746573743238363600b21608746573743238363700b31608746573" - "743238363800b4160874" - "6573743238363900b51608746573743238373000b61608746573743238373100b71608746573743238373200b81608" - "746573743238373300b9" - "1608746573743238373400ba1608746573743238373500bb1608746573743238373600bc1608746573743238373700" - "bd160874657374323837" - "3800be1608746573743238373900bf1608746573743238383000c01608746573743238383100c11608746573743238" - "383200c2160874657374" - "3238383300c31608746573743238383400c41608746573743238383500c51608746573743238383600c61608746573" - "743238383700c7160874" - "6573743238383800c81608746573743238383900c91608746573743238393000ca1608746573743238393100cb1608" - "746573743238393200cc" - "1608746573743238393300cd1608746573743238393400ce1608746573743238393500cf1608746573743238393600" - "d0160874657374323839" - "3700d11608746573743238393800d21608746573743238393900d31608746573743239303000d41608746573743239" - "303100d5160874657374" - "3239303200d61608746573743239303300d71608746573743239303400d81608746573743239303500d91608746573" - "743239303600da160874" - "6573743239303700db1608746573743239303800dc1608746573743239303900dd1608746573743239313000de1608" - "746573743239313100df" - "1608746573743239313200e01608746573743239313300e11608746573743239313400e21608746573743239313500" - "e3160874657374323931" - "3600e41608746573743239313700e51608746573743239313800e61608746573743239313900e71608746573743239" - "323000e8160874657374" - "3239323100e91608746573743239323200ea1608746573743239323300eb1608746573743239323400ec1608746573" - "743239323500ed160874" - "6573743239323600ee1608746573743239323700ef1608746573743239323800f01608746573743239323900f11608" - "746573743239333000f2" - "1608746573743239333100f31608746573743239333200f41608746573743239333300f51608746573743239333400" - "f6160874657374323933" - "3500f71608746573743239333600f81608746573743239333700f91608746573743239333800fa1608746573743239" - "333900fb160874657374" + "746573743237323100a11508746573743237323200a21508746573743237323300a31508746573743237323400a415" + "08746573743237323500a51508746573743237323600a61508746573743237323700a71508746573743237323800a8" + "1508746573743237323900a91508746573743237333000aa1508746573743237333100ab1508746573743237333200" + "ac1508746573743237333300ad1508746573743237333400ae1508746573743237333500af15087465737432373336" + "00b01508746573743237333700b11508746573743237333800b21508746573743237333900b3150874657374323734" + "3000b41508746573743237343100b51508746573743237343200b61508746573743237343300b71508746573743237" + "343400b81508746573743237343500b91508746573743237343600ba1508746573743237343700bb15087465737432" + "37343800bc1508746573743237343900bd1508746573743237353000be1508746573743237353100bf150874657374" + "3237353200c01508746573743237353300c11508746573743237353400c21508746573743237353500c31508746573" + "743237353600c41508746573743237353700c51508746573743237353800c61508746573743237353900c715087465" + "73743237363000c81508746573743237363100c91508746573743237363200ca1508746573743237363300cb150874" + "6573743237363400cc1508746573743237363500cd1508746573743237363600ce1508746573743237363700cf1508" + "746573743237363800d01508746573743237363900d11508746573743237373000d21508746573743237373100d315" + "08746573743237373200d41508746573743237373300d51508746573743237373400d61508746573743237373500d7" + "1508746573743237373600d81508746573743237373700d91508746573743237373800da1508746573743237373900" + "db1508746573743237383000dc1508746573743237383100dd1508746573743237383200de15087465737432373833" + "00df1508746573743237383400e01508746573743237383500e11508746573743237383600e2150874657374323738" + "3700e31508746573743237383800e41508746573743237383900e51508746573743237393000e61508746573743237" + "393100e71508746573743237393200e81508746573743237393300e91508746573743237393400ea15087465737432" + "37393500eb1508746573743237393600ec1508746573743237393700ed1508746573743237393800ee150874657374" + "3237393900ef1508746573743238303000f01508746573743238303100f11508746573743238303200f21508746573" + "743238303300f31508746573743238303400f41508746573743238303500f51508746573743238303600f615087465" + "73743238303700f71508746573743238303800f81508746573743238303900f91508746573743238313000fa150874" + "6573743238313100fb1508746573743238313200fc1508746573743238313300fd1508746573743238313400fe1508" + "746573743238313500ff15087465737432383136008016087465737432383137008116087465737432383138008216" + "0874657374323831390083160874657374323832300084160874657374323832310085160874657374323832320086" + "1608746573743238323300871608746573743238323400881608746573743238323500891608746573743238323600" + "8a16087465737432383237008b16087465737432383238008c16087465737432383239008d16087465737432383330" + "008e16087465737432383331008f160874657374323833320090160874657374323833330091160874657374323833" + "3400921608746573743238333500931608746573743238333600941608746573743238333700951608746573743238" + "3338009616087465737432383339009716087465737432383430009816087465737432383431009916087465737432" + "383432009a16087465737432383433009b16087465737432383434009c16087465737432383435009d160874657374" + "32383436009e16087465737432383437009f1608746573743238343800a01608746573743238343900a11608746573" + "743238353000a21608746573743238353100a31608746573743238353200a41608746573743238353300a516087465" + "73743238353400a61608746573743238353500a71608746573743238353600a81608746573743238353700a9160874" + "6573743238353800aa1608746573743238353900ab1608746573743238363000ac1608746573743238363100ad1608" + "746573743238363200ae1608746573743238363300af1608746573743238363400b01608746573743238363500b116" + "08746573743238363600b21608746573743238363700b31608746573743238363800b41608746573743238363900b5" + "1608746573743238373000b61608746573743238373100b71608746573743238373200b81608746573743238373300" + "b91608746573743238373400ba1608746573743238373500bb1608746573743238373600bc16087465737432383737" + "00bd1608746573743238373800be1608746573743238373900bf1608746573743238383000c0160874657374323838" + "3100c11608746573743238383200c21608746573743238383300c31608746573743238383400c41608746573743238" + "383500c51608746573743238383600c61608746573743238383700c71608746573743238383800c816087465737432" + "38383900c91608746573743238393000ca1608746573743238393100cb1608746573743238393200cc160874657374" + "3238393300cd1608746573743238393400ce1608746573743238393500cf1608746573743238393600d01608746573" + "743238393700d11608746573743238393800d21608746573743238393900d31608746573743239303000d416087465" + "73743239303100d51608746573743239303200d61608746573743239303300d71608746573743239303400d8160874" + "6573743239303500d91608746573743239303600da1608746573743239303700db1608746573743239303800dc1608" + "746573743239303900dd1608746573743239313000de1608746573743239313100df1608746573743239313200e016" + "08746573743239313300e11608746573743239313400e21608746573743239313500e31608746573743239313600e4" + "1608746573743239313700e51608746573743239313800e61608746573743239313900e71608746573743239323000" + "e81608746573743239323100e91608746573743239323200ea1608746573743239323300eb16087465737432393234" + "00ec1608746573743239323500ed1608746573743239323600ee1608746573743239323700ef160874657374323932" + "3800f01608746573743239323900f11608746573743239333000f21608746573743239333100f31608746573743239" + "333200f41608746573743239333300f51608746573743239333400f61608746573743239333500f716087465737432" + "39333600f81608746573743239333700f91608746573743239333800fa1608746573743239333900fb160874657374" "3239343000fc1608746573743239343100fd1608746573743239343200fe1608746573743239343300ff1608746573" - "74323934340080170874" - "6573743239343500811708746573743239343600821708746573743239343700831708746573743239343800841708" - "74657374323934390085" - "1708746573743239353000861708746573743239353100871708746573743239353200881708746573743239353300" - "89170874657374323935" - "34008a17087465737432393535008b17087465737432393536008c17087465737432393537008d1708746573743239" - "3538008e170874657374" - "32393539008f1708746573743239363000901708746573743239363100911708746573743239363200921708746573" - "74323936330093170874" - "6573743239363400941708746573743239363500951708746573743239363600961708746573743239363700971708" - "74657374323936380098" - "17087465737432393639009917087465737432393730009a17087465737432393731009b1708746573743239373200" - "9c170874657374323937" - "33009d17087465737432393734009e17087465737432393735009f1708746573743239373600a01708746573743239" - "373700a1170874657374" - "3239373800a21708746573743239373900a31708746573743239383000a41708746573743239383100a51708746573" - "743239383200a6170874" - "6573743239383300a71708746573743239383400a81708746573743239383500a91708746573743239383600aa1708" - "746573743239383700ab" - "1708746573743239383800ac1708746573743239383900ad1708746573743239393000ae1708746573743239393100" - "af170874657374323939" - "3200b01708746573743239393300b11708746573743239393400b21708746573743239393500b31708746573743239" - "393600b4170874657374" - "3239393700b51708746573743239393800b61708746573743239393900b71708746573743330303000b81708746573" - "743330303100b9170874" - "6573743330303200ba1708746573743330303300bb1708746573743330303400bc1708746573743330303500bd1708" - "746573743330303600be" - "1708746573743330303700bf1708746573743330303800c01708746573743330303900c11708746573743330313000" - "c2170874657374333031" - "3100c31708746573743330313200c41708746573743330313300c51708746573743330313400c61708746573743330" - "313500c7170874657374" - "3330313600c81708746573743330313700c91708746573743330313800ca1708746573743330313900cb1708746573" - "743330323000cc170874" - "6573743330323100cd1708746573743330323200ce1708746573743330323300cf1708746573743330323400d01708" - "746573743330323500d1" - "1708746573743330323600d21708746573743330323700d31708746573743330323800d41708746573743330323900" - "d5170874657374333033" - "3000d61708746573743330333100d71708746573743330333200d81708746573743330333300d91708746573743330" - "333400da170874657374" - "3330333500db1708746573743330333600dc1708746573743330333700dd1708746573743330333800de1708746573" - "743330333900df170874" - "6573743330343000e01708746573743330343100e11708746573743330343200e21708746573743330343300e31708" - "746573743330343400e4" - "1708746573743330343500e51708746573743330343600e61708746573743330343700e71708746573743330343800" - "e8170874657374333034" - "3900e91708746573743330353000ea1708746573743330353100eb1708746573743330353200ec1708746573743330" - "353300ed170874657374" - "3330353400ee1708746573743330353500ef1708746573743330353600f01708746573743330353700f11708746573" - "743330353800f2170874" - "6573743330353900f31708746573743330363000f41708746573743330363100f51708746573743330363200f61708" - "746573743330363300f7" - "1708746573743330363400f81708746573743330363500f91708746573743330363600fa1708746573743330363700" - "fb170874657374333036" - "3800fc1708746573743330363900fd1708746573743330373000fe1708746573743330373100ff1708746573743330" - "37320080180874657374" - "3330373300811808746573743330373400821808746573743330373500831808746573743330373600841808746573" - "74333037370085180874" - "6573743330373800861808746573743330373900871808746573743330383000881808746573743330383100891808" - "7465737433303832008a" - "18087465737433303833008b18087465737433303834008c18087465737433303835008d1808746573743330383600" - "8e180874657374333038" - "37008f1808746573743330383800901808746573743330383900911808746573743330393000921808746573743330" - "39310093180874657374" - "3330393200941808746573743330393300951808746573743330393400961808746573743330393500971808746573" - "74333039360098180874" - "65737433303937009918087465737433303938009a18087465737433303939009b18087465737433313030009c1808" - "7465737433313031009d" - "18087465737433313032009e18087465737433313033009f1808746573743331303400a01808746573743331303500" - "a1180874657374333130" - "3600a21808746573743331303700a31808746573743331303800a41808746573743331303900a51808746573743331" - "313000a6180874657374" - "3331313100a71808746573743331313200a81808746573743331313300a91808746573743331313400aa1808746573" - "743331313500ab180874" - "6573743331313600ac1808746573743331313700ad1808746573743331313800ae1808746573743331313900af1808" - "746573743331323000b0" - "1808746573743331323100b11808746573743331323200b21808746573743331323300b31808746573743331323400" - "b4180874657374333132" - "3500b51808746573743331323600b61808746573743331323700b71808746573743331323800b81808746573743331" - "323900b9180874657374" - "3331333000ba1808746573743331333100bb1808746573743331333200bc1808746573743331333300bd1808746573" - "743331333400be180874" - "6573743331333500bf1808746573743331333600c01808746573743331333700c11808746573743331333800c21808" - "746573743331333900c3" - "1808746573743331343000c41808746573743331343100c51808746573743331343200c61808746573743331343300" - "c7180874657374333134" - "3400c81808746573743331343500c91808746573743331343600ca1808746573743331343700cb1808746573743331" - "343800cc180874657374" - "3331343900cd1808746573743331353000ce1808746573743331353100cf1808746573743331353200d01808746573" - "743331353300d1180874" - "6573743331353400d21808746573743331353500d31808746573743331353600d41808746573743331353700d51808" - "746573743331353800d6" - "1808746573743331353900d71808746573743331363000d81808746573743331363100d91808746573743331363200" - "da180874657374333136" + "7432393434008017087465737432393435008117087465737432393436008217087465737432393437008317087465" + "7374323934380084170874657374323934390085170874657374323935300086170874657374323935310087170874" + "65737432393532008817087465737432393533008917087465737432393534008a17087465737432393535008b1708" + "7465737432393536008c17087465737432393537008d17087465737432393538008e17087465737432393539008f17" + "0874657374323936300090170874657374323936310091170874657374323936320092170874657374323936330093" + "1708746573743239363400941708746573743239363500951708746573743239363600961708746573743239363700" + "9717087465737432393638009817087465737432393639009917087465737432393730009a17087465737432393731" + "009b17087465737432393732009c17087465737432393733009d17087465737432393734009e170874657374323937" + "35009f1708746573743239373600a01708746573743239373700a11708746573743239373800a21708746573743239" + "373900a31708746573743239383000a41708746573743239383100a51708746573743239383200a617087465737432" + "39383300a71708746573743239383400a81708746573743239383500a91708746573743239383600aa170874657374" + "3239383700ab1708746573743239383800ac1708746573743239383900ad1708746573743239393000ae1708746573" + "743239393100af1708746573743239393200b01708746573743239393300b11708746573743239393400b217087465" + "73743239393500b31708746573743239393600b41708746573743239393700b51708746573743239393800b6170874" + "6573743239393900b71708746573743330303000b81708746573743330303100b91708746573743330303200ba1708" + "746573743330303300bb1708746573743330303400bc1708746573743330303500bd1708746573743330303600be17" + "08746573743330303700bf1708746573743330303800c01708746573743330303900c11708746573743330313000c2" + "1708746573743330313100c31708746573743330313200c41708746573743330313300c51708746573743330313400" + "c61708746573743330313500c71708746573743330313600c81708746573743330313700c917087465737433303138" + "00ca1708746573743330313900cb1708746573743330323000cc1708746573743330323100cd170874657374333032" + "3200ce1708746573743330323300cf1708746573743330323400d01708746573743330323500d11708746573743330" + "323600d21708746573743330323700d31708746573743330323800d41708746573743330323900d517087465737433" + "30333000d61708746573743330333100d71708746573743330333200d81708746573743330333300d9170874657374" + "3330333400da1708746573743330333500db1708746573743330333600dc1708746573743330333700dd1708746573" + "743330333800de1708746573743330333900df1708746573743330343000e01708746573743330343100e117087465" + "73743330343200e21708746573743330343300e31708746573743330343400e41708746573743330343500e5170874" + "6573743330343600e61708746573743330343700e71708746573743330343800e81708746573743330343900e91708" + "746573743330353000ea1708746573743330353100eb1708746573743330353200ec1708746573743330353300ed17" + "08746573743330353400ee1708746573743330353500ef1708746573743330353600f01708746573743330353700f1" + "1708746573743330353800f21708746573743330353900f31708746573743330363000f41708746573743330363100" + "f51708746573743330363200f61708746573743330363300f71708746573743330363400f817087465737433303635" + "00f91708746573743330363600fa1708746573743330363700fb1708746573743330363800fc170874657374333036" + "3900fd1708746573743330373000fe1708746573743330373100ff1708746573743330373200801808746573743330" + "3733008118087465737433303734008218087465737433303735008318087465737433303736008418087465737433" + "3037370085180874657374333037380086180874657374333037390087180874657374333038300088180874657374" + "33303831008918087465737433303832008a18087465737433303833008b18087465737433303834008c1808746573" + "7433303835008d18087465737433303836008e18087465737433303837008f18087465737433303838009018087465" + "7374333038390091180874657374333039300092180874657374333039310093180874657374333039320094180874" + "6573743330393300951808746573743330393400961808746573743330393500971808746573743330393600981808" + "7465737433303937009918087465737433303938009a18087465737433303939009b18087465737433313030009c18" + "087465737433313031009d18087465737433313032009e18087465737433313033009f1808746573743331303400a0" + "1808746573743331303500a11808746573743331303600a21808746573743331303700a31808746573743331303800" + "a41808746573743331303900a51808746573743331313000a61808746573743331313100a718087465737433313132" + "00a81808746573743331313300a91808746573743331313400aa1808746573743331313500ab180874657374333131" + "3600ac1808746573743331313700ad1808746573743331313800ae1808746573743331313900af1808746573743331" + "323000b01808746573743331323100b11808746573743331323200b21808746573743331323300b318087465737433" + "31323400b41808746573743331323500b51808746573743331323600b61808746573743331323700b7180874657374" + "3331323800b81808746573743331323900b91808746573743331333000ba1808746573743331333100bb1808746573" + "743331333200bc1808746573743331333300bd1808746573743331333400be1808746573743331333500bf18087465" + "73743331333600c01808746573743331333700c11808746573743331333800c21808746573743331333900c3180874" + "6573743331343000c41808746573743331343100c51808746573743331343200c61808746573743331343300c71808" + "746573743331343400c81808746573743331343500c91808746573743331343600ca1808746573743331343700cb18" + "08746573743331343800cc1808746573743331343900cd1808746573743331353000ce1808746573743331353100cf" + "1808746573743331353200d01808746573743331353300d11808746573743331353400d21808746573743331353500" + "d31808746573743331353600d41808746573743331353700d51808746573743331353800d618087465737433313539" + "00d71808746573743331363000d81808746573743331363100d91808746573743331363200da180874657374333136" "3300db1808746573743331363400dc1808746573743331363500dd1808746573743331363600de1808746573743331" - "363700df180874657374" - "3331363800e01808746573743331363900e11808746573743331373000e21808746573743331373100e31808746573" - "743331373200e4180874" - "6573743331373300e51808746573743331373400e61808746573743331373500e71808746573743331373600e81808" - "746573743331373700e9" - "1808746573743331373800ea1808746573743331373900eb1808746573743331383000ec1808746573743331383100" - "ed180874657374333138" - "3200ee1808746573743331383300ef1808746573743331383400f01808746573743331383500f11808746573743331" - "383600f2180874657374" - "3331383700f31808746573743331383800f41808746573743331383900f51808746573743331393000f61808746573" - "743331393100f7180874" - "6573743331393200f81808746573743331393300f91808746573743331393400fa1808746573743331393500fb1808" - "746573743331393600fc" - "1808746573743331393700fd1808746573743331393800fe1808746573743331393900ff1808746573743332303000" - "80190874657374333230" - "3100811908746573743332303200821908746573743332303300831908746573743332303400841908746573743332" - "30350085190874657374" - "3332303600861908746573743332303700871908746573743332303800881908746573743332303900891908746573" - "7433323130008a190874" - "65737433323131008b19087465737433323132008c19087465737433323133008d19087465737433323134008e1908" - "7465737433323135008f" - "1908746573743332313600901908746573743332313700911908746573743332313800921908746573743332313900" - "93190874657374333232" - "3000941908746573743332323100951908746573743332323200961908746573743332323300971908746573743332" - "32340098190874657374" - "33323235009919087465737433323236009a19087465737433323237009b19087465737433323238009c1908746573" - "7433323239009d190874" - "65737433323330009e19087465737433323331009f1908746573743332333200a01908746573743332333300a11908" - "746573743332333400a2" - "1908746573743332333500a31908746573743332333600a41908746573743332333700a51908746573743332333800" - "a6190874657374333233" - "3900a71908746573743332343000a81908746573743332343100a91908746573743332343200aa1908746573743332" - "343300ab190874657374" - "3332343400ac1908746573743332343500ad1908746573743332343600ae1908746573743332343700af1908746573" - "743332343800b0190874" - "6573743332343900b11908746573743332353000b21908746573743332353100b31908746573743332353200b41908" - "746573743332353300b5" - "1908746573743332353400b61908746573743332353500b71908746573743332353600b81908746573743332353700" - "b9190874657374333235" - "3800ba1908746573743332353900bb1908746573743332363000bc1908746573743332363100bd1908746573743332" - "363200be190874657374" - "3332363300bf1908746573743332363400c01908746573743332363500c11908746573743332363600c21908746573" - "743332363700c3190874" - "6573743332363800c41908746573743332363900c51908746573743332373000c61908746573743332373100c71908" - "746573743332373200c8" - "1908746573743332373300c91908746573743332373400ca1908746573743332373500cb1908746573743332373600" - "cc190874657374333237" - "3700cd1908746573743332373800ce1908746573743332373900cf1908746573743332383000d01908746573743332" - "383100d1190874657374" - "3332383200d21908746573743332383300d31908746573743332383400d41908746573743332383500d51908746573" - "743332383600d6190874" - "6573743332383700d71908746573743332383800d81908746573743332383900d91908746573743332393000da1908" - "746573743332393100db" - "1908746573743332393200dc1908746573743332393300dd1908746573743332393400de1908746573743332393500" - "df190874657374333239" - "3600e01908746573743332393700e11908746573743332393800e21908746573743332393900e31908746573743333" - "303000e4190874657374" - "3333303100e51908746573743333303200e61908746573743333303300e71908746573743333303400e81908746573" - "743333303500e9190874" - "6573743333303600ea1908746573743333303700eb1908746573743333303800ec1908746573743333303900ed1908" - "746573743333313000ee" - "1908746573743333313100ef1908746573743333313200f01908746573743333313300f11908746573743333313400" - "f2190874657374333331" - "3500f31908746573743333313600f41908746573743333313700f51908746573743333313800f61908746573743333" - "313900f7190874657374" - "3333323000f81908746573743333323100f91908746573743333323200fa1908746573743333323300fb1908746573" - "743333323400fc190874" - "6573743333323500fd1908746573743333323600fe1908746573743333323700ff1908746573743333323800801a08" - "74657374333332390081" - "1a08746573743333333000821a08746573743333333100831a08746573743333333200841a08746573743333333300" - "851a0874657374333333" - "3400861a08746573743333333500871a08746573743333333600881a08746573743333333700891a08746573743333" - "3338008a1a0874657374" - "33333339008b1a087465737433333430008c1a087465737433333431008d1a087465737433333432008e1a08746573" - "7433333433008f1a0874" - "6573743333343400901a08746573743333343500911a08746573743333343600921a08746573743333343700931a08" - "74657374333334380094" - "1a08746573743333343900951a08746573743333353000961a08746573743333353100971a08746573743333353200" - "981a0874657374333335" - "3300991a087465737433333534009a1a087465737433333535009b1a087465737433333536009c1a08746573743333" - "3537009d1a0874657374" - "33333538009e1a087465737433333539009f1a08746573743333363000a01a08746573743333363100a11a08746573" - "743333363200a21a0874" - "6573743333363300a31a08746573743333363400a41a08746573743333363500a51a08746573743333363600a61a08" - "746573743333363700a7" - "1a08746573743333363800a81a08746573743333363900a91a08746573743333373000aa1a08746573743333373100" - "ab1a0874657374333337" - "3200ac1a08746573743333373300ad1a08746573743333373400ae1a08746573743333373500af1a08746573743333" - "373600b01a0874657374" - "3333373700b11a08746573743333373800b21a08746573743333373900b31a08746573743333383000b41a08746573" - "743333383100b51a0874" - "6573743333383200b61a08746573743333383300b71a08746573743333383400b81a08746573743333383500b91a08" - "746573743333383600ba" + "363700df1808746573743331363800e01808746573743331363900e11808746573743331373000e218087465737433" + "31373100e31808746573743331373200e41808746573743331373300e51808746573743331373400e6180874657374" + "3331373500e71808746573743331373600e81808746573743331373700e91808746573743331373800ea1808746573" + "743331373900eb1808746573743331383000ec1808746573743331383100ed1808746573743331383200ee18087465" + "73743331383300ef1808746573743331383400f01808746573743331383500f11808746573743331383600f2180874" + "6573743331383700f31808746573743331383800f41808746573743331383900f51808746573743331393000f61808" + "746573743331393100f71808746573743331393200f81808746573743331393300f91808746573743331393400fa18" + "08746573743331393500fb1808746573743331393600fc1808746573743331393700fd1808746573743331393800fe" + "1808746573743331393900ff1808746573743332303000801908746573743332303100811908746573743332303200" + "8219087465737433323033008319087465737433323034008419087465737433323035008519087465737433323036" + "0086190874657374333230370087190874657374333230380088190874657374333230390089190874657374333231" + "30008a19087465737433323131008b19087465737433323132008c19087465737433323133008d1908746573743332" + "3134008e19087465737433323135008f19087465737433323136009019087465737433323137009119087465737433" + "3231380092190874657374333231390093190874657374333232300094190874657374333232310095190874657374" + "3332323200961908746573743332323300971908746573743332323400981908746573743332323500991908746573" + "7433323236009a19087465737433323237009b19087465737433323238009c19087465737433323239009d19087465" + "737433323330009e19087465737433323331009f1908746573743332333200a01908746573743332333300a1190874" + "6573743332333400a21908746573743332333500a31908746573743332333600a41908746573743332333700a51908" + "746573743332333800a61908746573743332333900a71908746573743332343000a81908746573743332343100a919" + "08746573743332343200aa1908746573743332343300ab1908746573743332343400ac1908746573743332343500ad" + "1908746573743332343600ae1908746573743332343700af1908746573743332343800b01908746573743332343900" + "b11908746573743332353000b21908746573743332353100b31908746573743332353200b419087465737433323533" + "00b51908746573743332353400b61908746573743332353500b71908746573743332353600b8190874657374333235" + "3700b91908746573743332353800ba1908746573743332353900bb1908746573743332363000bc1908746573743332" + "363100bd1908746573743332363200be1908746573743332363300bf1908746573743332363400c019087465737433" + "32363500c11908746573743332363600c21908746573743332363700c31908746573743332363800c4190874657374" + "3332363900c51908746573743332373000c61908746573743332373100c71908746573743332373200c81908746573" + "743332373300c91908746573743332373400ca1908746573743332373500cb1908746573743332373600cc19087465" + "73743332373700cd1908746573743332373800ce1908746573743332373900cf1908746573743332383000d0190874" + "6573743332383100d11908746573743332383200d21908746573743332383300d31908746573743332383400d41908" + "746573743332383500d51908746573743332383600d61908746573743332383700d71908746573743332383800d819" + "08746573743332383900d91908746573743332393000da1908746573743332393100db1908746573743332393200dc" + "1908746573743332393300dd1908746573743332393400de1908746573743332393500df1908746573743332393600" + "e01908746573743332393700e11908746573743332393800e21908746573743332393900e319087465737433333030" + "00e41908746573743333303100e51908746573743333303200e61908746573743333303300e7190874657374333330" + "3400e81908746573743333303500e91908746573743333303600ea1908746573743333303700eb1908746573743333" + "303800ec1908746573743333303900ed1908746573743333313000ee1908746573743333313100ef19087465737433" + "33313200f01908746573743333313300f11908746573743333313400f21908746573743333313500f3190874657374" + "3333313600f41908746573743333313700f51908746573743333313800f61908746573743333313900f71908746573" + "743333323000f81908746573743333323100f91908746573743333323200fa1908746573743333323300fb19087465" + "73743333323400fc1908746573743333323500fd1908746573743333323600fe1908746573743333323700ff190874" + "6573743333323800801a08746573743333323900811a08746573743333333000821a08746573743333333100831a08" + "746573743333333200841a08746573743333333300851a08746573743333333400861a08746573743333333500871a" + "08746573743333333600881a08746573743333333700891a087465737433333338008a1a087465737433333339008b" + "1a087465737433333430008c1a087465737433333431008d1a087465737433333432008e1a08746573743333343300" + "8f1a08746573743333343400901a08746573743333343500911a08746573743333343600921a087465737433333437" + "00931a08746573743333343800941a08746573743333343900951a08746573743333353000961a0874657374333335" + "3100971a08746573743333353200981a08746573743333353300991a087465737433333534009a1a08746573743333" + "3535009b1a087465737433333536009c1a087465737433333537009d1a087465737433333538009e1a087465737433" + "333539009f1a08746573743333363000a01a08746573743333363100a11a08746573743333363200a21a0874657374" + "3333363300a31a08746573743333363400a41a08746573743333363500a51a08746573743333363600a61a08746573" + "743333363700a71a08746573743333363800a81a08746573743333363900a91a08746573743333373000aa1a087465" + "73743333373100ab1a08746573743333373200ac1a08746573743333373300ad1a08746573743333373400ae1a0874" + "6573743333373500af1a08746573743333373600b01a08746573743333373700b11a08746573743333373800b21a08" + "746573743333373900b31a08746573743333383000b41a08746573743333383100b51a08746573743333383200b61a" + "08746573743333383300b71a08746573743333383400b81a08746573743333383500b91a08746573743333383600ba" "1a08746573743333383700bb1a08746573743333383800bc1a08746573743333383900bd1a08746573743333393000" - "be1a0874657374333339" - "3100bf1a08746573743333393200c01a08746573743333393300c11a08746573743333393400c21a08746573743333" - "393500c31a0874657374" - "3333393600c41a08746573743333393700c51a08746573743333393800c61a08746573743333393900c71a08746573" - "743334303000c81a0874" - "6573743334303100c91a08746573743334303200ca1a08746573743334303300cb1a08746573743334303400cc1a08" - "746573743334303500cd" - "1a08746573743334303600ce1a08746573743334303700cf1a08746573743334303800d01a08746573743334303900" - "d11a0874657374333431" - "3000d21a08746573743334313100d31a08746573743334313200d41a08746573743334313300d51a08746573743334" - "313400d61a0874657374" - "3334313500d71a08746573743334313600d81a08746573743334313700d91a08746573743334313800da1a08746573" - "743334313900db1a0874" - "6573743334323000dc1a08746573743334323100dd1a08746573743334323200de1a08746573743334323300df1a08" - "746573743334323400e0" - "1a08746573743334323500e11a08746573743334323600e21a08746573743334323700e31a08746573743334323800" - "e41a0874657374333432" - "3900e51a08746573743334333000e61a08746573743334333100e71a08746573743334333200e81a08746573743334" - "333300e91a0874657374" - "3334333400ea1a08746573743334333500eb1a08746573743334333600ec1a08746573743334333700ed1a08746573" - "743334333800ee1a0874" - "6573743334333900ef1a08746573743334343000f01a08746573743334343100f11a08746573743334343200f21a08" - "746573743334343300f3" - "1a08746573743334343400f41a08746573743334343500f51a08746573743334343600f61a08746573743334343700" - "f71a0874657374333434" - "3800f81a08746573743334343900f91a08746573743334353000fa1a08746573743334353100fb1a08746573743334" - "353200fc1a0874657374" - "3334353300fd1a08746573743334353400fe1a08746573743334353500ff1a08746573743334353600801b08746573" - "743334353700811b0874" - "6573743334353800821b08746573743334353900831b08746573743334363000841b08746573743334363100851b08" - "74657374333436320086" - "1b08746573743334363300871b08746573743334363400881b08746573743334363500891b08746573743334363600" - "8a1b0874657374333436" - "37008b1b087465737433343638008c1b087465737433343639008d1b087465737433343730008e1b08746573743334" - "3731008f1b0874657374" - "3334373200901b08746573743334373300911b08746573743334373400921b08746573743334373500931b08746573" - "743334373600941b0874" - "6573743334373700951b08746573743334373800961b08746573743334373900971b08746573743334383000981b08" - "74657374333438310099" - "1b087465737433343832009a1b087465737433343833009b1b087465737433343834009c1b08746573743334383500" - "9d1b0874657374333438" - "36009e1b087465737433343837009f1b08746573743334383800a01b08746573743334383900a11b08746573743334" - "393000a21b0874657374" - "3334393100a31b08746573743334393200a41b08746573743334393300a51b08746573743334393400a61b08746573" - "743334393500a71b0874" - "6573743334393600a81b08746573743334393700a91b08746573743334393800aa1b08746573743334393900ab1b08" - "746573743335303000ac" - "1b08746573743335303100ad1b08746573743335303200ae1b08746573743335303300af1b08746573743335303400" - "b01b0874657374333530" - "3500b11b08746573743335303600b21b08746573743335303700b31b08746573743335303800b41b08746573743335" - "303900b51b0874657374" - "3335313000b61b08746573743335313100b71b08746573743335313200b81b08746573743335313300b91b08746573" - "743335313400ba1b0874" - "6573743335313500bb1b08746573743335313600bc1b08746573743335313700bd1b08746573743335313800be1b08" - "746573743335313900bf" - "1b08746573743335323000c01b08746573743335323100c11b08746573743335323200c21b08746573743335323300" - "c31b0874657374333532" - "3400c41b08746573743335323500c51b08746573743335323600c61b08746573743335323700c71b08746573743335" - "323800c81b0874657374" - "3335323900c91b08746573743335333000ca1b08746573743335333100cb1b08746573743335333200cc1b08746573" - "743335333300cd1b0874" - "6573743335333400ce1b08746573743335333500cf1b08746573743335333600d01b08746573743335333700d11b08" - "746573743335333800d2" - "1b08746573743335333900d31b08746573743335343000d41b08746573743335343100d51b08746573743335343200" - "d61b0874657374333534" - "3300d71b08746573743335343400d81b08746573743335343500d91b08746573743335343600da1b08746573743335" - "343700db1b0874657374" - "3335343800dc1b08746573743335343900dd1b08746573743335353000de1b08746573743335353100df1b08746573" - "743335353200e01b0874" - "6573743335353300e11b08746573743335353400e21b08746573743335353500e31b08746573743335353600e41b08" - "746573743335353700e5" - "1b08746573743335353800e61b08746573743335353900e71b08746573743335363000e81b08746573743335363100" - "e91b0874657374333536" - "3200ea1b08746573743335363300eb1b08746573743335363400ec1b08746573743335363500ed1b08746573743335" - "363600ee1b0874657374" - "3335363700ef1b08746573743335363800f01b08746573743335363900f11b08746573743335373000f21b08746573" - "743335373100f31b0874" - "6573743335373200f41b08746573743335373300f51b08746573743335373400f61b08746573743335373500f71b08" - "746573743335373600f8" - "1b08746573743335373700f91b08746573743335373800fa1b08746573743335373900fb1b08746573743335383000" - "fc1b0874657374333538" - "3100fd1b08746573743335383200fe1b08746573743335383300ff1b08746573743335383400801c08746573743335" - "383500811c0874657374" - "3335383600821c08746573743335383700831c08746573743335383800841c08746573743335383900851c08746573" - "743335393000861c0874" - "6573743335393100871c08746573743335393200881c08746573743335393300891c087465737433353934008a1c08" - "7465737433353935008b" - "1c087465737433353936008c1c087465737433353937008d1c087465737433353938008e1c08746573743335393900" - "8f1c0874657374333630" - "3000901c08746573743336303100911c08746573743336303200921c08746573743336303300931c08746573743336" - "303400941c0874657374" - "3336303500951c08746573743336303600961c08746573743336303700971c08746573743336303800981c08746573" - "743336303900991c0874" + "be1a08746573743333393100bf1a08746573743333393200c01a08746573743333393300c11a087465737433333934" + "00c21a08746573743333393500c31a08746573743333393600c41a08746573743333393700c51a0874657374333339" + "3800c61a08746573743333393900c71a08746573743334303000c81a08746573743334303100c91a08746573743334" + "303200ca1a08746573743334303300cb1a08746573743334303400cc1a08746573743334303500cd1a087465737433" + "34303600ce1a08746573743334303700cf1a08746573743334303800d01a08746573743334303900d11a0874657374" + "3334313000d21a08746573743334313100d31a08746573743334313200d41a08746573743334313300d51a08746573" + "743334313400d61a08746573743334313500d71a08746573743334313600d81a08746573743334313700d91a087465" + "73743334313800da1a08746573743334313900db1a08746573743334323000dc1a08746573743334323100dd1a0874" + "6573743334323200de1a08746573743334323300df1a08746573743334323400e01a08746573743334323500e11a08" + "746573743334323600e21a08746573743334323700e31a08746573743334323800e41a08746573743334323900e51a" + "08746573743334333000e61a08746573743334333100e71a08746573743334333200e81a08746573743334333300e9" + "1a08746573743334333400ea1a08746573743334333500eb1a08746573743334333600ec1a08746573743334333700" + "ed1a08746573743334333800ee1a08746573743334333900ef1a08746573743334343000f01a087465737433343431" + "00f11a08746573743334343200f21a08746573743334343300f31a08746573743334343400f41a0874657374333434" + "3500f51a08746573743334343600f61a08746573743334343700f71a08746573743334343800f81a08746573743334" + "343900f91a08746573743334353000fa1a08746573743334353100fb1a08746573743334353200fc1a087465737433" + "34353300fd1a08746573743334353400fe1a08746573743334353500ff1a08746573743334353600801b0874657374" + "3334353700811b08746573743334353800821b08746573743334353900831b08746573743334363000841b08746573" + "743334363100851b08746573743334363200861b08746573743334363300871b08746573743334363400881b087465" + "73743334363500891b087465737433343636008a1b087465737433343637008b1b087465737433343638008c1b0874" + "65737433343639008d1b087465737433343730008e1b087465737433343731008f1b08746573743334373200901b08" + "746573743334373300911b08746573743334373400921b08746573743334373500931b08746573743334373600941b" + "08746573743334373700951b08746573743334373800961b08746573743334373900971b0874657374333438300098" + "1b08746573743334383100991b087465737433343832009a1b087465737433343833009b1b08746573743334383400" + "9c1b087465737433343835009d1b087465737433343836009e1b087465737433343837009f1b087465737433343838" + "00a01b08746573743334383900a11b08746573743334393000a21b08746573743334393100a31b0874657374333439" + "3200a41b08746573743334393300a51b08746573743334393400a61b08746573743334393500a71b08746573743334" + "393600a81b08746573743334393700a91b08746573743334393800aa1b08746573743334393900ab1b087465737433" + "35303000ac1b08746573743335303100ad1b08746573743335303200ae1b08746573743335303300af1b0874657374" + "3335303400b01b08746573743335303500b11b08746573743335303600b21b08746573743335303700b31b08746573" + "743335303800b41b08746573743335303900b51b08746573743335313000b61b08746573743335313100b71b087465" + "73743335313200b81b08746573743335313300b91b08746573743335313400ba1b08746573743335313500bb1b0874" + "6573743335313600bc1b08746573743335313700bd1b08746573743335313800be1b08746573743335313900bf1b08" + "746573743335323000c01b08746573743335323100c11b08746573743335323200c21b08746573743335323300c31b" + "08746573743335323400c41b08746573743335323500c51b08746573743335323600c61b08746573743335323700c7" + "1b08746573743335323800c81b08746573743335323900c91b08746573743335333000ca1b08746573743335333100" + "cb1b08746573743335333200cc1b08746573743335333300cd1b08746573743335333400ce1b087465737433353335" + "00cf1b08746573743335333600d01b08746573743335333700d11b08746573743335333800d21b0874657374333533" + "3900d31b08746573743335343000d41b08746573743335343100d51b08746573743335343200d61b08746573743335" + "343300d71b08746573743335343400d81b08746573743335343500d91b08746573743335343600da1b087465737433" + "35343700db1b08746573743335343800dc1b08746573743335343900dd1b08746573743335353000de1b0874657374" + "3335353100df1b08746573743335353200e01b08746573743335353300e11b08746573743335353400e21b08746573" + "743335353500e31b08746573743335353600e41b08746573743335353700e51b08746573743335353800e61b087465" + "73743335353900e71b08746573743335363000e81b08746573743335363100e91b08746573743335363200ea1b0874" + "6573743335363300eb1b08746573743335363400ec1b08746573743335363500ed1b08746573743335363600ee1b08" + "746573743335363700ef1b08746573743335363800f01b08746573743335363900f11b08746573743335373000f21b" + "08746573743335373100f31b08746573743335373200f41b08746573743335373300f51b08746573743335373400f6" + "1b08746573743335373500f71b08746573743335373600f81b08746573743335373700f91b08746573743335373800" + "fa1b08746573743335373900fb1b08746573743335383000fc1b08746573743335383100fd1b087465737433353832" + "00fe1b08746573743335383300ff1b08746573743335383400801c08746573743335383500811c0874657374333538" + "3600821c08746573743335383700831c08746573743335383800841c08746573743335383900851c08746573743335" + "393000861c08746573743335393100871c08746573743335393200881c08746573743335393300891c087465737433" + "353934008a1c087465737433353935008b1c087465737433353936008c1c087465737433353937008d1c0874657374" + "33353938008e1c087465737433353939008f1c08746573743336303000901c08746573743336303100911c08746573" + "743336303200921c08746573743336303300931c08746573743336303400941c08746573743336303500951c087465" + "73743336303600961c08746573743336303700971c08746573743336303800981c08746573743336303900991c0874" "65737433363130009a1c087465737433363131009b1c087465737433363132009c1c087465737433363133009d1c08" - "7465737433363134009e" - "1c087465737433363135009f1c08746573743336313600a01c08746573743336313700a11c08746573743336313800" - "a21c0874657374333631" - "3900a31c08746573743336323000a41c08746573743336323100a51c08746573743336323200a61c08746573743336" - "323300a71c0874657374" - "3336323400a81c08746573743336323500a91c08746573743336323600aa1c08746573743336323700ab1c08746573" - "743336323800ac1c0874" - "6573743336323900ad1c08746573743336333000ae1c08746573743336333100af1c08746573743336333200b01c08" - "746573743336333300b1" - "1c08746573743336333400b21c08746573743336333500b31c08746573743336333600b41c08746573743336333700" - "b51c0874657374333633" - "3800b61c08746573743336333900b71c08746573743336343000b81c08746573743336343100b91c08746573743336" - "343200ba1c0874657374" - "3336343300bb1c08746573743336343400bc1c08746573743336343500bd1c08746573743336343600be1c08746573" - "743336343700bf1c0874" - "6573743336343800c01c08746573743336343900c11c08746573743336353000c21c08746573743336353100c31c08" - "746573743336353200c4" - "1c08746573743336353300c51c08746573743336353400c61c08746573743336353500c71c08746573743336353600" - "c81c0874657374333635" - "3700c91c08746573743336353800ca1c08746573743336353900cb1c08746573743336363000cc1c08746573743336" - "363100cd1c0874657374" - "3336363200ce1c08746573743336363300cf1c08746573743336363400d01c08746573743336363500d11c08746573" - "743336363600d21c0874" - "6573743336363700d31c08746573743336363800d41c08746573743336363900d51c08746573743336373000d61c08" - "746573743336373100d7" - "1c08746573743336373200d81c08746573743336373300d91c08746573743336373400da1c08746573743336373500" - "db1c0874657374333637" - "3600dc1c08746573743336373700dd1c08746573743336373800de1c08746573743336373900df1c08746573743336" - "383000e01c0874657374" - "3336383100e11c08746573743336383200e21c08746573743336383300e31c08746573743336383400e41c08746573" - "743336383500e51c0874" - "6573743336383600e61c08746573743336383700e71c08746573743336383800e81c08746573743336383900e91c08" - "746573743336393000ea" - "1c08746573743336393100eb1c08746573743336393200ec1c08746573743336393300ed1c08746573743336393400" - "ee1c0874657374333639" - "3500ef1c08746573743336393600f01c08746573743336393700f11c08746573743336393800f21c08746573743336" - "393900f31c0874657374" - "3337303000f41c08746573743337303100f51c08746573743337303200f61c08746573743337303300f71c08746573" - "743337303400f81c0874" - "6573743337303500f91c08746573743337303600fa1c08746573743337303700fb1c08746573743337303800fc1c08" - "746573743337303900fd" - "1c08746573743337313000fe1c08746573743337313100ff1c08746573743337313200801d08746573743337313300" - "811d0874657374333731" - "3400821d08746573743337313500831d08746573743337313600841d08746573743337313700851d08746573743337" - "313800861d0874657374" - "3337313900871d08746573743337323000881d08746573743337323100891d087465737433373232008a1d08746573" - "7433373233008b1d0874" - "65737433373234008c1d087465737433373235008d1d087465737433373236008e1d087465737433373237008f1d08" - "74657374333732380090" - "1d08746573743337323900911d08746573743337333000921d08746573743337333100931d08746573743337333200" - "941d0874657374333733" - "3300951d08746573743337333400961d08746573743337333500971d08746573743337333600981d08746573743337" - "333700991d0874657374" - "33373338009a1d087465737433373339009b1d087465737433373430009c1d087465737433373431009d1d08746573" - "7433373432009e1d0874" - "65737433373433009f1d08746573743337343400a01d08746573743337343500a11d08746573743337343600a21d08" - "746573743337343700a3" - "1d08746573743337343800a41d08746573743337343900a51d08746573743337353000a61d08746573743337353100" - "a71d0874657374333735" - "3200a81d08746573743337353300a91d08746573743337353400aa1d08746573743337353500ab1d08746573743337" - "353600ac1d0874657374" - "3337353700ad1d08746573743337353800ae1d08746573743337353900af1d08746573743337363000b01d08746573" - "743337363100b11d0874" - "6573743337363200b21d08746573743337363300b31d08746573743337363400b41d08746573743337363500b51d08" - "746573743337363600b6" - "1d08746573743337363700b71d08746573743337363800b81d08746573743337363900b91d08746573743337373000" - "ba1d0874657374333737" - "3100bb1d08746573743337373200bc1d08746573743337373300bd1d08746573743337373400be1d08746573743337" - "373500bf1d0874657374" - "3337373600c01d08746573743337373700c11d08746573743337373800c21d08746573743337373900c31d08746573" - "743337383000c41d0874" - "6573743337383100c51d08746573743337383200c61d08746573743337383300c71d08746573743337383400c81d08" - "746573743337383500c9" - "1d08746573743337383600ca1d08746573743337383700cb1d08746573743337383800cc1d08746573743337383900" - "cd1d0874657374333739" - "3000ce1d08746573743337393100cf1d08746573743337393200d01d08746573743337393300d11d08746573743337" - "393400d21d0874657374" - "3337393500d31d08746573743337393600d41d08746573743337393700d51d08746573743337393800d61d08746573" - "743337393900d71d0874" - "6573743338303000d81d08746573743338303100d91d08746573743338303200da1d08746573743338303300db1d08" - "746573743338303400dc" - "1d08746573743338303500dd1d08746573743338303600de1d08746573743338303700df1d08746573743338303800" - "e01d0874657374333830" - "3900e11d08746573743338313000e21d08746573743338313100e31d08746573743338313200e41d08746573743338" - "313300e51d0874657374" - "3338313400e61d08746573743338313500e71d08746573743338313600e81d08746573743338313700e91d08746573" - "743338313800ea1d0874" - "6573743338313900eb1d08746573743338323000ec1d08746573743338323100ed1d08746573743338323200ee1d08" - "746573743338323300ef" - "1d08746573743338323400f01d08746573743338323500f11d08746573743338323600f21d08746573743338323700" - "f31d0874657374333832" - "3800f41d08746573743338323900f51d08746573743338333000f61d08746573743338333100f71d08746573743338" - "333200f81d0874657374" + "7465737433363134009e1c087465737433363135009f1c08746573743336313600a01c08746573743336313700a11c" + "08746573743336313800a21c08746573743336313900a31c08746573743336323000a41c08746573743336323100a5" + "1c08746573743336323200a61c08746573743336323300a71c08746573743336323400a81c08746573743336323500" + "a91c08746573743336323600aa1c08746573743336323700ab1c08746573743336323800ac1c087465737433363239" + "00ad1c08746573743336333000ae1c08746573743336333100af1c08746573743336333200b01c0874657374333633" + "3300b11c08746573743336333400b21c08746573743336333500b31c08746573743336333600b41c08746573743336" + "333700b51c08746573743336333800b61c08746573743336333900b71c08746573743336343000b81c087465737433" + "36343100b91c08746573743336343200ba1c08746573743336343300bb1c08746573743336343400bc1c0874657374" + "3336343500bd1c08746573743336343600be1c08746573743336343700bf1c08746573743336343800c01c08746573" + "743336343900c11c08746573743336353000c21c08746573743336353100c31c08746573743336353200c41c087465" + "73743336353300c51c08746573743336353400c61c08746573743336353500c71c08746573743336353600c81c0874" + "6573743336353700c91c08746573743336353800ca1c08746573743336353900cb1c08746573743336363000cc1c08" + "746573743336363100cd1c08746573743336363200ce1c08746573743336363300cf1c08746573743336363400d01c" + "08746573743336363500d11c08746573743336363600d21c08746573743336363700d31c08746573743336363800d4" + "1c08746573743336363900d51c08746573743336373000d61c08746573743336373100d71c08746573743336373200" + "d81c08746573743336373300d91c08746573743336373400da1c08746573743336373500db1c087465737433363736" + "00dc1c08746573743336373700dd1c08746573743336373800de1c08746573743336373900df1c0874657374333638" + "3000e01c08746573743336383100e11c08746573743336383200e21c08746573743336383300e31c08746573743336" + "383400e41c08746573743336383500e51c08746573743336383600e61c08746573743336383700e71c087465737433" + "36383800e81c08746573743336383900e91c08746573743336393000ea1c08746573743336393100eb1c0874657374" + "3336393200ec1c08746573743336393300ed1c08746573743336393400ee1c08746573743336393500ef1c08746573" + "743336393600f01c08746573743336393700f11c08746573743336393800f21c08746573743336393900f31c087465" + "73743337303000f41c08746573743337303100f51c08746573743337303200f61c08746573743337303300f71c0874" + "6573743337303400f81c08746573743337303500f91c08746573743337303600fa1c08746573743337303700fb1c08" + "746573743337303800fc1c08746573743337303900fd1c08746573743337313000fe1c08746573743337313100ff1c" + "08746573743337313200801d08746573743337313300811d08746573743337313400821d0874657374333731350083" + "1d08746573743337313600841d08746573743337313700851d08746573743337313800861d08746573743337313900" + "871d08746573743337323000881d08746573743337323100891d087465737433373232008a1d087465737433373233" + "008b1d087465737433373234008c1d087465737433373235008d1d087465737433373236008e1d0874657374333732" + "37008f1d08746573743337323800901d08746573743337323900911d08746573743337333000921d08746573743337" + "333100931d08746573743337333200941d08746573743337333300951d08746573743337333400961d087465737433" + "37333500971d08746573743337333600981d08746573743337333700991d087465737433373338009a1d0874657374" + "33373339009b1d087465737433373430009c1d087465737433373431009d1d087465737433373432009e1d08746573" + "7433373433009f1d08746573743337343400a01d08746573743337343500a11d08746573743337343600a21d087465" + "73743337343700a31d08746573743337343800a41d08746573743337343900a51d08746573743337353000a61d0874" + "6573743337353100a71d08746573743337353200a81d08746573743337353300a91d08746573743337353400aa1d08" + "746573743337353500ab1d08746573743337353600ac1d08746573743337353700ad1d08746573743337353800ae1d" + "08746573743337353900af1d08746573743337363000b01d08746573743337363100b11d08746573743337363200b2" + "1d08746573743337363300b31d08746573743337363400b41d08746573743337363500b51d08746573743337363600" + "b61d08746573743337363700b71d08746573743337363800b81d08746573743337363900b91d087465737433373730" + "00ba1d08746573743337373100bb1d08746573743337373200bc1d08746573743337373300bd1d0874657374333737" + "3400be1d08746573743337373500bf1d08746573743337373600c01d08746573743337373700c11d08746573743337" + "373800c21d08746573743337373900c31d08746573743337383000c41d08746573743337383100c51d087465737433" + "37383200c61d08746573743337383300c71d08746573743337383400c81d08746573743337383500c91d0874657374" + "3337383600ca1d08746573743337383700cb1d08746573743337383800cc1d08746573743337383900cd1d08746573" + "743337393000ce1d08746573743337393100cf1d08746573743337393200d01d08746573743337393300d11d087465" + "73743337393400d21d08746573743337393500d31d08746573743337393600d41d08746573743337393700d51d0874" + "6573743337393800d61d08746573743337393900d71d08746573743338303000d81d08746573743338303100d91d08" + "746573743338303200da1d08746573743338303300db1d08746573743338303400dc1d08746573743338303500dd1d" + "08746573743338303600de1d08746573743338303700df1d08746573743338303800e01d08746573743338303900e1" + "1d08746573743338313000e21d08746573743338313100e31d08746573743338313200e41d08746573743338313300" + "e51d08746573743338313400e61d08746573743338313500e71d08746573743338313600e81d087465737433383137" + "00e91d08746573743338313800ea1d08746573743338313900eb1d08746573743338323000ec1d0874657374333832" + "3100ed1d08746573743338323200ee1d08746573743338323300ef1d08746573743338323400f01d08746573743338" + "323500f11d08746573743338323600f21d08746573743338323700f31d08746573743338323800f41d087465737433" + "38323900f51d08746573743338333000f61d08746573743338333100f71d08746573743338333200f81d0874657374" "3338333300f91d08746573743338333400fa1d08746573743338333500fb1d08746573743338333600fc1d08746573" - "743338333700fd1d0874" - "6573743338333800fe1d08746573743338333900ff1d08746573743338343000801e08746573743338343100811e08" - "74657374333834320082" - "1e08746573743338343300831e08746573743338343400841e08746573743338343500851e08746573743338343600" - "861e0874657374333834" - "3700871e08746573743338343800881e08746573743338343900891e087465737433383530008a1e08746573743338" - "3531008b1e0874657374" - "33383532008c1e087465737433383533008d1e087465737433383534008e1e087465737433383535008f1e08746573" - "743338353600901e0874" - "6573743338353700911e08746573743338353800921e08746573743338353900931e08746573743338363000941e08" - "74657374333836310095" - "1e08746573743338363200961e08746573743338363300971e08746573743338363400981e08746573743338363500" - "991e0874657374333836" - "36009a1e087465737433383637009b1e087465737433383638009c1e087465737433383639009d1e08746573743338" - "3730009e1e0874657374" - "33383731009f1e08746573743338373200a01e08746573743338373300a11e08746573743338373400a21e08746573" - "743338373500a31e0874" - "6573743338373600a41e08746573743338373700a51e08746573743338373800a61e08746573743338373900a71e08" - "746573743338383000a8" - "1e08746573743338383100a91e08746573743338383200aa1e08746573743338383300ab1e08746573743338383400" - "ac1e0874657374333838" - "3500ad1e08746573743338383600ae1e08746573743338383700af1e08746573743338383800b01e08746573743338" - "383900b11e0874657374" - "3338393000b21e08746573743338393100b31e08746573743338393200b41e08746573743338393300b51e08746573" - "743338393400b61e0874" - "6573743338393500b71e08746573743338393600b81e08746573743338393700b91e08746573743338393800ba1e08" - "746573743338393900bb" - "1e08746573743339303000bc1e08746573743339303100bd1e08746573743339303200be1e08746573743339303300" - "bf1e0874657374333930" - "3400c01e08746573743339303500c11e08746573743339303600c21e08746573743339303700c31e08746573743339" - "303800c41e0874657374" - "3339303900c51e08746573743339313000c61e08746573743339313100c71e08746573743339313200c81e08746573" - "743339313300c91e0874" - "6573743339313400ca1e08746573743339313500cb1e08746573743339313600cc1e08746573743339313700cd1e08" - "746573743339313800ce" - "1e08746573743339313900cf1e08746573743339323000d01e08746573743339323100d11e08746573743339323200" - "d21e0874657374333932" - "3300d31e08746573743339323400d41e08746573743339323500d51e08746573743339323600d61e08746573743339" - "323700d71e0874657374" - "3339323800d81e08746573743339323900d91e08746573743339333000da1e08746573743339333100db1e08746573" - "743339333200dc1e0874" - "6573743339333300dd1e08746573743339333400de1e08746573743339333500df1e08746573743339333600e01e08" - "746573743339333700e1" - "1e08746573743339333800e21e08746573743339333900e31e08746573743339343000e41e08746573743339343100" - "e51e0874657374333934" - "3200e61e08746573743339343300e71e08746573743339343400e81e08746573743339343500e91e08746573743339" - "343600ea1e0874657374" - "3339343700eb1e08746573743339343800ec1e08746573743339343900ed1e08746573743339353000ee1e08746573" - "743339353100ef1e0874" - "6573743339353200f01e08746573743339353300f11e08746573743339353400f21e08746573743339353500f31e08" - "746573743339353600f4" - "1e08746573743339353700f51e08746573743339353800f61e08746573743339353900f71e08746573743339363000" - "f81e0874657374333936" - "3100f91e08746573743339363200fa1e08746573743339363300fb1e08746573743339363400fc1e08746573743339" - "363500fd1e0874657374" - "3339363600fe1e08746573743339363700ff1e08746573743339363800801f08746573743339363900811f08746573" - "743339373000821f0874" - "6573743339373100831f08746573743339373200841f08746573743339373300851f08746573743339373400861f08" - "74657374333937350087" - "1f08746573743339373600881f08746573743339373700891f087465737433393738008a1f08746573743339373900" - "8b1f0874657374333938" - "30008c1f087465737433393831008d1f087465737433393832008e1f087465737433393833008f1f08746573743339" - "383400901f0874657374" - "3339383500911f08746573743339383600921f08746573743339383700931f08746573743339383800941f08746573" - "743339383900951f0874" - "6573743339393000961f08746573743339393100971f08746573743339393200981f08746573743339393300991f08" - "7465737433393934009a" - "1f087465737433393935009b1f087465737433393936009c1f087465737433393937009d1f08746573743339393800" - "9e1f0874657374333939" - "39009f1f08746573743430303000a01f08746573743430303100a11f08746573743430303200a21f08746573743430" - "303300a31f0874657374" - "3430303400a41f08746573743430303500a51f08746573743430303600a61f08746573743430303700a71f08746573" - "743430303800a81f0874" - "6573743430303900a91f08746573743430313000aa1f08746573743430313100ab1f08746573743430313200ac1f08" - "746573743430313300ad" - "1f08746573743430313400ae1f08746573743430313500af1f08746573743430313600b01f08746573743430313700" - "b11f0874657374343031" - "3800b21f08746573743430313900b31f08746573743430323000b41f08746573743430323100b51f08746573743430" - "323200b61f0874657374" - "3430323300b71f08746573743430323400b81f08746573743430323500b91f08746573743430323600ba1f08746573" - "743430323700bb1f0874" - "6573743430323800bc1f08746573743430323900bd1f08746573743430333000be1f08746573743430333100bf1f08" - "746573743430333200c0" - "1f08746573743430333300c11f08746573743430333400c21f08746573743430333500c31f08746573743430333600" - "c41f0874657374343033" - "3700c51f08746573743430333800c61f08746573743430333900c71f08746573743430343000c81f08746573743430" - "343100c91f0874657374" - "3430343200ca1f08746573743430343300cb1f08746573743430343400cc1f08746573743430343500cd1f08746573" - "743430343600ce1f0874" - "6573743430343700cf1f08746573743430343800d01f08746573743430343900d11f08746573743430353000d21f08" - "746573743430353100d3" - "1f08746573743430353200d41f08746573743430353300d51f08746573743430353400d61f08746573743430353500" - "d71f0874657374343035" + "743338333700fd1d08746573743338333800fe1d08746573743338333900ff1d08746573743338343000801e087465" + "73743338343100811e08746573743338343200821e08746573743338343300831e08746573743338343400841e0874" + "6573743338343500851e08746573743338343600861e08746573743338343700871e08746573743338343800881e08" + "746573743338343900891e087465737433383530008a1e087465737433383531008b1e087465737433383532008c1e" + "087465737433383533008d1e087465737433383534008e1e087465737433383535008f1e0874657374333835360090" + "1e08746573743338353700911e08746573743338353800921e08746573743338353900931e08746573743338363000" + "941e08746573743338363100951e08746573743338363200961e08746573743338363300971e087465737433383634" + "00981e08746573743338363500991e087465737433383636009a1e087465737433383637009b1e0874657374333836" + "38009c1e087465737433383639009d1e087465737433383730009e1e087465737433383731009f1e08746573743338" + "373200a01e08746573743338373300a11e08746573743338373400a21e08746573743338373500a31e087465737433" + "38373600a41e08746573743338373700a51e08746573743338373800a61e08746573743338373900a71e0874657374" + "3338383000a81e08746573743338383100a91e08746573743338383200aa1e08746573743338383300ab1e08746573" + "743338383400ac1e08746573743338383500ad1e08746573743338383600ae1e08746573743338383700af1e087465" + "73743338383800b01e08746573743338383900b11e08746573743338393000b21e08746573743338393100b31e0874" + "6573743338393200b41e08746573743338393300b51e08746573743338393400b61e08746573743338393500b71e08" + "746573743338393600b81e08746573743338393700b91e08746573743338393800ba1e08746573743338393900bb1e" + "08746573743339303000bc1e08746573743339303100bd1e08746573743339303200be1e08746573743339303300bf" + "1e08746573743339303400c01e08746573743339303500c11e08746573743339303600c21e08746573743339303700" + "c31e08746573743339303800c41e08746573743339303900c51e08746573743339313000c61e087465737433393131" + "00c71e08746573743339313200c81e08746573743339313300c91e08746573743339313400ca1e0874657374333931" + "3500cb1e08746573743339313600cc1e08746573743339313700cd1e08746573743339313800ce1e08746573743339" + "313900cf1e08746573743339323000d01e08746573743339323100d11e08746573743339323200d21e087465737433" + "39323300d31e08746573743339323400d41e08746573743339323500d51e08746573743339323600d61e0874657374" + "3339323700d71e08746573743339323800d81e08746573743339323900d91e08746573743339333000da1e08746573" + "743339333100db1e08746573743339333200dc1e08746573743339333300dd1e08746573743339333400de1e087465" + "73743339333500df1e08746573743339333600e01e08746573743339333700e11e08746573743339333800e21e0874" + "6573743339333900e31e08746573743339343000e41e08746573743339343100e51e08746573743339343200e61e08" + "746573743339343300e71e08746573743339343400e81e08746573743339343500e91e08746573743339343600ea1e" + "08746573743339343700eb1e08746573743339343800ec1e08746573743339343900ed1e08746573743339353000ee" + "1e08746573743339353100ef1e08746573743339353200f01e08746573743339353300f11e08746573743339353400" + "f21e08746573743339353500f31e08746573743339353600f41e08746573743339353700f51e087465737433393538" + "00f61e08746573743339353900f71e08746573743339363000f81e08746573743339363100f91e0874657374333936" + "3200fa1e08746573743339363300fb1e08746573743339363400fc1e08746573743339363500fd1e08746573743339" + "363600fe1e08746573743339363700ff1e08746573743339363800801f08746573743339363900811f087465737433" + "39373000821f08746573743339373100831f08746573743339373200841f08746573743339373300851f0874657374" + "3339373400861f08746573743339373500871f08746573743339373600881f08746573743339373700891f08746573" + "7433393738008a1f087465737433393739008b1f087465737433393830008c1f087465737433393831008d1f087465" + "737433393832008e1f087465737433393833008f1f08746573743339383400901f08746573743339383500911f0874" + "6573743339383600921f08746573743339383700931f08746573743339383800941f08746573743339383900951f08" + "746573743339393000961f08746573743339393100971f08746573743339393200981f08746573743339393300991f" + "087465737433393934009a1f087465737433393935009b1f087465737433393936009c1f087465737433393937009d" + "1f087465737433393938009e1f087465737433393939009f1f08746573743430303000a01f08746573743430303100" + "a11f08746573743430303200a21f08746573743430303300a31f08746573743430303400a41f087465737434303035" + "00a51f08746573743430303600a61f08746573743430303700a71f08746573743430303800a81f0874657374343030" + "3900a91f08746573743430313000aa1f08746573743430313100ab1f08746573743430313200ac1f08746573743430" + "313300ad1f08746573743430313400ae1f08746573743430313500af1f08746573743430313600b01f087465737434" + "30313700b11f08746573743430313800b21f08746573743430313900b31f08746573743430323000b41f0874657374" + "3430323100b51f08746573743430323200b61f08746573743430323300b71f08746573743430323400b81f08746573" + "743430323500b91f08746573743430323600ba1f08746573743430323700bb1f08746573743430323800bc1f087465" + "73743430323900bd1f08746573743430333000be1f08746573743430333100bf1f08746573743430333200c01f0874" + "6573743430333300c11f08746573743430333400c21f08746573743430333500c31f08746573743430333600c41f08" + "746573743430333700c51f08746573743430333800c61f08746573743430333900c71f08746573743430343000c81f" + "08746573743430343100c91f08746573743430343200ca1f08746573743430343300cb1f08746573743430343400cc" + "1f08746573743430343500cd1f08746573743430343600ce1f08746573743430343700cf1f08746573743430343800" + "d01f08746573743430343900d11f08746573743430353000d21f08746573743430353100d31f087465737434303532" + "00d41f08746573743430353300d51f08746573743430353400d61f08746573743430353500d71f0874657374343035" "3600d81f08746573743430353700d91f08746573743430353800da1f08746573743430353900db1f08746573743430" - "363000dc1f0874657374" - "3430363100dd1f08746573743430363200de1f08746573743430363300df1f08746573743430363400e01f08746573" - "743430363500e11f0874" - "6573743430363600e21f08746573743430363700e31f08746573743430363800e41f08746573743430363900e51f08" - "746573743430373000e6" - "1f08746573743430373100e71f08746573743430373200e81f08746573743430373300e91f08746573743430373400" - "ea1f0874657374343037" - "3500eb1f08746573743430373600ec1f08746573743430373700ed1f08746573743430373800ee1f08746573743430" - "373900ef1f0874657374" - "3430383000f01f08746573743430383100f11f08746573743430383200f21f08746573743430383300f31f08746573" - "743430383400f41f0874" - "6573743430383500f51f08746573743430383600f61f08746573743430383700f71f08746573743430383800f81f08" - "746573743430383900f9" - "1f08746573743430393000fa1f08746573743430393100fb1f08746573743430393200fc1f08746573743430393300" - "fd1f0874657374343039" - "3400fe1f08746573743430393500ff1f08746573743430393600802008746573743430393700812008746573743430" - "39380082200874657374" - "3430393900832008746573743431303000842008746573743431303100852008746573743431303200862008746573" - "74343130330087200874" - "65737434313034008820087465737434313035008920087465737434313036008a20087465737434313037008b2008" - "7465737434313038008c" - "20087465737434313039008d20087465737434313130008e20087465737434313131008f2008746573743431313200" - "90200874657374343131" - "3300912008746573743431313400922008746573743431313500932008746573743431313600942008746573743431" - "31370095200874657374" - "3431313800962008746573743431313900972008746573743431323000982008746573743431323100992008746573" - "7434313232009a200874" - "65737434313233009b20087465737434313234009c20087465737434313235009d20087465737434313236009e2008" - "7465737434313237009f" - "2008746573743431323800a02008746573743431323900a12008746573743431333000a22008746573743431333100" - "a3200874657374343133" - "3200a42008746573743431333300a52008746573743431333400a62008746573743431333500a72008746573743431" - "333600a8200874657374" - "3431333700a92008746573743431333800aa2008746573743431333900ab2008746573743431343000ac2008746573" - "743431343100ad200874" - "6573743431343200ae2008746573743431343300af2008746573743431343400b02008746573743431343500b12008" - "746573743431343600b2" - "2008746573743431343700b32008746573743431343800b42008746573743431343900b52008746573743431353000" - "b6200874657374343135" - "3100b72008746573743431353200b82008746573743431353300b92008746573743431353400ba2008746573743431" - "353500bb200874657374" - "3431353600bc2008746573743431353700bd2008746573743431353800be2008746573743431353900bf2008746573" - "743431363000c0200874" - "6573743431363100c12008746573743431363200c22008746573743431363300c32008746573743431363400c42008" - "746573743431363500c5" - "2008746573743431363600c62008746573743431363700c72008746573743431363800c82008746573743431363900" - "c9200874657374343137" - "3000ca2008746573743431373100cb2008746573743431373200cc2008746573743431373300cd2008746573743431" - "373400ce200874657374" - "3431373500cf2008746573743431373600d02008746573743431373700d12008746573743431373800d22008746573" - "743431373900d3200874" - "6573743431383000d42008746573743431383100d52008746573743431383200d62008746573743431383300d72008" - "746573743431383400d8" - "2008746573743431383500d92008746573743431383600da2008746573743431383700db2008746573743431383800" - "dc200874657374343138" - "3900dd2008746573743431393000de2008746573743431393100df2008746573743431393200e02008746573743431" - "393300e1200874657374" - "3431393400e22008746573743431393500e32008746573743431393600e42008746573743431393700e52008746573" - "743431393800e6200874" - "6573743431393900e72008746573743432303000e82008746573743432303100e92008746573743432303200ea2008" - "746573743432303300eb" - "2008746573743432303400ec2008746573743432303500ed2008746573743432303600ee2008746573743432303700" - "ef200874657374343230" - "3800f02008746573743432303900f12008746573743432313000f22008746573743432313100f32008746573743432" - "313200f4200874657374" - "3432313300f52008746573743432313400f62008746573743432313500f72008746573743432313600f82008746573" - "743432313700f9200874" - "6573743432313800fa2008746573743432313900fb2008746573743432323000fc2008746573743432323100fd2008" - "746573743432323200fe" - "2008746573743432323300ff2008746573743432323400802108746573743432323500812108746573743432323600" - "82210874657374343232" - "3700832108746573743432323800842108746573743432323900852108746573743432333000862108746573743432" - "33310087210874657374" - "34323332008821087465737434323333008921087465737434323334008a21087465737434323335008b2108746573" - "7434323336008c210874" - "65737434323337008d21087465737434323338008e21087465737434323339008f2108746573743432343000902108" - "74657374343234310091" - "2108746573743432343200922108746573743432343300932108746573743432343400942108746573743432343500" - "95210874657374343234" - "3600962108746573743432343700972108746573743432343800982108746573743432343900992108746573743432" - "3530009a210874657374" - "34323531009b21087465737434323532009c21087465737434323533009d21087465737434323534009e2108746573" - "7434323535009f210874" - "6573743432353600a02108746573743432353700a12108746573743432353800a22108746573743432353900a32108" - "746573743432363000a4" - "2108746573743432363100a52108746573743432363200a62108746573743432363300a72108746573743432363400" - "a8210874657374343236" - "3500a92108746573743432363600aa2108746573743432363700ab2108746573743432363800ac2108746573743432" - "363900ad210874657374" - "3432373000ae2108746573743432373100af2108746573743432373200b02108746573743432373300b12108746573" - "743432373400b2210874" - "6573743432373500b32108746573743432373600b42108746573743432373700b52108746573743432373800b62108" - "746573743432373900b7" + "363000dc1f08746573743430363100dd1f08746573743430363200de1f08746573743430363300df1f087465737434" + "30363400e01f08746573743430363500e11f08746573743430363600e21f08746573743430363700e31f0874657374" + "3430363800e41f08746573743430363900e51f08746573743430373000e61f08746573743430373100e71f08746573" + "743430373200e81f08746573743430373300e91f08746573743430373400ea1f08746573743430373500eb1f087465" + "73743430373600ec1f08746573743430373700ed1f08746573743430373800ee1f08746573743430373900ef1f0874" + "6573743430383000f01f08746573743430383100f11f08746573743430383200f21f08746573743430383300f31f08" + "746573743430383400f41f08746573743430383500f51f08746573743430383600f61f08746573743430383700f71f" + "08746573743430383800f81f08746573743430383900f91f08746573743430393000fa1f08746573743430393100fb" + "1f08746573743430393200fc1f08746573743430393300fd1f08746573743430393400fe1f08746573743430393500" + "ff1f087465737434303936008020087465737434303937008120087465737434303938008220087465737434303939" + "0083200874657374343130300084200874657374343130310085200874657374343130320086200874657374343130" + "33008720087465737434313034008820087465737434313035008920087465737434313036008a2008746573743431" + "3037008b20087465737434313038008c20087465737434313039008d20087465737434313130008e20087465737434" + "313131008f200874657374343131320090200874657374343131330091200874657374343131340092200874657374" + "3431313500932008746573743431313600942008746573743431313700952008746573743431313800962008746573" + "7434313139009720087465737434313230009820087465737434313231009920087465737434313232009a20087465" + "737434313233009b20087465737434313234009c20087465737434313235009d20087465737434313236009e200874" + "65737434313237009f2008746573743431323800a02008746573743431323900a12008746573743431333000a22008" + "746573743431333100a32008746573743431333200a42008746573743431333300a52008746573743431333400a620" + "08746573743431333500a72008746573743431333600a82008746573743431333700a92008746573743431333800aa" + "2008746573743431333900ab2008746573743431343000ac2008746573743431343100ad2008746573743431343200" + "ae2008746573743431343300af2008746573743431343400b02008746573743431343500b120087465737434313436" + "00b22008746573743431343700b32008746573743431343800b42008746573743431343900b5200874657374343135" + "3000b62008746573743431353100b72008746573743431353200b82008746573743431353300b92008746573743431" + "353400ba2008746573743431353500bb2008746573743431353600bc2008746573743431353700bd20087465737434" + "31353800be2008746573743431353900bf2008746573743431363000c02008746573743431363100c1200874657374" + "3431363200c22008746573743431363300c32008746573743431363400c42008746573743431363500c52008746573" + "743431363600c62008746573743431363700c72008746573743431363800c82008746573743431363900c920087465" + "73743431373000ca2008746573743431373100cb2008746573743431373200cc2008746573743431373300cd200874" + "6573743431373400ce2008746573743431373500cf2008746573743431373600d02008746573743431373700d12008" + "746573743431373800d22008746573743431373900d32008746573743431383000d42008746573743431383100d520" + "08746573743431383200d62008746573743431383300d72008746573743431383400d82008746573743431383500d9" + "2008746573743431383600da2008746573743431383700db2008746573743431383800dc2008746573743431383900" + "dd2008746573743431393000de2008746573743431393100df2008746573743431393200e020087465737434313933" + "00e12008746573743431393400e22008746573743431393500e32008746573743431393600e4200874657374343139" + "3700e52008746573743431393800e62008746573743431393900e72008746573743432303000e82008746573743432" + "303100e92008746573743432303200ea2008746573743432303300eb2008746573743432303400ec20087465737434" + "32303500ed2008746573743432303600ee2008746573743432303700ef2008746573743432303800f0200874657374" + "3432303900f12008746573743432313000f22008746573743432313100f32008746573743432313200f42008746573" + "743432313300f52008746573743432313400f62008746573743432313500f72008746573743432313600f820087465" + "73743432313700f92008746573743432313800fa2008746573743432313900fb2008746573743432323000fc200874" + "6573743432323100fd2008746573743432323200fe2008746573743432323300ff2008746573743432323400802108" + "7465737434323235008121087465737434323236008221087465737434323237008321087465737434323238008421" + "0874657374343232390085210874657374343233300086210874657374343233310087210874657374343233320088" + "21087465737434323333008921087465737434323334008a21087465737434323335008b2108746573743432333600" + "8c21087465737434323337008d21087465737434323338008e21087465737434323339008f21087465737434323430" + "0090210874657374343234310091210874657374343234320092210874657374343234330093210874657374343234" + "3400942108746573743432343500952108746573743432343600962108746573743432343700972108746573743432" + "3438009821087465737434323439009921087465737434323530009a21087465737434323531009b21087465737434" + "323532009c21087465737434323533009d21087465737434323534009e21087465737434323535009f210874657374" + "3432353600a02108746573743432353700a12108746573743432353800a22108746573743432353900a32108746573" + "743432363000a42108746573743432363100a52108746573743432363200a62108746573743432363300a721087465" + "73743432363400a82108746573743432363500a92108746573743432363600aa2108746573743432363700ab210874" + "6573743432363800ac2108746573743432363900ad2108746573743432373000ae2108746573743432373100af2108" + "746573743432373200b02108746573743432373300b12108746573743432373400b22108746573743432373500b321" + "08746573743432373600b42108746573743432373700b52108746573743432373800b62108746573743432373900b7" "2108746573743432383000b82108746573743432383100b92108746573743432383200ba2108746573743432383300" - "bb210874657374343238" - "3400bc2108746573743432383500bd2108746573743432383600be2108746573743432383700bf2108746573743432" - "383800c0210874657374" - "3432383900c12108746573743432393000c22108746573743432393100c32108746573743432393200c42108746573" - "743432393300c5210874" - "6573743432393400c62108746573743432393500c72108746573743432393600c82108746573743432393700c92108" - "746573743432393800ca" - "2108746573743432393900cb2108746573743433303000cc2108746573743433303100cd2108746573743433303200" - "ce210874657374343330" - "3300cf2108746573743433303400d02108746573743433303500d12108746573743433303600d22108746573743433" - "303700d3210874657374" - "3433303800d42108746573743433303900d52108746573743433313000d62108746573743433313100d72108746573" - "743433313200d8210874" - "6573743433313300d92108746573743433313400da2108746573743433313500db2108746573743433313600dc2108" - "746573743433313700dd" - "2108746573743433313800de2108746573743433313900df2108746573743433323000e02108746573743433323100" - "e1210874657374343332" - "3200e22108746573743433323300e32108746573743433323400e42108746573743433323500e52108746573743433" - "323600e6210874657374" - "3433323700e72108746573743433323800e82108746573743433323900e92108746573743433333000ea2108746573" - "743433333100eb210874" - "6573743433333200ec2108746573743433333300ed2108746573743433333400ee2108746573743433333500ef2108" - "746573743433333600f0" - "2108746573743433333700f12108746573743433333800f22108746573743433333900f32108746573743433343000" - "f4210874657374343334" - "3100f52108746573743433343200f62108746573743433343300f72108746573743433343400f82108746573743433" - "343500f9210874657374" - "3433343600fa2108746573743433343700fb2108746573743433343800fc2108746573743433343900fd2108746573" - "743433353000fe210874" - "6573743433353100ff2108746573743433353200802208746573743433353300812208746573743433353400822208" - "74657374343335350083" - "2208746573743433353600842208746573743433353700852208746573743433353800862208746573743433353900" - "87220874657374343336" - "30008822087465737434333631008922087465737434333632008a22087465737434333633008b2208746573743433" - "3634008c220874657374" - "34333635008d22087465737434333636008e22087465737434333637008f2208746573743433363800902208746573" - "74343336390091220874" - "6573743433373000922208746573743433373100932208746573743433373200942208746573743433373300952208" - "74657374343337340096" - "2208746573743433373500972208746573743433373600982208746573743433373700992208746573743433373800" - "9a220874657374343337" - "39009b22087465737434333830009c22087465737434333831009d22087465737434333832009e2208746573743433" - "3833009f220874657374" - "3433383400a02208746573743433383500a12208746573743433383600a22208746573743433383700a32208746573" - "743433383800a4220874" - "6573743433383900a52208746573743433393000a62208746573743433393100a72208746573743433393200a82208" - "746573743433393300a9" - "2208746573743433393400aa2208746573743433393500ab2208746573743433393600ac2208746573743433393700" - "ad220874657374343339" - "3800ae2208746573743433393900af2208746573743434303000b02208746573743434303100b12208746573743434" - "303200b2220874657374" - "3434303300b32208746573743434303400b42208746573743434303500b52208746573743434303600b62208746573" - "743434303700b7220874" - "6573743434303800b82208746573743434303900b92208746573743434313000ba2208746573743434313100bb2208" - "746573743434313200bc" - "2208746573743434313300bd2208746573743434313400be2208746573743434313500bf2208746573743434313600" - "c0220874657374343431" - "3700c12208746573743434313800c22208746573743434313900c32208746573743434323000c42208746573743434" - "323100c5220874657374" - "3434323200c62208746573743434323300c72208746573743434323400c82208746573743434323500c92208746573" - "743434323600ca220874" - "6573743434323700cb2208746573743434323800cc2208746573743434323900cd2208746573743434333000ce2208" - "746573743434333100cf" - "2208746573743434333200d02208746573743434333300d12208746573743434333400d22208746573743434333500" - "d3220874657374343433" - "3600d42208746573743434333700d52208746573743434333800d62208746573743434333900d72208746573743434" - "343000d8220874657374" - "3434343100d92208746573743434343200da2208746573743434343300db2208746573743434343400dc2208746573" - "743434343500dd220874" - "6573743434343600de2208746573743434343700df2208746573743434343800e02208746573743434343900e12208" - "746573743434353000e2" - "2208746573743434353100e32208746573743434353200e42208746573743434353300e52208746573743434353400" - "e6220874657374343435" - "3500e72208746573743434353600e82208746573743434353700e92208746573743434353800ea2208746573743434" - "353900eb220874657374" - "3434363000ec2208746573743434363100ed2208746573743434363200ee2208746573743434363300ef2208746573" - "743434363400f0220874" - "6573743434363500f12208746573743434363600f22208746573743434363700f32208746573743434363800f42208" - "746573743434363900f5" - "2208746573743434373000f62208746573743434373100f72208746573743434373200f82208746573743434373300" - "f9220874657374343437" - "3400fa2208746573743434373500fb2208746573743434373600fc2208746573743434373700fd2208746573743434" - "373800fe220874657374" - "3434373900ff2208746573743434383000802308746573743434383100812308746573743434383200822308746573" - "74343438330083230874" - "6573743434383400842308746573743434383500852308746573743434383600862308746573743434383700872308" - "74657374343438380088" - "23087465737434343839008923087465737434343930008a23087465737434343931008b2308746573743434393200" - "8c230874657374343439" - "33008d23087465737434343934008e23087465737434343935008f2308746573743434393600902308746573743434" - "39370091230874657374" - "3434393800922308746573743434393900932308746573743435303000942308746573743435303100952308746573" - "74343530320096230874" + "bb2108746573743432383400bc2108746573743432383500bd2108746573743432383600be21087465737434323837" + "00bf2108746573743432383800c02108746573743432383900c12108746573743432393000c2210874657374343239" + "3100c32108746573743432393200c42108746573743432393300c52108746573743432393400c62108746573743432" + "393500c72108746573743432393600c82108746573743432393700c92108746573743432393800ca21087465737434" + "32393900cb2108746573743433303000cc2108746573743433303100cd2108746573743433303200ce210874657374" + "3433303300cf2108746573743433303400d02108746573743433303500d12108746573743433303600d22108746573" + "743433303700d32108746573743433303800d42108746573743433303900d52108746573743433313000d621087465" + "73743433313100d72108746573743433313200d82108746573743433313300d92108746573743433313400da210874" + "6573743433313500db2108746573743433313600dc2108746573743433313700dd2108746573743433313800de2108" + "746573743433313900df2108746573743433323000e02108746573743433323100e12108746573743433323200e221" + "08746573743433323300e32108746573743433323400e42108746573743433323500e52108746573743433323600e6" + "2108746573743433323700e72108746573743433323800e82108746573743433323900e92108746573743433333000" + "ea2108746573743433333100eb2108746573743433333200ec2108746573743433333300ed21087465737434333334" + "00ee2108746573743433333500ef2108746573743433333600f02108746573743433333700f1210874657374343333" + "3800f22108746573743433333900f32108746573743433343000f42108746573743433343100f52108746573743433" + "343200f62108746573743433343300f72108746573743433343400f82108746573743433343500f921087465737434" + "33343600fa2108746573743433343700fb2108746573743433343800fc2108746573743433343900fd210874657374" + "3433353000fe2108746573743433353100ff2108746573743433353200802208746573743433353300812208746573" + "7434333534008222087465737434333535008322087465737434333536008422087465737434333537008522087465" + "7374343335380086220874657374343335390087220874657374343336300088220874657374343336310089220874" + "65737434333632008a22087465737434333633008b22087465737434333634008c22087465737434333635008d2208" + "7465737434333636008e22087465737434333637008f22087465737434333638009022087465737434333639009122" + "0874657374343337300092220874657374343337310093220874657374343337320094220874657374343337330095" + "2208746573743433373400962208746573743433373500972208746573743433373600982208746573743433373700" + "9922087465737434333738009a22087465737434333739009b22087465737434333830009c22087465737434333831" + "009d22087465737434333832009e22087465737434333833009f2208746573743433383400a0220874657374343338" + "3500a12208746573743433383600a22208746573743433383700a32208746573743433383800a42208746573743433" + "383900a52208746573743433393000a62208746573743433393100a72208746573743433393200a822087465737434" + "33393300a92208746573743433393400aa2208746573743433393500ab2208746573743433393600ac220874657374" + "3433393700ad2208746573743433393800ae2208746573743433393900af2208746573743434303000b02208746573" + "743434303100b12208746573743434303200b22208746573743434303300b32208746573743434303400b422087465" + "73743434303500b52208746573743434303600b62208746573743434303700b72208746573743434303800b8220874" + "6573743434303900b92208746573743434313000ba2208746573743434313100bb2208746573743434313200bc2208" + "746573743434313300bd2208746573743434313400be2208746573743434313500bf2208746573743434313600c022" + "08746573743434313700c12208746573743434313800c22208746573743434313900c32208746573743434323000c4" + "2208746573743434323100c52208746573743434323200c62208746573743434323300c72208746573743434323400" + "c82208746573743434323500c92208746573743434323600ca2208746573743434323700cb22087465737434343238" + "00cc2208746573743434323900cd2208746573743434333000ce2208746573743434333100cf220874657374343433" + "3200d02208746573743434333300d12208746573743434333400d22208746573743434333500d32208746573743434" + "333600d42208746573743434333700d52208746573743434333800d62208746573743434333900d722087465737434" + "34343000d82208746573743434343100d92208746573743434343200da2208746573743434343300db220874657374" + "3434343400dc2208746573743434343500dd2208746573743434343600de2208746573743434343700df2208746573" + "743434343800e02208746573743434343900e12208746573743434353000e22208746573743434353100e322087465" + "73743434353200e42208746573743434353300e52208746573743434353400e62208746573743434353500e7220874" + "6573743434353600e82208746573743434353700e92208746573743434353800ea2208746573743434353900eb2208" + "746573743434363000ec2208746573743434363100ed2208746573743434363200ee2208746573743434363300ef22" + "08746573743434363400f02208746573743434363500f12208746573743434363600f22208746573743434363700f3" + "2208746573743434363800f42208746573743434363900f52208746573743434373000f62208746573743434373100" + "f72208746573743434373200f82208746573743434373300f92208746573743434373400fa22087465737434343735" + "00fb2208746573743434373600fc2208746573743434373700fd2208746573743434373800fe220874657374343437" + "3900ff2208746573743434383000802308746573743434383100812308746573743434383200822308746573743434" + "3833008323087465737434343834008423087465737434343835008523087465737434343836008623087465737434" + "343837008723087465737434343838008823087465737434343839008923087465737434343930008a230874657374" + "34343931008b23087465737434343932008c23087465737434343933008d23087465737434343934008e2308746573" + "7434343935008f23087465737434343936009023087465737434343937009123087465737434343938009223087465" + "7374343439390093230874657374343530300094230874657374343530310095230874657374343530320096230874" "65737434353033009723087465737434353034009823087465737434353035009923087465737434353036009a2308" - "7465737434353037009b" - "23087465737434353038009c23087465737434353039009d23087465737434353130009e2308746573743435313100" - "9f230874657374343531" - "3200a02308746573743435313300a12308746573743435313400a22308746573743435313500a32308746573743435" - "313600a4230874657374" - "3435313700a52308746573743435313800a62308746573743435313900a72308746573743435323000a82308746573" - "743435323100a9230874" - "6573743435323200aa2308746573743435323300ab2308746573743435323400ac2308746573743435323500ad2308" - "746573743435323600ae" - "2308746573743435323700af2308746573743435323800b02308746573743435323900b12308746573743435333000" - "b2230874657374343533" - "3100b32308746573743435333200b42308746573743435333300b52308746573743435333400b62308746573743435" - "333500b7230874657374" - "3435333600b82308746573743435333700b92308746573743435333800ba2308746573743435333900bb2308746573" - "743435343000bc230874" - "6573743435343100bd2308746573743435343200be2308746573743435343300bf2308746573743435343400c02308" - "746573743435343500c1" - "2308746573743435343600c22308746573743435343700c32308746573743435343800c42308746573743435343900" - "c5230874657374343535" - "3000c62308746573743435353100c72308746573743435353200c82308746573743435353300c92308746573743435" - "353400ca230874657374" - "3435353500cb2308746573743435353600cc2308746573743435353700cd2308746573743435353800ce2308746573" - "743435353900cf230874" - "6573743435363000d02308746573743435363100d12308746573743435363200d22308746573743435363300d32308" - "746573743435363400d4" - "2308746573743435363500d52308746573743435363600d62308746573743435363700d72308746573743435363800" - "d8230874657374343536" - "3900d92308746573743435373000da2308746573743435373100db2308746573743435373200dc2308746573743435" - "373300dd230874657374" - "3435373400de2308746573743435373500df2308746573743435373600e02308746573743435373700e12308746573" - "743435373800e2230874" - "6573743435373900e32308746573743435383000e42308746573743435383100e52308746573743435383200e62308" - "746573743435383300e7" - "2308746573743435383400e82308746573743435383500e92308746573743435383600ea2308746573743435383700" - "eb230874657374343538" - "3800ec2308746573743435383900ed2308746573743435393000ee2308746573743435393100ef2308746573743435" - "393200f0230874657374" - "3435393300f12308746573743435393400f22308746573743435393500f32308746573743435393600f42308746573" - "743435393700f5230874" - "6573743435393800f62308746573743435393900f72308746573743436303000f82308746573743436303100f92308" - "746573743436303200fa" - "2308746573743436303300fb2308746573743436303400fc2308746573743436303500fd2308746573743436303600" - "fe230874657374343630" - "3700ff2308746573743436303800802408746573743436303900812408746573743436313000822408746573743436" - "31310083240874657374" - "3436313200842408746573743436313300852408746573743436313400862408746573743436313500872408746573" - "74343631360088240874" - "65737434363137008924087465737434363138008a24087465737434363139008b24087465737434363230008c2408" - "7465737434363231008d" - "24087465737434363232008e24087465737434363233008f2408746573743436323400902408746573743436323500" - "91240874657374343632" - "3600922408746573743436323700932408746573743436323800942408746573743436323900952408746573743436" - "33300096240874657374" - "34363331009724087465737434363332009824087465737434363333009924087465737434363334009a2408746573" - "7434363335009b240874" - "65737434363336009c24087465737434363337009d24087465737434363338009e24087465737434363339009f2408" - "746573743436343000a0" - "2408746573743436343100a12408746573743436343200a22408746573743436343300a32408746573743436343400" - "a4240874657374343634" - "3500a52408746573743436343600a62408746573743436343700a72408746573743436343800a82408746573743436" - "343900a9240874657374" - "3436353000aa2408746573743436353100ab2408746573743436353200ac2408746573743436353300ad2408746573" - "743436353400ae240874" - "6573743436353500af2408746573743436353600b02408746573743436353700b12408746573743436353800b22408" - "746573743436353900b3" - "2408746573743436363000b42408746573743436363100b52408746573743436363200b62408746573743436363300" - "b7240874657374343636" - "3400b82408746573743436363500b92408746573743436363600ba2408746573743436363700bb2408746573743436" - "363800bc240874657374" - "3436363900bd2408746573743436373000be2408746573743436373100bf2408746573743436373200c02408746573" - "743436373300c1240874" - "6573743436373400c22408746573743436373500c32408746573743436373600c42408746573743436373700c52408" - "746573743436373800c6" - "2408746573743436373900c72408746573743436383000c82408746573743436383100c92408746573743436383200" - "ca240874657374343638" - "3300cb2408746573743436383400cc2408746573743436383500cd2408746573743436383600ce2408746573743436" - "383700cf240874657374" - "3436383800d02408746573743436383900d12408746573743436393000d22408746573743436393100d32408746573" - "743436393200d4240874" - "6573743436393300d52408746573743436393400d62408746573743436393500d72408746573743436393600d82408" - "746573743436393700d9" - "2408746573743436393800da2408746573743436393900db2408746573743437303000dc2408746573743437303100" - "dd240874657374343730" - "3200de2408746573743437303300df2408746573743437303400e02408746573743437303500e12408746573743437" - "303600e2240874657374" - "3437303700e32408746573743437303800e42408746573743437303900e52408746573743437313000e62408746573" - "743437313100e7240874" - "6573743437313200e82408746573743437313300e92408746573743437313400ea2408746573743437313500eb2408" - "746573743437313600ec" - "2408746573743437313700ed2408746573743437313800ee2408746573743437313900ef2408746573743437323000" - "f0240874657374343732" - "3100f12408746573743437323200f22408746573743437323300f32408746573743437323400f42408746573743437" - "323500f5240874657374" + "7465737434353037009b23087465737434353038009c23087465737434353039009d23087465737434353130009e23" + "087465737434353131009f2308746573743435313200a02308746573743435313300a12308746573743435313400a2" + "2308746573743435313500a32308746573743435313600a42308746573743435313700a52308746573743435313800" + "a62308746573743435313900a72308746573743435323000a82308746573743435323100a923087465737434353232" + "00aa2308746573743435323300ab2308746573743435323400ac2308746573743435323500ad230874657374343532" + "3600ae2308746573743435323700af2308746573743435323800b02308746573743435323900b12308746573743435" + "333000b22308746573743435333100b32308746573743435333200b42308746573743435333300b523087465737434" + "35333400b62308746573743435333500b72308746573743435333600b82308746573743435333700b9230874657374" + "3435333800ba2308746573743435333900bb2308746573743435343000bc2308746573743435343100bd2308746573" + "743435343200be2308746573743435343300bf2308746573743435343400c02308746573743435343500c123087465" + "73743435343600c22308746573743435343700c32308746573743435343800c42308746573743435343900c5230874" + "6573743435353000c62308746573743435353100c72308746573743435353200c82308746573743435353300c92308" + "746573743435353400ca2308746573743435353500cb2308746573743435353600cc2308746573743435353700cd23" + "08746573743435353800ce2308746573743435353900cf2308746573743435363000d02308746573743435363100d1" + "2308746573743435363200d22308746573743435363300d32308746573743435363400d42308746573743435363500" + "d52308746573743435363600d62308746573743435363700d72308746573743435363800d823087465737434353639" + "00d92308746573743435373000da2308746573743435373100db2308746573743435373200dc230874657374343537" + "3300dd2308746573743435373400de2308746573743435373500df2308746573743435373600e02308746573743435" + "373700e12308746573743435373800e22308746573743435373900e32308746573743435383000e423087465737434" + "35383100e52308746573743435383200e62308746573743435383300e72308746573743435383400e8230874657374" + "3435383500e92308746573743435383600ea2308746573743435383700eb2308746573743435383800ec2308746573" + "743435383900ed2308746573743435393000ee2308746573743435393100ef2308746573743435393200f023087465" + "73743435393300f12308746573743435393400f22308746573743435393500f32308746573743435393600f4230874" + "6573743435393700f52308746573743435393800f62308746573743435393900f72308746573743436303000f82308" + "746573743436303100f92308746573743436303200fa2308746573743436303300fb2308746573743436303400fc23" + "08746573743436303500fd2308746573743436303600fe2308746573743436303700ff230874657374343630380080" + "2408746573743436303900812408746573743436313000822408746573743436313100832408746573743436313200" + "8424087465737434363133008524087465737434363134008624087465737434363135008724087465737434363136" + "008824087465737434363137008924087465737434363138008a24087465737434363139008b240874657374343632" + "30008c24087465737434363231008d24087465737434363232008e24087465737434363233008f2408746573743436" + "3234009024087465737434363235009124087465737434363236009224087465737434363237009324087465737434" + "3632380094240874657374343632390095240874657374343633300096240874657374343633310097240874657374" + "34363332009824087465737434363333009924087465737434363334009a24087465737434363335009b2408746573" + "7434363336009c24087465737434363337009d24087465737434363338009e24087465737434363339009f24087465" + "73743436343000a02408746573743436343100a12408746573743436343200a22408746573743436343300a3240874" + "6573743436343400a42408746573743436343500a52408746573743436343600a62408746573743436343700a72408" + "746573743436343800a82408746573743436343900a92408746573743436353000aa2408746573743436353100ab24" + "08746573743436353200ac2408746573743436353300ad2408746573743436353400ae2408746573743436353500af" + "2408746573743436353600b02408746573743436353700b12408746573743436353800b22408746573743436353900" + "b32408746573743436363000b42408746573743436363100b52408746573743436363200b624087465737434363633" + "00b72408746573743436363400b82408746573743436363500b92408746573743436363600ba240874657374343636" + "3700bb2408746573743436363800bc2408746573743436363900bd2408746573743436373000be2408746573743436" + "373100bf2408746573743436373200c02408746573743436373300c12408746573743436373400c224087465737434" + "36373500c32408746573743436373600c42408746573743436373700c52408746573743436373800c6240874657374" + "3436373900c72408746573743436383000c82408746573743436383100c92408746573743436383200ca2408746573" + "743436383300cb2408746573743436383400cc2408746573743436383500cd2408746573743436383600ce24087465" + "73743436383700cf2408746573743436383800d02408746573743436383900d12408746573743436393000d2240874" + "6573743436393100d32408746573743436393200d42408746573743436393300d52408746573743436393400d62408" + "746573743436393500d72408746573743436393600d82408746573743436393700d92408746573743436393800da24" + "08746573743436393900db2408746573743437303000dc2408746573743437303100dd2408746573743437303200de" + "2408746573743437303300df2408746573743437303400e02408746573743437303500e12408746573743437303600" + "e22408746573743437303700e32408746573743437303800e42408746573743437303900e524087465737434373130" + "00e62408746573743437313100e72408746573743437313200e82408746573743437313300e9240874657374343731" + "3400ea2408746573743437313500eb2408746573743437313600ec2408746573743437313700ed2408746573743437" + "313800ee2408746573743437313900ef2408746573743437323000f02408746573743437323100f124087465737434" + "37323200f22408746573743437323300f32408746573743437323400f42408746573743437323500f5240874657374" "3437323600f62408746573743437323700f72408746573743437323800f82408746573743437323900f92408746573" - "743437333000fa240874" - "6573743437333100fb2408746573743437333200fc2408746573743437333300fd2408746573743437333400fe2408" - "746573743437333500ff" - "2408746573743437333600802508746573743437333700812508746573743437333800822508746573743437333900" - "83250874657374343734" - "3000842508746573743437343100852508746573743437343200862508746573743437343300872508746573743437" - "34340088250874657374" - "34373435008925087465737434373436008a25087465737434373437008b25087465737434373438008c2508746573" - "7434373439008d250874" - "65737434373530008e25087465737434373531008f2508746573743437353200902508746573743437353300912508" - "74657374343735340092" - "2508746573743437353500932508746573743437353600942508746573743437353700952508746573743437353800" - "96250874657374343735" - "39009725087465737434373630009825087465737434373631009925087465737434373632009a2508746573743437" - "3633009b250874657374" - "34373634009c25087465737434373635009d25087465737434373636009e25087465737434373637009f2508746573" - "743437363800a0250874" - "6573743437363900a12508746573743437373000a22508746573743437373100a32508746573743437373200a42508" - "746573743437373300a5" - "2508746573743437373400a62508746573743437373500a72508746573743437373600a82508746573743437373700" - "a9250874657374343737" - "3800aa2508746573743437373900ab2508746573743437383000ac2508746573743437383100ad2508746573743437" - "383200ae250874657374" - "3437383300af2508746573743437383400b02508746573743437383500b12508746573743437383600b22508746573" - "743437383700b3250874" - "6573743437383800b42508746573743437383900b52508746573743437393000b62508746573743437393100b72508" - "746573743437393200b8" - "2508746573743437393300b92508746573743437393400ba2508746573743437393500bb2508746573743437393600" - "bc250874657374343739" - "3700bd2508746573743437393800be2508746573743437393900bf2508746573743438303000c02508746573743438" - "303100c1250874657374" - "3438303200c22508746573743438303300c32508746573743438303400c42508746573743438303500c52508746573" - "743438303600c6250874" - "6573743438303700c72508746573743438303800c82508746573743438303900c92508746573743438313000ca2508" - "746573743438313100cb" - "2508746573743438313200cc2508746573743438313300cd2508746573743438313400ce2508746573743438313500" - "cf250874657374343831" - "3600d02508746573743438313700d12508746573743438313800d22508746573743438313900d32508746573743438" - "323000d4250874657374" - "3438323100d52508746573743438323200d62508746573743438323300d72508746573743438323400d82508746573" - "743438323500d9250874" - "6573743438323600da2508746573743438323700db2508746573743438323800dc2508746573743438323900dd2508" - "746573743438333000de" - "2508746573743438333100df2508746573743438333200e02508746573743438333300e12508746573743438333400" - "e2250874657374343833" - "3500e32508746573743438333600e42508746573743438333700e52508746573743438333800e62508746573743438" - "333900e7250874657374" - "3438343000e82508746573743438343100e92508746573743438343200ea2508746573743438343300eb2508746573" - "743438343400ec250874" - "6573743438343500ed2508746573743438343600ee2508746573743438343700ef2508746573743438343800f02508" - "746573743438343900f1" - "2508746573743438353000f22508746573743438353100f32508746573743438353200f42508746573743438353300" - "f5250874657374343835" - "3400f62508746573743438353500f72508746573743438353600f82508746573743438353700f92508746573743438" - "353800fa250874657374" - "3438353900fb2508746573743438363000fc2508746573743438363100fd2508746573743438363200fe2508746573" - "743438363300ff250874" - "6573743438363400802608746573743438363500812608746573743438363600822608746573743438363700832608" - "74657374343836380084" - "2608746573743438363900852608746573743438373000862608746573743438373100872608746573743438373200" - "88260874657374343837" - "33008926087465737434383734008a26087465737434383735008b26087465737434383736008c2608746573743438" - "3737008d260874657374" - "34383738008e26087465737434383739008f2608746573743438383000902608746573743438383100912608746573" - "74343838320092260874" - "6573743438383300932608746573743438383400942608746573743438383500952608746573743438383600962608" - "74657374343838370097" - "26087465737434383838009826087465737434383839009926087465737434383930009a2608746573743438393100" - "9b260874657374343839" - "32009c26087465737434383933009d26087465737434383934009e26087465737434383935009f2608746573743438" - "393600a0260874657374" - "3438393700a12608746573743438393800a22608746573743438393900a32608746573743439303000a42608746573" - "743439303100a5260874" - "6573743439303200a62608746573743439303300a72608746573743439303400a82608746573743439303500a92608" - "746573743439303600aa" - "2608746573743439303700ab2608746573743439303800ac2608746573743439303900ad2608746573743439313000" - "ae260874657374343931" - "3100af2608746573743439313200b02608746573743439313300b12608746573743439313400b22608746573743439" - "313500b3260874657374" - "3439313600b42608746573743439313700b52608746573743439313800b62608746573743439313900b72608746573" - "743439323000b8260874" - "6573743439323100b92608746573743439323200ba2608746573743439323300bb2608746573743439323400bc2608" - "746573743439323500bd" - "2608746573743439323600be2608746573743439323700bf2608746573743439323800c02608746573743439323900" - "c1260874657374343933" - "3000c22608746573743439333100c32608746573743439333200c42608746573743439333300c52608746573743439" - "333400c6260874657374" - "3439333500c72608746573743439333600c82608746573743439333700c92608746573743439333800ca2608746573" - "743439333900cb260874" - "6573743439343000cc2608746573743439343100cd2608746573743439343200ce2608746573743439343300cf2608" - "746573743439343400d0" - "2608746573743439343500d12608746573743439343600d22608746573743439343700d32608746573743439343800" - "d4260874657374343934" + "743437333000fa2408746573743437333100fb2408746573743437333200fc2408746573743437333300fd24087465" + "73743437333400fe2408746573743437333500ff240874657374343733360080250874657374343733370081250874" + "6573743437333800822508746573743437333900832508746573743437343000842508746573743437343100852508" + "7465737434373432008625087465737434373433008725087465737434373434008825087465737434373435008925" + "087465737434373436008a25087465737434373437008b25087465737434373438008c25087465737434373439008d" + "25087465737434373530008e25087465737434373531008f2508746573743437353200902508746573743437353300" + "9125087465737434373534009225087465737434373535009325087465737434373536009425087465737434373537" + "0095250874657374343735380096250874657374343735390097250874657374343736300098250874657374343736" + "31009925087465737434373632009a25087465737434373633009b25087465737434373634009c2508746573743437" + "3635009d25087465737434373636009e25087465737434373637009f2508746573743437363800a025087465737434" + "37363900a12508746573743437373000a22508746573743437373100a32508746573743437373200a4250874657374" + "3437373300a52508746573743437373400a62508746573743437373500a72508746573743437373600a82508746573" + "743437373700a92508746573743437373800aa2508746573743437373900ab2508746573743437383000ac25087465" + "73743437383100ad2508746573743437383200ae2508746573743437383300af2508746573743437383400b0250874" + "6573743437383500b12508746573743437383600b22508746573743437383700b32508746573743437383800b42508" + "746573743437383900b52508746573743437393000b62508746573743437393100b72508746573743437393200b825" + "08746573743437393300b92508746573743437393400ba2508746573743437393500bb2508746573743437393600bc" + "2508746573743437393700bd2508746573743437393800be2508746573743437393900bf2508746573743438303000" + "c02508746573743438303100c12508746573743438303200c22508746573743438303300c325087465737434383034" + "00c42508746573743438303500c52508746573743438303600c62508746573743438303700c7250874657374343830" + "3800c82508746573743438303900c92508746573743438313000ca2508746573743438313100cb2508746573743438" + "313200cc2508746573743438313300cd2508746573743438313400ce2508746573743438313500cf25087465737434" + "38313600d02508746573743438313700d12508746573743438313800d22508746573743438313900d3250874657374" + "3438323000d42508746573743438323100d52508746573743438323200d62508746573743438323300d72508746573" + "743438323400d82508746573743438323500d92508746573743438323600da2508746573743438323700db25087465" + "73743438323800dc2508746573743438323900dd2508746573743438333000de2508746573743438333100df250874" + "6573743438333200e02508746573743438333300e12508746573743438333400e22508746573743438333500e32508" + "746573743438333600e42508746573743438333700e52508746573743438333800e62508746573743438333900e725" + "08746573743438343000e82508746573743438343100e92508746573743438343200ea2508746573743438343300eb" + "2508746573743438343400ec2508746573743438343500ed2508746573743438343600ee2508746573743438343700" + "ef2508746573743438343800f02508746573743438343900f12508746573743438353000f225087465737434383531" + "00f32508746573743438353200f42508746573743438353300f52508746573743438353400f6250874657374343835" + "3500f72508746573743438353600f82508746573743438353700f92508746573743438353800fa2508746573743438" + "353900fb2508746573743438363000fc2508746573743438363100fd2508746573743438363200fe25087465737434" + "38363300ff250874657374343836340080260874657374343836350081260874657374343836360082260874657374" + "3438363700832608746573743438363800842608746573743438363900852608746573743438373000862608746573" + "7434383731008726087465737434383732008826087465737434383733008926087465737434383734008a26087465" + "737434383735008b26087465737434383736008c26087465737434383737008d26087465737434383738008e260874" + "65737434383739008f2608746573743438383000902608746573743438383100912608746573743438383200922608" + "7465737434383833009326087465737434383834009426087465737434383835009526087465737434383836009626" + "087465737434383837009726087465737434383838009826087465737434383839009926087465737434383930009a" + "26087465737434383931009b26087465737434383932009c26087465737434383933009d2608746573743438393400" + "9e26087465737434383935009f2608746573743438393600a02608746573743438393700a126087465737434383938" + "00a22608746573743438393900a32608746573743439303000a42608746573743439303100a5260874657374343930" + "3200a62608746573743439303300a72608746573743439303400a82608746573743439303500a92608746573743439" + "303600aa2608746573743439303700ab2608746573743439303800ac2608746573743439303900ad26087465737434" + "39313000ae2608746573743439313100af2608746573743439313200b02608746573743439313300b1260874657374" + "3439313400b22608746573743439313500b32608746573743439313600b42608746573743439313700b52608746573" + "743439313800b62608746573743439313900b72608746573743439323000b82608746573743439323100b926087465" + "73743439323200ba2608746573743439323300bb2608746573743439323400bc2608746573743439323500bd260874" + "6573743439323600be2608746573743439323700bf2608746573743439323800c02608746573743439323900c12608" + "746573743439333000c22608746573743439333100c32608746573743439333200c42608746573743439333300c526" + "08746573743439333400c62608746573743439333500c72608746573743439333600c82608746573743439333700c9" + "2608746573743439333800ca2608746573743439333900cb2608746573743439343000cc2608746573743439343100" + "cd2608746573743439343200ce2608746573743439343300cf2608746573743439343400d026087465737434393435" + "00d12608746573743439343600d22608746573743439343700d32608746573743439343800d4260874657374343934" "3900d52608746573743439353000d62608746573743439353100d72608746573743439353200d82608746573743439" - "353300d9260874657374" - "3439353400da2608746573743439353500db2608746573743439353600dc2608746573743439353700dd2608746573" - "743439353800de260874" - "6573743439353900df2608746573743439363000e02608746573743439363100e12608746573743439363200e22608" - "746573743439363300e3" - "2608746573743439363400e42608746573743439363500e52608746573743439363600e62608746573743439363700" - "e7260874657374343936" - "3800e82608746573743439363900e92608746573743439373000ea2608746573743439373100eb2608746573743439" - "373200ec260874657374" - "3439373300ed2608746573743439373400ee2608746573743439373500ef2608746573743439373600f02608746573" - "743439373700f1260874" - "6573743439373800f22608746573743439373900f32608746573743439383000f42608746573743439383100f52608" - "746573743439383200f6" - "2608746573743439383300f72608746573743439383400f82608746573743439383500f92608746573743439383600" - "fa260874657374343938" - "3700fb2608746573743439383800fc2608746573743439383900fd2608746573743439393000fe2608746573743439" - "393100ff260874657374" - "3439393200802708746573743439393300812708746573743439393400822708746573743439393500832708746573" - "74343939360084270874" - "657374343939370085270874657374343939380086270874657374343939390087270ac2b80288270700200020016a" - "0b0700200020016a0b07" + "353300d92608746573743439353400da2608746573743439353500db2608746573743439353600dc26087465737434" + "39353700dd2608746573743439353800de2608746573743439353900df2608746573743439363000e0260874657374" + "3439363100e12608746573743439363200e22608746573743439363300e32608746573743439363400e42608746573" + "743439363500e52608746573743439363600e62608746573743439363700e72608746573743439363800e826087465" + "73743439363900e92608746573743439373000ea2608746573743439373100eb2608746573743439373200ec260874" + "6573743439373300ed2608746573743439373400ee2608746573743439373500ef2608746573743439373600f02608" + "746573743439373700f12608746573743439373800f22608746573743439373900f32608746573743439383000f426" + "08746573743439383100f52608746573743439383200f62608746573743439383300f72608746573743439383400f8" + "2608746573743439383500f92608746573743439383600fa2608746573743439383700fb2608746573743439383800" + "fc2608746573743439383900fd2608746573743439393000fe2608746573743439393100ff26087465737434393932" + "0080270874657374343939330081270874657374343939340082270874657374343939350083270874657374343939" + "360084270874657374343939370085270874657374343939380086270874657374343939390087270ac2b802882707" "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b07" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b070020" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b07002000" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b"; + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b"; extern std::string const opcReservedHex = "0061736d010000000105016000017f03030200000404017000010503010001060b027f0141000b7e0142000b071401" - "10616c6c5f696e737472" - "756374696f6e7300010907010041000b01000a53020400412a0b4c02017f017e010101010101010101010101010101" - "01010101010101010101" - "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101410b0b0b" - "0a010041000b04746573" - "74"; + "10616c6c5f696e737472756374696f6e7300010907010041000b01000a53020400412a0b4c02017f017e0101010101" + "0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + "01010101010101010101010101010101410b0b0b0a010041000b0474657374"; extern std::string const impExpHex = "0061736d0100000001100360027f7f017f6000017f60017f017f02330203656e760e6765745f6c65646765725f7371" From 888ca2e6d98fd9a897d9a87201a01a6358359986 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 24 Mar 2026 09:29:05 -0700 Subject: [PATCH 093/137] fix build --- src/libxrpl/tx/wasm/HostFuncImplNFT.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp b/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp index fbf85d8a12..ac002d723f 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include #include namespace xrpl { From 90397e1a52dd9fee91bc0851357a7fd17022a728 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 24 Mar 2026 09:41:08 -0700 Subject: [PATCH 094/137] more build fixes --- src/test/app/TestHostFunctions.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index ec3d77803c..0e74cd6283 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include From 531e8b6ebd99dc81b4fa8c89f19d6f94e10af114 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 24 Mar 2026 09:46:01 -0700 Subject: [PATCH 095/137] fix clang-tidy --- include/xrpl/tx/wasm/WasmiVM.h | 4 ++-- src/libxrpl/basics/Number.cpp | 12 ++++++++-- src/libxrpl/tx/wasm/HostFuncImplFloat.cpp | 21 ++++++++++------ src/libxrpl/tx/wasm/HostFuncImplGetter.cpp | 28 +++++++++++++--------- src/libxrpl/tx/wasm/HostFuncWrapper.cpp | 4 ++++ src/libxrpl/tx/wasm/WasmiVM.cpp | 20 ++++++++++++---- 6 files changed, 63 insertions(+), 26 deletions(-) diff --git a/include/xrpl/tx/wasm/WasmiVM.h b/include/xrpl/tx/wasm/WasmiVM.h index bd37b4e42e..034f115ee6 100644 --- a/include/xrpl/tx/wasm/WasmiVM.h +++ b/include/xrpl/tx/wasm/WasmiVM.h @@ -182,11 +182,11 @@ public: addInstance(StorePtr& s, WasmExternVec const& imports); std::int64_t - getGas(); + getGas() const; private: WasmExternVec - buildImports(StorePtr& s, ImportVec const& imports); + buildImports(StorePtr& s, ImportVec const& imports) const; }; class WasmiEngine diff --git a/src/libxrpl/basics/Number.cpp b/src/libxrpl/basics/Number.cpp index b64c2f5707..7a26539528 100644 --- a/src/libxrpl/basics/Number.cpp +++ b/src/libxrpl/basics/Number.cpp @@ -955,9 +955,13 @@ ln(Number const& x, int iterations = 50) static Number const LN2(693'147'180'559'945'309ll, -18); if (x <= 0) + { throw std::runtime_error("Not a positive value"); - else if (x == 1) + } + if (x == 1) + { return N0; + } int exponent = 0; Number mantissa = x; @@ -993,9 +997,13 @@ log10(Number const& x, int iterations) static Number const LN10(2'302'585'092'994'046ll, -15); if (x <= 0) + { throw std::runtime_error("Not a positive value"); - else if (x == 1) + } + if (x == 1) + { return N0; + } if (x <= Number(10)) { diff --git a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp index 030148da14..ea810f59d7 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp @@ -27,7 +27,7 @@ protected: bool good_; public: - Number2(Slice const& data) : Number(), good_(false) + Number2(Slice const& data) : good_(false) { if (data.size() != encodedFloatSize) return; @@ -124,16 +124,20 @@ public: { return floatNull; } - else if (absM > maxEncodedMantissa) + if (absM > maxEncodedMantissa) { return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_LINE } v |= absM; if (e > wasmMaxExponent) + { return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); - else if (e < wasmMinExponent) + } + if (e < wasmMinExponent) + { return floatNull; + } uint64_t const normExp = e - wasmMinExponent + 1; //+97 v |= normExp << encodedMantissaBits; @@ -160,10 +164,9 @@ struct FloatState { Number::rounding_mode oldMode_; MantissaRange::mantissa_scale oldScale_; - bool good_; + bool good_{false}; - FloatState(int32_t mode) - : oldMode_(Number::getround()), oldScale_(Number::getMantissaScale()), good_(false) + FloatState(int32_t mode) : oldMode_(Number::getround()), oldScale_(Number::getMantissaScale()) { if (mode < Number::rounding_mode::to_nearest || mode > Number::rounding_mode::upward) return; @@ -281,7 +284,11 @@ floatCompareImpl(Slice const& x, Slice const& y) detail::Number2 yy(y); if (!yy) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - return xx < yy ? 2 : (xx == yy ? 0 : 1); + if (xx < yy) + return 2; + if (xx == yy) + return 0; + return 1; } // LCOV_EXCL_START catch (...) diff --git a/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp index 1344d4f5bc..7d96c111e8 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp @@ -42,13 +42,13 @@ getAnyFieldData(STBase const* obj) return Unexpected(HostFunctionError::NOT_LEAF_FIELD); case STI_ACCOUNT: { - auto const* account(static_cast(obj)); + auto const* account(dynamic_cast(obj)); auto const& data = account->value(); return Bytes{data.begin(), data.end()}; } case STI_ISSUE: { - auto const* issue(static_cast(obj)); + auto const* issue(dynamic_cast(obj)); Asset const& asset(issue->value()); // XRP and IOU will be processed by serializer if (asset.holds()) @@ -61,7 +61,7 @@ getAnyFieldData(STBase const* obj) } case STI_VL: { - auto const* vl(static_cast(obj)); + auto const* vl(dynamic_cast(obj)); auto const& data = vl->value(); return Bytes{data.begin(), data.end()}; } @@ -84,7 +84,7 @@ getAnyFieldData(STBase const* obj) // LCOV_EXCL_STOP case STI_UINT256: { - auto const* uint256Obj(static_cast(obj)); + auto const* uint256Obj(dynamic_cast(obj)); auto const& data = uint256Obj->value(); return Bytes{data.begin(), data.end()}; } @@ -106,7 +106,7 @@ getAnyFieldData(FieldValue const& variantObj) { return getAnyFieldData(*obj); } - else if (uint256 const* const* u = std::get_if(&variantObj)) + if (uint256 const* const* u = std::get_if(&variantObj)) { return Bytes((*u)->begin(), (*u)->end()); } @@ -133,10 +133,14 @@ locateField(STObject const& obj, Slice const& locator) { uintptr_t const p = reinterpret_cast(locator.data()); - if (p & (alignof(int32_t) - 1)) // unaligned + if (p & (alignof(int32_t) - 1)) + { // unaligned memcpy(&locBuf[0], locator.data(), locator.size()); + } else + { locPtr = reinterpret_cast(locator.data()); + } } STBase const* field = nullptr; @@ -160,14 +164,14 @@ locateField(STObject const& obj, Slice const& locator) if (STI_ARRAY == field->getSType()) { - auto const* arr = static_cast(field); + auto const* arr = dynamic_cast(field); if (sfieldCode < 0 || std::cmp_greater_equal(sfieldCode, arr->size())) return Unexpected(HostFunctionError::INDEX_OUT_OF_BOUNDS); field = &(arr->operator[](sfieldCode)); } else if (STI_OBJECT == field->getSType()) { - auto const* o = static_cast(field); + auto const* o = dynamic_cast(field); auto const it = knownSFields.find(sfieldCode); if (it == knownSFields.end()) @@ -178,7 +182,7 @@ locateField(STObject const& obj, Slice const& locator) } else if (STI_VECTOR256 == field->getSType()) { - auto const* v = static_cast(field); + auto const* v = dynamic_cast(field); if (sfieldCode < 0 || std::cmp_greater_equal(sfieldCode, v->size())) return Unexpected(HostFunctionError::INDEX_OUT_OF_BOUNDS); return FieldValue(&(v->operator[](sfieldCode))); @@ -201,9 +205,9 @@ getArrayLen(FieldValue const& variantField) if (STBase const* const* field = std::get_if(&variantField)) { if ((*field)->getSType() == STI_VECTOR256) - return static_cast(*field)->size(); + return dynamic_cast(*field)->size(); if ((*field)->getSType() == STI_ARRAY) - return static_cast(*field)->size(); + return dynamic_cast(*field)->size(); } // uint256 is not an array so that variant should still return NO_ARRAY @@ -222,8 +226,10 @@ WasmHostFunctionsImpl::cacheLedgerObj(uint256 const& objId, int32_t cacheIdx) if (cacheIdx == 0) { for (cacheIdx = 0; cacheIdx < MAX_CACHE; ++cacheIdx) + { if (!cache_[cacheIdx]) break; + } } else { diff --git a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp index 656e51f75e..83453d9068 100644 --- a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp +++ b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp @@ -78,9 +78,13 @@ getDataUnsigned(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) T x; uintptr_t p = reinterpret_cast(r->data()); if (p & (alignof(T) - 1)) // unaligned + { memcpy(&x, r->data(), sizeof(T)); + } else + { x = *reinterpret_cast(r->data()); + } x = adjustWasmEndianess(x); return x; diff --git a/src/libxrpl/tx/wasm/WasmiVM.cpp b/src/libxrpl/tx/wasm/WasmiVM.cpp index 6d264c5e50..7dd4b5debc 100644 --- a/src/libxrpl/tx/wasm/WasmiVM.cpp +++ b/src/libxrpl/tx/wasm/WasmiVM.cpp @@ -33,7 +33,9 @@ print_wasm_error(std::string_view msg, wasm_trap_t* trap, beast::Journal jlog) << std::string_view(error_message.data, error_message.size - 1); } else + { j << "WASMI Error: " << msg; + } if (error_message.size) wasm_byte_vec_delete(&error_message); @@ -331,7 +333,7 @@ makeImpReturn(WasmImportFunc const& imp) } WasmExternVec -ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) +ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) const { WasmImporttypeVec importTypes; wasm_module_imports(module_.get(), &importTypes.vec_); @@ -355,8 +357,10 @@ ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) wasm_externkind_t const itype = wasm_externtype_kind(wasm_importtype_type(importType)); if ((itype) != WASM_EXTERN_FUNC) + { throw std::runtime_error( "Invalid import type " + std::to_string(itype)); // LCOV_EXCL_LINE + } // for multi-module support // if ((W_ENV != modName) && (W_HOST_LIB != modName)) @@ -471,7 +475,7 @@ ModuleWrapper::addInstance(StorePtr& s, WasmExternVec const& imports) // } std::int64_t -ModuleWrapper::getGas() +ModuleWrapper::getGas() const { return instanceWrap_ ? instanceWrap_.getGas() : -1; } @@ -491,8 +495,10 @@ WasmiEngine::init() { wasm_config_t* config = wasm_config_new(); if (!config) + { return std::unique_ptr{ nullptr, &wasm_engine_delete}; // LCOV_EXCL_LINE + } wasmi_config_consume_fuel_set(config, true); wasmi_config_ignore_custom_sections_set(config, true); wasmi_config_wasm_mutable_globals_set(config, false); @@ -792,14 +798,20 @@ WasmiEngine::runHlp( auto const res = call<1>(f, p); if (res.f) + { throw std::runtime_error("<" + std::string(funcName) + "> failure"); - else if (!res.r.vec_.size) + } + if (!res.r.vec_.size) + { throw std::runtime_error( "<" + std::string(funcName) + "> return nothing"); // LCOV_EXCL_LINE - else if (res.r.vec_.data[0].kind != WASM_I32) + } + if (res.r.vec_.data[0].kind != WASM_I32) + { throw std::runtime_error( "<" + std::string(funcName) + "> return type mismatch, ret: " + std::to_string(static_cast(res.r.vec_.data[0].kind))); + } if (gas == -1) gas = std::numeric_limits::max(); From 9dbb301699a438dbec7f3f99fe7d397d7561f109 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 24 Mar 2026 10:20:06 -0700 Subject: [PATCH 096/137] more clang-tidy fixes --- src/test/app/HostFuncImpl_test.cpp | 22 ++++++++++++++++++++++ src/test/app/Wasm_test.cpp | 8 +++----- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index a64031bd36..e77c3ded0c 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -117,8 +117,10 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto const result = hfs.getParentLedgerTime(); if (BEAST_EXPECT(result.has_value())) + { BEAST_EXPECT( result.value() == env.current()->parentCloseTime().time_since_epoch().count()); + } } } @@ -301,9 +303,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const credentialIds = hfs.getTxField(sfCredentialIDs); if (BEAST_EXPECT(!credentialIds.has_value())) + { BEAST_EXPECTS( credentialIds.error() == HostFunctionError::NOT_LEAF_FIELD, std::to_string(HfErrorToInt(credentialIds.error()))); + } auto const nonField = hfs.getTxField(sfInvalid); if (BEAST_EXPECT(!nonField.has_value())) @@ -583,9 +587,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getTxNestedField(locator); if (BEAST_EXPECT(!result.has_value())) + { BEAST_EXPECTS( result.error() == expectedError, std::to_string(static_cast(result.error()))); + } }; // Locator for non-existent base field expectError( @@ -729,9 +735,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getCurrentLedgerObjNestedField(locator); if (BEAST_EXPECT(!result.has_value())) + { BEAST_EXPECTS( result.error() == expectedError, std::to_string(static_cast(result.error()))); + } }; // Locator for non-existent base field expectError( @@ -770,9 +778,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite locatorVec.size() * sizeof(int32_t)); auto const result = dummyHfs.getCurrentLedgerObjNestedField(locator); if (BEAST_EXPECT(!result.has_value())) + { BEAST_EXPECTS( result.error() == HostFunctionError::LEDGER_OBJ_NOT_FOUND, std::to_string(static_cast(result.error()))); + } } } @@ -873,9 +883,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getLedgerObjNestedField(slot, locator); if (BEAST_EXPECT(!result.has_value())) + { BEAST_EXPECTS( result.error() == expectedError, std::to_string(static_cast(result.error()))); + } }; // Error: base field not found @@ -1062,8 +1074,10 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const arrLen = hfs.getLedgerObjArrayLen(1, sfSignerEntries); if (BEAST_EXPECT(arrLen.has_value())) + { // Should return 2 for sfSignerEntries BEAST_EXPECT(arrLen.value() == 2); + } } { auto const arrLen = hfs.getLedgerObjArrayLen(0, sfSignerEntries); @@ -1123,9 +1137,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getTxNestedArrayLen(locator); if (BEAST_EXPECT(!result.has_value())) + { BEAST_EXPECTS( result.error() == expectedError, std::to_string(static_cast(result.error()))); + } }; // Locator for sfMemos @@ -1173,9 +1189,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getCurrentLedgerObjNestedArrayLen(locator); if (BEAST_EXPECT(!result.has_value())) + { BEAST_EXPECTS( result.error() == expectedError, std::to_string(static_cast(result.error()))); + } }; // Locator for sfSignerEntries @@ -1203,9 +1221,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite locatorVec.size() * sizeof(int32_t)); auto const result = dummyHfs.getCurrentLedgerObjNestedArrayLen(locator); if (BEAST_EXPECT(!result.has_value())) + { BEAST_EXPECTS( result.error() == HostFunctionError::LEDGER_OBJ_NOT_FOUND, std::to_string(static_cast(result.error()))); + } } } @@ -1249,9 +1269,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getLedgerObjNestedArrayLen(slot, locator); if (BEAST_EXPECT(!result.has_value())) + { BEAST_EXPECTS( result.error() == expectedError, std::to_string(static_cast(result.error()))); + } }; // Error: non-array field diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 041b73f0ca..089a6150cf 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -25,7 +25,7 @@ Add(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) return nullptr; } -std::vector const +std::vector hexToBytes(std::string const& hex) { auto const ws = boost::algorithm::unhex(hex); @@ -123,10 +123,8 @@ runFinishFunction(std::string const& code) { return std::optional(re->result); } - else - { - return std::nullopt; - } + + return std::nullopt; } struct Wasm_test : public beast::unit_test::suite From a7ab8ee92335e756c5bfbda5c1dc9efa79e0f729 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 24 Mar 2026 10:22:01 -0700 Subject: [PATCH 097/137] clang-tidy fixes --- include/xrpl/tx/wasm/WasmiVM.h | 2 +- src/libxrpl/basics/Number.cpp | 2 +- src/libxrpl/tx/wasm/HostFuncImplFloat.cpp | 10 +++---- src/libxrpl/tx/wasm/HostFuncImplGetter.cpp | 9 +++--- src/libxrpl/tx/wasm/HostFuncWrapper.cpp | 12 ++++---- src/libxrpl/tx/wasm/WasmiVM.cpp | 34 +++++++++++----------- src/test/app/Wasm_test.cpp | 4 +-- 7 files changed, 37 insertions(+), 36 deletions(-) diff --git a/include/xrpl/tx/wasm/WasmiVM.h b/include/xrpl/tx/wasm/WasmiVM.h index 034f115ee6..61bbedfd1a 100644 --- a/include/xrpl/tx/wasm/WasmiVM.h +++ b/include/xrpl/tx/wasm/WasmiVM.h @@ -273,7 +273,7 @@ private: FuncInfo getFunc(std::string_view funcName) const; - std::vector + static std::vector convertParams(std::vector const& params); static int diff --git a/src/libxrpl/basics/Number.cpp b/src/libxrpl/basics/Number.cpp index 72c129ac7d..5ec9da315e 100644 --- a/src/libxrpl/basics/Number.cpp +++ b/src/libxrpl/basics/Number.cpp @@ -983,7 +983,7 @@ ln(Number const& x, int iterations = 50) for (int i = 1; i <= iterations; ++i) { - sum = sum + z / (2 * i - 1); + sum = sum + z / ((2 * i) - 1); z = z * zz; } diff --git a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp index ea810f59d7..0b31bcd6ce 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp @@ -39,7 +39,7 @@ public: } uint64_t const v = SerialIter(data).get64(); - if (!(v & STAmount::cIssuedCurrency)) + if ((v & STAmount::cIssuedCurrency) == 0u) return; int32_t const e = static_cast((v >> encodedMantissaBits) & 0xFFull); @@ -47,9 +47,9 @@ public: if (decodedExponent < wasmMinExponent || decodedExponent > wasmMaxExponent) return; - int64_t const neg = (v & STAmount::cPositive) ? 1 : -1; + int64_t const neg = ((v & STAmount::cPositive) != 0u) ? 1 : -1; int64_t const m = neg * static_cast(v & ((1ull << encodedMantissaBits) - 1)); - if (!m) + if (m == 0) return; Number x(makeNumber(m, decodedExponent)); @@ -120,7 +120,7 @@ public: v |= STAmount::cIssuedCurrency; uint64_t const absM = std::abs(m); - if (!absM) + if (absM == 0u) { return floatNull; } @@ -450,7 +450,7 @@ floatPowerImpl(Slice const& x, int32_t n, int32_t mode) detail::Number2 xx(x); if (!xx) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - if (xx == Number() && !n) + if (xx == Number() && (n == 0)) return Unexpected(HostFunctionError::INVALID_PARAMS); detail::Number2 res(power(xx, n, 1)); diff --git a/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp index 7d96c111e8..67542ac559 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp @@ -24,7 +24,7 @@ getIntBytes(STBase const* obj) static Expected getAnyFieldData(STBase const* obj) { - if (!obj) + if (obj == nullptr) return Unexpected(HostFunctionError::FIELD_NOT_FOUND); auto const stype = obj->getSType(); @@ -117,13 +117,14 @@ getAnyFieldData(FieldValue const& variantObj) static inline bool noField(STBase const* field) { - return !field || (STI_NOTPRESENT == field->getSType()) || (STI_UNKNOWN == field->getSType()); + return (field == nullptr) || (STI_NOTPRESENT == field->getSType()) || + (STI_UNKNOWN == field->getSType()); } static Expected locateField(STObject const& obj, Slice const& locator) { - if (locator.empty() || (locator.size() & 3)) // must be multiple of 4 + if (locator.empty() || ((locator.size() & 3) != 0u)) // must be multiple of 4 return Unexpected(HostFunctionError::LOCATOR_MALFORMED); static_assert(maxWasmParamLength % sizeof(int32_t) == 0); @@ -133,7 +134,7 @@ locateField(STObject const& obj, Slice const& locator) { uintptr_t const p = reinterpret_cast(locator.data()); - if (p & (alignof(int32_t) - 1)) + if ((p & (alignof(int32_t) - 1)) != 0u) { // unaligned memcpy(&locBuf[0], locator.data(), locator.size()); } diff --git a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp index 83453d9068..6003aefd84 100644 --- a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp +++ b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp @@ -21,19 +21,19 @@ setData( uint8_t const* src, int32_t srcSize) { - if (!srcSize) + if (srcSize == 0) return 0; // LCOV_EXCL_LINE - if (dst < 0 || dstSize < 0 || !src || srcSize < 0) + if (dst < 0 || dstSize < 0 || (src == nullptr) || srcSize < 0) return HfErrorToInt(HostFunctionError::INVALID_PARAMS); if (srcSize > maxWasmDataLength) return HfErrorToInt(HostFunctionError::DATA_FIELD_TOO_LARGE); - auto const memory = runtime ? runtime->getMem() : wmem(); + auto const memory = (runtime != nullptr) ? runtime->getMem() : wmem(); // LCOV_EXCL_START - if (!memory.s) + if (memory.s == 0u) return HfErrorToInt(HostFunctionError::NO_MEM_EXPORTED); // LCOV_EXCL_STOP if ((int64_t)dst + dstSize > memory.s) @@ -339,7 +339,7 @@ checkGas(void* env) HostFunctions* hf = reinterpret_cast(udata->first); auto const* runtime = reinterpret_cast(hf->getRT()); - if (!runtime) + if (runtime == nullptr) { wasm_trap_t* trap = reinterpret_cast( WasmEngine::instance().newTrap("hf no runtime")); // LCOV_EXCL_LINE @@ -1409,7 +1409,7 @@ trace_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) return hfResult(results, HostFunctionError::INVALID_PARAMS); } - return returnResult(runtime, params, results, hf->trace(*msg, *data, *asHex), index); + return returnResult(runtime, params, results, hf->trace(*msg, *data, *asHex != 0), index); } wasm_trap_t* diff --git a/src/libxrpl/tx/wasm/WasmiVM.cpp b/src/libxrpl/tx/wasm/WasmiVM.cpp index 7dd4b5debc..8147f84588 100644 --- a/src/libxrpl/tx/wasm/WasmiVM.cpp +++ b/src/libxrpl/tx/wasm/WasmiVM.cpp @@ -24,10 +24,10 @@ print_wasm_error(std::string_view msg, wasm_trap_t* trap, beast::Journal jlog) { wasm_byte_vec_t error_message WASM_EMPTY_VEC; - if (trap) + if (trap != nullptr) wasm_trap_message(trap, &error_message); - if (error_message.size) + if (error_message.size != 0u) { j << "WASMI Error: " << msg << ", " << std::string_view(error_message.data, error_message.size - 1); @@ -37,11 +37,11 @@ print_wasm_error(std::string_view msg, wasm_trap_t* trap, beast::Journal jlog) j << "WASMI Error: " << msg; } - if (error_message.size) + if (error_message.size != 0u) wasm_byte_vec_delete(&error_message); } - if (trap) + if (trap != nullptr) wasm_trap_delete(trap); #ifdef DEBUG_OUTPUT @@ -64,7 +64,7 @@ InstanceWrapper::init( InstancePtr mi = InstancePtr( wasm_instance_new(s.get(), m.get(), &imports.vec_, &trap), &wasm_instance_delete); - if (!mi || trap) + if (!mi || (trap != nullptr)) { print_wasm_error("can't create instance", trap, j); throw std::runtime_error("can't create instance"); @@ -126,7 +126,7 @@ InstanceWrapper::getFunc(std::string_view funcName, WasmExporttypeVec const& exp if (!instance_) throw std::runtime_error("no instance"); // LCOV_EXCL_LINE - if (!exportTypes.vec_.size) + if (exportTypes.vec_.size == 0u) throw std::runtime_error("no export"); // LCOV_EXCL_LINE if (exportTypes.vec_.size != exports_.vec_.size) throw std::runtime_error("invalid export"); // LCOV_EXCL_LINE @@ -152,7 +152,7 @@ InstanceWrapper::getFunc(std::string_view funcName, WasmExporttypeVec const& exp } } - if (!f || !ft) + if ((f == nullptr) || (ft == nullptr)) throw std::runtime_error("can't find function <" + std::string(funcName) + ">"); return {f, ft}; @@ -180,7 +180,7 @@ InstanceWrapper::getMem() const } } - if (!mem) + if (mem == nullptr) return {}; // LCOV_EXCL_LINE return {reinterpret_cast(wasm_memory_data(mem)), wasm_memory_data_size(mem)}; @@ -189,7 +189,7 @@ InstanceWrapper::getMem() const std::int64_t InstanceWrapper::getGas() const { - if (!store_) + if (store_ == nullptr) return -1; // LCOV_EXCL_LINE std::uint64_t gas = 0; wasm_store_get_fuel(store_, &gas); @@ -199,13 +199,13 @@ InstanceWrapper::getGas() const std::int64_t InstanceWrapper::setGas(std::int64_t gas) const { - if (!store_) + if (store_ == nullptr) return -1; // LCOV_EXCL_LINE if (gas < 0) gas = std::numeric_limits::max(); wasmi_error_t* err = wasm_store_set_fuel(store_, static_cast(gas)); - if (err) + if (err != nullptr) { // LCOV_EXCL_START print_wasm_error("Can't set instance gas", nullptr, j_); @@ -284,7 +284,7 @@ static WasmValtypeVec makeImpParams(WasmImportFunc const& imp) { auto const paramSize = imp.params.size(); - if (!paramSize) + if (paramSize == 0u) return {}; WasmValtypeVec v(paramSize); @@ -338,7 +338,7 @@ ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) const WasmImporttypeVec importTypes; wasm_module_imports(module_.get(), &importTypes.vec_); - if (!importTypes.vec_.size) + if (importTypes.vec_.size == 0u) return {}; if (imports.empty()) throw std::runtime_error("Missing imports"); @@ -388,7 +388,7 @@ ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) const reinterpret_cast(imp.wrap), (void*)&obj, nullptr); - if (!func) + if (func == nullptr) { // LCOV_EXCL_START throw std::runtime_error("can't create import function " + imp.name); @@ -494,7 +494,7 @@ std::unique_ptr WasmiEngine::init() { wasm_config_t* config = wasm_config_new(); - if (!config) + if (config == nullptr) { return std::unique_ptr{ nullptr, &wasm_engine_delete}; // LCOV_EXCL_LINE @@ -537,7 +537,7 @@ WasmiEngine::addModule( if (gas < 0) gas = std::numeric_limits::max(); wasmi_error_t* err = wasm_store_set_fuel(store_.get(), static_cast(gas)); - if (err) + if (err != nullptr) { // LCOV_EXCL_START print_wasm_error("Error setting gas", nullptr, j_); @@ -801,7 +801,7 @@ WasmiEngine::runHlp( { throw std::runtime_error("<" + std::string(funcName) + "> failure"); } - if (!res.r.vec_.size) + if (res.r.vec_.size == 0u) { throw std::runtime_error( "<" + std::string(funcName) + "> return nothing"); // LCOV_EXCL_LINE diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 089a6150cf..93add98f3a 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -62,7 +62,7 @@ uleb128(IT&& it) do { - if (shift > sizeof(std::uint64_t) * 8 - 7) + if (shift > (sizeof(std::uint64_t) * 8) - 7) return {0, 0}; byte = *it++; val |= (byte & 0x7F) << shift; @@ -100,7 +100,7 @@ getSection(Bytes const& module, std::uint8_t n) return {0, 0}; auto [sz, cnt] = uleb128(module.cbegin() + pos); - if (!cnt) + if (cnt == 0u) return {0, 0}; if (pos + cnt + sz > module.size()) return {0, 0}; From d006433579676cec6c7e26922d1fffbdb36f9fa2 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Wed, 25 Mar 2026 09:42:33 -0400 Subject: [PATCH 098/137] Base divison of large fixtures (#6637) --- .../wasm_fixtures/fixture_functions_5k.cpp | 2238 + .../app/wasm_fixtures/fixture_locals_10k.cpp | 2126 + src/test/app/wasm_fixtures/fixtures.cpp | 4358 -- .../app/wasm_fixtures/wat/functions_5k.wat | 45002 -------------- .../app/wasm_fixtures/wat/functions_5k.zip | Bin 0 -> 29665 bytes src/test/app/wasm_fixtures/wat/locals_10k.wat | 50000 ---------------- src/test/app/wasm_fixtures/wat/locals_10k.zip | Bin 0 -> 82559 bytes 7 files changed, 4364 insertions(+), 99360 deletions(-) create mode 100644 src/test/app/wasm_fixtures/fixture_functions_5k.cpp create mode 100644 src/test/app/wasm_fixtures/fixture_locals_10k.cpp delete mode 100644 src/test/app/wasm_fixtures/wat/functions_5k.wat create mode 100644 src/test/app/wasm_fixtures/wat/functions_5k.zip delete mode 100644 src/test/app/wasm_fixtures/wat/locals_10k.wat create mode 100644 src/test/app/wasm_fixtures/wat/locals_10k.zip diff --git a/src/test/app/wasm_fixtures/fixture_functions_5k.cpp b/src/test/app/wasm_fixtures/fixture_functions_5k.cpp new file mode 100644 index 0000000000..6ade5fea14 --- /dev/null +++ b/src/test/app/wasm_fixtures/fixture_functions_5k.cpp @@ -0,0 +1,2238 @@ +// TODO: consider moving these to separate files (and figure out the build) + +#include + +extern std::string const functions5kHex = + "0061736d0100000001070160027f7f017f038a27882700000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000007e2d303882708" + "7465737430303030000008746573743030303100010874657374303030320002087465737430303033000308746573" + "7430303034000408746573743030303500050874657374303030360006087465737430303037000708746573743030" + "303800080874657374303030390009087465737430303130000a087465737430303131000b08746573743030313200" + "0c087465737430303133000d087465737430303134000e087465737430303135000f08746573743030313600100874" + "6573743030313700110874657374303031380012087465737430303139001308746573743030323000140874657374" + "3030323100150874657374303032320016087465737430303233001708746573743030323400180874657374303032" + "350019087465737430303236001a087465737430303237001b087465737430303238001c087465737430303239001d" + "087465737430303330001e087465737430303331001f08746573743030333200200874657374303033330021087465" + "7374303033340022087465737430303335002308746573743030333600240874657374303033370025087465737430" + "3033380026087465737430303339002708746573743030343000280874657374303034310029087465737430303432" + "002a087465737430303433002b087465737430303434002c087465737430303435002d087465737430303436002e08" + "7465737430303437002f08746573743030343800300874657374303034390031087465737430303530003208746573" + "7430303531003308746573743030353200340874657374303035330035087465737430303534003608746573743030" + "3535003708746573743030353600380874657374303035370039087465737430303538003a08746573743030353900" + "3b087465737430303630003c087465737430303631003d087465737430303632003e087465737430303633003f0874" + "6573743030363400400874657374303036350041087465737430303636004208746573743030363700430874657374" + "3030363800440874657374303036390045087465737430303730004608746573743030373100470874657374303037" + "3200480874657374303037330049087465737430303734004a087465737430303735004b087465737430303736004c" + "087465737430303737004d087465737430303738004e087465737430303739004f0874657374303038300050087465" + "7374303038310051087465737430303832005208746573743030383300530874657374303038340054087465737430" + "3038350055087465737430303836005608746573743030383700570874657374303038380058087465737430303839" + "0059087465737430303930005a087465737430303931005b087465737430303932005c087465737430303933005d08" + "7465737430303934005e087465737430303935005f0874657374303039360060087465737430303937006108746573" + "7430303938006208746573743030393900630874657374303130300064087465737430313031006508746573743031" + "3032006608746573743031303300670874657374303130340068087465737430313035006908746573743031303600" + "6a087465737430313037006b087465737430313038006c087465737430313039006d087465737430313130006e0874" + "65737430313131006f0874657374303131320070087465737430313133007108746573743031313400720874657374" + "3031313500730874657374303131360074087465737430313137007508746573743031313800760874657374303131" + "39007708746573743031323000780874657374303132310079087465737430313232007a087465737430313233007b" + "087465737430313234007c087465737430313235007d087465737430313236007e087465737430313237007f087465" + "7374303132380080010874657374303132390081010874657374303133300082010874657374303133310083010874" + "6573743031333200840108746573743031333300850108746573743031333400860108746573743031333500870108" + "7465737430313336008801087465737430313337008901087465737430313338008a01087465737430313339008b01" + "087465737430313430008c01087465737430313431008d01087465737430313432008e01087465737430313433008f" + "0108746573743031343400900108746573743031343500910108746573743031343600920108746573743031343700" + "9301087465737430313438009401087465737430313439009501087465737430313530009601087465737430313531" + "009701087465737430313532009801087465737430313533009901087465737430313534009a010874657374303135" + "35009b01087465737430313536009c01087465737430313537009d01087465737430313538009e0108746573743031" + "3539009f0108746573743031363000a00108746573743031363100a10108746573743031363200a201087465737430" + "31363300a30108746573743031363400a40108746573743031363500a50108746573743031363600a6010874657374" + "3031363700a70108746573743031363800a80108746573743031363900a90108746573743031373000aa0108746573" + "743031373100ab0108746573743031373200ac0108746573743031373300ad0108746573743031373400ae01087465" + "73743031373500af0108746573743031373600b00108746573743031373700b10108746573743031373800b2010874" + "6573743031373900b30108746573743031383000b40108746573743031383100b50108746573743031383200b60108" + "746573743031383300b70108746573743031383400b80108746573743031383500b90108746573743031383600ba01" + "08746573743031383700bb0108746573743031383800bc0108746573743031383900bd0108746573743031393000be" + "0108746573743031393100bf0108746573743031393200c00108746573743031393300c10108746573743031393400" + "c20108746573743031393500c30108746573743031393600c40108746573743031393700c501087465737430313938" + "00c60108746573743031393900c70108746573743032303000c80108746573743032303100c9010874657374303230" + "3200ca0108746573743032303300cb0108746573743032303400cc0108746573743032303500cd0108746573743032" + "303600ce0108746573743032303700cf0108746573743032303800d00108746573743032303900d101087465737430" + "32313000d20108746573743032313100d30108746573743032313200d40108746573743032313300d5010874657374" + "3032313400d60108746573743032313500d70108746573743032313600d80108746573743032313700d90108746573" + "743032313800da0108746573743032313900db0108746573743032323000dc0108746573743032323100dd01087465" + "73743032323200de0108746573743032323300df0108746573743032323400e00108746573743032323500e1010874" + "6573743032323600e20108746573743032323700e30108746573743032323800e40108746573743032323900e50108" + "746573743032333000e60108746573743032333100e70108746573743032333200e80108746573743032333300e901" + "08746573743032333400ea0108746573743032333500eb0108746573743032333600ec0108746573743032333700ed" + "0108746573743032333800ee0108746573743032333900ef0108746573743032343000f00108746573743032343100" + "f10108746573743032343200f20108746573743032343300f30108746573743032343400f401087465737430323435" + "00f50108746573743032343600f60108746573743032343700f70108746573743032343800f8010874657374303234" + "3900f90108746573743032353000fa0108746573743032353100fb0108746573743032353200fc0108746573743032" + "353300fd0108746573743032353400fe0108746573743032353500ff01087465737430323536008002087465737430" + "3235370081020874657374303235380082020874657374303235390083020874657374303236300084020874657374" + "3032363100850208746573743032363200860208746573743032363300870208746573743032363400880208746573" + "7430323635008902087465737430323636008a02087465737430323637008b02087465737430323638008c02087465" + "737430323639008d02087465737430323730008e02087465737430323731008f020874657374303237320090020874" + "6573743032373300910208746573743032373400920208746573743032373500930208746573743032373600940208" + "7465737430323737009502087465737430323738009602087465737430323739009702087465737430323830009802" + "087465737430323831009902087465737430323832009a02087465737430323833009b02087465737430323834009c" + "02087465737430323835009d02087465737430323836009e02087465737430323837009f0208746573743032383800" + "a00208746573743032383900a10208746573743032393000a20208746573743032393100a302087465737430323932" + "00a40208746573743032393300a50208746573743032393400a60208746573743032393500a7020874657374303239" + "3600a80208746573743032393700a90208746573743032393800aa0208746573743032393900ab0208746573743033" + "303000ac0208746573743033303100ad0208746573743033303200ae0208746573743033303300af02087465737430" + "33303400b00208746573743033303500b10208746573743033303600b20208746573743033303700b3020874657374" + "3033303800b40208746573743033303900b50208746573743033313000b60208746573743033313100b70208746573" + "743033313200b80208746573743033313300b90208746573743033313400ba0208746573743033313500bb02087465" + "73743033313600bc0208746573743033313700bd0208746573743033313800be0208746573743033313900bf020874" + "6573743033323000c00208746573743033323100c10208746573743033323200c20208746573743033323300c30208" + "746573743033323400c40208746573743033323500c50208746573743033323600c60208746573743033323700c702" + "08746573743033323800c80208746573743033323900c90208746573743033333000ca0208746573743033333100cb" + "0208746573743033333200cc0208746573743033333300cd0208746573743033333400ce0208746573743033333500" + "cf0208746573743033333600d00208746573743033333700d10208746573743033333800d202087465737430333339" + "00d30208746573743033343000d40208746573743033343100d50208746573743033343200d6020874657374303334" + "3300d70208746573743033343400d80208746573743033343500d90208746573743033343600da0208746573743033" + "343700db0208746573743033343800dc0208746573743033343900dd0208746573743033353000de02087465737430" + "33353100df0208746573743033353200e00208746573743033353300e10208746573743033353400e2020874657374" + "3033353500e30208746573743033353600e40208746573743033353700e50208746573743033353800e60208746573" + "743033353900e70208746573743033363000e80208746573743033363100e90208746573743033363200ea02087465" + "73743033363300eb0208746573743033363400ec0208746573743033363500ed0208746573743033363600ee020874" + "6573743033363700ef0208746573743033363800f00208746573743033363900f10208746573743033373000f20208" + "746573743033373100f30208746573743033373200f40208746573743033373300f50208746573743033373400f602" + "08746573743033373500f70208746573743033373600f80208746573743033373700f90208746573743033373800fa" + "0208746573743033373900fb0208746573743033383000fc0208746573743033383100fd0208746573743033383200" + "fe0208746573743033383300ff02087465737430333834008003087465737430333835008103087465737430333836" + "0082030874657374303338370083030874657374303338380084030874657374303338390085030874657374303339" + "3000860308746573743033393100870308746573743033393200880308746573743033393300890308746573743033" + "3934008a03087465737430333935008b03087465737430333936008c03087465737430333937008d03087465737430" + "333938008e03087465737430333939008f030874657374303430300090030874657374303430310091030874657374" + "3034303200920308746573743034303300930308746573743034303400940308746573743034303500950308746573" + "7430343036009603087465737430343037009703087465737430343038009803087465737430343039009903087465" + "737430343130009a03087465737430343131009b03087465737430343132009c03087465737430343133009d030874" + "65737430343134009e03087465737430343135009f0308746573743034313600a00308746573743034313700a10308" + "746573743034313800a20308746573743034313900a30308746573743034323000a40308746573743034323100a503" + "08746573743034323200a60308746573743034323300a70308746573743034323400a80308746573743034323500a9" + "0308746573743034323600aa0308746573743034323700ab0308746573743034323800ac0308746573743034323900" + "ad0308746573743034333000ae0308746573743034333100af0308746573743034333200b003087465737430343333" + "00b10308746573743034333400b20308746573743034333500b30308746573743034333600b4030874657374303433" + "3700b50308746573743034333800b60308746573743034333900b70308746573743034343000b80308746573743034" + "343100b90308746573743034343200ba0308746573743034343300bb0308746573743034343400bc03087465737430" + "34343500bd0308746573743034343600be0308746573743034343700bf0308746573743034343800c0030874657374" + "3034343900c10308746573743034353000c20308746573743034353100c30308746573743034353200c40308746573" + "743034353300c50308746573743034353400c60308746573743034353500c70308746573743034353600c803087465" + "73743034353700c90308746573743034353800ca0308746573743034353900cb0308746573743034363000cc030874" + "6573743034363100cd0308746573743034363200ce0308746573743034363300cf0308746573743034363400d00308" + "746573743034363500d10308746573743034363600d20308746573743034363700d30308746573743034363800d403" + "08746573743034363900d50308746573743034373000d60308746573743034373100d70308746573743034373200d8" + "0308746573743034373300d90308746573743034373400da0308746573743034373500db0308746573743034373600" + "dc0308746573743034373700dd0308746573743034373800de0308746573743034373900df03087465737430343830" + "00e00308746573743034383100e10308746573743034383200e20308746573743034383300e3030874657374303438" + "3400e40308746573743034383500e50308746573743034383600e60308746573743034383700e70308746573743034" + "383800e80308746573743034383900e90308746573743034393000ea0308746573743034393100eb03087465737430" + "34393200ec0308746573743034393300ed0308746573743034393400ee0308746573743034393500ef030874657374" + "3034393600f00308746573743034393700f10308746573743034393800f20308746573743034393900f30308746573" + "743035303000f40308746573743035303100f50308746573743035303200f60308746573743035303300f703087465" + "73743035303400f80308746573743035303500f90308746573743035303600fa0308746573743035303700fb030874" + "6573743035303800fc0308746573743035303900fd0308746573743035313000fe0308746573743035313100ff0308" + "7465737430353132008004087465737430353133008104087465737430353134008204087465737430353135008304" + "0874657374303531360084040874657374303531370085040874657374303531380086040874657374303531390087" + "04087465737430353230008804087465737430353231008904087465737430353232008a0408746573743035323300" + "8b04087465737430353234008c04087465737430353235008d04087465737430353236008e04087465737430353237" + "008f040874657374303532380090040874657374303532390091040874657374303533300092040874657374303533" + "3100930408746573743035333200940408746573743035333300950408746573743035333400960408746573743035" + "3335009704087465737430353336009804087465737430353337009904087465737430353338009a04087465737430" + "353339009b04087465737430353430009c04087465737430353431009d04087465737430353432009e040874657374" + "30353433009f0408746573743035343400a00408746573743035343500a10408746573743035343600a20408746573" + "743035343700a30408746573743035343800a40408746573743035343900a50408746573743035353000a604087465" + "73743035353100a70408746573743035353200a80408746573743035353300a90408746573743035353400aa040874" + "6573743035353500ab0408746573743035353600ac0408746573743035353700ad0408746573743035353800ae0408" + "746573743035353900af0408746573743035363000b00408746573743035363100b10408746573743035363200b204" + "08746573743035363300b30408746573743035363400b40408746573743035363500b50408746573743035363600b6" + "0408746573743035363700b70408746573743035363800b80408746573743035363900b90408746573743035373000" + "ba0408746573743035373100bb0408746573743035373200bc0408746573743035373300bd04087465737430353734" + "00be0408746573743035373500bf0408746573743035373600c00408746573743035373700c1040874657374303537" + "3800c20408746573743035373900c30408746573743035383000c40408746573743035383100c50408746573743035" + "383200c60408746573743035383300c70408746573743035383400c80408746573743035383500c904087465737430" + "35383600ca0408746573743035383700cb0408746573743035383800cc0408746573743035383900cd040874657374" + "3035393000ce0408746573743035393100cf0408746573743035393200d00408746573743035393300d10408746573" + "743035393400d20408746573743035393500d30408746573743035393600d40408746573743035393700d504087465" + "73743035393800d60408746573743035393900d70408746573743036303000d80408746573743036303100d9040874" + "6573743036303200da0408746573743036303300db0408746573743036303400dc0408746573743036303500dd0408" + "746573743036303600de0408746573743036303700df0408746573743036303800e00408746573743036303900e104" + "08746573743036313000e20408746573743036313100e30408746573743036313200e40408746573743036313300e5" + "0408746573743036313400e60408746573743036313500e70408746573743036313600e80408746573743036313700" + "e90408746573743036313800ea0408746573743036313900eb0408746573743036323000ec04087465737430363231" + "00ed0408746573743036323200ee0408746573743036323300ef0408746573743036323400f0040874657374303632" + "3500f10408746573743036323600f20408746573743036323700f30408746573743036323800f40408746573743036" + "323900f50408746573743036333000f60408746573743036333100f70408746573743036333200f804087465737430" + "36333300f90408746573743036333400fa0408746573743036333500fb0408746573743036333600fc040874657374" + "3036333700fd0408746573743036333800fe0408746573743036333900ff0408746573743036343000800508746573" + "7430363431008105087465737430363432008205087465737430363433008305087465737430363434008405087465" + "7374303634350085050874657374303634360086050874657374303634370087050874657374303634380088050874" + "65737430363439008905087465737430363530008a05087465737430363531008b05087465737430363532008c0508" + "7465737430363533008d05087465737430363534008e05087465737430363535008f05087465737430363536009005" + "0874657374303635370091050874657374303635380092050874657374303635390093050874657374303636300094" + "0508746573743036363100950508746573743036363200960508746573743036363300970508746573743036363400" + "9805087465737430363635009905087465737430363636009a05087465737430363637009b05087465737430363638" + "009c05087465737430363639009d05087465737430363730009e05087465737430363731009f050874657374303637" + "3200a00508746573743036373300a10508746573743036373400a20508746573743036373500a30508746573743036" + "373600a40508746573743036373700a50508746573743036373800a60508746573743036373900a705087465737430" + "36383000a80508746573743036383100a90508746573743036383200aa0508746573743036383300ab050874657374" + "3036383400ac0508746573743036383500ad0508746573743036383600ae0508746573743036383700af0508746573" + "743036383800b00508746573743036383900b10508746573743036393000b20508746573743036393100b305087465" + "73743036393200b40508746573743036393300b50508746573743036393400b60508746573743036393500b7050874" + "6573743036393600b80508746573743036393700b90508746573743036393800ba0508746573743036393900bb0508" + "746573743037303000bc0508746573743037303100bd0508746573743037303200be0508746573743037303300bf05" + "08746573743037303400c00508746573743037303500c10508746573743037303600c20508746573743037303700c3" + "0508746573743037303800c40508746573743037303900c50508746573743037313000c60508746573743037313100" + "c70508746573743037313200c80508746573743037313300c90508746573743037313400ca05087465737430373135" + "00cb0508746573743037313600cc0508746573743037313700cd0508746573743037313800ce050874657374303731" + "3900cf0508746573743037323000d00508746573743037323100d10508746573743037323200d20508746573743037" + "323300d30508746573743037323400d40508746573743037323500d50508746573743037323600d605087465737430" + "37323700d70508746573743037323800d80508746573743037323900d90508746573743037333000da050874657374" + "3037333100db0508746573743037333200dc0508746573743037333300dd0508746573743037333400de0508746573" + "743037333500df0508746573743037333600e00508746573743037333700e10508746573743037333800e205087465" + "73743037333900e30508746573743037343000e40508746573743037343100e50508746573743037343200e6050874" + "6573743037343300e70508746573743037343400e80508746573743037343500e90508746573743037343600ea0508" + "746573743037343700eb0508746573743037343800ec0508746573743037343900ed0508746573743037353000ee05" + "08746573743037353100ef0508746573743037353200f00508746573743037353300f10508746573743037353400f2" + "0508746573743037353500f30508746573743037353600f40508746573743037353700f50508746573743037353800" + "f60508746573743037353900f70508746573743037363000f80508746573743037363100f905087465737430373632" + "00fa0508746573743037363300fb0508746573743037363400fc0508746573743037363500fd050874657374303736" + "3600fe0508746573743037363700ff0508746573743037363800800608746573743037363900810608746573743037" + "3730008206087465737430373731008306087465737430373732008406087465737430373733008506087465737430" + "3737340086060874657374303737350087060874657374303737360088060874657374303737370089060874657374" + "30373738008a06087465737430373739008b06087465737430373830008c06087465737430373831008d0608746573" + "7430373832008e06087465737430373833008f06087465737430373834009006087465737430373835009106087465" + "7374303738360092060874657374303738370093060874657374303738380094060874657374303738390095060874" + "6573743037393000960608746573743037393100970608746573743037393200980608746573743037393300990608" + "7465737430373934009a06087465737430373935009b06087465737430373936009c06087465737430373937009d06" + "087465737430373938009e06087465737430373939009f0608746573743038303000a00608746573743038303100a1" + "0608746573743038303200a20608746573743038303300a30608746573743038303400a40608746573743038303500" + "a50608746573743038303600a60608746573743038303700a70608746573743038303800a806087465737430383039" + "00a90608746573743038313000aa0608746573743038313100ab0608746573743038313200ac060874657374303831" + "3300ad0608746573743038313400ae0608746573743038313500af0608746573743038313600b00608746573743038" + "313700b10608746573743038313800b20608746573743038313900b30608746573743038323000b406087465737430" + "38323100b50608746573743038323200b60608746573743038323300b70608746573743038323400b8060874657374" + "3038323500b90608746573743038323600ba0608746573743038323700bb0608746573743038323800bc0608746573" + "743038323900bd0608746573743038333000be0608746573743038333100bf0608746573743038333200c006087465" + "73743038333300c10608746573743038333400c20608746573743038333500c30608746573743038333600c4060874" + "6573743038333700c50608746573743038333800c60608746573743038333900c70608746573743038343000c80608" + "746573743038343100c90608746573743038343200ca0608746573743038343300cb0608746573743038343400cc06" + "08746573743038343500cd0608746573743038343600ce0608746573743038343700cf0608746573743038343800d0" + "0608746573743038343900d10608746573743038353000d20608746573743038353100d30608746573743038353200" + "d40608746573743038353300d50608746573743038353400d60608746573743038353500d706087465737430383536" + "00d80608746573743038353700d90608746573743038353800da0608746573743038353900db060874657374303836" + "3000dc0608746573743038363100dd0608746573743038363200de0608746573743038363300df0608746573743038" + "363400e00608746573743038363500e10608746573743038363600e20608746573743038363700e306087465737430" + "38363800e40608746573743038363900e50608746573743038373000e60608746573743038373100e7060874657374" + "3038373200e80608746573743038373300e90608746573743038373400ea0608746573743038373500eb0608746573" + "743038373600ec0608746573743038373700ed0608746573743038373800ee0608746573743038373900ef06087465" + "73743038383000f00608746573743038383100f10608746573743038383200f20608746573743038383300f3060874" + "6573743038383400f40608746573743038383500f50608746573743038383600f60608746573743038383700f70608" + "746573743038383800f80608746573743038383900f90608746573743038393000fa0608746573743038393100fb06" + "08746573743038393200fc0608746573743038393300fd0608746573743038393400fe0608746573743038393500ff" + "0608746573743038393600800708746573743038393700810708746573743038393800820708746573743038393900" + "8307087465737430393030008407087465737430393031008507087465737430393032008607087465737430393033" + "008707087465737430393034008807087465737430393035008907087465737430393036008a070874657374303930" + "37008b07087465737430393038008c07087465737430393039008d07087465737430393130008e0708746573743039" + "3131008f07087465737430393132009007087465737430393133009107087465737430393134009207087465737430" + "3931350093070874657374303931360094070874657374303931370095070874657374303931380096070874657374" + "30393139009707087465737430393230009807087465737430393231009907087465737430393232009a0708746573" + "7430393233009b07087465737430393234009c07087465737430393235009d07087465737430393236009e07087465" + "737430393237009f0708746573743039323800a00708746573743039323900a10708746573743039333000a2070874" + "6573743039333100a30708746573743039333200a40708746573743039333300a50708746573743039333400a60708" + "746573743039333500a70708746573743039333600a80708746573743039333700a90708746573743039333800aa07" + "08746573743039333900ab0708746573743039343000ac0708746573743039343100ad0708746573743039343200ae" + "0708746573743039343300af0708746573743039343400b00708746573743039343500b10708746573743039343600" + "b20708746573743039343700b30708746573743039343800b40708746573743039343900b507087465737430393530" + "00b60708746573743039353100b70708746573743039353200b80708746573743039353300b9070874657374303935" + "3400ba0708746573743039353500bb0708746573743039353600bc0708746573743039353700bd0708746573743039" + "353800be0708746573743039353900bf0708746573743039363000c00708746573743039363100c107087465737430" + "39363200c20708746573743039363300c30708746573743039363400c40708746573743039363500c5070874657374" + "3039363600c60708746573743039363700c70708746573743039363800c80708746573743039363900c90708746573" + "743039373000ca0708746573743039373100cb0708746573743039373200cc0708746573743039373300cd07087465" + "73743039373400ce0708746573743039373500cf0708746573743039373600d00708746573743039373700d1070874" + "6573743039373800d20708746573743039373900d30708746573743039383000d40708746573743039383100d50708" + "746573743039383200d60708746573743039383300d70708746573743039383400d80708746573743039383500d907" + "08746573743039383600da0708746573743039383700db0708746573743039383800dc0708746573743039383900dd" + "0708746573743039393000de0708746573743039393100df0708746573743039393200e00708746573743039393300" + "e10708746573743039393400e20708746573743039393500e30708746573743039393600e407087465737430393937" + "00e50708746573743039393800e60708746573743039393900e70708746573743130303000e8070874657374313030" + "3100e90708746573743130303200ea0708746573743130303300eb0708746573743130303400ec0708746573743130" + "303500ed0708746573743130303600ee0708746573743130303700ef0708746573743130303800f007087465737431" + "30303900f10708746573743130313000f20708746573743130313100f30708746573743130313200f4070874657374" + "3130313300f50708746573743130313400f60708746573743130313500f70708746573743130313600f80708746573" + "743130313700f90708746573743130313800fa0708746573743130313900fb0708746573743130323000fc07087465" + "73743130323100fd0708746573743130323200fe0708746573743130323300ff070874657374313032340080080874" + "6573743130323500810808746573743130323600820808746573743130323700830808746573743130323800840808" + "7465737431303239008508087465737431303330008608087465737431303331008708087465737431303332008808" + "087465737431303333008908087465737431303334008a08087465737431303335008b08087465737431303336008c" + "08087465737431303337008d08087465737431303338008e08087465737431303339008f0808746573743130343000" + "9008087465737431303431009108087465737431303432009208087465737431303433009308087465737431303434" + "0094080874657374313034350095080874657374313034360096080874657374313034370097080874657374313034" + "38009808087465737431303439009908087465737431303530009a08087465737431303531009b0808746573743130" + "3532009c08087465737431303533009d08087465737431303534009e08087465737431303535009f08087465737431" + "30353600a00808746573743130353700a10808746573743130353800a20808746573743130353900a3080874657374" + "3130363000a40808746573743130363100a50808746573743130363200a60808746573743130363300a70808746573" + "743130363400a80808746573743130363500a90808746573743130363600aa0808746573743130363700ab08087465" + "73743130363800ac0808746573743130363900ad0808746573743130373000ae0808746573743130373100af080874" + "6573743130373200b00808746573743130373300b10808746573743130373400b20808746573743130373500b30808" + "746573743130373600b40808746573743130373700b50808746573743130373800b60808746573743130373900b708" + "08746573743130383000b80808746573743130383100b90808746573743130383200ba0808746573743130383300bb" + "0808746573743130383400bc0808746573743130383500bd0808746573743130383600be0808746573743130383700" + "bf0808746573743130383800c00808746573743130383900c10808746573743130393000c208087465737431303931" + "00c30808746573743130393200c40808746573743130393300c50808746573743130393400c6080874657374313039" + "3500c70808746573743130393600c80808746573743130393700c90808746573743130393800ca0808746573743130" + "393900cb0808746573743131303000cc0808746573743131303100cd0808746573743131303200ce08087465737431" + "31303300cf0808746573743131303400d00808746573743131303500d10808746573743131303600d2080874657374" + "3131303700d30808746573743131303800d40808746573743131303900d50808746573743131313000d60808746573" + "743131313100d70808746573743131313200d80808746573743131313300d90808746573743131313400da08087465" + "73743131313500db0808746573743131313600dc0808746573743131313700dd0808746573743131313800de080874" + "6573743131313900df0808746573743131323000e00808746573743131323100e10808746573743131323200e20808" + "746573743131323300e30808746573743131323400e40808746573743131323500e50808746573743131323600e608" + "08746573743131323700e70808746573743131323800e80808746573743131323900e90808746573743131333000ea" + "0808746573743131333100eb0808746573743131333200ec0808746573743131333300ed0808746573743131333400" + "ee0808746573743131333500ef0808746573743131333600f00808746573743131333700f108087465737431313338" + "00f20808746573743131333900f30808746573743131343000f40808746573743131343100f5080874657374313134" + "3200f60808746573743131343300f70808746573743131343400f80808746573743131343500f90808746573743131" + "343600fa0808746573743131343700fb0808746573743131343800fc0808746573743131343900fd08087465737431" + "31353000fe0808746573743131353100ff080874657374313135320080090874657374313135330081090874657374" + "3131353400820908746573743131353500830908746573743131353600840908746573743131353700850908746573" + "7431313538008609087465737431313539008709087465737431313630008809087465737431313631008909087465" + "737431313632008a09087465737431313633008b09087465737431313634008c09087465737431313635008d090874" + "65737431313636008e09087465737431313637008f0908746573743131363800900908746573743131363900910908" + "7465737431313730009209087465737431313731009309087465737431313732009409087465737431313733009509" + "0874657374313137340096090874657374313137350097090874657374313137360098090874657374313137370099" + "09087465737431313738009a09087465737431313739009b09087465737431313830009c0908746573743131383100" + "9d09087465737431313832009e09087465737431313833009f0908746573743131383400a009087465737431313835" + "00a10908746573743131383600a20908746573743131383700a30908746573743131383800a4090874657374313138" + "3900a50908746573743131393000a60908746573743131393100a70908746573743131393200a80908746573743131" + "393300a90908746573743131393400aa0908746573743131393500ab0908746573743131393600ac09087465737431" + "31393700ad0908746573743131393800ae0908746573743131393900af0908746573743132303000b0090874657374" + "3132303100b10908746573743132303200b20908746573743132303300b30908746573743132303400b40908746573" + "743132303500b50908746573743132303600b60908746573743132303700b70908746573743132303800b809087465" + "73743132303900b90908746573743132313000ba0908746573743132313100bb0908746573743132313200bc090874" + "6573743132313300bd0908746573743132313400be0908746573743132313500bf0908746573743132313600c00908" + "746573743132313700c10908746573743132313800c20908746573743132313900c30908746573743132323000c409" + "08746573743132323100c50908746573743132323200c60908746573743132323300c70908746573743132323400c8" + "0908746573743132323500c90908746573743132323600ca0908746573743132323700cb0908746573743132323800" + "cc0908746573743132323900cd0908746573743132333000ce0908746573743132333100cf09087465737431323332" + "00d00908746573743132333300d10908746573743132333400d20908746573743132333500d3090874657374313233" + "3600d40908746573743132333700d50908746573743132333800d60908746573743132333900d70908746573743132" + "343000d80908746573743132343100d90908746573743132343200da0908746573743132343300db09087465737431" + "32343400dc0908746573743132343500dd0908746573743132343600de0908746573743132343700df090874657374" + "3132343800e00908746573743132343900e10908746573743132353000e20908746573743132353100e30908746573" + "743132353200e40908746573743132353300e50908746573743132353400e60908746573743132353500e709087465" + "73743132353600e80908746573743132353700e90908746573743132353800ea0908746573743132353900eb090874" + "6573743132363000ec0908746573743132363100ed0908746573743132363200ee0908746573743132363300ef0908" + "746573743132363400f00908746573743132363500f10908746573743132363600f20908746573743132363700f309" + "08746573743132363800f40908746573743132363900f50908746573743132373000f60908746573743132373100f7" + "0908746573743132373200f80908746573743132373300f90908746573743132373400fa0908746573743132373500" + "fb0908746573743132373600fc0908746573743132373700fd0908746573743132373800fe09087465737431323739" + "00ff0908746573743132383000800a08746573743132383100810a08746573743132383200820a0874657374313238" + "3300830a08746573743132383400840a08746573743132383500850a08746573743132383600860a08746573743132" + "383700870a08746573743132383800880a08746573743132383900890a087465737431323930008a0a087465737431" + "323931008b0a087465737431323932008c0a087465737431323933008d0a087465737431323934008e0a0874657374" + "31323935008f0a08746573743132393600900a08746573743132393700910a08746573743132393800920a08746573" + "743132393900930a08746573743133303000940a08746573743133303100950a08746573743133303200960a087465" + "73743133303300970a08746573743133303400980a08746573743133303500990a087465737431333036009a0a0874" + "65737431333037009b0a087465737431333038009c0a087465737431333039009d0a087465737431333130009e0a08" + "7465737431333131009f0a08746573743133313200a00a08746573743133313300a10a08746573743133313400a20a" + "08746573743133313500a30a08746573743133313600a40a08746573743133313700a50a08746573743133313800a6" + "0a08746573743133313900a70a08746573743133323000a80a08746573743133323100a90a08746573743133323200" + "aa0a08746573743133323300ab0a08746573743133323400ac0a08746573743133323500ad0a087465737431333236" + "00ae0a08746573743133323700af0a08746573743133323800b00a08746573743133323900b10a0874657374313333" + "3000b20a08746573743133333100b30a08746573743133333200b40a08746573743133333300b50a08746573743133" + "333400b60a08746573743133333500b70a08746573743133333600b80a08746573743133333700b90a087465737431" + "33333800ba0a08746573743133333900bb0a08746573743133343000bc0a08746573743133343100bd0a0874657374" + "3133343200be0a08746573743133343300bf0a08746573743133343400c00a08746573743133343500c10a08746573" + "743133343600c20a08746573743133343700c30a08746573743133343800c40a08746573743133343900c50a087465" + "73743133353000c60a08746573743133353100c70a08746573743133353200c80a08746573743133353300c90a0874" + "6573743133353400ca0a08746573743133353500cb0a08746573743133353600cc0a08746573743133353700cd0a08" + "746573743133353800ce0a08746573743133353900cf0a08746573743133363000d00a08746573743133363100d10a" + "08746573743133363200d20a08746573743133363300d30a08746573743133363400d40a08746573743133363500d5" + "0a08746573743133363600d60a08746573743133363700d70a08746573743133363800d80a08746573743133363900" + "d90a08746573743133373000da0a08746573743133373100db0a08746573743133373200dc0a087465737431333733" + "00dd0a08746573743133373400de0a08746573743133373500df0a08746573743133373600e00a0874657374313337" + "3700e10a08746573743133373800e20a08746573743133373900e30a08746573743133383000e40a08746573743133" + "383100e50a08746573743133383200e60a08746573743133383300e70a08746573743133383400e80a087465737431" + "33383500e90a08746573743133383600ea0a08746573743133383700eb0a08746573743133383800ec0a0874657374" + "3133383900ed0a08746573743133393000ee0a08746573743133393100ef0a08746573743133393200f00a08746573" + "743133393300f10a08746573743133393400f20a08746573743133393500f30a08746573743133393600f40a087465" + "73743133393700f50a08746573743133393800f60a08746573743133393900f70a08746573743134303000f80a0874" + "6573743134303100f90a08746573743134303200fa0a08746573743134303300fb0a08746573743134303400fc0a08" + "746573743134303500fd0a08746573743134303600fe0a08746573743134303700ff0a08746573743134303800800b" + "08746573743134303900810b08746573743134313000820b08746573743134313100830b0874657374313431320084" + "0b08746573743134313300850b08746573743134313400860b08746573743134313500870b08746573743134313600" + "880b08746573743134313700890b087465737431343138008a0b087465737431343139008b0b087465737431343230" + "008c0b087465737431343231008d0b087465737431343232008e0b087465737431343233008f0b0874657374313432" + "3400900b08746573743134323500910b08746573743134323600920b08746573743134323700930b08746573743134" + "323800940b08746573743134323900950b08746573743134333000960b08746573743134333100970b087465737431" + "34333200980b08746573743134333300990b087465737431343334009a0b087465737431343335009b0b0874657374" + "31343336009c0b087465737431343337009d0b087465737431343338009e0b087465737431343339009f0b08746573" + "743134343000a00b08746573743134343100a10b08746573743134343200a20b08746573743134343300a30b087465" + "73743134343400a40b08746573743134343500a50b08746573743134343600a60b08746573743134343700a70b0874" + "6573743134343800a80b08746573743134343900a90b08746573743134353000aa0b08746573743134353100ab0b08" + "746573743134353200ac0b08746573743134353300ad0b08746573743134353400ae0b08746573743134353500af0b" + "08746573743134353600b00b08746573743134353700b10b08746573743134353800b20b08746573743134353900b3" + "0b08746573743134363000b40b08746573743134363100b50b08746573743134363200b60b08746573743134363300" + "b70b08746573743134363400b80b08746573743134363500b90b08746573743134363600ba0b087465737431343637" + "00bb0b08746573743134363800bc0b08746573743134363900bd0b08746573743134373000be0b0874657374313437" + "3100bf0b08746573743134373200c00b08746573743134373300c10b08746573743134373400c20b08746573743134" + "373500c30b08746573743134373600c40b08746573743134373700c50b08746573743134373800c60b087465737431" + "34373900c70b08746573743134383000c80b08746573743134383100c90b08746573743134383200ca0b0874657374" + "3134383300cb0b08746573743134383400cc0b08746573743134383500cd0b08746573743134383600ce0b08746573" + "743134383700cf0b08746573743134383800d00b08746573743134383900d10b08746573743134393000d20b087465" + "73743134393100d30b08746573743134393200d40b08746573743134393300d50b08746573743134393400d60b0874" + "6573743134393500d70b08746573743134393600d80b08746573743134393700d90b08746573743134393800da0b08" + "746573743134393900db0b08746573743135303000dc0b08746573743135303100dd0b08746573743135303200de0b" + "08746573743135303300df0b08746573743135303400e00b08746573743135303500e10b08746573743135303600e2" + "0b08746573743135303700e30b08746573743135303800e40b08746573743135303900e50b08746573743135313000" + "e60b08746573743135313100e70b08746573743135313200e80b08746573743135313300e90b087465737431353134" + "00ea0b08746573743135313500eb0b08746573743135313600ec0b08746573743135313700ed0b0874657374313531" + "3800ee0b08746573743135313900ef0b08746573743135323000f00b08746573743135323100f10b08746573743135" + "323200f20b08746573743135323300f30b08746573743135323400f40b08746573743135323500f50b087465737431" + "35323600f60b08746573743135323700f70b08746573743135323800f80b08746573743135323900f90b0874657374" + "3135333000fa0b08746573743135333100fb0b08746573743135333200fc0b08746573743135333300fd0b08746573" + "743135333400fe0b08746573743135333500ff0b08746573743135333600800c08746573743135333700810c087465" + "73743135333800820c08746573743135333900830c08746573743135343000840c08746573743135343100850c0874" + "6573743135343200860c08746573743135343300870c08746573743135343400880c08746573743135343500890c08" + "7465737431353436008a0c087465737431353437008b0c087465737431353438008c0c087465737431353439008d0c" + "087465737431353530008e0c087465737431353531008f0c08746573743135353200900c0874657374313535330091" + "0c08746573743135353400920c08746573743135353500930c08746573743135353600940c08746573743135353700" + "950c08746573743135353800960c08746573743135353900970c08746573743135363000980c087465737431353631" + "00990c087465737431353632009a0c087465737431353633009b0c087465737431353634009c0c0874657374313536" + "35009d0c087465737431353636009e0c087465737431353637009f0c08746573743135363800a00c08746573743135" + "363900a10c08746573743135373000a20c08746573743135373100a30c08746573743135373200a40c087465737431" + "35373300a50c08746573743135373400a60c08746573743135373500a70c08746573743135373600a80c0874657374" + "3135373700a90c08746573743135373800aa0c08746573743135373900ab0c08746573743135383000ac0c08746573" + "743135383100ad0c08746573743135383200ae0c08746573743135383300af0c08746573743135383400b00c087465" + "73743135383500b10c08746573743135383600b20c08746573743135383700b30c08746573743135383800b40c0874" + "6573743135383900b50c08746573743135393000b60c08746573743135393100b70c08746573743135393200b80c08" + "746573743135393300b90c08746573743135393400ba0c08746573743135393500bb0c08746573743135393600bc0c" + "08746573743135393700bd0c08746573743135393800be0c08746573743135393900bf0c08746573743136303000c0" + "0c08746573743136303100c10c08746573743136303200c20c08746573743136303300c30c08746573743136303400" + "c40c08746573743136303500c50c08746573743136303600c60c08746573743136303700c70c087465737431363038" + "00c80c08746573743136303900c90c08746573743136313000ca0c08746573743136313100cb0c0874657374313631" + "3200cc0c08746573743136313300cd0c08746573743136313400ce0c08746573743136313500cf0c08746573743136" + "313600d00c08746573743136313700d10c08746573743136313800d20c08746573743136313900d30c087465737431" + "36323000d40c08746573743136323100d50c08746573743136323200d60c08746573743136323300d70c0874657374" + "3136323400d80c08746573743136323500d90c08746573743136323600da0c08746573743136323700db0c08746573" + "743136323800dc0c08746573743136323900dd0c08746573743136333000de0c08746573743136333100df0c087465" + "73743136333200e00c08746573743136333300e10c08746573743136333400e20c08746573743136333500e30c0874" + "6573743136333600e40c08746573743136333700e50c08746573743136333800e60c08746573743136333900e70c08" + "746573743136343000e80c08746573743136343100e90c08746573743136343200ea0c08746573743136343300eb0c" + "08746573743136343400ec0c08746573743136343500ed0c08746573743136343600ee0c08746573743136343700ef" + "0c08746573743136343800f00c08746573743136343900f10c08746573743136353000f20c08746573743136353100" + "f30c08746573743136353200f40c08746573743136353300f50c08746573743136353400f60c087465737431363535" + "00f70c08746573743136353600f80c08746573743136353700f90c08746573743136353800fa0c0874657374313635" + "3900fb0c08746573743136363000fc0c08746573743136363100fd0c08746573743136363200fe0c08746573743136" + "363300ff0c08746573743136363400800d08746573743136363500810d08746573743136363600820d087465737431" + "36363700830d08746573743136363800840d08746573743136363900850d08746573743136373000860d0874657374" + "3136373100870d08746573743136373200880d08746573743136373300890d087465737431363734008a0d08746573" + "7431363735008b0d087465737431363736008c0d087465737431363737008d0d087465737431363738008e0d087465" + "737431363739008f0d08746573743136383000900d08746573743136383100910d08746573743136383200920d0874" + "6573743136383300930d08746573743136383400940d08746573743136383500950d08746573743136383600960d08" + "746573743136383700970d08746573743136383800980d08746573743136383900990d087465737431363930009a0d" + "087465737431363931009b0d087465737431363932009c0d087465737431363933009d0d087465737431363934009e" + "0d087465737431363935009f0d08746573743136393600a00d08746573743136393700a10d08746573743136393800" + "a20d08746573743136393900a30d08746573743137303000a40d08746573743137303100a50d087465737431373032" + "00a60d08746573743137303300a70d08746573743137303400a80d08746573743137303500a90d0874657374313730" + "3600aa0d08746573743137303700ab0d08746573743137303800ac0d08746573743137303900ad0d08746573743137" + "313000ae0d08746573743137313100af0d08746573743137313200b00d08746573743137313300b10d087465737431" + "37313400b20d08746573743137313500b30d08746573743137313600b40d08746573743137313700b50d0874657374" + "3137313800b60d08746573743137313900b70d08746573743137323000b80d08746573743137323100b90d08746573" + "743137323200ba0d08746573743137323300bb0d08746573743137323400bc0d08746573743137323500bd0d087465" + "73743137323600be0d08746573743137323700bf0d08746573743137323800c00d08746573743137323900c10d0874" + "6573743137333000c20d08746573743137333100c30d08746573743137333200c40d08746573743137333300c50d08" + "746573743137333400c60d08746573743137333500c70d08746573743137333600c80d08746573743137333700c90d" + "08746573743137333800ca0d08746573743137333900cb0d08746573743137343000cc0d08746573743137343100cd" + "0d08746573743137343200ce0d08746573743137343300cf0d08746573743137343400d00d08746573743137343500" + "d10d08746573743137343600d20d08746573743137343700d30d08746573743137343800d40d087465737431373439" + "00d50d08746573743137353000d60d08746573743137353100d70d08746573743137353200d80d0874657374313735" + "3300d90d08746573743137353400da0d08746573743137353500db0d08746573743137353600dc0d08746573743137" + "353700dd0d08746573743137353800de0d08746573743137353900df0d08746573743137363000e00d087465737431" + "37363100e10d08746573743137363200e20d08746573743137363300e30d08746573743137363400e40d0874657374" + "3137363500e50d08746573743137363600e60d08746573743137363700e70d08746573743137363800e80d08746573" + "743137363900e90d08746573743137373000ea0d08746573743137373100eb0d08746573743137373200ec0d087465" + "73743137373300ed0d08746573743137373400ee0d08746573743137373500ef0d08746573743137373600f00d0874" + "6573743137373700f10d08746573743137373800f20d08746573743137373900f30d08746573743137383000f40d08" + "746573743137383100f50d08746573743137383200f60d08746573743137383300f70d08746573743137383400f80d" + "08746573743137383500f90d08746573743137383600fa0d08746573743137383700fb0d08746573743137383800fc" + "0d08746573743137383900fd0d08746573743137393000fe0d08746573743137393100ff0d08746573743137393200" + "800e08746573743137393300810e08746573743137393400820e08746573743137393500830e087465737431373936" + "00840e08746573743137393700850e08746573743137393800860e08746573743137393900870e0874657374313830" + "3000880e08746573743138303100890e087465737431383032008a0e087465737431383033008b0e08746573743138" + "3034008c0e087465737431383035008d0e087465737431383036008e0e087465737431383037008f0e087465737431" + "38303800900e08746573743138303900910e08746573743138313000920e08746573743138313100930e0874657374" + "3138313200940e08746573743138313300950e08746573743138313400960e08746573743138313500970e08746573" + "743138313600980e08746573743138313700990e087465737431383138009a0e087465737431383139009b0e087465" + "737431383230009c0e087465737431383231009d0e087465737431383232009e0e087465737431383233009f0e0874" + "6573743138323400a00e08746573743138323500a10e08746573743138323600a20e08746573743138323700a30e08" + "746573743138323800a40e08746573743138323900a50e08746573743138333000a60e08746573743138333100a70e" + "08746573743138333200a80e08746573743138333300a90e08746573743138333400aa0e08746573743138333500ab" + "0e08746573743138333600ac0e08746573743138333700ad0e08746573743138333800ae0e08746573743138333900" + "af0e08746573743138343000b00e08746573743138343100b10e08746573743138343200b20e087465737431383433" + "00b30e08746573743138343400b40e08746573743138343500b50e08746573743138343600b60e0874657374313834" + "3700b70e08746573743138343800b80e08746573743138343900b90e08746573743138353000ba0e08746573743138" + "353100bb0e08746573743138353200bc0e08746573743138353300bd0e08746573743138353400be0e087465737431" + "38353500bf0e08746573743138353600c00e08746573743138353700c10e08746573743138353800c20e0874657374" + "3138353900c30e08746573743138363000c40e08746573743138363100c50e08746573743138363200c60e08746573" + "743138363300c70e08746573743138363400c80e08746573743138363500c90e08746573743138363600ca0e087465" + "73743138363700cb0e08746573743138363800cc0e08746573743138363900cd0e08746573743138373000ce0e0874" + "6573743138373100cf0e08746573743138373200d00e08746573743138373300d10e08746573743138373400d20e08" + "746573743138373500d30e08746573743138373600d40e08746573743138373700d50e08746573743138373800d60e" + "08746573743138373900d70e08746573743138383000d80e08746573743138383100d90e08746573743138383200da" + "0e08746573743138383300db0e08746573743138383400dc0e08746573743138383500dd0e08746573743138383600" + "de0e08746573743138383700df0e08746573743138383800e00e08746573743138383900e10e087465737431383930" + "00e20e08746573743138393100e30e08746573743138393200e40e08746573743138393300e50e0874657374313839" + "3400e60e08746573743138393500e70e08746573743138393600e80e08746573743138393700e90e08746573743138" + "393800ea0e08746573743138393900eb0e08746573743139303000ec0e08746573743139303100ed0e087465737431" + "39303200ee0e08746573743139303300ef0e08746573743139303400f00e08746573743139303500f10e0874657374" + "3139303600f20e08746573743139303700f30e08746573743139303800f40e08746573743139303900f50e08746573" + "743139313000f60e08746573743139313100f70e08746573743139313200f80e08746573743139313300f90e087465" + "73743139313400fa0e08746573743139313500fb0e08746573743139313600fc0e08746573743139313700fd0e0874" + "6573743139313800fe0e08746573743139313900ff0e08746573743139323000800f08746573743139323100810f08" + "746573743139323200820f08746573743139323300830f08746573743139323400840f08746573743139323500850f" + "08746573743139323600860f08746573743139323700870f08746573743139323800880f0874657374313932390089" + "0f087465737431393330008a0f087465737431393331008b0f087465737431393332008c0f08746573743139333300" + "8d0f087465737431393334008e0f087465737431393335008f0f08746573743139333600900f087465737431393337" + "00910f08746573743139333800920f08746573743139333900930f08746573743139343000940f0874657374313934" + "3100950f08746573743139343200960f08746573743139343300970f08746573743139343400980f08746573743139" + "343500990f087465737431393436009a0f087465737431393437009b0f087465737431393438009c0f087465737431" + "393439009d0f087465737431393530009e0f087465737431393531009f0f08746573743139353200a00f0874657374" + "3139353300a10f08746573743139353400a20f08746573743139353500a30f08746573743139353600a40f08746573" + "743139353700a50f08746573743139353800a60f08746573743139353900a70f08746573743139363000a80f087465" + "73743139363100a90f08746573743139363200aa0f08746573743139363300ab0f08746573743139363400ac0f0874" + "6573743139363500ad0f08746573743139363600ae0f08746573743139363700af0f08746573743139363800b00f08" + "746573743139363900b10f08746573743139373000b20f08746573743139373100b30f08746573743139373200b40f" + "08746573743139373300b50f08746573743139373400b60f08746573743139373500b70f08746573743139373600b8" + "0f08746573743139373700b90f08746573743139373800ba0f08746573743139373900bb0f08746573743139383000" + "bc0f08746573743139383100bd0f08746573743139383200be0f08746573743139383300bf0f087465737431393834" + "00c00f08746573743139383500c10f08746573743139383600c20f08746573743139383700c30f0874657374313938" + "3800c40f08746573743139383900c50f08746573743139393000c60f08746573743139393100c70f08746573743139" + "393200c80f08746573743139393300c90f08746573743139393400ca0f08746573743139393500cb0f087465737431" + "39393600cc0f08746573743139393700cd0f08746573743139393800ce0f08746573743139393900cf0f0874657374" + "3230303000d00f08746573743230303100d10f08746573743230303200d20f08746573743230303300d30f08746573" + "743230303400d40f08746573743230303500d50f08746573743230303600d60f08746573743230303700d70f087465" + "73743230303800d80f08746573743230303900d90f08746573743230313000da0f08746573743230313100db0f0874" + "6573743230313200dc0f08746573743230313300dd0f08746573743230313400de0f08746573743230313500df0f08" + "746573743230313600e00f08746573743230313700e10f08746573743230313800e20f08746573743230313900e30f" + "08746573743230323000e40f08746573743230323100e50f08746573743230323200e60f08746573743230323300e7" + "0f08746573743230323400e80f08746573743230323500e90f08746573743230323600ea0f08746573743230323700" + "eb0f08746573743230323800ec0f08746573743230323900ed0f08746573743230333000ee0f087465737432303331" + "00ef0f08746573743230333200f00f08746573743230333300f10f08746573743230333400f20f0874657374323033" + "3500f30f08746573743230333600f40f08746573743230333700f50f08746573743230333800f60f08746573743230" + "333900f70f08746573743230343000f80f08746573743230343100f90f08746573743230343200fa0f087465737432" + "30343300fb0f08746573743230343400fc0f08746573743230343500fd0f08746573743230343600fe0f0874657374" + "3230343700ff0f08746573743230343800801008746573743230343900811008746573743230353000821008746573" + "7432303531008310087465737432303532008410087465737432303533008510087465737432303534008610087465" + "737432303535008710087465737432303536008810087465737432303537008910087465737432303538008a100874" + "65737432303539008b10087465737432303630008c10087465737432303631008d10087465737432303632008e1008" + "7465737432303633008f10087465737432303634009010087465737432303635009110087465737432303636009210" + "0874657374323036370093100874657374323036380094100874657374323036390095100874657374323037300096" + "1008746573743230373100971008746573743230373200981008746573743230373300991008746573743230373400" + "9a10087465737432303735009b10087465737432303736009c10087465737432303737009d10087465737432303738" + "009e10087465737432303739009f1008746573743230383000a01008746573743230383100a1100874657374323038" + "3200a21008746573743230383300a31008746573743230383400a41008746573743230383500a51008746573743230" + "383600a61008746573743230383700a71008746573743230383800a81008746573743230383900a910087465737432" + "30393000aa1008746573743230393100ab1008746573743230393200ac1008746573743230393300ad100874657374" + "3230393400ae1008746573743230393500af1008746573743230393600b01008746573743230393700b11008746573" + "743230393800b21008746573743230393900b31008746573743231303000b41008746573743231303100b510087465" + "73743231303200b61008746573743231303300b71008746573743231303400b81008746573743231303500b9100874" + "6573743231303600ba1008746573743231303700bb1008746573743231303800bc1008746573743231303900bd1008" + "746573743231313000be1008746573743231313100bf1008746573743231313200c01008746573743231313300c110" + "08746573743231313400c21008746573743231313500c31008746573743231313600c41008746573743231313700c5" + "1008746573743231313800c61008746573743231313900c71008746573743231323000c81008746573743231323100" + "c91008746573743231323200ca1008746573743231323300cb1008746573743231323400cc10087465737432313235" + "00cd1008746573743231323600ce1008746573743231323700cf1008746573743231323800d0100874657374323132" + "3900d11008746573743231333000d21008746573743231333100d31008746573743231333200d41008746573743231" + "333300d51008746573743231333400d61008746573743231333500d71008746573743231333600d810087465737432" + "31333700d91008746573743231333800da1008746573743231333900db1008746573743231343000dc100874657374" + "3231343100dd1008746573743231343200de1008746573743231343300df1008746573743231343400e01008746573" + "743231343500e11008746573743231343600e21008746573743231343700e31008746573743231343800e410087465" + "73743231343900e51008746573743231353000e61008746573743231353100e71008746573743231353200e8100874" + "6573743231353300e91008746573743231353400ea1008746573743231353500eb1008746573743231353600ec1008" + "746573743231353700ed1008746573743231353800ee1008746573743231353900ef1008746573743231363000f010" + "08746573743231363100f11008746573743231363200f21008746573743231363300f31008746573743231363400f4" + "1008746573743231363500f51008746573743231363600f61008746573743231363700f71008746573743231363800" + "f81008746573743231363900f91008746573743231373000fa1008746573743231373100fb10087465737432313732" + "00fc1008746573743231373300fd1008746573743231373400fe1008746573743231373500ff100874657374323137" + "3600801108746573743231373700811108746573743231373800821108746573743231373900831108746573743231" + "3830008411087465737432313831008511087465737432313832008611087465737432313833008711087465737432" + "313834008811087465737432313835008911087465737432313836008a11087465737432313837008b110874657374" + "32313838008c11087465737432313839008d11087465737432313930008e11087465737432313931008f1108746573" + "7432313932009011087465737432313933009111087465737432313934009211087465737432313935009311087465" + "7374323139360094110874657374323139370095110874657374323139380096110874657374323139390097110874" + "65737432323030009811087465737432323031009911087465737432323032009a11087465737432323033009b1108" + "7465737432323034009c11087465737432323035009d11087465737432323036009e11087465737432323037009f11" + "08746573743232303800a01108746573743232303900a11108746573743232313000a21108746573743232313100a3" + "1108746573743232313200a41108746573743232313300a51108746573743232313400a61108746573743232313500" + "a71108746573743232313600a81108746573743232313700a91108746573743232313800aa11087465737432323139" + "00ab1108746573743232323000ac1108746573743232323100ad1108746573743232323200ae110874657374323232" + "3300af1108746573743232323400b01108746573743232323500b11108746573743232323600b21108746573743232" + "323700b31108746573743232323800b41108746573743232323900b51108746573743232333000b611087465737432" + "32333100b71108746573743232333200b81108746573743232333300b91108746573743232333400ba110874657374" + "3232333500bb1108746573743232333600bc1108746573743232333700bd1108746573743232333800be1108746573" + "743232333900bf1108746573743232343000c01108746573743232343100c11108746573743232343200c211087465" + "73743232343300c31108746573743232343400c41108746573743232343500c51108746573743232343600c6110874" + "6573743232343700c71108746573743232343800c81108746573743232343900c91108746573743232353000ca1108" + "746573743232353100cb1108746573743232353200cc1108746573743232353300cd1108746573743232353400ce11" + "08746573743232353500cf1108746573743232353600d01108746573743232353700d11108746573743232353800d2" + "1108746573743232353900d31108746573743232363000d41108746573743232363100d51108746573743232363200" + "d61108746573743232363300d71108746573743232363400d81108746573743232363500d911087465737432323636" + "00da1108746573743232363700db1108746573743232363800dc1108746573743232363900dd110874657374323237" + "3000de1108746573743232373100df1108746573743232373200e01108746573743232373300e11108746573743232" + "373400e21108746573743232373500e31108746573743232373600e41108746573743232373700e511087465737432" + "32373800e61108746573743232373900e71108746573743232383000e81108746573743232383100e9110874657374" + "3232383200ea1108746573743232383300eb1108746573743232383400ec1108746573743232383500ed1108746573" + "743232383600ee1108746573743232383700ef1108746573743232383800f01108746573743232383900f111087465" + "73743232393000f21108746573743232393100f31108746573743232393200f41108746573743232393300f5110874" + "6573743232393400f61108746573743232393500f71108746573743232393600f81108746573743232393700f91108" + "746573743232393800fa1108746573743232393900fb1108746573743233303000fc1108746573743233303100fd11" + "08746573743233303200fe1108746573743233303300ff110874657374323330340080120874657374323330350081" + "1208746573743233303600821208746573743233303700831208746573743233303800841208746573743233303900" + "8512087465737432333130008612087465737432333131008712087465737432333132008812087465737432333133" + "008912087465737432333134008a12087465737432333135008b12087465737432333136008c120874657374323331" + "37008d12087465737432333138008e12087465737432333139008f1208746573743233323000901208746573743233" + "3231009112087465737432333232009212087465737432333233009312087465737432333234009412087465737432" + "3332350095120874657374323332360096120874657374323332370097120874657374323332380098120874657374" + "32333239009912087465737432333330009a12087465737432333331009b12087465737432333332009c1208746573" + "7432333333009d12087465737432333334009e12087465737432333335009f1208746573743233333600a012087465" + "73743233333700a11208746573743233333800a21208746573743233333900a31208746573743233343000a4120874" + "6573743233343100a51208746573743233343200a61208746573743233343300a71208746573743233343400a81208" + "746573743233343500a91208746573743233343600aa1208746573743233343700ab1208746573743233343800ac12" + "08746573743233343900ad1208746573743233353000ae1208746573743233353100af1208746573743233353200b0" + "1208746573743233353300b11208746573743233353400b21208746573743233353500b31208746573743233353600" + "b41208746573743233353700b51208746573743233353800b61208746573743233353900b712087465737432333630" + "00b81208746573743233363100b91208746573743233363200ba1208746573743233363300bb120874657374323336" + "3400bc1208746573743233363500bd1208746573743233363600be1208746573743233363700bf1208746573743233" + "363800c01208746573743233363900c11208746573743233373000c21208746573743233373100c312087465737432" + "33373200c41208746573743233373300c51208746573743233373400c61208746573743233373500c7120874657374" + "3233373600c81208746573743233373700c91208746573743233373800ca1208746573743233373900cb1208746573" + "743233383000cc1208746573743233383100cd1208746573743233383200ce1208746573743233383300cf12087465" + "73743233383400d01208746573743233383500d11208746573743233383600d21208746573743233383700d3120874" + "6573743233383800d41208746573743233383900d51208746573743233393000d61208746573743233393100d71208" + "746573743233393200d81208746573743233393300d91208746573743233393400da1208746573743233393500db12" + "08746573743233393600dc1208746573743233393700dd1208746573743233393800de1208746573743233393900df" + "1208746573743234303000e01208746573743234303100e11208746573743234303200e21208746573743234303300" + "e31208746573743234303400e41208746573743234303500e51208746573743234303600e612087465737432343037" + "00e71208746573743234303800e81208746573743234303900e91208746573743234313000ea120874657374323431" + "3100eb1208746573743234313200ec1208746573743234313300ed1208746573743234313400ee1208746573743234" + "313500ef1208746573743234313600f01208746573743234313700f11208746573743234313800f212087465737432" + "34313900f31208746573743234323000f41208746573743234323100f51208746573743234323200f6120874657374" + "3234323300f71208746573743234323400f81208746573743234323500f91208746573743234323600fa1208746573" + "743234323700fb1208746573743234323800fc1208746573743234323900fd1208746573743234333000fe12087465" + "73743234333100ff120874657374323433320080130874657374323433330081130874657374323433340082130874" + "6573743234333500831308746573743234333600841308746573743234333700851308746573743234333800861308" + "7465737432343339008713087465737432343430008813087465737432343431008913087465737432343432008a13" + "087465737432343433008b13087465737432343434008c13087465737432343435008d13087465737432343436008e" + "13087465737432343437008f1308746573743234343800901308746573743234343900911308746573743234353000" + "9213087465737432343531009313087465737432343532009413087465737432343533009513087465737432343534" + "0096130874657374323435350097130874657374323435360098130874657374323435370099130874657374323435" + "38009a13087465737432343539009b13087465737432343630009c13087465737432343631009d1308746573743234" + "3632009e13087465737432343633009f1308746573743234363400a01308746573743234363500a113087465737432" + "34363600a21308746573743234363700a31308746573743234363800a41308746573743234363900a5130874657374" + "3234373000a61308746573743234373100a71308746573743234373200a81308746573743234373300a91308746573" + "743234373400aa1308746573743234373500ab1308746573743234373600ac1308746573743234373700ad13087465" + "73743234373800ae1308746573743234373900af1308746573743234383000b01308746573743234383100b1130874" + "6573743234383200b21308746573743234383300b31308746573743234383400b41308746573743234383500b51308" + "746573743234383600b61308746573743234383700b71308746573743234383800b81308746573743234383900b913" + "08746573743234393000ba1308746573743234393100bb1308746573743234393200bc1308746573743234393300bd" + "1308746573743234393400be1308746573743234393500bf1308746573743234393600c01308746573743234393700" + "c11308746573743234393800c21308746573743234393900c31308746573743235303000c413087465737432353031" + "00c51308746573743235303200c61308746573743235303300c71308746573743235303400c8130874657374323530" + "3500c91308746573743235303600ca1308746573743235303700cb1308746573743235303800cc1308746573743235" + "303900cd1308746573743235313000ce1308746573743235313100cf1308746573743235313200d013087465737432" + "35313300d11308746573743235313400d21308746573743235313500d31308746573743235313600d4130874657374" + "3235313700d51308746573743235313800d61308746573743235313900d71308746573743235323000d81308746573" + "743235323100d91308746573743235323200da1308746573743235323300db1308746573743235323400dc13087465" + "73743235323500dd1308746573743235323600de1308746573743235323700df1308746573743235323800e0130874" + "6573743235323900e11308746573743235333000e21308746573743235333100e31308746573743235333200e41308" + "746573743235333300e51308746573743235333400e61308746573743235333500e71308746573743235333600e813" + "08746573743235333700e91308746573743235333800ea1308746573743235333900eb1308746573743235343000ec" + "1308746573743235343100ed1308746573743235343200ee1308746573743235343300ef1308746573743235343400" + "f01308746573743235343500f11308746573743235343600f21308746573743235343700f313087465737432353438" + "00f41308746573743235343900f51308746573743235353000f61308746573743235353100f7130874657374323535" + "3200f81308746573743235353300f91308746573743235353400fa1308746573743235353500fb1308746573743235" + "353600fc1308746573743235353700fd1308746573743235353800fe1308746573743235353900ff13087465737432" + "3536300080140874657374323536310081140874657374323536320082140874657374323536330083140874657374" + "3235363400841408746573743235363500851408746573743235363600861408746573743235363700871408746573" + "7432353638008814087465737432353639008914087465737432353730008a14087465737432353731008b14087465" + "737432353732008c14087465737432353733008d14087465737432353734008e14087465737432353735008f140874" + "6573743235373600901408746573743235373700911408746573743235373800921408746573743235373900931408" + "7465737432353830009414087465737432353831009514087465737432353832009614087465737432353833009714" + "087465737432353834009814087465737432353835009914087465737432353836009a14087465737432353837009b" + "14087465737432353838009c14087465737432353839009d14087465737432353930009e1408746573743235393100" + "9f1408746573743235393200a01408746573743235393300a11408746573743235393400a214087465737432353935" + "00a31408746573743235393600a41408746573743235393700a51408746573743235393800a6140874657374323539" + "3900a71408746573743236303000a81408746573743236303100a91408746573743236303200aa1408746573743236" + "303300ab1408746573743236303400ac1408746573743236303500ad1408746573743236303600ae14087465737432" + "36303700af1408746573743236303800b01408746573743236303900b11408746573743236313000b2140874657374" + "3236313100b31408746573743236313200b41408746573743236313300b51408746573743236313400b61408746573" + "743236313500b71408746573743236313600b81408746573743236313700b91408746573743236313800ba14087465" + "73743236313900bb1408746573743236323000bc1408746573743236323100bd1408746573743236323200be140874" + "6573743236323300bf1408746573743236323400c01408746573743236323500c11408746573743236323600c21408" + "746573743236323700c31408746573743236323800c41408746573743236323900c51408746573743236333000c614" + "08746573743236333100c71408746573743236333200c81408746573743236333300c91408746573743236333400ca" + "1408746573743236333500cb1408746573743236333600cc1408746573743236333700cd1408746573743236333800" + "ce1408746573743236333900cf1408746573743236343000d01408746573743236343100d114087465737432363432" + "00d21408746573743236343300d31408746573743236343400d41408746573743236343500d5140874657374323634" + "3600d61408746573743236343700d71408746573743236343800d81408746573743236343900d91408746573743236" + "353000da1408746573743236353100db1408746573743236353200dc1408746573743236353300dd14087465737432" + "36353400de1408746573743236353500df1408746573743236353600e01408746573743236353700e1140874657374" + "3236353800e21408746573743236353900e31408746573743236363000e41408746573743236363100e51408746573" + "743236363200e61408746573743236363300e71408746573743236363400e81408746573743236363500e914087465" + "73743236363600ea1408746573743236363700eb1408746573743236363800ec1408746573743236363900ed140874" + "6573743236373000ee1408746573743236373100ef1408746573743236373200f01408746573743236373300f11408" + "746573743236373400f21408746573743236373500f31408746573743236373600f41408746573743236373700f514" + "08746573743236373800f61408746573743236373900f71408746573743236383000f81408746573743236383100f9" + "1408746573743236383200fa1408746573743236383300fb1408746573743236383400fc1408746573743236383500" + "fd1408746573743236383600fe1408746573743236383700ff14087465737432363838008015087465737432363839" + "0081150874657374323639300082150874657374323639310083150874657374323639320084150874657374323639" + "3300851508746573743236393400861508746573743236393500871508746573743236393600881508746573743236" + "3937008915087465737432363938008a15087465737432363939008b15087465737432373030008c15087465737432" + "373031008d15087465737432373032008e15087465737432373033008f150874657374323730340090150874657374" + "3237303500911508746573743237303600921508746573743237303700931508746573743237303800941508746573" + "7432373039009515087465737432373130009615087465737432373131009715087465737432373132009815087465" + "737432373133009915087465737432373134009a15087465737432373135009b15087465737432373136009c150874" + "65737432373137009d15087465737432373138009e15087465737432373139009f1508746573743237323000a01508" + "746573743237323100a11508746573743237323200a21508746573743237323300a31508746573743237323400a415" + "08746573743237323500a51508746573743237323600a61508746573743237323700a71508746573743237323800a8" + "1508746573743237323900a91508746573743237333000aa1508746573743237333100ab1508746573743237333200" + "ac1508746573743237333300ad1508746573743237333400ae1508746573743237333500af15087465737432373336" + "00b01508746573743237333700b11508746573743237333800b21508746573743237333900b3150874657374323734" + "3000b41508746573743237343100b51508746573743237343200b61508746573743237343300b71508746573743237" + "343400b81508746573743237343500b91508746573743237343600ba1508746573743237343700bb15087465737432" + "37343800bc1508746573743237343900bd1508746573743237353000be1508746573743237353100bf150874657374" + "3237353200c01508746573743237353300c11508746573743237353400c21508746573743237353500c31508746573" + "743237353600c41508746573743237353700c51508746573743237353800c61508746573743237353900c715087465" + "73743237363000c81508746573743237363100c91508746573743237363200ca1508746573743237363300cb150874" + "6573743237363400cc1508746573743237363500cd1508746573743237363600ce1508746573743237363700cf1508" + "746573743237363800d01508746573743237363900d11508746573743237373000d21508746573743237373100d315" + "08746573743237373200d41508746573743237373300d51508746573743237373400d61508746573743237373500d7" + "1508746573743237373600d81508746573743237373700d91508746573743237373800da1508746573743237373900" + "db1508746573743237383000dc1508746573743237383100dd1508746573743237383200de15087465737432373833" + "00df1508746573743237383400e01508746573743237383500e11508746573743237383600e2150874657374323738" + "3700e31508746573743237383800e41508746573743237383900e51508746573743237393000e61508746573743237" + "393100e71508746573743237393200e81508746573743237393300e91508746573743237393400ea15087465737432" + "37393500eb1508746573743237393600ec1508746573743237393700ed1508746573743237393800ee150874657374" + "3237393900ef1508746573743238303000f01508746573743238303100f11508746573743238303200f21508746573" + "743238303300f31508746573743238303400f41508746573743238303500f51508746573743238303600f615087465" + "73743238303700f71508746573743238303800f81508746573743238303900f91508746573743238313000fa150874" + "6573743238313100fb1508746573743238313200fc1508746573743238313300fd1508746573743238313400fe1508" + "746573743238313500ff15087465737432383136008016087465737432383137008116087465737432383138008216" + "0874657374323831390083160874657374323832300084160874657374323832310085160874657374323832320086" + "1608746573743238323300871608746573743238323400881608746573743238323500891608746573743238323600" + "8a16087465737432383237008b16087465737432383238008c16087465737432383239008d16087465737432383330" + "008e16087465737432383331008f160874657374323833320090160874657374323833330091160874657374323833" + "3400921608746573743238333500931608746573743238333600941608746573743238333700951608746573743238" + "3338009616087465737432383339009716087465737432383430009816087465737432383431009916087465737432" + "383432009a16087465737432383433009b16087465737432383434009c16087465737432383435009d160874657374" + "32383436009e16087465737432383437009f1608746573743238343800a01608746573743238343900a11608746573" + "743238353000a21608746573743238353100a31608746573743238353200a41608746573743238353300a516087465" + "73743238353400a61608746573743238353500a71608746573743238353600a81608746573743238353700a9160874" + "6573743238353800aa1608746573743238353900ab1608746573743238363000ac1608746573743238363100ad1608" + "746573743238363200ae1608746573743238363300af1608746573743238363400b01608746573743238363500b116" + "08746573743238363600b21608746573743238363700b31608746573743238363800b41608746573743238363900b5" + "1608746573743238373000b61608746573743238373100b71608746573743238373200b81608746573743238373300" + "b91608746573743238373400ba1608746573743238373500bb1608746573743238373600bc16087465737432383737" + "00bd1608746573743238373800be1608746573743238373900bf1608746573743238383000c0160874657374323838" + "3100c11608746573743238383200c21608746573743238383300c31608746573743238383400c41608746573743238" + "383500c51608746573743238383600c61608746573743238383700c71608746573743238383800c816087465737432" + "38383900c91608746573743238393000ca1608746573743238393100cb1608746573743238393200cc160874657374" + "3238393300cd1608746573743238393400ce1608746573743238393500cf1608746573743238393600d01608746573" + "743238393700d11608746573743238393800d21608746573743238393900d31608746573743239303000d416087465" + "73743239303100d51608746573743239303200d61608746573743239303300d71608746573743239303400d8160874" + "6573743239303500d91608746573743239303600da1608746573743239303700db1608746573743239303800dc1608" + "746573743239303900dd1608746573743239313000de1608746573743239313100df1608746573743239313200e016" + "08746573743239313300e11608746573743239313400e21608746573743239313500e31608746573743239313600e4" + "1608746573743239313700e51608746573743239313800e61608746573743239313900e71608746573743239323000" + "e81608746573743239323100e91608746573743239323200ea1608746573743239323300eb16087465737432393234" + "00ec1608746573743239323500ed1608746573743239323600ee1608746573743239323700ef160874657374323932" + "3800f01608746573743239323900f11608746573743239333000f21608746573743239333100f31608746573743239" + "333200f41608746573743239333300f51608746573743239333400f61608746573743239333500f716087465737432" + "39333600f81608746573743239333700f91608746573743239333800fa1608746573743239333900fb160874657374" + "3239343000fc1608746573743239343100fd1608746573743239343200fe1608746573743239343300ff1608746573" + "7432393434008017087465737432393435008117087465737432393436008217087465737432393437008317087465" + "7374323934380084170874657374323934390085170874657374323935300086170874657374323935310087170874" + "65737432393532008817087465737432393533008917087465737432393534008a17087465737432393535008b1708" + "7465737432393536008c17087465737432393537008d17087465737432393538008e17087465737432393539008f17" + "0874657374323936300090170874657374323936310091170874657374323936320092170874657374323936330093" + "1708746573743239363400941708746573743239363500951708746573743239363600961708746573743239363700" + "9717087465737432393638009817087465737432393639009917087465737432393730009a17087465737432393731" + "009b17087465737432393732009c17087465737432393733009d17087465737432393734009e170874657374323937" + "35009f1708746573743239373600a01708746573743239373700a11708746573743239373800a21708746573743239" + "373900a31708746573743239383000a41708746573743239383100a51708746573743239383200a617087465737432" + "39383300a71708746573743239383400a81708746573743239383500a91708746573743239383600aa170874657374" + "3239383700ab1708746573743239383800ac1708746573743239383900ad1708746573743239393000ae1708746573" + "743239393100af1708746573743239393200b01708746573743239393300b11708746573743239393400b217087465" + "73743239393500b31708746573743239393600b41708746573743239393700b51708746573743239393800b6170874" + "6573743239393900b71708746573743330303000b81708746573743330303100b91708746573743330303200ba1708" + "746573743330303300bb1708746573743330303400bc1708746573743330303500bd1708746573743330303600be17" + "08746573743330303700bf1708746573743330303800c01708746573743330303900c11708746573743330313000c2" + "1708746573743330313100c31708746573743330313200c41708746573743330313300c51708746573743330313400" + "c61708746573743330313500c71708746573743330313600c81708746573743330313700c917087465737433303138" + "00ca1708746573743330313900cb1708746573743330323000cc1708746573743330323100cd170874657374333032" + "3200ce1708746573743330323300cf1708746573743330323400d01708746573743330323500d11708746573743330" + "323600d21708746573743330323700d31708746573743330323800d41708746573743330323900d517087465737433" + "30333000d61708746573743330333100d71708746573743330333200d81708746573743330333300d9170874657374" + "3330333400da1708746573743330333500db1708746573743330333600dc1708746573743330333700dd1708746573" + "743330333800de1708746573743330333900df1708746573743330343000e01708746573743330343100e117087465" + "73743330343200e21708746573743330343300e31708746573743330343400e41708746573743330343500e5170874" + "6573743330343600e61708746573743330343700e71708746573743330343800e81708746573743330343900e91708" + "746573743330353000ea1708746573743330353100eb1708746573743330353200ec1708746573743330353300ed17" + "08746573743330353400ee1708746573743330353500ef1708746573743330353600f01708746573743330353700f1" + "1708746573743330353800f21708746573743330353900f31708746573743330363000f41708746573743330363100" + "f51708746573743330363200f61708746573743330363300f71708746573743330363400f817087465737433303635" + "00f91708746573743330363600fa1708746573743330363700fb1708746573743330363800fc170874657374333036" + "3900fd1708746573743330373000fe1708746573743330373100ff1708746573743330373200801808746573743330" + "3733008118087465737433303734008218087465737433303735008318087465737433303736008418087465737433" + "3037370085180874657374333037380086180874657374333037390087180874657374333038300088180874657374" + "33303831008918087465737433303832008a18087465737433303833008b18087465737433303834008c1808746573" + "7433303835008d18087465737433303836008e18087465737433303837008f18087465737433303838009018087465" + "7374333038390091180874657374333039300092180874657374333039310093180874657374333039320094180874" + "6573743330393300951808746573743330393400961808746573743330393500971808746573743330393600981808" + "7465737433303937009918087465737433303938009a18087465737433303939009b18087465737433313030009c18" + "087465737433313031009d18087465737433313032009e18087465737433313033009f1808746573743331303400a0" + "1808746573743331303500a11808746573743331303600a21808746573743331303700a31808746573743331303800" + "a41808746573743331303900a51808746573743331313000a61808746573743331313100a718087465737433313132" + "00a81808746573743331313300a91808746573743331313400aa1808746573743331313500ab180874657374333131" + "3600ac1808746573743331313700ad1808746573743331313800ae1808746573743331313900af1808746573743331" + "323000b01808746573743331323100b11808746573743331323200b21808746573743331323300b318087465737433" + "31323400b41808746573743331323500b51808746573743331323600b61808746573743331323700b7180874657374" + "3331323800b81808746573743331323900b91808746573743331333000ba1808746573743331333100bb1808746573" + "743331333200bc1808746573743331333300bd1808746573743331333400be1808746573743331333500bf18087465" + "73743331333600c01808746573743331333700c11808746573743331333800c21808746573743331333900c3180874" + "6573743331343000c41808746573743331343100c51808746573743331343200c61808746573743331343300c71808" + "746573743331343400c81808746573743331343500c91808746573743331343600ca1808746573743331343700cb18" + "08746573743331343800cc1808746573743331343900cd1808746573743331353000ce1808746573743331353100cf" + "1808746573743331353200d01808746573743331353300d11808746573743331353400d21808746573743331353500" + "d31808746573743331353600d41808746573743331353700d51808746573743331353800d618087465737433313539" + "00d71808746573743331363000d81808746573743331363100d91808746573743331363200da180874657374333136" + "3300db1808746573743331363400dc1808746573743331363500dd1808746573743331363600de1808746573743331" + "363700df1808746573743331363800e01808746573743331363900e11808746573743331373000e218087465737433" + "31373100e31808746573743331373200e41808746573743331373300e51808746573743331373400e6180874657374" + "3331373500e71808746573743331373600e81808746573743331373700e91808746573743331373800ea1808746573" + "743331373900eb1808746573743331383000ec1808746573743331383100ed1808746573743331383200ee18087465" + "73743331383300ef1808746573743331383400f01808746573743331383500f11808746573743331383600f2180874" + "6573743331383700f31808746573743331383800f41808746573743331383900f51808746573743331393000f61808" + "746573743331393100f71808746573743331393200f81808746573743331393300f91808746573743331393400fa18" + "08746573743331393500fb1808746573743331393600fc1808746573743331393700fd1808746573743331393800fe" + "1808746573743331393900ff1808746573743332303000801908746573743332303100811908746573743332303200" + "8219087465737433323033008319087465737433323034008419087465737433323035008519087465737433323036" + "0086190874657374333230370087190874657374333230380088190874657374333230390089190874657374333231" + "30008a19087465737433323131008b19087465737433323132008c19087465737433323133008d1908746573743332" + "3134008e19087465737433323135008f19087465737433323136009019087465737433323137009119087465737433" + "3231380092190874657374333231390093190874657374333232300094190874657374333232310095190874657374" + "3332323200961908746573743332323300971908746573743332323400981908746573743332323500991908746573" + "7433323236009a19087465737433323237009b19087465737433323238009c19087465737433323239009d19087465" + "737433323330009e19087465737433323331009f1908746573743332333200a01908746573743332333300a1190874" + "6573743332333400a21908746573743332333500a31908746573743332333600a41908746573743332333700a51908" + "746573743332333800a61908746573743332333900a71908746573743332343000a81908746573743332343100a919" + "08746573743332343200aa1908746573743332343300ab1908746573743332343400ac1908746573743332343500ad" + "1908746573743332343600ae1908746573743332343700af1908746573743332343800b01908746573743332343900" + "b11908746573743332353000b21908746573743332353100b31908746573743332353200b419087465737433323533" + "00b51908746573743332353400b61908746573743332353500b71908746573743332353600b8190874657374333235" + "3700b91908746573743332353800ba1908746573743332353900bb1908746573743332363000bc1908746573743332" + "363100bd1908746573743332363200be1908746573743332363300bf1908746573743332363400c019087465737433" + "32363500c11908746573743332363600c21908746573743332363700c31908746573743332363800c4190874657374" + "3332363900c51908746573743332373000c61908746573743332373100c71908746573743332373200c81908746573" + "743332373300c91908746573743332373400ca1908746573743332373500cb1908746573743332373600cc19087465" + "73743332373700cd1908746573743332373800ce1908746573743332373900cf1908746573743332383000d0190874" + "6573743332383100d11908746573743332383200d21908746573743332383300d31908746573743332383400d41908" + "746573743332383500d51908746573743332383600d61908746573743332383700d71908746573743332383800d819" + "08746573743332383900d91908746573743332393000da1908746573743332393100db1908746573743332393200dc" + "1908746573743332393300dd1908746573743332393400de1908746573743332393500df1908746573743332393600" + "e01908746573743332393700e11908746573743332393800e21908746573743332393900e319087465737433333030" + "00e41908746573743333303100e51908746573743333303200e61908746573743333303300e7190874657374333330" + "3400e81908746573743333303500e91908746573743333303600ea1908746573743333303700eb1908746573743333" + "303800ec1908746573743333303900ed1908746573743333313000ee1908746573743333313100ef19087465737433" + "33313200f01908746573743333313300f11908746573743333313400f21908746573743333313500f3190874657374" + "3333313600f41908746573743333313700f51908746573743333313800f61908746573743333313900f71908746573" + "743333323000f81908746573743333323100f91908746573743333323200fa1908746573743333323300fb19087465" + "73743333323400fc1908746573743333323500fd1908746573743333323600fe1908746573743333323700ff190874" + "6573743333323800801a08746573743333323900811a08746573743333333000821a08746573743333333100831a08" + "746573743333333200841a08746573743333333300851a08746573743333333400861a08746573743333333500871a" + "08746573743333333600881a08746573743333333700891a087465737433333338008a1a087465737433333339008b" + "1a087465737433333430008c1a087465737433333431008d1a087465737433333432008e1a08746573743333343300" + "8f1a08746573743333343400901a08746573743333343500911a08746573743333343600921a087465737433333437" + "00931a08746573743333343800941a08746573743333343900951a08746573743333353000961a0874657374333335" + "3100971a08746573743333353200981a08746573743333353300991a087465737433333534009a1a08746573743333" + "3535009b1a087465737433333536009c1a087465737433333537009d1a087465737433333538009e1a087465737433" + "333539009f1a08746573743333363000a01a08746573743333363100a11a08746573743333363200a21a0874657374" + "3333363300a31a08746573743333363400a41a08746573743333363500a51a08746573743333363600a61a08746573" + "743333363700a71a08746573743333363800a81a08746573743333363900a91a08746573743333373000aa1a087465" + "73743333373100ab1a08746573743333373200ac1a08746573743333373300ad1a08746573743333373400ae1a0874" + "6573743333373500af1a08746573743333373600b01a08746573743333373700b11a08746573743333373800b21a08" + "746573743333373900b31a08746573743333383000b41a08746573743333383100b51a08746573743333383200b61a" + "08746573743333383300b71a08746573743333383400b81a08746573743333383500b91a08746573743333383600ba" + "1a08746573743333383700bb1a08746573743333383800bc1a08746573743333383900bd1a08746573743333393000" + "be1a08746573743333393100bf1a08746573743333393200c01a08746573743333393300c11a087465737433333934" + "00c21a08746573743333393500c31a08746573743333393600c41a08746573743333393700c51a0874657374333339" + "3800c61a08746573743333393900c71a08746573743334303000c81a08746573743334303100c91a08746573743334" + "303200ca1a08746573743334303300cb1a08746573743334303400cc1a08746573743334303500cd1a087465737433" + "34303600ce1a08746573743334303700cf1a08746573743334303800d01a08746573743334303900d11a0874657374" + "3334313000d21a08746573743334313100d31a08746573743334313200d41a08746573743334313300d51a08746573" + "743334313400d61a08746573743334313500d71a08746573743334313600d81a08746573743334313700d91a087465" + "73743334313800da1a08746573743334313900db1a08746573743334323000dc1a08746573743334323100dd1a0874" + "6573743334323200de1a08746573743334323300df1a08746573743334323400e01a08746573743334323500e11a08" + "746573743334323600e21a08746573743334323700e31a08746573743334323800e41a08746573743334323900e51a" + "08746573743334333000e61a08746573743334333100e71a08746573743334333200e81a08746573743334333300e9" + "1a08746573743334333400ea1a08746573743334333500eb1a08746573743334333600ec1a08746573743334333700" + "ed1a08746573743334333800ee1a08746573743334333900ef1a08746573743334343000f01a087465737433343431" + "00f11a08746573743334343200f21a08746573743334343300f31a08746573743334343400f41a0874657374333434" + "3500f51a08746573743334343600f61a08746573743334343700f71a08746573743334343800f81a08746573743334" + "343900f91a08746573743334353000fa1a08746573743334353100fb1a08746573743334353200fc1a087465737433" + "34353300fd1a08746573743334353400fe1a08746573743334353500ff1a08746573743334353600801b0874657374" + "3334353700811b08746573743334353800821b08746573743334353900831b08746573743334363000841b08746573" + "743334363100851b08746573743334363200861b08746573743334363300871b08746573743334363400881b087465" + "73743334363500891b087465737433343636008a1b087465737433343637008b1b087465737433343638008c1b0874" + "65737433343639008d1b087465737433343730008e1b087465737433343731008f1b08746573743334373200901b08" + "746573743334373300911b08746573743334373400921b08746573743334373500931b08746573743334373600941b" + "08746573743334373700951b08746573743334373800961b08746573743334373900971b0874657374333438300098" + "1b08746573743334383100991b087465737433343832009a1b087465737433343833009b1b08746573743334383400" + "9c1b087465737433343835009d1b087465737433343836009e1b087465737433343837009f1b087465737433343838" + "00a01b08746573743334383900a11b08746573743334393000a21b08746573743334393100a31b0874657374333439" + "3200a41b08746573743334393300a51b08746573743334393400a61b08746573743334393500a71b08746573743334" + "393600a81b08746573743334393700a91b08746573743334393800aa1b08746573743334393900ab1b087465737433" + "35303000ac1b08746573743335303100ad1b08746573743335303200ae1b08746573743335303300af1b0874657374" + "3335303400b01b08746573743335303500b11b08746573743335303600b21b08746573743335303700b31b08746573" + "743335303800b41b08746573743335303900b51b08746573743335313000b61b08746573743335313100b71b087465" + "73743335313200b81b08746573743335313300b91b08746573743335313400ba1b08746573743335313500bb1b0874" + "6573743335313600bc1b08746573743335313700bd1b08746573743335313800be1b08746573743335313900bf1b08" + "746573743335323000c01b08746573743335323100c11b08746573743335323200c21b08746573743335323300c31b" + "08746573743335323400c41b08746573743335323500c51b08746573743335323600c61b08746573743335323700c7" + "1b08746573743335323800c81b08746573743335323900c91b08746573743335333000ca1b08746573743335333100" + "cb1b08746573743335333200cc1b08746573743335333300cd1b08746573743335333400ce1b087465737433353335" + "00cf1b08746573743335333600d01b08746573743335333700d11b08746573743335333800d21b0874657374333533" + "3900d31b08746573743335343000d41b08746573743335343100d51b08746573743335343200d61b08746573743335" + "343300d71b08746573743335343400d81b08746573743335343500d91b08746573743335343600da1b087465737433" + "35343700db1b08746573743335343800dc1b08746573743335343900dd1b08746573743335353000de1b0874657374" + "3335353100df1b08746573743335353200e01b08746573743335353300e11b08746573743335353400e21b08746573" + "743335353500e31b08746573743335353600e41b08746573743335353700e51b08746573743335353800e61b087465" + "73743335353900e71b08746573743335363000e81b08746573743335363100e91b08746573743335363200ea1b0874" + "6573743335363300eb1b08746573743335363400ec1b08746573743335363500ed1b08746573743335363600ee1b08" + "746573743335363700ef1b08746573743335363800f01b08746573743335363900f11b08746573743335373000f21b" + "08746573743335373100f31b08746573743335373200f41b08746573743335373300f51b08746573743335373400f6" + "1b08746573743335373500f71b08746573743335373600f81b08746573743335373700f91b08746573743335373800" + "fa1b08746573743335373900fb1b08746573743335383000fc1b08746573743335383100fd1b087465737433353832" + "00fe1b08746573743335383300ff1b08746573743335383400801c08746573743335383500811c0874657374333538" + "3600821c08746573743335383700831c08746573743335383800841c08746573743335383900851c08746573743335" + "393000861c08746573743335393100871c08746573743335393200881c08746573743335393300891c087465737433" + "353934008a1c087465737433353935008b1c087465737433353936008c1c087465737433353937008d1c0874657374" + "33353938008e1c087465737433353939008f1c08746573743336303000901c08746573743336303100911c08746573" + "743336303200921c08746573743336303300931c08746573743336303400941c08746573743336303500951c087465" + "73743336303600961c08746573743336303700971c08746573743336303800981c08746573743336303900991c0874" + "65737433363130009a1c087465737433363131009b1c087465737433363132009c1c087465737433363133009d1c08" + "7465737433363134009e1c087465737433363135009f1c08746573743336313600a01c08746573743336313700a11c" + "08746573743336313800a21c08746573743336313900a31c08746573743336323000a41c08746573743336323100a5" + "1c08746573743336323200a61c08746573743336323300a71c08746573743336323400a81c08746573743336323500" + "a91c08746573743336323600aa1c08746573743336323700ab1c08746573743336323800ac1c087465737433363239" + "00ad1c08746573743336333000ae1c08746573743336333100af1c08746573743336333200b01c0874657374333633" + "3300b11c08746573743336333400b21c08746573743336333500b31c08746573743336333600b41c08746573743336" + "333700b51c08746573743336333800b61c08746573743336333900b71c08746573743336343000b81c087465737433" + "36343100b91c08746573743336343200ba1c08746573743336343300bb1c08746573743336343400bc1c0874657374" + "3336343500bd1c08746573743336343600be1c08746573743336343700bf1c08746573743336343800c01c08746573" + "743336343900c11c08746573743336353000c21c08746573743336353100c31c08746573743336353200c41c087465" + "73743336353300c51c08746573743336353400c61c08746573743336353500c71c08746573743336353600c81c0874" + "6573743336353700c91c08746573743336353800ca1c08746573743336353900cb1c08746573743336363000cc1c08" + "746573743336363100cd1c08746573743336363200ce1c08746573743336363300cf1c08746573743336363400d01c" + "08746573743336363500d11c08746573743336363600d21c08746573743336363700d31c08746573743336363800d4" + "1c08746573743336363900d51c08746573743336373000d61c08746573743336373100d71c08746573743336373200" + "d81c08746573743336373300d91c08746573743336373400da1c08746573743336373500db1c087465737433363736" + "00dc1c08746573743336373700dd1c08746573743336373800de1c08746573743336373900df1c0874657374333638" + "3000e01c08746573743336383100e11c08746573743336383200e21c08746573743336383300e31c08746573743336" + "383400e41c08746573743336383500e51c08746573743336383600e61c08746573743336383700e71c087465737433" + "36383800e81c08746573743336383900e91c08746573743336393000ea1c08746573743336393100eb1c0874657374" + "3336393200ec1c08746573743336393300ed1c08746573743336393400ee1c08746573743336393500ef1c08746573" + "743336393600f01c08746573743336393700f11c08746573743336393800f21c08746573743336393900f31c087465" + "73743337303000f41c08746573743337303100f51c08746573743337303200f61c08746573743337303300f71c0874" + "6573743337303400f81c08746573743337303500f91c08746573743337303600fa1c08746573743337303700fb1c08" + "746573743337303800fc1c08746573743337303900fd1c08746573743337313000fe1c08746573743337313100ff1c" + "08746573743337313200801d08746573743337313300811d08746573743337313400821d0874657374333731350083" + "1d08746573743337313600841d08746573743337313700851d08746573743337313800861d08746573743337313900" + "871d08746573743337323000881d08746573743337323100891d087465737433373232008a1d087465737433373233" + "008b1d087465737433373234008c1d087465737433373235008d1d087465737433373236008e1d0874657374333732" + "37008f1d08746573743337323800901d08746573743337323900911d08746573743337333000921d08746573743337" + "333100931d08746573743337333200941d08746573743337333300951d08746573743337333400961d087465737433" + "37333500971d08746573743337333600981d08746573743337333700991d087465737433373338009a1d0874657374" + "33373339009b1d087465737433373430009c1d087465737433373431009d1d087465737433373432009e1d08746573" + "7433373433009f1d08746573743337343400a01d08746573743337343500a11d08746573743337343600a21d087465" + "73743337343700a31d08746573743337343800a41d08746573743337343900a51d08746573743337353000a61d0874" + "6573743337353100a71d08746573743337353200a81d08746573743337353300a91d08746573743337353400aa1d08" + "746573743337353500ab1d08746573743337353600ac1d08746573743337353700ad1d08746573743337353800ae1d" + "08746573743337353900af1d08746573743337363000b01d08746573743337363100b11d08746573743337363200b2" + "1d08746573743337363300b31d08746573743337363400b41d08746573743337363500b51d08746573743337363600" + "b61d08746573743337363700b71d08746573743337363800b81d08746573743337363900b91d087465737433373730" + "00ba1d08746573743337373100bb1d08746573743337373200bc1d08746573743337373300bd1d0874657374333737" + "3400be1d08746573743337373500bf1d08746573743337373600c01d08746573743337373700c11d08746573743337" + "373800c21d08746573743337373900c31d08746573743337383000c41d08746573743337383100c51d087465737433" + "37383200c61d08746573743337383300c71d08746573743337383400c81d08746573743337383500c91d0874657374" + "3337383600ca1d08746573743337383700cb1d08746573743337383800cc1d08746573743337383900cd1d08746573" + "743337393000ce1d08746573743337393100cf1d08746573743337393200d01d08746573743337393300d11d087465" + "73743337393400d21d08746573743337393500d31d08746573743337393600d41d08746573743337393700d51d0874" + "6573743337393800d61d08746573743337393900d71d08746573743338303000d81d08746573743338303100d91d08" + "746573743338303200da1d08746573743338303300db1d08746573743338303400dc1d08746573743338303500dd1d" + "08746573743338303600de1d08746573743338303700df1d08746573743338303800e01d08746573743338303900e1" + "1d08746573743338313000e21d08746573743338313100e31d08746573743338313200e41d08746573743338313300" + "e51d08746573743338313400e61d08746573743338313500e71d08746573743338313600e81d087465737433383137" + "00e91d08746573743338313800ea1d08746573743338313900eb1d08746573743338323000ec1d0874657374333832" + "3100ed1d08746573743338323200ee1d08746573743338323300ef1d08746573743338323400f01d08746573743338" + "323500f11d08746573743338323600f21d08746573743338323700f31d08746573743338323800f41d087465737433" + "38323900f51d08746573743338333000f61d08746573743338333100f71d08746573743338333200f81d0874657374" + "3338333300f91d08746573743338333400fa1d08746573743338333500fb1d08746573743338333600fc1d08746573" + "743338333700fd1d08746573743338333800fe1d08746573743338333900ff1d08746573743338343000801e087465" + "73743338343100811e08746573743338343200821e08746573743338343300831e08746573743338343400841e0874" + "6573743338343500851e08746573743338343600861e08746573743338343700871e08746573743338343800881e08" + "746573743338343900891e087465737433383530008a1e087465737433383531008b1e087465737433383532008c1e" + "087465737433383533008d1e087465737433383534008e1e087465737433383535008f1e0874657374333835360090" + "1e08746573743338353700911e08746573743338353800921e08746573743338353900931e08746573743338363000" + "941e08746573743338363100951e08746573743338363200961e08746573743338363300971e087465737433383634" + "00981e08746573743338363500991e087465737433383636009a1e087465737433383637009b1e0874657374333836" + "38009c1e087465737433383639009d1e087465737433383730009e1e087465737433383731009f1e08746573743338" + "373200a01e08746573743338373300a11e08746573743338373400a21e08746573743338373500a31e087465737433" + "38373600a41e08746573743338373700a51e08746573743338373800a61e08746573743338373900a71e0874657374" + "3338383000a81e08746573743338383100a91e08746573743338383200aa1e08746573743338383300ab1e08746573" + "743338383400ac1e08746573743338383500ad1e08746573743338383600ae1e08746573743338383700af1e087465" + "73743338383800b01e08746573743338383900b11e08746573743338393000b21e08746573743338393100b31e0874" + "6573743338393200b41e08746573743338393300b51e08746573743338393400b61e08746573743338393500b71e08" + "746573743338393600b81e08746573743338393700b91e08746573743338393800ba1e08746573743338393900bb1e" + "08746573743339303000bc1e08746573743339303100bd1e08746573743339303200be1e08746573743339303300bf" + "1e08746573743339303400c01e08746573743339303500c11e08746573743339303600c21e08746573743339303700" + "c31e08746573743339303800c41e08746573743339303900c51e08746573743339313000c61e087465737433393131" + "00c71e08746573743339313200c81e08746573743339313300c91e08746573743339313400ca1e0874657374333931" + "3500cb1e08746573743339313600cc1e08746573743339313700cd1e08746573743339313800ce1e08746573743339" + "313900cf1e08746573743339323000d01e08746573743339323100d11e08746573743339323200d21e087465737433" + "39323300d31e08746573743339323400d41e08746573743339323500d51e08746573743339323600d61e0874657374" + "3339323700d71e08746573743339323800d81e08746573743339323900d91e08746573743339333000da1e08746573" + "743339333100db1e08746573743339333200dc1e08746573743339333300dd1e08746573743339333400de1e087465" + "73743339333500df1e08746573743339333600e01e08746573743339333700e11e08746573743339333800e21e0874" + "6573743339333900e31e08746573743339343000e41e08746573743339343100e51e08746573743339343200e61e08" + "746573743339343300e71e08746573743339343400e81e08746573743339343500e91e08746573743339343600ea1e" + "08746573743339343700eb1e08746573743339343800ec1e08746573743339343900ed1e08746573743339353000ee" + "1e08746573743339353100ef1e08746573743339353200f01e08746573743339353300f11e08746573743339353400" + "f21e08746573743339353500f31e08746573743339353600f41e08746573743339353700f51e087465737433393538" + "00f61e08746573743339353900f71e08746573743339363000f81e08746573743339363100f91e0874657374333936" + "3200fa1e08746573743339363300fb1e08746573743339363400fc1e08746573743339363500fd1e08746573743339" + "363600fe1e08746573743339363700ff1e08746573743339363800801f08746573743339363900811f087465737433" + "39373000821f08746573743339373100831f08746573743339373200841f08746573743339373300851f0874657374" + "3339373400861f08746573743339373500871f08746573743339373600881f08746573743339373700891f08746573" + "7433393738008a1f087465737433393739008b1f087465737433393830008c1f087465737433393831008d1f087465" + "737433393832008e1f087465737433393833008f1f08746573743339383400901f08746573743339383500911f0874" + "6573743339383600921f08746573743339383700931f08746573743339383800941f08746573743339383900951f08" + "746573743339393000961f08746573743339393100971f08746573743339393200981f08746573743339393300991f" + "087465737433393934009a1f087465737433393935009b1f087465737433393936009c1f087465737433393937009d" + "1f087465737433393938009e1f087465737433393939009f1f08746573743430303000a01f08746573743430303100" + "a11f08746573743430303200a21f08746573743430303300a31f08746573743430303400a41f087465737434303035" + "00a51f08746573743430303600a61f08746573743430303700a71f08746573743430303800a81f0874657374343030" + "3900a91f08746573743430313000aa1f08746573743430313100ab1f08746573743430313200ac1f08746573743430" + "313300ad1f08746573743430313400ae1f08746573743430313500af1f08746573743430313600b01f087465737434" + "30313700b11f08746573743430313800b21f08746573743430313900b31f08746573743430323000b41f0874657374" + "3430323100b51f08746573743430323200b61f08746573743430323300b71f08746573743430323400b81f08746573" + "743430323500b91f08746573743430323600ba1f08746573743430323700bb1f08746573743430323800bc1f087465" + "73743430323900bd1f08746573743430333000be1f08746573743430333100bf1f08746573743430333200c01f0874" + "6573743430333300c11f08746573743430333400c21f08746573743430333500c31f08746573743430333600c41f08" + "746573743430333700c51f08746573743430333800c61f08746573743430333900c71f08746573743430343000c81f" + "08746573743430343100c91f08746573743430343200ca1f08746573743430343300cb1f08746573743430343400cc" + "1f08746573743430343500cd1f08746573743430343600ce1f08746573743430343700cf1f08746573743430343800" + "d01f08746573743430343900d11f08746573743430353000d21f08746573743430353100d31f087465737434303532" + "00d41f08746573743430353300d51f08746573743430353400d61f08746573743430353500d71f0874657374343035" + "3600d81f08746573743430353700d91f08746573743430353800da1f08746573743430353900db1f08746573743430" + "363000dc1f08746573743430363100dd1f08746573743430363200de1f08746573743430363300df1f087465737434" + "30363400e01f08746573743430363500e11f08746573743430363600e21f08746573743430363700e31f0874657374" + "3430363800e41f08746573743430363900e51f08746573743430373000e61f08746573743430373100e71f08746573" + "743430373200e81f08746573743430373300e91f08746573743430373400ea1f08746573743430373500eb1f087465" + "73743430373600ec1f08746573743430373700ed1f08746573743430373800ee1f08746573743430373900ef1f0874" + "6573743430383000f01f08746573743430383100f11f08746573743430383200f21f08746573743430383300f31f08" + "746573743430383400f41f08746573743430383500f51f08746573743430383600f61f08746573743430383700f71f" + "08746573743430383800f81f08746573743430383900f91f08746573743430393000fa1f08746573743430393100fb" + "1f08746573743430393200fc1f08746573743430393300fd1f08746573743430393400fe1f08746573743430393500" + "ff1f087465737434303936008020087465737434303937008120087465737434303938008220087465737434303939" + "0083200874657374343130300084200874657374343130310085200874657374343130320086200874657374343130" + "33008720087465737434313034008820087465737434313035008920087465737434313036008a2008746573743431" + "3037008b20087465737434313038008c20087465737434313039008d20087465737434313130008e20087465737434" + "313131008f200874657374343131320090200874657374343131330091200874657374343131340092200874657374" + "3431313500932008746573743431313600942008746573743431313700952008746573743431313800962008746573" + "7434313139009720087465737434313230009820087465737434313231009920087465737434313232009a20087465" + "737434313233009b20087465737434313234009c20087465737434313235009d20087465737434313236009e200874" + "65737434313237009f2008746573743431323800a02008746573743431323900a12008746573743431333000a22008" + "746573743431333100a32008746573743431333200a42008746573743431333300a52008746573743431333400a620" + "08746573743431333500a72008746573743431333600a82008746573743431333700a92008746573743431333800aa" + "2008746573743431333900ab2008746573743431343000ac2008746573743431343100ad2008746573743431343200" + "ae2008746573743431343300af2008746573743431343400b02008746573743431343500b120087465737434313436" + "00b22008746573743431343700b32008746573743431343800b42008746573743431343900b5200874657374343135" + "3000b62008746573743431353100b72008746573743431353200b82008746573743431353300b92008746573743431" + "353400ba2008746573743431353500bb2008746573743431353600bc2008746573743431353700bd20087465737434" + "31353800be2008746573743431353900bf2008746573743431363000c02008746573743431363100c1200874657374" + "3431363200c22008746573743431363300c32008746573743431363400c42008746573743431363500c52008746573" + "743431363600c62008746573743431363700c72008746573743431363800c82008746573743431363900c920087465" + "73743431373000ca2008746573743431373100cb2008746573743431373200cc2008746573743431373300cd200874" + "6573743431373400ce2008746573743431373500cf2008746573743431373600d02008746573743431373700d12008" + "746573743431373800d22008746573743431373900d32008746573743431383000d42008746573743431383100d520" + "08746573743431383200d62008746573743431383300d72008746573743431383400d82008746573743431383500d9" + "2008746573743431383600da2008746573743431383700db2008746573743431383800dc2008746573743431383900" + "dd2008746573743431393000de2008746573743431393100df2008746573743431393200e020087465737434313933" + "00e12008746573743431393400e22008746573743431393500e32008746573743431393600e4200874657374343139" + "3700e52008746573743431393800e62008746573743431393900e72008746573743432303000e82008746573743432" + "303100e92008746573743432303200ea2008746573743432303300eb2008746573743432303400ec20087465737434" + "32303500ed2008746573743432303600ee2008746573743432303700ef2008746573743432303800f0200874657374" + "3432303900f12008746573743432313000f22008746573743432313100f32008746573743432313200f42008746573" + "743432313300f52008746573743432313400f62008746573743432313500f72008746573743432313600f820087465" + "73743432313700f92008746573743432313800fa2008746573743432313900fb2008746573743432323000fc200874" + "6573743432323100fd2008746573743432323200fe2008746573743432323300ff2008746573743432323400802108" + "7465737434323235008121087465737434323236008221087465737434323237008321087465737434323238008421" + "0874657374343232390085210874657374343233300086210874657374343233310087210874657374343233320088" + "21087465737434323333008921087465737434323334008a21087465737434323335008b2108746573743432333600" + "8c21087465737434323337008d21087465737434323338008e21087465737434323339008f21087465737434323430" + "0090210874657374343234310091210874657374343234320092210874657374343234330093210874657374343234" + "3400942108746573743432343500952108746573743432343600962108746573743432343700972108746573743432" + "3438009821087465737434323439009921087465737434323530009a21087465737434323531009b21087465737434" + "323532009c21087465737434323533009d21087465737434323534009e21087465737434323535009f210874657374" + "3432353600a02108746573743432353700a12108746573743432353800a22108746573743432353900a32108746573" + "743432363000a42108746573743432363100a52108746573743432363200a62108746573743432363300a721087465" + "73743432363400a82108746573743432363500a92108746573743432363600aa2108746573743432363700ab210874" + "6573743432363800ac2108746573743432363900ad2108746573743432373000ae2108746573743432373100af2108" + "746573743432373200b02108746573743432373300b12108746573743432373400b22108746573743432373500b321" + "08746573743432373600b42108746573743432373700b52108746573743432373800b62108746573743432373900b7" + "2108746573743432383000b82108746573743432383100b92108746573743432383200ba2108746573743432383300" + "bb2108746573743432383400bc2108746573743432383500bd2108746573743432383600be21087465737434323837" + "00bf2108746573743432383800c02108746573743432383900c12108746573743432393000c2210874657374343239" + "3100c32108746573743432393200c42108746573743432393300c52108746573743432393400c62108746573743432" + "393500c72108746573743432393600c82108746573743432393700c92108746573743432393800ca21087465737434" + "32393900cb2108746573743433303000cc2108746573743433303100cd2108746573743433303200ce210874657374" + "3433303300cf2108746573743433303400d02108746573743433303500d12108746573743433303600d22108746573" + "743433303700d32108746573743433303800d42108746573743433303900d52108746573743433313000d621087465" + "73743433313100d72108746573743433313200d82108746573743433313300d92108746573743433313400da210874" + "6573743433313500db2108746573743433313600dc2108746573743433313700dd2108746573743433313800de2108" + "746573743433313900df2108746573743433323000e02108746573743433323100e12108746573743433323200e221" + "08746573743433323300e32108746573743433323400e42108746573743433323500e52108746573743433323600e6" + "2108746573743433323700e72108746573743433323800e82108746573743433323900e92108746573743433333000" + "ea2108746573743433333100eb2108746573743433333200ec2108746573743433333300ed21087465737434333334" + "00ee2108746573743433333500ef2108746573743433333600f02108746573743433333700f1210874657374343333" + "3800f22108746573743433333900f32108746573743433343000f42108746573743433343100f52108746573743433" + "343200f62108746573743433343300f72108746573743433343400f82108746573743433343500f921087465737434" + "33343600fa2108746573743433343700fb2108746573743433343800fc2108746573743433343900fd210874657374" + "3433353000fe2108746573743433353100ff2108746573743433353200802208746573743433353300812208746573" + "7434333534008222087465737434333535008322087465737434333536008422087465737434333537008522087465" + "7374343335380086220874657374343335390087220874657374343336300088220874657374343336310089220874" + "65737434333632008a22087465737434333633008b22087465737434333634008c22087465737434333635008d2208" + "7465737434333636008e22087465737434333637008f22087465737434333638009022087465737434333639009122" + "0874657374343337300092220874657374343337310093220874657374343337320094220874657374343337330095" + "2208746573743433373400962208746573743433373500972208746573743433373600982208746573743433373700" + "9922087465737434333738009a22087465737434333739009b22087465737434333830009c22087465737434333831" + "009d22087465737434333832009e22087465737434333833009f2208746573743433383400a0220874657374343338" + "3500a12208746573743433383600a22208746573743433383700a32208746573743433383800a42208746573743433" + "383900a52208746573743433393000a62208746573743433393100a72208746573743433393200a822087465737434" + "33393300a92208746573743433393400aa2208746573743433393500ab2208746573743433393600ac220874657374" + "3433393700ad2208746573743433393800ae2208746573743433393900af2208746573743434303000b02208746573" + "743434303100b12208746573743434303200b22208746573743434303300b32208746573743434303400b422087465" + "73743434303500b52208746573743434303600b62208746573743434303700b72208746573743434303800b8220874" + "6573743434303900b92208746573743434313000ba2208746573743434313100bb2208746573743434313200bc2208" + "746573743434313300bd2208746573743434313400be2208746573743434313500bf2208746573743434313600c022" + "08746573743434313700c12208746573743434313800c22208746573743434313900c32208746573743434323000c4" + "2208746573743434323100c52208746573743434323200c62208746573743434323300c72208746573743434323400" + "c82208746573743434323500c92208746573743434323600ca2208746573743434323700cb22087465737434343238" + "00cc2208746573743434323900cd2208746573743434333000ce2208746573743434333100cf220874657374343433" + "3200d02208746573743434333300d12208746573743434333400d22208746573743434333500d32208746573743434" + "333600d42208746573743434333700d52208746573743434333800d62208746573743434333900d722087465737434" + "34343000d82208746573743434343100d92208746573743434343200da2208746573743434343300db220874657374" + "3434343400dc2208746573743434343500dd2208746573743434343600de2208746573743434343700df2208746573" + "743434343800e02208746573743434343900e12208746573743434353000e22208746573743434353100e322087465" + "73743434353200e42208746573743434353300e52208746573743434353400e62208746573743434353500e7220874" + "6573743434353600e82208746573743434353700e92208746573743434353800ea2208746573743434353900eb2208" + "746573743434363000ec2208746573743434363100ed2208746573743434363200ee2208746573743434363300ef22" + "08746573743434363400f02208746573743434363500f12208746573743434363600f22208746573743434363700f3" + "2208746573743434363800f42208746573743434363900f52208746573743434373000f62208746573743434373100" + "f72208746573743434373200f82208746573743434373300f92208746573743434373400fa22087465737434343735" + "00fb2208746573743434373600fc2208746573743434373700fd2208746573743434373800fe220874657374343437" + "3900ff2208746573743434383000802308746573743434383100812308746573743434383200822308746573743434" + "3833008323087465737434343834008423087465737434343835008523087465737434343836008623087465737434" + "343837008723087465737434343838008823087465737434343839008923087465737434343930008a230874657374" + "34343931008b23087465737434343932008c23087465737434343933008d23087465737434343934008e2308746573" + "7434343935008f23087465737434343936009023087465737434343937009123087465737434343938009223087465" + "7374343439390093230874657374343530300094230874657374343530310095230874657374343530320096230874" + "65737434353033009723087465737434353034009823087465737434353035009923087465737434353036009a2308" + "7465737434353037009b23087465737434353038009c23087465737434353039009d23087465737434353130009e23" + "087465737434353131009f2308746573743435313200a02308746573743435313300a12308746573743435313400a2" + "2308746573743435313500a32308746573743435313600a42308746573743435313700a52308746573743435313800" + "a62308746573743435313900a72308746573743435323000a82308746573743435323100a923087465737434353232" + "00aa2308746573743435323300ab2308746573743435323400ac2308746573743435323500ad230874657374343532" + "3600ae2308746573743435323700af2308746573743435323800b02308746573743435323900b12308746573743435" + "333000b22308746573743435333100b32308746573743435333200b42308746573743435333300b523087465737434" + "35333400b62308746573743435333500b72308746573743435333600b82308746573743435333700b9230874657374" + "3435333800ba2308746573743435333900bb2308746573743435343000bc2308746573743435343100bd2308746573" + "743435343200be2308746573743435343300bf2308746573743435343400c02308746573743435343500c123087465" + "73743435343600c22308746573743435343700c32308746573743435343800c42308746573743435343900c5230874" + "6573743435353000c62308746573743435353100c72308746573743435353200c82308746573743435353300c92308" + "746573743435353400ca2308746573743435353500cb2308746573743435353600cc2308746573743435353700cd23" + "08746573743435353800ce2308746573743435353900cf2308746573743435363000d02308746573743435363100d1" + "2308746573743435363200d22308746573743435363300d32308746573743435363400d42308746573743435363500" + "d52308746573743435363600d62308746573743435363700d72308746573743435363800d823087465737434353639" + "00d92308746573743435373000da2308746573743435373100db2308746573743435373200dc230874657374343537" + "3300dd2308746573743435373400de2308746573743435373500df2308746573743435373600e02308746573743435" + "373700e12308746573743435373800e22308746573743435373900e32308746573743435383000e423087465737434" + "35383100e52308746573743435383200e62308746573743435383300e72308746573743435383400e8230874657374" + "3435383500e92308746573743435383600ea2308746573743435383700eb2308746573743435383800ec2308746573" + "743435383900ed2308746573743435393000ee2308746573743435393100ef2308746573743435393200f023087465" + "73743435393300f12308746573743435393400f22308746573743435393500f32308746573743435393600f4230874" + "6573743435393700f52308746573743435393800f62308746573743435393900f72308746573743436303000f82308" + "746573743436303100f92308746573743436303200fa2308746573743436303300fb2308746573743436303400fc23" + "08746573743436303500fd2308746573743436303600fe2308746573743436303700ff230874657374343630380080" + "2408746573743436303900812408746573743436313000822408746573743436313100832408746573743436313200" + "8424087465737434363133008524087465737434363134008624087465737434363135008724087465737434363136" + "008824087465737434363137008924087465737434363138008a24087465737434363139008b240874657374343632" + "30008c24087465737434363231008d24087465737434363232008e24087465737434363233008f2408746573743436" + "3234009024087465737434363235009124087465737434363236009224087465737434363237009324087465737434" + "3632380094240874657374343632390095240874657374343633300096240874657374343633310097240874657374" + "34363332009824087465737434363333009924087465737434363334009a24087465737434363335009b2408746573" + "7434363336009c24087465737434363337009d24087465737434363338009e24087465737434363339009f24087465" + "73743436343000a02408746573743436343100a12408746573743436343200a22408746573743436343300a3240874" + "6573743436343400a42408746573743436343500a52408746573743436343600a62408746573743436343700a72408" + "746573743436343800a82408746573743436343900a92408746573743436353000aa2408746573743436353100ab24" + "08746573743436353200ac2408746573743436353300ad2408746573743436353400ae2408746573743436353500af" + "2408746573743436353600b02408746573743436353700b12408746573743436353800b22408746573743436353900" + "b32408746573743436363000b42408746573743436363100b52408746573743436363200b624087465737434363633" + "00b72408746573743436363400b82408746573743436363500b92408746573743436363600ba240874657374343636" + "3700bb2408746573743436363800bc2408746573743436363900bd2408746573743436373000be2408746573743436" + "373100bf2408746573743436373200c02408746573743436373300c12408746573743436373400c224087465737434" + "36373500c32408746573743436373600c42408746573743436373700c52408746573743436373800c6240874657374" + "3436373900c72408746573743436383000c82408746573743436383100c92408746573743436383200ca2408746573" + "743436383300cb2408746573743436383400cc2408746573743436383500cd2408746573743436383600ce24087465" + "73743436383700cf2408746573743436383800d02408746573743436383900d12408746573743436393000d2240874" + "6573743436393100d32408746573743436393200d42408746573743436393300d52408746573743436393400d62408" + "746573743436393500d72408746573743436393600d82408746573743436393700d92408746573743436393800da24" + "08746573743436393900db2408746573743437303000dc2408746573743437303100dd2408746573743437303200de" + "2408746573743437303300df2408746573743437303400e02408746573743437303500e12408746573743437303600" + "e22408746573743437303700e32408746573743437303800e42408746573743437303900e524087465737434373130" + "00e62408746573743437313100e72408746573743437313200e82408746573743437313300e9240874657374343731" + "3400ea2408746573743437313500eb2408746573743437313600ec2408746573743437313700ed2408746573743437" + "313800ee2408746573743437313900ef2408746573743437323000f02408746573743437323100f124087465737434" + "37323200f22408746573743437323300f32408746573743437323400f42408746573743437323500f5240874657374" + "3437323600f62408746573743437323700f72408746573743437323800f82408746573743437323900f92408746573" + "743437333000fa2408746573743437333100fb2408746573743437333200fc2408746573743437333300fd24087465" + "73743437333400fe2408746573743437333500ff240874657374343733360080250874657374343733370081250874" + "6573743437333800822508746573743437333900832508746573743437343000842508746573743437343100852508" + "7465737434373432008625087465737434373433008725087465737434373434008825087465737434373435008925" + "087465737434373436008a25087465737434373437008b25087465737434373438008c25087465737434373439008d" + "25087465737434373530008e25087465737434373531008f2508746573743437353200902508746573743437353300" + "9125087465737434373534009225087465737434373535009325087465737434373536009425087465737434373537" + "0095250874657374343735380096250874657374343735390097250874657374343736300098250874657374343736" + "31009925087465737434373632009a25087465737434373633009b25087465737434373634009c2508746573743437" + "3635009d25087465737434373636009e25087465737434373637009f2508746573743437363800a025087465737434" + "37363900a12508746573743437373000a22508746573743437373100a32508746573743437373200a4250874657374" + "3437373300a52508746573743437373400a62508746573743437373500a72508746573743437373600a82508746573" + "743437373700a92508746573743437373800aa2508746573743437373900ab2508746573743437383000ac25087465" + "73743437383100ad2508746573743437383200ae2508746573743437383300af2508746573743437383400b0250874" + "6573743437383500b12508746573743437383600b22508746573743437383700b32508746573743437383800b42508" + "746573743437383900b52508746573743437393000b62508746573743437393100b72508746573743437393200b825" + "08746573743437393300b92508746573743437393400ba2508746573743437393500bb2508746573743437393600bc" + "2508746573743437393700bd2508746573743437393800be2508746573743437393900bf2508746573743438303000" + "c02508746573743438303100c12508746573743438303200c22508746573743438303300c325087465737434383034" + "00c42508746573743438303500c52508746573743438303600c62508746573743438303700c7250874657374343830" + "3800c82508746573743438303900c92508746573743438313000ca2508746573743438313100cb2508746573743438" + "313200cc2508746573743438313300cd2508746573743438313400ce2508746573743438313500cf25087465737434" + "38313600d02508746573743438313700d12508746573743438313800d22508746573743438313900d3250874657374" + "3438323000d42508746573743438323100d52508746573743438323200d62508746573743438323300d72508746573" + "743438323400d82508746573743438323500d92508746573743438323600da2508746573743438323700db25087465" + "73743438323800dc2508746573743438323900dd2508746573743438333000de2508746573743438333100df250874" + "6573743438333200e02508746573743438333300e12508746573743438333400e22508746573743438333500e32508" + "746573743438333600e42508746573743438333700e52508746573743438333800e62508746573743438333900e725" + "08746573743438343000e82508746573743438343100e92508746573743438343200ea2508746573743438343300eb" + "2508746573743438343400ec2508746573743438343500ed2508746573743438343600ee2508746573743438343700" + "ef2508746573743438343800f02508746573743438343900f12508746573743438353000f225087465737434383531" + "00f32508746573743438353200f42508746573743438353300f52508746573743438353400f6250874657374343835" + "3500f72508746573743438353600f82508746573743438353700f92508746573743438353800fa2508746573743438" + "353900fb2508746573743438363000fc2508746573743438363100fd2508746573743438363200fe25087465737434" + "38363300ff250874657374343836340080260874657374343836350081260874657374343836360082260874657374" + "3438363700832608746573743438363800842608746573743438363900852608746573743438373000862608746573" + "7434383731008726087465737434383732008826087465737434383733008926087465737434383734008a26087465" + "737434383735008b26087465737434383736008c26087465737434383737008d26087465737434383738008e260874" + "65737434383739008f2608746573743438383000902608746573743438383100912608746573743438383200922608" + "7465737434383833009326087465737434383834009426087465737434383835009526087465737434383836009626" + "087465737434383837009726087465737434383838009826087465737434383839009926087465737434383930009a" + "26087465737434383931009b26087465737434383932009c26087465737434383933009d2608746573743438393400" + "9e26087465737434383935009f2608746573743438393600a02608746573743438393700a126087465737434383938" + "00a22608746573743438393900a32608746573743439303000a42608746573743439303100a5260874657374343930" + "3200a62608746573743439303300a72608746573743439303400a82608746573743439303500a92608746573743439" + "303600aa2608746573743439303700ab2608746573743439303800ac2608746573743439303900ad26087465737434" + "39313000ae2608746573743439313100af2608746573743439313200b02608746573743439313300b1260874657374" + "3439313400b22608746573743439313500b32608746573743439313600b42608746573743439313700b52608746573" + "743439313800b62608746573743439313900b72608746573743439323000b82608746573743439323100b926087465" + "73743439323200ba2608746573743439323300bb2608746573743439323400bc2608746573743439323500bd260874" + "6573743439323600be2608746573743439323700bf2608746573743439323800c02608746573743439323900c12608" + "746573743439333000c22608746573743439333100c32608746573743439333200c42608746573743439333300c526" + "08746573743439333400c62608746573743439333500c72608746573743439333600c82608746573743439333700c9" + "2608746573743439333800ca2608746573743439333900cb2608746573743439343000cc2608746573743439343100" + "cd2608746573743439343200ce2608746573743439343300cf2608746573743439343400d026087465737434393435" + "00d12608746573743439343600d22608746573743439343700d32608746573743439343800d4260874657374343934" + "3900d52608746573743439353000d62608746573743439353100d72608746573743439353200d82608746573743439" + "353300d92608746573743439353400da2608746573743439353500db2608746573743439353600dc26087465737434" + "39353700dd2608746573743439353800de2608746573743439353900df2608746573743439363000e0260874657374" + "3439363100e12608746573743439363200e22608746573743439363300e32608746573743439363400e42608746573" + "743439363500e52608746573743439363600e62608746573743439363700e72608746573743439363800e826087465" + "73743439363900e92608746573743439373000ea2608746573743439373100eb2608746573743439373200ec260874" + "6573743439373300ed2608746573743439373400ee2608746573743439373500ef2608746573743439373600f02608" + "746573743439373700f12608746573743439373800f22608746573743439373900f32608746573743439383000f426" + "08746573743439383100f52608746573743439383200f62608746573743439383300f72608746573743439383400f8" + "2608746573743439383500f92608746573743439383600fa2608746573743439383700fb2608746573743439383800" + "fc2608746573743439383900fd2608746573743439393000fe2608746573743439393100ff26087465737434393932" + "0080270874657374343939330081270874657374343939340082270874657374343939350083270874657374343939" + "360084270874657374343939370085270874657374343939380086270874657374343939390087270ac2b802882707" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" + "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" + "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" + "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" + "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" + "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" + "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" + "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" + "6a0b"; diff --git a/src/test/app/wasm_fixtures/fixture_locals_10k.cpp b/src/test/app/wasm_fixtures/fixture_locals_10k.cpp new file mode 100644 index 0000000000..fe3b11a7a8 --- /dev/null +++ b/src/test/app/wasm_fixtures/fixture_locals_10k.cpp @@ -0,0 +1,2126 @@ +// TODO: consider moving these to separate files (and figure out the build) + +#include + +extern std::string const locals10kHex = + "0061736d0100000001070160027f7f017f03020100070801047465737400000a9b8a0601978a06018e4e7f20002001" + "6a2102200120026a2103200220036a2104200320046a2105200420056a2106200520066a2107200620076a21082007" + "20086a2109200820096a210a2009200a6a210b200a200b6a210c200b200c6a210d200c200d6a210e200d200e6a210f" + "200e200f6a2110200f20106a2111201020116a2112201120126a2113201220136a2114201320146a2115201420156a" + "2116201520166a2117201620176a2118201720186a2119201820196a211a2019201a6a211b201a201b6a211c201b20" + "1c6a211d201c201d6a211e201d201e6a211f201e201f6a2120201f20206a2121202020216a2122202120226a212320" + "2220236a2124202320246a2125202420256a2126202520266a2127202620276a2128202720286a2129202820296a21" + "2a2029202a6a212b202a202b6a212c202b202c6a212d202c202d6a212e202d202e6a212f202e202f6a2130202f2030" + "6a2131203020316a2132203120326a2133203220336a2134203320346a2135203420356a2136203520366a21372036" + "20376a2138203720386a2139203820396a213a2039203a6a213b203a203b6a213c203b203c6a213d203c203d6a213e" + "203d203e6a213f203e203f6a2140203f20406a2141204020416a2142204120426a2143204220436a2144204320446a" + "2145204420456a2146204520466a2147204620476a2148204720486a2149204820496a214a2049204a6a214b204a20" + "4b6a214c204b204c6a214d204c204d6a214e204d204e6a214f204e204f6a2150204f20506a2151205020516a215220" + "5120526a2153205220536a2154205320546a2155205420556a2156205520566a2157205620576a2158205720586a21" + "59205820596a215a2059205a6a215b205a205b6a215c205b205c6a215d205c205d6a215e205d205e6a215f205e205f" + "6a2160205f20606a2161206020616a2162206120626a2163206220636a2164206320646a2165206420656a21662065" + "20666a2167206620676a2168206720686a2169206820696a216a2069206a6a216b206a206b6a216c206b206c6a216d" + "206c206d6a216e206d206e6a216f206e206f6a2170206f20706a2171207020716a2172207120726a2173207220736a" + "2174207320746a2175207420756a2176207520766a2177207620776a2178207720786a2179207820796a217a207920" + "7a6a217b207a207b6a217c207b207c6a217d207c207d6a217e207d207e6a217f207e207f6a218001207f2080016a21" + "81012080012081016a2182012081012082016a2183012082012083016a2184012083012084016a2185012084012085" + "016a2186012085012086016a2187012086012087016a2188012087012088016a2189012088012089016a218a012089" + "01208a016a218b01208a01208b016a218c01208b01208c016a218d01208c01208d016a218e01208d01208e016a218f" + "01208e01208f016a219001208f012090016a2191012090012091016a2192012091012092016a219301209201209301" + "6a2194012093012094016a2195012094012095016a2196012095012096016a2197012096012097016a219801209701" + "2098016a2199012098012099016a219a01209901209a016a219b01209a01209b016a219c01209b01209c016a219d01" + "209c01209d016a219e01209d01209e016a219f01209e01209f016a21a001209f0120a0016a21a10120a00120a1016a" + "21a20120a10120a2016a21a30120a20120a3016a21a40120a30120a4016a21a50120a40120a5016a21a60120a50120" + "a6016a21a70120a60120a7016a21a80120a70120a8016a21a90120a80120a9016a21aa0120a90120aa016a21ab0120" + "aa0120ab016a21ac0120ab0120ac016a21ad0120ac0120ad016a21ae0120ad0120ae016a21af0120ae0120af016a21" + "b00120af0120b0016a21b10120b00120b1016a21b20120b10120b2016a21b30120b20120b3016a21b40120b30120b4" + "016a21b50120b40120b5016a21b60120b50120b6016a21b70120b60120b7016a21b80120b70120b8016a21b90120b8" + "0120b9016a21ba0120b90120ba016a21bb0120ba0120bb016a21bc0120bb0120bc016a21bd0120bc0120bd016a21be" + "0120bd0120be016a21bf0120be0120bf016a21c00120bf0120c0016a21c10120c00120c1016a21c20120c10120c201" + "6a21c30120c20120c3016a21c40120c30120c4016a21c50120c40120c5016a21c60120c50120c6016a21c70120c601" + "20c7016a21c80120c70120c8016a21c90120c80120c9016a21ca0120c90120ca016a21cb0120ca0120cb016a21cc01" + "20cb0120cc016a21cd0120cc0120cd016a21ce0120cd0120ce016a21cf0120ce0120cf016a21d00120cf0120d0016a" + "21d10120d00120d1016a21d20120d10120d2016a21d30120d20120d3016a21d40120d30120d4016a21d50120d40120" + "d5016a21d60120d50120d6016a21d70120d60120d7016a21d80120d70120d8016a21d90120d80120d9016a21da0120" + "d90120da016a21db0120da0120db016a21dc0120db0120dc016a21dd0120dc0120dd016a21de0120dd0120de016a21" + "df0120de0120df016a21e00120df0120e0016a21e10120e00120e1016a21e20120e10120e2016a21e30120e20120e3" + "016a21e40120e30120e4016a21e50120e40120e5016a21e60120e50120e6016a21e70120e60120e7016a21e80120e7" + "0120e8016a21e90120e80120e9016a21ea0120e90120ea016a21eb0120ea0120eb016a21ec0120eb0120ec016a21ed" + "0120ec0120ed016a21ee0120ed0120ee016a21ef0120ee0120ef016a21f00120ef0120f0016a21f10120f00120f101" + "6a21f20120f10120f2016a21f30120f20120f3016a21f40120f30120f4016a21f50120f40120f5016a21f60120f501" + "20f6016a21f70120f60120f7016a21f80120f70120f8016a21f90120f80120f9016a21fa0120f90120fa016a21fb01" + "20fa0120fb016a21fc0120fb0120fc016a21fd0120fc0120fd016a21fe0120fd0120fe016a21ff0120fe0120ff016a" + "21800220ff012080026a2181022080022081026a2182022081022082026a2183022082022083026a21840220830220" + "84026a2185022084022085026a2186022085022086026a2187022086022087026a2188022087022088026a21890220" + "88022089026a218a02208902208a026a218b02208a02208b026a218c02208b02208c026a218d02208c02208d026a21" + "8e02208d02208e026a218f02208e02208f026a219002208f022090026a2191022090022091026a2192022091022092" + "026a2193022092022093026a2194022093022094026a2195022094022095026a2196022095022096026a2197022096" + "022097026a2198022097022098026a2199022098022099026a219a02209902209a026a219b02209a02209b026a219c" + "02209b02209c026a219d02209c02209d026a219e02209d02209e026a219f02209e02209f026a21a002209f0220a002" + "6a21a10220a00220a1026a21a20220a10220a2026a21a30220a20220a3026a21a40220a30220a4026a21a50220a402" + "20a5026a21a60220a50220a6026a21a70220a60220a7026a21a80220a70220a8026a21a90220a80220a9026a21aa02" + "20a90220aa026a21ab0220aa0220ab026a21ac0220ab0220ac026a21ad0220ac0220ad026a21ae0220ad0220ae026a" + "21af0220ae0220af026a21b00220af0220b0026a21b10220b00220b1026a21b20220b10220b2026a21b30220b20220" + "b3026a21b40220b30220b4026a21b50220b40220b5026a21b60220b50220b6026a21b70220b60220b7026a21b80220" + "b70220b8026a21b90220b80220b9026a21ba0220b90220ba026a21bb0220ba0220bb026a21bc0220bb0220bc026a21" + "bd0220bc0220bd026a21be0220bd0220be026a21bf0220be0220bf026a21c00220bf0220c0026a21c10220c00220c1" + "026a21c20220c10220c2026a21c30220c20220c3026a21c40220c30220c4026a21c50220c40220c5026a21c60220c5" + "0220c6026a21c70220c60220c7026a21c80220c70220c8026a21c90220c80220c9026a21ca0220c90220ca026a21cb" + "0220ca0220cb026a21cc0220cb0220cc026a21cd0220cc0220cd026a21ce0220cd0220ce026a21cf0220ce0220cf02" + "6a21d00220cf0220d0026a21d10220d00220d1026a21d20220d10220d2026a21d30220d20220d3026a21d40220d302" + "20d4026a21d50220d40220d5026a21d60220d50220d6026a21d70220d60220d7026a21d80220d70220d8026a21d902" + "20d80220d9026a21da0220d90220da026a21db0220da0220db026a21dc0220db0220dc026a21dd0220dc0220dd026a" + "21de0220dd0220de026a21df0220de0220df026a21e00220df0220e0026a21e10220e00220e1026a21e20220e10220" + "e2026a21e30220e20220e3026a21e40220e30220e4026a21e50220e40220e5026a21e60220e50220e6026a21e70220" + "e60220e7026a21e80220e70220e8026a21e90220e80220e9026a21ea0220e90220ea026a21eb0220ea0220eb026a21" + "ec0220eb0220ec026a21ed0220ec0220ed026a21ee0220ed0220ee026a21ef0220ee0220ef026a21f00220ef0220f0" + "026a21f10220f00220f1026a21f20220f10220f2026a21f30220f20220f3026a21f40220f30220f4026a21f50220f4" + "0220f5026a21f60220f50220f6026a21f70220f60220f7026a21f80220f70220f8026a21f90220f80220f9026a21fa" + "0220f90220fa026a21fb0220fa0220fb026a21fc0220fb0220fc026a21fd0220fc0220fd026a21fe0220fd0220fe02" + "6a21ff0220fe0220ff026a21800320ff022080036a2181032080032081036a2182032081032082036a218303208203" + "2083036a2184032083032084036a2185032084032085036a2186032085032086036a2187032086032087036a218803" + "2087032088036a2189032088032089036a218a03208903208a036a218b03208a03208b036a218c03208b03208c036a" + "218d03208c03208d036a218e03208d03208e036a218f03208e03208f036a219003208f032090036a21910320900320" + "91036a2192032091032092036a2193032092032093036a2194032093032094036a2195032094032095036a21960320" + "95032096036a2197032096032097036a2198032097032098036a2199032098032099036a219a03209903209a036a21" + "9b03209a03209b036a219c03209b03209c036a219d03209c03209d036a219e03209d03209e036a219f03209e03209f" + "036a21a003209f0320a0036a21a10320a00320a1036a21a20320a10320a2036a21a30320a20320a3036a21a40320a3" + "0320a4036a21a50320a40320a5036a21a60320a50320a6036a21a70320a60320a7036a21a80320a70320a8036a21a9" + "0320a80320a9036a21aa0320a90320aa036a21ab0320aa0320ab036a21ac0320ab0320ac036a21ad0320ac0320ad03" + "6a21ae0320ad0320ae036a21af0320ae0320af036a21b00320af0320b0036a21b10320b00320b1036a21b20320b103" + "20b2036a21b30320b20320b3036a21b40320b30320b4036a21b50320b40320b5036a21b60320b50320b6036a21b703" + "20b60320b7036a21b80320b70320b8036a21b90320b80320b9036a21ba0320b90320ba036a21bb0320ba0320bb036a" + "21bc0320bb0320bc036a21bd0320bc0320bd036a21be0320bd0320be036a21bf0320be0320bf036a21c00320bf0320" + "c0036a21c10320c00320c1036a21c20320c10320c2036a21c30320c20320c3036a21c40320c30320c4036a21c50320" + "c40320c5036a21c60320c50320c6036a21c70320c60320c7036a21c80320c70320c8036a21c90320c80320c9036a21" + "ca0320c90320ca036a21cb0320ca0320cb036a21cc0320cb0320cc036a21cd0320cc0320cd036a21ce0320cd0320ce" + "036a21cf0320ce0320cf036a21d00320cf0320d0036a21d10320d00320d1036a21d20320d10320d2036a21d30320d2" + "0320d3036a21d40320d30320d4036a21d50320d40320d5036a21d60320d50320d6036a21d70320d60320d7036a21d8" + "0320d70320d8036a21d90320d80320d9036a21da0320d90320da036a21db0320da0320db036a21dc0320db0320dc03" + "6a21dd0320dc0320dd036a21de0320dd0320de036a21df0320de0320df036a21e00320df0320e0036a21e10320e003" + "20e1036a21e20320e10320e2036a21e30320e20320e3036a21e40320e30320e4036a21e50320e40320e5036a21e603" + "20e50320e6036a21e70320e60320e7036a21e80320e70320e8036a21e90320e80320e9036a21ea0320e90320ea036a" + "21eb0320ea0320eb036a21ec0320eb0320ec036a21ed0320ec0320ed036a21ee0320ed0320ee036a21ef0320ee0320" + "ef036a21f00320ef0320f0036a21f10320f00320f1036a21f20320f10320f2036a21f30320f20320f3036a21f40320" + "f30320f4036a21f50320f40320f5036a21f60320f50320f6036a21f70320f60320f7036a21f80320f70320f8036a21" + "f90320f80320f9036a21fa0320f90320fa036a21fb0320fa0320fb036a21fc0320fb0320fc036a21fd0320fc0320fd" + "036a21fe0320fd0320fe036a21ff0320fe0320ff036a21800420ff032080046a2181042080042081046a2182042081" + "042082046a2183042082042083046a2184042083042084046a2185042084042085046a2186042085042086046a2187" + "042086042087046a2188042087042088046a2189042088042089046a218a04208904208a046a218b04208a04208b04" + "6a218c04208b04208c046a218d04208c04208d046a218e04208d04208e046a218f04208e04208f046a219004208f04" + "2090046a2191042090042091046a2192042091042092046a2193042092042093046a2194042093042094046a219504" + "2094042095046a2196042095042096046a2197042096042097046a2198042097042098046a2199042098042099046a" + "219a04209904209a046a219b04209a04209b046a219c04209b04209c046a219d04209c04209d046a219e04209d0420" + "9e046a219f04209e04209f046a21a004209f0420a0046a21a10420a00420a1046a21a20420a10420a2046a21a30420" + "a20420a3046a21a40420a30420a4046a21a50420a40420a5046a21a60420a50420a6046a21a70420a60420a7046a21" + "a80420a70420a8046a21a90420a80420a9046a21aa0420a90420aa046a21ab0420aa0420ab046a21ac0420ab0420ac" + "046a21ad0420ac0420ad046a21ae0420ad0420ae046a21af0420ae0420af046a21b00420af0420b0046a21b10420b0" + "0420b1046a21b20420b10420b2046a21b30420b20420b3046a21b40420b30420b4046a21b50420b40420b5046a21b6" + "0420b50420b6046a21b70420b60420b7046a21b80420b70420b8046a21b90420b80420b9046a21ba0420b90420ba04" + "6a21bb0420ba0420bb046a21bc0420bb0420bc046a21bd0420bc0420bd046a21be0420bd0420be046a21bf0420be04" + "20bf046a21c00420bf0420c0046a21c10420c00420c1046a21c20420c10420c2046a21c30420c20420c3046a21c404" + "20c30420c4046a21c50420c40420c5046a21c60420c50420c6046a21c70420c60420c7046a21c80420c70420c8046a" + "21c90420c80420c9046a21ca0420c90420ca046a21cb0420ca0420cb046a21cc0420cb0420cc046a21cd0420cc0420" + "cd046a21ce0420cd0420ce046a21cf0420ce0420cf046a21d00420cf0420d0046a21d10420d00420d1046a21d20420" + "d10420d2046a21d30420d20420d3046a21d40420d30420d4046a21d50420d40420d5046a21d60420d50420d6046a21" + "d70420d60420d7046a21d80420d70420d8046a21d90420d80420d9046a21da0420d90420da046a21db0420da0420db" + "046a21dc0420db0420dc046a21dd0420dc0420dd046a21de0420dd0420de046a21df0420de0420df046a21e00420df" + "0420e0046a21e10420e00420e1046a21e20420e10420e2046a21e30420e20420e3046a21e40420e30420e4046a21e5" + "0420e40420e5046a21e60420e50420e6046a21e70420e60420e7046a21e80420e70420e8046a21e90420e80420e904" + "6a21ea0420e90420ea046a21eb0420ea0420eb046a21ec0420eb0420ec046a21ed0420ec0420ed046a21ee0420ed04" + "20ee046a21ef0420ee0420ef046a21f00420ef0420f0046a21f10420f00420f1046a21f20420f10420f2046a21f304" + "20f20420f3046a21f40420f30420f4046a21f50420f40420f5046a21f60420f50420f6046a21f70420f60420f7046a" + "21f80420f70420f8046a21f90420f80420f9046a21fa0420f90420fa046a21fb0420fa0420fb046a21fc0420fb0420" + "fc046a21fd0420fc0420fd046a21fe0420fd0420fe046a21ff0420fe0420ff046a21800520ff042080056a21810520" + "80052081056a2182052081052082056a2183052082052083056a2184052083052084056a2185052084052085056a21" + "86052085052086056a2187052086052087056a2188052087052088056a2189052088052089056a218a05208905208a" + "056a218b05208a05208b056a218c05208b05208c056a218d05208c05208d056a218e05208d05208e056a218f05208e" + "05208f056a219005208f052090056a2191052090052091056a2192052091052092056a2193052092052093056a2194" + "052093052094056a2195052094052095056a2196052095052096056a2197052096052097056a219805209705209805" + "6a2199052098052099056a219a05209905209a056a219b05209a05209b056a219c05209b05209c056a219d05209c05" + "209d056a219e05209d05209e056a219f05209e05209f056a21a005209f0520a0056a21a10520a00520a1056a21a205" + "20a10520a2056a21a30520a20520a3056a21a40520a30520a4056a21a50520a40520a5056a21a60520a50520a6056a" + "21a70520a60520a7056a21a80520a70520a8056a21a90520a80520a9056a21aa0520a90520aa056a21ab0520aa0520" + "ab056a21ac0520ab0520ac056a21ad0520ac0520ad056a21ae0520ad0520ae056a21af0520ae0520af056a21b00520" + "af0520b0056a21b10520b00520b1056a21b20520b10520b2056a21b30520b20520b3056a21b40520b30520b4056a21" + "b50520b40520b5056a21b60520b50520b6056a21b70520b60520b7056a21b80520b70520b8056a21b90520b80520b9" + "056a21ba0520b90520ba056a21bb0520ba0520bb056a21bc0520bb0520bc056a21bd0520bc0520bd056a21be0520bd" + "0520be056a21bf0520be0520bf056a21c00520bf0520c0056a21c10520c00520c1056a21c20520c10520c2056a21c3" + "0520c20520c3056a21c40520c30520c4056a21c50520c40520c5056a21c60520c50520c6056a21c70520c60520c705" + "6a21c80520c70520c8056a21c90520c80520c9056a21ca0520c90520ca056a21cb0520ca0520cb056a21cc0520cb05" + "20cc056a21cd0520cc0520cd056a21ce0520cd0520ce056a21cf0520ce0520cf056a21d00520cf0520d0056a21d105" + "20d00520d1056a21d20520d10520d2056a21d30520d20520d3056a21d40520d30520d4056a21d50520d40520d5056a" + "21d60520d50520d6056a21d70520d60520d7056a21d80520d70520d8056a21d90520d80520d9056a21da0520d90520" + "da056a21db0520da0520db056a21dc0520db0520dc056a21dd0520dc0520dd056a21de0520dd0520de056a21df0520" + "de0520df056a21e00520df0520e0056a21e10520e00520e1056a21e20520e10520e2056a21e30520e20520e3056a21" + "e40520e30520e4056a21e50520e40520e5056a21e60520e50520e6056a21e70520e60520e7056a21e80520e70520e8" + "056a21e90520e80520e9056a21ea0520e90520ea056a21eb0520ea0520eb056a21ec0520eb0520ec056a21ed0520ec" + "0520ed056a21ee0520ed0520ee056a21ef0520ee0520ef056a21f00520ef0520f0056a21f10520f00520f1056a21f2" + "0520f10520f2056a21f30520f20520f3056a21f40520f30520f4056a21f50520f40520f5056a21f60520f50520f605" + "6a21f70520f60520f7056a21f80520f70520f8056a21f90520f80520f9056a21fa0520f90520fa056a21fb0520fa05" + "20fb056a21fc0520fb0520fc056a21fd0520fc0520fd056a21fe0520fd0520fe056a21ff0520fe0520ff056a218006" + "20ff052080066a2181062080062081066a2182062081062082066a2183062082062083066a2184062083062084066a" + "2185062084062085066a2186062085062086066a2187062086062087066a2188062087062088066a21890620880620" + "89066a218a06208906208a066a218b06208a06208b066a218c06208b06208c066a218d06208c06208d066a218e0620" + "8d06208e066a218f06208e06208f066a219006208f062090066a2191062090062091066a2192062091062092066a21" + "93062092062093066a2194062093062094066a2195062094062095066a2196062095062096066a2197062096062097" + "066a2198062097062098066a2199062098062099066a219a06209906209a066a219b06209a06209b066a219c06209b" + "06209c066a219d06209c06209d066a219e06209d06209e066a219f06209e06209f066a21a006209f0620a0066a21a1" + "0620a00620a1066a21a20620a10620a2066a21a30620a20620a3066a21a40620a30620a4066a21a50620a40620a506" + "6a21a60620a50620a6066a21a70620a60620a7066a21a80620a70620a8066a21a90620a80620a9066a21aa0620a906" + "20aa066a21ab0620aa0620ab066a21ac0620ab0620ac066a21ad0620ac0620ad066a21ae0620ad0620ae066a21af06" + "20ae0620af066a21b00620af0620b0066a21b10620b00620b1066a21b20620b10620b2066a21b30620b20620b3066a" + "21b40620b30620b4066a21b50620b40620b5066a21b60620b50620b6066a21b70620b60620b7066a21b80620b70620" + "b8066a21b90620b80620b9066a21ba0620b90620ba066a21bb0620ba0620bb066a21bc0620bb0620bc066a21bd0620" + "bc0620bd066a21be0620bd0620be066a21bf0620be0620bf066a21c00620bf0620c0066a21c10620c00620c1066a21" + "c20620c10620c2066a21c30620c20620c3066a21c40620c30620c4066a21c50620c40620c5066a21c60620c50620c6" + "066a21c70620c60620c7066a21c80620c70620c8066a21c90620c80620c9066a21ca0620c90620ca066a21cb0620ca" + "0620cb066a21cc0620cb0620cc066a21cd0620cc0620cd066a21ce0620cd0620ce066a21cf0620ce0620cf066a21d0" + "0620cf0620d0066a21d10620d00620d1066a21d20620d10620d2066a21d30620d20620d3066a21d40620d30620d406" + "6a21d50620d40620d5066a21d60620d50620d6066a21d70620d60620d7066a21d80620d70620d8066a21d90620d806" + "20d9066a21da0620d90620da066a21db0620da0620db066a21dc0620db0620dc066a21dd0620dc0620dd066a21de06" + "20dd0620de066a21df0620de0620df066a21e00620df0620e0066a21e10620e00620e1066a21e20620e10620e2066a" + "21e30620e20620e3066a21e40620e30620e4066a21e50620e40620e5066a21e60620e50620e6066a21e70620e60620" + "e7066a21e80620e70620e8066a21e90620e80620e9066a21ea0620e90620ea066a21eb0620ea0620eb066a21ec0620" + "eb0620ec066a21ed0620ec0620ed066a21ee0620ed0620ee066a21ef0620ee0620ef066a21f00620ef0620f0066a21" + "f10620f00620f1066a21f20620f10620f2066a21f30620f20620f3066a21f40620f30620f4066a21f50620f40620f5" + "066a21f60620f50620f6066a21f70620f60620f7066a21f80620f70620f8066a21f90620f80620f9066a21fa0620f9" + "0620fa066a21fb0620fa0620fb066a21fc0620fb0620fc066a21fd0620fc0620fd066a21fe0620fd0620fe066a21ff" + "0620fe0620ff066a21800720ff062080076a2181072080072081076a2182072081072082076a218307208207208307" + "6a2184072083072084076a2185072084072085076a2186072085072086076a2187072086072087076a218807208707" + "2088076a2189072088072089076a218a07208907208a076a218b07208a07208b076a218c07208b07208c076a218d07" + "208c07208d076a218e07208d07208e076a218f07208e07208f076a219007208f072090076a2191072090072091076a" + "2192072091072092076a2193072092072093076a2194072093072094076a2195072094072095076a21960720950720" + "96076a2197072096072097076a2198072097072098076a2199072098072099076a219a07209907209a076a219b0720" + "9a07209b076a219c07209b07209c076a219d07209c07209d076a219e07209d07209e076a219f07209e07209f076a21" + "a007209f0720a0076a21a10720a00720a1076a21a20720a10720a2076a21a30720a20720a3076a21a40720a30720a4" + "076a21a50720a40720a5076a21a60720a50720a6076a21a70720a60720a7076a21a80720a70720a8076a21a90720a8" + "0720a9076a21aa0720a90720aa076a21ab0720aa0720ab076a21ac0720ab0720ac076a21ad0720ac0720ad076a21ae" + "0720ad0720ae076a21af0720ae0720af076a21b00720af0720b0076a21b10720b00720b1076a21b20720b10720b207" + "6a21b30720b20720b3076a21b40720b30720b4076a21b50720b40720b5076a21b60720b50720b6076a21b70720b607" + "20b7076a21b80720b70720b8076a21b90720b80720b9076a21ba0720b90720ba076a21bb0720ba0720bb076a21bc07" + "20bb0720bc076a21bd0720bc0720bd076a21be0720bd0720be076a21bf0720be0720bf076a21c00720bf0720c0076a" + "21c10720c00720c1076a21c20720c10720c2076a21c30720c20720c3076a21c40720c30720c4076a21c50720c40720" + "c5076a21c60720c50720c6076a21c70720c60720c7076a21c80720c70720c8076a21c90720c80720c9076a21ca0720" + "c90720ca076a21cb0720ca0720cb076a21cc0720cb0720cc076a21cd0720cc0720cd076a21ce0720cd0720ce076a21" + "cf0720ce0720cf076a21d00720cf0720d0076a21d10720d00720d1076a21d20720d10720d2076a21d30720d20720d3" + "076a21d40720d30720d4076a21d50720d40720d5076a21d60720d50720d6076a21d70720d60720d7076a21d80720d7" + "0720d8076a21d90720d80720d9076a21da0720d90720da076a21db0720da0720db076a21dc0720db0720dc076a21dd" + "0720dc0720dd076a21de0720dd0720de076a21df0720de0720df076a21e00720df0720e0076a21e10720e00720e107" + "6a21e20720e10720e2076a21e30720e20720e3076a21e40720e30720e4076a21e50720e40720e5076a21e60720e507" + "20e6076a21e70720e60720e7076a21e80720e70720e8076a21e90720e80720e9076a21ea0720e90720ea076a21eb07" + "20ea0720eb076a21ec0720eb0720ec076a21ed0720ec0720ed076a21ee0720ed0720ee076a21ef0720ee0720ef076a" + "21f00720ef0720f0076a21f10720f00720f1076a21f20720f10720f2076a21f30720f20720f3076a21f40720f30720" + "f4076a21f50720f40720f5076a21f60720f50720f6076a21f70720f60720f7076a21f80720f70720f8076a21f90720" + "f80720f9076a21fa0720f90720fa076a21fb0720fa0720fb076a21fc0720fb0720fc076a21fd0720fc0720fd076a21" + "fe0720fd0720fe076a21ff0720fe0720ff076a21800820ff072080086a2181082080082081086a2182082081082082" + "086a2183082082082083086a2184082083082084086a2185082084082085086a2186082085082086086a2187082086" + "082087086a2188082087082088086a2189082088082089086a218a08208908208a086a218b08208a08208b086a218c" + "08208b08208c086a218d08208c08208d086a218e08208d08208e086a218f08208e08208f086a219008208f08209008" + "6a2191082090082091086a2192082091082092086a2193082092082093086a2194082093082094086a219508209408" + "2095086a2196082095082096086a2197082096082097086a2198082097082098086a2199082098082099086a219a08" + "209908209a086a219b08209a08209b086a219c08209b08209c086a219d08209c08209d086a219e08209d08209e086a" + "219f08209e08209f086a21a008209f0820a0086a21a10820a00820a1086a21a20820a10820a2086a21a30820a20820" + "a3086a21a40820a30820a4086a21a50820a40820a5086a21a60820a50820a6086a21a70820a60820a7086a21a80820" + "a70820a8086a21a90820a80820a9086a21aa0820a90820aa086a21ab0820aa0820ab086a21ac0820ab0820ac086a21" + "ad0820ac0820ad086a21ae0820ad0820ae086a21af0820ae0820af086a21b00820af0820b0086a21b10820b00820b1" + "086a21b20820b10820b2086a21b30820b20820b3086a21b40820b30820b4086a21b50820b40820b5086a21b60820b5" + "0820b6086a21b70820b60820b7086a21b80820b70820b8086a21b90820b80820b9086a21ba0820b90820ba086a21bb" + "0820ba0820bb086a21bc0820bb0820bc086a21bd0820bc0820bd086a21be0820bd0820be086a21bf0820be0820bf08" + "6a21c00820bf0820c0086a21c10820c00820c1086a21c20820c10820c2086a21c30820c20820c3086a21c40820c308" + "20c4086a21c50820c40820c5086a21c60820c50820c6086a21c70820c60820c7086a21c80820c70820c8086a21c908" + "20c80820c9086a21ca0820c90820ca086a21cb0820ca0820cb086a21cc0820cb0820cc086a21cd0820cc0820cd086a" + "21ce0820cd0820ce086a21cf0820ce0820cf086a21d00820cf0820d0086a21d10820d00820d1086a21d20820d10820" + "d2086a21d30820d20820d3086a21d40820d30820d4086a21d50820d40820d5086a21d60820d50820d6086a21d70820" + "d60820d7086a21d80820d70820d8086a21d90820d80820d9086a21da0820d90820da086a21db0820da0820db086a21" + "dc0820db0820dc086a21dd0820dc0820dd086a21de0820dd0820de086a21df0820de0820df086a21e00820df0820e0" + "086a21e10820e00820e1086a21e20820e10820e2086a21e30820e20820e3086a21e40820e30820e4086a21e50820e4" + "0820e5086a21e60820e50820e6086a21e70820e60820e7086a21e80820e70820e8086a21e90820e80820e9086a21ea" + "0820e90820ea086a21eb0820ea0820eb086a21ec0820eb0820ec086a21ed0820ec0820ed086a21ee0820ed0820ee08" + "6a21ef0820ee0820ef086a21f00820ef0820f0086a21f10820f00820f1086a21f20820f10820f2086a21f30820f208" + "20f3086a21f40820f30820f4086a21f50820f40820f5086a21f60820f50820f6086a21f70820f60820f7086a21f808" + "20f70820f8086a21f90820f80820f9086a21fa0820f90820fa086a21fb0820fa0820fb086a21fc0820fb0820fc086a" + "21fd0820fc0820fd086a21fe0820fd0820fe086a21ff0820fe0820ff086a21800920ff082080096a21810920800920" + "81096a2182092081092082096a2183092082092083096a2184092083092084096a2185092084092085096a21860920" + "85092086096a2187092086092087096a2188092087092088096a2189092088092089096a218a09208909208a096a21" + "8b09208a09208b096a218c09208b09208c096a218d09208c09208d096a218e09208d09208e096a218f09208e09208f" + "096a219009208f092090096a2191092090092091096a2192092091092092096a2193092092092093096a2194092093" + "092094096a2195092094092095096a2196092095092096096a2197092096092097096a2198092097092098096a2199" + "092098092099096a219a09209909209a096a219b09209a09209b096a219c09209b09209c096a219d09209c09209d09" + "6a219e09209d09209e096a219f09209e09209f096a21a009209f0920a0096a21a10920a00920a1096a21a20920a109" + "20a2096a21a30920a20920a3096a21a40920a30920a4096a21a50920a40920a5096a21a60920a50920a6096a21a709" + "20a60920a7096a21a80920a70920a8096a21a90920a80920a9096a21aa0920a90920aa096a21ab0920aa0920ab096a" + "21ac0920ab0920ac096a21ad0920ac0920ad096a21ae0920ad0920ae096a21af0920ae0920af096a21b00920af0920" + "b0096a21b10920b00920b1096a21b20920b10920b2096a21b30920b20920b3096a21b40920b30920b4096a21b50920" + "b40920b5096a21b60920b50920b6096a21b70920b60920b7096a21b80920b70920b8096a21b90920b80920b9096a21" + "ba0920b90920ba096a21bb0920ba0920bb096a21bc0920bb0920bc096a21bd0920bc0920bd096a21be0920bd0920be" + "096a21bf0920be0920bf096a21c00920bf0920c0096a21c10920c00920c1096a21c20920c10920c2096a21c30920c2" + "0920c3096a21c40920c30920c4096a21c50920c40920c5096a21c60920c50920c6096a21c70920c60920c7096a21c8" + "0920c70920c8096a21c90920c80920c9096a21ca0920c90920ca096a21cb0920ca0920cb096a21cc0920cb0920cc09" + "6a21cd0920cc0920cd096a21ce0920cd0920ce096a21cf0920ce0920cf096a21d00920cf0920d0096a21d10920d009" + "20d1096a21d20920d10920d2096a21d30920d20920d3096a21d40920d30920d4096a21d50920d40920d5096a21d609" + "20d50920d6096a21d70920d60920d7096a21d80920d70920d8096a21d90920d80920d9096a21da0920d90920da096a" + "21db0920da0920db096a21dc0920db0920dc096a21dd0920dc0920dd096a21de0920dd0920de096a21df0920de0920" + "df096a21e00920df0920e0096a21e10920e00920e1096a21e20920e10920e2096a21e30920e20920e3096a21e40920" + "e30920e4096a21e50920e40920e5096a21e60920e50920e6096a21e70920e60920e7096a21e80920e70920e8096a21" + "e90920e80920e9096a21ea0920e90920ea096a21eb0920ea0920eb096a21ec0920eb0920ec096a21ed0920ec0920ed" + "096a21ee0920ed0920ee096a21ef0920ee0920ef096a21f00920ef0920f0096a21f10920f00920f1096a21f20920f1" + "0920f2096a21f30920f20920f3096a21f40920f30920f4096a21f50920f40920f5096a21f60920f50920f6096a21f7" + "0920f60920f7096a21f80920f70920f8096a21f90920f80920f9096a21fa0920f90920fa096a21fb0920fa0920fb09" + "6a21fc0920fb0920fc096a21fd0920fc0920fd096a21fe0920fd0920fe096a21ff0920fe0920ff096a21800a20ff09" + "20800a6a21810a20800a20810a6a21820a20810a20820a6a21830a20820a20830a6a21840a20830a20840a6a21850a" + "20840a20850a6a21860a20850a20860a6a21870a20860a20870a6a21880a20870a20880a6a21890a20880a20890a6a" + "218a0a20890a208a0a6a218b0a208a0a208b0a6a218c0a208b0a208c0a6a218d0a208c0a208d0a6a218e0a208d0a20" + "8e0a6a218f0a208e0a208f0a6a21900a208f0a20900a6a21910a20900a20910a6a21920a20910a20920a6a21930a20" + "920a20930a6a21940a20930a20940a6a21950a20940a20950a6a21960a20950a20960a6a21970a20960a20970a6a21" + "980a20970a20980a6a21990a20980a20990a6a219a0a20990a209a0a6a219b0a209a0a209b0a6a219c0a209b0a209c" + "0a6a219d0a209c0a209d0a6a219e0a209d0a209e0a6a219f0a209e0a209f0a6a21a00a209f0a20a00a6a21a10a20a0" + "0a20a10a6a21a20a20a10a20a20a6a21a30a20a20a20a30a6a21a40a20a30a20a40a6a21a50a20a40a20a50a6a21a6" + "0a20a50a20a60a6a21a70a20a60a20a70a6a21a80a20a70a20a80a6a21a90a20a80a20a90a6a21aa0a20a90a20aa0a" + "6a21ab0a20aa0a20ab0a6a21ac0a20ab0a20ac0a6a21ad0a20ac0a20ad0a6a21ae0a20ad0a20ae0a6a21af0a20ae0a" + "20af0a6a21b00a20af0a20b00a6a21b10a20b00a20b10a6a21b20a20b10a20b20a6a21b30a20b20a20b30a6a21b40a" + "20b30a20b40a6a21b50a20b40a20b50a6a21b60a20b50a20b60a6a21b70a20b60a20b70a6a21b80a20b70a20b80a6a" + "21b90a20b80a20b90a6a21ba0a20b90a20ba0a6a21bb0a20ba0a20bb0a6a21bc0a20bb0a20bc0a6a21bd0a20bc0a20" + "bd0a6a21be0a20bd0a20be0a6a21bf0a20be0a20bf0a6a21c00a20bf0a20c00a6a21c10a20c00a20c10a6a21c20a20" + "c10a20c20a6a21c30a20c20a20c30a6a21c40a20c30a20c40a6a21c50a20c40a20c50a6a21c60a20c50a20c60a6a21" + "c70a20c60a20c70a6a21c80a20c70a20c80a6a21c90a20c80a20c90a6a21ca0a20c90a20ca0a6a21cb0a20ca0a20cb" + "0a6a21cc0a20cb0a20cc0a6a21cd0a20cc0a20cd0a6a21ce0a20cd0a20ce0a6a21cf0a20ce0a20cf0a6a21d00a20cf" + "0a20d00a6a21d10a20d00a20d10a6a21d20a20d10a20d20a6a21d30a20d20a20d30a6a21d40a20d30a20d40a6a21d5" + "0a20d40a20d50a6a21d60a20d50a20d60a6a21d70a20d60a20d70a6a21d80a20d70a20d80a6a21d90a20d80a20d90a" + "6a21da0a20d90a20da0a6a21db0a20da0a20db0a6a21dc0a20db0a20dc0a6a21dd0a20dc0a20dd0a6a21de0a20dd0a" + "20de0a6a21df0a20de0a20df0a6a21e00a20df0a20e00a6a21e10a20e00a20e10a6a21e20a20e10a20e20a6a21e30a" + "20e20a20e30a6a21e40a20e30a20e40a6a21e50a20e40a20e50a6a21e60a20e50a20e60a6a21e70a20e60a20e70a6a" + "21e80a20e70a20e80a6a21e90a20e80a20e90a6a21ea0a20e90a20ea0a6a21eb0a20ea0a20eb0a6a21ec0a20eb0a20" + "ec0a6a21ed0a20ec0a20ed0a6a21ee0a20ed0a20ee0a6a21ef0a20ee0a20ef0a6a21f00a20ef0a20f00a6a21f10a20" + "f00a20f10a6a21f20a20f10a20f20a6a21f30a20f20a20f30a6a21f40a20f30a20f40a6a21f50a20f40a20f50a6a21" + "f60a20f50a20f60a6a21f70a20f60a20f70a6a21f80a20f70a20f80a6a21f90a20f80a20f90a6a21fa0a20f90a20fa" + "0a6a21fb0a20fa0a20fb0a6a21fc0a20fb0a20fc0a6a21fd0a20fc0a20fd0a6a21fe0a20fd0a20fe0a6a21ff0a20fe" + "0a20ff0a6a21800b20ff0a20800b6a21810b20800b20810b6a21820b20810b20820b6a21830b20820b20830b6a2184" + "0b20830b20840b6a21850b20840b20850b6a21860b20850b20860b6a21870b20860b20870b6a21880b20870b20880b" + "6a21890b20880b20890b6a218a0b20890b208a0b6a218b0b208a0b208b0b6a218c0b208b0b208c0b6a218d0b208c0b" + "208d0b6a218e0b208d0b208e0b6a218f0b208e0b208f0b6a21900b208f0b20900b6a21910b20900b20910b6a21920b" + "20910b20920b6a21930b20920b20930b6a21940b20930b20940b6a21950b20940b20950b6a21960b20950b20960b6a" + "21970b20960b20970b6a21980b20970b20980b6a21990b20980b20990b6a219a0b20990b209a0b6a219b0b209a0b20" + "9b0b6a219c0b209b0b209c0b6a219d0b209c0b209d0b6a219e0b209d0b209e0b6a219f0b209e0b209f0b6a21a00b20" + "9f0b20a00b6a21a10b20a00b20a10b6a21a20b20a10b20a20b6a21a30b20a20b20a30b6a21a40b20a30b20a40b6a21" + "a50b20a40b20a50b6a21a60b20a50b20a60b6a21a70b20a60b20a70b6a21a80b20a70b20a80b6a21a90b20a80b20a9" + "0b6a21aa0b20a90b20aa0b6a21ab0b20aa0b20ab0b6a21ac0b20ab0b20ac0b6a21ad0b20ac0b20ad0b6a21ae0b20ad" + "0b20ae0b6a21af0b20ae0b20af0b6a21b00b20af0b20b00b6a21b10b20b00b20b10b6a21b20b20b10b20b20b6a21b3" + "0b20b20b20b30b6a21b40b20b30b20b40b6a21b50b20b40b20b50b6a21b60b20b50b20b60b6a21b70b20b60b20b70b" + "6a21b80b20b70b20b80b6a21b90b20b80b20b90b6a21ba0b20b90b20ba0b6a21bb0b20ba0b20bb0b6a21bc0b20bb0b" + "20bc0b6a21bd0b20bc0b20bd0b6a21be0b20bd0b20be0b6a21bf0b20be0b20bf0b6a21c00b20bf0b20c00b6a21c10b" + "20c00b20c10b6a21c20b20c10b20c20b6a21c30b20c20b20c30b6a21c40b20c30b20c40b6a21c50b20c40b20c50b6a" + "21c60b20c50b20c60b6a21c70b20c60b20c70b6a21c80b20c70b20c80b6a21c90b20c80b20c90b6a21ca0b20c90b20" + "ca0b6a21cb0b20ca0b20cb0b6a21cc0b20cb0b20cc0b6a21cd0b20cc0b20cd0b6a21ce0b20cd0b20ce0b6a21cf0b20" + "ce0b20cf0b6a21d00b20cf0b20d00b6a21d10b20d00b20d10b6a21d20b20d10b20d20b6a21d30b20d20b20d30b6a21" + "d40b20d30b20d40b6a21d50b20d40b20d50b6a21d60b20d50b20d60b6a21d70b20d60b20d70b6a21d80b20d70b20d8" + "0b6a21d90b20d80b20d90b6a21da0b20d90b20da0b6a21db0b20da0b20db0b6a21dc0b20db0b20dc0b6a21dd0b20dc" + "0b20dd0b6a21de0b20dd0b20de0b6a21df0b20de0b20df0b6a21e00b20df0b20e00b6a21e10b20e00b20e10b6a21e2" + "0b20e10b20e20b6a21e30b20e20b20e30b6a21e40b20e30b20e40b6a21e50b20e40b20e50b6a21e60b20e50b20e60b" + "6a21e70b20e60b20e70b6a21e80b20e70b20e80b6a21e90b20e80b20e90b6a21ea0b20e90b20ea0b6a21eb0b20ea0b" + "20eb0b6a21ec0b20eb0b20ec0b6a21ed0b20ec0b20ed0b6a21ee0b20ed0b20ee0b6a21ef0b20ee0b20ef0b6a21f00b" + "20ef0b20f00b6a21f10b20f00b20f10b6a21f20b20f10b20f20b6a21f30b20f20b20f30b6a21f40b20f30b20f40b6a" + "21f50b20f40b20f50b6a21f60b20f50b20f60b6a21f70b20f60b20f70b6a21f80b20f70b20f80b6a21f90b20f80b20" + "f90b6a21fa0b20f90b20fa0b6a21fb0b20fa0b20fb0b6a21fc0b20fb0b20fc0b6a21fd0b20fc0b20fd0b6a21fe0b20" + "fd0b20fe0b6a21ff0b20fe0b20ff0b6a21800c20ff0b20800c6a21810c20800c20810c6a21820c20810c20820c6a21" + "830c20820c20830c6a21840c20830c20840c6a21850c20840c20850c6a21860c20850c20860c6a21870c20860c2087" + "0c6a21880c20870c20880c6a21890c20880c20890c6a218a0c20890c208a0c6a218b0c208a0c208b0c6a218c0c208b" + "0c208c0c6a218d0c208c0c208d0c6a218e0c208d0c208e0c6a218f0c208e0c208f0c6a21900c208f0c20900c6a2191" + "0c20900c20910c6a21920c20910c20920c6a21930c20920c20930c6a21940c20930c20940c6a21950c20940c20950c" + "6a21960c20950c20960c6a21970c20960c20970c6a21980c20970c20980c6a21990c20980c20990c6a219a0c20990c" + "209a0c6a219b0c209a0c209b0c6a219c0c209b0c209c0c6a219d0c209c0c209d0c6a219e0c209d0c209e0c6a219f0c" + "209e0c209f0c6a21a00c209f0c20a00c6a21a10c20a00c20a10c6a21a20c20a10c20a20c6a21a30c20a20c20a30c6a" + "21a40c20a30c20a40c6a21a50c20a40c20a50c6a21a60c20a50c20a60c6a21a70c20a60c20a70c6a21a80c20a70c20" + "a80c6a21a90c20a80c20a90c6a21aa0c20a90c20aa0c6a21ab0c20aa0c20ab0c6a21ac0c20ab0c20ac0c6a21ad0c20" + "ac0c20ad0c6a21ae0c20ad0c20ae0c6a21af0c20ae0c20af0c6a21b00c20af0c20b00c6a21b10c20b00c20b10c6a21" + "b20c20b10c20b20c6a21b30c20b20c20b30c6a21b40c20b30c20b40c6a21b50c20b40c20b50c6a21b60c20b50c20b6" + "0c6a21b70c20b60c20b70c6a21b80c20b70c20b80c6a21b90c20b80c20b90c6a21ba0c20b90c20ba0c6a21bb0c20ba" + "0c20bb0c6a21bc0c20bb0c20bc0c6a21bd0c20bc0c20bd0c6a21be0c20bd0c20be0c6a21bf0c20be0c20bf0c6a21c0" + "0c20bf0c20c00c6a21c10c20c00c20c10c6a21c20c20c10c20c20c6a21c30c20c20c20c30c6a21c40c20c30c20c40c" + "6a21c50c20c40c20c50c6a21c60c20c50c20c60c6a21c70c20c60c20c70c6a21c80c20c70c20c80c6a21c90c20c80c" + "20c90c6a21ca0c20c90c20ca0c6a21cb0c20ca0c20cb0c6a21cc0c20cb0c20cc0c6a21cd0c20cc0c20cd0c6a21ce0c" + "20cd0c20ce0c6a21cf0c20ce0c20cf0c6a21d00c20cf0c20d00c6a21d10c20d00c20d10c6a21d20c20d10c20d20c6a" + "21d30c20d20c20d30c6a21d40c20d30c20d40c6a21d50c20d40c20d50c6a21d60c20d50c20d60c6a21d70c20d60c20" + "d70c6a21d80c20d70c20d80c6a21d90c20d80c20d90c6a21da0c20d90c20da0c6a21db0c20da0c20db0c6a21dc0c20" + "db0c20dc0c6a21dd0c20dc0c20dd0c6a21de0c20dd0c20de0c6a21df0c20de0c20df0c6a21e00c20df0c20e00c6a21" + "e10c20e00c20e10c6a21e20c20e10c20e20c6a21e30c20e20c20e30c6a21e40c20e30c20e40c6a21e50c20e40c20e5" + "0c6a21e60c20e50c20e60c6a21e70c20e60c20e70c6a21e80c20e70c20e80c6a21e90c20e80c20e90c6a21ea0c20e9" + "0c20ea0c6a21eb0c20ea0c20eb0c6a21ec0c20eb0c20ec0c6a21ed0c20ec0c20ed0c6a21ee0c20ed0c20ee0c6a21ef" + "0c20ee0c20ef0c6a21f00c20ef0c20f00c6a21f10c20f00c20f10c6a21f20c20f10c20f20c6a21f30c20f20c20f30c" + "6a21f40c20f30c20f40c6a21f50c20f40c20f50c6a21f60c20f50c20f60c6a21f70c20f60c20f70c6a21f80c20f70c" + "20f80c6a21f90c20f80c20f90c6a21fa0c20f90c20fa0c6a21fb0c20fa0c20fb0c6a21fc0c20fb0c20fc0c6a21fd0c" + "20fc0c20fd0c6a21fe0c20fd0c20fe0c6a21ff0c20fe0c20ff0c6a21800d20ff0c20800d6a21810d20800d20810d6a" + "21820d20810d20820d6a21830d20820d20830d6a21840d20830d20840d6a21850d20840d20850d6a21860d20850d20" + "860d6a21870d20860d20870d6a21880d20870d20880d6a21890d20880d20890d6a218a0d20890d208a0d6a218b0d20" + "8a0d208b0d6a218c0d208b0d208c0d6a218d0d208c0d208d0d6a218e0d208d0d208e0d6a218f0d208e0d208f0d6a21" + "900d208f0d20900d6a21910d20900d20910d6a21920d20910d20920d6a21930d20920d20930d6a21940d20930d2094" + "0d6a21950d20940d20950d6a21960d20950d20960d6a21970d20960d20970d6a21980d20970d20980d6a21990d2098" + "0d20990d6a219a0d20990d209a0d6a219b0d209a0d209b0d6a219c0d209b0d209c0d6a219d0d209c0d209d0d6a219e" + "0d209d0d209e0d6a219f0d209e0d209f0d6a21a00d209f0d20a00d6a21a10d20a00d20a10d6a21a20d20a10d20a20d" + "6a21a30d20a20d20a30d6a21a40d20a30d20a40d6a21a50d20a40d20a50d6a21a60d20a50d20a60d6a21a70d20a60d" + "20a70d6a21a80d20a70d20a80d6a21a90d20a80d20a90d6a21aa0d20a90d20aa0d6a21ab0d20aa0d20ab0d6a21ac0d" + "20ab0d20ac0d6a21ad0d20ac0d20ad0d6a21ae0d20ad0d20ae0d6a21af0d20ae0d20af0d6a21b00d20af0d20b00d6a" + "21b10d20b00d20b10d6a21b20d20b10d20b20d6a21b30d20b20d20b30d6a21b40d20b30d20b40d6a21b50d20b40d20" + "b50d6a21b60d20b50d20b60d6a21b70d20b60d20b70d6a21b80d20b70d20b80d6a21b90d20b80d20b90d6a21ba0d20" + "b90d20ba0d6a21bb0d20ba0d20bb0d6a21bc0d20bb0d20bc0d6a21bd0d20bc0d20bd0d6a21be0d20bd0d20be0d6a21" + "bf0d20be0d20bf0d6a21c00d20bf0d20c00d6a21c10d20c00d20c10d6a21c20d20c10d20c20d6a21c30d20c20d20c3" + "0d6a21c40d20c30d20c40d6a21c50d20c40d20c50d6a21c60d20c50d20c60d6a21c70d20c60d20c70d6a21c80d20c7" + "0d20c80d6a21c90d20c80d20c90d6a21ca0d20c90d20ca0d6a21cb0d20ca0d20cb0d6a21cc0d20cb0d20cc0d6a21cd" + "0d20cc0d20cd0d6a21ce0d20cd0d20ce0d6a21cf0d20ce0d20cf0d6a21d00d20cf0d20d00d6a21d10d20d00d20d10d" + "6a21d20d20d10d20d20d6a21d30d20d20d20d30d6a21d40d20d30d20d40d6a21d50d20d40d20d50d6a21d60d20d50d" + "20d60d6a21d70d20d60d20d70d6a21d80d20d70d20d80d6a21d90d20d80d20d90d6a21da0d20d90d20da0d6a21db0d" + "20da0d20db0d6a21dc0d20db0d20dc0d6a21dd0d20dc0d20dd0d6a21de0d20dd0d20de0d6a21df0d20de0d20df0d6a" + "21e00d20df0d20e00d6a21e10d20e00d20e10d6a21e20d20e10d20e20d6a21e30d20e20d20e30d6a21e40d20e30d20" + "e40d6a21e50d20e40d20e50d6a21e60d20e50d20e60d6a21e70d20e60d20e70d6a21e80d20e70d20e80d6a21e90d20" + "e80d20e90d6a21ea0d20e90d20ea0d6a21eb0d20ea0d20eb0d6a21ec0d20eb0d20ec0d6a21ed0d20ec0d20ed0d6a21" + "ee0d20ed0d20ee0d6a21ef0d20ee0d20ef0d6a21f00d20ef0d20f00d6a21f10d20f00d20f10d6a21f20d20f10d20f2" + "0d6a21f30d20f20d20f30d6a21f40d20f30d20f40d6a21f50d20f40d20f50d6a21f60d20f50d20f60d6a21f70d20f6" + "0d20f70d6a21f80d20f70d20f80d6a21f90d20f80d20f90d6a21fa0d20f90d20fa0d6a21fb0d20fa0d20fb0d6a21fc" + "0d20fb0d20fc0d6a21fd0d20fc0d20fd0d6a21fe0d20fd0d20fe0d6a21ff0d20fe0d20ff0d6a21800e20ff0d20800e" + "6a21810e20800e20810e6a21820e20810e20820e6a21830e20820e20830e6a21840e20830e20840e6a21850e20840e" + "20850e6a21860e20850e20860e6a21870e20860e20870e6a21880e20870e20880e6a21890e20880e20890e6a218a0e" + "20890e208a0e6a218b0e208a0e208b0e6a218c0e208b0e208c0e6a218d0e208c0e208d0e6a218e0e208d0e208e0e6a" + "218f0e208e0e208f0e6a21900e208f0e20900e6a21910e20900e20910e6a21920e20910e20920e6a21930e20920e20" + "930e6a21940e20930e20940e6a21950e20940e20950e6a21960e20950e20960e6a21970e20960e20970e6a21980e20" + "970e20980e6a21990e20980e20990e6a219a0e20990e209a0e6a219b0e209a0e209b0e6a219c0e209b0e209c0e6a21" + "9d0e209c0e209d0e6a219e0e209d0e209e0e6a219f0e209e0e209f0e6a21a00e209f0e20a00e6a21a10e20a00e20a1" + "0e6a21a20e20a10e20a20e6a21a30e20a20e20a30e6a21a40e20a30e20a40e6a21a50e20a40e20a50e6a21a60e20a5" + "0e20a60e6a21a70e20a60e20a70e6a21a80e20a70e20a80e6a21a90e20a80e20a90e6a21aa0e20a90e20aa0e6a21ab" + "0e20aa0e20ab0e6a21ac0e20ab0e20ac0e6a21ad0e20ac0e20ad0e6a21ae0e20ad0e20ae0e6a21af0e20ae0e20af0e" + "6a21b00e20af0e20b00e6a21b10e20b00e20b10e6a21b20e20b10e20b20e6a21b30e20b20e20b30e6a21b40e20b30e" + "20b40e6a21b50e20b40e20b50e6a21b60e20b50e20b60e6a21b70e20b60e20b70e6a21b80e20b70e20b80e6a21b90e" + "20b80e20b90e6a21ba0e20b90e20ba0e6a21bb0e20ba0e20bb0e6a21bc0e20bb0e20bc0e6a21bd0e20bc0e20bd0e6a" + "21be0e20bd0e20be0e6a21bf0e20be0e20bf0e6a21c00e20bf0e20c00e6a21c10e20c00e20c10e6a21c20e20c10e20" + "c20e6a21c30e20c20e20c30e6a21c40e20c30e20c40e6a21c50e20c40e20c50e6a21c60e20c50e20c60e6a21c70e20" + "c60e20c70e6a21c80e20c70e20c80e6a21c90e20c80e20c90e6a21ca0e20c90e20ca0e6a21cb0e20ca0e20cb0e6a21" + "cc0e20cb0e20cc0e6a21cd0e20cc0e20cd0e6a21ce0e20cd0e20ce0e6a21cf0e20ce0e20cf0e6a21d00e20cf0e20d0" + "0e6a21d10e20d00e20d10e6a21d20e20d10e20d20e6a21d30e20d20e20d30e6a21d40e20d30e20d40e6a21d50e20d4" + "0e20d50e6a21d60e20d50e20d60e6a21d70e20d60e20d70e6a21d80e20d70e20d80e6a21d90e20d80e20d90e6a21da" + "0e20d90e20da0e6a21db0e20da0e20db0e6a21dc0e20db0e20dc0e6a21dd0e20dc0e20dd0e6a21de0e20dd0e20de0e" + "6a21df0e20de0e20df0e6a21e00e20df0e20e00e6a21e10e20e00e20e10e6a21e20e20e10e20e20e6a21e30e20e20e" + "20e30e6a21e40e20e30e20e40e6a21e50e20e40e20e50e6a21e60e20e50e20e60e6a21e70e20e60e20e70e6a21e80e" + "20e70e20e80e6a21e90e20e80e20e90e6a21ea0e20e90e20ea0e6a21eb0e20ea0e20eb0e6a21ec0e20eb0e20ec0e6a" + "21ed0e20ec0e20ed0e6a21ee0e20ed0e20ee0e6a21ef0e20ee0e20ef0e6a21f00e20ef0e20f00e6a21f10e20f00e20" + "f10e6a21f20e20f10e20f20e6a21f30e20f20e20f30e6a21f40e20f30e20f40e6a21f50e20f40e20f50e6a21f60e20" + "f50e20f60e6a21f70e20f60e20f70e6a21f80e20f70e20f80e6a21f90e20f80e20f90e6a21fa0e20f90e20fa0e6a21" + "fb0e20fa0e20fb0e6a21fc0e20fb0e20fc0e6a21fd0e20fc0e20fd0e6a21fe0e20fd0e20fe0e6a21ff0e20fe0e20ff" + "0e6a21800f20ff0e20800f6a21810f20800f20810f6a21820f20810f20820f6a21830f20820f20830f6a21840f2083" + "0f20840f6a21850f20840f20850f6a21860f20850f20860f6a21870f20860f20870f6a21880f20870f20880f6a2189" + "0f20880f20890f6a218a0f20890f208a0f6a218b0f208a0f208b0f6a218c0f208b0f208c0f6a218d0f208c0f208d0f" + "6a218e0f208d0f208e0f6a218f0f208e0f208f0f6a21900f208f0f20900f6a21910f20900f20910f6a21920f20910f" + "20920f6a21930f20920f20930f6a21940f20930f20940f6a21950f20940f20950f6a21960f20950f20960f6a21970f" + "20960f20970f6a21980f20970f20980f6a21990f20980f20990f6a219a0f20990f209a0f6a219b0f209a0f209b0f6a" + "219c0f209b0f209c0f6a219d0f209c0f209d0f6a219e0f209d0f209e0f6a219f0f209e0f209f0f6a21a00f209f0f20" + "a00f6a21a10f20a00f20a10f6a21a20f20a10f20a20f6a21a30f20a20f20a30f6a21a40f20a30f20a40f6a21a50f20" + "a40f20a50f6a21a60f20a50f20a60f6a21a70f20a60f20a70f6a21a80f20a70f20a80f6a21a90f20a80f20a90f6a21" + "aa0f20a90f20aa0f6a21ab0f20aa0f20ab0f6a21ac0f20ab0f20ac0f6a21ad0f20ac0f20ad0f6a21ae0f20ad0f20ae" + "0f6a21af0f20ae0f20af0f6a21b00f20af0f20b00f6a21b10f20b00f20b10f6a21b20f20b10f20b20f6a21b30f20b2" + "0f20b30f6a21b40f20b30f20b40f6a21b50f20b40f20b50f6a21b60f20b50f20b60f6a21b70f20b60f20b70f6a21b8" + "0f20b70f20b80f6a21b90f20b80f20b90f6a21ba0f20b90f20ba0f6a21bb0f20ba0f20bb0f6a21bc0f20bb0f20bc0f" + "6a21bd0f20bc0f20bd0f6a21be0f20bd0f20be0f6a21bf0f20be0f20bf0f6a21c00f20bf0f20c00f6a21c10f20c00f" + "20c10f6a21c20f20c10f20c20f6a21c30f20c20f20c30f6a21c40f20c30f20c40f6a21c50f20c40f20c50f6a21c60f" + "20c50f20c60f6a21c70f20c60f20c70f6a21c80f20c70f20c80f6a21c90f20c80f20c90f6a21ca0f20c90f20ca0f6a" + "21cb0f20ca0f20cb0f6a21cc0f20cb0f20cc0f6a21cd0f20cc0f20cd0f6a21ce0f20cd0f20ce0f6a21cf0f20ce0f20" + "cf0f6a21d00f20cf0f20d00f6a21d10f20d00f20d10f6a21d20f20d10f20d20f6a21d30f20d20f20d30f6a21d40f20" + "d30f20d40f6a21d50f20d40f20d50f6a21d60f20d50f20d60f6a21d70f20d60f20d70f6a21d80f20d70f20d80f6a21" + "d90f20d80f20d90f6a21da0f20d90f20da0f6a21db0f20da0f20db0f6a21dc0f20db0f20dc0f6a21dd0f20dc0f20dd" + "0f6a21de0f20dd0f20de0f6a21df0f20de0f20df0f6a21e00f20df0f20e00f6a21e10f20e00f20e10f6a21e20f20e1" + "0f20e20f6a21e30f20e20f20e30f6a21e40f20e30f20e40f6a21e50f20e40f20e50f6a21e60f20e50f20e60f6a21e7" + "0f20e60f20e70f6a21e80f20e70f20e80f6a21e90f20e80f20e90f6a21ea0f20e90f20ea0f6a21eb0f20ea0f20eb0f" + "6a21ec0f20eb0f20ec0f6a21ed0f20ec0f20ed0f6a21ee0f20ed0f20ee0f6a21ef0f20ee0f20ef0f6a21f00f20ef0f" + "20f00f6a21f10f20f00f20f10f6a21f20f20f10f20f20f6a21f30f20f20f20f30f6a21f40f20f30f20f40f6a21f50f" + "20f40f20f50f6a21f60f20f50f20f60f6a21f70f20f60f20f70f6a21f80f20f70f20f80f6a21f90f20f80f20f90f6a" + "21fa0f20f90f20fa0f6a21fb0f20fa0f20fb0f6a21fc0f20fb0f20fc0f6a21fd0f20fc0f20fd0f6a21fe0f20fd0f20" + "fe0f6a21ff0f20fe0f20ff0f6a21801020ff0f2080106a2181102080102081106a2182102081102082106a21831020" + "82102083106a2184102083102084106a2185102084102085106a2186102085102086106a2187102086102087106a21" + "88102087102088106a2189102088102089106a218a10208910208a106a218b10208a10208b106a218c10208b10208c" + "106a218d10208c10208d106a218e10208d10208e106a218f10208e10208f106a219010208f102090106a2191102090" + "102091106a2192102091102092106a2193102092102093106a2194102093102094106a2195102094102095106a2196" + "102095102096106a2197102096102097106a2198102097102098106a2199102098102099106a219a10209910209a10" + "6a219b10209a10209b106a219c10209b10209c106a219d10209c10209d106a219e10209d10209e106a219f10209e10" + "209f106a21a010209f1020a0106a21a11020a01020a1106a21a21020a11020a2106a21a31020a21020a3106a21a410" + "20a31020a4106a21a51020a41020a5106a21a61020a51020a6106a21a71020a61020a7106a21a81020a71020a8106a" + "21a91020a81020a9106a21aa1020a91020aa106a21ab1020aa1020ab106a21ac1020ab1020ac106a21ad1020ac1020" + "ad106a21ae1020ad1020ae106a21af1020ae1020af106a21b01020af1020b0106a21b11020b01020b1106a21b21020" + "b11020b2106a21b31020b21020b3106a21b41020b31020b4106a21b51020b41020b5106a21b61020b51020b6106a21" + "b71020b61020b7106a21b81020b71020b8106a21b91020b81020b9106a21ba1020b91020ba106a21bb1020ba1020bb" + "106a21bc1020bb1020bc106a21bd1020bc1020bd106a21be1020bd1020be106a21bf1020be1020bf106a21c01020bf" + "1020c0106a21c11020c01020c1106a21c21020c11020c2106a21c31020c21020c3106a21c41020c31020c4106a21c5" + "1020c41020c5106a21c61020c51020c6106a21c71020c61020c7106a21c81020c71020c8106a21c91020c81020c910" + "6a21ca1020c91020ca106a21cb1020ca1020cb106a21cc1020cb1020cc106a21cd1020cc1020cd106a21ce1020cd10" + "20ce106a21cf1020ce1020cf106a21d01020cf1020d0106a21d11020d01020d1106a21d21020d11020d2106a21d310" + "20d21020d3106a21d41020d31020d4106a21d51020d41020d5106a21d61020d51020d6106a21d71020d61020d7106a" + "21d81020d71020d8106a21d91020d81020d9106a21da1020d91020da106a21db1020da1020db106a21dc1020db1020" + "dc106a21dd1020dc1020dd106a21de1020dd1020de106a21df1020de1020df106a21e01020df1020e0106a21e11020" + "e01020e1106a21e21020e11020e2106a21e31020e21020e3106a21e41020e31020e4106a21e51020e41020e5106a21" + "e61020e51020e6106a21e71020e61020e7106a21e81020e71020e8106a21e91020e81020e9106a21ea1020e91020ea" + "106a21eb1020ea1020eb106a21ec1020eb1020ec106a21ed1020ec1020ed106a21ee1020ed1020ee106a21ef1020ee" + "1020ef106a21f01020ef1020f0106a21f11020f01020f1106a21f21020f11020f2106a21f31020f21020f3106a21f4" + "1020f31020f4106a21f51020f41020f5106a21f61020f51020f6106a21f71020f61020f7106a21f81020f71020f810" + "6a21f91020f81020f9106a21fa1020f91020fa106a21fb1020fa1020fb106a21fc1020fb1020fc106a21fd1020fc10" + "20fd106a21fe1020fd1020fe106a21ff1020fe1020ff106a21801120ff102080116a2181112080112081116a218211" + "2081112082116a2183112082112083116a2184112083112084116a2185112084112085116a2186112085112086116a" + "2187112086112087116a2188112087112088116a2189112088112089116a218a11208911208a116a218b11208a1120" + "8b116a218c11208b11208c116a218d11208c11208d116a218e11208d11208e116a218f11208e11208f116a21901120" + "8f112090116a2191112090112091116a2192112091112092116a2193112092112093116a2194112093112094116a21" + "95112094112095116a2196112095112096116a2197112096112097116a2198112097112098116a2199112098112099" + "116a219a11209911209a116a219b11209a11209b116a219c11209b11209c116a219d11209c11209d116a219e11209d" + "11209e116a219f11209e11209f116a21a011209f1120a0116a21a11120a01120a1116a21a21120a11120a2116a21a3" + "1120a21120a3116a21a41120a31120a4116a21a51120a41120a5116a21a61120a51120a6116a21a71120a61120a711" + "6a21a81120a71120a8116a21a91120a81120a9116a21aa1120a91120aa116a21ab1120aa1120ab116a21ac1120ab11" + "20ac116a21ad1120ac1120ad116a21ae1120ad1120ae116a21af1120ae1120af116a21b01120af1120b0116a21b111" + "20b01120b1116a21b21120b11120b2116a21b31120b21120b3116a21b41120b31120b4116a21b51120b41120b5116a" + "21b61120b51120b6116a21b71120b61120b7116a21b81120b71120b8116a21b91120b81120b9116a21ba1120b91120" + "ba116a21bb1120ba1120bb116a21bc1120bb1120bc116a21bd1120bc1120bd116a21be1120bd1120be116a21bf1120" + "be1120bf116a21c01120bf1120c0116a21c11120c01120c1116a21c21120c11120c2116a21c31120c21120c3116a21" + "c41120c31120c4116a21c51120c41120c5116a21c61120c51120c6116a21c71120c61120c7116a21c81120c71120c8" + "116a21c91120c81120c9116a21ca1120c91120ca116a21cb1120ca1120cb116a21cc1120cb1120cc116a21cd1120cc" + "1120cd116a21ce1120cd1120ce116a21cf1120ce1120cf116a21d01120cf1120d0116a21d11120d01120d1116a21d2" + "1120d11120d2116a21d31120d21120d3116a21d41120d31120d4116a21d51120d41120d5116a21d61120d51120d611" + "6a21d71120d61120d7116a21d81120d71120d8116a21d91120d81120d9116a21da1120d91120da116a21db1120da11" + "20db116a21dc1120db1120dc116a21dd1120dc1120dd116a21de1120dd1120de116a21df1120de1120df116a21e011" + "20df1120e0116a21e11120e01120e1116a21e21120e11120e2116a21e31120e21120e3116a21e41120e31120e4116a" + "21e51120e41120e5116a21e61120e51120e6116a21e71120e61120e7116a21e81120e71120e8116a21e91120e81120" + "e9116a21ea1120e91120ea116a21eb1120ea1120eb116a21ec1120eb1120ec116a21ed1120ec1120ed116a21ee1120" + "ed1120ee116a21ef1120ee1120ef116a21f01120ef1120f0116a21f11120f01120f1116a21f21120f11120f2116a21" + "f31120f21120f3116a21f41120f31120f4116a21f51120f41120f5116a21f61120f51120f6116a21f71120f61120f7" + "116a21f81120f71120f8116a21f91120f81120f9116a21fa1120f91120fa116a21fb1120fa1120fb116a21fc1120fb" + "1120fc116a21fd1120fc1120fd116a21fe1120fd1120fe116a21ff1120fe1120ff116a21801220ff112080126a2181" + "122080122081126a2182122081122082126a2183122082122083126a2184122083122084126a218512208412208512" + "6a2186122085122086126a2187122086122087126a2188122087122088126a2189122088122089126a218a12208912" + "208a126a218b12208a12208b126a218c12208b12208c126a218d12208c12208d126a218e12208d12208e126a218f12" + "208e12208f126a219012208f122090126a2191122090122091126a2192122091122092126a2193122092122093126a" + "2194122093122094126a2195122094122095126a2196122095122096126a2197122096122097126a21981220971220" + "98126a2199122098122099126a219a12209912209a126a219b12209a12209b126a219c12209b12209c126a219d1220" + "9c12209d126a219e12209d12209e126a219f12209e12209f126a21a012209f1220a0126a21a11220a01220a1126a21" + "a21220a11220a2126a21a31220a21220a3126a21a41220a31220a4126a21a51220a41220a5126a21a61220a51220a6" + "126a21a71220a61220a7126a21a81220a71220a8126a21a91220a81220a9126a21aa1220a91220aa126a21ab1220aa" + "1220ab126a21ac1220ab1220ac126a21ad1220ac1220ad126a21ae1220ad1220ae126a21af1220ae1220af126a21b0" + "1220af1220b0126a21b11220b01220b1126a21b21220b11220b2126a21b31220b21220b3126a21b41220b31220b412" + "6a21b51220b41220b5126a21b61220b51220b6126a21b71220b61220b7126a21b81220b71220b8126a21b91220b812" + "20b9126a21ba1220b91220ba126a21bb1220ba1220bb126a21bc1220bb1220bc126a21bd1220bc1220bd126a21be12" + "20bd1220be126a21bf1220be1220bf126a21c01220bf1220c0126a21c11220c01220c1126a21c21220c11220c2126a" + "21c31220c21220c3126a21c41220c31220c4126a21c51220c41220c5126a21c61220c51220c6126a21c71220c61220" + "c7126a21c81220c71220c8126a21c91220c81220c9126a21ca1220c91220ca126a21cb1220ca1220cb126a21cc1220" + "cb1220cc126a21cd1220cc1220cd126a21ce1220cd1220ce126a21cf1220ce1220cf126a21d01220cf1220d0126a21" + "d11220d01220d1126a21d21220d11220d2126a21d31220d21220d3126a21d41220d31220d4126a21d51220d41220d5" + "126a21d61220d51220d6126a21d71220d61220d7126a21d81220d71220d8126a21d91220d81220d9126a21da1220d9" + "1220da126a21db1220da1220db126a21dc1220db1220dc126a21dd1220dc1220dd126a21de1220dd1220de126a21df" + "1220de1220df126a21e01220df1220e0126a21e11220e01220e1126a21e21220e11220e2126a21e31220e21220e312" + "6a21e41220e31220e4126a21e51220e41220e5126a21e61220e51220e6126a21e71220e61220e7126a21e81220e712" + "20e8126a21e91220e81220e9126a21ea1220e91220ea126a21eb1220ea1220eb126a21ec1220eb1220ec126a21ed12" + "20ec1220ed126a21ee1220ed1220ee126a21ef1220ee1220ef126a21f01220ef1220f0126a21f11220f01220f1126a" + "21f21220f11220f2126a21f31220f21220f3126a21f41220f31220f4126a21f51220f41220f5126a21f61220f51220" + "f6126a21f71220f61220f7126a21f81220f71220f8126a21f91220f81220f9126a21fa1220f91220fa126a21fb1220" + "fa1220fb126a21fc1220fb1220fc126a21fd1220fc1220fd126a21fe1220fd1220fe126a21ff1220fe1220ff126a21" + "801320ff122080136a2181132080132081136a2182132081132082136a2183132082132083136a2184132083132084" + "136a2185132084132085136a2186132085132086136a2187132086132087136a2188132087132088136a2189132088" + "132089136a218a13208913208a136a218b13208a13208b136a218c13208b13208c136a218d13208c13208d136a218e" + "13208d13208e136a218f13208e13208f136a219013208f132090136a2191132090132091136a219213209113209213" + "6a2193132092132093136a2194132093132094136a2195132094132095136a2196132095132096136a219713209613" + "2097136a2198132097132098136a2199132098132099136a219a13209913209a136a219b13209a13209b136a219c13" + "209b13209c136a219d13209c13209d136a219e13209d13209e136a219f13209e13209f136a21a013209f1320a0136a" + "21a11320a01320a1136a21a21320a11320a2136a21a31320a21320a3136a21a41320a31320a4136a21a51320a41320" + "a5136a21a61320a51320a6136a21a71320a61320a7136a21a81320a71320a8136a21a91320a81320a9136a21aa1320" + "a91320aa136a21ab1320aa1320ab136a21ac1320ab1320ac136a21ad1320ac1320ad136a21ae1320ad1320ae136a21" + "af1320ae1320af136a21b01320af1320b0136a21b11320b01320b1136a21b21320b11320b2136a21b31320b21320b3" + "136a21b41320b31320b4136a21b51320b41320b5136a21b61320b51320b6136a21b71320b61320b7136a21b81320b7" + "1320b8136a21b91320b81320b9136a21ba1320b91320ba136a21bb1320ba1320bb136a21bc1320bb1320bc136a21bd" + "1320bc1320bd136a21be1320bd1320be136a21bf1320be1320bf136a21c01320bf1320c0136a21c11320c01320c113" + "6a21c21320c11320c2136a21c31320c21320c3136a21c41320c31320c4136a21c51320c41320c5136a21c61320c513" + "20c6136a21c71320c61320c7136a21c81320c71320c8136a21c91320c81320c9136a21ca1320c91320ca136a21cb13" + "20ca1320cb136a21cc1320cb1320cc136a21cd1320cc1320cd136a21ce1320cd1320ce136a21cf1320ce1320cf136a" + "21d01320cf1320d0136a21d11320d01320d1136a21d21320d11320d2136a21d31320d21320d3136a21d41320d31320" + "d4136a21d51320d41320d5136a21d61320d51320d6136a21d71320d61320d7136a21d81320d71320d8136a21d91320" + "d81320d9136a21da1320d91320da136a21db1320da1320db136a21dc1320db1320dc136a21dd1320dc1320dd136a21" + "de1320dd1320de136a21df1320de1320df136a21e01320df1320e0136a21e11320e01320e1136a21e21320e11320e2" + "136a21e31320e21320e3136a21e41320e31320e4136a21e51320e41320e5136a21e61320e51320e6136a21e71320e6" + "1320e7136a21e81320e71320e8136a21e91320e81320e9136a21ea1320e91320ea136a21eb1320ea1320eb136a21ec" + "1320eb1320ec136a21ed1320ec1320ed136a21ee1320ed1320ee136a21ef1320ee1320ef136a21f01320ef1320f013" + "6a21f11320f01320f1136a21f21320f11320f2136a21f31320f21320f3136a21f41320f31320f4136a21f51320f413" + "20f5136a21f61320f51320f6136a21f71320f61320f7136a21f81320f71320f8136a21f91320f81320f9136a21fa13" + "20f91320fa136a21fb1320fa1320fb136a21fc1320fb1320fc136a21fd1320fc1320fd136a21fe1320fd1320fe136a" + "21ff1320fe1320ff136a21801420ff132080146a2181142080142081146a2182142081142082146a21831420821420" + "83146a2184142083142084146a2185142084142085146a2186142085142086146a2187142086142087146a21881420" + "87142088146a2189142088142089146a218a14208914208a146a218b14208a14208b146a218c14208b14208c146a21" + "8d14208c14208d146a218e14208d14208e146a218f14208e14208f146a219014208f142090146a2191142090142091" + "146a2192142091142092146a2193142092142093146a2194142093142094146a2195142094142095146a2196142095" + "142096146a2197142096142097146a2198142097142098146a2199142098142099146a219a14209914209a146a219b" + "14209a14209b146a219c14209b14209c146a219d14209c14209d146a219e14209d14209e146a219f14209e14209f14" + "6a21a014209f1420a0146a21a11420a01420a1146a21a21420a11420a2146a21a31420a21420a3146a21a41420a314" + "20a4146a21a51420a41420a5146a21a61420a51420a6146a21a71420a61420a7146a21a81420a71420a8146a21a914" + "20a81420a9146a21aa1420a91420aa146a21ab1420aa1420ab146a21ac1420ab1420ac146a21ad1420ac1420ad146a" + "21ae1420ad1420ae146a21af1420ae1420af146a21b01420af1420b0146a21b11420b01420b1146a21b21420b11420" + "b2146a21b31420b21420b3146a21b41420b31420b4146a21b51420b41420b5146a21b61420b51420b6146a21b71420" + "b61420b7146a21b81420b71420b8146a21b91420b81420b9146a21ba1420b91420ba146a21bb1420ba1420bb146a21" + "bc1420bb1420bc146a21bd1420bc1420bd146a21be1420bd1420be146a21bf1420be1420bf146a21c01420bf1420c0" + "146a21c11420c01420c1146a21c21420c11420c2146a21c31420c21420c3146a21c41420c31420c4146a21c51420c4" + "1420c5146a21c61420c51420c6146a21c71420c61420c7146a21c81420c71420c8146a21c91420c81420c9146a21ca" + "1420c91420ca146a21cb1420ca1420cb146a21cc1420cb1420cc146a21cd1420cc1420cd146a21ce1420cd1420ce14" + "6a21cf1420ce1420cf146a21d01420cf1420d0146a21d11420d01420d1146a21d21420d11420d2146a21d31420d214" + "20d3146a21d41420d31420d4146a21d51420d41420d5146a21d61420d51420d6146a21d71420d61420d7146a21d814" + "20d71420d8146a21d91420d81420d9146a21da1420d91420da146a21db1420da1420db146a21dc1420db1420dc146a" + "21dd1420dc1420dd146a21de1420dd1420de146a21df1420de1420df146a21e01420df1420e0146a21e11420e01420" + "e1146a21e21420e11420e2146a21e31420e21420e3146a21e41420e31420e4146a21e51420e41420e5146a21e61420" + "e51420e6146a21e71420e61420e7146a21e81420e71420e8146a21e91420e81420e9146a21ea1420e91420ea146a21" + "eb1420ea1420eb146a21ec1420eb1420ec146a21ed1420ec1420ed146a21ee1420ed1420ee146a21ef1420ee1420ef" + "146a21f01420ef1420f0146a21f11420f01420f1146a21f21420f11420f2146a21f31420f21420f3146a21f41420f3" + "1420f4146a21f51420f41420f5146a21f61420f51420f6146a21f71420f61420f7146a21f81420f71420f8146a21f9" + "1420f81420f9146a21fa1420f91420fa146a21fb1420fa1420fb146a21fc1420fb1420fc146a21fd1420fc1420fd14" + "6a21fe1420fd1420fe146a21ff1420fe1420ff146a21801520ff142080156a2181152080152081156a218215208115" + "2082156a2183152082152083156a2184152083152084156a2185152084152085156a2186152085152086156a218715" + "2086152087156a2188152087152088156a2189152088152089156a218a15208915208a156a218b15208a15208b156a" + "218c15208b15208c156a218d15208c15208d156a218e15208d15208e156a218f15208e15208f156a219015208f1520" + "90156a2191152090152091156a2192152091152092156a2193152092152093156a2194152093152094156a21951520" + "94152095156a2196152095152096156a2197152096152097156a2198152097152098156a2199152098152099156a21" + "9a15209915209a156a219b15209a15209b156a219c15209b15209c156a219d15209c15209d156a219e15209d15209e" + "156a219f15209e15209f156a21a015209f1520a0156a21a11520a01520a1156a21a21520a11520a2156a21a31520a2" + "1520a3156a21a41520a31520a4156a21a51520a41520a5156a21a61520a51520a6156a21a71520a61520a7156a21a8" + "1520a71520a8156a21a91520a81520a9156a21aa1520a91520aa156a21ab1520aa1520ab156a21ac1520ab1520ac15" + "6a21ad1520ac1520ad156a21ae1520ad1520ae156a21af1520ae1520af156a21b01520af1520b0156a21b11520b015" + "20b1156a21b21520b11520b2156a21b31520b21520b3156a21b41520b31520b4156a21b51520b41520b5156a21b615" + "20b51520b6156a21b71520b61520b7156a21b81520b71520b8156a21b91520b81520b9156a21ba1520b91520ba156a" + "21bb1520ba1520bb156a21bc1520bb1520bc156a21bd1520bc1520bd156a21be1520bd1520be156a21bf1520be1520" + "bf156a21c01520bf1520c0156a21c11520c01520c1156a21c21520c11520c2156a21c31520c21520c3156a21c41520" + "c31520c4156a21c51520c41520c5156a21c61520c51520c6156a21c71520c61520c7156a21c81520c71520c8156a21" + "c91520c81520c9156a21ca1520c91520ca156a21cb1520ca1520cb156a21cc1520cb1520cc156a21cd1520cc1520cd" + "156a21ce1520cd1520ce156a21cf1520ce1520cf156a21d01520cf1520d0156a21d11520d01520d1156a21d21520d1" + "1520d2156a21d31520d21520d3156a21d41520d31520d4156a21d51520d41520d5156a21d61520d51520d6156a21d7" + "1520d61520d7156a21d81520d71520d8156a21d91520d81520d9156a21da1520d91520da156a21db1520da1520db15" + "6a21dc1520db1520dc156a21dd1520dc1520dd156a21de1520dd1520de156a21df1520de1520df156a21e01520df15" + "20e0156a21e11520e01520e1156a21e21520e11520e2156a21e31520e21520e3156a21e41520e31520e4156a21e515" + "20e41520e5156a21e61520e51520e6156a21e71520e61520e7156a21e81520e71520e8156a21e91520e81520e9156a" + "21ea1520e91520ea156a21eb1520ea1520eb156a21ec1520eb1520ec156a21ed1520ec1520ed156a21ee1520ed1520" + "ee156a21ef1520ee1520ef156a21f01520ef1520f0156a21f11520f01520f1156a21f21520f11520f2156a21f31520" + "f21520f3156a21f41520f31520f4156a21f51520f41520f5156a21f61520f51520f6156a21f71520f61520f7156a21" + "f81520f71520f8156a21f91520f81520f9156a21fa1520f91520fa156a21fb1520fa1520fb156a21fc1520fb1520fc" + "156a21fd1520fc1520fd156a21fe1520fd1520fe156a21ff1520fe1520ff156a21801620ff152080166a2181162080" + "162081166a2182162081162082166a2183162082162083166a2184162083162084166a2185162084162085166a2186" + "162085162086166a2187162086162087166a2188162087162088166a2189162088162089166a218a16208916208a16" + "6a218b16208a16208b166a218c16208b16208c166a218d16208c16208d166a218e16208d16208e166a218f16208e16" + "208f166a219016208f162090166a2191162090162091166a2192162091162092166a2193162092162093166a219416" + "2093162094166a2195162094162095166a2196162095162096166a2197162096162097166a2198162097162098166a" + "2199162098162099166a219a16209916209a166a219b16209a16209b166a219c16209b16209c166a219d16209c1620" + "9d166a219e16209d16209e166a219f16209e16209f166a21a016209f1620a0166a21a11620a01620a1166a21a21620" + "a11620a2166a21a31620a21620a3166a21a41620a31620a4166a21a51620a41620a5166a21a61620a51620a6166a21" + "a71620a61620a7166a21a81620a71620a8166a21a91620a81620a9166a21aa1620a91620aa166a21ab1620aa1620ab" + "166a21ac1620ab1620ac166a21ad1620ac1620ad166a21ae1620ad1620ae166a21af1620ae1620af166a21b01620af" + "1620b0166a21b11620b01620b1166a21b21620b11620b2166a21b31620b21620b3166a21b41620b31620b4166a21b5" + "1620b41620b5166a21b61620b51620b6166a21b71620b61620b7166a21b81620b71620b8166a21b91620b81620b916" + "6a21ba1620b91620ba166a21bb1620ba1620bb166a21bc1620bb1620bc166a21bd1620bc1620bd166a21be1620bd16" + "20be166a21bf1620be1620bf166a21c01620bf1620c0166a21c11620c01620c1166a21c21620c11620c2166a21c316" + "20c21620c3166a21c41620c31620c4166a21c51620c41620c5166a21c61620c51620c6166a21c71620c61620c7166a" + "21c81620c71620c8166a21c91620c81620c9166a21ca1620c91620ca166a21cb1620ca1620cb166a21cc1620cb1620" + "cc166a21cd1620cc1620cd166a21ce1620cd1620ce166a21cf1620ce1620cf166a21d01620cf1620d0166a21d11620" + "d01620d1166a21d21620d11620d2166a21d31620d21620d3166a21d41620d31620d4166a21d51620d41620d5166a21" + "d61620d51620d6166a21d71620d61620d7166a21d81620d71620d8166a21d91620d81620d9166a21da1620d91620da" + "166a21db1620da1620db166a21dc1620db1620dc166a21dd1620dc1620dd166a21de1620dd1620de166a21df1620de" + "1620df166a21e01620df1620e0166a21e11620e01620e1166a21e21620e11620e2166a21e31620e21620e3166a21e4" + "1620e31620e4166a21e51620e41620e5166a21e61620e51620e6166a21e71620e61620e7166a21e81620e71620e816" + "6a21e91620e81620e9166a21ea1620e91620ea166a21eb1620ea1620eb166a21ec1620eb1620ec166a21ed1620ec16" + "20ed166a21ee1620ed1620ee166a21ef1620ee1620ef166a21f01620ef1620f0166a21f11620f01620f1166a21f216" + "20f11620f2166a21f31620f21620f3166a21f41620f31620f4166a21f51620f41620f5166a21f61620f51620f6166a" + "21f71620f61620f7166a21f81620f71620f8166a21f91620f81620f9166a21fa1620f91620fa166a21fb1620fa1620" + "fb166a21fc1620fb1620fc166a21fd1620fc1620fd166a21fe1620fd1620fe166a21ff1620fe1620ff166a21801720" + "ff162080176a2181172080172081176a2182172081172082176a2183172082172083176a2184172083172084176a21" + "85172084172085176a2186172085172086176a2187172086172087176a2188172087172088176a2189172088172089" + "176a218a17208917208a176a218b17208a17208b176a218c17208b17208c176a218d17208c17208d176a218e17208d" + "17208e176a218f17208e17208f176a219017208f172090176a2191172090172091176a2192172091172092176a2193" + "172092172093176a2194172093172094176a2195172094172095176a2196172095172096176a219717209617209717" + "6a2198172097172098176a2199172098172099176a219a17209917209a176a219b17209a17209b176a219c17209b17" + "209c176a219d17209c17209d176a219e17209d17209e176a219f17209e17209f176a21a017209f1720a0176a21a117" + "20a01720a1176a21a21720a11720a2176a21a31720a21720a3176a21a41720a31720a4176a21a51720a41720a5176a" + "21a61720a51720a6176a21a71720a61720a7176a21a81720a71720a8176a21a91720a81720a9176a21aa1720a91720" + "aa176a21ab1720aa1720ab176a21ac1720ab1720ac176a21ad1720ac1720ad176a21ae1720ad1720ae176a21af1720" + "ae1720af176a21b01720af1720b0176a21b11720b01720b1176a21b21720b11720b2176a21b31720b21720b3176a21" + "b41720b31720b4176a21b51720b41720b5176a21b61720b51720b6176a21b71720b61720b7176a21b81720b71720b8" + "176a21b91720b81720b9176a21ba1720b91720ba176a21bb1720ba1720bb176a21bc1720bb1720bc176a21bd1720bc" + "1720bd176a21be1720bd1720be176a21bf1720be1720bf176a21c01720bf1720c0176a21c11720c01720c1176a21c2" + "1720c11720c2176a21c31720c21720c3176a21c41720c31720c4176a21c51720c41720c5176a21c61720c51720c617" + "6a21c71720c61720c7176a21c81720c71720c8176a21c91720c81720c9176a21ca1720c91720ca176a21cb1720ca17" + "20cb176a21cc1720cb1720cc176a21cd1720cc1720cd176a21ce1720cd1720ce176a21cf1720ce1720cf176a21d017" + "20cf1720d0176a21d11720d01720d1176a21d21720d11720d2176a21d31720d21720d3176a21d41720d31720d4176a" + "21d51720d41720d5176a21d61720d51720d6176a21d71720d61720d7176a21d81720d71720d8176a21d91720d81720" + "d9176a21da1720d91720da176a21db1720da1720db176a21dc1720db1720dc176a21dd1720dc1720dd176a21de1720" + "dd1720de176a21df1720de1720df176a21e01720df1720e0176a21e11720e01720e1176a21e21720e11720e2176a21" + "e31720e21720e3176a21e41720e31720e4176a21e51720e41720e5176a21e61720e51720e6176a21e71720e61720e7" + "176a21e81720e71720e8176a21e91720e81720e9176a21ea1720e91720ea176a21eb1720ea1720eb176a21ec1720eb" + "1720ec176a21ed1720ec1720ed176a21ee1720ed1720ee176a21ef1720ee1720ef176a21f01720ef1720f0176a21f1" + "1720f01720f1176a21f21720f11720f2176a21f31720f21720f3176a21f41720f31720f4176a21f51720f41720f517" + "6a21f61720f51720f6176a21f71720f61720f7176a21f81720f71720f8176a21f91720f81720f9176a21fa1720f917" + "20fa176a21fb1720fa1720fb176a21fc1720fb1720fc176a21fd1720fc1720fd176a21fe1720fd1720fe176a21ff17" + "20fe1720ff176a21801820ff172080186a2181182080182081186a2182182081182082186a2183182082182083186a" + "2184182083182084186a2185182084182085186a2186182085182086186a2187182086182087186a21881820871820" + "88186a2189182088182089186a218a18208918208a186a218b18208a18208b186a218c18208b18208c186a218d1820" + "8c18208d186a218e18208d18208e186a218f18208e18208f186a219018208f182090186a2191182090182091186a21" + "92182091182092186a2193182092182093186a2194182093182094186a2195182094182095186a2196182095182096" + "186a2197182096182097186a2198182097182098186a2199182098182099186a219a18209918209a186a219b18209a" + "18209b186a219c18209b18209c186a219d18209c18209d186a219e18209d18209e186a219f18209e18209f186a21a0" + "18209f1820a0186a21a11820a01820a1186a21a21820a11820a2186a21a31820a21820a3186a21a41820a31820a418" + "6a21a51820a41820a5186a21a61820a51820a6186a21a71820a61820a7186a21a81820a71820a8186a21a91820a818" + "20a9186a21aa1820a91820aa186a21ab1820aa1820ab186a21ac1820ab1820ac186a21ad1820ac1820ad186a21ae18" + "20ad1820ae186a21af1820ae1820af186a21b01820af1820b0186a21b11820b01820b1186a21b21820b11820b2186a" + "21b31820b21820b3186a21b41820b31820b4186a21b51820b41820b5186a21b61820b51820b6186a21b71820b61820" + "b7186a21b81820b71820b8186a21b91820b81820b9186a21ba1820b91820ba186a21bb1820ba1820bb186a21bc1820" + "bb1820bc186a21bd1820bc1820bd186a21be1820bd1820be186a21bf1820be1820bf186a21c01820bf1820c0186a21" + "c11820c01820c1186a21c21820c11820c2186a21c31820c21820c3186a21c41820c31820c4186a21c51820c41820c5" + "186a21c61820c51820c6186a21c71820c61820c7186a21c81820c71820c8186a21c91820c81820c9186a21ca1820c9" + "1820ca186a21cb1820ca1820cb186a21cc1820cb1820cc186a21cd1820cc1820cd186a21ce1820cd1820ce186a21cf" + "1820ce1820cf186a21d01820cf1820d0186a21d11820d01820d1186a21d21820d11820d2186a21d31820d21820d318" + "6a21d41820d31820d4186a21d51820d41820d5186a21d61820d51820d6186a21d71820d61820d7186a21d81820d718" + "20d8186a21d91820d81820d9186a21da1820d91820da186a21db1820da1820db186a21dc1820db1820dc186a21dd18" + "20dc1820dd186a21de1820dd1820de186a21df1820de1820df186a21e01820df1820e0186a21e11820e01820e1186a" + "21e21820e11820e2186a21e31820e21820e3186a21e41820e31820e4186a21e51820e41820e5186a21e61820e51820" + "e6186a21e71820e61820e7186a21e81820e71820e8186a21e91820e81820e9186a21ea1820e91820ea186a21eb1820" + "ea1820eb186a21ec1820eb1820ec186a21ed1820ec1820ed186a21ee1820ed1820ee186a21ef1820ee1820ef186a21" + "f01820ef1820f0186a21f11820f01820f1186a21f21820f11820f2186a21f31820f21820f3186a21f41820f31820f4" + "186a21f51820f41820f5186a21f61820f51820f6186a21f71820f61820f7186a21f81820f71820f8186a21f91820f8" + "1820f9186a21fa1820f91820fa186a21fb1820fa1820fb186a21fc1820fb1820fc186a21fd1820fc1820fd186a21fe" + "1820fd1820fe186a21ff1820fe1820ff186a21801920ff182080196a2181192080192081196a218219208119208219" + "6a2183192082192083196a2184192083192084196a2185192084192085196a2186192085192086196a218719208619" + "2087196a2188192087192088196a2189192088192089196a218a19208919208a196a218b19208a19208b196a218c19" + "208b19208c196a218d19208c19208d196a218e19208d19208e196a218f19208e19208f196a219019208f192090196a" + "2191192090192091196a2192192091192092196a2193192092192093196a2194192093192094196a21951920941920" + "95196a2196192095192096196a2197192096192097196a2198192097192098196a2199192098192099196a219a1920" + "9919209a196a219b19209a19209b196a219c19209b19209c196a219d19209c19209d196a219e19209d19209e196a21" + "9f19209e19209f196a21a019209f1920a0196a21a11920a01920a1196a21a21920a11920a2196a21a31920a21920a3" + "196a21a41920a31920a4196a21a51920a41920a5196a21a61920a51920a6196a21a71920a61920a7196a21a81920a7" + "1920a8196a21a91920a81920a9196a21aa1920a91920aa196a21ab1920aa1920ab196a21ac1920ab1920ac196a21ad" + "1920ac1920ad196a21ae1920ad1920ae196a21af1920ae1920af196a21b01920af1920b0196a21b11920b01920b119" + "6a21b21920b11920b2196a21b31920b21920b3196a21b41920b31920b4196a21b51920b41920b5196a21b61920b519" + "20b6196a21b71920b61920b7196a21b81920b71920b8196a21b91920b81920b9196a21ba1920b91920ba196a21bb19" + "20ba1920bb196a21bc1920bb1920bc196a21bd1920bc1920bd196a21be1920bd1920be196a21bf1920be1920bf196a" + "21c01920bf1920c0196a21c11920c01920c1196a21c21920c11920c2196a21c31920c21920c3196a21c41920c31920" + "c4196a21c51920c41920c5196a21c61920c51920c6196a21c71920c61920c7196a21c81920c71920c8196a21c91920" + "c81920c9196a21ca1920c91920ca196a21cb1920ca1920cb196a21cc1920cb1920cc196a21cd1920cc1920cd196a21" + "ce1920cd1920ce196a21cf1920ce1920cf196a21d01920cf1920d0196a21d11920d01920d1196a21d21920d11920d2" + "196a21d31920d21920d3196a21d41920d31920d4196a21d51920d41920d5196a21d61920d51920d6196a21d71920d6" + "1920d7196a21d81920d71920d8196a21d91920d81920d9196a21da1920d91920da196a21db1920da1920db196a21dc" + "1920db1920dc196a21dd1920dc1920dd196a21de1920dd1920de196a21df1920de1920df196a21e01920df1920e019" + "6a21e11920e01920e1196a21e21920e11920e2196a21e31920e21920e3196a21e41920e31920e4196a21e51920e419" + "20e5196a21e61920e51920e6196a21e71920e61920e7196a21e81920e71920e8196a21e91920e81920e9196a21ea19" + "20e91920ea196a21eb1920ea1920eb196a21ec1920eb1920ec196a21ed1920ec1920ed196a21ee1920ed1920ee196a" + "21ef1920ee1920ef196a21f01920ef1920f0196a21f11920f01920f1196a21f21920f11920f2196a21f31920f21920" + "f3196a21f41920f31920f4196a21f51920f41920f5196a21f61920f51920f6196a21f71920f61920f7196a21f81920" + "f71920f8196a21f91920f81920f9196a21fa1920f91920fa196a21fb1920fa1920fb196a21fc1920fb1920fc196a21" + "fd1920fc1920fd196a21fe1920fd1920fe196a21ff1920fe1920ff196a21801a20ff1920801a6a21811a20801a2081" + "1a6a21821a20811a20821a6a21831a20821a20831a6a21841a20831a20841a6a21851a20841a20851a6a21861a2085" + "1a20861a6a21871a20861a20871a6a21881a20871a20881a6a21891a20881a20891a6a218a1a20891a208a1a6a218b" + "1a208a1a208b1a6a218c1a208b1a208c1a6a218d1a208c1a208d1a6a218e1a208d1a208e1a6a218f1a208e1a208f1a" + "6a21901a208f1a20901a6a21911a20901a20911a6a21921a20911a20921a6a21931a20921a20931a6a21941a20931a" + "20941a6a21951a20941a20951a6a21961a20951a20961a6a21971a20961a20971a6a21981a20971a20981a6a21991a" + "20981a20991a6a219a1a20991a209a1a6a219b1a209a1a209b1a6a219c1a209b1a209c1a6a219d1a209c1a209d1a6a" + "219e1a209d1a209e1a6a219f1a209e1a209f1a6a21a01a209f1a20a01a6a21a11a20a01a20a11a6a21a21a20a11a20" + "a21a6a21a31a20a21a20a31a6a21a41a20a31a20a41a6a21a51a20a41a20a51a6a21a61a20a51a20a61a6a21a71a20" + "a61a20a71a6a21a81a20a71a20a81a6a21a91a20a81a20a91a6a21aa1a20a91a20aa1a6a21ab1a20aa1a20ab1a6a21" + "ac1a20ab1a20ac1a6a21ad1a20ac1a20ad1a6a21ae1a20ad1a20ae1a6a21af1a20ae1a20af1a6a21b01a20af1a20b0" + "1a6a21b11a20b01a20b11a6a21b21a20b11a20b21a6a21b31a20b21a20b31a6a21b41a20b31a20b41a6a21b51a20b4" + "1a20b51a6a21b61a20b51a20b61a6a21b71a20b61a20b71a6a21b81a20b71a20b81a6a21b91a20b81a20b91a6a21ba" + "1a20b91a20ba1a6a21bb1a20ba1a20bb1a6a21bc1a20bb1a20bc1a6a21bd1a20bc1a20bd1a6a21be1a20bd1a20be1a" + "6a21bf1a20be1a20bf1a6a21c01a20bf1a20c01a6a21c11a20c01a20c11a6a21c21a20c11a20c21a6a21c31a20c21a" + "20c31a6a21c41a20c31a20c41a6a21c51a20c41a20c51a6a21c61a20c51a20c61a6a21c71a20c61a20c71a6a21c81a" + "20c71a20c81a6a21c91a20c81a20c91a6a21ca1a20c91a20ca1a6a21cb1a20ca1a20cb1a6a21cc1a20cb1a20cc1a6a" + "21cd1a20cc1a20cd1a6a21ce1a20cd1a20ce1a6a21cf1a20ce1a20cf1a6a21d01a20cf1a20d01a6a21d11a20d01a20" + "d11a6a21d21a20d11a20d21a6a21d31a20d21a20d31a6a21d41a20d31a20d41a6a21d51a20d41a20d51a6a21d61a20" + "d51a20d61a6a21d71a20d61a20d71a6a21d81a20d71a20d81a6a21d91a20d81a20d91a6a21da1a20d91a20da1a6a21" + "db1a20da1a20db1a6a21dc1a20db1a20dc1a6a21dd1a20dc1a20dd1a6a21de1a20dd1a20de1a6a21df1a20de1a20df" + "1a6a21e01a20df1a20e01a6a21e11a20e01a20e11a6a21e21a20e11a20e21a6a21e31a20e21a20e31a6a21e41a20e3" + "1a20e41a6a21e51a20e41a20e51a6a21e61a20e51a20e61a6a21e71a20e61a20e71a6a21e81a20e71a20e81a6a21e9" + "1a20e81a20e91a6a21ea1a20e91a20ea1a6a21eb1a20ea1a20eb1a6a21ec1a20eb1a20ec1a6a21ed1a20ec1a20ed1a" + "6a21ee1a20ed1a20ee1a6a21ef1a20ee1a20ef1a6a21f01a20ef1a20f01a6a21f11a20f01a20f11a6a21f21a20f11a" + "20f21a6a21f31a20f21a20f31a6a21f41a20f31a20f41a6a21f51a20f41a20f51a6a21f61a20f51a20f61a6a21f71a" + "20f61a20f71a6a21f81a20f71a20f81a6a21f91a20f81a20f91a6a21fa1a20f91a20fa1a6a21fb1a20fa1a20fb1a6a" + "21fc1a20fb1a20fc1a6a21fd1a20fc1a20fd1a6a21fe1a20fd1a20fe1a6a21ff1a20fe1a20ff1a6a21801b20ff1a20" + "801b6a21811b20801b20811b6a21821b20811b20821b6a21831b20821b20831b6a21841b20831b20841b6a21851b20" + "841b20851b6a21861b20851b20861b6a21871b20861b20871b6a21881b20871b20881b6a21891b20881b20891b6a21" + "8a1b20891b208a1b6a218b1b208a1b208b1b6a218c1b208b1b208c1b6a218d1b208c1b208d1b6a218e1b208d1b208e" + "1b6a218f1b208e1b208f1b6a21901b208f1b20901b6a21911b20901b20911b6a21921b20911b20921b6a21931b2092" + "1b20931b6a21941b20931b20941b6a21951b20941b20951b6a21961b20951b20961b6a21971b20961b20971b6a2198" + "1b20971b20981b6a21991b20981b20991b6a219a1b20991b209a1b6a219b1b209a1b209b1b6a219c1b209b1b209c1b" + "6a219d1b209c1b209d1b6a219e1b209d1b209e1b6a219f1b209e1b209f1b6a21a01b209f1b20a01b6a21a11b20a01b" + "20a11b6a21a21b20a11b20a21b6a21a31b20a21b20a31b6a21a41b20a31b20a41b6a21a51b20a41b20a51b6a21a61b" + "20a51b20a61b6a21a71b20a61b20a71b6a21a81b20a71b20a81b6a21a91b20a81b20a91b6a21aa1b20a91b20aa1b6a" + "21ab1b20aa1b20ab1b6a21ac1b20ab1b20ac1b6a21ad1b20ac1b20ad1b6a21ae1b20ad1b20ae1b6a21af1b20ae1b20" + "af1b6a21b01b20af1b20b01b6a21b11b20b01b20b11b6a21b21b20b11b20b21b6a21b31b20b21b20b31b6a21b41b20" + "b31b20b41b6a21b51b20b41b20b51b6a21b61b20b51b20b61b6a21b71b20b61b20b71b6a21b81b20b71b20b81b6a21" + "b91b20b81b20b91b6a21ba1b20b91b20ba1b6a21bb1b20ba1b20bb1b6a21bc1b20bb1b20bc1b6a21bd1b20bc1b20bd" + "1b6a21be1b20bd1b20be1b6a21bf1b20be1b20bf1b6a21c01b20bf1b20c01b6a21c11b20c01b20c11b6a21c21b20c1" + "1b20c21b6a21c31b20c21b20c31b6a21c41b20c31b20c41b6a21c51b20c41b20c51b6a21c61b20c51b20c61b6a21c7" + "1b20c61b20c71b6a21c81b20c71b20c81b6a21c91b20c81b20c91b6a21ca1b20c91b20ca1b6a21cb1b20ca1b20cb1b" + "6a21cc1b20cb1b20cc1b6a21cd1b20cc1b20cd1b6a21ce1b20cd1b20ce1b6a21cf1b20ce1b20cf1b6a21d01b20cf1b" + "20d01b6a21d11b20d01b20d11b6a21d21b20d11b20d21b6a21d31b20d21b20d31b6a21d41b20d31b20d41b6a21d51b" + "20d41b20d51b6a21d61b20d51b20d61b6a21d71b20d61b20d71b6a21d81b20d71b20d81b6a21d91b20d81b20d91b6a" + "21da1b20d91b20da1b6a21db1b20da1b20db1b6a21dc1b20db1b20dc1b6a21dd1b20dc1b20dd1b6a21de1b20dd1b20" + "de1b6a21df1b20de1b20df1b6a21e01b20df1b20e01b6a21e11b20e01b20e11b6a21e21b20e11b20e21b6a21e31b20" + "e21b20e31b6a21e41b20e31b20e41b6a21e51b20e41b20e51b6a21e61b20e51b20e61b6a21e71b20e61b20e71b6a21" + "e81b20e71b20e81b6a21e91b20e81b20e91b6a21ea1b20e91b20ea1b6a21eb1b20ea1b20eb1b6a21ec1b20eb1b20ec" + "1b6a21ed1b20ec1b20ed1b6a21ee1b20ed1b20ee1b6a21ef1b20ee1b20ef1b6a21f01b20ef1b20f01b6a21f11b20f0" + "1b20f11b6a21f21b20f11b20f21b6a21f31b20f21b20f31b6a21f41b20f31b20f41b6a21f51b20f41b20f51b6a21f6" + "1b20f51b20f61b6a21f71b20f61b20f71b6a21f81b20f71b20f81b6a21f91b20f81b20f91b6a21fa1b20f91b20fa1b" + "6a21fb1b20fa1b20fb1b6a21fc1b20fb1b20fc1b6a21fd1b20fc1b20fd1b6a21fe1b20fd1b20fe1b6a21ff1b20fe1b" + "20ff1b6a21801c20ff1b20801c6a21811c20801c20811c6a21821c20811c20821c6a21831c20821c20831c6a21841c" + "20831c20841c6a21851c20841c20851c6a21861c20851c20861c6a21871c20861c20871c6a21881c20871c20881c6a" + "21891c20881c20891c6a218a1c20891c208a1c6a218b1c208a1c208b1c6a218c1c208b1c208c1c6a218d1c208c1c20" + "8d1c6a218e1c208d1c208e1c6a218f1c208e1c208f1c6a21901c208f1c20901c6a21911c20901c20911c6a21921c20" + "911c20921c6a21931c20921c20931c6a21941c20931c20941c6a21951c20941c20951c6a21961c20951c20961c6a21" + "971c20961c20971c6a21981c20971c20981c6a21991c20981c20991c6a219a1c20991c209a1c6a219b1c209a1c209b" + "1c6a219c1c209b1c209c1c6a219d1c209c1c209d1c6a219e1c209d1c209e1c6a219f1c209e1c209f1c6a21a01c209f" + "1c20a01c6a21a11c20a01c20a11c6a21a21c20a11c20a21c6a21a31c20a21c20a31c6a21a41c20a31c20a41c6a21a5" + "1c20a41c20a51c6a21a61c20a51c20a61c6a21a71c20a61c20a71c6a21a81c20a71c20a81c6a21a91c20a81c20a91c" + "6a21aa1c20a91c20aa1c6a21ab1c20aa1c20ab1c6a21ac1c20ab1c20ac1c6a21ad1c20ac1c20ad1c6a21ae1c20ad1c" + "20ae1c6a21af1c20ae1c20af1c6a21b01c20af1c20b01c6a21b11c20b01c20b11c6a21b21c20b11c20b21c6a21b31c" + "20b21c20b31c6a21b41c20b31c20b41c6a21b51c20b41c20b51c6a21b61c20b51c20b61c6a21b71c20b61c20b71c6a" + "21b81c20b71c20b81c6a21b91c20b81c20b91c6a21ba1c20b91c20ba1c6a21bb1c20ba1c20bb1c6a21bc1c20bb1c20" + "bc1c6a21bd1c20bc1c20bd1c6a21be1c20bd1c20be1c6a21bf1c20be1c20bf1c6a21c01c20bf1c20c01c6a21c11c20" + "c01c20c11c6a21c21c20c11c20c21c6a21c31c20c21c20c31c6a21c41c20c31c20c41c6a21c51c20c41c20c51c6a21" + "c61c20c51c20c61c6a21c71c20c61c20c71c6a21c81c20c71c20c81c6a21c91c20c81c20c91c6a21ca1c20c91c20ca" + "1c6a21cb1c20ca1c20cb1c6a21cc1c20cb1c20cc1c6a21cd1c20cc1c20cd1c6a21ce1c20cd1c20ce1c6a21cf1c20ce" + "1c20cf1c6a21d01c20cf1c20d01c6a21d11c20d01c20d11c6a21d21c20d11c20d21c6a21d31c20d21c20d31c6a21d4" + "1c20d31c20d41c6a21d51c20d41c20d51c6a21d61c20d51c20d61c6a21d71c20d61c20d71c6a21d81c20d71c20d81c" + "6a21d91c20d81c20d91c6a21da1c20d91c20da1c6a21db1c20da1c20db1c6a21dc1c20db1c20dc1c6a21dd1c20dc1c" + "20dd1c6a21de1c20dd1c20de1c6a21df1c20de1c20df1c6a21e01c20df1c20e01c6a21e11c20e01c20e11c6a21e21c" + "20e11c20e21c6a21e31c20e21c20e31c6a21e41c20e31c20e41c6a21e51c20e41c20e51c6a21e61c20e51c20e61c6a" + "21e71c20e61c20e71c6a21e81c20e71c20e81c6a21e91c20e81c20e91c6a21ea1c20e91c20ea1c6a21eb1c20ea1c20" + "eb1c6a21ec1c20eb1c20ec1c6a21ed1c20ec1c20ed1c6a21ee1c20ed1c20ee1c6a21ef1c20ee1c20ef1c6a21f01c20" + "ef1c20f01c6a21f11c20f01c20f11c6a21f21c20f11c20f21c6a21f31c20f21c20f31c6a21f41c20f31c20f41c6a21" + "f51c20f41c20f51c6a21f61c20f51c20f61c6a21f71c20f61c20f71c6a21f81c20f71c20f81c6a21f91c20f81c20f9" + "1c6a21fa1c20f91c20fa1c6a21fb1c20fa1c20fb1c6a21fc1c20fb1c20fc1c6a21fd1c20fc1c20fd1c6a21fe1c20fd" + "1c20fe1c6a21ff1c20fe1c20ff1c6a21801d20ff1c20801d6a21811d20801d20811d6a21821d20811d20821d6a2183" + "1d20821d20831d6a21841d20831d20841d6a21851d20841d20851d6a21861d20851d20861d6a21871d20861d20871d" + "6a21881d20871d20881d6a21891d20881d20891d6a218a1d20891d208a1d6a218b1d208a1d208b1d6a218c1d208b1d" + "208c1d6a218d1d208c1d208d1d6a218e1d208d1d208e1d6a218f1d208e1d208f1d6a21901d208f1d20901d6a21911d" + "20901d20911d6a21921d20911d20921d6a21931d20921d20931d6a21941d20931d20941d6a21951d20941d20951d6a" + "21961d20951d20961d6a21971d20961d20971d6a21981d20971d20981d6a21991d20981d20991d6a219a1d20991d20" + "9a1d6a219b1d209a1d209b1d6a219c1d209b1d209c1d6a219d1d209c1d209d1d6a219e1d209d1d209e1d6a219f1d20" + "9e1d209f1d6a21a01d209f1d20a01d6a21a11d20a01d20a11d6a21a21d20a11d20a21d6a21a31d20a21d20a31d6a21" + "a41d20a31d20a41d6a21a51d20a41d20a51d6a21a61d20a51d20a61d6a21a71d20a61d20a71d6a21a81d20a71d20a8" + "1d6a21a91d20a81d20a91d6a21aa1d20a91d20aa1d6a21ab1d20aa1d20ab1d6a21ac1d20ab1d20ac1d6a21ad1d20ac" + "1d20ad1d6a21ae1d20ad1d20ae1d6a21af1d20ae1d20af1d6a21b01d20af1d20b01d6a21b11d20b01d20b11d6a21b2" + "1d20b11d20b21d6a21b31d20b21d20b31d6a21b41d20b31d20b41d6a21b51d20b41d20b51d6a21b61d20b51d20b61d" + "6a21b71d20b61d20b71d6a21b81d20b71d20b81d6a21b91d20b81d20b91d6a21ba1d20b91d20ba1d6a21bb1d20ba1d" + "20bb1d6a21bc1d20bb1d20bc1d6a21bd1d20bc1d20bd1d6a21be1d20bd1d20be1d6a21bf1d20be1d20bf1d6a21c01d" + "20bf1d20c01d6a21c11d20c01d20c11d6a21c21d20c11d20c21d6a21c31d20c21d20c31d6a21c41d20c31d20c41d6a" + "21c51d20c41d20c51d6a21c61d20c51d20c61d6a21c71d20c61d20c71d6a21c81d20c71d20c81d6a21c91d20c81d20" + "c91d6a21ca1d20c91d20ca1d6a21cb1d20ca1d20cb1d6a21cc1d20cb1d20cc1d6a21cd1d20cc1d20cd1d6a21ce1d20" + "cd1d20ce1d6a21cf1d20ce1d20cf1d6a21d01d20cf1d20d01d6a21d11d20d01d20d11d6a21d21d20d11d20d21d6a21" + "d31d20d21d20d31d6a21d41d20d31d20d41d6a21d51d20d41d20d51d6a21d61d20d51d20d61d6a21d71d20d61d20d7" + "1d6a21d81d20d71d20d81d6a21d91d20d81d20d91d6a21da1d20d91d20da1d6a21db1d20da1d20db1d6a21dc1d20db" + "1d20dc1d6a21dd1d20dc1d20dd1d6a21de1d20dd1d20de1d6a21df1d20de1d20df1d6a21e01d20df1d20e01d6a21e1" + "1d20e01d20e11d6a21e21d20e11d20e21d6a21e31d20e21d20e31d6a21e41d20e31d20e41d6a21e51d20e41d20e51d" + "6a21e61d20e51d20e61d6a21e71d20e61d20e71d6a21e81d20e71d20e81d6a21e91d20e81d20e91d6a21ea1d20e91d" + "20ea1d6a21eb1d20ea1d20eb1d6a21ec1d20eb1d20ec1d6a21ed1d20ec1d20ed1d6a21ee1d20ed1d20ee1d6a21ef1d" + "20ee1d20ef1d6a21f01d20ef1d20f01d6a21f11d20f01d20f11d6a21f21d20f11d20f21d6a21f31d20f21d20f31d6a" + "21f41d20f31d20f41d6a21f51d20f41d20f51d6a21f61d20f51d20f61d6a21f71d20f61d20f71d6a21f81d20f71d20" + "f81d6a21f91d20f81d20f91d6a21fa1d20f91d20fa1d6a21fb1d20fa1d20fb1d6a21fc1d20fb1d20fc1d6a21fd1d20" + "fc1d20fd1d6a21fe1d20fd1d20fe1d6a21ff1d20fe1d20ff1d6a21801e20ff1d20801e6a21811e20801e20811e6a21" + "821e20811e20821e6a21831e20821e20831e6a21841e20831e20841e6a21851e20841e20851e6a21861e20851e2086" + "1e6a21871e20861e20871e6a21881e20871e20881e6a21891e20881e20891e6a218a1e20891e208a1e6a218b1e208a" + "1e208b1e6a218c1e208b1e208c1e6a218d1e208c1e208d1e6a218e1e208d1e208e1e6a218f1e208e1e208f1e6a2190" + "1e208f1e20901e6a21911e20901e20911e6a21921e20911e20921e6a21931e20921e20931e6a21941e20931e20941e" + "6a21951e20941e20951e6a21961e20951e20961e6a21971e20961e20971e6a21981e20971e20981e6a21991e20981e" + "20991e6a219a1e20991e209a1e6a219b1e209a1e209b1e6a219c1e209b1e209c1e6a219d1e209c1e209d1e6a219e1e" + "209d1e209e1e6a219f1e209e1e209f1e6a21a01e209f1e20a01e6a21a11e20a01e20a11e6a21a21e20a11e20a21e6a" + "21a31e20a21e20a31e6a21a41e20a31e20a41e6a21a51e20a41e20a51e6a21a61e20a51e20a61e6a21a71e20a61e20" + "a71e6a21a81e20a71e20a81e6a21a91e20a81e20a91e6a21aa1e20a91e20aa1e6a21ab1e20aa1e20ab1e6a21ac1e20" + "ab1e20ac1e6a21ad1e20ac1e20ad1e6a21ae1e20ad1e20ae1e6a21af1e20ae1e20af1e6a21b01e20af1e20b01e6a21" + "b11e20b01e20b11e6a21b21e20b11e20b21e6a21b31e20b21e20b31e6a21b41e20b31e20b41e6a21b51e20b41e20b5" + "1e6a21b61e20b51e20b61e6a21b71e20b61e20b71e6a21b81e20b71e20b81e6a21b91e20b81e20b91e6a21ba1e20b9" + "1e20ba1e6a21bb1e20ba1e20bb1e6a21bc1e20bb1e20bc1e6a21bd1e20bc1e20bd1e6a21be1e20bd1e20be1e6a21bf" + "1e20be1e20bf1e6a21c01e20bf1e20c01e6a21c11e20c01e20c11e6a21c21e20c11e20c21e6a21c31e20c21e20c31e" + "6a21c41e20c31e20c41e6a21c51e20c41e20c51e6a21c61e20c51e20c61e6a21c71e20c61e20c71e6a21c81e20c71e" + "20c81e6a21c91e20c81e20c91e6a21ca1e20c91e20ca1e6a21cb1e20ca1e20cb1e6a21cc1e20cb1e20cc1e6a21cd1e" + "20cc1e20cd1e6a21ce1e20cd1e20ce1e6a21cf1e20ce1e20cf1e6a21d01e20cf1e20d01e6a21d11e20d01e20d11e6a" + "21d21e20d11e20d21e6a21d31e20d21e20d31e6a21d41e20d31e20d41e6a21d51e20d41e20d51e6a21d61e20d51e20" + "d61e6a21d71e20d61e20d71e6a21d81e20d71e20d81e6a21d91e20d81e20d91e6a21da1e20d91e20da1e6a21db1e20" + "da1e20db1e6a21dc1e20db1e20dc1e6a21dd1e20dc1e20dd1e6a21de1e20dd1e20de1e6a21df1e20de1e20df1e6a21" + "e01e20df1e20e01e6a21e11e20e01e20e11e6a21e21e20e11e20e21e6a21e31e20e21e20e31e6a21e41e20e31e20e4" + "1e6a21e51e20e41e20e51e6a21e61e20e51e20e61e6a21e71e20e61e20e71e6a21e81e20e71e20e81e6a21e91e20e8" + "1e20e91e6a21ea1e20e91e20ea1e6a21eb1e20ea1e20eb1e6a21ec1e20eb1e20ec1e6a21ed1e20ec1e20ed1e6a21ee" + "1e20ed1e20ee1e6a21ef1e20ee1e20ef1e6a21f01e20ef1e20f01e6a21f11e20f01e20f11e6a21f21e20f11e20f21e" + "6a21f31e20f21e20f31e6a21f41e20f31e20f41e6a21f51e20f41e20f51e6a21f61e20f51e20f61e6a21f71e20f61e" + "20f71e6a21f81e20f71e20f81e6a21f91e20f81e20f91e6a21fa1e20f91e20fa1e6a21fb1e20fa1e20fb1e6a21fc1e" + "20fb1e20fc1e6a21fd1e20fc1e20fd1e6a21fe1e20fd1e20fe1e6a21ff1e20fe1e20ff1e6a21801f20ff1e20801f6a" + "21811f20801f20811f6a21821f20811f20821f6a21831f20821f20831f6a21841f20831f20841f6a21851f20841f20" + "851f6a21861f20851f20861f6a21871f20861f20871f6a21881f20871f20881f6a21891f20881f20891f6a218a1f20" + "891f208a1f6a218b1f208a1f208b1f6a218c1f208b1f208c1f6a218d1f208c1f208d1f6a218e1f208d1f208e1f6a21" + "8f1f208e1f208f1f6a21901f208f1f20901f6a21911f20901f20911f6a21921f20911f20921f6a21931f20921f2093" + "1f6a21941f20931f20941f6a21951f20941f20951f6a21961f20951f20961f6a21971f20961f20971f6a21981f2097" + "1f20981f6a21991f20981f20991f6a219a1f20991f209a1f6a219b1f209a1f209b1f6a219c1f209b1f209c1f6a219d" + "1f209c1f209d1f6a219e1f209d1f209e1f6a219f1f209e1f209f1f6a21a01f209f1f20a01f6a21a11f20a01f20a11f" + "6a21a21f20a11f20a21f6a21a31f20a21f20a31f6a21a41f20a31f20a41f6a21a51f20a41f20a51f6a21a61f20a51f" + "20a61f6a21a71f20a61f20a71f6a21a81f20a71f20a81f6a21a91f20a81f20a91f6a21aa1f20a91f20aa1f6a21ab1f" + "20aa1f20ab1f6a21ac1f20ab1f20ac1f6a21ad1f20ac1f20ad1f6a21ae1f20ad1f20ae1f6a21af1f20ae1f20af1f6a" + "21b01f20af1f20b01f6a21b11f20b01f20b11f6a21b21f20b11f20b21f6a21b31f20b21f20b31f6a21b41f20b31f20" + "b41f6a21b51f20b41f20b51f6a21b61f20b51f20b61f6a21b71f20b61f20b71f6a21b81f20b71f20b81f6a21b91f20" + "b81f20b91f6a21ba1f20b91f20ba1f6a21bb1f20ba1f20bb1f6a21bc1f20bb1f20bc1f6a21bd1f20bc1f20bd1f6a21" + "be1f20bd1f20be1f6a21bf1f20be1f20bf1f6a21c01f20bf1f20c01f6a21c11f20c01f20c11f6a21c21f20c11f20c2" + "1f6a21c31f20c21f20c31f6a21c41f20c31f20c41f6a21c51f20c41f20c51f6a21c61f20c51f20c61f6a21c71f20c6" + "1f20c71f6a21c81f20c71f20c81f6a21c91f20c81f20c91f6a21ca1f20c91f20ca1f6a21cb1f20ca1f20cb1f6a21cc" + "1f20cb1f20cc1f6a21cd1f20cc1f20cd1f6a21ce1f20cd1f20ce1f6a21cf1f20ce1f20cf1f6a21d01f20cf1f20d01f" + "6a21d11f20d01f20d11f6a21d21f20d11f20d21f6a21d31f20d21f20d31f6a21d41f20d31f20d41f6a21d51f20d41f" + "20d51f6a21d61f20d51f20d61f6a21d71f20d61f20d71f6a21d81f20d71f20d81f6a21d91f20d81f20d91f6a21da1f" + "20d91f20da1f6a21db1f20da1f20db1f6a21dc1f20db1f20dc1f6a21dd1f20dc1f20dd1f6a21de1f20dd1f20de1f6a" + "21df1f20de1f20df1f6a21e01f20df1f20e01f6a21e11f20e01f20e11f6a21e21f20e11f20e21f6a21e31f20e21f20" + "e31f6a21e41f20e31f20e41f6a21e51f20e41f20e51f6a21e61f20e51f20e61f6a21e71f20e61f20e71f6a21e81f20" + "e71f20e81f6a21e91f20e81f20e91f6a21ea1f20e91f20ea1f6a21eb1f20ea1f20eb1f6a21ec1f20eb1f20ec1f6a21" + "ed1f20ec1f20ed1f6a21ee1f20ed1f20ee1f6a21ef1f20ee1f20ef1f6a21f01f20ef1f20f01f6a21f11f20f01f20f1" + "1f6a21f21f20f11f20f21f6a21f31f20f21f20f31f6a21f41f20f31f20f41f6a21f51f20f41f20f51f6a21f61f20f5" + "1f20f61f6a21f71f20f61f20f71f6a21f81f20f71f20f81f6a21f91f20f81f20f91f6a21fa1f20f91f20fa1f6a21fb" + "1f20fa1f20fb1f6a21fc1f20fb1f20fc1f6a21fd1f20fc1f20fd1f6a21fe1f20fd1f20fe1f6a21ff1f20fe1f20ff1f" + "6a21802020ff1f2080206a2181202080202081206a2182202081202082206a2183202082202083206a218420208320" + "2084206a2185202084202085206a2186202085202086206a2187202086202087206a2188202087202088206a218920" + "2088202089206a218a20208920208a206a218b20208a20208b206a218c20208b20208c206a218d20208c20208d206a" + "218e20208d20208e206a218f20208e20208f206a219020208f202090206a2191202090202091206a21922020912020" + "92206a2193202092202093206a2194202093202094206a2195202094202095206a2196202095202096206a21972020" + "96202097206a2198202097202098206a2199202098202099206a219a20209920209a206a219b20209a20209b206a21" + "9c20209b20209c206a219d20209c20209d206a219e20209d20209e206a219f20209e20209f206a21a020209f2020a0" + "206a21a12020a02020a1206a21a22020a12020a2206a21a32020a22020a3206a21a42020a32020a4206a21a52020a4" + "2020a5206a21a62020a52020a6206a21a72020a62020a7206a21a82020a72020a8206a21a92020a82020a9206a21aa" + "2020a92020aa206a21ab2020aa2020ab206a21ac2020ab2020ac206a21ad2020ac2020ad206a21ae2020ad2020ae20" + "6a21af2020ae2020af206a21b02020af2020b0206a21b12020b02020b1206a21b22020b12020b2206a21b32020b220" + "20b3206a21b42020b32020b4206a21b52020b42020b5206a21b62020b52020b6206a21b72020b62020b7206a21b820" + "20b72020b8206a21b92020b82020b9206a21ba2020b92020ba206a21bb2020ba2020bb206a21bc2020bb2020bc206a" + "21bd2020bc2020bd206a21be2020bd2020be206a21bf2020be2020bf206a21c02020bf2020c0206a21c12020c02020" + "c1206a21c22020c12020c2206a21c32020c22020c3206a21c42020c32020c4206a21c52020c42020c5206a21c62020" + "c52020c6206a21c72020c62020c7206a21c82020c72020c8206a21c92020c82020c9206a21ca2020c92020ca206a21" + "cb2020ca2020cb206a21cc2020cb2020cc206a21cd2020cc2020cd206a21ce2020cd2020ce206a21cf2020ce2020cf" + "206a21d02020cf2020d0206a21d12020d02020d1206a21d22020d12020d2206a21d32020d22020d3206a21d42020d3" + "2020d4206a21d52020d42020d5206a21d62020d52020d6206a21d72020d62020d7206a21d82020d72020d8206a21d9" + "2020d82020d9206a21da2020d92020da206a21db2020da2020db206a21dc2020db2020dc206a21dd2020dc2020dd20" + "6a21de2020dd2020de206a21df2020de2020df206a21e02020df2020e0206a21e12020e02020e1206a21e22020e120" + "20e2206a21e32020e22020e3206a21e42020e32020e4206a21e52020e42020e5206a21e62020e52020e6206a21e720" + "20e62020e7206a21e82020e72020e8206a21e92020e82020e9206a21ea2020e92020ea206a21eb2020ea2020eb206a" + "21ec2020eb2020ec206a21ed2020ec2020ed206a21ee2020ed2020ee206a21ef2020ee2020ef206a21f02020ef2020" + "f0206a21f12020f02020f1206a21f22020f12020f2206a21f32020f22020f3206a21f42020f32020f4206a21f52020" + "f42020f5206a21f62020f52020f6206a21f72020f62020f7206a21f82020f72020f8206a21f92020f82020f9206a21" + "fa2020f92020fa206a21fb2020fa2020fb206a21fc2020fb2020fc206a21fd2020fc2020fd206a21fe2020fd2020fe" + "206a21ff2020fe2020ff206a21802120ff202080216a2181212080212081216a2182212081212082216a2183212082" + "212083216a2184212083212084216a2185212084212085216a2186212085212086216a2187212086212087216a2188" + "212087212088216a2189212088212089216a218a21208921208a216a218b21208a21208b216a218c21208b21208c21" + "6a218d21208c21208d216a218e21208d21208e216a218f21208e21208f216a219021208f212090216a219121209021" + "2091216a2192212091212092216a2193212092212093216a2194212093212094216a2195212094212095216a219621" + "2095212096216a2197212096212097216a2198212097212098216a2199212098212099216a219a21209921209a216a" + "219b21209a21209b216a219c21209b21209c216a219d21209c21209d216a219e21209d21209e216a219f21209e2120" + "9f216a21a021209f2120a0216a21a12120a02120a1216a21a22120a12120a2216a21a32120a22120a3216a21a42120" + "a32120a4216a21a52120a42120a5216a21a62120a52120a6216a21a72120a62120a7216a21a82120a72120a8216a21" + "a92120a82120a9216a21aa2120a92120aa216a21ab2120aa2120ab216a21ac2120ab2120ac216a21ad2120ac2120ad" + "216a21ae2120ad2120ae216a21af2120ae2120af216a21b02120af2120b0216a21b12120b02120b1216a21b22120b1" + "2120b2216a21b32120b22120b3216a21b42120b32120b4216a21b52120b42120b5216a21b62120b52120b6216a21b7" + "2120b62120b7216a21b82120b72120b8216a21b92120b82120b9216a21ba2120b92120ba216a21bb2120ba2120bb21" + "6a21bc2120bb2120bc216a21bd2120bc2120bd216a21be2120bd2120be216a21bf2120be2120bf216a21c02120bf21" + "20c0216a21c12120c02120c1216a21c22120c12120c2216a21c32120c22120c3216a21c42120c32120c4216a21c521" + "20c42120c5216a21c62120c52120c6216a21c72120c62120c7216a21c82120c72120c8216a21c92120c82120c9216a" + "21ca2120c92120ca216a21cb2120ca2120cb216a21cc2120cb2120cc216a21cd2120cc2120cd216a21ce2120cd2120" + "ce216a21cf2120ce2120cf216a21d02120cf2120d0216a21d12120d02120d1216a21d22120d12120d2216a21d32120" + "d22120d3216a21d42120d32120d4216a21d52120d42120d5216a21d62120d52120d6216a21d72120d62120d7216a21" + "d82120d72120d8216a21d92120d82120d9216a21da2120d92120da216a21db2120da2120db216a21dc2120db2120dc" + "216a21dd2120dc2120dd216a21de2120dd2120de216a21df2120de2120df216a21e02120df2120e0216a21e12120e0" + "2120e1216a21e22120e12120e2216a21e32120e22120e3216a21e42120e32120e4216a21e52120e42120e5216a21e6" + "2120e52120e6216a21e72120e62120e7216a21e82120e72120e8216a21e92120e82120e9216a21ea2120e92120ea21" + "6a21eb2120ea2120eb216a21ec2120eb2120ec216a21ed2120ec2120ed216a21ee2120ed2120ee216a21ef2120ee21" + "20ef216a21f02120ef2120f0216a21f12120f02120f1216a21f22120f12120f2216a21f32120f22120f3216a21f421" + "20f32120f4216a21f52120f42120f5216a21f62120f52120f6216a21f72120f62120f7216a21f82120f72120f8216a" + "21f92120f82120f9216a21fa2120f92120fa216a21fb2120fa2120fb216a21fc2120fb2120fc216a21fd2120fc2120" + "fd216a21fe2120fd2120fe216a21ff2120fe2120ff216a21802220ff212080226a2181222080222081226a21822220" + "81222082226a2183222082222083226a2184222083222084226a2185222084222085226a2186222085222086226a21" + "87222086222087226a2188222087222088226a2189222088222089226a218a22208922208a226a218b22208a22208b" + "226a218c22208b22208c226a218d22208c22208d226a218e22208d22208e226a218f22208e22208f226a219022208f" + "222090226a2191222090222091226a2192222091222092226a2193222092222093226a2194222093222094226a2195" + "222094222095226a2196222095222096226a2197222096222097226a2198222097222098226a219922209822209922" + "6a219a22209922209a226a219b22209a22209b226a219c22209b22209c226a219d22209c22209d226a219e22209d22" + "209e226a219f22209e22209f226a21a022209f2220a0226a21a12220a02220a1226a21a22220a12220a2226a21a322" + "20a22220a3226a21a42220a32220a4226a21a52220a42220a5226a21a62220a52220a6226a21a72220a62220a7226a" + "21a82220a72220a8226a21a92220a82220a9226a21aa2220a92220aa226a21ab2220aa2220ab226a21ac2220ab2220" + "ac226a21ad2220ac2220ad226a21ae2220ad2220ae226a21af2220ae2220af226a21b02220af2220b0226a21b12220" + "b02220b1226a21b22220b12220b2226a21b32220b22220b3226a21b42220b32220b4226a21b52220b42220b5226a21" + "b62220b52220b6226a21b72220b62220b7226a21b82220b72220b8226a21b92220b82220b9226a21ba2220b92220ba" + "226a21bb2220ba2220bb226a21bc2220bb2220bc226a21bd2220bc2220bd226a21be2220bd2220be226a21bf2220be" + "2220bf226a21c02220bf2220c0226a21c12220c02220c1226a21c22220c12220c2226a21c32220c22220c3226a21c4" + "2220c32220c4226a21c52220c42220c5226a21c62220c52220c6226a21c72220c62220c7226a21c82220c72220c822" + "6a21c92220c82220c9226a21ca2220c92220ca226a21cb2220ca2220cb226a21cc2220cb2220cc226a21cd2220cc22" + "20cd226a21ce2220cd2220ce226a21cf2220ce2220cf226a21d02220cf2220d0226a21d12220d02220d1226a21d222" + "20d12220d2226a21d32220d22220d3226a21d42220d32220d4226a21d52220d42220d5226a21d62220d52220d6226a" + "21d72220d62220d7226a21d82220d72220d8226a21d92220d82220d9226a21da2220d92220da226a21db2220da2220" + "db226a21dc2220db2220dc226a21dd2220dc2220dd226a21de2220dd2220de226a21df2220de2220df226a21e02220" + "df2220e0226a21e12220e02220e1226a21e22220e12220e2226a21e32220e22220e3226a21e42220e32220e4226a21" + "e52220e42220e5226a21e62220e52220e6226a21e72220e62220e7226a21e82220e72220e8226a21e92220e82220e9" + "226a21ea2220e92220ea226a21eb2220ea2220eb226a21ec2220eb2220ec226a21ed2220ec2220ed226a21ee2220ed" + "2220ee226a21ef2220ee2220ef226a21f02220ef2220f0226a21f12220f02220f1226a21f22220f12220f2226a21f3" + "2220f22220f3226a21f42220f32220f4226a21f52220f42220f5226a21f62220f52220f6226a21f72220f62220f722" + "6a21f82220f72220f8226a21f92220f82220f9226a21fa2220f92220fa226a21fb2220fa2220fb226a21fc2220fb22" + "20fc226a21fd2220fc2220fd226a21fe2220fd2220fe226a21ff2220fe2220ff226a21802320ff222080236a218123" + "2080232081236a2182232081232082236a2183232082232083236a2184232083232084236a2185232084232085236a" + "2186232085232086236a2187232086232087236a2188232087232088236a2189232088232089236a218a2320892320" + "8a236a218b23208a23208b236a218c23208b23208c236a218d23208c23208d236a218e23208d23208e236a218f2320" + "8e23208f236a219023208f232090236a2191232090232091236a2192232091232092236a2193232092232093236a21" + "94232093232094236a2195232094232095236a2196232095232096236a2197232096232097236a2198232097232098" + "236a2199232098232099236a219a23209923209a236a219b23209a23209b236a219c23209b23209c236a219d23209c" + "23209d236a219e23209d23209e236a219f23209e23209f236a21a023209f2320a0236a21a12320a02320a1236a21a2" + "2320a12320a2236a21a32320a22320a3236a21a42320a32320a4236a21a52320a42320a5236a21a62320a52320a623" + "6a21a72320a62320a7236a21a82320a72320a8236a21a92320a82320a9236a21aa2320a92320aa236a21ab2320aa23" + "20ab236a21ac2320ab2320ac236a21ad2320ac2320ad236a21ae2320ad2320ae236a21af2320ae2320af236a21b023" + "20af2320b0236a21b12320b02320b1236a21b22320b12320b2236a21b32320b22320b3236a21b42320b32320b4236a" + "21b52320b42320b5236a21b62320b52320b6236a21b72320b62320b7236a21b82320b72320b8236a21b92320b82320" + "b9236a21ba2320b92320ba236a21bb2320ba2320bb236a21bc2320bb2320bc236a21bd2320bc2320bd236a21be2320" + "bd2320be236a21bf2320be2320bf236a21c02320bf2320c0236a21c12320c02320c1236a21c22320c12320c2236a21" + "c32320c22320c3236a21c42320c32320c4236a21c52320c42320c5236a21c62320c52320c6236a21c72320c62320c7" + "236a21c82320c72320c8236a21c92320c82320c9236a21ca2320c92320ca236a21cb2320ca2320cb236a21cc2320cb" + "2320cc236a21cd2320cc2320cd236a21ce2320cd2320ce236a21cf2320ce2320cf236a21d02320cf2320d0236a21d1" + "2320d02320d1236a21d22320d12320d2236a21d32320d22320d3236a21d42320d32320d4236a21d52320d42320d523" + "6a21d62320d52320d6236a21d72320d62320d7236a21d82320d72320d8236a21d92320d82320d9236a21da2320d923" + "20da236a21db2320da2320db236a21dc2320db2320dc236a21dd2320dc2320dd236a21de2320dd2320de236a21df23" + "20de2320df236a21e02320df2320e0236a21e12320e02320e1236a21e22320e12320e2236a21e32320e22320e3236a" + "21e42320e32320e4236a21e52320e42320e5236a21e62320e52320e6236a21e72320e62320e7236a21e82320e72320" + "e8236a21e92320e82320e9236a21ea2320e92320ea236a21eb2320ea2320eb236a21ec2320eb2320ec236a21ed2320" + "ec2320ed236a21ee2320ed2320ee236a21ef2320ee2320ef236a21f02320ef2320f0236a21f12320f02320f1236a21" + "f22320f12320f2236a21f32320f22320f3236a21f42320f32320f4236a21f52320f42320f5236a21f62320f52320f6" + "236a21f72320f62320f7236a21f82320f72320f8236a21f92320f82320f9236a21fa2320f92320fa236a21fb2320fa" + "2320fb236a21fc2320fb2320fc236a21fd2320fc2320fd236a21fe2320fd2320fe236a21ff2320fe2320ff236a2180" + "2420ff232080246a2181242080242081246a2182242081242082246a2183242082242083246a218424208324208424" + "6a2185242084242085246a2186242085242086246a2187242086242087246a2188242087242088246a218924208824" + "2089246a218a24208924208a246a218b24208a24208b246a218c24208b24208c246a218d24208c24208d246a218e24" + "208d24208e246a218f24208e24208f246a219024208f242090246a2191242090242091246a2192242091242092246a" + "2193242092242093246a2194242093242094246a2195242094242095246a2196242095242096246a21972420962420" + "97246a2198242097242098246a2199242098242099246a219a24209924209a246a219b24209a24209b246a219c2420" + "9b24209c246a219d24209c24209d246a219e24209d24209e246a219f24209e24209f246a21a024209f2420a0246a21" + "a12420a02420a1246a21a22420a12420a2246a21a32420a22420a3246a21a42420a32420a4246a21a52420a42420a5" + "246a21a62420a52420a6246a21a72420a62420a7246a21a82420a72420a8246a21a92420a82420a9246a21aa2420a9" + "2420aa246a21ab2420aa2420ab246a21ac2420ab2420ac246a21ad2420ac2420ad246a21ae2420ad2420ae246a21af" + "2420ae2420af246a21b02420af2420b0246a21b12420b02420b1246a21b22420b12420b2246a21b32420b22420b324" + "6a21b42420b32420b4246a21b52420b42420b5246a21b62420b52420b6246a21b72420b62420b7246a21b82420b724" + "20b8246a21b92420b82420b9246a21ba2420b92420ba246a21bb2420ba2420bb246a21bc2420bb2420bc246a21bd24" + "20bc2420bd246a21be2420bd2420be246a21bf2420be2420bf246a21c02420bf2420c0246a21c12420c02420c1246a" + "21c22420c12420c2246a21c32420c22420c3246a21c42420c32420c4246a21c52420c42420c5246a21c62420c52420" + "c6246a21c72420c62420c7246a21c82420c72420c8246a21c92420c82420c9246a21ca2420c92420ca246a21cb2420" + "ca2420cb246a21cc2420cb2420cc246a21cd2420cc2420cd246a21ce2420cd2420ce246a21cf2420ce2420cf246a21" + "d02420cf2420d0246a21d12420d02420d1246a21d22420d12420d2246a21d32420d22420d3246a21d42420d32420d4" + "246a21d52420d42420d5246a21d62420d52420d6246a21d72420d62420d7246a21d82420d72420d8246a21d92420d8" + "2420d9246a21da2420d92420da246a21db2420da2420db246a21dc2420db2420dc246a21dd2420dc2420dd246a21de" + "2420dd2420de246a21df2420de2420df246a21e02420df2420e0246a21e12420e02420e1246a21e22420e12420e224" + "6a21e32420e22420e3246a21e42420e32420e4246a21e52420e42420e5246a21e62420e52420e6246a21e72420e624" + "20e7246a21e82420e72420e8246a21e92420e82420e9246a21ea2420e92420ea246a21eb2420ea2420eb246a21ec24" + "20eb2420ec246a21ed2420ec2420ed246a21ee2420ed2420ee246a21ef2420ee2420ef246a21f02420ef2420f0246a" + "21f12420f02420f1246a21f22420f12420f2246a21f32420f22420f3246a21f42420f32420f4246a21f52420f42420" + "f5246a21f62420f52420f6246a21f72420f62420f7246a21f82420f72420f8246a21f92420f82420f9246a21fa2420" + "f92420fa246a21fb2420fa2420fb246a21fc2420fb2420fc246a21fd2420fc2420fd246a21fe2420fd2420fe246a21" + "ff2420fe2420ff246a21802520ff242080256a2181252080252081256a2182252081252082256a2183252082252083" + "256a2184252083252084256a2185252084252085256a2186252085252086256a2187252086252087256a2188252087" + "252088256a2189252088252089256a218a25208925208a256a218b25208a25208b256a218c25208b25208c256a218d" + "25208c25208d256a218e25208d25208e256a218f25208e25208f256a219025208f252090256a219125209025209125" + "6a2192252091252092256a2193252092252093256a2194252093252094256a2195252094252095256a219625209525" + "2096256a2197252096252097256a2198252097252098256a2199252098252099256a219a25209925209a256a219b25" + "209a25209b256a219c25209b25209c256a219d25209c25209d256a219e25209d25209e256a219f25209e25209f256a" + "21a025209f2520a0256a21a12520a02520a1256a21a22520a12520a2256a21a32520a22520a3256a21a42520a32520" + "a4256a21a52520a42520a5256a21a62520a52520a6256a21a72520a62520a7256a21a82520a72520a8256a21a92520" + "a82520a9256a21aa2520a92520aa256a21ab2520aa2520ab256a21ac2520ab2520ac256a21ad2520ac2520ad256a21" + "ae2520ad2520ae256a21af2520ae2520af256a21b02520af2520b0256a21b12520b02520b1256a21b22520b12520b2" + "256a21b32520b22520b3256a21b42520b32520b4256a21b52520b42520b5256a21b62520b52520b6256a21b72520b6" + "2520b7256a21b82520b72520b8256a21b92520b82520b9256a21ba2520b92520ba256a21bb2520ba2520bb256a21bc" + "2520bb2520bc256a21bd2520bc2520bd256a21be2520bd2520be256a21bf2520be2520bf256a21c02520bf2520c025" + "6a21c12520c02520c1256a21c22520c12520c2256a21c32520c22520c3256a21c42520c32520c4256a21c52520c425" + "20c5256a21c62520c52520c6256a21c72520c62520c7256a21c82520c72520c8256a21c92520c82520c9256a21ca25" + "20c92520ca256a21cb2520ca2520cb256a21cc2520cb2520cc256a21cd2520cc2520cd256a21ce2520cd2520ce256a" + "21cf2520ce2520cf256a21d02520cf2520d0256a21d12520d02520d1256a21d22520d12520d2256a21d32520d22520" + "d3256a21d42520d32520d4256a21d52520d42520d5256a21d62520d52520d6256a21d72520d62520d7256a21d82520" + "d72520d8256a21d92520d82520d9256a21da2520d92520da256a21db2520da2520db256a21dc2520db2520dc256a21" + "dd2520dc2520dd256a21de2520dd2520de256a21df2520de2520df256a21e02520df2520e0256a21e12520e02520e1" + "256a21e22520e12520e2256a21e32520e22520e3256a21e42520e32520e4256a21e52520e42520e5256a21e62520e5" + "2520e6256a21e72520e62520e7256a21e82520e72520e8256a21e92520e82520e9256a21ea2520e92520ea256a21eb" + "2520ea2520eb256a21ec2520eb2520ec256a21ed2520ec2520ed256a21ee2520ed2520ee256a21ef2520ee2520ef25" + "6a21f02520ef2520f0256a21f12520f02520f1256a21f22520f12520f2256a21f32520f22520f3256a21f42520f325" + "20f4256a21f52520f42520f5256a21f62520f52520f6256a21f72520f62520f7256a21f82520f72520f8256a21f925" + "20f82520f9256a21fa2520f92520fa256a21fb2520fa2520fb256a21fc2520fb2520fc256a21fd2520fc2520fd256a" + "21fe2520fd2520fe256a21ff2520fe2520ff256a21802620ff252080266a2181262080262081266a21822620812620" + "82266a2183262082262083266a2184262083262084266a2185262084262085266a2186262085262086266a21872620" + "86262087266a2188262087262088266a2189262088262089266a218a26208926208a266a218b26208a26208b266a21" + "8c26208b26208c266a218d26208c26208d266a218e26208d26208e266a218f26208e26208f266a219026208f262090" + "266a2191262090262091266a2192262091262092266a2193262092262093266a2194262093262094266a2195262094" + "262095266a2196262095262096266a2197262096262097266a2198262097262098266a2199262098262099266a219a" + "26209926209a266a219b26209a26209b266a219c26209b26209c266a219d26209c26209d266a219e26209d26209e26" + "6a219f26209e26209f266a21a026209f2620a0266a21a12620a02620a1266a21a22620a12620a2266a21a32620a226" + "20a3266a21a42620a32620a4266a21a52620a42620a5266a21a62620a52620a6266a21a72620a62620a7266a21a826" + "20a72620a8266a21a92620a82620a9266a21aa2620a92620aa266a21ab2620aa2620ab266a21ac2620ab2620ac266a" + "21ad2620ac2620ad266a21ae2620ad2620ae266a21af2620ae2620af266a21b02620af2620b0266a21b12620b02620" + "b1266a21b22620b12620b2266a21b32620b22620b3266a21b42620b32620b4266a21b52620b42620b5266a21b62620" + "b52620b6266a21b72620b62620b7266a21b82620b72620b8266a21b92620b82620b9266a21ba2620b92620ba266a21" + "bb2620ba2620bb266a21bc2620bb2620bc266a21bd2620bc2620bd266a21be2620bd2620be266a21bf2620be2620bf" + "266a21c02620bf2620c0266a21c12620c02620c1266a21c22620c12620c2266a21c32620c22620c3266a21c42620c3" + "2620c4266a21c52620c42620c5266a21c62620c52620c6266a21c72620c62620c7266a21c82620c72620c8266a21c9" + "2620c82620c9266a21ca2620c92620ca266a21cb2620ca2620cb266a21cc2620cb2620cc266a21cd2620cc2620cd26" + "6a21ce2620cd2620ce266a21cf2620ce2620cf266a21d02620cf2620d0266a21d12620d02620d1266a21d22620d126" + "20d2266a21d32620d22620d3266a21d42620d32620d4266a21d52620d42620d5266a21d62620d52620d6266a21d726" + "20d62620d7266a21d82620d72620d8266a21d92620d82620d9266a21da2620d92620da266a21db2620da2620db266a" + "21dc2620db2620dc266a21dd2620dc2620dd266a21de2620dd2620de266a21df2620de2620df266a21e02620df2620" + "e0266a21e12620e02620e1266a21e22620e12620e2266a21e32620e22620e3266a21e42620e32620e4266a21e52620" + "e42620e5266a21e62620e52620e6266a21e72620e62620e7266a21e82620e72620e8266a21e92620e82620e9266a21" + "ea2620e92620ea266a21eb2620ea2620eb266a21ec2620eb2620ec266a21ed2620ec2620ed266a21ee2620ed2620ee" + "266a21ef2620ee2620ef266a21f02620ef2620f0266a21f12620f02620f1266a21f22620f12620f2266a21f32620f2" + "2620f3266a21f42620f32620f4266a21f52620f42620f5266a21f62620f52620f6266a21f72620f62620f7266a21f8" + "2620f72620f8266a21f92620f82620f9266a21fa2620f92620fa266a21fb2620fa2620fb266a21fc2620fb2620fc26" + "6a21fd2620fc2620fd266a21fe2620fd2620fe266a21ff2620fe2620ff266a21802720ff262080276a218127208027" + "2081276a2182272081272082276a2183272082272083276a2184272083272084276a2185272084272085276a218627" + "2085272086276a2187272086272087276a2188272087272088276a2189272088272089276a218a27208927208a276a" + "218b27208a27208b276a218c27208b27208c276a218d27208c27208d276a218e27208d27208e276a218f27208e2720" + "8f276a219027208f272090276a2191272090272091276a2192272091272092276a2193272092272093276a21942720" + "93272094276a2195272094272095276a2196272095272096276a2197272096272097276a2198272097272098276a21" + "99272098272099276a219a27209927209a276a219b27209a27209b276a219c27209b27209c276a219d27209c27209d" + "276a219e27209d27209e276a219f27209e27209f276a21a027209f2720a0276a21a12720a02720a1276a21a22720a1" + "2720a2276a21a32720a22720a3276a21a42720a32720a4276a21a52720a42720a5276a21a62720a52720a6276a21a7" + "2720a62720a7276a21a82720a72720a8276a21a92720a82720a9276a21aa2720a92720aa276a21ab2720aa2720ab27" + "6a21ac2720ab2720ac276a21ad2720ac2720ad276a21ae2720ad2720ae276a21af2720ae2720af276a21b02720af27" + "20b0276a21b12720b02720b1276a21b22720b12720b2276a21b32720b22720b3276a21b42720b32720b4276a21b527" + "20b42720b5276a21b62720b52720b6276a21b72720b62720b7276a21b82720b72720b8276a21b92720b82720b9276a" + "21ba2720b92720ba276a21bb2720ba2720bb276a21bc2720bb2720bc276a21bd2720bc2720bd276a21be2720bd2720" + "be276a21bf2720be2720bf276a21c02720bf2720c0276a21c12720c02720c1276a21c22720c12720c2276a21c32720" + "c22720c3276a21c42720c32720c4276a21c52720c42720c5276a21c62720c52720c6276a21c72720c62720c7276a21" + "c82720c72720c8276a21c92720c82720c9276a21ca2720c92720ca276a21cb2720ca2720cb276a21cc2720cb2720cc" + "276a21cd2720cc2720cd276a21ce2720cd2720ce276a21cf2720ce2720cf276a21d02720cf2720d0276a21d12720d0" + "2720d1276a21d22720d12720d2276a21d32720d22720d3276a21d42720d32720d4276a21d52720d42720d5276a21d6" + "2720d52720d6276a21d72720d62720d7276a21d82720d72720d8276a21d92720d82720d9276a21da2720d92720da27" + "6a21db2720da2720db276a21dc2720db2720dc276a21dd2720dc2720dd276a21de2720dd2720de276a21df2720de27" + "20df276a21e02720df2720e0276a21e12720e02720e1276a21e22720e12720e2276a21e32720e22720e3276a21e427" + "20e32720e4276a21e52720e42720e5276a21e62720e52720e6276a21e72720e62720e7276a21e82720e72720e8276a" + "21e92720e82720e9276a21ea2720e92720ea276a21eb2720ea2720eb276a21ec2720eb2720ec276a21ed2720ec2720" + "ed276a21ee2720ed2720ee276a21ef2720ee2720ef276a21f02720ef2720f0276a21f12720f02720f1276a21f22720" + "f12720f2276a21f32720f22720f3276a21f42720f32720f4276a21f52720f42720f5276a21f62720f52720f6276a21" + "f72720f62720f7276a21f82720f72720f8276a21f92720f82720f9276a21fa2720f92720fa276a21fb2720fa2720fb" + "276a21fc2720fb2720fc276a21fd2720fc2720fd276a21fe2720fd2720fe276a21ff2720fe2720ff276a21802820ff" + "272080286a2181282080282081286a2182282081282082286a2183282082282083286a2184282083282084286a2185" + "282084282085286a2186282085282086286a2187282086282087286a2188282087282088286a218928208828208928" + "6a218a28208928208a286a218b28208a28208b286a218c28208b28208c286a218d28208c28208d286a218e28208d28" + "208e286a218f28208e28208f286a219028208f282090286a2191282090282091286a2192282091282092286a219328" + "2092282093286a2194282093282094286a2195282094282095286a2196282095282096286a2197282096282097286a" + "2198282097282098286a2199282098282099286a219a28209928209a286a219b28209a28209b286a219c28209b2820" + "9c286a219d28209c28209d286a219e28209d28209e286a219f28209e28209f286a21a028209f2820a0286a21a12820" + "a02820a1286a21a22820a12820a2286a21a32820a22820a3286a21a42820a32820a4286a21a52820a42820a5286a21" + "a62820a52820a6286a21a72820a62820a7286a21a82820a72820a8286a21a92820a82820a9286a21aa2820a92820aa" + "286a21ab2820aa2820ab286a21ac2820ab2820ac286a21ad2820ac2820ad286a21ae2820ad2820ae286a21af2820ae" + "2820af286a21b02820af2820b0286a21b12820b02820b1286a21b22820b12820b2286a21b32820b22820b3286a21b4" + "2820b32820b4286a21b52820b42820b5286a21b62820b52820b6286a21b72820b62820b7286a21b82820b72820b828" + "6a21b92820b82820b9286a21ba2820b92820ba286a21bb2820ba2820bb286a21bc2820bb2820bc286a21bd2820bc28" + "20bd286a21be2820bd2820be286a21bf2820be2820bf286a21c02820bf2820c0286a21c12820c02820c1286a21c228" + "20c12820c2286a21c32820c22820c3286a21c42820c32820c4286a21c52820c42820c5286a21c62820c52820c6286a" + "21c72820c62820c7286a21c82820c72820c8286a21c92820c82820c9286a21ca2820c92820ca286a21cb2820ca2820" + "cb286a21cc2820cb2820cc286a21cd2820cc2820cd286a21ce2820cd2820ce286a21cf2820ce2820cf286a21d02820" + "cf2820d0286a21d12820d02820d1286a21d22820d12820d2286a21d32820d22820d3286a21d42820d32820d4286a21" + "d52820d42820d5286a21d62820d52820d6286a21d72820d62820d7286a21d82820d72820d8286a21d92820d82820d9" + "286a21da2820d92820da286a21db2820da2820db286a21dc2820db2820dc286a21dd2820dc2820dd286a21de2820dd" + "2820de286a21df2820de2820df286a21e02820df2820e0286a21e12820e02820e1286a21e22820e12820e2286a21e3" + "2820e22820e3286a21e42820e32820e4286a21e52820e42820e5286a21e62820e52820e6286a21e72820e62820e728" + "6a21e82820e72820e8286a21e92820e82820e9286a21ea2820e92820ea286a21eb2820ea2820eb286a21ec2820eb28" + "20ec286a21ed2820ec2820ed286a21ee2820ed2820ee286a21ef2820ee2820ef286a21f02820ef2820f0286a21f128" + "20f02820f1286a21f22820f12820f2286a21f32820f22820f3286a21f42820f32820f4286a21f52820f42820f5286a" + "21f62820f52820f6286a21f72820f62820f7286a21f82820f72820f8286a21f92820f82820f9286a21fa2820f92820" + "fa286a21fb2820fa2820fb286a21fc2820fb2820fc286a21fd2820fc2820fd286a21fe2820fd2820fe286a21ff2820" + "fe2820ff286a21802920ff282080296a2181292080292081296a2182292081292082296a2183292082292083296a21" + "84292083292084296a2185292084292085296a2186292085292086296a2187292086292087296a2188292087292088" + "296a2189292088292089296a218a29208929208a296a218b29208a29208b296a218c29208b29208c296a218d29208c" + "29208d296a218e29208d29208e296a218f29208e29208f296a219029208f292090296a2191292090292091296a2192" + "292091292092296a2193292092292093296a2194292093292094296a2195292094292095296a219629209529209629" + "6a2197292096292097296a2198292097292098296a2199292098292099296a219a29209929209a296a219b29209a29" + "209b296a219c29209b29209c296a219d29209c29209d296a219e29209d29209e296a219f29209e29209f296a21a029" + "209f2920a0296a21a12920a02920a1296a21a22920a12920a2296a21a32920a22920a3296a21a42920a32920a4296a" + "21a52920a42920a5296a21a62920a52920a6296a21a72920a62920a7296a21a82920a72920a8296a21a92920a82920" + "a9296a21aa2920a92920aa296a21ab2920aa2920ab296a21ac2920ab2920ac296a21ad2920ac2920ad296a21ae2920" + "ad2920ae296a21af2920ae2920af296a21b02920af2920b0296a21b12920b02920b1296a21b22920b12920b2296a21" + "b32920b22920b3296a21b42920b32920b4296a21b52920b42920b5296a21b62920b52920b6296a21b72920b62920b7" + "296a21b82920b72920b8296a21b92920b82920b9296a21ba2920b92920ba296a21bb2920ba2920bb296a21bc2920bb" + "2920bc296a21bd2920bc2920bd296a21be2920bd2920be296a21bf2920be2920bf296a21c02920bf2920c0296a21c1" + "2920c02920c1296a21c22920c12920c2296a21c32920c22920c3296a21c42920c32920c4296a21c52920c42920c529" + "6a21c62920c52920c6296a21c72920c62920c7296a21c82920c72920c8296a21c92920c82920c9296a21ca2920c929" + "20ca296a21cb2920ca2920cb296a21cc2920cb2920cc296a21cd2920cc2920cd296a21ce2920cd2920ce296a21cf29" + "20ce2920cf296a21d02920cf2920d0296a21d12920d02920d1296a21d22920d12920d2296a21d32920d22920d3296a" + "21d42920d32920d4296a21d52920d42920d5296a21d62920d52920d6296a21d72920d62920d7296a21d82920d72920" + "d8296a21d92920d82920d9296a21da2920d92920da296a21db2920da2920db296a21dc2920db2920dc296a21dd2920" + "dc2920dd296a21de2920dd2920de296a21df2920de2920df296a21e02920df2920e0296a21e12920e02920e1296a21" + "e22920e12920e2296a21e32920e22920e3296a21e42920e32920e4296a21e52920e42920e5296a21e62920e52920e6" + "296a21e72920e62920e7296a21e82920e72920e8296a21e92920e82920e9296a21ea2920e92920ea296a21eb2920ea" + "2920eb296a21ec2920eb2920ec296a21ed2920ec2920ed296a21ee2920ed2920ee296a21ef2920ee2920ef296a21f0" + "2920ef2920f0296a21f12920f02920f1296a21f22920f12920f2296a21f32920f22920f3296a21f42920f32920f429" + "6a21f52920f42920f5296a21f62920f52920f6296a21f72920f62920f7296a21f82920f72920f8296a21f92920f829" + "20f9296a21fa2920f92920fa296a21fb2920fa2920fb296a21fc2920fb2920fc296a21fd2920fc2920fd296a21fe29" + "20fd2920fe296a21ff2920fe2920ff296a21802a20ff2920802a6a21812a20802a20812a6a21822a20812a20822a6a" + "21832a20822a20832a6a21842a20832a20842a6a21852a20842a20852a6a21862a20852a20862a6a21872a20862a20" + "872a6a21882a20872a20882a6a21892a20882a20892a6a218a2a20892a208a2a6a218b2a208a2a208b2a6a218c2a20" + "8b2a208c2a6a218d2a208c2a208d2a6a218e2a208d2a208e2a6a218f2a208e2a208f2a6a21902a208f2a20902a6a21" + "912a20902a20912a6a21922a20912a20922a6a21932a20922a20932a6a21942a20932a20942a6a21952a20942a2095" + "2a6a21962a20952a20962a6a21972a20962a20972a6a21982a20972a20982a6a21992a20982a20992a6a219a2a2099" + "2a209a2a6a219b2a209a2a209b2a6a219c2a209b2a209c2a6a219d2a209c2a209d2a6a219e2a209d2a209e2a6a219f" + "2a209e2a209f2a6a21a02a209f2a20a02a6a21a12a20a02a20a12a6a21a22a20a12a20a22a6a21a32a20a22a20a32a" + "6a21a42a20a32a20a42a6a21a52a20a42a20a52a6a21a62a20a52a20a62a6a21a72a20a62a20a72a6a21a82a20a72a" + "20a82a6a21a92a20a82a20a92a6a21aa2a20a92a20aa2a6a21ab2a20aa2a20ab2a6a21ac2a20ab2a20ac2a6a21ad2a" + "20ac2a20ad2a6a21ae2a20ad2a20ae2a6a21af2a20ae2a20af2a6a21b02a20af2a20b02a6a21b12a20b02a20b12a6a" + "21b22a20b12a20b22a6a21b32a20b22a20b32a6a21b42a20b32a20b42a6a21b52a20b42a20b52a6a21b62a20b52a20" + "b62a6a21b72a20b62a20b72a6a21b82a20b72a20b82a6a21b92a20b82a20b92a6a21ba2a20b92a20ba2a6a21bb2a20" + "ba2a20bb2a6a21bc2a20bb2a20bc2a6a21bd2a20bc2a20bd2a6a21be2a20bd2a20be2a6a21bf2a20be2a20bf2a6a21" + "c02a20bf2a20c02a6a21c12a20c02a20c12a6a21c22a20c12a20c22a6a21c32a20c22a20c32a6a21c42a20c32a20c4" + "2a6a21c52a20c42a20c52a6a21c62a20c52a20c62a6a21c72a20c62a20c72a6a21c82a20c72a20c82a6a21c92a20c8" + "2a20c92a6a21ca2a20c92a20ca2a6a21cb2a20ca2a20cb2a6a21cc2a20cb2a20cc2a6a21cd2a20cc2a20cd2a6a21ce" + "2a20cd2a20ce2a6a21cf2a20ce2a20cf2a6a21d02a20cf2a20d02a6a21d12a20d02a20d12a6a21d22a20d12a20d22a" + "6a21d32a20d22a20d32a6a21d42a20d32a20d42a6a21d52a20d42a20d52a6a21d62a20d52a20d62a6a21d72a20d62a" + "20d72a6a21d82a20d72a20d82a6a21d92a20d82a20d92a6a21da2a20d92a20da2a6a21db2a20da2a20db2a6a21dc2a" + "20db2a20dc2a6a21dd2a20dc2a20dd2a6a21de2a20dd2a20de2a6a21df2a20de2a20df2a6a21e02a20df2a20e02a6a" + "21e12a20e02a20e12a6a21e22a20e12a20e22a6a21e32a20e22a20e32a6a21e42a20e32a20e42a6a21e52a20e42a20" + "e52a6a21e62a20e52a20e62a6a21e72a20e62a20e72a6a21e82a20e72a20e82a6a21e92a20e82a20e92a6a21ea2a20" + "e92a20ea2a6a21eb2a20ea2a20eb2a6a21ec2a20eb2a20ec2a6a21ed2a20ec2a20ed2a6a21ee2a20ed2a20ee2a6a21" + "ef2a20ee2a20ef2a6a21f02a20ef2a20f02a6a21f12a20f02a20f12a6a21f22a20f12a20f22a6a21f32a20f22a20f3" + "2a6a21f42a20f32a20f42a6a21f52a20f42a20f52a6a21f62a20f52a20f62a6a21f72a20f62a20f72a6a21f82a20f7" + "2a20f82a6a21f92a20f82a20f92a6a21fa2a20f92a20fa2a6a21fb2a20fa2a20fb2a6a21fc2a20fb2a20fc2a6a21fd" + "2a20fc2a20fd2a6a21fe2a20fd2a20fe2a6a21ff2a20fe2a20ff2a6a21802b20ff2a20802b6a21812b20802b20812b" + "6a21822b20812b20822b6a21832b20822b20832b6a21842b20832b20842b6a21852b20842b20852b6a21862b20852b" + "20862b6a21872b20862b20872b6a21882b20872b20882b6a21892b20882b20892b6a218a2b20892b208a2b6a218b2b" + "208a2b208b2b6a218c2b208b2b208c2b6a218d2b208c2b208d2b6a218e2b208d2b208e2b6a218f2b208e2b208f2b6a" + "21902b208f2b20902b6a21912b20902b20912b6a21922b20912b20922b6a21932b20922b20932b6a21942b20932b20" + "942b6a21952b20942b20952b6a21962b20952b20962b6a21972b20962b20972b6a21982b20972b20982b6a21992b20" + "982b20992b6a219a2b20992b209a2b6a219b2b209a2b209b2b6a219c2b209b2b209c2b6a219d2b209c2b209d2b6a21" + "9e2b209d2b209e2b6a219f2b209e2b209f2b6a21a02b209f2b20a02b6a21a12b20a02b20a12b6a21a22b20a12b20a2" + "2b6a21a32b20a22b20a32b6a21a42b20a32b20a42b6a21a52b20a42b20a52b6a21a62b20a52b20a62b6a21a72b20a6" + "2b20a72b6a21a82b20a72b20a82b6a21a92b20a82b20a92b6a21aa2b20a92b20aa2b6a21ab2b20aa2b20ab2b6a21ac" + "2b20ab2b20ac2b6a21ad2b20ac2b20ad2b6a21ae2b20ad2b20ae2b6a21af2b20ae2b20af2b6a21b02b20af2b20b02b" + "6a21b12b20b02b20b12b6a21b22b20b12b20b22b6a21b32b20b22b20b32b6a21b42b20b32b20b42b6a21b52b20b42b" + "20b52b6a21b62b20b52b20b62b6a21b72b20b62b20b72b6a21b82b20b72b20b82b6a21b92b20b82b20b92b6a21ba2b" + "20b92b20ba2b6a21bb2b20ba2b20bb2b6a21bc2b20bb2b20bc2b6a21bd2b20bc2b20bd2b6a21be2b20bd2b20be2b6a" + "21bf2b20be2b20bf2b6a21c02b20bf2b20c02b6a21c12b20c02b20c12b6a21c22b20c12b20c22b6a21c32b20c22b20" + "c32b6a21c42b20c32b20c42b6a21c52b20c42b20c52b6a21c62b20c52b20c62b6a21c72b20c62b20c72b6a21c82b20" + "c72b20c82b6a21c92b20c82b20c92b6a21ca2b20c92b20ca2b6a21cb2b20ca2b20cb2b6a21cc2b20cb2b20cc2b6a21" + "cd2b20cc2b20cd2b6a21ce2b20cd2b20ce2b6a21cf2b20ce2b20cf2b6a21d02b20cf2b20d02b6a21d12b20d02b20d1" + "2b6a21d22b20d12b20d22b6a21d32b20d22b20d32b6a21d42b20d32b20d42b6a21d52b20d42b20d52b6a21d62b20d5" + "2b20d62b6a21d72b20d62b20d72b6a21d82b20d72b20d82b6a21d92b20d82b20d92b6a21da2b20d92b20da2b6a21db" + "2b20da2b20db2b6a21dc2b20db2b20dc2b6a21dd2b20dc2b20dd2b6a21de2b20dd2b20de2b6a21df2b20de2b20df2b" + "6a21e02b20df2b20e02b6a21e12b20e02b20e12b6a21e22b20e12b20e22b6a21e32b20e22b20e32b6a21e42b20e32b" + "20e42b6a21e52b20e42b20e52b6a21e62b20e52b20e62b6a21e72b20e62b20e72b6a21e82b20e72b20e82b6a21e92b" + "20e82b20e92b6a21ea2b20e92b20ea2b6a21eb2b20ea2b20eb2b6a21ec2b20eb2b20ec2b6a21ed2b20ec2b20ed2b6a" + "21ee2b20ed2b20ee2b6a21ef2b20ee2b20ef2b6a21f02b20ef2b20f02b6a21f12b20f02b20f12b6a21f22b20f12b20" + "f22b6a21f32b20f22b20f32b6a21f42b20f32b20f42b6a21f52b20f42b20f52b6a21f62b20f52b20f62b6a21f72b20" + "f62b20f72b6a21f82b20f72b20f82b6a21f92b20f82b20f92b6a21fa2b20f92b20fa2b6a21fb2b20fa2b20fb2b6a21" + "fc2b20fb2b20fc2b6a21fd2b20fc2b20fd2b6a21fe2b20fd2b20fe2b6a21ff2b20fe2b20ff2b6a21802c20ff2b2080" + "2c6a21812c20802c20812c6a21822c20812c20822c6a21832c20822c20832c6a21842c20832c20842c6a21852c2084" + "2c20852c6a21862c20852c20862c6a21872c20862c20872c6a21882c20872c20882c6a21892c20882c20892c6a218a" + "2c20892c208a2c6a218b2c208a2c208b2c6a218c2c208b2c208c2c6a218d2c208c2c208d2c6a218e2c208d2c208e2c" + "6a218f2c208e2c208f2c6a21902c208f2c20902c6a21912c20902c20912c6a21922c20912c20922c6a21932c20922c" + "20932c6a21942c20932c20942c6a21952c20942c20952c6a21962c20952c20962c6a21972c20962c20972c6a21982c" + "20972c20982c6a21992c20982c20992c6a219a2c20992c209a2c6a219b2c209a2c209b2c6a219c2c209b2c209c2c6a" + "219d2c209c2c209d2c6a219e2c209d2c209e2c6a219f2c209e2c209f2c6a21a02c209f2c20a02c6a21a12c20a02c20" + "a12c6a21a22c20a12c20a22c6a21a32c20a22c20a32c6a21a42c20a32c20a42c6a21a52c20a42c20a52c6a21a62c20" + "a52c20a62c6a21a72c20a62c20a72c6a21a82c20a72c20a82c6a21a92c20a82c20a92c6a21aa2c20a92c20aa2c6a21" + "ab2c20aa2c20ab2c6a21ac2c20ab2c20ac2c6a21ad2c20ac2c20ad2c6a21ae2c20ad2c20ae2c6a21af2c20ae2c20af" + "2c6a21b02c20af2c20b02c6a21b12c20b02c20b12c6a21b22c20b12c20b22c6a21b32c20b22c20b32c6a21b42c20b3" + "2c20b42c6a21b52c20b42c20b52c6a21b62c20b52c20b62c6a21b72c20b62c20b72c6a21b82c20b72c20b82c6a21b9" + "2c20b82c20b92c6a21ba2c20b92c20ba2c6a21bb2c20ba2c20bb2c6a21bc2c20bb2c20bc2c6a21bd2c20bc2c20bd2c" + "6a21be2c20bd2c20be2c6a21bf2c20be2c20bf2c6a21c02c20bf2c20c02c6a21c12c20c02c20c12c6a21c22c20c12c" + "20c22c6a21c32c20c22c20c32c6a21c42c20c32c20c42c6a21c52c20c42c20c52c6a21c62c20c52c20c62c6a21c72c" + "20c62c20c72c6a21c82c20c72c20c82c6a21c92c20c82c20c92c6a21ca2c20c92c20ca2c6a21cb2c20ca2c20cb2c6a" + "21cc2c20cb2c20cc2c6a21cd2c20cc2c20cd2c6a21ce2c20cd2c20ce2c6a21cf2c20ce2c20cf2c6a21d02c20cf2c20" + "d02c6a21d12c20d02c20d12c6a21d22c20d12c20d22c6a21d32c20d22c20d32c6a21d42c20d32c20d42c6a21d52c20" + "d42c20d52c6a21d62c20d52c20d62c6a21d72c20d62c20d72c6a21d82c20d72c20d82c6a21d92c20d82c20d92c6a21" + "da2c20d92c20da2c6a21db2c20da2c20db2c6a21dc2c20db2c20dc2c6a21dd2c20dc2c20dd2c6a21de2c20dd2c20de" + "2c6a21df2c20de2c20df2c6a21e02c20df2c20e02c6a21e12c20e02c20e12c6a21e22c20e12c20e22c6a21e32c20e2" + "2c20e32c6a21e42c20e32c20e42c6a21e52c20e42c20e52c6a21e62c20e52c20e62c6a21e72c20e62c20e72c6a21e8" + "2c20e72c20e82c6a21e92c20e82c20e92c6a21ea2c20e92c20ea2c6a21eb2c20ea2c20eb2c6a21ec2c20eb2c20ec2c" + "6a21ed2c20ec2c20ed2c6a21ee2c20ed2c20ee2c6a21ef2c20ee2c20ef2c6a21f02c20ef2c20f02c6a21f12c20f02c" + "20f12c6a21f22c20f12c20f22c6a21f32c20f22c20f32c6a21f42c20f32c20f42c6a21f52c20f42c20f52c6a21f62c" + "20f52c20f62c6a21f72c20f62c20f72c6a21f82c20f72c20f82c6a21f92c20f82c20f92c6a21fa2c20f92c20fa2c6a" + "21fb2c20fa2c20fb2c6a21fc2c20fb2c20fc2c6a21fd2c20fc2c20fd2c6a21fe2c20fd2c20fe2c6a21ff2c20fe2c20" + "ff2c6a21802d20ff2c20802d6a21812d20802d20812d6a21822d20812d20822d6a21832d20822d20832d6a21842d20" + "832d20842d6a21852d20842d20852d6a21862d20852d20862d6a21872d20862d20872d6a21882d20872d20882d6a21" + "892d20882d20892d6a218a2d20892d208a2d6a218b2d208a2d208b2d6a218c2d208b2d208c2d6a218d2d208c2d208d" + "2d6a218e2d208d2d208e2d6a218f2d208e2d208f2d6a21902d208f2d20902d6a21912d20902d20912d6a21922d2091" + "2d20922d6a21932d20922d20932d6a21942d20932d20942d6a21952d20942d20952d6a21962d20952d20962d6a2197" + "2d20962d20972d6a21982d20972d20982d6a21992d20982d20992d6a219a2d20992d209a2d6a219b2d209a2d209b2d" + "6a219c2d209b2d209c2d6a219d2d209c2d209d2d6a219e2d209d2d209e2d6a219f2d209e2d209f2d6a21a02d209f2d" + "20a02d6a21a12d20a02d20a12d6a21a22d20a12d20a22d6a21a32d20a22d20a32d6a21a42d20a32d20a42d6a21a52d" + "20a42d20a52d6a21a62d20a52d20a62d6a21a72d20a62d20a72d6a21a82d20a72d20a82d6a21a92d20a82d20a92d6a" + "21aa2d20a92d20aa2d6a21ab2d20aa2d20ab2d6a21ac2d20ab2d20ac2d6a21ad2d20ac2d20ad2d6a21ae2d20ad2d20" + "ae2d6a21af2d20ae2d20af2d6a21b02d20af2d20b02d6a21b12d20b02d20b12d6a21b22d20b12d20b22d6a21b32d20" + "b22d20b32d6a21b42d20b32d20b42d6a21b52d20b42d20b52d6a21b62d20b52d20b62d6a21b72d20b62d20b72d6a21" + "b82d20b72d20b82d6a21b92d20b82d20b92d6a21ba2d20b92d20ba2d6a21bb2d20ba2d20bb2d6a21bc2d20bb2d20bc" + "2d6a21bd2d20bc2d20bd2d6a21be2d20bd2d20be2d6a21bf2d20be2d20bf2d6a21c02d20bf2d20c02d6a21c12d20c0" + "2d20c12d6a21c22d20c12d20c22d6a21c32d20c22d20c32d6a21c42d20c32d20c42d6a21c52d20c42d20c52d6a21c6" + "2d20c52d20c62d6a21c72d20c62d20c72d6a21c82d20c72d20c82d6a21c92d20c82d20c92d6a21ca2d20c92d20ca2d" + "6a21cb2d20ca2d20cb2d6a21cc2d20cb2d20cc2d6a21cd2d20cc2d20cd2d6a21ce2d20cd2d20ce2d6a21cf2d20ce2d" + "20cf2d6a21d02d20cf2d20d02d6a21d12d20d02d20d12d6a21d22d20d12d20d22d6a21d32d20d22d20d32d6a21d42d" + "20d32d20d42d6a21d52d20d42d20d52d6a21d62d20d52d20d62d6a21d72d20d62d20d72d6a21d82d20d72d20d82d6a" + "21d92d20d82d20d92d6a21da2d20d92d20da2d6a21db2d20da2d20db2d6a21dc2d20db2d20dc2d6a21dd2d20dc2d20" + "dd2d6a21de2d20dd2d20de2d6a21df2d20de2d20df2d6a21e02d20df2d20e02d6a21e12d20e02d20e12d6a21e22d20" + "e12d20e22d6a21e32d20e22d20e32d6a21e42d20e32d20e42d6a21e52d20e42d20e52d6a21e62d20e52d20e62d6a21" + "e72d20e62d20e72d6a21e82d20e72d20e82d6a21e92d20e82d20e92d6a21ea2d20e92d20ea2d6a21eb2d20ea2d20eb" + "2d6a21ec2d20eb2d20ec2d6a21ed2d20ec2d20ed2d6a21ee2d20ed2d20ee2d6a21ef2d20ee2d20ef2d6a21f02d20ef" + "2d20f02d6a21f12d20f02d20f12d6a21f22d20f12d20f22d6a21f32d20f22d20f32d6a21f42d20f32d20f42d6a21f5" + "2d20f42d20f52d6a21f62d20f52d20f62d6a21f72d20f62d20f72d6a21f82d20f72d20f82d6a21f92d20f82d20f92d" + "6a21fa2d20f92d20fa2d6a21fb2d20fa2d20fb2d6a21fc2d20fb2d20fc2d6a21fd2d20fc2d20fd2d6a21fe2d20fd2d" + "20fe2d6a21ff2d20fe2d20ff2d6a21802e20ff2d20802e6a21812e20802e20812e6a21822e20812e20822e6a21832e" + "20822e20832e6a21842e20832e20842e6a21852e20842e20852e6a21862e20852e20862e6a21872e20862e20872e6a" + "21882e20872e20882e6a21892e20882e20892e6a218a2e20892e208a2e6a218b2e208a2e208b2e6a218c2e208b2e20" + "8c2e6a218d2e208c2e208d2e6a218e2e208d2e208e2e6a218f2e208e2e208f2e6a21902e208f2e20902e6a21912e20" + "902e20912e6a21922e20912e20922e6a21932e20922e20932e6a21942e20932e20942e6a21952e20942e20952e6a21" + "962e20952e20962e6a21972e20962e20972e6a21982e20972e20982e6a21992e20982e20992e6a219a2e20992e209a" + "2e6a219b2e209a2e209b2e6a219c2e209b2e209c2e6a219d2e209c2e209d2e6a219e2e209d2e209e2e6a219f2e209e" + "2e209f2e6a21a02e209f2e20a02e6a21a12e20a02e20a12e6a21a22e20a12e20a22e6a21a32e20a22e20a32e6a21a4" + "2e20a32e20a42e6a21a52e20a42e20a52e6a21a62e20a52e20a62e6a21a72e20a62e20a72e6a21a82e20a72e20a82e" + "6a21a92e20a82e20a92e6a21aa2e20a92e20aa2e6a21ab2e20aa2e20ab2e6a21ac2e20ab2e20ac2e6a21ad2e20ac2e" + "20ad2e6a21ae2e20ad2e20ae2e6a21af2e20ae2e20af2e6a21b02e20af2e20b02e6a21b12e20b02e20b12e6a21b22e" + "20b12e20b22e6a21b32e20b22e20b32e6a21b42e20b32e20b42e6a21b52e20b42e20b52e6a21b62e20b52e20b62e6a" + "21b72e20b62e20b72e6a21b82e20b72e20b82e6a21b92e20b82e20b92e6a21ba2e20b92e20ba2e6a21bb2e20ba2e20" + "bb2e6a21bc2e20bb2e20bc2e6a21bd2e20bc2e20bd2e6a21be2e20bd2e20be2e6a21bf2e20be2e20bf2e6a21c02e20" + "bf2e20c02e6a21c12e20c02e20c12e6a21c22e20c12e20c22e6a21c32e20c22e20c32e6a21c42e20c32e20c42e6a21" + "c52e20c42e20c52e6a21c62e20c52e20c62e6a21c72e20c62e20c72e6a21c82e20c72e20c82e6a21c92e20c82e20c9" + "2e6a21ca2e20c92e20ca2e6a21cb2e20ca2e20cb2e6a21cc2e20cb2e20cc2e6a21cd2e20cc2e20cd2e6a21ce2e20cd" + "2e20ce2e6a21cf2e20ce2e20cf2e6a21d02e20cf2e20d02e6a21d12e20d02e20d12e6a21d22e20d12e20d22e6a21d3" + "2e20d22e20d32e6a21d42e20d32e20d42e6a21d52e20d42e20d52e6a21d62e20d52e20d62e6a21d72e20d62e20d72e" + "6a21d82e20d72e20d82e6a21d92e20d82e20d92e6a21da2e20d92e20da2e6a21db2e20da2e20db2e6a21dc2e20db2e" + "20dc2e6a21dd2e20dc2e20dd2e6a21de2e20dd2e20de2e6a21df2e20de2e20df2e6a21e02e20df2e20e02e6a21e12e" + "20e02e20e12e6a21e22e20e12e20e22e6a21e32e20e22e20e32e6a21e42e20e32e20e42e6a21e52e20e42e20e52e6a" + "21e62e20e52e20e62e6a21e72e20e62e20e72e6a21e82e20e72e20e82e6a21e92e20e82e20e92e6a21ea2e20e92e20" + "ea2e6a21eb2e20ea2e20eb2e6a21ec2e20eb2e20ec2e6a21ed2e20ec2e20ed2e6a21ee2e20ed2e20ee2e6a21ef2e20" + "ee2e20ef2e6a21f02e20ef2e20f02e6a21f12e20f02e20f12e6a21f22e20f12e20f22e6a21f32e20f22e20f32e6a21" + "f42e20f32e20f42e6a21f52e20f42e20f52e6a21f62e20f52e20f62e6a21f72e20f62e20f72e6a21f82e20f72e20f8" + "2e6a21f92e20f82e20f92e6a21fa2e20f92e20fa2e6a21fb2e20fa2e20fb2e6a21fc2e20fb2e20fc2e6a21fd2e20fc" + "2e20fd2e6a21fe2e20fd2e20fe2e6a21ff2e20fe2e20ff2e6a21802f20ff2e20802f6a21812f20802f20812f6a2182" + "2f20812f20822f6a21832f20822f20832f6a21842f20832f20842f6a21852f20842f20852f6a21862f20852f20862f" + "6a21872f20862f20872f6a21882f20872f20882f6a21892f20882f20892f6a218a2f20892f208a2f6a218b2f208a2f" + "208b2f6a218c2f208b2f208c2f6a218d2f208c2f208d2f6a218e2f208d2f208e2f6a218f2f208e2f208f2f6a21902f" + "208f2f20902f6a21912f20902f20912f6a21922f20912f20922f6a21932f20922f20932f6a21942f20932f20942f6a" + "21952f20942f20952f6a21962f20952f20962f6a21972f20962f20972f6a21982f20972f20982f6a21992f20982f20" + "992f6a219a2f20992f209a2f6a219b2f209a2f209b2f6a219c2f209b2f209c2f6a219d2f209c2f209d2f6a219e2f20" + "9d2f209e2f6a219f2f209e2f209f2f6a21a02f209f2f20a02f6a21a12f20a02f20a12f6a21a22f20a12f20a22f6a21" + "a32f20a22f20a32f6a21a42f20a32f20a42f6a21a52f20a42f20a52f6a21a62f20a52f20a62f6a21a72f20a62f20a7" + "2f6a21a82f20a72f20a82f6a21a92f20a82f20a92f6a21aa2f20a92f20aa2f6a21ab2f20aa2f20ab2f6a21ac2f20ab" + "2f20ac2f6a21ad2f20ac2f20ad2f6a21ae2f20ad2f20ae2f6a21af2f20ae2f20af2f6a21b02f20af2f20b02f6a21b1" + "2f20b02f20b12f6a21b22f20b12f20b22f6a21b32f20b22f20b32f6a21b42f20b32f20b42f6a21b52f20b42f20b52f" + "6a21b62f20b52f20b62f6a21b72f20b62f20b72f6a21b82f20b72f20b82f6a21b92f20b82f20b92f6a21ba2f20b92f" + "20ba2f6a21bb2f20ba2f20bb2f6a21bc2f20bb2f20bc2f6a21bd2f20bc2f20bd2f6a21be2f20bd2f20be2f6a21bf2f" + "20be2f20bf2f6a21c02f20bf2f20c02f6a21c12f20c02f20c12f6a21c22f20c12f20c22f6a21c32f20c22f20c32f6a" + "21c42f20c32f20c42f6a21c52f20c42f20c52f6a21c62f20c52f20c62f6a21c72f20c62f20c72f6a21c82f20c72f20" + "c82f6a21c92f20c82f20c92f6a21ca2f20c92f20ca2f6a21cb2f20ca2f20cb2f6a21cc2f20cb2f20cc2f6a21cd2f20" + "cc2f20cd2f6a21ce2f20cd2f20ce2f6a21cf2f20ce2f20cf2f6a21d02f20cf2f20d02f6a21d12f20d02f20d12f6a21" + "d22f20d12f20d22f6a21d32f20d22f20d32f6a21d42f20d32f20d42f6a21d52f20d42f20d52f6a21d62f20d52f20d6" + "2f6a21d72f20d62f20d72f6a21d82f20d72f20d82f6a21d92f20d82f20d92f6a21da2f20d92f20da2f6a21db2f20da" + "2f20db2f6a21dc2f20db2f20dc2f6a21dd2f20dc2f20dd2f6a21de2f20dd2f20de2f6a21df2f20de2f20df2f6a21e0" + "2f20df2f20e02f6a21e12f20e02f20e12f6a21e22f20e12f20e22f6a21e32f20e22f20e32f6a21e42f20e32f20e42f" + "6a21e52f20e42f20e52f6a21e62f20e52f20e62f6a21e72f20e62f20e72f6a21e82f20e72f20e82f6a21e92f20e82f" + "20e92f6a21ea2f20e92f20ea2f6a21eb2f20ea2f20eb2f6a21ec2f20eb2f20ec2f6a21ed2f20ec2f20ed2f6a21ee2f" + "20ed2f20ee2f6a21ef2f20ee2f20ef2f6a21f02f20ef2f20f02f6a21f12f20f02f20f12f6a21f22f20f12f20f22f6a" + "21f32f20f22f20f32f6a21f42f20f32f20f42f6a21f52f20f42f20f52f6a21f62f20f52f20f62f6a21f72f20f62f20" + "f72f6a21f82f20f72f20f82f6a21f92f20f82f20f92f6a21fa2f20f92f20fa2f6a21fb2f20fa2f20fb2f6a21fc2f20" + "fb2f20fc2f6a21fd2f20fc2f20fd2f6a21fe2f20fd2f20fe2f6a21ff2f20fe2f20ff2f6a21803020ff2f2080306a21" + "81302080302081306a2182302081302082306a2183302082302083306a2184302083302084306a2185302084302085" + "306a2186302085302086306a2187302086302087306a2188302087302088306a2189302088302089306a218a302089" + "30208a306a218b30208a30208b306a218c30208b30208c306a218d30208c30208d306a218e30208d30208e306a218f" + "30208e30208f306a219030208f302090306a2191302090302091306a2192302091302092306a219330209230209330" + "6a2194302093302094306a2195302094302095306a2196302095302096306a2197302096302097306a219830209730" + "2098306a2199302098302099306a219a30209930209a306a219b30209a30209b306a219c30209b30209c306a219d30" + "209c30209d306a219e30209d30209e306a219f30209e30209f306a21a030209f3020a0306a21a13020a03020a1306a" + "21a23020a13020a2306a21a33020a23020a3306a21a43020a33020a4306a21a53020a43020a5306a21a63020a53020" + "a6306a21a73020a63020a7306a21a83020a73020a8306a21a93020a83020a9306a21aa3020a93020aa306a21ab3020" + "aa3020ab306a21ac3020ab3020ac306a21ad3020ac3020ad306a21ae3020ad3020ae306a21af3020ae3020af306a21" + "b03020af3020b0306a21b13020b03020b1306a21b23020b13020b2306a21b33020b23020b3306a21b43020b33020b4" + "306a21b53020b43020b5306a21b63020b53020b6306a21b73020b63020b7306a21b83020b73020b8306a21b93020b8" + "3020b9306a21ba3020b93020ba306a21bb3020ba3020bb306a21bc3020bb3020bc306a21bd3020bc3020bd306a21be" + "3020bd3020be306a21bf3020be3020bf306a21c03020bf3020c0306a21c13020c03020c1306a21c23020c13020c230" + "6a21c33020c23020c3306a21c43020c33020c4306a21c53020c43020c5306a21c63020c53020c6306a21c73020c630" + "20c7306a21c83020c73020c8306a21c93020c83020c9306a21ca3020c93020ca306a21cb3020ca3020cb306a21cc30" + "20cb3020cc306a21cd3020cc3020cd306a21ce3020cd3020ce306a21cf3020ce3020cf306a21d03020cf3020d0306a" + "21d13020d03020d1306a21d23020d13020d2306a21d33020d23020d3306a21d43020d33020d4306a21d53020d43020" + "d5306a21d63020d53020d6306a21d73020d63020d7306a21d83020d73020d8306a21d93020d83020d9306a21da3020" + "d93020da306a21db3020da3020db306a21dc3020db3020dc306a21dd3020dc3020dd306a21de3020dd3020de306a21" + "df3020de3020df306a21e03020df3020e0306a21e13020e03020e1306a21e23020e13020e2306a21e33020e23020e3" + "306a21e43020e33020e4306a21e53020e43020e5306a21e63020e53020e6306a21e73020e63020e7306a21e83020e7" + "3020e8306a21e93020e83020e9306a21ea3020e93020ea306a21eb3020ea3020eb306a21ec3020eb3020ec306a21ed" + "3020ec3020ed306a21ee3020ed3020ee306a21ef3020ee3020ef306a21f03020ef3020f0306a21f13020f03020f130" + "6a21f23020f13020f2306a21f33020f23020f3306a21f43020f33020f4306a21f53020f43020f5306a21f63020f530" + "20f6306a21f73020f63020f7306a21f83020f73020f8306a21f93020f83020f9306a21fa3020f93020fa306a21fb30" + "20fa3020fb306a21fc3020fb3020fc306a21fd3020fc3020fd306a21fe3020fd3020fe306a21ff3020fe3020ff306a" + "21803120ff302080316a2181312080312081316a2182312081312082316a2183312082312083316a21843120833120" + "84316a2185312084312085316a2186312085312086316a2187312086312087316a2188312087312088316a21893120" + "88312089316a218a31208931208a316a218b31208a31208b316a218c31208b31208c316a218d31208c31208d316a21" + "8e31208d31208e316a218f31208e31208f316a219031208f312090316a2191312090312091316a2192312091312092" + "316a2193312092312093316a2194312093312094316a2195312094312095316a2196312095312096316a2197312096" + "312097316a2198312097312098316a2199312098312099316a219a31209931209a316a219b31209a31209b316a219c" + "31209b31209c316a219d31209c31209d316a219e31209d31209e316a219f31209e31209f316a21a031209f3120a031" + "6a21a13120a03120a1316a21a23120a13120a2316a21a33120a23120a3316a21a43120a33120a4316a21a53120a431" + "20a5316a21a63120a53120a6316a21a73120a63120a7316a21a83120a73120a8316a21a93120a83120a9316a21aa31" + "20a93120aa316a21ab3120aa3120ab316a21ac3120ab3120ac316a21ad3120ac3120ad316a21ae3120ad3120ae316a" + "21af3120ae3120af316a21b03120af3120b0316a21b13120b03120b1316a21b23120b13120b2316a21b33120b23120" + "b3316a21b43120b33120b4316a21b53120b43120b5316a21b63120b53120b6316a21b73120b63120b7316a21b83120" + "b73120b8316a21b93120b83120b9316a21ba3120b93120ba316a21bb3120ba3120bb316a21bc3120bb3120bc316a21" + "bd3120bc3120bd316a21be3120bd3120be316a21bf3120be3120bf316a21c03120bf3120c0316a21c13120c03120c1" + "316a21c23120c13120c2316a21c33120c23120c3316a21c43120c33120c4316a21c53120c43120c5316a21c63120c5" + "3120c6316a21c73120c63120c7316a21c83120c73120c8316a21c93120c83120c9316a21ca3120c93120ca316a21cb" + "3120ca3120cb316a21cc3120cb3120cc316a21cd3120cc3120cd316a21ce3120cd3120ce316a21cf3120ce3120cf31" + "6a21d03120cf3120d0316a21d13120d03120d1316a21d23120d13120d2316a21d33120d23120d3316a21d43120d331" + "20d4316a21d53120d43120d5316a21d63120d53120d6316a21d73120d63120d7316a21d83120d73120d8316a21d931" + "20d83120d9316a21da3120d93120da316a21db3120da3120db316a21dc3120db3120dc316a21dd3120dc3120dd316a" + "21de3120dd3120de316a21df3120de3120df316a21e03120df3120e0316a21e13120e03120e1316a21e23120e13120" + "e2316a21e33120e23120e3316a21e43120e33120e4316a21e53120e43120e5316a21e63120e53120e6316a21e73120" + "e63120e7316a21e83120e73120e8316a21e93120e83120e9316a21ea3120e93120ea316a21eb3120ea3120eb316a21" + "ec3120eb3120ec316a21ed3120ec3120ed316a21ee3120ed3120ee316a21ef3120ee3120ef316a21f03120ef3120f0" + "316a21f13120f03120f1316a21f23120f13120f2316a21f33120f23120f3316a21f43120f33120f4316a21f53120f4" + "3120f5316a21f63120f53120f6316a21f73120f63120f7316a21f83120f73120f8316a21f93120f83120f9316a21fa" + "3120f93120fa316a21fb3120fa3120fb316a21fc3120fb3120fc316a21fd3120fc3120fd316a21fe3120fd3120fe31" + "6a21ff3120fe3120ff316a21803220ff312080326a2181322080322081326a2182322081322082326a218332208232" + "2083326a2184322083322084326a2185322084322085326a2186322085322086326a2187322086322087326a218832" + "2087322088326a2189322088322089326a218a32208932208a326a218b32208a32208b326a218c32208b32208c326a" + "218d32208c32208d326a218e32208d32208e326a218f32208e32208f326a219032208f322090326a21913220903220" + "91326a2192322091322092326a2193322092322093326a2194322093322094326a2195322094322095326a21963220" + "95322096326a2197322096322097326a2198322097322098326a2199322098322099326a219a32209932209a326a21" + "9b32209a32209b326a219c32209b32209c326a219d32209c32209d326a219e32209d32209e326a219f32209e32209f" + "326a21a032209f3220a0326a21a13220a03220a1326a21a23220a13220a2326a21a33220a23220a3326a21a43220a3" + "3220a4326a21a53220a43220a5326a21a63220a53220a6326a21a73220a63220a7326a21a83220a73220a8326a21a9" + "3220a83220a9326a21aa3220a93220aa326a21ab3220aa3220ab326a21ac3220ab3220ac326a21ad3220ac3220ad32" + "6a21ae3220ad3220ae326a21af3220ae3220af326a21b03220af3220b0326a21b13220b03220b1326a21b23220b132" + "20b2326a21b33220b23220b3326a21b43220b33220b4326a21b53220b43220b5326a21b63220b53220b6326a21b732" + "20b63220b7326a21b83220b73220b8326a21b93220b83220b9326a21ba3220b93220ba326a21bb3220ba3220bb326a" + "21bc3220bb3220bc326a21bd3220bc3220bd326a21be3220bd3220be326a21bf3220be3220bf326a21c03220bf3220" + "c0326a21c13220c03220c1326a21c23220c13220c2326a21c33220c23220c3326a21c43220c33220c4326a21c53220" + "c43220c5326a21c63220c53220c6326a21c73220c63220c7326a21c83220c73220c8326a21c93220c83220c9326a21" + "ca3220c93220ca326a21cb3220ca3220cb326a21cc3220cb3220cc326a21cd3220cc3220cd326a21ce3220cd3220ce" + "326a21cf3220ce3220cf326a21d03220cf3220d0326a21d13220d03220d1326a21d23220d13220d2326a21d33220d2" + "3220d3326a21d43220d33220d4326a21d53220d43220d5326a21d63220d53220d6326a21d73220d63220d7326a21d8" + "3220d73220d8326a21d93220d83220d9326a21da3220d93220da326a21db3220da3220db326a21dc3220db3220dc32" + "6a21dd3220dc3220dd326a21de3220dd3220de326a21df3220de3220df326a21e03220df3220e0326a21e13220e032" + "20e1326a21e23220e13220e2326a21e33220e23220e3326a21e43220e33220e4326a21e53220e43220e5326a21e632" + "20e53220e6326a21e73220e63220e7326a21e83220e73220e8326a21e93220e83220e9326a21ea3220e93220ea326a" + "21eb3220ea3220eb326a21ec3220eb3220ec326a21ed3220ec3220ed326a21ee3220ed3220ee326a21ef3220ee3220" + "ef326a21f03220ef3220f0326a21f13220f03220f1326a21f23220f13220f2326a21f33220f23220f3326a21f43220" + "f33220f4326a21f53220f43220f5326a21f63220f53220f6326a21f73220f63220f7326a21f83220f73220f8326a21" + "f93220f83220f9326a21fa3220f93220fa326a21fb3220fa3220fb326a21fc3220fb3220fc326a21fd3220fc3220fd" + "326a21fe3220fd3220fe326a21ff3220fe3220ff326a21803320ff322080336a2181332080332081336a2182332081" + "332082336a2183332082332083336a2184332083332084336a2185332084332085336a2186332085332086336a2187" + "332086332087336a2188332087332088336a2189332088332089336a218a33208933208a336a218b33208a33208b33" + "6a218c33208b33208c336a218d33208c33208d336a218e33208d33208e336a218f33208e33208f336a219033208f33" + "2090336a2191332090332091336a2192332091332092336a2193332092332093336a2194332093332094336a219533" + "2094332095336a2196332095332096336a2197332096332097336a2198332097332098336a2199332098332099336a" + "219a33209933209a336a219b33209a33209b336a219c33209b33209c336a219d33209c33209d336a219e33209d3320" + "9e336a219f33209e33209f336a21a033209f3320a0336a21a13320a03320a1336a21a23320a13320a2336a21a33320" + "a23320a3336a21a43320a33320a4336a21a53320a43320a5336a21a63320a53320a6336a21a73320a63320a7336a21" + "a83320a73320a8336a21a93320a83320a9336a21aa3320a93320aa336a21ab3320aa3320ab336a21ac3320ab3320ac" + "336a21ad3320ac3320ad336a21ae3320ad3320ae336a21af3320ae3320af336a21b03320af3320b0336a21b13320b0" + "3320b1336a21b23320b13320b2336a21b33320b23320b3336a21b43320b33320b4336a21b53320b43320b5336a21b6" + "3320b53320b6336a21b73320b63320b7336a21b83320b73320b8336a21b93320b83320b9336a21ba3320b93320ba33" + "6a21bb3320ba3320bb336a21bc3320bb3320bc336a21bd3320bc3320bd336a21be3320bd3320be336a21bf3320be33" + "20bf336a21c03320bf3320c0336a21c13320c03320c1336a21c23320c13320c2336a21c33320c23320c3336a21c433" + "20c33320c4336a21c53320c43320c5336a21c63320c53320c6336a21c73320c63320c7336a21c83320c73320c8336a" + "21c93320c83320c9336a21ca3320c93320ca336a21cb3320ca3320cb336a21cc3320cb3320cc336a21cd3320cc3320" + "cd336a21ce3320cd3320ce336a21cf3320ce3320cf336a21d03320cf3320d0336a21d13320d03320d1336a21d23320" + "d13320d2336a21d33320d23320d3336a21d43320d33320d4336a21d53320d43320d5336a21d63320d53320d6336a21" + "d73320d63320d7336a21d83320d73320d8336a21d93320d83320d9336a21da3320d93320da336a21db3320da3320db" + "336a21dc3320db3320dc336a21dd3320dc3320dd336a21de3320dd3320de336a21df3320de3320df336a21e03320df" + "3320e0336a21e13320e03320e1336a21e23320e13320e2336a21e33320e23320e3336a21e43320e33320e4336a21e5" + "3320e43320e5336a21e63320e53320e6336a21e73320e63320e7336a21e83320e73320e8336a21e93320e83320e933" + "6a21ea3320e93320ea336a21eb3320ea3320eb336a21ec3320eb3320ec336a21ed3320ec3320ed336a21ee3320ed33" + "20ee336a21ef3320ee3320ef336a21f03320ef3320f0336a21f13320f03320f1336a21f23320f13320f2336a21f333" + "20f23320f3336a21f43320f33320f4336a21f53320f43320f5336a21f63320f53320f6336a21f73320f63320f7336a" + "21f83320f73320f8336a21f93320f83320f9336a21fa3320f93320fa336a21fb3320fa3320fb336a21fc3320fb3320" + "fc336a21fd3320fc3320fd336a21fe3320fd3320fe336a21ff3320fe3320ff336a21803420ff332080346a21813420" + "80342081346a2182342081342082346a2183342082342083346a2184342083342084346a2185342084342085346a21" + "86342085342086346a2187342086342087346a2188342087342088346a2189342088342089346a218a34208934208a" + "346a218b34208a34208b346a218c34208b34208c346a218d34208c34208d346a218e34208d34208e346a218f34208e" + "34208f346a219034208f342090346a2191342090342091346a2192342091342092346a2193342092342093346a2194" + "342093342094346a2195342094342095346a2196342095342096346a2197342096342097346a219834209734209834" + "6a2199342098342099346a219a34209934209a346a219b34209a34209b346a219c34209b34209c346a219d34209c34" + "209d346a219e34209d34209e346a219f34209e34209f346a21a034209f3420a0346a21a13420a03420a1346a21a234" + "20a13420a2346a21a33420a23420a3346a21a43420a33420a4346a21a53420a43420a5346a21a63420a53420a6346a" + "21a73420a63420a7346a21a83420a73420a8346a21a93420a83420a9346a21aa3420a93420aa346a21ab3420aa3420" + "ab346a21ac3420ab3420ac346a21ad3420ac3420ad346a21ae3420ad3420ae346a21af3420ae3420af346a21b03420" + "af3420b0346a21b13420b03420b1346a21b23420b13420b2346a21b33420b23420b3346a21b43420b33420b4346a21" + "b53420b43420b5346a21b63420b53420b6346a21b73420b63420b7346a21b83420b73420b8346a21b93420b83420b9" + "346a21ba3420b93420ba346a21bb3420ba3420bb346a21bc3420bb3420bc346a21bd3420bc3420bd346a21be3420bd" + "3420be346a21bf3420be3420bf346a21c03420bf3420c0346a21c13420c03420c1346a21c23420c13420c2346a21c3" + "3420c23420c3346a21c43420c33420c4346a21c53420c43420c5346a21c63420c53420c6346a21c73420c63420c734" + "6a21c83420c73420c8346a21c93420c83420c9346a21ca3420c93420ca346a21cb3420ca3420cb346a21cc3420cb34" + "20cc346a21cd3420cc3420cd346a21ce3420cd3420ce346a21cf3420ce3420cf346a21d03420cf3420d0346a21d134" + "20d03420d1346a21d23420d13420d2346a21d33420d23420d3346a21d43420d33420d4346a21d53420d43420d5346a" + "21d63420d53420d6346a21d73420d63420d7346a21d83420d73420d8346a21d93420d83420d9346a21da3420d93420" + "da346a21db3420da3420db346a21dc3420db3420dc346a21dd3420dc3420dd346a21de3420dd3420de346a21df3420" + "de3420df346a21e03420df3420e0346a21e13420e03420e1346a21e23420e13420e2346a21e33420e23420e3346a21" + "e43420e33420e4346a21e53420e43420e5346a21e63420e53420e6346a21e73420e63420e7346a21e83420e73420e8" + "346a21e93420e83420e9346a21ea3420e93420ea346a21eb3420ea3420eb346a21ec3420eb3420ec346a21ed3420ec" + "3420ed346a21ee3420ed3420ee346a21ef3420ee3420ef346a21f03420ef3420f0346a21f13420f03420f1346a21f2" + "3420f13420f2346a21f33420f23420f3346a21f43420f33420f4346a21f53420f43420f5346a21f63420f53420f634" + "6a21f73420f63420f7346a21f83420f73420f8346a21f93420f83420f9346a21fa3420f93420fa346a21fb3420fa34" + "20fb346a21fc3420fb3420fc346a21fd3420fc3420fd346a21fe3420fd3420fe346a21ff3420fe3420ff346a218035" + "20ff342080356a2181352080352081356a2182352081352082356a2183352082352083356a2184352083352084356a" + "2185352084352085356a2186352085352086356a2187352086352087356a2188352087352088356a21893520883520" + "89356a218a35208935208a356a218b35208a35208b356a218c35208b35208c356a218d35208c35208d356a218e3520" + "8d35208e356a218f35208e35208f356a219035208f352090356a2191352090352091356a2192352091352092356a21" + "93352092352093356a2194352093352094356a2195352094352095356a2196352095352096356a2197352096352097" + "356a2198352097352098356a2199352098352099356a219a35209935209a356a219b35209a35209b356a219c35209b" + "35209c356a219d35209c35209d356a219e35209d35209e356a219f35209e35209f356a21a035209f3520a0356a21a1" + "3520a03520a1356a21a23520a13520a2356a21a33520a23520a3356a21a43520a33520a4356a21a53520a43520a535" + "6a21a63520a53520a6356a21a73520a63520a7356a21a83520a73520a8356a21a93520a83520a9356a21aa3520a935" + "20aa356a21ab3520aa3520ab356a21ac3520ab3520ac356a21ad3520ac3520ad356a21ae3520ad3520ae356a21af35" + "20ae3520af356a21b03520af3520b0356a21b13520b03520b1356a21b23520b13520b2356a21b33520b23520b3356a" + "21b43520b33520b4356a21b53520b43520b5356a21b63520b53520b6356a21b73520b63520b7356a21b83520b73520" + "b8356a21b93520b83520b9356a21ba3520b93520ba356a21bb3520ba3520bb356a21bc3520bb3520bc356a21bd3520" + "bc3520bd356a21be3520bd3520be356a21bf3520be3520bf356a21c03520bf3520c0356a21c13520c03520c1356a21" + "c23520c13520c2356a21c33520c23520c3356a21c43520c33520c4356a21c53520c43520c5356a21c63520c53520c6" + "356a21c73520c63520c7356a21c83520c73520c8356a21c93520c83520c9356a21ca3520c93520ca356a21cb3520ca" + "3520cb356a21cc3520cb3520cc356a21cd3520cc3520cd356a21ce3520cd3520ce356a21cf3520ce3520cf356a21d0" + "3520cf3520d0356a21d13520d03520d1356a21d23520d13520d2356a21d33520d23520d3356a21d43520d33520d435" + "6a21d53520d43520d5356a21d63520d53520d6356a21d73520d63520d7356a21d83520d73520d8356a21d93520d835" + "20d9356a21da3520d93520da356a21db3520da3520db356a21dc3520db3520dc356a21dd3520dc3520dd356a21de35" + "20dd3520de356a21df3520de3520df356a21e03520df3520e0356a21e13520e03520e1356a21e23520e13520e2356a" + "21e33520e23520e3356a21e43520e33520e4356a21e53520e43520e5356a21e63520e53520e6356a21e73520e63520" + "e7356a21e83520e73520e8356a21e93520e83520e9356a21ea3520e93520ea356a21eb3520ea3520eb356a21ec3520" + "eb3520ec356a21ed3520ec3520ed356a21ee3520ed3520ee356a21ef3520ee3520ef356a21f03520ef3520f0356a21" + "f13520f03520f1356a21f23520f13520f2356a21f33520f23520f3356a21f43520f33520f4356a21f53520f43520f5" + "356a21f63520f53520f6356a21f73520f63520f7356a21f83520f73520f8356a21f93520f83520f9356a21fa3520f9" + "3520fa356a21fb3520fa3520fb356a21fc3520fb3520fc356a21fd3520fc3520fd356a21fe3520fd3520fe356a21ff" + "3520fe3520ff356a21803620ff352080366a2181362080362081366a2182362081362082366a218336208236208336" + "6a2184362083362084366a2185362084362085366a2186362085362086366a2187362086362087366a218836208736" + "2088366a2189362088362089366a218a36208936208a366a218b36208a36208b366a218c36208b36208c366a218d36" + "208c36208d366a218e36208d36208e366a218f36208e36208f366a219036208f362090366a2191362090362091366a" + "2192362091362092366a2193362092362093366a2194362093362094366a2195362094362095366a21963620953620" + "96366a2197362096362097366a2198362097362098366a2199362098362099366a219a36209936209a366a219b3620" + "9a36209b366a219c36209b36209c366a219d36209c36209d366a219e36209d36209e366a219f36209e36209f366a21" + "a036209f3620a0366a21a13620a03620a1366a21a23620a13620a2366a21a33620a23620a3366a21a43620a33620a4" + "366a21a53620a43620a5366a21a63620a53620a6366a21a73620a63620a7366a21a83620a73620a8366a21a93620a8" + "3620a9366a21aa3620a93620aa366a21ab3620aa3620ab366a21ac3620ab3620ac366a21ad3620ac3620ad366a21ae" + "3620ad3620ae366a21af3620ae3620af366a21b03620af3620b0366a21b13620b03620b1366a21b23620b13620b236" + "6a21b33620b23620b3366a21b43620b33620b4366a21b53620b43620b5366a21b63620b53620b6366a21b73620b636" + "20b7366a21b83620b73620b8366a21b93620b83620b9366a21ba3620b93620ba366a21bb3620ba3620bb366a21bc36" + "20bb3620bc366a21bd3620bc3620bd366a21be3620bd3620be366a21bf3620be3620bf366a21c03620bf3620c0366a" + "21c13620c03620c1366a21c23620c13620c2366a21c33620c23620c3366a21c43620c33620c4366a21c53620c43620" + "c5366a21c63620c53620c6366a21c73620c63620c7366a21c83620c73620c8366a21c93620c83620c9366a21ca3620" + "c93620ca366a21cb3620ca3620cb366a21cc3620cb3620cc366a21cd3620cc3620cd366a21ce3620cd3620ce366a21" + "cf3620ce3620cf366a21d03620cf3620d0366a21d13620d03620d1366a21d23620d13620d2366a21d33620d23620d3" + "366a21d43620d33620d4366a21d53620d43620d5366a21d63620d53620d6366a21d73620d63620d7366a21d83620d7" + "3620d8366a21d93620d83620d9366a21da3620d93620da366a21db3620da3620db366a21dc3620db3620dc366a21dd" + "3620dc3620dd366a21de3620dd3620de366a21df3620de3620df366a21e03620df3620e0366a21e13620e03620e136" + "6a21e23620e13620e2366a21e33620e23620e3366a21e43620e33620e4366a21e53620e43620e5366a21e63620e536" + "20e6366a21e73620e63620e7366a21e83620e73620e8366a21e93620e83620e9366a21ea3620e93620ea366a21eb36" + "20ea3620eb366a21ec3620eb3620ec366a21ed3620ec3620ed366a21ee3620ed3620ee366a21ef3620ee3620ef366a" + "21f03620ef3620f0366a21f13620f03620f1366a21f23620f13620f2366a21f33620f23620f3366a21f43620f33620" + "f4366a21f53620f43620f5366a21f63620f53620f6366a21f73620f63620f7366a21f83620f73620f8366a21f93620" + "f83620f9366a21fa3620f93620fa366a21fb3620fa3620fb366a21fc3620fb3620fc366a21fd3620fc3620fd366a21" + "fe3620fd3620fe366a21ff3620fe3620ff366a21803720ff362080376a2181372080372081376a2182372081372082" + "376a2183372082372083376a2184372083372084376a2185372084372085376a2186372085372086376a2187372086" + "372087376a2188372087372088376a2189372088372089376a218a37208937208a376a218b37208a37208b376a218c" + "37208b37208c376a218d37208c37208d376a218e37208d37208e376a218f37208e37208f376a219037208f37209037" + "6a2191372090372091376a2192372091372092376a2193372092372093376a2194372093372094376a219537209437" + "2095376a2196372095372096376a2197372096372097376a2198372097372098376a2199372098372099376a219a37" + "209937209a376a219b37209a37209b376a219c37209b37209c376a219d37209c37209d376a219e37209d37209e376a" + "219f37209e37209f376a21a037209f3720a0376a21a13720a03720a1376a21a23720a13720a2376a21a33720a23720" + "a3376a21a43720a33720a4376a21a53720a43720a5376a21a63720a53720a6376a21a73720a63720a7376a21a83720" + "a73720a8376a21a93720a83720a9376a21aa3720a93720aa376a21ab3720aa3720ab376a21ac3720ab3720ac376a21" + "ad3720ac3720ad376a21ae3720ad3720ae376a21af3720ae3720af376a21b03720af3720b0376a21b13720b03720b1" + "376a21b23720b13720b2376a21b33720b23720b3376a21b43720b33720b4376a21b53720b43720b5376a21b63720b5" + "3720b6376a21b73720b63720b7376a21b83720b73720b8376a21b93720b83720b9376a21ba3720b93720ba376a21bb" + "3720ba3720bb376a21bc3720bb3720bc376a21bd3720bc3720bd376a21be3720bd3720be376a21bf3720be3720bf37" + "6a21c03720bf3720c0376a21c13720c03720c1376a21c23720c13720c2376a21c33720c23720c3376a21c43720c337" + "20c4376a21c53720c43720c5376a21c63720c53720c6376a21c73720c63720c7376a21c83720c73720c8376a21c937" + "20c83720c9376a21ca3720c93720ca376a21cb3720ca3720cb376a21cc3720cb3720cc376a21cd3720cc3720cd376a" + "21ce3720cd3720ce376a21cf3720ce3720cf376a21d03720cf3720d0376a21d13720d03720d1376a21d23720d13720" + "d2376a21d33720d23720d3376a21d43720d33720d4376a21d53720d43720d5376a21d63720d53720d6376a21d73720" + "d63720d7376a21d83720d73720d8376a21d93720d83720d9376a21da3720d93720da376a21db3720da3720db376a21" + "dc3720db3720dc376a21dd3720dc3720dd376a21de3720dd3720de376a21df3720de3720df376a21e03720df3720e0" + "376a21e13720e03720e1376a21e23720e13720e2376a21e33720e23720e3376a21e43720e33720e4376a21e53720e4" + "3720e5376a21e63720e53720e6376a21e73720e63720e7376a21e83720e73720e8376a21e93720e83720e9376a21ea" + "3720e93720ea376a21eb3720ea3720eb376a21ec3720eb3720ec376a21ed3720ec3720ed376a21ee3720ed3720ee37" + "6a21ef3720ee3720ef376a21f03720ef3720f0376a21f13720f03720f1376a21f23720f13720f2376a21f33720f237" + "20f3376a21f43720f33720f4376a21f53720f43720f5376a21f63720f53720f6376a21f73720f63720f7376a21f837" + "20f73720f8376a21f93720f83720f9376a21fa3720f93720fa376a21fb3720fa3720fb376a21fc3720fb3720fc376a" + "21fd3720fc3720fd376a21fe3720fd3720fe376a21ff3720fe3720ff376a21803820ff372080386a21813820803820" + "81386a2182382081382082386a2183382082382083386a2184382083382084386a2185382084382085386a21863820" + "85382086386a2187382086382087386a2188382087382088386a2189382088382089386a218a38208938208a386a21" + "8b38208a38208b386a218c38208b38208c386a218d38208c38208d386a218e38208d38208e386a218f38208e38208f" + "386a219038208f382090386a2191382090382091386a2192382091382092386a2193382092382093386a2194382093" + "382094386a2195382094382095386a2196382095382096386a2197382096382097386a2198382097382098386a2199" + "382098382099386a219a38209938209a386a219b38209a38209b386a219c38209b38209c386a219d38209c38209d38" + "6a219e38209d38209e386a219f38209e38209f386a21a038209f3820a0386a21a13820a03820a1386a21a23820a138" + "20a2386a21a33820a23820a3386a21a43820a33820a4386a21a53820a43820a5386a21a63820a53820a6386a21a738" + "20a63820a7386a21a83820a73820a8386a21a93820a83820a9386a21aa3820a93820aa386a21ab3820aa3820ab386a" + "21ac3820ab3820ac386a21ad3820ac3820ad386a21ae3820ad3820ae386a21af3820ae3820af386a21b03820af3820" + "b0386a21b13820b03820b1386a21b23820b13820b2386a21b33820b23820b3386a21b43820b33820b4386a21b53820" + "b43820b5386a21b63820b53820b6386a21b73820b63820b7386a21b83820b73820b8386a21b93820b83820b9386a21" + "ba3820b93820ba386a21bb3820ba3820bb386a21bc3820bb3820bc386a21bd3820bc3820bd386a21be3820bd3820be" + "386a21bf3820be3820bf386a21c03820bf3820c0386a21c13820c03820c1386a21c23820c13820c2386a21c33820c2" + "3820c3386a21c43820c33820c4386a21c53820c43820c5386a21c63820c53820c6386a21c73820c63820c7386a21c8" + "3820c73820c8386a21c93820c83820c9386a21ca3820c93820ca386a21cb3820ca3820cb386a21cc3820cb3820cc38" + "6a21cd3820cc3820cd386a21ce3820cd3820ce386a21cf3820ce3820cf386a21d03820cf3820d0386a21d13820d038" + "20d1386a21d23820d13820d2386a21d33820d23820d3386a21d43820d33820d4386a21d53820d43820d5386a21d638" + "20d53820d6386a21d73820d63820d7386a21d83820d73820d8386a21d93820d83820d9386a21da3820d93820da386a" + "21db3820da3820db386a21dc3820db3820dc386a21dd3820dc3820dd386a21de3820dd3820de386a21df3820de3820" + "df386a21e03820df3820e0386a21e13820e03820e1386a21e23820e13820e2386a21e33820e23820e3386a21e43820" + "e33820e4386a21e53820e43820e5386a21e63820e53820e6386a21e73820e63820e7386a21e83820e73820e8386a21" + "e93820e83820e9386a21ea3820e93820ea386a21eb3820ea3820eb386a21ec3820eb3820ec386a21ed3820ec3820ed" + "386a21ee3820ed3820ee386a21ef3820ee3820ef386a21f03820ef3820f0386a21f13820f03820f1386a21f23820f1" + "3820f2386a21f33820f23820f3386a21f43820f33820f4386a21f53820f43820f5386a21f63820f53820f6386a21f7" + "3820f63820f7386a21f83820f73820f8386a21f93820f83820f9386a21fa3820f93820fa386a21fb3820fa3820fb38" + "6a21fc3820fb3820fc386a21fd3820fc3820fd386a21fe3820fd3820fe386a21ff3820fe3820ff386a21803920ff38" + "2080396a2181392080392081396a2182392081392082396a2183392082392083396a2184392083392084396a218539" + "2084392085396a2186392085392086396a2187392086392087396a2188392087392088396a2189392088392089396a" + "218a39208939208a396a218b39208a39208b396a218c39208b39208c396a218d39208c39208d396a218e39208d3920" + "8e396a218f39208e39208f396a219039208f392090396a2191392090392091396a2192392091392092396a21933920" + "92392093396a2194392093392094396a2195392094392095396a2196392095392096396a2197392096392097396a21" + "98392097392098396a2199392098392099396a219a39209939209a396a219b39209a39209b396a219c39209b39209c" + "396a219d39209c39209d396a219e39209d39209e396a219f39209e39209f396a21a039209f3920a0396a21a13920a0" + "3920a1396a21a23920a13920a2396a21a33920a23920a3396a21a43920a33920a4396a21a53920a43920a5396a21a6" + "3920a53920a6396a21a73920a63920a7396a21a83920a73920a8396a21a93920a83920a9396a21aa3920a93920aa39" + "6a21ab3920aa3920ab396a21ac3920ab3920ac396a21ad3920ac3920ad396a21ae3920ad3920ae396a21af3920ae39" + "20af396a21b03920af3920b0396a21b13920b03920b1396a21b23920b13920b2396a21b33920b23920b3396a21b439" + "20b33920b4396a21b53920b43920b5396a21b63920b53920b6396a21b73920b63920b7396a21b83920b73920b8396a" + "21b93920b83920b9396a21ba3920b93920ba396a21bb3920ba3920bb396a21bc3920bb3920bc396a21bd3920bc3920" + "bd396a21be3920bd3920be396a21bf3920be3920bf396a21c03920bf3920c0396a21c13920c03920c1396a21c23920" + "c13920c2396a21c33920c23920c3396a21c43920c33920c4396a21c53920c43920c5396a21c63920c53920c6396a21" + "c73920c63920c7396a21c83920c73920c8396a21c93920c83920c9396a21ca3920c93920ca396a21cb3920ca3920cb" + "396a21cc3920cb3920cc396a21cd3920cc3920cd396a21ce3920cd3920ce396a21cf3920ce3920cf396a21d03920cf" + "3920d0396a21d13920d03920d1396a21d23920d13920d2396a21d33920d23920d3396a21d43920d33920d4396a21d5" + "3920d43920d5396a21d63920d53920d6396a21d73920d63920d7396a21d83920d73920d8396a21d93920d83920d939" + "6a21da3920d93920da396a21db3920da3920db396a21dc3920db3920dc396a21dd3920dc3920dd396a21de3920dd39" + "20de396a21df3920de3920df396a21e03920df3920e0396a21e13920e03920e1396a21e23920e13920e2396a21e339" + "20e23920e3396a21e43920e33920e4396a21e53920e43920e5396a21e63920e53920e6396a21e73920e63920e7396a" + "21e83920e73920e8396a21e93920e83920e9396a21ea3920e93920ea396a21eb3920ea3920eb396a21ec3920eb3920" + "ec396a21ed3920ec3920ed396a21ee3920ed3920ee396a21ef3920ee3920ef396a21f03920ef3920f0396a21f13920" + "f03920f1396a21f23920f13920f2396a21f33920f23920f3396a21f43920f33920f4396a21f53920f43920f5396a21" + "f63920f53920f6396a21f73920f63920f7396a21f83920f73920f8396a21f93920f83920f9396a21fa3920f93920fa" + "396a21fb3920fa3920fb396a21fc3920fb3920fc396a21fd3920fc3920fd396a21fe3920fd3920fe396a21ff3920fe" + "3920ff396a21803a20ff3920803a6a21813a20803a20813a6a21823a20813a20823a6a21833a20823a20833a6a2184" + "3a20833a20843a6a21853a20843a20853a6a21863a20853a20863a6a21873a20863a20873a6a21883a20873a20883a" + "6a21893a20883a20893a6a218a3a20893a208a3a6a218b3a208a3a208b3a6a218c3a208b3a208c3a6a218d3a208c3a" + "208d3a6a218e3a208d3a208e3a6a218f3a208e3a208f3a6a21903a208f3a20903a6a21913a20903a20913a6a21923a" + "20913a20923a6a21933a20923a20933a6a21943a20933a20943a6a21953a20943a20953a6a21963a20953a20963a6a" + "21973a20963a20973a6a21983a20973a20983a6a21993a20983a20993a6a219a3a20993a209a3a6a219b3a209a3a20" + "9b3a6a219c3a209b3a209c3a6a219d3a209c3a209d3a6a219e3a209d3a209e3a6a219f3a209e3a209f3a6a21a03a20" + "9f3a20a03a6a21a13a20a03a20a13a6a21a23a20a13a20a23a6a21a33a20a23a20a33a6a21a43a20a33a20a43a6a21" + "a53a20a43a20a53a6a21a63a20a53a20a63a6a21a73a20a63a20a73a6a21a83a20a73a20a83a6a21a93a20a83a20a9" + "3a6a21aa3a20a93a20aa3a6a21ab3a20aa3a20ab3a6a21ac3a20ab3a20ac3a6a21ad3a20ac3a20ad3a6a21ae3a20ad" + "3a20ae3a6a21af3a20ae3a20af3a6a21b03a20af3a20b03a6a21b13a20b03a20b13a6a21b23a20b13a20b23a6a21b3" + "3a20b23a20b33a6a21b43a20b33a20b43a6a21b53a20b43a20b53a6a21b63a20b53a20b63a6a21b73a20b63a20b73a" + "6a21b83a20b73a20b83a6a21b93a20b83a20b93a6a21ba3a20b93a20ba3a6a21bb3a20ba3a20bb3a6a21bc3a20bb3a" + "20bc3a6a21bd3a20bc3a20bd3a6a21be3a20bd3a20be3a6a21bf3a20be3a20bf3a6a21c03a20bf3a20c03a6a21c13a" + "20c03a20c13a6a21c23a20c13a20c23a6a21c33a20c23a20c33a6a21c43a20c33a20c43a6a21c53a20c43a20c53a6a" + "21c63a20c53a20c63a6a21c73a20c63a20c73a6a21c83a20c73a20c83a6a21c93a20c83a20c93a6a21ca3a20c93a20" + "ca3a6a21cb3a20ca3a20cb3a6a21cc3a20cb3a20cc3a6a21cd3a20cc3a20cd3a6a21ce3a20cd3a20ce3a6a21cf3a20" + "ce3a20cf3a6a21d03a20cf3a20d03a6a21d13a20d03a20d13a6a21d23a20d13a20d23a6a21d33a20d23a20d33a6a21" + "d43a20d33a20d43a6a21d53a20d43a20d53a6a21d63a20d53a20d63a6a21d73a20d63a20d73a6a21d83a20d73a20d8" + "3a6a21d93a20d83a20d93a6a21da3a20d93a20da3a6a21db3a20da3a20db3a6a21dc3a20db3a20dc3a6a21dd3a20dc" + "3a20dd3a6a21de3a20dd3a20de3a6a21df3a20de3a20df3a6a21e03a20df3a20e03a6a21e13a20e03a20e13a6a21e2" + "3a20e13a20e23a6a21e33a20e23a20e33a6a21e43a20e33a20e43a6a21e53a20e43a20e53a6a21e63a20e53a20e63a" + "6a21e73a20e63a20e73a6a21e83a20e73a20e83a6a21e93a20e83a20e93a6a21ea3a20e93a20ea3a6a21eb3a20ea3a" + "20eb3a6a21ec3a20eb3a20ec3a6a21ed3a20ec3a20ed3a6a21ee3a20ed3a20ee3a6a21ef3a20ee3a20ef3a6a21f03a" + "20ef3a20f03a6a21f13a20f03a20f13a6a21f23a20f13a20f23a6a21f33a20f23a20f33a6a21f43a20f33a20f43a6a" + "21f53a20f43a20f53a6a21f63a20f53a20f63a6a21f73a20f63a20f73a6a21f83a20f73a20f83a6a21f93a20f83a20" + "f93a6a21fa3a20f93a20fa3a6a21fb3a20fa3a20fb3a6a21fc3a20fb3a20fc3a6a21fd3a20fc3a20fd3a6a21fe3a20" + "fd3a20fe3a6a21ff3a20fe3a20ff3a6a21803b20ff3a20803b6a21813b20803b20813b6a21823b20813b20823b6a21" + "833b20823b20833b6a21843b20833b20843b6a21853b20843b20853b6a21863b20853b20863b6a21873b20863b2087" + "3b6a21883b20873b20883b6a21893b20883b20893b6a218a3b20893b208a3b6a218b3b208a3b208b3b6a218c3b208b" + "3b208c3b6a218d3b208c3b208d3b6a218e3b208d3b208e3b6a218f3b208e3b208f3b6a21903b208f3b20903b6a2191" + "3b20903b20913b6a21923b20913b20923b6a21933b20923b20933b6a21943b20933b20943b6a21953b20943b20953b" + "6a21963b20953b20963b6a21973b20963b20973b6a21983b20973b20983b6a21993b20983b20993b6a219a3b20993b" + "209a3b6a219b3b209a3b209b3b6a219c3b209b3b209c3b6a219d3b209c3b209d3b6a219e3b209d3b209e3b6a219f3b" + "209e3b209f3b6a21a03b209f3b20a03b6a21a13b20a03b20a13b6a21a23b20a13b20a23b6a21a33b20a23b20a33b6a" + "21a43b20a33b20a43b6a21a53b20a43b20a53b6a21a63b20a53b20a63b6a21a73b20a63b20a73b6a21a83b20a73b20" + "a83b6a21a93b20a83b20a93b6a21aa3b20a93b20aa3b6a21ab3b20aa3b20ab3b6a21ac3b20ab3b20ac3b6a21ad3b20" + "ac3b20ad3b6a21ae3b20ad3b20ae3b6a21af3b20ae3b20af3b6a21b03b20af3b20b03b6a21b13b20b03b20b13b6a21" + "b23b20b13b20b23b6a21b33b20b23b20b33b6a21b43b20b33b20b43b6a21b53b20b43b20b53b6a21b63b20b53b20b6" + "3b6a21b73b20b63b20b73b6a21b83b20b73b20b83b6a21b93b20b83b20b93b6a21ba3b20b93b20ba3b6a21bb3b20ba" + "3b20bb3b6a21bc3b20bb3b20bc3b6a21bd3b20bc3b20bd3b6a21be3b20bd3b20be3b6a21bf3b20be3b20bf3b6a21c0" + "3b20bf3b20c03b6a21c13b20c03b20c13b6a21c23b20c13b20c23b6a21c33b20c23b20c33b6a21c43b20c33b20c43b" + "6a21c53b20c43b20c53b6a21c63b20c53b20c63b6a21c73b20c63b20c73b6a21c83b20c73b20c83b6a21c93b20c83b" + "20c93b6a21ca3b20c93b20ca3b6a21cb3b20ca3b20cb3b6a21cc3b20cb3b20cc3b6a21cd3b20cc3b20cd3b6a21ce3b" + "20cd3b20ce3b6a21cf3b20ce3b20cf3b6a21d03b20cf3b20d03b6a21d13b20d03b20d13b6a21d23b20d13b20d23b6a" + "21d33b20d23b20d33b6a21d43b20d33b20d43b6a21d53b20d43b20d53b6a21d63b20d53b20d63b6a21d73b20d63b20" + "d73b6a21d83b20d73b20d83b6a21d93b20d83b20d93b6a21da3b20d93b20da3b6a21db3b20da3b20db3b6a21dc3b20" + "db3b20dc3b6a21dd3b20dc3b20dd3b6a21de3b20dd3b20de3b6a21df3b20de3b20df3b6a21e03b20df3b20e03b6a21" + "e13b20e03b20e13b6a21e23b20e13b20e23b6a21e33b20e23b20e33b6a21e43b20e33b20e43b6a21e53b20e43b20e5" + "3b6a21e63b20e53b20e63b6a21e73b20e63b20e73b6a21e83b20e73b20e83b6a21e93b20e83b20e93b6a21ea3b20e9" + "3b20ea3b6a21eb3b20ea3b20eb3b6a21ec3b20eb3b20ec3b6a21ed3b20ec3b20ed3b6a21ee3b20ed3b20ee3b6a21ef" + "3b20ee3b20ef3b6a21f03b20ef3b20f03b6a21f13b20f03b20f13b6a21f23b20f13b20f23b6a21f33b20f23b20f33b" + "6a21f43b20f33b20f43b6a21f53b20f43b20f53b6a21f63b20f53b20f63b6a21f73b20f63b20f73b6a21f83b20f73b" + "20f83b6a21f93b20f83b20f93b6a21fa3b20f93b20fa3b6a21fb3b20fa3b20fb3b6a21fc3b20fb3b20fc3b6a21fd3b" + "20fc3b20fd3b6a21fe3b20fd3b20fe3b6a21ff3b20fe3b20ff3b6a21803c20ff3b20803c6a21813c20803c20813c6a" + "21823c20813c20823c6a21833c20823c20833c6a21843c20833c20843c6a21853c20843c20853c6a21863c20853c20" + "863c6a21873c20863c20873c6a21883c20873c20883c6a21893c20883c20893c6a218a3c20893c208a3c6a218b3c20" + "8a3c208b3c6a218c3c208b3c208c3c6a218d3c208c3c208d3c6a218e3c208d3c208e3c6a218f3c208e3c208f3c6a21" + "903c208f3c20903c6a21913c20903c20913c6a21923c20913c20923c6a21933c20923c20933c6a21943c20933c2094" + "3c6a21953c20943c20953c6a21963c20953c20963c6a21973c20963c20973c6a21983c20973c20983c6a21993c2098" + "3c20993c6a219a3c20993c209a3c6a219b3c209a3c209b3c6a219c3c209b3c209c3c6a219d3c209c3c209d3c6a219e" + "3c209d3c209e3c6a219f3c209e3c209f3c6a21a03c209f3c20a03c6a21a13c20a03c20a13c6a21a23c20a13c20a23c" + "6a21a33c20a23c20a33c6a21a43c20a33c20a43c6a21a53c20a43c20a53c6a21a63c20a53c20a63c6a21a73c20a63c" + "20a73c6a21a83c20a73c20a83c6a21a93c20a83c20a93c6a21aa3c20a93c20aa3c6a21ab3c20aa3c20ab3c6a21ac3c" + "20ab3c20ac3c6a21ad3c20ac3c20ad3c6a21ae3c20ad3c20ae3c6a21af3c20ae3c20af3c6a21b03c20af3c20b03c6a" + "21b13c20b03c20b13c6a21b23c20b13c20b23c6a21b33c20b23c20b33c6a21b43c20b33c20b43c6a21b53c20b43c20" + "b53c6a21b63c20b53c20b63c6a21b73c20b63c20b73c6a21b83c20b73c20b83c6a21b93c20b83c20b93c6a21ba3c20" + "b93c20ba3c6a21bb3c20ba3c20bb3c6a21bc3c20bb3c20bc3c6a21bd3c20bc3c20bd3c6a21be3c20bd3c20be3c6a21" + "bf3c20be3c20bf3c6a21c03c20bf3c20c03c6a21c13c20c03c20c13c6a21c23c20c13c20c23c6a21c33c20c23c20c3" + "3c6a21c43c20c33c20c43c6a21c53c20c43c20c53c6a21c63c20c53c20c63c6a21c73c20c63c20c73c6a21c83c20c7" + "3c20c83c6a21c93c20c83c20c93c6a21ca3c20c93c20ca3c6a21cb3c20ca3c20cb3c6a21cc3c20cb3c20cc3c6a21cd" + "3c20cc3c20cd3c6a21ce3c20cd3c20ce3c6a21cf3c20ce3c20cf3c6a21d03c20cf3c20d03c6a21d13c20d03c20d13c" + "6a21d23c20d13c20d23c6a21d33c20d23c20d33c6a21d43c20d33c20d43c6a21d53c20d43c20d53c6a21d63c20d53c" + "20d63c6a21d73c20d63c20d73c6a21d83c20d73c20d83c6a21d93c20d83c20d93c6a21da3c20d93c20da3c6a21db3c" + "20da3c20db3c6a21dc3c20db3c20dc3c6a21dd3c20dc3c20dd3c6a21de3c20dd3c20de3c6a21df3c20de3c20df3c6a" + "21e03c20df3c20e03c6a21e13c20e03c20e13c6a21e23c20e13c20e23c6a21e33c20e23c20e33c6a21e43c20e33c20" + "e43c6a21e53c20e43c20e53c6a21e63c20e53c20e63c6a21e73c20e63c20e73c6a21e83c20e73c20e83c6a21e93c20" + "e83c20e93c6a21ea3c20e93c20ea3c6a21eb3c20ea3c20eb3c6a21ec3c20eb3c20ec3c6a21ed3c20ec3c20ed3c6a21" + "ee3c20ed3c20ee3c6a21ef3c20ee3c20ef3c6a21f03c20ef3c20f03c6a21f13c20f03c20f13c6a21f23c20f13c20f2" + "3c6a21f33c20f23c20f33c6a21f43c20f33c20f43c6a21f53c20f43c20f53c6a21f63c20f53c20f63c6a21f73c20f6" + "3c20f73c6a21f83c20f73c20f83c6a21f93c20f83c20f93c6a21fa3c20f93c20fa3c6a21fb3c20fa3c20fb3c6a21fc" + "3c20fb3c20fc3c6a21fd3c20fc3c20fd3c6a21fe3c20fd3c20fe3c6a21ff3c20fe3c20ff3c6a21803d20ff3c20803d" + "6a21813d20803d20813d6a21823d20813d20823d6a21833d20823d20833d6a21843d20833d20843d6a21853d20843d" + "20853d6a21863d20853d20863d6a21873d20863d20873d6a21883d20873d20883d6a21893d20883d20893d6a218a3d" + "20893d208a3d6a218b3d208a3d208b3d6a218c3d208b3d208c3d6a218d3d208c3d208d3d6a218e3d208d3d208e3d6a" + "218f3d208e3d208f3d6a21903d208f3d20903d6a21913d20903d20913d6a21923d20913d20923d6a21933d20923d20" + "933d6a21943d20933d20943d6a21953d20943d20953d6a21963d20953d20963d6a21973d20963d20973d6a21983d20" + "973d20983d6a21993d20983d20993d6a219a3d20993d209a3d6a219b3d209a3d209b3d6a219c3d209b3d209c3d6a21" + "9d3d209c3d209d3d6a219e3d209d3d209e3d6a219f3d209e3d209f3d6a21a03d209f3d20a03d6a21a13d20a03d20a1" + "3d6a21a23d20a13d20a23d6a21a33d20a23d20a33d6a21a43d20a33d20a43d6a21a53d20a43d20a53d6a21a63d20a5" + "3d20a63d6a21a73d20a63d20a73d6a21a83d20a73d20a83d6a21a93d20a83d20a93d6a21aa3d20a93d20aa3d6a21ab" + "3d20aa3d20ab3d6a21ac3d20ab3d20ac3d6a21ad3d20ac3d20ad3d6a21ae3d20ad3d20ae3d6a21af3d20ae3d20af3d" + "6a21b03d20af3d20b03d6a21b13d20b03d20b13d6a21b23d20b13d20b23d6a21b33d20b23d20b33d6a21b43d20b33d" + "20b43d6a21b53d20b43d20b53d6a21b63d20b53d20b63d6a21b73d20b63d20b73d6a21b83d20b73d20b83d6a21b93d" + "20b83d20b93d6a21ba3d20b93d20ba3d6a21bb3d20ba3d20bb3d6a21bc3d20bb3d20bc3d6a21bd3d20bc3d20bd3d6a" + "21be3d20bd3d20be3d6a21bf3d20be3d20bf3d6a21c03d20bf3d20c03d6a21c13d20c03d20c13d6a21c23d20c13d20" + "c23d6a21c33d20c23d20c33d6a21c43d20c33d20c43d6a21c53d20c43d20c53d6a21c63d20c53d20c63d6a21c73d20" + "c63d20c73d6a21c83d20c73d20c83d6a21c93d20c83d20c93d6a21ca3d20c93d20ca3d6a21cb3d20ca3d20cb3d6a21" + "cc3d20cb3d20cc3d6a21cd3d20cc3d20cd3d6a21ce3d20cd3d20ce3d6a21cf3d20ce3d20cf3d6a21d03d20cf3d20d0" + "3d6a21d13d20d03d20d13d6a21d23d20d13d20d23d6a21d33d20d23d20d33d6a21d43d20d33d20d43d6a21d53d20d4" + "3d20d53d6a21d63d20d53d20d63d6a21d73d20d63d20d73d6a21d83d20d73d20d83d6a21d93d20d83d20d93d6a21da" + "3d20d93d20da3d6a21db3d20da3d20db3d6a21dc3d20db3d20dc3d6a21dd3d20dc3d20dd3d6a21de3d20dd3d20de3d" + "6a21df3d20de3d20df3d6a21e03d20df3d20e03d6a21e13d20e03d20e13d6a21e23d20e13d20e23d6a21e33d20e23d" + "20e33d6a21e43d20e33d20e43d6a21e53d20e43d20e53d6a21e63d20e53d20e63d6a21e73d20e63d20e73d6a21e83d" + "20e73d20e83d6a21e93d20e83d20e93d6a21ea3d20e93d20ea3d6a21eb3d20ea3d20eb3d6a21ec3d20eb3d20ec3d6a" + "21ed3d20ec3d20ed3d6a21ee3d20ed3d20ee3d6a21ef3d20ee3d20ef3d6a21f03d20ef3d20f03d6a21f13d20f03d20" + "f13d6a21f23d20f13d20f23d6a21f33d20f23d20f33d6a21f43d20f33d20f43d6a21f53d20f43d20f53d6a21f63d20" + "f53d20f63d6a21f73d20f63d20f73d6a21f83d20f73d20f83d6a21f93d20f83d20f93d6a21fa3d20f93d20fa3d6a21" + "fb3d20fa3d20fb3d6a21fc3d20fb3d20fc3d6a21fd3d20fc3d20fd3d6a21fe3d20fd3d20fe3d6a21ff3d20fe3d20ff" + "3d6a21803e20ff3d20803e6a21813e20803e20813e6a21823e20813e20823e6a21833e20823e20833e6a21843e2083" + "3e20843e6a21853e20843e20853e6a21863e20853e20863e6a21873e20863e20873e6a21883e20873e20883e6a2189" + "3e20883e20893e6a218a3e20893e208a3e6a218b3e208a3e208b3e6a218c3e208b3e208c3e6a218d3e208c3e208d3e" + "6a218e3e208d3e208e3e6a218f3e208e3e208f3e6a21903e208f3e20903e6a21913e20903e20913e6a21923e20913e" + "20923e6a21933e20923e20933e6a21943e20933e20943e6a21953e20943e20953e6a21963e20953e20963e6a21973e" + "20963e20973e6a21983e20973e20983e6a21993e20983e20993e6a219a3e20993e209a3e6a219b3e209a3e209b3e6a" + "219c3e209b3e209c3e6a219d3e209c3e209d3e6a219e3e209d3e209e3e6a219f3e209e3e209f3e6a21a03e209f3e20" + "a03e6a21a13e20a03e20a13e6a21a23e20a13e20a23e6a21a33e20a23e20a33e6a21a43e20a33e20a43e6a21a53e20" + "a43e20a53e6a21a63e20a53e20a63e6a21a73e20a63e20a73e6a21a83e20a73e20a83e6a21a93e20a83e20a93e6a21" + "aa3e20a93e20aa3e6a21ab3e20aa3e20ab3e6a21ac3e20ab3e20ac3e6a21ad3e20ac3e20ad3e6a21ae3e20ad3e20ae" + "3e6a21af3e20ae3e20af3e6a21b03e20af3e20b03e6a21b13e20b03e20b13e6a21b23e20b13e20b23e6a21b33e20b2" + "3e20b33e6a21b43e20b33e20b43e6a21b53e20b43e20b53e6a21b63e20b53e20b63e6a21b73e20b63e20b73e6a21b8" + "3e20b73e20b83e6a21b93e20b83e20b93e6a21ba3e20b93e20ba3e6a21bb3e20ba3e20bb3e6a21bc3e20bb3e20bc3e" + "6a21bd3e20bc3e20bd3e6a21be3e20bd3e20be3e6a21bf3e20be3e20bf3e6a21c03e20bf3e20c03e6a21c13e20c03e" + "20c13e6a21c23e20c13e20c23e6a21c33e20c23e20c33e6a21c43e20c33e20c43e6a21c53e20c43e20c53e6a21c63e" + "20c53e20c63e6a21c73e20c63e20c73e6a21c83e20c73e20c83e6a21c93e20c83e20c93e6a21ca3e20c93e20ca3e6a" + "21cb3e20ca3e20cb3e6a21cc3e20cb3e20cc3e6a21cd3e20cc3e20cd3e6a21ce3e20cd3e20ce3e6a21cf3e20ce3e20" + "cf3e6a21d03e20cf3e20d03e6a21d13e20d03e20d13e6a21d23e20d13e20d23e6a21d33e20d23e20d33e6a21d43e20" + "d33e20d43e6a21d53e20d43e20d53e6a21d63e20d53e20d63e6a21d73e20d63e20d73e6a21d83e20d73e20d83e6a21" + "d93e20d83e20d93e6a21da3e20d93e20da3e6a21db3e20da3e20db3e6a21dc3e20db3e20dc3e6a21dd3e20dc3e20dd" + "3e6a21de3e20dd3e20de3e6a21df3e20de3e20df3e6a21e03e20df3e20e03e6a21e13e20e03e20e13e6a21e23e20e1" + "3e20e23e6a21e33e20e23e20e33e6a21e43e20e33e20e43e6a21e53e20e43e20e53e6a21e63e20e53e20e63e6a21e7" + "3e20e63e20e73e6a21e83e20e73e20e83e6a21e93e20e83e20e93e6a21ea3e20e93e20ea3e6a21eb3e20ea3e20eb3e" + "6a21ec3e20eb3e20ec3e6a21ed3e20ec3e20ed3e6a21ee3e20ed3e20ee3e6a21ef3e20ee3e20ef3e6a21f03e20ef3e" + "20f03e6a21f13e20f03e20f13e6a21f23e20f13e20f23e6a21f33e20f23e20f33e6a21f43e20f33e20f43e6a21f53e" + "20f43e20f53e6a21f63e20f53e20f63e6a21f73e20f63e20f73e6a21f83e20f73e20f83e6a21f93e20f83e20f93e6a" + "21fa3e20f93e20fa3e6a21fb3e20fa3e20fb3e6a21fc3e20fb3e20fc3e6a21fd3e20fc3e20fd3e6a21fe3e20fd3e20" + "fe3e6a21ff3e20fe3e20ff3e6a21803f20ff3e20803f6a21813f20803f20813f6a21823f20813f20823f6a21833f20" + "823f20833f6a21843f20833f20843f6a21853f20843f20853f6a21863f20853f20863f6a21873f20863f20873f6a21" + "883f20873f20883f6a21893f20883f20893f6a218a3f20893f208a3f6a218b3f208a3f208b3f6a218c3f208b3f208c" + "3f6a218d3f208c3f208d3f6a218e3f208d3f208e3f6a218f3f208e3f208f3f6a21903f208f3f20903f6a21913f2090" + "3f20913f6a21923f20913f20923f6a21933f20923f20933f6a21943f20933f20943f6a21953f20943f20953f6a2196" + "3f20953f20963f6a21973f20963f20973f6a21983f20973f20983f6a21993f20983f20993f6a219a3f20993f209a3f" + "6a219b3f209a3f209b3f6a219c3f209b3f209c3f6a219d3f209c3f209d3f6a219e3f209d3f209e3f6a219f3f209e3f" + "209f3f6a21a03f209f3f20a03f6a21a13f20a03f20a13f6a21a23f20a13f20a23f6a21a33f20a23f20a33f6a21a43f" + "20a33f20a43f6a21a53f20a43f20a53f6a21a63f20a53f20a63f6a21a73f20a63f20a73f6a21a83f20a73f20a83f6a" + "21a93f20a83f20a93f6a21aa3f20a93f20aa3f6a21ab3f20aa3f20ab3f6a21ac3f20ab3f20ac3f6a21ad3f20ac3f20" + "ad3f6a21ae3f20ad3f20ae3f6a21af3f20ae3f20af3f6a21b03f20af3f20b03f6a21b13f20b03f20b13f6a21b23f20" + "b13f20b23f6a21b33f20b23f20b33f6a21b43f20b33f20b43f6a21b53f20b43f20b53f6a21b63f20b53f20b63f6a21" + "b73f20b63f20b73f6a21b83f20b73f20b83f6a21b93f20b83f20b93f6a21ba3f20b93f20ba3f6a21bb3f20ba3f20bb" + "3f6a21bc3f20bb3f20bc3f6a21bd3f20bc3f20bd3f6a21be3f20bd3f20be3f6a21bf3f20be3f20bf3f6a21c03f20bf" + "3f20c03f6a21c13f20c03f20c13f6a21c23f20c13f20c23f6a21c33f20c23f20c33f6a21c43f20c33f20c43f6a21c5" + "3f20c43f20c53f6a21c63f20c53f20c63f6a21c73f20c63f20c73f6a21c83f20c73f20c83f6a21c93f20c83f20c93f" + "6a21ca3f20c93f20ca3f6a21cb3f20ca3f20cb3f6a21cc3f20cb3f20cc3f6a21cd3f20cc3f20cd3f6a21ce3f20cd3f" + "20ce3f6a21cf3f20ce3f20cf3f6a21d03f20cf3f20d03f6a21d13f20d03f20d13f6a21d23f20d13f20d23f6a21d33f" + "20d23f20d33f6a21d43f20d33f20d43f6a21d53f20d43f20d53f6a21d63f20d53f20d63f6a21d73f20d63f20d73f6a" + "21d83f20d73f20d83f6a21d93f20d83f20d93f6a21da3f20d93f20da3f6a21db3f20da3f20db3f6a21dc3f20db3f20" + "dc3f6a21dd3f20dc3f20dd3f6a21de3f20dd3f20de3f6a21df3f20de3f20df3f6a21e03f20df3f20e03f6a21e13f20" + "e03f20e13f6a21e23f20e13f20e23f6a21e33f20e23f20e33f6a21e43f20e33f20e43f6a21e53f20e43f20e53f6a21" + "e63f20e53f20e63f6a21e73f20e63f20e73f6a21e83f20e73f20e83f6a21e93f20e83f20e93f6a21ea3f20e93f20ea" + "3f6a21eb3f20ea3f20eb3f6a21ec3f20eb3f20ec3f6a21ed3f20ec3f20ed3f6a21ee3f20ed3f20ee3f6a21ef3f20ee" + "3f20ef3f6a21f03f20ef3f20f03f6a21f13f20f03f20f13f6a21f23f20f13f20f23f6a21f33f20f23f20f33f6a21f4" + "3f20f33f20f43f6a21f53f20f43f20f53f6a21f63f20f53f20f63f6a21f73f20f63f20f73f6a21f83f20f73f20f83f" + "6a21f93f20f83f20f93f6a21fa3f20f93f20fa3f6a21fb3f20fa3f20fb3f6a21fc3f20fb3f20fc3f6a21fd3f20fc3f" + "20fd3f6a21fe3f20fd3f20fe3f6a21ff3f20fe3f20ff3f6a21804020ff3f2080406a2181402080402081406a218240" + "2081402082406a2183402082402083406a2184402083402084406a2185402084402085406a2186402085402086406a" + "2187402086402087406a2188402087402088406a2189402088402089406a218a40208940208a406a218b40208a4020" + "8b406a218c40208b40208c406a218d40208c40208d406a218e40208d40208e406a218f40208e40208f406a21904020" + "8f402090406a2191402090402091406a2192402091402092406a2193402092402093406a2194402093402094406a21" + "95402094402095406a2196402095402096406a2197402096402097406a2198402097402098406a2199402098402099" + "406a219a40209940209a406a219b40209a40209b406a219c40209b40209c406a219d40209c40209d406a219e40209d" + "40209e406a219f40209e40209f406a21a040209f4020a0406a21a14020a04020a1406a21a24020a14020a2406a21a3" + "4020a24020a3406a21a44020a34020a4406a21a54020a44020a5406a21a64020a54020a6406a21a74020a64020a740" + "6a21a84020a74020a8406a21a94020a84020a9406a21aa4020a94020aa406a21ab4020aa4020ab406a21ac4020ab40" + "20ac406a21ad4020ac4020ad406a21ae4020ad4020ae406a21af4020ae4020af406a21b04020af4020b0406a21b140" + "20b04020b1406a21b24020b14020b2406a21b34020b24020b3406a21b44020b34020b4406a21b54020b44020b5406a" + "21b64020b54020b6406a21b74020b64020b7406a21b84020b74020b8406a21b94020b84020b9406a21ba4020b94020" + "ba406a21bb4020ba4020bb406a21bc4020bb4020bc406a21bd4020bc4020bd406a21be4020bd4020be406a21bf4020" + "be4020bf406a21c04020bf4020c0406a21c14020c04020c1406a21c24020c14020c2406a21c34020c24020c3406a21" + "c44020c34020c4406a21c54020c44020c5406a21c64020c54020c6406a21c74020c64020c7406a21c84020c74020c8" + "406a21c94020c84020c9406a21ca4020c94020ca406a21cb4020ca4020cb406a21cc4020cb4020cc406a21cd4020cc" + "4020cd406a21ce4020cd4020ce406a21cf4020ce4020cf406a21d04020cf4020d0406a21d14020d04020d1406a21d2" + "4020d14020d2406a21d34020d24020d3406a21d44020d34020d4406a21d54020d44020d5406a21d64020d54020d640" + "6a21d74020d64020d7406a21d84020d74020d8406a21d94020d84020d9406a21da4020d94020da406a21db4020da40" + "20db406a21dc4020db4020dc406a21dd4020dc4020dd406a21de4020dd4020de406a21df4020de4020df406a21e040" + "20df4020e0406a21e14020e04020e1406a21e24020e14020e2406a21e34020e24020e3406a21e44020e34020e4406a" + "21e54020e44020e5406a21e64020e54020e6406a21e74020e64020e7406a21e84020e74020e8406a21e94020e84020" + "e9406a21ea4020e94020ea406a21eb4020ea4020eb406a21ec4020eb4020ec406a21ed4020ec4020ed406a21ee4020" + "ed4020ee406a21ef4020ee4020ef406a21f04020ef4020f0406a21f14020f04020f1406a21f24020f14020f2406a21" + "f34020f24020f3406a21f44020f34020f4406a21f54020f44020f5406a21f64020f54020f6406a21f74020f64020f7" + "406a21f84020f74020f8406a21f94020f84020f9406a21fa4020f94020fa406a21fb4020fa4020fb406a21fc4020fb" + "4020fc406a21fd4020fc4020fd406a21fe4020fd4020fe406a21ff4020fe4020ff406a21804120ff402080416a2181" + "412080412081416a2182412081412082416a2183412082412083416a2184412083412084416a218541208441208541" + "6a2186412085412086416a2187412086412087416a2188412087412088416a2189412088412089416a218a41208941" + "208a416a218b41208a41208b416a218c41208b41208c416a218d41208c41208d416a218e41208d41208e416a218f41" + "208e41208f416a219041208f412090416a2191412090412091416a2192412091412092416a2193412092412093416a" + "2194412093412094416a2195412094412095416a2196412095412096416a2197412096412097416a21984120974120" + "98416a2199412098412099416a219a41209941209a416a219b41209a41209b416a219c41209b41209c416a219d4120" + "9c41209d416a219e41209d41209e416a219f41209e41209f416a21a041209f4120a0416a21a14120a04120a1416a21" + "a24120a14120a2416a21a34120a24120a3416a21a44120a34120a4416a21a54120a44120a5416a21a64120a54120a6" + "416a21a74120a64120a7416a21a84120a74120a8416a21a94120a84120a9416a21aa4120a94120aa416a21ab4120aa" + "4120ab416a21ac4120ab4120ac416a21ad4120ac4120ad416a21ae4120ad4120ae416a21af4120ae4120af416a21b0" + "4120af4120b0416a21b14120b04120b1416a21b24120b14120b2416a21b34120b24120b3416a21b44120b34120b441" + "6a21b54120b44120b5416a21b64120b54120b6416a21b74120b64120b7416a21b84120b74120b8416a21b94120b841" + "20b9416a21ba4120b94120ba416a21bb4120ba4120bb416a21bc4120bb4120bc416a21bd4120bc4120bd416a21be41" + "20bd4120be416a21bf4120be4120bf416a21c04120bf4120c0416a21c14120c04120c1416a21c24120c14120c2416a" + "21c34120c24120c3416a21c44120c34120c4416a21c54120c44120c5416a21c64120c54120c6416a21c74120c64120" + "c7416a21c84120c74120c8416a21c94120c84120c9416a21ca4120c94120ca416a21cb4120ca4120cb416a21cc4120" + "cb4120cc416a21cd4120cc4120cd416a21ce4120cd4120ce416a21cf4120ce4120cf416a21d04120cf4120d0416a21" + "d14120d04120d1416a21d24120d14120d2416a21d34120d24120d3416a21d44120d34120d4416a21d54120d44120d5" + "416a21d64120d54120d6416a21d74120d64120d7416a21d84120d74120d8416a21d94120d84120d9416a21da4120d9" + "4120da416a21db4120da4120db416a21dc4120db4120dc416a21dd4120dc4120dd416a21de4120dd4120de416a21df" + "4120de4120df416a21e04120df4120e0416a21e14120e04120e1416a21e24120e14120e2416a21e34120e24120e341" + "6a21e44120e34120e4416a21e54120e44120e5416a21e64120e54120e6416a21e74120e64120e7416a21e84120e741" + "20e8416a21e94120e84120e9416a21ea4120e94120ea416a21eb4120ea4120eb416a21ec4120eb4120ec416a21ed41" + "20ec4120ed416a21ee4120ed4120ee416a21ef4120ee4120ef416a21f04120ef4120f0416a21f14120f04120f1416a" + "21f24120f14120f2416a21f34120f24120f3416a21f44120f34120f4416a21f54120f44120f5416a21f64120f54120" + "f6416a21f74120f64120f7416a21f84120f74120f8416a21f94120f84120f9416a21fa4120f94120fa416a21fb4120" + "fa4120fb416a21fc4120fb4120fc416a21fd4120fc4120fd416a21fe4120fd4120fe416a21ff4120fe4120ff416a21" + "804220ff412080426a2181422080422081426a2182422081422082426a2183422082422083426a2184422083422084" + "426a2185422084422085426a2186422085422086426a2187422086422087426a2188422087422088426a2189422088" + "422089426a218a42208942208a426a218b42208a42208b426a218c42208b42208c426a218d42208c42208d426a218e" + "42208d42208e426a218f42208e42208f426a219042208f422090426a2191422090422091426a219242209142209242" + "6a2193422092422093426a2194422093422094426a2195422094422095426a2196422095422096426a219742209642" + "2097426a2198422097422098426a2199422098422099426a219a42209942209a426a219b42209a42209b426a219c42" + "209b42209c426a219d42209c42209d426a219e42209d42209e426a219f42209e42209f426a21a042209f4220a0426a" + "21a14220a04220a1426a21a24220a14220a2426a21a34220a24220a3426a21a44220a34220a4426a21a54220a44220" + "a5426a21a64220a54220a6426a21a74220a64220a7426a21a84220a74220a8426a21a94220a84220a9426a21aa4220" + "a94220aa426a21ab4220aa4220ab426a21ac4220ab4220ac426a21ad4220ac4220ad426a21ae4220ad4220ae426a21" + "af4220ae4220af426a21b04220af4220b0426a21b14220b04220b1426a21b24220b14220b2426a21b34220b24220b3" + "426a21b44220b34220b4426a21b54220b44220b5426a21b64220b54220b6426a21b74220b64220b7426a21b84220b7" + "4220b8426a21b94220b84220b9426a21ba4220b94220ba426a21bb4220ba4220bb426a21bc4220bb4220bc426a21bd" + "4220bc4220bd426a21be4220bd4220be426a21bf4220be4220bf426a21c04220bf4220c0426a21c14220c04220c142" + "6a21c24220c14220c2426a21c34220c24220c3426a21c44220c34220c4426a21c54220c44220c5426a21c64220c542" + "20c6426a21c74220c64220c7426a21c84220c74220c8426a21c94220c84220c9426a21ca4220c94220ca426a21cb42" + "20ca4220cb426a21cc4220cb4220cc426a21cd4220cc4220cd426a21ce4220cd4220ce426a21cf4220ce4220cf426a" + "21d04220cf4220d0426a21d14220d04220d1426a21d24220d14220d2426a21d34220d24220d3426a21d44220d34220" + "d4426a21d54220d44220d5426a21d64220d54220d6426a21d74220d64220d7426a21d84220d74220d8426a21d94220" + "d84220d9426a21da4220d94220da426a21db4220da4220db426a21dc4220db4220dc426a21dd4220dc4220dd426a21" + "de4220dd4220de426a21df4220de4220df426a21e04220df4220e0426a21e14220e04220e1426a21e24220e14220e2" + "426a21e34220e24220e3426a21e44220e34220e4426a21e54220e44220e5426a21e64220e54220e6426a21e74220e6" + "4220e7426a21e84220e74220e8426a21e94220e84220e9426a21ea4220e94220ea426a21eb4220ea4220eb426a21ec" + "4220eb4220ec426a21ed4220ec4220ed426a21ee4220ed4220ee426a21ef4220ee4220ef426a21f04220ef4220f042" + "6a21f14220f04220f1426a21f24220f14220f2426a21f34220f24220f3426a21f44220f34220f4426a21f54220f442" + "20f5426a21f64220f54220f6426a21f74220f64220f7426a21f84220f74220f8426a21f94220f84220f9426a21fa42" + "20f94220fa426a21fb4220fa4220fb426a21fc4220fb4220fc426a21fd4220fc4220fd426a21fe4220fd4220fe426a" + "21ff4220fe4220ff426a21804320ff422080436a2181432080432081436a2182432081432082436a21834320824320" + "83436a2184432083432084436a2185432084432085436a2186432085432086436a2187432086432087436a21884320" + "87432088436a2189432088432089436a218a43208943208a436a218b43208a43208b436a218c43208b43208c436a21" + "8d43208c43208d436a218e43208d43208e436a218f43208e43208f436a219043208f432090436a2191432090432091" + "436a2192432091432092436a2193432092432093436a2194432093432094436a2195432094432095436a2196432095" + "432096436a2197432096432097436a2198432097432098436a2199432098432099436a219a43209943209a436a219b" + "43209a43209b436a219c43209b43209c436a219d43209c43209d436a219e43209d43209e436a219f43209e43209f43" + "6a21a043209f4320a0436a21a14320a04320a1436a21a24320a14320a2436a21a34320a24320a3436a21a44320a343" + "20a4436a21a54320a44320a5436a21a64320a54320a6436a21a74320a64320a7436a21a84320a74320a8436a21a943" + "20a84320a9436a21aa4320a94320aa436a21ab4320aa4320ab436a21ac4320ab4320ac436a21ad4320ac4320ad436a" + "21ae4320ad4320ae436a21af4320ae4320af436a21b04320af4320b0436a21b14320b04320b1436a21b24320b14320" + "b2436a21b34320b24320b3436a21b44320b34320b4436a21b54320b44320b5436a21b64320b54320b6436a21b74320" + "b64320b7436a21b84320b74320b8436a21b94320b84320b9436a21ba4320b94320ba436a21bb4320ba4320bb436a21" + "bc4320bb4320bc436a21bd4320bc4320bd436a21be4320bd4320be436a21bf4320be4320bf436a21c04320bf4320c0" + "436a21c14320c04320c1436a21c24320c14320c2436a21c34320c24320c3436a21c44320c34320c4436a21c54320c4" + "4320c5436a21c64320c54320c6436a21c74320c64320c7436a21c84320c74320c8436a21c94320c84320c9436a21ca" + "4320c94320ca436a21cb4320ca4320cb436a21cc4320cb4320cc436a21cd4320cc4320cd436a21ce4320cd4320ce43" + "6a21cf4320ce4320cf436a21d04320cf4320d0436a21d14320d04320d1436a21d24320d14320d2436a21d34320d243" + "20d3436a21d44320d34320d4436a21d54320d44320d5436a21d64320d54320d6436a21d74320d64320d7436a21d843" + "20d74320d8436a21d94320d84320d9436a21da4320d94320da436a21db4320da4320db436a21dc4320db4320dc436a" + "21dd4320dc4320dd436a21de4320dd4320de436a21df4320de4320df436a21e04320df4320e0436a21e14320e04320" + "e1436a21e24320e14320e2436a21e34320e24320e3436a21e44320e34320e4436a21e54320e44320e5436a21e64320" + "e54320e6436a21e74320e64320e7436a21e84320e74320e8436a21e94320e84320e9436a21ea4320e94320ea436a21" + "eb4320ea4320eb436a21ec4320eb4320ec436a21ed4320ec4320ed436a21ee4320ed4320ee436a21ef4320ee4320ef" + "436a21f04320ef4320f0436a21f14320f04320f1436a21f24320f14320f2436a21f34320f24320f3436a21f44320f3" + "4320f4436a21f54320f44320f5436a21f64320f54320f6436a21f74320f64320f7436a21f84320f74320f8436a21f9" + "4320f84320f9436a21fa4320f94320fa436a21fb4320fa4320fb436a21fc4320fb4320fc436a21fd4320fc4320fd43" + "6a21fe4320fd4320fe436a21ff4320fe4320ff436a21804420ff432080446a2181442080442081446a218244208144" + "2082446a2183442082442083446a2184442083442084446a2185442084442085446a2186442085442086446a218744" + "2086442087446a2188442087442088446a2189442088442089446a218a44208944208a446a218b44208a44208b446a" + "218c44208b44208c446a218d44208c44208d446a218e44208d44208e446a218f44208e44208f446a219044208f4420" + "90446a2191442090442091446a2192442091442092446a2193442092442093446a2194442093442094446a21954420" + "94442095446a2196442095442096446a2197442096442097446a2198442097442098446a2199442098442099446a21" + "9a44209944209a446a219b44209a44209b446a219c44209b44209c446a219d44209c44209d446a219e44209d44209e" + "446a219f44209e44209f446a21a044209f4420a0446a21a14420a04420a1446a21a24420a14420a2446a21a34420a2" + "4420a3446a21a44420a34420a4446a21a54420a44420a5446a21a64420a54420a6446a21a74420a64420a7446a21a8" + "4420a74420a8446a21a94420a84420a9446a21aa4420a94420aa446a21ab4420aa4420ab446a21ac4420ab4420ac44" + "6a21ad4420ac4420ad446a21ae4420ad4420ae446a21af4420ae4420af446a21b04420af4420b0446a21b14420b044" + "20b1446a21b24420b14420b2446a21b34420b24420b3446a21b44420b34420b4446a21b54420b44420b5446a21b644" + "20b54420b6446a21b74420b64420b7446a21b84420b74420b8446a21b94420b84420b9446a21ba4420b94420ba446a" + "21bb4420ba4420bb446a21bc4420bb4420bc446a21bd4420bc4420bd446a21be4420bd4420be446a21bf4420be4420" + "bf446a21c04420bf4420c0446a21c14420c04420c1446a21c24420c14420c2446a21c34420c24420c3446a21c44420" + "c34420c4446a21c54420c44420c5446a21c64420c54420c6446a21c74420c64420c7446a21c84420c74420c8446a21" + "c94420c84420c9446a21ca4420c94420ca446a21cb4420ca4420cb446a21cc4420cb4420cc446a21cd4420cc4420cd" + "446a21ce4420cd4420ce446a21cf4420ce4420cf446a21d04420cf4420d0446a21d14420d04420d1446a21d24420d1" + "4420d2446a21d34420d24420d3446a21d44420d34420d4446a21d54420d44420d5446a21d64420d54420d6446a21d7" + "4420d64420d7446a21d84420d74420d8446a21d94420d84420d9446a21da4420d94420da446a21db4420da4420db44" + "6a21dc4420db4420dc446a21dd4420dc4420dd446a21de4420dd4420de446a21df4420de4420df446a21e04420df44" + "20e0446a21e14420e04420e1446a21e24420e14420e2446a21e34420e24420e3446a21e44420e34420e4446a21e544" + "20e44420e5446a21e64420e54420e6446a21e74420e64420e7446a21e84420e74420e8446a21e94420e84420e9446a" + "21ea4420e94420ea446a21eb4420ea4420eb446a21ec4420eb4420ec446a21ed4420ec4420ed446a21ee4420ed4420" + "ee446a21ef4420ee4420ef446a21f04420ef4420f0446a21f14420f04420f1446a21f24420f14420f2446a21f34420" + "f24420f3446a21f44420f34420f4446a21f54420f44420f5446a21f64420f54420f6446a21f74420f64420f7446a21" + "f84420f74420f8446a21f94420f84420f9446a21fa4420f94420fa446a21fb4420fa4420fb446a21fc4420fb4420fc" + "446a21fd4420fc4420fd446a21fe4420fd4420fe446a21ff4420fe4420ff446a21804520ff442080456a2181452080" + "452081456a2182452081452082456a2183452082452083456a2184452083452084456a2185452084452085456a2186" + "452085452086456a2187452086452087456a2188452087452088456a2189452088452089456a218a45208945208a45" + "6a218b45208a45208b456a218c45208b45208c456a218d45208c45208d456a218e45208d45208e456a218f45208e45" + "208f456a219045208f452090456a2191452090452091456a2192452091452092456a2193452092452093456a219445" + "2093452094456a2195452094452095456a2196452095452096456a2197452096452097456a2198452097452098456a" + "2199452098452099456a219a45209945209a456a219b45209a45209b456a219c45209b45209c456a219d45209c4520" + "9d456a219e45209d45209e456a219f45209e45209f456a21a045209f4520a0456a21a14520a04520a1456a21a24520" + "a14520a2456a21a34520a24520a3456a21a44520a34520a4456a21a54520a44520a5456a21a64520a54520a6456a21" + "a74520a64520a7456a21a84520a74520a8456a21a94520a84520a9456a21aa4520a94520aa456a21ab4520aa4520ab" + "456a21ac4520ab4520ac456a21ad4520ac4520ad456a21ae4520ad4520ae456a21af4520ae4520af456a21b04520af" + "4520b0456a21b14520b04520b1456a21b24520b14520b2456a21b34520b24520b3456a21b44520b34520b4456a21b5" + "4520b44520b5456a21b64520b54520b6456a21b74520b64520b7456a21b84520b74520b8456a21b94520b84520b945" + "6a21ba4520b94520ba456a21bb4520ba4520bb456a21bc4520bb4520bc456a21bd4520bc4520bd456a21be4520bd45" + "20be456a21bf4520be4520bf456a21c04520bf4520c0456a21c14520c04520c1456a21c24520c14520c2456a21c345" + "20c24520c3456a21c44520c34520c4456a21c54520c44520c5456a21c64520c54520c6456a21c74520c64520c7456a" + "21c84520c74520c8456a21c94520c84520c9456a21ca4520c94520ca456a21cb4520ca4520cb456a21cc4520cb4520" + "cc456a21cd4520cc4520cd456a21ce4520cd4520ce456a21cf4520ce4520cf456a21d04520cf4520d0456a21d14520" + "d04520d1456a21d24520d14520d2456a21d34520d24520d3456a21d44520d34520d4456a21d54520d44520d5456a21" + "d64520d54520d6456a21d74520d64520d7456a21d84520d74520d8456a21d94520d84520d9456a21da4520d94520da" + "456a21db4520da4520db456a21dc4520db4520dc456a21dd4520dc4520dd456a21de4520dd4520de456a21df4520de" + "4520df456a21e04520df4520e0456a21e14520e04520e1456a21e24520e14520e2456a21e34520e24520e3456a21e4" + "4520e34520e4456a21e54520e44520e5456a21e64520e54520e6456a21e74520e64520e7456a21e84520e74520e845" + "6a21e94520e84520e9456a21ea4520e94520ea456a21eb4520ea4520eb456a21ec4520eb4520ec456a21ed4520ec45" + "20ed456a21ee4520ed4520ee456a21ef4520ee4520ef456a21f04520ef4520f0456a21f14520f04520f1456a21f245" + "20f14520f2456a21f34520f24520f3456a21f44520f34520f4456a21f54520f44520f5456a21f64520f54520f6456a" + "21f74520f64520f7456a21f84520f74520f8456a21f94520f84520f9456a21fa4520f94520fa456a21fb4520fa4520" + "fb456a21fc4520fb4520fc456a21fd4520fc4520fd456a21fe4520fd4520fe456a21ff4520fe4520ff456a21804620" + "ff452080466a2181462080462081466a2182462081462082466a2183462082462083466a2184462083462084466a21" + "85462084462085466a2186462085462086466a2187462086462087466a2188462087462088466a2189462088462089" + "466a218a46208946208a466a218b46208a46208b466a218c46208b46208c466a218d46208c46208d466a218e46208d" + "46208e466a218f46208e46208f466a219046208f462090466a2191462090462091466a2192462091462092466a2193" + "462092462093466a2194462093462094466a2195462094462095466a2196462095462096466a219746209646209746" + "6a2198462097462098466a2199462098462099466a219a46209946209a466a219b46209a46209b466a219c46209b46" + "209c466a219d46209c46209d466a219e46209d46209e466a219f46209e46209f466a21a046209f4620a0466a21a146" + "20a04620a1466a21a24620a14620a2466a21a34620a24620a3466a21a44620a34620a4466a21a54620a44620a5466a" + "21a64620a54620a6466a21a74620a64620a7466a21a84620a74620a8466a21a94620a84620a9466a21aa4620a94620" + "aa466a21ab4620aa4620ab466a21ac4620ab4620ac466a21ad4620ac4620ad466a21ae4620ad4620ae466a21af4620" + "ae4620af466a21b04620af4620b0466a21b14620b04620b1466a21b24620b14620b2466a21b34620b24620b3466a21" + "b44620b34620b4466a21b54620b44620b5466a21b64620b54620b6466a21b74620b64620b7466a21b84620b74620b8" + "466a21b94620b84620b9466a21ba4620b94620ba466a21bb4620ba4620bb466a21bc4620bb4620bc466a21bd4620bc" + "4620bd466a21be4620bd4620be466a21bf4620be4620bf466a21c04620bf4620c0466a21c14620c04620c1466a21c2" + "4620c14620c2466a21c34620c24620c3466a21c44620c34620c4466a21c54620c44620c5466a21c64620c54620c646" + "6a21c74620c64620c7466a21c84620c74620c8466a21c94620c84620c9466a21ca4620c94620ca466a21cb4620ca46" + "20cb466a21cc4620cb4620cc466a21cd4620cc4620cd466a21ce4620cd4620ce466a21cf4620ce4620cf466a21d046" + "20cf4620d0466a21d14620d04620d1466a21d24620d14620d2466a21d34620d24620d3466a21d44620d34620d4466a" + "21d54620d44620d5466a21d64620d54620d6466a21d74620d64620d7466a21d84620d74620d8466a21d94620d84620" + "d9466a21da4620d94620da466a21db4620da4620db466a21dc4620db4620dc466a21dd4620dc4620dd466a21de4620" + "dd4620de466a21df4620de4620df466a21e04620df4620e0466a21e14620e04620e1466a21e24620e14620e2466a21" + "e34620e24620e3466a21e44620e34620e4466a21e54620e44620e5466a21e64620e54620e6466a21e74620e64620e7" + "466a21e84620e74620e8466a21e94620e84620e9466a21ea4620e94620ea466a21eb4620ea4620eb466a21ec4620eb" + "4620ec466a21ed4620ec4620ed466a21ee4620ed4620ee466a21ef4620ee4620ef466a21f04620ef4620f0466a21f1" + "4620f04620f1466a21f24620f14620f2466a21f34620f24620f3466a21f44620f34620f4466a21f54620f44620f546" + "6a21f64620f54620f6466a21f74620f64620f7466a21f84620f74620f8466a21f94620f84620f9466a21fa4620f946" + "20fa466a21fb4620fa4620fb466a21fc4620fb4620fc466a21fd4620fc4620fd466a21fe4620fd4620fe466a21ff46" + "20fe4620ff466a21804720ff462080476a2181472080472081476a2182472081472082476a2183472082472083476a" + "2184472083472084476a2185472084472085476a2186472085472086476a2187472086472087476a21884720874720" + "88476a2189472088472089476a218a47208947208a476a218b47208a47208b476a218c47208b47208c476a218d4720" + "8c47208d476a218e47208d47208e476a218f47208e47208f476a219047208f472090476a2191472090472091476a21" + "92472091472092476a2193472092472093476a2194472093472094476a2195472094472095476a2196472095472096" + "476a2197472096472097476a2198472097472098476a2199472098472099476a219a47209947209a476a219b47209a" + "47209b476a219c47209b47209c476a219d47209c47209d476a219e47209d47209e476a219f47209e47209f476a21a0" + "47209f4720a0476a21a14720a04720a1476a21a24720a14720a2476a21a34720a24720a3476a21a44720a34720a447" + "6a21a54720a44720a5476a21a64720a54720a6476a21a74720a64720a7476a21a84720a74720a8476a21a94720a847" + "20a9476a21aa4720a94720aa476a21ab4720aa4720ab476a21ac4720ab4720ac476a21ad4720ac4720ad476a21ae47" + "20ad4720ae476a21af4720ae4720af476a21b04720af4720b0476a21b14720b04720b1476a21b24720b14720b2476a" + "21b34720b24720b3476a21b44720b34720b4476a21b54720b44720b5476a21b64720b54720b6476a21b74720b64720" + "b7476a21b84720b74720b8476a21b94720b84720b9476a21ba4720b94720ba476a21bb4720ba4720bb476a21bc4720" + "bb4720bc476a21bd4720bc4720bd476a21be4720bd4720be476a21bf4720be4720bf476a21c04720bf4720c0476a21" + "c14720c04720c1476a21c24720c14720c2476a21c34720c24720c3476a21c44720c34720c4476a21c54720c44720c5" + "476a21c64720c54720c6476a21c74720c64720c7476a21c84720c74720c8476a21c94720c84720c9476a21ca4720c9" + "4720ca476a21cb4720ca4720cb476a21cc4720cb4720cc476a21cd4720cc4720cd476a21ce4720cd4720ce476a21cf" + "4720ce4720cf476a21d04720cf4720d0476a21d14720d04720d1476a21d24720d14720d2476a21d34720d24720d347" + "6a21d44720d34720d4476a21d54720d44720d5476a21d64720d54720d6476a21d74720d64720d7476a21d84720d747" + "20d8476a21d94720d84720d9476a21da4720d94720da476a21db4720da4720db476a21dc4720db4720dc476a21dd47" + "20dc4720dd476a21de4720dd4720de476a21df4720de4720df476a21e04720df4720e0476a21e14720e04720e1476a" + "21e24720e14720e2476a21e34720e24720e3476a21e44720e34720e4476a21e54720e44720e5476a21e64720e54720" + "e6476a21e74720e64720e7476a21e84720e74720e8476a21e94720e84720e9476a21ea4720e94720ea476a21eb4720" + "ea4720eb476a21ec4720eb4720ec476a21ed4720ec4720ed476a21ee4720ed4720ee476a21ef4720ee4720ef476a21" + "f04720ef4720f0476a21f14720f04720f1476a21f24720f14720f2476a21f34720f24720f3476a21f44720f34720f4" + "476a21f54720f44720f5476a21f64720f54720f6476a21f74720f64720f7476a21f84720f74720f8476a21f94720f8" + "4720f9476a21fa4720f94720fa476a21fb4720fa4720fb476a21fc4720fb4720fc476a21fd4720fc4720fd476a21fe" + "4720fd4720fe476a21ff4720fe4720ff476a21804820ff472080486a2181482080482081486a218248208148208248" + "6a2183482082482083486a2184482083482084486a2185482084482085486a2186482085482086486a218748208648" + "2087486a2188482087482088486a2189482088482089486a218a48208948208a486a218b48208a48208b486a218c48" + "208b48208c486a218d48208c48208d486a218e48208d48208e486a218f48208e48208f486a219048208f482090486a" + "2191482090482091486a2192482091482092486a2193482092482093486a2194482093482094486a21954820944820" + "95486a2196482095482096486a2197482096482097486a2198482097482098486a2199482098482099486a219a4820" + "9948209a486a219b48209a48209b486a219c48209b48209c486a219d48209c48209d486a219e48209d48209e486a21" + "9f48209e48209f486a21a048209f4820a0486a21a14820a04820a1486a21a24820a14820a2486a21a34820a24820a3" + "486a21a44820a34820a4486a21a54820a44820a5486a21a64820a54820a6486a21a74820a64820a7486a21a84820a7" + "4820a8486a21a94820a84820a9486a21aa4820a94820aa486a21ab4820aa4820ab486a21ac4820ab4820ac486a21ad" + "4820ac4820ad486a21ae4820ad4820ae486a21af4820ae4820af486a21b04820af4820b0486a21b14820b04820b148" + "6a21b24820b14820b2486a21b34820b24820b3486a21b44820b34820b4486a21b54820b44820b5486a21b64820b548" + "20b6486a21b74820b64820b7486a21b84820b74820b8486a21b94820b84820b9486a21ba4820b94820ba486a21bb48" + "20ba4820bb486a21bc4820bb4820bc486a21bd4820bc4820bd486a21be4820bd4820be486a21bf4820be4820bf486a" + "21c04820bf4820c0486a21c14820c04820c1486a21c24820c14820c2486a21c34820c24820c3486a21c44820c34820" + "c4486a21c54820c44820c5486a21c64820c54820c6486a21c74820c64820c7486a21c84820c74820c8486a21c94820" + "c84820c9486a21ca4820c94820ca486a21cb4820ca4820cb486a21cc4820cb4820cc486a21cd4820cc4820cd486a21" + "ce4820cd4820ce486a21cf4820ce4820cf486a21d04820cf4820d0486a21d14820d04820d1486a21d24820d14820d2" + "486a21d34820d24820d3486a21d44820d34820d4486a21d54820d44820d5486a21d64820d54820d6486a21d74820d6" + "4820d7486a21d84820d74820d8486a21d94820d84820d9486a21da4820d94820da486a21db4820da4820db486a21dc" + "4820db4820dc486a21dd4820dc4820dd486a21de4820dd4820de486a21df4820de4820df486a21e04820df4820e048" + "6a21e14820e04820e1486a21e24820e14820e2486a21e34820e24820e3486a21e44820e34820e4486a21e54820e448" + "20e5486a21e64820e54820e6486a21e74820e64820e7486a21e84820e74820e8486a21e94820e84820e9486a21ea48" + "20e94820ea486a21eb4820ea4820eb486a21ec4820eb4820ec486a21ed4820ec4820ed486a21ee4820ed4820ee486a" + "21ef4820ee4820ef486a21f04820ef4820f0486a21f14820f04820f1486a21f24820f14820f2486a21f34820f24820" + "f3486a21f44820f34820f4486a21f54820f44820f5486a21f64820f54820f6486a21f74820f64820f7486a21f84820" + "f74820f8486a21f94820f84820f9486a21fa4820f94820fa486a21fb4820fa4820fb486a21fc4820fb4820fc486a21" + "fd4820fc4820fd486a21fe4820fd4820fe486a21ff4820fe4820ff486a21804920ff482080496a2181492080492081" + "496a2182492081492082496a2183492082492083496a2184492083492084496a2185492084492085496a2186492085" + "492086496a2187492086492087496a2188492087492088496a2189492088492089496a218a49208949208a496a218b" + "49208a49208b496a218c49208b49208c496a218d49208c49208d496a218e49208d49208e496a218f49208e49208f49" + "6a219049208f492090496a2191492090492091496a2192492091492092496a2193492092492093496a219449209349" + "2094496a2195492094492095496a2196492095492096496a2197492096492097496a2198492097492098496a219949" + "2098492099496a219a49209949209a496a219b49209a49209b496a219c49209b49209c496a219d49209c49209d496a" + "219e49209d49209e496a219f49209e49209f496a21a049209f4920a0496a21a14920a04920a1496a21a24920a14920" + "a2496a21a34920a24920a3496a21a44920a34920a4496a21a54920a44920a5496a21a64920a54920a6496a21a74920" + "a64920a7496a21a84920a74920a8496a21a94920a84920a9496a21aa4920a94920aa496a21ab4920aa4920ab496a21" + "ac4920ab4920ac496a21ad4920ac4920ad496a21ae4920ad4920ae496a21af4920ae4920af496a21b04920af4920b0" + "496a21b14920b04920b1496a21b24920b14920b2496a21b34920b24920b3496a21b44920b34920b4496a21b54920b4" + "4920b5496a21b64920b54920b6496a21b74920b64920b7496a21b84920b74920b8496a21b94920b84920b9496a21ba" + "4920b94920ba496a21bb4920ba4920bb496a21bc4920bb4920bc496a21bd4920bc4920bd496a21be4920bd4920be49" + "6a21bf4920be4920bf496a21c04920bf4920c0496a21c14920c04920c1496a21c24920c14920c2496a21c34920c249" + "20c3496a21c44920c34920c4496a21c54920c44920c5496a21c64920c54920c6496a21c74920c64920c7496a21c849" + "20c74920c8496a21c94920c84920c9496a21ca4920c94920ca496a21cb4920ca4920cb496a21cc4920cb4920cc496a" + "21cd4920cc4920cd496a21ce4920cd4920ce496a21cf4920ce4920cf496a21d04920cf4920d0496a21d14920d04920" + "d1496a21d24920d14920d2496a21d34920d24920d3496a21d44920d34920d4496a21d54920d44920d5496a21d64920" + "d54920d6496a21d74920d64920d7496a21d84920d74920d8496a21d94920d84920d9496a21da4920d94920da496a21" + "db4920da4920db496a21dc4920db4920dc496a21dd4920dc4920dd496a21de4920dd4920de496a21df4920de4920df" + "496a21e04920df4920e0496a21e14920e04920e1496a21e24920e14920e2496a21e34920e24920e3496a21e44920e3" + "4920e4496a21e54920e44920e5496a21e64920e54920e6496a21e74920e64920e7496a21e84920e74920e8496a21e9" + "4920e84920e9496a21ea4920e94920ea496a21eb4920ea4920eb496a21ec4920eb4920ec496a21ed4920ec4920ed49" + "6a21ee4920ed4920ee496a21ef4920ee4920ef496a21f04920ef4920f0496a21f14920f04920f1496a21f24920f149" + "20f2496a21f34920f24920f3496a21f44920f34920f4496a21f54920f44920f5496a21f64920f54920f6496a21f749" + "20f64920f7496a21f84920f74920f8496a21f94920f84920f9496a21fa4920f94920fa496a21fb4920fa4920fb496a" + "21fc4920fb4920fc496a21fd4920fc4920fd496a21fe4920fd4920fe496a21ff4920fe4920ff496a21804a20ff4920" + "804a6a21814a20804a20814a6a21824a20814a20824a6a21834a20824a20834a6a21844a20834a20844a6a21854a20" + "844a20854a6a21864a20854a20864a6a21874a20864a20874a6a21884a20874a20884a6a21894a20884a20894a6a21" + "8a4a20894a208a4a6a218b4a208a4a208b4a6a218c4a208b4a208c4a6a218d4a208c4a208d4a6a218e4a208d4a208e" + "4a6a218f4a208e4a208f4a6a21904a208f4a20904a6a21914a20904a20914a6a21924a20914a20924a6a21934a2092" + "4a20934a6a21944a20934a20944a6a21954a20944a20954a6a21964a20954a20964a6a21974a20964a20974a6a2198" + "4a20974a20984a6a21994a20984a20994a6a219a4a20994a209a4a6a219b4a209a4a209b4a6a219c4a209b4a209c4a" + "6a219d4a209c4a209d4a6a219e4a209d4a209e4a6a219f4a209e4a209f4a6a21a04a209f4a20a04a6a21a14a20a04a" + "20a14a6a21a24a20a14a20a24a6a21a34a20a24a20a34a6a21a44a20a34a20a44a6a21a54a20a44a20a54a6a21a64a" + "20a54a20a64a6a21a74a20a64a20a74a6a21a84a20a74a20a84a6a21a94a20a84a20a94a6a21aa4a20a94a20aa4a6a" + "21ab4a20aa4a20ab4a6a21ac4a20ab4a20ac4a6a21ad4a20ac4a20ad4a6a21ae4a20ad4a20ae4a6a21af4a20ae4a20" + "af4a6a21b04a20af4a20b04a6a21b14a20b04a20b14a6a21b24a20b14a20b24a6a21b34a20b24a20b34a6a21b44a20" + "b34a20b44a6a21b54a20b44a20b54a6a21b64a20b54a20b64a6a21b74a20b64a20b74a6a21b84a20b74a20b84a6a21" + "b94a20b84a20b94a6a21ba4a20b94a20ba4a6a21bb4a20ba4a20bb4a6a21bc4a20bb4a20bc4a6a21bd4a20bc4a20bd" + "4a6a21be4a20bd4a20be4a6a21bf4a20be4a20bf4a6a21c04a20bf4a20c04a6a21c14a20c04a20c14a6a21c24a20c1" + "4a20c24a6a21c34a20c24a20c34a6a21c44a20c34a20c44a6a21c54a20c44a20c54a6a21c64a20c54a20c64a6a21c7" + "4a20c64a20c74a6a21c84a20c74a20c84a6a21c94a20c84a20c94a6a21ca4a20c94a20ca4a6a21cb4a20ca4a20cb4a" + "6a21cc4a20cb4a20cc4a6a21cd4a20cc4a20cd4a6a21ce4a20cd4a20ce4a6a21cf4a20ce4a20cf4a6a21d04a20cf4a" + "20d04a6a21d14a20d04a20d14a6a21d24a20d14a20d24a6a21d34a20d24a20d34a6a21d44a20d34a20d44a6a21d54a" + "20d44a20d54a6a21d64a20d54a20d64a6a21d74a20d64a20d74a6a21d84a20d74a20d84a6a21d94a20d84a20d94a6a" + "21da4a20d94a20da4a6a21db4a20da4a20db4a6a21dc4a20db4a20dc4a6a21dd4a20dc4a20dd4a6a21de4a20dd4a20" + "de4a6a21df4a20de4a20df4a6a21e04a20df4a20e04a6a21e14a20e04a20e14a6a21e24a20e14a20e24a6a21e34a20" + "e24a20e34a6a21e44a20e34a20e44a6a21e54a20e44a20e54a6a21e64a20e54a20e64a6a21e74a20e64a20e74a6a21" + "e84a20e74a20e84a6a21e94a20e84a20e94a6a21ea4a20e94a20ea4a6a21eb4a20ea4a20eb4a6a21ec4a20eb4a20ec" + "4a6a21ed4a20ec4a20ed4a6a21ee4a20ed4a20ee4a6a21ef4a20ee4a20ef4a6a21f04a20ef4a20f04a6a21f14a20f0" + "4a20f14a6a21f24a20f14a20f24a6a21f34a20f24a20f34a6a21f44a20f34a20f44a6a21f54a20f44a20f54a6a21f6" + "4a20f54a20f64a6a21f74a20f64a20f74a6a21f84a20f74a20f84a6a21f94a20f84a20f94a6a21fa4a20f94a20fa4a" + "6a21fb4a20fa4a20fb4a6a21fc4a20fb4a20fc4a6a21fd4a20fc4a20fd4a6a21fe4a20fd4a20fe4a6a21ff4a20fe4a" + "20ff4a6a21804b20ff4a20804b6a21814b20804b20814b6a21824b20814b20824b6a21834b20824b20834b6a21844b" + "20834b20844b6a21854b20844b20854b6a21864b20854b20864b6a21874b20864b20874b6a21884b20874b20884b6a" + "21894b20884b20894b6a218a4b20894b208a4b6a218b4b208a4b208b4b6a218c4b208b4b208c4b6a218d4b208c4b20" + "8d4b6a218e4b208d4b208e4b6a218f4b208e4b208f4b6a21904b208f4b20904b6a21914b20904b20914b6a21924b20" + "914b20924b6a21934b20924b20934b6a21944b20934b20944b6a21954b20944b20954b6a21964b20954b20964b6a21" + "974b20964b20974b6a21984b20974b20984b6a21994b20984b20994b6a219a4b20994b209a4b6a219b4b209a4b209b" + "4b6a219c4b209b4b209c4b6a219d4b209c4b209d4b6a219e4b209d4b209e4b6a219f4b209e4b209f4b6a21a04b209f" + "4b20a04b6a21a14b20a04b20a14b6a21a24b20a14b20a24b6a21a34b20a24b20a34b6a21a44b20a34b20a44b6a21a5" + "4b20a44b20a54b6a21a64b20a54b20a64b6a21a74b20a64b20a74b6a21a84b20a74b20a84b6a21a94b20a84b20a94b" + "6a21aa4b20a94b20aa4b6a21ab4b20aa4b20ab4b6a21ac4b20ab4b20ac4b6a21ad4b20ac4b20ad4b6a21ae4b20ad4b" + "20ae4b6a21af4b20ae4b20af4b6a21b04b20af4b20b04b6a21b14b20b04b20b14b6a21b24b20b14b20b24b6a21b34b" + "20b24b20b34b6a21b44b20b34b20b44b6a21b54b20b44b20b54b6a21b64b20b54b20b64b6a21b74b20b64b20b74b6a" + "21b84b20b74b20b84b6a21b94b20b84b20b94b6a21ba4b20b94b20ba4b6a21bb4b20ba4b20bb4b6a21bc4b20bb4b20" + "bc4b6a21bd4b20bc4b20bd4b6a21be4b20bd4b20be4b6a21bf4b20be4b20bf4b6a21c04b20bf4b20c04b6a21c14b20" + "c04b20c14b6a21c24b20c14b20c24b6a21c34b20c24b20c34b6a21c44b20c34b20c44b6a21c54b20c44b20c54b6a21" + "c64b20c54b20c64b6a21c74b20c64b20c74b6a21c84b20c74b20c84b6a21c94b20c84b20c94b6a21ca4b20c94b20ca" + "4b6a21cb4b20ca4b20cb4b6a21cc4b20cb4b20cc4b6a21cd4b20cc4b20cd4b6a21ce4b20cd4b20ce4b6a21cf4b20ce" + "4b20cf4b6a21d04b20cf4b20d04b6a21d14b20d04b20d14b6a21d24b20d14b20d24b6a21d34b20d24b20d34b6a21d4" + "4b20d34b20d44b6a21d54b20d44b20d54b6a21d64b20d54b20d64b6a21d74b20d64b20d74b6a21d84b20d74b20d84b" + "6a21d94b20d84b20d94b6a21da4b20d94b20da4b6a21db4b20da4b20db4b6a21dc4b20db4b20dc4b6a21dd4b20dc4b" + "20dd4b6a21de4b20dd4b20de4b6a21df4b20de4b20df4b6a21e04b20df4b20e04b6a21e14b20e04b20e14b6a21e24b" + "20e14b20e24b6a21e34b20e24b20e34b6a21e44b20e34b20e44b6a21e54b20e44b20e54b6a21e64b20e54b20e64b6a" + "21e74b20e64b20e74b6a21e84b20e74b20e84b6a21e94b20e84b20e94b6a21ea4b20e94b20ea4b6a21eb4b20ea4b20" + "eb4b6a21ec4b20eb4b20ec4b6a21ed4b20ec4b20ed4b6a21ee4b20ed4b20ee4b6a21ef4b20ee4b20ef4b6a21f04b20" + "ef4b20f04b6a21f14b20f04b20f14b6a21f24b20f14b20f24b6a21f34b20f24b20f34b6a21f44b20f34b20f44b6a21" + "f54b20f44b20f54b6a21f64b20f54b20f64b6a21f74b20f64b20f74b6a21f84b20f74b20f84b6a21f94b20f84b20f9" + "4b6a21fa4b20f94b20fa4b6a21fb4b20fa4b20fb4b6a21fc4b20fb4b20fc4b6a21fd4b20fc4b20fd4b6a21fe4b20fd" + "4b20fe4b6a21ff4b20fe4b20ff4b6a21804c20ff4b20804c6a21814c20804c20814c6a21824c20814c20824c6a2183" + "4c20824c20834c6a21844c20834c20844c6a21854c20844c20854c6a21864c20854c20864c6a21874c20864c20874c" + "6a21884c20874c20884c6a21894c20884c20894c6a218a4c20894c208a4c6a218b4c208a4c208b4c6a218c4c208b4c" + "208c4c6a218d4c208c4c208d4c6a218e4c208d4c208e4c6a218f4c208e4c208f4c6a21904c208f4c20904c6a21914c" + "20904c20914c6a21924c20914c20924c6a21934c20924c20934c6a21944c20934c20944c6a21954c20944c20954c6a" + "21964c20954c20964c6a21974c20964c20974c6a21984c20974c20984c6a21994c20984c20994c6a219a4c20994c20" + "9a4c6a219b4c209a4c209b4c6a219c4c209b4c209c4c6a219d4c209c4c209d4c6a219e4c209d4c209e4c6a219f4c20" + "9e4c209f4c6a21a04c209f4c20a04c6a21a14c20a04c20a14c6a21a24c20a14c20a24c6a21a34c20a24c20a34c6a21" + "a44c20a34c20a44c6a21a54c20a44c20a54c6a21a64c20a54c20a64c6a21a74c20a64c20a74c6a21a84c20a74c20a8" + "4c6a21a94c20a84c20a94c6a21aa4c20a94c20aa4c6a21ab4c20aa4c20ab4c6a21ac4c20ab4c20ac4c6a21ad4c20ac" + "4c20ad4c6a21ae4c20ad4c20ae4c6a21af4c20ae4c20af4c6a21b04c20af4c20b04c6a21b14c20b04c20b14c6a21b2" + "4c20b14c20b24c6a21b34c20b24c20b34c6a21b44c20b34c20b44c6a21b54c20b44c20b54c6a21b64c20b54c20b64c" + "6a21b74c20b64c20b74c6a21b84c20b74c20b84c6a21b94c20b84c20b94c6a21ba4c20b94c20ba4c6a21bb4c20ba4c" + "20bb4c6a21bc4c20bb4c20bc4c6a21bd4c20bc4c20bd4c6a21be4c20bd4c20be4c6a21bf4c20be4c20bf4c6a21c04c" + "20bf4c20c04c6a21c14c20c04c20c14c6a21c24c20c14c20c24c6a21c34c20c24c20c34c6a21c44c20c34c20c44c6a" + "21c54c20c44c20c54c6a21c64c20c54c20c64c6a21c74c20c64c20c74c6a21c84c20c74c20c84c6a21c94c20c84c20" + "c94c6a21ca4c20c94c20ca4c6a21cb4c20ca4c20cb4c6a21cc4c20cb4c20cc4c6a21cd4c20cc4c20cd4c6a21ce4c20" + "cd4c20ce4c6a21cf4c20ce4c20cf4c6a21d04c20cf4c20d04c6a21d14c20d04c20d14c6a21d24c20d14c20d24c6a21" + "d34c20d24c20d34c6a21d44c20d34c20d44c6a21d54c20d44c20d54c6a21d64c20d54c20d64c6a21d74c20d64c20d7" + "4c6a21d84c20d74c20d84c6a21d94c20d84c20d94c6a21da4c20d94c20da4c6a21db4c20da4c20db4c6a21dc4c20db" + "4c20dc4c6a21dd4c20dc4c20dd4c6a21de4c20dd4c20de4c6a21df4c20de4c20df4c6a21e04c20df4c20e04c6a21e1" + "4c20e04c20e14c6a21e24c20e14c20e24c6a21e34c20e24c20e34c6a21e44c20e34c20e44c6a21e54c20e44c20e54c" + "6a21e64c20e54c20e64c6a21e74c20e64c20e74c6a21e84c20e74c20e84c6a21e94c20e84c20e94c6a21ea4c20e94c" + "20ea4c6a21eb4c20ea4c20eb4c6a21ec4c20eb4c20ec4c6a21ed4c20ec4c20ed4c6a21ee4c20ed4c20ee4c6a21ef4c" + "20ee4c20ef4c6a21f04c20ef4c20f04c6a21f14c20f04c20f14c6a21f24c20f14c20f24c6a21f34c20f24c20f34c6a" + "21f44c20f34c20f44c6a21f54c20f44c20f54c6a21f64c20f54c20f64c6a21f74c20f64c20f74c6a21f84c20f74c20" + "f84c6a21f94c20f84c20f94c6a21fa4c20f94c20fa4c6a21fb4c20fa4c20fb4c6a21fc4c20fb4c20fc4c6a21fd4c20" + "fc4c20fd4c6a21fe4c20fd4c20fe4c6a21ff4c20fe4c20ff4c6a21804d20ff4c20804d6a21814d20804d20814d6a21" + "824d20814d20824d6a21834d20824d20834d6a21844d20834d20844d6a21854d20844d20854d6a21864d20854d2086" + "4d6a21874d20864d20874d6a21884d20874d20884d6a21894d20884d20894d6a218a4d20894d208a4d6a218b4d208a" + "4d208b4d6a218c4d208b4d208c4d6a218d4d208c4d208d4d6a218e4d208d4d208e4d6a218f4d208e4d208f4d6a2190" + "4d208f4d20904d6a21914d20904d20914d6a21924d20914d20924d6a21934d20924d20934d6a21944d20934d20944d" + "6a21954d20944d20954d6a21964d20954d20964d6a21974d20964d20974d6a21984d20974d20984d6a21994d20984d" + "20994d6a219a4d20994d209a4d6a219b4d209a4d209b4d6a219c4d209b4d209c4d6a219d4d209c4d209d4d6a219e4d" + "209d4d209e4d6a219f4d209e4d209f4d6a21a04d209f4d20a04d6a21a14d20a04d20a14d6a21a24d20a14d20a24d6a" + "21a34d20a24d20a34d6a21a44d20a34d20a44d6a21a54d20a44d20a54d6a21a64d20a54d20a64d6a21a74d20a64d20" + "a74d6a21a84d20a74d20a84d6a21a94d20a84d20a94d6a21aa4d20a94d20aa4d6a21ab4d20aa4d20ab4d6a21ac4d20" + "ab4d20ac4d6a21ad4d20ac4d20ad4d6a21ae4d20ad4d20ae4d6a21af4d20ae4d20af4d6a21b04d20af4d20b04d6a21" + "b14d20b04d20b14d6a21b24d20b14d20b24d6a21b34d20b24d20b34d6a21b44d20b34d20b44d6a21b54d20b44d20b5" + "4d6a21b64d20b54d20b64d6a21b74d20b64d20b74d6a21b84d20b74d20b84d6a21b94d20b84d20b94d6a21ba4d20b9" + "4d20ba4d6a21bb4d20ba4d20bb4d6a21bc4d20bb4d20bc4d6a21bd4d20bc4d20bd4d6a21be4d20bd4d20be4d6a21bf" + "4d20be4d20bf4d6a21c04d20bf4d20c04d6a21c14d20c04d20c14d6a21c24d20c14d20c24d6a21c34d20c24d20c34d" + "6a21c44d20c34d20c44d6a21c54d20c44d20c54d6a21c64d20c54d20c64d6a21c74d20c64d20c74d6a21c84d20c74d" + "20c84d6a21c94d20c84d20c94d6a21ca4d20c94d20ca4d6a21cb4d20ca4d20cb4d6a21cc4d20cb4d20cc4d6a21cd4d" + "20cc4d20cd4d6a21ce4d20cd4d20ce4d6a21cf4d20ce4d20cf4d6a21d04d20cf4d20d04d6a21d14d20d04d20d14d6a" + "21d24d20d14d20d24d6a21d34d20d24d20d34d6a21d44d20d34d20d44d6a21d54d20d44d20d54d6a21d64d20d54d20" + "d64d6a21d74d20d64d20d74d6a21d84d20d74d20d84d6a21d94d20d84d20d94d6a21da4d20d94d20da4d6a21db4d20" + "da4d20db4d6a21dc4d20db4d20dc4d6a21dd4d20dc4d20dd4d6a21de4d20dd4d20de4d6a21df4d20de4d20df4d6a21" + "e04d20df4d20e04d6a21e14d20e04d20e14d6a21e24d20e14d20e24d6a21e34d20e24d20e34d6a21e44d20e34d20e4" + "4d6a21e54d20e44d20e54d6a21e64d20e54d20e64d6a21e74d20e64d20e74d6a21e84d20e74d20e84d6a21e94d20e8" + "4d20e94d6a21ea4d20e94d20ea4d6a21eb4d20ea4d20eb4d6a21ec4d20eb4d20ec4d6a21ed4d20ec4d20ed4d6a21ee" + "4d20ed4d20ee4d6a21ef4d20ee4d20ef4d6a21f04d20ef4d20f04d6a21f14d20f04d20f14d6a21f24d20f14d20f24d" + "6a21f34d20f24d20f34d6a21f44d20f34d20f44d6a21f54d20f44d20f54d6a21f64d20f54d20f64d6a21f74d20f64d" + "20f74d6a21f84d20f74d20f84d6a21f94d20f84d20f94d6a21fa4d20f94d20fa4d6a21fb4d20fa4d20fb4d6a21fc4d" + "20fb4d20fc4d6a21fd4d20fc4d20fd4d6a21fe4d20fd4d20fe4d6a21ff4d20fe4d20ff4d6a21804e20ff4d20804e6a" + "21814e20804e20814e6a21824e20814e20824e6a21834e20824e20834e6a21844e20834e20844e6a21854e20844e20" + "854e6a21864e20854e20864e6a21874e20864e20874e6a21884e20874e20884e6a21894e20884e20894e6a218a4e20" + "894e208a4e6a218b4e208a4e208b4e6a218c4e208b4e208c4e6a218d4e208c4e208d4e6a218e4e208d4e208e4e6a21" + "8f4e208f4e0b"; diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 7dcd5c4ea1..945a5a8ce2 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -1302,4364 +1302,6 @@ extern std::string const thousand1ParamsHex = "623432626432343732302900490f7461726765745f6665617475726573042b0f6d757461626c652d676c6f62616c73" "2b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; -extern std::string const locals10kHex = - "0061736d0100000001070160027f7f017f03020100070801047465737400000a9b8a0601978a06018e4e7f20002001" - "6a2102200120026a2103200220036a2104200320046a2105200420056a2106200520066a2107200620076a21082007" - "20086a2109200820096a210a2009200a6a210b200a200b6a210c200b200c6a210d200c200d6a210e200d200e6a210f" - "200e200f6a2110200f20106a2111201020116a2112201120126a2113201220136a2114201320146a2115201420156a" - "2116201520166a2117201620176a2118201720186a2119201820196a211a2019201a6a211b201a201b6a211c201b20" - "1c6a211d201c201d6a211e201d201e6a211f201e201f6a2120201f20206a2121202020216a2122202120226a212320" - "2220236a2124202320246a2125202420256a2126202520266a2127202620276a2128202720286a2129202820296a21" - "2a2029202a6a212b202a202b6a212c202b202c6a212d202c202d6a212e202d202e6a212f202e202f6a2130202f2030" - "6a2131203020316a2132203120326a2133203220336a2134203320346a2135203420356a2136203520366a21372036" - "20376a2138203720386a2139203820396a213a2039203a6a213b203a203b6a213c203b203c6a213d203c203d6a213e" - "203d203e6a213f203e203f6a2140203f20406a2141204020416a2142204120426a2143204220436a2144204320446a" - "2145204420456a2146204520466a2147204620476a2148204720486a2149204820496a214a2049204a6a214b204a20" - "4b6a214c204b204c6a214d204c204d6a214e204d204e6a214f204e204f6a2150204f20506a2151205020516a215220" - "5120526a2153205220536a2154205320546a2155205420556a2156205520566a2157205620576a2158205720586a21" - "59205820596a215a2059205a6a215b205a205b6a215c205b205c6a215d205c205d6a215e205d205e6a215f205e205f" - "6a2160205f20606a2161206020616a2162206120626a2163206220636a2164206320646a2165206420656a21662065" - "20666a2167206620676a2168206720686a2169206820696a216a2069206a6a216b206a206b6a216c206b206c6a216d" - "206c206d6a216e206d206e6a216f206e206f6a2170206f20706a2171207020716a2172207120726a2173207220736a" - "2174207320746a2175207420756a2176207520766a2177207620776a2178207720786a2179207820796a217a207920" - "7a6a217b207a207b6a217c207b207c6a217d207c207d6a217e207d207e6a217f207e207f6a218001207f2080016a21" - "81012080012081016a2182012081012082016a2183012082012083016a2184012083012084016a2185012084012085" - "016a2186012085012086016a2187012086012087016a2188012087012088016a2189012088012089016a218a012089" - "01208a016a218b01208a01208b016a218c01208b01208c016a218d01208c01208d016a218e01208d01208e016a218f" - "01208e01208f016a219001208f012090016a2191012090012091016a2192012091012092016a219301209201209301" - "6a2194012093012094016a2195012094012095016a2196012095012096016a2197012096012097016a219801209701" - "2098016a2199012098012099016a219a01209901209a016a219b01209a01209b016a219c01209b01209c016a219d01" - "209c01209d016a219e01209d01209e016a219f01209e01209f016a21a001209f0120a0016a21a10120a00120a1016a" - "21a20120a10120a2016a21a30120a20120a3016a21a40120a30120a4016a21a50120a40120a5016a21a60120a50120" - "a6016a21a70120a60120a7016a21a80120a70120a8016a21a90120a80120a9016a21aa0120a90120aa016a21ab0120" - "aa0120ab016a21ac0120ab0120ac016a21ad0120ac0120ad016a21ae0120ad0120ae016a21af0120ae0120af016a21" - "b00120af0120b0016a21b10120b00120b1016a21b20120b10120b2016a21b30120b20120b3016a21b40120b30120b4" - "016a21b50120b40120b5016a21b60120b50120b6016a21b70120b60120b7016a21b80120b70120b8016a21b90120b8" - "0120b9016a21ba0120b90120ba016a21bb0120ba0120bb016a21bc0120bb0120bc016a21bd0120bc0120bd016a21be" - "0120bd0120be016a21bf0120be0120bf016a21c00120bf0120c0016a21c10120c00120c1016a21c20120c10120c201" - "6a21c30120c20120c3016a21c40120c30120c4016a21c50120c40120c5016a21c60120c50120c6016a21c70120c601" - "20c7016a21c80120c70120c8016a21c90120c80120c9016a21ca0120c90120ca016a21cb0120ca0120cb016a21cc01" - "20cb0120cc016a21cd0120cc0120cd016a21ce0120cd0120ce016a21cf0120ce0120cf016a21d00120cf0120d0016a" - "21d10120d00120d1016a21d20120d10120d2016a21d30120d20120d3016a21d40120d30120d4016a21d50120d40120" - "d5016a21d60120d50120d6016a21d70120d60120d7016a21d80120d70120d8016a21d90120d80120d9016a21da0120" - "d90120da016a21db0120da0120db016a21dc0120db0120dc016a21dd0120dc0120dd016a21de0120dd0120de016a21" - "df0120de0120df016a21e00120df0120e0016a21e10120e00120e1016a21e20120e10120e2016a21e30120e20120e3" - "016a21e40120e30120e4016a21e50120e40120e5016a21e60120e50120e6016a21e70120e60120e7016a21e80120e7" - "0120e8016a21e90120e80120e9016a21ea0120e90120ea016a21eb0120ea0120eb016a21ec0120eb0120ec016a21ed" - "0120ec0120ed016a21ee0120ed0120ee016a21ef0120ee0120ef016a21f00120ef0120f0016a21f10120f00120f101" - "6a21f20120f10120f2016a21f30120f20120f3016a21f40120f30120f4016a21f50120f40120f5016a21f60120f501" - "20f6016a21f70120f60120f7016a21f80120f70120f8016a21f90120f80120f9016a21fa0120f90120fa016a21fb01" - "20fa0120fb016a21fc0120fb0120fc016a21fd0120fc0120fd016a21fe0120fd0120fe016a21ff0120fe0120ff016a" - "21800220ff012080026a2181022080022081026a2182022081022082026a2183022082022083026a21840220830220" - "84026a2185022084022085026a2186022085022086026a2187022086022087026a2188022087022088026a21890220" - "88022089026a218a02208902208a026a218b02208a02208b026a218c02208b02208c026a218d02208c02208d026a21" - "8e02208d02208e026a218f02208e02208f026a219002208f022090026a2191022090022091026a2192022091022092" - "026a2193022092022093026a2194022093022094026a2195022094022095026a2196022095022096026a2197022096" - "022097026a2198022097022098026a2199022098022099026a219a02209902209a026a219b02209a02209b026a219c" - "02209b02209c026a219d02209c02209d026a219e02209d02209e026a219f02209e02209f026a21a002209f0220a002" - "6a21a10220a00220a1026a21a20220a10220a2026a21a30220a20220a3026a21a40220a30220a4026a21a50220a402" - "20a5026a21a60220a50220a6026a21a70220a60220a7026a21a80220a70220a8026a21a90220a80220a9026a21aa02" - "20a90220aa026a21ab0220aa0220ab026a21ac0220ab0220ac026a21ad0220ac0220ad026a21ae0220ad0220ae026a" - "21af0220ae0220af026a21b00220af0220b0026a21b10220b00220b1026a21b20220b10220b2026a21b30220b20220" - "b3026a21b40220b30220b4026a21b50220b40220b5026a21b60220b50220b6026a21b70220b60220b7026a21b80220" - "b70220b8026a21b90220b80220b9026a21ba0220b90220ba026a21bb0220ba0220bb026a21bc0220bb0220bc026a21" - "bd0220bc0220bd026a21be0220bd0220be026a21bf0220be0220bf026a21c00220bf0220c0026a21c10220c00220c1" - "026a21c20220c10220c2026a21c30220c20220c3026a21c40220c30220c4026a21c50220c40220c5026a21c60220c5" - "0220c6026a21c70220c60220c7026a21c80220c70220c8026a21c90220c80220c9026a21ca0220c90220ca026a21cb" - "0220ca0220cb026a21cc0220cb0220cc026a21cd0220cc0220cd026a21ce0220cd0220ce026a21cf0220ce0220cf02" - "6a21d00220cf0220d0026a21d10220d00220d1026a21d20220d10220d2026a21d30220d20220d3026a21d40220d302" - "20d4026a21d50220d40220d5026a21d60220d50220d6026a21d70220d60220d7026a21d80220d70220d8026a21d902" - "20d80220d9026a21da0220d90220da026a21db0220da0220db026a21dc0220db0220dc026a21dd0220dc0220dd026a" - "21de0220dd0220de026a21df0220de0220df026a21e00220df0220e0026a21e10220e00220e1026a21e20220e10220" - "e2026a21e30220e20220e3026a21e40220e30220e4026a21e50220e40220e5026a21e60220e50220e6026a21e70220" - "e60220e7026a21e80220e70220e8026a21e90220e80220e9026a21ea0220e90220ea026a21eb0220ea0220eb026a21" - "ec0220eb0220ec026a21ed0220ec0220ed026a21ee0220ed0220ee026a21ef0220ee0220ef026a21f00220ef0220f0" - "026a21f10220f00220f1026a21f20220f10220f2026a21f30220f20220f3026a21f40220f30220f4026a21f50220f4" - "0220f5026a21f60220f50220f6026a21f70220f60220f7026a21f80220f70220f8026a21f90220f80220f9026a21fa" - "0220f90220fa026a21fb0220fa0220fb026a21fc0220fb0220fc026a21fd0220fc0220fd026a21fe0220fd0220fe02" - "6a21ff0220fe0220ff026a21800320ff022080036a2181032080032081036a2182032081032082036a218303208203" - "2083036a2184032083032084036a2185032084032085036a2186032085032086036a2187032086032087036a218803" - "2087032088036a2189032088032089036a218a03208903208a036a218b03208a03208b036a218c03208b03208c036a" - "218d03208c03208d036a218e03208d03208e036a218f03208e03208f036a219003208f032090036a21910320900320" - "91036a2192032091032092036a2193032092032093036a2194032093032094036a2195032094032095036a21960320" - "95032096036a2197032096032097036a2198032097032098036a2199032098032099036a219a03209903209a036a21" - "9b03209a03209b036a219c03209b03209c036a219d03209c03209d036a219e03209d03209e036a219f03209e03209f" - "036a21a003209f0320a0036a21a10320a00320a1036a21a20320a10320a2036a21a30320a20320a3036a21a40320a3" - "0320a4036a21a50320a40320a5036a21a60320a50320a6036a21a70320a60320a7036a21a80320a70320a8036a21a9" - "0320a80320a9036a21aa0320a90320aa036a21ab0320aa0320ab036a21ac0320ab0320ac036a21ad0320ac0320ad03" - "6a21ae0320ad0320ae036a21af0320ae0320af036a21b00320af0320b0036a21b10320b00320b1036a21b20320b103" - "20b2036a21b30320b20320b3036a21b40320b30320b4036a21b50320b40320b5036a21b60320b50320b6036a21b703" - "20b60320b7036a21b80320b70320b8036a21b90320b80320b9036a21ba0320b90320ba036a21bb0320ba0320bb036a" - "21bc0320bb0320bc036a21bd0320bc0320bd036a21be0320bd0320be036a21bf0320be0320bf036a21c00320bf0320" - "c0036a21c10320c00320c1036a21c20320c10320c2036a21c30320c20320c3036a21c40320c30320c4036a21c50320" - "c40320c5036a21c60320c50320c6036a21c70320c60320c7036a21c80320c70320c8036a21c90320c80320c9036a21" - "ca0320c90320ca036a21cb0320ca0320cb036a21cc0320cb0320cc036a21cd0320cc0320cd036a21ce0320cd0320ce" - "036a21cf0320ce0320cf036a21d00320cf0320d0036a21d10320d00320d1036a21d20320d10320d2036a21d30320d2" - "0320d3036a21d40320d30320d4036a21d50320d40320d5036a21d60320d50320d6036a21d70320d60320d7036a21d8" - "0320d70320d8036a21d90320d80320d9036a21da0320d90320da036a21db0320da0320db036a21dc0320db0320dc03" - "6a21dd0320dc0320dd036a21de0320dd0320de036a21df0320de0320df036a21e00320df0320e0036a21e10320e003" - "20e1036a21e20320e10320e2036a21e30320e20320e3036a21e40320e30320e4036a21e50320e40320e5036a21e603" - "20e50320e6036a21e70320e60320e7036a21e80320e70320e8036a21e90320e80320e9036a21ea0320e90320ea036a" - "21eb0320ea0320eb036a21ec0320eb0320ec036a21ed0320ec0320ed036a21ee0320ed0320ee036a21ef0320ee0320" - "ef036a21f00320ef0320f0036a21f10320f00320f1036a21f20320f10320f2036a21f30320f20320f3036a21f40320" - "f30320f4036a21f50320f40320f5036a21f60320f50320f6036a21f70320f60320f7036a21f80320f70320f8036a21" - "f90320f80320f9036a21fa0320f90320fa036a21fb0320fa0320fb036a21fc0320fb0320fc036a21fd0320fc0320fd" - "036a21fe0320fd0320fe036a21ff0320fe0320ff036a21800420ff032080046a2181042080042081046a2182042081" - "042082046a2183042082042083046a2184042083042084046a2185042084042085046a2186042085042086046a2187" - "042086042087046a2188042087042088046a2189042088042089046a218a04208904208a046a218b04208a04208b04" - "6a218c04208b04208c046a218d04208c04208d046a218e04208d04208e046a218f04208e04208f046a219004208f04" - "2090046a2191042090042091046a2192042091042092046a2193042092042093046a2194042093042094046a219504" - "2094042095046a2196042095042096046a2197042096042097046a2198042097042098046a2199042098042099046a" - "219a04209904209a046a219b04209a04209b046a219c04209b04209c046a219d04209c04209d046a219e04209d0420" - "9e046a219f04209e04209f046a21a004209f0420a0046a21a10420a00420a1046a21a20420a10420a2046a21a30420" - "a20420a3046a21a40420a30420a4046a21a50420a40420a5046a21a60420a50420a6046a21a70420a60420a7046a21" - "a80420a70420a8046a21a90420a80420a9046a21aa0420a90420aa046a21ab0420aa0420ab046a21ac0420ab0420ac" - "046a21ad0420ac0420ad046a21ae0420ad0420ae046a21af0420ae0420af046a21b00420af0420b0046a21b10420b0" - "0420b1046a21b20420b10420b2046a21b30420b20420b3046a21b40420b30420b4046a21b50420b40420b5046a21b6" - "0420b50420b6046a21b70420b60420b7046a21b80420b70420b8046a21b90420b80420b9046a21ba0420b90420ba04" - "6a21bb0420ba0420bb046a21bc0420bb0420bc046a21bd0420bc0420bd046a21be0420bd0420be046a21bf0420be04" - "20bf046a21c00420bf0420c0046a21c10420c00420c1046a21c20420c10420c2046a21c30420c20420c3046a21c404" - "20c30420c4046a21c50420c40420c5046a21c60420c50420c6046a21c70420c60420c7046a21c80420c70420c8046a" - "21c90420c80420c9046a21ca0420c90420ca046a21cb0420ca0420cb046a21cc0420cb0420cc046a21cd0420cc0420" - "cd046a21ce0420cd0420ce046a21cf0420ce0420cf046a21d00420cf0420d0046a21d10420d00420d1046a21d20420" - "d10420d2046a21d30420d20420d3046a21d40420d30420d4046a21d50420d40420d5046a21d60420d50420d6046a21" - "d70420d60420d7046a21d80420d70420d8046a21d90420d80420d9046a21da0420d90420da046a21db0420da0420db" - "046a21dc0420db0420dc046a21dd0420dc0420dd046a21de0420dd0420de046a21df0420de0420df046a21e00420df" - "0420e0046a21e10420e00420e1046a21e20420e10420e2046a21e30420e20420e3046a21e40420e30420e4046a21e5" - "0420e40420e5046a21e60420e50420e6046a21e70420e60420e7046a21e80420e70420e8046a21e90420e80420e904" - "6a21ea0420e90420ea046a21eb0420ea0420eb046a21ec0420eb0420ec046a21ed0420ec0420ed046a21ee0420ed04" - "20ee046a21ef0420ee0420ef046a21f00420ef0420f0046a21f10420f00420f1046a21f20420f10420f2046a21f304" - "20f20420f3046a21f40420f30420f4046a21f50420f40420f5046a21f60420f50420f6046a21f70420f60420f7046a" - "21f80420f70420f8046a21f90420f80420f9046a21fa0420f90420fa046a21fb0420fa0420fb046a21fc0420fb0420" - "fc046a21fd0420fc0420fd046a21fe0420fd0420fe046a21ff0420fe0420ff046a21800520ff042080056a21810520" - "80052081056a2182052081052082056a2183052082052083056a2184052083052084056a2185052084052085056a21" - "86052085052086056a2187052086052087056a2188052087052088056a2189052088052089056a218a05208905208a" - "056a218b05208a05208b056a218c05208b05208c056a218d05208c05208d056a218e05208d05208e056a218f05208e" - "05208f056a219005208f052090056a2191052090052091056a2192052091052092056a2193052092052093056a2194" - "052093052094056a2195052094052095056a2196052095052096056a2197052096052097056a219805209705209805" - "6a2199052098052099056a219a05209905209a056a219b05209a05209b056a219c05209b05209c056a219d05209c05" - "209d056a219e05209d05209e056a219f05209e05209f056a21a005209f0520a0056a21a10520a00520a1056a21a205" - "20a10520a2056a21a30520a20520a3056a21a40520a30520a4056a21a50520a40520a5056a21a60520a50520a6056a" - "21a70520a60520a7056a21a80520a70520a8056a21a90520a80520a9056a21aa0520a90520aa056a21ab0520aa0520" - "ab056a21ac0520ab0520ac056a21ad0520ac0520ad056a21ae0520ad0520ae056a21af0520ae0520af056a21b00520" - "af0520b0056a21b10520b00520b1056a21b20520b10520b2056a21b30520b20520b3056a21b40520b30520b4056a21" - "b50520b40520b5056a21b60520b50520b6056a21b70520b60520b7056a21b80520b70520b8056a21b90520b80520b9" - "056a21ba0520b90520ba056a21bb0520ba0520bb056a21bc0520bb0520bc056a21bd0520bc0520bd056a21be0520bd" - "0520be056a21bf0520be0520bf056a21c00520bf0520c0056a21c10520c00520c1056a21c20520c10520c2056a21c3" - "0520c20520c3056a21c40520c30520c4056a21c50520c40520c5056a21c60520c50520c6056a21c70520c60520c705" - "6a21c80520c70520c8056a21c90520c80520c9056a21ca0520c90520ca056a21cb0520ca0520cb056a21cc0520cb05" - "20cc056a21cd0520cc0520cd056a21ce0520cd0520ce056a21cf0520ce0520cf056a21d00520cf0520d0056a21d105" - "20d00520d1056a21d20520d10520d2056a21d30520d20520d3056a21d40520d30520d4056a21d50520d40520d5056a" - "21d60520d50520d6056a21d70520d60520d7056a21d80520d70520d8056a21d90520d80520d9056a21da0520d90520" - "da056a21db0520da0520db056a21dc0520db0520dc056a21dd0520dc0520dd056a21de0520dd0520de056a21df0520" - "de0520df056a21e00520df0520e0056a21e10520e00520e1056a21e20520e10520e2056a21e30520e20520e3056a21" - "e40520e30520e4056a21e50520e40520e5056a21e60520e50520e6056a21e70520e60520e7056a21e80520e70520e8" - "056a21e90520e80520e9056a21ea0520e90520ea056a21eb0520ea0520eb056a21ec0520eb0520ec056a21ed0520ec" - "0520ed056a21ee0520ed0520ee056a21ef0520ee0520ef056a21f00520ef0520f0056a21f10520f00520f1056a21f2" - "0520f10520f2056a21f30520f20520f3056a21f40520f30520f4056a21f50520f40520f5056a21f60520f50520f605" - "6a21f70520f60520f7056a21f80520f70520f8056a21f90520f80520f9056a21fa0520f90520fa056a21fb0520fa05" - "20fb056a21fc0520fb0520fc056a21fd0520fc0520fd056a21fe0520fd0520fe056a21ff0520fe0520ff056a218006" - "20ff052080066a2181062080062081066a2182062081062082066a2183062082062083066a2184062083062084066a" - "2185062084062085066a2186062085062086066a2187062086062087066a2188062087062088066a21890620880620" - "89066a218a06208906208a066a218b06208a06208b066a218c06208b06208c066a218d06208c06208d066a218e0620" - "8d06208e066a218f06208e06208f066a219006208f062090066a2191062090062091066a2192062091062092066a21" - "93062092062093066a2194062093062094066a2195062094062095066a2196062095062096066a2197062096062097" - "066a2198062097062098066a2199062098062099066a219a06209906209a066a219b06209a06209b066a219c06209b" - "06209c066a219d06209c06209d066a219e06209d06209e066a219f06209e06209f066a21a006209f0620a0066a21a1" - "0620a00620a1066a21a20620a10620a2066a21a30620a20620a3066a21a40620a30620a4066a21a50620a40620a506" - "6a21a60620a50620a6066a21a70620a60620a7066a21a80620a70620a8066a21a90620a80620a9066a21aa0620a906" - "20aa066a21ab0620aa0620ab066a21ac0620ab0620ac066a21ad0620ac0620ad066a21ae0620ad0620ae066a21af06" - "20ae0620af066a21b00620af0620b0066a21b10620b00620b1066a21b20620b10620b2066a21b30620b20620b3066a" - "21b40620b30620b4066a21b50620b40620b5066a21b60620b50620b6066a21b70620b60620b7066a21b80620b70620" - "b8066a21b90620b80620b9066a21ba0620b90620ba066a21bb0620ba0620bb066a21bc0620bb0620bc066a21bd0620" - "bc0620bd066a21be0620bd0620be066a21bf0620be0620bf066a21c00620bf0620c0066a21c10620c00620c1066a21" - "c20620c10620c2066a21c30620c20620c3066a21c40620c30620c4066a21c50620c40620c5066a21c60620c50620c6" - "066a21c70620c60620c7066a21c80620c70620c8066a21c90620c80620c9066a21ca0620c90620ca066a21cb0620ca" - "0620cb066a21cc0620cb0620cc066a21cd0620cc0620cd066a21ce0620cd0620ce066a21cf0620ce0620cf066a21d0" - "0620cf0620d0066a21d10620d00620d1066a21d20620d10620d2066a21d30620d20620d3066a21d40620d30620d406" - "6a21d50620d40620d5066a21d60620d50620d6066a21d70620d60620d7066a21d80620d70620d8066a21d90620d806" - "20d9066a21da0620d90620da066a21db0620da0620db066a21dc0620db0620dc066a21dd0620dc0620dd066a21de06" - "20dd0620de066a21df0620de0620df066a21e00620df0620e0066a21e10620e00620e1066a21e20620e10620e2066a" - "21e30620e20620e3066a21e40620e30620e4066a21e50620e40620e5066a21e60620e50620e6066a21e70620e60620" - "e7066a21e80620e70620e8066a21e90620e80620e9066a21ea0620e90620ea066a21eb0620ea0620eb066a21ec0620" - "eb0620ec066a21ed0620ec0620ed066a21ee0620ed0620ee066a21ef0620ee0620ef066a21f00620ef0620f0066a21" - "f10620f00620f1066a21f20620f10620f2066a21f30620f20620f3066a21f40620f30620f4066a21f50620f40620f5" - "066a21f60620f50620f6066a21f70620f60620f7066a21f80620f70620f8066a21f90620f80620f9066a21fa0620f9" - "0620fa066a21fb0620fa0620fb066a21fc0620fb0620fc066a21fd0620fc0620fd066a21fe0620fd0620fe066a21ff" - "0620fe0620ff066a21800720ff062080076a2181072080072081076a2182072081072082076a218307208207208307" - "6a2184072083072084076a2185072084072085076a2186072085072086076a2187072086072087076a218807208707" - "2088076a2189072088072089076a218a07208907208a076a218b07208a07208b076a218c07208b07208c076a218d07" - "208c07208d076a218e07208d07208e076a218f07208e07208f076a219007208f072090076a2191072090072091076a" - "2192072091072092076a2193072092072093076a2194072093072094076a2195072094072095076a21960720950720" - "96076a2197072096072097076a2198072097072098076a2199072098072099076a219a07209907209a076a219b0720" - "9a07209b076a219c07209b07209c076a219d07209c07209d076a219e07209d07209e076a219f07209e07209f076a21" - "a007209f0720a0076a21a10720a00720a1076a21a20720a10720a2076a21a30720a20720a3076a21a40720a30720a4" - "076a21a50720a40720a5076a21a60720a50720a6076a21a70720a60720a7076a21a80720a70720a8076a21a90720a8" - "0720a9076a21aa0720a90720aa076a21ab0720aa0720ab076a21ac0720ab0720ac076a21ad0720ac0720ad076a21ae" - "0720ad0720ae076a21af0720ae0720af076a21b00720af0720b0076a21b10720b00720b1076a21b20720b10720b207" - "6a21b30720b20720b3076a21b40720b30720b4076a21b50720b40720b5076a21b60720b50720b6076a21b70720b607" - "20b7076a21b80720b70720b8076a21b90720b80720b9076a21ba0720b90720ba076a21bb0720ba0720bb076a21bc07" - "20bb0720bc076a21bd0720bc0720bd076a21be0720bd0720be076a21bf0720be0720bf076a21c00720bf0720c0076a" - "21c10720c00720c1076a21c20720c10720c2076a21c30720c20720c3076a21c40720c30720c4076a21c50720c40720" - "c5076a21c60720c50720c6076a21c70720c60720c7076a21c80720c70720c8076a21c90720c80720c9076a21ca0720" - "c90720ca076a21cb0720ca0720cb076a21cc0720cb0720cc076a21cd0720cc0720cd076a21ce0720cd0720ce076a21" - "cf0720ce0720cf076a21d00720cf0720d0076a21d10720d00720d1076a21d20720d10720d2076a21d30720d20720d3" - "076a21d40720d30720d4076a21d50720d40720d5076a21d60720d50720d6076a21d70720d60720d7076a21d80720d7" - "0720d8076a21d90720d80720d9076a21da0720d90720da076a21db0720da0720db076a21dc0720db0720dc076a21dd" - "0720dc0720dd076a21de0720dd0720de076a21df0720de0720df076a21e00720df0720e0076a21e10720e00720e107" - "6a21e20720e10720e2076a21e30720e20720e3076a21e40720e30720e4076a21e50720e40720e5076a21e60720e507" - "20e6076a21e70720e60720e7076a21e80720e70720e8076a21e90720e80720e9076a21ea0720e90720ea076a21eb07" - "20ea0720eb076a21ec0720eb0720ec076a21ed0720ec0720ed076a21ee0720ed0720ee076a21ef0720ee0720ef076a" - "21f00720ef0720f0076a21f10720f00720f1076a21f20720f10720f2076a21f30720f20720f3076a21f40720f30720" - "f4076a21f50720f40720f5076a21f60720f50720f6076a21f70720f60720f7076a21f80720f70720f8076a21f90720" - "f80720f9076a21fa0720f90720fa076a21fb0720fa0720fb076a21fc0720fb0720fc076a21fd0720fc0720fd076a21" - "fe0720fd0720fe076a21ff0720fe0720ff076a21800820ff072080086a2181082080082081086a2182082081082082" - "086a2183082082082083086a2184082083082084086a2185082084082085086a2186082085082086086a2187082086" - "082087086a2188082087082088086a2189082088082089086a218a08208908208a086a218b08208a08208b086a218c" - "08208b08208c086a218d08208c08208d086a218e08208d08208e086a218f08208e08208f086a219008208f08209008" - "6a2191082090082091086a2192082091082092086a2193082092082093086a2194082093082094086a219508209408" - "2095086a2196082095082096086a2197082096082097086a2198082097082098086a2199082098082099086a219a08" - "209908209a086a219b08209a08209b086a219c08209b08209c086a219d08209c08209d086a219e08209d08209e086a" - "219f08209e08209f086a21a008209f0820a0086a21a10820a00820a1086a21a20820a10820a2086a21a30820a20820" - "a3086a21a40820a30820a4086a21a50820a40820a5086a21a60820a50820a6086a21a70820a60820a7086a21a80820" - "a70820a8086a21a90820a80820a9086a21aa0820a90820aa086a21ab0820aa0820ab086a21ac0820ab0820ac086a21" - "ad0820ac0820ad086a21ae0820ad0820ae086a21af0820ae0820af086a21b00820af0820b0086a21b10820b00820b1" - "086a21b20820b10820b2086a21b30820b20820b3086a21b40820b30820b4086a21b50820b40820b5086a21b60820b5" - "0820b6086a21b70820b60820b7086a21b80820b70820b8086a21b90820b80820b9086a21ba0820b90820ba086a21bb" - "0820ba0820bb086a21bc0820bb0820bc086a21bd0820bc0820bd086a21be0820bd0820be086a21bf0820be0820bf08" - "6a21c00820bf0820c0086a21c10820c00820c1086a21c20820c10820c2086a21c30820c20820c3086a21c40820c308" - "20c4086a21c50820c40820c5086a21c60820c50820c6086a21c70820c60820c7086a21c80820c70820c8086a21c908" - "20c80820c9086a21ca0820c90820ca086a21cb0820ca0820cb086a21cc0820cb0820cc086a21cd0820cc0820cd086a" - "21ce0820cd0820ce086a21cf0820ce0820cf086a21d00820cf0820d0086a21d10820d00820d1086a21d20820d10820" - "d2086a21d30820d20820d3086a21d40820d30820d4086a21d50820d40820d5086a21d60820d50820d6086a21d70820" - "d60820d7086a21d80820d70820d8086a21d90820d80820d9086a21da0820d90820da086a21db0820da0820db086a21" - "dc0820db0820dc086a21dd0820dc0820dd086a21de0820dd0820de086a21df0820de0820df086a21e00820df0820e0" - "086a21e10820e00820e1086a21e20820e10820e2086a21e30820e20820e3086a21e40820e30820e4086a21e50820e4" - "0820e5086a21e60820e50820e6086a21e70820e60820e7086a21e80820e70820e8086a21e90820e80820e9086a21ea" - "0820e90820ea086a21eb0820ea0820eb086a21ec0820eb0820ec086a21ed0820ec0820ed086a21ee0820ed0820ee08" - "6a21ef0820ee0820ef086a21f00820ef0820f0086a21f10820f00820f1086a21f20820f10820f2086a21f30820f208" - "20f3086a21f40820f30820f4086a21f50820f40820f5086a21f60820f50820f6086a21f70820f60820f7086a21f808" - "20f70820f8086a21f90820f80820f9086a21fa0820f90820fa086a21fb0820fa0820fb086a21fc0820fb0820fc086a" - "21fd0820fc0820fd086a21fe0820fd0820fe086a21ff0820fe0820ff086a21800920ff082080096a21810920800920" - "81096a2182092081092082096a2183092082092083096a2184092083092084096a2185092084092085096a21860920" - "85092086096a2187092086092087096a2188092087092088096a2189092088092089096a218a09208909208a096a21" - "8b09208a09208b096a218c09208b09208c096a218d09208c09208d096a218e09208d09208e096a218f09208e09208f" - "096a219009208f092090096a2191092090092091096a2192092091092092096a2193092092092093096a2194092093" - "092094096a2195092094092095096a2196092095092096096a2197092096092097096a2198092097092098096a2199" - "092098092099096a219a09209909209a096a219b09209a09209b096a219c09209b09209c096a219d09209c09209d09" - "6a219e09209d09209e096a219f09209e09209f096a21a009209f0920a0096a21a10920a00920a1096a21a20920a109" - "20a2096a21a30920a20920a3096a21a40920a30920a4096a21a50920a40920a5096a21a60920a50920a6096a21a709" - "20a60920a7096a21a80920a70920a8096a21a90920a80920a9096a21aa0920a90920aa096a21ab0920aa0920ab096a" - "21ac0920ab0920ac096a21ad0920ac0920ad096a21ae0920ad0920ae096a21af0920ae0920af096a21b00920af0920" - "b0096a21b10920b00920b1096a21b20920b10920b2096a21b30920b20920b3096a21b40920b30920b4096a21b50920" - "b40920b5096a21b60920b50920b6096a21b70920b60920b7096a21b80920b70920b8096a21b90920b80920b9096a21" - "ba0920b90920ba096a21bb0920ba0920bb096a21bc0920bb0920bc096a21bd0920bc0920bd096a21be0920bd0920be" - "096a21bf0920be0920bf096a21c00920bf0920c0096a21c10920c00920c1096a21c20920c10920c2096a21c30920c2" - "0920c3096a21c40920c30920c4096a21c50920c40920c5096a21c60920c50920c6096a21c70920c60920c7096a21c8" - "0920c70920c8096a21c90920c80920c9096a21ca0920c90920ca096a21cb0920ca0920cb096a21cc0920cb0920cc09" - "6a21cd0920cc0920cd096a21ce0920cd0920ce096a21cf0920ce0920cf096a21d00920cf0920d0096a21d10920d009" - "20d1096a21d20920d10920d2096a21d30920d20920d3096a21d40920d30920d4096a21d50920d40920d5096a21d609" - "20d50920d6096a21d70920d60920d7096a21d80920d70920d8096a21d90920d80920d9096a21da0920d90920da096a" - "21db0920da0920db096a21dc0920db0920dc096a21dd0920dc0920dd096a21de0920dd0920de096a21df0920de0920" - "df096a21e00920df0920e0096a21e10920e00920e1096a21e20920e10920e2096a21e30920e20920e3096a21e40920" - "e30920e4096a21e50920e40920e5096a21e60920e50920e6096a21e70920e60920e7096a21e80920e70920e8096a21" - "e90920e80920e9096a21ea0920e90920ea096a21eb0920ea0920eb096a21ec0920eb0920ec096a21ed0920ec0920ed" - "096a21ee0920ed0920ee096a21ef0920ee0920ef096a21f00920ef0920f0096a21f10920f00920f1096a21f20920f1" - "0920f2096a21f30920f20920f3096a21f40920f30920f4096a21f50920f40920f5096a21f60920f50920f6096a21f7" - "0920f60920f7096a21f80920f70920f8096a21f90920f80920f9096a21fa0920f90920fa096a21fb0920fa0920fb09" - "6a21fc0920fb0920fc096a21fd0920fc0920fd096a21fe0920fd0920fe096a21ff0920fe0920ff096a21800a20ff09" - "20800a6a21810a20800a20810a6a21820a20810a20820a6a21830a20820a20830a6a21840a20830a20840a6a21850a" - "20840a20850a6a21860a20850a20860a6a21870a20860a20870a6a21880a20870a20880a6a21890a20880a20890a6a" - "218a0a20890a208a0a6a218b0a208a0a208b0a6a218c0a208b0a208c0a6a218d0a208c0a208d0a6a218e0a208d0a20" - "8e0a6a218f0a208e0a208f0a6a21900a208f0a20900a6a21910a20900a20910a6a21920a20910a20920a6a21930a20" - "920a20930a6a21940a20930a20940a6a21950a20940a20950a6a21960a20950a20960a6a21970a20960a20970a6a21" - "980a20970a20980a6a21990a20980a20990a6a219a0a20990a209a0a6a219b0a209a0a209b0a6a219c0a209b0a209c" - "0a6a219d0a209c0a209d0a6a219e0a209d0a209e0a6a219f0a209e0a209f0a6a21a00a209f0a20a00a6a21a10a20a0" - "0a20a10a6a21a20a20a10a20a20a6a21a30a20a20a20a30a6a21a40a20a30a20a40a6a21a50a20a40a20a50a6a21a6" - "0a20a50a20a60a6a21a70a20a60a20a70a6a21a80a20a70a20a80a6a21a90a20a80a20a90a6a21aa0a20a90a20aa0a" - "6a21ab0a20aa0a20ab0a6a21ac0a20ab0a20ac0a6a21ad0a20ac0a20ad0a6a21ae0a20ad0a20ae0a6a21af0a20ae0a" - "20af0a6a21b00a20af0a20b00a6a21b10a20b00a20b10a6a21b20a20b10a20b20a6a21b30a20b20a20b30a6a21b40a" - "20b30a20b40a6a21b50a20b40a20b50a6a21b60a20b50a20b60a6a21b70a20b60a20b70a6a21b80a20b70a20b80a6a" - "21b90a20b80a20b90a6a21ba0a20b90a20ba0a6a21bb0a20ba0a20bb0a6a21bc0a20bb0a20bc0a6a21bd0a20bc0a20" - "bd0a6a21be0a20bd0a20be0a6a21bf0a20be0a20bf0a6a21c00a20bf0a20c00a6a21c10a20c00a20c10a6a21c20a20" - "c10a20c20a6a21c30a20c20a20c30a6a21c40a20c30a20c40a6a21c50a20c40a20c50a6a21c60a20c50a20c60a6a21" - "c70a20c60a20c70a6a21c80a20c70a20c80a6a21c90a20c80a20c90a6a21ca0a20c90a20ca0a6a21cb0a20ca0a20cb" - "0a6a21cc0a20cb0a20cc0a6a21cd0a20cc0a20cd0a6a21ce0a20cd0a20ce0a6a21cf0a20ce0a20cf0a6a21d00a20cf" - "0a20d00a6a21d10a20d00a20d10a6a21d20a20d10a20d20a6a21d30a20d20a20d30a6a21d40a20d30a20d40a6a21d5" - "0a20d40a20d50a6a21d60a20d50a20d60a6a21d70a20d60a20d70a6a21d80a20d70a20d80a6a21d90a20d80a20d90a" - "6a21da0a20d90a20da0a6a21db0a20da0a20db0a6a21dc0a20db0a20dc0a6a21dd0a20dc0a20dd0a6a21de0a20dd0a" - "20de0a6a21df0a20de0a20df0a6a21e00a20df0a20e00a6a21e10a20e00a20e10a6a21e20a20e10a20e20a6a21e30a" - "20e20a20e30a6a21e40a20e30a20e40a6a21e50a20e40a20e50a6a21e60a20e50a20e60a6a21e70a20e60a20e70a6a" - "21e80a20e70a20e80a6a21e90a20e80a20e90a6a21ea0a20e90a20ea0a6a21eb0a20ea0a20eb0a6a21ec0a20eb0a20" - "ec0a6a21ed0a20ec0a20ed0a6a21ee0a20ed0a20ee0a6a21ef0a20ee0a20ef0a6a21f00a20ef0a20f00a6a21f10a20" - "f00a20f10a6a21f20a20f10a20f20a6a21f30a20f20a20f30a6a21f40a20f30a20f40a6a21f50a20f40a20f50a6a21" - "f60a20f50a20f60a6a21f70a20f60a20f70a6a21f80a20f70a20f80a6a21f90a20f80a20f90a6a21fa0a20f90a20fa" - "0a6a21fb0a20fa0a20fb0a6a21fc0a20fb0a20fc0a6a21fd0a20fc0a20fd0a6a21fe0a20fd0a20fe0a6a21ff0a20fe" - "0a20ff0a6a21800b20ff0a20800b6a21810b20800b20810b6a21820b20810b20820b6a21830b20820b20830b6a2184" - "0b20830b20840b6a21850b20840b20850b6a21860b20850b20860b6a21870b20860b20870b6a21880b20870b20880b" - "6a21890b20880b20890b6a218a0b20890b208a0b6a218b0b208a0b208b0b6a218c0b208b0b208c0b6a218d0b208c0b" - "208d0b6a218e0b208d0b208e0b6a218f0b208e0b208f0b6a21900b208f0b20900b6a21910b20900b20910b6a21920b" - "20910b20920b6a21930b20920b20930b6a21940b20930b20940b6a21950b20940b20950b6a21960b20950b20960b6a" - "21970b20960b20970b6a21980b20970b20980b6a21990b20980b20990b6a219a0b20990b209a0b6a219b0b209a0b20" - "9b0b6a219c0b209b0b209c0b6a219d0b209c0b209d0b6a219e0b209d0b209e0b6a219f0b209e0b209f0b6a21a00b20" - "9f0b20a00b6a21a10b20a00b20a10b6a21a20b20a10b20a20b6a21a30b20a20b20a30b6a21a40b20a30b20a40b6a21" - "a50b20a40b20a50b6a21a60b20a50b20a60b6a21a70b20a60b20a70b6a21a80b20a70b20a80b6a21a90b20a80b20a9" - "0b6a21aa0b20a90b20aa0b6a21ab0b20aa0b20ab0b6a21ac0b20ab0b20ac0b6a21ad0b20ac0b20ad0b6a21ae0b20ad" - "0b20ae0b6a21af0b20ae0b20af0b6a21b00b20af0b20b00b6a21b10b20b00b20b10b6a21b20b20b10b20b20b6a21b3" - "0b20b20b20b30b6a21b40b20b30b20b40b6a21b50b20b40b20b50b6a21b60b20b50b20b60b6a21b70b20b60b20b70b" - "6a21b80b20b70b20b80b6a21b90b20b80b20b90b6a21ba0b20b90b20ba0b6a21bb0b20ba0b20bb0b6a21bc0b20bb0b" - "20bc0b6a21bd0b20bc0b20bd0b6a21be0b20bd0b20be0b6a21bf0b20be0b20bf0b6a21c00b20bf0b20c00b6a21c10b" - "20c00b20c10b6a21c20b20c10b20c20b6a21c30b20c20b20c30b6a21c40b20c30b20c40b6a21c50b20c40b20c50b6a" - "21c60b20c50b20c60b6a21c70b20c60b20c70b6a21c80b20c70b20c80b6a21c90b20c80b20c90b6a21ca0b20c90b20" - "ca0b6a21cb0b20ca0b20cb0b6a21cc0b20cb0b20cc0b6a21cd0b20cc0b20cd0b6a21ce0b20cd0b20ce0b6a21cf0b20" - "ce0b20cf0b6a21d00b20cf0b20d00b6a21d10b20d00b20d10b6a21d20b20d10b20d20b6a21d30b20d20b20d30b6a21" - "d40b20d30b20d40b6a21d50b20d40b20d50b6a21d60b20d50b20d60b6a21d70b20d60b20d70b6a21d80b20d70b20d8" - "0b6a21d90b20d80b20d90b6a21da0b20d90b20da0b6a21db0b20da0b20db0b6a21dc0b20db0b20dc0b6a21dd0b20dc" - "0b20dd0b6a21de0b20dd0b20de0b6a21df0b20de0b20df0b6a21e00b20df0b20e00b6a21e10b20e00b20e10b6a21e2" - "0b20e10b20e20b6a21e30b20e20b20e30b6a21e40b20e30b20e40b6a21e50b20e40b20e50b6a21e60b20e50b20e60b" - "6a21e70b20e60b20e70b6a21e80b20e70b20e80b6a21e90b20e80b20e90b6a21ea0b20e90b20ea0b6a21eb0b20ea0b" - "20eb0b6a21ec0b20eb0b20ec0b6a21ed0b20ec0b20ed0b6a21ee0b20ed0b20ee0b6a21ef0b20ee0b20ef0b6a21f00b" - "20ef0b20f00b6a21f10b20f00b20f10b6a21f20b20f10b20f20b6a21f30b20f20b20f30b6a21f40b20f30b20f40b6a" - "21f50b20f40b20f50b6a21f60b20f50b20f60b6a21f70b20f60b20f70b6a21f80b20f70b20f80b6a21f90b20f80b20" - "f90b6a21fa0b20f90b20fa0b6a21fb0b20fa0b20fb0b6a21fc0b20fb0b20fc0b6a21fd0b20fc0b20fd0b6a21fe0b20" - "fd0b20fe0b6a21ff0b20fe0b20ff0b6a21800c20ff0b20800c6a21810c20800c20810c6a21820c20810c20820c6a21" - "830c20820c20830c6a21840c20830c20840c6a21850c20840c20850c6a21860c20850c20860c6a21870c20860c2087" - "0c6a21880c20870c20880c6a21890c20880c20890c6a218a0c20890c208a0c6a218b0c208a0c208b0c6a218c0c208b" - "0c208c0c6a218d0c208c0c208d0c6a218e0c208d0c208e0c6a218f0c208e0c208f0c6a21900c208f0c20900c6a2191" - "0c20900c20910c6a21920c20910c20920c6a21930c20920c20930c6a21940c20930c20940c6a21950c20940c20950c" - "6a21960c20950c20960c6a21970c20960c20970c6a21980c20970c20980c6a21990c20980c20990c6a219a0c20990c" - "209a0c6a219b0c209a0c209b0c6a219c0c209b0c209c0c6a219d0c209c0c209d0c6a219e0c209d0c209e0c6a219f0c" - "209e0c209f0c6a21a00c209f0c20a00c6a21a10c20a00c20a10c6a21a20c20a10c20a20c6a21a30c20a20c20a30c6a" - "21a40c20a30c20a40c6a21a50c20a40c20a50c6a21a60c20a50c20a60c6a21a70c20a60c20a70c6a21a80c20a70c20" - "a80c6a21a90c20a80c20a90c6a21aa0c20a90c20aa0c6a21ab0c20aa0c20ab0c6a21ac0c20ab0c20ac0c6a21ad0c20" - "ac0c20ad0c6a21ae0c20ad0c20ae0c6a21af0c20ae0c20af0c6a21b00c20af0c20b00c6a21b10c20b00c20b10c6a21" - "b20c20b10c20b20c6a21b30c20b20c20b30c6a21b40c20b30c20b40c6a21b50c20b40c20b50c6a21b60c20b50c20b6" - "0c6a21b70c20b60c20b70c6a21b80c20b70c20b80c6a21b90c20b80c20b90c6a21ba0c20b90c20ba0c6a21bb0c20ba" - "0c20bb0c6a21bc0c20bb0c20bc0c6a21bd0c20bc0c20bd0c6a21be0c20bd0c20be0c6a21bf0c20be0c20bf0c6a21c0" - "0c20bf0c20c00c6a21c10c20c00c20c10c6a21c20c20c10c20c20c6a21c30c20c20c20c30c6a21c40c20c30c20c40c" - "6a21c50c20c40c20c50c6a21c60c20c50c20c60c6a21c70c20c60c20c70c6a21c80c20c70c20c80c6a21c90c20c80c" - "20c90c6a21ca0c20c90c20ca0c6a21cb0c20ca0c20cb0c6a21cc0c20cb0c20cc0c6a21cd0c20cc0c20cd0c6a21ce0c" - "20cd0c20ce0c6a21cf0c20ce0c20cf0c6a21d00c20cf0c20d00c6a21d10c20d00c20d10c6a21d20c20d10c20d20c6a" - "21d30c20d20c20d30c6a21d40c20d30c20d40c6a21d50c20d40c20d50c6a21d60c20d50c20d60c6a21d70c20d60c20" - "d70c6a21d80c20d70c20d80c6a21d90c20d80c20d90c6a21da0c20d90c20da0c6a21db0c20da0c20db0c6a21dc0c20" - "db0c20dc0c6a21dd0c20dc0c20dd0c6a21de0c20dd0c20de0c6a21df0c20de0c20df0c6a21e00c20df0c20e00c6a21" - "e10c20e00c20e10c6a21e20c20e10c20e20c6a21e30c20e20c20e30c6a21e40c20e30c20e40c6a21e50c20e40c20e5" - "0c6a21e60c20e50c20e60c6a21e70c20e60c20e70c6a21e80c20e70c20e80c6a21e90c20e80c20e90c6a21ea0c20e9" - "0c20ea0c6a21eb0c20ea0c20eb0c6a21ec0c20eb0c20ec0c6a21ed0c20ec0c20ed0c6a21ee0c20ed0c20ee0c6a21ef" - "0c20ee0c20ef0c6a21f00c20ef0c20f00c6a21f10c20f00c20f10c6a21f20c20f10c20f20c6a21f30c20f20c20f30c" - "6a21f40c20f30c20f40c6a21f50c20f40c20f50c6a21f60c20f50c20f60c6a21f70c20f60c20f70c6a21f80c20f70c" - "20f80c6a21f90c20f80c20f90c6a21fa0c20f90c20fa0c6a21fb0c20fa0c20fb0c6a21fc0c20fb0c20fc0c6a21fd0c" - "20fc0c20fd0c6a21fe0c20fd0c20fe0c6a21ff0c20fe0c20ff0c6a21800d20ff0c20800d6a21810d20800d20810d6a" - "21820d20810d20820d6a21830d20820d20830d6a21840d20830d20840d6a21850d20840d20850d6a21860d20850d20" - "860d6a21870d20860d20870d6a21880d20870d20880d6a21890d20880d20890d6a218a0d20890d208a0d6a218b0d20" - "8a0d208b0d6a218c0d208b0d208c0d6a218d0d208c0d208d0d6a218e0d208d0d208e0d6a218f0d208e0d208f0d6a21" - "900d208f0d20900d6a21910d20900d20910d6a21920d20910d20920d6a21930d20920d20930d6a21940d20930d2094" - "0d6a21950d20940d20950d6a21960d20950d20960d6a21970d20960d20970d6a21980d20970d20980d6a21990d2098" - "0d20990d6a219a0d20990d209a0d6a219b0d209a0d209b0d6a219c0d209b0d209c0d6a219d0d209c0d209d0d6a219e" - "0d209d0d209e0d6a219f0d209e0d209f0d6a21a00d209f0d20a00d6a21a10d20a00d20a10d6a21a20d20a10d20a20d" - "6a21a30d20a20d20a30d6a21a40d20a30d20a40d6a21a50d20a40d20a50d6a21a60d20a50d20a60d6a21a70d20a60d" - "20a70d6a21a80d20a70d20a80d6a21a90d20a80d20a90d6a21aa0d20a90d20aa0d6a21ab0d20aa0d20ab0d6a21ac0d" - "20ab0d20ac0d6a21ad0d20ac0d20ad0d6a21ae0d20ad0d20ae0d6a21af0d20ae0d20af0d6a21b00d20af0d20b00d6a" - "21b10d20b00d20b10d6a21b20d20b10d20b20d6a21b30d20b20d20b30d6a21b40d20b30d20b40d6a21b50d20b40d20" - "b50d6a21b60d20b50d20b60d6a21b70d20b60d20b70d6a21b80d20b70d20b80d6a21b90d20b80d20b90d6a21ba0d20" - "b90d20ba0d6a21bb0d20ba0d20bb0d6a21bc0d20bb0d20bc0d6a21bd0d20bc0d20bd0d6a21be0d20bd0d20be0d6a21" - "bf0d20be0d20bf0d6a21c00d20bf0d20c00d6a21c10d20c00d20c10d6a21c20d20c10d20c20d6a21c30d20c20d20c3" - "0d6a21c40d20c30d20c40d6a21c50d20c40d20c50d6a21c60d20c50d20c60d6a21c70d20c60d20c70d6a21c80d20c7" - "0d20c80d6a21c90d20c80d20c90d6a21ca0d20c90d20ca0d6a21cb0d20ca0d20cb0d6a21cc0d20cb0d20cc0d6a21cd" - "0d20cc0d20cd0d6a21ce0d20cd0d20ce0d6a21cf0d20ce0d20cf0d6a21d00d20cf0d20d00d6a21d10d20d00d20d10d" - "6a21d20d20d10d20d20d6a21d30d20d20d20d30d6a21d40d20d30d20d40d6a21d50d20d40d20d50d6a21d60d20d50d" - "20d60d6a21d70d20d60d20d70d6a21d80d20d70d20d80d6a21d90d20d80d20d90d6a21da0d20d90d20da0d6a21db0d" - "20da0d20db0d6a21dc0d20db0d20dc0d6a21dd0d20dc0d20dd0d6a21de0d20dd0d20de0d6a21df0d20de0d20df0d6a" - "21e00d20df0d20e00d6a21e10d20e00d20e10d6a21e20d20e10d20e20d6a21e30d20e20d20e30d6a21e40d20e30d20" - "e40d6a21e50d20e40d20e50d6a21e60d20e50d20e60d6a21e70d20e60d20e70d6a21e80d20e70d20e80d6a21e90d20" - "e80d20e90d6a21ea0d20e90d20ea0d6a21eb0d20ea0d20eb0d6a21ec0d20eb0d20ec0d6a21ed0d20ec0d20ed0d6a21" - "ee0d20ed0d20ee0d6a21ef0d20ee0d20ef0d6a21f00d20ef0d20f00d6a21f10d20f00d20f10d6a21f20d20f10d20f2" - "0d6a21f30d20f20d20f30d6a21f40d20f30d20f40d6a21f50d20f40d20f50d6a21f60d20f50d20f60d6a21f70d20f6" - "0d20f70d6a21f80d20f70d20f80d6a21f90d20f80d20f90d6a21fa0d20f90d20fa0d6a21fb0d20fa0d20fb0d6a21fc" - "0d20fb0d20fc0d6a21fd0d20fc0d20fd0d6a21fe0d20fd0d20fe0d6a21ff0d20fe0d20ff0d6a21800e20ff0d20800e" - "6a21810e20800e20810e6a21820e20810e20820e6a21830e20820e20830e6a21840e20830e20840e6a21850e20840e" - "20850e6a21860e20850e20860e6a21870e20860e20870e6a21880e20870e20880e6a21890e20880e20890e6a218a0e" - "20890e208a0e6a218b0e208a0e208b0e6a218c0e208b0e208c0e6a218d0e208c0e208d0e6a218e0e208d0e208e0e6a" - "218f0e208e0e208f0e6a21900e208f0e20900e6a21910e20900e20910e6a21920e20910e20920e6a21930e20920e20" - "930e6a21940e20930e20940e6a21950e20940e20950e6a21960e20950e20960e6a21970e20960e20970e6a21980e20" - "970e20980e6a21990e20980e20990e6a219a0e20990e209a0e6a219b0e209a0e209b0e6a219c0e209b0e209c0e6a21" - "9d0e209c0e209d0e6a219e0e209d0e209e0e6a219f0e209e0e209f0e6a21a00e209f0e20a00e6a21a10e20a00e20a1" - "0e6a21a20e20a10e20a20e6a21a30e20a20e20a30e6a21a40e20a30e20a40e6a21a50e20a40e20a50e6a21a60e20a5" - "0e20a60e6a21a70e20a60e20a70e6a21a80e20a70e20a80e6a21a90e20a80e20a90e6a21aa0e20a90e20aa0e6a21ab" - "0e20aa0e20ab0e6a21ac0e20ab0e20ac0e6a21ad0e20ac0e20ad0e6a21ae0e20ad0e20ae0e6a21af0e20ae0e20af0e" - "6a21b00e20af0e20b00e6a21b10e20b00e20b10e6a21b20e20b10e20b20e6a21b30e20b20e20b30e6a21b40e20b30e" - "20b40e6a21b50e20b40e20b50e6a21b60e20b50e20b60e6a21b70e20b60e20b70e6a21b80e20b70e20b80e6a21b90e" - "20b80e20b90e6a21ba0e20b90e20ba0e6a21bb0e20ba0e20bb0e6a21bc0e20bb0e20bc0e6a21bd0e20bc0e20bd0e6a" - "21be0e20bd0e20be0e6a21bf0e20be0e20bf0e6a21c00e20bf0e20c00e6a21c10e20c00e20c10e6a21c20e20c10e20" - "c20e6a21c30e20c20e20c30e6a21c40e20c30e20c40e6a21c50e20c40e20c50e6a21c60e20c50e20c60e6a21c70e20" - "c60e20c70e6a21c80e20c70e20c80e6a21c90e20c80e20c90e6a21ca0e20c90e20ca0e6a21cb0e20ca0e20cb0e6a21" - "cc0e20cb0e20cc0e6a21cd0e20cc0e20cd0e6a21ce0e20cd0e20ce0e6a21cf0e20ce0e20cf0e6a21d00e20cf0e20d0" - "0e6a21d10e20d00e20d10e6a21d20e20d10e20d20e6a21d30e20d20e20d30e6a21d40e20d30e20d40e6a21d50e20d4" - "0e20d50e6a21d60e20d50e20d60e6a21d70e20d60e20d70e6a21d80e20d70e20d80e6a21d90e20d80e20d90e6a21da" - "0e20d90e20da0e6a21db0e20da0e20db0e6a21dc0e20db0e20dc0e6a21dd0e20dc0e20dd0e6a21de0e20dd0e20de0e" - "6a21df0e20de0e20df0e6a21e00e20df0e20e00e6a21e10e20e00e20e10e6a21e20e20e10e20e20e6a21e30e20e20e" - "20e30e6a21e40e20e30e20e40e6a21e50e20e40e20e50e6a21e60e20e50e20e60e6a21e70e20e60e20e70e6a21e80e" - "20e70e20e80e6a21e90e20e80e20e90e6a21ea0e20e90e20ea0e6a21eb0e20ea0e20eb0e6a21ec0e20eb0e20ec0e6a" - "21ed0e20ec0e20ed0e6a21ee0e20ed0e20ee0e6a21ef0e20ee0e20ef0e6a21f00e20ef0e20f00e6a21f10e20f00e20" - "f10e6a21f20e20f10e20f20e6a21f30e20f20e20f30e6a21f40e20f30e20f40e6a21f50e20f40e20f50e6a21f60e20" - "f50e20f60e6a21f70e20f60e20f70e6a21f80e20f70e20f80e6a21f90e20f80e20f90e6a21fa0e20f90e20fa0e6a21" - "fb0e20fa0e20fb0e6a21fc0e20fb0e20fc0e6a21fd0e20fc0e20fd0e6a21fe0e20fd0e20fe0e6a21ff0e20fe0e20ff" - "0e6a21800f20ff0e20800f6a21810f20800f20810f6a21820f20810f20820f6a21830f20820f20830f6a21840f2083" - "0f20840f6a21850f20840f20850f6a21860f20850f20860f6a21870f20860f20870f6a21880f20870f20880f6a2189" - "0f20880f20890f6a218a0f20890f208a0f6a218b0f208a0f208b0f6a218c0f208b0f208c0f6a218d0f208c0f208d0f" - "6a218e0f208d0f208e0f6a218f0f208e0f208f0f6a21900f208f0f20900f6a21910f20900f20910f6a21920f20910f" - "20920f6a21930f20920f20930f6a21940f20930f20940f6a21950f20940f20950f6a21960f20950f20960f6a21970f" - "20960f20970f6a21980f20970f20980f6a21990f20980f20990f6a219a0f20990f209a0f6a219b0f209a0f209b0f6a" - "219c0f209b0f209c0f6a219d0f209c0f209d0f6a219e0f209d0f209e0f6a219f0f209e0f209f0f6a21a00f209f0f20" - "a00f6a21a10f20a00f20a10f6a21a20f20a10f20a20f6a21a30f20a20f20a30f6a21a40f20a30f20a40f6a21a50f20" - "a40f20a50f6a21a60f20a50f20a60f6a21a70f20a60f20a70f6a21a80f20a70f20a80f6a21a90f20a80f20a90f6a21" - "aa0f20a90f20aa0f6a21ab0f20aa0f20ab0f6a21ac0f20ab0f20ac0f6a21ad0f20ac0f20ad0f6a21ae0f20ad0f20ae" - "0f6a21af0f20ae0f20af0f6a21b00f20af0f20b00f6a21b10f20b00f20b10f6a21b20f20b10f20b20f6a21b30f20b2" - "0f20b30f6a21b40f20b30f20b40f6a21b50f20b40f20b50f6a21b60f20b50f20b60f6a21b70f20b60f20b70f6a21b8" - "0f20b70f20b80f6a21b90f20b80f20b90f6a21ba0f20b90f20ba0f6a21bb0f20ba0f20bb0f6a21bc0f20bb0f20bc0f" - "6a21bd0f20bc0f20bd0f6a21be0f20bd0f20be0f6a21bf0f20be0f20bf0f6a21c00f20bf0f20c00f6a21c10f20c00f" - "20c10f6a21c20f20c10f20c20f6a21c30f20c20f20c30f6a21c40f20c30f20c40f6a21c50f20c40f20c50f6a21c60f" - "20c50f20c60f6a21c70f20c60f20c70f6a21c80f20c70f20c80f6a21c90f20c80f20c90f6a21ca0f20c90f20ca0f6a" - "21cb0f20ca0f20cb0f6a21cc0f20cb0f20cc0f6a21cd0f20cc0f20cd0f6a21ce0f20cd0f20ce0f6a21cf0f20ce0f20" - "cf0f6a21d00f20cf0f20d00f6a21d10f20d00f20d10f6a21d20f20d10f20d20f6a21d30f20d20f20d30f6a21d40f20" - "d30f20d40f6a21d50f20d40f20d50f6a21d60f20d50f20d60f6a21d70f20d60f20d70f6a21d80f20d70f20d80f6a21" - "d90f20d80f20d90f6a21da0f20d90f20da0f6a21db0f20da0f20db0f6a21dc0f20db0f20dc0f6a21dd0f20dc0f20dd" - "0f6a21de0f20dd0f20de0f6a21df0f20de0f20df0f6a21e00f20df0f20e00f6a21e10f20e00f20e10f6a21e20f20e1" - "0f20e20f6a21e30f20e20f20e30f6a21e40f20e30f20e40f6a21e50f20e40f20e50f6a21e60f20e50f20e60f6a21e7" - "0f20e60f20e70f6a21e80f20e70f20e80f6a21e90f20e80f20e90f6a21ea0f20e90f20ea0f6a21eb0f20ea0f20eb0f" - "6a21ec0f20eb0f20ec0f6a21ed0f20ec0f20ed0f6a21ee0f20ed0f20ee0f6a21ef0f20ee0f20ef0f6a21f00f20ef0f" - "20f00f6a21f10f20f00f20f10f6a21f20f20f10f20f20f6a21f30f20f20f20f30f6a21f40f20f30f20f40f6a21f50f" - "20f40f20f50f6a21f60f20f50f20f60f6a21f70f20f60f20f70f6a21f80f20f70f20f80f6a21f90f20f80f20f90f6a" - "21fa0f20f90f20fa0f6a21fb0f20fa0f20fb0f6a21fc0f20fb0f20fc0f6a21fd0f20fc0f20fd0f6a21fe0f20fd0f20" - "fe0f6a21ff0f20fe0f20ff0f6a21801020ff0f2080106a2181102080102081106a2182102081102082106a21831020" - "82102083106a2184102083102084106a2185102084102085106a2186102085102086106a2187102086102087106a21" - "88102087102088106a2189102088102089106a218a10208910208a106a218b10208a10208b106a218c10208b10208c" - "106a218d10208c10208d106a218e10208d10208e106a218f10208e10208f106a219010208f102090106a2191102090" - "102091106a2192102091102092106a2193102092102093106a2194102093102094106a2195102094102095106a2196" - "102095102096106a2197102096102097106a2198102097102098106a2199102098102099106a219a10209910209a10" - "6a219b10209a10209b106a219c10209b10209c106a219d10209c10209d106a219e10209d10209e106a219f10209e10" - "209f106a21a010209f1020a0106a21a11020a01020a1106a21a21020a11020a2106a21a31020a21020a3106a21a410" - "20a31020a4106a21a51020a41020a5106a21a61020a51020a6106a21a71020a61020a7106a21a81020a71020a8106a" - "21a91020a81020a9106a21aa1020a91020aa106a21ab1020aa1020ab106a21ac1020ab1020ac106a21ad1020ac1020" - "ad106a21ae1020ad1020ae106a21af1020ae1020af106a21b01020af1020b0106a21b11020b01020b1106a21b21020" - "b11020b2106a21b31020b21020b3106a21b41020b31020b4106a21b51020b41020b5106a21b61020b51020b6106a21" - "b71020b61020b7106a21b81020b71020b8106a21b91020b81020b9106a21ba1020b91020ba106a21bb1020ba1020bb" - "106a21bc1020bb1020bc106a21bd1020bc1020bd106a21be1020bd1020be106a21bf1020be1020bf106a21c01020bf" - "1020c0106a21c11020c01020c1106a21c21020c11020c2106a21c31020c21020c3106a21c41020c31020c4106a21c5" - "1020c41020c5106a21c61020c51020c6106a21c71020c61020c7106a21c81020c71020c8106a21c91020c81020c910" - "6a21ca1020c91020ca106a21cb1020ca1020cb106a21cc1020cb1020cc106a21cd1020cc1020cd106a21ce1020cd10" - "20ce106a21cf1020ce1020cf106a21d01020cf1020d0106a21d11020d01020d1106a21d21020d11020d2106a21d310" - "20d21020d3106a21d41020d31020d4106a21d51020d41020d5106a21d61020d51020d6106a21d71020d61020d7106a" - "21d81020d71020d8106a21d91020d81020d9106a21da1020d91020da106a21db1020da1020db106a21dc1020db1020" - "dc106a21dd1020dc1020dd106a21de1020dd1020de106a21df1020de1020df106a21e01020df1020e0106a21e11020" - "e01020e1106a21e21020e11020e2106a21e31020e21020e3106a21e41020e31020e4106a21e51020e41020e5106a21" - "e61020e51020e6106a21e71020e61020e7106a21e81020e71020e8106a21e91020e81020e9106a21ea1020e91020ea" - "106a21eb1020ea1020eb106a21ec1020eb1020ec106a21ed1020ec1020ed106a21ee1020ed1020ee106a21ef1020ee" - "1020ef106a21f01020ef1020f0106a21f11020f01020f1106a21f21020f11020f2106a21f31020f21020f3106a21f4" - "1020f31020f4106a21f51020f41020f5106a21f61020f51020f6106a21f71020f61020f7106a21f81020f71020f810" - "6a21f91020f81020f9106a21fa1020f91020fa106a21fb1020fa1020fb106a21fc1020fb1020fc106a21fd1020fc10" - "20fd106a21fe1020fd1020fe106a21ff1020fe1020ff106a21801120ff102080116a2181112080112081116a218211" - "2081112082116a2183112082112083116a2184112083112084116a2185112084112085116a2186112085112086116a" - "2187112086112087116a2188112087112088116a2189112088112089116a218a11208911208a116a218b11208a1120" - "8b116a218c11208b11208c116a218d11208c11208d116a218e11208d11208e116a218f11208e11208f116a21901120" - "8f112090116a2191112090112091116a2192112091112092116a2193112092112093116a2194112093112094116a21" - "95112094112095116a2196112095112096116a2197112096112097116a2198112097112098116a2199112098112099" - "116a219a11209911209a116a219b11209a11209b116a219c11209b11209c116a219d11209c11209d116a219e11209d" - "11209e116a219f11209e11209f116a21a011209f1120a0116a21a11120a01120a1116a21a21120a11120a2116a21a3" - "1120a21120a3116a21a41120a31120a4116a21a51120a41120a5116a21a61120a51120a6116a21a71120a61120a711" - "6a21a81120a71120a8116a21a91120a81120a9116a21aa1120a91120aa116a21ab1120aa1120ab116a21ac1120ab11" - "20ac116a21ad1120ac1120ad116a21ae1120ad1120ae116a21af1120ae1120af116a21b01120af1120b0116a21b111" - "20b01120b1116a21b21120b11120b2116a21b31120b21120b3116a21b41120b31120b4116a21b51120b41120b5116a" - "21b61120b51120b6116a21b71120b61120b7116a21b81120b71120b8116a21b91120b81120b9116a21ba1120b91120" - "ba116a21bb1120ba1120bb116a21bc1120bb1120bc116a21bd1120bc1120bd116a21be1120bd1120be116a21bf1120" - "be1120bf116a21c01120bf1120c0116a21c11120c01120c1116a21c21120c11120c2116a21c31120c21120c3116a21" - "c41120c31120c4116a21c51120c41120c5116a21c61120c51120c6116a21c71120c61120c7116a21c81120c71120c8" - "116a21c91120c81120c9116a21ca1120c91120ca116a21cb1120ca1120cb116a21cc1120cb1120cc116a21cd1120cc" - "1120cd116a21ce1120cd1120ce116a21cf1120ce1120cf116a21d01120cf1120d0116a21d11120d01120d1116a21d2" - "1120d11120d2116a21d31120d21120d3116a21d41120d31120d4116a21d51120d41120d5116a21d61120d51120d611" - "6a21d71120d61120d7116a21d81120d71120d8116a21d91120d81120d9116a21da1120d91120da116a21db1120da11" - "20db116a21dc1120db1120dc116a21dd1120dc1120dd116a21de1120dd1120de116a21df1120de1120df116a21e011" - "20df1120e0116a21e11120e01120e1116a21e21120e11120e2116a21e31120e21120e3116a21e41120e31120e4116a" - "21e51120e41120e5116a21e61120e51120e6116a21e71120e61120e7116a21e81120e71120e8116a21e91120e81120" - "e9116a21ea1120e91120ea116a21eb1120ea1120eb116a21ec1120eb1120ec116a21ed1120ec1120ed116a21ee1120" - "ed1120ee116a21ef1120ee1120ef116a21f01120ef1120f0116a21f11120f01120f1116a21f21120f11120f2116a21" - "f31120f21120f3116a21f41120f31120f4116a21f51120f41120f5116a21f61120f51120f6116a21f71120f61120f7" - "116a21f81120f71120f8116a21f91120f81120f9116a21fa1120f91120fa116a21fb1120fa1120fb116a21fc1120fb" - "1120fc116a21fd1120fc1120fd116a21fe1120fd1120fe116a21ff1120fe1120ff116a21801220ff112080126a2181" - "122080122081126a2182122081122082126a2183122082122083126a2184122083122084126a218512208412208512" - "6a2186122085122086126a2187122086122087126a2188122087122088126a2189122088122089126a218a12208912" - "208a126a218b12208a12208b126a218c12208b12208c126a218d12208c12208d126a218e12208d12208e126a218f12" - "208e12208f126a219012208f122090126a2191122090122091126a2192122091122092126a2193122092122093126a" - "2194122093122094126a2195122094122095126a2196122095122096126a2197122096122097126a21981220971220" - "98126a2199122098122099126a219a12209912209a126a219b12209a12209b126a219c12209b12209c126a219d1220" - "9c12209d126a219e12209d12209e126a219f12209e12209f126a21a012209f1220a0126a21a11220a01220a1126a21" - "a21220a11220a2126a21a31220a21220a3126a21a41220a31220a4126a21a51220a41220a5126a21a61220a51220a6" - "126a21a71220a61220a7126a21a81220a71220a8126a21a91220a81220a9126a21aa1220a91220aa126a21ab1220aa" - "1220ab126a21ac1220ab1220ac126a21ad1220ac1220ad126a21ae1220ad1220ae126a21af1220ae1220af126a21b0" - "1220af1220b0126a21b11220b01220b1126a21b21220b11220b2126a21b31220b21220b3126a21b41220b31220b412" - "6a21b51220b41220b5126a21b61220b51220b6126a21b71220b61220b7126a21b81220b71220b8126a21b91220b812" - "20b9126a21ba1220b91220ba126a21bb1220ba1220bb126a21bc1220bb1220bc126a21bd1220bc1220bd126a21be12" - "20bd1220be126a21bf1220be1220bf126a21c01220bf1220c0126a21c11220c01220c1126a21c21220c11220c2126a" - "21c31220c21220c3126a21c41220c31220c4126a21c51220c41220c5126a21c61220c51220c6126a21c71220c61220" - "c7126a21c81220c71220c8126a21c91220c81220c9126a21ca1220c91220ca126a21cb1220ca1220cb126a21cc1220" - "cb1220cc126a21cd1220cc1220cd126a21ce1220cd1220ce126a21cf1220ce1220cf126a21d01220cf1220d0126a21" - "d11220d01220d1126a21d21220d11220d2126a21d31220d21220d3126a21d41220d31220d4126a21d51220d41220d5" - "126a21d61220d51220d6126a21d71220d61220d7126a21d81220d71220d8126a21d91220d81220d9126a21da1220d9" - "1220da126a21db1220da1220db126a21dc1220db1220dc126a21dd1220dc1220dd126a21de1220dd1220de126a21df" - "1220de1220df126a21e01220df1220e0126a21e11220e01220e1126a21e21220e11220e2126a21e31220e21220e312" - "6a21e41220e31220e4126a21e51220e41220e5126a21e61220e51220e6126a21e71220e61220e7126a21e81220e712" - "20e8126a21e91220e81220e9126a21ea1220e91220ea126a21eb1220ea1220eb126a21ec1220eb1220ec126a21ed12" - "20ec1220ed126a21ee1220ed1220ee126a21ef1220ee1220ef126a21f01220ef1220f0126a21f11220f01220f1126a" - "21f21220f11220f2126a21f31220f21220f3126a21f41220f31220f4126a21f51220f41220f5126a21f61220f51220" - "f6126a21f71220f61220f7126a21f81220f71220f8126a21f91220f81220f9126a21fa1220f91220fa126a21fb1220" - "fa1220fb126a21fc1220fb1220fc126a21fd1220fc1220fd126a21fe1220fd1220fe126a21ff1220fe1220ff126a21" - "801320ff122080136a2181132080132081136a2182132081132082136a2183132082132083136a2184132083132084" - "136a2185132084132085136a2186132085132086136a2187132086132087136a2188132087132088136a2189132088" - "132089136a218a13208913208a136a218b13208a13208b136a218c13208b13208c136a218d13208c13208d136a218e" - "13208d13208e136a218f13208e13208f136a219013208f132090136a2191132090132091136a219213209113209213" - "6a2193132092132093136a2194132093132094136a2195132094132095136a2196132095132096136a219713209613" - "2097136a2198132097132098136a2199132098132099136a219a13209913209a136a219b13209a13209b136a219c13" - "209b13209c136a219d13209c13209d136a219e13209d13209e136a219f13209e13209f136a21a013209f1320a0136a" - "21a11320a01320a1136a21a21320a11320a2136a21a31320a21320a3136a21a41320a31320a4136a21a51320a41320" - "a5136a21a61320a51320a6136a21a71320a61320a7136a21a81320a71320a8136a21a91320a81320a9136a21aa1320" - "a91320aa136a21ab1320aa1320ab136a21ac1320ab1320ac136a21ad1320ac1320ad136a21ae1320ad1320ae136a21" - "af1320ae1320af136a21b01320af1320b0136a21b11320b01320b1136a21b21320b11320b2136a21b31320b21320b3" - "136a21b41320b31320b4136a21b51320b41320b5136a21b61320b51320b6136a21b71320b61320b7136a21b81320b7" - "1320b8136a21b91320b81320b9136a21ba1320b91320ba136a21bb1320ba1320bb136a21bc1320bb1320bc136a21bd" - "1320bc1320bd136a21be1320bd1320be136a21bf1320be1320bf136a21c01320bf1320c0136a21c11320c01320c113" - "6a21c21320c11320c2136a21c31320c21320c3136a21c41320c31320c4136a21c51320c41320c5136a21c61320c513" - "20c6136a21c71320c61320c7136a21c81320c71320c8136a21c91320c81320c9136a21ca1320c91320ca136a21cb13" - "20ca1320cb136a21cc1320cb1320cc136a21cd1320cc1320cd136a21ce1320cd1320ce136a21cf1320ce1320cf136a" - "21d01320cf1320d0136a21d11320d01320d1136a21d21320d11320d2136a21d31320d21320d3136a21d41320d31320" - "d4136a21d51320d41320d5136a21d61320d51320d6136a21d71320d61320d7136a21d81320d71320d8136a21d91320" - "d81320d9136a21da1320d91320da136a21db1320da1320db136a21dc1320db1320dc136a21dd1320dc1320dd136a21" - "de1320dd1320de136a21df1320de1320df136a21e01320df1320e0136a21e11320e01320e1136a21e21320e11320e2" - "136a21e31320e21320e3136a21e41320e31320e4136a21e51320e41320e5136a21e61320e51320e6136a21e71320e6" - "1320e7136a21e81320e71320e8136a21e91320e81320e9136a21ea1320e91320ea136a21eb1320ea1320eb136a21ec" - "1320eb1320ec136a21ed1320ec1320ed136a21ee1320ed1320ee136a21ef1320ee1320ef136a21f01320ef1320f013" - "6a21f11320f01320f1136a21f21320f11320f2136a21f31320f21320f3136a21f41320f31320f4136a21f51320f413" - "20f5136a21f61320f51320f6136a21f71320f61320f7136a21f81320f71320f8136a21f91320f81320f9136a21fa13" - "20f91320fa136a21fb1320fa1320fb136a21fc1320fb1320fc136a21fd1320fc1320fd136a21fe1320fd1320fe136a" - "21ff1320fe1320ff136a21801420ff132080146a2181142080142081146a2182142081142082146a21831420821420" - "83146a2184142083142084146a2185142084142085146a2186142085142086146a2187142086142087146a21881420" - "87142088146a2189142088142089146a218a14208914208a146a218b14208a14208b146a218c14208b14208c146a21" - "8d14208c14208d146a218e14208d14208e146a218f14208e14208f146a219014208f142090146a2191142090142091" - "146a2192142091142092146a2193142092142093146a2194142093142094146a2195142094142095146a2196142095" - "142096146a2197142096142097146a2198142097142098146a2199142098142099146a219a14209914209a146a219b" - "14209a14209b146a219c14209b14209c146a219d14209c14209d146a219e14209d14209e146a219f14209e14209f14" - "6a21a014209f1420a0146a21a11420a01420a1146a21a21420a11420a2146a21a31420a21420a3146a21a41420a314" - "20a4146a21a51420a41420a5146a21a61420a51420a6146a21a71420a61420a7146a21a81420a71420a8146a21a914" - "20a81420a9146a21aa1420a91420aa146a21ab1420aa1420ab146a21ac1420ab1420ac146a21ad1420ac1420ad146a" - "21ae1420ad1420ae146a21af1420ae1420af146a21b01420af1420b0146a21b11420b01420b1146a21b21420b11420" - "b2146a21b31420b21420b3146a21b41420b31420b4146a21b51420b41420b5146a21b61420b51420b6146a21b71420" - "b61420b7146a21b81420b71420b8146a21b91420b81420b9146a21ba1420b91420ba146a21bb1420ba1420bb146a21" - "bc1420bb1420bc146a21bd1420bc1420bd146a21be1420bd1420be146a21bf1420be1420bf146a21c01420bf1420c0" - "146a21c11420c01420c1146a21c21420c11420c2146a21c31420c21420c3146a21c41420c31420c4146a21c51420c4" - "1420c5146a21c61420c51420c6146a21c71420c61420c7146a21c81420c71420c8146a21c91420c81420c9146a21ca" - "1420c91420ca146a21cb1420ca1420cb146a21cc1420cb1420cc146a21cd1420cc1420cd146a21ce1420cd1420ce14" - "6a21cf1420ce1420cf146a21d01420cf1420d0146a21d11420d01420d1146a21d21420d11420d2146a21d31420d214" - "20d3146a21d41420d31420d4146a21d51420d41420d5146a21d61420d51420d6146a21d71420d61420d7146a21d814" - "20d71420d8146a21d91420d81420d9146a21da1420d91420da146a21db1420da1420db146a21dc1420db1420dc146a" - "21dd1420dc1420dd146a21de1420dd1420de146a21df1420de1420df146a21e01420df1420e0146a21e11420e01420" - "e1146a21e21420e11420e2146a21e31420e21420e3146a21e41420e31420e4146a21e51420e41420e5146a21e61420" - "e51420e6146a21e71420e61420e7146a21e81420e71420e8146a21e91420e81420e9146a21ea1420e91420ea146a21" - "eb1420ea1420eb146a21ec1420eb1420ec146a21ed1420ec1420ed146a21ee1420ed1420ee146a21ef1420ee1420ef" - "146a21f01420ef1420f0146a21f11420f01420f1146a21f21420f11420f2146a21f31420f21420f3146a21f41420f3" - "1420f4146a21f51420f41420f5146a21f61420f51420f6146a21f71420f61420f7146a21f81420f71420f8146a21f9" - "1420f81420f9146a21fa1420f91420fa146a21fb1420fa1420fb146a21fc1420fb1420fc146a21fd1420fc1420fd14" - "6a21fe1420fd1420fe146a21ff1420fe1420ff146a21801520ff142080156a2181152080152081156a218215208115" - "2082156a2183152082152083156a2184152083152084156a2185152084152085156a2186152085152086156a218715" - "2086152087156a2188152087152088156a2189152088152089156a218a15208915208a156a218b15208a15208b156a" - "218c15208b15208c156a218d15208c15208d156a218e15208d15208e156a218f15208e15208f156a219015208f1520" - "90156a2191152090152091156a2192152091152092156a2193152092152093156a2194152093152094156a21951520" - "94152095156a2196152095152096156a2197152096152097156a2198152097152098156a2199152098152099156a21" - "9a15209915209a156a219b15209a15209b156a219c15209b15209c156a219d15209c15209d156a219e15209d15209e" - "156a219f15209e15209f156a21a015209f1520a0156a21a11520a01520a1156a21a21520a11520a2156a21a31520a2" - "1520a3156a21a41520a31520a4156a21a51520a41520a5156a21a61520a51520a6156a21a71520a61520a7156a21a8" - "1520a71520a8156a21a91520a81520a9156a21aa1520a91520aa156a21ab1520aa1520ab156a21ac1520ab1520ac15" - "6a21ad1520ac1520ad156a21ae1520ad1520ae156a21af1520ae1520af156a21b01520af1520b0156a21b11520b015" - "20b1156a21b21520b11520b2156a21b31520b21520b3156a21b41520b31520b4156a21b51520b41520b5156a21b615" - "20b51520b6156a21b71520b61520b7156a21b81520b71520b8156a21b91520b81520b9156a21ba1520b91520ba156a" - "21bb1520ba1520bb156a21bc1520bb1520bc156a21bd1520bc1520bd156a21be1520bd1520be156a21bf1520be1520" - "bf156a21c01520bf1520c0156a21c11520c01520c1156a21c21520c11520c2156a21c31520c21520c3156a21c41520" - "c31520c4156a21c51520c41520c5156a21c61520c51520c6156a21c71520c61520c7156a21c81520c71520c8156a21" - "c91520c81520c9156a21ca1520c91520ca156a21cb1520ca1520cb156a21cc1520cb1520cc156a21cd1520cc1520cd" - "156a21ce1520cd1520ce156a21cf1520ce1520cf156a21d01520cf1520d0156a21d11520d01520d1156a21d21520d1" - "1520d2156a21d31520d21520d3156a21d41520d31520d4156a21d51520d41520d5156a21d61520d51520d6156a21d7" - "1520d61520d7156a21d81520d71520d8156a21d91520d81520d9156a21da1520d91520da156a21db1520da1520db15" - "6a21dc1520db1520dc156a21dd1520dc1520dd156a21de1520dd1520de156a21df1520de1520df156a21e01520df15" - "20e0156a21e11520e01520e1156a21e21520e11520e2156a21e31520e21520e3156a21e41520e31520e4156a21e515" - "20e41520e5156a21e61520e51520e6156a21e71520e61520e7156a21e81520e71520e8156a21e91520e81520e9156a" - "21ea1520e91520ea156a21eb1520ea1520eb156a21ec1520eb1520ec156a21ed1520ec1520ed156a21ee1520ed1520" - "ee156a21ef1520ee1520ef156a21f01520ef1520f0156a21f11520f01520f1156a21f21520f11520f2156a21f31520" - "f21520f3156a21f41520f31520f4156a21f51520f41520f5156a21f61520f51520f6156a21f71520f61520f7156a21" - "f81520f71520f8156a21f91520f81520f9156a21fa1520f91520fa156a21fb1520fa1520fb156a21fc1520fb1520fc" - "156a21fd1520fc1520fd156a21fe1520fd1520fe156a21ff1520fe1520ff156a21801620ff152080166a2181162080" - "162081166a2182162081162082166a2183162082162083166a2184162083162084166a2185162084162085166a2186" - "162085162086166a2187162086162087166a2188162087162088166a2189162088162089166a218a16208916208a16" - "6a218b16208a16208b166a218c16208b16208c166a218d16208c16208d166a218e16208d16208e166a218f16208e16" - "208f166a219016208f162090166a2191162090162091166a2192162091162092166a2193162092162093166a219416" - "2093162094166a2195162094162095166a2196162095162096166a2197162096162097166a2198162097162098166a" - "2199162098162099166a219a16209916209a166a219b16209a16209b166a219c16209b16209c166a219d16209c1620" - "9d166a219e16209d16209e166a219f16209e16209f166a21a016209f1620a0166a21a11620a01620a1166a21a21620" - "a11620a2166a21a31620a21620a3166a21a41620a31620a4166a21a51620a41620a5166a21a61620a51620a6166a21" - "a71620a61620a7166a21a81620a71620a8166a21a91620a81620a9166a21aa1620a91620aa166a21ab1620aa1620ab" - "166a21ac1620ab1620ac166a21ad1620ac1620ad166a21ae1620ad1620ae166a21af1620ae1620af166a21b01620af" - "1620b0166a21b11620b01620b1166a21b21620b11620b2166a21b31620b21620b3166a21b41620b31620b4166a21b5" - "1620b41620b5166a21b61620b51620b6166a21b71620b61620b7166a21b81620b71620b8166a21b91620b81620b916" - "6a21ba1620b91620ba166a21bb1620ba1620bb166a21bc1620bb1620bc166a21bd1620bc1620bd166a21be1620bd16" - "20be166a21bf1620be1620bf166a21c01620bf1620c0166a21c11620c01620c1166a21c21620c11620c2166a21c316" - "20c21620c3166a21c41620c31620c4166a21c51620c41620c5166a21c61620c51620c6166a21c71620c61620c7166a" - "21c81620c71620c8166a21c91620c81620c9166a21ca1620c91620ca166a21cb1620ca1620cb166a21cc1620cb1620" - "cc166a21cd1620cc1620cd166a21ce1620cd1620ce166a21cf1620ce1620cf166a21d01620cf1620d0166a21d11620" - "d01620d1166a21d21620d11620d2166a21d31620d21620d3166a21d41620d31620d4166a21d51620d41620d5166a21" - "d61620d51620d6166a21d71620d61620d7166a21d81620d71620d8166a21d91620d81620d9166a21da1620d91620da" - "166a21db1620da1620db166a21dc1620db1620dc166a21dd1620dc1620dd166a21de1620dd1620de166a21df1620de" - "1620df166a21e01620df1620e0166a21e11620e01620e1166a21e21620e11620e2166a21e31620e21620e3166a21e4" - "1620e31620e4166a21e51620e41620e5166a21e61620e51620e6166a21e71620e61620e7166a21e81620e71620e816" - "6a21e91620e81620e9166a21ea1620e91620ea166a21eb1620ea1620eb166a21ec1620eb1620ec166a21ed1620ec16" - "20ed166a21ee1620ed1620ee166a21ef1620ee1620ef166a21f01620ef1620f0166a21f11620f01620f1166a21f216" - "20f11620f2166a21f31620f21620f3166a21f41620f31620f4166a21f51620f41620f5166a21f61620f51620f6166a" - "21f71620f61620f7166a21f81620f71620f8166a21f91620f81620f9166a21fa1620f91620fa166a21fb1620fa1620" - "fb166a21fc1620fb1620fc166a21fd1620fc1620fd166a21fe1620fd1620fe166a21ff1620fe1620ff166a21801720" - "ff162080176a2181172080172081176a2182172081172082176a2183172082172083176a2184172083172084176a21" - "85172084172085176a2186172085172086176a2187172086172087176a2188172087172088176a2189172088172089" - "176a218a17208917208a176a218b17208a17208b176a218c17208b17208c176a218d17208c17208d176a218e17208d" - "17208e176a218f17208e17208f176a219017208f172090176a2191172090172091176a2192172091172092176a2193" - "172092172093176a2194172093172094176a2195172094172095176a2196172095172096176a219717209617209717" - "6a2198172097172098176a2199172098172099176a219a17209917209a176a219b17209a17209b176a219c17209b17" - "209c176a219d17209c17209d176a219e17209d17209e176a219f17209e17209f176a21a017209f1720a0176a21a117" - "20a01720a1176a21a21720a11720a2176a21a31720a21720a3176a21a41720a31720a4176a21a51720a41720a5176a" - "21a61720a51720a6176a21a71720a61720a7176a21a81720a71720a8176a21a91720a81720a9176a21aa1720a91720" - "aa176a21ab1720aa1720ab176a21ac1720ab1720ac176a21ad1720ac1720ad176a21ae1720ad1720ae176a21af1720" - "ae1720af176a21b01720af1720b0176a21b11720b01720b1176a21b21720b11720b2176a21b31720b21720b3176a21" - "b41720b31720b4176a21b51720b41720b5176a21b61720b51720b6176a21b71720b61720b7176a21b81720b71720b8" - "176a21b91720b81720b9176a21ba1720b91720ba176a21bb1720ba1720bb176a21bc1720bb1720bc176a21bd1720bc" - "1720bd176a21be1720bd1720be176a21bf1720be1720bf176a21c01720bf1720c0176a21c11720c01720c1176a21c2" - "1720c11720c2176a21c31720c21720c3176a21c41720c31720c4176a21c51720c41720c5176a21c61720c51720c617" - "6a21c71720c61720c7176a21c81720c71720c8176a21c91720c81720c9176a21ca1720c91720ca176a21cb1720ca17" - "20cb176a21cc1720cb1720cc176a21cd1720cc1720cd176a21ce1720cd1720ce176a21cf1720ce1720cf176a21d017" - "20cf1720d0176a21d11720d01720d1176a21d21720d11720d2176a21d31720d21720d3176a21d41720d31720d4176a" - "21d51720d41720d5176a21d61720d51720d6176a21d71720d61720d7176a21d81720d71720d8176a21d91720d81720" - "d9176a21da1720d91720da176a21db1720da1720db176a21dc1720db1720dc176a21dd1720dc1720dd176a21de1720" - "dd1720de176a21df1720de1720df176a21e01720df1720e0176a21e11720e01720e1176a21e21720e11720e2176a21" - "e31720e21720e3176a21e41720e31720e4176a21e51720e41720e5176a21e61720e51720e6176a21e71720e61720e7" - "176a21e81720e71720e8176a21e91720e81720e9176a21ea1720e91720ea176a21eb1720ea1720eb176a21ec1720eb" - "1720ec176a21ed1720ec1720ed176a21ee1720ed1720ee176a21ef1720ee1720ef176a21f01720ef1720f0176a21f1" - "1720f01720f1176a21f21720f11720f2176a21f31720f21720f3176a21f41720f31720f4176a21f51720f41720f517" - "6a21f61720f51720f6176a21f71720f61720f7176a21f81720f71720f8176a21f91720f81720f9176a21fa1720f917" - "20fa176a21fb1720fa1720fb176a21fc1720fb1720fc176a21fd1720fc1720fd176a21fe1720fd1720fe176a21ff17" - "20fe1720ff176a21801820ff172080186a2181182080182081186a2182182081182082186a2183182082182083186a" - "2184182083182084186a2185182084182085186a2186182085182086186a2187182086182087186a21881820871820" - "88186a2189182088182089186a218a18208918208a186a218b18208a18208b186a218c18208b18208c186a218d1820" - "8c18208d186a218e18208d18208e186a218f18208e18208f186a219018208f182090186a2191182090182091186a21" - "92182091182092186a2193182092182093186a2194182093182094186a2195182094182095186a2196182095182096" - "186a2197182096182097186a2198182097182098186a2199182098182099186a219a18209918209a186a219b18209a" - "18209b186a219c18209b18209c186a219d18209c18209d186a219e18209d18209e186a219f18209e18209f186a21a0" - "18209f1820a0186a21a11820a01820a1186a21a21820a11820a2186a21a31820a21820a3186a21a41820a31820a418" - "6a21a51820a41820a5186a21a61820a51820a6186a21a71820a61820a7186a21a81820a71820a8186a21a91820a818" - "20a9186a21aa1820a91820aa186a21ab1820aa1820ab186a21ac1820ab1820ac186a21ad1820ac1820ad186a21ae18" - "20ad1820ae186a21af1820ae1820af186a21b01820af1820b0186a21b11820b01820b1186a21b21820b11820b2186a" - "21b31820b21820b3186a21b41820b31820b4186a21b51820b41820b5186a21b61820b51820b6186a21b71820b61820" - "b7186a21b81820b71820b8186a21b91820b81820b9186a21ba1820b91820ba186a21bb1820ba1820bb186a21bc1820" - "bb1820bc186a21bd1820bc1820bd186a21be1820bd1820be186a21bf1820be1820bf186a21c01820bf1820c0186a21" - "c11820c01820c1186a21c21820c11820c2186a21c31820c21820c3186a21c41820c31820c4186a21c51820c41820c5" - "186a21c61820c51820c6186a21c71820c61820c7186a21c81820c71820c8186a21c91820c81820c9186a21ca1820c9" - "1820ca186a21cb1820ca1820cb186a21cc1820cb1820cc186a21cd1820cc1820cd186a21ce1820cd1820ce186a21cf" - "1820ce1820cf186a21d01820cf1820d0186a21d11820d01820d1186a21d21820d11820d2186a21d31820d21820d318" - "6a21d41820d31820d4186a21d51820d41820d5186a21d61820d51820d6186a21d71820d61820d7186a21d81820d718" - "20d8186a21d91820d81820d9186a21da1820d91820da186a21db1820da1820db186a21dc1820db1820dc186a21dd18" - "20dc1820dd186a21de1820dd1820de186a21df1820de1820df186a21e01820df1820e0186a21e11820e01820e1186a" - "21e21820e11820e2186a21e31820e21820e3186a21e41820e31820e4186a21e51820e41820e5186a21e61820e51820" - "e6186a21e71820e61820e7186a21e81820e71820e8186a21e91820e81820e9186a21ea1820e91820ea186a21eb1820" - "ea1820eb186a21ec1820eb1820ec186a21ed1820ec1820ed186a21ee1820ed1820ee186a21ef1820ee1820ef186a21" - "f01820ef1820f0186a21f11820f01820f1186a21f21820f11820f2186a21f31820f21820f3186a21f41820f31820f4" - "186a21f51820f41820f5186a21f61820f51820f6186a21f71820f61820f7186a21f81820f71820f8186a21f91820f8" - "1820f9186a21fa1820f91820fa186a21fb1820fa1820fb186a21fc1820fb1820fc186a21fd1820fc1820fd186a21fe" - "1820fd1820fe186a21ff1820fe1820ff186a21801920ff182080196a2181192080192081196a218219208119208219" - "6a2183192082192083196a2184192083192084196a2185192084192085196a2186192085192086196a218719208619" - "2087196a2188192087192088196a2189192088192089196a218a19208919208a196a218b19208a19208b196a218c19" - "208b19208c196a218d19208c19208d196a218e19208d19208e196a218f19208e19208f196a219019208f192090196a" - "2191192090192091196a2192192091192092196a2193192092192093196a2194192093192094196a21951920941920" - "95196a2196192095192096196a2197192096192097196a2198192097192098196a2199192098192099196a219a1920" - "9919209a196a219b19209a19209b196a219c19209b19209c196a219d19209c19209d196a219e19209d19209e196a21" - "9f19209e19209f196a21a019209f1920a0196a21a11920a01920a1196a21a21920a11920a2196a21a31920a21920a3" - "196a21a41920a31920a4196a21a51920a41920a5196a21a61920a51920a6196a21a71920a61920a7196a21a81920a7" - "1920a8196a21a91920a81920a9196a21aa1920a91920aa196a21ab1920aa1920ab196a21ac1920ab1920ac196a21ad" - "1920ac1920ad196a21ae1920ad1920ae196a21af1920ae1920af196a21b01920af1920b0196a21b11920b01920b119" - "6a21b21920b11920b2196a21b31920b21920b3196a21b41920b31920b4196a21b51920b41920b5196a21b61920b519" - "20b6196a21b71920b61920b7196a21b81920b71920b8196a21b91920b81920b9196a21ba1920b91920ba196a21bb19" - "20ba1920bb196a21bc1920bb1920bc196a21bd1920bc1920bd196a21be1920bd1920be196a21bf1920be1920bf196a" - "21c01920bf1920c0196a21c11920c01920c1196a21c21920c11920c2196a21c31920c21920c3196a21c41920c31920" - "c4196a21c51920c41920c5196a21c61920c51920c6196a21c71920c61920c7196a21c81920c71920c8196a21c91920" - "c81920c9196a21ca1920c91920ca196a21cb1920ca1920cb196a21cc1920cb1920cc196a21cd1920cc1920cd196a21" - "ce1920cd1920ce196a21cf1920ce1920cf196a21d01920cf1920d0196a21d11920d01920d1196a21d21920d11920d2" - "196a21d31920d21920d3196a21d41920d31920d4196a21d51920d41920d5196a21d61920d51920d6196a21d71920d6" - "1920d7196a21d81920d71920d8196a21d91920d81920d9196a21da1920d91920da196a21db1920da1920db196a21dc" - "1920db1920dc196a21dd1920dc1920dd196a21de1920dd1920de196a21df1920de1920df196a21e01920df1920e019" - "6a21e11920e01920e1196a21e21920e11920e2196a21e31920e21920e3196a21e41920e31920e4196a21e51920e419" - "20e5196a21e61920e51920e6196a21e71920e61920e7196a21e81920e71920e8196a21e91920e81920e9196a21ea19" - "20e91920ea196a21eb1920ea1920eb196a21ec1920eb1920ec196a21ed1920ec1920ed196a21ee1920ed1920ee196a" - "21ef1920ee1920ef196a21f01920ef1920f0196a21f11920f01920f1196a21f21920f11920f2196a21f31920f21920" - "f3196a21f41920f31920f4196a21f51920f41920f5196a21f61920f51920f6196a21f71920f61920f7196a21f81920" - "f71920f8196a21f91920f81920f9196a21fa1920f91920fa196a21fb1920fa1920fb196a21fc1920fb1920fc196a21" - "fd1920fc1920fd196a21fe1920fd1920fe196a21ff1920fe1920ff196a21801a20ff1920801a6a21811a20801a2081" - "1a6a21821a20811a20821a6a21831a20821a20831a6a21841a20831a20841a6a21851a20841a20851a6a21861a2085" - "1a20861a6a21871a20861a20871a6a21881a20871a20881a6a21891a20881a20891a6a218a1a20891a208a1a6a218b" - "1a208a1a208b1a6a218c1a208b1a208c1a6a218d1a208c1a208d1a6a218e1a208d1a208e1a6a218f1a208e1a208f1a" - "6a21901a208f1a20901a6a21911a20901a20911a6a21921a20911a20921a6a21931a20921a20931a6a21941a20931a" - "20941a6a21951a20941a20951a6a21961a20951a20961a6a21971a20961a20971a6a21981a20971a20981a6a21991a" - "20981a20991a6a219a1a20991a209a1a6a219b1a209a1a209b1a6a219c1a209b1a209c1a6a219d1a209c1a209d1a6a" - "219e1a209d1a209e1a6a219f1a209e1a209f1a6a21a01a209f1a20a01a6a21a11a20a01a20a11a6a21a21a20a11a20" - "a21a6a21a31a20a21a20a31a6a21a41a20a31a20a41a6a21a51a20a41a20a51a6a21a61a20a51a20a61a6a21a71a20" - "a61a20a71a6a21a81a20a71a20a81a6a21a91a20a81a20a91a6a21aa1a20a91a20aa1a6a21ab1a20aa1a20ab1a6a21" - "ac1a20ab1a20ac1a6a21ad1a20ac1a20ad1a6a21ae1a20ad1a20ae1a6a21af1a20ae1a20af1a6a21b01a20af1a20b0" - "1a6a21b11a20b01a20b11a6a21b21a20b11a20b21a6a21b31a20b21a20b31a6a21b41a20b31a20b41a6a21b51a20b4" - "1a20b51a6a21b61a20b51a20b61a6a21b71a20b61a20b71a6a21b81a20b71a20b81a6a21b91a20b81a20b91a6a21ba" - "1a20b91a20ba1a6a21bb1a20ba1a20bb1a6a21bc1a20bb1a20bc1a6a21bd1a20bc1a20bd1a6a21be1a20bd1a20be1a" - "6a21bf1a20be1a20bf1a6a21c01a20bf1a20c01a6a21c11a20c01a20c11a6a21c21a20c11a20c21a6a21c31a20c21a" - "20c31a6a21c41a20c31a20c41a6a21c51a20c41a20c51a6a21c61a20c51a20c61a6a21c71a20c61a20c71a6a21c81a" - "20c71a20c81a6a21c91a20c81a20c91a6a21ca1a20c91a20ca1a6a21cb1a20ca1a20cb1a6a21cc1a20cb1a20cc1a6a" - "21cd1a20cc1a20cd1a6a21ce1a20cd1a20ce1a6a21cf1a20ce1a20cf1a6a21d01a20cf1a20d01a6a21d11a20d01a20" - "d11a6a21d21a20d11a20d21a6a21d31a20d21a20d31a6a21d41a20d31a20d41a6a21d51a20d41a20d51a6a21d61a20" - "d51a20d61a6a21d71a20d61a20d71a6a21d81a20d71a20d81a6a21d91a20d81a20d91a6a21da1a20d91a20da1a6a21" - "db1a20da1a20db1a6a21dc1a20db1a20dc1a6a21dd1a20dc1a20dd1a6a21de1a20dd1a20de1a6a21df1a20de1a20df" - "1a6a21e01a20df1a20e01a6a21e11a20e01a20e11a6a21e21a20e11a20e21a6a21e31a20e21a20e31a6a21e41a20e3" - "1a20e41a6a21e51a20e41a20e51a6a21e61a20e51a20e61a6a21e71a20e61a20e71a6a21e81a20e71a20e81a6a21e9" - "1a20e81a20e91a6a21ea1a20e91a20ea1a6a21eb1a20ea1a20eb1a6a21ec1a20eb1a20ec1a6a21ed1a20ec1a20ed1a" - "6a21ee1a20ed1a20ee1a6a21ef1a20ee1a20ef1a6a21f01a20ef1a20f01a6a21f11a20f01a20f11a6a21f21a20f11a" - "20f21a6a21f31a20f21a20f31a6a21f41a20f31a20f41a6a21f51a20f41a20f51a6a21f61a20f51a20f61a6a21f71a" - "20f61a20f71a6a21f81a20f71a20f81a6a21f91a20f81a20f91a6a21fa1a20f91a20fa1a6a21fb1a20fa1a20fb1a6a" - "21fc1a20fb1a20fc1a6a21fd1a20fc1a20fd1a6a21fe1a20fd1a20fe1a6a21ff1a20fe1a20ff1a6a21801b20ff1a20" - "801b6a21811b20801b20811b6a21821b20811b20821b6a21831b20821b20831b6a21841b20831b20841b6a21851b20" - "841b20851b6a21861b20851b20861b6a21871b20861b20871b6a21881b20871b20881b6a21891b20881b20891b6a21" - "8a1b20891b208a1b6a218b1b208a1b208b1b6a218c1b208b1b208c1b6a218d1b208c1b208d1b6a218e1b208d1b208e" - "1b6a218f1b208e1b208f1b6a21901b208f1b20901b6a21911b20901b20911b6a21921b20911b20921b6a21931b2092" - "1b20931b6a21941b20931b20941b6a21951b20941b20951b6a21961b20951b20961b6a21971b20961b20971b6a2198" - "1b20971b20981b6a21991b20981b20991b6a219a1b20991b209a1b6a219b1b209a1b209b1b6a219c1b209b1b209c1b" - "6a219d1b209c1b209d1b6a219e1b209d1b209e1b6a219f1b209e1b209f1b6a21a01b209f1b20a01b6a21a11b20a01b" - "20a11b6a21a21b20a11b20a21b6a21a31b20a21b20a31b6a21a41b20a31b20a41b6a21a51b20a41b20a51b6a21a61b" - "20a51b20a61b6a21a71b20a61b20a71b6a21a81b20a71b20a81b6a21a91b20a81b20a91b6a21aa1b20a91b20aa1b6a" - "21ab1b20aa1b20ab1b6a21ac1b20ab1b20ac1b6a21ad1b20ac1b20ad1b6a21ae1b20ad1b20ae1b6a21af1b20ae1b20" - "af1b6a21b01b20af1b20b01b6a21b11b20b01b20b11b6a21b21b20b11b20b21b6a21b31b20b21b20b31b6a21b41b20" - "b31b20b41b6a21b51b20b41b20b51b6a21b61b20b51b20b61b6a21b71b20b61b20b71b6a21b81b20b71b20b81b6a21" - "b91b20b81b20b91b6a21ba1b20b91b20ba1b6a21bb1b20ba1b20bb1b6a21bc1b20bb1b20bc1b6a21bd1b20bc1b20bd" - "1b6a21be1b20bd1b20be1b6a21bf1b20be1b20bf1b6a21c01b20bf1b20c01b6a21c11b20c01b20c11b6a21c21b20c1" - "1b20c21b6a21c31b20c21b20c31b6a21c41b20c31b20c41b6a21c51b20c41b20c51b6a21c61b20c51b20c61b6a21c7" - "1b20c61b20c71b6a21c81b20c71b20c81b6a21c91b20c81b20c91b6a21ca1b20c91b20ca1b6a21cb1b20ca1b20cb1b" - "6a21cc1b20cb1b20cc1b6a21cd1b20cc1b20cd1b6a21ce1b20cd1b20ce1b6a21cf1b20ce1b20cf1b6a21d01b20cf1b" - "20d01b6a21d11b20d01b20d11b6a21d21b20d11b20d21b6a21d31b20d21b20d31b6a21d41b20d31b20d41b6a21d51b" - "20d41b20d51b6a21d61b20d51b20d61b6a21d71b20d61b20d71b6a21d81b20d71b20d81b6a21d91b20d81b20d91b6a" - "21da1b20d91b20da1b6a21db1b20da1b20db1b6a21dc1b20db1b20dc1b6a21dd1b20dc1b20dd1b6a21de1b20dd1b20" - "de1b6a21df1b20de1b20df1b6a21e01b20df1b20e01b6a21e11b20e01b20e11b6a21e21b20e11b20e21b6a21e31b20" - "e21b20e31b6a21e41b20e31b20e41b6a21e51b20e41b20e51b6a21e61b20e51b20e61b6a21e71b20e61b20e71b6a21" - "e81b20e71b20e81b6a21e91b20e81b20e91b6a21ea1b20e91b20ea1b6a21eb1b20ea1b20eb1b6a21ec1b20eb1b20ec" - "1b6a21ed1b20ec1b20ed1b6a21ee1b20ed1b20ee1b6a21ef1b20ee1b20ef1b6a21f01b20ef1b20f01b6a21f11b20f0" - "1b20f11b6a21f21b20f11b20f21b6a21f31b20f21b20f31b6a21f41b20f31b20f41b6a21f51b20f41b20f51b6a21f6" - "1b20f51b20f61b6a21f71b20f61b20f71b6a21f81b20f71b20f81b6a21f91b20f81b20f91b6a21fa1b20f91b20fa1b" - "6a21fb1b20fa1b20fb1b6a21fc1b20fb1b20fc1b6a21fd1b20fc1b20fd1b6a21fe1b20fd1b20fe1b6a21ff1b20fe1b" - "20ff1b6a21801c20ff1b20801c6a21811c20801c20811c6a21821c20811c20821c6a21831c20821c20831c6a21841c" - "20831c20841c6a21851c20841c20851c6a21861c20851c20861c6a21871c20861c20871c6a21881c20871c20881c6a" - "21891c20881c20891c6a218a1c20891c208a1c6a218b1c208a1c208b1c6a218c1c208b1c208c1c6a218d1c208c1c20" - "8d1c6a218e1c208d1c208e1c6a218f1c208e1c208f1c6a21901c208f1c20901c6a21911c20901c20911c6a21921c20" - "911c20921c6a21931c20921c20931c6a21941c20931c20941c6a21951c20941c20951c6a21961c20951c20961c6a21" - "971c20961c20971c6a21981c20971c20981c6a21991c20981c20991c6a219a1c20991c209a1c6a219b1c209a1c209b" - "1c6a219c1c209b1c209c1c6a219d1c209c1c209d1c6a219e1c209d1c209e1c6a219f1c209e1c209f1c6a21a01c209f" - "1c20a01c6a21a11c20a01c20a11c6a21a21c20a11c20a21c6a21a31c20a21c20a31c6a21a41c20a31c20a41c6a21a5" - "1c20a41c20a51c6a21a61c20a51c20a61c6a21a71c20a61c20a71c6a21a81c20a71c20a81c6a21a91c20a81c20a91c" - "6a21aa1c20a91c20aa1c6a21ab1c20aa1c20ab1c6a21ac1c20ab1c20ac1c6a21ad1c20ac1c20ad1c6a21ae1c20ad1c" - "20ae1c6a21af1c20ae1c20af1c6a21b01c20af1c20b01c6a21b11c20b01c20b11c6a21b21c20b11c20b21c6a21b31c" - "20b21c20b31c6a21b41c20b31c20b41c6a21b51c20b41c20b51c6a21b61c20b51c20b61c6a21b71c20b61c20b71c6a" - "21b81c20b71c20b81c6a21b91c20b81c20b91c6a21ba1c20b91c20ba1c6a21bb1c20ba1c20bb1c6a21bc1c20bb1c20" - "bc1c6a21bd1c20bc1c20bd1c6a21be1c20bd1c20be1c6a21bf1c20be1c20bf1c6a21c01c20bf1c20c01c6a21c11c20" - "c01c20c11c6a21c21c20c11c20c21c6a21c31c20c21c20c31c6a21c41c20c31c20c41c6a21c51c20c41c20c51c6a21" - "c61c20c51c20c61c6a21c71c20c61c20c71c6a21c81c20c71c20c81c6a21c91c20c81c20c91c6a21ca1c20c91c20ca" - "1c6a21cb1c20ca1c20cb1c6a21cc1c20cb1c20cc1c6a21cd1c20cc1c20cd1c6a21ce1c20cd1c20ce1c6a21cf1c20ce" - "1c20cf1c6a21d01c20cf1c20d01c6a21d11c20d01c20d11c6a21d21c20d11c20d21c6a21d31c20d21c20d31c6a21d4" - "1c20d31c20d41c6a21d51c20d41c20d51c6a21d61c20d51c20d61c6a21d71c20d61c20d71c6a21d81c20d71c20d81c" - "6a21d91c20d81c20d91c6a21da1c20d91c20da1c6a21db1c20da1c20db1c6a21dc1c20db1c20dc1c6a21dd1c20dc1c" - "20dd1c6a21de1c20dd1c20de1c6a21df1c20de1c20df1c6a21e01c20df1c20e01c6a21e11c20e01c20e11c6a21e21c" - "20e11c20e21c6a21e31c20e21c20e31c6a21e41c20e31c20e41c6a21e51c20e41c20e51c6a21e61c20e51c20e61c6a" - "21e71c20e61c20e71c6a21e81c20e71c20e81c6a21e91c20e81c20e91c6a21ea1c20e91c20ea1c6a21eb1c20ea1c20" - "eb1c6a21ec1c20eb1c20ec1c6a21ed1c20ec1c20ed1c6a21ee1c20ed1c20ee1c6a21ef1c20ee1c20ef1c6a21f01c20" - "ef1c20f01c6a21f11c20f01c20f11c6a21f21c20f11c20f21c6a21f31c20f21c20f31c6a21f41c20f31c20f41c6a21" - "f51c20f41c20f51c6a21f61c20f51c20f61c6a21f71c20f61c20f71c6a21f81c20f71c20f81c6a21f91c20f81c20f9" - "1c6a21fa1c20f91c20fa1c6a21fb1c20fa1c20fb1c6a21fc1c20fb1c20fc1c6a21fd1c20fc1c20fd1c6a21fe1c20fd" - "1c20fe1c6a21ff1c20fe1c20ff1c6a21801d20ff1c20801d6a21811d20801d20811d6a21821d20811d20821d6a2183" - "1d20821d20831d6a21841d20831d20841d6a21851d20841d20851d6a21861d20851d20861d6a21871d20861d20871d" - "6a21881d20871d20881d6a21891d20881d20891d6a218a1d20891d208a1d6a218b1d208a1d208b1d6a218c1d208b1d" - "208c1d6a218d1d208c1d208d1d6a218e1d208d1d208e1d6a218f1d208e1d208f1d6a21901d208f1d20901d6a21911d" - "20901d20911d6a21921d20911d20921d6a21931d20921d20931d6a21941d20931d20941d6a21951d20941d20951d6a" - "21961d20951d20961d6a21971d20961d20971d6a21981d20971d20981d6a21991d20981d20991d6a219a1d20991d20" - "9a1d6a219b1d209a1d209b1d6a219c1d209b1d209c1d6a219d1d209c1d209d1d6a219e1d209d1d209e1d6a219f1d20" - "9e1d209f1d6a21a01d209f1d20a01d6a21a11d20a01d20a11d6a21a21d20a11d20a21d6a21a31d20a21d20a31d6a21" - "a41d20a31d20a41d6a21a51d20a41d20a51d6a21a61d20a51d20a61d6a21a71d20a61d20a71d6a21a81d20a71d20a8" - "1d6a21a91d20a81d20a91d6a21aa1d20a91d20aa1d6a21ab1d20aa1d20ab1d6a21ac1d20ab1d20ac1d6a21ad1d20ac" - "1d20ad1d6a21ae1d20ad1d20ae1d6a21af1d20ae1d20af1d6a21b01d20af1d20b01d6a21b11d20b01d20b11d6a21b2" - "1d20b11d20b21d6a21b31d20b21d20b31d6a21b41d20b31d20b41d6a21b51d20b41d20b51d6a21b61d20b51d20b61d" - "6a21b71d20b61d20b71d6a21b81d20b71d20b81d6a21b91d20b81d20b91d6a21ba1d20b91d20ba1d6a21bb1d20ba1d" - "20bb1d6a21bc1d20bb1d20bc1d6a21bd1d20bc1d20bd1d6a21be1d20bd1d20be1d6a21bf1d20be1d20bf1d6a21c01d" - "20bf1d20c01d6a21c11d20c01d20c11d6a21c21d20c11d20c21d6a21c31d20c21d20c31d6a21c41d20c31d20c41d6a" - "21c51d20c41d20c51d6a21c61d20c51d20c61d6a21c71d20c61d20c71d6a21c81d20c71d20c81d6a21c91d20c81d20" - "c91d6a21ca1d20c91d20ca1d6a21cb1d20ca1d20cb1d6a21cc1d20cb1d20cc1d6a21cd1d20cc1d20cd1d6a21ce1d20" - "cd1d20ce1d6a21cf1d20ce1d20cf1d6a21d01d20cf1d20d01d6a21d11d20d01d20d11d6a21d21d20d11d20d21d6a21" - "d31d20d21d20d31d6a21d41d20d31d20d41d6a21d51d20d41d20d51d6a21d61d20d51d20d61d6a21d71d20d61d20d7" - "1d6a21d81d20d71d20d81d6a21d91d20d81d20d91d6a21da1d20d91d20da1d6a21db1d20da1d20db1d6a21dc1d20db" - "1d20dc1d6a21dd1d20dc1d20dd1d6a21de1d20dd1d20de1d6a21df1d20de1d20df1d6a21e01d20df1d20e01d6a21e1" - "1d20e01d20e11d6a21e21d20e11d20e21d6a21e31d20e21d20e31d6a21e41d20e31d20e41d6a21e51d20e41d20e51d" - "6a21e61d20e51d20e61d6a21e71d20e61d20e71d6a21e81d20e71d20e81d6a21e91d20e81d20e91d6a21ea1d20e91d" - "20ea1d6a21eb1d20ea1d20eb1d6a21ec1d20eb1d20ec1d6a21ed1d20ec1d20ed1d6a21ee1d20ed1d20ee1d6a21ef1d" - "20ee1d20ef1d6a21f01d20ef1d20f01d6a21f11d20f01d20f11d6a21f21d20f11d20f21d6a21f31d20f21d20f31d6a" - "21f41d20f31d20f41d6a21f51d20f41d20f51d6a21f61d20f51d20f61d6a21f71d20f61d20f71d6a21f81d20f71d20" - "f81d6a21f91d20f81d20f91d6a21fa1d20f91d20fa1d6a21fb1d20fa1d20fb1d6a21fc1d20fb1d20fc1d6a21fd1d20" - "fc1d20fd1d6a21fe1d20fd1d20fe1d6a21ff1d20fe1d20ff1d6a21801e20ff1d20801e6a21811e20801e20811e6a21" - "821e20811e20821e6a21831e20821e20831e6a21841e20831e20841e6a21851e20841e20851e6a21861e20851e2086" - "1e6a21871e20861e20871e6a21881e20871e20881e6a21891e20881e20891e6a218a1e20891e208a1e6a218b1e208a" - "1e208b1e6a218c1e208b1e208c1e6a218d1e208c1e208d1e6a218e1e208d1e208e1e6a218f1e208e1e208f1e6a2190" - "1e208f1e20901e6a21911e20901e20911e6a21921e20911e20921e6a21931e20921e20931e6a21941e20931e20941e" - "6a21951e20941e20951e6a21961e20951e20961e6a21971e20961e20971e6a21981e20971e20981e6a21991e20981e" - "20991e6a219a1e20991e209a1e6a219b1e209a1e209b1e6a219c1e209b1e209c1e6a219d1e209c1e209d1e6a219e1e" - "209d1e209e1e6a219f1e209e1e209f1e6a21a01e209f1e20a01e6a21a11e20a01e20a11e6a21a21e20a11e20a21e6a" - "21a31e20a21e20a31e6a21a41e20a31e20a41e6a21a51e20a41e20a51e6a21a61e20a51e20a61e6a21a71e20a61e20" - "a71e6a21a81e20a71e20a81e6a21a91e20a81e20a91e6a21aa1e20a91e20aa1e6a21ab1e20aa1e20ab1e6a21ac1e20" - "ab1e20ac1e6a21ad1e20ac1e20ad1e6a21ae1e20ad1e20ae1e6a21af1e20ae1e20af1e6a21b01e20af1e20b01e6a21" - "b11e20b01e20b11e6a21b21e20b11e20b21e6a21b31e20b21e20b31e6a21b41e20b31e20b41e6a21b51e20b41e20b5" - "1e6a21b61e20b51e20b61e6a21b71e20b61e20b71e6a21b81e20b71e20b81e6a21b91e20b81e20b91e6a21ba1e20b9" - "1e20ba1e6a21bb1e20ba1e20bb1e6a21bc1e20bb1e20bc1e6a21bd1e20bc1e20bd1e6a21be1e20bd1e20be1e6a21bf" - "1e20be1e20bf1e6a21c01e20bf1e20c01e6a21c11e20c01e20c11e6a21c21e20c11e20c21e6a21c31e20c21e20c31e" - "6a21c41e20c31e20c41e6a21c51e20c41e20c51e6a21c61e20c51e20c61e6a21c71e20c61e20c71e6a21c81e20c71e" - "20c81e6a21c91e20c81e20c91e6a21ca1e20c91e20ca1e6a21cb1e20ca1e20cb1e6a21cc1e20cb1e20cc1e6a21cd1e" - "20cc1e20cd1e6a21ce1e20cd1e20ce1e6a21cf1e20ce1e20cf1e6a21d01e20cf1e20d01e6a21d11e20d01e20d11e6a" - "21d21e20d11e20d21e6a21d31e20d21e20d31e6a21d41e20d31e20d41e6a21d51e20d41e20d51e6a21d61e20d51e20" - "d61e6a21d71e20d61e20d71e6a21d81e20d71e20d81e6a21d91e20d81e20d91e6a21da1e20d91e20da1e6a21db1e20" - "da1e20db1e6a21dc1e20db1e20dc1e6a21dd1e20dc1e20dd1e6a21de1e20dd1e20de1e6a21df1e20de1e20df1e6a21" - "e01e20df1e20e01e6a21e11e20e01e20e11e6a21e21e20e11e20e21e6a21e31e20e21e20e31e6a21e41e20e31e20e4" - "1e6a21e51e20e41e20e51e6a21e61e20e51e20e61e6a21e71e20e61e20e71e6a21e81e20e71e20e81e6a21e91e20e8" - "1e20e91e6a21ea1e20e91e20ea1e6a21eb1e20ea1e20eb1e6a21ec1e20eb1e20ec1e6a21ed1e20ec1e20ed1e6a21ee" - "1e20ed1e20ee1e6a21ef1e20ee1e20ef1e6a21f01e20ef1e20f01e6a21f11e20f01e20f11e6a21f21e20f11e20f21e" - "6a21f31e20f21e20f31e6a21f41e20f31e20f41e6a21f51e20f41e20f51e6a21f61e20f51e20f61e6a21f71e20f61e" - "20f71e6a21f81e20f71e20f81e6a21f91e20f81e20f91e6a21fa1e20f91e20fa1e6a21fb1e20fa1e20fb1e6a21fc1e" - "20fb1e20fc1e6a21fd1e20fc1e20fd1e6a21fe1e20fd1e20fe1e6a21ff1e20fe1e20ff1e6a21801f20ff1e20801f6a" - "21811f20801f20811f6a21821f20811f20821f6a21831f20821f20831f6a21841f20831f20841f6a21851f20841f20" - "851f6a21861f20851f20861f6a21871f20861f20871f6a21881f20871f20881f6a21891f20881f20891f6a218a1f20" - "891f208a1f6a218b1f208a1f208b1f6a218c1f208b1f208c1f6a218d1f208c1f208d1f6a218e1f208d1f208e1f6a21" - "8f1f208e1f208f1f6a21901f208f1f20901f6a21911f20901f20911f6a21921f20911f20921f6a21931f20921f2093" - "1f6a21941f20931f20941f6a21951f20941f20951f6a21961f20951f20961f6a21971f20961f20971f6a21981f2097" - "1f20981f6a21991f20981f20991f6a219a1f20991f209a1f6a219b1f209a1f209b1f6a219c1f209b1f209c1f6a219d" - "1f209c1f209d1f6a219e1f209d1f209e1f6a219f1f209e1f209f1f6a21a01f209f1f20a01f6a21a11f20a01f20a11f" - "6a21a21f20a11f20a21f6a21a31f20a21f20a31f6a21a41f20a31f20a41f6a21a51f20a41f20a51f6a21a61f20a51f" - "20a61f6a21a71f20a61f20a71f6a21a81f20a71f20a81f6a21a91f20a81f20a91f6a21aa1f20a91f20aa1f6a21ab1f" - "20aa1f20ab1f6a21ac1f20ab1f20ac1f6a21ad1f20ac1f20ad1f6a21ae1f20ad1f20ae1f6a21af1f20ae1f20af1f6a" - "21b01f20af1f20b01f6a21b11f20b01f20b11f6a21b21f20b11f20b21f6a21b31f20b21f20b31f6a21b41f20b31f20" - "b41f6a21b51f20b41f20b51f6a21b61f20b51f20b61f6a21b71f20b61f20b71f6a21b81f20b71f20b81f6a21b91f20" - "b81f20b91f6a21ba1f20b91f20ba1f6a21bb1f20ba1f20bb1f6a21bc1f20bb1f20bc1f6a21bd1f20bc1f20bd1f6a21" - "be1f20bd1f20be1f6a21bf1f20be1f20bf1f6a21c01f20bf1f20c01f6a21c11f20c01f20c11f6a21c21f20c11f20c2" - "1f6a21c31f20c21f20c31f6a21c41f20c31f20c41f6a21c51f20c41f20c51f6a21c61f20c51f20c61f6a21c71f20c6" - "1f20c71f6a21c81f20c71f20c81f6a21c91f20c81f20c91f6a21ca1f20c91f20ca1f6a21cb1f20ca1f20cb1f6a21cc" - "1f20cb1f20cc1f6a21cd1f20cc1f20cd1f6a21ce1f20cd1f20ce1f6a21cf1f20ce1f20cf1f6a21d01f20cf1f20d01f" - "6a21d11f20d01f20d11f6a21d21f20d11f20d21f6a21d31f20d21f20d31f6a21d41f20d31f20d41f6a21d51f20d41f" - "20d51f6a21d61f20d51f20d61f6a21d71f20d61f20d71f6a21d81f20d71f20d81f6a21d91f20d81f20d91f6a21da1f" - "20d91f20da1f6a21db1f20da1f20db1f6a21dc1f20db1f20dc1f6a21dd1f20dc1f20dd1f6a21de1f20dd1f20de1f6a" - "21df1f20de1f20df1f6a21e01f20df1f20e01f6a21e11f20e01f20e11f6a21e21f20e11f20e21f6a21e31f20e21f20" - "e31f6a21e41f20e31f20e41f6a21e51f20e41f20e51f6a21e61f20e51f20e61f6a21e71f20e61f20e71f6a21e81f20" - "e71f20e81f6a21e91f20e81f20e91f6a21ea1f20e91f20ea1f6a21eb1f20ea1f20eb1f6a21ec1f20eb1f20ec1f6a21" - "ed1f20ec1f20ed1f6a21ee1f20ed1f20ee1f6a21ef1f20ee1f20ef1f6a21f01f20ef1f20f01f6a21f11f20f01f20f1" - "1f6a21f21f20f11f20f21f6a21f31f20f21f20f31f6a21f41f20f31f20f41f6a21f51f20f41f20f51f6a21f61f20f5" - "1f20f61f6a21f71f20f61f20f71f6a21f81f20f71f20f81f6a21f91f20f81f20f91f6a21fa1f20f91f20fa1f6a21fb" - "1f20fa1f20fb1f6a21fc1f20fb1f20fc1f6a21fd1f20fc1f20fd1f6a21fe1f20fd1f20fe1f6a21ff1f20fe1f20ff1f" - "6a21802020ff1f2080206a2181202080202081206a2182202081202082206a2183202082202083206a218420208320" - "2084206a2185202084202085206a2186202085202086206a2187202086202087206a2188202087202088206a218920" - "2088202089206a218a20208920208a206a218b20208a20208b206a218c20208b20208c206a218d20208c20208d206a" - "218e20208d20208e206a218f20208e20208f206a219020208f202090206a2191202090202091206a21922020912020" - "92206a2193202092202093206a2194202093202094206a2195202094202095206a2196202095202096206a21972020" - "96202097206a2198202097202098206a2199202098202099206a219a20209920209a206a219b20209a20209b206a21" - "9c20209b20209c206a219d20209c20209d206a219e20209d20209e206a219f20209e20209f206a21a020209f2020a0" - "206a21a12020a02020a1206a21a22020a12020a2206a21a32020a22020a3206a21a42020a32020a4206a21a52020a4" - "2020a5206a21a62020a52020a6206a21a72020a62020a7206a21a82020a72020a8206a21a92020a82020a9206a21aa" - "2020a92020aa206a21ab2020aa2020ab206a21ac2020ab2020ac206a21ad2020ac2020ad206a21ae2020ad2020ae20" - "6a21af2020ae2020af206a21b02020af2020b0206a21b12020b02020b1206a21b22020b12020b2206a21b32020b220" - "20b3206a21b42020b32020b4206a21b52020b42020b5206a21b62020b52020b6206a21b72020b62020b7206a21b820" - "20b72020b8206a21b92020b82020b9206a21ba2020b92020ba206a21bb2020ba2020bb206a21bc2020bb2020bc206a" - "21bd2020bc2020bd206a21be2020bd2020be206a21bf2020be2020bf206a21c02020bf2020c0206a21c12020c02020" - "c1206a21c22020c12020c2206a21c32020c22020c3206a21c42020c32020c4206a21c52020c42020c5206a21c62020" - "c52020c6206a21c72020c62020c7206a21c82020c72020c8206a21c92020c82020c9206a21ca2020c92020ca206a21" - "cb2020ca2020cb206a21cc2020cb2020cc206a21cd2020cc2020cd206a21ce2020cd2020ce206a21cf2020ce2020cf" - "206a21d02020cf2020d0206a21d12020d02020d1206a21d22020d12020d2206a21d32020d22020d3206a21d42020d3" - "2020d4206a21d52020d42020d5206a21d62020d52020d6206a21d72020d62020d7206a21d82020d72020d8206a21d9" - "2020d82020d9206a21da2020d92020da206a21db2020da2020db206a21dc2020db2020dc206a21dd2020dc2020dd20" - "6a21de2020dd2020de206a21df2020de2020df206a21e02020df2020e0206a21e12020e02020e1206a21e22020e120" - "20e2206a21e32020e22020e3206a21e42020e32020e4206a21e52020e42020e5206a21e62020e52020e6206a21e720" - "20e62020e7206a21e82020e72020e8206a21e92020e82020e9206a21ea2020e92020ea206a21eb2020ea2020eb206a" - "21ec2020eb2020ec206a21ed2020ec2020ed206a21ee2020ed2020ee206a21ef2020ee2020ef206a21f02020ef2020" - "f0206a21f12020f02020f1206a21f22020f12020f2206a21f32020f22020f3206a21f42020f32020f4206a21f52020" - "f42020f5206a21f62020f52020f6206a21f72020f62020f7206a21f82020f72020f8206a21f92020f82020f9206a21" - "fa2020f92020fa206a21fb2020fa2020fb206a21fc2020fb2020fc206a21fd2020fc2020fd206a21fe2020fd2020fe" - "206a21ff2020fe2020ff206a21802120ff202080216a2181212080212081216a2182212081212082216a2183212082" - "212083216a2184212083212084216a2185212084212085216a2186212085212086216a2187212086212087216a2188" - "212087212088216a2189212088212089216a218a21208921208a216a218b21208a21208b216a218c21208b21208c21" - "6a218d21208c21208d216a218e21208d21208e216a218f21208e21208f216a219021208f212090216a219121209021" - "2091216a2192212091212092216a2193212092212093216a2194212093212094216a2195212094212095216a219621" - "2095212096216a2197212096212097216a2198212097212098216a2199212098212099216a219a21209921209a216a" - "219b21209a21209b216a219c21209b21209c216a219d21209c21209d216a219e21209d21209e216a219f21209e2120" - "9f216a21a021209f2120a0216a21a12120a02120a1216a21a22120a12120a2216a21a32120a22120a3216a21a42120" - "a32120a4216a21a52120a42120a5216a21a62120a52120a6216a21a72120a62120a7216a21a82120a72120a8216a21" - "a92120a82120a9216a21aa2120a92120aa216a21ab2120aa2120ab216a21ac2120ab2120ac216a21ad2120ac2120ad" - "216a21ae2120ad2120ae216a21af2120ae2120af216a21b02120af2120b0216a21b12120b02120b1216a21b22120b1" - "2120b2216a21b32120b22120b3216a21b42120b32120b4216a21b52120b42120b5216a21b62120b52120b6216a21b7" - "2120b62120b7216a21b82120b72120b8216a21b92120b82120b9216a21ba2120b92120ba216a21bb2120ba2120bb21" - "6a21bc2120bb2120bc216a21bd2120bc2120bd216a21be2120bd2120be216a21bf2120be2120bf216a21c02120bf21" - "20c0216a21c12120c02120c1216a21c22120c12120c2216a21c32120c22120c3216a21c42120c32120c4216a21c521" - "20c42120c5216a21c62120c52120c6216a21c72120c62120c7216a21c82120c72120c8216a21c92120c82120c9216a" - "21ca2120c92120ca216a21cb2120ca2120cb216a21cc2120cb2120cc216a21cd2120cc2120cd216a21ce2120cd2120" - "ce216a21cf2120ce2120cf216a21d02120cf2120d0216a21d12120d02120d1216a21d22120d12120d2216a21d32120" - "d22120d3216a21d42120d32120d4216a21d52120d42120d5216a21d62120d52120d6216a21d72120d62120d7216a21" - "d82120d72120d8216a21d92120d82120d9216a21da2120d92120da216a21db2120da2120db216a21dc2120db2120dc" - "216a21dd2120dc2120dd216a21de2120dd2120de216a21df2120de2120df216a21e02120df2120e0216a21e12120e0" - "2120e1216a21e22120e12120e2216a21e32120e22120e3216a21e42120e32120e4216a21e52120e42120e5216a21e6" - "2120e52120e6216a21e72120e62120e7216a21e82120e72120e8216a21e92120e82120e9216a21ea2120e92120ea21" - "6a21eb2120ea2120eb216a21ec2120eb2120ec216a21ed2120ec2120ed216a21ee2120ed2120ee216a21ef2120ee21" - "20ef216a21f02120ef2120f0216a21f12120f02120f1216a21f22120f12120f2216a21f32120f22120f3216a21f421" - "20f32120f4216a21f52120f42120f5216a21f62120f52120f6216a21f72120f62120f7216a21f82120f72120f8216a" - "21f92120f82120f9216a21fa2120f92120fa216a21fb2120fa2120fb216a21fc2120fb2120fc216a21fd2120fc2120" - "fd216a21fe2120fd2120fe216a21ff2120fe2120ff216a21802220ff212080226a2181222080222081226a21822220" - "81222082226a2183222082222083226a2184222083222084226a2185222084222085226a2186222085222086226a21" - "87222086222087226a2188222087222088226a2189222088222089226a218a22208922208a226a218b22208a22208b" - "226a218c22208b22208c226a218d22208c22208d226a218e22208d22208e226a218f22208e22208f226a219022208f" - "222090226a2191222090222091226a2192222091222092226a2193222092222093226a2194222093222094226a2195" - "222094222095226a2196222095222096226a2197222096222097226a2198222097222098226a219922209822209922" - "6a219a22209922209a226a219b22209a22209b226a219c22209b22209c226a219d22209c22209d226a219e22209d22" - "209e226a219f22209e22209f226a21a022209f2220a0226a21a12220a02220a1226a21a22220a12220a2226a21a322" - "20a22220a3226a21a42220a32220a4226a21a52220a42220a5226a21a62220a52220a6226a21a72220a62220a7226a" - "21a82220a72220a8226a21a92220a82220a9226a21aa2220a92220aa226a21ab2220aa2220ab226a21ac2220ab2220" - "ac226a21ad2220ac2220ad226a21ae2220ad2220ae226a21af2220ae2220af226a21b02220af2220b0226a21b12220" - "b02220b1226a21b22220b12220b2226a21b32220b22220b3226a21b42220b32220b4226a21b52220b42220b5226a21" - "b62220b52220b6226a21b72220b62220b7226a21b82220b72220b8226a21b92220b82220b9226a21ba2220b92220ba" - "226a21bb2220ba2220bb226a21bc2220bb2220bc226a21bd2220bc2220bd226a21be2220bd2220be226a21bf2220be" - "2220bf226a21c02220bf2220c0226a21c12220c02220c1226a21c22220c12220c2226a21c32220c22220c3226a21c4" - "2220c32220c4226a21c52220c42220c5226a21c62220c52220c6226a21c72220c62220c7226a21c82220c72220c822" - "6a21c92220c82220c9226a21ca2220c92220ca226a21cb2220ca2220cb226a21cc2220cb2220cc226a21cd2220cc22" - "20cd226a21ce2220cd2220ce226a21cf2220ce2220cf226a21d02220cf2220d0226a21d12220d02220d1226a21d222" - "20d12220d2226a21d32220d22220d3226a21d42220d32220d4226a21d52220d42220d5226a21d62220d52220d6226a" - "21d72220d62220d7226a21d82220d72220d8226a21d92220d82220d9226a21da2220d92220da226a21db2220da2220" - "db226a21dc2220db2220dc226a21dd2220dc2220dd226a21de2220dd2220de226a21df2220de2220df226a21e02220" - "df2220e0226a21e12220e02220e1226a21e22220e12220e2226a21e32220e22220e3226a21e42220e32220e4226a21" - "e52220e42220e5226a21e62220e52220e6226a21e72220e62220e7226a21e82220e72220e8226a21e92220e82220e9" - "226a21ea2220e92220ea226a21eb2220ea2220eb226a21ec2220eb2220ec226a21ed2220ec2220ed226a21ee2220ed" - "2220ee226a21ef2220ee2220ef226a21f02220ef2220f0226a21f12220f02220f1226a21f22220f12220f2226a21f3" - "2220f22220f3226a21f42220f32220f4226a21f52220f42220f5226a21f62220f52220f6226a21f72220f62220f722" - "6a21f82220f72220f8226a21f92220f82220f9226a21fa2220f92220fa226a21fb2220fa2220fb226a21fc2220fb22" - "20fc226a21fd2220fc2220fd226a21fe2220fd2220fe226a21ff2220fe2220ff226a21802320ff222080236a218123" - "2080232081236a2182232081232082236a2183232082232083236a2184232083232084236a2185232084232085236a" - "2186232085232086236a2187232086232087236a2188232087232088236a2189232088232089236a218a2320892320" - "8a236a218b23208a23208b236a218c23208b23208c236a218d23208c23208d236a218e23208d23208e236a218f2320" - "8e23208f236a219023208f232090236a2191232090232091236a2192232091232092236a2193232092232093236a21" - "94232093232094236a2195232094232095236a2196232095232096236a2197232096232097236a2198232097232098" - "236a2199232098232099236a219a23209923209a236a219b23209a23209b236a219c23209b23209c236a219d23209c" - "23209d236a219e23209d23209e236a219f23209e23209f236a21a023209f2320a0236a21a12320a02320a1236a21a2" - "2320a12320a2236a21a32320a22320a3236a21a42320a32320a4236a21a52320a42320a5236a21a62320a52320a623" - "6a21a72320a62320a7236a21a82320a72320a8236a21a92320a82320a9236a21aa2320a92320aa236a21ab2320aa23" - "20ab236a21ac2320ab2320ac236a21ad2320ac2320ad236a21ae2320ad2320ae236a21af2320ae2320af236a21b023" - "20af2320b0236a21b12320b02320b1236a21b22320b12320b2236a21b32320b22320b3236a21b42320b32320b4236a" - "21b52320b42320b5236a21b62320b52320b6236a21b72320b62320b7236a21b82320b72320b8236a21b92320b82320" - "b9236a21ba2320b92320ba236a21bb2320ba2320bb236a21bc2320bb2320bc236a21bd2320bc2320bd236a21be2320" - "bd2320be236a21bf2320be2320bf236a21c02320bf2320c0236a21c12320c02320c1236a21c22320c12320c2236a21" - "c32320c22320c3236a21c42320c32320c4236a21c52320c42320c5236a21c62320c52320c6236a21c72320c62320c7" - "236a21c82320c72320c8236a21c92320c82320c9236a21ca2320c92320ca236a21cb2320ca2320cb236a21cc2320cb" - "2320cc236a21cd2320cc2320cd236a21ce2320cd2320ce236a21cf2320ce2320cf236a21d02320cf2320d0236a21d1" - "2320d02320d1236a21d22320d12320d2236a21d32320d22320d3236a21d42320d32320d4236a21d52320d42320d523" - "6a21d62320d52320d6236a21d72320d62320d7236a21d82320d72320d8236a21d92320d82320d9236a21da2320d923" - "20da236a21db2320da2320db236a21dc2320db2320dc236a21dd2320dc2320dd236a21de2320dd2320de236a21df23" - "20de2320df236a21e02320df2320e0236a21e12320e02320e1236a21e22320e12320e2236a21e32320e22320e3236a" - "21e42320e32320e4236a21e52320e42320e5236a21e62320e52320e6236a21e72320e62320e7236a21e82320e72320" - "e8236a21e92320e82320e9236a21ea2320e92320ea236a21eb2320ea2320eb236a21ec2320eb2320ec236a21ed2320" - "ec2320ed236a21ee2320ed2320ee236a21ef2320ee2320ef236a21f02320ef2320f0236a21f12320f02320f1236a21" - "f22320f12320f2236a21f32320f22320f3236a21f42320f32320f4236a21f52320f42320f5236a21f62320f52320f6" - "236a21f72320f62320f7236a21f82320f72320f8236a21f92320f82320f9236a21fa2320f92320fa236a21fb2320fa" - "2320fb236a21fc2320fb2320fc236a21fd2320fc2320fd236a21fe2320fd2320fe236a21ff2320fe2320ff236a2180" - "2420ff232080246a2181242080242081246a2182242081242082246a2183242082242083246a218424208324208424" - "6a2185242084242085246a2186242085242086246a2187242086242087246a2188242087242088246a218924208824" - "2089246a218a24208924208a246a218b24208a24208b246a218c24208b24208c246a218d24208c24208d246a218e24" - "208d24208e246a218f24208e24208f246a219024208f242090246a2191242090242091246a2192242091242092246a" - "2193242092242093246a2194242093242094246a2195242094242095246a2196242095242096246a21972420962420" - "97246a2198242097242098246a2199242098242099246a219a24209924209a246a219b24209a24209b246a219c2420" - "9b24209c246a219d24209c24209d246a219e24209d24209e246a219f24209e24209f246a21a024209f2420a0246a21" - "a12420a02420a1246a21a22420a12420a2246a21a32420a22420a3246a21a42420a32420a4246a21a52420a42420a5" - "246a21a62420a52420a6246a21a72420a62420a7246a21a82420a72420a8246a21a92420a82420a9246a21aa2420a9" - "2420aa246a21ab2420aa2420ab246a21ac2420ab2420ac246a21ad2420ac2420ad246a21ae2420ad2420ae246a21af" - "2420ae2420af246a21b02420af2420b0246a21b12420b02420b1246a21b22420b12420b2246a21b32420b22420b324" - "6a21b42420b32420b4246a21b52420b42420b5246a21b62420b52420b6246a21b72420b62420b7246a21b82420b724" - "20b8246a21b92420b82420b9246a21ba2420b92420ba246a21bb2420ba2420bb246a21bc2420bb2420bc246a21bd24" - "20bc2420bd246a21be2420bd2420be246a21bf2420be2420bf246a21c02420bf2420c0246a21c12420c02420c1246a" - "21c22420c12420c2246a21c32420c22420c3246a21c42420c32420c4246a21c52420c42420c5246a21c62420c52420" - "c6246a21c72420c62420c7246a21c82420c72420c8246a21c92420c82420c9246a21ca2420c92420ca246a21cb2420" - "ca2420cb246a21cc2420cb2420cc246a21cd2420cc2420cd246a21ce2420cd2420ce246a21cf2420ce2420cf246a21" - "d02420cf2420d0246a21d12420d02420d1246a21d22420d12420d2246a21d32420d22420d3246a21d42420d32420d4" - "246a21d52420d42420d5246a21d62420d52420d6246a21d72420d62420d7246a21d82420d72420d8246a21d92420d8" - "2420d9246a21da2420d92420da246a21db2420da2420db246a21dc2420db2420dc246a21dd2420dc2420dd246a21de" - "2420dd2420de246a21df2420de2420df246a21e02420df2420e0246a21e12420e02420e1246a21e22420e12420e224" - "6a21e32420e22420e3246a21e42420e32420e4246a21e52420e42420e5246a21e62420e52420e6246a21e72420e624" - "20e7246a21e82420e72420e8246a21e92420e82420e9246a21ea2420e92420ea246a21eb2420ea2420eb246a21ec24" - "20eb2420ec246a21ed2420ec2420ed246a21ee2420ed2420ee246a21ef2420ee2420ef246a21f02420ef2420f0246a" - "21f12420f02420f1246a21f22420f12420f2246a21f32420f22420f3246a21f42420f32420f4246a21f52420f42420" - "f5246a21f62420f52420f6246a21f72420f62420f7246a21f82420f72420f8246a21f92420f82420f9246a21fa2420" - "f92420fa246a21fb2420fa2420fb246a21fc2420fb2420fc246a21fd2420fc2420fd246a21fe2420fd2420fe246a21" - "ff2420fe2420ff246a21802520ff242080256a2181252080252081256a2182252081252082256a2183252082252083" - "256a2184252083252084256a2185252084252085256a2186252085252086256a2187252086252087256a2188252087" - "252088256a2189252088252089256a218a25208925208a256a218b25208a25208b256a218c25208b25208c256a218d" - "25208c25208d256a218e25208d25208e256a218f25208e25208f256a219025208f252090256a219125209025209125" - "6a2192252091252092256a2193252092252093256a2194252093252094256a2195252094252095256a219625209525" - "2096256a2197252096252097256a2198252097252098256a2199252098252099256a219a25209925209a256a219b25" - "209a25209b256a219c25209b25209c256a219d25209c25209d256a219e25209d25209e256a219f25209e25209f256a" - "21a025209f2520a0256a21a12520a02520a1256a21a22520a12520a2256a21a32520a22520a3256a21a42520a32520" - "a4256a21a52520a42520a5256a21a62520a52520a6256a21a72520a62520a7256a21a82520a72520a8256a21a92520" - "a82520a9256a21aa2520a92520aa256a21ab2520aa2520ab256a21ac2520ab2520ac256a21ad2520ac2520ad256a21" - "ae2520ad2520ae256a21af2520ae2520af256a21b02520af2520b0256a21b12520b02520b1256a21b22520b12520b2" - "256a21b32520b22520b3256a21b42520b32520b4256a21b52520b42520b5256a21b62520b52520b6256a21b72520b6" - "2520b7256a21b82520b72520b8256a21b92520b82520b9256a21ba2520b92520ba256a21bb2520ba2520bb256a21bc" - "2520bb2520bc256a21bd2520bc2520bd256a21be2520bd2520be256a21bf2520be2520bf256a21c02520bf2520c025" - "6a21c12520c02520c1256a21c22520c12520c2256a21c32520c22520c3256a21c42520c32520c4256a21c52520c425" - "20c5256a21c62520c52520c6256a21c72520c62520c7256a21c82520c72520c8256a21c92520c82520c9256a21ca25" - "20c92520ca256a21cb2520ca2520cb256a21cc2520cb2520cc256a21cd2520cc2520cd256a21ce2520cd2520ce256a" - "21cf2520ce2520cf256a21d02520cf2520d0256a21d12520d02520d1256a21d22520d12520d2256a21d32520d22520" - "d3256a21d42520d32520d4256a21d52520d42520d5256a21d62520d52520d6256a21d72520d62520d7256a21d82520" - "d72520d8256a21d92520d82520d9256a21da2520d92520da256a21db2520da2520db256a21dc2520db2520dc256a21" - "dd2520dc2520dd256a21de2520dd2520de256a21df2520de2520df256a21e02520df2520e0256a21e12520e02520e1" - "256a21e22520e12520e2256a21e32520e22520e3256a21e42520e32520e4256a21e52520e42520e5256a21e62520e5" - "2520e6256a21e72520e62520e7256a21e82520e72520e8256a21e92520e82520e9256a21ea2520e92520ea256a21eb" - "2520ea2520eb256a21ec2520eb2520ec256a21ed2520ec2520ed256a21ee2520ed2520ee256a21ef2520ee2520ef25" - "6a21f02520ef2520f0256a21f12520f02520f1256a21f22520f12520f2256a21f32520f22520f3256a21f42520f325" - "20f4256a21f52520f42520f5256a21f62520f52520f6256a21f72520f62520f7256a21f82520f72520f8256a21f925" - "20f82520f9256a21fa2520f92520fa256a21fb2520fa2520fb256a21fc2520fb2520fc256a21fd2520fc2520fd256a" - "21fe2520fd2520fe256a21ff2520fe2520ff256a21802620ff252080266a2181262080262081266a21822620812620" - "82266a2183262082262083266a2184262083262084266a2185262084262085266a2186262085262086266a21872620" - "86262087266a2188262087262088266a2189262088262089266a218a26208926208a266a218b26208a26208b266a21" - "8c26208b26208c266a218d26208c26208d266a218e26208d26208e266a218f26208e26208f266a219026208f262090" - "266a2191262090262091266a2192262091262092266a2193262092262093266a2194262093262094266a2195262094" - "262095266a2196262095262096266a2197262096262097266a2198262097262098266a2199262098262099266a219a" - "26209926209a266a219b26209a26209b266a219c26209b26209c266a219d26209c26209d266a219e26209d26209e26" - "6a219f26209e26209f266a21a026209f2620a0266a21a12620a02620a1266a21a22620a12620a2266a21a32620a226" - "20a3266a21a42620a32620a4266a21a52620a42620a5266a21a62620a52620a6266a21a72620a62620a7266a21a826" - "20a72620a8266a21a92620a82620a9266a21aa2620a92620aa266a21ab2620aa2620ab266a21ac2620ab2620ac266a" - "21ad2620ac2620ad266a21ae2620ad2620ae266a21af2620ae2620af266a21b02620af2620b0266a21b12620b02620" - "b1266a21b22620b12620b2266a21b32620b22620b3266a21b42620b32620b4266a21b52620b42620b5266a21b62620" - "b52620b6266a21b72620b62620b7266a21b82620b72620b8266a21b92620b82620b9266a21ba2620b92620ba266a21" - "bb2620ba2620bb266a21bc2620bb2620bc266a21bd2620bc2620bd266a21be2620bd2620be266a21bf2620be2620bf" - "266a21c02620bf2620c0266a21c12620c02620c1266a21c22620c12620c2266a21c32620c22620c3266a21c42620c3" - "2620c4266a21c52620c42620c5266a21c62620c52620c6266a21c72620c62620c7266a21c82620c72620c8266a21c9" - "2620c82620c9266a21ca2620c92620ca266a21cb2620ca2620cb266a21cc2620cb2620cc266a21cd2620cc2620cd26" - "6a21ce2620cd2620ce266a21cf2620ce2620cf266a21d02620cf2620d0266a21d12620d02620d1266a21d22620d126" - "20d2266a21d32620d22620d3266a21d42620d32620d4266a21d52620d42620d5266a21d62620d52620d6266a21d726" - "20d62620d7266a21d82620d72620d8266a21d92620d82620d9266a21da2620d92620da266a21db2620da2620db266a" - "21dc2620db2620dc266a21dd2620dc2620dd266a21de2620dd2620de266a21df2620de2620df266a21e02620df2620" - "e0266a21e12620e02620e1266a21e22620e12620e2266a21e32620e22620e3266a21e42620e32620e4266a21e52620" - "e42620e5266a21e62620e52620e6266a21e72620e62620e7266a21e82620e72620e8266a21e92620e82620e9266a21" - "ea2620e92620ea266a21eb2620ea2620eb266a21ec2620eb2620ec266a21ed2620ec2620ed266a21ee2620ed2620ee" - "266a21ef2620ee2620ef266a21f02620ef2620f0266a21f12620f02620f1266a21f22620f12620f2266a21f32620f2" - "2620f3266a21f42620f32620f4266a21f52620f42620f5266a21f62620f52620f6266a21f72620f62620f7266a21f8" - "2620f72620f8266a21f92620f82620f9266a21fa2620f92620fa266a21fb2620fa2620fb266a21fc2620fb2620fc26" - "6a21fd2620fc2620fd266a21fe2620fd2620fe266a21ff2620fe2620ff266a21802720ff262080276a218127208027" - "2081276a2182272081272082276a2183272082272083276a2184272083272084276a2185272084272085276a218627" - "2085272086276a2187272086272087276a2188272087272088276a2189272088272089276a218a27208927208a276a" - "218b27208a27208b276a218c27208b27208c276a218d27208c27208d276a218e27208d27208e276a218f27208e2720" - "8f276a219027208f272090276a2191272090272091276a2192272091272092276a2193272092272093276a21942720" - "93272094276a2195272094272095276a2196272095272096276a2197272096272097276a2198272097272098276a21" - "99272098272099276a219a27209927209a276a219b27209a27209b276a219c27209b27209c276a219d27209c27209d" - "276a219e27209d27209e276a219f27209e27209f276a21a027209f2720a0276a21a12720a02720a1276a21a22720a1" - "2720a2276a21a32720a22720a3276a21a42720a32720a4276a21a52720a42720a5276a21a62720a52720a6276a21a7" - "2720a62720a7276a21a82720a72720a8276a21a92720a82720a9276a21aa2720a92720aa276a21ab2720aa2720ab27" - "6a21ac2720ab2720ac276a21ad2720ac2720ad276a21ae2720ad2720ae276a21af2720ae2720af276a21b02720af27" - "20b0276a21b12720b02720b1276a21b22720b12720b2276a21b32720b22720b3276a21b42720b32720b4276a21b527" - "20b42720b5276a21b62720b52720b6276a21b72720b62720b7276a21b82720b72720b8276a21b92720b82720b9276a" - "21ba2720b92720ba276a21bb2720ba2720bb276a21bc2720bb2720bc276a21bd2720bc2720bd276a21be2720bd2720" - "be276a21bf2720be2720bf276a21c02720bf2720c0276a21c12720c02720c1276a21c22720c12720c2276a21c32720" - "c22720c3276a21c42720c32720c4276a21c52720c42720c5276a21c62720c52720c6276a21c72720c62720c7276a21" - "c82720c72720c8276a21c92720c82720c9276a21ca2720c92720ca276a21cb2720ca2720cb276a21cc2720cb2720cc" - "276a21cd2720cc2720cd276a21ce2720cd2720ce276a21cf2720ce2720cf276a21d02720cf2720d0276a21d12720d0" - "2720d1276a21d22720d12720d2276a21d32720d22720d3276a21d42720d32720d4276a21d52720d42720d5276a21d6" - "2720d52720d6276a21d72720d62720d7276a21d82720d72720d8276a21d92720d82720d9276a21da2720d92720da27" - "6a21db2720da2720db276a21dc2720db2720dc276a21dd2720dc2720dd276a21de2720dd2720de276a21df2720de27" - "20df276a21e02720df2720e0276a21e12720e02720e1276a21e22720e12720e2276a21e32720e22720e3276a21e427" - "20e32720e4276a21e52720e42720e5276a21e62720e52720e6276a21e72720e62720e7276a21e82720e72720e8276a" - "21e92720e82720e9276a21ea2720e92720ea276a21eb2720ea2720eb276a21ec2720eb2720ec276a21ed2720ec2720" - "ed276a21ee2720ed2720ee276a21ef2720ee2720ef276a21f02720ef2720f0276a21f12720f02720f1276a21f22720" - "f12720f2276a21f32720f22720f3276a21f42720f32720f4276a21f52720f42720f5276a21f62720f52720f6276a21" - "f72720f62720f7276a21f82720f72720f8276a21f92720f82720f9276a21fa2720f92720fa276a21fb2720fa2720fb" - "276a21fc2720fb2720fc276a21fd2720fc2720fd276a21fe2720fd2720fe276a21ff2720fe2720ff276a21802820ff" - "272080286a2181282080282081286a2182282081282082286a2183282082282083286a2184282083282084286a2185" - "282084282085286a2186282085282086286a2187282086282087286a2188282087282088286a218928208828208928" - "6a218a28208928208a286a218b28208a28208b286a218c28208b28208c286a218d28208c28208d286a218e28208d28" - "208e286a218f28208e28208f286a219028208f282090286a2191282090282091286a2192282091282092286a219328" - "2092282093286a2194282093282094286a2195282094282095286a2196282095282096286a2197282096282097286a" - "2198282097282098286a2199282098282099286a219a28209928209a286a219b28209a28209b286a219c28209b2820" - "9c286a219d28209c28209d286a219e28209d28209e286a219f28209e28209f286a21a028209f2820a0286a21a12820" - "a02820a1286a21a22820a12820a2286a21a32820a22820a3286a21a42820a32820a4286a21a52820a42820a5286a21" - "a62820a52820a6286a21a72820a62820a7286a21a82820a72820a8286a21a92820a82820a9286a21aa2820a92820aa" - "286a21ab2820aa2820ab286a21ac2820ab2820ac286a21ad2820ac2820ad286a21ae2820ad2820ae286a21af2820ae" - "2820af286a21b02820af2820b0286a21b12820b02820b1286a21b22820b12820b2286a21b32820b22820b3286a21b4" - "2820b32820b4286a21b52820b42820b5286a21b62820b52820b6286a21b72820b62820b7286a21b82820b72820b828" - "6a21b92820b82820b9286a21ba2820b92820ba286a21bb2820ba2820bb286a21bc2820bb2820bc286a21bd2820bc28" - "20bd286a21be2820bd2820be286a21bf2820be2820bf286a21c02820bf2820c0286a21c12820c02820c1286a21c228" - "20c12820c2286a21c32820c22820c3286a21c42820c32820c4286a21c52820c42820c5286a21c62820c52820c6286a" - "21c72820c62820c7286a21c82820c72820c8286a21c92820c82820c9286a21ca2820c92820ca286a21cb2820ca2820" - "cb286a21cc2820cb2820cc286a21cd2820cc2820cd286a21ce2820cd2820ce286a21cf2820ce2820cf286a21d02820" - "cf2820d0286a21d12820d02820d1286a21d22820d12820d2286a21d32820d22820d3286a21d42820d32820d4286a21" - "d52820d42820d5286a21d62820d52820d6286a21d72820d62820d7286a21d82820d72820d8286a21d92820d82820d9" - "286a21da2820d92820da286a21db2820da2820db286a21dc2820db2820dc286a21dd2820dc2820dd286a21de2820dd" - "2820de286a21df2820de2820df286a21e02820df2820e0286a21e12820e02820e1286a21e22820e12820e2286a21e3" - "2820e22820e3286a21e42820e32820e4286a21e52820e42820e5286a21e62820e52820e6286a21e72820e62820e728" - "6a21e82820e72820e8286a21e92820e82820e9286a21ea2820e92820ea286a21eb2820ea2820eb286a21ec2820eb28" - "20ec286a21ed2820ec2820ed286a21ee2820ed2820ee286a21ef2820ee2820ef286a21f02820ef2820f0286a21f128" - "20f02820f1286a21f22820f12820f2286a21f32820f22820f3286a21f42820f32820f4286a21f52820f42820f5286a" - "21f62820f52820f6286a21f72820f62820f7286a21f82820f72820f8286a21f92820f82820f9286a21fa2820f92820" - "fa286a21fb2820fa2820fb286a21fc2820fb2820fc286a21fd2820fc2820fd286a21fe2820fd2820fe286a21ff2820" - "fe2820ff286a21802920ff282080296a2181292080292081296a2182292081292082296a2183292082292083296a21" - "84292083292084296a2185292084292085296a2186292085292086296a2187292086292087296a2188292087292088" - "296a2189292088292089296a218a29208929208a296a218b29208a29208b296a218c29208b29208c296a218d29208c" - "29208d296a218e29208d29208e296a218f29208e29208f296a219029208f292090296a2191292090292091296a2192" - "292091292092296a2193292092292093296a2194292093292094296a2195292094292095296a219629209529209629" - "6a2197292096292097296a2198292097292098296a2199292098292099296a219a29209929209a296a219b29209a29" - "209b296a219c29209b29209c296a219d29209c29209d296a219e29209d29209e296a219f29209e29209f296a21a029" - "209f2920a0296a21a12920a02920a1296a21a22920a12920a2296a21a32920a22920a3296a21a42920a32920a4296a" - "21a52920a42920a5296a21a62920a52920a6296a21a72920a62920a7296a21a82920a72920a8296a21a92920a82920" - "a9296a21aa2920a92920aa296a21ab2920aa2920ab296a21ac2920ab2920ac296a21ad2920ac2920ad296a21ae2920" - "ad2920ae296a21af2920ae2920af296a21b02920af2920b0296a21b12920b02920b1296a21b22920b12920b2296a21" - "b32920b22920b3296a21b42920b32920b4296a21b52920b42920b5296a21b62920b52920b6296a21b72920b62920b7" - "296a21b82920b72920b8296a21b92920b82920b9296a21ba2920b92920ba296a21bb2920ba2920bb296a21bc2920bb" - "2920bc296a21bd2920bc2920bd296a21be2920bd2920be296a21bf2920be2920bf296a21c02920bf2920c0296a21c1" - "2920c02920c1296a21c22920c12920c2296a21c32920c22920c3296a21c42920c32920c4296a21c52920c42920c529" - "6a21c62920c52920c6296a21c72920c62920c7296a21c82920c72920c8296a21c92920c82920c9296a21ca2920c929" - "20ca296a21cb2920ca2920cb296a21cc2920cb2920cc296a21cd2920cc2920cd296a21ce2920cd2920ce296a21cf29" - "20ce2920cf296a21d02920cf2920d0296a21d12920d02920d1296a21d22920d12920d2296a21d32920d22920d3296a" - "21d42920d32920d4296a21d52920d42920d5296a21d62920d52920d6296a21d72920d62920d7296a21d82920d72920" - "d8296a21d92920d82920d9296a21da2920d92920da296a21db2920da2920db296a21dc2920db2920dc296a21dd2920" - "dc2920dd296a21de2920dd2920de296a21df2920de2920df296a21e02920df2920e0296a21e12920e02920e1296a21" - "e22920e12920e2296a21e32920e22920e3296a21e42920e32920e4296a21e52920e42920e5296a21e62920e52920e6" - "296a21e72920e62920e7296a21e82920e72920e8296a21e92920e82920e9296a21ea2920e92920ea296a21eb2920ea" - "2920eb296a21ec2920eb2920ec296a21ed2920ec2920ed296a21ee2920ed2920ee296a21ef2920ee2920ef296a21f0" - "2920ef2920f0296a21f12920f02920f1296a21f22920f12920f2296a21f32920f22920f3296a21f42920f32920f429" - "6a21f52920f42920f5296a21f62920f52920f6296a21f72920f62920f7296a21f82920f72920f8296a21f92920f829" - "20f9296a21fa2920f92920fa296a21fb2920fa2920fb296a21fc2920fb2920fc296a21fd2920fc2920fd296a21fe29" - "20fd2920fe296a21ff2920fe2920ff296a21802a20ff2920802a6a21812a20802a20812a6a21822a20812a20822a6a" - "21832a20822a20832a6a21842a20832a20842a6a21852a20842a20852a6a21862a20852a20862a6a21872a20862a20" - "872a6a21882a20872a20882a6a21892a20882a20892a6a218a2a20892a208a2a6a218b2a208a2a208b2a6a218c2a20" - "8b2a208c2a6a218d2a208c2a208d2a6a218e2a208d2a208e2a6a218f2a208e2a208f2a6a21902a208f2a20902a6a21" - "912a20902a20912a6a21922a20912a20922a6a21932a20922a20932a6a21942a20932a20942a6a21952a20942a2095" - "2a6a21962a20952a20962a6a21972a20962a20972a6a21982a20972a20982a6a21992a20982a20992a6a219a2a2099" - "2a209a2a6a219b2a209a2a209b2a6a219c2a209b2a209c2a6a219d2a209c2a209d2a6a219e2a209d2a209e2a6a219f" - "2a209e2a209f2a6a21a02a209f2a20a02a6a21a12a20a02a20a12a6a21a22a20a12a20a22a6a21a32a20a22a20a32a" - "6a21a42a20a32a20a42a6a21a52a20a42a20a52a6a21a62a20a52a20a62a6a21a72a20a62a20a72a6a21a82a20a72a" - "20a82a6a21a92a20a82a20a92a6a21aa2a20a92a20aa2a6a21ab2a20aa2a20ab2a6a21ac2a20ab2a20ac2a6a21ad2a" - "20ac2a20ad2a6a21ae2a20ad2a20ae2a6a21af2a20ae2a20af2a6a21b02a20af2a20b02a6a21b12a20b02a20b12a6a" - "21b22a20b12a20b22a6a21b32a20b22a20b32a6a21b42a20b32a20b42a6a21b52a20b42a20b52a6a21b62a20b52a20" - "b62a6a21b72a20b62a20b72a6a21b82a20b72a20b82a6a21b92a20b82a20b92a6a21ba2a20b92a20ba2a6a21bb2a20" - "ba2a20bb2a6a21bc2a20bb2a20bc2a6a21bd2a20bc2a20bd2a6a21be2a20bd2a20be2a6a21bf2a20be2a20bf2a6a21" - "c02a20bf2a20c02a6a21c12a20c02a20c12a6a21c22a20c12a20c22a6a21c32a20c22a20c32a6a21c42a20c32a20c4" - "2a6a21c52a20c42a20c52a6a21c62a20c52a20c62a6a21c72a20c62a20c72a6a21c82a20c72a20c82a6a21c92a20c8" - "2a20c92a6a21ca2a20c92a20ca2a6a21cb2a20ca2a20cb2a6a21cc2a20cb2a20cc2a6a21cd2a20cc2a20cd2a6a21ce" - "2a20cd2a20ce2a6a21cf2a20ce2a20cf2a6a21d02a20cf2a20d02a6a21d12a20d02a20d12a6a21d22a20d12a20d22a" - "6a21d32a20d22a20d32a6a21d42a20d32a20d42a6a21d52a20d42a20d52a6a21d62a20d52a20d62a6a21d72a20d62a" - "20d72a6a21d82a20d72a20d82a6a21d92a20d82a20d92a6a21da2a20d92a20da2a6a21db2a20da2a20db2a6a21dc2a" - "20db2a20dc2a6a21dd2a20dc2a20dd2a6a21de2a20dd2a20de2a6a21df2a20de2a20df2a6a21e02a20df2a20e02a6a" - "21e12a20e02a20e12a6a21e22a20e12a20e22a6a21e32a20e22a20e32a6a21e42a20e32a20e42a6a21e52a20e42a20" - "e52a6a21e62a20e52a20e62a6a21e72a20e62a20e72a6a21e82a20e72a20e82a6a21e92a20e82a20e92a6a21ea2a20" - "e92a20ea2a6a21eb2a20ea2a20eb2a6a21ec2a20eb2a20ec2a6a21ed2a20ec2a20ed2a6a21ee2a20ed2a20ee2a6a21" - "ef2a20ee2a20ef2a6a21f02a20ef2a20f02a6a21f12a20f02a20f12a6a21f22a20f12a20f22a6a21f32a20f22a20f3" - "2a6a21f42a20f32a20f42a6a21f52a20f42a20f52a6a21f62a20f52a20f62a6a21f72a20f62a20f72a6a21f82a20f7" - "2a20f82a6a21f92a20f82a20f92a6a21fa2a20f92a20fa2a6a21fb2a20fa2a20fb2a6a21fc2a20fb2a20fc2a6a21fd" - "2a20fc2a20fd2a6a21fe2a20fd2a20fe2a6a21ff2a20fe2a20ff2a6a21802b20ff2a20802b6a21812b20802b20812b" - "6a21822b20812b20822b6a21832b20822b20832b6a21842b20832b20842b6a21852b20842b20852b6a21862b20852b" - "20862b6a21872b20862b20872b6a21882b20872b20882b6a21892b20882b20892b6a218a2b20892b208a2b6a218b2b" - "208a2b208b2b6a218c2b208b2b208c2b6a218d2b208c2b208d2b6a218e2b208d2b208e2b6a218f2b208e2b208f2b6a" - "21902b208f2b20902b6a21912b20902b20912b6a21922b20912b20922b6a21932b20922b20932b6a21942b20932b20" - "942b6a21952b20942b20952b6a21962b20952b20962b6a21972b20962b20972b6a21982b20972b20982b6a21992b20" - "982b20992b6a219a2b20992b209a2b6a219b2b209a2b209b2b6a219c2b209b2b209c2b6a219d2b209c2b209d2b6a21" - "9e2b209d2b209e2b6a219f2b209e2b209f2b6a21a02b209f2b20a02b6a21a12b20a02b20a12b6a21a22b20a12b20a2" - "2b6a21a32b20a22b20a32b6a21a42b20a32b20a42b6a21a52b20a42b20a52b6a21a62b20a52b20a62b6a21a72b20a6" - "2b20a72b6a21a82b20a72b20a82b6a21a92b20a82b20a92b6a21aa2b20a92b20aa2b6a21ab2b20aa2b20ab2b6a21ac" - "2b20ab2b20ac2b6a21ad2b20ac2b20ad2b6a21ae2b20ad2b20ae2b6a21af2b20ae2b20af2b6a21b02b20af2b20b02b" - "6a21b12b20b02b20b12b6a21b22b20b12b20b22b6a21b32b20b22b20b32b6a21b42b20b32b20b42b6a21b52b20b42b" - "20b52b6a21b62b20b52b20b62b6a21b72b20b62b20b72b6a21b82b20b72b20b82b6a21b92b20b82b20b92b6a21ba2b" - "20b92b20ba2b6a21bb2b20ba2b20bb2b6a21bc2b20bb2b20bc2b6a21bd2b20bc2b20bd2b6a21be2b20bd2b20be2b6a" - "21bf2b20be2b20bf2b6a21c02b20bf2b20c02b6a21c12b20c02b20c12b6a21c22b20c12b20c22b6a21c32b20c22b20" - "c32b6a21c42b20c32b20c42b6a21c52b20c42b20c52b6a21c62b20c52b20c62b6a21c72b20c62b20c72b6a21c82b20" - "c72b20c82b6a21c92b20c82b20c92b6a21ca2b20c92b20ca2b6a21cb2b20ca2b20cb2b6a21cc2b20cb2b20cc2b6a21" - "cd2b20cc2b20cd2b6a21ce2b20cd2b20ce2b6a21cf2b20ce2b20cf2b6a21d02b20cf2b20d02b6a21d12b20d02b20d1" - "2b6a21d22b20d12b20d22b6a21d32b20d22b20d32b6a21d42b20d32b20d42b6a21d52b20d42b20d52b6a21d62b20d5" - "2b20d62b6a21d72b20d62b20d72b6a21d82b20d72b20d82b6a21d92b20d82b20d92b6a21da2b20d92b20da2b6a21db" - "2b20da2b20db2b6a21dc2b20db2b20dc2b6a21dd2b20dc2b20dd2b6a21de2b20dd2b20de2b6a21df2b20de2b20df2b" - "6a21e02b20df2b20e02b6a21e12b20e02b20e12b6a21e22b20e12b20e22b6a21e32b20e22b20e32b6a21e42b20e32b" - "20e42b6a21e52b20e42b20e52b6a21e62b20e52b20e62b6a21e72b20e62b20e72b6a21e82b20e72b20e82b6a21e92b" - "20e82b20e92b6a21ea2b20e92b20ea2b6a21eb2b20ea2b20eb2b6a21ec2b20eb2b20ec2b6a21ed2b20ec2b20ed2b6a" - "21ee2b20ed2b20ee2b6a21ef2b20ee2b20ef2b6a21f02b20ef2b20f02b6a21f12b20f02b20f12b6a21f22b20f12b20" - "f22b6a21f32b20f22b20f32b6a21f42b20f32b20f42b6a21f52b20f42b20f52b6a21f62b20f52b20f62b6a21f72b20" - "f62b20f72b6a21f82b20f72b20f82b6a21f92b20f82b20f92b6a21fa2b20f92b20fa2b6a21fb2b20fa2b20fb2b6a21" - "fc2b20fb2b20fc2b6a21fd2b20fc2b20fd2b6a21fe2b20fd2b20fe2b6a21ff2b20fe2b20ff2b6a21802c20ff2b2080" - "2c6a21812c20802c20812c6a21822c20812c20822c6a21832c20822c20832c6a21842c20832c20842c6a21852c2084" - "2c20852c6a21862c20852c20862c6a21872c20862c20872c6a21882c20872c20882c6a21892c20882c20892c6a218a" - "2c20892c208a2c6a218b2c208a2c208b2c6a218c2c208b2c208c2c6a218d2c208c2c208d2c6a218e2c208d2c208e2c" - "6a218f2c208e2c208f2c6a21902c208f2c20902c6a21912c20902c20912c6a21922c20912c20922c6a21932c20922c" - "20932c6a21942c20932c20942c6a21952c20942c20952c6a21962c20952c20962c6a21972c20962c20972c6a21982c" - "20972c20982c6a21992c20982c20992c6a219a2c20992c209a2c6a219b2c209a2c209b2c6a219c2c209b2c209c2c6a" - "219d2c209c2c209d2c6a219e2c209d2c209e2c6a219f2c209e2c209f2c6a21a02c209f2c20a02c6a21a12c20a02c20" - "a12c6a21a22c20a12c20a22c6a21a32c20a22c20a32c6a21a42c20a32c20a42c6a21a52c20a42c20a52c6a21a62c20" - "a52c20a62c6a21a72c20a62c20a72c6a21a82c20a72c20a82c6a21a92c20a82c20a92c6a21aa2c20a92c20aa2c6a21" - "ab2c20aa2c20ab2c6a21ac2c20ab2c20ac2c6a21ad2c20ac2c20ad2c6a21ae2c20ad2c20ae2c6a21af2c20ae2c20af" - "2c6a21b02c20af2c20b02c6a21b12c20b02c20b12c6a21b22c20b12c20b22c6a21b32c20b22c20b32c6a21b42c20b3" - "2c20b42c6a21b52c20b42c20b52c6a21b62c20b52c20b62c6a21b72c20b62c20b72c6a21b82c20b72c20b82c6a21b9" - "2c20b82c20b92c6a21ba2c20b92c20ba2c6a21bb2c20ba2c20bb2c6a21bc2c20bb2c20bc2c6a21bd2c20bc2c20bd2c" - "6a21be2c20bd2c20be2c6a21bf2c20be2c20bf2c6a21c02c20bf2c20c02c6a21c12c20c02c20c12c6a21c22c20c12c" - "20c22c6a21c32c20c22c20c32c6a21c42c20c32c20c42c6a21c52c20c42c20c52c6a21c62c20c52c20c62c6a21c72c" - "20c62c20c72c6a21c82c20c72c20c82c6a21c92c20c82c20c92c6a21ca2c20c92c20ca2c6a21cb2c20ca2c20cb2c6a" - "21cc2c20cb2c20cc2c6a21cd2c20cc2c20cd2c6a21ce2c20cd2c20ce2c6a21cf2c20ce2c20cf2c6a21d02c20cf2c20" - "d02c6a21d12c20d02c20d12c6a21d22c20d12c20d22c6a21d32c20d22c20d32c6a21d42c20d32c20d42c6a21d52c20" - "d42c20d52c6a21d62c20d52c20d62c6a21d72c20d62c20d72c6a21d82c20d72c20d82c6a21d92c20d82c20d92c6a21" - "da2c20d92c20da2c6a21db2c20da2c20db2c6a21dc2c20db2c20dc2c6a21dd2c20dc2c20dd2c6a21de2c20dd2c20de" - "2c6a21df2c20de2c20df2c6a21e02c20df2c20e02c6a21e12c20e02c20e12c6a21e22c20e12c20e22c6a21e32c20e2" - "2c20e32c6a21e42c20e32c20e42c6a21e52c20e42c20e52c6a21e62c20e52c20e62c6a21e72c20e62c20e72c6a21e8" - "2c20e72c20e82c6a21e92c20e82c20e92c6a21ea2c20e92c20ea2c6a21eb2c20ea2c20eb2c6a21ec2c20eb2c20ec2c" - "6a21ed2c20ec2c20ed2c6a21ee2c20ed2c20ee2c6a21ef2c20ee2c20ef2c6a21f02c20ef2c20f02c6a21f12c20f02c" - "20f12c6a21f22c20f12c20f22c6a21f32c20f22c20f32c6a21f42c20f32c20f42c6a21f52c20f42c20f52c6a21f62c" - "20f52c20f62c6a21f72c20f62c20f72c6a21f82c20f72c20f82c6a21f92c20f82c20f92c6a21fa2c20f92c20fa2c6a" - "21fb2c20fa2c20fb2c6a21fc2c20fb2c20fc2c6a21fd2c20fc2c20fd2c6a21fe2c20fd2c20fe2c6a21ff2c20fe2c20" - "ff2c6a21802d20ff2c20802d6a21812d20802d20812d6a21822d20812d20822d6a21832d20822d20832d6a21842d20" - "832d20842d6a21852d20842d20852d6a21862d20852d20862d6a21872d20862d20872d6a21882d20872d20882d6a21" - "892d20882d20892d6a218a2d20892d208a2d6a218b2d208a2d208b2d6a218c2d208b2d208c2d6a218d2d208c2d208d" - "2d6a218e2d208d2d208e2d6a218f2d208e2d208f2d6a21902d208f2d20902d6a21912d20902d20912d6a21922d2091" - "2d20922d6a21932d20922d20932d6a21942d20932d20942d6a21952d20942d20952d6a21962d20952d20962d6a2197" - "2d20962d20972d6a21982d20972d20982d6a21992d20982d20992d6a219a2d20992d209a2d6a219b2d209a2d209b2d" - "6a219c2d209b2d209c2d6a219d2d209c2d209d2d6a219e2d209d2d209e2d6a219f2d209e2d209f2d6a21a02d209f2d" - "20a02d6a21a12d20a02d20a12d6a21a22d20a12d20a22d6a21a32d20a22d20a32d6a21a42d20a32d20a42d6a21a52d" - "20a42d20a52d6a21a62d20a52d20a62d6a21a72d20a62d20a72d6a21a82d20a72d20a82d6a21a92d20a82d20a92d6a" - "21aa2d20a92d20aa2d6a21ab2d20aa2d20ab2d6a21ac2d20ab2d20ac2d6a21ad2d20ac2d20ad2d6a21ae2d20ad2d20" - "ae2d6a21af2d20ae2d20af2d6a21b02d20af2d20b02d6a21b12d20b02d20b12d6a21b22d20b12d20b22d6a21b32d20" - "b22d20b32d6a21b42d20b32d20b42d6a21b52d20b42d20b52d6a21b62d20b52d20b62d6a21b72d20b62d20b72d6a21" - "b82d20b72d20b82d6a21b92d20b82d20b92d6a21ba2d20b92d20ba2d6a21bb2d20ba2d20bb2d6a21bc2d20bb2d20bc" - "2d6a21bd2d20bc2d20bd2d6a21be2d20bd2d20be2d6a21bf2d20be2d20bf2d6a21c02d20bf2d20c02d6a21c12d20c0" - "2d20c12d6a21c22d20c12d20c22d6a21c32d20c22d20c32d6a21c42d20c32d20c42d6a21c52d20c42d20c52d6a21c6" - "2d20c52d20c62d6a21c72d20c62d20c72d6a21c82d20c72d20c82d6a21c92d20c82d20c92d6a21ca2d20c92d20ca2d" - "6a21cb2d20ca2d20cb2d6a21cc2d20cb2d20cc2d6a21cd2d20cc2d20cd2d6a21ce2d20cd2d20ce2d6a21cf2d20ce2d" - "20cf2d6a21d02d20cf2d20d02d6a21d12d20d02d20d12d6a21d22d20d12d20d22d6a21d32d20d22d20d32d6a21d42d" - "20d32d20d42d6a21d52d20d42d20d52d6a21d62d20d52d20d62d6a21d72d20d62d20d72d6a21d82d20d72d20d82d6a" - "21d92d20d82d20d92d6a21da2d20d92d20da2d6a21db2d20da2d20db2d6a21dc2d20db2d20dc2d6a21dd2d20dc2d20" - "dd2d6a21de2d20dd2d20de2d6a21df2d20de2d20df2d6a21e02d20df2d20e02d6a21e12d20e02d20e12d6a21e22d20" - "e12d20e22d6a21e32d20e22d20e32d6a21e42d20e32d20e42d6a21e52d20e42d20e52d6a21e62d20e52d20e62d6a21" - "e72d20e62d20e72d6a21e82d20e72d20e82d6a21e92d20e82d20e92d6a21ea2d20e92d20ea2d6a21eb2d20ea2d20eb" - "2d6a21ec2d20eb2d20ec2d6a21ed2d20ec2d20ed2d6a21ee2d20ed2d20ee2d6a21ef2d20ee2d20ef2d6a21f02d20ef" - "2d20f02d6a21f12d20f02d20f12d6a21f22d20f12d20f22d6a21f32d20f22d20f32d6a21f42d20f32d20f42d6a21f5" - "2d20f42d20f52d6a21f62d20f52d20f62d6a21f72d20f62d20f72d6a21f82d20f72d20f82d6a21f92d20f82d20f92d" - "6a21fa2d20f92d20fa2d6a21fb2d20fa2d20fb2d6a21fc2d20fb2d20fc2d6a21fd2d20fc2d20fd2d6a21fe2d20fd2d" - "20fe2d6a21ff2d20fe2d20ff2d6a21802e20ff2d20802e6a21812e20802e20812e6a21822e20812e20822e6a21832e" - "20822e20832e6a21842e20832e20842e6a21852e20842e20852e6a21862e20852e20862e6a21872e20862e20872e6a" - "21882e20872e20882e6a21892e20882e20892e6a218a2e20892e208a2e6a218b2e208a2e208b2e6a218c2e208b2e20" - "8c2e6a218d2e208c2e208d2e6a218e2e208d2e208e2e6a218f2e208e2e208f2e6a21902e208f2e20902e6a21912e20" - "902e20912e6a21922e20912e20922e6a21932e20922e20932e6a21942e20932e20942e6a21952e20942e20952e6a21" - "962e20952e20962e6a21972e20962e20972e6a21982e20972e20982e6a21992e20982e20992e6a219a2e20992e209a" - "2e6a219b2e209a2e209b2e6a219c2e209b2e209c2e6a219d2e209c2e209d2e6a219e2e209d2e209e2e6a219f2e209e" - "2e209f2e6a21a02e209f2e20a02e6a21a12e20a02e20a12e6a21a22e20a12e20a22e6a21a32e20a22e20a32e6a21a4" - "2e20a32e20a42e6a21a52e20a42e20a52e6a21a62e20a52e20a62e6a21a72e20a62e20a72e6a21a82e20a72e20a82e" - "6a21a92e20a82e20a92e6a21aa2e20a92e20aa2e6a21ab2e20aa2e20ab2e6a21ac2e20ab2e20ac2e6a21ad2e20ac2e" - "20ad2e6a21ae2e20ad2e20ae2e6a21af2e20ae2e20af2e6a21b02e20af2e20b02e6a21b12e20b02e20b12e6a21b22e" - "20b12e20b22e6a21b32e20b22e20b32e6a21b42e20b32e20b42e6a21b52e20b42e20b52e6a21b62e20b52e20b62e6a" - "21b72e20b62e20b72e6a21b82e20b72e20b82e6a21b92e20b82e20b92e6a21ba2e20b92e20ba2e6a21bb2e20ba2e20" - "bb2e6a21bc2e20bb2e20bc2e6a21bd2e20bc2e20bd2e6a21be2e20bd2e20be2e6a21bf2e20be2e20bf2e6a21c02e20" - "bf2e20c02e6a21c12e20c02e20c12e6a21c22e20c12e20c22e6a21c32e20c22e20c32e6a21c42e20c32e20c42e6a21" - "c52e20c42e20c52e6a21c62e20c52e20c62e6a21c72e20c62e20c72e6a21c82e20c72e20c82e6a21c92e20c82e20c9" - "2e6a21ca2e20c92e20ca2e6a21cb2e20ca2e20cb2e6a21cc2e20cb2e20cc2e6a21cd2e20cc2e20cd2e6a21ce2e20cd" - "2e20ce2e6a21cf2e20ce2e20cf2e6a21d02e20cf2e20d02e6a21d12e20d02e20d12e6a21d22e20d12e20d22e6a21d3" - "2e20d22e20d32e6a21d42e20d32e20d42e6a21d52e20d42e20d52e6a21d62e20d52e20d62e6a21d72e20d62e20d72e" - "6a21d82e20d72e20d82e6a21d92e20d82e20d92e6a21da2e20d92e20da2e6a21db2e20da2e20db2e6a21dc2e20db2e" - "20dc2e6a21dd2e20dc2e20dd2e6a21de2e20dd2e20de2e6a21df2e20de2e20df2e6a21e02e20df2e20e02e6a21e12e" - "20e02e20e12e6a21e22e20e12e20e22e6a21e32e20e22e20e32e6a21e42e20e32e20e42e6a21e52e20e42e20e52e6a" - "21e62e20e52e20e62e6a21e72e20e62e20e72e6a21e82e20e72e20e82e6a21e92e20e82e20e92e6a21ea2e20e92e20" - "ea2e6a21eb2e20ea2e20eb2e6a21ec2e20eb2e20ec2e6a21ed2e20ec2e20ed2e6a21ee2e20ed2e20ee2e6a21ef2e20" - "ee2e20ef2e6a21f02e20ef2e20f02e6a21f12e20f02e20f12e6a21f22e20f12e20f22e6a21f32e20f22e20f32e6a21" - "f42e20f32e20f42e6a21f52e20f42e20f52e6a21f62e20f52e20f62e6a21f72e20f62e20f72e6a21f82e20f72e20f8" - "2e6a21f92e20f82e20f92e6a21fa2e20f92e20fa2e6a21fb2e20fa2e20fb2e6a21fc2e20fb2e20fc2e6a21fd2e20fc" - "2e20fd2e6a21fe2e20fd2e20fe2e6a21ff2e20fe2e20ff2e6a21802f20ff2e20802f6a21812f20802f20812f6a2182" - "2f20812f20822f6a21832f20822f20832f6a21842f20832f20842f6a21852f20842f20852f6a21862f20852f20862f" - "6a21872f20862f20872f6a21882f20872f20882f6a21892f20882f20892f6a218a2f20892f208a2f6a218b2f208a2f" - "208b2f6a218c2f208b2f208c2f6a218d2f208c2f208d2f6a218e2f208d2f208e2f6a218f2f208e2f208f2f6a21902f" - "208f2f20902f6a21912f20902f20912f6a21922f20912f20922f6a21932f20922f20932f6a21942f20932f20942f6a" - "21952f20942f20952f6a21962f20952f20962f6a21972f20962f20972f6a21982f20972f20982f6a21992f20982f20" - "992f6a219a2f20992f209a2f6a219b2f209a2f209b2f6a219c2f209b2f209c2f6a219d2f209c2f209d2f6a219e2f20" - "9d2f209e2f6a219f2f209e2f209f2f6a21a02f209f2f20a02f6a21a12f20a02f20a12f6a21a22f20a12f20a22f6a21" - "a32f20a22f20a32f6a21a42f20a32f20a42f6a21a52f20a42f20a52f6a21a62f20a52f20a62f6a21a72f20a62f20a7" - "2f6a21a82f20a72f20a82f6a21a92f20a82f20a92f6a21aa2f20a92f20aa2f6a21ab2f20aa2f20ab2f6a21ac2f20ab" - "2f20ac2f6a21ad2f20ac2f20ad2f6a21ae2f20ad2f20ae2f6a21af2f20ae2f20af2f6a21b02f20af2f20b02f6a21b1" - "2f20b02f20b12f6a21b22f20b12f20b22f6a21b32f20b22f20b32f6a21b42f20b32f20b42f6a21b52f20b42f20b52f" - "6a21b62f20b52f20b62f6a21b72f20b62f20b72f6a21b82f20b72f20b82f6a21b92f20b82f20b92f6a21ba2f20b92f" - "20ba2f6a21bb2f20ba2f20bb2f6a21bc2f20bb2f20bc2f6a21bd2f20bc2f20bd2f6a21be2f20bd2f20be2f6a21bf2f" - "20be2f20bf2f6a21c02f20bf2f20c02f6a21c12f20c02f20c12f6a21c22f20c12f20c22f6a21c32f20c22f20c32f6a" - "21c42f20c32f20c42f6a21c52f20c42f20c52f6a21c62f20c52f20c62f6a21c72f20c62f20c72f6a21c82f20c72f20" - "c82f6a21c92f20c82f20c92f6a21ca2f20c92f20ca2f6a21cb2f20ca2f20cb2f6a21cc2f20cb2f20cc2f6a21cd2f20" - "cc2f20cd2f6a21ce2f20cd2f20ce2f6a21cf2f20ce2f20cf2f6a21d02f20cf2f20d02f6a21d12f20d02f20d12f6a21" - "d22f20d12f20d22f6a21d32f20d22f20d32f6a21d42f20d32f20d42f6a21d52f20d42f20d52f6a21d62f20d52f20d6" - "2f6a21d72f20d62f20d72f6a21d82f20d72f20d82f6a21d92f20d82f20d92f6a21da2f20d92f20da2f6a21db2f20da" - "2f20db2f6a21dc2f20db2f20dc2f6a21dd2f20dc2f20dd2f6a21de2f20dd2f20de2f6a21df2f20de2f20df2f6a21e0" - "2f20df2f20e02f6a21e12f20e02f20e12f6a21e22f20e12f20e22f6a21e32f20e22f20e32f6a21e42f20e32f20e42f" - "6a21e52f20e42f20e52f6a21e62f20e52f20e62f6a21e72f20e62f20e72f6a21e82f20e72f20e82f6a21e92f20e82f" - "20e92f6a21ea2f20e92f20ea2f6a21eb2f20ea2f20eb2f6a21ec2f20eb2f20ec2f6a21ed2f20ec2f20ed2f6a21ee2f" - "20ed2f20ee2f6a21ef2f20ee2f20ef2f6a21f02f20ef2f20f02f6a21f12f20f02f20f12f6a21f22f20f12f20f22f6a" - "21f32f20f22f20f32f6a21f42f20f32f20f42f6a21f52f20f42f20f52f6a21f62f20f52f20f62f6a21f72f20f62f20" - "f72f6a21f82f20f72f20f82f6a21f92f20f82f20f92f6a21fa2f20f92f20fa2f6a21fb2f20fa2f20fb2f6a21fc2f20" - "fb2f20fc2f6a21fd2f20fc2f20fd2f6a21fe2f20fd2f20fe2f6a21ff2f20fe2f20ff2f6a21803020ff2f2080306a21" - "81302080302081306a2182302081302082306a2183302082302083306a2184302083302084306a2185302084302085" - "306a2186302085302086306a2187302086302087306a2188302087302088306a2189302088302089306a218a302089" - "30208a306a218b30208a30208b306a218c30208b30208c306a218d30208c30208d306a218e30208d30208e306a218f" - "30208e30208f306a219030208f302090306a2191302090302091306a2192302091302092306a219330209230209330" - "6a2194302093302094306a2195302094302095306a2196302095302096306a2197302096302097306a219830209730" - "2098306a2199302098302099306a219a30209930209a306a219b30209a30209b306a219c30209b30209c306a219d30" - "209c30209d306a219e30209d30209e306a219f30209e30209f306a21a030209f3020a0306a21a13020a03020a1306a" - "21a23020a13020a2306a21a33020a23020a3306a21a43020a33020a4306a21a53020a43020a5306a21a63020a53020" - "a6306a21a73020a63020a7306a21a83020a73020a8306a21a93020a83020a9306a21aa3020a93020aa306a21ab3020" - "aa3020ab306a21ac3020ab3020ac306a21ad3020ac3020ad306a21ae3020ad3020ae306a21af3020ae3020af306a21" - "b03020af3020b0306a21b13020b03020b1306a21b23020b13020b2306a21b33020b23020b3306a21b43020b33020b4" - "306a21b53020b43020b5306a21b63020b53020b6306a21b73020b63020b7306a21b83020b73020b8306a21b93020b8" - "3020b9306a21ba3020b93020ba306a21bb3020ba3020bb306a21bc3020bb3020bc306a21bd3020bc3020bd306a21be" - "3020bd3020be306a21bf3020be3020bf306a21c03020bf3020c0306a21c13020c03020c1306a21c23020c13020c230" - "6a21c33020c23020c3306a21c43020c33020c4306a21c53020c43020c5306a21c63020c53020c6306a21c73020c630" - "20c7306a21c83020c73020c8306a21c93020c83020c9306a21ca3020c93020ca306a21cb3020ca3020cb306a21cc30" - "20cb3020cc306a21cd3020cc3020cd306a21ce3020cd3020ce306a21cf3020ce3020cf306a21d03020cf3020d0306a" - "21d13020d03020d1306a21d23020d13020d2306a21d33020d23020d3306a21d43020d33020d4306a21d53020d43020" - "d5306a21d63020d53020d6306a21d73020d63020d7306a21d83020d73020d8306a21d93020d83020d9306a21da3020" - "d93020da306a21db3020da3020db306a21dc3020db3020dc306a21dd3020dc3020dd306a21de3020dd3020de306a21" - "df3020de3020df306a21e03020df3020e0306a21e13020e03020e1306a21e23020e13020e2306a21e33020e23020e3" - "306a21e43020e33020e4306a21e53020e43020e5306a21e63020e53020e6306a21e73020e63020e7306a21e83020e7" - "3020e8306a21e93020e83020e9306a21ea3020e93020ea306a21eb3020ea3020eb306a21ec3020eb3020ec306a21ed" - "3020ec3020ed306a21ee3020ed3020ee306a21ef3020ee3020ef306a21f03020ef3020f0306a21f13020f03020f130" - "6a21f23020f13020f2306a21f33020f23020f3306a21f43020f33020f4306a21f53020f43020f5306a21f63020f530" - "20f6306a21f73020f63020f7306a21f83020f73020f8306a21f93020f83020f9306a21fa3020f93020fa306a21fb30" - "20fa3020fb306a21fc3020fb3020fc306a21fd3020fc3020fd306a21fe3020fd3020fe306a21ff3020fe3020ff306a" - "21803120ff302080316a2181312080312081316a2182312081312082316a2183312082312083316a21843120833120" - "84316a2185312084312085316a2186312085312086316a2187312086312087316a2188312087312088316a21893120" - "88312089316a218a31208931208a316a218b31208a31208b316a218c31208b31208c316a218d31208c31208d316a21" - "8e31208d31208e316a218f31208e31208f316a219031208f312090316a2191312090312091316a2192312091312092" - "316a2193312092312093316a2194312093312094316a2195312094312095316a2196312095312096316a2197312096" - "312097316a2198312097312098316a2199312098312099316a219a31209931209a316a219b31209a31209b316a219c" - "31209b31209c316a219d31209c31209d316a219e31209d31209e316a219f31209e31209f316a21a031209f3120a031" - "6a21a13120a03120a1316a21a23120a13120a2316a21a33120a23120a3316a21a43120a33120a4316a21a53120a431" - "20a5316a21a63120a53120a6316a21a73120a63120a7316a21a83120a73120a8316a21a93120a83120a9316a21aa31" - "20a93120aa316a21ab3120aa3120ab316a21ac3120ab3120ac316a21ad3120ac3120ad316a21ae3120ad3120ae316a" - "21af3120ae3120af316a21b03120af3120b0316a21b13120b03120b1316a21b23120b13120b2316a21b33120b23120" - "b3316a21b43120b33120b4316a21b53120b43120b5316a21b63120b53120b6316a21b73120b63120b7316a21b83120" - "b73120b8316a21b93120b83120b9316a21ba3120b93120ba316a21bb3120ba3120bb316a21bc3120bb3120bc316a21" - "bd3120bc3120bd316a21be3120bd3120be316a21bf3120be3120bf316a21c03120bf3120c0316a21c13120c03120c1" - "316a21c23120c13120c2316a21c33120c23120c3316a21c43120c33120c4316a21c53120c43120c5316a21c63120c5" - "3120c6316a21c73120c63120c7316a21c83120c73120c8316a21c93120c83120c9316a21ca3120c93120ca316a21cb" - "3120ca3120cb316a21cc3120cb3120cc316a21cd3120cc3120cd316a21ce3120cd3120ce316a21cf3120ce3120cf31" - "6a21d03120cf3120d0316a21d13120d03120d1316a21d23120d13120d2316a21d33120d23120d3316a21d43120d331" - "20d4316a21d53120d43120d5316a21d63120d53120d6316a21d73120d63120d7316a21d83120d73120d8316a21d931" - "20d83120d9316a21da3120d93120da316a21db3120da3120db316a21dc3120db3120dc316a21dd3120dc3120dd316a" - "21de3120dd3120de316a21df3120de3120df316a21e03120df3120e0316a21e13120e03120e1316a21e23120e13120" - "e2316a21e33120e23120e3316a21e43120e33120e4316a21e53120e43120e5316a21e63120e53120e6316a21e73120" - "e63120e7316a21e83120e73120e8316a21e93120e83120e9316a21ea3120e93120ea316a21eb3120ea3120eb316a21" - "ec3120eb3120ec316a21ed3120ec3120ed316a21ee3120ed3120ee316a21ef3120ee3120ef316a21f03120ef3120f0" - "316a21f13120f03120f1316a21f23120f13120f2316a21f33120f23120f3316a21f43120f33120f4316a21f53120f4" - "3120f5316a21f63120f53120f6316a21f73120f63120f7316a21f83120f73120f8316a21f93120f83120f9316a21fa" - "3120f93120fa316a21fb3120fa3120fb316a21fc3120fb3120fc316a21fd3120fc3120fd316a21fe3120fd3120fe31" - "6a21ff3120fe3120ff316a21803220ff312080326a2181322080322081326a2182322081322082326a218332208232" - "2083326a2184322083322084326a2185322084322085326a2186322085322086326a2187322086322087326a218832" - "2087322088326a2189322088322089326a218a32208932208a326a218b32208a32208b326a218c32208b32208c326a" - "218d32208c32208d326a218e32208d32208e326a218f32208e32208f326a219032208f322090326a21913220903220" - "91326a2192322091322092326a2193322092322093326a2194322093322094326a2195322094322095326a21963220" - "95322096326a2197322096322097326a2198322097322098326a2199322098322099326a219a32209932209a326a21" - "9b32209a32209b326a219c32209b32209c326a219d32209c32209d326a219e32209d32209e326a219f32209e32209f" - "326a21a032209f3220a0326a21a13220a03220a1326a21a23220a13220a2326a21a33220a23220a3326a21a43220a3" - "3220a4326a21a53220a43220a5326a21a63220a53220a6326a21a73220a63220a7326a21a83220a73220a8326a21a9" - "3220a83220a9326a21aa3220a93220aa326a21ab3220aa3220ab326a21ac3220ab3220ac326a21ad3220ac3220ad32" - "6a21ae3220ad3220ae326a21af3220ae3220af326a21b03220af3220b0326a21b13220b03220b1326a21b23220b132" - "20b2326a21b33220b23220b3326a21b43220b33220b4326a21b53220b43220b5326a21b63220b53220b6326a21b732" - "20b63220b7326a21b83220b73220b8326a21b93220b83220b9326a21ba3220b93220ba326a21bb3220ba3220bb326a" - "21bc3220bb3220bc326a21bd3220bc3220bd326a21be3220bd3220be326a21bf3220be3220bf326a21c03220bf3220" - "c0326a21c13220c03220c1326a21c23220c13220c2326a21c33220c23220c3326a21c43220c33220c4326a21c53220" - "c43220c5326a21c63220c53220c6326a21c73220c63220c7326a21c83220c73220c8326a21c93220c83220c9326a21" - "ca3220c93220ca326a21cb3220ca3220cb326a21cc3220cb3220cc326a21cd3220cc3220cd326a21ce3220cd3220ce" - "326a21cf3220ce3220cf326a21d03220cf3220d0326a21d13220d03220d1326a21d23220d13220d2326a21d33220d2" - "3220d3326a21d43220d33220d4326a21d53220d43220d5326a21d63220d53220d6326a21d73220d63220d7326a21d8" - "3220d73220d8326a21d93220d83220d9326a21da3220d93220da326a21db3220da3220db326a21dc3220db3220dc32" - "6a21dd3220dc3220dd326a21de3220dd3220de326a21df3220de3220df326a21e03220df3220e0326a21e13220e032" - "20e1326a21e23220e13220e2326a21e33220e23220e3326a21e43220e33220e4326a21e53220e43220e5326a21e632" - "20e53220e6326a21e73220e63220e7326a21e83220e73220e8326a21e93220e83220e9326a21ea3220e93220ea326a" - "21eb3220ea3220eb326a21ec3220eb3220ec326a21ed3220ec3220ed326a21ee3220ed3220ee326a21ef3220ee3220" - "ef326a21f03220ef3220f0326a21f13220f03220f1326a21f23220f13220f2326a21f33220f23220f3326a21f43220" - "f33220f4326a21f53220f43220f5326a21f63220f53220f6326a21f73220f63220f7326a21f83220f73220f8326a21" - "f93220f83220f9326a21fa3220f93220fa326a21fb3220fa3220fb326a21fc3220fb3220fc326a21fd3220fc3220fd" - "326a21fe3220fd3220fe326a21ff3220fe3220ff326a21803320ff322080336a2181332080332081336a2182332081" - "332082336a2183332082332083336a2184332083332084336a2185332084332085336a2186332085332086336a2187" - "332086332087336a2188332087332088336a2189332088332089336a218a33208933208a336a218b33208a33208b33" - "6a218c33208b33208c336a218d33208c33208d336a218e33208d33208e336a218f33208e33208f336a219033208f33" - "2090336a2191332090332091336a2192332091332092336a2193332092332093336a2194332093332094336a219533" - "2094332095336a2196332095332096336a2197332096332097336a2198332097332098336a2199332098332099336a" - "219a33209933209a336a219b33209a33209b336a219c33209b33209c336a219d33209c33209d336a219e33209d3320" - "9e336a219f33209e33209f336a21a033209f3320a0336a21a13320a03320a1336a21a23320a13320a2336a21a33320" - "a23320a3336a21a43320a33320a4336a21a53320a43320a5336a21a63320a53320a6336a21a73320a63320a7336a21" - "a83320a73320a8336a21a93320a83320a9336a21aa3320a93320aa336a21ab3320aa3320ab336a21ac3320ab3320ac" - "336a21ad3320ac3320ad336a21ae3320ad3320ae336a21af3320ae3320af336a21b03320af3320b0336a21b13320b0" - "3320b1336a21b23320b13320b2336a21b33320b23320b3336a21b43320b33320b4336a21b53320b43320b5336a21b6" - "3320b53320b6336a21b73320b63320b7336a21b83320b73320b8336a21b93320b83320b9336a21ba3320b93320ba33" - "6a21bb3320ba3320bb336a21bc3320bb3320bc336a21bd3320bc3320bd336a21be3320bd3320be336a21bf3320be33" - "20bf336a21c03320bf3320c0336a21c13320c03320c1336a21c23320c13320c2336a21c33320c23320c3336a21c433" - "20c33320c4336a21c53320c43320c5336a21c63320c53320c6336a21c73320c63320c7336a21c83320c73320c8336a" - "21c93320c83320c9336a21ca3320c93320ca336a21cb3320ca3320cb336a21cc3320cb3320cc336a21cd3320cc3320" - "cd336a21ce3320cd3320ce336a21cf3320ce3320cf336a21d03320cf3320d0336a21d13320d03320d1336a21d23320" - "d13320d2336a21d33320d23320d3336a21d43320d33320d4336a21d53320d43320d5336a21d63320d53320d6336a21" - "d73320d63320d7336a21d83320d73320d8336a21d93320d83320d9336a21da3320d93320da336a21db3320da3320db" - "336a21dc3320db3320dc336a21dd3320dc3320dd336a21de3320dd3320de336a21df3320de3320df336a21e03320df" - "3320e0336a21e13320e03320e1336a21e23320e13320e2336a21e33320e23320e3336a21e43320e33320e4336a21e5" - "3320e43320e5336a21e63320e53320e6336a21e73320e63320e7336a21e83320e73320e8336a21e93320e83320e933" - "6a21ea3320e93320ea336a21eb3320ea3320eb336a21ec3320eb3320ec336a21ed3320ec3320ed336a21ee3320ed33" - "20ee336a21ef3320ee3320ef336a21f03320ef3320f0336a21f13320f03320f1336a21f23320f13320f2336a21f333" - "20f23320f3336a21f43320f33320f4336a21f53320f43320f5336a21f63320f53320f6336a21f73320f63320f7336a" - "21f83320f73320f8336a21f93320f83320f9336a21fa3320f93320fa336a21fb3320fa3320fb336a21fc3320fb3320" - "fc336a21fd3320fc3320fd336a21fe3320fd3320fe336a21ff3320fe3320ff336a21803420ff332080346a21813420" - "80342081346a2182342081342082346a2183342082342083346a2184342083342084346a2185342084342085346a21" - "86342085342086346a2187342086342087346a2188342087342088346a2189342088342089346a218a34208934208a" - "346a218b34208a34208b346a218c34208b34208c346a218d34208c34208d346a218e34208d34208e346a218f34208e" - "34208f346a219034208f342090346a2191342090342091346a2192342091342092346a2193342092342093346a2194" - "342093342094346a2195342094342095346a2196342095342096346a2197342096342097346a219834209734209834" - "6a2199342098342099346a219a34209934209a346a219b34209a34209b346a219c34209b34209c346a219d34209c34" - "209d346a219e34209d34209e346a219f34209e34209f346a21a034209f3420a0346a21a13420a03420a1346a21a234" - "20a13420a2346a21a33420a23420a3346a21a43420a33420a4346a21a53420a43420a5346a21a63420a53420a6346a" - "21a73420a63420a7346a21a83420a73420a8346a21a93420a83420a9346a21aa3420a93420aa346a21ab3420aa3420" - "ab346a21ac3420ab3420ac346a21ad3420ac3420ad346a21ae3420ad3420ae346a21af3420ae3420af346a21b03420" - "af3420b0346a21b13420b03420b1346a21b23420b13420b2346a21b33420b23420b3346a21b43420b33420b4346a21" - "b53420b43420b5346a21b63420b53420b6346a21b73420b63420b7346a21b83420b73420b8346a21b93420b83420b9" - "346a21ba3420b93420ba346a21bb3420ba3420bb346a21bc3420bb3420bc346a21bd3420bc3420bd346a21be3420bd" - "3420be346a21bf3420be3420bf346a21c03420bf3420c0346a21c13420c03420c1346a21c23420c13420c2346a21c3" - "3420c23420c3346a21c43420c33420c4346a21c53420c43420c5346a21c63420c53420c6346a21c73420c63420c734" - "6a21c83420c73420c8346a21c93420c83420c9346a21ca3420c93420ca346a21cb3420ca3420cb346a21cc3420cb34" - "20cc346a21cd3420cc3420cd346a21ce3420cd3420ce346a21cf3420ce3420cf346a21d03420cf3420d0346a21d134" - "20d03420d1346a21d23420d13420d2346a21d33420d23420d3346a21d43420d33420d4346a21d53420d43420d5346a" - "21d63420d53420d6346a21d73420d63420d7346a21d83420d73420d8346a21d93420d83420d9346a21da3420d93420" - "da346a21db3420da3420db346a21dc3420db3420dc346a21dd3420dc3420dd346a21de3420dd3420de346a21df3420" - "de3420df346a21e03420df3420e0346a21e13420e03420e1346a21e23420e13420e2346a21e33420e23420e3346a21" - "e43420e33420e4346a21e53420e43420e5346a21e63420e53420e6346a21e73420e63420e7346a21e83420e73420e8" - "346a21e93420e83420e9346a21ea3420e93420ea346a21eb3420ea3420eb346a21ec3420eb3420ec346a21ed3420ec" - "3420ed346a21ee3420ed3420ee346a21ef3420ee3420ef346a21f03420ef3420f0346a21f13420f03420f1346a21f2" - "3420f13420f2346a21f33420f23420f3346a21f43420f33420f4346a21f53420f43420f5346a21f63420f53420f634" - "6a21f73420f63420f7346a21f83420f73420f8346a21f93420f83420f9346a21fa3420f93420fa346a21fb3420fa34" - "20fb346a21fc3420fb3420fc346a21fd3420fc3420fd346a21fe3420fd3420fe346a21ff3420fe3420ff346a218035" - "20ff342080356a2181352080352081356a2182352081352082356a2183352082352083356a2184352083352084356a" - "2185352084352085356a2186352085352086356a2187352086352087356a2188352087352088356a21893520883520" - "89356a218a35208935208a356a218b35208a35208b356a218c35208b35208c356a218d35208c35208d356a218e3520" - "8d35208e356a218f35208e35208f356a219035208f352090356a2191352090352091356a2192352091352092356a21" - "93352092352093356a2194352093352094356a2195352094352095356a2196352095352096356a2197352096352097" - "356a2198352097352098356a2199352098352099356a219a35209935209a356a219b35209a35209b356a219c35209b" - "35209c356a219d35209c35209d356a219e35209d35209e356a219f35209e35209f356a21a035209f3520a0356a21a1" - "3520a03520a1356a21a23520a13520a2356a21a33520a23520a3356a21a43520a33520a4356a21a53520a43520a535" - "6a21a63520a53520a6356a21a73520a63520a7356a21a83520a73520a8356a21a93520a83520a9356a21aa3520a935" - "20aa356a21ab3520aa3520ab356a21ac3520ab3520ac356a21ad3520ac3520ad356a21ae3520ad3520ae356a21af35" - "20ae3520af356a21b03520af3520b0356a21b13520b03520b1356a21b23520b13520b2356a21b33520b23520b3356a" - "21b43520b33520b4356a21b53520b43520b5356a21b63520b53520b6356a21b73520b63520b7356a21b83520b73520" - "b8356a21b93520b83520b9356a21ba3520b93520ba356a21bb3520ba3520bb356a21bc3520bb3520bc356a21bd3520" - "bc3520bd356a21be3520bd3520be356a21bf3520be3520bf356a21c03520bf3520c0356a21c13520c03520c1356a21" - "c23520c13520c2356a21c33520c23520c3356a21c43520c33520c4356a21c53520c43520c5356a21c63520c53520c6" - "356a21c73520c63520c7356a21c83520c73520c8356a21c93520c83520c9356a21ca3520c93520ca356a21cb3520ca" - "3520cb356a21cc3520cb3520cc356a21cd3520cc3520cd356a21ce3520cd3520ce356a21cf3520ce3520cf356a21d0" - "3520cf3520d0356a21d13520d03520d1356a21d23520d13520d2356a21d33520d23520d3356a21d43520d33520d435" - "6a21d53520d43520d5356a21d63520d53520d6356a21d73520d63520d7356a21d83520d73520d8356a21d93520d835" - "20d9356a21da3520d93520da356a21db3520da3520db356a21dc3520db3520dc356a21dd3520dc3520dd356a21de35" - "20dd3520de356a21df3520de3520df356a21e03520df3520e0356a21e13520e03520e1356a21e23520e13520e2356a" - "21e33520e23520e3356a21e43520e33520e4356a21e53520e43520e5356a21e63520e53520e6356a21e73520e63520" - "e7356a21e83520e73520e8356a21e93520e83520e9356a21ea3520e93520ea356a21eb3520ea3520eb356a21ec3520" - "eb3520ec356a21ed3520ec3520ed356a21ee3520ed3520ee356a21ef3520ee3520ef356a21f03520ef3520f0356a21" - "f13520f03520f1356a21f23520f13520f2356a21f33520f23520f3356a21f43520f33520f4356a21f53520f43520f5" - "356a21f63520f53520f6356a21f73520f63520f7356a21f83520f73520f8356a21f93520f83520f9356a21fa3520f9" - "3520fa356a21fb3520fa3520fb356a21fc3520fb3520fc356a21fd3520fc3520fd356a21fe3520fd3520fe356a21ff" - "3520fe3520ff356a21803620ff352080366a2181362080362081366a2182362081362082366a218336208236208336" - "6a2184362083362084366a2185362084362085366a2186362085362086366a2187362086362087366a218836208736" - "2088366a2189362088362089366a218a36208936208a366a218b36208a36208b366a218c36208b36208c366a218d36" - "208c36208d366a218e36208d36208e366a218f36208e36208f366a219036208f362090366a2191362090362091366a" - "2192362091362092366a2193362092362093366a2194362093362094366a2195362094362095366a21963620953620" - "96366a2197362096362097366a2198362097362098366a2199362098362099366a219a36209936209a366a219b3620" - "9a36209b366a219c36209b36209c366a219d36209c36209d366a219e36209d36209e366a219f36209e36209f366a21" - "a036209f3620a0366a21a13620a03620a1366a21a23620a13620a2366a21a33620a23620a3366a21a43620a33620a4" - "366a21a53620a43620a5366a21a63620a53620a6366a21a73620a63620a7366a21a83620a73620a8366a21a93620a8" - "3620a9366a21aa3620a93620aa366a21ab3620aa3620ab366a21ac3620ab3620ac366a21ad3620ac3620ad366a21ae" - "3620ad3620ae366a21af3620ae3620af366a21b03620af3620b0366a21b13620b03620b1366a21b23620b13620b236" - "6a21b33620b23620b3366a21b43620b33620b4366a21b53620b43620b5366a21b63620b53620b6366a21b73620b636" - "20b7366a21b83620b73620b8366a21b93620b83620b9366a21ba3620b93620ba366a21bb3620ba3620bb366a21bc36" - "20bb3620bc366a21bd3620bc3620bd366a21be3620bd3620be366a21bf3620be3620bf366a21c03620bf3620c0366a" - "21c13620c03620c1366a21c23620c13620c2366a21c33620c23620c3366a21c43620c33620c4366a21c53620c43620" - "c5366a21c63620c53620c6366a21c73620c63620c7366a21c83620c73620c8366a21c93620c83620c9366a21ca3620" - "c93620ca366a21cb3620ca3620cb366a21cc3620cb3620cc366a21cd3620cc3620cd366a21ce3620cd3620ce366a21" - "cf3620ce3620cf366a21d03620cf3620d0366a21d13620d03620d1366a21d23620d13620d2366a21d33620d23620d3" - "366a21d43620d33620d4366a21d53620d43620d5366a21d63620d53620d6366a21d73620d63620d7366a21d83620d7" - "3620d8366a21d93620d83620d9366a21da3620d93620da366a21db3620da3620db366a21dc3620db3620dc366a21dd" - "3620dc3620dd366a21de3620dd3620de366a21df3620de3620df366a21e03620df3620e0366a21e13620e03620e136" - "6a21e23620e13620e2366a21e33620e23620e3366a21e43620e33620e4366a21e53620e43620e5366a21e63620e536" - "20e6366a21e73620e63620e7366a21e83620e73620e8366a21e93620e83620e9366a21ea3620e93620ea366a21eb36" - "20ea3620eb366a21ec3620eb3620ec366a21ed3620ec3620ed366a21ee3620ed3620ee366a21ef3620ee3620ef366a" - "21f03620ef3620f0366a21f13620f03620f1366a21f23620f13620f2366a21f33620f23620f3366a21f43620f33620" - "f4366a21f53620f43620f5366a21f63620f53620f6366a21f73620f63620f7366a21f83620f73620f8366a21f93620" - "f83620f9366a21fa3620f93620fa366a21fb3620fa3620fb366a21fc3620fb3620fc366a21fd3620fc3620fd366a21" - "fe3620fd3620fe366a21ff3620fe3620ff366a21803720ff362080376a2181372080372081376a2182372081372082" - "376a2183372082372083376a2184372083372084376a2185372084372085376a2186372085372086376a2187372086" - "372087376a2188372087372088376a2189372088372089376a218a37208937208a376a218b37208a37208b376a218c" - "37208b37208c376a218d37208c37208d376a218e37208d37208e376a218f37208e37208f376a219037208f37209037" - "6a2191372090372091376a2192372091372092376a2193372092372093376a2194372093372094376a219537209437" - "2095376a2196372095372096376a2197372096372097376a2198372097372098376a2199372098372099376a219a37" - "209937209a376a219b37209a37209b376a219c37209b37209c376a219d37209c37209d376a219e37209d37209e376a" - "219f37209e37209f376a21a037209f3720a0376a21a13720a03720a1376a21a23720a13720a2376a21a33720a23720" - "a3376a21a43720a33720a4376a21a53720a43720a5376a21a63720a53720a6376a21a73720a63720a7376a21a83720" - "a73720a8376a21a93720a83720a9376a21aa3720a93720aa376a21ab3720aa3720ab376a21ac3720ab3720ac376a21" - "ad3720ac3720ad376a21ae3720ad3720ae376a21af3720ae3720af376a21b03720af3720b0376a21b13720b03720b1" - "376a21b23720b13720b2376a21b33720b23720b3376a21b43720b33720b4376a21b53720b43720b5376a21b63720b5" - "3720b6376a21b73720b63720b7376a21b83720b73720b8376a21b93720b83720b9376a21ba3720b93720ba376a21bb" - "3720ba3720bb376a21bc3720bb3720bc376a21bd3720bc3720bd376a21be3720bd3720be376a21bf3720be3720bf37" - "6a21c03720bf3720c0376a21c13720c03720c1376a21c23720c13720c2376a21c33720c23720c3376a21c43720c337" - "20c4376a21c53720c43720c5376a21c63720c53720c6376a21c73720c63720c7376a21c83720c73720c8376a21c937" - "20c83720c9376a21ca3720c93720ca376a21cb3720ca3720cb376a21cc3720cb3720cc376a21cd3720cc3720cd376a" - "21ce3720cd3720ce376a21cf3720ce3720cf376a21d03720cf3720d0376a21d13720d03720d1376a21d23720d13720" - "d2376a21d33720d23720d3376a21d43720d33720d4376a21d53720d43720d5376a21d63720d53720d6376a21d73720" - "d63720d7376a21d83720d73720d8376a21d93720d83720d9376a21da3720d93720da376a21db3720da3720db376a21" - "dc3720db3720dc376a21dd3720dc3720dd376a21de3720dd3720de376a21df3720de3720df376a21e03720df3720e0" - "376a21e13720e03720e1376a21e23720e13720e2376a21e33720e23720e3376a21e43720e33720e4376a21e53720e4" - "3720e5376a21e63720e53720e6376a21e73720e63720e7376a21e83720e73720e8376a21e93720e83720e9376a21ea" - "3720e93720ea376a21eb3720ea3720eb376a21ec3720eb3720ec376a21ed3720ec3720ed376a21ee3720ed3720ee37" - "6a21ef3720ee3720ef376a21f03720ef3720f0376a21f13720f03720f1376a21f23720f13720f2376a21f33720f237" - "20f3376a21f43720f33720f4376a21f53720f43720f5376a21f63720f53720f6376a21f73720f63720f7376a21f837" - "20f73720f8376a21f93720f83720f9376a21fa3720f93720fa376a21fb3720fa3720fb376a21fc3720fb3720fc376a" - "21fd3720fc3720fd376a21fe3720fd3720fe376a21ff3720fe3720ff376a21803820ff372080386a21813820803820" - "81386a2182382081382082386a2183382082382083386a2184382083382084386a2185382084382085386a21863820" - "85382086386a2187382086382087386a2188382087382088386a2189382088382089386a218a38208938208a386a21" - "8b38208a38208b386a218c38208b38208c386a218d38208c38208d386a218e38208d38208e386a218f38208e38208f" - "386a219038208f382090386a2191382090382091386a2192382091382092386a2193382092382093386a2194382093" - "382094386a2195382094382095386a2196382095382096386a2197382096382097386a2198382097382098386a2199" - "382098382099386a219a38209938209a386a219b38209a38209b386a219c38209b38209c386a219d38209c38209d38" - "6a219e38209d38209e386a219f38209e38209f386a21a038209f3820a0386a21a13820a03820a1386a21a23820a138" - "20a2386a21a33820a23820a3386a21a43820a33820a4386a21a53820a43820a5386a21a63820a53820a6386a21a738" - "20a63820a7386a21a83820a73820a8386a21a93820a83820a9386a21aa3820a93820aa386a21ab3820aa3820ab386a" - "21ac3820ab3820ac386a21ad3820ac3820ad386a21ae3820ad3820ae386a21af3820ae3820af386a21b03820af3820" - "b0386a21b13820b03820b1386a21b23820b13820b2386a21b33820b23820b3386a21b43820b33820b4386a21b53820" - "b43820b5386a21b63820b53820b6386a21b73820b63820b7386a21b83820b73820b8386a21b93820b83820b9386a21" - "ba3820b93820ba386a21bb3820ba3820bb386a21bc3820bb3820bc386a21bd3820bc3820bd386a21be3820bd3820be" - "386a21bf3820be3820bf386a21c03820bf3820c0386a21c13820c03820c1386a21c23820c13820c2386a21c33820c2" - "3820c3386a21c43820c33820c4386a21c53820c43820c5386a21c63820c53820c6386a21c73820c63820c7386a21c8" - "3820c73820c8386a21c93820c83820c9386a21ca3820c93820ca386a21cb3820ca3820cb386a21cc3820cb3820cc38" - "6a21cd3820cc3820cd386a21ce3820cd3820ce386a21cf3820ce3820cf386a21d03820cf3820d0386a21d13820d038" - "20d1386a21d23820d13820d2386a21d33820d23820d3386a21d43820d33820d4386a21d53820d43820d5386a21d638" - "20d53820d6386a21d73820d63820d7386a21d83820d73820d8386a21d93820d83820d9386a21da3820d93820da386a" - "21db3820da3820db386a21dc3820db3820dc386a21dd3820dc3820dd386a21de3820dd3820de386a21df3820de3820" - "df386a21e03820df3820e0386a21e13820e03820e1386a21e23820e13820e2386a21e33820e23820e3386a21e43820" - "e33820e4386a21e53820e43820e5386a21e63820e53820e6386a21e73820e63820e7386a21e83820e73820e8386a21" - "e93820e83820e9386a21ea3820e93820ea386a21eb3820ea3820eb386a21ec3820eb3820ec386a21ed3820ec3820ed" - "386a21ee3820ed3820ee386a21ef3820ee3820ef386a21f03820ef3820f0386a21f13820f03820f1386a21f23820f1" - "3820f2386a21f33820f23820f3386a21f43820f33820f4386a21f53820f43820f5386a21f63820f53820f6386a21f7" - "3820f63820f7386a21f83820f73820f8386a21f93820f83820f9386a21fa3820f93820fa386a21fb3820fa3820fb38" - "6a21fc3820fb3820fc386a21fd3820fc3820fd386a21fe3820fd3820fe386a21ff3820fe3820ff386a21803920ff38" - "2080396a2181392080392081396a2182392081392082396a2183392082392083396a2184392083392084396a218539" - "2084392085396a2186392085392086396a2187392086392087396a2188392087392088396a2189392088392089396a" - "218a39208939208a396a218b39208a39208b396a218c39208b39208c396a218d39208c39208d396a218e39208d3920" - "8e396a218f39208e39208f396a219039208f392090396a2191392090392091396a2192392091392092396a21933920" - "92392093396a2194392093392094396a2195392094392095396a2196392095392096396a2197392096392097396a21" - "98392097392098396a2199392098392099396a219a39209939209a396a219b39209a39209b396a219c39209b39209c" - "396a219d39209c39209d396a219e39209d39209e396a219f39209e39209f396a21a039209f3920a0396a21a13920a0" - "3920a1396a21a23920a13920a2396a21a33920a23920a3396a21a43920a33920a4396a21a53920a43920a5396a21a6" - "3920a53920a6396a21a73920a63920a7396a21a83920a73920a8396a21a93920a83920a9396a21aa3920a93920aa39" - "6a21ab3920aa3920ab396a21ac3920ab3920ac396a21ad3920ac3920ad396a21ae3920ad3920ae396a21af3920ae39" - "20af396a21b03920af3920b0396a21b13920b03920b1396a21b23920b13920b2396a21b33920b23920b3396a21b439" - "20b33920b4396a21b53920b43920b5396a21b63920b53920b6396a21b73920b63920b7396a21b83920b73920b8396a" - "21b93920b83920b9396a21ba3920b93920ba396a21bb3920ba3920bb396a21bc3920bb3920bc396a21bd3920bc3920" - "bd396a21be3920bd3920be396a21bf3920be3920bf396a21c03920bf3920c0396a21c13920c03920c1396a21c23920" - "c13920c2396a21c33920c23920c3396a21c43920c33920c4396a21c53920c43920c5396a21c63920c53920c6396a21" - "c73920c63920c7396a21c83920c73920c8396a21c93920c83920c9396a21ca3920c93920ca396a21cb3920ca3920cb" - "396a21cc3920cb3920cc396a21cd3920cc3920cd396a21ce3920cd3920ce396a21cf3920ce3920cf396a21d03920cf" - "3920d0396a21d13920d03920d1396a21d23920d13920d2396a21d33920d23920d3396a21d43920d33920d4396a21d5" - "3920d43920d5396a21d63920d53920d6396a21d73920d63920d7396a21d83920d73920d8396a21d93920d83920d939" - "6a21da3920d93920da396a21db3920da3920db396a21dc3920db3920dc396a21dd3920dc3920dd396a21de3920dd39" - "20de396a21df3920de3920df396a21e03920df3920e0396a21e13920e03920e1396a21e23920e13920e2396a21e339" - "20e23920e3396a21e43920e33920e4396a21e53920e43920e5396a21e63920e53920e6396a21e73920e63920e7396a" - "21e83920e73920e8396a21e93920e83920e9396a21ea3920e93920ea396a21eb3920ea3920eb396a21ec3920eb3920" - "ec396a21ed3920ec3920ed396a21ee3920ed3920ee396a21ef3920ee3920ef396a21f03920ef3920f0396a21f13920" - "f03920f1396a21f23920f13920f2396a21f33920f23920f3396a21f43920f33920f4396a21f53920f43920f5396a21" - "f63920f53920f6396a21f73920f63920f7396a21f83920f73920f8396a21f93920f83920f9396a21fa3920f93920fa" - "396a21fb3920fa3920fb396a21fc3920fb3920fc396a21fd3920fc3920fd396a21fe3920fd3920fe396a21ff3920fe" - "3920ff396a21803a20ff3920803a6a21813a20803a20813a6a21823a20813a20823a6a21833a20823a20833a6a2184" - "3a20833a20843a6a21853a20843a20853a6a21863a20853a20863a6a21873a20863a20873a6a21883a20873a20883a" - "6a21893a20883a20893a6a218a3a20893a208a3a6a218b3a208a3a208b3a6a218c3a208b3a208c3a6a218d3a208c3a" - "208d3a6a218e3a208d3a208e3a6a218f3a208e3a208f3a6a21903a208f3a20903a6a21913a20903a20913a6a21923a" - "20913a20923a6a21933a20923a20933a6a21943a20933a20943a6a21953a20943a20953a6a21963a20953a20963a6a" - "21973a20963a20973a6a21983a20973a20983a6a21993a20983a20993a6a219a3a20993a209a3a6a219b3a209a3a20" - "9b3a6a219c3a209b3a209c3a6a219d3a209c3a209d3a6a219e3a209d3a209e3a6a219f3a209e3a209f3a6a21a03a20" - "9f3a20a03a6a21a13a20a03a20a13a6a21a23a20a13a20a23a6a21a33a20a23a20a33a6a21a43a20a33a20a43a6a21" - "a53a20a43a20a53a6a21a63a20a53a20a63a6a21a73a20a63a20a73a6a21a83a20a73a20a83a6a21a93a20a83a20a9" - "3a6a21aa3a20a93a20aa3a6a21ab3a20aa3a20ab3a6a21ac3a20ab3a20ac3a6a21ad3a20ac3a20ad3a6a21ae3a20ad" - "3a20ae3a6a21af3a20ae3a20af3a6a21b03a20af3a20b03a6a21b13a20b03a20b13a6a21b23a20b13a20b23a6a21b3" - "3a20b23a20b33a6a21b43a20b33a20b43a6a21b53a20b43a20b53a6a21b63a20b53a20b63a6a21b73a20b63a20b73a" - "6a21b83a20b73a20b83a6a21b93a20b83a20b93a6a21ba3a20b93a20ba3a6a21bb3a20ba3a20bb3a6a21bc3a20bb3a" - "20bc3a6a21bd3a20bc3a20bd3a6a21be3a20bd3a20be3a6a21bf3a20be3a20bf3a6a21c03a20bf3a20c03a6a21c13a" - "20c03a20c13a6a21c23a20c13a20c23a6a21c33a20c23a20c33a6a21c43a20c33a20c43a6a21c53a20c43a20c53a6a" - "21c63a20c53a20c63a6a21c73a20c63a20c73a6a21c83a20c73a20c83a6a21c93a20c83a20c93a6a21ca3a20c93a20" - "ca3a6a21cb3a20ca3a20cb3a6a21cc3a20cb3a20cc3a6a21cd3a20cc3a20cd3a6a21ce3a20cd3a20ce3a6a21cf3a20" - "ce3a20cf3a6a21d03a20cf3a20d03a6a21d13a20d03a20d13a6a21d23a20d13a20d23a6a21d33a20d23a20d33a6a21" - "d43a20d33a20d43a6a21d53a20d43a20d53a6a21d63a20d53a20d63a6a21d73a20d63a20d73a6a21d83a20d73a20d8" - "3a6a21d93a20d83a20d93a6a21da3a20d93a20da3a6a21db3a20da3a20db3a6a21dc3a20db3a20dc3a6a21dd3a20dc" - "3a20dd3a6a21de3a20dd3a20de3a6a21df3a20de3a20df3a6a21e03a20df3a20e03a6a21e13a20e03a20e13a6a21e2" - "3a20e13a20e23a6a21e33a20e23a20e33a6a21e43a20e33a20e43a6a21e53a20e43a20e53a6a21e63a20e53a20e63a" - "6a21e73a20e63a20e73a6a21e83a20e73a20e83a6a21e93a20e83a20e93a6a21ea3a20e93a20ea3a6a21eb3a20ea3a" - "20eb3a6a21ec3a20eb3a20ec3a6a21ed3a20ec3a20ed3a6a21ee3a20ed3a20ee3a6a21ef3a20ee3a20ef3a6a21f03a" - "20ef3a20f03a6a21f13a20f03a20f13a6a21f23a20f13a20f23a6a21f33a20f23a20f33a6a21f43a20f33a20f43a6a" - "21f53a20f43a20f53a6a21f63a20f53a20f63a6a21f73a20f63a20f73a6a21f83a20f73a20f83a6a21f93a20f83a20" - "f93a6a21fa3a20f93a20fa3a6a21fb3a20fa3a20fb3a6a21fc3a20fb3a20fc3a6a21fd3a20fc3a20fd3a6a21fe3a20" - "fd3a20fe3a6a21ff3a20fe3a20ff3a6a21803b20ff3a20803b6a21813b20803b20813b6a21823b20813b20823b6a21" - "833b20823b20833b6a21843b20833b20843b6a21853b20843b20853b6a21863b20853b20863b6a21873b20863b2087" - "3b6a21883b20873b20883b6a21893b20883b20893b6a218a3b20893b208a3b6a218b3b208a3b208b3b6a218c3b208b" - "3b208c3b6a218d3b208c3b208d3b6a218e3b208d3b208e3b6a218f3b208e3b208f3b6a21903b208f3b20903b6a2191" - "3b20903b20913b6a21923b20913b20923b6a21933b20923b20933b6a21943b20933b20943b6a21953b20943b20953b" - "6a21963b20953b20963b6a21973b20963b20973b6a21983b20973b20983b6a21993b20983b20993b6a219a3b20993b" - "209a3b6a219b3b209a3b209b3b6a219c3b209b3b209c3b6a219d3b209c3b209d3b6a219e3b209d3b209e3b6a219f3b" - "209e3b209f3b6a21a03b209f3b20a03b6a21a13b20a03b20a13b6a21a23b20a13b20a23b6a21a33b20a23b20a33b6a" - "21a43b20a33b20a43b6a21a53b20a43b20a53b6a21a63b20a53b20a63b6a21a73b20a63b20a73b6a21a83b20a73b20" - "a83b6a21a93b20a83b20a93b6a21aa3b20a93b20aa3b6a21ab3b20aa3b20ab3b6a21ac3b20ab3b20ac3b6a21ad3b20" - "ac3b20ad3b6a21ae3b20ad3b20ae3b6a21af3b20ae3b20af3b6a21b03b20af3b20b03b6a21b13b20b03b20b13b6a21" - "b23b20b13b20b23b6a21b33b20b23b20b33b6a21b43b20b33b20b43b6a21b53b20b43b20b53b6a21b63b20b53b20b6" - "3b6a21b73b20b63b20b73b6a21b83b20b73b20b83b6a21b93b20b83b20b93b6a21ba3b20b93b20ba3b6a21bb3b20ba" - "3b20bb3b6a21bc3b20bb3b20bc3b6a21bd3b20bc3b20bd3b6a21be3b20bd3b20be3b6a21bf3b20be3b20bf3b6a21c0" - "3b20bf3b20c03b6a21c13b20c03b20c13b6a21c23b20c13b20c23b6a21c33b20c23b20c33b6a21c43b20c33b20c43b" - "6a21c53b20c43b20c53b6a21c63b20c53b20c63b6a21c73b20c63b20c73b6a21c83b20c73b20c83b6a21c93b20c83b" - "20c93b6a21ca3b20c93b20ca3b6a21cb3b20ca3b20cb3b6a21cc3b20cb3b20cc3b6a21cd3b20cc3b20cd3b6a21ce3b" - "20cd3b20ce3b6a21cf3b20ce3b20cf3b6a21d03b20cf3b20d03b6a21d13b20d03b20d13b6a21d23b20d13b20d23b6a" - "21d33b20d23b20d33b6a21d43b20d33b20d43b6a21d53b20d43b20d53b6a21d63b20d53b20d63b6a21d73b20d63b20" - "d73b6a21d83b20d73b20d83b6a21d93b20d83b20d93b6a21da3b20d93b20da3b6a21db3b20da3b20db3b6a21dc3b20" - "db3b20dc3b6a21dd3b20dc3b20dd3b6a21de3b20dd3b20de3b6a21df3b20de3b20df3b6a21e03b20df3b20e03b6a21" - "e13b20e03b20e13b6a21e23b20e13b20e23b6a21e33b20e23b20e33b6a21e43b20e33b20e43b6a21e53b20e43b20e5" - "3b6a21e63b20e53b20e63b6a21e73b20e63b20e73b6a21e83b20e73b20e83b6a21e93b20e83b20e93b6a21ea3b20e9" - "3b20ea3b6a21eb3b20ea3b20eb3b6a21ec3b20eb3b20ec3b6a21ed3b20ec3b20ed3b6a21ee3b20ed3b20ee3b6a21ef" - "3b20ee3b20ef3b6a21f03b20ef3b20f03b6a21f13b20f03b20f13b6a21f23b20f13b20f23b6a21f33b20f23b20f33b" - "6a21f43b20f33b20f43b6a21f53b20f43b20f53b6a21f63b20f53b20f63b6a21f73b20f63b20f73b6a21f83b20f73b" - "20f83b6a21f93b20f83b20f93b6a21fa3b20f93b20fa3b6a21fb3b20fa3b20fb3b6a21fc3b20fb3b20fc3b6a21fd3b" - "20fc3b20fd3b6a21fe3b20fd3b20fe3b6a21ff3b20fe3b20ff3b6a21803c20ff3b20803c6a21813c20803c20813c6a" - "21823c20813c20823c6a21833c20823c20833c6a21843c20833c20843c6a21853c20843c20853c6a21863c20853c20" - "863c6a21873c20863c20873c6a21883c20873c20883c6a21893c20883c20893c6a218a3c20893c208a3c6a218b3c20" - "8a3c208b3c6a218c3c208b3c208c3c6a218d3c208c3c208d3c6a218e3c208d3c208e3c6a218f3c208e3c208f3c6a21" - "903c208f3c20903c6a21913c20903c20913c6a21923c20913c20923c6a21933c20923c20933c6a21943c20933c2094" - "3c6a21953c20943c20953c6a21963c20953c20963c6a21973c20963c20973c6a21983c20973c20983c6a21993c2098" - "3c20993c6a219a3c20993c209a3c6a219b3c209a3c209b3c6a219c3c209b3c209c3c6a219d3c209c3c209d3c6a219e" - "3c209d3c209e3c6a219f3c209e3c209f3c6a21a03c209f3c20a03c6a21a13c20a03c20a13c6a21a23c20a13c20a23c" - "6a21a33c20a23c20a33c6a21a43c20a33c20a43c6a21a53c20a43c20a53c6a21a63c20a53c20a63c6a21a73c20a63c" - "20a73c6a21a83c20a73c20a83c6a21a93c20a83c20a93c6a21aa3c20a93c20aa3c6a21ab3c20aa3c20ab3c6a21ac3c" - "20ab3c20ac3c6a21ad3c20ac3c20ad3c6a21ae3c20ad3c20ae3c6a21af3c20ae3c20af3c6a21b03c20af3c20b03c6a" - "21b13c20b03c20b13c6a21b23c20b13c20b23c6a21b33c20b23c20b33c6a21b43c20b33c20b43c6a21b53c20b43c20" - "b53c6a21b63c20b53c20b63c6a21b73c20b63c20b73c6a21b83c20b73c20b83c6a21b93c20b83c20b93c6a21ba3c20" - "b93c20ba3c6a21bb3c20ba3c20bb3c6a21bc3c20bb3c20bc3c6a21bd3c20bc3c20bd3c6a21be3c20bd3c20be3c6a21" - "bf3c20be3c20bf3c6a21c03c20bf3c20c03c6a21c13c20c03c20c13c6a21c23c20c13c20c23c6a21c33c20c23c20c3" - "3c6a21c43c20c33c20c43c6a21c53c20c43c20c53c6a21c63c20c53c20c63c6a21c73c20c63c20c73c6a21c83c20c7" - "3c20c83c6a21c93c20c83c20c93c6a21ca3c20c93c20ca3c6a21cb3c20ca3c20cb3c6a21cc3c20cb3c20cc3c6a21cd" - "3c20cc3c20cd3c6a21ce3c20cd3c20ce3c6a21cf3c20ce3c20cf3c6a21d03c20cf3c20d03c6a21d13c20d03c20d13c" - "6a21d23c20d13c20d23c6a21d33c20d23c20d33c6a21d43c20d33c20d43c6a21d53c20d43c20d53c6a21d63c20d53c" - "20d63c6a21d73c20d63c20d73c6a21d83c20d73c20d83c6a21d93c20d83c20d93c6a21da3c20d93c20da3c6a21db3c" - "20da3c20db3c6a21dc3c20db3c20dc3c6a21dd3c20dc3c20dd3c6a21de3c20dd3c20de3c6a21df3c20de3c20df3c6a" - "21e03c20df3c20e03c6a21e13c20e03c20e13c6a21e23c20e13c20e23c6a21e33c20e23c20e33c6a21e43c20e33c20" - "e43c6a21e53c20e43c20e53c6a21e63c20e53c20e63c6a21e73c20e63c20e73c6a21e83c20e73c20e83c6a21e93c20" - "e83c20e93c6a21ea3c20e93c20ea3c6a21eb3c20ea3c20eb3c6a21ec3c20eb3c20ec3c6a21ed3c20ec3c20ed3c6a21" - "ee3c20ed3c20ee3c6a21ef3c20ee3c20ef3c6a21f03c20ef3c20f03c6a21f13c20f03c20f13c6a21f23c20f13c20f2" - "3c6a21f33c20f23c20f33c6a21f43c20f33c20f43c6a21f53c20f43c20f53c6a21f63c20f53c20f63c6a21f73c20f6" - "3c20f73c6a21f83c20f73c20f83c6a21f93c20f83c20f93c6a21fa3c20f93c20fa3c6a21fb3c20fa3c20fb3c6a21fc" - "3c20fb3c20fc3c6a21fd3c20fc3c20fd3c6a21fe3c20fd3c20fe3c6a21ff3c20fe3c20ff3c6a21803d20ff3c20803d" - "6a21813d20803d20813d6a21823d20813d20823d6a21833d20823d20833d6a21843d20833d20843d6a21853d20843d" - "20853d6a21863d20853d20863d6a21873d20863d20873d6a21883d20873d20883d6a21893d20883d20893d6a218a3d" - "20893d208a3d6a218b3d208a3d208b3d6a218c3d208b3d208c3d6a218d3d208c3d208d3d6a218e3d208d3d208e3d6a" - "218f3d208e3d208f3d6a21903d208f3d20903d6a21913d20903d20913d6a21923d20913d20923d6a21933d20923d20" - "933d6a21943d20933d20943d6a21953d20943d20953d6a21963d20953d20963d6a21973d20963d20973d6a21983d20" - "973d20983d6a21993d20983d20993d6a219a3d20993d209a3d6a219b3d209a3d209b3d6a219c3d209b3d209c3d6a21" - "9d3d209c3d209d3d6a219e3d209d3d209e3d6a219f3d209e3d209f3d6a21a03d209f3d20a03d6a21a13d20a03d20a1" - "3d6a21a23d20a13d20a23d6a21a33d20a23d20a33d6a21a43d20a33d20a43d6a21a53d20a43d20a53d6a21a63d20a5" - "3d20a63d6a21a73d20a63d20a73d6a21a83d20a73d20a83d6a21a93d20a83d20a93d6a21aa3d20a93d20aa3d6a21ab" - "3d20aa3d20ab3d6a21ac3d20ab3d20ac3d6a21ad3d20ac3d20ad3d6a21ae3d20ad3d20ae3d6a21af3d20ae3d20af3d" - "6a21b03d20af3d20b03d6a21b13d20b03d20b13d6a21b23d20b13d20b23d6a21b33d20b23d20b33d6a21b43d20b33d" - "20b43d6a21b53d20b43d20b53d6a21b63d20b53d20b63d6a21b73d20b63d20b73d6a21b83d20b73d20b83d6a21b93d" - "20b83d20b93d6a21ba3d20b93d20ba3d6a21bb3d20ba3d20bb3d6a21bc3d20bb3d20bc3d6a21bd3d20bc3d20bd3d6a" - "21be3d20bd3d20be3d6a21bf3d20be3d20bf3d6a21c03d20bf3d20c03d6a21c13d20c03d20c13d6a21c23d20c13d20" - "c23d6a21c33d20c23d20c33d6a21c43d20c33d20c43d6a21c53d20c43d20c53d6a21c63d20c53d20c63d6a21c73d20" - "c63d20c73d6a21c83d20c73d20c83d6a21c93d20c83d20c93d6a21ca3d20c93d20ca3d6a21cb3d20ca3d20cb3d6a21" - "cc3d20cb3d20cc3d6a21cd3d20cc3d20cd3d6a21ce3d20cd3d20ce3d6a21cf3d20ce3d20cf3d6a21d03d20cf3d20d0" - "3d6a21d13d20d03d20d13d6a21d23d20d13d20d23d6a21d33d20d23d20d33d6a21d43d20d33d20d43d6a21d53d20d4" - "3d20d53d6a21d63d20d53d20d63d6a21d73d20d63d20d73d6a21d83d20d73d20d83d6a21d93d20d83d20d93d6a21da" - "3d20d93d20da3d6a21db3d20da3d20db3d6a21dc3d20db3d20dc3d6a21dd3d20dc3d20dd3d6a21de3d20dd3d20de3d" - "6a21df3d20de3d20df3d6a21e03d20df3d20e03d6a21e13d20e03d20e13d6a21e23d20e13d20e23d6a21e33d20e23d" - "20e33d6a21e43d20e33d20e43d6a21e53d20e43d20e53d6a21e63d20e53d20e63d6a21e73d20e63d20e73d6a21e83d" - "20e73d20e83d6a21e93d20e83d20e93d6a21ea3d20e93d20ea3d6a21eb3d20ea3d20eb3d6a21ec3d20eb3d20ec3d6a" - "21ed3d20ec3d20ed3d6a21ee3d20ed3d20ee3d6a21ef3d20ee3d20ef3d6a21f03d20ef3d20f03d6a21f13d20f03d20" - "f13d6a21f23d20f13d20f23d6a21f33d20f23d20f33d6a21f43d20f33d20f43d6a21f53d20f43d20f53d6a21f63d20" - "f53d20f63d6a21f73d20f63d20f73d6a21f83d20f73d20f83d6a21f93d20f83d20f93d6a21fa3d20f93d20fa3d6a21" - "fb3d20fa3d20fb3d6a21fc3d20fb3d20fc3d6a21fd3d20fc3d20fd3d6a21fe3d20fd3d20fe3d6a21ff3d20fe3d20ff" - "3d6a21803e20ff3d20803e6a21813e20803e20813e6a21823e20813e20823e6a21833e20823e20833e6a21843e2083" - "3e20843e6a21853e20843e20853e6a21863e20853e20863e6a21873e20863e20873e6a21883e20873e20883e6a2189" - "3e20883e20893e6a218a3e20893e208a3e6a218b3e208a3e208b3e6a218c3e208b3e208c3e6a218d3e208c3e208d3e" - "6a218e3e208d3e208e3e6a218f3e208e3e208f3e6a21903e208f3e20903e6a21913e20903e20913e6a21923e20913e" - "20923e6a21933e20923e20933e6a21943e20933e20943e6a21953e20943e20953e6a21963e20953e20963e6a21973e" - "20963e20973e6a21983e20973e20983e6a21993e20983e20993e6a219a3e20993e209a3e6a219b3e209a3e209b3e6a" - "219c3e209b3e209c3e6a219d3e209c3e209d3e6a219e3e209d3e209e3e6a219f3e209e3e209f3e6a21a03e209f3e20" - "a03e6a21a13e20a03e20a13e6a21a23e20a13e20a23e6a21a33e20a23e20a33e6a21a43e20a33e20a43e6a21a53e20" - "a43e20a53e6a21a63e20a53e20a63e6a21a73e20a63e20a73e6a21a83e20a73e20a83e6a21a93e20a83e20a93e6a21" - "aa3e20a93e20aa3e6a21ab3e20aa3e20ab3e6a21ac3e20ab3e20ac3e6a21ad3e20ac3e20ad3e6a21ae3e20ad3e20ae" - "3e6a21af3e20ae3e20af3e6a21b03e20af3e20b03e6a21b13e20b03e20b13e6a21b23e20b13e20b23e6a21b33e20b2" - "3e20b33e6a21b43e20b33e20b43e6a21b53e20b43e20b53e6a21b63e20b53e20b63e6a21b73e20b63e20b73e6a21b8" - "3e20b73e20b83e6a21b93e20b83e20b93e6a21ba3e20b93e20ba3e6a21bb3e20ba3e20bb3e6a21bc3e20bb3e20bc3e" - "6a21bd3e20bc3e20bd3e6a21be3e20bd3e20be3e6a21bf3e20be3e20bf3e6a21c03e20bf3e20c03e6a21c13e20c03e" - "20c13e6a21c23e20c13e20c23e6a21c33e20c23e20c33e6a21c43e20c33e20c43e6a21c53e20c43e20c53e6a21c63e" - "20c53e20c63e6a21c73e20c63e20c73e6a21c83e20c73e20c83e6a21c93e20c83e20c93e6a21ca3e20c93e20ca3e6a" - "21cb3e20ca3e20cb3e6a21cc3e20cb3e20cc3e6a21cd3e20cc3e20cd3e6a21ce3e20cd3e20ce3e6a21cf3e20ce3e20" - "cf3e6a21d03e20cf3e20d03e6a21d13e20d03e20d13e6a21d23e20d13e20d23e6a21d33e20d23e20d33e6a21d43e20" - "d33e20d43e6a21d53e20d43e20d53e6a21d63e20d53e20d63e6a21d73e20d63e20d73e6a21d83e20d73e20d83e6a21" - "d93e20d83e20d93e6a21da3e20d93e20da3e6a21db3e20da3e20db3e6a21dc3e20db3e20dc3e6a21dd3e20dc3e20dd" - "3e6a21de3e20dd3e20de3e6a21df3e20de3e20df3e6a21e03e20df3e20e03e6a21e13e20e03e20e13e6a21e23e20e1" - "3e20e23e6a21e33e20e23e20e33e6a21e43e20e33e20e43e6a21e53e20e43e20e53e6a21e63e20e53e20e63e6a21e7" - "3e20e63e20e73e6a21e83e20e73e20e83e6a21e93e20e83e20e93e6a21ea3e20e93e20ea3e6a21eb3e20ea3e20eb3e" - "6a21ec3e20eb3e20ec3e6a21ed3e20ec3e20ed3e6a21ee3e20ed3e20ee3e6a21ef3e20ee3e20ef3e6a21f03e20ef3e" - "20f03e6a21f13e20f03e20f13e6a21f23e20f13e20f23e6a21f33e20f23e20f33e6a21f43e20f33e20f43e6a21f53e" - "20f43e20f53e6a21f63e20f53e20f63e6a21f73e20f63e20f73e6a21f83e20f73e20f83e6a21f93e20f83e20f93e6a" - "21fa3e20f93e20fa3e6a21fb3e20fa3e20fb3e6a21fc3e20fb3e20fc3e6a21fd3e20fc3e20fd3e6a21fe3e20fd3e20" - "fe3e6a21ff3e20fe3e20ff3e6a21803f20ff3e20803f6a21813f20803f20813f6a21823f20813f20823f6a21833f20" - "823f20833f6a21843f20833f20843f6a21853f20843f20853f6a21863f20853f20863f6a21873f20863f20873f6a21" - "883f20873f20883f6a21893f20883f20893f6a218a3f20893f208a3f6a218b3f208a3f208b3f6a218c3f208b3f208c" - "3f6a218d3f208c3f208d3f6a218e3f208d3f208e3f6a218f3f208e3f208f3f6a21903f208f3f20903f6a21913f2090" - "3f20913f6a21923f20913f20923f6a21933f20923f20933f6a21943f20933f20943f6a21953f20943f20953f6a2196" - "3f20953f20963f6a21973f20963f20973f6a21983f20973f20983f6a21993f20983f20993f6a219a3f20993f209a3f" - "6a219b3f209a3f209b3f6a219c3f209b3f209c3f6a219d3f209c3f209d3f6a219e3f209d3f209e3f6a219f3f209e3f" - "209f3f6a21a03f209f3f20a03f6a21a13f20a03f20a13f6a21a23f20a13f20a23f6a21a33f20a23f20a33f6a21a43f" - "20a33f20a43f6a21a53f20a43f20a53f6a21a63f20a53f20a63f6a21a73f20a63f20a73f6a21a83f20a73f20a83f6a" - "21a93f20a83f20a93f6a21aa3f20a93f20aa3f6a21ab3f20aa3f20ab3f6a21ac3f20ab3f20ac3f6a21ad3f20ac3f20" - "ad3f6a21ae3f20ad3f20ae3f6a21af3f20ae3f20af3f6a21b03f20af3f20b03f6a21b13f20b03f20b13f6a21b23f20" - "b13f20b23f6a21b33f20b23f20b33f6a21b43f20b33f20b43f6a21b53f20b43f20b53f6a21b63f20b53f20b63f6a21" - "b73f20b63f20b73f6a21b83f20b73f20b83f6a21b93f20b83f20b93f6a21ba3f20b93f20ba3f6a21bb3f20ba3f20bb" - "3f6a21bc3f20bb3f20bc3f6a21bd3f20bc3f20bd3f6a21be3f20bd3f20be3f6a21bf3f20be3f20bf3f6a21c03f20bf" - "3f20c03f6a21c13f20c03f20c13f6a21c23f20c13f20c23f6a21c33f20c23f20c33f6a21c43f20c33f20c43f6a21c5" - "3f20c43f20c53f6a21c63f20c53f20c63f6a21c73f20c63f20c73f6a21c83f20c73f20c83f6a21c93f20c83f20c93f" - "6a21ca3f20c93f20ca3f6a21cb3f20ca3f20cb3f6a21cc3f20cb3f20cc3f6a21cd3f20cc3f20cd3f6a21ce3f20cd3f" - "20ce3f6a21cf3f20ce3f20cf3f6a21d03f20cf3f20d03f6a21d13f20d03f20d13f6a21d23f20d13f20d23f6a21d33f" - "20d23f20d33f6a21d43f20d33f20d43f6a21d53f20d43f20d53f6a21d63f20d53f20d63f6a21d73f20d63f20d73f6a" - "21d83f20d73f20d83f6a21d93f20d83f20d93f6a21da3f20d93f20da3f6a21db3f20da3f20db3f6a21dc3f20db3f20" - "dc3f6a21dd3f20dc3f20dd3f6a21de3f20dd3f20de3f6a21df3f20de3f20df3f6a21e03f20df3f20e03f6a21e13f20" - "e03f20e13f6a21e23f20e13f20e23f6a21e33f20e23f20e33f6a21e43f20e33f20e43f6a21e53f20e43f20e53f6a21" - "e63f20e53f20e63f6a21e73f20e63f20e73f6a21e83f20e73f20e83f6a21e93f20e83f20e93f6a21ea3f20e93f20ea" - "3f6a21eb3f20ea3f20eb3f6a21ec3f20eb3f20ec3f6a21ed3f20ec3f20ed3f6a21ee3f20ed3f20ee3f6a21ef3f20ee" - "3f20ef3f6a21f03f20ef3f20f03f6a21f13f20f03f20f13f6a21f23f20f13f20f23f6a21f33f20f23f20f33f6a21f4" - "3f20f33f20f43f6a21f53f20f43f20f53f6a21f63f20f53f20f63f6a21f73f20f63f20f73f6a21f83f20f73f20f83f" - "6a21f93f20f83f20f93f6a21fa3f20f93f20fa3f6a21fb3f20fa3f20fb3f6a21fc3f20fb3f20fc3f6a21fd3f20fc3f" - "20fd3f6a21fe3f20fd3f20fe3f6a21ff3f20fe3f20ff3f6a21804020ff3f2080406a2181402080402081406a218240" - "2081402082406a2183402082402083406a2184402083402084406a2185402084402085406a2186402085402086406a" - "2187402086402087406a2188402087402088406a2189402088402089406a218a40208940208a406a218b40208a4020" - "8b406a218c40208b40208c406a218d40208c40208d406a218e40208d40208e406a218f40208e40208f406a21904020" - "8f402090406a2191402090402091406a2192402091402092406a2193402092402093406a2194402093402094406a21" - "95402094402095406a2196402095402096406a2197402096402097406a2198402097402098406a2199402098402099" - "406a219a40209940209a406a219b40209a40209b406a219c40209b40209c406a219d40209c40209d406a219e40209d" - "40209e406a219f40209e40209f406a21a040209f4020a0406a21a14020a04020a1406a21a24020a14020a2406a21a3" - "4020a24020a3406a21a44020a34020a4406a21a54020a44020a5406a21a64020a54020a6406a21a74020a64020a740" - "6a21a84020a74020a8406a21a94020a84020a9406a21aa4020a94020aa406a21ab4020aa4020ab406a21ac4020ab40" - "20ac406a21ad4020ac4020ad406a21ae4020ad4020ae406a21af4020ae4020af406a21b04020af4020b0406a21b140" - "20b04020b1406a21b24020b14020b2406a21b34020b24020b3406a21b44020b34020b4406a21b54020b44020b5406a" - "21b64020b54020b6406a21b74020b64020b7406a21b84020b74020b8406a21b94020b84020b9406a21ba4020b94020" - "ba406a21bb4020ba4020bb406a21bc4020bb4020bc406a21bd4020bc4020bd406a21be4020bd4020be406a21bf4020" - "be4020bf406a21c04020bf4020c0406a21c14020c04020c1406a21c24020c14020c2406a21c34020c24020c3406a21" - "c44020c34020c4406a21c54020c44020c5406a21c64020c54020c6406a21c74020c64020c7406a21c84020c74020c8" - "406a21c94020c84020c9406a21ca4020c94020ca406a21cb4020ca4020cb406a21cc4020cb4020cc406a21cd4020cc" - "4020cd406a21ce4020cd4020ce406a21cf4020ce4020cf406a21d04020cf4020d0406a21d14020d04020d1406a21d2" - "4020d14020d2406a21d34020d24020d3406a21d44020d34020d4406a21d54020d44020d5406a21d64020d54020d640" - "6a21d74020d64020d7406a21d84020d74020d8406a21d94020d84020d9406a21da4020d94020da406a21db4020da40" - "20db406a21dc4020db4020dc406a21dd4020dc4020dd406a21de4020dd4020de406a21df4020de4020df406a21e040" - "20df4020e0406a21e14020e04020e1406a21e24020e14020e2406a21e34020e24020e3406a21e44020e34020e4406a" - "21e54020e44020e5406a21e64020e54020e6406a21e74020e64020e7406a21e84020e74020e8406a21e94020e84020" - "e9406a21ea4020e94020ea406a21eb4020ea4020eb406a21ec4020eb4020ec406a21ed4020ec4020ed406a21ee4020" - "ed4020ee406a21ef4020ee4020ef406a21f04020ef4020f0406a21f14020f04020f1406a21f24020f14020f2406a21" - "f34020f24020f3406a21f44020f34020f4406a21f54020f44020f5406a21f64020f54020f6406a21f74020f64020f7" - "406a21f84020f74020f8406a21f94020f84020f9406a21fa4020f94020fa406a21fb4020fa4020fb406a21fc4020fb" - "4020fc406a21fd4020fc4020fd406a21fe4020fd4020fe406a21ff4020fe4020ff406a21804120ff402080416a2181" - "412080412081416a2182412081412082416a2183412082412083416a2184412083412084416a218541208441208541" - "6a2186412085412086416a2187412086412087416a2188412087412088416a2189412088412089416a218a41208941" - "208a416a218b41208a41208b416a218c41208b41208c416a218d41208c41208d416a218e41208d41208e416a218f41" - "208e41208f416a219041208f412090416a2191412090412091416a2192412091412092416a2193412092412093416a" - "2194412093412094416a2195412094412095416a2196412095412096416a2197412096412097416a21984120974120" - "98416a2199412098412099416a219a41209941209a416a219b41209a41209b416a219c41209b41209c416a219d4120" - "9c41209d416a219e41209d41209e416a219f41209e41209f416a21a041209f4120a0416a21a14120a04120a1416a21" - "a24120a14120a2416a21a34120a24120a3416a21a44120a34120a4416a21a54120a44120a5416a21a64120a54120a6" - "416a21a74120a64120a7416a21a84120a74120a8416a21a94120a84120a9416a21aa4120a94120aa416a21ab4120aa" - "4120ab416a21ac4120ab4120ac416a21ad4120ac4120ad416a21ae4120ad4120ae416a21af4120ae4120af416a21b0" - "4120af4120b0416a21b14120b04120b1416a21b24120b14120b2416a21b34120b24120b3416a21b44120b34120b441" - "6a21b54120b44120b5416a21b64120b54120b6416a21b74120b64120b7416a21b84120b74120b8416a21b94120b841" - "20b9416a21ba4120b94120ba416a21bb4120ba4120bb416a21bc4120bb4120bc416a21bd4120bc4120bd416a21be41" - "20bd4120be416a21bf4120be4120bf416a21c04120bf4120c0416a21c14120c04120c1416a21c24120c14120c2416a" - "21c34120c24120c3416a21c44120c34120c4416a21c54120c44120c5416a21c64120c54120c6416a21c74120c64120" - "c7416a21c84120c74120c8416a21c94120c84120c9416a21ca4120c94120ca416a21cb4120ca4120cb416a21cc4120" - "cb4120cc416a21cd4120cc4120cd416a21ce4120cd4120ce416a21cf4120ce4120cf416a21d04120cf4120d0416a21" - "d14120d04120d1416a21d24120d14120d2416a21d34120d24120d3416a21d44120d34120d4416a21d54120d44120d5" - "416a21d64120d54120d6416a21d74120d64120d7416a21d84120d74120d8416a21d94120d84120d9416a21da4120d9" - "4120da416a21db4120da4120db416a21dc4120db4120dc416a21dd4120dc4120dd416a21de4120dd4120de416a21df" - "4120de4120df416a21e04120df4120e0416a21e14120e04120e1416a21e24120e14120e2416a21e34120e24120e341" - "6a21e44120e34120e4416a21e54120e44120e5416a21e64120e54120e6416a21e74120e64120e7416a21e84120e741" - "20e8416a21e94120e84120e9416a21ea4120e94120ea416a21eb4120ea4120eb416a21ec4120eb4120ec416a21ed41" - "20ec4120ed416a21ee4120ed4120ee416a21ef4120ee4120ef416a21f04120ef4120f0416a21f14120f04120f1416a" - "21f24120f14120f2416a21f34120f24120f3416a21f44120f34120f4416a21f54120f44120f5416a21f64120f54120" - "f6416a21f74120f64120f7416a21f84120f74120f8416a21f94120f84120f9416a21fa4120f94120fa416a21fb4120" - "fa4120fb416a21fc4120fb4120fc416a21fd4120fc4120fd416a21fe4120fd4120fe416a21ff4120fe4120ff416a21" - "804220ff412080426a2181422080422081426a2182422081422082426a2183422082422083426a2184422083422084" - "426a2185422084422085426a2186422085422086426a2187422086422087426a2188422087422088426a2189422088" - "422089426a218a42208942208a426a218b42208a42208b426a218c42208b42208c426a218d42208c42208d426a218e" - "42208d42208e426a218f42208e42208f426a219042208f422090426a2191422090422091426a219242209142209242" - "6a2193422092422093426a2194422093422094426a2195422094422095426a2196422095422096426a219742209642" - "2097426a2198422097422098426a2199422098422099426a219a42209942209a426a219b42209a42209b426a219c42" - "209b42209c426a219d42209c42209d426a219e42209d42209e426a219f42209e42209f426a21a042209f4220a0426a" - "21a14220a04220a1426a21a24220a14220a2426a21a34220a24220a3426a21a44220a34220a4426a21a54220a44220" - "a5426a21a64220a54220a6426a21a74220a64220a7426a21a84220a74220a8426a21a94220a84220a9426a21aa4220" - "a94220aa426a21ab4220aa4220ab426a21ac4220ab4220ac426a21ad4220ac4220ad426a21ae4220ad4220ae426a21" - "af4220ae4220af426a21b04220af4220b0426a21b14220b04220b1426a21b24220b14220b2426a21b34220b24220b3" - "426a21b44220b34220b4426a21b54220b44220b5426a21b64220b54220b6426a21b74220b64220b7426a21b84220b7" - "4220b8426a21b94220b84220b9426a21ba4220b94220ba426a21bb4220ba4220bb426a21bc4220bb4220bc426a21bd" - "4220bc4220bd426a21be4220bd4220be426a21bf4220be4220bf426a21c04220bf4220c0426a21c14220c04220c142" - "6a21c24220c14220c2426a21c34220c24220c3426a21c44220c34220c4426a21c54220c44220c5426a21c64220c542" - "20c6426a21c74220c64220c7426a21c84220c74220c8426a21c94220c84220c9426a21ca4220c94220ca426a21cb42" - "20ca4220cb426a21cc4220cb4220cc426a21cd4220cc4220cd426a21ce4220cd4220ce426a21cf4220ce4220cf426a" - "21d04220cf4220d0426a21d14220d04220d1426a21d24220d14220d2426a21d34220d24220d3426a21d44220d34220" - "d4426a21d54220d44220d5426a21d64220d54220d6426a21d74220d64220d7426a21d84220d74220d8426a21d94220" - "d84220d9426a21da4220d94220da426a21db4220da4220db426a21dc4220db4220dc426a21dd4220dc4220dd426a21" - "de4220dd4220de426a21df4220de4220df426a21e04220df4220e0426a21e14220e04220e1426a21e24220e14220e2" - "426a21e34220e24220e3426a21e44220e34220e4426a21e54220e44220e5426a21e64220e54220e6426a21e74220e6" - "4220e7426a21e84220e74220e8426a21e94220e84220e9426a21ea4220e94220ea426a21eb4220ea4220eb426a21ec" - "4220eb4220ec426a21ed4220ec4220ed426a21ee4220ed4220ee426a21ef4220ee4220ef426a21f04220ef4220f042" - "6a21f14220f04220f1426a21f24220f14220f2426a21f34220f24220f3426a21f44220f34220f4426a21f54220f442" - "20f5426a21f64220f54220f6426a21f74220f64220f7426a21f84220f74220f8426a21f94220f84220f9426a21fa42" - "20f94220fa426a21fb4220fa4220fb426a21fc4220fb4220fc426a21fd4220fc4220fd426a21fe4220fd4220fe426a" - "21ff4220fe4220ff426a21804320ff422080436a2181432080432081436a2182432081432082436a21834320824320" - "83436a2184432083432084436a2185432084432085436a2186432085432086436a2187432086432087436a21884320" - "87432088436a2189432088432089436a218a43208943208a436a218b43208a43208b436a218c43208b43208c436a21" - "8d43208c43208d436a218e43208d43208e436a218f43208e43208f436a219043208f432090436a2191432090432091" - "436a2192432091432092436a2193432092432093436a2194432093432094436a2195432094432095436a2196432095" - "432096436a2197432096432097436a2198432097432098436a2199432098432099436a219a43209943209a436a219b" - "43209a43209b436a219c43209b43209c436a219d43209c43209d436a219e43209d43209e436a219f43209e43209f43" - "6a21a043209f4320a0436a21a14320a04320a1436a21a24320a14320a2436a21a34320a24320a3436a21a44320a343" - "20a4436a21a54320a44320a5436a21a64320a54320a6436a21a74320a64320a7436a21a84320a74320a8436a21a943" - "20a84320a9436a21aa4320a94320aa436a21ab4320aa4320ab436a21ac4320ab4320ac436a21ad4320ac4320ad436a" - "21ae4320ad4320ae436a21af4320ae4320af436a21b04320af4320b0436a21b14320b04320b1436a21b24320b14320" - "b2436a21b34320b24320b3436a21b44320b34320b4436a21b54320b44320b5436a21b64320b54320b6436a21b74320" - "b64320b7436a21b84320b74320b8436a21b94320b84320b9436a21ba4320b94320ba436a21bb4320ba4320bb436a21" - "bc4320bb4320bc436a21bd4320bc4320bd436a21be4320bd4320be436a21bf4320be4320bf436a21c04320bf4320c0" - "436a21c14320c04320c1436a21c24320c14320c2436a21c34320c24320c3436a21c44320c34320c4436a21c54320c4" - "4320c5436a21c64320c54320c6436a21c74320c64320c7436a21c84320c74320c8436a21c94320c84320c9436a21ca" - "4320c94320ca436a21cb4320ca4320cb436a21cc4320cb4320cc436a21cd4320cc4320cd436a21ce4320cd4320ce43" - "6a21cf4320ce4320cf436a21d04320cf4320d0436a21d14320d04320d1436a21d24320d14320d2436a21d34320d243" - "20d3436a21d44320d34320d4436a21d54320d44320d5436a21d64320d54320d6436a21d74320d64320d7436a21d843" - "20d74320d8436a21d94320d84320d9436a21da4320d94320da436a21db4320da4320db436a21dc4320db4320dc436a" - "21dd4320dc4320dd436a21de4320dd4320de436a21df4320de4320df436a21e04320df4320e0436a21e14320e04320" - "e1436a21e24320e14320e2436a21e34320e24320e3436a21e44320e34320e4436a21e54320e44320e5436a21e64320" - "e54320e6436a21e74320e64320e7436a21e84320e74320e8436a21e94320e84320e9436a21ea4320e94320ea436a21" - "eb4320ea4320eb436a21ec4320eb4320ec436a21ed4320ec4320ed436a21ee4320ed4320ee436a21ef4320ee4320ef" - "436a21f04320ef4320f0436a21f14320f04320f1436a21f24320f14320f2436a21f34320f24320f3436a21f44320f3" - "4320f4436a21f54320f44320f5436a21f64320f54320f6436a21f74320f64320f7436a21f84320f74320f8436a21f9" - "4320f84320f9436a21fa4320f94320fa436a21fb4320fa4320fb436a21fc4320fb4320fc436a21fd4320fc4320fd43" - "6a21fe4320fd4320fe436a21ff4320fe4320ff436a21804420ff432080446a2181442080442081446a218244208144" - "2082446a2183442082442083446a2184442083442084446a2185442084442085446a2186442085442086446a218744" - "2086442087446a2188442087442088446a2189442088442089446a218a44208944208a446a218b44208a44208b446a" - "218c44208b44208c446a218d44208c44208d446a218e44208d44208e446a218f44208e44208f446a219044208f4420" - "90446a2191442090442091446a2192442091442092446a2193442092442093446a2194442093442094446a21954420" - "94442095446a2196442095442096446a2197442096442097446a2198442097442098446a2199442098442099446a21" - "9a44209944209a446a219b44209a44209b446a219c44209b44209c446a219d44209c44209d446a219e44209d44209e" - "446a219f44209e44209f446a21a044209f4420a0446a21a14420a04420a1446a21a24420a14420a2446a21a34420a2" - "4420a3446a21a44420a34420a4446a21a54420a44420a5446a21a64420a54420a6446a21a74420a64420a7446a21a8" - "4420a74420a8446a21a94420a84420a9446a21aa4420a94420aa446a21ab4420aa4420ab446a21ac4420ab4420ac44" - "6a21ad4420ac4420ad446a21ae4420ad4420ae446a21af4420ae4420af446a21b04420af4420b0446a21b14420b044" - "20b1446a21b24420b14420b2446a21b34420b24420b3446a21b44420b34420b4446a21b54420b44420b5446a21b644" - "20b54420b6446a21b74420b64420b7446a21b84420b74420b8446a21b94420b84420b9446a21ba4420b94420ba446a" - "21bb4420ba4420bb446a21bc4420bb4420bc446a21bd4420bc4420bd446a21be4420bd4420be446a21bf4420be4420" - "bf446a21c04420bf4420c0446a21c14420c04420c1446a21c24420c14420c2446a21c34420c24420c3446a21c44420" - "c34420c4446a21c54420c44420c5446a21c64420c54420c6446a21c74420c64420c7446a21c84420c74420c8446a21" - "c94420c84420c9446a21ca4420c94420ca446a21cb4420ca4420cb446a21cc4420cb4420cc446a21cd4420cc4420cd" - "446a21ce4420cd4420ce446a21cf4420ce4420cf446a21d04420cf4420d0446a21d14420d04420d1446a21d24420d1" - "4420d2446a21d34420d24420d3446a21d44420d34420d4446a21d54420d44420d5446a21d64420d54420d6446a21d7" - "4420d64420d7446a21d84420d74420d8446a21d94420d84420d9446a21da4420d94420da446a21db4420da4420db44" - "6a21dc4420db4420dc446a21dd4420dc4420dd446a21de4420dd4420de446a21df4420de4420df446a21e04420df44" - "20e0446a21e14420e04420e1446a21e24420e14420e2446a21e34420e24420e3446a21e44420e34420e4446a21e544" - "20e44420e5446a21e64420e54420e6446a21e74420e64420e7446a21e84420e74420e8446a21e94420e84420e9446a" - "21ea4420e94420ea446a21eb4420ea4420eb446a21ec4420eb4420ec446a21ed4420ec4420ed446a21ee4420ed4420" - "ee446a21ef4420ee4420ef446a21f04420ef4420f0446a21f14420f04420f1446a21f24420f14420f2446a21f34420" - "f24420f3446a21f44420f34420f4446a21f54420f44420f5446a21f64420f54420f6446a21f74420f64420f7446a21" - "f84420f74420f8446a21f94420f84420f9446a21fa4420f94420fa446a21fb4420fa4420fb446a21fc4420fb4420fc" - "446a21fd4420fc4420fd446a21fe4420fd4420fe446a21ff4420fe4420ff446a21804520ff442080456a2181452080" - "452081456a2182452081452082456a2183452082452083456a2184452083452084456a2185452084452085456a2186" - "452085452086456a2187452086452087456a2188452087452088456a2189452088452089456a218a45208945208a45" - "6a218b45208a45208b456a218c45208b45208c456a218d45208c45208d456a218e45208d45208e456a218f45208e45" - "208f456a219045208f452090456a2191452090452091456a2192452091452092456a2193452092452093456a219445" - "2093452094456a2195452094452095456a2196452095452096456a2197452096452097456a2198452097452098456a" - "2199452098452099456a219a45209945209a456a219b45209a45209b456a219c45209b45209c456a219d45209c4520" - "9d456a219e45209d45209e456a219f45209e45209f456a21a045209f4520a0456a21a14520a04520a1456a21a24520" - "a14520a2456a21a34520a24520a3456a21a44520a34520a4456a21a54520a44520a5456a21a64520a54520a6456a21" - "a74520a64520a7456a21a84520a74520a8456a21a94520a84520a9456a21aa4520a94520aa456a21ab4520aa4520ab" - "456a21ac4520ab4520ac456a21ad4520ac4520ad456a21ae4520ad4520ae456a21af4520ae4520af456a21b04520af" - "4520b0456a21b14520b04520b1456a21b24520b14520b2456a21b34520b24520b3456a21b44520b34520b4456a21b5" - "4520b44520b5456a21b64520b54520b6456a21b74520b64520b7456a21b84520b74520b8456a21b94520b84520b945" - "6a21ba4520b94520ba456a21bb4520ba4520bb456a21bc4520bb4520bc456a21bd4520bc4520bd456a21be4520bd45" - "20be456a21bf4520be4520bf456a21c04520bf4520c0456a21c14520c04520c1456a21c24520c14520c2456a21c345" - "20c24520c3456a21c44520c34520c4456a21c54520c44520c5456a21c64520c54520c6456a21c74520c64520c7456a" - "21c84520c74520c8456a21c94520c84520c9456a21ca4520c94520ca456a21cb4520ca4520cb456a21cc4520cb4520" - "cc456a21cd4520cc4520cd456a21ce4520cd4520ce456a21cf4520ce4520cf456a21d04520cf4520d0456a21d14520" - "d04520d1456a21d24520d14520d2456a21d34520d24520d3456a21d44520d34520d4456a21d54520d44520d5456a21" - "d64520d54520d6456a21d74520d64520d7456a21d84520d74520d8456a21d94520d84520d9456a21da4520d94520da" - "456a21db4520da4520db456a21dc4520db4520dc456a21dd4520dc4520dd456a21de4520dd4520de456a21df4520de" - "4520df456a21e04520df4520e0456a21e14520e04520e1456a21e24520e14520e2456a21e34520e24520e3456a21e4" - "4520e34520e4456a21e54520e44520e5456a21e64520e54520e6456a21e74520e64520e7456a21e84520e74520e845" - "6a21e94520e84520e9456a21ea4520e94520ea456a21eb4520ea4520eb456a21ec4520eb4520ec456a21ed4520ec45" - "20ed456a21ee4520ed4520ee456a21ef4520ee4520ef456a21f04520ef4520f0456a21f14520f04520f1456a21f245" - "20f14520f2456a21f34520f24520f3456a21f44520f34520f4456a21f54520f44520f5456a21f64520f54520f6456a" - "21f74520f64520f7456a21f84520f74520f8456a21f94520f84520f9456a21fa4520f94520fa456a21fb4520fa4520" - "fb456a21fc4520fb4520fc456a21fd4520fc4520fd456a21fe4520fd4520fe456a21ff4520fe4520ff456a21804620" - "ff452080466a2181462080462081466a2182462081462082466a2183462082462083466a2184462083462084466a21" - "85462084462085466a2186462085462086466a2187462086462087466a2188462087462088466a2189462088462089" - "466a218a46208946208a466a218b46208a46208b466a218c46208b46208c466a218d46208c46208d466a218e46208d" - "46208e466a218f46208e46208f466a219046208f462090466a2191462090462091466a2192462091462092466a2193" - "462092462093466a2194462093462094466a2195462094462095466a2196462095462096466a219746209646209746" - "6a2198462097462098466a2199462098462099466a219a46209946209a466a219b46209a46209b466a219c46209b46" - "209c466a219d46209c46209d466a219e46209d46209e466a219f46209e46209f466a21a046209f4620a0466a21a146" - "20a04620a1466a21a24620a14620a2466a21a34620a24620a3466a21a44620a34620a4466a21a54620a44620a5466a" - "21a64620a54620a6466a21a74620a64620a7466a21a84620a74620a8466a21a94620a84620a9466a21aa4620a94620" - "aa466a21ab4620aa4620ab466a21ac4620ab4620ac466a21ad4620ac4620ad466a21ae4620ad4620ae466a21af4620" - "ae4620af466a21b04620af4620b0466a21b14620b04620b1466a21b24620b14620b2466a21b34620b24620b3466a21" - "b44620b34620b4466a21b54620b44620b5466a21b64620b54620b6466a21b74620b64620b7466a21b84620b74620b8" - "466a21b94620b84620b9466a21ba4620b94620ba466a21bb4620ba4620bb466a21bc4620bb4620bc466a21bd4620bc" - "4620bd466a21be4620bd4620be466a21bf4620be4620bf466a21c04620bf4620c0466a21c14620c04620c1466a21c2" - "4620c14620c2466a21c34620c24620c3466a21c44620c34620c4466a21c54620c44620c5466a21c64620c54620c646" - "6a21c74620c64620c7466a21c84620c74620c8466a21c94620c84620c9466a21ca4620c94620ca466a21cb4620ca46" - "20cb466a21cc4620cb4620cc466a21cd4620cc4620cd466a21ce4620cd4620ce466a21cf4620ce4620cf466a21d046" - "20cf4620d0466a21d14620d04620d1466a21d24620d14620d2466a21d34620d24620d3466a21d44620d34620d4466a" - "21d54620d44620d5466a21d64620d54620d6466a21d74620d64620d7466a21d84620d74620d8466a21d94620d84620" - "d9466a21da4620d94620da466a21db4620da4620db466a21dc4620db4620dc466a21dd4620dc4620dd466a21de4620" - "dd4620de466a21df4620de4620df466a21e04620df4620e0466a21e14620e04620e1466a21e24620e14620e2466a21" - "e34620e24620e3466a21e44620e34620e4466a21e54620e44620e5466a21e64620e54620e6466a21e74620e64620e7" - "466a21e84620e74620e8466a21e94620e84620e9466a21ea4620e94620ea466a21eb4620ea4620eb466a21ec4620eb" - "4620ec466a21ed4620ec4620ed466a21ee4620ed4620ee466a21ef4620ee4620ef466a21f04620ef4620f0466a21f1" - "4620f04620f1466a21f24620f14620f2466a21f34620f24620f3466a21f44620f34620f4466a21f54620f44620f546" - "6a21f64620f54620f6466a21f74620f64620f7466a21f84620f74620f8466a21f94620f84620f9466a21fa4620f946" - "20fa466a21fb4620fa4620fb466a21fc4620fb4620fc466a21fd4620fc4620fd466a21fe4620fd4620fe466a21ff46" - "20fe4620ff466a21804720ff462080476a2181472080472081476a2182472081472082476a2183472082472083476a" - "2184472083472084476a2185472084472085476a2186472085472086476a2187472086472087476a21884720874720" - "88476a2189472088472089476a218a47208947208a476a218b47208a47208b476a218c47208b47208c476a218d4720" - "8c47208d476a218e47208d47208e476a218f47208e47208f476a219047208f472090476a2191472090472091476a21" - "92472091472092476a2193472092472093476a2194472093472094476a2195472094472095476a2196472095472096" - "476a2197472096472097476a2198472097472098476a2199472098472099476a219a47209947209a476a219b47209a" - "47209b476a219c47209b47209c476a219d47209c47209d476a219e47209d47209e476a219f47209e47209f476a21a0" - "47209f4720a0476a21a14720a04720a1476a21a24720a14720a2476a21a34720a24720a3476a21a44720a34720a447" - "6a21a54720a44720a5476a21a64720a54720a6476a21a74720a64720a7476a21a84720a74720a8476a21a94720a847" - "20a9476a21aa4720a94720aa476a21ab4720aa4720ab476a21ac4720ab4720ac476a21ad4720ac4720ad476a21ae47" - "20ad4720ae476a21af4720ae4720af476a21b04720af4720b0476a21b14720b04720b1476a21b24720b14720b2476a" - "21b34720b24720b3476a21b44720b34720b4476a21b54720b44720b5476a21b64720b54720b6476a21b74720b64720" - "b7476a21b84720b74720b8476a21b94720b84720b9476a21ba4720b94720ba476a21bb4720ba4720bb476a21bc4720" - "bb4720bc476a21bd4720bc4720bd476a21be4720bd4720be476a21bf4720be4720bf476a21c04720bf4720c0476a21" - "c14720c04720c1476a21c24720c14720c2476a21c34720c24720c3476a21c44720c34720c4476a21c54720c44720c5" - "476a21c64720c54720c6476a21c74720c64720c7476a21c84720c74720c8476a21c94720c84720c9476a21ca4720c9" - "4720ca476a21cb4720ca4720cb476a21cc4720cb4720cc476a21cd4720cc4720cd476a21ce4720cd4720ce476a21cf" - "4720ce4720cf476a21d04720cf4720d0476a21d14720d04720d1476a21d24720d14720d2476a21d34720d24720d347" - "6a21d44720d34720d4476a21d54720d44720d5476a21d64720d54720d6476a21d74720d64720d7476a21d84720d747" - "20d8476a21d94720d84720d9476a21da4720d94720da476a21db4720da4720db476a21dc4720db4720dc476a21dd47" - "20dc4720dd476a21de4720dd4720de476a21df4720de4720df476a21e04720df4720e0476a21e14720e04720e1476a" - "21e24720e14720e2476a21e34720e24720e3476a21e44720e34720e4476a21e54720e44720e5476a21e64720e54720" - "e6476a21e74720e64720e7476a21e84720e74720e8476a21e94720e84720e9476a21ea4720e94720ea476a21eb4720" - "ea4720eb476a21ec4720eb4720ec476a21ed4720ec4720ed476a21ee4720ed4720ee476a21ef4720ee4720ef476a21" - "f04720ef4720f0476a21f14720f04720f1476a21f24720f14720f2476a21f34720f24720f3476a21f44720f34720f4" - "476a21f54720f44720f5476a21f64720f54720f6476a21f74720f64720f7476a21f84720f74720f8476a21f94720f8" - "4720f9476a21fa4720f94720fa476a21fb4720fa4720fb476a21fc4720fb4720fc476a21fd4720fc4720fd476a21fe" - "4720fd4720fe476a21ff4720fe4720ff476a21804820ff472080486a2181482080482081486a218248208148208248" - "6a2183482082482083486a2184482083482084486a2185482084482085486a2186482085482086486a218748208648" - "2087486a2188482087482088486a2189482088482089486a218a48208948208a486a218b48208a48208b486a218c48" - "208b48208c486a218d48208c48208d486a218e48208d48208e486a218f48208e48208f486a219048208f482090486a" - "2191482090482091486a2192482091482092486a2193482092482093486a2194482093482094486a21954820944820" - "95486a2196482095482096486a2197482096482097486a2198482097482098486a2199482098482099486a219a4820" - "9948209a486a219b48209a48209b486a219c48209b48209c486a219d48209c48209d486a219e48209d48209e486a21" - "9f48209e48209f486a21a048209f4820a0486a21a14820a04820a1486a21a24820a14820a2486a21a34820a24820a3" - "486a21a44820a34820a4486a21a54820a44820a5486a21a64820a54820a6486a21a74820a64820a7486a21a84820a7" - "4820a8486a21a94820a84820a9486a21aa4820a94820aa486a21ab4820aa4820ab486a21ac4820ab4820ac486a21ad" - "4820ac4820ad486a21ae4820ad4820ae486a21af4820ae4820af486a21b04820af4820b0486a21b14820b04820b148" - "6a21b24820b14820b2486a21b34820b24820b3486a21b44820b34820b4486a21b54820b44820b5486a21b64820b548" - "20b6486a21b74820b64820b7486a21b84820b74820b8486a21b94820b84820b9486a21ba4820b94820ba486a21bb48" - "20ba4820bb486a21bc4820bb4820bc486a21bd4820bc4820bd486a21be4820bd4820be486a21bf4820be4820bf486a" - "21c04820bf4820c0486a21c14820c04820c1486a21c24820c14820c2486a21c34820c24820c3486a21c44820c34820" - "c4486a21c54820c44820c5486a21c64820c54820c6486a21c74820c64820c7486a21c84820c74820c8486a21c94820" - "c84820c9486a21ca4820c94820ca486a21cb4820ca4820cb486a21cc4820cb4820cc486a21cd4820cc4820cd486a21" - "ce4820cd4820ce486a21cf4820ce4820cf486a21d04820cf4820d0486a21d14820d04820d1486a21d24820d14820d2" - "486a21d34820d24820d3486a21d44820d34820d4486a21d54820d44820d5486a21d64820d54820d6486a21d74820d6" - "4820d7486a21d84820d74820d8486a21d94820d84820d9486a21da4820d94820da486a21db4820da4820db486a21dc" - "4820db4820dc486a21dd4820dc4820dd486a21de4820dd4820de486a21df4820de4820df486a21e04820df4820e048" - "6a21e14820e04820e1486a21e24820e14820e2486a21e34820e24820e3486a21e44820e34820e4486a21e54820e448" - "20e5486a21e64820e54820e6486a21e74820e64820e7486a21e84820e74820e8486a21e94820e84820e9486a21ea48" - "20e94820ea486a21eb4820ea4820eb486a21ec4820eb4820ec486a21ed4820ec4820ed486a21ee4820ed4820ee486a" - "21ef4820ee4820ef486a21f04820ef4820f0486a21f14820f04820f1486a21f24820f14820f2486a21f34820f24820" - "f3486a21f44820f34820f4486a21f54820f44820f5486a21f64820f54820f6486a21f74820f64820f7486a21f84820" - "f74820f8486a21f94820f84820f9486a21fa4820f94820fa486a21fb4820fa4820fb486a21fc4820fb4820fc486a21" - "fd4820fc4820fd486a21fe4820fd4820fe486a21ff4820fe4820ff486a21804920ff482080496a2181492080492081" - "496a2182492081492082496a2183492082492083496a2184492083492084496a2185492084492085496a2186492085" - "492086496a2187492086492087496a2188492087492088496a2189492088492089496a218a49208949208a496a218b" - "49208a49208b496a218c49208b49208c496a218d49208c49208d496a218e49208d49208e496a218f49208e49208f49" - "6a219049208f492090496a2191492090492091496a2192492091492092496a2193492092492093496a219449209349" - "2094496a2195492094492095496a2196492095492096496a2197492096492097496a2198492097492098496a219949" - "2098492099496a219a49209949209a496a219b49209a49209b496a219c49209b49209c496a219d49209c49209d496a" - "219e49209d49209e496a219f49209e49209f496a21a049209f4920a0496a21a14920a04920a1496a21a24920a14920" - "a2496a21a34920a24920a3496a21a44920a34920a4496a21a54920a44920a5496a21a64920a54920a6496a21a74920" - "a64920a7496a21a84920a74920a8496a21a94920a84920a9496a21aa4920a94920aa496a21ab4920aa4920ab496a21" - "ac4920ab4920ac496a21ad4920ac4920ad496a21ae4920ad4920ae496a21af4920ae4920af496a21b04920af4920b0" - "496a21b14920b04920b1496a21b24920b14920b2496a21b34920b24920b3496a21b44920b34920b4496a21b54920b4" - "4920b5496a21b64920b54920b6496a21b74920b64920b7496a21b84920b74920b8496a21b94920b84920b9496a21ba" - "4920b94920ba496a21bb4920ba4920bb496a21bc4920bb4920bc496a21bd4920bc4920bd496a21be4920bd4920be49" - "6a21bf4920be4920bf496a21c04920bf4920c0496a21c14920c04920c1496a21c24920c14920c2496a21c34920c249" - "20c3496a21c44920c34920c4496a21c54920c44920c5496a21c64920c54920c6496a21c74920c64920c7496a21c849" - "20c74920c8496a21c94920c84920c9496a21ca4920c94920ca496a21cb4920ca4920cb496a21cc4920cb4920cc496a" - "21cd4920cc4920cd496a21ce4920cd4920ce496a21cf4920ce4920cf496a21d04920cf4920d0496a21d14920d04920" - "d1496a21d24920d14920d2496a21d34920d24920d3496a21d44920d34920d4496a21d54920d44920d5496a21d64920" - "d54920d6496a21d74920d64920d7496a21d84920d74920d8496a21d94920d84920d9496a21da4920d94920da496a21" - "db4920da4920db496a21dc4920db4920dc496a21dd4920dc4920dd496a21de4920dd4920de496a21df4920de4920df" - "496a21e04920df4920e0496a21e14920e04920e1496a21e24920e14920e2496a21e34920e24920e3496a21e44920e3" - "4920e4496a21e54920e44920e5496a21e64920e54920e6496a21e74920e64920e7496a21e84920e74920e8496a21e9" - "4920e84920e9496a21ea4920e94920ea496a21eb4920ea4920eb496a21ec4920eb4920ec496a21ed4920ec4920ed49" - "6a21ee4920ed4920ee496a21ef4920ee4920ef496a21f04920ef4920f0496a21f14920f04920f1496a21f24920f149" - "20f2496a21f34920f24920f3496a21f44920f34920f4496a21f54920f44920f5496a21f64920f54920f6496a21f749" - "20f64920f7496a21f84920f74920f8496a21f94920f84920f9496a21fa4920f94920fa496a21fb4920fa4920fb496a" - "21fc4920fb4920fc496a21fd4920fc4920fd496a21fe4920fd4920fe496a21ff4920fe4920ff496a21804a20ff4920" - "804a6a21814a20804a20814a6a21824a20814a20824a6a21834a20824a20834a6a21844a20834a20844a6a21854a20" - "844a20854a6a21864a20854a20864a6a21874a20864a20874a6a21884a20874a20884a6a21894a20884a20894a6a21" - "8a4a20894a208a4a6a218b4a208a4a208b4a6a218c4a208b4a208c4a6a218d4a208c4a208d4a6a218e4a208d4a208e" - "4a6a218f4a208e4a208f4a6a21904a208f4a20904a6a21914a20904a20914a6a21924a20914a20924a6a21934a2092" - "4a20934a6a21944a20934a20944a6a21954a20944a20954a6a21964a20954a20964a6a21974a20964a20974a6a2198" - "4a20974a20984a6a21994a20984a20994a6a219a4a20994a209a4a6a219b4a209a4a209b4a6a219c4a209b4a209c4a" - "6a219d4a209c4a209d4a6a219e4a209d4a209e4a6a219f4a209e4a209f4a6a21a04a209f4a20a04a6a21a14a20a04a" - "20a14a6a21a24a20a14a20a24a6a21a34a20a24a20a34a6a21a44a20a34a20a44a6a21a54a20a44a20a54a6a21a64a" - "20a54a20a64a6a21a74a20a64a20a74a6a21a84a20a74a20a84a6a21a94a20a84a20a94a6a21aa4a20a94a20aa4a6a" - "21ab4a20aa4a20ab4a6a21ac4a20ab4a20ac4a6a21ad4a20ac4a20ad4a6a21ae4a20ad4a20ae4a6a21af4a20ae4a20" - "af4a6a21b04a20af4a20b04a6a21b14a20b04a20b14a6a21b24a20b14a20b24a6a21b34a20b24a20b34a6a21b44a20" - "b34a20b44a6a21b54a20b44a20b54a6a21b64a20b54a20b64a6a21b74a20b64a20b74a6a21b84a20b74a20b84a6a21" - "b94a20b84a20b94a6a21ba4a20b94a20ba4a6a21bb4a20ba4a20bb4a6a21bc4a20bb4a20bc4a6a21bd4a20bc4a20bd" - "4a6a21be4a20bd4a20be4a6a21bf4a20be4a20bf4a6a21c04a20bf4a20c04a6a21c14a20c04a20c14a6a21c24a20c1" - "4a20c24a6a21c34a20c24a20c34a6a21c44a20c34a20c44a6a21c54a20c44a20c54a6a21c64a20c54a20c64a6a21c7" - "4a20c64a20c74a6a21c84a20c74a20c84a6a21c94a20c84a20c94a6a21ca4a20c94a20ca4a6a21cb4a20ca4a20cb4a" - "6a21cc4a20cb4a20cc4a6a21cd4a20cc4a20cd4a6a21ce4a20cd4a20ce4a6a21cf4a20ce4a20cf4a6a21d04a20cf4a" - "20d04a6a21d14a20d04a20d14a6a21d24a20d14a20d24a6a21d34a20d24a20d34a6a21d44a20d34a20d44a6a21d54a" - "20d44a20d54a6a21d64a20d54a20d64a6a21d74a20d64a20d74a6a21d84a20d74a20d84a6a21d94a20d84a20d94a6a" - "21da4a20d94a20da4a6a21db4a20da4a20db4a6a21dc4a20db4a20dc4a6a21dd4a20dc4a20dd4a6a21de4a20dd4a20" - "de4a6a21df4a20de4a20df4a6a21e04a20df4a20e04a6a21e14a20e04a20e14a6a21e24a20e14a20e24a6a21e34a20" - "e24a20e34a6a21e44a20e34a20e44a6a21e54a20e44a20e54a6a21e64a20e54a20e64a6a21e74a20e64a20e74a6a21" - "e84a20e74a20e84a6a21e94a20e84a20e94a6a21ea4a20e94a20ea4a6a21eb4a20ea4a20eb4a6a21ec4a20eb4a20ec" - "4a6a21ed4a20ec4a20ed4a6a21ee4a20ed4a20ee4a6a21ef4a20ee4a20ef4a6a21f04a20ef4a20f04a6a21f14a20f0" - "4a20f14a6a21f24a20f14a20f24a6a21f34a20f24a20f34a6a21f44a20f34a20f44a6a21f54a20f44a20f54a6a21f6" - "4a20f54a20f64a6a21f74a20f64a20f74a6a21f84a20f74a20f84a6a21f94a20f84a20f94a6a21fa4a20f94a20fa4a" - "6a21fb4a20fa4a20fb4a6a21fc4a20fb4a20fc4a6a21fd4a20fc4a20fd4a6a21fe4a20fd4a20fe4a6a21ff4a20fe4a" - "20ff4a6a21804b20ff4a20804b6a21814b20804b20814b6a21824b20814b20824b6a21834b20824b20834b6a21844b" - "20834b20844b6a21854b20844b20854b6a21864b20854b20864b6a21874b20864b20874b6a21884b20874b20884b6a" - "21894b20884b20894b6a218a4b20894b208a4b6a218b4b208a4b208b4b6a218c4b208b4b208c4b6a218d4b208c4b20" - "8d4b6a218e4b208d4b208e4b6a218f4b208e4b208f4b6a21904b208f4b20904b6a21914b20904b20914b6a21924b20" - "914b20924b6a21934b20924b20934b6a21944b20934b20944b6a21954b20944b20954b6a21964b20954b20964b6a21" - "974b20964b20974b6a21984b20974b20984b6a21994b20984b20994b6a219a4b20994b209a4b6a219b4b209a4b209b" - "4b6a219c4b209b4b209c4b6a219d4b209c4b209d4b6a219e4b209d4b209e4b6a219f4b209e4b209f4b6a21a04b209f" - "4b20a04b6a21a14b20a04b20a14b6a21a24b20a14b20a24b6a21a34b20a24b20a34b6a21a44b20a34b20a44b6a21a5" - "4b20a44b20a54b6a21a64b20a54b20a64b6a21a74b20a64b20a74b6a21a84b20a74b20a84b6a21a94b20a84b20a94b" - "6a21aa4b20a94b20aa4b6a21ab4b20aa4b20ab4b6a21ac4b20ab4b20ac4b6a21ad4b20ac4b20ad4b6a21ae4b20ad4b" - "20ae4b6a21af4b20ae4b20af4b6a21b04b20af4b20b04b6a21b14b20b04b20b14b6a21b24b20b14b20b24b6a21b34b" - "20b24b20b34b6a21b44b20b34b20b44b6a21b54b20b44b20b54b6a21b64b20b54b20b64b6a21b74b20b64b20b74b6a" - "21b84b20b74b20b84b6a21b94b20b84b20b94b6a21ba4b20b94b20ba4b6a21bb4b20ba4b20bb4b6a21bc4b20bb4b20" - "bc4b6a21bd4b20bc4b20bd4b6a21be4b20bd4b20be4b6a21bf4b20be4b20bf4b6a21c04b20bf4b20c04b6a21c14b20" - "c04b20c14b6a21c24b20c14b20c24b6a21c34b20c24b20c34b6a21c44b20c34b20c44b6a21c54b20c44b20c54b6a21" - "c64b20c54b20c64b6a21c74b20c64b20c74b6a21c84b20c74b20c84b6a21c94b20c84b20c94b6a21ca4b20c94b20ca" - "4b6a21cb4b20ca4b20cb4b6a21cc4b20cb4b20cc4b6a21cd4b20cc4b20cd4b6a21ce4b20cd4b20ce4b6a21cf4b20ce" - "4b20cf4b6a21d04b20cf4b20d04b6a21d14b20d04b20d14b6a21d24b20d14b20d24b6a21d34b20d24b20d34b6a21d4" - "4b20d34b20d44b6a21d54b20d44b20d54b6a21d64b20d54b20d64b6a21d74b20d64b20d74b6a21d84b20d74b20d84b" - "6a21d94b20d84b20d94b6a21da4b20d94b20da4b6a21db4b20da4b20db4b6a21dc4b20db4b20dc4b6a21dd4b20dc4b" - "20dd4b6a21de4b20dd4b20de4b6a21df4b20de4b20df4b6a21e04b20df4b20e04b6a21e14b20e04b20e14b6a21e24b" - "20e14b20e24b6a21e34b20e24b20e34b6a21e44b20e34b20e44b6a21e54b20e44b20e54b6a21e64b20e54b20e64b6a" - "21e74b20e64b20e74b6a21e84b20e74b20e84b6a21e94b20e84b20e94b6a21ea4b20e94b20ea4b6a21eb4b20ea4b20" - "eb4b6a21ec4b20eb4b20ec4b6a21ed4b20ec4b20ed4b6a21ee4b20ed4b20ee4b6a21ef4b20ee4b20ef4b6a21f04b20" - "ef4b20f04b6a21f14b20f04b20f14b6a21f24b20f14b20f24b6a21f34b20f24b20f34b6a21f44b20f34b20f44b6a21" - "f54b20f44b20f54b6a21f64b20f54b20f64b6a21f74b20f64b20f74b6a21f84b20f74b20f84b6a21f94b20f84b20f9" - "4b6a21fa4b20f94b20fa4b6a21fb4b20fa4b20fb4b6a21fc4b20fb4b20fc4b6a21fd4b20fc4b20fd4b6a21fe4b20fd" - "4b20fe4b6a21ff4b20fe4b20ff4b6a21804c20ff4b20804c6a21814c20804c20814c6a21824c20814c20824c6a2183" - "4c20824c20834c6a21844c20834c20844c6a21854c20844c20854c6a21864c20854c20864c6a21874c20864c20874c" - "6a21884c20874c20884c6a21894c20884c20894c6a218a4c20894c208a4c6a218b4c208a4c208b4c6a218c4c208b4c" - "208c4c6a218d4c208c4c208d4c6a218e4c208d4c208e4c6a218f4c208e4c208f4c6a21904c208f4c20904c6a21914c" - "20904c20914c6a21924c20914c20924c6a21934c20924c20934c6a21944c20934c20944c6a21954c20944c20954c6a" - "21964c20954c20964c6a21974c20964c20974c6a21984c20974c20984c6a21994c20984c20994c6a219a4c20994c20" - "9a4c6a219b4c209a4c209b4c6a219c4c209b4c209c4c6a219d4c209c4c209d4c6a219e4c209d4c209e4c6a219f4c20" - "9e4c209f4c6a21a04c209f4c20a04c6a21a14c20a04c20a14c6a21a24c20a14c20a24c6a21a34c20a24c20a34c6a21" - "a44c20a34c20a44c6a21a54c20a44c20a54c6a21a64c20a54c20a64c6a21a74c20a64c20a74c6a21a84c20a74c20a8" - "4c6a21a94c20a84c20a94c6a21aa4c20a94c20aa4c6a21ab4c20aa4c20ab4c6a21ac4c20ab4c20ac4c6a21ad4c20ac" - "4c20ad4c6a21ae4c20ad4c20ae4c6a21af4c20ae4c20af4c6a21b04c20af4c20b04c6a21b14c20b04c20b14c6a21b2" - "4c20b14c20b24c6a21b34c20b24c20b34c6a21b44c20b34c20b44c6a21b54c20b44c20b54c6a21b64c20b54c20b64c" - "6a21b74c20b64c20b74c6a21b84c20b74c20b84c6a21b94c20b84c20b94c6a21ba4c20b94c20ba4c6a21bb4c20ba4c" - "20bb4c6a21bc4c20bb4c20bc4c6a21bd4c20bc4c20bd4c6a21be4c20bd4c20be4c6a21bf4c20be4c20bf4c6a21c04c" - "20bf4c20c04c6a21c14c20c04c20c14c6a21c24c20c14c20c24c6a21c34c20c24c20c34c6a21c44c20c34c20c44c6a" - "21c54c20c44c20c54c6a21c64c20c54c20c64c6a21c74c20c64c20c74c6a21c84c20c74c20c84c6a21c94c20c84c20" - "c94c6a21ca4c20c94c20ca4c6a21cb4c20ca4c20cb4c6a21cc4c20cb4c20cc4c6a21cd4c20cc4c20cd4c6a21ce4c20" - "cd4c20ce4c6a21cf4c20ce4c20cf4c6a21d04c20cf4c20d04c6a21d14c20d04c20d14c6a21d24c20d14c20d24c6a21" - "d34c20d24c20d34c6a21d44c20d34c20d44c6a21d54c20d44c20d54c6a21d64c20d54c20d64c6a21d74c20d64c20d7" - "4c6a21d84c20d74c20d84c6a21d94c20d84c20d94c6a21da4c20d94c20da4c6a21db4c20da4c20db4c6a21dc4c20db" - "4c20dc4c6a21dd4c20dc4c20dd4c6a21de4c20dd4c20de4c6a21df4c20de4c20df4c6a21e04c20df4c20e04c6a21e1" - "4c20e04c20e14c6a21e24c20e14c20e24c6a21e34c20e24c20e34c6a21e44c20e34c20e44c6a21e54c20e44c20e54c" - "6a21e64c20e54c20e64c6a21e74c20e64c20e74c6a21e84c20e74c20e84c6a21e94c20e84c20e94c6a21ea4c20e94c" - "20ea4c6a21eb4c20ea4c20eb4c6a21ec4c20eb4c20ec4c6a21ed4c20ec4c20ed4c6a21ee4c20ed4c20ee4c6a21ef4c" - "20ee4c20ef4c6a21f04c20ef4c20f04c6a21f14c20f04c20f14c6a21f24c20f14c20f24c6a21f34c20f24c20f34c6a" - "21f44c20f34c20f44c6a21f54c20f44c20f54c6a21f64c20f54c20f64c6a21f74c20f64c20f74c6a21f84c20f74c20" - "f84c6a21f94c20f84c20f94c6a21fa4c20f94c20fa4c6a21fb4c20fa4c20fb4c6a21fc4c20fb4c20fc4c6a21fd4c20" - "fc4c20fd4c6a21fe4c20fd4c20fe4c6a21ff4c20fe4c20ff4c6a21804d20ff4c20804d6a21814d20804d20814d6a21" - "824d20814d20824d6a21834d20824d20834d6a21844d20834d20844d6a21854d20844d20854d6a21864d20854d2086" - "4d6a21874d20864d20874d6a21884d20874d20884d6a21894d20884d20894d6a218a4d20894d208a4d6a218b4d208a" - "4d208b4d6a218c4d208b4d208c4d6a218d4d208c4d208d4d6a218e4d208d4d208e4d6a218f4d208e4d208f4d6a2190" - "4d208f4d20904d6a21914d20904d20914d6a21924d20914d20924d6a21934d20924d20934d6a21944d20934d20944d" - "6a21954d20944d20954d6a21964d20954d20964d6a21974d20964d20974d6a21984d20974d20984d6a21994d20984d" - "20994d6a219a4d20994d209a4d6a219b4d209a4d209b4d6a219c4d209b4d209c4d6a219d4d209c4d209d4d6a219e4d" - "209d4d209e4d6a219f4d209e4d209f4d6a21a04d209f4d20a04d6a21a14d20a04d20a14d6a21a24d20a14d20a24d6a" - "21a34d20a24d20a34d6a21a44d20a34d20a44d6a21a54d20a44d20a54d6a21a64d20a54d20a64d6a21a74d20a64d20" - "a74d6a21a84d20a74d20a84d6a21a94d20a84d20a94d6a21aa4d20a94d20aa4d6a21ab4d20aa4d20ab4d6a21ac4d20" - "ab4d20ac4d6a21ad4d20ac4d20ad4d6a21ae4d20ad4d20ae4d6a21af4d20ae4d20af4d6a21b04d20af4d20b04d6a21" - "b14d20b04d20b14d6a21b24d20b14d20b24d6a21b34d20b24d20b34d6a21b44d20b34d20b44d6a21b54d20b44d20b5" - "4d6a21b64d20b54d20b64d6a21b74d20b64d20b74d6a21b84d20b74d20b84d6a21b94d20b84d20b94d6a21ba4d20b9" - "4d20ba4d6a21bb4d20ba4d20bb4d6a21bc4d20bb4d20bc4d6a21bd4d20bc4d20bd4d6a21be4d20bd4d20be4d6a21bf" - "4d20be4d20bf4d6a21c04d20bf4d20c04d6a21c14d20c04d20c14d6a21c24d20c14d20c24d6a21c34d20c24d20c34d" - "6a21c44d20c34d20c44d6a21c54d20c44d20c54d6a21c64d20c54d20c64d6a21c74d20c64d20c74d6a21c84d20c74d" - "20c84d6a21c94d20c84d20c94d6a21ca4d20c94d20ca4d6a21cb4d20ca4d20cb4d6a21cc4d20cb4d20cc4d6a21cd4d" - "20cc4d20cd4d6a21ce4d20cd4d20ce4d6a21cf4d20ce4d20cf4d6a21d04d20cf4d20d04d6a21d14d20d04d20d14d6a" - "21d24d20d14d20d24d6a21d34d20d24d20d34d6a21d44d20d34d20d44d6a21d54d20d44d20d54d6a21d64d20d54d20" - "d64d6a21d74d20d64d20d74d6a21d84d20d74d20d84d6a21d94d20d84d20d94d6a21da4d20d94d20da4d6a21db4d20" - "da4d20db4d6a21dc4d20db4d20dc4d6a21dd4d20dc4d20dd4d6a21de4d20dd4d20de4d6a21df4d20de4d20df4d6a21" - "e04d20df4d20e04d6a21e14d20e04d20e14d6a21e24d20e14d20e24d6a21e34d20e24d20e34d6a21e44d20e34d20e4" - "4d6a21e54d20e44d20e54d6a21e64d20e54d20e64d6a21e74d20e64d20e74d6a21e84d20e74d20e84d6a21e94d20e8" - "4d20e94d6a21ea4d20e94d20ea4d6a21eb4d20ea4d20eb4d6a21ec4d20eb4d20ec4d6a21ed4d20ec4d20ed4d6a21ee" - "4d20ed4d20ee4d6a21ef4d20ee4d20ef4d6a21f04d20ef4d20f04d6a21f14d20f04d20f14d6a21f24d20f14d20f24d" - "6a21f34d20f24d20f34d6a21f44d20f34d20f44d6a21f54d20f44d20f54d6a21f64d20f54d20f64d6a21f74d20f64d" - "20f74d6a21f84d20f74d20f84d6a21f94d20f84d20f94d6a21fa4d20f94d20fa4d6a21fb4d20fa4d20fb4d6a21fc4d" - "20fb4d20fc4d6a21fd4d20fc4d20fd4d6a21fe4d20fd4d20fe4d6a21ff4d20fe4d20ff4d6a21804e20ff4d20804e6a" - "21814e20804e20814e6a21824e20814e20824e6a21834e20824e20834e6a21844e20834e20844e6a21854e20844e20" - "854e6a21864e20854e20864e6a21874e20864e20874e6a21884e20874e20884e6a21894e20884e20894e6a218a4e20" - "894e208a4e6a218b4e208a4e208b4e6a218c4e208b4e208c4e6a218d4e208c4e208d4e6a218e4e208d4e208e4e6a21" - "8f4e208f4e0b"; - -extern std::string const functions5kHex = - "0061736d0100000001070160027f7f017f038a27882700000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000007e2d303882708" - "7465737430303030000008746573743030303100010874657374303030320002087465737430303033000308746573" - "7430303034000408746573743030303500050874657374303030360006087465737430303037000708746573743030" - "303800080874657374303030390009087465737430303130000a087465737430303131000b08746573743030313200" - "0c087465737430303133000d087465737430303134000e087465737430303135000f08746573743030313600100874" - "6573743030313700110874657374303031380012087465737430303139001308746573743030323000140874657374" - "3030323100150874657374303032320016087465737430303233001708746573743030323400180874657374303032" - "350019087465737430303236001a087465737430303237001b087465737430303238001c087465737430303239001d" - "087465737430303330001e087465737430303331001f08746573743030333200200874657374303033330021087465" - "7374303033340022087465737430303335002308746573743030333600240874657374303033370025087465737430" - "3033380026087465737430303339002708746573743030343000280874657374303034310029087465737430303432" - "002a087465737430303433002b087465737430303434002c087465737430303435002d087465737430303436002e08" - "7465737430303437002f08746573743030343800300874657374303034390031087465737430303530003208746573" - "7430303531003308746573743030353200340874657374303035330035087465737430303534003608746573743030" - "3535003708746573743030353600380874657374303035370039087465737430303538003a08746573743030353900" - "3b087465737430303630003c087465737430303631003d087465737430303632003e087465737430303633003f0874" - "6573743030363400400874657374303036350041087465737430303636004208746573743030363700430874657374" - "3030363800440874657374303036390045087465737430303730004608746573743030373100470874657374303037" - "3200480874657374303037330049087465737430303734004a087465737430303735004b087465737430303736004c" - "087465737430303737004d087465737430303738004e087465737430303739004f0874657374303038300050087465" - "7374303038310051087465737430303832005208746573743030383300530874657374303038340054087465737430" - "3038350055087465737430303836005608746573743030383700570874657374303038380058087465737430303839" - "0059087465737430303930005a087465737430303931005b087465737430303932005c087465737430303933005d08" - "7465737430303934005e087465737430303935005f0874657374303039360060087465737430303937006108746573" - "7430303938006208746573743030393900630874657374303130300064087465737430313031006508746573743031" - "3032006608746573743031303300670874657374303130340068087465737430313035006908746573743031303600" - "6a087465737430313037006b087465737430313038006c087465737430313039006d087465737430313130006e0874" - "65737430313131006f0874657374303131320070087465737430313133007108746573743031313400720874657374" - "3031313500730874657374303131360074087465737430313137007508746573743031313800760874657374303131" - "39007708746573743031323000780874657374303132310079087465737430313232007a087465737430313233007b" - "087465737430313234007c087465737430313235007d087465737430313236007e087465737430313237007f087465" - "7374303132380080010874657374303132390081010874657374303133300082010874657374303133310083010874" - "6573743031333200840108746573743031333300850108746573743031333400860108746573743031333500870108" - "7465737430313336008801087465737430313337008901087465737430313338008a01087465737430313339008b01" - "087465737430313430008c01087465737430313431008d01087465737430313432008e01087465737430313433008f" - "0108746573743031343400900108746573743031343500910108746573743031343600920108746573743031343700" - "9301087465737430313438009401087465737430313439009501087465737430313530009601087465737430313531" - "009701087465737430313532009801087465737430313533009901087465737430313534009a010874657374303135" - "35009b01087465737430313536009c01087465737430313537009d01087465737430313538009e0108746573743031" - "3539009f0108746573743031363000a00108746573743031363100a10108746573743031363200a201087465737430" - "31363300a30108746573743031363400a40108746573743031363500a50108746573743031363600a6010874657374" - "3031363700a70108746573743031363800a80108746573743031363900a90108746573743031373000aa0108746573" - "743031373100ab0108746573743031373200ac0108746573743031373300ad0108746573743031373400ae01087465" - "73743031373500af0108746573743031373600b00108746573743031373700b10108746573743031373800b2010874" - "6573743031373900b30108746573743031383000b40108746573743031383100b50108746573743031383200b60108" - "746573743031383300b70108746573743031383400b80108746573743031383500b90108746573743031383600ba01" - "08746573743031383700bb0108746573743031383800bc0108746573743031383900bd0108746573743031393000be" - "0108746573743031393100bf0108746573743031393200c00108746573743031393300c10108746573743031393400" - "c20108746573743031393500c30108746573743031393600c40108746573743031393700c501087465737430313938" - "00c60108746573743031393900c70108746573743032303000c80108746573743032303100c9010874657374303230" - "3200ca0108746573743032303300cb0108746573743032303400cc0108746573743032303500cd0108746573743032" - "303600ce0108746573743032303700cf0108746573743032303800d00108746573743032303900d101087465737430" - "32313000d20108746573743032313100d30108746573743032313200d40108746573743032313300d5010874657374" - "3032313400d60108746573743032313500d70108746573743032313600d80108746573743032313700d90108746573" - "743032313800da0108746573743032313900db0108746573743032323000dc0108746573743032323100dd01087465" - "73743032323200de0108746573743032323300df0108746573743032323400e00108746573743032323500e1010874" - "6573743032323600e20108746573743032323700e30108746573743032323800e40108746573743032323900e50108" - "746573743032333000e60108746573743032333100e70108746573743032333200e80108746573743032333300e901" - "08746573743032333400ea0108746573743032333500eb0108746573743032333600ec0108746573743032333700ed" - "0108746573743032333800ee0108746573743032333900ef0108746573743032343000f00108746573743032343100" - "f10108746573743032343200f20108746573743032343300f30108746573743032343400f401087465737430323435" - "00f50108746573743032343600f60108746573743032343700f70108746573743032343800f8010874657374303234" - "3900f90108746573743032353000fa0108746573743032353100fb0108746573743032353200fc0108746573743032" - "353300fd0108746573743032353400fe0108746573743032353500ff01087465737430323536008002087465737430" - "3235370081020874657374303235380082020874657374303235390083020874657374303236300084020874657374" - "3032363100850208746573743032363200860208746573743032363300870208746573743032363400880208746573" - "7430323635008902087465737430323636008a02087465737430323637008b02087465737430323638008c02087465" - "737430323639008d02087465737430323730008e02087465737430323731008f020874657374303237320090020874" - "6573743032373300910208746573743032373400920208746573743032373500930208746573743032373600940208" - "7465737430323737009502087465737430323738009602087465737430323739009702087465737430323830009802" - "087465737430323831009902087465737430323832009a02087465737430323833009b02087465737430323834009c" - "02087465737430323835009d02087465737430323836009e02087465737430323837009f0208746573743032383800" - "a00208746573743032383900a10208746573743032393000a20208746573743032393100a302087465737430323932" - "00a40208746573743032393300a50208746573743032393400a60208746573743032393500a7020874657374303239" - "3600a80208746573743032393700a90208746573743032393800aa0208746573743032393900ab0208746573743033" - "303000ac0208746573743033303100ad0208746573743033303200ae0208746573743033303300af02087465737430" - "33303400b00208746573743033303500b10208746573743033303600b20208746573743033303700b3020874657374" - "3033303800b40208746573743033303900b50208746573743033313000b60208746573743033313100b70208746573" - "743033313200b80208746573743033313300b90208746573743033313400ba0208746573743033313500bb02087465" - "73743033313600bc0208746573743033313700bd0208746573743033313800be0208746573743033313900bf020874" - "6573743033323000c00208746573743033323100c10208746573743033323200c20208746573743033323300c30208" - "746573743033323400c40208746573743033323500c50208746573743033323600c60208746573743033323700c702" - "08746573743033323800c80208746573743033323900c90208746573743033333000ca0208746573743033333100cb" - "0208746573743033333200cc0208746573743033333300cd0208746573743033333400ce0208746573743033333500" - "cf0208746573743033333600d00208746573743033333700d10208746573743033333800d202087465737430333339" - "00d30208746573743033343000d40208746573743033343100d50208746573743033343200d6020874657374303334" - "3300d70208746573743033343400d80208746573743033343500d90208746573743033343600da0208746573743033" - "343700db0208746573743033343800dc0208746573743033343900dd0208746573743033353000de02087465737430" - "33353100df0208746573743033353200e00208746573743033353300e10208746573743033353400e2020874657374" - "3033353500e30208746573743033353600e40208746573743033353700e50208746573743033353800e60208746573" - "743033353900e70208746573743033363000e80208746573743033363100e90208746573743033363200ea02087465" - "73743033363300eb0208746573743033363400ec0208746573743033363500ed0208746573743033363600ee020874" - "6573743033363700ef0208746573743033363800f00208746573743033363900f10208746573743033373000f20208" - "746573743033373100f30208746573743033373200f40208746573743033373300f50208746573743033373400f602" - "08746573743033373500f70208746573743033373600f80208746573743033373700f90208746573743033373800fa" - "0208746573743033373900fb0208746573743033383000fc0208746573743033383100fd0208746573743033383200" - "fe0208746573743033383300ff02087465737430333834008003087465737430333835008103087465737430333836" - "0082030874657374303338370083030874657374303338380084030874657374303338390085030874657374303339" - "3000860308746573743033393100870308746573743033393200880308746573743033393300890308746573743033" - "3934008a03087465737430333935008b03087465737430333936008c03087465737430333937008d03087465737430" - "333938008e03087465737430333939008f030874657374303430300090030874657374303430310091030874657374" - "3034303200920308746573743034303300930308746573743034303400940308746573743034303500950308746573" - "7430343036009603087465737430343037009703087465737430343038009803087465737430343039009903087465" - "737430343130009a03087465737430343131009b03087465737430343132009c03087465737430343133009d030874" - "65737430343134009e03087465737430343135009f0308746573743034313600a00308746573743034313700a10308" - "746573743034313800a20308746573743034313900a30308746573743034323000a40308746573743034323100a503" - "08746573743034323200a60308746573743034323300a70308746573743034323400a80308746573743034323500a9" - "0308746573743034323600aa0308746573743034323700ab0308746573743034323800ac0308746573743034323900" - "ad0308746573743034333000ae0308746573743034333100af0308746573743034333200b003087465737430343333" - "00b10308746573743034333400b20308746573743034333500b30308746573743034333600b4030874657374303433" - "3700b50308746573743034333800b60308746573743034333900b70308746573743034343000b80308746573743034" - "343100b90308746573743034343200ba0308746573743034343300bb0308746573743034343400bc03087465737430" - "34343500bd0308746573743034343600be0308746573743034343700bf0308746573743034343800c0030874657374" - "3034343900c10308746573743034353000c20308746573743034353100c30308746573743034353200c40308746573" - "743034353300c50308746573743034353400c60308746573743034353500c70308746573743034353600c803087465" - "73743034353700c90308746573743034353800ca0308746573743034353900cb0308746573743034363000cc030874" - "6573743034363100cd0308746573743034363200ce0308746573743034363300cf0308746573743034363400d00308" - "746573743034363500d10308746573743034363600d20308746573743034363700d30308746573743034363800d403" - "08746573743034363900d50308746573743034373000d60308746573743034373100d70308746573743034373200d8" - "0308746573743034373300d90308746573743034373400da0308746573743034373500db0308746573743034373600" - "dc0308746573743034373700dd0308746573743034373800de0308746573743034373900df03087465737430343830" - "00e00308746573743034383100e10308746573743034383200e20308746573743034383300e3030874657374303438" - "3400e40308746573743034383500e50308746573743034383600e60308746573743034383700e70308746573743034" - "383800e80308746573743034383900e90308746573743034393000ea0308746573743034393100eb03087465737430" - "34393200ec0308746573743034393300ed0308746573743034393400ee0308746573743034393500ef030874657374" - "3034393600f00308746573743034393700f10308746573743034393800f20308746573743034393900f30308746573" - "743035303000f40308746573743035303100f50308746573743035303200f60308746573743035303300f703087465" - "73743035303400f80308746573743035303500f90308746573743035303600fa0308746573743035303700fb030874" - "6573743035303800fc0308746573743035303900fd0308746573743035313000fe0308746573743035313100ff0308" - "7465737430353132008004087465737430353133008104087465737430353134008204087465737430353135008304" - "0874657374303531360084040874657374303531370085040874657374303531380086040874657374303531390087" - "04087465737430353230008804087465737430353231008904087465737430353232008a0408746573743035323300" - "8b04087465737430353234008c04087465737430353235008d04087465737430353236008e04087465737430353237" - "008f040874657374303532380090040874657374303532390091040874657374303533300092040874657374303533" - "3100930408746573743035333200940408746573743035333300950408746573743035333400960408746573743035" - "3335009704087465737430353336009804087465737430353337009904087465737430353338009a04087465737430" - "353339009b04087465737430353430009c04087465737430353431009d04087465737430353432009e040874657374" - "30353433009f0408746573743035343400a00408746573743035343500a10408746573743035343600a20408746573" - "743035343700a30408746573743035343800a40408746573743035343900a50408746573743035353000a604087465" - "73743035353100a70408746573743035353200a80408746573743035353300a90408746573743035353400aa040874" - "6573743035353500ab0408746573743035353600ac0408746573743035353700ad0408746573743035353800ae0408" - "746573743035353900af0408746573743035363000b00408746573743035363100b10408746573743035363200b204" - "08746573743035363300b30408746573743035363400b40408746573743035363500b50408746573743035363600b6" - "0408746573743035363700b70408746573743035363800b80408746573743035363900b90408746573743035373000" - "ba0408746573743035373100bb0408746573743035373200bc0408746573743035373300bd04087465737430353734" - "00be0408746573743035373500bf0408746573743035373600c00408746573743035373700c1040874657374303537" - "3800c20408746573743035373900c30408746573743035383000c40408746573743035383100c50408746573743035" - "383200c60408746573743035383300c70408746573743035383400c80408746573743035383500c904087465737430" - "35383600ca0408746573743035383700cb0408746573743035383800cc0408746573743035383900cd040874657374" - "3035393000ce0408746573743035393100cf0408746573743035393200d00408746573743035393300d10408746573" - "743035393400d20408746573743035393500d30408746573743035393600d40408746573743035393700d504087465" - "73743035393800d60408746573743035393900d70408746573743036303000d80408746573743036303100d9040874" - "6573743036303200da0408746573743036303300db0408746573743036303400dc0408746573743036303500dd0408" - "746573743036303600de0408746573743036303700df0408746573743036303800e00408746573743036303900e104" - "08746573743036313000e20408746573743036313100e30408746573743036313200e40408746573743036313300e5" - "0408746573743036313400e60408746573743036313500e70408746573743036313600e80408746573743036313700" - "e90408746573743036313800ea0408746573743036313900eb0408746573743036323000ec04087465737430363231" - "00ed0408746573743036323200ee0408746573743036323300ef0408746573743036323400f0040874657374303632" - "3500f10408746573743036323600f20408746573743036323700f30408746573743036323800f40408746573743036" - "323900f50408746573743036333000f60408746573743036333100f70408746573743036333200f804087465737430" - "36333300f90408746573743036333400fa0408746573743036333500fb0408746573743036333600fc040874657374" - "3036333700fd0408746573743036333800fe0408746573743036333900ff0408746573743036343000800508746573" - "7430363431008105087465737430363432008205087465737430363433008305087465737430363434008405087465" - "7374303634350085050874657374303634360086050874657374303634370087050874657374303634380088050874" - "65737430363439008905087465737430363530008a05087465737430363531008b05087465737430363532008c0508" - "7465737430363533008d05087465737430363534008e05087465737430363535008f05087465737430363536009005" - "0874657374303635370091050874657374303635380092050874657374303635390093050874657374303636300094" - "0508746573743036363100950508746573743036363200960508746573743036363300970508746573743036363400" - "9805087465737430363635009905087465737430363636009a05087465737430363637009b05087465737430363638" - "009c05087465737430363639009d05087465737430363730009e05087465737430363731009f050874657374303637" - "3200a00508746573743036373300a10508746573743036373400a20508746573743036373500a30508746573743036" - "373600a40508746573743036373700a50508746573743036373800a60508746573743036373900a705087465737430" - "36383000a80508746573743036383100a90508746573743036383200aa0508746573743036383300ab050874657374" - "3036383400ac0508746573743036383500ad0508746573743036383600ae0508746573743036383700af0508746573" - "743036383800b00508746573743036383900b10508746573743036393000b20508746573743036393100b305087465" - "73743036393200b40508746573743036393300b50508746573743036393400b60508746573743036393500b7050874" - "6573743036393600b80508746573743036393700b90508746573743036393800ba0508746573743036393900bb0508" - "746573743037303000bc0508746573743037303100bd0508746573743037303200be0508746573743037303300bf05" - "08746573743037303400c00508746573743037303500c10508746573743037303600c20508746573743037303700c3" - "0508746573743037303800c40508746573743037303900c50508746573743037313000c60508746573743037313100" - "c70508746573743037313200c80508746573743037313300c90508746573743037313400ca05087465737430373135" - "00cb0508746573743037313600cc0508746573743037313700cd0508746573743037313800ce050874657374303731" - "3900cf0508746573743037323000d00508746573743037323100d10508746573743037323200d20508746573743037" - "323300d30508746573743037323400d40508746573743037323500d50508746573743037323600d605087465737430" - "37323700d70508746573743037323800d80508746573743037323900d90508746573743037333000da050874657374" - "3037333100db0508746573743037333200dc0508746573743037333300dd0508746573743037333400de0508746573" - "743037333500df0508746573743037333600e00508746573743037333700e10508746573743037333800e205087465" - "73743037333900e30508746573743037343000e40508746573743037343100e50508746573743037343200e6050874" - "6573743037343300e70508746573743037343400e80508746573743037343500e90508746573743037343600ea0508" - "746573743037343700eb0508746573743037343800ec0508746573743037343900ed0508746573743037353000ee05" - "08746573743037353100ef0508746573743037353200f00508746573743037353300f10508746573743037353400f2" - "0508746573743037353500f30508746573743037353600f40508746573743037353700f50508746573743037353800" - "f60508746573743037353900f70508746573743037363000f80508746573743037363100f905087465737430373632" - "00fa0508746573743037363300fb0508746573743037363400fc0508746573743037363500fd050874657374303736" - "3600fe0508746573743037363700ff0508746573743037363800800608746573743037363900810608746573743037" - "3730008206087465737430373731008306087465737430373732008406087465737430373733008506087465737430" - "3737340086060874657374303737350087060874657374303737360088060874657374303737370089060874657374" - "30373738008a06087465737430373739008b06087465737430373830008c06087465737430373831008d0608746573" - "7430373832008e06087465737430373833008f06087465737430373834009006087465737430373835009106087465" - "7374303738360092060874657374303738370093060874657374303738380094060874657374303738390095060874" - "6573743037393000960608746573743037393100970608746573743037393200980608746573743037393300990608" - "7465737430373934009a06087465737430373935009b06087465737430373936009c06087465737430373937009d06" - "087465737430373938009e06087465737430373939009f0608746573743038303000a00608746573743038303100a1" - "0608746573743038303200a20608746573743038303300a30608746573743038303400a40608746573743038303500" - "a50608746573743038303600a60608746573743038303700a70608746573743038303800a806087465737430383039" - "00a90608746573743038313000aa0608746573743038313100ab0608746573743038313200ac060874657374303831" - "3300ad0608746573743038313400ae0608746573743038313500af0608746573743038313600b00608746573743038" - "313700b10608746573743038313800b20608746573743038313900b30608746573743038323000b406087465737430" - "38323100b50608746573743038323200b60608746573743038323300b70608746573743038323400b8060874657374" - "3038323500b90608746573743038323600ba0608746573743038323700bb0608746573743038323800bc0608746573" - "743038323900bd0608746573743038333000be0608746573743038333100bf0608746573743038333200c006087465" - "73743038333300c10608746573743038333400c20608746573743038333500c30608746573743038333600c4060874" - "6573743038333700c50608746573743038333800c60608746573743038333900c70608746573743038343000c80608" - "746573743038343100c90608746573743038343200ca0608746573743038343300cb0608746573743038343400cc06" - "08746573743038343500cd0608746573743038343600ce0608746573743038343700cf0608746573743038343800d0" - "0608746573743038343900d10608746573743038353000d20608746573743038353100d30608746573743038353200" - "d40608746573743038353300d50608746573743038353400d60608746573743038353500d706087465737430383536" - "00d80608746573743038353700d90608746573743038353800da0608746573743038353900db060874657374303836" - "3000dc0608746573743038363100dd0608746573743038363200de0608746573743038363300df0608746573743038" - "363400e00608746573743038363500e10608746573743038363600e20608746573743038363700e306087465737430" - "38363800e40608746573743038363900e50608746573743038373000e60608746573743038373100e7060874657374" - "3038373200e80608746573743038373300e90608746573743038373400ea0608746573743038373500eb0608746573" - "743038373600ec0608746573743038373700ed0608746573743038373800ee0608746573743038373900ef06087465" - "73743038383000f00608746573743038383100f10608746573743038383200f20608746573743038383300f3060874" - "6573743038383400f40608746573743038383500f50608746573743038383600f60608746573743038383700f70608" - "746573743038383800f80608746573743038383900f90608746573743038393000fa0608746573743038393100fb06" - "08746573743038393200fc0608746573743038393300fd0608746573743038393400fe0608746573743038393500ff" - "0608746573743038393600800708746573743038393700810708746573743038393800820708746573743038393900" - "8307087465737430393030008407087465737430393031008507087465737430393032008607087465737430393033" - "008707087465737430393034008807087465737430393035008907087465737430393036008a070874657374303930" - "37008b07087465737430393038008c07087465737430393039008d07087465737430393130008e0708746573743039" - "3131008f07087465737430393132009007087465737430393133009107087465737430393134009207087465737430" - "3931350093070874657374303931360094070874657374303931370095070874657374303931380096070874657374" - "30393139009707087465737430393230009807087465737430393231009907087465737430393232009a0708746573" - "7430393233009b07087465737430393234009c07087465737430393235009d07087465737430393236009e07087465" - "737430393237009f0708746573743039323800a00708746573743039323900a10708746573743039333000a2070874" - "6573743039333100a30708746573743039333200a40708746573743039333300a50708746573743039333400a60708" - "746573743039333500a70708746573743039333600a80708746573743039333700a90708746573743039333800aa07" - "08746573743039333900ab0708746573743039343000ac0708746573743039343100ad0708746573743039343200ae" - "0708746573743039343300af0708746573743039343400b00708746573743039343500b10708746573743039343600" - "b20708746573743039343700b30708746573743039343800b40708746573743039343900b507087465737430393530" - "00b60708746573743039353100b70708746573743039353200b80708746573743039353300b9070874657374303935" - "3400ba0708746573743039353500bb0708746573743039353600bc0708746573743039353700bd0708746573743039" - "353800be0708746573743039353900bf0708746573743039363000c00708746573743039363100c107087465737430" - "39363200c20708746573743039363300c30708746573743039363400c40708746573743039363500c5070874657374" - "3039363600c60708746573743039363700c70708746573743039363800c80708746573743039363900c90708746573" - "743039373000ca0708746573743039373100cb0708746573743039373200cc0708746573743039373300cd07087465" - "73743039373400ce0708746573743039373500cf0708746573743039373600d00708746573743039373700d1070874" - "6573743039373800d20708746573743039373900d30708746573743039383000d40708746573743039383100d50708" - "746573743039383200d60708746573743039383300d70708746573743039383400d80708746573743039383500d907" - "08746573743039383600da0708746573743039383700db0708746573743039383800dc0708746573743039383900dd" - "0708746573743039393000de0708746573743039393100df0708746573743039393200e00708746573743039393300" - "e10708746573743039393400e20708746573743039393500e30708746573743039393600e407087465737430393937" - "00e50708746573743039393800e60708746573743039393900e70708746573743130303000e8070874657374313030" - "3100e90708746573743130303200ea0708746573743130303300eb0708746573743130303400ec0708746573743130" - "303500ed0708746573743130303600ee0708746573743130303700ef0708746573743130303800f007087465737431" - "30303900f10708746573743130313000f20708746573743130313100f30708746573743130313200f4070874657374" - "3130313300f50708746573743130313400f60708746573743130313500f70708746573743130313600f80708746573" - "743130313700f90708746573743130313800fa0708746573743130313900fb0708746573743130323000fc07087465" - "73743130323100fd0708746573743130323200fe0708746573743130323300ff070874657374313032340080080874" - "6573743130323500810808746573743130323600820808746573743130323700830808746573743130323800840808" - "7465737431303239008508087465737431303330008608087465737431303331008708087465737431303332008808" - "087465737431303333008908087465737431303334008a08087465737431303335008b08087465737431303336008c" - "08087465737431303337008d08087465737431303338008e08087465737431303339008f0808746573743130343000" - "9008087465737431303431009108087465737431303432009208087465737431303433009308087465737431303434" - "0094080874657374313034350095080874657374313034360096080874657374313034370097080874657374313034" - "38009808087465737431303439009908087465737431303530009a08087465737431303531009b0808746573743130" - "3532009c08087465737431303533009d08087465737431303534009e08087465737431303535009f08087465737431" - "30353600a00808746573743130353700a10808746573743130353800a20808746573743130353900a3080874657374" - "3130363000a40808746573743130363100a50808746573743130363200a60808746573743130363300a70808746573" - "743130363400a80808746573743130363500a90808746573743130363600aa0808746573743130363700ab08087465" - "73743130363800ac0808746573743130363900ad0808746573743130373000ae0808746573743130373100af080874" - "6573743130373200b00808746573743130373300b10808746573743130373400b20808746573743130373500b30808" - "746573743130373600b40808746573743130373700b50808746573743130373800b60808746573743130373900b708" - "08746573743130383000b80808746573743130383100b90808746573743130383200ba0808746573743130383300bb" - "0808746573743130383400bc0808746573743130383500bd0808746573743130383600be0808746573743130383700" - "bf0808746573743130383800c00808746573743130383900c10808746573743130393000c208087465737431303931" - "00c30808746573743130393200c40808746573743130393300c50808746573743130393400c6080874657374313039" - "3500c70808746573743130393600c80808746573743130393700c90808746573743130393800ca0808746573743130" - "393900cb0808746573743131303000cc0808746573743131303100cd0808746573743131303200ce08087465737431" - "31303300cf0808746573743131303400d00808746573743131303500d10808746573743131303600d2080874657374" - "3131303700d30808746573743131303800d40808746573743131303900d50808746573743131313000d60808746573" - "743131313100d70808746573743131313200d80808746573743131313300d90808746573743131313400da08087465" - "73743131313500db0808746573743131313600dc0808746573743131313700dd0808746573743131313800de080874" - "6573743131313900df0808746573743131323000e00808746573743131323100e10808746573743131323200e20808" - "746573743131323300e30808746573743131323400e40808746573743131323500e50808746573743131323600e608" - "08746573743131323700e70808746573743131323800e80808746573743131323900e90808746573743131333000ea" - "0808746573743131333100eb0808746573743131333200ec0808746573743131333300ed0808746573743131333400" - "ee0808746573743131333500ef0808746573743131333600f00808746573743131333700f108087465737431313338" - "00f20808746573743131333900f30808746573743131343000f40808746573743131343100f5080874657374313134" - "3200f60808746573743131343300f70808746573743131343400f80808746573743131343500f90808746573743131" - "343600fa0808746573743131343700fb0808746573743131343800fc0808746573743131343900fd08087465737431" - "31353000fe0808746573743131353100ff080874657374313135320080090874657374313135330081090874657374" - "3131353400820908746573743131353500830908746573743131353600840908746573743131353700850908746573" - "7431313538008609087465737431313539008709087465737431313630008809087465737431313631008909087465" - "737431313632008a09087465737431313633008b09087465737431313634008c09087465737431313635008d090874" - "65737431313636008e09087465737431313637008f0908746573743131363800900908746573743131363900910908" - "7465737431313730009209087465737431313731009309087465737431313732009409087465737431313733009509" - "0874657374313137340096090874657374313137350097090874657374313137360098090874657374313137370099" - "09087465737431313738009a09087465737431313739009b09087465737431313830009c0908746573743131383100" - "9d09087465737431313832009e09087465737431313833009f0908746573743131383400a009087465737431313835" - "00a10908746573743131383600a20908746573743131383700a30908746573743131383800a4090874657374313138" - "3900a50908746573743131393000a60908746573743131393100a70908746573743131393200a80908746573743131" - "393300a90908746573743131393400aa0908746573743131393500ab0908746573743131393600ac09087465737431" - "31393700ad0908746573743131393800ae0908746573743131393900af0908746573743132303000b0090874657374" - "3132303100b10908746573743132303200b20908746573743132303300b30908746573743132303400b40908746573" - "743132303500b50908746573743132303600b60908746573743132303700b70908746573743132303800b809087465" - "73743132303900b90908746573743132313000ba0908746573743132313100bb0908746573743132313200bc090874" - "6573743132313300bd0908746573743132313400be0908746573743132313500bf0908746573743132313600c00908" - "746573743132313700c10908746573743132313800c20908746573743132313900c30908746573743132323000c409" - "08746573743132323100c50908746573743132323200c60908746573743132323300c70908746573743132323400c8" - "0908746573743132323500c90908746573743132323600ca0908746573743132323700cb0908746573743132323800" - "cc0908746573743132323900cd0908746573743132333000ce0908746573743132333100cf09087465737431323332" - "00d00908746573743132333300d10908746573743132333400d20908746573743132333500d3090874657374313233" - "3600d40908746573743132333700d50908746573743132333800d60908746573743132333900d70908746573743132" - "343000d80908746573743132343100d90908746573743132343200da0908746573743132343300db09087465737431" - "32343400dc0908746573743132343500dd0908746573743132343600de0908746573743132343700df090874657374" - "3132343800e00908746573743132343900e10908746573743132353000e20908746573743132353100e30908746573" - "743132353200e40908746573743132353300e50908746573743132353400e60908746573743132353500e709087465" - "73743132353600e80908746573743132353700e90908746573743132353800ea0908746573743132353900eb090874" - "6573743132363000ec0908746573743132363100ed0908746573743132363200ee0908746573743132363300ef0908" - "746573743132363400f00908746573743132363500f10908746573743132363600f20908746573743132363700f309" - "08746573743132363800f40908746573743132363900f50908746573743132373000f60908746573743132373100f7" - "0908746573743132373200f80908746573743132373300f90908746573743132373400fa0908746573743132373500" - "fb0908746573743132373600fc0908746573743132373700fd0908746573743132373800fe09087465737431323739" - "00ff0908746573743132383000800a08746573743132383100810a08746573743132383200820a0874657374313238" - "3300830a08746573743132383400840a08746573743132383500850a08746573743132383600860a08746573743132" - "383700870a08746573743132383800880a08746573743132383900890a087465737431323930008a0a087465737431" - "323931008b0a087465737431323932008c0a087465737431323933008d0a087465737431323934008e0a0874657374" - "31323935008f0a08746573743132393600900a08746573743132393700910a08746573743132393800920a08746573" - "743132393900930a08746573743133303000940a08746573743133303100950a08746573743133303200960a087465" - "73743133303300970a08746573743133303400980a08746573743133303500990a087465737431333036009a0a0874" - "65737431333037009b0a087465737431333038009c0a087465737431333039009d0a087465737431333130009e0a08" - "7465737431333131009f0a08746573743133313200a00a08746573743133313300a10a08746573743133313400a20a" - "08746573743133313500a30a08746573743133313600a40a08746573743133313700a50a08746573743133313800a6" - "0a08746573743133313900a70a08746573743133323000a80a08746573743133323100a90a08746573743133323200" - "aa0a08746573743133323300ab0a08746573743133323400ac0a08746573743133323500ad0a087465737431333236" - "00ae0a08746573743133323700af0a08746573743133323800b00a08746573743133323900b10a0874657374313333" - "3000b20a08746573743133333100b30a08746573743133333200b40a08746573743133333300b50a08746573743133" - "333400b60a08746573743133333500b70a08746573743133333600b80a08746573743133333700b90a087465737431" - "33333800ba0a08746573743133333900bb0a08746573743133343000bc0a08746573743133343100bd0a0874657374" - "3133343200be0a08746573743133343300bf0a08746573743133343400c00a08746573743133343500c10a08746573" - "743133343600c20a08746573743133343700c30a08746573743133343800c40a08746573743133343900c50a087465" - "73743133353000c60a08746573743133353100c70a08746573743133353200c80a08746573743133353300c90a0874" - "6573743133353400ca0a08746573743133353500cb0a08746573743133353600cc0a08746573743133353700cd0a08" - "746573743133353800ce0a08746573743133353900cf0a08746573743133363000d00a08746573743133363100d10a" - "08746573743133363200d20a08746573743133363300d30a08746573743133363400d40a08746573743133363500d5" - "0a08746573743133363600d60a08746573743133363700d70a08746573743133363800d80a08746573743133363900" - "d90a08746573743133373000da0a08746573743133373100db0a08746573743133373200dc0a087465737431333733" - "00dd0a08746573743133373400de0a08746573743133373500df0a08746573743133373600e00a0874657374313337" - "3700e10a08746573743133373800e20a08746573743133373900e30a08746573743133383000e40a08746573743133" - "383100e50a08746573743133383200e60a08746573743133383300e70a08746573743133383400e80a087465737431" - "33383500e90a08746573743133383600ea0a08746573743133383700eb0a08746573743133383800ec0a0874657374" - "3133383900ed0a08746573743133393000ee0a08746573743133393100ef0a08746573743133393200f00a08746573" - "743133393300f10a08746573743133393400f20a08746573743133393500f30a08746573743133393600f40a087465" - "73743133393700f50a08746573743133393800f60a08746573743133393900f70a08746573743134303000f80a0874" - "6573743134303100f90a08746573743134303200fa0a08746573743134303300fb0a08746573743134303400fc0a08" - "746573743134303500fd0a08746573743134303600fe0a08746573743134303700ff0a08746573743134303800800b" - "08746573743134303900810b08746573743134313000820b08746573743134313100830b0874657374313431320084" - "0b08746573743134313300850b08746573743134313400860b08746573743134313500870b08746573743134313600" - "880b08746573743134313700890b087465737431343138008a0b087465737431343139008b0b087465737431343230" - "008c0b087465737431343231008d0b087465737431343232008e0b087465737431343233008f0b0874657374313432" - "3400900b08746573743134323500910b08746573743134323600920b08746573743134323700930b08746573743134" - "323800940b08746573743134323900950b08746573743134333000960b08746573743134333100970b087465737431" - "34333200980b08746573743134333300990b087465737431343334009a0b087465737431343335009b0b0874657374" - "31343336009c0b087465737431343337009d0b087465737431343338009e0b087465737431343339009f0b08746573" - "743134343000a00b08746573743134343100a10b08746573743134343200a20b08746573743134343300a30b087465" - "73743134343400a40b08746573743134343500a50b08746573743134343600a60b08746573743134343700a70b0874" - "6573743134343800a80b08746573743134343900a90b08746573743134353000aa0b08746573743134353100ab0b08" - "746573743134353200ac0b08746573743134353300ad0b08746573743134353400ae0b08746573743134353500af0b" - "08746573743134353600b00b08746573743134353700b10b08746573743134353800b20b08746573743134353900b3" - "0b08746573743134363000b40b08746573743134363100b50b08746573743134363200b60b08746573743134363300" - "b70b08746573743134363400b80b08746573743134363500b90b08746573743134363600ba0b087465737431343637" - "00bb0b08746573743134363800bc0b08746573743134363900bd0b08746573743134373000be0b0874657374313437" - "3100bf0b08746573743134373200c00b08746573743134373300c10b08746573743134373400c20b08746573743134" - "373500c30b08746573743134373600c40b08746573743134373700c50b08746573743134373800c60b087465737431" - "34373900c70b08746573743134383000c80b08746573743134383100c90b08746573743134383200ca0b0874657374" - "3134383300cb0b08746573743134383400cc0b08746573743134383500cd0b08746573743134383600ce0b08746573" - "743134383700cf0b08746573743134383800d00b08746573743134383900d10b08746573743134393000d20b087465" - "73743134393100d30b08746573743134393200d40b08746573743134393300d50b08746573743134393400d60b0874" - "6573743134393500d70b08746573743134393600d80b08746573743134393700d90b08746573743134393800da0b08" - "746573743134393900db0b08746573743135303000dc0b08746573743135303100dd0b08746573743135303200de0b" - "08746573743135303300df0b08746573743135303400e00b08746573743135303500e10b08746573743135303600e2" - "0b08746573743135303700e30b08746573743135303800e40b08746573743135303900e50b08746573743135313000" - "e60b08746573743135313100e70b08746573743135313200e80b08746573743135313300e90b087465737431353134" - "00ea0b08746573743135313500eb0b08746573743135313600ec0b08746573743135313700ed0b0874657374313531" - "3800ee0b08746573743135313900ef0b08746573743135323000f00b08746573743135323100f10b08746573743135" - "323200f20b08746573743135323300f30b08746573743135323400f40b08746573743135323500f50b087465737431" - "35323600f60b08746573743135323700f70b08746573743135323800f80b08746573743135323900f90b0874657374" - "3135333000fa0b08746573743135333100fb0b08746573743135333200fc0b08746573743135333300fd0b08746573" - "743135333400fe0b08746573743135333500ff0b08746573743135333600800c08746573743135333700810c087465" - "73743135333800820c08746573743135333900830c08746573743135343000840c08746573743135343100850c0874" - "6573743135343200860c08746573743135343300870c08746573743135343400880c08746573743135343500890c08" - "7465737431353436008a0c087465737431353437008b0c087465737431353438008c0c087465737431353439008d0c" - "087465737431353530008e0c087465737431353531008f0c08746573743135353200900c0874657374313535330091" - "0c08746573743135353400920c08746573743135353500930c08746573743135353600940c08746573743135353700" - "950c08746573743135353800960c08746573743135353900970c08746573743135363000980c087465737431353631" - "00990c087465737431353632009a0c087465737431353633009b0c087465737431353634009c0c0874657374313536" - "35009d0c087465737431353636009e0c087465737431353637009f0c08746573743135363800a00c08746573743135" - "363900a10c08746573743135373000a20c08746573743135373100a30c08746573743135373200a40c087465737431" - "35373300a50c08746573743135373400a60c08746573743135373500a70c08746573743135373600a80c0874657374" - "3135373700a90c08746573743135373800aa0c08746573743135373900ab0c08746573743135383000ac0c08746573" - "743135383100ad0c08746573743135383200ae0c08746573743135383300af0c08746573743135383400b00c087465" - "73743135383500b10c08746573743135383600b20c08746573743135383700b30c08746573743135383800b40c0874" - "6573743135383900b50c08746573743135393000b60c08746573743135393100b70c08746573743135393200b80c08" - "746573743135393300b90c08746573743135393400ba0c08746573743135393500bb0c08746573743135393600bc0c" - "08746573743135393700bd0c08746573743135393800be0c08746573743135393900bf0c08746573743136303000c0" - "0c08746573743136303100c10c08746573743136303200c20c08746573743136303300c30c08746573743136303400" - "c40c08746573743136303500c50c08746573743136303600c60c08746573743136303700c70c087465737431363038" - "00c80c08746573743136303900c90c08746573743136313000ca0c08746573743136313100cb0c0874657374313631" - "3200cc0c08746573743136313300cd0c08746573743136313400ce0c08746573743136313500cf0c08746573743136" - "313600d00c08746573743136313700d10c08746573743136313800d20c08746573743136313900d30c087465737431" - "36323000d40c08746573743136323100d50c08746573743136323200d60c08746573743136323300d70c0874657374" - "3136323400d80c08746573743136323500d90c08746573743136323600da0c08746573743136323700db0c08746573" - "743136323800dc0c08746573743136323900dd0c08746573743136333000de0c08746573743136333100df0c087465" - "73743136333200e00c08746573743136333300e10c08746573743136333400e20c08746573743136333500e30c0874" - "6573743136333600e40c08746573743136333700e50c08746573743136333800e60c08746573743136333900e70c08" - "746573743136343000e80c08746573743136343100e90c08746573743136343200ea0c08746573743136343300eb0c" - "08746573743136343400ec0c08746573743136343500ed0c08746573743136343600ee0c08746573743136343700ef" - "0c08746573743136343800f00c08746573743136343900f10c08746573743136353000f20c08746573743136353100" - "f30c08746573743136353200f40c08746573743136353300f50c08746573743136353400f60c087465737431363535" - "00f70c08746573743136353600f80c08746573743136353700f90c08746573743136353800fa0c0874657374313635" - "3900fb0c08746573743136363000fc0c08746573743136363100fd0c08746573743136363200fe0c08746573743136" - "363300ff0c08746573743136363400800d08746573743136363500810d08746573743136363600820d087465737431" - "36363700830d08746573743136363800840d08746573743136363900850d08746573743136373000860d0874657374" - "3136373100870d08746573743136373200880d08746573743136373300890d087465737431363734008a0d08746573" - "7431363735008b0d087465737431363736008c0d087465737431363737008d0d087465737431363738008e0d087465" - "737431363739008f0d08746573743136383000900d08746573743136383100910d08746573743136383200920d0874" - "6573743136383300930d08746573743136383400940d08746573743136383500950d08746573743136383600960d08" - "746573743136383700970d08746573743136383800980d08746573743136383900990d087465737431363930009a0d" - "087465737431363931009b0d087465737431363932009c0d087465737431363933009d0d087465737431363934009e" - "0d087465737431363935009f0d08746573743136393600a00d08746573743136393700a10d08746573743136393800" - "a20d08746573743136393900a30d08746573743137303000a40d08746573743137303100a50d087465737431373032" - "00a60d08746573743137303300a70d08746573743137303400a80d08746573743137303500a90d0874657374313730" - "3600aa0d08746573743137303700ab0d08746573743137303800ac0d08746573743137303900ad0d08746573743137" - "313000ae0d08746573743137313100af0d08746573743137313200b00d08746573743137313300b10d087465737431" - "37313400b20d08746573743137313500b30d08746573743137313600b40d08746573743137313700b50d0874657374" - "3137313800b60d08746573743137313900b70d08746573743137323000b80d08746573743137323100b90d08746573" - "743137323200ba0d08746573743137323300bb0d08746573743137323400bc0d08746573743137323500bd0d087465" - "73743137323600be0d08746573743137323700bf0d08746573743137323800c00d08746573743137323900c10d0874" - "6573743137333000c20d08746573743137333100c30d08746573743137333200c40d08746573743137333300c50d08" - "746573743137333400c60d08746573743137333500c70d08746573743137333600c80d08746573743137333700c90d" - "08746573743137333800ca0d08746573743137333900cb0d08746573743137343000cc0d08746573743137343100cd" - "0d08746573743137343200ce0d08746573743137343300cf0d08746573743137343400d00d08746573743137343500" - "d10d08746573743137343600d20d08746573743137343700d30d08746573743137343800d40d087465737431373439" - "00d50d08746573743137353000d60d08746573743137353100d70d08746573743137353200d80d0874657374313735" - "3300d90d08746573743137353400da0d08746573743137353500db0d08746573743137353600dc0d08746573743137" - "353700dd0d08746573743137353800de0d08746573743137353900df0d08746573743137363000e00d087465737431" - "37363100e10d08746573743137363200e20d08746573743137363300e30d08746573743137363400e40d0874657374" - "3137363500e50d08746573743137363600e60d08746573743137363700e70d08746573743137363800e80d08746573" - "743137363900e90d08746573743137373000ea0d08746573743137373100eb0d08746573743137373200ec0d087465" - "73743137373300ed0d08746573743137373400ee0d08746573743137373500ef0d08746573743137373600f00d0874" - "6573743137373700f10d08746573743137373800f20d08746573743137373900f30d08746573743137383000f40d08" - "746573743137383100f50d08746573743137383200f60d08746573743137383300f70d08746573743137383400f80d" - "08746573743137383500f90d08746573743137383600fa0d08746573743137383700fb0d08746573743137383800fc" - "0d08746573743137383900fd0d08746573743137393000fe0d08746573743137393100ff0d08746573743137393200" - "800e08746573743137393300810e08746573743137393400820e08746573743137393500830e087465737431373936" - "00840e08746573743137393700850e08746573743137393800860e08746573743137393900870e0874657374313830" - "3000880e08746573743138303100890e087465737431383032008a0e087465737431383033008b0e08746573743138" - "3034008c0e087465737431383035008d0e087465737431383036008e0e087465737431383037008f0e087465737431" - "38303800900e08746573743138303900910e08746573743138313000920e08746573743138313100930e0874657374" - "3138313200940e08746573743138313300950e08746573743138313400960e08746573743138313500970e08746573" - "743138313600980e08746573743138313700990e087465737431383138009a0e087465737431383139009b0e087465" - "737431383230009c0e087465737431383231009d0e087465737431383232009e0e087465737431383233009f0e0874" - "6573743138323400a00e08746573743138323500a10e08746573743138323600a20e08746573743138323700a30e08" - "746573743138323800a40e08746573743138323900a50e08746573743138333000a60e08746573743138333100a70e" - "08746573743138333200a80e08746573743138333300a90e08746573743138333400aa0e08746573743138333500ab" - "0e08746573743138333600ac0e08746573743138333700ad0e08746573743138333800ae0e08746573743138333900" - "af0e08746573743138343000b00e08746573743138343100b10e08746573743138343200b20e087465737431383433" - "00b30e08746573743138343400b40e08746573743138343500b50e08746573743138343600b60e0874657374313834" - "3700b70e08746573743138343800b80e08746573743138343900b90e08746573743138353000ba0e08746573743138" - "353100bb0e08746573743138353200bc0e08746573743138353300bd0e08746573743138353400be0e087465737431" - "38353500bf0e08746573743138353600c00e08746573743138353700c10e08746573743138353800c20e0874657374" - "3138353900c30e08746573743138363000c40e08746573743138363100c50e08746573743138363200c60e08746573" - "743138363300c70e08746573743138363400c80e08746573743138363500c90e08746573743138363600ca0e087465" - "73743138363700cb0e08746573743138363800cc0e08746573743138363900cd0e08746573743138373000ce0e0874" - "6573743138373100cf0e08746573743138373200d00e08746573743138373300d10e08746573743138373400d20e08" - "746573743138373500d30e08746573743138373600d40e08746573743138373700d50e08746573743138373800d60e" - "08746573743138373900d70e08746573743138383000d80e08746573743138383100d90e08746573743138383200da" - "0e08746573743138383300db0e08746573743138383400dc0e08746573743138383500dd0e08746573743138383600" - "de0e08746573743138383700df0e08746573743138383800e00e08746573743138383900e10e087465737431383930" - "00e20e08746573743138393100e30e08746573743138393200e40e08746573743138393300e50e0874657374313839" - "3400e60e08746573743138393500e70e08746573743138393600e80e08746573743138393700e90e08746573743138" - "393800ea0e08746573743138393900eb0e08746573743139303000ec0e08746573743139303100ed0e087465737431" - "39303200ee0e08746573743139303300ef0e08746573743139303400f00e08746573743139303500f10e0874657374" - "3139303600f20e08746573743139303700f30e08746573743139303800f40e08746573743139303900f50e08746573" - "743139313000f60e08746573743139313100f70e08746573743139313200f80e08746573743139313300f90e087465" - "73743139313400fa0e08746573743139313500fb0e08746573743139313600fc0e08746573743139313700fd0e0874" - "6573743139313800fe0e08746573743139313900ff0e08746573743139323000800f08746573743139323100810f08" - "746573743139323200820f08746573743139323300830f08746573743139323400840f08746573743139323500850f" - "08746573743139323600860f08746573743139323700870f08746573743139323800880f0874657374313932390089" - "0f087465737431393330008a0f087465737431393331008b0f087465737431393332008c0f08746573743139333300" - "8d0f087465737431393334008e0f087465737431393335008f0f08746573743139333600900f087465737431393337" - "00910f08746573743139333800920f08746573743139333900930f08746573743139343000940f0874657374313934" - "3100950f08746573743139343200960f08746573743139343300970f08746573743139343400980f08746573743139" - "343500990f087465737431393436009a0f087465737431393437009b0f087465737431393438009c0f087465737431" - "393439009d0f087465737431393530009e0f087465737431393531009f0f08746573743139353200a00f0874657374" - "3139353300a10f08746573743139353400a20f08746573743139353500a30f08746573743139353600a40f08746573" - "743139353700a50f08746573743139353800a60f08746573743139353900a70f08746573743139363000a80f087465" - "73743139363100a90f08746573743139363200aa0f08746573743139363300ab0f08746573743139363400ac0f0874" - "6573743139363500ad0f08746573743139363600ae0f08746573743139363700af0f08746573743139363800b00f08" - "746573743139363900b10f08746573743139373000b20f08746573743139373100b30f08746573743139373200b40f" - "08746573743139373300b50f08746573743139373400b60f08746573743139373500b70f08746573743139373600b8" - "0f08746573743139373700b90f08746573743139373800ba0f08746573743139373900bb0f08746573743139383000" - "bc0f08746573743139383100bd0f08746573743139383200be0f08746573743139383300bf0f087465737431393834" - "00c00f08746573743139383500c10f08746573743139383600c20f08746573743139383700c30f0874657374313938" - "3800c40f08746573743139383900c50f08746573743139393000c60f08746573743139393100c70f08746573743139" - "393200c80f08746573743139393300c90f08746573743139393400ca0f08746573743139393500cb0f087465737431" - "39393600cc0f08746573743139393700cd0f08746573743139393800ce0f08746573743139393900cf0f0874657374" - "3230303000d00f08746573743230303100d10f08746573743230303200d20f08746573743230303300d30f08746573" - "743230303400d40f08746573743230303500d50f08746573743230303600d60f08746573743230303700d70f087465" - "73743230303800d80f08746573743230303900d90f08746573743230313000da0f08746573743230313100db0f0874" - "6573743230313200dc0f08746573743230313300dd0f08746573743230313400de0f08746573743230313500df0f08" - "746573743230313600e00f08746573743230313700e10f08746573743230313800e20f08746573743230313900e30f" - "08746573743230323000e40f08746573743230323100e50f08746573743230323200e60f08746573743230323300e7" - "0f08746573743230323400e80f08746573743230323500e90f08746573743230323600ea0f08746573743230323700" - "eb0f08746573743230323800ec0f08746573743230323900ed0f08746573743230333000ee0f087465737432303331" - "00ef0f08746573743230333200f00f08746573743230333300f10f08746573743230333400f20f0874657374323033" - "3500f30f08746573743230333600f40f08746573743230333700f50f08746573743230333800f60f08746573743230" - "333900f70f08746573743230343000f80f08746573743230343100f90f08746573743230343200fa0f087465737432" - "30343300fb0f08746573743230343400fc0f08746573743230343500fd0f08746573743230343600fe0f0874657374" - "3230343700ff0f08746573743230343800801008746573743230343900811008746573743230353000821008746573" - "7432303531008310087465737432303532008410087465737432303533008510087465737432303534008610087465" - "737432303535008710087465737432303536008810087465737432303537008910087465737432303538008a100874" - "65737432303539008b10087465737432303630008c10087465737432303631008d10087465737432303632008e1008" - "7465737432303633008f10087465737432303634009010087465737432303635009110087465737432303636009210" - "0874657374323036370093100874657374323036380094100874657374323036390095100874657374323037300096" - "1008746573743230373100971008746573743230373200981008746573743230373300991008746573743230373400" - "9a10087465737432303735009b10087465737432303736009c10087465737432303737009d10087465737432303738" - "009e10087465737432303739009f1008746573743230383000a01008746573743230383100a1100874657374323038" - "3200a21008746573743230383300a31008746573743230383400a41008746573743230383500a51008746573743230" - "383600a61008746573743230383700a71008746573743230383800a81008746573743230383900a910087465737432" - "30393000aa1008746573743230393100ab1008746573743230393200ac1008746573743230393300ad100874657374" - "3230393400ae1008746573743230393500af1008746573743230393600b01008746573743230393700b11008746573" - "743230393800b21008746573743230393900b31008746573743231303000b41008746573743231303100b510087465" - "73743231303200b61008746573743231303300b71008746573743231303400b81008746573743231303500b9100874" - "6573743231303600ba1008746573743231303700bb1008746573743231303800bc1008746573743231303900bd1008" - "746573743231313000be1008746573743231313100bf1008746573743231313200c01008746573743231313300c110" - "08746573743231313400c21008746573743231313500c31008746573743231313600c41008746573743231313700c5" - "1008746573743231313800c61008746573743231313900c71008746573743231323000c81008746573743231323100" - "c91008746573743231323200ca1008746573743231323300cb1008746573743231323400cc10087465737432313235" - "00cd1008746573743231323600ce1008746573743231323700cf1008746573743231323800d0100874657374323132" - "3900d11008746573743231333000d21008746573743231333100d31008746573743231333200d41008746573743231" - "333300d51008746573743231333400d61008746573743231333500d71008746573743231333600d810087465737432" - "31333700d91008746573743231333800da1008746573743231333900db1008746573743231343000dc100874657374" - "3231343100dd1008746573743231343200de1008746573743231343300df1008746573743231343400e01008746573" - "743231343500e11008746573743231343600e21008746573743231343700e31008746573743231343800e410087465" - "73743231343900e51008746573743231353000e61008746573743231353100e71008746573743231353200e8100874" - "6573743231353300e91008746573743231353400ea1008746573743231353500eb1008746573743231353600ec1008" - "746573743231353700ed1008746573743231353800ee1008746573743231353900ef1008746573743231363000f010" - "08746573743231363100f11008746573743231363200f21008746573743231363300f31008746573743231363400f4" - "1008746573743231363500f51008746573743231363600f61008746573743231363700f71008746573743231363800" - "f81008746573743231363900f91008746573743231373000fa1008746573743231373100fb10087465737432313732" - "00fc1008746573743231373300fd1008746573743231373400fe1008746573743231373500ff100874657374323137" - "3600801108746573743231373700811108746573743231373800821108746573743231373900831108746573743231" - "3830008411087465737432313831008511087465737432313832008611087465737432313833008711087465737432" - "313834008811087465737432313835008911087465737432313836008a11087465737432313837008b110874657374" - "32313838008c11087465737432313839008d11087465737432313930008e11087465737432313931008f1108746573" - "7432313932009011087465737432313933009111087465737432313934009211087465737432313935009311087465" - "7374323139360094110874657374323139370095110874657374323139380096110874657374323139390097110874" - "65737432323030009811087465737432323031009911087465737432323032009a11087465737432323033009b1108" - "7465737432323034009c11087465737432323035009d11087465737432323036009e11087465737432323037009f11" - "08746573743232303800a01108746573743232303900a11108746573743232313000a21108746573743232313100a3" - "1108746573743232313200a41108746573743232313300a51108746573743232313400a61108746573743232313500" - "a71108746573743232313600a81108746573743232313700a91108746573743232313800aa11087465737432323139" - "00ab1108746573743232323000ac1108746573743232323100ad1108746573743232323200ae110874657374323232" - "3300af1108746573743232323400b01108746573743232323500b11108746573743232323600b21108746573743232" - "323700b31108746573743232323800b41108746573743232323900b51108746573743232333000b611087465737432" - "32333100b71108746573743232333200b81108746573743232333300b91108746573743232333400ba110874657374" - "3232333500bb1108746573743232333600bc1108746573743232333700bd1108746573743232333800be1108746573" - "743232333900bf1108746573743232343000c01108746573743232343100c11108746573743232343200c211087465" - "73743232343300c31108746573743232343400c41108746573743232343500c51108746573743232343600c6110874" - "6573743232343700c71108746573743232343800c81108746573743232343900c91108746573743232353000ca1108" - "746573743232353100cb1108746573743232353200cc1108746573743232353300cd1108746573743232353400ce11" - "08746573743232353500cf1108746573743232353600d01108746573743232353700d11108746573743232353800d2" - "1108746573743232353900d31108746573743232363000d41108746573743232363100d51108746573743232363200" - "d61108746573743232363300d71108746573743232363400d81108746573743232363500d911087465737432323636" - "00da1108746573743232363700db1108746573743232363800dc1108746573743232363900dd110874657374323237" - "3000de1108746573743232373100df1108746573743232373200e01108746573743232373300e11108746573743232" - "373400e21108746573743232373500e31108746573743232373600e41108746573743232373700e511087465737432" - "32373800e61108746573743232373900e71108746573743232383000e81108746573743232383100e9110874657374" - "3232383200ea1108746573743232383300eb1108746573743232383400ec1108746573743232383500ed1108746573" - "743232383600ee1108746573743232383700ef1108746573743232383800f01108746573743232383900f111087465" - "73743232393000f21108746573743232393100f31108746573743232393200f41108746573743232393300f5110874" - "6573743232393400f61108746573743232393500f71108746573743232393600f81108746573743232393700f91108" - "746573743232393800fa1108746573743232393900fb1108746573743233303000fc1108746573743233303100fd11" - "08746573743233303200fe1108746573743233303300ff110874657374323330340080120874657374323330350081" - "1208746573743233303600821208746573743233303700831208746573743233303800841208746573743233303900" - "8512087465737432333130008612087465737432333131008712087465737432333132008812087465737432333133" - "008912087465737432333134008a12087465737432333135008b12087465737432333136008c120874657374323331" - "37008d12087465737432333138008e12087465737432333139008f1208746573743233323000901208746573743233" - "3231009112087465737432333232009212087465737432333233009312087465737432333234009412087465737432" - "3332350095120874657374323332360096120874657374323332370097120874657374323332380098120874657374" - "32333239009912087465737432333330009a12087465737432333331009b12087465737432333332009c1208746573" - "7432333333009d12087465737432333334009e12087465737432333335009f1208746573743233333600a012087465" - "73743233333700a11208746573743233333800a21208746573743233333900a31208746573743233343000a4120874" - "6573743233343100a51208746573743233343200a61208746573743233343300a71208746573743233343400a81208" - "746573743233343500a91208746573743233343600aa1208746573743233343700ab1208746573743233343800ac12" - "08746573743233343900ad1208746573743233353000ae1208746573743233353100af1208746573743233353200b0" - "1208746573743233353300b11208746573743233353400b21208746573743233353500b31208746573743233353600" - "b41208746573743233353700b51208746573743233353800b61208746573743233353900b712087465737432333630" - "00b81208746573743233363100b91208746573743233363200ba1208746573743233363300bb120874657374323336" - "3400bc1208746573743233363500bd1208746573743233363600be1208746573743233363700bf1208746573743233" - "363800c01208746573743233363900c11208746573743233373000c21208746573743233373100c312087465737432" - "33373200c41208746573743233373300c51208746573743233373400c61208746573743233373500c7120874657374" - "3233373600c81208746573743233373700c91208746573743233373800ca1208746573743233373900cb1208746573" - "743233383000cc1208746573743233383100cd1208746573743233383200ce1208746573743233383300cf12087465" - "73743233383400d01208746573743233383500d11208746573743233383600d21208746573743233383700d3120874" - "6573743233383800d41208746573743233383900d51208746573743233393000d61208746573743233393100d71208" - "746573743233393200d81208746573743233393300d91208746573743233393400da1208746573743233393500db12" - "08746573743233393600dc1208746573743233393700dd1208746573743233393800de1208746573743233393900df" - "1208746573743234303000e01208746573743234303100e11208746573743234303200e21208746573743234303300" - "e31208746573743234303400e41208746573743234303500e51208746573743234303600e612087465737432343037" - "00e71208746573743234303800e81208746573743234303900e91208746573743234313000ea120874657374323431" - "3100eb1208746573743234313200ec1208746573743234313300ed1208746573743234313400ee1208746573743234" - "313500ef1208746573743234313600f01208746573743234313700f11208746573743234313800f212087465737432" - "34313900f31208746573743234323000f41208746573743234323100f51208746573743234323200f6120874657374" - "3234323300f71208746573743234323400f81208746573743234323500f91208746573743234323600fa1208746573" - "743234323700fb1208746573743234323800fc1208746573743234323900fd1208746573743234333000fe12087465" - "73743234333100ff120874657374323433320080130874657374323433330081130874657374323433340082130874" - "6573743234333500831308746573743234333600841308746573743234333700851308746573743234333800861308" - "7465737432343339008713087465737432343430008813087465737432343431008913087465737432343432008a13" - "087465737432343433008b13087465737432343434008c13087465737432343435008d13087465737432343436008e" - "13087465737432343437008f1308746573743234343800901308746573743234343900911308746573743234353000" - "9213087465737432343531009313087465737432343532009413087465737432343533009513087465737432343534" - "0096130874657374323435350097130874657374323435360098130874657374323435370099130874657374323435" - "38009a13087465737432343539009b13087465737432343630009c13087465737432343631009d1308746573743234" - "3632009e13087465737432343633009f1308746573743234363400a01308746573743234363500a113087465737432" - "34363600a21308746573743234363700a31308746573743234363800a41308746573743234363900a5130874657374" - "3234373000a61308746573743234373100a71308746573743234373200a81308746573743234373300a91308746573" - "743234373400aa1308746573743234373500ab1308746573743234373600ac1308746573743234373700ad13087465" - "73743234373800ae1308746573743234373900af1308746573743234383000b01308746573743234383100b1130874" - "6573743234383200b21308746573743234383300b31308746573743234383400b41308746573743234383500b51308" - "746573743234383600b61308746573743234383700b71308746573743234383800b81308746573743234383900b913" - "08746573743234393000ba1308746573743234393100bb1308746573743234393200bc1308746573743234393300bd" - "1308746573743234393400be1308746573743234393500bf1308746573743234393600c01308746573743234393700" - "c11308746573743234393800c21308746573743234393900c31308746573743235303000c413087465737432353031" - "00c51308746573743235303200c61308746573743235303300c71308746573743235303400c8130874657374323530" - "3500c91308746573743235303600ca1308746573743235303700cb1308746573743235303800cc1308746573743235" - "303900cd1308746573743235313000ce1308746573743235313100cf1308746573743235313200d013087465737432" - "35313300d11308746573743235313400d21308746573743235313500d31308746573743235313600d4130874657374" - "3235313700d51308746573743235313800d61308746573743235313900d71308746573743235323000d81308746573" - "743235323100d91308746573743235323200da1308746573743235323300db1308746573743235323400dc13087465" - "73743235323500dd1308746573743235323600de1308746573743235323700df1308746573743235323800e0130874" - "6573743235323900e11308746573743235333000e21308746573743235333100e31308746573743235333200e41308" - "746573743235333300e51308746573743235333400e61308746573743235333500e71308746573743235333600e813" - "08746573743235333700e91308746573743235333800ea1308746573743235333900eb1308746573743235343000ec" - "1308746573743235343100ed1308746573743235343200ee1308746573743235343300ef1308746573743235343400" - "f01308746573743235343500f11308746573743235343600f21308746573743235343700f313087465737432353438" - "00f41308746573743235343900f51308746573743235353000f61308746573743235353100f7130874657374323535" - "3200f81308746573743235353300f91308746573743235353400fa1308746573743235353500fb1308746573743235" - "353600fc1308746573743235353700fd1308746573743235353800fe1308746573743235353900ff13087465737432" - "3536300080140874657374323536310081140874657374323536320082140874657374323536330083140874657374" - "3235363400841408746573743235363500851408746573743235363600861408746573743235363700871408746573" - "7432353638008814087465737432353639008914087465737432353730008a14087465737432353731008b14087465" - "737432353732008c14087465737432353733008d14087465737432353734008e14087465737432353735008f140874" - "6573743235373600901408746573743235373700911408746573743235373800921408746573743235373900931408" - "7465737432353830009414087465737432353831009514087465737432353832009614087465737432353833009714" - "087465737432353834009814087465737432353835009914087465737432353836009a14087465737432353837009b" - "14087465737432353838009c14087465737432353839009d14087465737432353930009e1408746573743235393100" - "9f1408746573743235393200a01408746573743235393300a11408746573743235393400a214087465737432353935" - "00a31408746573743235393600a41408746573743235393700a51408746573743235393800a6140874657374323539" - "3900a71408746573743236303000a81408746573743236303100a91408746573743236303200aa1408746573743236" - "303300ab1408746573743236303400ac1408746573743236303500ad1408746573743236303600ae14087465737432" - "36303700af1408746573743236303800b01408746573743236303900b11408746573743236313000b2140874657374" - "3236313100b31408746573743236313200b41408746573743236313300b51408746573743236313400b61408746573" - "743236313500b71408746573743236313600b81408746573743236313700b91408746573743236313800ba14087465" - "73743236313900bb1408746573743236323000bc1408746573743236323100bd1408746573743236323200be140874" - "6573743236323300bf1408746573743236323400c01408746573743236323500c11408746573743236323600c21408" - "746573743236323700c31408746573743236323800c41408746573743236323900c51408746573743236333000c614" - "08746573743236333100c71408746573743236333200c81408746573743236333300c91408746573743236333400ca" - "1408746573743236333500cb1408746573743236333600cc1408746573743236333700cd1408746573743236333800" - "ce1408746573743236333900cf1408746573743236343000d01408746573743236343100d114087465737432363432" - "00d21408746573743236343300d31408746573743236343400d41408746573743236343500d5140874657374323634" - "3600d61408746573743236343700d71408746573743236343800d81408746573743236343900d91408746573743236" - "353000da1408746573743236353100db1408746573743236353200dc1408746573743236353300dd14087465737432" - "36353400de1408746573743236353500df1408746573743236353600e01408746573743236353700e1140874657374" - "3236353800e21408746573743236353900e31408746573743236363000e41408746573743236363100e51408746573" - "743236363200e61408746573743236363300e71408746573743236363400e81408746573743236363500e914087465" - "73743236363600ea1408746573743236363700eb1408746573743236363800ec1408746573743236363900ed140874" - "6573743236373000ee1408746573743236373100ef1408746573743236373200f01408746573743236373300f11408" - "746573743236373400f21408746573743236373500f31408746573743236373600f41408746573743236373700f514" - "08746573743236373800f61408746573743236373900f71408746573743236383000f81408746573743236383100f9" - "1408746573743236383200fa1408746573743236383300fb1408746573743236383400fc1408746573743236383500" - "fd1408746573743236383600fe1408746573743236383700ff14087465737432363838008015087465737432363839" - "0081150874657374323639300082150874657374323639310083150874657374323639320084150874657374323639" - "3300851508746573743236393400861508746573743236393500871508746573743236393600881508746573743236" - "3937008915087465737432363938008a15087465737432363939008b15087465737432373030008c15087465737432" - "373031008d15087465737432373032008e15087465737432373033008f150874657374323730340090150874657374" - "3237303500911508746573743237303600921508746573743237303700931508746573743237303800941508746573" - "7432373039009515087465737432373130009615087465737432373131009715087465737432373132009815087465" - "737432373133009915087465737432373134009a15087465737432373135009b15087465737432373136009c150874" - "65737432373137009d15087465737432373138009e15087465737432373139009f1508746573743237323000a01508" - "746573743237323100a11508746573743237323200a21508746573743237323300a31508746573743237323400a415" - "08746573743237323500a51508746573743237323600a61508746573743237323700a71508746573743237323800a8" - "1508746573743237323900a91508746573743237333000aa1508746573743237333100ab1508746573743237333200" - "ac1508746573743237333300ad1508746573743237333400ae1508746573743237333500af15087465737432373336" - "00b01508746573743237333700b11508746573743237333800b21508746573743237333900b3150874657374323734" - "3000b41508746573743237343100b51508746573743237343200b61508746573743237343300b71508746573743237" - "343400b81508746573743237343500b91508746573743237343600ba1508746573743237343700bb15087465737432" - "37343800bc1508746573743237343900bd1508746573743237353000be1508746573743237353100bf150874657374" - "3237353200c01508746573743237353300c11508746573743237353400c21508746573743237353500c31508746573" - "743237353600c41508746573743237353700c51508746573743237353800c61508746573743237353900c715087465" - "73743237363000c81508746573743237363100c91508746573743237363200ca1508746573743237363300cb150874" - "6573743237363400cc1508746573743237363500cd1508746573743237363600ce1508746573743237363700cf1508" - "746573743237363800d01508746573743237363900d11508746573743237373000d21508746573743237373100d315" - "08746573743237373200d41508746573743237373300d51508746573743237373400d61508746573743237373500d7" - "1508746573743237373600d81508746573743237373700d91508746573743237373800da1508746573743237373900" - "db1508746573743237383000dc1508746573743237383100dd1508746573743237383200de15087465737432373833" - "00df1508746573743237383400e01508746573743237383500e11508746573743237383600e2150874657374323738" - "3700e31508746573743237383800e41508746573743237383900e51508746573743237393000e61508746573743237" - "393100e71508746573743237393200e81508746573743237393300e91508746573743237393400ea15087465737432" - "37393500eb1508746573743237393600ec1508746573743237393700ed1508746573743237393800ee150874657374" - "3237393900ef1508746573743238303000f01508746573743238303100f11508746573743238303200f21508746573" - "743238303300f31508746573743238303400f41508746573743238303500f51508746573743238303600f615087465" - "73743238303700f71508746573743238303800f81508746573743238303900f91508746573743238313000fa150874" - "6573743238313100fb1508746573743238313200fc1508746573743238313300fd1508746573743238313400fe1508" - "746573743238313500ff15087465737432383136008016087465737432383137008116087465737432383138008216" - "0874657374323831390083160874657374323832300084160874657374323832310085160874657374323832320086" - "1608746573743238323300871608746573743238323400881608746573743238323500891608746573743238323600" - "8a16087465737432383237008b16087465737432383238008c16087465737432383239008d16087465737432383330" - "008e16087465737432383331008f160874657374323833320090160874657374323833330091160874657374323833" - "3400921608746573743238333500931608746573743238333600941608746573743238333700951608746573743238" - "3338009616087465737432383339009716087465737432383430009816087465737432383431009916087465737432" - "383432009a16087465737432383433009b16087465737432383434009c16087465737432383435009d160874657374" - "32383436009e16087465737432383437009f1608746573743238343800a01608746573743238343900a11608746573" - "743238353000a21608746573743238353100a31608746573743238353200a41608746573743238353300a516087465" - "73743238353400a61608746573743238353500a71608746573743238353600a81608746573743238353700a9160874" - "6573743238353800aa1608746573743238353900ab1608746573743238363000ac1608746573743238363100ad1608" - "746573743238363200ae1608746573743238363300af1608746573743238363400b01608746573743238363500b116" - "08746573743238363600b21608746573743238363700b31608746573743238363800b41608746573743238363900b5" - "1608746573743238373000b61608746573743238373100b71608746573743238373200b81608746573743238373300" - "b91608746573743238373400ba1608746573743238373500bb1608746573743238373600bc16087465737432383737" - "00bd1608746573743238373800be1608746573743238373900bf1608746573743238383000c0160874657374323838" - "3100c11608746573743238383200c21608746573743238383300c31608746573743238383400c41608746573743238" - "383500c51608746573743238383600c61608746573743238383700c71608746573743238383800c816087465737432" - "38383900c91608746573743238393000ca1608746573743238393100cb1608746573743238393200cc160874657374" - "3238393300cd1608746573743238393400ce1608746573743238393500cf1608746573743238393600d01608746573" - "743238393700d11608746573743238393800d21608746573743238393900d31608746573743239303000d416087465" - "73743239303100d51608746573743239303200d61608746573743239303300d71608746573743239303400d8160874" - "6573743239303500d91608746573743239303600da1608746573743239303700db1608746573743239303800dc1608" - "746573743239303900dd1608746573743239313000de1608746573743239313100df1608746573743239313200e016" - "08746573743239313300e11608746573743239313400e21608746573743239313500e31608746573743239313600e4" - "1608746573743239313700e51608746573743239313800e61608746573743239313900e71608746573743239323000" - "e81608746573743239323100e91608746573743239323200ea1608746573743239323300eb16087465737432393234" - "00ec1608746573743239323500ed1608746573743239323600ee1608746573743239323700ef160874657374323932" - "3800f01608746573743239323900f11608746573743239333000f21608746573743239333100f31608746573743239" - "333200f41608746573743239333300f51608746573743239333400f61608746573743239333500f716087465737432" - "39333600f81608746573743239333700f91608746573743239333800fa1608746573743239333900fb160874657374" - "3239343000fc1608746573743239343100fd1608746573743239343200fe1608746573743239343300ff1608746573" - "7432393434008017087465737432393435008117087465737432393436008217087465737432393437008317087465" - "7374323934380084170874657374323934390085170874657374323935300086170874657374323935310087170874" - "65737432393532008817087465737432393533008917087465737432393534008a17087465737432393535008b1708" - "7465737432393536008c17087465737432393537008d17087465737432393538008e17087465737432393539008f17" - "0874657374323936300090170874657374323936310091170874657374323936320092170874657374323936330093" - "1708746573743239363400941708746573743239363500951708746573743239363600961708746573743239363700" - "9717087465737432393638009817087465737432393639009917087465737432393730009a17087465737432393731" - "009b17087465737432393732009c17087465737432393733009d17087465737432393734009e170874657374323937" - "35009f1708746573743239373600a01708746573743239373700a11708746573743239373800a21708746573743239" - "373900a31708746573743239383000a41708746573743239383100a51708746573743239383200a617087465737432" - "39383300a71708746573743239383400a81708746573743239383500a91708746573743239383600aa170874657374" - "3239383700ab1708746573743239383800ac1708746573743239383900ad1708746573743239393000ae1708746573" - "743239393100af1708746573743239393200b01708746573743239393300b11708746573743239393400b217087465" - "73743239393500b31708746573743239393600b41708746573743239393700b51708746573743239393800b6170874" - "6573743239393900b71708746573743330303000b81708746573743330303100b91708746573743330303200ba1708" - "746573743330303300bb1708746573743330303400bc1708746573743330303500bd1708746573743330303600be17" - "08746573743330303700bf1708746573743330303800c01708746573743330303900c11708746573743330313000c2" - "1708746573743330313100c31708746573743330313200c41708746573743330313300c51708746573743330313400" - "c61708746573743330313500c71708746573743330313600c81708746573743330313700c917087465737433303138" - "00ca1708746573743330313900cb1708746573743330323000cc1708746573743330323100cd170874657374333032" - "3200ce1708746573743330323300cf1708746573743330323400d01708746573743330323500d11708746573743330" - "323600d21708746573743330323700d31708746573743330323800d41708746573743330323900d517087465737433" - "30333000d61708746573743330333100d71708746573743330333200d81708746573743330333300d9170874657374" - "3330333400da1708746573743330333500db1708746573743330333600dc1708746573743330333700dd1708746573" - "743330333800de1708746573743330333900df1708746573743330343000e01708746573743330343100e117087465" - "73743330343200e21708746573743330343300e31708746573743330343400e41708746573743330343500e5170874" - "6573743330343600e61708746573743330343700e71708746573743330343800e81708746573743330343900e91708" - "746573743330353000ea1708746573743330353100eb1708746573743330353200ec1708746573743330353300ed17" - "08746573743330353400ee1708746573743330353500ef1708746573743330353600f01708746573743330353700f1" - "1708746573743330353800f21708746573743330353900f31708746573743330363000f41708746573743330363100" - "f51708746573743330363200f61708746573743330363300f71708746573743330363400f817087465737433303635" - "00f91708746573743330363600fa1708746573743330363700fb1708746573743330363800fc170874657374333036" - "3900fd1708746573743330373000fe1708746573743330373100ff1708746573743330373200801808746573743330" - "3733008118087465737433303734008218087465737433303735008318087465737433303736008418087465737433" - "3037370085180874657374333037380086180874657374333037390087180874657374333038300088180874657374" - "33303831008918087465737433303832008a18087465737433303833008b18087465737433303834008c1808746573" - "7433303835008d18087465737433303836008e18087465737433303837008f18087465737433303838009018087465" - "7374333038390091180874657374333039300092180874657374333039310093180874657374333039320094180874" - "6573743330393300951808746573743330393400961808746573743330393500971808746573743330393600981808" - "7465737433303937009918087465737433303938009a18087465737433303939009b18087465737433313030009c18" - "087465737433313031009d18087465737433313032009e18087465737433313033009f1808746573743331303400a0" - "1808746573743331303500a11808746573743331303600a21808746573743331303700a31808746573743331303800" - "a41808746573743331303900a51808746573743331313000a61808746573743331313100a718087465737433313132" - "00a81808746573743331313300a91808746573743331313400aa1808746573743331313500ab180874657374333131" - "3600ac1808746573743331313700ad1808746573743331313800ae1808746573743331313900af1808746573743331" - "323000b01808746573743331323100b11808746573743331323200b21808746573743331323300b318087465737433" - "31323400b41808746573743331323500b51808746573743331323600b61808746573743331323700b7180874657374" - "3331323800b81808746573743331323900b91808746573743331333000ba1808746573743331333100bb1808746573" - "743331333200bc1808746573743331333300bd1808746573743331333400be1808746573743331333500bf18087465" - "73743331333600c01808746573743331333700c11808746573743331333800c21808746573743331333900c3180874" - "6573743331343000c41808746573743331343100c51808746573743331343200c61808746573743331343300c71808" - "746573743331343400c81808746573743331343500c91808746573743331343600ca1808746573743331343700cb18" - "08746573743331343800cc1808746573743331343900cd1808746573743331353000ce1808746573743331353100cf" - "1808746573743331353200d01808746573743331353300d11808746573743331353400d21808746573743331353500" - "d31808746573743331353600d41808746573743331353700d51808746573743331353800d618087465737433313539" - "00d71808746573743331363000d81808746573743331363100d91808746573743331363200da180874657374333136" - "3300db1808746573743331363400dc1808746573743331363500dd1808746573743331363600de1808746573743331" - "363700df1808746573743331363800e01808746573743331363900e11808746573743331373000e218087465737433" - "31373100e31808746573743331373200e41808746573743331373300e51808746573743331373400e6180874657374" - "3331373500e71808746573743331373600e81808746573743331373700e91808746573743331373800ea1808746573" - "743331373900eb1808746573743331383000ec1808746573743331383100ed1808746573743331383200ee18087465" - "73743331383300ef1808746573743331383400f01808746573743331383500f11808746573743331383600f2180874" - "6573743331383700f31808746573743331383800f41808746573743331383900f51808746573743331393000f61808" - "746573743331393100f71808746573743331393200f81808746573743331393300f91808746573743331393400fa18" - "08746573743331393500fb1808746573743331393600fc1808746573743331393700fd1808746573743331393800fe" - "1808746573743331393900ff1808746573743332303000801908746573743332303100811908746573743332303200" - "8219087465737433323033008319087465737433323034008419087465737433323035008519087465737433323036" - "0086190874657374333230370087190874657374333230380088190874657374333230390089190874657374333231" - "30008a19087465737433323131008b19087465737433323132008c19087465737433323133008d1908746573743332" - "3134008e19087465737433323135008f19087465737433323136009019087465737433323137009119087465737433" - "3231380092190874657374333231390093190874657374333232300094190874657374333232310095190874657374" - "3332323200961908746573743332323300971908746573743332323400981908746573743332323500991908746573" - "7433323236009a19087465737433323237009b19087465737433323238009c19087465737433323239009d19087465" - "737433323330009e19087465737433323331009f1908746573743332333200a01908746573743332333300a1190874" - "6573743332333400a21908746573743332333500a31908746573743332333600a41908746573743332333700a51908" - "746573743332333800a61908746573743332333900a71908746573743332343000a81908746573743332343100a919" - "08746573743332343200aa1908746573743332343300ab1908746573743332343400ac1908746573743332343500ad" - "1908746573743332343600ae1908746573743332343700af1908746573743332343800b01908746573743332343900" - "b11908746573743332353000b21908746573743332353100b31908746573743332353200b419087465737433323533" - "00b51908746573743332353400b61908746573743332353500b71908746573743332353600b8190874657374333235" - "3700b91908746573743332353800ba1908746573743332353900bb1908746573743332363000bc1908746573743332" - "363100bd1908746573743332363200be1908746573743332363300bf1908746573743332363400c019087465737433" - "32363500c11908746573743332363600c21908746573743332363700c31908746573743332363800c4190874657374" - "3332363900c51908746573743332373000c61908746573743332373100c71908746573743332373200c81908746573" - "743332373300c91908746573743332373400ca1908746573743332373500cb1908746573743332373600cc19087465" - "73743332373700cd1908746573743332373800ce1908746573743332373900cf1908746573743332383000d0190874" - "6573743332383100d11908746573743332383200d21908746573743332383300d31908746573743332383400d41908" - "746573743332383500d51908746573743332383600d61908746573743332383700d71908746573743332383800d819" - "08746573743332383900d91908746573743332393000da1908746573743332393100db1908746573743332393200dc" - "1908746573743332393300dd1908746573743332393400de1908746573743332393500df1908746573743332393600" - "e01908746573743332393700e11908746573743332393800e21908746573743332393900e319087465737433333030" - "00e41908746573743333303100e51908746573743333303200e61908746573743333303300e7190874657374333330" - "3400e81908746573743333303500e91908746573743333303600ea1908746573743333303700eb1908746573743333" - "303800ec1908746573743333303900ed1908746573743333313000ee1908746573743333313100ef19087465737433" - "33313200f01908746573743333313300f11908746573743333313400f21908746573743333313500f3190874657374" - "3333313600f41908746573743333313700f51908746573743333313800f61908746573743333313900f71908746573" - "743333323000f81908746573743333323100f91908746573743333323200fa1908746573743333323300fb19087465" - "73743333323400fc1908746573743333323500fd1908746573743333323600fe1908746573743333323700ff190874" - "6573743333323800801a08746573743333323900811a08746573743333333000821a08746573743333333100831a08" - "746573743333333200841a08746573743333333300851a08746573743333333400861a08746573743333333500871a" - "08746573743333333600881a08746573743333333700891a087465737433333338008a1a087465737433333339008b" - "1a087465737433333430008c1a087465737433333431008d1a087465737433333432008e1a08746573743333343300" - "8f1a08746573743333343400901a08746573743333343500911a08746573743333343600921a087465737433333437" - "00931a08746573743333343800941a08746573743333343900951a08746573743333353000961a0874657374333335" - "3100971a08746573743333353200981a08746573743333353300991a087465737433333534009a1a08746573743333" - "3535009b1a087465737433333536009c1a087465737433333537009d1a087465737433333538009e1a087465737433" - "333539009f1a08746573743333363000a01a08746573743333363100a11a08746573743333363200a21a0874657374" - "3333363300a31a08746573743333363400a41a08746573743333363500a51a08746573743333363600a61a08746573" - "743333363700a71a08746573743333363800a81a08746573743333363900a91a08746573743333373000aa1a087465" - "73743333373100ab1a08746573743333373200ac1a08746573743333373300ad1a08746573743333373400ae1a0874" - "6573743333373500af1a08746573743333373600b01a08746573743333373700b11a08746573743333373800b21a08" - "746573743333373900b31a08746573743333383000b41a08746573743333383100b51a08746573743333383200b61a" - "08746573743333383300b71a08746573743333383400b81a08746573743333383500b91a08746573743333383600ba" - "1a08746573743333383700bb1a08746573743333383800bc1a08746573743333383900bd1a08746573743333393000" - "be1a08746573743333393100bf1a08746573743333393200c01a08746573743333393300c11a087465737433333934" - "00c21a08746573743333393500c31a08746573743333393600c41a08746573743333393700c51a0874657374333339" - "3800c61a08746573743333393900c71a08746573743334303000c81a08746573743334303100c91a08746573743334" - "303200ca1a08746573743334303300cb1a08746573743334303400cc1a08746573743334303500cd1a087465737433" - "34303600ce1a08746573743334303700cf1a08746573743334303800d01a08746573743334303900d11a0874657374" - "3334313000d21a08746573743334313100d31a08746573743334313200d41a08746573743334313300d51a08746573" - "743334313400d61a08746573743334313500d71a08746573743334313600d81a08746573743334313700d91a087465" - "73743334313800da1a08746573743334313900db1a08746573743334323000dc1a08746573743334323100dd1a0874" - "6573743334323200de1a08746573743334323300df1a08746573743334323400e01a08746573743334323500e11a08" - "746573743334323600e21a08746573743334323700e31a08746573743334323800e41a08746573743334323900e51a" - "08746573743334333000e61a08746573743334333100e71a08746573743334333200e81a08746573743334333300e9" - "1a08746573743334333400ea1a08746573743334333500eb1a08746573743334333600ec1a08746573743334333700" - "ed1a08746573743334333800ee1a08746573743334333900ef1a08746573743334343000f01a087465737433343431" - "00f11a08746573743334343200f21a08746573743334343300f31a08746573743334343400f41a0874657374333434" - "3500f51a08746573743334343600f61a08746573743334343700f71a08746573743334343800f81a08746573743334" - "343900f91a08746573743334353000fa1a08746573743334353100fb1a08746573743334353200fc1a087465737433" - "34353300fd1a08746573743334353400fe1a08746573743334353500ff1a08746573743334353600801b0874657374" - "3334353700811b08746573743334353800821b08746573743334353900831b08746573743334363000841b08746573" - "743334363100851b08746573743334363200861b08746573743334363300871b08746573743334363400881b087465" - "73743334363500891b087465737433343636008a1b087465737433343637008b1b087465737433343638008c1b0874" - "65737433343639008d1b087465737433343730008e1b087465737433343731008f1b08746573743334373200901b08" - "746573743334373300911b08746573743334373400921b08746573743334373500931b08746573743334373600941b" - "08746573743334373700951b08746573743334373800961b08746573743334373900971b0874657374333438300098" - "1b08746573743334383100991b087465737433343832009a1b087465737433343833009b1b08746573743334383400" - "9c1b087465737433343835009d1b087465737433343836009e1b087465737433343837009f1b087465737433343838" - "00a01b08746573743334383900a11b08746573743334393000a21b08746573743334393100a31b0874657374333439" - "3200a41b08746573743334393300a51b08746573743334393400a61b08746573743334393500a71b08746573743334" - "393600a81b08746573743334393700a91b08746573743334393800aa1b08746573743334393900ab1b087465737433" - "35303000ac1b08746573743335303100ad1b08746573743335303200ae1b08746573743335303300af1b0874657374" - "3335303400b01b08746573743335303500b11b08746573743335303600b21b08746573743335303700b31b08746573" - "743335303800b41b08746573743335303900b51b08746573743335313000b61b08746573743335313100b71b087465" - "73743335313200b81b08746573743335313300b91b08746573743335313400ba1b08746573743335313500bb1b0874" - "6573743335313600bc1b08746573743335313700bd1b08746573743335313800be1b08746573743335313900bf1b08" - "746573743335323000c01b08746573743335323100c11b08746573743335323200c21b08746573743335323300c31b" - "08746573743335323400c41b08746573743335323500c51b08746573743335323600c61b08746573743335323700c7" - "1b08746573743335323800c81b08746573743335323900c91b08746573743335333000ca1b08746573743335333100" - "cb1b08746573743335333200cc1b08746573743335333300cd1b08746573743335333400ce1b087465737433353335" - "00cf1b08746573743335333600d01b08746573743335333700d11b08746573743335333800d21b0874657374333533" - "3900d31b08746573743335343000d41b08746573743335343100d51b08746573743335343200d61b08746573743335" - "343300d71b08746573743335343400d81b08746573743335343500d91b08746573743335343600da1b087465737433" - "35343700db1b08746573743335343800dc1b08746573743335343900dd1b08746573743335353000de1b0874657374" - "3335353100df1b08746573743335353200e01b08746573743335353300e11b08746573743335353400e21b08746573" - "743335353500e31b08746573743335353600e41b08746573743335353700e51b08746573743335353800e61b087465" - "73743335353900e71b08746573743335363000e81b08746573743335363100e91b08746573743335363200ea1b0874" - "6573743335363300eb1b08746573743335363400ec1b08746573743335363500ed1b08746573743335363600ee1b08" - "746573743335363700ef1b08746573743335363800f01b08746573743335363900f11b08746573743335373000f21b" - "08746573743335373100f31b08746573743335373200f41b08746573743335373300f51b08746573743335373400f6" - "1b08746573743335373500f71b08746573743335373600f81b08746573743335373700f91b08746573743335373800" - "fa1b08746573743335373900fb1b08746573743335383000fc1b08746573743335383100fd1b087465737433353832" - "00fe1b08746573743335383300ff1b08746573743335383400801c08746573743335383500811c0874657374333538" - "3600821c08746573743335383700831c08746573743335383800841c08746573743335383900851c08746573743335" - "393000861c08746573743335393100871c08746573743335393200881c08746573743335393300891c087465737433" - "353934008a1c087465737433353935008b1c087465737433353936008c1c087465737433353937008d1c0874657374" - "33353938008e1c087465737433353939008f1c08746573743336303000901c08746573743336303100911c08746573" - "743336303200921c08746573743336303300931c08746573743336303400941c08746573743336303500951c087465" - "73743336303600961c08746573743336303700971c08746573743336303800981c08746573743336303900991c0874" - "65737433363130009a1c087465737433363131009b1c087465737433363132009c1c087465737433363133009d1c08" - "7465737433363134009e1c087465737433363135009f1c08746573743336313600a01c08746573743336313700a11c" - "08746573743336313800a21c08746573743336313900a31c08746573743336323000a41c08746573743336323100a5" - "1c08746573743336323200a61c08746573743336323300a71c08746573743336323400a81c08746573743336323500" - "a91c08746573743336323600aa1c08746573743336323700ab1c08746573743336323800ac1c087465737433363239" - "00ad1c08746573743336333000ae1c08746573743336333100af1c08746573743336333200b01c0874657374333633" - "3300b11c08746573743336333400b21c08746573743336333500b31c08746573743336333600b41c08746573743336" - "333700b51c08746573743336333800b61c08746573743336333900b71c08746573743336343000b81c087465737433" - "36343100b91c08746573743336343200ba1c08746573743336343300bb1c08746573743336343400bc1c0874657374" - "3336343500bd1c08746573743336343600be1c08746573743336343700bf1c08746573743336343800c01c08746573" - "743336343900c11c08746573743336353000c21c08746573743336353100c31c08746573743336353200c41c087465" - "73743336353300c51c08746573743336353400c61c08746573743336353500c71c08746573743336353600c81c0874" - "6573743336353700c91c08746573743336353800ca1c08746573743336353900cb1c08746573743336363000cc1c08" - "746573743336363100cd1c08746573743336363200ce1c08746573743336363300cf1c08746573743336363400d01c" - "08746573743336363500d11c08746573743336363600d21c08746573743336363700d31c08746573743336363800d4" - "1c08746573743336363900d51c08746573743336373000d61c08746573743336373100d71c08746573743336373200" - "d81c08746573743336373300d91c08746573743336373400da1c08746573743336373500db1c087465737433363736" - "00dc1c08746573743336373700dd1c08746573743336373800de1c08746573743336373900df1c0874657374333638" - "3000e01c08746573743336383100e11c08746573743336383200e21c08746573743336383300e31c08746573743336" - "383400e41c08746573743336383500e51c08746573743336383600e61c08746573743336383700e71c087465737433" - "36383800e81c08746573743336383900e91c08746573743336393000ea1c08746573743336393100eb1c0874657374" - "3336393200ec1c08746573743336393300ed1c08746573743336393400ee1c08746573743336393500ef1c08746573" - "743336393600f01c08746573743336393700f11c08746573743336393800f21c08746573743336393900f31c087465" - "73743337303000f41c08746573743337303100f51c08746573743337303200f61c08746573743337303300f71c0874" - "6573743337303400f81c08746573743337303500f91c08746573743337303600fa1c08746573743337303700fb1c08" - "746573743337303800fc1c08746573743337303900fd1c08746573743337313000fe1c08746573743337313100ff1c" - "08746573743337313200801d08746573743337313300811d08746573743337313400821d0874657374333731350083" - "1d08746573743337313600841d08746573743337313700851d08746573743337313800861d08746573743337313900" - "871d08746573743337323000881d08746573743337323100891d087465737433373232008a1d087465737433373233" - "008b1d087465737433373234008c1d087465737433373235008d1d087465737433373236008e1d0874657374333732" - "37008f1d08746573743337323800901d08746573743337323900911d08746573743337333000921d08746573743337" - "333100931d08746573743337333200941d08746573743337333300951d08746573743337333400961d087465737433" - "37333500971d08746573743337333600981d08746573743337333700991d087465737433373338009a1d0874657374" - "33373339009b1d087465737433373430009c1d087465737433373431009d1d087465737433373432009e1d08746573" - "7433373433009f1d08746573743337343400a01d08746573743337343500a11d08746573743337343600a21d087465" - "73743337343700a31d08746573743337343800a41d08746573743337343900a51d08746573743337353000a61d0874" - "6573743337353100a71d08746573743337353200a81d08746573743337353300a91d08746573743337353400aa1d08" - "746573743337353500ab1d08746573743337353600ac1d08746573743337353700ad1d08746573743337353800ae1d" - "08746573743337353900af1d08746573743337363000b01d08746573743337363100b11d08746573743337363200b2" - "1d08746573743337363300b31d08746573743337363400b41d08746573743337363500b51d08746573743337363600" - "b61d08746573743337363700b71d08746573743337363800b81d08746573743337363900b91d087465737433373730" - "00ba1d08746573743337373100bb1d08746573743337373200bc1d08746573743337373300bd1d0874657374333737" - "3400be1d08746573743337373500bf1d08746573743337373600c01d08746573743337373700c11d08746573743337" - "373800c21d08746573743337373900c31d08746573743337383000c41d08746573743337383100c51d087465737433" - "37383200c61d08746573743337383300c71d08746573743337383400c81d08746573743337383500c91d0874657374" - "3337383600ca1d08746573743337383700cb1d08746573743337383800cc1d08746573743337383900cd1d08746573" - "743337393000ce1d08746573743337393100cf1d08746573743337393200d01d08746573743337393300d11d087465" - "73743337393400d21d08746573743337393500d31d08746573743337393600d41d08746573743337393700d51d0874" - "6573743337393800d61d08746573743337393900d71d08746573743338303000d81d08746573743338303100d91d08" - "746573743338303200da1d08746573743338303300db1d08746573743338303400dc1d08746573743338303500dd1d" - "08746573743338303600de1d08746573743338303700df1d08746573743338303800e01d08746573743338303900e1" - "1d08746573743338313000e21d08746573743338313100e31d08746573743338313200e41d08746573743338313300" - "e51d08746573743338313400e61d08746573743338313500e71d08746573743338313600e81d087465737433383137" - "00e91d08746573743338313800ea1d08746573743338313900eb1d08746573743338323000ec1d0874657374333832" - "3100ed1d08746573743338323200ee1d08746573743338323300ef1d08746573743338323400f01d08746573743338" - "323500f11d08746573743338323600f21d08746573743338323700f31d08746573743338323800f41d087465737433" - "38323900f51d08746573743338333000f61d08746573743338333100f71d08746573743338333200f81d0874657374" - "3338333300f91d08746573743338333400fa1d08746573743338333500fb1d08746573743338333600fc1d08746573" - "743338333700fd1d08746573743338333800fe1d08746573743338333900ff1d08746573743338343000801e087465" - "73743338343100811e08746573743338343200821e08746573743338343300831e08746573743338343400841e0874" - "6573743338343500851e08746573743338343600861e08746573743338343700871e08746573743338343800881e08" - "746573743338343900891e087465737433383530008a1e087465737433383531008b1e087465737433383532008c1e" - "087465737433383533008d1e087465737433383534008e1e087465737433383535008f1e0874657374333835360090" - "1e08746573743338353700911e08746573743338353800921e08746573743338353900931e08746573743338363000" - "941e08746573743338363100951e08746573743338363200961e08746573743338363300971e087465737433383634" - "00981e08746573743338363500991e087465737433383636009a1e087465737433383637009b1e0874657374333836" - "38009c1e087465737433383639009d1e087465737433383730009e1e087465737433383731009f1e08746573743338" - "373200a01e08746573743338373300a11e08746573743338373400a21e08746573743338373500a31e087465737433" - "38373600a41e08746573743338373700a51e08746573743338373800a61e08746573743338373900a71e0874657374" - "3338383000a81e08746573743338383100a91e08746573743338383200aa1e08746573743338383300ab1e08746573" - "743338383400ac1e08746573743338383500ad1e08746573743338383600ae1e08746573743338383700af1e087465" - "73743338383800b01e08746573743338383900b11e08746573743338393000b21e08746573743338393100b31e0874" - "6573743338393200b41e08746573743338393300b51e08746573743338393400b61e08746573743338393500b71e08" - "746573743338393600b81e08746573743338393700b91e08746573743338393800ba1e08746573743338393900bb1e" - "08746573743339303000bc1e08746573743339303100bd1e08746573743339303200be1e08746573743339303300bf" - "1e08746573743339303400c01e08746573743339303500c11e08746573743339303600c21e08746573743339303700" - "c31e08746573743339303800c41e08746573743339303900c51e08746573743339313000c61e087465737433393131" - "00c71e08746573743339313200c81e08746573743339313300c91e08746573743339313400ca1e0874657374333931" - "3500cb1e08746573743339313600cc1e08746573743339313700cd1e08746573743339313800ce1e08746573743339" - "313900cf1e08746573743339323000d01e08746573743339323100d11e08746573743339323200d21e087465737433" - "39323300d31e08746573743339323400d41e08746573743339323500d51e08746573743339323600d61e0874657374" - "3339323700d71e08746573743339323800d81e08746573743339323900d91e08746573743339333000da1e08746573" - "743339333100db1e08746573743339333200dc1e08746573743339333300dd1e08746573743339333400de1e087465" - "73743339333500df1e08746573743339333600e01e08746573743339333700e11e08746573743339333800e21e0874" - "6573743339333900e31e08746573743339343000e41e08746573743339343100e51e08746573743339343200e61e08" - "746573743339343300e71e08746573743339343400e81e08746573743339343500e91e08746573743339343600ea1e" - "08746573743339343700eb1e08746573743339343800ec1e08746573743339343900ed1e08746573743339353000ee" - "1e08746573743339353100ef1e08746573743339353200f01e08746573743339353300f11e08746573743339353400" - "f21e08746573743339353500f31e08746573743339353600f41e08746573743339353700f51e087465737433393538" - "00f61e08746573743339353900f71e08746573743339363000f81e08746573743339363100f91e0874657374333936" - "3200fa1e08746573743339363300fb1e08746573743339363400fc1e08746573743339363500fd1e08746573743339" - "363600fe1e08746573743339363700ff1e08746573743339363800801f08746573743339363900811f087465737433" - "39373000821f08746573743339373100831f08746573743339373200841f08746573743339373300851f0874657374" - "3339373400861f08746573743339373500871f08746573743339373600881f08746573743339373700891f08746573" - "7433393738008a1f087465737433393739008b1f087465737433393830008c1f087465737433393831008d1f087465" - "737433393832008e1f087465737433393833008f1f08746573743339383400901f08746573743339383500911f0874" - "6573743339383600921f08746573743339383700931f08746573743339383800941f08746573743339383900951f08" - "746573743339393000961f08746573743339393100971f08746573743339393200981f08746573743339393300991f" - "087465737433393934009a1f087465737433393935009b1f087465737433393936009c1f087465737433393937009d" - "1f087465737433393938009e1f087465737433393939009f1f08746573743430303000a01f08746573743430303100" - "a11f08746573743430303200a21f08746573743430303300a31f08746573743430303400a41f087465737434303035" - "00a51f08746573743430303600a61f08746573743430303700a71f08746573743430303800a81f0874657374343030" - "3900a91f08746573743430313000aa1f08746573743430313100ab1f08746573743430313200ac1f08746573743430" - "313300ad1f08746573743430313400ae1f08746573743430313500af1f08746573743430313600b01f087465737434" - "30313700b11f08746573743430313800b21f08746573743430313900b31f08746573743430323000b41f0874657374" - "3430323100b51f08746573743430323200b61f08746573743430323300b71f08746573743430323400b81f08746573" - "743430323500b91f08746573743430323600ba1f08746573743430323700bb1f08746573743430323800bc1f087465" - "73743430323900bd1f08746573743430333000be1f08746573743430333100bf1f08746573743430333200c01f0874" - "6573743430333300c11f08746573743430333400c21f08746573743430333500c31f08746573743430333600c41f08" - "746573743430333700c51f08746573743430333800c61f08746573743430333900c71f08746573743430343000c81f" - "08746573743430343100c91f08746573743430343200ca1f08746573743430343300cb1f08746573743430343400cc" - "1f08746573743430343500cd1f08746573743430343600ce1f08746573743430343700cf1f08746573743430343800" - "d01f08746573743430343900d11f08746573743430353000d21f08746573743430353100d31f087465737434303532" - "00d41f08746573743430353300d51f08746573743430353400d61f08746573743430353500d71f0874657374343035" - "3600d81f08746573743430353700d91f08746573743430353800da1f08746573743430353900db1f08746573743430" - "363000dc1f08746573743430363100dd1f08746573743430363200de1f08746573743430363300df1f087465737434" - "30363400e01f08746573743430363500e11f08746573743430363600e21f08746573743430363700e31f0874657374" - "3430363800e41f08746573743430363900e51f08746573743430373000e61f08746573743430373100e71f08746573" - "743430373200e81f08746573743430373300e91f08746573743430373400ea1f08746573743430373500eb1f087465" - "73743430373600ec1f08746573743430373700ed1f08746573743430373800ee1f08746573743430373900ef1f0874" - "6573743430383000f01f08746573743430383100f11f08746573743430383200f21f08746573743430383300f31f08" - "746573743430383400f41f08746573743430383500f51f08746573743430383600f61f08746573743430383700f71f" - "08746573743430383800f81f08746573743430383900f91f08746573743430393000fa1f08746573743430393100fb" - "1f08746573743430393200fc1f08746573743430393300fd1f08746573743430393400fe1f08746573743430393500" - "ff1f087465737434303936008020087465737434303937008120087465737434303938008220087465737434303939" - "0083200874657374343130300084200874657374343130310085200874657374343130320086200874657374343130" - "33008720087465737434313034008820087465737434313035008920087465737434313036008a2008746573743431" - "3037008b20087465737434313038008c20087465737434313039008d20087465737434313130008e20087465737434" - "313131008f200874657374343131320090200874657374343131330091200874657374343131340092200874657374" - "3431313500932008746573743431313600942008746573743431313700952008746573743431313800962008746573" - "7434313139009720087465737434313230009820087465737434313231009920087465737434313232009a20087465" - "737434313233009b20087465737434313234009c20087465737434313235009d20087465737434313236009e200874" - "65737434313237009f2008746573743431323800a02008746573743431323900a12008746573743431333000a22008" - "746573743431333100a32008746573743431333200a42008746573743431333300a52008746573743431333400a620" - "08746573743431333500a72008746573743431333600a82008746573743431333700a92008746573743431333800aa" - "2008746573743431333900ab2008746573743431343000ac2008746573743431343100ad2008746573743431343200" - "ae2008746573743431343300af2008746573743431343400b02008746573743431343500b120087465737434313436" - "00b22008746573743431343700b32008746573743431343800b42008746573743431343900b5200874657374343135" - "3000b62008746573743431353100b72008746573743431353200b82008746573743431353300b92008746573743431" - "353400ba2008746573743431353500bb2008746573743431353600bc2008746573743431353700bd20087465737434" - "31353800be2008746573743431353900bf2008746573743431363000c02008746573743431363100c1200874657374" - "3431363200c22008746573743431363300c32008746573743431363400c42008746573743431363500c52008746573" - "743431363600c62008746573743431363700c72008746573743431363800c82008746573743431363900c920087465" - "73743431373000ca2008746573743431373100cb2008746573743431373200cc2008746573743431373300cd200874" - "6573743431373400ce2008746573743431373500cf2008746573743431373600d02008746573743431373700d12008" - "746573743431373800d22008746573743431373900d32008746573743431383000d42008746573743431383100d520" - "08746573743431383200d62008746573743431383300d72008746573743431383400d82008746573743431383500d9" - "2008746573743431383600da2008746573743431383700db2008746573743431383800dc2008746573743431383900" - "dd2008746573743431393000de2008746573743431393100df2008746573743431393200e020087465737434313933" - "00e12008746573743431393400e22008746573743431393500e32008746573743431393600e4200874657374343139" - "3700e52008746573743431393800e62008746573743431393900e72008746573743432303000e82008746573743432" - "303100e92008746573743432303200ea2008746573743432303300eb2008746573743432303400ec20087465737434" - "32303500ed2008746573743432303600ee2008746573743432303700ef2008746573743432303800f0200874657374" - "3432303900f12008746573743432313000f22008746573743432313100f32008746573743432313200f42008746573" - "743432313300f52008746573743432313400f62008746573743432313500f72008746573743432313600f820087465" - "73743432313700f92008746573743432313800fa2008746573743432313900fb2008746573743432323000fc200874" - "6573743432323100fd2008746573743432323200fe2008746573743432323300ff2008746573743432323400802108" - "7465737434323235008121087465737434323236008221087465737434323237008321087465737434323238008421" - "0874657374343232390085210874657374343233300086210874657374343233310087210874657374343233320088" - "21087465737434323333008921087465737434323334008a21087465737434323335008b2108746573743432333600" - "8c21087465737434323337008d21087465737434323338008e21087465737434323339008f21087465737434323430" - "0090210874657374343234310091210874657374343234320092210874657374343234330093210874657374343234" - "3400942108746573743432343500952108746573743432343600962108746573743432343700972108746573743432" - "3438009821087465737434323439009921087465737434323530009a21087465737434323531009b21087465737434" - "323532009c21087465737434323533009d21087465737434323534009e21087465737434323535009f210874657374" - "3432353600a02108746573743432353700a12108746573743432353800a22108746573743432353900a32108746573" - "743432363000a42108746573743432363100a52108746573743432363200a62108746573743432363300a721087465" - "73743432363400a82108746573743432363500a92108746573743432363600aa2108746573743432363700ab210874" - "6573743432363800ac2108746573743432363900ad2108746573743432373000ae2108746573743432373100af2108" - "746573743432373200b02108746573743432373300b12108746573743432373400b22108746573743432373500b321" - "08746573743432373600b42108746573743432373700b52108746573743432373800b62108746573743432373900b7" - "2108746573743432383000b82108746573743432383100b92108746573743432383200ba2108746573743432383300" - "bb2108746573743432383400bc2108746573743432383500bd2108746573743432383600be21087465737434323837" - "00bf2108746573743432383800c02108746573743432383900c12108746573743432393000c2210874657374343239" - "3100c32108746573743432393200c42108746573743432393300c52108746573743432393400c62108746573743432" - "393500c72108746573743432393600c82108746573743432393700c92108746573743432393800ca21087465737434" - "32393900cb2108746573743433303000cc2108746573743433303100cd2108746573743433303200ce210874657374" - "3433303300cf2108746573743433303400d02108746573743433303500d12108746573743433303600d22108746573" - "743433303700d32108746573743433303800d42108746573743433303900d52108746573743433313000d621087465" - "73743433313100d72108746573743433313200d82108746573743433313300d92108746573743433313400da210874" - "6573743433313500db2108746573743433313600dc2108746573743433313700dd2108746573743433313800de2108" - "746573743433313900df2108746573743433323000e02108746573743433323100e12108746573743433323200e221" - "08746573743433323300e32108746573743433323400e42108746573743433323500e52108746573743433323600e6" - "2108746573743433323700e72108746573743433323800e82108746573743433323900e92108746573743433333000" - "ea2108746573743433333100eb2108746573743433333200ec2108746573743433333300ed21087465737434333334" - "00ee2108746573743433333500ef2108746573743433333600f02108746573743433333700f1210874657374343333" - "3800f22108746573743433333900f32108746573743433343000f42108746573743433343100f52108746573743433" - "343200f62108746573743433343300f72108746573743433343400f82108746573743433343500f921087465737434" - "33343600fa2108746573743433343700fb2108746573743433343800fc2108746573743433343900fd210874657374" - "3433353000fe2108746573743433353100ff2108746573743433353200802208746573743433353300812208746573" - "7434333534008222087465737434333535008322087465737434333536008422087465737434333537008522087465" - "7374343335380086220874657374343335390087220874657374343336300088220874657374343336310089220874" - "65737434333632008a22087465737434333633008b22087465737434333634008c22087465737434333635008d2208" - "7465737434333636008e22087465737434333637008f22087465737434333638009022087465737434333639009122" - "0874657374343337300092220874657374343337310093220874657374343337320094220874657374343337330095" - "2208746573743433373400962208746573743433373500972208746573743433373600982208746573743433373700" - "9922087465737434333738009a22087465737434333739009b22087465737434333830009c22087465737434333831" - "009d22087465737434333832009e22087465737434333833009f2208746573743433383400a0220874657374343338" - "3500a12208746573743433383600a22208746573743433383700a32208746573743433383800a42208746573743433" - "383900a52208746573743433393000a62208746573743433393100a72208746573743433393200a822087465737434" - "33393300a92208746573743433393400aa2208746573743433393500ab2208746573743433393600ac220874657374" - "3433393700ad2208746573743433393800ae2208746573743433393900af2208746573743434303000b02208746573" - "743434303100b12208746573743434303200b22208746573743434303300b32208746573743434303400b422087465" - "73743434303500b52208746573743434303600b62208746573743434303700b72208746573743434303800b8220874" - "6573743434303900b92208746573743434313000ba2208746573743434313100bb2208746573743434313200bc2208" - "746573743434313300bd2208746573743434313400be2208746573743434313500bf2208746573743434313600c022" - "08746573743434313700c12208746573743434313800c22208746573743434313900c32208746573743434323000c4" - "2208746573743434323100c52208746573743434323200c62208746573743434323300c72208746573743434323400" - "c82208746573743434323500c92208746573743434323600ca2208746573743434323700cb22087465737434343238" - "00cc2208746573743434323900cd2208746573743434333000ce2208746573743434333100cf220874657374343433" - "3200d02208746573743434333300d12208746573743434333400d22208746573743434333500d32208746573743434" - "333600d42208746573743434333700d52208746573743434333800d62208746573743434333900d722087465737434" - "34343000d82208746573743434343100d92208746573743434343200da2208746573743434343300db220874657374" - "3434343400dc2208746573743434343500dd2208746573743434343600de2208746573743434343700df2208746573" - "743434343800e02208746573743434343900e12208746573743434353000e22208746573743434353100e322087465" - "73743434353200e42208746573743434353300e52208746573743434353400e62208746573743434353500e7220874" - "6573743434353600e82208746573743434353700e92208746573743434353800ea2208746573743434353900eb2208" - "746573743434363000ec2208746573743434363100ed2208746573743434363200ee2208746573743434363300ef22" - "08746573743434363400f02208746573743434363500f12208746573743434363600f22208746573743434363700f3" - "2208746573743434363800f42208746573743434363900f52208746573743434373000f62208746573743434373100" - "f72208746573743434373200f82208746573743434373300f92208746573743434373400fa22087465737434343735" - "00fb2208746573743434373600fc2208746573743434373700fd2208746573743434373800fe220874657374343437" - "3900ff2208746573743434383000802308746573743434383100812308746573743434383200822308746573743434" - "3833008323087465737434343834008423087465737434343835008523087465737434343836008623087465737434" - "343837008723087465737434343838008823087465737434343839008923087465737434343930008a230874657374" - "34343931008b23087465737434343932008c23087465737434343933008d23087465737434343934008e2308746573" - "7434343935008f23087465737434343936009023087465737434343937009123087465737434343938009223087465" - "7374343439390093230874657374343530300094230874657374343530310095230874657374343530320096230874" - "65737434353033009723087465737434353034009823087465737434353035009923087465737434353036009a2308" - "7465737434353037009b23087465737434353038009c23087465737434353039009d23087465737434353130009e23" - "087465737434353131009f2308746573743435313200a02308746573743435313300a12308746573743435313400a2" - "2308746573743435313500a32308746573743435313600a42308746573743435313700a52308746573743435313800" - "a62308746573743435313900a72308746573743435323000a82308746573743435323100a923087465737434353232" - "00aa2308746573743435323300ab2308746573743435323400ac2308746573743435323500ad230874657374343532" - "3600ae2308746573743435323700af2308746573743435323800b02308746573743435323900b12308746573743435" - "333000b22308746573743435333100b32308746573743435333200b42308746573743435333300b523087465737434" - "35333400b62308746573743435333500b72308746573743435333600b82308746573743435333700b9230874657374" - "3435333800ba2308746573743435333900bb2308746573743435343000bc2308746573743435343100bd2308746573" - "743435343200be2308746573743435343300bf2308746573743435343400c02308746573743435343500c123087465" - "73743435343600c22308746573743435343700c32308746573743435343800c42308746573743435343900c5230874" - "6573743435353000c62308746573743435353100c72308746573743435353200c82308746573743435353300c92308" - "746573743435353400ca2308746573743435353500cb2308746573743435353600cc2308746573743435353700cd23" - "08746573743435353800ce2308746573743435353900cf2308746573743435363000d02308746573743435363100d1" - "2308746573743435363200d22308746573743435363300d32308746573743435363400d42308746573743435363500" - "d52308746573743435363600d62308746573743435363700d72308746573743435363800d823087465737434353639" - "00d92308746573743435373000da2308746573743435373100db2308746573743435373200dc230874657374343537" - "3300dd2308746573743435373400de2308746573743435373500df2308746573743435373600e02308746573743435" - "373700e12308746573743435373800e22308746573743435373900e32308746573743435383000e423087465737434" - "35383100e52308746573743435383200e62308746573743435383300e72308746573743435383400e8230874657374" - "3435383500e92308746573743435383600ea2308746573743435383700eb2308746573743435383800ec2308746573" - "743435383900ed2308746573743435393000ee2308746573743435393100ef2308746573743435393200f023087465" - "73743435393300f12308746573743435393400f22308746573743435393500f32308746573743435393600f4230874" - "6573743435393700f52308746573743435393800f62308746573743435393900f72308746573743436303000f82308" - "746573743436303100f92308746573743436303200fa2308746573743436303300fb2308746573743436303400fc23" - "08746573743436303500fd2308746573743436303600fe2308746573743436303700ff230874657374343630380080" - "2408746573743436303900812408746573743436313000822408746573743436313100832408746573743436313200" - "8424087465737434363133008524087465737434363134008624087465737434363135008724087465737434363136" - "008824087465737434363137008924087465737434363138008a24087465737434363139008b240874657374343632" - "30008c24087465737434363231008d24087465737434363232008e24087465737434363233008f2408746573743436" - "3234009024087465737434363235009124087465737434363236009224087465737434363237009324087465737434" - "3632380094240874657374343632390095240874657374343633300096240874657374343633310097240874657374" - "34363332009824087465737434363333009924087465737434363334009a24087465737434363335009b2408746573" - "7434363336009c24087465737434363337009d24087465737434363338009e24087465737434363339009f24087465" - "73743436343000a02408746573743436343100a12408746573743436343200a22408746573743436343300a3240874" - "6573743436343400a42408746573743436343500a52408746573743436343600a62408746573743436343700a72408" - "746573743436343800a82408746573743436343900a92408746573743436353000aa2408746573743436353100ab24" - "08746573743436353200ac2408746573743436353300ad2408746573743436353400ae2408746573743436353500af" - "2408746573743436353600b02408746573743436353700b12408746573743436353800b22408746573743436353900" - "b32408746573743436363000b42408746573743436363100b52408746573743436363200b624087465737434363633" - "00b72408746573743436363400b82408746573743436363500b92408746573743436363600ba240874657374343636" - "3700bb2408746573743436363800bc2408746573743436363900bd2408746573743436373000be2408746573743436" - "373100bf2408746573743436373200c02408746573743436373300c12408746573743436373400c224087465737434" - "36373500c32408746573743436373600c42408746573743436373700c52408746573743436373800c6240874657374" - "3436373900c72408746573743436383000c82408746573743436383100c92408746573743436383200ca2408746573" - "743436383300cb2408746573743436383400cc2408746573743436383500cd2408746573743436383600ce24087465" - "73743436383700cf2408746573743436383800d02408746573743436383900d12408746573743436393000d2240874" - "6573743436393100d32408746573743436393200d42408746573743436393300d52408746573743436393400d62408" - "746573743436393500d72408746573743436393600d82408746573743436393700d92408746573743436393800da24" - "08746573743436393900db2408746573743437303000dc2408746573743437303100dd2408746573743437303200de" - "2408746573743437303300df2408746573743437303400e02408746573743437303500e12408746573743437303600" - "e22408746573743437303700e32408746573743437303800e42408746573743437303900e524087465737434373130" - "00e62408746573743437313100e72408746573743437313200e82408746573743437313300e9240874657374343731" - "3400ea2408746573743437313500eb2408746573743437313600ec2408746573743437313700ed2408746573743437" - "313800ee2408746573743437313900ef2408746573743437323000f02408746573743437323100f124087465737434" - "37323200f22408746573743437323300f32408746573743437323400f42408746573743437323500f5240874657374" - "3437323600f62408746573743437323700f72408746573743437323800f82408746573743437323900f92408746573" - "743437333000fa2408746573743437333100fb2408746573743437333200fc2408746573743437333300fd24087465" - "73743437333400fe2408746573743437333500ff240874657374343733360080250874657374343733370081250874" - "6573743437333800822508746573743437333900832508746573743437343000842508746573743437343100852508" - "7465737434373432008625087465737434373433008725087465737434373434008825087465737434373435008925" - "087465737434373436008a25087465737434373437008b25087465737434373438008c25087465737434373439008d" - "25087465737434373530008e25087465737434373531008f2508746573743437353200902508746573743437353300" - "9125087465737434373534009225087465737434373535009325087465737434373536009425087465737434373537" - "0095250874657374343735380096250874657374343735390097250874657374343736300098250874657374343736" - "31009925087465737434373632009a25087465737434373633009b25087465737434373634009c2508746573743437" - "3635009d25087465737434373636009e25087465737434373637009f2508746573743437363800a025087465737434" - "37363900a12508746573743437373000a22508746573743437373100a32508746573743437373200a4250874657374" - "3437373300a52508746573743437373400a62508746573743437373500a72508746573743437373600a82508746573" - "743437373700a92508746573743437373800aa2508746573743437373900ab2508746573743437383000ac25087465" - "73743437383100ad2508746573743437383200ae2508746573743437383300af2508746573743437383400b0250874" - "6573743437383500b12508746573743437383600b22508746573743437383700b32508746573743437383800b42508" - "746573743437383900b52508746573743437393000b62508746573743437393100b72508746573743437393200b825" - "08746573743437393300b92508746573743437393400ba2508746573743437393500bb2508746573743437393600bc" - "2508746573743437393700bd2508746573743437393800be2508746573743437393900bf2508746573743438303000" - "c02508746573743438303100c12508746573743438303200c22508746573743438303300c325087465737434383034" - "00c42508746573743438303500c52508746573743438303600c62508746573743438303700c7250874657374343830" - "3800c82508746573743438303900c92508746573743438313000ca2508746573743438313100cb2508746573743438" - "313200cc2508746573743438313300cd2508746573743438313400ce2508746573743438313500cf25087465737434" - "38313600d02508746573743438313700d12508746573743438313800d22508746573743438313900d3250874657374" - "3438323000d42508746573743438323100d52508746573743438323200d62508746573743438323300d72508746573" - "743438323400d82508746573743438323500d92508746573743438323600da2508746573743438323700db25087465" - "73743438323800dc2508746573743438323900dd2508746573743438333000de2508746573743438333100df250874" - "6573743438333200e02508746573743438333300e12508746573743438333400e22508746573743438333500e32508" - "746573743438333600e42508746573743438333700e52508746573743438333800e62508746573743438333900e725" - "08746573743438343000e82508746573743438343100e92508746573743438343200ea2508746573743438343300eb" - "2508746573743438343400ec2508746573743438343500ed2508746573743438343600ee2508746573743438343700" - "ef2508746573743438343800f02508746573743438343900f12508746573743438353000f225087465737434383531" - "00f32508746573743438353200f42508746573743438353300f52508746573743438353400f6250874657374343835" - "3500f72508746573743438353600f82508746573743438353700f92508746573743438353800fa2508746573743438" - "353900fb2508746573743438363000fc2508746573743438363100fd2508746573743438363200fe25087465737434" - "38363300ff250874657374343836340080260874657374343836350081260874657374343836360082260874657374" - "3438363700832608746573743438363800842608746573743438363900852608746573743438373000862608746573" - "7434383731008726087465737434383732008826087465737434383733008926087465737434383734008a26087465" - "737434383735008b26087465737434383736008c26087465737434383737008d26087465737434383738008e260874" - "65737434383739008f2608746573743438383000902608746573743438383100912608746573743438383200922608" - "7465737434383833009326087465737434383834009426087465737434383835009526087465737434383836009626" - "087465737434383837009726087465737434383838009826087465737434383839009926087465737434383930009a" - "26087465737434383931009b26087465737434383932009c26087465737434383933009d2608746573743438393400" - "9e26087465737434383935009f2608746573743438393600a02608746573743438393700a126087465737434383938" - "00a22608746573743438393900a32608746573743439303000a42608746573743439303100a5260874657374343930" - "3200a62608746573743439303300a72608746573743439303400a82608746573743439303500a92608746573743439" - "303600aa2608746573743439303700ab2608746573743439303800ac2608746573743439303900ad26087465737434" - "39313000ae2608746573743439313100af2608746573743439313200b02608746573743439313300b1260874657374" - "3439313400b22608746573743439313500b32608746573743439313600b42608746573743439313700b52608746573" - "743439313800b62608746573743439313900b72608746573743439323000b82608746573743439323100b926087465" - "73743439323200ba2608746573743439323300bb2608746573743439323400bc2608746573743439323500bd260874" - "6573743439323600be2608746573743439323700bf2608746573743439323800c02608746573743439323900c12608" - "746573743439333000c22608746573743439333100c32608746573743439333200c42608746573743439333300c526" - "08746573743439333400c62608746573743439333500c72608746573743439333600c82608746573743439333700c9" - "2608746573743439333800ca2608746573743439333900cb2608746573743439343000cc2608746573743439343100" - "cd2608746573743439343200ce2608746573743439343300cf2608746573743439343400d026087465737434393435" - "00d12608746573743439343600d22608746573743439343700d32608746573743439343800d4260874657374343934" - "3900d52608746573743439353000d62608746573743439353100d72608746573743439353200d82608746573743439" - "353300d92608746573743439353400da2608746573743439353500db2608746573743439353600dc26087465737434" - "39353700dd2608746573743439353800de2608746573743439353900df2608746573743439363000e0260874657374" - "3439363100e12608746573743439363200e22608746573743439363300e32608746573743439363400e42608746573" - "743439363500e52608746573743439363600e62608746573743439363700e72608746573743439363800e826087465" - "73743439363900e92608746573743439373000ea2608746573743439373100eb2608746573743439373200ec260874" - "6573743439373300ed2608746573743439373400ee2608746573743439373500ef2608746573743439373600f02608" - "746573743439373700f12608746573743439373800f22608746573743439373900f32608746573743439383000f426" - "08746573743439383100f52608746573743439383200f62608746573743439383300f72608746573743439383400f8" - "2608746573743439383500f92608746573743439383600fa2608746573743439383700fb2608746573743439383800" - "fc2608746573743439383900fd2608746573743439393000fe2608746573743439393100ff26087465737434393932" - "0080270874657374343939330081270874657374343939340082270874657374343939350083270874657374343939" - "360084270874657374343939370085270874657374343939380086270874657374343939390087270ac2b802882707" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b"; - extern std::string const opcReservedHex = "0061736d010000000105016000017f03030200000404017000010503010001060b027f0141000b7e0142000b071401" "10616c6c5f696e737472756374696f6e7300010907010041000b01000a53020400412a0b4c02017f017e0101010101" diff --git a/src/test/app/wasm_fixtures/wat/functions_5k.wat b/src/test/app/wasm_fixtures/wat/functions_5k.wat deleted file mode 100644 index 819472726d..0000000000 --- a/src/test/app/wasm_fixtures/wat/functions_5k.wat +++ /dev/null @@ -1,45002 +0,0 @@ -(module - (func $test0000 (export "test0000") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0001 (export "test0001") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0002 (export "test0002") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0003 (export "test0003") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0004 (export "test0004") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0005 (export "test0005") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0006 (export "test0006") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0007 (export "test0007") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0008 (export "test0008") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0009 (export "test0009") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0010 (export "test0010") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0011 (export "test0011") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0012 (export "test0012") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0013 (export "test0013") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0014 (export "test0014") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0015 (export "test0015") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0016 (export "test0016") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0017 (export "test0017") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0018 (export "test0018") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0019 (export "test0019") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0020 (export "test0020") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0021 (export "test0021") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0022 (export "test0022") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0023 (export "test0023") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0024 (export "test0024") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0025 (export "test0025") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0026 (export "test0026") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0027 (export "test0027") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0028 (export "test0028") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0029 (export "test0029") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0030 (export "test0030") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0031 (export "test0031") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0032 (export "test0032") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0033 (export "test0033") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0034 (export "test0034") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0035 (export "test0035") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0036 (export "test0036") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0037 (export "test0037") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0038 (export "test0038") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0039 (export "test0039") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0040 (export "test0040") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0041 (export "test0041") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0042 (export "test0042") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0043 (export "test0043") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0044 (export "test0044") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0045 (export "test0045") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0046 (export "test0046") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0047 (export "test0047") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0048 (export "test0048") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0049 (export "test0049") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0050 (export "test0050") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0051 (export "test0051") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0052 (export "test0052") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0053 (export "test0053") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0054 (export "test0054") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0055 (export "test0055") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0056 (export "test0056") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0057 (export "test0057") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0058 (export "test0058") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0059 (export "test0059") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0060 (export "test0060") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0061 (export "test0061") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0062 (export "test0062") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0063 (export "test0063") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0064 (export "test0064") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0065 (export "test0065") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0066 (export "test0066") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0067 (export "test0067") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0068 (export "test0068") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0069 (export "test0069") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0070 (export "test0070") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0071 (export "test0071") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0072 (export "test0072") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0073 (export "test0073") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0074 (export "test0074") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0075 (export "test0075") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0076 (export "test0076") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0077 (export "test0077") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0078 (export "test0078") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0079 (export "test0079") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0080 (export "test0080") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0081 (export "test0081") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0082 (export "test0082") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0083 (export "test0083") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0084 (export "test0084") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0085 (export "test0085") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0086 (export "test0086") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0087 (export "test0087") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0088 (export "test0088") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0089 (export "test0089") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0090 (export "test0090") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0091 (export "test0091") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0092 (export "test0092") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0093 (export "test0093") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0094 (export "test0094") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0095 (export "test0095") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0096 (export "test0096") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0097 (export "test0097") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0098 (export "test0098") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0099 (export "test0099") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0100 (export "test0100") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0101 (export "test0101") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0102 (export "test0102") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0103 (export "test0103") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0104 (export "test0104") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0105 (export "test0105") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0106 (export "test0106") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0107 (export "test0107") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0108 (export "test0108") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0109 (export "test0109") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0110 (export "test0110") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0111 (export "test0111") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0112 (export "test0112") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0113 (export "test0113") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0114 (export "test0114") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0115 (export "test0115") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0116 (export "test0116") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0117 (export "test0117") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0118 (export "test0118") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0119 (export "test0119") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0120 (export "test0120") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0121 (export "test0121") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0122 (export "test0122") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0123 (export "test0123") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0124 (export "test0124") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0125 (export "test0125") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0126 (export "test0126") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0127 (export "test0127") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0128 (export "test0128") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0129 (export "test0129") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0130 (export "test0130") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0131 (export "test0131") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0132 (export "test0132") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0133 (export "test0133") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0134 (export "test0134") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0135 (export "test0135") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0136 (export "test0136") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0137 (export "test0137") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0138 (export "test0138") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0139 (export "test0139") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0140 (export "test0140") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0141 (export "test0141") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0142 (export "test0142") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0143 (export "test0143") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0144 (export "test0144") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0145 (export "test0145") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0146 (export "test0146") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0147 (export "test0147") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0148 (export "test0148") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0149 (export "test0149") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0150 (export "test0150") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0151 (export "test0151") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0152 (export "test0152") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0153 (export "test0153") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0154 (export "test0154") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0155 (export "test0155") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0156 (export "test0156") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0157 (export "test0157") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0158 (export "test0158") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0159 (export "test0159") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0160 (export "test0160") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0161 (export "test0161") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0162 (export "test0162") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0163 (export "test0163") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0164 (export "test0164") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0165 (export "test0165") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0166 (export "test0166") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0167 (export "test0167") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0168 (export "test0168") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0169 (export "test0169") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0170 (export "test0170") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0171 (export "test0171") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0172 (export "test0172") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0173 (export "test0173") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0174 (export "test0174") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0175 (export "test0175") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0176 (export "test0176") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0177 (export "test0177") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0178 (export "test0178") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0179 (export "test0179") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0180 (export "test0180") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0181 (export "test0181") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0182 (export "test0182") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0183 (export "test0183") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0184 (export "test0184") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0185 (export "test0185") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0186 (export "test0186") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0187 (export "test0187") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0188 (export "test0188") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0189 (export "test0189") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0190 (export "test0190") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0191 (export "test0191") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0192 (export "test0192") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0193 (export "test0193") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0194 (export "test0194") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0195 (export "test0195") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0196 (export "test0196") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0197 (export "test0197") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0198 (export "test0198") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0199 (export "test0199") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0200 (export "test0200") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0201 (export "test0201") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0202 (export "test0202") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0203 (export "test0203") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0204 (export "test0204") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0205 (export "test0205") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0206 (export "test0206") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0207 (export "test0207") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0208 (export "test0208") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0209 (export "test0209") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0210 (export "test0210") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0211 (export "test0211") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0212 (export "test0212") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0213 (export "test0213") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0214 (export "test0214") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0215 (export "test0215") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0216 (export "test0216") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0217 (export "test0217") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0218 (export "test0218") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0219 (export "test0219") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0220 (export "test0220") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0221 (export "test0221") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0222 (export "test0222") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0223 (export "test0223") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0224 (export "test0224") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0225 (export "test0225") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0226 (export "test0226") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0227 (export "test0227") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0228 (export "test0228") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0229 (export "test0229") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0230 (export "test0230") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0231 (export "test0231") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0232 (export "test0232") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0233 (export "test0233") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0234 (export "test0234") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0235 (export "test0235") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0236 (export "test0236") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0237 (export "test0237") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0238 (export "test0238") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0239 (export "test0239") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0240 (export "test0240") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0241 (export "test0241") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0242 (export "test0242") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0243 (export "test0243") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0244 (export "test0244") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0245 (export "test0245") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0246 (export "test0246") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0247 (export "test0247") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0248 (export "test0248") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0249 (export "test0249") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0250 (export "test0250") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0251 (export "test0251") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0252 (export "test0252") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0253 (export "test0253") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0254 (export "test0254") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0255 (export "test0255") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0256 (export "test0256") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0257 (export "test0257") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0258 (export "test0258") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0259 (export "test0259") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0260 (export "test0260") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0261 (export "test0261") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0262 (export "test0262") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0263 (export "test0263") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0264 (export "test0264") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0265 (export "test0265") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0266 (export "test0266") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0267 (export "test0267") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0268 (export "test0268") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0269 (export "test0269") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0270 (export "test0270") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0271 (export "test0271") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0272 (export "test0272") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0273 (export "test0273") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0274 (export "test0274") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0275 (export "test0275") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0276 (export "test0276") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0277 (export "test0277") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0278 (export "test0278") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0279 (export "test0279") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0280 (export "test0280") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0281 (export "test0281") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0282 (export "test0282") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0283 (export "test0283") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0284 (export "test0284") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0285 (export "test0285") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0286 (export "test0286") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0287 (export "test0287") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0288 (export "test0288") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0289 (export "test0289") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0290 (export "test0290") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0291 (export "test0291") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0292 (export "test0292") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0293 (export "test0293") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0294 (export "test0294") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0295 (export "test0295") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0296 (export "test0296") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0297 (export "test0297") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0298 (export "test0298") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0299 (export "test0299") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0300 (export "test0300") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0301 (export "test0301") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0302 (export "test0302") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0303 (export "test0303") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0304 (export "test0304") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0305 (export "test0305") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0306 (export "test0306") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0307 (export "test0307") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0308 (export "test0308") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0309 (export "test0309") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0310 (export "test0310") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0311 (export "test0311") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0312 (export "test0312") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0313 (export "test0313") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0314 (export "test0314") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0315 (export "test0315") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0316 (export "test0316") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0317 (export "test0317") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0318 (export "test0318") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0319 (export "test0319") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0320 (export "test0320") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0321 (export "test0321") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0322 (export "test0322") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0323 (export "test0323") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0324 (export "test0324") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0325 (export "test0325") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0326 (export "test0326") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0327 (export "test0327") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0328 (export "test0328") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0329 (export "test0329") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0330 (export "test0330") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0331 (export "test0331") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0332 (export "test0332") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0333 (export "test0333") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0334 (export "test0334") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0335 (export "test0335") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0336 (export "test0336") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0337 (export "test0337") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0338 (export "test0338") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0339 (export "test0339") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0340 (export "test0340") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0341 (export "test0341") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0342 (export "test0342") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0343 (export "test0343") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0344 (export "test0344") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0345 (export "test0345") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0346 (export "test0346") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0347 (export "test0347") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0348 (export "test0348") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0349 (export "test0349") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0350 (export "test0350") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0351 (export "test0351") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0352 (export "test0352") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0353 (export "test0353") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0354 (export "test0354") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0355 (export "test0355") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0356 (export "test0356") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0357 (export "test0357") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0358 (export "test0358") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0359 (export "test0359") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0360 (export "test0360") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0361 (export "test0361") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0362 (export "test0362") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0363 (export "test0363") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0364 (export "test0364") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0365 (export "test0365") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0366 (export "test0366") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0367 (export "test0367") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0368 (export "test0368") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0369 (export "test0369") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0370 (export "test0370") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0371 (export "test0371") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0372 (export "test0372") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0373 (export "test0373") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0374 (export "test0374") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0375 (export "test0375") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0376 (export "test0376") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0377 (export "test0377") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0378 (export "test0378") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0379 (export "test0379") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0380 (export "test0380") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0381 (export "test0381") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0382 (export "test0382") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0383 (export "test0383") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0384 (export "test0384") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0385 (export "test0385") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0386 (export "test0386") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0387 (export "test0387") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0388 (export "test0388") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0389 (export "test0389") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0390 (export "test0390") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0391 (export "test0391") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0392 (export "test0392") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0393 (export "test0393") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0394 (export "test0394") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0395 (export "test0395") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0396 (export "test0396") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0397 (export "test0397") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0398 (export "test0398") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0399 (export "test0399") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0400 (export "test0400") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0401 (export "test0401") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0402 (export "test0402") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0403 (export "test0403") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0404 (export "test0404") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0405 (export "test0405") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0406 (export "test0406") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0407 (export "test0407") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0408 (export "test0408") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0409 (export "test0409") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0410 (export "test0410") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0411 (export "test0411") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0412 (export "test0412") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0413 (export "test0413") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0414 (export "test0414") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0415 (export "test0415") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0416 (export "test0416") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0417 (export "test0417") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0418 (export "test0418") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0419 (export "test0419") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0420 (export "test0420") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0421 (export "test0421") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0422 (export "test0422") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0423 (export "test0423") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0424 (export "test0424") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0425 (export "test0425") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0426 (export "test0426") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0427 (export "test0427") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0428 (export "test0428") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0429 (export "test0429") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0430 (export "test0430") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0431 (export "test0431") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0432 (export "test0432") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0433 (export "test0433") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0434 (export "test0434") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0435 (export "test0435") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0436 (export "test0436") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0437 (export "test0437") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0438 (export "test0438") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0439 (export "test0439") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0440 (export "test0440") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0441 (export "test0441") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0442 (export "test0442") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0443 (export "test0443") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0444 (export "test0444") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0445 (export "test0445") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0446 (export "test0446") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0447 (export "test0447") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0448 (export "test0448") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0449 (export "test0449") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0450 (export "test0450") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0451 (export "test0451") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0452 (export "test0452") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0453 (export "test0453") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0454 (export "test0454") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0455 (export "test0455") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0456 (export "test0456") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0457 (export "test0457") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0458 (export "test0458") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0459 (export "test0459") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0460 (export "test0460") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0461 (export "test0461") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0462 (export "test0462") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0463 (export "test0463") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0464 (export "test0464") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0465 (export "test0465") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0466 (export "test0466") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0467 (export "test0467") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0468 (export "test0468") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0469 (export "test0469") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0470 (export "test0470") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0471 (export "test0471") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0472 (export "test0472") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0473 (export "test0473") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0474 (export "test0474") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0475 (export "test0475") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0476 (export "test0476") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0477 (export "test0477") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0478 (export "test0478") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0479 (export "test0479") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0480 (export "test0480") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0481 (export "test0481") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0482 (export "test0482") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0483 (export "test0483") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0484 (export "test0484") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0485 (export "test0485") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0486 (export "test0486") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0487 (export "test0487") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0488 (export "test0488") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0489 (export "test0489") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0490 (export "test0490") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0491 (export "test0491") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0492 (export "test0492") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0493 (export "test0493") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0494 (export "test0494") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0495 (export "test0495") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0496 (export "test0496") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0497 (export "test0497") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0498 (export "test0498") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0499 (export "test0499") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0500 (export "test0500") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0501 (export "test0501") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0502 (export "test0502") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0503 (export "test0503") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0504 (export "test0504") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0505 (export "test0505") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0506 (export "test0506") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0507 (export "test0507") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0508 (export "test0508") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0509 (export "test0509") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0510 (export "test0510") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0511 (export "test0511") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0512 (export "test0512") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0513 (export "test0513") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0514 (export "test0514") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0515 (export "test0515") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0516 (export "test0516") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0517 (export "test0517") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0518 (export "test0518") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0519 (export "test0519") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0520 (export "test0520") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0521 (export "test0521") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0522 (export "test0522") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0523 (export "test0523") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0524 (export "test0524") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0525 (export "test0525") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0526 (export "test0526") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0527 (export "test0527") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0528 (export "test0528") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0529 (export "test0529") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0530 (export "test0530") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0531 (export "test0531") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0532 (export "test0532") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0533 (export "test0533") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0534 (export "test0534") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0535 (export "test0535") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0536 (export "test0536") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0537 (export "test0537") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0538 (export "test0538") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0539 (export "test0539") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0540 (export "test0540") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0541 (export "test0541") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0542 (export "test0542") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0543 (export "test0543") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0544 (export "test0544") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0545 (export "test0545") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0546 (export "test0546") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0547 (export "test0547") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0548 (export "test0548") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0549 (export "test0549") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0550 (export "test0550") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0551 (export "test0551") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0552 (export "test0552") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0553 (export "test0553") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0554 (export "test0554") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0555 (export "test0555") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0556 (export "test0556") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0557 (export "test0557") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0558 (export "test0558") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0559 (export "test0559") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0560 (export "test0560") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0561 (export "test0561") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0562 (export "test0562") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0563 (export "test0563") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0564 (export "test0564") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0565 (export "test0565") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0566 (export "test0566") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0567 (export "test0567") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0568 (export "test0568") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0569 (export "test0569") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0570 (export "test0570") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0571 (export "test0571") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0572 (export "test0572") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0573 (export "test0573") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0574 (export "test0574") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0575 (export "test0575") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0576 (export "test0576") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0577 (export "test0577") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0578 (export "test0578") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0579 (export "test0579") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0580 (export "test0580") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0581 (export "test0581") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0582 (export "test0582") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0583 (export "test0583") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0584 (export "test0584") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0585 (export "test0585") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0586 (export "test0586") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0587 (export "test0587") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0588 (export "test0588") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0589 (export "test0589") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0590 (export "test0590") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0591 (export "test0591") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0592 (export "test0592") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0593 (export "test0593") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0594 (export "test0594") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0595 (export "test0595") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0596 (export "test0596") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0597 (export "test0597") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0598 (export "test0598") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0599 (export "test0599") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0600 (export "test0600") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0601 (export "test0601") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0602 (export "test0602") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0603 (export "test0603") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0604 (export "test0604") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0605 (export "test0605") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0606 (export "test0606") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0607 (export "test0607") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0608 (export "test0608") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0609 (export "test0609") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0610 (export "test0610") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0611 (export "test0611") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0612 (export "test0612") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0613 (export "test0613") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0614 (export "test0614") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0615 (export "test0615") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0616 (export "test0616") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0617 (export "test0617") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0618 (export "test0618") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0619 (export "test0619") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0620 (export "test0620") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0621 (export "test0621") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0622 (export "test0622") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0623 (export "test0623") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0624 (export "test0624") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0625 (export "test0625") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0626 (export "test0626") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0627 (export "test0627") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0628 (export "test0628") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0629 (export "test0629") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0630 (export "test0630") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0631 (export "test0631") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0632 (export "test0632") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0633 (export "test0633") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0634 (export "test0634") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0635 (export "test0635") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0636 (export "test0636") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0637 (export "test0637") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0638 (export "test0638") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0639 (export "test0639") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0640 (export "test0640") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0641 (export "test0641") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0642 (export "test0642") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0643 (export "test0643") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0644 (export "test0644") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0645 (export "test0645") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0646 (export "test0646") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0647 (export "test0647") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0648 (export "test0648") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0649 (export "test0649") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0650 (export "test0650") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0651 (export "test0651") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0652 (export "test0652") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0653 (export "test0653") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0654 (export "test0654") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0655 (export "test0655") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0656 (export "test0656") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0657 (export "test0657") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0658 (export "test0658") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0659 (export "test0659") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0660 (export "test0660") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0661 (export "test0661") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0662 (export "test0662") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0663 (export "test0663") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0664 (export "test0664") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0665 (export "test0665") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0666 (export "test0666") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0667 (export "test0667") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0668 (export "test0668") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0669 (export "test0669") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0670 (export "test0670") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0671 (export "test0671") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0672 (export "test0672") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0673 (export "test0673") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0674 (export "test0674") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0675 (export "test0675") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0676 (export "test0676") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0677 (export "test0677") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0678 (export "test0678") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0679 (export "test0679") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0680 (export "test0680") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0681 (export "test0681") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0682 (export "test0682") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0683 (export "test0683") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0684 (export "test0684") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0685 (export "test0685") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0686 (export "test0686") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0687 (export "test0687") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0688 (export "test0688") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0689 (export "test0689") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0690 (export "test0690") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0691 (export "test0691") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0692 (export "test0692") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0693 (export "test0693") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0694 (export "test0694") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0695 (export "test0695") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0696 (export "test0696") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0697 (export "test0697") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0698 (export "test0698") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0699 (export "test0699") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0700 (export "test0700") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0701 (export "test0701") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0702 (export "test0702") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0703 (export "test0703") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0704 (export "test0704") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0705 (export "test0705") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0706 (export "test0706") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0707 (export "test0707") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0708 (export "test0708") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0709 (export "test0709") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0710 (export "test0710") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0711 (export "test0711") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0712 (export "test0712") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0713 (export "test0713") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0714 (export "test0714") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0715 (export "test0715") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0716 (export "test0716") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0717 (export "test0717") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0718 (export "test0718") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0719 (export "test0719") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0720 (export "test0720") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0721 (export "test0721") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0722 (export "test0722") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0723 (export "test0723") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0724 (export "test0724") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0725 (export "test0725") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0726 (export "test0726") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0727 (export "test0727") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0728 (export "test0728") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0729 (export "test0729") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0730 (export "test0730") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0731 (export "test0731") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0732 (export "test0732") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0733 (export "test0733") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0734 (export "test0734") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0735 (export "test0735") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0736 (export "test0736") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0737 (export "test0737") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0738 (export "test0738") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0739 (export "test0739") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0740 (export "test0740") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0741 (export "test0741") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0742 (export "test0742") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0743 (export "test0743") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0744 (export "test0744") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0745 (export "test0745") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0746 (export "test0746") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0747 (export "test0747") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0748 (export "test0748") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0749 (export "test0749") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0750 (export "test0750") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0751 (export "test0751") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0752 (export "test0752") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0753 (export "test0753") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0754 (export "test0754") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0755 (export "test0755") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0756 (export "test0756") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0757 (export "test0757") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0758 (export "test0758") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0759 (export "test0759") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0760 (export "test0760") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0761 (export "test0761") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0762 (export "test0762") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0763 (export "test0763") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0764 (export "test0764") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0765 (export "test0765") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0766 (export "test0766") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0767 (export "test0767") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0768 (export "test0768") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0769 (export "test0769") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0770 (export "test0770") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0771 (export "test0771") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0772 (export "test0772") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0773 (export "test0773") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0774 (export "test0774") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0775 (export "test0775") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0776 (export "test0776") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0777 (export "test0777") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0778 (export "test0778") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0779 (export "test0779") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0780 (export "test0780") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0781 (export "test0781") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0782 (export "test0782") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0783 (export "test0783") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0784 (export "test0784") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0785 (export "test0785") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0786 (export "test0786") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0787 (export "test0787") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0788 (export "test0788") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0789 (export "test0789") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0790 (export "test0790") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0791 (export "test0791") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0792 (export "test0792") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0793 (export "test0793") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0794 (export "test0794") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0795 (export "test0795") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0796 (export "test0796") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0797 (export "test0797") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0798 (export "test0798") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0799 (export "test0799") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0800 (export "test0800") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0801 (export "test0801") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0802 (export "test0802") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0803 (export "test0803") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0804 (export "test0804") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0805 (export "test0805") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0806 (export "test0806") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0807 (export "test0807") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0808 (export "test0808") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0809 (export "test0809") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0810 (export "test0810") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0811 (export "test0811") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0812 (export "test0812") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0813 (export "test0813") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0814 (export "test0814") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0815 (export "test0815") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0816 (export "test0816") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0817 (export "test0817") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0818 (export "test0818") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0819 (export "test0819") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0820 (export "test0820") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0821 (export "test0821") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0822 (export "test0822") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0823 (export "test0823") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0824 (export "test0824") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0825 (export "test0825") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0826 (export "test0826") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0827 (export "test0827") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0828 (export "test0828") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0829 (export "test0829") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0830 (export "test0830") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0831 (export "test0831") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0832 (export "test0832") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0833 (export "test0833") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0834 (export "test0834") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0835 (export "test0835") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0836 (export "test0836") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0837 (export "test0837") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0838 (export "test0838") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0839 (export "test0839") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0840 (export "test0840") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0841 (export "test0841") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0842 (export "test0842") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0843 (export "test0843") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0844 (export "test0844") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0845 (export "test0845") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0846 (export "test0846") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0847 (export "test0847") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0848 (export "test0848") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0849 (export "test0849") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0850 (export "test0850") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0851 (export "test0851") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0852 (export "test0852") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0853 (export "test0853") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0854 (export "test0854") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0855 (export "test0855") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0856 (export "test0856") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0857 (export "test0857") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0858 (export "test0858") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0859 (export "test0859") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0860 (export "test0860") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0861 (export "test0861") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0862 (export "test0862") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0863 (export "test0863") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0864 (export "test0864") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0865 (export "test0865") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0866 (export "test0866") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0867 (export "test0867") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0868 (export "test0868") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0869 (export "test0869") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0870 (export "test0870") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0871 (export "test0871") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0872 (export "test0872") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0873 (export "test0873") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0874 (export "test0874") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0875 (export "test0875") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0876 (export "test0876") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0877 (export "test0877") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0878 (export "test0878") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0879 (export "test0879") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0880 (export "test0880") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0881 (export "test0881") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0882 (export "test0882") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0883 (export "test0883") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0884 (export "test0884") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0885 (export "test0885") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0886 (export "test0886") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0887 (export "test0887") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0888 (export "test0888") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0889 (export "test0889") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0890 (export "test0890") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0891 (export "test0891") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0892 (export "test0892") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0893 (export "test0893") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0894 (export "test0894") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0895 (export "test0895") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0896 (export "test0896") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0897 (export "test0897") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0898 (export "test0898") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0899 (export "test0899") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0900 (export "test0900") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0901 (export "test0901") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0902 (export "test0902") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0903 (export "test0903") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0904 (export "test0904") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0905 (export "test0905") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0906 (export "test0906") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0907 (export "test0907") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0908 (export "test0908") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0909 (export "test0909") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0910 (export "test0910") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0911 (export "test0911") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0912 (export "test0912") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0913 (export "test0913") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0914 (export "test0914") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0915 (export "test0915") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0916 (export "test0916") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0917 (export "test0917") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0918 (export "test0918") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0919 (export "test0919") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0920 (export "test0920") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0921 (export "test0921") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0922 (export "test0922") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0923 (export "test0923") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0924 (export "test0924") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0925 (export "test0925") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0926 (export "test0926") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0927 (export "test0927") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0928 (export "test0928") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0929 (export "test0929") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0930 (export "test0930") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0931 (export "test0931") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0932 (export "test0932") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0933 (export "test0933") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0934 (export "test0934") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0935 (export "test0935") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0936 (export "test0936") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0937 (export "test0937") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0938 (export "test0938") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0939 (export "test0939") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0940 (export "test0940") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0941 (export "test0941") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0942 (export "test0942") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0943 (export "test0943") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0944 (export "test0944") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0945 (export "test0945") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0946 (export "test0946") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0947 (export "test0947") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0948 (export "test0948") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0949 (export "test0949") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0950 (export "test0950") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0951 (export "test0951") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0952 (export "test0952") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0953 (export "test0953") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0954 (export "test0954") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0955 (export "test0955") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0956 (export "test0956") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0957 (export "test0957") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0958 (export "test0958") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0959 (export "test0959") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0960 (export "test0960") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0961 (export "test0961") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0962 (export "test0962") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0963 (export "test0963") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0964 (export "test0964") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0965 (export "test0965") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0966 (export "test0966") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0967 (export "test0967") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0968 (export "test0968") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0969 (export "test0969") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0970 (export "test0970") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0971 (export "test0971") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0972 (export "test0972") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0973 (export "test0973") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0974 (export "test0974") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0975 (export "test0975") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0976 (export "test0976") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0977 (export "test0977") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0978 (export "test0978") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0979 (export "test0979") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0980 (export "test0980") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0981 (export "test0981") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0982 (export "test0982") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0983 (export "test0983") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0984 (export "test0984") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0985 (export "test0985") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0986 (export "test0986") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0987 (export "test0987") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0988 (export "test0988") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0989 (export "test0989") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0990 (export "test0990") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0991 (export "test0991") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0992 (export "test0992") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0993 (export "test0993") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0994 (export "test0994") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0995 (export "test0995") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0996 (export "test0996") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0997 (export "test0997") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0998 (export "test0998") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test0999 (export "test0999") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1000 (export "test1000") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1001 (export "test1001") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1002 (export "test1002") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1003 (export "test1003") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1004 (export "test1004") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1005 (export "test1005") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1006 (export "test1006") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1007 (export "test1007") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1008 (export "test1008") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1009 (export "test1009") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1010 (export "test1010") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1011 (export "test1011") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1012 (export "test1012") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1013 (export "test1013") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1014 (export "test1014") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1015 (export "test1015") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1016 (export "test1016") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1017 (export "test1017") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1018 (export "test1018") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1019 (export "test1019") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1020 (export "test1020") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1021 (export "test1021") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1022 (export "test1022") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1023 (export "test1023") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1024 (export "test1024") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1025 (export "test1025") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1026 (export "test1026") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1027 (export "test1027") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1028 (export "test1028") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1029 (export "test1029") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1030 (export "test1030") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1031 (export "test1031") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1032 (export "test1032") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1033 (export "test1033") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1034 (export "test1034") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1035 (export "test1035") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1036 (export "test1036") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1037 (export "test1037") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1038 (export "test1038") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1039 (export "test1039") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1040 (export "test1040") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1041 (export "test1041") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1042 (export "test1042") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1043 (export "test1043") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1044 (export "test1044") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1045 (export "test1045") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1046 (export "test1046") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1047 (export "test1047") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1048 (export "test1048") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1049 (export "test1049") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1050 (export "test1050") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1051 (export "test1051") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1052 (export "test1052") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1053 (export "test1053") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1054 (export "test1054") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1055 (export "test1055") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1056 (export "test1056") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1057 (export "test1057") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1058 (export "test1058") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1059 (export "test1059") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1060 (export "test1060") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1061 (export "test1061") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1062 (export "test1062") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1063 (export "test1063") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1064 (export "test1064") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1065 (export "test1065") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1066 (export "test1066") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1067 (export "test1067") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1068 (export "test1068") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1069 (export "test1069") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1070 (export "test1070") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1071 (export "test1071") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1072 (export "test1072") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1073 (export "test1073") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1074 (export "test1074") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1075 (export "test1075") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1076 (export "test1076") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1077 (export "test1077") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1078 (export "test1078") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1079 (export "test1079") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1080 (export "test1080") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1081 (export "test1081") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1082 (export "test1082") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1083 (export "test1083") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1084 (export "test1084") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1085 (export "test1085") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1086 (export "test1086") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1087 (export "test1087") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1088 (export "test1088") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1089 (export "test1089") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1090 (export "test1090") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1091 (export "test1091") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1092 (export "test1092") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1093 (export "test1093") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1094 (export "test1094") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1095 (export "test1095") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1096 (export "test1096") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1097 (export "test1097") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1098 (export "test1098") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1099 (export "test1099") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1100 (export "test1100") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1101 (export "test1101") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1102 (export "test1102") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1103 (export "test1103") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1104 (export "test1104") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1105 (export "test1105") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1106 (export "test1106") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1107 (export "test1107") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1108 (export "test1108") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1109 (export "test1109") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1110 (export "test1110") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1111 (export "test1111") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1112 (export "test1112") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1113 (export "test1113") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1114 (export "test1114") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1115 (export "test1115") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1116 (export "test1116") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1117 (export "test1117") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1118 (export "test1118") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1119 (export "test1119") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1120 (export "test1120") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1121 (export "test1121") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1122 (export "test1122") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1123 (export "test1123") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1124 (export "test1124") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1125 (export "test1125") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1126 (export "test1126") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1127 (export "test1127") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1128 (export "test1128") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1129 (export "test1129") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1130 (export "test1130") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1131 (export "test1131") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1132 (export "test1132") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1133 (export "test1133") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1134 (export "test1134") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1135 (export "test1135") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1136 (export "test1136") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1137 (export "test1137") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1138 (export "test1138") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1139 (export "test1139") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1140 (export "test1140") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1141 (export "test1141") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1142 (export "test1142") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1143 (export "test1143") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1144 (export "test1144") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1145 (export "test1145") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1146 (export "test1146") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1147 (export "test1147") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1148 (export "test1148") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1149 (export "test1149") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1150 (export "test1150") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1151 (export "test1151") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1152 (export "test1152") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1153 (export "test1153") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1154 (export "test1154") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1155 (export "test1155") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1156 (export "test1156") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1157 (export "test1157") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1158 (export "test1158") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1159 (export "test1159") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1160 (export "test1160") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1161 (export "test1161") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1162 (export "test1162") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1163 (export "test1163") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1164 (export "test1164") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1165 (export "test1165") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1166 (export "test1166") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1167 (export "test1167") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1168 (export "test1168") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1169 (export "test1169") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1170 (export "test1170") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1171 (export "test1171") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1172 (export "test1172") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1173 (export "test1173") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1174 (export "test1174") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1175 (export "test1175") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1176 (export "test1176") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1177 (export "test1177") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1178 (export "test1178") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1179 (export "test1179") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1180 (export "test1180") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1181 (export "test1181") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1182 (export "test1182") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1183 (export "test1183") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1184 (export "test1184") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1185 (export "test1185") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1186 (export "test1186") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1187 (export "test1187") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1188 (export "test1188") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1189 (export "test1189") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1190 (export "test1190") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1191 (export "test1191") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1192 (export "test1192") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1193 (export "test1193") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1194 (export "test1194") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1195 (export "test1195") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1196 (export "test1196") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1197 (export "test1197") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1198 (export "test1198") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1199 (export "test1199") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1200 (export "test1200") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1201 (export "test1201") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1202 (export "test1202") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1203 (export "test1203") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1204 (export "test1204") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1205 (export "test1205") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1206 (export "test1206") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1207 (export "test1207") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1208 (export "test1208") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1209 (export "test1209") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1210 (export "test1210") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1211 (export "test1211") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1212 (export "test1212") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1213 (export "test1213") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1214 (export "test1214") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1215 (export "test1215") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1216 (export "test1216") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1217 (export "test1217") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1218 (export "test1218") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1219 (export "test1219") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1220 (export "test1220") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1221 (export "test1221") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1222 (export "test1222") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1223 (export "test1223") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1224 (export "test1224") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1225 (export "test1225") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1226 (export "test1226") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1227 (export "test1227") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1228 (export "test1228") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1229 (export "test1229") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1230 (export "test1230") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1231 (export "test1231") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1232 (export "test1232") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1233 (export "test1233") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1234 (export "test1234") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1235 (export "test1235") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1236 (export "test1236") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1237 (export "test1237") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1238 (export "test1238") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1239 (export "test1239") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1240 (export "test1240") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1241 (export "test1241") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1242 (export "test1242") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1243 (export "test1243") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1244 (export "test1244") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1245 (export "test1245") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1246 (export "test1246") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1247 (export "test1247") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1248 (export "test1248") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1249 (export "test1249") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1250 (export "test1250") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1251 (export "test1251") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1252 (export "test1252") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1253 (export "test1253") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1254 (export "test1254") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1255 (export "test1255") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1256 (export "test1256") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1257 (export "test1257") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1258 (export "test1258") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1259 (export "test1259") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1260 (export "test1260") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1261 (export "test1261") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1262 (export "test1262") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1263 (export "test1263") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1264 (export "test1264") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1265 (export "test1265") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1266 (export "test1266") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1267 (export "test1267") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1268 (export "test1268") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1269 (export "test1269") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1270 (export "test1270") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1271 (export "test1271") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1272 (export "test1272") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1273 (export "test1273") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1274 (export "test1274") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1275 (export "test1275") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1276 (export "test1276") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1277 (export "test1277") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1278 (export "test1278") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1279 (export "test1279") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1280 (export "test1280") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1281 (export "test1281") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1282 (export "test1282") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1283 (export "test1283") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1284 (export "test1284") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1285 (export "test1285") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1286 (export "test1286") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1287 (export "test1287") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1288 (export "test1288") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1289 (export "test1289") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1290 (export "test1290") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1291 (export "test1291") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1292 (export "test1292") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1293 (export "test1293") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1294 (export "test1294") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1295 (export "test1295") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1296 (export "test1296") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1297 (export "test1297") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1298 (export "test1298") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1299 (export "test1299") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1300 (export "test1300") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1301 (export "test1301") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1302 (export "test1302") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1303 (export "test1303") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1304 (export "test1304") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1305 (export "test1305") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1306 (export "test1306") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1307 (export "test1307") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1308 (export "test1308") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1309 (export "test1309") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1310 (export "test1310") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1311 (export "test1311") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1312 (export "test1312") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1313 (export "test1313") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1314 (export "test1314") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1315 (export "test1315") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1316 (export "test1316") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1317 (export "test1317") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1318 (export "test1318") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1319 (export "test1319") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1320 (export "test1320") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1321 (export "test1321") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1322 (export "test1322") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1323 (export "test1323") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1324 (export "test1324") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1325 (export "test1325") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1326 (export "test1326") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1327 (export "test1327") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1328 (export "test1328") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1329 (export "test1329") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1330 (export "test1330") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1331 (export "test1331") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1332 (export "test1332") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1333 (export "test1333") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1334 (export "test1334") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1335 (export "test1335") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1336 (export "test1336") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1337 (export "test1337") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1338 (export "test1338") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1339 (export "test1339") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1340 (export "test1340") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1341 (export "test1341") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1342 (export "test1342") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1343 (export "test1343") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1344 (export "test1344") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1345 (export "test1345") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1346 (export "test1346") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1347 (export "test1347") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1348 (export "test1348") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1349 (export "test1349") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1350 (export "test1350") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1351 (export "test1351") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1352 (export "test1352") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1353 (export "test1353") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1354 (export "test1354") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1355 (export "test1355") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1356 (export "test1356") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1357 (export "test1357") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1358 (export "test1358") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1359 (export "test1359") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1360 (export "test1360") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1361 (export "test1361") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1362 (export "test1362") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1363 (export "test1363") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1364 (export "test1364") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1365 (export "test1365") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1366 (export "test1366") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1367 (export "test1367") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1368 (export "test1368") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1369 (export "test1369") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1370 (export "test1370") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1371 (export "test1371") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1372 (export "test1372") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1373 (export "test1373") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1374 (export "test1374") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1375 (export "test1375") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1376 (export "test1376") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1377 (export "test1377") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1378 (export "test1378") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1379 (export "test1379") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1380 (export "test1380") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1381 (export "test1381") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1382 (export "test1382") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1383 (export "test1383") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1384 (export "test1384") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1385 (export "test1385") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1386 (export "test1386") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1387 (export "test1387") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1388 (export "test1388") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1389 (export "test1389") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1390 (export "test1390") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1391 (export "test1391") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1392 (export "test1392") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1393 (export "test1393") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1394 (export "test1394") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1395 (export "test1395") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1396 (export "test1396") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1397 (export "test1397") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1398 (export "test1398") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1399 (export "test1399") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1400 (export "test1400") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1401 (export "test1401") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1402 (export "test1402") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1403 (export "test1403") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1404 (export "test1404") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1405 (export "test1405") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1406 (export "test1406") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1407 (export "test1407") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1408 (export "test1408") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1409 (export "test1409") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1410 (export "test1410") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1411 (export "test1411") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1412 (export "test1412") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1413 (export "test1413") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1414 (export "test1414") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1415 (export "test1415") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1416 (export "test1416") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1417 (export "test1417") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1418 (export "test1418") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1419 (export "test1419") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1420 (export "test1420") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1421 (export "test1421") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1422 (export "test1422") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1423 (export "test1423") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1424 (export "test1424") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1425 (export "test1425") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1426 (export "test1426") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1427 (export "test1427") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1428 (export "test1428") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1429 (export "test1429") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1430 (export "test1430") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1431 (export "test1431") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1432 (export "test1432") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1433 (export "test1433") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1434 (export "test1434") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1435 (export "test1435") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1436 (export "test1436") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1437 (export "test1437") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1438 (export "test1438") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1439 (export "test1439") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1440 (export "test1440") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1441 (export "test1441") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1442 (export "test1442") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1443 (export "test1443") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1444 (export "test1444") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1445 (export "test1445") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1446 (export "test1446") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1447 (export "test1447") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1448 (export "test1448") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1449 (export "test1449") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1450 (export "test1450") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1451 (export "test1451") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1452 (export "test1452") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1453 (export "test1453") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1454 (export "test1454") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1455 (export "test1455") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1456 (export "test1456") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1457 (export "test1457") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1458 (export "test1458") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1459 (export "test1459") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1460 (export "test1460") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1461 (export "test1461") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1462 (export "test1462") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1463 (export "test1463") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1464 (export "test1464") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1465 (export "test1465") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1466 (export "test1466") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1467 (export "test1467") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1468 (export "test1468") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1469 (export "test1469") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1470 (export "test1470") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1471 (export "test1471") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1472 (export "test1472") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1473 (export "test1473") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1474 (export "test1474") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1475 (export "test1475") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1476 (export "test1476") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1477 (export "test1477") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1478 (export "test1478") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1479 (export "test1479") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1480 (export "test1480") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1481 (export "test1481") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1482 (export "test1482") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1483 (export "test1483") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1484 (export "test1484") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1485 (export "test1485") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1486 (export "test1486") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1487 (export "test1487") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1488 (export "test1488") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1489 (export "test1489") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1490 (export "test1490") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1491 (export "test1491") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1492 (export "test1492") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1493 (export "test1493") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1494 (export "test1494") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1495 (export "test1495") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1496 (export "test1496") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1497 (export "test1497") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1498 (export "test1498") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1499 (export "test1499") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1500 (export "test1500") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1501 (export "test1501") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1502 (export "test1502") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1503 (export "test1503") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1504 (export "test1504") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1505 (export "test1505") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1506 (export "test1506") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1507 (export "test1507") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1508 (export "test1508") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1509 (export "test1509") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1510 (export "test1510") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1511 (export "test1511") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1512 (export "test1512") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1513 (export "test1513") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1514 (export "test1514") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1515 (export "test1515") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1516 (export "test1516") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1517 (export "test1517") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1518 (export "test1518") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1519 (export "test1519") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1520 (export "test1520") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1521 (export "test1521") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1522 (export "test1522") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1523 (export "test1523") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1524 (export "test1524") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1525 (export "test1525") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1526 (export "test1526") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1527 (export "test1527") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1528 (export "test1528") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1529 (export "test1529") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1530 (export "test1530") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1531 (export "test1531") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1532 (export "test1532") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1533 (export "test1533") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1534 (export "test1534") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1535 (export "test1535") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1536 (export "test1536") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1537 (export "test1537") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1538 (export "test1538") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1539 (export "test1539") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1540 (export "test1540") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1541 (export "test1541") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1542 (export "test1542") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1543 (export "test1543") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1544 (export "test1544") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1545 (export "test1545") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1546 (export "test1546") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1547 (export "test1547") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1548 (export "test1548") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1549 (export "test1549") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1550 (export "test1550") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1551 (export "test1551") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1552 (export "test1552") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1553 (export "test1553") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1554 (export "test1554") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1555 (export "test1555") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1556 (export "test1556") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1557 (export "test1557") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1558 (export "test1558") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1559 (export "test1559") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1560 (export "test1560") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1561 (export "test1561") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1562 (export "test1562") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1563 (export "test1563") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1564 (export "test1564") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1565 (export "test1565") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1566 (export "test1566") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1567 (export "test1567") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1568 (export "test1568") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1569 (export "test1569") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1570 (export "test1570") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1571 (export "test1571") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1572 (export "test1572") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1573 (export "test1573") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1574 (export "test1574") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1575 (export "test1575") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1576 (export "test1576") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1577 (export "test1577") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1578 (export "test1578") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1579 (export "test1579") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1580 (export "test1580") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1581 (export "test1581") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1582 (export "test1582") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1583 (export "test1583") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1584 (export "test1584") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1585 (export "test1585") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1586 (export "test1586") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1587 (export "test1587") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1588 (export "test1588") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1589 (export "test1589") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1590 (export "test1590") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1591 (export "test1591") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1592 (export "test1592") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1593 (export "test1593") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1594 (export "test1594") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1595 (export "test1595") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1596 (export "test1596") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1597 (export "test1597") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1598 (export "test1598") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1599 (export "test1599") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1600 (export "test1600") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1601 (export "test1601") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1602 (export "test1602") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1603 (export "test1603") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1604 (export "test1604") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1605 (export "test1605") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1606 (export "test1606") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1607 (export "test1607") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1608 (export "test1608") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1609 (export "test1609") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1610 (export "test1610") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1611 (export "test1611") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1612 (export "test1612") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1613 (export "test1613") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1614 (export "test1614") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1615 (export "test1615") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1616 (export "test1616") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1617 (export "test1617") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1618 (export "test1618") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1619 (export "test1619") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1620 (export "test1620") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1621 (export "test1621") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1622 (export "test1622") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1623 (export "test1623") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1624 (export "test1624") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1625 (export "test1625") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1626 (export "test1626") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1627 (export "test1627") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1628 (export "test1628") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1629 (export "test1629") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1630 (export "test1630") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1631 (export "test1631") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1632 (export "test1632") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1633 (export "test1633") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1634 (export "test1634") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1635 (export "test1635") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1636 (export "test1636") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1637 (export "test1637") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1638 (export "test1638") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1639 (export "test1639") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1640 (export "test1640") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1641 (export "test1641") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1642 (export "test1642") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1643 (export "test1643") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1644 (export "test1644") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1645 (export "test1645") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1646 (export "test1646") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1647 (export "test1647") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1648 (export "test1648") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1649 (export "test1649") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1650 (export "test1650") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1651 (export "test1651") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1652 (export "test1652") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1653 (export "test1653") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1654 (export "test1654") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1655 (export "test1655") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1656 (export "test1656") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1657 (export "test1657") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1658 (export "test1658") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1659 (export "test1659") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1660 (export "test1660") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1661 (export "test1661") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1662 (export "test1662") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1663 (export "test1663") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1664 (export "test1664") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1665 (export "test1665") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1666 (export "test1666") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1667 (export "test1667") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1668 (export "test1668") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1669 (export "test1669") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1670 (export "test1670") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1671 (export "test1671") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1672 (export "test1672") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1673 (export "test1673") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1674 (export "test1674") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1675 (export "test1675") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1676 (export "test1676") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1677 (export "test1677") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1678 (export "test1678") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1679 (export "test1679") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1680 (export "test1680") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1681 (export "test1681") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1682 (export "test1682") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1683 (export "test1683") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1684 (export "test1684") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1685 (export "test1685") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1686 (export "test1686") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1687 (export "test1687") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1688 (export "test1688") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1689 (export "test1689") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1690 (export "test1690") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1691 (export "test1691") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1692 (export "test1692") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1693 (export "test1693") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1694 (export "test1694") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1695 (export "test1695") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1696 (export "test1696") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1697 (export "test1697") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1698 (export "test1698") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1699 (export "test1699") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1700 (export "test1700") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1701 (export "test1701") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1702 (export "test1702") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1703 (export "test1703") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1704 (export "test1704") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1705 (export "test1705") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1706 (export "test1706") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1707 (export "test1707") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1708 (export "test1708") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1709 (export "test1709") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1710 (export "test1710") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1711 (export "test1711") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1712 (export "test1712") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1713 (export "test1713") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1714 (export "test1714") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1715 (export "test1715") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1716 (export "test1716") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1717 (export "test1717") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1718 (export "test1718") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1719 (export "test1719") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1720 (export "test1720") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1721 (export "test1721") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1722 (export "test1722") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1723 (export "test1723") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1724 (export "test1724") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1725 (export "test1725") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1726 (export "test1726") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1727 (export "test1727") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1728 (export "test1728") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1729 (export "test1729") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1730 (export "test1730") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1731 (export "test1731") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1732 (export "test1732") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1733 (export "test1733") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1734 (export "test1734") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1735 (export "test1735") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1736 (export "test1736") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1737 (export "test1737") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1738 (export "test1738") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1739 (export "test1739") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1740 (export "test1740") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1741 (export "test1741") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1742 (export "test1742") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1743 (export "test1743") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1744 (export "test1744") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1745 (export "test1745") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1746 (export "test1746") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1747 (export "test1747") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1748 (export "test1748") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1749 (export "test1749") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1750 (export "test1750") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1751 (export "test1751") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1752 (export "test1752") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1753 (export "test1753") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1754 (export "test1754") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1755 (export "test1755") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1756 (export "test1756") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1757 (export "test1757") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1758 (export "test1758") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1759 (export "test1759") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1760 (export "test1760") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1761 (export "test1761") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1762 (export "test1762") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1763 (export "test1763") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1764 (export "test1764") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1765 (export "test1765") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1766 (export "test1766") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1767 (export "test1767") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1768 (export "test1768") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1769 (export "test1769") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1770 (export "test1770") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1771 (export "test1771") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1772 (export "test1772") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1773 (export "test1773") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1774 (export "test1774") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1775 (export "test1775") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1776 (export "test1776") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1777 (export "test1777") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1778 (export "test1778") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1779 (export "test1779") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1780 (export "test1780") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1781 (export "test1781") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1782 (export "test1782") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1783 (export "test1783") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1784 (export "test1784") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1785 (export "test1785") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1786 (export "test1786") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1787 (export "test1787") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1788 (export "test1788") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1789 (export "test1789") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1790 (export "test1790") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1791 (export "test1791") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1792 (export "test1792") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1793 (export "test1793") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1794 (export "test1794") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1795 (export "test1795") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1796 (export "test1796") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1797 (export "test1797") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1798 (export "test1798") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1799 (export "test1799") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1800 (export "test1800") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1801 (export "test1801") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1802 (export "test1802") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1803 (export "test1803") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1804 (export "test1804") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1805 (export "test1805") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1806 (export "test1806") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1807 (export "test1807") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1808 (export "test1808") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1809 (export "test1809") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1810 (export "test1810") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1811 (export "test1811") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1812 (export "test1812") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1813 (export "test1813") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1814 (export "test1814") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1815 (export "test1815") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1816 (export "test1816") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1817 (export "test1817") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1818 (export "test1818") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1819 (export "test1819") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1820 (export "test1820") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1821 (export "test1821") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1822 (export "test1822") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1823 (export "test1823") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1824 (export "test1824") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1825 (export "test1825") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1826 (export "test1826") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1827 (export "test1827") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1828 (export "test1828") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1829 (export "test1829") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1830 (export "test1830") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1831 (export "test1831") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1832 (export "test1832") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1833 (export "test1833") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1834 (export "test1834") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1835 (export "test1835") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1836 (export "test1836") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1837 (export "test1837") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1838 (export "test1838") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1839 (export "test1839") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1840 (export "test1840") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1841 (export "test1841") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1842 (export "test1842") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1843 (export "test1843") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1844 (export "test1844") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1845 (export "test1845") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1846 (export "test1846") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1847 (export "test1847") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1848 (export "test1848") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1849 (export "test1849") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1850 (export "test1850") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1851 (export "test1851") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1852 (export "test1852") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1853 (export "test1853") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1854 (export "test1854") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1855 (export "test1855") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1856 (export "test1856") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1857 (export "test1857") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1858 (export "test1858") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1859 (export "test1859") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1860 (export "test1860") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1861 (export "test1861") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1862 (export "test1862") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1863 (export "test1863") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1864 (export "test1864") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1865 (export "test1865") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1866 (export "test1866") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1867 (export "test1867") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1868 (export "test1868") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1869 (export "test1869") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1870 (export "test1870") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1871 (export "test1871") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1872 (export "test1872") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1873 (export "test1873") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1874 (export "test1874") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1875 (export "test1875") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1876 (export "test1876") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1877 (export "test1877") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1878 (export "test1878") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1879 (export "test1879") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1880 (export "test1880") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1881 (export "test1881") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1882 (export "test1882") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1883 (export "test1883") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1884 (export "test1884") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1885 (export "test1885") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1886 (export "test1886") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1887 (export "test1887") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1888 (export "test1888") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1889 (export "test1889") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1890 (export "test1890") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1891 (export "test1891") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1892 (export "test1892") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1893 (export "test1893") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1894 (export "test1894") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1895 (export "test1895") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1896 (export "test1896") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1897 (export "test1897") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1898 (export "test1898") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1899 (export "test1899") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1900 (export "test1900") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1901 (export "test1901") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1902 (export "test1902") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1903 (export "test1903") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1904 (export "test1904") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1905 (export "test1905") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1906 (export "test1906") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1907 (export "test1907") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1908 (export "test1908") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1909 (export "test1909") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1910 (export "test1910") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1911 (export "test1911") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1912 (export "test1912") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1913 (export "test1913") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1914 (export "test1914") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1915 (export "test1915") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1916 (export "test1916") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1917 (export "test1917") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1918 (export "test1918") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1919 (export "test1919") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1920 (export "test1920") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1921 (export "test1921") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1922 (export "test1922") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1923 (export "test1923") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1924 (export "test1924") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1925 (export "test1925") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1926 (export "test1926") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1927 (export "test1927") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1928 (export "test1928") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1929 (export "test1929") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1930 (export "test1930") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1931 (export "test1931") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1932 (export "test1932") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1933 (export "test1933") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1934 (export "test1934") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1935 (export "test1935") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1936 (export "test1936") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1937 (export "test1937") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1938 (export "test1938") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1939 (export "test1939") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1940 (export "test1940") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1941 (export "test1941") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1942 (export "test1942") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1943 (export "test1943") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1944 (export "test1944") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1945 (export "test1945") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1946 (export "test1946") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1947 (export "test1947") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1948 (export "test1948") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1949 (export "test1949") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1950 (export "test1950") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1951 (export "test1951") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1952 (export "test1952") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1953 (export "test1953") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1954 (export "test1954") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1955 (export "test1955") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1956 (export "test1956") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1957 (export "test1957") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1958 (export "test1958") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1959 (export "test1959") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1960 (export "test1960") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1961 (export "test1961") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1962 (export "test1962") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1963 (export "test1963") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1964 (export "test1964") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1965 (export "test1965") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1966 (export "test1966") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1967 (export "test1967") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1968 (export "test1968") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1969 (export "test1969") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1970 (export "test1970") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1971 (export "test1971") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1972 (export "test1972") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1973 (export "test1973") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1974 (export "test1974") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1975 (export "test1975") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1976 (export "test1976") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1977 (export "test1977") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1978 (export "test1978") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1979 (export "test1979") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1980 (export "test1980") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1981 (export "test1981") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1982 (export "test1982") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1983 (export "test1983") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1984 (export "test1984") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1985 (export "test1985") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1986 (export "test1986") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1987 (export "test1987") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1988 (export "test1988") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1989 (export "test1989") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1990 (export "test1990") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1991 (export "test1991") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1992 (export "test1992") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1993 (export "test1993") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1994 (export "test1994") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1995 (export "test1995") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1996 (export "test1996") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1997 (export "test1997") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1998 (export "test1998") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test1999 (export "test1999") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2000 (export "test2000") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2001 (export "test2001") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2002 (export "test2002") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2003 (export "test2003") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2004 (export "test2004") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2005 (export "test2005") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2006 (export "test2006") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2007 (export "test2007") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2008 (export "test2008") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2009 (export "test2009") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2010 (export "test2010") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2011 (export "test2011") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2012 (export "test2012") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2013 (export "test2013") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2014 (export "test2014") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2015 (export "test2015") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2016 (export "test2016") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2017 (export "test2017") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2018 (export "test2018") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2019 (export "test2019") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2020 (export "test2020") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2021 (export "test2021") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2022 (export "test2022") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2023 (export "test2023") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2024 (export "test2024") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2025 (export "test2025") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2026 (export "test2026") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2027 (export "test2027") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2028 (export "test2028") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2029 (export "test2029") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2030 (export "test2030") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2031 (export "test2031") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2032 (export "test2032") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2033 (export "test2033") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2034 (export "test2034") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2035 (export "test2035") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2036 (export "test2036") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2037 (export "test2037") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2038 (export "test2038") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2039 (export "test2039") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2040 (export "test2040") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2041 (export "test2041") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2042 (export "test2042") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2043 (export "test2043") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2044 (export "test2044") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2045 (export "test2045") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2046 (export "test2046") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2047 (export "test2047") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2048 (export "test2048") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2049 (export "test2049") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2050 (export "test2050") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2051 (export "test2051") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2052 (export "test2052") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2053 (export "test2053") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2054 (export "test2054") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2055 (export "test2055") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2056 (export "test2056") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2057 (export "test2057") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2058 (export "test2058") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2059 (export "test2059") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2060 (export "test2060") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2061 (export "test2061") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2062 (export "test2062") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2063 (export "test2063") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2064 (export "test2064") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2065 (export "test2065") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2066 (export "test2066") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2067 (export "test2067") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2068 (export "test2068") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2069 (export "test2069") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2070 (export "test2070") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2071 (export "test2071") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2072 (export "test2072") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2073 (export "test2073") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2074 (export "test2074") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2075 (export "test2075") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2076 (export "test2076") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2077 (export "test2077") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2078 (export "test2078") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2079 (export "test2079") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2080 (export "test2080") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2081 (export "test2081") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2082 (export "test2082") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2083 (export "test2083") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2084 (export "test2084") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2085 (export "test2085") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2086 (export "test2086") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2087 (export "test2087") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2088 (export "test2088") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2089 (export "test2089") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2090 (export "test2090") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2091 (export "test2091") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2092 (export "test2092") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2093 (export "test2093") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2094 (export "test2094") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2095 (export "test2095") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2096 (export "test2096") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2097 (export "test2097") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2098 (export "test2098") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2099 (export "test2099") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2100 (export "test2100") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2101 (export "test2101") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2102 (export "test2102") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2103 (export "test2103") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2104 (export "test2104") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2105 (export "test2105") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2106 (export "test2106") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2107 (export "test2107") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2108 (export "test2108") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2109 (export "test2109") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2110 (export "test2110") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2111 (export "test2111") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2112 (export "test2112") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2113 (export "test2113") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2114 (export "test2114") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2115 (export "test2115") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2116 (export "test2116") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2117 (export "test2117") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2118 (export "test2118") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2119 (export "test2119") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2120 (export "test2120") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2121 (export "test2121") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2122 (export "test2122") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2123 (export "test2123") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2124 (export "test2124") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2125 (export "test2125") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2126 (export "test2126") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2127 (export "test2127") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2128 (export "test2128") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2129 (export "test2129") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2130 (export "test2130") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2131 (export "test2131") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2132 (export "test2132") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2133 (export "test2133") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2134 (export "test2134") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2135 (export "test2135") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2136 (export "test2136") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2137 (export "test2137") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2138 (export "test2138") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2139 (export "test2139") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2140 (export "test2140") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2141 (export "test2141") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2142 (export "test2142") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2143 (export "test2143") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2144 (export "test2144") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2145 (export "test2145") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2146 (export "test2146") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2147 (export "test2147") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2148 (export "test2148") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2149 (export "test2149") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2150 (export "test2150") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2151 (export "test2151") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2152 (export "test2152") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2153 (export "test2153") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2154 (export "test2154") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2155 (export "test2155") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2156 (export "test2156") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2157 (export "test2157") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2158 (export "test2158") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2159 (export "test2159") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2160 (export "test2160") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2161 (export "test2161") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2162 (export "test2162") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2163 (export "test2163") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2164 (export "test2164") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2165 (export "test2165") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2166 (export "test2166") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2167 (export "test2167") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2168 (export "test2168") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2169 (export "test2169") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2170 (export "test2170") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2171 (export "test2171") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2172 (export "test2172") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2173 (export "test2173") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2174 (export "test2174") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2175 (export "test2175") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2176 (export "test2176") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2177 (export "test2177") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2178 (export "test2178") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2179 (export "test2179") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2180 (export "test2180") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2181 (export "test2181") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2182 (export "test2182") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2183 (export "test2183") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2184 (export "test2184") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2185 (export "test2185") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2186 (export "test2186") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2187 (export "test2187") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2188 (export "test2188") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2189 (export "test2189") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2190 (export "test2190") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2191 (export "test2191") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2192 (export "test2192") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2193 (export "test2193") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2194 (export "test2194") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2195 (export "test2195") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2196 (export "test2196") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2197 (export "test2197") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2198 (export "test2198") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2199 (export "test2199") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2200 (export "test2200") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2201 (export "test2201") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2202 (export "test2202") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2203 (export "test2203") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2204 (export "test2204") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2205 (export "test2205") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2206 (export "test2206") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2207 (export "test2207") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2208 (export "test2208") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2209 (export "test2209") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2210 (export "test2210") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2211 (export "test2211") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2212 (export "test2212") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2213 (export "test2213") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2214 (export "test2214") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2215 (export "test2215") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2216 (export "test2216") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2217 (export "test2217") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2218 (export "test2218") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2219 (export "test2219") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2220 (export "test2220") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2221 (export "test2221") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2222 (export "test2222") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2223 (export "test2223") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2224 (export "test2224") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2225 (export "test2225") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2226 (export "test2226") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2227 (export "test2227") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2228 (export "test2228") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2229 (export "test2229") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2230 (export "test2230") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2231 (export "test2231") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2232 (export "test2232") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2233 (export "test2233") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2234 (export "test2234") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2235 (export "test2235") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2236 (export "test2236") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2237 (export "test2237") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2238 (export "test2238") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2239 (export "test2239") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2240 (export "test2240") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2241 (export "test2241") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2242 (export "test2242") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2243 (export "test2243") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2244 (export "test2244") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2245 (export "test2245") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2246 (export "test2246") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2247 (export "test2247") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2248 (export "test2248") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2249 (export "test2249") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2250 (export "test2250") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2251 (export "test2251") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2252 (export "test2252") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2253 (export "test2253") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2254 (export "test2254") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2255 (export "test2255") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2256 (export "test2256") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2257 (export "test2257") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2258 (export "test2258") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2259 (export "test2259") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2260 (export "test2260") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2261 (export "test2261") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2262 (export "test2262") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2263 (export "test2263") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2264 (export "test2264") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2265 (export "test2265") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2266 (export "test2266") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2267 (export "test2267") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2268 (export "test2268") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2269 (export "test2269") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2270 (export "test2270") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2271 (export "test2271") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2272 (export "test2272") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2273 (export "test2273") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2274 (export "test2274") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2275 (export "test2275") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2276 (export "test2276") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2277 (export "test2277") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2278 (export "test2278") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2279 (export "test2279") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2280 (export "test2280") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2281 (export "test2281") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2282 (export "test2282") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2283 (export "test2283") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2284 (export "test2284") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2285 (export "test2285") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2286 (export "test2286") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2287 (export "test2287") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2288 (export "test2288") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2289 (export "test2289") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2290 (export "test2290") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2291 (export "test2291") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2292 (export "test2292") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2293 (export "test2293") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2294 (export "test2294") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2295 (export "test2295") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2296 (export "test2296") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2297 (export "test2297") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2298 (export "test2298") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2299 (export "test2299") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2300 (export "test2300") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2301 (export "test2301") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2302 (export "test2302") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2303 (export "test2303") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2304 (export "test2304") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2305 (export "test2305") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2306 (export "test2306") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2307 (export "test2307") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2308 (export "test2308") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2309 (export "test2309") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2310 (export "test2310") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2311 (export "test2311") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2312 (export "test2312") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2313 (export "test2313") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2314 (export "test2314") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2315 (export "test2315") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2316 (export "test2316") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2317 (export "test2317") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2318 (export "test2318") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2319 (export "test2319") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2320 (export "test2320") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2321 (export "test2321") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2322 (export "test2322") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2323 (export "test2323") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2324 (export "test2324") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2325 (export "test2325") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2326 (export "test2326") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2327 (export "test2327") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2328 (export "test2328") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2329 (export "test2329") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2330 (export "test2330") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2331 (export "test2331") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2332 (export "test2332") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2333 (export "test2333") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2334 (export "test2334") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2335 (export "test2335") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2336 (export "test2336") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2337 (export "test2337") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2338 (export "test2338") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2339 (export "test2339") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2340 (export "test2340") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2341 (export "test2341") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2342 (export "test2342") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2343 (export "test2343") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2344 (export "test2344") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2345 (export "test2345") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2346 (export "test2346") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2347 (export "test2347") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2348 (export "test2348") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2349 (export "test2349") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2350 (export "test2350") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2351 (export "test2351") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2352 (export "test2352") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2353 (export "test2353") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2354 (export "test2354") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2355 (export "test2355") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2356 (export "test2356") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2357 (export "test2357") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2358 (export "test2358") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2359 (export "test2359") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2360 (export "test2360") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2361 (export "test2361") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2362 (export "test2362") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2363 (export "test2363") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2364 (export "test2364") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2365 (export "test2365") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2366 (export "test2366") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2367 (export "test2367") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2368 (export "test2368") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2369 (export "test2369") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2370 (export "test2370") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2371 (export "test2371") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2372 (export "test2372") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2373 (export "test2373") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2374 (export "test2374") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2375 (export "test2375") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2376 (export "test2376") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2377 (export "test2377") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2378 (export "test2378") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2379 (export "test2379") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2380 (export "test2380") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2381 (export "test2381") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2382 (export "test2382") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2383 (export "test2383") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2384 (export "test2384") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2385 (export "test2385") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2386 (export "test2386") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2387 (export "test2387") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2388 (export "test2388") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2389 (export "test2389") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2390 (export "test2390") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2391 (export "test2391") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2392 (export "test2392") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2393 (export "test2393") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2394 (export "test2394") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2395 (export "test2395") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2396 (export "test2396") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2397 (export "test2397") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2398 (export "test2398") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2399 (export "test2399") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2400 (export "test2400") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2401 (export "test2401") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2402 (export "test2402") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2403 (export "test2403") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2404 (export "test2404") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2405 (export "test2405") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2406 (export "test2406") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2407 (export "test2407") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2408 (export "test2408") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2409 (export "test2409") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2410 (export "test2410") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2411 (export "test2411") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2412 (export "test2412") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2413 (export "test2413") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2414 (export "test2414") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2415 (export "test2415") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2416 (export "test2416") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2417 (export "test2417") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2418 (export "test2418") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2419 (export "test2419") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2420 (export "test2420") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2421 (export "test2421") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2422 (export "test2422") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2423 (export "test2423") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2424 (export "test2424") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2425 (export "test2425") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2426 (export "test2426") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2427 (export "test2427") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2428 (export "test2428") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2429 (export "test2429") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2430 (export "test2430") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2431 (export "test2431") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2432 (export "test2432") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2433 (export "test2433") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2434 (export "test2434") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2435 (export "test2435") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2436 (export "test2436") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2437 (export "test2437") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2438 (export "test2438") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2439 (export "test2439") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2440 (export "test2440") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2441 (export "test2441") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2442 (export "test2442") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2443 (export "test2443") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2444 (export "test2444") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2445 (export "test2445") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2446 (export "test2446") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2447 (export "test2447") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2448 (export "test2448") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2449 (export "test2449") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2450 (export "test2450") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2451 (export "test2451") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2452 (export "test2452") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2453 (export "test2453") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2454 (export "test2454") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2455 (export "test2455") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2456 (export "test2456") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2457 (export "test2457") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2458 (export "test2458") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2459 (export "test2459") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2460 (export "test2460") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2461 (export "test2461") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2462 (export "test2462") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2463 (export "test2463") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2464 (export "test2464") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2465 (export "test2465") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2466 (export "test2466") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2467 (export "test2467") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2468 (export "test2468") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2469 (export "test2469") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2470 (export "test2470") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2471 (export "test2471") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2472 (export "test2472") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2473 (export "test2473") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2474 (export "test2474") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2475 (export "test2475") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2476 (export "test2476") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2477 (export "test2477") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2478 (export "test2478") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2479 (export "test2479") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2480 (export "test2480") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2481 (export "test2481") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2482 (export "test2482") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2483 (export "test2483") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2484 (export "test2484") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2485 (export "test2485") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2486 (export "test2486") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2487 (export "test2487") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2488 (export "test2488") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2489 (export "test2489") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2490 (export "test2490") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2491 (export "test2491") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2492 (export "test2492") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2493 (export "test2493") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2494 (export "test2494") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2495 (export "test2495") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2496 (export "test2496") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2497 (export "test2497") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2498 (export "test2498") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2499 (export "test2499") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2500 (export "test2500") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2501 (export "test2501") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2502 (export "test2502") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2503 (export "test2503") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2504 (export "test2504") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2505 (export "test2505") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2506 (export "test2506") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2507 (export "test2507") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2508 (export "test2508") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2509 (export "test2509") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2510 (export "test2510") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2511 (export "test2511") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2512 (export "test2512") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2513 (export "test2513") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2514 (export "test2514") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2515 (export "test2515") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2516 (export "test2516") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2517 (export "test2517") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2518 (export "test2518") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2519 (export "test2519") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2520 (export "test2520") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2521 (export "test2521") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2522 (export "test2522") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2523 (export "test2523") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2524 (export "test2524") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2525 (export "test2525") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2526 (export "test2526") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2527 (export "test2527") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2528 (export "test2528") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2529 (export "test2529") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2530 (export "test2530") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2531 (export "test2531") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2532 (export "test2532") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2533 (export "test2533") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2534 (export "test2534") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2535 (export "test2535") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2536 (export "test2536") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2537 (export "test2537") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2538 (export "test2538") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2539 (export "test2539") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2540 (export "test2540") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2541 (export "test2541") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2542 (export "test2542") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2543 (export "test2543") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2544 (export "test2544") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2545 (export "test2545") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2546 (export "test2546") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2547 (export "test2547") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2548 (export "test2548") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2549 (export "test2549") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2550 (export "test2550") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2551 (export "test2551") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2552 (export "test2552") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2553 (export "test2553") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2554 (export "test2554") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2555 (export "test2555") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2556 (export "test2556") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2557 (export "test2557") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2558 (export "test2558") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2559 (export "test2559") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2560 (export "test2560") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2561 (export "test2561") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2562 (export "test2562") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2563 (export "test2563") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2564 (export "test2564") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2565 (export "test2565") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2566 (export "test2566") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2567 (export "test2567") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2568 (export "test2568") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2569 (export "test2569") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2570 (export "test2570") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2571 (export "test2571") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2572 (export "test2572") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2573 (export "test2573") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2574 (export "test2574") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2575 (export "test2575") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2576 (export "test2576") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2577 (export "test2577") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2578 (export "test2578") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2579 (export "test2579") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2580 (export "test2580") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2581 (export "test2581") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2582 (export "test2582") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2583 (export "test2583") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2584 (export "test2584") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2585 (export "test2585") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2586 (export "test2586") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2587 (export "test2587") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2588 (export "test2588") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2589 (export "test2589") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2590 (export "test2590") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2591 (export "test2591") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2592 (export "test2592") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2593 (export "test2593") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2594 (export "test2594") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2595 (export "test2595") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2596 (export "test2596") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2597 (export "test2597") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2598 (export "test2598") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2599 (export "test2599") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2600 (export "test2600") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2601 (export "test2601") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2602 (export "test2602") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2603 (export "test2603") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2604 (export "test2604") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2605 (export "test2605") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2606 (export "test2606") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2607 (export "test2607") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2608 (export "test2608") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2609 (export "test2609") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2610 (export "test2610") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2611 (export "test2611") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2612 (export "test2612") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2613 (export "test2613") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2614 (export "test2614") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2615 (export "test2615") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2616 (export "test2616") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2617 (export "test2617") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2618 (export "test2618") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2619 (export "test2619") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2620 (export "test2620") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2621 (export "test2621") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2622 (export "test2622") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2623 (export "test2623") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2624 (export "test2624") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2625 (export "test2625") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2626 (export "test2626") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2627 (export "test2627") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2628 (export "test2628") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2629 (export "test2629") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2630 (export "test2630") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2631 (export "test2631") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2632 (export "test2632") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2633 (export "test2633") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2634 (export "test2634") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2635 (export "test2635") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2636 (export "test2636") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2637 (export "test2637") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2638 (export "test2638") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2639 (export "test2639") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2640 (export "test2640") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2641 (export "test2641") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2642 (export "test2642") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2643 (export "test2643") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2644 (export "test2644") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2645 (export "test2645") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2646 (export "test2646") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2647 (export "test2647") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2648 (export "test2648") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2649 (export "test2649") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2650 (export "test2650") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2651 (export "test2651") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2652 (export "test2652") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2653 (export "test2653") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2654 (export "test2654") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2655 (export "test2655") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2656 (export "test2656") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2657 (export "test2657") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2658 (export "test2658") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2659 (export "test2659") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2660 (export "test2660") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2661 (export "test2661") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2662 (export "test2662") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2663 (export "test2663") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2664 (export "test2664") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2665 (export "test2665") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2666 (export "test2666") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2667 (export "test2667") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2668 (export "test2668") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2669 (export "test2669") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2670 (export "test2670") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2671 (export "test2671") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2672 (export "test2672") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2673 (export "test2673") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2674 (export "test2674") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2675 (export "test2675") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2676 (export "test2676") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2677 (export "test2677") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2678 (export "test2678") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2679 (export "test2679") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2680 (export "test2680") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2681 (export "test2681") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2682 (export "test2682") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2683 (export "test2683") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2684 (export "test2684") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2685 (export "test2685") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2686 (export "test2686") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2687 (export "test2687") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2688 (export "test2688") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2689 (export "test2689") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2690 (export "test2690") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2691 (export "test2691") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2692 (export "test2692") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2693 (export "test2693") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2694 (export "test2694") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2695 (export "test2695") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2696 (export "test2696") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2697 (export "test2697") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2698 (export "test2698") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2699 (export "test2699") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2700 (export "test2700") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2701 (export "test2701") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2702 (export "test2702") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2703 (export "test2703") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2704 (export "test2704") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2705 (export "test2705") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2706 (export "test2706") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2707 (export "test2707") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2708 (export "test2708") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2709 (export "test2709") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2710 (export "test2710") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2711 (export "test2711") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2712 (export "test2712") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2713 (export "test2713") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2714 (export "test2714") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2715 (export "test2715") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2716 (export "test2716") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2717 (export "test2717") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2718 (export "test2718") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2719 (export "test2719") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2720 (export "test2720") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2721 (export "test2721") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2722 (export "test2722") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2723 (export "test2723") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2724 (export "test2724") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2725 (export "test2725") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2726 (export "test2726") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2727 (export "test2727") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2728 (export "test2728") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2729 (export "test2729") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2730 (export "test2730") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2731 (export "test2731") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2732 (export "test2732") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2733 (export "test2733") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2734 (export "test2734") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2735 (export "test2735") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2736 (export "test2736") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2737 (export "test2737") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2738 (export "test2738") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2739 (export "test2739") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2740 (export "test2740") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2741 (export "test2741") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2742 (export "test2742") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2743 (export "test2743") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2744 (export "test2744") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2745 (export "test2745") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2746 (export "test2746") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2747 (export "test2747") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2748 (export "test2748") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2749 (export "test2749") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2750 (export "test2750") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2751 (export "test2751") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2752 (export "test2752") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2753 (export "test2753") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2754 (export "test2754") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2755 (export "test2755") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2756 (export "test2756") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2757 (export "test2757") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2758 (export "test2758") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2759 (export "test2759") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2760 (export "test2760") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2761 (export "test2761") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2762 (export "test2762") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2763 (export "test2763") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2764 (export "test2764") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2765 (export "test2765") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2766 (export "test2766") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2767 (export "test2767") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2768 (export "test2768") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2769 (export "test2769") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2770 (export "test2770") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2771 (export "test2771") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2772 (export "test2772") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2773 (export "test2773") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2774 (export "test2774") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2775 (export "test2775") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2776 (export "test2776") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2777 (export "test2777") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2778 (export "test2778") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2779 (export "test2779") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2780 (export "test2780") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2781 (export "test2781") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2782 (export "test2782") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2783 (export "test2783") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2784 (export "test2784") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2785 (export "test2785") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2786 (export "test2786") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2787 (export "test2787") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2788 (export "test2788") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2789 (export "test2789") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2790 (export "test2790") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2791 (export "test2791") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2792 (export "test2792") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2793 (export "test2793") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2794 (export "test2794") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2795 (export "test2795") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2796 (export "test2796") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2797 (export "test2797") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2798 (export "test2798") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2799 (export "test2799") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2800 (export "test2800") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2801 (export "test2801") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2802 (export "test2802") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2803 (export "test2803") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2804 (export "test2804") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2805 (export "test2805") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2806 (export "test2806") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2807 (export "test2807") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2808 (export "test2808") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2809 (export "test2809") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2810 (export "test2810") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2811 (export "test2811") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2812 (export "test2812") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2813 (export "test2813") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2814 (export "test2814") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2815 (export "test2815") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2816 (export "test2816") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2817 (export "test2817") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2818 (export "test2818") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2819 (export "test2819") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2820 (export "test2820") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2821 (export "test2821") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2822 (export "test2822") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2823 (export "test2823") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2824 (export "test2824") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2825 (export "test2825") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2826 (export "test2826") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2827 (export "test2827") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2828 (export "test2828") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2829 (export "test2829") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2830 (export "test2830") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2831 (export "test2831") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2832 (export "test2832") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2833 (export "test2833") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2834 (export "test2834") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2835 (export "test2835") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2836 (export "test2836") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2837 (export "test2837") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2838 (export "test2838") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2839 (export "test2839") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2840 (export "test2840") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2841 (export "test2841") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2842 (export "test2842") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2843 (export "test2843") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2844 (export "test2844") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2845 (export "test2845") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2846 (export "test2846") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2847 (export "test2847") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2848 (export "test2848") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2849 (export "test2849") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2850 (export "test2850") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2851 (export "test2851") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2852 (export "test2852") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2853 (export "test2853") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2854 (export "test2854") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2855 (export "test2855") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2856 (export "test2856") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2857 (export "test2857") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2858 (export "test2858") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2859 (export "test2859") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2860 (export "test2860") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2861 (export "test2861") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2862 (export "test2862") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2863 (export "test2863") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2864 (export "test2864") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2865 (export "test2865") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2866 (export "test2866") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2867 (export "test2867") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2868 (export "test2868") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2869 (export "test2869") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2870 (export "test2870") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2871 (export "test2871") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2872 (export "test2872") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2873 (export "test2873") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2874 (export "test2874") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2875 (export "test2875") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2876 (export "test2876") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2877 (export "test2877") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2878 (export "test2878") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2879 (export "test2879") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2880 (export "test2880") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2881 (export "test2881") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2882 (export "test2882") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2883 (export "test2883") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2884 (export "test2884") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2885 (export "test2885") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2886 (export "test2886") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2887 (export "test2887") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2888 (export "test2888") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2889 (export "test2889") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2890 (export "test2890") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2891 (export "test2891") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2892 (export "test2892") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2893 (export "test2893") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2894 (export "test2894") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2895 (export "test2895") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2896 (export "test2896") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2897 (export "test2897") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2898 (export "test2898") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2899 (export "test2899") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2900 (export "test2900") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2901 (export "test2901") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2902 (export "test2902") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2903 (export "test2903") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2904 (export "test2904") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2905 (export "test2905") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2906 (export "test2906") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2907 (export "test2907") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2908 (export "test2908") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2909 (export "test2909") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2910 (export "test2910") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2911 (export "test2911") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2912 (export "test2912") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2913 (export "test2913") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2914 (export "test2914") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2915 (export "test2915") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2916 (export "test2916") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2917 (export "test2917") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2918 (export "test2918") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2919 (export "test2919") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2920 (export "test2920") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2921 (export "test2921") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2922 (export "test2922") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2923 (export "test2923") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2924 (export "test2924") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2925 (export "test2925") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2926 (export "test2926") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2927 (export "test2927") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2928 (export "test2928") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2929 (export "test2929") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2930 (export "test2930") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2931 (export "test2931") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2932 (export "test2932") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2933 (export "test2933") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2934 (export "test2934") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2935 (export "test2935") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2936 (export "test2936") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2937 (export "test2937") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2938 (export "test2938") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2939 (export "test2939") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2940 (export "test2940") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2941 (export "test2941") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2942 (export "test2942") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2943 (export "test2943") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2944 (export "test2944") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2945 (export "test2945") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2946 (export "test2946") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2947 (export "test2947") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2948 (export "test2948") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2949 (export "test2949") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2950 (export "test2950") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2951 (export "test2951") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2952 (export "test2952") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2953 (export "test2953") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2954 (export "test2954") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2955 (export "test2955") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2956 (export "test2956") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2957 (export "test2957") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2958 (export "test2958") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2959 (export "test2959") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2960 (export "test2960") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2961 (export "test2961") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2962 (export "test2962") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2963 (export "test2963") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2964 (export "test2964") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2965 (export "test2965") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2966 (export "test2966") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2967 (export "test2967") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2968 (export "test2968") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2969 (export "test2969") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2970 (export "test2970") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2971 (export "test2971") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2972 (export "test2972") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2973 (export "test2973") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2974 (export "test2974") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2975 (export "test2975") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2976 (export "test2976") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2977 (export "test2977") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2978 (export "test2978") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2979 (export "test2979") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2980 (export "test2980") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2981 (export "test2981") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2982 (export "test2982") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2983 (export "test2983") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2984 (export "test2984") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2985 (export "test2985") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2986 (export "test2986") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2987 (export "test2987") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2988 (export "test2988") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2989 (export "test2989") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2990 (export "test2990") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2991 (export "test2991") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2992 (export "test2992") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2993 (export "test2993") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2994 (export "test2994") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2995 (export "test2995") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2996 (export "test2996") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2997 (export "test2997") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2998 (export "test2998") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test2999 (export "test2999") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3000 (export "test3000") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3001 (export "test3001") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3002 (export "test3002") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3003 (export "test3003") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3004 (export "test3004") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3005 (export "test3005") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3006 (export "test3006") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3007 (export "test3007") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3008 (export "test3008") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3009 (export "test3009") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3010 (export "test3010") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3011 (export "test3011") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3012 (export "test3012") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3013 (export "test3013") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3014 (export "test3014") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3015 (export "test3015") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3016 (export "test3016") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3017 (export "test3017") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3018 (export "test3018") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3019 (export "test3019") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3020 (export "test3020") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3021 (export "test3021") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3022 (export "test3022") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3023 (export "test3023") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3024 (export "test3024") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3025 (export "test3025") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3026 (export "test3026") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3027 (export "test3027") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3028 (export "test3028") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3029 (export "test3029") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3030 (export "test3030") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3031 (export "test3031") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3032 (export "test3032") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3033 (export "test3033") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3034 (export "test3034") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3035 (export "test3035") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3036 (export "test3036") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3037 (export "test3037") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3038 (export "test3038") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3039 (export "test3039") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3040 (export "test3040") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3041 (export "test3041") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3042 (export "test3042") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3043 (export "test3043") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3044 (export "test3044") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3045 (export "test3045") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3046 (export "test3046") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3047 (export "test3047") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3048 (export "test3048") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3049 (export "test3049") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3050 (export "test3050") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3051 (export "test3051") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3052 (export "test3052") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3053 (export "test3053") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3054 (export "test3054") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3055 (export "test3055") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3056 (export "test3056") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3057 (export "test3057") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3058 (export "test3058") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3059 (export "test3059") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3060 (export "test3060") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3061 (export "test3061") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3062 (export "test3062") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3063 (export "test3063") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3064 (export "test3064") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3065 (export "test3065") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3066 (export "test3066") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3067 (export "test3067") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3068 (export "test3068") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3069 (export "test3069") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3070 (export "test3070") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3071 (export "test3071") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3072 (export "test3072") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3073 (export "test3073") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3074 (export "test3074") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3075 (export "test3075") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3076 (export "test3076") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3077 (export "test3077") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3078 (export "test3078") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3079 (export "test3079") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3080 (export "test3080") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3081 (export "test3081") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3082 (export "test3082") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3083 (export "test3083") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3084 (export "test3084") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3085 (export "test3085") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3086 (export "test3086") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3087 (export "test3087") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3088 (export "test3088") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3089 (export "test3089") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3090 (export "test3090") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3091 (export "test3091") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3092 (export "test3092") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3093 (export "test3093") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3094 (export "test3094") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3095 (export "test3095") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3096 (export "test3096") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3097 (export "test3097") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3098 (export "test3098") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3099 (export "test3099") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3100 (export "test3100") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3101 (export "test3101") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3102 (export "test3102") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3103 (export "test3103") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3104 (export "test3104") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3105 (export "test3105") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3106 (export "test3106") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3107 (export "test3107") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3108 (export "test3108") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3109 (export "test3109") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3110 (export "test3110") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3111 (export "test3111") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3112 (export "test3112") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3113 (export "test3113") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3114 (export "test3114") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3115 (export "test3115") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3116 (export "test3116") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3117 (export "test3117") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3118 (export "test3118") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3119 (export "test3119") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3120 (export "test3120") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3121 (export "test3121") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3122 (export "test3122") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3123 (export "test3123") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3124 (export "test3124") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3125 (export "test3125") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3126 (export "test3126") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3127 (export "test3127") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3128 (export "test3128") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3129 (export "test3129") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3130 (export "test3130") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3131 (export "test3131") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3132 (export "test3132") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3133 (export "test3133") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3134 (export "test3134") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3135 (export "test3135") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3136 (export "test3136") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3137 (export "test3137") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3138 (export "test3138") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3139 (export "test3139") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3140 (export "test3140") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3141 (export "test3141") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3142 (export "test3142") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3143 (export "test3143") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3144 (export "test3144") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3145 (export "test3145") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3146 (export "test3146") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3147 (export "test3147") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3148 (export "test3148") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3149 (export "test3149") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3150 (export "test3150") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3151 (export "test3151") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3152 (export "test3152") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3153 (export "test3153") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3154 (export "test3154") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3155 (export "test3155") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3156 (export "test3156") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3157 (export "test3157") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3158 (export "test3158") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3159 (export "test3159") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3160 (export "test3160") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3161 (export "test3161") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3162 (export "test3162") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3163 (export "test3163") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3164 (export "test3164") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3165 (export "test3165") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3166 (export "test3166") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3167 (export "test3167") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3168 (export "test3168") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3169 (export "test3169") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3170 (export "test3170") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3171 (export "test3171") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3172 (export "test3172") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3173 (export "test3173") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3174 (export "test3174") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3175 (export "test3175") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3176 (export "test3176") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3177 (export "test3177") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3178 (export "test3178") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3179 (export "test3179") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3180 (export "test3180") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3181 (export "test3181") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3182 (export "test3182") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3183 (export "test3183") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3184 (export "test3184") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3185 (export "test3185") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3186 (export "test3186") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3187 (export "test3187") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3188 (export "test3188") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3189 (export "test3189") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3190 (export "test3190") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3191 (export "test3191") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3192 (export "test3192") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3193 (export "test3193") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3194 (export "test3194") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3195 (export "test3195") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3196 (export "test3196") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3197 (export "test3197") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3198 (export "test3198") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3199 (export "test3199") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3200 (export "test3200") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3201 (export "test3201") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3202 (export "test3202") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3203 (export "test3203") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3204 (export "test3204") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3205 (export "test3205") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3206 (export "test3206") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3207 (export "test3207") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3208 (export "test3208") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3209 (export "test3209") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3210 (export "test3210") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3211 (export "test3211") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3212 (export "test3212") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3213 (export "test3213") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3214 (export "test3214") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3215 (export "test3215") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3216 (export "test3216") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3217 (export "test3217") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3218 (export "test3218") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3219 (export "test3219") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3220 (export "test3220") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3221 (export "test3221") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3222 (export "test3222") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3223 (export "test3223") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3224 (export "test3224") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3225 (export "test3225") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3226 (export "test3226") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3227 (export "test3227") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3228 (export "test3228") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3229 (export "test3229") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3230 (export "test3230") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3231 (export "test3231") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3232 (export "test3232") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3233 (export "test3233") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3234 (export "test3234") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3235 (export "test3235") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3236 (export "test3236") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3237 (export "test3237") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3238 (export "test3238") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3239 (export "test3239") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3240 (export "test3240") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3241 (export "test3241") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3242 (export "test3242") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3243 (export "test3243") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3244 (export "test3244") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3245 (export "test3245") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3246 (export "test3246") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3247 (export "test3247") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3248 (export "test3248") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3249 (export "test3249") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3250 (export "test3250") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3251 (export "test3251") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3252 (export "test3252") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3253 (export "test3253") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3254 (export "test3254") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3255 (export "test3255") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3256 (export "test3256") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3257 (export "test3257") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3258 (export "test3258") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3259 (export "test3259") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3260 (export "test3260") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3261 (export "test3261") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3262 (export "test3262") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3263 (export "test3263") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3264 (export "test3264") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3265 (export "test3265") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3266 (export "test3266") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3267 (export "test3267") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3268 (export "test3268") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3269 (export "test3269") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3270 (export "test3270") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3271 (export "test3271") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3272 (export "test3272") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3273 (export "test3273") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3274 (export "test3274") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3275 (export "test3275") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3276 (export "test3276") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3277 (export "test3277") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3278 (export "test3278") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3279 (export "test3279") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3280 (export "test3280") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3281 (export "test3281") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3282 (export "test3282") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3283 (export "test3283") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3284 (export "test3284") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3285 (export "test3285") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3286 (export "test3286") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3287 (export "test3287") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3288 (export "test3288") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3289 (export "test3289") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3290 (export "test3290") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3291 (export "test3291") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3292 (export "test3292") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3293 (export "test3293") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3294 (export "test3294") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3295 (export "test3295") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3296 (export "test3296") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3297 (export "test3297") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3298 (export "test3298") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3299 (export "test3299") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3300 (export "test3300") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3301 (export "test3301") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3302 (export "test3302") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3303 (export "test3303") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3304 (export "test3304") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3305 (export "test3305") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3306 (export "test3306") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3307 (export "test3307") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3308 (export "test3308") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3309 (export "test3309") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3310 (export "test3310") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3311 (export "test3311") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3312 (export "test3312") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3313 (export "test3313") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3314 (export "test3314") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3315 (export "test3315") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3316 (export "test3316") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3317 (export "test3317") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3318 (export "test3318") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3319 (export "test3319") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3320 (export "test3320") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3321 (export "test3321") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3322 (export "test3322") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3323 (export "test3323") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3324 (export "test3324") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3325 (export "test3325") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3326 (export "test3326") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3327 (export "test3327") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3328 (export "test3328") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3329 (export "test3329") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3330 (export "test3330") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3331 (export "test3331") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3332 (export "test3332") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3333 (export "test3333") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3334 (export "test3334") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3335 (export "test3335") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3336 (export "test3336") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3337 (export "test3337") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3338 (export "test3338") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3339 (export "test3339") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3340 (export "test3340") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3341 (export "test3341") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3342 (export "test3342") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3343 (export "test3343") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3344 (export "test3344") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3345 (export "test3345") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3346 (export "test3346") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3347 (export "test3347") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3348 (export "test3348") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3349 (export "test3349") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3350 (export "test3350") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3351 (export "test3351") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3352 (export "test3352") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3353 (export "test3353") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3354 (export "test3354") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3355 (export "test3355") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3356 (export "test3356") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3357 (export "test3357") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3358 (export "test3358") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3359 (export "test3359") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3360 (export "test3360") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3361 (export "test3361") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3362 (export "test3362") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3363 (export "test3363") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3364 (export "test3364") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3365 (export "test3365") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3366 (export "test3366") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3367 (export "test3367") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3368 (export "test3368") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3369 (export "test3369") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3370 (export "test3370") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3371 (export "test3371") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3372 (export "test3372") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3373 (export "test3373") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3374 (export "test3374") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3375 (export "test3375") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3376 (export "test3376") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3377 (export "test3377") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3378 (export "test3378") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3379 (export "test3379") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3380 (export "test3380") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3381 (export "test3381") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3382 (export "test3382") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3383 (export "test3383") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3384 (export "test3384") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3385 (export "test3385") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3386 (export "test3386") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3387 (export "test3387") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3388 (export "test3388") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3389 (export "test3389") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3390 (export "test3390") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3391 (export "test3391") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3392 (export "test3392") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3393 (export "test3393") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3394 (export "test3394") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3395 (export "test3395") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3396 (export "test3396") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3397 (export "test3397") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3398 (export "test3398") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3399 (export "test3399") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3400 (export "test3400") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3401 (export "test3401") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3402 (export "test3402") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3403 (export "test3403") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3404 (export "test3404") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3405 (export "test3405") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3406 (export "test3406") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3407 (export "test3407") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3408 (export "test3408") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3409 (export "test3409") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3410 (export "test3410") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3411 (export "test3411") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3412 (export "test3412") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3413 (export "test3413") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3414 (export "test3414") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3415 (export "test3415") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3416 (export "test3416") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3417 (export "test3417") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3418 (export "test3418") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3419 (export "test3419") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3420 (export "test3420") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3421 (export "test3421") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3422 (export "test3422") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3423 (export "test3423") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3424 (export "test3424") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3425 (export "test3425") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3426 (export "test3426") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3427 (export "test3427") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3428 (export "test3428") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3429 (export "test3429") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3430 (export "test3430") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3431 (export "test3431") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3432 (export "test3432") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3433 (export "test3433") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3434 (export "test3434") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3435 (export "test3435") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3436 (export "test3436") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3437 (export "test3437") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3438 (export "test3438") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3439 (export "test3439") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3440 (export "test3440") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3441 (export "test3441") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3442 (export "test3442") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3443 (export "test3443") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3444 (export "test3444") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3445 (export "test3445") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3446 (export "test3446") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3447 (export "test3447") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3448 (export "test3448") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3449 (export "test3449") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3450 (export "test3450") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3451 (export "test3451") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3452 (export "test3452") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3453 (export "test3453") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3454 (export "test3454") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3455 (export "test3455") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3456 (export "test3456") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3457 (export "test3457") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3458 (export "test3458") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3459 (export "test3459") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3460 (export "test3460") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3461 (export "test3461") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3462 (export "test3462") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3463 (export "test3463") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3464 (export "test3464") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3465 (export "test3465") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3466 (export "test3466") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3467 (export "test3467") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3468 (export "test3468") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3469 (export "test3469") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3470 (export "test3470") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3471 (export "test3471") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3472 (export "test3472") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3473 (export "test3473") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3474 (export "test3474") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3475 (export "test3475") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3476 (export "test3476") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3477 (export "test3477") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3478 (export "test3478") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3479 (export "test3479") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3480 (export "test3480") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3481 (export "test3481") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3482 (export "test3482") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3483 (export "test3483") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3484 (export "test3484") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3485 (export "test3485") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3486 (export "test3486") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3487 (export "test3487") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3488 (export "test3488") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3489 (export "test3489") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3490 (export "test3490") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3491 (export "test3491") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3492 (export "test3492") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3493 (export "test3493") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3494 (export "test3494") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3495 (export "test3495") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3496 (export "test3496") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3497 (export "test3497") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3498 (export "test3498") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3499 (export "test3499") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3500 (export "test3500") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3501 (export "test3501") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3502 (export "test3502") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3503 (export "test3503") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3504 (export "test3504") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3505 (export "test3505") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3506 (export "test3506") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3507 (export "test3507") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3508 (export "test3508") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3509 (export "test3509") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3510 (export "test3510") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3511 (export "test3511") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3512 (export "test3512") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3513 (export "test3513") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3514 (export "test3514") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3515 (export "test3515") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3516 (export "test3516") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3517 (export "test3517") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3518 (export "test3518") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3519 (export "test3519") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3520 (export "test3520") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3521 (export "test3521") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3522 (export "test3522") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3523 (export "test3523") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3524 (export "test3524") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3525 (export "test3525") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3526 (export "test3526") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3527 (export "test3527") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3528 (export "test3528") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3529 (export "test3529") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3530 (export "test3530") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3531 (export "test3531") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3532 (export "test3532") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3533 (export "test3533") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3534 (export "test3534") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3535 (export "test3535") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3536 (export "test3536") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3537 (export "test3537") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3538 (export "test3538") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3539 (export "test3539") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3540 (export "test3540") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3541 (export "test3541") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3542 (export "test3542") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3543 (export "test3543") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3544 (export "test3544") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3545 (export "test3545") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3546 (export "test3546") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3547 (export "test3547") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3548 (export "test3548") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3549 (export "test3549") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3550 (export "test3550") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3551 (export "test3551") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3552 (export "test3552") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3553 (export "test3553") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3554 (export "test3554") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3555 (export "test3555") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3556 (export "test3556") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3557 (export "test3557") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3558 (export "test3558") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3559 (export "test3559") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3560 (export "test3560") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3561 (export "test3561") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3562 (export "test3562") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3563 (export "test3563") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3564 (export "test3564") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3565 (export "test3565") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3566 (export "test3566") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3567 (export "test3567") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3568 (export "test3568") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3569 (export "test3569") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3570 (export "test3570") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3571 (export "test3571") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3572 (export "test3572") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3573 (export "test3573") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3574 (export "test3574") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3575 (export "test3575") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3576 (export "test3576") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3577 (export "test3577") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3578 (export "test3578") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3579 (export "test3579") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3580 (export "test3580") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3581 (export "test3581") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3582 (export "test3582") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3583 (export "test3583") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3584 (export "test3584") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3585 (export "test3585") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3586 (export "test3586") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3587 (export "test3587") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3588 (export "test3588") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3589 (export "test3589") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3590 (export "test3590") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3591 (export "test3591") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3592 (export "test3592") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3593 (export "test3593") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3594 (export "test3594") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3595 (export "test3595") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3596 (export "test3596") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3597 (export "test3597") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3598 (export "test3598") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3599 (export "test3599") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3600 (export "test3600") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3601 (export "test3601") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3602 (export "test3602") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3603 (export "test3603") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3604 (export "test3604") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3605 (export "test3605") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3606 (export "test3606") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3607 (export "test3607") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3608 (export "test3608") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3609 (export "test3609") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3610 (export "test3610") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3611 (export "test3611") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3612 (export "test3612") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3613 (export "test3613") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3614 (export "test3614") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3615 (export "test3615") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3616 (export "test3616") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3617 (export "test3617") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3618 (export "test3618") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3619 (export "test3619") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3620 (export "test3620") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3621 (export "test3621") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3622 (export "test3622") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3623 (export "test3623") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3624 (export "test3624") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3625 (export "test3625") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3626 (export "test3626") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3627 (export "test3627") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3628 (export "test3628") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3629 (export "test3629") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3630 (export "test3630") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3631 (export "test3631") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3632 (export "test3632") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3633 (export "test3633") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3634 (export "test3634") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3635 (export "test3635") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3636 (export "test3636") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3637 (export "test3637") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3638 (export "test3638") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3639 (export "test3639") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3640 (export "test3640") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3641 (export "test3641") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3642 (export "test3642") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3643 (export "test3643") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3644 (export "test3644") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3645 (export "test3645") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3646 (export "test3646") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3647 (export "test3647") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3648 (export "test3648") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3649 (export "test3649") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3650 (export "test3650") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3651 (export "test3651") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3652 (export "test3652") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3653 (export "test3653") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3654 (export "test3654") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3655 (export "test3655") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3656 (export "test3656") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3657 (export "test3657") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3658 (export "test3658") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3659 (export "test3659") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3660 (export "test3660") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3661 (export "test3661") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3662 (export "test3662") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3663 (export "test3663") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3664 (export "test3664") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3665 (export "test3665") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3666 (export "test3666") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3667 (export "test3667") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3668 (export "test3668") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3669 (export "test3669") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3670 (export "test3670") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3671 (export "test3671") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3672 (export "test3672") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3673 (export "test3673") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3674 (export "test3674") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3675 (export "test3675") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3676 (export "test3676") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3677 (export "test3677") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3678 (export "test3678") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3679 (export "test3679") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3680 (export "test3680") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3681 (export "test3681") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3682 (export "test3682") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3683 (export "test3683") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3684 (export "test3684") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3685 (export "test3685") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3686 (export "test3686") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3687 (export "test3687") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3688 (export "test3688") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3689 (export "test3689") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3690 (export "test3690") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3691 (export "test3691") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3692 (export "test3692") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3693 (export "test3693") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3694 (export "test3694") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3695 (export "test3695") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3696 (export "test3696") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3697 (export "test3697") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3698 (export "test3698") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3699 (export "test3699") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3700 (export "test3700") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3701 (export "test3701") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3702 (export "test3702") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3703 (export "test3703") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3704 (export "test3704") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3705 (export "test3705") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3706 (export "test3706") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3707 (export "test3707") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3708 (export "test3708") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3709 (export "test3709") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3710 (export "test3710") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3711 (export "test3711") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3712 (export "test3712") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3713 (export "test3713") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3714 (export "test3714") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3715 (export "test3715") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3716 (export "test3716") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3717 (export "test3717") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3718 (export "test3718") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3719 (export "test3719") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3720 (export "test3720") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3721 (export "test3721") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3722 (export "test3722") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3723 (export "test3723") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3724 (export "test3724") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3725 (export "test3725") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3726 (export "test3726") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3727 (export "test3727") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3728 (export "test3728") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3729 (export "test3729") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3730 (export "test3730") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3731 (export "test3731") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3732 (export "test3732") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3733 (export "test3733") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3734 (export "test3734") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3735 (export "test3735") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3736 (export "test3736") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3737 (export "test3737") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3738 (export "test3738") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3739 (export "test3739") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3740 (export "test3740") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3741 (export "test3741") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3742 (export "test3742") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3743 (export "test3743") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3744 (export "test3744") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3745 (export "test3745") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3746 (export "test3746") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3747 (export "test3747") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3748 (export "test3748") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3749 (export "test3749") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3750 (export "test3750") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3751 (export "test3751") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3752 (export "test3752") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3753 (export "test3753") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3754 (export "test3754") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3755 (export "test3755") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3756 (export "test3756") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3757 (export "test3757") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3758 (export "test3758") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3759 (export "test3759") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3760 (export "test3760") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3761 (export "test3761") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3762 (export "test3762") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3763 (export "test3763") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3764 (export "test3764") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3765 (export "test3765") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3766 (export "test3766") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3767 (export "test3767") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3768 (export "test3768") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3769 (export "test3769") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3770 (export "test3770") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3771 (export "test3771") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3772 (export "test3772") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3773 (export "test3773") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3774 (export "test3774") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3775 (export "test3775") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3776 (export "test3776") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3777 (export "test3777") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3778 (export "test3778") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3779 (export "test3779") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3780 (export "test3780") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3781 (export "test3781") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3782 (export "test3782") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3783 (export "test3783") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3784 (export "test3784") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3785 (export "test3785") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3786 (export "test3786") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3787 (export "test3787") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3788 (export "test3788") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3789 (export "test3789") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3790 (export "test3790") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3791 (export "test3791") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3792 (export "test3792") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3793 (export "test3793") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3794 (export "test3794") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3795 (export "test3795") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3796 (export "test3796") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3797 (export "test3797") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3798 (export "test3798") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3799 (export "test3799") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3800 (export "test3800") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3801 (export "test3801") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3802 (export "test3802") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3803 (export "test3803") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3804 (export "test3804") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3805 (export "test3805") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3806 (export "test3806") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3807 (export "test3807") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3808 (export "test3808") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3809 (export "test3809") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3810 (export "test3810") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3811 (export "test3811") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3812 (export "test3812") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3813 (export "test3813") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3814 (export "test3814") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3815 (export "test3815") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3816 (export "test3816") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3817 (export "test3817") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3818 (export "test3818") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3819 (export "test3819") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3820 (export "test3820") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3821 (export "test3821") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3822 (export "test3822") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3823 (export "test3823") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3824 (export "test3824") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3825 (export "test3825") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3826 (export "test3826") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3827 (export "test3827") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3828 (export "test3828") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3829 (export "test3829") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3830 (export "test3830") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3831 (export "test3831") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3832 (export "test3832") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3833 (export "test3833") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3834 (export "test3834") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3835 (export "test3835") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3836 (export "test3836") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3837 (export "test3837") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3838 (export "test3838") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3839 (export "test3839") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3840 (export "test3840") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3841 (export "test3841") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3842 (export "test3842") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3843 (export "test3843") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3844 (export "test3844") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3845 (export "test3845") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3846 (export "test3846") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3847 (export "test3847") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3848 (export "test3848") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3849 (export "test3849") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3850 (export "test3850") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3851 (export "test3851") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3852 (export "test3852") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3853 (export "test3853") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3854 (export "test3854") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3855 (export "test3855") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3856 (export "test3856") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3857 (export "test3857") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3858 (export "test3858") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3859 (export "test3859") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3860 (export "test3860") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3861 (export "test3861") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3862 (export "test3862") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3863 (export "test3863") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3864 (export "test3864") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3865 (export "test3865") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3866 (export "test3866") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3867 (export "test3867") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3868 (export "test3868") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3869 (export "test3869") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3870 (export "test3870") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3871 (export "test3871") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3872 (export "test3872") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3873 (export "test3873") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3874 (export "test3874") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3875 (export "test3875") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3876 (export "test3876") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3877 (export "test3877") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3878 (export "test3878") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3879 (export "test3879") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3880 (export "test3880") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3881 (export "test3881") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3882 (export "test3882") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3883 (export "test3883") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3884 (export "test3884") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3885 (export "test3885") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3886 (export "test3886") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3887 (export "test3887") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3888 (export "test3888") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3889 (export "test3889") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3890 (export "test3890") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3891 (export "test3891") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3892 (export "test3892") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3893 (export "test3893") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3894 (export "test3894") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3895 (export "test3895") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3896 (export "test3896") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3897 (export "test3897") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3898 (export "test3898") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3899 (export "test3899") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3900 (export "test3900") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3901 (export "test3901") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3902 (export "test3902") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3903 (export "test3903") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3904 (export "test3904") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3905 (export "test3905") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3906 (export "test3906") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3907 (export "test3907") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3908 (export "test3908") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3909 (export "test3909") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3910 (export "test3910") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3911 (export "test3911") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3912 (export "test3912") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3913 (export "test3913") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3914 (export "test3914") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3915 (export "test3915") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3916 (export "test3916") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3917 (export "test3917") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3918 (export "test3918") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3919 (export "test3919") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3920 (export "test3920") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3921 (export "test3921") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3922 (export "test3922") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3923 (export "test3923") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3924 (export "test3924") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3925 (export "test3925") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3926 (export "test3926") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3927 (export "test3927") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3928 (export "test3928") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3929 (export "test3929") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3930 (export "test3930") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3931 (export "test3931") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3932 (export "test3932") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3933 (export "test3933") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3934 (export "test3934") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3935 (export "test3935") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3936 (export "test3936") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3937 (export "test3937") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3938 (export "test3938") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3939 (export "test3939") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3940 (export "test3940") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3941 (export "test3941") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3942 (export "test3942") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3943 (export "test3943") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3944 (export "test3944") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3945 (export "test3945") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3946 (export "test3946") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3947 (export "test3947") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3948 (export "test3948") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3949 (export "test3949") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3950 (export "test3950") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3951 (export "test3951") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3952 (export "test3952") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3953 (export "test3953") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3954 (export "test3954") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3955 (export "test3955") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3956 (export "test3956") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3957 (export "test3957") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3958 (export "test3958") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3959 (export "test3959") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3960 (export "test3960") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3961 (export "test3961") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3962 (export "test3962") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3963 (export "test3963") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3964 (export "test3964") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3965 (export "test3965") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3966 (export "test3966") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3967 (export "test3967") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3968 (export "test3968") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3969 (export "test3969") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3970 (export "test3970") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3971 (export "test3971") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3972 (export "test3972") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3973 (export "test3973") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3974 (export "test3974") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3975 (export "test3975") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3976 (export "test3976") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3977 (export "test3977") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3978 (export "test3978") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3979 (export "test3979") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3980 (export "test3980") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3981 (export "test3981") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3982 (export "test3982") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3983 (export "test3983") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3984 (export "test3984") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3985 (export "test3985") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3986 (export "test3986") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3987 (export "test3987") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3988 (export "test3988") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3989 (export "test3989") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3990 (export "test3990") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3991 (export "test3991") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3992 (export "test3992") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3993 (export "test3993") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3994 (export "test3994") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3995 (export "test3995") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3996 (export "test3996") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3997 (export "test3997") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3998 (export "test3998") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test3999 (export "test3999") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4000 (export "test4000") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4001 (export "test4001") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4002 (export "test4002") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4003 (export "test4003") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4004 (export "test4004") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4005 (export "test4005") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4006 (export "test4006") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4007 (export "test4007") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4008 (export "test4008") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4009 (export "test4009") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4010 (export "test4010") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4011 (export "test4011") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4012 (export "test4012") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4013 (export "test4013") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4014 (export "test4014") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4015 (export "test4015") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4016 (export "test4016") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4017 (export "test4017") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4018 (export "test4018") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4019 (export "test4019") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4020 (export "test4020") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4021 (export "test4021") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4022 (export "test4022") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4023 (export "test4023") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4024 (export "test4024") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4025 (export "test4025") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4026 (export "test4026") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4027 (export "test4027") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4028 (export "test4028") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4029 (export "test4029") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4030 (export "test4030") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4031 (export "test4031") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4032 (export "test4032") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4033 (export "test4033") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4034 (export "test4034") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4035 (export "test4035") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4036 (export "test4036") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4037 (export "test4037") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4038 (export "test4038") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4039 (export "test4039") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4040 (export "test4040") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4041 (export "test4041") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4042 (export "test4042") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4043 (export "test4043") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4044 (export "test4044") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4045 (export "test4045") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4046 (export "test4046") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4047 (export "test4047") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4048 (export "test4048") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4049 (export "test4049") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4050 (export "test4050") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4051 (export "test4051") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4052 (export "test4052") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4053 (export "test4053") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4054 (export "test4054") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4055 (export "test4055") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4056 (export "test4056") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4057 (export "test4057") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4058 (export "test4058") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4059 (export "test4059") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4060 (export "test4060") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4061 (export "test4061") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4062 (export "test4062") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4063 (export "test4063") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4064 (export "test4064") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4065 (export "test4065") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4066 (export "test4066") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4067 (export "test4067") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4068 (export "test4068") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4069 (export "test4069") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4070 (export "test4070") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4071 (export "test4071") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4072 (export "test4072") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4073 (export "test4073") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4074 (export "test4074") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4075 (export "test4075") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4076 (export "test4076") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4077 (export "test4077") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4078 (export "test4078") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4079 (export "test4079") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4080 (export "test4080") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4081 (export "test4081") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4082 (export "test4082") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4083 (export "test4083") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4084 (export "test4084") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4085 (export "test4085") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4086 (export "test4086") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4087 (export "test4087") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4088 (export "test4088") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4089 (export "test4089") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4090 (export "test4090") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4091 (export "test4091") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4092 (export "test4092") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4093 (export "test4093") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4094 (export "test4094") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4095 (export "test4095") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4096 (export "test4096") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4097 (export "test4097") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4098 (export "test4098") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4099 (export "test4099") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4100 (export "test4100") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4101 (export "test4101") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4102 (export "test4102") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4103 (export "test4103") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4104 (export "test4104") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4105 (export "test4105") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4106 (export "test4106") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4107 (export "test4107") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4108 (export "test4108") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4109 (export "test4109") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4110 (export "test4110") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4111 (export "test4111") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4112 (export "test4112") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4113 (export "test4113") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4114 (export "test4114") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4115 (export "test4115") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4116 (export "test4116") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4117 (export "test4117") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4118 (export "test4118") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4119 (export "test4119") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4120 (export "test4120") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4121 (export "test4121") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4122 (export "test4122") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4123 (export "test4123") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4124 (export "test4124") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4125 (export "test4125") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4126 (export "test4126") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4127 (export "test4127") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4128 (export "test4128") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4129 (export "test4129") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4130 (export "test4130") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4131 (export "test4131") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4132 (export "test4132") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4133 (export "test4133") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4134 (export "test4134") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4135 (export "test4135") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4136 (export "test4136") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4137 (export "test4137") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4138 (export "test4138") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4139 (export "test4139") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4140 (export "test4140") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4141 (export "test4141") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4142 (export "test4142") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4143 (export "test4143") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4144 (export "test4144") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4145 (export "test4145") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4146 (export "test4146") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4147 (export "test4147") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4148 (export "test4148") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4149 (export "test4149") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4150 (export "test4150") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4151 (export "test4151") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4152 (export "test4152") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4153 (export "test4153") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4154 (export "test4154") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4155 (export "test4155") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4156 (export "test4156") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4157 (export "test4157") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4158 (export "test4158") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4159 (export "test4159") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4160 (export "test4160") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4161 (export "test4161") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4162 (export "test4162") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4163 (export "test4163") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4164 (export "test4164") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4165 (export "test4165") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4166 (export "test4166") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4167 (export "test4167") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4168 (export "test4168") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4169 (export "test4169") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4170 (export "test4170") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4171 (export "test4171") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4172 (export "test4172") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4173 (export "test4173") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4174 (export "test4174") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4175 (export "test4175") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4176 (export "test4176") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4177 (export "test4177") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4178 (export "test4178") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4179 (export "test4179") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4180 (export "test4180") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4181 (export "test4181") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4182 (export "test4182") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4183 (export "test4183") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4184 (export "test4184") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4185 (export "test4185") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4186 (export "test4186") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4187 (export "test4187") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4188 (export "test4188") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4189 (export "test4189") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4190 (export "test4190") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4191 (export "test4191") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4192 (export "test4192") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4193 (export "test4193") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4194 (export "test4194") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4195 (export "test4195") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4196 (export "test4196") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4197 (export "test4197") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4198 (export "test4198") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4199 (export "test4199") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4200 (export "test4200") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4201 (export "test4201") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4202 (export "test4202") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4203 (export "test4203") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4204 (export "test4204") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4205 (export "test4205") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4206 (export "test4206") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4207 (export "test4207") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4208 (export "test4208") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4209 (export "test4209") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4210 (export "test4210") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4211 (export "test4211") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4212 (export "test4212") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4213 (export "test4213") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4214 (export "test4214") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4215 (export "test4215") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4216 (export "test4216") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4217 (export "test4217") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4218 (export "test4218") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4219 (export "test4219") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4220 (export "test4220") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4221 (export "test4221") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4222 (export "test4222") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4223 (export "test4223") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4224 (export "test4224") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4225 (export "test4225") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4226 (export "test4226") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4227 (export "test4227") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4228 (export "test4228") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4229 (export "test4229") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4230 (export "test4230") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4231 (export "test4231") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4232 (export "test4232") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4233 (export "test4233") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4234 (export "test4234") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4235 (export "test4235") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4236 (export "test4236") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4237 (export "test4237") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4238 (export "test4238") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4239 (export "test4239") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4240 (export "test4240") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4241 (export "test4241") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4242 (export "test4242") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4243 (export "test4243") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4244 (export "test4244") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4245 (export "test4245") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4246 (export "test4246") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4247 (export "test4247") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4248 (export "test4248") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4249 (export "test4249") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4250 (export "test4250") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4251 (export "test4251") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4252 (export "test4252") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4253 (export "test4253") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4254 (export "test4254") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4255 (export "test4255") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4256 (export "test4256") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4257 (export "test4257") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4258 (export "test4258") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4259 (export "test4259") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4260 (export "test4260") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4261 (export "test4261") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4262 (export "test4262") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4263 (export "test4263") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4264 (export "test4264") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4265 (export "test4265") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4266 (export "test4266") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4267 (export "test4267") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4268 (export "test4268") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4269 (export "test4269") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4270 (export "test4270") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4271 (export "test4271") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4272 (export "test4272") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4273 (export "test4273") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4274 (export "test4274") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4275 (export "test4275") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4276 (export "test4276") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4277 (export "test4277") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4278 (export "test4278") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4279 (export "test4279") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4280 (export "test4280") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4281 (export "test4281") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4282 (export "test4282") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4283 (export "test4283") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4284 (export "test4284") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4285 (export "test4285") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4286 (export "test4286") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4287 (export "test4287") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4288 (export "test4288") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4289 (export "test4289") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4290 (export "test4290") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4291 (export "test4291") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4292 (export "test4292") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4293 (export "test4293") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4294 (export "test4294") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4295 (export "test4295") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4296 (export "test4296") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4297 (export "test4297") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4298 (export "test4298") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4299 (export "test4299") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4300 (export "test4300") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4301 (export "test4301") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4302 (export "test4302") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4303 (export "test4303") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4304 (export "test4304") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4305 (export "test4305") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4306 (export "test4306") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4307 (export "test4307") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4308 (export "test4308") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4309 (export "test4309") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4310 (export "test4310") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4311 (export "test4311") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4312 (export "test4312") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4313 (export "test4313") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4314 (export "test4314") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4315 (export "test4315") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4316 (export "test4316") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4317 (export "test4317") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4318 (export "test4318") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4319 (export "test4319") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4320 (export "test4320") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4321 (export "test4321") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4322 (export "test4322") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4323 (export "test4323") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4324 (export "test4324") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4325 (export "test4325") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4326 (export "test4326") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4327 (export "test4327") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4328 (export "test4328") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4329 (export "test4329") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4330 (export "test4330") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4331 (export "test4331") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4332 (export "test4332") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4333 (export "test4333") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4334 (export "test4334") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4335 (export "test4335") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4336 (export "test4336") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4337 (export "test4337") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4338 (export "test4338") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4339 (export "test4339") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4340 (export "test4340") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4341 (export "test4341") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4342 (export "test4342") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4343 (export "test4343") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4344 (export "test4344") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4345 (export "test4345") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4346 (export "test4346") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4347 (export "test4347") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4348 (export "test4348") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4349 (export "test4349") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4350 (export "test4350") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4351 (export "test4351") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4352 (export "test4352") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4353 (export "test4353") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4354 (export "test4354") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4355 (export "test4355") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4356 (export "test4356") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4357 (export "test4357") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4358 (export "test4358") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4359 (export "test4359") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4360 (export "test4360") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4361 (export "test4361") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4362 (export "test4362") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4363 (export "test4363") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4364 (export "test4364") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4365 (export "test4365") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4366 (export "test4366") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4367 (export "test4367") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4368 (export "test4368") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4369 (export "test4369") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4370 (export "test4370") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4371 (export "test4371") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4372 (export "test4372") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4373 (export "test4373") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4374 (export "test4374") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4375 (export "test4375") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4376 (export "test4376") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4377 (export "test4377") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4378 (export "test4378") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4379 (export "test4379") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4380 (export "test4380") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4381 (export "test4381") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4382 (export "test4382") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4383 (export "test4383") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4384 (export "test4384") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4385 (export "test4385") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4386 (export "test4386") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4387 (export "test4387") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4388 (export "test4388") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4389 (export "test4389") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4390 (export "test4390") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4391 (export "test4391") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4392 (export "test4392") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4393 (export "test4393") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4394 (export "test4394") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4395 (export "test4395") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4396 (export "test4396") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4397 (export "test4397") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4398 (export "test4398") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4399 (export "test4399") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4400 (export "test4400") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4401 (export "test4401") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4402 (export "test4402") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4403 (export "test4403") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4404 (export "test4404") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4405 (export "test4405") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4406 (export "test4406") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4407 (export "test4407") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4408 (export "test4408") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4409 (export "test4409") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4410 (export "test4410") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4411 (export "test4411") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4412 (export "test4412") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4413 (export "test4413") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4414 (export "test4414") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4415 (export "test4415") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4416 (export "test4416") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4417 (export "test4417") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4418 (export "test4418") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4419 (export "test4419") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4420 (export "test4420") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4421 (export "test4421") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4422 (export "test4422") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4423 (export "test4423") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4424 (export "test4424") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4425 (export "test4425") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4426 (export "test4426") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4427 (export "test4427") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4428 (export "test4428") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4429 (export "test4429") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4430 (export "test4430") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4431 (export "test4431") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4432 (export "test4432") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4433 (export "test4433") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4434 (export "test4434") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4435 (export "test4435") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4436 (export "test4436") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4437 (export "test4437") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4438 (export "test4438") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4439 (export "test4439") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4440 (export "test4440") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4441 (export "test4441") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4442 (export "test4442") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4443 (export "test4443") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4444 (export "test4444") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4445 (export "test4445") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4446 (export "test4446") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4447 (export "test4447") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4448 (export "test4448") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4449 (export "test4449") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4450 (export "test4450") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4451 (export "test4451") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4452 (export "test4452") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4453 (export "test4453") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4454 (export "test4454") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4455 (export "test4455") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4456 (export "test4456") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4457 (export "test4457") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4458 (export "test4458") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4459 (export "test4459") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4460 (export "test4460") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4461 (export "test4461") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4462 (export "test4462") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4463 (export "test4463") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4464 (export "test4464") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4465 (export "test4465") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4466 (export "test4466") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4467 (export "test4467") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4468 (export "test4468") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4469 (export "test4469") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4470 (export "test4470") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4471 (export "test4471") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4472 (export "test4472") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4473 (export "test4473") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4474 (export "test4474") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4475 (export "test4475") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4476 (export "test4476") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4477 (export "test4477") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4478 (export "test4478") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4479 (export "test4479") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4480 (export "test4480") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4481 (export "test4481") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4482 (export "test4482") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4483 (export "test4483") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4484 (export "test4484") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4485 (export "test4485") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4486 (export "test4486") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4487 (export "test4487") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4488 (export "test4488") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4489 (export "test4489") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4490 (export "test4490") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4491 (export "test4491") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4492 (export "test4492") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4493 (export "test4493") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4494 (export "test4494") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4495 (export "test4495") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4496 (export "test4496") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4497 (export "test4497") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4498 (export "test4498") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4499 (export "test4499") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4500 (export "test4500") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4501 (export "test4501") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4502 (export "test4502") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4503 (export "test4503") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4504 (export "test4504") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4505 (export "test4505") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4506 (export "test4506") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4507 (export "test4507") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4508 (export "test4508") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4509 (export "test4509") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4510 (export "test4510") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4511 (export "test4511") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4512 (export "test4512") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4513 (export "test4513") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4514 (export "test4514") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4515 (export "test4515") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4516 (export "test4516") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4517 (export "test4517") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4518 (export "test4518") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4519 (export "test4519") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4520 (export "test4520") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4521 (export "test4521") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4522 (export "test4522") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4523 (export "test4523") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4524 (export "test4524") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4525 (export "test4525") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4526 (export "test4526") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4527 (export "test4527") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4528 (export "test4528") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4529 (export "test4529") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4530 (export "test4530") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4531 (export "test4531") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4532 (export "test4532") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4533 (export "test4533") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4534 (export "test4534") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4535 (export "test4535") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4536 (export "test4536") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4537 (export "test4537") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4538 (export "test4538") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4539 (export "test4539") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4540 (export "test4540") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4541 (export "test4541") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4542 (export "test4542") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4543 (export "test4543") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4544 (export "test4544") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4545 (export "test4545") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4546 (export "test4546") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4547 (export "test4547") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4548 (export "test4548") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4549 (export "test4549") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4550 (export "test4550") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4551 (export "test4551") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4552 (export "test4552") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4553 (export "test4553") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4554 (export "test4554") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4555 (export "test4555") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4556 (export "test4556") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4557 (export "test4557") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4558 (export "test4558") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4559 (export "test4559") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4560 (export "test4560") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4561 (export "test4561") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4562 (export "test4562") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4563 (export "test4563") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4564 (export "test4564") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4565 (export "test4565") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4566 (export "test4566") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4567 (export "test4567") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4568 (export "test4568") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4569 (export "test4569") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4570 (export "test4570") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4571 (export "test4571") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4572 (export "test4572") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4573 (export "test4573") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4574 (export "test4574") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4575 (export "test4575") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4576 (export "test4576") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4577 (export "test4577") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4578 (export "test4578") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4579 (export "test4579") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4580 (export "test4580") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4581 (export "test4581") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4582 (export "test4582") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4583 (export "test4583") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4584 (export "test4584") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4585 (export "test4585") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4586 (export "test4586") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4587 (export "test4587") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4588 (export "test4588") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4589 (export "test4589") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4590 (export "test4590") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4591 (export "test4591") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4592 (export "test4592") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4593 (export "test4593") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4594 (export "test4594") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4595 (export "test4595") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4596 (export "test4596") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4597 (export "test4597") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4598 (export "test4598") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4599 (export "test4599") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4600 (export "test4600") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4601 (export "test4601") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4602 (export "test4602") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4603 (export "test4603") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4604 (export "test4604") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4605 (export "test4605") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4606 (export "test4606") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4607 (export "test4607") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4608 (export "test4608") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4609 (export "test4609") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4610 (export "test4610") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4611 (export "test4611") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4612 (export "test4612") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4613 (export "test4613") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4614 (export "test4614") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4615 (export "test4615") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4616 (export "test4616") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4617 (export "test4617") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4618 (export "test4618") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4619 (export "test4619") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4620 (export "test4620") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4621 (export "test4621") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4622 (export "test4622") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4623 (export "test4623") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4624 (export "test4624") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4625 (export "test4625") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4626 (export "test4626") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4627 (export "test4627") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4628 (export "test4628") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4629 (export "test4629") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4630 (export "test4630") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4631 (export "test4631") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4632 (export "test4632") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4633 (export "test4633") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4634 (export "test4634") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4635 (export "test4635") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4636 (export "test4636") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4637 (export "test4637") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4638 (export "test4638") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4639 (export "test4639") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4640 (export "test4640") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4641 (export "test4641") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4642 (export "test4642") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4643 (export "test4643") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4644 (export "test4644") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4645 (export "test4645") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4646 (export "test4646") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4647 (export "test4647") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4648 (export "test4648") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4649 (export "test4649") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4650 (export "test4650") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4651 (export "test4651") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4652 (export "test4652") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4653 (export "test4653") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4654 (export "test4654") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4655 (export "test4655") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4656 (export "test4656") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4657 (export "test4657") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4658 (export "test4658") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4659 (export "test4659") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4660 (export "test4660") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4661 (export "test4661") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4662 (export "test4662") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4663 (export "test4663") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4664 (export "test4664") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4665 (export "test4665") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4666 (export "test4666") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4667 (export "test4667") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4668 (export "test4668") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4669 (export "test4669") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4670 (export "test4670") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4671 (export "test4671") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4672 (export "test4672") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4673 (export "test4673") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4674 (export "test4674") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4675 (export "test4675") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4676 (export "test4676") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4677 (export "test4677") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4678 (export "test4678") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4679 (export "test4679") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4680 (export "test4680") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4681 (export "test4681") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4682 (export "test4682") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4683 (export "test4683") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4684 (export "test4684") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4685 (export "test4685") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4686 (export "test4686") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4687 (export "test4687") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4688 (export "test4688") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4689 (export "test4689") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4690 (export "test4690") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4691 (export "test4691") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4692 (export "test4692") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4693 (export "test4693") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4694 (export "test4694") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4695 (export "test4695") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4696 (export "test4696") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4697 (export "test4697") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4698 (export "test4698") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4699 (export "test4699") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4700 (export "test4700") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4701 (export "test4701") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4702 (export "test4702") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4703 (export "test4703") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4704 (export "test4704") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4705 (export "test4705") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4706 (export "test4706") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4707 (export "test4707") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4708 (export "test4708") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4709 (export "test4709") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4710 (export "test4710") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4711 (export "test4711") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4712 (export "test4712") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4713 (export "test4713") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4714 (export "test4714") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4715 (export "test4715") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4716 (export "test4716") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4717 (export "test4717") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4718 (export "test4718") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4719 (export "test4719") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4720 (export "test4720") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4721 (export "test4721") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4722 (export "test4722") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4723 (export "test4723") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4724 (export "test4724") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4725 (export "test4725") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4726 (export "test4726") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4727 (export "test4727") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4728 (export "test4728") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4729 (export "test4729") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4730 (export "test4730") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4731 (export "test4731") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4732 (export "test4732") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4733 (export "test4733") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4734 (export "test4734") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4735 (export "test4735") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4736 (export "test4736") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4737 (export "test4737") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4738 (export "test4738") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4739 (export "test4739") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4740 (export "test4740") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4741 (export "test4741") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4742 (export "test4742") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4743 (export "test4743") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4744 (export "test4744") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4745 (export "test4745") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4746 (export "test4746") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4747 (export "test4747") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4748 (export "test4748") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4749 (export "test4749") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4750 (export "test4750") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4751 (export "test4751") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4752 (export "test4752") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4753 (export "test4753") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4754 (export "test4754") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4755 (export "test4755") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4756 (export "test4756") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4757 (export "test4757") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4758 (export "test4758") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4759 (export "test4759") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4760 (export "test4760") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4761 (export "test4761") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4762 (export "test4762") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4763 (export "test4763") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4764 (export "test4764") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4765 (export "test4765") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4766 (export "test4766") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4767 (export "test4767") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4768 (export "test4768") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4769 (export "test4769") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4770 (export "test4770") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4771 (export "test4771") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4772 (export "test4772") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4773 (export "test4773") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4774 (export "test4774") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4775 (export "test4775") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4776 (export "test4776") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4777 (export "test4777") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4778 (export "test4778") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4779 (export "test4779") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4780 (export "test4780") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4781 (export "test4781") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4782 (export "test4782") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4783 (export "test4783") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4784 (export "test4784") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4785 (export "test4785") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4786 (export "test4786") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4787 (export "test4787") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4788 (export "test4788") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4789 (export "test4789") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4790 (export "test4790") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4791 (export "test4791") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4792 (export "test4792") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4793 (export "test4793") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4794 (export "test4794") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4795 (export "test4795") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4796 (export "test4796") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4797 (export "test4797") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4798 (export "test4798") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4799 (export "test4799") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4800 (export "test4800") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4801 (export "test4801") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4802 (export "test4802") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4803 (export "test4803") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4804 (export "test4804") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4805 (export "test4805") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4806 (export "test4806") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4807 (export "test4807") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4808 (export "test4808") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4809 (export "test4809") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4810 (export "test4810") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4811 (export "test4811") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4812 (export "test4812") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4813 (export "test4813") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4814 (export "test4814") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4815 (export "test4815") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4816 (export "test4816") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4817 (export "test4817") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4818 (export "test4818") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4819 (export "test4819") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4820 (export "test4820") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4821 (export "test4821") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4822 (export "test4822") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4823 (export "test4823") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4824 (export "test4824") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4825 (export "test4825") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4826 (export "test4826") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4827 (export "test4827") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4828 (export "test4828") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4829 (export "test4829") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4830 (export "test4830") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4831 (export "test4831") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4832 (export "test4832") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4833 (export "test4833") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4834 (export "test4834") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4835 (export "test4835") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4836 (export "test4836") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4837 (export "test4837") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4838 (export "test4838") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4839 (export "test4839") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4840 (export "test4840") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4841 (export "test4841") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4842 (export "test4842") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4843 (export "test4843") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4844 (export "test4844") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4845 (export "test4845") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4846 (export "test4846") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4847 (export "test4847") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4848 (export "test4848") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4849 (export "test4849") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4850 (export "test4850") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4851 (export "test4851") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4852 (export "test4852") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4853 (export "test4853") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4854 (export "test4854") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4855 (export "test4855") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4856 (export "test4856") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4857 (export "test4857") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4858 (export "test4858") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4859 (export "test4859") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4860 (export "test4860") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4861 (export "test4861") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4862 (export "test4862") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4863 (export "test4863") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4864 (export "test4864") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4865 (export "test4865") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4866 (export "test4866") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4867 (export "test4867") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4868 (export "test4868") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4869 (export "test4869") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4870 (export "test4870") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4871 (export "test4871") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4872 (export "test4872") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4873 (export "test4873") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4874 (export "test4874") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4875 (export "test4875") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4876 (export "test4876") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4877 (export "test4877") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4878 (export "test4878") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4879 (export "test4879") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4880 (export "test4880") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4881 (export "test4881") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4882 (export "test4882") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4883 (export "test4883") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4884 (export "test4884") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4885 (export "test4885") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4886 (export "test4886") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4887 (export "test4887") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4888 (export "test4888") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4889 (export "test4889") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4890 (export "test4890") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4891 (export "test4891") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4892 (export "test4892") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4893 (export "test4893") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4894 (export "test4894") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4895 (export "test4895") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4896 (export "test4896") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4897 (export "test4897") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4898 (export "test4898") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4899 (export "test4899") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4900 (export "test4900") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4901 (export "test4901") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4902 (export "test4902") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4903 (export "test4903") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4904 (export "test4904") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4905 (export "test4905") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4906 (export "test4906") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4907 (export "test4907") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4908 (export "test4908") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4909 (export "test4909") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4910 (export "test4910") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4911 (export "test4911") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4912 (export "test4912") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4913 (export "test4913") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4914 (export "test4914") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4915 (export "test4915") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4916 (export "test4916") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4917 (export "test4917") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4918 (export "test4918") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4919 (export "test4919") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4920 (export "test4920") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4921 (export "test4921") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4922 (export "test4922") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4923 (export "test4923") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4924 (export "test4924") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4925 (export "test4925") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4926 (export "test4926") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4927 (export "test4927") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4928 (export "test4928") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4929 (export "test4929") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4930 (export "test4930") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4931 (export "test4931") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4932 (export "test4932") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4933 (export "test4933") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4934 (export "test4934") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4935 (export "test4935") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4936 (export "test4936") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4937 (export "test4937") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4938 (export "test4938") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4939 (export "test4939") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4940 (export "test4940") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4941 (export "test4941") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4942 (export "test4942") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4943 (export "test4943") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4944 (export "test4944") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4945 (export "test4945") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4946 (export "test4946") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4947 (export "test4947") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4948 (export "test4948") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4949 (export "test4949") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4950 (export "test4950") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4951 (export "test4951") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4952 (export "test4952") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4953 (export "test4953") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4954 (export "test4954") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4955 (export "test4955") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4956 (export "test4956") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4957 (export "test4957") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4958 (export "test4958") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4959 (export "test4959") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4960 (export "test4960") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4961 (export "test4961") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4962 (export "test4962") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4963 (export "test4963") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4964 (export "test4964") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4965 (export "test4965") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4966 (export "test4966") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4967 (export "test4967") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4968 (export "test4968") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4969 (export "test4969") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4970 (export "test4970") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4971 (export "test4971") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4972 (export "test4972") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4973 (export "test4973") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4974 (export "test4974") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4975 (export "test4975") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4976 (export "test4976") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4977 (export "test4977") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4978 (export "test4978") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4979 (export "test4979") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4980 (export "test4980") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4981 (export "test4981") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4982 (export "test4982") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4983 (export "test4983") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4984 (export "test4984") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4985 (export "test4985") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4986 (export "test4986") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4987 (export "test4987") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4988 (export "test4988") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4989 (export "test4989") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4990 (export "test4990") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4991 (export "test4991") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4992 (export "test4992") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4993 (export "test4993") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4994 (export "test4994") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4995 (export "test4995") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4996 (export "test4996") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4997 (export "test4997") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4998 (export "test4998") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) - (func $test4999 (export "test4999") - (param $p0 i32) - (param $p1 i32) - (result i32) - ;; Return sum of p0 + p1 - local.get $p0 - local.get $p1 - i32.add - ) -) diff --git a/src/test/app/wasm_fixtures/wat/functions_5k.zip b/src/test/app/wasm_fixtures/wat/functions_5k.zip new file mode 100644 index 0000000000000000000000000000000000000000..e261760545516dd244df3d31cc5a3acd4fb5685c GIT binary patch literal 29665 zcmeI5eQXnT7{@z?8!z&bi7dPav(pd)mmn`9LW2abUWj8V1h#P?bA}Oiy1@vH-Z^nG zfRp4RUNFL<6xj=7IvvH1^@IW11mwlxa0R-_0@AJR+O4nGyYttZiNVO~uKjP%wmeOq z`{maA_Q~bx=Xrk5r4xxm$7wXfhH2Kn{chG*3#Kn13pJYk+eT@|YBZYM9r>HLZ=v!F z$$496@7%Qg^6gbs^Rjp5J}_mv*_@^OrZ4QFuGIg$;Y{)~$LA)^zznao-Cs0y(&oYy z$(Lqt%N=?yds2O;OA3-wyHnTD6kEgnzY3d=n#3j7Z4=W8^Q`!plEt zWiKw@t96Z(J4tz>>~CU1oGkg#8D&2cww8~%=aJ9$=pXWus0}yyWqu>Ik*e@N>-%~) zwTY_q&-b0)?b_(7@K5bpY;Qc!SbewnTYr^*Ntgb9V~M%cL=DL7Gaolm12U!NLndlK zrp#P#q6TF4n#)YofK0M}k=;C{*HIx9T{9kYT9?{BF;P*Rr~kB82?H`k*NxRq>vG#E z6P2oOu$!}c9aTa!=NNsl-MqNhQ7QPY8BaK^%WOwYRKL!{!gwt&jL+lK+PDu}@!Vk?`(z5ZL6fKf5f0ulz9C@4`Lvs~?mVumC)sWy!@;G6S#X0UQ3Im+s>^(+ z6`v8nj{Araw60QQKOi&mctacaDY!wCr~$#y{u*@aX~MVElQ+7F^$u=sm|Y`aqj&?j zL6fKf(bLmF9rF=Mv;}27CFGnuKBtZQxD}rez`zZfL=A|AD1$C)rY$980a#EVjtWR& zr?pCCOUXKPPip5*w&LpoShbHBPg}qZnnVo&b$4E(hD_z{4&T9+4BRw_C`a7Tt zhkb;U)m(f%`r7|Edy1A9S@g~~{O^DG$Vo0-rTC7k%NtV%_^$sxiMt0by}u9l5v~6T zhh`dm>ds8S-6_EORkD81gPk_O-N5?Q);}^3K3D^|8(6>E`iF!HaDcmk^{cIaTt<|j z3~)EFewD1h17*aa2G+l{vuO!1~qJKYoZ*=5ErKQnCOnC=f>l1e9~1 z@DWqPELcz=UJAV9BRmftthGfTbfUt%F@<^0RG4?mt(i`%F~5&|pHuL7ANiiGEGoW* z8ir$H$idhcvJ?|OXJf0 zb2ZTP4J81TC4i2|27)&QES0u^1qI@$fD7f^M_ch--2_-rAZ`l$j#rkKlX?O5aF0@$ zH>WV~QwsCW-mG+c_mS^p1&_~C$ajOX$hoQ3M8(vC-5eW3_QrLQG#`+Tro z`YH!^0VP?bF!}^a0BTDBX#T(~7<~eBU(^o0@gjTxV?Lse`G9dSj~S8k5EbCI!srty z0jMkiSR(zqF!}`MzNj5~^9#zLr=ZQ{ZQNwApg{Z-s6&;x(=hr3=Dw&MdK1||u-3t4 z1u(FnKpYh~i*oMbJig-`z6&fU5HAICc>_b!UI&^3vY?N7_f0rCuXKBtDRWMe6!JYq z!Q;k0^4+)Sqei<~jAeq!jo27+Z*2Hnj18a5G2!z;d+GIL3QDpD=>TwxeDm^=r(R)) zCX8)9XvxcV=XO6=6nY_H<)+W|cD|#D^i<017{+o!B9?@)@(>>E=JvpWxJZ&lGy0KU zG9^H~EOJ97HeJR___St5*M<)VH)s+yAS5aDnVnB_bA}ME3uBcMk;3SzWcC8df*Ul6 z8W17TTZ3*l?f48YnGqmf6}fQ|n;~PRyaC*xNz{N4h0e@snY~2bu=55t_k9T862@vI zVj`mhH)s+yAnyBHjH_jAFQ3!QSlaLjUUE)=SRryxN-VfRlc)jF<*KEsC1N~dK}pX= zvd+%uxVe)dd|em=H)s+yAa?P*d9j!DbaO9(1qI@#KmiJ@BO!cY7(?7-G-E*wrHL#+ z*rc2L0^FcU{{d0Qci0#?F`Y;lGA{A)kK;s7DDMBB2|%x%1cCfs8m59BztFOgP|BC`R?_*T<;oxCt)&Y zXXebAbI$(v%;ZClUcF!J(W7tQ9$vnIANPx!)zEWt&mI-!{2u%sJ$kGNScI<#_Ic~g z<)c5tKmGJ_&a*3uKi`oTd7ymZg%86T^tnfbWh0;8YPTqRYc_HIZG86K_^trOun2(@?1tDvZF%8ohy@a_Z zVOo8dzXD{<@e;$mlthVPZY6UcGi0aBbTu00WQn2PXJ~8PZKgF|qp#ni8NTDC9bZF4(@ILQtpMX zX4%#O$_KB_1K1ajnQ?Asp7C{YXWOe%6YO;my*~A7_iEiUf8#Xp+A&~)LzvgSgE##0 z&hOkag$S^Ne_q^~G9W^ExyJe!#qApGel8jBJY4-*M2DEpMdn z*D4%~Y)cM`j`>S2H`<8~<@79DA2|8YFk!y~eV6ujeRWX(%-FuayhjaR|5m@`=!MgI zhrc@L#mt?3U!OwRubqv+plbYV7*de#x5`uIe3bH%ORS-uHDk%6WZWzvL|oLwl?3 z1`W;ptM4yv)P(i*{gR1=k-c?xgI>ve%I5W{)I00@^-tcqP~O}1wL!0D_P6emW~XN`6bbx-q%^^UELT^#?~ql#K| za!Fuo)9;xp4can7XgFP#D>R%fvmMeUr)AfF?6o#{&#aC8B>qM9&jrIzjJ6MTPxY|A zsM2R)>kFG?QO)&s|Hx=wI*8#{h(2lc*d*J4|2MDvZ+EFP#&nPE-hbA{E{Pwb{<&~? z&S<|-_y4(~#D4X|`X%YJ5mVOA{$uHswe!Awd`&*O`~OfcE*MUaemOLY z@{oJ~vo;owfBZ#jH(We9FJjBZKAsV=4JT*JS#=kmlenZIXwGBrMVd#PcUo<%Z#<@6 zTsS;?v}b76|5{PQ1cA@N`VRy?%6e~skE%JSSYEugL_2U*!T(gpgz9Sr!%vQO4$VsS z*y6pqHg-{bw<|g;UKjCF!Ds6tUM|R37cr#Z{yN#meXo!6u~}kuUl+xX56${NPv#HT zzMs5}d?R)4C)6LGL}$f{me^#ZdJI)xGf$4y#yYC6Wsh!7^Z5VsF=g!7VE@Jo|Jdg_ z`|YG9vvT%s|41oHF0!4QLlxP2*7e!nNYBx&`&EDLV&olv$y%l8`1Y@qM6{CFtR!NT z#5N`IosvjU5!ENt{p;SxO>DN#rSsi%OzUNnBA9 zWlEw_N!(NtbxNXMNi-;lW+kCl5G}J zMMS8Gbt>X36%nl>Hmisj6|qf4e5WE3RK!mzVz-J&QW5)AM5>BVs))lX;;4$qR1qgs zM3#!kQ4x76;-ZQuR1sHHM45`HR1r5-L~&K0QMz}x=`&9o0)1u2(hUv%NlRoS(rG05{<62B^wq0(nbBE$Ily%`^jz`l&mQdO{}y1u~G4%E^4nHzhIc;FB_?p zkVT?tb+&sO6|;3w`}Ful!*PGvGNt5Dk!V4kE!C))r;AF~6PSRo@)kvV;puxo>WYQ2(+u{qLrkY7oLIN8HZh!XBAVQ3#0*b^-A(6Po04` zjl)XhH;btVfi{3{SxIVmx(vLB7%P?AT&C6uq=EFatH?~A>mj_a7%P+8U#7kiXaniN zt4Nv`eh7bFjFrpXFH_M1X%IbX6?uZEK77IY z`zgJB6?vW)egywej8)6suTV(>X$ZY<6?u`TK7!8^V>NQWE7X30HiSO1ioC?r9l;lh zv08cb6)IIA4W&=7A`5x0YJ8a(tCJ^Pp_Bq`C|$IQEaru)@jx+lOP+OwIxLWWMpv&Q zukh4re2o~pEx&n%Ix5h9Mz^dYOL#gp{)HI3Be%IqWeTKg=w}1SGM?*i_}5~rUT%Mt zIw8=mp$7+$6}<4@@U3F(FS+|wDoY^!oE{ZGR`S%p;iMS5EBCuftjJ3$!OQ@RyX#~A5fNbEYkKqMkOegm%q3Q(M2>M6>d7q~{ zhL?)5R(W&@RWFc6(x(H+W}d4Czahr-@}v@~L7j7$P6i=vKN4o@)efYZL z_$y9WZ$)$|)lVp0Prn~X+VEX7@sUp0(~6{0>LsCeJ?#}pKF1Hw#NTwno>63#QZEao zQM7*`$>XataVICNkK$%2HAJY5qQe47TfQz6pX7w~RoIkK!-Uc==?#HoKfdel_*5s% zMqyt@4Hs&^q_+o>FYv>E$3Jw!o>jP)QT9UVSM@+H3dcYK}`_MF16jB*fazoL%> zk^}j=-|>Y`*gq7}Wz<_jshmC?NWRQ>rSWA>7*CN@MvWC}<#bUXDd30Gc%T!;S7en@ z&O)hzt_~!J@YOWF#tE}k+$^Ie2(=2jC6E;Hbu|8k6ZX8qrkr|5DE*p#Hi#U?cl`tZ z+6n8YurH^k2(@3+gM&yre)u2wRwt~#!o8ew7fPe)Q9Iy*j%I538h=PpdhlxUU4Hl}{CQ{WRfYRCDq1Lwp+~JIr|{LM@IlU)ox<-L zwOOc*pHHAVC_Dn=-crQcsoy7OJL@R82ga7EHJYMW3SOM9&*J^0~S z_?yny>x!&v)OSMZH?;q1@&mp)3wLtHMksDxqY{MLZ|Jbq$&Kn)KwmX5-78F$YCbC8ZQ<CIPX<7=ETN5#!b>Zni~Pq(ZlefYX;{0nF7O@+;M zDpM#W>1TsUobP%D|JoUQOJRSVIw91O^x$A}5kLG4zSSA~r^5X@l_ivZM~@07efjD$ zIO&YNt?;`}@CE#m(!~6`}TfIxLtB;Olbm$azD~8+PsueJ>rZ zb&2<`N~`%eG$H#yaAC-3^;xcv69}ga+(O_i17{UEkHC3D&Kq*xurqJC^3vftmkjSJ zRn6tlgyI9i#UZQIXSqU7Ae=IA3xTr?oK@sJ0_P1mZ^(JW&b;BGOP|-e5Z+a(HRD4Q zP9C^h5HeJKmMi20!YKo{5ID=gSw+qxaNdyfhMYI-%o{Gh^m(02ig%T==C{y2 zg)C5? z`_D;$lK>|HP6C_+I0&q;uj04D)X0-OXm32+kNB*004lR$Tt03%bM zWoYJ(BU8aNCNecLgDsOSGsq0*HLb-t8bh|M>5{DZ5_4Ckk7xdp=(8DvtaT4lBVpp1 zyFN^%#!$jkmfT|M$~8m6mUH?ZVxl%S!jexua$uLM9AaRCd3M8qU06F@v+L23qrp{mNHbyu3%0FG# zN=qTBfaE$PHzBEoHK zNKS03T^8i?^^(PITXd7fZ-d5NAer#CI#TnGvoS*^?)vGwArtL(0kZ37_~{q;X-~|M z-M5}|-(353h|gYs*n{P;2audvzT{HMzkYX4qnExnE}dTbDI`Bba$#KBu8N3Zhhm1< z-+nG92Q*#?NhKupkmz%2TO1ZTxrH`udUh!w&qFf6Ep+xV$7@b$cK0HFIt6=h8ulO? ze#(KL&caXUzVp@;@T*So6Ju_k;U~_hKDFhUrmyC?g)Tnsc+Uki{+cTwvmyBsl7o<3 zgXG2W={24_=MkY34h*ZhcU(F?b)9@f<7f9W1ICO`uQ<$uG!N06i1y^el9v&E3sHAS z>7`@Fr|q(h+*KAcB;t;MmkY-8NaAUG6iD~(VKG$`?J}|Dnb3)|`@sG;FH9&XOW(21 z&UJ16qCha~Vg11bdfL*UcFpHbK&%t|frOIx)cvt#V$){1TPWMr8s`~Ea&joN&WW)) z+f^vOvhTc!i8P!p<0#NjI*`sr7Pei4bfk>E61v<2!U}?@y%ANiYzBw4cVF?MXRo2a#Y z2RihJ{Zk#6dhLgTv0H{$jUisr&0DtS6Uk27iRbQ|*|H4-Vp}xwIdIK_)04qKuBXA` z6R3C$D$aq$V32TVy?C%$+ee7{VabDbPJyYO)J{rfI|&qK@#}?U>2uybabUtU-qH=; z-~4d-?2GC-&SgSi4dR_o@Ds=GbO*XKANa)%nYjFeZ-8>Wn*j8zsQSf+JGgw= zfX*ivi5AZCI;4et2JZmPv=L>(KcG54Jb$o^9SuKY zc2$Oda%s7~6e^cb-3Xvp8F!$Onz9yJt$`xIwcsu^RbqWKP?A1K^(B9s)=S@yLb_>o zz>gl>(X}s`)l8_5=9)62P;Dbbs`Z#9@w|XE4p9HVt^LJ4<1^O zawE!d%=lEFygoi)naCQOzmhKnT4Tu{(CNd4JrF4f~c4vt4Z09P>PQ z+tuvrICMjw@3lS5?Tmg^Z!zOHGoaHI?t8epM8+%#h#;_Ela$TztZR9UtT zR_QYuRC)Cf;M)lcZ>)!fJXq-B)RZ@rZBJz6`)3)v^jEOT09a)K4bmHvkT-zTu}Mhq-;hlQh@oASo9?M*Q9 z{ROLx{1#T339C$ld^0OS;ofbqa2_mN;@mXjJ+{3mM!s@bU+152eXfUoX3ZFlS2e5(OQL*Kzk(|i z9sn2cRhuu|(|mEJ=7LL3N?Z$Ur?YAuFX$Jkyx^#ucK6rak+74GY@!|Sb{{yz^R4U% zE$AN0%MGnNyIybz$A_Lm0C0G#9k!+xYD8Awe^Sp6~o1r$4+i1}zD zU{$LoVh++V*p5{?b`j|q?4&h128IZAtV=a+*BNeTZR^o>{+?!B7qx#@tDEwI!fQk` z;h$uyJez4-EJFGrx!}@AvO=~Osn3Ts!d6QE6H=mg_Xpph8x_VW2CFY(FVYzJtu?c! z@Pg(AHfD{6agDW;7c{hwUyR5HF%29?uK-) z>RHHQ>_Pf59hsO!*2G*yCT1TpF|(10Nn)oMS_V)D8W;GjHM5rloS^aoY|I)B;~Hxx zFX$v6zZh2}TvyaNs;1TZT%76SpKwjHZ}&0Q=dh9OOr#KOeCvTUh>da`kp=+{v^-&7 zccUq{Hn0U(fcj-^gvvE$T90sCS?gQDc%kZ`+-SOdsWXz3c<#+0Z1WAkV(<7 zCWVb{=O7I-MwPIypbngJYXippNWZKNYPrTbn3TsaMr2YHAfyF>%HEJz*}mOFk#4Y| zi5t=xHdvW~R0D-Ck;v#s+SwB}p0ze?;JDgQ1!$AIsWgy=!~+eP@6fOhXvnX-7a$Eu zLBYvfq#?heaP}jlAt*M9L`Fr^PDA#gJ05F86OOCBhICVD01c6;^g7Xsgi=OV+2?|f zAd9)5ZM#=94j{C}0HG}c2<=LM&@Qhi2NeNAyBQ#~jR3;!q{0{DVtrJ*KoooMLP@W} zsqEV_0QKb`22h_Dg!-02sBc%uXmf=e-~Um$AXDSBBB5ON5yW0!V}519*G_R-Ghcwa zT^P4;7_8CuqR{h6gqK;IKOJB!AjX{!FqYf?Ng#lPIKO$E*31`e7z>BNwu21N@_EAG zW%h<>A-Ex$;n46CxFOo*Rc%6L6?GQCxJJVwVsD774RwD)H$-g^uq7}VoCdD34mU)P zUyR5HNq`SxW_tjD@-=3USM?)tT1A}%S)F#su2EGu47Q^WdeY!!pii(z`8>2S*Vvq9=ob*GB{jg9kB8Lh#1*Nha16N^jzhI zc<|^DBqf+oS&<5atMJj`qhMTPtOC$i7QnS`%HvT~>|?EdagF_bnwnAjV2`nO?ip6Q_dzcSesbDHP&uDvWPicrjJpKtVzK^NITnO0(ck% z9x-l1;AtnAvUBa~@ zmCplo*Qg4S>aamackO;{lWFH$_aCY9N+&xDAW9G8TQ=MF8jIk<6gV~!fem)qFqdKT z6gqyPSuxj`ZfgW^`@j-mYnnHB#*`fj%#vd%ePFw}pNh_T|w{ zn0Srpw!pdpjM}2^Azn6U|9vufI1x-kIcv9Q^;u`GfMb0pcs1U4msVZ&ZF;C<)| zpcQZ;KzIu$0#>y^PaaGJ8?M53%&C*vLa1Zx^LW^oPF1l3uQA;g>KGh|H9E!(4avFC zB?lzf0zgi(Z}-FtE?KhKFntzgXq!*5eHhGbGc4~Sjj^?I_CT9(>S1HnXc*U+NnUUf zJbp2US@cz;lCb%39aC%{26N#Q zL(4E5MJ*8OwPyA}n{ZWF>w&n&Oe+%l|Hm)Jr8Q#!G7I;U?Tc%HNeN(E*`rcy&49Va zSj7=d`7vva3cCr-+6a|vtlfHq%k=S!5t$S*FexAtApn?^5|lm*5)wK|v3(fKZ8Irs zK7zFYBWM$tlw;PK6t1zqo0P{dMr2apGiHR@e#7S8f`~Q}g(kqS1D!DewTilqxUSKj zu)A)o4I4PFHdF!nkN=)D?lQyAEZFZo|M@|Ee;LzgC~O`vPD)(<)9=8=smW5!)zLLV zeV95q_+Cw2+S$C6jBFP-bA?wNJ@ltsSZcPy-wO{;yI)b~}~b}}V@5f?N8iy2L&C`ndws70pHi<|Cm{*}33EQ_+dpj1$p zl0gGa!WzWq1ckO9dfq+h{hB)J>_u2US96tL^RYh6H95G!T;V->rmWY|7(I2NWKzJV zT~sz*fotx6QJ6rBfZf;`vX2?%5s~FmDBHIC*kWi=WLe0f#3G9_99Wb!IuB%m;*kk* zL?+0`X!C$!1I#QnnUb!I4#(BrZ**g6Aa@i1+|li{3mL#2edbv`AL&8{(uDw|3nj=M zX^=aT0UHX`Dh?@+gUKCbAa?}09_=noIs^?c$JG{QbYp2CLlSw;<)Y;DOk2+pIycYi zVaRG&N&Jqi9t_)=uxnI?M!I)sASYVQgcKXYxQ(4WlD#j8!bsU=Uwf zqru#;T=$;`LFflHvzgHzM|~4&OMH{q_`^~PW)@C$0GevZWX)91M^kN#Wh`Qat2z!% zb^ANYu2`W4BV%>dN)6_Q#oo(+5JYx*rU--}(><&0PzYivHHIK=XsRKTHLE%XPIZfw zAxH!=Ruiq9Y7x?4!b%P1hJ`{9*|LOcpdga8X^j%!BoVrIksuc%LpQz*m_l&x5`*qt zSj}-mH#1|(6Rf&M*EJ5?7O1{~ z!c`*}+m+dW5C?KxZ5TTApWRd%z>qMyx=YNmgd0pot6jrwK_L^+>{eYOK42&bV0eaz zifTsRSW;?vL6fu*!hm@!=-P;&)V$8IRug=RP+1`hx-OO=7J9cfO_^a1Y3$2Z9Ys}dQSu5nmnL<^XKJA!ve*4*-NTISk$?~+G3|mI2tj5cC=}pmESlCOZ3{s-6x9@hJW=2<3PD65hXg1H0dhzH zIB$YgE9xx3VT~q)KxqQjg5Mlh`y7&PDh>7l&Tf#5=HQ_}?NZ3Z?T$2`-r5-sYYbEY zGYH`UwdxTo$MxWWC@Z~gDMMgLm`I&o;x(d$abTwEb<##=z9FW?`gGT}4B1}CVi3^E z<*%B_?|nkEbCEl81nwv$?Ls_oM{_-^&8N3^io+V+Q9N=-@IL9m;_1TZzD(J#OqjrNGh2D#DkyN{VqZ|w|+HM%3f3`{AYU1&x-9b)TqTIfZ(MA+>%mQrIN@+85HPbiA|?+pt!1c3AA(_1^kVcSfI9m*lGHZz*zYM(>WO{IanjLZ+@ zMrY5|fMhg{Z;}Pa47A5#je#m)1|hu0XlpIG<7Mk}Tqf(&O=SoTiKfKRO5{fyWZ9CL z3;<4V792Cs9)~r$Bft#YQHhoA zh~omN0)nGi>2*sPvT^M@09qRf_wv_@*lqb0br3nUgc?=kNrD^O%^Ei>7FzogoJj%G zHAm={dRD`2`D=8RQX{m+?dWfpwe}>Pzks}q4}jLdQ(zAOt$h?1hK@aow2-z1BHWIC zqkjbt>OlT5IBMewIe!5`YhnPcf!#N8;OSocZn!O<$bj*LCDaJ5JyCFDyQ%(ve^3D% zg1iet5PJ`hu30PbO@f(;6?K+UV+isj!Hw-g5N=p(4#`g-hr}M909pvZ`N*!18EB8g z8cm2b$A_9$D8~gB*n=FB?kWxBWw_&B*&EJ|o0ws`9CwWERbWWKaj!CiTg`jMV_r`g zG1#C6kPjPh=eA%jsK7kK9J93GxH!!xKmpD8qA(u%YLNv&dcqzL3-?cMHE(B3+SE?(*yCXVJOO~>&P`NDR&+cp#J+92v~DI= z_IOzKEZhIT!`c&aL=+$a4{#D;!s|Ee$pi4$3BE-Kt94C*2Z2*SkPu*+Mwg zX#W>Tx3y}jcc4c_)2*E9JxGIRS>^*#hq+U)fK^SlzFblfYqElbta~lf|dSww-gTQ|E#%p_V$&$tU3GPExi)m(ia&|&W9>E z9jYKG*yXbv-lqJ$R)<1pL`|X5gKKrD)$w|N4~-t#Ks(mIM|@rPjb#Osv%?hebu}z# zZIboihjP%l^wS#A6JzI=)J7N%SVDmapiE3Lgf%iT#SqrW#1unVA(I8B(5Ne!7`22O z7F-d)+A#W}6v=s)Jf`BW?=M^$o5q~16ep!D|5$(flEJy@i1s2AS(g}Pc|qym!W1R@ zdtAXkj)efN^SQxSV9{JnKKv;zFIVtWT+7k#bD1fG`JBRKn`;%jBl!oV_dBh3vBMR? zIS7(IUJ%$#?6p6yi$+Y$FsU|oUH&NmCs$2c{;4HBM9lDn0d9DvDFx}V^K_d*+`AuZ zcpaq2&WQ{A23Xr<{p%oiX`b!_WN*F)fZU=wF)+v{ivnOWg0ciYR$Q)uKP!GnYGvZnxWSXppKgl&u2a(#;MwlzRsLmECj|eG`1Q`+;II^wHkPJhH1aetp zNI0&x6$K4RH=S`lM;Q?9;U~K9zCCWvDb?|di3qv!^=1D<9>0o8hTFd y*`uPI--F-7^zY|&@bij*Mfi$fpSRvzKKe8K(+@qKeg>BI1h4Vn-2w3R=<#2Od%rLM literal 0 HcmV?d00001 From 4b34102e8e31e9d9144bb7b64e44056878bc61af Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 25 Mar 2026 09:10:12 -0700 Subject: [PATCH 099/137] test: Use proper length limits in codecov_tests (#6626) --- .../wasm_fixtures/codecov_tests/src/lib.rs | 7 +++-- src/test/app/wasm_fixtures/fixtures.cpp | 30 +++++++++---------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs index 67e16c5cec..918bbb5f09 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs +++ b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs @@ -7,6 +7,7 @@ use core::panic; use xrpl_std::core::current_tx::escrow_finish::{get_current_escrow_finish, EscrowFinish}; use xrpl_std::core::current_tx::traits::TransactionCommonFields; use xrpl_std::core::locator::Locator; +use xrpl_std::core::types::blob::DEFAULT_BLOB_SIZE; use xrpl_std::core::types::issue::Issue; use xrpl_std::core::types::issue::XrpIssue; use xrpl_std::core::types::keylets; @@ -15,6 +16,7 @@ use xrpl_std::host; use xrpl_std::host::error_codes; use xrpl_std::host::trace::{trace, trace_num as trace_number}; use xrpl_std::sfield; +use xrpl_std::types::XRPL_CONTRACT_DATA_SIZE; mod host_bindings_loose; include!("host_bindings_loose.rs"); @@ -340,7 +342,7 @@ pub extern "C" fn finish() -> i32 { error_codes::INVALID_PARAMS, "get_tx_nested_array_len_neg_len", ); - let long_len = 4 * 1024 + 1; + let long_len = DEFAULT_BLOB_SIZE + 1; check_result( unsafe { host_bindings_loose::get_tx_nested_array_len(locator.as_ptr() as i32, long_len as i32) @@ -705,8 +707,9 @@ pub extern "C" fn finish() -> i32 { error_codes::DATA_FIELD_TOO_LARGE, "get_ledger_obj_nested_array_len_too_big_slice", ); + let too_big_data_len = XRPL_CONTRACT_DATA_SIZE + 1; check_result( - unsafe { host::update_data(locator.as_ptr(), long_len) }, + unsafe { host::update_data(locator.as_ptr(), too_big_data_len) }, error_codes::DATA_FIELD_TOO_LARGE, "update_data_too_big_slice", ); diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 945a5a8ce2..861df4a3ff 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -470,7 +470,7 @@ extern std::string const codecovTestsWasmHex = "9583c0004108101f4100419d83c0004111103c417f41041004417141ae83c000411e103c200041003602e801200141" "7f1004417141c78ec000411e103c200041ea016a41003a0000200041003b01e801200141031004417d41e58ec00041" "24103c200041003602e8012001418094ebdc031004417341898fc0004123103c4102100f416f41cc83c000411f103c" - "417f20002802a0011012417141eb83c000411f103c2002417f10124171418a84c000411f103c200241812010124174" + "417f20002802a0011012417141eb83c000411f103c2002417f10124171418a84c000411f103c200241810810124174" "41a984c0004120103c200041e094ebdc036a220620002802a0011012417341c984c000411f103c2008420037030020" "05420037030020034200370300200042003703e8012004411420064108200141201020417341ac8fc0004118103c20" "0842003703002005420037030020034200370300200042003703e8012004411420044114200141201020417141c48f" @@ -492,17 +492,17 @@ extern std::string const codecovTestsWasmHex = "09411841a7a1c00041142001410210234171418392c000410e103c200620002802a001422a1001417341d685c00041" "11103c200041003b01e8014102200141021007416f419192c000411b103c200041003b01e801410220014102100a41" "6f41ac92c000412b103c200041003b01e8014101410220014102100b416f41d792c0004123103c4102100f416f41cc" - "83c000411f103c41021010416f41e785c000412f103c410141021011416f419686c0004127103c41b980c000418120" - "1006417441bd86c000411f103c41b980c00041c1001006417441dc86c000411a103c200041003b01e8012002418120" - "20014102100c417441fa92c0004121103c200041003b01e801200241812020014102100d4174419b93c0004131103c" - "200041003b01e8014101200241812020014102100e417441cc93c0004129103c20024181201012417441f686c00041" - "25103c200241812010134174419b87c0004135103c410120024181201014417441d087c000412d103c200241812010" - "15417441fd87c0004119103c41e782c00041812041a482c000410b41af82c000410e1017417441bd82c0004109103c" - "41e782c000410d41a482c00041812041af82c000410e1017417441bd82c0004109103c41e782c000410d41a482c000" - "410b41af82c0004181201017417441bd82c0004109103c200041003b01e8012002418120200141021016417441f593" - "c0004121103c200041003b01e80141a7a1c00041812041a7a1c00041142001410210234174419694c0004118103c20" - "0041003b01e80120044114200441142002418120200141021024417441ae94c000411f103c200041003b01e8012009" - "41812020044114200141021025417441cd94c0004122103c41e782c000410d200620002802a0014100100041734196" + "83c000411f103c41021010416f41e785c000412f103c410141021011416f419686c0004127103c41b980c000418108" + "1006417441bd86c000411f103c41b980c00041c1001006417441dc86c000411a103c200041003b01e8012002418108" + "20014102100c417441fa92c0004121103c200041003b01e801200241810820014102100d4174419b93c0004131103c" + "200041003b01e8014101200241810820014102100e417441cc93c0004129103c20024181081012417441f686c00041" + "25103c200241810810134174419b87c0004135103c410120024181081014417441d087c000412d103c200241812010" + "15417441fd87c0004119103c41e782c00041810841a482c000410b41af82c000410e1017417441bd82c0004109103c" + "41e782c000410d41a482c00041810841af82c000410e1017417441bd82c0004109103c41e782c000410d41a482c000" + "410b41af82c0004181081017417441bd82c0004109103c200041003b01e8012002418108200141021016417441f593" + "c0004121103c200041003b01e80141a7a1c00041810841a7a1c00041142001410210234174419694c0004118103c20" + "0041003b01e80120044114200441142002418108200141021024417441ae94c000411f103c200041003b01e8012009" + "41810820044114200141021025417441cd94c0004122103c41e782c000410d200620002802a0014100100041734196" "88c000410f103c200042d487b6f4c7d4b1c0003700e00141e782c000410d200041e095ebdc036a2207410810264173" "41a588c000411c103c41e782c000410d200620002802a001101f417341c188c0004116103c20074108200041e0016a" "220641081027417341d788c0004118103c20064108200741081027417341ef88c0004118103c200041003b01e80120" @@ -551,9 +551,9 @@ extern std::string const codecovTestsWasmHex = "41021018417141e9a0c000411d103c41e782c000410d200220002802a001101e417141918ac0004123103c41e796ab" "dd03410d41f189c000412041001000417341b48ac0004110103c41e796abdd03410d200641081026417341c48ac000" "411d103c41e796abdd03410d20044114101e417341e18ac0004118103c41e796abdd03410d419583c0004108101f41" - "7341f98ac0004117103c200220002802a001200241812041001000417441908bc000410e103c200241812042011001" - "4174419e8bc0004112103c41e782c000418120200641081026417441b08bc000411b103c41e782c000418120200441" - "14101e417441cb8bc0004116103c41e782c000418120419583c0004108101f417441e18bc0004115103c41e782c000" + "7341f98ac0004117103c200220002802a001200241810841001000417441908bc000410e103c200241810842011001" + "4174419e8bc0004112103c41e782c000418108200641081026417441b08bc000411b103c41e782c000418108200441" + "14101e417441cb8bc0004116103c41e782c000418108419583c0004108101f417441e18bc0004115103c41e782c000" "410d200220002802a001101f417141f68bc0004119103c200041003b018e02200220002802a0012004411420034102" "102541714186a1c0004121103c41e782c000410d200220002802a001410210004171418f8cc0004114103c41014100" "20044114101e410041a38cc000411a103c20004190026a240041010f0b0b418080c000410b417f20032003417f4e1b" From 0deb6bcadf93e6c2b4aaac6e83c795c9678defa3 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 2 Apr 2026 18:39:14 -0400 Subject: [PATCH 100/137] fix build --- src/libxrpl/tx/wasm/HostFuncImplLedgerHeader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libxrpl/tx/wasm/HostFuncImplLedgerHeader.cpp b/src/libxrpl/tx/wasm/HostFuncImplLedgerHeader.cpp index bb7e25614a..c8e38f6805 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplLedgerHeader.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplLedgerHeader.cpp @@ -41,7 +41,7 @@ WasmHostFunctionsImpl::isAmendmentEnabled(uint256 const& amendmentId) const Expected WasmHostFunctionsImpl::isAmendmentEnabled(std::string_view const& amendmentName) const { - auto const& table = ctx_.registry.getAmendmentTable(); + auto const& table = ctx_.registry.get().getAmendmentTable(); auto const amendment = table.find(std::string(amendmentName)); return ctx_.view().rules().enabled(amendment); } From c5598a42849306c87f6002eb511bde2f65a071f2 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 2 Apr 2026 19:05:34 -0400 Subject: [PATCH 101/137] fix clang-tidy issues --- include/xrpl/tx/wasm/WasmiVM.h | 4 +- src/libxrpl/basics/Number.cpp | 2 +- src/libxrpl/tx/wasm/HostFuncImplFloat.cpp | 72 ++++---- src/libxrpl/tx/wasm/HostFuncWrapper.cpp | 38 ++--- src/libxrpl/tx/wasm/WasmiVM.cpp | 8 +- src/test/app/HostFuncImpl_test.cpp | 196 +++++++++++----------- src/test/app/Wasm_test.cpp | 17 +- src/test/basics/Number_test.cpp | 2 +- 8 files changed, 171 insertions(+), 168 deletions(-) diff --git a/include/xrpl/tx/wasm/WasmiVM.h b/include/xrpl/tx/wasm/WasmiVM.h index 61bbedfd1a..daa139cad6 100644 --- a/include/xrpl/tx/wasm/WasmiVM.h +++ b/include/xrpl/tx/wasm/WasmiVM.h @@ -77,9 +77,9 @@ using WasmImporttypeVec = WasmVec< struct WasmiResult { WasmValVec r; - bool f; // failure flag + bool f{false}; // failure flag - WasmiResult(unsigned N = 0) : r(N), f(false) + WasmiResult(unsigned N = 0) : r(N) { } diff --git a/src/libxrpl/basics/Number.cpp b/src/libxrpl/basics/Number.cpp index 7077030ccc..dbdb40e94f 100644 --- a/src/libxrpl/basics/Number.cpp +++ b/src/libxrpl/basics/Number.cpp @@ -1013,7 +1013,7 @@ log10(Number const& x, int iterations) // (1 <= normalX < 10) // ln(x) = ln(normalX * 10^norm) = ln(normalX) + norm * ln(10) - int diffExp = 15 + x.exponent(); + int const diffExp = 15 + x.exponent(); Number const normalX = x / Number(1, diffExp); auto const lnX = ln(normalX, iterations) + diffExp * LN10; auto const lgX = lnX / LN10; diff --git a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp index 0b31bcd6ce..627d3b7d3f 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp @@ -52,7 +52,7 @@ public: if (m == 0) return; - Number x(makeNumber(m, decodedExponent)); + Number const x(makeNumber(m, decodedExponent)); if (m != x.mantissa() || decodedExponent != x.exponent()) return; // not canonical *static_cast(this) = x; @@ -194,7 +194,7 @@ std::string floatToString(Slice const& data) { // set default mode as we don't expect it will be used here - detail::FloatState rm(Number::rounding_mode::to_nearest); + detail::FloatState const rm(Number::rounding_mode::to_nearest); detail::Number2 const num(data); if (!num) { @@ -213,11 +213,11 @@ floatFromIntImpl(int64_t x, int32_t mode) { try { - detail::FloatState rm(mode); + detail::FloatState const rm(mode); if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 num(x); + detail::Number2 const num(x); return num.toBytes(); } // LCOV_EXCL_START @@ -234,11 +234,11 @@ floatFromUintImpl(uint64_t x, int32_t mode) { try { - detail::FloatState rm(mode); + detail::FloatState const rm(mode); if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 num(x); + detail::Number2 const num(x); auto r = num.toBytes(); return r; } @@ -256,10 +256,10 @@ floatSetImpl(int64_t mantissa, int32_t exponent, int32_t mode) { try { - detail::FloatState rm(mode); + detail::FloatState const rm(mode); if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 num(mantissa, exponent); + detail::Number2 const num(mantissa, exponent); if (!num) return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); return num.toBytes(); @@ -277,11 +277,11 @@ floatCompareImpl(Slice const& x, Slice const& y) try { // set default mode as we don't expect it will be used here - detail::FloatState rm(Number::rounding_mode::to_nearest); - detail::Number2 xx(x); + detail::FloatState const rm(Number::rounding_mode::to_nearest); + detail::Number2 const xx(x); if (!xx) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 yy(y); + detail::Number2 const yy(y); if (!yy) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); if (xx < yy) @@ -304,17 +304,17 @@ floatAddImpl(Slice const& x, Slice const& y, int32_t mode) { try { - detail::FloatState rm(mode); + detail::FloatState const rm(mode); if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 xx(x); + detail::Number2 const xx(x); if (!xx) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 yy(y); + detail::Number2 const yy(y); if (!yy) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 res = xx + yy; + detail::Number2 const res = xx + yy; return res.toBytes(); } @@ -332,16 +332,16 @@ floatSubtractImpl(Slice const& x, Slice const& y, int32_t mode) { try { - detail::FloatState rm(mode); + detail::FloatState const rm(mode); if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 xx(x); + detail::Number2 const xx(x); if (!xx) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 yy(y); + detail::Number2 const yy(y); if (!yy) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 res = xx - yy; + detail::Number2 const res = xx - yy; return res.toBytes(); } @@ -359,16 +359,16 @@ floatMultiplyImpl(Slice const& x, Slice const& y, int32_t mode) { try { - detail::FloatState rm(mode); + detail::FloatState const rm(mode); if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 xx(x); + detail::Number2 const xx(x); if (!xx) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 yy(y); + detail::Number2 const yy(y); if (!yy) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 res = xx * yy; + detail::Number2 const res = xx * yy; return res.toBytes(); } @@ -386,16 +386,16 @@ floatDivideImpl(Slice const& x, Slice const& y, int32_t mode) { try { - detail::FloatState rm(mode); + detail::FloatState const rm(mode); if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 xx(x); + detail::Number2 const xx(x); if (!xx) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 yy(y); + detail::Number2 const yy(y); if (!yy) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 res = xx / yy; + detail::Number2 const res = xx / yy; return res.toBytes(); } @@ -414,15 +414,15 @@ floatRootImpl(Slice const& x, int32_t n, int32_t mode) if (n < 1) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::FloatState rm(mode); + detail::FloatState const rm(mode); if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 xx(x); + detail::Number2 const xx(x); if (!xx) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 res(root(xx, n)); + detail::Number2 const res(root(xx, n)); return res.toBytes(); } @@ -443,17 +443,17 @@ floatPowerImpl(Slice const& x, int32_t n, int32_t mode) if ((n < 0) || (n > wasmMaxExponent)) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::FloatState rm(mode); + detail::FloatState const rm(mode); if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 xx(x); + detail::Number2 const xx(x); if (!xx) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); if (xx == Number() && (n == 0)) return Unexpected(HostFunctionError::INVALID_PARAMS); - detail::Number2 res(power(xx, n, 1)); + detail::Number2 const res(power(xx, n, 1)); return res.toBytes(); } @@ -471,15 +471,15 @@ floatLogImpl(Slice const& x, int32_t mode) { try { - detail::FloatState rm(mode); + detail::FloatState const rm(mode); if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 xx(x); + detail::Number2 const xx(x); if (!xx) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 res(log10(xx)); + detail::Number2 const res(log10(xx)); return res.toBytes(); } diff --git a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp index 6003aefd84..88598469e0 100644 --- a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp +++ b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp @@ -76,7 +76,7 @@ getDataUnsigned(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) return Unexpected(HostFunctionError::INVALID_PARAMS); T x; - uintptr_t p = reinterpret_cast(r->data()); + uintptr_t const p = reinterpret_cast(r->data()); if (p & (alignof(T) - 1)) // unaligned { memcpy(&x, r->data(), sizeof(T)); @@ -328,7 +328,7 @@ static inline HostFunctions* getHF(void* env) { auto const* udata = reinterpret_cast(env); - HostFunctions* hf = reinterpret_cast(udata->first); + HostFunctions const* hf = reinterpret_cast(udata->first); return hf; } @@ -336,12 +336,12 @@ static inline Expected checkGas(void* env) { auto const* udata = reinterpret_cast(env); - HostFunctions* hf = reinterpret_cast(udata->first); + HostFunctions const* hf = reinterpret_cast(udata->first); auto const* runtime = reinterpret_cast(hf->getRT()); if (runtime == nullptr) { - wasm_trap_t* trap = reinterpret_cast( + wasm_trap_t const* trap = reinterpret_cast( WasmEngine::instance().newTrap("hf no runtime")); // LCOV_EXCL_LINE return Unexpected(trap); // LCOV_EXCL_LINE } @@ -352,14 +352,14 @@ checkGas(void* env) if (runtime->setGas(x) < 0) { - wasm_trap_t* trap = reinterpret_cast( + wasm_trap_t const* trap = reinterpret_cast( WasmEngine::instance().newTrap("can't set gas")); // LCOV_EXCL_LINE return Unexpected(trap); // LCOV_EXCL_LINE } if (gas < impFunc.gas) { - wasm_trap_t* trap = + wasm_trap_t const* trap = reinterpret_cast(WasmEngine::instance().newTrap("hf out of gas")); return Unexpected(trap); } @@ -375,7 +375,7 @@ getLedgerSqn_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); - int index = 0; + int const index = 0; return returnResult(runtime, params, results, hf->getLedgerSqn(), index); } @@ -387,7 +387,7 @@ getParentLedgerTime_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); - int index = 0; + int const index = 0; return returnResult(runtime, params, results, hf->getParentLedgerTime(), index); } @@ -399,7 +399,7 @@ getParentLedgerHash_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); - int index = 0; + int const index = 0; return returnResult(runtime, params, results, hf->getParentLedgerHash(), index); } @@ -411,7 +411,7 @@ getBaseFee_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); auto const* runtime = reinterpret_cast(hf->getRT()); - int index = 0; + int const index = 0; return returnResult(runtime, params, results, hf->getBaseFee(), index); } @@ -1818,11 +1818,11 @@ testGetDataIncrement() wasm_val_t values[4]; std::array buffer = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'}; - MockInstanceWrapper runtime(wmem{buffer.data(), buffer.size()}); + MockInstanceWrapper const runtime(wmem{buffer.data(), buffer.size()}); { // test int32_t - wasm_val_vec_t params = {1, &values[0]}; + wasm_val_vec_t const params = {1, &values[0]}; values[0] = WASM_I32_VAL(42); @@ -1834,7 +1834,7 @@ testGetDataIncrement() { // test int64_t - wasm_val_vec_t params = {1, &values[0]}; + wasm_val_vec_t const params = {1, &values[0]}; values[0] = WASM_I64_VAL(1234); @@ -1846,7 +1846,7 @@ testGetDataIncrement() { // test SFieldCRef - wasm_val_vec_t params = {1, &values[0]}; + wasm_val_vec_t const params = {1, &values[0]}; values[0] = WASM_I32_VAL(sfAccount.fieldCode); @@ -1858,7 +1858,7 @@ testGetDataIncrement() { // test Slice - wasm_val_vec_t params = {2, &values[0]}; + wasm_val_vec_t const params = {2, &values[0]}; values[0] = WASM_I32_VAL(0); values[1] = WASM_I32_VAL(3); @@ -1871,7 +1871,7 @@ testGetDataIncrement() { // test string - wasm_val_vec_t params = {2, &values[0]}; + wasm_val_vec_t const params = {2, &values[0]}; values[0] = WASM_I32_VAL(0); values[1] = WASM_I32_VAL(5); @@ -1889,7 +1889,7 @@ testGetDataIncrement() AccountID const id( calcAccountID(generateKeyPair(KeyType::secp256k1, generateSeed("alice")).first)); - wasm_val_vec_t params = {2, &values[0]}; + wasm_val_vec_t const params = {2, &values[0]}; values[0] = WASM_I32_VAL(0); values[1] = WASM_I32_VAL(id.bytes); @@ -1905,7 +1905,7 @@ testGetDataIncrement() // test uint256 Hash h1 = sha512Half(Slice(buffer.data(), 8)); - wasm_val_vec_t params = {2, &values[0]}; + wasm_val_vec_t const params = {2, &values[0]}; values[0] = WASM_I32_VAL(0); values[1] = WASM_I32_VAL(h1.bytes); @@ -1921,7 +1921,7 @@ testGetDataIncrement() // test Currency Currency const c = xrpCurrency(); - wasm_val_vec_t params = {2, &values[0]}; + wasm_val_vec_t const params = {2, &values[0]}; values[0] = WASM_I32_VAL(0); values[1] = WASM_I32_VAL(c.bytes); diff --git a/src/libxrpl/tx/wasm/WasmiVM.cpp b/src/libxrpl/tx/wasm/WasmiVM.cpp index 8147f84588..622311540a 100644 --- a/src/libxrpl/tx/wasm/WasmiVM.cpp +++ b/src/libxrpl/tx/wasm/WasmiVM.cpp @@ -376,7 +376,7 @@ ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) const WasmValtypeVec params(makeImpParams(imp)); WasmValtypeVec results(makeImpReturn(imp)); - std::unique_ptr ftype( + std::unique_ptr const ftype( wasm_functype_new(¶ms.vec_, &results.vec_), &wasm_functype_delete); params.release(); @@ -769,7 +769,7 @@ WasmiEngine::runHlp( ImportVec const& imports) { // currently only 1 module support, possible parallel UT run - std::lock_guard lg(m_); + std::lock_guard const lg(m_); if (wasmCode.empty()) throw std::runtime_error("empty module"); @@ -866,7 +866,7 @@ WasmiEngine::checkHlp( ImportVec const& imports) { // currently only 1 module support, possible parallel UT run - std::lock_guard lg(m_); + std::lock_guard const lg(m_); // Create and instantiate the module. if (wasmCode.empty()) @@ -918,7 +918,7 @@ WasmiEngine::newTrap(std::string const& txt) if (!txt.empty()) wasm_name_new(&msg, txt.size() + 1, txt.c_str()); // include 0 - wasm_trap_t* trap = wasm_trap_new(store_.get(), &msg); + wasm_trap_t const* trap = wasm_trap_new(store_.get(), &msg); if (!txt.empty()) wasm_byte_vec_delete(&msg); diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index e77c3ded0c..e46634ca44 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -95,7 +95,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); auto const result = hfs.getLedgerSqn(); if (BEAST_EXPECT(result.has_value())) @@ -114,7 +114,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite { OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); auto const result = hfs.getParentLedgerTime(); if (BEAST_EXPECT(result.has_value())) { @@ -135,7 +135,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); auto const result = hfs.getParentLedgerHash(); if (BEAST_EXPECT(result.has_value())) @@ -153,7 +153,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); auto const result = hfs.getBaseFee(); if (BEAST_EXPECT(result.has_value())) @@ -170,7 +170,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); // Use featureTokenEscrow for testing auto const amendmentId = featureTokenEscrow; @@ -191,7 +191,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite } // Test with a fake amendment id (all zeros) - uint256 fakeId; + uint256 const fakeId; { auto const result = hfs.isAmendmentEnabled(fakeId); BEAST_EXPECT(result.has_value()); @@ -199,7 +199,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite } // Test with a fake amendment name - std::string fakeName = "FakeAmendment"; + std::string const fakeName = "FakeAmendment"; { auto const result = hfs.isAmendmentEnabled(fakeName); BEAST_EXPECT(result.has_value()); @@ -280,7 +280,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); { - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); auto const account = hfs.getTxField(sfAccount); BEAST_EXPECT(account && std::ranges::equal(*account, env.master.id())); @@ -326,10 +326,10 @@ struct HostFuncImpl_test : public beast::unit_test::suite obj.setFieldIssue(sfAsset2, STIssue{sfAsset2, iouAsset.issue()}); }); ApplyContext ac2 = createApplyContext(env, ov, stx2); - WasmHostFunctionsImpl hfs(ac2, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac2, dummyEscrow); auto const asset = hfs.getTxField(sfAsset); - std::vector expectedAsset(20, 0); + std::vector const expectedAsset(20, 0); BEAST_EXPECT(asset && *asset == expectedAsset); auto const asset2 = hfs.getTxField(sfAsset2); @@ -345,7 +345,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite obj.setFieldIssue(sfAsset2, STIssue{sfAsset2, MPTIssue{mptId}}); }); ApplyContext ac2 = createApplyContext(env, ov, stx2); - WasmHostFunctionsImpl hfs(ac2, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac2, dummyEscrow); auto const asset = hfs.getTxField(sfAsset); if (BEAST_EXPECT(asset.has_value())) @@ -367,7 +367,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite obj.setFieldU8(sfAssetScale, expectedScale); }); ApplyContext ac2 = createApplyContext(env, ov, stx2); - WasmHostFunctionsImpl hfs(ac2, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac2, dummyEscrow); auto const actualScale = hfs.getTxField(sfAssetScale); if (BEAST_EXPECT(actualScale.has_value())) @@ -397,7 +397,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const escrowKeylet = keylet::escrow(env.master, env.seq(env.master) - 1); BEAST_EXPECT(env.le(escrowKeylet)); - WasmHostFunctionsImpl hfs(ac, escrowKeylet); + WasmHostFunctionsImpl const hfs(ac, escrowKeylet); // Should return the Account field from the escrow ledger object auto const account = hfs.getCurrentLedgerObjField(sfAccount); @@ -425,7 +425,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master) + 5); - WasmHostFunctionsImpl hfs2(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs2(ac, dummyEscrow); auto const account = hfs2.getCurrentLedgerObjField(sfAccount); if (BEAST_EXPECT(!account.has_value())) { @@ -524,14 +524,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Locator is a sequence of int32_t codes: // [sfMemos.fieldCode, 0, sfMemoData.fieldCode] std::vector locatorVec = {sfMemos.fieldCode, 0, sfMemoData.fieldCode}; - Slice locator( + Slice const locator( reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getTxNestedField(locator); if (BEAST_EXPECTS(result.has_value(), std::to_string(static_cast(result.error())))) { - std::string memoData(result.value().begin(), result.value().end()); + std::string const memoData(result.value().begin(), result.value().end()); BEAST_EXPECT(memoData == "hello"); } } @@ -539,14 +539,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite { // Locator for sfCredentialIDs[0] std::vector locatorVec = {sfCredentialIDs.fieldCode, 0}; - Slice locator( + Slice const locator( reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getTxNestedField(locator); if (BEAST_EXPECTS(result.has_value(), std::to_string(static_cast(result.error())))) { - std::string credIdResult(result.value().begin(), result.value().end()); + std::string const credIdResult(result.value().begin(), result.value().end()); BEAST_EXPECT(strHex(credIdResult) == credIdHex); } } @@ -554,7 +554,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite { // can use the nested locator for base fields too std::vector locatorVec = {sfAccount.fieldCode}; - Slice locator( + Slice const locator( reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); @@ -570,7 +570,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite // unaligned locator std::vector locatorVec(sizeof(int32_t) + 1); memcpy(locatorVec.data() + 1, &sfAccount.fieldCode, sizeof(int32_t)); - Slice locator(reinterpret_cast(locatorVec.data() + 1), sizeof(int32_t)); + Slice const locator( + reinterpret_cast(locatorVec.data() + 1), sizeof(int32_t)); auto const account = hfs.getTxNestedField(locator); if (BEAST_EXPECTS( @@ -582,7 +583,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto expectError = [&](std::vector const& locatorVec, HostFunctionError expectedError) { - Slice locator( + Slice const locator( reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getTxNestedField(locator); @@ -687,7 +688,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Locator for malformed locator (not multiple of 4) { std::vector locatorVec = {sfMemos.fieldCode}; - Slice malformedLocator(reinterpret_cast(locatorVec.data()), 3); + Slice const malformedLocator(reinterpret_cast(locatorVec.data()), 3); auto const malformedResult = hfs.getTxNestedField(malformedLocator); BEAST_EXPECT( !malformedResult.has_value() && @@ -718,7 +719,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Locator for base field std::vector baseLocator = {sfSignerQuorum.fieldCode}; - Slice baseLocatorSlice( + Slice const baseLocatorSlice( reinterpret_cast(baseLocator.data()), baseLocator.size() * sizeof(int32_t)); auto const signerQuorum = hfs.getCurrentLedgerObjNestedField(baseLocatorSlice); @@ -730,7 +731,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto expectError = [&](std::vector const& locatorVec, HostFunctionError expectedError) { - Slice locator( + Slice const locator( reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); auto const result = hfs.getCurrentLedgerObjNestedField(locator); @@ -755,7 +756,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite HostFunctionError::LOCATOR_MALFORMED); // Locator for empty locator - Slice emptyLocator(nullptr, 0); + Slice const emptyLocator(nullptr, 0); auto const emptyResult = hfs.getCurrentLedgerObjNestedField(emptyLocator); BEAST_EXPECT( !emptyResult.has_value() && @@ -763,7 +764,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Locator for malformed locator (not multiple of 4) std::vector malformedLocatorVec = {sfMemos.fieldCode}; - Slice malformedLocator(reinterpret_cast(malformedLocatorVec.data()), 3); + Slice const malformedLocator( + reinterpret_cast(malformedLocatorVec.data()), 3); auto const malformedResult = hfs.getCurrentLedgerObjNestedField(malformedLocator); BEAST_EXPECT( !malformedResult.has_value() && @@ -771,9 +773,9 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master) + 5); - WasmHostFunctionsImpl dummyHfs(ac, dummyEscrow); + WasmHostFunctionsImpl const dummyHfs(ac, dummyEscrow); std::vector const locatorVec = {sfAccount.fieldCode}; - Slice locator( + Slice const locator( reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); auto const result = dummyHfs.getCurrentLedgerObjNestedField(locator); @@ -814,7 +816,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite { std::vector const locatorVec = { sfSignerEntries.fieldCode, 0, sfAccount.fieldCode}; - Slice locator( + Slice const locator( reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); @@ -963,7 +965,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; // Transaction with an array field - STTx stx = STTx(ttESCROW_FINISH, [&](auto& obj) { + STTx const stx = STTx(ttESCROW_FINISH, [&](auto& obj) { obj.setAccountID(sfAccount, env.master.id()); STArray memos; { @@ -984,7 +986,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov, stx); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); // Should return 1 for sfMemos auto const memosLen = hfs.getTxArrayLen(sfMemos); @@ -1024,7 +1026,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const signerKeylet = keylet::signers(env.master.id()); - WasmHostFunctionsImpl hfs(ac, signerKeylet); + WasmHostFunctionsImpl const hfs(ac, signerKeylet); auto const entriesLen = hfs.getCurrentLedgerObjArrayLen(sfSignerEntries); if (BEAST_EXPECT(entriesLen.has_value())) @@ -1041,7 +1043,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master) + 5); - WasmHostFunctionsImpl dummyHfs(ac, dummyEscrow); + WasmHostFunctionsImpl const dummyHfs(ac, dummyEscrow); auto const len = dummyHfs.getCurrentLedgerObjArrayLen(sfMemos); if (BEAST_EXPECT(!len.has_value())) BEAST_EXPECT(len.error() == HostFunctionError::LEDGER_OBJ_NOT_FOUND); @@ -1116,7 +1118,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env{*this}; OpenView ov{*env.current()}; - STTx stx = STTx(ttESCROW_FINISH, [&](auto& obj) { + STTx const stx = STTx(ttESCROW_FINISH, [&](auto& obj) { STArray memos; STObject memoObj(sfMemo); memoObj.setFieldVL(sfMemoData, Slice("hello", 5)); @@ -1147,7 +1149,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Locator for sfMemos { std::vector locatorVec = {sfMemos.fieldCode}; - Slice locator( + Slice const locator( reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); auto const arrLen = hfs.getTxNestedArrayLen(locator); @@ -1199,7 +1201,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Locator for sfSignerEntries { std::vector locatorVec = {sfSignerEntries.fieldCode}; - Slice locator( + Slice const locator( reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); auto const arrLen = hfs.getCurrentLedgerObjNestedArrayLen(locator); @@ -1214,7 +1216,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master) + 5); - WasmHostFunctionsImpl dummyHfs(ac, dummyEscrow); + WasmHostFunctionsImpl const dummyHfs(ac, dummyEscrow); std::vector locatorVec = {sfAccount.fieldCode}; Slice const locator( reinterpret_cast(locatorVec.data()), @@ -1253,7 +1255,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Locator for sfSignerEntries std::vector locatorVec = {sfSignerEntries.fieldCode}; - Slice locator( + Slice const locator( reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); auto const arrLen = hfs.getLedgerObjNestedArrayLen(1, locator); @@ -1293,7 +1295,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite expectError({}, HostFunctionError::LOCATOR_MALFORMED); // Error: locator malformed (not multiple of 4) - Slice malformedLocator(reinterpret_cast(locator.data()), 3); + Slice const malformedLocator(reinterpret_cast(locator.data()), 3); auto const malformed = hfs.getLedgerObjNestedArrayLen(1, malformedLocator); BEAST_EXPECT( !malformed.has_value() && malformed.error() == HostFunctionError::LOCATOR_MALFORMED); @@ -1344,7 +1346,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); // Generate a keypair and sign a message auto const kp = generateKeyPair(KeyType::secp256k1, randomSeed()); @@ -1425,7 +1427,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); std::string data = "hello world"; auto const result = hfs.computeSha512HalfHash(Slice(data.data(), data.size())); @@ -1447,7 +1449,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); auto compareKeylet = [](std::vector const& bytes, Keylet const& kl) { return std::ranges::equal(bytes, kl.key); @@ -1549,7 +1551,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite COMPARE_KEYLET(escrowKeylet, keylet::escrow, env.master.id(), 1); COMPARE_KEYLET_FAIL(escrowKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); - Currency usd = to_currency("USD"); + Currency const usd = to_currency("USD"); COMPARE_KEYLET(lineKeylet, keylet::line, env.master.id(), alice.id(), usd); COMPARE_KEYLET_FAIL( lineKeylet, HostFunctionError::INVALID_PARAMS, env.master.id(), env.master.id(), usd); @@ -1639,7 +1641,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(alice, env.seq(alice)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); // Should succeed for valid NFT { @@ -1694,7 +1696,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); // Should succeed for valid NFT id { @@ -1728,7 +1730,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); auto const result = hfs.getNFTTaxon(nftId); if (BEAST_EXPECT(result.has_value())) @@ -1752,7 +1754,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); { auto const result = hfs.getNFTFlags(nftId); @@ -1785,7 +1787,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); { auto const result = hfs.getNFTTransferFee(nftId); @@ -1819,7 +1821,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); { auto const result = hfs.getNFTSerial(nftId); @@ -1845,13 +1847,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env(*this); OpenView ov{*env.current()}; test::StreamSink sink{beast::severities::kTrace}; - beast::Journal jlog{sink}; + beast::Journal const jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); - std::string msg = "test trace"; + std::string const msg = "test trace"; std::string data = "abc"; auto const slice = Slice(data.data(), data.size()); auto const result = hfs.trace(msg, slice, false); @@ -1881,13 +1883,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env(*this); OpenView ov{*env.current()}; test::StreamSink sink{beast::severities::kError}; - beast::Journal jlog{sink}; + beast::Journal const jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); - std::string msg = "test trace"; + std::string const msg = "test trace"; std::string data = "abc"; auto const slice = Slice(data.data(), data.size()); auto const result = hfs.trace(msg, slice, false); @@ -1907,14 +1909,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env(*this); OpenView ov{*env.current()}; test::StreamSink sink{beast::severities::kTrace}; - beast::Journal jlog{sink}; + beast::Journal const jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); - std::string msg = "trace number"; - int64_t num = 123456789; + std::string const msg = "trace number"; + int64_t const num = 123456789; auto const result = hfs.traceNum(msg, num); if (BEAST_EXPECT(result.has_value())) { @@ -1930,14 +1932,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env(*this); OpenView ov{*env.current()}; test::StreamSink sink{beast::severities::kError}; - beast::Journal jlog{sink}; + beast::Journal const jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); - std::string msg = "trace number"; - int64_t num = 123456789; + std::string const msg = "trace number"; + int64_t const num = 123456789; auto const result = hfs.traceNum(msg, num); BEAST_EXPECT(result && *result == 0); auto const messages = sink.messages().str(); @@ -1955,13 +1957,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env(*this); OpenView ov{*env.current()}; test::StreamSink sink{beast::severities::kTrace}; - beast::Journal jlog{sink}; + beast::Journal const jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); - std::string msg = "trace account"; + std::string const msg = "trace account"; auto const result = hfs.traceAccount(msg, env.master.id()); if (BEAST_EXPECT(result.has_value())) { @@ -1977,12 +1979,12 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env(*this); OpenView ov{*env.current()}; test::StreamSink sink{beast::severities::kError}; - beast::Journal jlog{sink}; + beast::Journal const jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); - std::string msg = "trace account"; + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + std::string const msg = "trace account"; auto const result = hfs.traceAccount(msg, env.master.id()); BEAST_EXPECT(result && *result == 0); auto const messages = sink.messages().str(); @@ -2000,14 +2002,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env(*this); OpenView ov{*env.current()}; test::StreamSink sink{beast::severities::kTrace}; - beast::Journal jlog{sink}; + beast::Journal const jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); - std::string msg = "trace amount"; - STAmount amount = XRP(12345); + std::string const msg = "trace amount"; + STAmount const amount = XRP(12345); { auto const result = hfs.traceAmount(msg, amount); if (BEAST_EXPECT(result.has_value())) @@ -2023,7 +2025,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite Account const alice("alice"); env.fund(XRP(1000), alice); env.close(); - STAmount iouAmount = env.master["USD"](100); + STAmount const iouAmount = env.master["USD"](100); { auto const result = hfs.traceAmount(msg, iouAmount); if (BEAST_EXPECT(result.has_value())) @@ -2033,8 +2035,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite // MPT amount { auto const mptId = makeMptID(42, env.master.id()); - Asset mptAsset = Asset(mptId); - STAmount mptAmount(mptAsset, 123456); + Asset const mptAsset = Asset(mptId); + STAmount const mptAmount(mptAsset, 123456); auto const result = hfs.traceAmount(msg, mptAmount); if (BEAST_EXPECT(result.has_value())) BEAST_EXPECT(*result == 0); @@ -2046,14 +2048,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env(*this); OpenView ov{*env.current()}; test::StreamSink sink{beast::severities::kError}; - beast::Journal jlog{sink}; + beast::Journal const jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); - std::string msg = "trace amount"; - STAmount amount = XRP(12345); + std::string const msg = "trace amount"; + STAmount const amount = XRP(12345); auto const result = hfs.traceAmount(msg, amount); BEAST_EXPECT(result && *result == 0); auto const messages = sink.messages().str(); @@ -2098,9 +2100,9 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); - std::string msg = "trace float"; + std::string const msg = "trace float"; { auto const result = hfs.traceFloat(msg, makeSlice(invalid)); @@ -2118,13 +2120,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite Env env(*this); OpenView ov{*env.current()}; test::StreamSink sink{beast::severities::kError}; - beast::Journal jlog{sink}; + beast::Journal const jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); - std::string msg = "trace float"; + std::string const msg = "trace float"; auto const result = hfs.traceFloat(msg, makeSlice(invalid)); BEAST_EXPECT(result && *result == 0); @@ -2143,7 +2145,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); { auto const result = hfs.floatFromInt(std::numeric_limits::min(), -1); @@ -2183,7 +2185,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); { auto const result = hfs.floatFromUint(std::numeric_limits::min(), -1); @@ -2219,7 +2221,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); { auto const result = hfs.floatSet(1, 0, -1); @@ -2291,7 +2293,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); { auto const result = hfs.floatCompare(Slice(), Slice()); @@ -2345,7 +2347,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); { auto const result = hfs.floatAdd(Slice(), Slice(), -1); @@ -2392,7 +2394,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); { auto const result = hfs.floatSubtract(Slice(), Slice(), -1); @@ -2441,7 +2443,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); { auto const result = hfs.floatMultiply(Slice(), Slice(), -1); @@ -2494,7 +2496,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); { auto const result = hfs.floatDivide(Slice(), Slice(), -1); @@ -2551,7 +2553,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); { auto const result = hfs.floatRoot(Slice(), 2, -1); @@ -2620,7 +2622,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); { auto const result = hfs.floatPower(Slice(), 2, -1); @@ -2698,7 +2700,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); { auto const result = hfs.floatLog(Slice(), -1); @@ -2801,7 +2803,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl hfs(ac, dummyEscrow); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); auto const y = hfs.floatSet(20, 0, 0); if (!BEAST_EXPECT(y)) diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 93add98f3a..b875eaef50 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -18,8 +18,8 @@ using Add_proto = int32_t(int32_t, int32_t); static wasm_trap_t* Add(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { - int32_t Val1 = params->data[0].of.i32; - int32_t Val2 = params->data[1].of.i32; + int32_t const Val1 = params->data[0].of.i32; + int32_t const Val2 = params->data[1].of.i32; // printf("Host function \"Add\": %d + %d\n", Val1, Val2); results->data[0] = WASM_I32_VAL(Val1 + Val2); return nullptr; @@ -204,12 +204,12 @@ struct Wasm_test : public beast::unit_test::suite using namespace test::jtx; - Env env{*this}; + Env const env{*this}; HostFunctions hfs(env.journal); { auto wasm = hexToBytes("00000000"); - std::string funcName("mock_escrow"); + std::string const funcName("mock_escrow"); auto re = runEscrowWasm(wasm, hfs, 15, funcName, {}); BEAST_EXPECT(!re); @@ -217,7 +217,7 @@ struct Wasm_test : public beast::unit_test::suite { auto wasm = hexToBytes("00112233445566778899AA"); - std::string funcName("mock_escrow"); + std::string const funcName("mock_escrow"); auto const re = preflightEscrowWasm(wasm, hfs, funcName); BEAST_EXPECT(!isTesSuccess(re)); @@ -503,7 +503,7 @@ struct Wasm_test : public beast::unit_test::suite auto const deepWasm = hexToBytes(deepRecursionHex); TestHostFunctionsSink hfs(env); - std::string funcName("finish"); + std::string const funcName("finish"); auto re = runEscrowWasm(deepWasm, hfs, 1'000'000'000, funcName, {}); BEAST_EXPECT(!re && re.error()); // std::cout << "bad case (deep recursion) result " << re.error() @@ -755,7 +755,7 @@ struct Wasm_test : public beast::unit_test::suite auto const startLoopWasm = hexToBytes(startLoopHex); TestLedgerDataProvider hfs(env); - ImportVec imports; + ImportVec const imports; auto& engine = WasmEngine::instance(); auto checkRes = engine.check(startLoopWasm, hfs, "finish", {}, imports, env.journal); @@ -971,6 +971,7 @@ struct Wasm_test : public beast::unit_test::suite // add 1k parameter (max that wasmi support) std::vector params; + params.reserve(1000); for (int i = 0; i < 1000; ++i) params.push_back({.type = WT_I32, .of = {.i32 = 2 * i}}); @@ -1012,7 +1013,7 @@ struct Wasm_test : public beast::unit_test::suite using namespace test::jtx; unsigned const RESERVED = 64; - std::uint8_t nop = 0x01; + std::uint8_t const nop = 0x01; std::array const codeMarker = { nop, nop, nop, nop, nop, nop, nop, nop, nop, nop, nop, nop, nop, nop, nop, nop}; auto const opcReserved = hexToBytes(opcReservedHex); diff --git a/src/test/basics/Number_test.cpp b/src/test/basics/Number_test.cpp index 71b4b388db..0079b540b0 100644 --- a/src/test/basics/Number_test.cpp +++ b/src/test/basics/Number_test.cpp @@ -1582,7 +1582,7 @@ public: } else { - NumberRoundModeGuard mg(Number::towards_zero); + NumberRoundModeGuard const mg(Number::towards_zero); test(cLarge); } From 65322d9e781eb9899ecb8663fa1bbdf39d6efd1e Mon Sep 17 00:00:00 2001 From: Oleksandr <115580134+oleks-rip@users.noreply.github.com> Date: Thu, 2 Apr 2026 21:33:37 -0400 Subject: [PATCH 102/137] fix Clang-tidy --- src/libxrpl/tx/wasm/HostFuncImplGetter.cpp | 20 ++++++++++---------- src/libxrpl/tx/wasm/HostFuncWrapper.cpp | 8 ++++---- src/libxrpl/tx/wasm/WasmiVM.cpp | 2 +- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp index 67542ac559..46744c17a7 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp @@ -14,7 +14,7 @@ getIntBytes(STBase const* obj) { static_assert(std::is_integral::value, "Only integral types"); - auto const& num(static_cast const*>(obj)); + auto const& num(static_cast const*>(obj)); // NOLINT T const data = adjustWasmEndianess(num->value()); auto const* b = reinterpret_cast(&data); auto const* e = reinterpret_cast(&data + 1); @@ -42,13 +42,13 @@ getAnyFieldData(STBase const* obj) return Unexpected(HostFunctionError::NOT_LEAF_FIELD); case STI_ACCOUNT: { - auto const* account(dynamic_cast(obj)); + auto const* account(static_cast(obj)); // NOLINT auto const& data = account->value(); return Bytes{data.begin(), data.end()}; } case STI_ISSUE: { - auto const* issue(dynamic_cast(obj)); + auto const* issue(static_cast(obj)); // NOLINT Asset const& asset(issue->value()); // XRP and IOU will be processed by serializer if (asset.holds()) @@ -61,7 +61,7 @@ getAnyFieldData(STBase const* obj) } case STI_VL: { - auto const* vl(dynamic_cast(obj)); + auto const* vl(static_cast(obj)); // NOLINT auto const& data = vl->value(); return Bytes{data.begin(), data.end()}; } @@ -84,7 +84,7 @@ getAnyFieldData(STBase const* obj) // LCOV_EXCL_STOP case STI_UINT256: { - auto const* uint256Obj(dynamic_cast(obj)); + auto const* uint256Obj(static_cast(obj)); // NOLINT auto const& data = uint256Obj->value(); return Bytes{data.begin(), data.end()}; } @@ -165,14 +165,14 @@ locateField(STObject const& obj, Slice const& locator) if (STI_ARRAY == field->getSType()) { - auto const* arr = dynamic_cast(field); + auto const* arr = static_cast(field); // NOLINT if (sfieldCode < 0 || std::cmp_greater_equal(sfieldCode, arr->size())) return Unexpected(HostFunctionError::INDEX_OUT_OF_BOUNDS); field = &(arr->operator[](sfieldCode)); } else if (STI_OBJECT == field->getSType()) { - auto const* o = dynamic_cast(field); + auto const* o = static_cast(field); // NOLINT auto const it = knownSFields.find(sfieldCode); if (it == knownSFields.end()) @@ -183,7 +183,7 @@ locateField(STObject const& obj, Slice const& locator) } else if (STI_VECTOR256 == field->getSType()) { - auto const* v = dynamic_cast(field); + auto const* v = static_cast(field); // NOLINT if (sfieldCode < 0 || std::cmp_greater_equal(sfieldCode, v->size())) return Unexpected(HostFunctionError::INDEX_OUT_OF_BOUNDS); return FieldValue(&(v->operator[](sfieldCode))); @@ -206,9 +206,9 @@ getArrayLen(FieldValue const& variantField) if (STBase const* const* field = std::get_if(&variantField)) { if ((*field)->getSType() == STI_VECTOR256) - return dynamic_cast(*field)->size(); + return static_cast(*field)->size(); // NOLINT if ((*field)->getSType() == STI_ARRAY) - return dynamic_cast(*field)->size(); + return static_cast(*field)->size(); // NOLINT } // uint256 is not an array so that variant should still return NO_ARRAY diff --git a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp index 88598469e0..e420565727 100644 --- a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp +++ b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp @@ -328,7 +328,7 @@ static inline HostFunctions* getHF(void* env) { auto const* udata = reinterpret_cast(env); - HostFunctions const* hf = reinterpret_cast(udata->first); + HostFunctions* hf = reinterpret_cast(udata->first); // NOLINT return hf; } @@ -341,7 +341,7 @@ checkGas(void* env) auto const* runtime = reinterpret_cast(hf->getRT()); if (runtime == nullptr) { - wasm_trap_t const* trap = reinterpret_cast( + wasm_trap_t* trap = reinterpret_cast( // NOLINT WasmEngine::instance().newTrap("hf no runtime")); // LCOV_EXCL_LINE return Unexpected(trap); // LCOV_EXCL_LINE } @@ -352,14 +352,14 @@ checkGas(void* env) if (runtime->setGas(x) < 0) { - wasm_trap_t const* trap = reinterpret_cast( + wasm_trap_t* trap = reinterpret_cast( // NOLINT WasmEngine::instance().newTrap("can't set gas")); // LCOV_EXCL_LINE return Unexpected(trap); // LCOV_EXCL_LINE } if (gas < impFunc.gas) { - wasm_trap_t const* trap = + wasm_trap_t* const trap = // NOLINT reinterpret_cast(WasmEngine::instance().newTrap("hf out of gas")); return Unexpected(trap); } diff --git a/src/libxrpl/tx/wasm/WasmiVM.cpp b/src/libxrpl/tx/wasm/WasmiVM.cpp index 622311540a..e624d1540d 100644 --- a/src/libxrpl/tx/wasm/WasmiVM.cpp +++ b/src/libxrpl/tx/wasm/WasmiVM.cpp @@ -918,7 +918,7 @@ WasmiEngine::newTrap(std::string const& txt) if (!txt.empty()) wasm_name_new(&msg, txt.size() + 1, txt.c_str()); // include 0 - wasm_trap_t const* trap = wasm_trap_new(store_.get(), &msg); + wasm_trap_t* trap = wasm_trap_new(store_.get(), &msg); // NOLINT if (!txt.empty()) wasm_byte_vec_delete(&msg); From 4fc1778ec809dd4447e73a07ca6e776e7f291642 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Fri, 3 Apr 2026 09:56:42 -0400 Subject: [PATCH 103/137] fix clang-tidy issues --- src/libxrpl/tx/wasm/HostFuncImplFloat.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp index 627d3b7d3f..1faaeab805 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp @@ -143,7 +143,7 @@ public: Serializer msg; msg.add64(v); - auto const data = msg.getData(); + auto data = msg.getData(); #ifdef DEBUG_OUTPUT std::cout << "m: " << std::setw(20) << mantissa() << ", e: " << std::setw(12) << exponent() From 00b0cf50f6dfcf151a28ec67a83e3f0aa00c3310 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Tue, 7 Apr 2026 15:58:29 -0400 Subject: [PATCH 104/137] Update wasmi to 1.0.9 (#6727) --- conan.lock | 4 ++-- conanfile.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/conan.lock b/conan.lock index 8fbdb68d89..5528bebb28 100644 --- a/conan.lock +++ b/conan.lock @@ -3,7 +3,7 @@ "requires": [ "zlib/1.3.1#cac0f6daea041b0ccf42934163defb20%1774439233.809", "xxhash/0.8.3#681d36a0a6111fc56e5e45ea182c19cc%1765850149.987", - "wasmi/1.0.6#407c9db14601a8af1c7dd3b388f3e4cd%1768164779.349", + "wasmi/1.0.9#1fecdab9b90c96698eb35ea99ca4f5cb%1772227278.324", "sqlite3/3.51.0#66aa11eabd0e34954c5c1c061ad44abe%1774467355.988", "soci/4.0.3#fe32b9ad5eb47e79ab9e45a68f363945%1774450067.231", "snappy/1.1.10#968fef506ff261592ec30c574d4a7809%1765850147.878", @@ -12,7 +12,7 @@ "re2/20251105#8579cfd0bda4daf0683f9e3898f964b4%1774398111.888", "protobuf/6.33.5#d96d52ba5baaaa532f47bda866ad87a5%1774467363.12", "openssl/3.6.1#e6399de266349245a4542fc5f6c71552%1774458290.139", - "nudb/2.0.9#11149c73f8f2baff9a0198fe25971fc7%1774883011.384", + "nudb/2.0.9#11149c73f8f2baff9a0198fe25971fc7%1775040983.408", "lz4/1.10.0#59fc63cac7f10fbe8e05c7e62c2f3504%1765850143.914", "libiconv/1.17#1e65319e945f2d31941a9d28cc13c058%1765842973.492", "libbacktrace/cci.20210118#a7691bfccd8caaf66309df196790a5a1%1765842973.03", diff --git a/conanfile.py b/conanfile.py index d62a182e1a..f6fbbee245 100644 --- a/conanfile.py +++ b/conanfile.py @@ -35,7 +35,7 @@ class Xrpl(ConanFile): "openssl/3.6.1", "secp256k1/0.7.1", "soci/4.0.3", - "wasmi/1.0.6", + "wasmi/1.0.9", "zlib/1.3.1", ] From d435893602251a4360f4bfe0b419ad6896ee963f Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Fri, 3 Apr 2026 11:16:50 -0400 Subject: [PATCH 105/137] fix: Change variable signedness and correctly handle `std::optional` (#6657) --- src/libxrpl/tx/transactors/account/AccountDelete.cpp | 2 +- src/xrpld/app/misc/detail/ValidatorList.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libxrpl/tx/transactors/account/AccountDelete.cpp b/src/libxrpl/tx/transactors/account/AccountDelete.cpp index 8c2f23b754..815b314f9f 100644 --- a/src/libxrpl/tx/transactors/account/AccountDelete.cpp +++ b/src/libxrpl/tx/transactors/account/AccountDelete.cpp @@ -292,7 +292,7 @@ AccountDelete::preclaim(PreclaimContext const& ctx) if (!cdirFirst(ctx.view, ownerDirKeylet.key, sleDirNode, uDirEntry, dirEntry)) return tesSUCCESS; - std::int32_t deletableDirEntryCount{0}; + std::uint32_t deletableDirEntryCount{0}; do { // Make sure any directory node types that we find are the kind diff --git a/src/xrpld/app/misc/detail/ValidatorList.cpp b/src/xrpld/app/misc/detail/ValidatorList.cpp index bed91afc44..0b203114b3 100644 --- a/src/xrpld/app/misc/detail/ValidatorList.cpp +++ b/src/xrpld/app/misc/detail/ValidatorList.cpp @@ -1710,7 +1710,7 @@ ValidatorList::for_each_available( if (plCollection.status != PublisherStatus::available) continue; XRPL_ASSERT( - plCollection.maxSequence != 0, + plCollection.maxSequence.value_or(0) != 0, "xrpl::ValidatorList::for_each_available : nonzero maxSequence"); func( plCollection.rawManifest, From b30b4e1d654106e8d291bc998a0b87617783c868 Mon Sep 17 00:00:00 2001 From: Vito Tumas <5780819+Tapanito@users.noreply.github.com> Date: Fri, 3 Apr 2026 19:41:45 +0200 Subject: [PATCH 106/137] fix: Add assorted Lending Protocol fixes (#6678) Co-authored-by: Shawn Xie <35279399+shawnxie999@users.noreply.github.com> --- .../tx/invariants/LoanBrokerInvariant.cpp | 28 +++-- .../tx/transactors/lending/LoanManage.cpp | 34 +++--- .../tx/transactors/lending/LoanPay.cpp | 2 +- src/test/app/Invariants_test.cpp | 104 +++++++++++++----- src/test/app/Loan_test.cpp | 14 ++- 5 files changed, 133 insertions(+), 49 deletions(-) diff --git a/src/libxrpl/tx/invariants/LoanBrokerInvariant.cpp b/src/libxrpl/tx/invariants/LoanBrokerInvariant.cpp index 2bc9e622ad..8ee0a0deb8 100644 --- a/src/libxrpl/tx/invariants/LoanBrokerInvariant.cpp +++ b/src/libxrpl/tx/invariants/LoanBrokerInvariant.cpp @@ -175,18 +175,32 @@ ValidLoanBroker::finalize( return false; } auto const& vaultAsset = vault->at(sfAsset); - if (after->at(sfCoverAvailable) < accountHolds( - view, - after->at(sfAccount), - vaultAsset, - FreezeHandling::fhIGNORE_FREEZE, - AuthHandling::ahIGNORE_AUTH, - j)) + auto const pseudoBalance = accountHolds( + view, + after->at(sfAccount), + vaultAsset, + FreezeHandling::fhIGNORE_FREEZE, + AuthHandling::ahIGNORE_AUTH, + j); + if (after->at(sfCoverAvailable) < pseudoBalance) { JLOG(j.fatal()) << "Invariant failed: Loan Broker cover available " "is less than pseudo-account asset balance"; return false; } + + if (view.rules().enabled(fixSecurity3_1_3)) + { + // Don't check the balance when LoanBroker is deleted, + // sfCoverAvailable is not zeroed + if (tx.getTxnType() != ttLOAN_BROKER_DELETE && + after->at(sfCoverAvailable) > pseudoBalance) + { + JLOG(j.fatal()) << "Invariant failed: Loan Broker cover available is greater " + "than pseudo-account asset balance"; + return false; + } + } } return true; } diff --git a/src/libxrpl/tx/transactors/lending/LoanManage.cpp b/src/libxrpl/tx/transactors/lending/LoanManage.cpp index adef5374b9..8c3e625963 100644 --- a/src/libxrpl/tx/transactors/lending/LoanManage.cpp +++ b/src/libxrpl/tx/transactors/lending/LoanManage.cpp @@ -386,21 +386,29 @@ LoanManage::doApply() return tefBAD_LEDGER; // LCOV_EXCL_LINE auto const vaultAsset = vaultSle->at(sfAsset); - // Valid flag combinations are checked in preflight. No flags is valid - - // just a noop. - if (tx.isFlag(tfLoanDefault)) - return defaultLoan(view, loanSle, brokerSle, vaultSle, vaultAsset, j_); - if (tx.isFlag(tfLoanImpair)) - return impairLoan(view, loanSle, vaultSle, vaultAsset, j_); - if (tx.isFlag(tfLoanUnimpair)) - return unimpairLoan(view, loanSle, vaultSle, vaultAsset, j_); - // Noop, as described above. + auto const result = [&]() -> TER { + // Valid flag combinations are checked in preflight. No flags is valid - + // just a noop. + if (tx.isFlag(tfLoanDefault)) + return defaultLoan(view, loanSle, brokerSle, vaultSle, vaultAsset, j_); + if (tx.isFlag(tfLoanImpair)) + return impairLoan(view, loanSle, vaultSle, vaultAsset, j_); + if (tx.isFlag(tfLoanUnimpair)) + return unimpairLoan(view, loanSle, vaultSle, vaultAsset, j_); + // Noop, as described above. + return tesSUCCESS; + }(); - associateAsset(*loanSle, vaultAsset); - associateAsset(*brokerSle, vaultAsset); - associateAsset(*vaultSle, vaultAsset); + // Pre-amendment, associateAsset was only called on the noop (no flags) + // path. Post-amendment, we call associateAsset on all successful paths. + if (view.rules().enabled(fixSecurity3_1_3) && isTesSuccess(result)) + { + associateAsset(*loanSle, vaultAsset); + associateAsset(*brokerSle, vaultAsset); + associateAsset(*vaultSle, vaultAsset); + } - return tesSUCCESS; + return result; } //------------------------------------------------------------------------------ diff --git a/src/libxrpl/tx/transactors/lending/LoanPay.cpp b/src/libxrpl/tx/transactors/lending/LoanPay.cpp index f748a670fd..d400fb3630 100644 --- a/src/libxrpl/tx/transactors/lending/LoanPay.cpp +++ b/src/libxrpl/tx/transactors/lending/LoanPay.cpp @@ -155,7 +155,7 @@ LoanPay::preclaim(PreclaimContext const& ctx) if (tx.isFlag(tfLoanOverpayment) && !loanSle->isFlag(lsfLoanOverpayment)) { JLOG(ctx.j.warn()) << "Requested overpayment on a loan that doesn't allow it"; - return temINVALID_FLAG; + return ctx.view.rules().enabled(fixSecurity3_1_3) ? TER{tecNO_PERMISSION} : temINVALID_FLAG; } auto const principalOutstanding = loanSle->at(sfPrincipalOutstanding); diff --git a/src/test/app/Invariants_test.cpp b/src/test/app/Invariants_test.cpp index ef0624b481..72ed7ba57b 100644 --- a/src/test/app/Invariants_test.cpp +++ b/src/test/app/Invariants_test.cpp @@ -2046,36 +2046,36 @@ class Invariants_test : public beast::unit_test::suite { // Initialize with a placeholder value because there's no default // ctor + auto const setupAsset = + [&](Account const& alice, Account const& issuer, Env& env) -> PrettyAsset { + switch (assetType) + { + case Asset::IOU: { + PrettyAsset const iouAsset = issuer["IOU"]; + env(trust(alice, iouAsset(1000))); + env(pay(issuer, alice, iouAsset(1000))); + env.close(); + return iouAsset; + } + case Asset::MPT: { + MPTTester mptt{env, issuer, mptInitNoFund}; + mptt.create({.flags = tfMPTCanClawback | tfMPTCanTransfer | tfMPTCanLock}); + PrettyAsset const mptAsset = mptt.issuanceID(); + mptt.authorize({.account = alice}); + env(pay(issuer, alice, mptAsset(1000))); + env.close(); + return mptAsset; + } + case Asset::XRP: + default: + return PrettyAsset{xrpIssue(), 1'000'000}; + } + }; + Keylet loanBrokerKeylet = keylet::amendments(); Preclose const createLoanBroker = [&, this](Account const& alice, Account const& issuer, Env& env) { - PrettyAsset const asset = [&]() { - switch (assetType) - { - case Asset::IOU: { - PrettyAsset const iouAsset = issuer["IOU"]; - env(trust(alice, iouAsset(1000))); - env(pay(issuer, alice, iouAsset(1000))); - env.close(); - return iouAsset; - } - - case Asset::MPT: { - MPTTester mptt{env, issuer, mptInitNoFund}; - mptt.create( - {.flags = tfMPTCanClawback | tfMPTCanTransfer | tfMPTCanLock}); - PrettyAsset const mptAsset = mptt.issuanceID(); - mptt.authorize({.account = alice}); - env(pay(issuer, alice, mptAsset(1000))); - env.close(); - return mptAsset; - } - - case Asset::XRP: - default: - return PrettyAsset{xrpIssue(), 1'000'000}; - } - }(); + auto const asset = setupAsset(alice, issuer, env); loanBrokerKeylet = this->createLoanBroker(alice, env, asset); return BEAST_EXPECT(env.le(loanBrokerKeylet)); }; @@ -2249,6 +2249,56 @@ class Invariants_test : public beast::unit_test::suite STTx{ttLOAN_BROKER_SET, [](STObject& tx) {}}, {tecINVARIANT_FAILED, tefINVARIANT_FAILED}, createLoanBroker); + + // Test: cover available less than pseudo-account asset balance + { + Keylet brokerKeylet = keylet::amendments(); + Preclose const createBrokerWithCover = + [&, this](Account const& alice, Account const& issuer, Env& env) { + auto const asset = setupAsset(alice, issuer, env); + brokerKeylet = this->createLoanBroker(alice, env, asset); + if (!BEAST_EXPECT(env.le(brokerKeylet))) + return false; + env(loanBroker::coverDeposit(alice, brokerKeylet.key, asset(10))); + env.close(); + return BEAST_EXPECT(env.le(brokerKeylet)); + }; + + doInvariantCheck( + {{"Loan Broker cover available is less than pseudo-account asset balance"}}, + [&](Account const&, Account const&, ApplyContext& ac) { + auto sle = ac.view().peek(brokerKeylet); + if (!BEAST_EXPECT(sle)) + return false; + // Pseudo-account holds 10 units, set cover to 5 + sle->at(sfCoverAvailable) = Number(5); + ac.view().update(sle); + return true; + }, + XRPAmount{}, + STTx{ttLOAN_BROKER_SET, [](STObject& tx) {}}, + {tecINVARIANT_FAILED, tefINVARIANT_FAILED}, + createBrokerWithCover); + } + + // Test: cover available greater than pseudo-account asset balance + // (requires fixSecurity3_1_3) + doInvariantCheck( + {{"Loan Broker cover available is greater than pseudo-account asset balance"}}, + [&](Account const&, Account const&, ApplyContext& ac) { + auto sle = ac.view().peek(loanBrokerKeylet); + if (!BEAST_EXPECT(sle)) + return false; + // Pseudo-account has no cover deposited; set cover + // higher than any incidental balance + sle->at(sfCoverAvailable) = Number(1'000'000); + ac.view().update(sle); + return true; + }, + XRPAmount{}, + STTx{ttLOAN_BROKER_SET, [](STObject& tx) {}}, + {tecINVARIANT_FAILED, tefINVARIANT_FAILED}, + createLoanBroker); } } diff --git a/src/test/app/Loan_test.cpp b/src/test/app/Loan_test.cpp index a63d31f030..05123c11c0 100644 --- a/src/test/app/Loan_test.cpp +++ b/src/test/app/Loan_test.cpp @@ -2071,7 +2071,19 @@ protected: STAmount{broker.asset, state.periodicPayment * Number{15, -1}}, tfLoanOverpayment), fee(XRPAmount{baseFee * (Number{15, -1} / loanPaymentsPerFeeIncrement + 1)}), - ter(temINVALID_FLAG)); + ter(tecNO_PERMISSION)); + + { + env.disableFeature(fixSecurity3_1_3); + env(pay(borrower, + loanKeylet.key, + STAmount{broker.asset, state.periodicPayment * Number{15, -1}}, + tfLoanOverpayment), + fee(XRPAmount{ + baseFee * (Number{15, -1} / loanPaymentsPerFeeIncrement + 1)}), + ter(temINVALID_FLAG)); + env.enableFeature(fixSecurity3_1_3); + } } // Try to send a payment marked as multiple mutually exclusive // payment types. Do not include `txFlags`, so we don't duplicate From 18d5e3e22650a2ddc0a731a6cc6ba213869cfcee Mon Sep 17 00:00:00 2001 From: Vito Tumas <5780819+Tapanito@users.noreply.github.com> Date: Mon, 6 Apr 2026 17:13:03 +0200 Subject: [PATCH 107/137] fix: Clamp VaultClawback to assetsAvailable for zero-amount clawback (#6646) --- .../tx/transactors/vault/VaultClawback.cpp | 41 +- src/test/app/Vault_test.cpp | 677 +++++++++++++++++- 2 files changed, 693 insertions(+), 25 deletions(-) diff --git a/src/libxrpl/tx/transactors/vault/VaultClawback.cpp b/src/libxrpl/tx/transactors/vault/VaultClawback.cpp index 6a4d6a579e..9904c4183d 100644 --- a/src/libxrpl/tx/transactors/vault/VaultClawback.cpp +++ b/src/libxrpl/tx/transactors/vault/VaultClawback.cpp @@ -13,6 +13,7 @@ #include #include +#include namespace xrpl { NotTEC @@ -226,7 +227,11 @@ VaultClawback::assetsToClawback( auto const mptIssuanceID = *vault->at(sfShareMPTID); MPTIssue const share{mptIssuanceID}; - if (clawbackAmount == beast::zero) + // Pre-fixSecurity3_1_3: zero-amount clawback returned early without + // clamping to assetsAvailable, allowing more assets to be recovered + // than available when there was an outstanding loan. Retained for + // ledger replay compatibility. + if (!ctx_.view().rules().enabled(fixSecurity3_1_3) && clawbackAmount == beast::zero) { auto const sharesDestroyed = accountHolds( view(), @@ -243,22 +248,40 @@ VaultClawback::assetsToClawback( } STAmount sharesDestroyed; - STAmount assetsRecovered = clawbackAmount; + STAmount assetsRecovered; + try { + if (clawbackAmount == beast::zero) + { + sharesDestroyed = accountHolds( + view(), + holder, + share, + FreezeHandling::fhIGNORE_FREEZE, + AuthHandling::ahIGNORE_AUTH, + j_); + auto const maybeAssets = + sharesToAssetsWithdraw(vault, sleShareIssuance, sharesDestroyed); + if (!maybeAssets) + return Unexpected(tecINTERNAL); // LCOV_EXCL_LINE + + assetsRecovered = *maybeAssets; + } + else { auto const maybeShares = - assetsToSharesWithdraw(vault, sleShareIssuance, assetsRecovered); + assetsToSharesWithdraw(vault, sleShareIssuance, clawbackAmount); if (!maybeShares) return Unexpected(tecINTERNAL); // LCOV_EXCL_LINE sharesDestroyed = *maybeShares; + + auto const maybeAssets = + sharesToAssetsWithdraw(vault, sleShareIssuance, sharesDestroyed); + if (!maybeAssets) + return Unexpected(tecINTERNAL); // LCOV_EXCL_LINE + assetsRecovered = *maybeAssets; } - - auto const maybeAssets = sharesToAssetsWithdraw(vault, sleShareIssuance, sharesDestroyed); - if (!maybeAssets) - return Unexpected(tecINTERNAL); // LCOV_EXCL_LINE - assetsRecovered = *maybeAssets; - // Clamp to maximum. if (assetsRecovered > *assetsAvailable) { diff --git a/src/test/app/Vault_test.cpp b/src/test/app/Vault_test.cpp index 823cf7aafd..63341e7ea3 100644 --- a/src/test/app/Vault_test.cpp +++ b/src/test/app/Vault_test.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include @@ -3370,10 +3371,10 @@ class Vault_test : public beast::unit_test::suite [&](OpenView& view, beast::Journal j) -> bool { Sandbox sb(&view, tapNONE); auto vault = sb.peek(keylet::vault(keylet.key)); - if (!BEAST_EXPECT(vault != nullptr)) + if (!BEAST_EXPECT(vault)) return false; auto shares = sb.peek(keylet::mptIssuance(vault->at(sfShareMPTID))); - if (!BEAST_EXPECT(shares != nullptr)) + if (!BEAST_EXPECT(shares)) return false; if (fn(*vault, *shares)) { @@ -4102,6 +4103,66 @@ class Vault_test : public beast::unit_test::suite BEAST_EXPECT(env.balance(d.vaultAccount, d.shares).number() == 0); } }); + + // Non-1:1 ratio (scale=1, 10:1 shares:assets) with an outstanding loan. + // Deposit 100 IOU → 1000 shares. Borrow 40 → assetsAvailable=60. + // Clawback 80 IOU → clamped to 60, then share math uses truncation. + testCase(1, [&, this](Env& env, Data d) { + using namespace loanBroker; + using namespace loan; + + testcase("Scale clawback clamped with outstanding loan"); + + auto tx = d.vault.deposit( + {.depositor = d.depositor, + .id = d.keylet.key, + .amount = STAmount(d.asset, Number(100, 0))}); + env(tx); + env.close(); + BEAST_EXPECT(env.balance(d.depositor, d.shares) == d.share(1000)); + + // Create a loan broker backed by this vault + auto const brokerKeylet = keylet::loanbroker(d.owner.id(), env.seq(d.owner)); + env(set(d.owner, d.keylet.key)); + env.close(); + + // Borrow 40: assetsAvailable=60, assetsTotal=100 + env(set(d.depositor, brokerKeylet.key, STAmount(d.asset, Number(40, 0))), + loan::interestRate(TenthBips32(0)), + gracePeriod(60), + paymentInterval(120), + paymentTotal(10), + sig(sfCounterpartySignature, d.owner), + fee(env.current()->fees().base * 2), + ter(tesSUCCESS)); + env.close(); + + { + auto const sle = env.le(d.keylet); + BEAST_EXPECT(sle->at(sfAssetsAvailable) == STAmount(d.asset, Number(60, 0))); + BEAST_EXPECT(sle->at(sfAssetsTotal) == STAmount(d.asset, Number(100, 0))); + } + + // Request 80 IOU clawback — clamped to assetsAvailable (60) + // With scale=1 (10:1), 60 assets = 600 shares destroyed + tx = d.vault.clawback( + {.issuer = d.issuer, + .id = d.keylet.key, + .holder = d.depositor, + .amount = STAmount(d.asset, Number(80, 0))}); + env(tx, ter(tesSUCCESS)); + env.close(); + + { + auto const sle = env.le(d.keylet); + BEAST_EXPECT(sle != nullptr); + BEAST_EXPECT(sle->at(sfAssetsAvailable) == STAmount(d.asset, Number(0, 0))); + BEAST_EXPECT(sle->at(sfAssetsTotal) == STAmount(d.asset, Number(40, 0))); + + // 600 of 1000 shares destroyed, 400 remain + BEAST_EXPECT(env.balance(d.depositor, d.shares) == d.share(400)); + } + }); } void @@ -4648,8 +4709,7 @@ class Vault_test : public beast::unit_test::suite "VaultClawback (share) - " + prefix + " owner incomplete share clawback fails"); auto [vault, vaultKeylet] = setupVault(asset, owner, depositor); auto const& vaultSle = env.le(vaultKeylet); - BEAST_EXPECT(vaultSle != nullptr); - if (!vaultSle) + if (!BEAST_EXPECT(vaultSle)) return; Asset const share = vaultSle->at(sfShareMPTID); env(vault.clawback({ @@ -4684,8 +4744,7 @@ class Vault_test : public beast::unit_test::suite " owner explicit complete share clawback succeeds"); auto [vault, vaultKeylet] = setupVault(asset, owner, depositor); auto const& vaultSle = env.le(vaultKeylet); - BEAST_EXPECT(vaultSle != nullptr); - if (!vaultSle) + if (!BEAST_EXPECT(vaultSle)) return; Asset const share = vaultSle->at(sfShareMPTID); env(vault.clawback({ @@ -4701,8 +4760,7 @@ class Vault_test : public beast::unit_test::suite testcase("VaultClawback (share) - " + prefix + " owner can clawback own shares"); auto [vault, vaultKeylet] = setupVault(asset, owner, owner); auto const& vaultSle = env.le(vaultKeylet); - BEAST_EXPECT(vaultSle != nullptr); - if (!vaultSle) + if (!BEAST_EXPECT(vaultSle)) return; Asset const share = vaultSle->at(sfShareMPTID); env(vault.clawback({ @@ -4719,7 +4777,7 @@ class Vault_test : public beast::unit_test::suite testcase("VaultClawback (share) - " + prefix + " empty vault share clawback fails"); auto [vault, vaultKeylet] = setupVault(asset, owner, owner); auto const& vaultSle = env.le(vaultKeylet); - if (BEAST_EXPECT(vaultSle != nullptr)) + if (!BEAST_EXPECT(vaultSle)) return; Asset const share = vaultSle->at(sfShareMPTID); env(vault.clawback({ @@ -4735,6 +4793,7 @@ class Vault_test : public beast::unit_test::suite .issuer = owner, .id = vaultKeylet.key, .holder = owner, + .amount = share(vaultShareBalance(vaultKeylet)).value(), }), ter(tecNO_PERMISSION)); env.close(); @@ -4786,6 +4845,7 @@ class Vault_test : public beast::unit_test::suite using namespace loanBroker; using namespace loan; Env env(*this); + env.enableFeature(fixSecurity3_1_3); auto const setupVault = [&](PrettyAsset const& asset, Account const& owner, @@ -4799,6 +4859,7 @@ class Vault_test : public beast::unit_test::suite auto const& vaultSle = env.le(vaultKeylet); BEAST_EXPECT(vaultSle != nullptr); + env.memoize(Account("vault", vaultSle->at(sfAccount))); env(vault.deposit( {.depositor = depositor, .id = vaultKeylet.key, .amount = asset(100)}), ter(tesSUCCESS)); @@ -4899,8 +4960,7 @@ class Vault_test : public beast::unit_test::suite testcase("VaultClawback (asset) - " + prefix + " issuer share clawback fails"); auto [vault, vaultKeylet] = setupVault(asset, owner, depositor, issuer); auto const& vaultSle = env.le(vaultKeylet); - BEAST_EXPECT(vaultSle != nullptr); - if (!vaultSle) + if (!BEAST_EXPECT(vaultSle)) return; Asset const share = vaultSle->at(sfShareMPTID); @@ -4955,6 +5015,288 @@ class Vault_test : public beast::unit_test::suite }), ter(tesSUCCESS)); } + + { + testcase( + "VaultClawback (asset) - " + prefix + + " zero-amount clawback clamped with outstanding loan"); + auto [vault, vaultKeylet] = setupVault(asset, owner, depositor, issuer); + + auto const vaultSle = env.le(vaultKeylet); + if (!BEAST_EXPECT(vaultSle)) + return; + + PrettyAsset const shares = MPTIssue(vaultSle->at(sfShareMPTID)); + + // Create a loan broker backed by this vault + auto const brokerKeylet = keylet::loanbroker(owner.id(), env.seq(owner)); + env(set(owner, vaultKeylet.key)); + env.close(); + + // Depositor borrows 40 units, reducing assetsAvailable to 60 + // while assetsTotal stays at 100 + env(set(depositor, brokerKeylet.key, asset(40).value()), + loan::interestRate(TenthBips32(0)), + gracePeriod(60), + paymentInterval(120), + paymentTotal(10), + sig(sfCounterpartySignature, owner), + fee(env.current()->fees().base * 2), + ter(tesSUCCESS)); + env.close(); + + { + auto const sle = env.le(vaultKeylet); + BEAST_EXPECT(sle->at(sfAssetsAvailable) == asset(60).value()); + BEAST_EXPECT(sle->at(sfAssetsTotal) == asset(100).value()); + } + + // Zero-amount clawback (= "clawback all") should succeed, + // clamped to assetsAvailable (60) rather than the full + // share value (100). + env(vault.clawback({ + .issuer = issuer, + .id = vaultKeylet.key, + .holder = depositor, + }), + ter(tesSUCCESS)); + env.close(); + + // Only 60 assets clawed back; loan's 40 still outstanding + { + auto const sle = env.le(vaultKeylet); + BEAST_EXPECT(sle != nullptr); + BEAST_EXPECT(sle->at(sfAssetsAvailable) == asset(0).value()); + BEAST_EXPECT(sle->at(sfAssetsTotal) == asset(40).value()); + + // 60 of 100 shares destroyed (1:1 ratio), 40 remain + auto const sharesAfter = env.balance(depositor, shares); + BEAST_EXPECT(sharesAfter == shares(Number{4, sle->at(sfScale) + 1})); + } + } + + { + testcase( + "VaultClawback (asset) - " + prefix + + " non-zero clawback clamped with outstanding loan"); + auto [vault, vaultKeylet] = setupVault(asset, owner, depositor, issuer); + + auto const vaultSle = env.le(vaultKeylet); + if (!BEAST_EXPECT(vaultSle)) + return; + PrettyAsset const shares = MPTIssue(vaultSle->at(sfShareMPTID)); + + // Create a loan broker backed by this vault + auto const brokerKeylet = keylet::loanbroker(owner.id(), env.seq(owner)); + env(set(owner, vaultKeylet.key)); + env.close(); + + // Depositor borrows 40 units + env(set(depositor, brokerKeylet.key, asset(40).value()), + loan::interestRate(TenthBips32(0)), + gracePeriod(60), + paymentInterval(120), + paymentTotal(10), + sig(sfCounterpartySignature, owner), + fee(env.current()->fees().base * 2), + ter(tesSUCCESS)); + env.close(); + + { + auto const sle = env.le(vaultKeylet); + BEAST_EXPECT(sle->at(sfAssetsAvailable) == asset(60).value()); + BEAST_EXPECT(sle->at(sfAssetsTotal) == asset(100).value()); + } + + // Request 100 but only 60 available — clamped to 60 + env(vault.clawback({ + .issuer = issuer, + .id = vaultKeylet.key, + .holder = depositor, + .amount = asset(100).value(), + }), + ter(tesSUCCESS)); + env.close(); + + { + auto const sle = env.le(vaultKeylet); + BEAST_EXPECT(sle != nullptr); + BEAST_EXPECT(sle->at(sfAssetsAvailable) == asset(0).value()); + BEAST_EXPECT(sle->at(sfAssetsTotal) == asset(40).value()); + + // 60 of 100 shares destroyed (1:1 ratio), 40 remain + auto const sharesAfter = env.balance(depositor, shares); + BEAST_EXPECT(sharesAfter == shares(Number{4, sle->at(sfScale) + 1})); + } + } + + { + testcase( + "VaultClawback (asset) - " + prefix + + " partial clawback below available with outstanding loan"); + auto [vault, vaultKeylet] = setupVault(asset, owner, depositor, issuer); + + auto const vaultSle = env.le(vaultKeylet); + if (!BEAST_EXPECT(vaultSle)) + return; + PrettyAsset const shares = MPTIssue(vaultSle->at(sfShareMPTID)); + + // Create a loan broker backed by this vault + auto const brokerKeylet = keylet::loanbroker(owner.id(), env.seq(owner)); + env(set(owner, vaultKeylet.key)); + env.close(); + + // Depositor borrows 40 units: assetsAvailable=60, assetsTotal=100 + env(set(depositor, brokerKeylet.key, asset(40).value()), + loan::interestRate(TenthBips32(0)), + gracePeriod(60), + paymentInterval(120), + paymentTotal(10), + sig(sfCounterpartySignature, owner), + fee(env.current()->fees().base * 2), + ter(tesSUCCESS)); + env.close(); + + { + auto const sle = env.le(vaultKeylet); + BEAST_EXPECT(sle->at(sfAssetsAvailable) == asset(60).value()); + BEAST_EXPECT(sle->at(sfAssetsTotal) == asset(100).value()); + } + + // Clawback 30 — well under available (60), no clamping needed + env(vault.clawback({ + .issuer = issuer, + .id = vaultKeylet.key, + .holder = depositor, + .amount = asset(30).value(), + }), + ter(tesSUCCESS)); + env.close(); + + { + auto const sle = env.le(vaultKeylet); + BEAST_EXPECT(sle != nullptr); + BEAST_EXPECT(sle->at(sfAssetsAvailable) == asset(30).value()); + BEAST_EXPECT(sle->at(sfAssetsTotal) == asset(70).value()); + + // 30 of 100 shares destroyed (1:1 ratio), 70 remain + auto const sharesAfter = env.balance(depositor, shares); + BEAST_EXPECT(sharesAfter == shares(Number{7, sle->at(sfScale) + 1})); + } + } + + { + testcase( + "VaultClawback (asset) - " + prefix + + " clawback exactly equal to available with outstanding loan"); + auto [vault, vaultKeylet] = setupVault(asset, owner, depositor, issuer); + + auto const vaultSle = env.le(vaultKeylet); + if (!BEAST_EXPECT(vaultSle)) + return; + PrettyAsset const shares = MPTIssue(vaultSle->at(sfShareMPTID)); + + auto const brokerKeylet = keylet::loanbroker(owner.id(), env.seq(owner)); + env(set(owner, vaultKeylet.key)); + env.close(); + + // Depositor borrows 40 units: assetsAvailable=60, assetsTotal=100 + env(set(depositor, brokerKeylet.key, asset(40).value()), + loan::interestRate(TenthBips32(0)), + gracePeriod(60), + paymentInterval(120), + paymentTotal(10), + sig(sfCounterpartySignature, owner), + fee(env.current()->fees().base * 2), + ter(tesSUCCESS)); + env.close(); + + // Clawback exactly 60 — at the boundary, no clamping needed + env(vault.clawback({ + .issuer = issuer, + .id = vaultKeylet.key, + .holder = depositor, + .amount = asset(60).value(), + }), + ter(tesSUCCESS)); + env.close(); + + { + auto const sle = env.le(vaultKeylet); + BEAST_EXPECT(sle != nullptr); + BEAST_EXPECT(sle->at(sfAssetsAvailable) == asset(0).value()); + BEAST_EXPECT(sle->at(sfAssetsTotal) == asset(40).value()); + + // 60 of 100 shares destroyed (1:1 ratio), 40 remain + auto const sharesAfter = env.balance(depositor, shares); + BEAST_EXPECT(sharesAfter == shares(Number{4, sle->at(sfScale) + 1})); + } + } + + { + testcase( + "VaultClawback (asset) - " + prefix + + " clawback with zero available (fully borrowed)"); + auto [vault, vaultKeylet] = setupVault(asset, owner, depositor, issuer); + + auto const vaultSle = env.le(vaultKeylet); + if (!BEAST_EXPECT(vaultSle)) + return; + PrettyAsset const shares = MPTIssue(vaultSle->at(sfShareMPTID)); + + auto const brokerKeylet = keylet::loanbroker(owner.id(), env.seq(owner)); + env(set(owner, vaultKeylet.key)); + env.close(); + + // Depositor borrows all 100 units: assetsAvailable=0, assetsTotal=100 + env(set(depositor, brokerKeylet.key, asset(100).value()), + loan::interestRate(TenthBips32(0)), + gracePeriod(60), + paymentInterval(120), + paymentTotal(10), + sig(sfCounterpartySignature, owner), + fee(env.current()->fees().base * 2), + ter(tesSUCCESS)); + env.close(); + + { + auto const sle = env.le(vaultKeylet); + BEAST_EXPECT(sle->at(sfAssetsAvailable) == asset(0).value()); + BEAST_EXPECT(sle->at(sfAssetsTotal) == asset(100).value()); + } + + auto const sharesBefore = env.balance(depositor, shares); + + // Zero-amount clawback — nothing available, clamped to 0, + // resulting in zero shares destroyed → tecPRECISION_LOSS + env(vault.clawback({ + .issuer = issuer, + .id = vaultKeylet.key, + .holder = depositor, + }), + ter(tecPRECISION_LOSS)); + env.close(); + + // Explicit amount clawback — also nothing available + env(vault.clawback({ + .issuer = issuer, + .id = vaultKeylet.key, + .holder = depositor, + .amount = asset(50).value(), + }), + ter(tecPRECISION_LOSS)); + env.close(); + + { + // Nothing changed — vault and shares unchanged + auto const sle = env.le(vaultKeylet); + BEAST_EXPECT(sle != nullptr); + BEAST_EXPECT(sle->at(sfAssetsAvailable) == asset(0).value()); + BEAST_EXPECT(sle->at(sfAssetsTotal) == asset(100).value()); + auto const sharesAfter = env.balance(depositor, shares); + BEAST_EXPECT(sharesAfter == sharesBefore); + } + } }; Account owner{"alice"}; @@ -4972,10 +5314,10 @@ class Vault_test : public beast::unit_test::suite PrettyAsset const IOU = issuer["IOU"]; env(fset(issuer, asfAllowTrustLineClawback)); env.close(); - env.trust(IOU(1000), owner); - env.trust(IOU(1000), depositor); - env(pay(issuer, owner, IOU(1000))); - env(pay(issuer, depositor, IOU(1000))); + env.trust(IOU(2000), owner); + env.trust(IOU(2000), depositor); + env(pay(issuer, owner, IOU(2000))); + env(pay(issuer, depositor, IOU(2000))); env.close(); testCase(IOU, "IOU", owner, depositor, issuer); @@ -4985,9 +5327,77 @@ class Vault_test : public beast::unit_test::suite PrettyAsset const MPT = mptt.issuanceID(); mptt.authorize({.account = owner}); mptt.authorize({.account = depositor}); - env(pay(issuer, depositor, MPT(1000))); + env(pay(issuer, depositor, MPT(2000))); env.close(); testCase(MPT, "MPT", owner, depositor, issuer); + + // Test pre-fixSecurity3_1_3 legacy path: zero-amount clawback + // returns early without clamping to assetsAvailable. + { + testcase( + "VaultClawback (asset) - IOU pre-fixSecurity3_1_3" + " zero-amount clawback unclamped with outstanding loan"); + + env.disableFeature(fixSecurity3_1_3); + + auto [vault, vaultKeylet] = setupVault(IOU, owner, depositor, issuer); + + auto const vaultSle = env.le(vaultKeylet); + BEAST_EXPECT(vaultSle != nullptr); + if (!vaultSle) + return; + + PrettyAsset const shares = MPTIssue(vaultSle->at(sfShareMPTID)); + + // Create a loan broker backed by this vault + auto const brokerKeylet = keylet::loanbroker(owner.id(), env.seq(owner)); + env(set(owner, vaultKeylet.key)); + env.close(); + + // Depositor borrows 40 units, reducing assetsAvailable to 60 + // while assetsTotal stays at 100 + env(set(depositor, brokerKeylet.key, IOU(40).value()), + loan::interestRate(TenthBips32(0)), + gracePeriod(60), + paymentInterval(120), + paymentTotal(10), + sig(sfCounterpartySignature, owner), + fee(env.current()->fees().base * 2), + ter(tesSUCCESS)); + env.close(); + + { + auto const sle = env.le(vaultKeylet); + BEAST_EXPECT(sle->at(sfAssetsAvailable) == IOU(60).value()); + BEAST_EXPECT(sle->at(sfAssetsTotal) == IOU(100).value()); + } + + auto const sharesBefore = env.balance(depositor, shares); + + // Legacy: zero-amount clawback tries to recover the full + // share value (100) without clamping to assetsAvailable (60). + // This causes the vault balance to go negative, triggering + // the sanity check in doApply → tefINTERNAL. + env(vault.clawback({ + .issuer = issuer, + .id = vaultKeylet.key, + .holder = depositor, + }), + ter(tefINTERNAL)); + env.close(); + + { + // Transaction rolled back — vault and shares unchanged + auto const sle = env.le(vaultKeylet); + BEAST_EXPECT(sle != nullptr); + BEAST_EXPECT(sle->at(sfAssetsAvailable) == IOU(60).value()); + BEAST_EXPECT(sle->at(sfAssetsTotal) == IOU(100).value()); + auto const sharesAfter = env.balance(depositor, shares); + BEAST_EXPECT(sharesAfter == sharesBefore); + } + + env.enableFeature(fixSecurity3_1_3); + } } void @@ -5231,6 +5641,240 @@ class Vault_test : public beast::unit_test::suite } } + void + testVaultEscrowedMPT() + { + using namespace test::jtx; + using namespace std::literals; + + // Verify vault deposit/withdraw/clawback respect sfLockedAmount. + // When MPT tokens are escrowed, sfMPTAmount is reduced and + // sfLockedAmount is increased. Vault operations go through + // accountSend/accountHolds which read sfMPTAmount, so escrowed + // tokens are naturally excluded. + + { + testcase("Vault deposit fails when MPT asset is escrowed"); + + Env env{*this, testable_amendments()}; + auto const baseFee = env.current()->fees().base; + Account const owner{"owner"}; + Account const depositor{"depositor"}; + Account const issuer{"issuer"}; + Account const bob{"bob"}; + + env.fund(XRP(10000), issuer, owner, depositor, bob); + env.close(); + + MPTTester mptt{env, issuer, mptInitNoFund}; + mptt.create( + {.flags = tfMPTCanClawback | tfMPTCanTransfer | tfMPTCanLock | tfMPTCanEscrow}); + mptt.authorize({.account = owner}); + mptt.authorize({.account = depositor}); + mptt.authorize({.account = bob}); + PrettyAsset const asset = mptt.issuanceID(); + env(pay(issuer, depositor, asset(100))); + env.close(); + + // Escrow 60 of 100 MPT tokens: sfMPTAmount drops to 40 + auto const escrowSeq = env.seq(depositor); + env(escrow::create(depositor, bob, asset(60)), + escrow::condition(escrow::cb1), + escrow::finish_time(env.now() + 1s), + fee(baseFee * 150), + ter(tesSUCCESS)); + env.close(); + + Vault const vault{env}; + auto [tx, vaultKeylet] = vault.create({.owner = owner, .asset = asset}); + env(tx, ter(tesSUCCESS)); + env.close(); + + // Deposit 100 should fail — only 40 spendable + env(vault.deposit( + {.depositor = depositor, .id = vaultKeylet.key, .amount = asset(100)}), + ter(tecINSUFFICIENT_FUNDS)); + env.close(); + + // Deposit 40 (the unlocked balance) should succeed + env(vault.deposit({.depositor = depositor, .id = vaultKeylet.key, .amount = asset(40)}), + ter(tesSUCCESS)); + env.close(); + + { + auto const sle = env.le(vaultKeylet); + BEAST_EXPECT(sle->at(sfAssetsTotal) == asset(40).value()); + } + + // Clean up escrow + env(escrow::finish(bob, depositor, escrowSeq), + escrow::condition(escrow::cb1), + escrow::fulfillment(escrow::fb1), + fee(baseFee * 150), + ter(tesSUCCESS)); + env.close(); + } + + { + testcase("Vault withdraw respects escrowed shares"); + + Env env{*this, testable_amendments()}; + auto const baseFee = env.current()->fees().base; + Account const owner{"owner"}; + Account const depositor{"depositor"}; + Account const issuer{"issuer"}; + Account const bob{"bob"}; + + env.fund(XRP(10000), issuer, owner, depositor, bob); + env.close(); + + MPTTester mptt{env, issuer, mptInitNoFund}; + mptt.create( + {.flags = tfMPTCanClawback | tfMPTCanTransfer | tfMPTCanLock | tfMPTCanEscrow}); + mptt.authorize({.account = owner}); + mptt.authorize({.account = depositor}); + PrettyAsset const asset = mptt.issuanceID(); + env(pay(issuer, depositor, asset(100))); + env.close(); + + Vault const vault{env}; + auto [tx, vaultKeylet] = vault.create({.owner = owner, .asset = asset}); + env(tx, ter(tesSUCCESS)); + env.close(); + + // Deposit 100 → get shares + env(vault.deposit( + {.depositor = depositor, .id = vaultKeylet.key, .amount = asset(100)}), + ter(tesSUCCESS)); + env.close(); + + auto const vaultSle = env.le(vaultKeylet); + if (!BEAST_EXPECT(vaultSle)) + return; + env.memoize(Account("vault", vaultSle->at(sfAccount))); + PrettyAsset const shares = MPTIssue(vaultSle->at(sfShareMPTID)); + + // Authorize bob for share MPT so he can receive escrowed shares + auto const shareMPTID = vaultSle->at(sfShareMPTID); + { + Json::Value jv; + jv[jss::Account] = bob.human(); + jv[sfMPTokenIssuanceID] = to_string(shareMPTID); + jv[jss::TransactionType] = jss::MPTokenAuthorize; + env(jv, ter(tesSUCCESS)); + env.close(); + } + + // Escrow 60% of shares + auto const escrowAmount = shares(Number{6, vaultSle->at(sfScale) + 1}); + env(escrow::create(depositor, bob, escrowAmount), + escrow::condition(escrow::cb1), + escrow::finish_time(env.now() + 1s), + fee(baseFee * 150), + ter(tesSUCCESS)); + env.close(); + + // Withdraw all 100 should fail — only 40% of shares are unlocked + env(vault.withdraw( + {.depositor = depositor, .id = vaultKeylet.key, .amount = asset(100)}), + ter(tecINSUFFICIENT_FUNDS)); + env.close(); + + // Withdraw 40 (matching unlocked shares) should succeed + env(vault.withdraw( + {.depositor = depositor, .id = vaultKeylet.key, .amount = asset(40)}), + ter(tesSUCCESS)); + env.close(); + + { + auto const sle = env.le(vaultKeylet); + BEAST_EXPECT(sle->at(sfAssetsTotal) == asset(60).value()); + } + } + + { + testcase("Vault clawback only recovers unlocked shares"); + + Env env{*this, testable_amendments() | fixSecurity3_1_3}; + auto const baseFee = env.current()->fees().base; + Account const owner{"owner"}; + Account const depositor{"depositor"}; + Account const issuer{"issuer"}; + Account const bob{"bob"}; + + env.fund(XRP(10000), issuer, owner, depositor, bob); + env.close(); + + MPTTester mptt{env, issuer, mptInitNoFund}; + mptt.create( + {.flags = tfMPTCanClawback | tfMPTCanTransfer | tfMPTCanLock | tfMPTCanEscrow}); + mptt.authorize({.account = owner}); + mptt.authorize({.account = depositor}); + PrettyAsset const asset = mptt.issuanceID(); + env(pay(issuer, depositor, asset(100))); + env.close(); + + Vault const vault{env}; + auto [tx, vaultKeylet] = vault.create({.owner = owner, .asset = asset}); + env(tx, ter(tesSUCCESS)); + env.close(); + + // Deposit 100 → get shares + env(vault.deposit( + {.depositor = depositor, .id = vaultKeylet.key, .amount = asset(100)}), + ter(tesSUCCESS)); + env.close(); + + auto const vaultSle = env.le(vaultKeylet); + if (!BEAST_EXPECT(vaultSle)) + return; + env.memoize(Account("vault", vaultSle->at(sfAccount))); + PrettyAsset const shares = MPTIssue(vaultSle->at(sfShareMPTID)); + + // Authorize bob for share MPT so he can receive escrowed shares + auto const shareMPTID = vaultSle->at(sfShareMPTID); + { + Json::Value jv; + jv[jss::Account] = bob.human(); + jv[sfMPTokenIssuanceID] = to_string(shareMPTID); + jv[jss::TransactionType] = jss::MPTokenAuthorize; + env(jv, ter(tesSUCCESS)); + env.close(); + } + + // Escrow 60% of shares + auto const escrowAmount = shares(Number{6, vaultSle->at(sfScale) + 1}); + env(escrow::create(depositor, bob, escrowAmount), + escrow::condition(escrow::cb1), + escrow::finish_time(env.now() + 1s), + fee(baseFee * 150), + ter(tesSUCCESS)); + env.close(); + + // Zero-amount clawback ("all") — should only recover assets + // corresponding to unlocked shares (40%) + env(vault.clawback({ + .issuer = issuer, + .id = vaultKeylet.key, + .holder = depositor, + }), + ter(tesSUCCESS)); + env.close(); + + { + auto const sle = env.le(vaultKeylet); + BEAST_EXPECT(sle != nullptr); + // Only 40 of 100 assets recovered (matching 40% unlocked shares) + BEAST_EXPECT(sle->at(sfAssetsTotal) == asset(60).value()); + BEAST_EXPECT(sle->at(sfAssetsAvailable) == asset(60).value()); + + // Depositor's unlocked shares are now 0 + auto const sharesAfter = env.balance(depositor, shares); + BEAST_EXPECT(sharesAfter == shares(0)); + } + } + } + // Reproduction: canWithdraw IOU limit check bypassed when // withdrawal amount is specified in shares (MPT) rather than in assets. void @@ -5346,6 +5990,7 @@ public: testRPC(); testVaultClawbackBurnShares(); testVaultClawbackAssets(); + testVaultEscrowedMPT(); testAssetsMaximum(); testBug6_LimitBypassWithShares(); } From 9733ca8f912ecf20a934c5d7f53b651ac86b94dc Mon Sep 17 00:00:00 2001 From: Zhiyuan Wang <96991820+Kassaking7@users.noreply.github.com> Date: Mon, 6 Apr 2026 13:51:46 -0400 Subject: [PATCH 108/137] fix: Prevent deletion of MPTokens with active escrow (#6635) Co-authored-by: Bart --- src/libxrpl/ledger/helpers/MPTokenHelpers.cpp | 7 +- src/test/app/Vault_test.cpp | 99 +++++++++++++++++++ 2 files changed, 104 insertions(+), 2 deletions(-) diff --git a/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp b/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp index 31c1d543f5..eb688187d9 100644 --- a/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp +++ b/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp @@ -139,7 +139,9 @@ authorizeMPToken( { auto const mptokenKey = keylet::mptoken(mptIssuanceID, account); auto const sleMpt = view.peek(mptokenKey); - if (!sleMpt || (*sleMpt)[sfMPTAmount] != 0) + if (!sleMpt || (*sleMpt)[sfMPTAmount] != 0 || + (view.rules().enabled(fixSecurity3_1_3) && + (*sleMpt)[~sfLockedAmount].value_or(0) != 0)) return tecINTERNAL; // LCOV_EXCL_LINE if (!view.dirRemove( @@ -252,7 +254,8 @@ removeEmptyHolding( // balance, it can not just be deleted, because that will throw the issuance // accounting out of balance, so fail. Since this should be impossible // anyway, I'm not going to put any effort into it. - if (mptoken->at(sfMPTAmount) != 0) + if (mptoken->at(sfMPTAmount) != 0 || + (view.rules().enabled(fixSecurity3_1_3) && (*mptoken)[~sfLockedAmount].value_or(0) != 0)) return tecHAS_OBLIGATIONS; return authorizeMPToken( diff --git a/src/test/app/Vault_test.cpp b/src/test/app/Vault_test.cpp index 63341e7ea3..fd4cbd5334 100644 --- a/src/test/app/Vault_test.cpp +++ b/src/test/app/Vault_test.cpp @@ -5971,6 +5971,104 @@ class Vault_test : public beast::unit_test::suite } } + void + testRemoveEmptyHoldingLockedAmount() + { + testcase("removeEmptyHolding deletes MPToken with sfLockedAmount"); + using namespace test::jtx; + using namespace std::literals; + + auto const amendments = testable_amendments(); + auto runTest = [&](FeatureBitset f) { + Env env{*this, f}; + auto const baseFee = env.current()->fees().base; + + Account const issuer{"issuer"}; + Account const owner{"owner"}; + Account const depositor{"depositor"}; + Account const bob{"bob"}; + + env.fund(XRP(100000), issuer, owner, depositor, bob); + env.close(); + + Vault const vault{env}; + + // Create an MPT asset for the vault + MPTTester mptt{env, issuer, mptInitNoFund}; + mptt.create({.flags = tfMPTCanTransfer | tfMPTCanLock}); + PrettyAsset const asset = mptt.issuanceID(); + mptt.authorize({.account = owner}); + mptt.authorize({.account = depositor}); + env(pay(issuer, depositor, asset(1000))); + env.close(); + + // Create vault + auto [tx, keylet] = vault.create({.owner = owner, .asset = asset}); + env(tx); + env.close(); + + auto const vaultSle = env.le(keylet); + BEAST_EXPECT(vaultSle != nullptr); + auto const shareMptID = vaultSle->at(sfShareMPTID); + MPTIssue const shareIssue{shareMptID}; + + // Depositor deposits 1000 asset units into vault, receiving shares + env(vault.deposit({.depositor = depositor, .id = keylet.key, .amount = asset(1000)})); + env.close(); + + // Check depositor has shares + { + auto const sleMpt = env.le(keylet::mptoken(shareMptID, depositor)); + BEAST_EXPECT(sleMpt != nullptr); + BEAST_EXPECT(sleMpt->at(sfMPTAmount) == 1000); + } + + // Escrow 500 of those shares + env(escrow::create(depositor, bob, STAmount{shareIssue, 500}), + escrow::condition(escrow::cb1), + escrow::finish_time(env.now() + 1s), + fee(baseFee * 150), + ter(tesSUCCESS)); + env.close(); + + // Verify: sfMPTAmount=500, sfLockedAmount=500 + { + auto const sleMpt = env.le(keylet::mptoken(shareMptID, depositor)); + BEAST_EXPECT(sleMpt != nullptr); + BEAST_EXPECT(sleMpt->at(sfLockedAmount) == 500); + BEAST_EXPECT(sleMpt->at(sfMPTAmount) == 500); + } + + // Withdraw remaining spendable shares — triggers removeEmptyHolding + env(vault.withdraw({.depositor = depositor, .id = keylet.key, .amount = asset(500)}), + ter(tesSUCCESS)); + env.close(); + + auto const sleMptAfter = env.le(keylet::mptoken(shareMptID, depositor)); + if (!f[fixSecurity3_1_3]) + { + // Without the fix, removeEmptyHolding deletes the MPToken + // even though sfLockedAmount > 0, leaving the escrow's locked + // amount untracked. + BEAST_EXPECT(sleMptAfter == nullptr); + } + else + { + // With the fix, MPToken must still exist with sfLockedAmount > 0 + // and sfMPTAmount == 0 (all spendable shares withdrawn). + BEAST_EXPECT(sleMptAfter != nullptr); + if (sleMptAfter) + { + BEAST_EXPECT(sleMptAfter->at(sfLockedAmount) == 500); + BEAST_EXPECT(sleMptAfter->at(sfMPTAmount) == 0); + } + } + }; + + runTest(amendments - fixSecurity3_1_3); + runTest(amendments); + } + public: void run() override @@ -5993,6 +6091,7 @@ public: testVaultEscrowedMPT(); testAssetsMaximum(); testBug6_LimitBypassWithShares(); + testRemoveEmptyHoldingLockedAmount(); } }; From 7a7c993b153e87334c1f07f8aa32b804e19db455 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 6 Apr 2026 18:15:16 -0400 Subject: [PATCH 109/137] fix: Minor RPC fixes (#6730) --- API-CHANGELOG.md | 2 ++ src/test/rpc/Roles_test.cpp | 1 + src/xrpld/rpc/handlers/ledger/LedgerDiff.cpp | 2 +- src/xrpld/rpc/handlers/utility/Ping.cpp | 4 +++- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/API-CHANGELOG.md b/API-CHANGELOG.md index 64b61c2024..8e7fb2e4d4 100644 --- a/API-CHANGELOG.md +++ b/API-CHANGELOG.md @@ -38,6 +38,8 @@ This section contains changes targeting a future version. ### Bugfixes - Peer Crawler: The `port` field in `overlay.active[]` now consistently returns an integer instead of a string for outbound peers. [#6318](https://github.com/XRPLF/rippled/pull/6318) +- `ping`: The `ip` field is no longer returned as an empty string for proxied connections without a forwarded-for header. It is now omitted, consistent with the behavior for identified connections. [#6730](https://github.com/XRPLF/rippled/pull/6730) +- gRPC `GetLedgerDiff`: Fixed error message that incorrectly said "base ledger not validated" when the desired ledger was not validated. [#6730](https://github.com/XRPLF/rippled/pull/6730) ## XRP Ledger server version 3.1.0 diff --git a/src/test/rpc/Roles_test.cpp b/src/test/rpc/Roles_test.cpp index e3d90a9c56..314d0972d2 100644 --- a/src/test/rpc/Roles_test.cpp +++ b/src/test/rpc/Roles_test.cpp @@ -43,6 +43,7 @@ class Roles_test : public beast::unit_test::suite Env env{*this, envconfig(secure_gateway)}; BEAST_EXPECT(env.rpc("ping")["result"]["role"] == "proxied"); + BEAST_EXPECT(!env.rpc("ping")["result"].isMember("ip")); auto wsRes = makeWSClient(env.app().config())->invoke("ping")["result"]; BEAST_EXPECT(!wsRes.isMember("unlimited") || !wsRes["unlimited"].asBool()); diff --git a/src/xrpld/rpc/handlers/ledger/LedgerDiff.cpp b/src/xrpld/rpc/handlers/ledger/LedgerDiff.cpp index 56a4d97b94..97c4efcc7a 100644 --- a/src/xrpld/rpc/handlers/ledger/LedgerDiff.cpp +++ b/src/xrpld/rpc/handlers/ledger/LedgerDiff.cpp @@ -36,7 +36,7 @@ doLedgerDiffGrpc(RPC::GRPCContext& con std::dynamic_pointer_cast(desiredLedgerRv); if (!desiredLedger) { - grpc::Status const errorStatus{grpc::StatusCode::NOT_FOUND, "base ledger not validated"}; + grpc::Status const errorStatus{grpc::StatusCode::NOT_FOUND, "desired ledger not validated"}; return {response, errorStatus}; } diff --git a/src/xrpld/rpc/handlers/utility/Ping.cpp b/src/xrpld/rpc/handlers/utility/Ping.cpp index 4e9b18c4c9..695d90b964 100644 --- a/src/xrpld/rpc/handlers/utility/Ping.cpp +++ b/src/xrpld/rpc/handlers/utility/Ping.cpp @@ -27,7 +27,9 @@ doPing(RPC::JsonContext& context) break; case Role::PROXY: ret[jss::role] = "proxied"; - ret[jss::ip] = std::string{context.headers.forwardedFor}; + if (!context.headers.forwardedFor.empty()) + ret[jss::ip] = std::string{context.headers.forwardedFor}; + break; default:; } From bc24f2e21172e458db9dbe6693c208ae2de14bef Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 6 Apr 2026 18:36:32 -0400 Subject: [PATCH 110/137] refactor: Move more helper files into `libxrpl/ledger/helpers` (#6731) Co-authored-by: xrplf-ai-reviewer[bot] <266832837+xrplf-ai-reviewer[bot]@users.noreply.github.com> --- .../dex => ledger/helpers}/AMMHelpers.h | 0 .../dex => ledger/helpers}/AMMUtils.h | 0 .../helpers/DelegateHelpers.h} | 0 .../xrpl/ledger/helpers}/EscrowHelpers.h | 4 +-- include/xrpl/ledger/helpers/MPTokenHelpers.h | 7 +++++ .../helpers/NFTokenHelpers.h} | 2 +- .../ledger/helpers}/PaymentChannelHelpers.h | 0 .../helpers}/PermissionedDEXHelpers.h | 0 include/xrpl/tx/paths/AMMLiquidity.h | 4 +-- include/xrpl/tx/paths/detail/StrandFlow.h | 2 +- include/xrpl/tx/transactors/nft/NFTokenMint.h | 2 +- .../tx/transactors/token/MPTokenAuthorize.h | 7 ----- .../dex => ledger/helpers}/AMMHelpers.cpp | 2 +- .../dex => ledger/helpers}/AMMUtils.cpp | 4 +-- src/libxrpl/ledger/helpers/MPTokenHelpers.cpp | 26 +++++++++++++++++++ .../helpers/NFTokenHelpers.cpp} | 3 ++- .../helpers}/PaymentChannelHelpers.cpp | 3 +-- .../helpers}/PermissionedDEXHelpers.cpp | 2 +- src/libxrpl/tx/Transactor.cpp | 4 +-- src/libxrpl/tx/invariants/AMMInvariant.cpp | 4 +-- src/libxrpl/tx/invariants/NFTInvariant.cpp | 3 ++- src/libxrpl/tx/paths/BookStep.cpp | 2 +- src/libxrpl/tx/paths/OfferStream.cpp | 2 +- .../tx/transactors/account/AccountDelete.cpp | 2 +- .../tx/transactors/account/AccountSet.cpp | 2 +- .../tx/transactors/delegate/DelegateUtils.cpp | 2 +- src/libxrpl/tx/transactors/dex/AMMBid.cpp | 4 +-- .../tx/transactors/dex/AMMClawback.cpp | 4 +-- src/libxrpl/tx/transactors/dex/AMMCreate.cpp | 4 +-- src/libxrpl/tx/transactors/dex/AMMDelete.cpp | 2 +- src/libxrpl/tx/transactors/dex/AMMDeposit.cpp | 4 +-- src/libxrpl/tx/transactors/dex/AMMVote.cpp | 2 +- .../tx/transactors/dex/AMMWithdraw.cpp | 4 +-- .../tx/transactors/dex/OfferCreate.cpp | 2 +- .../tx/transactors/escrow/EscrowCancel.cpp | 3 +-- .../tx/transactors/escrow/EscrowFinish.cpp | 3 +-- .../tx/transactors/nft/NFTokenAcceptOffer.cpp | 2 +- .../tx/transactors/nft/NFTokenBurn.cpp | 2 +- .../tx/transactors/nft/NFTokenCancelOffer.cpp | 2 +- .../tx/transactors/nft/NFTokenCreateOffer.cpp | 2 +- .../tx/transactors/nft/NFTokenModify.cpp | 2 +- .../tx/transactors/payment/Payment.cpp | 4 +-- .../payment_channel/PaymentChannelClaim.cpp | 3 +-- .../payment_channel/PaymentChannelFund.cpp | 3 +-- .../tx/transactors/system/LedgerStateFix.cpp | 2 +- .../tx/transactors/token/MPTokenAuthorize.cpp | 26 ------------------- .../transactors/token/MPTokenIssuanceSet.cpp | 2 +- src/libxrpl/tx/transactors/token/TrustSet.cpp | 2 +- src/test/app/AMMCalc_test.cpp | 2 +- src/test/app/AMMClawback_test.cpp | 2 +- src/test/app/AMMExtended_test.cpp | 2 +- src/test/app/AMM_test.cpp | 4 +-- src/test/app/FixNFTokenPageLinks_test.cpp | 2 +- src/test/app/NFTokenAuth_test.cpp | 2 +- src/test/app/NFTokenBurn_test.cpp | 3 ++- src/test/app/NFTokenDir_test.cpp | 2 +- src/test/app/NFToken_test.cpp | 2 +- src/test/jtx/impl/AMM.cpp | 4 +-- src/xrpld/app/ledger/OrderBookDBImpl.cpp | 2 +- src/xrpld/rpc/detail/RPCHelpers.cpp | 2 +- .../rpc/handlers/account/AccountNFTs.cpp | 2 +- .../rpc/handlers/account/AccountObjects.cpp | 1 + src/xrpld/rpc/handlers/orderbook/AMMInfo.cpp | 2 +- 63 files changed, 102 insertions(+), 105 deletions(-) rename include/xrpl/{tx/transactors/dex => ledger/helpers}/AMMHelpers.h (100%) rename include/xrpl/{tx/transactors/dex => ledger/helpers}/AMMUtils.h (100%) rename include/xrpl/{tx/transactors/delegate/DelegateUtils.h => ledger/helpers/DelegateHelpers.h} (100%) rename {src/libxrpl/tx/transactors/escrow => include/xrpl/ledger/helpers}/EscrowHelpers.h (97%) rename include/xrpl/{tx/transactors/nft/NFTokenUtils.h => ledger/helpers/NFTokenHelpers.h} (99%) rename {src/libxrpl/tx/transactors/payment_channel => include/xrpl/ledger/helpers}/PaymentChannelHelpers.h (100%) rename include/xrpl/{tx/transactors/dex => ledger/helpers}/PermissionedDEXHelpers.h (100%) rename src/libxrpl/{tx/transactors/dex => ledger/helpers}/AMMHelpers.cpp (99%) rename src/libxrpl/{tx/transactors/dex => ledger/helpers}/AMMUtils.cpp (99%) rename src/libxrpl/{tx/transactors/nft/NFTokenUtils.cpp => ledger/helpers/NFTokenHelpers.cpp} (99%) rename src/libxrpl/{tx/transactors/payment_channel => ledger/helpers}/PaymentChannelHelpers.cpp (95%) rename src/libxrpl/{tx/transactors/dex => ledger/helpers}/PermissionedDEXHelpers.cpp (97%) diff --git a/include/xrpl/tx/transactors/dex/AMMHelpers.h b/include/xrpl/ledger/helpers/AMMHelpers.h similarity index 100% rename from include/xrpl/tx/transactors/dex/AMMHelpers.h rename to include/xrpl/ledger/helpers/AMMHelpers.h diff --git a/include/xrpl/tx/transactors/dex/AMMUtils.h b/include/xrpl/ledger/helpers/AMMUtils.h similarity index 100% rename from include/xrpl/tx/transactors/dex/AMMUtils.h rename to include/xrpl/ledger/helpers/AMMUtils.h diff --git a/include/xrpl/tx/transactors/delegate/DelegateUtils.h b/include/xrpl/ledger/helpers/DelegateHelpers.h similarity index 100% rename from include/xrpl/tx/transactors/delegate/DelegateUtils.h rename to include/xrpl/ledger/helpers/DelegateHelpers.h diff --git a/src/libxrpl/tx/transactors/escrow/EscrowHelpers.h b/include/xrpl/ledger/helpers/EscrowHelpers.h similarity index 97% rename from src/libxrpl/tx/transactors/escrow/EscrowHelpers.h rename to include/xrpl/ledger/helpers/EscrowHelpers.h index 8991fb06cc..70d780da3b 100644 --- a/src/libxrpl/tx/transactors/escrow/EscrowHelpers.h +++ b/include/xrpl/ledger/helpers/EscrowHelpers.h @@ -10,7 +10,6 @@ #include #include #include -#include namespace xrpl { @@ -183,8 +182,7 @@ escrowUnlockApplyHelper( return tecINSUFFICIENT_RESERVE; } - if (auto const ter = MPTokenAuthorize::createMPToken(view, mptID, receiver, 0); - !isTesSuccess(ter)) + if (auto const ter = createMPToken(view, mptID, receiver, 0); !isTesSuccess(ter)) { return ter; // LCOV_EXCL_LINE } diff --git a/include/xrpl/ledger/helpers/MPTokenHelpers.h b/include/xrpl/ledger/helpers/MPTokenHelpers.h index ab487280b9..9f7d639285 100644 --- a/include/xrpl/ledger/helpers/MPTokenHelpers.h +++ b/include/xrpl/ledger/helpers/MPTokenHelpers.h @@ -157,4 +157,11 @@ rippleUnlockEscrowMPT( STAmount const& grossAmount, beast::Journal j); +TER +createMPToken( + ApplyView& view, + MPTID const& mptIssuanceID, + AccountID const& account, + std::uint32_t const flags); + } // namespace xrpl diff --git a/include/xrpl/tx/transactors/nft/NFTokenUtils.h b/include/xrpl/ledger/helpers/NFTokenHelpers.h similarity index 99% rename from include/xrpl/tx/transactors/nft/NFTokenUtils.h rename to include/xrpl/ledger/helpers/NFTokenHelpers.h index 33aab068c6..d8dac4caaf 100644 --- a/include/xrpl/tx/transactors/nft/NFTokenUtils.h +++ b/include/xrpl/ledger/helpers/NFTokenHelpers.h @@ -1,12 +1,12 @@ #pragma once +#include #include #include #include #include #include #include -#include namespace xrpl { diff --git a/src/libxrpl/tx/transactors/payment_channel/PaymentChannelHelpers.h b/include/xrpl/ledger/helpers/PaymentChannelHelpers.h similarity index 100% rename from src/libxrpl/tx/transactors/payment_channel/PaymentChannelHelpers.h rename to include/xrpl/ledger/helpers/PaymentChannelHelpers.h diff --git a/include/xrpl/tx/transactors/dex/PermissionedDEXHelpers.h b/include/xrpl/ledger/helpers/PermissionedDEXHelpers.h similarity index 100% rename from include/xrpl/tx/transactors/dex/PermissionedDEXHelpers.h rename to include/xrpl/ledger/helpers/PermissionedDEXHelpers.h diff --git a/include/xrpl/tx/paths/AMMLiquidity.h b/include/xrpl/tx/paths/AMMLiquidity.h index 71b8dbb12a..87d6ffe32f 100644 --- a/include/xrpl/tx/paths/AMMLiquidity.h +++ b/include/xrpl/tx/paths/AMMLiquidity.h @@ -3,10 +3,10 @@ #include #include #include +#include +#include #include #include -#include -#include namespace xrpl { diff --git a/include/xrpl/tx/paths/detail/StrandFlow.h b/include/xrpl/tx/paths/detail/StrandFlow.h index fba631c695..21cf04dc07 100644 --- a/include/xrpl/tx/paths/detail/StrandFlow.h +++ b/include/xrpl/tx/paths/detail/StrandFlow.h @@ -2,6 +2,7 @@ #include #include +#include #include #include #include @@ -13,7 +14,6 @@ #include #include #include -#include #include diff --git a/include/xrpl/tx/transactors/nft/NFTokenMint.h b/include/xrpl/tx/transactors/nft/NFTokenMint.h index d4eeba2bf0..d04f88ed3b 100644 --- a/include/xrpl/tx/transactors/nft/NFTokenMint.h +++ b/include/xrpl/tx/transactors/nft/NFTokenMint.h @@ -1,8 +1,8 @@ #pragma once +#include #include #include -#include namespace xrpl { diff --git a/include/xrpl/tx/transactors/token/MPTokenAuthorize.h b/include/xrpl/tx/transactors/token/MPTokenAuthorize.h index b6a34d4f14..3210608e73 100644 --- a/include/xrpl/tx/transactors/token/MPTokenAuthorize.h +++ b/include/xrpl/tx/transactors/token/MPTokenAuthorize.h @@ -31,13 +31,6 @@ public: static TER preclaim(PreclaimContext const& ctx); - static TER - createMPToken( - ApplyView& view, - MPTID const& mptIssuanceID, - AccountID const& account, - std::uint32_t const flags); - TER doApply() override; }; diff --git a/src/libxrpl/tx/transactors/dex/AMMHelpers.cpp b/src/libxrpl/ledger/helpers/AMMHelpers.cpp similarity index 99% rename from src/libxrpl/tx/transactors/dex/AMMHelpers.cpp rename to src/libxrpl/ledger/helpers/AMMHelpers.cpp index 386608229b..c65bb1ff11 100644 --- a/src/libxrpl/tx/transactors/dex/AMMHelpers.cpp +++ b/src/libxrpl/ledger/helpers/AMMHelpers.cpp @@ -1,4 +1,4 @@ -#include +#include namespace xrpl { diff --git a/src/libxrpl/tx/transactors/dex/AMMUtils.cpp b/src/libxrpl/ledger/helpers/AMMUtils.cpp similarity index 99% rename from src/libxrpl/tx/transactors/dex/AMMUtils.cpp rename to src/libxrpl/ledger/helpers/AMMUtils.cpp index 91891ce86f..4b71a2e438 100644 --- a/src/libxrpl/tx/transactors/dex/AMMUtils.cpp +++ b/src/libxrpl/ledger/helpers/AMMUtils.cpp @@ -1,10 +1,10 @@ #include #include #include +#include +#include #include #include -#include -#include namespace xrpl { diff --git a/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp b/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp index eb688187d9..90165e3d16 100644 --- a/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp +++ b/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp @@ -752,4 +752,30 @@ rippleUnlockEscrowMPT( return tesSUCCESS; } +TER +createMPToken( + ApplyView& view, + MPTID const& mptIssuanceID, + AccountID const& account, + std::uint32_t const flags) +{ + auto const mptokenKey = keylet::mptoken(mptIssuanceID, account); + + auto const ownerNode = + view.dirInsert(keylet::ownerDir(account), mptokenKey, describeOwnerDir(account)); + + if (!ownerNode) + return tecDIR_FULL; // LCOV_EXCL_LINE + + auto mptoken = std::make_shared(mptokenKey); + (*mptoken)[sfAccount] = account; + (*mptoken)[sfMPTokenIssuanceID] = mptIssuanceID; + (*mptoken)[sfFlags] = flags; + (*mptoken)[sfOwnerNode] = *ownerNode; + + view.insert(mptoken); + + return tesSUCCESS; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/nft/NFTokenUtils.cpp b/src/libxrpl/ledger/helpers/NFTokenHelpers.cpp similarity index 99% rename from src/libxrpl/tx/transactors/nft/NFTokenUtils.cpp rename to src/libxrpl/ledger/helpers/NFTokenHelpers.cpp index 3368887d94..d6921b5c88 100644 --- a/src/libxrpl/tx/transactors/nft/NFTokenUtils.cpp +++ b/src/libxrpl/ledger/helpers/NFTokenHelpers.cpp @@ -1,15 +1,16 @@ +#include #include #include #include #include #include +#include #include #include #include #include #include #include -#include #include #include diff --git a/src/libxrpl/tx/transactors/payment_channel/PaymentChannelHelpers.cpp b/src/libxrpl/ledger/helpers/PaymentChannelHelpers.cpp similarity index 95% rename from src/libxrpl/tx/transactors/payment_channel/PaymentChannelHelpers.cpp rename to src/libxrpl/ledger/helpers/PaymentChannelHelpers.cpp index 176b920e6b..a9fab07194 100644 --- a/src/libxrpl/tx/transactors/payment_channel/PaymentChannelHelpers.cpp +++ b/src/libxrpl/ledger/helpers/PaymentChannelHelpers.cpp @@ -1,10 +1,9 @@ #include #include #include +#include #include -#include - namespace xrpl { TER diff --git a/src/libxrpl/tx/transactors/dex/PermissionedDEXHelpers.cpp b/src/libxrpl/ledger/helpers/PermissionedDEXHelpers.cpp similarity index 97% rename from src/libxrpl/tx/transactors/dex/PermissionedDEXHelpers.cpp rename to src/libxrpl/ledger/helpers/PermissionedDEXHelpers.cpp index d857795e39..4b2bde19f8 100644 --- a/src/libxrpl/tx/transactors/dex/PermissionedDEXHelpers.cpp +++ b/src/libxrpl/ledger/helpers/PermissionedDEXHelpers.cpp @@ -1,5 +1,5 @@ #include -#include +#include namespace xrpl { namespace permissioned_dex { diff --git a/src/libxrpl/tx/Transactor.cpp b/src/libxrpl/tx/Transactor.cpp index 8847174122..57d2207336 100644 --- a/src/libxrpl/tx/Transactor.cpp +++ b/src/libxrpl/tx/Transactor.cpp @@ -4,6 +4,8 @@ #include #include #include +#include +#include #include #include #include @@ -16,8 +18,6 @@ #include #include #include -#include -#include namespace xrpl { diff --git a/src/libxrpl/tx/invariants/AMMInvariant.cpp b/src/libxrpl/tx/invariants/AMMInvariant.cpp index 96df97016f..0be4bedc07 100644 --- a/src/libxrpl/tx/invariants/AMMInvariant.cpp +++ b/src/libxrpl/tx/invariants/AMMInvariant.cpp @@ -2,9 +2,9 @@ // #include #include +#include +#include #include -#include -#include namespace xrpl { diff --git a/src/libxrpl/tx/invariants/NFTInvariant.cpp b/src/libxrpl/tx/invariants/NFTInvariant.cpp index cf00dc9290..e37e55e709 100644 --- a/src/libxrpl/tx/invariants/NFTInvariant.cpp +++ b/src/libxrpl/tx/invariants/NFTInvariant.cpp @@ -2,11 +2,12 @@ // #include #include +#include #include #include #include +#include #include -#include namespace xrpl { diff --git a/src/libxrpl/tx/paths/BookStep.cpp b/src/libxrpl/tx/paths/BookStep.cpp index ddba0c1ae9..b17ccf1ea5 100644 --- a/src/libxrpl/tx/paths/BookStep.cpp +++ b/src/libxrpl/tx/paths/BookStep.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -13,7 +14,6 @@ #include #include #include -#include #include diff --git a/src/libxrpl/tx/paths/OfferStream.cpp b/src/libxrpl/tx/paths/OfferStream.cpp index acb2df1429..411b5cb05b 100644 --- a/src/libxrpl/tx/paths/OfferStream.cpp +++ b/src/libxrpl/tx/paths/OfferStream.cpp @@ -1,11 +1,11 @@ #include #include #include +#include #include #include #include #include -#include namespace xrpl { diff --git a/src/libxrpl/tx/transactors/account/AccountDelete.cpp b/src/libxrpl/tx/transactors/account/AccountDelete.cpp index 815b314f9f..c7f71a6cf4 100644 --- a/src/libxrpl/tx/transactors/account/AccountDelete.cpp +++ b/src/libxrpl/tx/transactors/account/AccountDelete.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -13,7 +14,6 @@ #include #include #include -#include #include #include diff --git a/src/libxrpl/tx/transactors/account/AccountSet.cpp b/src/libxrpl/tx/transactors/account/AccountSet.cpp index af3edb5768..093019766c 100644 --- a/src/libxrpl/tx/transactors/account/AccountSet.cpp +++ b/src/libxrpl/tx/transactors/account/AccountSet.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -7,7 +8,6 @@ #include #include #include -#include namespace xrpl { diff --git a/src/libxrpl/tx/transactors/delegate/DelegateUtils.cpp b/src/libxrpl/tx/transactors/delegate/DelegateUtils.cpp index d9d74a1212..862fcf280c 100644 --- a/src/libxrpl/tx/transactors/delegate/DelegateUtils.cpp +++ b/src/libxrpl/tx/transactors/delegate/DelegateUtils.cpp @@ -1,5 +1,5 @@ +#include #include -#include namespace xrpl { NotTEC diff --git a/src/libxrpl/tx/transactors/dex/AMMBid.cpp b/src/libxrpl/tx/transactors/dex/AMMBid.cpp index f5b9445ead..805b5073e4 100644 --- a/src/libxrpl/tx/transactors/dex/AMMBid.cpp +++ b/src/libxrpl/tx/transactors/dex/AMMBid.cpp @@ -1,12 +1,12 @@ #include #include +#include +#include #include #include #include #include #include -#include -#include namespace xrpl { diff --git a/src/libxrpl/tx/transactors/dex/AMMClawback.cpp b/src/libxrpl/tx/transactors/dex/AMMClawback.cpp index b8f4fe4b1b..5291a1b25b 100644 --- a/src/libxrpl/tx/transactors/dex/AMMClawback.cpp +++ b/src/libxrpl/tx/transactors/dex/AMMClawback.cpp @@ -1,12 +1,12 @@ #include #include +#include +#include #include #include #include #include #include -#include -#include #include #include diff --git a/src/libxrpl/tx/transactors/dex/AMMCreate.cpp b/src/libxrpl/tx/transactors/dex/AMMCreate.cpp index 069fadf103..6dee6dfd2a 100644 --- a/src/libxrpl/tx/transactors/dex/AMMCreate.cpp +++ b/src/libxrpl/tx/transactors/dex/AMMCreate.cpp @@ -1,14 +1,14 @@ #include #include #include +#include +#include #include #include #include #include #include #include -#include -#include namespace xrpl { diff --git a/src/libxrpl/tx/transactors/dex/AMMDelete.cpp b/src/libxrpl/tx/transactors/dex/AMMDelete.cpp index 0fbaa4e23e..41e88e6a07 100644 --- a/src/libxrpl/tx/transactors/dex/AMMDelete.cpp +++ b/src/libxrpl/tx/transactors/dex/AMMDelete.cpp @@ -1,9 +1,9 @@ #include +#include #include #include #include #include -#include namespace xrpl { diff --git a/src/libxrpl/tx/transactors/dex/AMMDeposit.cpp b/src/libxrpl/tx/transactors/dex/AMMDeposit.cpp index eb3e61e80b..9a2955901b 100644 --- a/src/libxrpl/tx/transactors/dex/AMMDeposit.cpp +++ b/src/libxrpl/tx/transactors/dex/AMMDeposit.cpp @@ -1,12 +1,12 @@ #include #include +#include +#include #include #include #include #include #include -#include -#include namespace xrpl { diff --git a/src/libxrpl/tx/transactors/dex/AMMVote.cpp b/src/libxrpl/tx/transactors/dex/AMMVote.cpp index 2096eca0f0..e1b3afcd08 100644 --- a/src/libxrpl/tx/transactors/dex/AMMVote.cpp +++ b/src/libxrpl/tx/transactors/dex/AMMVote.cpp @@ -1,8 +1,8 @@ #include +#include #include #include #include -#include #include namespace xrpl { diff --git a/src/libxrpl/tx/transactors/dex/AMMWithdraw.cpp b/src/libxrpl/tx/transactors/dex/AMMWithdraw.cpp index 7c87d53ea0..0c6419f842 100644 --- a/src/libxrpl/tx/transactors/dex/AMMWithdraw.cpp +++ b/src/libxrpl/tx/transactors/dex/AMMWithdraw.cpp @@ -1,9 +1,9 @@ #include #include +#include +#include #include #include -#include -#include #include namespace xrpl { diff --git a/src/libxrpl/tx/transactors/dex/OfferCreate.cpp b/src/libxrpl/tx/transactors/dex/OfferCreate.cpp index 20524f73ae..5d98e3625e 100644 --- a/src/libxrpl/tx/transactors/dex/OfferCreate.cpp +++ b/src/libxrpl/tx/transactors/dex/OfferCreate.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -13,7 +14,6 @@ #include #include #include -#include namespace xrpl { TxConsequences diff --git a/src/libxrpl/tx/transactors/escrow/EscrowCancel.cpp b/src/libxrpl/tx/transactors/escrow/EscrowCancel.cpp index e47f008357..cd024a076d 100644 --- a/src/libxrpl/tx/transactors/escrow/EscrowCancel.cpp +++ b/src/libxrpl/tx/transactors/escrow/EscrowCancel.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -9,8 +10,6 @@ #include #include -#include - namespace xrpl { NotTEC diff --git a/src/libxrpl/tx/transactors/escrow/EscrowFinish.cpp b/src/libxrpl/tx/transactors/escrow/EscrowFinish.cpp index e05ba87bbb..5c28fa5dd3 100644 --- a/src/libxrpl/tx/transactors/escrow/EscrowFinish.cpp +++ b/src/libxrpl/tx/transactors/escrow/EscrowFinish.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -15,8 +16,6 @@ #include #include -#include - namespace xrpl { // During an EscrowFinish, the transaction must specify both diff --git a/src/libxrpl/tx/transactors/nft/NFTokenAcceptOffer.cpp b/src/libxrpl/tx/transactors/nft/NFTokenAcceptOffer.cpp index e061dbe7ec..fda79c93b6 100644 --- a/src/libxrpl/tx/transactors/nft/NFTokenAcceptOffer.cpp +++ b/src/libxrpl/tx/transactors/nft/NFTokenAcceptOffer.cpp @@ -1,10 +1,10 @@ #include +#include #include #include #include #include #include -#include namespace xrpl { diff --git a/src/libxrpl/tx/transactors/nft/NFTokenBurn.cpp b/src/libxrpl/tx/transactors/nft/NFTokenBurn.cpp index 5a31e35470..1653da3ea4 100644 --- a/src/libxrpl/tx/transactors/nft/NFTokenBurn.cpp +++ b/src/libxrpl/tx/transactors/nft/NFTokenBurn.cpp @@ -1,8 +1,8 @@ +#include #include #include #include #include -#include namespace xrpl { diff --git a/src/libxrpl/tx/transactors/nft/NFTokenCancelOffer.cpp b/src/libxrpl/tx/transactors/nft/NFTokenCancelOffer.cpp index df0561e076..699714e0ac 100644 --- a/src/libxrpl/tx/transactors/nft/NFTokenCancelOffer.cpp +++ b/src/libxrpl/tx/transactors/nft/NFTokenCancelOffer.cpp @@ -1,8 +1,8 @@ #include +#include #include #include #include -#include #include diff --git a/src/libxrpl/tx/transactors/nft/NFTokenCreateOffer.cpp b/src/libxrpl/tx/transactors/nft/NFTokenCreateOffer.cpp index f5fdc89550..19bf34c560 100644 --- a/src/libxrpl/tx/transactors/nft/NFTokenCreateOffer.cpp +++ b/src/libxrpl/tx/transactors/nft/NFTokenCreateOffer.cpp @@ -1,8 +1,8 @@ #include +#include #include #include #include -#include namespace xrpl { diff --git a/src/libxrpl/tx/transactors/nft/NFTokenModify.cpp b/src/libxrpl/tx/transactors/nft/NFTokenModify.cpp index 8ccd4e9552..79c019de96 100644 --- a/src/libxrpl/tx/transactors/nft/NFTokenModify.cpp +++ b/src/libxrpl/tx/transactors/nft/NFTokenModify.cpp @@ -1,7 +1,7 @@ +#include #include #include #include -#include namespace xrpl { diff --git a/src/libxrpl/tx/transactors/payment/Payment.cpp b/src/libxrpl/tx/transactors/payment/Payment.cpp index bf8a0caa4b..c9e2da0d25 100644 --- a/src/libxrpl/tx/transactors/payment/Payment.cpp +++ b/src/libxrpl/tx/transactors/payment/Payment.cpp @@ -1,7 +1,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -9,8 +11,6 @@ #include #include #include -#include -#include #include namespace xrpl { diff --git a/src/libxrpl/tx/transactors/payment_channel/PaymentChannelClaim.cpp b/src/libxrpl/tx/transactors/payment_channel/PaymentChannelClaim.cpp index 91de511883..e53e32c844 100644 --- a/src/libxrpl/tx/transactors/payment_channel/PaymentChannelClaim.cpp +++ b/src/libxrpl/tx/transactors/payment_channel/PaymentChannelClaim.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -8,8 +9,6 @@ #include #include -#include - namespace xrpl { bool diff --git a/src/libxrpl/tx/transactors/payment_channel/PaymentChannelFund.cpp b/src/libxrpl/tx/transactors/payment_channel/PaymentChannelFund.cpp index c42e8545f5..f8e2399bb1 100644 --- a/src/libxrpl/tx/transactors/payment_channel/PaymentChannelFund.cpp +++ b/src/libxrpl/tx/transactors/payment_channel/PaymentChannelFund.cpp @@ -1,10 +1,9 @@ #include #include +#include #include #include -#include - namespace xrpl { TxConsequences diff --git a/src/libxrpl/tx/transactors/system/LedgerStateFix.cpp b/src/libxrpl/tx/transactors/system/LedgerStateFix.cpp index 0ce0720ba0..321e472aa5 100644 --- a/src/libxrpl/tx/transactors/system/LedgerStateFix.cpp +++ b/src/libxrpl/tx/transactors/system/LedgerStateFix.cpp @@ -1,8 +1,8 @@ #include +#include #include #include #include -#include #include namespace xrpl { diff --git a/src/libxrpl/tx/transactors/token/MPTokenAuthorize.cpp b/src/libxrpl/tx/transactors/token/MPTokenAuthorize.cpp index 3ddc6d2c05..3519ad0db1 100644 --- a/src/libxrpl/tx/transactors/token/MPTokenAuthorize.cpp +++ b/src/libxrpl/tx/transactors/token/MPTokenAuthorize.cpp @@ -132,32 +132,6 @@ MPTokenAuthorize::preclaim(PreclaimContext const& ctx) return tesSUCCESS; } -TER -MPTokenAuthorize::createMPToken( - ApplyView& view, - MPTID const& mptIssuanceID, - AccountID const& account, - std::uint32_t const flags) -{ - auto const mptokenKey = keylet::mptoken(mptIssuanceID, account); - - auto const ownerNode = - view.dirInsert(keylet::ownerDir(account), mptokenKey, describeOwnerDir(account)); - - if (!ownerNode) - return tecDIR_FULL; // LCOV_EXCL_LINE - - auto mptoken = std::make_shared(mptokenKey); - (*mptoken)[sfAccount] = account; - (*mptoken)[sfMPTokenIssuanceID] = mptIssuanceID; - (*mptoken)[sfFlags] = flags; - (*mptoken)[sfOwnerNode] = *ownerNode; - - view.insert(mptoken); - - return tesSUCCESS; -} - TER MPTokenAuthorize::doApply() { diff --git a/src/libxrpl/tx/transactors/token/MPTokenIssuanceSet.cpp b/src/libxrpl/tx/transactors/token/MPTokenIssuanceSet.cpp index fc09a53ae1..67e0d9077d 100644 --- a/src/libxrpl/tx/transactors/token/MPTokenIssuanceSet.cpp +++ b/src/libxrpl/tx/transactors/token/MPTokenIssuanceSet.cpp @@ -1,7 +1,7 @@ +#include #include #include #include -#include #include namespace xrpl { diff --git a/src/libxrpl/tx/transactors/token/TrustSet.cpp b/src/libxrpl/tx/transactors/token/TrustSet.cpp index feefa6a7ac..7c208c5855 100644 --- a/src/libxrpl/tx/transactors/token/TrustSet.cpp +++ b/src/libxrpl/tx/transactors/token/TrustSet.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -7,7 +8,6 @@ #include #include #include -#include #include namespace { diff --git a/src/test/app/AMMCalc_test.cpp b/src/test/app/AMMCalc_test.cpp index c3091a166d..021cf4bf46 100644 --- a/src/test/app/AMMCalc_test.cpp +++ b/src/test/app/AMMCalc_test.cpp @@ -1,7 +1,7 @@ #include +#include #include -#include #include diff --git a/src/test/app/AMMClawback_test.cpp b/src/test/app/AMMClawback_test.cpp index 245ee38ac2..a0def59c92 100644 --- a/src/test/app/AMMClawback_test.cpp +++ b/src/test/app/AMMClawback_test.cpp @@ -2,8 +2,8 @@ #include #include +#include #include -#include namespace xrpl { namespace test { diff --git a/src/test/app/AMMExtended_test.cpp b/src/test/app/AMMExtended_test.cpp index cc63f3d124..281ceafd19 100644 --- a/src/test/app/AMMExtended_test.cpp +++ b/src/test/app/AMMExtended_test.cpp @@ -6,13 +6,13 @@ #include #include +#include #include #include #include #include #include #include -#include #include #include diff --git a/src/test/app/AMM_test.cpp b/src/test/app/AMM_test.cpp index c19eb971a7..75b29fb79d 100644 --- a/src/test/app/AMM_test.cpp +++ b/src/test/app/AMM_test.cpp @@ -7,14 +7,14 @@ #include #include +#include +#include #include #include #include #include #include #include -#include -#include #include diff --git a/src/test/app/FixNFTokenPageLinks_test.cpp b/src/test/app/FixNFTokenPageLinks_test.cpp index 25366534cd..e5ecdf2639 100644 --- a/src/test/app/FixNFTokenPageLinks_test.cpp +++ b/src/test/app/FixNFTokenPageLinks_test.cpp @@ -1,9 +1,9 @@ #include +#include #include #include #include -#include namespace xrpl { diff --git a/src/test/app/NFTokenAuth_test.cpp b/src/test/app/NFTokenAuth_test.cpp index 0e3fb24305..0c044fc009 100644 --- a/src/test/app/NFTokenAuth_test.cpp +++ b/src/test/app/NFTokenAuth_test.cpp @@ -1,6 +1,6 @@ #include -#include +#include namespace xrpl { diff --git a/src/test/app/NFTokenBurn_test.cpp b/src/test/app/NFTokenBurn_test.cpp index cd0df42c03..99b1832466 100644 --- a/src/test/app/NFTokenBurn_test.cpp +++ b/src/test/app/NFTokenBurn_test.cpp @@ -1,8 +1,9 @@ #include +#include #include #include -#include +#include #include diff --git a/src/test/app/NFTokenDir_test.cpp b/src/test/app/NFTokenDir_test.cpp index 78765cb6c0..6ed5912034 100644 --- a/src/test/app/NFTokenDir_test.cpp +++ b/src/test/app/NFTokenDir_test.cpp @@ -1,9 +1,9 @@ #include +#include #include #include #include -#include #include diff --git a/src/test/app/NFToken_test.cpp b/src/test/app/NFToken_test.cpp index 0d391147a8..abbd5ba8e1 100644 --- a/src/test/app/NFToken_test.cpp +++ b/src/test/app/NFToken_test.cpp @@ -1,9 +1,9 @@ #include #include +#include #include #include -#include #include diff --git a/src/test/jtx/impl/AMM.cpp b/src/test/jtx/impl/AMM.cpp index fe8fb8c443..b06353a30d 100644 --- a/src/test/jtx/impl/AMM.cpp +++ b/src/test/jtx/impl/AMM.cpp @@ -2,12 +2,12 @@ #include #include +#include +#include #include #include #include #include -#include -#include namespace xrpl { namespace test { diff --git a/src/xrpld/app/ledger/OrderBookDBImpl.cpp b/src/xrpld/app/ledger/OrderBookDBImpl.cpp index ffd8499aba..add9c7eea9 100644 --- a/src/xrpld/app/ledger/OrderBookDBImpl.cpp +++ b/src/xrpld/app/ledger/OrderBookDBImpl.cpp @@ -2,9 +2,9 @@ #include #include +#include #include #include -#include namespace xrpl { diff --git a/src/xrpld/rpc/detail/RPCHelpers.cpp b/src/xrpld/rpc/detail/RPCHelpers.cpp index b4a0685bd6..120479ded8 100644 --- a/src/xrpld/rpc/detail/RPCHelpers.cpp +++ b/src/xrpld/rpc/detail/RPCHelpers.cpp @@ -5,12 +5,12 @@ #include #include +#include #include #include #include #include #include -#include #include #include diff --git a/src/xrpld/rpc/handlers/account/AccountNFTs.cpp b/src/xrpld/rpc/handlers/account/AccountNFTs.cpp index b879968e4e..e1ead76e85 100644 --- a/src/xrpld/rpc/handlers/account/AccountNFTs.cpp +++ b/src/xrpld/rpc/handlers/account/AccountNFTs.cpp @@ -4,13 +4,13 @@ #include #include +#include #include #include #include #include #include #include -#include namespace xrpl { diff --git a/src/xrpld/rpc/handlers/account/AccountObjects.cpp b/src/xrpld/rpc/handlers/account/AccountObjects.cpp index c09920f4a6..2e8462de2d 100644 --- a/src/xrpld/rpc/handlers/account/AccountObjects.cpp +++ b/src/xrpld/rpc/handlers/account/AccountObjects.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include #include diff --git a/src/xrpld/rpc/handlers/orderbook/AMMInfo.cpp b/src/xrpld/rpc/handlers/orderbook/AMMInfo.cpp index 9204f48907..cdd70a5cd8 100644 --- a/src/xrpld/rpc/handlers/orderbook/AMMInfo.cpp +++ b/src/xrpld/rpc/handlers/orderbook/AMMInfo.cpp @@ -5,9 +5,9 @@ #include #include #include +#include #include #include -#include #include From 46e88dc7328743964b2dc41e10a2958748584647 Mon Sep 17 00:00:00 2001 From: Bart Date: Tue, 7 Apr 2026 09:00:17 -0400 Subject: [PATCH 111/137] refactor: Rename non-functional uses of `ripple(d)` to `xrpl(d)` (#6676) Co-authored-by: Bart <11445373+bthomee@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/feature_request.md | 4 +- .github/scripts/levelization/README.md | 12 +-- .github/scripts/rename/README.md | 3 + .github/scripts/rename/binary.sh | 3 +- .github/scripts/rename/cmake.sh | 2 +- .github/scripts/rename/config.sh | 5 +- .github/scripts/rename/copyright.sh | 2 +- .github/scripts/rename/docs.sh | 96 ++++++++++++++++++ .github/scripts/rename/namespace.sh | 5 +- .github/scripts/strategy-matrix/generate.py | 2 +- .github/workflows/reusable-check-rename.yml | 2 + API-CHANGELOG.md | 10 +- API-VERSION-2.md | 2 +- API-VERSION-3.md | 2 +- BUILD.md | 4 +- CONTRIBUTING.md | 2 +- README.md | 22 ++--- SECURITY.md | 6 +- cfg/validators-example.txt | 8 +- cfg/xrpld-example.cfg | 18 ++-- docs/0001-negative-unl/README.md | 6 +- .../negativeUNLSqDiagram.puml | 2 +- docs/Docker.md | 6 +- docs/Doxyfile | 2 +- docs/HeapProfiling.md | 14 +-- docs/README.md | 61 ------------ docs/build/depend.md | 8 +- docs/build/environment.md | 2 +- docs/build/install.md | 58 +++++------ docs/build/sanitizers.md | 6 +- docs/consensus.md | 16 +-- external/README.md | 2 +- external/antithesis-sdk/CMakeLists.txt | 4 +- include/xrpl/basics/CountedObject.h | 2 +- include/xrpl/basics/IntrusivePointer.h | 2 +- include/xrpl/basics/IntrusiveRefCounts.h | 2 +- include/xrpl/basics/README.md | 4 +- include/xrpl/basics/UptimeClock.h | 2 +- include/xrpl/basics/random.h | 4 +- include/xrpl/ledger/LedgerTiming.h | 6 +- include/xrpl/ledger/View.h | 4 +- include/xrpl/ledger/helpers/EscrowHelpers.h | 4 +- include/xrpl/ledger/helpers/MPTokenHelpers.h | 4 +- include/xrpl/ledger/helpers/TokenHelpers.h | 6 +- include/xrpl/nodestore/README.md | 8 +- include/xrpl/proto/org/xrpl/rpc/v1/README.md | 6 +- include/xrpl/proto/xrpl.proto | 2 +- include/xrpl/protocol/AccountID.h | 2 +- include/xrpl/protocol/BuildInfo.h | 14 +-- include/xrpl/protocol/ErrorCodes.h | 2 +- include/xrpl/protocol/Feature.h | 4 +- include/xrpl/protocol/PublicKey.h | 2 +- include/xrpl/protocol/Quality.h | 2 +- include/xrpl/protocol/README.md | 4 +- include/xrpl/protocol/STAccount.h | 2 +- include/xrpl/protocol/SecretKey.h | 2 +- include/xrpl/protocol/Seed.h | 2 +- include/xrpl/protocol/Units.h | 2 +- .../xrpl/protocol/detail/ledger_entries.macro | 2 +- include/xrpl/protocol/digest.h | 2 +- include/xrpl/protocol/jss.h | 2 +- include/xrpl/resource/README.md | 4 +- include/xrpl/server/Manifest.h | 8 +- include/xrpl/server/NetworkOPs.h | 4 +- include/xrpl/shamap/README.md | 2 +- include/xrpl/tx/paths/detail/StrandFlow.h | 2 +- sanitizers/suppressions/tsan.supp | 6 +- sanitizers/suppressions/ubsan.supp | 4 +- src/libxrpl/basics/UptimeClock.cpp | 8 +- src/libxrpl/ledger/helpers/MPTokenHelpers.cpp | 56 +++++------ src/libxrpl/ledger/helpers/TokenHelpers.cpp | 97 ++++++++++--------- src/libxrpl/protocol/BuildInfo.cpp | 4 +- src/libxrpl/protocol/NFTokenID.cpp | 2 +- src/libxrpl/server/Vacuum.cpp | 4 +- src/libxrpl/tx/applySteps.cpp | 1 - src/libxrpl/tx/invariants/FreezeInvariant.cpp | 2 +- src/libxrpl/tx/paths/DirectStep.cpp | 8 +- .../tx/transactors/dex/AMMClawback.cpp | 4 +- .../tx/transactors/dex/OfferCreate.cpp | 2 +- .../tx/transactors/escrow/EscrowCreate.cpp | 5 +- .../tx/transactors/payment/Payment.cpp | 2 +- src/libxrpl/tx/transactors/token/Clawback.cpp | 4 +- src/libxrpl/tx/transactors/token/TrustSet.cpp | 2 +- src/test/README.md | 4 +- src/test/app/Credentials_test.cpp | 4 +- src/test/app/DepositAuth_test.cpp | 2 +- src/test/app/LedgerReplay_test.cpp | 8 +- src/test/app/MPToken_test.cpp | 2 +- src/test/app/Offer_test.cpp | 3 +- src/test/app/ValidatorSite_test.cpp | 2 +- src/test/core/Config_test.cpp | 4 +- src/test/csf/README.md | 2 +- src/test/csf/Validation.h | 2 +- src/test/jtx/AbstractClient.h | 4 +- src/test/jtx/Oracle.h | 2 +- src/test/jtx/TrustedPublisherServer.h | 4 +- src/test/jtx/impl/Oracle.cpp | 2 +- src/test/jtx/utility.h | 2 +- src/test/ledger/PaymentSandbox_test.cpp | 10 +- src/test/nodestore/Timing_test.cpp | 2 +- src/test/overlay/reduce_relay_test.cpp | 36 +++---- src/test/peerfinder/PeerFinder_test.cpp | 20 ++-- src/test/protocol/BuildInfo_test.cpp | 12 +-- src/test/protocol/Hooks_test.cpp | 2 +- src/test/protocol/Seed_test.cpp | 4 +- src/test/rpc/Handler_test.cpp | 2 +- src/test/rpc/KeyGeneration_test.cpp | 6 +- src/test/rpc/ServerInfo_test.cpp | 4 +- src/test/unit_test/multi_runner.h | 4 +- src/xrpld/README.md | 2 +- src/xrpld/app/consensus/README.md | 4 +- src/xrpld/app/ledger/README.md | 6 +- src/xrpld/app/ledger/detail/LedgerMaster.cpp | 14 +-- src/xrpld/app/main/Application.cpp | 4 +- src/xrpld/app/main/GRPCServer.cpp | 2 +- src/xrpld/app/main/GRPCServer.h | 6 +- src/xrpld/app/main/Main.cpp | 14 +-- src/xrpld/app/misc/FeeEscalation.md | 10 +- src/xrpld/app/misc/README.md | 10 +- src/xrpld/app/misc/SHAMapStoreImp.h | 2 +- src/xrpld/app/misc/TxQ.h | 4 +- src/xrpld/app/misc/ValidatorList.h | 8 +- src/xrpld/app/misc/ValidatorSite.h | 2 +- src/xrpld/app/misc/detail/ValidatorList.cpp | 2 +- src/xrpld/app/rdb/README.md | 2 +- src/xrpld/app/rdb/backend/detail/Node.cpp | 2 +- src/xrpld/core/Config.h | 4 +- src/xrpld/core/TimeKeeper.h | 2 +- src/xrpld/overlay/README.md | 14 +-- src/xrpld/overlay/detail/Handshake.cpp | 2 +- src/xrpld/overlay/detail/OverlayImpl.cpp | 2 +- src/xrpld/overlay/detail/PeerImp.h | 2 +- .../overlay/detail/PeerReservationTable.cpp | 2 +- src/xrpld/peerfinder/README.md | 8 +- src/xrpld/peerfinder/detail/Bootcache.cpp | 4 +- src/xrpld/rpc/README.md | 2 +- src/xrpld/rpc/RPCCall.h | 4 +- src/xrpld/rpc/detail/RPCCall.cpp | 4 +- src/xrpld/rpc/detail/RPCHelpers.cpp | 10 +- src/xrpld/rpc/detail/RPCHelpers.h | 6 +- .../handlers/admin/keygen/WalletPropose.cpp | 12 +-- .../rpc/handlers/orderbook/RipplePathFind.cpp | 2 +- .../rpc/handlers/transaction/Simulate.cpp | 2 +- tests/README.md | 2 +- 144 files changed, 544 insertions(+), 511 deletions(-) create mode 100755 .github/scripts/rename/docs.sh delete mode 100644 docs/README.md diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 967b3c1817..05e87d16e0 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,7 +1,7 @@ --- name: Feature Request -about: Suggest a new feature for the rippled project -title: "[Title with short description] (Version: [rippled version])" +about: Suggest a new feature for the xrpld project +title: "[Title with short description] (Version: [xrpld version])" labels: Feature Request assignees: "" --- diff --git a/.github/scripts/levelization/README.md b/.github/scripts/levelization/README.md index 25eb52f079..f657344827 100644 --- a/.github/scripts/levelization/README.md +++ b/.github/scripts/levelization/README.md @@ -1,14 +1,14 @@ # Levelization -Levelization is the term used to describe efforts to prevent rippled from +Levelization is the term used to describe efforts to prevent xrpld from having or creating cyclic dependencies. -rippled code is organized into directories under `src/xrpld`, `src/libxrpl` (and +xrpld code is organized into directories under `src/xrpld`, `src/libxrpl` (and `src/test`) representing modules. The modules are intended to be organized into "tiers" or "levels" such that a module from one level can only include code from lower levels. Additionally, a module in one level should never include code in an `impl` or `detail` folder of any level -other than it's own. +other than its own. The codebase is split into two main areas: @@ -22,7 +22,7 @@ levelization violations they find (by moving files or individual classes). At the very least, don't make things worse. The table below summarizes the _desired_ division of modules, based on the current -state of the rippled code. The levels are numbered from +state of the xrpld code. The levels are numbered from the bottom up with the lower level, lower numbered, more independent modules listed first, and the higher level, higher numbered modules with more dependencies listed later. @@ -72,10 +72,10 @@ that `test` code should _never_ be included in `xrpl` or `xrpld` code.) The [levelization](generate.py) script takes no parameters, reads no environment variables, and can be run from any directory, -as long as it is in the expected location in the rippled repo. +as long as it is in the expected location in the xrpld repo. It can be run at any time from within a checked out repo, and will do an analysis of all the `#include`s in -the rippled source. The only caveat is that it runs much slower +the xrpld source. The only caveat is that it runs much slower under Windows than in Linux. It hasn't yet been tested under MacOS. It generates many files of [results](results): diff --git a/.github/scripts/rename/README.md b/.github/scripts/rename/README.md index cc004a335f..ab685bb0c3 100644 --- a/.github/scripts/rename/README.md +++ b/.github/scripts/rename/README.md @@ -34,6 +34,8 @@ run from the repository root. 6. `.github/scripts/rename/config.sh`: This script will rename the config from `rippled.cfg` to `xrpld.cfg`, and updating the code accordingly. The old filename will still be accepted. +7. `.github/scripts/rename/docs.sh`: This script will rename any lingering + references of `ripple(d)` to `xrpl(d)` in code, comments, and documentation. You can run all these scripts from the repository root as follows: @@ -44,4 +46,5 @@ You can run all these scripts from the repository root as follows: ./.github/scripts/rename/binary.sh . ./.github/scripts/rename/namespace.sh . ./.github/scripts/rename/config.sh . +./.github/scripts/rename/docs.sh . ``` diff --git a/.github/scripts/rename/binary.sh b/.github/scripts/rename/binary.sh index deb4dd5fb4..81d48ce94b 100755 --- a/.github/scripts/rename/binary.sh +++ b/.github/scripts/rename/binary.sh @@ -29,7 +29,7 @@ if [ ! -d "${DIRECTORY}" ]; then echo "Error: Directory '${DIRECTORY}' does not exist." exit 1 fi -pushd ${DIRECTORY} +pushd "${DIRECTORY}" # Remove the binary name override added by the cmake.sh script. ${SED_COMMAND} -z -i -E 's@\s+# For the time being.+"rippled"\)@@' cmake/XrplCore.cmake @@ -49,6 +49,7 @@ ${SED_COMMAND} -i -E 's@ripple/xrpld@XRPLF/rippled@g' BUILD.md ${SED_COMMAND} -i -E 's@XRPLF/xrpld@XRPLF/rippled@g' BUILD.md ${SED_COMMAND} -i -E 's@xrpld \(`xrpld`\)@xrpld@g' BUILD.md ${SED_COMMAND} -i -E 's@XRPLF/xrpld@XRPLF/rippled@g' CONTRIBUTING.md +${SED_COMMAND} -i -E 's@XRPLF/xrpld@XRPLF/rippled@g' docs/build/install.md popd echo "Processing complete." diff --git a/.github/scripts/rename/cmake.sh b/.github/scripts/rename/cmake.sh index 0f88fa5de2..6c3d30e948 100755 --- a/.github/scripts/rename/cmake.sh +++ b/.github/scripts/rename/cmake.sh @@ -38,7 +38,7 @@ if [ ! -d "${DIRECTORY}" ]; then echo "Error: Directory '${DIRECTORY}' does not exist." exit 1 fi -pushd ${DIRECTORY} +pushd "${DIRECTORY}" # Rename the files. find cmake -type f -name 'Rippled*.cmake' -exec bash -c 'mv "${1}" "${1/Rippled/Xrpl}"' - {} \; diff --git a/.github/scripts/rename/config.sh b/.github/scripts/rename/config.sh index f6e914f502..9a521e8a51 100755 --- a/.github/scripts/rename/config.sh +++ b/.github/scripts/rename/config.sh @@ -28,7 +28,7 @@ if [ ! -d "${DIRECTORY}" ]; then echo "Error: Directory '${DIRECTORY}' does not exist." exit 1 fi -pushd ${DIRECTORY} +pushd "${DIRECTORY}" # Add the xrpld.cfg to the .gitignore. if ! grep -q 'xrpld.cfg' .gitignore; then @@ -52,16 +52,15 @@ for DIRECTORY in "${DIRECTORIES[@]}"; do find "${DIRECTORY}" -type f \( -name "*.h" -o -name "*.hpp" -o -name "*.ipp" -o -name "*.cpp" -o -name "*.cmake" -o -name "*.txt" -o -name "*.cfg" -o -name "*.md" \) | while read -r FILE; do echo "Processing file: ${FILE}" ${SED_COMMAND} -i -E 's/rippled(-example)?[ .]cfg/xrpld\1.cfg/g' "${FILE}" + ${SED_COMMAND} -i 's/rippleConfig/xrpldConfig/g' "${FILE}" done done ${SED_COMMAND} -i 's/rippled/xrpld/g' cfg/xrpld-example.cfg ${SED_COMMAND} -i 's/rippled/xrpld/g' src/test/core/Config_test.cpp ${SED_COMMAND} -i 's/ripplevalidators/xrplvalidators/g' src/test/core/Config_test.cpp # cspell: disable-line -${SED_COMMAND} -i 's/rippleConfig/xrpldConfig/g' src/test/core/Config_test.cpp ${SED_COMMAND} -i 's@ripple/@xrpld/@g' src/test/core/Config_test.cpp ${SED_COMMAND} -i 's/Rippled/File/g' src/test/core/Config_test.cpp - # Restore the old config file name in the code that maintains support for now. ${SED_COMMAND} -i 's/configLegacyName = "xrpld.cfg"/configLegacyName = "rippled.cfg"/g' src/xrpld/core/detail/Config.cpp diff --git a/.github/scripts/rename/copyright.sh b/.github/scripts/rename/copyright.sh index 3d690321b9..f212fe5fc7 100755 --- a/.github/scripts/rename/copyright.sh +++ b/.github/scripts/rename/copyright.sh @@ -31,7 +31,7 @@ if [ ! -d "${DIRECTORY}" ]; then echo "Error: Directory '${DIRECTORY}' does not exist." exit 1 fi -pushd ${DIRECTORY} +pushd "${DIRECTORY}" # Prevent sed and echo from removing newlines and tabs in string literals by # temporarily replacing them with placeholders. This only affects one file. diff --git a/.github/scripts/rename/docs.sh b/.github/scripts/rename/docs.sh new file mode 100755 index 0000000000..22d5e242d1 --- /dev/null +++ b/.github/scripts/rename/docs.sh @@ -0,0 +1,96 @@ +#!/bin/bash + +# Exit the script as soon as an error occurs. +set -e + +# On MacOS, ensure that GNU sed is installed and available as `gsed`. +SED_COMMAND=sed +if [[ "${OSTYPE}" == 'darwin'* ]]; then + if ! command -v gsed &> /dev/null; then + echo "Error: gsed is not installed. Please install it using 'brew install gnu-sed'." + exit 1 + fi + SED_COMMAND=gsed +fi + +# This script renames all remaining references to `ripple` and `rippled` to +# `xrpl` and `xrpld`, respectively, in code, comments, and documentation. +# Usage: .github/scripts/rename/docs.sh + +if [ "$#" -ne 1 ]; then + echo "Usage: $0 " + exit 1 +fi + +DIRECTORY=$1 +echo "Processing directory: ${DIRECTORY}" +if [ ! -d "${DIRECTORY}" ]; then + echo "Error: Directory '${DIRECTORY}' does not exist." + exit 1 +fi +pushd "${DIRECTORY}" + +find . -type f \( -name "*.h" -o -name "*.hpp" -o -name "*.ipp" -o -name "*.cpp" -o -name "*.txt" -o -name "*.cfg" -o -name "*.md" -o -name "*.proto" \) -not -path "./.github/scripts/*" | while read -r FILE; do + echo "Processing file: ${FILE}" + ${SED_COMMAND} -i 's/rippleLockEscrowMPT/lockEscrowMPT/g' "${FILE}" + ${SED_COMMAND} -i 's/rippleUnlockEscrowMPT/unlockEscrowMPT/g' "${FILE}" + ${SED_COMMAND} -i 's/rippleCredit/directSendNoFee/g' "${FILE}" + ${SED_COMMAND} -i 's/rippleSend/directSendNoLimit/g' "${FILE}" + ${SED_COMMAND} -i -E 's@([^/+-])rippled@\1xrpld@g' "${FILE}" + ${SED_COMMAND} -i -E 's@([^/+-])Rippled@\1Xrpld@g' "${FILE}" + ${SED_COMMAND} -i -E 's/^rippled/xrpld/g' "${FILE}" + ${SED_COMMAND} -i -E 's/^Rippled/Xrpld/g' "${FILE}" + # cspell: disable + ${SED_COMMAND} -i -E 's/(r|R)ipple (a|A)ddress/XRPL address/g' "${FILE}" + ${SED_COMMAND} -i -E 's/(r|R)ipple (a|A)ccount/XRPL account/g' "${FILE}" + ${SED_COMMAND} -i -E 's/(r|R)ipple (a|A)lgorithm/XRPL algorithm/g' "${FILE}" + ${SED_COMMAND} -i -E 's/(r|R)ipple (c|C)lient/XRPL client/g' "${FILE}" + ${SED_COMMAND} -i -E 's/(r|R)ipple (c|C)luster/XRPL cluster/g' "${FILE}" + ${SED_COMMAND} -i -E 's/(r|R)ipple (c|C)onsensus/XRPL consensus/g' "${FILE}" + ${SED_COMMAND} -i -E 's/(r|R)ipple (d|D)efault/XRPL default/g' "${FILE}" + ${SED_COMMAND} -i -E 's/(r|R)ipple (e|E)poch/XRPL epoch/g' "${FILE}" + ${SED_COMMAND} -i -E 's/(r|R)ipple (f|F)eature/XRPL feature/g' "${FILE}" + ${SED_COMMAND} -i -E 's/(r|R)ipple (n|N)etwork/XRPL network/g' "${FILE}" + ${SED_COMMAND} -i -E 's/(r|R)ipple (p|P)ayment/XRPL payment/g' "${FILE}" + ${SED_COMMAND} -i -E 's/(r|R)ipple (p|P)rotocol/XRPL protocol/g' "${FILE}" + ${SED_COMMAND} -i -E 's/(r|R)ipple (r|R)epository/XRPL repository/g' "${FILE}" + ${SED_COMMAND} -i -E 's/(r|R)ipple RPC/XRPL RPC/g' "${FILE}" + ${SED_COMMAND} -i -E 's/(r|R)ipple (s|S)erialization/XRPL serialization/g' "${FILE}" + ${SED_COMMAND} -i -E 's/(r|R)ipple (s|S)erver/XRPL server/g' "${FILE}" + ${SED_COMMAND} -i -E 's/(r|R)ipple (s|S)pecific/XRPL specific/g' "${FILE}" + ${SED_COMMAND} -i -E 's/(r|R)ipple Source/XRPL Source/g' "${FILE}" + ${SED_COMMAND} -i -E 's/(r|R)ipple (t|T)imestamp/XRPL timestamp/g' "${FILE}" + ${SED_COMMAND} -i -E 's/(r|R)ipple uses the consensus/XRPL uses the consensus/g' "${FILE}" + ${SED_COMMAND} -i -E 's/(r|R)ipple (v|V)alidator/XRPL validator/g' "${FILE}" + # cspell: enable + ${SED_COMMAND} -i 's/RippleLib/XrplLib/g' "${FILE}" + ${SED_COMMAND} -i 's/ripple-lib/XrplLib/g' "${FILE}" + ${SED_COMMAND} -i 's@opt/ripple/@opt/xrpld/@g' "${FILE}" + ${SED_COMMAND} -i 's@src/ripple/@src/xrpld/@g' "${FILE}" + ${SED_COMMAND} -i 's@ripple/app/@xrpld/app/@g' "${FILE}" + ${SED_COMMAND} -i 's@github.com/ripple/rippled@github.com/XRPLF/rippled@g' "${FILE}" + ${SED_COMMAND} -i 's/\ba xrpl/an xrpl/g' "${FILE}" + ${SED_COMMAND} -i 's/\ba XRPL/an XRPL/g' "${FILE}" +done +${SED_COMMAND} -i 's/ripple_libs/xrpl_libs/' BUILD.md +${SED_COMMAND} -i 's/Ripple integrators/XRPL developers/' README.md +${SED_COMMAND} -i 's/sanitizer-configuration-for-rippled/sanitizer-configuration-for-xrpld/' docs/build/sanitizers.md +${SED_COMMAND} -i 's/rippled/xrpld/g' .github/scripts/levelization/README.md +${SED_COMMAND} -i 's/rippled/xrpld/g' .github/scripts/strategy-matrix/generate.py +${SED_COMMAND} -i 's@/rippled@/xrpld@g' docs/build/install.md +${SED_COMMAND} -i 's@github.com/XRPLF/xrpld@github.com/XRPLF/rippled@g' docs/build/install.md +${SED_COMMAND} -i 's/rippled/xrpld/g' docs/Doxyfile +${SED_COMMAND} -i 's/ripple_basics/basics/' include/xrpl/basics/CountedObject.h +${SED_COMMAND} -i 's/ list: # so that they are easier to identify in the GitHub Actions UI, as long # names get truncated. # Add Address and Thread (both coupled with UB) sanitizers for specific bookworm distros. - # GCC-Asan rippled-embedded tests are failing because of https://github.com/google/sanitizers/issues/856 + # GCC-Asan xrpld-embedded tests are failing because of https://github.com/google/sanitizers/issues/856 if ( os["distro_version"] == "bookworm" and f"{os['compiler_name']}-{os['compiler_version']}" == "clang-20" diff --git a/.github/workflows/reusable-check-rename.yml b/.github/workflows/reusable-check-rename.yml index 0e335ab9ca..56a1a3e637 100644 --- a/.github/workflows/reusable-check-rename.yml +++ b/.github/workflows/reusable-check-rename.yml @@ -33,6 +33,8 @@ jobs: run: .github/scripts/rename/config.sh . - name: Check include guards run: .github/scripts/rename/include.sh . + - name: Check documentation + run: .github/scripts/rename/docs.sh . - name: Check for differences env: MESSAGE: | diff --git a/API-CHANGELOG.md b/API-CHANGELOG.md index 8e7fb2e4d4..d5faaf70af 100644 --- a/API-CHANGELOG.md +++ b/API-CHANGELOG.md @@ -4,23 +4,23 @@ This changelog is intended to list all updates to the [public API methods](https For info about how [API versioning](https://xrpl.org/request-formatting.html#api-versioning) works, including examples, please view the [XLS-22d spec](https://github.com/XRPLF/XRPL-Standards/discussions/54). For details about the implementation of API versioning, view the [implementation PR](https://github.com/XRPLF/rippled/pull/3155). API versioning ensures existing integrations and users continue to receive existing behavior, while those that request a higher API version will experience new behavior. -The API version controls the API behavior you see. This includes what properties you see in responses, what parameters you're permitted to send in requests, and so on. You specify the API version in each of your requests. When a breaking change is introduced to the `rippled` API, a new version is released. To avoid breaking your code, you should set (or increase) your version when you're ready to upgrade. +The API version controls the API behavior you see. This includes what properties you see in responses, what parameters you're permitted to send in requests, and so on. You specify the API version in each of your requests. When a breaking change is introduced to the `xrpld` API, a new version is released. To avoid breaking your code, you should set (or increase) your version when you're ready to upgrade. The [commandline](https://xrpl.org/docs/references/http-websocket-apis/api-conventions/request-formatting/#commandline-format) always uses the latest API version. The command line is intended for ad-hoc usage by humans, not programs or automated scripts. The command line is not meant for use in production code. -For a log of breaking changes, see the **API Version [number]** headings. In general, breaking changes are associated with a particular API Version number. For non-breaking changes, scroll to the **XRP Ledger version [x.y.z]** headings. Non-breaking changes are associated with a particular XRP Ledger (`rippled`) release. +For a log of breaking changes, see the **API Version [number]** headings. In general, breaking changes are associated with a particular API Version number. For non-breaking changes, scroll to the **XRP Ledger version [x.y.z]** headings. Non-breaking changes are associated with a particular XRP Ledger (`xrpld`) release. ## API Version 3 (Beta) -API version 3 is currently a beta API. It requires enabling `[beta_rpc_api]` in the rippled configuration to use. See [API-VERSION-3.md](API-VERSION-3.md) for the full list of changes in API version 3. +API version 3 is currently a beta API. It requires enabling `[beta_rpc_api]` in the xrpld configuration to use. See [API-VERSION-3.md](API-VERSION-3.md) for the full list of changes in API version 3. ## API Version 2 -API version 2 is available in `rippled` version 2.0.0 and later. See [API-VERSION-2.md](API-VERSION-2.md) for the full list of changes in API version 2. +API version 2 is available in `xrpld` version 2.0.0 and later. See [API-VERSION-2.md](API-VERSION-2.md) for the full list of changes in API version 2. ## API Version 1 -This version is supported by all `rippled` versions. For WebSocket and HTTP JSON-RPC requests, it is currently the default API version used when no `api_version` is specified. +This version is supported by all `xrpld` versions. For WebSocket and HTTP JSON-RPC requests, it is currently the default API version used when no `api_version` is specified. ## Unreleased diff --git a/API-VERSION-2.md b/API-VERSION-2.md index 2296795271..eaf626099c 100644 --- a/API-VERSION-2.md +++ b/API-VERSION-2.md @@ -1,6 +1,6 @@ # API Version 2 -API version 2 is available in `rippled` version 2.0.0 and later. To use this API, clients specify `"api_version" : 2` in each request. +API version 2 is available in `xrpld` version 2.0.0 and later. To use this API, clients specify `"api_version" : 2` in each request. For info about how [API versioning](https://xrpl.org/request-formatting.html#api-versioning) works, including examples, please view the [XLS-22d spec](https://github.com/XRPLF/XRPL-Standards/discussions/54). For details about the implementation of API versioning, view the [implementation PR](https://github.com/XRPLF/rippled/pull/3155). API versioning ensures existing integrations and users continue to receive existing behavior, while those that request a higher API version will experience new behavior. diff --git a/API-VERSION-3.md b/API-VERSION-3.md index 46dc3f504d..57d42ce200 100644 --- a/API-VERSION-3.md +++ b/API-VERSION-3.md @@ -1,6 +1,6 @@ # API Version 3 -API version 3 is currently a **beta API**. It requires enabling `[beta_rpc_api]` in the rippled configuration to use. To use this API, clients specify `"api_version" : 3` in each request. +API version 3 is currently a **beta API**. It requires enabling `[beta_rpc_api]` in the xrpld configuration to use. To use this API, clients specify `"api_version" : 3` in each request. For info about how [API versioning](https://xrpl.org/request-formatting.html#api-versioning) works, including examples, please view the [XLS-22d spec](https://github.com/XRPLF/XRPL-Standards/discussions/54). For details about the implementation of API versioning, view the [implementation PR](https://github.com/XRPLF/rippled/pull/3155). API versioning ensures existing integrations and users continue to receive existing behavior, while those that request a higher API version will experience new behavior. diff --git a/BUILD.md b/BUILD.md index 757f76a716..7406d60949 100644 --- a/BUILD.md +++ b/BUILD.md @@ -603,8 +603,8 @@ If you want to experiment with a new package, follow these steps: `default_options` property (with syntax `'$package:$option': $value`). 3. Modify [`CMakeLists.txt`](./CMakeLists.txt): - Add a call to `find_package($package REQUIRED)`. - - Link a library from the package to the target `ripple_libs` - (search for the existing call to `target_link_libraries(ripple_libs INTERFACE ...)`). + - Link a library from the package to the target `xrpl_libs` + (search for the existing call to `target_link_libraries(xrpl_libs INTERFACE ...)`). 4. Start coding! Don't forget to include whatever headers you need from the package. [1]: https://github.com/conan-io/conan-center-index/issues/13168 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d19222dbf0..0589081055 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -533,7 +533,7 @@ All releases, including release candidates and betas, are handled differently from typical PRs. Most importantly, never use the Github UI to merge a release. -Rippled uses a linear workflow model that can be summarized as: +Xrpld uses a linear workflow model that can be summarized as: 1. In between releases, developers work against the `develop` branch. 2. Periodically, a maintainer will build and tag a beta version from diff --git a/README.md b/README.md index dbc5ab078e..88c7943ebb 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,11 @@ The [XRP Ledger](https://xrpl.org/) is a decentralized cryptographic ledger powe [XRP](https://xrpl.org/xrp.html) is a public, counterparty-free crypto-asset native to the XRP Ledger, and is designed as a gas token for network services and to bridge different currencies. XRP is traded on the open-market and is available for anyone to access. The XRP Ledger was created in 2012 with a finite supply of 100 billion units of XRP. -## rippled +## xrpld -The server software that powers the XRP Ledger is called `rippled` and is available in this repository under the permissive [ISC open-source license](LICENSE.md). The `rippled` server software is written primarily in C++ and runs on a variety of platforms. The `rippled` server software can run in several modes depending on its [configuration](https://xrpl.org/rippled-server-modes.html). +The server software that powers the XRP Ledger is called `xrpld` and is available in this repository under the permissive [ISC open-source license](LICENSE.md). The `xrpld` server software is written primarily in C++ and runs on a variety of platforms. The `xrpld` server software can run in several modes depending on its [configuration](https://xrpl.org/rippled-server-modes.html). -If you are interested in running an **API Server** (including a **Full History Server**), take a look at [Clio](https://github.com/XRPLF/clio). (rippled Reporting Mode has been replaced by Clio.) +If you are interested in running an **API Server** (including a **Full History Server**), take a look at [Clio](https://github.com/XRPLF/clio). (xrpld Reporting Mode has been replaced by Clio.) ### Build from Source @@ -41,19 +41,19 @@ If you are interested in running an **API Server** (including a **Full History S Here are some good places to start learning the source code: -- Read the markdown files in the source tree: `src/ripple/**/*.md`. +- Read the markdown files in the source tree: `src/xrpld/**/*.md`. - Read [the levelization document](.github/scripts/levelization) to get an idea of the internal dependency graph. - In the big picture, the `main` function constructs an `ApplicationImp` object, which implements the `Application` virtual interface. Almost every component in the application takes an `Application&` parameter in its constructor, typically named `app` and stored as a member variable `app_`. This allows most components to depend on any other component. ### Repository Contents -| Folder | Contents | -| :--------- | :----------------------------------------------- | -| `./bin` | Scripts and data files for Ripple integrators. | -| `./Builds` | Platform-specific guides for building `rippled`. | -| `./docs` | Source documentation files and doxygen config. | -| `./cfg` | Example configuration files. | -| `./src` | Source code. | +| Folder | Contents | +| :--------- | :--------------------------------------------- | +| `./bin` | Scripts and data files for XRPL developers. | +| `./Builds` | Platform-specific guides for building `xrpld`. | +| `./docs` | Source documentation files and doxygen config. | +| `./cfg` | Example configuration files. | +| `./src` | Source code. | Some of the directories under `src` are external repositories included using git-subtree. See those directories' README files for more details. diff --git a/SECURITY.md b/SECURITY.md index 1be412ae2a..2e0c43a134 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -6,7 +6,7 @@ For more details on operating an XRP Ledger server securely, please visit https: ## Supported Versions -Software constantly evolves. In order to focus resources, we only generally only accept vulnerability reports that affect recent and current versions of the software. We always accept reports for issues present in the **master**, **release** or **develop** branches, and with proposed, [open pull requests](https://github.com/ripple/rippled/pulls). +Software constantly evolves. In order to focus resources, we generally only accept vulnerability reports that affect recent and current versions of the software. We always accept reports for issues present in the **master**, **release** or **develop** branches, and with proposed, [open pull requests](https://github.com/XRPLF/rippled/pulls). ## Identifying and Reporting Vulnerabilities @@ -59,11 +59,11 @@ While we commit to responding with 24 hours of your initial report with our tria ## Bug Bounty Program -[Ripple](https://ripple.com) is generously sponsoring a bug bounty program for vulnerabilities in [`rippled`](https://github.com/XRPLF/rippled) (and other related projects, like [`xrpl.js`](https://github.com/XRPLF/xrpl.js), [`xrpl-py`](https://github.com/XRPLF/xrpl-py), [`xrpl4j`](https://github.com/XRPLF/xrpl4j)). +[Ripple](https://ripple.com) is generously sponsoring a bug bounty program for vulnerabilities in [`xrpld`](https://github.com/XRPLF/rippled) (and other related projects, like [`xrpl.js`](https://github.com/XRPLF/xrpl.js), [`xrpl-py`](https://github.com/XRPLF/xrpl-py), [`xrpl4j`](https://github.com/XRPLF/xrpl4j)). This program allows us to recognize and reward individuals or groups that identify and report bugs. In summary, in order to qualify for a bounty, the bug must be: -1. **In scope**. Only bugs in software under the scope of the program qualify. Currently, that means `rippled`, `xrpl.js`, `xrpl-py`, `xrpl4j`. +1. **In scope**. Only bugs in software under the scope of the program qualify. Currently, that means `xrpld`, `xrpl.js`, `xrpl-py`, `xrpl4j`. 2. **Relevant**. A security issue, posing a danger to user funds, privacy, or the operation of the XRP Ledger. 3. **Original and previously unknown**. Bugs that are already known and discussed in public do not qualify. Previously reported bugs, even if publicly unknown, are not eligible. 4. **Specific**. We welcome general security advice or recommendations, but we cannot pay bounties for that. diff --git a/cfg/validators-example.txt b/cfg/validators-example.txt index 6eb49da697..384db924f4 100644 --- a/cfg/validators-example.txt +++ b/cfg/validators-example.txt @@ -28,7 +28,7 @@ # https://vl.ripple.com # https://unl.xrplf.org # http://127.0.0.1:8000 -# file:///etc/opt/ripple/vl.txt +# file:///etc/opt/xrpld/vl.txt # # [validator_list_keys] # @@ -43,11 +43,11 @@ # ED307A760EE34F2D0CAA103377B1969117C38B8AA0AA1E2A24DAC1F32FC97087ED # -# The default validator list publishers that the rippled instance +# The default validator list publishers that the xrpld instance # trusts. # -# WARNING: Changing these values can cause your rippled instance to see a -# validated ledger that contradicts other rippled instances' +# WARNING: Changing these values can cause your xrpld instance to see a +# validated ledger that contradicts other xrpld instances' # validated ledgers (aka a ledger fork) if your validator list(s) # do not sufficiently overlap with the list(s) used by others. # See: https://arxiv.org/pdf/1802.07242.pdf diff --git a/cfg/xrpld-example.cfg b/cfg/xrpld-example.cfg index 995d4e65ff..6d65824fb9 100644 --- a/cfg/xrpld-example.cfg +++ b/cfg/xrpld-example.cfg @@ -9,7 +9,7 @@ # # 2. Peer Protocol # -# 3. Ripple Protocol +# 3. XRPL protocol # # 4. HTTPS Client # @@ -383,7 +383,7 @@ # # These settings control security and access attributes of the Peer to Peer # server section of the xrpld process. Peer Protocol implements the -# Ripple Payment protocol. It is over peer connections that transactions +# XRPL payment protocol. It is over peer connections that transactions # and validations are passed from to machine to machine, to determine the # contents of validated ledgers. # @@ -406,7 +406,7 @@ # # [ips] # -# List of hostnames or ips where the Ripple protocol is served. A default +# List of hostnames or ips where the XRPL protocol is served. A default # starter list is included in the code and used if no other hostnames are # available. # @@ -435,7 +435,7 @@ # List of IP addresses or hostnames to which xrpld should always attempt to # maintain peer connections with. This is useful for manually forming private # networks, for example to configure a validation server that connects to the -# Ripple network through a public-facing server, or for building a set +# XRPL network through a public-facing server, or for building a set # of cluster peers. # # One address or domain names per line is allowed. A port must be specified @@ -748,8 +748,8 @@ # the folder in which the xrpld.cfg file is located. # # Examples: -# /home/ripple/validators.txt -# C:/home/ripple/validators.txt +# /home/username/validators.txt +# C:/home/username/validators.txt # # Example content: # [validators] @@ -840,7 +840,7 @@ # # 0: Disable the ledger replay feature [default] # 1: Enable the ledger replay feature. With this feature enabled, when -# acquiring a ledger from the network, a xrpld node only downloads +# acquiring a ledger from the network, an xrpld node only downloads # the ledger header and the transactions instead of the whole ledger. # And the ledger is built by applying the transactions to the parent # ledger. @@ -853,7 +853,7 @@ # # The xrpld server instance uses HTTPS GET requests in a variety of # circumstances, including but not limited to contacting trusted domains to -# fetch information such as mapping an email address to a Ripple Payment +# fetch information such as mapping an email address to an XRPL payment # Network address. # # [ssl_verify] @@ -1227,7 +1227,7 @@ # #---------- # -# The vote settings configure settings for the entire Ripple network. +# The vote settings configure settings for the entire XRPL network. # While a single instance of xrpld cannot unilaterally enforce network-wide # settings, these choices become part of the instance's vote during the # consensus process for each voting ledger. diff --git a/docs/0001-negative-unl/README.md b/docs/0001-negative-unl/README.md index c863cab9da..dd5f9af2ae 100644 --- a/docs/0001-negative-unl/README.md +++ b/docs/0001-negative-unl/README.md @@ -558,7 +558,7 @@ network delay. A test case specifies: 1. a UNL with different number of validators for different test cases, 1. a network with zero or more non-validator nodes, 1. a sequence of validator reliability change events (by killing/restarting - nodes, or by running modified rippled that does not send all validation + nodes, or by running modified xrpld that does not send all validation messages), 1. the correct outcomes. @@ -566,7 +566,7 @@ For all the test cases, the correct outcomes are verified by examining logs. We will grep the log to see if the correct negative UNLs are generated, and whether or not the network is making progress when it should be. The ripdtop tool will be helpful for monitoring validators' states and ledger progress. Some of the -timing parameters of rippled will be changed to have faster ledger time. Most if +timing parameters of xrpld will be changed to have faster ledger time. Most if not all test cases do not need client transactions. For example, the test cases for the prototype: @@ -583,7 +583,7 @@ For example, the test cases for the prototype: We considered testing with the current unit test framework, specifically the [Consensus Simulation -Framework](https://github.com/ripple/rippled/blob/develop/src/test/csf/README.md) +Framework](https://github.com/XRPLF/rippled/blob/develop/src/test/csf/README.md) (CSF). However, the CSF currently can only test the generic consensus algorithm as in the paper: [Analysis of the XRP Ledger Consensus Protocol](https://arxiv.org/abs/1802.07242). diff --git a/docs/0001-negative-unl/negativeUNLSqDiagram.puml b/docs/0001-negative-unl/negativeUNLSqDiagram.puml index d86b98c01f..5c8d0c1fb3 100644 --- a/docs/0001-negative-unl/negativeUNLSqDiagram.puml +++ b/docs/0001-negative-unl/negativeUNLSqDiagram.puml @@ -4,7 +4,7 @@ skinparam sequenceArrowThickness 2 skinparam roundcorner 20 skinparam maxmessagesize 160 -actor "Rippled Start" as RS +actor "Xrpld Start" as RS participant "Timer" as T participant "NetworkOPs" as NOP participant "ValidatorList" as VL #lightgreen diff --git a/docs/Docker.md b/docs/Docker.md index 9f67c87ee5..4c712148d6 100644 --- a/docs/Docker.md +++ b/docs/Docker.md @@ -1,5 +1,5 @@ -# `rippled` Docker Image +# `xrpld` Docker Image - Some info relating to Docker containers can be found here: [../Builds/containers](../Builds/containers) -- Images for building and testing rippled can be found here: [thejohnfreeman/rippled-docker](https://github.com/thejohnfreeman/rippled-docker/) - - These images do not have rippled. They have all the tools necessary to build rippled. +- Images for building and testing xrpld can be found here: [thejohnfreeman/rippled-docker](https://github.com/thejohnfreeman/rippled-docker/) + - These images do not have xrpld. They have all the tools necessary to build xrpld. diff --git a/docs/Doxyfile b/docs/Doxyfile index 750ae0fb64..caa1db30e7 100644 --- a/docs/Doxyfile +++ b/docs/Doxyfile @@ -2,7 +2,7 @@ # Project related configuration options #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 -PROJECT_NAME = "rippled" +PROJECT_NAME = "xrpld" PROJECT_NUMBER = PROJECT_BRIEF = PROJECT_LOGO = diff --git a/docs/HeapProfiling.md b/docs/HeapProfiling.md index 2871cccaba..6fcc9f9a67 100644 --- a/docs/HeapProfiling.md +++ b/docs/HeapProfiling.md @@ -1,4 +1,4 @@ -## Heap profiling of rippled with jemalloc +## Heap profiling of xrpld with jemalloc The jemalloc library provides a good API for doing heap analysis, including a mechanism to dump a description of the heap from within the @@ -7,26 +7,26 @@ activity in general, as well as how to acquire the software, are available on the jemalloc site: [https://github.com/jemalloc/jemalloc/wiki/Use-Case:-Heap-Profiling](https://github.com/jemalloc/jemalloc/wiki/Use-Case:-Heap-Profiling) -jemalloc is acquired separately from rippled, and is not affiliated +jemalloc is acquired separately from xrpld, and is not affiliated with Ripple Labs. If you compile and install jemalloc from the source release with default options, it will install the library and header under `/usr/local/lib` and `/usr/local/include`, respectively. Heap -profiling has been tested with rippled on a Linux platform. It should -work on platforms on which both rippled and jemalloc are available. +profiling has been tested with xrpld on a Linux platform. It should +work on platforms on which both xrpld and jemalloc are available. -To link rippled with jemalloc, the argument +To link xrpld with jemalloc, the argument `profile-jemalloc=` is provided after the optional target. The `` argument should be the same as that of the `--prefix` parameter passed to the jemalloc configure script when building. ## Examples: -Build rippled with jemalloc library under /usr/local/lib and +Build xrpld with jemalloc library under /usr/local/lib and header under /usr/local/include: $ scons profile-jemalloc=/usr/local -Build rippled using clang with the jemalloc library under /opt/local/lib +Build xrpld using clang with the jemalloc library under /opt/local/lib and header under /opt/local/include: $ scons clang profile-jemalloc=/opt/local diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 35fcbba2d1..0000000000 --- a/docs/README.md +++ /dev/null @@ -1,61 +0,0 @@ -# Building documentation - -## Dependencies - -Install these dependencies: - -- [Doxygen](http://www.doxygen.nl): All major platforms have [official binary - distributions](http://www.doxygen.nl/download.html#srcbin), or you can - build from [source](http://www.doxygen.nl/download.html#srcbin). - - MacOS: We recommend installing via Homebrew: `brew install doxygen`. - The executable will be installed in `/usr/local/bin` which is already - in the default `PATH`. - - If you use the official binary distribution, then you'll need to make - Doxygen available to your command line. You can do this by adding - a symbolic link from `/usr/local/bin` to the `doxygen` executable. For - example, - - ``` - $ ln -s /Applications/Doxygen.app/Contents/Resources/doxygen /usr/local/bin/doxygen - ``` - -- [PlantUML](http://plantuml.com): - 1. Install a functioning Java runtime, if you don't already have one. - 2. Download [`plantuml.jar`](http://sourceforge.net/projects/plantuml/files/plantuml.jar/download). - -- [Graphviz](https://www.graphviz.org): - - Linux: Install from your package manager. - - Windows: Use an [official installer](https://graphviz.gitlab.io/_pages/Download/Download_windows.html). - - MacOS: Install via Homebrew: `brew install graphviz`. - -## Docker - -Instead of installing the above dependencies locally, you can use the official -build environment Docker image, which has all of them installed already. - -1. Install [Docker](https://docs.docker.com/engine/installation/) -2. Pull the image: - -``` -sudo docker pull rippleci/rippled-ci-builder:2944b78d22db -``` - -3. Run the image from the project folder: - -``` -sudo docker run -v $PWD:/opt/rippled --rm rippleci/rippled-ci-builder:2944b78d22db -``` - -## Build - -There is a `docs` target in the CMake configuration. - -``` -mkdir build -cd build -cmake -Donly_docs=ON .. -cmake --build . --target docs --parallel -``` - -The output will be in `build/docs/html`. diff --git a/docs/build/depend.md b/docs/build/depend.md index 2fa14378aa..f44519ddf9 100644 --- a/docs/build/depend.md +++ b/docs/build/depend.md @@ -20,7 +20,7 @@ CMakeToolchain ``` # If you want to depend on a version of libxrpl that is not in ConanCenter, -# then you can export the recipe from the rippled project. +# then you can export the recipe from the xrpld project. conan export ``` @@ -49,9 +49,9 @@ cmake --build . --parallel ## CMake subdirectory -The second method adds the [rippled][] project as a CMake +The second method adds the [xrpld][] project as a CMake [subdirectory][add_subdirectory]. -This method works well when you keep the rippled project as a Git +This method works well when you keep the xrpld project as a Git [submodule][]. It's good for when you want to make changes to libxrpl as part of your own project. @@ -90,6 +90,6 @@ cmake --build . --parallel [add_subdirectory]: https://cmake.org/cmake/help/latest/command/add_subdirectory.html [submodule]: https://git-scm.com/book/en/v2/Git-Tools-Submodules -[rippled]: https://github.com/ripple/rippled +[xrpld]: https://github.com/XRPLF/rippled [Conan]: https://docs.conan.io/ [CMake]: https://cmake.org/cmake/help/latest/ diff --git a/docs/build/environment.md b/docs/build/environment.md index 66bed06c26..fb1ebde8bc 100644 --- a/docs/build/environment.md +++ b/docs/build/environment.md @@ -55,7 +55,7 @@ clang --version ### Install Xcode Specific Version (Optional) If you develop other applications using XCode you might be consistently updating to the newest version of Apple Clang. -This will likely cause issues building rippled. You may want to install a specific version of Xcode: +This will likely cause issues building xrpld. You may want to install a specific version of Xcode: 1. **Download Xcode** - Visit [Apple Developer Downloads](https://developer.apple.com/download/more/) diff --git a/docs/build/install.md b/docs/build/install.md index 7be01ce726..d3ce1e9d87 100644 --- a/docs/build/install.md +++ b/docs/build/install.md @@ -1,4 +1,4 @@ -This document contains instructions for installing rippled. +This document contains instructions for installing xrpld. The APT package manager is common on Debian-based Linux distributions like Ubuntu, while the YUM package manager is common on Red Hat-based Linux distributions @@ -8,7 +8,7 @@ and the only supported option for installing custom builds. ## From source -From a source build, you can install rippled and libxrpl using CMake's +From a source build, you can install xrpld and libxrpl using CMake's `--install` mode: ``` @@ -16,7 +16,7 @@ cmake --install . --prefix /opt/local ``` The default [prefix][1] is typically `/usr/local` on Linux and macOS and -`C:/Program Files/rippled` on Windows. +`C:/Program Files/xrpld` on Windows. [1]: https://cmake.org/cmake/help/latest/variable/CMAKE_INSTALL_PREFIX.html @@ -50,9 +50,9 @@ The default [prefix][1] is typically `/usr/local` on Linux and macOS and In particular, make sure that the fingerprint matches. (In the above example, the fingerprint is on the third line, starting with `C001`.) -5. Add the appropriate Ripple repository for your operating system version: +5. Add the appropriate XRPL repository for your operating system version: - echo "deb [signed-by=/usr/local/share/keyrings/ripple-key.gpg] https://repos.ripple.com/repos/rippled-deb focal stable" | \ + echo "deb [signed-by=/usr/local/share/keyrings/ripple-key.gpg] https://repos.ripple.com/repos/xrpld-deb focal stable" | \ sudo tee -a /etc/apt/sources.list.d/ripple.list The above example is appropriate for **Ubuntu 20.04 Focal Fossa**. For other operating systems, replace the word `focal` with one of the following: @@ -61,33 +61,33 @@ The default [prefix][1] is typically `/usr/local` on Linux and macOS and - `bullseye` for **Debian 11 Bullseye** - `buster` for **Debian 10 Buster** - If you want access to development or pre-release versions of `rippled`, use one of the following instead of `stable`: - - `unstable` - Pre-release builds ([`release` branch](https://github.com/ripple/rippled/tree/release)) - - `nightly` - Experimental/development builds ([`develop` branch](https://github.com/ripple/rippled/tree/develop)) + If you want access to development or pre-release versions of `xrpld`, use one of the following instead of `stable`: + - `unstable` - Pre-release builds ([`release` branch](https://github.com/XRPLF/rippled/tree/release)) + - `nightly` - Experimental/development builds ([`develop` branch](https://github.com/XRPLF/rippled/tree/develop)) **Warning:** Unstable and nightly builds may be broken at any time. Do not use these builds for production servers. -6. Fetch the Ripple repository. +6. Fetch the XRPL repository. sudo apt -y update -7. Install the `rippled` software package: +7. Install the `xrpld` software package: - sudo apt -y install rippled + sudo apt -y install xrpld -8. Check the status of the `rippled` service: +8. Check the status of the `xrpld` service: - systemctl status rippled.service + systemctl status xrpld.service - The `rippled` service should start automatically. If not, you can start it manually: + The `xrpld` service should start automatically. If not, you can start it manually: - sudo systemctl start rippled.service + sudo systemctl start xrpld.service -9. Optional: allow `rippled` to bind to privileged ports. +9. Optional: allow `xrpld` to bind to privileged ports. This allows you to serve incoming API requests on port 80 or 443. (If you want to do so, you must also update the config file's port settings.) - sudo setcap 'cap_net_bind_service=+ep' /opt/ripple/bin/rippled + sudo setcap 'cap_net_bind_service=+ep' /opt/xrpld/bin/xrpld ## With the YUM package manager @@ -106,8 +106,8 @@ The default [prefix][1] is typically `/usr/local` on Linux and macOS and enabled=1 gpgcheck=0 repo_gpgcheck=1 - baseurl=https://repos.ripple.com/repos/rippled-rpm/stable/ - gpgkey=https://repos.ripple.com/repos/rippled-rpm/stable/repodata/repomd.xml.key + baseurl=https://repos.ripple.com/repos/xrpld-rpm/stable/ + gpgkey=https://repos.ripple.com/repos/xrpld-rpm/stable/repodata/repomd.xml.key REPOFILE _Unstable_ @@ -118,8 +118,8 @@ The default [prefix][1] is typically `/usr/local` on Linux and macOS and enabled=1 gpgcheck=0 repo_gpgcheck=1 - baseurl=https://repos.ripple.com/repos/rippled-rpm/unstable/ - gpgkey=https://repos.ripple.com/repos/rippled-rpm/unstable/repodata/repomd.xml.key + baseurl=https://repos.ripple.com/repos/xrpld-rpm/unstable/ + gpgkey=https://repos.ripple.com/repos/xrpld-rpm/unstable/repodata/repomd.xml.key REPOFILE _Nightly_ @@ -130,22 +130,22 @@ The default [prefix][1] is typically `/usr/local` on Linux and macOS and enabled=1 gpgcheck=0 repo_gpgcheck=1 - baseurl=https://repos.ripple.com/repos/rippled-rpm/nightly/ - gpgkey=https://repos.ripple.com/repos/rippled-rpm/nightly/repodata/repomd.xml.key + baseurl=https://repos.ripple.com/repos/xrpld-rpm/nightly/ + gpgkey=https://repos.ripple.com/repos/xrpld-rpm/nightly/repodata/repomd.xml.key REPOFILE 2. Fetch the latest repo updates: sudo yum -y update -3. Install the new `rippled` package: +3. Install the new `xrpld` package: - sudo yum install -y rippled + sudo yum install -y xrpld -4. Configure the `rippled` service to start on boot: +4. Configure the `xrpld` service to start on boot: - sudo systemctl enable rippled.service + sudo systemctl enable xrpld.service -5. Start the `rippled` service: +5. Start the `xrpld` service: - sudo systemctl start rippled.service + sudo systemctl start xrpld.service diff --git a/docs/build/sanitizers.md b/docs/build/sanitizers.md index ac3a0cc865..7677775a3d 100644 --- a/docs/build/sanitizers.md +++ b/docs/build/sanitizers.md @@ -1,9 +1,9 @@ -# Sanitizer Configuration for Rippled +# Sanitizer Configuration for Xrpld This document explains how to properly configure and run sanitizers (AddressSanitizer, undefinedbehaviorSanitizer, ThreadSanitizer) with the xrpld project. Corresponding suppression files are located in the `sanitizers/suppressions` directory. -- [Sanitizer Configuration for Rippled](#sanitizer-configuration-for-rippled) +- [Sanitizer Configuration for Xrpld](#sanitizer-configuration-for-xrpld) - [Building with Sanitizers](#building-with-sanitizers) - [Summary](#summary) - [Build steps:](#build-steps) @@ -100,7 +100,7 @@ export LSAN_OPTIONS="include=sanitizers/suppressions/runtime-lsan-options.txt:su - Boost intrusive containers (used in `aged_unordered_container`) trigger false positives - Boost context switching (used in `Workers.cpp`) confuses ASAN's stack tracking -- Since we usually don't build Boost (because we don't want to instrument Boost and detect issues in Boost code) with ASAN but use Boost containers in ASAN instrumented rippled code, it generates false positives. +- Since we usually don't build Boost (because we don't want to instrument Boost and detect issues in Boost code) with ASAN but use Boost containers in ASAN instrumented xrpld code, it generates false positives. - Building dependencies with ASAN instrumentation reduces false positives. But we don't want to instrument dependencies like Boost with ASAN because it is slow (to compile as well as run tests) and not necessary. - See: https://github.com/google/sanitizers/wiki/AddressSanitizerContainerOverflow - More such flags are detailed [here](https://github.com/google/sanitizers/wiki/AddressSanitizerFlags) diff --git a/docs/consensus.md b/docs/consensus.md index 23e5e7d5be..0da23b708a 100644 --- a/docs/consensus.md +++ b/docs/consensus.md @@ -5,9 +5,9 @@ Consensus is the task of reaching agreement within a distributed system in the presence of faulty or even malicious participants. This document outlines the [XRP Ledger Consensus Algorithm](https://arxiv.org/abs/1802.07242) -as implemented in [rippled](https://github.com/ripple/rippled), but +as implemented in [xrpld](https://github.com/XRPLF/rippled), but focuses on its utility as a generic consensus algorithm independent of the -detailed mechanics of the Ripple Consensus Ledger. Most notably, the algorithm +detailed mechanics of the XRPL consensus Ledger. Most notably, the algorithm does not require fully synchronous communication between all nodes in the network, or even a fixed network topology, but instead achieves consensus via collectively trusted subnetworks. @@ -15,7 +15,7 @@ collectively trusted subnetworks. ## Distributed Agreement A challenge for distributed systems is reaching agreement on changes in shared -state. For the Ripple network, the shared state is the current ledger--account +state. For the XRPL network, the shared state is the current ledger--account information, account balances, order books and other financial data. We will refer to shared distributed state as a /ledger/ throughout the remainder of this document. @@ -23,7 +23,7 @@ document. ![Ledger Chain](images/consensus/ledger_chain.png "Ledger Chain") As shown above, new ledgers are made by applying a set of transactions to the -prior ledger. For the Ripple network, transactions include payments, +prior ledger. For the XRPL network, transactions include payments, modification of account settings, updates to offers and more. In a centralized system, generating the next ledger is trivial since there is a @@ -33,10 +33,10 @@ the set of transactions to include, the order to apply those transactions, and even the resulting ledger after applying the transactions. This is even more difficult when some participants are faulty or malicious. -The Ripple network is a decentralized and **trust-full** network. Anyone is free +The XRPL network is a decentralized and **trust-full** network. Anyone is free to join and participants are free to choose a subset of peers that are collectively trusted to not collude in an attempt to defraud the participant. -Leveraging this network of trust, the Ripple algorithm has two main components. +Leveraging this network of trust, the XRPL algorithm has two main components. - _Consensus_ in which network participants agree on the transactions to apply to a prior ledger, based on the positions of their chosen peers. @@ -54,9 +54,9 @@ and was abandoned. The remainder of this section describes the Consensus and Validation algorithms in more detail and is meant as a companion guide to understanding the generic -implementation in `rippled`. The document **does not** discuss correctness, +implementation in `xrpld`. The document **does not** discuss correctness, fault-tolerance or liveness properties of the algorithms or the full details of -how they integrate within `rippled` to support the Ripple Consensus Ledger. +how they integrate within `xrpld` to support the XRPL consensus Ledger. ## Consensus Overview diff --git a/external/README.md b/external/README.md index f6e9f77d2d..4a4181e59e 100644 --- a/external/README.md +++ b/external/README.md @@ -1,6 +1,6 @@ # External Conan recipes -The subdirectories in this directory contain external libraries used by rippled. +The subdirectories in this directory contain external libraries used by xrpld. | Folder | Upstream | Description | | :--------------- | :------------------------------------------------------------- | :------------------------------------------------------------------------------------------- | diff --git a/external/antithesis-sdk/CMakeLists.txt b/external/antithesis-sdk/CMakeLists.txt index 46c7b4bf7a..645b73c530 100644 --- a/external/antithesis-sdk/CMakeLists.txt +++ b/external/antithesis-sdk/CMakeLists.txt @@ -1,11 +1,11 @@ cmake_minimum_required(VERSION 3.18) -# Note, version set explicitly by rippled project +# Note, version set explicitly by xrpld project project(antithesis-sdk-cpp VERSION 0.4.4 LANGUAGES CXX) add_library(antithesis-sdk-cpp INTERFACE antithesis_sdk.h) -# Note, both sections below created by rippled project +# Note, both sections below created by xrpld project target_include_directories(antithesis-sdk-cpp INTERFACE $ $ diff --git a/include/xrpl/basics/CountedObject.h b/include/xrpl/basics/CountedObject.h index acf75360e1..1acba18949 100644 --- a/include/xrpl/basics/CountedObject.h +++ b/include/xrpl/basics/CountedObject.h @@ -99,7 +99,7 @@ private: Derived classes have their instances counted automatically. This is used for reporting purposes. - @ingroup ripple_basics + @ingroup basics */ template class CountedObject diff --git a/include/xrpl/basics/IntrusivePointer.h b/include/xrpl/basics/IntrusivePointer.h index f816af1c05..230dec3ebb 100644 --- a/include/xrpl/basics/IntrusivePointer.h +++ b/include/xrpl/basics/IntrusivePointer.h @@ -59,7 +59,7 @@ concept CAdoptTag = std::is_same_v || still retaining the reference counts. For example, for SHAMapInnerNodes the children may be reset in that function. Note that std::shared_pointer WILL run the destructor when the strong count reaches zero, but may not free the - memory used by the object until the weak count reaches zero. In rippled, we + memory used by the object until the weak count reaches zero. In xrpld, we typically allocate shared pointers with the `make_shared` function. When that is used, the memory is not reclaimed until the weak count reaches zero. */ diff --git a/include/xrpl/basics/IntrusiveRefCounts.h b/include/xrpl/basics/IntrusiveRefCounts.h index 5a51b3c3bf..36616bc64f 100644 --- a/include/xrpl/basics/IntrusiveRefCounts.h +++ b/include/xrpl/basics/IntrusiveRefCounts.h @@ -33,7 +33,7 @@ enum class ReleaseWeakRefAction { noop, destroy }; /** Implement the strong count, weak count, and bit flags for an intrusive pointer. - A class can satisfy the requirements of a xrpl::IntrusivePointer by + A class can satisfy the requirements of an xrpl::IntrusivePointer by inheriting from this class. */ struct IntrusiveRefCounts diff --git a/include/xrpl/basics/README.md b/include/xrpl/basics/README.md index f8b19522cd..b20b837ed7 100644 --- a/include/xrpl/basics/README.md +++ b/include/xrpl/basics/README.md @@ -2,9 +2,9 @@ Utility functions and classes. -ripple/basic should contain no dependencies on other modules. +The module xrpl/basics should contain no dependencies on other modules. -# Choosing a rippled container. +# Choosing an xrpld container. - `std::vector` - For ordered containers with most insertions or erases at the end. diff --git a/include/xrpl/basics/UptimeClock.h b/include/xrpl/basics/UptimeClock.h index 4edd38d274..3f2e09bbe3 100644 --- a/include/xrpl/basics/UptimeClock.h +++ b/include/xrpl/basics/UptimeClock.h @@ -26,7 +26,7 @@ public: explicit UptimeClock() = default; static time_point - now(); // seconds since rippled program start + now(); // seconds since xrpld program start private: static std::atomic now_; diff --git a/include/xrpl/basics/random.h b/include/xrpl/basics/random.h index db66b303d4..6a09d8161b 100644 --- a/include/xrpl/basics/random.h +++ b/include/xrpl/basics/random.h @@ -17,13 +17,13 @@ static_assert( // NOLINTNEXTLINE(misc-redundant-expression) std::is_integral::value && std::is_unsigned::value, - "The Ripple default PRNG engine must return an unsigned integral type."); + "The XRPL default PRNG engine must return an unsigned integral type."); static_assert( // NOLINTNEXTLINE(misc-redundant-expression) std::numeric_limits::max() >= std::numeric_limits::max(), - "The Ripple default PRNG engine return must be at least 64 bits wide."); + "The XRPL default PRNG engine return must be at least 64 bits wide."); #endif namespace detail { diff --git a/include/xrpl/ledger/LedgerTiming.h b/include/xrpl/ledger/LedgerTiming.h index 33ccc671e2..8171beed3c 100644 --- a/include/xrpl/ledger/LedgerTiming.h +++ b/include/xrpl/ledger/LedgerTiming.h @@ -34,7 +34,7 @@ auto constexpr decreaseLedgerTimeResolutionEvery = 1; /** Calculates the close time resolution for the specified ledger. - The Ripple protocol uses binning to represent time intervals using only one + The XRPL protocol uses binning to represent time intervals using only one timestamp. This allows servers to derive a common time for the next ledger, without the need for perfectly synchronized clocks. The time resolution (i.e. the size of the intervals) is adjusted dynamically @@ -62,7 +62,7 @@ getNextLedgerTimeResolution( bool previousAgree, Seq ledgerSeq) { - XRPL_ASSERT(ledgerSeq != Seq{0}, "ripple:getNextLedgerTimeResolution : valid ledger sequence"); + XRPL_ASSERT(ledgerSeq != Seq{0}, "xrpl::getNextLedgerTimeResolution : valid ledger sequence"); using namespace std::chrono; // Find the current resolution: @@ -72,7 +72,7 @@ getNextLedgerTimeResolution( previousResolution); XRPL_ASSERT( iter != std::end(ledgerPossibleTimeResolutions), - "ripple:getNextLedgerTimeResolution : found time resolution"); + "xrpl::getNextLedgerTimeResolution : found time resolution"); // This should never happen, but just as a precaution if (iter == std::end(ledgerPossibleTimeResolutions)) diff --git a/include/xrpl/ledger/View.h b/include/xrpl/ledger/View.h index 55be01d677..615f644987 100644 --- a/include/xrpl/ledger/View.h +++ b/include/xrpl/ledger/View.h @@ -30,10 +30,10 @@ enum class SkipEntry : bool { No = false, Yes }; /** Determines whether the given expiration time has passed. In the XRP Ledger, expiration times are defined as the number of whole - seconds after the "Ripple Epoch" which, for historical reasons, is set + seconds after the "XRPL epoch" which, for historical reasons, is set to January 1, 2000 (00:00 UTC). - This is like the way the Unix epoch works, except the Ripple Epoch is + This is like the way the Unix epoch works, except the XRPL epoch is precisely 946,684,800 seconds after the Unix Epoch. See https://xrpl.org/basic-data-types.html#specifying-time diff --git a/include/xrpl/ledger/helpers/EscrowHelpers.h b/include/xrpl/ledger/helpers/EscrowHelpers.h index 70d780da3b..1680dbcad4 100644 --- a/include/xrpl/ledger/helpers/EscrowHelpers.h +++ b/include/xrpl/ledger/helpers/EscrowHelpers.h @@ -148,7 +148,7 @@ escrowUnlockApplyHelper( // if destination is not the issuer then transfer funds if (!receiverIssuer) { - auto const ter = rippleCredit(view, issuer, receiver, finalAmt, true, journal); + auto const ter = directSendNoFee(view, issuer, receiver, finalAmt, true, journal); if (!isTesSuccess(ter)) return ter; // LCOV_EXCL_LINE } @@ -216,7 +216,7 @@ escrowUnlockApplyHelper( // compute balance to transfer finalAmt = amount.value() - xferFee; } - return rippleUnlockEscrowMPT( + return unlockEscrowMPT( view, sender, receiver, diff --git a/include/xrpl/ledger/helpers/MPTokenHelpers.h b/include/xrpl/ledger/helpers/MPTokenHelpers.h index 9f7d639285..466486306c 100644 --- a/include/xrpl/ledger/helpers/MPTokenHelpers.h +++ b/include/xrpl/ledger/helpers/MPTokenHelpers.h @@ -142,14 +142,14 @@ removeEmptyHolding( //------------------------------------------------------------------------------ TER -rippleLockEscrowMPT( +lockEscrowMPT( ApplyView& view, AccountID const& uGrantorID, STAmount const& saAmount, beast::Journal j); TER -rippleUnlockEscrowMPT( +unlockEscrowMPT( ApplyView& view, AccountID const& uGrantorID, AccountID const& uGranteeID, diff --git a/include/xrpl/ledger/helpers/TokenHelpers.h b/include/xrpl/ledger/helpers/TokenHelpers.h index 74d1e4848e..908950a1e1 100644 --- a/include/xrpl/ledger/helpers/TokenHelpers.h +++ b/include/xrpl/ledger/helpers/TokenHelpers.h @@ -235,11 +235,11 @@ canTransfer(ReadView const& view, Asset const& asset, AccountID const& from, Acc // --> bCheckIssuer : normally require issuer to be involved. // [[nodiscard]] // nodiscard commented out so DirectStep.cpp compiles. -/** Calls static rippleCreditIOU if saAmount represents Issue. - * Calls static rippleCreditMPT if saAmount represents MPTIssue. +/** Calls static directSendNoFeeIOU if saAmount represents Issue. + * Calls static directSendNoFeeMPT if saAmount represents MPTIssue. */ TER -rippleCredit( +directSendNoFee( ApplyView& view, AccountID const& uSenderID, AccountID const& uReceiverID, diff --git a/include/xrpl/nodestore/README.md b/include/xrpl/nodestore/README.md index 4b228bfc9a..b78c99e27d 100644 --- a/include/xrpl/nodestore/README.md +++ b/include/xrpl/nodestore/README.md @@ -51,7 +51,7 @@ A blob containing the payload. Stored in the following format. --- The `NodeStore` provides an interface that stores, in a persistent database, a -collection of NodeObjects that rippled uses as its primary representation of +collection of NodeObjects that xrpld uses as its primary representation of ledger entries. All ledger entries are stored as NodeObjects and as such, need to be persisted between launches. If a NodeObject is accessed and is not in memory, it will be retrieved from the database. @@ -110,7 +110,7 @@ The `NodeStore.Timing` test is used to execute a set of read/write workloads to compare current available nodestore backends. It can be executed with: ``` -$rippled --unittest=NodeStoreTiming +$xrpld --unittest=NodeStoreTiming ``` It is also possible to use alternate DB config params by passing config strings @@ -143,10 +143,10 @@ Through various executions and profiling some conclusions are presented below. just after ledger close, then that would provide similar, but more predictable guarantees. It would also remove an unneeded thread and unnecessary memory usage. An alternative point of view is that because there will always be many - other rippled instances running there is no need for such guarantees. The nodes + other xrpld instances running there is no need for such guarantees. The nodes will always be available from another peer. -- Lookup in a block was previously using binary search. With rippled's use case +- Lookup in a block was previously using binary search. With xrpld's use case it is highly unlikely that two adjacent key/values will ever be requested one after the other. Therefore hash indexing of blocks makes much more sense. Rocksdb has a number of options for hash indexing both memtables and blocks and diff --git a/include/xrpl/proto/org/xrpl/rpc/v1/README.md b/include/xrpl/proto/org/xrpl/rpc/v1/README.md index e9b9b55841..e8566ec179 100644 --- a/include/xrpl/proto/org/xrpl/rpc/v1/README.md +++ b/include/xrpl/proto/org/xrpl/rpc/v1/README.md @@ -1,8 +1,8 @@ # Protocol buffer definitions for gRPC -This folder contains the protocol buffer definitions used by the rippled gRPC API. +This folder contains the protocol buffer definitions used by the xrpld gRPC API. The gRPC API attempts to mimic the JSON/Websocket API as much as possible. -As of April 2020, the gRPC API supports a subset of the full rippled API: +As of April 2020, the gRPC API supports a subset of the full xrpld API: tx, account_tx, account_info, fee and submit. ### Making Changes @@ -63,7 +63,7 @@ templated `CallData` class in GRPCServerImpl::setupListeners(). The template parameters should be the request type and the response type. Finally, define the handler itself in the appropriate file under the -src/ripple/rpc/handlers folder. If the method already has a JSON/Websocket +src/xrpld/rpc/handlers folder. If the method already has a JSON/Websocket equivalent, write the gRPC handler in the same file, and abstract common logic into helper functions (see Tx.cpp or AccountTx.cpp for an example). diff --git a/include/xrpl/proto/xrpl.proto b/include/xrpl/proto/xrpl.proto index 0af7deb35d..cd82ed24e6 100644 --- a/include/xrpl/proto/xrpl.proto +++ b/include/xrpl/proto/xrpl.proto @@ -36,7 +36,7 @@ enum MessageType { /* Provides the current ephemeral key for a validator. */ message TMManifest { - // A Manifest object in the Ripple serialization format. + // A Manifest object in the XRPL serialization format. required bytes stobject = 1; } diff --git a/include/xrpl/protocol/AccountID.h b/include/xrpl/protocol/AccountID.h index bc57058d9e..641f2f15c1 100644 --- a/include/xrpl/protocol/AccountID.h +++ b/include/xrpl/protocol/AccountID.h @@ -2,7 +2,7 @@ #include // VFALCO Uncomment when the header issues are resolved -// #include +// #include #include #include #include diff --git a/include/xrpl/protocol/BuildInfo.h b/include/xrpl/protocol/BuildInfo.h index cc7633cfe1..522747bc94 100644 --- a/include/xrpl/protocol/BuildInfo.h +++ b/include/xrpl/protocol/BuildInfo.h @@ -33,7 +33,7 @@ getFullVersionString(); X: 16 bits identifying the particular implementation Y: 48 bits of data specific to the implementation - The rippled-specific format (implementation ID is: 0x18 0x3B) is: + The xrpld-specific format (implementation ID is: 0x18 0x3B) is: 00011000-00111011-MMMMMMMM-mmmmmmmm-pppppppp-TTNNNNNN-00000000-00000000 @@ -55,23 +55,23 @@ encodeSoftwareVersion(std::string_view versionStr); std::uint64_t getEncodedVersion(); -/** Check if the encoded software version is a rippled software version. +/** Check if the encoded software version is an xrpld software version. @param version another node's encoded software version - @return true if the version is a rippled software version, false otherwise + @return true if the version is an xrpld software version, false otherwise */ bool -isRippledVersion(std::uint64_t version); +isXrpldVersion(std::uint64_t version); -/** Check if the version is newer than the local node's rippled software +/** Check if the version is newer than the local node's xrpld software version. @param version another node's encoded software version - @return true if the version is newer than the local node's rippled software + @return true if the version is newer than the local node's xrpld software version, false otherwise. @note This function only understands version numbers that are generated by - rippled. Please see the encodeSoftwareVersion() function for detail. + xrpld. Please see the encodeSoftwareVersion() function for detail. */ bool isNewerVersion(std::uint64_t version); diff --git a/include/xrpl/protocol/ErrorCodes.h b/include/xrpl/protocol/ErrorCodes.h index c138d5d39a..2f16415bdf 100644 --- a/include/xrpl/protocol/ErrorCodes.h +++ b/include/xrpl/protocol/ErrorCodes.h @@ -153,7 +153,7 @@ enum warning_code_i { warnRPC_AMENDMENT_BLOCKED = 1002, warnRPC_EXPIRED_VALIDATOR_LIST = 1003, // unused = 1004 - warnRPC_FIELDS_DEPRECATED = 2004, // rippled needs to maintain + warnRPC_FIELDS_DEPRECATED = 2004, // xrpld needs to maintain // compatibility with Clio on this code. }; diff --git a/include/xrpl/protocol/Feature.h b/include/xrpl/protocol/Feature.h index 0ff02fdac2..112f66f4a1 100644 --- a/include/xrpl/protocol/Feature.h +++ b/include/xrpl/protocol/Feature.h @@ -37,10 +37,10 @@ * 5) If a supported feature (`Supported::yes`) was _ever_ in a released * version, it can never be changed back to `Supported::no`, because * it _may_ still become enabled at any time. This would cause newer - * versions of `rippled` to become amendment blocked. + * versions of `xrpld` to become amendment blocked. * Instead, to prevent newer versions from voting on the feature, use * `VoteBehavior::Obsolete`. Obsolete features can not be voted for - * by any versions of `rippled` built with that setting, but will still + * by any versions of `xrpld` built with that setting, but will still * work correctly if they get enabled. If a feature remains obsolete * for long enough that _all_ clients that could vote for it are * amendment blocked, the feature can be removed from the code diff --git a/include/xrpl/protocol/PublicKey.h b/include/xrpl/protocol/PublicKey.h index 67e55ca136..64ced93ffb 100644 --- a/include/xrpl/protocol/PublicKey.h +++ b/include/xrpl/protocol/PublicKey.h @@ -21,7 +21,7 @@ namespace xrpl { Public keys are used in the public-key cryptography system used to verify signatures attached to messages. - The format of the public key is Ripple specific, + The format of the public key is XRPL specific, information needed to determine the cryptosystem parameters used is stored inside the key. diff --git a/include/xrpl/protocol/Quality.h b/include/xrpl/protocol/Quality.h index e9451d44ed..851e34d396 100644 --- a/include/xrpl/protocol/Quality.h +++ b/include/xrpl/protocol/Quality.h @@ -78,7 +78,7 @@ operator!=(TAmounts const& lhs, TAmounts const& rhs) noexcept //------------------------------------------------------------------------------ -// Ripple specific constant used for parsing qualities and other things +// XRPL specific constant used for parsing qualities and other things #define QUALITY_ONE 1'000'000'000 /** Represents the logical ratio of output currency to input currency. diff --git a/include/xrpl/protocol/README.md b/include/xrpl/protocol/README.md index a6e8d24982..d679c583d4 100644 --- a/include/xrpl/protocol/README.md +++ b/include/xrpl/protocol/README.md @@ -22,7 +22,7 @@ optional fields easier to read: - The operation `x[~sfFoo]` means "return the value of 'Foo' if it exists, or nothing if it doesn't." This usage of the tilde/bitwise NOT operator is not standard outside of the - `rippled` codebase. + `xrpld` codebase. - As a consequence of this, `x[~sfFoo] = y[~sfFoo]` assigns the value of Foo from y to x, including omitting Foo from x if it doesn't exist in y. @@ -33,7 +33,7 @@ or may not hold a value. For things not guaranteed to exist, you use `x[~sfFoo]` because you want such a container. It avoids having to look something up twice, once just to see if it exists and a second time to get/set its value. -([Real example](https://github.com/ripple/rippled/blob/35f4698aed5dce02f771b34cfbb690495cb5efcc/src/ripple/app/tx/impl/PayChan.cpp#L229-L236)) +([Real example](https://github.com/XRPLF/rippled/blob/35f4698aed5dce02f771b34cfbb690495cb5efcc/src/ripple/app/tx/impl/PayChan.cpp#L229-L236)) The source of this "type magic" is in [SField.h](./SField.h#L296-L302). diff --git a/include/xrpl/protocol/STAccount.h b/include/xrpl/protocol/STAccount.h index 76c8f24b7b..b1f112fbb2 100644 --- a/include/xrpl/protocol/STAccount.h +++ b/include/xrpl/protocol/STAccount.h @@ -13,7 +13,7 @@ class STAccount final : public STBase, public CountedObject private: // The original implementation of STAccount kept the value in an STBlob. // But an STAccount is always 160 bits, so we can store it with less - // overhead in a xrpl::uint160. However, so the serialized format of the + // overhead in an xrpl::uint160. However, so the serialized format of the // STAccount stays unchanged, we serialize and deserialize like an STBlob. AccountID value_; bool default_; diff --git a/include/xrpl/protocol/SecretKey.h b/include/xrpl/protocol/SecretKey.h index dd5566915f..530b6fc35f 100644 --- a/include/xrpl/protocol/SecretKey.h +++ b/include/xrpl/protocol/SecretKey.h @@ -118,7 +118,7 @@ derivePublicKey(KeyType type, SecretKey const& sk); /** Generate a key pair deterministically. - This algorithm is specific to Ripple: + This algorithm is specific to the XRPL: For secp256k1 key pairs, the seed is converted to a Generator and used to compute the key pair diff --git a/include/xrpl/protocol/Seed.h b/include/xrpl/protocol/Seed.h index 5b490be12e..04e8481c8f 100644 --- a/include/xrpl/protocol/Seed.h +++ b/include/xrpl/protocol/Seed.h @@ -80,7 +80,7 @@ randomSeed(); /** Generate a seed deterministically. - The algorithm is specific to Ripple: + The algorithm is specific to the XRPL: The seed is calculated as the first 128 bits of the SHA512-Half of the string text excluding diff --git a/include/xrpl/protocol/Units.h b/include/xrpl/protocol/Units.h index b377c80e26..196464fa16 100644 --- a/include/xrpl/protocol/Units.h +++ b/include/xrpl/protocol/Units.h @@ -21,7 +21,7 @@ namespace unit { struct dropTag; /** "fee levels" are used by the transaction queue to compare the relative cost of transactions that require different levels of effort to process. - See also: src/ripple/app/misc/FeeEscalation.md#fee-level */ + See also: src/xrpld/app/misc/FeeEscalation.md#fee-level */ struct feelevelTag; /** unitless values are plain scalars wrapped in a ValueUnit. They are used for calculations in this header. */ diff --git a/include/xrpl/protocol/detail/ledger_entries.macro b/include/xrpl/protocol/detail/ledger_entries.macro index 216f404bec..7955dcb66c 100644 --- a/include/xrpl/protocol/detail/ledger_entries.macro +++ b/include/xrpl/protocol/detail/ledger_entries.macro @@ -578,7 +578,7 @@ LEDGER_ENTRY(ltLOAN, 0x0089, Loan, loan, ({ // The unrounded true total value of the loan. // // - TrueTotalPrincipalOutstanding can be computed using the algorithm - // in the ripple::detail::loanPrincipalFromPeriodicPayment function. + // in the xrpl::detail::loanPrincipalFromPeriodicPayment function. // // - TrueTotalInterestOutstanding = TrueTotalLoanValue - // TrueTotalPrincipalOutstanding diff --git a/include/xrpl/protocol/digest.h b/include/xrpl/protocol/digest.h index 9e6606f51f..7664069e1c 100644 --- a/include/xrpl/protocol/digest.h +++ b/include/xrpl/protocol/digest.h @@ -100,7 +100,7 @@ using sha512_hasher = openssl_sha512_hasher; /** Returns the RIPEMD-160 digest of the SHA256 hash of the message. This operation is used to compute the 160-bit identifier - representing a Ripple account, from a message. Typically the + representing an XRPL account, from a message. Typically the message is the public key of the account - which is not stored in the account root. diff --git a/include/xrpl/protocol/jss.h b/include/xrpl/protocol/jss.h index c12600fe61..ecd9d65b4e 100644 --- a/include/xrpl/protocol/jss.h +++ b/include/xrpl/protocol/jss.h @@ -511,7 +511,7 @@ JSS(response); // websocket JSS(result); // RPC JSS(ripple_lines); // out: NetworkOPs JSS(ripple_state); // in: LedgerEntr -JSS(ripplerpc); // ripple RPC version +JSS(ripplerpc); // XRPL RPC version JSS(role); // out: Ping.cpp JSS(rpc); // JSS(rt_accounts); // in: Subscribe, Unsubscribe diff --git a/include/xrpl/resource/README.md b/include/xrpl/resource/README.md index e525ce83e3..545d4e9ca0 100644 --- a/include/xrpl/resource/README.md +++ b/include/xrpl/resource/README.md @@ -17,7 +17,7 @@ performed, or simply disconnecting the endpoint. Currently, consumption endpoints include websocket connections used to service clients, and peer connections used to create the peer to peer -overlay network implementing the Ripple protocol. +overlay network implementing the XRPL protocol. The current "balance" of a Consumer represents resource consumption debt or credit. Debt is accrued when bad loads are imposed. Credit is @@ -72,6 +72,6 @@ drop connections to those IP addresses that occur commonly in the gossip. ## Access -In rippled, the Application holds a unique instance of Resource::Manager, +In xrpld, the Application holds a unique instance of Resource::Manager, which may be retrieved by calling the method `Application::getResourceManager()`. diff --git a/include/xrpl/server/Manifest.h b/include/xrpl/server/Manifest.h index 02c370561a..2532a3c5bf 100644 --- a/include/xrpl/server/Manifest.h +++ b/include/xrpl/server/Manifest.h @@ -15,9 +15,9 @@ namespace xrpl { Validator key manifests ----------------------- - Suppose the secret keys installed on a Ripple validator are compromised. Not + Suppose the secret keys installed on an XRPL validator are compromised. Not only do you have to generate and install new key pairs on each validator, - EVERY rippled needs to have its config updated with the new public keys, and + EVERY xrpld needs to have its config updated with the new public keys, and is vulnerable to forged validation signatures until this is done. The solution is a new layer of indirection: A master secret key under restrictive access control is used to sign a "manifest": essentially, a @@ -39,11 +39,11 @@ namespace xrpl { seen for that validator, if any. On startup, the [validator_token] config entry (which contains the manifest for this validator) is decoded and added to the manifest cache. Other manifests are added as "gossip" - received from rippled peers. + received from xrpld peers. When an ephemeral key is compromised, a new signing key pair is created, along with a new manifest vouching for it (with a higher sequence number), - signed by the master key. When a rippled peer receives the new manifest, + signed by the master key. When an xrpld peer receives the new manifest, it verifies it with the master key and (assuming it's valid) discards the old ephemeral key and stores the new one. If the master key itself gets compromised, a manifest with sequence number 0xFFFFFFFF will supersede a diff --git a/include/xrpl/server/NetworkOPs.h b/include/xrpl/server/NetworkOPs.h index 75f1e0e1b2..16ec4a4ec0 100644 --- a/include/xrpl/server/NetworkOPs.h +++ b/include/xrpl/server/NetworkOPs.h @@ -63,8 +63,8 @@ enum class OperatingMode { needed. A backend application or local client can trust a local instance of - rippled / NetworkOPs. However, client software connecting to non-local - instances of rippled will need to be hardened to protect against hostile + xrpld / NetworkOPs. However, client software connecting to non-local + instances of xrpld will need to be hardened to protect against hostile or unreliable servers. */ class NetworkOPs : public InfoSub::Source diff --git a/include/xrpl/shamap/README.md b/include/xrpl/shamap/README.md index 419918c0cb..ae37d23ac3 100644 --- a/include/xrpl/shamap/README.md +++ b/include/xrpl/shamap/README.md @@ -112,7 +112,7 @@ When a `SHAMap` decides that it is safe to share a node of its own, it sets the node's sequence number to 0 (a `SHAMap` never has a sequence number of 0). This is done for every node in the trie when `SHAMap::walkSubTree` is executed. -Note that other objects in rippled also have sequence numbers (e.g. ledgers). +Note that other objects in xrpld also have sequence numbers (e.g. ledgers). The `SHAMap` and node sequence numbers should not be confused with these other sequence numbers (no relation). diff --git a/include/xrpl/tx/paths/detail/StrandFlow.h b/include/xrpl/tx/paths/detail/StrandFlow.h index 21cf04dc07..1f05ae1a5b 100644 --- a/include/xrpl/tx/paths/detail/StrandFlow.h +++ b/include/xrpl/tx/paths/detail/StrandFlow.h @@ -771,7 +771,7 @@ flow( { // Rounding in the payment engine is causing this assert to // sometimes fire with "dust" amounts. This is causing issues when - // running debug builds of rippled. While this issue still needs to + // running debug builds of xrpld. While this issue still needs to // be resolved, the assert is causing more harm than good at this // point. // UNREACHABLE("xrpl::flow : rounding error"); diff --git a/sanitizers/suppressions/tsan.supp b/sanitizers/suppressions/tsan.supp index 74f3371e68..702eef1e3d 100644 --- a/sanitizers/suppressions/tsan.supp +++ b/sanitizers/suppressions/tsan.supp @@ -7,7 +7,7 @@ race:boost/context/ race:boost/asio/executor.hpp race:boost::asio -# Suppress tsan related issues in rippled code. +# Suppress tsan related issues in xrpld code. race:src/libxrpl/basics/make_SSLContext.cpp race:src/libxrpl/basics/Number.cpp race:src/libxrpl/json/json_value.cpp @@ -46,7 +46,7 @@ race:xrpl/server/detail/ServerImpl.h race:xrpl/nodestore/detail/DatabaseNodeImp.h race:src/libxrpl/beast/utility/beast_Journal.cpp race:src/test/beast/LexicalCast_test.cpp -race:ripple::ServerHandler +race:ServerHandler # More suppressions in external library code. race:crtstuff.c @@ -65,7 +65,7 @@ deadlock:src/xrpld/app/misc/detail/ValidatorSite.cpp signal:src/libxrpl/beast/utility/beast_Journal.cpp signal:src/xrpld/core/detail/Workers.cpp signal:src/xrpld/core/JobQueue.cpp -signal:ripple::Workers::Worker +signal:Workers::Worker # Aggressive suppressing of deadlock tsan errors deadlock:pthread_create diff --git a/sanitizers/suppressions/ubsan.supp b/sanitizers/suppressions/ubsan.supp index a02cbb17de..1e07065ebd 100644 --- a/sanitizers/suppressions/ubsan.supp +++ b/sanitizers/suppressions/ubsan.supp @@ -74,7 +74,7 @@ vptr:boost # Google protobuf undefined:protobuf -# Suppress UBSan errors in rippled code by source file path +# Suppress UBSan errors in xrpld code by source file path undefined:src/libxrpl/basics/base64.cpp undefined:src/libxrpl/basics/Number.cpp undefined:src/libxrpl/beast/utility/beast_Journal.cpp @@ -165,7 +165,7 @@ unsigned-integer-overflow:xrpl/nodestore/detail/varint.h unsigned-integer-overflow:xrpl/peerfinder/detail/Counts.h unsigned-integer-overflow:xrpl/protocol/nft.h -# Rippled intentional overflows and operations +# Xrpld intentional overflows and operations # STAmount uses intentional negation of INT64_MIN and overflow in arithmetic signed-integer-overflow:src/libxrpl/protocol/STAmount.cpp unsigned-integer-overflow:src/libxrpl/protocol/STAmount.cpp diff --git a/src/libxrpl/basics/UptimeClock.cpp b/src/libxrpl/basics/UptimeClock.cpp index 521a6a1313..3d1664482b 100644 --- a/src/libxrpl/basics/UptimeClock.cpp +++ b/src/libxrpl/basics/UptimeClock.cpp @@ -9,14 +9,14 @@ namespace xrpl { std::atomic UptimeClock::now_{0}; // seconds since start std::atomic UptimeClock::stop_{false}; // stop update thread -// On rippled shutdown, cancel and wait for the update thread +// On xrpld shutdown, cancel and wait for the update thread UptimeClock::update_thread::~update_thread() { if (joinable()) { stop_ = true; // This join() may take up to a 1s, but happens only - // once at rippled shutdown. + // once at xrpld shutdown. join(); } } @@ -40,7 +40,7 @@ UptimeClock::start_clock() }}; } -// This actually measures time since first use, instead of since rippled start. +// This actually measures time since first use, instead of since xrpld start. // However the difference between these two epochs is a small fraction of a // second and unimportant. @@ -50,7 +50,7 @@ UptimeClock::now() // start the update thread on first use static auto const init = start_clock(); - // Return the number of seconds since rippled start + // Return the number of seconds since xrpld start return time_point{duration{now_}}; } diff --git a/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp b/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp index 90165e3d16..05e4fe1448 100644 --- a/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp +++ b/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp @@ -488,25 +488,20 @@ canTransfer( } TER -rippleLockEscrowMPT( - ApplyView& view, - AccountID const& sender, - STAmount const& amount, - beast::Journal j) +lockEscrowMPT(ApplyView& view, AccountID const& sender, STAmount const& amount, beast::Journal j) { auto const mptIssue = amount.get(); auto const mptID = keylet::mptIssuance(mptIssue.getMptID()); auto sleIssuance = view.peek(mptID); if (!sleIssuance) { // LCOV_EXCL_START - JLOG(j.error()) << "rippleLockEscrowMPT: MPT issuance not found for " - << mptIssue.getMptID(); + JLOG(j.error()) << "lockEscrowMPT: MPT issuance not found for " << mptIssue.getMptID(); return tecOBJECT_NOT_FOUND; } // LCOV_EXCL_STOP if (amount.getIssuer() == sender) { // LCOV_EXCL_START - JLOG(j.error()) << "rippleLockEscrowMPT: sender is the issuer, cannot lock MPTs."; + JLOG(j.error()) << "lockEscrowMPT: sender is the issuer, cannot lock MPTs."; return tecINTERNAL; } // LCOV_EXCL_STOP @@ -517,7 +512,7 @@ rippleLockEscrowMPT( auto sle = view.peek(mptokenID); if (!sle) { // LCOV_EXCL_START - JLOG(j.error()) << "rippleLockEscrowMPT: MPToken not found for " << sender; + JLOG(j.error()) << "lockEscrowMPT: MPToken not found for " << sender; return tecOBJECT_NOT_FOUND; } // LCOV_EXCL_STOP @@ -527,8 +522,8 @@ rippleLockEscrowMPT( // Underflow check for subtraction if (!canSubtract(STAmount(mptIssue, amt), STAmount(mptIssue, pay))) { // LCOV_EXCL_START - JLOG(j.error()) << "rippleLockEscrowMPT: insufficient MPTAmount for " - << to_string(sender) << ": " << amt << " < " << pay; + JLOG(j.error()) << "lockEscrowMPT: insufficient MPTAmount for " << to_string(sender) + << ": " << amt << " < " << pay; return tecINTERNAL; } // LCOV_EXCL_STOP @@ -539,8 +534,8 @@ rippleLockEscrowMPT( if (!canAdd(STAmount(mptIssue, locked), STAmount(mptIssue, pay))) { // LCOV_EXCL_START - JLOG(j.error()) << "rippleLockEscrowMPT: overflow on locked amount for " - << to_string(sender) << ": " << locked << " + " << pay; + JLOG(j.error()) << "lockEscrowMPT: overflow on locked amount for " << to_string(sender) + << ": " << locked << " + " << pay; return tecINTERNAL; } // LCOV_EXCL_STOP @@ -565,7 +560,7 @@ rippleLockEscrowMPT( // Overflow check for addition if (!canAdd(STAmount(mptIssue, issuanceEscrowed), STAmount(mptIssue, pay))) { // LCOV_EXCL_START - JLOG(j.error()) << "rippleLockEscrowMPT: overflow on issuance " + JLOG(j.error()) << "lockEscrowMPT: overflow on issuance " "locked amount for " << mptIssue.getMptID() << ": " << issuanceEscrowed << " + " << pay; return tecINTERNAL; @@ -586,7 +581,7 @@ rippleLockEscrowMPT( } TER -rippleUnlockEscrowMPT( +unlockEscrowMPT( ApplyView& view, AccountID const& sender, AccountID const& receiver, @@ -596,8 +591,7 @@ rippleUnlockEscrowMPT( { if (!view.rules().enabled(fixTokenEscrowV1)) { - XRPL_ASSERT( - netAmount == grossAmount, "xrpl::rippleUnlockEscrowMPT : netAmount == grossAmount"); + XRPL_ASSERT(netAmount == grossAmount, "xrpl::unlockEscrowMPT : netAmount == grossAmount"); } auto const& issuer = netAmount.getIssuer(); @@ -606,8 +600,7 @@ rippleUnlockEscrowMPT( auto sleIssuance = view.peek(mptID); if (!sleIssuance) { // LCOV_EXCL_START - JLOG(j.error()) << "rippleUnlockEscrowMPT: MPT issuance not found for " - << mptIssue.getMptID(); + JLOG(j.error()) << "unlockEscrowMPT: MPT issuance not found for " << mptIssue.getMptID(); return tecOBJECT_NOT_FOUND; } // LCOV_EXCL_STOP @@ -615,7 +608,7 @@ rippleUnlockEscrowMPT( { if (!sleIssuance->isFieldPresent(sfLockedAmount)) { // LCOV_EXCL_START - JLOG(j.error()) << "rippleUnlockEscrowMPT: no locked amount in issuance for " + JLOG(j.error()) << "unlockEscrowMPT: no locked amount in issuance for " << mptIssue.getMptID(); return tecINTERNAL; } // LCOV_EXCL_STOP @@ -626,7 +619,7 @@ rippleUnlockEscrowMPT( // Underflow check for subtraction if (!canSubtract(STAmount(mptIssue, locked), STAmount(mptIssue, redeem))) { // LCOV_EXCL_START - JLOG(j.error()) << "rippleUnlockEscrowMPT: insufficient locked amount for " + JLOG(j.error()) << "unlockEscrowMPT: insufficient locked amount for " << mptIssue.getMptID() << ": " << locked << " < " << redeem; return tecINTERNAL; } // LCOV_EXCL_STOP @@ -650,7 +643,7 @@ rippleUnlockEscrowMPT( auto sle = view.peek(mptokenID); if (!sle) { // LCOV_EXCL_START - JLOG(j.error()) << "rippleUnlockEscrowMPT: MPToken not found for " << receiver; + JLOG(j.error()) << "unlockEscrowMPT: MPToken not found for " << receiver; return tecOBJECT_NOT_FOUND; } // LCOV_EXCL_STOP @@ -660,8 +653,8 @@ rippleUnlockEscrowMPT( // Overflow check for addition if (!canAdd(STAmount(mptIssue, current), STAmount(mptIssue, delta))) { // LCOV_EXCL_START - JLOG(j.error()) << "rippleUnlockEscrowMPT: overflow on MPTAmount for " - << to_string(receiver) << ": " << current << " + " << delta; + JLOG(j.error()) << "unlockEscrowMPT: overflow on MPTAmount for " << to_string(receiver) + << ": " << current << " + " << delta; return tecINTERNAL; } // LCOV_EXCL_STOP @@ -677,7 +670,7 @@ rippleUnlockEscrowMPT( // Underflow check for subtraction if (!canSubtract(STAmount(mptIssue, outstanding), STAmount(mptIssue, redeem))) { // LCOV_EXCL_START - JLOG(j.error()) << "rippleUnlockEscrowMPT: insufficient outstanding amount for " + JLOG(j.error()) << "unlockEscrowMPT: insufficient outstanding amount for " << mptIssue.getMptID() << ": " << outstanding << " < " << redeem; return tecINTERNAL; } // LCOV_EXCL_STOP @@ -688,7 +681,7 @@ rippleUnlockEscrowMPT( if (issuer == sender) { // LCOV_EXCL_START - JLOG(j.error()) << "rippleUnlockEscrowMPT: sender is the issuer, " + JLOG(j.error()) << "unlockEscrowMPT: sender is the issuer, " "cannot unlock MPTs."; return tecINTERNAL; } // LCOV_EXCL_STOP @@ -697,14 +690,13 @@ rippleUnlockEscrowMPT( auto sle = view.peek(mptokenID); if (!sle) { // LCOV_EXCL_START - JLOG(j.error()) << "rippleUnlockEscrowMPT: MPToken not found for " << sender; + JLOG(j.error()) << "unlockEscrowMPT: MPToken not found for " << sender; return tecOBJECT_NOT_FOUND; } // LCOV_EXCL_STOP if (!sle->isFieldPresent(sfLockedAmount)) { // LCOV_EXCL_START - JLOG(j.error()) << "rippleUnlockEscrowMPT: no locked amount in MPToken for " - << to_string(sender); + JLOG(j.error()) << "unlockEscrowMPT: no locked amount in MPToken for " << to_string(sender); return tecINTERNAL; } // LCOV_EXCL_STOP @@ -714,8 +706,8 @@ rippleUnlockEscrowMPT( // Underflow check for subtraction if (!canSubtract(STAmount(mptIssue, locked), STAmount(mptIssue, delta))) { // LCOV_EXCL_START - JLOG(j.error()) << "rippleUnlockEscrowMPT: insufficient locked amount for " - << to_string(sender) << ": " << locked << " < " << delta; + JLOG(j.error()) << "unlockEscrowMPT: insufficient locked amount for " << to_string(sender) + << ": " << locked << " < " << delta; return tecINTERNAL; } // LCOV_EXCL_STOP @@ -741,7 +733,7 @@ rippleUnlockEscrowMPT( // Underflow check for subtraction if (!canSubtract(STAmount(mptIssue, outstanding), STAmount(mptIssue, diff))) { // LCOV_EXCL_START - JLOG(j.error()) << "rippleUnlockEscrowMPT: insufficient outstanding amount for " + JLOG(j.error()) << "unlockEscrowMPT: insufficient outstanding amount for " << mptIssue.getMptID() << ": " << outstanding << " < " << diff; return tecINTERNAL; } // LCOV_EXCL_STOP diff --git a/src/libxrpl/ledger/helpers/TokenHelpers.cpp b/src/libxrpl/ledger/helpers/TokenHelpers.cpp index 8d2b0d5fff..332cfd83b2 100644 --- a/src/libxrpl/ledger/helpers/TokenHelpers.cpp +++ b/src/libxrpl/ledger/helpers/TokenHelpers.cpp @@ -513,7 +513,7 @@ canTransfer(ReadView const& view, Asset const& asset, AccountID const& from, Acc // - Create trust line if needed. // --> bCheckIssuer : normally require issuer to be involved. static TER -rippleCreditIOU( +directSendNoFeeIOU( ApplyView& view, AccountID const& uSenderID, AccountID const& uReceiverID, @@ -527,20 +527,21 @@ rippleCreditIOU( // Make sure issuer is involved. XRPL_ASSERT( !bCheckIssuer || uSenderID == issuer || uReceiverID == issuer, - "xrpl::rippleCreditIOU : matching issuer or don't care"); + "xrpl::directSendNoFeeIOU : matching issuer or don't care"); (void)issuer; // Disallow sending to self. - XRPL_ASSERT(uSenderID != uReceiverID, "xrpl::rippleCreditIOU : sender is not receiver"); + XRPL_ASSERT(uSenderID != uReceiverID, "xrpl::directSendNoFeeIOU : sender is not receiver"); bool const bSenderHigh = uSenderID > uReceiverID; auto const index = keylet::line(uSenderID, uReceiverID, currency); XRPL_ASSERT( - !isXRP(uSenderID) && uSenderID != noAccount(), "xrpl::rippleCreditIOU : sender is not XRP"); + !isXRP(uSenderID) && uSenderID != noAccount(), + "xrpl::directSendNoFeeIOU : sender is not XRP"); XRPL_ASSERT( !isXRP(uReceiverID) && uReceiverID != noAccount(), - "xrpl::rippleCreditIOU : receiver is not XRP"); + "xrpl::directSendNoFeeIOU : receiver is not XRP"); // If the line exists, modify it accordingly. if (auto const sleRippleState = view.peek(index)) @@ -556,7 +557,7 @@ rippleCreditIOU( saBalance -= saAmount; - JLOG(j.trace()) << "rippleCreditIOU: " << to_string(uSenderID) << " -> " + JLOG(j.trace()) << "directSendNoFeeIOU: " << to_string(uSenderID) << " -> " << to_string(uReceiverID) << " : before=" << saBefore.getFullText() << " amount=" << saAmount.getFullText() << " after=" << saBalance.getFullText(); @@ -602,7 +603,7 @@ rippleCreditIOU( // Want to reflect balance to zero even if we are deleting line. sleRippleState->setFieldAmount(sfBalance, saBalance); - // ONLY: Adjust ripple balance. + // ONLY: Adjust balance. if (bDelete) { @@ -623,7 +624,7 @@ rippleCreditIOU( saBalance.setIssuer(noAccount()); - JLOG(j.debug()) << "rippleCreditIOU: " + JLOG(j.debug()) << "directSendNoFeeIOU: " "create line: " << to_string(uSenderID) << " -> " << to_string(uReceiverID) << " : " << saAmount.getFullText(); @@ -656,7 +657,7 @@ rippleCreditIOU( // --> saAmount: Amount/currency/issuer to deliver to receiver. // <-- saActual: Amount actually cost. Sender pays fees. static TER -rippleSendIOU( +directSendNoLimitIOU( ApplyView& view, AccountID const& uSenderID, AccountID const& uReceiverID, @@ -669,13 +670,13 @@ rippleSendIOU( XRPL_ASSERT( !isXRP(uSenderID) && !isXRP(uReceiverID), - "xrpl::rippleSendIOU : neither sender nor receiver is XRP"); - XRPL_ASSERT(uSenderID != uReceiverID, "xrpl::rippleSendIOU : sender is not receiver"); + "xrpl::directSendNoLimitIOU : neither sender nor receiver is XRP"); + XRPL_ASSERT(uSenderID != uReceiverID, "xrpl::directSendNoLimitIOU : sender is not receiver"); if (uSenderID == issuer || uReceiverID == issuer || issuer == noAccount()) { // Direct send: redeeming IOUs and/or sending own IOUs. - auto const ter = rippleCreditIOU(view, uSenderID, uReceiverID, saAmount, false, j); + auto const ter = directSendNoFeeIOU(view, uSenderID, uReceiverID, saAmount, false, j); if (!isTesSuccess(ter)) return ter; saActual = saAmount; @@ -689,14 +690,14 @@ rippleSendIOU( saActual = (waiveFee == WaiveTransferFee::Yes) ? saAmount : multiply(saAmount, transferRate(view, issuer)); - JLOG(j.debug()) << "rippleSendIOU> " << to_string(uSenderID) << " - > " + JLOG(j.debug()) << "directSendNoLimitIOU> " << to_string(uSenderID) << " - > " << to_string(uReceiverID) << " : deliver=" << saAmount.getFullText() << " cost=" << saActual.getFullText(); - TER terResult = rippleCreditIOU(view, issuer, uReceiverID, saAmount, true, j); + TER terResult = directSendNoFeeIOU(view, issuer, uReceiverID, saAmount, true, j); if (tesSUCCESS == terResult) - terResult = rippleCreditIOU(view, uSenderID, issuer, saActual, true, j); + terResult = directSendNoFeeIOU(view, uSenderID, issuer, saActual, true, j); return terResult; } @@ -705,7 +706,7 @@ rippleSendIOU( // --> receivers: Amount/currency/issuer to deliver to receivers. // <-- saActual: Amount actually cost to sender. Sender pays fees. static TER -rippleSendMultiIOU( +directSendNoLimitMultiIOU( ApplyView& view, AccountID const& senderID, Issue const& issue, @@ -716,7 +717,7 @@ rippleSendMultiIOU( { auto const& issuer = issue.getIssuer(); - XRPL_ASSERT(!isXRP(senderID), "xrpl::rippleSendMultiIOU : sender is not XRP"); + XRPL_ASSERT(!isXRP(senderID), "xrpl::directSendNoLimitMultiIOU : sender is not XRP"); // These may diverge STAmount takeFromSender{issue}; @@ -734,15 +735,15 @@ rippleSendMultiIOU( if (!amount || (senderID == receiverID)) continue; - XRPL_ASSERT(!isXRP(receiverID), "xrpl::rippleSendMultiIOU : receiver is not XRP"); + XRPL_ASSERT(!isXRP(receiverID), "xrpl::directSendNoLimitMultiIOU : receiver is not XRP"); if (senderID == issuer || receiverID == issuer || issuer == noAccount()) { // Direct send: redeeming IOUs and/or sending own IOUs. - if (auto const ter = rippleCreditIOU(view, senderID, receiverID, amount, false, j)) + if (auto const ter = directSendNoFeeIOU(view, senderID, receiverID, amount, false, j)) return ter; actual += amount; - // Do not add amount to takeFromSender, because rippleCreditIOU took + // Do not add amount to takeFromSender, because directSendNoFeeIOU took // it. continue; @@ -758,17 +759,18 @@ rippleSendMultiIOU( actual += actualSend; takeFromSender += actualSend; - JLOG(j.debug()) << "rippleSendMultiIOU> " << to_string(senderID) << " - > " + JLOG(j.debug()) << "directSendNoLimitMultiIOU> " << to_string(senderID) << " - > " << to_string(receiverID) << " : deliver=" << amount.getFullText() << " cost=" << actual.getFullText(); - if (TER const terResult = rippleCreditIOU(view, issuer, receiverID, amount, true, j)) + if (TER const terResult = directSendNoFeeIOU(view, issuer, receiverID, amount, true, j)) return terResult; } if (senderID != issuer && takeFromSender) { - if (TER const terResult = rippleCreditIOU(view, senderID, issuer, takeFromSender, true, j)) + if (TER const terResult = + directSendNoFeeIOU(view, senderID, issuer, takeFromSender, true, j)) return terResult; } @@ -813,7 +815,7 @@ accountSendIOU( JLOG(j.trace()) << "accountSendIOU: " << to_string(uSenderID) << " -> " << to_string(uReceiverID) << " : " << saAmount.getFullText(); - return rippleSendIOU(view, uSenderID, uReceiverID, saAmount, saActual, j, waiveFee); + return directSendNoLimitIOU(view, uSenderID, uReceiverID, saAmount, saActual, j, waiveFee); } /* XRP send which does not check reserve and can do pure adjustment. @@ -912,7 +914,7 @@ accountSendMultiIOU( JLOG(j.trace()) << "accountSendMultiIOU: " << to_string(senderID) << " sending " << receivers.size() << " IOUs"; - return rippleSendMultiIOU(view, senderID, issue, receivers, actual, j, waiveFee); + return directSendNoLimitMultiIOU(view, senderID, issue, receivers, actual, j, waiveFee); } /* XRP send which does not check reserve and can do pure adjustment. @@ -1022,7 +1024,7 @@ accountSendMultiIOU( } static TER -rippleCreditMPT( +directSendNoFeeMPT( ApplyView& view, AccountID const& uSenderID, AccountID const& uReceiverID, @@ -1090,7 +1092,7 @@ rippleCreditMPT( } static TER -rippleSendMPT( +directSendNoLimitMPT( ApplyView& view, AccountID const& uSenderID, AccountID const& uReceiverID, @@ -1099,9 +1101,9 @@ rippleSendMPT( beast::Journal j, WaiveTransferFee waiveFee) { - XRPL_ASSERT(uSenderID != uReceiverID, "xrpl::rippleSendMPT : sender is not receiver"); + XRPL_ASSERT(uSenderID != uReceiverID, "xrpl::directSendNoLimitMPT : sender is not receiver"); - // Safe to get MPT since rippleSendMPT is only called by accountSendMPT + // Safe to get MPT since directSendNoLimitMPT is only called by accountSendMPT auto const& issuer = saAmount.getIssuer(); auto const sle = view.read(keylet::mptIssuance(saAmount.get().getMptID())); @@ -1122,7 +1124,7 @@ rippleSendMPT( } // Direct send: redeeming MPTs and/or sending own MPTs. - auto const ter = rippleCreditMPT(view, uSenderID, uReceiverID, saAmount, j); + auto const ter = directSendNoFeeMPT(view, uSenderID, uReceiverID, saAmount, j); if (!isTesSuccess(ter)) return ter; saActual = saAmount; @@ -1134,19 +1136,19 @@ rippleSendMPT( ? saAmount : multiply(saAmount, transferRate(view, saAmount.get().getMptID())); - JLOG(j.debug()) << "rippleSendMPT> " << to_string(uSenderID) << " - > " + JLOG(j.debug()) << "directSendNoLimitMPT> " << to_string(uSenderID) << " - > " << to_string(uReceiverID) << " : deliver=" << saAmount.getFullText() << " cost=" << saActual.getFullText(); - if (auto const terResult = rippleCreditMPT(view, issuer, uReceiverID, saAmount, j); + if (auto const terResult = directSendNoFeeMPT(view, issuer, uReceiverID, saAmount, j); !isTesSuccess(terResult)) return terResult; - return rippleCreditMPT(view, uSenderID, issuer, saActual, j); + return directSendNoFeeMPT(view, uSenderID, issuer, saActual, j); } static TER -rippleSendMultiMPT( +directSendNoLimitMultiMPT( ApplyView& view, AccountID const& senderID, MPTIssue const& mptIssue, @@ -1163,7 +1165,7 @@ rippleSendMultiMPT( // For the issuer-as-sender case, track the running total to validate // against MaximumAmount. The read-only SLE (view.read) is not updated - // by rippleCreditMPT, so a per-iteration SLE read would be stale. + // by directSendNoFeeMPT, so a per-iteration SLE read would be stale. // Use uint64_t, not STAmount, to keep MaximumAmount comparisons in exact // integer arithmetic. STAmount implicitly converts to Number, whose // small-scale mantissa (~16 digits) can lose precision for values near @@ -1195,7 +1197,7 @@ rippleSendMultiMPT( { XRPL_ASSERT_PARTS( takeFromSender == beast::zero, - "xrpl::rippleSendMultiMPT", + "xrpl::directSendNoLimitMultiMPT", "sender == issuer, takeFromSender == zero"); std::uint64_t const sendAmount = amount.mpt().value(); @@ -1231,11 +1233,10 @@ rippleSendMultiMPT( } // Direct send: redeeming MPTs and/or sending own MPTs. - if (auto const ter = rippleCreditMPT(view, senderID, receiverID, amount, j)) + if (auto const ter = directSendNoFeeMPT(view, senderID, receiverID, amount, j)) return ter; actual += amount; - // Do not add amount to takeFromSender, because rippleCreditMPT - // took it. + // Do not add amount to takeFromSender, because directSendNoFeeMPT took it. continue; } @@ -1247,16 +1248,16 @@ rippleSendMultiMPT( actual += actualSend; takeFromSender += actualSend; - JLOG(j.debug()) << "rippleSendMultiMPT> " << to_string(senderID) << " - > " + JLOG(j.debug()) << "directSendNoLimitMultiMPT> " << to_string(senderID) << " - > " << to_string(receiverID) << " : deliver=" << amount.getFullText() << " cost=" << actualSend.getFullText(); - if (auto const terResult = rippleCreditMPT(view, issuer, receiverID, amount, j)) + if (auto const terResult = directSendNoFeeMPT(view, issuer, receiverID, amount, j)) return terResult; } if (senderID != issuer && takeFromSender) { - if (TER const terResult = rippleCreditMPT(view, senderID, issuer, takeFromSender, j)) + if (TER const terResult = directSendNoFeeMPT(view, senderID, issuer, takeFromSender, j)) return terResult; } @@ -1284,7 +1285,7 @@ accountSendMPT( STAmount saActual{saAmount.asset()}; - return rippleSendMPT(view, uSenderID, uReceiverID, saAmount, saActual, j, waiveFee); + return directSendNoLimitMPT(view, uSenderID, uReceiverID, saAmount, saActual, j, waiveFee); } static TER @@ -1298,7 +1299,7 @@ accountSendMultiMPT( { STAmount actual; - return rippleSendMultiMPT(view, senderID, mptIssue, receivers, actual, j, waiveFee); + return directSendNoLimitMultiMPT(view, senderID, mptIssue, receivers, actual, j, waiveFee); } //------------------------------------------------------------------------------ @@ -1308,7 +1309,7 @@ accountSendMultiMPT( //------------------------------------------------------------------------------ TER -rippleCredit( +directSendNoFee( ApplyView& view, AccountID const& uSenderID, AccountID const& uReceiverID, @@ -1320,12 +1321,12 @@ rippleCredit( [&](TIss const& issue) { if constexpr (std::is_same_v) { - return rippleCreditIOU(view, uSenderID, uReceiverID, saAmount, bCheckIssuer, j); + return directSendNoFeeIOU(view, uSenderID, uReceiverID, saAmount, bCheckIssuer, j); } else { - XRPL_ASSERT(!bCheckIssuer, "xrpl::rippleCredit : not checking issuer"); - return rippleCreditMPT(view, uSenderID, uReceiverID, saAmount, j); + XRPL_ASSERT(!bCheckIssuer, "xrpl::directSendNoFee : not checking issuer"); + return directSendNoFeeMPT(view, uSenderID, uReceiverID, saAmount, j); } }, saAmount.asset().value()); diff --git a/src/libxrpl/protocol/BuildInfo.cpp b/src/libxrpl/protocol/BuildInfo.cpp index 0fddb9ff19..543da615cf 100644 --- a/src/libxrpl/protocol/BuildInfo.cpp +++ b/src/libxrpl/protocol/BuildInfo.cpp @@ -160,7 +160,7 @@ getEncodedVersion() } bool -isRippledVersion(std::uint64_t version) +isXrpldVersion(std::uint64_t version) { return (version & implementationVersionIdentifierMask) == implementationVersionIdentifier; } @@ -168,7 +168,7 @@ isRippledVersion(std::uint64_t version) bool isNewerVersion(std::uint64_t version) { - if (isRippledVersion(version)) + if (isXrpldVersion(version)) return version > getEncodedVersion(); return false; } diff --git a/src/libxrpl/protocol/NFTokenID.cpp b/src/libxrpl/protocol/NFTokenID.cpp index a808ef1fcf..f77a6f67df 100644 --- a/src/libxrpl/protocol/NFTokenID.cpp +++ b/src/libxrpl/protocol/NFTokenID.cpp @@ -70,7 +70,7 @@ getNFTokenIDFromPage(TxMeta const& transactionMeta) // field changing, but no NFTs within that page changing. In this // case, there will be no previous NFTs and we need to skip. // However, there will always be NFTs listed in the final fields, - // as rippled outputs all fields in final fields even if they were + // as xrpld outputs all fields in final fields even if they were // not changed. STObject const& previousFields = node.peekAtField(sfPreviousFields).downcast(); diff --git a/src/libxrpl/server/Vacuum.cpp b/src/libxrpl/server/Vacuum.cpp index bcf5941e95..80de45cf66 100644 --- a/src/libxrpl/server/Vacuum.cpp +++ b/src/libxrpl/server/Vacuum.cpp @@ -12,7 +12,7 @@ doVacuumDB(DatabaseCon::Setup const& setup, beast::Journal j) boost::filesystem::path const dbPath = setup.dataDir / TxDBName; uintmax_t const dbSize = file_size(dbPath); - XRPL_ASSERT(dbSize != static_cast(-1), "ripple:doVacuumDB : file_size succeeded"); + XRPL_ASSERT(dbSize != static_cast(-1), "xrpl::doVacuumDB : file_size succeeded"); if (auto available = space(dbPath.parent_path()).available; available < dbSize) { @@ -36,7 +36,7 @@ doVacuumDB(DatabaseCon::Setup const& setup, beast::Journal j) std::cout << "VACUUM beginning. page_size: " << pageSize << std::endl; session << "VACUUM;"; - XRPL_ASSERT(setup.globalPragma, "ripple:doVacuumDB : non-null global pragma"); + XRPL_ASSERT(setup.globalPragma, "xrpl::doVacuumDB : non-null global pragma"); for (auto const& p : *setup.globalPragma) session << p; session << "PRAGMA page_size;", soci::into(pageSize); diff --git a/src/libxrpl/tx/applySteps.cpp b/src/libxrpl/tx/applySteps.cpp index 447ba685cc..b688377541 100644 --- a/src/libxrpl/tx/applySteps.cpp +++ b/src/libxrpl/tx/applySteps.cpp @@ -95,7 +95,6 @@ with_txn_type(Rules const& rules, TxType txnType, F&& f) // For Transactor::Normal // -// Current formatter for rippled is based on clang-10, which does not handle `requires` clauses template requires(T::ConsequencesFactory == Transactor::Normal) TxConsequences diff --git a/src/libxrpl/tx/invariants/FreezeInvariant.cpp b/src/libxrpl/tx/invariants/FreezeInvariant.cpp index 0048da7a84..ee82157d44 100644 --- a/src/libxrpl/tx/invariants/FreezeInvariant.cpp +++ b/src/libxrpl/tx/invariants/FreezeInvariant.cpp @@ -68,7 +68,7 @@ TransfersNotFrozen::finalize( { auto const issuerSle = findIssuer(issue.account, view); // It should be impossible for the issuer to not be found, but check - // just in case so rippled doesn't crash in release. + // just in case so xrpld doesn't crash in release. if (!issuerSle) { // The comment above starting with "assert(enforce)" explains this diff --git a/src/libxrpl/tx/paths/DirectStep.cpp b/src/libxrpl/tx/paths/DirectStep.cpp index 9cae103d8f..9fd90b7755 100644 --- a/src/libxrpl/tx/paths/DirectStep.cpp +++ b/src/libxrpl/tx/paths/DirectStep.cpp @@ -519,7 +519,7 @@ DirectStepI::revImp( { IOUAmount const in = mulRatio(srcToDst, srcQOut, QUALITY_ONE, /*roundUp*/ true); cache_.emplace(in, srcToDst, out, srcDebtDir); - rippleCredit( + directSendNoFee( sb, src_, dst_, @@ -536,7 +536,7 @@ DirectStepI::revImp( IOUAmount const in = mulRatio(maxSrcToDst, srcQOut, QUALITY_ONE, /*roundUp*/ true); IOUAmount const actualOut = mulRatio(maxSrcToDst, dstQIn, QUALITY_ONE, /*roundUp*/ false); cache_.emplace(in, maxSrcToDst, actualOut, srcDebtDir); - rippleCredit( + directSendNoFee( sb, src_, dst_, @@ -628,7 +628,7 @@ DirectStepI::fwdImp( { IOUAmount const out = mulRatio(srcToDst, dstQIn, QUALITY_ONE, /*roundUp*/ false); setCacheLimiting(in, srcToDst, out, srcDebtDir); - rippleCredit( + directSendNoFee( sb, src_, dst_, @@ -645,7 +645,7 @@ DirectStepI::fwdImp( IOUAmount const actualIn = mulRatio(maxSrcToDst, srcQOut, QUALITY_ONE, /*roundUp*/ true); IOUAmount const out = mulRatio(maxSrcToDst, dstQIn, QUALITY_ONE, /*roundUp*/ false); setCacheLimiting(actualIn, maxSrcToDst, out, srcDebtDir); - rippleCredit( + directSendNoFee( sb, src_, dst_, diff --git a/src/libxrpl/tx/transactors/dex/AMMClawback.cpp b/src/libxrpl/tx/transactors/dex/AMMClawback.cpp index 5291a1b25b..fb0999bfb0 100644 --- a/src/libxrpl/tx/transactors/dex/AMMClawback.cpp +++ b/src/libxrpl/tx/transactors/dex/AMMClawback.cpp @@ -204,7 +204,7 @@ AMMClawback::applyGuts(Sandbox& sb) << to_string(newLPTokenBalance.iou()) << " old balance: " << to_string(lptAMMBalance.iou()); - auto const ter = rippleCredit(sb, holder, issuer, amountWithdraw, true, j_); + auto const ter = directSendNoFee(sb, holder, issuer, amountWithdraw, true, j_); if (!isTesSuccess(ter)) return ter; // LCOV_EXCL_LINE @@ -217,7 +217,7 @@ AMMClawback::applyGuts(Sandbox& sb) auto const flags = ctx_.tx.getFlags(); if ((flags & tfClawTwoAssets) != 0u) - return rippleCredit(sb, holder, issuer, *amount2Withdraw, true, j_); + return directSendNoFee(sb, holder, issuer, *amount2Withdraw, true, j_); return tesSUCCESS; } diff --git a/src/libxrpl/tx/transactors/dex/OfferCreate.cpp b/src/libxrpl/tx/transactors/dex/OfferCreate.cpp index 5d98e3625e..71343ca8ab 100644 --- a/src/libxrpl/tx/transactors/dex/OfferCreate.cpp +++ b/src/libxrpl/tx/transactors/dex/OfferCreate.cpp @@ -726,7 +726,7 @@ OfferCreate::applyGuts(Sandbox& sb, Sandbox& sbCancel) { // Any ImmediateOrCancel offer that transfers absolutely no funds // returns tecKILLED rather than tesSUCCESS. Motivation for the - // change is here: https://github.com/ripple/rippled/issues/4115 + // change is here: https://github.com/XRPLF/rippled/issues/4115 return {tecKILLED, false}; } return {tesSUCCESS, true}; diff --git a/src/libxrpl/tx/transactors/escrow/EscrowCreate.cpp b/src/libxrpl/tx/transactors/escrow/EscrowCreate.cpp index ed0bbeea44..a14b3abf37 100644 --- a/src/libxrpl/tx/transactors/escrow/EscrowCreate.cpp +++ b/src/libxrpl/tx/transactors/escrow/EscrowCreate.cpp @@ -353,7 +353,8 @@ escrowLockApplyHelper( if (issuer == sender) return tecINTERNAL; // LCOV_EXCL_LINE - auto const ter = rippleCredit(view, sender, issuer, amount, !amount.holds(), journal); + auto const ter = + directSendNoFee(view, sender, issuer, amount, !amount.holds(), journal); if (!isTesSuccess(ter)) return ter; // LCOV_EXCL_LINE return tesSUCCESS; @@ -372,7 +373,7 @@ escrowLockApplyHelper( if (issuer == sender) return tecINTERNAL; // LCOV_EXCL_LINE - auto const ter = rippleLockEscrowMPT(view, sender, amount, journal); + auto const ter = lockEscrowMPT(view, sender, amount, journal); if (!isTesSuccess(ter)) return ter; // LCOV_EXCL_LINE return tesSUCCESS; diff --git a/src/libxrpl/tx/transactors/payment/Payment.cpp b/src/libxrpl/tx/transactors/payment/Payment.cpp index c9e2da0d25..e3ceddeae3 100644 --- a/src/libxrpl/tx/transactors/payment/Payment.cpp +++ b/src/libxrpl/tx/transactors/payment/Payment.cpp @@ -403,7 +403,7 @@ Payment::doApply() if (ripple) { - // Ripple payment with at least one intermediate step and uses + // XRPL payment with at least one intermediate step and uses // transitive balances. // An account that requires authorization has two ways to get an diff --git a/src/libxrpl/tx/transactors/token/Clawback.cpp b/src/libxrpl/tx/transactors/token/Clawback.cpp index 57175ba427..d7304e5cf1 100644 --- a/src/libxrpl/tx/transactors/token/Clawback.cpp +++ b/src/libxrpl/tx/transactors/token/Clawback.cpp @@ -212,7 +212,7 @@ applyHelper(ApplyContext& ctx) fhIGNORE_FREEZE, ctx.journal); - return rippleCredit( + return directSendNoFee( ctx.view(), holder, issuer, std::min(spendableAmount, clawAmount), true, ctx.journal); } @@ -233,7 +233,7 @@ applyHelper(ApplyContext& ctx) ahIGNORE_AUTH, ctx.journal); - return rippleCredit( + return directSendNoFee( ctx.view(), holder, issuer, diff --git a/src/libxrpl/tx/transactors/token/TrustSet.cpp b/src/libxrpl/tx/transactors/token/TrustSet.cpp index 7c208c5855..801645d1c0 100644 --- a/src/libxrpl/tx/transactors/token/TrustSet.cpp +++ b/src/libxrpl/tx/transactors/token/TrustSet.cpp @@ -336,7 +336,7 @@ TrustSet::doApply() // items. // // We do this because being able to exchange currencies, - // which needs trust lines, is a powerful Ripple feature. + // which needs trust lines, is a powerful XRPL feature. // So we want to make it easy for a gateway to fund the // accounts of its users without fear of being tricked. // diff --git a/src/test/README.md b/src/test/README.md index b012607f58..179d75941b 100644 --- a/src/test/README.md +++ b/src/test/README.md @@ -2,10 +2,10 @@ ## Running Tests -Unit tests are bundled in the `rippled` executable and can be executed using the +Unit tests are bundled in the `xrpld` executable and can be executed using the `--unittest` parameter. Without any arguments to this option, all non-manual unit tests will be executed. If you want to run one or more manual tests, you -must specify it by suite or full-name (e.g. `ripple.app.NoRippleCheckLimits` or +must specify it by suite or full-name (e.g. `xrpl.app.NoRippleCheckLimits` or just `NoRippleCheckLimits`). More than one suite or group of suites can be specified as a comma separated diff --git a/src/test/app/Credentials_test.cpp b/src/test/app/Credentials_test.cpp index db09bfc0ca..317fd47b2b 100644 --- a/src/test/app/Credentials_test.cpp +++ b/src/test/app/Credentials_test.cpp @@ -471,7 +471,7 @@ struct Credentials_test : public beast::unit_test::suite { testcase("Credentials fail, expiration in the past."); auto jv = credentials::create(subject, issuer, credType); - // current time in ripple epoch - 1s + // current time in XRPL epoch - 1s uint32_t const t = env.current()->header().parentCloseTime.time_since_epoch().count() - 1; jv[sfExpiration.jsonName] = t; @@ -812,7 +812,7 @@ struct Credentials_test : public beast::unit_test::suite testcase("CredentialsDelete fail, time not expired yet."); auto jv = credentials::create(subject, issuer, credType); - // current time in ripple epoch + 1000s + // current time in XRPL epoch + 1000s uint32_t const t = env.current()->header().parentCloseTime.time_since_epoch().count() + 1000; jv[sfExpiration.jsonName] = t; diff --git a/src/test/app/DepositAuth_test.cpp b/src/test/app/DepositAuth_test.cpp index 7a8404aad8..9b5dca3ca2 100644 --- a/src/test/app/DepositAuth_test.cpp +++ b/src/test/app/DepositAuth_test.cpp @@ -1045,7 +1045,7 @@ struct DepositPreauth_test : public beast::unit_test::suite // Create credentials auto jv = credentials::create(alice, issuer, credType); - // Current time in ripple epoch. + // Current time in XRPL epoch. // Every time ledger close, unittest timer increase by 10s uint32_t const t = env.current()->header().parentCloseTime.time_since_epoch().count() + 60; diff --git a/src/test/app/LedgerReplay_test.cpp b/src/test/app/LedgerReplay_test.cpp index b30dce4756..f9ab08e900 100644 --- a/src/test/app/LedgerReplay_test.cpp +++ b/src/test/app/LedgerReplay_test.cpp @@ -1023,20 +1023,20 @@ struct LedgerReplayer_test : public beast::unit_test::suite { Config c; - std::string const toLoad(R"rippleConfig( + std::string const toLoad(R"xrpldConfig( [ledger_replay] 1 -)rippleConfig"); +)xrpldConfig"); c.loadFromString(toLoad); BEAST_EXPECT(c.LEDGER_REPLAY == true); } { Config c; - std::string const toLoad = (R"rippleConfig( + std::string const toLoad = (R"xrpldConfig( [ledger_replay] 0 -)rippleConfig"); +)xrpldConfig"); c.loadFromString(toLoad); BEAST_EXPECT(c.LEDGER_REPLAY == false); } diff --git a/src/test/app/MPToken_test.cpp b/src/test/app/MPToken_test.cpp index 81fcec4b7a..b7f1d22aa7 100644 --- a/src/test/app/MPToken_test.cpp +++ b/src/test/app/MPToken_test.cpp @@ -3276,7 +3276,7 @@ class MPToken_test : public beast::unit_test::suite void testMultiSendMaximumAmount(FeatureBitset features) { - // Verify that rippleSendMultiMPT correctly enforces MaximumAmount + // Verify that directSendNoLimitMultiMPT correctly enforces MaximumAmount // when the issuer sends to multiple receivers. Pre-fixSecurity3_1_3, // a stale view.read() snapshot caused per-iteration checks to miss // aggregate overflows. Post-fix, a running total is used instead. diff --git a/src/test/app/Offer_test.cpp b/src/test/app/Offer_test.cpp index 66e84360ef..ad6ec656cb 100644 --- a/src/test/app/Offer_test.cpp +++ b/src/test/app/Offer_test.cpp @@ -4279,8 +4279,7 @@ public: Env env{*this, features}; - // This test mimics the payment flow used in the Ripple Connect - // smoke test. The players: + // This test mimics a payment flow. The players: // A USD gateway with hot and cold wallets // A EUR gateway with hot and cold walllets // A MM gateway that will provide offers from USD->EUR and EUR->USD diff --git a/src/test/app/ValidatorSite_test.cpp b/src/test/app/ValidatorSite_test.cpp index 004c59609c..9f9b0cbdf7 100644 --- a/src/test/app/ValidatorSite_test.cpp +++ b/src/test/app/ValidatorSite_test.cpp @@ -65,7 +65,7 @@ private: "http://207.261.33.37:8080/validators", "https://ripple.com/validators", "https://ripple.com:443/validators", - "file:///etc/opt/ripple/validators.txt", + "file:///etc/opt/xrpld/validators.txt", "file:///C:/Lib/validators.txt" #if !_MSC_VER , diff --git a/src/test/core/Config_test.cpp b/src/test/core/Config_test.cpp index a7f44836d5..6392a75f80 100644 --- a/src/test/core/Config_test.cpp +++ b/src/test/core/Config_test.cpp @@ -81,7 +81,7 @@ time.apple.com time.nist.gov pool.ntp.org -# Where to find some other servers speaking the Ripple protocol. +# Where to find some other servers speaking the XRPL protocol. # [ips] r.ripple.com 51235 @@ -107,7 +107,7 @@ backend=sqlite } /** - Write a xrpld config file and remove when done. + Write an xrpld config file and remove when done. */ class FileCfgGuard : public xrpl::detail::FileDirGuard { diff --git a/src/test/csf/README.md b/src/test/csf/README.md index 30d5abb042..081c9807d7 100644 --- a/src/test/csf/README.md +++ b/src/test/csf/README.md @@ -2,7 +2,7 @@ The Consensus Simulation Framework is a set of software components for describing, running and analyzing simulations of the consensus algorithm in a -controlled manner. It is also used to unit test the generic Ripple consensus +controlled manner. It is also used to unit test the generic XRPL consensus algorithm implementation. The framework is in its early stages, so the design and supported features are subject to change. diff --git a/src/test/csf/Validation.h b/src/test/csf/Validation.h index 5ebbcf3ae5..ba4da148f4 100644 --- a/src/test/csf/Validation.h +++ b/src/test/csf/Validation.h @@ -129,7 +129,7 @@ public: Validation const& unwrap() const { - // For the rippled implementation in which RCLValidation wraps + // For the xrpld implementation in which RCLValidation wraps // STValidation, the csf::Validation has no more specific type it // wraps, so csf::Validation unwraps to itself return *this; diff --git a/src/test/jtx/AbstractClient.h b/src/test/jtx/AbstractClient.h index 9b1ef178ca..94e58f60cd 100644 --- a/src/test/jtx/AbstractClient.h +++ b/src/test/jtx/AbstractClient.h @@ -5,10 +5,10 @@ namespace xrpl { namespace test { -/* Abstract Ripple Client interface. +/* Abstract XRPL client interface. This abstracts the transport layer, allowing - commands to be submitted to a rippled server. + commands to be submitted to an xrpld server. */ class AbstractClient { diff --git a/src/test/jtx/Oracle.h b/src/test/jtx/Oracle.h index 7924d278e5..8f48ad4d37 100644 --- a/src/test/jtx/Oracle.h +++ b/src/test/jtx/Oracle.h @@ -81,7 +81,7 @@ struct RemoveArg std::optional const& err = std::nullopt; }; -// Simulate testStartTime as 10'000s from Ripple epoch time to make +// Simulate testStartTime as 10'000s from XRPL epoch time to make // LastUpdateTime validation to work and to make unit-test consistent. // The value doesn't matter much, it has to be greater // than maxLastUpdateTimeDelta in order to pass LastUpdateTime diff --git a/src/test/jtx/TrustedPublisherServer.h b/src/test/jtx/TrustedPublisherServer.h index d36babf380..c9304426cf 100644 --- a/src/test/jtx/TrustedPublisherServer.h +++ b/src/test/jtx/TrustedPublisherServer.h @@ -295,7 +295,7 @@ public: openssl genrsa -out ca.key 2048 openssl req -new -x509 -nodes -days 10000 -key ca.key -out ca.crt \ -subj "/C=US/ST=CA/L=Los - Angeles/O=rippled-unit-tests/CN=example.com" # generate private cert + Angeles/O=xrpld-unit-tests/CN=example.com" # generate private cert openssl genrsa -out server.key 2048 # Generate certificate signing request # since our unit tests can run in either ipv4 or ipv6 mode, @@ -318,7 +318,7 @@ public: openssl req -new -key server.key -out server.csr \ -config extras.cnf \ -subj "/C=US/ST=California/L=San - Francisco/O=rippled-unit-tests/CN=127.0.0.1" \ + Francisco/O=xrpld-unit-tests/CN=127.0.0.1" \ # Create public certificate by signing with our CA openssl x509 -req -days 10000 -in server.csr -CA ca.crt -CAkey ca.key diff --git a/src/test/jtx/impl/Oracle.cpp b/src/test/jtx/impl/Oracle.cpp index d48432e8e4..c692664b93 100644 --- a/src/test/jtx/impl/Oracle.cpp +++ b/src/test/jtx/impl/Oracle.cpp @@ -18,7 +18,7 @@ Oracle::Oracle(Env& env, CreateArg const& arg, bool submit) : env_(env) // {close-maxLastUpdateTimeDelta, close+maxLastUpdateTimeDelta}. // To make the validation work and to make the clock consistent // for tests running at different time, simulate Unix time starting - // on testStartTime since Ripple epoch. + // on testStartTime since XRPL epoch. auto const now = env_.timeKeeper().now(); if (now.time_since_epoch().count() == 0 || arg.close) env_.close(now + testStartTime - epoch_offset); diff --git a/src/test/jtx/utility.h b/src/test/jtx/utility.h index 15c323f047..c9189efc36 100644 --- a/src/test/jtx/utility.h +++ b/src/test/jtx/utility.h @@ -49,7 +49,7 @@ fill_fee(Json::Value& jv, ReadView const& view); void fill_seq(Json::Value& jv, ReadView const& view); -/** Given a rippled unit test rpc command, return the corresponding JSON. */ +/** Given an xrpld unit test rpc command, return the corresponding JSON. */ Json::Value cmdToJSONRPC(std::vector const& args, beast::Journal j, unsigned int apiVersion); diff --git a/src/test/ledger/PaymentSandbox_test.cpp b/src/test/ledger/PaymentSandbox_test.cpp index ab01c4852e..69e2657d0c 100644 --- a/src/test/ledger/PaymentSandbox_test.cpp +++ b/src/test/ledger/PaymentSandbox_test.cpp @@ -125,19 +125,19 @@ class PaymentSandbox_test : public beast::unit_test::suite } { - // rippleCredit, no deferredCredits + // directSendNoFee, no deferredCredits ApplyViewImpl av(&*env.current(), tapNONE); auto const iss = USD_gw1.issue(); auto const startingAmount = accountHolds(av, alice, iss.currency, iss.account, fhIGNORE_FREEZE, j); - rippleCredit(av, gw1, alice, toCredit, true, j); + directSendNoFee(av, gw1, alice, toCredit, true, j); BEAST_EXPECT( accountHolds(av, alice, iss.currency, iss.account, fhIGNORE_FREEZE, j) == startingAmount + toCredit); - rippleCredit(av, alice, gw1, toDebit, true, j); + directSendNoFee(av, alice, gw1, toDebit, true, j); BEAST_EXPECT( accountHolds(av, alice, iss.currency, iss.account, fhIGNORE_FREEZE, j) == startingAmount + toCredit - toDebit); @@ -170,7 +170,7 @@ class PaymentSandbox_test : public beast::unit_test::suite } { - // rippleCredit, w/ deferredCredits + // directSendNoFee, w/ deferredCredits ApplyViewImpl av(&*env.current(), tapNONE); PaymentSandbox pv(&av); @@ -178,7 +178,7 @@ class PaymentSandbox_test : public beast::unit_test::suite auto const startingAmount = accountHolds(pv, alice, iss.currency, iss.account, fhIGNORE_FREEZE, j); - rippleCredit(pv, gw1, alice, toCredit, true, j); + directSendNoFee(pv, gw1, alice, toCredit, true, j); BEAST_EXPECT( accountHolds(pv, alice, iss.currency, iss.account, fhIGNORE_FREEZE, j) == startingAmount); diff --git a/src/test/nodestore/Timing_test.cpp b/src/test/nodestore/Timing_test.cpp index fb60e6c7a5..39e8b59638 100644 --- a/src/test/nodestore/Timing_test.cpp +++ b/src/test/nodestore/Timing_test.cpp @@ -490,7 +490,7 @@ public: backend->close(); } - // Simulate a rippled workload: + // Simulate an xrpld workload: // Each thread randomly: // inserts a new key // fetches an old key diff --git a/src/test/overlay/reduce_relay_test.cpp b/src/test/overlay/reduce_relay_test.cpp index 4a8d62fbc2..bac70d35a6 100644 --- a/src/test/overlay/reduce_relay_test.cpp +++ b/src/test/overlay/reduce_relay_test.cpp @@ -1270,10 +1270,10 @@ protected: doTest("Test Config - squelch enabled (legacy)", log, [&](bool log) { Config c; - std::string const toLoad(R"rippleConfig( + std::string const toLoad(R"xrpldConfig( [reduce_relay] vp_enable=1 -)rippleConfig"); +)xrpldConfig"); c.loadFromString(toLoad); BEAST_EXPECT(c.VP_REDUCE_RELAY_BASE_SQUELCH_ENABLE == true); @@ -1282,19 +1282,19 @@ vp_enable=1 doTest("Test Config - squelch disabled (legacy)", log, [&](bool log) { Config c; - std::string toLoad(R"rippleConfig( + std::string toLoad(R"xrpldConfig( [reduce_relay] vp_enable=0 -)rippleConfig"); +)xrpldConfig"); c.loadFromString(toLoad); BEAST_EXPECT(c.VP_REDUCE_RELAY_BASE_SQUELCH_ENABLE == false); Config c1; - toLoad = R"rippleConfig( + toLoad = R"xrpldConfig( [reduce_relay] -)rippleConfig"; +)xrpldConfig"; c1.loadFromString(toLoad); BEAST_EXPECT(c1.VP_REDUCE_RELAY_BASE_SQUELCH_ENABLE == false); @@ -1303,10 +1303,10 @@ vp_enable=0 doTest("Test Config - squelch enabled", log, [&](bool log) { Config c; - std::string const toLoad(R"rippleConfig( + std::string const toLoad(R"xrpldConfig( [reduce_relay] vp_base_squelch_enable=1 -)rippleConfig"); +)xrpldConfig"); c.loadFromString(toLoad); BEAST_EXPECT(c.VP_REDUCE_RELAY_BASE_SQUELCH_ENABLE == true); @@ -1315,10 +1315,10 @@ vp_base_squelch_enable=1 doTest("Test Config - squelch disabled", log, [&](bool log) { Config c; - std::string const toLoad(R"rippleConfig( + std::string const toLoad(R"xrpldConfig( [reduce_relay] vp_base_squelch_enable=0 -)rippleConfig"); +)xrpldConfig"); c.loadFromString(toLoad); BEAST_EXPECT(c.VP_REDUCE_RELAY_BASE_SQUELCH_ENABLE == false); @@ -1327,11 +1327,11 @@ vp_base_squelch_enable=0 doTest("Test Config - legacy and new", log, [&](bool log) { Config c; - std::string const toLoad(R"rippleConfig( + std::string const toLoad(R"xrpldConfig( [reduce_relay] vp_base_squelch_enable=0 vp_enable=0 -)rippleConfig"); +)xrpldConfig"); std::string error; auto const expectedError = @@ -1356,29 +1356,29 @@ vp_enable=0 doTest("Test Config - max selected peers", log, [&](bool log) { Config c; - std::string toLoad(R"rippleConfig( + std::string toLoad(R"xrpldConfig( [reduce_relay] -)rippleConfig"); +)xrpldConfig"); c.loadFromString(toLoad); BEAST_EXPECT(c.VP_REDUCE_RELAY_SQUELCH_MAX_SELECTED_PEERS == 5); Config c1; - toLoad = R"rippleConfig( + toLoad = R"xrpldConfig( [reduce_relay] vp_base_squelch_max_selected_peers=6 -)rippleConfig"; +)xrpldConfig"; c1.loadFromString(toLoad); BEAST_EXPECT(c1.VP_REDUCE_RELAY_SQUELCH_MAX_SELECTED_PEERS == 6); Config c2; - toLoad = R"rippleConfig( + toLoad = R"xrpldConfig( [reduce_relay] vp_base_squelch_max_selected_peers=2 -)rippleConfig"; +)xrpldConfig"; std::string error; auto const expectedError = diff --git a/src/test/peerfinder/PeerFinder_test.cpp b/src/test/peerfinder/PeerFinder_test.cpp index a787a38e14..2726604c72 100644 --- a/src/test/peerfinder/PeerFinder_test.cpp +++ b/src/test/peerfinder/PeerFinder_test.cpp @@ -469,32 +469,32 @@ public: pass(); } }; - run(R"rippleConfig( + run(R"xrpldConfig( [peers_in_max] 100 -)rippleConfig"); - run(R"rippleConfig( +)xrpldConfig"); + run(R"xrpldConfig( [peers_out_max] 100 -)rippleConfig"); - run(R"rippleConfig( +)xrpldConfig"); + run(R"xrpldConfig( [peers_in_max] 100 [peers_out_max] 5 -)rippleConfig"); - run(R"rippleConfig( +)xrpldConfig"); + run(R"xrpldConfig( [peers_in_max] 1001 [peers_out_max] 10 -)rippleConfig"); - run(R"rippleConfig( +)xrpldConfig"); + run(R"xrpldConfig( [peers_in_max] 10 [peers_out_max] 1001 -)rippleConfig"); +)xrpldConfig"); } void diff --git a/src/test/protocol/BuildInfo_test.cpp b/src/test/protocol/BuildInfo_test.cpp index d9810e93ea..589eb00637 100644 --- a/src/test/protocol/BuildInfo_test.cpp +++ b/src/test/protocol/BuildInfo_test.cpp @@ -53,13 +53,13 @@ public: } void - testIsRippledVersion() + testIsXrpldVersion() { - testcase("IsRippledVersion"); + testcase("IsXrpldVersion"); auto vFF = 0xFFFF'FFFF'FFFF'FFFFLLU; - BEAST_EXPECT(!BuildInfo::isRippledVersion(vFF)); - auto vRippled = 0x183B'0000'0000'0000LLU; - BEAST_EXPECT(BuildInfo::isRippledVersion(vRippled)); + BEAST_EXPECT(!BuildInfo::isXrpldVersion(vFF)); + auto vXrpld = 0x183B'0000'0000'0000LLU; + BEAST_EXPECT(BuildInfo::isXrpldVersion(vXrpld)); } void @@ -83,7 +83,7 @@ public: run() override { testEncodeSoftwareVersion(); - testIsRippledVersion(); + testIsXrpldVersion(); testIsNewerVersion(); } }; diff --git a/src/test/protocol/Hooks_test.cpp b/src/test/protocol/Hooks_test.cpp index 53f20a2b5e..6f08517c0f 100644 --- a/src/test/protocol/Hooks_test.cpp +++ b/src/test/protocol/Hooks_test.cpp @@ -11,7 +11,7 @@ class Hooks_test : public beast::unit_test::suite { /** * This unit test was requested here: - * https://github.com/ripple/rippled/pull/4089#issuecomment-1050274539 + * https://github.com/XRPLF/rippled/pull/4089#issuecomment-1050274539 * These are tests that exercise facilities that are reserved for when Hooks * is merged in the future. **/ diff --git a/src/test/protocol/Seed_test.cpp b/src/test/protocol/Seed_test.cpp index d7ad1f4afa..75c7e402a1 100644 --- a/src/test/protocol/Seed_test.cpp +++ b/src/test/protocol/Seed_test.cpp @@ -100,8 +100,8 @@ public: void testKeypairGenerationAndSigning() { - std::string const message1 = "http://www.ripple.com"; - std::string const message2 = "https://www.ripple.com"; + std::string const message1 = "http://www.xrpl.org"; + std::string const message2 = "https://www.xrpl.org"; { testcase("Node keypair generation & signing (secp256k1)"); diff --git a/src/test/rpc/Handler_test.cpp b/src/test/rpc/Handler_test.cpp index 7aeb059f56..30ea8831ff 100644 --- a/src/test/rpc/Handler_test.cpp +++ b/src/test/rpc/Handler_test.cpp @@ -25,7 +25,7 @@ operator<<(std::ostream& os, std::chrono::nanoseconds ns) // NOTE This is a rather naive effort at a microbenchmark. Ideally we want // Google Benchmark, or something similar. Also, this actually does not belong // to unit tests, as it makes little sense to run it in conditions very -// dissimilar to how rippled will normally work. +// dissimilar to how xrpld will normally work. // TODO as https://github.com/XRPLF/rippled/issues/4765 class Handler_test : public beast::unit_test::suite diff --git a/src/test/rpc/KeyGeneration_test.cpp b/src/test/rpc/KeyGeneration_test.cpp index f11df0dffb..6a6d71ca10 100644 --- a/src/test/rpc/KeyGeneration_test.cpp +++ b/src/test/rpc/KeyGeneration_test.cpp @@ -685,9 +685,9 @@ public: } void - testRippleLibEd25519() + testXrplLibEd25519() { - testcase("ripple-lib encoded Ed25519 keys"); + testcase("XrplLib encoded Ed25519 keys"); auto test = [this](char const* seed, char const* addr) { { @@ -784,7 +784,7 @@ public: testKeypairForSignature(std::string("ed25519"), ed25519_strings); testKeypairForSignature(std::string("secp256k1"), strong_brain_strings); - testRippleLibEd25519(); + testXrplLibEd25519(); testKeypairForSignatureErrors(); } diff --git a/src/test/rpc/ServerInfo_test.cpp b/src/test/rpc/ServerInfo_test.cpp index 978b995ce8..495bb8ba1b 100644 --- a/src/test/rpc/ServerInfo_test.cpp +++ b/src/test/rpc/ServerInfo_test.cpp @@ -33,7 +33,7 @@ public: makeValidatorConfig() { auto p = std::make_unique(); - boost::format toLoad(R"rippleConfig( + boost::format toLoad(R"xrpldConfig( [validator_token] %1% @@ -49,7 +49,7 @@ ip = 0.0.0.0 port = 50052 protocol = wss2 admin = 127.0.0.1 -)rippleConfig"); +)xrpldConfig"); p->loadFromString(boost::str(toLoad % validator_data::token % validator_data::public_key)); diff --git a/src/test/unit_test/multi_runner.h b/src/test/unit_test/multi_runner.h index 8148079292..2eda4e66a0 100644 --- a/src/test/unit_test/multi_runner.h +++ b/src/test/unit_test/multi_runner.h @@ -131,10 +131,10 @@ class multi_runner_base print_results(S& s); }; - static constexpr char const* shared_mem_name_ = "RippledUnitTestSharedMem"; + static constexpr char const* shared_mem_name_ = "XrpldUnitTestSharedMem"; // name of the message queue a multi_runner_child will use to communicate // with multi_runner_parent - static constexpr char const* message_queue_name_ = "RippledUnitTestMessageQueue"; + static constexpr char const* message_queue_name_ = "XrpldUnitTestMessageQueue"; // `inner_` will be created in shared memory inner* inner_; diff --git a/src/xrpld/README.md b/src/xrpld/README.md index cf71589dd7..83dc8c6a84 100644 --- a/src/xrpld/README.md +++ b/src/xrpld/README.md @@ -1,4 +1,4 @@ -# Ripple Source Guidelines +# XRPL Source Guidelines Each folder contains a single module following the newest style: diff --git a/src/xrpld/app/consensus/README.md b/src/xrpld/app/consensus/README.md index bdf5afe87c..44a4dc8ae7 100644 --- a/src/xrpld/app/consensus/README.md +++ b/src/xrpld/app/consensus/README.md @@ -2,11 +2,11 @@ This directory holds the types and classes needed to connect the generic consensus algorithm to the -rippled-specific instance of consensus. +xrpld-specific instance of consensus. - `RCLCxTx` adapts a `SHAMapItem` transaction. - `RCLCxTxSet` adapts a `SHAMap` to represent a set of transactions. - `RCLCxLedger` adapts a `Ledger`. - `RCLConsensus` is implements the requirements of the generic - `Consensus` class by connecting to the rest of the `rippled` + `Consensus` class by connecting to the rest of the `xrpld` application. diff --git a/src/xrpld/app/ledger/README.md b/src/xrpld/app/ledger/README.md index cb935897b8..7dc38ce9fa 100644 --- a/src/xrpld/app/ledger/README.md +++ b/src/xrpld/app/ledger/README.md @@ -63,7 +63,7 @@ that the validator sends its proposals and validations to the network. ## Ledger Priorities -There are two ledgers that are the most important for a rippled server to have: +There are two ledgers that are the most important for an xrpld server to have: - The consensus ledger and - The last validated ledger. @@ -224,7 +224,7 @@ conclusion about which last closed ledger is authoritative. ## Consensus -A distributed agreement protocol. Ripple uses the consensus process to solve +A distributed agreement protocol. XRPL uses the consensus process to solve the problem of double-spending. ## Validation @@ -402,7 +402,7 @@ are occupied by the exchange rate. ## Overview -The Ripple server permits clients to subscribe to a continuous stream of +The XRPL server permits clients to subscribe to a continuous stream of fully-validated ledgers. The publication code maintains this stream. The server attempts to maintain this continuous stream unless it falls diff --git a/src/xrpld/app/ledger/detail/LedgerMaster.cpp b/src/xrpld/app/ledger/detail/LedgerMaster.cpp index 876a7e0578..b9305b743f 100644 --- a/src/xrpld/app/ledger/detail/LedgerMaster.cpp +++ b/src/xrpld/app/ledger/detail/LedgerMaster.cpp @@ -971,10 +971,10 @@ LedgerMaster::checkAccept(std::shared_ptr const& ledger) if (ledger->seq() % 256 == 0) { - // Check if the majority of validators run a higher version rippled + // Check if the majority of validators run a higher version xrpld // software. If so print a warning. // - // Validators include their rippled software version in the validation + // Validators include their xrpld software version in the validation // messages of every (flag - 1) ledger. We wait for one ledger time // before checking the version information to accumulate more validation // messages. @@ -990,28 +990,28 @@ LedgerMaster::checkAccept(std::shared_ptr const& ledger) auto const vals = app_.getValidations().getTrustedForLedger( ledger->header().parentHash, ledger->header().seq - 1); std::size_t higherVersionCount = 0; - std::size_t rippledCount = 0; + std::size_t xrpldCount = 0; for (auto const& v : vals) { if (v->isFieldPresent(sfServerVersion)) { auto version = v->getFieldU64(sfServerVersion); higherVersionCount += BuildInfo::isNewerVersion(version) ? 1 : 0; - rippledCount += BuildInfo::isRippledVersion(version) ? 1 : 0; + xrpldCount += BuildInfo::isXrpldVersion(version) ? 1 : 0; } } // We report only if (1) we have accumulated validation messages // from 90% validators from the UNL, (2) 60% of validators - // running the rippled implementation have higher version numbers, + // running the xrpld implementation have higher version numbers, // and (3) the calculation won't cause divide-by-zero. - if (higherVersionCount > 0 && rippledCount > 0) + if (higherVersionCount > 0 && xrpldCount > 0) { constexpr std::size_t reportingPercent = 90; constexpr std::size_t cutoffPercent = 60; auto const unlSize{app_.getValidators().getQuorumKeys().second.size()}; needPrint = unlSize > 0 && calculatePercent(vals.size(), unlSize) >= reportingPercent && - calculatePercent(higherVersionCount, rippledCount) >= cutoffPercent; + calculatePercent(higherVersionCount, xrpldCount) >= cutoffPercent; } } // To throttle the warning messages, instead of printing a warning diff --git a/src/xrpld/app/main/Application.cpp b/src/xrpld/app/main/Application.cpp index 6d02ea38ae..129bab8e20 100644 --- a/src/xrpld/app/main/Application.cpp +++ b/src/xrpld/app/main/Application.cpp @@ -1399,7 +1399,7 @@ ApplicationImp::setup(boost::program_options::variables_map const& cmdline) "implications and have"; JLOG(m_journal.warn()) << "*** been deprecated. They will be removed " "in a future release of"; - JLOG(m_journal.warn()) << "*** rippled."; + JLOG(m_journal.warn()) << "*** xrpld."; JLOG(m_journal.warn()) << "*** If you do not use them to sign " "transactions please edit your"; JLOG(m_journal.warn()) << "*** configuration file and remove the [enable_signing] stanza."; @@ -1949,7 +1949,7 @@ ApplicationImp::loadOldLedger( << " UTC.\n" "This replay will not handle your ledger as it was " "originally " - "handled.\nConsider running an earlier version of rippled " + "handled.\nConsider running an earlier version of xrpld " "to " "get the older rules.\n*** CONTINUING ***\n"; } diff --git a/src/xrpld/app/main/GRPCServer.cpp b/src/xrpld/app/main/GRPCServer.cpp index a6c0c933be..c8017d9ac0 100644 --- a/src/xrpld/app/main/GRPCServer.cpp +++ b/src/xrpld/app/main/GRPCServer.cpp @@ -557,7 +557,7 @@ GRPCServer::start() { thread_ = std::thread([this]() { // Start the event loop and begin handling requests - beast::setCurrentThreadName("rippled: grpc"); + beast::setCurrentThreadName("xrpld: grpc"); this->impl_.handleRpcs(); }); } diff --git a/src/xrpld/app/main/GRPCServer.h b/src/xrpld/app/main/GRPCServer.h index 037c91df93..7fa9364174 100644 --- a/src/xrpld/app/main/GRPCServer.h +++ b/src/xrpld/app/main/GRPCServer.h @@ -234,14 +234,14 @@ private: getClientEndpoint(); // If the request was proxied through - // another rippled node, returns the ip of the originating client. + // another xrpld node, returns the ip of the originating client. // Empty optional if request was not proxied or there was an error // decoding the client ip std::optional getProxiedClientIpAddress(); // If the request was proxied through - // another rippled node, returns the endpoint of the originating client. + // another xrpld node, returns the endpoint of the originating client. // Empty optional if request was not proxied or there was an error // decoding the client endpoint std::optional @@ -261,7 +261,7 @@ private: bool clientIsUnlimited(); - // True if the request was proxied through another rippled node prior + // True if the request was proxied through another xrpld node prior // to arriving here bool wasForwarded(); diff --git a/src/xrpld/app/main/Main.cpp b/src/xrpld/app/main/Main.cpp index f3953823dd..ebd5920492 100644 --- a/src/xrpld/app/main/Main.cpp +++ b/src/xrpld/app/main/Main.cpp @@ -470,8 +470,8 @@ run(int argc, char** argv) } catch (std::exception const& ex) { - std::cerr << "rippled: " << ex.what() << std::endl; - std::cerr << "Try 'rippled --help' for a list of options." << std::endl; + std::cerr << "xrpld: " << ex.what() << std::endl; + std::cerr << "Try 'xrpld --help' for a list of options." << std::endl; return 1; } @@ -483,7 +483,7 @@ run(int argc, char** argv) if (vm.contains("version")) { - std::cout << "rippled version " << BuildInfo::getVersionString() << std::endl; + std::cout << "xrpld version " << BuildInfo::getVersionString() << std::endl; std::cout << "Git commit hash: " << xrpl::git::getCommitHash() << std::endl; std::cout << "Git build branch: " << xrpl::git::getBuildBranch() << std::endl; return 0; @@ -492,8 +492,8 @@ run(int argc, char** argv) #ifndef ENABLE_TESTS if (vm.count("unittest") || vm.count("unittest-child")) { - std::cerr << "rippled: Tests disabled in this build." << std::endl; - std::cerr << "Try 'rippled --help' for a list of options." << std::endl; + std::cerr << "xrpld: Tests disabled in this build." << std::endl; + std::cerr << "Try 'xrpld --help' for a list of options." << std::endl; return 1; } #else @@ -529,7 +529,7 @@ run(int argc, char** argv) if (vm.contains("unittest-jobs")) { // unittest jobs only makes sense with `unittest` - std::cerr << "rippled: '--unittest-jobs' specified without " + std::cerr << "xrpld: '--unittest-jobs' specified without " "'--unittest'.\n"; std::cerr << "To run the unit tests the '--unittest' option must " "be present.\n"; @@ -793,7 +793,7 @@ run(int argc, char** argv) } // We have an RPC command to process: - beast::setCurrentThreadName("rippled: rpc"); + beast::setCurrentThreadName("xrpld: rpc"); return RPCCall::fromCommandLine( *config, vm["parameters"].as>(), *logs); // LCOV_EXCL_STOP diff --git a/src/xrpld/app/misc/FeeEscalation.md b/src/xrpld/app/misc/FeeEscalation.md index 7843620320..5a3edbe95a 100644 --- a/src/xrpld/app/misc/FeeEscalation.md +++ b/src/xrpld/app/misc/FeeEscalation.md @@ -1,6 +1,6 @@ # Fees -Rippled's fee mechanism consists of several interrelated processes: +Xrpld's fee mechanism consists of several interrelated processes: 1. [Rapid Fee escalation](#fee-escalation) 2. [The Transaction Queue](#transaction-queue) @@ -184,7 +184,7 @@ than a more complex transaction paying more XRP. ### Load Fee -Each rippled server maintains a minimum cost threshold based on its current load. If you submit a transaction with a fee that is lower than the current load-based transaction cost of the rippled server, the server neither applies nor relays the transaction to its peers. A transaction is very unlikely to survive the consensus process unless its transaction fee value meets the requirements of a majority of servers. +Each xrpld server maintains a minimum cost threshold based on its current load. If you submit a transaction with a fee that is lower than the current load-based transaction cost of the xrpld server, the server neither applies nor relays the transaction to its peers. A transaction is very unlikely to survive the consensus process unless its transaction fee value meets the requirements of a majority of servers. ### Reference Transaction @@ -193,7 +193,7 @@ single-signed transaction (eg. Payment, Account Set, Offer Create, etc) that requires a fee. In the future, there may be other transaction types that require -more (or less) work for rippled to process. Those transactions may have +more (or less) work for xrpld to process. Those transactions may have a higher (or lower) base fee, requiring a correspondingly higher (or lower) fee to get into the same position as a reference transaction. @@ -211,7 +211,7 @@ Another factor to consider is the duration of the consensus process itself. This generally takes under 5 seconds on the main network under low volume. This is based on historical observations. However factors such as transaction volume -can increase consensus duration. This is because rippled performs +can increase consensus duration. This is because xrpld performs more work as transaction volume increases. Under sufficient load this tends to increase consensus duration. It's possible that relatively high consensus duration indicates a problem, but it is not appropriate to @@ -293,7 +293,7 @@ values by 5 for a multi-signed transaction with 4 signatures.) The `fee` result is always instantaneous, and relates to the open ledger. It includes the sequence number of the current open ledger, -but may not make sense if rippled is not synced to the network. +but may not make sense if xrpld is not synced to the network. Result format: diff --git a/src/xrpld/app/misc/README.md b/src/xrpld/app/misc/README.md index 2f9fff0ca3..359f58578d 100644 --- a/src/xrpld/app/misc/README.md +++ b/src/xrpld/app/misc/README.md @@ -1,6 +1,6 @@ # Fee Voting -The Ripple payment protocol enforces a fee schedule expressed in units of the +The XRPL payment protocol enforces a fee schedule expressed in units of the native currency, XRP. Fees for transactions are paid directly from the account owner. There are also reserve requirements for each item that occupies storage in the ledger. The reserve fee schedule contains both a per-account reserve, @@ -20,7 +20,7 @@ subsequent ledgers a new fee schedule is enacted. ## Consensus -The Ripple consensus algorithm allows distributed participants to arrive at +The XRPL consensus algorithm allows distributed participants to arrive at the same answer for yes/no questions. The canonical case for consensus is whether or not a particular transaction is included in the ledger. Fees present a more difficult challenge, since the decision on the new fee is not @@ -54,7 +54,7 @@ be converged in the consensus process, the following algorithm is used: ## Configuration -A validating instance of rippled uses information in the configuration file +A validating instance of xrpld uses information in the configuration file to determine how it wants to vote on the fee schedule. It is the responsibility of the administrator to set these values. @@ -64,7 +64,7 @@ of the administrator to set these values. An Amendment is a new or proposed change to a ledger rule. Ledger rules affect transaction processing and consensus; peers must use the same set of rules for -consensus to succeed, otherwise different instances of rippled will get +consensus to succeed, otherwise different instances of xrpld will get different results. Amendments can be almost anything but they must be accepted by a network majority through a consensus process before they are utilized. An Amendment must receive at least an 80% approval rate from validating nodes for @@ -77,7 +77,7 @@ process of an Amendment from its conception to approval and usage. - Some members contribute their time and work to develop the Amendment. -- A pull request is created and the new code is folded into a rippled build +- A pull request is created and the new code is folded into an xrpld build and made available for use. - The consensus process begins with the validating nodes. diff --git a/src/xrpld/app/misc/SHAMapStoreImp.h b/src/xrpld/app/misc/SHAMapStoreImp.h index df3c16b24f..c361fa426c 100644 --- a/src/xrpld/app/misc/SHAMapStoreImp.h +++ b/src/xrpld/app/misc/SHAMapStoreImp.h @@ -195,7 +195,7 @@ private: clearPrior(LedgerIndex lastRotated); /** - * This is a health check for online deletion that waits until rippled is + * This is a health check for online deletion that waits until xrpld is * stable before returning. It returns an indication of whether the server * is stopping. * diff --git a/src/xrpld/app/misc/TxQ.h b/src/xrpld/app/misc/TxQ.h index 772d51b959..b9ea7cc8f6 100644 --- a/src/xrpld/app/misc/TxQ.h +++ b/src/xrpld/app/misc/TxQ.h @@ -398,9 +398,9 @@ private: Updates fee metrics based on the transactions in the ReadView for use in fee escalation calculations. - @param app Rippled Application object. + @param app Xrpld Application object. @param view View of the LCL that was just closed or received. - @param timeLeap Indicates that rippled is under load so fees + @param timeLeap Indicates that xrpld is under load so fees should grow faster. @param setup Customization params. */ diff --git a/src/xrpld/app/misc/ValidatorList.h b/src/xrpld/app/misc/ValidatorList.h index 9b7670a482..ff5aa8c71f 100644 --- a/src/xrpld/app/misc/ValidatorList.h +++ b/src/xrpld/app/misc/ValidatorList.h @@ -108,11 +108,11 @@ struct ValidatorBlobInfo Trusted Validators List ----------------------- - Rippled accepts ledger proposals and validations from trusted validator + Xrpld accepts ledger proposals and validations from trusted validator nodes. A ledger is considered fully-validated once the number of received trusted validations for a ledger meets or exceeds a quorum value. - This class manages the set of validation public keys the local rippled node + This class manages the set of validation public keys the local xrpld node trusts. The list of trusted keys is populated using the keys listed in the configuration file as well as lists signed by trusted publishers. The trusted publisher public keys are specified in the config. @@ -121,9 +121,9 @@ struct ValidatorBlobInfo @li @c "blob": Base64-encoded JSON string containing a @c "sequence", @c "validFrom", @c "validUntil", and @c "validators" field. @c "validFrom" - contains the Ripple timestamp (seconds since January 1st, 2000 (00:00 + contains the XRPL timestamp (seconds since January 1st, 2000 (00:00 UTC)) for when the list becomes valid. @c "validUntil" contains the - Ripple timestamp for when the list expires. @c "validators" contains + XRPL timestamp for when the list expires. @c "validators" contains an array of objects with a @c "validation_public_key" and optional @c "manifest" field. @c "validation_public_key" should be the hex-encoded master public key. @c "manifest" should be the diff --git a/src/xrpld/app/misc/ValidatorSite.h b/src/xrpld/app/misc/ValidatorSite.h index 270df6f9f0..ab82ae168d 100644 --- a/src/xrpld/app/misc/ValidatorSite.h +++ b/src/xrpld/app/misc/ValidatorSite.h @@ -28,7 +28,7 @@ namespace xrpl { @li @c "blob": Base64-encoded JSON string containing a @c "sequence", @c "validUntil", and @c "validators" field. @c "validUntil" contains the - Ripple timestamp (seconds since January 1st, 2000 (00:00 UTC)) for when + XRPL timestamp (seconds since January 1st, 2000 (00:00 UTC)) for when the list expires. @c "validators" contains an array of objects with a @c "validation_public_key" and optional @c "manifest" field. @c "validation_public_key" should be the hex-encoded master public key. diff --git a/src/xrpld/app/misc/detail/ValidatorList.cpp b/src/xrpld/app/misc/detail/ValidatorList.cpp index 0b203114b3..1951c657b0 100644 --- a/src/xrpld/app/misc/detail/ValidatorList.cpp +++ b/src/xrpld/app/misc/detail/ValidatorList.cpp @@ -340,7 +340,7 @@ ValidatorList::cacheValidatorFile(ValidatorList::lock_guard const& lock, PublicK boost::system::error_code ec; Json::Value value = buildFileData(strHex(pubKey), publisherLists_.at(pubKey), j_); - // rippled should be the only process writing to this file, so + // xrpld should be the only process writing to this file, so // if it ever needs to be read, it is not expected to change externally, so // delay the refresh as long as possible: 24 hours. (See also // `ValidatorSite::missingSite()`) diff --git a/src/xrpld/app/rdb/README.md b/src/xrpld/app/rdb/README.md index a50bb395c1..53e6b0c6fa 100644 --- a/src/xrpld/app/rdb/README.md +++ b/src/xrpld/app/rdb/README.md @@ -2,7 +2,7 @@ The guiding principles of the Relational Database Interface are summarized below: -- All hard-coded SQL statements should be stored in the [files](#source-files) under the `xrpld/app/rdb` directory. With the exception of test modules, no hard-coded SQL should be added to any other file in rippled. +- All hard-coded SQL statements should be stored in the [files](#source-files) under the `xrpld/app/rdb` directory. With the exception of test modules, no hard-coded SQL should be added to any other file in xrpld. - The base class `RelationalDatabase` is inherited by derived classes that each provide an interface for operating on distinct relational database systems. ## Overview diff --git a/src/xrpld/app/rdb/backend/detail/Node.cpp b/src/xrpld/app/rdb/backend/detail/Node.cpp index b176588771..bc19a25b40 100644 --- a/src/xrpld/app/rdb/backend/detail/Node.cpp +++ b/src/xrpld/app/rdb/backend/detail/Node.cpp @@ -1288,7 +1288,7 @@ dbHasSpace(soci::session& session, Config const& config, beast::Journal j) if (freeSpace < megabytes(512)) { JLOG(j.fatal()) << "Free SQLite space for transaction db is less than " - "512MB. To fix this, rippled must be executed with the " + "512MB. To fix this, xrpld must be executed with the " "vacuum parameter before restarting. " "Note that this activity can take multiple days, " "depending on database size."; diff --git a/src/xrpld/core/Config.h b/src/xrpld/core/Config.h index 78a35c6bc1..d4d8396ba5 100644 --- a/src/xrpld/core/Config.h +++ b/src/xrpld/core/Config.h @@ -273,10 +273,10 @@ public: // First, attempt to load the latest ledger directly from disk. bool FAST_LOAD = false; - // When starting rippled with existing database it do not know it has those + // When starting xrpld with existing database it do not know it has those // ledgers locally until the server naturally tries to backfill. This makes // is difficult to test some functionality (in particular performance - // testing sidechains). With this variable the user is able to force rippled + // testing sidechains). With this variable the user is able to force xrpld // to consider the ledger range to be present. It should be used for testing // only. std::optional> FORCED_LEDGER_RANGE_PRESENT; diff --git a/src/xrpld/core/TimeKeeper.h b/src/xrpld/core/TimeKeeper.h index 72c4468e1f..0d809d076d 100644 --- a/src/xrpld/core/TimeKeeper.h +++ b/src/xrpld/core/TimeKeeper.h @@ -34,7 +34,7 @@ public: protocol, but it is possible for them to make an educated guess if this server publishes proposals or validations. - @note The network time is adjusted for the "Ripple epoch" which + @note The network time is adjusted for the "XRPL epoch" which was arbitrarily defined as 2000-01-01T00:00:00Z by Arthur Britto and David Schwartz during early development of the code. No rationale has been provided for this curious and diff --git a/src/xrpld/overlay/README.md b/src/xrpld/overlay/README.md index 51eb96a001..bda0027ea7 100644 --- a/src/xrpld/overlay/README.md +++ b/src/xrpld/overlay/README.md @@ -3,11 +3,11 @@ ## Introduction The _XRP Ledger network_ consists of a collection of _peers_ running -**`rippled`** or other compatible software. Each peer maintains multiple +**`xrpld`** or other compatible software. Each peer maintains multiple outgoing connections and optional incoming connections to other peers. These connections are made over both the public Internet and private local area networks. This network defines a connected directed graph of nodes -where vertices are instances of `rippled` and edges are persistent TCP/IP +where vertices are instances of `xrpld` and edges are persistent TCP/IP connections. Peers send and receive messages to other connected peers. This peer to peer network, layered on top of the public and private Internet, forms an [_overlay network_][overlay_network]. The contents of the messages @@ -56,7 +56,7 @@ failed (e.g. by sending HTTP 400 "Bad Request" or HTTP 503 "Service Unavailable" ``` GET / HTTP/1.1 -User-Agent: rippled-1.4.0-b1+DEBUG +User-Agent: xrpld-1.4.0-b1+DEBUG Upgrade: RTXP/1.2, XRPL/2.0 Connection: Upgrade Connect-As: Peer @@ -77,7 +77,7 @@ HTTP/1.1 101 Switching Protocols Connection: Upgrade Upgrade: RTXP/1.2 Connect-As: Peer -Server: rippled-1.3.1 +Server: xrpld-1.3.1 Crawl: public Public-Key: n9K1ZXXXzzA3dtgKBuQUnZXkhygMRgZbSo3diFNPVHLMsUG5osJM Session-Signature: MEQCIHMlLGTcGyPvHji7WY2nRM2B0iSBnw9xeDUGW7bPq7IjAiAmy+ofEu+8nOq2eChRTr3wjoKi3EYRqLgzP+q+ORFcig== @@ -90,7 +90,7 @@ Previous-Ledger: EPvIpAD2iavGFyyZYi8REexAXyKGXsi1jMF7OIBY6/Y= ``` HTTP/1.1 503 Service Unavailable -Server: rippled-0.27.0 +Server: xrpld-0.27.0 Remote-Address: 63.104.209.13 Content-Length: 253 Content-Type: application/json @@ -354,9 +354,9 @@ transferred between A and B and will not be able to intelligently tamper with th message stream between Alice and Bob, although she may be still be able to inject delays or terminate the link. -# Ripple Clustering +# XRPL clustering -A cluster consists of more than one Ripple server under common +A cluster consists of more than one XRPL server under common administration that share load information, distribute cryptography operations, and provide greater response consistency. diff --git a/src/xrpld/overlay/detail/Handshake.cpp b/src/xrpld/overlay/detail/Handshake.cpp index f70ec864da..9d86724b82 100644 --- a/src/xrpld/overlay/detail/Handshake.cpp +++ b/src/xrpld/overlay/detail/Handshake.cpp @@ -99,7 +99,7 @@ makeFeaturesResponseHeader( @note This construct is non-standard. There are potential "standard" alternatives that should be considered. For a discussion, on this topic, see https://github.com/openssl/openssl/issues/5509 and - https://github.com/ripple/rippled/issues/2413. + https://github.com/XRPLF/rippled/issues/2413. */ static std::optional> hashLastMessage(SSL const* ssl, size_t (*get)(const SSL*, void*, size_t)) diff --git a/src/xrpld/overlay/detail/OverlayImpl.cpp b/src/xrpld/overlay/detail/OverlayImpl.cpp index 9bfd3f6818..10ebae6b0f 100644 --- a/src/xrpld/overlay/detail/OverlayImpl.cpp +++ b/src/xrpld/overlay/detail/OverlayImpl.cpp @@ -663,7 +663,7 @@ OverlayImpl::reportOutboundTraffic(TrafficCount::category cat, int size) } /** The number of active peers on the network Active peers are only those peers that have completed the handshake - and are running the Ripple protocol. + and are running the XRPL protocol. */ std::size_t OverlayImpl::size() const diff --git a/src/xrpld/overlay/detail/PeerImp.h b/src/xrpld/overlay/detail/PeerImp.h index 61b8e1e758..7f7d8c9324 100644 --- a/src/xrpld/overlay/detail/PeerImp.h +++ b/src/xrpld/overlay/detail/PeerImp.h @@ -408,7 +408,7 @@ public: return publicKey_; } - /** Return the version of rippled that the peer is running, if reported. */ + /** Return the version of xrpld that the peer is running, if reported. */ std::string getVersion() const; diff --git a/src/xrpld/overlay/detail/PeerReservationTable.cpp b/src/xrpld/overlay/detail/PeerReservationTable.cpp index 8f90848954..6ea2253df9 100644 --- a/src/xrpld/overlay/detail/PeerReservationTable.cpp +++ b/src/xrpld/overlay/detail/PeerReservationTable.cpp @@ -38,7 +38,7 @@ PeerReservationTable::list() const -> std::vector return list; } -// See `ripple/app/main/DBInit.cpp` for the `CREATE TABLE` statement. +// See `include/xrpl/rdb/DBInit.h` for the `CREATE TABLE` statement. // It is unfortunate that we do not get to define a function for it. // We choose a `bool` return type to fit in with the error handling scheme diff --git a/src/xrpld/peerfinder/README.md b/src/xrpld/peerfinder/README.md index 806984035b..e6eda747ce 100644 --- a/src/xrpld/peerfinder/README.md +++ b/src/xrpld/peerfinder/README.md @@ -2,8 +2,8 @@ ## Introduction -The _Ripple payment network_ consists of a collection of _peers_ running the -**rippled software**. Each peer maintains multiple outgoing connections and +The _XRPL payment network_ consists of a collection of _peers_ running the +**xrpld software**. Each peer maintains multiple outgoing connections and optional incoming connections to other peers. These connections are made over both the public Internet and private local area networks. This network defines a fully connected directed graph of nodes. Peers send and receive messages to @@ -175,7 +175,7 @@ When choosing addresses from the boot cache for the purpose of establishing outgoing connections, addresses are ranked in decreasing order of valence. The Bootcache is persistent. Entries are periodically inserted and updated in the corresponding SQLite database during program operation. When -**rippled** is launched, the existing Bootcache database data is accessed and +**xrpld** is launched, the existing Bootcache database data is accessed and loaded to accelerate the bootstrap process. Desirable entries in the Bootcache are addresses for servers which are known to @@ -306,7 +306,7 @@ the address, and its retry timer has expired. The PeerFinder makes its best effort to become fully connected to the fixed addresses specified in the configuration file before moving on to establish -outgoing connections to foreign peers. This security feature helps rippled +outgoing connections to foreign peers. This security feature helps xrpld establish itself with a trusted set of peers first before accepting untrusted data from the network. diff --git a/src/xrpld/peerfinder/detail/Bootcache.cpp b/src/xrpld/peerfinder/detail/Bootcache.cpp index 580ebe0c53..dac55d50d6 100644 --- a/src/xrpld/peerfinder/detail/Bootcache.cpp +++ b/src/xrpld/peerfinder/detail/Bootcache.cpp @@ -134,7 +134,7 @@ Bootcache::on_success(beast::IP::Endpoint const& endpoint) ++entry.valence(); m_map.erase(result.first); result = m_map.insert(value_type(endpoint, entry)); - XRPL_ASSERT(result.second, "ripple:PeerFinder::Bootcache::on_success : endpoint inserted"); + XRPL_ASSERT(result.second, "xrpl::PeerFinder::Bootcache::on_success : endpoint inserted"); } Entry const& entry(result.first->right); JLOG(m_journal.info()) << beast::leftw(18) << "Bootcache connect " << endpoint << " with " @@ -158,7 +158,7 @@ Bootcache::on_failure(beast::IP::Endpoint const& endpoint) --entry.valence(); m_map.erase(result.first); result = m_map.insert(value_type(endpoint, entry)); - XRPL_ASSERT(result.second, "ripple:PeerFinder::Bootcache::on_failure : endpoint inserted"); + XRPL_ASSERT(result.second, "xrpl::PeerFinder::Bootcache::on_failure : endpoint inserted"); } Entry const& entry(result.first->right); auto const n(std::abs(entry.valence())); diff --git a/src/xrpld/rpc/README.md b/src/xrpld/rpc/README.md index 749f3d0ed1..cf023770ea 100644 --- a/src/xrpld/rpc/README.md +++ b/src/xrpld/rpc/README.md @@ -6,7 +6,7 @@ By default, an RPC handler runs as an uninterrupted task on the JobQueue. This is fine for commands that are fast to compute but might not be acceptable for tasks that require multiple parts or are large, like a full ledger. -For this purpose, the rippled RPC handler allows _suspension with continuation_ +For this purpose, the xrpld RPC handler allows _suspension with continuation_ - a request to suspend execution of the RPC response and to continue it after some function or job has been executed. A default continuation is supplied diff --git a/src/xrpld/rpc/RPCCall.h b/src/xrpld/rpc/RPCCall.h index 6ab9f1d1fa..9994195bb0 100644 --- a/src/xrpld/rpc/RPCCall.h +++ b/src/xrpld/rpc/RPCCall.h @@ -20,7 +20,7 @@ namespace xrpl { // // Improvements to be more strict and to provide better diagnostics are welcome. -/** Processes Ripple RPC calls. */ +/** Processes XRPL RPC calls. */ namespace RPCCall { int @@ -52,7 +52,7 @@ rpcCmdToJson( beast::Journal j); /** Internal invocation of RPC client. - * Used by both rippled command line as well as rippled unit tests + * Used by both xrpld command line as well as xrpld unit tests */ std::pair rpcClient( diff --git a/src/xrpld/rpc/detail/RPCCall.cpp b/src/xrpld/rpc/detail/RPCCall.cpp index f4613a3e72..4396037f2e 100644 --- a/src/xrpld/rpc/detail/RPCCall.cpp +++ b/src/xrpld/rpc/detail/RPCCall.cpp @@ -118,7 +118,7 @@ private: if (!strIssuer.empty()) { - // Could confirm issuer is a valid Ripple address. + // Could confirm issuer is a valid XRPL address. jvResult[jss::issuer] = strIssuer; } @@ -1406,7 +1406,7 @@ struct RPCCallImp { Throw( "no response from server. Please " - "ensure that the rippled server is running in another " + "ensure that the xrpld server is running in another " "process."); } diff --git a/src/xrpld/rpc/detail/RPCHelpers.cpp b/src/xrpld/rpc/detail/RPCHelpers.cpp index 120479ded8..190254fc37 100644 --- a/src/xrpld/rpc/detail/RPCHelpers.cpp +++ b/src/xrpld/rpc/detail/RPCHelpers.cpp @@ -114,10 +114,10 @@ readLimitField(unsigned int& limit, Tuning::LimitRange const& range, JsonContext } std::optional -parseRippleLibSeed(Json::Value const& value) +parseXrplLibSeed(Json::Value const& value) { - // ripple-lib encodes seed used to generate an Ed25519 wallet in a - // non-standard way. While rippled never encode seeds that way, we + // XrplLib encodes seed used to generate an Ed25519 wallet in a + // non-standard way. While xrpld never encode seeds that way, we // try to detect such keys to avoid user confusion. if (!value.isString()) return std::nullopt; @@ -258,14 +258,14 @@ keypairForSignature(Json::Value const& params, Json::Value& error, unsigned int } } - // ripple-lib encodes seed used to generate an Ed25519 wallet in a + // XrplLib encodes seed used to generate an Ed25519 wallet in a // non-standard way. While we never encode seeds that way, we try // to detect such keys to avoid user confusion. // using strcmp as pointers may not match (see // https://developercommunity.visualstudio.com/t/assigning-constexpr-char--to-static-cha/10021357?entry=problem) if (strcmp(secretType, jss::seed_hex.c_str()) != 0) { - seed = RPC::parseRippleLibSeed(params[secretType]); + seed = RPC::parseXrplLibSeed(params[secretType]); if (seed) { diff --git a/src/xrpld/rpc/detail/RPCHelpers.h b/src/xrpld/rpc/detail/RPCHelpers.h index 54a976b78e..00a0018870 100644 --- a/src/xrpld/rpc/detail/RPCHelpers.h +++ b/src/xrpld/rpc/detail/RPCHelpers.h @@ -94,16 +94,16 @@ std::optional getSeedFromRPC(Json::Value const& params, Json::Value& error); /** - * @brief Parses a RippleLib seed from RPC parameters. + * @brief Parses a XrplLib seed from RPC parameters. * * Attempts to extract and return a Seed from the provided JSON parameters using - * RippleLib conventions. + * XrplLib conventions. * * @param params The JSON value containing RPC parameters. * @return An optional Seed if parsing is successful, or std::nullopt otherwise. */ std::optional -parseRippleLibSeed(Json::Value const& params); +parseXrplLibSeed(Json::Value const& params); /** * @brief Chooses the ledger entry type based on RPC parameters. diff --git a/src/xrpld/rpc/handlers/admin/keygen/WalletPropose.cpp b/src/xrpld/rpc/handlers/admin/keygen/WalletPropose.cpp index ec06017b1b..428dfb5380 100644 --- a/src/xrpld/rpc/handlers/admin/keygen/WalletPropose.cpp +++ b/src/xrpld/rpc/handlers/admin/keygen/WalletPropose.cpp @@ -56,7 +56,7 @@ walletPropose(Json::Value const& params) { std::optional keyType; std::optional seed; - bool rippleLibSeed = false; + bool libSeed = false; if (params.isMember(jss::key_type)) { @@ -71,22 +71,22 @@ walletPropose(Json::Value const& params) return rpcError(rpcINVALID_PARAMS); } - // ripple-lib encodes seed used to generate an Ed25519 wallet in a + // XrplLib encodes seed used to generate an Ed25519 wallet in a // non-standard way. While we never encode seeds that way, we try // to detect such keys to avoid user confusion. { if (params.isMember(jss::passphrase)) { - seed = RPC::parseRippleLibSeed(params[jss::passphrase]); + seed = RPC::parseXrplLibSeed(params[jss::passphrase]); } else if (params.isMember(jss::seed)) { - seed = RPC::parseRippleLibSeed(params[jss::seed]); + seed = RPC::parseXrplLibSeed(params[jss::seed]); } if (seed) { - rippleLibSeed = true; + libSeed = true; // If the user *explicitly* requests a key type other than // Ed25519 we return an error. @@ -137,7 +137,7 @@ walletPropose(Json::Value const& params) // If a passphrase was specified, and it was hashed and used as a seed // run a quick entropy check and add an appropriate warning, because // "brain wallets" can be easily attacked. - if (!rippleLibSeed && params.isMember(jss::passphrase)) + if (!libSeed && params.isMember(jss::passphrase)) { auto const passphrase = params[jss::passphrase].asString(); diff --git a/src/xrpld/rpc/handlers/orderbook/RipplePathFind.cpp b/src/xrpld/rpc/handlers/orderbook/RipplePathFind.cpp index ac4f22a1aa..1b19061b9d 100644 --- a/src/xrpld/rpc/handlers/orderbook/RipplePathFind.cpp +++ b/src/xrpld/rpc/handlers/orderbook/RipplePathFind.cpp @@ -94,7 +94,7 @@ doRipplePathFind(RPC::JsonContext& context) // Both of these failure modes are hard to recreate in a unit test // because they are so dependent on inter-thread timing. However // the failure modes can be observed by synchronously (inside the - // rippled source code) shutting down the application. The code to + // xrpld source code) shutting down the application. The code to // do so looks like this: // // context.app.signalStop(); diff --git a/src/xrpld/rpc/handlers/transaction/Simulate.cpp b/src/xrpld/rpc/handlers/transaction/Simulate.cpp index c1d6d7f334..433603338d 100644 --- a/src/xrpld/rpc/handlers/transaction/Simulate.cpp +++ b/src/xrpld/rpc/handlers/transaction/Simulate.cpp @@ -339,7 +339,7 @@ doSimulate(RPC::JsonContext& context) { return simulateTxn(context, transaction); } - // LCOV_EXCL_START this is just in case, so rippled doesn't crash + // LCOV_EXCL_START this is just in case, so xrpld doesn't crash catch (std::exception const& e) { Json::Value jvResult = Json::objectValue; diff --git a/tests/README.md b/tests/README.md index c4a96005e7..431c2c464a 100644 --- a/tests/README.md +++ b/tests/README.md @@ -1,5 +1,5 @@ # Integration tests This directory contains integration tests for the project. These tests are run -against the `libxrpl` library or `rippled` binary to verify they are working as +against the `libxrpl` library or `xrpld` binary to verify they are working as expected. From 52af9582e2b00293354a2e2d45ca1b34c49341e5 Mon Sep 17 00:00:00 2001 From: Ayaz Salikhov Date: Tue, 7 Apr 2026 15:32:13 +0100 Subject: [PATCH 112/137] ci: Change conditions for uploading artifacts in public/private/org repos (#6734) --- .github/workflows/publish-docs.yml | 4 ++-- .github/workflows/reusable-build-test-config.yml | 2 +- .github/workflows/reusable-clang-tidy-files.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/publish-docs.yml b/.github/workflows/publish-docs.yml index bed97cfafa..48832cb079 100644 --- a/.github/workflows/publish-docs.yml +++ b/.github/workflows/publish-docs.yml @@ -81,13 +81,13 @@ jobs: cmake --build . --target docs --parallel ${BUILD_NPROC} - name: Create documentation artifact - if: ${{ (github.repository_owner == 'XRPLF' || github.event.repository.visibility == 'public') && github.event_name == 'push' }} + if: ${{ github.event.repository.visibility == 'public' && github.event_name == 'push' }} uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # v4.0.0 with: path: ${{ env.BUILD_DIR }}/docs/html deploy: - if: ${{ (github.repository_owner == 'XRPLF' || github.event.repository.visibility == 'public') && github.event_name == 'push' }} + if: ${{ github.repository == 'XRPLF/rippled' && github.event_name == 'push' }} needs: build runs-on: ubuntu-latest permissions: diff --git a/.github/workflows/reusable-build-test-config.yml b/.github/workflows/reusable-build-test-config.yml index c79b22ac54..57112ed96a 100644 --- a/.github/workflows/reusable-build-test-config.yml +++ b/.github/workflows/reusable-build-test-config.yml @@ -199,7 +199,7 @@ jobs: fi - name: Upload the binary (Linux) - if: ${{ (github.repository_owner == 'XRPLF' || github.event.repository.visibility == 'public') && runner.os == 'Linux' }} + if: ${{ github.event.repository.visibility == 'public' && runner.os == 'Linux' }} uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: xrpld-${{ inputs.config_name }} diff --git a/.github/workflows/reusable-clang-tidy-files.yml b/.github/workflows/reusable-clang-tidy-files.yml index b6c66bc27a..a64a773c86 100644 --- a/.github/workflows/reusable-clang-tidy-files.yml +++ b/.github/workflows/reusable-clang-tidy-files.yml @@ -83,7 +83,7 @@ jobs: run-clang-tidy -j ${{ steps.nproc.outputs.nproc }} -p "${BUILD_DIR}" -quiet -allow-no-checks ${TARGETS} 2>&1 | tee clang-tidy-output.txt - name: Upload clang-tidy output - if: ${{ (github.repository_owner == 'XRPLF' || github.event.repository.visibility == 'public') && steps.run_clang_tidy.outcome != 'success' }} + if: ${{ github.event.repository.visibility == 'public' && steps.run_clang_tidy.outcome != 'success' }} uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: clang-tidy-results From 2cc9439fde615063aed3bf8f000703aa531a7982 Mon Sep 17 00:00:00 2001 From: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> Date: Tue, 7 Apr 2026 20:15:40 +0100 Subject: [PATCH 113/137] fix: Handle WSClient write failure when server closes WebSocket (#6671) Co-authored-by: Claude Opus 4.6 --- src/test/jtx/impl/WSClient.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/test/jtx/impl/WSClient.cpp b/src/test/jtx/impl/WSClient.cpp index 0c9b72c4d0..2c3389c131 100644 --- a/src/test/jtx/impl/WSClient.cpp +++ b/src/test/jtx/impl/WSClient.cpp @@ -184,7 +184,14 @@ public: jp[jss::command] = cmd; } auto const s = to_string(jp); - ws_.write_some(true, buffer(s)); + + // Use the error_code overload to avoid an unhandled exception + // when the server closes the WebSocket connection (e.g. after + // booting a client that exceeded resource thresholds). + error_code ec; + ws_.write_some(true, buffer(s), ec); + if (ec) + return {}; } auto jv = From 75f66bd9fe1eab2963a2ad7b6781f4a092a89c28 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 7 Apr 2026 17:24:48 -0400 Subject: [PATCH 114/137] fix build --- src/libxrpl/tx/wasm/HostFuncImplNFT.cpp | 2 +- src/test/app/TestHostFunctions.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp b/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp index ac002d723f..510d6a886f 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp @@ -1,6 +1,6 @@ +#include #include #include -#include #include namespace xrpl { diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index 0e74cd6283..7c12329aaa 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -3,8 +3,8 @@ #include #include +#include #include -#include #include #include From d2641d85bd6816e5bd3714acc1a6568cda99470b Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Tue, 7 Apr 2026 20:19:19 -0400 Subject: [PATCH 115/137] New floats format, STAmount compatible (#6600) --- cspell.config.yaml | 1 + include/xrpl/basics/Number.h | 3 + include/xrpl/tx/wasm/HostFunc.h | 56 + include/xrpl/tx/wasm/HostFuncImpl.h | 28 +- include/xrpl/tx/wasm/HostFuncWrapper.h | 25 + src/libxrpl/basics/Number.cpp | 15 +- src/libxrpl/tx/wasm/HostFuncImplFloat.cpp | 402 ++++--- src/libxrpl/tx/wasm/HostFuncImplGetter.cpp | 1 + src/libxrpl/tx/wasm/HostFuncWrapper.cpp | 221 +++- src/libxrpl/tx/wasm/WasmVM.cpp | 6 + src/test/app/HostFuncImpl_test.cpp | 695 +++++++++--- src/test/app/TestHostFunctions.h | 36 + src/test/app/Wasm_test.cpp | 6 +- src/test/app/wasm_fixtures/fixtures.cpp | 364 ++++-- src/test/app/wasm_fixtures/float_0/Cargo.lock | 171 +++ src/test/app/wasm_fixtures/float_0/Cargo.toml | 21 + src/test/app/wasm_fixtures/float_0/src/lib.rs | 57 + .../app/wasm_fixtures/float_tests/src/lib.rs | 1004 +++++++++++++++-- src/test/basics/Number_test.cpp | 16 +- 19 files changed, 2566 insertions(+), 562 deletions(-) create mode 100644 src/test/app/wasm_fixtures/float_0/Cargo.lock create mode 100644 src/test/app/wasm_fixtures/float_0/Cargo.toml create mode 100644 src/test/app/wasm_fixtures/float_0/src/lib.rs diff --git a/cspell.config.yaml b/cspell.config.yaml index 6eef313efb..e5775dd7ad 100644 --- a/cspell.config.yaml +++ b/cspell.config.yaml @@ -249,6 +249,7 @@ words: - STATSDCOLLECTOR - stissue - stnum + - stnumber - stobj - stobject - stpath diff --git a/include/xrpl/basics/Number.h b/include/xrpl/basics/Number.h index e2efcdfbef..21fe6a5b3a 100644 --- a/include/xrpl/basics/Number.h +++ b/include/xrpl/basics/Number.h @@ -381,6 +381,9 @@ public: friend Number root2(Number f); + friend Number + log10(Number const&, int); + // Thread local rounding control. Default is to_nearest enum rounding_mode { to_nearest, towards_zero, downward, upward }; static rounding_mode diff --git a/include/xrpl/tx/wasm/HostFunc.h b/include/xrpl/tx/wasm/HostFunc.h index a3a26cfbaf..d08ca6c1b0 100644 --- a/include/xrpl/tx/wasm/HostFunc.h +++ b/include/xrpl/tx/wasm/HostFunc.h @@ -37,6 +37,8 @@ enum class HostFunctionError : int32_t { OUT_OF_GAS = -22, }; +using FloatPair = std::pair; + inline int32_t HfErrorToInt(HostFunctionError e) { @@ -54,6 +56,24 @@ floatFromIntImpl(int64_t x, int32_t mode); Expected floatFromUintImpl(uint64_t x, int32_t mode); +Expected +floatFromSTAmountImpl(STAmount const& x, int32_t mode); + +Expected +floatFromSTNumberImpl(STNumber const& x, int32_t mode); + +Expected +floatToIntImpl(Slice const& x, int32_t mode); + +Expected +floatToMantissaAndExponentImpl(Slice const& x); + +Expected +floatNegateImpl(Slice const& x); + +Expected +floatAbsImpl(Slice const& x); + Expected floatSetImpl(int64_t mantissa, int32_t exponent, int32_t mode); @@ -440,6 +460,42 @@ struct HostFunctions return Unexpected(HostFunctionError::INTERNAL); } + virtual Expected + floatFromSTAmount(STAmount const& x, int32_t mode) const + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + floatFromSTNumber(STNumber const& x, int32_t mode) const + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + floatToInt(Slice const& x, int32_t mode) const + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + floatToMantissaAndExponent(Slice const& x) const + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + floatNegate(Slice const& x) const + { + return Unexpected(HostFunctionError::INTERNAL); + } + + virtual Expected + floatAbs(Slice const& x) const + { + return Unexpected(HostFunctionError::INTERNAL); + } + virtual Expected floatSet(int64_t mantissa, int32_t exponent, int32_t mode) const { diff --git a/include/xrpl/tx/wasm/HostFuncImpl.h b/include/xrpl/tx/wasm/HostFuncImpl.h index 6992e1f523..dac5138416 100644 --- a/include/xrpl/tx/wasm/HostFuncImpl.h +++ b/include/xrpl/tx/wasm/HostFuncImpl.h @@ -254,6 +254,24 @@ public: Expected floatFromUint(uint64_t x, int32_t mode) const override; + Expected + floatFromSTAmount(STAmount const& x, int32_t mode) const override; + + Expected + floatFromSTNumber(STNumber const& x, int32_t mode) const override; + + Expected + floatToInt(Slice const& x, int32_t mode) const override; + + Expected + floatToMantissaAndExponent(Slice const& x) const override; + + Expected + floatNegate(Slice const& x) const override; + + Expected + floatAbs(Slice const& x) const override; + Expected floatSet(int64_t mantissa, int32_t exponent, int32_t mode) const override; @@ -282,14 +300,4 @@ public: floatLog(Slice const& x, int32_t mode) const override; }; -namespace wasm_float { - -// The range for the mantissa and exponent when normalized -static std::int64_t constexpr wasmMinMantissa = 1'000'000'000'000'000ll; -static std::int64_t constexpr wasmMaxMantissa = wasmMinMantissa * 10 - 1; -static int constexpr wasmMinExponent = -96; -static int constexpr wasmMaxExponent = 80; - -} // namespace wasm_float - } // namespace xrpl diff --git a/include/xrpl/tx/wasm/HostFuncWrapper.h b/include/xrpl/tx/wasm/HostFuncWrapper.h index 444c3be97c..c86b9673c7 100644 --- a/include/xrpl/tx/wasm/HostFuncWrapper.h +++ b/include/xrpl/tx/wasm/HostFuncWrapper.h @@ -260,6 +260,31 @@ using floatFromUint_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t, wasm_trap_t* floatFromUint_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +using floatFromSTAmount_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); +wasm_trap_t* +floatFromSTAmount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); + +using floatFromSTNumber_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); +wasm_trap_t* +floatFromSTNumber_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); + +using floatToInt_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); +wasm_trap_t* +floatToInt_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); + +using floatToMantissaAndExponent_proto = + int32_t(uint8_t const*, int32_t, uint8_t*, int32_t, uint8_t*, int32_t); +wasm_trap_t* +floatToMantissaAndExponent_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); + +using floatNegate_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); +wasm_trap_t* +floatNegate_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); + +using floatAbs_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); +wasm_trap_t* +floatAbs_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); + using floatSet_proto = int32_t(int32_t, int64_t, uint8_t*, int32_t, int32_t); wasm_trap_t* floatSet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); diff --git a/src/libxrpl/basics/Number.cpp b/src/libxrpl/basics/Number.cpp index dbdb40e94f..e714f6ac91 100644 --- a/src/libxrpl/basics/Number.cpp +++ b/src/libxrpl/basics/Number.cpp @@ -949,10 +949,10 @@ power(Number const& f, unsigned n) static Number ln(Number const& x, int iterations = 50) { - static Number const N0(0); - static Number const N2(2, 0); - static Number const N05(5, -1); - static Number const LN2(693'147'180'559'945'309ll, -18); + Number const N0(0); + Number const N2(2, 0); + Number const N05(5, -1); + Number const LN2(693'147'180'559'945'309ll, -18); if (x <= 0) { @@ -993,8 +993,8 @@ ln(Number const& x, int iterations = 50) Number log10(Number const& x, int iterations) { - static Number const N0(0); - static Number const LN10(2'302'585'092'994'046ll, -15); + Number const N0(0); + Number const LN10(2'302'585'092'994'045'684ll, -18); if (x <= 0) { @@ -1012,8 +1012,9 @@ log10(Number const& x, int iterations) } // (1 <= normalX < 10) + // x = normalX * 10^norm // ln(x) = ln(normalX * 10^norm) = ln(normalX) + norm * ln(10) - int const diffExp = 15 + x.exponent(); + int const diffExp = Number::mantissaLog() + x.exponent_; Number const normalX = x / Number(1, diffExp); auto const lnX = ln(normalX, iterations) + diffExp * LN10; auto const lgX = lnX / LN10; diff --git a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp index 1faaeab805..234bfec443 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp @@ -1,4 +1,6 @@ +#include #include +#include #include #include @@ -12,137 +14,78 @@ namespace wasm_float { namespace detail { -class Number2 : public Number +class WasmNumber : public Number { protected: - static Bytes const floatNull; - static unsigned constexpr encodedFloatSize = 8; - static int32_t constexpr encodedMantissaBits = 54; - static int32_t constexpr encodedExponentBits = 8; - - static_assert(wasmMinExponent < 0); - - static uint64_t constexpr maxEncodedMantissa = (1ull << (encodedMantissaBits + 1)) - 1; - - bool good_; + static unsigned constexpr encodedFloatSize = 12; + bool good_ = false; public: - Number2(Slice const& data) : good_(false) + WasmNumber(Slice const& data) { if (data.size() != encodedFloatSize) return; - - if (std::ranges::equal(floatNull, data)) + try + { + SerialIter it(data); + Number const x = STNumber(it, sfNumber).value(); + *static_cast(this) = x; + } + catch (...) { - good_ = true; return; } - uint64_t const v = SerialIter(data).get64(); - if ((v & STAmount::cIssuedCurrency) == 0u) - return; - - int32_t const e = static_cast((v >> encodedMantissaBits) & 0xFFull); - int32_t const decodedExponent = e + wasmMinExponent - 1; // e - 97 - if (decodedExponent < wasmMinExponent || decodedExponent > wasmMaxExponent) - return; - - int64_t const neg = ((v & STAmount::cPositive) != 0u) ? 1 : -1; - int64_t const m = neg * static_cast(v & ((1ull << encodedMantissaBits) - 1)); - if (m == 0) - return; - - Number const x(makeNumber(m, decodedExponent)); - if (m != x.mantissa() || decodedExponent != x.exponent()) - return; // not canonical - *static_cast(this) = x; - good_ = true; } + WasmNumber(Number const& n) : WasmNumber(n.mantissa(), n.exponent()) // ensure Number canonized + { + } + template - Number2(T mantissa = 0, int32_t exponent = 0) : Number(), good_(false) + WasmNumber(T mantissa = 0, int32_t exponent = 0) { - if (!mantissa) + try + { + Number n; + if constexpr (std::is_signed_v) + { + n = Number(static_cast(mantissa), exponent); + } + else + { + n = Number(static_cast(mantissa), exponent, Number::normalized()); + } + *static_cast(this) = n; + } + catch (...) { - good_ = true; return; } - - auto const n = makeNumber(mantissa, exponent); - auto const e = n.exponent(); - if (e < wasmMinExponent) - { - good_ = true; // value is zero(as in Numbers behavior) - return; - } - - if (e > wasmMaxExponent) - return; - - *static_cast(this) = n; good_ = true; } - Number2(Number const& n) : Number2(n.mantissa(), n.exponent()) // ensure Number canonized - { - } - - static Number - makeNumber(int64_t mantissa, int32_t exponent) - { - if (mantissa < 0) - return Number(true, -static_cast(mantissa), exponent, Number::normalized()); - return Number(false, mantissa, exponent, Number::normalized()); - } - - static Number - makeNumber(uint64_t mantissa, int32_t exponent) - { - return Number(false, mantissa, exponent, Number::normalized()); - } + WasmNumber& + operator=(WasmNumber const&) = default; + explicit operator bool() const { return good_; } + explicit + operator int64_t() const + { + return Number::operator int64_t(); + } + Expected toBytes() const { - if (!good_) - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); - - auto const m = mantissa(); - auto const e = exponent(); - - uint64_t v = m >= 0 ? STAmount::cPositive : 0; - v |= STAmount::cIssuedCurrency; - - uint64_t const absM = std::abs(m); - if (absM == 0u) - { - return floatNull; - } - if (absM > maxEncodedMantissa) - { - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_LINE - } - v |= absM; - - if (e > wasmMaxExponent) - { - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); - } - if (e < wasmMinExponent) - { - return floatNull; - } - uint64_t const normExp = e - wasmMinExponent + 1; //+97 - v |= normExp << encodedMantissaBits; - Serializer msg; - msg.add64(v); + STNumber(sfNumber, *this).add(msg); auto data = msg.getData(); #ifdef DEBUG_OUTPUT @@ -153,33 +96,26 @@ public: std::cout << std::setw(2) << (unsigned)c << " "; std::cout << std::dec << std::setfill(' ') << std::endl; #endif - return data; } }; -Bytes const Number2::floatNull = {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - struct FloatState { Number::rounding_mode oldMode_; - MantissaRange::mantissa_scale oldScale_; - bool good_{false}; + bool good_ = false; - FloatState(int32_t mode) : oldMode_(Number::getround()), oldScale_(Number::getMantissaScale()) + FloatState(int32_t mode) : oldMode_(Number::getround()) { if (mode < Number::rounding_mode::to_nearest || mode > Number::rounding_mode::upward) return; - Number::setround(static_cast(mode)); - Number::setMantissaScale(MantissaRange::mantissa_scale::small); good_ = true; } ~FloatState() { Number::setround(oldMode_); - Number::setMantissaScale(oldScale_); } operator bool() const @@ -195,7 +131,7 @@ floatToString(Slice const& data) { // set default mode as we don't expect it will be used here detail::FloatState const rm(Number::rounding_mode::to_nearest); - detail::Number2 const num(data); + detail::WasmNumber const num(data); if (!num) { std::string hex; @@ -203,7 +139,6 @@ floatToString(Slice const& data) boost::algorithm::hex(data.begin(), data.end(), std::back_inserter(hex)); return "Invalid data: " + hex; } - auto const s = to_string(num); return s; } @@ -217,15 +152,17 @@ floatFromIntImpl(int64_t x, int32_t mode) if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 const num(x); - return num.toBytes(); + detail::WasmNumber const num(x); + if (!num) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); // LCOV_EXCL_LINE + auto const r = num.toBytes(); + return r; } // LCOV_EXCL_START catch (...) { return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); } - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_STOP } @@ -238,8 +175,10 @@ floatFromUintImpl(uint64_t x, int32_t mode) if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 const num(x); - auto r = num.toBytes(); + detail::WasmNumber const num(x); + if (!num) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); // LCOV_EXCL_LINE + auto const r = num.toBytes(); return r; } // LCOV_EXCL_START @@ -247,7 +186,146 @@ floatFromUintImpl(uint64_t x, int32_t mode) { return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); } - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + // LCOV_EXCL_STOP +} + +Expected +floatFromSTAmountImpl(STAmount const& x, int32_t mode) +{ + try + { + detail::FloatState const rm(mode); + if (!rm) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + detail::WasmNumber const num(static_cast(x)); + if (!num) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); // LCOV_EXCL_LINE + auto const r = num.toBytes(); + return r; + } + // LCOV_EXCL_START + catch (...) + { + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + } + // LCOV_EXCL_STOP +} + +Expected +floatFromSTNumberImpl(STNumber const& x, int32_t mode) +{ + try + { + detail::FloatState const rm(mode); + if (!rm) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + detail::WasmNumber const num(x.value()); + if (!num) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); // LCOV_EXCL_LINE + auto const r = num.toBytes(); + return r; + } + // LCOV_EXCL_START + catch (...) + { + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + } + // LCOV_EXCL_STOP +} + +Expected +floatToIntImpl(Slice const& x, int32_t mode) +{ + try + { + detail::FloatState const rm(mode); + if (!rm) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + detail::WasmNumber const num(x); + if (!num) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); // LCOV_EXCL_LINE + int64_t const r(num); + return r; + } + // LCOV_EXCL_START + catch (...) + { + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + } + // LCOV_EXCL_STOP +} + +Expected +floatToMantissaAndExponentImpl(Slice const& x) +{ + try + { + detail::FloatState const rm(Number::rounding_mode::to_nearest); + if (!rm) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + detail::WasmNumber const num(x); + if (!num) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); // LCOV_EXCL_LINE + + return FloatPair(num.mantissa(), num.exponent()); + } + // LCOV_EXCL_START + catch (...) + { + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + } + // LCOV_EXCL_STOP +} + +Expected +floatNegateImpl(Slice const& x) +{ + try + { + detail::FloatState const rm(Number::rounding_mode::to_nearest); + if (!rm) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + detail::WasmNumber const num(x); + if (!num) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + detail::WasmNumber const res = -num; + return res.toBytes(); + } + // LCOV_EXCL_START + catch (...) + { + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + } + // LCOV_EXCL_STOP +} + +Expected +floatAbsImpl(Slice const& x) +{ + try + { + detail::FloatState const rm(Number::rounding_mode::to_nearest); + if (!rm) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + detail::WasmNumber const num(x); + if (!num) + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + + detail::WasmNumber const res = abs(num); + return res.toBytes(); + } + // LCOV_EXCL_START + catch (...) + { + return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + } // LCOV_EXCL_STOP } @@ -259,16 +337,15 @@ floatSetImpl(int64_t mantissa, int32_t exponent, int32_t mode) detail::FloatState const rm(mode); if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 const num(mantissa, exponent); + detail::WasmNumber const num(mantissa, exponent); if (!num) - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); return num.toBytes(); } catch (...) { return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); } - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); } Expected @@ -278,10 +355,11 @@ floatCompareImpl(Slice const& x, Slice const& y) { // set default mode as we don't expect it will be used here detail::FloatState const rm(Number::rounding_mode::to_nearest); - detail::Number2 const xx(x); + + detail::WasmNumber const xx(x); if (!xx) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 const yy(y); + detail::WasmNumber const yy(y); if (!yy) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); if (xx < yy) @@ -295,7 +373,6 @@ floatCompareImpl(Slice const& x, Slice const& y) { return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); } - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_STOP } @@ -308,13 +385,13 @@ floatAddImpl(Slice const& x, Slice const& y, int32_t mode) if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 const xx(x); + detail::WasmNumber const xx(x); if (!xx) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 const yy(y); + detail::WasmNumber const yy(y); if (!yy) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 const res = xx + yy; + detail::WasmNumber const res = xx + yy; return res.toBytes(); } @@ -323,7 +400,6 @@ floatAddImpl(Slice const& x, Slice const& y, int32_t mode) { return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); } - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_STOP } @@ -335,13 +411,13 @@ floatSubtractImpl(Slice const& x, Slice const& y, int32_t mode) detail::FloatState const rm(mode); if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 const xx(x); + detail::WasmNumber const xx(x); if (!xx) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 const yy(y); + detail::WasmNumber const yy(y); if (!yy) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 const res = xx - yy; + detail::WasmNumber const res = xx - yy; return res.toBytes(); } @@ -350,7 +426,6 @@ floatSubtractImpl(Slice const& x, Slice const& y, int32_t mode) { return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); } - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_STOP } @@ -362,13 +437,13 @@ floatMultiplyImpl(Slice const& x, Slice const& y, int32_t mode) detail::FloatState const rm(mode); if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 const xx(x); + detail::WasmNumber const xx(x); if (!xx) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 const yy(y); + detail::WasmNumber const yy(y); if (!yy) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 const res = xx * yy; + detail::WasmNumber const res = xx * yy; return res.toBytes(); } @@ -377,7 +452,6 @@ floatMultiplyImpl(Slice const& x, Slice const& y, int32_t mode) { return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); } - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_STOP } @@ -389,13 +463,13 @@ floatDivideImpl(Slice const& x, Slice const& y, int32_t mode) detail::FloatState const rm(mode); if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 const xx(x); + detail::WasmNumber const xx(x); if (!xx) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 const yy(y); + detail::WasmNumber const yy(y); if (!yy) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 const res = xx / yy; + detail::WasmNumber const res = xx / yy; return res.toBytes(); } @@ -403,7 +477,6 @@ floatDivideImpl(Slice const& x, Slice const& y, int32_t mode) { return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); } - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); } Expected @@ -418,11 +491,11 @@ floatRootImpl(Slice const& x, int32_t n, int32_t mode) if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 const xx(x); + detail::WasmNumber const xx(x); if (!xx) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 const res(root(xx, n)); + detail::WasmNumber const res(root(xx, n)); return res.toBytes(); } @@ -431,7 +504,6 @@ floatRootImpl(Slice const& x, int32_t n, int32_t mode) { return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); } - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_STOP } @@ -440,20 +512,20 @@ floatPowerImpl(Slice const& x, int32_t n, int32_t mode) { try { - if ((n < 0) || (n > wasmMaxExponent)) + if ((n < 0) || (n > Number::maxExponent)) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); detail::FloatState const rm(mode); if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 const xx(x); + detail::WasmNumber const xx(x); if (!xx) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); if (xx == Number() && (n == 0)) return Unexpected(HostFunctionError::INVALID_PARAMS); - detail::Number2 const res(power(xx, n, 1)); + detail::WasmNumber const res(power(xx, n, 1)); return res.toBytes(); } @@ -462,7 +534,6 @@ floatPowerImpl(Slice const& x, int32_t n, int32_t mode) { return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); } - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_STOP } @@ -475,11 +546,11 @@ floatLogImpl(Slice const& x, int32_t mode) if (!rm) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 const xx(x); + detail::WasmNumber const xx(x); if (!xx) return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - detail::Number2 const res(log10(xx)); + detail::WasmNumber const res(log10(xx)); return res.toBytes(); } @@ -488,7 +559,6 @@ floatLogImpl(Slice const& x, int32_t mode) { return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); } - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); // LCOV_EXCL_STOP } @@ -510,6 +580,42 @@ WasmHostFunctionsImpl::floatFromUint(uint64_t x, int32_t mode) const return wasm_float::floatFromUintImpl(x, mode); } +Expected +WasmHostFunctionsImpl::floatFromSTAmount(STAmount const& x, int32_t mode) const +{ + return wasm_float::floatFromSTAmountImpl(x, mode); +} + +Expected +WasmHostFunctionsImpl::floatFromSTNumber(STNumber const& x, int32_t mode) const +{ + return wasm_float::floatFromSTNumberImpl(x, mode); +} + +Expected +WasmHostFunctionsImpl::floatToInt(Slice const& x, int32_t mode) const +{ + return wasm_float::floatToIntImpl(x, mode); +} + +Expected +WasmHostFunctionsImpl::floatToMantissaAndExponent(Slice const& x) const +{ + return wasm_float::floatToMantissaAndExponentImpl(x); +} + +Expected +WasmHostFunctionsImpl::floatNegate(Slice const& x) const +{ + return wasm_float::floatNegateImpl(x); +} + +Expected +WasmHostFunctionsImpl::floatAbs(Slice const& x) const +{ + return wasm_float::floatAbsImpl(x); +} + Expected WasmHostFunctionsImpl::floatSet(int64_t mantissa, int32_t exponent, int32_t mode) const { diff --git a/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp index 46744c17a7..a83217b507 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp @@ -90,6 +90,7 @@ getAnyFieldData(STBase const* obj) } case STI_AMOUNT: + case STI_NUMBER: default: break; // Use serializer } diff --git a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp index e420565727..bbad5e1e1a 100644 --- a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp +++ b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp @@ -47,7 +47,7 @@ setData( } template -Expected +static Expected getDataInt32(IW const* _runtime, wasm_val_vec_t const* params, int32_t& i) { auto const result = params->data[i].of.i32; @@ -56,7 +56,7 @@ getDataInt32(IW const* _runtime, wasm_val_vec_t const* params, int32_t& i) } template -Expected +static Expected getDataInt64(IW const* _runtime, wasm_val_vec_t const* params, int32_t& i) { auto const result = params->data[i].of.i64; @@ -65,7 +65,7 @@ getDataInt64(IW const* _runtime, wasm_val_vec_t const* params, int32_t& i) } template -Expected +static Expected getDataUnsigned(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) { static_assert(std::is_unsigned_v); @@ -91,21 +91,21 @@ getDataUnsigned(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) } template -Expected +static Expected getDataUInt32(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) { return getDataUnsigned(runtime, params, i); } template -Expected +static Expected getDataUInt64(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) { return getDataUnsigned(runtime, params, i); } template -Expected +static Expected getDataSField(IW const* _runtime, wasm_val_vec_t const* params, int32_t& i) { auto const& m = SField::getKnownCodeToField(); @@ -119,7 +119,7 @@ getDataSField(IW const* _runtime, wasm_val_vec_t const* params, int32_t& i) } template -Expected +static Expected getDataSlice(IW const* runtime, wasm_val_vec_t const* params, int32_t& i, bool isUpdate = false) { int64_t const ptr = params->data[i].of.i32; @@ -148,7 +148,7 @@ getDataSlice(IW const* runtime, wasm_val_vec_t const* params, int32_t& i, bool i } template -Expected +static Expected getDataUInt256(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) { auto const slice = getDataSlice(runtime, params, i); @@ -165,7 +165,7 @@ getDataUInt256(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) } template -Expected +static Expected getDataAccountID(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) { auto const slice = getDataSlice(runtime, params, i); @@ -240,7 +240,7 @@ getDataAsset(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) } template -Expected +static Expected getDataString(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) { auto const slice = getDataSlice(runtime, params, i); @@ -249,7 +249,7 @@ getDataString(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) return std::string_view(reinterpret_cast(slice->data()), slice->size()); } -std::nullptr_t +static std::nullptr_t hfResult(wasm_val_vec_t* results, int32_t value) { results->data[0] = WASM_I32_VAL(value); @@ -257,7 +257,7 @@ hfResult(wasm_val_vec_t* results, int32_t value) return nullptr; } -std::nullptr_t +static std::nullptr_t hfResult(wasm_val_vec_t* results, HostFunctionError value) { results->data[0] = WASM_I32_VAL(HfErrorToInt(value)); @@ -266,7 +266,7 @@ hfResult(wasm_val_vec_t* results, HostFunctionError value) } template -std::nullptr_t +static std::nullptr_t returnResult( InstanceWrapper const* runtime, wasm_val_vec_t const* params, @@ -282,6 +282,9 @@ returnResult( using t = std::decay_t; if constexpr (std::is_same_v) { + if (index < 0 || index + 1 >= params->size) + return hfResult(results, HostFunctionError::INTERNAL); // LCOV_EXCL_LINE + return hfResult( results, setData( @@ -293,6 +296,9 @@ returnResult( } else if constexpr (std::is_same_v) { + if (index < 0 || index + 1 >= params->size) + return hfResult(results, HostFunctionError::INTERNAL); // LCOV_EXCL_LINE + return hfResult( results, setData( @@ -308,6 +314,9 @@ returnResult( } else if constexpr (std::is_same_v) { + if (index < 0 || index + 1 >= params->size) + return hfResult(results, HostFunctionError::INTERNAL); // LCOV_EXCL_LINE + auto const resultValue = adjustWasmEndianess(res.value()); return hfResult( results, @@ -318,6 +327,49 @@ returnResult( reinterpret_cast(&resultValue), static_cast(sizeof(resultValue)))); } + else if constexpr (std::is_same_v) + { + if (index < 0 || index + 1 >= params->size) + return hfResult(results, HostFunctionError::INTERNAL); // LCOV_EXCL_LINE + + auto const resultValue = adjustWasmEndianess(res.value()); + return hfResult( + results, + setData( + runtime, + params->data[index].of.i32, + params->data[index + 1].of.i32, + reinterpret_cast(&resultValue), + static_cast(sizeof(resultValue)))); + } + else if constexpr (std::is_same_v) + { + if (index < 0 || index + 3 >= params->size) + return hfResult(results, HostFunctionError::INTERNAL); // LCOV_EXCL_LINE + + auto const mantissa = adjustWasmEndianess(res->first); + auto const r1 = setData( + runtime, + params->data[index].of.i32, + params->data[index + 1].of.i32, + reinterpret_cast(&mantissa), + static_cast(sizeof(mantissa))); + if (r1 < 0) + return hfResult(results, r1); + + index += 2; + auto const exponent = adjustWasmEndianess(res->second); + auto const r2 = setData( + runtime, + params->data[index].of.i32, + params->data[index + 1].of.i32, + reinterpret_cast(&exponent), + static_cast(sizeof(exponent))); + if (r2 < 0) + return hfResult(results, r2); + + return hfResult(results, r1 + r2); // 12 + } else { static_assert([] { return false; }(), "Unhandled return type in returnResult"); @@ -1568,6 +1620,149 @@ floatFromUint_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu return returnResult(runtime, params, results, hf->floatFromUint(*x, *rounding), i); } +wasm_trap_t* +floatFromSTAmount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +{ + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + + int i = 0; + auto const x = getDataSlice(runtime, params, i); + if (!x) + return hfResult(results, x.error()); + + auto serialIter = SerialIter(*x); + std::optional amount; + try + { + amount = STAmount(serialIter, sfGeneric); + } + catch (std::exception const&) + { + amount = std::nullopt; + } + if (!amount) + return hfResult(results, HostFunctionError::INVALID_PARAMS); + + i = 4; + auto const rounding = getDataInt32(runtime, params, i); + if (!rounding) + return hfResult(results, rounding.error()); // LCOV_EXCL_LINE + + i = 2; + return returnResult(runtime, params, results, hf->floatFromSTAmount(*amount, *rounding), i); +} + +wasm_trap_t* +floatFromSTNumber_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +{ + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + + int i = 0; + auto const x = getDataSlice(runtime, params, i); + if (!x) + return hfResult(results, x.error()); + + auto serialIter = SerialIter(*x); + std::optional num; + try + { + num = STNumber(serialIter, sfGeneric); + } + catch (std::exception const&) + { + num = std::nullopt; + } + if (!num) + return hfResult(results, HostFunctionError::INVALID_PARAMS); + + i = 4; + auto const rounding = getDataInt32(runtime, params, i); + if (!rounding) + return hfResult(results, rounding.error()); // LCOV_EXCL_LINE + + i = 2; + return returnResult(runtime, params, results, hf->floatFromSTNumber(*num, *rounding), i); +} + +wasm_trap_t* +floatToInt_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +{ + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + + int i = 0; + auto const x = getDataSlice(runtime, params, i); + if (!x) + return hfResult(results, x.error()); + + i = 4; + auto const rounding = getDataInt32(runtime, params, i); + if (!rounding) + return hfResult(results, rounding.error()); // LCOV_EXCL_LINE + + i = 2; + return returnResult(runtime, params, results, hf->floatToInt(*x, *rounding), i); +} + +wasm_trap_t* +floatToMantissaAndExponent_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +{ + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + + int i = 0; + auto const x = getDataSlice(runtime, params, i); + if (!x) + return hfResult(results, x.error()); + + i = 2; + return returnResult(runtime, params, results, hf->floatToMantissaAndExponent(*x), i); +} + +wasm_trap_t* +floatNegate_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +{ + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + + int i = 0; + auto const x = getDataSlice(runtime, params, i); + if (!x) + return hfResult(results, x.error()); + + i = 2; + return returnResult(runtime, params, results, hf->floatNegate(*x), i); +} + +wasm_trap_t* +floatAbs_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +{ + if (auto g = checkGas(env); !g) + return g.error(); // LCOV_EXCL_LINE + auto* hf = getHF(env); + auto const* runtime = reinterpret_cast(hf->getRT()); + + int i = 0; + auto const x = getDataSlice(runtime, params, i); + if (!x) + return hfResult(results, x.error()); + + i = 2; + return returnResult(runtime, params, results, hf->floatAbs(*x), i); +} + wasm_trap_t* floatSet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { diff --git a/src/libxrpl/tx/wasm/WasmVM.cpp b/src/libxrpl/tx/wasm/WasmVM.cpp index 7c755da2b3..fdd9a437d7 100644 --- a/src/libxrpl/tx/wasm/WasmVM.cpp +++ b/src/libxrpl/tx/wasm/WasmVM.cpp @@ -76,6 +76,12 @@ setCommonHostFunctions(HostFunctions* hfs, ImportVec& i) WASM_IMPORT_FUNC2(i, floatFromInt, "float_from_int", hfs, 100); WASM_IMPORT_FUNC2(i, floatFromUint, "float_from_uint", hfs, 130); + WASM_IMPORT_FUNC2(i, floatFromSTAmount, "float_from_stamount", hfs, 150); + WASM_IMPORT_FUNC2(i, floatFromSTNumber, "float_from_stnumber", hfs, 150); + WASM_IMPORT_FUNC2(i, floatToInt, "float_to_int", hfs, 130); + WASM_IMPORT_FUNC2(i, floatToMantissaAndExponent, "float_to_mantissa_and_exponent", hfs, 130); + WASM_IMPORT_FUNC2(i, floatNegate, "float_negate", hfs, 150); + WASM_IMPORT_FUNC2(i, floatAbs, "float_abs", hfs, 150); WASM_IMPORT_FUNC2(i, floatSet, "float_set", hfs, 100); WASM_IMPORT_FUNC2(i, floatCompare, "float_compare", hfs, 80); WASM_IMPORT_FUNC2(i, floatAdd, "float_add", hfs, 160); diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index e46634ca44..e61c38f771 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -2065,29 +2065,90 @@ struct HostFuncImpl_test : public beast::unit_test::suite // clang-format off - int const normalExp = 15; + int const normalExp = 18; - Bytes const floatIntMin = {0x99, 0x20, 0xc4, 0x9b, 0xa5, 0xe3, 0x53, 0xf8}; // -2^63 - Bytes const floatIntZero = {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // 0 - Bytes const floatIntMax = {0xd9, 0x20, 0xc4, 0x9b, 0xa5, 0xe3, 0x53, 0xf8}; // 2^63-1 - Bytes const floatUIntMax = {0xd9, 0x46, 0x8d, 0xb8, 0xba, 0xc7, 0x10, 0xcb}; // 2^64-1 - Bytes const floatMaxExp = {0xEC, 0x43, 0x8D, 0x7E, 0xA4, 0xC6, 0x80, 0x00}; // 1e(80+15) - Bytes const floatPreMaxExp = {0xEC, 0x03, 0x8D, 0x7E, 0xA4, 0xC6, 0x80, 0x00}; // 1e(79+15) - Bytes const floatMinusMaxExp = {0xAC, 0x43, 0x8D, 0x7E, 0xA4, 0xC6, 0x80, 0x00}; // -1e(80+15) - Bytes const floatMaxIOU = {0xEC, 0x63, 0x86, 0xF2, 0x6F, 0xC0, 0xFF, 0xFF}; // 1e(81+15)-1 - Bytes const floatMinExp = {0xC0, 0x43, 0x8D, 0x7E, 0xA4, 0xC6, 0x80, 0x00}; // 1e-96 - Bytes const float1 = {0xD4, 0x83, 0x8D, 0x7E, 0xA4, 0xC6, 0x80, 0x00}; // 1 - Bytes const floatMinus1 = {0x94, 0x83, 0x8D, 0x7E, 0xA4, 0xC6, 0x80, 0x00}; // -1 - Bytes const float1More = {0xD4, 0x83, 0x8D, 0x7E, 0xA4, 0xC6, 0x80, 0x01}; // 1.000 000 000 000 001 - Bytes const float2 = {0xD4, 0x87, 0x1A, 0xFD, 0x49, 0x8D, 0x00, 0x00}; // 2 - Bytes const float10 = {0xD4, 0xC3, 0x8D, 0x7E, 0xA4, 0xC6, 0x80, 0x00}; // 10 - Bytes const floatInvalidZero = {0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // INVALID - Bytes const floatPi = {0xD4, 0x8B, 0x29, 0x43, 0x0A, 0x25, 0x6D, 0x21}; // 3.141592653589793 + Bytes const floatIntMin = {0xF3, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00, 0x01}; // -2^63 + Bytes const floatIntZero = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00}; // 0 + Bytes const floatIntMax = {0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00}; // 2^63-1 + Bytes const floatUIntMax = {0x19, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9A, 0x00, 0x00, 0x00, 0x01}; // 2^64-1 + + Bytes const floatMaxExp = {0x0D, 0xE0, 0xB6, 0xB3, 0xA7, 0x64, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00}; // 1e(Number::maxExponent + normalExp) + Bytes const floatPreMaxExp = {0x0D, 0xE0, 0xB6, 0xB3, 0xA7, 0x64, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF}; // 1e(Number::maxExponent + normalExp - 1) + Bytes const floatMinusMaxExp = {0xF2, 0x1F, 0x49, 0x4C, 0x58, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00}; // -1e(Number::maxExponent + normalExp) + Bytes const floatMinExp = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00}; // 1e(Number::minExponent - normalExp) + Bytes const floatMax = {0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x80, 0x00}; // Number::maxRep e(Number::maxExponent - normalExp) + + Bytes const floatMaxIOU = {0x0D, 0xE0, 0xB6, 0xB3, 0xA7, 0x63, 0xFF, 0x9C, 0x00, 0x00, 0x00, 0x4E}; // 9999999999999999e(96) + Bytes const floatMinIOU = {0x0D, 0xE0, 0xB6, 0xB3, 0xA7, 0x64, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x9D}; // 1e(-96 - 3 + normalExp = -81) + + Bytes const float1 = {0x0D, 0xE0, 0xB6, 0xB3, 0xA7, 0x64, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xEE}; // 1 + Bytes const floatMinus1 = {0xF2, 0x1F, 0x49, 0x4C, 0x58, 0x9C, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xEE}; // -1 + Bytes const float1More = {0x0D, 0xE0, 0xB6, 0xB3, 0xA7, 0x64, 0x03, 0xE8, 0xFF, 0xFF, 0xFF, 0xEE}; // 1.000 000 000 000 001 + Bytes const float2 = {0x1B, 0xC1, 0x6D, 0x67, 0x4E, 0xC8, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xEE}; // 2 + Bytes const float10 = {0x0D, 0xE0, 0xB6, 0xB3, 0xA7, 0x64, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xEF}; // 10 + Bytes const floatPi = {0x2B, 0x99, 0x2D, 0xDF, 0xA2, 0x32, 0x48, 0xE8, 0xFF, 0xFF, 0xFF, 0xEE}; // 3.141592653589793 + Bytes const floatInvalidZero = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00}; // INVALID + Bytes const floatMinus3 = {0xD6, 0x5D, 0xDB, 0xE5, 0x09, 0xD4, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xEE}; // -3 std::string const invalid = "invalid_data"; // clang-format on + template + void + printFloats(std::string_view descr, T m, int e) + { + Serializer msg; + Number n; + + if constexpr (std::is_signed_v) + { + n = Number(static_cast(m), e); + } + else + { + n = Number(static_cast(m), e, Number::normalized()); + } + + STNumber(sfNumber, n).add(msg); + auto const& data = msg.modData(); + std::cout << std::setw(24) << descr << " m: " << std::setw(20) << n.mantissa() + << ", e: " << std::setw(8) << n.exponent() << ", hex: "; + std::cout << std::hex << std::uppercase << std::setfill('0'); + for (auto const& c : data) + std::cout << std::setw(2) << (unsigned)c << " "; + std::cout << std::dec << std::setfill(' ') << std::endl; + } + + void + printNumbersBin() + { + printFloats("int64.min", std::numeric_limits::min(), 0); + printFloats("zero", 0, 0); + printFloats("int64.max", std::numeric_limits::max(), 0); + printFloats("uint64.max", std::numeric_limits::max(), 0); + + printFloats("Number 1 max exp", 1, Number::maxExponent + normalExp); + printFloats("Number (max exp - 1)", 1, Number::maxExponent + normalExp - 1); + printFloats("Number -1 max exp", -1, Number::maxExponent + normalExp); + + printFloats("Number.max", Number::maxRep, Number::maxExponent); + printFloats("Number min positive", 1, Number::minExponent + normalExp); + printFloats( + "Number.min", std::numeric_limits::min(), Number::maxExponent - normalExp); + printFloats("STAmount.max", STAmount::cMaxValue, STAmount::cMaxOffset); + printFloats("STAmount min positive", STAmount::cMinValue, STAmount::cMinOffset); + + printFloats("one", 1, 0); + printFloats("-one", -1, 0); + printFloats("1,00...01", 1'000'000'000'000'001, -15); + printFloats("two", 2, 0); + printFloats("ten", 10, 0); + printFloats("pi", 3141592653589793, -15); + printFloats("-three", -3, 0); + return; + } + void testTraceFloat() { @@ -2236,38 +2297,38 @@ struct HostFuncImpl_test : public beast::unit_test::suite } { - auto const result = hfs.floatSet(1, wasmMaxExponent + normalExp + 1, 0); + auto const result = hfs.floatSet(1, Number::maxExponent + normalExp + 1, 0); BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } { - auto const result = hfs.floatSet(1, wasmMinExponent + normalExp - 1, 0); + auto const result = hfs.floatSet(1, Number::minExponent + normalExp - 1, 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); } { - auto const result = hfs.floatSet(1, wasmMaxExponent + normalExp, 0); + auto const result = hfs.floatSet(1, Number::maxExponent + normalExp, 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMaxExp); } { - auto const result = hfs.floatSet(-1, wasmMaxExponent + normalExp, 0); + auto const result = hfs.floatSet(-1, Number::maxExponent + normalExp, 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMinusMaxExp); } { - auto const result = hfs.floatSet(1, wasmMaxExponent + normalExp - 1, 0); + auto const result = hfs.floatSet(1, Number::maxExponent + normalExp - 1, 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatPreMaxExp); } { - auto const result = hfs.floatSet(STAmount::cMaxValue, wasmMaxExponent, 0); + auto const result = hfs.floatSet(STAmount::cMaxValue, STAmount::cMaxOffset, 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMaxIOU); } { - auto const result = hfs.floatSet(1, wasmMinExponent + normalExp, 0); + auto const result = hfs.floatSet(1, Number::minExponent - normalExp, 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMinExp); } @@ -2275,12 +2336,6 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const result = hfs.floatSet(10, -1, 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == float1); } - - { - auto const result = hfs.floatSet(1, Number::maxExponent + normalExp + 1, 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); - } } void @@ -2312,15 +2367,6 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!result && result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } - { - auto x = floatMaxExp; - // exp = 81 + 97 = 178 - x[1] |= 0x80; - x[1] &= 0xBF; - auto const result = hfs.floatCompare(makeSlice(x), makeSlice(floatMaxExp)); - BEAST_EXPECT(!result && result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); - } - { auto const result = hfs.floatCompare(makeSlice(floatIntMin), makeSlice(floatIntZero)); BEAST_EXPECT(result) && BEAST_EXPECT(*result == 2); @@ -2368,9 +2414,9 @@ struct HostFuncImpl_test : public beast::unit_test::suite } { + // max IOU is too small to make any change auto const result = hfs.floatAdd(makeSlice(floatMaxIOU), makeSlice(floatMaxExp), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMaxExp); } { @@ -2379,8 +2425,9 @@ struct HostFuncImpl_test : public beast::unit_test::suite } { + // Number can't hold int64.min, it is rounded and we get -3, not -1 auto const result = hfs.floatAdd(makeSlice(floatIntMax), makeSlice(floatIntMin), 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMinus3); } } @@ -2416,9 +2463,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const result = - hfs.floatSubtract(makeSlice(floatMaxIOU), makeSlice(floatMinusMaxExp), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); + hfs.floatSubtract(makeSlice(floatMinusMaxExp), makeSlice(floatMaxIOU), 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMinusMaxExp); } { @@ -2464,7 +2510,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite } { - auto const result = hfs.floatMultiply(makeSlice(floatMaxIOU), makeSlice(float1More), 0); + auto const result = hfs.floatMultiply(makeSlice(floatMax), makeSlice(float1More), 0); BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); } @@ -2526,7 +2572,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const y = hfs.floatSet(STAmount::cMaxValue, -normalExp - 1, 0); // 0.9999999... if (BEAST_EXPECT(y)) { - auto const result = hfs.floatDivide(makeSlice(floatMaxIOU), makeSlice(*y), 0); + auto const result = hfs.floatDivide(makeSlice(floatMax), makeSlice(*y), 0); BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); } @@ -2643,23 +2689,17 @@ struct HostFuncImpl_test : public beast::unit_test::suite } { - auto const result = hfs.floatPower(makeSlice(floatMaxIOU), 2, 0); + auto const result = hfs.floatPower(makeSlice(floatMax), 2, 0); BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); } { - auto const result = hfs.floatPower(makeSlice(floatMaxIOU), 81, 0); + auto const result = hfs.floatPower(makeSlice(floatMax), Number::maxExponent + 1, 0); BEAST_EXPECT(!result) && BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } - { - auto const result = hfs.floatPower(makeSlice(floatMaxIOU), 2, 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); - } - { auto const result = hfs.floatPower(makeSlice(floatMaxIOU), 0, 0); BEAST_EXPECT(result) && BEAST_EXPECT(*result == float1); @@ -2714,48 +2754,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); } - // perf test logs - // { - // auto const result = hfs.floatLog(makeSlice(floatPi), 0); - // if (BEAST_EXPECT(result)) - // { - // std::cout << "lg(" << floatToString(makeSlice(floatPi)) - // << ") = " << floatToString(makeSlice(*result)) - // << std::endl; - // } - // } - // { - // auto const result = hfs.floatLog(makeSlice(floatIntMax), 0); - // if (BEAST_EXPECT(result)) - // { - // std::cout << "lg(" << floatToString(makeSlice(floatIntMax)) - // << ") = " << floatToString(makeSlice(*result)) - // << std::endl; - // } - // } - - // { - // auto const result = hfs.floatLog(makeSlice(floatMaxExp), 0); - // if (BEAST_EXPECT(result)) - // { - // std::cout << "lg(" << floatToString(makeSlice(floatMaxExp)) - // << ") = " << floatToString(makeSlice(*result)) - // << std::endl; - // } - // } - - // { - // auto const result = hfs.floatLog(makeSlice(floatMaxIOU), 0); - // if (BEAST_EXPECT(result)) - // { - // std::cout << "lg(" << floatToString(makeSlice(floatMaxIOU)) - // << ") = " << floatToString(makeSlice(*result)) - // << std::endl; - // } - // } - { - auto const x = hfs.floatSet(9'500'000'000'000'001, -14, 0); // almost 80+15 + auto const x = hfs.floatSet(32'786, 0, 0); if (BEAST_EXPECT(x)) { auto const result = hfs.floatLog(makeSlice(floatMaxExp), 0); @@ -2774,7 +2774,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const x = hfs.floatSet(1000, 0, 0); // 1000 - auto const y = hfs.floatSet(3, 0, 0); // 0.1 + auto const y = hfs.floatSet(3, 0, 0); // 3 if (BEAST_EXPECT(x && y)) { auto const result = hfs.floatLog(makeSlice(*x), 0); @@ -2783,8 +2783,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite } { - auto const x = hfs.floatSet(1, -2, 0); // 0.01 - auto const y = hfs.floatSet(-2'000'000'000'000'000ll, -15, 0); // -2 + auto const x = hfs.floatSet(1, -2, 0); // 0.01 + auto const y = hfs.floatSet(-1'999'999'999'999'999'999, -normalExp, 0); // -2 if (BEAST_EXPECT(x && y)) { auto const result = hfs.floatLog(makeSlice(*x), 0); @@ -2796,7 +2796,6 @@ struct HostFuncImpl_test : public beast::unit_test::suite void testFloatSpecialCases() { - testcase("float Xrp+Mpt"); using namespace test::jtx; Env env{*this}; @@ -2805,60 +2804,472 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); WasmHostFunctionsImpl const hfs(ac, dummyEscrow); - auto const y = hfs.floatSet(20, 0, 0); - if (!BEAST_EXPECT(y)) - return; - - Bytes x(8); - - // XRP - memset(x.data(), 0, x.size()); - x[0] = 0x40; - x[7] = 10; - - { - auto const result = hfs.floatCompare(makeSlice(x), makeSlice(float10)); - BEAST_EXPECT(!result && result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); - } - - { - auto const result = hfs.floatAdd(makeSlice(float10), makeSlice(x), 0); - BEAST_EXPECT(!result && result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); - } - - // MPT - memset(x.data(), 0, x.size()); - x[0] = 0x60; - x[7] = 10; - - { - auto const result = hfs.floatCompare(makeSlice(x), makeSlice(float10)); - BEAST_EXPECT(!result && result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); - } - - { - auto const result = hfs.floatAdd(makeSlice(float10), makeSlice(x), 0); - BEAST_EXPECT(!result && result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); - } - testcase("float non-canonical"); - { // non-canonical mantissa 10 000 000 000 000 000 - Bytes x = float1; - *reinterpret_cast(x.data()) = 0x0000C16FF286A3D4ull; + { // non-canonical mantissa 100000e-4 + Bytes const y = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x86, 0xA0, 0xFF, 0xFF, 0xFF, 0xFC}; + auto const result = hfs.floatCompare(makeSlice(y), makeSlice(float10)); + BEAST_EXPECT(result && *result == 0); + } + } + + void + testFloatFromSTAmount() + { + testcase("floatFromSTAmount"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + + { + STAmount const amount = XRP(100); + auto const result = hfs.floatFromSTAmount(amount, -1); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + STAmount const amount = XRP(100); + auto const result = hfs.floatFromSTAmount(amount, 4); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + STAmount const amount = XRP(0); + auto const result = hfs.floatFromSTAmount(amount, 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); + } + + { + STAmount const amount = XRP(-1); + auto const y = hfs.floatSet(-1 * 1'000'000, 0, 0); + if (BEAST_EXPECT(y)) { - auto const result = hfs.floatCompare(makeSlice(x), makeSlice(float1)); - BEAST_EXPECT(!result && result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + auto const result = hfs.floatFromSTAmount(amount, 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == *y); } } + + { + auto const y = hfs.floatSet(9223372036854776, 3, 0); + STAmount const amount(noIssue(), std::numeric_limits::max()); + auto const result = hfs.floatFromSTAmount(amount, 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == *y); + } + + { + bool ex = false; + try + { + STAmount const amount(noIssue(), -1, Number::maxExponent + normalExp); + [[maybe_unused]] auto const r = hfs.floatFromSTAmount(amount, 0); + } + catch (...) + { + ex = true; + } + + BEAST_EXPECT(ex); + } + + auto const USD = env.master["USD"]; + { + STAmount const amount( + IOUAmount(STAmount::cMinValue, STAmount::cMinOffset), USD.issue()); + auto const result = hfs.floatFromSTAmount(amount, 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMinIOU); + } + + { + STAmount const amount( + IOUAmount(STAmount::cMaxValue, STAmount::cMaxOffset), USD.issue()); + auto const result = hfs.floatFromSTAmount(amount, 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMaxIOU); + } + } + + void + testFloatFromSTNumber() + { + testcase("floatFromSTNumber"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + + // Test with invalid rounding mode + { + STNumber const num(sfNumber, Number(123, 0)); + auto const result = hfs.floatFromSTNumber(num, -1); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + STNumber const num(sfNumber, Number(123, 0)); + auto const result = hfs.floatFromSTNumber(num, 4); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + STNumber const num( + sfNumber, Number(std::numeric_limits::max(), 0, Number::normalized())); + auto const result = hfs.floatFromSTNumber(num, 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatUIntMax); + } + + { + STNumber const num(sfNumber, Number(-1, Number::maxExponent + normalExp)); + auto const result = hfs.floatFromSTNumber(num, 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMinusMaxExp); + } + } + + void + testFloatToInt() + { + testcase("floatToInt"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + + { + auto const result = hfs.floatToInt(makeSlice(float1), -1); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = hfs.floatToInt(makeSlice(float1), 4); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = hfs.floatToInt(Slice(), 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = hfs.floatToInt(makeSlice(invalid), 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = hfs.floatToInt(makeSlice(floatIntZero), 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == 0); + + // roundtrip + auto const result2 = hfs.floatFromInt(*result, 0); + BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == floatIntZero); + } + + { + auto const result = hfs.floatToInt(makeSlice(float1), 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == 1); + + // roundtrip + auto const result2 = hfs.floatFromInt(*result, 0); + BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == float1); + } + + { + auto const result = hfs.floatToInt(makeSlice(floatMinus1), 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == -1); + + // roundtrip + auto const result2 = hfs.floatFromInt(*result, 0); + BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == floatMinus1); + } + + { + auto const result = hfs.floatToInt(makeSlice(floatIntMax), 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == std::numeric_limits::max()); + + // roundtrip + auto const result2 = hfs.floatFromInt(*result, 0); + BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == floatIntMax); + } + + { + // Number can't hold int64.min, it is rounded and we get int64_t.min - 3, which doesn't + // fit into int64 + auto const result = hfs.floatToInt(makeSlice(floatIntMin), 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); + } + + { + auto const result = hfs.floatToInt(makeSlice(floatUIntMax), 0); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); + } + + // Test rounding modes with pi (3.141592653589793) + { + // to_nearest (mode 0): should round to 3 + auto const result = hfs.floatToInt(makeSlice(floatPi), 0); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == 3); + } + + { + // towards_zero (mode 1): should truncate to 3 + auto const result = hfs.floatToInt(makeSlice(floatPi), 1); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == 3); + } + + { + // downward (mode 2): should round down to 3 + auto const result = hfs.floatToInt(makeSlice(floatPi), 2); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == 3); + } + + { + // upward (mode 3): should round up to 4 + auto const result = hfs.floatToInt(makeSlice(floatPi), 3); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == 4); + } + } + + void + testFloatToMantissaAndExponent() + { + testcase("floatToMantissaAndExponent"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + + { + auto const result = hfs.floatToMantissaAndExponent(makeSlice(invalid)); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = hfs.floatToMantissaAndExponent(makeSlice(floatIntZero)); + BEAST_EXPECT(result) && BEAST_EXPECT(result->first == 0) && + BEAST_EXPECT(result->second == std::numeric_limits::min()); + + // roundtrip + auto const result2 = hfs.floatSet(result->first, result->second, 0); + BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == floatIntZero); + } + + { + auto const result = hfs.floatToMantissaAndExponent(makeSlice(float1)); + BEAST_EXPECT(result) && BEAST_EXPECT(result->first == 1000000000000000000) && + BEAST_EXPECT(result->second == -normalExp); + + // roundtrip + auto const result2 = hfs.floatSet(result->first, result->second, 0); + BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == float1); + } + + { + auto const result = hfs.floatToMantissaAndExponent(makeSlice(floatMinus1)); + BEAST_EXPECT(result) && BEAST_EXPECT(result->first == -1000000000000000000) && + BEAST_EXPECT(result->second == -normalExp); + + // roundtrip + auto const result2 = hfs.floatSet(result->first, result->second, 0); + BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == floatMinus1); + } + + { + auto const result = hfs.floatToMantissaAndExponent(makeSlice(float10)); + BEAST_EXPECT(result) && BEAST_EXPECT(result->first == 1000000000000000000) && + BEAST_EXPECT(result->second == -normalExp + 1); + + // roundtrip + auto const result2 = hfs.floatSet(result->first, result->second, 0); + BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == float10); + } + + { + auto const result = hfs.floatToMantissaAndExponent(makeSlice(floatPi)); + BEAST_EXPECT(result) && BEAST_EXPECT(result->first == 3141592653589793000) && + BEAST_EXPECT(result->second == -normalExp); + + // roundtrip + auto const result2 = hfs.floatSet(result->first, result->second, 0); + BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == floatPi); + } + + { + auto const result = hfs.floatToMantissaAndExponent(makeSlice(floatIntMax)); + BEAST_EXPECT(result) && + BEAST_EXPECT(result->first == std::numeric_limits::max()) && + BEAST_EXPECT(result->second == 0); + + // roundtrip + auto const result2 = hfs.floatSet(result->first, result->second, 0); + BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == floatIntMax); + } + + { + auto const result = hfs.floatToMantissaAndExponent(makeSlice(floatIntMin)); + BEAST_EXPECT(result) && + BEAST_EXPECT(result->first == (std::numeric_limits::min() / 10) - 1) && + BEAST_EXPECT(result->second == 1); + + // roundtrip + auto const result2 = hfs.floatSet(result->first, result->second, 0); + BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == floatIntMin); + } + + { + auto const result = hfs.floatToMantissaAndExponent(makeSlice(floatMax)); + BEAST_EXPECT(result) && BEAST_EXPECT(result->first == Number::maxRep) && + BEAST_EXPECT(result->second == Number::maxExponent); + + // roundtrip + auto const result2 = hfs.floatSet(result->first, result->second, 0); + BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == floatMax); + } + } + + void + testFloatNegate() + { + testcase("floatNegate"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + + { + auto const result = hfs.floatNegate(makeSlice(invalid)); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = hfs.floatNegate(makeSlice(floatIntZero)); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); + } + + { + auto const result = hfs.floatNegate(makeSlice(float1)); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMinus1); + } + + { + auto const result = hfs.floatNegate(makeSlice(floatMinus1)); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == float1); + } + + { + auto const result = hfs.floatNegate(makeSlice(floatIntMax)); + auto const expected = hfs.floatFromInt(std::numeric_limits::min() + 1, 0); + BEAST_EXPECT(result && expected) && BEAST_EXPECT(*result == *expected); + } + + { + auto const result = hfs.floatNegate(makeSlice(floatMaxExp)); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMinusMaxExp); + } + + { + auto const result = hfs.floatNegate(makeSlice(floatPi)); + auto const negPi = hfs.floatNegate(makeSlice(*result)); + BEAST_EXPECT(result && negPi) && BEAST_EXPECT(*negPi == floatPi); + } + } + + void + testFloatAbs() + { + testcase("floatAbs"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); + WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + + { + auto const result = hfs.floatAbs(makeSlice(invalid)); + BEAST_EXPECT(!result) && + BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + } + + { + auto const result = hfs.floatAbs(makeSlice(floatIntZero)); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); + } + + { + auto const result = hfs.floatAbs(makeSlice(float1)); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == float1); + } + + { + auto const result = hfs.floatAbs(makeSlice(floatMinus1)); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == float1); + } + + { + auto const result = hfs.floatAbs(makeSlice(floatIntMax)); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntMax); + } + + { + auto const result = hfs.floatAbs(makeSlice(floatIntMin)); + auto const negated = hfs.floatNegate(makeSlice(floatIntMin)); + BEAST_EXPECT(result && negated) && BEAST_EXPECT(*result == *negated); + } + + { + auto const result = hfs.floatAbs(makeSlice(floatMinusMaxExp)); + BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMaxExp); + } + + { + auto const result = hfs.floatAbs(makeSlice(floatMinus3)); + auto const expected = hfs.floatFromInt(3, 0); + BEAST_EXPECT(result && expected) && BEAST_EXPECT(*result == *expected); + } } void testFloats() { + // for checking binary formats manually + // printNumbersBin(); + testTraceFloat(); testFloatFromInt(); testFloatFromUint(); + testFloatFromSTAmount(); + testFloatFromSTNumber(); + testFloatToInt(); + testFloatToMantissaAndExponent(); + testFloatNegate(); + testFloatAbs(); testFloatSet(); testFloatCompare(); testFloatAdd(); diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index 7c12329aaa..f1097a7e68 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -458,6 +458,42 @@ public: return wasm_float::floatFromUintImpl(x, mode); } + Expected + floatFromSTAmount(STAmount const& x, int32_t mode) const override + { + return wasm_float::floatFromSTAmountImpl(x, mode); + } + + Expected + floatFromSTNumber(STNumber const& x, int32_t mode) const override + { + return wasm_float::floatFromSTNumberImpl(x, mode); + } + + Expected + floatToInt(Slice const& x, int32_t mode) const override + { + return wasm_float::floatToIntImpl(x, mode); + } + + virtual Expected + floatToMantissaAndExponent(Slice const& x) const override + { + return wasm_float::floatToMantissaAndExponentImpl(x); + } + + Expected + floatNegate(Slice const& x) const override + { + return wasm_float::floatNegateImpl(x); + } + + Expected + floatAbs(Slice const& x) const override + { + return wasm_float::floatAbsImpl(x); + } + Expected floatSet(int64_t mantissa, int32_t exponent, int32_t mode) const override { diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index b875eaef50..e96ff5b89a 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -599,7 +599,7 @@ struct Wasm_test : public beast::unit_test::suite TestHostFunctions hfs(env, 0); auto re = runEscrowWasm(floatTestWasm, hfs, 200'000, funcName, {}); - checkResult(re, 1, 110'699); + checkResult(re, 1, 167'965); env.close(); } @@ -608,7 +608,7 @@ struct Wasm_test : public beast::unit_test::suite TestHostFunctions hfs(env, 0); auto re = runEscrowWasm(float0Wasm, hfs, 100'000, funcName, {}); - checkResult(re, 1, 4'259); + checkResult(re, 1, 4'309); env.close(); } } @@ -787,7 +787,7 @@ struct Wasm_test : public beast::unit_test::suite auto re = engine.run(badAlignWasm, hfs, 1'000'000, "test", {}, imports, env.journal); if (BEAST_EXPECTS(re, transToken(re.error()))) { - BEAST_EXPECTS(re->result == 0x684f7941, std::to_string(re->result)); + BEAST_EXPECTS(re->result == 0x47308594, std::to_string(re->result)); } } diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 861df4a3ff..a3906e52dd 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -653,119 +653,267 @@ extern std::string const codecovTestsWasmHex = "2d657874"; extern std::string const floatTestsWasmHex = - "0061736d0100000001430860077f7f7f7f7f7f7f017f60057f7f7f7f7f017f60047f7f7f7f017f60067f7f7f7f7f7f" - "017f60047e7f7f7f017f60057f7e7f7f7f017f60037f7f7e017f6000017f02c9020e08686f73745f6c696205747261" - "6365000108686f73745f6c69620e666c6f61745f66726f6d5f696e74000408686f73745f6c69621274726163655f6f" - "70617175655f666c6f6174000208686f73745f6c69620f666c6f61745f66726f6d5f75696e74000108686f73745f6c" - "696209666c6f61745f736574000508686f73745f6c69620d666c6f61745f636f6d70617265000208686f73745f6c69" - "6209666c6f61745f616464000008686f73745f6c69620e666c6f61745f7375627472616374000008686f73745f6c69" - "620e666c6f61745f6d756c7469706c79000008686f73745f6c69620c666c6f61745f646976696465000008686f7374" - "5f6c696209666c6f61745f706f77000308686f73745f6c69620974726163655f6e756d000608686f73745f6c69620a" - "666c6f61745f726f6f74000308686f73745f6c696209666c6f61745f6c6f6700010302010705030100110619037f01" - "418080c0000b7f0041d28ac0000b7f0041e08ac0000b072e04066d656d6f727902000666696e697368000e0a5f5f64" - "6174615f656e6403010b5f5f686561705f6261736503020af20e01ef0e01047f230041206b22012400418080c00041" - "1d41014100410010001a200142003703100240428ce000200141106a22004108410010014108460440419d80c00041" - "172000410810021a41b480c000411e20004108410110001a0c010b41d280c000411e41014100410010001a0b200142" - "8ce0003703180240200141186a4108200141106a2200410841001003410846044041f080c00041172000410810021a" - "0c010b418781c000411e41014100410010001a0b0240410242fb00200141106a2200410841001004410846044041a5" - "81c00041212000410810021a0c010b41c681c000412641014100410010001a0b41ec81c0004115418182c000410810" - "021a419182c0004116418982c000410810021a41a782c000411b41014100410010001a200142003703180240420120" - "0141186a2200410841001001410846044041c282c000410f2000410810021a0c010b41d182c0004116410141004100" - "10001a0b0240200141186a4108418182c0004108100545044041e782c000411b41014100410010001a0c010b418283" - "c000411b41014100410010001a0b0240200141186a4108418982c000410810054101460440419d83c0004123410141" - "00410010001a0c010b41c083c000412441014100410010001a0b0240418982c0004108200141186a41081005410246" - "044041e483c000412341014100410010001a0c010b418784c000412441014100410010001a0b41ab84c00041204101" - "4100410010001a200142d487b6f4c7d4b1c000370310410921000340200141106a22024108418182c0004108200241" - "08410010061a200041016b22000d000b20014200370318420a200141186a22004108410010011a0240200041082002" - "4108100545044041cb84c000411441014100410010001a0c010b41df84c000411341014100410010001a0b410b2100" - "0340200141106a22024108418182c000410820024108410010071a200041016b22000d000b024020024108418982c0" - "004108100545044041f284c000411941014100410010001a0c010b418b85c000411841014100410010001a0b41a385" - "c000412341014100410010001a20014200370300420a20014108410010011a200142d487b6f4c7d4b1c00037030841" - "0621000340200141086a220241082001410820024108410010081a200041016b22000d000b2001420037031042c084" - "3d200141106a22004108410010011a02402000410820024108100545044041c685c000411941014100410010001a0c" - "010b41df85c000411841014100410010001a0b410721000340200141086a220241082001410820024108410010091a" - "200041016b22000d000b20014200370318417f4201200141186a22004108410010041a024020024108200041081005" - "45044041f785c000411741014100410010001a0c010b418e86c000411641014100410010001a0b41a486c000411741" - "014100410010001a20014200370308418182c00041084103200141086a220041084100100a1a41bb86c00041122000" - "410810021a418982c00041084106200041084100100a1a41cd86c00041182000410810021a20014200370310420920" - "0141106a22024108410010011a200241084102200041084100100a1a41e586c00041142000410810021a2002410841" - "00200041084100100a1a41f986c00041172000410810021a200142003703184200200141186a22034108410010011a" - "200341084102200041084100100a1a419087c00041142000410810021a41a487c00041382003410841002000410841" - "00100aac100b1a41dc87c000411841014100410010001a20014200370308420920004108410010011a200142003703" - "10200041084102200241084100100c1a41f487c00041122002410810021a200041084103200241084100100c1a4186" - "88c00041122002410810021a2001420037031842c0843d20034108410010011a200341084103200241084100100c1a" - "419888c00041182002410810021a200341084106200241084100100c1a41b088c000411c2002410810021a41cc88c0" - "00411741014100410010001a2001420037031042c0843d20024108410010011a200142003703182002410820034108" - "4100100d1a41e388c00041142003410810021a41f788c000411a41014100410010001a20014200370318418182c000" - "4108418982c000410820034108410010081a0240418982c0004108200341081005450440419189c000411641014100" - "410010001a0c010b41a789c000411541014100410010001a0b418982c0004108418982c0004108200141186a220041" - "08410010081a0240418182c000410820004108100545044041bc89c000411741014100410010001a0c010b41d389c0" - "00411641014100410010001a0b41e989c000411a41014100410010001a2001420037031020014200370318420a2001" - "41186a22024108410010011a418182c000410820024108200141106a22004108410010091a41838ac0004119200041" - "0810021a418182c00041082000410820004108410010091a419c8ac000410f2000410810021a024020024108200041" - "08100545044041ab8ac000411441014100410010001a0c010b41bf8ac000411341014100410010001a0b200141206a" - "240041010b0bdc0a0100418080c0000bd20a0a24242420746573745f666c6f61745f66726f6d5f7761736d20242424" - "2020666c6f61742066726f6d206936342031323330303a2020666c6f61742066726f6d206936342031323330302061" - "73204845583a2020666c6f61742066726f6d206936342031323330303a206661696c65642020666c6f61742066726f" - "6d207536342031323330303a2020666c6f61742066726f6d207536342031323330303a206661696c65642020666c6f" - "61742066726f6d2065787020322c206d616e7469737361203132333a2020666c6f61742066726f6d2065787020322c" - "206d616e746973736120333a206661696c65642020666c6f61742066726f6d20636f6e737420313ad4838d7ea4c680" - "0094838d7ea4c680002020666c6f61742066726f6d20636f6e7374202d313a0a24242420746573745f666c6f61745f" - "636f6d70617265202424242020666c6f61742066726f6d20313a2020666c6f61742066726f6d20313a206661696c65" - "642020666c6f61742066726f6d2031203d3d20464c4f41545f4f4e452020666c6f61742066726f6d203120213d2046" - "4c4f41545f4f4e452020666c6f61742066726f6d2031203e20464c4f41545f4e454741544956455f4f4e452020666c" - "6f61742066726f6d203120213e20464c4f41545f4e454741544956455f4f4e452020464c4f41545f4e454741544956" - "455f4f4e45203c20666c6f61742066726f6d20312020464c4f41545f4e454741544956455f4f4e4520213c20666c6f" - "61742066726f6d20310a24242420746573745f666c6f61745f6164645f737562747261637420242424202072657065" - "61746564206164643a20676f6f6420207265706561746564206164643a206261642020726570656174656420737562" - "74726163743a20676f6f64202072657065617465642073756274726163743a206261640a24242420746573745f666c" - "6f61745f6d756c7469706c795f6469766964652024242420207265706561746564206d756c7469706c793a20676f6f" - "6420207265706561746564206d756c7469706c793a2062616420207265706561746564206469766964653a20676f6f" - "6420207265706561746564206469766964653a206261640a24242420746573745f666c6f61745f706f772024242420" - "20666c6f61742063756265206f6620313a2020666c6f61742036746820706f776572206f66202d313a2020666c6f61" - "7420737175617265206f6620393a2020666c6f61742030746820706f776572206f6620393a2020666c6f6174207371" - "75617265206f6620303a2020666c6f61742030746820706f776572206f6620302028657870656374696e6720494e56" - "414c49445f504152414d53206572726f72293a0a24242420746573745f666c6f61745f726f6f74202424242020666c" - "6f61742073717274206f6620393a2020666c6f61742063627274206f6620393a2020666c6f61742063627274206f66" - "20313030303030303a2020666c6f61742036746820726f6f74206f6620313030303030303a0a24242420746573745f" - "666c6f61745f6c6f672024242420206c6f675f3130206f6620313030303030303a0a24242420746573745f666c6f61" - "745f6e65676174652024242420206e656761746520636f6e737420313a20676f6f6420206e656761746520636f6e73" - "7420313a2062616420206e656761746520636f6e7374202d313a20676f6f6420206e656761746520636f6e7374202d" - "313a206261640a24242420746573745f666c6f61745f696e76657274202424242020696e76657274206120666c6f61" - "742066726f6d2031303a2020696e7665727420616761696e3a2020696e766572742074776963653a20676f6f642020" - "696e766572742074776963653a20626164004d0970726f64756365727302086c616e6775616765010452757374000c" - "70726f6365737365642d6279010572757374631d312e38372e30202831373036376539616320323032352d30352d30" - "3929002c0f7461726765745f6665617475726573022b0f6d757461626c652d676c6f62616c732b087369676e2d6578" - "74"; + "0061736d01000000014f0a60057f7f7f7f7f017f60077f7f7f7f7f7f7f017f60047f7f7f7f017f60067f7f7f7f7f7f" + "017f60047e7f7f7f017f60057f7e7f7f7f017f60037f7f7e017f60037f7f7f006000017f60027f7f017f02ba031308" + "686f73745f6c6962057472616365000008686f73745f6c69620e666c6f61745f66726f6d5f696e74000408686f7374" + "5f6c69620f666c6f61745f66726f6d5f75696e74000008686f73745f6c696209666c6f61745f736574000508686f73" + "745f6c69620d666c6f61745f636f6d70617265000208686f73745f6c696209666c6f61745f616464000108686f7374" + "5f6c69620e666c6f61745f7375627472616374000108686f73745f6c69620e666c6f61745f6d756c7469706c790001" + "08686f73745f6c69620c666c6f61745f646976696465000108686f73745f6c696209666c6f61745f706f7700030868" + "6f73745f6c69620974726163655f6e756d000608686f73745f6c69620a666c6f61745f726f6f74000308686f73745f" + "6c696209666c6f61745f6c6f67000003656e760c666c6f61745f746f5f696e74000003656e761e666c6f61745f746f" + "5f6d616e74697373615f616e645f6578706f6e656e74000303656e760c666c6f61745f6e6567617465000203656e76" + "09666c6f61745f616273000203656e7613666c6f61745f66726f6d5f7374616d6f756e74000003656e7613666c6f61" + "745f66726f6d5f73746e756d626572000003040307080905030100110619037f01418080c0000b7f0041a0a1c0000b" + "7f0041a0a1c0000b072e04066d656d6f727902000666696e69736800140a5f5f646174615f656e6403010b5f5f6865" + "61705f6261736503020ae52c031f002000200141014100410010001a418080c00041022002410c410110001a0bff2b" + "020f7f017e23004180016b22002400418280c000411d41014100410010001a200041f8006a41003602002000420037" + "03700240428ce000200041f0006a2202410c410010012201410c460440419f80c00041172002101341b680c000411e" + "2002410c410110001a0c010b41d480c000411e41014100410010001a0b2000428ce0003703600240200041e0006a41" + "08200041f0006a2202410c41001002410c4604402001410c46210841f280c0004117200210130c010b418981c00041" + "1e41014100410010001a0b0240410242fb00200041f0006a2201410c41001003410c46044041a781c0004121200110" + "130c010b41c881c000412641014100410010001a410021080b41ee81c0004115418382c0001013418f82c000411641" + "a582c000101341b182c000411b41014100410010001a200041f8006a41003602002000420037037002404201200041" + "f0006a2202410c410010012201410c46044041cc82c000410f200210130c010b41db82c00041164101410041001000" + "1a0b027f200041f0006a410c418382c000410c100445044041f182c000411b41014100410010001a2001410c460c01" + "0b418c83c000412341014100410010001a41000b21090240200041f0006a410c41a582c000410c1004410146044041" + "af83c000412341014100410010001a0c010b4100210941d283c000412c41014100410010001a0b024041a582c00041" + "0c200041f0006a410c1004410246044041fe83c000412341014100410010001a0c010b4100210941a184c000412c41" + "014100410010001a0b41cd84c000412041014100410010001a200041e8006a418b82c0002800003602002000418382" + "c000290000370360410921040340200041e0006a2201410c418382c000410c2001410c410010051a200441016b2204" + "0d000b200041f8006a410036020020004200370370420a200041f0006a410c41001001410c46220a45044041ed84c0" + "00411741014100410010001a0b0240200041f0006a410c200041e0006a410c1004450440418485c000411441014100" + "410010001a0c010b4100210a419885c000411641014100410010001a0b410b21040340200041e0006a2201410c4183" + "82c000410c2001410c410010061a200441016b22040d000b02402001410c41a582c000410c100445044041ae85c000" + "411941014100410010001a0c010b4100210a41c785c000411b41014100410010001a0b41e285c00041234101410041" + "0010001a200041c8006a410036020020004200370340420a200041406b410c410010011a200041d8006a418b82c000" + "2800003602002000418382c000290000370350410621040340200041d0006a2201410c200041406b410c2001410c41" + "0010071a200441016b22040d000b200041e8006a41003602002000420037036042c0843d200041e0006a2202410c41" + "0010011a02402002410c2001410c10042201450440418586c000411941014100410010001a0c010b419e86c000411b" + "41014100410010001a0b200145210c410721040340200041d0006a2201410c200041406b410c2001410c410010081a" + "200441016b22040d000b200041f8006a410036020020004200370370417f4201200041f0006a2202410c410010031a" + "02402001410c2002410c100445044041b986c000411741014100410010001a0c010b41d086c0004119410141004100" + "10001a4100210c0b41e986c000411741014100410010001a200041d8006a2202410036020020004200370350418382" + "c000410c4103200041d0006a2204410c410010091a418087c00041122004101341a582c000410c41062004410c4100" + "10091a419287c000411820041013200041e8006a22064100360200200042003703604209200041e0006a2203410c41" + "0010011a2003410c41022004410c410010091a41aa87c0004114200410132003410c41002004410c410010091a41be" + "87c000411720041013200041f8006a22014100360200200042003703704200200041f0006a2205410c410010011a20" + "05410c41022004410c410010091a41d587c00041142004101341e987c00041382005410c41002004410c41001009ac" + "100a1a41a188c000411841014100410010001a200241003602002000420037035042092004410c410010011a200641" + "00360200200042003703602004410c41022003410c4100100b1a41b988c0004112200310132004410c41032003410c" + "4100100b1a41cb88c000411220031013200141003602002000420037037042c0843d2005410c410010011a2005410c" + "41032003410c4100100b1a41dd88c0004118200310132005410c41062003410c4100100b1a41f588c000411c200310" + "13419189c000411741014100410010001a200641003602002000420037036042c0843d2003410c410010011a200141" + "00360200200042003703702003410c2005410c4100100c1a41a889c00041142005101341bc89c000411a4101410041" + "0010001a2001410036020020004200370370418382c000410c41a582c000410c2005410c410010071a024041a582c0" + "00410c2005410c1004220145044041d689c000411641014100410010001a0c010b41ec89c000411841014100410010" + "001a0b41a582c000410c41a582c000410c200041f0006a2202410c410010071a0240418382c000410c2002410c1004" + "450440200145210d41848ac000411741014100410010001a0c010b419b8ac000411941014100410010001a0b41b48a" + "c000411a41014100410010001a200041e8006a410036020020004200370360200041f8006a41003602002000420037" + "0370420a200041f0006a2202410c410010011a418382c000410c2002410c200041e0006a2201410c410010081a41ce" + "8ac000411920011013418382c000410c2001410c2001410c410010081a41e78ac000410f2001101302402002410c20" + "01410c1004220e45044041f68ac000411441014100410010001a0c010b418a8bc000411641014100410010001a0b41" + "00210141a08bc000411a41014100410010001a200042003703400240418382c000410c200041406b41084100100d22" + "0641084604402000290340220f42015104404101210141ba8bc000411741014100410010001a0c020b41d18bc00041" + "1941014100410010001a41ea8bc0004108200f100a1a0c010b41f28bc000412441014100410010001a41968cc00041" + "0f2006ac100a1a0b41002104024041a582c000410c200041406b41084100100d220641084604402000290340220f42" + "7f51044041a58cc000411841014100410010001a200121040c020b41bd8cc000411a41014100410010001a41ea8bc0" + "004108200f100a1a0c010b41d78cc000412541014100410010001a41968cc000410f2006ac100a1a0b410021012000" + "41d8006a41003602002000420037035042ffffffffffffffffff00200041d0006a2202410c410010011a0240200241" + "0c200041406b41084100100d220641084604402000290340220f42ffffffffffffffffff0051044041fc8cc000411e" + "41014100410010001a200421010c020b419a8dc000412041014100410010001a41ba8dc000410d42ffffffffffffff" + "ffff00100a1a41ea8bc0004108200f100a1a0c010b41c78dc000412b41014100410010001a41968cc000410f2006ac" + "100a1a0b41002106200041e8006a4100360200200042003703604200200041e0006a2202410c410010011a02402002" + "410c200041406b41084100100d220241084604402000290340220f50044041f28dc000411741014100410010001a20" + "0121060c020b41898ec000411941014100410010001a41ea8bc0004108200f100a1a0c010b41a28ec0004124410141" + "00410010001a41968cc000410f2002ac100a1a0b41002104200041f8006a410036020020004200370370417f420120" + "0041f0006a2201410c410010031a02402001410c200041406b41084100100d220141084604402000290340220f5004" + "4041c68ec000412541014100410010001a200621040c020b41eb8ec000412741014100410010001a41ea8bc0004108" + "200f100a1a0c010b41928fc000413241014100410010001a41968cc000410f2001ac100a1a0b0240200041f0006a41" + "0c200041406b41084101100d220141084604402000290340220f50044041c48fc000412741014100410010001a0c02" + "0b4100210441eb8fc000412941014100410010001a41ea8bc0004108200f100a1a0c010b41002104419490c0004134" + "41014100410010001a41968cc000410f2001ac100a1a0b4100210141c890c000412c41014100410010001a20004200" + "370320200041003602040240418382c000410c200041206a4108200041046a4104100e2206410c4604402000280204" + "2206416e462000290320220f42808090bbbad6adf00d5171450440419d91c000412b41014100410010001a41c891c0" + "00412f200f100a1a41f791c000411f2006ac100a1a0c020b4101210141f490c000412941014100410010001a0c010b" + "419692c000413641014100410010001a41968cc000410f2006ac100a1a0b2000420037033041002106200041003602" + "08024041a582c000410c200041306a4108200041086a4104100e2202410c46044020002802082202416e4620002903" + "30220f428080f0c4c5a9d28f72517145044041f692c000412c41014100410010001a41a293c0004130200f100a1a41" + "f791c000411f2002ac100a1a0c020b41cc92c000412a41014100410010001a200121060c010b41d293c00041374101" + "4100410010001a41968cc000410f2002ac100a1a0b41002101200041e8006a410036020020004200370360420a2000" + "41e0006a2202410c410010011a200042003703402000410036020c02402002410c200041406b41082000410c6a4104" + "100e2202410c460440200028020c2202416f462000290340220f42808090bbbad6adf00d517145044041b394c00041" + "2c41014100410010001a41c891c000412f200f100a1a41df94c000411f2002ac100a1a0c020b418994c000412a4101" + "4100410010001a200621010c010b41fe94c000413741014100410010001a41968cc000410f2002ac100a1a0b410021" + "06200041f8006a4100360200200042003703704200200041f0006a2202410c410010011a2000420037035020004100" + "36021002402002410c200041d0006a4108200041106a4104100e2202410c4604402000290350220f50200028021022" + "02418080808078467145044041de95c000412b41014100410010001a418996c000411d200f100a1a41a696c0004127" + "2002ac100a1a0c020b41b595c000412941014100410010001a200121060c010b41cd96c00041364101410041001000" + "1a41968cc000410f2002ac100a1a0b4100210141bc89c000411a41014100410010001a200041c8006a410036020020" + "0042003703400240418382c000410c200041406b2203410c100f2202410c460440200341a582c00010150440418397" + "c000412b41014100410010001a0c020b4101210141ae97c000411741014100410010001a0c010b41c597c000412441" + "014100410010001a41968cc000410f2002ac100a1a0b41002102200041d8006a410036020020004200370350024041" + "a582c000410c200041d0006a2205410c100f2203410c4604402005418382c0001015044041e997c000412c41014100" + "410010001a0c020b419598c000411841014100410010001a200121020c010b41ad98c000412541014100410010001a" + "41968cc000410f2003ac100a1a0b200041e8006a4100360200200042003703604200200041e0006a2203410c410010" + "011a200041f8006a41003602002000420037037002402003410c200041f0006a2205410c100f2201410c4604402005" + "20031015044041d298c000412b41014100410010001a0c020b41fd98c000411741014100410010001a2002210b0c01" + "0b419499c000412441014100410010001a41968cc000410f2001ac100a1a0b4100210141b899c00041174101410041" + "0010001a200041186a4100360200200042003703100240418382c000410c200041106a2203410c10102202410c4604" + "402003418382c0001015044041cf99c000412841014100410010001a0c020b4101210141f799c00041144101410041" + "0010001a0c010b418b9ac000412141014100410010001a41968cc000410f2002ac100a1a0b41002102200041286a41" + "0036020020004200370320024041a582c000410c200041206a2205410c10102203410c4604402005418382c0001015" + "044041ac9ac000412941014100410010001a0c020b41d59ac000411541014100410010001a200121020c010b41ea9a" + "c000412241014100410010001a41968cc000410f2003ac100a1a0b41002101200041386a4100360200200042003703" + "304200200041306a2205410c410010011a200041c8006a41003602002000420037034002402005410c200041406b22" + "07410c10102203410c4604402007200510150440418c9bc000412841014100410010001a0c020b41b49bc000411441" + "014100410010001a200221010c010b41c89bc000412141014100410010001a41968cc000410f2003ac100a1a0b4100" + "2102200041d8006a4100360200200042003703504276200041d0006a2203410c410010011a200041e8006a41003602" + "0020004200370360420a200041e0006a2205410c410010011a200041f8006a41003602002000420037037002402003" + "410c200041f0006a2207410c10102203410c460440200720051015044041e99bc000412a41014100410010001a0c02" + "0b41939cc000411641014100410010001a200121020c010b41a99cc000412341014100410010001a41968cc000410f" + "2003ac100a1a0b4100210141cc9cc000412141014100410010001a200042c0808080d0a0fdf000370050200041f800" + "6a41003602002000420037037002400240200041d0006a4108200041f0006a2205410c410010112203410c46044041" + "ed9cc000412220051013200042003703602005410c200041e0006a41084100100d22034108470d012000290360220f" + "4280c2d72f51044041012101418f9dc000411d41014100410010001a0c030b41ac9dc000411f41014100410010001a" + "41cb9dc000411c200f100a1a0c020b419b9ec000411f41014100410010001a41ba9ec00041102003ac100a1a0c010b" + "41e79dc000413441014100410010001a41968cc000410f2003ac100a1a0b4100210341ca9ec0004121410141004100" + "10001a200041ffffff8f7f36006820004281eceedce494ccf9c000370060200041f8006a4100360200200042003703" + "7002400240200041e0006a410c200041f0006a2207410c410010122205410c46044041eb9ec000411c200710132000" + "42003703502007410c200041d0006a41084100100d22054108470d012000290350220f42fb00510440410121034187" + "9fc000411b41014100410010001a0c030b41a29fc000411d41014100410010001a41bf9fc0004116200f100a1a0c02" + "0b4187a0c000411d41014100410010001a41ba9ec00041102005ac100a1a0c010b41d59fc000413241014100410010" + "001a41968cc000410f2005ac100a1a0b410021050240418382c000410c200041f0006a2207410c41001012410c4604" + "4041a4a0c000411a200710132007410c418382c000410c100445044041bea0c000412041014100410010001a200321" + "050c020b41dea0c000412241014100410010001a0c010b4180a1c000412041014100410010001a0b20004180016a24" + "00200e452008200971200a71200c71200d71200471200671200b71200271200171200571710b4201047f410c210202" + "40034020002d0000220320012d00002204460440200041016a2100200141016a2101200241016b22020d010c020b0b" + "200320046b21050b20050b0baa210100418080c0000ba02120200a24242420746573745f666c6f61745f66726f6d5f" + "7761736d202424242020666c6f61742066726f6d206936342031323330303a2020666c6f61742066726f6d20693634" + "203132333030206173204845583a2020666c6f61742066726f6d206936342031323330303a206661696c6564202066" + "6c6f61742066726f6d207536342031323330303a2020666c6f61742066726f6d207536342031323330303a20666169" + "6c65642020666c6f61742066726f6d2065787020322c206d616e7469737361203132333a2020666c6f61742066726f" + "6d2065787020322c206d616e746973736120333a206661696c65642020666c6f61742066726f6d20636f6e73742031" + "3a0de0b6b3a7640000ffffffee2020666c6f61742066726f6d20636f6e7374202d313af21f494c589c0000ffffffee" + "0a24242420746573745f666c6f61745f636f6d70617265202424242020666c6f61742066726f6d20313a2020666c6f" + "61742066726f6d20313a206661696c65642020666c6f61742066726f6d2031203d3d20464c4f41545f4f4e45202066" + "6c6f61742066726f6d203120213d20464c4f41545f4f4e452c206661696c65642020666c6f61742066726f6d203120" + "3e20464c4f41545f4e454741544956455f4f4e452020666c6f61742066726f6d203120213e20464c4f41545f4e4547" + "41544956455f4f4e452c206661696c65642020464c4f41545f4e454741544956455f4f4e45203c20666c6f61742066" + "726f6d20312020464c4f41545f4e454741544956455f4f4e4520213c20666c6f61742066726f6d20312c206661696c" + "65640a24242420746573745f666c6f61745f6164645f7375627472616374202424242020666c6f61742066726f6d20" + "31303a206661696c656420207265706561746564206164643a20676f6f6420207265706561746564206164643a2066" + "61696c6564202072657065617465642073756274726163743a20676f6f642020726570656174656420737562747261" + "63743a206661696c65640a24242420746573745f666c6f61745f6d756c7469706c795f646976696465202424242020" + "7265706561746564206d756c7469706c793a20676f6f6420207265706561746564206d756c7469706c793a20666169" + "6c656420207265706561746564206469766964653a20676f6f6420207265706561746564206469766964653a206661" + "696c65640a24242420746573745f666c6f61745f706f77202424242020666c6f61742063756265206f6620313a2020" + "666c6f61742036746820706f776572206f66202d313a2020666c6f617420737175617265206f6620393a2020666c6f" + "61742030746820706f776572206f6620393a2020666c6f617420737175617265206f6620303a2020666c6f61742030" + "746820706f776572206f6620302028657870656374696e6720494e56414c49445f504152414d53206572726f72293a" + "0a24242420746573745f666c6f61745f726f6f74202424242020666c6f61742073717274206f6620393a2020666c6f" + "61742063627274206f6620393a2020666c6f61742063627274206f6620313030303030303a2020666c6f6174203674" + "6820726f6f74206f6620313030303030303a0a24242420746573745f666c6f61745f6c6f672024242420206c6f675f" + "3130206f6620313030303030303a0a24242420746573745f666c6f61745f6e65676174652024242420206e65676174" + "6520636f6e737420313a20676f6f6420206e656761746520636f6e737420313a206661696c656420206e6567617465" + "20636f6e7374202d313a20676f6f6420206e656761746520636f6e7374202d313a206661696c65640a242424207465" + "73745f666c6f61745f696e76657274202424242020696e76657274206120666c6f61742066726f6d2031303a202069" + "6e7665727420616761696e3a2020696e766572742074776963653a20676f6f642020696e766572742074776963653a" + "206661696c65640a24242420746573745f666c6f61745f746f5f696e74202424242020666c6f61745f746f5f696e74" + "2831293a20676f6f642020666c6f61745f746f5f696e742831293a206661696c656420202020676f743a2020666c6f" + "61745f746f5f696e742831293a206661696c65642077697468206572726f72202020206572726f7220636f64653a20" + "20666c6f61745f746f5f696e74282d31293a20676f6f642020666c6f61745f746f5f696e74282d31293a206661696c" + "65642020666c6f61745f746f5f696e74282d31293a206661696c65642077697468206572726f722020666c6f61745f" + "746f5f696e74286936343a3a4d4158293a20676f6f642020666c6f61745f746f5f696e74286936343a3a4d4158293a" + "206661696c65642020202065787065637465643a2020666c6f61745f746f5f696e74286936343a3a4d4158293a2066" + "61696c65642077697468206572726f722020666c6f61745f746f5f696e742830293a20676f6f642020666c6f61745f" + "746f5f696e742830293a206661696c65642020666c6f61745f746f5f696e742830293a206661696c65642077697468" + "206572726f722020666c6f61745f746f5f696e7428302e312c20746f5f6e656172657374293a20676f6f642020666c" + "6f61745f746f5f696e7428302e312c20746f5f6e656172657374293a206661696c65642020666c6f61745f746f5f69" + "6e7428302e312c20746f5f6e656172657374293a206661696c65642077697468206572726f722020666c6f61745f74" + "6f5f696e7428302e312c20746f77617264735f7a65726f293a20676f6f642020666c6f61745f746f5f696e7428302e" + "312c20746f77617264735f7a65726f293a206661696c65642020666c6f61745f746f5f696e7428302e312c20746f77" + "617264735f7a65726f293a206661696c65642077697468206572726f720a24242420746573745f666c6f61745f746f" + "5f6d616e74697373615f616e645f6578706f6e656e74202424242020666c6f61745f746f5f6d616e74697373615f61" + "6e645f6578706f6e656e742831293a20676f6f642020666c6f61745f746f5f6d616e74697373615f616e645f657870" + "6f6e656e742831293a206661696c6564202020206578706563746564206d616e746973736120313030303030303030" + "303030303030303030302c20676f743a202020206578706563746564206578706f6e656e74202d31382c20676f743a" + "2020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e742831293a206661696c656420776974" + "68206572726f722020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e74282d31293a20676f" + "6f642020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e74282d31293a206661696c656420" + "2020206578706563746564206d616e7469737361202d313030303030303030303030303030303030302c20676f743a" + "2020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e74282d31293a206661696c6564207769" + "7468206572726f722020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e74283130293a2067" + "6f6f642020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e74283130293a206661696c6564" + "202020206578706563746564206578706f6e656e74202d31372c20676f743a2020666c6f61745f746f5f6d616e7469" + "7373615f616e645f6578706f6e656e74283130293a206661696c65642077697468206572726f722020666c6f61745f" + "746f5f6d616e74697373615f616e645f6578706f6e656e742830293a20676f6f642020666c6f61745f746f5f6d616e" + "74697373615f616e645f6578706f6e656e742830293a206661696c6564202020206578706563746564206d616e7469" + "73736120302c20676f743a202020206578706563746564206578706f6e656e74202d323134373438333634382c2067" + "6f743a2020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e742830293a206661696c656420" + "77697468206572726f722020666c6f61745f6e65676174652831293a206661696c6564202d20726573756c74206d69" + "736d617463682020666c6f61745f6e65676174652831293a20676f6f642020666c6f61745f6e65676174652831293a" + "206661696c65642077697468206572726f722020666c6f61745f6e6567617465282d31293a206661696c6564202d20" + "726573756c74206d69736d617463682020666c6f61745f6e6567617465282d31293a20676f6f642020666c6f61745f" + "6e6567617465282d31293a206661696c65642077697468206572726f722020666c6f61745f6e65676174652830293a" + "206661696c6564202d20726573756c74206d69736d617463682020666c6f61745f6e65676174652830293a20676f6f" + "642020666c6f61745f6e65676174652830293a206661696c65642077697468206572726f720a24242420746573745f" + "666c6f61745f616273202424242020666c6f61745f6162732831293a206661696c6564202d20726573756c74206d69" + "736d617463682020666c6f61745f6162732831293a20676f6f642020666c6f61745f6162732831293a206661696c65" + "642077697468206572726f722020666c6f61745f616273282d31293a206661696c6564202d20726573756c74206d69" + "736d617463682020666c6f61745f616273282d31293a20676f6f642020666c6f61745f616273282d31293a20666169" + "6c65642077697468206572726f722020666c6f61745f6162732830293a206661696c6564202d20726573756c74206d" + "69736d617463682020666c6f61745f6162732830293a20676f6f642020666c6f61745f6162732830293a206661696c" + "65642077697468206572726f722020666c6f61745f616273282d3130293a206661696c6564202d20726573756c7420" + "6d69736d617463682020666c6f61745f616273282d3130293a20676f6f642020666c6f61745f616273282d3130293a" + "206661696c65642077697468206572726f720a24242420746573745f666c6f61745f66726f6d5f7374616d6f756e74" + "202424242020666c6f61742066726f6d2058525020616d6f756e74202831303020585250293a202058525020616d6f" + "756e7420636f6e76657273696f6e3a20676f6f64202058525020616d6f756e7420636f6e76657273696f6e3a206661" + "696c6564202020206578706563746564203130303030303030302c20676f743a202058525020616d6f756e7420636f" + "6e76657273696f6e3a206661696c6564202d20666c6f61745f746f5f696e74206572726f722020666c6f6174206672" + "6f6d2058525020616d6f756e743a206661696c656420202020726573756c745f73697a653a0a24242420746573745f" + "666c6f61745f66726f6d5f73746e756d626572202424242020666c6f61742066726f6d2053544e756d626572202831" + "3233293a202053544e756d62657220636f6e76657273696f6e3a20676f6f64202053544e756d62657220636f6e7665" + "7273696f6e3a206661696c6564202020206578706563746564203132332c20676f743a202053544e756d6265722063" + "6f6e76657273696f6e3a206661696c6564202d20666c6f61745f746f5f696e74206572726f722020666c6f61742066" + "726f6d2053544e756d6265723a206661696c65642020666c6f61742066726f6d2053544e756d626572202831293a20" + "2053544e756d626572283129203d3d20464c4f41545f4f4e453a20676f6f64202053544e756d626572283129203d3d" + "20464c4f41545f4f4e453a206661696c65642020666c6f61742066726f6d2053544e756d6265722831293a20666169" + "6c6564004d0970726f64756365727302086c616e6775616765010452757374000c70726f6365737365642d62790105" + "72757374631d312e38392e30202832393438333838336520323032352d30382d303429002c0f7461726765745f6665" + "617475726573022b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; extern std::string const float0Hex = "0061736d0100000001290560057f7f7f7f7f017f60047e7f7f7f017f60077f7f7f7f7f7f7f017f60047f7f7f7f017f" "6000017f025f0408686f73745f6c6962057472616365000008686f73745f6c69620e666c6f61745f66726f6d5f696e" "74000108686f73745f6c69620e666c6f61745f7375627472616374000208686f73745f6c69620d666c6f61745f636f" - "6d7061726500030302010405030100110619037f01418080c0000b7f00419281c0000b7f0041a081c0000b072e0406" - "6d656d6f727902000666696e69736800040a5f5f646174615f656e6403010b5f5f686561705f6261736503020abe02" - "01bb0201017f23808080800041206b2200248080808000418080c0800041154100410041001080808080001a200042" - "003703084200200041086a410841001081808080001a20004200370310420a200041106a410841001081808080001a" - "200042003703180240200041106a4108200041106a4108200041186a410841001082808080004108460d00419580c0" - "800041154100410041001080808080001a0b02400240200041086a4108200041186a41081083808080000d0041aa80" - "c0800041174100410041001080808080001a0c010b41c180c0800041164100410041001080808080001a0b02400240" - "200041086a410841d780c0800041081083808080000d0041df80c08000411a4100410041001080808080001a0c010b" - "41f980c0800041194100410041001080808080001a0b200041206a24808080800041010b0b9c010100418080c0000b" - "92010a24242420746573745f666c6f61745f30202424242020666c6f61742031302d31303a206661696c6564202066" - "6c6f6174203020636f6d706172653a20676f6f642020666c6f6174203020636f6d706172653a206261648000000000" - "0000002020464c4f41545f5a45524f20636f6d706172653a20676f6f642020464c4f41545f5a45524f20636f6d7061" - "72653a20626164009502046e616d65001110666c6f61745f74657374732e7761736d01da0105002b5f5a4e38787270" - "6c5f73746434686f7374357472616365313768616338383262323664656162656436364501355f5a4e387872706c5f" - "73746434686f73743134666c6f61745f66726f6d5f696e74313768303234306638653361383964313939654502355f" - "5a4e387872706c5f73746434686f73743134666c6f61745f7375627472616374313768643634306331353233343534" - "323935634503345f5a4e387872706c5f73746434686f73743133666c6f61745f636f6d706172653137683663386465" - "656231323864393638386645040666696e697368071201000f5f5f737461636b5f706f696e746572090a0100072e72" - "6f64617461004d0970726f64756365727302086c616e6775616765010452757374000c70726f6365737365642d6279" - "010572757374631d312e38392e30202832393438333838336520323032352d30382d3034290094010f746172676574" - "5f6665617475726573082b0b62756c6b2d6d656d6f72792b0f62756c6b2d6d656d6f72792d6f70742b1663616c6c2d" - "696e6469726563742d6f7665726c6f6e672b0a6d756c746976616c75652b0f6d757461626c652d676c6f62616c732" - "b136e6f6e7472617070696e672d6670746f696e742b0f7265666572656e63652d74797065732b087369676e2d65787" - "4"; + "6d7061726500030302010405030100110619037f01418080c0000b7f00419681c0000b7f0041a081c0000b072e0406" + "6d656d6f727902000666696e69736800040a5f5f646174615f656e6403010b5f5f686561705f6261736503020ad302" + "01d00201017f23808080800041206b2200248080808000418080c0800041154101410041001080808080001a200041" + "086a410036020020004200370300200041106a41086a410036020020004200370310024002400240420a2000410c41" + "00108180808000410c470d002000410c2000410c200041106a410c4100108280808000410c470d0102400240200041" + "106a410c200041106a410c1083808080000d00419580c0800041174101410041001080808080001a0c010b41ac80c0" + "800041164101410041001080808080001a0b0240200041106a410c41c280c08000410c1083808080000d0041ce80c0" + "8000411a4101410041001080808080001a0c030b41e880c0800041194101410041001080808080001a0c020b418181" + "c0800041154101410041001080808080001a0c010b418181c0800041154101410041001080808080001a0b20004120" + "6a24808080800041010b0ba0010100418080c0000b96010a24242420746573745f666c6f61745f3020242424202066" + "6c6f6174203020636f6d706172653a20676f6f642020666c6f6174203020636f6d706172653a206261640000000000" + "000000800000002020464c4f41545f5a45524f20636f6d706172653a20676f6f642020464c4f41745f5a45524f2063" + "6f6d706172653a206261642020666c6f61742031302d31303a206661696c6564009503046e616d65000d0c666c6f61" + "745f302e7761736d01de0205004c5f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f" + "646566696e65645f66756e6374696f6e73357472616365313768653738323066313637383330383338364501565f5a" + "4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e" + "733134666c6f61745f66726f6d5f696e74313768646463636262643266613366663431634502565f5a4e3136787270" + "6c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e733134666c6f" + "61745f7375627472616374313768313765643838343131303333663437624503555f5a4e31367872706c5f7761736d" + "5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e733133666c6f61745f636f6d" + "706172653137683835393637633834333363613334623045040666696e697368071201000f5f5f737461636b5f706f" + "696e746572090a0100072e726f64617461004d0970726f64756365727302086c616e6775616765010452757374000c" + "70726f6365737365642d6279010572757374631d312e38392e30202832393438333838336520323032352d30382d30" + "34290094010f7461726765745f6665617475726573082b0b62756c6b2d6d656d6f72792b0f62756c6b2d6d656d6f72" + "792d6f70742b1663616c6c2d696e6469726563742d6f7665726c6f6e672b0a6d756c746976616c75652b0f6d757461" + "626c652d676c6f62616c732b136e6f6e7472617070696e672d6670746f696e742b0f7265666572656e63652d747970" + "65732b087369676e2d657874"; extern std::string const disabledFloatHex = "0061736d010000000108026000006000017f03030200010503010002063e0a7f004180080b7f004180080b7f004180" diff --git a/src/test/app/wasm_fixtures/float_0/Cargo.lock b/src/test/app/wasm_fixtures/float_0/Cargo.lock new file mode 100644 index 0000000000..4c62a73f26 --- /dev/null +++ b/src/test/app/wasm_fixtures/float_0/Cargo.lock @@ -0,0 +1,171 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "float_0" +version = "0.0.1" +dependencies = [ + "xrpl-wasm-stdlib", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "libc" +version = "0.2.183" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "syn" +version = "2.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tinyvec" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "typenum" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "xrpl-address-macro" +version = "0.7.1" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?rev=1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" +dependencies = [ + "bs58", + "quote", + "sha2", + "syn", +] + +[[package]] +name = "xrpl-wasm-stdlib" +version = "0.7.1" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?rev=1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" +dependencies = [ + "xrpl-address-macro", +] diff --git a/src/test/app/wasm_fixtures/float_0/Cargo.toml b/src/test/app/wasm_fixtures/float_0/Cargo.toml new file mode 100644 index 0000000000..10b20c5428 --- /dev/null +++ b/src/test/app/wasm_fixtures/float_0/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "float_0" +version = "0.0.1" +edition = "2024" + +# This empty workspace definition keeps this project independent of the parent workspace +[workspace] + +[lib] +crate-type = ["cdylib"] + +[profile.release] +lto = true +opt-level = 's' +panic = "abort" + +[dependencies] +xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib", rev = "1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" } + +[profile.dev] +panic = "abort" diff --git a/src/test/app/wasm_fixtures/float_0/src/lib.rs b/src/test/app/wasm_fixtures/float_0/src/lib.rs new file mode 100644 index 0000000000..2c1e2dd5c3 --- /dev/null +++ b/src/test/app/wasm_fixtures/float_0/src/lib.rs @@ -0,0 +1,57 @@ +#![cfg_attr(target_arch = "wasm32", no_std)] + +use xrpl_std::host::trace::trace; +use xrpl_std::host::{float_compare, float_from_int, float_subtract, FLOAT_ROUNDING_MODES_TO_NEAREST}; + +// Float size constant (8 bytes mantissa + 4 bytes exponent) +const FLOAT_SIZE: usize = 12; + +// FLOAT_ZERO constant +const FLOAT_ZERO: [u8; FLOAT_SIZE] = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00]; + +#[unsafe(no_mangle)] +pub extern "C" fn finish() -> i32 { + let _ = trace("\n$$$ test_float_0 $$$"); + + // Test: 10 - 10 should equal 0 + let mut f10: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + let mut f_result: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + + // Create float from 10 + if FLOAT_SIZE as i32 != unsafe { float_from_int(10, f10.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) } { + let _ = trace(" float 10-10: failed"); + return 1; + } + + // Subtract: 10 - 10 = 0 + if FLOAT_SIZE as i32 != unsafe { + float_subtract( + f10.as_ptr(), + FLOAT_SIZE, + f10.as_ptr(), + FLOAT_SIZE, + f_result.as_mut_ptr(), + FLOAT_SIZE, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + } { + let _ = trace(" float 10-10: failed"); + return 1; + } + + // Compare result with zero + if 0 == unsafe { float_compare(f_result.as_ptr(), FLOAT_SIZE, f_result.as_ptr(), FLOAT_SIZE) } { + let _ = trace(" float 0 compare: good"); + } else { + let _ = trace(" float 0 compare: bad"); + } + + // Compare result with FLOAT_ZERO constant + if 0 == unsafe { float_compare(f_result.as_ptr(), FLOAT_SIZE, FLOAT_ZERO.as_ptr(), FLOAT_SIZE) } { + let _ = trace(" FLOAT_ZERO compare: good"); + } else { + let _ = trace(" FLOAT_ZERO compare: bad"); + } + + 1 +} diff --git a/src/test/app/wasm_fixtures/float_tests/src/lib.rs b/src/test/app/wasm_fixtures/float_tests/src/lib.rs index fc8a1ff5cb..5e4ac5ef7d 100644 --- a/src/test/app/wasm_fixtures/float_tests/src/lib.rs +++ b/src/test/app/wasm_fixtures/float_tests/src/lib.rs @@ -6,15 +6,14 @@ extern crate std; use xrpl_std::core::locator::Locator; -use xrpl_std::core::types::opaque_float::{FLOAT_NEGATIVE_ONE, FLOAT_ONE}; use xrpl_std::decode_hex_32; use xrpl_std::host::trace::DataRepr::AsHex; -use xrpl_std::host::trace::{trace, trace_data, trace_float, trace_num, DataRepr}; +use xrpl_std::host::trace::{trace, trace_data, trace_num, DataRepr}; use xrpl_std::host::{ cache_ledger_obj, float_add, float_compare, float_divide, float_from_int, float_from_uint, float_log, float_multiply, float_pow, float_root, float_set, float_subtract, get_ledger_obj_array_len, get_ledger_obj_field, get_ledger_obj_nested_field, - trace_opaque_float, FLOAT_ROUNDING_MODES_TO_NEAREST, + FLOAT_ROUNDING_MODES_TO_NEAREST, }; use xrpl_std::sfield; use xrpl_std::sfield::{ @@ -22,189 +21,281 @@ use xrpl_std::sfield::{ OwnerCount, PreviousTxnID, PreviousTxnLgrSeq, RegularKey, Sequence, TicketCount, TransferRate, }; -fn test_float_from_wasm() { - let _ = trace("\n$$$ test_float_from_wasm $$$"); +// External host functions not yet in xrpl_std +unsafe extern "C" { + #[link_name = "float_from_stamount"] + fn float_from_stamount( + amount_ptr: *const u8, + amount_len: i32, + out_ptr: *mut u8, + out_len: i32, + rounding: i32, + ) -> i32; - let mut f: [u8; 8] = [0u8; 8]; - if 8 == unsafe { float_from_int(12300, f.as_mut_ptr(), 8, FLOAT_ROUNDING_MODES_TO_NEAREST) } { + #[link_name = "float_from_stnumber"] + fn float_from_stnumber( + number_ptr: *const u8, + number_len: i32, + out_ptr: *mut u8, + out_len: i32, + rounding: i32, + ) -> i32; + + #[link_name = "float_to_int"] + fn float_to_int( + float_ptr: *const u8, + float_len: i32, + out_ptr: *mut u8, + out_len: i32, + rounding: i32, + ) -> i32; + + #[link_name = "float_to_mantissa_and_exponent"] + fn float_to_mantissa_and_exponent( + float_ptr: *const u8, + float_len: i32, + mantissa_ptr: *mut u8, + mantissa_len: i32, + exponent_ptr: *mut u8, + exponent_len: i32, + ) -> i32; + + #[link_name = "float_negate"] + fn float_negate( + float_ptr: *const u8, + float_len: i32, + out_ptr: *mut u8, + out_len: i32, + ) -> i32; + + #[link_name = "float_abs"] + fn float_abs(float_ptr: *const u8, float_len: i32, out_ptr: *mut u8, out_len: i32) -> i32; +} + +// Float size constant (8 bytes mantissa + 4 bytes exponent) +const FLOAT_SIZE: usize = 12; + +// Float constants (8 bytes mantissa + 4 bytes exponent, big-endian) +// FLOAT_ONE: mantissa=0x0DE0B6B3A7640000 (10^18), exponent=0xFFFFFFEE (-18) +const FLOAT_ONE: [u8; FLOAT_SIZE] = [0x0D, 0xE0, 0xB6, 0xB3, 0xA7, 0x64, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xEE]; +// FLOAT_NEGATIVE_ONE: mantissa=0xF21F494C589C0000 (-10^18), exponent=0xFFFFFFEE (-18) +const FLOAT_NEGATIVE_ONE: [u8; FLOAT_SIZE] = [0xF2, 0x1F, 0x49, 0x4C, 0x58, 0x9C, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xEE]; + +// Helper function to trace floats +fn trace_float(msg: &str, f: &[u8; FLOAT_SIZE]) { + let _ = trace(msg); + let _ = trace_data(" ", f, AsHex); +} + +fn test_float_from_wasm() -> bool { + let _ = trace("\n$$$ test_float_from_wasm $$$"); + let mut all_pass = true; + + let mut f: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + if FLOAT_SIZE as i32 == unsafe { float_from_int(12300, f.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) } { let _ = trace_float(" float from i64 12300:", &f); let _ = trace_data(" float from i64 12300 as HEX:", &f, AsHex); } else { let _ = trace(" float from i64 12300: failed"); + all_pass = false; } let u64_value: u64 = 12300; - if 8 == unsafe { + if FLOAT_SIZE as i32 == unsafe { float_from_uint( &u64_value as *const u64 as *const u8, 8, f.as_mut_ptr(), - 8, + FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST, ) } { let _ = trace_float(" float from u64 12300:", &f); } else { let _ = trace(" float from u64 12300: failed"); + all_pass = false; } - if 8 == unsafe { float_set(2, 123, f.as_mut_ptr(), 8, FLOAT_ROUNDING_MODES_TO_NEAREST) } { + if FLOAT_SIZE as i32 == unsafe { float_set(2, 123, f.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) } { let _ = trace_float(" float from exp 2, mantissa 123:", &f); } else { let _ = trace(" float from exp 2, mantissa 3: failed"); + all_pass = false; } let _ = trace_float(" float from const 1:", &FLOAT_ONE); let _ = trace_float(" float from const -1:", &FLOAT_NEGATIVE_ONE); + + all_pass } -fn test_float_compare() { +fn test_float_compare() -> bool { let _ = trace("\n$$$ test_float_compare $$$"); + let mut all_pass = true; - let mut f1: [u8; 8] = [0u8; 8]; - if 8 != unsafe { float_from_int(1, f1.as_mut_ptr(), 8, FLOAT_ROUNDING_MODES_TO_NEAREST) } { + let mut f1: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + if FLOAT_SIZE as i32 != unsafe { float_from_int(1, f1.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) } { let _ = trace(" float from 1: failed"); + all_pass = false; } else { let _ = trace_float(" float from 1:", &f1); } - if 0 == unsafe { float_compare(f1.as_ptr(), 8, FLOAT_ONE.as_ptr(), 8) } { + if 0 == unsafe { float_compare(f1.as_ptr(), FLOAT_SIZE, FLOAT_ONE.as_ptr(), FLOAT_SIZE) } { let _ = trace(" float from 1 == FLOAT_ONE"); } else { - let _ = trace(" float from 1 != FLOAT_ONE"); + let _ = trace(" float from 1 != FLOAT_ONE, failed"); + all_pass = false; } - if 1 == unsafe { float_compare(f1.as_ptr(), 8, FLOAT_NEGATIVE_ONE.as_ptr(), 8) } { + if 1 == unsafe { float_compare(f1.as_ptr(), FLOAT_SIZE, FLOAT_NEGATIVE_ONE.as_ptr(), FLOAT_SIZE) } { let _ = trace(" float from 1 > FLOAT_NEGATIVE_ONE"); } else { - let _ = trace(" float from 1 !> FLOAT_NEGATIVE_ONE"); + let _ = trace(" float from 1 !> FLOAT_NEGATIVE_ONE, failed"); + all_pass = false; } - if 2 == unsafe { float_compare(FLOAT_NEGATIVE_ONE.as_ptr(), 8, f1.as_ptr(), 8) } { + if 2 == unsafe { float_compare(FLOAT_NEGATIVE_ONE.as_ptr(), FLOAT_SIZE, f1.as_ptr(), FLOAT_SIZE) } { let _ = trace(" FLOAT_NEGATIVE_ONE < float from 1"); } else { - let _ = trace(" FLOAT_NEGATIVE_ONE !< float from 1"); + let _ = trace(" FLOAT_NEGATIVE_ONE !< float from 1, failed"); + all_pass = false; } + + all_pass } -fn test_float_add_subtract() { +fn test_float_add_subtract() -> bool { let _ = trace("\n$$$ test_float_add_subtract $$$"); + let mut all_pass = true; - let mut f_compute: [u8; 8] = FLOAT_ONE; + let mut f_compute: [u8; FLOAT_SIZE] = FLOAT_ONE; for i in 0..9 { unsafe { float_add( f_compute.as_ptr(), - 8, + FLOAT_SIZE, FLOAT_ONE.as_ptr(), - 8, + FLOAT_SIZE, f_compute.as_mut_ptr(), - 8, + FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST, ) }; // let _ = trace_float(" float:", &f_compute); } - let mut f10: [u8; 8] = [0u8; 8]; - if 8 != unsafe { float_from_int(10, f10.as_mut_ptr(), 8, FLOAT_ROUNDING_MODES_TO_NEAREST) } { - // let _ = trace(" float from 10: failed"); + let mut f10: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + if FLOAT_SIZE as i32 != unsafe { float_from_int(10, f10.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) } { + let _ = trace(" float from 10: failed"); + all_pass = false; } - if 0 == unsafe { float_compare(f10.as_ptr(), 8, f_compute.as_ptr(), 8) } { + + if 0 == unsafe { float_compare(f10.as_ptr(), FLOAT_SIZE, f_compute.as_ptr(), FLOAT_SIZE) } { let _ = trace(" repeated add: good"); } else { - let _ = trace(" repeated add: bad"); + let _ = trace(" repeated add: failed"); + all_pass = false; } for i in 0..11 { unsafe { float_subtract( f_compute.as_ptr(), - 8, + FLOAT_SIZE, FLOAT_ONE.as_ptr(), - 8, + FLOAT_SIZE, f_compute.as_mut_ptr(), - 8, + FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST, ) }; } - if 0 == unsafe { float_compare(f_compute.as_ptr(), 8, FLOAT_NEGATIVE_ONE.as_ptr(), 8) } { + if 0 == unsafe { float_compare(f_compute.as_ptr(), FLOAT_SIZE, FLOAT_NEGATIVE_ONE.as_ptr(), FLOAT_SIZE) } { let _ = trace(" repeated subtract: good"); } else { - let _ = trace(" repeated subtract: bad"); + let _ = trace(" repeated subtract: failed"); + all_pass = false; } + + all_pass } -fn test_float_multiply_divide() { +fn test_float_multiply_divide() -> bool { let _ = trace("\n$$$ test_float_multiply_divide $$$"); + let mut all_pass = true; - let mut f10: [u8; 8] = [0u8; 8]; - unsafe { float_from_int(10, f10.as_mut_ptr(), 8, FLOAT_ROUNDING_MODES_TO_NEAREST) }; - let mut f_compute: [u8; 8] = FLOAT_ONE; + let mut f10: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + unsafe { float_from_int(10, f10.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; + let mut f_compute: [u8; FLOAT_SIZE] = FLOAT_ONE; for i in 0..6 { unsafe { float_multiply( f_compute.as_ptr(), - 8, + FLOAT_SIZE, f10.as_ptr(), - 8, + FLOAT_SIZE, f_compute.as_mut_ptr(), - 8, + FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST, ) }; // let _ = trace_float(" float:", &f_compute); } - let mut f1000000: [u8; 8] = [0u8; 8]; + let mut f1000000: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; unsafe { float_from_int( 1000000, f1000000.as_mut_ptr(), - 8, + FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST, ) }; - if 0 == unsafe { float_compare(f1000000.as_ptr(), 8, f_compute.as_ptr(), 8) } { + if 0 == unsafe { float_compare(f1000000.as_ptr(), FLOAT_SIZE, f_compute.as_ptr(), FLOAT_SIZE) } { let _ = trace(" repeated multiply: good"); } else { - let _ = trace(" repeated multiply: bad"); + let _ = trace(" repeated multiply: failed"); + all_pass = false; } for i in 0..7 { unsafe { float_divide( f_compute.as_ptr(), - 8, + FLOAT_SIZE, f10.as_ptr(), - 8, + FLOAT_SIZE, f_compute.as_mut_ptr(), - 8, + FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST, ) }; } - let mut f01: [u8; 8] = [0u8; 8]; - unsafe { float_set(-1, 1, f01.as_mut_ptr(), 8, FLOAT_ROUNDING_MODES_TO_NEAREST) }; + let mut f01: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + unsafe { float_set(-1, 1, f01.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; - if 0 == unsafe { float_compare(f_compute.as_ptr(), 8, f01.as_ptr(), 8) } { + if 0 == unsafe { float_compare(f_compute.as_ptr(), FLOAT_SIZE, f01.as_ptr(), FLOAT_SIZE) } { let _ = trace(" repeated divide: good"); } else { - let _ = trace(" repeated divide: bad"); + let _ = trace(" repeated divide: failed"); + all_pass = false; } + + all_pass } -fn test_float_pow() { +fn test_float_pow() -> bool { let _ = trace("\n$$$ test_float_pow $$$"); + let mut all_pass = true; - let mut f_compute: [u8; 8] = [0u8; 8]; + let mut f_compute: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; unsafe { float_pow( FLOAT_ONE.as_ptr(), - 8, + FLOAT_SIZE, 3, f_compute.as_mut_ptr(), - 8, + FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST, ) }; @@ -213,24 +304,24 @@ fn test_float_pow() { unsafe { float_pow( FLOAT_NEGATIVE_ONE.as_ptr(), - 8, + FLOAT_SIZE, 6, f_compute.as_mut_ptr(), - 8, + FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST, ) }; let _ = trace_float(" float 6th power of -1:", &f_compute); - let mut f9: [u8; 8] = [0u8; 8]; - unsafe { float_from_int(9, f9.as_mut_ptr(), 8, FLOAT_ROUNDING_MODES_TO_NEAREST) }; + let mut f9: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + unsafe { float_from_int(9, f9.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; unsafe { float_pow( f9.as_ptr(), - 8, + FLOAT_SIZE, 2, f_compute.as_mut_ptr(), - 8, + FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST, ) }; @@ -239,24 +330,24 @@ fn test_float_pow() { unsafe { float_pow( f9.as_ptr(), - 8, + FLOAT_SIZE, 0, f_compute.as_mut_ptr(), - 8, + FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST, ) }; let _ = trace_float(" float 0th power of 9:", &f_compute); - let mut f0: [u8; 8] = [0u8; 8]; - unsafe { float_from_int(0, f0.as_mut_ptr(), 8, FLOAT_ROUNDING_MODES_TO_NEAREST) }; + let mut f0: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + unsafe { float_from_int(0, f0.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; unsafe { float_pow( f0.as_ptr(), - 8, + FLOAT_SIZE, 2, f_compute.as_mut_ptr(), - 8, + FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST, ) }; @@ -265,10 +356,10 @@ fn test_float_pow() { let r = unsafe { float_pow( f0.as_ptr(), - 8, + FLOAT_SIZE, 0, f_compute.as_mut_ptr(), - 8, + FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST, ) }; @@ -276,21 +367,24 @@ fn test_float_pow() { " float 0th power of 0 (expecting INVALID_PARAMS error):", r as i64, ); + + all_pass } -fn test_float_root() { +fn test_float_root() -> bool { let _ = trace("\n$$$ test_float_root $$$"); + let mut all_pass = true; - let mut f9: [u8; 8] = [0u8; 8]; - unsafe { float_from_int(9, f9.as_mut_ptr(), 8, FLOAT_ROUNDING_MODES_TO_NEAREST) }; - let mut f_compute: [u8; 8] = [0u8; 8]; + let mut f9: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + unsafe { float_from_int(9, f9.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; + let mut f_compute: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; unsafe { float_root( f9.as_ptr(), - 8, + FLOAT_SIZE, 2, f_compute.as_mut_ptr(), - 8, + FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST, ) }; @@ -298,31 +392,31 @@ fn test_float_root() { unsafe { float_root( f9.as_ptr(), - 8, + FLOAT_SIZE, 3, f_compute.as_mut_ptr(), - 8, + FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST, ) }; let _ = trace_float(" float cbrt of 9:", &f_compute); - let mut f1000000: [u8; 8] = [0u8; 8]; + let mut f1000000: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; unsafe { float_from_int( 1000000, f1000000.as_mut_ptr(), - 8, + FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST, ) }; unsafe { float_root( f1000000.as_ptr(), - 8, + FLOAT_SIZE, 3, f_compute.as_mut_ptr(), - 8, + FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST, ) }; @@ -330,96 +424,107 @@ fn test_float_root() { unsafe { float_root( f1000000.as_ptr(), - 8, + FLOAT_SIZE, 6, f_compute.as_mut_ptr(), - 8, + FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST, ) }; let _ = trace_float(" float 6th root of 1000000:", &f_compute); + + all_pass } -fn test_float_log() { +fn test_float_log() -> bool { let _ = trace("\n$$$ test_float_log $$$"); + let mut all_pass = true; - let mut f1000000: [u8; 8] = [0u8; 8]; + let mut f1000000: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; unsafe { float_from_int( 1000000, f1000000.as_mut_ptr(), - 8, + FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST, ) }; - let mut f_compute: [u8; 8] = [0u8; 8]; + let mut f_compute: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; unsafe { float_log( f1000000.as_ptr(), - 8, + FLOAT_SIZE, f_compute.as_mut_ptr(), - 8, + FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST, ) }; let _ = trace_float(" log_10 of 1000000:", &f_compute); + + all_pass } -fn test_float_negate() { +fn test_float_negate() -> bool { let _ = trace("\n$$$ test_float_negate $$$"); + let mut all_pass = true; - let mut f_compute: [u8; 8] = [0u8; 8]; + let mut f_compute: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; unsafe { float_multiply( FLOAT_ONE.as_ptr(), - 8, + FLOAT_SIZE, FLOAT_NEGATIVE_ONE.as_ptr(), - 8, + FLOAT_SIZE, f_compute.as_mut_ptr(), - 8, + FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST, ) }; // let _ = trace_float(" float:", &f_compute); - if 0 == unsafe { float_compare(FLOAT_NEGATIVE_ONE.as_ptr(), 8, f_compute.as_ptr(), 8) } { + if 0 == unsafe { float_compare(FLOAT_NEGATIVE_ONE.as_ptr(), FLOAT_SIZE, f_compute.as_ptr(), FLOAT_SIZE) } { let _ = trace(" negate const 1: good"); } else { - let _ = trace(" negate const 1: bad"); + let _ = trace(" negate const 1: failed"); + all_pass = false; } unsafe { float_multiply( FLOAT_NEGATIVE_ONE.as_ptr(), - 8, + FLOAT_SIZE, FLOAT_NEGATIVE_ONE.as_ptr(), - 8, + FLOAT_SIZE, f_compute.as_mut_ptr(), - 8, + FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST, ) }; // let _ = trace_float(" float:", &f_compute); - if 0 == unsafe { float_compare(FLOAT_ONE.as_ptr(), 8, f_compute.as_ptr(), 8) } { + if 0 == unsafe { float_compare(FLOAT_ONE.as_ptr(), FLOAT_SIZE, f_compute.as_ptr(), FLOAT_SIZE) } { let _ = trace(" negate const -1: good"); } else { - let _ = trace(" negate const -1: bad"); + let _ = trace(" negate const -1: failed"); + all_pass = false; } + + all_pass } -fn test_float_invert() { +fn test_float_invert() -> bool { let _ = trace("\n$$$ test_float_invert $$$"); + let mut all_pass = true; - let mut f_compute: [u8; 8] = [0u8; 8]; - let mut f10: [u8; 8] = [0u8; 8]; - unsafe { float_from_int(10, f10.as_mut_ptr(), 8, FLOAT_ROUNDING_MODES_TO_NEAREST) }; + let mut f_compute: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + let mut f10: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + unsafe { float_from_int(10, f10.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; unsafe { float_divide( FLOAT_ONE.as_ptr(), - 8, + FLOAT_SIZE, f10.as_ptr(), - 8, + FLOAT_SIZE, f_compute.as_mut_ptr(), - 8, + FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST, ) }; @@ -427,35 +532,686 @@ fn test_float_invert() { unsafe { float_divide( FLOAT_ONE.as_ptr(), - 8, + FLOAT_SIZE, f_compute.as_ptr(), - 8, + FLOAT_SIZE, f_compute.as_mut_ptr(), - 8, + FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST, ) }; let _ = trace_float(" invert again:", &f_compute); // if f10's value is 7, then invert twice won't match the original value - if 0 == unsafe { float_compare(f10.as_ptr(), 8, f_compute.as_ptr(), 8) } { + if 0 == unsafe { float_compare(f10.as_ptr(), FLOAT_SIZE, f_compute.as_ptr(), FLOAT_SIZE) } { let _ = trace(" invert twice: good"); } else { - let _ = trace(" invert twice: bad"); + let _ = trace(" invert twice: failed"); + all_pass = false; } + + all_pass +} + +fn test_float_to_int() -> bool { + let _ = trace("\n$$$ test_float_to_int $$$"); + let mut all_pass = true; + let mut result: [u8; 8] = [0u8; 8]; + + // Test converting FLOAT_ONE (value 1) to int + let ret = unsafe { + float_to_int( + FLOAT_ONE.as_ptr(), + FLOAT_SIZE as i32, + result.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST + ) + }; + if ret == 8 { + let number = i64::from_le_bytes(result); + if number == 1 { + let _ = trace(" float_to_int(1): good"); + } else { + let _ = trace(" float_to_int(1): failed"); + let _ = trace_num(" got:", number); + all_pass = false; + } + } else { + let _ = trace(" float_to_int(1): failed with error"); + let _ = trace_num(" error code:", ret as i64); + all_pass = false; + } + + // Test converting FLOAT_NEGATIVE_ONE (value -1) to int + let ret = unsafe { + float_to_int( + FLOAT_NEGATIVE_ONE.as_ptr(), + FLOAT_SIZE as i32, + result.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST + ) + }; + if ret == 8 { + let number = i64::from_le_bytes(result); + if number == -1 { + let _ = trace(" float_to_int(-1): good"); + } else { + let _ = trace(" float_to_int(-1): failed"); + let _ = trace_num(" got:", number); + all_pass = false; + } + } else { + let _ = trace(" float_to_int(-1): failed with error"); + let _ = trace_num(" error code:", ret as i64); + all_pass = false; + } + + // Test converting a larger number (i64::MAX) + let test_val: i64 = i64::MAX; + let mut f_max: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + unsafe { float_from_int(test_val, f_max.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; + let ret = unsafe { + float_to_int( + f_max.as_ptr(), + FLOAT_SIZE as i32, + result.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST + ) + }; + if ret == 8 { + let number = i64::from_le_bytes(result); + if number == test_val { + let _ = trace(" float_to_int(i64::MAX): good"); + } else { + let _ = trace(" float_to_int(i64::MAX): failed"); + let _ = trace_num(" expected:", test_val); + let _ = trace_num(" got:", number); + all_pass = false; + } + } else { + let _ = trace(" float_to_int(i64::MAX): failed with error"); + let _ = trace_num(" error code:", ret as i64); + all_pass = false; + } + + // Test converting zero + let mut f0: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + unsafe { float_from_int(0, f0.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; + let ret = unsafe { + float_to_int( + f0.as_ptr(), + FLOAT_SIZE as i32, + result.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST + ) + }; + if ret == 8 { + let number = i64::from_le_bytes(result); + if number == 0 { + let _ = trace(" float_to_int(0): good"); + } else { + let _ = trace(" float_to_int(0): failed"); + let _ = trace_num(" got:", number); + all_pass = false; + } + } else { + let _ = trace(" float_to_int(0): failed with error"); + let _ = trace_num(" error code:", ret as i64); + all_pass = false; + } + + // Test rounding with fractional value (0.1) + let mut f01: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + unsafe { float_set(-1, 1, f01.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; + let ret = unsafe { + float_to_int( + f01.as_ptr(), + FLOAT_SIZE as i32, + result.as_mut_ptr(), + 8 as i32, + FLOAT_ROUNDING_MODES_TO_NEAREST + ) + }; + if ret == 8 as i32 { + let number = i64::from_le_bytes(result); + if number == 0 { + let _ = trace(" float_to_int(0.1, to_nearest): good"); + } else { + let _ = trace(" float_to_int(0.1, to_nearest): failed"); + let _ = trace_num(" got:", number); + all_pass = false; + } + } else { + let _ = trace(" float_to_int(0.1, to_nearest): failed with error"); + let _ = trace_num(" error code:", ret as i64); + all_pass = false; + } + + // Test rounding mode 1 (towards_zero) + let ret = unsafe { + float_to_int( + f01.as_ptr(), + FLOAT_SIZE as i32, + result.as_mut_ptr(), + 8 as i32, + 1 + ) + }; + if ret == 8 as i32 { + let number = i64::from_le_bytes(result); + if number == 0 { + let _ = trace(" float_to_int(0.1, towards_zero): good"); + } else { + let _ = trace(" float_to_int(0.1, towards_zero): failed"); + let _ = trace_num(" got:", number); + all_pass = false; + } + } else { + let _ = trace(" float_to_int(0.1, towards_zero): failed with error"); + let _ = trace_num(" error code:", ret as i64); + all_pass = false; + } + + all_pass +} + +fn test_float_to_mantissa_and_exponent() -> bool { + let _ = trace("\n$$$ test_float_to_mantissa_and_exponent $$$"); + let mut all_pass = true; + + // Test with FLOAT_ONE (value 1) + let mut mantissa_bytes: [u8; 8] = [0u8; 8]; + let mut exponent_bytes: [u8; 4] = [0u8; 4]; + let result = unsafe { + float_to_mantissa_and_exponent( + FLOAT_ONE.as_ptr(), + FLOAT_SIZE as i32, + mantissa_bytes.as_mut_ptr(), + 8, + exponent_bytes.as_mut_ptr(), + 4, + ) + }; + + if result == FLOAT_SIZE as i32 { + let mantissa = i64::from_le_bytes(mantissa_bytes); + let exponent = i32::from_le_bytes(exponent_bytes); + if mantissa == 1000000000000000000 && exponent == -18 { + let _ = trace(" float_to_mantissa_and_exponent(1): good"); + } else { + let _ = trace(" float_to_mantissa_and_exponent(1): failed"); + let _ = trace_num(" expected mantissa 1000000000000000000, got:", mantissa); + let _ = trace_num(" expected exponent -18, got:", exponent as i64); + all_pass = false; + } + } else { + let _ = trace(" float_to_mantissa_and_exponent(1): failed with error"); + let _ = trace_num(" error code:", result as i64); + all_pass = false; + } + + // Test with FLOAT_NEGATIVE_ONE (value -1) + let mut mantissa_bytes: [u8; 8] = [0u8; 8]; + let mut exponent_bytes: [u8; 4] = [0u8; 4]; + let result = unsafe { + float_to_mantissa_and_exponent( + FLOAT_NEGATIVE_ONE.as_ptr(), + FLOAT_SIZE as i32, + mantissa_bytes.as_mut_ptr(), + 8, + exponent_bytes.as_mut_ptr(), + 4, + ) + }; + + if result == FLOAT_SIZE as i32 { + let mantissa = i64::from_le_bytes(mantissa_bytes); + let exponent = i32::from_le_bytes(exponent_bytes); + if mantissa == -1000000000000000000 && exponent == -18 { + let _ = trace(" float_to_mantissa_and_exponent(-1): good"); + } else { + let _ = trace(" float_to_mantissa_and_exponent(-1): failed"); + let _ = trace_num(" expected mantissa -1000000000000000000, got:", mantissa); + let _ = trace_num(" expected exponent -18, got:", exponent as i64); + all_pass = false; + } + } else { + let _ = trace(" float_to_mantissa_and_exponent(-1): failed with error"); + let _ = trace_num(" error code:", result as i64); + all_pass = false; + } + + // Test with a float created from int (10) + let mut f10: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + unsafe { float_from_int(10, f10.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; + + let mut mantissa_bytes: [u8; 8] = [0u8; 8]; + let mut exponent_bytes: [u8; 4] = [0u8; 4]; + let result = unsafe { + float_to_mantissa_and_exponent( + f10.as_ptr(), + FLOAT_SIZE as i32, + mantissa_bytes.as_mut_ptr(), + 8, + exponent_bytes.as_mut_ptr(), + 4, + ) + }; + + if result == FLOAT_SIZE as i32 { + let mantissa = i64::from_le_bytes(mantissa_bytes); + let exponent = i32::from_le_bytes(exponent_bytes); + if mantissa == 1000000000000000000 && exponent == -17 { + let _ = trace(" float_to_mantissa_and_exponent(10): good"); + } else { + let _ = trace(" float_to_mantissa_and_exponent(10): failed"); + let _ = trace_num(" expected mantissa 1000000000000000000, got:", mantissa); + let _ = trace_num(" expected exponent -17, got:", exponent as i64); + all_pass = false; + } + } else { + let _ = trace(" float_to_mantissa_and_exponent(10): failed with error"); + let _ = trace_num(" error code:", result as i64); + all_pass = false; + } + + // Test with zero + let mut f0: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + unsafe { float_from_int(0, f0.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; + + let mut mantissa_bytes: [u8; 8] = [0u8; 8]; + let mut exponent_bytes: [u8; 4] = [0u8; 4]; + let result = unsafe { + float_to_mantissa_and_exponent( + f0.as_ptr(), + FLOAT_SIZE as i32, + mantissa_bytes.as_mut_ptr(), + 8, + exponent_bytes.as_mut_ptr(), + 4, + ) + }; + + if result == FLOAT_SIZE as i32 { + let mantissa = i64::from_le_bytes(mantissa_bytes); + let exponent = i32::from_le_bytes(exponent_bytes); + if mantissa == 0 && exponent == -2147483648 { + let _ = trace(" float_to_mantissa_and_exponent(0): good"); + } else { + let _ = trace(" float_to_mantissa_and_exponent(0): failed"); + let _ = trace_num(" expected mantissa 0, got:", mantissa); + let _ = trace_num(" expected exponent -2147483648, got:", exponent as i64); + all_pass = false; + } + } else { + let _ = trace(" float_to_mantissa_and_exponent(0): failed with error"); + let _ = trace_num(" error code:", result as i64); + all_pass = false; + } + + all_pass +} + +fn test_float_negate_host() -> bool { + let _ = trace("\n$$$ test_float_negate $$$"); + let mut all_pass = true; + + // Test with FLOAT_ONE (value 1) -> should become -1 + let mut result: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + let ret = unsafe { + float_negate( + FLOAT_ONE.as_ptr(), + FLOAT_SIZE as i32, + result.as_mut_ptr(), + FLOAT_SIZE as i32, + ) + }; + + if ret == FLOAT_SIZE as i32 { + if result == FLOAT_NEGATIVE_ONE { + let _ = trace(" float_negate(1): good"); + } else { + let _ = trace(" float_negate(1): failed - result mismatch"); + all_pass = false; + } + } else { + let _ = trace(" float_negate(1): failed with error"); + let _ = trace_num(" error code:", ret as i64); + all_pass = false; + } + + // Test with FLOAT_NEGATIVE_ONE (value -1) -> should become 1 + let mut result: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + let ret = unsafe { + float_negate( + FLOAT_NEGATIVE_ONE.as_ptr(), + FLOAT_SIZE as i32, + result.as_mut_ptr(), + FLOAT_SIZE as i32, + ) + }; + + if ret == FLOAT_SIZE as i32 { + if result == FLOAT_ONE { + let _ = trace(" float_negate(-1): good"); + } else { + let _ = trace(" float_negate(-1): failed - result mismatch"); + all_pass = false; + } + } else { + let _ = trace(" float_negate(-1): failed with error"); + let _ = trace_num(" error code:", ret as i64); + all_pass = false; + } + + // Test with zero -> should remain zero + let mut f0: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + unsafe { float_from_int(0, f0.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; + + let mut result: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + let ret = unsafe { + float_negate(f0.as_ptr(), FLOAT_SIZE as i32, result.as_mut_ptr(), FLOAT_SIZE as i32) + }; + + if ret == FLOAT_SIZE as i32 { + if result == f0 { + let _ = trace(" float_negate(0): good"); + } else { + let _ = trace(" float_negate(0): failed - result mismatch"); + all_pass = false; + } + } else { + let _ = trace(" float_negate(0): failed with error"); + let _ = trace_num(" error code:", ret as i64); + all_pass = false; + } + + all_pass +} + +fn test_float_abs_host() -> bool { + let _ = trace("\n$$$ test_float_abs $$$"); + let mut all_pass = true; + + // Test with FLOAT_ONE (value 1) -> should remain 1 + let mut result: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + let ret = unsafe { + float_abs( + FLOAT_ONE.as_ptr(), + FLOAT_SIZE as i32, + result.as_mut_ptr(), + FLOAT_SIZE as i32, + ) + }; + + if ret == FLOAT_SIZE as i32 { + if result == FLOAT_ONE { + let _ = trace(" float_abs(1): good"); + } else { + let _ = trace(" float_abs(1): failed - result mismatch"); + all_pass = false; + } + } else { + let _ = trace(" float_abs(1): failed with error"); + let _ = trace_num(" error code:", ret as i64); + all_pass = false; + } + + // Test with FLOAT_NEGATIVE_ONE (value -1) -> should become 1 + let mut result: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + let ret = unsafe { + float_abs( + FLOAT_NEGATIVE_ONE.as_ptr(), + FLOAT_SIZE as i32, + result.as_mut_ptr(), + FLOAT_SIZE as i32, + ) + }; + + if ret == FLOAT_SIZE as i32 { + if result == FLOAT_ONE { + let _ = trace(" float_abs(-1): good"); + } else { + let _ = trace(" float_abs(-1): failed - result mismatch"); + all_pass = false; + } + } else { + let _ = trace(" float_abs(-1): failed with error"); + let _ = trace_num(" error code:", ret as i64); + all_pass = false; + } + + // Test with zero -> should remain zero + let mut f0: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + unsafe { float_from_int(0, f0.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; + + let mut result: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + let ret = + unsafe { float_abs(f0.as_ptr(), FLOAT_SIZE as i32, result.as_mut_ptr(), FLOAT_SIZE as i32) }; + + if ret == FLOAT_SIZE as i32 { + if result == f0 { + let _ = trace(" float_abs(0): good"); + } else { + let _ = trace(" float_abs(0): failed - result mismatch"); + all_pass = false; + } + } else { + let _ = trace(" float_abs(0): failed with error"); + let _ = trace_num(" error code:", ret as i64); + all_pass = false; + } + + // Test with negative value -> should become positive + let mut f_neg10: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + unsafe { float_from_int(-10, f_neg10.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; + + let mut f_pos10: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + unsafe { float_from_int(10, f_pos10.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; + + let mut result: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + let ret = unsafe { + float_abs( + f_neg10.as_ptr(), + FLOAT_SIZE as i32, + result.as_mut_ptr(), + FLOAT_SIZE as i32, + ) + }; + + if ret == FLOAT_SIZE as i32 { + if result == f_pos10 { + let _ = trace(" float_abs(-10): good"); + } else { + let _ = trace(" float_abs(-10): failed - result mismatch"); + all_pass = false; + } + } else { + let _ = trace(" float_abs(-10): failed with error"); + let _ = trace_num(" error code:", ret as i64); + all_pass = false; + } + + all_pass +} + +fn test_float_from_stamount() -> bool { + let _ = trace("\n$$$ test_float_from_stamount $$$"); + let mut all_pass = true; + + // STAmount is serialized as: + // - 1 byte: type/flags + // - 8 bytes: amount (for XRP) or mantissa (for IOU) + // - For IOU: additional currency and issuer fields + + // Create an XRP amount: 100 XRP = 100,000,000 drops + // XRP format: bit 62 clear (not IOU), bit 63 clear (not negative) + // Amount in drops: 100,000,000 = 0x05F5E100 + let xrp_amount: [u8; 8] = [ + 0x40, 0x00, 0x00, 0x00, 0x05, 0xF5, 0xE1, 0x00 + ]; + + let mut f_result: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + let result_size = unsafe { + float_from_stamount( + xrp_amount.as_ptr(), + 8, + f_result.as_mut_ptr(), + FLOAT_SIZE as i32, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }; + + if result_size == FLOAT_SIZE as i32 { + let _ = trace_float(" float from XRP amount (100 XRP):", &f_result); + + // Convert back to int to verify + let mut int_bytes: [u8; 8] = [0u8; 8]; + let ret = unsafe { + float_to_int( + f_result.as_ptr(), + FLOAT_SIZE as i32, + int_bytes.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST + ) + }; + if ret == 8 { + let int_val = i64::from_le_bytes(int_bytes); + if int_val == 100000000 { + let _ = trace(" XRP amount conversion: good"); + } else { + let _ = trace(" XRP amount conversion: failed"); + let _ = trace_num(" expected 100000000, got:", int_val); + all_pass = false; + } + } else { + let _ = trace(" XRP amount conversion: failed - float_to_int error"); + let _ = trace_num(" error code:", ret as i64); + all_pass = false; + } + } else { + let _ = trace(" float from XRP amount: failed"); + let _ = trace_num(" result_size:", result_size as i64); + all_pass = false; + } + + all_pass +} + +fn test_float_from_stnumber() -> bool { + let _ = trace("\n$$$ test_float_from_stnumber $$$"); + let mut all_pass = true; + + // STNumber is serialized as: + // - 8 bytes: mantissa (big-endian signed int64) + // - 4 bytes: exponent (big-endian signed int32) + + // Create STNumber for value 123 (mantissa=123*10^18, exponent=-18) + // mantissa = 123000000000000000000 = 0x6ADF37F675EF6B28000 + // But we need to fit in int64, so use mantissa=123*10^15, exponent=-15 + // 123*10^15 = 123000000000000000 = 0x01B69B4BA630F34000 + let stnumber_123: [u8; 12] = [ + 0x01, 0xB6, 0x9B, 0x4B, 0xA6, 0x30, 0xF3, 0x40, // mantissa + 0xFF, 0xFF, 0xFF, 0xF1, // exponent = -15 + ]; + + let mut f_result: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; + let result_size = unsafe { + float_from_stnumber( + stnumber_123.as_ptr(), + 12, + f_result.as_mut_ptr(), + FLOAT_SIZE as i32, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }; + + if result_size == FLOAT_SIZE as i32 { + let _ = trace_float(" float from STNumber (123):", &f_result); + + // Convert back to int to verify + let mut int_bytes: [u8; 8] = [0u8; 8]; + let ret = unsafe { + float_to_int( + f_result.as_ptr(), + FLOAT_SIZE as i32, + int_bytes.as_mut_ptr(), + 8, + FLOAT_ROUNDING_MODES_TO_NEAREST + ) + }; + if ret == 8 { + let int_val = i64::from_le_bytes(int_bytes); + if int_val == 123 { + let _ = trace(" STNumber conversion: good"); + } else { + let _ = trace(" STNumber conversion: failed"); + let _ = trace_num(" expected 123, got:", int_val); + all_pass = false; + } + } else { + let _ = trace(" STNumber conversion: failed - float_to_int error"); + let _ = trace_num(" error code:", ret as i64); + all_pass = false; + } + } else { + let _ = trace(" float from STNumber: failed"); + let _ = trace_num(" result_size:", result_size as i64); + all_pass = false; + } + + // Test with FLOAT_ONE constant (which is already in STNumber format) + let result_size = unsafe { + float_from_stnumber( + FLOAT_ONE.as_ptr(), + FLOAT_SIZE as i32, + f_result.as_mut_ptr(), + FLOAT_SIZE as i32, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }; + + if result_size == FLOAT_SIZE as i32 { + let _ = trace_float(" float from STNumber (1):", &f_result); + + // Should match FLOAT_ONE + if 0 == unsafe { float_compare(f_result.as_ptr(), FLOAT_SIZE, FLOAT_ONE.as_ptr(), FLOAT_SIZE) } { + let _ = trace(" STNumber(1) == FLOAT_ONE: good"); + } else { + let _ = trace(" STNumber(1) == FLOAT_ONE: failed"); + all_pass = false; + } + } else { + let _ = trace(" float from STNumber(1): failed"); + all_pass = false; + } + + all_pass } #[unsafe(no_mangle)] pub extern "C" fn finish() -> i32 { - test_float_from_wasm(); - test_float_compare(); - test_float_add_subtract(); - test_float_multiply_divide(); - test_float_pow(); - test_float_root(); - test_float_log(); - test_float_negate(); - test_float_invert(); + let mut all_pass = true; + all_pass &= test_float_from_wasm(); + all_pass &= test_float_compare(); + all_pass &= test_float_add_subtract(); + all_pass &= test_float_multiply_divide(); + all_pass &= test_float_pow(); + all_pass &= test_float_root(); + all_pass &= test_float_log(); + all_pass &= test_float_negate(); + all_pass &= test_float_invert(); + all_pass &= test_float_to_int(); + all_pass &= test_float_to_mantissa_and_exponent(); + all_pass &= test_float_negate_host(); + all_pass &= test_float_abs_host(); + all_pass &= test_float_from_stamount(); + all_pass &= test_float_from_stnumber(); - 1 + if all_pass { 1 } else { 0 } } diff --git a/src/test/basics/Number_test.cpp b/src/test/basics/Number_test.cpp index 0079b540b0..0540c13afd 100644 --- a/src/test/basics/Number_test.cpp +++ b/src/test/basics/Number_test.cpp @@ -1568,13 +1568,15 @@ public: {Number{1'000'000'000'000'000ll}, Number{15}}, {Number{5625, -4}, Number{-2'498'774'732'165'998, -16}}}); - auto const cLarge = std::to_array( - {{Number{false, Number::maxMantissa() - 9, -1, Number::normalized{}}, - Number{false, 1'746'901'684'478'673'451ll, -17, Number::normalized{}}}, - {Number{false, Number::maxMantissa() - 9, 0, Number::normalized{}}, - Number{false, 1'846'901'684'478'673'451ll, -17, Number::normalized{}}}, - {Number{Number::maxRep}, - Number{false, 1'861'728'612'932'620'011ll, -17, Number::normalized{}}}}); + auto const cLarge = std::to_array({ + {Number{Number::maxMantissa() - 9, -1, Number::normalized{}}, + Number{1'799'999'999'999'999'999ll, -17}}, + {Number{Number::maxMantissa() - 9, 0, Number::normalized{}}, + Number{1'899'999'999'999'999'999ll, -17}}, + {Number{Number::maxRep, 0, Number::normalized{}}, + Number{1'896'488'972'683'081'529ll, -17}}, + {Number{999'999'999'999'999'999ll}, Number{1'799'999'999'999'999'999, -17}}, + }); if (Number::getMantissaScale() == MantissaRange::small) { From 8cc21699399fbaf105bf26e7372a76bed8135c26 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Thu, 9 Apr 2026 18:48:58 -0400 Subject: [PATCH 116/137] test: Calling wrap functions from c++ side (#6699) --- include/xrpl/tx/wasm/HostFunc.h | 5 +- include/xrpl/tx/wasm/HostFuncImpl.h | 8 +- include/xrpl/tx/wasm/HostFuncWrapper.h | 6 +- include/xrpl/tx/wasm/ParamsHelper.h | 14 + include/xrpl/tx/wasm/WasmiVM.h | 50 +- src/libxrpl/tx/wasm/HostFuncImplFloat.cpp | 2 +- src/libxrpl/tx/wasm/HostFuncImplGetter.cpp | 1 + src/libxrpl/tx/wasm/HostFuncWrapper.cpp | 175 +- src/libxrpl/tx/wasm/WasmiVM.cpp | 111 +- src/test/app/HostFuncImpl_test.cpp | 5681 ++++++++++++++++---- src/test/app/TestHostFunctions.h | 12 +- 11 files changed, 4866 insertions(+), 1199 deletions(-) diff --git a/include/xrpl/tx/wasm/HostFunc.h b/include/xrpl/tx/wasm/HostFunc.h index d08ca6c1b0..1276284c15 100644 --- a/include/xrpl/tx/wasm/HostFunc.h +++ b/include/xrpl/tx/wasm/HostFunc.h @@ -103,6 +103,7 @@ floatLogImpl(Slice const& x, int32_t mode); } // namespace wasm_float +// Intended to work only through wasm runtime. Don't call them directly, except with unit tests struct HostFunctions { beast::Journal j_; @@ -113,11 +114,11 @@ struct HostFunctions // LCOV_EXCL_START virtual void - setRT(void const*) + setRT(void*) { } - virtual void const* + virtual void* getRT() const { return nullptr; diff --git a/include/xrpl/tx/wasm/HostFuncImpl.h b/include/xrpl/tx/wasm/HostFuncImpl.h index dac5138416..30ae1720a9 100644 --- a/include/xrpl/tx/wasm/HostFuncImpl.h +++ b/include/xrpl/tx/wasm/HostFuncImpl.h @@ -4,6 +4,8 @@ #include namespace xrpl { + +// Intended to work only through wasm runtime. Don't call them directly, except with unit tests class WasmHostFunctionsImpl : public HostFunctions { ApplyContext& ctx_; @@ -16,7 +18,7 @@ class WasmHostFunctionsImpl : public HostFunctions std::optional data_; - void const* rt_ = nullptr; + void* rt_ = nullptr; Expected, HostFunctionError> getCurrentLedgerObj() const @@ -64,12 +66,12 @@ public: } virtual void - setRT(void const* rt) override + setRT(void* rt) override { rt_ = rt; } - virtual void const* + virtual void* getRT() const override { return rt_; diff --git a/include/xrpl/tx/wasm/HostFuncWrapper.h b/include/xrpl/tx/wasm/HostFuncWrapper.h index c86b9673c7..ccc4b59173 100644 --- a/include/xrpl/tx/wasm/HostFuncWrapper.h +++ b/include/xrpl/tx/wasm/HostFuncWrapper.h @@ -1,6 +1,10 @@ #pragma once -#include +#include + +#include + +#include namespace xrpl { diff --git a/include/xrpl/tx/wasm/ParamsHelper.h b/include/xrpl/tx/wasm/ParamsHelper.h index 5490411226..82863e730a 100644 --- a/include/xrpl/tx/wasm/ParamsHelper.h +++ b/include/xrpl/tx/wasm/ParamsHelper.h @@ -32,6 +32,20 @@ struct WasmResult }; typedef WasmResult EscrowResult; +struct WasmRuntimeWrapper +{ + virtual ~WasmRuntimeWrapper() = default; + + virtual wmem + getMem() = 0; + + virtual std::int64_t + getGas() = 0; + + virtual std::int64_t + setGas(std::int64_t gas) = 0; +}; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// enum WasmTypes { WT_I32, WT_I64, WT_U8V }; diff --git a/include/xrpl/tx/wasm/WasmiVM.h b/include/xrpl/tx/wasm/WasmiVM.h index daa139cad6..e74cbb62c3 100644 --- a/include/xrpl/tx/wasm/WasmiVM.h +++ b/include/xrpl/tx/wasm/WasmiVM.h @@ -8,10 +8,12 @@ namespace xrpl { template -struct WasmVec +class WasmVec { + using TD = std::remove_pointer_t; T vec_; +public: WasmVec(size_t s = 0) : vec_ WASM_EMPTY_VEC { if (s > 0) @@ -58,6 +60,46 @@ struct WasmVec vec_ = WASM_EMPTY_VEC; return result; } + + T* + get() + { + return &vec_; + } + + T const* + get() const + { + return &vec_; + } + + TD& + operator[](size_t i) + { + if (i >= vec_.size) + Throw("Out of bound"); + return vec_.data[i]; + } + + TD const& + operator[](size_t i) const + { + if (i >= vec_.size) + Throw("Out of bound"); + return vec_.data[i]; + } + + size_t + size() const + { + return vec_.size; + } + + bool + empty() const + { + return vec_.size == 0u; + } }; using WasmValtypeVec = @@ -175,8 +217,8 @@ public: wmem getMem() const; - InstanceWrapper const& - getInstance(int i = 0) const; + InstanceWrapper& + getInstance(int i = 0); int addInstance(StorePtr& s, WasmExternVec const& imports); @@ -234,7 +276,7 @@ public: getJournal() const; private: - InstanceWrapper const& + InstanceWrapper& getRT(int m = 0, int i = 0) const; wmem diff --git a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp index 234bfec443..5ed9913412 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp @@ -96,7 +96,7 @@ public: std::cout << std::setw(2) << (unsigned)c << " "; std::cout << std::dec << std::setfill(' ') << std::endl; #endif - return data; + return Expected(std::move(data)); } }; diff --git a/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp index a83217b507..7b175845ce 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp @@ -107,6 +107,7 @@ getAnyFieldData(FieldValue const& variantObj) { return getAnyFieldData(*obj); } + if (uint256 const* const* u = std::get_if(&variantObj)) { return Bytes((*u)->begin(), (*u)->end()); diff --git a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp index bbad5e1e1a..246b9ab4a3 100644 --- a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp +++ b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp @@ -8,6 +8,7 @@ #include #include #include +#include namespace xrpl { @@ -15,7 +16,7 @@ using SFieldCRef = std::reference_wrapper; static int32_t setData( - InstanceWrapper const* runtime, + WasmRuntimeWrapper* runtime, int32_t dst, int32_t dstSize, uint8_t const* src, @@ -48,7 +49,7 @@ setData( template static Expected -getDataInt32(IW const* _runtime, wasm_val_vec_t const* params, int32_t& i) +getDataInt32(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) { auto const result = params->data[i].of.i32; i++; @@ -57,7 +58,7 @@ getDataInt32(IW const* _runtime, wasm_val_vec_t const* params, int32_t& i) template static Expected -getDataInt64(IW const* _runtime, wasm_val_vec_t const* params, int32_t& i) +getDataInt64(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) { auto const result = params->data[i].of.i64; i++; @@ -66,7 +67,7 @@ getDataInt64(IW const* _runtime, wasm_val_vec_t const* params, int32_t& i) template static Expected -getDataUnsigned(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataUnsigned(IW* runtime, wasm_val_vec_t const* params, int32_t& i) { static_assert(std::is_unsigned_v); auto const r = getDataSlice(runtime, params, i); @@ -92,21 +93,21 @@ getDataUnsigned(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) template static Expected -getDataUInt32(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataUInt32(IW* runtime, wasm_val_vec_t const* params, int32_t& i) { return getDataUnsigned(runtime, params, i); } template static Expected -getDataUInt64(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataUInt64(IW* runtime, wasm_val_vec_t const* params, int32_t& i) { return getDataUnsigned(runtime, params, i); } template static Expected -getDataSField(IW const* _runtime, wasm_val_vec_t const* params, int32_t& i) +getDataSField(IW* runtime, wasm_val_vec_t const* params, int32_t& i) { auto const& m = SField::getKnownCodeToField(); auto const it = m.find(params->data[i].of.i32); @@ -120,7 +121,7 @@ getDataSField(IW const* _runtime, wasm_val_vec_t const* params, int32_t& i) template static Expected -getDataSlice(IW const* runtime, wasm_val_vec_t const* params, int32_t& i, bool isUpdate = false) +getDataSlice(IW* runtime, wasm_val_vec_t const* params, int32_t& i, bool isUpdate = false) { int64_t const ptr = params->data[i].of.i32; int64_t const size = params->data[i + 1].of.i32; @@ -149,7 +150,7 @@ getDataSlice(IW const* runtime, wasm_val_vec_t const* params, int32_t& i, bool i template static Expected -getDataUInt256(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataUInt256(IW* runtime, wasm_val_vec_t const* params, int32_t& i) { auto const slice = getDataSlice(runtime, params, i); if (!slice) @@ -166,7 +167,7 @@ getDataUInt256(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) template static Expected -getDataAccountID(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataAccountID(IW* runtime, wasm_val_vec_t const* params, int32_t& i) { auto const slice = getDataSlice(runtime, params, i); if (!slice) @@ -184,7 +185,7 @@ getDataAccountID(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) template static Expected -getDataCurrency(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataCurrency(IW* runtime, wasm_val_vec_t const* params, int32_t& i) { auto const slice = getDataSlice(runtime, params, i); if (!slice) @@ -202,7 +203,7 @@ getDataCurrency(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) template static Expected -getDataAsset(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataAsset(IW* runtime, wasm_val_vec_t const* params, int32_t& i) { auto const slice = getDataSlice(runtime, params, i); if (!slice) @@ -241,7 +242,7 @@ getDataAsset(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) template static Expected -getDataString(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataString(IW* runtime, wasm_val_vec_t const* params, int32_t& i) { auto const slice = getDataSlice(runtime, params, i); if (!slice) @@ -268,7 +269,7 @@ hfResult(wasm_val_vec_t* results, HostFunctionError value) template static std::nullptr_t returnResult( - InstanceWrapper const* runtime, + WasmRuntimeWrapper* runtime, wasm_val_vec_t const* params, wasm_val_vec_t* results, Expected const& res, @@ -390,7 +391,7 @@ checkGas(void* env) auto const* udata = reinterpret_cast(env); HostFunctions const* hf = reinterpret_cast(udata->first); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); if (runtime == nullptr) { wasm_trap_t* trap = reinterpret_cast( // NOLINT @@ -426,7 +427,7 @@ getLedgerSqn_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int const index = 0; return returnResult(runtime, params, results, hf->getLedgerSqn(), index); @@ -438,7 +439,7 @@ getParentLedgerTime_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int const index = 0; return returnResult(runtime, params, results, hf->getParentLedgerTime(), index); @@ -450,7 +451,7 @@ getParentLedgerHash_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int const index = 0; return returnResult(runtime, params, results, hf->getParentLedgerHash(), index); @@ -462,7 +463,7 @@ getBaseFee_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int const index = 0; return returnResult(runtime, params, results, hf->getBaseFee(), index); @@ -474,7 +475,7 @@ isAmendmentEnabled_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const slice = getDataSlice(runtime, params, index); @@ -506,7 +507,7 @@ cacheLedgerObj_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* res if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const id = getDataUInt256(runtime, params, index); @@ -530,7 +531,7 @@ getTxField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const fname = getDataSField(runtime, params, index); @@ -547,7 +548,7 @@ getCurrentLedgerObjField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_ if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const fname = getDataSField(runtime, params, index); @@ -565,7 +566,7 @@ getLedgerObjField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const cache = getDataInt32(runtime, params, index); @@ -589,7 +590,7 @@ getTxNestedField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* r if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const bytes = getDataSlice(runtime, params, index); @@ -610,7 +611,7 @@ getCurrentLedgerObjNestedField_wrap( if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const bytes = getDataSlice(runtime, params, index); @@ -628,7 +629,7 @@ getLedgerObjNestedField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_v if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const cache = getDataInt32(runtime, params, index); @@ -653,7 +654,7 @@ getTxArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const fname = getDataSField(runtime, params, index); @@ -671,7 +672,7 @@ getCurrentLedgerObjArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_v if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const fname = getDataSField(runtime, params, index); @@ -689,7 +690,7 @@ getLedgerObjArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_ if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const cache = getDataInt32(runtime, params, index); @@ -713,7 +714,7 @@ getTxNestedArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const bytes = getDataSlice(runtime, params, index); @@ -734,7 +735,7 @@ getCurrentLedgerObjNestedArrayLen_wrap( if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const bytes = getDataSlice(runtime, params, index); @@ -752,7 +753,7 @@ getLedgerObjNestedArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_va if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const cache = getDataInt32(runtime, params, index); @@ -776,7 +777,7 @@ updateData_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const bytes = getDataSlice(runtime, params, index, true); @@ -794,7 +795,7 @@ checkSignature_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* res if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const message = getDataSlice(runtime, params, index); @@ -825,7 +826,7 @@ computeSha512HalfHash_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const bytes = getDataSlice(runtime, params, index); @@ -842,7 +843,7 @@ accountKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const acc = getDataAccountID(runtime, params, index); @@ -860,7 +861,7 @@ ammKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const issue1 = getDataAsset(runtime, params, index); @@ -885,7 +886,7 @@ checkKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const acc = getDataAccountID(runtime, params, index); @@ -909,7 +910,7 @@ credentialKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* r if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const subj = getDataAccountID(runtime, params, index); @@ -940,7 +941,7 @@ delegateKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* res if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const acc = getDataAccountID(runtime, params, index); @@ -965,7 +966,7 @@ depositPreauthKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_ if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const acc = getDataAccountID(runtime, params, index); @@ -990,7 +991,7 @@ didKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const acc = getDataAccountID(runtime, params, index); @@ -1008,7 +1009,7 @@ escrowKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const acc = getDataAccountID(runtime, params, index); @@ -1032,7 +1033,7 @@ lineKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const acc1 = getDataAccountID(runtime, params, index); @@ -1067,7 +1068,7 @@ mptIssuanceKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const acc = getDataAccountID(runtime, params, index); @@ -1092,7 +1093,7 @@ mptokenKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const slice = getDataSlice(runtime, params, index); @@ -1122,7 +1123,7 @@ nftOfferKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* res if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const acc = getDataAccountID(runtime, params, index); @@ -1147,7 +1148,7 @@ offerKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const acc = getDataAccountID(runtime, params, index); @@ -1171,7 +1172,7 @@ oracleKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const acc = getDataAccountID(runtime, params, index); @@ -1194,7 +1195,7 @@ paychanKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const acc = getDataAccountID(runtime, params, index); @@ -1225,7 +1226,7 @@ permissionedDomainKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_ if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const acc = getDataAccountID(runtime, params, index); @@ -1250,7 +1251,7 @@ signersKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const acc = getDataAccountID(runtime, params, index); @@ -1268,7 +1269,7 @@ ticketKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const acc = getDataAccountID(runtime, params, index); @@ -1293,7 +1294,7 @@ vaultKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const acc = getDataAccountID(runtime, params, index); @@ -1317,7 +1318,7 @@ getNFT_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const acc = getDataAccountID(runtime, params, index); @@ -1341,7 +1342,7 @@ getNFTIssuer_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const nftId = getDataUInt256(runtime, params, index); @@ -1359,7 +1360,7 @@ getNFTTaxon_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const nftId = getDataUInt256(runtime, params, index); @@ -1377,7 +1378,7 @@ getNFTFlags_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const nftId = getDataUInt256(runtime, params, index); @@ -1395,7 +1396,7 @@ getNFTTransferFee_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const nftId = getDataUInt256(runtime, params, index); @@ -1413,7 +1414,7 @@ getNFTSerial_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; auto const nftId = getDataUInt256(runtime, params, index); @@ -1431,7 +1432,7 @@ trace_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; if (params->data[1].of.i32 + params->data[3].of.i32 > maxWasmParamLength) @@ -1470,7 +1471,7 @@ traceNum_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; if (params->data[1].of.i32 > maxWasmParamLength) { @@ -1498,7 +1499,7 @@ traceAccount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); if (params->data[1].of.i32 > maxWasmParamLength) return hfResult(results, HostFunctionError::DATA_FIELD_TOO_LARGE); @@ -1521,7 +1522,7 @@ traceFloat_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); if (params->data[1].of.i32 > maxWasmParamLength) return hfResult(results, HostFunctionError::DATA_FIELD_TOO_LARGE); @@ -1544,7 +1545,7 @@ traceAmount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); if (params->data[1].of.i32 > maxWasmParamLength) return hfResult(results, HostFunctionError::DATA_FIELD_TOO_LARGE); @@ -1582,7 +1583,7 @@ floatFromInt_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int i = 0; auto const x = getDataInt64(runtime, params, i); @@ -1604,7 +1605,7 @@ floatFromUint_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int i = 0; auto const x = getDataUInt64(runtime, params, i); @@ -1626,7 +1627,7 @@ floatFromSTAmount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int i = 0; auto const x = getDataSlice(runtime, params, i); @@ -1661,7 +1662,7 @@ floatFromSTNumber_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int i = 0; auto const x = getDataSlice(runtime, params, i); @@ -1696,7 +1697,7 @@ floatToInt_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int i = 0; auto const x = getDataSlice(runtime, params, i); @@ -1718,7 +1719,7 @@ floatToMantissaAndExponent_wrap(void* env, wasm_val_vec_t const* params, wasm_va if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int i = 0; auto const x = getDataSlice(runtime, params, i); @@ -1735,7 +1736,7 @@ floatNegate_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int i = 0; auto const x = getDataSlice(runtime, params, i); @@ -1752,7 +1753,7 @@ floatAbs_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int i = 0; auto const x = getDataSlice(runtime, params, i); @@ -1769,7 +1770,7 @@ floatSet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int i = 0; auto const exp = getDataInt32(runtime, params, i); @@ -1795,7 +1796,7 @@ floatCompare_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int i = 0; auto const x = getDataSlice(runtime, params, i); @@ -1815,7 +1816,7 @@ floatAdd_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int i = 0; auto const x = getDataSlice(runtime, params, i); @@ -1841,7 +1842,7 @@ floatSubtract_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int i = 0; auto const x = getDataSlice(runtime, params, i); @@ -1867,7 +1868,7 @@ floatMultiply_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int i = 0; auto const x = getDataSlice(runtime, params, i); @@ -1893,7 +1894,7 @@ floatDivide_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int i = 0; auto const x = getDataSlice(runtime, params, i); @@ -1919,7 +1920,7 @@ floatRoot_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int i = 0; auto const x = getDataSlice(runtime, params, i); @@ -1945,7 +1946,7 @@ floatPower_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int i = 0; auto const x = getDataSlice(runtime, params, i); @@ -1971,7 +1972,7 @@ floatLog_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto const* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = reinterpret_cast(hf->getRT()); int i = 0; auto const x = getDataSlice(runtime, params, i); @@ -1990,16 +1991,16 @@ floatLog_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) // LCOV_EXCL_START namespace test { -class MockInstanceWrapper +class MockWasmRuntimeWrapper { wmem mem_; public: - MockInstanceWrapper(wmem memory) : mem_(memory) + MockWasmRuntimeWrapper(wmem memory) : mem_(memory) { } - // Mock methods to simulate the behavior of InstanceWrapper + // Mock methods to simulate the behavior of WasmRuntimeWrapper wmem getMem() const { @@ -2013,7 +2014,7 @@ testGetDataIncrement() wasm_val_t values[4]; std::array buffer = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'}; - MockInstanceWrapper const runtime(wmem{buffer.data(), buffer.size()}); + MockWasmRuntimeWrapper runtime(wmem{buffer.data(), buffer.size()}); { // test int32_t diff --git a/src/libxrpl/tx/wasm/WasmiVM.cpp b/src/libxrpl/tx/wasm/WasmiVM.cpp index e624d1540d..adc0953a38 100644 --- a/src/libxrpl/tx/wasm/WasmiVM.cpp +++ b/src/libxrpl/tx/wasm/WasmiVM.cpp @@ -52,6 +52,33 @@ print_wasm_error(std::string_view msg, wasm_trap_t* trap, beast::Journal jlog) } // namespace +struct WasmiRuntimeWrapper : public WasmRuntimeWrapper +{ + InstanceWrapper& iw_; + + WasmiRuntimeWrapper(InstanceWrapper& iw) : iw_(iw) + { + } + + virtual wmem + getMem() override + { + return iw_.getMem(); + } + + virtual std::int64_t + getGas() override + { + return iw_.getGas(); + } + + virtual std::int64_t + setGas(std::int64_t gas) override + { + return iw_.setGas(gas); + } +}; + InstancePtr InstanceWrapper::init( StorePtr& s, @@ -62,14 +89,14 @@ InstanceWrapper::init( { wasm_trap_t* trap = nullptr; InstancePtr mi = InstancePtr( - wasm_instance_new(s.get(), m.get(), &imports.vec_, &trap), &wasm_instance_delete); + wasm_instance_new(s.get(), m.get(), imports.get(), &trap), &wasm_instance_delete); if (!mi || (trap != nullptr)) { print_wasm_error("can't create instance", trap, j); throw std::runtime_error("can't create instance"); } - wasm_instance_exports(mi.get(), &expt.vec_); + wasm_instance_exports(mi.get(), expt.get()); return mi; } @@ -126,14 +153,14 @@ InstanceWrapper::getFunc(std::string_view funcName, WasmExporttypeVec const& exp if (!instance_) throw std::runtime_error("no instance"); // LCOV_EXCL_LINE - if (exportTypes.vec_.size == 0u) + if (exportTypes.empty()) throw std::runtime_error("no export"); // LCOV_EXCL_LINE - if (exportTypes.vec_.size != exports_.vec_.size) + if (exportTypes.size() != exports_.size()) throw std::runtime_error("invalid export"); // LCOV_EXCL_LINE - for (unsigned i = 0; i < exportTypes.vec_.size; ++i) + for (unsigned i = 0; i < exportTypes.size(); ++i) { - auto const* expType(exportTypes.vec_.data[i]); + auto const* expType(exportTypes[i]); wasm_name_t const* name = wasm_exporttype_name(expType); wasm_externtype_t const* exnType = wasm_exporttype_type(expType); @@ -142,7 +169,7 @@ InstanceWrapper::getFunc(std::string_view funcName, WasmExporttypeVec const& exp if (funcName != std::string_view(name->data, name->size)) continue; - auto const* exn(exports_.vec_.data[i]); + auto const* exn(exports_[i]); if (wasm_extern_kind(exn) != WASM_EXTERN_FUNC) throw std::runtime_error("invalid export"); // LCOV_EXCL_LINE @@ -163,15 +190,15 @@ InstanceWrapper::getMem() const { if (memIdx_ >= 0) { - auto* e(exports_.vec_.data[memIdx_]); + auto* e(exports_[memIdx_]); wasm_memory_t* mem = wasm_extern_as_memory(e); return {reinterpret_cast(wasm_memory_data(mem)), wasm_memory_data_size(mem)}; } wasm_memory_t* mem = nullptr; - for (int i = 0; i < exports_.vec_.size; ++i) + for (int i = 0; i < exports_.size(); ++i) { - auto* e(exports_.vec_.data[i]); + auto* e(exports_[i]); if (wasm_extern_kind(e) == WASM_EXTERN_MEMORY) { memIdx_ = i; @@ -249,7 +276,7 @@ ModuleWrapper::ModuleWrapper( beast::Journal j) : module_(init(s, wasmBin, j)), j_(j) { - wasm_module_exports(module_.get(), &exportTypes_.vec_); + wasm_module_exports(module_.get(), exportTypes_.get()); auto wimports = buildImports(s, imports); if (instantiate) { @@ -295,10 +322,10 @@ makeImpParams(WasmImportFunc const& imp) switch (vt) { case WT_I32: - v.vec_.data[i] = wasm_valtype_new_i32(); + v[i] = wasm_valtype_new_i32(); break; case WT_I64: - v.vec_.data[i] = wasm_valtype_new_i64(); + v[i] = wasm_valtype_new_i64(); break; // LCOV_EXCL_START default: @@ -319,11 +346,11 @@ makeImpReturn(WasmImportFunc const& imp) switch (*imp.result) { case WT_I32: - v.vec_.data[0] = wasm_valtype_new_i32(); + v[0] = wasm_valtype_new_i32(); break; // LCOV_EXCL_START case WT_I64: - v.vec_.data[0] = wasm_valtype_new_i64(); + v[0] = wasm_valtype_new_i64(); break; default: throw std::runtime_error("invalid return type"); @@ -336,19 +363,19 @@ WasmExternVec ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) const { WasmImporttypeVec importTypes; - wasm_module_imports(module_.get(), &importTypes.vec_); + wasm_module_imports(module_.get(), importTypes.get()); - if (importTypes.vec_.size == 0u) + if (importTypes.empty()) return {}; if (imports.empty()) throw std::runtime_error("Missing imports"); - WasmExternVec wimports(importTypes.vec_.size); + WasmExternVec wimports(importTypes.size()); unsigned impCnt = 0; - for (unsigned i = 0; i < importTypes.vec_.size; ++i) + for (unsigned i = 0; i < importTypes.size(); ++i) { - wasm_importtype_t const* importType = importTypes.vec_.data[i]; + wasm_importtype_t const* importType = importTypes[i]; // wasm_name_t const* mn = wasm_importtype_module(importtype); // auto modName = std::string_view(mn->data, mn->num_elems); @@ -377,7 +404,7 @@ ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) const WasmValtypeVec results(makeImpReturn(imp)); std::unique_ptr const ftype( - wasm_functype_new(¶ms.vec_, &results.vec_), &wasm_functype_delete); + wasm_functype_new(params.get(), results.get()), &wasm_functype_delete); params.release(); results.release(); @@ -395,7 +422,7 @@ ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) const // LCOV_EXCL_STOP } - wimports.vec_.data[i] = wasm_func_as_extern(func); + wimports[i] = wasm_func_as_extern(func); ++impCnt; impSet = true; @@ -408,11 +435,11 @@ ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) const } } - if (impCnt != importTypes.vec_.size) + if (impCnt != importTypes.size()) { print_wasm_error( std::string("Imports not finished: ") + std::to_string(impCnt) + "/" + - std::to_string(importTypes.vec_.size), + std::to_string(importTypes.size()), nullptr, j_); throw std::runtime_error("Missing imports"); @@ -430,9 +457,9 @@ ModuleWrapper::getFunc(std::string_view funcName) const wasm_functype_t* ModuleWrapper::getFuncType(std::string_view funcName) const { - for (size_t i = 0; i < exportTypes_.vec_.size; i++) + for (size_t i = 0; i < exportTypes_.size(); i++) { - auto const* exp_type(exportTypes_.vec_.data[i]); + auto const* exp_type(exportTypes_[i]); wasm_name_t const* name = wasm_exporttype_name(exp_type); wasm_externtype_t const* exn_type = wasm_exporttype_type(exp_type); if (wasm_externtype_kind(exn_type) == WASM_EXTERN_FUNC && @@ -451,8 +478,8 @@ ModuleWrapper::getMem() const return instanceWrap_.getMem(); } -InstanceWrapper const& -ModuleWrapper::getInstance(int) const +InstanceWrapper& +ModuleWrapper::getInstance(int) { return instanceWrap_; } @@ -661,11 +688,7 @@ template WasmiResult WasmiEngine::call(FuncInfo const& f, std::vector& in) { - // wasm_val_t rs[1] = {WASM_I32_VAL(0)}; WasmiResult ret(NR); - // if (NR) { wasm_val_vec_new_uninitialized(&ret, NR); // - // wasm_val_vec_new(&ret, NR, &rs[0]); // ret = WASM_ARRAY_VEC(rs); } - wasm_val_vec_t const inv = in.empty() ? wasm_val_vec_t WASM_EMPTY_VEC : wasm_val_vec_t{in.size(), in.data()}; @@ -673,7 +696,7 @@ WasmiEngine::call(FuncInfo const& f, std::vector& in) auto const start = usecs(); #endif - wasm_trap_t* trap = wasm_func_call(f.first, &inv, &ret.r.vec_); + wasm_trap_t* trap = wasm_func_call(f.first, &inv, ret.r.get()); #ifdef SHOW_CALL_TIME auto const finish = usecs(); @@ -687,9 +710,6 @@ WasmiEngine::call(FuncInfo const& f, std::vector& in) print_wasm_error("failure to call func", trap, j_); } - // assert(results[0].kind == WASM_I32); - // if (NR) printf("Result P5: %d\n", ret[0].of.i32); - return ret; } @@ -782,7 +802,10 @@ WasmiEngine::runHlp( if (!moduleWrap_ || !moduleWrap_->instanceWrap_) throw std::runtime_error("no instance"); // LCOV_EXCL_LINE - hfs.setRT(&getRT()); + auto clear = [](HostFunctions* p) { p->setRT(nullptr); }; + std::unique_ptr const clearGuard(&hfs, clear); + WasmiRuntimeWrapper iw(getRT()); + hfs.setRT(&iw); // Call main auto const f = getFunc(!funcName.empty() ? funcName : "_start"); @@ -801,21 +824,23 @@ WasmiEngine::runHlp( { throw std::runtime_error("<" + std::string(funcName) + "> failure"); } - if (res.r.vec_.size == 0u) + + if (res.r.empty()) { throw std::runtime_error( "<" + std::string(funcName) + "> return nothing"); // LCOV_EXCL_LINE } - if (res.r.vec_.data[0].kind != WASM_I32) + + if (res.r[0].kind != WASM_I32) { throw std::runtime_error( - "<" + std::string(funcName) + "> return type mismatch, ret: " + - std::to_string(static_cast(res.r.vec_.data[0].kind))); + "<" + std::string(funcName) + + "> return type mismatch, ret: " + std::to_string(static_cast(res.r[0].kind))); } if (gas == -1) gas = std::numeric_limits::max(); - WasmResult const ret{res.r.vec_.data[0].of.i32, gas - moduleWrap_->getGas()}; + WasmResult const ret{res.r[0].of.i32, gas - moduleWrap_->getGas()}; // #ifdef DEBUG_OUTPUT // auto& j = std::cerr; @@ -901,7 +926,7 @@ WasmiEngine::getMem() const return moduleWrap_ ? moduleWrap_->getMem() : wmem(); } -InstanceWrapper const& +InstanceWrapper& WasmiEngine::getRT(int m, int i) const { if (!moduleWrap_) diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index e61c38f771..95cdacd5d1 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -2,6 +2,8 @@ #include #include +#include +#include namespace xrpl { namespace test { @@ -34,19 +36,22 @@ toBytes(uint256 const& value) return Bytes{value.begin(), value.end()}; } +static Bytes +toBytes(Issue const& issue) +{ + Serializer s; + s.addBitString(issue.currency); + if (!isXRP(issue.currency)) + s.addBitString(issue.account); + auto const data = s.getData(); + return data; +} + static Bytes toBytes(Asset const& asset) { if (asset.holds()) - { - Serializer s; - auto const& issue = asset.get(); - s.addBitString(issue.currency); - if (!isXRP(issue.currency)) - s.addBitString(issue.account); - auto const data = s.getData(); - return data; - } + return toBytes(asset.get()); auto const& mptIssue = asset.get(); auto const& mptID = mptIssue.getMptID(); @@ -63,6 +68,16 @@ toBytes(STAmount const& amount) return data; } +static Bytes +toBytes(STNumber const& number) +{ + Serializer msg; + number.add(msg); + auto const data = msg.getData(); + + return data; +} + static ApplyContext createApplyContext( test::jtx::Env& env, @@ -83,6 +98,175 @@ createApplyContext( return createApplyContext(env, ov, env.journal, tx); } +class VirtualRuntime : public WasmRuntimeWrapper +{ + Bytes buffer_; + std::int64_t gas_ = 1'000'000; + +public: + VirtualRuntime() : buffer_(1024 * 1024) + { + } + + wmem + getMem() override + { + return {buffer_.data(), buffer_.size()}; + } + + std::int64_t + getGas() override + { + gas_ -= 100; + return gas_; + } + + std::int64_t + setGas(std::int64_t gas) override + { + if (gas == -2) + return -1; + + if (gas < 0) + { + gas_ = std::numeric_limits::max(); + } + else + { + gas_ = gas; + } + + return gas_; + } + + void + checkIdx(WasmValVec const& params, size_t i) const + { + if (i + 1 >= params.size()) + Throw("Out of bounds"); + if (params[i].kind != WASM_I32 || params[i + 1].kind != WASM_I32) + Throw("Invalid params"); + std::int32_t const ptr = params[i].of.i32; + std::int32_t const size = params[i + 1].of.i32; + std::int64_t const offset = (std::int64_t)ptr + size; + if (ptr < 0 || size < 0 || std::cmp_greater_equal(offset, buffer_.size())) + Throw("Out of bounds"); + } + + Slice + getBuffer(WasmValVec const& params, size_t i) const + { + checkIdx(params, i); + std::int32_t const ptr = params[i].of.i32; + std::int32_t const size = params[i + 1].of.i32; + return {&buffer_[ptr], static_cast(size)}; + } + + Bytes + getBytes(WasmValVec const& params, size_t i) const + { + checkIdx(params, i); + std::int32_t const ptr = params[i].of.i32; + std::int32_t const size = params[i + 1].of.i32; + return {&buffer_[ptr], &buffer_[ptr + size]}; + } + + void + setBytes(size_t ptr, void const* bytes, size_t size) + { + if (ptr + size >= buffer_.size()) + Throw("Out of bounds"); + memcpy(&buffer_[ptr], bytes, size); + } + + template + T + getInt(WasmValVec const& params, size_t i) const + { + checkIdx(params, i); + std::int32_t const ptr = params[i].of.i32; + std::int32_t const size = params[i + 1].of.i32; + if (size != sizeof(T)) + Throw("Invalid size"); + return *reinterpret_cast(&buffer_[ptr]); + } + + std::int32_t + getInt32(WasmValVec const& params, size_t i) const + { + return getInt(params, i); + } + + std::uint32_t + getUint32(WasmValVec const& params, size_t i) const + { + return getInt(params, i); + } + + std::int64_t + getInt64(WasmValVec const& params, size_t i) const + { + return getInt(params, i); + } + + std::uint64_t + getUint64(WasmValVec const& params, size_t i) const + { + return getInt(params, i); + } +}; + +template +void +ww_hlp(size_t& idx, E&& e, P&& params, Arg&& arg) +{ + if constexpr (std::is_integral_v) + { + params[idx++] = std::is_same_v || std::is_same_v + ? wasm_val_t WASM_I64_VAL(static_cast(arg)) + : wasm_val_t WASM_I32_VAL(static_cast(arg)); + } + else if constexpr (std::is_same_v) + { + auto const* udata = reinterpret_cast(e); + HostFunctions const* hf = reinterpret_cast(udata->first); + auto* vrt = reinterpret_cast(hf->getRT()); + + auto const data = toBytes(std::forward(arg)); + + size_t const ptr = (idx << 10); + vrt->setBytes(ptr, data.data(), data.size()); + params[idx++] = wasm_val_t WASM_I32_VAL(static_cast(ptr)); + params[idx++] = wasm_val_t WASM_I32_VAL(static_cast(data.size())); + } + else + { + auto const* udata = reinterpret_cast(e); + HostFunctions const* hf = reinterpret_cast(udata->first); + auto* vrt = reinterpret_cast(hf->getRT()); + + size_t const ptr = (idx << 10); + vrt->setBytes(ptr, arg.data(), arg.size()); + params[idx++] = wasm_val_t WASM_I32_VAL(static_cast(ptr)); + params[idx++] = wasm_val_t WASM_I32_VAL(static_cast(arg.size())); + } +} + +// Helper wrapper to call WASM wrapper functions with automatic parameter packing +template +wasm_trap_t* +ww(F&& f, E&& e, P&& params, P&& result, Args... args) +{ + size_t idx = 0; + (ww_hlp(idx, std::forward(e), std::forward

(params), std::forward(args)), + ...); // NOLINT + return f(std::forward(e), params.get(), result.get()); // NOLINT +} + +constexpr int64_t min64 = std::numeric_limits::min(); +constexpr int64_t max64 = std::numeric_limits::max(); +constexpr int32_t FLOAT_SIZE = 12; + struct HostFuncImpl_test : public beast::unit_test::suite { void @@ -95,11 +279,22 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); - auto const result = hfs.getLedgerSqn(); - if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT(result.value() == env.current()->header().seq); + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); + + { + // hfs.getLedgerSqn(); + WasmValVec params(2), result(1); + auto* trap = + ww(getLedgerSqn_wrap, &import[0], params, result, 0, sizeof(std::uint32_t)); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == sizeof(std::uint32_t)) && + BEAST_EXPECT(vrt.getUint32(params, 0) == env.current()->header().seq); + } } void @@ -109,18 +304,26 @@ struct HostFuncImpl_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); { - OpenView ov{*env.current()}; - ApplyContext ac = createApplyContext(env, ov); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); - auto const result = hfs.getParentLedgerTime(); - if (BEAST_EXPECT(result.has_value())) - { + // hfs.getParentLedgerTime(); + WasmValVec params(2), result(1); + auto* trap = + ww(getParentLedgerTime_wrap, &import[1], params, result, 0, sizeof(std::uint32_t)); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == sizeof(std::uint32_t)) && BEAST_EXPECT( - result.value() == env.current()->parentCloseTime().time_since_epoch().count()); - } + vrt.getUint32(params, 0) == + env.current()->parentCloseTime().time_since_epoch().count()); } } @@ -134,12 +337,26 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); - auto const result = hfs.getParentLedgerHash(); - if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT(result.value() == env.current()->header().parentHash); + { + // hfs.getParentLedgerHash(); + WasmValVec params(2), result(1); + auto* trap = + ww(getParentLedgerHash_wrap, &import[2], params, result, 0, uint256::bytes); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == uint256::bytes); + auto const resultBytes = vrt.getBytes(params, 0); + auto const expectedHash = env.current()->header().parentHash; + BEAST_EXPECT( + resultBytes.size() == uint256::bytes && + std::memcmp(resultBytes.data(), expectedHash.data(), uint256::bytes) == 0); + } } void @@ -152,12 +369,21 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); - auto const result = hfs.getBaseFee(); - if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT(result.value() == env.current()->fees().base.drops()); + // hfs.getBaseFee(); + { + WasmValVec params(2), result(1); + auto* trap = ww(getBaseFee_wrap, &import[3], params, result, 0, sizeof(std::uint32_t)); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == sizeof(std::uint32_t)) && + BEAST_EXPECT(vrt.getUint32(params, 0) == env.current()->fees().base.drops()); + } } void @@ -170,40 +396,58 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); // Use featureTokenEscrow for testing auto const amendmentId = featureTokenEscrow; - // Test by id + // hfs.isAmendmentEnabled(amendmentId); { - auto const result = hfs.isAmendmentEnabled(amendmentId); - BEAST_EXPECT(result.has_value()); - BEAST_EXPECT(result.value() == 1); + WasmValVec params(2), result(1); + vrt.setBytes(0, amendmentId.data(), uint256::bytes); + auto* trap = ww(isAmendmentEnabled_wrap, &import[4], params, result, 0, uint256::bytes); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 1); } - // Test by name std::string const amendmentName = "TokenEscrow"; + // hfs.isAmendmentEnabled(amendmentName); { - auto const result = hfs.isAmendmentEnabled(amendmentName); - BEAST_EXPECT(result.has_value()); - BEAST_EXPECT(result.value() == 1); + WasmValVec params(2), result(1); + vrt.setBytes(0, amendmentName.data(), amendmentName.size()); + auto* trap = + ww(isAmendmentEnabled_wrap, &import[4], params, result, 0, amendmentName.size()); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 1); } - // Test with a fake amendment id (all zeros) uint256 const fakeId; + // hfs.isAmendmentEnabled(fakeId); { - auto const result = hfs.isAmendmentEnabled(fakeId); - BEAST_EXPECT(result.has_value()); - BEAST_EXPECT(result.value() == 0); + WasmValVec params(2), result(1); + vrt.setBytes(0, fakeId.data(), uint256::bytes); + auto* trap = ww(isAmendmentEnabled_wrap, &import[4], params, result, 0, uint256::bytes); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 0); } - // Test with a fake amendment name std::string const fakeName = "FakeAmendment"; + // hfs.isAmendmentEnabled(fakeName); { - auto const result = hfs.isAmendmentEnabled(fakeName); - BEAST_EXPECT(result.has_value()); - BEAST_EXPECT(result.value() == 0); + WasmValVec params(2), result(1); + vrt.setBytes(0, fakeName.data(), fakeName.size()); + auto* trap = + ww(isAmendmentEnabled_wrap, &import[4], params, result, 0, fakeName.size()); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 0); } } @@ -219,38 +463,127 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const dummyEscrow = keylet::escrow(env.master, 2); auto const accountKeylet = keylet::account(env.master); { + VirtualRuntime vrt; WasmHostFunctionsImpl hfs(ac, dummyEscrow); - BEAST_EXPECT( - hfs.cacheLedgerObj(accountKeylet.key, -1).error() == - HostFunctionError::SLOT_OUT_RANGE); - BEAST_EXPECT( - hfs.cacheLedgerObj(accountKeylet.key, 257).error() == - HostFunctionError::SLOT_OUT_RANGE); - BEAST_EXPECT( - hfs.cacheLedgerObj(dummyEscrow.key, 0).error() == - HostFunctionError::LEDGER_OBJ_NOT_FOUND); - BEAST_EXPECT(hfs.cacheLedgerObj(accountKeylet.key, 0).value() == 1); + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); + // hfs.cacheLedgerObj(accountKeylet.key, -1); + { + WasmValVec params(3), result(1); + vrt.setBytes(0, accountKeylet.key.data(), uint256::bytes); + auto* trap = + ww(cacheLedgerObj_wrap, &import[5], params, result, 0, uint256::bytes, -1); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::SLOT_OUT_RANGE)); + } + + // hfs.cacheLedgerObj(accountKeylet.key, 257); + { + WasmValVec params(3), result(1); + vrt.setBytes(0, accountKeylet.key.data(), uint256::bytes); + auto* trap = + ww(cacheLedgerObj_wrap, &import[5], params, result, 0, uint256::bytes, 257); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::SLOT_OUT_RANGE)); + } + + // hfs.cacheLedgerObj(dummyEscrow.key, 0); + { + WasmValVec params(3), result(1); + vrt.setBytes(0, dummyEscrow.key.data(), uint256::bytes); + auto* trap = + ww(cacheLedgerObj_wrap, &import[5], params, result, 0, uint256::bytes, 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::LEDGER_OBJ_NOT_FOUND)); + } + + // hfs.cacheLedgerObj(accountKeylet.key, 0); + { + WasmValVec params(3), result(1); + vrt.setBytes(0, accountKeylet.key.data(), uint256::bytes); + auto* trap = + ww(cacheLedgerObj_wrap, &import[5], params, result, 0, uint256::bytes, 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 1); + } + + vrt.setGas(2'000'000); for (int i = 1; i <= 256; ++i) { - auto const result = hfs.cacheLedgerObj(accountKeylet.key, i); - BEAST_EXPECT(result.has_value() && result.value() == i); + // hfs.cacheLedgerObj(accountKeylet.key, i); + WasmValVec params(3), result(1); + vrt.setBytes(0, accountKeylet.key.data(), uint256::bytes); + auto* trap = + ww(cacheLedgerObj_wrap, &import[5], params, result, 0, uint256::bytes, i); + + if (!(BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECTS( + result[0].of.i32 == i, + "result: " + std::to_string(result[0].of.i32) + + ", expected: " + std::to_string(i)))) + break; + } + + // hfs.cacheLedgerObj(accountKeylet.key, 0); + { + WasmValVec params(3), result(1); + vrt.setBytes(0, accountKeylet.key.data(), uint256::bytes); + auto* trap = + ww(cacheLedgerObj_wrap, &import[5], params, result, 0, uint256::bytes, 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == static_cast(HostFunctionError::SLOTS_FULL)); } - BEAST_EXPECT( - hfs.cacheLedgerObj(accountKeylet.key, 0).error() == HostFunctionError::SLOTS_FULL); } { + VirtualRuntime vrt; WasmHostFunctionsImpl hfs(ac, dummyEscrow); + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); + + vrt.setGas(2'000'000); for (int i = 1; i <= 256; ++i) { - auto const result = hfs.cacheLedgerObj(accountKeylet.key, 0); - BEAST_EXPECT(result.has_value() && result.value() == i); + // hfs.cacheLedgerObj(accountKeylet.key, 0); + WasmValVec params(3), result(1); + vrt.setBytes(0, accountKeylet.key.data(), uint256::bytes); + auto* trap = + ww(cacheLedgerObj_wrap, &import[5], params, result, 0, uint256::bytes, 0); + + if (!(BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECTS( + result[0].of.i32 == i, + "result: " + std::to_string(result[0].of.i32) + + ", expected: " + std::to_string(i)))) + break; + } + + // hfs.cacheLedgerObj(accountKeylet.key, 0); + { + WasmValVec params(3), result(1); + vrt.setBytes(0, accountKeylet.key.data(), uint256::bytes); + auto* trap = + ww(cacheLedgerObj_wrap, &import[5], params, result, 0, uint256::bytes, 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == static_cast(HostFunctionError::SLOTS_FULL)); } - BEAST_EXPECT( - hfs.cacheLedgerObj(accountKeylet.key, 0).error() == HostFunctionError::SLOTS_FULL); } } @@ -280,42 +613,139 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); { - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); - auto const account = hfs.getTxField(sfAccount); - BEAST_EXPECT(account && std::ranges::equal(*account, env.master.id())); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); - auto const owner = hfs.getTxField(sfOwner); - BEAST_EXPECT(owner && std::ranges::equal(*owner, env.master.id())); + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); - auto const txType = hfs.getTxField(sfTransactionType); - BEAST_EXPECT(txType && *txType == toBytes(ttESCROW_FINISH)); - - auto const offerSeq = hfs.getTxField(sfOfferSequence); - BEAST_EXPECT(offerSeq && *offerSeq == toBytes(env.seq(env.master))); - - auto const notPresent = hfs.getTxField(sfDestination); - if (BEAST_EXPECT(!notPresent.has_value())) - BEAST_EXPECT(notPresent.error() == HostFunctionError::FIELD_NOT_FOUND); - - auto const memos = hfs.getTxField(sfMemos); - if (BEAST_EXPECT(!memos.has_value())) - BEAST_EXPECT(memos.error() == HostFunctionError::NOT_LEAF_FIELD); - - auto const credentialIds = hfs.getTxField(sfCredentialIDs); - if (BEAST_EXPECT(!credentialIds.has_value())) + // hfs.getTxField(sfAccount); { - BEAST_EXPECTS( - credentialIds.error() == HostFunctionError::NOT_LEAF_FIELD, - std::to_string(HfErrorToInt(credentialIds.error()))); + WasmValVec params(3), result(1); + auto* trap = + ww(getTxField_wrap, + &import[6], + params, + result, + sfAccount.getCode(), + 0, + AccountID::bytes); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == AccountID::bytes); + auto const accountBytes = vrt.getBytes(params, 1); + BEAST_EXPECT(std::ranges::equal(accountBytes, env.master.id())); } - auto const nonField = hfs.getTxField(sfInvalid); - if (BEAST_EXPECT(!nonField.has_value())) - BEAST_EXPECT(nonField.error() == HostFunctionError::FIELD_NOT_FOUND); + // hfs.getTxField(sfOwner); + { + WasmValVec params(3), result(1); + auto* trap = + ww(getTxField_wrap, + &import[6], + params, + result, + sfOwner.getCode(), + 0, + AccountID::bytes); - auto const nonField2 = hfs.getTxField(sfGeneric); - if (BEAST_EXPECT(!nonField2.has_value())) - BEAST_EXPECT(nonField2.error() == HostFunctionError::FIELD_NOT_FOUND); + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == AccountID::bytes); + auto const ownerBytes = vrt.getBytes(params, 1); + BEAST_EXPECT(std::ranges::equal(ownerBytes, env.master.id())); + } + + // hfs.getTxField(sfTransactionType); + { + WasmValVec params(3), result(1); + auto* trap = + ww(getTxField_wrap, + &import[6], + params, + result, + sfTransactionType.getCode(), + 0, + 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 > 0); + auto txTypeBytes = vrt.getBytes(params, 1); + txTypeBytes.resize(result[0].of.i32); + BEAST_EXPECT(txTypeBytes == toBytes(ttESCROW_FINISH)); + } + + // hfs.getTxField(sfOfferSequence); + { + WasmValVec params(3), result(1); + auto* trap = ww( + getTxField_wrap, &import[6], params, result, sfOfferSequence.getCode(), 0, 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 > 0); + auto offerSeqBytes = vrt.getBytes(params, 1); + offerSeqBytes.resize(result[0].of.i32); + BEAST_EXPECT(offerSeqBytes == toBytes(env.seq(env.master))); + } + + // hfs.getTxField(sfDestination); + { + WasmValVec params(3), result(1); + auto* trap = ww( + getTxField_wrap, &import[6], params, result, sfDestination.getCode(), 0, 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FIELD_NOT_FOUND)); + } + + // hfs.getTxField(sfMemos); + { + WasmValVec params(3), result(1); + auto* trap = + ww(getTxField_wrap, &import[6], params, result, sfMemos.getCode(), 0, 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::NOT_LEAF_FIELD)); + } + + // hfs.getTxField(sfCredentialIDs); + { + WasmValVec params(3), result(1); + auto* trap = ww( + getTxField_wrap, &import[6], params, result, sfCredentialIDs.getCode(), 0, 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + BEAST_EXPECTS( + result[0].of.i32 == static_cast(HostFunctionError::NOT_LEAF_FIELD), + std::to_string(result[0].of.i32)); + } + + // hfs.getTxField(sfInvalid); + { + WasmValVec params(3), result(1); + auto* trap = + ww(getTxField_wrap, &import[6], params, result, sfInvalid.getCode(), 0, 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FIELD_NOT_FOUND)); + } + + // hfs.getTxField(sfGeneric); + { + WasmValVec params(3), result(1); + auto* trap = + ww(getTxField_wrap, &import[6], params, result, sfGeneric.getCode(), 0, 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FIELD_NOT_FOUND)); + } } { @@ -326,14 +756,38 @@ struct HostFuncImpl_test : public beast::unit_test::suite obj.setFieldIssue(sfAsset2, STIssue{sfAsset2, iouAsset.issue()}); }); ApplyContext ac2 = createApplyContext(env, ov, stx2); - WasmHostFunctionsImpl const hfs(ac2, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac2, dummyEscrow); - auto const asset = hfs.getTxField(sfAsset); - std::vector const expectedAsset(20, 0); - BEAST_EXPECT(asset && *asset == expectedAsset); + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); - auto const asset2 = hfs.getTxField(sfAsset2); - BEAST_EXPECT(asset2 && *asset2 == toBytes(Asset(iouAsset))); + // hfs.getTxField(sfAsset); + { + WasmValVec params(3), result(1); + auto* trap = + ww(getTxField_wrap, &import[6], params, result, sfAsset.getCode(), 0, 256); + + std::vector const expectedAsset(20, 0); + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 > 0); + auto assetBytes = vrt.getBytes(params, 1); + assetBytes.resize(result[0].of.i32); + BEAST_EXPECT(assetBytes == expectedAsset); + } + + // hfs.getTxField(sfAsset2); + { + WasmValVec params(3), result(1); + auto* trap = + ww(getTxField_wrap, &import[6], params, result, sfAsset2.getCode(), 0, 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 > 0); + auto asset2Bytes = vrt.getBytes(params, 1); + asset2Bytes.resize(result[0].of.i32); + BEAST_EXPECT(asset2Bytes == toBytes(Asset(iouAsset))); + } } { @@ -345,18 +799,40 @@ struct HostFuncImpl_test : public beast::unit_test::suite obj.setFieldIssue(sfAsset2, STIssue{sfAsset2, MPTIssue{mptId}}); }); ApplyContext ac2 = createApplyContext(env, ov, stx2); - WasmHostFunctionsImpl const hfs(ac2, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac2, dummyEscrow); - auto const asset = hfs.getTxField(sfAsset); - if (BEAST_EXPECT(asset.has_value())) + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); + + // hfs.getTxField(sfAsset); { - BEAST_EXPECT(*asset == toBytes(Asset(iouAsset))); + WasmValVec params(3), result(1); + auto* trap = + ww(getTxField_wrap, &import[6], params, result, sfAsset.getCode(), 0, 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + if (BEAST_EXPECT(result[0].of.i32 > 0)) + { + auto assetBytes = vrt.getBytes(params, 1); + assetBytes.resize(result[0].of.i32); + BEAST_EXPECT(assetBytes == toBytes(Asset(iouAsset))); + } } - auto const asset2 = hfs.getTxField(sfAsset2); - if (BEAST_EXPECT(asset2.has_value())) + // hfs.getTxField(sfAsset2); { - BEAST_EXPECT(*asset2 == toBytes(Asset(mptId))); + WasmValVec params(3), result(1); + auto* trap = + ww(getTxField_wrap, &import[6], params, result, sfAsset2.getCode(), 0, 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + if (BEAST_EXPECT(result[0].of.i32 > 0)) + { + auto assetBytes = vrt.getBytes(params, 1); + assetBytes.resize(result[0].of.i32); + BEAST_EXPECT(assetBytes == toBytes(Asset(mptId))); + } } } @@ -367,12 +843,25 @@ struct HostFuncImpl_test : public beast::unit_test::suite obj.setFieldU8(sfAssetScale, expectedScale); }); ApplyContext ac2 = createApplyContext(env, ov, stx2); - WasmHostFunctionsImpl const hfs(ac2, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac2, dummyEscrow); - auto const actualScale = hfs.getTxField(sfAssetScale); - if (BEAST_EXPECT(actualScale.has_value())) + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); + + // hfs.getTxField(sfAssetScale); { - BEAST_EXPECT(std::ranges::equal(*actualScale, toBytes(expectedScale))); + WasmValVec params(3), result(1); + auto* trap = + ww(getTxField_wrap, &import[6], params, result, sfAssetScale.getCode(), 0, 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + if (BEAST_EXPECT(result[0].of.i32 > 0)) + { + auto assetBytes = vrt.getBytes(params, 1); + assetBytes.resize(result[0].of.i32); + BEAST_EXPECT(std::ranges::equal(assetBytes, toBytes(expectedScale))); + } } } } @@ -397,39 +886,116 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const escrowKeylet = keylet::escrow(env.master, env.seq(env.master) - 1); BEAST_EXPECT(env.le(escrowKeylet)); - WasmHostFunctionsImpl const hfs(ac, escrowKeylet); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, escrowKeylet); - // Should return the Account field from the escrow ledger object - auto const account = hfs.getCurrentLedgerObjField(sfAccount); - if (BEAST_EXPECTS(account.has_value(), std::to_string(static_cast(account.error())))) - BEAST_EXPECT(std::ranges::equal(*account, env.master.id())); + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); - // Should return the Amount field from the escrow ledger object - auto const amountField = hfs.getCurrentLedgerObjField(sfAmount); - if (BEAST_EXPECT(amountField.has_value())) + // hfs.getCurrentLedgerObjField(sfAccount); { - BEAST_EXPECT(*amountField == toBytes(XRP(100))); + WasmValVec params(3), result(1); + auto* trap = + ww(getCurrentLedgerObjField_wrap, + &import[7], + params, + result, + sfAccount.getCode(), + 0, + 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + if (BEAST_EXPECTS(result[0].of.i32 > 0, std::to_string(result[0].of.i32))) + { + auto accountBytes = vrt.getBytes(params, 1); + accountBytes.resize(result[0].of.i32); + BEAST_EXPECT(std::ranges::equal(accountBytes, env.master.id())); + } } - // Should return the PreviousTxnID field from the escrow ledger object - auto const previousTxnId = hfs.getCurrentLedgerObjField(sfPreviousTxnID); - if (BEAST_EXPECT(previousTxnId.has_value())) + // hfs.getCurrentLedgerObjField(sfAmount); { - BEAST_EXPECT(*previousTxnId == toBytes(env.tx()->getTransactionID())); + WasmValVec params(3), result(1); + auto* trap = + ww(getCurrentLedgerObjField_wrap, + &import[7], + params, + result, + sfAmount.getCode(), + 0, + 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + if (BEAST_EXPECT(result[0].of.i32 > 0)) + { + auto amountBytes = vrt.getBytes(params, 1); + amountBytes.resize(result[0].of.i32); + BEAST_EXPECT(amountBytes == toBytes(XRP(100))); + } } - // Should return nullopt for a field not present - auto const notPresent = hfs.getCurrentLedgerObjField(sfOwner); - BEAST_EXPECT( - !notPresent.has_value() && notPresent.error() == HostFunctionError::FIELD_NOT_FOUND); + // hfs.getCurrentLedgerObjField(sfPreviousTxnID); + { + WasmValVec params(3), result(1); + auto* trap = + ww(getCurrentLedgerObjField_wrap, + &import[7], + params, + result, + sfPreviousTxnID.getCode(), + 0, + 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + if (BEAST_EXPECT(result[0].of.i32 > 0)) + { + auto previousTxnIdBytes = vrt.getBytes(params, 1); + previousTxnIdBytes.resize(result[0].of.i32); + BEAST_EXPECT(previousTxnIdBytes == toBytes(env.tx()->getTransactionID())); + } + } + + // hfs.getCurrentLedgerObjField(sfOwner); + { + WasmValVec params(3), result(1); + auto* trap = + ww(getCurrentLedgerObjField_wrap, + &import[7], + params, + result, + sfOwner.getCode(), + 0, + 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == static_cast(HostFunctionError::FIELD_NOT_FOUND)); + } { auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master) + 5); - WasmHostFunctionsImpl const hfs2(ac, dummyEscrow); - auto const account = hfs2.getCurrentLedgerObjField(sfAccount); - if (BEAST_EXPECT(!account.has_value())) + VirtualRuntime vrt2; + WasmHostFunctionsImpl hfs2(ac, dummyEscrow); + + auto import2 = xrpl::createWasmImport(hfs2); + hfs2.setRT(&vrt2); + + // hfs2.getCurrentLedgerObjField(sfAccount); { - BEAST_EXPECT(account.error() == HostFunctionError::LEDGER_OBJ_NOT_FOUND); + WasmValVec params(3), result(1); + auto* trap = + ww(getCurrentLedgerObjField_wrap, + &import2[7], + params, + result, + sfAccount.getCode(), + 0, + 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::LEDGER_OBJ_NOT_FOUND)); } } } @@ -451,40 +1017,102 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const accountKeylet = keylet::account(env.master.id()); auto const escrowKeylet = keylet::escrow(env.master.id(), env.seq(env.master) - 1); + VirtualRuntime vrt; WasmHostFunctionsImpl hfs(ac, escrowKeylet); - // Cache the escrow ledger object in slot 1 - auto cacheResult = hfs.cacheLedgerObj(accountKeylet.key, 1); - BEAST_EXPECT(cacheResult.has_value() && cacheResult.value() == 1); + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); - // Should return the Account field from the cached ledger object - auto const account = hfs.getLedgerObjField(1, sfAccount); - if (BEAST_EXPECTS(account.has_value(), std::to_string(static_cast(account.error())))) - BEAST_EXPECT(std::ranges::equal(*account, env.master.id())); - - // Should return the Balance field from the cached ledger object - auto const balanceField = hfs.getLedgerObjField(1, sfBalance); - if (BEAST_EXPECT(balanceField.has_value())) + // hfs.cacheLedgerObj(accountKeylet.key, 1); { - BEAST_EXPECT(*balanceField == toBytes(env.balance(env.master))); + WasmValVec params(3), result(1); + vrt.setBytes(0, accountKeylet.key.data(), uint256::bytes); + auto* trap = ww(cacheLedgerObj_wrap, &import[5], params, result, 0, uint256::bytes, 1); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 1); } - // Should return error for slot out of range - auto const outOfRange = hfs.getLedgerObjField(0, sfAccount); - BEAST_EXPECT( - !outOfRange.has_value() && outOfRange.error() == HostFunctionError::SLOT_OUT_RANGE); + // hfs.getLedgerObjField(1, sfAccount); + { + WasmValVec params(4), result(1); + auto* trap = ww( + getLedgerObjField_wrap, &import[8], params, result, 1, sfAccount.getCode(), 0, 256); - auto const tooHigh = hfs.getLedgerObjField(257, sfAccount); - BEAST_EXPECT(!tooHigh.has_value() && tooHigh.error() == HostFunctionError::SLOT_OUT_RANGE); + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + if (BEAST_EXPECTS(result[0].of.i32 > 0, std::to_string(result[0].of.i32))) + { + auto accountBytes = vrt.getBytes(params, 2); + accountBytes.resize(result[0].of.i32); + BEAST_EXPECT(std::ranges::equal(accountBytes, env.master.id())); + } + } - // Should return error for empty slot - auto const emptySlot = hfs.getLedgerObjField(2, sfAccount); - BEAST_EXPECT(!emptySlot.has_value() && emptySlot.error() == HostFunctionError::EMPTY_SLOT); + // hfs.getLedgerObjField(1, sfBalance); + { + WasmValVec params(4), result(1); + auto* trap = ww( + getLedgerObjField_wrap, &import[8], params, result, 1, sfBalance.getCode(), 0, 256); - // Should return error for field not present - auto const notPresent = hfs.getLedgerObjField(1, sfOwner); - BEAST_EXPECT( - !notPresent.has_value() && notPresent.error() == HostFunctionError::FIELD_NOT_FOUND); + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + if (BEAST_EXPECT(result[0].of.i32 > 0)) + { + auto balanceBytes = vrt.getBytes(params, 2); + balanceBytes.resize(result[0].of.i32); + BEAST_EXPECT(balanceBytes == toBytes(env.balance(env.master))); + } + } + + // hfs.getLedgerObjField(0, sfAccount); + { + WasmValVec params(4), result(1); + auto* trap = ww( + getLedgerObjField_wrap, &import[8], params, result, 0, sfAccount.getCode(), 0, 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == static_cast(HostFunctionError::SLOT_OUT_RANGE)); + } + + // hfs.getLedgerObjField(257, sfAccount); + { + WasmValVec params(4), result(1); + auto* trap = + ww(getLedgerObjField_wrap, + &import[8], + params, + result, + 257, + sfAccount.getCode(), + 0, + 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == static_cast(HostFunctionError::SLOT_OUT_RANGE)); + } + + // hfs.getLedgerObjField(2, sfAccount); + { + WasmValVec params(4), result(1); + auto* trap = ww( + getLedgerObjField_wrap, &import[8], params, result, 2, sfAccount.getCode(), 0, 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == static_cast(HostFunctionError::EMPTY_SLOT)); + } + + // hfs.getLedgerObjField(1, sfOwner); + { + WasmValVec params(4), result(1); + auto* trap = ww( + getLedgerObjField_wrap, &import[8], params, result, 1, sfOwner.getCode(), 0, 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == static_cast(HostFunctionError::FIELD_NOT_FOUND)); + } } void @@ -516,84 +1144,140 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov, stx); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - + VirtualRuntime vrt; WasmHostFunctionsImpl hfs(ac, dummyEscrow); + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); + + // hfs.getTxNestedField(locator); { // Locator for sfMemos[0].sfMemo.sfMemoData // Locator is a sequence of int32_t codes: // [sfMemos.fieldCode, 0, sfMemoData.fieldCode] - std::vector locatorVec = {sfMemos.fieldCode, 0, sfMemoData.fieldCode}; - Slice const locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); + std::vector const locatorVec = {sfMemos.fieldCode, 0, sfMemoData.fieldCode}; + vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); - auto const result = hfs.getTxNestedField(locator); - if (BEAST_EXPECTS(result.has_value(), std::to_string(static_cast(result.error())))) + WasmValVec params(4), result(1); + auto* trap = + ww(getTxNestedField_wrap, + &import[9], + params, + result, + 0, + locatorVec.size() * sizeof(int32_t), + 256, + 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + if (BEAST_EXPECTS(result[0].of.i32 > 0, std::to_string(result[0].of.i32))) { - std::string const memoData(result.value().begin(), result.value().end()); + auto memoDataBytes = vrt.getBytes(params, 2); + memoDataBytes.resize(result[0].of.i32); + std::string const memoData(memoDataBytes.begin(), memoDataBytes.end()); BEAST_EXPECT(memoData == "hello"); } } + // hfs.getTxNestedField(locator); { // Locator for sfCredentialIDs[0] std::vector locatorVec = {sfCredentialIDs.fieldCode, 0}; - Slice const locator( + vrt.setBytes( + 0, reinterpret_cast(locatorVec.data()), locatorVec.size() * sizeof(int32_t)); - auto const result = hfs.getTxNestedField(locator); - if (BEAST_EXPECTS(result.has_value(), std::to_string(static_cast(result.error())))) + WasmValVec params(4), result(1); + auto* trap = + ww(getTxNestedField_wrap, + &import[9], + params, + result, + 0, + locatorVec.size() * sizeof(int32_t), + 256, + 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + if (BEAST_EXPECTS(result[0].of.i32 > 0, std::to_string(result[0].of.i32))) { - std::string const credIdResult(result.value().begin(), result.value().end()); + auto credIdBytes = vrt.getBytes(params, 2); + credIdBytes.resize(result[0].of.i32); + std::string const credIdResult(credIdBytes.begin(), credIdBytes.end()); BEAST_EXPECT(strHex(credIdResult) == credIdHex); } } + // hfs.getTxNestedField(locator); { // can use the nested locator for base fields too std::vector locatorVec = {sfAccount.fieldCode}; - Slice const locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); + vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); - auto const account = hfs.getTxNestedField(locator); - if (BEAST_EXPECTS( - account.has_value(), std::to_string(static_cast(account.error())))) + WasmValVec params(4), result(1); + auto* trap = + ww(getTxNestedField_wrap, + &import[9], + params, + result, + 0, + locatorVec.size() * sizeof(int32_t), + 256, + 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + if (BEAST_EXPECTS(result[0].of.i32 > 0, std::to_string(result[0].of.i32))) { - BEAST_EXPECT(std::ranges::equal(*account, env.master.id())); + auto accountBytes = vrt.getBytes(params, 2); + accountBytes.resize(result[0].of.i32); + BEAST_EXPECT(std::ranges::equal(accountBytes, env.master.id())); } } + // hfs.getTxNestedField(locator); { // unaligned locator std::vector locatorVec(sizeof(int32_t) + 1); memcpy(locatorVec.data() + 1, &sfAccount.fieldCode, sizeof(int32_t)); - Slice const locator( - reinterpret_cast(locatorVec.data() + 1), sizeof(int32_t)); + vrt.setBytes(0, locatorVec.data() + 1, sizeof(int32_t)); - auto const account = hfs.getTxNestedField(locator); - if (BEAST_EXPECTS( - account.has_value(), std::to_string(static_cast(account.error())))) + WasmValVec params(4), result(1); + auto* trap = + ww(getTxNestedField_wrap, &import[9], params, result, 0, sizeof(int32_t), 256, 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + if (BEAST_EXPECTS(result[0].of.i32 > 0, std::to_string(result[0].of.i32))) { - BEAST_EXPECT(std::ranges::equal(*account, env.master.id())); + auto accountBytes = vrt.getBytes(params, 2); + accountBytes.resize(result[0].of.i32); + BEAST_EXPECT(std::ranges::equal(accountBytes, env.master.id())); } } auto expectError = [&](std::vector const& locatorVec, HostFunctionError expectedError) { - Slice const locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); - auto const result = hfs.getTxNestedField(locator); - if (BEAST_EXPECT(!result.has_value())) - { - BEAST_EXPECTS( - result.error() == expectedError, - std::to_string(static_cast(result.error()))); - } + vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); + + WasmValVec params(4), result(1); + // hfs.getTxNestedField(locator); + auto* trap = + ww(getTxNestedField_wrap, + &import[9], + params, + result, + 0, + locatorVec.size() * sizeof(int32_t), + 256, + 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + BEAST_EXPECTS( + result[0].of.i32 == static_cast(expectedError), + std::to_string(result[0].of.i32)); }; + + // hfs.getTxNestedField(locator); // Locator for non-existent base field expectError( {sfSigners.fieldCode, // sfSigners does not exist @@ -601,6 +1285,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite sfAccount.fieldCode}, HostFunctionError::FIELD_NOT_FOUND); + // hfs.getTxNestedField(locator); // Locator for non-existent index expectError( {sfMemos.fieldCode, @@ -608,11 +1293,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite sfMemoData.fieldCode}, HostFunctionError::INDEX_OUT_OF_BOUNDS); + // hfs.getTxNestedField(locator); // Locator for non-existent index expectError( {sfCredentialIDs.fieldCode, 1}, // index 1 does not exist HostFunctionError::INDEX_OUT_OF_BOUNDS); + // hfs.getTxNestedField(locator); // Locator for negative index (STArray) expectError( {sfMemos.fieldCode, @@ -620,16 +1307,19 @@ struct HostFuncImpl_test : public beast::unit_test::suite sfMemoData.fieldCode}, HostFunctionError::INDEX_OUT_OF_BOUNDS); + // hfs.getTxNestedField(locator); // Locator for negative index (STVector256) expectError( {sfCredentialIDs.fieldCode, -1}, // negative index HostFunctionError::INDEX_OUT_OF_BOUNDS); + // hfs.getTxNestedField(locator); // Locator for non-existent nested field expectError( {sfMemos.fieldCode, 0, sfURI.fieldCode}, // sfURI does not exist in the memo HostFunctionError::FIELD_NOT_FOUND); + // hfs.getTxNestedField(locator); // Locator for non-existent base sfield expectError( {field_code(20000, 20000), // nonexistent SField code @@ -637,6 +1327,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite sfAccount.fieldCode}, HostFunctionError::INVALID_FIELD); + // hfs.getTxNestedField(locator); // Locator for non-existent nested sfield expectError( {sfMemos.fieldCode, // nonexistent SField code @@ -644,6 +1335,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite field_code(20000, 20000)}, HostFunctionError::INVALID_FIELD); + // hfs.getTxNestedField(locator); // Locator for negative base sfield code (-1 = sfInvalid, exists in map but not in tx) expectError( {-1, // sfInvalid's field code @@ -651,6 +1343,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite sfAccount.fieldCode}, HostFunctionError::FIELD_NOT_FOUND); + // hfs.getTxNestedField(locator); // Locator for zero base sfield code (0 = sfGeneric, exists in map but not in tx) expectError( {0, // sfGeneric's field code @@ -658,23 +1351,28 @@ struct HostFuncImpl_test : public beast::unit_test::suite sfAccount.fieldCode}, HostFunctionError::FIELD_NOT_FOUND); + // hfs.getTxNestedField(locator); // Locator for very negative base sfield code (not in knownCodeToField map) expectError( {std::numeric_limits::min(), 0, sfAccount.fieldCode}, HostFunctionError::INVALID_FIELD); + // hfs.getTxNestedField(locator); // Locator for negative nested sfield code in STObject context // (sfMemos[0] is an STObject, then -1 is looked up as SField) expectError( {sfMemos.fieldCode, 0, -1}, // -1 = sfInvalid, exists in map but not in memo object HostFunctionError::FIELD_NOT_FOUND); + // hfs.getTxNestedField(locator); // Locator for STArray expectError({sfMemos.fieldCode}, HostFunctionError::NOT_LEAF_FIELD); + // hfs.getTxNestedField(locator); // Locator for STVector256 expectError({sfCredentialIDs.fieldCode}, HostFunctionError::NOT_LEAF_FIELD); + // hfs.getTxNestedField(locator); // Locator for nesting into non-array/object field expectError( {sfAccount.fieldCode, // sfAccount is not an array or object @@ -682,17 +1380,22 @@ struct HostFuncImpl_test : public beast::unit_test::suite sfAccount.fieldCode}, HostFunctionError::LOCATOR_MALFORMED); + // hfs.getTxNestedField(locator); // Locator for empty locator expectError({}, HostFunctionError::LOCATOR_MALFORMED); + // hfs.getTxNestedField(locator); // Locator for malformed locator (not multiple of 4) { std::vector locatorVec = {sfMemos.fieldCode}; - Slice const malformedLocator(reinterpret_cast(locatorVec.data()), 3); - auto const malformedResult = hfs.getTxNestedField(malformedLocator); - BEAST_EXPECT( - !malformedResult.has_value() && - malformedResult.error() == HostFunctionError::LOCATOR_MALFORMED); + vrt.setBytes(0, locatorVec.data(), 3); + + WasmValVec params(4), result(1); + auto* trap = ww(getTxNestedField_wrap, &import[9], params, result, 0, 3, 256, 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == static_cast(HostFunctionError::LOCATOR_MALFORMED)); } } @@ -715,39 +1418,68 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const signerKeylet = keylet::signers(env.master.id()); BEAST_EXPECT(env.le(signerKeylet)); + VirtualRuntime vrt; WasmHostFunctionsImpl hfs(ac, signerKeylet); + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); + + // hfs.getCurrentLedgerObjNestedField(baseLocatorSlice); // Locator for base field - std::vector baseLocator = {sfSignerQuorum.fieldCode}; - Slice const baseLocatorSlice( - reinterpret_cast(baseLocator.data()), - baseLocator.size() * sizeof(int32_t)); - auto const signerQuorum = hfs.getCurrentLedgerObjNestedField(baseLocatorSlice); - if (BEAST_EXPECTS( - signerQuorum.has_value(), std::to_string(static_cast(signerQuorum.error())))) { - BEAST_EXPECT(*signerQuorum == toBytes(static_cast(2))); + std::vector baseLocator = {sfSignerQuorum.fieldCode}; + vrt.setBytes(0, baseLocator.data(), baseLocator.size() * sizeof(int32_t)); + + WasmValVec params(4), result(1); + auto* trap = + ww(getCurrentLedgerObjNestedField_wrap, + &import[10], + params, + result, + 0, + baseLocator.size() * sizeof(int32_t), + 256, + 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + if (BEAST_EXPECTS(result[0].of.i32 > 0, std::to_string(result[0].of.i32))) + { + auto signerQuorumBytes = vrt.getBytes(params, 2); + signerQuorumBytes.resize(result[0].of.i32); + BEAST_EXPECT(signerQuorumBytes == toBytes(static_cast(2))); + } } auto expectError = [&](std::vector const& locatorVec, HostFunctionError expectedError) { - Slice const locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); - auto const result = hfs.getCurrentLedgerObjNestedField(locator); - if (BEAST_EXPECT(!result.has_value())) - { - BEAST_EXPECTS( - result.error() == expectedError, - std::to_string(static_cast(result.error()))); - } + vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); + + WasmValVec params(4), result(1); + // hfs.getCurrentLedgerObjNestedField(locator); + auto* trap = + ww(getCurrentLedgerObjNestedField_wrap, + &import[10], + params, + result, + 0, + locatorVec.size() * sizeof(int32_t), + 256, + 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + BEAST_EXPECTS( + result[0].of.i32 == static_cast(expectedError), + std::to_string(result[0].of.i32)); }; + // hfs.getCurrentLedgerObjNestedField(locator); // Locator for non-existent base field expectError( {sfSigners.fieldCode, // sfSigners does not exist 0, sfAccount.fieldCode}, HostFunctionError::FIELD_NOT_FOUND); + + // hfs.getCurrentLedgerObjNestedField(locator); // Locator for nesting into non-array/object field expectError( {sfSignerQuorum.fieldCode, // sfSignerQuorum is not an array or object @@ -755,36 +1487,60 @@ struct HostFuncImpl_test : public beast::unit_test::suite sfAccount.fieldCode}, HostFunctionError::LOCATOR_MALFORMED); + // hfs.getCurrentLedgerObjNestedField(emptyLocator); // Locator for empty locator - Slice const emptyLocator(nullptr, 0); - auto const emptyResult = hfs.getCurrentLedgerObjNestedField(emptyLocator); - BEAST_EXPECT( - !emptyResult.has_value() && - emptyResult.error() == HostFunctionError::LOCATOR_MALFORMED); + { + WasmValVec params(4), result(1); + auto* trap = ww( + getCurrentLedgerObjNestedField_wrap, &import[10], params, result, 0, 0, 256, 256); + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == static_cast(HostFunctionError::LOCATOR_MALFORMED)); + } + + // hfs.getCurrentLedgerObjNestedField(malformedLocator); // Locator for malformed locator (not multiple of 4) - std::vector malformedLocatorVec = {sfMemos.fieldCode}; - Slice const malformedLocator( - reinterpret_cast(malformedLocatorVec.data()), 3); - auto const malformedResult = hfs.getCurrentLedgerObjNestedField(malformedLocator); - BEAST_EXPECT( - !malformedResult.has_value() && - malformedResult.error() == HostFunctionError::LOCATOR_MALFORMED); + { + std::vector malformedLocatorVec = {sfMemos.fieldCode}; + vrt.setBytes(0, malformedLocatorVec.data(), 3); + WasmValVec params(4), result(1); + auto* trap = ww( + getCurrentLedgerObjNestedField_wrap, &import[10], params, result, 0, 3, 256, 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == static_cast(HostFunctionError::LOCATOR_MALFORMED)); + } + + // hfs.getCurrentLedgerObjNestedField(locator); { auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master) + 5); - WasmHostFunctionsImpl const dummyHfs(ac, dummyEscrow); + VirtualRuntime vrt2; + WasmHostFunctionsImpl dummyHfs(ac, dummyEscrow); + + auto import2 = xrpl::createWasmImport(dummyHfs); + dummyHfs.setRT(&vrt2); + std::vector const locatorVec = {sfAccount.fieldCode}; - Slice const locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); - auto const result = dummyHfs.getCurrentLedgerObjNestedField(locator); - if (BEAST_EXPECT(!result.has_value())) - { - BEAST_EXPECTS( - result.error() == HostFunctionError::LEDGER_OBJ_NOT_FOUND, - std::to_string(static_cast(result.error()))); - } + vrt2.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); + + WasmValVec params(4), result(1); + auto* trap = + ww(getCurrentLedgerObjNestedField_wrap, + &import2[10], + params, + result, + 0, + locatorVec.size() * sizeof(int32_t), + 256, + 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + BEAST_EXPECTS( + result[0].of.i32 == static_cast(HostFunctionError::LEDGER_OBJ_NOT_FOUND), + std::to_string(result[0].of.i32)); } } @@ -805,25 +1561,47 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); + VirtualRuntime vrt; WasmHostFunctionsImpl hfs(ac, dummyEscrow); + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); + // Cache the SignerList ledger object in slot 1 auto const signerListKeylet = keylet::signers(env.master.id()); - auto cacheResult = hfs.cacheLedgerObj(signerListKeylet.key, 1); - BEAST_EXPECT(cacheResult.has_value() && cacheResult.value() == 1); + // hfs.cacheLedgerObj(signerListKeylet.key, 1); + { + WasmValVec params(3), result(1); + vrt.setBytes(0, signerListKeylet.key.data(), uint256::bytes); + auto* trap = ww(cacheLedgerObj_wrap, &import[5], params, result, 0, uint256::bytes, 1); + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 1); + } // Locator for sfSignerEntries[0].sfAccount { std::vector const locatorVec = { sfSignerEntries.fieldCode, 0, sfAccount.fieldCode}; - Slice const locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); + // hfs.getLedgerObjNestedField(1, locator); + vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); + WasmValVec params(5), result(1); + auto* trap = + ww(getLedgerObjNestedField_wrap, + &import[11], + params, + result, + 1, + 0, + locatorVec.size() * sizeof(int32_t), + 256, + 256); - auto const result = hfs.getLedgerObjNestedField(1, locator); - if (BEAST_EXPECTS(result.has_value(), std::to_string(static_cast(result.error())))) + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + if (BEAST_EXPECTS(result[0].of.i32 > 0, std::to_string(result[0].of.i32))) { - BEAST_EXPECT(std::ranges::equal(*result, alice.id())); + auto aliceIdBytes = vrt.getBytes(params, 3); + aliceIdBytes.resize(result[0].of.i32); + BEAST_EXPECT(std::ranges::equal(aliceIdBytes, alice.id())); } } @@ -831,14 +1609,26 @@ struct HostFuncImpl_test : public beast::unit_test::suite { std::vector const locatorVec = { sfSignerEntries.fieldCode, 1, sfAccount.fieldCode}; - Slice const locator = Slice( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); - auto const result2 = hfs.getLedgerObjNestedField(1, locator); - if (BEAST_EXPECTS( - result2.has_value(), std::to_string(static_cast(result2.error())))) + // hfs.getLedgerObjNestedField(1, locator); + vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); + WasmValVec params(5), result(1); + auto* trap = + ww(getLedgerObjNestedField_wrap, + &import[11], + params, + result, + 1, + 0, + locatorVec.size() * sizeof(int32_t), + 256, + 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + if (BEAST_EXPECTS(result[0].of.i32 > 0, std::to_string(result[0].of.i32))) { - BEAST_EXPECT(std::ranges::equal(*result2, becky.id())); + auto beckyIdBytes = vrt.getBytes(params, 3); + beckyIdBytes.resize(result[0].of.i32); + BEAST_EXPECT(std::ranges::equal(beckyIdBytes, becky.id())); } } @@ -846,33 +1636,55 @@ struct HostFuncImpl_test : public beast::unit_test::suite { std::vector const locatorVec = { sfSignerEntries.fieldCode, 0, sfSignerWeight.fieldCode}; - Slice const locator = Slice( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); - auto const weightResult = hfs.getLedgerObjNestedField(1, locator); - if (BEAST_EXPECTS( - weightResult.has_value(), - std::to_string(static_cast(weightResult.error())))) + // hfs.getLedgerObjNestedField(1, locator); + vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); + WasmValVec params(5), result(1); + auto* trap = + ww(getLedgerObjNestedField_wrap, + &import[11], + params, + result, + 1, + 0, + locatorVec.size() * sizeof(int32_t), + 256, + 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + if (BEAST_EXPECTS(result[0].of.i32 > 0, std::to_string(result[0].of.i32))) { // Should be 1 auto const expected = toBytes(static_cast(1)); - BEAST_EXPECT(*weightResult == expected); + auto weightBytes = vrt.getBytes(params, 3); + weightBytes.resize(result[0].of.i32); + BEAST_EXPECT(weightBytes == expected); } } // Locator for base field sfSignerQuorum { std::vector const locatorVec = {sfSignerQuorum.fieldCode}; - Slice const locator = Slice( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); - auto const quorumResult = hfs.getLedgerObjNestedField(1, locator); - if (BEAST_EXPECTS( - quorumResult.has_value(), - std::to_string(static_cast(quorumResult.error())))) + // hfs.getLedgerObjNestedField(1, locator); + vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); + WasmValVec params(5), result(1); + auto* trap = + ww(getLedgerObjNestedField_wrap, + &import[11], + params, + result, + 1, + 0, + locatorVec.size() * sizeof(int32_t), + 256, + 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + if (BEAST_EXPECTS(result[0].of.i32 > 0, std::to_string(result[0].of.i32))) { auto const expected = toBytes(static_cast(2)); - BEAST_EXPECT(*quorumResult == expected); + auto quorumBytes = vrt.getBytes(params, 3); + quorumBytes.resize(result[0].of.i32); + BEAST_EXPECT(quorumBytes == expected); } } @@ -880,16 +1692,23 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto expectError = [&](std::vector const& locatorVec, HostFunctionError expectedError, int slot = 1) { - Slice const locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); - auto const result = hfs.getLedgerObjNestedField(slot, locator); - if (BEAST_EXPECT(!result.has_value())) - { - BEAST_EXPECTS( - result.error() == expectedError, - std::to_string(static_cast(result.error()))); - } + // hfs.getLedgerObjNestedField(slot, locator); + vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); + WasmValVec params(5), result(1); + auto* trap = + ww(getLedgerObjNestedField_wrap, + &import[11], + params, + result, + slot, + 0, + locatorVec.size() * sizeof(int32_t), + 256, + 256); + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + BEAST_EXPECTS( + result[0].of.i32 == static_cast(expectedError), + std::to_string(result[0].of.i32)); }; // Error: base field not found @@ -943,11 +1762,18 @@ struct HostFuncImpl_test : public beast::unit_test::suite expectError({}, HostFunctionError::LOCATOR_MALFORMED); // Error: locator malformed (not multiple of 4) - std::vector const locatorVec = {sfSignerEntries.fieldCode}; - Slice const locator = Slice(reinterpret_cast(locatorVec.data()), 3); - auto const malformed = hfs.getLedgerObjNestedField(1, locator); - BEAST_EXPECT( - !malformed.has_value() && malformed.error() == HostFunctionError::LOCATOR_MALFORMED); + { + std::vector const locatorVec = {sfSignerEntries.fieldCode}; + // hfs.getLedgerObjNestedField(1, locator); + vrt.setBytes(0, locatorVec.data(), 3); + WasmValVec params(5), result(1); + auto* trap = + ww(getLedgerObjNestedField_wrap, &import[11], params, result, 1, 0, 3, 256, 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == static_cast(HostFunctionError::LOCATOR_MALFORMED)); + } } void @@ -986,27 +1812,55 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov, stx); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); - // Should return 1 for sfMemos - auto const memosLen = hfs.getTxArrayLen(sfMemos); - if (BEAST_EXPECT(memosLen.has_value())) - BEAST_EXPECT(memosLen.value() == 2); + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); + + // Should return 2 for sfMemos + // hfs.getTxArrayLen(sfMemos); + { + WasmValVec params(1), result(1); + auto* trap = ww(getTxArrayLen_wrap, &import[12], params, result, sfMemos.fieldCode); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + if (BEAST_EXPECT(result[0].of.i32 > 0)) + BEAST_EXPECT(result[0].of.i32 == 2); + } // Should return error for non-array field - auto const notArray = hfs.getTxArrayLen(sfAccount); - if (BEAST_EXPECT(!notArray.has_value())) - BEAST_EXPECT(notArray.error() == HostFunctionError::NO_ARRAY); + // hfs.getTxArrayLen(sfAccount); + { + WasmValVec params(1), result(1); + auto* trap = ww(getTxArrayLen_wrap, &import[12], params, result, sfAccount.fieldCode); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::NO_ARRAY)); + } // Should return error for missing array field - auto const missingArray = hfs.getTxArrayLen(sfSigners); - if (BEAST_EXPECT(!missingArray.has_value())) - BEAST_EXPECT(missingArray.error() == HostFunctionError::FIELD_NOT_FOUND); + // hfs.getTxArrayLen(sfSigners); + { + WasmValVec params(1), result(1); + auto* trap = ww(getTxArrayLen_wrap, &import[12], params, result, sfSigners.fieldCode); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + BEAST_EXPECT( + result[0].of.i32 == static_cast(HostFunctionError::FIELD_NOT_FOUND)); + } // Should return 1 for sfCredentialIDs - auto const credIdsLen = hfs.getTxArrayLen(sfCredentialIDs); - if (BEAST_EXPECT(credIdsLen.has_value())) - BEAST_EXPECT(credIdsLen.value() == 1); + // hfs.getTxArrayLen(sfCredentialIDs); + { + WasmValVec params(1), result(1); + auto* trap = + ww(getTxArrayLen_wrap, &import[12], params, result, sfCredentialIDs.fieldCode); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + if (BEAST_EXPECT(result[0].of.i32 > 0)) + BEAST_EXPECT(result[0].of.i32 == 1); + } } void @@ -1026,27 +1880,65 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const signerKeylet = keylet::signers(env.master.id()); - WasmHostFunctionsImpl const hfs(ac, signerKeylet); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, signerKeylet); - auto const entriesLen = hfs.getCurrentLedgerObjArrayLen(sfSignerEntries); - if (BEAST_EXPECT(entriesLen.has_value())) - BEAST_EXPECT(entriesLen.value() == 2); + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); - auto const arrLen = hfs.getCurrentLedgerObjArrayLen(sfMemos); - if (BEAST_EXPECT(!arrLen.has_value())) - BEAST_EXPECT(arrLen.error() == HostFunctionError::FIELD_NOT_FOUND); + // hfs.getCurrentLedgerObjArrayLen(sfSignerEntries); + { + WasmValVec params(1), result(1); + auto* trap = + ww(getCurrentLedgerObjArrayLen_wrap, + &import[13], + params, + result, + sfSignerEntries.fieldCode); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + if (BEAST_EXPECT(result[0].of.i32 > 0)) + BEAST_EXPECT(result[0].of.i32 == 2); + } + + // hfs.getCurrentLedgerObjArrayLen(sfMemos); + { + WasmValVec params(1), result(1); + auto* trap = ww( + getCurrentLedgerObjArrayLen_wrap, &import[13], params, result, sfMemos.fieldCode); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + BEAST_EXPECT( + result[0].of.i32 == static_cast(HostFunctionError::FIELD_NOT_FOUND)); + } // Should return NO_ARRAY for non-array field - auto const notArray = hfs.getCurrentLedgerObjArrayLen(sfAccount); - if (BEAST_EXPECT(!notArray.has_value())) - BEAST_EXPECT(notArray.error() == HostFunctionError::NO_ARRAY); + // hfs.getCurrentLedgerObjArrayLen(sfAccount); + { + WasmValVec params(1), result(1); + auto* trap = ww( + getCurrentLedgerObjArrayLen_wrap, &import[13], params, result, sfAccount.fieldCode); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::NO_ARRAY)); + } { auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master) + 5); - WasmHostFunctionsImpl const dummyHfs(ac, dummyEscrow); - auto const len = dummyHfs.getCurrentLedgerObjArrayLen(sfMemos); - if (BEAST_EXPECT(!len.has_value())) - BEAST_EXPECT(len.error() == HostFunctionError::LEDGER_OBJ_NOT_FOUND); + VirtualRuntime vrt2; + WasmHostFunctionsImpl dummyHfs(ac, dummyEscrow); + + auto import2 = xrpl::createWasmImport(dummyHfs); + dummyHfs.setRT(&vrt2); + + // auto const len = dummyHfs.getCurrentLedgerObjArrayLen(sfMemos); + WasmValVec params(1), result(1); + auto* trap = ww( + getCurrentLedgerObjArrayLen_wrap, &import2[13], params, result, sfMemos.fieldCode); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + BEAST_EXPECT( + result[0].of.i32 == static_cast(HostFunctionError::LEDGER_OBJ_NOT_FOUND)); } } @@ -1067,45 +1959,93 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); + VirtualRuntime vrt; WasmHostFunctionsImpl hfs(ac, dummyEscrow); + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); + auto const signerListKeylet = keylet::signers(env.master.id()); - auto cacheResult = hfs.cacheLedgerObj(signerListKeylet.key, 1); - BEAST_EXPECT(cacheResult.has_value() && cacheResult.value() == 1); + // hfs.cacheLedgerObj(signerListKeylet.key, 1); + { + WasmValVec params(3), result(1); + vrt.setBytes(0, signerListKeylet.key.data(), uint256::bytes); + auto* trap = ww(cacheLedgerObj_wrap, &import[5], params, result, 0, uint256::bytes, 1); + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 1); + } { - auto const arrLen = hfs.getLedgerObjArrayLen(1, sfSignerEntries); - if (BEAST_EXPECT(arrLen.has_value())) + // hfs.getLedgerObjArrayLen(1, sfSignerEntries); + WasmValVec params(2), result(1); + auto* trap = + ww(getLedgerObjArrayLen_wrap, + &import[14], + params, + result, + 1, + sfSignerEntries.fieldCode); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + if (BEAST_EXPECT(result[0].of.i32 > 0)) { // Should return 2 for sfSignerEntries - BEAST_EXPECT(arrLen.value() == 2); + BEAST_EXPECT(result[0].of.i32 == 2); } } { - auto const arrLen = hfs.getLedgerObjArrayLen(0, sfSignerEntries); - if (BEAST_EXPECT(!arrLen.has_value())) - BEAST_EXPECT(arrLen.error() == HostFunctionError::SLOT_OUT_RANGE); + // hfs.getLedgerObjArrayLen(0, sfSignerEntries); + WasmValVec params(2), result(1); + auto* trap = + ww(getLedgerObjArrayLen_wrap, + &import[14], + params, + result, + 0, + sfSignerEntries.fieldCode); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + BEAST_EXPECT( + result[0].of.i32 == static_cast(HostFunctionError::SLOT_OUT_RANGE)); } { // Should return error for non-array field - auto const notArray = hfs.getLedgerObjArrayLen(1, sfAccount); - if (BEAST_EXPECT(!notArray.has_value())) - BEAST_EXPECT(notArray.error() == HostFunctionError::NO_ARRAY); + // hfs.getLedgerObjArrayLen(1, sfAccount); + WasmValVec params(2), result(1); + auto* trap = + ww(getLedgerObjArrayLen_wrap, &import[14], params, result, 1, sfAccount.fieldCode); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::NO_ARRAY)); } { // Should return error for empty slot - auto const emptySlot = hfs.getLedgerObjArrayLen(2, sfSignerEntries); - if (BEAST_EXPECT(!emptySlot.has_value())) - BEAST_EXPECT(emptySlot.error() == HostFunctionError::EMPTY_SLOT); + // hfs.getLedgerObjArrayLen(2, sfSignerEntries); + WasmValVec params(2), result(1); + auto* trap = + ww(getLedgerObjArrayLen_wrap, + &import[14], + params, + result, + 2, + sfSignerEntries.fieldCode); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::EMPTY_SLOT)); } { // Should return error for missing array field - auto const missingArray = hfs.getLedgerObjArrayLen(1, sfMemos); - if (BEAST_EXPECT(!missingArray.has_value())) - BEAST_EXPECT(missingArray.error() == HostFunctionError::FIELD_NOT_FOUND); + // hfs.getLedgerObjArrayLen(1, sfMemos); + WasmValVec params(2), result(1); + auto* trap = + ww(getLedgerObjArrayLen_wrap, &import[14], params, result, 1, sfMemos.fieldCode); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + BEAST_EXPECT( + result[0].of.i32 == static_cast(HostFunctionError::FIELD_NOT_FOUND)); } } @@ -1128,32 +2068,48 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov, stx); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); + VirtualRuntime vrt; WasmHostFunctionsImpl hfs(ac, dummyEscrow); + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); + // Helper for error checks auto expectError = [&](std::vector const& locatorVec, - HostFunctionError expectedError, - int slot = 1) { - Slice const locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); - auto const result = hfs.getTxNestedArrayLen(locator); - if (BEAST_EXPECT(!result.has_value())) - { - BEAST_EXPECTS( - result.error() == expectedError, - std::to_string(static_cast(result.error()))); - } + HostFunctionError expectedError) { + // hfs.getTxNestedArrayLen(locator); + vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); + WasmValVec params(2), result(1); + auto* trap = + ww(getTxNestedArrayLen_wrap, + &import[15], + params, + result, + 0, + locatorVec.size() * sizeof(int32_t)); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + BEAST_EXPECTS( + result[0].of.i32 == static_cast(expectedError), + std::to_string(result[0].of.i32)); }; // Locator for sfMemos { std::vector locatorVec = {sfMemos.fieldCode}; - Slice const locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); - auto const arrLen = hfs.getTxNestedArrayLen(locator); - BEAST_EXPECT(arrLen.has_value() && arrLen.value() == 1); + // hfs.getTxNestedArrayLen(locator); + vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); + WasmValVec params(2), result(1); + auto* trap = + ww(getTxNestedArrayLen_wrap, + &import[15], + params, + result, + 0, + locatorVec.size() * sizeof(int32_t)); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + BEAST_EXPECT(result[0].of.i32 == 1); } // Error: non-array field @@ -1180,32 +2136,48 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const signerKeylet = keylet::signers(env.master.id()); + VirtualRuntime vrt; WasmHostFunctionsImpl hfs(ac, signerKeylet); + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); + // Helper for error checks auto expectError = [&](std::vector const& locatorVec, - HostFunctionError expectedError, - int slot = 1) { - Slice const locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); - auto const result = hfs.getCurrentLedgerObjNestedArrayLen(locator); - if (BEAST_EXPECT(!result.has_value())) - { - BEAST_EXPECTS( - result.error() == expectedError, - std::to_string(static_cast(result.error()))); - } + HostFunctionError expectedError) { + // hfs.getCurrentLedgerObjNestedArrayLen(locator); + vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); + WasmValVec params(2), result(1); + auto* trap = + ww(getCurrentLedgerObjNestedArrayLen_wrap, + &import[16], + params, + result, + 0, + locatorVec.size() * sizeof(int32_t)); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + BEAST_EXPECTS( + result[0].of.i32 == static_cast(expectedError), + std::to_string(result[0].of.i32)); }; // Locator for sfSignerEntries { std::vector locatorVec = {sfSignerEntries.fieldCode}; - Slice const locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); - auto const arrLen = hfs.getCurrentLedgerObjNestedArrayLen(locator); - BEAST_EXPECT(arrLen.has_value() && arrLen.value() == 2); + // hfs.getCurrentLedgerObjNestedArrayLen(locator); + vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); + WasmValVec params(2), result(1); + auto* trap = + ww(getCurrentLedgerObjNestedArrayLen_wrap, + &import[16], + params, + result, + 0, + locatorVec.size() * sizeof(int32_t)); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + BEAST_EXPECT(result[0].of.i32 == 2); } // Error: non-array field @@ -1216,18 +2188,28 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master) + 5); - WasmHostFunctionsImpl const dummyHfs(ac, dummyEscrow); + VirtualRuntime vrt2; + WasmHostFunctionsImpl dummyHfs(ac, dummyEscrow); + + auto import2 = xrpl::createWasmImport(dummyHfs); + dummyHfs.setRT(&vrt2); + std::vector locatorVec = {sfAccount.fieldCode}; - Slice const locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); - auto const result = dummyHfs.getCurrentLedgerObjNestedArrayLen(locator); - if (BEAST_EXPECT(!result.has_value())) - { - BEAST_EXPECTS( - result.error() == HostFunctionError::LEDGER_OBJ_NOT_FOUND, - std::to_string(static_cast(result.error()))); - } + // auto const result = dummyHfs.getCurrentLedgerObjNestedArrayLen(locator); + vrt2.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); + WasmValVec params(2), result(1); + auto* trap = + ww(getCurrentLedgerObjNestedArrayLen_wrap, + &import2[16], + params, + result, + 0, + locatorVec.size() * sizeof(int32_t)); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + BEAST_EXPECTS( + result[0].of.i32 == static_cast(HostFunctionError::LEDGER_OBJ_NOT_FOUND), + std::to_string(result[0].of.i32)); } } @@ -1247,35 +2229,62 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); + VirtualRuntime vrt; WasmHostFunctionsImpl hfs(ac, dummyEscrow); + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); + auto const signerListKeylet = keylet::signers(env.master.id()); - auto cacheResult = hfs.cacheLedgerObj(signerListKeylet.key, 1); - BEAST_EXPECT(cacheResult.has_value() && cacheResult.value() == 1); + // hfs.cacheLedgerObj(signerListKeylet.key, 1); + { + WasmValVec params(3), result(1); + vrt.setBytes(0, signerListKeylet.key.data(), uint256::bytes); + auto* trap = ww(cacheLedgerObj_wrap, &import[5], params, result, 0, uint256::bytes, 1); + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 1); + } // Locator for sfSignerEntries std::vector locatorVec = {sfSignerEntries.fieldCode}; - Slice const locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); - auto const arrLen = hfs.getLedgerObjNestedArrayLen(1, locator); - if (BEAST_EXPECT(arrLen.has_value())) - BEAST_EXPECT(arrLen.value() == 2); + // hfs.getLedgerObjNestedArrayLen(1, locator); + { + vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); + WasmValVec params(3), result(1); + auto* trap = + ww(getLedgerObjNestedArrayLen_wrap, + &import[17], + params, + result, + 1, + 0, + locatorVec.size() * sizeof(int32_t)); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + if (BEAST_EXPECT(result[0].of.i32 > 0)) + BEAST_EXPECT(result[0].of.i32 == 2); + } // Helper for error checks auto expectError = [&](std::vector const& locatorVec, HostFunctionError expectedError, int slot = 1) { - Slice const locator( - reinterpret_cast(locatorVec.data()), - locatorVec.size() * sizeof(int32_t)); - auto const result = hfs.getLedgerObjNestedArrayLen(slot, locator); - if (BEAST_EXPECT(!result.has_value())) - { - BEAST_EXPECTS( - result.error() == expectedError, - std::to_string(static_cast(result.error()))); - } + // hfs.getLedgerObjNestedArrayLen(slot, locator); + vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); + WasmValVec params(3), result(1); + auto* trap = + ww(getLedgerObjNestedArrayLen_wrap, + &import[17], + params, + result, + slot, + 0, + locatorVec.size() * sizeof(int32_t)); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); + BEAST_EXPECTS( + result[0].of.i32 == static_cast(expectedError), + std::to_string(result[0].of.i32)); }; // Error: non-array field @@ -1295,10 +2304,16 @@ struct HostFuncImpl_test : public beast::unit_test::suite expectError({}, HostFunctionError::LOCATOR_MALFORMED); // Error: locator malformed (not multiple of 4) - Slice const malformedLocator(reinterpret_cast(locator.data()), 3); - auto const malformed = hfs.getLedgerObjNestedArrayLen(1, malformedLocator); - BEAST_EXPECT( - !malformed.has_value() && malformed.error() == HostFunctionError::LOCATOR_MALFORMED); + { + // hfs.getLedgerObjNestedArrayLen(1, malformedLocator); + vrt.setBytes(0, locatorVec.data(), 3); + WasmValVec params(3), result(1); + auto* trap = ww(getLedgerObjNestedArrayLen_wrap, &import[17], params, result, 1, 0, 3); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == static_cast(HostFunctionError::LOCATOR_MALFORMED)); + } // Error: locator for non-STArray field expectError( @@ -1321,18 +2336,37 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const escrowKeylet = keylet::escrow(env.master, env.seq(env.master) - 1); + VirtualRuntime vrt; WasmHostFunctionsImpl hfs(ac, escrowKeylet); + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); + // Should succeed for small data - std::vector data(10, 0x42); - auto const result = hfs.updateData(Slice(data.data(), data.size())); - BEAST_EXPECT(result.has_value() && result.value() == data.size()); + Bytes data(10, 0x42); + // hfs.updateData(Slice(data.data(), data.size())); + { + vrt.setBytes(0, data.data(), data.size()); + WasmValVec params(2), result(1); + auto* trap = ww(updateData_wrap, &import[67], params, result, 0, data.size()); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == data.size()); + BEAST_EXPECT(hfs.getData() && *hfs.getData() == data); + } // Should fail for too large data - std::vector bigData(maxWasmDataLength + 1, 0x42); - auto const tooBig = hfs.updateData(Slice(bigData.data(), bigData.size())); - if (BEAST_EXPECT(!tooBig.has_value())) - BEAST_EXPECT(tooBig.error() == HostFunctionError::DATA_FIELD_TOO_LARGE); + Bytes bigData(maxWasmDataLength + 1, 0x42); + // hfs.updateData(Slice(bigData.data(), bigData.size())); + { + vrt.setBytes(0, bigData.data(), bigData.size()); + WasmValVec params(2), result(1); + auto* trap = ww(updateData_wrap, &import[67], params, result, 0, bigData.size()); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == HfErrorToInt(HostFunctionError::DATA_FIELD_TOO_LARGE)); + } } void @@ -1346,7 +2380,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); // Generate a keypair and sign a message auto const kp = generateKeyPair(KeyType::secp256k1, randomSeed()); @@ -1357,62 +2395,155 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Should succeed for valid signature { - auto const result = hfs.checkSignature( - Slice(message.data(), message.size()), - Slice(sig.data(), sig.size()), - Slice(pk.data(), pk.size())); - BEAST_EXPECT(result.has_value()); - BEAST_EXPECT(result.value() == 1); + // hfs.checkSignature( + // Slice(message.data(), message.size()), + // Slice(sig.data(), sig.size()), + // Slice(pk.data(), pk.size())); + vrt.setBytes(0, message.data(), message.size()); + vrt.setBytes(256, sig.data(), sig.size()); + vrt.setBytes(512, pk.data(), pk.size()); + WasmValVec params(6), result(1); + auto* trap = + ww(checkSignature_wrap, + &import[18], + params, + result, + 0, + message.size(), + 256, + sig.size(), + 512, + pk.size()); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 1); } // Should fail for invalid signature { std::string badSig(sig.size(), 0xFF); - auto const result = hfs.checkSignature( - Slice(message.data(), message.size()), - Slice(badSig.data(), badSig.size()), - Slice(pk.data(), pk.size())); - BEAST_EXPECT(result.has_value()); - BEAST_EXPECT(result.value() == 0); + // hfs.checkSignature( + // Slice(message.data(), message.size()), + // Slice(badSig.data(), badSig.size()), + // Slice(pk.data(), pk.size())); + vrt.setBytes(0, message.data(), message.size()); + vrt.setBytes(256, badSig.data(), badSig.size()); + vrt.setBytes(512, pk.data(), pk.size()); + WasmValVec params(6), result(1); + auto* trap = + ww(checkSignature_wrap, + &import[18], + params, + result, + 0, + message.size(), + 256, + badSig.size(), + 512, + pk.size()); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 0); } // Should fail for invalid public key { std::string badPk(pk.size(), 0x00); - auto const result = hfs.checkSignature( - Slice(message.data(), message.size()), - Slice(sig.data(), sig.size()), - Slice(badPk.data(), badPk.size())); - BEAST_EXPECT(!result.has_value()); - BEAST_EXPECT(result.error() == HostFunctionError::INVALID_PARAMS); + // hfs.checkSignature( + // Slice(message.data(), message.size()), + // Slice(sig.data(), sig.size()), + // Slice(badPk.data(), badPk.size())); + vrt.setBytes(0, message.data(), message.size()); + vrt.setBytes(256, sig.data(), sig.size()); + vrt.setBytes(512, badPk.data(), badPk.size()); + WasmValVec params(6), result(1); + auto* trap = + ww(checkSignature_wrap, + &import[18], + params, + result, + 0, + message.size(), + 256, + sig.size(), + 512, + badPk.size()); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == HfErrorToInt(HostFunctionError::INVALID_PARAMS)); } // Should fail for empty public key { - auto const result = hfs.checkSignature( - Slice(message.data(), message.size()), - Slice(sig.data(), sig.size()), - Slice(nullptr, 0)); - BEAST_EXPECT(!result.has_value()); - BEAST_EXPECT(result.error() == HostFunctionError::INVALID_PARAMS); + // hfs.checkSignature( + // Slice(message.data(), message.size()), + // Slice(sig.data(), sig.size()), + // Slice(nullptr, 0)); + vrt.setBytes(0, message.data(), message.size()); + vrt.setBytes(256, sig.data(), sig.size()); + WasmValVec params(6), result(1); + auto* trap = + ww(checkSignature_wrap, + &import[18], + params, + result, + 0, + message.size(), + 256, + sig.size(), + 512, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == HfErrorToInt(HostFunctionError::INVALID_PARAMS)); } // Should fail for empty signature { - auto const result = hfs.checkSignature( - Slice(message.data(), message.size()), - Slice(nullptr, 0), - Slice(pk.data(), pk.size())); - BEAST_EXPECT(result.has_value()); - BEAST_EXPECT(result.value() == 0); + // hfs.checkSignature( + // Slice(message.data(), message.size()), + // Slice(nullptr, 0), + // Slice(pk.data(), pk.size())); + vrt.setBytes(0, message.data(), message.size()); + vrt.setBytes(512, pk.data(), pk.size()); + WasmValVec params(6), result(1); + auto* trap = + ww(checkSignature_wrap, + &import[18], + params, + result, + 0, + message.size(), + 256, + 0, + 512, + pk.size()); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 0); } // Should fail for empty message { - auto const result = hfs.checkSignature( - Slice(nullptr, 0), Slice(sig.data(), sig.size()), Slice(pk.data(), pk.size())); - BEAST_EXPECT(result.has_value()); - BEAST_EXPECT(result.value() == 0); + // hfs.checkSignature( + // Slice(nullptr, 0), Slice(sig.data(), sig.size()), Slice(pk.data(), pk.size())); + vrt.setBytes(256, sig.data(), sig.size()); + vrt.setBytes(512, pk.data(), pk.size()); + WasmValVec params(6), result(1); + auto* trap = + ww(checkSignature_wrap, + &import[18], + params, + result, + 0, + 0, + 256, + sig.size(), + 512, + pk.size()); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 0); } } @@ -1427,15 +2558,35 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); std::string data = "hello world"; - auto const result = hfs.computeSha512HalfHash(Slice(data.data(), data.size())); - BEAST_EXPECT(result.has_value()); + // hfs.computeSha512HalfHash(Slice(data.data(), data.size())); + { + vrt.setBytes(0, data.data(), data.size()); + WasmValVec params(4), result(1); + auto* trap = + ww(computeSha512HalfHash_wrap, + &import[19], + params, + result, + 0, + data.size(), + 256, + uint256::bytes); - // Should match direct call to sha512Half - auto expected = sha512Half(Slice(data.data(), data.size())); - BEAST_EXPECT(result.value() == expected); + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == uint256::bytes); + + // Should match direct call to sha512Half + auto expected = sha512Half(Slice(data.data(), data.size())); + auto hashBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(std::ranges::equal(hashBytes, expected)); + } } void @@ -1449,172 +2600,558 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + VirtualRuntime vrt; + auto const usdIssue = env.master["USD"].issue(); + auto const masterID = env.master.id(); + auto const baseMpt = makeMptID(1, masterID); + + auto imp = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); + + // Lambda to compare a Bytes (std::vector) to a keylet auto compareKeylet = [](std::vector const& bytes, Keylet const& kl) { return std::ranges::equal(bytes, kl.key); }; -// Lambda to compare a Bytes (std::vector) to a keylet -#define COMPARE_KEYLET(hfsFunc, keyletFunc, ...) \ - { \ - auto actual = hfs.hfsFunc(__VA_ARGS__); \ - auto expected = keyletFunc(__VA_ARGS__); \ - if (BEAST_EXPECT(actual.has_value())) \ - { \ - BEAST_EXPECT(compareKeylet(actual.value(), expected)); \ - } \ - } -#define COMPARE_KEYLET_FAIL(hfsFunc, expected, ...) \ - { \ - auto actual = hfs.hfsFunc(__VA_ARGS__); \ - if (BEAST_EXPECT(!actual.has_value())) \ - { \ - BEAST_EXPECTS( \ - actual.error() == expected, std::to_string(HfErrorToInt(actual.error()))); \ - } \ - } - COMPARE_KEYLET(accountKeylet, keylet::account, env.master.id()); - COMPARE_KEYLET_FAIL(accountKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount()); + { + auto const expected = keylet::account(masterID); + WasmValVec params(4), result(1); + auto* trap = ww(accountKeylet_wrap, &imp[20], params, result, masterID, 1024, 32); + if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) + { + auto const actual = vrt.getBytes(params, 2); + BEAST_EXPECT(compareKeylet(actual, expected)); + } - COMPARE_KEYLET(ammKeylet, keylet::amm, xrpIssue(), env.master["USD"].issue()); - COMPARE_KEYLET_FAIL(ammKeylet, HostFunctionError::INVALID_PARAMS, xrpIssue(), xrpIssue()); - COMPARE_KEYLET_FAIL( - ammKeylet, - HostFunctionError::INVALID_PARAMS, - makeMptID(1, env.master.id()), - xrpIssue()); + auto* trap2 = ww(accountKeylet_wrap, &imp[20], params, result, xrpAccount(), 1024, 32); + BEAST_EXPECT( + !trap2 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + } - COMPARE_KEYLET(checkKeylet, keylet::check, env.master.id(), 1); - COMPARE_KEYLET_FAIL(checkKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); + { + auto const expected = keylet::amm(xrpIssue(), usdIssue); + WasmValVec params(6), result(1); - std::string const credType = "test"; - COMPARE_KEYLET( - credentialKeylet, - keylet::credential, - env.master.id(), - env.master.id(), - Slice(credType.data(), credType.size())); + auto* trap = + ww(ammKeylet_wrap, &imp[21], params, result, xrpIssue(), usdIssue, 1024, 32); + if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) + { + auto const actual = vrt.getBytes(params, 4); + BEAST_EXPECT(compareKeylet(actual, expected)); + } + auto* trap2 = + ww(ammKeylet_wrap, &imp[21], params, result, xrpIssue(), xrpIssue(), 1024, 32); + BEAST_EXPECT( + !trap2 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_PARAMS)); + + auto* trap3 = + ww(ammKeylet_wrap, &imp[21], params, result, baseMpt, xrpIssue(), 1024, 32); + BEAST_EXPECT( + !trap3 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_PARAMS)); + } + + { + auto const expected = keylet::check(masterID, 1u); + WasmValVec params(6), result(1); + auto* trap = + ww(checkKeylet_wrap, &imp[22], params, result, masterID, toBytes(1u), 1024, 32); + if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) + { + auto const actual = vrt.getBytes(params, 4); + BEAST_EXPECT(compareKeylet(actual, expected)); + } + + auto* trap2 = + ww(checkKeylet_wrap, &imp[22], params, result, xrpAccount(), toBytes(1u), 1024, 32); + BEAST_EXPECT( + !trap2 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + } + + std::string const credTypeStr = "test"; + Slice const credType(credTypeStr.data(), credTypeStr.size()); Account const alice("alice"); - constexpr std::string_view longCredType = - "abcdefghijklmnopqrstuvwxyz01234567890qwertyuiop[]" - "asdfghjkl;'zxcvbnm8237tr28weufwldebvfv8734t07p"; - static_assert(longCredType.size() > maxCredentialTypeLength); - COMPARE_KEYLET_FAIL( - credentialKeylet, - HostFunctionError::INVALID_PARAMS, - env.master.id(), - alice.id(), - Slice(longCredType.data(), longCredType.size())); - COMPARE_KEYLET_FAIL( - credentialKeylet, - HostFunctionError::INVALID_ACCOUNT, - xrpAccount(), - alice.id(), - Slice(credType.data(), credType.size())); - COMPARE_KEYLET_FAIL( - credentialKeylet, - HostFunctionError::INVALID_ACCOUNT, - env.master.id(), - xrpAccount(), - Slice(credType.data(), credType.size())); + { + auto const expected = keylet::credential(masterID, masterID, credType); + WasmValVec params(8), result(1); + auto* trap = + ww(credentialKeylet_wrap, + &imp[23], + params, + result, + masterID, + masterID, + credType, + 1024, + 32); + if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) + { + auto const actual = vrt.getBytes(params, 6); + BEAST_EXPECT(compareKeylet(actual, expected)); + } - COMPARE_KEYLET(didKeylet, keylet::did, env.master.id()); - COMPARE_KEYLET_FAIL(didKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount()); + std::string_view constexpr longCredTypeStr = + "abcdefghijklmnopqrstuvwxyz01234567890qwertyuiop[]" + "asdfghjkl;'zxcvbnm8237tr28weufwldebvfv8734t07p"; + Slice const longCredType(longCredTypeStr.data(), longCredTypeStr.size()); + static_assert(longCredTypeStr.size() > maxCredentialTypeLength); + auto* trap2 = + ww(credentialKeylet_wrap, + &imp[23], + params, + result, + masterID, + alice.id(), + longCredType, + 1024, + 32); + BEAST_EXPECT( + !trap2 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_PARAMS)); - COMPARE_KEYLET(delegateKeylet, keylet::delegate, env.master.id(), alice.id()); - COMPARE_KEYLET_FAIL( - delegateKeylet, HostFunctionError::INVALID_PARAMS, env.master.id(), env.master.id()); - COMPARE_KEYLET_FAIL( - delegateKeylet, HostFunctionError::INVALID_ACCOUNT, env.master.id(), xrpAccount()); - COMPARE_KEYLET_FAIL( - delegateKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), env.master.id()); + auto* trap3 = + ww(credentialKeylet_wrap, + &imp[23], + params, + result, + xrpAccount(), + alice.id(), + credType, + 1024, + 32); + BEAST_EXPECT( + !trap3 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); - COMPARE_KEYLET(depositPreauthKeylet, keylet::depositPreauth, env.master.id(), alice.id()); - COMPARE_KEYLET_FAIL( - depositPreauthKeylet, - HostFunctionError::INVALID_PARAMS, - env.master.id(), - env.master.id()); - COMPARE_KEYLET_FAIL( - depositPreauthKeylet, - HostFunctionError::INVALID_ACCOUNT, - env.master.id(), - xrpAccount()); - COMPARE_KEYLET_FAIL( - depositPreauthKeylet, - HostFunctionError::INVALID_ACCOUNT, - xrpAccount(), - env.master.id()); + auto* trap4 = + ww(credentialKeylet_wrap, + &imp[23], + params, + result, + masterID, + xrpAccount(), + credType, + 1024, + 32); + BEAST_EXPECT( + !trap4 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + } - COMPARE_KEYLET(escrowKeylet, keylet::escrow, env.master.id(), 1); - COMPARE_KEYLET_FAIL(escrowKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); + { + auto const expected = keylet::did(masterID); + WasmValVec params(4), result(1); + auto* trap = ww(didKeylet_wrap, &imp[26], params, result, masterID, 1024, 32); + if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) + { + auto const actual = vrt.getBytes(params, 2); + BEAST_EXPECT(compareKeylet(actual, expected)); + } + + auto* trap2 = ww(didKeylet_wrap, &imp[26], params, result, xrpAccount(), 1024, 32); + BEAST_EXPECT( + !trap2 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + } + + { + auto const expected = keylet::delegate(masterID, alice.id()); + WasmValVec params(6), result(1); + auto* trap = + ww(delegateKeylet_wrap, &imp[24], params, result, masterID, alice.id(), 1024, 32); + if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) + { + auto const actual = vrt.getBytes(params, 4); + BEAST_EXPECT(compareKeylet(actual, expected)); + } + + auto* trap2 = + ww(delegateKeylet_wrap, &imp[24], params, result, masterID, masterID, 1024, 32); + BEAST_EXPECT( + !trap2 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_PARAMS)); + + auto* trap3 = + ww(delegateKeylet_wrap, &imp[24], params, result, masterID, xrpAccount(), 1024, 32); + BEAST_EXPECT( + !trap3 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + + auto* trap4 = + ww(delegateKeylet_wrap, &imp[24], params, result, xrpAccount(), masterID, 1024, 32); + BEAST_EXPECT( + !trap4 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + } + + { + auto const expected = keylet::depositPreauth(masterID, alice.id()); + WasmValVec params(6), result(1); + auto* trap = + ww(depositPreauthKeylet_wrap, + &imp[25], + params, + result, + masterID, + alice.id(), + 1024, + 32); + if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) + { + auto const actual = vrt.getBytes(params, 4); + BEAST_EXPECT(compareKeylet(actual, expected)); + } + + auto* trap2 = ww( + depositPreauthKeylet_wrap, &imp[25], params, result, masterID, masterID, 1024, 32); + BEAST_EXPECT( + !trap2 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_PARAMS)); + + auto* trap3 = + ww(depositPreauthKeylet_wrap, + &imp[25], + params, + result, + masterID, + xrpAccount(), + 1024, + 32); + BEAST_EXPECT( + !trap3 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + + auto* trap4 = + ww(depositPreauthKeylet_wrap, + &imp[25], + params, + result, + xrpAccount(), + masterID, + 1024, + 32); + BEAST_EXPECT( + !trap4 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + } + + { + auto const expected = keylet::escrow(masterID, 1u); + WasmValVec params(6), result(1); + auto* trap = + ww(escrowKeylet_wrap, &imp[27], params, result, masterID, toBytes(1u), 1024, 32); + if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) + { + auto const actual = vrt.getBytes(params, 4); + BEAST_EXPECT(compareKeylet(actual, expected)); + } + + auto* trap2 = ww( + escrowKeylet_wrap, &imp[27], params, result, xrpAccount(), toBytes(1u), 1024, 32); + BEAST_EXPECT( + !trap2 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + } Currency const usd = to_currency("USD"); - COMPARE_KEYLET(lineKeylet, keylet::line, env.master.id(), alice.id(), usd); - COMPARE_KEYLET_FAIL( - lineKeylet, HostFunctionError::INVALID_PARAMS, env.master.id(), env.master.id(), usd); - COMPARE_KEYLET_FAIL( - lineKeylet, HostFunctionError::INVALID_ACCOUNT, env.master.id(), xrpAccount(), usd); - COMPARE_KEYLET_FAIL( - lineKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), env.master.id(), usd); - COMPARE_KEYLET_FAIL( - lineKeylet, - HostFunctionError::INVALID_PARAMS, - env.master.id(), - alice.id(), - to_currency("")); - { - auto actual = hfs.mptIssuanceKeylet(env.master.id(), 1); - auto expected = keylet::mptIssuance(1, env.master.id()); - if (BEAST_EXPECT(actual.has_value())) + auto const expected = keylet::line(masterID, alice.id(), usd); + WasmValVec params(8), result(1); + auto* trap = + ww(lineKeylet_wrap, &imp[28], params, result, masterID, alice.id(), usd, 1024, 32); + if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { - BEAST_EXPECT(compareKeylet(actual.value(), expected)); + auto const actual = vrt.getBytes(params, 6); + BEAST_EXPECT(compareKeylet(actual, expected)); } + + auto* trap2 = + ww(lineKeylet_wrap, &imp[28], params, result, masterID, masterID, usd, 1024, 32); + BEAST_EXPECT( + !trap2 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_PARAMS)); + + auto* trap3 = ww( + lineKeylet_wrap, &imp[28], params, result, masterID, xrpAccount(), usd, 1024, 32); + BEAST_EXPECT( + !trap3 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + + auto* trap4 = ww( + lineKeylet_wrap, &imp[28], params, result, xrpAccount(), masterID, usd, 1024, 32); + BEAST_EXPECT( + !trap4 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + + auto* trap5 = + ww(lineKeylet_wrap, + &imp[28], + params, + result, + masterID, + alice.id(), + to_currency(""), + 1024, + 32); + BEAST_EXPECT( + !trap5 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_PARAMS)); } + { - auto actual = hfs.mptIssuanceKeylet(xrpAccount(), 1); - if (BEAST_EXPECT(!actual.has_value())) - BEAST_EXPECT(actual.error() == HostFunctionError::INVALID_ACCOUNT); + auto const expected = keylet::mptIssuance(1u, masterID); + WasmValVec params(6), result(1); + auto* trap = ww( + mptIssuanceKeylet_wrap, &imp[29], params, result, masterID, toBytes(1u), 1024, 32); + if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) + { + auto const actual = vrt.getBytes(params, 4); + BEAST_EXPECT(compareKeylet(actual, expected)); + } + + auto* trap2 = + ww(mptIssuanceKeylet_wrap, + &imp[29], + params, + result, + xrpAccount(), + toBytes(1u), + 1024, + 32); + BEAST_EXPECT( + !trap2 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); } - auto const sampleMPTID = makeMptID(1, env.master.id()); - COMPARE_KEYLET(mptokenKeylet, keylet::mptoken, sampleMPTID, alice.id()); - COMPARE_KEYLET_FAIL(mptokenKeylet, HostFunctionError::INVALID_PARAMS, MPTID{}, alice.id()); - COMPARE_KEYLET_FAIL( - mptokenKeylet, HostFunctionError::INVALID_ACCOUNT, sampleMPTID, xrpAccount()); + { + auto const expected = keylet::mptoken(baseMpt, alice.id()); + WasmValVec params(6), result(1); + auto* trap = + ww(mptokenKeylet_wrap, &imp[30], params, result, baseMpt, alice.id(), 1024, 32); + if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) + { + auto const actual = vrt.getBytes(params, 4); + BEAST_EXPECT(compareKeylet(actual, expected)); + } - COMPARE_KEYLET(nftOfferKeylet, keylet::nftoffer, env.master.id(), 1); - COMPARE_KEYLET_FAIL(nftOfferKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); + auto* trap2 = + ww(mptokenKeylet_wrap, &imp[30], params, result, MPTID{}, alice.id(), 1024, 32); + BEAST_EXPECT( + !trap2 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_PARAMS)); - COMPARE_KEYLET(offerKeylet, keylet::offer, env.master.id(), 1); - COMPARE_KEYLET_FAIL(offerKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); + auto* trap3 = + ww(mptokenKeylet_wrap, &imp[30], params, result, baseMpt, xrpAccount(), 1024, 32); + BEAST_EXPECT( + !trap3 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + } - COMPARE_KEYLET(oracleKeylet, keylet::oracle, env.master.id(), 1); - COMPARE_KEYLET_FAIL(oracleKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); + { + auto const expected = keylet::nftoffer(masterID, 1u); + WasmValVec params(6), result(1); + auto* trap = + ww(nftOfferKeylet_wrap, &imp[31], params, result, masterID, toBytes(1u), 1024, 32); + if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) + { + auto const actual = vrt.getBytes(params, 4); + BEAST_EXPECT(compareKeylet(actual, expected)); + } - COMPARE_KEYLET(paychanKeylet, keylet::payChan, env.master.id(), alice.id(), 1); - COMPARE_KEYLET_FAIL( - paychanKeylet, HostFunctionError::INVALID_PARAMS, env.master.id(), env.master.id(), 1); - COMPARE_KEYLET_FAIL( - paychanKeylet, HostFunctionError::INVALID_ACCOUNT, env.master.id(), xrpAccount(), 1); - COMPARE_KEYLET_FAIL( - paychanKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), env.master.id(), 1); + auto* trap2 = ww( + nftOfferKeylet_wrap, &imp[31], params, result, xrpAccount(), toBytes(1u), 1024, 32); + BEAST_EXPECT( + !trap2 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + } - COMPARE_KEYLET(permissionedDomainKeylet, keylet::permissionedDomain, env.master.id(), 1); - COMPARE_KEYLET_FAIL( - permissionedDomainKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); + { + auto const expected = keylet::offer(masterID, 1u); + WasmValVec params(6), result(1); + auto* trap = + ww(offerKeylet_wrap, &imp[32], params, result, masterID, toBytes(1u), 1024, 32); + if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) + { + auto const actual = vrt.getBytes(params, 4); + BEAST_EXPECT(compareKeylet(actual, expected)); + } - COMPARE_KEYLET(signersKeylet, keylet::signers, env.master.id()); - COMPARE_KEYLET_FAIL(signersKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount()); + auto* trap2 = + ww(offerKeylet_wrap, &imp[32], params, result, xrpAccount(), toBytes(1u), 1024, 32); + BEAST_EXPECT( + !trap2 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + } - COMPARE_KEYLET(ticketKeylet, keylet::ticket, env.master.id(), 1); - COMPARE_KEYLET_FAIL(ticketKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); + { + auto const expected = keylet::oracle(masterID, 1u); + WasmValVec params(6), result(1); + auto* trap = + ww(oracleKeylet_wrap, &imp[33], params, result, masterID, toBytes(1u), 1024, 32); + if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) + { + auto const actual = vrt.getBytes(params, 4); + BEAST_EXPECT(compareKeylet(actual, expected)); + } - COMPARE_KEYLET(vaultKeylet, keylet::vault, env.master.id(), 1); - COMPARE_KEYLET_FAIL(vaultKeylet, HostFunctionError::INVALID_ACCOUNT, xrpAccount(), 1); + auto* trap2 = ww( + oracleKeylet_wrap, &imp[33], params, result, xrpAccount(), toBytes(1u), 1024, 32); + BEAST_EXPECT( + !trap2 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + } + + { + auto const expected = keylet::payChan(masterID, alice.id(), 1u); + WasmValVec params(8), result(1); + auto* trap = + ww(paychanKeylet_wrap, + &imp[34], + params, + result, + masterID, + alice.id(), + toBytes(1u), + 1024, + 32); + if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) + { + auto const actual = vrt.getBytes(params, 6); + BEAST_EXPECT(compareKeylet(actual, expected)); + } + + auto* trap2 = + ww(paychanKeylet_wrap, + &imp[34], + params, + result, + masterID, + masterID, + toBytes(1u), + 1024, + 32); + BEAST_EXPECT( + !trap2 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_PARAMS)); + + auto* trap3 = + ww(paychanKeylet_wrap, + &imp[34], + params, + result, + masterID, + xrpAccount(), + toBytes(1u), + 1024, + 32); + BEAST_EXPECT( + !trap3 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + + auto* trap4 = + ww(paychanKeylet_wrap, + &imp[34], + params, + result, + xrpAccount(), + masterID, + toBytes(1u), + 1024, + 32); + BEAST_EXPECT( + !trap4 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + } + + { + auto const expected = keylet::permissionedDomain(masterID, 1u); + WasmValVec params(6), result(1); + auto* trap = + ww(permissionedDomainKeylet_wrap, + &imp[35], + params, + result, + masterID, + toBytes(1u), + 1024, + 32); + if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) + { + auto const actual = vrt.getBytes(params, 4); + BEAST_EXPECT(compareKeylet(actual, expected)); + } + + auto* trap2 = + ww(permissionedDomainKeylet_wrap, + &imp[35], + params, + result, + xrpAccount(), + toBytes(1u), + 1024, + 32); + BEAST_EXPECT( + !trap2 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + } + + { + auto const expected = keylet::signers(masterID); + WasmValVec params(4), result(1); + auto* trap = ww(signersKeylet_wrap, &imp[36], params, result, masterID, 1024, 32); + if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) + { + auto const actual = vrt.getBytes(params, 2); + BEAST_EXPECT(compareKeylet(actual, expected)); + } + + auto* trap2 = ww(signersKeylet_wrap, &imp[36], params, result, xrpAccount(), 1024, 32); + BEAST_EXPECT( + !trap2 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + } + + { + auto const expected = keylet::ticket(masterID, 1u); + WasmValVec params(6), result(1); + auto* trap = + ww(ticketKeylet_wrap, &imp[37], params, result, masterID, toBytes(1u), 1024, 32); + if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) + { + auto const actual = vrt.getBytes(params, 4); + BEAST_EXPECT(compareKeylet(actual, expected)); + } + + auto* trap2 = ww( + ticketKeylet_wrap, &imp[37], params, result, xrpAccount(), toBytes(1u), 1024, 32); + BEAST_EXPECT( + !trap2 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + } + + { + auto const expected = keylet::vault(masterID, 1u); + WasmValVec params(6), result(1); + auto* trap = + ww(vaultKeylet_wrap, &imp[38], params, result, masterID, toBytes(1u), 1024, 32); + if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) + { + auto const actual = vrt.getBytes(params, 4); + BEAST_EXPECT(compareKeylet(actual, expected)); + } + + auto* trap2 = + ww(vaultKeylet_wrap, &imp[38], params, result, xrpAccount(), toBytes(1u), 1024, 32); + BEAST_EXPECT( + !trap2 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + } } void @@ -1641,41 +3178,127 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(alice, env.seq(alice)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); // Should succeed for valid NFT { - auto const result = hfs.getNFT(alice.id(), nftId); - if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT(std::ranges::equal(*result, uri)); + // hfs.getNFT(alice.id(), nftId); + vrt.setBytes(0, alice.id().data(), AccountID::bytes); + vrt.setBytes(256, nftId.data(), uint256::bytes); + WasmValVec params(6), result(1); + auto* trap = + ww(getNFT_wrap, + &import[39], + params, + result, + 0, + AccountID::bytes, + 256, + uint256::bytes, + 512, + 256); + + if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 > 0)) + { + auto uriBytes = vrt.getBytes(params, 4); + uriBytes.resize(result[0].of.i32); + BEAST_EXPECT(std::ranges::equal(uriBytes, uri)); + } } // Should fail for invalid account { - auto const result = hfs.getNFT(xrpAccount(), nftId); - if (BEAST_EXPECT(!result.has_value())) - BEAST_EXPECT(result.error() == HostFunctionError::INVALID_ACCOUNT); + // hfs.getNFT(xrpAccount(), nftId); + vrt.setBytes(0, xrpAccount().data(), AccountID::bytes); + vrt.setBytes(256, nftId.data(), uint256::bytes); + WasmValVec params(6), result(1); + auto* trap = + ww(getNFT_wrap, + &import[39], + params, + result, + 0, + AccountID::bytes, + 256, + uint256::bytes, + 512, + 256); + + if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) + BEAST_EXPECT(result[0].of.i32 == HfErrorToInt(HostFunctionError::INVALID_ACCOUNT)); } // Should fail for invalid nftId { - auto const result = hfs.getNFT(alice.id(), uint256()); - if (BEAST_EXPECT(!result.has_value())) - BEAST_EXPECT(result.error() == HostFunctionError::INVALID_PARAMS); + // hfs.getNFT(alice.id(), uint256()); + uint256 zeroId; + vrt.setBytes(0, alice.id().data(), AccountID::bytes); + vrt.setBytes(256, zeroId.data(), uint256::bytes); + WasmValVec params(6), result(1); + auto* trap = + ww(getNFT_wrap, + &import[39], + params, + result, + 0, + AccountID::bytes, + 256, + uint256::bytes, + 512, + 256); + + if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) + BEAST_EXPECT(result[0].of.i32 == HfErrorToInt(HostFunctionError::INVALID_PARAMS)); } // Should fail for invalid nftId { auto const badId = token::getNextID(env, alice, 0u, 1u); - auto const result = hfs.getNFT(alice.id(), badId); - if (BEAST_EXPECT(!result.has_value())) - BEAST_EXPECT(result.error() == HostFunctionError::LEDGER_OBJ_NOT_FOUND); + // hfs.getNFT(alice.id(), badId); + vrt.setBytes(0, alice.id().data(), AccountID::bytes); + vrt.setBytes(256, badId.data(), uint256::bytes); + WasmValVec params(6), result(1); + auto* trap = + ww(getNFT_wrap, + &import[39], + params, + result, + 0, + AccountID::bytes, + 256, + uint256::bytes, + 512, + 256); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == HfErrorToInt(HostFunctionError::LEDGER_OBJ_NOT_FOUND)); } { - auto const result = hfs.getNFT(alice.id(), nftId2); - if (BEAST_EXPECT(!result.has_value())) - BEAST_EXPECT(result.error() == HostFunctionError::FIELD_NOT_FOUND); + // hfs.getNFT(alice.id(), nftId2); + vrt.setBytes(0, alice.id().data(), AccountID::bytes); + vrt.setBytes(256, nftId2.data(), uint256::bytes); + WasmValVec params(6), result(1); + auto* trap = + ww(getNFT_wrap, + &import[39], + params, + result, + 0, + AccountID::bytes, + 256, + uint256::bytes, + 512, + 256); + + if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) + BEAST_EXPECT(result[0].of.i32 == HfErrorToInt(HostFunctionError::FIELD_NOT_FOUND)); } } @@ -1696,20 +3319,53 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); // Should succeed for valid NFT id { - auto const result = hfs.getNFTIssuer(nftId); - if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT(std::ranges::equal(*result, env.master.id())); + // hfs.getNFTIssuer(nftId); + vrt.setBytes(0, nftId.data(), uint256::bytes); + WasmValVec params(4), result(1); + auto* trap = + ww(getNFTIssuer_wrap, + &import[40], + params, + result, + 0, + uint256::bytes, + 256, + AccountID::bytes); + + if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == AccountID::bytes)) + { + auto issuerBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(std::ranges::equal(issuerBytes, env.master.id())); + } } // Should fail for zero NFT id { - auto const result = hfs.getNFTIssuer(uint256()); - if (BEAST_EXPECT(!result.has_value())) - BEAST_EXPECT(result.error() == HostFunctionError::INVALID_PARAMS); + // hfs.getNFTIssuer(uint256()); + uint256 zeroId; + vrt.setBytes(0, zeroId.data(), uint256::bytes); + WasmValVec params(4), result(1); + auto* trap = + ww(getNFTIssuer_wrap, + &import[40], + params, + result, + 0, + uint256::bytes, + 256, + AccountID::bytes); + + if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) + BEAST_EXPECT(result[0].of.i32 == HfErrorToInt(HostFunctionError::INVALID_PARAMS)); } } @@ -1730,11 +3386,30 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); - auto const result = hfs.getNFTTaxon(nftId); - if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT(result.value() == taxon); + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); + + // hfs.getNFTTaxon(nftId); + vrt.setBytes(0, nftId.data(), uint256::bytes); + WasmValVec params(4), result(1); + auto* trap = + ww(getNFTTaxon_wrap, + &import[41], + params, + result, + 0, + uint256::bytes, + 256, + sizeof(uint32_t)); + + if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == sizeof(uint32_t))) + { + BEAST_EXPECT(vrt.getUint32(params, 2) == taxon); + } } void @@ -1754,19 +3429,32 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); { - auto const result = hfs.getNFTFlags(nftId); - if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT(result.value() == tfTransferable); + // hfs.getNFTFlags(nftId); + vrt.setBytes(0, nftId.data(), uint256::bytes); + WasmValVec params(2), result(1); + auto* trap = ww(getNFTFlags_wrap, &import[42], params, result, 0, uint256::bytes); + + if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) + BEAST_EXPECT(result[0].of.i32 == tfTransferable); } // Should return 0 for zero NFT id { - auto const result = hfs.getNFTFlags(uint256()); - if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT(result.value() == 0); + // hfs.getNFTFlags(uint256()); + uint256 zeroId; + vrt.setBytes(0, zeroId.data(), uint256::bytes); + WasmValVec params(2), result(1); + auto* trap = ww(getNFTFlags_wrap, &import[42], params, result, 0, uint256::bytes); + + if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) + BEAST_EXPECT(result[0].of.i32 == 0); } } @@ -1787,19 +3475,32 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); { - auto const result = hfs.getNFTTransferFee(nftId); - if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT(result.value() == transferFee); + // hfs.getNFTTransferFee(nftId); + vrt.setBytes(0, nftId.data(), uint256::bytes); + WasmValVec params(2), result(1); + auto* trap = ww(getNFTTransferFee_wrap, &import[43], params, result, 0, uint256::bytes); + + if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) + BEAST_EXPECT(result[0].of.i32 == transferFee); } // Should return 0 for zero NFT id { - auto const result = hfs.getNFTTransferFee(uint256()); - if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT(result.value() == 0); + // hfs.getNFTTransferFee(uint256()); + uint256 zeroId; + vrt.setBytes(0, zeroId.data(), uint256::bytes); + WasmValVec params(2), result(1); + auto* trap = ww(getNFTTransferFee_wrap, &import[43], params, result, 0, uint256::bytes); + + if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) + BEAST_EXPECT(result[0].of.i32 == 0); } } @@ -1821,19 +3522,54 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); { - auto const result = hfs.getNFTSerial(nftId); - if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT(result.value() == serial); + // hfs.getNFTSerial(nftId); + vrt.setBytes(0, nftId.data(), uint256::bytes); + WasmValVec params(4), result(1); + auto* trap = + ww(getNFTSerial_wrap, + &import[44], + params, + result, + 0, + uint256::bytes, + 256, + sizeof(uint32_t)); + + if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == sizeof(uint32_t))) + { + BEAST_EXPECT(vrt.getUint32(params, 2) == serial); + } } // Should return 0 for zero NFT id { - auto const result = hfs.getNFTSerial(uint256()); - if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT(result.value() == 0); + // hfs.getNFTSerial(uint256()); + uint256 zeroId; + vrt.setBytes(0, zeroId.data(), uint256::bytes); + WasmValVec params(4), result(1); + auto* trap = + ww(getNFTSerial_wrap, + &import[44], + params, + result, + 0, + uint256::bytes, + 256, + sizeof(uint32_t)); + + if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == sizeof(uint32_t))) + { + BEAST_EXPECT(vrt.getUint32(params, 2) == 0); + } } } @@ -1851,30 +3587,50 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov, jlog); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + VirtualRuntime vrt; + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); std::string const msg = "test trace"; std::string data = "abc"; auto const slice = Slice(data.data(), data.size()); - auto const result = hfs.trace(msg, slice, false); - if (BEAST_EXPECT(result.has_value())) + + // hfs.trace(msg, slice, false); { - BEAST_EXPECT(result.value() == 0); - auto const messages = sink.messages().str(); - BEAST_EXPECT(messages.find(msg) != std::string::npos); + vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); + vrt.setBytes(256, slice.data(), slice.size()); + WasmValVec params(5), result(1); + auto* trap = ww( + trace_wrap, &import[45], params, result, 0, msg.size(), 256, slice.size(), 0); + + if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 0)) + { + auto const messages = sink.messages().str(); + BEAST_EXPECT(messages.find(msg) != std::string::npos); + } } - auto const resultHex = hfs.trace(msg, slice, true); - if (BEAST_EXPECT(resultHex.has_value())) + // hfs.trace(msg, slice, true); { - BEAST_EXPECT(resultHex.has_value()); - BEAST_EXPECT(resultHex.value() == 0); - auto const messages = sink.messages().str(); - std::string hex; - hex.reserve(data.size() * 2); - boost::algorithm::hex(data.begin(), data.end(), std::back_inserter(hex)); - BEAST_EXPECT(messages.find(msg) != std::string::npos); - BEAST_EXPECT(messages.find(hex) != std::string::npos); + vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); + vrt.setBytes(256, slice.data(), slice.size()); + WasmValVec params(5), result(1); + auto* trap = ww( + trace_wrap, &import[45], params, result, 0, msg.size(), 256, slice.size(), 1); + + if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 0)) + { + auto const messages = sink.messages().str(); + std::string hex; + hex.reserve(data.size() * 2); + boost::algorithm::hex(data.begin(), data.end(), std::back_inserter(hex)); + BEAST_EXPECT(messages.find(msg) != std::string::npos); + BEAST_EXPECT(messages.find(hex) != std::string::npos); + } } } @@ -1887,13 +3643,25 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov, jlog); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + VirtualRuntime vrt; + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); std::string const msg = "test trace"; std::string data = "abc"; auto const slice = Slice(data.data(), data.size()); - auto const result = hfs.trace(msg, slice, false); - BEAST_EXPECT(result && *result == 0); + + // hfs.trace(msg, slice, false); + vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); + vrt.setBytes(256, slice.data(), slice.size()); + WasmValVec params(5), result(1); + auto* trap = + ww(trace_wrap, &import[45], params, result, 0, msg.size(), 256, slice.size(), 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 0); auto const messages = sink.messages().str(); BEAST_EXPECT(messages.empty()); } @@ -1913,14 +3681,23 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov, jlog); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + VirtualRuntime vrt; + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); std::string const msg = "trace number"; int64_t const num = 123456789; - auto const result = hfs.traceNum(msg, num); - if (BEAST_EXPECT(result.has_value())) + + // hfs.traceNum(msg, num); + vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); + WasmValVec params(3), result(1); + auto* trap = ww(traceNum_wrap, &import[46], params, result, 0, msg.size(), num); + + if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 0)) { - BEAST_EXPECT(result.value() == 0); auto const messages = sink.messages().str(); BEAST_EXPECT(messages.find(msg) != std::string::npos); BEAST_EXPECT(messages.find(std::to_string(num)) != std::string::npos); @@ -1936,12 +3713,22 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov, jlog); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + VirtualRuntime vrt; + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); std::string const msg = "trace number"; int64_t const num = 123456789; - auto const result = hfs.traceNum(msg, num); - BEAST_EXPECT(result && *result == 0); + + // hfs.traceNum(msg, num); + vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); + WasmValVec params(3), result(1); + auto* trap = ww(traceNum_wrap, &import[46], params, result, 0, msg.size(), num); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 0); auto const messages = sink.messages().str(); BEAST_EXPECT(messages.empty()); } @@ -1961,13 +3748,32 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov, jlog); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + VirtualRuntime vrt; + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); std::string const msg = "trace account"; - auto const result = hfs.traceAccount(msg, env.master.id()); - if (BEAST_EXPECT(result.has_value())) + auto const& accountId = env.master.id(); + + // hfs.traceAccount(msg, env.master.id()); + vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); + vrt.setBytes(256, accountId.data(), accountId.size()); + WasmValVec params(4), result(1); + auto* trap = + ww(traceAccount_wrap, + &import[47], + params, + result, + 0, + msg.size(), + 256, + accountId.size()); + + if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 0)) { - BEAST_EXPECT(result.value() == 0); auto const messages = sink.messages().str(); BEAST_EXPECT(messages.find(msg) != std::string::npos); BEAST_EXPECT(messages.find(env.master.human()) != std::string::npos); @@ -1983,10 +3789,31 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov, jlog); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); - std::string const msg = "trace account"; - auto const result = hfs.traceAccount(msg, env.master.id()); - BEAST_EXPECT(result && *result == 0); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + VirtualRuntime vrt; + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); + + std::string msg = "trace account"; + auto const& accountId = env.master.id(); + + // hfs.traceAccount(msg, env.master.id()); + vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); + vrt.setBytes(256, accountId.data(), accountId.size()); + WasmValVec params(4), result(1); + auto* trap = + ww(traceAccount_wrap, + &import[47], + params, + result, + 0, + msg.size(), + 256, + accountId.size()); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 0); auto const messages = sink.messages().str(); BEAST_EXPECT(messages.empty()); } @@ -2006,15 +3833,33 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov, jlog); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + VirtualRuntime vrt; + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); std::string const msg = "trace amount"; STAmount const amount = XRP(12345); { - auto const result = hfs.traceAmount(msg, amount); - if (BEAST_EXPECT(result.has_value())) + // hfs.traceAmount(msg, amount); + Bytes amountBytes = toBytes(amount); + vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); + vrt.setBytes(256, amountBytes.data(), amountBytes.size()); + WasmValVec params(4), result(1); + auto* trap = + ww(traceAmount_wrap, + &import[49], + params, + result, + 0, + msg.size(), + 256, + amountBytes.size()); + + if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 0)) { - BEAST_EXPECT(*result == 0); auto const messages = sink.messages().str(); BEAST_EXPECT(messages.find(msg) != std::string::npos); BEAST_EXPECT(messages.find(amount.getFullText()) != std::string::npos); @@ -2027,9 +3872,23 @@ struct HostFuncImpl_test : public beast::unit_test::suite env.close(); STAmount const iouAmount = env.master["USD"](100); { - auto const result = hfs.traceAmount(msg, iouAmount); - if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT(*result == 0); + // hfs.traceAmount(msg, iouAmount); + Bytes amountBytes = toBytes(iouAmount); + vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); + vrt.setBytes(256, amountBytes.data(), amountBytes.size()); + WasmValVec params(4), result(1); + auto* trap = + ww(traceAmount_wrap, + &import[49], + params, + result, + 0, + msg.size(), + 256, + amountBytes.size()); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 0); } // MPT amount @@ -2037,9 +3896,24 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const mptId = makeMptID(42, env.master.id()); Asset const mptAsset = Asset(mptId); STAmount const mptAmount(mptAsset, 123456); - auto const result = hfs.traceAmount(msg, mptAmount); - if (BEAST_EXPECT(result.has_value())) - BEAST_EXPECT(*result == 0); + + // hfs.traceAmount(msg, mptAmount); + Bytes amountBytes = toBytes(mptAmount); + vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); + vrt.setBytes(256, amountBytes.data(), amountBytes.size()); + WasmValVec params(4), result(1); + auto* trap = + ww(traceAmount_wrap, + &import[49], + params, + result, + 0, + msg.size(), + 256, + amountBytes.size()); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 0); } } @@ -2052,12 +3926,32 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov, jlog); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + VirtualRuntime vrt; + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); std::string const msg = "trace amount"; STAmount const amount = XRP(12345); - auto const result = hfs.traceAmount(msg, amount); - BEAST_EXPECT(result && *result == 0); + + // hfs.traceAmount(msg, amount); + Bytes amountBytes = toBytes(amount); + vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); + vrt.setBytes(256, amountBytes.data(), amountBytes.size()); + WasmValVec params(4), result(1); + auto* trap = + ww(traceAmount_wrap, + &import[49], + params, + result, + 0, + msg.size(), + 256, + amountBytes.size()); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 0); auto const messages = sink.messages().str(); BEAST_EXPECT(messages.empty()); } @@ -2161,18 +4055,50 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + VirtualRuntime vrt; + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); std::string const msg = "trace float"; { - auto const result = hfs.traceFloat(msg, makeSlice(invalid)); - BEAST_EXPECT(result && *result == 0); + // hfs.traceFloat(msg, makeSlice(invalid)); + vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); + vrt.setBytes(256, reinterpret_cast(invalid.data()), invalid.size()); + WasmValVec params(4), result(1); + auto* trap = + ww(traceFloat_wrap, + &import[48], + params, + result, + 0, + msg.size(), + 256, + invalid.size()); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 0); } { - auto const result = hfs.traceFloat(msg, makeSlice(floatMaxExp)); - BEAST_EXPECT(result && *result == 0); + // hfs.traceFloat(msg, makeSlice(floatMaxExp)); + vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); + vrt.setBytes(256, floatMaxExp.data(), floatMaxExp.size()); + WasmValVec params(4), result(1); + auto* trap = + ww(traceFloat_wrap, + &import[48], + params, + result, + 0, + msg.size(), + 256, + floatMaxExp.size()); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 0); } } @@ -2185,12 +4111,23 @@ struct HostFuncImpl_test : public beast::unit_test::suite ApplyContext ac = createApplyContext(env, ov, jlog); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + VirtualRuntime vrt; + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); std::string const msg = "trace float"; - auto const result = hfs.traceFloat(msg, makeSlice(invalid)); - BEAST_EXPECT(result && *result == 0); + // hfs.traceFloat(msg, makeSlice(invalid)); + vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); + vrt.setBytes(256, reinterpret_cast(invalid.data()), invalid.size()); + WasmValVec params(4), result(1); + auto* trap = ww( + traceFloat_wrap, &import[48], params, result, 0, msg.size(), 256, invalid.size()); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 0); auto const messages = sink.messages().str(); BEAST_EXPECT(messages.empty()); } @@ -2206,33 +4143,69 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); { - auto const result = hfs.floatFromInt(std::numeric_limits::min(), -1); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatFromInt(min64, -1); + WasmValVec params(4), result(1); + auto* trap = + ww(floatFromInt_wrap, &import[50], params, result, min64, 0, FLOAT_SIZE, -1); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatFromInt(std::numeric_limits::min(), 4); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatFromInt(min64, 4); + WasmValVec params(4), result(1); + auto* trap = + ww(floatFromInt_wrap, &import[50], params, result, min64, 0, FLOAT_SIZE, 4); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatFromInt(std::numeric_limits::min(), 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntMin); + // hfs.floatFromInt(min64, 0); + WasmValVec params(4), result(1); + auto* trap = + ww(floatFromInt_wrap, &import[50], params, result, min64, 0, FLOAT_SIZE, 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 1); + BEAST_EXPECT(resultBytes == floatIntMin); } { - auto const result = hfs.floatFromInt(0, 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); + // hfs.floatFromInt(0, 0); + WasmValVec params(4), result(1); + auto* trap = ww(floatFromInt_wrap, &import[50], params, result, 0ll, 0, FLOAT_SIZE, 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 1); + BEAST_EXPECT(resultBytes == floatIntZero); } { - auto const result = hfs.floatFromInt(std::numeric_limits::max(), 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntMax); + // hfs.floatFromInt(max64, 0); + WasmValVec params(4), result(1); + auto* trap = + ww(floatFromInt_wrap, &import[50], params, result, max64, 0, FLOAT_SIZE, 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 1); + BEAST_EXPECT(resultBytes == floatIntMax); } } @@ -2246,28 +4219,66 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); { - auto const result = hfs.floatFromUint(std::numeric_limits::min(), -1); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatFromUint(std::numeric_limits::min(), -1); + WasmValVec params(5), result(1); + uint64_t val = std::numeric_limits::min(); + vrt.setBytes(0, &val, sizeof(val)); + auto* trap = + ww(floatFromUint_wrap, &import[51], params, result, 0, 8, 16, FLOAT_SIZE, -1); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatFromUint(std::numeric_limits::min(), 4); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatFromUint(std::numeric_limits::min(), 4); + WasmValVec params(5), result(1); + uint64_t val = std::numeric_limits::min(); + vrt.setBytes(0, &val, sizeof(val)); + auto* trap = + ww(floatFromUint_wrap, &import[51], params, result, 0, 8, 16, FLOAT_SIZE, 4); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatFromUint(0, 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); + // hfs.floatFromUint(0, 0); + WasmValVec params(5), result(1); + uint64_t val = 0; + vrt.setBytes(0, &val, sizeof(val)); + auto* trap = + ww(floatFromUint_wrap, &import[51], params, result, 0, 8, 16, FLOAT_SIZE, 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == floatIntZero); } { - auto const result = hfs.floatFromUint(std::numeric_limits::max(), 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatUIntMax); + // hfs.floatFromUint(std::numeric_limits::max(), 0); + WasmValVec params(5), result(1); + uint64_t val = std::numeric_limits::max(); + vrt.setBytes(0, &val, sizeof(val)); + auto* trap = + ww(floatFromUint_wrap, &import[51], params, result, 0, 8, 16, FLOAT_SIZE, 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == floatUIntMax); } } @@ -2282,59 +4293,203 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); { - auto const result = hfs.floatSet(1, 0, -1); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatSet(1, 0, -1); + WasmValVec params(5), result(1); + auto* trap = ww(floatSet_wrap, &import[58], params, result, 0, 1ll, 0, FLOAT_SIZE, -1); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatSet(1, 0, 4); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatSet(1, 0, 4); + WasmValVec params(5), result(1); + auto* trap = ww(floatSet_wrap, &import[58], params, result, 0, 1ll, 0, FLOAT_SIZE, 4); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatSet(1, Number::maxExponent + normalExp + 1, 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatSet(1, Number::maxExponent + normalExp + 1, 0); + WasmValVec params(5), result(1); + auto* trap = + ww(floatSet_wrap, + &import[58], + params, + result, + Number::maxExponent + normalExp + 1, + 1ll, + 0, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatSet(1, Number::minExponent + normalExp - 1, 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); + // hfs.floatSet(1, Number::minExponent + normalExp - 1, 0); + WasmValVec params(5), result(1); + auto* trap = + ww(floatSet_wrap, + &import[58], + params, + result, + Number::minExponent + normalExp - 1, + 1ll, + 0, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == floatIntZero); } { - auto const result = hfs.floatSet(1, Number::maxExponent + normalExp, 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMaxExp); + // hfs.floatSet(1, Number::maxExponent + normalExp, 0); + WasmValVec params(5), result(1); + auto* trap = + ww(floatSet_wrap, + &import[58], + params, + result, + Number::maxExponent + normalExp, + 1ll, + 0, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == floatMaxExp); } { - auto const result = hfs.floatSet(-1, Number::maxExponent + normalExp, 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMinusMaxExp); + // hfs.floatSet(-1, Number::maxExponent + normalExp, 0); + WasmValVec params(5), result(1); + auto* trap = + ww(floatSet_wrap, + &import[58], + params, + result, + Number::maxExponent + normalExp, + -1ll, + 0, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == floatMinusMaxExp); } { - auto const result = hfs.floatSet(1, Number::maxExponent + normalExp - 1, 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatPreMaxExp); + // hfs.floatSet(1, Number::maxExponent + normalExp - 1, 0); + WasmValVec params(5), result(1); + auto* trap = + ww(floatSet_wrap, + &import[58], + params, + result, + Number::maxExponent + normalExp - 1, + 1ll, + 0, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == floatPreMaxExp); } { - auto const result = hfs.floatSet(STAmount::cMaxValue, STAmount::cMaxOffset, 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMaxIOU); + // hfs.floatSet(STAmount::cMaxValue, STAmount::cMaxOffset, 0); + WasmValVec params(5), result(1); + auto* trap = + ww(floatSet_wrap, + &import[58], + params, + result, + STAmount::cMaxOffset, + static_cast(STAmount::cMaxValue), + 0, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == floatMaxIOU); } { - auto const result = hfs.floatSet(1, Number::minExponent - normalExp, 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMinExp); + // hfs.floatSet(1, Number::minExponent + normalExp, 0); + WasmValVec params(5), result(1); + auto* trap = + ww(floatSet_wrap, + &import[58], + params, + result, + Number::minExponent - normalExp, + 1ll, + 0, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == floatMinExp); } { - auto const result = hfs.floatSet(10, -1, 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == float1); + // hfs.floatSet(10, -1, 0); + WasmValVec params(5), result(1); + auto* trap = ww(floatSet_wrap, &import[58], params, result, -1, 10ll, 0, FLOAT_SIZE, 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == float1); + } + + { + // hfs.floatSet(1, Number::maxExponent + normalExp + 1, 0); + WasmValVec params(5), result(1); + auto* trap = + ww(floatSet_wrap, + &import[58], + params, + result, + Number::maxExponent + normalExp + 1, + 1ll, + 0, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } } @@ -2348,38 +4503,111 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); { - auto const result = hfs.floatCompare(Slice(), Slice()); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatCompare(Slice(), Slice()); + WasmValVec params(4), result(1); + auto* trap = ww(floatCompare_wrap, &import[59], params, result, 0, 0, 0, 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatCompare(makeSlice(floatInvalidZero), Slice()); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatCompare(makeSlice(floatInvalidZero), Slice()); + WasmValVec params(4), result(1); + vrt.setBytes(0, floatInvalidZero.data(), floatInvalidZero.size()); + auto* trap = ww(floatCompare_wrap, &import[59], params, result, 0, FLOAT_SIZE, 0, 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatCompare(makeSlice(float1), makeSlice(invalid)); - BEAST_EXPECT(!result && result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatCompare(makeSlice(float1), makeSlice(invalid)); + WasmValVec params(4), result(1); + vrt.setBytes(0, float1.data(), float1.size()); + vrt.setBytes(FLOAT_SIZE, invalid.data(), invalid.size()); + auto* trap = + ww(floatCompare_wrap, + &import[59], + params, + result, + 0, + FLOAT_SIZE, + FLOAT_SIZE, + invalid.size()); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatCompare(makeSlice(floatIntMin), makeSlice(floatIntZero)); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == 2); + // hfs.floatCompare(makeSlice(floatIntMin), makeSlice(floatIntZero)); + WasmValVec params(4), result(1); + vrt.setBytes(0, floatIntMin.data(), floatIntMin.size()); + vrt.setBytes(FLOAT_SIZE, floatIntZero.data(), floatIntZero.size()); + auto* trap = + ww(floatCompare_wrap, + &import[59], + params, + result, + 0, + FLOAT_SIZE, + FLOAT_SIZE, + FLOAT_SIZE); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 2); } { - auto const result = hfs.floatCompare(makeSlice(floatIntMax), makeSlice(floatIntZero)); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == 1); + // hfs.floatCompare(makeSlice(floatIntMax), makeSlice(floatIntZero)); + WasmValVec params(4), result(1); + vrt.setBytes(0, floatIntMax.data(), floatIntMax.size()); + vrt.setBytes(FLOAT_SIZE, floatIntZero.data(), floatIntZero.size()); + auto* trap = + ww(floatCompare_wrap, + &import[59], + params, + result, + 0, + FLOAT_SIZE, + FLOAT_SIZE, + FLOAT_SIZE); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 1); } { - auto const result = hfs.floatCompare(makeSlice(float1), makeSlice(float1)); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == 0); + // hfs.floatCompare(makeSlice(float1), makeSlice(float1)); + WasmValVec params(4), result(1); + vrt.setBytes(0, float1.data(), float1.size()); + vrt.setBytes(FLOAT_SIZE, float1.data(), float1.size()); + auto* trap = + ww(floatCompare_wrap, + &import[59], + params, + result, + 0, + FLOAT_SIZE, + FLOAT_SIZE, + FLOAT_SIZE); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 0); } } @@ -2393,41 +4621,132 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); { - auto const result = hfs.floatAdd(Slice(), Slice(), -1); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatAdd(Slice(), Slice(), -1); + WasmValVec params(7), result(1); + auto* trap = + ww(floatAdd_wrap, &import[60], params, result, 0, 0, 0, 0, 0, FLOAT_SIZE, -1); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatAdd(Slice(), Slice(), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatAdd(Slice(), Slice(), 0); + WasmValVec params(7), result(1); + auto* trap = + ww(floatAdd_wrap, &import[60], params, result, 0, 0, 0, 0, 0, FLOAT_SIZE, 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatAdd(makeSlice(float1), makeSlice(invalid), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatAdd(makeSlice(float1), makeSlice(invalid), 0); + WasmValVec params(7), result(1); + vrt.setBytes(0, float1.data(), float1.size()); + vrt.setBytes(FLOAT_SIZE, invalid.data(), invalid.size()); + auto* trap = + ww(floatAdd_wrap, + &import[60], + params, + result, + 0, + FLOAT_SIZE, + FLOAT_SIZE, + invalid.size(), + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { + // hfs.floatAdd(makeSlice(floatMaxIOU), makeSlice(floatMaxExp), 0); // max IOU is too small to make any change - auto const result = hfs.floatAdd(makeSlice(floatMaxIOU), makeSlice(floatMaxExp), 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMaxExp); + WasmValVec params(7), result(1); + vrt.setBytes(0, floatMaxIOU.data(), floatMaxIOU.size()); + vrt.setBytes(FLOAT_SIZE, floatMaxExp.data(), floatMaxExp.size()); + auto* trap = + ww(floatAdd_wrap, + &import[60], + params, + result, + 0, + FLOAT_SIZE, + FLOAT_SIZE, + FLOAT_SIZE, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 4); + BEAST_EXPECT(resultBytes == floatMaxExp); } { - auto const result = hfs.floatAdd(makeSlice(floatIntMin), makeSlice(floatIntZero), 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntMin); + // hfs.floatAdd(makeSlice(floatIntMin), makeSlice(floatIntZero), 0); + WasmValVec params(7), result(1); + vrt.setBytes(0, floatIntMin.data(), floatIntMin.size()); + vrt.setBytes(FLOAT_SIZE, floatIntZero.data(), floatIntZero.size()); + auto* trap = + ww(floatAdd_wrap, + &import[60], + params, + result, + 0, + FLOAT_SIZE, + FLOAT_SIZE, + FLOAT_SIZE, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 4); + BEAST_EXPECT(resultBytes == floatIntMin); } { - // Number can't hold int64.min, it is rounded and we get -3, not -1 - auto const result = hfs.floatAdd(makeSlice(floatIntMax), makeSlice(floatIntMin), 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMinus3); + // hfs.floatAdd(makeSlice(floatIntMax), makeSlice(floatIntMin), 0);// + // Number can't hold int64.min, it is rounded and we get -3, not -1 + WasmValVec params(7), result(1); + vrt.setBytes(0, floatIntMax.data(), floatIntMax.size()); + vrt.setBytes(FLOAT_SIZE, floatIntMin.data(), floatIntMin.size()); + auto* trap = + ww(floatAdd_wrap, + &import[60], + params, + result, + 0, + FLOAT_SIZE, + FLOAT_SIZE, + FLOAT_SIZE, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 4); + BEAST_EXPECT(resultBytes == floatMinus3); } } @@ -2441,41 +4760,130 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); { - auto const result = hfs.floatSubtract(Slice(), Slice(), -1); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatSubtract(Slice(), Slice(), -1); + WasmValVec params(7), result(1); + auto* trap = + ww(floatSubtract_wrap, &import[61], params, result, 0, 0, 0, 0, 0, FLOAT_SIZE, -1); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatSubtract(Slice(), Slice(), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatSubtract(Slice(), Slice(), 0); + WasmValVec params(7), result(1); + auto* trap = + ww(floatSubtract_wrap, &import[61], params, result, 0, 0, 0, 0, 0, FLOAT_SIZE, 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatSubtract(makeSlice(float1), makeSlice(invalid), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatSubtract(makeSlice(float1), makeSlice(invalid), 0); + WasmValVec params(7), result(1); + vrt.setBytes(0, float1.data(), float1.size()); + vrt.setBytes(FLOAT_SIZE, invalid.data(), invalid.size()); + auto* trap = + ww(floatSubtract_wrap, + &import[61], + params, + result, + 0, + FLOAT_SIZE, + FLOAT_SIZE, + invalid.size(), + FLOAT_SIZE * 2, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = - hfs.floatSubtract(makeSlice(floatMinusMaxExp), makeSlice(floatMaxIOU), 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMinusMaxExp); + // hfs.floatSubtract(makeSlice(floatMinusMaxExp), makeSlice(floatMaxIOU), 0); + WasmValVec params(7), result(1); + vrt.setBytes(0, floatMinusMaxExp.data(), floatMinusMaxExp.size()); + vrt.setBytes(FLOAT_SIZE, floatMaxIOU.data(), floatMaxIOU.size()); + auto* trap = + ww(floatSubtract_wrap, + &import[61], + params, + result, + 0, + FLOAT_SIZE, + FLOAT_SIZE, + FLOAT_SIZE, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 4); + BEAST_EXPECT(resultBytes == floatMinusMaxExp); } { - auto const result = - hfs.floatSubtract(makeSlice(floatIntMin), makeSlice(floatIntZero), 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntMin); + // hfs.floatSubtract(makeSlice(floatIntMin), makeSlice(floatIntZero), 0); + WasmValVec params(7), result(1); + vrt.setBytes(0, floatIntMin.data(), floatIntMin.size()); + vrt.setBytes(FLOAT_SIZE, floatIntZero.data(), floatIntZero.size()); + auto* trap = + ww(floatSubtract_wrap, + &import[61], + params, + result, + 0, + FLOAT_SIZE, + FLOAT_SIZE, + FLOAT_SIZE, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 4); + BEAST_EXPECT(resultBytes == floatIntMin); } { - auto const result = hfs.floatSubtract(makeSlice(floatIntZero), makeSlice(float1), 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMinus1); + // hfs.floatSubtract(makeSlice(floatIntZero), makeSlice(float1), 0); + WasmValVec params(7), result(1); + vrt.setBytes(0, floatIntZero.data(), floatIntZero.size()); + vrt.setBytes(FLOAT_SIZE, float1.data(), float1.size()); + auto* trap = + ww(floatSubtract_wrap, + &import[61], + params, + result, + 0, + FLOAT_SIZE, + FLOAT_SIZE, + FLOAT_SIZE, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 4); + BEAST_EXPECT(resultBytes == floatMinus1); } } @@ -2489,46 +4897,154 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); { - auto const result = hfs.floatMultiply(Slice(), Slice(), -1); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatMultiply(Slice(), Slice(), -1); + WasmValVec params(7), result(1); + auto* trap = + ww(floatMultiply_wrap, &import[62], params, result, 0, 0, 0, 0, 0, FLOAT_SIZE, -1); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatMultiply(Slice(), Slice(), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatMultiply(Slice(), Slice(), 0); + WasmValVec params(7), result(1); + auto* trap = + ww(floatMultiply_wrap, &import[62], params, result, 0, 0, 0, 0, 0, FLOAT_SIZE, 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatMultiply(makeSlice(float1), makeSlice(invalid), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatMultiply(makeSlice(float1), makeSlice(invalid), 0); + WasmValVec params(7), result(1); + vrt.setBytes(0, float1.data(), float1.size()); + vrt.setBytes(FLOAT_SIZE, invalid.data(), invalid.size()); + auto* trap = + ww(floatMultiply_wrap, + &import[62], + params, + result, + 0, + FLOAT_SIZE, + FLOAT_SIZE, + invalid.size(), + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatMultiply(makeSlice(floatMax), makeSlice(float1More), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); + // hfs.floatMultiply(makeSlice(floatMax), makeSlice(float1More), 0); + WasmValVec params(7), result(1); + vrt.setBytes(0, floatMax.data(), floatMax.size()); + vrt.setBytes(FLOAT_SIZE, float1More.data(), float1More.size()); + auto* trap = + ww(floatMultiply_wrap, + &import[62], + params, + result, + 0, + FLOAT_SIZE, + FLOAT_SIZE, + FLOAT_SIZE, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_COMPUTATION_ERROR)); } { - auto const result = hfs.floatMultiply(makeSlice(float1), makeSlice(float1), 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == float1); + // hfs.floatMultiply(makeSlice(float1), makeSlice(float1), 0); + WasmValVec params(7), result(1); + vrt.setBytes(0, float1.data(), float1.size()); + vrt.setBytes(FLOAT_SIZE, float1.data(), float1.size()); + auto* trap = + ww(floatMultiply_wrap, + &import[62], + params, + result, + 0, + FLOAT_SIZE, + FLOAT_SIZE, + FLOAT_SIZE, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 4); + BEAST_EXPECT(resultBytes == float1); } { - auto const result = - hfs.floatMultiply(makeSlice(floatIntZero), makeSlice(floatMaxIOU), 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); + // hfs.floatMultiply(makeSlice(floatIntZero), makeSlice(floatMaxIOU), 0); + WasmValVec params(7), result(1); + vrt.setBytes(0, floatIntZero.data(), floatIntZero.size()); + vrt.setBytes(FLOAT_SIZE, floatMaxIOU.data(), floatMaxIOU.size()); + auto* trap = + ww(floatMultiply_wrap, + &import[62], + params, + result, + 0, + FLOAT_SIZE, + FLOAT_SIZE, + FLOAT_SIZE, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 4); + BEAST_EXPECT(resultBytes == floatIntZero); } { - auto const result = hfs.floatMultiply(makeSlice(float10), makeSlice(floatPreMaxExp), 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMaxExp); + // hfs.floatMultiply(makeSlice(float10), makeSlice(floatPreMaxExp), 0); + WasmValVec params(7), result(1); + vrt.setBytes(0, float10.data(), float10.size()); + vrt.setBytes(FLOAT_SIZE, floatPreMaxExp.data(), floatPreMaxExp.size()); + auto* trap = + ww(floatMultiply_wrap, + &import[62], + params, + result, + 0, + FLOAT_SIZE, + FLOAT_SIZE, + FLOAT_SIZE, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 4); + BEAST_EXPECT(resultBytes == floatMaxExp); } } @@ -2542,50 +5058,153 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); { - auto const result = hfs.floatDivide(Slice(), Slice(), -1); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatDivide(Slice(), Slice(), -1); + WasmValVec params(7), result(1); + auto* trap = + ww(floatDivide_wrap, &import[63], params, result, 0, 0, 0, 0, 0, FLOAT_SIZE, -1); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatDivide(Slice(), Slice(), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatDivide(Slice(), Slice(), 0); + WasmValVec params(7), result(1); + auto* trap = + ww(floatDivide_wrap, &import[63], params, result, 0, 0, 0, 0, 0, FLOAT_SIZE, 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } - { - auto const result = hfs.floatDivide(makeSlice(float1), makeSlice(invalid), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + { // hfs.floatDivide(makeSlice(float1), makeSlice(invalid), 0); + WasmValVec params(7), result(1); + vrt.setBytes(0, float1.data(), float1.size()); + vrt.setBytes(FLOAT_SIZE, invalid.data(), invalid.size()); + auto* trap = + ww(floatDivide_wrap, + &import[63], + params, + result, + 0, + FLOAT_SIZE, + FLOAT_SIZE, + invalid.size(), + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } - { - auto const result = hfs.floatDivide(makeSlice(float1), makeSlice(floatIntZero), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); + { // hfs.floatDivide(makeSlice(float1), makeSlice(floatIntZero), 0); + WasmValVec params(7), result(1); + vrt.setBytes(0, float1.data(), float1.size()); + vrt.setBytes(FLOAT_SIZE, floatIntZero.data(), floatIntZero.size()); + auto* trap = + ww(floatDivide_wrap, + &import[63], + params, + result, + 0, + FLOAT_SIZE, + FLOAT_SIZE, + FLOAT_SIZE, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_COMPUTATION_ERROR)); } - { + { // hfs.floatDivide(makeSlice(floatMax), makeSlice(*y), 0); auto const y = hfs.floatSet(STAmount::cMaxValue, -normalExp - 1, 0); // 0.9999999... if (BEAST_EXPECT(y)) { - auto const result = hfs.floatDivide(makeSlice(floatMax), makeSlice(*y), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); + WasmValVec params(7), result(1); + vrt.setBytes(0, floatMax.data(), floatMax.size()); + vrt.setBytes(FLOAT_SIZE, y->data(), y->size()); + auto* trap = + ww(floatDivide_wrap, + &import[63], + params, + result, + 0, + FLOAT_SIZE, + FLOAT_SIZE, + FLOAT_SIZE, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_COMPUTATION_ERROR)); } } - { - auto const result = hfs.floatDivide(makeSlice(floatIntZero), makeSlice(float1), 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); + { // hfs.floatDivide(makeSlice(floatIntZero), makeSlice(float1), 0); + WasmValVec params(7), result(1); + vrt.setBytes(0, floatIntZero.data(), floatIntZero.size()); + vrt.setBytes(FLOAT_SIZE, float1.data(), float1.size()); + auto* trap = + ww(floatDivide_wrap, + &import[63], + params, + result, + 0, + FLOAT_SIZE, + FLOAT_SIZE, + FLOAT_SIZE, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 4); + BEAST_EXPECT(resultBytes == floatIntZero); } - { - auto const result = hfs.floatDivide(makeSlice(floatMaxExp), makeSlice(float10), 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatPreMaxExp); + { // hfs.floatDivide(makeSlice(floatMaxExp), makeSlice(float10), 0); + WasmValVec params(7), result(1); + vrt.setBytes(0, floatMaxExp.data(), floatMaxExp.size()); + vrt.setBytes(FLOAT_SIZE, float10.data(), float10.size()); + auto* trap = + ww(floatDivide_wrap, + &import[63], + params, + result, + 0, + FLOAT_SIZE, + FLOAT_SIZE, + FLOAT_SIZE, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 4); + BEAST_EXPECT(resultBytes == floatPreMaxExp); } } @@ -2599,61 +5218,183 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); - { - auto const result = hfs.floatRoot(Slice(), 2, -1); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); - } - - { - auto const result = hfs.floatRoot(makeSlice(invalid), 3, 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); - } - - { - auto const result = hfs.floatRoot(makeSlice(float1), -2, 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); - } - - { - auto const result = hfs.floatRoot(makeSlice(floatIntZero), 2, 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); - } - - { - auto const result = hfs.floatRoot(makeSlice(floatMaxIOU), 1, 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMaxIOU); + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); + + { // hfs.floatRoot(Slice(), 2, -1); + WasmValVec params(6), result(1); + auto* trap = + ww(floatRoot_wrap, &import[64], params, result, 0, 0, 2, 0, FLOAT_SIZE, -1); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + } + + { // hfs.floatRoot(makeSlice(invalid), 3, 0); + WasmValVec params(6), result(1); + vrt.setBytes(0, invalid.data(), invalid.size()); + auto* trap = + ww(floatRoot_wrap, + &import[64], + params, + result, + 0, + invalid.size(), + 3, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + } + + { // hfs.floatRoot(makeSlice(float1), -2, 0); + WasmValVec params(6), result(1); + vrt.setBytes(0, float1.data(), float1.size()); + auto* trap = + ww(floatRoot_wrap, + &import[64], + params, + result, + 0, + FLOAT_SIZE, + -2, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + } + + { // hfs.floatRoot(makeSlice(floatIntZero), 2, 0); + WasmValVec params(6), result(1); + vrt.setBytes(0, floatIntZero.data(), floatIntZero.size()); + auto* trap = + ww(floatRoot_wrap, + &import[64], + params, + result, + 0, + FLOAT_SIZE, + 2, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 3); + BEAST_EXPECT(resultBytes == floatIntZero); + } + + { // hfs.floatRoot(makeSlice(floatMaxIOU), 1, 0); + WasmValVec params(6), result(1); + vrt.setBytes(0, floatMaxIOU.data(), floatMaxIOU.size()); + auto* trap = + ww(floatRoot_wrap, + &import[64], + params, + result, + 0, + FLOAT_SIZE, + 1, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 3); + BEAST_EXPECT(resultBytes == floatMaxIOU); } { + // hfs.floatRoot(makeSlice(*x), 2, 0); auto const x = hfs.floatSet(100, 0, 0); // 100 if (BEAST_EXPECT(x)) { - auto const result = hfs.floatRoot(makeSlice(*x), 2, 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == float10); + WasmValVec params(6), result(1); + vrt.setBytes(0, x->data(), x->size()); + auto* trap = + ww(floatRoot_wrap, + &import[64], + params, + result, + 0, + FLOAT_SIZE, + 2, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 3); + BEAST_EXPECT(resultBytes == float10); } } { + // hfs.floatRoot(makeSlice(*x), 3, 0); auto const x = hfs.floatSet(1000, 0, 0); // 1000 if (BEAST_EXPECT(x)) { - auto const result = hfs.floatRoot(makeSlice(*x), 3, 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == float10); + WasmValVec params(6), result(1); + vrt.setBytes(0, x->data(), x->size()); + auto* trap = + ww(floatRoot_wrap, + &import[64], + params, + result, + 0, + FLOAT_SIZE, + 3, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 3); + BEAST_EXPECT(resultBytes == float10); } } { + // hfs.floatRoot(makeSlice(*x), 2, 0); auto const x = hfs.floatSet(1, -2, 0); // 0.01 auto const y = hfs.floatSet(1, -1, 0); // 0.1 if (BEAST_EXPECT(x && y)) { - auto const result = hfs.floatRoot(makeSlice(*x), 2, 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == *y); + WasmValVec params(6), result(1); + vrt.setBytes(0, x->data(), x->size()); + auto* trap = + ww(floatRoot_wrap, + &import[64], + params, + result, + 0, + FLOAT_SIZE, + 2, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 3); + BEAST_EXPECT(resultBytes == *y); } } } @@ -2668,64 +5409,201 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); - { - auto const result = hfs.floatPower(Slice(), 2, -1); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); + + { // hfs.floatPower(Slice(), 2, -1); + WasmValVec params(6), result(1); + auto* trap = + ww(floatPower_wrap, &import[65], params, result, 0, 0, 2, 0, FLOAT_SIZE, -1); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + } + + { // hfs.floatPower(makeSlice(invalid), 3, 0); + WasmValVec params(6), result(1); + vrt.setBytes(0, invalid.data(), invalid.size()); + auto* trap = + ww(floatPower_wrap, + &import[65], + params, + result, + 0, + invalid.size(), + 3, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + } + + { // hfs.floatPower(makeSlice(float1), -2, 0); + WasmValVec params(6), result(1); + vrt.setBytes(0, float1.data(), float1.size()); + auto* trap = + ww(floatPower_wrap, + &import[65], + params, + result, + 0, + FLOAT_SIZE, + -2, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatPower(makeSlice(invalid), 3, 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatPower(makeSlice(floatMax), 2, 0); + WasmValVec params(6), result(1); + vrt.setBytes(0, floatMax.data(), floatMax.size()); + auto* trap = + ww(floatPower_wrap, + &import[65], + params, + result, + 0, + FLOAT_SIZE, + 2, + FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_COMPUTATION_ERROR)); } { - auto const result = hfs.floatPower(makeSlice(float1), -2, 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatPower(makeSlice(floatMax), Number::maxExponent + 1, 0); + WasmValVec params(6), result(1); + vrt.setBytes(0, floatMax.data(), floatMax.size()); + auto* trap = + ww(floatPower_wrap, + &import[65], + params, + result, + 0, + FLOAT_SIZE, + Number::maxExponent + 1, + FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatPower(makeSlice(floatMax), 2, 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); - } - - { - auto const result = hfs.floatPower(makeSlice(floatMax), Number::maxExponent + 1, 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); - } - - { - auto const result = hfs.floatPower(makeSlice(floatMaxIOU), 0, 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == float1); - } - - { - auto const result = hfs.floatPower(makeSlice(floatMaxIOU), 1, 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMaxIOU); + // hfs.floatPower(makeSlice(floatMaxIOU), 0, 0); + WasmValVec params(6), result(1); + vrt.setBytes(0, floatMaxIOU.data(), floatMaxIOU.size()); + auto* trap = + ww(floatPower_wrap, + &import[65], + params, + result, + 0, + FLOAT_SIZE, + 0, + FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 3); + BEAST_EXPECT(resultBytes == float1); + } + + { // hfs.floatPower(makeSlice(floatMaxIOU), 1, 0); + WasmValVec params(6), result(1); + vrt.setBytes(0, floatMaxIOU.data(), floatMaxIOU.size()); + auto* trap = + ww(floatPower_wrap, + &import[65], + params, + result, + 0, + FLOAT_SIZE, + 1, + FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 3); + BEAST_EXPECT(resultBytes == floatMaxIOU); } { + // hfs.floatPower(makeSlice(float10), 2, 0); auto const x = hfs.floatSet(100, 0, 0); // 100 if (BEAST_EXPECT(x)) { - auto const result = hfs.floatPower(makeSlice(float10), 2, 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == *x); + WasmValVec params(6), result(1); + vrt.setBytes(0, float10.data(), float10.size()); + auto* trap = + ww(floatPower_wrap, + &import[65], + params, + result, + 0, + FLOAT_SIZE, + 2, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 3); + BEAST_EXPECT(resultBytes == *x); } } - { + { // hfs.floatPower(makeSlice(*x), 2, 0); auto const x = hfs.floatSet(1, -1, 0); // 0.1 auto const y = hfs.floatSet(1, -2, 0); // 0.01 if (BEAST_EXPECT(x && y)) { - auto const result = hfs.floatPower(makeSlice(*x), 2, 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == *y); + WasmValVec params(6), result(1); + vrt.setBytes(0, x->data(), x->size()); + auto* trap = + ww(floatPower_wrap, + &import[65], + params, + result, + 0, + FLOAT_SIZE, + 2, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 3); + BEAST_EXPECT(resultBytes == *y); } } } @@ -2740,55 +5618,120 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); - { - auto const result = hfs.floatLog(Slice(), -1); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); - } + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); - { - auto const result = hfs.floatLog(makeSlice(invalid), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + { // hfs.floatLog(Slice(), -1); + WasmValVec params(5), result(1); + auto* trap = ww(floatLog_wrap, &import[66], params, result, 0, 0, 0, FLOAT_SIZE, -1); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { auto const x = hfs.floatSet(32'786, 0, 0); if (BEAST_EXPECT(x)) { - auto const result = hfs.floatLog(makeSlice(floatMaxExp), 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == *x); + WasmValVec params(5), result(1); + vrt.setBytes(0, floatMaxExp.data(), floatMaxExp.size()); + auto* trap = + ww(floatLog_wrap, + &import[66], + params, + result, + 0, + FLOAT_SIZE, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == *x); } } { + // hfs.floatLog(makeSlice(*x), 0); auto const x = hfs.floatSet(100, 0, 0); // 100 if (BEAST_EXPECT(x)) { - auto const result = hfs.floatLog(makeSlice(*x), 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == float2); + WasmValVec params(5), result(1); + vrt.setBytes(0, x->data(), x->size()); + auto* trap = + ww(floatLog_wrap, + &import[66], + params, + result, + 0, + FLOAT_SIZE, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == float2); } } { + // hfs.floatLog(makeSlice(*x), 0); auto const x = hfs.floatSet(1000, 0, 0); // 1000 auto const y = hfs.floatSet(3, 0, 0); // 3 if (BEAST_EXPECT(x && y)) { - auto const result = hfs.floatLog(makeSlice(*x), 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == *y); + WasmValVec params(5), result(1); + vrt.setBytes(0, x->data(), x->size()); + auto* trap = + ww(floatLog_wrap, + &import[66], + params, + result, + 0, + FLOAT_SIZE, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == *y); } } { + // hfs.floatLog(makeSlice(*x), 0); auto const x = hfs.floatSet(1, -2, 0); // 0.01 auto const y = hfs.floatSet(-1'999'999'999'999'999'999, -normalExp, 0); // -2 if (BEAST_EXPECT(x && y)) { - auto const result = hfs.floatLog(makeSlice(*x), 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == *y); + WasmValVec params(5), result(1); + vrt.setBytes(0, x->data(), x->size()); + auto* trap = + ww(floatLog_wrap, + &import[66], + params, + result, + 0, + FLOAT_SIZE, + 2 * FLOAT_SIZE, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == *y); } } } @@ -2824,43 +5767,130 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); { + // hfs.floatFromSTAmount(amount, -1); STAmount const amount = XRP(100); - auto const result = hfs.floatFromSTAmount(amount, -1); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + Bytes amountBytes = toBytes(amount); + vrt.setBytes(0, amountBytes.data(), amountBytes.size()); + WasmValVec params(5), result(1); + auto* trap = + ww(floatFromSTAmount_wrap, + &import[52], + params, + result, + 0, + amountBytes.size(), + 256, + FLOAT_SIZE, + -1); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { + // hfs.floatFromSTAmount(amount, 4); STAmount const amount = XRP(100); - auto const result = hfs.floatFromSTAmount(amount, 4); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + Bytes amountBytes = toBytes(amount); + vrt.setBytes(0, amountBytes.data(), amountBytes.size()); + WasmValVec params(5), result(1); + auto* trap = + ww(floatFromSTAmount_wrap, + &import[52], + params, + result, + 0, + amountBytes.size(), + 256, + FLOAT_SIZE, + 4); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { + // hfs.floatFromSTAmount(amount, 0); STAmount const amount = XRP(0); - auto const result = hfs.floatFromSTAmount(amount, 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); + Bytes amountBytes = toBytes(amount); + vrt.setBytes(0, amountBytes.data(), amountBytes.size()); + WasmValVec params(5), result(1); + auto* trap = + ww(floatFromSTAmount_wrap, + &import[52], + params, + result, + 0, + amountBytes.size(), + 256, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == floatIntZero); } { + // hfs.floatFromSTAmount(amount, 0); STAmount const amount = XRP(-1); auto const y = hfs.floatSet(-1 * 1'000'000, 0, 0); if (BEAST_EXPECT(y)) { - auto const result = hfs.floatFromSTAmount(amount, 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == *y); + Bytes amountBytes = toBytes(amount); + vrt.setBytes(0, amountBytes.data(), amountBytes.size()); + WasmValVec params(5), result(1); + auto* trap = + ww(floatFromSTAmount_wrap, + &import[52], + params, + result, + 0, + amountBytes.size(), + 256, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == *y); } } { + // hfs.floatFromSTAmount(amount, 0); auto const y = hfs.floatSet(9223372036854776, 3, 0); STAmount const amount(noIssue(), std::numeric_limits::max()); - auto const result = hfs.floatFromSTAmount(amount, 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == *y); + Bytes amountBytes = toBytes(amount); + vrt.setBytes(0, amountBytes.data(), amountBytes.size()); + WasmValVec params(5), result(1); + auto* trap = + ww(floatFromSTAmount_wrap, + &import[52], + params, + result, + 0, + amountBytes.size(), + 256, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == *y); } { @@ -2868,7 +5898,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite try { STAmount const amount(noIssue(), -1, Number::maxExponent + normalExp); - [[maybe_unused]] auto const r = hfs.floatFromSTAmount(amount, 0); + [[maybe_unused]] Bytes const amountBytes = toBytes(amount); } catch (...) { @@ -2880,17 +5910,51 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const USD = env.master["USD"]; { + // hfs.floatFromSTAmount(amount, 0); STAmount const amount( IOUAmount(STAmount::cMinValue, STAmount::cMinOffset), USD.issue()); - auto const result = hfs.floatFromSTAmount(amount, 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMinIOU); + Bytes amountBytes = toBytes(amount); + vrt.setBytes(0, amountBytes.data(), amountBytes.size()); + WasmValVec params(5), result(1); + auto* trap = + ww(floatFromSTAmount_wrap, + &import[52], + params, + result, + 0, + amountBytes.size(), + 256, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == floatMinIOU); } { + // hfs.floatFromSTAmount(amount, 0); STAmount const amount( IOUAmount(STAmount::cMaxValue, STAmount::cMaxOffset), USD.issue()); - auto const result = hfs.floatFromSTAmount(amount, 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMaxIOU); + Bytes amountBytes = toBytes(amount); + vrt.setBytes(0, amountBytes.data(), amountBytes.size()); + WasmValVec params(5), result(1); + auto* trap = + ww(floatFromSTAmount_wrap, + &import[52], + params, + result, + 0, + amountBytes.size(), + 256, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == floatMaxIOU); } } @@ -2904,34 +5968,104 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); // Test with invalid rounding mode { + // hfs.floatFromSTNumber(num, -1); STNumber const num(sfNumber, Number(123, 0)); - auto const result = hfs.floatFromSTNumber(num, -1); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + Bytes numBytes = toBytes(num); + vrt.setBytes(0, numBytes.data(), numBytes.size()); + WasmValVec params(5), result(1); + auto* trap = + ww(floatFromSTNumber_wrap, + &import[53], + params, + result, + 0, + numBytes.size(), + 256, + FLOAT_SIZE, + -1); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { + // hfs.floatFromSTNumber(num, 4); STNumber const num(sfNumber, Number(123, 0)); - auto const result = hfs.floatFromSTNumber(num, 4); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + Bytes numBytes = toBytes(num); + vrt.setBytes(0, numBytes.data(), numBytes.size()); + WasmValVec params(5), result(1); + auto* trap = + ww(floatFromSTNumber_wrap, + &import[53], + params, + result, + 0, + numBytes.size(), + 256, + FLOAT_SIZE, + 4); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { + // hfs.floatFromSTNumber(num, 0); STNumber const num( sfNumber, Number(std::numeric_limits::max(), 0, Number::normalized())); - auto const result = hfs.floatFromSTNumber(num, 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatUIntMax); + Bytes numBytes = toBytes(num); + vrt.setBytes(0, numBytes.data(), numBytes.size()); + WasmValVec params(5), result(1); + auto* trap = + ww(floatFromSTNumber_wrap, + &import[53], + params, + result, + 0, + numBytes.size(), + 256, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == floatUIntMax); } { + // hfs.floatFromSTNumber(num, 0); STNumber const num(sfNumber, Number(-1, Number::maxExponent + normalExp)); - auto const result = hfs.floatFromSTNumber(num, 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMinusMaxExp); + Bytes numBytes = toBytes(num); + vrt.setBytes(0, numBytes.data(), numBytes.size()); + WasmValVec params(5), result(1); + auto* trap = + ww(floatFromSTNumber_wrap, + &import[53], + params, + result, + 0, + numBytes.size(), + 256, + FLOAT_SIZE, + 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == floatMinusMaxExp); } } @@ -2945,105 +6079,201 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); { - auto const result = hfs.floatToInt(makeSlice(float1), -1); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatToInt(makeSlice(float1), -1); + vrt.setBytes(0, float1.data(), float1.size()); + WasmValVec params(5), result(1); + auto* trap = + ww(floatToInt_wrap, &import[54], params, result, 0, FLOAT_SIZE, 256, 8, -1); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatToInt(makeSlice(float1), 4); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatToInt(makeSlice(float1), 4); + vrt.setBytes(0, float1.data(), float1.size()); + WasmValVec params(5), result(1); + auto* trap = ww(floatToInt_wrap, &import[54], params, result, 0, FLOAT_SIZE, 256, 8, 4); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatToInt(Slice(), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatToInt(Slice(), 0); + WasmValVec params(5), result(1); + auto* trap = ww(floatToInt_wrap, &import[54], params, result, 0, 0, 256, 8, 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatToInt(makeSlice(invalid), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatToInt(makeSlice(invalid), 0); + vrt.setBytes(0, invalid.data(), invalid.size()); + WasmValVec params(5), result(1); + auto* trap = ww(floatToInt_wrap, &import[54], params, result, 0, FLOAT_SIZE, 256, 8, 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatToInt(makeSlice(floatIntZero), 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == 0); + // hfs.floatToInt(makeSlice(floatIntZero), 0); + vrt.setBytes(0, floatIntZero.data(), floatIntZero.size()); + WasmValVec params(5), result(1); + auto* trap = ww(floatToInt_wrap, &import[54], params, result, 0, FLOAT_SIZE, 256, 8, 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 8); + auto const resultVal = vrt.getInt64(params, 2); + BEAST_EXPECT(resultVal == 0); // roundtrip - auto const result2 = hfs.floatFromInt(*result, 0); + auto const result2 = hfs.floatFromInt(resultVal, 0); BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == floatIntZero); } { - auto const result = hfs.floatToInt(makeSlice(float1), 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == 1); + // hfs.floatToInt(makeSlice(float1), 0); + vrt.setBytes(0, float1.data(), float1.size()); + WasmValVec params(5), result(1); + auto* trap = ww(floatToInt_wrap, &import[54], params, result, 0, FLOAT_SIZE, 256, 8, 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 8); + auto const resultVal = vrt.getInt64(params, 2); + BEAST_EXPECT(resultVal == 1); // roundtrip - auto const result2 = hfs.floatFromInt(*result, 0); + auto const result2 = hfs.floatFromInt(resultVal, 0); BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == float1); } { - auto const result = hfs.floatToInt(makeSlice(floatMinus1), 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == -1); + // hfs.floatToInt(makeSlice(floatMinus1), 0); + vrt.setBytes(0, floatMinus1.data(), floatMinus1.size()); + WasmValVec params(5), result(1); + auto* trap = ww(floatToInt_wrap, &import[54], params, result, 0, FLOAT_SIZE, 256, 8, 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 8); + auto const resultVal = vrt.getInt64(params, 2); + BEAST_EXPECT(resultVal == -1); // roundtrip - auto const result2 = hfs.floatFromInt(*result, 0); + auto const result2 = hfs.floatFromInt(resultVal, 0); BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == floatMinus1); } { - auto const result = hfs.floatToInt(makeSlice(floatIntMax), 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == std::numeric_limits::max()); + // hfs.floatToInt(makeSlice(floatIntMax), 0); + vrt.setBytes(0, floatIntMax.data(), floatIntMax.size()); + WasmValVec params(5), result(1); + auto* trap = ww(floatToInt_wrap, &import[54], params, result, 0, FLOAT_SIZE, 256, 8, 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 8); + auto const resultVal = vrt.getInt64(params, 2); + BEAST_EXPECT(resultVal == std::numeric_limits::max()); // roundtrip - auto const result2 = hfs.floatFromInt(*result, 0); + auto const result2 = hfs.floatFromInt(resultVal, 0); BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == floatIntMax); } { // Number can't hold int64.min, it is rounded and we get int64_t.min - 3, which doesn't // fit into int64 - auto const result = hfs.floatToInt(makeSlice(floatIntMin), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); + // hfs.floatToInt(makeSlice(floatIntMin), 0); + vrt.setBytes(0, floatIntMin.data(), floatIntMin.size()); + WasmValVec params(5), result(1); + auto* trap = ww(floatToInt_wrap, &import[54], params, result, 0, FLOAT_SIZE, 256, 8, 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_COMPUTATION_ERROR)); } { - auto const result = hfs.floatToInt(makeSlice(floatUIntMax), 0); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_COMPUTATION_ERROR); + // hfs.floatToInt(makeSlice(floatUIntMax), 0); + vrt.setBytes(0, floatUIntMax.data(), floatUIntMax.size()); + WasmValVec params(5), result(1); + auto* trap = ww(floatToInt_wrap, &import[54], params, result, 0, FLOAT_SIZE, 256, 8, 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_COMPUTATION_ERROR)); } // Test rounding modes with pi (3.141592653589793) { // to_nearest (mode 0): should round to 3 - auto const result = hfs.floatToInt(makeSlice(floatPi), 0); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == 3); + // hfs.floatToInt(makeSlice(floatPi), 0); + vrt.setBytes(0, floatPi.data(), floatPi.size()); + WasmValVec params(5), result(1); + auto* trap = ww(floatToInt_wrap, &import[54], params, result, 0, FLOAT_SIZE, 256, 8, 0); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 8); + auto const resultVal = vrt.getInt64(params, 2); + BEAST_EXPECT(resultVal == 3); } { // towards_zero (mode 1): should truncate to 3 - auto const result = hfs.floatToInt(makeSlice(floatPi), 1); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == 3); + // hfs.floatToInt(makeSlice(floatPi), 1); + vrt.setBytes(0, floatPi.data(), floatPi.size()); + WasmValVec params(5), result(1); + auto* trap = ww(floatToInt_wrap, &import[54], params, result, 0, FLOAT_SIZE, 256, 8, 1); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 8); + auto const resultVal = vrt.getInt64(params, 2); + BEAST_EXPECT(resultVal == 3); } { // downward (mode 2): should round down to 3 - auto const result = hfs.floatToInt(makeSlice(floatPi), 2); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == 3); + // hfs.floatToInt(makeSlice(floatPi), 2); + vrt.setBytes(0, floatPi.data(), floatPi.size()); + WasmValVec params(5), result(1); + auto* trap = ww(floatToInt_wrap, &import[54], params, result, 0, FLOAT_SIZE, 256, 8, 2); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 8); + auto const resultVal = vrt.getInt64(params, 2); + BEAST_EXPECT(resultVal == 3); } { // upward (mode 3): should round up to 4 - auto const result = hfs.floatToInt(makeSlice(floatPi), 3); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == 4); + // hfs.floatToInt(makeSlice(floatPi), 3); + vrt.setBytes(0, floatPi.data(), floatPi.size()); + WasmValVec params(5), result(1); + auto* trap = ww(floatToInt_wrap, &import[54], params, result, 0, FLOAT_SIZE, 256, 8, 3); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 8); + auto const resultVal = vrt.getInt64(params, 2); + BEAST_EXPECT(resultVal == 4); } } @@ -3057,93 +6287,252 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); { - auto const result = hfs.floatToMantissaAndExponent(makeSlice(invalid)); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatToMantissaAndExponent(makeSlice(invalid)); + vrt.setBytes(0, invalid.data(), invalid.size()); + WasmValVec params(6), result(1); + auto* trap = + ww(floatToMantissaAndExponent_wrap, + &import[55], + params, + result, + 0, + FLOAT_SIZE, + 256, + 8, + 512, + 4); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatToMantissaAndExponent(makeSlice(floatIntZero)); - BEAST_EXPECT(result) && BEAST_EXPECT(result->first == 0) && - BEAST_EXPECT(result->second == std::numeric_limits::min()); + // hfs.floatToMantissaAndExponent(makeSlice(floatIntZero)); + vrt.setBytes(0, floatIntZero.data(), floatIntZero.size()); + WasmValVec params(6), result(1); + auto* trap = + ww(floatToMantissaAndExponent_wrap, + &import[55], + params, + result, + 0, + FLOAT_SIZE, + 256, + 8, + 512, + 4); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const mantissa = vrt.getInt64(params, 2); + auto const exponent = vrt.getInt32(params, 4); + BEAST_EXPECT(mantissa == 0) && + BEAST_EXPECT(exponent == std::numeric_limits::min()); // roundtrip - auto const result2 = hfs.floatSet(result->first, result->second, 0); + auto const result2 = hfs.floatSet(mantissa, exponent, 0); BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == floatIntZero); } { - auto const result = hfs.floatToMantissaAndExponent(makeSlice(float1)); - BEAST_EXPECT(result) && BEAST_EXPECT(result->first == 1000000000000000000) && - BEAST_EXPECT(result->second == -normalExp); + // hfs.floatToMantissaAndExponent(makeSlice(float1)); + vrt.setBytes(0, float1.data(), float1.size()); + WasmValVec params(6), result(1); + auto* trap = + ww(floatToMantissaAndExponent_wrap, + &import[55], + params, + result, + 0, + FLOAT_SIZE, + 256, + 8, + 512, + 4); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const mantissa = vrt.getInt64(params, 2); + auto const exponent = vrt.getInt32(params, 4); + BEAST_EXPECT(mantissa == 1000000000000000000) && BEAST_EXPECT(exponent == -normalExp); // roundtrip - auto const result2 = hfs.floatSet(result->first, result->second, 0); + auto const result2 = hfs.floatSet(mantissa, exponent, 0); BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == float1); } { - auto const result = hfs.floatToMantissaAndExponent(makeSlice(floatMinus1)); - BEAST_EXPECT(result) && BEAST_EXPECT(result->first == -1000000000000000000) && - BEAST_EXPECT(result->second == -normalExp); + // hfs.floatToMantissaAndExponent(makeSlice(floatMinus1)); + vrt.setBytes(0, floatMinus1.data(), floatMinus1.size()); + WasmValVec params(6), result(1); + auto* trap = + ww(floatToMantissaAndExponent_wrap, + &import[55], + params, + result, + 0, + FLOAT_SIZE, + 256, + 8, + 512, + 4); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const mantissa = vrt.getInt64(params, 2); + auto const exponent = vrt.getInt32(params, 4); + BEAST_EXPECT(mantissa == -1000000000000000000) && BEAST_EXPECT(exponent == -normalExp); // roundtrip - auto const result2 = hfs.floatSet(result->first, result->second, 0); + auto const result2 = hfs.floatSet(mantissa, exponent, 0); BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == floatMinus1); } { - auto const result = hfs.floatToMantissaAndExponent(makeSlice(float10)); - BEAST_EXPECT(result) && BEAST_EXPECT(result->first == 1000000000000000000) && - BEAST_EXPECT(result->second == -normalExp + 1); + // hfs.floatToMantissaAndExponent(makeSlice(float10)); + vrt.setBytes(0, float10.data(), float10.size()); + WasmValVec params(6), result(1); + auto* trap = + ww(floatToMantissaAndExponent_wrap, + &import[55], + params, + result, + 0, + FLOAT_SIZE, + 256, + 8, + 512, + 4); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const mantissa = vrt.getInt64(params, 2); + auto const exponent = vrt.getInt32(params, 4); + BEAST_EXPECT(mantissa == 1000000000000000000) && + BEAST_EXPECT(exponent == -normalExp + 1); // roundtrip - auto const result2 = hfs.floatSet(result->first, result->second, 0); + auto const result2 = hfs.floatSet(mantissa, exponent, 0); BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == float10); } { - auto const result = hfs.floatToMantissaAndExponent(makeSlice(floatPi)); - BEAST_EXPECT(result) && BEAST_EXPECT(result->first == 3141592653589793000) && - BEAST_EXPECT(result->second == -normalExp); + // hfs.floatToMantissaAndExponent(makeSlice(floatPi)); + vrt.setBytes(0, floatPi.data(), floatPi.size()); + WasmValVec params(6), result(1); + auto* trap = + ww(floatToMantissaAndExponent_wrap, + &import[55], + params, + result, + 0, + FLOAT_SIZE, + 256, + 8, + 512, + 4); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const mantissa = vrt.getInt64(params, 2); + auto const exponent = vrt.getInt32(params, 4); + BEAST_EXPECT(mantissa == 3141592653589793000) && BEAST_EXPECT(exponent == -normalExp); // roundtrip - auto const result2 = hfs.floatSet(result->first, result->second, 0); + auto const result2 = hfs.floatSet(mantissa, exponent, 0); BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == floatPi); } { - auto const result = hfs.floatToMantissaAndExponent(makeSlice(floatIntMax)); - BEAST_EXPECT(result) && - BEAST_EXPECT(result->first == std::numeric_limits::max()) && - BEAST_EXPECT(result->second == 0); + // hfs.floatToMantissaAndExponent(makeSlice(floatIntMax)); + vrt.setBytes(0, floatIntMax.data(), floatIntMax.size()); + WasmValVec params(6), result(1); + auto* trap = + ww(floatToMantissaAndExponent_wrap, + &import[55], + params, + result, + 0, + FLOAT_SIZE, + 256, + 8, + 512, + 4); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const mantissa = vrt.getInt64(params, 2); + auto const exponent = vrt.getInt32(params, 4); + BEAST_EXPECT(mantissa == std::numeric_limits::max()) && + BEAST_EXPECT(exponent == 0); // roundtrip - auto const result2 = hfs.floatSet(result->first, result->second, 0); + auto const result2 = hfs.floatSet(mantissa, exponent, 0); BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == floatIntMax); } { - auto const result = hfs.floatToMantissaAndExponent(makeSlice(floatIntMin)); - BEAST_EXPECT(result) && - BEAST_EXPECT(result->first == (std::numeric_limits::min() / 10) - 1) && - BEAST_EXPECT(result->second == 1); + // hfs.floatToMantissaAndExponent(makeSlice(floatIntMin)); + vrt.setBytes(0, floatIntMin.data(), floatIntMin.size()); + WasmValVec params(6), result(1); + auto* trap = + ww(floatToMantissaAndExponent_wrap, + &import[55], + params, + result, + 0, + FLOAT_SIZE, + 256, + 8, + 512, + 4); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const mantissa = vrt.getInt64(params, 2); + auto const exponent = vrt.getInt32(params, 4); + BEAST_EXPECT(mantissa == (std::numeric_limits::min() / 10) - 1) && + BEAST_EXPECT(exponent == 1); // roundtrip - auto const result2 = hfs.floatSet(result->first, result->second, 0); + auto const result2 = hfs.floatSet(mantissa, exponent, 0); BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == floatIntMin); } { - auto const result = hfs.floatToMantissaAndExponent(makeSlice(floatMax)); - BEAST_EXPECT(result) && BEAST_EXPECT(result->first == Number::maxRep) && - BEAST_EXPECT(result->second == Number::maxExponent); + // hfs.floatToMantissaAndExponent(makeSlice(floatMax)); + vrt.setBytes(0, floatMax.data(), floatMax.size()); + WasmValVec params(6), result(1); + auto* trap = + ww(floatToMantissaAndExponent_wrap, + &import[55], + params, + result, + 0, + FLOAT_SIZE, + 256, + 8, + 512, + 4); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const mantissa = vrt.getInt64(params, 2); + auto const exponent = vrt.getInt32(params, 4); + BEAST_EXPECT(mantissa == Number::maxRep) && + BEAST_EXPECT(exponent == Number::maxExponent); // roundtrip - auto const result2 = hfs.floatSet(result->first, result->second, 0); + auto const result2 = hfs.floatSet(mantissa, exponent, 0); BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == floatMax); } } @@ -3158,44 +6547,112 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); { - auto const result = hfs.floatNegate(makeSlice(invalid)); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatNegate(makeSlice(invalid)); + vrt.setBytes(0, invalid.data(), invalid.size()); + WasmValVec params(4), result(1); + auto* trap = + ww(floatNegate_wrap, &import[56], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatNegate(makeSlice(floatIntZero)); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); + // hfs.floatNegate(makeSlice(floatIntZero)); + vrt.setBytes(0, floatIntZero.data(), floatIntZero.size()); + WasmValVec params(4), result(1); + auto* trap = + ww(floatNegate_wrap, &import[56], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == floatIntZero); } { - auto const result = hfs.floatNegate(makeSlice(float1)); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMinus1); + // hfs.floatNegate(makeSlice(float1)); + vrt.setBytes(0, float1.data(), float1.size()); + WasmValVec params(4), result(1); + auto* trap = + ww(floatNegate_wrap, &import[56], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == floatMinus1); } { - auto const result = hfs.floatNegate(makeSlice(floatMinus1)); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == float1); + // hfs.floatNegate(makeSlice(floatMinus1)); + vrt.setBytes(0, floatMinus1.data(), floatMinus1.size()); + WasmValVec params(4), result(1); + auto* trap = + ww(floatNegate_wrap, &import[56], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == float1); } { - auto const result = hfs.floatNegate(makeSlice(floatIntMax)); + // hfs.floatNegate(makeSlice(floatIntMax)); auto const expected = hfs.floatFromInt(std::numeric_limits::min() + 1, 0); - BEAST_EXPECT(result && expected) && BEAST_EXPECT(*result == *expected); + vrt.setBytes(0, floatIntMax.data(), floatIntMax.size()); + WasmValVec params(4), result(1); + auto* trap = + ww(floatNegate_wrap, &import[56], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(expected) && BEAST_EXPECT(resultBytes == *expected); } { - auto const result = hfs.floatNegate(makeSlice(floatMaxExp)); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMinusMaxExp); + // hfs.floatNegate(makeSlice(floatMaxExp)); + vrt.setBytes(0, floatMaxExp.data(), floatMaxExp.size()); + WasmValVec params(4), result(1); + auto* trap = + ww(floatNegate_wrap, &import[56], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == floatMinusMaxExp); } { - auto const result = hfs.floatNegate(makeSlice(floatPi)); - auto const negPi = hfs.floatNegate(makeSlice(*result)); - BEAST_EXPECT(result && negPi) && BEAST_EXPECT(*negPi == floatPi); + // hfs.floatNegate(makeSlice(floatPi)); + vrt.setBytes(0, floatPi.data(), floatPi.size()); + WasmValVec params(4), result(1); + auto* trap = + ww(floatNegate_wrap, &import[56], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + + // hfs.floatNegate(makeSlice(*result)); + vrt.setBytes(512, resultBytes.data(), resultBytes.size()); + WasmValVec params2(4), result2(1); + auto* trap2 = ww( + floatNegate_wrap, &import[56], params2, result2, 512, FLOAT_SIZE, 768, FLOAT_SIZE); + + BEAST_EXPECT(!trap2) && BEAST_EXPECT(result2[0].kind == WASM_I32) && + BEAST_EXPECT(result2[0].of.i32 == FLOAT_SIZE); + auto const negPiBytes = vrt.getBytes(params2, 2); + BEAST_EXPECT(negPiBytes == floatPi); } } @@ -3209,49 +6666,116 @@ struct HostFuncImpl_test : public beast::unit_test::suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - WasmHostFunctionsImpl const hfs(ac, dummyEscrow); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); { - auto const result = hfs.floatAbs(makeSlice(invalid)); - BEAST_EXPECT(!result) && - BEAST_EXPECT(result.error() == HostFunctionError::FLOAT_INPUT_MALFORMED); + // hfs.floatAbs(makeSlice(invalid)); + vrt.setBytes(0, invalid.data(), invalid.size()); + WasmValVec params(4), result(1); + auto* trap = + ww(floatAbs_wrap, &import[57], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); } { - auto const result = hfs.floatAbs(makeSlice(floatIntZero)); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntZero); + // hfs.floatAbs(makeSlice(floatIntZero)); + vrt.setBytes(0, floatIntZero.data(), floatIntZero.size()); + WasmValVec params(4), result(1); + auto* trap = + ww(floatAbs_wrap, &import[57], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == floatIntZero); } { - auto const result = hfs.floatAbs(makeSlice(float1)); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == float1); + // hfs.floatAbs(makeSlice(float1)); + vrt.setBytes(0, float1.data(), float1.size()); + WasmValVec params(4), result(1); + auto* trap = + ww(floatAbs_wrap, &import[57], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == float1); } { - auto const result = hfs.floatAbs(makeSlice(floatMinus1)); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == float1); + // hfs.floatAbs(makeSlice(floatMinus1)); + vrt.setBytes(0, floatMinus1.data(), floatMinus1.size()); + WasmValVec params(4), result(1); + auto* trap = + ww(floatAbs_wrap, &import[57], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == float1); } { - auto const result = hfs.floatAbs(makeSlice(floatIntMax)); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatIntMax); + // hfs.floatAbs(makeSlice(floatIntMax)); + vrt.setBytes(0, floatIntMax.data(), floatIntMax.size()); + WasmValVec params(4), result(1); + auto* trap = + ww(floatAbs_wrap, &import[57], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == floatIntMax); } { - auto const result = hfs.floatAbs(makeSlice(floatIntMin)); + // hfs.floatAbs(makeSlice(floatIntMin)); auto const negated = hfs.floatNegate(makeSlice(floatIntMin)); - BEAST_EXPECT(result && negated) && BEAST_EXPECT(*result == *negated); + vrt.setBytes(0, floatIntMin.data(), floatIntMin.size()); + WasmValVec params(4), result(1); + auto* trap = + ww(floatAbs_wrap, &import[57], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(negated) && BEAST_EXPECT(resultBytes == *negated); } { - auto const result = hfs.floatAbs(makeSlice(floatMinusMaxExp)); - BEAST_EXPECT(result) && BEAST_EXPECT(*result == floatMaxExp); + // hfs.floatAbs(makeSlice(floatMinusMaxExp)); + vrt.setBytes(0, floatMinusMaxExp.data(), floatMinusMaxExp.size()); + WasmValVec params(4), result(1); + auto* trap = + ww(floatAbs_wrap, &import[57], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(resultBytes == floatMaxExp); } { - auto const result = hfs.floatAbs(makeSlice(floatMinus3)); + // hfs.floatAbs(makeSlice(floatMinus3)); auto const expected = hfs.floatFromInt(3, 0); - BEAST_EXPECT(result && expected) && BEAST_EXPECT(*result == *expected); + vrt.setBytes(0, floatMinus3.data(), floatMinus3.size()); + WasmValVec params(4), result(1); + auto* trap = + ww(floatAbs_wrap, &import[57], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + auto const resultBytes = vrt.getBytes(params, 2); + BEAST_EXPECT(expected) && BEAST_EXPECT(resultBytes == *expected); } } @@ -3282,6 +6806,57 @@ struct HostFuncImpl_test : public beast::unit_test::suite testFloatSpecialCases(); } + void + testVectorIndexes() + { + testcase("WasmValVec indicies"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(&vrt); + + bool ex = false; + try + { + // hfs.getLedgerSqn(); + WasmValVec params(2), result(1); + // 3 parameters instead of 2 + auto* trap = + ww(getLedgerSqn_wrap, &import[0], params, result, 0, sizeof(std::uint32_t), 1); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == sizeof(std::uint32_t)) && + BEAST_EXPECT(vrt.getUint32(params, 0) == env.current()->header().seq); + } + catch (std::exception const& e) + { + BEAST_EXPECTS(e.what() == std::string("Out of bound"), e.what()); + ex = true; + } + + // const version + ex = false; + try + { + WasmValVec params(2); + [[maybe_unused]] auto const x = params[2]; + } + catch (std::exception const& e) + { + BEAST_EXPECTS(e.what() == std::string("Out of bound"), e.what()); + ex = true; + } + + BEAST_EXPECT(ex); + } + void run() override { @@ -3318,6 +6893,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite testTraceAccount(); testTraceAmount(); testFloats(); + + testVectorIndexes(); } }; diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index f1097a7e68..2f5740dca2 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -15,7 +15,7 @@ namespace test { struct TestLedgerDataProvider : public HostFunctions { jtx::Env& env_; - void const* rt_ = nullptr; + void* rt_ = nullptr; public: TestLedgerDataProvider(jtx::Env& env) : HostFunctions(env.journal), env_(env) @@ -23,12 +23,12 @@ public: } virtual void - setRT(void const* rt) override + setRT(void* rt) override { rt_ = rt; } - virtual void const* + virtual void* getRT() const override { return rt_; @@ -47,7 +47,7 @@ struct TestHostFunctions : public HostFunctions AccountID accountID_; Bytes data_; int clock_drift_ = 0; - void const* rt_ = nullptr; + void* rt_ = nullptr; public: TestHostFunctions(test::jtx::Env& env, int cd = 0) @@ -59,12 +59,12 @@ public: } virtual void - setRT(void const* rt) override + setRT(void* rt) override { rt_ = rt; } - virtual void const* + virtual void* getRT() const override { return rt_; From ce2586c0395301d094b7d7cf51b491f64e10c451 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Mon, 20 Apr 2026 14:03:39 -0400 Subject: [PATCH 117/137] Review fixes (#6512) --- include/xrpl/tx/wasm/HostFuncImpl.h | 2 +- include/xrpl/tx/wasm/ParamsHelper.h | 31 +--------- include/xrpl/tx/wasm/WasmVM.h | 24 ++++---- include/xrpl/tx/wasm/WasmiVM.h | 10 +++- src/libxrpl/tx/wasm/HostFuncImplGetter.cpp | 56 ++++++++--------- src/libxrpl/tx/wasm/HostFuncWrapper.cpp | 70 +++++++++++++++++++--- src/libxrpl/tx/wasm/WasmVM.cpp | 3 - src/libxrpl/tx/wasm/WasmiVM.cpp | 2 +- 8 files changed, 111 insertions(+), 87 deletions(-) diff --git a/include/xrpl/tx/wasm/HostFuncImpl.h b/include/xrpl/tx/wasm/HostFuncImpl.h index 30ae1720a9..a8d8e2da64 100644 --- a/include/xrpl/tx/wasm/HostFuncImpl.h +++ b/include/xrpl/tx/wasm/HostFuncImpl.h @@ -81,7 +81,7 @@ public: checkSelf() const override { return !currentLedgerObj_ && !data_ && - std::ranges::find_if(cache_, [](auto& p) { return !!p; }) == cache_.end(); + std::ranges::none_of(cache_, [](auto const& p) { return !!p; }); } std::optional const& diff --git a/include/xrpl/tx/wasm/ParamsHelper.h b/include/xrpl/tx/wasm/ParamsHelper.h index 82863e730a..d48663ef23 100644 --- a/include/xrpl/tx/wasm/ParamsHelper.h +++ b/include/xrpl/tx/wasm/ParamsHelper.h @@ -48,7 +48,7 @@ struct WasmRuntimeWrapper //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -enum WasmTypes { WT_I32, WT_I64, WT_U8V }; +enum WasmTypes { WT_I32, WT_I64 }; struct WasmImportFunc { @@ -142,22 +142,15 @@ WasmImpFunc( //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -struct WasmParamVec -{ - std::uint8_t const* d = nullptr; - std::int32_t sz = 0; -}; - struct WasmParam { + // We are not supporting float/double + WasmTypes type = WT_I32; union { std::int32_t i32; std::int64_t i64 = 0; - float f32; - double f64; - WasmParamVec u8v; } of; }; @@ -177,24 +170,6 @@ wasmParamsHlp(std::vector& v, std::int64_t p, Types&&... args) wasmParamsHlp(v, std::forward(args)...); } -// We are not supporting float/double for now -// Leaving this code here so that it is easier to add later if needed -// template -// inline void -// wasmParamsHlp(std::vector& v, float p, Types&&... args) -// { -// v.push_back({.type = WT_F32, .of = {.f32 = p}}); -// wasmParamsHlp(v, std::forward(args)...); -// } - -// template -// inline void -// wasmParamsHlp(std::vector& v, double p, Types&&... args) -// { -// v.push_back({.type = WT_F64, .of = {.f64 = p}}); -// wasmParamsHlp(v, std::forward(args)...); -// } - inline void wasmParamsHlp(std::vector& v) { diff --git a/include/xrpl/tx/wasm/WasmVM.h b/include/xrpl/tx/wasm/WasmVM.h index b872adfc95..e001ee6112 100644 --- a/include/xrpl/tx/wasm/WasmVM.h +++ b/include/xrpl/tx/wasm/WasmVM.h @@ -6,19 +6,19 @@ namespace xrpl { -static std::string_view const W_ENV = "env"; -static std::string_view const W_HOST_LIB = "host_lib"; -static std::string_view const W_MEM = "memory"; -static std::string_view const W_STORE = "store"; -static std::string_view const W_LOAD = "load"; -static std::string_view const W_SIZE = "size"; -static std::string_view const W_ALLOC = "allocate"; -static std::string_view const W_DEALLOC = "deallocate"; -static std::string_view const W_PROC_EXIT = "proc_exit"; +std::string_view inline constexpr W_ENV = "env"; +std::string_view inline constexpr W_HOST_LIB = "host_lib"; +std::string_view inline constexpr W_MEM = "memory"; +std::string_view inline constexpr W_STORE = "store"; +std::string_view inline constexpr W_LOAD = "load"; +std::string_view inline constexpr W_SIZE = "size"; +std::string_view inline constexpr W_ALLOC = "allocate"; +std::string_view inline constexpr W_DEALLOC = "deallocate"; +std::string_view inline constexpr W_PROC_EXIT = "proc_exit"; -static std::string_view const ESCROW_FUNCTION_NAME = "finish"; +std::string_view inline constexpr ESCROW_FUNCTION_NAME = "finish"; -uint32_t const MAX_PAGES = 128; // 8MB = 64KB*128 +uint32_t inline constexpr MAX_PAGES = 128; // 8MB = 64KB*128 class WasmiEngine; @@ -36,8 +36,6 @@ class WasmEngine operator=(WasmEngine&&) = delete; public: - ~WasmEngine() = default; - static WasmEngine& instance(); diff --git a/include/xrpl/tx/wasm/WasmiVM.h b/include/xrpl/tx/wasm/WasmiVM.h index e74cbb62c3..cb56e64026 100644 --- a/include/xrpl/tx/wasm/WasmiVM.h +++ b/include/xrpl/tx/wasm/WasmiVM.h @@ -125,6 +125,7 @@ struct WasmiResult { } + WasmiResult() = delete; ~WasmiResult() = default; WasmiResult(WasmiResult&& o) = default; WasmiResult& @@ -158,14 +159,17 @@ private: public: InstanceWrapper(); + InstanceWrapper(InstanceWrapper const&) = delete; + InstanceWrapper(InstanceWrapper&& o); + InstanceWrapper(StorePtr& s, ModulePtr& m, WasmExternVec const& imports, beast::Journal j); + InstanceWrapper& operator=(InstanceWrapper&& o); - InstanceWrapper(StorePtr& s, ModulePtr& m, WasmExternVec const& imports, beast::Journal j); - - ~InstanceWrapper() = default; + InstanceWrapper& + operator=(InstanceWrapper const&) = delete; operator bool() const; diff --git a/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp index 7b175845ce..0053af3400 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp @@ -6,19 +6,17 @@ namespace xrpl { typedef std::variant FieldValue; -namespace detail { - template Bytes getIntBytes(STBase const* obj) { - static_assert(std::is_integral::value, "Only integral types"); + static_assert(std::is_integral_v, "Only integral types"); + XRPL_ASSERT(obj, "getIntBytes null pointer"); - auto const& num(static_cast const*>(obj)); // NOLINT + auto const* num(static_cast const*>(obj)); // NOLINT T const data = adjustWasmEndianess(num->value()); - auto const* b = reinterpret_cast(&data); - auto const* e = reinterpret_cast(&data + 1); - return Bytes{b, e}; + uint8_t const* b = reinterpret_cast(&data); + return Bytes{b, b + sizeof(T)}; } static Expected @@ -217,8 +215,6 @@ getArrayLen(FieldValue const& variantField) return Unexpected(HostFunctionError::NO_ARRAY); // LCOV_EXCL_LINE } -} // namespace detail - Expected WasmHostFunctionsImpl::cacheLedgerObj(uint256 const& objId, int32_t cacheIdx) { @@ -253,7 +249,7 @@ WasmHostFunctionsImpl::cacheLedgerObj(uint256 const& objId, int32_t cacheIdx) Expected WasmHostFunctionsImpl::getTxField(SField const& fname) const { - return detail::getAnyFieldData(ctx_.tx.peekAtPField(fname)); + return getAnyFieldData(ctx_.tx.peekAtPField(fname)); } Expected @@ -262,7 +258,7 @@ WasmHostFunctionsImpl::getCurrentLedgerObjField(SField const& fname) const auto const sle = getCurrentLedgerObj(); if (!sle.has_value()) return Unexpected(sle.error()); - return detail::getAnyFieldData(sle.value()->peekAtPField(fname)); + return getAnyFieldData(sle.value()->peekAtPField(fname)); } Expected @@ -271,7 +267,7 @@ WasmHostFunctionsImpl::getLedgerObjField(int32_t cacheIdx, SField const& fname) auto const normalizedIdx = normalizeCacheIndex(cacheIdx); if (!normalizedIdx.has_value()) return Unexpected(normalizedIdx.error()); - return detail::getAnyFieldData(cache_[normalizedIdx.value()]->peekAtPField(fname)); + return getAnyFieldData(cache_[normalizedIdx.value()]->peekAtPField(fname)); } // Subsection: nested getters @@ -279,11 +275,11 @@ WasmHostFunctionsImpl::getLedgerObjField(int32_t cacheIdx, SField const& fname) Expected WasmHostFunctionsImpl::getTxNestedField(Slice const& locator) const { - auto const r = detail::locateField(ctx_.tx, locator); + auto const r = locateField(ctx_.tx, locator); if (!r) return Unexpected(r.error()); - return detail::getAnyFieldData(r.value()); + return getAnyFieldData(r.value()); } Expected @@ -293,11 +289,11 @@ WasmHostFunctionsImpl::getCurrentLedgerObjNestedField(Slice const& locator) cons if (!sle.has_value()) return Unexpected(sle.error()); - auto const r = detail::locateField(*sle.value(), locator); + auto const r = locateField(*sle.value(), locator); if (!r) return Unexpected(r.error()); - return detail::getAnyFieldData(r.value()); + return getAnyFieldData(r.value()); } Expected @@ -307,11 +303,11 @@ WasmHostFunctionsImpl::getLedgerObjNestedField(int32_t cacheIdx, Slice const& lo if (!normalizedIdx.has_value()) return Unexpected(normalizedIdx.error()); - auto const r = detail::locateField(*cache_[normalizedIdx.value()], locator); + auto const r = locateField(*cache_[normalizedIdx.value()], locator); if (!r) return Unexpected(r.error()); - return detail::getAnyFieldData(r.value()); + return getAnyFieldData(r.value()); } // Subsection: array length getters @@ -323,10 +319,10 @@ WasmHostFunctionsImpl::getTxArrayLen(SField const& fname) const return Unexpected(HostFunctionError::NO_ARRAY); auto const* field = ctx_.tx.peekAtPField(fname); - if (detail::noField(field)) + if (noField(field)) return Unexpected(HostFunctionError::FIELD_NOT_FOUND); - return detail::getArrayLen(field); + return getArrayLen(field); } Expected @@ -340,10 +336,10 @@ WasmHostFunctionsImpl::getCurrentLedgerObjArrayLen(SField const& fname) const return Unexpected(sle.error()); auto const* field = sle.value()->peekAtPField(fname); - if (detail::noField(field)) + if (noField(field)) return Unexpected(HostFunctionError::FIELD_NOT_FOUND); - return detail::getArrayLen(field); + return getArrayLen(field); } Expected @@ -357,10 +353,10 @@ WasmHostFunctionsImpl::getLedgerObjArrayLen(int32_t cacheIdx, SField const& fnam return Unexpected(normalizedIdx.error()); auto const* field = cache_[normalizedIdx.value()]->peekAtPField(fname); - if (detail::noField(field)) + if (noField(field)) return Unexpected(HostFunctionError::FIELD_NOT_FOUND); - return detail::getArrayLen(field); + return getArrayLen(field); } // Subsection: nested array length getters @@ -368,12 +364,12 @@ WasmHostFunctionsImpl::getLedgerObjArrayLen(int32_t cacheIdx, SField const& fnam Expected WasmHostFunctionsImpl::getTxNestedArrayLen(Slice const& locator) const { - auto const r = detail::locateField(ctx_.tx, locator); + auto const r = locateField(ctx_.tx, locator); if (!r) return Unexpected(r.error()); auto const& field = r.value(); - return detail::getArrayLen(field); + return getArrayLen(field); } Expected @@ -382,12 +378,12 @@ WasmHostFunctionsImpl::getCurrentLedgerObjNestedArrayLen(Slice const& locator) c auto const sle = getCurrentLedgerObj(); if (!sle.has_value()) return Unexpected(sle.error()); - auto const r = detail::locateField(*sle.value(), locator); + auto const r = locateField(*sle.value(), locator); if (!r) return Unexpected(r.error()); auto const& field = r.value(); - return detail::getArrayLen(field); + return getArrayLen(field); } Expected @@ -397,12 +393,12 @@ WasmHostFunctionsImpl::getLedgerObjNestedArrayLen(int32_t cacheIdx, Slice const& if (!normalizedIdx.has_value()) return Unexpected(normalizedIdx.error()); - auto const r = detail::locateField(*cache_[normalizedIdx.value()], locator); + auto const r = locateField(*cache_[normalizedIdx.value()], locator); if (!r) return Unexpected(r.error()); auto const& field = r.value(); - return detail::getArrayLen(field); + return getArrayLen(field); } } // namespace xrpl diff --git a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp index 246b9ab4a3..460d19cd43 100644 --- a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp +++ b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp @@ -10,6 +10,8 @@ #include #include +#include + namespace xrpl { using SFieldCRef = std::reference_wrapper; @@ -486,10 +488,9 @@ isAmendmentEnabled_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* if (slice->size() == uint256::bytes) { - if (auto ret = hf->isAmendmentEnabled(uint256::fromVoid(slice->data())); *ret == 1) - { + if (auto const ret = hf->isAmendmentEnabled(uint256::fromVoid(slice->data())); + ret && *ret == 1) return returnResult(runtime, params, results, ret, index); - } } if (slice->size() > 64) @@ -1435,7 +1436,13 @@ trace_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; - if (params->data[1].of.i32 + params->data[3].of.i32 > maxWasmParamLength) + int64_t const len = (int64_t)params->data[1].of.i32 + params->data[3].of.i32; + if (len < 0) + { + return hfResult(results, HostFunctionError::INVALID_PARAMS); + } + + if (std::cmp_greater(len, maxWasmParamLength)) { return hfResult(results, HostFunctionError::DATA_FIELD_TOO_LARGE); } @@ -1457,6 +1464,7 @@ trace_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { return hfResult(results, asHex.error()); // LCOV_EXCL_LINE } + if (*asHex != 0 && *asHex != 1) { return hfResult(results, HostFunctionError::INVALID_PARAMS); @@ -1473,7 +1481,14 @@ traceNum_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) auto* hf = getHF(env); auto* runtime = reinterpret_cast(hf->getRT()); int index = 0; - if (params->data[1].of.i32 > maxWasmParamLength) + + int32_t const len = params->data[1].of.i32; + if (len < 0) + { + return hfResult(results, HostFunctionError::INVALID_PARAMS); + } + + if (std::cmp_greater(len, maxWasmParamLength)) { return hfResult(results, HostFunctionError::DATA_FIELD_TOO_LARGE); } @@ -1501,17 +1516,29 @@ traceAccount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul auto* hf = getHF(env); auto* runtime = reinterpret_cast(hf->getRT()); - if (params->data[1].of.i32 > maxWasmParamLength) + int32_t const len = params->data[1].of.i32; + if (len < 0) + { + return hfResult(results, HostFunctionError::INVALID_PARAMS); + } + + if (std::cmp_greater(len, maxWasmParamLength)) + { return hfResult(results, HostFunctionError::DATA_FIELD_TOO_LARGE); + } int i = 0; auto const msg = getDataString(runtime, params, i); if (!msg) + { return hfResult(results, msg.error()); + } auto const account = getDataAccountID(runtime, params, i); if (!account) + { return hfResult(results, account.error()); + } return returnResult(runtime, params, results, hf->traceAccount(*msg, *account), i); } @@ -1524,17 +1551,29 @@ traceFloat_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results auto* hf = getHF(env); auto* runtime = reinterpret_cast(hf->getRT()); - if (params->data[1].of.i32 > maxWasmParamLength) + int32_t const len = params->data[1].of.i32; + if (len < 0) + { + return hfResult(results, HostFunctionError::INVALID_PARAMS); + } + + if (std::cmp_greater(len, maxWasmParamLength)) + { return hfResult(results, HostFunctionError::DATA_FIELD_TOO_LARGE); + } int i = 0; auto const msg = getDataString(runtime, params, i); if (!msg) + { return hfResult(results, msg.error()); + } auto const number = getDataSlice(runtime, params, i); if (!number) + { return hfResult(results, number.error()); + } return returnResult(runtime, params, results, hf->traceFloat(*msg, *number), i); } @@ -1547,17 +1586,29 @@ traceAmount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result auto* hf = getHF(env); auto* runtime = reinterpret_cast(hf->getRT()); - if (params->data[1].of.i32 > maxWasmParamLength) + int32_t const len = params->data[1].of.i32; + if (len < 0) + { + return hfResult(results, HostFunctionError::INVALID_PARAMS); + } + + if (std::cmp_greater(len, maxWasmParamLength)) + { return hfResult(results, HostFunctionError::DATA_FIELD_TOO_LARGE); + } int i = 0; auto const msg = getDataString(runtime, params, i); if (!msg) + { return hfResult(results, msg.error()); + } auto const amountSliceOpt = getDataSlice(runtime, params, i); if (!amountSliceOpt) + { return hfResult(results, amountSliceOpt.error()); + } auto const amountSlice = amountSliceOpt.value(); auto serialIter = SerialIter(amountSlice); @@ -1571,8 +1622,11 @@ traceAmount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result { amount = std::nullopt; } + if (!amount) + { return hfResult(results, HostFunctionError::INVALID_PARAMS); + } return returnResult(runtime, params, results, hf->traceAmount(*msg, *amount), i); } diff --git a/src/libxrpl/tx/wasm/WasmVM.cpp b/src/libxrpl/tx/wasm/WasmVM.cpp index fdd9a437d7..d91e6832da 100644 --- a/src/libxrpl/tx/wasm/WasmVM.cpp +++ b/src/libxrpl/tx/wasm/WasmVM.cpp @@ -120,9 +120,6 @@ runEscrowWasm( auto const ret = vm.run(wasmCode, hfs, gasLimit, funcName, params, createWasmImport(hfs), hfs.getJournal()); - // std::cout << "runEscrowWasm, mod size: " << wasmCode.size() - // << ", gasLimit: " << gasLimit << ", funcName: " << funcName; - if (!ret) { #ifdef DEBUG_OUTPUT diff --git a/src/libxrpl/tx/wasm/WasmiVM.cpp b/src/libxrpl/tx/wasm/WasmiVM.cpp index adc0953a38..4a19be4a60 100644 --- a/src/libxrpl/tx/wasm/WasmiVM.cpp +++ b/src/libxrpl/tx/wasm/WasmiVM.cpp @@ -895,7 +895,7 @@ WasmiEngine::checkHlp( // Create and instantiate the module. if (wasmCode.empty()) - throw std::runtime_error("empty nodule"); + throw std::runtime_error("empty module"); int const m = addModule(wasmCode, false, imports, -1); if ((m < 0) || !moduleWrap_) From 1600b3e7f3a0cfd040c5d606ffac693595f2000b Mon Sep 17 00:00:00 2001 From: pwang200 <354723+pwang200@users.noreply.github.com> Date: Thu, 30 Apr 2026 13:56:55 -0400 Subject: [PATCH 118/137] ai review nits fixes of host functions (#6963) --- include/xrpl/tx/wasm/WasmiVM.h | 6 ++++-- src/libxrpl/tx/wasm/HostFuncWrapper.cpp | 1 + src/libxrpl/tx/wasm/WasmiVM.cpp | 24 ++++++++++++------------ 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/include/xrpl/tx/wasm/WasmiVM.h b/include/xrpl/tx/wasm/WasmiVM.h index cb56e64026..ce94b2ee29 100644 --- a/include/xrpl/tx/wasm/WasmiVM.h +++ b/include/xrpl/tx/wasm/WasmiVM.h @@ -293,7 +293,8 @@ private: int64_t gas, std::string_view funcName, std::vector const& params, - ImportVec const& imports); + ImportVec const& imports, + beast::Journal j); NotTEC checkHlp( @@ -301,7 +302,8 @@ private: HostFunctions& hfs, std::string_view funcName, std::vector const& params, - ImportVec const& imports); + ImportVec const& imports, + beast::Journal j); int addModule(Bytes const& wasmCode, bool instantiate, ImportVec const& imports, int64_t gas); diff --git a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp index 460d19cd43..3e56c8dad6 100644 --- a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp +++ b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp @@ -491,6 +491,7 @@ isAmendmentEnabled_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* if (auto const ret = hf->isAmendmentEnabled(uint256::fromVoid(slice->data())); ret && *ret == 1) return returnResult(runtime, params, results, ret, index); + // Fall through to string lookup — the 32 bytes may be an amendment name } if (slice->size() > 64) diff --git a/src/libxrpl/tx/wasm/WasmiVM.cpp b/src/libxrpl/tx/wasm/WasmiVM.cpp index 4a19be4a60..bcdca5c03d 100644 --- a/src/libxrpl/tx/wasm/WasmiVM.cpp +++ b/src/libxrpl/tx/wasm/WasmiVM.cpp @@ -756,24 +756,22 @@ WasmiEngine::run( ImportVec const& imports, beast::Journal j) { - j_ = j; - if (gas <= 0) return Unexpected(temBAD_AMOUNT); try { checkImports(imports, &hfs); - return runHlp(wasmCode, hfs, gas, funcName, params, imports); + return runHlp(wasmCode, hfs, gas, funcName, params, imports, j); } catch (std::exception const& e) { - print_wasm_error(std::string("exception: ") + e.what(), nullptr, j_); + print_wasm_error(std::string("exception: ") + e.what(), nullptr, j); } // LCOV_EXCL_START catch (...) { - print_wasm_error(std::string("exception: unknown"), nullptr, j_); + print_wasm_error(std::string("exception: unknown"), nullptr, j); } // LCOV_EXCL_STOP return Unexpected(tecFAILED_PROCESSING); @@ -786,10 +784,12 @@ WasmiEngine::runHlp( int64_t gas, std::string_view funcName, std::vector const& params, - ImportVec const& imports) + ImportVec const& imports, + beast::Journal j) { // currently only 1 module support, possible parallel UT run std::lock_guard const lg(m_); + j_ = j; if (wasmCode.empty()) throw std::runtime_error("empty module"); @@ -861,21 +861,19 @@ WasmiEngine::check( ImportVec const& imports, beast::Journal j) { - j_ = j; - try { checkImports(imports, &hfs); - return checkHlp(wasmCode, hfs, funcName, params, imports); + return checkHlp(wasmCode, hfs, funcName, params, imports, j); } catch (std::exception const& e) { - print_wasm_error(std::string("exception: ") + e.what(), nullptr, j_); + print_wasm_error(std::string("exception: ") + e.what(), nullptr, j); } // LCOV_EXCL_START catch (...) { - print_wasm_error(std::string("exception: unknown"), nullptr, j_); + print_wasm_error(std::string("exception: unknown"), nullptr, j); } // LCOV_EXCL_STOP @@ -888,10 +886,12 @@ WasmiEngine::checkHlp( HostFunctions& hfs, std::string_view funcName, std::vector const& params, - ImportVec const& imports) + ImportVec const& imports, + beast::Journal j) { // currently only 1 module support, possible parallel UT run std::lock_guard const lg(m_); + j_ = j; // Create and instantiate the module. if (wasmCode.empty()) From 597202a6f08641233dc720020a0deba6853d136f Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Thu, 7 May 2026 12:33:22 -0400 Subject: [PATCH 119/137] Refactoring float hostfunctions (#7053) --- include/xrpl/basics/Number.h | 7 - include/xrpl/tx/wasm/HostFunc.h | 35 +- include/xrpl/tx/wasm/HostFuncImpl.h | 13 +- include/xrpl/tx/wasm/HostFuncWrapper.h | 21 +- include/xrpl/tx/wasm/ParamsHelper.h | 8 +- src/libxrpl/basics/Number.cpp | 76 - src/libxrpl/tx/wasm/HostFuncImplFloat.cpp | 103 +- src/libxrpl/tx/wasm/HostFuncWrapper.cpp | 71 +- src/libxrpl/tx/wasm/WasmVM.cpp | 7 +- src/libxrpl/tx/wasm/WasmiVM.cpp | 75 +- src/test/app/HostFuncImpl_test.cpp | 2106 +++++++++++------ src/test/app/TestHostFunctions.h | 26 +- src/test/app/Wasm_test.cpp | 13 +- .../wasm_fixtures/codecov_tests/src/lib.rs | 15 - src/test/app/wasm_fixtures/fixtures.cpp | 1087 +++++---- .../app/wasm_fixtures/float_tests/src/lib.rs | 325 +-- src/test/basics/Number_test.cpp | 73 - 17 files changed, 2030 insertions(+), 2031 deletions(-) diff --git a/include/xrpl/basics/Number.h b/include/xrpl/basics/Number.h index 21fe6a5b3a..c39aae2dd3 100644 --- a/include/xrpl/basics/Number.h +++ b/include/xrpl/basics/Number.h @@ -381,9 +381,6 @@ public: friend Number root2(Number f); - friend Number - log10(Number const&, int); - // Thread local rounding control. Default is to_nearest enum rounding_mode { to_nearest, towards_zero, downward, upward }; static rounding_mode @@ -732,10 +729,6 @@ abs(Number x) noexcept Number power(Number const& f, unsigned n); -// logarithm with base 10 -Number -log10(Number const& value, int iterations = 50); - // Returns f^(1/d) // Uses Newton–Raphson iterations until the result stops changing // to find the root of the polynomial g(x) = x^d - f diff --git a/include/xrpl/tx/wasm/HostFunc.h b/include/xrpl/tx/wasm/HostFunc.h index 1276284c15..b385ab9af6 100644 --- a/include/xrpl/tx/wasm/HostFunc.h +++ b/include/xrpl/tx/wasm/HostFunc.h @@ -66,16 +66,10 @@ Expected floatToIntImpl(Slice const& x, int32_t mode); Expected -floatToMantissaAndExponentImpl(Slice const& x); +floatToMantExpImpl(Slice const& x); Expected -floatNegateImpl(Slice const& x); - -Expected -floatAbsImpl(Slice const& x); - -Expected -floatSetImpl(int64_t mantissa, int32_t exponent, int32_t mode); +floatFromMantExpImpl(int64_t mantissa, int32_t exponent, int32_t mode); Expected floatCompareImpl(Slice const& x, Slice const& y); @@ -98,9 +92,6 @@ floatRootImpl(Slice const& x, int32_t n, int32_t mode); Expected floatPowerImpl(Slice const& x, int32_t n, int32_t mode); -Expected -floatLogImpl(Slice const& x, int32_t mode); - } // namespace wasm_float // Intended to work only through wasm runtime. Don't call them directly, except with unit tests @@ -480,25 +471,13 @@ struct HostFunctions } virtual Expected - floatToMantissaAndExponent(Slice const& x) const + floatToMantExp(Slice const& x) const { return Unexpected(HostFunctionError::INTERNAL); } virtual Expected - floatNegate(Slice const& x) const - { - return Unexpected(HostFunctionError::INTERNAL); - } - - virtual Expected - floatAbs(Slice const& x) const - { - return Unexpected(HostFunctionError::INTERNAL); - } - - virtual Expected - floatSet(int64_t mantissa, int32_t exponent, int32_t mode) const + floatFromMantExp(int64_t mantissa, int32_t exponent, int32_t mode) const { return Unexpected(HostFunctionError::INTERNAL); } @@ -545,12 +524,6 @@ struct HostFunctions return Unexpected(HostFunctionError::INTERNAL); } - virtual Expected - floatLog(Slice const& x, int32_t mode) const - { - return Unexpected(HostFunctionError::INTERNAL); - } - virtual ~HostFunctions() = default; // LCOV_EXCL_STOP }; diff --git a/include/xrpl/tx/wasm/HostFuncImpl.h b/include/xrpl/tx/wasm/HostFuncImpl.h index a8d8e2da64..864416043a 100644 --- a/include/xrpl/tx/wasm/HostFuncImpl.h +++ b/include/xrpl/tx/wasm/HostFuncImpl.h @@ -266,16 +266,10 @@ public: floatToInt(Slice const& x, int32_t mode) const override; Expected - floatToMantissaAndExponent(Slice const& x) const override; + floatToMantExp(Slice const& x) const override; Expected - floatNegate(Slice const& x) const override; - - Expected - floatAbs(Slice const& x) const override; - - Expected - floatSet(int64_t mantissa, int32_t exponent, int32_t mode) const override; + floatFromMantExp(int64_t mantissa, int32_t exponent, int32_t mode) const override; Expected floatCompare(Slice const& x, Slice const& y) const override; @@ -297,9 +291,6 @@ public: Expected floatPower(Slice const& x, int32_t n, int32_t mode) const override; - - Expected - floatLog(Slice const& x, int32_t mode) const override; }; } // namespace xrpl diff --git a/include/xrpl/tx/wasm/HostFuncWrapper.h b/include/xrpl/tx/wasm/HostFuncWrapper.h index ccc4b59173..313fe0b27f 100644 --- a/include/xrpl/tx/wasm/HostFuncWrapper.h +++ b/include/xrpl/tx/wasm/HostFuncWrapper.h @@ -276,22 +276,13 @@ using floatToInt_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t, int wasm_trap_t* floatToInt_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using floatToMantissaAndExponent_proto = - int32_t(uint8_t const*, int32_t, uint8_t*, int32_t, uint8_t*, int32_t); +using floatToMantExp_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t, uint8_t*, int32_t); wasm_trap_t* -floatToMantissaAndExponent_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +floatToMantExp_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using floatNegate_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); +using floatFromMantExp_proto = int32_t(int64_t, int32_t, uint8_t*, int32_t, int32_t); wasm_trap_t* -floatNegate_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); - -using floatAbs_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* -floatAbs_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); - -using floatSet_proto = int32_t(int32_t, int64_t, uint8_t*, int32_t, int32_t); -wasm_trap_t* -floatSet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +floatFromMantExp_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); using floatCompare_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t); wasm_trap_t* @@ -325,8 +316,4 @@ using floatPower_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int wasm_trap_t* floatPower_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); -using floatLog_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); -wasm_trap_t* -floatLog_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); - } // namespace xrpl diff --git a/include/xrpl/tx/wasm/ParamsHelper.h b/include/xrpl/tx/wasm/ParamsHelper.h index d48663ef23..4d2a1013b6 100644 --- a/include/xrpl/tx/wasm/ParamsHelper.h +++ b/include/xrpl/tx/wasm/ParamsHelper.h @@ -52,7 +52,7 @@ enum WasmTypes { WT_I32, WT_I64 }; struct WasmImportFunc { - std::string name; + std::string_view name; std::optional result; std::vector params; // void* udata = nullptr; @@ -62,11 +62,12 @@ struct WasmImportFunc }; typedef std::pair WasmUserData; -typedef std::vector ImportVec; +typedef std::unordered_map ImportVec; #define WASM_IMPORT_FUNC(v, f, ...) \ WasmImpFunc(v, #f, reinterpret_cast(&f##_wrap), ##__VA_ARGS__) +// n - string literal name, must have static lifetime #define WASM_IMPORT_FUNC2(v, f, n, ...) \ WasmImpFunc(v, n, reinterpret_cast(&f##_wrap), ##__VA_ARGS__) @@ -123,6 +124,7 @@ WasmImpFuncHelper(WasmImportFunc& e) // WasmImpWrap(e, std::forward(f)); } +// imp_name - string literal, must have static lifetime template void WasmImpFunc( @@ -137,7 +139,7 @@ WasmImpFunc( e.wrap = f_wrap; e.gas = gas; WasmImpFuncHelper(e); - v.push_back(std::make_pair(data, std::move(e))); + v.emplace(imp_name, std::make_pair(data, std::move(e))); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/libxrpl/basics/Number.cpp b/src/libxrpl/basics/Number.cpp index e714f6ac91..a8adabd5de 100644 --- a/src/libxrpl/basics/Number.cpp +++ b/src/libxrpl/basics/Number.cpp @@ -945,82 +945,6 @@ power(Number const& f, unsigned n) return r; } -// Series expansion method approximation of ln(x) -static Number -ln(Number const& x, int iterations = 50) -{ - Number const N0(0); - Number const N2(2, 0); - Number const N05(5, -1); - Number const LN2(693'147'180'559'945'309ll, -18); - - if (x <= 0) - { - throw std::runtime_error("Not a positive value"); - } - if (x == 1) - { - return N0; - } - - int exponent = 0; - Number mantissa = x; - - while (mantissa >= N2) - { - mantissa /= 2; - exponent += 1; - } - while (mantissa < N05) - { - mantissa *= 2; - exponent -= 1; - } - - Number z = (mantissa - 1) / (mantissa + 1); - Number const zz = z * z; - Number sum; - - for (int i = 1; i <= iterations; ++i) - { - sum = sum + z / ((2 * i) - 1); - z = z * zz; - } - - return 2 * sum + exponent * LN2; -} - -Number -log10(Number const& x, int iterations) -{ - Number const N0(0); - Number const LN10(2'302'585'092'994'045'684ll, -18); - - if (x <= 0) - { - throw std::runtime_error("Not a positive value"); - } - if (x == 1) - { - return N0; - } - - if (x <= Number(10)) - { - auto const r = ln(x, iterations) / LN10; - return r; - } - - // (1 <= normalX < 10) - // x = normalX * 10^norm - // ln(x) = ln(normalX * 10^norm) = ln(normalX) + norm * ln(10) - int const diffExp = Number::mantissaLog() + x.exponent_; - Number const normalX = x / Number(1, diffExp); - auto const lnX = ln(normalX, iterations) + diffExp * LN10; - auto const lgX = lnX / LN10; - return lgX; -} - // Returns f^(1/d) // Uses Newton–Raphson iterations until the result stops changing // to find the non-negative root of the polynomial g(x) = x^d - f diff --git a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp index 5ed9913412..50e972a2da 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp @@ -259,7 +259,7 @@ floatToIntImpl(Slice const& x, int32_t mode) } Expected -floatToMantissaAndExponentImpl(Slice const& x) +floatToMantExpImpl(Slice const& x) { try { @@ -282,55 +282,7 @@ floatToMantissaAndExponentImpl(Slice const& x) } Expected -floatNegateImpl(Slice const& x) -{ - try - { - detail::FloatState const rm(Number::rounding_mode::to_nearest); - if (!rm) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - - detail::WasmNumber const num(x); - if (!num) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - - detail::WasmNumber const res = -num; - return res.toBytes(); - } - // LCOV_EXCL_START - catch (...) - { - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); - } - // LCOV_EXCL_STOP -} - -Expected -floatAbsImpl(Slice const& x) -{ - try - { - detail::FloatState const rm(Number::rounding_mode::to_nearest); - if (!rm) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - - detail::WasmNumber const num(x); - if (!num) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - - detail::WasmNumber const res = abs(num); - return res.toBytes(); - } - // LCOV_EXCL_START - catch (...) - { - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); - } - // LCOV_EXCL_STOP -} - -Expected -floatSetImpl(int64_t mantissa, int32_t exponent, int32_t mode) +floatFromMantExpImpl(int64_t mantissa, int32_t exponent, int32_t mode) { try { @@ -537,31 +489,6 @@ floatPowerImpl(Slice const& x, int32_t n, int32_t mode) // LCOV_EXCL_STOP } -Expected -floatLogImpl(Slice const& x, int32_t mode) -{ - try - { - detail::FloatState const rm(mode); - if (!rm) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - - detail::WasmNumber const xx(x); - if (!xx) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); - - detail::WasmNumber const res(log10(xx)); - - return res.toBytes(); - } - // LCOV_EXCL_START - catch (...) - { - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); - } - // LCOV_EXCL_STOP -} - } // namespace wasm_float // ========================================================= @@ -599,27 +526,15 @@ WasmHostFunctionsImpl::floatToInt(Slice const& x, int32_t mode) const } Expected -WasmHostFunctionsImpl::floatToMantissaAndExponent(Slice const& x) const +WasmHostFunctionsImpl::floatToMantExp(Slice const& x) const { - return wasm_float::floatToMantissaAndExponentImpl(x); + return wasm_float::floatToMantExpImpl(x); } Expected -WasmHostFunctionsImpl::floatNegate(Slice const& x) const +WasmHostFunctionsImpl::floatFromMantExp(int64_t mantissa, int32_t exponent, int32_t mode) const { - return wasm_float::floatNegateImpl(x); -} - -Expected -WasmHostFunctionsImpl::floatAbs(Slice const& x) const -{ - return wasm_float::floatAbsImpl(x); -} - -Expected -WasmHostFunctionsImpl::floatSet(int64_t mantissa, int32_t exponent, int32_t mode) const -{ - return wasm_float::floatSetImpl(mantissa, exponent, mode); + return wasm_float::floatFromMantExpImpl(mantissa, exponent, mode); } Expected @@ -664,10 +579,4 @@ WasmHostFunctionsImpl::floatPower(Slice const& x, int32_t n, int32_t mode) const return wasm_float::floatPowerImpl(x, n, mode); } -Expected -WasmHostFunctionsImpl::floatLog(Slice const& x, int32_t mode) const -{ - return wasm_float::floatLogImpl(x, mode); -} - } // namespace xrpl diff --git a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp index 3e56c8dad6..a882204f51 100644 --- a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp +++ b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp @@ -1769,7 +1769,7 @@ floatToInt_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results } wasm_trap_t* -floatToMantissaAndExponent_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +floatToMantExp_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1782,11 +1782,11 @@ floatToMantissaAndExponent_wrap(void* env, wasm_val_vec_t const* params, wasm_va return hfResult(results, x.error()); i = 2; - return returnResult(runtime, params, results, hf->floatToMantissaAndExponent(*x), i); + return returnResult(runtime, params, results, hf->floatToMantExp(*x), i); } wasm_trap_t* -floatNegate_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +floatFromMantExp_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE @@ -1794,55 +1794,22 @@ floatNegate_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result auto* runtime = reinterpret_cast(hf->getRT()); int i = 0; - auto const x = getDataSlice(runtime, params, i); - if (!x) - return hfResult(results, x.error()); - - i = 2; - return returnResult(runtime, params, results, hf->floatNegate(*x), i); -} - -wasm_trap_t* -floatAbs_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) -{ - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); - - int i = 0; - auto const x = getDataSlice(runtime, params, i); - if (!x) - return hfResult(results, x.error()); - - i = 2; - return returnResult(runtime, params, results, hf->floatAbs(*x), i); -} - -wasm_trap_t* -floatSet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) -{ - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); - - int i = 0; - auto const exp = getDataInt32(runtime, params, i); - if (!exp) - return hfResult(results, exp.error()); // LCOV_EXCL_LINE auto const mant = getDataInt64(runtime, params, i); if (!mant) return hfResult(results, mant.error()); // LCOV_EXCL_LINE + auto const exp = getDataInt32(runtime, params, i); + if (!exp) + return hfResult(results, exp.error()); // LCOV_EXCL_LINE + i = 4; auto const rounding = getDataInt32(runtime, params, i); if (!rounding) return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 2; - return returnResult(runtime, params, results, hf->floatSet(*mant, *exp, *rounding), i); + return returnResult(runtime, params, results, hf->floatFromMantExp(*mant, *exp, *rounding), i); } wasm_trap_t* @@ -2021,28 +1988,6 @@ floatPower_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results return returnResult(runtime, params, results, hf->floatPower(*x, *n, *rounding), i); } -wasm_trap_t* -floatLog_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) -{ - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); - - int i = 0; - auto const x = getDataSlice(runtime, params, i); - if (!x) - return hfResult(results, x.error()); - - i = 4; - auto const rounding = getDataInt32(runtime, params, i); - if (!rounding) - return hfResult(results, rounding.error()); // LCOV_EXCL_LINE - - i = 2; - return returnResult(runtime, params, results, hf->floatLog(*x, *rounding), i); -} - // LCOV_EXCL_START namespace test { diff --git a/src/libxrpl/tx/wasm/WasmVM.cpp b/src/libxrpl/tx/wasm/WasmVM.cpp index d91e6832da..2a2627753f 100644 --- a/src/libxrpl/tx/wasm/WasmVM.cpp +++ b/src/libxrpl/tx/wasm/WasmVM.cpp @@ -79,10 +79,8 @@ setCommonHostFunctions(HostFunctions* hfs, ImportVec& i) WASM_IMPORT_FUNC2(i, floatFromSTAmount, "float_from_stamount", hfs, 150); WASM_IMPORT_FUNC2(i, floatFromSTNumber, "float_from_stnumber", hfs, 150); WASM_IMPORT_FUNC2(i, floatToInt, "float_to_int", hfs, 130); - WASM_IMPORT_FUNC2(i, floatToMantissaAndExponent, "float_to_mantissa_and_exponent", hfs, 130); - WASM_IMPORT_FUNC2(i, floatNegate, "float_negate", hfs, 150); - WASM_IMPORT_FUNC2(i, floatAbs, "float_abs", hfs, 150); - WASM_IMPORT_FUNC2(i, floatSet, "float_set", hfs, 100); + WASM_IMPORT_FUNC2(i, floatToMantExp, "float_to_mant_exp", hfs, 130); + WASM_IMPORT_FUNC2(i, floatFromMantExp, "float_from_mant_exp", hfs, 100); WASM_IMPORT_FUNC2(i, floatCompare, "float_compare", hfs, 80); WASM_IMPORT_FUNC2(i, floatAdd, "float_add", hfs, 160); WASM_IMPORT_FUNC2(i, floatSubtract, "float_subtract", hfs, 160); @@ -90,7 +88,6 @@ setCommonHostFunctions(HostFunctions* hfs, ImportVec& i) WASM_IMPORT_FUNC2(i, floatDivide, "float_divide", hfs, 300); WASM_IMPORT_FUNC2(i, floatRoot, "float_root", hfs, 5'500); WASM_IMPORT_FUNC2(i, floatPower, "float_pow", hfs, 5'500); - WASM_IMPORT_FUNC2(i, floatLog, "float_log", hfs, 12'000); // clang-format on } diff --git a/src/libxrpl/tx/wasm/WasmiVM.cpp b/src/libxrpl/tx/wasm/WasmiVM.cpp index bcdca5c03d..2ea7363fe3 100644 --- a/src/libxrpl/tx/wasm/WasmiVM.cpp +++ b/src/libxrpl/tx/wasm/WasmiVM.cpp @@ -368,7 +368,7 @@ ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) const if (importTypes.empty()) return {}; if (imports.empty()) - throw std::runtime_error("Missing imports"); + Throw("Empty imports"); WasmExternVec wimports(importTypes.size()); @@ -385,7 +385,7 @@ ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) const wasm_externkind_t const itype = wasm_externtype_kind(wasm_importtype_type(importType)); if ((itype) != WASM_EXTERN_FUNC) { - throw std::runtime_error( + Throw( "Invalid import type " + std::to_string(itype)); // LCOV_EXCL_LINE } @@ -393,46 +393,39 @@ ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) const // if ((W_ENV != modName) && (W_HOST_LIB != modName)) // continue; - bool impSet = false; - for (auto const& obj : imports) - { - auto const& imp = obj.second; - if (imp.name != fieldName) - continue; - - WasmValtypeVec params(makeImpParams(imp)); - WasmValtypeVec results(makeImpReturn(imp)); - - std::unique_ptr const ftype( - wasm_functype_new(params.get(), results.get()), &wasm_functype_delete); - - params.release(); - results.release(); - - wasm_func_t* func = wasm_func_new_with_env( - s.get(), - ftype.get(), - reinterpret_cast(imp.wrap), - (void*)&obj, - nullptr); - if (func == nullptr) - { - // LCOV_EXCL_START - throw std::runtime_error("can't create import function " + imp.name); - // LCOV_EXCL_STOP - } - - wimports[i] = wasm_func_as_extern(func); - ++impCnt; - impSet = true; - - break; - } - - if (!impSet) + auto const it = imports.find(fieldName); + if (it == imports.end()) { print_wasm_error("Import not found: " + std::string(fieldName), nullptr, j_); + continue; // print all missed import } + + auto const& obj = it->second; + auto const& imp = obj.second; + + WasmValtypeVec params(makeImpParams(imp)); + WasmValtypeVec results(makeImpReturn(imp)); + + std::unique_ptr const ftype( + wasm_functype_new(params.get(), results.get()), &wasm_functype_delete); + + params.release(); + results.release(); + + wasm_func_t* func = wasm_func_new_with_env( + s.get(), + ftype.get(), + reinterpret_cast(imp.wrap), + (void*)&obj, + nullptr); + if (func == nullptr) + { + Throw( + "can't create import function " + std::string(imp.name)); // LCOV_EXCL_LINE + } + + wimports[i] = wasm_func_as_extern(func); + ++impCnt; } if (impCnt != importTypes.size()) @@ -442,7 +435,7 @@ ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) const std::to_string(importTypes.size()), nullptr, j_); - throw std::runtime_error("Missing imports"); + Throw("Missing imports"); } return wimports; @@ -741,7 +734,7 @@ checkImports(ImportVec const& imports, HostFunctions* hfs) { for (auto const& obj : imports) { - if (hfs != obj.first) + if (hfs != obj.second.first) Throw("Imports hf unsync"); } } diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 95cdacd5d1..60ba559b76 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -289,7 +289,12 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.getLedgerSqn(); WasmValVec params(2), result(1); auto* trap = - ww(getLedgerSqn_wrap, &import[0], params, result, 0, sizeof(std::uint32_t)); + ww(getLedgerSqn_wrap, + &import.at("get_ledger_sqn"), + params, + result, + 0, + sizeof(std::uint32_t)); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == sizeof(std::uint32_t)) && @@ -317,7 +322,12 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.getParentLedgerTime(); WasmValVec params(2), result(1); auto* trap = - ww(getParentLedgerTime_wrap, &import[1], params, result, 0, sizeof(std::uint32_t)); + ww(getParentLedgerTime_wrap, + &import.at("get_parent_ledger_time"), + params, + result, + 0, + sizeof(std::uint32_t)); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == sizeof(std::uint32_t)) && @@ -347,7 +357,12 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.getParentLedgerHash(); WasmValVec params(2), result(1); auto* trap = - ww(getParentLedgerHash_wrap, &import[2], params, result, 0, uint256::bytes); + ww(getParentLedgerHash_wrap, + &import.at("get_parent_ledger_hash"), + params, + result, + 0, + uint256::bytes); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == uint256::bytes); @@ -378,7 +393,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.getBaseFee(); { WasmValVec params(2), result(1); - auto* trap = ww(getBaseFee_wrap, &import[3], params, result, 0, sizeof(std::uint32_t)); + auto* trap = + ww(getBaseFee_wrap, + &import.at("get_base_fee"), + params, + result, + 0, + sizeof(std::uint32_t)); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == sizeof(std::uint32_t)) && @@ -409,7 +430,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite { WasmValVec params(2), result(1); vrt.setBytes(0, amendmentId.data(), uint256::bytes); - auto* trap = ww(isAmendmentEnabled_wrap, &import[4], params, result, 0, uint256::bytes); + auto* trap = + ww(isAmendmentEnabled_wrap, + &import.at("amendment_enabled"), + params, + result, + 0, + uint256::bytes); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); @@ -421,7 +448,12 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(2), result(1); vrt.setBytes(0, amendmentName.data(), amendmentName.size()); auto* trap = - ww(isAmendmentEnabled_wrap, &import[4], params, result, 0, amendmentName.size()); + ww(isAmendmentEnabled_wrap, + &import.at("amendment_enabled"), + params, + result, + 0, + amendmentName.size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); @@ -432,7 +464,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite { WasmValVec params(2), result(1); vrt.setBytes(0, fakeId.data(), uint256::bytes); - auto* trap = ww(isAmendmentEnabled_wrap, &import[4], params, result, 0, uint256::bytes); + auto* trap = + ww(isAmendmentEnabled_wrap, + &import.at("amendment_enabled"), + params, + result, + 0, + uint256::bytes); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0); @@ -444,7 +482,12 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(2), result(1); vrt.setBytes(0, fakeName.data(), fakeName.size()); auto* trap = - ww(isAmendmentEnabled_wrap, &import[4], params, result, 0, fakeName.size()); + ww(isAmendmentEnabled_wrap, + &import.at("amendment_enabled"), + params, + result, + 0, + fakeName.size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0); @@ -474,7 +517,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(3), result(1); vrt.setBytes(0, accountKeylet.key.data(), uint256::bytes); auto* trap = - ww(cacheLedgerObj_wrap, &import[5], params, result, 0, uint256::bytes, -1); + ww(cacheLedgerObj_wrap, + &import.at("cache_ledger_obj"), + params, + result, + 0, + uint256::bytes, + -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -487,7 +536,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(3), result(1); vrt.setBytes(0, accountKeylet.key.data(), uint256::bytes); auto* trap = - ww(cacheLedgerObj_wrap, &import[5], params, result, 0, uint256::bytes, 257); + ww(cacheLedgerObj_wrap, + &import.at("cache_ledger_obj"), + params, + result, + 0, + uint256::bytes, + 257); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -500,7 +555,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(3), result(1); vrt.setBytes(0, dummyEscrow.key.data(), uint256::bytes); auto* trap = - ww(cacheLedgerObj_wrap, &import[5], params, result, 0, uint256::bytes, 0); + ww(cacheLedgerObj_wrap, + &import.at("cache_ledger_obj"), + params, + result, + 0, + uint256::bytes, + 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -513,7 +574,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(3), result(1); vrt.setBytes(0, accountKeylet.key.data(), uint256::bytes); auto* trap = - ww(cacheLedgerObj_wrap, &import[5], params, result, 0, uint256::bytes, 0); + ww(cacheLedgerObj_wrap, + &import.at("cache_ledger_obj"), + params, + result, + 0, + uint256::bytes, + 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); @@ -526,7 +593,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(3), result(1); vrt.setBytes(0, accountKeylet.key.data(), uint256::bytes); auto* trap = - ww(cacheLedgerObj_wrap, &import[5], params, result, 0, uint256::bytes, i); + ww(cacheLedgerObj_wrap, + &import.at("cache_ledger_obj"), + params, + result, + 0, + uint256::bytes, + i); if (!(BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECTS( @@ -541,7 +614,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(3), result(1); vrt.setBytes(0, accountKeylet.key.data(), uint256::bytes); auto* trap = - ww(cacheLedgerObj_wrap, &import[5], params, result, 0, uint256::bytes, 0); + ww(cacheLedgerObj_wrap, + &import.at("cache_ledger_obj"), + params, + result, + 0, + uint256::bytes, + 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -563,7 +642,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(3), result(1); vrt.setBytes(0, accountKeylet.key.data(), uint256::bytes); auto* trap = - ww(cacheLedgerObj_wrap, &import[5], params, result, 0, uint256::bytes, 0); + ww(cacheLedgerObj_wrap, + &import.at("cache_ledger_obj"), + params, + result, + 0, + uint256::bytes, + 0); if (!(BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECTS( @@ -578,7 +663,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(3), result(1); vrt.setBytes(0, accountKeylet.key.data(), uint256::bytes); auto* trap = - ww(cacheLedgerObj_wrap, &import[5], params, result, 0, uint256::bytes, 0); + ww(cacheLedgerObj_wrap, + &import.at("cache_ledger_obj"), + params, + result, + 0, + uint256::bytes, + 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -624,7 +715,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(3), result(1); auto* trap = ww(getTxField_wrap, - &import[6], + &import.at("get_tx_field"), params, result, sfAccount.getCode(), @@ -642,7 +733,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(3), result(1); auto* trap = ww(getTxField_wrap, - &import[6], + &import.at("get_tx_field"), params, result, sfOwner.getCode(), @@ -660,7 +751,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(3), result(1); auto* trap = ww(getTxField_wrap, - &import[6], + &import.at("get_tx_field"), params, result, sfTransactionType.getCode(), @@ -677,8 +768,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.getTxField(sfOfferSequence); { WasmValVec params(3), result(1); - auto* trap = ww( - getTxField_wrap, &import[6], params, result, sfOfferSequence.getCode(), 0, 256); + auto* trap = + ww(getTxField_wrap, + &import.at("get_tx_field"), + params, + result, + sfOfferSequence.getCode(), + 0, + 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 > 0); @@ -690,8 +787,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.getTxField(sfDestination); { WasmValVec params(3), result(1); - auto* trap = ww( - getTxField_wrap, &import[6], params, result, sfDestination.getCode(), 0, 256); + auto* trap = + ww(getTxField_wrap, + &import.at("get_tx_field"), + params, + result, + sfDestination.getCode(), + 0, + 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -703,7 +806,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite { WasmValVec params(3), result(1); auto* trap = - ww(getTxField_wrap, &import[6], params, result, sfMemos.getCode(), 0, 256); + ww(getTxField_wrap, + &import.at("get_tx_field"), + params, + result, + sfMemos.getCode(), + 0, + 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -714,8 +823,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.getTxField(sfCredentialIDs); { WasmValVec params(3), result(1); - auto* trap = ww( - getTxField_wrap, &import[6], params, result, sfCredentialIDs.getCode(), 0, 256); + auto* trap = + ww(getTxField_wrap, + &import.at("get_tx_field"), + params, + result, + sfCredentialIDs.getCode(), + 0, + 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECTS( @@ -727,7 +842,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite { WasmValVec params(3), result(1); auto* trap = - ww(getTxField_wrap, &import[6], params, result, sfInvalid.getCode(), 0, 256); + ww(getTxField_wrap, + &import.at("get_tx_field"), + params, + result, + sfInvalid.getCode(), + 0, + 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -739,7 +860,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite { WasmValVec params(3), result(1); auto* trap = - ww(getTxField_wrap, &import[6], params, result, sfGeneric.getCode(), 0, 256); + ww(getTxField_wrap, + &import.at("get_tx_field"), + params, + result, + sfGeneric.getCode(), + 0, + 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -766,7 +893,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite { WasmValVec params(3), result(1); auto* trap = - ww(getTxField_wrap, &import[6], params, result, sfAsset.getCode(), 0, 256); + ww(getTxField_wrap, + &import.at("get_tx_field"), + params, + result, + sfAsset.getCode(), + 0, + 256); std::vector const expectedAsset(20, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && @@ -780,7 +913,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite { WasmValVec params(3), result(1); auto* trap = - ww(getTxField_wrap, &import[6], params, result, sfAsset2.getCode(), 0, 256); + ww(getTxField_wrap, + &import.at("get_tx_field"), + params, + result, + sfAsset2.getCode(), + 0, + 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 > 0); @@ -809,7 +948,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite { WasmValVec params(3), result(1); auto* trap = - ww(getTxField_wrap, &import[6], params, result, sfAsset.getCode(), 0, 256); + ww(getTxField_wrap, + &import.at("get_tx_field"), + params, + result, + sfAsset.getCode(), + 0, + 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECT(result[0].of.i32 > 0)) @@ -824,7 +969,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite { WasmValVec params(3), result(1); auto* trap = - ww(getTxField_wrap, &import[6], params, result, sfAsset2.getCode(), 0, 256); + ww(getTxField_wrap, + &import.at("get_tx_field"), + params, + result, + sfAsset2.getCode(), + 0, + 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECT(result[0].of.i32 > 0)) @@ -853,7 +1004,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite { WasmValVec params(3), result(1); auto* trap = - ww(getTxField_wrap, &import[6], params, result, sfAssetScale.getCode(), 0, 256); + ww(getTxField_wrap, + &import.at("get_tx_field"), + params, + result, + sfAssetScale.getCode(), + 0, + 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECT(result[0].of.i32 > 0)) @@ -897,7 +1054,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(3), result(1); auto* trap = ww(getCurrentLedgerObjField_wrap, - &import[7], + &import.at("get_current_ledger_obj_field"), params, result, sfAccount.getCode(), @@ -918,7 +1075,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(3), result(1); auto* trap = ww(getCurrentLedgerObjField_wrap, - &import[7], + &import.at("get_current_ledger_obj_field"), params, result, sfAmount.getCode(), @@ -939,7 +1096,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(3), result(1); auto* trap = ww(getCurrentLedgerObjField_wrap, - &import[7], + &import.at("get_current_ledger_obj_field"), params, result, sfPreviousTxnID.getCode(), @@ -960,7 +1117,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(3), result(1); auto* trap = ww(getCurrentLedgerObjField_wrap, - &import[7], + &import.at("get_current_ledger_obj_field"), params, result, sfOwner.getCode(), @@ -985,7 +1142,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(3), result(1); auto* trap = ww(getCurrentLedgerObjField_wrap, - &import2[7], + &import2.at("get_current_ledger_obj_field"), params, result, sfAccount.getCode(), @@ -1027,7 +1184,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite { WasmValVec params(3), result(1); vrt.setBytes(0, accountKeylet.key.data(), uint256::bytes); - auto* trap = ww(cacheLedgerObj_wrap, &import[5], params, result, 0, uint256::bytes, 1); + auto* trap = + ww(cacheLedgerObj_wrap, + &import.at("cache_ledger_obj"), + params, + result, + 0, + uint256::bytes, + 1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); @@ -1036,8 +1200,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.getLedgerObjField(1, sfAccount); { WasmValVec params(4), result(1); - auto* trap = ww( - getLedgerObjField_wrap, &import[8], params, result, 1, sfAccount.getCode(), 0, 256); + auto* trap = + ww(getLedgerObjField_wrap, + &import.at("get_ledger_obj_field"), + params, + result, + 1, + sfAccount.getCode(), + 0, + 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECTS(result[0].of.i32 > 0, std::to_string(result[0].of.i32))) @@ -1051,8 +1222,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.getLedgerObjField(1, sfBalance); { WasmValVec params(4), result(1); - auto* trap = ww( - getLedgerObjField_wrap, &import[8], params, result, 1, sfBalance.getCode(), 0, 256); + auto* trap = + ww(getLedgerObjField_wrap, + &import.at("get_ledger_obj_field"), + params, + result, + 1, + sfBalance.getCode(), + 0, + 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECT(result[0].of.i32 > 0)) @@ -1066,8 +1244,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.getLedgerObjField(0, sfAccount); { WasmValVec params(4), result(1); - auto* trap = ww( - getLedgerObjField_wrap, &import[8], params, result, 0, sfAccount.getCode(), 0, 256); + auto* trap = + ww(getLedgerObjField_wrap, + &import.at("get_ledger_obj_field"), + params, + result, + 0, + sfAccount.getCode(), + 0, + 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -1079,7 +1264,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(4), result(1); auto* trap = ww(getLedgerObjField_wrap, - &import[8], + &import.at("get_ledger_obj_field"), params, result, 257, @@ -1095,8 +1280,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.getLedgerObjField(2, sfAccount); { WasmValVec params(4), result(1); - auto* trap = ww( - getLedgerObjField_wrap, &import[8], params, result, 2, sfAccount.getCode(), 0, 256); + auto* trap = + ww(getLedgerObjField_wrap, + &import.at("get_ledger_obj_field"), + params, + result, + 2, + sfAccount.getCode(), + 0, + 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -1106,8 +1298,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.getLedgerObjField(1, sfOwner); { WasmValVec params(4), result(1); - auto* trap = ww( - getLedgerObjField_wrap, &import[8], params, result, 1, sfOwner.getCode(), 0, 256); + auto* trap = + ww(getLedgerObjField_wrap, + &import.at("get_ledger_obj_field"), + params, + result, + 1, + sfOwner.getCode(), + 0, + 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -1161,7 +1360,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(4), result(1); auto* trap = ww(getTxNestedField_wrap, - &import[9], + &import.at("get_tx_nested_field"), params, result, 0, @@ -1191,7 +1390,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(4), result(1); auto* trap = ww(getTxNestedField_wrap, - &import[9], + &import.at("get_tx_nested_field"), params, result, 0, @@ -1218,7 +1417,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(4), result(1); auto* trap = ww(getTxNestedField_wrap, - &import[9], + &import.at("get_tx_nested_field"), params, result, 0, @@ -1244,7 +1443,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(4), result(1); auto* trap = - ww(getTxNestedField_wrap, &import[9], params, result, 0, sizeof(int32_t), 256, 256); + ww(getTxNestedField_wrap, + &import.at("get_tx_nested_field"), + params, + result, + 0, + sizeof(int32_t), + 256, + 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECTS(result[0].of.i32 > 0, std::to_string(result[0].of.i32))) @@ -1263,7 +1469,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.getTxNestedField(locator); auto* trap = ww(getTxNestedField_wrap, - &import[9], + &import.at("get_tx_nested_field"), params, result, 0, @@ -1391,7 +1597,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(0, locatorVec.data(), 3); WasmValVec params(4), result(1); - auto* trap = ww(getTxNestedField_wrap, &import[9], params, result, 0, 3, 256, 256); + auto* trap = + ww(getTxNestedField_wrap, + &import.at("get_tx_nested_field"), + params, + result, + 0, + 3, + 256, + 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -1433,7 +1647,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(4), result(1); auto* trap = ww(getCurrentLedgerObjNestedField_wrap, - &import[10], + &import.at("get_current_ledger_obj_nested_field"), params, result, 0, @@ -1458,7 +1672,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.getCurrentLedgerObjNestedField(locator); auto* trap = ww(getCurrentLedgerObjNestedField_wrap, - &import[10], + &import.at("get_current_ledger_obj_nested_field"), params, result, 0, @@ -1491,8 +1705,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Locator for empty locator { WasmValVec params(4), result(1); - auto* trap = ww( - getCurrentLedgerObjNestedField_wrap, &import[10], params, result, 0, 0, 256, 256); + auto* trap = + ww(getCurrentLedgerObjNestedField_wrap, + &import.at("get_current_ledger_obj_nested_field"), + params, + result, + 0, + 0, + 256, + 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -1506,8 +1727,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(0, malformedLocatorVec.data(), 3); WasmValVec params(4), result(1); - auto* trap = ww( - getCurrentLedgerObjNestedField_wrap, &import[10], params, result, 0, 3, 256, 256); + auto* trap = + ww(getCurrentLedgerObjNestedField_wrap, + &import.at("get_current_ledger_obj_nested_field"), + params, + result, + 0, + 3, + 256, + 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -1529,7 +1757,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(4), result(1); auto* trap = ww(getCurrentLedgerObjNestedField_wrap, - &import2[10], + &import2.at("get_current_ledger_obj_nested_field"), params, result, 0, @@ -1573,7 +1801,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite { WasmValVec params(3), result(1); vrt.setBytes(0, signerListKeylet.key.data(), uint256::bytes); - auto* trap = ww(cacheLedgerObj_wrap, &import[5], params, result, 0, uint256::bytes, 1); + auto* trap = + ww(cacheLedgerObj_wrap, + &import.at("cache_ledger_obj"), + params, + result, + 0, + uint256::bytes, + 1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); } @@ -1587,7 +1822,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(5), result(1); auto* trap = ww(getLedgerObjNestedField_wrap, - &import[11], + &import.at("get_ledger_obj_nested_field"), params, result, 1, @@ -1614,7 +1849,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(5), result(1); auto* trap = ww(getLedgerObjNestedField_wrap, - &import[11], + &import.at("get_ledger_obj_nested_field"), params, result, 1, @@ -1641,7 +1876,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(5), result(1); auto* trap = ww(getLedgerObjNestedField_wrap, - &import[11], + &import.at("get_ledger_obj_nested_field"), params, result, 1, @@ -1669,7 +1904,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(5), result(1); auto* trap = ww(getLedgerObjNestedField_wrap, - &import[11], + &import.at("get_ledger_obj_nested_field"), params, result, 1, @@ -1697,7 +1932,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(5), result(1); auto* trap = ww(getLedgerObjNestedField_wrap, - &import[11], + &import.at("get_ledger_obj_nested_field"), params, result, slot, @@ -1768,7 +2003,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(0, locatorVec.data(), 3); WasmValVec params(5), result(1); auto* trap = - ww(getLedgerObjNestedField_wrap, &import[11], params, result, 1, 0, 3, 256, 256); + ww(getLedgerObjNestedField_wrap, + &import.at("get_ledger_obj_nested_field"), + params, + result, + 1, + 0, + 3, + 256, + 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -1822,7 +2065,12 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.getTxArrayLen(sfMemos); { WasmValVec params(1), result(1); - auto* trap = ww(getTxArrayLen_wrap, &import[12], params, result, sfMemos.fieldCode); + auto* trap = + ww(getTxArrayLen_wrap, + &import.at("get_tx_array_len"), + params, + result, + sfMemos.fieldCode); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECT(result[0].of.i32 > 0)) @@ -1833,7 +2081,12 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.getTxArrayLen(sfAccount); { WasmValVec params(1), result(1); - auto* trap = ww(getTxArrayLen_wrap, &import[12], params, result, sfAccount.fieldCode); + auto* trap = + ww(getTxArrayLen_wrap, + &import.at("get_tx_array_len"), + params, + result, + sfAccount.fieldCode); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::NO_ARRAY)); @@ -1843,7 +2096,12 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.getTxArrayLen(sfSigners); { WasmValVec params(1), result(1); - auto* trap = ww(getTxArrayLen_wrap, &import[12], params, result, sfSigners.fieldCode); + auto* trap = + ww(getTxArrayLen_wrap, + &import.at("get_tx_array_len"), + params, + result, + sfSigners.fieldCode); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT( @@ -1855,7 +2113,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite { WasmValVec params(1), result(1); auto* trap = - ww(getTxArrayLen_wrap, &import[12], params, result, sfCredentialIDs.fieldCode); + ww(getTxArrayLen_wrap, + &import.at("get_tx_array_len"), + params, + result, + sfCredentialIDs.fieldCode); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECT(result[0].of.i32 > 0)) @@ -1891,7 +2153,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(1), result(1); auto* trap = ww(getCurrentLedgerObjArrayLen_wrap, - &import[13], + &import.at("get_current_ledger_obj_array_len"), params, result, sfSignerEntries.fieldCode); @@ -1904,8 +2166,12 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.getCurrentLedgerObjArrayLen(sfMemos); { WasmValVec params(1), result(1); - auto* trap = ww( - getCurrentLedgerObjArrayLen_wrap, &import[13], params, result, sfMemos.fieldCode); + auto* trap = + ww(getCurrentLedgerObjArrayLen_wrap, + &import.at("get_current_ledger_obj_array_len"), + params, + result, + sfMemos.fieldCode); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT( @@ -1916,8 +2182,12 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.getCurrentLedgerObjArrayLen(sfAccount); { WasmValVec params(1), result(1); - auto* trap = ww( - getCurrentLedgerObjArrayLen_wrap, &import[13], params, result, sfAccount.fieldCode); + auto* trap = + ww(getCurrentLedgerObjArrayLen_wrap, + &import.at("get_current_ledger_obj_array_len"), + params, + result, + sfAccount.fieldCode); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::NO_ARRAY)); @@ -1933,8 +2203,12 @@ struct HostFuncImpl_test : public beast::unit_test::suite // auto const len = dummyHfs.getCurrentLedgerObjArrayLen(sfMemos); WasmValVec params(1), result(1); - auto* trap = ww( - getCurrentLedgerObjArrayLen_wrap, &import2[13], params, result, sfMemos.fieldCode); + auto* trap = + ww(getCurrentLedgerObjArrayLen_wrap, + &import2.at("get_current_ledger_obj_array_len"), + params, + result, + sfMemos.fieldCode); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT( @@ -1970,7 +2244,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite { WasmValVec params(3), result(1); vrt.setBytes(0, signerListKeylet.key.data(), uint256::bytes); - auto* trap = ww(cacheLedgerObj_wrap, &import[5], params, result, 0, uint256::bytes, 1); + auto* trap = + ww(cacheLedgerObj_wrap, + &import.at("cache_ledger_obj"), + params, + result, + 0, + uint256::bytes, + 1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); } @@ -1980,7 +2261,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(2), result(1); auto* trap = ww(getLedgerObjArrayLen_wrap, - &import[14], + &import.at("get_ledger_obj_array_len"), params, result, 1, @@ -1998,7 +2279,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(2), result(1); auto* trap = ww(getLedgerObjArrayLen_wrap, - &import[14], + &import.at("get_ledger_obj_array_len"), params, result, 0, @@ -2014,7 +2295,12 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.getLedgerObjArrayLen(1, sfAccount); WasmValVec params(2), result(1); auto* trap = - ww(getLedgerObjArrayLen_wrap, &import[14], params, result, 1, sfAccount.fieldCode); + ww(getLedgerObjArrayLen_wrap, + &import.at("get_ledger_obj_array_len"), + params, + result, + 1, + sfAccount.fieldCode); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::NO_ARRAY)); @@ -2026,7 +2312,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(2), result(1); auto* trap = ww(getLedgerObjArrayLen_wrap, - &import[14], + &import.at("get_ledger_obj_array_len"), params, result, 2, @@ -2041,7 +2327,12 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.getLedgerObjArrayLen(1, sfMemos); WasmValVec params(2), result(1); auto* trap = - ww(getLedgerObjArrayLen_wrap, &import[14], params, result, 1, sfMemos.fieldCode); + ww(getLedgerObjArrayLen_wrap, + &import.at("get_ledger_obj_array_len"), + params, + result, + 1, + sfMemos.fieldCode); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT( @@ -2082,7 +2373,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(2), result(1); auto* trap = ww(getTxNestedArrayLen_wrap, - &import[15], + &import.at("get_tx_nested_array_len"), params, result, 0, @@ -2102,7 +2393,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(2), result(1); auto* trap = ww(getTxNestedArrayLen_wrap, - &import[15], + &import.at("get_tx_nested_array_len"), params, result, 0, @@ -2150,7 +2441,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(2), result(1); auto* trap = ww(getCurrentLedgerObjNestedArrayLen_wrap, - &import[16], + &import.at("get_current_ledger_obj_nested_array_len"), params, result, 0, @@ -2170,7 +2461,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(2), result(1); auto* trap = ww(getCurrentLedgerObjNestedArrayLen_wrap, - &import[16], + &import.at("get_current_ledger_obj_nested_array_len"), params, result, 0, @@ -2200,7 +2491,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(2), result(1); auto* trap = ww(getCurrentLedgerObjNestedArrayLen_wrap, - &import2[16], + &import2.at("get_current_ledger_obj_nested_array_len"), params, result, 0, @@ -2240,7 +2531,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite { WasmValVec params(3), result(1); vrt.setBytes(0, signerListKeylet.key.data(), uint256::bytes); - auto* trap = ww(cacheLedgerObj_wrap, &import[5], params, result, 0, uint256::bytes, 1); + auto* trap = + ww(cacheLedgerObj_wrap, + &import.at("cache_ledger_obj"), + params, + result, + 0, + uint256::bytes, + 1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); } @@ -2253,7 +2551,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(3), result(1); auto* trap = ww(getLedgerObjNestedArrayLen_wrap, - &import[17], + &import.at("get_ledger_obj_nested_array_len"), params, result, 1, @@ -2274,7 +2572,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(3), result(1); auto* trap = ww(getLedgerObjNestedArrayLen_wrap, - &import[17], + &import.at("get_ledger_obj_nested_array_len"), params, result, slot, @@ -2308,7 +2606,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.getLedgerObjNestedArrayLen(1, malformedLocator); vrt.setBytes(0, locatorVec.data(), 3); WasmValVec params(3), result(1); - auto* trap = ww(getLedgerObjNestedArrayLen_wrap, &import[17], params, result, 1, 0, 3); + auto* trap = + ww(getLedgerObjNestedArrayLen_wrap, + &import.at("get_ledger_obj_nested_array_len"), + params, + result, + 1, + 0, + 3); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -2348,7 +2653,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite { vrt.setBytes(0, data.data(), data.size()); WasmValVec params(2), result(1); - auto* trap = ww(updateData_wrap, &import[67], params, result, 0, data.size()); + auto* trap = + ww(updateData_wrap, &import.at("update_data"), params, result, 0, data.size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == data.size()); @@ -2361,7 +2667,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite { vrt.setBytes(0, bigData.data(), bigData.size()); WasmValVec params(2), result(1); - auto* trap = ww(updateData_wrap, &import[67], params, result, 0, bigData.size()); + auto* trap = + ww(updateData_wrap, &import.at("update_data"), params, result, 0, bigData.size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -2405,7 +2712,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(6), result(1); auto* trap = ww(checkSignature_wrap, - &import[18], + &import.at("check_sig"), params, result, 0, @@ -2432,7 +2739,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(6), result(1); auto* trap = ww(checkSignature_wrap, - &import[18], + &import.at("check_sig"), params, result, 0, @@ -2459,7 +2766,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(6), result(1); auto* trap = ww(checkSignature_wrap, - &import[18], + &import.at("check_sig"), params, result, 0, @@ -2484,7 +2791,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(6), result(1); auto* trap = ww(checkSignature_wrap, - &import[18], + &import.at("check_sig"), params, result, 0, @@ -2509,7 +2816,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(6), result(1); auto* trap = ww(checkSignature_wrap, - &import[18], + &import.at("check_sig"), params, result, 0, @@ -2532,7 +2839,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(6), result(1); auto* trap = ww(checkSignature_wrap, - &import[18], + &import.at("check_sig"), params, result, 0, @@ -2571,7 +2878,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(4), result(1); auto* trap = ww(computeSha512HalfHash_wrap, - &import[19], + &import.at("compute_sha512_half"), params, result, 0, @@ -2618,14 +2925,22 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const expected = keylet::account(masterID); WasmValVec params(4), result(1); - auto* trap = ww(accountKeylet_wrap, &imp[20], params, result, masterID, 1024, 32); + auto* trap = ww( + accountKeylet_wrap, &imp.at("account_keylet"), params, result, masterID, 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 2); BEAST_EXPECT(compareKeylet(actual, expected)); } - auto* trap2 = ww(accountKeylet_wrap, &imp[20], params, result, xrpAccount(), 1024, 32); + auto* trap2 = + ww(accountKeylet_wrap, + &imp.at("account_keylet"), + params, + result, + xrpAccount(), + 1024, + 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); @@ -2636,7 +2951,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(6), result(1); auto* trap = - ww(ammKeylet_wrap, &imp[21], params, result, xrpIssue(), usdIssue, 1024, 32); + ww(ammKeylet_wrap, + &imp.at("amm_keylet"), + params, + result, + xrpIssue(), + usdIssue, + 1024, + 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); @@ -2644,13 +2966,27 @@ struct HostFuncImpl_test : public beast::unit_test::suite } auto* trap2 = - ww(ammKeylet_wrap, &imp[21], params, result, xrpIssue(), xrpIssue(), 1024, 32); + ww(ammKeylet_wrap, + &imp.at("amm_keylet"), + params, + result, + xrpIssue(), + xrpIssue(), + 1024, + 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::INVALID_PARAMS)); auto* trap3 = - ww(ammKeylet_wrap, &imp[21], params, result, baseMpt, xrpIssue(), 1024, 32); + ww(ammKeylet_wrap, + &imp.at("amm_keylet"), + params, + result, + baseMpt, + xrpIssue(), + 1024, + 32); BEAST_EXPECT( !trap3 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::INVALID_PARAMS)); @@ -2660,7 +2996,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const expected = keylet::check(masterID, 1u); WasmValVec params(6), result(1); auto* trap = - ww(checkKeylet_wrap, &imp[22], params, result, masterID, toBytes(1u), 1024, 32); + ww(checkKeylet_wrap, + &imp.at("check_keylet"), + params, + result, + masterID, + toBytes(1u), + 1024, + 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); @@ -2668,7 +3011,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite } auto* trap2 = - ww(checkKeylet_wrap, &imp[22], params, result, xrpAccount(), toBytes(1u), 1024, 32); + ww(checkKeylet_wrap, + &imp.at("check_keylet"), + params, + result, + xrpAccount(), + toBytes(1u), + 1024, + 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); @@ -2682,7 +3032,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(8), result(1); auto* trap = ww(credentialKeylet_wrap, - &imp[23], + &imp.at("credential_keylet"), params, result, masterID, @@ -2703,7 +3053,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite static_assert(longCredTypeStr.size() > maxCredentialTypeLength); auto* trap2 = ww(credentialKeylet_wrap, - &imp[23], + &imp.at("credential_keylet"), params, result, masterID, @@ -2717,7 +3067,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto* trap3 = ww(credentialKeylet_wrap, - &imp[23], + &imp.at("credential_keylet"), params, result, xrpAccount(), @@ -2731,7 +3081,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto* trap4 = ww(credentialKeylet_wrap, - &imp[23], + &imp.at("credential_keylet"), params, result, masterID, @@ -2747,14 +3097,16 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const expected = keylet::did(masterID); WasmValVec params(4), result(1); - auto* trap = ww(didKeylet_wrap, &imp[26], params, result, masterID, 1024, 32); + auto* trap = + ww(didKeylet_wrap, &imp.at("did_keylet"), params, result, masterID, 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 2); BEAST_EXPECT(compareKeylet(actual, expected)); } - auto* trap2 = ww(didKeylet_wrap, &imp[26], params, result, xrpAccount(), 1024, 32); + auto* trap2 = + ww(didKeylet_wrap, &imp.at("did_keylet"), params, result, xrpAccount(), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); @@ -2764,38 +3116,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const expected = keylet::delegate(masterID, alice.id()); WasmValVec params(6), result(1); auto* trap = - ww(delegateKeylet_wrap, &imp[24], params, result, masterID, alice.id(), 1024, 32); - if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) - { - auto const actual = vrt.getBytes(params, 4); - BEAST_EXPECT(compareKeylet(actual, expected)); - } - - auto* trap2 = - ww(delegateKeylet_wrap, &imp[24], params, result, masterID, masterID, 1024, 32); - BEAST_EXPECT( - !trap2 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_PARAMS)); - - auto* trap3 = - ww(delegateKeylet_wrap, &imp[24], params, result, masterID, xrpAccount(), 1024, 32); - BEAST_EXPECT( - !trap3 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); - - auto* trap4 = - ww(delegateKeylet_wrap, &imp[24], params, result, xrpAccount(), masterID, 1024, 32); - BEAST_EXPECT( - !trap4 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); - } - - { - auto const expected = keylet::depositPreauth(masterID, alice.id()); - WasmValVec params(6), result(1); - auto* trap = - ww(depositPreauthKeylet_wrap, - &imp[25], + ww(delegateKeylet_wrap, + &imp.at("delegate_keylet"), params, result, masterID, @@ -2808,15 +3130,80 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(compareKeylet(actual, expected)); } - auto* trap2 = ww( - depositPreauthKeylet_wrap, &imp[25], params, result, masterID, masterID, 1024, 32); + auto* trap2 = + ww(delegateKeylet_wrap, + &imp.at("delegate_keylet"), + params, + result, + masterID, + masterID, + 1024, + 32); + BEAST_EXPECT( + !trap2 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_PARAMS)); + + auto* trap3 = + ww(delegateKeylet_wrap, + &imp.at("delegate_keylet"), + params, + result, + masterID, + xrpAccount(), + 1024, + 32); + BEAST_EXPECT( + !trap3 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + + auto* trap4 = + ww(delegateKeylet_wrap, + &imp.at("delegate_keylet"), + params, + result, + xrpAccount(), + masterID, + 1024, + 32); + BEAST_EXPECT( + !trap4 && result[0].kind == WASM_I32 && + result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + } + + { + auto const expected = keylet::depositPreauth(masterID, alice.id()); + WasmValVec params(6), result(1); + auto* trap = + ww(depositPreauthKeylet_wrap, + &imp.at("deposit_preauth_keylet"), + params, + result, + masterID, + alice.id(), + 1024, + 32); + if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) + { + auto const actual = vrt.getBytes(params, 4); + BEAST_EXPECT(compareKeylet(actual, expected)); + } + + auto* trap2 = + ww(depositPreauthKeylet_wrap, + &imp.at("deposit_preauth_keylet"), + params, + result, + masterID, + masterID, + 1024, + 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::INVALID_PARAMS)); auto* trap3 = ww(depositPreauthKeylet_wrap, - &imp[25], + &imp.at("deposit_preauth_keylet"), params, result, masterID, @@ -2829,7 +3216,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto* trap4 = ww(depositPreauthKeylet_wrap, - &imp[25], + &imp.at("deposit_preauth_keylet"), params, result, xrpAccount(), @@ -2845,15 +3232,29 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const expected = keylet::escrow(masterID, 1u); WasmValVec params(6), result(1); auto* trap = - ww(escrowKeylet_wrap, &imp[27], params, result, masterID, toBytes(1u), 1024, 32); + ww(escrowKeylet_wrap, + &imp.at("escrow_keylet"), + params, + result, + masterID, + toBytes(1u), + 1024, + 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); BEAST_EXPECT(compareKeylet(actual, expected)); } - auto* trap2 = ww( - escrowKeylet_wrap, &imp[27], params, result, xrpAccount(), toBytes(1u), 1024, 32); + auto* trap2 = + ww(escrowKeylet_wrap, + &imp.at("escrow_keylet"), + params, + result, + xrpAccount(), + toBytes(1u), + 1024, + 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); @@ -2864,7 +3265,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const expected = keylet::line(masterID, alice.id(), usd); WasmValVec params(8), result(1); auto* trap = - ww(lineKeylet_wrap, &imp[28], params, result, masterID, alice.id(), usd, 1024, 32); + ww(lineKeylet_wrap, + &imp.at("line_keylet"), + params, + result, + masterID, + alice.id(), + usd, + 1024, + 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 6); @@ -2872,26 +3281,50 @@ struct HostFuncImpl_test : public beast::unit_test::suite } auto* trap2 = - ww(lineKeylet_wrap, &imp[28], params, result, masterID, masterID, usd, 1024, 32); + ww(lineKeylet_wrap, + &imp.at("line_keylet"), + params, + result, + masterID, + masterID, + usd, + 1024, + 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::INVALID_PARAMS)); - auto* trap3 = ww( - lineKeylet_wrap, &imp[28], params, result, masterID, xrpAccount(), usd, 1024, 32); + auto* trap3 = + ww(lineKeylet_wrap, + &imp.at("line_keylet"), + params, + result, + masterID, + xrpAccount(), + usd, + 1024, + 32); BEAST_EXPECT( !trap3 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); - auto* trap4 = ww( - lineKeylet_wrap, &imp[28], params, result, xrpAccount(), masterID, usd, 1024, 32); + auto* trap4 = + ww(lineKeylet_wrap, + &imp.at("line_keylet"), + params, + result, + xrpAccount(), + masterID, + usd, + 1024, + 32); BEAST_EXPECT( !trap4 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); auto* trap5 = ww(lineKeylet_wrap, - &imp[28], + &imp.at("line_keylet"), params, result, masterID, @@ -2907,8 +3340,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const expected = keylet::mptIssuance(1u, masterID); WasmValVec params(6), result(1); - auto* trap = ww( - mptIssuanceKeylet_wrap, &imp[29], params, result, masterID, toBytes(1u), 1024, 32); + auto* trap = + ww(mptIssuanceKeylet_wrap, + &imp.at("mpt_issuance_keylet"), + params, + result, + masterID, + toBytes(1u), + 1024, + 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); @@ -2917,7 +3357,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto* trap2 = ww(mptIssuanceKeylet_wrap, - &imp[29], + &imp.at("mpt_issuance_keylet"), params, result, xrpAccount(), @@ -2933,7 +3373,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const expected = keylet::mptoken(baseMpt, alice.id()); WasmValVec params(6), result(1); auto* trap = - ww(mptokenKeylet_wrap, &imp[30], params, result, baseMpt, alice.id(), 1024, 32); + ww(mptokenKeylet_wrap, + &imp.at("mptoken_keylet"), + params, + result, + baseMpt, + alice.id(), + 1024, + 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); @@ -2941,13 +3388,27 @@ struct HostFuncImpl_test : public beast::unit_test::suite } auto* trap2 = - ww(mptokenKeylet_wrap, &imp[30], params, result, MPTID{}, alice.id(), 1024, 32); + ww(mptokenKeylet_wrap, + &imp.at("mptoken_keylet"), + params, + result, + MPTID{}, + alice.id(), + 1024, + 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::INVALID_PARAMS)); auto* trap3 = - ww(mptokenKeylet_wrap, &imp[30], params, result, baseMpt, xrpAccount(), 1024, 32); + ww(mptokenKeylet_wrap, + &imp.at("mptoken_keylet"), + params, + result, + baseMpt, + xrpAccount(), + 1024, + 32); BEAST_EXPECT( !trap3 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); @@ -2957,15 +3418,29 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const expected = keylet::nftoffer(masterID, 1u); WasmValVec params(6), result(1); auto* trap = - ww(nftOfferKeylet_wrap, &imp[31], params, result, masterID, toBytes(1u), 1024, 32); + ww(nftOfferKeylet_wrap, + &imp.at("nft_offer_keylet"), + params, + result, + masterID, + toBytes(1u), + 1024, + 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); BEAST_EXPECT(compareKeylet(actual, expected)); } - auto* trap2 = ww( - nftOfferKeylet_wrap, &imp[31], params, result, xrpAccount(), toBytes(1u), 1024, 32); + auto* trap2 = + ww(nftOfferKeylet_wrap, + &imp.at("nft_offer_keylet"), + params, + result, + xrpAccount(), + toBytes(1u), + 1024, + 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); @@ -2975,7 +3450,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const expected = keylet::offer(masterID, 1u); WasmValVec params(6), result(1); auto* trap = - ww(offerKeylet_wrap, &imp[32], params, result, masterID, toBytes(1u), 1024, 32); + ww(offerKeylet_wrap, + &imp.at("offer_keylet"), + params, + result, + masterID, + toBytes(1u), + 1024, + 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); @@ -2983,7 +3465,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite } auto* trap2 = - ww(offerKeylet_wrap, &imp[32], params, result, xrpAccount(), toBytes(1u), 1024, 32); + ww(offerKeylet_wrap, + &imp.at("offer_keylet"), + params, + result, + xrpAccount(), + toBytes(1u), + 1024, + 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); @@ -2993,15 +3482,29 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const expected = keylet::oracle(masterID, 1u); WasmValVec params(6), result(1); auto* trap = - ww(oracleKeylet_wrap, &imp[33], params, result, masterID, toBytes(1u), 1024, 32); + ww(oracleKeylet_wrap, + &imp.at("oracle_keylet"), + params, + result, + masterID, + toBytes(1u), + 1024, + 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); BEAST_EXPECT(compareKeylet(actual, expected)); } - auto* trap2 = ww( - oracleKeylet_wrap, &imp[33], params, result, xrpAccount(), toBytes(1u), 1024, 32); + auto* trap2 = + ww(oracleKeylet_wrap, + &imp.at("oracle_keylet"), + params, + result, + xrpAccount(), + toBytes(1u), + 1024, + 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); @@ -3012,7 +3515,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(8), result(1); auto* trap = ww(paychanKeylet_wrap, - &imp[34], + &imp.at("paychan_keylet"), params, result, masterID, @@ -3028,7 +3531,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto* trap2 = ww(paychanKeylet_wrap, - &imp[34], + &imp.at("paychan_keylet"), params, result, masterID, @@ -3042,7 +3545,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto* trap3 = ww(paychanKeylet_wrap, - &imp[34], + &imp.at("paychan_keylet"), params, result, masterID, @@ -3056,7 +3559,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto* trap4 = ww(paychanKeylet_wrap, - &imp[34], + &imp.at("paychan_keylet"), params, result, xrpAccount(), @@ -3074,7 +3577,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(6), result(1); auto* trap = ww(permissionedDomainKeylet_wrap, - &imp[35], + &imp.at("permissioned_domain_keylet"), params, result, masterID, @@ -3089,7 +3592,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto* trap2 = ww(permissionedDomainKeylet_wrap, - &imp[35], + &imp.at("permissioned_domain_keylet"), params, result, xrpAccount(), @@ -3104,14 +3607,22 @@ struct HostFuncImpl_test : public beast::unit_test::suite { auto const expected = keylet::signers(masterID); WasmValVec params(4), result(1); - auto* trap = ww(signersKeylet_wrap, &imp[36], params, result, masterID, 1024, 32); + auto* trap = ww( + signersKeylet_wrap, &imp.at("signers_keylet"), params, result, masterID, 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 2); BEAST_EXPECT(compareKeylet(actual, expected)); } - auto* trap2 = ww(signersKeylet_wrap, &imp[36], params, result, xrpAccount(), 1024, 32); + auto* trap2 = + ww(signersKeylet_wrap, + &imp.at("signers_keylet"), + params, + result, + xrpAccount(), + 1024, + 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); @@ -3121,15 +3632,29 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const expected = keylet::ticket(masterID, 1u); WasmValVec params(6), result(1); auto* trap = - ww(ticketKeylet_wrap, &imp[37], params, result, masterID, toBytes(1u), 1024, 32); + ww(ticketKeylet_wrap, + &imp.at("ticket_keylet"), + params, + result, + masterID, + toBytes(1u), + 1024, + 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); BEAST_EXPECT(compareKeylet(actual, expected)); } - auto* trap2 = ww( - ticketKeylet_wrap, &imp[37], params, result, xrpAccount(), toBytes(1u), 1024, 32); + auto* trap2 = + ww(ticketKeylet_wrap, + &imp.at("ticket_keylet"), + params, + result, + xrpAccount(), + toBytes(1u), + 1024, + 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); @@ -3139,7 +3664,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite auto const expected = keylet::vault(masterID, 1u); WasmValVec params(6), result(1); auto* trap = - ww(vaultKeylet_wrap, &imp[38], params, result, masterID, toBytes(1u), 1024, 32); + ww(vaultKeylet_wrap, + &imp.at("vault_keylet"), + params, + result, + masterID, + toBytes(1u), + 1024, + 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); @@ -3147,7 +3679,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite } auto* trap2 = - ww(vaultKeylet_wrap, &imp[38], params, result, xrpAccount(), toBytes(1u), 1024, 32); + ww(vaultKeylet_wrap, + &imp.at("vault_keylet"), + params, + result, + xrpAccount(), + toBytes(1u), + 1024, + 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); @@ -3192,7 +3731,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(6), result(1); auto* trap = ww(getNFT_wrap, - &import[39], + &import.at("get_nft"), params, result, 0, @@ -3219,7 +3758,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(6), result(1); auto* trap = ww(getNFT_wrap, - &import[39], + &import.at("get_nft"), params, result, 0, @@ -3242,7 +3781,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(6), result(1); auto* trap = ww(getNFT_wrap, - &import[39], + &import.at("get_nft"), params, result, 0, @@ -3265,7 +3804,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(6), result(1); auto* trap = ww(getNFT_wrap, - &import[39], + &import.at("get_nft"), params, result, 0, @@ -3287,7 +3826,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(6), result(1); auto* trap = ww(getNFT_wrap, - &import[39], + &import.at("get_nft"), params, result, 0, @@ -3332,7 +3871,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(4), result(1); auto* trap = ww(getNFTIssuer_wrap, - &import[40], + &import.at("get_nft_issuer"), params, result, 0, @@ -3356,7 +3895,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(4), result(1); auto* trap = ww(getNFTIssuer_wrap, - &import[40], + &import.at("get_nft_issuer"), params, result, 0, @@ -3397,7 +3936,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(4), result(1); auto* trap = ww(getNFTTaxon_wrap, - &import[41], + &import.at("get_nft_taxon"), params, result, 0, @@ -3439,7 +3978,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.getNFTFlags(nftId); vrt.setBytes(0, nftId.data(), uint256::bytes); WasmValVec params(2), result(1); - auto* trap = ww(getNFTFlags_wrap, &import[42], params, result, 0, uint256::bytes); + auto* trap = ww( + getNFTFlags_wrap, &import.at("get_nft_flags"), params, result, 0, uint256::bytes); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) BEAST_EXPECT(result[0].of.i32 == tfTransferable); @@ -3451,7 +3991,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite uint256 zeroId; vrt.setBytes(0, zeroId.data(), uint256::bytes); WasmValVec params(2), result(1); - auto* trap = ww(getNFTFlags_wrap, &import[42], params, result, 0, uint256::bytes); + auto* trap = ww( + getNFTFlags_wrap, &import.at("get_nft_flags"), params, result, 0, uint256::bytes); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) BEAST_EXPECT(result[0].of.i32 == 0); @@ -3485,7 +4026,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.getNFTTransferFee(nftId); vrt.setBytes(0, nftId.data(), uint256::bytes); WasmValVec params(2), result(1); - auto* trap = ww(getNFTTransferFee_wrap, &import[43], params, result, 0, uint256::bytes); + auto* trap = + ww(getNFTTransferFee_wrap, + &import.at("get_nft_transfer_fee"), + params, + result, + 0, + uint256::bytes); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) BEAST_EXPECT(result[0].of.i32 == transferFee); @@ -3497,7 +4044,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite uint256 zeroId; vrt.setBytes(0, zeroId.data(), uint256::bytes); WasmValVec params(2), result(1); - auto* trap = ww(getNFTTransferFee_wrap, &import[43], params, result, 0, uint256::bytes); + auto* trap = + ww(getNFTTransferFee_wrap, + &import.at("get_nft_transfer_fee"), + params, + result, + 0, + uint256::bytes); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) BEAST_EXPECT(result[0].of.i32 == 0); @@ -3534,7 +4087,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(4), result(1); auto* trap = ww(getNFTSerial_wrap, - &import[44], + &import.at("get_nft_serial"), params, result, 0, @@ -3557,7 +4110,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(4), result(1); auto* trap = ww(getNFTSerial_wrap, - &import[44], + &import.at("get_nft_serial"), params, result, 0, @@ -3602,8 +4155,16 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); vrt.setBytes(256, slice.data(), slice.size()); WasmValVec params(5), result(1); - auto* trap = ww( - trace_wrap, &import[45], params, result, 0, msg.size(), 256, slice.size(), 0); + auto* trap = + ww(trace_wrap, + &import.at("trace"), + params, + result, + 0, + msg.size(), + 256, + slice.size(), + 0); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0)) @@ -3618,8 +4179,16 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); vrt.setBytes(256, slice.data(), slice.size()); WasmValVec params(5), result(1); - auto* trap = ww( - trace_wrap, &import[45], params, result, 0, msg.size(), 256, slice.size(), 1); + auto* trap = + ww(trace_wrap, + &import.at("trace"), + params, + result, + 0, + msg.size(), + 256, + slice.size(), + 1); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0)) @@ -3658,7 +4227,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(256, slice.data(), slice.size()); WasmValVec params(5), result(1); auto* trap = - ww(trace_wrap, &import[45], params, result, 0, msg.size(), 256, slice.size(), 0); + ww(trace_wrap, + &import.at("trace"), + params, + result, + 0, + msg.size(), + 256, + slice.size(), + 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0); @@ -3693,7 +4270,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.traceNum(msg, num); vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); WasmValVec params(3), result(1); - auto* trap = ww(traceNum_wrap, &import[46], params, result, 0, msg.size(), num); + auto* trap = + ww(traceNum_wrap, &import.at("trace_num"), params, result, 0, msg.size(), num); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0)) @@ -3725,7 +4303,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.traceNum(msg, num); vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); WasmValVec params(3), result(1); - auto* trap = ww(traceNum_wrap, &import[46], params, result, 0, msg.size(), num); + auto* trap = + ww(traceNum_wrap, &import.at("trace_num"), params, result, 0, msg.size(), num); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0); @@ -3763,7 +4342,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(4), result(1); auto* trap = ww(traceAccount_wrap, - &import[47], + &import.at("trace_account"), params, result, 0, @@ -3804,7 +4383,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(4), result(1); auto* trap = ww(traceAccount_wrap, - &import[47], + &import.at("trace_account"), params, result, 0, @@ -3849,7 +4428,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(4), result(1); auto* trap = ww(traceAmount_wrap, - &import[49], + &import.at("trace_amount"), params, result, 0, @@ -3879,7 +4458,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(4), result(1); auto* trap = ww(traceAmount_wrap, - &import[49], + &import.at("trace_amount"), params, result, 0, @@ -3904,7 +4483,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(4), result(1); auto* trap = ww(traceAmount_wrap, - &import[49], + &import.at("trace_amount"), params, result, 0, @@ -3942,7 +4521,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(4), result(1); auto* trap = ww(traceAmount_wrap, - &import[49], + &import.at("trace_amount"), params, result, 0, @@ -4070,7 +4649,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(4), result(1); auto* trap = ww(traceFloat_wrap, - &import[48], + &import.at("trace_opaque_float"), params, result, 0, @@ -4089,7 +4668,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(4), result(1); auto* trap = ww(traceFloat_wrap, - &import[48], + &import.at("trace_opaque_float"), params, result, 0, @@ -4123,8 +4702,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); vrt.setBytes(256, reinterpret_cast(invalid.data()), invalid.size()); WasmValVec params(4), result(1); - auto* trap = ww( - traceFloat_wrap, &import[48], params, result, 0, msg.size(), 256, invalid.size()); + auto* trap = + ww(traceFloat_wrap, + &import.at("trace_opaque_float"), + params, + result, + 0, + msg.size(), + 256, + invalid.size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0); @@ -4153,7 +4739,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatFromInt(min64, -1); WasmValVec params(4), result(1); auto* trap = - ww(floatFromInt_wrap, &import[50], params, result, min64, 0, FLOAT_SIZE, -1); + ww(floatFromInt_wrap, + &import.at("float_from_int"), + params, + result, + min64, + 0, + FLOAT_SIZE, + -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -4165,7 +4758,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatFromInt(min64, 4); WasmValVec params(4), result(1); auto* trap = - ww(floatFromInt_wrap, &import[50], params, result, min64, 0, FLOAT_SIZE, 4); + ww(floatFromInt_wrap, + &import.at("float_from_int"), + params, + result, + min64, + 0, + FLOAT_SIZE, + 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -4177,7 +4777,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatFromInt(min64, 0); WasmValVec params(4), result(1); auto* trap = - ww(floatFromInt_wrap, &import[50], params, result, min64, 0, FLOAT_SIZE, 0); + ww(floatFromInt_wrap, + &import.at("float_from_int"), + params, + result, + min64, + 0, + FLOAT_SIZE, + 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); @@ -4188,7 +4795,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite { // hfs.floatFromInt(0, 0); WasmValVec params(4), result(1); - auto* trap = ww(floatFromInt_wrap, &import[50], params, result, 0ll, 0, FLOAT_SIZE, 0); + auto* trap = + ww(floatFromInt_wrap, + &import.at("float_from_int"), + params, + result, + 0ll, + 0, + FLOAT_SIZE, + 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); @@ -4200,7 +4815,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatFromInt(max64, 0); WasmValVec params(4), result(1); auto* trap = - ww(floatFromInt_wrap, &import[50], params, result, max64, 0, FLOAT_SIZE, 0); + ww(floatFromInt_wrap, + &import.at("float_from_int"), + params, + result, + max64, + 0, + FLOAT_SIZE, + 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); @@ -4231,7 +4853,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite uint64_t val = std::numeric_limits::min(); vrt.setBytes(0, &val, sizeof(val)); auto* trap = - ww(floatFromUint_wrap, &import[51], params, result, 0, 8, 16, FLOAT_SIZE, -1); + ww(floatFromUint_wrap, + &import.at("float_from_uint"), + params, + result, + 0, + 8, + 16, + FLOAT_SIZE, + -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -4245,7 +4875,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite uint64_t val = std::numeric_limits::min(); vrt.setBytes(0, &val, sizeof(val)); auto* trap = - ww(floatFromUint_wrap, &import[51], params, result, 0, 8, 16, FLOAT_SIZE, 4); + ww(floatFromUint_wrap, + &import.at("float_from_uint"), + params, + result, + 0, + 8, + 16, + FLOAT_SIZE, + 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -4259,7 +4897,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite uint64_t val = 0; vrt.setBytes(0, &val, sizeof(val)); auto* trap = - ww(floatFromUint_wrap, &import[51], params, result, 0, 8, 16, FLOAT_SIZE, 0); + ww(floatFromUint_wrap, + &import.at("float_from_uint"), + params, + result, + 0, + 8, + 16, + FLOAT_SIZE, + 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); @@ -4273,7 +4919,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite uint64_t val = std::numeric_limits::max(); vrt.setBytes(0, &val, sizeof(val)); auto* trap = - ww(floatFromUint_wrap, &import[51], params, result, 0, 8, 16, FLOAT_SIZE, 0); + ww(floatFromUint_wrap, + &import.at("float_from_uint"), + params, + result, + 0, + 8, + 16, + FLOAT_SIZE, + 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); @@ -4283,9 +4937,9 @@ struct HostFuncImpl_test : public beast::unit_test::suite } void - testFloatSet() + testfloatFromMantExp() { - testcase("floatSet"); + testcase("floatFromMantExp"); using namespace test::jtx; using namespace wasm_float; @@ -4300,38 +4954,56 @@ struct HostFuncImpl_test : public beast::unit_test::suite hfs.setRT(&vrt); { - // hfs.floatSet(1, 0, -1); - WasmValVec params(5), result(1); - auto* trap = ww(floatSet_wrap, &import[58], params, result, 0, 1ll, 0, FLOAT_SIZE, -1); - - BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT( - result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); - } - - { - // hfs.floatSet(1, 0, 4); - WasmValVec params(5), result(1); - auto* trap = ww(floatSet_wrap, &import[58], params, result, 0, 1ll, 0, FLOAT_SIZE, 4); - - BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT( - result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); - } - - { - // hfs.floatSet(1, Number::maxExponent + normalExp + 1, 0); + // hfs.floatFromMantExp(1, 0, -1); WasmValVec params(5), result(1); auto* trap = - ww(floatSet_wrap, - &import[58], + ww(floatFromMantExp_wrap, + &import.at("float_compare"), params, result, - Number::maxExponent + normalExp + 1, 1ll, 0, + 0, + FLOAT_SIZE, + -1); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + } + + { + // hfs.floatFromMantExp(1, 0, 4); + WasmValVec params(5), result(1); + auto* trap = + ww(floatFromMantExp_wrap, + &import.at("float_compare"), + params, + result, + 1ll, + 0, + 0, + FLOAT_SIZE, + 4); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == + static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + } + + { + // hfs.floatFromMantExp(1, Number::maxExponent + normalExp + 1, 0); + WasmValVec params(5), result(1); + auto* trap = + ww(floatFromMantExp_wrap, + &import.at("float_compare"), + params, + result, + 1ll, + Number::maxExponent + normalExp + 1, + 0, FLOAT_SIZE, 0); @@ -4342,15 +5014,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite } { - // hfs.floatSet(1, Number::minExponent + normalExp - 1, 0); + // hfs.floatFromMantExp(1, Number::minExponent + normalExp - 1, 0); WasmValVec params(5), result(1); auto* trap = - ww(floatSet_wrap, - &import[58], + ww(floatFromMantExp_wrap, + &import.at("float_compare"), params, result, - Number::minExponent + normalExp - 1, 1ll, + Number::minExponent + normalExp - 1, 0, FLOAT_SIZE, 0); @@ -4362,15 +5034,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite } { - // hfs.floatSet(1, Number::maxExponent + normalExp, 0); + // hfs.floatFromMantExp(1, Number::maxExponent + normalExp, 0); WasmValVec params(5), result(1); auto* trap = - ww(floatSet_wrap, - &import[58], + ww(floatFromMantExp_wrap, + &import.at("float_compare"), params, result, - Number::maxExponent + normalExp, 1ll, + Number::maxExponent + normalExp, 0, FLOAT_SIZE, 0); @@ -4382,15 +5054,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite } { - // hfs.floatSet(-1, Number::maxExponent + normalExp, 0); + // hfs.floatFromMantExp(-1, Number::maxExponent + normalExp, 0); WasmValVec params(5), result(1); auto* trap = - ww(floatSet_wrap, - &import[58], + ww(floatFromMantExp_wrap, + &import.at("float_compare"), params, result, - Number::maxExponent + normalExp, -1ll, + Number::maxExponent + normalExp, 0, FLOAT_SIZE, 0); @@ -4402,15 +5074,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite } { - // hfs.floatSet(1, Number::maxExponent + normalExp - 1, 0); + // hfs.floatFromMantExp(1, Number::maxExponent + normalExp - 1, 0); WasmValVec params(5), result(1); auto* trap = - ww(floatSet_wrap, - &import[58], + ww(floatFromMantExp_wrap, + &import.at("float_compare"), params, result, - Number::maxExponent + normalExp - 1, 1ll, + Number::maxExponent + normalExp - 1, 0, FLOAT_SIZE, 0); @@ -4422,15 +5094,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite } { - // hfs.floatSet(STAmount::cMaxValue, STAmount::cMaxOffset, 0); + // hfs.floatFromMantExp(STAmount::cMaxValue, STAmount::cMaxOffset, 0); WasmValVec params(5), result(1); auto* trap = - ww(floatSet_wrap, - &import[58], + ww(floatFromMantExp_wrap, + &import.at("float_compare"), params, result, - STAmount::cMaxOffset, static_cast(STAmount::cMaxValue), + STAmount::cMaxOffset, 0, FLOAT_SIZE, 0); @@ -4442,15 +5114,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite } { - // hfs.floatSet(1, Number::minExponent + normalExp, 0); + // hfs.floatFromMantExp(1, Number::minExponent + normalExp, 0); WasmValVec params(5), result(1); auto* trap = - ww(floatSet_wrap, - &import[58], + ww(floatFromMantExp_wrap, + &import.at("float_compare"), params, result, - Number::minExponent - normalExp, 1ll, + Number::minExponent - normalExp, 0, FLOAT_SIZE, 0); @@ -4462,9 +5134,18 @@ struct HostFuncImpl_test : public beast::unit_test::suite } { - // hfs.floatSet(10, -1, 0); + // hfs.floatFromMantExp(10, -1, 0); WasmValVec params(5), result(1); - auto* trap = ww(floatSet_wrap, &import[58], params, result, -1, 10ll, 0, FLOAT_SIZE, 0); + auto* trap = + ww(floatFromMantExp_wrap, + &import.at("float_compare"), + params, + result, + 10ll, + -1, + 0, + FLOAT_SIZE, + 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); @@ -4473,15 +5154,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite } { - // hfs.floatSet(1, Number::maxExponent + normalExp + 1, 0); + // hfs.floatFromMantExp(1, Number::maxExponent + normalExp + 1, 0); WasmValVec params(5), result(1); auto* trap = - ww(floatSet_wrap, - &import[58], + ww(floatFromMantExp_wrap, + &import.at("float_compare"), params, result, - Number::maxExponent + normalExp + 1, 1ll, + Number::maxExponent + normalExp + 1, 0, FLOAT_SIZE, 0); @@ -4512,7 +5193,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite { // hfs.floatCompare(Slice(), Slice()); WasmValVec params(4), result(1); - auto* trap = ww(floatCompare_wrap, &import[59], params, result, 0, 0, 0, 0); + auto* trap = ww(floatCompare_wrap, &import.at("float_add"), params, result, 0, 0, 0, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -4524,7 +5205,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatCompare(makeSlice(floatInvalidZero), Slice()); WasmValVec params(4), result(1); vrt.setBytes(0, floatInvalidZero.data(), floatInvalidZero.size()); - auto* trap = ww(floatCompare_wrap, &import[59], params, result, 0, FLOAT_SIZE, 0, 0); + auto* trap = + ww(floatCompare_wrap, &import.at("float_add"), params, result, 0, FLOAT_SIZE, 0, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -4539,7 +5221,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(FLOAT_SIZE, invalid.data(), invalid.size()); auto* trap = ww(floatCompare_wrap, - &import[59], + &import.at("float_add"), params, result, 0, @@ -4560,7 +5242,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(FLOAT_SIZE, floatIntZero.data(), floatIntZero.size()); auto* trap = ww(floatCompare_wrap, - &import[59], + &import.at("float_add"), params, result, 0, @@ -4579,7 +5261,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(FLOAT_SIZE, floatIntZero.data(), floatIntZero.size()); auto* trap = ww(floatCompare_wrap, - &import[59], + &import.at("float_add"), params, result, 0, @@ -4598,7 +5280,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(FLOAT_SIZE, float1.data(), float1.size()); auto* trap = ww(floatCompare_wrap, - &import[59], + &import.at("float_add"), params, result, 0, @@ -4631,7 +5313,17 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatAdd(Slice(), Slice(), -1); WasmValVec params(7), result(1); auto* trap = - ww(floatAdd_wrap, &import[60], params, result, 0, 0, 0, 0, 0, FLOAT_SIZE, -1); + ww(floatAdd_wrap, + &import.at("float_subtract"), + params, + result, + 0, + 0, + 0, + 0, + 0, + FLOAT_SIZE, + -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -4643,7 +5335,17 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatAdd(Slice(), Slice(), 0); WasmValVec params(7), result(1); auto* trap = - ww(floatAdd_wrap, &import[60], params, result, 0, 0, 0, 0, 0, FLOAT_SIZE, 0); + ww(floatAdd_wrap, + &import.at("float_subtract"), + params, + result, + 0, + 0, + 0, + 0, + 0, + FLOAT_SIZE, + 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -4658,7 +5360,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(FLOAT_SIZE, invalid.data(), invalid.size()); auto* trap = ww(floatAdd_wrap, - &import[60], + &import.at("float_subtract"), params, result, 0, @@ -4683,7 +5385,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(FLOAT_SIZE, floatMaxExp.data(), floatMaxExp.size()); auto* trap = ww(floatAdd_wrap, - &import[60], + &import.at("float_subtract"), params, result, 0, @@ -4707,7 +5409,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(FLOAT_SIZE, floatIntZero.data(), floatIntZero.size()); auto* trap = ww(floatAdd_wrap, - &import[60], + &import.at("float_subtract"), params, result, 0, @@ -4732,7 +5434,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(FLOAT_SIZE, floatIntMin.data(), floatIntMin.size()); auto* trap = ww(floatAdd_wrap, - &import[60], + &import.at("float_subtract"), params, result, 0, @@ -4770,7 +5472,17 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatSubtract(Slice(), Slice(), -1); WasmValVec params(7), result(1); auto* trap = - ww(floatSubtract_wrap, &import[61], params, result, 0, 0, 0, 0, 0, FLOAT_SIZE, -1); + ww(floatSubtract_wrap, + &import.at("float_from_mant_exp"), + params, + result, + 0, + 0, + 0, + 0, + 0, + FLOAT_SIZE, + -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -4782,7 +5494,17 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatSubtract(Slice(), Slice(), 0); WasmValVec params(7), result(1); auto* trap = - ww(floatSubtract_wrap, &import[61], params, result, 0, 0, 0, 0, 0, FLOAT_SIZE, 0); + ww(floatSubtract_wrap, + &import.at("float_from_mant_exp"), + params, + result, + 0, + 0, + 0, + 0, + 0, + FLOAT_SIZE, + 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -4797,7 +5519,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(FLOAT_SIZE, invalid.data(), invalid.size()); auto* trap = ww(floatSubtract_wrap, - &import[61], + &import.at("float_from_mant_exp"), params, result, 0, @@ -4821,7 +5543,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(FLOAT_SIZE, floatMaxIOU.data(), floatMaxIOU.size()); auto* trap = ww(floatSubtract_wrap, - &import[61], + &import.at("float_from_mant_exp"), params, result, 0, @@ -4845,7 +5567,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(FLOAT_SIZE, floatIntZero.data(), floatIntZero.size()); auto* trap = ww(floatSubtract_wrap, - &import[61], + &import.at("float_from_mant_exp"), params, result, 0, @@ -4869,7 +5591,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(FLOAT_SIZE, float1.data(), float1.size()); auto* trap = ww(floatSubtract_wrap, - &import[61], + &import.at("float_from_mant_exp"), params, result, 0, @@ -4907,7 +5629,17 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatMultiply(Slice(), Slice(), -1); WasmValVec params(7), result(1); auto* trap = - ww(floatMultiply_wrap, &import[62], params, result, 0, 0, 0, 0, 0, FLOAT_SIZE, -1); + ww(floatMultiply_wrap, + &import.at("float_multiply"), + params, + result, + 0, + 0, + 0, + 0, + 0, + FLOAT_SIZE, + -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -4919,7 +5651,17 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatMultiply(Slice(), Slice(), 0); WasmValVec params(7), result(1); auto* trap = - ww(floatMultiply_wrap, &import[62], params, result, 0, 0, 0, 0, 0, FLOAT_SIZE, 0); + ww(floatMultiply_wrap, + &import.at("float_multiply"), + params, + result, + 0, + 0, + 0, + 0, + 0, + FLOAT_SIZE, + 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -4934,7 +5676,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(FLOAT_SIZE, invalid.data(), invalid.size()); auto* trap = ww(floatMultiply_wrap, - &import[62], + &import.at("float_multiply"), params, result, 0, @@ -4958,7 +5700,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(FLOAT_SIZE, float1More.data(), float1More.size()); auto* trap = ww(floatMultiply_wrap, - &import[62], + &import.at("float_multiply"), params, result, 0, @@ -4982,7 +5724,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(FLOAT_SIZE, float1.data(), float1.size()); auto* trap = ww(floatMultiply_wrap, - &import[62], + &import.at("float_multiply"), params, result, 0, @@ -5006,7 +5748,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(FLOAT_SIZE, floatMaxIOU.data(), floatMaxIOU.size()); auto* trap = ww(floatMultiply_wrap, - &import[62], + &import.at("float_multiply"), params, result, 0, @@ -5030,7 +5772,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(FLOAT_SIZE, floatPreMaxExp.data(), floatPreMaxExp.size()); auto* trap = ww(floatMultiply_wrap, - &import[62], + &import.at("float_multiply"), params, result, 0, @@ -5068,7 +5810,17 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatDivide(Slice(), Slice(), -1); WasmValVec params(7), result(1); auto* trap = - ww(floatDivide_wrap, &import[63], params, result, 0, 0, 0, 0, 0, FLOAT_SIZE, -1); + ww(floatDivide_wrap, + &import.at("float_divide"), + params, + result, + 0, + 0, + 0, + 0, + 0, + FLOAT_SIZE, + -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -5080,7 +5832,17 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatDivide(Slice(), Slice(), 0); WasmValVec params(7), result(1); auto* trap = - ww(floatDivide_wrap, &import[63], params, result, 0, 0, 0, 0, 0, FLOAT_SIZE, 0); + ww(floatDivide_wrap, + &import.at("float_divide"), + params, + result, + 0, + 0, + 0, + 0, + 0, + FLOAT_SIZE, + 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -5094,7 +5856,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(FLOAT_SIZE, invalid.data(), invalid.size()); auto* trap = ww(floatDivide_wrap, - &import[63], + &import.at("float_divide"), params, result, 0, @@ -5117,7 +5879,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(FLOAT_SIZE, floatIntZero.data(), floatIntZero.size()); auto* trap = ww(floatDivide_wrap, - &import[63], + &import.at("float_divide"), params, result, 0, @@ -5135,7 +5897,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite } { // hfs.floatDivide(makeSlice(floatMax), makeSlice(*y), 0); - auto const y = hfs.floatSet(STAmount::cMaxValue, -normalExp - 1, 0); // 0.9999999... + auto const y = + hfs.floatFromMantExp(STAmount::cMaxValue, -normalExp - 1, 0); // 0.9999999... if (BEAST_EXPECT(y)) { WasmValVec params(7), result(1); @@ -5143,7 +5906,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(FLOAT_SIZE, y->data(), y->size()); auto* trap = ww(floatDivide_wrap, - &import[63], + &import.at("float_divide"), params, result, 0, @@ -5167,7 +5930,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(FLOAT_SIZE, float1.data(), float1.size()); auto* trap = ww(floatDivide_wrap, - &import[63], + &import.at("float_divide"), params, result, 0, @@ -5190,7 +5953,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(FLOAT_SIZE, float10.data(), float10.size()); auto* trap = ww(floatDivide_wrap, - &import[63], + &import.at("float_divide"), params, result, 0, @@ -5227,7 +5990,16 @@ struct HostFuncImpl_test : public beast::unit_test::suite { // hfs.floatRoot(Slice(), 2, -1); WasmValVec params(6), result(1); auto* trap = - ww(floatRoot_wrap, &import[64], params, result, 0, 0, 2, 0, FLOAT_SIZE, -1); + ww(floatRoot_wrap, + &import.at("float_root"), + params, + result, + 0, + 0, + 2, + 0, + FLOAT_SIZE, + -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -5240,7 +6012,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(0, invalid.data(), invalid.size()); auto* trap = ww(floatRoot_wrap, - &import[64], + &import.at("float_root"), params, result, 0, @@ -5261,7 +6033,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(0, float1.data(), float1.size()); auto* trap = ww(floatRoot_wrap, - &import[64], + &import.at("float_root"), params, result, 0, @@ -5282,7 +6054,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(0, floatIntZero.data(), floatIntZero.size()); auto* trap = ww(floatRoot_wrap, - &import[64], + &import.at("float_root"), params, result, 0, @@ -5303,7 +6075,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(0, floatMaxIOU.data(), floatMaxIOU.size()); auto* trap = ww(floatRoot_wrap, - &import[64], + &import.at("float_root"), params, result, 0, @@ -5321,14 +6093,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite { // hfs.floatRoot(makeSlice(*x), 2, 0); - auto const x = hfs.floatSet(100, 0, 0); // 100 + auto const x = hfs.floatFromMantExp(100, 0, 0); // 100 if (BEAST_EXPECT(x)) { WasmValVec params(6), result(1); vrt.setBytes(0, x->data(), x->size()); auto* trap = ww(floatRoot_wrap, - &import[64], + &import.at("float_root"), params, result, 0, @@ -5347,14 +6119,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite { // hfs.floatRoot(makeSlice(*x), 3, 0); - auto const x = hfs.floatSet(1000, 0, 0); // 1000 + auto const x = hfs.floatFromMantExp(1000, 0, 0); // 1000 if (BEAST_EXPECT(x)) { WasmValVec params(6), result(1); vrt.setBytes(0, x->data(), x->size()); auto* trap = ww(floatRoot_wrap, - &import[64], + &import.at("float_root"), params, result, 0, @@ -5373,15 +6145,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite { // hfs.floatRoot(makeSlice(*x), 2, 0); - auto const x = hfs.floatSet(1, -2, 0); // 0.01 - auto const y = hfs.floatSet(1, -1, 0); // 0.1 + auto const x = hfs.floatFromMantExp(1, -2, 0); // 0.01 + auto const y = hfs.floatFromMantExp(1, -1, 0); // 0.1 if (BEAST_EXPECT(x && y)) { WasmValVec params(6), result(1); vrt.setBytes(0, x->data(), x->size()); auto* trap = ww(floatRoot_wrap, - &import[64], + &import.at("float_root"), params, result, 0, @@ -5418,7 +6190,16 @@ struct HostFuncImpl_test : public beast::unit_test::suite { // hfs.floatPower(Slice(), 2, -1); WasmValVec params(6), result(1); auto* trap = - ww(floatPower_wrap, &import[65], params, result, 0, 0, 2, 0, FLOAT_SIZE, -1); + ww(floatPower_wrap, + &import.at("float_pow"), + params, + result, + 0, + 0, + 2, + 0, + FLOAT_SIZE, + -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -5431,7 +6212,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(0, invalid.data(), invalid.size()); auto* trap = ww(floatPower_wrap, - &import[65], + &import.at("float_pow"), params, result, 0, @@ -5452,7 +6233,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(0, float1.data(), float1.size()); auto* trap = ww(floatPower_wrap, - &import[65], + &import.at("float_pow"), params, result, 0, @@ -5474,7 +6255,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(0, floatMax.data(), floatMax.size()); auto* trap = ww(floatPower_wrap, - &import[65], + &import.at("float_pow"), params, result, 0, @@ -5496,7 +6277,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(0, floatMax.data(), floatMax.size()); auto* trap = ww(floatPower_wrap, - &import[65], + &import.at("float_pow"), params, result, 0, @@ -5518,7 +6299,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(0, floatMaxIOU.data(), floatMaxIOU.size()); auto* trap = ww(floatPower_wrap, - &import[65], + &import.at("float_pow"), params, result, 0, @@ -5539,7 +6320,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(0, floatMaxIOU.data(), floatMaxIOU.size()); auto* trap = ww(floatPower_wrap, - &import[65], + &import.at("float_pow"), params, result, 0, @@ -5557,14 +6338,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite { // hfs.floatPower(makeSlice(float10), 2, 0); - auto const x = hfs.floatSet(100, 0, 0); // 100 + auto const x = hfs.floatFromMantExp(100, 0, 0); // 100 if (BEAST_EXPECT(x)) { WasmValVec params(6), result(1); vrt.setBytes(0, float10.data(), float10.size()); auto* trap = ww(floatPower_wrap, - &import[65], + &import.at("float_pow"), params, result, 0, @@ -5581,16 +6362,17 @@ struct HostFuncImpl_test : public beast::unit_test::suite } } - { // hfs.floatPower(makeSlice(*x), 2, 0); - auto const x = hfs.floatSet(1, -1, 0); // 0.1 - auto const y = hfs.floatSet(1, -2, 0); // 0.01 + { + // hfs.floatPower(makeSlice(*x), 2, 0); + auto const x = hfs.floatFromMantExp(1, -1, 0); // 0.1 + auto const y = hfs.floatFromMantExp(1, -2, 0); // 0.01 if (BEAST_EXPECT(x && y)) { WasmValVec params(6), result(1); vrt.setBytes(0, x->data(), x->size()); auto* trap = ww(floatPower_wrap, - &import[65], + &import.at("float_pow"), params, result, 0, @@ -5608,134 +6390,6 @@ struct HostFuncImpl_test : public beast::unit_test::suite } } - void - testFloatLog() - { - testcase("floatLog"); - using namespace test::jtx; - - Env env{*this}; - OpenView ov{*env.current()}; - ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - VirtualRuntime vrt; - WasmHostFunctionsImpl hfs(ac, dummyEscrow); - - auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); - - { // hfs.floatLog(Slice(), -1); - WasmValVec params(5), result(1); - auto* trap = ww(floatLog_wrap, &import[66], params, result, 0, 0, 0, FLOAT_SIZE, -1); - - BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT( - result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); - } - - { - auto const x = hfs.floatSet(32'786, 0, 0); - if (BEAST_EXPECT(x)) - { - WasmValVec params(5), result(1); - vrt.setBytes(0, floatMaxExp.data(), floatMaxExp.size()); - auto* trap = - ww(floatLog_wrap, - &import[66], - params, - result, - 0, - FLOAT_SIZE, - 2 * FLOAT_SIZE, - FLOAT_SIZE, - 0); - - BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); - auto const resultBytes = vrt.getBytes(params, 2); - BEAST_EXPECT(resultBytes == *x); - } - } - - { - // hfs.floatLog(makeSlice(*x), 0); - auto const x = hfs.floatSet(100, 0, 0); // 100 - if (BEAST_EXPECT(x)) - { - WasmValVec params(5), result(1); - vrt.setBytes(0, x->data(), x->size()); - auto* trap = - ww(floatLog_wrap, - &import[66], - params, - result, - 0, - FLOAT_SIZE, - 2 * FLOAT_SIZE, - FLOAT_SIZE, - 0); - - BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); - auto const resultBytes = vrt.getBytes(params, 2); - BEAST_EXPECT(resultBytes == float2); - } - } - - { - // hfs.floatLog(makeSlice(*x), 0); - auto const x = hfs.floatSet(1000, 0, 0); // 1000 - auto const y = hfs.floatSet(3, 0, 0); // 3 - if (BEAST_EXPECT(x && y)) - { - WasmValVec params(5), result(1); - vrt.setBytes(0, x->data(), x->size()); - auto* trap = - ww(floatLog_wrap, - &import[66], - params, - result, - 0, - FLOAT_SIZE, - 2 * FLOAT_SIZE, - FLOAT_SIZE, - 0); - - BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); - auto const resultBytes = vrt.getBytes(params, 2); - BEAST_EXPECT(resultBytes == *y); - } - } - - { - // hfs.floatLog(makeSlice(*x), 0); - auto const x = hfs.floatSet(1, -2, 0); // 0.01 - auto const y = hfs.floatSet(-1'999'999'999'999'999'999, -normalExp, 0); // -2 - if (BEAST_EXPECT(x && y)) - { - WasmValVec params(5), result(1); - vrt.setBytes(0, x->data(), x->size()); - auto* trap = - ww(floatLog_wrap, - &import[66], - params, - result, - 0, - FLOAT_SIZE, - 2 * FLOAT_SIZE, - FLOAT_SIZE, - 0); - - BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); - auto const resultBytes = vrt.getBytes(params, 2); - BEAST_EXPECT(resultBytes == *y); - } - } - } - void testFloatSpecialCases() { @@ -5781,7 +6435,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(5), result(1); auto* trap = ww(floatFromSTAmount_wrap, - &import[52], + &import.at("float_from_stamount"), params, result, 0, @@ -5804,7 +6458,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(5), result(1); auto* trap = ww(floatFromSTAmount_wrap, - &import[52], + &import.at("float_from_stamount"), params, result, 0, @@ -5827,7 +6481,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(5), result(1); auto* trap = ww(floatFromSTAmount_wrap, - &import[52], + &import.at("float_from_stamount"), params, result, 0, @@ -5845,7 +6499,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite { // hfs.floatFromSTAmount(amount, 0); STAmount const amount = XRP(-1); - auto const y = hfs.floatSet(-1 * 1'000'000, 0, 0); + auto const y = hfs.floatFromMantExp(-1 * 1'000'000, 0, 0); if (BEAST_EXPECT(y)) { Bytes amountBytes = toBytes(amount); @@ -5853,7 +6507,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(5), result(1); auto* trap = ww(floatFromSTAmount_wrap, - &import[52], + &import.at("float_from_stamount"), params, result, 0, @@ -5871,14 +6525,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite { // hfs.floatFromSTAmount(amount, 0); - auto const y = hfs.floatSet(9223372036854776, 3, 0); + auto const y = hfs.floatFromMantExp(9223372036854776, 3, 0); STAmount const amount(noIssue(), std::numeric_limits::max()); Bytes amountBytes = toBytes(amount); vrt.setBytes(0, amountBytes.data(), amountBytes.size()); WasmValVec params(5), result(1); auto* trap = ww(floatFromSTAmount_wrap, - &import[52], + &import.at("float_from_stamount"), params, result, 0, @@ -5918,7 +6572,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(5), result(1); auto* trap = ww(floatFromSTAmount_wrap, - &import[52], + &import.at("float_from_stamount"), params, result, 0, @@ -5942,7 +6596,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(5), result(1); auto* trap = ww(floatFromSTAmount_wrap, - &import[52], + &import.at("float_from_stamount"), params, result, 0, @@ -5983,7 +6637,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(5), result(1); auto* trap = ww(floatFromSTNumber_wrap, - &import[53], + &import.at("float_from_stnumber"), params, result, 0, @@ -6006,7 +6660,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(5), result(1); auto* trap = ww(floatFromSTNumber_wrap, - &import[53], + &import.at("float_from_stnumber"), params, result, 0, @@ -6030,7 +6684,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(5), result(1); auto* trap = ww(floatFromSTNumber_wrap, - &import[53], + &import.at("float_from_stnumber"), params, result, 0, @@ -6053,7 +6707,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(5), result(1); auto* trap = ww(floatFromSTNumber_wrap, - &import[53], + &import.at("float_from_stnumber"), params, result, 0, @@ -6090,7 +6744,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite vrt.setBytes(0, float1.data(), float1.size()); WasmValVec params(5), result(1); auto* trap = - ww(floatToInt_wrap, &import[54], params, result, 0, FLOAT_SIZE, 256, 8, -1); + ww(floatToInt_wrap, + &import.at("float_to_int"), + params, + result, + 0, + FLOAT_SIZE, + 256, + 8, + -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -6102,7 +6764,16 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatToInt(makeSlice(float1), 4); vrt.setBytes(0, float1.data(), float1.size()); WasmValVec params(5), result(1); - auto* trap = ww(floatToInt_wrap, &import[54], params, result, 0, FLOAT_SIZE, 256, 8, 4); + auto* trap = + ww(floatToInt_wrap, + &import.at("float_to_int"), + params, + result, + 0, + FLOAT_SIZE, + 256, + 8, + 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -6113,7 +6784,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite { // hfs.floatToInt(Slice(), 0); WasmValVec params(5), result(1); - auto* trap = ww(floatToInt_wrap, &import[54], params, result, 0, 0, 256, 8, 0); + auto* trap = + ww(floatToInt_wrap, &import.at("float_to_int"), params, result, 0, 0, 256, 8, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -6125,7 +6797,16 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatToInt(makeSlice(invalid), 0); vrt.setBytes(0, invalid.data(), invalid.size()); WasmValVec params(5), result(1); - auto* trap = ww(floatToInt_wrap, &import[54], params, result, 0, FLOAT_SIZE, 256, 8, 0); + auto* trap = + ww(floatToInt_wrap, + &import.at("float_to_int"), + params, + result, + 0, + FLOAT_SIZE, + 256, + 8, + 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -6137,7 +6818,16 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatToInt(makeSlice(floatIntZero), 0); vrt.setBytes(0, floatIntZero.data(), floatIntZero.size()); WasmValVec params(5), result(1); - auto* trap = ww(floatToInt_wrap, &import[54], params, result, 0, FLOAT_SIZE, 256, 8, 0); + auto* trap = + ww(floatToInt_wrap, + &import.at("float_to_int"), + params, + result, + 0, + FLOAT_SIZE, + 256, + 8, + 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 8); @@ -6153,7 +6843,16 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatToInt(makeSlice(float1), 0); vrt.setBytes(0, float1.data(), float1.size()); WasmValVec params(5), result(1); - auto* trap = ww(floatToInt_wrap, &import[54], params, result, 0, FLOAT_SIZE, 256, 8, 0); + auto* trap = + ww(floatToInt_wrap, + &import.at("float_to_int"), + params, + result, + 0, + FLOAT_SIZE, + 256, + 8, + 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 8); @@ -6169,7 +6868,16 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatToInt(makeSlice(floatMinus1), 0); vrt.setBytes(0, floatMinus1.data(), floatMinus1.size()); WasmValVec params(5), result(1); - auto* trap = ww(floatToInt_wrap, &import[54], params, result, 0, FLOAT_SIZE, 256, 8, 0); + auto* trap = + ww(floatToInt_wrap, + &import.at("float_to_int"), + params, + result, + 0, + FLOAT_SIZE, + 256, + 8, + 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 8); @@ -6185,7 +6893,16 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatToInt(makeSlice(floatIntMax), 0); vrt.setBytes(0, floatIntMax.data(), floatIntMax.size()); WasmValVec params(5), result(1); - auto* trap = ww(floatToInt_wrap, &import[54], params, result, 0, FLOAT_SIZE, 256, 8, 0); + auto* trap = + ww(floatToInt_wrap, + &import.at("float_to_int"), + params, + result, + 0, + FLOAT_SIZE, + 256, + 8, + 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 8); @@ -6203,7 +6920,16 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatToInt(makeSlice(floatIntMin), 0); vrt.setBytes(0, floatIntMin.data(), floatIntMin.size()); WasmValVec params(5), result(1); - auto* trap = ww(floatToInt_wrap, &import[54], params, result, 0, FLOAT_SIZE, 256, 8, 0); + auto* trap = + ww(floatToInt_wrap, + &import.at("float_to_int"), + params, + result, + 0, + FLOAT_SIZE, + 256, + 8, + 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -6215,7 +6941,16 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatToInt(makeSlice(floatUIntMax), 0); vrt.setBytes(0, floatUIntMax.data(), floatUIntMax.size()); WasmValVec params(5), result(1); - auto* trap = ww(floatToInt_wrap, &import[54], params, result, 0, FLOAT_SIZE, 256, 8, 0); + auto* trap = + ww(floatToInt_wrap, + &import.at("float_to_int"), + params, + result, + 0, + FLOAT_SIZE, + 256, + 8, + 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -6229,7 +6964,16 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatToInt(makeSlice(floatPi), 0); vrt.setBytes(0, floatPi.data(), floatPi.size()); WasmValVec params(5), result(1); - auto* trap = ww(floatToInt_wrap, &import[54], params, result, 0, FLOAT_SIZE, 256, 8, 0); + auto* trap = + ww(floatToInt_wrap, + &import.at("float_to_int"), + params, + result, + 0, + FLOAT_SIZE, + 256, + 8, + 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 8); @@ -6242,7 +6986,16 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatToInt(makeSlice(floatPi), 1); vrt.setBytes(0, floatPi.data(), floatPi.size()); WasmValVec params(5), result(1); - auto* trap = ww(floatToInt_wrap, &import[54], params, result, 0, FLOAT_SIZE, 256, 8, 1); + auto* trap = + ww(floatToInt_wrap, + &import.at("float_to_int"), + params, + result, + 0, + FLOAT_SIZE, + 256, + 8, + 1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 8); @@ -6255,7 +7008,16 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatToInt(makeSlice(floatPi), 2); vrt.setBytes(0, floatPi.data(), floatPi.size()); WasmValVec params(5), result(1); - auto* trap = ww(floatToInt_wrap, &import[54], params, result, 0, FLOAT_SIZE, 256, 8, 2); + auto* trap = + ww(floatToInt_wrap, + &import.at("float_to_int"), + params, + result, + 0, + FLOAT_SIZE, + 256, + 8, + 2); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 8); @@ -6268,7 +7030,16 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatToInt(makeSlice(floatPi), 3); vrt.setBytes(0, floatPi.data(), floatPi.size()); WasmValVec params(5), result(1); - auto* trap = ww(floatToInt_wrap, &import[54], params, result, 0, FLOAT_SIZE, 256, 8, 3); + auto* trap = + ww(floatToInt_wrap, + &import.at("float_to_int"), + params, + result, + 0, + FLOAT_SIZE, + 256, + 8, + 3); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 8); @@ -6278,9 +7049,9 @@ struct HostFuncImpl_test : public beast::unit_test::suite } void - testFloatToMantissaAndExponent() + testFloatToMantExp() { - testcase("floatToMantissaAndExponent"); + testcase("floatToMantExp"); using namespace test::jtx; Env env{*this}; @@ -6294,12 +7065,12 @@ struct HostFuncImpl_test : public beast::unit_test::suite hfs.setRT(&vrt); { - // hfs.floatToMantissaAndExponent(makeSlice(invalid)); + // hfs.floatToMantExp(makeSlice(invalid)); vrt.setBytes(0, invalid.data(), invalid.size()); WasmValVec params(6), result(1); auto* trap = - ww(floatToMantissaAndExponent_wrap, - &import[55], + ww(floatToMantExp_wrap, + &import.at("float_to_mant_exp"), params, result, 0, @@ -6316,12 +7087,12 @@ struct HostFuncImpl_test : public beast::unit_test::suite } { - // hfs.floatToMantissaAndExponent(makeSlice(floatIntZero)); + // hfs.floatToMantExp(makeSlice(floatIntZero)); vrt.setBytes(0, floatIntZero.data(), floatIntZero.size()); WasmValVec params(6), result(1); auto* trap = - ww(floatToMantissaAndExponent_wrap, - &import[55], + ww(floatToMantExp_wrap, + &import.at("float_to_mant_exp"), params, result, 0, @@ -6339,17 +7110,17 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(exponent == std::numeric_limits::min()); // roundtrip - auto const result2 = hfs.floatSet(mantissa, exponent, 0); + auto const result2 = hfs.floatFromMantExp(mantissa, exponent, 0); BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == floatIntZero); } { - // hfs.floatToMantissaAndExponent(makeSlice(float1)); + // hfs.floatToMantExp(makeSlice(float1)); vrt.setBytes(0, float1.data(), float1.size()); WasmValVec params(6), result(1); auto* trap = - ww(floatToMantissaAndExponent_wrap, - &import[55], + ww(floatToMantExp_wrap, + &import.at("float_to_mant_exp"), params, result, 0, @@ -6366,17 +7137,17 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(mantissa == 1000000000000000000) && BEAST_EXPECT(exponent == -normalExp); // roundtrip - auto const result2 = hfs.floatSet(mantissa, exponent, 0); + auto const result2 = hfs.floatFromMantExp(mantissa, exponent, 0); BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == float1); } { - // hfs.floatToMantissaAndExponent(makeSlice(floatMinus1)); + // hfs.floatToMantExp(makeSlice(floatMinus1)); vrt.setBytes(0, floatMinus1.data(), floatMinus1.size()); WasmValVec params(6), result(1); auto* trap = - ww(floatToMantissaAndExponent_wrap, - &import[55], + ww(floatToMantExp_wrap, + &import.at("float_to_mant_exp"), params, result, 0, @@ -6393,17 +7164,17 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(mantissa == -1000000000000000000) && BEAST_EXPECT(exponent == -normalExp); // roundtrip - auto const result2 = hfs.floatSet(mantissa, exponent, 0); + auto const result2 = hfs.floatFromMantExp(mantissa, exponent, 0); BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == floatMinus1); } { - // hfs.floatToMantissaAndExponent(makeSlice(float10)); + // hfs.floatToMantExp(makeSlice(float10)); vrt.setBytes(0, float10.data(), float10.size()); WasmValVec params(6), result(1); auto* trap = - ww(floatToMantissaAndExponent_wrap, - &import[55], + ww(floatToMantExp_wrap, + &import.at("float_to_mant_exp"), params, result, 0, @@ -6421,17 +7192,17 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(exponent == -normalExp + 1); // roundtrip - auto const result2 = hfs.floatSet(mantissa, exponent, 0); + auto const result2 = hfs.floatFromMantExp(mantissa, exponent, 0); BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == float10); } { - // hfs.floatToMantissaAndExponent(makeSlice(floatPi)); + // hfs.floatToMantExp(makeSlice(floatPi)); vrt.setBytes(0, floatPi.data(), floatPi.size()); WasmValVec params(6), result(1); auto* trap = - ww(floatToMantissaAndExponent_wrap, - &import[55], + ww(floatToMantExp_wrap, + &import.at("float_to_mant_exp"), params, result, 0, @@ -6448,17 +7219,17 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(mantissa == 3141592653589793000) && BEAST_EXPECT(exponent == -normalExp); // roundtrip - auto const result2 = hfs.floatSet(mantissa, exponent, 0); + auto const result2 = hfs.floatFromMantExp(mantissa, exponent, 0); BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == floatPi); } { - // hfs.floatToMantissaAndExponent(makeSlice(floatIntMax)); + // hfs.floatToMantExp(makeSlice(floatIntMax)); vrt.setBytes(0, floatIntMax.data(), floatIntMax.size()); WasmValVec params(6), result(1); auto* trap = - ww(floatToMantissaAndExponent_wrap, - &import[55], + ww(floatToMantExp_wrap, + &import.at("float_to_mant_exp"), params, result, 0, @@ -6476,17 +7247,17 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(exponent == 0); // roundtrip - auto const result2 = hfs.floatSet(mantissa, exponent, 0); + auto const result2 = hfs.floatFromMantExp(mantissa, exponent, 0); BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == floatIntMax); } { - // hfs.floatToMantissaAndExponent(makeSlice(floatIntMin)); + // hfs.floatToMantExp(makeSlice(floatIntMin)); vrt.setBytes(0, floatIntMin.data(), floatIntMin.size()); WasmValVec params(6), result(1); auto* trap = - ww(floatToMantissaAndExponent_wrap, - &import[55], + ww(floatToMantExp_wrap, + &import.at("float_to_mant_exp"), params, result, 0, @@ -6504,17 +7275,17 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(exponent == 1); // roundtrip - auto const result2 = hfs.floatSet(mantissa, exponent, 0); + auto const result2 = hfs.floatFromMantExp(mantissa, exponent, 0); BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == floatIntMin); } { - // hfs.floatToMantissaAndExponent(makeSlice(floatMax)); + // hfs.floatToMantExp(makeSlice(floatMax)); vrt.setBytes(0, floatMax.data(), floatMax.size()); WasmValVec params(6), result(1); auto* trap = - ww(floatToMantissaAndExponent_wrap, - &import[55], + ww(floatToMantExp_wrap, + &import.at("float_to_mant_exp"), params, result, 0, @@ -6532,253 +7303,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(exponent == Number::maxExponent); // roundtrip - auto const result2 = hfs.floatSet(mantissa, exponent, 0); + auto const result2 = hfs.floatFromMantExp(mantissa, exponent, 0); BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == floatMax); } } - void - testFloatNegate() - { - testcase("floatNegate"); - using namespace test::jtx; - - Env env{*this}; - OpenView ov{*env.current()}; - ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - VirtualRuntime vrt; - WasmHostFunctionsImpl hfs(ac, dummyEscrow); - - auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); - - { - // hfs.floatNegate(makeSlice(invalid)); - vrt.setBytes(0, invalid.data(), invalid.size()); - WasmValVec params(4), result(1); - auto* trap = - ww(floatNegate_wrap, &import[56], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); - - BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT( - result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); - } - - { - // hfs.floatNegate(makeSlice(floatIntZero)); - vrt.setBytes(0, floatIntZero.data(), floatIntZero.size()); - WasmValVec params(4), result(1); - auto* trap = - ww(floatNegate_wrap, &import[56], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); - - BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); - auto const resultBytes = vrt.getBytes(params, 2); - BEAST_EXPECT(resultBytes == floatIntZero); - } - - { - // hfs.floatNegate(makeSlice(float1)); - vrt.setBytes(0, float1.data(), float1.size()); - WasmValVec params(4), result(1); - auto* trap = - ww(floatNegate_wrap, &import[56], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); - - BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); - auto const resultBytes = vrt.getBytes(params, 2); - BEAST_EXPECT(resultBytes == floatMinus1); - } - - { - // hfs.floatNegate(makeSlice(floatMinus1)); - vrt.setBytes(0, floatMinus1.data(), floatMinus1.size()); - WasmValVec params(4), result(1); - auto* trap = - ww(floatNegate_wrap, &import[56], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); - - BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); - auto const resultBytes = vrt.getBytes(params, 2); - BEAST_EXPECT(resultBytes == float1); - } - - { - // hfs.floatNegate(makeSlice(floatIntMax)); - auto const expected = hfs.floatFromInt(std::numeric_limits::min() + 1, 0); - vrt.setBytes(0, floatIntMax.data(), floatIntMax.size()); - WasmValVec params(4), result(1); - auto* trap = - ww(floatNegate_wrap, &import[56], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); - - BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); - auto const resultBytes = vrt.getBytes(params, 2); - BEAST_EXPECT(expected) && BEAST_EXPECT(resultBytes == *expected); - } - - { - // hfs.floatNegate(makeSlice(floatMaxExp)); - vrt.setBytes(0, floatMaxExp.data(), floatMaxExp.size()); - WasmValVec params(4), result(1); - auto* trap = - ww(floatNegate_wrap, &import[56], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); - - BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); - auto const resultBytes = vrt.getBytes(params, 2); - BEAST_EXPECT(resultBytes == floatMinusMaxExp); - } - - { - // hfs.floatNegate(makeSlice(floatPi)); - vrt.setBytes(0, floatPi.data(), floatPi.size()); - WasmValVec params(4), result(1); - auto* trap = - ww(floatNegate_wrap, &import[56], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); - - BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); - auto const resultBytes = vrt.getBytes(params, 2); - - // hfs.floatNegate(makeSlice(*result)); - vrt.setBytes(512, resultBytes.data(), resultBytes.size()); - WasmValVec params2(4), result2(1); - auto* trap2 = ww( - floatNegate_wrap, &import[56], params2, result2, 512, FLOAT_SIZE, 768, FLOAT_SIZE); - - BEAST_EXPECT(!trap2) && BEAST_EXPECT(result2[0].kind == WASM_I32) && - BEAST_EXPECT(result2[0].of.i32 == FLOAT_SIZE); - auto const negPiBytes = vrt.getBytes(params2, 2); - BEAST_EXPECT(negPiBytes == floatPi); - } - } - - void - testFloatAbs() - { - testcase("floatAbs"); - using namespace test::jtx; - - Env env{*this}; - OpenView ov{*env.current()}; - ApplyContext ac = createApplyContext(env, ov); - auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); - VirtualRuntime vrt; - WasmHostFunctionsImpl hfs(ac, dummyEscrow); - - auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); - - { - // hfs.floatAbs(makeSlice(invalid)); - vrt.setBytes(0, invalid.data(), invalid.size()); - WasmValVec params(4), result(1); - auto* trap = - ww(floatAbs_wrap, &import[57], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); - - BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT( - result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); - } - - { - // hfs.floatAbs(makeSlice(floatIntZero)); - vrt.setBytes(0, floatIntZero.data(), floatIntZero.size()); - WasmValVec params(4), result(1); - auto* trap = - ww(floatAbs_wrap, &import[57], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); - - BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); - auto const resultBytes = vrt.getBytes(params, 2); - BEAST_EXPECT(resultBytes == floatIntZero); - } - - { - // hfs.floatAbs(makeSlice(float1)); - vrt.setBytes(0, float1.data(), float1.size()); - WasmValVec params(4), result(1); - auto* trap = - ww(floatAbs_wrap, &import[57], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); - - BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); - auto const resultBytes = vrt.getBytes(params, 2); - BEAST_EXPECT(resultBytes == float1); - } - - { - // hfs.floatAbs(makeSlice(floatMinus1)); - vrt.setBytes(0, floatMinus1.data(), floatMinus1.size()); - WasmValVec params(4), result(1); - auto* trap = - ww(floatAbs_wrap, &import[57], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); - - BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); - auto const resultBytes = vrt.getBytes(params, 2); - BEAST_EXPECT(resultBytes == float1); - } - - { - // hfs.floatAbs(makeSlice(floatIntMax)); - vrt.setBytes(0, floatIntMax.data(), floatIntMax.size()); - WasmValVec params(4), result(1); - auto* trap = - ww(floatAbs_wrap, &import[57], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); - - BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); - auto const resultBytes = vrt.getBytes(params, 2); - BEAST_EXPECT(resultBytes == floatIntMax); - } - - { - // hfs.floatAbs(makeSlice(floatIntMin)); - auto const negated = hfs.floatNegate(makeSlice(floatIntMin)); - vrt.setBytes(0, floatIntMin.data(), floatIntMin.size()); - WasmValVec params(4), result(1); - auto* trap = - ww(floatAbs_wrap, &import[57], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); - - BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); - auto const resultBytes = vrt.getBytes(params, 2); - BEAST_EXPECT(negated) && BEAST_EXPECT(resultBytes == *negated); - } - - { - // hfs.floatAbs(makeSlice(floatMinusMaxExp)); - vrt.setBytes(0, floatMinusMaxExp.data(), floatMinusMaxExp.size()); - WasmValVec params(4), result(1); - auto* trap = - ww(floatAbs_wrap, &import[57], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); - - BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); - auto const resultBytes = vrt.getBytes(params, 2); - BEAST_EXPECT(resultBytes == floatMaxExp); - } - - { - // hfs.floatAbs(makeSlice(floatMinus3)); - auto const expected = hfs.floatFromInt(3, 0); - vrt.setBytes(0, floatMinus3.data(), floatMinus3.size()); - WasmValVec params(4), result(1); - auto* trap = - ww(floatAbs_wrap, &import[57], params, result, 0, FLOAT_SIZE, 256, FLOAT_SIZE); - - BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); - auto const resultBytes = vrt.getBytes(params, 2); - BEAST_EXPECT(expected) && BEAST_EXPECT(resultBytes == *expected); - } - } - void testFloats() { @@ -6791,10 +7320,8 @@ struct HostFuncImpl_test : public beast::unit_test::suite testFloatFromSTAmount(); testFloatFromSTNumber(); testFloatToInt(); - testFloatToMantissaAndExponent(); - testFloatNegate(); - testFloatAbs(); - testFloatSet(); + testFloatToMantExp(); + testfloatFromMantExp(); testFloatCompare(); testFloatAdd(); testFloatSubtract(); @@ -6802,7 +7329,6 @@ struct HostFuncImpl_test : public beast::unit_test::suite testFloatDivide(); testFloatRoot(); testFloatPower(); - testFloatLog(); testFloatSpecialCases(); } @@ -6829,7 +7355,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(2), result(1); // 3 parameters instead of 2 auto* trap = - ww(getLedgerSqn_wrap, &import[0], params, result, 0, sizeof(std::uint32_t), 1); + ww(getLedgerSqn_wrap, + &import.at("get_ledger_sqn"), + params, + result, + 0, + sizeof(std::uint32_t), + 1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == sizeof(std::uint32_t)) && diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index 2f5740dca2..1a0d640522 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -477,27 +477,15 @@ public: } virtual Expected - floatToMantissaAndExponent(Slice const& x) const override + floatToMantExp(Slice const& x) const override { - return wasm_float::floatToMantissaAndExponentImpl(x); + return wasm_float::floatToMantExpImpl(x); } Expected - floatNegate(Slice const& x) const override + floatFromMantExp(int64_t mantissa, int32_t exponent, int32_t mode) const override { - return wasm_float::floatNegateImpl(x); - } - - Expected - floatAbs(Slice const& x) const override - { - return wasm_float::floatAbsImpl(x); - } - - Expected - floatSet(int64_t mantissa, int32_t exponent, int32_t mode) const override - { - return wasm_float::floatSetImpl(mantissa, exponent, mode); + return wasm_float::floatFromMantExpImpl(mantissa, exponent, mode); } Expected @@ -541,12 +529,6 @@ public: { return wasm_float::floatPowerImpl(x, n, mode); } - - Expected - floatLog(Slice const& x, int32_t mode) const override - { - return wasm_float::floatLogImpl(x, mode); - } }; struct TestHostFunctionsSink : public TestHostFunctions diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index e96ff5b89a..1582c2c809 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -154,7 +154,7 @@ struct Wasm_test : public beast::unit_test::suite void testWasmLib() { - testcase("wasmtime lib test"); + testcase("wasm lib test"); // clang-format off /* The WASM module buffer. */ Bytes const wasm = {/* WASM header */ @@ -369,7 +369,7 @@ struct Wasm_test : public beast::unit_test::suite TestHostFunctions hfs(env, 0); auto imp = createWasmImport(hfs); for (auto& i : imp) - i.second.gas = 0; + i.second.second.gas = 0; auto re = engine.run( allHostFuncWasm, hfs, 1'000'000, ESCROW_FUNCTION_NAME, {}, imp, env.journal); @@ -498,6 +498,8 @@ struct Wasm_test : public beast::unit_test::suite checkResult(re, -201, 28'965); } +// This test use log output, so DEBUG_OUTPUT must be disabled. +#ifndef DEBUG_OUTPUT { // fail because recursion too deep auto const deepWasm = hexToBytes(deepRecursionHex); @@ -525,6 +527,7 @@ struct Wasm_test : public beast::unit_test::suite BEAST_EXPECT(countSubstr(s, "WASMI Error: failure to call func") == 1); BEAST_EXPECT(countSubstr(s, "exception: failure") > 0); } +#endif { // infinite loop auto const infiniteLoopWasm = hexToBytes(infiniteLoopWasmHex); @@ -560,7 +563,7 @@ struct Wasm_test : public beast::unit_test::suite TestLedgerDataProvider hfs(env); ImportVec imports; WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn", &hfs); - imports[0].first = nullptr; + imports["get_ledger_sqn"].first = nullptr; auto& engine = WasmEngine::instance(); @@ -599,7 +602,7 @@ struct Wasm_test : public beast::unit_test::suite TestHostFunctions hfs(env, 0); auto re = runEscrowWasm(floatTestWasm, hfs, 200'000, funcName, {}); - checkResult(re, 1, 167'965); + checkResult(re, 1, 134'938); env.close(); } @@ -625,7 +628,7 @@ struct Wasm_test : public beast::unit_test::suite auto const codecovWasm = hexToBytes(codecovTestsWasmHex); TestHostFunctions hfs(env, 0); - auto const allowance = 202'724; + auto const allowance = 208'169; auto re = runEscrowWasm(codecovWasm, hfs, allowance, ESCROW_FUNCTION_NAME, {}); checkResult(re, 1, allowance); diff --git a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs index 918bbb5f09..239728575a 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs +++ b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs @@ -1042,21 +1042,6 @@ pub extern "C" fn finish() -> i32 { "float_pow_oob_slice", ) }); - with_buffer::<2, _, _>(|ptr, len| { - check_result( - unsafe { - host::float_log( - float.as_ptr().wrapping_add(1_000_000_000), - float.len(), - ptr, - len, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }, - error_codes::POINTER_OUT_OF_BOUNDS, - "float_log_oob_slice", - ) - }); // invalid UInt32 diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index a3906e52dd..95656161b9 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -396,492 +396,611 @@ extern std::string const allKeyletsWasmHex = "732b087369676e2d657874"; extern std::string const codecovTestsWasmHex = - "0061736d0100000001570b60067f7f7f7f7f7f017f60047f7f7f7f017f60027f7f017f60057f7f7f7f7f017f60037f" - "7f7f017f60077f7f7f7f7f7f7f017f60087f7f7f7f7f7f7f7f017f60017f017f60037f7f7e017f60047f7f7f7f0060" - "00017f02990d3c08686f73745f6c6962057472616365000308686f73745f6c69620974726163655f6e756d00080868" - "6f73745f6c69620e6765745f6c65646765725f73716e000208686f73745f6c6962166765745f706172656e745f6c65" - "646765725f74696d65000208686f73745f6c6962166765745f706172656e745f6c65646765725f6861736800020868" - "6f73745f6c69620c6765745f626173655f666565000208686f73745f6c696211616d656e646d656e745f656e61626c" - "6564000208686f73745f6c69620c6765745f74785f6669656c64000408686f73745f6c69620e6163636f756e745f6b" - "65796c6574000108686f73745f6c69621063616368655f6c65646765725f6f626a000408686f73745f6c69621c6765" - "745f63757272656e745f6c65646765725f6f626a5f6669656c64000408686f73745f6c6962146765745f6c65646765" - "725f6f626a5f6669656c64000108686f73745f6c6962136765745f74785f6e65737465645f6669656c64000108686f" - "73745f6c6962236765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c64000108686f" - "73745f6c69621b6765745f6c65646765725f6f626a5f6e65737465645f6669656c64000308686f73745f6c69621067" - "65745f74785f61727261795f6c656e000708686f73745f6c6962206765745f63757272656e745f6c65646765725f6f" - "626a5f61727261795f6c656e000708686f73745f6c6962186765745f6c65646765725f6f626a5f61727261795f6c65" - "6e000208686f73745f6c6962176765745f74785f6e65737465645f61727261795f6c656e000208686f73745f6c6962" - "276765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e000208686f7374" - "5f6c69621f6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e000408686f73745f6c6962" - "0b7570646174655f64617461000208686f73745f6c696213636f6d707574655f7368613531325f68616c6600010868" - "6f73745f6c696209636865636b5f736967000008686f73745f6c6962076765745f6e6674000008686f73745f6c6962" - "0e6765745f6e66745f697373756572000108686f73745f6c69620d6765745f6e66745f7461786f6e000108686f7374" - "5f6c69620d6765745f6e66745f666c616773000208686f73745f6c6962146765745f6e66745f7472616e736665725f" - "666565000208686f73745f6c69620e6765745f6e66745f73657269616c000108686f73745f6c69620d74726163655f" - "6163636f756e74000108686f73745f6c69620c74726163655f616d6f756e74000108686f73745f6c69620c63686563" - "6b5f6b65796c6574000008686f73745f6c69620f666c6f61745f66726f6d5f75696e74000308686f73745f6c69620b" - "6c696e655f6b65796c6574000608686f73745f6c69620a616d6d5f6b65796c6574000008686f73745f6c6962116372" - "6564656e7469616c5f6b65796c6574000608686f73745f6c69620e6d70746f6b656e5f6b65796c6574000008686f73" - "745f6c69621274726163655f6f70617175655f666c6f6174000108686f73745f6c69620d666c6f61745f636f6d7061" - "7265000108686f73745f6c696209666c6f61745f616464000508686f73745f6c69620e666c6f61745f737562747261" - "6374000508686f73745f6c69620e666c6f61745f6d756c7469706c79000508686f73745f6c69620c666c6f61745f64" - "6976696465000508686f73745f6c69620a666c6f61745f726f6f74000008686f73745f6c696209666c6f61745f706f" - "77000008686f73745f6c696209666c6f61745f6c6f67000308686f73745f6c69620d657363726f775f6b65796c6574" - "000008686f73745f6c6962136d70745f69737375616e63655f6b65796c6574000008686f73745f6c6962106e66745f" - "6f666665725f6b65796c6574000008686f73745f6c69620c6f666665725f6b65796c6574000008686f73745f6c6962" - "0d6f7261636c655f6b65796c6574000008686f73745f6c69620e7061796368616e5f6b65796c6574000608686f7374" - "5f6c69621a7065726d697373696f6e65645f646f6d61696e5f6b65796c6574000008686f73745f6c69620d7469636b" - "65745f6b65796c6574000008686f73745f6c69620c7661756c745f6b65796c6574000008686f73745f6c69620f6465" - "6c65676174655f6b65796c6574000008686f73745f6c6962166465706f7369745f707265617574685f6b65796c6574" - "000008686f73745f6c69620a6469645f6b65796c6574000108686f73745f6c69620e7369676e6572735f6b65796c65" - "740001030302090a05030100110619037f01418080c0000b7f0041bba1c0000b7f0041c0a1c0000b072e04066d656d" - "6f727902000666696e697368003d0a5f5f646174615f656e6403010b5f5f686561705f6261736503020abf2c024600" - "0240200020014704402002200341014100410010001a20004100480d01418b80c000410b2000ad1001000b20022003" - "2000ac10011a0f0b418b80c000410b2000ac1001000bf52b020a7f017e23004190026b22002400419680c000412341" - "014100410010001a20004100360260200041e0006a220241041002410441bd8cc000410e103c200041003602602002" - "41041003410441cb8cc0004116103c200041f8006a22044200370300200041f0006a22014200370300200041e8006a" - "2205420037030020004200370360200241201004412041e18cc0004116103c20004100360260200241041005410441" - "f78cc000410c103c200041106a2207428182848890a0c08001370300200041186a2206428182848890a0c080013703" - "00200041206a2209428182848890a0c080013703002000428182848890a0c0800137030841b980c000410e10064101" - "41c780c0004111103c200041086a41201006410141c780c0004111103c418180202002411410072203411446044002" - "402000412e6a200041e2006a2d00003a0000200020002900673703e8012000200041ec006a2900003700ed01200020" - "002f00603b012c200020002903e8013703a801200020002900ed013700ad012000200028006336002f200041386a20" - "002900ad01370000200020002903a80137003320044200370300200142003703002005420037030020004200370360" - "2000412c6a2204411420024120100822034120470d00200041c2006a20002d00623a0000200041f0016a2203200041" - "ef006a290000220a370300200041cf006a200a370000200041d7006a200041f7006a290000370000200041df006a20" - "0041ff006a2d00003a0000200020002f01603b01402000200028006336004320002000290067370047200041406b41" - "2041001009410141d880c0004110103c2001410036020020054200370300200042003703604181802020024114100a" - "411441838dc000411c103c20014100360200200542003703002000420037036041014181802020024114100b411441" - "9f8dc0004114103c200041043602a001200041818020360260200041f8016a22054100360200200342003703002000" - "42003703e80120024104200041e8016a22014114100c411441b38dc0004113103c2005410036020020034200370300" - "200042003703e801200220002802a00120014114100d411441c68dc0004123103c2005410036020020034200370300" - "200042003703e8014101200220002802a00120014114100e411441e98dc000411b103c4189803c100f412041e880c0" - "004110103c4189803c1010412041f880c0004120103c41014189803c10114120419881c0004118103c200220002802" - "a0011012412041b081c0004117103c200220002802a0011013412041c781c0004127103c4101200220002802a00110" - "14412041ee81c000411f103c2004411410154114418d82c000410b103c20004180026a220842003703002005420037" - "030020034200370300200042003703e801200220002802a001200141201016412041848ec0004113103c419882c000" - "410c41a482c000410b41af82c000410e1017410141bd82c0004109103c200041c0016a2009290300370300200041b8" - "016a2006290300370300200041b0016a2007290300370300200020002903083703a801200541003b01002003420037" - "0300200042003703e80120044114200041a8016a22074120200141121018411241978ec0004107103c200541003602" - "0020034200370300200042003703e801200741202001411410194114419e8ec000410e103c200041003602e8012007" - "412020014104101a410441ac8ec000410d103c20074120101b410841c682c000410d103c20074120101c410a41d382" - "c0004114103c200041003602e8012007412020014104101d410441b98ec000410e103c41e782c000410d2004411410" - "1e410041f482c000410d103c41e782c000410d418183c0004108101f4100418983c000410c103c41e782c000410d41" - "9583c0004108101f4100419d83c0004111103c417f41041004417141ae83c000411e103c200041003602e801200141" - "7f1004417141c78ec000411e103c200041ea016a41003a0000200041003b01e801200141031004417d41e58ec00041" - "24103c200041003602e8012001418094ebdc031004417341898fc0004123103c4102100f416f41cc83c000411f103c" - "417f20002802a0011012417141eb83c000411f103c2002417f10124171418a84c000411f103c200241810810124174" - "41a984c0004120103c200041e094ebdc036a220620002802a0011012417341c984c000411f103c2008420037030020" - "05420037030020034200370300200042003703e8012004411420064108200141201020417341ac8fc0004118103c20" - "0842003703002005420037030020034200370300200042003703e8012004411420044114200141201020417141c48f" - "c000411a103c200842003703002005420037030020034200370300200042003703e801200641082001412041001021" - "417341de8fc0004117103c200842003703002005420037030020034200370300200042003703e801200220002802a0" - "012001412041001021417141f58fc0004120103c200620002802a00141011009417341e884c0004118103c20022000" - "2802a001410110094171418085c000411a103c200842003703002005420037030020034200370300200042003703e8" - "01200620002802a0012001412010084173419590c0004116103c200842003703002005420037030020034200370300" - "200042003703e801200220002802a001200141201008417141ab90c0004118103c2008420037030020054200370300" - "20034200370300200042003703e8012004411420044114200620002802a001200141201022417341c390c000411c10" - "3c200842003703002005420037030020034200370300200042003703e8012004411420044114200220002802a00120" - "0141201022417141df90c000411e103c200842003703002005420037030020034200370300200042003703e80141a7" - "a1c0004114200620002802a001200141201023417341fd90c0004119103c2008420037030020054200370300200342" - "00370300200042003703e80141a7a1c0004114200220002802a0012001412010234171419691c000411f103c200842" - "003703002005420037030020034200370300200042003703e80141a7a1c0004114419a85c000411420014120102341" - "7141b591c0004129103c200842003703002005420037030020034200370300200042003703e80141ae85c000412841" - "a7a1c0004114200141201023417141de91c0004125103c200041dc016a2000413c6a280100360200200041d4016a20" - "0041346a2901003702002000200029012c3702cc01200041808080083602c801200041003b01e801200041c8016a22" - "09411841a7a1c00041142001410210234171418392c000410e103c200620002802a001422a1001417341d685c00041" - "11103c200041003b01e8014102200141021007416f419192c000411b103c200041003b01e801410220014102100a41" - "6f41ac92c000412b103c200041003b01e8014101410220014102100b416f41d792c0004123103c4102100f416f41cc" - "83c000411f103c41021010416f41e785c000412f103c410141021011416f419686c0004127103c41b980c000418108" - "1006417441bd86c000411f103c41b980c00041c1001006417441dc86c000411a103c200041003b01e8012002418108" - "20014102100c417441fa92c0004121103c200041003b01e801200241810820014102100d4174419b93c0004131103c" - "200041003b01e8014101200241810820014102100e417441cc93c0004129103c20024181081012417441f686c00041" - "25103c200241810810134174419b87c0004135103c410120024181081014417441d087c000412d103c200241812010" - "15417441fd87c0004119103c41e782c00041810841a482c000410b41af82c000410e1017417441bd82c0004109103c" - "41e782c000410d41a482c00041810841af82c000410e1017417441bd82c0004109103c41e782c000410d41a482c000" - "410b41af82c0004181081017417441bd82c0004109103c200041003b01e8012002418108200141021016417441f593" - "c0004121103c200041003b01e80141a7a1c00041810841a7a1c00041142001410210234174419694c0004118103c20" - "0041003b01e80120044114200441142002418108200141021024417441ae94c000411f103c200041003b01e8012009" - "41810820044114200141021025417441cd94c0004122103c41e782c000410d200620002802a0014100100041734196" - "88c000410f103c200042d487b6f4c7d4b1c0003700e00141e782c000410d200041e095ebdc036a2207410810264173" - "41a588c000411c103c41e782c000410d200620002802a001101f417341c188c0004116103c20074108200041e0016a" - "220641081027417341d788c0004118103c20064108200741081027417341ef88c0004118103c200041003b01e80120" - "074108200641082001410241001028417341ef94c0004114103c200041003b01e80120064108200741082001410241" - "0010284173418395c0004114103c200041003b01e801200741082006410820014102410010294173419795c0004119" - "103c200041003b01e80120064108200741082001410241001029417341b095c0004119103c200041003b01e8012007" - "410820064108200141024100102a417341c995c0004119103c200041003b01e8012006410820074108200141024100" - "102a417341e295c0004119103c200041003b01e8012007410820064108200141024100102b417341fb95c000411710" - "3c200041003b01e8012006410820074108200141024100102b4173419296c0004117103c200041003b01e801200741" - "084103200141024100102c417341a996c0004114103c200041003b01e801200741084103200141024100102d417341" - "bd96c0004113103c200041003b01e80120074108200141024100102e417341d096c0004113103c2008420037030020" - "05420037030020034200370300200042003703e801200441142004411420014120102f417141e396c000411f103c20" - "0842003703002005420037030020034200370300200042003703e80120044114200441142001412010304171418297" - "c0004125103c200842003703002005420037030020034200370300200042003703e801200441142004411420014120" - "1031417141a797c0004122103c200842003703002005420037030020034200370300200042003703e8012004411420" - "044114200141201032417141c997c000411e103c200842003703002005420037030020034200370300200042003703" - "e8012004411420044114200141201033417141e797c000411f103c2008420037030020054200370300200342003703" - "00200042003703e8012004411420044114200441142001412010344171418698c0004120103c200842003703002005" - "420037030020034200370300200042003703e8012004411420044114200141201035417141a698c000412c103c2008" - "42003703002005420037030020034200370300200042003703e8012004411420044114200141201036417141d298c0" - "00411f103c200842003703002005420037030020034200370300200042003703e80120044114200441142001412010" - "37417141f198c000411e103c200220002802a001410010094171418789c0004123103c200041003b01e80120044114" - "200220002802a0012001410210184171418f99c000411a103c200041003b01e801200220002802a001200141021019" - "417141a999c0004121103c200041003b01e801200220002802a00120014102101a417141ca99c0004120103c200220" - "002802a001101b417141aa89c0004120103c200220002802a001101c417141ca89c0004127103c200041003602e801" - "200220002802a00120014104101d417141ea99c0004121103c200041003b01e801200220002802a001200141021008" - "4171418b9ac0004124103c200041808080083602e801200041003b018e02200220002802a001200141042000418e02" - "6a220341021020417141af9ac0004122103c200041003b018e02200220002802a00122052004411420022005200341" - "021024417141d19ac0004128103c200041003b018e0220044114200220002802a00122052002200520034102102441" - "7141f99ac0004128103c200041003b018e02200220002802a00120044114200341021038417141a19bc0004126103c" - "200041003b018e0220044114200220002802a001200341021038417141c79bc0004126103c200041003b018e022002" - "20002802a00120044114200341021039417141ed9bc000412d103c200041003b018e0220044114200220002802a001" - "2003410210394171419a9cc000412d103c200041003b018e02200220002802a00120034102103a417141c79cc00041" - "20103c200041003b018e02200220002802a0012001410420034102102f417141e79cc0004123103c200041003b018e" - "02200220002802a00120044114419a85c00041142003410210224171418a9dc0004122103c200041003b018e022004" - "4114200220002802a001419a85c0004114200341021022417141ac9dc0004122103c200041003b018e022002200028" - "02a00120014104200341021030417141ce9dc0004129103c200041003b018e0220094118200220002802a001200341" - "021025417141f79dc0004124103c200041003b018e02200220002802a001200141042003410210314171419b9ec000" - "4126103c200041003b018e02200220002802a00120014104200341021032417141c19ec0004122103c200041003b01" - "8e02200220002802a00120014104200341021033417141e39ec0004123103c200041003b018e02200220002802a001" - "2004411420014104200341021034417141869fc0004125103c200041003b018e0220044114200220002802a0012001" - "4104200341021034417141ab9fc0004125103c200041003b018e02200220002802a001200141042003410210354171" - "41d09fc0004130103c200041003b018e02200220002802a00120034102103b41714180a0c0004124103c200041003b" - "018e02200220002802a00120014104200341021036417141a4a0c0004123103c200041003b018e02200220002802a0" - "0120014104200341021037417141c7a0c0004122103c200041003b018e02200220002802a00141f189c00041202003" - "41021018417141e9a0c000411d103c41e782c000410d200220002802a001101e417141918ac0004123103c41e796ab" - "dd03410d41f189c000412041001000417341b48ac0004110103c41e796abdd03410d200641081026417341c48ac000" - "411d103c41e796abdd03410d20044114101e417341e18ac0004118103c41e796abdd03410d419583c0004108101f41" - "7341f98ac0004117103c200220002802a001200241810841001000417441908bc000410e103c200241810842011001" - "4174419e8bc0004112103c41e782c000418108200641081026417441b08bc000411b103c41e782c000418108200441" - "14101e417441cb8bc0004116103c41e782c000418108419583c0004108101f417441e18bc0004115103c41e782c000" - "410d200220002802a001101f417141f68bc0004119103c200041003b018e02200220002802a0012004411420034102" - "102541714186a1c0004121103c41e782c000410d200220002802a001410210004171418f8cc0004114103c41014100" - "20044114101e410041a38cc000411a103c20004190026a240041010f0b0b418080c000410b417f20032003417f4e1b" - "ac1001000b0b92210200418080c0000bae056572726f725f636f64653d54455354204641494c454424242424242053" - "54415254494e47205741534d20455845435554494f4e202424242424746573745f616d656e646d656e74616d656e64" - "6d656e745f656e61626c656463616368655f6c65646765725f6f626a6765745f74785f61727261795f6c656e676574" - "5f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e6765745f6c65646765725f6f626a5f617272" - "61795f6c656e6765745f74785f6e65737465645f61727261795f6c656e6765745f63757272656e745f6c6564676572" - "5f6f626a5f6e65737465645f61727261795f6c656e6765745f6c65646765725f6f626a5f6e65737465645f61727261" - "795f6c656e7570646174655f6461746174657374206d65737361676574657374207075626b65797465737420736967" - "6e6174757265636865636b5f7369676765745f6e66745f666c6167736765745f6e66745f7472616e736665725f6665" - "6574657374696e6720747261636574726163655f6163636f756e74400000000000005f74726163655f616d6f756e74" - "400000000000000074726163655f616d6f756e745f7a65726f6765745f706172656e745f6c65646765725f68617368" - "5f6e65675f7074726765745f74785f61727261795f6c656e5f696e76616c69645f736669656c646765745f74785f6e" - "65737465645f61727261795f6c656e5f6e65675f7074726765745f74785f6e65737465645f61727261795f6c656e5f" - "6e65675f6c656e6765745f74785f6e65737465645f61727261795f6c656e5f746f6f5f6c6f6e676765745f74785f6e" - "65737465645f61727261795f6c656e5f7074725f6f6f6263616368655f6c65646765725f6f626a5f7074725f6f6f62" - "63616368655f6c65646765725f6f626a5f77726f6e675f6c656e555344303030303030303030303030303030303000" - "41d685c0000bd11b74726163655f6e756d5f6f6f625f7374726765745f63757272656e745f6c65646765725f6f626a" - "5f61727261795f6c656e5f696e76616c69645f736669656c646765745f6c65646765725f6f626a5f61727261795f6c" - "656e5f696e76616c69645f736669656c64616d656e646d656e745f656e61626c65645f746f6f5f6269675f736c6963" - "65616d656e646d656e745f656e61626c65645f746f6f5f6c6f6e676765745f74785f6e65737465645f61727261795f" - "6c656e5f746f6f5f6269675f736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f" - "61727261795f6c656e5f746f6f5f6269675f736c6963656765745f6c65646765725f6f626a5f6e65737465645f6172" - "7261795f6c656e5f746f6f5f6269675f736c6963657570646174655f646174615f746f6f5f6269675f736c69636574" - "726163655f6f6f625f736c69636574726163655f6f70617175655f666c6f61745f6f6f625f736c6963657472616365" - "5f616d6f756e745f6f6f625f736c696365666c6f61745f636f6d706172655f6f6f625f736c69636531666c6f61745f" - "636f6d706172655f6f6f625f736c6963653263616368655f6c65646765725f6f626a5f77726f6e675f73697a655f75" - "696e743235366765745f6e66745f666c6167735f77726f6e675f73697a655f75696e743235366765745f6e66745f74" - "72616e736665725f6665655f77726f6e675f73697a655f75696e743235363030303030303030303030303030303030" - "30303030303030303030303030303174726163655f6163636f756e745f77726f6e675f73697a655f6163636f756e74" - "5f696474726163655f6f6f625f737472696e6774726163655f6f70617175655f666c6f61745f6f6f625f737472696e" - "6774726163655f6163636f756e745f6f6f625f737472696e6774726163655f616d6f756e745f6f6f625f737472696e" - "6774726163655f746f6f5f6c6f6e6774726163655f6e756d5f746f6f5f6c6f6e6774726163655f6f70617175655f66" - "6c6f61745f746f6f5f6c6f6e6774726163655f6163636f756e745f746f6f5f6c6f6e6774726163655f616d6f756e74" - "5f746f6f5f6c6f6e6774726163655f616d6f756e745f77726f6e675f6c656e67746874726163655f696e76616c6964" - "5f61735f68657874726163655f6163636f756e745f636865636b5f646573796e636765745f6c65646765725f73716e" - "6765745f706172656e745f6c65646765725f74696d656765745f706172656e745f6c65646765725f68617368676574" - "5f626173655f6665656765745f63757272656e745f6c65646765725f6f626a5f6669656c646765745f6c6564676572" - "5f6f626a5f6669656c646765745f74785f6e65737465645f6669656c646765745f63757272656e745f6c6564676572" - "5f6f626a5f6e65737465645f6669656c646765745f6c65646765725f6f626a5f6e65737465645f6669656c64636f6d" - "707574655f7368613531325f68616c666765745f6e66746765745f6e66745f6973737565726765745f6e66745f7461" - "786f6e6765745f6e66745f73657269616c6765745f706172656e745f6c65646765725f686173685f6e65675f6c656e" - "6765745f706172656e745f6c65646765725f686173685f6275665f746f6f5f736d616c6c6765745f706172656e745f" - "6c65646765725f686173685f6c656e5f746f6f5f6c6f6e67636865636b5f6b65796c65745f6f6f625f6c656e5f7533" - "32636865636b5f6b65796c65745f77726f6e675f6c656e5f753332666c6f61745f66726f6d5f75696e745f6c656e5f" - "6f6f62666c6f61745f66726f6d5f75696e745f77726f6e675f6c656e5f75696e7436346163636f756e745f6b65796c" - "65745f6c656e5f6f6f626163636f756e745f6b65796c65745f77726f6e675f6c656e6c696e655f6b65796c65745f6c" - "656e5f6f6f625f63757272656e63796c696e655f6b65796c65745f77726f6e675f6c656e5f63757272656e6379616d" - "6d5f6b65796c65745f6c656e5f6f6f625f617373657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6c656e" - "5f617373657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6e6f6e5f7872705f63757272656e63795f6c65" - "6e616d6d5f6b65796c65745f6c656e5f77726f6e675f7872705f63757272656e63795f6c656e616d6d5f6b65796c65" - "745f6d70746765745f74785f6669656c645f696e76616c69645f736669656c646765745f63757272656e745f6c6564" - "6765725f6f626a5f6669656c645f696e76616c69645f736669656c646765745f6c65646765725f6f626a5f6669656c" - "645f696e76616c69645f736669656c646765745f74785f6e65737465645f6669656c645f746f6f5f6269675f736c69" - "63656765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c645f746f6f5f6269675f73" - "6c6963656765745f6c65646765725f6f626a5f6e65737465645f6669656c645f746f6f5f6269675f736c696365636f" - "6d707574655f7368613531325f68616c665f746f6f5f6269675f736c696365616d6d5f6b65796c65745f746f6f5f62" - "69675f736c69636563726564656e7469616c5f6b65796c65745f746f6f5f6269675f736c6963656d70746f6b656e5f" - "6b65796c65745f746f6f5f6269675f736c6963655f6d70746964666c6f61745f6164645f6f6f625f736c6963653166" - "6c6f61745f6164645f6f6f625f736c69636532666c6f61745f73756274726163745f6f6f625f736c69636531666c6f" - "61745f73756274726163745f6f6f625f736c69636532666c6f61745f6d756c7469706c795f6f6f625f736c69636531" - "666c6f61745f6d756c7469706c795f6f6f625f736c69636532666c6f61745f6469766964655f6f6f625f736c696365" - "31666c6f61745f6469766964655f6f6f625f736c69636532666c6f61745f726f6f745f6f6f625f736c696365666c6f" - "61745f706f775f6f6f625f736c696365666c6f61745f6c6f675f6f6f625f736c696365657363726f775f6b65796c65" - "745f77726f6e675f73697a655f75696e7433326d70745f69737375616e63655f6b65796c65745f77726f6e675f7369" - "7a655f75696e7433326e66745f6f666665725f6b65796c65745f77726f6e675f73697a655f75696e7433326f666665" - "725f6b65796c65745f77726f6e675f73697a655f75696e7433326f7261636c655f6b65796c65745f77726f6e675f73" - "697a655f75696e7433327061796368616e5f6b65796c65745f77726f6e675f73697a655f75696e7433327065726d69" - "7373696f6e65645f646f6d61696e5f6b65796c65745f77726f6e675f73697a655f75696e7433327469636b65745f6b" - "65796c65745f77726f6e675f73697a655f75696e7433327661756c745f6b65796c65745f77726f6e675f73697a655f" - "75696e7433326765745f6e66745f77726f6e675f73697a655f75696e743235366765745f6e66745f6973737565725f" - "77726f6e675f73697a655f75696e743235366765745f6e66745f7461786f6e5f77726f6e675f73697a655f75696e74" - "3235366765745f6e66745f73657269616c5f77726f6e675f73697a655f75696e743235366163636f756e745f6b6579" - "6c65745f77726f6e675f73697a655f6163636f756e745f6964636865636b5f6b65796c65745f77726f6e675f73697a" - "655f6163636f756e745f696463726564656e7469616c5f6b65796c65745f77726f6e675f73697a655f6163636f756e" - "745f69643163726564656e7469616c5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964326465" - "6c65676174655f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69643164656c65676174655f6b65" - "796c65745f77726f6e675f73697a655f6163636f756e745f6964326465706f7369745f707265617574685f6b65796c" - "65745f77726f6e675f73697a655f6163636f756e745f6964316465706f7369745f707265617574685f6b65796c6574" - "5f77726f6e675f73697a655f6163636f756e745f6964326469645f6b65796c65745f77726f6e675f73697a655f6163" - "636f756e745f6964657363726f775f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69646c696e65" - "5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964316c696e655f6b65796c65745f77726f6e67" - "5f73697a655f6163636f756e745f6964326d70745f69737375616e63655f6b65796c65745f77726f6e675f73697a65" - "5f6163636f756e745f69646d70746f6b656e5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964" - "6e66745f6f666665725f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69646f666665725f6b6579" - "6c65745f77726f6e675f73697a655f6163636f756e745f69646f7261636c655f6b65796c65745f77726f6e675f7369" - "7a655f6163636f756e745f69647061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f" - "6964317061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964327065726d697373" - "696f6e65645f646f6d61696e5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69647369676e6572" - "735f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69647469636b65745f6b65796c65745f77726f" - "6e675f73697a655f6163636f756e745f69647661756c745f6b65796c65745f77726f6e675f73697a655f6163636f75" - "6e745f69646765745f6e66745f77726f6e675f73697a655f6163636f756e745f69646d70746f6b656e5f6b65796c65" - "745f6d707469645f77726f6e675f6c656e677468004d0970726f64756365727302086c616e67756167650104527573" - "74000c70726f6365737365642d6279010572757374631d312e38372e30202831373036376539616320323032352d30" - "352d303929002c0f7461726765745f6665617475726573022b0f6d757461626c652d676c6f62616c732b087369676e" - "2d657874"; + "0061736d01000000015a0c60057f7f7f7f7f017f60037f7f7e017f60027f7f017f60037f7f7f017f60047f7f7f7f01" + "7f60017f017f60067f7f7f7f7f7f017f60087f7f7f7f7f7f7f7f017f60077f7f7f7f7f7f7f017f60047f7f7f7f0060" + "00006000017f02840d3b08686f73745f6c6962057472616365000008686f73745f6c69620974726163655f6e756d00" + "0108686f73745f6c69620e6765745f6c65646765725f73716e000208686f73745f6c6962166765745f706172656e74" + "5f6c65646765725f74696d65000208686f73745f6c6962166765745f706172656e745f6c65646765725f6861736800" + "0208686f73745f6c69620c6765745f626173655f666565000208686f73745f6c696211616d656e646d656e745f656e" + "61626c6564000208686f73745f6c69620c6765745f74785f6669656c64000308686f73745f6c69620e6163636f756e" + "745f6b65796c6574000408686f73745f6c69621063616368655f6c65646765725f6f626a000308686f73745f6c6962" + "1c6765745f63757272656e745f6c65646765725f6f626a5f6669656c64000308686f73745f6c6962146765745f6c65" + "646765725f6f626a5f6669656c64000408686f73745f6c6962136765745f74785f6e65737465645f6669656c640004" + "08686f73745f6c6962236765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c640004" + "08686f73745f6c69621b6765745f6c65646765725f6f626a5f6e65737465645f6669656c64000008686f73745f6c69" + "62106765745f74785f61727261795f6c656e000508686f73745f6c6962206765745f63757272656e745f6c65646765" + "725f6f626a5f61727261795f6c656e000508686f73745f6c6962186765745f6c65646765725f6f626a5f6172726179" + "5f6c656e000208686f73745f6c6962176765745f74785f6e65737465645f61727261795f6c656e000208686f73745f" + "6c6962276765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e00020868" + "6f73745f6c69621f6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e000308686f73745f" + "6c69620b7570646174655f64617461000208686f73745f6c696213636f6d707574655f7368613531325f68616c6600" + "0408686f73745f6c696209636865636b5f736967000608686f73745f6c6962076765745f6e6674000608686f73745f" + "6c69620e6765745f6e66745f697373756572000408686f73745f6c69620d6765745f6e66745f7461786f6e00040868" + "6f73745f6c69620d6765745f6e66745f666c616773000208686f73745f6c6962146765745f6e66745f7472616e7366" + "65725f666565000208686f73745f6c69620e6765745f6e66745f73657269616c000408686f73745f6c69620d747261" + "63655f6163636f756e74000408686f73745f6c69620c74726163655f616d6f756e74000408686f73745f6c69620c63" + "6865636b5f6b65796c6574000608686f73745f6c69620f666c6f61745f66726f6d5f75696e74000008686f73745f6c" + "69620b6c696e655f6b65796c6574000708686f73745f6c69620a616d6d5f6b65796c6574000608686f73745f6c6962" + "1163726564656e7469616c5f6b65796c6574000708686f73745f6c69620e6d70746f6b656e5f6b65796c6574000608" + "686f73745f6c69621274726163655f6f70617175655f666c6f6174000408686f73745f6c69620d666c6f61745f636f" + "6d70617265000408686f73745f6c696209666c6f61745f616464000808686f73745f6c69620e666c6f61745f737562" + "7472616374000808686f73745f6c69620e666c6f61745f6d756c7469706c79000808686f73745f6c69620c666c6f61" + "745f646976696465000808686f73745f6c69620a666c6f61745f726f6f74000608686f73745f6c696209666c6f6174" + "5f706f77000608686f73745f6c69620d657363726f775f6b65796c6574000608686f73745f6c6962136d70745f6973" + "7375616e63655f6b65796c6574000608686f73745f6c6962106e66745f6f666665725f6b65796c6574000608686f73" + "745f6c69620c6f666665725f6b65796c6574000608686f73745f6c69620d6f7261636c655f6b65796c657400060868" + "6f73745f6c69620e7061796368616e5f6b65796c6574000708686f73745f6c69621a7065726d697373696f6e65645f" + "646f6d61696e5f6b65796c6574000608686f73745f6c69620d7469636b65745f6b65796c6574000608686f73745f6c" + "69620c7661756c745f6b65796c6574000608686f73745f6c69620f64656c65676174655f6b65796c6574000608686f" + "73745f6c6962166465706f7369745f707265617574685f6b65796c6574000608686f73745f6c69620a6469645f6b65" + "796c6574000408686f73745f6c69620e7369676e6572735f6b65796c65740004030403090a0b05030100110619037f" + "01418080c0000b7f0041a8a1c0000b7f0041b0a1c0000b072e04066d656d6f727902000666696e697368003d0a5f5f" + "646174615f656e6403010b5f5f686561705f6261736503020aa43f0368000240024020002001460d00200220034101" + "410041001080808080001a2000417f4c0d01418b80c08000410b2000ad1081808080001a10bc80808000000b200220" + "032000ac1081808080001a0f0b418b80c08000410b2000ac1081808080001a10bc80808000000b0300000bb43e0305" + "7f017e017f2380808080004190026b2200248080808000419680c0800041234101410041001080808080001a200041" + "00360260200041e0006a4104108280808000410441bd8cc08000410e10bb8080800020004100360260200041e0006a" + "4104108380808000410441cb8cc08000411610bb80808000200041e0006a41186a22014200370300200041e0006a41" + "106a22024200370300200041e0006a41086a2203420037030020004200370360200041e0006a412010848080800041" + "2041e18cc08000411610bb8080800020004100360260200041e0006a4104108580808000410441f78cc08000410c10" + "bb80808000200041086a41186a428182848890a0c08001370300200041086a41106a428182848890a0c08001370300" + "200041086a41086a428182848890a0c080013703002000428182848890a0c0800137030841b980c08000410e108680" + "808000410141c780c08000411110bb80808000200041086a4120108680808000410141c780c08000411110bb808080" + "000240024041818020200041e0006a411410878080800022044114470d002000412c6a41026a200041e0006a41026a" + "2d00003a0000200020002900673703e8012000200041e0006a410c6a2900003700ed01200020002f00603b012c2000" + "20002903e8013703a801200020002900ed013700ad012000200028006336002f2000412c6a410c6a20002900ad0137" + "0000200020002903a801370033200142003703002002420037030020034200370300200042003703602000412c6a41" + "14200041e0006a412010888080800022014120470d01200041c0006a41026a20002d00623a0000200041e8016a4108" + "6a2201200041e0006a410f6a2900002205370300200041c0006a410f6a2005370000200041c0006a41176a200041e0" + "006a41176a290000370000200041c0006a411f6a200041e0006a411f6a2d00003a0000200020002f01603b01402000" + "200028006336004320002000290067370047200041c0006a41204100108980808000410141d880c08000411010bb80" + "808000200041e0006a41106a22024100360200200041e0006a41086a22034200370300200042003703604181802020" + "0041e0006a4114108a80808000411441838dc08000411c10bb80808000200241003602002003420037030020004200" + "370360410141818020200041e0006a4114108b808080004114419f8dc08000411410bb80808000200041043602a001" + "200041818020360260200041e8016a41106a2202410036020020014200370300200042003703e801200041e0006a41" + "04200041e8016a4114108c80808000411441b38dc08000411310bb8080800020024100360200200142003703002000" + "42003703e801200041e0006a20002802a001200041e8016a4114108d80808000411441c68dc08000412310bb808080" + "002002410036020020014200370300200042003703e8014101200041e0006a20002802a001200041e8016a4114108e" + "80808000411441e98dc08000411b10bb808080004189803c108f80808000412041e880c08000411010bb8080800041" + "89803c109080808000412041f880c08000412010bb8080800041014189803c1091808080004120419881c080004118" + "10bb80808000200041e0006a20002802a001109280808000412041b081c08000411710bb80808000200041e0006a20" + "002802a001109380808000412041c781c08000412710bb808080004101200041e0006a20002802a001109480808000" + "412041ee81c08000411f10bb808080002000412c6a41141095808080004114418d82c08000410b10bb808080002000" + "41e8016a41186a220342003703002002420037030020014200370300200042003703e801200041e0006a20002802a0" + "01200041e8016a4120109680808000412041848ec08000411310bb80808000419882c08000410c41a482c08000410b" + "41af82c08000410e109780808000410141bd82c08000410910bb80808000200041a8016a41186a200041086a41186a" + "290300370300200041a8016a41106a200041086a41106a290300370300200041a8016a41086a200041086a41086a29" + "0300370300200020002903083703a801200241003b010020014200370300200042003703e8012000412c6a41142000" + "41a8016a4120200041e8016a4112109880808000411241978ec08000410710bb808080002002410036020020014200" + "370300200042003703e801200041a8016a4120200041e8016a41141099808080004114419e8ec08000410e10bb8080" + "8000200041003602e801200041a8016a4120200041e8016a4104109a80808000410441ac8ec08000410d10bb808080" + "00200041a8016a4120109b80808000410841c682c08000410d10bb80808000200041a8016a4120109c80808000410a" + "41d382c08000411410bb80808000200041003602e801200041a8016a4120200041e8016a4104109d80808000410441" + "b98ec08000410e10bb8080800041e782c08000410d2000412c6a4114109e80808000410041f482c08000410d10bb80" + "80800041e782c08000410d418183c080004108109f808080004100418983c08000410c10bb8080800041e782c08000" + "410d419583c080004108109f808080004100419d83c08000411110bb80808000417f4104108480808000417141ae83" + "c08000411e10bb80808000200041003602e801200041e8016a417f108480808000417141c78ec08000411e10bb8080" + "8000200041e8016a41026a41003a0000200041003b01e801200041e8016a4103108480808000417d41e58ec0800041" + "2410bb80808000200041003602e801200041e8016a418094ebdc03108480808000417341898fc08000412310bb8080" + "80004102108f80808000416f41cc83c08000411f10bb80808000417f20002802a001109280808000417141eb83c080" + "00411f10bb80808000200041e0006a417f1092808080004171418a84c08000411f10bb80808000200041e0006a4181" + "08109280808000417441a984c08000412010bb80808000200041e0006a418094ebdc036a220620002802a001109280" + "808000417341c984c08000411f10bb80808000200342003703002002420037030020014200370300200042003703e8" + "012000412c6a411420064108200041e8016a412010a080808000417341ac8fc08000411810bb808080002003420037" + "03002002420037030020014200370300200042003703e8012000412c6a41142000412c6a4114200041e8016a412010" + "a080808000417141c48fc08000411a10bb808080002003420037030020024200370300200142003703002000420037" + "03e80120064108200041e8016a4120410010a180808000417341de8fc08000411710bb808080002003420037030020" + "02420037030020014200370300200042003703e801200041e0006a20002802a001200041e8016a4120410010a18080" + "8000417141f58fc08000412010bb80808000200620002802a0014101108980808000417341e884c08000411810bb80" + "808000200041e0006a20002802a00141011089808080004171418085c08000411a10bb808080002003420037030020" + "02420037030020014200370300200042003703e801200620002802a001200041e8016a412010888080800041734195" + "90c08000411610bb80808000200342003703002002420037030020014200370300200042003703e801200041e0006a" + "20002802a001200041e8016a4120108880808000417141ab90c08000411810bb808080002003420037030020024200" + "37030020014200370300200042003703e8012000412c6a41142000412c6a4114200620002802a001200041e8016a41" + "2010a280808000417341c390c08000411c10bb80808000200342003703002002420037030020014200370300200042" + "003703e8012000412c6a41142000412c6a4114200041e0006a20002802a001200041e8016a412010a2808080004171" + "41df90c08000411e10bb80808000200342003703002002420037030020014200370300200042003703e8014194a1c0" + "80004114200620002802a001200041e8016a412010a380808000417341fd90c08000411910bb808080002003420037" + "03002002420037030020014200370300200042003703e8014194a1c080004114200041e0006a20002802a001200041" + "e8016a412010a3808080004171419691c08000411f10bb808080002003420037030020024200370300200142003703" + "00200042003703e8014194a1c080004114419a85c080004114200041e8016a412010a380808000417141b591c08000" + "412910bb80808000200342003703002002420037030020014200370300200042003703e80141ae85c0800041284194" + "a1c080004114200041e8016a412010a380808000417141de91c08000412510bb80808000200041c8016a41146a2000" + "412c6a41106a280100360200200041c8016a410c6a2000412c6a41086a2901003702002000200029012c3702cc0120" + "0041808080083602c801200041003b01e801200041c8016a41184194a1c080004114200041e8016a410210a3808080" + "004171418392c08000410e10bb80808000200620002802a001422a108180808000417341d685c08000411110bb8080" + "8000200041003b01e8014102200041e8016a4102108780808000416f419192c08000411b10bb80808000200041003b" + "01e8014102200041e8016a4102108a80808000416f41ac92c08000412b10bb80808000200041003b01e80141014102" + "200041e8016a4102108b80808000416f41d792c08000412310bb808080004102108f80808000416f41cc83c0800041" + "1f10bb808080004102109080808000416f41e785c08000412f10bb8080800041014102109180808000416f419686c0" + "8000412710bb8080800041b980c08000418108108680808000417441bd86c08000411f10bb8080800041b980c08000" + "41c100108680808000417441dc86c08000411a10bb80808000200041003b01e801200041e0006a418108200041e801" + "6a4102108c80808000417441fa92c08000412110bb80808000200041003b01e801200041e0006a418108200041e801" + "6a4102108d808080004174419b93c08000413110bb80808000200041003b01e8014101200041e0006a418108200041" + "e8016a4102108e80808000417441cc93c08000412910bb80808000200041e0006a418108109280808000417441f686" + "c08000412510bb80808000200041e0006a4181081093808080004174419b87c08000413510bb808080004101200041" + "e0006a418108109480808000417441d087c08000412d10bb80808000200041e0006a418120109580808000417441fd" + "87c08000411910bb8080800041e782c0800041810841a482c08000410b41af82c08000410e109780808000417441bd" + "82c08000410910bb8080800041e782c08000410d41a482c0800041810841af82c08000410e109780808000417441bd" + "82c08000410910bb8080800041e782c08000410d41a482c08000410b41af82c08000418108109780808000417441bd" + "82c08000410910bb80808000200041003b01e801200041e0006a418108200041e8016a4102109680808000417441f5" + "93c08000412110bb80808000200041003b01e8014194a1c080004181084194a1c080004114200041e8016a410210a3" + "808080004174419694c08000411810bb80808000200041003b01e8012000412c6a41142000412c6a4114200041e000" + "6a418108200041e8016a410210a480808000417441ae94c08000411f10bb80808000200041003b01e801200041c801" + "6a4181082000412c6a4114200041e8016a410210a580808000417441cd94c08000412210bb8080800041e782c08000" + "410d200620002802a00141001080808080004173419688c08000410f10bb80808000200042d487b6f4c7d4b1c00037" + "00e00141e782c08000410d200041e0016a418094ebdc036a2204410810a680808000417341a588c08000411c10bb80" + "80800041e782c08000410d200620002802a001109f80808000417341c188c08000411610bb80808000200441082000" + "41e0016a410810a780808000417341d788c08000411810bb80808000200041e0016a41082004410810a78080800041" + "7341ef88c08000411810bb80808000200041003b01e80120044108200041e0016a4108200041e8016a4102410010a8" + "80808000417341ef94c08000411410bb80808000200041003b01e801200041e0016a410820044108200041e8016a41" + "02410010a8808080004173418395c08000411410bb80808000200041003b01e80120044108200041e0016a41082000" + "41e8016a4102410010a9808080004173419795c08000411910bb80808000200041003b01e801200041e0016a410820" + "044108200041e8016a4102410010a980808000417341b095c08000411910bb80808000200041003b01e80120044108" + "200041e0016a4108200041e8016a4102410010aa80808000417341c995c08000411910bb80808000200041003b01e8" + "01200041e0016a410820044108200041e8016a4102410010aa80808000417341e295c08000411910bb808080002000" + "41003b01e80120044108200041e0016a4108200041e8016a4102410010ab80808000417341fb95c08000411710bb80" + "808000200041003b01e801200041e0016a410820044108200041e8016a4102410010ab808080004173419296c08000" + "411710bb80808000200041003b01e801200441084103200041e8016a4102410010ac80808000417341a996c0800041" + "1410bb80808000200041003b01e801200441084103200041e8016a4102410010ad80808000417341bd96c080004113" + "10bb80808000200342003703002002420037030020014200370300200042003703e8012000412c6a41142000412c6a" + "4114200041e8016a412010ae80808000417141d096c08000411f10bb80808000200342003703002002420037030020" + "014200370300200042003703e8012000412c6a41142000412c6a4114200041e8016a412010af80808000417141ef96" + "c08000412510bb80808000200342003703002002420037030020014200370300200042003703e8012000412c6a4114" + "2000412c6a4114200041e8016a412010b0808080004171419497c08000412210bb8080800020034200370300200242" + "0037030020014200370300200042003703e8012000412c6a41142000412c6a4114200041e8016a412010b180808000" + "417141b697c08000411e10bb80808000200342003703002002420037030020014200370300200042003703e8012000" + "412c6a41142000412c6a4114200041e8016a412010b280808000417141d497c08000411f10bb808080002003420037" + "03002002420037030020014200370300200042003703e8012000412c6a41142000412c6a41142000412c6a41142000" + "41e8016a412010b380808000417141f397c08000412010bb8080800020034200370300200242003703002001420037" + "0300200042003703e8012000412c6a41142000412c6a4114200041e8016a412010b4808080004171419398c0800041" + "2c10bb80808000200342003703002002420037030020014200370300200042003703e8012000412c6a41142000412c" + "6a4114200041e8016a412010b580808000417141bf98c08000411f10bb808080002003420037030020024200370300" + "20014200370300200042003703e8012000412c6a41142000412c6a4114200041e8016a412010b680808000417141de" + "98c08000411e10bb80808000200041e0006a20002802a00141001089808080004171418789c08000412310bb808080" + "00200041003b01e8012000412c6a4114200041e0006a20002802a001200041e8016a4102109880808000417141fc98" + "c08000411a10bb80808000200041003b01e801200041e0006a20002802a001200041e8016a41021099808080004171" + "419699c08000412110bb80808000200041003b01e801200041e0006a20002802a001200041e8016a4102109a808080" + "00417141b799c08000412010bb80808000200041e0006a20002802a001109b80808000417141aa89c08000412010bb" + "80808000200041e0006a20002802a001109c80808000417141ca89c08000412710bb80808000200041003602e80120" + "0041e0006a20002802a001200041e8016a4104109d80808000417141d799c08000412110bb80808000200041003b01" + "e801200041e0006a20002802a001200041e8016a4102108880808000417141f899c08000412410bb80808000200041" + "808080083602e801200041003b018e02200041e0006a20002802a001200041e8016a41042000418e026a410210a080" + "8080004171419c9ac08000412210bb80808000200041003b018e02200041e0006a20002802a00122012000412c6a41" + "14200041e0006a20012000418e026a410210a480808000417141be9ac08000412810bb80808000200041003b018e02" + "2000412c6a4114200041e0006a20002802a0012201200041e0006a20012000418e026a410210a480808000417141e6" + "9ac08000412810bb80808000200041003b018e02200041e0006a20002802a0012000412c6a41142000418e026a4102" + "10b7808080004171418e9bc08000412610bb80808000200041003b018e022000412c6a4114200041e0006a20002802" + "a0012000418e026a410210b780808000417141b49bc08000412610bb80808000200041003b018e02200041e0006a20" + "002802a0012000412c6a41142000418e026a410210b880808000417141da9bc08000412d10bb80808000200041003b" + "018e022000412c6a4114200041e0006a20002802a0012000418e026a410210b880808000417141879cc08000412d10" + "bb80808000200041003b018e02200041e0006a20002802a0012000418e026a410210b980808000417141b49cc08000" + "412010bb80808000200041003b018e02200041e0006a20002802a001200041e8016a41042000418e026a410210ae80" + "808000417141d49cc08000412310bb80808000200041003b018e02200041e0006a20002802a0012000412c6a411441" + "9a85c0800041142000418e026a410210a280808000417141f79cc08000412210bb80808000200041003b018e022000" + "412c6a4114200041e0006a20002802a001419a85c0800041142000418e026a410210a280808000417141999dc08000" + "412210bb80808000200041003b018e02200041e0006a20002802a001200041e8016a41042000418e026a410210af80" + "808000417141bb9dc08000412910bb80808000200041003b018e02200041c8016a4118200041e0006a20002802a001" + "2000418e026a410210a580808000417141e49dc08000412410bb80808000200041003b018e02200041e0006a200028" + "02a001200041e8016a41042000418e026a410210b080808000417141889ec08000412610bb80808000200041003b01" + "8e02200041e0006a20002802a001200041e8016a41042000418e026a410210b180808000417141ae9ec08000412210" + "bb80808000200041003b018e02200041e0006a20002802a001200041e8016a41042000418e026a410210b280808000" + "417141d09ec08000412310bb80808000200041003b018e02200041e0006a20002802a0012000412c6a4114200041e8" + "016a41042000418e026a410210b380808000417141f39ec08000412510bb80808000200041003b018e022000412c6a" + "4114200041e0006a20002802a001200041e8016a41042000418e026a410210b380808000417141989fc08000412510" + "bb80808000200041003b018e02200041e0006a20002802a001200041e8016a41042000418e026a410210b480808000" + "417141bd9fc08000413010bb80808000200041003b018e02200041e0006a20002802a0012000418e026a410210ba80" + "808000417141ed9fc08000412410bb80808000200041003b018e02200041e0006a20002802a001200041e8016a4104" + "2000418e026a410210b58080800041714191a0c08000412310bb80808000200041003b018e02200041e0006a200028" + "02a001200041e8016a41042000418e026a410210b680808000417141b4a0c08000412210bb80808000200041003b01" + "8e02200041e0006a20002802a00141f189c0800041202000418e026a4102109880808000417141d6a0c08000411d10" + "bb8080800041e782c08000410d200041e0006a20002802a001109e80808000417141918ac08000412310bb80808000" + "41e796abdd03410d41f189c0800041204100108080808000417341b48ac08000411010bb8080800041e796abdd0341" + "0d200041e0016a410810a680808000417341c48ac08000411d10bb8080800041e796abdd03410d2000412c6a411410" + "9e80808000417341e18ac08000411810bb8080800041e796abdd03410d419583c080004108109f80808000417341f9" + "8ac08000411710bb80808000200041e0006a20002802a001200041e0006a4181084100108080808000417441908bc0" + "8000410e10bb80808000200041e0006a41810842011081808080004174419e8bc08000411210bb8080800041e782c0" + "8000418108200041e0016a410810a680808000417441b08bc08000411b10bb8080800041e782c08000418108200041" + "2c6a4114109e80808000417441cb8bc08000411610bb8080800041e782c08000418108419583c080004108109f8080" + "8000417441e18bc08000411510bb8080800041e782c08000410d200041e0006a20002802a001109f80808000417141" + "f68bc08000411910bb80808000200041003b018e02200041e0006a20002802a0012000412c6a41142000418e026a41" + "0210a580808000417141f3a0c08000412110bb8080800041e782c08000410d200041e0006a20002802a00141021080" + "808080004171418f8cc08000411410bb80808000410141002000412c6a4114109e80808000410041a38cc08000411a" + "10bb8080800020004190026a24808080800041010f0b418080c08000410b2004417f2004417f481bac108180808000" + "1a10bc80808000000b418080c08000410b2001417f2001417f481bac1081808080001a10bc80808000000b0bb22101" + "00418080c0000ba8216572726f725f636f64653d54455354204641494c45442424242424205354415254494e472057" + "41534d20455845435554494f4e202424242424746573745f616d656e646d656e74616d656e646d656e745f656e6162" + "6c656463616368655f6c65646765725f6f626a6765745f74785f61727261795f6c656e6765745f63757272656e745f" + "6c65646765725f6f626a5f61727261795f6c656e6765745f6c65646765725f6f626a5f61727261795f6c656e676574" + "5f74785f6e65737465645f61727261795f6c656e6765745f63757272656e745f6c65646765725f6f626a5f6e657374" + "65645f61727261795f6c656e6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e75706461" + "74655f6461746174657374206d65737361676574657374207075626b657974657374207369676e6174757265636865" + "636b5f7369676765745f6e66745f666c6167736765745f6e66745f7472616e736665725f66656574657374696e6720" + "747261636574726163655f6163636f756e74400000000000005f74726163655f616d6f756e74400000000000000074" + "726163655f616d6f756e745f7a65726f6765745f706172656e745f6c65646765725f686173685f6e65675f70747267" + "65745f74785f61727261795f6c656e5f696e76616c69645f736669656c646765745f74785f6e65737465645f617272" + "61795f6c656e5f6e65675f7074726765745f74785f6e65737465645f61727261795f6c656e5f6e65675f6c656e6765" + "745f74785f6e65737465645f61727261795f6c656e5f746f6f5f6c6f6e676765745f74785f6e65737465645f617272" + "61795f6c656e5f7074725f6f6f6263616368655f6c65646765725f6f626a5f7074725f6f6f6263616368655f6c6564" + "6765725f6f626a5f77726f6e675f6c656e555344303030303030303030303030303030303000000000000000000000" + "00000000000000000000000000000000000000000000000000000000000074726163655f6e756d5f6f6f625f737472" + "6765745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e5f696e76616c69645f736669656c64" + "6765745f6c65646765725f6f626a5f61727261795f6c656e5f696e76616c69645f736669656c64616d656e646d656e" + "745f656e61626c65645f746f6f5f6269675f736c696365616d656e646d656e745f656e61626c65645f746f6f5f6c6f" + "6e676765745f74785f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f63757272" + "656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963656765" + "745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c69636575706461" + "74655f646174615f746f6f5f6269675f736c69636574726163655f6f6f625f736c69636574726163655f6f70617175" + "655f666c6f61745f6f6f625f736c69636574726163655f616d6f756e745f6f6f625f736c696365666c6f61745f636f" + "6d706172655f6f6f625f736c69636531666c6f61745f636f6d706172655f6f6f625f736c6963653263616368655f6c" + "65646765725f6f626a5f77726f6e675f73697a655f75696e743235366765745f6e66745f666c6167735f77726f6e67" + "5f73697a655f75696e743235366765745f6e66745f7472616e736665725f6665655f77726f6e675f73697a655f7569" + "6e74323536303030303030303030303030303030303030303030303030303030303030303174726163655f6163636f" + "756e745f77726f6e675f73697a655f6163636f756e745f696474726163655f6f6f625f737472696e6774726163655f" + "6f70617175655f666c6f61745f6f6f625f737472696e6774726163655f6163636f756e745f6f6f625f737472696e67" + "74726163655f616d6f756e745f6f6f625f737472696e6774726163655f746f6f5f6c6f6e6774726163655f6e756d5f" + "746f6f5f6c6f6e6774726163655f6f70617175655f666c6f61745f746f6f5f6c6f6e6774726163655f6163636f756e" + "745f746f6f5f6c6f6e6774726163655f616d6f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f77726f" + "6e675f6c656e67746874726163655f696e76616c69645f61735f68657874726163655f6163636f756e745f63686563" + "6b5f646573796e636765745f6c65646765725f73716e6765745f706172656e745f6c65646765725f74696d65676574" + "5f706172656e745f6c65646765725f686173686765745f626173655f6665656765745f63757272656e745f6c656467" + "65725f6f626a5f6669656c646765745f6c65646765725f6f626a5f6669656c646765745f74785f6e65737465645f66" + "69656c646765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c646765745f6c656467" + "65725f6f626a5f6e65737465645f6669656c64636f6d707574655f7368613531325f68616c666765745f6e66746765" + "745f6e66745f6973737565726765745f6e66745f7461786f6e6765745f6e66745f73657269616c6765745f70617265" + "6e745f6c65646765725f686173685f6e65675f6c656e6765745f706172656e745f6c65646765725f686173685f6275" + "665f746f6f5f736d616c6c6765745f706172656e745f6c65646765725f686173685f6c656e5f746f6f5f6c6f6e6763" + "6865636b5f6b65796c65745f6f6f625f6c656e5f753332636865636b5f6b65796c65745f77726f6e675f6c656e5f75" + "3332666c6f61745f66726f6d5f75696e745f6c656e5f6f6f62666c6f61745f66726f6d5f75696e745f77726f6e675f" + "6c656e5f75696e7436346163636f756e745f6b65796c65745f6c656e5f6f6f626163636f756e745f6b65796c65745f" + "77726f6e675f6c656e6c696e655f6b65796c65745f6c656e5f6f6f625f63757272656e63796c696e655f6b65796c65" + "745f77726f6e675f6c656e5f63757272656e6379616d6d5f6b65796c65745f6c656e5f6f6f625f617373657432616d" + "6d5f6b65796c65745f6c656e5f77726f6e675f6c656e5f617373657432616d6d5f6b65796c65745f6c656e5f77726f" + "6e675f6e6f6e5f7872705f63757272656e63795f6c656e616d6d5f6b65796c65745f6c656e5f77726f6e675f787270" + "5f63757272656e63795f6c656e616d6d5f6b65796c65745f6d70746765745f74785f6669656c645f696e76616c6964" + "5f736669656c646765745f63757272656e745f6c65646765725f6f626a5f6669656c645f696e76616c69645f736669" + "656c646765745f6c65646765725f6f626a5f6669656c645f696e76616c69645f736669656c646765745f74785f6e65" + "737465645f6669656c645f746f6f5f6269675f736c6963656765745f63757272656e745f6c65646765725f6f626a5f" + "6e65737465645f6669656c645f746f6f5f6269675f736c6963656765745f6c65646765725f6f626a5f6e6573746564" + "5f6669656c645f746f6f5f6269675f736c696365636f6d707574655f7368613531325f68616c665f746f6f5f626967" + "5f736c696365616d6d5f6b65796c65745f746f6f5f6269675f736c69636563726564656e7469616c5f6b65796c6574" + "5f746f6f5f6269675f736c6963656d70746f6b656e5f6b65796c65745f746f6f5f6269675f736c6963655f6d707469" + "64666c6f61745f6164645f6f6f625f736c69636531666c6f61745f6164645f6f6f625f736c69636532666c6f61745f" + "73756274726163745f6f6f625f736c69636531666c6f61745f73756274726163745f6f6f625f736c69636532666c6f" + "61745f6d756c7469706c795f6f6f625f736c69636531666c6f61745f6d756c7469706c795f6f6f625f736c69636532" + "666c6f61745f6469766964655f6f6f625f736c69636531666c6f61745f6469766964655f6f6f625f736c6963653266" + "6c6f61745f726f6f745f6f6f625f736c696365666c6f61745f706f775f6f6f625f736c696365657363726f775f6b65" + "796c65745f77726f6e675f73697a655f75696e7433326d70745f69737375616e63655f6b65796c65745f77726f6e67" + "5f73697a655f75696e7433326e66745f6f666665725f6b65796c65745f77726f6e675f73697a655f75696e7433326f" + "666665725f6b65796c65745f77726f6e675f73697a655f75696e7433326f7261636c655f6b65796c65745f77726f6e" + "675f73697a655f75696e7433327061796368616e5f6b65796c65745f77726f6e675f73697a655f75696e7433327065" + "726d697373696f6e65645f646f6d61696e5f6b65796c65745f77726f6e675f73697a655f75696e7433327469636b65" + "745f6b65796c65745f77726f6e675f73697a655f75696e7433327661756c745f6b65796c65745f77726f6e675f7369" + "7a655f75696e7433326765745f6e66745f77726f6e675f73697a655f75696e743235366765745f6e66745f69737375" + "65725f77726f6e675f73697a655f75696e743235366765745f6e66745f7461786f6e5f77726f6e675f73697a655f75" + "696e743235366765745f6e66745f73657269616c5f77726f6e675f73697a655f75696e743235366163636f756e745f" + "6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964636865636b5f6b65796c65745f77726f6e675f" + "73697a655f6163636f756e745f696463726564656e7469616c5f6b65796c65745f77726f6e675f73697a655f616363" + "6f756e745f69643163726564656e7469616c5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964" + "3264656c65676174655f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69643164656c6567617465" + "5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964326465706f7369745f707265617574685f6b" + "65796c65745f77726f6e675f73697a655f6163636f756e745f6964316465706f7369745f707265617574685f6b6579" + "6c65745f77726f6e675f73697a655f6163636f756e745f6964326469645f6b65796c65745f77726f6e675f73697a65" + "5f6163636f756e745f6964657363726f775f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69646c" + "696e655f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964316c696e655f6b65796c65745f7772" + "6f6e675f73697a655f6163636f756e745f6964326d70745f69737375616e63655f6b65796c65745f77726f6e675f73" + "697a655f6163636f756e745f69646d70746f6b656e5f6b65796c65745f77726f6e675f73697a655f6163636f756e74" + "5f69646e66745f6f666665725f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69646f666665725f" + "6b65796c65745f77726f6e675f73697a655f6163636f756e745f69646f7261636c655f6b65796c65745f77726f6e67" + "5f73697a655f6163636f756e745f69647061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f75" + "6e745f6964317061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964327065726d" + "697373696f6e65645f646f6d61696e5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964736967" + "6e6572735f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69647469636b65745f6b65796c65745f" + "77726f6e675f73697a655f6163636f756e745f69647661756c745f6b65796c65745f77726f6e675f73697a655f6163" + "636f756e745f69646765745f6e66745f77726f6e675f73697a655f6163636f756e745f69646d70746f6b656e5f6b65" + "796c65745f6d707469645f77726f6e675f6c656e677468000000000000000000000000000000000000000000ea2a04" + "6e616d65001312636f6465636f765f74657374732e7761736d01ad2a3e004c5f5a4e31367872706c5f7761736d5f73" + "74646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e7335747261636531376834623431" + "6663626133633836323862394501505f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f7374" + "5f646566696e65645f66756e6374696f6e733974726163655f6e756d31376836346562613963306665666435626361" + "4502565f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e" + "6374696f6e7331346765745f6c65646765725f73716e3137686633313635393261626131346636336345035e5f5a4e" + "31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e73" + "32326765745f706172656e745f6c65646765725f74696d653137686662373635613064613335336631323445045e5f" + "5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f" + "6e7332326765745f706172656e745f6c65646765725f68617368313768656335313634326538353530626434354505" + "545f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374" + "696f6e7331326765745f626173655f666565313768386466356664653831663063326161614506595f5a4e31367872" + "706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e733137616d" + "656e646d656e745f656e61626c6564313768363461346434383031333165333235354507545f5a4e31367872706c5f" + "7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e7331326765745f74" + "785f6669656c64313768373037373835623434663266363639304508565f5a4e31367872706c5f7761736d5f737464" + "6c696234686f73743232686f73745f646566696e65645f66756e6374696f6e7331346163636f756e745f6b65796c65" + "74313768616538373566373066646637336635354509585f5a4e31367872706c5f7761736d5f7374646c696234686f" + "73743232686f73745f646566696e65645f66756e6374696f6e73313663616368655f6c65646765725f6f626a313768" + "65313634313265303433666362643861450a645f5a4e31367872706c5f7761736d5f7374646c696234686f73743232" + "686f73745f646566696e65645f66756e6374696f6e7332386765745f63757272656e745f6c65646765725f6f626a5f" + "6669656c6431376833636338656464626163373139323234450b5c5f5a4e31367872706c5f7761736d5f7374646c69" + "6234686f73743232686f73745f646566696e65645f66756e6374696f6e7332306765745f6c65646765725f6f626a5f" + "6669656c6431376830626137333839346464356334633338450c5b5f5a4e31367872706c5f7761736d5f7374646c69" + "6234686f73743232686f73745f646566696e65645f66756e6374696f6e7331396765745f74785f6e65737465645f66" + "69656c6431376864353730336462646161303438633238450d6b5f5a4e31367872706c5f7761736d5f7374646c6962" + "34686f73743232686f73745f646566696e65645f66756e6374696f6e7333356765745f63757272656e745f6c656467" + "65725f6f626a5f6e65737465645f6669656c6431376864336565353939316537306235386130450e635f5a4e313678" + "72706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e73323767" + "65745f6c65646765725f6f626a5f6e65737465645f6669656c6431376837363831323438326638333433326235450f" + "585f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374" + "696f6e7331366765745f74785f61727261795f6c656e313768663061333731366132373864633663614510685f5a4e" + "31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e73" + "33326765745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e31376863396662303730623337" + "6461323866314511605f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e" + "65645f66756e6374696f6e7332346765745f6c65646765725f6f626a5f61727261795f6c656e313768383061616437" + "6664343136616664636545125f5f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f64" + "6566696e65645f66756e6374696f6e7332336765745f74785f6e65737465645f61727261795f6c656e313768353234" + "6130613261303566656465376545136f5f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73" + "745f646566696e65645f66756e6374696f6e7333396765745f63757272656e745f6c65646765725f6f626a5f6e6573" + "7465645f61727261795f6c656e313768353139623331663261303939353035644514675f5a4e31367872706c5f7761" + "736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e7333316765745f6c6564" + "6765725f6f626a5f6e65737465645f61727261795f6c656e313768316633646533393861653331306533394515535f" + "5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f" + "6e7331317570646174655f646174613137683662383232316465393861626630393745165b5f5a4e31367872706c5f" + "7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e733139636f6d7075" + "74655f7368613531325f68616c66313768303565356531613863653833646338364517505f5a4e31367872706c5f77" + "61736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e7339636865636b5f73" + "69673137686532323034393665326136363839373945184e5f5a4e31367872706c5f7761736d5f7374646c69623468" + "6f73743232686f73745f646566696e65645f66756e6374696f6e73376765745f6e6674313768643131643234633637" + "393530306236354519565f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f64656669" + "6e65645f66756e6374696f6e7331346765745f6e66745f697373756572313768316137353534643533316537636564" + "65451a555f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f6675" + "6e6374696f6e7331336765745f6e66745f7461786f6e31376830636664373337653333393261616434451b555f5a4e" + "31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e73" + "31336765745f6e66745f666c61677331376863336437633739326262303834353636451c5c5f5a4e31367872706c5f" + "7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e7332306765745f6e" + "66745f7472616e736665725f66656531376834343230383233633838623738666630451d565f5a4e31367872706c5f" + "7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e7331346765745f6e" + "66745f73657269616c31376834326337303332393835666339343130451e555f5a4e31367872706c5f7761736d5f73" + "74646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e73313374726163655f6163636f75" + "6e7431376831393931636463666337663234366131451f545f5a4e31367872706c5f7761736d5f7374646c69623468" + "6f73743232686f73745f646566696e65645f66756e6374696f6e73313274726163655f616d6f756e74313768313231" + "643430646438643439623064344520545f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73" + "745f646566696e65645f66756e6374696f6e733132636865636b5f6b65796c65743137686135376564303837636165" + "39393136384521575f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65" + "645f66756e6374696f6e733135666c6f61745f66726f6d5f75696e7431376866363961343162303366323839346262" + "4522485f5a4e3133636f6465636f765f74657374733139686f73745f62696e64696e67735f6c6f6f736531316c696e" + "655f6b65796c6574313768336166313834353162626362653062384523525f5a4e31367872706c5f7761736d5f7374" + "646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e733130616d6d5f6b65796c65743137" + "68353565333961626264346262323336324524595f5a4e31367872706c5f7761736d5f7374646c696234686f737432" + "32686f73745f646566696e65645f66756e6374696f6e73313763726564656e7469616c5f6b65796c65743137686365" + "61323561633261373035393863664525565f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f" + "73745f646566696e65645f66756e6374696f6e7331346d70746f6b656e5f6b65796c65743137686231363964636462" + "623234623033663445265a5f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566" + "696e65645f66756e6374696f6e73313874726163655f6f70617175655f666c6f617431376839313533356463633336" + "3764323938334527555f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e" + "65645f66756e6374696f6e733133666c6f61745f636f6d706172653137683134653662643136643762313235373745" + "28505f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e63" + "74696f6e7339666c6f61745f616464313768316162653839663139373139373431644529565f5a4e31367872706c5f" + "7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e733134666c6f6174" + "5f737562747261637431376830316661353561663438653963663837452a565f5a4e31367872706c5f7761736d5f73" + "74646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e733134666c6f61745f6d756c7469" + "706c7931376836633665366239643935636234643561452b545f5a4e31367872706c5f7761736d5f7374646c696234" + "686f73743232686f73745f646566696e65645f66756e6374696f6e733132666c6f61745f6469766964653137686132" + "3932613963396261323535623238452c525f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f" + "73745f646566696e65645f66756e6374696f6e733130666c6f61745f726f6f74313768393330313037316165376337" + "33393261452d505f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e6564" + "5f66756e6374696f6e7339666c6f61745f706f7731376830326133343235636131653666656531452e555f5a4e3136" + "7872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e733133" + "657363726f775f6b65796c657431376830326161316365326263346330373539452f5b5f5a4e31367872706c5f7761" + "736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e7331396d70745f697373" + "75616e63655f6b65796c6574313768666539386161613762313632343765314530585f5a4e31367872706c5f776173" + "6d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e7331366e66745f6f666665" + "725f6b65796c6574313768353930313839656564373166613435364531545f5a4e31367872706c5f7761736d5f7374" + "646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e7331326f666665725f6b65796c6574" + "313768353830376537393161346361613163634532555f5a4e31367872706c5f7761736d5f7374646c696234686f73" + "743232686f73745f646566696e65645f66756e6374696f6e7331336f7261636c655f6b65796c657431376866343831" + "3166343862643266326530344533565f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f7374" + "5f646566696e65645f66756e6374696f6e7331347061796368616e5f6b65796c657431376837386265393931643265" + "3436613339634534625f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e" + "65645f66756e6374696f6e7332367065726d697373696f6e65645f646f6d61696e5f6b65796c657431376837663334" + "3362646335656663326630624535555f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f7374" + "5f646566696e65645f66756e6374696f6e7331337469636b65745f6b65796c65743137686435666532636466326537" + "33393962374536545f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65" + "645f66756e6374696f6e7331327661756c745f6b65796c657431376830386639346132656161383335373835453757" + "5f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e637469" + "6f6e73313564656c65676174655f6b65796c65743137686162396339646561393364663265636245385e5f5a4e3136" + "7872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e733232" + "6465706f7369745f707265617574685f6b65796c6574313768313962303532623237653238313139384539525f5a4e" + "31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e73" + "31306469645f6b65796c657431376838323331376636646338353661383533453a565f5a4e31367872706c5f776173" + "6d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e7331347369676e6572735f" + "6b65796c657431376833626636666236363561643432333563453b345f5a4e3133636f6465636f765f746573747331" + "32636865636b5f726573756c7431376830613536316462313034376266626561453c305f5a4e34636f72653970616e" + "69636b696e673970616e69635f666d7431376864333035326133363632643530633935453d0666696e697368071201" + "000f5f5f737461636b5f706f696e746572090a0100072e726f64617461004d0970726f64756365727302086c616e67" + "75616765010452757374000c70726f6365737365642d6279010572757374631d312e38392e30202832393438333838" + "336520323032352d30382d3034290094010f7461726765745f6665617475726573082b0b62756c6b2d6d656d6f7279" + "2b0f62756c6b2d6d656d6f72792d6f70742b1663616c6c2d696e6469726563742d6f7665726c6f6e672b0a6d756c74" + "6976616c75652b0f6d757461626c652d676c6f62616c732b136e6f6e7472617070696e672d6670746f696e742b0f72" + "65666572656e63652d74797065732b087369676e2d657874"; extern std::string const floatTestsWasmHex = - "0061736d01000000014f0a60057f7f7f7f7f017f60077f7f7f7f7f7f7f017f60047f7f7f7f017f60067f7f7f7f7f7f" - "017f60047e7f7f7f017f60057f7e7f7f7f017f60037f7f7e017f60037f7f7f006000017f60027f7f017f02ba031308" - "686f73745f6c6962057472616365000008686f73745f6c69620e666c6f61745f66726f6d5f696e74000408686f7374" - "5f6c69620f666c6f61745f66726f6d5f75696e74000008686f73745f6c696209666c6f61745f736574000508686f73" - "745f6c69620d666c6f61745f636f6d70617265000208686f73745f6c696209666c6f61745f616464000108686f7374" - "5f6c69620e666c6f61745f7375627472616374000108686f73745f6c69620e666c6f61745f6d756c7469706c790001" - "08686f73745f6c69620c666c6f61745f646976696465000108686f73745f6c696209666c6f61745f706f7700030868" - "6f73745f6c69620974726163655f6e756d000608686f73745f6c69620a666c6f61745f726f6f74000308686f73745f" - "6c696209666c6f61745f6c6f67000003656e760c666c6f61745f746f5f696e74000003656e761e666c6f61745f746f" - "5f6d616e74697373615f616e645f6578706f6e656e74000303656e760c666c6f61745f6e6567617465000203656e76" - "09666c6f61745f616273000203656e7613666c6f61745f66726f6d5f7374616d6f756e74000003656e7613666c6f61" - "745f66726f6d5f73746e756d626572000003040307080905030100110619037f01418080c0000b7f0041a0a1c0000b" - "7f0041a0a1c0000b072e04066d656d6f727902000666696e69736800140a5f5f646174615f656e6403010b5f5f6865" - "61705f6261736503020ae52c031f002000200141014100410010001a418080c00041022002410c410110001a0bff2b" - "020f7f017e23004180016b22002400418280c000411d41014100410010001a200041f8006a41003602002000420037" - "03700240428ce000200041f0006a2202410c410010012201410c460440419f80c00041172002101341b680c000411e" - "2002410c410110001a0c010b41d480c000411e41014100410010001a0b2000428ce0003703600240200041e0006a41" - "08200041f0006a2202410c41001002410c4604402001410c46210841f280c0004117200210130c010b418981c00041" - "1e41014100410010001a0b0240410242fb00200041f0006a2201410c41001003410c46044041a781c0004121200110" - "130c010b41c881c000412641014100410010001a410021080b41ee81c0004115418382c0001013418f82c000411641" - "a582c000101341b182c000411b41014100410010001a200041f8006a41003602002000420037037002404201200041" - "f0006a2202410c410010012201410c46044041cc82c000410f200210130c010b41db82c00041164101410041001000" - "1a0b027f200041f0006a410c418382c000410c100445044041f182c000411b41014100410010001a2001410c460c01" - "0b418c83c000412341014100410010001a41000b21090240200041f0006a410c41a582c000410c1004410146044041" - "af83c000412341014100410010001a0c010b4100210941d283c000412c41014100410010001a0b024041a582c00041" - "0c200041f0006a410c1004410246044041fe83c000412341014100410010001a0c010b4100210941a184c000412c41" - "014100410010001a0b41cd84c000412041014100410010001a200041e8006a418b82c0002800003602002000418382" - "c000290000370360410921040340200041e0006a2201410c418382c000410c2001410c410010051a200441016b2204" - "0d000b200041f8006a410036020020004200370370420a200041f0006a410c41001001410c46220a45044041ed84c0" - "00411741014100410010001a0b0240200041f0006a410c200041e0006a410c1004450440418485c000411441014100" - "410010001a0c010b4100210a419885c000411641014100410010001a0b410b21040340200041e0006a2201410c4183" - "82c000410c2001410c410010061a200441016b22040d000b02402001410c41a582c000410c100445044041ae85c000" - "411941014100410010001a0c010b4100210a41c785c000411b41014100410010001a0b41e285c00041234101410041" - "0010001a200041c8006a410036020020004200370340420a200041406b410c410010011a200041d8006a418b82c000" - "2800003602002000418382c000290000370350410621040340200041d0006a2201410c200041406b410c2001410c41" - "0010071a200441016b22040d000b200041e8006a41003602002000420037036042c0843d200041e0006a2202410c41" - "0010011a02402002410c2001410c10042201450440418586c000411941014100410010001a0c010b419e86c000411b" - "41014100410010001a0b200145210c410721040340200041d0006a2201410c200041406b410c2001410c410010081a" - "200441016b22040d000b200041f8006a410036020020004200370370417f4201200041f0006a2202410c410010031a" - "02402001410c2002410c100445044041b986c000411741014100410010001a0c010b41d086c0004119410141004100" - "10001a4100210c0b41e986c000411741014100410010001a200041d8006a2202410036020020004200370350418382" - "c000410c4103200041d0006a2204410c410010091a418087c00041122004101341a582c000410c41062004410c4100" - "10091a419287c000411820041013200041e8006a22064100360200200042003703604209200041e0006a2203410c41" - "0010011a2003410c41022004410c410010091a41aa87c0004114200410132003410c41002004410c410010091a41be" - "87c000411720041013200041f8006a22014100360200200042003703704200200041f0006a2205410c410010011a20" - "05410c41022004410c410010091a41d587c00041142004101341e987c00041382005410c41002004410c41001009ac" - "100a1a41a188c000411841014100410010001a200241003602002000420037035042092004410c410010011a200641" - "00360200200042003703602004410c41022003410c4100100b1a41b988c0004112200310132004410c41032003410c" - "4100100b1a41cb88c000411220031013200141003602002000420037037042c0843d2005410c410010011a2005410c" - "41032003410c4100100b1a41dd88c0004118200310132005410c41062003410c4100100b1a41f588c000411c200310" - "13419189c000411741014100410010001a200641003602002000420037036042c0843d2003410c410010011a200141" - "00360200200042003703702003410c2005410c4100100c1a41a889c00041142005101341bc89c000411a4101410041" - "0010001a2001410036020020004200370370418382c000410c41a582c000410c2005410c410010071a024041a582c0" - "00410c2005410c1004220145044041d689c000411641014100410010001a0c010b41ec89c000411841014100410010" - "001a0b41a582c000410c41a582c000410c200041f0006a2202410c410010071a0240418382c000410c2002410c1004" - "450440200145210d41848ac000411741014100410010001a0c010b419b8ac000411941014100410010001a0b41b48a" - "c000411a41014100410010001a200041e8006a410036020020004200370360200041f8006a41003602002000420037" - "0370420a200041f0006a2202410c410010011a418382c000410c2002410c200041e0006a2201410c410010081a41ce" - "8ac000411920011013418382c000410c2001410c2001410c410010081a41e78ac000410f2001101302402002410c20" - "01410c1004220e45044041f68ac000411441014100410010001a0c010b418a8bc000411641014100410010001a0b41" - "00210141a08bc000411a41014100410010001a200042003703400240418382c000410c200041406b41084100100d22" - "0641084604402000290340220f42015104404101210141ba8bc000411741014100410010001a0c020b41d18bc00041" - "1941014100410010001a41ea8bc0004108200f100a1a0c010b41f28bc000412441014100410010001a41968cc00041" - "0f2006ac100a1a0b41002104024041a582c000410c200041406b41084100100d220641084604402000290340220f42" - "7f51044041a58cc000411841014100410010001a200121040c020b41bd8cc000411a41014100410010001a41ea8bc0" - "004108200f100a1a0c010b41d78cc000412541014100410010001a41968cc000410f2006ac100a1a0b410021012000" - "41d8006a41003602002000420037035042ffffffffffffffffff00200041d0006a2202410c410010011a0240200241" - "0c200041406b41084100100d220641084604402000290340220f42ffffffffffffffffff0051044041fc8cc000411e" - "41014100410010001a200421010c020b419a8dc000412041014100410010001a41ba8dc000410d42ffffffffffffff" - "ffff00100a1a41ea8bc0004108200f100a1a0c010b41c78dc000412b41014100410010001a41968cc000410f2006ac" - "100a1a0b41002106200041e8006a4100360200200042003703604200200041e0006a2202410c410010011a02402002" - "410c200041406b41084100100d220241084604402000290340220f50044041f28dc000411741014100410010001a20" - "0121060c020b41898ec000411941014100410010001a41ea8bc0004108200f100a1a0c010b41a28ec0004124410141" - "00410010001a41968cc000410f2002ac100a1a0b41002104200041f8006a410036020020004200370370417f420120" - "0041f0006a2201410c410010031a02402001410c200041406b41084100100d220141084604402000290340220f5004" - "4041c68ec000412541014100410010001a200621040c020b41eb8ec000412741014100410010001a41ea8bc0004108" - "200f100a1a0c010b41928fc000413241014100410010001a41968cc000410f2001ac100a1a0b0240200041f0006a41" - "0c200041406b41084101100d220141084604402000290340220f50044041c48fc000412741014100410010001a0c02" - "0b4100210441eb8fc000412941014100410010001a41ea8bc0004108200f100a1a0c010b41002104419490c0004134" - "41014100410010001a41968cc000410f2001ac100a1a0b4100210141c890c000412c41014100410010001a20004200" - "370320200041003602040240418382c000410c200041206a4108200041046a4104100e2206410c4604402000280204" - "2206416e462000290320220f42808090bbbad6adf00d5171450440419d91c000412b41014100410010001a41c891c0" - "00412f200f100a1a41f791c000411f2006ac100a1a0c020b4101210141f490c000412941014100410010001a0c010b" - "419692c000413641014100410010001a41968cc000410f2006ac100a1a0b2000420037033041002106200041003602" - "08024041a582c000410c200041306a4108200041086a4104100e2202410c46044020002802082202416e4620002903" - "30220f428080f0c4c5a9d28f72517145044041f692c000412c41014100410010001a41a293c0004130200f100a1a41" - "f791c000411f2002ac100a1a0c020b41cc92c000412a41014100410010001a200121060c010b41d293c00041374101" - "4100410010001a41968cc000410f2002ac100a1a0b41002101200041e8006a410036020020004200370360420a2000" - "41e0006a2202410c410010011a200042003703402000410036020c02402002410c200041406b41082000410c6a4104" - "100e2202410c460440200028020c2202416f462000290340220f42808090bbbad6adf00d517145044041b394c00041" - "2c41014100410010001a41c891c000412f200f100a1a41df94c000411f2002ac100a1a0c020b418994c000412a4101" - "4100410010001a200621010c010b41fe94c000413741014100410010001a41968cc000410f2002ac100a1a0b410021" - "06200041f8006a4100360200200042003703704200200041f0006a2202410c410010011a2000420037035020004100" - "36021002402002410c200041d0006a4108200041106a4104100e2202410c4604402000290350220f50200028021022" - "02418080808078467145044041de95c000412b41014100410010001a418996c000411d200f100a1a41a696c0004127" - "2002ac100a1a0c020b41b595c000412941014100410010001a200121060c010b41cd96c00041364101410041001000" - "1a41968cc000410f2002ac100a1a0b4100210141bc89c000411a41014100410010001a200041c8006a410036020020" - "0042003703400240418382c000410c200041406b2203410c100f2202410c460440200341a582c00010150440418397" - "c000412b41014100410010001a0c020b4101210141ae97c000411741014100410010001a0c010b41c597c000412441" - "014100410010001a41968cc000410f2002ac100a1a0b41002102200041d8006a410036020020004200370350024041" - "a582c000410c200041d0006a2205410c100f2203410c4604402005418382c0001015044041e997c000412c41014100" - "410010001a0c020b419598c000411841014100410010001a200121020c010b41ad98c000412541014100410010001a" - "41968cc000410f2003ac100a1a0b200041e8006a4100360200200042003703604200200041e0006a2203410c410010" - "011a200041f8006a41003602002000420037037002402003410c200041f0006a2205410c100f2201410c4604402005" - "20031015044041d298c000412b41014100410010001a0c020b41fd98c000411741014100410010001a2002210b0c01" - "0b419499c000412441014100410010001a41968cc000410f2001ac100a1a0b4100210141b899c00041174101410041" - "0010001a200041186a4100360200200042003703100240418382c000410c200041106a2203410c10102202410c4604" - "402003418382c0001015044041cf99c000412841014100410010001a0c020b4101210141f799c00041144101410041" - "0010001a0c010b418b9ac000412141014100410010001a41968cc000410f2002ac100a1a0b41002102200041286a41" - "0036020020004200370320024041a582c000410c200041206a2205410c10102203410c4604402005418382c0001015" - "044041ac9ac000412941014100410010001a0c020b41d59ac000411541014100410010001a200121020c010b41ea9a" - "c000412241014100410010001a41968cc000410f2003ac100a1a0b41002101200041386a4100360200200042003703" - "304200200041306a2205410c410010011a200041c8006a41003602002000420037034002402005410c200041406b22" - "07410c10102203410c4604402007200510150440418c9bc000412841014100410010001a0c020b41b49bc000411441" - "014100410010001a200221010c010b41c89bc000412141014100410010001a41968cc000410f2003ac100a1a0b4100" - "2102200041d8006a4100360200200042003703504276200041d0006a2203410c410010011a200041e8006a41003602" - "0020004200370360420a200041e0006a2205410c410010011a200041f8006a41003602002000420037037002402003" - "410c200041f0006a2207410c10102203410c460440200720051015044041e99bc000412a41014100410010001a0c02" - "0b41939cc000411641014100410010001a200121020c010b41a99cc000412341014100410010001a41968cc000410f" - "2003ac100a1a0b4100210141cc9cc000412141014100410010001a200042c0808080d0a0fdf000370050200041f800" - "6a41003602002000420037037002400240200041d0006a4108200041f0006a2205410c410010112203410c46044041" - "ed9cc000412220051013200042003703602005410c200041e0006a41084100100d22034108470d012000290360220f" - "4280c2d72f51044041012101418f9dc000411d41014100410010001a0c030b41ac9dc000411f41014100410010001a" - "41cb9dc000411c200f100a1a0c020b419b9ec000411f41014100410010001a41ba9ec00041102003ac100a1a0c010b" - "41e79dc000413441014100410010001a41968cc000410f2003ac100a1a0b4100210341ca9ec0004121410141004100" - "10001a200041ffffff8f7f36006820004281eceedce494ccf9c000370060200041f8006a4100360200200042003703" - "7002400240200041e0006a410c200041f0006a2207410c410010122205410c46044041eb9ec000411c200710132000" - "42003703502007410c200041d0006a41084100100d22054108470d012000290350220f42fb00510440410121034187" - "9fc000411b41014100410010001a0c030b41a29fc000411d41014100410010001a41bf9fc0004116200f100a1a0c02" - "0b4187a0c000411d41014100410010001a41ba9ec00041102005ac100a1a0c010b41d59fc000413241014100410010" - "001a41968cc000410f2005ac100a1a0b410021050240418382c000410c200041f0006a2207410c41001012410c4604" - "4041a4a0c000411a200710132007410c418382c000410c100445044041bea0c000412041014100410010001a200321" - "050c020b41dea0c000412241014100410010001a0c010b4180a1c000412041014100410010001a0b20004180016a24" - "00200e452008200971200a71200c71200d71200471200671200b71200271200171200571710b4201047f410c210202" - "40034020002d0000220320012d00002204460440200041016a2100200141016a2101200241016b22020d010c020b0b" - "200320046b21050b20050b0baa210100418080c0000ba02120200a24242420746573745f666c6f61745f66726f6d5f" - "7761736d202424242020666c6f61742066726f6d206936342031323330303a2020666c6f61742066726f6d20693634" - "203132333030206173204845583a2020666c6f61742066726f6d206936342031323330303a206661696c6564202066" - "6c6f61742066726f6d207536342031323330303a2020666c6f61742066726f6d207536342031323330303a20666169" - "6c65642020666c6f61742066726f6d2065787020322c206d616e7469737361203132333a2020666c6f61742066726f" - "6d2065787020322c206d616e746973736120333a206661696c65642020666c6f61742066726f6d20636f6e73742031" - "3a0de0b6b3a7640000ffffffee2020666c6f61742066726f6d20636f6e7374202d313af21f494c589c0000ffffffee" - "0a24242420746573745f666c6f61745f636f6d70617265202424242020666c6f61742066726f6d20313a2020666c6f" - "61742066726f6d20313a206661696c65642020666c6f61742066726f6d2031203d3d20464c4f41545f4f4e45202066" - "6c6f61742066726f6d203120213d20464c4f41545f4f4e452c206661696c65642020666c6f61742066726f6d203120" - "3e20464c4f41545f4e454741544956455f4f4e452020666c6f61742066726f6d203120213e20464c4f41545f4e4547" - "41544956455f4f4e452c206661696c65642020464c4f41545f4e454741544956455f4f4e45203c20666c6f61742066" - "726f6d20312020464c4f41545f4e454741544956455f4f4e4520213c20666c6f61742066726f6d20312c206661696c" - "65640a24242420746573745f666c6f61745f6164645f7375627472616374202424242020666c6f61742066726f6d20" - "31303a206661696c656420207265706561746564206164643a20676f6f6420207265706561746564206164643a2066" - "61696c6564202072657065617465642073756274726163743a20676f6f642020726570656174656420737562747261" - "63743a206661696c65640a24242420746573745f666c6f61745f6d756c7469706c795f646976696465202424242020" - "7265706561746564206d756c7469706c793a20676f6f6420207265706561746564206d756c7469706c793a20666169" - "6c656420207265706561746564206469766964653a20676f6f6420207265706561746564206469766964653a206661" - "696c65640a24242420746573745f666c6f61745f706f77202424242020666c6f61742063756265206f6620313a2020" - "666c6f61742036746820706f776572206f66202d313a2020666c6f617420737175617265206f6620393a2020666c6f" - "61742030746820706f776572206f6620393a2020666c6f617420737175617265206f6620303a2020666c6f61742030" - "746820706f776572206f6620302028657870656374696e6720494e56414c49445f504152414d53206572726f72293a" - "0a24242420746573745f666c6f61745f726f6f74202424242020666c6f61742073717274206f6620393a2020666c6f" - "61742063627274206f6620393a2020666c6f61742063627274206f6620313030303030303a2020666c6f6174203674" - "6820726f6f74206f6620313030303030303a0a24242420746573745f666c6f61745f6c6f672024242420206c6f675f" - "3130206f6620313030303030303a0a24242420746573745f666c6f61745f6e65676174652024242420206e65676174" - "6520636f6e737420313a20676f6f6420206e656761746520636f6e737420313a206661696c656420206e6567617465" - "20636f6e7374202d313a20676f6f6420206e656761746520636f6e7374202d313a206661696c65640a242424207465" - "73745f666c6f61745f696e76657274202424242020696e76657274206120666c6f61742066726f6d2031303a202069" - "6e7665727420616761696e3a2020696e766572742074776963653a20676f6f642020696e766572742074776963653a" - "206661696c65640a24242420746573745f666c6f61745f746f5f696e74202424242020666c6f61745f746f5f696e74" - "2831293a20676f6f642020666c6f61745f746f5f696e742831293a206661696c656420202020676f743a2020666c6f" - "61745f746f5f696e742831293a206661696c65642077697468206572726f72202020206572726f7220636f64653a20" - "20666c6f61745f746f5f696e74282d31293a20676f6f642020666c6f61745f746f5f696e74282d31293a206661696c" - "65642020666c6f61745f746f5f696e74282d31293a206661696c65642077697468206572726f722020666c6f61745f" - "746f5f696e74286936343a3a4d4158293a20676f6f642020666c6f61745f746f5f696e74286936343a3a4d4158293a" - "206661696c65642020202065787065637465643a2020666c6f61745f746f5f696e74286936343a3a4d4158293a2066" - "61696c65642077697468206572726f722020666c6f61745f746f5f696e742830293a20676f6f642020666c6f61745f" - "746f5f696e742830293a206661696c65642020666c6f61745f746f5f696e742830293a206661696c65642077697468" - "206572726f722020666c6f61745f746f5f696e7428302e312c20746f5f6e656172657374293a20676f6f642020666c" - "6f61745f746f5f696e7428302e312c20746f5f6e656172657374293a206661696c65642020666c6f61745f746f5f69" - "6e7428302e312c20746f5f6e656172657374293a206661696c65642077697468206572726f722020666c6f61745f74" - "6f5f696e7428302e312c20746f77617264735f7a65726f293a20676f6f642020666c6f61745f746f5f696e7428302e" - "312c20746f77617264735f7a65726f293a206661696c65642020666c6f61745f746f5f696e7428302e312c20746f77" - "617264735f7a65726f293a206661696c65642077697468206572726f720a24242420746573745f666c6f61745f746f" - "5f6d616e74697373615f616e645f6578706f6e656e74202424242020666c6f61745f746f5f6d616e74697373615f61" - "6e645f6578706f6e656e742831293a20676f6f642020666c6f61745f746f5f6d616e74697373615f616e645f657870" - "6f6e656e742831293a206661696c6564202020206578706563746564206d616e746973736120313030303030303030" - "303030303030303030302c20676f743a202020206578706563746564206578706f6e656e74202d31382c20676f743a" - "2020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e742831293a206661696c656420776974" - "68206572726f722020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e74282d31293a20676f" - "6f642020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e74282d31293a206661696c656420" - "2020206578706563746564206d616e7469737361202d313030303030303030303030303030303030302c20676f743a" - "2020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e74282d31293a206661696c6564207769" - "7468206572726f722020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e74283130293a2067" - "6f6f642020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e74283130293a206661696c6564" - "202020206578706563746564206578706f6e656e74202d31372c20676f743a2020666c6f61745f746f5f6d616e7469" - "7373615f616e645f6578706f6e656e74283130293a206661696c65642077697468206572726f722020666c6f61745f" - "746f5f6d616e74697373615f616e645f6578706f6e656e742830293a20676f6f642020666c6f61745f746f5f6d616e" - "74697373615f616e645f6578706f6e656e742830293a206661696c6564202020206578706563746564206d616e7469" - "73736120302c20676f743a202020206578706563746564206578706f6e656e74202d323134373438333634382c2067" - "6f743a2020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e742830293a206661696c656420" - "77697468206572726f722020666c6f61745f6e65676174652831293a206661696c6564202d20726573756c74206d69" - "736d617463682020666c6f61745f6e65676174652831293a20676f6f642020666c6f61745f6e65676174652831293a" - "206661696c65642077697468206572726f722020666c6f61745f6e6567617465282d31293a206661696c6564202d20" - "726573756c74206d69736d617463682020666c6f61745f6e6567617465282d31293a20676f6f642020666c6f61745f" - "6e6567617465282d31293a206661696c65642077697468206572726f722020666c6f61745f6e65676174652830293a" - "206661696c6564202d20726573756c74206d69736d617463682020666c6f61745f6e65676174652830293a20676f6f" - "642020666c6f61745f6e65676174652830293a206661696c65642077697468206572726f720a24242420746573745f" - "666c6f61745f616273202424242020666c6f61745f6162732831293a206661696c6564202d20726573756c74206d69" - "736d617463682020666c6f61745f6162732831293a20676f6f642020666c6f61745f6162732831293a206661696c65" - "642077697468206572726f722020666c6f61745f616273282d31293a206661696c6564202d20726573756c74206d69" - "736d617463682020666c6f61745f616273282d31293a20676f6f642020666c6f61745f616273282d31293a20666169" - "6c65642077697468206572726f722020666c6f61745f6162732830293a206661696c6564202d20726573756c74206d" - "69736d617463682020666c6f61745f6162732830293a20676f6f642020666c6f61745f6162732830293a206661696c" - "65642077697468206572726f722020666c6f61745f616273282d3130293a206661696c6564202d20726573756c7420" - "6d69736d617463682020666c6f61745f616273282d3130293a20676f6f642020666c6f61745f616273282d3130293a" - "206661696c65642077697468206572726f720a24242420746573745f666c6f61745f66726f6d5f7374616d6f756e74" - "202424242020666c6f61742066726f6d2058525020616d6f756e74202831303020585250293a202058525020616d6f" - "756e7420636f6e76657273696f6e3a20676f6f64202058525020616d6f756e7420636f6e76657273696f6e3a206661" - "696c6564202020206578706563746564203130303030303030302c20676f743a202058525020616d6f756e7420636f" - "6e76657273696f6e3a206661696c6564202d20666c6f61745f746f5f696e74206572726f722020666c6f6174206672" - "6f6d2058525020616d6f756e743a206661696c656420202020726573756c745f73697a653a0a24242420746573745f" - "666c6f61745f66726f6d5f73746e756d626572202424242020666c6f61742066726f6d2053544e756d626572202831" - "3233293a202053544e756d62657220636f6e76657273696f6e3a20676f6f64202053544e756d62657220636f6e7665" - "7273696f6e3a206661696c6564202020206578706563746564203132332c20676f743a202053544e756d6265722063" - "6f6e76657273696f6e3a206661696c6564202d20666c6f61745f746f5f696e74206572726f722020666c6f61742066" - "726f6d2053544e756d6265723a206661696c65642020666c6f61742066726f6d2053544e756d626572202831293a20" - "2053544e756d626572283129203d3d20464c4f41545f4f4e453a20676f6f64202053544e756d626572283129203d3d" - "20464c4f41545f4f4e453a206661696c65642020666c6f61742066726f6d2053544e756d6265722831293a20666169" - "6c6564004d0970726f64756365727302086c616e6775616765010452757374000c70726f6365737365642d62790105" - "72757374631d312e38392e30202832393438333838336520323032352d30382d303429002c0f7461726765745f6665" - "617475726573022b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; + "0061736d0100000001490960057f7f7f7f7f017f60077f7f7f7f7f7f7f017f60067f7f7f7f7f7f017f60047e7f7f7f" + "017f60057e7f7f7f7f017f60047f7f7f7f017f60037f7f7e017f60037f7f7f006000017f02fa021008686f73745f6c" + "6962057472616365000008686f73745f6c69620e666c6f61745f66726f6d5f696e74000308686f73745f6c69620f66" + "6c6f61745f66726f6d5f75696e74000003656e7613666c6f61745f66726f6d5f6d616e745f657870000408686f7374" + "5f6c69620d666c6f61745f636f6d70617265000508686f73745f6c696209666c6f61745f616464000108686f73745f" + "6c69620e666c6f61745f7375627472616374000108686f73745f6c69620e666c6f61745f6d756c7469706c79000108" + "686f73745f6c69620c666c6f61745f646976696465000108686f73745f6c696209666c6f61745f706f77000208686f" + "73745f6c69620974726163655f6e756d000608686f73745f6c69620a666c6f61745f726f6f74000203656e760c666c" + "6f61745f746f5f696e74000003656e7611666c6f61745f746f5f6d616e745f657870000203656e7613666c6f61745f" + "66726f6d5f7374616d6f756e74000003656e7613666c6f61745f66726f6d5f73746e756d6265720000030302070805" + "030100110619037f01418080c0000b7f0041b49ac0000b7f0041c09ac0000b072e04066d656d6f727902000666696e" + "69736800110a5f5f646174615f656e6403010b5f5f686561705f6261736503020ab621021f00200020014101410041" + "0010001a418080c00041022002410c410110001a0b9321020c7f017e230041f0006b22002400418280c000411d4101" + "4100410010001a200041e8006a4100360200200042003703600240428ce000200041e0006a2203410c410010012201" + "410c460440419f80c00041172003101041b680c000411e2003410c410110001a0c010b41d480c000411e4101410041" + "0010001a0b2000428ce0003703500240200041d0006a4108200041e0006a2203410c41001002410c4604402001410c" + "46210741f280c0004117200310100c010b418981c000411e41014100410010001a0b024042fb004102200041e0006a" + "2201410c41001003410c46044041a781c0004121200110100c010b41c881c000412641014100410010001a41002107" + "0b41ee81c0004115418382c0001010418f82c000411641a582c000101041b182c000411b41014100410010001a2000" + "41e8006a41003602002000420037036002404201200041e0006a2203410c410010012201410c46044041cc82c00041" + "0f200310100c010b41db82c000411641014100410010001a0b027f200041e0006a410c418382c000410c1004450440" + "41f182c000411b41014100410010001a2001410c460c010b418c83c000412341014100410010001a41000b21080240" + "200041e0006a410c41a582c000410c1004410146044041af83c000412341014100410010001a0c010b4100210841d2" + "83c000412c41014100410010001a0b024041a582c000410c200041e0006a410c1004410246044041fe83c000412341" + "014100410010001a0c010b4100210841a184c000412c41014100410010001a0b41cd84c00041204101410041001000" + "1a200041d8006a418b82c0002800003602002000418382c000290000370350410921040340200041d0006a2201410c" + "418382c000410c2001410c410010051a200441016b22040d000b200041e8006a410036020020004200370360420a20" + "0041e0006a410c41001001410c46220945044041ed84c000411741014100410010001a0b0240200041e0006a410c20" + "0041d0006a410c1004450440418485c000411441014100410010001a0c010b41002109419885c00041164101410041" + "0010001a0b410b21040340200041d0006a2201410c418382c000410c2001410c410010061a200441016b22040d000b" + "02402001410c41a582c000410c100445044041ae85c000411941014100410010001a0c010b4100210941c785c00041" + "1b41014100410010001a0b41e285c000412341014100410010001a200041106a410036020020004200370308420a20" + "0041086a410c410010011a200041206a418b82c0002800003602002000418382c00029000037031841062104034020" + "0041186a2201410c200041086a410c2001410c410010071a200441016b22040d000b200041d8006a41003602002000" + "420037035042c0843d200041d0006a2203410c410010011a02402003410c2001410c10042201450440418586c00041" + "1941014100410010001a0c010b419e86c000411b41014100410010001a0b200145210a410721040340200041186a22" + "01410c200041086a410c2001410c410010081a200441016b22040d000b200041e8006a410036020020004200370360" + "4201417f200041e0006a2203410c410010031a02402001410c2003410c100445044041b986c0004117410141004100" + "10001a0c010b41d086c000411941014100410010001a4100210a0b41e986c000411741014100410010001a20004120" + "6a2204410036020020004200370318418382c000410c4103200041186a2205410c410010091a418087c00041122005" + "101041a582c000410c41062005410c410010091a419287c000411820051010200041d8006a22014100360200200042" + "003703504209200041d0006a2202410c410010011a2002410c41022005410c410010091a41aa87c000411420051010" + "2002410c41002005410c410010091a41be87c000411720051010200041e8006a220341003602002000420037036042" + "00200041e0006a2206410c410010011a2006410c41022005410c410010091a41d587c00041142005101041e987c000" + "41382006410c41002005410c41001009ac100a1a41a188c000411841014100410010001a2004410036020020004200" + "37031842092005410c410010011a20014100360200200042003703502005410c41022002410c4100100b1a41b988c0" + "004112200210102005410c41032002410c4100100b1a41cb88c0004112200210102003410036020020004200370360" + "42c0843d2006410c410010011a2006410c41032002410c4100100b1a41dd88c0004118200210102006410c41062002" + "410c4100100b1a41f588c000411c20021010419189c000411a41014100410010001a20014100360200200042003703" + "502003410036020020004200370360420a2006410c410010011a418382c000410c2006410c2002410c410010081a41" + "ab89c000411920021010418382c000410c2002410c2002410c410010081a41c489c000410f2002101002402006410c" + "2002410c1004220b45044041d389c000411441014100410010001a0c010b41e789c000411641014100410010001a0b" + "4100210141fd89c000411a41014100410010001a200042003703080240418382c000410c200041086a41084100100c" + "220341084604402000290308220c42015104404101210141978ac000411741014100410010001a0c020b41ae8ac000" + "411941014100410010001a41c78ac0004108200c100a1a0c010b41cf8ac000412441014100410010001a41f38ac000" + "410f2003ac100a1a0b41002104024041a582c000410c200041086a41084100100c220341084604402000290308220c" + "427f51044041828bc000411841014100410010001a200121040c020b419a8bc000411a41014100410010001a41c78a" + "c0004108200c100a1a0c010b41b48bc000412541014100410010001a41f38ac000410f2003ac100a1a0b4100210120" + "0041206a41003602002000420037031842ffffffffffffffffff00200041186a2203410c410010011a02402003410c" + "200041086a41084100100c220341084604402000290308220c42ffffffffffffffffff0051044041d98bc000411e41" + "014100410010001a200421010c020b41f78bc000412041014100410010001a41978cc000410d42ffffffffffffffff" + "ff00100a1a41c78ac0004108200c100a1a0c010b41a48cc000412b41014100410010001a41f38ac000410f2003ac10" + "0a1a0b41002103200041d8006a4100360200200042003703504200200041d0006a2204410c410010011a0240200441" + "0c200041086a41084100100c220441084604402000290308220c50044041cf8cc000411741014100410010001a2001" + "21030c020b41e68cc000411941014100410010001a41c78ac0004108200c100a1a0c010b41ff8cc000412441014100" + "410010001a41f38ac000410f2004ac100a1a0b41002104200041e8006a4100360200200042003703604201417f2000" + "41e0006a2201410c410010031a02402001410c200041086a41084100100c220141084604402000290308220c500440" + "41a38dc000412541014100410010001a200321040c020b41c88dc000412741014100410010001a41c78ac000410820" + "0c100a1a0c010b41ef8dc000413241014100410010001a41f38ac000410f2001ac100a1a0b0240200041e0006a410c" + "200041086a41084101100c220141084604402000290308220c50044041a18ec000412741014100410010001a0c020b" + "4100210441c88ec000412941014100410010001a41c78ac0004108200c100a1a0c010b4100210441f18ec000413441" + "014100410010001a41f38ac000410f2001ac100a1a0b4100210141a58fc000412c41014100410010001a2000420037" + "0328200041003602340240418382c000410c200041286a4108200041346a4104100d2203410c460440200028023422" + "03416e462000290328220c42808090bbbad6adf00d517145044041fa8fc000412b41014100410010001a41a590c000" + "412f200c100a1a41d490c000411f2003ac100a1a0c020b4101210141d18fc000412941014100410010001a0c010b41" + "f390c000413641014100410010001a41f38ac000410f2003ac100a1a0b200042003703384100210320004100360244" + "024041a582c000410c200041386a4108200041c4006a4104100d2202410c46044020002802442202416e4620002903" + "38220c428080f0c4c5a9d28f72517145044041d391c000412c41014100410010001a41ff91c0004130200c100a1a41" + "d490c000411f2002ac100a1a0c020b41a991c000412a41014100410010001a200121030c010b41af92c00041374101" + "4100410010001a41f38ac000410f2002ac100a1a0b41002101200041d8006a410036020020004200370350420a2000" + "41d0006a2202410c410010011a200042003703082000410036024802402002410c200041086a4108200041c8006a41" + "04100d2202410c46044020002802482202416f462000290308220c42808090bbbad6adf00d5171450440419093c000" + "412c41014100410010001a41a590c000412f200c100a1a41bc93c000411f2002ac100a1a0c020b41e692c000412a41" + "014100410010001a200321010c010b41db93c000413741014100410010001a41f38ac000410f2002ac100a1a0b4100" + "2103200041e8006a4100360200200042003703604200200041e0006a2202410c410010011a20004200370318200041" + "0036024c02402002410c200041186a4108200041cc006a4104100d2202410c4604402000290318220c50200028024c" + "2202418080808078467145044041bb94c000412b41014100410010001a41e694c000411d200c100a1a418395c00041" + "272002ac100a1a0c020b419294c000412941014100410010001a200121030c010b41aa95c000413641014100410010" + "001a41f38ac000410f2002ac100a1a0b4100210141e095c000412141014100410010001a200042c0808080d0a0fdf0" + "00370018200041e8006a41003602002000420037036002400240200041186a4108200041e0006a2205410c4100100e" + "2202410c460440418196c000412220051010200042003703502005410c200041d0006a41084100100c22024108470d" + "012000290350220c4280c2d72f5104404101210141a396c000411d41014100410010001a0c030b41c096c000411f41" + "014100410010001a41df96c000411c200c100a1a0c020b41af97c000411f41014100410010001a41ce97c000411020" + "02ac100a1a0c010b41fb96c000413441014100410010001a41f38ac000410f2002ac100a1a0b4100210241de97c000" + "412141014100410010001a200041ffffff8f7f36005820004281eceedce494ccf9c000370050200041e8006a410036" + "02002000420037036002400240200041d0006a410c200041e0006a2206410c4100100f2205410c46044041ff97c000" + "411c20061010200042003703182006410c200041186a41084100100c22054108470d012000290318220c42fb005104" + "4041012102419b98c000411b41014100410010001a0c030b41b698c000411d41014100410010001a41d398c0004116" + "200c100a1a0c020b419b99c000411d41014100410010001a41ce97c00041102005ac100a1a0c010b41e998c0004132" + "41014100410010001a41f38ac000410f2005ac100a1a0b410021050240418382c000410c200041e0006a2206410c41" + "00100f410c46044041b899c000411a200610102006410c418382c000410c100445044041d299c00041204101410041" + "0010001a200221050c020b41f299c000412241014100410010001a0c010b41949ac000412041014100410010001a0b" + "200041f0006a2400200b452007200871200971200a71200471200371200171200571710b0bbe1a0100418080c0000b" + "b41a20200a24242420746573745f666c6f61745f66726f6d5f7761736d202424242020666c6f61742066726f6d2069" + "36342031323330303a2020666c6f61742066726f6d20693634203132333030206173204845583a2020666c6f617420" + "66726f6d206936342031323330303a206661696c65642020666c6f61742066726f6d207536342031323330303a2020" + "666c6f61742066726f6d207536342031323330303a206661696c65642020666c6f61742066726f6d2065787020322c" + "206d616e7469737361203132333a2020666c6f61742066726f6d2065787020322c206d616e746973736120333a2066" + "61696c65642020666c6f61742066726f6d20636f6e737420313a0de0b6b3a7640000ffffffee2020666c6f61742066" + "726f6d20636f6e7374202d313af21f494c589c0000ffffffee0a24242420746573745f666c6f61745f636f6d706172" + "65202424242020666c6f61742066726f6d20313a2020666c6f61742066726f6d20313a206661696c65642020666c6f" + "61742066726f6d2031203d3d20464c4f41545f4f4e452020666c6f61742066726f6d203120213d20464c4f41545f4f" + "4e452c206661696c65642020666c6f61742066726f6d2031203e20464c4f41545f4e454741544956455f4f4e452020" + "666c6f61742066726f6d203120213e20464c4f41545f4e454741544956455f4f4e452c206661696c65642020464c4f" + "41545f4e454741544956455f4f4e45203c20666c6f61742066726f6d20312020464c4f41545f4e454741544956455f" + "4f4e4520213c20666c6f61742066726f6d20312c206661696c65640a24242420746573745f666c6f61745f6164645f" + "7375627472616374202424242020666c6f61742066726f6d2031303a206661696c6564202072657065617465642061" + "64643a20676f6f6420207265706561746564206164643a206661696c65642020726570656174656420737562747261" + "63743a20676f6f64202072657065617465642073756274726163743a206661696c65640a24242420746573745f666c" + "6f61745f6d756c7469706c795f6469766964652024242420207265706561746564206d756c7469706c793a20676f6f" + "6420207265706561746564206d756c7469706c793a206661696c656420207265706561746564206469766964653a20" + "676f6f6420207265706561746564206469766964653a206661696c65640a24242420746573745f666c6f61745f706f" + "77202424242020666c6f61742063756265206f6620313a2020666c6f61742036746820706f776572206f66202d313a" + "2020666c6f617420737175617265206f6620393a2020666c6f61742030746820706f776572206f6620393a2020666c" + "6f617420737175617265206f6620303a2020666c6f61742030746820706f776572206f662030202865787065637469" + "6e6720494e56414c49445f504152414d53206572726f72293a0a24242420746573745f666c6f61745f726f6f742024" + "24242020666c6f61742073717274206f6620393a2020666c6f61742063627274206f6620393a2020666c6f61742063" + "627274206f6620313030303030303a2020666c6f61742036746820726f6f74206f6620313030303030303a0a242424" + "20746573745f666c6f61745f696e76657274202424242020696e76657274206120666c6f61742066726f6d2031303a" + "2020696e7665727420616761696e3a2020696e766572742074776963653a20676f6f642020696e7665727420747769" + "63653a206661696c65640a24242420746573745f666c6f61745f746f5f696e74202424242020666c6f61745f746f5f" + "696e742831293a20676f6f642020666c6f61745f746f5f696e742831293a206661696c656420202020676f743a2020" + "666c6f61745f746f5f696e742831293a206661696c65642077697468206572726f72202020206572726f7220636f64" + "653a2020666c6f61745f746f5f696e74282d31293a20676f6f642020666c6f61745f746f5f696e74282d31293a2066" + "61696c65642020666c6f61745f746f5f696e74282d31293a206661696c65642077697468206572726f722020666c6f" + "61745f746f5f696e74286936343a3a4d4158293a20676f6f642020666c6f61745f746f5f696e74286936343a3a4d41" + "58293a206661696c65642020202065787065637465643a2020666c6f61745f746f5f696e74286936343a3a4d415829" + "3a206661696c65642077697468206572726f722020666c6f61745f746f5f696e742830293a20676f6f642020666c6f" + "61745f746f5f696e742830293a206661696c65642020666c6f61745f746f5f696e742830293a206661696c65642077" + "697468206572726f722020666c6f61745f746f5f696e7428302e312c20746f5f6e656172657374293a20676f6f6420" + "20666c6f61745f746f5f696e7428302e312c20746f5f6e656172657374293a206661696c65642020666c6f61745f74" + "6f5f696e7428302e312c20746f5f6e656172657374293a206661696c65642077697468206572726f722020666c6f61" + "745f746f5f696e7428302e312c20746f77617264735f7a65726f293a20676f6f642020666c6f61745f746f5f696e74" + "28302e312c20746f77617264735f7a65726f293a206661696c65642020666c6f61745f746f5f696e7428302e312c20" + "746f77617264735f7a65726f293a206661696c65642077697468206572726f720a24242420746573745f666c6f6174" + "5f746f5f6d616e74697373615f616e645f6578706f6e656e74202424242020666c6f61745f746f5f6d616e74697373" + "615f616e645f6578706f6e656e742831293a20676f6f642020666c6f61745f746f5f6d616e74697373615f616e645f" + "6578706f6e656e742831293a206661696c6564202020206578706563746564206d616e746973736120313030303030" + "303030303030303030303030302c20676f743a202020206578706563746564206578706f6e656e74202d31382c2067" + "6f743a2020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e742831293a206661696c656420" + "77697468206572726f722020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e74282d31293a" + "20676f6f642020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e74282d31293a206661696c" + "6564202020206578706563746564206d616e7469737361202d313030303030303030303030303030303030302c2067" + "6f743a2020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e74282d31293a206661696c6564" + "2077697468206572726f722020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e7428313029" + "3a20676f6f642020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e74283130293a20666169" + "6c6564202020206578706563746564206578706f6e656e74202d31372c20676f743a2020666c6f61745f746f5f6d61" + "6e74697373615f616e645f6578706f6e656e74283130293a206661696c65642077697468206572726f722020666c6f" + "61745f746f5f6d616e74697373615f616e645f6578706f6e656e742830293a20676f6f642020666c6f61745f746f5f" + "6d616e74697373615f616e645f6578706f6e656e742830293a206661696c6564202020206578706563746564206d61" + "6e746973736120302c20676f743a202020206578706563746564206578706f6e656e74202d32313437343833363438" + "2c20676f743a2020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e742830293a206661696c" + "65642077697468206572726f720a24242420746573745f666c6f61745f66726f6d5f7374616d6f756e742024242420" + "20666c6f61742066726f6d2058525020616d6f756e74202831303020585250293a202058525020616d6f756e742063" + "6f6e76657273696f6e3a20676f6f64202058525020616d6f756e7420636f6e76657273696f6e3a206661696c656420" + "2020206578706563746564203130303030303030302c20676f743a202058525020616d6f756e7420636f6e76657273" + "696f6e3a206661696c6564202d20666c6f61745f746f5f696e74206572726f722020666c6f61742066726f6d205852" + "5020616d6f756e743a206661696c656420202020726573756c745f73697a653a0a24242420746573745f666c6f6174" + "5f66726f6d5f73746e756d626572202424242020666c6f61742066726f6d2053544e756d6265722028313233293a20" + "2053544e756d62657220636f6e76657273696f6e3a20676f6f64202053544e756d62657220636f6e76657273696f6e" + "3a206661696c6564202020206578706563746564203132332c20676f743a202053544e756d62657220636f6e766572" + "73696f6e3a206661696c6564202d20666c6f61745f746f5f696e74206572726f722020666c6f61742066726f6d2053" + "544e756d6265723a206661696c65642020666c6f61742066726f6d2053544e756d626572202831293a202053544e75" + "6d626572283129203d3d20464c4f41545f4f4e453a20676f6f64202053544e756d626572283129203d3d20464c4f41" + "545f4f4e453a206661696c65642020666c6f61742066726f6d2053544e756d6265722831293a206661696c6564004d" + "0970726f64756365727302086c616e6775616765010452757374000c70726f6365737365642d627901057275737463" + "1d312e38392e30202832393438333838336520323032352d30382d303429002c0f7461726765745f66656174757265" + "73022b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; extern std::string const float0Hex = "0061736d0100000001290560057f7f7f7f7f017f60047e7f7f7f017f60077f7f7f7f7f7f7f017f60047f7f7f7f017f" diff --git a/src/test/app/wasm_fixtures/float_tests/src/lib.rs b/src/test/app/wasm_fixtures/float_tests/src/lib.rs index 5e4ac5ef7d..559ecc22a5 100644 --- a/src/test/app/wasm_fixtures/float_tests/src/lib.rs +++ b/src/test/app/wasm_fixtures/float_tests/src/lib.rs @@ -11,7 +11,7 @@ use xrpl_std::host::trace::DataRepr::AsHex; use xrpl_std::host::trace::{trace, trace_data, trace_num, DataRepr}; use xrpl_std::host::{ cache_ledger_obj, float_add, float_compare, float_divide, float_from_int, float_from_uint, - float_log, float_multiply, float_pow, float_root, float_set, float_subtract, + float_multiply, float_pow, float_root, float_subtract, get_ledger_obj_array_len, get_ledger_obj_field, get_ledger_obj_nested_field, FLOAT_ROUNDING_MODES_TO_NEAREST, }; @@ -50,8 +50,8 @@ unsafe extern "C" { rounding: i32, ) -> i32; - #[link_name = "float_to_mantissa_and_exponent"] - fn float_to_mantissa_and_exponent( + #[link_name = "float_to_mant_exp"] + fn float_to_mant_exp( float_ptr: *const u8, float_len: i32, mantissa_ptr: *mut u8, @@ -60,16 +60,14 @@ unsafe extern "C" { exponent_len: i32, ) -> i32; - #[link_name = "float_negate"] - fn float_negate( - float_ptr: *const u8, - float_len: i32, + #[link_name = "float_from_mant_exp"] + fn float_from_mant_exp( + mantissa: i64, + exponent: i32, out_ptr: *mut u8, out_len: i32, + rounding: i32, ) -> i32; - - #[link_name = "float_abs"] - fn float_abs(float_ptr: *const u8, float_len: i32, out_ptr: *mut u8, out_len: i32) -> i32; } // Float size constant (8 bytes mantissa + 4 bytes exponent) @@ -116,10 +114,10 @@ fn test_float_from_wasm() -> bool { all_pass = false; } - if FLOAT_SIZE as i32 == unsafe { float_set(2, 123, f.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) } { + if FLOAT_SIZE as i32 == unsafe { float_from_mant_exp(123, 2, f.as_mut_ptr(), FLOAT_SIZE as i32, FLOAT_ROUNDING_MODES_TO_NEAREST) } { let _ = trace_float(" float from exp 2, mantissa 123:", &f); } else { - let _ = trace(" float from exp 2, mantissa 3: failed"); + let _ = trace(" float from exp 2, mantissa 123: failed"); all_pass = false; } @@ -272,7 +270,7 @@ fn test_float_multiply_divide() -> bool { }; } let mut f01: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - unsafe { float_set(-1, 1, f01.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; + unsafe { float_from_mant_exp(1, -1, f01.as_mut_ptr(), FLOAT_SIZE as i32, FLOAT_ROUNDING_MODES_TO_NEAREST) }; if 0 == unsafe { float_compare(f_compute.as_ptr(), FLOAT_SIZE, f01.as_ptr(), FLOAT_SIZE) } { let _ = trace(" repeated divide: good"); @@ -436,80 +434,6 @@ fn test_float_root() -> bool { all_pass } -fn test_float_log() -> bool { - let _ = trace("\n$$$ test_float_log $$$"); - let mut all_pass = true; - - let mut f1000000: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - unsafe { - float_from_int( - 1000000, - f1000000.as_mut_ptr(), - FLOAT_SIZE, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }; - let mut f_compute: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - unsafe { - float_log( - f1000000.as_ptr(), - FLOAT_SIZE, - f_compute.as_mut_ptr(), - FLOAT_SIZE, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }; - let _ = trace_float(" log_10 of 1000000:", &f_compute); - - all_pass -} - -fn test_float_negate() -> bool { - let _ = trace("\n$$$ test_float_negate $$$"); - let mut all_pass = true; - - let mut f_compute: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - unsafe { - float_multiply( - FLOAT_ONE.as_ptr(), - FLOAT_SIZE, - FLOAT_NEGATIVE_ONE.as_ptr(), - FLOAT_SIZE, - f_compute.as_mut_ptr(), - FLOAT_SIZE, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }; - // let _ = trace_float(" float:", &f_compute); - if 0 == unsafe { float_compare(FLOAT_NEGATIVE_ONE.as_ptr(), FLOAT_SIZE, f_compute.as_ptr(), FLOAT_SIZE) } { - let _ = trace(" negate const 1: good"); - } else { - let _ = trace(" negate const 1: failed"); - all_pass = false; - } - - unsafe { - float_multiply( - FLOAT_NEGATIVE_ONE.as_ptr(), - FLOAT_SIZE, - FLOAT_NEGATIVE_ONE.as_ptr(), - FLOAT_SIZE, - f_compute.as_mut_ptr(), - FLOAT_SIZE, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }; - // let _ = trace_float(" float:", &f_compute); - if 0 == unsafe { float_compare(FLOAT_ONE.as_ptr(), FLOAT_SIZE, f_compute.as_ptr(), FLOAT_SIZE) } { - let _ = trace(" negate const -1: good"); - } else { - let _ = trace(" negate const -1: failed"); - all_pass = false; - } - - all_pass -} - fn test_float_invert() -> bool { let _ = trace("\n$$$ test_float_invert $$$"); let mut all_pass = true; @@ -666,7 +590,7 @@ fn test_float_to_int() -> bool { // Test rounding with fractional value (0.1) let mut f01: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - unsafe { float_set(-1, 1, f01.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; + unsafe { float_from_mant_exp(1, -1, f01.as_mut_ptr(), FLOAT_SIZE as i32, FLOAT_ROUNDING_MODES_TO_NEAREST) }; let ret = unsafe { float_to_int( f01.as_ptr(), @@ -719,15 +643,15 @@ fn test_float_to_int() -> bool { all_pass } -fn test_float_to_mantissa_and_exponent() -> bool { - let _ = trace("\n$$$ test_float_to_mantissa_and_exponent $$$"); +fn test_float_to_mant_exp() -> bool { + let _ = trace("\n$$$ test_float_to_mant_exp $$$"); let mut all_pass = true; // Test with FLOAT_ONE (value 1) let mut mantissa_bytes: [u8; 8] = [0u8; 8]; let mut exponent_bytes: [u8; 4] = [0u8; 4]; let result = unsafe { - float_to_mantissa_and_exponent( + float_to_mant_exp( FLOAT_ONE.as_ptr(), FLOAT_SIZE as i32, mantissa_bytes.as_mut_ptr(), @@ -741,15 +665,15 @@ fn test_float_to_mantissa_and_exponent() -> bool { let mantissa = i64::from_le_bytes(mantissa_bytes); let exponent = i32::from_le_bytes(exponent_bytes); if mantissa == 1000000000000000000 && exponent == -18 { - let _ = trace(" float_to_mantissa_and_exponent(1): good"); + let _ = trace(" float_to_mant_exp(1): good"); } else { - let _ = trace(" float_to_mantissa_and_exponent(1): failed"); + let _ = trace(" float_to_mant_exp(1): failed"); let _ = trace_num(" expected mantissa 1000000000000000000, got:", mantissa); let _ = trace_num(" expected exponent -18, got:", exponent as i64); all_pass = false; } } else { - let _ = trace(" float_to_mantissa_and_exponent(1): failed with error"); + let _ = trace(" float_to_mant_exp(1): failed with error"); let _ = trace_num(" error code:", result as i64); all_pass = false; } @@ -758,7 +682,7 @@ fn test_float_to_mantissa_and_exponent() -> bool { let mut mantissa_bytes: [u8; 8] = [0u8; 8]; let mut exponent_bytes: [u8; 4] = [0u8; 4]; let result = unsafe { - float_to_mantissa_and_exponent( + float_to_mant_exp( FLOAT_NEGATIVE_ONE.as_ptr(), FLOAT_SIZE as i32, mantissa_bytes.as_mut_ptr(), @@ -772,15 +696,15 @@ fn test_float_to_mantissa_and_exponent() -> bool { let mantissa = i64::from_le_bytes(mantissa_bytes); let exponent = i32::from_le_bytes(exponent_bytes); if mantissa == -1000000000000000000 && exponent == -18 { - let _ = trace(" float_to_mantissa_and_exponent(-1): good"); + let _ = trace(" float_to_mant_exp(-1): good"); } else { - let _ = trace(" float_to_mantissa_and_exponent(-1): failed"); + let _ = trace(" float_to_mant_exp(-1): failed"); let _ = trace_num(" expected mantissa -1000000000000000000, got:", mantissa); let _ = trace_num(" expected exponent -18, got:", exponent as i64); all_pass = false; } } else { - let _ = trace(" float_to_mantissa_and_exponent(-1): failed with error"); + let _ = trace(" float_to_mant_exp(-1): failed with error"); let _ = trace_num(" error code:", result as i64); all_pass = false; } @@ -792,7 +716,7 @@ fn test_float_to_mantissa_and_exponent() -> bool { let mut mantissa_bytes: [u8; 8] = [0u8; 8]; let mut exponent_bytes: [u8; 4] = [0u8; 4]; let result = unsafe { - float_to_mantissa_and_exponent( + float_to_mant_exp( f10.as_ptr(), FLOAT_SIZE as i32, mantissa_bytes.as_mut_ptr(), @@ -806,15 +730,15 @@ fn test_float_to_mantissa_and_exponent() -> bool { let mantissa = i64::from_le_bytes(mantissa_bytes); let exponent = i32::from_le_bytes(exponent_bytes); if mantissa == 1000000000000000000 && exponent == -17 { - let _ = trace(" float_to_mantissa_and_exponent(10): good"); + let _ = trace(" float_to_mant_exp(10): good"); } else { - let _ = trace(" float_to_mantissa_and_exponent(10): failed"); + let _ = trace(" float_to_mant_exp(10): failed"); let _ = trace_num(" expected mantissa 1000000000000000000, got:", mantissa); let _ = trace_num(" expected exponent -17, got:", exponent as i64); all_pass = false; } } else { - let _ = trace(" float_to_mantissa_and_exponent(10): failed with error"); + let _ = trace(" float_to_mant_exp(10): failed with error"); let _ = trace_num(" error code:", result as i64); all_pass = false; } @@ -826,7 +750,7 @@ fn test_float_to_mantissa_and_exponent() -> bool { let mut mantissa_bytes: [u8; 8] = [0u8; 8]; let mut exponent_bytes: [u8; 4] = [0u8; 4]; let result = unsafe { - float_to_mantissa_and_exponent( + float_to_mant_exp( f0.as_ptr(), FLOAT_SIZE as i32, mantissa_bytes.as_mut_ptr(), @@ -840,15 +764,15 @@ fn test_float_to_mantissa_and_exponent() -> bool { let mantissa = i64::from_le_bytes(mantissa_bytes); let exponent = i32::from_le_bytes(exponent_bytes); if mantissa == 0 && exponent == -2147483648 { - let _ = trace(" float_to_mantissa_and_exponent(0): good"); + let _ = trace(" float_to_mant_exp(0): good"); } else { - let _ = trace(" float_to_mantissa_and_exponent(0): failed"); + let _ = trace(" float_to_mant_exp(0): failed"); let _ = trace_num(" expected mantissa 0, got:", mantissa); let _ = trace_num(" expected exponent -2147483648, got:", exponent as i64); all_pass = false; } } else { - let _ = trace(" float_to_mantissa_and_exponent(0): failed with error"); + let _ = trace(" float_to_mant_exp(0): failed with error"); let _ = trace_num(" error code:", result as i64); all_pass = false; } @@ -856,189 +780,6 @@ fn test_float_to_mantissa_and_exponent() -> bool { all_pass } -fn test_float_negate_host() -> bool { - let _ = trace("\n$$$ test_float_negate $$$"); - let mut all_pass = true; - - // Test with FLOAT_ONE (value 1) -> should become -1 - let mut result: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - let ret = unsafe { - float_negate( - FLOAT_ONE.as_ptr(), - FLOAT_SIZE as i32, - result.as_mut_ptr(), - FLOAT_SIZE as i32, - ) - }; - - if ret == FLOAT_SIZE as i32 { - if result == FLOAT_NEGATIVE_ONE { - let _ = trace(" float_negate(1): good"); - } else { - let _ = trace(" float_negate(1): failed - result mismatch"); - all_pass = false; - } - } else { - let _ = trace(" float_negate(1): failed with error"); - let _ = trace_num(" error code:", ret as i64); - all_pass = false; - } - - // Test with FLOAT_NEGATIVE_ONE (value -1) -> should become 1 - let mut result: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - let ret = unsafe { - float_negate( - FLOAT_NEGATIVE_ONE.as_ptr(), - FLOAT_SIZE as i32, - result.as_mut_ptr(), - FLOAT_SIZE as i32, - ) - }; - - if ret == FLOAT_SIZE as i32 { - if result == FLOAT_ONE { - let _ = trace(" float_negate(-1): good"); - } else { - let _ = trace(" float_negate(-1): failed - result mismatch"); - all_pass = false; - } - } else { - let _ = trace(" float_negate(-1): failed with error"); - let _ = trace_num(" error code:", ret as i64); - all_pass = false; - } - - // Test with zero -> should remain zero - let mut f0: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - unsafe { float_from_int(0, f0.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; - - let mut result: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - let ret = unsafe { - float_negate(f0.as_ptr(), FLOAT_SIZE as i32, result.as_mut_ptr(), FLOAT_SIZE as i32) - }; - - if ret == FLOAT_SIZE as i32 { - if result == f0 { - let _ = trace(" float_negate(0): good"); - } else { - let _ = trace(" float_negate(0): failed - result mismatch"); - all_pass = false; - } - } else { - let _ = trace(" float_negate(0): failed with error"); - let _ = trace_num(" error code:", ret as i64); - all_pass = false; - } - - all_pass -} - -fn test_float_abs_host() -> bool { - let _ = trace("\n$$$ test_float_abs $$$"); - let mut all_pass = true; - - // Test with FLOAT_ONE (value 1) -> should remain 1 - let mut result: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - let ret = unsafe { - float_abs( - FLOAT_ONE.as_ptr(), - FLOAT_SIZE as i32, - result.as_mut_ptr(), - FLOAT_SIZE as i32, - ) - }; - - if ret == FLOAT_SIZE as i32 { - if result == FLOAT_ONE { - let _ = trace(" float_abs(1): good"); - } else { - let _ = trace(" float_abs(1): failed - result mismatch"); - all_pass = false; - } - } else { - let _ = trace(" float_abs(1): failed with error"); - let _ = trace_num(" error code:", ret as i64); - all_pass = false; - } - - // Test with FLOAT_NEGATIVE_ONE (value -1) -> should become 1 - let mut result: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - let ret = unsafe { - float_abs( - FLOAT_NEGATIVE_ONE.as_ptr(), - FLOAT_SIZE as i32, - result.as_mut_ptr(), - FLOAT_SIZE as i32, - ) - }; - - if ret == FLOAT_SIZE as i32 { - if result == FLOAT_ONE { - let _ = trace(" float_abs(-1): good"); - } else { - let _ = trace(" float_abs(-1): failed - result mismatch"); - all_pass = false; - } - } else { - let _ = trace(" float_abs(-1): failed with error"); - let _ = trace_num(" error code:", ret as i64); - all_pass = false; - } - - // Test with zero -> should remain zero - let mut f0: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - unsafe { float_from_int(0, f0.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; - - let mut result: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - let ret = - unsafe { float_abs(f0.as_ptr(), FLOAT_SIZE as i32, result.as_mut_ptr(), FLOAT_SIZE as i32) }; - - if ret == FLOAT_SIZE as i32 { - if result == f0 { - let _ = trace(" float_abs(0): good"); - } else { - let _ = trace(" float_abs(0): failed - result mismatch"); - all_pass = false; - } - } else { - let _ = trace(" float_abs(0): failed with error"); - let _ = trace_num(" error code:", ret as i64); - all_pass = false; - } - - // Test with negative value -> should become positive - let mut f_neg10: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - unsafe { float_from_int(-10, f_neg10.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; - - let mut f_pos10: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - unsafe { float_from_int(10, f_pos10.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; - - let mut result: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - let ret = unsafe { - float_abs( - f_neg10.as_ptr(), - FLOAT_SIZE as i32, - result.as_mut_ptr(), - FLOAT_SIZE as i32, - ) - }; - - if ret == FLOAT_SIZE as i32 { - if result == f_pos10 { - let _ = trace(" float_abs(-10): good"); - } else { - let _ = trace(" float_abs(-10): failed - result mismatch"); - all_pass = false; - } - } else { - let _ = trace(" float_abs(-10): failed with error"); - let _ = trace_num(" error code:", ret as i64); - all_pass = false; - } - - all_pass -} - fn test_float_from_stamount() -> bool { let _ = trace("\n$$$ test_float_from_stamount $$$"); let mut all_pass = true; @@ -1203,13 +944,9 @@ pub extern "C" fn finish() -> i32 { all_pass &= test_float_multiply_divide(); all_pass &= test_float_pow(); all_pass &= test_float_root(); - all_pass &= test_float_log(); - all_pass &= test_float_negate(); all_pass &= test_float_invert(); all_pass &= test_float_to_int(); - all_pass &= test_float_to_mantissa_and_exponent(); - all_pass &= test_float_negate_host(); - all_pass &= test_float_abs_host(); + all_pass &= test_float_to_mant_exp(); all_pass &= test_float_from_stamount(); all_pass &= test_float_from_stnumber(); diff --git a/src/test/basics/Number_test.cpp b/src/test/basics/Number_test.cpp index 0540c13afd..856b379533 100644 --- a/src/test/basics/Number_test.cpp +++ b/src/test/basics/Number_test.cpp @@ -1542,78 +1542,6 @@ public: } } - void - test_log10() - { - auto const scale = Number::getMantissaScale(); - testcase << "test_lg " << to_string(scale); - - using Case = std::tuple; - auto test = [this](auto const& c) { - for (auto const& [x, z] : c) - { - auto const result = log10(x); - std::stringstream ss; - ss << "lg(" << x << ") = " << result << ". Expected: " << z; - // std::cout << ss.str() << std::endl; - BEAST_EXPECTS(result == z, ss.str()); - } - }; - - auto const cSmall = std::to_array( - {{Number{2}, Number{3'010'299'956'639'811ll, -16}}, - {Number{2'000'000}, Number{6'301'029'995'663'985ll, -15}}, - {Number{2, -30}, Number{-2'969'897'000'433'602ll, -14}}, - {Number{1}, Number{0}}, - {Number{1'000'000'000'000'000ll}, Number{15}}, - {Number{5625, -4}, Number{-2'498'774'732'165'998, -16}}}); - - auto const cLarge = std::to_array({ - {Number{Number::maxMantissa() - 9, -1, Number::normalized{}}, - Number{1'799'999'999'999'999'999ll, -17}}, - {Number{Number::maxMantissa() - 9, 0, Number::normalized{}}, - Number{1'899'999'999'999'999'999ll, -17}}, - {Number{Number::maxRep, 0, Number::normalized{}}, - Number{1'896'488'972'683'081'529ll, -17}}, - {Number{999'999'999'999'999'999ll}, Number{1'799'999'999'999'999'999, -17}}, - }); - - if (Number::getMantissaScale() == MantissaRange::small) - { - test(cSmall); - } - else - { - NumberRoundModeGuard const mg(Number::towards_zero); - test(cLarge); - } - - { - bool caught = false; - try - { - log10(Number{-2}); - } - catch (std::runtime_error const&) - { - caught = true; - } - BEAST_EXPECT(caught); - caught = false; - - try - { - log10(Number()); - } - catch (std::runtime_error const&) - { - caught = true; - } - BEAST_EXPECT(caught); - caught = false; - } - } - void run() override { @@ -1641,7 +1569,6 @@ public: test_truncate(); testRounding(); testInt64(); - test_log10(); } } }; From 90357eeae1085ea9507b8d4abb669a8c3c0a9bef Mon Sep 17 00:00:00 2001 From: pwang200 <354723+pwang200@users.noreply.github.com> Date: Thu, 14 May 2026 18:53:29 -0400 Subject: [PATCH 120/137] bump get_nft host function cost from 1000 to 5000 (#7200) --- src/libxrpl/tx/wasm/WasmVM.cpp | 2 +- src/test/app/Wasm_test.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/libxrpl/tx/wasm/WasmVM.cpp b/src/libxrpl/tx/wasm/WasmVM.cpp index 2a2627753f..f3a12d0fb9 100644 --- a/src/libxrpl/tx/wasm/WasmVM.cpp +++ b/src/libxrpl/tx/wasm/WasmVM.cpp @@ -61,7 +61,7 @@ setCommonHostFunctions(HostFunctions* hfs, ImportVec& i) WASM_IMPORT_FUNC2(i, ticketKeylet, "ticket_keylet", hfs, 350); WASM_IMPORT_FUNC2(i, vaultKeylet, "vault_keylet", hfs, 350); - WASM_IMPORT_FUNC2(i, getNFT, "get_nft", hfs, 1000); + WASM_IMPORT_FUNC2(i, getNFT, "get_nft", hfs, 5'000); WASM_IMPORT_FUNC2(i, getNFTIssuer, "get_nft_issuer", hfs, 70); WASM_IMPORT_FUNC2(i, getNFTTaxon, "get_nft_taxon", hfs, 60); WASM_IMPORT_FUNC2(i, getNFTFlags, "get_nft_flags", hfs, 60); diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 1582c2c809..1140de9293 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -396,7 +396,7 @@ struct Wasm_test : public beast::unit_test::suite auto re = engine.run( allHostFuncWasm, hfs, 1'000'000, ESCROW_FUNCTION_NAME, {}, imp, env.journal); - checkResult(re, 1, 66'340); + checkResult(re, 1, 70'340); env.close(); } @@ -435,7 +435,7 @@ struct Wasm_test : public beast::unit_test::suite { TestHostFunctions hfs(env, 0); auto re = runEscrowWasm(allHFWasm, hfs, 100'000, ESCROW_FUNCTION_NAME, {}); - checkResult(re, 1, 66'340); + checkResult(re, 1, 70'340); } { @@ -459,7 +459,7 @@ struct Wasm_test : public beast::unit_test::suite TestHostFunctions hfs(env, 0); auto re = runEscrowWasm( allHFWasm, hfs, std::numeric_limits::max(), ESCROW_FUNCTION_NAME, {}); - checkResult(re, 1, 66'340); + checkResult(re, 1, 70'340); } { // fail because trying to access nonexistent field @@ -628,7 +628,7 @@ struct Wasm_test : public beast::unit_test::suite auto const codecovWasm = hexToBytes(codecovTestsWasmHex); TestHostFunctions hfs(env, 0); - auto const allowance = 208'169; + auto const allowance = 220'169; auto re = runEscrowWasm(codecovWasm, hfs, allowance, ESCROW_FUNCTION_NAME, {}); checkResult(re, 1, allowance); From 971ba2281e37edd58fe2beec38c535f5a48e40fc Mon Sep 17 00:00:00 2001 From: pwang200 <354723+pwang200@users.noreply.github.com> Date: Thu, 14 May 2026 20:18:05 -0400 Subject: [PATCH 121/137] clarify XLS-0102 host function stability rule (#7146) --- src/libxrpl/tx/wasm/WasmVM.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/libxrpl/tx/wasm/WasmVM.cpp b/src/libxrpl/tx/wasm/WasmVM.cpp index f3a12d0fb9..137b2c9f83 100644 --- a/src/libxrpl/tx/wasm/WasmVM.cpp +++ b/src/libxrpl/tx/wasm/WasmVM.cpp @@ -13,7 +13,13 @@ #include namespace xrpl { - +// WARNING: Per XLS-0102, the host functions registered here form a stable +// ABI. Their name, semantics, parameters, and return types must NEVER be +// changed, as there may always be a program that uses it. New host functions +// may be added and existing gas costs may be adjusted, but every such change +// must be gated by an amendment. +// See XLS-0102 §6.5 (Future-Proofing): +// https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0102-wasm-vm#65-future-proofing static void setCommonHostFunctions(HostFunctions* hfs, ImportVec& i) { From b664989cfb1fdfa9bdbada52dc88d4a9bd882e6c Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 19 May 2026 15:11:55 -0400 Subject: [PATCH 122/137] fix clang-tidy issues --- include/xrpl/tx/wasm/HostFunc.h | 52 +- include/xrpl/tx/wasm/HostFuncImpl.h | 20 +- include/xrpl/tx/wasm/ParamsHelper.h | 94 +- include/xrpl/tx/wasm/WasmVM.h | 28 +- include/xrpl/tx/wasm/WasmiVM.h | 44 +- src/libxrpl/tx/wasm/HostFuncImpl.cpp | 16 +- src/libxrpl/tx/wasm/HostFuncImplFloat.cpp | 139 +-- src/libxrpl/tx/wasm/HostFuncImplGetter.cpp | 69 +- src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp | 73 +- .../tx/wasm/HostFuncImplLedgerHeader.cpp | 9 +- src/libxrpl/tx/wasm/HostFuncImplNFT.cpp | 22 +- src/libxrpl/tx/wasm/HostFuncImplTrace.cpp | 14 +- src/libxrpl/tx/wasm/HostFuncWrapper.cpp | 133 ++- src/libxrpl/tx/wasm/WasmVM.cpp | 15 +- src/libxrpl/tx/wasm/WasmiVM.cpp | 212 ++-- src/test/app/HostFuncImpl_test.cpp | 998 +++++++++--------- src/test/app/TestHostFunctions.h | 77 +- src/test/app/Wasm_test.cpp | 311 +++--- .../wasm_fixtures/fixture_functions_5k.cpp | 4 +- .../app/wasm_fixtures/fixture_locals_10k.cpp | 4 +- src/test/app/wasm_fixtures/fixtures.cpp | 126 +-- src/test/app/wasm_fixtures/fixtures.h | 128 +-- 22 files changed, 1397 insertions(+), 1191 deletions(-) diff --git a/include/xrpl/tx/wasm/HostFunc.h b/include/xrpl/tx/wasm/HostFunc.h index b385ab9af6..7c5eb18b0c 100644 --- a/include/xrpl/tx/wasm/HostFunc.h +++ b/include/xrpl/tx/wasm/HostFunc.h @@ -14,27 +14,27 @@ namespace xrpl { enum class HostFunctionError : int32_t { INTERNAL = -1, - FIELD_NOT_FOUND = -2, - BUFFER_TOO_SMALL = -3, - NO_ARRAY = -4, - NOT_LEAF_FIELD = -5, - LOCATOR_MALFORMED = -6, - SLOT_OUT_RANGE = -7, - SLOTS_FULL = -8, - EMPTY_SLOT = -9, - LEDGER_OBJ_NOT_FOUND = -10, + FieldNotFound = -2, + BufferTooSmall = -3, + NoArray = -4, + NotLeafField = -5, + LocatorMalformed = -6, + SlotOutRange = -7, + SlotsFull = -8, + EmptySlot = -9, + LedgerObjNotFound = -10, DECODING = -11, - DATA_FIELD_TOO_LARGE = -12, - POINTER_OUT_OF_BOUNDS = -13, - NO_MEM_EXPORTED = -14, - INVALID_PARAMS = -15, - INVALID_ACCOUNT = -16, - INVALID_FIELD = -17, - INDEX_OUT_OF_BOUNDS = -18, - FLOAT_INPUT_MALFORMED = -19, - FLOAT_COMPUTATION_ERROR = -20, - NO_RUNTIME = -21, - OUT_OF_GAS = -22, + DataFieldTooLarge = -12, + PointerOutOfBounds = -13, + NoMemExported = -14, + InvalidParams = -15, + InvalidAccount = -16, + InvalidField = -17, + IndexOutOfBounds = -18, + FloatInputMalformed = -19, + FloatComputationError = -20, + NoRuntime = -21, + OutOfGas = -22, }; using FloatPair = std::pair; @@ -97,9 +97,9 @@ floatPowerImpl(Slice const& x, int32_t n, int32_t mode); // Intended to work only through wasm runtime. Don't call them directly, except with unit tests struct HostFunctions { - beast::Journal j_; + beast::Journal j; - HostFunctions(beast::Journal j = beast::Journal{beast::Journal::getNullSink()}) : j_(j) + HostFunctions(beast::Journal j = beast::Journal{beast::Journal::getNullSink()}) : j(j) { } @@ -109,19 +109,19 @@ struct HostFunctions { } - virtual void* + [[nodiscard]] virtual void* getRT() const { return nullptr; } - beast::Journal + [[nodiscard]] beast::Journal getJournal() const { - return j_; + return j; } - virtual bool + [[nodiscard]] virtual bool checkSelf() const { return true; diff --git a/include/xrpl/tx/wasm/HostFuncImpl.h b/include/xrpl/tx/wasm/HostFuncImpl.h index 864416043a..4033a4aaf9 100644 --- a/include/xrpl/tx/wasm/HostFuncImpl.h +++ b/include/xrpl/tx/wasm/HostFuncImpl.h @@ -13,8 +13,8 @@ class WasmHostFunctionsImpl : public HostFunctions Keylet leKey_; mutable std::optional> currentLedgerObj_; - static int constexpr MAX_CACHE = 256; - std::array, MAX_CACHE> cache_; + static int constexpr maxCache = 256; + std::array, maxCache> cache_; std::optional data_; @@ -27,17 +27,17 @@ class WasmHostFunctionsImpl : public HostFunctions currentLedgerObj_ = ctx_.view().read(leKey_); if (*currentLedgerObj_) return *currentLedgerObj_; - return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); + return Unexpected(HostFunctionError::LedgerObjNotFound); } Expected normalizeCacheIndex(int32_t cacheIdx) const { --cacheIdx; - if (cacheIdx < 0 || cacheIdx >= MAX_CACHE) - return Unexpected(HostFunctionError::SLOT_OUT_RANGE); + if (cacheIdx < 0 || cacheIdx >= maxCache) + return Unexpected(HostFunctionError::SlotOutRange); if (!cache_[cacheIdx]) - return Unexpected(HostFunctionError::EMPTY_SLOT); + return Unexpected(HostFunctionError::EmptySlot); return cacheIdx; } @@ -52,7 +52,7 @@ class WasmHostFunctionsImpl : public HostFunctions return; auto j = getJournal().trace(); #endif - j << "WasmTrace[" << to_short_string(leKey_.key) << "]: " << msg << " " << dataFn(); + j << "WasmTrace[" << toShortString(leKey_.key) << "]: " << msg << " " << dataFn(); #ifdef DEBUG_OUTPUT j << std::endl; @@ -65,19 +65,19 @@ public: { } - virtual void + void setRT(void* rt) override { rt_ = rt; } - virtual void* + void* getRT() const override { return rt_; } - virtual bool + bool checkSelf() const override { return !currentLedgerObj_ && !data_ && diff --git a/include/xrpl/tx/wasm/ParamsHelper.h b/include/xrpl/tx/wasm/ParamsHelper.h index 4d2a1013b6..4a2e99d490 100644 --- a/include/xrpl/tx/wasm/ParamsHelper.h +++ b/include/xrpl/tx/wasm/ParamsHelper.h @@ -18,7 +18,7 @@ namespace xrpl { using Bytes = std::vector; using Hash = xrpl::uint256; -struct wmem +struct Wmem { std::uint8_t* p = nullptr; std::size_t s = 0; @@ -30,13 +30,13 @@ struct WasmResult T result; int64_t cost; }; -typedef WasmResult EscrowResult; +using EscrowResult = WasmResult; struct WasmRuntimeWrapper { virtual ~WasmRuntimeWrapper() = default; - virtual wmem + virtual Wmem getMem() = 0; virtual std::int64_t @@ -48,7 +48,7 @@ struct WasmRuntimeWrapper //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -enum WasmTypes { WT_I32, WT_I64 }; +enum WasmTypes { WtI32, WtI64 }; struct WasmImportFunc { @@ -61,8 +61,8 @@ struct WasmImportFunc uint32_t gas = 0; }; -typedef std::pair WasmUserData; -typedef std::unordered_map ImportVec; +using WasmUserData = std::pair; +using ImportVec = std::unordered_map; #define WASM_IMPORT_FUNC(v, f, ...) \ WasmImpFunc(v, #f, reinterpret_cast(&f##_wrap), ##__VA_ARGS__) @@ -71,43 +71,61 @@ typedef std::unordered_map ImportVec; #define WASM_IMPORT_FUNC2(v, f, n, ...) \ WasmImpFunc(v, n, reinterpret_cast(&f##_wrap), ##__VA_ARGS__) -template +template void WasmImpArgs(WasmImportFunc& e) { if constexpr (N < C) { - using at = typename boost::mpl::at_c::type; + using at = typename boost::mpl::at_c::type; if constexpr (std::is_pointer_v) - e.params.push_back(WT_I32); + { + e.params.push_back(WtI32); + } else if constexpr (std::is_same_v) - e.params.push_back(WT_I32); + { + e.params.push_back(WtI32); + } else if constexpr (std::is_same_v) - e.params.push_back(WT_I64); + { + e.params.push_back(WtI64); + } else + { static_assert(std::is_pointer_v, "Unsupported argument type"); + } - return WasmImpArgs(e); + return WasmImpArgs(e); } return; } -template +template void WasmImpRet(WasmImportFunc& e) { - if constexpr (std::is_pointer_v) - e.result = WT_I32; - else if constexpr (std::is_same_v) - e.result = WT_I32; - else if constexpr (std::is_same_v) - e.result = WT_I64; - else if constexpr (std::is_void_v) + if constexpr (std::is_pointer_v) + { + e.result = WtI32; + } + else if constexpr (std::is_same_v) + { + e.result = WtI32; + } + else if constexpr (std::is_same_v) + { + e.result = WtI64; + } + else if constexpr (std::is_void_v) + { e.result.reset(); #if (defined(__GNUC__) && (__GNUC__ >= 14)) || \ ((defined(__clang_major__)) && (__clang_major__ >= 18)) + } else + { static_assert(false, "Unsupported return type"); + } #endif } @@ -129,17 +147,17 @@ template void WasmImpFunc( ImportVec& v, - std::string_view imp_name, - void* f_wrap, + std::string_view impName, + void* fWrap, void* data = nullptr, uint32_t gas = 0) { WasmImportFunc e; - e.name = imp_name; - e.wrap = f_wrap; + e.name = impName; + e.wrap = fWrap; e.gas = gas; WasmImpFuncHelper(e); - v.emplace(imp_name, std::make_pair(data, std::move(e))); + v.emplace(impName, std::make_pair(data, std::move(e))); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -148,7 +166,7 @@ struct WasmParam { // We are not supporting float/double - WasmTypes type = WT_I32; + WasmTypes type = WtI32; union { std::int32_t i32; @@ -160,7 +178,7 @@ template inline void wasmParamsHlp(std::vector& v, std::int32_t p, Types&&... args) { - v.push_back({.type = WT_I32, .of = {.i32 = p}}); + v.push_back({.type = WtI32, .of = {.i32 = p}}); wasmParamsHlp(v, std::forward(args)...); } @@ -168,7 +186,7 @@ template inline void wasmParamsHlp(std::vector& v, std::int64_t p, Types&&... args) { - v.push_back({.type = WT_I64, .of = {.i64 = p}}); + v.push_back({.type = WtI64, .of = {.i64 = p}}); wasmParamsHlp(v, std::forward(args)...); } @@ -188,29 +206,29 @@ wasmParams(Types&&... args) return v; } -template -inline constexpr T +template +constexpr T adjustWasmEndianessHlp(T x) { - static_assert(std::is_integral::value, "Only integral types"); - if constexpr (size > 1) + static_assert(std::is_integral_v, "Only integral types"); + if constexpr (Size > 1) { - using U = std::make_unsigned::type; + using U = std::make_unsigned_t; U u = static_cast(x); - U const low = (u & 0xFF) << ((size - 1) << 3); - u = adjustWasmEndianessHlp(u >> 8); + U const low = (u & 0xFF) << ((Size - 1) << 3); + u = adjustWasmEndianessHlp(u >> 8); return static_cast(low | u); } return x; } -template -inline constexpr T +template +constexpr T adjustWasmEndianess(T x) { // LCOV_EXCL_START - static_assert(std::is_integral::value, "Only integral types"); + static_assert(std::is_integral_v, "Only integral types"); if constexpr (std::endian::native == std::endian::big) { return adjustWasmEndianessHlp(x); diff --git a/include/xrpl/tx/wasm/WasmVM.h b/include/xrpl/tx/wasm/WasmVM.h index e001ee6112..1e371a92b4 100644 --- a/include/xrpl/tx/wasm/WasmVM.h +++ b/include/xrpl/tx/wasm/WasmVM.h @@ -6,19 +6,19 @@ namespace xrpl { -std::string_view inline constexpr W_ENV = "env"; -std::string_view inline constexpr W_HOST_LIB = "host_lib"; -std::string_view inline constexpr W_MEM = "memory"; -std::string_view inline constexpr W_STORE = "store"; -std::string_view inline constexpr W_LOAD = "load"; -std::string_view inline constexpr W_SIZE = "size"; -std::string_view inline constexpr W_ALLOC = "allocate"; -std::string_view inline constexpr W_DEALLOC = "deallocate"; -std::string_view inline constexpr W_PROC_EXIT = "proc_exit"; +std::string_view inline constexpr wEnv = "env"; +std::string_view inline constexpr wHostLib = "host_lib"; +std::string_view inline constexpr wMem = "memory"; +std::string_view inline constexpr wStore = "store"; +std::string_view inline constexpr wLoad = "load"; +std::string_view inline constexpr wSize = "size"; +std::string_view inline constexpr wAlloc = "allocate"; +std::string_view inline constexpr wDealloc = "deallocate"; +std::string_view inline constexpr wProcExit = "proc_exit"; -std::string_view inline constexpr ESCROW_FUNCTION_NAME = "finish"; +std::string_view inline constexpr escrowFunctionName = "finish"; -uint32_t inline constexpr MAX_PAGES = 128; // 8MB = 64KB*128 +uint32_t inline constexpr maxPages = 128; // 8MB = 64KB*128 class WasmiEngine; @@ -61,7 +61,7 @@ public: void* newTrap(std::string const& txt = std::string()); - beast::Journal + [[nodiscard]] beast::Journal getJournal() const; }; @@ -75,14 +75,14 @@ runEscrowWasm( Bytes const& wasmCode, HostFunctions& hfs, int64_t gasLimit, - std::string_view funcName = ESCROW_FUNCTION_NAME, + std::string_view funcName = escrowFunctionName, std::vector const& params = {}); NotTEC preflightEscrowWasm( Bytes const& wasmCode, HostFunctions& hfs, - std::string_view funcName = ESCROW_FUNCTION_NAME, + std::string_view funcName = escrowFunctionName, std::vector const& params = {}); } // namespace xrpl diff --git a/include/xrpl/tx/wasm/WasmiVM.h b/include/xrpl/tx/wasm/WasmiVM.h index ce94b2ee29..ef3c33b164 100644 --- a/include/xrpl/tx/wasm/WasmiVM.h +++ b/include/xrpl/tx/wasm/WasmiVM.h @@ -67,7 +67,7 @@ public: return &vec_; } - T const* + [[nodiscard]] T const* get() const { return &vec_; @@ -89,13 +89,13 @@ public: return vec_.data[i]; } - size_t + [[nodiscard]] size_t size() const { return vec_.size; } - bool + [[nodiscard]] bool empty() const { return vec_.size == 0u; @@ -121,7 +121,7 @@ struct WasmiResult WasmValVec r; bool f{false}; // failure flag - WasmiResult(unsigned N = 0) : r(N) + WasmiResult(unsigned n = 0) : r(n) { } @@ -141,11 +141,11 @@ using FuncInfo = std::pair; struct InstanceWrapper { - wasm_store_t* store_ = nullptr; - WasmExternVec exports_; - mutable int memIdx_ = -1; - InstancePtr instance_; - beast::Journal j_ = beast::Journal(beast::Journal::getNullSink()); + wasm_store_t* store = nullptr; + WasmExternVec exports; + mutable int memIdx = -1; + InstancePtr instance; + beast::Journal j = beast::Journal(beast::Journal::getNullSink()); private: static InstancePtr @@ -176,7 +176,7 @@ public: FuncInfo getFunc(std::string_view funcName, WasmExporttypeVec const& exportTypes) const; - wmem + Wmem getMem() const; std::int64_t @@ -188,10 +188,10 @@ public: struct ModuleWrapper { - ModulePtr module_; - InstanceWrapper instanceWrap_; - WasmExporttypeVec exportTypes_; - beast::Journal j_ = beast::Journal(beast::Journal::getNullSink()); + ModulePtr module; + InstanceWrapper instanceWrap; + WasmExporttypeVec exportTypes; + beast::Journal j = beast::Journal(beast::Journal::getNullSink()); private: static ModulePtr @@ -218,7 +218,7 @@ public: wasm_functype_t* getFuncType(std::string_view funcName) const; - wmem + Wmem getMem() const; InstanceWrapper& @@ -269,21 +269,21 @@ public: ImportVec const& imports, beast::Journal j); - std::int64_t + [[nodiscard]] std::int64_t getGas() const; // Host functions helper functionality wasm_trap_t* newTrap(std::string const& msg); - beast::Journal + [[nodiscard]] beast::Journal getJournal() const; private: - InstanceWrapper& + [[nodiscard]] InstanceWrapper& getRT(int m = 0, int i = 0) const; - wmem + [[nodiscard]] Wmem getMem() const; Expected, TER> @@ -318,7 +318,7 @@ private: int32_t makeModule(Bytes const& wasmCode, WasmExternVec const& imports = {}); - FuncInfo + [[nodiscard]] FuncInfo getFunc(std::string_view funcName) const; static std::vector @@ -328,9 +328,9 @@ private: compareParamTypes(wasm_valtype_vec_t const* ftp, std::vector const& p); static void - add_param(std::vector& in, int32_t p); + addParam(std::vector& in, int32_t p); static void - add_param(std::vector& in, int64_t p); + addParam(std::vector& in, int64_t p); template inline WasmiResult diff --git a/src/libxrpl/tx/wasm/HostFuncImpl.cpp b/src/libxrpl/tx/wasm/HostFuncImpl.cpp index 7f6dd4255c..dbcd9d8e78 100644 --- a/src/libxrpl/tx/wasm/HostFuncImpl.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImpl.cpp @@ -1,7 +1,15 @@ -#include -#include #include +#include +#include +#include +#include +#include +#include +#include + +#include + namespace xrpl { // ========================================================= @@ -13,7 +21,7 @@ WasmHostFunctionsImpl::updateData(Slice const& data) { if (data.size() > maxWasmDataLength) { - return Unexpected(HostFunctionError::DATA_FIELD_TOO_LARGE); + return Unexpected(HostFunctionError::DataFieldTooLarge); } data_ = Bytes(data.begin(), data.end()); return data_->size(); @@ -30,7 +38,7 @@ WasmHostFunctionsImpl::checkSignature( Slice const& pubkey) const { if (!publicKeyType(pubkey)) - return Unexpected(HostFunctionError::INVALID_PARAMS); + return Unexpected(HostFunctionError::InvalidParams); PublicKey const pk(pubkey); return verify(pk, message, signature); diff --git a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp index 50e972a2da..f85a17a2d2 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp @@ -1,8 +1,19 @@ +#include +#include +#include #include -#include #include -#include +#include +#include #include +#include + +#include + +#include +#include +#include +#include #ifdef _DEBUG // #define DEBUG_OUTPUT 1 @@ -48,7 +59,7 @@ public: { try { - Number n; + Number const n; if constexpr (std::is_signed_v) { n = Number(static_cast(mantissa), exponent); @@ -102,25 +113,25 @@ public: struct FloatState { - Number::rounding_mode oldMode_; - bool good_ = false; + Number::RoundingMode oldMode; + bool good = false; - FloatState(int32_t mode) : oldMode_(Number::getround()) + FloatState(int32_t mode) : oldMode(Number::getround()) { - if (mode < Number::rounding_mode::to_nearest || mode > Number::rounding_mode::upward) + if (mode < Number::RoundingMode::ToNearest || mode > Number::RoundingMode::Upward) return; - Number::setround(static_cast(mode)); - good_ = true; + Number::setround(static_cast(mode)); + good = true; } ~FloatState() { - Number::setround(oldMode_); + Number::setround(oldMode); } operator bool() const { - return good_; + return good; } }; @@ -130,7 +141,7 @@ std::string floatToString(Slice const& data) { // set default mode as we don't expect it will be used here - detail::FloatState const rm(Number::rounding_mode::to_nearest); + detail::FloatState const rm(Number::RoundingMode::to_nearest); detail::WasmNumber const num(data); if (!num) { @@ -150,18 +161,18 @@ floatFromIntImpl(int64_t x, int32_t mode) { detail::FloatState const rm(mode); if (!rm) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const num(x); if (!num) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); // LCOV_EXCL_LINE + return Unexpected(HostFunctionError::FloatInputMalformed); // LCOV_EXCL_LINE auto const r = num.toBytes(); return r; } // LCOV_EXCL_START catch (...) { - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + return Unexpected(HostFunctionError::FloatComputationError); } // LCOV_EXCL_STOP } @@ -173,18 +184,18 @@ floatFromUintImpl(uint64_t x, int32_t mode) { detail::FloatState const rm(mode); if (!rm) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const num(x); if (!num) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); // LCOV_EXCL_LINE + return Unexpected(HostFunctionError::FloatInputMalformed); // LCOV_EXCL_LINE auto const r = num.toBytes(); return r; } // LCOV_EXCL_START catch (...) { - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + return Unexpected(HostFunctionError::FloatComputationError); } // LCOV_EXCL_STOP } @@ -196,18 +207,18 @@ floatFromSTAmountImpl(STAmount const& x, int32_t mode) { detail::FloatState const rm(mode); if (!rm) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const num(static_cast(x)); if (!num) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); // LCOV_EXCL_LINE + return Unexpected(HostFunctionError::FloatInputMalformed); // LCOV_EXCL_LINE auto const r = num.toBytes(); return r; } // LCOV_EXCL_START catch (...) { - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + return Unexpected(HostFunctionError::FloatComputationError); } // LCOV_EXCL_STOP } @@ -219,18 +230,18 @@ floatFromSTNumberImpl(STNumber const& x, int32_t mode) { detail::FloatState const rm(mode); if (!rm) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const num(x.value()); if (!num) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); // LCOV_EXCL_LINE + return Unexpected(HostFunctionError::FloatInputMalformed); // LCOV_EXCL_LINE auto const r = num.toBytes(); return r; } // LCOV_EXCL_START catch (...) { - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + return Unexpected(HostFunctionError::FloatComputationError); } // LCOV_EXCL_STOP } @@ -242,18 +253,18 @@ floatToIntImpl(Slice const& x, int32_t mode) { detail::FloatState const rm(mode); if (!rm) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const num(x); if (!num) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); // LCOV_EXCL_LINE + return Unexpected(HostFunctionError::FloatInputMalformed); // LCOV_EXCL_LINE int64_t const r(num); return r; } // LCOV_EXCL_START catch (...) { - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + return Unexpected(HostFunctionError::FloatComputationError); } // LCOV_EXCL_STOP } @@ -263,20 +274,20 @@ floatToMantExpImpl(Slice const& x) { try { - detail::FloatState const rm(Number::rounding_mode::to_nearest); + detail::FloatState const rm(Number::RoundingMode::to_nearest); if (!rm) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const num(x); if (!num) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); // LCOV_EXCL_LINE + return Unexpected(HostFunctionError::FloatInputMalformed); // LCOV_EXCL_LINE return FloatPair(num.mantissa(), num.exponent()); } // LCOV_EXCL_START catch (...) { - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + return Unexpected(HostFunctionError::FloatComputationError); } // LCOV_EXCL_STOP } @@ -288,15 +299,15 @@ floatFromMantExpImpl(int64_t mantissa, int32_t exponent, int32_t mode) { detail::FloatState const rm(mode); if (!rm) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const num(mantissa, exponent); if (!num) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); return num.toBytes(); } catch (...) { - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + return Unexpected(HostFunctionError::FloatComputationError); } } @@ -306,14 +317,14 @@ floatCompareImpl(Slice const& x, Slice const& y) try { // set default mode as we don't expect it will be used here - detail::FloatState const rm(Number::rounding_mode::to_nearest); + detail::FloatState const rm(Number::RoundingMode::to_nearest); detail::WasmNumber const xx(x); if (!xx) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const yy(y); if (!yy) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); if (xx < yy) return 2; if (xx == yy) @@ -323,7 +334,7 @@ floatCompareImpl(Slice const& x, Slice const& y) // LCOV_EXCL_START catch (...) { - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + return Unexpected(HostFunctionError::FloatComputationError); } // LCOV_EXCL_STOP } @@ -335,14 +346,14 @@ floatAddImpl(Slice const& x, Slice const& y, int32_t mode) { detail::FloatState const rm(mode); if (!rm) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const xx(x); if (!xx) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const yy(y); if (!yy) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const res = xx + yy; return res.toBytes(); @@ -350,7 +361,7 @@ floatAddImpl(Slice const& x, Slice const& y, int32_t mode) // LCOV_EXCL_START catch (...) { - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + return Unexpected(HostFunctionError::FloatComputationError); } // LCOV_EXCL_STOP } @@ -362,13 +373,13 @@ floatSubtractImpl(Slice const& x, Slice const& y, int32_t mode) { detail::FloatState const rm(mode); if (!rm) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const xx(x); if (!xx) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const yy(y); if (!yy) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const res = xx - yy; return res.toBytes(); @@ -376,7 +387,7 @@ floatSubtractImpl(Slice const& x, Slice const& y, int32_t mode) // LCOV_EXCL_START catch (...) { - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + return Unexpected(HostFunctionError::FloatComputationError); } // LCOV_EXCL_STOP } @@ -388,13 +399,13 @@ floatMultiplyImpl(Slice const& x, Slice const& y, int32_t mode) { detail::FloatState const rm(mode); if (!rm) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const xx(x); if (!xx) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const yy(y); if (!yy) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const res = xx * yy; return res.toBytes(); @@ -402,7 +413,7 @@ floatMultiplyImpl(Slice const& x, Slice const& y, int32_t mode) // LCOV_EXCL_START catch (...) { - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + return Unexpected(HostFunctionError::FloatComputationError); } // LCOV_EXCL_STOP } @@ -414,20 +425,20 @@ floatDivideImpl(Slice const& x, Slice const& y, int32_t mode) { detail::FloatState const rm(mode); if (!rm) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const xx(x); if (!xx) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const yy(y); if (!yy) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const res = xx / yy; return res.toBytes(); } catch (...) { - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + return Unexpected(HostFunctionError::FloatComputationError); } } @@ -437,15 +448,15 @@ floatRootImpl(Slice const& x, int32_t n, int32_t mode) try { if (n < 1) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); detail::FloatState const rm(mode); if (!rm) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const xx(x); if (!xx) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const res(root(xx, n)); @@ -454,7 +465,7 @@ floatRootImpl(Slice const& x, int32_t n, int32_t mode) // LCOV_EXCL_START catch (...) { - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + return Unexpected(HostFunctionError::FloatComputationError); } // LCOV_EXCL_STOP } @@ -464,18 +475,18 @@ floatPowerImpl(Slice const& x, int32_t n, int32_t mode) { try { - if ((n < 0) || (n > Number::maxExponent)) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + if ((n < 0) || (n > Number::kMaxExponent)) + return Unexpected(HostFunctionError::FloatInputMalformed); detail::FloatState const rm(mode); if (!rm) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const xx(x); if (!xx) - return Unexpected(HostFunctionError::FLOAT_INPUT_MALFORMED); + return Unexpected(HostFunctionError::FloatInputMalformed); if (xx == Number() && (n == 0)) - return Unexpected(HostFunctionError::INVALID_PARAMS); + return Unexpected(HostFunctionError::InvalidParams); detail::WasmNumber const res(power(xx, n, 1)); @@ -484,7 +495,7 @@ floatPowerImpl(Slice const& x, int32_t n, int32_t mode) // LCOV_EXCL_START catch (...) { - return Unexpected(HostFunctionError::FLOAT_COMPUTATION_ERROR); + return Unexpected(HostFunctionError::FloatComputationError); } // LCOV_EXCL_STOP } diff --git a/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp index 0053af3400..a9aefd885e 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp @@ -1,10 +1,27 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include #include +#include + +#include +#include +#include +#include namespace xrpl { -typedef std::variant FieldValue; +using FieldValue = std::variant; template Bytes @@ -23,7 +40,7 @@ static Expected getAnyFieldData(STBase const* obj) { if (obj == nullptr) - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + return Unexpected(HostFunctionError::FieldNotFound); auto const stype = obj->getSType(); switch (stype) @@ -31,13 +48,13 @@ getAnyFieldData(STBase const* obj) // LCOV_EXCL_START case STI_UNKNOWN: case STI_NOTPRESENT: - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + return Unexpected(HostFunctionError::FieldNotFound); // LCOV_EXCL_STOP case STI_OBJECT: case STI_ARRAY: case STI_VECTOR256: - return Unexpected(HostFunctionError::NOT_LEAF_FIELD); + return Unexpected(HostFunctionError::NotLeafField); case STI_ACCOUNT: { auto const* account(static_cast(obj)); // NOLINT @@ -125,7 +142,7 @@ static Expected locateField(STObject const& obj, Slice const& locator) { if (locator.empty() || ((locator.size() & 3) != 0u)) // must be multiple of 4 - return Unexpected(HostFunctionError::LOCATOR_MALFORMED); + return Unexpected(HostFunctionError::LocatorMalformed); static_assert(maxWasmParamLength % sizeof(int32_t) == 0); int32_t locBuf[maxWasmParamLength / sizeof(int32_t)]; @@ -151,12 +168,12 @@ locateField(STObject const& obj, Slice const& locator) int32_t const sfieldCode = adjustWasmEndianess(locPtr[0]); auto const it = knownSFields.find(sfieldCode); if (it == knownSFields.end()) - return Unexpected(HostFunctionError::INVALID_FIELD); + return Unexpected(HostFunctionError::InvalidField); auto const& fname(*it->second); field = obj.peekAtPField(fname); if (noField(field)) - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + return Unexpected(HostFunctionError::FieldNotFound); } for (int i = 1; i < locSize; ++i) @@ -167,7 +184,7 @@ locateField(STObject const& obj, Slice const& locator) { auto const* arr = static_cast(field); // NOLINT if (sfieldCode < 0 || std::cmp_greater_equal(sfieldCode, arr->size())) - return Unexpected(HostFunctionError::INDEX_OUT_OF_BOUNDS); + return Unexpected(HostFunctionError::IndexOutOfBounds); field = &(arr->operator[](sfieldCode)); } else if (STI_OBJECT == field->getSType()) @@ -176,7 +193,7 @@ locateField(STObject const& obj, Slice const& locator) auto const it = knownSFields.find(sfieldCode); if (it == knownSFields.end()) - return Unexpected(HostFunctionError::INVALID_FIELD); + return Unexpected(HostFunctionError::InvalidField); auto const& fname(*it->second); field = o->peekAtPField(fname); @@ -185,16 +202,16 @@ locateField(STObject const& obj, Slice const& locator) { auto const* v = static_cast(field); // NOLINT if (sfieldCode < 0 || std::cmp_greater_equal(sfieldCode, v->size())) - return Unexpected(HostFunctionError::INDEX_OUT_OF_BOUNDS); + return Unexpected(HostFunctionError::IndexOutOfBounds); return FieldValue(&(v->operator[](sfieldCode))); } else // simple field must be the last one { - return Unexpected(HostFunctionError::LOCATOR_MALFORMED); + return Unexpected(HostFunctionError::LocatorMalformed); } if (noField(field)) - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + return Unexpected(HostFunctionError::FieldNotFound); } return FieldValue(field); @@ -212,19 +229,19 @@ getArrayLen(FieldValue const& variantField) } // uint256 is not an array so that variant should still return NO_ARRAY - return Unexpected(HostFunctionError::NO_ARRAY); // LCOV_EXCL_LINE + return Unexpected(HostFunctionError::NoArray); // LCOV_EXCL_LINE } Expected WasmHostFunctionsImpl::cacheLedgerObj(uint256 const& objId, int32_t cacheIdx) { auto const& keylet = keylet::unchecked(objId); - if (cacheIdx < 0 || cacheIdx > MAX_CACHE) - return Unexpected(HostFunctionError::SLOT_OUT_RANGE); + if (cacheIdx < 0 || cacheIdx > maxCache) + return Unexpected(HostFunctionError::SlotOutRange); if (cacheIdx == 0) { - for (cacheIdx = 0; cacheIdx < MAX_CACHE; ++cacheIdx) + for (cacheIdx = 0; cacheIdx < maxCache; ++cacheIdx) { if (!cache_[cacheIdx]) break; @@ -235,12 +252,12 @@ WasmHostFunctionsImpl::cacheLedgerObj(uint256 const& objId, int32_t cacheIdx) cacheIdx--; // convert to 0-based index } - if (cacheIdx >= MAX_CACHE) - return Unexpected(HostFunctionError::SLOTS_FULL); + if (cacheIdx >= maxCache) + return Unexpected(HostFunctionError::SlotsFull); cache_[cacheIdx] = ctx_.view().read(keylet); if (!cache_[cacheIdx]) - return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); + return Unexpected(HostFunctionError::LedgerObjNotFound); return cacheIdx + 1; // return 1-based index } @@ -316,11 +333,11 @@ Expected WasmHostFunctionsImpl::getTxArrayLen(SField const& fname) const { if (fname.fieldType != STI_ARRAY && fname.fieldType != STI_VECTOR256) - return Unexpected(HostFunctionError::NO_ARRAY); + return Unexpected(HostFunctionError::NoArray); auto const* field = ctx_.tx.peekAtPField(fname); if (noField(field)) - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + return Unexpected(HostFunctionError::FieldNotFound); return getArrayLen(field); } @@ -329,7 +346,7 @@ Expected WasmHostFunctionsImpl::getCurrentLedgerObjArrayLen(SField const& fname) const { if (fname.fieldType != STI_ARRAY && fname.fieldType != STI_VECTOR256) - return Unexpected(HostFunctionError::NO_ARRAY); + return Unexpected(HostFunctionError::NoArray); auto const sle = getCurrentLedgerObj(); if (!sle.has_value()) @@ -337,7 +354,7 @@ WasmHostFunctionsImpl::getCurrentLedgerObjArrayLen(SField const& fname) const auto const* field = sle.value()->peekAtPField(fname); if (noField(field)) - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + return Unexpected(HostFunctionError::FieldNotFound); return getArrayLen(field); } @@ -346,7 +363,7 @@ Expected WasmHostFunctionsImpl::getLedgerObjArrayLen(int32_t cacheIdx, SField const& fname) const { if (fname.fieldType != STI_ARRAY && fname.fieldType != STI_VECTOR256) - return Unexpected(HostFunctionError::NO_ARRAY); + return Unexpected(HostFunctionError::NoArray); auto const normalizedIdx = normalizeCacheIndex(cacheIdx); if (!normalizedIdx.has_value()) @@ -354,7 +371,7 @@ WasmHostFunctionsImpl::getLedgerObjArrayLen(int32_t cacheIdx, SField const& fnam auto const* field = cache_[normalizedIdx.value()]->peekAtPField(fname); if (noField(field)) - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + return Unexpected(HostFunctionError::FieldNotFound); return getArrayLen(field); } diff --git a/src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp b/src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp index 8953790464..e9d54d89fa 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp @@ -1,6 +1,17 @@ -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include + +#include namespace xrpl { @@ -8,7 +19,7 @@ Expected WasmHostFunctionsImpl::accountKeylet(AccountID const& account) const { if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); + return Unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::account(account); return Bytes{keylet.key.begin(), keylet.key.end()}; } @@ -17,11 +28,11 @@ Expected WasmHostFunctionsImpl::ammKeylet(Asset const& issue1, Asset const& issue2) const { if (issue1 == issue2) - return Unexpected(HostFunctionError::INVALID_PARAMS); + return Unexpected(HostFunctionError::InvalidParams); // note: this should be removed with the MPT DEX amendment if (issue1.holds() || issue2.holds()) - return Unexpected(HostFunctionError::INVALID_PARAMS); + return Unexpected(HostFunctionError::InvalidParams); auto const keylet = keylet::amm(issue1, issue2); return Bytes{keylet.key.begin(), keylet.key.end()}; @@ -31,7 +42,7 @@ Expected WasmHostFunctionsImpl::checkKeylet(AccountID const& account, std::uint32_t seq) const { if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); + return Unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::check(account, seq); return Bytes{keylet.key.begin(), keylet.key.end()}; } @@ -43,10 +54,10 @@ WasmHostFunctionsImpl::credentialKeylet( Slice const& credentialType) const { if (!subject || !issuer) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); + return Unexpected(HostFunctionError::InvalidAccount); - if (credentialType.empty() || credentialType.size() > maxCredentialTypeLength) - return Unexpected(HostFunctionError::INVALID_PARAMS); + if (credentialType.empty() || credentialType.size() > kMaxCredentialTypeLength) + return Unexpected(HostFunctionError::InvalidParams); auto const keylet = keylet::credential(subject, issuer, credentialType); @@ -57,7 +68,7 @@ Expected WasmHostFunctionsImpl::didKeylet(AccountID const& account) const { if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); + return Unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::did(account); return Bytes{keylet.key.begin(), keylet.key.end()}; } @@ -66,9 +77,9 @@ Expected WasmHostFunctionsImpl::delegateKeylet(AccountID const& account, AccountID const& authorize) const { if (!account || !authorize) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); + return Unexpected(HostFunctionError::InvalidAccount); if (account == authorize) - return Unexpected(HostFunctionError::INVALID_PARAMS); + return Unexpected(HostFunctionError::InvalidParams); auto const keylet = keylet::delegate(account, authorize); return Bytes{keylet.key.begin(), keylet.key.end()}; } @@ -78,9 +89,9 @@ WasmHostFunctionsImpl::depositPreauthKeylet(AccountID const& account, AccountID const { if (!account || !authorize) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); + return Unexpected(HostFunctionError::InvalidAccount); if (account == authorize) - return Unexpected(HostFunctionError::INVALID_PARAMS); + return Unexpected(HostFunctionError::InvalidParams); auto const keylet = keylet::depositPreauth(account, authorize); return Bytes{keylet.key.begin(), keylet.key.end()}; } @@ -89,7 +100,7 @@ Expected WasmHostFunctionsImpl::escrowKeylet(AccountID const& account, std::uint32_t seq) const { if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); + return Unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::escrow(account, seq); return Bytes{keylet.key.begin(), keylet.key.end()}; } @@ -101,11 +112,11 @@ WasmHostFunctionsImpl::lineKeylet( Currency const& currency) const { if (!account1 || !account2) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); + return Unexpected(HostFunctionError::InvalidAccount); if (account1 == account2) - return Unexpected(HostFunctionError::INVALID_PARAMS); + return Unexpected(HostFunctionError::InvalidParams); if (currency.isZero()) - return Unexpected(HostFunctionError::INVALID_PARAMS); + return Unexpected(HostFunctionError::InvalidParams); auto const keylet = keylet::line(account1, account2, currency); return Bytes{keylet.key.begin(), keylet.key.end()}; @@ -115,7 +126,7 @@ Expected WasmHostFunctionsImpl::mptIssuanceKeylet(AccountID const& issuer, std::uint32_t seq) const { if (!issuer) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); + return Unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::mptIssuance(seq, issuer); return Bytes{keylet.key.begin(), keylet.key.end()}; @@ -125,9 +136,9 @@ Expected WasmHostFunctionsImpl::mptokenKeylet(MPTID const& mptid, AccountID const& holder) const { if (!mptid) - return Unexpected(HostFunctionError::INVALID_PARAMS); + return Unexpected(HostFunctionError::InvalidParams); if (!holder) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); + return Unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::mptoken(mptid, holder); return Bytes{keylet.key.begin(), keylet.key.end()}; @@ -137,7 +148,7 @@ Expected WasmHostFunctionsImpl::nftOfferKeylet(AccountID const& account, std::uint32_t seq) const { if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); + return Unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::nftoffer(account, seq); return Bytes{keylet.key.begin(), keylet.key.end()}; } @@ -146,7 +157,7 @@ Expected WasmHostFunctionsImpl::offerKeylet(AccountID const& account, std::uint32_t seq) const { if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); + return Unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::offer(account, seq); return Bytes{keylet.key.begin(), keylet.key.end()}; } @@ -155,7 +166,7 @@ Expected WasmHostFunctionsImpl::oracleKeylet(AccountID const& account, std::uint32_t documentId) const { if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); + return Unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::oracle(account, documentId); return Bytes{keylet.key.begin(), keylet.key.end()}; } @@ -167,9 +178,9 @@ WasmHostFunctionsImpl::paychanKeylet( std::uint32_t seq) const { if (!account || !destination) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); + return Unexpected(HostFunctionError::InvalidAccount); if (account == destination) - return Unexpected(HostFunctionError::INVALID_PARAMS); + return Unexpected(HostFunctionError::InvalidParams); auto const keylet = keylet::payChan(account, destination, seq); return Bytes{keylet.key.begin(), keylet.key.end()}; } @@ -178,7 +189,7 @@ Expected WasmHostFunctionsImpl::permissionedDomainKeylet(AccountID const& account, std::uint32_t seq) const { if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); + return Unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::permissionedDomain(account, seq); return Bytes{keylet.key.begin(), keylet.key.end()}; } @@ -187,7 +198,7 @@ Expected WasmHostFunctionsImpl::signersKeylet(AccountID const& account) const { if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); + return Unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::signers(account); return Bytes{keylet.key.begin(), keylet.key.end()}; } @@ -196,8 +207,8 @@ Expected WasmHostFunctionsImpl::ticketKeylet(AccountID const& account, std::uint32_t seq) const { if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); - auto const keylet = keylet::ticket(account, seq); + return Unexpected(HostFunctionError::InvalidAccount); + auto const keylet = jss::ticket(account, seq); return Bytes{keylet.key.begin(), keylet.key.end()}; } @@ -205,7 +216,7 @@ Expected WasmHostFunctionsImpl::vaultKeylet(AccountID const& account, std::uint32_t seq) const { if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); + return Unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::vault(account, seq); return Bytes{keylet.key.begin(), keylet.key.end()}; } diff --git a/src/libxrpl/tx/wasm/HostFuncImplLedgerHeader.cpp b/src/libxrpl/tx/wasm/HostFuncImplLedgerHeader.cpp index c8e38f6805..91092ba8d0 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplLedgerHeader.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplLedgerHeader.cpp @@ -1,6 +1,13 @@ +#include +#include #include -#include +#include #include +#include + +#include +#include +#include namespace xrpl { diff --git a/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp b/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp index 510d6a886f..b312ab7098 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp @@ -1,7 +1,15 @@ +#include +#include +#include #include -#include -#include +#include +#include +#include +#include #include +#include + +#include namespace xrpl { @@ -13,18 +21,18 @@ Expected WasmHostFunctionsImpl::getNFT(AccountID const& account, uint256 const& nftId) const { if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); + return Unexpected(HostFunctionError::InvalidAccount); if (!nftId) - return Unexpected(HostFunctionError::INVALID_PARAMS); + return Unexpected(HostFunctionError::InvalidParams); auto obj = nft::findToken(ctx_.view(), account, nftId); if (!obj) - return Unexpected(HostFunctionError::LEDGER_OBJ_NOT_FOUND); + return Unexpected(HostFunctionError::LedgerObjNotFound); auto objUri = obj->at(~sfURI); if (!objUri) - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + return Unexpected(HostFunctionError::FieldNotFound); Slice const s = objUri->value(); return Bytes(s.begin(), s.end()); @@ -35,7 +43,7 @@ WasmHostFunctionsImpl::getNFTIssuer(uint256 const& nftId) const { auto const issuer = nft::getIssuer(nftId); if (!issuer) - return Unexpected(HostFunctionError::INVALID_PARAMS); + return Unexpected(HostFunctionError::InvalidParams); return Bytes{issuer.begin(), issuer.end()}; } diff --git a/src/libxrpl/tx/wasm/HostFuncImplTrace.cpp b/src/libxrpl/tx/wasm/HostFuncImplTrace.cpp index 33f9dc8e2b..0f9ee2e64c 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplTrace.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplTrace.cpp @@ -1,7 +1,17 @@ -#include -#include +#include +#include +#include +#include +#include #include +#include + +#include +#include +#include +#include + #ifdef _DEBUG // #define DEBUG_OUTPUT 1 #endif diff --git a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp index a882204f51..b303fcc47e 100644 --- a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp +++ b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp @@ -1,15 +1,37 @@ +#include + +#include +#include +#include +#include #include +#include #include #include +#include +#include #include #include #include #include +#include +#include #include #include -#include +#include #include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include #include namespace xrpl { @@ -28,21 +50,21 @@ setData( return 0; // LCOV_EXCL_LINE if (dst < 0 || dstSize < 0 || (src == nullptr) || srcSize < 0) - return HfErrorToInt(HostFunctionError::INVALID_PARAMS); + return HfErrorToInt(HostFunctionError::InvalidParams); if (srcSize > maxWasmDataLength) - return HfErrorToInt(HostFunctionError::DATA_FIELD_TOO_LARGE); + return HfErrorToInt(HostFunctionError::DataFieldTooLarge); - auto const memory = (runtime != nullptr) ? runtime->getMem() : wmem(); + auto const memory = (runtime != nullptr) ? runtime->getMem() : Wmem(); // LCOV_EXCL_START if (memory.s == 0u) - return HfErrorToInt(HostFunctionError::NO_MEM_EXPORTED); + return HfErrorToInt(HostFunctionError::NoMemExported); // LCOV_EXCL_STOP if ((int64_t)dst + dstSize > memory.s) - return HfErrorToInt(HostFunctionError::POINTER_OUT_OF_BOUNDS); + return HfErrorToInt(HostFunctionError::PointerOutOfBounds); if (srcSize > dstSize) - return HfErrorToInt(HostFunctionError::BUFFER_TOO_SMALL); + return HfErrorToInt(HostFunctionError::BufferTooSmall); memcpy(memory.p + dst, src, srcSize); @@ -76,7 +98,7 @@ getDataUnsigned(IW* runtime, wasm_val_vec_t const* params, int32_t& i) if (!r) return Unexpected(r.error()); if (r->size() != sizeof(T)) - return Unexpected(HostFunctionError::INVALID_PARAMS); + return Unexpected(HostFunctionError::InvalidParams); T x; uintptr_t const p = reinterpret_cast(r->data()); @@ -116,7 +138,7 @@ getDataSField(IW* runtime, wasm_val_vec_t const* params, int32_t& i) i++; if (it == m.end()) { - return Unexpected(HostFunctionError::INVALID_FIELD); + return Unexpected(HostFunctionError::InvalidField); } return *it->second; } @@ -129,22 +151,22 @@ getDataSlice(IW* runtime, wasm_val_vec_t const* params, int32_t& i, bool isUpdat int64_t const size = params->data[i + 1].of.i32; i += 2; if (ptr < 0 || size < 0) - return Unexpected(HostFunctionError::INVALID_PARAMS); + return Unexpected(HostFunctionError::InvalidParams); if (!size) return Slice(); if (size > (isUpdate ? maxWasmDataLength : maxWasmParamLength)) - return Unexpected(HostFunctionError::DATA_FIELD_TOO_LARGE); + return Unexpected(HostFunctionError::DataFieldTooLarge); - auto const memory = runtime ? runtime->getMem() : wmem(); + auto const memory = runtime ? runtime->getMem() : Wmem(); // LCOV_EXCL_START if (!memory.s) - return Unexpected(HostFunctionError::NO_MEM_EXPORTED); + return Unexpected(HostFunctionError::NoMemExported); // LCOV_EXCL_STOP if (ptr + size > memory.s) - return Unexpected(HostFunctionError::POINTER_OUT_OF_BOUNDS); + return Unexpected(HostFunctionError::PointerOutOfBounds); Slice data(memory.p + ptr, size); return data; @@ -160,9 +182,9 @@ getDataUInt256(IW* runtime, wasm_val_vec_t const* params, int32_t& i) return Unexpected(slice.error()); } - if (slice->size() != uint256::bytes) + if (slice->size() != Bytes) { - return Unexpected(HostFunctionError::INVALID_PARAMS); + return Unexpected(HostFunctionError::InvalidParams); } return uint256::fromVoid(slice->data()); } @@ -177,9 +199,9 @@ getDataAccountID(IW* runtime, wasm_val_vec_t const* params, int32_t& i) return Unexpected(slice.error()); } - if (slice->size() != AccountID::bytes) + if (slice->size() != Bytes) { - return Unexpected(HostFunctionError::INVALID_PARAMS); + return Unexpected(HostFunctionError::InvalidParams); } return AccountID::fromVoid(slice->data()); @@ -195,9 +217,9 @@ getDataCurrency(IW* runtime, wasm_val_vec_t const* params, int32_t& i) return Unexpected(slice.error()); } - if (slice->size() != Currency::bytes) + if (slice->size() != Bytes) { - return Unexpected(HostFunctionError::INVALID_PARAMS); + return Unexpected(HostFunctionError::InvalidParams); } return Currency::fromVoid(slice->data()); @@ -213,33 +235,32 @@ getDataAsset(IW* runtime, wasm_val_vec_t const* params, int32_t& i) return Unexpected(slice.error()); } - if (slice->size() == MPTID::bytes) + if (slice->size() == Bytes) { auto const mptid = MPTID::fromVoid(slice->data()); return Asset{mptid}; } - if (slice->size() == Currency::bytes) + if (slice->size() == Bytes) { auto const currency = Currency::fromVoid(slice->data()); auto const issue = Issue{currency, xrpAccount()}; if (!issue.native()) - return Unexpected(HostFunctionError::INVALID_PARAMS); + return Unexpected(HostFunctionError::InvalidParams); return Asset{issue}; } - if (slice->size() == (AccountID::bytes + Currency::bytes)) + if (slice->size() == (Bytes + Bytes)) { - auto const issue = Issue( - Currency::fromVoid(slice->data()), - AccountID::fromVoid(slice->data() + Currency::bytes)); + auto const issue = + Issue(Currency::fromVoid(slice->data()), AccountID::fromVoid(slice->data() + Bytes)); if (issue.native()) - return Unexpected(HostFunctionError::INVALID_PARAMS); + return Unexpected(HostFunctionError::InvalidParams); return Asset{issue}; } - return Unexpected(HostFunctionError::INVALID_PARAMS); + return Unexpected(HostFunctionError::InvalidParams); } template @@ -486,7 +507,7 @@ isAmendmentEnabled_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* return hfResult(results, slice.error()); } - if (slice->size() == uint256::bytes) + if (slice->size() == Bytes) { if (auto const ret = hf->isAmendmentEnabled(uint256::fromVoid(slice->data())); ret && *ret == 1) @@ -496,7 +517,7 @@ isAmendmentEnabled_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* if (slice->size() > 64) { - return hfResult(results, HostFunctionError::DATA_FIELD_TOO_LARGE); + return hfResult(results, HostFunctionError::DataFieldTooLarge); } auto const str = std::string_view(reinterpret_cast(slice->data()), slice->size()); @@ -1104,9 +1125,9 @@ mptokenKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu return hfResult(results, slice.error()); } - if (slice->size() != MPTID::bytes) + if (slice->size() != Bytes) { - return hfResult(results, HostFunctionError::INVALID_PARAMS); + return hfResult(results, HostFunctionError::InvalidParams); } auto const mptid = MPTID::fromVoid(slice->data()); @@ -1440,12 +1461,12 @@ trace_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) int64_t const len = (int64_t)params->data[1].of.i32 + params->data[3].of.i32; if (len < 0) { - return hfResult(results, HostFunctionError::INVALID_PARAMS); + return hfResult(results, HostFunctionError::InvalidParams); } if (std::cmp_greater(len, maxWasmParamLength)) { - return hfResult(results, HostFunctionError::DATA_FIELD_TOO_LARGE); + return hfResult(results, HostFunctionError::DataFieldTooLarge); } auto const msg = getDataString(runtime, params, index); @@ -1468,7 +1489,7 @@ trace_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) if (*asHex != 0 && *asHex != 1) { - return hfResult(results, HostFunctionError::INVALID_PARAMS); + return hfResult(results, HostFunctionError::InvalidParams); } return returnResult(runtime, params, results, hf->trace(*msg, *data, *asHex != 0), index); @@ -1486,12 +1507,12 @@ traceNum_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) int32_t const len = params->data[1].of.i32; if (len < 0) { - return hfResult(results, HostFunctionError::INVALID_PARAMS); + return hfResult(results, HostFunctionError::InvalidParams); } if (std::cmp_greater(len, maxWasmParamLength)) { - return hfResult(results, HostFunctionError::DATA_FIELD_TOO_LARGE); + return hfResult(results, HostFunctionError::DataFieldTooLarge); } auto const msg = getDataString(runtime, params, index); @@ -1520,12 +1541,12 @@ traceAccount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul int32_t const len = params->data[1].of.i32; if (len < 0) { - return hfResult(results, HostFunctionError::INVALID_PARAMS); + return hfResult(results, HostFunctionError::InvalidParams); } if (std::cmp_greater(len, maxWasmParamLength)) { - return hfResult(results, HostFunctionError::DATA_FIELD_TOO_LARGE); + return hfResult(results, HostFunctionError::DataFieldTooLarge); } int i = 0; @@ -1555,12 +1576,12 @@ traceFloat_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results int32_t const len = params->data[1].of.i32; if (len < 0) { - return hfResult(results, HostFunctionError::INVALID_PARAMS); + return hfResult(results, HostFunctionError::InvalidParams); } if (std::cmp_greater(len, maxWasmParamLength)) { - return hfResult(results, HostFunctionError::DATA_FIELD_TOO_LARGE); + return hfResult(results, HostFunctionError::DataFieldTooLarge); } int i = 0; @@ -1590,12 +1611,12 @@ traceAmount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result int32_t const len = params->data[1].of.i32; if (len < 0) { - return hfResult(results, HostFunctionError::INVALID_PARAMS); + return hfResult(results, HostFunctionError::InvalidParams); } if (std::cmp_greater(len, maxWasmParamLength)) { - return hfResult(results, HostFunctionError::DATA_FIELD_TOO_LARGE); + return hfResult(results, HostFunctionError::DataFieldTooLarge); } int i = 0; @@ -1617,7 +1638,7 @@ traceAmount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result std::optional amount; try { - amount = STAmount(serialIter, sfGeneric); + amount = STAmount(serialIter, kSfGeneric); } catch (std::exception const&) { @@ -1626,7 +1647,7 @@ traceAmount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result if (!amount) { - return hfResult(results, HostFunctionError::INVALID_PARAMS); + return hfResult(results, HostFunctionError::InvalidParams); } return returnResult(runtime, params, results, hf->traceAmount(*msg, *amount), i); @@ -1693,14 +1714,14 @@ floatFromSTAmount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* std::optional amount; try { - amount = STAmount(serialIter, sfGeneric); + amount = STAmount(serialIter, kSfGeneric); } catch (std::exception const&) { amount = std::nullopt; } if (!amount) - return hfResult(results, HostFunctionError::INVALID_PARAMS); + return hfResult(results, HostFunctionError::InvalidParams); i = 4; auto const rounding = getDataInt32(runtime, params, i); @@ -1728,14 +1749,14 @@ floatFromSTNumber_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* std::optional num; try { - num = STNumber(serialIter, sfGeneric); + num = STNumber(serialIter, kSfGeneric); } catch (std::exception const&) { num = std::nullopt; } if (!num) - return hfResult(results, HostFunctionError::INVALID_PARAMS); + return hfResult(results, HostFunctionError::InvalidParams); i = 4; auto const rounding = getDataInt32(runtime, params, i); @@ -1993,15 +2014,15 @@ namespace test { class MockWasmRuntimeWrapper { - wmem mem_; + Wmem mem_; public: - MockWasmRuntimeWrapper(wmem memory) : mem_(memory) + MockWasmRuntimeWrapper(Wmem memory) : mem_(memory) { } // Mock methods to simulate the behavior of WasmRuntimeWrapper - wmem + [[nodiscard]] Wmem getMem() const { return mem_; @@ -2014,7 +2035,7 @@ testGetDataIncrement() wasm_val_t values[4]; std::array buffer = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'}; - MockWasmRuntimeWrapper runtime(wmem{buffer.data(), buffer.size()}); + MockWasmRuntimeWrapper runtime(Wmem{.p = buffer.data(), .s = buffer.size()}); { // test int32_t @@ -2083,7 +2104,7 @@ testGetDataIncrement() { // test account AccountID const id( - calcAccountID(generateKeyPair(KeyType::secp256k1, generateSeed("alice")).first)); + calcAccountID(generateKeyPair(KeyType::Secp256k1, generateSeed("alice")).first)); wasm_val_vec_t const params = {2, &values[0]}; @@ -2123,7 +2144,7 @@ testGetDataIncrement() values[1] = WASM_I32_VAL(c.bytes); memcpy(&buffer[0], c.data(), c.bytes); - int index = 0; + int const index = 0; auto const result = getDataCurrency(&runtime, ¶ms, index); if (!result || result.value() != c || index != 2) return false; diff --git a/src/libxrpl/tx/wasm/WasmVM.cpp b/src/libxrpl/tx/wasm/WasmVM.cpp index 137b2c9f83..9dd0d2c736 100644 --- a/src/libxrpl/tx/wasm/WasmVM.cpp +++ b/src/libxrpl/tx/wasm/WasmVM.cpp @@ -1,13 +1,18 @@ +#include + +#include +#include +#include +#include + +#include +#include +#include #ifdef _DEBUG // #define DEBUG_OUTPUT 1 #endif -#include -#include -#include -#include #include -#include #include #include diff --git a/src/libxrpl/tx/wasm/WasmiVM.cpp b/src/libxrpl/tx/wasm/WasmiVM.cpp index 2ea7363fe3..a961f8bc16 100644 --- a/src/libxrpl/tx/wasm/WasmiVM.cpp +++ b/src/libxrpl/tx/wasm/WasmiVM.cpp @@ -1,7 +1,31 @@ -#include #include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include #ifdef _DEBUG // #define DEBUG_OUTPUT 1 @@ -13,7 +37,7 @@ namespace xrpl { namespace { void -print_wasm_error(std::string_view msg, wasm_trap_t* trap, beast::Journal jlog) +printWasmError(std::string_view msg, wasm_trap_t* trap, beast::Journal jlog) { #ifdef DEBUG_OUTPUT auto& j = std::cerr; @@ -22,23 +46,23 @@ print_wasm_error(std::string_view msg, wasm_trap_t* trap, beast::Journal jlog) if (jlog.active(beast::severities::kWarning)) #endif { - wasm_byte_vec_t error_message WASM_EMPTY_VEC; + wasm_byte_vec_t errorMessage WASM_EMPTY_VEC; if (trap != nullptr) - wasm_trap_message(trap, &error_message); + wasm_trap_message(trap, &errorMessage); - if (error_message.size != 0u) + if (errorMessage.size != 0u) { j << "WASMI Error: " << msg << ", " - << std::string_view(error_message.data, error_message.size - 1); + << std::string_view(errorMessage.data, errorMessage.size - 1); } else { j << "WASMI Error: " << msg; } - if (error_message.size != 0u) - wasm_byte_vec_delete(&error_message); + if (errorMessage.size != 0u) + wasm_byte_vec_delete(&errorMessage); } if (trap != nullptr) @@ -54,28 +78,28 @@ print_wasm_error(std::string_view msg, wasm_trap_t* trap, beast::Journal jlog) struct WasmiRuntimeWrapper : public WasmRuntimeWrapper { - InstanceWrapper& iw_; + InstanceWrapper& iw; - WasmiRuntimeWrapper(InstanceWrapper& iw) : iw_(iw) + WasmiRuntimeWrapper(InstanceWrapper& iw) : iw(iw) { } - virtual wmem + Wmem getMem() override { - return iw_.getMem(); + return iw.getMem(); } - virtual std::int64_t + std::int64_t getGas() override { - return iw_.getGas(); + return iw.getGas(); } - virtual std::int64_t + std::int64_t setGas(std::int64_t gas) override { - return iw_.setGas(gas); + return iw.setGas(gas); } }; @@ -93,19 +117,19 @@ InstanceWrapper::init( if (!mi || (trap != nullptr)) { - print_wasm_error("can't create instance", trap, j); + printWasmError("can't create instance", trap, j); throw std::runtime_error("can't create instance"); } wasm_instance_exports(mi.get(), expt.get()); return mi; } -InstanceWrapper::InstanceWrapper() : instance_(nullptr, &wasm_instance_delete) +InstanceWrapper::InstanceWrapper() : instance(nullptr, &wasm_instance_delete) { } // LCOV_EXCL_START -InstanceWrapper::InstanceWrapper(InstanceWrapper&& o) : instance_(nullptr, &wasm_instance_delete) +InstanceWrapper::InstanceWrapper(InstanceWrapper&& o) : instance(nullptr, &wasm_instance_delete) { *this = std::move(o); } @@ -116,7 +140,7 @@ InstanceWrapper::InstanceWrapper( ModulePtr& m, WasmExternVec const& imports, beast::Journal j) - : store_(s.get()), instance_(init(s, m, exports_, imports, j)), j_(j) + : store(s.get()), instance(init(s, m, exports, imports, j)), j(j) { } @@ -126,14 +150,14 @@ InstanceWrapper::operator=(InstanceWrapper&& o) if (this == &o) return *this; // LCOV_EXCL_LINE - store_ = o.store_; - o.store_ = nullptr; - exports_ = std::move(o.exports_); - memIdx_ = o.memIdx_; - o.memIdx_ = -1; - instance_ = std::move(o.instance_); + store = o.store; + o.store = nullptr; + exports = std::move(o.exports); + memIdx = o.memIdx; + o.memIdx = -1; + instance = std::move(o.instance); - j_ = o.j_; + j = o.j; return *this; } @@ -141,7 +165,7 @@ InstanceWrapper::operator=(InstanceWrapper&& o) InstanceWrapper:: operator bool() const { - return static_cast(instance_); + return static_cast(instance); } FuncInfo @@ -150,12 +174,12 @@ InstanceWrapper::getFunc(std::string_view funcName, WasmExporttypeVec const& exp wasm_func_t const* f = nullptr; wasm_functype_t const* ft = nullptr; - if (!instance_) + if (!instance) throw std::runtime_error("no instance"); // LCOV_EXCL_LINE if (exportTypes.empty()) throw std::runtime_error("no export"); // LCOV_EXCL_LINE - if (exportTypes.size() != exports_.size()) + if (exportTypes.size() != exports.size()) throw std::runtime_error("invalid export"); // LCOV_EXCL_LINE for (unsigned i = 0; i < exportTypes.size(); ++i) @@ -169,7 +193,7 @@ InstanceWrapper::getFunc(std::string_view funcName, WasmExporttypeVec const& exp if (funcName != std::string_view(name->data, name->size)) continue; - auto const* exn(exports_[i]); + auto const* exn(exports[i]); if (wasm_extern_kind(exn) != WASM_EXTERN_FUNC) throw std::runtime_error("invalid export"); // LCOV_EXCL_LINE @@ -185,23 +209,25 @@ InstanceWrapper::getFunc(std::string_view funcName, WasmExporttypeVec const& exp return {f, ft}; } -wmem +Wmem InstanceWrapper::getMem() const { - if (memIdx_ >= 0) + if (memIdx >= 0) { - auto* e(exports_[memIdx_]); + auto* e(exports[memIdx]); wasm_memory_t* mem = wasm_extern_as_memory(e); - return {reinterpret_cast(wasm_memory_data(mem)), wasm_memory_data_size(mem)}; + return { + .p = reinterpret_cast(wasm_memory_data(mem)), + .s = wasm_memory_data_size(mem)}; } wasm_memory_t* mem = nullptr; - for (int i = 0; i < exports_.size(); ++i) + for (int i = 0; i < exports.size(); ++i) { - auto* e(exports_[i]); + auto* e(exports[i]); if (wasm_extern_kind(e) == WASM_EXTERN_MEMORY) { - memIdx_ = i; + memIdx = i; mem = wasm_extern_as_memory(e); break; } @@ -210,32 +236,34 @@ InstanceWrapper::getMem() const if (mem == nullptr) return {}; // LCOV_EXCL_LINE - return {reinterpret_cast(wasm_memory_data(mem)), wasm_memory_data_size(mem)}; + return { + .p = reinterpret_cast(wasm_memory_data(mem)), + .s = wasm_memory_data_size(mem)}; } std::int64_t InstanceWrapper::getGas() const { - if (store_ == nullptr) + if (store == nullptr) return -1; // LCOV_EXCL_LINE std::uint64_t gas = 0; - wasm_store_get_fuel(store_, &gas); + wasm_store_get_fuel(store, &gas); return static_cast(gas); } std::int64_t InstanceWrapper::setGas(std::int64_t gas) const { - if (store_ == nullptr) + if (store == nullptr) return -1; // LCOV_EXCL_LINE if (gas < 0) gas = std::numeric_limits::max(); - wasmi_error_t* err = wasm_store_set_fuel(store_, static_cast(gas)); + wasmi_error_t* err = wasm_store_set_fuel(store, static_cast(gas)); if (err != nullptr) { // LCOV_EXCL_START - print_wasm_error("Can't set instance gas", nullptr, j_); + printWasmError("Can't set instance gas", nullptr, j); wasmi_error_delete(err); return -1; // LCOV_EXCL_STOP @@ -258,11 +286,11 @@ ModuleWrapper::init(StorePtr& s, Bytes const& wasmBin, beast::Journal j) } // LCOV_EXCL_START -ModuleWrapper::ModuleWrapper() : module_(nullptr, &wasm_module_delete) +ModuleWrapper::ModuleWrapper() : module(nullptr, &wasm_module_delete) { } -ModuleWrapper::ModuleWrapper(ModuleWrapper&& o) : module_(nullptr, &wasm_module_delete) +ModuleWrapper::ModuleWrapper(ModuleWrapper&& o) : module(nullptr, &wasm_module_delete) { *this = std::move(o); } @@ -274,9 +302,9 @@ ModuleWrapper::ModuleWrapper( bool instantiate, ImportVec const& imports, beast::Journal j) - : module_(init(s, wasmBin, j)), j_(j) + : module(init(s, wasmBin, j)), j(j) { - wasm_module_exports(module_.get(), exportTypes_.get()); + wasm_module_exports(module.get(), exportTypes.get()); auto wimports = buildImports(s, imports); if (instantiate) { @@ -291,10 +319,10 @@ ModuleWrapper::operator=(ModuleWrapper&& o) if (this == &o) return *this; - module_ = std::move(o.module_); - instanceWrap_ = std::move(o.instanceWrap_); - exportTypes_ = std::move(o.exportTypes_); - j_ = o.j_; + module = std::move(o.module); + instanceWrap = std::move(o.instanceWrap); + exportTypes = std::move(o.exportTypes); + j = o.j; return *this; } @@ -302,7 +330,7 @@ ModuleWrapper::operator=(ModuleWrapper&& o) ModuleWrapper:: operator bool() const { - return instanceWrap_; + return instanceWrap; } // LCOV_EXCL_STOP @@ -321,10 +349,10 @@ makeImpParams(WasmImportFunc const& imp) auto const vt = imp.params[i]; switch (vt) { - case WT_I32: + case WtI32: v[i] = wasm_valtype_new_i32(); break; - case WT_I64: + case WtI64: v[i] = wasm_valtype_new_i64(); break; // LCOV_EXCL_START @@ -345,11 +373,11 @@ makeImpReturn(WasmImportFunc const& imp) WasmValtypeVec v(1); switch (*imp.result) { - case WT_I32: + case WtI32: v[0] = wasm_valtype_new_i32(); break; // LCOV_EXCL_START - case WT_I64: + case WtI64: v[0] = wasm_valtype_new_i64(); break; default: @@ -363,7 +391,7 @@ WasmExternVec ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) const { WasmImporttypeVec importTypes; - wasm_module_imports(module_.get(), importTypes.get()); + wasm_module_imports(module.get(), importTypes.get()); if (importTypes.empty()) return {}; @@ -396,7 +424,7 @@ ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) const auto const it = imports.find(fieldName); if (it == imports.end()) { - print_wasm_error("Import not found: " + std::string(fieldName), nullptr, j_); + printWasmError("Import not found: " + std::string(fieldName), nullptr, j); continue; // print all missed import } @@ -430,11 +458,11 @@ ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) const if (impCnt != importTypes.size()) { - print_wasm_error( + printWasmError( std::string("Imports not finished: ") + std::to_string(impCnt) + "/" + std::to_string(importTypes.size()), nullptr, - j_); + j); Throw("Missing imports"); } @@ -444,43 +472,43 @@ ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) const FuncInfo ModuleWrapper::getFunc(std::string_view funcName) const { - return instanceWrap_.getFunc(funcName, exportTypes_); + return instanceWrap.getFunc(funcName, exportTypes); } wasm_functype_t* ModuleWrapper::getFuncType(std::string_view funcName) const { - for (size_t i = 0; i < exportTypes_.size(); i++) + for (size_t i = 0; i < exportTypes.size(); i++) { - auto const* exp_type(exportTypes_[i]); - wasm_name_t const* name = wasm_exporttype_name(exp_type); - wasm_externtype_t const* exn_type = wasm_exporttype_type(exp_type); - if (wasm_externtype_kind(exn_type) == WASM_EXTERN_FUNC && + auto const* expType(exportTypes[i]); + wasm_name_t const* name = wasm_exporttype_name(expType); + wasm_externtype_t const* exnType = wasm_exporttype_type(expType); + if (wasm_externtype_kind(exnType) == WASM_EXTERN_FUNC && funcName == std::string_view(name->data, name->size)) { - return wasm_externtype_as_functype(const_cast(exn_type)); + return wasm_externtype_as_functype(const_cast(exnType)); } } throw std::runtime_error("can't find function <" + std::string(funcName) + ">"); } -wmem +Wmem ModuleWrapper::getMem() const { - return instanceWrap_.getMem(); + return instanceWrap.getMem(); } InstanceWrapper& ModuleWrapper::getInstance(int) { - return instanceWrap_; + return instanceWrap; } int ModuleWrapper::addInstance(StorePtr& s, WasmExternVec const& imports) { - instanceWrap_ = {s, module_, imports, j_}; + instanceWrap = {s, module, imports, j}; return 0; } @@ -497,7 +525,7 @@ ModuleWrapper::addInstance(StorePtr& s, WasmExternVec const& imports) std::int64_t ModuleWrapper::getGas() const { - return instanceWrap_ ? instanceWrap_.getGas() : -1; + return instanceWrap ? instanceWrap.getGas() : -1; } ////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -552,7 +580,7 @@ WasmiEngine::addModule( { moduleWrap_.reset(); store_.reset(); // to free the memory before creating new store - store_ = {wasm_store_new_with_memory_max_pages(engine_.get(), MAX_PAGES), &wasm_store_delete}; + store_ = {wasm_store_new_with_memory_max_pages(engine_.get(), maxPages), &wasm_store_delete}; if (gas < 0) gas = std::numeric_limits::max(); @@ -560,7 +588,7 @@ WasmiEngine::addModule( if (err != nullptr) { // LCOV_EXCL_START - print_wasm_error("Error setting gas", nullptr, j_); + printWasmError("Error setting gas", nullptr, j_); wasmi_error_delete(err); throw std::runtime_error("can't set gas"); // LCOV_EXCL_STOP @@ -595,11 +623,11 @@ WasmiEngine::convertParams(std::vector const& params) { switch (p.type) { - case WT_I32: + case WtI32: v.push_back(WASM_I32_VAL(p.of.i32)); break; // LCOV_EXCL_START - case WT_I64: + case WtI64: v.push_back(WASM_I64_VAL(p.of.i64)); break; default: @@ -631,7 +659,7 @@ WasmiEngine::compareParamTypes(wasm_valtype_vec_t const* ftp, std::vector& in, int32_t p) +WasmiEngine::addParam(std::vector& in, int32_t p) { in.emplace_back(); auto& el(in.back()); @@ -642,7 +670,7 @@ WasmiEngine::add_param(std::vector& in, int32_t p) // LCOV_EXCL_STOP void -WasmiEngine::add_param(std::vector& in, int64_t p) +WasmiEngine::addParam(std::vector& in, int64_t p) { in.emplace_back(); auto& el(in.back()); @@ -700,7 +728,7 @@ WasmiEngine::call(FuncInfo const& f, std::vector& in) if (trap) { ret.f = true; - print_wasm_error("failure to call func", trap, j_); + printWasmError("failure to call func", trap, j_); } return ret; @@ -710,7 +738,7 @@ template WasmiResult WasmiEngine::call(FuncInfo const& f, std::vector& in, std::int32_t p, Types&&... args) { - add_param(in, p); + addParam(in, p); return call(f, in, std::forward(args)...); } @@ -718,7 +746,7 @@ template WasmiResult WasmiEngine::call(FuncInfo const& f, std::vector& in, std::int64_t p, Types&&... args) { - add_param(in, p); + addParam(in, p); return call(f, in, std::forward(args)...); } @@ -759,12 +787,12 @@ WasmiEngine::run( } catch (std::exception const& e) { - print_wasm_error(std::string("exception: ") + e.what(), nullptr, j); + printWasmError(std::string("exception: ") + e.what(), nullptr, j); } // LCOV_EXCL_START catch (...) { - print_wasm_error(std::string("exception: unknown"), nullptr, j); + printWasmError(std::string("exception: unknown"), nullptr, j); } // LCOV_EXCL_STOP return Unexpected(tecFAILED_PROCESSING); @@ -781,7 +809,7 @@ WasmiEngine::runHlp( beast::Journal j) { // currently only 1 module support, possible parallel UT run - std::lock_guard const lg(m_); + std::scoped_lock const lg(m_); j_ = j; if (wasmCode.empty()) @@ -792,7 +820,7 @@ WasmiEngine::runHlp( // Create and instantiate the module. [[maybe_unused]] int const m = addModule(wasmCode, true, imports, gas); - if (!moduleWrap_ || !moduleWrap_->instanceWrap_) + if (!moduleWrap_ || !moduleWrap_->instanceWrap) throw std::runtime_error("no instance"); // LCOV_EXCL_LINE auto clear = [](HostFunctions* p) { p->setRT(nullptr); }; @@ -833,7 +861,7 @@ WasmiEngine::runHlp( if (gas == -1) gas = std::numeric_limits::max(); - WasmResult const ret{res.r[0].of.i32, gas - moduleWrap_->getGas()}; + WasmResult const ret{.result = res.r[0].of.i32, .cost = gas - moduleWrap_->getGas()}; // #ifdef DEBUG_OUTPUT // auto& j = std::cerr; @@ -861,12 +889,12 @@ WasmiEngine::check( } catch (std::exception const& e) { - print_wasm_error(std::string("exception: ") + e.what(), nullptr, j); + printWasmError(std::string("exception: ") + e.what(), nullptr, j); } // LCOV_EXCL_START catch (...) { - print_wasm_error(std::string("exception: unknown"), nullptr, j); + printWasmError(std::string("exception: unknown"), nullptr, j); } // LCOV_EXCL_STOP @@ -883,7 +911,7 @@ WasmiEngine::checkHlp( beast::Journal j) { // currently only 1 module support, possible parallel UT run - std::lock_guard const lg(m_); + std::scoped_lock const lg(m_); j_ = j; // Create and instantiate the module. @@ -913,10 +941,10 @@ WasmiEngine::getGas() const } // LCOV_EXCL_STOP -wmem +Wmem WasmiEngine::getMem() const { - return moduleWrap_ ? moduleWrap_->getMem() : wmem(); + return moduleWrap_ ? moduleWrap_->getMem() : Wmem(); } InstanceWrapper& diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 60ba559b76..01355237ae 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -1,12 +1,64 @@ -#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include #include #include +#include +#include #include -namespace xrpl { -namespace test { +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::test { static Bytes toBytes(std::uint8_t value) @@ -108,10 +160,10 @@ public: { } - wmem + Wmem getMem() override { - return {buffer_.data(), buffer_.size()}; + return {.p = buffer_.data(), .s = buffer_.size()}; } std::int64_t @@ -153,7 +205,7 @@ public: Throw("Out of bounds"); } - Slice + [[nodiscard]] Slice getBuffer(WasmValVec const& params, size_t i) const { checkIdx(params, i); @@ -162,7 +214,7 @@ public: return {&buffer_[ptr], static_cast(size)}; } - Bytes + [[nodiscard]] Bytes getBytes(WasmValVec const& params, size_t i) const { checkIdx(params, i); @@ -180,7 +232,7 @@ public: } template - T + [[nodiscard]] [[nodiscard]] [[nodiscard]] [[nodiscard]] T getInt(WasmValVec const& params, size_t i) const { checkIdx(params, i); @@ -191,25 +243,25 @@ public: return *reinterpret_cast(&buffer_[ptr]); } - std::int32_t + [[nodiscard]] std::int32_t getInt32(WasmValVec const& params, size_t i) const { return getInt(params, i); } - std::uint32_t + [[nodiscard]] std::uint32_t getUint32(WasmValVec const& params, size_t i) const { return getInt(params, i); } - std::int64_t + [[nodiscard]] std::int64_t getInt64(WasmValVec const& params, size_t i) const { return getInt(params, i); } - std::uint64_t + [[nodiscard]] std::uint64_t getUint64(WasmValVec const& params, size_t i) const { return getInt(params, i); @@ -265,9 +317,9 @@ ww(F&& f, E&& e, P&& params, P&& result, Args... args) constexpr int64_t min64 = std::numeric_limits::min(); constexpr int64_t max64 = std::numeric_limits::max(); -constexpr int32_t FLOAT_SIZE = 12; +constexpr int32_t floatSize = 12; -struct HostFuncImpl_test : public beast::unit_test::suite +struct HostFuncImpl_test : public beast::unit_test::Suite { void testGetLedgerSqn() @@ -362,15 +414,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - uint256::bytes); + Bytes); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == uint256::bytes); + BEAST_EXPECT(result[0].of.i32 == Bytes); auto const resultBytes = vrt.getBytes(params, 0); auto const expectedHash = env.current()->header().parentHash; BEAST_EXPECT( - resultBytes.size() == uint256::bytes && - std::memcmp(resultBytes.data(), expectedHash.data(), uint256::bytes) == 0); + resultBytes.size() == Bytes && + std::memcmp(resultBytes.data(), expectedHash.data(), Bytes) == 0); } } @@ -429,14 +481,9 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.isAmendmentEnabled(amendmentId); { WasmValVec params(2), result(1); - vrt.setBytes(0, amendmentId.data(), uint256::bytes); - auto* trap = - ww(isAmendmentEnabled_wrap, - &import.at("amendment_enabled"), - params, - result, - 0, - uint256::bytes); + vrt.setBytes(0, amendmentId.data(), Bytes); + auto* trap = ww( + isAmendmentEnabled_wrap, &import.at("amendment_enabled"), params, result, 0, Bytes); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); @@ -463,14 +510,9 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.isAmendmentEnabled(fakeId); { WasmValVec params(2), result(1); - vrt.setBytes(0, fakeId.data(), uint256::bytes); - auto* trap = - ww(isAmendmentEnabled_wrap, - &import.at("amendment_enabled"), - params, - result, - 0, - uint256::bytes); + vrt.setBytes(0, fakeId.data(), Bytes); + auto* trap = ww( + isAmendmentEnabled_wrap, &import.at("amendment_enabled"), params, result, 0, Bytes); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0); @@ -515,64 +557,62 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.cacheLedgerObj(accountKeylet.key, -1); { WasmValVec params(3), result(1); - vrt.setBytes(0, accountKeylet.key.data(), uint256::bytes); + vrt.setBytes(0, accountKeylet.key.data(), Bytes); auto* trap = ww(cacheLedgerObj_wrap, &import.at("cache_ledger_obj"), params, result, 0, - uint256::bytes, + Bytes, -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( - result[0].of.i32 == - static_cast(HostFunctionError::SLOT_OUT_RANGE)); + result[0].of.i32 == static_cast(HostFunctionError::SlotOutRange)); } // hfs.cacheLedgerObj(accountKeylet.key, 257); { WasmValVec params(3), result(1); - vrt.setBytes(0, accountKeylet.key.data(), uint256::bytes); + vrt.setBytes(0, accountKeylet.key.data(), Bytes); auto* trap = ww(cacheLedgerObj_wrap, &import.at("cache_ledger_obj"), params, result, 0, - uint256::bytes, + Bytes, 257); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( - result[0].of.i32 == - static_cast(HostFunctionError::SLOT_OUT_RANGE)); + result[0].of.i32 == static_cast(HostFunctionError::SlotOutRange)); } // hfs.cacheLedgerObj(dummyEscrow.key, 0); { WasmValVec params(3), result(1); - vrt.setBytes(0, dummyEscrow.key.data(), uint256::bytes); + vrt.setBytes(0, dummyEscrow.key.data(), Bytes); auto* trap = ww(cacheLedgerObj_wrap, &import.at("cache_ledger_obj"), params, result, 0, - uint256::bytes, + Bytes, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::LEDGER_OBJ_NOT_FOUND)); + static_cast(HostFunctionError::LedgerObjNotFound)); } // hfs.cacheLedgerObj(accountKeylet.key, 0); { WasmValVec params(3), result(1); - vrt.setBytes(0, accountKeylet.key.data(), uint256::bytes); + vrt.setBytes(0, accountKeylet.key.data(), Bytes); auto* trap = ww(cacheLedgerObj_wrap, &import.at("cache_ledger_obj"), @@ -624,7 +664,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( - result[0].of.i32 == static_cast(HostFunctionError::SLOTS_FULL)); + result[0].of.i32 == static_cast(HostFunctionError::SlotsFull)); } } @@ -673,7 +713,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( - result[0].of.i32 == static_cast(HostFunctionError::SLOTS_FULL)); + result[0].of.i32 == static_cast(HostFunctionError::SlotsFull)); } } } @@ -798,8 +838,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( - result[0].of.i32 == - static_cast(HostFunctionError::FIELD_NOT_FOUND)); + result[0].of.i32 == static_cast(HostFunctionError::FieldNotFound)); } // hfs.getTxField(sfMemos); @@ -816,8 +855,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( - result[0].of.i32 == - static_cast(HostFunctionError::NOT_LEAF_FIELD)); + result[0].of.i32 == static_cast(HostFunctionError::NotLeafField)); } // hfs.getTxField(sfCredentialIDs); @@ -834,7 +872,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECTS( - result[0].of.i32 == static_cast(HostFunctionError::NOT_LEAF_FIELD), + result[0].of.i32 == static_cast(HostFunctionError::NotLeafField), std::to_string(result[0].of.i32)); } @@ -852,8 +890,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( - result[0].of.i32 == - static_cast(HostFunctionError::FIELD_NOT_FOUND)); + result[0].of.i32 == static_cast(HostFunctionError::FieldNotFound)); } // hfs.getTxField(sfGeneric); @@ -870,8 +907,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( - result[0].of.i32 == - static_cast(HostFunctionError::FIELD_NOT_FOUND)); + result[0].of.i32 == static_cast(HostFunctionError::FieldNotFound)); } } @@ -1126,7 +1162,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( - result[0].of.i32 == static_cast(HostFunctionError::FIELD_NOT_FOUND)); + result[0].of.i32 == static_cast(HostFunctionError::FieldNotFound)); } { @@ -1152,7 +1188,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::LEDGER_OBJ_NOT_FOUND)); + static_cast(HostFunctionError::LedgerObjNotFound)); } } } @@ -1256,7 +1292,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( - result[0].of.i32 == static_cast(HostFunctionError::SLOT_OUT_RANGE)); + result[0].of.i32 == static_cast(HostFunctionError::SlotOutRange)); } // hfs.getLedgerObjField(257, sfAccount); @@ -1274,7 +1310,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( - result[0].of.i32 == static_cast(HostFunctionError::SLOT_OUT_RANGE)); + result[0].of.i32 == static_cast(HostFunctionError::SlotOutRange)); } // hfs.getLedgerObjField(2, sfAccount); @@ -1292,7 +1328,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( - result[0].of.i32 == static_cast(HostFunctionError::EMPTY_SLOT)); + result[0].of.i32 == static_cast(HostFunctionError::EmptySlot)); } // hfs.getLedgerObjField(1, sfOwner); @@ -1310,7 +1346,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( - result[0].of.i32 == static_cast(HostFunctionError::FIELD_NOT_FOUND)); + result[0].of.i32 == static_cast(HostFunctionError::FieldNotFound)); } } @@ -1489,7 +1525,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite {sfSigners.fieldCode, // sfSigners does not exist 0, sfAccount.fieldCode}, - HostFunctionError::FIELD_NOT_FOUND); + HostFunctionError::FieldNotFound); // hfs.getTxNestedField(locator); // Locator for non-existent index @@ -1497,13 +1533,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite {sfMemos.fieldCode, 1, // index 1 does not exist sfMemoData.fieldCode}, - HostFunctionError::INDEX_OUT_OF_BOUNDS); + HostFunctionError::IndexOutOfBounds); // hfs.getTxNestedField(locator); // Locator for non-existent index expectError( {sfCredentialIDs.fieldCode, 1}, // index 1 does not exist - HostFunctionError::INDEX_OUT_OF_BOUNDS); + HostFunctionError::IndexOutOfBounds); // hfs.getTxNestedField(locator); // Locator for negative index (STArray) @@ -1511,19 +1547,19 @@ struct HostFuncImpl_test : public beast::unit_test::suite {sfMemos.fieldCode, -1, // negative index sfMemoData.fieldCode}, - HostFunctionError::INDEX_OUT_OF_BOUNDS); + HostFunctionError::IndexOutOfBounds); // hfs.getTxNestedField(locator); // Locator for negative index (STVector256) expectError( {sfCredentialIDs.fieldCode, -1}, // negative index - HostFunctionError::INDEX_OUT_OF_BOUNDS); + HostFunctionError::IndexOutOfBounds); // hfs.getTxNestedField(locator); // Locator for non-existent nested field expectError( {sfMemos.fieldCode, 0, sfURI.fieldCode}, // sfURI does not exist in the memo - HostFunctionError::FIELD_NOT_FOUND); + HostFunctionError::FieldNotFound); // hfs.getTxNestedField(locator); // Locator for non-existent base sfield @@ -1531,7 +1567,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite {field_code(20000, 20000), // nonexistent SField code 0, sfAccount.fieldCode}, - HostFunctionError::INVALID_FIELD); + HostFunctionError::InvalidField); // hfs.getTxNestedField(locator); // Locator for non-existent nested sfield @@ -1539,7 +1575,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite {sfMemos.fieldCode, // nonexistent SField code 0, field_code(20000, 20000)}, - HostFunctionError::INVALID_FIELD); + HostFunctionError::InvalidField); // hfs.getTxNestedField(locator); // Locator for negative base sfield code (-1 = sfInvalid, exists in map but not in tx) @@ -1547,7 +1583,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite {-1, // sfInvalid's field code 0, sfAccount.fieldCode}, - HostFunctionError::FIELD_NOT_FOUND); + HostFunctionError::FieldNotFound); // hfs.getTxNestedField(locator); // Locator for zero base sfield code (0 = sfGeneric, exists in map but not in tx) @@ -1555,28 +1591,28 @@ struct HostFuncImpl_test : public beast::unit_test::suite {0, // sfGeneric's field code 0, sfAccount.fieldCode}, - HostFunctionError::FIELD_NOT_FOUND); + HostFunctionError::FieldNotFound); // hfs.getTxNestedField(locator); // Locator for very negative base sfield code (not in knownCodeToField map) expectError( {std::numeric_limits::min(), 0, sfAccount.fieldCode}, - HostFunctionError::INVALID_FIELD); + HostFunctionError::InvalidField); // hfs.getTxNestedField(locator); // Locator for negative nested sfield code in STObject context // (sfMemos[0] is an STObject, then -1 is looked up as SField) expectError( {sfMemos.fieldCode, 0, -1}, // -1 = sfInvalid, exists in map but not in memo object - HostFunctionError::FIELD_NOT_FOUND); + HostFunctionError::FieldNotFound); // hfs.getTxNestedField(locator); // Locator for STArray - expectError({sfMemos.fieldCode}, HostFunctionError::NOT_LEAF_FIELD); + expectError({sfMemos.fieldCode}, HostFunctionError::NotLeafField); // hfs.getTxNestedField(locator); // Locator for STVector256 - expectError({sfCredentialIDs.fieldCode}, HostFunctionError::NOT_LEAF_FIELD); + expectError({sfCredentialIDs.fieldCode}, HostFunctionError::NotLeafField); // hfs.getTxNestedField(locator); // Locator for nesting into non-array/object field @@ -1584,11 +1620,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite {sfAccount.fieldCode, // sfAccount is not an array or object 0, sfAccount.fieldCode}, - HostFunctionError::LOCATOR_MALFORMED); + HostFunctionError::LocatorMalformed); // hfs.getTxNestedField(locator); // Locator for empty locator - expectError({}, HostFunctionError::LOCATOR_MALFORMED); + expectError({}, HostFunctionError::LocatorMalformed); // hfs.getTxNestedField(locator); // Locator for malformed locator (not multiple of 4) @@ -1609,7 +1645,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( - result[0].of.i32 == static_cast(HostFunctionError::LOCATOR_MALFORMED)); + result[0].of.i32 == static_cast(HostFunctionError::LocatorMalformed)); } } @@ -1691,7 +1727,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite {sfSigners.fieldCode, // sfSigners does not exist 0, sfAccount.fieldCode}, - HostFunctionError::FIELD_NOT_FOUND); + HostFunctionError::FieldNotFound); // hfs.getCurrentLedgerObjNestedField(locator); // Locator for nesting into non-array/object field @@ -1699,7 +1735,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite {sfSignerQuorum.fieldCode, // sfSignerQuorum is not an array or object 0, sfAccount.fieldCode}, - HostFunctionError::LOCATOR_MALFORMED); + HostFunctionError::LocatorMalformed); // hfs.getCurrentLedgerObjNestedField(emptyLocator); // Locator for empty locator @@ -1717,7 +1753,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( - result[0].of.i32 == static_cast(HostFunctionError::LOCATOR_MALFORMED)); + result[0].of.i32 == static_cast(HostFunctionError::LocatorMalformed)); } // hfs.getCurrentLedgerObjNestedField(malformedLocator); @@ -1739,7 +1775,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( - result[0].of.i32 == static_cast(HostFunctionError::LOCATOR_MALFORMED)); + result[0].of.i32 == static_cast(HostFunctionError::LocatorMalformed)); } // hfs.getCurrentLedgerObjNestedField(locator); @@ -1767,7 +1803,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECTS( - result[0].of.i32 == static_cast(HostFunctionError::LEDGER_OBJ_NOT_FOUND), + result[0].of.i32 == static_cast(HostFunctionError::LedgerObjNotFound), std::to_string(result[0].of.i32)); } } @@ -1951,14 +1987,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite {sfSigners.fieldCode, // sfSigners does not exist 0, sfAccount.fieldCode}, - HostFunctionError::FIELD_NOT_FOUND); + HostFunctionError::FieldNotFound); // Error: index out of bounds expectError( {sfSignerEntries.fieldCode, 2, // index 2 does not exist sfAccount.fieldCode}, - HostFunctionError::INDEX_OUT_OF_BOUNDS); + HostFunctionError::IndexOutOfBounds); // Error: nested field not found expectError( @@ -1967,34 +2003,34 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, sfDestination.fieldCode // sfDestination does not exist }, - HostFunctionError::FIELD_NOT_FOUND); + HostFunctionError::FieldNotFound); // Error: invalid field code expectError( - {field_code(99999, 99999), 0, sfAccount.fieldCode}, HostFunctionError::INVALID_FIELD); + {field_code(99999, 99999), 0, sfAccount.fieldCode}, HostFunctionError::InvalidField); // Error: invalid nested field code expectError( {sfSignerEntries.fieldCode, 0, field_code(99999, 99999)}, - HostFunctionError::INVALID_FIELD); + HostFunctionError::InvalidField); // Error: slot out of range - expectError({sfSignerQuorum.fieldCode}, HostFunctionError::SLOT_OUT_RANGE, 0); - expectError({sfSignerQuorum.fieldCode}, HostFunctionError::SLOT_OUT_RANGE, 257); + expectError({sfSignerQuorum.fieldCode}, HostFunctionError::SlotOutRange, 0); + expectError({sfSignerQuorum.fieldCode}, HostFunctionError::SlotOutRange, 257); // Error: empty slot - expectError({sfSignerQuorum.fieldCode}, HostFunctionError::EMPTY_SLOT, 2); + expectError({sfSignerQuorum.fieldCode}, HostFunctionError::EmptySlot, 2); // Error: locator for STArray (not leaf field) - expectError({sfSignerEntries.fieldCode}, HostFunctionError::NOT_LEAF_FIELD); + expectError({sfSignerEntries.fieldCode}, HostFunctionError::NotLeafField); // Error: nesting into non-array/object field expectError( {sfSignerQuorum.fieldCode, 0, sfAccount.fieldCode}, - HostFunctionError::LOCATOR_MALFORMED); + HostFunctionError::LocatorMalformed); // Error: empty locator - expectError({}, HostFunctionError::LOCATOR_MALFORMED); + expectError({}, HostFunctionError::LocatorMalformed); // Error: locator malformed (not multiple of 4) { @@ -2015,7 +2051,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( - result[0].of.i32 == static_cast(HostFunctionError::LOCATOR_MALFORMED)); + result[0].of.i32 == static_cast(HostFunctionError::LocatorMalformed)); } } @@ -2089,7 +2125,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite sfAccount.fieldCode); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); - BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::NO_ARRAY)); + BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::NoArray)); } // Should return error for missing array field @@ -2105,7 +2141,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT( - result[0].of.i32 == static_cast(HostFunctionError::FIELD_NOT_FOUND)); + result[0].of.i32 == static_cast(HostFunctionError::FieldNotFound)); } // Should return 1 for sfCredentialIDs @@ -2175,7 +2211,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT( - result[0].of.i32 == static_cast(HostFunctionError::FIELD_NOT_FOUND)); + result[0].of.i32 == static_cast(HostFunctionError::FieldNotFound)); } // Should return NO_ARRAY for non-array field @@ -2190,7 +2226,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite sfAccount.fieldCode); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); - BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::NO_ARRAY)); + BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::NoArray)); } { @@ -2212,7 +2248,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT( - result[0].of.i32 == static_cast(HostFunctionError::LEDGER_OBJ_NOT_FOUND)); + result[0].of.i32 == static_cast(HostFunctionError::LedgerObjNotFound)); } } @@ -2286,8 +2322,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite sfSignerEntries.fieldCode); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); - BEAST_EXPECT( - result[0].of.i32 == static_cast(HostFunctionError::SLOT_OUT_RANGE)); + BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::SlotOutRange)); } { @@ -2303,7 +2338,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite sfAccount.fieldCode); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); - BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::NO_ARRAY)); + BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::NoArray)); } { @@ -2319,7 +2354,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite sfSignerEntries.fieldCode); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); - BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::EMPTY_SLOT)); + BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::EmptySlot)); } { @@ -2336,7 +2371,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT( - result[0].of.i32 == static_cast(HostFunctionError::FIELD_NOT_FOUND)); + result[0].of.i32 == static_cast(HostFunctionError::FieldNotFound)); } } @@ -2404,10 +2439,10 @@ struct HostFuncImpl_test : public beast::unit_test::suite } // Error: non-array field - expectError({sfAccount.fieldCode}, HostFunctionError::NO_ARRAY); + expectError({sfAccount.fieldCode}, HostFunctionError::NoArray); // Error: missing field - expectError({sfSigners.fieldCode}, HostFunctionError::FIELD_NOT_FOUND); + expectError({sfSigners.fieldCode}, HostFunctionError::FieldNotFound); } void @@ -2472,10 +2507,10 @@ struct HostFuncImpl_test : public beast::unit_test::suite } // Error: non-array field - expectError({sfSignerQuorum.fieldCode}, HostFunctionError::NO_ARRAY); + expectError({sfSignerQuorum.fieldCode}, HostFunctionError::NoArray); // Error: missing field - expectError({sfSigners.fieldCode}, HostFunctionError::FIELD_NOT_FOUND); + expectError({sfSigners.fieldCode}, HostFunctionError::FieldNotFound); { auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master) + 5); @@ -2499,7 +2534,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECTS( - result[0].of.i32 == static_cast(HostFunctionError::LEDGER_OBJ_NOT_FOUND), + result[0].of.i32 == static_cast(HostFunctionError::LedgerObjNotFound), std::to_string(result[0].of.i32)); } } @@ -2586,20 +2621,20 @@ struct HostFuncImpl_test : public beast::unit_test::suite }; // Error: non-array field - expectError({sfSignerQuorum.fieldCode}, HostFunctionError::NO_ARRAY); + expectError({sfSignerQuorum.fieldCode}, HostFunctionError::NoArray); // Error: missing field - expectError({sfSigners.fieldCode}, HostFunctionError::FIELD_NOT_FOUND); + expectError({sfSigners.fieldCode}, HostFunctionError::FieldNotFound); // Slot out of range - expectError(locatorVec, HostFunctionError::SLOT_OUT_RANGE, 0); - expectError(locatorVec, HostFunctionError::SLOT_OUT_RANGE, 257); + expectError(locatorVec, HostFunctionError::SlotOutRange, 0); + expectError(locatorVec, HostFunctionError::SlotOutRange, 257); // Empty slot - expectError(locatorVec, HostFunctionError::EMPTY_SLOT, 2); + expectError(locatorVec, HostFunctionError::EmptySlot, 2); // Error: empty locator - expectError({}, HostFunctionError::LOCATOR_MALFORMED); + expectError({}, HostFunctionError::LocatorMalformed); // Error: locator malformed (not multiple of 4) { @@ -2617,13 +2652,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( - result[0].of.i32 == static_cast(HostFunctionError::LOCATOR_MALFORMED)); + result[0].of.i32 == static_cast(HostFunctionError::LocatorMalformed)); } // Error: locator for non-STArray field expectError( {sfSignerQuorum.fieldCode, 0, sfAccount.fieldCode}, - HostFunctionError::LOCATOR_MALFORMED); + HostFunctionError::LocatorMalformed); } void @@ -2672,7 +2707,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( - result[0].of.i32 == HfErrorToInt(HostFunctionError::DATA_FIELD_TOO_LARGE)); + result[0].of.i32 == HfErrorToInt(HostFunctionError::DataFieldTooLarge)); } } @@ -2777,7 +2812,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite badPk.size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == HfErrorToInt(HostFunctionError::INVALID_PARAMS)); + BEAST_EXPECT(result[0].of.i32 == HfErrorToInt(HostFunctionError::InvalidParams)); } // Should fail for empty public key @@ -2802,7 +2837,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == HfErrorToInt(HostFunctionError::INVALID_PARAMS)); + BEAST_EXPECT(result[0].of.i32 == HfErrorToInt(HostFunctionError::InvalidParams)); } // Should fail for empty signature @@ -2943,7 +2978,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); } { @@ -2976,7 +3011,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_PARAMS)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidParams)); auto* trap3 = ww(ammKeylet_wrap, @@ -2989,7 +3024,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap3 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_PARAMS)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidParams)); } { @@ -3021,7 +3056,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); } std::string const credTypeStr = "test"; @@ -3063,7 +3098,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_PARAMS)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidParams)); auto* trap3 = ww(credentialKeylet_wrap, @@ -3077,7 +3112,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap3 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); auto* trap4 = ww(credentialKeylet_wrap, @@ -3091,7 +3126,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap4 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); } { @@ -3109,7 +3144,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite ww(didKeylet_wrap, &imp.at("did_keylet"), params, result, xrpAccount(), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); } { @@ -3141,7 +3176,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_PARAMS)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidParams)); auto* trap3 = ww(delegateKeylet_wrap, @@ -3154,7 +3189,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap3 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); auto* trap4 = ww(delegateKeylet_wrap, @@ -3167,7 +3202,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap4 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); } { @@ -3199,7 +3234,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_PARAMS)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidParams)); auto* trap3 = ww(depositPreauthKeylet_wrap, @@ -3212,7 +3247,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap3 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); auto* trap4 = ww(depositPreauthKeylet_wrap, @@ -3225,7 +3260,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap4 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); } { @@ -3257,7 +3292,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); } Currency const usd = to_currency("USD"); @@ -3292,7 +3327,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_PARAMS)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidParams)); auto* trap3 = ww(lineKeylet_wrap, @@ -3306,7 +3341,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap3 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); auto* trap4 = ww(lineKeylet_wrap, @@ -3320,7 +3355,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap4 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); auto* trap5 = ww(lineKeylet_wrap, @@ -3334,7 +3369,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap5 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_PARAMS)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidParams)); } { @@ -3366,7 +3401,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); } { @@ -3398,7 +3433,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_PARAMS)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidParams)); auto* trap3 = ww(mptokenKeylet_wrap, @@ -3411,7 +3446,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap3 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); } { @@ -3443,7 +3478,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); } { @@ -3475,7 +3510,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); } { @@ -3507,7 +3542,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); } { @@ -3541,7 +3576,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_PARAMS)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidParams)); auto* trap3 = ww(paychanKeylet_wrap, @@ -3555,7 +3590,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap3 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); auto* trap4 = ww(paychanKeylet_wrap, @@ -3569,7 +3604,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap4 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); } { @@ -3601,7 +3636,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); } { @@ -3625,7 +3660,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); } { @@ -3657,7 +3692,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); } { @@ -3689,7 +3724,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && - result[0].of.i32 == static_cast(HostFunctionError::INVALID_ACCOUNT)); + result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); } } @@ -3769,7 +3804,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 256); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) - BEAST_EXPECT(result[0].of.i32 == HfErrorToInt(HostFunctionError::INVALID_ACCOUNT)); + BEAST_EXPECT(result[0].of.i32 == HfErrorToInt(HostFunctionError::InvalidAccount)); } // Should fail for invalid nftId @@ -3792,7 +3827,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 256); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) - BEAST_EXPECT(result[0].of.i32 == HfErrorToInt(HostFunctionError::INVALID_PARAMS)); + BEAST_EXPECT(result[0].of.i32 == HfErrorToInt(HostFunctionError::InvalidParams)); } // Should fail for invalid nftId @@ -3816,7 +3851,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( - result[0].of.i32 == HfErrorToInt(HostFunctionError::LEDGER_OBJ_NOT_FOUND)); + result[0].of.i32 == HfErrorToInt(HostFunctionError::LedgerObjNotFound)); } { @@ -3837,7 +3872,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite 256); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) - BEAST_EXPECT(result[0].of.i32 == HfErrorToInt(HostFunctionError::FIELD_NOT_FOUND)); + BEAST_EXPECT(result[0].of.i32 == HfErrorToInt(HostFunctionError::FieldNotFound)); } } @@ -3904,7 +3939,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite AccountID::bytes); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) - BEAST_EXPECT(result[0].of.i32 == HfErrorToInt(HostFunctionError::INVALID_PARAMS)); + BEAST_EXPECT(result[0].of.i32 == HfErrorToInt(HostFunctionError::InvalidParams)); } } @@ -4593,7 +4628,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite std::cout << std::dec << std::setfill(' ') << std::endl; } - void + static void printNumbersBin() { printFloats("int64.min", std::numeric_limits::min(), 0); @@ -4745,13 +4780,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite result, min64, 0, - FLOAT_SIZE, + floatSize, -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { @@ -4764,13 +4799,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite result, min64, 0, - FLOAT_SIZE, + floatSize, 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { @@ -4783,11 +4818,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite result, min64, 0, - FLOAT_SIZE, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 1); BEAST_EXPECT(resultBytes == floatIntMin); } @@ -4802,11 +4837,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite result, 0ll, 0, - FLOAT_SIZE, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 1); BEAST_EXPECT(resultBytes == floatIntZero); } @@ -4821,11 +4856,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite result, max64, 0, - FLOAT_SIZE, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 1); BEAST_EXPECT(resultBytes == floatIntMax); } @@ -4860,13 +4895,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, 8, 16, - FLOAT_SIZE, + floatSize, -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { @@ -4882,13 +4917,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, 8, 16, - FLOAT_SIZE, + floatSize, 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { @@ -4904,11 +4939,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, 8, 16, - FLOAT_SIZE, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 2); BEAST_EXPECT(resultBytes == floatIntZero); } @@ -4926,11 +4961,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, 8, 16, - FLOAT_SIZE, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 2); BEAST_EXPECT(resultBytes == floatUIntMax); } @@ -4964,13 +4999,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite 1ll, 0, 0, - FLOAT_SIZE, + floatSize, -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { @@ -4984,13 +5019,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite 1ll, 0, 0, - FLOAT_SIZE, + floatSize, 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { @@ -5004,13 +5039,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite 1ll, Number::maxExponent + normalExp + 1, 0, - FLOAT_SIZE, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { @@ -5024,11 +5059,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite 1ll, Number::minExponent + normalExp - 1, 0, - FLOAT_SIZE, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 2); BEAST_EXPECT(resultBytes == floatIntZero); } @@ -5044,11 +5079,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite 1ll, Number::maxExponent + normalExp, 0, - FLOAT_SIZE, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 2); BEAST_EXPECT(resultBytes == floatMaxExp); } @@ -5064,11 +5099,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite -1ll, Number::maxExponent + normalExp, 0, - FLOAT_SIZE, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 2); BEAST_EXPECT(resultBytes == floatMinusMaxExp); } @@ -5084,11 +5119,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite 1ll, Number::maxExponent + normalExp - 1, 0, - FLOAT_SIZE, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 2); BEAST_EXPECT(resultBytes == floatPreMaxExp); } @@ -5104,11 +5139,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite static_cast(STAmount::cMaxValue), STAmount::cMaxOffset, 0, - FLOAT_SIZE, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 2); BEAST_EXPECT(resultBytes == floatMaxIOU); } @@ -5124,11 +5159,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite 1ll, Number::minExponent - normalExp, 0, - FLOAT_SIZE, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 2); BEAST_EXPECT(resultBytes == floatMinExp); } @@ -5144,11 +5179,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite 10ll, -1, 0, - FLOAT_SIZE, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 2); BEAST_EXPECT(resultBytes == float1); } @@ -5164,13 +5199,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite 1ll, Number::maxExponent + normalExp + 1, 0, - FLOAT_SIZE, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } } @@ -5198,7 +5233,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { @@ -5206,49 +5241,49 @@ struct HostFuncImpl_test : public beast::unit_test::suite WasmValVec params(4), result(1); vrt.setBytes(0, floatInvalidZero.data(), floatInvalidZero.size()); auto* trap = - ww(floatCompare_wrap, &import.at("float_add"), params, result, 0, FLOAT_SIZE, 0, 0); + ww(floatCompare_wrap, &import.at("float_add"), params, result, 0, floatSize, 0, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { // hfs.floatCompare(makeSlice(float1), makeSlice(invalid)); WasmValVec params(4), result(1); vrt.setBytes(0, float1.data(), float1.size()); - vrt.setBytes(FLOAT_SIZE, invalid.data(), invalid.size()); + vrt.setBytes(floatSize, invalid.data(), invalid.size()); auto* trap = ww(floatCompare_wrap, &import.at("float_add"), params, result, 0, - FLOAT_SIZE, - FLOAT_SIZE, + floatSize, + floatSize, invalid.size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { // hfs.floatCompare(makeSlice(floatIntMin), makeSlice(floatIntZero)); WasmValVec params(4), result(1); vrt.setBytes(0, floatIntMin.data(), floatIntMin.size()); - vrt.setBytes(FLOAT_SIZE, floatIntZero.data(), floatIntZero.size()); + vrt.setBytes(floatSize, floatIntZero.data(), floatIntZero.size()); auto* trap = ww(floatCompare_wrap, &import.at("float_add"), params, result, 0, - FLOAT_SIZE, - FLOAT_SIZE, - FLOAT_SIZE); + floatSize, + floatSize, + floatSize); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 2); @@ -5258,16 +5293,16 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatCompare(makeSlice(floatIntMax), makeSlice(floatIntZero)); WasmValVec params(4), result(1); vrt.setBytes(0, floatIntMax.data(), floatIntMax.size()); - vrt.setBytes(FLOAT_SIZE, floatIntZero.data(), floatIntZero.size()); + vrt.setBytes(floatSize, floatIntZero.data(), floatIntZero.size()); auto* trap = ww(floatCompare_wrap, &import.at("float_add"), params, result, 0, - FLOAT_SIZE, - FLOAT_SIZE, - FLOAT_SIZE); + floatSize, + floatSize, + floatSize); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); @@ -5277,16 +5312,16 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatCompare(makeSlice(float1), makeSlice(float1)); WasmValVec params(4), result(1); vrt.setBytes(0, float1.data(), float1.size()); - vrt.setBytes(FLOAT_SIZE, float1.data(), float1.size()); + vrt.setBytes(floatSize, float1.data(), float1.size()); auto* trap = ww(floatCompare_wrap, &import.at("float_add"), params, result, 0, - FLOAT_SIZE, - FLOAT_SIZE, - FLOAT_SIZE); + floatSize, + floatSize, + floatSize); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0); @@ -5322,13 +5357,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, 0, 0, - FLOAT_SIZE, + floatSize, -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { @@ -5344,37 +5379,37 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, 0, 0, - FLOAT_SIZE, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { // hfs.floatAdd(makeSlice(float1), makeSlice(invalid), 0); WasmValVec params(7), result(1); vrt.setBytes(0, float1.data(), float1.size()); - vrt.setBytes(FLOAT_SIZE, invalid.data(), invalid.size()); + vrt.setBytes(floatSize, invalid.data(), invalid.size()); auto* trap = ww(floatAdd_wrap, &import.at("float_subtract"), params, result, 0, - FLOAT_SIZE, - FLOAT_SIZE, + floatSize, + floatSize, invalid.size(), - 2 * FLOAT_SIZE, - FLOAT_SIZE, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { @@ -5382,22 +5417,22 @@ struct HostFuncImpl_test : public beast::unit_test::suite // max IOU is too small to make any change WasmValVec params(7), result(1); vrt.setBytes(0, floatMaxIOU.data(), floatMaxIOU.size()); - vrt.setBytes(FLOAT_SIZE, floatMaxExp.data(), floatMaxExp.size()); + vrt.setBytes(floatSize, floatMaxExp.data(), floatMaxExp.size()); auto* trap = ww(floatAdd_wrap, &import.at("float_subtract"), params, result, 0, - FLOAT_SIZE, - FLOAT_SIZE, - FLOAT_SIZE, - 2 * FLOAT_SIZE, - FLOAT_SIZE, + floatSize, + floatSize, + floatSize, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 4); BEAST_EXPECT(resultBytes == floatMaxExp); } @@ -5406,22 +5441,22 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatAdd(makeSlice(floatIntMin), makeSlice(floatIntZero), 0); WasmValVec params(7), result(1); vrt.setBytes(0, floatIntMin.data(), floatIntMin.size()); - vrt.setBytes(FLOAT_SIZE, floatIntZero.data(), floatIntZero.size()); + vrt.setBytes(floatSize, floatIntZero.data(), floatIntZero.size()); auto* trap = ww(floatAdd_wrap, &import.at("float_subtract"), params, result, 0, - FLOAT_SIZE, - FLOAT_SIZE, - FLOAT_SIZE, - 2 * FLOAT_SIZE, - FLOAT_SIZE, + floatSize, + floatSize, + floatSize, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 4); BEAST_EXPECT(resultBytes == floatIntMin); } @@ -5431,22 +5466,22 @@ struct HostFuncImpl_test : public beast::unit_test::suite // Number can't hold int64.min, it is rounded and we get -3, not -1 WasmValVec params(7), result(1); vrt.setBytes(0, floatIntMax.data(), floatIntMax.size()); - vrt.setBytes(FLOAT_SIZE, floatIntMin.data(), floatIntMin.size()); + vrt.setBytes(floatSize, floatIntMin.data(), floatIntMin.size()); auto* trap = ww(floatAdd_wrap, &import.at("float_subtract"), params, result, 0, - FLOAT_SIZE, - FLOAT_SIZE, - FLOAT_SIZE, - 2 * FLOAT_SIZE, - FLOAT_SIZE, + floatSize, + floatSize, + floatSize, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 4); BEAST_EXPECT(resultBytes == floatMinus3); } @@ -5481,13 +5516,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, 0, 0, - FLOAT_SIZE, + floatSize, -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { @@ -5503,59 +5538,59 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, 0, 0, - FLOAT_SIZE, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { // hfs.floatSubtract(makeSlice(float1), makeSlice(invalid), 0); WasmValVec params(7), result(1); vrt.setBytes(0, float1.data(), float1.size()); - vrt.setBytes(FLOAT_SIZE, invalid.data(), invalid.size()); + vrt.setBytes(floatSize, invalid.data(), invalid.size()); auto* trap = ww(floatSubtract_wrap, &import.at("float_from_mant_exp"), params, result, 0, - FLOAT_SIZE, - FLOAT_SIZE, + floatSize, + floatSize, invalid.size(), - FLOAT_SIZE * 2, - FLOAT_SIZE, + floatSize * 2, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { // hfs.floatSubtract(makeSlice(floatMinusMaxExp), makeSlice(floatMaxIOU), 0); WasmValVec params(7), result(1); vrt.setBytes(0, floatMinusMaxExp.data(), floatMinusMaxExp.size()); - vrt.setBytes(FLOAT_SIZE, floatMaxIOU.data(), floatMaxIOU.size()); + vrt.setBytes(floatSize, floatMaxIOU.data(), floatMaxIOU.size()); auto* trap = ww(floatSubtract_wrap, &import.at("float_from_mant_exp"), params, result, 0, - FLOAT_SIZE, - FLOAT_SIZE, - FLOAT_SIZE, - 2 * FLOAT_SIZE, - FLOAT_SIZE, + floatSize, + floatSize, + floatSize, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 4); BEAST_EXPECT(resultBytes == floatMinusMaxExp); } @@ -5564,22 +5599,22 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatSubtract(makeSlice(floatIntMin), makeSlice(floatIntZero), 0); WasmValVec params(7), result(1); vrt.setBytes(0, floatIntMin.data(), floatIntMin.size()); - vrt.setBytes(FLOAT_SIZE, floatIntZero.data(), floatIntZero.size()); + vrt.setBytes(floatSize, floatIntZero.data(), floatIntZero.size()); auto* trap = ww(floatSubtract_wrap, &import.at("float_from_mant_exp"), params, result, 0, - FLOAT_SIZE, - FLOAT_SIZE, - FLOAT_SIZE, - 2 * FLOAT_SIZE, - FLOAT_SIZE, + floatSize, + floatSize, + floatSize, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 4); BEAST_EXPECT(resultBytes == floatIntMin); } @@ -5588,22 +5623,22 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatSubtract(makeSlice(floatIntZero), makeSlice(float1), 0); WasmValVec params(7), result(1); vrt.setBytes(0, floatIntZero.data(), floatIntZero.size()); - vrt.setBytes(FLOAT_SIZE, float1.data(), float1.size()); + vrt.setBytes(floatSize, float1.data(), float1.size()); auto* trap = ww(floatSubtract_wrap, &import.at("float_from_mant_exp"), params, result, 0, - FLOAT_SIZE, - FLOAT_SIZE, - FLOAT_SIZE, - 2 * FLOAT_SIZE, - FLOAT_SIZE, + floatSize, + floatSize, + floatSize, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 4); BEAST_EXPECT(resultBytes == floatMinus1); } @@ -5638,13 +5673,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, 0, 0, - FLOAT_SIZE, + floatSize, -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { @@ -5660,83 +5695,83 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, 0, 0, - FLOAT_SIZE, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { // hfs.floatMultiply(makeSlice(float1), makeSlice(invalid), 0); WasmValVec params(7), result(1); vrt.setBytes(0, float1.data(), float1.size()); - vrt.setBytes(FLOAT_SIZE, invalid.data(), invalid.size()); + vrt.setBytes(floatSize, invalid.data(), invalid.size()); auto* trap = ww(floatMultiply_wrap, &import.at("float_multiply"), params, result, 0, - FLOAT_SIZE, - FLOAT_SIZE, + floatSize, + floatSize, invalid.size(), - 2 * FLOAT_SIZE, - FLOAT_SIZE, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { // hfs.floatMultiply(makeSlice(floatMax), makeSlice(float1More), 0); WasmValVec params(7), result(1); vrt.setBytes(0, floatMax.data(), floatMax.size()); - vrt.setBytes(FLOAT_SIZE, float1More.data(), float1More.size()); + vrt.setBytes(floatSize, float1More.data(), float1More.size()); auto* trap = ww(floatMultiply_wrap, &import.at("float_multiply"), params, result, 0, - FLOAT_SIZE, - FLOAT_SIZE, - FLOAT_SIZE, - 2 * FLOAT_SIZE, - FLOAT_SIZE, + floatSize, + floatSize, + floatSize, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_COMPUTATION_ERROR)); + static_cast(HostFunctionError::FloatComputationError)); } { // hfs.floatMultiply(makeSlice(float1), makeSlice(float1), 0); WasmValVec params(7), result(1); vrt.setBytes(0, float1.data(), float1.size()); - vrt.setBytes(FLOAT_SIZE, float1.data(), float1.size()); + vrt.setBytes(floatSize, float1.data(), float1.size()); auto* trap = ww(floatMultiply_wrap, &import.at("float_multiply"), params, result, 0, - FLOAT_SIZE, - FLOAT_SIZE, - FLOAT_SIZE, - 2 * FLOAT_SIZE, - FLOAT_SIZE, + floatSize, + floatSize, + floatSize, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 4); BEAST_EXPECT(resultBytes == float1); } @@ -5745,22 +5780,22 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatMultiply(makeSlice(floatIntZero), makeSlice(floatMaxIOU), 0); WasmValVec params(7), result(1); vrt.setBytes(0, floatIntZero.data(), floatIntZero.size()); - vrt.setBytes(FLOAT_SIZE, floatMaxIOU.data(), floatMaxIOU.size()); + vrt.setBytes(floatSize, floatMaxIOU.data(), floatMaxIOU.size()); auto* trap = ww(floatMultiply_wrap, &import.at("float_multiply"), params, result, 0, - FLOAT_SIZE, - FLOAT_SIZE, - FLOAT_SIZE, - 2 * FLOAT_SIZE, - FLOAT_SIZE, + floatSize, + floatSize, + floatSize, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 4); BEAST_EXPECT(resultBytes == floatIntZero); } @@ -5769,22 +5804,22 @@ struct HostFuncImpl_test : public beast::unit_test::suite // hfs.floatMultiply(makeSlice(float10), makeSlice(floatPreMaxExp), 0); WasmValVec params(7), result(1); vrt.setBytes(0, float10.data(), float10.size()); - vrt.setBytes(FLOAT_SIZE, floatPreMaxExp.data(), floatPreMaxExp.size()); + vrt.setBytes(floatSize, floatPreMaxExp.data(), floatPreMaxExp.size()); auto* trap = ww(floatMultiply_wrap, &import.at("float_multiply"), params, result, 0, - FLOAT_SIZE, - FLOAT_SIZE, - FLOAT_SIZE, - 2 * FLOAT_SIZE, - FLOAT_SIZE, + floatSize, + floatSize, + floatSize, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 4); BEAST_EXPECT(resultBytes == floatMaxExp); } @@ -5819,13 +5854,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, 0, 0, - FLOAT_SIZE, + floatSize, -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { @@ -5841,59 +5876,59 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, 0, 0, - FLOAT_SIZE, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { // hfs.floatDivide(makeSlice(float1), makeSlice(invalid), 0); WasmValVec params(7), result(1); vrt.setBytes(0, float1.data(), float1.size()); - vrt.setBytes(FLOAT_SIZE, invalid.data(), invalid.size()); + vrt.setBytes(floatSize, invalid.data(), invalid.size()); auto* trap = ww(floatDivide_wrap, &import.at("float_divide"), params, result, 0, - FLOAT_SIZE, - FLOAT_SIZE, + floatSize, + floatSize, invalid.size(), - 2 * FLOAT_SIZE, - FLOAT_SIZE, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { // hfs.floatDivide(makeSlice(float1), makeSlice(floatIntZero), 0); WasmValVec params(7), result(1); vrt.setBytes(0, float1.data(), float1.size()); - vrt.setBytes(FLOAT_SIZE, floatIntZero.data(), floatIntZero.size()); + vrt.setBytes(floatSize, floatIntZero.data(), floatIntZero.size()); auto* trap = ww(floatDivide_wrap, &import.at("float_divide"), params, result, 0, - FLOAT_SIZE, - FLOAT_SIZE, - FLOAT_SIZE, - 2 * FLOAT_SIZE, - FLOAT_SIZE, + floatSize, + floatSize, + floatSize, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_COMPUTATION_ERROR)); + static_cast(HostFunctionError::FloatComputationError)); } { // hfs.floatDivide(makeSlice(floatMax), makeSlice(*y), 0); @@ -5903,46 +5938,46 @@ struct HostFuncImpl_test : public beast::unit_test::suite { WasmValVec params(7), result(1); vrt.setBytes(0, floatMax.data(), floatMax.size()); - vrt.setBytes(FLOAT_SIZE, y->data(), y->size()); + vrt.setBytes(floatSize, y->data(), y->size()); auto* trap = ww(floatDivide_wrap, &import.at("float_divide"), params, result, 0, - FLOAT_SIZE, - FLOAT_SIZE, - FLOAT_SIZE, - 2 * FLOAT_SIZE, - FLOAT_SIZE, + floatSize, + floatSize, + floatSize, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_COMPUTATION_ERROR)); + static_cast(HostFunctionError::FloatComputationError)); } } { // hfs.floatDivide(makeSlice(floatIntZero), makeSlice(float1), 0); WasmValVec params(7), result(1); vrt.setBytes(0, floatIntZero.data(), floatIntZero.size()); - vrt.setBytes(FLOAT_SIZE, float1.data(), float1.size()); + vrt.setBytes(floatSize, float1.data(), float1.size()); auto* trap = ww(floatDivide_wrap, &import.at("float_divide"), params, result, 0, - FLOAT_SIZE, - FLOAT_SIZE, - FLOAT_SIZE, - 2 * FLOAT_SIZE, - FLOAT_SIZE, + floatSize, + floatSize, + floatSize, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 4); BEAST_EXPECT(resultBytes == floatIntZero); } @@ -5950,22 +5985,22 @@ struct HostFuncImpl_test : public beast::unit_test::suite { // hfs.floatDivide(makeSlice(floatMaxExp), makeSlice(float10), 0); WasmValVec params(7), result(1); vrt.setBytes(0, floatMaxExp.data(), floatMaxExp.size()); - vrt.setBytes(FLOAT_SIZE, float10.data(), float10.size()); + vrt.setBytes(floatSize, float10.data(), float10.size()); auto* trap = ww(floatDivide_wrap, &import.at("float_divide"), params, result, 0, - FLOAT_SIZE, - FLOAT_SIZE, - FLOAT_SIZE, - 2 * FLOAT_SIZE, - FLOAT_SIZE, + floatSize, + floatSize, + floatSize, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 4); BEAST_EXPECT(resultBytes == floatPreMaxExp); } @@ -5998,13 +6033,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, 2, 0, - FLOAT_SIZE, + floatSize, -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { // hfs.floatRoot(makeSlice(invalid), 3, 0); @@ -6018,14 +6053,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, invalid.size(), 3, - 2 * FLOAT_SIZE, - FLOAT_SIZE, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { // hfs.floatRoot(makeSlice(float1), -2, 0); @@ -6037,16 +6072,16 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, -2, - 2 * FLOAT_SIZE, - FLOAT_SIZE, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { // hfs.floatRoot(makeSlice(floatIntZero), 2, 0); @@ -6058,14 +6093,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 2, - 2 * FLOAT_SIZE, - FLOAT_SIZE, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 3); BEAST_EXPECT(resultBytes == floatIntZero); } @@ -6079,14 +6114,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 1, - 2 * FLOAT_SIZE, - FLOAT_SIZE, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 3); BEAST_EXPECT(resultBytes == floatMaxIOU); } @@ -6104,14 +6139,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 2, - 2 * FLOAT_SIZE, - FLOAT_SIZE, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 3); BEAST_EXPECT(resultBytes == float10); } @@ -6130,14 +6165,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 3, - 2 * FLOAT_SIZE, - FLOAT_SIZE, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 3); BEAST_EXPECT(resultBytes == float10); } @@ -6157,14 +6192,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 2, - 2 * FLOAT_SIZE, - FLOAT_SIZE, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 3); BEAST_EXPECT(resultBytes == *y); } @@ -6198,13 +6233,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, 2, 0, - FLOAT_SIZE, + floatSize, -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { // hfs.floatPower(makeSlice(invalid), 3, 0); @@ -6218,14 +6253,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, invalid.size(), 3, - 2 * FLOAT_SIZE, - FLOAT_SIZE, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { // hfs.floatPower(makeSlice(float1), -2, 0); @@ -6237,16 +6272,16 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, -2, - 2 * FLOAT_SIZE, - FLOAT_SIZE, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { @@ -6259,16 +6294,16 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 2, - FLOAT_SIZE, - FLOAT_SIZE, + floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_COMPUTATION_ERROR)); + static_cast(HostFunctionError::FloatComputationError)); } { @@ -6281,16 +6316,16 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, Number::maxExponent + 1, - FLOAT_SIZE, - FLOAT_SIZE, + floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { @@ -6303,14 +6338,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 0, - FLOAT_SIZE, - FLOAT_SIZE, + floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 3); BEAST_EXPECT(resultBytes == float1); } @@ -6324,14 +6359,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 1, - FLOAT_SIZE, - FLOAT_SIZE, + floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 3); BEAST_EXPECT(resultBytes == floatMaxIOU); } @@ -6349,14 +6384,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 2, - 2 * FLOAT_SIZE, - FLOAT_SIZE, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 3); BEAST_EXPECT(resultBytes == *x); } @@ -6376,14 +6411,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 2, - 2 * FLOAT_SIZE, - FLOAT_SIZE, + 2 * floatSize, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 3); BEAST_EXPECT(resultBytes == *y); } @@ -6441,13 +6476,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, amountBytes.size(), 256, - FLOAT_SIZE, + floatSize, -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { @@ -6464,13 +6499,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, amountBytes.size(), 256, - FLOAT_SIZE, + floatSize, 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { @@ -6487,11 +6522,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, amountBytes.size(), 256, - FLOAT_SIZE, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 2); BEAST_EXPECT(resultBytes == floatIntZero); } @@ -6513,11 +6548,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, amountBytes.size(), 256, - FLOAT_SIZE, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 2); BEAST_EXPECT(resultBytes == *y); } @@ -6538,11 +6573,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, amountBytes.size(), 256, - FLOAT_SIZE, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 2); BEAST_EXPECT(resultBytes == *y); } @@ -6562,7 +6597,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(ex); } - auto const USD = env.master["USD"]; + auto const usd = env.master["USD"]; { // hfs.floatFromSTAmount(amount, 0); STAmount const amount( @@ -6578,11 +6613,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, amountBytes.size(), 256, - FLOAT_SIZE, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 2); BEAST_EXPECT(resultBytes == floatMinIOU); } @@ -6602,11 +6637,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, amountBytes.size(), 256, - FLOAT_SIZE, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 2); BEAST_EXPECT(resultBytes == floatMaxIOU); } @@ -6643,13 +6678,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, numBytes.size(), 256, - FLOAT_SIZE, + floatSize, -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { @@ -6666,13 +6701,13 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, numBytes.size(), 256, - FLOAT_SIZE, + floatSize, 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { @@ -6690,11 +6725,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, numBytes.size(), 256, - FLOAT_SIZE, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 2); BEAST_EXPECT(resultBytes == floatUIntMax); } @@ -6713,11 +6748,11 @@ struct HostFuncImpl_test : public beast::unit_test::suite 0, numBytes.size(), 256, - FLOAT_SIZE, + floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 2); BEAST_EXPECT(resultBytes == floatMinusMaxExp); } @@ -6749,7 +6784,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 256, 8, -1); @@ -6757,7 +6792,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { @@ -6770,7 +6805,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 256, 8, 4); @@ -6778,7 +6813,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { @@ -6790,7 +6825,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { @@ -6803,7 +6838,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 256, 8, 0); @@ -6811,7 +6846,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { @@ -6824,7 +6859,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 256, 8, 0); @@ -6849,7 +6884,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 256, 8, 0); @@ -6874,7 +6909,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 256, 8, 0); @@ -6899,7 +6934,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 256, 8, 0); @@ -6926,7 +6961,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 256, 8, 0); @@ -6934,7 +6969,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_COMPUTATION_ERROR)); + static_cast(HostFunctionError::FloatComputationError)); } { @@ -6947,7 +6982,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 256, 8, 0); @@ -6955,7 +6990,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_COMPUTATION_ERROR)); + static_cast(HostFunctionError::FloatComputationError)); } // Test rounding modes with pi (3.141592653589793) @@ -6970,7 +7005,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 256, 8, 0); @@ -6992,7 +7027,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 256, 8, 1); @@ -7014,7 +7049,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 256, 8, 2); @@ -7036,7 +7071,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 256, 8, 3); @@ -7074,7 +7109,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 256, 8, 512, @@ -7083,7 +7118,7 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == - static_cast(HostFunctionError::FLOAT_INPUT_MALFORMED)); + static_cast(HostFunctionError::FloatInputMalformed)); } { @@ -7096,14 +7131,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 256, 8, 512, 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const mantissa = vrt.getInt64(params, 2); auto const exponent = vrt.getInt32(params, 4); BEAST_EXPECT(mantissa == 0) && @@ -7124,14 +7159,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 256, 8, 512, 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const mantissa = vrt.getInt64(params, 2); auto const exponent = vrt.getInt32(params, 4); BEAST_EXPECT(mantissa == 1000000000000000000) && BEAST_EXPECT(exponent == -normalExp); @@ -7151,14 +7186,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 256, 8, 512, 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const mantissa = vrt.getInt64(params, 2); auto const exponent = vrt.getInt32(params, 4); BEAST_EXPECT(mantissa == -1000000000000000000) && BEAST_EXPECT(exponent == -normalExp); @@ -7178,14 +7213,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 256, 8, 512, 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const mantissa = vrt.getInt64(params, 2); auto const exponent = vrt.getInt32(params, 4); BEAST_EXPECT(mantissa == 1000000000000000000) && @@ -7206,14 +7241,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 256, 8, 512, 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const mantissa = vrt.getInt64(params, 2); auto const exponent = vrt.getInt32(params, 4); BEAST_EXPECT(mantissa == 3141592653589793000) && BEAST_EXPECT(exponent == -normalExp); @@ -7233,14 +7268,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 256, 8, 512, 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const mantissa = vrt.getInt64(params, 2); auto const exponent = vrt.getInt32(params, 4); BEAST_EXPECT(mantissa == std::numeric_limits::max()) && @@ -7261,14 +7296,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 256, 8, 512, 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const mantissa = vrt.getInt64(params, 2); auto const exponent = vrt.getInt32(params, 4); BEAST_EXPECT(mantissa == (std::numeric_limits::min() / 10) - 1) && @@ -7289,14 +7324,14 @@ struct HostFuncImpl_test : public beast::unit_test::suite params, result, 0, - FLOAT_SIZE, + floatSize, 256, 8, 512, 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == FLOAT_SIZE); + BEAST_EXPECT(result[0].of.i32 == floatSize); auto const mantissa = vrt.getInt64(params, 2); auto const exponent = vrt.getInt32(params, 4); BEAST_EXPECT(mantissa == Number::maxRep) && @@ -7432,5 +7467,4 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE(HostFuncImpl, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index 1a0d640522..524a3e3379 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -8,36 +8,34 @@ #include #include -namespace xrpl { - -namespace test { +namespace xrpl::test { struct TestLedgerDataProvider : public HostFunctions { - jtx::Env& env_; - void* rt_ = nullptr; + jtx::Env& env; + void* rt = nullptr; public: - TestLedgerDataProvider(jtx::Env& env) : HostFunctions(env.journal), env_(env) + TestLedgerDataProvider(jtx::Env& env) : HostFunctions(env.journal), env(env) { } - virtual void + void setRT(void* rt) override { - rt_ = rt; + rt = rt; } - virtual void* + [[nodiscard]] void* getRT() const override { - return rt_; + return rt; } Expected getLedgerSqn() const override { - return env_.current()->seq(); + return env.current()->seq(); } }; @@ -46,28 +44,28 @@ struct TestHostFunctions : public HostFunctions test::jtx::Env& env_; AccountID accountID_; Bytes data_; - int clock_drift_ = 0; - void* rt_ = nullptr; + int clock_drift = 0; + void* rt = nullptr; public: TestHostFunctions(test::jtx::Env& env, int cd = 0) - : HostFunctions(env.journal), env_(env), clock_drift_(cd) + : HostFunctions(env.journal), env_(env), clock_drift(cd) { accountID_ = env_.master.id(); std::string t = "10000"; data_ = Bytes{t.begin(), t.end()}; } - virtual void + void setRT(void* rt) override { - rt_ = rt; + rt = rt; } - virtual void* + [[nodiscard]] void* getRT() const override { - return rt_; + return rt; } Expected @@ -106,7 +104,7 @@ public: return 1; } - virtual Expected + Expected cacheLedgerObj(uint256 const& objId, int32_t cacheIdx) override { return 1; @@ -116,8 +114,10 @@ public: getTxField(SField const& fname) const override { if (fname == sfAccount) + { return Bytes(accountID_.begin(), accountID_.end()); - else if (fname == sfFee) + } + if (fname == sfFee) { int64_t x = 235; uint8_t const* p = reinterpret_cast(&x); @@ -141,8 +141,10 @@ public: { auto const& sn = fname.getName(); if (sn == "Destination" || sn == "Account") + { return Bytes(accountID_.begin(), accountID_.end()); - else if (sn == "Data") + } + if (sn == "Data") return data_; else if (sn == "FinishAfter") { @@ -163,7 +165,7 @@ public: uint8_t const* p = reinterpret_cast(&x); return Bytes{p, p + sizeof(x)}; } - else if (fname == sfAccount) + if (fname == sfAccount) { return Bytes(accountID_.begin(), accountID_.end()); } @@ -282,7 +284,7 @@ public: accountKeylet(AccountID const& account) const override { if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); + return Unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::account(account); return Bytes{keylet.key.begin(), keylet.key.end()}; } @@ -291,9 +293,9 @@ public: ammKeylet(Asset const& issue1, Asset const& issue2) const override { if (issue1 == issue2) - return Unexpected(HostFunctionError::INVALID_PARAMS); + return Unexpected(HostFunctionError::InvalidParams); if (issue1.holds() || issue2.holds()) - return Unexpected(HostFunctionError::INVALID_PARAMS); + return Unexpected(HostFunctionError::InvalidParams); auto const keylet = keylet::amm(issue1, issue2); return Bytes{keylet.key.begin(), keylet.key.end()}; } @@ -302,7 +304,7 @@ public: checkKeylet(AccountID const& account, std::uint32_t seq) const override { if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); + return Unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::check(account, seq); return Bytes{keylet.key.begin(), keylet.key.end()}; } @@ -312,8 +314,8 @@ public: const override { if (!subject || !issuer || credentialType.empty() || - credentialType.size() > maxCredentialTypeLength) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); + credentialType.size() > kMaxCredentialTypeLength) + return Unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::credential(subject, issuer, credentialType); return Bytes{keylet.key.begin(), keylet.key.end()}; } @@ -322,7 +324,7 @@ public: escrowKeylet(AccountID const& account, std::uint32_t seq) const override { if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); + return Unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::escrow(account, seq); return Bytes{keylet.key.begin(), keylet.key.end()}; } @@ -331,7 +333,7 @@ public: oracleKeylet(AccountID const& account, std::uint32_t documentId) const override { if (!account) - return Unexpected(HostFunctionError::INVALID_ACCOUNT); + return Unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::oracle(account, documentId); return Bytes{keylet.key.begin(), keylet.key.end()}; } @@ -341,7 +343,7 @@ public: { if (!account || !nftId) { - return Unexpected(HostFunctionError::INVALID_PARAMS); + return Unexpected(HostFunctionError::InvalidParams); } std::string s = "https://ripple.com"; @@ -476,7 +478,7 @@ public: return wasm_float::floatToIntImpl(x, mode); } - virtual Expected + Expected floatToMantExp(Slice const& x) const override { return wasm_float::floatToMantExpImpl(x); @@ -533,22 +535,21 @@ public: struct TestHostFunctionsSink : public TestHostFunctions { - test::StreamSink sink_; - void const* rt_ = nullptr; + test::StreamSink sink; + void const* rt = nullptr; public: explicit TestHostFunctionsSink(test::jtx::Env& env, int cd = 0) : TestHostFunctions(env, cd), sink_(beast::severities::kDebug) { - j_ = beast::Journal(sink_); + j = beast::Journal(sink); } test::StreamSink& getSink() { - return sink_; + return sink; } }; -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 1140de9293..37a91c6778 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -1,27 +1,49 @@ +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #ifdef _DEBUG // #define DEBUG_OUTPUT 1 #endif #include -#include - #include -namespace xrpl { -namespace test { +namespace xrpl::test { bool testGetDataIncrement(); using Add_proto = int32_t(int32_t, int32_t); static wasm_trap_t* -Add(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +add(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { - int32_t const Val1 = params->data[0].of.i32; - int32_t const Val2 = params->data[1].of.i32; + int32_t const val1 = params->data[0].of.i32; + int32_t const val2 = params->data[1].of.i32; // printf("Host function \"Add\": %d + %d\n", Val1, Val2); - results->data[0] = WASM_I32_VAL(Val1 + Val2); + results->data[0] = WASM_I32_VAL(val1 + val2); return nullptr; } @@ -76,27 +98,27 @@ uleb128(IT&& it) std::pair getSection(Bytes const& module, std::uint8_t n) { - static std::uint8_t const hdr[] = {0x00, 0x61, 0x73, 0x6D}; - static std::uint8_t const ver[] = {0x01, 0x00, 0x00, 0x00}; - static std::uint8_t const lastSec = 12; + static std::uint8_t const kHdr[] = {0x00, 0x61, 0x73, 0x6D}; + static std::uint8_t const kVer[] = {0x01, 0x00, 0x00, 0x00}; + static std::uint8_t const kLastSec = 12; // sections: // 0: "Custom", 1: "Type", 2: "Import", 3: "Function", 4: "Table", 5: "Memory", 6: "Global", // 7: "Export", 8: "Start", 9: "Element", 10: "Code", 11: "Data", 12: "DataCount" - if (module.size() < sizeof(hdr) + sizeof(ver) + 2) + if (module.size() < sizeof(kHdr) + sizeof(kVer) + 2) return {0, 0}; - if (memcmp(module.data(), hdr, sizeof(hdr)) != 0) + if (memcmp(module.data(), kHdr, sizeof(kHdr)) != 0) return {0, 0}; - if (memcmp(module.data() + sizeof(hdr), ver, sizeof(ver)) != 0) + if (memcmp(module.data() + sizeof(kHdr), kVer, sizeof(kVer)) != 0) return {0, 0}; - unsigned pos = sizeof(hdr) + sizeof(ver); // sections start + unsigned pos = sizeof(kHdr) + sizeof(kVer); // sections start for (; pos < module.size();) { auto const start = pos; std::uint8_t const byte = module[pos++]; - if (byte > lastSec) + if (byte > kLastSec) return {0, 0}; auto [sz, cnt] = uleb128(module.cbegin() + pos); @@ -127,7 +149,7 @@ runFinishFunction(std::string const& code) return std::nullopt; } -struct Wasm_test : public beast::unit_test::suite +struct Wasm_test : public beast::unit_test::Suite { void checkResult( @@ -188,7 +210,7 @@ struct Wasm_test : public beast::unit_test::suite HostFunctions hfs; ImportVec imports; - WasmImpFunc(imports, "func-add", reinterpret_cast(&Add), &hfs); + WasmImpFunc(imports, "func-add", reinterpret_cast(&add), &hfs); auto re = vm.run(wasm, hfs, 10'000'000, "addTwo", wasmParams(1234, 5678), imports); @@ -240,7 +262,7 @@ struct Wasm_test : public beast::unit_test::suite "732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a" "6d756c746976616c7565"); - auto const re = preflightEscrowWasm(badWasm, hfs, ESCROW_FUNCTION_NAME); + auto const re = preflightEscrowWasm(badWasm, hfs, escrowFunctionName); BEAST_EXPECT(!isTesSuccess(re)); } } @@ -250,7 +272,7 @@ struct Wasm_test : public beast::unit_test::suite { testcase("Wasm get ledger sequence"); - auto ledgerSqnWasm = hexToBytes(ledgerSqnWasmHex); + auto ledgerSqnWasm = hexToBytes(kLedgerSqnWasmHex); using namespace test::jtx; @@ -260,8 +282,8 @@ struct Wasm_test : public beast::unit_test::suite WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn", &hfs, 33); auto& engine = WasmEngine::instance(); - auto re = engine.run( - ledgerSqnWasm, hfs, 1'000'000, ESCROW_FUNCTION_NAME, {}, imports, env.journal); + auto re = + engine.run(ledgerSqnWasm, hfs, 1'000'000, escrowFunctionName, {}, imports, env.journal); checkResult(re, 0, 440); @@ -269,7 +291,7 @@ struct Wasm_test : public beast::unit_test::suite env.close(); // empty module, throwing exception - re = engine.run({}, hfs, 1'000'000, ESCROW_FUNCTION_NAME, {}, imports, env.journal); + re = engine.run({}, hfs, 1'000'000, escrowFunctionName, {}, imports, env.journal); BEAST_EXPECT(!re); env.close(); } @@ -279,7 +301,7 @@ struct Wasm_test : public beast::unit_test::suite { testcase("Wasm import/export functions"); - auto impExpWasm = hexToBytes(impExpHex); + auto impExpWasm = hexToBytes(kImpExpHex); using namespace test::jtx; @@ -344,7 +366,7 @@ struct Wasm_test : public beast::unit_test::suite { testcase("Wasm fibo"); - auto const fibWasm = hexToBytes(fibWasmHex); + auto const fibWasm = hexToBytes(kFibWasmHex); auto& engine = WasmEngine::instance(); HostFunctions hfs; @@ -362,7 +384,7 @@ struct Wasm_test : public beast::unit_test::suite Env env(*this); { - auto const allHostFuncWasm = hexToBytes(allHostFunctionsWasmHex); + auto const allHostFuncWasm = hexToBytes(kAllHostFunctionsWasmHex); auto& engine = WasmEngine::instance(); @@ -372,7 +394,7 @@ struct Wasm_test : public beast::unit_test::suite i.second.second.gas = 0; auto re = engine.run( - allHostFuncWasm, hfs, 1'000'000, ESCROW_FUNCTION_NAME, {}, imp, env.journal); + allHostFuncWasm, hfs, 1'000'000, escrowFunctionName, {}, imp, env.journal); checkResult(re, 1, 27'080); @@ -386,7 +408,7 @@ struct Wasm_test : public beast::unit_test::suite env.close(); { - auto const allHostFuncWasm = hexToBytes(allHostFunctionsWasmHex); + auto const allHostFuncWasm = hexToBytes(kAllHostFunctionsWasmHex); auto& engine = WasmEngine::instance(); @@ -394,7 +416,7 @@ struct Wasm_test : public beast::unit_test::suite auto const imp = createWasmImport(hfs); auto re = engine.run( - allHostFuncWasm, hfs, 1'000'000, ESCROW_FUNCTION_NAME, {}, imp, env.journal); + allHostFuncWasm, hfs, 1'000'000, escrowFunctionName, {}, imp, env.journal); checkResult(re, 1, 70'340); @@ -403,7 +425,7 @@ struct Wasm_test : public beast::unit_test::suite // not enough gas { - auto const allHostFuncWasm = hexToBytes(allHostFunctionsWasmHex); + auto const allHostFuncWasm = hexToBytes(kAllHostFunctionsWasmHex); auto& engine = WasmEngine::instance(); @@ -411,7 +433,7 @@ struct Wasm_test : public beast::unit_test::suite auto const imp = createWasmImport(hfs); auto re = - engine.run(allHostFuncWasm, hfs, 200, ESCROW_FUNCTION_NAME, {}, imp, env.journal); + engine.run(allHostFuncWasm, hfs, 200, escrowFunctionName, {}, imp, env.journal); if (BEAST_EXPECT(!re)) { @@ -428,20 +450,20 @@ struct Wasm_test : public beast::unit_test::suite { testcase("escrow wasm devnet test"); - auto const allHFWasm = hexToBytes(allHostFunctionsWasmHex); + auto const allHFWasm = hexToBytes(kAllHostFunctionsWasmHex); using namespace test::jtx; Env env{*this}; { TestHostFunctions hfs(env, 0); - auto re = runEscrowWasm(allHFWasm, hfs, 100'000, ESCROW_FUNCTION_NAME, {}); + auto re = runEscrowWasm(allHFWasm, hfs, 100'000, escrowFunctionName, {}); checkResult(re, 1, 70'340); } { // Invalid gas limit (0) should be rejected (boundary condition) TestHostFunctions hfs(env, 0); - auto re = runEscrowWasm(allHFWasm, hfs, -1, ESCROW_FUNCTION_NAME, {}); + auto re = runEscrowWasm(allHFWasm, hfs, -1, escrowFunctionName, {}); BEAST_EXPECT(!re.has_value()); BEAST_EXPECT(re.error() == temBAD_AMOUNT); } @@ -449,7 +471,7 @@ struct Wasm_test : public beast::unit_test::suite { // Invalid gas limit (-1) should be rejected TestHostFunctions hfs(env, 0); - auto re = runEscrowWasm(allHFWasm, hfs, 0, ESCROW_FUNCTION_NAME, {}); + auto re = runEscrowWasm(allHFWasm, hfs, 0, escrowFunctionName, {}); BEAST_EXPECT(!re.has_value()); BEAST_EXPECT(re.error() == temBAD_AMOUNT); } @@ -458,7 +480,7 @@ struct Wasm_test : public beast::unit_test::suite // max() gas TestHostFunctions hfs(env, 0); auto re = runEscrowWasm( - allHFWasm, hfs, std::numeric_limits::max(), ESCROW_FUNCTION_NAME, {}); + allHFWasm, hfs, std::numeric_limits::max(), escrowFunctionName, {}); checkResult(re, 1, 70'340); } @@ -471,12 +493,12 @@ struct Wasm_test : public beast::unit_test::suite Expected getTxField(SField const& fname) const override { - return Unexpected(HostFunctionError::FIELD_NOT_FOUND); + return Unexpected(HostFunctionError::FieldNotFound); } }; FieldNotFoundHostFunctions hfs(env); - auto re = runEscrowWasm(allHFWasm, hfs, 100'000, ESCROW_FUNCTION_NAME, {}); + auto re = runEscrowWasm(allHFWasm, hfs, 100'000, escrowFunctionName, {}); checkResult(re, -201, 28'965); } @@ -494,7 +516,7 @@ struct Wasm_test : public beast::unit_test::suite }; OversizedFieldHostFunctions hfs(env); - auto re = runEscrowWasm(allHFWasm, hfs, 100'000, ESCROW_FUNCTION_NAME, {}); + auto re = runEscrowWasm(allHFWasm, hfs, 100'000, escrowFunctionName, {}); checkResult(re, -201, 28'965); } @@ -502,7 +524,7 @@ struct Wasm_test : public beast::unit_test::suite #ifndef DEBUG_OUTPUT { // fail because recursion too deep - auto const deepWasm = hexToBytes(deepRecursionHex); + auto const deepWasm = hexToBytes(kDeepRecursionHex); TestHostFunctionsSink hfs(env); std::string const funcName("finish"); @@ -530,7 +552,7 @@ struct Wasm_test : public beast::unit_test::suite #endif { // infinite loop - auto const infiniteLoopWasm = hexToBytes(infiniteLoopWasmHex); + auto const infiniteLoopWasm = hexToBytes(kInfiniteLoopWasmHex); std::string const funcName("loop"); TestHostFunctions hfs(env, 0); @@ -544,7 +566,7 @@ struct Wasm_test : public beast::unit_test::suite { // expected import not provided - auto const lgrSqnWasm = hexToBytes(ledgerSqnWasmHex); + auto const lgrSqnWasm = hexToBytes(kLedgerSqnWasmHex); TestLedgerDataProvider hfs(env); ImportVec imports; WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn2", &hfs); @@ -552,14 +574,14 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); auto re = engine.run( - lgrSqnWasm, hfs, 1'000'000, ESCROW_FUNCTION_NAME, {}, imports, env.journal); + lgrSqnWasm, hfs, 1'000'000, escrowFunctionName, {}, imports, env.journal); BEAST_EXPECT(!re); } { // bad import format - auto const lgrSqnWasm = hexToBytes(ledgerSqnWasmHex); + auto const lgrSqnWasm = hexToBytes(kLedgerSqnWasmHex); TestLedgerDataProvider hfs(env); ImportVec imports; WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn", &hfs); @@ -568,14 +590,14 @@ struct Wasm_test : public beast::unit_test::suite auto& engine = WasmEngine::instance(); auto re = engine.run( - lgrSqnWasm, hfs, 1'000'000, ESCROW_FUNCTION_NAME, {}, imports, env.journal); + lgrSqnWasm, hfs, 1'000'000, escrowFunctionName, {}, imports, env.journal); BEAST_EXPECT(!re); } { // bad function name - auto const lgrSqnWasm = hexToBytes(ledgerSqnWasmHex); + auto const lgrSqnWasm = hexToBytes(kLedgerSqnWasmHex); TestLedgerDataProvider hfs(env); ImportVec imports; WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn", &hfs); @@ -598,7 +620,7 @@ struct Wasm_test : public beast::unit_test::suite Env env(*this); { - auto const floatTestWasm = hexToBytes(floatTestsWasmHex); + auto const floatTestWasm = hexToBytes(kFloatTestsWasmHex); TestHostFunctions hfs(env, 0); auto re = runEscrowWasm(floatTestWasm, hfs, 200'000, funcName, {}); @@ -607,7 +629,7 @@ struct Wasm_test : public beast::unit_test::suite } { - auto const float0Wasm = hexToBytes(float0Hex); + auto const float0Wasm = hexToBytes(kFloat0Hex); TestHostFunctions hfs(env, 0); auto re = runEscrowWasm(float0Wasm, hfs, 100'000, funcName, {}); @@ -625,11 +647,11 @@ struct Wasm_test : public beast::unit_test::suite Env env{*this}; - auto const codecovWasm = hexToBytes(codecovTestsWasmHex); + auto const codecovWasm = hexToBytes(kCodecovTestsWasmHex); TestHostFunctions hfs(env, 0); auto const allowance = 220'169; - auto re = runEscrowWasm(codecovWasm, hfs, allowance, ESCROW_FUNCTION_NAME, {}); + auto re = runEscrowWasm(codecovWasm, hfs, allowance, escrowFunctionName, {}); checkResult(re, 1, allowance); } @@ -642,7 +664,7 @@ struct Wasm_test : public beast::unit_test::suite using namespace test::jtx; Env env{*this}; - auto disabledFloatWasm = hexToBytes(disabledFloatHex); + auto disabledFloatWasm = hexToBytes(kDisabledFloatHex); std::string const funcName("finish"); TestHostFunctions hfs(env, 0); @@ -670,82 +692,82 @@ struct Wasm_test : public beast::unit_test::suite testWasmMemory() { testcase("Wasm additional memory limit tests"); - BEAST_EXPECT(runFinishFunction(memoryPointerAtLimitHex).value() == 1); - BEAST_EXPECT(runFinishFunction(memoryPointerOverLimitHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(memoryOffsetOverLimitHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(memoryEndOfWordOverLimitHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(memoryGrow0To1PageHex).value() == 1); - BEAST_EXPECT(runFinishFunction(memoryGrow1To0PageHex).value() == -1); - BEAST_EXPECT(runFinishFunction(memoryLastByteOf8MBHex).value() == 1); - BEAST_EXPECT(runFinishFunction(memoryGrow1MoreThan8MBHex).value() == -1); - BEAST_EXPECT(runFinishFunction(memoryGrow0MoreThan8MBHex).value() == 1); - BEAST_EXPECT(runFinishFunction(memoryInit1MoreThan8MBHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(memoryNegativeAddressHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kMemoryPointerAtLimitHex).value() == 1); + BEAST_EXPECT(runFinishFunction(kMemoryPointerOverLimitHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kMemoryOffsetOverLimitHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kMemoryEndOfWordOverLimitHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kMemoryGrow0To1PageHex).value() == 1); + BEAST_EXPECT(runFinishFunction(kMemoryGrow1To0PageHex).value() == -1); + BEAST_EXPECT(runFinishFunction(kMemoryLastByteOf8MbHex).value() == 1); + BEAST_EXPECT(runFinishFunction(kMemoryGrow1MoreThan8MbHex).value() == -1); + BEAST_EXPECT(runFinishFunction(kMemoryGrow0MoreThan8MbHex).value() == 1); + BEAST_EXPECT(runFinishFunction(kMemoryInit1MoreThan8MbHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kMemoryNegativeAddressHex).has_value() == false); } void testWasmTable() { testcase("Wasm table limit tests"); - BEAST_EXPECT(runFinishFunction(table64ElementsHex).value() == 1); - BEAST_EXPECT(runFinishFunction(table65ElementsHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(table2TablesHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(table0ElementsHex).value() == 1); - BEAST_EXPECT(runFinishFunction(tableUintMaxHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kTable64ElementsHex).value() == 1); + BEAST_EXPECT(runFinishFunction(kTable65ElementsHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kTable2TablesHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kTable0ElementsHex).value() == 1); + BEAST_EXPECT(runFinishFunction(kTableUintMaxHex).has_value() == false); } void testWasmProposal() { testcase("Wasm disabled proposal tests"); - BEAST_EXPECT(runFinishFunction(proposalMutableGlobalHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(proposalGcStructNewHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(proposalMultiValueHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(proposalSignExtHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(proposalFloatToIntHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(proposalBulkMemoryHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(proposalRefTypesHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(proposalTailCallHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(proposalExtendedConstHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(proposalMultiMemoryHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(proposalCustomPageSizesHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(proposalMemory64Hex).has_value() == false); - BEAST_EXPECT(runFinishFunction(proposalWideArithmeticHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kProposalMutableGlobalHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kProposalGcStructNewHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kProposalMultiValueHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kProposalSignExtHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kProposalFloatToIntHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kProposalBulkMemoryHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kProposalRefTypesHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kProposalTailCallHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kProposalExtendedConstHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kProposalMultiMemoryHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kProposalCustomPageSizesHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kProposalMemory64Hex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kProposalWideArithmeticHex).has_value() == false); } void testWasmTrap() { testcase("Wasm trap tests"); - BEAST_EXPECT(runFinishFunction(trapDivideBy0Hex).has_value() == false); - BEAST_EXPECT(runFinishFunction(trapIntOverflowHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(trapUnreachableHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(trapNullCallHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(trapFuncSigMismatchHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kTrapDivideBy0Hex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kTrapIntOverflowHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kTrapUnreachableHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kTrapNullCallHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kTrapFuncSigMismatchHex).has_value() == false); } void testWasmWasi() { testcase("Wasm Wasi tests"); - BEAST_EXPECT(runFinishFunction(wasiGetTimeHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(wasiPrintHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kWasiGetTimeHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kWasiPrintHex).has_value() == false); } void testWasmSectionCorruption() { testcase("Wasm Section Corruption tests"); - BEAST_EXPECT(runFinishFunction(badMagicNumberHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(badVersionNumberHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(lyingHeaderHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(neverEndingNumberHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(vectorLieHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(sectionOrderingHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(ghostPayloadHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(junkAfterSectionHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(invalidSectionIdHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(localVariableBombHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kBadMagicNumberHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kBadVersionNumberHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kLyingHeaderHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kNeverEndingNumberHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kVectorLieHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kSectionOrderingHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kGhostPayloadHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kJunkAfterSectionHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kInvalidSectionIdHex).has_value() == false); + BEAST_EXPECT(runFinishFunction(kLocalVariableBombHex).has_value() == false); } void @@ -756,7 +778,7 @@ struct Wasm_test : public beast::unit_test::suite using namespace test::jtx; Env env(*this); - auto const startLoopWasm = hexToBytes(startLoopHex); + auto const startLoopWasm = hexToBytes(kStartLoopHex); TestLedgerDataProvider hfs(env); ImportVec const imports; @@ -764,8 +786,8 @@ struct Wasm_test : public beast::unit_test::suite auto checkRes = engine.check(startLoopWasm, hfs, "finish", {}, imports, env.journal); BEAST_EXPECTS(checkRes == tesSUCCESS, std::to_string(TERtoInt(checkRes))); - auto re = engine.run( - startLoopWasm, hfs, 1'000'000, ESCROW_FUNCTION_NAME, {}, imports, env.journal); + auto re = + engine.run(startLoopWasm, hfs, 1'000'000, escrowFunctionName, {}, imports, env.journal); BEAST_EXPECTS(re.error() == tecFAILED_PROCESSING, std::to_string(TERtoInt(re.error()))); } @@ -775,7 +797,7 @@ struct Wasm_test : public beast::unit_test::suite testcase("Wasm Bad Align"); // bad_align.c - auto const badAlignWasm = hexToBytes(badAlignWasmHex); + auto const badAlignWasm = hexToBytes(kBadAlignWasmHex); using namespace test::jtx; @@ -816,7 +838,7 @@ struct Wasm_test : public beast::unit_test::suite "071302066d656d6f727902000666696e69736800000a0a01" "08004280808080100b"; auto const wasm = hexToBytes(wasmHex); - auto const re = runEscrowWasm(wasm, hfs, 100'000, ESCROW_FUNCTION_NAME, {}); + auto const re = runEscrowWasm(wasm, hfs, 100'000, escrowFunctionName, {}); BEAST_EXPECT(!re); } @@ -832,7 +854,7 @@ struct Wasm_test : public beast::unit_test::suite "0061736d01000000010401600000030201000503010001071302066d656d6f" "727902000666696e69736800000a050103000f0b"; auto const wasm = hexToBytes(wasmHex); - auto const re = runEscrowWasm(wasm, hfs, 100'000, ESCROW_FUNCTION_NAME, {}); + auto const re = runEscrowWasm(wasm, hfs, 100'000, escrowFunctionName, {}); BEAST_EXPECT(!re); } @@ -847,7 +869,7 @@ struct Wasm_test : public beast::unit_test::suite "6d6f727902000666696e69736800000a10010e0041808080800141ff818080" "010b"; auto const wasm = hexToBytes(wasmHex); - auto const re = runEscrowWasm(wasm, hfs, 100'000, ESCROW_FUNCTION_NAME, {}); + auto const re = runEscrowWasm(wasm, hfs, 100'000, escrowFunctionName, {}); BEAST_EXPECT(!re); } } @@ -909,53 +931,53 @@ struct Wasm_test : public beast::unit_test::suite { testcase("Wasm swap bytes"); - uint64_t const SWAP_DATAU64 = 0x123456789abcdeffull; - uint64_t const REVERSE_SWAP_DATAU64 = 0xffdebc9a78563412ull; - int64_t const SWAP_DATAI64 = 0x123456789abcdeffll; - int64_t const REVERSE_SWAP_DATAI64 = 0xffdebc9a78563412ll; + uint64_t const swapDataU64 = 0x123456789abcdeffull; + uint64_t const reverseSwapDataU64 = 0xffdebc9a78563412ull; + int64_t const swapDataI64 = 0x123456789abcdeffll; + int64_t const reverseSwapDataI64 = 0xffdebc9a78563412ll; - uint32_t const SWAP_DATAU32 = 0x12789aff; - uint32_t const REVERSE_SWAP_DATAU32 = 0xff9a7812; - int32_t const SWAP_DATAI32 = 0x12789aff; - int32_t const REVERSE_SWAP_DATAI32 = 0xff9a7812; + uint32_t const swapDataU32 = 0x12789aff; + uint32_t const reverseSwapDataU32 = 0xff9a7812; + int32_t const swapDataI32 = 0x12789aff; + int32_t const reverseSwapDataI32 = 0xff9a7812; - uint16_t const SWAP_DATAU16 = 0x12ff; - uint16_t const REVERSE_SWAP_DATAU16 = 0xff12; - int16_t const SWAP_DATAI16 = 0x12ff; - int16_t const REVERSE_SWAP_DATAI16 = 0xff12; + uint16_t const swapDataU16 = 0x12ff; + uint16_t const reverseSwapDataU16 = 0xff12; + int16_t const swapDataI16 = 0x12ff; + int16_t const reverseSwapDataI16 = 0xff12; - uint64_t b1 = SWAP_DATAU64; - int64_t b2 = SWAP_DATAI64; + uint64_t b1 = swapDataU64; + int64_t b2 = swapDataI64; b1 = adjustWasmEndianessHlp(b1); b2 = adjustWasmEndianessHlp(b2); - BEAST_EXPECT(b1 == REVERSE_SWAP_DATAU64); - BEAST_EXPECT(b2 == REVERSE_SWAP_DATAI64); + BEAST_EXPECT(b1 == reverseSwapDataU64); + BEAST_EXPECT(b2 == reverseSwapDataI64); b1 = adjustWasmEndianessHlp(b1); b2 = adjustWasmEndianessHlp(b2); - BEAST_EXPECT(b1 == SWAP_DATAU64); - BEAST_EXPECT(b2 == SWAP_DATAI64); + BEAST_EXPECT(b1 == swapDataU64); + BEAST_EXPECT(b2 == swapDataI64); - uint32_t b3 = SWAP_DATAU32; - int32_t b4 = SWAP_DATAI32; + uint32_t b3 = swapDataU32; + int32_t b4 = swapDataI32; b3 = adjustWasmEndianessHlp(b3); b4 = adjustWasmEndianessHlp(b4); - BEAST_EXPECT(b3 == REVERSE_SWAP_DATAU32); - BEAST_EXPECT(b4 == REVERSE_SWAP_DATAI32); + BEAST_EXPECT(b3 == reverseSwapDataU32); + BEAST_EXPECT(b4 == reverseSwapDataI32); b3 = adjustWasmEndianessHlp(b3); b4 = adjustWasmEndianessHlp(b4); - BEAST_EXPECT(b3 == SWAP_DATAU32); - BEAST_EXPECT(b4 == SWAP_DATAI32); + BEAST_EXPECT(b3 == swapDataU32); + BEAST_EXPECT(b4 == swapDataI32); - uint16_t b5 = SWAP_DATAU16; - int16_t b6 = SWAP_DATAI16; + uint16_t b5 = swapDataU16; + int16_t b6 = swapDataI16; b5 = adjustWasmEndianessHlp(b5); b6 = adjustWasmEndianessHlp(b6); - BEAST_EXPECT(b5 == REVERSE_SWAP_DATAU16); - BEAST_EXPECT(b6 == REVERSE_SWAP_DATAI16); + BEAST_EXPECT(b5 == reverseSwapDataU16); + BEAST_EXPECT(b6 == reverseSwapDataI16); b5 = adjustWasmEndianessHlp(b5); b6 = adjustWasmEndianessHlp(b6); - BEAST_EXPECT(b5 == SWAP_DATAU16); - BEAST_EXPECT(b6 == SWAP_DATAI16); + BEAST_EXPECT(b5 == swapDataU16); + BEAST_EXPECT(b6 == swapDataI16); } void @@ -963,8 +985,8 @@ struct Wasm_test : public beast::unit_test::suite { testcase("Wasm Many params"); - auto const params1k = hexToBytes(thousandParamsHex); - auto const params1k1 = hexToBytes(thousand1ParamsHex); + auto const params1k = hexToBytes(kThousandParamsHex); + auto const params1k1 = hexToBytes(kThousand1ParamsHex); using namespace test::jtx; @@ -976,7 +998,7 @@ struct Wasm_test : public beast::unit_test::suite std::vector params; params.reserve(1000); for (int i = 0; i < 1000; ++i) - params.push_back({.type = WT_I32, .of = {.i32 = 2 * i}}); + params.push_back({.type = WtI32, .of = {.i32 = 2 * i}}); auto& engine = WasmEngine::instance(); { @@ -985,14 +1007,14 @@ struct Wasm_test : public beast::unit_test::suite } // add 1 more parameter, module can't be created now - params.push_back({.type = WT_I32, .of = {.i32 = 2 * 1000}}); + params.push_back({.type = WtI32, .of = {.i32 = 2 * 1000}}); { auto re = engine.run(params1k1, hfs, 1'000'000, "test", params, imports, env.journal); BEAST_EXPECT(!re); } // function that create 10k local variables - auto const locals10k = hexToBytes(locals10kHex); + auto const locals10k = hexToBytes(kLocals10kHex); { auto re = engine.run( locals10k, hfs, 1'000'000, "test", wasmParams(0, 1), imports, env.journal); @@ -1000,7 +1022,7 @@ struct Wasm_test : public beast::unit_test::suite } // module has 5k functions - auto const functions5k = hexToBytes(functions5kHex); + auto const functions5k = hexToBytes(kFunctions5kHex); { auto re = engine.run( functions5k, hfs, 1'000'000, "test0001", wasmParams(2, 3), imports, env.journal); @@ -1015,11 +1037,11 @@ struct Wasm_test : public beast::unit_test::suite { using namespace test::jtx; - unsigned const RESERVED = 64; + unsigned const reserved = 64; std::uint8_t const nop = 0x01; std::array const codeMarker = { nop, nop, nop, nop, nop, nop, nop, nop, nop, nop, nop, nop, nop, nop, nop, nop}; - auto const opcReserved = hexToBytes(opcReservedHex); + auto const opcReserved = hexToBytes(kOpcReservedHex); Env env{*this}; auto& engine = WasmEngine::instance(); @@ -1096,7 +1118,7 @@ struct Wasm_test : public beast::unit_test::suite if (!BEAST_EXPECTS(!codeRange.empty(), lineStr)) return; - if (!BEAST_EXPECTS(codeSnap.size() < RESERVED, lineStr)) + if (!BEAST_EXPECTS(codeSnap.size() < reserved, lineStr)) return; auto it = codeRange.begin(); for (auto x : codeSnap) @@ -1554,5 +1576,4 @@ struct Wasm_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE(Wasm, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/wasm_fixtures/fixture_functions_5k.cpp b/src/test/app/wasm_fixtures/fixture_functions_5k.cpp index 6ade5fea14..d65f602eec 100644 --- a/src/test/app/wasm_fixtures/fixture_functions_5k.cpp +++ b/src/test/app/wasm_fixtures/fixture_functions_5k.cpp @@ -2,7 +2,9 @@ #include -extern std::string const functions5kHex = +#include + +extern std::string const kFunctions5kHex = "0061736d0100000001070160027f7f017f038a27882700000000000000000000000000000000000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" diff --git a/src/test/app/wasm_fixtures/fixture_locals_10k.cpp b/src/test/app/wasm_fixtures/fixture_locals_10k.cpp index fe3b11a7a8..75a799243d 100644 --- a/src/test/app/wasm_fixtures/fixture_locals_10k.cpp +++ b/src/test/app/wasm_fixtures/fixture_locals_10k.cpp @@ -2,7 +2,9 @@ #include -extern std::string const locals10kHex = +#include + +extern std::string const kLocals10kHex = "0061736d0100000001070160027f7f017f03020100070801047465737400000a9b8a0601978a06018e4e7f20002001" "6a2102200120026a2103200220036a2104200320046a2105200420056a2106200520066a2107200620076a21082007" "20086a2109200820096a210a2009200a6a210b200a200b6a210c200b200c6a210d200c200d6a210e200d200e6a210f" diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 95656161b9..cf8e3fe2c0 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -2,12 +2,14 @@ #include -extern std::string const fibWasmHex = +#include + +extern std::string const kFibWasmHex = "0061736d0100000001090260000060017f017f0303020001071b02115f5f7761736d5f63616c6c5f63746f72730000" "0366696200010a440202000b3f01017f200045044041000f0b2000410348044041010f0b200041026a210003402000" "41036b100120016a2101200041026b220041044a0d000b200141016a0b"; -extern std::string const ledgerSqnWasmHex = +extern std::string const kLedgerSqnWasmHex = "0061736d01000000010e0360027f7f017f6000006000017f02160103656e760e6765745f6c65646765725f73716e00" "0003030201020503010002063f0a7f01418088040b7f004180080b7f004180080b7f004180080b7f00418088040b7f" "004180080b7f00418088040b7f00418080080b7f0041000b7f0041010b07aa010c066d656d6f72790200115f5f7761" @@ -21,7 +23,7 @@ extern std::string const ledgerSqnWasmHex = "61373930636664623432626432343732302900490f7461726765745f6665617475726573042b0f6d757461626c652d" "676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; -extern std::string const allHostFunctionsWasmHex = +extern std::string const kAllHostFunctionsWasmHex = "0061736d0100000001540c60027f7f017f60037f7f7f017f60047f7f7f7f017f60017f017f60067f7f7f7f7f7f017f" "60037f7f7f0060057f7f7f7f7f017f60037f7f7e017f60087f7f7f7f7f7f7f7f017f60017f0060027f7f006000017f" "02ae061a08686f73745f6c69620c6765745f74785f6669656c64000108686f73745f6c69620974726163655f6e756d" @@ -197,11 +199,11 @@ extern std::string const allHostFunctionsWasmHex = "65737365642d6279010572757374631d312e38372e30202831373036376539616320323032352d30352d303929002c" "0f7461726765745f6665617475726573022b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; -extern std::string const deepRecursionHex = +extern std::string const kDeepRecursionHex = "0061736d010000000105016000017f030201000608017f0141c0843d0b070a010666696e69736800000a1601140023" "0045044041010f0b230041016b240010000b"; -extern std::string const allKeyletsWasmHex = +extern std::string const kAllKeyletsWasmHex = "0061736d0100000001480960067f7f7f7f7f7f017f60047f7f7f7f017f60087f7f7f7f7f7f7f7f017f60037f7f7f01" "7f60037f7f7e017f60057f7f7f7f7f017f60057f7f7f7f7f006000017f60037f7f7f000284051808686f73745f6c69" "620974726163655f6e756d000408686f73745f6c6962057472616365000508686f73745f6c69621063616368655f6c" @@ -395,7 +397,7 @@ extern std::string const allKeyletsWasmHex = "20323032352d30352d303929002c0f7461726765745f6665617475726573022b0f6d757461626c652d676c6f62616c" "732b087369676e2d657874"; -extern std::string const codecovTestsWasmHex = +extern std::string const kCodecovTestsWasmHex = "0061736d01000000015a0c60057f7f7f7f7f017f60037f7f7e017f60027f7f017f60037f7f7f017f60047f7f7f7f01" "7f60017f017f60067f7f7f7f7f7f017f60087f7f7f7f7f7f7f7f017f60077f7f7f7f7f7f7f017f60047f7f7f7f0060" "00006000017f02840d3b08686f73745f6c6962057472616365000008686f73745f6c69620974726163655f6e756d00" @@ -822,7 +824,7 @@ extern std::string const codecovTestsWasmHex = "6976616c75652b0f6d757461626c652d676c6f62616c732b136e6f6e7472617070696e672d6670746f696e742b0f72" "65666572656e63652d74797065732b087369676e2d657874"; -extern std::string const floatTestsWasmHex = +extern std::string const kFloatTestsWasmHex = "0061736d0100000001490960057f7f7f7f7f017f60077f7f7f7f7f7f7f017f60067f7f7f7f7f7f017f60047e7f7f7f" "017f60057e7f7f7f7f017f60047f7f7f7f017f60037f7f7e017f60037f7f7f006000017f02fa021008686f73745f6c" "6962057472616365000008686f73745f6c69620e666c6f61745f66726f6d5f696e74000308686f73745f6c69620f66" @@ -1002,7 +1004,7 @@ extern std::string const floatTestsWasmHex = "1d312e38392e30202832393438333838336520323032352d30382d303429002c0f7461726765745f66656174757265" "73022b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; -extern std::string const float0Hex = +extern std::string const kFloat0Hex = "0061736d0100000001290560057f7f7f7f7f017f60047e7f7f7f017f60077f7f7f7f7f7f7f017f60047f7f7f7f017f" "6000017f025f0408686f73745f6c6962057472616365000008686f73745f6c69620e666c6f61745f66726f6d5f696e" "74000108686f73745f6c69620e666c6f61745f7375627472616374000208686f73745f6c69620d666c6f61745f636f" @@ -1034,7 +1036,7 @@ extern std::string const float0Hex = "626c652d676c6f62616c732b136e6f6e7472617070696e672d6670746f696e742b0f7265666572656e63652d747970" "65732b087369676e2d657874"; -extern std::string const disabledFloatHex = +extern std::string const kDisabledFloatHex = "0061736d010000000108026000006000017f03030200010503010002063e0a7f004180080b7f004180080b7f004180" "100b7f004180100b7f00418090040b7f004180080b7f00418090040b7f00418080080b7f0041000b7f0041010b07b0" "010d066d656d6f72790200115f5f7761736d5f63616c6c5f63746f727300000666696e69736800010362756603000c" @@ -1043,143 +1045,143 @@ extern std::string const disabledFloatHex = "656e6403070d5f5f6d656d6f72795f6261736503080c5f5f7461626c655f6261736503090a150202000b1000430000" "00c54300200045921a41010b"; -extern std::string const memoryPointerAtLimitHex = +extern std::string const kMemoryPointerAtLimitHex = "0061736d010000000105016000017f030201000503010001070a010666696e69736800000a0e010c0041ffff032d00" "001a41010b"; -extern std::string const memoryPointerOverLimitHex = +extern std::string const kMemoryPointerOverLimitHex = "0061736d010000000105016000017f030201000503010001070a010666696e69736800000a0e010c00418080042d00" "001a41010b"; -extern std::string const memoryOffsetOverLimitHex = +extern std::string const kMemoryOffsetOverLimitHex = "0061736d010000000105016000017f030201000503010001071302066d656d6f727902000666696e69736800000a0e" "010c00410028028080041a41010b"; -extern std::string const memoryEndOfWordOverLimitHex = +extern std::string const kMemoryEndOfWordOverLimitHex = "0061736d010000000105016000017f030201000503010001071302066d656d6f727902000666696e69736800000a0e" "010c0041feff032802001a41010b"; -extern std::string const memoryGrow0To1PageHex = +extern std::string const kMemoryGrow0To1PageHex = "0061736d010000000105016000017f030201000503010000071302066d656d6f727902000666696e69736800000a0b" "010900410140001a41010b"; -extern std::string const memoryGrow1To0PageHex = +extern std::string const kMemoryGrow1To0PageHex = "0061736d010000000105016000017f030201000503010001071302066d656d6f727902000666696e69736800000a13" "011100417f4000417f460440417f0f0b41010b"; -extern std::string const memoryLastByteOf8MBHex = +extern std::string const kMemoryLastByteOf8MbHex = "0061736d010000000105016000017f030201000506010180018001071302066d656d6f727902000666696e69736800" "000a0f010d0041ffffff032d00001a41010b"; -extern std::string const memoryGrow1MoreThan8MBHex = +extern std::string const kMemoryGrow1MoreThan8MbHex = "0061736d010000000105016000017f03020100050401008001071302066d656d6f727902000666696e69736800000a" "1301110041014000417f460440417f0f0b41010b"; -extern std::string const memoryGrow0MoreThan8MBHex = +extern std::string const kMemoryGrow0MoreThan8MbHex = "0061736d010000000105016000017f03020100050401008001071302066d656d6f727902000666696e69736800000a" "1301110041004000417f460440417f0f0b41010b"; -extern std::string const memoryInit1MoreThan8MBHex = +extern std::string const kMemoryInit1MoreThan8MbHex = "0061736d010000000105016000017f030201000506010181018101071302066d656d6f727902000666696e69736800" "000a0f010d0041ffffff032d00001a41010b"; -extern std::string const memoryNegativeAddressHex = +extern std::string const kMemoryNegativeAddressHex = "0061736d010000000105016000017f030201000506010180018001071302066d656d6f727902000666696e69736800" "000a0c010a00417f2d00001a41010b"; -extern std::string const table64ElementsHex = +extern std::string const kTable64ElementsHex = "0061736d010000000108026000006000017f0303020001040401700040070a010666696e6973680001094601004100" "0b40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" "000000000000000000000000000000000000000a090202000b040041010b"; -extern std::string const table65ElementsHex = +extern std::string const kTable65ElementsHex = "0061736d010000000108026000006000017f0303020001040401700041070a010666696e6973680001094701004100" "0b41000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" "00000000000000000000000000000000000000000a090202000b040041010b"; -extern std::string const table2TablesHex = +extern std::string const kTable2TablesHex = "0061736d010000000108026000006000017f03030200010409027001010170010101070a010666696e697368000109" "0f020041000b0100020141000b0001000a090202000b040041010b"; -extern std::string const table0ElementsHex = +extern std::string const kTable0ElementsHex = "0061736d010000000105016000017f03020100040401700000070a010666696e69736800000a0601040041010b"; -extern std::string const tableUintMaxHex = +extern std::string const kTableUintMaxHex = "0061736d010000000105016000017f030201000408017000ffffffff0f070a010666696e69736800000a0601040041" "010b"; -extern std::string const proposalMutableGlobalHex = +extern std::string const kProposalMutableGlobalHex = "0061736d010000000105016000017f030201000606017f0141000b07140207636f756e74657203000666696e697368" "00000a0d010b00230041016a240041010b"; -extern std::string const proposalGcStructNewHex = +extern std::string const kProposalGcStructNewHex = "0061736d01000000010b026000017f5f027f017f0103020100070a010666696e69736800000a0a010800fb01011a41" "010b"; -extern std::string const proposalMultiValueHex = +extern std::string const kProposalMultiValueHex = "0061736d010000000110036000027f7f6000017f60027f7f017f0303020001070a010666696e69736800010a140206" "00410a41140b0b00100002026a411e460b0b"; -extern std::string const proposalSignExtHex = +extern std::string const kProposalSignExtHex = "0061736d010000000105016000017f03020100070a010666696e69736800000a0b01090041ff01c0417f460b"; -extern std::string const proposalFloatToIntHex = +extern std::string const kProposalFloatToIntHex = "0061736d010000000105016000017f03020100070a010666696e69736800000a1201100043f9021550fc0041ffffff" "ff07460b"; -extern std::string const proposalBulkMemoryHex = +extern std::string const kProposalBulkMemoryHex = "0061736d010000000105016000017f030201000503010001071302066d656d6f727902000666696e69736800000a1f" "011d004100412a3a000041e40041004101fc0a000041e4002d0000412a460b"; -extern std::string const proposalRefTypesHex = +extern std::string const kProposalRefTypesHex = "0061736d010000000105016000017f020f0103656e76057461626c65016f000103020100070a010666696e69736800" "000a0c010a004100d06f260041010b"; -extern std::string const proposalTailCallHex = +extern std::string const kProposalTailCallHex = "0061736d010000000105016000017f0303020000070a010666696e69736800010a0b02040041010b040012000b"; -extern std::string const proposalExtendedConstHex = +extern std::string const kProposalExtendedConstHex = "0061736d010000000105016000017f030201000609017f00410a41206a0b070a010666696e69736800000a09010700" "2300412a460b"; -extern std::string const proposalMultiMemoryHex = +extern std::string const kProposalMultiMemoryHex = "0061736d010000000105016000017f0302010005050200000001070a010666696e69736800000a060104003f010b"; -extern std::string const proposalCustomPageSizesHex = +extern std::string const kProposalCustomPageSizesHex = "0061736d010000000105016000017f0302010005040108010a070a010666696e69736800000a0601040041010b0010" "046e616d65010901000666696e697368"; -extern std::string const proposalMemory64Hex = +extern std::string const kProposalMemory64Hex = "0061736d010000000105016000017f030201000503010401070a010666696e69736800000a10010e004200412a3a00" "003f004201510b0010046e616d65010901000666696e697368"; -extern std::string const proposalWideArithmeticHex = +extern std::string const kProposalWideArithmeticHex = "0061736d010000000105016000017f03020100070a010666696e69736800000a0e010c0042014202fc161a1a41010b" "0010046e616d65010901000666696e697368"; -extern std::string const trapDivideBy0Hex = +extern std::string const kTrapDivideBy0Hex = "0061736d010000000105016000017f03020100070a010666696e69736800000a0c010a00412a41006d1a41010b"; -extern std::string const trapIntOverflowHex = +extern std::string const kTrapIntOverflowHex = "0061736d010000000105016000017f03020100070a010666696e69736800000a0d010b00418080808078417f6d0b"; -extern std::string const trapUnreachableHex = +extern std::string const kTrapUnreachableHex = "0061736d010000000105016000017f03020100070a010666696e69736800000a070105000041010b"; -extern std::string const trapNullCallHex = +extern std::string const kTrapNullCallHex = "0061736d010000000105016000017f03020100040401700001070a010666696e69736800000a090107004100110000" "0b"; -extern std::string const trapFuncSigMismatchHex = +extern std::string const kTrapFuncSigMismatchHex = "0061736d010000000108026000006000017f0303020001040401700001070a010666696e6973680001090701004100" "0b01000a0d020300010b070041001101000b"; -extern std::string const wasiGetTimeHex = +extern std::string const kWasiGetTimeHex = "0061736d01000000010c0260037f7e7f017f6000017f02290116776173695f736e617073686f745f70726576696577" "310e636c6f636b5f74696d655f6765740000030201010503010001071302066d656d6f727902000666696e69736800" "010a16011400410042e8074100100045047f410105417f0b0b"; -extern std::string const wasiPrintHex = +extern std::string const kWasiPrintHex = "0061736d01000000010d0260047f7f7f7f017f6000017f02230116776173695f736e617073686f745f707265766965" "77310866645f77726974650000030201010503010001071302066d656d6f727902000666696e69736800010a1d011b" "01017f411821004101410041012000100045047f410105417f0b0b0b1e030041100b0648656c6c6f0a0041000b0410" @@ -1190,8 +1192,8 @@ extern std::string const wasiPrintHex = // rust or wat sources. // Wasm code magic number is "0061736d", and the only valid version is 1. -extern std::string const badMagicNumberHex = "1061736d01000000"; -extern std::string const badVersionNumberHex = "0061736d02000000"; +extern std::string const kBadMagicNumberHex = "1061736d01000000"; +extern std::string const kBadVersionNumberHex = "0061736d02000000"; // Corruption Test: lyingHeader // Scenario: A section declares it is 2GB long, but the file ends immediately. @@ -1201,7 +1203,7 @@ extern std::string const badVersionNumberHex = "0061736d02000000"; // # Type Section (ID 1) // # Size: LEB128 encoded 2GB (0x80 0x80 0x80 0x80 0x08) // data += b'\x01\x80\x80\x80\x80\x08' -extern std::string const lyingHeaderHex = "0061736d01000000018080808008"; +extern std::string const kLyingHeaderHex = "0061736d01000000018080808008"; // Corruption Test: neverEndingNumber // Scenario: An LEB128 integer that never has a stop bit (byte < 0x80). @@ -1211,7 +1213,7 @@ extern std::string const lyingHeaderHex = "0061736d01000000018080808008"; // data += b'\x01\x05' // # Vector count: Infinite stream of 0x80 (100 bytes) // data += b'\x80' * 100 -extern std::string const neverEndingNumberHex = +extern std::string const kNeverEndingNumberHex = "0061736d01000000010580808080808080808080808080808080808080808080808080808080808080808080808080" "8080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080" "80808080808080808080808080808080"; @@ -1226,7 +1228,7 @@ extern std::string const neverEndingNumberHex = // # Vector Count: 0xFF 0xFF 0xFF 0xFF 0x0F (4,294,967,295 items) // data += b'\xff\xff\xff\xff\x0f' // # No actual items follow... -extern std::string const vectorLieHex = "0061736d010000000105ffffffff0f"; +extern std::string const kVectorLieHex = "0061736d010000000105ffffffff0f"; // Corruption Test: sectionOrdering // Scenario: Sections appear out of order @@ -1238,7 +1240,7 @@ extern std::string const vectorLieHex = "0061736d010000000105ffffffff0f"; // data += b'\x0a\x02\x00\x0b' // # Function Section (ID 3) - usually 3rd // data += b'\x03\x02\x00\x00' -extern std::string const sectionOrderingHex = "0061736d010000000a02000b03020000"; +extern std::string const kSectionOrderingHex = "0061736d010000000a02000b03020000"; // Corruption Test: ghostPayload // Scenario: Valid headers, but file is truncated in the middle of a payload. @@ -1251,7 +1253,7 @@ extern std::string const sectionOrderingHex = "0061736d010000000a02000b03020000" // # Start of a type definition (0x60 = func) // data += b'\x60' // # File ends abruptly here (missing params/results) -extern std::string const ghostPayloadHex = "0061736d01000000010a0160"; +extern std::string const kGhostPayloadHex = "0061736d01000000010a0160"; // Corruption Test: junkAfterSection // Scenario: Section declares size X, but logical content finishes at X-5. @@ -1265,7 +1267,7 @@ extern std::string const ghostPayloadHex = "0061736d01000000010a0160"; // data += b'\x01\x60\x00\x00' // # Remaining 6 bytes are junk padding within the section size // data += b'\x00' * 6 -extern std::string const junkAfterSectionHex = "0061736d01000000010a01600000000000000000"; +extern std::string const kJunkAfterSectionHex = "0061736d01000000010a01600000000000000000"; // Corruption Test: invalidSectionId // Scenario: A section ID that doesn't exist (0xFF). @@ -1273,7 +1275,7 @@ extern std::string const junkAfterSectionHex = "0061736d01000000010a016000000000 // data = b'\x00\x61\x73\x6d\x01\x00\x00\x00' // # Section ID 0xFF, Size 1 // data += b'\xff\x01\x00' -extern std::string const invalidSectionIdHex = "0061736d01000000ff0100"; +extern std::string const kInvalidSectionIdHex = "0061736d01000000ff0100"; // Corruption Test: localVariableBomb // Scenario: A function declares 4 billion local variables. @@ -1296,10 +1298,10 @@ extern std::string const invalidSectionIdHex = "0061736d01000000ff0100"; // data += b'\xff\xff\xff\xff\x0f\x7f' // # Instruction: end (0x0b) // data += b'\x0b' -extern std::string const localVariableBombHex = +extern std::string const kLocalVariableBombHex = "0061736d01000000010401600000030201000a0f010d01ffffffff0f7f0b"; -extern std::string const infiniteLoopWasmHex = +extern std::string const kInfiniteLoopWasmHex = "0061736d010000000108026000006000017f030302000105030100020638097f004180080b7f004180080b7f004180" "080b7f00418088040b7f004180080b7f00418088040b7f00418080080b7f0041000b7f0041010b07a8010c066d656d" "6f72790200115f5f7761736d5f63616c6c5f63746f72730000046c6f6f7000010c5f5f64736f5f68616e646c650300" @@ -1312,11 +1314,11 @@ extern std::string const infiniteLoopWasmHex = "3732302900490f7461726765745f6665617475726573042b0f6d757461626c652d676c6f62616c732b087369676e2d" "6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; -extern std::string const startLoopHex = +extern std::string const kStartLoopHex = "0061736d010000000108026000006000017f030302000107120205737461727400000666696e69736800010801000a" "0e02070003400c000b0b040041010b"; -extern std::string const badAlignWasmHex = +extern std::string const kBadAlignWasmHex = "0061736d01000000011b046000017f60057f7f7f7f7f017f60067f7f7f7f7f7f017f600000022a0203656e760f666c" "6f61745f66726f6d5f75696e74000103656e760c636865636b5f6b65796c6574000203050403000000050301000306" "470b7f004180080b7f00418088020b7f004180080b7f00418088040b7f00418088040b7f00418088080b7f00418008" @@ -1337,7 +1339,7 @@ extern std::string const badAlignWasmHex = "7475726573042b0f6d757461626c652d676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d7479" "7065732b0a6d756c746976616c7565"; -extern std::string const thousandParamsHex = +extern std::string const kThousandParamsHex = "0061736d0100000001f1070260000060e8077f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" @@ -1453,7 +1455,7 @@ extern std::string const thousandParamsHex = "32343732302900490f7461726765745f6665617475726573042b0f6d757461626c652d676c6f62616c732b08736967" "6e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; -extern std::string const thousand1ParamsHex = +extern std::string const kThousand1ParamsHex = "0061736d0100000001f2070260000060e9077f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" @@ -1569,13 +1571,13 @@ extern std::string const thousand1ParamsHex = "623432626432343732302900490f7461726765745f6665617475726573042b0f6d757461626c652d676c6f62616c73" "2b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; -extern std::string const opcReservedHex = +extern std::string const kOpcReservedHex = "0061736d010000000105016000017f03030200000404017000010503010001060b027f0141000b7e0142000b071401" "10616c6c5f696e737472756374696f6e7300010907010041000b01000a53020400412a0b4c02017f017e0101010101" "0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" "01010101010101010101010101010101410b0b0b0a010041000b0474657374"; -extern std::string const impExpHex = +extern std::string const kImpExpHex = "0061736d0100000001100360027f7f017f6000017f60017f017f02330203656e760e6765745f6c65646765725f7371" "6e000003656e76166765745f706172656e745f6c65646765725f686173680000030403010201050301000107310406" "6d656d6f72790200096578705f66756e63310002096578705f66756e633200030c746573745f696d706f7274730004" diff --git a/src/test/app/wasm_fixtures/fixtures.h b/src/test/app/wasm_fixtures/fixtures.h index b3b20a8f37..2f0a1072f6 100644 --- a/src/test/app/wasm_fixtures/fixtures.h +++ b/src/test/app/wasm_fixtures/fixtures.h @@ -4,80 +4,80 @@ #include -extern std::string const ledgerSqnWasmHex; -extern std::string const allHostFunctionsWasmHex; -extern std::string const allKeyletsWasmHex; -extern std::string const codecovTestsWasmHex; +extern std::string const kLedgerSqnWasmHex; +extern std::string const kAllHostFunctionsWasmHex; +extern std::string const kAllKeyletsWasmHex; +extern std::string const kCodecovTestsWasmHex; -extern std::string const fibWasmHex; +extern std::string const kFibWasmHex; -extern std::string const floatTestsWasmHex; -extern std::string const float0Hex; -extern std::string const disabledFloatHex; +extern std::string const kFloatTestsWasmHex; +extern std::string const kFloat0Hex; +extern std::string const kDisabledFloatHex; -extern std::string const memoryPointerAtLimitHex; -extern std::string const memoryPointerOverLimitHex; -extern std::string const memoryOffsetOverLimitHex; -extern std::string const memoryEndOfWordOverLimitHex; -extern std::string const memoryGrow0To1PageHex; -extern std::string const memoryGrow1To0PageHex; -extern std::string const memoryLastByteOf8MBHex; -extern std::string const memoryGrow1MoreThan8MBHex; -extern std::string const memoryGrow0MoreThan8MBHex; -extern std::string const memoryInit1MoreThan8MBHex; -extern std::string const memoryNegativeAddressHex; +extern std::string const kMemoryPointerAtLimitHex; +extern std::string const kMemoryPointerOverLimitHex; +extern std::string const kMemoryOffsetOverLimitHex; +extern std::string const kMemoryEndOfWordOverLimitHex; +extern std::string const kMemoryGrow0To1PageHex; +extern std::string const kMemoryGrow1To0PageHex; +extern std::string const kMemoryLastByteOf8MbHex; +extern std::string const kMemoryGrow1MoreThan8MbHex; +extern std::string const kMemoryGrow0MoreThan8MbHex; +extern std::string const kMemoryInit1MoreThan8MbHex; +extern std::string const kMemoryNegativeAddressHex; -extern std::string const table64ElementsHex; -extern std::string const table65ElementsHex; -extern std::string const table2TablesHex; -extern std::string const table0ElementsHex; -extern std::string const tableUintMaxHex; +extern std::string const kTable64ElementsHex; +extern std::string const kTable65ElementsHex; +extern std::string const kTable2TablesHex; +extern std::string const kTable0ElementsHex; +extern std::string const kTableUintMaxHex; -extern std::string const proposalMutableGlobalHex; -extern std::string const proposalGcStructNewHex; -extern std::string const proposalMultiValueHex; -extern std::string const proposalSignExtHex; -extern std::string const proposalFloatToIntHex; -extern std::string const proposalBulkMemoryHex; -extern std::string const proposalRefTypesHex; -extern std::string const proposalTailCallHex; -extern std::string const proposalExtendedConstHex; -extern std::string const proposalMultiMemoryHex; -extern std::string const proposalCustomPageSizesHex; -extern std::string const proposalMemory64Hex; -extern std::string const proposalWideArithmeticHex; +extern std::string const kProposalMutableGlobalHex; +extern std::string const kProposalGcStructNewHex; +extern std::string const kProposalMultiValueHex; +extern std::string const kProposalSignExtHex; +extern std::string const kProposalFloatToIntHex; +extern std::string const kProposalBulkMemoryHex; +extern std::string const kProposalRefTypesHex; +extern std::string const kProposalTailCallHex; +extern std::string const kProposalExtendedConstHex; +extern std::string const kProposalMultiMemoryHex; +extern std::string const kProposalCustomPageSizesHex; +extern std::string const kProposalMemory64Hex; +extern std::string const kProposalWideArithmeticHex; -extern std::string const trapDivideBy0Hex; -extern std::string const trapIntOverflowHex; -extern std::string const trapUnreachableHex; -extern std::string const trapNullCallHex; -extern std::string const trapFuncSigMismatchHex; +extern std::string const kTrapDivideBy0Hex; +extern std::string const kTrapIntOverflowHex; +extern std::string const kTrapUnreachableHex; +extern std::string const kTrapNullCallHex; +extern std::string const kTrapFuncSigMismatchHex; -extern std::string const wasiGetTimeHex; -extern std::string const wasiPrintHex; +extern std::string const kWasiGetTimeHex; +extern std::string const kWasiPrintHex; -extern std::string const badMagicNumberHex; -extern std::string const badVersionNumberHex; -extern std::string const lyingHeaderHex; -extern std::string const neverEndingNumberHex; -extern std::string const vectorLieHex; -extern std::string const sectionOrderingHex; -extern std::string const ghostPayloadHex; -extern std::string const junkAfterSectionHex; -extern std::string const invalidSectionIdHex; -extern std::string const localVariableBombHex; +extern std::string const kBadMagicNumberHex; +extern std::string const kBadVersionNumberHex; +extern std::string const kLyingHeaderHex; +extern std::string const kNeverEndingNumberHex; +extern std::string const kVectorLieHex; +extern std::string const kSectionOrderingHex; +extern std::string const kGhostPayloadHex; +extern std::string const kJunkAfterSectionHex; +extern std::string const kInvalidSectionIdHex; +extern std::string const kLocalVariableBombHex; -extern std::string const deepRecursionHex; -extern std::string const infiniteLoopWasmHex; -extern std::string const startLoopHex; +extern std::string const kDeepRecursionHex; +extern std::string const kInfiniteLoopWasmHex; +extern std::string const kStartLoopHex; -extern std::string const badAlignWasmHex; +extern std::string const kBadAlignWasmHex; -extern std::string const thousandParamsHex; -extern std::string const thousand1ParamsHex; -extern std::string const locals10kHex; -extern std::string const functions5kHex; +extern std::string const kThousandParamsHex; +extern std::string const kThousand1ParamsHex; +extern std::string const kLocals10kHex; +extern std::string const kFunctions5kHex; -extern std::string const opcReservedHex; +extern std::string const kOpcReservedHex; -extern std::string const impExpHex; +extern std::string const kImpExpHex; From d85bf722ea2acf0a080ad2bcf1f9dc56e0586b47 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 20 May 2026 13:44:18 -0400 Subject: [PATCH 123/137] fix: Fix build issues post-clang-tidy changes (#7298) --- include/xrpl/tx/wasm/HostFuncImpl.h | 2 +- include/xrpl/tx/wasm/ParamsHelper.h | 33 +- include/xrpl/tx/wasm/WasmVM.h | 2 +- src/libxrpl/tx/wasm/HostFuncImplFloat.cpp | 13 +- src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp | 3 +- src/libxrpl/tx/wasm/HostFuncWrapper.cpp | 37 +- src/libxrpl/tx/wasm/WasmVM.cpp | 1 + src/libxrpl/tx/wasm/WasmiVM.cpp | 17 +- src/test/app/HostFuncImpl_test.cpp | 487 +++++++++++---------- src/test/app/TestHostFunctions.h | 66 +-- src/test/app/Wasm_test.cpp | 108 ++--- 11 files changed, 408 insertions(+), 361 deletions(-) diff --git a/include/xrpl/tx/wasm/HostFuncImpl.h b/include/xrpl/tx/wasm/HostFuncImpl.h index 4033a4aaf9..689ce85a59 100644 --- a/include/xrpl/tx/wasm/HostFuncImpl.h +++ b/include/xrpl/tx/wasm/HostFuncImpl.h @@ -48,7 +48,7 @@ class WasmHostFunctionsImpl : public HostFunctions #ifdef DEBUG_OUTPUT auto& j = std::cerr; #else - if (!getJournal().active(beast::severities::kTrace)) + if (!getJournal().active(beast::Severity::Trace)) return; auto j = getJournal().trace(); #endif diff --git a/include/xrpl/tx/wasm/ParamsHelper.h b/include/xrpl/tx/wasm/ParamsHelper.h index 4a2e99d490..266b1dd334 100644 --- a/include/xrpl/tx/wasm/ParamsHelper.h +++ b/include/xrpl/tx/wasm/ParamsHelper.h @@ -7,14 +7,22 @@ #include #include +#include +#include #include #include +#include +#include +#include #include namespace bft = boost::function_types; namespace xrpl { +template +inline constexpr bool wasmDependentFalse = false; + using Bytes = std::vector; using Hash = xrpl::uint256; @@ -48,7 +56,7 @@ struct WasmRuntimeWrapper //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -enum WasmTypes { WtI32, WtI64 }; +enum class WasmTypes { WtI32, WtI64 }; struct WasmImportFunc { @@ -80,15 +88,15 @@ WasmImpArgs(WasmImportFunc& e) using at = typename boost::mpl::at_c::type; if constexpr (std::is_pointer_v) { - e.params.push_back(WtI32); + e.params.push_back(WasmTypes::WtI32); } else if constexpr (std::is_same_v) { - e.params.push_back(WtI32); + e.params.push_back(WasmTypes::WtI32); } else if constexpr (std::is_same_v) { - e.params.push_back(WtI64); + e.params.push_back(WasmTypes::WtI64); } else { @@ -106,27 +114,24 @@ WasmImpRet(WasmImportFunc& e) { if constexpr (std::is_pointer_v) { - e.result = WtI32; + e.result = WasmTypes::WtI32; } else if constexpr (std::is_same_v) { - e.result = WtI32; + e.result = WasmTypes::WtI32; } else if constexpr (std::is_same_v) { - e.result = WtI64; + e.result = WasmTypes::WtI64; } else if constexpr (std::is_void_v) { e.result.reset(); -#if (defined(__GNUC__) && (__GNUC__ >= 14)) || \ - ((defined(__clang_major__)) && (__clang_major__ >= 18)) } else { - static_assert(false, "Unsupported return type"); + static_assert(wasmDependentFalse, "Unsupported return type"); } -#endif } template @@ -166,7 +171,7 @@ struct WasmParam { // We are not supporting float/double - WasmTypes type = WtI32; + WasmTypes type = WasmTypes::WtI32; union { std::int32_t i32; @@ -178,7 +183,7 @@ template inline void wasmParamsHlp(std::vector& v, std::int32_t p, Types&&... args) { - v.push_back({.type = WtI32, .of = {.i32 = p}}); + v.push_back({.type = WasmTypes::WtI32, .of = {.i32 = p}}); wasmParamsHlp(v, std::forward(args)...); } @@ -186,7 +191,7 @@ template inline void wasmParamsHlp(std::vector& v, std::int64_t p, Types&&... args) { - v.push_back({.type = WtI64, .of = {.i64 = p}}); + v.push_back({.type = WasmTypes::WtI64, .of = {.i64 = p}}); wasmParamsHlp(v, std::forward(args)...); } diff --git a/include/xrpl/tx/wasm/WasmVM.h b/include/xrpl/tx/wasm/WasmVM.h index 1e371a92b4..761ed4c618 100644 --- a/include/xrpl/tx/wasm/WasmVM.h +++ b/include/xrpl/tx/wasm/WasmVM.h @@ -28,6 +28,7 @@ class WasmEngine WasmEngine(); +public: WasmEngine(WasmEngine const&) = delete; WasmEngine(WasmEngine&&) = delete; WasmEngine& @@ -35,7 +36,6 @@ class WasmEngine WasmEngine& operator=(WasmEngine&&) = delete; -public: static WasmEngine& instance(); diff --git a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp index f85a17a2d2..c950aed947 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp @@ -59,14 +59,14 @@ public: { try { - Number const n; + Number n; if constexpr (std::is_signed_v) { n = Number(static_cast(mantissa), exponent); } else { - n = Number(static_cast(mantissa), exponent, Number::normalized()); + n = Number(static_cast(mantissa), exponent, Number::Normalized{}); } *static_cast(this) = n; } @@ -118,7 +118,8 @@ struct FloatState FloatState(int32_t mode) : oldMode(Number::getround()) { - if (mode < Number::RoundingMode::ToNearest || mode > Number::RoundingMode::Upward) + if (mode < static_cast(Number::RoundingMode::ToNearest) || + mode > static_cast(Number::RoundingMode::Upward)) return; Number::setround(static_cast(mode)); good = true; @@ -141,7 +142,7 @@ std::string floatToString(Slice const& data) { // set default mode as we don't expect it will be used here - detail::FloatState const rm(Number::RoundingMode::to_nearest); + detail::FloatState const rm(static_cast(Number::RoundingMode::ToNearest)); detail::WasmNumber const num(data); if (!num) { @@ -274,7 +275,7 @@ floatToMantExpImpl(Slice const& x) { try { - detail::FloatState const rm(Number::RoundingMode::to_nearest); + detail::FloatState const rm(static_cast(Number::RoundingMode::ToNearest)); if (!rm) return Unexpected(HostFunctionError::FloatInputMalformed); @@ -317,7 +318,7 @@ floatCompareImpl(Slice const& x, Slice const& y) try { // set default mode as we don't expect it will be used here - detail::FloatState const rm(Number::RoundingMode::to_nearest); + detail::FloatState const rm(static_cast(Number::RoundingMode::ToNearest)); detail::WasmNumber const xx(x); if (!xx) diff --git a/src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp b/src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp index e9d54d89fa..1c589dee09 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp @@ -6,7 +6,6 @@ #include #include #include -#include #include #include #include @@ -208,7 +207,7 @@ WasmHostFunctionsImpl::ticketKeylet(AccountID const& account, std::uint32_t seq) { if (!account) return Unexpected(HostFunctionError::InvalidAccount); - auto const keylet = jss::ticket(account, seq); + auto const keylet = keylet::kTicket(account, seq); return Bytes{keylet.key.begin(), keylet.key.end()}; } diff --git a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp index b303fcc47e..1b10608667 100644 --- a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp +++ b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp @@ -182,7 +182,7 @@ getDataUInt256(IW* runtime, wasm_val_vec_t const* params, int32_t& i) return Unexpected(slice.error()); } - if (slice->size() != Bytes) + if (slice->size() != uint256::size()) { return Unexpected(HostFunctionError::InvalidParams); } @@ -199,7 +199,7 @@ getDataAccountID(IW* runtime, wasm_val_vec_t const* params, int32_t& i) return Unexpected(slice.error()); } - if (slice->size() != Bytes) + if (slice->size() != AccountID::size()) { return Unexpected(HostFunctionError::InvalidParams); } @@ -217,7 +217,7 @@ getDataCurrency(IW* runtime, wasm_val_vec_t const* params, int32_t& i) return Unexpected(slice.error()); } - if (slice->size() != Bytes) + if (slice->size() != Currency::size()) { return Unexpected(HostFunctionError::InvalidParams); } @@ -235,13 +235,13 @@ getDataAsset(IW* runtime, wasm_val_vec_t const* params, int32_t& i) return Unexpected(slice.error()); } - if (slice->size() == Bytes) + if (slice->size() == MPTID::size()) { auto const mptid = MPTID::fromVoid(slice->data()); return Asset{mptid}; } - if (slice->size() == Bytes) + if (slice->size() == Currency::size()) { auto const currency = Currency::fromVoid(slice->data()); auto const issue = Issue{currency, xrpAccount()}; @@ -250,10 +250,11 @@ getDataAsset(IW* runtime, wasm_val_vec_t const* params, int32_t& i) return Asset{issue}; } - if (slice->size() == (Bytes + Bytes)) + if (slice->size() == (Currency::size() + AccountID::size())) { - auto const issue = - Issue(Currency::fromVoid(slice->data()), AccountID::fromVoid(slice->data() + Bytes)); + auto const issue = Issue( + Currency::fromVoid(slice->data()), + AccountID::fromVoid(slice->data() + Currency::size())); if (issue.native()) return Unexpected(HostFunctionError::InvalidParams); @@ -507,7 +508,7 @@ isAmendmentEnabled_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* return hfResult(results, slice.error()); } - if (slice->size() == Bytes) + if (slice->size() == uint256::size()) { if (auto const ret = hf->isAmendmentEnabled(uint256::fromVoid(slice->data())); ret && *ret == 1) @@ -1125,7 +1126,7 @@ mptokenKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu return hfResult(results, slice.error()); } - if (slice->size() != Bytes) + if (slice->size() != MPTID::size()) { return hfResult(results, HostFunctionError::InvalidParams); } @@ -2065,7 +2066,7 @@ testGetDataIncrement() // test SFieldCRef wasm_val_vec_t const params = {1, &values[0]}; - values[0] = WASM_I32_VAL(sfAccount.fieldCode); + values[0] = WASM_I32_VAL(sfAccount.getCode()); int index = 0; auto const result = getDataSField(&runtime, ¶ms, index); @@ -2109,8 +2110,8 @@ testGetDataIncrement() wasm_val_vec_t const params = {2, &values[0]}; values[0] = WASM_I32_VAL(0); - values[1] = WASM_I32_VAL(id.bytes); - memcpy(&buffer[0], id.data(), id.bytes); + values[1] = WASM_I32_VAL(AccountID::size()); + memcpy(&buffer[0], id.data(), AccountID::size()); int index = 0; auto const result = getDataAccountID(&runtime, ¶ms, index); @@ -2125,8 +2126,8 @@ testGetDataIncrement() wasm_val_vec_t const params = {2, &values[0]}; values[0] = WASM_I32_VAL(0); - values[1] = WASM_I32_VAL(h1.bytes); - memcpy(&buffer[0], h1.data(), h1.bytes); + values[1] = WASM_I32_VAL(Hash::size()); + memcpy(&buffer[0], h1.data(), Hash::size()); int index = 0; auto const result = getDataUInt256(&runtime, ¶ms, index); @@ -2141,10 +2142,10 @@ testGetDataIncrement() wasm_val_vec_t const params = {2, &values[0]}; values[0] = WASM_I32_VAL(0); - values[1] = WASM_I32_VAL(c.bytes); - memcpy(&buffer[0], c.data(), c.bytes); + values[1] = WASM_I32_VAL(Currency::size()); + memcpy(&buffer[0], c.data(), Currency::size()); - int const index = 0; + int index = 0; auto const result = getDataCurrency(&runtime, ¶ms, index); if (!result || result.value() != c || index != 2) return false; diff --git a/src/libxrpl/tx/wasm/WasmVM.cpp b/src/libxrpl/tx/wasm/WasmVM.cpp index 9dd0d2c736..c3c724cd43 100644 --- a/src/libxrpl/tx/wasm/WasmVM.cpp +++ b/src/libxrpl/tx/wasm/WasmVM.cpp @@ -3,6 +3,7 @@ #include #include #include +#include // IWYU pragma: keep #include #include diff --git a/src/libxrpl/tx/wasm/WasmiVM.cpp b/src/libxrpl/tx/wasm/WasmiVM.cpp index a961f8bc16..e22380741b 100644 --- a/src/libxrpl/tx/wasm/WasmiVM.cpp +++ b/src/libxrpl/tx/wasm/WasmiVM.cpp @@ -43,7 +43,7 @@ printWasmError(std::string_view msg, wasm_trap_t* trap, beast::Journal jlog) auto& j = std::cerr; #else auto j = jlog.warn(); - if (jlog.active(beast::severities::kWarning)) + if (jlog.active(beast::Severity::Warning)) #endif { wasm_byte_vec_t errorMessage WASM_EMPTY_VEC; @@ -349,10 +349,10 @@ makeImpParams(WasmImportFunc const& imp) auto const vt = imp.params[i]; switch (vt) { - case WtI32: + case WasmTypes::WtI32: v[i] = wasm_valtype_new_i32(); break; - case WtI64: + case WasmTypes::WtI64: v[i] = wasm_valtype_new_i64(); break; // LCOV_EXCL_START @@ -373,11 +373,11 @@ makeImpReturn(WasmImportFunc const& imp) WasmValtypeVec v(1); switch (*imp.result) { - case WtI32: + case WasmTypes::WtI32: v[0] = wasm_valtype_new_i32(); break; // LCOV_EXCL_START - case WtI64: + case WasmTypes::WtI64: v[0] = wasm_valtype_new_i64(); break; default: @@ -623,15 +623,16 @@ WasmiEngine::convertParams(std::vector const& params) { switch (p.type) { - case WtI32: + case WasmTypes::WtI32: v.push_back(WASM_I32_VAL(p.of.i32)); break; // LCOV_EXCL_START - case WtI64: + case WasmTypes::WtI64: v.push_back(WASM_I64_VAL(p.of.i64)); break; default: - throw std::runtime_error("unknown parameter type: " + std::to_string(p.type)); + throw std::runtime_error( + "unknown parameter type: " + std::to_string(static_cast(p.type))); break; // LCOV_EXCL_STOP } diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 01355237ae..04d3429bfe 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -2,21 +2,26 @@ #include #include #include +#include #include +#include #include #include #include #include #include +#include #include #include +#include #include #include #include #include #include #include +#include #include #include #include @@ -30,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -42,9 +48,12 @@ #include #include +#include + #include #include +#include #include #include #include @@ -52,11 +61,13 @@ #include #include #include +#include #include #include #include #include #include +#include namespace xrpl::test { @@ -137,7 +148,7 @@ createApplyContext( beast::Journal j, STTx const& tx = STTx(ttESCROW_FINISH, [](STObject&) {})) { - ApplyContext ac{env.app(), ov, tx, tesSUCCESS, env.current()->fees().base, tapNONE, j}; + ApplyContext ac{env.app(), ov, tx, tesSUCCESS, env.current()->fees().base, TapNone, j}; return ac; } @@ -310,8 +321,7 @@ wasm_trap_t* ww(F&& f, E&& e, P&& params, P&& result, Args... args) { size_t idx = 0; - (ww_hlp(idx, std::forward(e), std::forward

(params), std::forward(args)), - ...); // NOLINT + (ww_hlp(idx, e, params, std::forward(args)), ...); // NOLINT return f(std::forward(e), params.get(), result.get()); // NOLINT } @@ -414,15 +424,15 @@ struct HostFuncImpl_test : public beast::unit_test::Suite params, result, 0, - Bytes); + uint256::size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == Bytes); + BEAST_EXPECT(result[0].of.i32 == uint256::size()); auto const resultBytes = vrt.getBytes(params, 0); auto const expectedHash = env.current()->header().parentHash; BEAST_EXPECT( - resultBytes.size() == Bytes && - std::memcmp(resultBytes.data(), expectedHash.data(), Bytes) == 0); + resultBytes.size() == uint256::size() && + std::memcmp(resultBytes.data(), expectedHash.data(), uint256::size()) == 0); } } @@ -481,9 +491,14 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.isAmendmentEnabled(amendmentId); { WasmValVec params(2), result(1); - vrt.setBytes(0, amendmentId.data(), Bytes); - auto* trap = ww( - isAmendmentEnabled_wrap, &import.at("amendment_enabled"), params, result, 0, Bytes); + vrt.setBytes(0, amendmentId.data(), uint256::size()); + auto* trap = + ww(isAmendmentEnabled_wrap, + &import.at("amendment_enabled"), + params, + result, + 0, + uint256::size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); @@ -510,9 +525,14 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.isAmendmentEnabled(fakeId); { WasmValVec params(2), result(1); - vrt.setBytes(0, fakeId.data(), Bytes); - auto* trap = ww( - isAmendmentEnabled_wrap, &import.at("amendment_enabled"), params, result, 0, Bytes); + vrt.setBytes(0, fakeId.data(), uint256::size()); + auto* trap = + ww(isAmendmentEnabled_wrap, + &import.at("amendment_enabled"), + params, + result, + 0, + uint256::size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0); @@ -557,14 +577,14 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.cacheLedgerObj(accountKeylet.key, -1); { WasmValVec params(3), result(1); - vrt.setBytes(0, accountKeylet.key.data(), Bytes); + vrt.setBytes(0, accountKeylet.key.data(), uint256::size()); auto* trap = ww(cacheLedgerObj_wrap, &import.at("cache_ledger_obj"), params, result, 0, - Bytes, + uint256::size(), -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && @@ -575,14 +595,14 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.cacheLedgerObj(accountKeylet.key, 257); { WasmValVec params(3), result(1); - vrt.setBytes(0, accountKeylet.key.data(), Bytes); + vrt.setBytes(0, accountKeylet.key.data(), uint256::size()); auto* trap = ww(cacheLedgerObj_wrap, &import.at("cache_ledger_obj"), params, result, 0, - Bytes, + uint256::size(), 257); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && @@ -593,14 +613,14 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.cacheLedgerObj(dummyEscrow.key, 0); { WasmValVec params(3), result(1); - vrt.setBytes(0, dummyEscrow.key.data(), Bytes); + vrt.setBytes(0, dummyEscrow.key.data(), uint256::size()); auto* trap = ww(cacheLedgerObj_wrap, &import.at("cache_ledger_obj"), params, result, 0, - Bytes, + uint256::size(), 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && @@ -612,14 +632,14 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.cacheLedgerObj(accountKeylet.key, 0); { WasmValVec params(3), result(1); - vrt.setBytes(0, accountKeylet.key.data(), Bytes); + vrt.setBytes(0, accountKeylet.key.data(), uint256::size()); auto* trap = ww(cacheLedgerObj_wrap, &import.at("cache_ledger_obj"), params, result, 0, - uint256::bytes, + uint256::size(), 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && @@ -631,14 +651,14 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.cacheLedgerObj(accountKeylet.key, i); WasmValVec params(3), result(1); - vrt.setBytes(0, accountKeylet.key.data(), uint256::bytes); + vrt.setBytes(0, accountKeylet.key.data(), uint256::size()); auto* trap = ww(cacheLedgerObj_wrap, &import.at("cache_ledger_obj"), params, result, 0, - uint256::bytes, + uint256::size(), i); if (!(BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && @@ -652,14 +672,14 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.cacheLedgerObj(accountKeylet.key, 0); { WasmValVec params(3), result(1); - vrt.setBytes(0, accountKeylet.key.data(), uint256::bytes); + vrt.setBytes(0, accountKeylet.key.data(), uint256::size()); auto* trap = ww(cacheLedgerObj_wrap, &import.at("cache_ledger_obj"), params, result, 0, - uint256::bytes, + uint256::size(), 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && @@ -680,14 +700,14 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.cacheLedgerObj(accountKeylet.key, 0); WasmValVec params(3), result(1); - vrt.setBytes(0, accountKeylet.key.data(), uint256::bytes); + vrt.setBytes(0, accountKeylet.key.data(), uint256::size()); auto* trap = ww(cacheLedgerObj_wrap, &import.at("cache_ledger_obj"), params, result, 0, - uint256::bytes, + uint256::size(), 0); if (!(BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && @@ -701,14 +721,14 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.cacheLedgerObj(accountKeylet.key, 0); { WasmValVec params(3), result(1); - vrt.setBytes(0, accountKeylet.key.data(), uint256::bytes); + vrt.setBytes(0, accountKeylet.key.data(), uint256::size()); auto* trap = ww(cacheLedgerObj_wrap, &import.at("cache_ledger_obj"), params, result, 0, - uint256::bytes, + uint256::size(), 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && @@ -737,7 +757,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite obj.setFieldU32(sfOfferSequence, env.seq(env.master)); obj.setFieldArray(sfMemos, STArray{}); STVector256 credIds; - credIds.push_back(credId); + credIds.pushBack(credId); obj.setFieldV256(sfCredentialIDs, credIds); }); ApplyContext ac = createApplyContext(env, ov, stx); @@ -760,10 +780,10 @@ struct HostFuncImpl_test : public beast::unit_test::Suite result, sfAccount.getCode(), 0, - AccountID::bytes); + AccountID::size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == AccountID::bytes); + BEAST_EXPECT(result[0].of.i32 == AccountID::size()); auto const accountBytes = vrt.getBytes(params, 1); BEAST_EXPECT(std::ranges::equal(accountBytes, env.master.id())); } @@ -778,10 +798,10 @@ struct HostFuncImpl_test : public beast::unit_test::Suite result, sfOwner.getCode(), 0, - AccountID::bytes); + AccountID::size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == AccountID::bytes); + BEAST_EXPECT(result[0].of.i32 == AccountID::size()); auto const ownerBytes = vrt.getBytes(params, 1); BEAST_EXPECT(std::ranges::equal(ownerBytes, env.master.id())); } @@ -876,7 +896,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite std::to_string(result[0].of.i32)); } - // hfs.getTxField(sfInvalid); + // hfs.getTxField(kSfInvalid); { WasmValVec params(3), result(1); auto* trap = @@ -884,7 +904,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite &import.at("get_tx_field"), params, result, - sfInvalid.getCode(), + kSfInvalid.getCode(), 0, 256); @@ -893,7 +913,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite result[0].of.i32 == static_cast(HostFunctionError::FieldNotFound)); } - // hfs.getTxField(sfGeneric); + // hfs.getTxField(kSfGeneric); { WasmValVec params(3), result(1); auto* trap = @@ -901,7 +921,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite &import.at("get_tx_field"), params, result, - sfGeneric.getCode(), + kSfGeneric.getCode(), 0, 256); @@ -1069,7 +1089,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite Env env{*this}; // Fund the account and create an escrow so the ledger object exists - env(escrow::create(env.master, env.master, XRP(100)), escrow::finish_time(env.now() + 1s)); + env(escrow::create(env.master, env.master, XRP(100)), escrow::kFinishTime(env.now() + 1s)); env.close(); OpenView ov{*env.current()}; @@ -1202,7 +1222,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite Env env{*this}; // Fund the account and create an escrow so the ledger object exists - env(escrow::create(env.master, env.master, XRP(100)), escrow::finish_time(env.now() + 1s)); + env(escrow::create(env.master, env.master, XRP(100)), escrow::kFinishTime(env.now() + 1s)); env.close(); OpenView ov{*env.current()}; @@ -1219,14 +1239,14 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.cacheLedgerObj(accountKeylet.key, 1); { WasmValVec params(3), result(1); - vrt.setBytes(0, accountKeylet.key.data(), uint256::bytes); + vrt.setBytes(0, accountKeylet.key.data(), uint256::size()); auto* trap = ww(cacheLedgerObj_wrap, &import.at("cache_ledger_obj"), params, result, 0, - uint256::bytes, + uint256::size(), 1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && @@ -1373,7 +1393,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite memos.push_back(memoObj); obj.setFieldArray(sfMemos, memos); STVector256 credIds; - credIds.push_back(credId); + credIds.pushBack(credId); obj.setFieldV256(sfCredentialIDs, credIds); }); @@ -1389,8 +1409,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // Locator for sfMemos[0].sfMemo.sfMemoData // Locator is a sequence of int32_t codes: - // [sfMemos.fieldCode, 0, sfMemoData.fieldCode] - std::vector const locatorVec = {sfMemos.fieldCode, 0, sfMemoData.fieldCode}; + // [sfMemos.getCode(), 0, sfMemoData.getCode()] + std::vector const locatorVec = {sfMemos.getCode(), 0, sfMemoData.getCode()}; vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(4), result(1); @@ -1417,7 +1437,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getTxNestedField(locator); { // Locator for sfCredentialIDs[0] - std::vector locatorVec = {sfCredentialIDs.fieldCode, 0}; + std::vector locatorVec = {sfCredentialIDs.getCode(), 0}; vrt.setBytes( 0, reinterpret_cast(locatorVec.data()), @@ -1447,7 +1467,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getTxNestedField(locator); { // can use the nested locator for base fields too - std::vector locatorVec = {sfAccount.fieldCode}; + std::vector locatorVec = {sfAccount.getCode()}; vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(4), result(1); @@ -1474,7 +1494,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // unaligned locator std::vector locatorVec(sizeof(int32_t) + 1); - memcpy(locatorVec.data() + 1, &sfAccount.fieldCode, sizeof(int32_t)); + auto const accountFieldCode = sfAccount.getCode(); + memcpy(locatorVec.data() + 1, &accountFieldCode, sizeof(int32_t)); vrt.setBytes(0, locatorVec.data() + 1, sizeof(int32_t)); WasmValVec params(4), result(1); @@ -1522,104 +1543,104 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getTxNestedField(locator); // Locator for non-existent base field expectError( - {sfSigners.fieldCode, // sfSigners does not exist + {sfSigners.getCode(), // sfSigners does not exist 0, - sfAccount.fieldCode}, + sfAccount.getCode()}, HostFunctionError::FieldNotFound); // hfs.getTxNestedField(locator); // Locator for non-existent index expectError( - {sfMemos.fieldCode, + {sfMemos.getCode(), 1, // index 1 does not exist - sfMemoData.fieldCode}, + sfMemoData.getCode()}, HostFunctionError::IndexOutOfBounds); // hfs.getTxNestedField(locator); // Locator for non-existent index expectError( - {sfCredentialIDs.fieldCode, 1}, // index 1 does not exist + {sfCredentialIDs.getCode(), 1}, // index 1 does not exist HostFunctionError::IndexOutOfBounds); // hfs.getTxNestedField(locator); // Locator for negative index (STArray) expectError( - {sfMemos.fieldCode, + {sfMemos.getCode(), -1, // negative index - sfMemoData.fieldCode}, + sfMemoData.getCode()}, HostFunctionError::IndexOutOfBounds); // hfs.getTxNestedField(locator); // Locator for negative index (STVector256) expectError( - {sfCredentialIDs.fieldCode, -1}, // negative index + {sfCredentialIDs.getCode(), -1}, // negative index HostFunctionError::IndexOutOfBounds); // hfs.getTxNestedField(locator); // Locator for non-existent nested field expectError( - {sfMemos.fieldCode, 0, sfURI.fieldCode}, // sfURI does not exist in the memo + {sfMemos.getCode(), 0, sfURI.getCode()}, // sfURI does not exist in the memo HostFunctionError::FieldNotFound); // hfs.getTxNestedField(locator); // Locator for non-existent base sfield expectError( - {field_code(20000, 20000), // nonexistent SField code + {fieldCode(20000, 20000), // nonexistent SField code 0, - sfAccount.fieldCode}, + sfAccount.getCode()}, HostFunctionError::InvalidField); // hfs.getTxNestedField(locator); // Locator for non-existent nested sfield expectError( - {sfMemos.fieldCode, // nonexistent SField code + {sfMemos.getCode(), // nonexistent SField code 0, - field_code(20000, 20000)}, + fieldCode(20000, 20000)}, HostFunctionError::InvalidField); // hfs.getTxNestedField(locator); - // Locator for negative base sfield code (-1 = sfInvalid, exists in map but not in tx) + // Locator for negative base sfield code (-1 = kSfInvalid, exists in map but not in tx) expectError( - {-1, // sfInvalid's field code + {-1, // kSfInvalid's field code 0, - sfAccount.fieldCode}, + sfAccount.getCode()}, HostFunctionError::FieldNotFound); // hfs.getTxNestedField(locator); - // Locator for zero base sfield code (0 = sfGeneric, exists in map but not in tx) + // Locator for zero base sfield code (0 = kSfGeneric, exists in map but not in tx) expectError( - {0, // sfGeneric's field code + {0, // kSfGeneric's field code 0, - sfAccount.fieldCode}, + sfAccount.getCode()}, HostFunctionError::FieldNotFound); // hfs.getTxNestedField(locator); // Locator for very negative base sfield code (not in knownCodeToField map) expectError( - {std::numeric_limits::min(), 0, sfAccount.fieldCode}, + {std::numeric_limits::min(), 0, sfAccount.getCode()}, HostFunctionError::InvalidField); // hfs.getTxNestedField(locator); // Locator for negative nested sfield code in STObject context // (sfMemos[0] is an STObject, then -1 is looked up as SField) expectError( - {sfMemos.fieldCode, 0, -1}, // -1 = sfInvalid, exists in map but not in memo object + {sfMemos.getCode(), 0, -1}, // -1 = kSfInvalid, exists in map but not in memo object HostFunctionError::FieldNotFound); // hfs.getTxNestedField(locator); // Locator for STArray - expectError({sfMemos.fieldCode}, HostFunctionError::NotLeafField); + expectError({sfMemos.getCode()}, HostFunctionError::NotLeafField); // hfs.getTxNestedField(locator); // Locator for STVector256 - expectError({sfCredentialIDs.fieldCode}, HostFunctionError::NotLeafField); + expectError({sfCredentialIDs.getCode()}, HostFunctionError::NotLeafField); // hfs.getTxNestedField(locator); // Locator for nesting into non-array/object field expectError( - {sfAccount.fieldCode, // sfAccount is not an array or object + {sfAccount.getCode(), // sfAccount is not an array or object 0, - sfAccount.fieldCode}, + sfAccount.getCode()}, HostFunctionError::LocatorMalformed); // hfs.getTxNestedField(locator); @@ -1629,7 +1650,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getTxNestedField(locator); // Locator for malformed locator (not multiple of 4) { - std::vector locatorVec = {sfMemos.fieldCode}; + std::vector locatorVec = {sfMemos.getCode()}; vrt.setBytes(0, locatorVec.data(), 3); WasmValVec params(4), result(1); @@ -1677,7 +1698,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getCurrentLedgerObjNestedField(baseLocatorSlice); // Locator for base field { - std::vector baseLocator = {sfSignerQuorum.fieldCode}; + std::vector baseLocator = {sfSignerQuorum.getCode()}; vrt.setBytes(0, baseLocator.data(), baseLocator.size() * sizeof(int32_t)); WasmValVec params(4), result(1); @@ -1724,17 +1745,17 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getCurrentLedgerObjNestedField(locator); // Locator for non-existent base field expectError( - {sfSigners.fieldCode, // sfSigners does not exist + {sfSigners.getCode(), // sfSigners does not exist 0, - sfAccount.fieldCode}, + sfAccount.getCode()}, HostFunctionError::FieldNotFound); // hfs.getCurrentLedgerObjNestedField(locator); // Locator for nesting into non-array/object field expectError( - {sfSignerQuorum.fieldCode, // sfSignerQuorum is not an array or object + {sfSignerQuorum.getCode(), // sfSignerQuorum is not an array or object 0, - sfAccount.fieldCode}, + sfAccount.getCode()}, HostFunctionError::LocatorMalformed); // hfs.getCurrentLedgerObjNestedField(emptyLocator); @@ -1759,7 +1780,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getCurrentLedgerObjNestedField(malformedLocator); // Locator for malformed locator (not multiple of 4) { - std::vector malformedLocatorVec = {sfMemos.fieldCode}; + std::vector malformedLocatorVec = {sfMemos.getCode()}; vrt.setBytes(0, malformedLocatorVec.data(), 3); WasmValVec params(4), result(1); @@ -1787,7 +1808,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite auto import2 = xrpl::createWasmImport(dummyHfs); dummyHfs.setRT(&vrt2); - std::vector const locatorVec = {sfAccount.fieldCode}; + std::vector const locatorVec = {sfAccount.getCode()}; vrt2.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(4), result(1); @@ -1836,14 +1857,14 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.cacheLedgerObj(signerListKeylet.key, 1); { WasmValVec params(3), result(1); - vrt.setBytes(0, signerListKeylet.key.data(), uint256::bytes); + vrt.setBytes(0, signerListKeylet.key.data(), uint256::size()); auto* trap = ww(cacheLedgerObj_wrap, &import.at("cache_ledger_obj"), params, result, 0, - uint256::bytes, + uint256::size(), 1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); @@ -1852,7 +1873,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // Locator for sfSignerEntries[0].sfAccount { std::vector const locatorVec = { - sfSignerEntries.fieldCode, 0, sfAccount.fieldCode}; + sfSignerEntries.getCode(), 0, sfAccount.getCode()}; // hfs.getLedgerObjNestedField(1, locator); vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(5), result(1); @@ -1879,7 +1900,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // Locator for sfSignerEntries[1].sfAccount { std::vector const locatorVec = { - sfSignerEntries.fieldCode, 1, sfAccount.fieldCode}; + sfSignerEntries.getCode(), 1, sfAccount.getCode()}; // hfs.getLedgerObjNestedField(1, locator); vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(5), result(1); @@ -1906,7 +1927,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // Locator for sfSignerEntries[0].sfSignerWeight { std::vector const locatorVec = { - sfSignerEntries.fieldCode, 0, sfSignerWeight.fieldCode}; + sfSignerEntries.getCode(), 0, sfSignerWeight.getCode()}; // hfs.getLedgerObjNestedField(1, locator); vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(5), result(1); @@ -1934,7 +1955,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // Locator for base field sfSignerQuorum { - std::vector const locatorVec = {sfSignerQuorum.fieldCode}; + std::vector const locatorVec = {sfSignerQuorum.getCode()}; // hfs.getLedgerObjNestedField(1, locator); vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(5), result(1); @@ -1984,49 +2005,49 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // Error: base field not found expectError( - {sfSigners.fieldCode, // sfSigners does not exist + {sfSigners.getCode(), // sfSigners does not exist 0, - sfAccount.fieldCode}, + sfAccount.getCode()}, HostFunctionError::FieldNotFound); // Error: index out of bounds expectError( - {sfSignerEntries.fieldCode, + {sfSignerEntries.getCode(), 2, // index 2 does not exist - sfAccount.fieldCode}, + sfAccount.getCode()}, HostFunctionError::IndexOutOfBounds); // Error: nested field not found expectError( { - sfSignerEntries.fieldCode, + sfSignerEntries.getCode(), 0, - sfDestination.fieldCode // sfDestination does not exist + sfDestination.getCode() // sfDestination does not exist }, HostFunctionError::FieldNotFound); // Error: invalid field code expectError( - {field_code(99999, 99999), 0, sfAccount.fieldCode}, HostFunctionError::InvalidField); + {fieldCode(99999, 99999), 0, sfAccount.getCode()}, HostFunctionError::InvalidField); // Error: invalid nested field code expectError( - {sfSignerEntries.fieldCode, 0, field_code(99999, 99999)}, + {sfSignerEntries.getCode(), 0, fieldCode(99999, 99999)}, HostFunctionError::InvalidField); // Error: slot out of range - expectError({sfSignerQuorum.fieldCode}, HostFunctionError::SlotOutRange, 0); - expectError({sfSignerQuorum.fieldCode}, HostFunctionError::SlotOutRange, 257); + expectError({sfSignerQuorum.getCode()}, HostFunctionError::SlotOutRange, 0); + expectError({sfSignerQuorum.getCode()}, HostFunctionError::SlotOutRange, 257); // Error: empty slot - expectError({sfSignerQuorum.fieldCode}, HostFunctionError::EmptySlot, 2); + expectError({sfSignerQuorum.getCode()}, HostFunctionError::EmptySlot, 2); // Error: locator for STArray (not leaf field) - expectError({sfSignerEntries.fieldCode}, HostFunctionError::NotLeafField); + expectError({sfSignerEntries.getCode()}, HostFunctionError::NotLeafField); // Error: nesting into non-array/object field expectError( - {sfSignerQuorum.fieldCode, 0, sfAccount.fieldCode}, + {sfSignerQuorum.getCode(), 0, sfAccount.getCode()}, HostFunctionError::LocatorMalformed); // Error: empty locator @@ -2034,7 +2055,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // Error: locator malformed (not multiple of 4) { - std::vector const locatorVec = {sfSignerEntries.fieldCode}; + std::vector const locatorVec = {sfSignerEntries.getCode()}; // hfs.getLedgerObjNestedField(1, locator); vrt.setBytes(0, locatorVec.data(), 3); WasmValVec params(5), result(1); @@ -2085,7 +2106,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } obj.setFieldArray(sfMemos, memos); STVector256 credIds; - credIds.push_back(credId); + credIds.pushBack(credId); obj.setFieldV256(sfCredentialIDs, credIds); }); @@ -2106,7 +2127,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite &import.at("get_tx_array_len"), params, result, - sfMemos.fieldCode); + sfMemos.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECT(result[0].of.i32 > 0)) @@ -2122,7 +2143,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite &import.at("get_tx_array_len"), params, result, - sfAccount.fieldCode); + sfAccount.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::NoArray)); @@ -2137,7 +2158,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite &import.at("get_tx_array_len"), params, result, - sfSigners.fieldCode); + sfSigners.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT( @@ -2153,7 +2174,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite &import.at("get_tx_array_len"), params, result, - sfCredentialIDs.fieldCode); + sfCredentialIDs.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECT(result[0].of.i32 > 0)) @@ -2192,7 +2213,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite &import.at("get_current_ledger_obj_array_len"), params, result, - sfSignerEntries.fieldCode); + sfSignerEntries.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECT(result[0].of.i32 > 0)) @@ -2207,7 +2228,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite &import.at("get_current_ledger_obj_array_len"), params, result, - sfMemos.fieldCode); + sfMemos.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT( @@ -2223,7 +2244,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite &import.at("get_current_ledger_obj_array_len"), params, result, - sfAccount.fieldCode); + sfAccount.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::NoArray)); @@ -2244,7 +2265,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite &import2.at("get_current_ledger_obj_array_len"), params, result, - sfMemos.fieldCode); + sfMemos.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT( @@ -2279,14 +2300,14 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.cacheLedgerObj(signerListKeylet.key, 1); { WasmValVec params(3), result(1); - vrt.setBytes(0, signerListKeylet.key.data(), uint256::bytes); + vrt.setBytes(0, signerListKeylet.key.data(), uint256::size()); auto* trap = ww(cacheLedgerObj_wrap, &import.at("cache_ledger_obj"), params, result, 0, - uint256::bytes, + uint256::size(), 1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); @@ -2301,7 +2322,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite params, result, 1, - sfSignerEntries.fieldCode); + sfSignerEntries.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECT(result[0].of.i32 > 0)) @@ -2319,7 +2340,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite params, result, 0, - sfSignerEntries.fieldCode); + sfSignerEntries.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::SlotOutRange)); @@ -2335,7 +2356,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite params, result, 1, - sfAccount.fieldCode); + sfAccount.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::NoArray)); @@ -2351,7 +2372,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite params, result, 2, - sfSignerEntries.fieldCode); + sfSignerEntries.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::EmptySlot)); @@ -2367,7 +2388,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite params, result, 1, - sfMemos.fieldCode); + sfMemos.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT( @@ -2422,7 +2443,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // Locator for sfMemos { - std::vector locatorVec = {sfMemos.fieldCode}; + std::vector locatorVec = {sfMemos.getCode()}; // hfs.getTxNestedArrayLen(locator); vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(2), result(1); @@ -2439,10 +2460,10 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } // Error: non-array field - expectError({sfAccount.fieldCode}, HostFunctionError::NoArray); + expectError({sfAccount.getCode()}, HostFunctionError::NoArray); // Error: missing field - expectError({sfSigners.fieldCode}, HostFunctionError::FieldNotFound); + expectError({sfSigners.getCode()}, HostFunctionError::FieldNotFound); } void @@ -2490,7 +2511,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // Locator for sfSignerEntries { - std::vector locatorVec = {sfSignerEntries.fieldCode}; + std::vector locatorVec = {sfSignerEntries.getCode()}; // hfs.getCurrentLedgerObjNestedArrayLen(locator); vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(2), result(1); @@ -2507,10 +2528,10 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } // Error: non-array field - expectError({sfSignerQuorum.fieldCode}, HostFunctionError::NoArray); + expectError({sfSignerQuorum.getCode()}, HostFunctionError::NoArray); // Error: missing field - expectError({sfSigners.fieldCode}, HostFunctionError::FieldNotFound); + expectError({sfSigners.getCode()}, HostFunctionError::FieldNotFound); { auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master) + 5); @@ -2520,7 +2541,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite auto import2 = xrpl::createWasmImport(dummyHfs); dummyHfs.setRT(&vrt2); - std::vector locatorVec = {sfAccount.fieldCode}; + std::vector locatorVec = {sfAccount.getCode()}; // auto const result = dummyHfs.getCurrentLedgerObjNestedArrayLen(locator); vrt2.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(2), result(1); @@ -2565,21 +2586,21 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.cacheLedgerObj(signerListKeylet.key, 1); { WasmValVec params(3), result(1); - vrt.setBytes(0, signerListKeylet.key.data(), uint256::bytes); + vrt.setBytes(0, signerListKeylet.key.data(), uint256::size()); auto* trap = ww(cacheLedgerObj_wrap, &import.at("cache_ledger_obj"), params, result, 0, - uint256::bytes, + uint256::size(), 1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); } // Locator for sfSignerEntries - std::vector locatorVec = {sfSignerEntries.fieldCode}; + std::vector locatorVec = {sfSignerEntries.getCode()}; // hfs.getLedgerObjNestedArrayLen(1, locator); { vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); @@ -2621,10 +2642,10 @@ struct HostFuncImpl_test : public beast::unit_test::Suite }; // Error: non-array field - expectError({sfSignerQuorum.fieldCode}, HostFunctionError::NoArray); + expectError({sfSignerQuorum.getCode()}, HostFunctionError::NoArray); // Error: missing field - expectError({sfSigners.fieldCode}, HostFunctionError::FieldNotFound); + expectError({sfSigners.getCode()}, HostFunctionError::FieldNotFound); // Slot out of range expectError(locatorVec, HostFunctionError::SlotOutRange, 0); @@ -2657,7 +2678,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // Error: locator for non-STArray field expectError( - {sfSignerQuorum.fieldCode, 0, sfAccount.fieldCode}, + {sfSignerQuorum.getCode(), 0, sfAccount.getCode()}, HostFunctionError::LocatorMalformed); } @@ -2669,7 +2690,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite Env env{*this}; env(escrow::create(env.master, env.master, XRP(100)), - escrow::finish_time(env.now() + std::chrono::seconds(1))); + escrow::kFinishTime(env.now() + std::chrono::seconds(1))); env.close(); OpenView ov{*env.current()}; @@ -2729,7 +2750,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite hfs.setRT(&vrt); // Generate a keypair and sign a message - auto const kp = generateKeyPair(KeyType::secp256k1, randomSeed()); + auto const kp = generateKeyPair(KeyType::Secp256k1, randomSeed()); PublicKey const& pk = kp.first; SecretKey const& sk = kp.second; std::string const& message = "hello signature"; @@ -2919,10 +2940,10 @@ struct HostFuncImpl_test : public beast::unit_test::Suite 0, data.size(), 256, - uint256::bytes); + uint256::size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == uint256::bytes); + BEAST_EXPECT(result[0].of.i32 == uint256::size()); // Should match direct call to sha512Half auto expected = sha512Half(Slice(data.data(), data.size())); @@ -3085,7 +3106,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite "abcdefghijklmnopqrstuvwxyz01234567890qwertyuiop[]" "asdfghjkl;'zxcvbnm8237tr28weufwldebvfv8734t07p"; Slice const longCredType(longCredTypeStr.data(), longCredTypeStr.size()); - static_assert(longCredTypeStr.size() > maxCredentialTypeLength); + static_assert(longCredTypeStr.size() > kMaxCredentialTypeLength); auto* trap2 = ww(credentialKeylet_wrap, &imp.at("credential_keylet"), @@ -3295,7 +3316,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); } - Currency const usd = to_currency("USD"); + Currency const usd = toCurrency("USD"); { auto const expected = keylet::line(masterID, alice.id(), usd); WasmValVec params(8), result(1); @@ -3364,7 +3385,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite result, masterID, alice.id(), - to_currency(""), + toCurrency(""), 1024, 32); BEAST_EXPECT( @@ -3664,7 +3685,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } { - auto const expected = keylet::ticket(masterID, 1u); + auto const expected = keylet::kTicket(masterID, 1u); WasmValVec params(6), result(1); auto* trap = ww(ticketKeylet_wrap, @@ -3742,7 +3763,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // Mint NFT for alice uint256 const nftId = token::getNextID(env, alice, 0u, 0u); std::string const uri = "https://example.com/nft"; - env(token::mint(alice), token::uri(uri)); + env(token::mint(alice), token::Uri(uri)); env.close(); uint256 const nftId2 = token::getNextID(env, alice, 0u, 0u); env(token::mint(alice)); @@ -3761,8 +3782,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // Should succeed for valid NFT { // hfs.getNFT(alice.id(), nftId); - vrt.setBytes(0, alice.id().data(), AccountID::bytes); - vrt.setBytes(256, nftId.data(), uint256::bytes); + vrt.setBytes(0, alice.id().data(), AccountID::size()); + vrt.setBytes(256, nftId.data(), uint256::size()); WasmValVec params(6), result(1); auto* trap = ww(getNFT_wrap, @@ -3770,9 +3791,9 @@ struct HostFuncImpl_test : public beast::unit_test::Suite params, result, 0, - AccountID::bytes, + AccountID::size(), 256, - uint256::bytes, + uint256::size(), 512, 256); @@ -3788,8 +3809,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // Should fail for invalid account { // hfs.getNFT(xrpAccount(), nftId); - vrt.setBytes(0, xrpAccount().data(), AccountID::bytes); - vrt.setBytes(256, nftId.data(), uint256::bytes); + vrt.setBytes(0, xrpAccount().data(), AccountID::size()); + vrt.setBytes(256, nftId.data(), uint256::size()); WasmValVec params(6), result(1); auto* trap = ww(getNFT_wrap, @@ -3797,9 +3818,9 @@ struct HostFuncImpl_test : public beast::unit_test::Suite params, result, 0, - AccountID::bytes, + AccountID::size(), 256, - uint256::bytes, + uint256::size(), 512, 256); @@ -3811,8 +3832,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.getNFT(alice.id(), uint256()); uint256 zeroId; - vrt.setBytes(0, alice.id().data(), AccountID::bytes); - vrt.setBytes(256, zeroId.data(), uint256::bytes); + vrt.setBytes(0, alice.id().data(), AccountID::size()); + vrt.setBytes(256, zeroId.data(), uint256::size()); WasmValVec params(6), result(1); auto* trap = ww(getNFT_wrap, @@ -3820,9 +3841,9 @@ struct HostFuncImpl_test : public beast::unit_test::Suite params, result, 0, - AccountID::bytes, + AccountID::size(), 256, - uint256::bytes, + uint256::size(), 512, 256); @@ -3834,8 +3855,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { auto const badId = token::getNextID(env, alice, 0u, 1u); // hfs.getNFT(alice.id(), badId); - vrt.setBytes(0, alice.id().data(), AccountID::bytes); - vrt.setBytes(256, badId.data(), uint256::bytes); + vrt.setBytes(0, alice.id().data(), AccountID::size()); + vrt.setBytes(256, badId.data(), uint256::size()); WasmValVec params(6), result(1); auto* trap = ww(getNFT_wrap, @@ -3843,9 +3864,9 @@ struct HostFuncImpl_test : public beast::unit_test::Suite params, result, 0, - AccountID::bytes, + AccountID::size(), 256, - uint256::bytes, + uint256::size(), 512, 256); @@ -3856,8 +3877,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.getNFT(alice.id(), nftId2); - vrt.setBytes(0, alice.id().data(), AccountID::bytes); - vrt.setBytes(256, nftId2.data(), uint256::bytes); + vrt.setBytes(0, alice.id().data(), AccountID::size()); + vrt.setBytes(256, nftId2.data(), uint256::size()); WasmValVec params(6), result(1); auto* trap = ww(getNFT_wrap, @@ -3865,9 +3886,9 @@ struct HostFuncImpl_test : public beast::unit_test::Suite params, result, 0, - AccountID::bytes, + AccountID::size(), 256, - uint256::bytes, + uint256::size(), 512, 256); @@ -3902,7 +3923,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // Should succeed for valid NFT id { // hfs.getNFTIssuer(nftId); - vrt.setBytes(0, nftId.data(), uint256::bytes); + vrt.setBytes(0, nftId.data(), uint256::size()); WasmValVec params(4), result(1); auto* trap = ww(getNFTIssuer_wrap, @@ -3910,12 +3931,12 @@ struct HostFuncImpl_test : public beast::unit_test::Suite params, result, 0, - uint256::bytes, + uint256::size(), 256, - AccountID::bytes); + AccountID::size()); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == AccountID::bytes)) + BEAST_EXPECT(result[0].of.i32 == AccountID::size())) { auto issuerBytes = vrt.getBytes(params, 2); BEAST_EXPECT(std::ranges::equal(issuerBytes, env.master.id())); @@ -3926,7 +3947,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.getNFTIssuer(uint256()); uint256 zeroId; - vrt.setBytes(0, zeroId.data(), uint256::bytes); + vrt.setBytes(0, zeroId.data(), uint256::size()); WasmValVec params(4), result(1); auto* trap = ww(getNFTIssuer_wrap, @@ -3934,9 +3955,9 @@ struct HostFuncImpl_test : public beast::unit_test::Suite params, result, 0, - uint256::bytes, + uint256::size(), 256, - AccountID::bytes); + AccountID::size()); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) BEAST_EXPECT(result[0].of.i32 == HfErrorToInt(HostFunctionError::InvalidParams)); @@ -3967,7 +3988,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite hfs.setRT(&vrt); // hfs.getNFTTaxon(nftId); - vrt.setBytes(0, nftId.data(), uint256::bytes); + vrt.setBytes(0, nftId.data(), uint256::size()); WasmValVec params(4), result(1); auto* trap = ww(getNFTTaxon_wrap, @@ -3975,7 +3996,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite params, result, 0, - uint256::bytes, + uint256::size(), 256, sizeof(uint32_t)); @@ -3996,7 +4017,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // Mint NFT with default flags uint256 const nftId = token::getNextID(env, env.master, 0u, tfTransferable); - env(token::mint(env.master, 0), txflags(tfTransferable)); + env(token::mint(env.master, 0), Txflags(tfTransferable)); env.close(); OpenView ov{*env.current()}; @@ -4011,10 +4032,10 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.getNFTFlags(nftId); - vrt.setBytes(0, nftId.data(), uint256::bytes); + vrt.setBytes(0, nftId.data(), uint256::size()); WasmValVec params(2), result(1); auto* trap = ww( - getNFTFlags_wrap, &import.at("get_nft_flags"), params, result, 0, uint256::bytes); + getNFTFlags_wrap, &import.at("get_nft_flags"), params, result, 0, uint256::size()); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) BEAST_EXPECT(result[0].of.i32 == tfTransferable); @@ -4024,10 +4045,10 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.getNFTFlags(uint256()); uint256 zeroId; - vrt.setBytes(0, zeroId.data(), uint256::bytes); + vrt.setBytes(0, zeroId.data(), uint256::size()); WasmValVec params(2), result(1); auto* trap = ww( - getNFTFlags_wrap, &import.at("get_nft_flags"), params, result, 0, uint256::bytes); + getNFTFlags_wrap, &import.at("get_nft_flags"), params, result, 0, uint256::size()); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) BEAST_EXPECT(result[0].of.i32 == 0); @@ -4044,7 +4065,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite uint16_t const transferFee = 250; uint256 const nftId = token::getNextID(env, env.master, 0u, tfTransferable, transferFee); - env(token::mint(env.master, 0), token::xferFee(transferFee), txflags(tfTransferable)); + env(token::mint(env.master, 0), token::XferFee(transferFee), Txflags(tfTransferable)); env.close(); OpenView ov{*env.current()}; @@ -4059,7 +4080,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.getNFTTransferFee(nftId); - vrt.setBytes(0, nftId.data(), uint256::bytes); + vrt.setBytes(0, nftId.data(), uint256::size()); WasmValVec params(2), result(1); auto* trap = ww(getNFTTransferFee_wrap, @@ -4067,7 +4088,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite params, result, 0, - uint256::bytes); + uint256::size()); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) BEAST_EXPECT(result[0].of.i32 == transferFee); @@ -4077,7 +4098,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.getNFTTransferFee(uint256()); uint256 zeroId; - vrt.setBytes(0, zeroId.data(), uint256::bytes); + vrt.setBytes(0, zeroId.data(), uint256::size()); WasmValVec params(2), result(1); auto* trap = ww(getNFTTransferFee_wrap, @@ -4085,7 +4106,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite params, result, 0, - uint256::bytes); + uint256::size()); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) BEAST_EXPECT(result[0].of.i32 == 0); @@ -4118,7 +4139,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.getNFTSerial(nftId); - vrt.setBytes(0, nftId.data(), uint256::bytes); + vrt.setBytes(0, nftId.data(), uint256::size()); WasmValVec params(4), result(1); auto* trap = ww(getNFTSerial_wrap, @@ -4126,7 +4147,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite params, result, 0, - uint256::bytes, + uint256::size(), 256, sizeof(uint32_t)); @@ -4141,7 +4162,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.getNFTSerial(uint256()); uint256 zeroId; - vrt.setBytes(0, zeroId.data(), uint256::bytes); + vrt.setBytes(0, zeroId.data(), uint256::size()); WasmValVec params(4), result(1); auto* trap = ww(getNFTSerial_wrap, @@ -4149,7 +4170,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite params, result, 0, - uint256::bytes, + uint256::size(), 256, sizeof(uint32_t)); @@ -4170,7 +4191,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { Env env(*this); OpenView ov{*env.current()}; - test::StreamSink sink{beast::severities::kTrace}; + test::StreamSink sink{beast::Severity::Trace}; beast::Journal const jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); @@ -4242,7 +4263,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // logs disabled (trace < error) Env env(*this); OpenView ov{*env.current()}; - test::StreamSink sink{beast::severities::kError}; + test::StreamSink sink{beast::Severity::Error}; beast::Journal const jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); @@ -4288,7 +4309,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { Env env(*this); OpenView ov{*env.current()}; - test::StreamSink sink{beast::severities::kTrace}; + test::StreamSink sink{beast::Severity::Trace}; beast::Journal const jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); @@ -4321,7 +4342,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // logs disabled Env env(*this); OpenView ov{*env.current()}; - test::StreamSink sink{beast::severities::kError}; + test::StreamSink sink{beast::Severity::Error}; beast::Journal const jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); @@ -4357,7 +4378,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { Env env(*this); OpenView ov{*env.current()}; - test::StreamSink sink{beast::severities::kTrace}; + test::StreamSink sink{beast::Severity::Trace}; beast::Journal const jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); @@ -4398,7 +4419,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // logs disabled Env env(*this); OpenView ov{*env.current()}; - test::StreamSink sink{beast::severities::kError}; + test::StreamSink sink{beast::Severity::Error}; beast::Journal const jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); @@ -4442,7 +4463,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { Env env(*this); OpenView ov{*env.current()}; - test::StreamSink sink{beast::severities::kTrace}; + test::StreamSink sink{beast::Severity::Trace}; beast::Journal const jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); @@ -4535,7 +4556,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // logs disabled Env env(*this); OpenView ov{*env.current()}; - test::StreamSink sink{beast::severities::kError}; + test::StreamSink sink{beast::Severity::Error}; beast::Journal const jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); @@ -4580,11 +4601,11 @@ struct HostFuncImpl_test : public beast::unit_test::Suite Bytes const floatIntMax = {0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00}; // 2^63-1 Bytes const floatUIntMax = {0x19, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9A, 0x00, 0x00, 0x00, 0x01}; // 2^64-1 - Bytes const floatMaxExp = {0x0D, 0xE0, 0xB6, 0xB3, 0xA7, 0x64, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00}; // 1e(Number::maxExponent + normalExp) - Bytes const floatPreMaxExp = {0x0D, 0xE0, 0xB6, 0xB3, 0xA7, 0x64, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF}; // 1e(Number::maxExponent + normalExp - 1) - Bytes const floatMinusMaxExp = {0xF2, 0x1F, 0x49, 0x4C, 0x58, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00}; // -1e(Number::maxExponent + normalExp) - Bytes const floatMinExp = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00}; // 1e(Number::minExponent - normalExp) - Bytes const floatMax = {0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x80, 0x00}; // Number::maxRep e(Number::maxExponent - normalExp) + Bytes const floatMaxExp = {0x0D, 0xE0, 0xB6, 0xB3, 0xA7, 0x64, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00}; // 1e(Number::kMaxExponent + normalExp) + Bytes const floatPreMaxExp = {0x0D, 0xE0, 0xB6, 0xB3, 0xA7, 0x64, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF}; // 1e(Number::kMaxExponent + normalExp - 1) + Bytes const floatMinusMaxExp = {0xF2, 0x1F, 0x49, 0x4C, 0x58, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00}; // -1e(Number::kMaxExponent + normalExp) + Bytes const floatMinExp = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00}; // 1e(Number::kMinExponent - normalExp) + Bytes const floatMax = {0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x80, 0x00}; // Number::kMaxRep e(Number::kMaxExponent - normalExp) Bytes const floatMaxIOU = {0x0D, 0xE0, 0xB6, 0xB3, 0xA7, 0x63, 0xFF, 0x9C, 0x00, 0x00, 0x00, 0x4E}; // 9999999999999999e(96) Bytes const floatMinIOU = {0x0D, 0xE0, 0xB6, 0xB3, 0xA7, 0x64, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x9D}; // 1e(-96 - 3 + normalExp = -81) @@ -4615,7 +4636,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } else { - n = Number(static_cast(m), e, Number::normalized()); + n = Number(static_cast(m), e, Number::Normalized{}); } STNumber(sfNumber, n).add(msg); @@ -4628,7 +4649,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite std::cout << std::dec << std::setfill(' ') << std::endl; } - static void + void printNumbersBin() { printFloats("int64.min", std::numeric_limits::min(), 0); @@ -4636,16 +4657,16 @@ struct HostFuncImpl_test : public beast::unit_test::Suite printFloats("int64.max", std::numeric_limits::max(), 0); printFloats("uint64.max", std::numeric_limits::max(), 0); - printFloats("Number 1 max exp", 1, Number::maxExponent + normalExp); - printFloats("Number (max exp - 1)", 1, Number::maxExponent + normalExp - 1); - printFloats("Number -1 max exp", -1, Number::maxExponent + normalExp); + printFloats("Number 1 max exp", 1, Number::kMaxExponent + normalExp); + printFloats("Number (max exp - 1)", 1, Number::kMaxExponent + normalExp - 1); + printFloats("Number -1 max exp", -1, Number::kMaxExponent + normalExp); - printFloats("Number.max", Number::maxRep, Number::maxExponent); - printFloats("Number min positive", 1, Number::minExponent + normalExp); + printFloats("Number.max", Number::kMaxRep, Number::kMaxExponent); + printFloats("Number min positive", 1, Number::kMinExponent + normalExp); printFloats( - "Number.min", std::numeric_limits::min(), Number::maxExponent - normalExp); - printFloats("STAmount.max", STAmount::cMaxValue, STAmount::cMaxOffset); - printFloats("STAmount min positive", STAmount::cMinValue, STAmount::cMinOffset); + "Number.min", std::numeric_limits::min(), Number::kMaxExponent - normalExp); + printFloats("STAmount.max", STAmount::kMaxValue, STAmount::kMaxOffset); + printFloats("STAmount min positive", STAmount::kMinValue, STAmount::kMinOffset); printFloats("one", 1, 0); printFloats("-one", -1, 0); @@ -4720,7 +4741,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // logs disabled Env env(*this); OpenView ov{*env.current()}; - test::StreamSink sink{beast::severities::kError}; + test::StreamSink sink{beast::Severity::Error}; beast::Journal const jlog{sink}; ApplyContext ac = createApplyContext(env, ov, jlog); @@ -5029,7 +5050,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } { - // hfs.floatFromMantExp(1, Number::maxExponent + normalExp + 1, 0); + // hfs.floatFromMantExp(1, Number::kMaxExponent + normalExp + 1, 0); WasmValVec params(5), result(1); auto* trap = ww(floatFromMantExp_wrap, @@ -5037,7 +5058,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite params, result, 1ll, - Number::maxExponent + normalExp + 1, + Number::kMaxExponent + normalExp + 1, 0, floatSize, 0); @@ -5049,7 +5070,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } { - // hfs.floatFromMantExp(1, Number::minExponent + normalExp - 1, 0); + // hfs.floatFromMantExp(1, Number::kMinExponent + normalExp - 1, 0); WasmValVec params(5), result(1); auto* trap = ww(floatFromMantExp_wrap, @@ -5057,7 +5078,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite params, result, 1ll, - Number::minExponent + normalExp - 1, + Number::kMinExponent + normalExp - 1, 0, floatSize, 0); @@ -5069,7 +5090,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } { - // hfs.floatFromMantExp(1, Number::maxExponent + normalExp, 0); + // hfs.floatFromMantExp(1, Number::kMaxExponent + normalExp, 0); WasmValVec params(5), result(1); auto* trap = ww(floatFromMantExp_wrap, @@ -5077,7 +5098,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite params, result, 1ll, - Number::maxExponent + normalExp, + Number::kMaxExponent + normalExp, 0, floatSize, 0); @@ -5089,7 +5110,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } { - // hfs.floatFromMantExp(-1, Number::maxExponent + normalExp, 0); + // hfs.floatFromMantExp(-1, Number::kMaxExponent + normalExp, 0); WasmValVec params(5), result(1); auto* trap = ww(floatFromMantExp_wrap, @@ -5097,7 +5118,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite params, result, -1ll, - Number::maxExponent + normalExp, + Number::kMaxExponent + normalExp, 0, floatSize, 0); @@ -5109,7 +5130,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } { - // hfs.floatFromMantExp(1, Number::maxExponent + normalExp - 1, 0); + // hfs.floatFromMantExp(1, Number::kMaxExponent + normalExp - 1, 0); WasmValVec params(5), result(1); auto* trap = ww(floatFromMantExp_wrap, @@ -5117,7 +5138,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite params, result, 1ll, - Number::maxExponent + normalExp - 1, + Number::kMaxExponent + normalExp - 1, 0, floatSize, 0); @@ -5129,15 +5150,15 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } { - // hfs.floatFromMantExp(STAmount::cMaxValue, STAmount::cMaxOffset, 0); + // hfs.floatFromMantExp(STAmount::kMaxValue, STAmount::kMaxOffset, 0); WasmValVec params(5), result(1); auto* trap = ww(floatFromMantExp_wrap, &import.at("float_compare"), params, result, - static_cast(STAmount::cMaxValue), - STAmount::cMaxOffset, + static_cast(STAmount::kMaxValue), + STAmount::kMaxOffset, 0, floatSize, 0); @@ -5149,7 +5170,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } { - // hfs.floatFromMantExp(1, Number::minExponent + normalExp, 0); + // hfs.floatFromMantExp(1, Number::kMinExponent + normalExp, 0); WasmValVec params(5), result(1); auto* trap = ww(floatFromMantExp_wrap, @@ -5157,7 +5178,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite params, result, 1ll, - Number::minExponent - normalExp, + Number::kMinExponent - normalExp, 0, floatSize, 0); @@ -5189,7 +5210,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } { - // hfs.floatFromMantExp(1, Number::maxExponent + normalExp + 1, 0); + // hfs.floatFromMantExp(1, Number::kMaxExponent + normalExp + 1, 0); WasmValVec params(5), result(1); auto* trap = ww(floatFromMantExp_wrap, @@ -5197,7 +5218,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite params, result, 1ll, - Number::maxExponent + normalExp + 1, + Number::kMaxExponent + normalExp + 1, 0, floatSize, 0); @@ -5933,7 +5954,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.floatDivide(makeSlice(floatMax), makeSlice(*y), 0); auto const y = - hfs.floatFromMantExp(STAmount::cMaxValue, -normalExp - 1, 0); // 0.9999999... + hfs.floatFromMantExp(STAmount::kMaxValue, -normalExp - 1, 0); // 0.9999999... if (BEAST_EXPECT(y)) { WasmValVec params(7), result(1); @@ -6307,7 +6328,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } { - // hfs.floatPower(makeSlice(floatMax), Number::maxExponent + 1, 0); + // hfs.floatPower(makeSlice(floatMax), Number::kMaxExponent + 1, 0); WasmValVec params(6), result(1); vrt.setBytes(0, floatMax.data(), floatMax.size()); auto* trap = @@ -6317,7 +6338,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite result, 0, floatSize, - Number::maxExponent + 1, + Number::kMaxExponent + 1, floatSize, floatSize, 0); @@ -6586,7 +6607,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite bool ex = false; try { - STAmount const amount(noIssue(), -1, Number::maxExponent + normalExp); + STAmount const amount(noIssue(), -1, Number::kMaxExponent + normalExp); [[maybe_unused]] Bytes const amountBytes = toBytes(amount); } catch (...) @@ -6601,7 +6622,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.floatFromSTAmount(amount, 0); STAmount const amount( - IOUAmount(STAmount::cMinValue, STAmount::cMinOffset), USD.issue()); + IOUAmount(STAmount::kMinValue, STAmount::kMinOffset), usd.issue()); Bytes amountBytes = toBytes(amount); vrt.setBytes(0, amountBytes.data(), amountBytes.size()); WasmValVec params(5), result(1); @@ -6625,7 +6646,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.floatFromSTAmount(amount, 0); STAmount const amount( - IOUAmount(STAmount::cMaxValue, STAmount::cMaxOffset), USD.issue()); + IOUAmount(STAmount::kMaxValue, STAmount::kMaxOffset), usd.issue()); Bytes amountBytes = toBytes(amount); vrt.setBytes(0, amountBytes.data(), amountBytes.size()); WasmValVec params(5), result(1); @@ -6713,7 +6734,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.floatFromSTNumber(num, 0); STNumber const num( - sfNumber, Number(std::numeric_limits::max(), 0, Number::normalized())); + sfNumber, Number(std::numeric_limits::max(), 0, Number::Normalized{})); Bytes numBytes = toBytes(num); vrt.setBytes(0, numBytes.data(), numBytes.size()); WasmValVec params(5), result(1); @@ -6736,7 +6757,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.floatFromSTNumber(num, 0); - STNumber const num(sfNumber, Number(-1, Number::maxExponent + normalExp)); + STNumber const num(sfNumber, Number(-1, Number::kMaxExponent + normalExp)); Bytes numBytes = toBytes(num); vrt.setBytes(0, numBytes.data(), numBytes.size()); WasmValVec params(5), result(1); @@ -7334,8 +7355,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite BEAST_EXPECT(result[0].of.i32 == floatSize); auto const mantissa = vrt.getInt64(params, 2); auto const exponent = vrt.getInt32(params, 4); - BEAST_EXPECT(mantissa == Number::maxRep) && - BEAST_EXPECT(exponent == Number::maxExponent); + BEAST_EXPECT(mantissa == Number::kMaxRep) && + BEAST_EXPECT(exponent == Number::kMaxExponent); // roundtrip auto const result2 = hfs.floatFromMantExp(mantissa, exponent, 0); diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index 524a3e3379..26d30dd53c 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -1,5 +1,6 @@ #include -#include +#include +#include #include #include @@ -8,6 +9,13 @@ #include #include +#include + +#include +#include +#include +#include + namespace xrpl::test { struct TestLedgerDataProvider : public HostFunctions @@ -23,7 +31,7 @@ public: void setRT(void* rt) override { - rt = rt; + this->rt = rt; } [[nodiscard]] void* @@ -41,25 +49,25 @@ public: struct TestHostFunctions : public HostFunctions { - test::jtx::Env& env_; - AccountID accountID_; - Bytes data_; + test::jtx::Env& env; + AccountID accountID; + Bytes data; int clock_drift = 0; void* rt = nullptr; public: TestHostFunctions(test::jtx::Env& env, int cd = 0) - : HostFunctions(env.journal), env_(env), clock_drift(cd) + : HostFunctions(env.journal), env(env), clock_drift(cd) { - accountID_ = env_.master.id(); + accountID = env.master.id(); std::string t = "10000"; - data_ = Bytes{t.begin(), t.end()}; + data = Bytes{t.begin(), t.end()}; } void setRT(void* rt) override { - rt = rt; + this->rt = rt; } [[nodiscard]] void* @@ -83,7 +91,7 @@ public: Expected getParentLedgerHash() const override { - return env_.current()->header().parentHash; + return env.current()->header().parentHash; } Expected @@ -115,7 +123,7 @@ public: { if (fname == sfAccount) { - return Bytes(accountID_.begin(), accountID_.end()); + return Bytes(accountID.begin(), accountID.end()); } if (fname == sfFee) { @@ -123,7 +131,7 @@ public: uint8_t const* p = reinterpret_cast(&x); return Bytes{p, p + sizeof(x)}; } - else if (fname == sfSequence) + if (fname == sfSequence) { auto const x = getLedgerSqn(); if (!x) @@ -142,13 +150,15 @@ public: auto const& sn = fname.getName(); if (sn == "Destination" || sn == "Account") { - return Bytes(accountID_.begin(), accountID_.end()); + return Bytes(accountID.begin(), accountID.end()); } if (sn == "Data") - return data_; - else if (sn == "FinishAfter") { - auto t = env_.current()->parentCloseTime().time_since_epoch().count(); + return data; + } + if (sn == "FinishAfter") + { + auto t = env.current()->parentCloseTime().time_since_epoch().count(); std::string s = std::to_string(t); return Bytes{s.begin(), s.end()}; } @@ -167,9 +177,9 @@ public: } if (fname == sfAccount) { - return Bytes(accountID_.begin(), accountID_.end()); + return Bytes(accountID.begin(), accountID.end()); } - return data_; + return data; } Expected @@ -179,9 +189,9 @@ public: { int32_t const* l = reinterpret_cast(locator.data()); int32_t const sfield = l[0]; - if (sfield == sfAccount.fieldCode) + if (sfield == sfAccount.getCode()) { - return Bytes(accountID_.begin(), accountID_.end()); + return Bytes(accountID.begin(), accountID.end()); } } uint8_t const a[] = {0x2b, 0x6a, 0x23, 0x2a, 0xa4, 0xc4, 0xbe, 0x41, 0xbf, 0x49, 0xd2, @@ -197,9 +207,9 @@ public: { int32_t const* l = reinterpret_cast(locator.data()); int32_t const sfield = l[0]; - if (sfield == sfAccount.fieldCode) + if (sfield == sfAccount.getCode()) { - return Bytes(accountID_.begin(), accountID_.end()); + return Bytes(accountID.begin(), accountID.end()); } } uint8_t const a[] = {0x2b, 0x6a, 0x23, 0x2a, 0xa4, 0xc4, 0xbe, 0x41, 0xbf, 0x49, 0xd2, @@ -215,9 +225,9 @@ public: { int32_t const* l = reinterpret_cast(locator.data()); int32_t const sfield = l[0]; - if (sfield == sfAccount.fieldCode) + if (sfield == sfAccount.getCode()) { - return Bytes(accountID_.begin(), accountID_.end()); + return Bytes(accountID.begin(), accountID.end()); } } uint8_t const a[] = {0x2b, 0x6a, 0x23, 0x2a, 0xa4, 0xc4, 0xbe, 0x41, 0xbf, 0x49, 0xd2, @@ -277,7 +287,7 @@ public: Expected computeSha512HalfHash(Slice const& data) const override { - return env_.current()->header().parentHash; + return env.current()->header().parentHash; } Expected @@ -353,7 +363,7 @@ public: Expected getNFTIssuer(uint256 const& nftId) const override { - return Bytes(accountID_.begin(), accountID_.end()); + return Bytes(accountID.begin(), accountID.end()); } Expected @@ -387,7 +397,7 @@ public: #ifdef DEBUG_OUTPUT auto& j = std::cerr; #else - if (!getJournal().active(beast::severities::kTrace)) + if (!getJournal().active(beast::Severity::Trace)) return; auto j = getJournal().trace(); #endif @@ -540,7 +550,7 @@ struct TestHostFunctionsSink : public TestHostFunctions public: explicit TestHostFunctionsSink(test::jtx::Env& env, int cd = 0) - : TestHostFunctions(env, cd), sink_(beast::severities::kDebug) + : TestHostFunctions(env, cd), sink(beast::Severity::Debug) { j = beast::Journal(sink); } diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 37a91c6778..c1879d1fe9 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -6,6 +6,7 @@ #include #include #include +#include // IWYU pragma: keep #include #include @@ -95,7 +96,7 @@ uleb128(IT&& it) return {val, count}; } -std::pair +static std::pair getSection(Bytes const& module, std::uint8_t n) { static std::uint8_t const kHdr[] = {0x00, 0x61, 0x73, 0x6D}; @@ -134,7 +135,7 @@ getSection(Bytes const& module, std::uint8_t n) return {0, 0}; } -std::optional +static std::optional runFinishFunction(std::string const& code) { auto& engine = WasmEngine::instance(); @@ -149,6 +150,13 @@ runFinishFunction(std::string const& code) return std::nullopt; } +static bool +finishFunctionReturns(std::string const& code, int32_t expected) +{ + auto const result = runFinishFunction(code); + return result.has_value() && *result == expected; +} + struct Wasm_test : public beast::unit_test::Suite { void @@ -692,82 +700,82 @@ struct Wasm_test : public beast::unit_test::Suite testWasmMemory() { testcase("Wasm additional memory limit tests"); - BEAST_EXPECT(runFinishFunction(kMemoryPointerAtLimitHex).value() == 1); - BEAST_EXPECT(runFinishFunction(kMemoryPointerOverLimitHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kMemoryOffsetOverLimitHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kMemoryEndOfWordOverLimitHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kMemoryGrow0To1PageHex).value() == 1); - BEAST_EXPECT(runFinishFunction(kMemoryGrow1To0PageHex).value() == -1); - BEAST_EXPECT(runFinishFunction(kMemoryLastByteOf8MbHex).value() == 1); - BEAST_EXPECT(runFinishFunction(kMemoryGrow1MoreThan8MbHex).value() == -1); - BEAST_EXPECT(runFinishFunction(kMemoryGrow0MoreThan8MbHex).value() == 1); - BEAST_EXPECT(runFinishFunction(kMemoryInit1MoreThan8MbHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kMemoryNegativeAddressHex).has_value() == false); + BEAST_EXPECT(finishFunctionReturns(kMemoryPointerAtLimitHex, 1)); + BEAST_EXPECT(!runFinishFunction(kMemoryPointerOverLimitHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kMemoryOffsetOverLimitHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kMemoryEndOfWordOverLimitHex).has_value()); + BEAST_EXPECT(finishFunctionReturns(kMemoryGrow0To1PageHex, 1)); + BEAST_EXPECT(finishFunctionReturns(kMemoryGrow1To0PageHex, -1)); + BEAST_EXPECT(finishFunctionReturns(kMemoryLastByteOf8MbHex, 1)); + BEAST_EXPECT(finishFunctionReturns(kMemoryGrow1MoreThan8MbHex, -1)); + BEAST_EXPECT(finishFunctionReturns(kMemoryGrow0MoreThan8MbHex, 1)); + BEAST_EXPECT(!runFinishFunction(kMemoryInit1MoreThan8MbHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kMemoryNegativeAddressHex).has_value()); } void testWasmTable() { testcase("Wasm table limit tests"); - BEAST_EXPECT(runFinishFunction(kTable64ElementsHex).value() == 1); - BEAST_EXPECT(runFinishFunction(kTable65ElementsHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kTable2TablesHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kTable0ElementsHex).value() == 1); - BEAST_EXPECT(runFinishFunction(kTableUintMaxHex).has_value() == false); + BEAST_EXPECT(finishFunctionReturns(kTable64ElementsHex, 1)); + BEAST_EXPECT(!runFinishFunction(kTable65ElementsHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kTable2TablesHex).has_value()); + BEAST_EXPECT(finishFunctionReturns(kTable0ElementsHex, 1)); + BEAST_EXPECT(!runFinishFunction(kTableUintMaxHex).has_value()); } void testWasmProposal() { testcase("Wasm disabled proposal tests"); - BEAST_EXPECT(runFinishFunction(kProposalMutableGlobalHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kProposalGcStructNewHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kProposalMultiValueHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kProposalSignExtHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kProposalFloatToIntHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kProposalBulkMemoryHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kProposalRefTypesHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kProposalTailCallHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kProposalExtendedConstHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kProposalMultiMemoryHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kProposalCustomPageSizesHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kProposalMemory64Hex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kProposalWideArithmeticHex).has_value() == false); + BEAST_EXPECT(!runFinishFunction(kProposalMutableGlobalHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kProposalGcStructNewHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kProposalMultiValueHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kProposalSignExtHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kProposalFloatToIntHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kProposalBulkMemoryHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kProposalRefTypesHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kProposalTailCallHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kProposalExtendedConstHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kProposalMultiMemoryHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kProposalCustomPageSizesHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kProposalMemory64Hex).has_value()); + BEAST_EXPECT(!runFinishFunction(kProposalWideArithmeticHex).has_value()); } void testWasmTrap() { testcase("Wasm trap tests"); - BEAST_EXPECT(runFinishFunction(kTrapDivideBy0Hex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kTrapIntOverflowHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kTrapUnreachableHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kTrapNullCallHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kTrapFuncSigMismatchHex).has_value() == false); + BEAST_EXPECT(!runFinishFunction(kTrapDivideBy0Hex).has_value()); + BEAST_EXPECT(!runFinishFunction(kTrapIntOverflowHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kTrapUnreachableHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kTrapNullCallHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kTrapFuncSigMismatchHex).has_value()); } void testWasmWasi() { testcase("Wasm Wasi tests"); - BEAST_EXPECT(runFinishFunction(kWasiGetTimeHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kWasiPrintHex).has_value() == false); + BEAST_EXPECT(!runFinishFunction(kWasiGetTimeHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kWasiPrintHex).has_value()); } void testWasmSectionCorruption() { testcase("Wasm Section Corruption tests"); - BEAST_EXPECT(runFinishFunction(kBadMagicNumberHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kBadVersionNumberHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kLyingHeaderHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kNeverEndingNumberHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kVectorLieHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kSectionOrderingHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kGhostPayloadHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kJunkAfterSectionHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kInvalidSectionIdHex).has_value() == false); - BEAST_EXPECT(runFinishFunction(kLocalVariableBombHex).has_value() == false); + BEAST_EXPECT(!runFinishFunction(kBadMagicNumberHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kBadVersionNumberHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kLyingHeaderHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kNeverEndingNumberHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kVectorLieHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kSectionOrderingHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kGhostPayloadHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kJunkAfterSectionHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kInvalidSectionIdHex).has_value()); + BEAST_EXPECT(!runFinishFunction(kLocalVariableBombHex).has_value()); } void @@ -998,7 +1006,7 @@ struct Wasm_test : public beast::unit_test::Suite std::vector params; params.reserve(1000); for (int i = 0; i < 1000; ++i) - params.push_back({.type = WtI32, .of = {.i32 = 2 * i}}); + params.push_back({.type = WasmTypes::WtI32, .of = {.i32 = 2 * i}}); auto& engine = WasmEngine::instance(); { @@ -1007,7 +1015,7 @@ struct Wasm_test : public beast::unit_test::Suite } // add 1 more parameter, module can't be created now - params.push_back({.type = WtI32, .of = {.i32 = 2 * 1000}}); + params.push_back({.type = WasmTypes::WtI32, .of = {.i32 = 2 * 1000}}); { auto re = engine.run(params1k1, hfs, 1'000'000, "test", params, imports, env.journal); BEAST_EXPECT(!re); From 63fff4b518f0eaaf25721ab23af8b6acb78671f0 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Fri, 29 May 2026 17:49:03 -0400 Subject: [PATCH 124/137] Fix HF tests (#7365) --- src/test/app/HostFuncImpl_test.cpp | 79 ++++++++++++++---------------- 1 file changed, 37 insertions(+), 42 deletions(-) diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 04d3429bfe..7a6166fe4c 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -1536,8 +1536,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECTS( - result[0].of.i32 == static_cast(expectedError), - std::to_string(result[0].of.i32)); + result[0].of.i32 == HfErrorToInt(expectedError), std::to_string(result[0].of.i32)); }; // hfs.getTxNestedField(locator); @@ -1739,8 +1738,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECTS( - result[0].of.i32 == static_cast(expectedError), - std::to_string(result[0].of.i32)); + result[0].of.i32 == HfErrorToInt(expectedError), std::to_string(result[0].of.i32)); }; // hfs.getCurrentLedgerObjNestedField(locator); // Locator for non-existent base field @@ -1999,8 +1997,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECTS( - result[0].of.i32 == static_cast(expectedError), - std::to_string(result[0].of.i32)); + result[0].of.i32 == HfErrorToInt(expectedError), std::to_string(result[0].of.i32)); }; // Error: base field not found @@ -2437,8 +2434,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECTS( - result[0].of.i32 == static_cast(expectedError), - std::to_string(result[0].of.i32)); + result[0].of.i32 == HfErrorToInt(expectedError), std::to_string(result[0].of.i32)); }; // Locator for sfMemos @@ -2505,8 +2501,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECTS( - result[0].of.i32 == static_cast(expectedError), - std::to_string(result[0].of.i32)); + result[0].of.i32 == HfErrorToInt(expectedError), std::to_string(result[0].of.i32)); }; // Locator for sfSignerEntries @@ -2637,8 +2632,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECTS( - result[0].of.i32 == static_cast(expectedError), - std::to_string(result[0].of.i32)); + result[0].of.i32 == HfErrorToInt(expectedError), std::to_string(result[0].of.i32)); }; // Error: non-array field @@ -5014,7 +5008,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(5), result(1); auto* trap = ww(floatFromMantExp_wrap, - &import.at("float_compare"), + &import.at("float_from_mant_exp"), params, result, 1ll, @@ -5034,7 +5028,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(5), result(1); auto* trap = ww(floatFromMantExp_wrap, - &import.at("float_compare"), + &import.at("float_from_mant_exp"), params, result, 1ll, @@ -5054,7 +5048,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(5), result(1); auto* trap = ww(floatFromMantExp_wrap, - &import.at("float_compare"), + &import.at("float_from_mant_exp"), params, result, 1ll, @@ -5074,7 +5068,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(5), result(1); auto* trap = ww(floatFromMantExp_wrap, - &import.at("float_compare"), + &import.at("float_from_mant_exp"), params, result, 1ll, @@ -5094,7 +5088,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(5), result(1); auto* trap = ww(floatFromMantExp_wrap, - &import.at("float_compare"), + &import.at("float_from_mant_exp"), params, result, 1ll, @@ -5114,7 +5108,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(5), result(1); auto* trap = ww(floatFromMantExp_wrap, - &import.at("float_compare"), + &import.at("float_from_mant_exp"), params, result, -1ll, @@ -5134,7 +5128,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(5), result(1); auto* trap = ww(floatFromMantExp_wrap, - &import.at("float_compare"), + &import.at("float_from_mant_exp"), params, result, 1ll, @@ -5154,7 +5148,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(5), result(1); auto* trap = ww(floatFromMantExp_wrap, - &import.at("float_compare"), + &import.at("float_from_mant_exp"), params, result, static_cast(STAmount::kMaxValue), @@ -5174,7 +5168,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(5), result(1); auto* trap = ww(floatFromMantExp_wrap, - &import.at("float_compare"), + &import.at("float_from_mant_exp"), params, result, 1ll, @@ -5194,7 +5188,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(5), result(1); auto* trap = ww(floatFromMantExp_wrap, - &import.at("float_compare"), + &import.at("float_from_mant_exp"), params, result, 10ll, @@ -5214,7 +5208,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(5), result(1); auto* trap = ww(floatFromMantExp_wrap, - &import.at("float_compare"), + &import.at("float_from_mant_exp"), params, result, 1ll, @@ -5249,7 +5243,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.floatCompare(Slice(), Slice()); WasmValVec params(4), result(1); - auto* trap = ww(floatCompare_wrap, &import.at("float_add"), params, result, 0, 0, 0, 0); + auto* trap = + ww(floatCompare_wrap, &import.at("float_compare"), params, result, 0, 0, 0, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -5261,8 +5256,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatCompare(makeSlice(floatInvalidZero), Slice()); WasmValVec params(4), result(1); vrt.setBytes(0, floatInvalidZero.data(), floatInvalidZero.size()); - auto* trap = - ww(floatCompare_wrap, &import.at("float_add"), params, result, 0, floatSize, 0, 0); + auto* trap = ww( + floatCompare_wrap, &import.at("float_compare"), params, result, 0, floatSize, 0, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -5277,7 +5272,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(floatSize, invalid.data(), invalid.size()); auto* trap = ww(floatCompare_wrap, - &import.at("float_add"), + &import.at("float_compare"), params, result, 0, @@ -5298,7 +5293,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(floatSize, floatIntZero.data(), floatIntZero.size()); auto* trap = ww(floatCompare_wrap, - &import.at("float_add"), + &import.at("float_compare"), params, result, 0, @@ -5317,7 +5312,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(floatSize, floatIntZero.data(), floatIntZero.size()); auto* trap = ww(floatCompare_wrap, - &import.at("float_add"), + &import.at("float_compare"), params, result, 0, @@ -5336,7 +5331,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(floatSize, float1.data(), float1.size()); auto* trap = ww(floatCompare_wrap, - &import.at("float_add"), + &import.at("float_compare"), params, result, 0, @@ -5370,7 +5365,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(7), result(1); auto* trap = ww(floatAdd_wrap, - &import.at("float_subtract"), + &import.at("float_add"), params, result, 0, @@ -5392,7 +5387,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(7), result(1); auto* trap = ww(floatAdd_wrap, - &import.at("float_subtract"), + &import.at("float_add"), params, result, 0, @@ -5416,7 +5411,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(floatSize, invalid.data(), invalid.size()); auto* trap = ww(floatAdd_wrap, - &import.at("float_subtract"), + &import.at("float_add"), params, result, 0, @@ -5441,7 +5436,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(floatSize, floatMaxExp.data(), floatMaxExp.size()); auto* trap = ww(floatAdd_wrap, - &import.at("float_subtract"), + &import.at("float_add"), params, result, 0, @@ -5465,7 +5460,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(floatSize, floatIntZero.data(), floatIntZero.size()); auto* trap = ww(floatAdd_wrap, - &import.at("float_subtract"), + &import.at("float_add"), params, result, 0, @@ -5490,7 +5485,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(floatSize, floatIntMin.data(), floatIntMin.size()); auto* trap = ww(floatAdd_wrap, - &import.at("float_subtract"), + &import.at("float_add"), params, result, 0, @@ -5529,7 +5524,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(7), result(1); auto* trap = ww(floatSubtract_wrap, - &import.at("float_from_mant_exp"), + &import.at("float_subtract"), params, result, 0, @@ -5551,7 +5546,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(7), result(1); auto* trap = ww(floatSubtract_wrap, - &import.at("float_from_mant_exp"), + &import.at("float_subtract"), params, result, 0, @@ -5575,7 +5570,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(floatSize, invalid.data(), invalid.size()); auto* trap = ww(floatSubtract_wrap, - &import.at("float_from_mant_exp"), + &import.at("float_subtract"), params, result, 0, @@ -5599,7 +5594,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(floatSize, floatMaxIOU.data(), floatMaxIOU.size()); auto* trap = ww(floatSubtract_wrap, - &import.at("float_from_mant_exp"), + &import.at("float_subtract"), params, result, 0, @@ -5623,7 +5618,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(floatSize, floatIntZero.data(), floatIntZero.size()); auto* trap = ww(floatSubtract_wrap, - &import.at("float_from_mant_exp"), + &import.at("float_subtract"), params, result, 0, @@ -5647,7 +5642,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(floatSize, float1.data(), float1.size()); auto* trap = ww(floatSubtract_wrap, - &import.at("float_from_mant_exp"), + &import.at("float_subtract"), params, result, 0, From 0dbe51c740790a195dfb5dd70e1c0fcf4f5cb6aa Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Tue, 2 Jun 2026 21:15:58 -0400 Subject: [PATCH 125/137] Cleanup and some refactoring (#7383) --- include/xrpl/protocol/Protocol.h | 4 +- include/xrpl/tx/wasm/HostFunc.h | 200 +++-- include/xrpl/tx/wasm/HostFuncImpl.h | 15 +- include/xrpl/tx/wasm/HostFuncWrapper.h | 2 +- include/xrpl/tx/wasm/WasmCommon.h | 160 ++++ .../{ParamsHelper.h => WasmImportsHelper.h} | 146 +--- include/xrpl/tx/wasm/WasmVM.h | 1 + include/xrpl/tx/wasm/WasmiVM.h | 131 +++- src/libxrpl/tx/wasm/HostFuncImpl.cpp | 8 +- src/libxrpl/tx/wasm/HostFuncImplFloat.cpp | 2 +- src/libxrpl/tx/wasm/HostFuncImplGetter.cpp | 13 +- src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp | 3 +- .../tx/wasm/HostFuncImplLedgerHeader.cpp | 3 +- src/libxrpl/tx/wasm/HostFuncImplNFT.cpp | 3 +- src/libxrpl/tx/wasm/HostFuncWrapper.cpp | 682 +++++++----------- src/libxrpl/tx/wasm/WasmVM.cpp | 11 +- src/libxrpl/tx/wasm/WasmiVM.cpp | 242 ++----- src/test/app/HostFuncImpl_test.cpp | 177 ++--- src/test/app/TestHostFunctions.h | 115 +-- src/test/app/Wasm_test.cpp | 55 +- 20 files changed, 850 insertions(+), 1123 deletions(-) create mode 100644 include/xrpl/tx/wasm/WasmCommon.h rename include/xrpl/tx/wasm/{ParamsHelper.h => WasmImportsHelper.h} (50%) diff --git a/include/xrpl/protocol/Protocol.h b/include/xrpl/protocol/Protocol.h index 72b3b8d570..512998081e 100644 --- a/include/xrpl/protocol/Protocol.h +++ b/include/xrpl/protocol/Protocol.h @@ -252,10 +252,10 @@ constexpr std::uint8_t kVaultMaximumIouScale = 18; constexpr std::uint8_t kMaxAssetCheckDepth = 5; /** Maximum length of a Data field in Escrow object that can be updated by WASM code. */ -std::size_t constexpr maxWasmDataLength = 4 * 1024; // 4KB +constexpr std::size_t kMaxWasmDataLength = 4 * 1024; // 4KB /** Maximum length of parameters passed from WASM code to host functions. */ -std::size_t constexpr maxWasmParamLength = 1024; // 1KB +constexpr std::size_t kMaxWasmParamLength = 1024; // 1KB /** A ledger index. */ using LedgerIndex = std::uint32_t; diff --git a/include/xrpl/tx/wasm/HostFunc.h b/include/xrpl/tx/wasm/HostFunc.h index 7c5eb18b0c..3fc974423c 100644 --- a/include/xrpl/tx/wasm/HostFunc.h +++ b/include/xrpl/tx/wasm/HostFunc.h @@ -8,43 +8,10 @@ #include #include #include -#include +#include namespace xrpl { -enum class HostFunctionError : int32_t { - INTERNAL = -1, - FieldNotFound = -2, - BufferTooSmall = -3, - NoArray = -4, - NotLeafField = -5, - LocatorMalformed = -6, - SlotOutRange = -7, - SlotsFull = -8, - EmptySlot = -9, - LedgerObjNotFound = -10, - DECODING = -11, - DataFieldTooLarge = -12, - PointerOutOfBounds = -13, - NoMemExported = -14, - InvalidParams = -15, - InvalidAccount = -16, - InvalidField = -17, - IndexOutOfBounds = -18, - FloatInputMalformed = -19, - FloatComputationError = -20, - NoRuntime = -21, - OutOfGas = -22, -}; - -using FloatPair = std::pair; - -inline int32_t -HfErrorToInt(HostFunctionError e) -{ - return static_cast(e); -} - namespace wasm_float { std::string @@ -95,32 +62,45 @@ floatPowerImpl(Slice const& x, int32_t n, int32_t mode); } // namespace wasm_float // Intended to work only through wasm runtime. Don't call them directly, except with unit tests -struct HostFunctions +class HostFunctions { - beast::Journal j; +protected: + RTOptRef rt_; + beast::Journal j_; - HostFunctions(beast::Journal j = beast::Journal{beast::Journal::getNullSink()}) : j(j) +public: + HostFunctions(beast::Journal j = beast::Journal{beast::Journal::getNullSink()}) : j_(j) { } - // LCOV_EXCL_START - virtual void - setRT(void*) + void + setRT(WasmRuntimeWrapper& rt) { + rt_ = rt; } - [[nodiscard]] virtual void* + void + resetRT() + { + rt_ = std::nullopt; + } + + [[nodiscard]] WasmRuntimeWrapper* getRT() const { - return nullptr; + if (!rt_) + return nullptr; // LCOV_EXCL_LINE + return &rt_->get(); } [[nodiscard]] beast::Journal getJournal() const { - return j; + return j_; } + // LCOV_EXCL_START + [[nodiscard]] virtual bool checkSelf() const { @@ -130,402 +110,404 @@ struct HostFunctions virtual Expected getLedgerSqn() const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected getParentLedgerTime() const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected getParentLedgerHash() const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected getBaseFee() const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected isAmendmentEnabled(uint256 const& amendmentId) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected isAmendmentEnabled(std::string_view const& amendmentName) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected cacheLedgerObj(uint256 const& objId, int32_t cacheIdx) { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected getTxField(SField const& fname) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected getCurrentLedgerObjField(SField const& fname) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected getLedgerObjField(int32_t cacheIdx, SField const& fname) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected getTxNestedField(Slice const& locator) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected getCurrentLedgerObjNestedField(Slice const& locator) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected getLedgerObjNestedField(int32_t cacheIdx, Slice const& locator) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected getTxArrayLen(SField const& fname) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected getCurrentLedgerObjArrayLen(SField const& fname) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected getLedgerObjArrayLen(int32_t cacheIdx, SField const& fname) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected getTxNestedArrayLen(Slice const& locator) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected getCurrentLedgerObjNestedArrayLen(Slice const& locator) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected getLedgerObjNestedArrayLen(int32_t cacheIdx, Slice const& locator) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected updateData(Slice const& data) { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected checkSignature(Slice const& message, Slice const& signature, Slice const& pubkey) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected computeSha512HalfHash(Slice const& data) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected accountKeylet(AccountID const& account) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected ammKeylet(Asset const& issue1, Asset const& issue2) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected checkKeylet(AccountID const& account, std::uint32_t seq) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected didKeylet(AccountID const& account) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected delegateKeylet(AccountID const& account, AccountID const& authorize) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected depositPreauthKeylet(AccountID const& account, AccountID const& authorize) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected escrowKeylet(AccountID const& account, std::uint32_t seq) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected lineKeylet(AccountID const& account1, AccountID const& account2, Currency const& currency) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected mptIssuanceKeylet(AccountID const& issuer, std::uint32_t seq) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected mptokenKeylet(MPTID const& mptid, AccountID const& holder) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected nftOfferKeylet(AccountID const& account, std::uint32_t seq) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected offerKeylet(AccountID const& account, std::uint32_t seq) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected oracleKeylet(AccountID const& account, std::uint32_t docId) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected paychanKeylet(AccountID const& account, AccountID const& destination, std::uint32_t seq) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected permissionedDomainKeylet(AccountID const& account, std::uint32_t seq) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected signersKeylet(AccountID const& account) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected ticketKeylet(AccountID const& account, std::uint32_t seq) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected vaultKeylet(AccountID const& account, std::uint32_t seq) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected getNFT(AccountID const& account, uint256 const& nftId) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected getNFTIssuer(uint256 const& nftId) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected getNFTTaxon(uint256 const& nftId) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected getNFTFlags(uint256 const& nftId) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected getNFTTransferFee(uint256 const& nftId) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected getNFTSerial(uint256 const& nftId) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected trace(std::string_view const& msg, Slice const& data, bool asHex) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected traceNum(std::string_view const& msg, int64_t data) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected traceAccount(std::string_view const& msg, AccountID const& account) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected traceFloat(std::string_view const& msg, Slice const& data) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected traceAmount(std::string_view const& msg, STAmount const& amount) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected floatFromInt(int64_t x, int32_t mode) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected floatFromUint(uint64_t x, int32_t mode) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected floatFromSTAmount(STAmount const& x, int32_t mode) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected floatFromSTNumber(STNumber const& x, int32_t mode) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected floatToInt(Slice const& x, int32_t mode) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected floatToMantExp(Slice const& x) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected floatFromMantExp(int64_t mantissa, int32_t exponent, int32_t mode) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected floatCompare(Slice const& x, Slice const& y) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected floatAdd(Slice const& x, Slice const& y, int32_t mode) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected floatSubtract(Slice const& x, Slice const& y, int32_t mode) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected floatMultiply(Slice const& x, Slice const& y, int32_t mode) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected floatDivide(Slice const& x, Slice const& y, int32_t mode) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected floatRoot(Slice const& x, int32_t n, int32_t mode) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual Expected floatPower(Slice const& x, int32_t n, int32_t mode) const { - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } virtual ~HostFunctions() = default; // LCOV_EXCL_STOP }; +using HFRef = std::reference_wrapper; + } // namespace xrpl diff --git a/include/xrpl/tx/wasm/HostFuncImpl.h b/include/xrpl/tx/wasm/HostFuncImpl.h index 689ce85a59..6741246d08 100644 --- a/include/xrpl/tx/wasm/HostFuncImpl.h +++ b/include/xrpl/tx/wasm/HostFuncImpl.h @@ -18,8 +18,7 @@ class WasmHostFunctionsImpl : public HostFunctions std::optional data_; - void* rt_ = nullptr; - +public: Expected, HostFunctionError> getCurrentLedgerObj() const { @@ -65,18 +64,6 @@ public: { } - void - setRT(void* rt) override - { - rt_ = rt; - } - - void* - getRT() const override - { - return rt_; - } - bool checkSelf() const override { diff --git a/include/xrpl/tx/wasm/HostFuncWrapper.h b/include/xrpl/tx/wasm/HostFuncWrapper.h index 313fe0b27f..d917c56df9 100644 --- a/include/xrpl/tx/wasm/HostFuncWrapper.h +++ b/include/xrpl/tx/wasm/HostFuncWrapper.h @@ -1,6 +1,6 @@ #pragma once -#include +#include #include diff --git a/include/xrpl/tx/wasm/WasmCommon.h b/include/xrpl/tx/wasm/WasmCommon.h new file mode 100644 index 0000000000..5e1b47b982 --- /dev/null +++ b/include/xrpl/tx/wasm/WasmCommon.h @@ -0,0 +1,160 @@ +#pragma once + +#include + +#include +#include +#include +#include + +namespace xrpl { + +using Bytes = std::vector; +using Hash = xrpl::uint256; +using FloatPair = std::pair; + +enum class HostFunctionError : int32_t { + Internal = -1, + FieldNotFound = -2, + BufferTooSmall = -3, + NoArray = -4, + NotLeafField = -5, + LocatorMalformed = -6, + SlotOutRange = -7, + SlotsFull = -8, + EmptySlot = -9, + LedgerObjNotFound = -10, + Decoding = -11, + DataFieldTooLarge = -12, + PointerOutOfBounds = -13, + NoMemExported = -14, + InvalidParams = -15, + InvalidAccount = -16, + InvalidField = -17, + IndexOutOfBounds = -18, + FloatInputMalformed = -19, + FloatComputationError = -20, + NoRuntime = -21, + OutOfGas = -22, + OutOfTransferLimit = -23, +}; + +enum class WasmTypes { WtI32, WtI64 }; + +struct Wmem +{ + std::uint8_t* p = nullptr; + std::size_t s = 0; + + Wmem() = default; + Wmem(void* ptr, std::size_t size) : p(reinterpret_cast(ptr)), s(size) + { + } +}; + +template +struct WasmResult +{ + T result; + int64_t cost; +}; +using EscrowResult = WasmResult; + +class WasmRuntimeWrapper +{ +public: + virtual ~WasmRuntimeWrapper() = default; + + virtual Wmem + getMem() = 0; + + virtual std::int64_t + getGas() = 0; + + virtual std::int64_t + setGas(std::int64_t gas) = 0; +}; +using RTOptRef = std::optional>; + +struct WasmParam +{ + // We are not supporting float/double + + WasmTypes type = WasmTypes::WtI32; + union + { + std::int32_t i32; + std::int64_t i64 = 0; + } of; +}; + +template +inline void +wasmParamsHlp(std::vector& v, std::int32_t p, Types&&... args) +{ + v.push_back({.type = WasmTypes::WtI32, .of = {.i32 = p}}); + wasmParamsHlp(v, std::forward(args)...); +} + +template +inline void +wasmParamsHlp(std::vector& v, std::int64_t p, Types&&... args) +{ + v.push_back({.type = WasmTypes::WtI64, .of = {.i64 = p}}); + wasmParamsHlp(v, std::forward(args)...); +} + +inline void +wasmParamsHlp(std::vector& v) +{ + return; +} + +template +inline std::vector +wasmParams(Types&&... args) +{ + std::vector v; + v.reserve(sizeof...(args)); + wasmParamsHlp(v, std::forward(args)...); + return v; +} + +template +constexpr T +adjustWasmEndianessHlp(T x) +{ + static_assert(std::is_integral_v, "Only integral types"); + if constexpr (Size > 1) + { + using U = std::make_unsigned_t; + U u = static_cast(x); + U const low = (u & 0xFF) << ((Size - 1) << 3); + u = adjustWasmEndianessHlp(u >> 8); + return static_cast(low | u); + } + + return x; +} + +template +constexpr T +adjustWasmEndianess(T x) +{ + // LCOV_EXCL_START + static_assert(std::is_integral_v, "Only integral types"); + if constexpr (std::endian::native == std::endian::big) + { + return adjustWasmEndianessHlp(x); + } + return x; + // LCOV_EXCL_STOP +} + +constexpr int32_t +hfErrorToInt(HostFunctionError e) +{ + return static_cast(e); +} + +} // namespace xrpl diff --git a/include/xrpl/tx/wasm/ParamsHelper.h b/include/xrpl/tx/wasm/WasmImportsHelper.h similarity index 50% rename from include/xrpl/tx/wasm/ParamsHelper.h rename to include/xrpl/tx/wasm/WasmImportsHelper.h index 266b1dd334..18ceb52973 100644 --- a/include/xrpl/tx/wasm/ParamsHelper.h +++ b/include/xrpl/tx/wasm/WasmImportsHelper.h @@ -1,84 +1,33 @@ #pragma once #include +#include #include #include #include #include -#include -#include -#include -#include -#include -#include -#include -#include +#include namespace bft = boost::function_types; namespace xrpl { -template -inline constexpr bool wasmDependentFalse = false; - -using Bytes = std::vector; -using Hash = xrpl::uint256; - -struct Wmem -{ - std::uint8_t* p = nullptr; - std::size_t s = 0; -}; - -template -struct WasmResult -{ - T result; - int64_t cost; -}; -using EscrowResult = WasmResult; - -struct WasmRuntimeWrapper -{ - virtual ~WasmRuntimeWrapper() = default; - - virtual Wmem - getMem() = 0; - - virtual std::int64_t - getGas() = 0; - - virtual std::int64_t - setGas(std::int64_t gas) = 0; -}; - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -enum class WasmTypes { WtI32, WtI64 }; - struct WasmImportFunc { std::string_view name; std::optional result; std::vector params; - // void* udata = nullptr; // wasm_func_callback_with_env_t void* wrap = nullptr; uint32_t gas = 0; }; -using WasmUserData = std::pair; +using WasmUserData = std::pair; +// string - import function name using ImportVec = std::unordered_map; -#define WASM_IMPORT_FUNC(v, f, ...) \ - WasmImpFunc(v, #f, reinterpret_cast(&f##_wrap), ##__VA_ARGS__) - -// n - string literal name, must have static lifetime -#define WASM_IMPORT_FUNC2(v, f, n, ...) \ - WasmImpFunc(v, n, reinterpret_cast(&f##_wrap), ##__VA_ARGS__) - template void WasmImpArgs(WasmImportFunc& e) @@ -108,6 +57,9 @@ WasmImpArgs(WasmImportFunc& e) return; } +template +inline constexpr bool wasmDependentFalse = false; + template void WasmImpRet(WasmImportFunc& e) @@ -154,7 +106,7 @@ WasmImpFunc( ImportVec& v, std::string_view impName, void* fWrap, - void* data = nullptr, + HostFunctions& hf, uint32_t gas = 0) { WasmImportFunc e; @@ -162,84 +114,14 @@ WasmImpFunc( e.wrap = fWrap; e.gas = gas; WasmImpFuncHelper(e); - v.emplace(impName, std::make_pair(data, std::move(e))); + v.emplace(impName, std::make_pair(HFRef(hf), std::move(e))); } -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#define WASM_IMPORT_FUNC(v, f, ...) \ + WasmImpFunc(v, #f, reinterpret_cast(&f##_wrap), ##__VA_ARGS__) -struct WasmParam -{ - // We are not supporting float/double - - WasmTypes type = WasmTypes::WtI32; - union - { - std::int32_t i32; - std::int64_t i64 = 0; - } of; -}; - -template -inline void -wasmParamsHlp(std::vector& v, std::int32_t p, Types&&... args) -{ - v.push_back({.type = WasmTypes::WtI32, .of = {.i32 = p}}); - wasmParamsHlp(v, std::forward(args)...); -} - -template -inline void -wasmParamsHlp(std::vector& v, std::int64_t p, Types&&... args) -{ - v.push_back({.type = WasmTypes::WtI64, .of = {.i64 = p}}); - wasmParamsHlp(v, std::forward(args)...); -} - -inline void -wasmParamsHlp(std::vector& v) -{ - return; -} - -template -inline std::vector -wasmParams(Types&&... args) -{ - std::vector v; - v.reserve(sizeof...(args)); - wasmParamsHlp(v, std::forward(args)...); - return v; -} - -template -constexpr T -adjustWasmEndianessHlp(T x) -{ - static_assert(std::is_integral_v, "Only integral types"); - if constexpr (Size > 1) - { - using U = std::make_unsigned_t; - U u = static_cast(x); - U const low = (u & 0xFF) << ((Size - 1) << 3); - u = adjustWasmEndianessHlp(u >> 8); - return static_cast(low | u); - } - - return x; -} - -template -constexpr T -adjustWasmEndianess(T x) -{ - // LCOV_EXCL_START - static_assert(std::is_integral_v, "Only integral types"); - if constexpr (std::endian::native == std::endian::big) - { - return adjustWasmEndianessHlp(x); - } - return x; - // LCOV_EXCL_STOP -} +// n - string literal name, must have static lifetime +#define WASM_IMPORT_FUNC2(v, f, n, ...) \ + WasmImpFunc(v, n, reinterpret_cast(&f##_wrap), ##__VA_ARGS__) } // namespace xrpl diff --git a/include/xrpl/tx/wasm/WasmVM.h b/include/xrpl/tx/wasm/WasmVM.h index 761ed4c618..ac3d987d1d 100644 --- a/include/xrpl/tx/wasm/WasmVM.h +++ b/include/xrpl/tx/wasm/WasmVM.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include diff --git a/include/xrpl/tx/wasm/WasmiVM.h b/include/xrpl/tx/wasm/WasmiVM.h index ef3c33b164..d31c096b15 100644 --- a/include/xrpl/tx/wasm/WasmiVM.h +++ b/include/xrpl/tx/wasm/WasmiVM.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include @@ -139,13 +140,13 @@ using StorePtr = std::unique_ptr; using FuncInfo = std::pair; -struct InstanceWrapper +class InstanceWrapper { - wasm_store_t* store = nullptr; - WasmExternVec exports; - mutable int memIdx = -1; - InstancePtr instance; - beast::Journal j = beast::Journal(beast::Journal::getNullSink()); + wasm_store_t* store_ = nullptr; + WasmExternVec exports_; + mutable int memIdx_ = -1; + InstancePtr instance_; + beast::Journal j_ = beast::Journal(beast::Journal::getNullSink()); private: static InstancePtr @@ -157,13 +158,19 @@ private: beast::Journal j); public: - InstanceWrapper(); + InstanceWrapper() : instance_(nullptr, &wasm_instance_delete) {}; InstanceWrapper(InstanceWrapper const&) = delete; - InstanceWrapper(InstanceWrapper&& o); + InstanceWrapper(InstanceWrapper&& o) : instance_(nullptr, &wasm_instance_delete) + { + *this = std::move(o); // LCOV_EXCL_LINE + } - InstanceWrapper(StorePtr& s, ModulePtr& m, WasmExternVec const& imports, beast::Journal j); + InstanceWrapper(StorePtr& s, ModulePtr& m, WasmExternVec const& imports, beast::Journal j) + : store_(s.get()), instance_(init(s, m, exports_, imports, j)), j_(j) + { + } InstanceWrapper& operator=(InstanceWrapper&& o); @@ -171,7 +178,10 @@ public: InstanceWrapper& operator=(InstanceWrapper const&) = delete; - operator bool() const; + operator bool() const + { + return static_cast(instance_); + } FuncInfo getFunc(std::string_view funcName, WasmExporttypeVec const& exportTypes) const; @@ -186,20 +196,25 @@ public: setGas(std::int64_t) const; }; -struct ModuleWrapper +class ModuleWrapper { - ModulePtr module; - InstanceWrapper instanceWrap; - WasmExporttypeVec exportTypes; - beast::Journal j = beast::Journal(beast::Journal::getNullSink()); - -private: - static ModulePtr - init(StorePtr& s, Bytes const& wasmBin, beast::Journal j); + ModulePtr module_; + InstanceWrapper instanceWrap_; + WasmExporttypeVec exportTypes_; + beast::Journal j_ = beast::Journal(beast::Journal::getNullSink()); public: - ModuleWrapper(); - ModuleWrapper(ModuleWrapper&& o); + // LCOV_EXCL_START + ModuleWrapper() : module_(nullptr, &wasm_module_delete) + { + } + + ModuleWrapper(ModuleWrapper&& o) : module_(nullptr, &wasm_module_delete) + { + *this = std::move(o); + } + // LCOV_EXCL_STOP + ModuleWrapper& operator=(ModuleWrapper&& o); ModuleWrapper( @@ -210,27 +225,55 @@ public: beast::Journal j); ~ModuleWrapper() = default; - operator bool() const; + operator bool() const + { + return instanceWrap_; + } FuncInfo - getFunc(std::string_view funcName) const; + getFunc(std::string_view funcName) const + { + return instanceWrap_.getFunc(funcName, exportTypes_); + } wasm_functype_t* getFuncType(std::string_view funcName) const; Wmem - getMem() const; + getMem() const + { + return instanceWrap_.getMem(); + } InstanceWrapper& - getInstance(int i = 0); + getInstance(int i = 0) + { + return instanceWrap_; + } + + InstanceWrapper const& + getInstance(int i = 0) const + { + return instanceWrap_; + } int - addInstance(StorePtr& s, WasmExternVec const& imports); + addInstance(StorePtr& s, WasmExternVec const& imports) + { + instanceWrap_ = {s, module_, imports, j_}; + return 0; + } std::int64_t - getGas() const; + getGas() const + { + return instanceWrap_ ? instanceWrap_.getGas() : -1; + } private: + static ModulePtr + init(StorePtr& s, Bytes const& wasmBin, beast::Journal j); + WasmExternVec buildImports(StorePtr& s, ImportVec const& imports) const; }; @@ -245,7 +288,10 @@ class WasmiEngine std::mutex m_; // 1 instance mutex public: - WasmiEngine(); + WasmiEngine() : engine_(init()), store_(nullptr, &wasm_store_delete) + { + } + ~WasmiEngine() = default; static EnginePtr @@ -270,21 +316,37 @@ public: beast::Journal j); [[nodiscard]] std::int64_t - getGas() const; + getGas() const + { + return moduleWrap_ ? moduleWrap_->getGas() : -1; // LCOV_EXCL_LINE + } // Host functions helper functionality wasm_trap_t* newTrap(std::string const& msg); + // LCOV_EXCL_START [[nodiscard]] beast::Journal - getJournal() const; + getJournal() const + { + return j_; + } + // LCOV_EXCL_STOP private: [[nodiscard]] InstanceWrapper& - getRT(int m = 0, int i = 0) const; + getRT(int m = 0, int i = 0) const + { + if (!moduleWrap_) + Throw("no module"); + return moduleWrap_->getInstance(i); + } [[nodiscard]] Wmem - getMem() const; + getMem() const + { + return moduleWrap_ ? moduleWrap_->getMem() : Wmem(); + } Expected, TER> runHlp( @@ -319,7 +381,10 @@ private: makeModule(Bytes const& wasmCode, WasmExternVec const& imports = {}); [[nodiscard]] FuncInfo - getFunc(std::string_view funcName) const; + getFunc(std::string_view funcName) const + { + return moduleWrap_->getFunc(funcName); + } static std::vector convertParams(std::vector const& params); diff --git a/src/libxrpl/tx/wasm/HostFuncImpl.cpp b/src/libxrpl/tx/wasm/HostFuncImpl.cpp index dbcd9d8e78..15ffeba68b 100644 --- a/src/libxrpl/tx/wasm/HostFuncImpl.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImpl.cpp @@ -5,8 +5,7 @@ #include #include #include -#include -#include +#include #include @@ -19,10 +18,9 @@ namespace xrpl { Expected WasmHostFunctionsImpl::updateData(Slice const& data) { - if (data.size() > maxWasmDataLength) - { + if (data.size() > kMaxWasmDataLength) return Unexpected(HostFunctionError::DataFieldTooLarge); - } + data_ = Bytes(data.begin(), data.end()); return data_->size(); } diff --git a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp index c950aed947..dda1a09296 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include diff --git a/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp index a9aefd885e..3f94587dc4 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp @@ -10,9 +10,8 @@ #include #include #include -#include #include -#include +#include #include #include @@ -119,16 +118,12 @@ static Expected getAnyFieldData(FieldValue const& variantObj) { if (STBase const* const* obj = std::get_if(&variantObj)) - { return getAnyFieldData(*obj); - } if (uint256 const* const* u = std::get_if(&variantObj)) - { return Bytes((*u)->begin(), (*u)->end()); - } - return Unexpected(HostFunctionError::INTERNAL); // LCOV_EXCL_LINE + return Unexpected(HostFunctionError::Internal); // LCOV_EXCL_LINE } static inline bool @@ -144,8 +139,8 @@ locateField(STObject const& obj, Slice const& locator) if (locator.empty() || ((locator.size() & 3) != 0u)) // must be multiple of 4 return Unexpected(HostFunctionError::LocatorMalformed); - static_assert(maxWasmParamLength % sizeof(int32_t) == 0); - int32_t locBuf[maxWasmParamLength / sizeof(int32_t)]; + static_assert(kMaxWasmParamLength % sizeof(int32_t) == 0); + int32_t locBuf[kMaxWasmParamLength / sizeof(int32_t)]; int32_t const* locPtr = &locBuf[0]; int32_t const locSize = locator.size() / sizeof(int32_t); diff --git a/src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp b/src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp index 1c589dee09..5d1d14bfac 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp @@ -6,9 +6,8 @@ #include #include #include -#include #include -#include +#include #include diff --git a/src/libxrpl/tx/wasm/HostFuncImplLedgerHeader.cpp b/src/libxrpl/tx/wasm/HostFuncImplLedgerHeader.cpp index 91092ba8d0..837112389a 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplLedgerHeader.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplLedgerHeader.cpp @@ -1,9 +1,8 @@ #include #include #include -#include #include -#include +#include #include #include diff --git a/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp b/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp index b312ab7098..30d6dd5eff 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp @@ -5,9 +5,8 @@ #include #include #include -#include #include -#include +#include #include diff --git a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp index 1b10608667..a8a35fb8d7 100644 --- a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp +++ b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp @@ -18,7 +18,8 @@ #include #include #include -#include +#include +#include #include #include @@ -38,6 +39,51 @@ namespace xrpl { using SFieldCRef = std::reference_wrapper; +static inline HostFunctions* +getHF(void* env) +{ + auto const* udata = reinterpret_cast(env); + HostFunctions* hf = &udata->first.get(); // NOLINT + return hf; +} + +static inline Expected +checkGas(void* env) +{ + auto const* udata = reinterpret_cast(env); + HostFunctions const* hf = &udata->first.get(); + auto* rt = hf->getRT(); + + if (rt == nullptr) + { + wasm_trap_t* trap = reinterpret_cast( // NOLINT + WasmEngine::instance().newTrap("hf no runtime")); // LCOV_EXCL_LINE + return Unexpected(trap); // LCOV_EXCL_LINE + } + + int64_t const gas = rt->getGas(); + WasmImportFunc const& impFunc = udata->second; + int64_t const x = gas >= impFunc.gas ? gas - impFunc.gas : 0; + + if (rt->setGas(x) < 0) + { + wasm_trap_t* trap = reinterpret_cast( // NOLINT + WasmEngine::instance().newTrap("can't set gas")); // LCOV_EXCL_LINE + return Unexpected(trap); // LCOV_EXCL_LINE + } + + if (gas < impFunc.gas) + { + wasm_trap_t* const trap = // NOLINT + reinterpret_cast(WasmEngine::instance().newTrap("hf out of gas")); + return Unexpected(trap); + } + + return x; +} + +//---------------------------------------------------------------------------------------------------------------------- + static int32_t setData( WasmRuntimeWrapper* runtime, @@ -50,48 +96,78 @@ setData( return 0; // LCOV_EXCL_LINE if (dst < 0 || dstSize < 0 || (src == nullptr) || srcSize < 0) - return HfErrorToInt(HostFunctionError::InvalidParams); + return hfErrorToInt(HostFunctionError::InvalidParams); - if (srcSize > maxWasmDataLength) - return HfErrorToInt(HostFunctionError::DataFieldTooLarge); + if (srcSize > kMaxWasmDataLength) + return hfErrorToInt(HostFunctionError::DataFieldTooLarge); auto const memory = (runtime != nullptr) ? runtime->getMem() : Wmem(); // LCOV_EXCL_START if (memory.s == 0u) - return HfErrorToInt(HostFunctionError::NoMemExported); + return hfErrorToInt(HostFunctionError::NoMemExported); // LCOV_EXCL_STOP - if ((int64_t)dst + dstSize > memory.s) - return HfErrorToInt(HostFunctionError::PointerOutOfBounds); + if (std::cmp_greater((int64_t)dst + dstSize, memory.s)) + return hfErrorToInt(HostFunctionError::PointerOutOfBounds); if (srcSize > dstSize) - return HfErrorToInt(HostFunctionError::BufferTooSmall); + return hfErrorToInt(HostFunctionError::BufferTooSmall); memcpy(memory.p + dst, src, srcSize); return srcSize; } -template +static Expected +getDataSlice( + WasmRuntimeWrapper* runtime, + wasm_val_vec_t const* params, + int32_t& i, + bool isUpdate = false) +{ + int64_t const ptr = params->data[i].of.i32; + int64_t const size = params->data[i + 1].of.i32; + i += 2; + if (ptr < 0 || size < 0) + return Unexpected(HostFunctionError::InvalidParams); + + if (size == 0) + return Slice(); + + if (size > (isUpdate ? kMaxWasmDataLength : kMaxWasmParamLength)) + return Unexpected(HostFunctionError::DataFieldTooLarge); + + auto const memory = runtime != nullptr ? runtime->getMem() : Wmem(); + // LCOV_EXCL_START + if (memory.s == 0u) + return Unexpected(HostFunctionError::NoMemExported); + // LCOV_EXCL_STOP + + if (std::cmp_greater(ptr + size, memory.s)) + return Unexpected(HostFunctionError::PointerOutOfBounds); + + Slice data(memory.p + ptr, size); + return data; +} + static Expected -getDataInt32(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataInt32(WasmRuntimeWrapper const*, wasm_val_vec_t const* params, int32_t& i) { auto const result = params->data[i].of.i32; i++; return result; } -template static Expected -getDataInt64(IW const* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataInt64(WasmRuntimeWrapper const*, wasm_val_vec_t const* params, int32_t& i) { auto const result = params->data[i].of.i64; i++; return result; } -template +template static Expected -getDataUnsigned(IW* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataUnsigned(WasmRuntimeWrapper* runtime, wasm_val_vec_t const* params, int32_t& i) { static_assert(std::is_unsigned_v); auto const r = getDataSlice(runtime, params, i); @@ -115,125 +191,75 @@ getDataUnsigned(IW* runtime, wasm_val_vec_t const* params, int32_t& i) return x; } -template static Expected -getDataUInt32(IW* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataUInt32(WasmRuntimeWrapper* runtime, wasm_val_vec_t const* params, int32_t& i) { return getDataUnsigned(runtime, params, i); } -template static Expected -getDataUInt64(IW* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataUInt64(WasmRuntimeWrapper* runtime, wasm_val_vec_t const* params, int32_t& i) { return getDataUnsigned(runtime, params, i); } -template static Expected -getDataSField(IW* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataSField(WasmRuntimeWrapper* runtime, wasm_val_vec_t const* params, int32_t& i) { auto const& m = SField::getKnownCodeToField(); auto const it = m.find(params->data[i].of.i32); i++; if (it == m.end()) - { return Unexpected(HostFunctionError::InvalidField); - } + return *it->second; } -template -static Expected -getDataSlice(IW* runtime, wasm_val_vec_t const* params, int32_t& i, bool isUpdate = false) -{ - int64_t const ptr = params->data[i].of.i32; - int64_t const size = params->data[i + 1].of.i32; - i += 2; - if (ptr < 0 || size < 0) - return Unexpected(HostFunctionError::InvalidParams); - - if (!size) - return Slice(); - - if (size > (isUpdate ? maxWasmDataLength : maxWasmParamLength)) - return Unexpected(HostFunctionError::DataFieldTooLarge); - - auto const memory = runtime ? runtime->getMem() : Wmem(); - // LCOV_EXCL_START - if (!memory.s) - return Unexpected(HostFunctionError::NoMemExported); - // LCOV_EXCL_STOP - - if (ptr + size > memory.s) - return Unexpected(HostFunctionError::PointerOutOfBounds); - - Slice data(memory.p + ptr, size); - return data; -} - -template static Expected -getDataUInt256(IW* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataUInt256(WasmRuntimeWrapper* runtime, wasm_val_vec_t const* params, int32_t& i) { auto const slice = getDataSlice(runtime, params, i); if (!slice) - { return Unexpected(slice.error()); - } if (slice->size() != uint256::size()) - { return Unexpected(HostFunctionError::InvalidParams); - } + return uint256::fromVoid(slice->data()); } -template static Expected -getDataAccountID(IW* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataAccountID(WasmRuntimeWrapper* runtime, wasm_val_vec_t const* params, int32_t& i) { auto const slice = getDataSlice(runtime, params, i); if (!slice) - { return Unexpected(slice.error()); - } if (slice->size() != AccountID::size()) - { return Unexpected(HostFunctionError::InvalidParams); - } return AccountID::fromVoid(slice->data()); } -template static Expected -getDataCurrency(IW* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataCurrency(WasmRuntimeWrapper* runtime, wasm_val_vec_t const* params, int32_t& i) { auto const slice = getDataSlice(runtime, params, i); if (!slice) - { return Unexpected(slice.error()); - } if (slice->size() != Currency::size()) - { return Unexpected(HostFunctionError::InvalidParams); - } return Currency::fromVoid(slice->data()); } -template static Expected -getDataAsset(IW* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataAsset(WasmRuntimeWrapper* runtime, wasm_val_vec_t const* params, int32_t& i) { auto const slice = getDataSlice(runtime, params, i); if (!slice) - { return Unexpected(slice.error()); - } if (slice->size() == MPTID::size()) { @@ -247,6 +273,7 @@ getDataAsset(IW* runtime, wasm_val_vec_t const* params, int32_t& i) auto const issue = Issue{currency, xrpAccount()}; if (!issue.native()) return Unexpected(HostFunctionError::InvalidParams); + return Asset{issue}; } @@ -258,23 +285,24 @@ getDataAsset(IW* runtime, wasm_val_vec_t const* params, int32_t& i) if (issue.native()) return Unexpected(HostFunctionError::InvalidParams); + return Asset{issue}; } return Unexpected(HostFunctionError::InvalidParams); } -template static Expected -getDataString(IW* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataString(WasmRuntimeWrapper* runtime, wasm_val_vec_t const* params, int32_t& i) { auto const slice = getDataSlice(runtime, params, i); if (!slice) return Unexpected(slice.error()); + return std::string_view(reinterpret_cast(slice->data()), slice->size()); } -static std::nullptr_t +static inline std::nullptr_t hfResult(wasm_val_vec_t* results, int32_t value) { results->data[0] = WASM_I32_VAL(value); @@ -282,10 +310,10 @@ hfResult(wasm_val_vec_t* results, int32_t value) return nullptr; } -static std::nullptr_t +static inline std::nullptr_t hfResult(wasm_val_vec_t* results, HostFunctionError value) { - results->data[0] = WASM_I32_VAL(HfErrorToInt(value)); + results->data[0] = WASM_I32_VAL(hfErrorToInt(value)); // results->size = 1; return nullptr; } @@ -300,77 +328,70 @@ returnResult( int32_t index) { if (!res) - { return hfResult(results, res.error()); - } - using t = std::decay_t; - if constexpr (std::is_same_v) + if constexpr (std::is_same_v) { if (index < 0 || index + 1 >= params->size) - return hfResult(results, HostFunctionError::INTERNAL); // LCOV_EXCL_LINE + return hfResult(results, HostFunctionError::Internal); // LCOV_EXCL_LINE - return hfResult( - results, - setData( - runtime, - params->data[index].of.i32, - params->data[index + 1].of.i32, - res->data(), - res->size())); + auto const dataResult = setData( + runtime, + params->data[index].of.i32, + params->data[index + 1].of.i32, + res->data(), + res->size()); + return hfResult(results, dataResult); } - else if constexpr (std::is_same_v) + else if constexpr (std::is_same_v) { if (index < 0 || index + 1 >= params->size) - return hfResult(results, HostFunctionError::INTERNAL); // LCOV_EXCL_LINE + return hfResult(results, HostFunctionError::Internal); // LCOV_EXCL_LINE - return hfResult( - results, - setData( - runtime, - params->data[index].of.i32, - params->data[index + 1].of.i32, - res->data(), - res->size())); + auto const dataResult = setData( + runtime, + params->data[index].of.i32, + params->data[index + 1].of.i32, + res->data(), + res->size()); + return hfResult(results, dataResult); } - else if constexpr (std::is_same_v) + else if constexpr (std::is_same_v) { return hfResult(results, res.value()); } - else if constexpr (std::is_same_v) + else if constexpr (std::is_same_v) { if (index < 0 || index + 1 >= params->size) - return hfResult(results, HostFunctionError::INTERNAL); // LCOV_EXCL_LINE + return hfResult(results, HostFunctionError::Internal); // LCOV_EXCL_LINE auto const resultValue = adjustWasmEndianess(res.value()); - return hfResult( - results, - setData( - runtime, - params->data[index].of.i32, - params->data[index + 1].of.i32, - reinterpret_cast(&resultValue), - static_cast(sizeof(resultValue)))); + auto const dataResult = setData( + runtime, + params->data[index].of.i32, + params->data[index + 1].of.i32, + reinterpret_cast(&resultValue), + static_cast(sizeof(resultValue))); + return hfResult(results, dataResult); } - else if constexpr (std::is_same_v) + else if constexpr (std::is_same_v) { if (index < 0 || index + 1 >= params->size) - return hfResult(results, HostFunctionError::INTERNAL); // LCOV_EXCL_LINE + return hfResult(results, HostFunctionError::Internal); // LCOV_EXCL_LINE auto const resultValue = adjustWasmEndianess(res.value()); - return hfResult( - results, - setData( - runtime, - params->data[index].of.i32, - params->data[index + 1].of.i32, - reinterpret_cast(&resultValue), - static_cast(sizeof(resultValue)))); + auto const dataResult = setData( + runtime, + params->data[index].of.i32, + params->data[index + 1].of.i32, + reinterpret_cast(&resultValue), + static_cast(sizeof(resultValue))); + return hfResult(results, dataResult); } - else if constexpr (std::is_same_v) + else if constexpr (std::is_same_v) { if (index < 0 || index + 3 >= params->size) - return hfResult(results, HostFunctionError::INTERNAL); // LCOV_EXCL_LINE + return hfResult(results, HostFunctionError::Internal); // LCOV_EXCL_LINE auto const mantissa = adjustWasmEndianess(res->first); auto const r1 = setData( @@ -393,7 +414,7 @@ returnResult( if (r2 < 0) return hfResult(results, r2); - return hfResult(results, r1 + r2); // 12 + return hfResult(results, r1 + r2); // 12 bytes } else { @@ -401,49 +422,6 @@ returnResult( } } -static inline HostFunctions* -getHF(void* env) -{ - auto const* udata = reinterpret_cast(env); - HostFunctions* hf = reinterpret_cast(udata->first); // NOLINT - return hf; -} - -static inline Expected -checkGas(void* env) -{ - auto const* udata = reinterpret_cast(env); - HostFunctions const* hf = reinterpret_cast(udata->first); - - auto* runtime = reinterpret_cast(hf->getRT()); - if (runtime == nullptr) - { - wasm_trap_t* trap = reinterpret_cast( // NOLINT - WasmEngine::instance().newTrap("hf no runtime")); // LCOV_EXCL_LINE - return Unexpected(trap); // LCOV_EXCL_LINE - } - - int64_t const gas = runtime->getGas(); - WasmImportFunc const& impFunc = udata->second; - int64_t const x = gas >= impFunc.gas ? gas - impFunc.gas : 0; - - if (runtime->setGas(x) < 0) - { - wasm_trap_t* trap = reinterpret_cast( // NOLINT - WasmEngine::instance().newTrap("can't set gas")); // LCOV_EXCL_LINE - return Unexpected(trap); // LCOV_EXCL_LINE - } - - if (gas < impFunc.gas) - { - wasm_trap_t* const trap = // NOLINT - reinterpret_cast(WasmEngine::instance().newTrap("hf out of gas")); - return Unexpected(trap); - } - - return x; -} - //---------------------------------------------------------------------------------------------------------------------- wasm_trap_t* getLedgerSqn_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) @@ -451,7 +429,7 @@ getLedgerSqn_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int const index = 0; return returnResult(runtime, params, results, hf->getLedgerSqn(), index); @@ -463,7 +441,7 @@ getParentLedgerTime_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int const index = 0; return returnResult(runtime, params, results, hf->getParentLedgerTime(), index); @@ -475,7 +453,7 @@ getParentLedgerHash_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int const index = 0; return returnResult(runtime, params, results, hf->getParentLedgerHash(), index); @@ -487,7 +465,7 @@ getBaseFee_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int const index = 0; return returnResult(runtime, params, results, hf->getBaseFee(), index); @@ -499,14 +477,12 @@ isAmendmentEnabled_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const slice = getDataSlice(runtime, params, index); if (!slice) - { return hfResult(results, slice.error()); - } if (slice->size() == uint256::size()) { @@ -517,9 +493,7 @@ isAmendmentEnabled_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* } if (slice->size() > 64) - { return hfResult(results, HostFunctionError::DataFieldTooLarge); - } auto const str = std::string_view(reinterpret_cast(slice->data()), slice->size()); return returnResult(runtime, params, results, hf->isAmendmentEnabled(str), index); @@ -531,20 +505,16 @@ cacheLedgerObj_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* res if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const id = getDataUInt256(runtime, params, index); if (!id) - { return hfResult(results, id.error()); - } auto const cache = getDataInt32(runtime, params, index); if (!cache) - { return hfResult(results, cache.error()); // LCOV_EXCL_LINE - } return returnResult(runtime, params, results, hf->cacheLedgerObj(*id, *cache), index); } @@ -555,14 +525,13 @@ getTxField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const fname = getDataSField(runtime, params, index); if (!fname) - { return hfResult(results, fname.error()); - } + return returnResult(runtime, params, results, hf->getTxField(*fname), index); } @@ -572,14 +541,12 @@ getCurrentLedgerObjField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_ if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const fname = getDataSField(runtime, params, index); if (!fname) - { return hfResult(results, fname.error()); - } return returnResult(runtime, params, results, hf->getCurrentLedgerObjField(*fname), index); } @@ -590,20 +557,16 @@ getLedgerObjField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const cache = getDataInt32(runtime, params, index); if (!cache) - { return hfResult(results, cache.error()); // LCOV_EXCL_LINE - } auto const fname = getDataSField(runtime, params, index); if (!fname) - { return hfResult(results, fname.error()); - } return returnResult(runtime, params, results, hf->getLedgerObjField(*cache, *fname), index); } @@ -614,14 +577,12 @@ getTxNestedField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* r if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const bytes = getDataSlice(runtime, params, index); if (!bytes) - { return hfResult(results, bytes.error()); - } return returnResult(runtime, params, results, hf->getTxNestedField(*bytes), index); } @@ -635,14 +596,13 @@ getCurrentLedgerObjNestedField_wrap( if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const bytes = getDataSlice(runtime, params, index); if (!bytes) - { return hfResult(results, bytes.error()); - } + return returnResult( runtime, params, results, hf->getCurrentLedgerObjNestedField(*bytes), index); } @@ -653,20 +613,16 @@ getLedgerObjNestedField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_v if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const cache = getDataInt32(runtime, params, index); if (!cache) - { return hfResult(results, cache.error()); // LCOV_EXCL_LINE - } auto const bytes = getDataSlice(runtime, params, index); if (!bytes) - { return hfResult(results, bytes.error()); - } return returnResult( runtime, params, results, hf->getLedgerObjNestedField(*cache, *bytes), index); @@ -678,14 +634,12 @@ getTxArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const fname = getDataSField(runtime, params, index); if (!fname) - { return hfResult(results, fname.error()); - } return returnResult(runtime, params, results, hf->getTxArrayLen(*fname), index); } @@ -696,14 +650,12 @@ getCurrentLedgerObjArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_v if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const fname = getDataSField(runtime, params, index); if (!fname) - { return hfResult(results, fname.error()); - } return returnResult(runtime, params, results, hf->getCurrentLedgerObjArrayLen(*fname), index); } @@ -714,20 +666,16 @@ getLedgerObjArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_ if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const cache = getDataInt32(runtime, params, index); if (!cache) - { return hfResult(results, cache.error()); // LCOV_EXCL_LINE - } auto const fname = getDataSField(runtime, params, index); if (!fname) - { return hfResult(results, fname.error()); - } return returnResult(runtime, params, results, hf->getLedgerObjArrayLen(*cache, *fname), index); } @@ -738,14 +686,12 @@ getTxNestedArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const bytes = getDataSlice(runtime, params, index); if (!bytes) - { return hfResult(results, bytes.error()); - } return returnResult(runtime, params, results, hf->getTxNestedArrayLen(*bytes), index); } @@ -759,14 +705,12 @@ getCurrentLedgerObjNestedArrayLen_wrap( if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const bytes = getDataSlice(runtime, params, index); if (!bytes) - { return hfResult(results, bytes.error()); - } return returnResult( runtime, params, results, hf->getCurrentLedgerObjNestedArrayLen(*bytes), index); @@ -777,20 +721,17 @@ getLedgerObjNestedArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_va if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const cache = getDataInt32(runtime, params, index); if (!cache) - { return hfResult(results, cache.error()); // LCOV_EXCL_LINE - } auto const bytes = getDataSlice(runtime, params, index); if (!bytes) - { return hfResult(results, bytes.error()); - } + return returnResult( runtime, params, results, hf->getLedgerObjNestedArrayLen(*cache, *bytes), index); } @@ -801,14 +742,12 @@ updateData_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const bytes = getDataSlice(runtime, params, index, true); if (!bytes) - { return hfResult(results, bytes.error()); - } return returnResult(runtime, params, results, hf->updateData(*bytes), index); } @@ -819,26 +758,20 @@ checkSignature_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* res if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const message = getDataSlice(runtime, params, index); if (!message) - { return hfResult(results, message.error()); - } auto const signature = getDataSlice(runtime, params, index); if (!signature) - { return hfResult(results, signature.error()); - } auto const pubkey = getDataSlice(runtime, params, index); if (!pubkey) - { return hfResult(results, pubkey.error()); - } return returnResult( runtime, params, results, hf->checkSignature(*message, *signature, *pubkey), index); @@ -850,14 +783,13 @@ computeSha512HalfHash_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const bytes = getDataSlice(runtime, params, index); if (!bytes) - { return hfResult(results, bytes.error()); - } + return returnResult(runtime, params, results, hf->computeSha512HalfHash(*bytes), index); } @@ -867,14 +799,12 @@ accountKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const acc = getDataAccountID(runtime, params, index); if (!acc) - { return hfResult(results, acc.error()); - } return returnResult(runtime, params, results, hf->accountKeylet(*acc), index); } @@ -885,20 +815,16 @@ ammKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const issue1 = getDataAsset(runtime, params, index); if (!issue1) - { return hfResult(results, issue1.error()); - } auto const issue2 = getDataAsset(runtime, params, index); if (!issue2) - { return hfResult(results, issue2.error()); - } return returnResult( runtime, params, results, hf->ammKeylet(issue1.value(), issue2.value()), index); @@ -910,20 +836,16 @@ checkKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const acc = getDataAccountID(runtime, params, index); if (!acc) - { return hfResult(results, acc.error()); - } auto const seq = getDataUInt32(runtime, params, index); if (!seq) - { return hfResult(results, seq.error()); - } return returnResult(runtime, params, results, hf->checkKeylet(acc.value(), *seq), index); } @@ -934,26 +856,20 @@ credentialKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* r if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const subj = getDataAccountID(runtime, params, index); if (!subj) - { return hfResult(results, subj.error()); - } auto const iss = getDataAccountID(runtime, params, index); if (!iss) - { return hfResult(results, iss.error()); - } auto const credType = getDataSlice(runtime, params, index); if (!credType) - { return hfResult(results, credType.error()); - } return returnResult( runtime, params, results, hf->credentialKeylet(*subj, *iss, *credType), index); @@ -965,20 +881,16 @@ delegateKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* res if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const acc = getDataAccountID(runtime, params, index); if (!acc) - { return hfResult(results, acc.error()); - } auto const authorize = getDataAccountID(runtime, params, index); if (!authorize) - { return hfResult(results, authorize.error()); - } return returnResult( runtime, params, results, hf->delegateKeylet(acc.value(), authorize.value()), index); @@ -990,20 +902,16 @@ depositPreauthKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_ if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const acc = getDataAccountID(runtime, params, index); if (!acc) - { return hfResult(results, acc.error()); - } auto const authorize = getDataAccountID(runtime, params, index); if (!authorize) - { return hfResult(results, authorize.error()); - } return returnResult( runtime, params, results, hf->depositPreauthKeylet(acc.value(), authorize.value()), index); @@ -1015,14 +923,12 @@ didKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const acc = getDataAccountID(runtime, params, index); if (!acc) - { return hfResult(results, acc.error()); - } return returnResult(runtime, params, results, hf->didKeylet(acc.value()), index); } @@ -1033,20 +939,16 @@ escrowKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const acc = getDataAccountID(runtime, params, index); if (!acc) - { return hfResult(results, acc.error()); - } auto const seq = getDataUInt32(runtime, params, index); if (!seq) - { return hfResult(results, seq.error()); - } return returnResult(runtime, params, results, hf->escrowKeylet(*acc, *seq), index); } @@ -1057,26 +959,20 @@ lineKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const acc1 = getDataAccountID(runtime, params, index); if (!acc1) - { return hfResult(results, acc1.error()); - } auto const acc2 = getDataAccountID(runtime, params, index); if (!acc2) - { return hfResult(results, acc2.error()); - } auto const currency = getDataCurrency(runtime, params, index); if (!currency) - { return hfResult(results, currency.error()); - } return returnResult( runtime, @@ -1092,20 +988,16 @@ mptIssuanceKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const acc = getDataAccountID(runtime, params, index); if (!acc) - { return hfResult(results, acc.error()); - } auto const seq = getDataUInt32(runtime, params, index); if (!seq) - { return hfResult(results, seq.error()); - } return returnResult( runtime, params, results, hf->mptIssuanceKeylet(acc.value(), seq.value()), index); @@ -1117,26 +1009,20 @@ mptokenKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const slice = getDataSlice(runtime, params, index); if (!slice) - { return hfResult(results, slice.error()); - } if (slice->size() != MPTID::size()) - { return hfResult(results, HostFunctionError::InvalidParams); - } auto const mptid = MPTID::fromVoid(slice->data()); auto const holder = getDataAccountID(runtime, params, index); if (!holder) - { return hfResult(results, holder.error()); - } return returnResult(runtime, params, results, hf->mptokenKeylet(mptid, holder.value()), index); } @@ -1147,20 +1033,16 @@ nftOfferKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* res if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const acc = getDataAccountID(runtime, params, index); if (!acc) - { return hfResult(results, acc.error()); - } auto const seq = getDataUInt32(runtime, params, index); if (!seq) - { return hfResult(results, seq.error()); - } return returnResult( runtime, params, results, hf->nftOfferKeylet(acc.value(), seq.value()), index); @@ -1172,20 +1054,16 @@ offerKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const acc = getDataAccountID(runtime, params, index); if (!acc) - { return hfResult(results, acc.error()); - } auto const seq = getDataUInt32(runtime, params, index); if (!seq) - { return hfResult(results, seq.error()); - } return returnResult(runtime, params, results, hf->offerKeylet(acc.value(), seq.value()), index); } @@ -1196,20 +1074,17 @@ oracleKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const acc = getDataAccountID(runtime, params, index); if (!acc) - { return hfResult(results, acc.error()); - } auto const documentId = getDataUInt32(runtime, params, index); if (!documentId) - { return hfResult(results, documentId.error()); - } + return returnResult(runtime, params, results, hf->oracleKeylet(*acc, *documentId), index); } @@ -1219,26 +1094,20 @@ paychanKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const acc = getDataAccountID(runtime, params, index); if (!acc) - { return hfResult(results, acc.error()); - } auto const dest = getDataAccountID(runtime, params, index); if (!dest) - { return hfResult(results, dest.error()); - } auto const seq = getDataUInt32(runtime, params, index); if (!seq) - { return hfResult(results, seq.error()); - } return returnResult( runtime, params, results, hf->paychanKeylet(acc.value(), dest.value(), seq.value()), index); @@ -1250,20 +1119,16 @@ permissionedDomainKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_ if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const acc = getDataAccountID(runtime, params, index); if (!acc) - { return hfResult(results, acc.error()); - } auto const seq = getDataUInt32(runtime, params, index); if (!seq) - { return hfResult(results, seq.error()); - } return returnResult( runtime, params, results, hf->permissionedDomainKeylet(acc.value(), seq.value()), index); @@ -1275,14 +1140,12 @@ signersKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const acc = getDataAccountID(runtime, params, index); if (!acc) - { return hfResult(results, acc.error()); - } return returnResult(runtime, params, results, hf->signersKeylet(acc.value()), index); } @@ -1293,20 +1156,16 @@ ticketKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const acc = getDataAccountID(runtime, params, index); if (!acc) - { return hfResult(results, acc.error()); - } auto const seq = getDataUInt32(runtime, params, index); if (!seq) - { return hfResult(results, seq.error()); - } return returnResult( runtime, params, results, hf->ticketKeylet(acc.value(), seq.value()), index); @@ -1318,20 +1177,16 @@ vaultKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const acc = getDataAccountID(runtime, params, index); if (!acc) - { return hfResult(results, acc.error()); - } auto const seq = getDataUInt32(runtime, params, index); if (!seq) - { return hfResult(results, seq.error()); - } return returnResult(runtime, params, results, hf->vaultKeylet(acc.value(), seq.value()), index); } @@ -1342,20 +1197,16 @@ getNFT_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const acc = getDataAccountID(runtime, params, index); if (!acc) - { return hfResult(results, acc.error()); - } auto const nftId = getDataUInt256(runtime, params, index); if (!nftId) - { return hfResult(results, nftId.error()); - } return returnResult(runtime, params, results, hf->getNFT(*acc, *nftId), index); } @@ -1366,14 +1217,12 @@ getNFTIssuer_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const nftId = getDataUInt256(runtime, params, index); if (!nftId) - { return hfResult(results, nftId.error()); - } return returnResult(runtime, params, results, hf->getNFTIssuer(*nftId), index); } @@ -1384,14 +1233,12 @@ getNFTTaxon_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const nftId = getDataUInt256(runtime, params, index); if (!nftId) - { return hfResult(results, nftId.error()); - } return returnResult(runtime, params, results, hf->getNFTTaxon(*nftId), index); } @@ -1402,14 +1249,12 @@ getNFTFlags_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const nftId = getDataUInt256(runtime, params, index); if (!nftId) - { return hfResult(results, nftId.error()); - } return returnResult(runtime, params, results, hf->getNFTFlags(*nftId), index); } @@ -1420,14 +1265,12 @@ getNFTTransferFee_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const nftId = getDataUInt256(runtime, params, index); if (!nftId) - { return hfResult(results, nftId.error()); - } return returnResult(runtime, params, results, hf->getNFTTransferFee(*nftId), index); } @@ -1438,14 +1281,12 @@ getNFTSerial_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; auto const nftId = getDataUInt256(runtime, params, index); if (!nftId) - { return hfResult(results, nftId.error()); - } return returnResult(runtime, params, results, hf->getNFTSerial(*nftId), index); } @@ -1456,42 +1297,30 @@ trace_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; int64_t const len = (int64_t)params->data[1].of.i32 + params->data[3].of.i32; if (len < 0) - { return hfResult(results, HostFunctionError::InvalidParams); - } - if (std::cmp_greater(len, maxWasmParamLength)) - { + if (std::cmp_greater(len, kMaxWasmParamLength)) return hfResult(results, HostFunctionError::DataFieldTooLarge); - } auto const msg = getDataString(runtime, params, index); if (!msg) - { return hfResult(results, msg.error()); - } auto const data = getDataSlice(runtime, params, index); if (!data) - { return hfResult(results, data.error()); - } auto const asHex = getDataInt32(runtime, params, index); if (!asHex) - { return hfResult(results, asHex.error()); // LCOV_EXCL_LINE - } if (*asHex != 0 && *asHex != 1) - { return hfResult(results, HostFunctionError::InvalidParams); - } return returnResult(runtime, params, results, hf->trace(*msg, *data, *asHex != 0), index); } @@ -1502,31 +1331,23 @@ traceNum_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int index = 0; int32_t const len = params->data[1].of.i32; if (len < 0) - { return hfResult(results, HostFunctionError::InvalidParams); - } - if (std::cmp_greater(len, maxWasmParamLength)) - { + if (std::cmp_greater(len, kMaxWasmParamLength)) return hfResult(results, HostFunctionError::DataFieldTooLarge); - } auto const msg = getDataString(runtime, params, index); if (!msg) - { return hfResult(results, msg.error()); - } auto const number = getDataInt64(runtime, params, index); if (!number) - { return hfResult(results, number.error()); // LCOV_EXCL_LINE - } return returnResult(runtime, params, results, hf->traceNum(*msg, *number), index); } @@ -1537,31 +1358,23 @@ traceAccount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int32_t const len = params->data[1].of.i32; if (len < 0) - { return hfResult(results, HostFunctionError::InvalidParams); - } - if (std::cmp_greater(len, maxWasmParamLength)) - { + if (std::cmp_greater(len, kMaxWasmParamLength)) return hfResult(results, HostFunctionError::DataFieldTooLarge); - } int i = 0; auto const msg = getDataString(runtime, params, i); if (!msg) - { return hfResult(results, msg.error()); - } auto const account = getDataAccountID(runtime, params, i); if (!account) - { return hfResult(results, account.error()); - } return returnResult(runtime, params, results, hf->traceAccount(*msg, *account), i); } @@ -1572,31 +1385,23 @@ traceFloat_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int32_t const len = params->data[1].of.i32; if (len < 0) - { return hfResult(results, HostFunctionError::InvalidParams); - } - if (std::cmp_greater(len, maxWasmParamLength)) - { + if (std::cmp_greater(len, kMaxWasmParamLength)) return hfResult(results, HostFunctionError::DataFieldTooLarge); - } int i = 0; auto const msg = getDataString(runtime, params, i); if (!msg) - { return hfResult(results, msg.error()); - } auto const number = getDataSlice(runtime, params, i); if (!number) - { return hfResult(results, number.error()); - } return returnResult(runtime, params, results, hf->traceFloat(*msg, *number), i); } @@ -1607,31 +1412,23 @@ traceAmount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int32_t const len = params->data[1].of.i32; if (len < 0) - { return hfResult(results, HostFunctionError::InvalidParams); - } - if (std::cmp_greater(len, maxWasmParamLength)) - { + if (std::cmp_greater(len, kMaxWasmParamLength)) return hfResult(results, HostFunctionError::DataFieldTooLarge); - } int i = 0; auto const msg = getDataString(runtime, params, i); if (!msg) - { return hfResult(results, msg.error()); - } auto const amountSliceOpt = getDataSlice(runtime, params, i); if (!amountSliceOpt) - { return hfResult(results, amountSliceOpt.error()); - } auto const amountSlice = amountSliceOpt.value(); auto serialIter = SerialIter(amountSlice); @@ -1660,7 +1457,7 @@ floatFromInt_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int i = 0; auto const x = getDataInt64(runtime, params, i); @@ -1682,7 +1479,7 @@ floatFromUint_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int i = 0; auto const x = getDataUInt64(runtime, params, i); @@ -1704,7 +1501,7 @@ floatFromSTAmount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int i = 0; auto const x = getDataSlice(runtime, params, i); @@ -1739,7 +1536,7 @@ floatFromSTNumber_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int i = 0; auto const x = getDataSlice(runtime, params, i); @@ -1774,7 +1571,7 @@ floatToInt_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int i = 0; auto const x = getDataSlice(runtime, params, i); @@ -1796,7 +1593,7 @@ floatToMantExp_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* res if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int i = 0; auto const x = getDataSlice(runtime, params, i); @@ -1813,7 +1610,7 @@ floatFromMantExp_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* r if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int i = 0; @@ -1840,7 +1637,7 @@ floatCompare_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int i = 0; auto const x = getDataSlice(runtime, params, i); @@ -1860,7 +1657,7 @@ floatAdd_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int i = 0; auto const x = getDataSlice(runtime, params, i); @@ -1886,7 +1683,7 @@ floatSubtract_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int i = 0; auto const x = getDataSlice(runtime, params, i); @@ -1912,7 +1709,7 @@ floatMultiply_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int i = 0; auto const x = getDataSlice(runtime, params, i); @@ -1938,7 +1735,7 @@ floatDivide_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int i = 0; auto const x = getDataSlice(runtime, params, i); @@ -1964,7 +1761,7 @@ floatRoot_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int i = 0; auto const x = getDataSlice(runtime, params, i); @@ -1990,7 +1787,7 @@ floatPower_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results if (auto g = checkGas(env); !g) return g.error(); // LCOV_EXCL_LINE auto* hf = getHF(env); - auto* runtime = reinterpret_cast(hf->getRT()); + auto* runtime = hf->getRT(); int i = 0; auto const x = getDataSlice(runtime, params, i); @@ -2013,10 +1810,12 @@ floatPower_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results // LCOV_EXCL_START namespace test { -class MockWasmRuntimeWrapper +class MockWasmRuntimeWrapper : public WasmRuntimeWrapper { Wmem mem_; + std::int64_t gas_ = 1'000'000; + public: MockWasmRuntimeWrapper(Wmem memory) : mem_(memory) { @@ -2024,10 +1823,23 @@ public: // Mock methods to simulate the behavior of WasmRuntimeWrapper [[nodiscard]] Wmem - getMem() const + getMem() override { return mem_; } + + std::int64_t + getGas() override + { + return gas_; + } + + std::int64_t + setGas(std::int64_t gas) override + { + gas_ = gas; + return gas_; + } }; bool @@ -2036,11 +1848,11 @@ testGetDataIncrement() wasm_val_t values[4]; std::array buffer = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'}; - MockWasmRuntimeWrapper runtime(Wmem{.p = buffer.data(), .s = buffer.size()}); + MockWasmRuntimeWrapper runtime(Wmem(buffer.data(), buffer.size())); { // test int32_t - wasm_val_vec_t const params = {1, &values[0]}; + wasm_val_vec_t const params = {.size = 1, .data = &values[0]}; values[0] = WASM_I32_VAL(42); @@ -2052,7 +1864,7 @@ testGetDataIncrement() { // test int64_t - wasm_val_vec_t const params = {1, &values[0]}; + wasm_val_vec_t const params = {.size = 1, .data = &values[0]}; values[0] = WASM_I64_VAL(1234); @@ -2064,7 +1876,7 @@ testGetDataIncrement() { // test SFieldCRef - wasm_val_vec_t const params = {1, &values[0]}; + wasm_val_vec_t const params = {.size = 1, .data = &values[0]}; values[0] = WASM_I32_VAL(sfAccount.getCode()); @@ -2076,7 +1888,7 @@ testGetDataIncrement() { // test Slice - wasm_val_vec_t const params = {2, &values[0]}; + wasm_val_vec_t const params = {.size = 2, .data = &values[0]}; values[0] = WASM_I32_VAL(0); values[1] = WASM_I32_VAL(3); @@ -2089,7 +1901,7 @@ testGetDataIncrement() { // test string - wasm_val_vec_t const params = {2, &values[0]}; + wasm_val_vec_t const params = {.size = 2, .data = &values[0]}; values[0] = WASM_I32_VAL(0); values[1] = WASM_I32_VAL(5); @@ -2107,7 +1919,7 @@ testGetDataIncrement() AccountID const id( calcAccountID(generateKeyPair(KeyType::Secp256k1, generateSeed("alice")).first)); - wasm_val_vec_t const params = {2, &values[0]}; + wasm_val_vec_t const params = {.size = 2, .data = &values[0]}; values[0] = WASM_I32_VAL(0); values[1] = WASM_I32_VAL(AccountID::size()); @@ -2123,7 +1935,7 @@ testGetDataIncrement() // test uint256 Hash h1 = sha512Half(Slice(buffer.data(), 8)); - wasm_val_vec_t const params = {2, &values[0]}; + wasm_val_vec_t const params = {.size = 2, .data = &values[0]}; values[0] = WASM_I32_VAL(0); values[1] = WASM_I32_VAL(Hash::size()); @@ -2139,7 +1951,7 @@ testGetDataIncrement() // test Currency Currency const c = xrpCurrency(); - wasm_val_vec_t const params = {2, &values[0]}; + wasm_val_vec_t const params = {.size = 2, .data = &values[0]}; values[0] = WASM_I32_VAL(0); values[1] = WASM_I32_VAL(Currency::size()); diff --git a/src/libxrpl/tx/wasm/WasmVM.cpp b/src/libxrpl/tx/wasm/WasmVM.cpp index c3c724cd43..0f7f947a0a 100644 --- a/src/libxrpl/tx/wasm/WasmVM.cpp +++ b/src/libxrpl/tx/wasm/WasmVM.cpp @@ -4,7 +4,8 @@ #include #include #include // IWYU pragma: keep -#include +#include +#include #include #include @@ -27,7 +28,7 @@ namespace xrpl { // See XLS-0102 §6.5 (Future-Proofing): // https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0102-wasm-vm#65-future-proofing static void -setCommonHostFunctions(HostFunctions* hfs, ImportVec& i) +setCommonHostFunctions(HostFunctions& hfs, ImportVec& i) { // clang-format off WASM_IMPORT_FUNC2(i, getLedgerSqn, "get_ledger_sqn", hfs, 60); @@ -108,8 +109,8 @@ createWasmImport(HostFunctions& hfs) { ImportVec i; - setCommonHostFunctions(&hfs, i); - WASM_IMPORT_FUNC2(i, updateData, "update_data", &hfs, 1000); + setCommonHostFunctions(hfs, i); + WASM_IMPORT_FUNC2(i, updateData, "update_data", hfs, 1000); return i; } @@ -140,7 +141,7 @@ runEscrowWasm( #ifdef DEBUG_OUTPUT std::cout << ", ret: " << ret->result << ", gas spent: " << ret->cost << std::endl; #endif - return EscrowResult{ret->result, ret->cost}; + return EscrowResult{.result = ret->result, .cost = ret->cost}; } NotTEC diff --git a/src/libxrpl/tx/wasm/WasmiVM.cpp b/src/libxrpl/tx/wasm/WasmiVM.cpp index e22380741b..007610fee2 100644 --- a/src/libxrpl/tx/wasm/WasmiVM.cpp +++ b/src/libxrpl/tx/wasm/WasmiVM.cpp @@ -5,7 +5,8 @@ #include #include #include -#include +#include +#include #include #include @@ -76,30 +77,31 @@ printWasmError(std::string_view msg, wasm_trap_t* trap, beast::Journal jlog) } // namespace -struct WasmiRuntimeWrapper : public WasmRuntimeWrapper +class WasmiRuntimeWrapper : public WasmRuntimeWrapper { - InstanceWrapper& iw; + InstanceWrapper& iw_; - WasmiRuntimeWrapper(InstanceWrapper& iw) : iw(iw) +public: + WasmiRuntimeWrapper(InstanceWrapper& iw) : iw_(iw) { } Wmem getMem() override { - return iw.getMem(); + return iw_.getMem(); } std::int64_t getGas() override { - return iw.getGas(); + return iw_.getGas(); } std::int64_t setGas(std::int64_t gas) override { - return iw.setGas(gas); + return iw_.setGas(gas); } }; @@ -118,69 +120,43 @@ InstanceWrapper::init( if (!mi || (trap != nullptr)) { printWasmError("can't create instance", trap, j); - throw std::runtime_error("can't create instance"); + Throw("can't create instance"); } wasm_instance_exports(mi.get(), expt.get()); return mi; } -InstanceWrapper::InstanceWrapper() : instance(nullptr, &wasm_instance_delete) -{ -} - -// LCOV_EXCL_START -InstanceWrapper::InstanceWrapper(InstanceWrapper&& o) : instance(nullptr, &wasm_instance_delete) -{ - *this = std::move(o); -} -// LCOV_EXCL_STOP - -InstanceWrapper::InstanceWrapper( - StorePtr& s, - ModulePtr& m, - WasmExternVec const& imports, - beast::Journal j) - : store(s.get()), instance(init(s, m, exports, imports, j)), j(j) -{ -} - InstanceWrapper& InstanceWrapper::operator=(InstanceWrapper&& o) { if (this == &o) return *this; // LCOV_EXCL_LINE - store = o.store; - o.store = nullptr; - exports = std::move(o.exports); - memIdx = o.memIdx; - o.memIdx = -1; - instance = std::move(o.instance); + store_ = o.store_; + o.store_ = nullptr; + exports_ = std::move(o.exports_); + memIdx_ = o.memIdx_; + o.memIdx_ = -1; + instance_ = std::move(o.instance_); - j = o.j; + j_ = o.j_; return *this; } -InstanceWrapper:: -operator bool() const -{ - return static_cast(instance); -} - FuncInfo InstanceWrapper::getFunc(std::string_view funcName, WasmExporttypeVec const& exportTypes) const { wasm_func_t const* f = nullptr; wasm_functype_t const* ft = nullptr; - if (!instance) - throw std::runtime_error("no instance"); // LCOV_EXCL_LINE + if (!instance_) + Throw("no instance"); // LCOV_EXCL_LINE if (exportTypes.empty()) - throw std::runtime_error("no export"); // LCOV_EXCL_LINE - if (exportTypes.size() != exports.size()) - throw std::runtime_error("invalid export"); // LCOV_EXCL_LINE + Throw("no export"); // LCOV_EXCL_LINE + if (exportTypes.size() != exports_.size()) + Throw("invalid export"); // LCOV_EXCL_LINE for (unsigned i = 0; i < exportTypes.size(); ++i) { @@ -193,9 +169,9 @@ InstanceWrapper::getFunc(std::string_view funcName, WasmExporttypeVec const& exp if (funcName != std::string_view(name->data, name->size)) continue; - auto const* exn(exports[i]); + auto const* exn(exports_[i]); if (wasm_extern_kind(exn) != WASM_EXTERN_FUNC) - throw std::runtime_error("invalid export"); // LCOV_EXCL_LINE + Throw("invalid export"); // LCOV_EXCL_LINE ft = wasm_externtype_as_functype_const(exnType); f = wasm_extern_as_func_const(exn); @@ -204,7 +180,7 @@ InstanceWrapper::getFunc(std::string_view funcName, WasmExporttypeVec const& exp } if ((f == nullptr) || (ft == nullptr)) - throw std::runtime_error("can't find function <" + std::string(funcName) + ">"); + Throw("can't find function <" + std::string(funcName) + ">"); return {f, ft}; } @@ -212,22 +188,20 @@ InstanceWrapper::getFunc(std::string_view funcName, WasmExporttypeVec const& exp Wmem InstanceWrapper::getMem() const { - if (memIdx >= 0) + if (memIdx_ >= 0) { - auto* e(exports[memIdx]); + auto* e(exports_[memIdx_]); wasm_memory_t* mem = wasm_extern_as_memory(e); - return { - .p = reinterpret_cast(wasm_memory_data(mem)), - .s = wasm_memory_data_size(mem)}; + return Wmem(wasm_memory_data(mem), wasm_memory_data_size(mem)); } wasm_memory_t* mem = nullptr; - for (int i = 0; i < exports.size(); ++i) + for (int i = 0; i < exports_.size(); ++i) { - auto* e(exports[i]); + auto* e(exports_[i]); if (wasm_extern_kind(e) == WASM_EXTERN_MEMORY) { - memIdx = i; + memIdx_ = i; mem = wasm_extern_as_memory(e); break; } @@ -236,34 +210,32 @@ InstanceWrapper::getMem() const if (mem == nullptr) return {}; // LCOV_EXCL_LINE - return { - .p = reinterpret_cast(wasm_memory_data(mem)), - .s = wasm_memory_data_size(mem)}; + return Wmem(wasm_memory_data(mem), wasm_memory_data_size(mem)); } std::int64_t InstanceWrapper::getGas() const { - if (store == nullptr) + if (store_ == nullptr) return -1; // LCOV_EXCL_LINE std::uint64_t gas = 0; - wasm_store_get_fuel(store, &gas); + wasm_store_get_fuel(store_, &gas); return static_cast(gas); } std::int64_t InstanceWrapper::setGas(std::int64_t gas) const { - if (store == nullptr) + if (store_ == nullptr) return -1; // LCOV_EXCL_LINE if (gas < 0) gas = std::numeric_limits::max(); - wasmi_error_t* err = wasm_store_set_fuel(store, static_cast(gas)); + wasmi_error_t* err = wasm_store_set_fuel(store_, static_cast(gas)); if (err != nullptr) { // LCOV_EXCL_START - printWasmError("Can't set instance gas", nullptr, j); + printWasmError("Can't set instance gas", nullptr, j_); wasmi_error_delete(err); return -1; // LCOV_EXCL_STOP @@ -277,7 +249,7 @@ InstanceWrapper::setGas(std::int64_t gas) const ModulePtr ModuleWrapper::init(StorePtr& s, Bytes const& wasmBin, beast::Journal j) { - wasm_byte_vec_t const code{wasmBin.size(), (char*)(wasmBin.data())}; + wasm_byte_vec_t const code{.size = wasmBin.size(), .data = (char*)(wasmBin.data())}; ModulePtr m = ModulePtr(wasm_module_new(s.get(), &code), &wasm_module_delete); if (!m) throw std::runtime_error("can't create module"); @@ -285,26 +257,15 @@ ModuleWrapper::init(StorePtr& s, Bytes const& wasmBin, beast::Journal j) return m; } -// LCOV_EXCL_START -ModuleWrapper::ModuleWrapper() : module(nullptr, &wasm_module_delete) -{ -} - -ModuleWrapper::ModuleWrapper(ModuleWrapper&& o) : module(nullptr, &wasm_module_delete) -{ - *this = std::move(o); -} -// LCOV_EXCL_STOP - ModuleWrapper::ModuleWrapper( StorePtr& s, Bytes const& wasmBin, bool instantiate, ImportVec const& imports, beast::Journal j) - : module(init(s, wasmBin, j)), j(j) + : module_(init(s, wasmBin, j)), j_(j) { - wasm_module_exports(module.get(), exportTypes.get()); + wasm_module_exports(module_.get(), exportTypes_.get()); auto wimports = buildImports(s, imports); if (instantiate) { @@ -319,20 +280,14 @@ ModuleWrapper::operator=(ModuleWrapper&& o) if (this == &o) return *this; - module = std::move(o.module); - instanceWrap = std::move(o.instanceWrap); - exportTypes = std::move(o.exportTypes); - j = o.j; + module_ = std::move(o.module_); + instanceWrap_ = std::move(o.instanceWrap_); + exportTypes_ = std::move(o.exportTypes_); + j_ = o.j_; return *this; } -ModuleWrapper:: -operator bool() const -{ - return instanceWrap; -} - // LCOV_EXCL_STOP static WasmValtypeVec @@ -391,7 +346,7 @@ WasmExternVec ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) const { WasmImporttypeVec importTypes; - wasm_module_imports(module.get(), importTypes.get()); + wasm_module_imports(module_.get(), importTypes.get()); if (importTypes.empty()) return {}; @@ -424,12 +379,12 @@ ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) const auto const it = imports.find(fieldName); if (it == imports.end()) { - printWasmError("Import not found: " + std::string(fieldName), nullptr, j); + printWasmError("Import not found: " + std::string(fieldName), nullptr, j_); continue; // print all missed import } - auto const& obj = it->second; - auto const& imp = obj.second; + WasmUserData const& obj = it->second; + WasmImportFunc const& imp = obj.second; WasmValtypeVec params(makeImpParams(imp)); WasmValtypeVec results(makeImpReturn(imp)); @@ -462,25 +417,19 @@ ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) const std::string("Imports not finished: ") + std::to_string(impCnt) + "/" + std::to_string(importTypes.size()), nullptr, - j); + j_); Throw("Missing imports"); } return wimports; } -FuncInfo -ModuleWrapper::getFunc(std::string_view funcName) const -{ - return instanceWrap.getFunc(funcName, exportTypes); -} - wasm_functype_t* ModuleWrapper::getFuncType(std::string_view funcName) const { - for (size_t i = 0; i < exportTypes.size(); i++) + for (size_t i = 0; i < exportTypes_.size(); i++) { - auto const* expType(exportTypes[i]); + auto const* expType(exportTypes_[i]); wasm_name_t const* name = wasm_exporttype_name(expType); wasm_externtype_t const* exnType = wasm_exporttype_type(expType); if (wasm_externtype_kind(exnType) == WASM_EXTERN_FUNC && @@ -493,25 +442,6 @@ ModuleWrapper::getFuncType(std::string_view funcName) const throw std::runtime_error("can't find function <" + std::string(funcName) + ">"); } -Wmem -ModuleWrapper::getMem() const -{ - return instanceWrap.getMem(); -} - -InstanceWrapper& -ModuleWrapper::getInstance(int) -{ - return instanceWrap; -} - -int -ModuleWrapper::addInstance(StorePtr& s, WasmExternVec const& imports) -{ - instanceWrap = {s, module, imports, j}; - return 0; -} - // int // my_module_t::delInstance(int i) // { @@ -522,12 +452,6 @@ ModuleWrapper::addInstance(StorePtr& s, WasmExternVec const& imports) // return i; // } -std::int64_t -ModuleWrapper::getGas() const -{ - return instanceWrap ? instanceWrap.getGas() : -1; -} - ////////////////////////////////////////////////////////////////////////////////////////////////////////////// // void @@ -567,10 +491,6 @@ WasmiEngine::init() wasm_engine_new_with_config(config), &wasm_engine_delete); } -WasmiEngine::WasmiEngine() : engine_(init()), store_(nullptr, &wasm_store_delete) -{ -} - int WasmiEngine::addModule( Bytes const& wasmCode, @@ -608,12 +528,6 @@ WasmiEngine::addModule( // return module->addInstance(store.get()); // } -FuncInfo -WasmiEngine::getFunc(std::string_view funcName) const -{ - return moduleWrap_->getFunc(funcName); -} - std::vector WasmiEngine::convertParams(std::vector const& params) { @@ -711,8 +625,8 @@ WasmiResult WasmiEngine::call(FuncInfo const& f, std::vector& in) { WasmiResult ret(NR); - wasm_val_vec_t const inv = - in.empty() ? wasm_val_vec_t WASM_EMPTY_VEC : wasm_val_vec_t{in.size(), in.data()}; + wasm_val_vec_t const inv = in.empty() ? wasm_val_vec_t WASM_EMPTY_VEC + : wasm_val_vec_t{.size = in.size(), .data = in.data()}; #ifdef SHOW_CALL_TIME auto const start = usecs(); @@ -763,7 +677,7 @@ checkImports(ImportVec const& imports, HostFunctions* hfs) { for (auto const& obj : imports) { - if (hfs != obj.second.first) + if (hfs != &obj.second.first.get()) Throw("Imports hf unsync"); } } @@ -821,13 +735,13 @@ WasmiEngine::runHlp( // Create and instantiate the module. [[maybe_unused]] int const m = addModule(wasmCode, true, imports, gas); - if (!moduleWrap_ || !moduleWrap_->instanceWrap) + if (!moduleWrap_ || !moduleWrap_->getInstance()) throw std::runtime_error("no instance"); // LCOV_EXCL_LINE - auto clear = [](HostFunctions* p) { p->setRT(nullptr); }; - std::unique_ptr const clearGuard(&hfs, clear); + auto clearRT = [](HostFunctions* p) { p->resetRT(); }; + std::unique_ptr const clearGuard(&hfs, clearRT); WasmiRuntimeWrapper iw(getRT()); - hfs.setRT(&iw); + hfs.setRT(iw); // Call main auto const f = getFunc(!funcName.empty() ? funcName : "_start"); @@ -843,19 +757,17 @@ WasmiEngine::runHlp( auto const res = call<1>(f, p); if (res.f) - { - throw std::runtime_error("<" + std::string(funcName) + "> failure"); - } + Throw("<" + std::string(funcName) + "> failure"); if (res.r.empty()) { - throw std::runtime_error( + Throw( "<" + std::string(funcName) + "> return nothing"); // LCOV_EXCL_LINE } if (res.r[0].kind != WASM_I32) { - throw std::runtime_error( + Throw( "<" + std::string(funcName) + "> return type mismatch, ret: " + std::to_string(static_cast(res.r[0].kind))); } @@ -934,33 +846,11 @@ WasmiEngine::checkHlp( return tesSUCCESS; } -// LCOV_EXCL_START -std::int64_t -WasmiEngine::getGas() const -{ - return moduleWrap_ ? moduleWrap_->getGas() : -1; -} -// LCOV_EXCL_STOP - -Wmem -WasmiEngine::getMem() const -{ - return moduleWrap_ ? moduleWrap_->getMem() : Wmem(); -} - -InstanceWrapper& -WasmiEngine::getRT(int m, int i) const -{ - if (!moduleWrap_) - throw std::runtime_error("no module"); - return moduleWrap_->getInstance(i); -} - wasm_trap_t* WasmiEngine::newTrap(std::string const& txt) { static char empty[1] = {0}; - wasm_message_t msg = {1, empty}; + wasm_message_t msg = {.size = 1, .data = empty}; if (!txt.empty()) wasm_name_new(&msg, txt.size() + 1, txt.c_str()); // include 0 @@ -973,12 +863,4 @@ WasmiEngine::newTrap(std::string const& txt) return trap; } -// LCOV_EXCL_START -beast::Journal -WasmiEngine::getJournal() const -{ - return j_; -} -// LCOV_EXCL_STOP - } // namespace xrpl diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 7a6166fe4c..ab925cb432 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -44,7 +44,8 @@ #include #include #include -#include +#include +#include #include #include @@ -174,7 +175,7 @@ public: Wmem getMem() override { - return {.p = buffer_.data(), .s = buffer_.size()}; + return Wmem(buffer_.data(), buffer_.size()); } std::int64_t @@ -206,14 +207,14 @@ public: checkIdx(WasmValVec const& params, size_t i) const { if (i + 1 >= params.size()) - Throw("Out of bounds"); + Throw("Out of bounds"); if (params[i].kind != WASM_I32 || params[i + 1].kind != WASM_I32) Throw("Invalid params"); std::int32_t const ptr = params[i].of.i32; std::int32_t const size = params[i + 1].of.i32; std::int64_t const offset = (std::int64_t)ptr + size; if (ptr < 0 || size < 0 || std::cmp_greater_equal(offset, buffer_.size())) - Throw("Out of bounds"); + Throw("Out of bounds"); } [[nodiscard]] Slice @@ -292,24 +293,24 @@ ww_hlp(size_t& idx, E&& e, P&& params, Arg&& arg) else if constexpr (std::is_same_v) { auto const* udata = reinterpret_cast(e); - HostFunctions const* hf = reinterpret_cast(udata->first); - auto* vrt = reinterpret_cast(hf->getRT()); + HostFunctions const& hf = udata->first; + auto& vrt = *reinterpret_cast(hf.getRT()); auto const data = toBytes(std::forward(arg)); size_t const ptr = (idx << 10); - vrt->setBytes(ptr, data.data(), data.size()); + vrt.setBytes(ptr, data.data(), data.size()); params[idx++] = wasm_val_t WASM_I32_VAL(static_cast(ptr)); params[idx++] = wasm_val_t WASM_I32_VAL(static_cast(data.size())); } else { auto const* udata = reinterpret_cast(e); - HostFunctions const* hf = reinterpret_cast(udata->first); - auto* vrt = reinterpret_cast(hf->getRT()); + HostFunctions const& hf = udata->first; + auto& vrt = *reinterpret_cast(hf.getRT()); size_t const ptr = (idx << 10); - vrt->setBytes(ptr, arg.data(), arg.size()); + vrt.setBytes(ptr, arg.data(), arg.size()); params[idx++] = wasm_val_t WASM_I32_VAL(static_cast(ptr)); params[idx++] = wasm_val_t WASM_I32_VAL(static_cast(arg.size())); } @@ -321,8 +322,8 @@ wasm_trap_t* ww(F&& f, E&& e, P&& params, P&& result, Args... args) { size_t idx = 0; - (ww_hlp(idx, e, params, std::forward(args)), ...); // NOLINT - return f(std::forward(e), params.get(), result.get()); // NOLINT + (ww_hlp(idx, e, params, std::forward(args)), ...); + return f(std::forward(e), params.get(), result.get()); } constexpr int64_t min64 = std::numeric_limits::min(); @@ -345,7 +346,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); { // hfs.getLedgerSqn(); @@ -378,7 +379,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); { // hfs.getParentLedgerTime(); @@ -413,7 +414,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); { // hfs.getParentLedgerHash(); @@ -450,7 +451,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); // hfs.getBaseFee(); { @@ -483,7 +484,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); // Use featureTokenEscrow for testing auto const amendmentId = featureTokenEscrow; @@ -572,7 +573,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); // hfs.cacheLedgerObj(accountKeylet.key, -1); { @@ -693,7 +694,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); vrt.setGas(2'000'000); for (int i = 1; i <= 256; ++i) @@ -768,7 +769,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); // hfs.getTxField(sfAccount); { @@ -943,7 +944,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac2, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); // hfs.getTxField(sfAsset); { @@ -998,7 +999,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac2, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); // hfs.getTxField(sfAsset); { @@ -1054,7 +1055,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac2, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); // hfs.getTxField(sfAssetScale); { @@ -1103,7 +1104,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, escrowKeylet); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); // hfs.getCurrentLedgerObjField(sfAccount); { @@ -1191,7 +1192,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs2(ac, dummyEscrow); auto import2 = xrpl::createWasmImport(hfs2); - hfs2.setRT(&vrt2); + hfs2.setRT(vrt2); // hfs2.getCurrentLedgerObjField(sfAccount); { @@ -1234,7 +1235,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, escrowKeylet); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); // hfs.cacheLedgerObj(accountKeylet.key, 1); { @@ -1403,7 +1404,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); // hfs.getTxNestedField(locator); { @@ -1536,7 +1537,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECTS( - result[0].of.i32 == HfErrorToInt(expectedError), std::to_string(result[0].of.i32)); + result[0].of.i32 == hfErrorToInt(expectedError), std::to_string(result[0].of.i32)); }; // hfs.getTxNestedField(locator); @@ -1692,7 +1693,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, signerKeylet); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); // hfs.getCurrentLedgerObjNestedField(baseLocatorSlice); // Locator for base field @@ -1738,7 +1739,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECTS( - result[0].of.i32 == HfErrorToInt(expectedError), std::to_string(result[0].of.i32)); + result[0].of.i32 == hfErrorToInt(expectedError), std::to_string(result[0].of.i32)); }; // hfs.getCurrentLedgerObjNestedField(locator); // Locator for non-existent base field @@ -1804,7 +1805,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl dummyHfs(ac, dummyEscrow); auto import2 = xrpl::createWasmImport(dummyHfs); - dummyHfs.setRT(&vrt2); + dummyHfs.setRT(vrt2); std::vector const locatorVec = {sfAccount.getCode()}; vrt2.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); @@ -1848,7 +1849,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); // Cache the SignerList ledger object in slot 1 auto const signerListKeylet = keylet::signers(env.master.id()); @@ -1997,7 +1998,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECTS( - result[0].of.i32 == HfErrorToInt(expectedError), std::to_string(result[0].of.i32)); + result[0].of.i32 == hfErrorToInt(expectedError), std::to_string(result[0].of.i32)); }; // Error: base field not found @@ -2113,7 +2114,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); // Should return 2 for sfMemos // hfs.getTxArrayLen(sfMemos); @@ -2200,7 +2201,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, signerKeylet); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); // hfs.getCurrentLedgerObjArrayLen(sfSignerEntries); { @@ -2253,7 +2254,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl dummyHfs(ac, dummyEscrow); auto import2 = xrpl::createWasmImport(dummyHfs); - dummyHfs.setRT(&vrt2); + dummyHfs.setRT(vrt2); // auto const len = dummyHfs.getCurrentLedgerObjArrayLen(sfMemos); WasmValVec params(1), result(1); @@ -2291,7 +2292,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); auto const signerListKeylet = keylet::signers(env.master.id()); // hfs.cacheLedgerObj(signerListKeylet.key, 1); @@ -2416,7 +2417,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); // Helper for error checks auto expectError = [&](std::vector const& locatorVec, @@ -2434,7 +2435,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECTS( - result[0].of.i32 == HfErrorToInt(expectedError), std::to_string(result[0].of.i32)); + result[0].of.i32 == hfErrorToInt(expectedError), std::to_string(result[0].of.i32)); }; // Locator for sfMemos @@ -2483,7 +2484,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, signerKeylet); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); // Helper for error checks auto expectError = [&](std::vector const& locatorVec, @@ -2501,7 +2502,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECTS( - result[0].of.i32 == HfErrorToInt(expectedError), std::to_string(result[0].of.i32)); + result[0].of.i32 == hfErrorToInt(expectedError), std::to_string(result[0].of.i32)); }; // Locator for sfSignerEntries @@ -2534,7 +2535,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl dummyHfs(ac, dummyEscrow); auto import2 = xrpl::createWasmImport(dummyHfs); - dummyHfs.setRT(&vrt2); + dummyHfs.setRT(vrt2); std::vector locatorVec = {sfAccount.getCode()}; // auto const result = dummyHfs.getCurrentLedgerObjNestedArrayLen(locator); @@ -2575,7 +2576,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); auto const signerListKeylet = keylet::signers(env.master.id()); // hfs.cacheLedgerObj(signerListKeylet.key, 1); @@ -2632,7 +2633,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECTS( - result[0].of.i32 == HfErrorToInt(expectedError), std::to_string(result[0].of.i32)); + result[0].of.i32 == hfErrorToInt(expectedError), std::to_string(result[0].of.i32)); }; // Error: non-array field @@ -2695,7 +2696,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, escrowKeylet); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); // Should succeed for small data Bytes data(10, 0x42); @@ -2712,7 +2713,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } // Should fail for too large data - Bytes bigData(maxWasmDataLength + 1, 0x42); + Bytes bigData(kMaxWasmDataLength + 1, 0x42); // hfs.updateData(Slice(bigData.data(), bigData.size())); { vrt.setBytes(0, bigData.data(), bigData.size()); @@ -2722,7 +2723,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( - result[0].of.i32 == HfErrorToInt(HostFunctionError::DataFieldTooLarge)); + result[0].of.i32 == hfErrorToInt(HostFunctionError::DataFieldTooLarge)); } } @@ -2741,7 +2742,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); // Generate a keypair and sign a message auto const kp = generateKeyPair(KeyType::Secp256k1, randomSeed()); @@ -2827,7 +2828,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite badPk.size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == HfErrorToInt(HostFunctionError::InvalidParams)); + BEAST_EXPECT(result[0].of.i32 == hfErrorToInt(HostFunctionError::InvalidParams)); } // Should fail for empty public key @@ -2852,7 +2853,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT(result[0].of.i32 == HfErrorToInt(HostFunctionError::InvalidParams)); + BEAST_EXPECT(result[0].of.i32 == hfErrorToInt(HostFunctionError::InvalidParams)); } // Should fail for empty signature @@ -2919,7 +2920,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); std::string data = "hello world"; // hfs.computeSha512HalfHash(Slice(data.data(), data.size())); @@ -2965,7 +2966,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite auto const baseMpt = makeMptID(1, masterID); auto imp = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); // Lambda to compare a Bytes (std::vector) to a keylet auto compareKeylet = [](std::vector const& bytes, Keylet const& kl) { @@ -3771,7 +3772,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); // Should succeed for valid NFT { @@ -3819,7 +3820,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite 256); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) - BEAST_EXPECT(result[0].of.i32 == HfErrorToInt(HostFunctionError::InvalidAccount)); + BEAST_EXPECT(result[0].of.i32 == hfErrorToInt(HostFunctionError::InvalidAccount)); } // Should fail for invalid nftId @@ -3842,7 +3843,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite 256); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) - BEAST_EXPECT(result[0].of.i32 == HfErrorToInt(HostFunctionError::InvalidParams)); + BEAST_EXPECT(result[0].of.i32 == hfErrorToInt(HostFunctionError::InvalidParams)); } // Should fail for invalid nftId @@ -3866,7 +3867,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( - result[0].of.i32 == HfErrorToInt(HostFunctionError::LedgerObjNotFound)); + result[0].of.i32 == hfErrorToInt(HostFunctionError::LedgerObjNotFound)); } { @@ -3887,7 +3888,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite 256); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) - BEAST_EXPECT(result[0].of.i32 == HfErrorToInt(HostFunctionError::FieldNotFound)); + BEAST_EXPECT(result[0].of.i32 == hfErrorToInt(HostFunctionError::FieldNotFound)); } } @@ -3912,7 +3913,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); // Should succeed for valid NFT id { @@ -3954,7 +3955,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite AccountID::size()); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) - BEAST_EXPECT(result[0].of.i32 == HfErrorToInt(HostFunctionError::InvalidParams)); + BEAST_EXPECT(result[0].of.i32 == hfErrorToInt(HostFunctionError::InvalidParams)); } } @@ -3979,7 +3980,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); // hfs.getNFTTaxon(nftId); vrt.setBytes(0, nftId.data(), uint256::size()); @@ -4022,7 +4023,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); { // hfs.getNFTFlags(nftId); @@ -4070,7 +4071,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); { // hfs.getNFTTransferFee(nftId); @@ -4129,7 +4130,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); { // hfs.getNFTSerial(nftId); @@ -4194,7 +4195,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite VirtualRuntime vrt; auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); std::string const msg = "test trace"; std::string data = "abc"; @@ -4266,7 +4267,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite VirtualRuntime vrt; auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); std::string const msg = "test trace"; std::string data = "abc"; @@ -4312,7 +4313,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite VirtualRuntime vrt; auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); std::string const msg = "trace number"; int64_t const num = 123456789; @@ -4345,7 +4346,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite VirtualRuntime vrt; auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); std::string const msg = "trace number"; int64_t const num = 123456789; @@ -4381,7 +4382,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite VirtualRuntime vrt; auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); std::string const msg = "trace account"; auto const& accountId = env.master.id(); @@ -4422,7 +4423,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite VirtualRuntime vrt; auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); std::string msg = "trace account"; auto const& accountId = env.master.id(); @@ -4466,7 +4467,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite VirtualRuntime vrt; auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); std::string const msg = "trace amount"; STAmount const amount = XRP(12345); @@ -4559,7 +4560,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite VirtualRuntime vrt; auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); std::string const msg = "trace amount"; STAmount const amount = XRP(12345); @@ -4688,7 +4689,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite VirtualRuntime vrt; auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); std::string const msg = "trace float"; @@ -4744,7 +4745,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite VirtualRuntime vrt; auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); std::string const msg = "trace float"; @@ -4783,7 +4784,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); { // hfs.floatFromInt(min64, -1); @@ -4895,7 +4896,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); { // hfs.floatFromUint(std::numeric_limits::min(), -1); @@ -5001,7 +5002,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); { // hfs.floatFromMantExp(1, 0, -1); @@ -5238,7 +5239,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); { // hfs.floatCompare(Slice(), Slice()); @@ -5358,7 +5359,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); { // hfs.floatAdd(Slice(), Slice(), -1); @@ -5517,7 +5518,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); { // hfs.floatSubtract(Slice(), Slice(), -1); @@ -5674,7 +5675,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); { // hfs.floatMultiply(Slice(), Slice(), -1); @@ -5855,7 +5856,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); { // hfs.floatDivide(Slice(), Slice(), -1); @@ -6036,7 +6037,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); { // hfs.floatRoot(Slice(), 2, -1); WasmValVec params(6), result(1); @@ -6236,7 +6237,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); { // hfs.floatPower(Slice(), 2, -1); WasmValVec params(6), result(1); @@ -6476,7 +6477,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); { // hfs.floatFromSTAmount(amount, -1); @@ -6677,7 +6678,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); // Test with invalid rounding mode { @@ -6788,7 +6789,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); { // hfs.floatToInt(makeSlice(float1), -1); @@ -7113,7 +7114,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); { // hfs.floatToMantExp(makeSlice(invalid)); @@ -7397,7 +7398,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmHostFunctionsImpl hfs(ac, dummyEscrow); auto import = xrpl::createWasmImport(hfs); - hfs.setRT(&vrt); + hfs.setRT(vrt); bool ex = false; try diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index 26d30dd53c..d0dc19d52d 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -1,3 +1,5 @@ +#pragma once + #include #include #include @@ -18,62 +20,35 @@ namespace xrpl::test { -struct TestLedgerDataProvider : public HostFunctions +class TestLedgerDataProvider : public HostFunctions { - jtx::Env& env; - void* rt = nullptr; + jtx::Env& env_; public: - TestLedgerDataProvider(jtx::Env& env) : HostFunctions(env.journal), env(env) + TestLedgerDataProvider(jtx::Env& env) : HostFunctions(env.journal), env_(env) { } - void - setRT(void* rt) override - { - this->rt = rt; - } - - [[nodiscard]] void* - getRT() const override - { - return rt; - } - Expected getLedgerSqn() const override { - return env.current()->seq(); + return env_.current()->seq(); } }; -struct TestHostFunctions : public HostFunctions +class TestHostFunctions : public HostFunctions { - test::jtx::Env& env; - AccountID accountID; - Bytes data; - int clock_drift = 0; - void* rt = nullptr; +protected: + test::jtx::Env& env_; + AccountID accountID_; + Bytes data_; public: - TestHostFunctions(test::jtx::Env& env, int cd = 0) - : HostFunctions(env.journal), env(env), clock_drift(cd) + TestHostFunctions(test::jtx::Env& env) : HostFunctions(env.journal), env_(env) { - accountID = env.master.id(); + accountID_ = env.master.id(); std::string t = "10000"; - data = Bytes{t.begin(), t.end()}; - } - - void - setRT(void* rt) override - { - this->rt = rt; - } - - [[nodiscard]] void* - getRT() const override - { - return rt; + data_ = Bytes{t.begin(), t.end()}; } Expected @@ -91,7 +66,7 @@ public: Expected getParentLedgerHash() const override { - return env.current()->header().parentHash; + return env_.current()->header().parentHash; } Expected @@ -122,15 +97,15 @@ public: getTxField(SField const& fname) const override { if (fname == sfAccount) - { - return Bytes(accountID.begin(), accountID.end()); - } + return Bytes(accountID_.begin(), accountID_.end()); + if (fname == sfFee) { int64_t x = 235; uint8_t const* p = reinterpret_cast(&x); return Bytes{p, p + sizeof(x)}; } + if (fname == sfSequence) { auto const x = getLedgerSqn(); @@ -141,6 +116,7 @@ public: auto const* e = reinterpret_cast(&data + 1); return Bytes{b, e}; } + return Bytes(); } @@ -149,25 +125,21 @@ public: { auto const& sn = fname.getName(); if (sn == "Destination" || sn == "Account") - { - return Bytes(accountID.begin(), accountID.end()); - } + return Bytes(accountID_.begin(), accountID_.end()); if (sn == "Data") - { - return data; - } + return data_; if (sn == "FinishAfter") { - auto t = env.current()->parentCloseTime().time_since_epoch().count(); + auto t = env_.current()->parentCloseTime().time_since_epoch().count(); std::string s = std::to_string(t); return Bytes{s.begin(), s.end()}; } - return Unexpected(HostFunctionError::INTERNAL); + return Unexpected(HostFunctionError::Internal); } Expected - getLedgerObjField(int32_t cacheIdx, SField const& fname) const override + getLedgerObjField(int32_t, SField const& fname) const override { if (fname == sfBalance) { @@ -175,11 +147,11 @@ public: uint8_t const* p = reinterpret_cast(&x); return Bytes{p, p + sizeof(x)}; } + if (fname == sfAccount) - { - return Bytes(accountID.begin(), accountID.end()); - } - return data; + return Bytes(accountID_.begin(), accountID_.end()); + + return data_; } Expected @@ -190,9 +162,7 @@ public: int32_t const* l = reinterpret_cast(locator.data()); int32_t const sfield = l[0]; if (sfield == sfAccount.getCode()) - { - return Bytes(accountID.begin(), accountID.end()); - } + return Bytes(accountID_.begin(), accountID_.end()); } uint8_t const a[] = {0x2b, 0x6a, 0x23, 0x2a, 0xa4, 0xc4, 0xbe, 0x41, 0xbf, 0x49, 0xd2, 0x45, 0x9f, 0xa4, 0xa0, 0x34, 0x7e, 0x1b, 0x54, 0x3a, 0x4c, 0x92, @@ -208,9 +178,7 @@ public: int32_t const* l = reinterpret_cast(locator.data()); int32_t const sfield = l[0]; if (sfield == sfAccount.getCode()) - { - return Bytes(accountID.begin(), accountID.end()); - } + return Bytes(accountID_.begin(), accountID_.end()); } uint8_t const a[] = {0x2b, 0x6a, 0x23, 0x2a, 0xa4, 0xc4, 0xbe, 0x41, 0xbf, 0x49, 0xd2, 0x45, 0x9f, 0xa4, 0xa0, 0x34, 0x7e, 0x1b, 0x54, 0x3a, 0x4c, 0x92, @@ -226,9 +194,7 @@ public: int32_t const* l = reinterpret_cast(locator.data()); int32_t const sfield = l[0]; if (sfield == sfAccount.getCode()) - { - return Bytes(accountID.begin(), accountID.end()); - } + return Bytes(accountID_.begin(), accountID_.end()); } uint8_t const a[] = {0x2b, 0x6a, 0x23, 0x2a, 0xa4, 0xc4, 0xbe, 0x41, 0xbf, 0x49, 0xd2, 0x45, 0x9f, 0xa4, 0xa0, 0x34, 0x7e, 0x1b, 0x54, 0x3a, 0x4c, 0x92, @@ -287,7 +253,7 @@ public: Expected computeSha512HalfHash(Slice const& data) const override { - return env.current()->header().parentHash; + return env_.current()->header().parentHash; } Expected @@ -352,9 +318,7 @@ public: getNFT(AccountID const& account, uint256 const& nftId) const override { if (!account || !nftId) - { return Unexpected(HostFunctionError::InvalidParams); - } std::string s = "https://ripple.com"; return Bytes(s.begin(), s.end()); @@ -363,7 +327,7 @@ public: Expected getNFTIssuer(uint256 const& nftId) const override { - return Bytes(accountID.begin(), accountID.end()); + return Bytes(accountID_.begin(), accountID_.end()); } Expected @@ -543,22 +507,21 @@ public: } }; -struct TestHostFunctionsSink : public TestHostFunctions +class TestHostFunctionsSink : public TestHostFunctions { - test::StreamSink sink; - void const* rt = nullptr; + test::StreamSink sink_; public: - explicit TestHostFunctionsSink(test::jtx::Env& env, int cd = 0) - : TestHostFunctions(env, cd), sink(beast::Severity::Debug) + explicit TestHostFunctionsSink(test::jtx::Env& env) + : TestHostFunctions(env), sink_(beast::Severity::Debug) { - j = beast::Journal(sink); + j_ = beast::Journal(sink_); } test::StreamSink& getSink() { - return sink; + return sink_; } }; diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index c1879d1fe9..49a29f1563 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -7,7 +7,8 @@ #include #include #include // IWYU pragma: keep -#include +#include +#include #include #include @@ -218,7 +219,7 @@ struct Wasm_test : public beast::unit_test::Suite HostFunctions hfs; ImportVec imports; - WasmImpFunc(imports, "func-add", reinterpret_cast(&add), &hfs); + WasmImpFunc(imports, "func-add", reinterpret_cast(&add), hfs); auto re = vm.run(wasm, hfs, 10'000'000, "addTwo", wasmParams(1234, 5678), imports); @@ -287,7 +288,7 @@ struct Wasm_test : public beast::unit_test::Suite Env env{*this}; TestLedgerDataProvider hfs(env); ImportVec imports; - WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn", &hfs, 33); + WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn", hfs, 33); auto& engine = WasmEngine::instance(); auto re = @@ -316,8 +317,8 @@ struct Wasm_test : public beast::unit_test::Suite Env env{*this}; TestLedgerDataProvider hfs(env); ImportVec imports; - WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn", &hfs, 33); - WASM_IMPORT_FUNC2(imports, getParentLedgerHash, "get_parent_ledger_hash", &hfs, 60); + WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn", hfs, 33); + WASM_IMPORT_FUNC2(imports, getParentLedgerHash, "get_parent_ledger_hash", hfs, 60); auto& engine = WasmEngine::instance(); // Test exp_func1() - should return 1 @@ -396,7 +397,7 @@ struct Wasm_test : public beast::unit_test::Suite auto& engine = WasmEngine::instance(); - TestHostFunctions hfs(env, 0); + TestHostFunctions hfs(env); auto imp = createWasmImport(hfs); for (auto& i : imp) i.second.second.gas = 0; @@ -420,7 +421,7 @@ struct Wasm_test : public beast::unit_test::Suite auto& engine = WasmEngine::instance(); - TestHostFunctions hfs(env, 0); + TestHostFunctions hfs(env); auto const imp = createWasmImport(hfs); auto re = engine.run( @@ -437,7 +438,7 @@ struct Wasm_test : public beast::unit_test::Suite auto& engine = WasmEngine::instance(); - TestHostFunctions hfs(env, 0); + TestHostFunctions hfs(env); auto const imp = createWasmImport(hfs); auto re = @@ -463,14 +464,14 @@ struct Wasm_test : public beast::unit_test::Suite using namespace test::jtx; Env env{*this}; { - TestHostFunctions hfs(env, 0); + TestHostFunctions hfs(env); auto re = runEscrowWasm(allHFWasm, hfs, 100'000, escrowFunctionName, {}); checkResult(re, 1, 70'340); } { // Invalid gas limit (0) should be rejected (boundary condition) - TestHostFunctions hfs(env, 0); + TestHostFunctions hfs(env); auto re = runEscrowWasm(allHFWasm, hfs, -1, escrowFunctionName, {}); BEAST_EXPECT(!re.has_value()); BEAST_EXPECT(re.error() == temBAD_AMOUNT); @@ -478,7 +479,7 @@ struct Wasm_test : public beast::unit_test::Suite { // Invalid gas limit (-1) should be rejected - TestHostFunctions hfs(env, 0); + TestHostFunctions hfs(env); auto re = runEscrowWasm(allHFWasm, hfs, 0, escrowFunctionName, {}); BEAST_EXPECT(!re.has_value()); BEAST_EXPECT(re.error() == temBAD_AMOUNT); @@ -486,7 +487,7 @@ struct Wasm_test : public beast::unit_test::Suite { // max() gas - TestHostFunctions hfs(env, 0); + TestHostFunctions hfs(env); auto re = runEscrowWasm( allHFWasm, hfs, std::numeric_limits::max(), escrowFunctionName, {}); checkResult(re, 1, 70'340); @@ -562,7 +563,7 @@ struct Wasm_test : public beast::unit_test::Suite { // infinite loop auto const infiniteLoopWasm = hexToBytes(kInfiniteLoopWasmHex); std::string const funcName("loop"); - TestHostFunctions hfs(env, 0); + TestHostFunctions hfs(env); // infinite loop should be caught and fail auto const re = runEscrowWasm(infiniteLoopWasm, hfs, 1'000'000, funcName, {}); @@ -577,7 +578,7 @@ struct Wasm_test : public beast::unit_test::Suite auto const lgrSqnWasm = hexToBytes(kLedgerSqnWasmHex); TestLedgerDataProvider hfs(env); ImportVec imports; - WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn2", &hfs); + WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn2", hfs); auto& engine = WasmEngine::instance(); @@ -588,12 +589,12 @@ struct Wasm_test : public beast::unit_test::Suite } { - // bad import format + // HF unsync between import and VM auto const lgrSqnWasm = hexToBytes(kLedgerSqnWasmHex); TestLedgerDataProvider hfs(env); + TestLedgerDataProvider hfs2(env); ImportVec imports; - WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn", &hfs); - imports["get_ledger_sqn"].first = nullptr; + WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn", hfs2); auto& engine = WasmEngine::instance(); @@ -608,7 +609,7 @@ struct Wasm_test : public beast::unit_test::Suite auto const lgrSqnWasm = hexToBytes(kLedgerSqnWasmHex); TestLedgerDataProvider hfs(env); ImportVec imports; - WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn", &hfs); + WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn", hfs); auto& engine = WasmEngine::instance(); auto re = engine.run(lgrSqnWasm, hfs, 1'000'000, "func1", {}, imports, env.journal); @@ -630,7 +631,7 @@ struct Wasm_test : public beast::unit_test::Suite { auto const floatTestWasm = hexToBytes(kFloatTestsWasmHex); - TestHostFunctions hfs(env, 0); + TestHostFunctions hfs(env); auto re = runEscrowWasm(floatTestWasm, hfs, 200'000, funcName, {}); checkResult(re, 1, 134'938); env.close(); @@ -639,7 +640,7 @@ struct Wasm_test : public beast::unit_test::Suite { auto const float0Wasm = hexToBytes(kFloat0Hex); - TestHostFunctions hfs(env, 0); + TestHostFunctions hfs(env); auto re = runEscrowWasm(float0Wasm, hfs, 100'000, funcName, {}); checkResult(re, 1, 4'309); env.close(); @@ -656,7 +657,7 @@ struct Wasm_test : public beast::unit_test::Suite Env env{*this}; auto const codecovWasm = hexToBytes(kCodecovTestsWasmHex); - TestHostFunctions hfs(env, 0); + TestHostFunctions hfs(env); auto const allowance = 220'169; auto re = runEscrowWasm(codecovWasm, hfs, allowance, escrowFunctionName, {}); @@ -674,7 +675,7 @@ struct Wasm_test : public beast::unit_test::Suite auto disabledFloatWasm = hexToBytes(kDisabledFloatHex); std::string const funcName("finish"); - TestHostFunctions hfs(env, 0); + TestHostFunctions hfs(env); { // f32 set constant, opcode disabled exception @@ -810,7 +811,7 @@ struct Wasm_test : public beast::unit_test::Suite using namespace test::jtx; Env env{*this}; - TestHostFunctions hfs(env, 0); + TestHostFunctions hfs(env); auto imports = createWasmImport(hfs); { // Calls float_from_uint with bad alignment. @@ -832,7 +833,7 @@ struct Wasm_test : public beast::unit_test::Suite { using namespace test::jtx; Env env(*this); - TestHostFunctions hfs(env, 0); + TestHostFunctions hfs(env); testcase("Wasm invalid return type"); @@ -887,7 +888,7 @@ struct Wasm_test : public beast::unit_test::Suite { using namespace test::jtx; Env env(*this); - TestHostFunctions hfs(env, 0); + TestHostFunctions hfs(env); testcase("Wasm invalid params"); @@ -999,7 +1000,7 @@ struct Wasm_test : public beast::unit_test::Suite using namespace test::jtx; Env env{*this}; - TestHostFunctions hfs(env, 0); + TestHostFunctions hfs(env); auto imports = createWasmImport(hfs); // add 1k parameter (max that wasmi support) @@ -1054,7 +1055,7 @@ struct Wasm_test : public beast::unit_test::Suite Env env{*this}; auto& engine = WasmEngine::instance(); - TestHostFunctions hfs(env, 0); + TestHostFunctions hfs(env); auto imports = createWasmImport(hfs); env.close(); From d582ae79900fdb7de3505baae5ca57684d196eae Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Wed, 3 Jun 2026 21:53:12 -0400 Subject: [PATCH 126/137] HF one entry point (#7393) Add one entry point for all HF for centralized exceptions handling, gas calculation and general checks. Add exception handling for HF Add FieldLocator object Switch pointers to references for HF and runtime Max size for parameters and sfData field is 1 kb now Fix Allhf unittest, to provide correct locator --- include/xrpl/protocol/Protocol.h | 5 +- include/xrpl/tx/wasm/HostFunc.h | 21 +- include/xrpl/tx/wasm/HostFuncImpl.h | 12 +- include/xrpl/tx/wasm/HostFuncWrapper.h | 207 +- include/xrpl/tx/wasm/WasmCommon.h | 51 + include/xrpl/tx/wasm/WasmImportsHelper.h | 15 +- src/libxrpl/tx/wasm/HostFuncImplGetter.cpp | 43 +- src/libxrpl/tx/wasm/HostFuncWrapper.cpp | 924 ++++----- src/libxrpl/tx/wasm/WasmiVM.cpp | 11 +- src/test/app/HostFuncImpl_test.cpp | 1812 +++-------------- src/test/app/TestHostFunctions.h | 27 +- src/test/app/Wasm_test.cpp | 32 +- .../all_host_functions/src/lib.rs | 8 +- src/test/app/wasm_fixtures/fixtures.cpp | 323 ++- src/test/app/wasm_fixtures/float_0/src/lib.rs | 7 - 15 files changed, 1050 insertions(+), 2448 deletions(-) diff --git a/include/xrpl/protocol/Protocol.h b/include/xrpl/protocol/Protocol.h index 512998081e..2e12c7fa55 100644 --- a/include/xrpl/protocol/Protocol.h +++ b/include/xrpl/protocol/Protocol.h @@ -252,10 +252,7 @@ constexpr std::uint8_t kVaultMaximumIouScale = 18; constexpr std::uint8_t kMaxAssetCheckDepth = 5; /** Maximum length of a Data field in Escrow object that can be updated by WASM code. */ -constexpr std::size_t kMaxWasmDataLength = 4 * 1024; // 4KB - -/** Maximum length of parameters passed from WASM code to host functions. */ -constexpr std::size_t kMaxWasmParamLength = 1024; // 1KB +constexpr std::size_t kMaxWasmDataLength = 1 * 1024; // 1KB /** A ledger index. */ using LedgerIndex = std::uint32_t; diff --git a/include/xrpl/tx/wasm/HostFunc.h b/include/xrpl/tx/wasm/HostFunc.h index 3fc974423c..914e9b6ed1 100644 --- a/include/xrpl/tx/wasm/HostFunc.h +++ b/include/xrpl/tx/wasm/HostFunc.h @@ -10,6 +10,9 @@ #include #include +#include +#include + namespace xrpl { namespace wasm_float { @@ -85,12 +88,12 @@ public: rt_ = std::nullopt; } - [[nodiscard]] WasmRuntimeWrapper* + [[nodiscard]] WasmRuntimeWrapper& getRT() const { if (!rt_) - return nullptr; // LCOV_EXCL_LINE - return &rt_->get(); + Throw("Wasm runtime not set"); + return rt_->get(); } [[nodiscard]] beast::Journal @@ -168,19 +171,19 @@ public: } virtual Expected - getTxNestedField(Slice const& locator) const + getTxNestedField(FieldLocator const& locator) const { return Unexpected(HostFunctionError::Internal); } virtual Expected - getCurrentLedgerObjNestedField(Slice const& locator) const + getCurrentLedgerObjNestedField(FieldLocator const& locator) const { return Unexpected(HostFunctionError::Internal); } virtual Expected - getLedgerObjNestedField(int32_t cacheIdx, Slice const& locator) const + getLedgerObjNestedField(int32_t cacheIdx, FieldLocator const& locator) const { return Unexpected(HostFunctionError::Internal); } @@ -204,19 +207,19 @@ public: } virtual Expected - getTxNestedArrayLen(Slice const& locator) const + getTxNestedArrayLen(FieldLocator const& locator) const { return Unexpected(HostFunctionError::Internal); } virtual Expected - getCurrentLedgerObjNestedArrayLen(Slice const& locator) const + getCurrentLedgerObjNestedArrayLen(FieldLocator const& locator) const { return Unexpected(HostFunctionError::Internal); } virtual Expected - getLedgerObjNestedArrayLen(int32_t cacheIdx, Slice const& locator) const + getLedgerObjNestedArrayLen(int32_t cacheIdx, FieldLocator const& locator) const { return Unexpected(HostFunctionError::Internal); } diff --git a/include/xrpl/tx/wasm/HostFuncImpl.h b/include/xrpl/tx/wasm/HostFuncImpl.h index 6741246d08..950856e828 100644 --- a/include/xrpl/tx/wasm/HostFuncImpl.h +++ b/include/xrpl/tx/wasm/HostFuncImpl.h @@ -108,13 +108,13 @@ public: getLedgerObjField(int32_t cacheIdx, SField const& fname) const override; Expected - getTxNestedField(Slice const& locator) const override; + getTxNestedField(FieldLocator const& locator) const override; Expected - getCurrentLedgerObjNestedField(Slice const& locator) const override; + getCurrentLedgerObjNestedField(FieldLocator const& locator) const override; Expected - getLedgerObjNestedField(int32_t cacheIdx, Slice const& locator) const override; + getLedgerObjNestedField(int32_t cacheIdx, FieldLocator const& locator) const override; Expected getTxArrayLen(SField const& fname) const override; @@ -126,13 +126,13 @@ public: getLedgerObjArrayLen(int32_t cacheIdx, SField const& fname) const override; Expected - getTxNestedArrayLen(Slice const& locator) const override; + getTxNestedArrayLen(FieldLocator const& locator) const override; Expected - getCurrentLedgerObjNestedArrayLen(Slice const& locator) const override; + getCurrentLedgerObjNestedArrayLen(FieldLocator const& locator) const override; Expected - getLedgerObjNestedArrayLen(int32_t cacheIdx, Slice const& locator) const override; + getLedgerObjNestedArrayLen(int32_t cacheIdx, FieldLocator const& locator) const override; Expected updateData(Slice const& data) override; diff --git a/include/xrpl/tx/wasm/HostFuncWrapper.h b/include/xrpl/tx/wasm/HostFuncWrapper.h index d917c56df9..825f5344ad 100644 --- a/include/xrpl/tx/wasm/HostFuncWrapper.h +++ b/include/xrpl/tx/wasm/HostFuncWrapper.h @@ -8,110 +8,86 @@ namespace xrpl { +#define WASM_CB_PARAMS_LIST void *env, wasm_val_vec_t const *params, wasm_val_vec_t *results +#define WASM_SECONDARY_CB_PARAMS_LIST \ + HostFunctions &hf, wasm_val_vec_t const *params, wasm_val_vec_t *results + +wasm_trap_t* HostFuncMain_wrap(WASM_CB_PARAMS_LIST); + using getLedgerSqn_proto = int32_t(uint8_t*, int32_t); -wasm_trap_t* -getLedgerSqn_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* getLedgerSqn_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using getParentLedgerTime_proto = int32_t(uint8_t*, int32_t); -wasm_trap_t* -getParentLedgerTime_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* getParentLedgerTime_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using getParentLedgerHash_proto = int32_t(uint8_t*, int32_t); -wasm_trap_t* -getParentLedgerHash_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* getParentLedgerHash_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using getBaseFee_proto = int32_t(uint8_t*, int32_t); -wasm_trap_t* -getBaseFee_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* getBaseFee_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using isAmendmentEnabled_proto = int32_t(uint8_t const*, int32_t); -wasm_trap_t* -isAmendmentEnabled_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* isAmendmentEnabled_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using cacheLedgerObj_proto = int32_t(uint8_t const*, int32_t, int32_t); -wasm_trap_t* -cacheLedgerObj_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* cacheLedgerObj_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using getTxField_proto = int32_t(int32_t, uint8_t*, int32_t); -wasm_trap_t* -getTxField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* getTxField_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using getCurrentLedgerObjField_proto = int32_t(int32_t, uint8_t*, int32_t); -wasm_trap_t* -getCurrentLedgerObjField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* getCurrentLedgerObjField_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using getLedgerObjField_proto = int32_t(int32_t, int32_t, uint8_t*, int32_t); -wasm_trap_t* -getLedgerObjField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* getLedgerObjField_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using getTxNestedField_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* -getTxNestedField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* getTxNestedField_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using getCurrentLedgerObjNestedField_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* -getCurrentLedgerObjNestedField_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +wasm_trap_t* getCurrentLedgerObjNestedField_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using getLedgerObjNestedField_proto = int32_t(int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* -getLedgerObjNestedField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* getLedgerObjNestedField_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using getTxArrayLen_proto = int32_t(int32_t); -wasm_trap_t* -getTxArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* getTxArrayLen_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using getCurrentLedgerObjArrayLen_proto = int32_t(int32_t); -wasm_trap_t* -getCurrentLedgerObjArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* getCurrentLedgerObjArrayLen_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using getLedgerObjArrayLen_proto = int32_t(int32_t, int32_t); -wasm_trap_t* -getLedgerObjArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* getLedgerObjArrayLen_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using getTxNestedArrayLen_proto = int32_t(uint8_t const*, int32_t); -wasm_trap_t* -getTxNestedArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* getTxNestedArrayLen_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using getCurrentLedgerObjNestedArrayLen_proto = int32_t(uint8_t const*, int32_t); -wasm_trap_t* -getCurrentLedgerObjNestedArrayLen_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results); +wasm_trap_t* getCurrentLedgerObjNestedArrayLen_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using getLedgerObjNestedArrayLen_proto = int32_t(int32_t, uint8_t const*, int32_t); -wasm_trap_t* -getLedgerObjNestedArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* getLedgerObjNestedArrayLen_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using updateData_proto = int32_t(uint8_t const*, int32_t); -wasm_trap_t* -updateData_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* updateData_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using checkSignature_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t const*, int32_t); -wasm_trap_t* -checkSignature_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* checkSignature_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using computeSha512HalfHash_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* -computeSha512HalfHash_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* computeSha512HalfHash_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using accountKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* -accountKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* accountKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using ammKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* -ammKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* ammKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using checkKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* -checkKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* checkKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using credentialKeylet_proto = int32_t( uint8_t const*, @@ -122,27 +98,22 @@ using credentialKeylet_proto = int32_t( int32_t, uint8_t*, int32_t); -wasm_trap_t* -credentialKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* credentialKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using delegateKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* -delegateKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* delegateKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using depositPreauthKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* -depositPreauthKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* depositPreauthKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using didKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* -didKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* didKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using escrowKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* -escrowKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* escrowKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using lineKeylet_proto = int32_t( uint8_t const*, @@ -153,33 +124,27 @@ using lineKeylet_proto = int32_t( int32_t, uint8_t*, int32_t); -wasm_trap_t* -lineKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* lineKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using mptIssuanceKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* -mptIssuanceKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* mptIssuanceKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using mptokenKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* -mptokenKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* mptokenKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using nftOfferKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* -nftOfferKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* nftOfferKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using offerKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* -offerKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* offerKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using oracleKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* -oracleKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* oracleKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using paychanKeylet_proto = int32_t( uint8_t const*, @@ -190,130 +155,100 @@ using paychanKeylet_proto = int32_t( int32_t, uint8_t*, int32_t); -wasm_trap_t* -paychanKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* paychanKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using permissionedDomainKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* -permissionedDomainKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* permissionedDomainKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using signersKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* -signersKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* signersKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using ticketKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* -ticketKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* ticketKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using vaultKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* -vaultKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* vaultKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using getNFT_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* -getNFT_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* getNFT_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using getNFTIssuer_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* -getNFTIssuer_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* getNFTIssuer_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using getNFTTaxon_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* -getNFTTaxon_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* getNFTTaxon_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using getNFTFlags_proto = int32_t(uint8_t const*, int32_t); -wasm_trap_t* -getNFTFlags_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* getNFTFlags_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using getNFTTransferFee_proto = int32_t(uint8_t const*, int32_t); -wasm_trap_t* -getNFTTransferFee_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* getNFTTransferFee_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using getNFTSerial_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* -getNFTSerial_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* getNFTSerial_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using trace_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, int32_t); -wasm_trap_t* -trace_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* trace_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using traceNum_proto = int32_t(uint8_t const*, int32_t, int64_t); -wasm_trap_t* -traceNum_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* traceNum_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using traceAccount_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t); -wasm_trap_t* -traceAccount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* traceAccount_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using traceFloat_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t); -wasm_trap_t* -traceFloat_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* traceFloat_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using traceAmount_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t); -wasm_trap_t* -traceAmount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* traceAmount_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using floatFromInt_proto = int32_t(int64_t, uint8_t*, int32_t, int32_t); -wasm_trap_t* -floatFromInt_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* floatFromInt_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using floatFromUint_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); -wasm_trap_t* -floatFromUint_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* floatFromUint_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using floatFromSTAmount_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); -wasm_trap_t* -floatFromSTAmount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* floatFromSTAmount_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using floatFromSTNumber_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); -wasm_trap_t* -floatFromSTNumber_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* floatFromSTNumber_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using floatToInt_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); -wasm_trap_t* -floatToInt_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* floatToInt_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using floatToMantExp_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t, uint8_t*, int32_t); -wasm_trap_t* -floatToMantExp_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* floatToMantExp_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using floatFromMantExp_proto = int32_t(int64_t, int32_t, uint8_t*, int32_t, int32_t); -wasm_trap_t* -floatFromMantExp_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* floatFromMantExp_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using floatCompare_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t); -wasm_trap_t* -floatCompare_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* floatCompare_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using floatAdd_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); -wasm_trap_t* -floatAdd_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* floatAdd_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using floatSubtract_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); -wasm_trap_t* -floatSubtract_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* floatSubtract_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using floatMultiply_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); -wasm_trap_t* -floatMultiply_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* floatMultiply_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using floatDivide_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t, int32_t); -wasm_trap_t* -floatDivide_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* floatDivide_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using floatRoot_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t, int32_t); -wasm_trap_t* -floatRoot_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* floatRoot_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using floatPower_proto = int32_t(uint8_t const*, int32_t, int32_t, uint8_t*, int32_t, int32_t); -wasm_trap_t* -floatPower_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); +wasm_trap_t* floatPower_wrap(WASM_SECONDARY_CB_PARAMS_LIST); } // namespace xrpl diff --git a/include/xrpl/tx/wasm/WasmCommon.h b/include/xrpl/tx/wasm/WasmCommon.h index 5e1b47b982..ed03a4aaf4 100644 --- a/include/xrpl/tx/wasm/WasmCommon.h +++ b/include/xrpl/tx/wasm/WasmCommon.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include @@ -60,6 +61,56 @@ struct WasmResult }; using EscrowResult = WasmResult; +class FieldLocator +{ + int32_t const* ptr_ = nullptr; + uint32_t size_ = 0; + std::vector buf_; + +public: + FieldLocator(std::vector&& buf) + : ptr_(&buf[0]), size_(buf.size()), buf_(std::move(buf)) + { + } + + FieldLocator(int32_t const* ptr, uint32_t const size) : ptr_(ptr), size_(size) + { + } + + FieldLocator(FieldLocator const&) = delete; + FieldLocator& + operator=(FieldLocator const&) = delete; + FieldLocator(FieldLocator&&) = default; + FieldLocator& + operator=(FieldLocator&&) = default; + + int32_t + operator[](unsigned i) const + { + if (i >= size_) + Throw("index out of bounds"); + return ptr_[i]; + } + + [[nodiscard]] uint32_t + size() const + { + return size_; + } + + [[nodiscard]] int32_t const* + data() const + { + return ptr_; + } + + [[nodiscard]] bool + empty() const + { + return size_ == 0; + } +}; + class WasmRuntimeWrapper { public: diff --git a/include/xrpl/tx/wasm/WasmImportsHelper.h b/include/xrpl/tx/wasm/WasmImportsHelper.h index 18ceb52973..a0bf74a089 100644 --- a/include/xrpl/tx/wasm/WasmImportsHelper.h +++ b/include/xrpl/tx/wasm/WasmImportsHelper.h @@ -14,13 +14,16 @@ namespace bft = boost::function_types; namespace xrpl { +using wasmSecondaryCbFuncType = + wasm_trap_t*(HostFunctions&, wasm_val_vec_t const*, wasm_val_vec_t*); + struct WasmImportFunc { std::string_view name; std::optional result; std::vector params; - // wasm_func_callback_with_env_t - void* wrap = nullptr; + + wasmSecondaryCbFuncType* wrap = nullptr; uint32_t gas = 0; }; @@ -105,7 +108,7 @@ void WasmImpFunc( ImportVec& v, std::string_view impName, - void* fWrap, + wasmSecondaryCbFuncType* fWrap, HostFunctions& hf, uint32_t gas = 0) { @@ -117,11 +120,9 @@ WasmImpFunc( v.emplace(impName, std::make_pair(HFRef(hf), std::move(e))); } -#define WASM_IMPORT_FUNC(v, f, ...) \ - WasmImpFunc(v, #f, reinterpret_cast(&f##_wrap), ##__VA_ARGS__) +#define WASM_IMPORT_FUNC(v, f, ...) WasmImpFunc(v, #f, &f##_wrap, ##__VA_ARGS__) // n - string literal name, must have static lifetime -#define WASM_IMPORT_FUNC2(v, f, n, ...) \ - WasmImpFunc(v, n, reinterpret_cast(&f##_wrap), ##__VA_ARGS__) +#define WASM_IMPORT_FUNC2(v, f, n, ...) WasmImpFunc(v, n, &f##_wrap, ##__VA_ARGS__) } // namespace xrpl diff --git a/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp index 3f94587dc4..f86bc5741e 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp @@ -4,7 +4,6 @@ #include #include #include -#include #include #include #include @@ -14,7 +13,6 @@ #include #include -#include #include #include @@ -134,33 +132,13 @@ noField(STBase const* field) } static Expected -locateField(STObject const& obj, Slice const& locator) +locateField(STObject const& obj, FieldLocator const& locator) { - if (locator.empty() || ((locator.size() & 3) != 0u)) // must be multiple of 4 - return Unexpected(HostFunctionError::LocatorMalformed); - - static_assert(kMaxWasmParamLength % sizeof(int32_t) == 0); - int32_t locBuf[kMaxWasmParamLength / sizeof(int32_t)]; - int32_t const* locPtr = &locBuf[0]; - int32_t const locSize = locator.size() / sizeof(int32_t); - - { - uintptr_t const p = reinterpret_cast(locator.data()); - if ((p & (alignof(int32_t) - 1)) != 0u) - { // unaligned - memcpy(&locBuf[0], locator.data(), locator.size()); - } - else - { - locPtr = reinterpret_cast(locator.data()); - } - } - STBase const* field = nullptr; auto const& knownSFields = SField::getKnownCodeToField(); { - int32_t const sfieldCode = adjustWasmEndianess(locPtr[0]); + int32_t const sfieldCode = adjustWasmEndianess(locator[0]); auto const it = knownSFields.find(sfieldCode); if (it == knownSFields.end()) return Unexpected(HostFunctionError::InvalidField); @@ -171,9 +149,9 @@ locateField(STObject const& obj, Slice const& locator) return Unexpected(HostFunctionError::FieldNotFound); } - for (int i = 1; i < locSize; ++i) + for (unsigned i = 1; i < locator.size(); ++i) { - int32_t const sfieldCode = adjustWasmEndianess(locPtr[i]); + int32_t const sfieldCode = adjustWasmEndianess(locator[i]); if (STI_ARRAY == field->getSType()) { @@ -285,7 +263,7 @@ WasmHostFunctionsImpl::getLedgerObjField(int32_t cacheIdx, SField const& fname) // Subsection: nested getters Expected -WasmHostFunctionsImpl::getTxNestedField(Slice const& locator) const +WasmHostFunctionsImpl::getTxNestedField(FieldLocator const& locator) const { auto const r = locateField(ctx_.tx, locator); if (!r) @@ -295,7 +273,7 @@ WasmHostFunctionsImpl::getTxNestedField(Slice const& locator) const } Expected -WasmHostFunctionsImpl::getCurrentLedgerObjNestedField(Slice const& locator) const +WasmHostFunctionsImpl::getCurrentLedgerObjNestedField(FieldLocator const& locator) const { auto const sle = getCurrentLedgerObj(); if (!sle.has_value()) @@ -309,7 +287,7 @@ WasmHostFunctionsImpl::getCurrentLedgerObjNestedField(Slice const& locator) cons } Expected -WasmHostFunctionsImpl::getLedgerObjNestedField(int32_t cacheIdx, Slice const& locator) const +WasmHostFunctionsImpl::getLedgerObjNestedField(int32_t cacheIdx, FieldLocator const& locator) const { auto const normalizedIdx = normalizeCacheIndex(cacheIdx); if (!normalizedIdx.has_value()) @@ -374,7 +352,7 @@ WasmHostFunctionsImpl::getLedgerObjArrayLen(int32_t cacheIdx, SField const& fnam // Subsection: nested array length getters Expected -WasmHostFunctionsImpl::getTxNestedArrayLen(Slice const& locator) const +WasmHostFunctionsImpl::getTxNestedArrayLen(FieldLocator const& locator) const { auto const r = locateField(ctx_.tx, locator); if (!r) @@ -385,7 +363,7 @@ WasmHostFunctionsImpl::getTxNestedArrayLen(Slice const& locator) const } Expected -WasmHostFunctionsImpl::getCurrentLedgerObjNestedArrayLen(Slice const& locator) const +WasmHostFunctionsImpl::getCurrentLedgerObjNestedArrayLen(FieldLocator const& locator) const { auto const sle = getCurrentLedgerObj(); if (!sle.has_value()) @@ -399,7 +377,8 @@ WasmHostFunctionsImpl::getCurrentLedgerObjNestedArrayLen(Slice const& locator) c } Expected -WasmHostFunctionsImpl::getLedgerObjNestedArrayLen(int32_t cacheIdx, Slice const& locator) const +WasmHostFunctionsImpl::getLedgerObjNestedArrayLen(int32_t cacheIdx, FieldLocator const& locator) + const { auto const normalizedIdx = normalizeCacheIndex(cacheIdx); if (!normalizedIdx.has_value()) diff --git a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp index a8a35fb8d7..9939407034 100644 --- a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp +++ b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp @@ -32,61 +32,95 @@ #include #include #include +#include #include #include +#include namespace xrpl { using SFieldCRef = std::reference_wrapper; -static inline HostFunctions* -getHF(void* env) +static inline Expected +checkGas(WasmRuntimeWrapper& rt, int64_t delta) { - auto const* udata = reinterpret_cast(env); - HostFunctions* hf = &udata->first.get(); // NOLINT - return hf; + int64_t const gas = rt.getGas(); + if (delta == 0) + return gas; + + int64_t const x = gas >= delta ? gas - delta : 0; + + if (rt.setGas(x) < 0) + return Unexpected(HostFunctionError::Internal); // LCOV_EXCL_LINE + + if (gas < delta) + return Unexpected(HostFunctionError::OutOfGas); + + return x; } static inline Expected -checkGas(void* env) +checkGas(WasmRuntimeWrapper& rt, WasmImportFunc const& impFunc) { - auto const* udata = reinterpret_cast(env); - HostFunctions const* hf = &udata->first.get(); - auto* rt = hf->getRT(); + auto g = checkGas(rt, impFunc.gas); - if (rt == nullptr) + if (!g) { - wasm_trap_t* trap = reinterpret_cast( // NOLINT - WasmEngine::instance().newTrap("hf no runtime")); // LCOV_EXCL_LINE - return Unexpected(trap); // LCOV_EXCL_LINE - } + if (g.error() == HostFunctionError::OutOfGas) + { + wasm_trap_t* const trap = // NOLINT + reinterpret_cast(WasmEngine::instance().newTrap("hf out of gas")); + return Unexpected(trap); + } - int64_t const gas = rt->getGas(); - WasmImportFunc const& impFunc = udata->second; - int64_t const x = gas >= impFunc.gas ? gas - impFunc.gas : 0; - - if (rt->setGas(x) < 0) - { wasm_trap_t* trap = reinterpret_cast( // NOLINT WasmEngine::instance().newTrap("can't set gas")); // LCOV_EXCL_LINE return Unexpected(trap); // LCOV_EXCL_LINE } - if (gas < impFunc.gas) + return *g; +} + +static Expected, wasm_trap_t*> +mainCheck(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +{ + if (env == nullptr) { - wasm_trap_t* const trap = // NOLINT - reinterpret_cast(WasmEngine::instance().newTrap("hf out of gas")); - return Unexpected(trap); + wasm_trap_t* trap = reinterpret_cast( // NOLINT + WasmEngine::instance().newTrap("no environment")); // LCOV_EXCL_LINE + return Unexpected(trap); // LCOV_EXCL_LINE } - return x; + if (params == nullptr) + { + wasm_trap_t* trap = reinterpret_cast( // NOLINT + WasmEngine::instance().newTrap("no params")); // LCOV_EXCL_LINE + return Unexpected(trap); // LCOV_EXCL_LINE + } + + if (results == nullptr) + { + wasm_trap_t* trap = reinterpret_cast( // NOLINT + WasmEngine::instance().newTrap("no results")); // LCOV_EXCL_LINE + return Unexpected(trap); // LCOV_EXCL_LINE + } + + WasmUserData const* udata = reinterpret_cast(env); + HostFunctions& hf = udata->first; + WasmRuntimeWrapper& rt = hf.getRT(); + WasmImportFunc const& impFunc = udata->second; + + if (auto g = checkGas(rt, impFunc); !g) + return Unexpected(g.error()); // LCOV_EXCL_LINE + + return std::tie(hf, impFunc); } //---------------------------------------------------------------------------------------------------------------------- static int32_t setData( - WasmRuntimeWrapper* runtime, + WasmRuntimeWrapper& runtime, int32_t dst, int32_t dstSize, uint8_t const* src, @@ -101,7 +135,7 @@ setData( if (srcSize > kMaxWasmDataLength) return hfErrorToInt(HostFunctionError::DataFieldTooLarge); - auto const memory = (runtime != nullptr) ? runtime->getMem() : Wmem(); + auto const memory = runtime.getMem(); // LCOV_EXCL_START if (memory.s == 0u) @@ -118,11 +152,7 @@ setData( } static Expected -getDataSlice( - WasmRuntimeWrapper* runtime, - wasm_val_vec_t const* params, - int32_t& i, - bool isUpdate = false) +getDataSlice(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& i) { int64_t const ptr = params->data[i].of.i32; int64_t const size = params->data[i + 1].of.i32; @@ -133,10 +163,10 @@ getDataSlice( if (size == 0) return Slice(); - if (size > (isUpdate ? kMaxWasmDataLength : kMaxWasmParamLength)) + if (size > kMaxWasmDataLength) return Unexpected(HostFunctionError::DataFieldTooLarge); - auto const memory = runtime != nullptr ? runtime->getMem() : Wmem(); + auto const memory = runtime.getMem(); // LCOV_EXCL_START if (memory.s == 0u) return Unexpected(HostFunctionError::NoMemExported); @@ -150,7 +180,7 @@ getDataSlice( } static Expected -getDataInt32(WasmRuntimeWrapper const*, wasm_val_vec_t const* params, int32_t& i) +getDataInt32(WasmRuntimeWrapper const&, wasm_val_vec_t const* params, int32_t& i) { auto const result = params->data[i].of.i32; i++; @@ -158,7 +188,7 @@ getDataInt32(WasmRuntimeWrapper const*, wasm_val_vec_t const* params, int32_t& i } static Expected -getDataInt64(WasmRuntimeWrapper const*, wasm_val_vec_t const* params, int32_t& i) +getDataInt64(WasmRuntimeWrapper const&, wasm_val_vec_t const* params, int32_t& i) { auto const result = params->data[i].of.i64; i++; @@ -167,7 +197,7 @@ getDataInt64(WasmRuntimeWrapper const*, wasm_val_vec_t const* params, int32_t& i template static Expected -getDataUnsigned(WasmRuntimeWrapper* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataUnsigned(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& i) { static_assert(std::is_unsigned_v); auto const r = getDataSlice(runtime, params, i); @@ -192,19 +222,19 @@ getDataUnsigned(WasmRuntimeWrapper* runtime, wasm_val_vec_t const* params, int32 } static Expected -getDataUInt32(WasmRuntimeWrapper* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataUInt32(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& i) { return getDataUnsigned(runtime, params, i); } static Expected -getDataUInt64(WasmRuntimeWrapper* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataUInt64(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& i) { return getDataUnsigned(runtime, params, i); } static Expected -getDataSField(WasmRuntimeWrapper* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataSField(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& i) { auto const& m = SField::getKnownCodeToField(); auto const it = m.find(params->data[i].of.i32); @@ -216,7 +246,7 @@ getDataSField(WasmRuntimeWrapper* runtime, wasm_val_vec_t const* params, int32_t } static Expected -getDataUInt256(WasmRuntimeWrapper* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataUInt256(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& i) { auto const slice = getDataSlice(runtime, params, i); if (!slice) @@ -229,7 +259,7 @@ getDataUInt256(WasmRuntimeWrapper* runtime, wasm_val_vec_t const* params, int32_ } static Expected -getDataAccountID(WasmRuntimeWrapper* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataAccountID(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& i) { auto const slice = getDataSlice(runtime, params, i); if (!slice) @@ -242,7 +272,7 @@ getDataAccountID(WasmRuntimeWrapper* runtime, wasm_val_vec_t const* params, int3 } static Expected -getDataCurrency(WasmRuntimeWrapper* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataCurrency(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& i) { auto const slice = getDataSlice(runtime, params, i); if (!slice) @@ -255,7 +285,7 @@ getDataCurrency(WasmRuntimeWrapper* runtime, wasm_val_vec_t const* params, int32 } static Expected -getDataAsset(WasmRuntimeWrapper* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataAsset(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& i) { auto const slice = getDataSlice(runtime, params, i); if (!slice) @@ -293,7 +323,7 @@ getDataAsset(WasmRuntimeWrapper* runtime, wasm_val_vec_t const* params, int32_t& } static Expected -getDataString(WasmRuntimeWrapper* runtime, wasm_val_vec_t const* params, int32_t& i) +getDataString(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& i) { auto const slice = getDataSlice(runtime, params, i); if (!slice) @@ -302,6 +332,34 @@ getDataString(WasmRuntimeWrapper* runtime, wasm_val_vec_t const* params, int32_t return std::string_view(reinterpret_cast(slice->data()), slice->size()); } +static Expected +getDataLocator(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& i) +{ + static_assert(kMaxWasmDataLength % sizeof(int32_t) == 0); + + auto const slice = getDataSlice(runtime, params, i); + if (!slice) + return Unexpected(slice.error()); + if (slice->empty() || ((slice->size() & 3) != 0u)) // must be multiple of 4 + return Unexpected(HostFunctionError::LocatorMalformed); + + uint32_t const locSize = slice->size() / sizeof(int32_t); + uintptr_t const p = reinterpret_cast(slice->data()); + + if ((p & (alignof(int32_t) - 1)) != 0u) + { // unaligned + + std::vector locBuf(locSize); + memcpy(&locBuf[0], slice->data(), slice->size()); + FieldLocator locator(std::move(locBuf)); + + return locator; + } + + int32_t const* locPtr = reinterpret_cast(slice->data()); + return FieldLocator(locPtr, locSize); +} + static inline std::nullptr_t hfResult(wasm_val_vec_t* results, int32_t value) { @@ -321,7 +379,7 @@ hfResult(wasm_val_vec_t* results, HostFunctionError value) template static std::nullptr_t returnResult( - WasmRuntimeWrapper* runtime, + WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, wasm_val_vec_t* results, Expected const& res, @@ -424,61 +482,85 @@ returnResult( //---------------------------------------------------------------------------------------------------------------------- wasm_trap_t* -getLedgerSqn_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +HostFuncMain_wrap(WASM_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); - int const index = 0; + [[maybe_unused]] std::string_view hfName; - return returnResult(runtime, params, results, hf->getLedgerSqn(), index); + try + { + auto const mc = mainCheck(env, params, results); + if (!mc) + return mc.error(); // LCOV_EXCL_LINE + auto& [hf, impFunc] = *mc; + + hfName = impFunc.name; + auto* fWrap = reinterpret_cast(impFunc.wrap); + return fWrap(hf, params, results); + } + catch (std::exception const& e) + { +#ifdef DEBUG_OUTPUT + std::cerr << "Hostfunction " << hfName << " exception: " << e.what() << std::endl; +#endif + wasm_trap_t* trap = reinterpret_cast( // NOLINT + WasmEngine::instance().newTrap(e.what())); // LCOV_EXCL_LINE + return trap; + } + catch (...) + { +#ifdef DEBUG_OUTPUT + std::cerr << "Hostfunction " << hfName << " unknown exception." << std::endl; +#endif + wasm_trap_t* trap = reinterpret_cast( // NOLINT + WasmEngine::instance().newTrap("Unknown exception")); // LCOV_EXCL_LINE + return trap; + } + + return nullptr; +} + +//---------------------------------------------------------------------------------------------------------------------- +wasm_trap_t* +getLedgerSqn_wrap(WASM_SECONDARY_CB_PARAMS_LIST) +{ + int const index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); + + return returnResult(runtime, params, results, hf.getLedgerSqn(), index); } wasm_trap_t* -getParentLedgerTime_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +getParentLedgerTime_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int const index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); - return returnResult(runtime, params, results, hf->getParentLedgerTime(), index); + return returnResult(runtime, params, results, hf.getParentLedgerTime(), index); } wasm_trap_t* -getParentLedgerHash_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +getParentLedgerHash_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int const index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); - return returnResult(runtime, params, results, hf->getParentLedgerHash(), index); + return returnResult(runtime, params, results, hf.getParentLedgerHash(), index); } wasm_trap_t* -getBaseFee_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +getBaseFee_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int const index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); - return returnResult(runtime, params, results, hf->getBaseFee(), index); + return returnResult(runtime, params, results, hf.getBaseFee(), index); } wasm_trap_t* -isAmendmentEnabled_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +isAmendmentEnabled_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const slice = getDataSlice(runtime, params, index); if (!slice) @@ -486,7 +568,7 @@ isAmendmentEnabled_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* if (slice->size() == uint256::size()) { - if (auto const ret = hf->isAmendmentEnabled(uint256::fromVoid(slice->data())); + if (auto const ret = hf.isAmendmentEnabled(uint256::fromVoid(slice->data())); ret && *ret == 1) return returnResult(runtime, params, results, ret, index); // Fall through to string lookup — the 32 bytes may be an amendment name @@ -496,17 +578,14 @@ isAmendmentEnabled_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* return hfResult(results, HostFunctionError::DataFieldTooLarge); auto const str = std::string_view(reinterpret_cast(slice->data()), slice->size()); - return returnResult(runtime, params, results, hf->isAmendmentEnabled(str), index); + return returnResult(runtime, params, results, hf.isAmendmentEnabled(str), index); } wasm_trap_t* -cacheLedgerObj_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +cacheLedgerObj_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const id = getDataUInt256(runtime, params, index); if (!id) @@ -516,49 +595,40 @@ cacheLedgerObj_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* res if (!cache) return hfResult(results, cache.error()); // LCOV_EXCL_LINE - return returnResult(runtime, params, results, hf->cacheLedgerObj(*id, *cache), index); + return returnResult(runtime, params, results, hf.cacheLedgerObj(*id, *cache), index); } wasm_trap_t* -getTxField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +getTxField_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const fname = getDataSField(runtime, params, index); if (!fname) return hfResult(results, fname.error()); - return returnResult(runtime, params, results, hf->getTxField(*fname), index); + return returnResult(runtime, params, results, hf.getTxField(*fname), index); } wasm_trap_t* -getCurrentLedgerObjField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +getCurrentLedgerObjField_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const fname = getDataSField(runtime, params, index); if (!fname) return hfResult(results, fname.error()); - return returnResult(runtime, params, results, hf->getCurrentLedgerObjField(*fname), index); + return returnResult(runtime, params, results, hf.getCurrentLedgerObjField(*fname), index); } wasm_trap_t* -getLedgerObjField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +getLedgerObjField_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const cache = getDataInt32(runtime, params, index); if (!cache) @@ -568,106 +638,85 @@ getLedgerObjField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* if (!fname) return hfResult(results, fname.error()); - return returnResult(runtime, params, results, hf->getLedgerObjField(*cache, *fname), index); + return returnResult(runtime, params, results, hf.getLedgerObjField(*cache, *fname), index); } wasm_trap_t* -getTxNestedField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +getTxNestedField_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); - auto const bytes = getDataSlice(runtime, params, index); - if (!bytes) - return hfResult(results, bytes.error()); + auto const locator = getDataLocator(runtime, params, index); + if (!locator) + return hfResult(results, locator.error()); - return returnResult(runtime, params, results, hf->getTxNestedField(*bytes), index); + return returnResult(runtime, params, results, hf.getTxNestedField(*locator), index); } wasm_trap_t* -getCurrentLedgerObjNestedField_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +getCurrentLedgerObjNestedField_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); - auto const bytes = getDataSlice(runtime, params, index); - if (!bytes) - return hfResult(results, bytes.error()); + auto const locator = getDataLocator(runtime, params, index); + if (!locator) + return hfResult(results, locator.error()); return returnResult( - runtime, params, results, hf->getCurrentLedgerObjNestedField(*bytes), index); + runtime, params, results, hf.getCurrentLedgerObjNestedField(*locator), index); } wasm_trap_t* -getLedgerObjNestedField_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +getLedgerObjNestedField_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const cache = getDataInt32(runtime, params, index); if (!cache) return hfResult(results, cache.error()); // LCOV_EXCL_LINE - auto const bytes = getDataSlice(runtime, params, index); - if (!bytes) - return hfResult(results, bytes.error()); + auto const locator = getDataLocator(runtime, params, index); + if (!locator) + return hfResult(results, locator.error()); return returnResult( - runtime, params, results, hf->getLedgerObjNestedField(*cache, *bytes), index); + runtime, params, results, hf.getLedgerObjNestedField(*cache, *locator), index); } wasm_trap_t* -getTxArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +getTxArrayLen_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const fname = getDataSField(runtime, params, index); if (!fname) return hfResult(results, fname.error()); - return returnResult(runtime, params, results, hf->getTxArrayLen(*fname), index); + return returnResult(runtime, params, results, hf.getTxArrayLen(*fname), index); } wasm_trap_t* -getCurrentLedgerObjArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +getCurrentLedgerObjArrayLen_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const fname = getDataSField(runtime, params, index); if (!fname) return hfResult(results, fname.error()); - return returnResult(runtime, params, results, hf->getCurrentLedgerObjArrayLen(*fname), index); + return returnResult(runtime, params, results, hf.getCurrentLedgerObjArrayLen(*fname), index); } wasm_trap_t* -getLedgerObjArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +getLedgerObjArrayLen_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const cache = getDataInt32(runtime, params, index); if (!cache) @@ -677,89 +726,71 @@ getLedgerObjArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_ if (!fname) return hfResult(results, fname.error()); - return returnResult(runtime, params, results, hf->getLedgerObjArrayLen(*cache, *fname), index); + return returnResult(runtime, params, results, hf.getLedgerObjArrayLen(*cache, *fname), index); } wasm_trap_t* -getTxNestedArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +getTxNestedArrayLen_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); - auto const bytes = getDataSlice(runtime, params, index); - if (!bytes) - return hfResult(results, bytes.error()); + auto const locator = getDataLocator(runtime, params, index); + if (!locator) + return hfResult(results, locator.error()); - return returnResult(runtime, params, results, hf->getTxNestedArrayLen(*bytes), index); + return returnResult(runtime, params, results, hf.getTxNestedArrayLen(*locator), index); } wasm_trap_t* -getCurrentLedgerObjNestedArrayLen_wrap( - void* env, - wasm_val_vec_t const* params, - wasm_val_vec_t* results) +getCurrentLedgerObjNestedArrayLen_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); - auto const bytes = getDataSlice(runtime, params, index); - if (!bytes) - return hfResult(results, bytes.error()); + auto const locator = getDataLocator(runtime, params, index); + if (!locator) + return hfResult(results, locator.error()); return returnResult( - runtime, params, results, hf->getCurrentLedgerObjNestedArrayLen(*bytes), index); + runtime, params, results, hf.getCurrentLedgerObjNestedArrayLen(*locator), index); } wasm_trap_t* -getLedgerObjNestedArrayLen_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +getLedgerObjNestedArrayLen_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const cache = getDataInt32(runtime, params, index); if (!cache) return hfResult(results, cache.error()); // LCOV_EXCL_LINE + auto const locator = getDataLocator(runtime, params, index); + if (!locator) + return hfResult(results, locator.error()); + + return returnResult( + runtime, params, results, hf.getLedgerObjNestedArrayLen(*cache, *locator), index); +} + +wasm_trap_t* +updateData_wrap(WASM_SECONDARY_CB_PARAMS_LIST) +{ + int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); + auto const bytes = getDataSlice(runtime, params, index); if (!bytes) return hfResult(results, bytes.error()); - return returnResult( - runtime, params, results, hf->getLedgerObjNestedArrayLen(*cache, *bytes), index); + return returnResult(runtime, params, results, hf.updateData(*bytes), index); } wasm_trap_t* -updateData_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +checkSignature_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); - int index = 0; - - auto const bytes = getDataSlice(runtime, params, index, true); - if (!bytes) - return hfResult(results, bytes.error()); - - return returnResult(runtime, params, results, hf->updateData(*bytes), index); -} - -wasm_trap_t* -checkSignature_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) -{ - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const message = getDataSlice(runtime, params, index); if (!message) @@ -774,49 +805,40 @@ checkSignature_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* res return hfResult(results, pubkey.error()); return returnResult( - runtime, params, results, hf->checkSignature(*message, *signature, *pubkey), index); + runtime, params, results, hf.checkSignature(*message, *signature, *pubkey), index); } wasm_trap_t* -computeSha512HalfHash_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +computeSha512HalfHash_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const bytes = getDataSlice(runtime, params, index); if (!bytes) return hfResult(results, bytes.error()); - return returnResult(runtime, params, results, hf->computeSha512HalfHash(*bytes), index); + return returnResult(runtime, params, results, hf.computeSha512HalfHash(*bytes), index); } wasm_trap_t* -accountKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +accountKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const acc = getDataAccountID(runtime, params, index); if (!acc) return hfResult(results, acc.error()); - return returnResult(runtime, params, results, hf->accountKeylet(*acc), index); + return returnResult(runtime, params, results, hf.accountKeylet(*acc), index); } wasm_trap_t* -ammKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +ammKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const issue1 = getDataAsset(runtime, params, index); if (!issue1) @@ -827,17 +849,14 @@ ammKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) return hfResult(results, issue2.error()); return returnResult( - runtime, params, results, hf->ammKeylet(issue1.value(), issue2.value()), index); + runtime, params, results, hf.ammKeylet(issue1.value(), issue2.value()), index); } wasm_trap_t* -checkKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +checkKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const acc = getDataAccountID(runtime, params, index); if (!acc) @@ -847,17 +866,14 @@ checkKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result if (!seq) return hfResult(results, seq.error()); - return returnResult(runtime, params, results, hf->checkKeylet(acc.value(), *seq), index); + return returnResult(runtime, params, results, hf.checkKeylet(acc.value(), *seq), index); } wasm_trap_t* -credentialKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +credentialKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const subj = getDataAccountID(runtime, params, index); if (!subj) @@ -872,17 +888,14 @@ credentialKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* r return hfResult(results, credType.error()); return returnResult( - runtime, params, results, hf->credentialKeylet(*subj, *iss, *credType), index); + runtime, params, results, hf.credentialKeylet(*subj, *iss, *credType), index); } wasm_trap_t* -delegateKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +delegateKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const acc = getDataAccountID(runtime, params, index); if (!acc) @@ -893,17 +906,14 @@ delegateKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* res return hfResult(results, authorize.error()); return returnResult( - runtime, params, results, hf->delegateKeylet(acc.value(), authorize.value()), index); + runtime, params, results, hf.delegateKeylet(acc.value(), authorize.value()), index); } wasm_trap_t* -depositPreauthKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +depositPreauthKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const acc = getDataAccountID(runtime, params, index); if (!acc) @@ -914,33 +924,27 @@ depositPreauthKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_ return hfResult(results, authorize.error()); return returnResult( - runtime, params, results, hf->depositPreauthKeylet(acc.value(), authorize.value()), index); + runtime, params, results, hf.depositPreauthKeylet(acc.value(), authorize.value()), index); } wasm_trap_t* -didKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +didKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const acc = getDataAccountID(runtime, params, index); if (!acc) return hfResult(results, acc.error()); - return returnResult(runtime, params, results, hf->didKeylet(acc.value()), index); + return returnResult(runtime, params, results, hf.didKeylet(acc.value()), index); } wasm_trap_t* -escrowKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +escrowKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const acc = getDataAccountID(runtime, params, index); if (!acc) @@ -950,17 +954,14 @@ escrowKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul if (!seq) return hfResult(results, seq.error()); - return returnResult(runtime, params, results, hf->escrowKeylet(*acc, *seq), index); + return returnResult(runtime, params, results, hf.escrowKeylet(*acc, *seq), index); } wasm_trap_t* -lineKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +lineKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const acc1 = getDataAccountID(runtime, params, index); if (!acc1) @@ -978,18 +979,15 @@ lineKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results runtime, params, results, - hf->lineKeylet(acc1.value(), acc2.value(), currency.value()), + hf.lineKeylet(acc1.value(), acc2.value(), currency.value()), index); } wasm_trap_t* -mptIssuanceKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +mptIssuanceKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const acc = getDataAccountID(runtime, params, index); if (!acc) @@ -1000,17 +998,14 @@ mptIssuanceKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* return hfResult(results, seq.error()); return returnResult( - runtime, params, results, hf->mptIssuanceKeylet(acc.value(), seq.value()), index); + runtime, params, results, hf.mptIssuanceKeylet(acc.value(), seq.value()), index); } wasm_trap_t* -mptokenKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +mptokenKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const slice = getDataSlice(runtime, params, index); if (!slice) @@ -1024,17 +1019,14 @@ mptokenKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu if (!holder) return hfResult(results, holder.error()); - return returnResult(runtime, params, results, hf->mptokenKeylet(mptid, holder.value()), index); + return returnResult(runtime, params, results, hf.mptokenKeylet(mptid, holder.value()), index); } wasm_trap_t* -nftOfferKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +nftOfferKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const acc = getDataAccountID(runtime, params, index); if (!acc) @@ -1045,17 +1037,14 @@ nftOfferKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* res return hfResult(results, seq.error()); return returnResult( - runtime, params, results, hf->nftOfferKeylet(acc.value(), seq.value()), index); + runtime, params, results, hf.nftOfferKeylet(acc.value(), seq.value()), index); } wasm_trap_t* -offerKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +offerKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const acc = getDataAccountID(runtime, params, index); if (!acc) @@ -1065,17 +1054,14 @@ offerKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result if (!seq) return hfResult(results, seq.error()); - return returnResult(runtime, params, results, hf->offerKeylet(acc.value(), seq.value()), index); + return returnResult(runtime, params, results, hf.offerKeylet(acc.value(), seq.value()), index); } wasm_trap_t* -oracleKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +oracleKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const acc = getDataAccountID(runtime, params, index); if (!acc) @@ -1085,17 +1071,14 @@ oracleKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul if (!documentId) return hfResult(results, documentId.error()); - return returnResult(runtime, params, results, hf->oracleKeylet(*acc, *documentId), index); + return returnResult(runtime, params, results, hf.oracleKeylet(*acc, *documentId), index); } wasm_trap_t* -paychanKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +paychanKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const acc = getDataAccountID(runtime, params, index); if (!acc) @@ -1110,17 +1093,14 @@ paychanKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu return hfResult(results, seq.error()); return returnResult( - runtime, params, results, hf->paychanKeylet(acc.value(), dest.value(), seq.value()), index); + runtime, params, results, hf.paychanKeylet(acc.value(), dest.value(), seq.value()), index); } wasm_trap_t* -permissionedDomainKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +permissionedDomainKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const acc = getDataAccountID(runtime, params, index); if (!acc) @@ -1131,33 +1111,27 @@ permissionedDomainKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_ return hfResult(results, seq.error()); return returnResult( - runtime, params, results, hf->permissionedDomainKeylet(acc.value(), seq.value()), index); + runtime, params, results, hf.permissionedDomainKeylet(acc.value(), seq.value()), index); } wasm_trap_t* -signersKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +signersKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const acc = getDataAccountID(runtime, params, index); if (!acc) return hfResult(results, acc.error()); - return returnResult(runtime, params, results, hf->signersKeylet(acc.value()), index); + return returnResult(runtime, params, results, hf.signersKeylet(acc.value()), index); } wasm_trap_t* -ticketKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +ticketKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const acc = getDataAccountID(runtime, params, index); if (!acc) @@ -1167,18 +1141,14 @@ ticketKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul if (!seq) return hfResult(results, seq.error()); - return returnResult( - runtime, params, results, hf->ticketKeylet(acc.value(), seq.value()), index); + return returnResult(runtime, params, results, hf.ticketKeylet(acc.value(), seq.value()), index); } wasm_trap_t* -vaultKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +vaultKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const acc = getDataAccountID(runtime, params, index); if (!acc) @@ -1188,17 +1158,14 @@ vaultKeylet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result if (!seq) return hfResult(results, seq.error()); - return returnResult(runtime, params, results, hf->vaultKeylet(acc.value(), seq.value()), index); + return returnResult(runtime, params, results, hf.vaultKeylet(acc.value(), seq.value()), index); } wasm_trap_t* -getNFT_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +getNFT_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const acc = getDataAccountID(runtime, params, index); if (!acc) @@ -1208,104 +1175,79 @@ getNFT_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) if (!nftId) return hfResult(results, nftId.error()); - return returnResult(runtime, params, results, hf->getNFT(*acc, *nftId), index); + return returnResult(runtime, params, results, hf.getNFT(*acc, *nftId), index); } wasm_trap_t* -getNFTIssuer_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +getNFTIssuer_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const nftId = getDataUInt256(runtime, params, index); if (!nftId) return hfResult(results, nftId.error()); - return returnResult(runtime, params, results, hf->getNFTIssuer(*nftId), index); + return returnResult(runtime, params, results, hf.getNFTIssuer(*nftId), index); } wasm_trap_t* -getNFTTaxon_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +getNFTTaxon_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const nftId = getDataUInt256(runtime, params, index); if (!nftId) return hfResult(results, nftId.error()); - return returnResult(runtime, params, results, hf->getNFTTaxon(*nftId), index); + return returnResult(runtime, params, results, hf.getNFTTaxon(*nftId), index); } wasm_trap_t* -getNFTFlags_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +getNFTFlags_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const nftId = getDataUInt256(runtime, params, index); if (!nftId) return hfResult(results, nftId.error()); - return returnResult(runtime, params, results, hf->getNFTFlags(*nftId), index); + return returnResult(runtime, params, results, hf.getNFTFlags(*nftId), index); } wasm_trap_t* -getNFTTransferFee_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +getNFTTransferFee_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const nftId = getDataUInt256(runtime, params, index); if (!nftId) return hfResult(results, nftId.error()); - return returnResult(runtime, params, results, hf->getNFTTransferFee(*nftId), index); + return returnResult(runtime, params, results, hf.getNFTTransferFee(*nftId), index); } wasm_trap_t* -getNFTSerial_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +getNFTSerial_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const nftId = getDataUInt256(runtime, params, index); if (!nftId) return hfResult(results, nftId.error()); - return returnResult(runtime, params, results, hf->getNFTSerial(*nftId), index); + return returnResult(runtime, params, results, hf.getNFTSerial(*nftId), index); } wasm_trap_t* -trace_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +trace_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; - - int64_t const len = (int64_t)params->data[1].of.i32 + params->data[3].of.i32; - if (len < 0) - return hfResult(results, HostFunctionError::InvalidParams); - - if (std::cmp_greater(len, kMaxWasmParamLength)) - return hfResult(results, HostFunctionError::DataFieldTooLarge); + WasmRuntimeWrapper& runtime = hf.getRT(); auto const msg = getDataString(runtime, params, index); if (!msg) @@ -1315,6 +1257,9 @@ trace_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) if (!data) return hfResult(results, data.error()); + if (msg->size() + data->size() > kMaxWasmDataLength) + return hfResult(results, HostFunctionError::DataFieldTooLarge); + auto const asHex = getDataInt32(runtime, params, index); if (!asHex) return hfResult(results, asHex.error()); // LCOV_EXCL_LINE @@ -1322,24 +1267,14 @@ trace_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) if (*asHex != 0 && *asHex != 1) return hfResult(results, HostFunctionError::InvalidParams); - return returnResult(runtime, params, results, hf->trace(*msg, *data, *asHex != 0), index); + return returnResult(runtime, params, results, hf.trace(*msg, *data, *asHex != 0), index); } wasm_trap_t* -traceNum_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +traceNum_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); int index = 0; - - int32_t const len = params->data[1].of.i32; - if (len < 0) - return hfResult(results, HostFunctionError::InvalidParams); - - if (std::cmp_greater(len, kMaxWasmParamLength)) - return hfResult(results, HostFunctionError::DataFieldTooLarge); + WasmRuntimeWrapper& runtime = hf.getRT(); auto const msg = getDataString(runtime, params, index); if (!msg) @@ -1349,25 +1284,15 @@ traceNum_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) if (!number) return hfResult(results, number.error()); // LCOV_EXCL_LINE - return returnResult(runtime, params, results, hf->traceNum(*msg, *number), index); + return returnResult(runtime, params, results, hf.traceNum(*msg, *number), index); } wasm_trap_t* -traceAccount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +traceAccount_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); - - int32_t const len = params->data[1].of.i32; - if (len < 0) - return hfResult(results, HostFunctionError::InvalidParams); - - if (std::cmp_greater(len, kMaxWasmParamLength)) - return hfResult(results, HostFunctionError::DataFieldTooLarge); - int i = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); + auto const msg = getDataString(runtime, params, i); if (!msg) return hfResult(results, msg.error()); @@ -1376,25 +1301,15 @@ traceAccount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul if (!account) return hfResult(results, account.error()); - return returnResult(runtime, params, results, hf->traceAccount(*msg, *account), i); + return returnResult(runtime, params, results, hf.traceAccount(*msg, *account), i); } wasm_trap_t* -traceFloat_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +traceFloat_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); - - int32_t const len = params->data[1].of.i32; - if (len < 0) - return hfResult(results, HostFunctionError::InvalidParams); - - if (std::cmp_greater(len, kMaxWasmParamLength)) - return hfResult(results, HostFunctionError::DataFieldTooLarge); - int i = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); + auto const msg = getDataString(runtime, params, i); if (!msg) return hfResult(results, msg.error()); @@ -1403,25 +1318,15 @@ traceFloat_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results if (!number) return hfResult(results, number.error()); - return returnResult(runtime, params, results, hf->traceFloat(*msg, *number), i); + return returnResult(runtime, params, results, hf.traceFloat(*msg, *number), i); } wasm_trap_t* -traceAmount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +traceAmount_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); - - int32_t const len = params->data[1].of.i32; - if (len < 0) - return hfResult(results, HostFunctionError::InvalidParams); - - if (std::cmp_greater(len, kMaxWasmParamLength)) - return hfResult(results, HostFunctionError::DataFieldTooLarge); - int i = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); + auto const msg = getDataString(runtime, params, i); if (!msg) return hfResult(results, msg.error()); @@ -1448,18 +1353,15 @@ traceAmount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result return hfResult(results, HostFunctionError::InvalidParams); } - return returnResult(runtime, params, results, hf->traceAmount(*msg, *amount), i); + return returnResult(runtime, params, results, hf.traceAmount(*msg, *amount), i); } wasm_trap_t* -floatFromInt_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +floatFromInt_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); - int i = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); + auto const x = getDataInt64(runtime, params, i); if (!x) return hfResult(results, x.error()); // LCOV_EXCL_LINE @@ -1470,18 +1372,15 @@ floatFromInt_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 1; - return returnResult(runtime, params, results, hf->floatFromInt(*x, *rounding), i); + return returnResult(runtime, params, results, hf.floatFromInt(*x, *rounding), i); } wasm_trap_t* -floatFromUint_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +floatFromUint_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); - int i = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); + auto const x = getDataUInt64(runtime, params, i); if (!x) return hfResult(results, x.error()); @@ -1492,18 +1391,15 @@ floatFromUint_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 2; - return returnResult(runtime, params, results, hf->floatFromUint(*x, *rounding), i); + return returnResult(runtime, params, results, hf.floatFromUint(*x, *rounding), i); } wasm_trap_t* -floatFromSTAmount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +floatFromSTAmount_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); - int i = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); + auto const x = getDataSlice(runtime, params, i); if (!x) return hfResult(results, x.error()); @@ -1527,18 +1423,15 @@ floatFromSTAmount_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 2; - return returnResult(runtime, params, results, hf->floatFromSTAmount(*amount, *rounding), i); + return returnResult(runtime, params, results, hf.floatFromSTAmount(*amount, *rounding), i); } wasm_trap_t* -floatFromSTNumber_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +floatFromSTNumber_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); - int i = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); + auto const x = getDataSlice(runtime, params, i); if (!x) return hfResult(results, x.error()); @@ -1562,18 +1455,15 @@ floatFromSTNumber_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 2; - return returnResult(runtime, params, results, hf->floatFromSTNumber(*num, *rounding), i); + return returnResult(runtime, params, results, hf.floatFromSTNumber(*num, *rounding), i); } wasm_trap_t* -floatToInt_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +floatToInt_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); - int i = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); + auto const x = getDataSlice(runtime, params, i); if (!x) return hfResult(results, x.error()); @@ -1584,35 +1474,28 @@ floatToInt_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 2; - return returnResult(runtime, params, results, hf->floatToInt(*x, *rounding), i); + return returnResult(runtime, params, results, hf.floatToInt(*x, *rounding), i); } wasm_trap_t* -floatToMantExp_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +floatToMantExp_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); - int i = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); + auto const x = getDataSlice(runtime, params, i); if (!x) return hfResult(results, x.error()); i = 2; - return returnResult(runtime, params, results, hf->floatToMantExp(*x), i); + return returnResult(runtime, params, results, hf.floatToMantExp(*x), i); } wasm_trap_t* -floatFromMantExp_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +floatFromMantExp_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); - int i = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); auto const mant = getDataInt64(runtime, params, i); if (!mant) @@ -1628,18 +1511,15 @@ floatFromMantExp_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* r return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 2; - return returnResult(runtime, params, results, hf->floatFromMantExp(*mant, *exp, *rounding), i); + return returnResult(runtime, params, results, hf.floatFromMantExp(*mant, *exp, *rounding), i); } wasm_trap_t* -floatCompare_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +floatCompare_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); - int i = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); + auto const x = getDataSlice(runtime, params, i); if (!x) return hfResult(results, x.error()); @@ -1648,18 +1528,15 @@ floatCompare_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resul if (!y) return hfResult(results, y.error()); - return returnResult(runtime, params, results, hf->floatCompare(*x, *y), i); + return returnResult(runtime, params, results, hf.floatCompare(*x, *y), i); } wasm_trap_t* -floatAdd_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +floatAdd_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); - int i = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); + auto const x = getDataSlice(runtime, params, i); if (!x) return hfResult(results, x.error()); @@ -1674,18 +1551,15 @@ floatAdd_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 4; - return returnResult(runtime, params, results, hf->floatAdd(*x, *y, *rounding), i); + return returnResult(runtime, params, results, hf.floatAdd(*x, *y, *rounding), i); } wasm_trap_t* -floatSubtract_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +floatSubtract_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); - int i = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); + auto const x = getDataSlice(runtime, params, i); if (!x) return hfResult(results, x.error()); @@ -1700,18 +1574,15 @@ floatSubtract_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 4; - return returnResult(runtime, params, results, hf->floatSubtract(*x, *y, *rounding), i); + return returnResult(runtime, params, results, hf.floatSubtract(*x, *y, *rounding), i); } wasm_trap_t* -floatMultiply_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +floatMultiply_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); - int i = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); + auto const x = getDataSlice(runtime, params, i); if (!x) return hfResult(results, x.error()); @@ -1726,18 +1597,15 @@ floatMultiply_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* resu return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 4; - return returnResult(runtime, params, results, hf->floatMultiply(*x, *y, *rounding), i); + return returnResult(runtime, params, results, hf.floatMultiply(*x, *y, *rounding), i); } wasm_trap_t* -floatDivide_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +floatDivide_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); - int i = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); + auto const x = getDataSlice(runtime, params, i); if (!x) return hfResult(results, x.error()); @@ -1752,18 +1620,15 @@ floatDivide_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* result return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 4; - return returnResult(runtime, params, results, hf->floatDivide(*x, *y, *rounding), i); + return returnResult(runtime, params, results, hf.floatDivide(*x, *y, *rounding), i); } wasm_trap_t* -floatRoot_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +floatRoot_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); - int i = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); + auto const x = getDataSlice(runtime, params, i); if (!x) return hfResult(results, x.error()); @@ -1778,18 +1643,15 @@ floatRoot_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 3; - return returnResult(runtime, params, results, hf->floatRoot(*x, *n, *rounding), i); + return returnResult(runtime, params, results, hf.floatRoot(*x, *n, *rounding), i); } wasm_trap_t* -floatPower_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +floatPower_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { - if (auto g = checkGas(env); !g) - return g.error(); // LCOV_EXCL_LINE - auto* hf = getHF(env); - auto* runtime = hf->getRT(); - int i = 0; + WasmRuntimeWrapper& runtime = hf.getRT(); + auto const x = getDataSlice(runtime, params, i); if (!x) return hfResult(results, x.error()); @@ -1804,7 +1666,7 @@ floatPower_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 3; - return returnResult(runtime, params, results, hf->floatPower(*x, *n, *rounding), i); + return returnResult(runtime, params, results, hf.floatPower(*x, *n, *rounding), i); } // LCOV_EXCL_START @@ -1857,7 +1719,7 @@ testGetDataIncrement() values[0] = WASM_I32_VAL(42); int index = 0; - auto const result = getDataInt32(&runtime, ¶ms, index); + auto const result = getDataInt32(runtime, ¶ms, index); if (!result || result.value() != 42 || index != 1) return false; } @@ -1869,7 +1731,7 @@ testGetDataIncrement() values[0] = WASM_I64_VAL(1234); int index = 0; - auto const result = getDataInt64(&runtime, ¶ms, index); + auto const result = getDataInt64(runtime, ¶ms, index); if (!result || result.value() != 1234 || index != 1) return false; } @@ -1881,7 +1743,7 @@ testGetDataIncrement() values[0] = WASM_I32_VAL(sfAccount.getCode()); int index = 0; - auto const result = getDataSField(&runtime, ¶ms, index); + auto const result = getDataSField(runtime, ¶ms, index); if (!result || result.value().get() != sfAccount || index != 1) return false; } @@ -1894,7 +1756,7 @@ testGetDataIncrement() values[1] = WASM_I32_VAL(3); int index = 0; - auto const result = getDataSlice(&runtime, ¶ms, index); + auto const result = getDataSlice(runtime, ¶ms, index); if (!result || result.value() != Slice(buffer.data(), 3) || index != 2) return false; } @@ -1907,7 +1769,7 @@ testGetDataIncrement() values[1] = WASM_I32_VAL(5); int index = 0; - auto const result = getDataString(&runtime, ¶ms, index); + auto const result = getDataString(runtime, ¶ms, index); if (!result || result.value() != std::string_view(reinterpret_cast(buffer.data()), 5) || index != 2) @@ -1926,7 +1788,7 @@ testGetDataIncrement() memcpy(&buffer[0], id.data(), AccountID::size()); int index = 0; - auto const result = getDataAccountID(&runtime, ¶ms, index); + auto const result = getDataAccountID(runtime, ¶ms, index); if (!result || result.value() != id || index != 2) return false; } @@ -1942,7 +1804,7 @@ testGetDataIncrement() memcpy(&buffer[0], h1.data(), Hash::size()); int index = 0; - auto const result = getDataUInt256(&runtime, ¶ms, index); + auto const result = getDataUInt256(runtime, ¶ms, index); if (!result || result.value() != h1 || index != 2) return false; } @@ -1958,7 +1820,7 @@ testGetDataIncrement() memcpy(&buffer[0], c.data(), Currency::size()); int index = 0; - auto const result = getDataCurrency(&runtime, ¶ms, index); + auto const result = getDataCurrency(runtime, ¶ms, index); if (!result || result.value() != c || index != 2) return false; } diff --git a/src/libxrpl/tx/wasm/WasmiVM.cpp b/src/libxrpl/tx/wasm/WasmiVM.cpp index 007610fee2..018b97e22b 100644 --- a/src/libxrpl/tx/wasm/WasmiVM.cpp +++ b/src/libxrpl/tx/wasm/WasmiVM.cpp @@ -35,6 +35,9 @@ namespace xrpl { +wasm_trap_t* +HostFuncMain_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results); + namespace { void @@ -395,12 +398,8 @@ ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) const params.release(); results.release(); - wasm_func_t* func = wasm_func_new_with_env( - s.get(), - ftype.get(), - reinterpret_cast(imp.wrap), - (void*)&obj, - nullptr); + wasm_func_t* func = + wasm_func_new_with_env(s.get(), ftype.get(), HostFuncMain_wrap, (void*)&obj, nullptr); if (func == nullptr) { Throw( diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index ab925cb432..f77cbe8a87 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -294,7 +294,7 @@ ww_hlp(size_t& idx, E&& e, P&& params, Arg&& arg) { auto const* udata = reinterpret_cast(e); HostFunctions const& hf = udata->first; - auto& vrt = *reinterpret_cast(hf.getRT()); + auto& vrt = reinterpret_cast(hf.getRT()); auto const data = toBytes(std::forward(arg)); @@ -307,7 +307,7 @@ ww_hlp(size_t& idx, E&& e, P&& params, Arg&& arg) { auto const* udata = reinterpret_cast(e); HostFunctions const& hf = udata->first; - auto& vrt = *reinterpret_cast(hf.getRT()); + auto& vrt = reinterpret_cast(hf.getRT()); size_t const ptr = (idx << 10); vrt.setBytes(ptr, arg.data(), arg.size()); @@ -317,13 +317,13 @@ ww_hlp(size_t& idx, E&& e, P&& params, Arg&& arg) } // Helper wrapper to call WASM wrapper functions with automatic parameter packing -template +template wasm_trap_t* -ww(F&& f, E&& e, P&& params, P&& result, Args... args) +ww(E&& e, P&& params, P&& result, Args... args) { size_t idx = 0; - (ww_hlp(idx, e, params, std::forward(args)), ...); - return f(std::forward(e), params.get(), result.get()); + (ww_hlp(idx, e, params, std::forward(args)), ...); // NOLINT + return HostFuncMain_wrap(std::forward(e), params.get(), result.get()); // NOLINT } constexpr int64_t min64 = std::numeric_limits::min(); @@ -351,13 +351,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.getLedgerSqn(); WasmValVec params(2), result(1); - auto* trap = - ww(getLedgerSqn_wrap, - &import.at("get_ledger_sqn"), - params, - result, - 0, - sizeof(std::uint32_t)); + auto* trap = ww(&import.at("get_ledger_sqn"), params, result, 0, sizeof(std::uint32_t)); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == sizeof(std::uint32_t)) && @@ -385,12 +379,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getParentLedgerTime(); WasmValVec params(2), result(1); auto* trap = - ww(getParentLedgerTime_wrap, - &import.at("get_parent_ledger_time"), - params, - result, - 0, - sizeof(std::uint32_t)); + ww(&import.at("get_parent_ledger_time"), params, result, 0, sizeof(std::uint32_t)); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == sizeof(std::uint32_t)) && @@ -420,12 +409,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getParentLedgerHash(); WasmValVec params(2), result(1); auto* trap = - ww(getParentLedgerHash_wrap, - &import.at("get_parent_ledger_hash"), - params, - result, - 0, - uint256::size()); + ww(&import.at("get_parent_ledger_hash"), params, result, 0, uint256::size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == uint256::size()); @@ -456,13 +440,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getBaseFee(); { WasmValVec params(2), result(1); - auto* trap = - ww(getBaseFee_wrap, - &import.at("get_base_fee"), - params, - result, - 0, - sizeof(std::uint32_t)); + auto* trap = ww(&import.at("get_base_fee"), params, result, 0, sizeof(std::uint32_t)); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == sizeof(std::uint32_t)) && @@ -493,13 +471,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(2), result(1); vrt.setBytes(0, amendmentId.data(), uint256::size()); - auto* trap = - ww(isAmendmentEnabled_wrap, - &import.at("amendment_enabled"), - params, - result, - 0, - uint256::size()); + auto* trap = ww(&import.at("amendment_enabled"), params, result, 0, uint256::size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); @@ -511,12 +483,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(2), result(1); vrt.setBytes(0, amendmentName.data(), amendmentName.size()); auto* trap = - ww(isAmendmentEnabled_wrap, - &import.at("amendment_enabled"), - params, - result, - 0, - amendmentName.size()); + ww(&import.at("amendment_enabled"), params, result, 0, amendmentName.size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); @@ -527,13 +494,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(2), result(1); vrt.setBytes(0, fakeId.data(), uint256::size()); - auto* trap = - ww(isAmendmentEnabled_wrap, - &import.at("amendment_enabled"), - params, - result, - 0, - uint256::size()); + auto* trap = ww(&import.at("amendment_enabled"), params, result, 0, uint256::size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0); @@ -544,13 +505,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(2), result(1); vrt.setBytes(0, fakeName.data(), fakeName.size()); - auto* trap = - ww(isAmendmentEnabled_wrap, - &import.at("amendment_enabled"), - params, - result, - 0, - fakeName.size()); + auto* trap = ww(&import.at("amendment_enabled"), params, result, 0, fakeName.size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0); @@ -580,13 +535,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(3), result(1); vrt.setBytes(0, accountKeylet.key.data(), uint256::size()); auto* trap = - ww(cacheLedgerObj_wrap, - &import.at("cache_ledger_obj"), - params, - result, - 0, - uint256::size(), - -1); + ww(&import.at("cache_ledger_obj"), params, result, 0, uint256::size(), -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -598,13 +547,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(3), result(1); vrt.setBytes(0, accountKeylet.key.data(), uint256::size()); auto* trap = - ww(cacheLedgerObj_wrap, - &import.at("cache_ledger_obj"), - params, - result, - 0, - uint256::size(), - 257); + ww(&import.at("cache_ledger_obj"), params, result, 0, uint256::size(), 257); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -616,13 +559,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(3), result(1); vrt.setBytes(0, dummyEscrow.key.data(), uint256::size()); auto* trap = - ww(cacheLedgerObj_wrap, - &import.at("cache_ledger_obj"), - params, - result, - 0, - uint256::size(), - 0); + ww(&import.at("cache_ledger_obj"), params, result, 0, uint256::size(), 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -635,13 +572,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(3), result(1); vrt.setBytes(0, accountKeylet.key.data(), uint256::size()); auto* trap = - ww(cacheLedgerObj_wrap, - &import.at("cache_ledger_obj"), - params, - result, - 0, - uint256::size(), - 0); + ww(&import.at("cache_ledger_obj"), params, result, 0, uint256::size(), 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); @@ -654,13 +585,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(3), result(1); vrt.setBytes(0, accountKeylet.key.data(), uint256::size()); auto* trap = - ww(cacheLedgerObj_wrap, - &import.at("cache_ledger_obj"), - params, - result, - 0, - uint256::size(), - i); + ww(&import.at("cache_ledger_obj"), params, result, 0, uint256::size(), i); if (!(BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECTS( @@ -675,13 +600,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(3), result(1); vrt.setBytes(0, accountKeylet.key.data(), uint256::size()); auto* trap = - ww(cacheLedgerObj_wrap, - &import.at("cache_ledger_obj"), - params, - result, - 0, - uint256::size(), - 0); + ww(&import.at("cache_ledger_obj"), params, result, 0, uint256::size(), 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -703,13 +622,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(3), result(1); vrt.setBytes(0, accountKeylet.key.data(), uint256::size()); auto* trap = - ww(cacheLedgerObj_wrap, - &import.at("cache_ledger_obj"), - params, - result, - 0, - uint256::size(), - 0); + ww(&import.at("cache_ledger_obj"), params, result, 0, uint256::size(), 0); if (!(BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECTS( @@ -724,13 +637,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(3), result(1); vrt.setBytes(0, accountKeylet.key.data(), uint256::size()); auto* trap = - ww(cacheLedgerObj_wrap, - &import.at("cache_ledger_obj"), - params, - result, - 0, - uint256::size(), - 0); + ww(&import.at("cache_ledger_obj"), params, result, 0, uint256::size(), 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -775,8 +682,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(getTxField_wrap, - &import.at("get_tx_field"), + ww(&import.at("get_tx_field"), params, result, sfAccount.getCode(), @@ -793,8 +699,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(getTxField_wrap, - &import.at("get_tx_field"), + ww(&import.at("get_tx_field"), params, result, sfOwner.getCode(), @@ -811,8 +716,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(getTxField_wrap, - &import.at("get_tx_field"), + ww(&import.at("get_tx_field"), params, result, sfTransactionType.getCode(), @@ -829,14 +733,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getTxField(sfOfferSequence); { WasmValVec params(3), result(1); - auto* trap = - ww(getTxField_wrap, - &import.at("get_tx_field"), - params, - result, - sfOfferSequence.getCode(), - 0, - 256); + auto* trap = ww( + &import.at("get_tx_field"), params, result, sfOfferSequence.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 > 0); @@ -849,13 +747,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(getTxField_wrap, - &import.at("get_tx_field"), - params, - result, - sfDestination.getCode(), - 0, - 256); + ww(&import.at("get_tx_field"), params, result, sfDestination.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -866,13 +758,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(getTxField_wrap, - &import.at("get_tx_field"), - params, - result, - sfMemos.getCode(), - 0, - 256); + ww(&import.at("get_tx_field"), params, result, sfMemos.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -882,14 +768,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getTxField(sfCredentialIDs); { WasmValVec params(3), result(1); - auto* trap = - ww(getTxField_wrap, - &import.at("get_tx_field"), - params, - result, - sfCredentialIDs.getCode(), - 0, - 256); + auto* trap = ww( + &import.at("get_tx_field"), params, result, sfCredentialIDs.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECTS( @@ -901,13 +781,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(getTxField_wrap, - &import.at("get_tx_field"), - params, - result, - kSfInvalid.getCode(), - 0, - 256); + ww(&import.at("get_tx_field"), params, result, kSfInvalid.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -918,13 +792,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(getTxField_wrap, - &import.at("get_tx_field"), - params, - result, - kSfGeneric.getCode(), - 0, - 256); + ww(&import.at("get_tx_field"), params, result, kSfGeneric.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -950,13 +818,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(getTxField_wrap, - &import.at("get_tx_field"), - params, - result, - sfAsset.getCode(), - 0, - 256); + ww(&import.at("get_tx_field"), params, result, sfAsset.getCode(), 0, 256); std::vector const expectedAsset(20, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && @@ -970,13 +832,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(getTxField_wrap, - &import.at("get_tx_field"), - params, - result, - sfAsset2.getCode(), - 0, - 256); + ww(&import.at("get_tx_field"), params, result, sfAsset2.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 > 0); @@ -1005,13 +861,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(getTxField_wrap, - &import.at("get_tx_field"), - params, - result, - sfAsset.getCode(), - 0, - 256); + ww(&import.at("get_tx_field"), params, result, sfAsset.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECT(result[0].of.i32 > 0)) @@ -1026,13 +876,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(getTxField_wrap, - &import.at("get_tx_field"), - params, - result, - sfAsset2.getCode(), - 0, - 256); + ww(&import.at("get_tx_field"), params, result, sfAsset2.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECT(result[0].of.i32 > 0)) @@ -1061,13 +905,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(getTxField_wrap, - &import.at("get_tx_field"), - params, - result, - sfAssetScale.getCode(), - 0, - 256); + ww(&import.at("get_tx_field"), params, result, sfAssetScale.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECT(result[0].of.i32 > 0)) @@ -1110,8 +948,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(getCurrentLedgerObjField_wrap, - &import.at("get_current_ledger_obj_field"), + ww(&import.at("get_current_ledger_obj_field"), params, result, sfAccount.getCode(), @@ -1131,8 +968,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(getCurrentLedgerObjField_wrap, - &import.at("get_current_ledger_obj_field"), + ww(&import.at("get_current_ledger_obj_field"), params, result, sfAmount.getCode(), @@ -1152,8 +988,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(getCurrentLedgerObjField_wrap, - &import.at("get_current_ledger_obj_field"), + ww(&import.at("get_current_ledger_obj_field"), params, result, sfPreviousTxnID.getCode(), @@ -1173,8 +1008,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(getCurrentLedgerObjField_wrap, - &import.at("get_current_ledger_obj_field"), + ww(&import.at("get_current_ledger_obj_field"), params, result, sfOwner.getCode(), @@ -1198,8 +1032,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(getCurrentLedgerObjField_wrap, - &import2.at("get_current_ledger_obj_field"), + ww(&import2.at("get_current_ledger_obj_field"), params, result, sfAccount.getCode(), @@ -1241,14 +1074,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); vrt.setBytes(0, accountKeylet.key.data(), uint256::size()); - auto* trap = - ww(cacheLedgerObj_wrap, - &import.at("cache_ledger_obj"), - params, - result, - 0, - uint256::size(), - 1); + auto* trap = ww(&import.at("cache_ledger_obj"), params, result, 0, uint256::size(), 1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); @@ -1257,15 +1083,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getLedgerObjField(1, sfAccount); { WasmValVec params(4), result(1); - auto* trap = - ww(getLedgerObjField_wrap, - &import.at("get_ledger_obj_field"), - params, - result, - 1, - sfAccount.getCode(), - 0, - 256); + auto* trap = ww( + &import.at("get_ledger_obj_field"), params, result, 1, sfAccount.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECTS(result[0].of.i32 > 0, std::to_string(result[0].of.i32))) @@ -1279,15 +1098,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getLedgerObjField(1, sfBalance); { WasmValVec params(4), result(1); - auto* trap = - ww(getLedgerObjField_wrap, - &import.at("get_ledger_obj_field"), - params, - result, - 1, - sfBalance.getCode(), - 0, - 256); + auto* trap = ww( + &import.at("get_ledger_obj_field"), params, result, 1, sfBalance.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECT(result[0].of.i32 > 0)) @@ -1301,15 +1113,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getLedgerObjField(0, sfAccount); { WasmValVec params(4), result(1); - auto* trap = - ww(getLedgerObjField_wrap, - &import.at("get_ledger_obj_field"), - params, - result, - 0, - sfAccount.getCode(), - 0, - 256); + auto* trap = ww( + &import.at("get_ledger_obj_field"), params, result, 0, sfAccount.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -1320,8 +1125,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(4), result(1); auto* trap = - ww(getLedgerObjField_wrap, - &import.at("get_ledger_obj_field"), + ww(&import.at("get_ledger_obj_field"), params, result, 257, @@ -1337,15 +1141,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getLedgerObjField(2, sfAccount); { WasmValVec params(4), result(1); - auto* trap = - ww(getLedgerObjField_wrap, - &import.at("get_ledger_obj_field"), - params, - result, - 2, - sfAccount.getCode(), - 0, - 256); + auto* trap = ww( + &import.at("get_ledger_obj_field"), params, result, 2, sfAccount.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -1355,15 +1152,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getLedgerObjField(1, sfOwner); { WasmValVec params(4), result(1); - auto* trap = - ww(getLedgerObjField_wrap, - &import.at("get_ledger_obj_field"), - params, - result, - 1, - sfOwner.getCode(), - 0, - 256); + auto* trap = ww( + &import.at("get_ledger_obj_field"), params, result, 1, sfOwner.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -1416,8 +1206,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(4), result(1); auto* trap = - ww(getTxNestedField_wrap, - &import.at("get_tx_nested_field"), + ww(&import.at("get_tx_nested_field"), params, result, 0, @@ -1446,8 +1235,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(4), result(1); auto* trap = - ww(getTxNestedField_wrap, - &import.at("get_tx_nested_field"), + ww(&import.at("get_tx_nested_field"), params, result, 0, @@ -1473,8 +1261,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(4), result(1); auto* trap = - ww(getTxNestedField_wrap, - &import.at("get_tx_nested_field"), + ww(&import.at("get_tx_nested_field"), params, result, 0, @@ -1497,18 +1284,11 @@ struct HostFuncImpl_test : public beast::unit_test::Suite std::vector locatorVec(sizeof(int32_t) + 1); auto const accountFieldCode = sfAccount.getCode(); memcpy(locatorVec.data() + 1, &accountFieldCode, sizeof(int32_t)); - vrt.setBytes(0, locatorVec.data() + 1, sizeof(int32_t)); + vrt.setBytes(0, locatorVec.data(), sizeof(int32_t) + 1); WasmValVec params(4), result(1); auto* trap = - ww(getTxNestedField_wrap, - &import.at("get_tx_nested_field"), - params, - result, - 0, - sizeof(int32_t), - 256, - 256); + ww(&import.at("get_tx_nested_field"), params, result, 1, sizeof(int32_t), 256, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECTS(result[0].of.i32 > 0, std::to_string(result[0].of.i32))) @@ -1526,8 +1306,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(4), result(1); // hfs.getTxNestedField(locator); auto* trap = - ww(getTxNestedField_wrap, - &import.at("get_tx_nested_field"), + ww(&import.at("get_tx_nested_field"), params, result, 0, @@ -1654,15 +1433,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, locatorVec.data(), 3); WasmValVec params(4), result(1); - auto* trap = - ww(getTxNestedField_wrap, - &import.at("get_tx_nested_field"), - params, - result, - 0, - 3, - 256, - 256); + auto* trap = ww(&import.at("get_tx_nested_field"), params, result, 0, 3, 256, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -1703,8 +1474,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(4), result(1); auto* trap = - ww(getCurrentLedgerObjNestedField_wrap, - &import.at("get_current_ledger_obj_nested_field"), + ww(&import.at("get_current_ledger_obj_nested_field"), params, result, 0, @@ -1728,8 +1498,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(4), result(1); // hfs.getCurrentLedgerObjNestedField(locator); auto* trap = - ww(getCurrentLedgerObjNestedField_wrap, - &import.at("get_current_ledger_obj_nested_field"), + ww(&import.at("get_current_ledger_obj_nested_field"), params, result, 0, @@ -1761,15 +1530,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // Locator for empty locator { WasmValVec params(4), result(1); - auto* trap = - ww(getCurrentLedgerObjNestedField_wrap, - &import.at("get_current_ledger_obj_nested_field"), - params, - result, - 0, - 0, - 256, - 256); + auto* trap = ww( + &import.at("get_current_ledger_obj_nested_field"), params, result, 0, 0, 256, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -1783,15 +1545,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, malformedLocatorVec.data(), 3); WasmValVec params(4), result(1); - auto* trap = - ww(getCurrentLedgerObjNestedField_wrap, - &import.at("get_current_ledger_obj_nested_field"), - params, - result, - 0, - 3, - 256, - 256); + auto* trap = ww( + &import.at("get_current_ledger_obj_nested_field"), params, result, 0, 3, 256, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -1812,8 +1567,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(4), result(1); auto* trap = - ww(getCurrentLedgerObjNestedField_wrap, - &import2.at("get_current_ledger_obj_nested_field"), + ww(&import2.at("get_current_ledger_obj_nested_field"), params, result, 0, @@ -1857,14 +1611,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); vrt.setBytes(0, signerListKeylet.key.data(), uint256::size()); - auto* trap = - ww(cacheLedgerObj_wrap, - &import.at("cache_ledger_obj"), - params, - result, - 0, - uint256::size(), - 1); + auto* trap = ww(&import.at("cache_ledger_obj"), params, result, 0, uint256::size(), 1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); } @@ -1877,8 +1624,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(5), result(1); auto* trap = - ww(getLedgerObjNestedField_wrap, - &import.at("get_ledger_obj_nested_field"), + ww(&import.at("get_ledger_obj_nested_field"), params, result, 1, @@ -1904,8 +1650,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(5), result(1); auto* trap = - ww(getLedgerObjNestedField_wrap, - &import.at("get_ledger_obj_nested_field"), + ww(&import.at("get_ledger_obj_nested_field"), params, result, 1, @@ -1931,8 +1676,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(5), result(1); auto* trap = - ww(getLedgerObjNestedField_wrap, - &import.at("get_ledger_obj_nested_field"), + ww(&import.at("get_ledger_obj_nested_field"), params, result, 1, @@ -1959,8 +1703,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(5), result(1); auto* trap = - ww(getLedgerObjNestedField_wrap, - &import.at("get_ledger_obj_nested_field"), + ww(&import.at("get_ledger_obj_nested_field"), params, result, 1, @@ -1987,8 +1730,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(5), result(1); auto* trap = - ww(getLedgerObjNestedField_wrap, - &import.at("get_ledger_obj_nested_field"), + ww(&import.at("get_ledger_obj_nested_field"), params, result, slot, @@ -2058,15 +1800,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, locatorVec.data(), 3); WasmValVec params(5), result(1); auto* trap = - ww(getLedgerObjNestedField_wrap, - &import.at("get_ledger_obj_nested_field"), - params, - result, - 1, - 0, - 3, - 256, - 256); + ww(&import.at("get_ledger_obj_nested_field"), params, result, 1, 0, 3, 256, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -2120,12 +1854,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getTxArrayLen(sfMemos); { WasmValVec params(1), result(1); - auto* trap = - ww(getTxArrayLen_wrap, - &import.at("get_tx_array_len"), - params, - result, - sfMemos.getCode()); + auto* trap = ww(&import.at("get_tx_array_len"), params, result, sfMemos.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECT(result[0].of.i32 > 0)) @@ -2136,12 +1865,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getTxArrayLen(sfAccount); { WasmValVec params(1), result(1); - auto* trap = - ww(getTxArrayLen_wrap, - &import.at("get_tx_array_len"), - params, - result, - sfAccount.getCode()); + auto* trap = ww(&import.at("get_tx_array_len"), params, result, sfAccount.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::NoArray)); @@ -2151,12 +1875,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getTxArrayLen(sfSigners); { WasmValVec params(1), result(1); - auto* trap = - ww(getTxArrayLen_wrap, - &import.at("get_tx_array_len"), - params, - result, - sfSigners.getCode()); + auto* trap = ww(&import.at("get_tx_array_len"), params, result, sfSigners.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT( @@ -2168,11 +1887,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(1), result(1); auto* trap = - ww(getTxArrayLen_wrap, - &import.at("get_tx_array_len"), - params, - result, - sfCredentialIDs.getCode()); + ww(&import.at("get_tx_array_len"), params, result, sfCredentialIDs.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECT(result[0].of.i32 > 0)) @@ -2207,8 +1922,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(1), result(1); auto* trap = - ww(getCurrentLedgerObjArrayLen_wrap, - &import.at("get_current_ledger_obj_array_len"), + ww(&import.at("get_current_ledger_obj_array_len"), params, result, sfSignerEntries.getCode()); @@ -2221,12 +1935,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getCurrentLedgerObjArrayLen(sfMemos); { WasmValVec params(1), result(1); - auto* trap = - ww(getCurrentLedgerObjArrayLen_wrap, - &import.at("get_current_ledger_obj_array_len"), - params, - result, - sfMemos.getCode()); + auto* trap = ww( + &import.at("get_current_ledger_obj_array_len"), params, result, sfMemos.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT( @@ -2238,8 +1948,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(1), result(1); auto* trap = - ww(getCurrentLedgerObjArrayLen_wrap, - &import.at("get_current_ledger_obj_array_len"), + ww(&import.at("get_current_ledger_obj_array_len"), params, result, sfAccount.getCode()); @@ -2258,12 +1967,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // auto const len = dummyHfs.getCurrentLedgerObjArrayLen(sfMemos); WasmValVec params(1), result(1); - auto* trap = - ww(getCurrentLedgerObjArrayLen_wrap, - &import2.at("get_current_ledger_obj_array_len"), - params, - result, - sfMemos.getCode()); + auto* trap = ww( + &import2.at("get_current_ledger_obj_array_len"), params, result, sfMemos.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT( @@ -2299,14 +2004,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); vrt.setBytes(0, signerListKeylet.key.data(), uint256::size()); - auto* trap = - ww(cacheLedgerObj_wrap, - &import.at("cache_ledger_obj"), - params, - result, - 0, - uint256::size(), - 1); + auto* trap = ww(&import.at("cache_ledger_obj"), params, result, 0, uint256::size(), 1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); } @@ -2315,8 +2013,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getLedgerObjArrayLen(1, sfSignerEntries); WasmValVec params(2), result(1); auto* trap = - ww(getLedgerObjArrayLen_wrap, - &import.at("get_ledger_obj_array_len"), + ww(&import.at("get_ledger_obj_array_len"), params, result, 1, @@ -2333,8 +2030,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getLedgerObjArrayLen(0, sfSignerEntries); WasmValVec params(2), result(1); auto* trap = - ww(getLedgerObjArrayLen_wrap, - &import.at("get_ledger_obj_array_len"), + ww(&import.at("get_ledger_obj_array_len"), params, result, 0, @@ -2349,12 +2045,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getLedgerObjArrayLen(1, sfAccount); WasmValVec params(2), result(1); auto* trap = - ww(getLedgerObjArrayLen_wrap, - &import.at("get_ledger_obj_array_len"), - params, - result, - 1, - sfAccount.getCode()); + ww(&import.at("get_ledger_obj_array_len"), params, result, 1, sfAccount.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::NoArray)); @@ -2365,8 +2056,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getLedgerObjArrayLen(2, sfSignerEntries); WasmValVec params(2), result(1); auto* trap = - ww(getLedgerObjArrayLen_wrap, - &import.at("get_ledger_obj_array_len"), + ww(&import.at("get_ledger_obj_array_len"), params, result, 2, @@ -2381,12 +2071,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getLedgerObjArrayLen(1, sfMemos); WasmValVec params(2), result(1); auto* trap = - ww(getLedgerObjArrayLen_wrap, - &import.at("get_ledger_obj_array_len"), - params, - result, - 1, - sfMemos.getCode()); + ww(&import.at("get_ledger_obj_array_len"), params, result, 1, sfMemos.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT( @@ -2426,8 +2111,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(2), result(1); auto* trap = - ww(getTxNestedArrayLen_wrap, - &import.at("get_tx_nested_array_len"), + ww(&import.at("get_tx_nested_array_len"), params, result, 0, @@ -2445,8 +2129,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(2), result(1); auto* trap = - ww(getTxNestedArrayLen_wrap, - &import.at("get_tx_nested_array_len"), + ww(&import.at("get_tx_nested_array_len"), params, result, 0, @@ -2493,8 +2176,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(2), result(1); auto* trap = - ww(getCurrentLedgerObjNestedArrayLen_wrap, - &import.at("get_current_ledger_obj_nested_array_len"), + ww(&import.at("get_current_ledger_obj_nested_array_len"), params, result, 0, @@ -2512,8 +2194,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(2), result(1); auto* trap = - ww(getCurrentLedgerObjNestedArrayLen_wrap, - &import.at("get_current_ledger_obj_nested_array_len"), + ww(&import.at("get_current_ledger_obj_nested_array_len"), params, result, 0, @@ -2542,8 +2223,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt2.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(2), result(1); auto* trap = - ww(getCurrentLedgerObjNestedArrayLen_wrap, - &import2.at("get_current_ledger_obj_nested_array_len"), + ww(&import2.at("get_current_ledger_obj_nested_array_len"), params, result, 0, @@ -2583,14 +2263,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); vrt.setBytes(0, signerListKeylet.key.data(), uint256::size()); - auto* trap = - ww(cacheLedgerObj_wrap, - &import.at("cache_ledger_obj"), - params, - result, - 0, - uint256::size(), - 1); + auto* trap = ww(&import.at("cache_ledger_obj"), params, result, 0, uint256::size(), 1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); } @@ -2602,8 +2275,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(3), result(1); auto* trap = - ww(getLedgerObjNestedArrayLen_wrap, - &import.at("get_ledger_obj_nested_array_len"), + ww(&import.at("get_ledger_obj_nested_array_len"), params, result, 1, @@ -2623,8 +2295,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(3), result(1); auto* trap = - ww(getLedgerObjNestedArrayLen_wrap, - &import.at("get_ledger_obj_nested_array_len"), + ww(&import.at("get_ledger_obj_nested_array_len"), params, result, slot, @@ -2657,14 +2328,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getLedgerObjNestedArrayLen(1, malformedLocator); vrt.setBytes(0, locatorVec.data(), 3); WasmValVec params(3), result(1); - auto* trap = - ww(getLedgerObjNestedArrayLen_wrap, - &import.at("get_ledger_obj_nested_array_len"), - params, - result, - 1, - 0, - 3); + auto* trap = ww(&import.at("get_ledger_obj_nested_array_len"), params, result, 1, 0, 3); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -2704,8 +2368,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { vrt.setBytes(0, data.data(), data.size()); WasmValVec params(2), result(1); - auto* trap = - ww(updateData_wrap, &import.at("update_data"), params, result, 0, data.size()); + auto* trap = ww(&import.at("update_data"), params, result, 0, data.size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == data.size()); @@ -2718,8 +2381,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { vrt.setBytes(0, bigData.data(), bigData.size()); WasmValVec params(2), result(1); - auto* trap = - ww(updateData_wrap, &import.at("update_data"), params, result, 0, bigData.size()); + auto* trap = ww(&import.at("update_data"), params, result, 0, bigData.size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -2762,8 +2424,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(512, pk.data(), pk.size()); WasmValVec params(6), result(1); auto* trap = - ww(checkSignature_wrap, - &import.at("check_sig"), + ww(&import.at("check_sig"), params, result, 0, @@ -2789,8 +2450,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(512, pk.data(), pk.size()); WasmValVec params(6), result(1); auto* trap = - ww(checkSignature_wrap, - &import.at("check_sig"), + ww(&import.at("check_sig"), params, result, 0, @@ -2816,8 +2476,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(512, badPk.data(), badPk.size()); WasmValVec params(6), result(1); auto* trap = - ww(checkSignature_wrap, - &import.at("check_sig"), + ww(&import.at("check_sig"), params, result, 0, @@ -2841,8 +2500,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(256, sig.data(), sig.size()); WasmValVec params(6), result(1); auto* trap = - ww(checkSignature_wrap, - &import.at("check_sig"), + ww(&import.at("check_sig"), params, result, 0, @@ -2865,17 +2523,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, message.data(), message.size()); vrt.setBytes(512, pk.data(), pk.size()); WasmValVec params(6), result(1); - auto* trap = - ww(checkSignature_wrap, - &import.at("check_sig"), - params, - result, - 0, - message.size(), - 256, - 0, - 512, - pk.size()); + auto* trap = ww( + &import.at("check_sig"), params, result, 0, message.size(), 256, 0, 512, pk.size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0); @@ -2889,16 +2538,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(512, pk.data(), pk.size()); WasmValVec params(6), result(1); auto* trap = - ww(checkSignature_wrap, - &import.at("check_sig"), - params, - result, - 0, - 0, - 256, - sig.size(), - 512, - pk.size()); + ww(&import.at("check_sig"), params, result, 0, 0, 256, sig.size(), 512, pk.size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0); @@ -2928,8 +2568,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, data.data(), data.size()); WasmValVec params(4), result(1); auto* trap = - ww(computeSha512HalfHash_wrap, - &import.at("compute_sha512_half"), + ww(&import.at("compute_sha512_half"), params, result, 0, @@ -2976,22 +2615,14 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { auto const expected = keylet::account(masterID); WasmValVec params(4), result(1); - auto* trap = ww( - accountKeylet_wrap, &imp.at("account_keylet"), params, result, masterID, 1024, 32); + auto* trap = ww(&imp.at("account_keylet"), params, result, masterID, 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 2); BEAST_EXPECT(compareKeylet(actual, expected)); } - auto* trap2 = - ww(accountKeylet_wrap, - &imp.at("account_keylet"), - params, - result, - xrpAccount(), - 1024, - 32); + auto* trap2 = ww(&imp.at("account_keylet"), params, result, xrpAccount(), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); @@ -3001,15 +2632,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite auto const expected = keylet::amm(xrpIssue(), usdIssue); WasmValVec params(6), result(1); - auto* trap = - ww(ammKeylet_wrap, - &imp.at("amm_keylet"), - params, - result, - xrpIssue(), - usdIssue, - 1024, - 32); + auto* trap = ww(&imp.at("amm_keylet"), params, result, xrpIssue(), usdIssue, 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); @@ -3017,27 +2640,12 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } auto* trap2 = - ww(ammKeylet_wrap, - &imp.at("amm_keylet"), - params, - result, - xrpIssue(), - xrpIssue(), - 1024, - 32); + ww(&imp.at("amm_keylet"), params, result, xrpIssue(), xrpIssue(), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidParams)); - auto* trap3 = - ww(ammKeylet_wrap, - &imp.at("amm_keylet"), - params, - result, - baseMpt, - xrpIssue(), - 1024, - 32); + auto* trap3 = ww(&imp.at("amm_keylet"), params, result, baseMpt, xrpIssue(), 1024, 32); BEAST_EXPECT( !trap3 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidParams)); @@ -3047,14 +2655,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite auto const expected = keylet::check(masterID, 1u); WasmValVec params(6), result(1); auto* trap = - ww(checkKeylet_wrap, - &imp.at("check_keylet"), - params, - result, - masterID, - toBytes(1u), - 1024, - 32); + ww(&imp.at("check_keylet"), params, result, masterID, toBytes(1u), 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); @@ -3062,14 +2663,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } auto* trap2 = - ww(checkKeylet_wrap, - &imp.at("check_keylet"), - params, - result, - xrpAccount(), - toBytes(1u), - 1024, - 32); + ww(&imp.at("check_keylet"), params, result, xrpAccount(), toBytes(1u), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); @@ -3082,8 +2676,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite auto const expected = keylet::credential(masterID, masterID, credType); WasmValVec params(8), result(1); auto* trap = - ww(credentialKeylet_wrap, - &imp.at("credential_keylet"), + ww(&imp.at("credential_keylet"), params, result, masterID, @@ -3103,8 +2696,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite Slice const longCredType(longCredTypeStr.data(), longCredTypeStr.size()); static_assert(longCredTypeStr.size() > kMaxCredentialTypeLength); auto* trap2 = - ww(credentialKeylet_wrap, - &imp.at("credential_keylet"), + ww(&imp.at("credential_keylet"), params, result, masterID, @@ -3117,8 +2709,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite result[0].of.i32 == static_cast(HostFunctionError::InvalidParams)); auto* trap3 = - ww(credentialKeylet_wrap, - &imp.at("credential_keylet"), + ww(&imp.at("credential_keylet"), params, result, xrpAccount(), @@ -3131,8 +2722,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); auto* trap4 = - ww(credentialKeylet_wrap, - &imp.at("credential_keylet"), + ww(&imp.at("credential_keylet"), params, result, masterID, @@ -3148,16 +2738,14 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { auto const expected = keylet::did(masterID); WasmValVec params(4), result(1); - auto* trap = - ww(didKeylet_wrap, &imp.at("did_keylet"), params, result, masterID, 1024, 32); + auto* trap = ww(&imp.at("did_keylet"), params, result, masterID, 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 2); BEAST_EXPECT(compareKeylet(actual, expected)); } - auto* trap2 = - ww(didKeylet_wrap, &imp.at("did_keylet"), params, result, xrpAccount(), 1024, 32); + auto* trap2 = ww(&imp.at("did_keylet"), params, result, xrpAccount(), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); @@ -3167,14 +2755,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite auto const expected = keylet::delegate(masterID, alice.id()); WasmValVec params(6), result(1); auto* trap = - ww(delegateKeylet_wrap, - &imp.at("delegate_keylet"), - params, - result, - masterID, - alice.id(), - 1024, - 32); + ww(&imp.at("delegate_keylet"), params, result, masterID, alice.id(), 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); @@ -3182,40 +2763,19 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } auto* trap2 = - ww(delegateKeylet_wrap, - &imp.at("delegate_keylet"), - params, - result, - masterID, - masterID, - 1024, - 32); + ww(&imp.at("delegate_keylet"), params, result, masterID, masterID, 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidParams)); auto* trap3 = - ww(delegateKeylet_wrap, - &imp.at("delegate_keylet"), - params, - result, - masterID, - xrpAccount(), - 1024, - 32); + ww(&imp.at("delegate_keylet"), params, result, masterID, xrpAccount(), 1024, 32); BEAST_EXPECT( !trap3 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); auto* trap4 = - ww(delegateKeylet_wrap, - &imp.at("delegate_keylet"), - params, - result, - xrpAccount(), - masterID, - 1024, - 32); + ww(&imp.at("delegate_keylet"), params, result, xrpAccount(), masterID, 1024, 32); BEAST_EXPECT( !trap4 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); @@ -3224,15 +2784,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { auto const expected = keylet::depositPreauth(masterID, alice.id()); WasmValVec params(6), result(1); - auto* trap = - ww(depositPreauthKeylet_wrap, - &imp.at("deposit_preauth_keylet"), - params, - result, - masterID, - alice.id(), - 1024, - 32); + auto* trap = ww( + &imp.at("deposit_preauth_keylet"), params, result, masterID, alice.id(), 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); @@ -3240,21 +2793,13 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } auto* trap2 = - ww(depositPreauthKeylet_wrap, - &imp.at("deposit_preauth_keylet"), - params, - result, - masterID, - masterID, - 1024, - 32); + ww(&imp.at("deposit_preauth_keylet"), params, result, masterID, masterID, 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidParams)); auto* trap3 = - ww(depositPreauthKeylet_wrap, - &imp.at("deposit_preauth_keylet"), + ww(&imp.at("deposit_preauth_keylet"), params, result, masterID, @@ -3266,8 +2811,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); auto* trap4 = - ww(depositPreauthKeylet_wrap, - &imp.at("deposit_preauth_keylet"), + ww(&imp.at("deposit_preauth_keylet"), params, result, xrpAccount(), @@ -3283,14 +2827,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite auto const expected = keylet::escrow(masterID, 1u); WasmValVec params(6), result(1); auto* trap = - ww(escrowKeylet_wrap, - &imp.at("escrow_keylet"), - params, - result, - masterID, - toBytes(1u), - 1024, - 32); + ww(&imp.at("escrow_keylet"), params, result, masterID, toBytes(1u), 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); @@ -3298,14 +2835,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } auto* trap2 = - ww(escrowKeylet_wrap, - &imp.at("escrow_keylet"), - params, - result, - xrpAccount(), - toBytes(1u), - 1024, - 32); + ww(&imp.at("escrow_keylet"), params, result, xrpAccount(), toBytes(1u), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); @@ -3316,15 +2846,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite auto const expected = keylet::line(masterID, alice.id(), usd); WasmValVec params(8), result(1); auto* trap = - ww(lineKeylet_wrap, - &imp.at("line_keylet"), - params, - result, - masterID, - alice.id(), - usd, - 1024, - 32); + ww(&imp.at("line_keylet"), params, result, masterID, alice.id(), usd, 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 6); @@ -3332,50 +2854,25 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } auto* trap2 = - ww(lineKeylet_wrap, - &imp.at("line_keylet"), - params, - result, - masterID, - masterID, - usd, - 1024, - 32); + ww(&imp.at("line_keylet"), params, result, masterID, masterID, usd, 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidParams)); auto* trap3 = - ww(lineKeylet_wrap, - &imp.at("line_keylet"), - params, - result, - masterID, - xrpAccount(), - usd, - 1024, - 32); + ww(&imp.at("line_keylet"), params, result, masterID, xrpAccount(), usd, 1024, 32); BEAST_EXPECT( !trap3 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); auto* trap4 = - ww(lineKeylet_wrap, - &imp.at("line_keylet"), - params, - result, - xrpAccount(), - masterID, - usd, - 1024, - 32); + ww(&imp.at("line_keylet"), params, result, xrpAccount(), masterID, usd, 1024, 32); BEAST_EXPECT( !trap4 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); auto* trap5 = - ww(lineKeylet_wrap, - &imp.at("line_keylet"), + ww(&imp.at("line_keylet"), params, result, masterID, @@ -3392,14 +2889,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite auto const expected = keylet::mptIssuance(1u, masterID); WasmValVec params(6), result(1); auto* trap = - ww(mptIssuanceKeylet_wrap, - &imp.at("mpt_issuance_keylet"), - params, - result, - masterID, - toBytes(1u), - 1024, - 32); + ww(&imp.at("mpt_issuance_keylet"), params, result, masterID, toBytes(1u), 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); @@ -3407,8 +2897,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } auto* trap2 = - ww(mptIssuanceKeylet_wrap, - &imp.at("mpt_issuance_keylet"), + ww(&imp.at("mpt_issuance_keylet"), params, result, xrpAccount(), @@ -3424,14 +2913,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite auto const expected = keylet::mptoken(baseMpt, alice.id()); WasmValVec params(6), result(1); auto* trap = - ww(mptokenKeylet_wrap, - &imp.at("mptoken_keylet"), - params, - result, - baseMpt, - alice.id(), - 1024, - 32); + ww(&imp.at("mptoken_keylet"), params, result, baseMpt, alice.id(), 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); @@ -3439,27 +2921,13 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } auto* trap2 = - ww(mptokenKeylet_wrap, - &imp.at("mptoken_keylet"), - params, - result, - MPTID{}, - alice.id(), - 1024, - 32); + ww(&imp.at("mptoken_keylet"), params, result, MPTID{}, alice.id(), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidParams)); auto* trap3 = - ww(mptokenKeylet_wrap, - &imp.at("mptoken_keylet"), - params, - result, - baseMpt, - xrpAccount(), - 1024, - 32); + ww(&imp.at("mptoken_keylet"), params, result, baseMpt, xrpAccount(), 1024, 32); BEAST_EXPECT( !trap3 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); @@ -3469,29 +2937,15 @@ struct HostFuncImpl_test : public beast::unit_test::Suite auto const expected = keylet::nftoffer(masterID, 1u); WasmValVec params(6), result(1); auto* trap = - ww(nftOfferKeylet_wrap, - &imp.at("nft_offer_keylet"), - params, - result, - masterID, - toBytes(1u), - 1024, - 32); + ww(&imp.at("nft_offer_keylet"), params, result, masterID, toBytes(1u), 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); BEAST_EXPECT(compareKeylet(actual, expected)); } - auto* trap2 = - ww(nftOfferKeylet_wrap, - &imp.at("nft_offer_keylet"), - params, - result, - xrpAccount(), - toBytes(1u), - 1024, - 32); + auto* trap2 = ww( + &imp.at("nft_offer_keylet"), params, result, xrpAccount(), toBytes(1u), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); @@ -3501,14 +2955,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite auto const expected = keylet::offer(masterID, 1u); WasmValVec params(6), result(1); auto* trap = - ww(offerKeylet_wrap, - &imp.at("offer_keylet"), - params, - result, - masterID, - toBytes(1u), - 1024, - 32); + ww(&imp.at("offer_keylet"), params, result, masterID, toBytes(1u), 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); @@ -3516,14 +2963,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } auto* trap2 = - ww(offerKeylet_wrap, - &imp.at("offer_keylet"), - params, - result, - xrpAccount(), - toBytes(1u), - 1024, - 32); + ww(&imp.at("offer_keylet"), params, result, xrpAccount(), toBytes(1u), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); @@ -3533,14 +2973,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite auto const expected = keylet::oracle(masterID, 1u); WasmValVec params(6), result(1); auto* trap = - ww(oracleKeylet_wrap, - &imp.at("oracle_keylet"), - params, - result, - masterID, - toBytes(1u), - 1024, - 32); + ww(&imp.at("oracle_keylet"), params, result, masterID, toBytes(1u), 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); @@ -3548,14 +2981,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } auto* trap2 = - ww(oracleKeylet_wrap, - &imp.at("oracle_keylet"), - params, - result, - xrpAccount(), - toBytes(1u), - 1024, - 32); + ww(&imp.at("oracle_keylet"), params, result, xrpAccount(), toBytes(1u), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); @@ -3565,8 +2991,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite auto const expected = keylet::payChan(masterID, alice.id(), 1u); WasmValVec params(8), result(1); auto* trap = - ww(paychanKeylet_wrap, - &imp.at("paychan_keylet"), + ww(&imp.at("paychan_keylet"), params, result, masterID, @@ -3581,8 +3006,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } auto* trap2 = - ww(paychanKeylet_wrap, - &imp.at("paychan_keylet"), + ww(&imp.at("paychan_keylet"), params, result, masterID, @@ -3595,8 +3019,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite result[0].of.i32 == static_cast(HostFunctionError::InvalidParams)); auto* trap3 = - ww(paychanKeylet_wrap, - &imp.at("paychan_keylet"), + ww(&imp.at("paychan_keylet"), params, result, masterID, @@ -3609,8 +3032,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); auto* trap4 = - ww(paychanKeylet_wrap, - &imp.at("paychan_keylet"), + ww(&imp.at("paychan_keylet"), params, result, xrpAccount(), @@ -3627,8 +3049,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite auto const expected = keylet::permissionedDomain(masterID, 1u); WasmValVec params(6), result(1); auto* trap = - ww(permissionedDomainKeylet_wrap, - &imp.at("permissioned_domain_keylet"), + ww(&imp.at("permissioned_domain_keylet"), params, result, masterID, @@ -3642,8 +3063,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } auto* trap2 = - ww(permissionedDomainKeylet_wrap, - &imp.at("permissioned_domain_keylet"), + ww(&imp.at("permissioned_domain_keylet"), params, result, xrpAccount(), @@ -3658,22 +3078,14 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { auto const expected = keylet::signers(masterID); WasmValVec params(4), result(1); - auto* trap = ww( - signersKeylet_wrap, &imp.at("signers_keylet"), params, result, masterID, 1024, 32); + auto* trap = ww(&imp.at("signers_keylet"), params, result, masterID, 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 2); BEAST_EXPECT(compareKeylet(actual, expected)); } - auto* trap2 = - ww(signersKeylet_wrap, - &imp.at("signers_keylet"), - params, - result, - xrpAccount(), - 1024, - 32); + auto* trap2 = ww(&imp.at("signers_keylet"), params, result, xrpAccount(), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); @@ -3683,14 +3095,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite auto const expected = keylet::kTicket(masterID, 1u); WasmValVec params(6), result(1); auto* trap = - ww(ticketKeylet_wrap, - &imp.at("ticket_keylet"), - params, - result, - masterID, - toBytes(1u), - 1024, - 32); + ww(&imp.at("ticket_keylet"), params, result, masterID, toBytes(1u), 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); @@ -3698,14 +3103,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } auto* trap2 = - ww(ticketKeylet_wrap, - &imp.at("ticket_keylet"), - params, - result, - xrpAccount(), - toBytes(1u), - 1024, - 32); + ww(&imp.at("ticket_keylet"), params, result, xrpAccount(), toBytes(1u), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); @@ -3715,14 +3113,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite auto const expected = keylet::vault(masterID, 1u); WasmValVec params(6), result(1); auto* trap = - ww(vaultKeylet_wrap, - &imp.at("vault_keylet"), - params, - result, - masterID, - toBytes(1u), - 1024, - 32); + ww(&imp.at("vault_keylet"), params, result, masterID, toBytes(1u), 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); @@ -3730,14 +3121,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } auto* trap2 = - ww(vaultKeylet_wrap, - &imp.at("vault_keylet"), - params, - result, - xrpAccount(), - toBytes(1u), - 1024, - 32); + ww(&imp.at("vault_keylet"), params, result, xrpAccount(), toBytes(1u), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); @@ -3781,8 +3165,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(256, nftId.data(), uint256::size()); WasmValVec params(6), result(1); auto* trap = - ww(getNFT_wrap, - &import.at("get_nft"), + ww(&import.at("get_nft"), params, result, 0, @@ -3808,8 +3191,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(256, nftId.data(), uint256::size()); WasmValVec params(6), result(1); auto* trap = - ww(getNFT_wrap, - &import.at("get_nft"), + ww(&import.at("get_nft"), params, result, 0, @@ -3831,8 +3213,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(256, zeroId.data(), uint256::size()); WasmValVec params(6), result(1); auto* trap = - ww(getNFT_wrap, - &import.at("get_nft"), + ww(&import.at("get_nft"), params, result, 0, @@ -3854,8 +3235,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(256, badId.data(), uint256::size()); WasmValVec params(6), result(1); auto* trap = - ww(getNFT_wrap, - &import.at("get_nft"), + ww(&import.at("get_nft"), params, result, 0, @@ -3876,8 +3256,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(256, nftId2.data(), uint256::size()); WasmValVec params(6), result(1); auto* trap = - ww(getNFT_wrap, - &import.at("get_nft"), + ww(&import.at("get_nft"), params, result, 0, @@ -3921,8 +3300,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, nftId.data(), uint256::size()); WasmValVec params(4), result(1); auto* trap = - ww(getNFTIssuer_wrap, - &import.at("get_nft_issuer"), + ww(&import.at("get_nft_issuer"), params, result, 0, @@ -3945,8 +3323,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, zeroId.data(), uint256::size()); WasmValVec params(4), result(1); auto* trap = - ww(getNFTIssuer_wrap, - &import.at("get_nft_issuer"), + ww(&import.at("get_nft_issuer"), params, result, 0, @@ -3985,15 +3362,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getNFTTaxon(nftId); vrt.setBytes(0, nftId.data(), uint256::size()); WasmValVec params(4), result(1); - auto* trap = - ww(getNFTTaxon_wrap, - &import.at("get_nft_taxon"), - params, - result, - 0, - uint256::size(), - 256, - sizeof(uint32_t)); + auto* trap = ww( + &import.at("get_nft_taxon"), params, result, 0, uint256::size(), 256, sizeof(uint32_t)); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == sizeof(uint32_t))) @@ -4029,8 +3399,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getNFTFlags(nftId); vrt.setBytes(0, nftId.data(), uint256::size()); WasmValVec params(2), result(1); - auto* trap = ww( - getNFTFlags_wrap, &import.at("get_nft_flags"), params, result, 0, uint256::size()); + auto* trap = ww(&import.at("get_nft_flags"), params, result, 0, uint256::size()); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) BEAST_EXPECT(result[0].of.i32 == tfTransferable); @@ -4042,8 +3411,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite uint256 zeroId; vrt.setBytes(0, zeroId.data(), uint256::size()); WasmValVec params(2), result(1); - auto* trap = ww( - getNFTFlags_wrap, &import.at("get_nft_flags"), params, result, 0, uint256::size()); + auto* trap = ww(&import.at("get_nft_flags"), params, result, 0, uint256::size()); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) BEAST_EXPECT(result[0].of.i32 == 0); @@ -4077,13 +3445,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getNFTTransferFee(nftId); vrt.setBytes(0, nftId.data(), uint256::size()); WasmValVec params(2), result(1); - auto* trap = - ww(getNFTTransferFee_wrap, - &import.at("get_nft_transfer_fee"), - params, - result, - 0, - uint256::size()); + auto* trap = ww(&import.at("get_nft_transfer_fee"), params, result, 0, uint256::size()); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) BEAST_EXPECT(result[0].of.i32 == transferFee); @@ -4095,13 +3457,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite uint256 zeroId; vrt.setBytes(0, zeroId.data(), uint256::size()); WasmValVec params(2), result(1); - auto* trap = - ww(getNFTTransferFee_wrap, - &import.at("get_nft_transfer_fee"), - params, - result, - 0, - uint256::size()); + auto* trap = ww(&import.at("get_nft_transfer_fee"), params, result, 0, uint256::size()); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) BEAST_EXPECT(result[0].of.i32 == 0); @@ -4137,8 +3493,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, nftId.data(), uint256::size()); WasmValVec params(4), result(1); auto* trap = - ww(getNFTSerial_wrap, - &import.at("get_nft_serial"), + ww(&import.at("get_nft_serial"), params, result, 0, @@ -4160,8 +3515,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, zeroId.data(), uint256::size()); WasmValVec params(4), result(1); auto* trap = - ww(getNFTSerial_wrap, - &import.at("get_nft_serial"), + ww(&import.at("get_nft_serial"), params, result, 0, @@ -4207,15 +3561,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(256, slice.data(), slice.size()); WasmValVec params(5), result(1); auto* trap = - ww(trace_wrap, - &import.at("trace"), - params, - result, - 0, - msg.size(), - 256, - slice.size(), - 0); + ww(&import.at("trace"), params, result, 0, msg.size(), 256, slice.size(), 0); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0)) @@ -4231,15 +3577,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(256, slice.data(), slice.size()); WasmValVec params(5), result(1); auto* trap = - ww(trace_wrap, - &import.at("trace"), - params, - result, - 0, - msg.size(), - 256, - slice.size(), - 1); + ww(&import.at("trace"), params, result, 0, msg.size(), 256, slice.size(), 1); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0)) @@ -4278,15 +3616,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(256, slice.data(), slice.size()); WasmValVec params(5), result(1); auto* trap = - ww(trace_wrap, - &import.at("trace"), - params, - result, - 0, - msg.size(), - 256, - slice.size(), - 0); + ww(&import.at("trace"), params, result, 0, msg.size(), 256, slice.size(), 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0); @@ -4321,8 +3651,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.traceNum(msg, num); vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); WasmValVec params(3), result(1); - auto* trap = - ww(traceNum_wrap, &import.at("trace_num"), params, result, 0, msg.size(), num); + auto* trap = ww(&import.at("trace_num"), params, result, 0, msg.size(), num); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0)) @@ -4354,8 +3683,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.traceNum(msg, num); vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); WasmValVec params(3), result(1); - auto* trap = - ww(traceNum_wrap, &import.at("trace_num"), params, result, 0, msg.size(), num); + auto* trap = ww(&import.at("trace_num"), params, result, 0, msg.size(), num); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0); @@ -4391,15 +3719,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); vrt.setBytes(256, accountId.data(), accountId.size()); WasmValVec params(4), result(1); - auto* trap = - ww(traceAccount_wrap, - &import.at("trace_account"), - params, - result, - 0, - msg.size(), - 256, - accountId.size()); + auto* trap = ww( + &import.at("trace_account"), params, result, 0, msg.size(), 256, accountId.size()); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0)) @@ -4432,15 +3753,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); vrt.setBytes(256, accountId.data(), accountId.size()); WasmValVec params(4), result(1); - auto* trap = - ww(traceAccount_wrap, - &import.at("trace_account"), - params, - result, - 0, - msg.size(), - 256, - accountId.size()); + auto* trap = ww( + &import.at("trace_account"), params, result, 0, msg.size(), 256, accountId.size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0); @@ -4478,8 +3792,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(256, amountBytes.data(), amountBytes.size()); WasmValVec params(4), result(1); auto* trap = - ww(traceAmount_wrap, - &import.at("trace_amount"), + ww(&import.at("trace_amount"), params, result, 0, @@ -4508,8 +3821,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(256, amountBytes.data(), amountBytes.size()); WasmValVec params(4), result(1); auto* trap = - ww(traceAmount_wrap, - &import.at("trace_amount"), + ww(&import.at("trace_amount"), params, result, 0, @@ -4533,8 +3845,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(256, amountBytes.data(), amountBytes.size()); WasmValVec params(4), result(1); auto* trap = - ww(traceAmount_wrap, - &import.at("trace_amount"), + ww(&import.at("trace_amount"), params, result, 0, @@ -4570,15 +3881,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); vrt.setBytes(256, amountBytes.data(), amountBytes.size()); WasmValVec params(4), result(1); - auto* trap = - ww(traceAmount_wrap, - &import.at("trace_amount"), - params, - result, - 0, - msg.size(), - 256, - amountBytes.size()); + auto* trap = ww( + &import.at("trace_amount"), params, result, 0, msg.size(), 256, amountBytes.size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0); @@ -4699,8 +4003,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(256, reinterpret_cast(invalid.data()), invalid.size()); WasmValVec params(4), result(1); auto* trap = - ww(traceFloat_wrap, - &import.at("trace_opaque_float"), + ww(&import.at("trace_opaque_float"), params, result, 0, @@ -4718,8 +4021,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(256, floatMaxExp.data(), floatMaxExp.size()); WasmValVec params(4), result(1); auto* trap = - ww(traceFloat_wrap, - &import.at("trace_opaque_float"), + ww(&import.at("trace_opaque_float"), params, result, 0, @@ -4754,8 +4056,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(256, reinterpret_cast(invalid.data()), invalid.size()); WasmValVec params(4), result(1); auto* trap = - ww(traceFloat_wrap, - &import.at("trace_opaque_float"), + ww(&import.at("trace_opaque_float"), params, result, 0, @@ -4789,15 +4090,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.floatFromInt(min64, -1); WasmValVec params(4), result(1); - auto* trap = - ww(floatFromInt_wrap, - &import.at("float_from_int"), - params, - result, - min64, - 0, - floatSize, - -1); + auto* trap = ww(&import.at("float_from_int"), params, result, min64, 0, floatSize, -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -4808,15 +4101,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.floatFromInt(min64, 4); WasmValVec params(4), result(1); - auto* trap = - ww(floatFromInt_wrap, - &import.at("float_from_int"), - params, - result, - min64, - 0, - floatSize, - 4); + auto* trap = ww(&import.at("float_from_int"), params, result, min64, 0, floatSize, 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -4827,15 +4112,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.floatFromInt(min64, 0); WasmValVec params(4), result(1); - auto* trap = - ww(floatFromInt_wrap, - &import.at("float_from_int"), - params, - result, - min64, - 0, - floatSize, - 0); + auto* trap = ww(&import.at("float_from_int"), params, result, min64, 0, floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == floatSize); @@ -4846,15 +4123,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.floatFromInt(0, 0); WasmValVec params(4), result(1); - auto* trap = - ww(floatFromInt_wrap, - &import.at("float_from_int"), - params, - result, - 0ll, - 0, - floatSize, - 0); + auto* trap = ww(&import.at("float_from_int"), params, result, 0ll, 0, floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == floatSize); @@ -4865,15 +4134,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.floatFromInt(max64, 0); WasmValVec params(4), result(1); - auto* trap = - ww(floatFromInt_wrap, - &import.at("float_from_int"), - params, - result, - max64, - 0, - floatSize, - 0); + auto* trap = ww(&import.at("float_from_int"), params, result, max64, 0, floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == floatSize); @@ -4903,16 +4164,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(5), result(1); uint64_t val = std::numeric_limits::min(); vrt.setBytes(0, &val, sizeof(val)); - auto* trap = - ww(floatFromUint_wrap, - &import.at("float_from_uint"), - params, - result, - 0, - 8, - 16, - floatSize, - -1); + auto* trap = ww(&import.at("float_from_uint"), params, result, 0, 8, 16, floatSize, -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -4925,16 +4177,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(5), result(1); uint64_t val = std::numeric_limits::min(); vrt.setBytes(0, &val, sizeof(val)); - auto* trap = - ww(floatFromUint_wrap, - &import.at("float_from_uint"), - params, - result, - 0, - 8, - 16, - floatSize, - 4); + auto* trap = ww(&import.at("float_from_uint"), params, result, 0, 8, 16, floatSize, 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -4947,16 +4190,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(5), result(1); uint64_t val = 0; vrt.setBytes(0, &val, sizeof(val)); - auto* trap = - ww(floatFromUint_wrap, - &import.at("float_from_uint"), - params, - result, - 0, - 8, - 16, - floatSize, - 0); + auto* trap = ww(&import.at("float_from_uint"), params, result, 0, 8, 16, floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == floatSize); @@ -4969,16 +4203,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(5), result(1); uint64_t val = std::numeric_limits::max(); vrt.setBytes(0, &val, sizeof(val)); - auto* trap = - ww(floatFromUint_wrap, - &import.at("float_from_uint"), - params, - result, - 0, - 8, - 16, - floatSize, - 0); + auto* trap = ww(&import.at("float_from_uint"), params, result, 0, 8, 16, floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == floatSize); @@ -5008,15 +4233,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatFromMantExp(1, 0, -1); WasmValVec params(5), result(1); auto* trap = - ww(floatFromMantExp_wrap, - &import.at("float_from_mant_exp"), - params, - result, - 1ll, - 0, - 0, - floatSize, - -1); + ww(&import.at("float_from_mant_exp"), params, result, 1ll, 0, 0, floatSize, -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -5028,15 +4245,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatFromMantExp(1, 0, 4); WasmValVec params(5), result(1); auto* trap = - ww(floatFromMantExp_wrap, - &import.at("float_from_mant_exp"), - params, - result, - 1ll, - 0, - 0, - floatSize, - 4); + ww(&import.at("float_from_mant_exp"), params, result, 1ll, 0, 0, floatSize, 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -5048,8 +4257,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatFromMantExp(1, Number::kMaxExponent + normalExp + 1, 0); WasmValVec params(5), result(1); auto* trap = - ww(floatFromMantExp_wrap, - &import.at("float_from_mant_exp"), + ww(&import.at("float_from_mant_exp"), params, result, 1ll, @@ -5068,8 +4276,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatFromMantExp(1, Number::kMinExponent + normalExp - 1, 0); WasmValVec params(5), result(1); auto* trap = - ww(floatFromMantExp_wrap, - &import.at("float_from_mant_exp"), + ww(&import.at("float_from_mant_exp"), params, result, 1ll, @@ -5088,8 +4295,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatFromMantExp(1, Number::kMaxExponent + normalExp, 0); WasmValVec params(5), result(1); auto* trap = - ww(floatFromMantExp_wrap, - &import.at("float_from_mant_exp"), + ww(&import.at("float_from_mant_exp"), params, result, 1ll, @@ -5108,8 +4314,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatFromMantExp(-1, Number::kMaxExponent + normalExp, 0); WasmValVec params(5), result(1); auto* trap = - ww(floatFromMantExp_wrap, - &import.at("float_from_mant_exp"), + ww(&import.at("float_from_mant_exp"), params, result, -1ll, @@ -5128,8 +4333,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatFromMantExp(1, Number::kMaxExponent + normalExp - 1, 0); WasmValVec params(5), result(1); auto* trap = - ww(floatFromMantExp_wrap, - &import.at("float_from_mant_exp"), + ww(&import.at("float_from_mant_exp"), params, result, 1ll, @@ -5148,8 +4352,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatFromMantExp(STAmount::kMaxValue, STAmount::kMaxOffset, 0); WasmValVec params(5), result(1); auto* trap = - ww(floatFromMantExp_wrap, - &import.at("float_from_mant_exp"), + ww(&import.at("float_from_mant_exp"), params, result, static_cast(STAmount::kMaxValue), @@ -5168,8 +4371,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatFromMantExp(1, Number::kMinExponent + normalExp, 0); WasmValVec params(5), result(1); auto* trap = - ww(floatFromMantExp_wrap, - &import.at("float_from_mant_exp"), + ww(&import.at("float_from_mant_exp"), params, result, 1ll, @@ -5188,15 +4390,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatFromMantExp(10, -1, 0); WasmValVec params(5), result(1); auto* trap = - ww(floatFromMantExp_wrap, - &import.at("float_from_mant_exp"), - params, - result, - 10ll, - -1, - 0, - floatSize, - 0); + ww(&import.at("float_from_mant_exp"), params, result, 10ll, -1, 0, floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == floatSize); @@ -5208,8 +4402,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatFromMantExp(1, Number::kMaxExponent + normalExp + 1, 0); WasmValVec params(5), result(1); auto* trap = - ww(floatFromMantExp_wrap, - &import.at("float_from_mant_exp"), + ww(&import.at("float_from_mant_exp"), params, result, 1ll, @@ -5244,8 +4437,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.floatCompare(Slice(), Slice()); WasmValVec params(4), result(1); - auto* trap = - ww(floatCompare_wrap, &import.at("float_compare"), params, result, 0, 0, 0, 0); + auto* trap = ww(&import.at("float_compare"), params, result, 0, 0, 0, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -5257,8 +4449,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatCompare(makeSlice(floatInvalidZero), Slice()); WasmValVec params(4), result(1); vrt.setBytes(0, floatInvalidZero.data(), floatInvalidZero.size()); - auto* trap = ww( - floatCompare_wrap, &import.at("float_compare"), params, result, 0, floatSize, 0, 0); + auto* trap = ww(&import.at("float_compare"), params, result, 0, floatSize, 0, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -5272,8 +4463,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, float1.data(), float1.size()); vrt.setBytes(floatSize, invalid.data(), invalid.size()); auto* trap = - ww(floatCompare_wrap, - &import.at("float_compare"), + ww(&import.at("float_compare"), params, result, 0, @@ -5293,14 +4483,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatIntMin.data(), floatIntMin.size()); vrt.setBytes(floatSize, floatIntZero.data(), floatIntZero.size()); auto* trap = - ww(floatCompare_wrap, - &import.at("float_compare"), - params, - result, - 0, - floatSize, - floatSize, - floatSize); + ww(&import.at("float_compare"), params, result, 0, floatSize, floatSize, floatSize); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 2); @@ -5312,14 +4495,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatIntMax.data(), floatIntMax.size()); vrt.setBytes(floatSize, floatIntZero.data(), floatIntZero.size()); auto* trap = - ww(floatCompare_wrap, - &import.at("float_compare"), - params, - result, - 0, - floatSize, - floatSize, - floatSize); + ww(&import.at("float_compare"), params, result, 0, floatSize, floatSize, floatSize); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); @@ -5331,14 +4507,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, float1.data(), float1.size()); vrt.setBytes(floatSize, float1.data(), float1.size()); auto* trap = - ww(floatCompare_wrap, - &import.at("float_compare"), - params, - result, - 0, - floatSize, - floatSize, - floatSize); + ww(&import.at("float_compare"), params, result, 0, floatSize, floatSize, floatSize); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0); @@ -5364,18 +4533,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.floatAdd(Slice(), Slice(), -1); WasmValVec params(7), result(1); - auto* trap = - ww(floatAdd_wrap, - &import.at("float_add"), - params, - result, - 0, - 0, - 0, - 0, - 0, - floatSize, - -1); + auto* trap = ww(&import.at("float_add"), params, result, 0, 0, 0, 0, 0, floatSize, -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -5386,18 +4544,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.floatAdd(Slice(), Slice(), 0); WasmValVec params(7), result(1); - auto* trap = - ww(floatAdd_wrap, - &import.at("float_add"), - params, - result, - 0, - 0, - 0, - 0, - 0, - floatSize, - 0); + auto* trap = ww(&import.at("float_add"), params, result, 0, 0, 0, 0, 0, floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -5411,8 +4558,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, float1.data(), float1.size()); vrt.setBytes(floatSize, invalid.data(), invalid.size()); auto* trap = - ww(floatAdd_wrap, - &import.at("float_add"), + ww(&import.at("float_add"), params, result, 0, @@ -5436,8 +4582,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatMaxIOU.data(), floatMaxIOU.size()); vrt.setBytes(floatSize, floatMaxExp.data(), floatMaxExp.size()); auto* trap = - ww(floatAdd_wrap, - &import.at("float_add"), + ww(&import.at("float_add"), params, result, 0, @@ -5460,8 +4605,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatIntMin.data(), floatIntMin.size()); vrt.setBytes(floatSize, floatIntZero.data(), floatIntZero.size()); auto* trap = - ww(floatAdd_wrap, - &import.at("float_add"), + ww(&import.at("float_add"), params, result, 0, @@ -5485,8 +4629,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatIntMax.data(), floatIntMax.size()); vrt.setBytes(floatSize, floatIntMin.data(), floatIntMin.size()); auto* trap = - ww(floatAdd_wrap, - &import.at("float_add"), + ww(&import.at("float_add"), params, result, 0, @@ -5524,17 +4667,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatSubtract(Slice(), Slice(), -1); WasmValVec params(7), result(1); auto* trap = - ww(floatSubtract_wrap, - &import.at("float_subtract"), - params, - result, - 0, - 0, - 0, - 0, - 0, - floatSize, - -1); + ww(&import.at("float_subtract"), params, result, 0, 0, 0, 0, 0, floatSize, -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -5546,17 +4679,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatSubtract(Slice(), Slice(), 0); WasmValVec params(7), result(1); auto* trap = - ww(floatSubtract_wrap, - &import.at("float_subtract"), - params, - result, - 0, - 0, - 0, - 0, - 0, - floatSize, - 0); + ww(&import.at("float_subtract"), params, result, 0, 0, 0, 0, 0, floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -5570,8 +4693,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, float1.data(), float1.size()); vrt.setBytes(floatSize, invalid.data(), invalid.size()); auto* trap = - ww(floatSubtract_wrap, - &import.at("float_subtract"), + ww(&import.at("float_subtract"), params, result, 0, @@ -5594,8 +4716,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatMinusMaxExp.data(), floatMinusMaxExp.size()); vrt.setBytes(floatSize, floatMaxIOU.data(), floatMaxIOU.size()); auto* trap = - ww(floatSubtract_wrap, - &import.at("float_subtract"), + ww(&import.at("float_subtract"), params, result, 0, @@ -5618,8 +4739,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatIntMin.data(), floatIntMin.size()); vrt.setBytes(floatSize, floatIntZero.data(), floatIntZero.size()); auto* trap = - ww(floatSubtract_wrap, - &import.at("float_subtract"), + ww(&import.at("float_subtract"), params, result, 0, @@ -5642,8 +4762,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatIntZero.data(), floatIntZero.size()); vrt.setBytes(floatSize, float1.data(), float1.size()); auto* trap = - ww(floatSubtract_wrap, - &import.at("float_subtract"), + ww(&import.at("float_subtract"), params, result, 0, @@ -5681,17 +4800,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatMultiply(Slice(), Slice(), -1); WasmValVec params(7), result(1); auto* trap = - ww(floatMultiply_wrap, - &import.at("float_multiply"), - params, - result, - 0, - 0, - 0, - 0, - 0, - floatSize, - -1); + ww(&import.at("float_multiply"), params, result, 0, 0, 0, 0, 0, floatSize, -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -5703,17 +4812,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatMultiply(Slice(), Slice(), 0); WasmValVec params(7), result(1); auto* trap = - ww(floatMultiply_wrap, - &import.at("float_multiply"), - params, - result, - 0, - 0, - 0, - 0, - 0, - floatSize, - 0); + ww(&import.at("float_multiply"), params, result, 0, 0, 0, 0, 0, floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -5727,8 +4826,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, float1.data(), float1.size()); vrt.setBytes(floatSize, invalid.data(), invalid.size()); auto* trap = - ww(floatMultiply_wrap, - &import.at("float_multiply"), + ww(&import.at("float_multiply"), params, result, 0, @@ -5751,8 +4849,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatMax.data(), floatMax.size()); vrt.setBytes(floatSize, float1More.data(), float1More.size()); auto* trap = - ww(floatMultiply_wrap, - &import.at("float_multiply"), + ww(&import.at("float_multiply"), params, result, 0, @@ -5775,8 +4872,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, float1.data(), float1.size()); vrt.setBytes(floatSize, float1.data(), float1.size()); auto* trap = - ww(floatMultiply_wrap, - &import.at("float_multiply"), + ww(&import.at("float_multiply"), params, result, 0, @@ -5799,8 +4895,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatIntZero.data(), floatIntZero.size()); vrt.setBytes(floatSize, floatMaxIOU.data(), floatMaxIOU.size()); auto* trap = - ww(floatMultiply_wrap, - &import.at("float_multiply"), + ww(&import.at("float_multiply"), params, result, 0, @@ -5823,8 +4918,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, float10.data(), float10.size()); vrt.setBytes(floatSize, floatPreMaxExp.data(), floatPreMaxExp.size()); auto* trap = - ww(floatMultiply_wrap, - &import.at("float_multiply"), + ww(&import.at("float_multiply"), params, result, 0, @@ -5862,17 +4956,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatDivide(Slice(), Slice(), -1); WasmValVec params(7), result(1); auto* trap = - ww(floatDivide_wrap, - &import.at("float_divide"), - params, - result, - 0, - 0, - 0, - 0, - 0, - floatSize, - -1); + ww(&import.at("float_divide"), params, result, 0, 0, 0, 0, 0, floatSize, -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -5884,17 +4968,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatDivide(Slice(), Slice(), 0); WasmValVec params(7), result(1); auto* trap = - ww(floatDivide_wrap, - &import.at("float_divide"), - params, - result, - 0, - 0, - 0, - 0, - 0, - floatSize, - 0); + ww(&import.at("float_divide"), params, result, 0, 0, 0, 0, 0, floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -5907,8 +4981,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, float1.data(), float1.size()); vrt.setBytes(floatSize, invalid.data(), invalid.size()); auto* trap = - ww(floatDivide_wrap, - &import.at("float_divide"), + ww(&import.at("float_divide"), params, result, 0, @@ -5930,8 +5003,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, float1.data(), float1.size()); vrt.setBytes(floatSize, floatIntZero.data(), floatIntZero.size()); auto* trap = - ww(floatDivide_wrap, - &import.at("float_divide"), + ww(&import.at("float_divide"), params, result, 0, @@ -5957,8 +5029,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatMax.data(), floatMax.size()); vrt.setBytes(floatSize, y->data(), y->size()); auto* trap = - ww(floatDivide_wrap, - &import.at("float_divide"), + ww(&import.at("float_divide"), params, result, 0, @@ -5981,8 +5052,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatIntZero.data(), floatIntZero.size()); vrt.setBytes(floatSize, float1.data(), float1.size()); auto* trap = - ww(floatDivide_wrap, - &import.at("float_divide"), + ww(&import.at("float_divide"), params, result, 0, @@ -6004,8 +5074,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatMaxExp.data(), floatMaxExp.size()); vrt.setBytes(floatSize, float10.data(), float10.size()); auto* trap = - ww(floatDivide_wrap, - &import.at("float_divide"), + ww(&import.at("float_divide"), params, result, 0, @@ -6041,17 +5110,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.floatRoot(Slice(), 2, -1); WasmValVec params(6), result(1); - auto* trap = - ww(floatRoot_wrap, - &import.at("float_root"), - params, - result, - 0, - 0, - 2, - 0, - floatSize, - -1); + auto* trap = ww(&import.at("float_root"), params, result, 0, 0, 2, 0, floatSize, -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -6063,8 +5122,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(6), result(1); vrt.setBytes(0, invalid.data(), invalid.size()); auto* trap = - ww(floatRoot_wrap, - &import.at("float_root"), + ww(&import.at("float_root"), params, result, 0, @@ -6084,8 +5142,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(6), result(1); vrt.setBytes(0, float1.data(), float1.size()); auto* trap = - ww(floatRoot_wrap, - &import.at("float_root"), + ww(&import.at("float_root"), params, result, 0, @@ -6105,8 +5162,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(6), result(1); vrt.setBytes(0, floatIntZero.data(), floatIntZero.size()); auto* trap = - ww(floatRoot_wrap, - &import.at("float_root"), + ww(&import.at("float_root"), params, result, 0, @@ -6126,8 +5182,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(6), result(1); vrt.setBytes(0, floatMaxIOU.data(), floatMaxIOU.size()); auto* trap = - ww(floatRoot_wrap, - &import.at("float_root"), + ww(&import.at("float_root"), params, result, 0, @@ -6151,8 +5206,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(6), result(1); vrt.setBytes(0, x->data(), x->size()); auto* trap = - ww(floatRoot_wrap, - &import.at("float_root"), + ww(&import.at("float_root"), params, result, 0, @@ -6177,8 +5231,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(6), result(1); vrt.setBytes(0, x->data(), x->size()); auto* trap = - ww(floatRoot_wrap, - &import.at("float_root"), + ww(&import.at("float_root"), params, result, 0, @@ -6204,8 +5257,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(6), result(1); vrt.setBytes(0, x->data(), x->size()); auto* trap = - ww(floatRoot_wrap, - &import.at("float_root"), + ww(&import.at("float_root"), params, result, 0, @@ -6241,17 +5293,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.floatPower(Slice(), 2, -1); WasmValVec params(6), result(1); - auto* trap = - ww(floatPower_wrap, - &import.at("float_pow"), - params, - result, - 0, - 0, - 2, - 0, - floatSize, - -1); + auto* trap = ww(&import.at("float_pow"), params, result, 0, 0, 2, 0, floatSize, -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -6263,8 +5305,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(6), result(1); vrt.setBytes(0, invalid.data(), invalid.size()); auto* trap = - ww(floatPower_wrap, - &import.at("float_pow"), + ww(&import.at("float_pow"), params, result, 0, @@ -6284,8 +5325,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(6), result(1); vrt.setBytes(0, float1.data(), float1.size()); auto* trap = - ww(floatPower_wrap, - &import.at("float_pow"), + ww(&import.at("float_pow"), params, result, 0, @@ -6305,17 +5345,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatPower(makeSlice(floatMax), 2, 0); WasmValVec params(6), result(1); vrt.setBytes(0, floatMax.data(), floatMax.size()); - auto* trap = - ww(floatPower_wrap, - &import.at("float_pow"), - params, - result, - 0, - floatSize, - 2, - floatSize, - floatSize, - 0); + auto* trap = ww( + &import.at("float_pow"), params, result, 0, floatSize, 2, floatSize, floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -6328,8 +5359,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(6), result(1); vrt.setBytes(0, floatMax.data(), floatMax.size()); auto* trap = - ww(floatPower_wrap, - &import.at("float_pow"), + ww(&import.at("float_pow"), params, result, 0, @@ -6349,17 +5379,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatPower(makeSlice(floatMaxIOU), 0, 0); WasmValVec params(6), result(1); vrt.setBytes(0, floatMaxIOU.data(), floatMaxIOU.size()); - auto* trap = - ww(floatPower_wrap, - &import.at("float_pow"), - params, - result, - 0, - floatSize, - 0, - floatSize, - floatSize, - 0); + auto* trap = ww( + &import.at("float_pow"), params, result, 0, floatSize, 0, floatSize, floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == floatSize); @@ -6370,17 +5391,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.floatPower(makeSlice(floatMaxIOU), 1, 0); WasmValVec params(6), result(1); vrt.setBytes(0, floatMaxIOU.data(), floatMaxIOU.size()); - auto* trap = - ww(floatPower_wrap, - &import.at("float_pow"), - params, - result, - 0, - floatSize, - 1, - floatSize, - floatSize, - 0); + auto* trap = ww( + &import.at("float_pow"), params, result, 0, floatSize, 1, floatSize, floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == floatSize); @@ -6396,8 +5408,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(6), result(1); vrt.setBytes(0, float10.data(), float10.size()); auto* trap = - ww(floatPower_wrap, - &import.at("float_pow"), + ww(&import.at("float_pow"), params, result, 0, @@ -6423,8 +5434,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(6), result(1); vrt.setBytes(0, x->data(), x->size()); auto* trap = - ww(floatPower_wrap, - &import.at("float_pow"), + ww(&import.at("float_pow"), params, result, 0, @@ -6486,8 +5496,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, amountBytes.data(), amountBytes.size()); WasmValVec params(5), result(1); auto* trap = - ww(floatFromSTAmount_wrap, - &import.at("float_from_stamount"), + ww(&import.at("float_from_stamount"), params, result, 0, @@ -6509,8 +5518,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, amountBytes.data(), amountBytes.size()); WasmValVec params(5), result(1); auto* trap = - ww(floatFromSTAmount_wrap, - &import.at("float_from_stamount"), + ww(&import.at("float_from_stamount"), params, result, 0, @@ -6532,8 +5540,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, amountBytes.data(), amountBytes.size()); WasmValVec params(5), result(1); auto* trap = - ww(floatFromSTAmount_wrap, - &import.at("float_from_stamount"), + ww(&import.at("float_from_stamount"), params, result, 0, @@ -6558,8 +5565,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, amountBytes.data(), amountBytes.size()); WasmValVec params(5), result(1); auto* trap = - ww(floatFromSTAmount_wrap, - &import.at("float_from_stamount"), + ww(&import.at("float_from_stamount"), params, result, 0, @@ -6583,8 +5589,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, amountBytes.data(), amountBytes.size()); WasmValVec params(5), result(1); auto* trap = - ww(floatFromSTAmount_wrap, - &import.at("float_from_stamount"), + ww(&import.at("float_from_stamount"), params, result, 0, @@ -6623,8 +5628,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, amountBytes.data(), amountBytes.size()); WasmValVec params(5), result(1); auto* trap = - ww(floatFromSTAmount_wrap, - &import.at("float_from_stamount"), + ww(&import.at("float_from_stamount"), params, result, 0, @@ -6647,8 +5651,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, amountBytes.data(), amountBytes.size()); WasmValVec params(5), result(1); auto* trap = - ww(floatFromSTAmount_wrap, - &import.at("float_from_stamount"), + ww(&import.at("float_from_stamount"), params, result, 0, @@ -6688,8 +5691,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, numBytes.data(), numBytes.size()); WasmValVec params(5), result(1); auto* trap = - ww(floatFromSTNumber_wrap, - &import.at("float_from_stnumber"), + ww(&import.at("float_from_stnumber"), params, result, 0, @@ -6711,8 +5713,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, numBytes.data(), numBytes.size()); WasmValVec params(5), result(1); auto* trap = - ww(floatFromSTNumber_wrap, - &import.at("float_from_stnumber"), + ww(&import.at("float_from_stnumber"), params, result, 0, @@ -6735,8 +5736,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, numBytes.data(), numBytes.size()); WasmValVec params(5), result(1); auto* trap = - ww(floatFromSTNumber_wrap, - &import.at("float_from_stnumber"), + ww(&import.at("float_from_stnumber"), params, result, 0, @@ -6758,8 +5758,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, numBytes.data(), numBytes.size()); WasmValVec params(5), result(1); auto* trap = - ww(floatFromSTNumber_wrap, - &import.at("float_from_stnumber"), + ww(&import.at("float_from_stnumber"), params, result, 0, @@ -6795,16 +5794,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatToInt(makeSlice(float1), -1); vrt.setBytes(0, float1.data(), float1.size()); WasmValVec params(5), result(1); - auto* trap = - ww(floatToInt_wrap, - &import.at("float_to_int"), - params, - result, - 0, - floatSize, - 256, - 8, - -1); + auto* trap = ww(&import.at("float_to_int"), params, result, 0, floatSize, 256, 8, -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -6816,16 +5806,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatToInt(makeSlice(float1), 4); vrt.setBytes(0, float1.data(), float1.size()); WasmValVec params(5), result(1); - auto* trap = - ww(floatToInt_wrap, - &import.at("float_to_int"), - params, - result, - 0, - floatSize, - 256, - 8, - 4); + auto* trap = ww(&import.at("float_to_int"), params, result, 0, floatSize, 256, 8, 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -6836,8 +5817,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.floatToInt(Slice(), 0); WasmValVec params(5), result(1); - auto* trap = - ww(floatToInt_wrap, &import.at("float_to_int"), params, result, 0, 0, 256, 8, 0); + auto* trap = ww(&import.at("float_to_int"), params, result, 0, 0, 256, 8, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -6849,16 +5829,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatToInt(makeSlice(invalid), 0); vrt.setBytes(0, invalid.data(), invalid.size()); WasmValVec params(5), result(1); - auto* trap = - ww(floatToInt_wrap, - &import.at("float_to_int"), - params, - result, - 0, - floatSize, - 256, - 8, - 0); + auto* trap = ww(&import.at("float_to_int"), params, result, 0, floatSize, 256, 8, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -6870,16 +5841,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatToInt(makeSlice(floatIntZero), 0); vrt.setBytes(0, floatIntZero.data(), floatIntZero.size()); WasmValVec params(5), result(1); - auto* trap = - ww(floatToInt_wrap, - &import.at("float_to_int"), - params, - result, - 0, - floatSize, - 256, - 8, - 0); + auto* trap = ww(&import.at("float_to_int"), params, result, 0, floatSize, 256, 8, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 8); @@ -6895,16 +5857,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatToInt(makeSlice(float1), 0); vrt.setBytes(0, float1.data(), float1.size()); WasmValVec params(5), result(1); - auto* trap = - ww(floatToInt_wrap, - &import.at("float_to_int"), - params, - result, - 0, - floatSize, - 256, - 8, - 0); + auto* trap = ww(&import.at("float_to_int"), params, result, 0, floatSize, 256, 8, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 8); @@ -6920,16 +5873,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatToInt(makeSlice(floatMinus1), 0); vrt.setBytes(0, floatMinus1.data(), floatMinus1.size()); WasmValVec params(5), result(1); - auto* trap = - ww(floatToInt_wrap, - &import.at("float_to_int"), - params, - result, - 0, - floatSize, - 256, - 8, - 0); + auto* trap = ww(&import.at("float_to_int"), params, result, 0, floatSize, 256, 8, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 8); @@ -6945,16 +5889,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatToInt(makeSlice(floatIntMax), 0); vrt.setBytes(0, floatIntMax.data(), floatIntMax.size()); WasmValVec params(5), result(1); - auto* trap = - ww(floatToInt_wrap, - &import.at("float_to_int"), - params, - result, - 0, - floatSize, - 256, - 8, - 0); + auto* trap = ww(&import.at("float_to_int"), params, result, 0, floatSize, 256, 8, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 8); @@ -6972,16 +5907,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatToInt(makeSlice(floatIntMin), 0); vrt.setBytes(0, floatIntMin.data(), floatIntMin.size()); WasmValVec params(5), result(1); - auto* trap = - ww(floatToInt_wrap, - &import.at("float_to_int"), - params, - result, - 0, - floatSize, - 256, - 8, - 0); + auto* trap = ww(&import.at("float_to_int"), params, result, 0, floatSize, 256, 8, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -6993,16 +5919,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatToInt(makeSlice(floatUIntMax), 0); vrt.setBytes(0, floatUIntMax.data(), floatUIntMax.size()); WasmValVec params(5), result(1); - auto* trap = - ww(floatToInt_wrap, - &import.at("float_to_int"), - params, - result, - 0, - floatSize, - 256, - 8, - 0); + auto* trap = ww(&import.at("float_to_int"), params, result, 0, floatSize, 256, 8, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -7016,16 +5933,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatToInt(makeSlice(floatPi), 0); vrt.setBytes(0, floatPi.data(), floatPi.size()); WasmValVec params(5), result(1); - auto* trap = - ww(floatToInt_wrap, - &import.at("float_to_int"), - params, - result, - 0, - floatSize, - 256, - 8, - 0); + auto* trap = ww(&import.at("float_to_int"), params, result, 0, floatSize, 256, 8, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 8); @@ -7038,16 +5946,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatToInt(makeSlice(floatPi), 1); vrt.setBytes(0, floatPi.data(), floatPi.size()); WasmValVec params(5), result(1); - auto* trap = - ww(floatToInt_wrap, - &import.at("float_to_int"), - params, - result, - 0, - floatSize, - 256, - 8, - 1); + auto* trap = ww(&import.at("float_to_int"), params, result, 0, floatSize, 256, 8, 1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 8); @@ -7060,16 +5959,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatToInt(makeSlice(floatPi), 2); vrt.setBytes(0, floatPi.data(), floatPi.size()); WasmValVec params(5), result(1); - auto* trap = - ww(floatToInt_wrap, - &import.at("float_to_int"), - params, - result, - 0, - floatSize, - 256, - 8, - 2); + auto* trap = ww(&import.at("float_to_int"), params, result, 0, floatSize, 256, 8, 2); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 8); @@ -7082,16 +5972,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatToInt(makeSlice(floatPi), 3); vrt.setBytes(0, floatPi.data(), floatPi.size()); WasmValVec params(5), result(1); - auto* trap = - ww(floatToInt_wrap, - &import.at("float_to_int"), - params, - result, - 0, - floatSize, - 256, - 8, - 3); + auto* trap = ww(&import.at("float_to_int"), params, result, 0, floatSize, 256, 8, 3); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 8); @@ -7121,16 +6002,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, invalid.data(), invalid.size()); WasmValVec params(6), result(1); auto* trap = - ww(floatToMantExp_wrap, - &import.at("float_to_mant_exp"), - params, - result, - 0, - floatSize, - 256, - 8, - 512, - 4); + ww(&import.at("float_to_mant_exp"), params, result, 0, floatSize, 256, 8, 512, 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -7143,16 +6015,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatIntZero.data(), floatIntZero.size()); WasmValVec params(6), result(1); auto* trap = - ww(floatToMantExp_wrap, - &import.at("float_to_mant_exp"), - params, - result, - 0, - floatSize, - 256, - 8, - 512, - 4); + ww(&import.at("float_to_mant_exp"), params, result, 0, floatSize, 256, 8, 512, 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == floatSize); @@ -7171,16 +6034,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, float1.data(), float1.size()); WasmValVec params(6), result(1); auto* trap = - ww(floatToMantExp_wrap, - &import.at("float_to_mant_exp"), - params, - result, - 0, - floatSize, - 256, - 8, - 512, - 4); + ww(&import.at("float_to_mant_exp"), params, result, 0, floatSize, 256, 8, 512, 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == floatSize); @@ -7198,16 +6052,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatMinus1.data(), floatMinus1.size()); WasmValVec params(6), result(1); auto* trap = - ww(floatToMantExp_wrap, - &import.at("float_to_mant_exp"), - params, - result, - 0, - floatSize, - 256, - 8, - 512, - 4); + ww(&import.at("float_to_mant_exp"), params, result, 0, floatSize, 256, 8, 512, 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == floatSize); @@ -7225,16 +6070,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, float10.data(), float10.size()); WasmValVec params(6), result(1); auto* trap = - ww(floatToMantExp_wrap, - &import.at("float_to_mant_exp"), - params, - result, - 0, - floatSize, - 256, - 8, - 512, - 4); + ww(&import.at("float_to_mant_exp"), params, result, 0, floatSize, 256, 8, 512, 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == floatSize); @@ -7253,16 +6089,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatPi.data(), floatPi.size()); WasmValVec params(6), result(1); auto* trap = - ww(floatToMantExp_wrap, - &import.at("float_to_mant_exp"), - params, - result, - 0, - floatSize, - 256, - 8, - 512, - 4); + ww(&import.at("float_to_mant_exp"), params, result, 0, floatSize, 256, 8, 512, 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == floatSize); @@ -7280,16 +6107,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatIntMax.data(), floatIntMax.size()); WasmValVec params(6), result(1); auto* trap = - ww(floatToMantExp_wrap, - &import.at("float_to_mant_exp"), - params, - result, - 0, - floatSize, - 256, - 8, - 512, - 4); + ww(&import.at("float_to_mant_exp"), params, result, 0, floatSize, 256, 8, 512, 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == floatSize); @@ -7308,16 +6126,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatIntMin.data(), floatIntMin.size()); WasmValVec params(6), result(1); auto* trap = - ww(floatToMantExp_wrap, - &import.at("float_to_mant_exp"), - params, - result, - 0, - floatSize, - 256, - 8, - 512, - 4); + ww(&import.at("float_to_mant_exp"), params, result, 0, floatSize, 256, 8, 512, 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == floatSize); @@ -7336,16 +6145,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatMax.data(), floatMax.size()); WasmValVec params(6), result(1); auto* trap = - ww(floatToMantExp_wrap, - &import.at("float_to_mant_exp"), - params, - result, - 0, - floatSize, - 256, - 8, - 512, - 4); + ww(&import.at("float_to_mant_exp"), params, result, 0, floatSize, 256, 8, 512, 4); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == floatSize); @@ -7407,13 +6207,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(2), result(1); // 3 parameters instead of 2 auto* trap = - ww(getLedgerSqn_wrap, - &import.at("get_ledger_sqn"), - params, - result, - 0, - sizeof(std::uint32_t), - 1); + ww(&import.at("get_ledger_sqn"), params, result, 0, sizeof(std::uint32_t), 1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == sizeof(std::uint32_t)) && diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index d0dc19d52d..13bc18e09c 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -155,15 +155,16 @@ public: } Expected - getTxNestedField(Slice const& locator) const override + getTxNestedField(FieldLocator const& locator) const override { - if (locator.size() == 4) + if (locator.size() == 1) { - int32_t const* l = reinterpret_cast(locator.data()); + int32_t const* l = locator.data(); int32_t const sfield = l[0]; if (sfield == sfAccount.getCode()) return Bytes(accountID_.begin(), accountID_.end()); } + uint8_t const a[] = {0x2b, 0x6a, 0x23, 0x2a, 0xa4, 0xc4, 0xbe, 0x41, 0xbf, 0x49, 0xd2, 0x45, 0x9f, 0xa4, 0xa0, 0x34, 0x7e, 0x1b, 0x54, 0x3a, 0x4c, 0x92, 0xfc, 0xee, 0x08, 0x21, 0xc0, 0x20, 0x1e, 0x2e, 0x9a, 0x00}; @@ -171,15 +172,16 @@ public: } Expected - getCurrentLedgerObjNestedField(Slice const& locator) const override + getCurrentLedgerObjNestedField(FieldLocator const& locator) const override { - if (locator.size() == 4) + if (locator.size() == 1) { - int32_t const* l = reinterpret_cast(locator.data()); + int32_t const* l = locator.data(); int32_t const sfield = l[0]; if (sfield == sfAccount.getCode()) return Bytes(accountID_.begin(), accountID_.end()); } + uint8_t const a[] = {0x2b, 0x6a, 0x23, 0x2a, 0xa4, 0xc4, 0xbe, 0x41, 0xbf, 0x49, 0xd2, 0x45, 0x9f, 0xa4, 0xa0, 0x34, 0x7e, 0x1b, 0x54, 0x3a, 0x4c, 0x92, 0xfc, 0xee, 0x08, 0x21, 0xc0, 0x20, 0x1e, 0x2e, 0x9a, 0x00}; @@ -187,15 +189,16 @@ public: } Expected - getLedgerObjNestedField(int32_t cacheIdx, Slice const& locator) const override + getLedgerObjNestedField(int32_t cacheIdx, FieldLocator const& locator) const override { - if (locator.size() == 4) + if (locator.size() == 1) { - int32_t const* l = reinterpret_cast(locator.data()); + int32_t const* l = locator.data(); int32_t const sfield = l[0]; if (sfield == sfAccount.getCode()) return Bytes(accountID_.begin(), accountID_.end()); } + uint8_t const a[] = {0x2b, 0x6a, 0x23, 0x2a, 0xa4, 0xc4, 0xbe, 0x41, 0xbf, 0x49, 0xd2, 0x45, 0x9f, 0xa4, 0xa0, 0x34, 0x7e, 0x1b, 0x54, 0x3a, 0x4c, 0x92, 0xfc, 0xee, 0x08, 0x21, 0xc0, 0x20, 0x1e, 0x2e, 0x9a, 0x00}; @@ -221,19 +224,19 @@ public: } Expected - getTxNestedArrayLen(Slice const& locator) const override + getTxNestedArrayLen(FieldLocator const& locator) const override { return 32; } Expected - getCurrentLedgerObjNestedArrayLen(Slice const& locator) const override + getCurrentLedgerObjNestedArrayLen(FieldLocator const& locator) const override { return 32; } Expected - getLedgerObjNestedArrayLen(int32_t cacheIdx, Slice const& locator) const override + getLedgerObjNestedArrayLen(int32_t cacheIdx, FieldLocator const& locator) const override { return 32; } diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 49a29f1563..fd64976f1e 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -1,3 +1,8 @@ +#ifdef _DEBUG +// #define DEBUG_OUTPUT 1 +#endif + +#include #include #include @@ -17,21 +22,14 @@ #include #include -#include #include #include #include #include +#include #include #include #include -#ifdef _DEBUG -// #define DEBUG_OUTPUT 1 -#endif - -#include - -#include namespace xrpl::test { @@ -40,7 +38,7 @@ testGetDataIncrement(); using Add_proto = int32_t(int32_t, int32_t); static wasm_trap_t* -add(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) +add(HostFunctions&, wasm_val_vec_t const* params, wasm_val_vec_t* results) { int32_t const val1 = params->data[0].of.i32; int32_t const val2 = params->data[1].of.i32; @@ -219,7 +217,7 @@ struct Wasm_test : public beast::unit_test::Suite HostFunctions hfs; ImportVec imports; - WasmImpFunc(imports, "func-add", reinterpret_cast(&add), hfs); + WasmImpFunc(imports, "func-add", add, hfs); auto re = vm.run(wasm, hfs, 10'000'000, "addTwo", wasmParams(1234, 5678), imports); @@ -405,7 +403,7 @@ struct Wasm_test : public beast::unit_test::Suite auto re = engine.run( allHostFuncWasm, hfs, 1'000'000, escrowFunctionName, {}, imp, env.journal); - checkResult(re, 1, 27'080); + checkResult(re, 1, 27'617); env.close(); } @@ -427,7 +425,7 @@ struct Wasm_test : public beast::unit_test::Suite auto re = engine.run( allHostFuncWasm, hfs, 1'000'000, escrowFunctionName, {}, imp, env.journal); - checkResult(re, 1, 70'340); + checkResult(re, 1, 70'877); env.close(); } @@ -466,7 +464,7 @@ struct Wasm_test : public beast::unit_test::Suite { TestHostFunctions hfs(env); auto re = runEscrowWasm(allHFWasm, hfs, 100'000, escrowFunctionName, {}); - checkResult(re, 1, 70'340); + checkResult(re, 1, 70'877); } { @@ -490,7 +488,7 @@ struct Wasm_test : public beast::unit_test::Suite TestHostFunctions hfs(env); auto re = runEscrowWasm( allHFWasm, hfs, std::numeric_limits::max(), escrowFunctionName, {}); - checkResult(re, 1, 70'340); + checkResult(re, 1, 70'877); } { // fail because trying to access nonexistent field @@ -508,7 +506,7 @@ struct Wasm_test : public beast::unit_test::Suite FieldNotFoundHostFunctions hfs(env); auto re = runEscrowWasm(allHFWasm, hfs, 100'000, escrowFunctionName, {}); - checkResult(re, -201, 28'965); + checkResult(re, -201, 29'502); } { // fail because trying to allocate more than MAX_PAGES memory @@ -526,7 +524,7 @@ struct Wasm_test : public beast::unit_test::Suite OversizedFieldHostFunctions hfs(env); auto re = runEscrowWasm(allHFWasm, hfs, 100'000, escrowFunctionName, {}); - checkResult(re, -201, 28'965); + checkResult(re, -201, 29'502); } // This test use log output, so DEBUG_OUTPUT must be disabled. @@ -642,7 +640,7 @@ struct Wasm_test : public beast::unit_test::Suite TestHostFunctions hfs(env); auto re = runEscrowWasm(float0Wasm, hfs, 100'000, funcName, {}); - checkResult(re, 1, 4'309); + checkResult(re, 1, 2'819); env.close(); } } diff --git a/src/test/app/wasm_fixtures/all_host_functions/src/lib.rs b/src/test/app/wasm_fixtures/all_host_functions/src/lib.rs index 444fcaddfa..a0bf4c0dcf 100644 --- a/src/test/app/wasm_fixtures/all_host_functions/src/lib.rs +++ b/src/test/app/wasm_fixtures/all_host_functions/src/lib.rs @@ -200,7 +200,7 @@ fn test_transaction_data_functions() -> i32 { // Use get_tx_field() with appropriate parameters for all transaction field access. // Test 2.2: get_tx_nested_field() - Nested field access with locator - let locator = [0x01, 0x00]; // Simple locator for first element + let locator = [0x01_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8]; // Two int32s in little-endian: [1, 0] let mut nested_buffer = [0u8; 32]; let nested_result = unsafe { host::get_tx_nested_field( @@ -314,7 +314,7 @@ fn test_current_ledger_object_functions() -> i32 { } // Test 3.2: get_current_ledger_obj_nested_field() - Nested field access - let locator = [0x01, 0x00]; // Simple locator + let locator = [0x01_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8]; // Two int32s in little-endian: [1, 0] let mut current_nested_buffer = [0u8; 32]; let current_nested_result = unsafe { host::get_current_ledger_obj_nested_field( @@ -426,7 +426,7 @@ fn test_any_ledger_object_functions() -> i32 { } // Test get_ledger_obj_nested_field with invalid slot - let locator = [0x01, 0x00]; + let locator = [0x01_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8]; // Two int32s in little-endian: [1, 0] let nested_result = unsafe { host::get_ledger_obj_nested_field( 1, @@ -509,7 +509,7 @@ fn test_any_ledger_object_functions() -> i32 { } // Test 4.3: get_ledger_obj_nested_field() - Nested field from cached object - let locator = [0x01, 0x00]; + let locator = [0x01_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8]; // Two int32s in little-endian: [1, 0] let mut cached_nested_buffer = [0u8; 32]; let cached_nested_result = unsafe { host::get_ledger_obj_nested_field( diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index cf8e3fe2c0..cfe531639d 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -45,13 +45,13 @@ extern std::string const kAllHostFunctionsWasmHex = "65645f61727261795f6c656e000108686f73745f6c69620e6163636f756e745f6b65796c6574000208686f73745f6c" "69620d74726163655f6163636f756e740002030c0b090a05050b05000101030005030100110619037f01418080c000" "0b7f0041af99c0000b7f0041b099c0000b072e04066d656d6f727902000666696e697368001e0a5f5f646174615f65" - "6e6403010b5f5f686561705f6261736503020ac61d0b990101027f230041306b220124002000027f41818020200141" + "6e6403010b5f5f686561705f6261736503020a911e0b990101027f230041306b220124002000027f41818020200141" "1c6a4114100022024114470440417f20022002417f4e1b210241010c010b200020012f001c3b0001200041036a2001" "411e6a2d00003a0000200120012900233703082001200141286a29000037000d200128001f21022000410d6a200129" "000d3700002000200129030837020841000b3a000020002002360204200141306a24000b460020012d000041014604" "40418080c000410b20013402041001000b20002001290001370000200041106a200141116a28000036000020004108" - "6a200141096a2900003700000b1900200241214f0440000b20002002360204200020013602000b1900200241094f04" - "40000b20002002360204200020013602000bde1a01097f230041b0036b22002400418b80c000411b41014100410010" + "6a200141096a2900003700000b1900200241094f0440000b20002002360204200020013602000b1900200241214f04" + "40000b20002002360204200020013602000ba91b01097f230041b0036b22002400418b80c000411b41014100410010" "021a41a680c000411941014100410010021a41e780c000412b41014100410010021a20004100360270024002400240" "02400240024002400240200041f0006a220741041003220141004a0440419281c00041172000280270220141187420" "014180fe03714108747220014108764180fe037120014118767272ad10011a200041003602900120004190016a2203" @@ -60,144 +60,146 @@ extern std::string const kAllHostFunctionsWasmHex = "044200370300200042003703b001200041b0016a22064120100522014120470d0241bc81c000411320064120410110" "021a41cf81c000412041014100410010021a41dc82c000412e41014100410010021a200041a0016a41003602002000" "4198016a420037030020004200370390014181802020034114100022014114470d03418a83c00041142003101f2000" - "42003703704188801820074108100022014108470d04419e83c0004117420810011a41b583c0004128200741084101" - "10021a2000410036024841848008200041c8006a22034104100022014104470d0541dd83c000411520034104410110" - "021a200041013b0034200242003703002005420037030020044200370300200042003703b0010240200041346a4102" - "200641201006220141004e044041f283c00041142001ad10011a200041286a20062001101c418684c000410d200028" - "0228200028022c410110021a0c010b419384c00041292001ac10011a0b41bc84c00041154183803c1007ac10011a41" - "d184c00041134189803c1007ac10011a0240200041346a41021008220141004e044041e484c00041142001ad10011a" - "0c010b41f884c000412d2001ac10011a0b41a585c000412341014100410010021a41de86c000413341014100410010" - "021a2000420037037041828018200041f0006a220141081009220341004c0d0620034108460440419187c000412b42" - "0810011a41bc87c000412f20014108410110021a0c080b41eb87c000412f2003ad10011a200041206a200041f0006a" - "2003101d419a88c000411720002802202000280224410110021a0c070b41bf82c000411d2001ac10011a419b7f2102" - "0c070b419a82c00041252001ac10011a419a7f21020c060b41ef81c000412b2001ac10011a41997f21020c050b41b4" - "86c000412a2001ac10011a41b77e21020c040b41f385c00041c1002001ac10011a41b67e21020c030b41c885c00041" - "2b2001ac10011a41b57e21020c020b41b188c00041c5002003ac10011a0b200041a0016a410036020020004198016a" - "4200370300200042003703900102404181802020004190016a220341141009220141004a044041f688c000411e2003" - "101f0c010b419489c00041332001ac10011a0b200041013b0048200041c8016a4200370300200041c0016a42003703" - "00200041b8016a4200370300200042003703b0010240200041c8006a4102200041b0016a22014120100a220341004e" - "044041c789c000411c2003ad10011a200041186a20012003101c41e389c00041152000280218200028021c41011002" - "1a0c010b41f889c00041392003ac10011a0b41b18ac00041244183803c100bac10011a0240200041c8006a4102100c" - "220141004e044041d58ac000411c2001ad10011a0c010b41f18ac000413d2001ac10011a0b41ae8bc0004128410141" - "00410010021a41d68bc000412f41014100410010021a200041b0016a2203101a200041f0006a22012003101b200041" - "a8016a4200370300200041a0016a420037030020004198016a42003703002000420037039001024002400240024002" - "40200120004190016a2203102022014120460440200341204100100d220441004a044041858cc00041232004ad1001" - "1a200042003703482004200041c8006a220141081021220341004c0d022003410846044041a88cc000412a42081001" - "1a41d28cc000412e20014108410110021a0c060b41808dc000412e2003ad10011a200041106a200041c8006a200310" - "1d41ae8dc000411620002802102000280214410110021a0c050b41e68fc000413c2004ac10011a200041c8016a4200" - "370300200041c0016a4200370300200041b8016a4200370300200042003703b0014101200041b0016a412010212201" - "4100480d020c030b41ba92c000412e2001ac10011a41ef7c21020c050b41c48dc000412b2003ac10011a0c020b41a2" - "90c00041c1002001ac10011a0b200041013b00484101200041c8006a200041b0016a10222201410048044041e390c0" - "0041352001ac10011a0b4101102322014100480440419891c00041322001ac10011a0b4101200041c8006a10242201" - "410048044041ca91c00041392001ac10011a0b418392c000413741014100410010021a0c010b200041013b00342000" - "41c8016a4200370300200041c0016a4200370300200041b8016a4200370300200042003703b0010240200420004134" - "6a200041b0016a22011022220341004e044041ef8dc000411b2003ad10011a200041086a20012003101c418a8ec000" - "41142000280208200028020c410110021a0c010b419e8ec00041312003ac10011a0b41cf8ec000412320041023ac10" - "011a02402004200041346a1024220141004e044041f28ec000411b2001ad10011a0c010b418d8fc00041352001ac10" - "011a0b41c28fc000412441014100410010021a0b41e892c000412f41014100410010021a200041b0016a2201101a20" - "0041346a22042001101b200041e0006a4200370300200041d8006a4200370300200041d0006a420037030020004200" - "370348024002400240024002402004200041c8006a2203102022014120460440419793c000410f2003412041011002" - "1a20004188016a420037030020004180016a4200370300200041f8006a420037030020004200370370024020044114" - "2004411441a693c0004109200041f0006a22014120100e220341004a0440200020012003101c41ae93c00041122000" - "2802002000280204410110021a0c010b41c093c000413c2003ac10011a0b200041a8016a22064200370300200041a0" - "016a2202420037030020004198016a22054200370300200042003703900120004180808cc07e360268200041346a22" - "034114200041e8006a410420004190016a22084120100f22014120470d0141fc93c000410e20084120410110021a20" - "0041c8016a4200370300200041c0016a4200370300200041b8016a4200370300200042003703b001200041808080d0" - "0236026c20034114200041ec006a4104200041b0016a22044120101022014120470d02418a94c000410e2004412041" - "0110021a419894c000412441014100410010021a419195c000412541014100410010021a20004188016a4200370300" - "20004180016a4200370300200041f8006a42003703002000420037037041b695c0004117200041f0006a2203412010" - "1122014120470d0341cd95c000410b41b695c0004117410110021a41d895c000411120034120410110021a2004101a" - "200041c8006a22072004101b2006420037030020024200370300200542003703002000420037039001024041002004" - "22026b410371220320026a220520024d0d0020030440200321010340200241003a0000200241016a2102200141016b" - "22010d000b0b200341016b4107490d000340200241003a0000200241076a41003a0000200241066a41003a00002002" - "41056a41003a0000200241046a41003a0000200241036a41003a0000200241026a41003a0000200241016a41003a00" - "00200241086a22022005470d000b0b200541800220036b2201417c716a220220054b04400340200541003602002005" - "41046a22052002490d000b0b024020022001410371220120026a22034f0d002001220504400340200241003a000020" - "0241016a2102200541016b22050d000b0b200141016b4107490d000340200241003a0000200241076a41003a000020" - "0241066a41003a0000200241056a41003a0000200241046a41003a0000200241036a41003a0000200241026a41003a" - "0000200241016a41003a0000200241086a22022003470d000b0b024020074114200841202004418002101222014100" - "4a044041e995c00041102001ad10011a20014181024f0d0641f995c000410920042001410110021a0c010b418296c0" - "00412e2001ac10011a0b41b096c000411241c296c00041074101100222014100480d0541c996c000411d2001ad1001" - "1a41e696c0004111422a1001410048044041ad97c000411a42a47b10011a41a47b21020c070b41f796c000411c4200" - "10011a41012102419397c000411a41014100410010021a41ff97c000412941014100410010021a41a898c000412810" - "132201412846044041d098c000412741a898c0004128410110021a41f798c000411e41014100410010021a41bf80c0" - "00412841014100410010021a0c070b419599c000411a2001ac10011a41c37a21020c060b41f494c000411d2001ac10" - "011a418b7c21020c050b41d894c000411c2001ac10011a41897c21020c040b41bc94c000411c2001ac10011a41887c" - "21020c030b41dd97c00041222001ac10011a41a77b21020c020b000b41c797c00041162001ac10011a41a57b21020b" - "200041b0036a240020020b0d00200020012002411410191a0b0c00200041142001412010180b0e0020004182801820" - "01200210140b0e002000200141022002412010150b0a0020004183803c10160b0a0020002001410210170b0bb91901" - "00418080c0000baf196572726f725f636f64653d3d3d3d20484f53542046554e4354494f4e532054455354203d3d3d" - "54657374696e6720323620686f73742066756e6374696f6e73535543434553533a20416c6c20686f73742066756e63" - "74696f6e20746573747320706173736564212d2d2d2043617465676f727920313a204c656467657220486561646572" - "2046756e6374696f6e73202d2d2d4c65646765722073657175656e6365206e756d6265723a506172656e74206c6564" - "6765722074696d653a506172656e74206c656467657220686173683a535543434553533a204c656467657220686561" - "6465722066756e6374696f6e734552524f523a206765745f706172656e745f6c65646765725f686173682077726f6e" - "67206c656e6774683a4552524f523a206765745f706172656e745f6c65646765725f74696d65206661696c65643a45" - "52524f523a206765745f6c65646765725f73716e206661696c65643a2d2d2d2043617465676f727920323a20547261" - "6e73616374696f6e20446174612046756e6374696f6e73202d2d2d5472616e73616374696f6e204163636f756e743a" - "5472616e73616374696f6e20466565206c656e6774683a5472616e73616374696f6e20466565202873657269616c69" - "7a65642058525020616d6f756e74293a5472616e73616374696f6e2053657175656e63653a4e657374656420666965" - "6c64206c656e6774683a4e6573746564206669656c643a494e464f3a206765745f74785f6e65737465645f6669656c" - "64206e6f74206170706c696361626c653a5369676e657273206172726179206c656e6774683a4d656d6f7320617272" - "6179206c656e6774683a4e6573746564206172726179206c656e6774683a494e464f3a206765745f74785f6e657374" - "65645f61727261795f6c656e206e6f74206170706c696361626c653a535543434553533a205472616e73616374696f" - "6e20646174612066756e6374696f6e734552524f523a206765745f74785f6669656c642853657175656e6365292077" - "726f6e67206c656e6774683a4552524f523a206765745f74785f6669656c6428466565292077726f6e67206c656e67" - "746820286578706563746564203820627974657320666f7220585250293a4552524f523a206765745f74785f666965" - "6c64284163636f756e74292077726f6e67206c656e6774683a2d2d2d2043617465676f727920333a2043757272656e" - "74204c6564676572204f626a6563742046756e6374696f6e73202d2d2d43757272656e74206f626a6563742062616c" - "616e6365206c656e677468202858525020616d6f756e74293a43757272656e74206f626a6563742062616c616e6365" - "202873657269616c697a65642058525020616d6f756e74293a43757272656e74206f626a6563742062616c616e6365" - "206c656e67746820286e6f6e2d58525020616d6f756e74293a43757272656e74206f626a6563742062616c616e6365" - "3a494e464f3a206765745f63757272656e745f6c65646765725f6f626a5f6669656c642842616c616e636529206661" - "696c656420286d6179206265206578706563746564293a43757272656e74206c6564676572206f626a656374206163" - "636f756e743a494e464f3a206765745f63757272656e745f6c65646765725f6f626a5f6669656c64284163636f756e" - "7429206661696c65643a43757272656e74206e6573746564206669656c64206c656e6774683a43757272656e74206e" - "6573746564206669656c643a494e464f3a206765745f63757272656e745f6c65646765725f6f626a5f6e6573746564" - "5f6669656c64206e6f74206170706c696361626c653a43757272656e74206f626a656374205369676e657273206172" - "726179206c656e6774683a43757272656e74206e6573746564206172726179206c656e6774683a494e464f3a206765" - "745f63757272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e206e6f74206170706c69" - "6361626c653a535543434553533a2043757272656e74206c6564676572206f626a6563742066756e6374696f6e732d" - "2d2d2043617465676f727920343a20416e79204c6564676572204f626a6563742046756e6374696f6e73202d2d2d53" - "75636365737366756c6c7920636163686564206f626a65637420696e20736c6f743a436163686564206f626a656374" - "2062616c616e6365206c656e677468202858525020616d6f756e74293a436163686564206f626a6563742062616c61" - "6e6365202873657269616c697a65642058525020616d6f756e74293a436163686564206f626a6563742062616c616e" - "6365206c656e67746820286e6f6e2d58525020616d6f756e74293a436163686564206f626a6563742062616c616e63" - "653a494e464f3a206765745f6c65646765725f6f626a5f6669656c642842616c616e636529206661696c65643a4361" - "63686564206e6573746564206669656c64206c656e6774683a436163686564206e6573746564206669656c643a494e" - "464f3a206765745f6c65646765725f6f626a5f6e65737465645f6669656c64206e6f74206170706c696361626c653a" - "436163686564206f626a656374205369676e657273206172726179206c656e6774683a436163686564206e65737465" - "64206172726179206c656e6774683a494e464f3a206765745f6c65646765725f6f626a5f6e65737465645f61727261" - "795f6c656e206e6f74206170706c696361626c653a535543434553533a20416e79206c6564676572206f626a656374" - "2066756e6374696f6e73494e464f3a2063616368655f6c65646765725f6f626a206661696c65642028657870656374" - "656420776974682074657374206669787475726573293a494e464f3a206765745f6c65646765725f6f626a5f666965" - "6c64206661696c656420617320657870656374656420286e6f20636163686564206f626a656374293a494e464f3a20" - "6765745f6c65646765725f6f626a5f6e65737465645f6669656c64206661696c65642061732065787065637465643a" - "494e464f3a206765745f6c65646765725f6f626a5f61727261795f6c656e206661696c656420617320657870656374" - "65643a494e464f3a206765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e206661696c6564" - "2061732065787065637465643a535543434553533a20416e79206c6564676572206f626a6563742066756e6374696f" - "6e732028696e7465726661636520746573746564294552524f523a206163636f756e745f6b65796c6574206661696c" - "656420666f722063616368696e6720746573743a2d2d2d2043617465676f727920353a204b65796c65742047656e65" - "726174696f6e2046756e6374696f6e73202d2d2d4163636f756e74206b65796c65743a546573745479706543726564" - "656e7469616c206b65796c65743a494e464f3a2063726564656e7469616c5f6b65796c6574206661696c6564202865" - "78706563746564202d20696e74657266616365206973737565293a457363726f77206b65796c65743a4f7261636c65" - "206b65796c65743a535543434553533a204b65796c65742067656e65726174696f6e2066756e6374696f6e73455252" - "4f523a206f7261636c655f6b65796c6574206661696c65643a4552524f523a20657363726f775f6b65796c65742066" - "61696c65643a4552524f523a206163636f756e745f6b65796c6574206661696c65643a2d2d2d2043617465676f7279" - "20363a205574696c6974792046756e6374696f6e73202d2d2d48656c6c6f2c205852504c205741534d20776f726c64" - "21496e70757420646174613a5348413531322068616c6620686173683a4e46542064617461206c656e6774683a4e46" - "5420646174613a494e464f3a206765745f6e6674206661696c656420286578706563746564202d206e6f2073756368" - "204e4654293a54657374207472616365206d6573736167657061796c6f616454726163652066756e6374696f6e2062" - "79746573207772697474656e3a54657374206e756d62657220747261636554726163655f6e756d2066756e6374696f" - "6e20737563636565646564535543434553533a205574696c6974792066756e6374696f6e734552524f523a20747261" - "63655f6e756d2829206661696c65643a4552524f523a2074726163652829206661696c65643a4552524f523a20636f" - "6d707574655f7368613531325f68616c66206661696c65643a2d2d2d2043617465676f727920373a20446174612055" - "70646174652046756e6374696f6e73202d2d2d55706461746564206c656467657220656e7472792064617461206672" - "6f6d205741534d20746573745375636365737366756c6c792075706461746564206c656467657220656e7472792077" - "6974683a535543434553533a2044617461207570646174652066756e6374696f6e734552524f523a20757064617465" - "5f64617461206661696c65643a004d0970726f64756365727302086c616e6775616765010452757374000c70726f63" - "65737365642d6279010572757374631d312e38372e30202831373036376539616320323032352d30352d303929002c" - "0f7461726765745f6665617475726573022b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; + "420037034841888018200041c8006a22034108100022014108470d04419e83c0004117420810011a41b583c0004128" + "20034108410110021a2000410036023041848008200041306a22034104100022014104470d0541dd83c00041152003" + "4104410110021a200041f4006a410036000020004100360071200041013a0070200242003703002005420037030020" + "044200370300200042003703b001024020074108200641201006220141004e044041f283c00041142001ad10011a20" + "0041286a20062001101d418684c000410d2000280228200028022c410110021a0c010b419384c00041292001ac1001" + "1a0b41bc84c00041154183803c1007ac10011a41d184c00041134189803c1007ac10011a0240200041f0006a410810" + "08220141004e044041e484c00041142001ad10011a0c010b41f884c000412d2001ac10011a0b41a585c00041234101" + "4100410010021a41de86c000413341014100410010021a2000420037034841828018200041c8006a22014108100922" + "0341004c0d0620034108460440419187c000412b420810011a41bc87c000412f20014108410110021a0c080b41eb87" + "c000412f2003ad10011a200041206a200041c8006a2003101c419a88c000411720002802202000280224410110021a" + "0c070b41bf82c000411d2001ac10011a419b7f21020c070b419a82c00041252001ac10011a419a7f21020c060b41ef" + "81c000412b2001ac10011a41997f21020c050b41b486c000412a2001ac10011a41b77e21020c040b41f385c00041c1" + "002001ac10011a41b67e21020c030b41c885c000412b2001ac10011a41b57e21020c020b41b188c00041c5002003ac" + "10011a0b200041a0016a410036020020004198016a4200370300200042003703900102404181802020004190016a22" + "0341141009220141004a044041f688c000411e2003101f0c010b419489c00041332001ac10011a0b200041f4006a41" + "0036000020004100360071200041013a0070200041c8016a4200370300200041c0016a4200370300200041b8016a42" + "00370300200042003703b0010240200041f0006a4108200041b0016a22014120100a220341004e044041c789c00041" + "1c2003ad10011a200041186a20012003101d41e389c00041152000280218200028021c410110021a0c010b41f889c0" + "0041392003ac10011a0b41b18ac00041244183803c100bac10011a0240200041f0006a4108100c220141004e044041" + "d58ac000411c2001ad10011a0c010b41f18ac000413d2001ac10011a0b41ae8bc000412841014100410010021a41d6" + "8bc000412f41014100410010021a200041b0016a2203101a200041f0006a22012003101b200041a8016a4200370300" + "200041a0016a420037030020004198016a420037030020004200370390010240024002400240024020012000419001" + "6a2203102022014120460440200341204100100d220441004a044041858cc00041232004ad10011a20004200370330" + "2004200041306a220141081021220341004c0d022003410846044041a88cc000412a420810011a41d28cc000412e20" + "014108410110021a0c060b41808dc000412e2003ad10011a200041106a200041306a2003101c41ae8dc00041162000" + "2802102000280214410110021a0c050b41e68fc000413c2004ac10011a200041c8016a4200370300200041c0016a42" + "00370300200041b8016a4200370300200042003703b0014101200041b0016a4120102122014100480d020c030b41ba" + "92c000412e2001ac10011a41ef7c21020c050b41c48dc000412b2003ac10011a0c020b41a290c00041c1002001ac10" + "011a0b200041cc006a410036000020004100360049200041013a00484101200041c8006a200041b0016a1022220141" + "0048044041e390c00041352001ac10011a0b4101102322014100480440419891c00041322001ac10011a0b41012000" + "41c8006a10242201410048044041ca91c00041392001ac10011a0b418392c000413741014100410010021a0c010b20" + "0041cc006a410036000020004100360049200041013a0048200041c8016a4200370300200041c0016a420037030020" + "0041b8016a4200370300200042003703b00102402004200041c8006a200041b0016a22011022220341004e044041ef" + "8dc000411b2003ad10011a200041086a20012003101d418a8ec00041142000280208200028020c410110021a0c010b" + "419e8ec00041312003ac10011a0b41cf8ec000412320041023ac10011a02402004200041c8006a1024220141004e04" + "4041f28ec000411b2001ad10011a0c010b418d8fc00041352001ac10011a0b41c28fc000412441014100410010021a" + "0b41e892c000412f41014100410010021a200041b0016a2201101a200041306a22042001101b200041e0006a420037" + "0300200041d8006a4200370300200041d0006a420037030020004200370348024002400240024002402004200041c8" + "006a2203102022014120460440419793c000410f20034120410110021a20004188016a420037030020004180016a42" + "00370300200041f8006a4200370300200042003703700240200441142004411441a693c0004109200041f0006a2201" + "4120100e220341004a0440200020012003101d41ae93c000411220002802002000280204410110021a0c010b41c093" + "c000413c2003ac10011a0b200041a8016a22064200370300200041a0016a2202420037030020004198016a22054200" + "370300200042003703900120004180808cc07e360268200041306a22034114200041e8006a410420004190016a2208" + "4120100f22014120470d0141fc93c000410e20084120410110021a200041c8016a4200370300200041c0016a420037" + "0300200041b8016a4200370300200042003703b001200041808080d00236026c20034114200041ec006a4104200041" + "b0016a22044120101022014120470d02418a94c000410e20044120410110021a419894c00041244101410041001002" + "1a419195c000412541014100410010021a20004188016a420037030020004180016a4200370300200041f8006a4200" + "3703002000420037037041b695c0004117200041f0006a22034120101122014120470d0341cd95c000410b41b695c0" + "004117410110021a41d895c000411120034120410110021a2004101a200041c8006a22072004101b20064200370300" + "2002420037030020054200370300200042003703900102404100200422026b410371220320026a220520024d0d0020" + "030440200321010340200241003a0000200241016a2102200141016b22010d000b0b200341016b4107490d00034020" + "0241003a0000200241076a41003a0000200241066a41003a0000200241056a41003a0000200241046a41003a000020" + "0241036a41003a0000200241026a41003a0000200241016a41003a0000200241086a22022005470d000b0b20054180" + "0220036b2201417c716a220220054b0440034020054100360200200541046a22052002490d000b0b02402002200141" + "0371220120026a22034f0d002001220504400340200241003a0000200241016a2102200541016b22050d000b0b2001" + "41016b4107490d000340200241003a0000200241076a41003a0000200241066a41003a0000200241056a41003a0000" + "200241046a41003a0000200241036a41003a0000200241026a41003a0000200241016a41003a0000200241086a2202" + "2003470d000b0b0240200741142008412020044180021012220141004a044041e995c00041102001ad10011a200141" + "81024f0d0641f995c000410920042001410110021a0c010b418296c000412e2001ac10011a0b41b096c000411241c2" + "96c00041074101100222014100480d0541c996c000411d2001ad10011a41e696c0004111422a1001410048044041ad" + "97c000411a42a47b10011a41a47b21020c070b41f796c000411c420010011a41012102419397c000411a4101410041" + "0010021a41ff97c000412941014100410010021a41a898c000412810132201412846044041d098c000412741a898c0" + "004128410110021a41f798c000411e41014100410010021a41bf80c000412841014100410010021a0c070b419599c0" + "00411a2001ac10011a41c37a21020c060b41f494c000411d2001ac10011a418b7c21020c050b41d894c000411c2001" + "ac10011a41897c21020c040b41bc94c000411c2001ac10011a41887c21020c030b41dd97c00041222001ac10011a41" + "a77b21020c020b000b41c797c00041162001ac10011a41a57b21020b200041b0036a240020020b0d00200020012002" + "411410191a0b0c00200041142001412010180b0e002000418280182001200210140b0e002000200141082002412010" + "150b0a0020004183803c10160b0a0020002001410810170b0bb9190100418080c0000baf196572726f725f636f6465" + "3d3d3d3d20484f53542046554e4354494f4e532054455354203d3d3d54657374696e6720323620686f73742066756e" + "6374696f6e73535543434553533a20416c6c20686f73742066756e6374696f6e20746573747320706173736564212d" + "2d2d2043617465676f727920313a204c6564676572204865616465722046756e6374696f6e73202d2d2d4c65646765" + "722073657175656e6365206e756d6265723a506172656e74206c65646765722074696d653a506172656e74206c6564" + "67657220686173683a535543434553533a204c6564676572206865616465722066756e6374696f6e734552524f523a" + "206765745f706172656e745f6c65646765725f686173682077726f6e67206c656e6774683a4552524f523a20676574" + "5f706172656e745f6c65646765725f74696d65206661696c65643a4552524f523a206765745f6c65646765725f7371" + "6e206661696c65643a2d2d2d2043617465676f727920323a205472616e73616374696f6e20446174612046756e6374" + "696f6e73202d2d2d5472616e73616374696f6e204163636f756e743a5472616e73616374696f6e20466565206c656e" + "6774683a5472616e73616374696f6e20466565202873657269616c697a65642058525020616d6f756e74293a547261" + "6e73616374696f6e2053657175656e63653a4e6573746564206669656c64206c656e6774683a4e6573746564206669" + "656c643a494e464f3a206765745f74785f6e65737465645f6669656c64206e6f74206170706c696361626c653a5369" + "676e657273206172726179206c656e6774683a4d656d6f73206172726179206c656e6774683a4e6573746564206172" + "726179206c656e6774683a494e464f3a206765745f74785f6e65737465645f61727261795f6c656e206e6f74206170" + "706c696361626c653a535543434553533a205472616e73616374696f6e20646174612066756e6374696f6e73455252" + "4f523a206765745f74785f6669656c642853657175656e6365292077726f6e67206c656e6774683a4552524f523a20" + "6765745f74785f6669656c6428466565292077726f6e67206c656e6774682028657870656374656420382062797465" + "7320666f7220585250293a4552524f523a206765745f74785f6669656c64284163636f756e74292077726f6e67206c" + "656e6774683a2d2d2d2043617465676f727920333a2043757272656e74204c6564676572204f626a6563742046756e" + "6374696f6e73202d2d2d43757272656e74206f626a6563742062616c616e6365206c656e677468202858525020616d" + "6f756e74293a43757272656e74206f626a6563742062616c616e6365202873657269616c697a65642058525020616d" + "6f756e74293a43757272656e74206f626a6563742062616c616e6365206c656e67746820286e6f6e2d58525020616d" + "6f756e74293a43757272656e74206f626a6563742062616c616e63653a494e464f3a206765745f63757272656e745f" + "6c65646765725f6f626a5f6669656c642842616c616e636529206661696c656420286d617920626520657870656374" + "6564293a43757272656e74206c6564676572206f626a656374206163636f756e743a494e464f3a206765745f637572" + "72656e745f6c65646765725f6f626a5f6669656c64284163636f756e7429206661696c65643a43757272656e74206e" + "6573746564206669656c64206c656e6774683a43757272656e74206e6573746564206669656c643a494e464f3a2067" + "65745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c64206e6f74206170706c69636162" + "6c653a43757272656e74206f626a656374205369676e657273206172726179206c656e6774683a43757272656e7420" + "6e6573746564206172726179206c656e6774683a494e464f3a206765745f63757272656e745f6c65646765725f6f62" + "6a5f6e65737465645f61727261795f6c656e206e6f74206170706c696361626c653a535543434553533a2043757272" + "656e74206c6564676572206f626a6563742066756e6374696f6e732d2d2d2043617465676f727920343a20416e7920" + "4c6564676572204f626a6563742046756e6374696f6e73202d2d2d5375636365737366756c6c792063616368656420" + "6f626a65637420696e20736c6f743a436163686564206f626a6563742062616c616e6365206c656e67746820285852" + "5020616d6f756e74293a436163686564206f626a6563742062616c616e6365202873657269616c697a656420585250" + "20616d6f756e74293a436163686564206f626a6563742062616c616e6365206c656e67746820286e6f6e2d58525020" + "616d6f756e74293a436163686564206f626a6563742062616c616e63653a494e464f3a206765745f6c65646765725f" + "6f626a5f6669656c642842616c616e636529206661696c65643a436163686564206e6573746564206669656c64206c" + "656e6774683a436163686564206e6573746564206669656c643a494e464f3a206765745f6c65646765725f6f626a5f" + "6e65737465645f6669656c64206e6f74206170706c696361626c653a436163686564206f626a656374205369676e65" + "7273206172726179206c656e6774683a436163686564206e6573746564206172726179206c656e6774683a494e464f" + "3a206765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e206e6f74206170706c696361626c" + "653a535543434553533a20416e79206c6564676572206f626a6563742066756e6374696f6e73494e464f3a20636163" + "68655f6c65646765725f6f626a206661696c6564202865787065637465642077697468207465737420666978747572" + "6573293a494e464f3a206765745f6c65646765725f6f626a5f6669656c64206661696c656420617320657870656374" + "656420286e6f20636163686564206f626a656374293a494e464f3a206765745f6c65646765725f6f626a5f6e657374" + "65645f6669656c64206661696c65642061732065787065637465643a494e464f3a206765745f6c65646765725f6f62" + "6a5f61727261795f6c656e206661696c65642061732065787065637465643a494e464f3a206765745f6c6564676572" + "5f6f626a5f6e65737465645f61727261795f6c656e206661696c65642061732065787065637465643a535543434553" + "533a20416e79206c6564676572206f626a6563742066756e6374696f6e732028696e74657266616365207465737465" + "64294552524f523a206163636f756e745f6b65796c6574206661696c656420666f722063616368696e672074657374" + "3a2d2d2d2043617465676f727920353a204b65796c65742047656e65726174696f6e2046756e6374696f6e73202d2d" + "2d4163636f756e74206b65796c65743a546573745479706543726564656e7469616c206b65796c65743a494e464f3a" + "2063726564656e7469616c5f6b65796c6574206661696c656420286578706563746564202d20696e74657266616365" + "206973737565293a457363726f77206b65796c65743a4f7261636c65206b65796c65743a535543434553533a204b65" + "796c65742067656e65726174696f6e2066756e6374696f6e734552524f523a206f7261636c655f6b65796c65742066" + "61696c65643a4552524f523a20657363726f775f6b65796c6574206661696c65643a4552524f523a206163636f756e" + "745f6b65796c6574206661696c65643a2d2d2d2043617465676f727920363a205574696c6974792046756e6374696f" + "6e73202d2d2d48656c6c6f2c205852504c205741534d20776f726c6421496e70757420646174613a53484135313220" + "68616c6620686173683a4e46542064617461206c656e6774683a4e465420646174613a494e464f3a206765745f6e66" + "74206661696c656420286578706563746564202d206e6f2073756368204e4654293a54657374207472616365206d65" + "73736167657061796c6f616454726163652066756e6374696f6e206279746573207772697474656e3a54657374206e" + "756d62657220747261636554726163655f6e756d2066756e6374696f6e20737563636565646564535543434553533a" + "205574696c6974792066756e6374696f6e734552524f523a2074726163655f6e756d2829206661696c65643a455252" + "4f523a2074726163652829206661696c65643a4552524f523a20636f6d707574655f7368613531325f68616c662066" + "61696c65643a2d2d2d2043617465676f727920373a2044617461205570646174652046756e6374696f6e73202d2d2d" + "55706461746564206c656467657220656e74727920646174612066726f6d205741534d207465737453756363657373" + "66756c6c792075706461746564206c656467657220656e74727920776974683a535543434553533a20446174612075" + "70646174652066756e6374696f6e734552524f523a207570646174655f64617461206661696c65643a004d0970726f" + "64756365727302086c616e6775616765010452757374000c70726f6365737365642d6279010572757374631d312e38" + "392e30202832393438333838336520323032352d30382d303429002c0f7461726765745f6665617475726573022b0f" + "6d757461626c652d676c6f62616c732b087369676e2d657874"; extern std::string const kDeepRecursionHex = "0061736d010000000105016000017f030201000608017f0141c0843d0b070a010666696e69736800000a1601140023" @@ -1008,33 +1010,18 @@ extern std::string const kFloat0Hex = "0061736d0100000001290560057f7f7f7f7f017f60047e7f7f7f017f60077f7f7f7f7f7f7f017f60047f7f7f7f017f" "6000017f025f0408686f73745f6c6962057472616365000008686f73745f6c69620e666c6f61745f66726f6d5f696e" "74000108686f73745f6c69620e666c6f61745f7375627472616374000208686f73745f6c69620d666c6f61745f636f" - "6d7061726500030302010405030100110619037f01418080c0000b7f00419681c0000b7f0041a081c0000b072e0406" - "6d656d6f727902000666696e69736800040a5f5f646174615f656e6403010b5f5f686561705f6261736503020ad302" - "01d00201017f23808080800041206b2200248080808000418080c0800041154101410041001080808080001a200041" - "086a410036020020004200370300200041106a41086a410036020020004200370310024002400240420a2000410c41" - "00108180808000410c470d002000410c2000410c200041106a410c4100108280808000410c470d0102400240200041" - "106a410c200041106a410c1083808080000d00419580c0800041174101410041001080808080001a0c010b41ac80c0" - "800041164101410041001080808080001a0b0240200041106a410c41c280c08000410c1083808080000d0041ce80c0" - "8000411a4101410041001080808080001a0c030b41e880c0800041194101410041001080808080001a0c020b418181" - "c0800041154101410041001080808080001a0c010b418181c0800041154101410041001080808080001a0b20004120" - "6a24808080800041010b0ba0010100418080c0000b96010a24242420746573745f666c6f61745f3020242424202066" - "6c6f6174203020636f6d706172653a20676f6f642020666c6f6174203020636f6d706172653a206261640000000000" - "000000800000002020464c4f41545f5a45524f20636f6d706172653a20676f6f642020464c4f41745f5a45524f2063" - "6f6d706172653a206261642020666c6f61742031302d31303a206661696c6564009503046e616d65000d0c666c6f61" - "745f302e7761736d01de0205004c5f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f" - "646566696e65645f66756e6374696f6e73357472616365313768653738323066313637383330383338364501565f5a" - "4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e" - "733134666c6f61745f66726f6d5f696e74313768646463636262643266613366663431634502565f5a4e3136787270" - "6c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e733134666c6f" - "61745f7375627472616374313768313765643838343131303333663437624503555f5a4e31367872706c5f7761736d" - "5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e733133666c6f61745f636f6d" - "706172653137683835393637633834333363613334623045040666696e697368071201000f5f5f737461636b5f706f" - "696e746572090a0100072e726f64617461004d0970726f64756365727302086c616e6775616765010452757374000c" - "70726f6365737365642d6279010572757374631d312e38392e30202832393438333838336520323032352d30382d30" - "34290094010f7461726765745f6665617475726573082b0b62756c6b2d6d656d6f72792b0f62756c6b2d6d656d6f72" - "792d6f70742b1663616c6c2d696e6469726563742d6f7665726c6f6e672b0a6d756c746976616c75652b0f6d757461" - "626c652d676c6f62616c732b136e6f6e7472617070696e672d6670746f696e742b0f7265666572656e63652d747970" - "65732b087369676e2d657874"; + "6d7061726500030302010405030100110619037f01418080c0000b7f0041e980c0000b7f0041f080c0000b072e0406" + "6d656d6f727902000666696e69736800040a5f5f646174615f656e6403010b5f5f686561705f6261736503020ad201" + "01cf0101027f230041206b22002400418080c000411541014100410010001a200041086a4100360200200042003703" + "00200041186a41003602002000420037031002400240420a2000410c41001001410c4604402000410c2000410c2000" + "41106a2201410c41001002410c470d012001410c419580c000410c100345044041a180c000411a4101410041001000" + "1a0c030b41bb80c000411941014100410010001a0c020b41d480c000411541014100410010001a0c010b41d480c000" + "411541014100410010001a0b200041206a240041010b0b720100418080c0000b690a24242420746573745f666c6f61" + "745f30202424240000000000000000800000002020464c4f41545f5a45524f20636f6d706172653a20676f6f642020" + "464c4f41545f5a45524f20636f6d706172653a206261642020666c6f61742031302d31303a206661696c6564004d09" + "70726f64756365727302086c616e6775616765010452757374000c70726f6365737365642d6279010572757374631d" + "312e38392e30202832393438333838336520323032352d30382d303429002c0f7461726765745f6665617475726573" + "022b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; extern std::string const kDisabledFloatHex = "0061736d010000000108026000006000017f03030200010503010002063e0a7f004180080b7f004180080b7f004180" diff --git a/src/test/app/wasm_fixtures/float_0/src/lib.rs b/src/test/app/wasm_fixtures/float_0/src/lib.rs index 2c1e2dd5c3..babcc1bf54 100644 --- a/src/test/app/wasm_fixtures/float_0/src/lib.rs +++ b/src/test/app/wasm_fixtures/float_0/src/lib.rs @@ -39,13 +39,6 @@ pub extern "C" fn finish() -> i32 { return 1; } - // Compare result with zero - if 0 == unsafe { float_compare(f_result.as_ptr(), FLOAT_SIZE, f_result.as_ptr(), FLOAT_SIZE) } { - let _ = trace(" float 0 compare: good"); - } else { - let _ = trace(" float 0 compare: bad"); - } - // Compare result with FLOAT_ZERO constant if 0 == unsafe { float_compare(f_result.as_ptr(), FLOAT_SIZE, FLOAT_ZERO.as_ptr(), FLOAT_SIZE) } { let _ = trace(" FLOAT_ZERO compare: good"); From 5ee903befc52b827557c87d0ac701f0258744049 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 9 Jun 2026 17:09:45 -0400 Subject: [PATCH 127/137] remove wasm engine tests --- cspell.config.yaml | 1 - src/test/app/Wasm_test.cpp | 1119 -------- src/test/app/wasm_fixtures/disableFloat.wat | 34 - src/test/app/wasm_fixtures/fib.c | 11 - .../wasm_fixtures/fixture_functions_5k.cpp | 2240 ----------------- .../app/wasm_fixtures/fixture_locals_10k.cpp | 2128 ---------------- src/test/app/wasm_fixtures/fixtures.cpp | 732 ------ src/test/app/wasm_fixtures/fixtures.h | 71 - src/test/app/wasm_fixtures/float_0/Cargo.lock | 171 -- src/test/app/wasm_fixtures/float_0/Cargo.toml | 21 - src/test/app/wasm_fixtures/float_0/src/lib.rs | 50 - .../app/wasm_fixtures/float_tests/Cargo.lock | 171 -- .../app/wasm_fixtures/float_tests/Cargo.toml | 21 - .../app/wasm_fixtures/float_tests/src/lib.rs | 954 ------- src/test/app/wasm_fixtures/infiniteLoop.c | 7 - src/test/app/wasm_fixtures/thousand1_params.c | 264 -- src/test/app/wasm_fixtures/thousand_params.c | 262 -- .../wasm_fixtures/wat/custom_page_sizes.wat | 13 - .../app/wasm_fixtures/wat/deep_recursion.wat | 29 - .../app/wasm_fixtures/wat/functions_5k.zip | Bin 29665 -> 0 bytes src/test/app/wasm_fixtures/wat/locals_10k.zip | Bin 82559 -> 0 bytes src/test/app/wasm_fixtures/wat/memory64.wat | 21 - .../wat/memory_end_of_word_over_limit.wat | 28 - .../wat/memory_grow_0_page_more_than_8MB.wat | 29 - .../wasm_fixtures/wat/memory_grow_0_to_1.wat | 26 - .../wat/memory_grow_1_page_more_than_8MB.wat | 29 - .../wasm_fixtures/wat/memory_grow_1_to_0.wat | 33 - .../wat/memory_init_1_page_more_than_8MB.wat | 27 - .../wat/memory_last_byte_of_8MB.wat | 26 - .../wat/memory_negative_address.wat | 23 - .../wat/memory_offset_over_limit.wat | 27 - .../wat/memory_pointer_at_limit.wat | 22 - .../wat/memory_pointer_over_limit.wat | 23 - .../app/wasm_fixtures/wat/multi_memory.wat | 16 - .../app/wasm_fixtures/wat/opc_reserved.wat | 98 - .../wat/proposal_bulk_memory.wat | 25 - .../wat/proposal_extended_const.wat | 15 - .../wat/proposal_float_to_int.wat | 18 - .../wat/proposal_gc_struct_new.wat | 12 - .../wat/proposal_multi_value.wat | 22 - .../wat/proposal_mutable_global.wat | 25 - .../wasm_fixtures/wat/proposal_ref_types.wat | 18 - .../wasm_fixtures/wat/proposal_sign_ext.wat | 18 - .../wasm_fixtures/wat/proposal_stringref.wat | 1 - .../wasm_fixtures/wat/proposal_tail_call.wat | 15 - src/test/app/wasm_fixtures/wat/start_loop.wat | 22 - .../wasm_fixtures/wat/table_0_elements.wat | 10 - .../app/wasm_fixtures/wat/table_2_tables.wat | 24 - .../wasm_fixtures/wat/table_64_elements.wat | 25 - .../wasm_fixtures/wat/table_65_elements.wat | 25 - .../app/wasm_fixtures/wat/table_uint_max.wat | 15 - .../wasm_fixtures/wat/trap_divide_by_0.wat | 15 - .../wat/trap_func_signature_mismatch.wat | 33 - .../wasm_fixtures/wat/trap_int_overflow.wat | 18 - .../app/wasm_fixtures/wat/trap_null_call.wat | 22 - .../wasm_fixtures/wat/trap_unreachable.wat | 12 - .../app/wasm_fixtures/wat/wasi_get_time.wat | 38 - src/test/app/wasm_fixtures/wat/wasi_print.wat | 59 - .../app/wasm_fixtures/wat/wide_arithmetic.wat | 22 - 59 files changed, 9236 deletions(-) delete mode 100644 src/test/app/wasm_fixtures/disableFloat.wat delete mode 100644 src/test/app/wasm_fixtures/fib.c delete mode 100644 src/test/app/wasm_fixtures/fixture_functions_5k.cpp delete mode 100644 src/test/app/wasm_fixtures/fixture_locals_10k.cpp delete mode 100644 src/test/app/wasm_fixtures/float_0/Cargo.lock delete mode 100644 src/test/app/wasm_fixtures/float_0/Cargo.toml delete mode 100644 src/test/app/wasm_fixtures/float_0/src/lib.rs delete mode 100644 src/test/app/wasm_fixtures/float_tests/Cargo.lock delete mode 100644 src/test/app/wasm_fixtures/float_tests/Cargo.toml delete mode 100644 src/test/app/wasm_fixtures/float_tests/src/lib.rs delete mode 100644 src/test/app/wasm_fixtures/infiniteLoop.c delete mode 100644 src/test/app/wasm_fixtures/thousand1_params.c delete mode 100644 src/test/app/wasm_fixtures/thousand_params.c delete mode 100644 src/test/app/wasm_fixtures/wat/custom_page_sizes.wat delete mode 100644 src/test/app/wasm_fixtures/wat/deep_recursion.wat delete mode 100644 src/test/app/wasm_fixtures/wat/functions_5k.zip delete mode 100644 src/test/app/wasm_fixtures/wat/locals_10k.zip delete mode 100644 src/test/app/wasm_fixtures/wat/memory64.wat delete mode 100644 src/test/app/wasm_fixtures/wat/memory_end_of_word_over_limit.wat delete mode 100644 src/test/app/wasm_fixtures/wat/memory_grow_0_page_more_than_8MB.wat delete mode 100644 src/test/app/wasm_fixtures/wat/memory_grow_0_to_1.wat delete mode 100644 src/test/app/wasm_fixtures/wat/memory_grow_1_page_more_than_8MB.wat delete mode 100644 src/test/app/wasm_fixtures/wat/memory_grow_1_to_0.wat delete mode 100644 src/test/app/wasm_fixtures/wat/memory_init_1_page_more_than_8MB.wat delete mode 100644 src/test/app/wasm_fixtures/wat/memory_last_byte_of_8MB.wat delete mode 100644 src/test/app/wasm_fixtures/wat/memory_negative_address.wat delete mode 100644 src/test/app/wasm_fixtures/wat/memory_offset_over_limit.wat delete mode 100644 src/test/app/wasm_fixtures/wat/memory_pointer_at_limit.wat delete mode 100644 src/test/app/wasm_fixtures/wat/memory_pointer_over_limit.wat delete mode 100644 src/test/app/wasm_fixtures/wat/multi_memory.wat delete mode 100644 src/test/app/wasm_fixtures/wat/opc_reserved.wat delete mode 100644 src/test/app/wasm_fixtures/wat/proposal_bulk_memory.wat delete mode 100644 src/test/app/wasm_fixtures/wat/proposal_extended_const.wat delete mode 100644 src/test/app/wasm_fixtures/wat/proposal_float_to_int.wat delete mode 100644 src/test/app/wasm_fixtures/wat/proposal_gc_struct_new.wat delete mode 100644 src/test/app/wasm_fixtures/wat/proposal_multi_value.wat delete mode 100644 src/test/app/wasm_fixtures/wat/proposal_mutable_global.wat delete mode 100644 src/test/app/wasm_fixtures/wat/proposal_ref_types.wat delete mode 100644 src/test/app/wasm_fixtures/wat/proposal_sign_ext.wat delete mode 100644 src/test/app/wasm_fixtures/wat/proposal_stringref.wat delete mode 100644 src/test/app/wasm_fixtures/wat/proposal_tail_call.wat delete mode 100644 src/test/app/wasm_fixtures/wat/start_loop.wat delete mode 100644 src/test/app/wasm_fixtures/wat/table_0_elements.wat delete mode 100644 src/test/app/wasm_fixtures/wat/table_2_tables.wat delete mode 100644 src/test/app/wasm_fixtures/wat/table_64_elements.wat delete mode 100644 src/test/app/wasm_fixtures/wat/table_65_elements.wat delete mode 100644 src/test/app/wasm_fixtures/wat/table_uint_max.wat delete mode 100644 src/test/app/wasm_fixtures/wat/trap_divide_by_0.wat delete mode 100644 src/test/app/wasm_fixtures/wat/trap_func_signature_mismatch.wat delete mode 100644 src/test/app/wasm_fixtures/wat/trap_int_overflow.wat delete mode 100644 src/test/app/wasm_fixtures/wat/trap_null_call.wat delete mode 100644 src/test/app/wasm_fixtures/wat/trap_unreachable.wat delete mode 100644 src/test/app/wasm_fixtures/wat/wasi_get_time.wat delete mode 100644 src/test/app/wasm_fixtures/wat/wasi_print.wat delete mode 100644 src/test/app/wasm_fixtures/wat/wide_arithmetic.wat diff --git a/cspell.config.yaml b/cspell.config.yaml index d5413fba27..6dcf17cb5e 100644 --- a/cspell.config.yaml +++ b/cspell.config.yaml @@ -7,7 +7,6 @@ ignorePaths: - cmake/** - LICENSE.md - .clang-tidy - - src/test/app/wasm_fixtures/**/*.wat - src/test/app/wasm_fixtures/*.c language: en allowCompoundWords: true # TODO (#6334) diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index fd64976f1e..737e5f0c9e 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -20,15 +20,10 @@ #include -#include -#include #include -#include #include -#include #include #include -#include #include namespace xrpl::test { @@ -54,108 +49,6 @@ hexToBytes(std::string const& hex) return Bytes(ws.begin(), ws.end()); } -template -unsigned -uleb128(IT& it, T val) -{ - unsigned count = 0; - do - { - std::uint8_t byte = val & 0x7f; - val >>= 7; - if (val) - byte |= 0x80; - *it++ = byte; - ++count; - } while (val != 0); - - return count; -} - -template -std::pair -uleb128(IT&& it) -{ - static_assert(sizeof(*it) == 1, "invalid iterator type"); - std::uint64_t val = 0; - std::uint64_t byte = 0; - unsigned shift = 0; - unsigned count = 0; - - do - { - if (shift > (sizeof(std::uint64_t) * 8) - 7) - return {0, 0}; - byte = *it++; - val |= (byte & 0x7F) << shift; - shift += 7; - ++count; - } while (byte >= 0x80); - - return {val, count}; -} - -static std::pair -getSection(Bytes const& module, std::uint8_t n) -{ - static std::uint8_t const kHdr[] = {0x00, 0x61, 0x73, 0x6D}; - static std::uint8_t const kVer[] = {0x01, 0x00, 0x00, 0x00}; - static std::uint8_t const kLastSec = 12; - - // sections: - // 0: "Custom", 1: "Type", 2: "Import", 3: "Function", 4: "Table", 5: "Memory", 6: "Global", - // 7: "Export", 8: "Start", 9: "Element", 10: "Code", 11: "Data", 12: "DataCount" - - if (module.size() < sizeof(kHdr) + sizeof(kVer) + 2) - return {0, 0}; - if (memcmp(module.data(), kHdr, sizeof(kHdr)) != 0) - return {0, 0}; - if (memcmp(module.data() + sizeof(kHdr), kVer, sizeof(kVer)) != 0) - return {0, 0}; - - unsigned pos = sizeof(kHdr) + sizeof(kVer); // sections start - for (; pos < module.size();) - { - auto const start = pos; - std::uint8_t const byte = module[pos++]; - if (byte > kLastSec) - return {0, 0}; - - auto [sz, cnt] = uleb128(module.cbegin() + pos); - if (cnt == 0u) - return {0, 0}; - if (pos + cnt + sz > module.size()) - return {0, 0}; - pos += cnt + sz; - - if (byte == n) - return {start, pos}; - } - return {0, 0}; -} - -static std::optional -runFinishFunction(std::string const& code) -{ - auto& engine = WasmEngine::instance(); - auto const wasm = hexToBytes(code); - HostFunctions hfs; - auto const re = engine.run(wasm, hfs, 10'000'000, "finish"); - if (re.has_value()) - { - return std::optional(re->result); - } - - return std::nullopt; -} - -static bool -finishFunctionReturns(std::string const& code, int32_t expected) -{ - auto const result = runFinishFunction(code); - return result.has_value() && *result == expected; -} - struct Wasm_test : public beast::unit_test::Suite { void @@ -303,85 +196,6 @@ struct Wasm_test : public beast::unit_test::Suite env.close(); } - void - testImpExp() - { - testcase("Wasm import/export functions"); - - auto impExpWasm = hexToBytes(kImpExpHex); - - using namespace test::jtx; - - Env env{*this}; - TestLedgerDataProvider hfs(env); - ImportVec imports; - WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn", hfs, 33); - WASM_IMPORT_FUNC2(imports, getParentLedgerHash, "get_parent_ledger_hash", hfs, 60); - auto& engine = WasmEngine::instance(); - - // Test exp_func1() - should return 1 - auto re = engine.run(impExpWasm, hfs, 1'000'000, "exp_func1", {}, imports, env.journal); - checkResult(re, 1, 30); - - // Test exp_func2(5) - should return 2 * 5 = 10 - re = engine.run( - impExpWasm, hfs, 1'000'000, "exp_func2", wasmParams(5), imports, env.journal); - checkResult(re, 10, 52); - - // Test test_imports() - should call get_ledger_sqn and get_parent_ledger_hash - re = engine.run(impExpWasm, hfs, 1'000'000, "test_imports", {}, imports, env.journal); - // Should return the ledger sequence number (3 by default in test env) - checkResult(re, 3, 294); - - // Test corrupted import/export sections - invert each byte and expect failure - testcase("Wasm import/export section corruption"); - { - // Import section(#2): bytes [26, 79) - 53 bytes - // Export section(#7): bytes [90, 141) - 51 bytes - auto [importStart, importEnd] = getSection(impExpWasm, 2); - auto [exportStart, exportEnd] = getSection(impExpWasm, 7); - - BEAST_EXPECTS(importStart == 26, std::to_string(importStart)); - BEAST_EXPECTS(importEnd == 79, std::to_string(importEnd)); - BEAST_EXPECTS(exportStart == 90, std::to_string(exportStart)); - BEAST_EXPECTS(exportEnd == 141, std::to_string(exportEnd)); - - auto testInv = [&](unsigned i) { - auto corruptedWasm = impExpWasm; - corruptedWasm[i] = ~corruptedWasm[i]; // Invert byte - - // Try to run any function - should fail due to corruption - auto result = engine.run( - corruptedWasm, hfs, 1'000'000, "exp_func1", {}, imports, env.journal); - BEAST_EXPECT(!result); - }; - - // Test each byte in import section - for (unsigned i = importStart; i < importEnd; ++i) - testInv(i); - - // Test each byte in export section - for (unsigned i = exportStart; i < exportEnd; ++i) - testInv(i); - } - - env.close(); - } - - void - testWasmFib() - { - testcase("Wasm fibo"); - - auto const fibWasm = hexToBytes(kFibWasmHex); - auto& engine = WasmEngine::instance(); - HostFunctions hfs; - - auto const re = engine.run(fibWasm, hfs, 10'000'000, "fib", wasmParams(10)); - - checkResult(re, 55, 1'137); - } - void testHFCost() { @@ -526,123 +340,6 @@ struct Wasm_test : public beast::unit_test::Suite auto re = runEscrowWasm(allHFWasm, hfs, 100'000, escrowFunctionName, {}); checkResult(re, -201, 29'502); } - -// This test use log output, so DEBUG_OUTPUT must be disabled. -#ifndef DEBUG_OUTPUT - { // fail because recursion too deep - - auto const deepWasm = hexToBytes(kDeepRecursionHex); - - TestHostFunctionsSink hfs(env); - std::string const funcName("finish"); - auto re = runEscrowWasm(deepWasm, hfs, 1'000'000'000, funcName, {}); - BEAST_EXPECT(!re && re.error()); - // std::cout << "bad case (deep recursion) result " << re.error() - // << std::endl; - - auto const& sink = hfs.getSink(); - auto countSubstr = [](std::string const& str, std::string const& substr) { - std::size_t pos = 0; - int occurrences = 0; - while ((pos = str.find(substr, pos)) != std::string::npos) - { - occurrences++; - pos += substr.length(); - } - return occurrences; - }; - - auto const s = sink.messages().str(); - BEAST_EXPECT(countSubstr(s, "WASMI Error: failure to call func") == 1); - BEAST_EXPECT(countSubstr(s, "exception: failure") > 0); - } -#endif - - { // infinite loop - auto const infiniteLoopWasm = hexToBytes(kInfiniteLoopWasmHex); - std::string const funcName("loop"); - TestHostFunctions hfs(env); - - // infinite loop should be caught and fail - auto const re = runEscrowWasm(infiniteLoopWasm, hfs, 1'000'000, funcName, {}); - if (BEAST_EXPECT(!re.has_value())) - { - BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); - } - } - - { - // expected import not provided - auto const lgrSqnWasm = hexToBytes(kLedgerSqnWasmHex); - TestLedgerDataProvider hfs(env); - ImportVec imports; - WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn2", hfs); - - auto& engine = WasmEngine::instance(); - - auto re = engine.run( - lgrSqnWasm, hfs, 1'000'000, escrowFunctionName, {}, imports, env.journal); - - BEAST_EXPECT(!re); - } - - { - // HF unsync between import and VM - auto const lgrSqnWasm = hexToBytes(kLedgerSqnWasmHex); - TestLedgerDataProvider hfs(env); - TestLedgerDataProvider hfs2(env); - ImportVec imports; - WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn", hfs2); - - auto& engine = WasmEngine::instance(); - - auto re = engine.run( - lgrSqnWasm, hfs, 1'000'000, escrowFunctionName, {}, imports, env.journal); - - BEAST_EXPECT(!re); - } - - { - // bad function name - auto const lgrSqnWasm = hexToBytes(kLedgerSqnWasmHex); - TestLedgerDataProvider hfs(env); - ImportVec imports; - WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn", hfs); - - auto& engine = WasmEngine::instance(); - auto re = engine.run(lgrSqnWasm, hfs, 1'000'000, "func1", {}, imports, env.journal); - - BEAST_EXPECT(!re); - } - } - - void - testFloat() - { - testcase("float point"); - - std::string const funcName("finish"); - - using namespace test::jtx; - - Env env(*this); - { - auto const floatTestWasm = hexToBytes(kFloatTestsWasmHex); - - TestHostFunctions hfs(env); - auto re = runEscrowWasm(floatTestWasm, hfs, 200'000, funcName, {}); - checkResult(re, 1, 134'938); - env.close(); - } - - { - auto const float0Wasm = hexToBytes(kFloat0Hex); - - TestHostFunctions hfs(env); - auto re = runEscrowWasm(float0Wasm, hfs, 100'000, funcName, {}); - checkResult(re, 1, 2'819); - env.close(); - } } void @@ -663,141 +360,6 @@ struct Wasm_test : public beast::unit_test::Suite checkResult(re, 1, allowance); } - void - testDisabledFloat() - { - testcase("disabled float"); - - using namespace test::jtx; - Env env{*this}; - - auto disabledFloatWasm = hexToBytes(kDisabledFloatHex); - std::string const funcName("finish"); - TestHostFunctions hfs(env); - - { - // f32 set constant, opcode disabled exception - auto const re = runEscrowWasm(disabledFloatWasm, hfs, 1'000'000, funcName, {}); - if (BEAST_EXPECT(!re.has_value())) - { - BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); - } - } - - { - // f32 add, can't create module exception - disabledFloatWasm[0x117] = 0x92; - auto const re = runEscrowWasm(disabledFloatWasm, hfs, 1'000'000, funcName, {}); - if (BEAST_EXPECT(!re.has_value())) - { - BEAST_EXPECT(re.error() == tecFAILED_PROCESSING); - } - } - } - - void - testWasmMemory() - { - testcase("Wasm additional memory limit tests"); - BEAST_EXPECT(finishFunctionReturns(kMemoryPointerAtLimitHex, 1)); - BEAST_EXPECT(!runFinishFunction(kMemoryPointerOverLimitHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kMemoryOffsetOverLimitHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kMemoryEndOfWordOverLimitHex).has_value()); - BEAST_EXPECT(finishFunctionReturns(kMemoryGrow0To1PageHex, 1)); - BEAST_EXPECT(finishFunctionReturns(kMemoryGrow1To0PageHex, -1)); - BEAST_EXPECT(finishFunctionReturns(kMemoryLastByteOf8MbHex, 1)); - BEAST_EXPECT(finishFunctionReturns(kMemoryGrow1MoreThan8MbHex, -1)); - BEAST_EXPECT(finishFunctionReturns(kMemoryGrow0MoreThan8MbHex, 1)); - BEAST_EXPECT(!runFinishFunction(kMemoryInit1MoreThan8MbHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kMemoryNegativeAddressHex).has_value()); - } - - void - testWasmTable() - { - testcase("Wasm table limit tests"); - BEAST_EXPECT(finishFunctionReturns(kTable64ElementsHex, 1)); - BEAST_EXPECT(!runFinishFunction(kTable65ElementsHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kTable2TablesHex).has_value()); - BEAST_EXPECT(finishFunctionReturns(kTable0ElementsHex, 1)); - BEAST_EXPECT(!runFinishFunction(kTableUintMaxHex).has_value()); - } - - void - testWasmProposal() - { - testcase("Wasm disabled proposal tests"); - BEAST_EXPECT(!runFinishFunction(kProposalMutableGlobalHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kProposalGcStructNewHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kProposalMultiValueHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kProposalSignExtHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kProposalFloatToIntHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kProposalBulkMemoryHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kProposalRefTypesHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kProposalTailCallHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kProposalExtendedConstHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kProposalMultiMemoryHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kProposalCustomPageSizesHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kProposalMemory64Hex).has_value()); - BEAST_EXPECT(!runFinishFunction(kProposalWideArithmeticHex).has_value()); - } - - void - testWasmTrap() - { - testcase("Wasm trap tests"); - BEAST_EXPECT(!runFinishFunction(kTrapDivideBy0Hex).has_value()); - BEAST_EXPECT(!runFinishFunction(kTrapIntOverflowHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kTrapUnreachableHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kTrapNullCallHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kTrapFuncSigMismatchHex).has_value()); - } - - void - testWasmWasi() - { - testcase("Wasm Wasi tests"); - BEAST_EXPECT(!runFinishFunction(kWasiGetTimeHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kWasiPrintHex).has_value()); - } - - void - testWasmSectionCorruption() - { - testcase("Wasm Section Corruption tests"); - BEAST_EXPECT(!runFinishFunction(kBadMagicNumberHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kBadVersionNumberHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kLyingHeaderHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kNeverEndingNumberHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kVectorLieHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kSectionOrderingHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kGhostPayloadHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kJunkAfterSectionHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kInvalidSectionIdHex).has_value()); - BEAST_EXPECT(!runFinishFunction(kLocalVariableBombHex).has_value()); - } - - void - testStartFunctionLoop() - { - testcase("infinite loop in start function"); - - using namespace test::jtx; - Env env(*this); - - auto const startLoopWasm = hexToBytes(kStartLoopHex); - TestLedgerDataProvider hfs(env); - ImportVec const imports; - - auto& engine = WasmEngine::instance(); - auto checkRes = engine.check(startLoopWasm, hfs, "finish", {}, imports, env.journal); - BEAST_EXPECTS(checkRes == tesSUCCESS, std::to_string(TERtoInt(checkRes))); - - auto re = - engine.run(startLoopWasm, hfs, 1'000'000, escrowFunctionName, {}, imports, env.journal); - BEAST_EXPECTS(re.error() == tecFAILED_PROCESSING, std::to_string(TERtoInt(re.error()))); - } - void testBadAlign() { @@ -826,113 +388,6 @@ struct Wasm_test : public beast::unit_test::Suite env.close(); } - void - testReturnType() - { - using namespace test::jtx; - Env env(*this); - TestHostFunctions hfs(env); - - testcase("Wasm invalid return type"); - - // return int64. - { // (module - // (memory (export "memory") 1) - // (func (export "finish") (result i64) - // i64.const 0x100000000)) - auto const wasmHex = - "0061736d010000000105016000017e030201000503010001" - "071302066d656d6f727902000666696e69736800000a0a01" - "08004280808080100b"; - auto const wasm = hexToBytes(wasmHex); - auto const re = runEscrowWasm(wasm, hfs, 100'000, escrowFunctionName, {}); - BEAST_EXPECT(!re); - } - - // return void. wasmi return execution error - { //(module - // (type (;0;) (func)) - // (func (;0;) (type 0) - // return) - // (memory (;0;) 1) - // (export "memory" (memory 0)) - // (export "finish" (func 0))) - auto const wasmHex = - "0061736d01000000010401600000030201000503010001071302066d656d6f" - "727902000666696e69736800000a050103000f0b"; - auto const wasm = hexToBytes(wasmHex); - auto const re = runEscrowWasm(wasm, hfs, 100'000, escrowFunctionName, {}); - BEAST_EXPECT(!re); - } - - // return i32, i32. wasmi doesn't create module - { //(module - // (memory (export "memory") 1) - // (func (export "finish") (result i32 i32) - // i32.const 0x10000000 - // i32.const 0x100000FF)) - auto const wasmHex = - "0061736d010000000106016000027f7f030201000503010001071302066d65" - "6d6f727902000666696e69736800000a10010e0041808080800141ff818080" - "010b"; - auto const wasm = hexToBytes(wasmHex); - auto const re = runEscrowWasm(wasm, hfs, 100'000, escrowFunctionName, {}); - BEAST_EXPECT(!re); - } - } - - void - testParameterType() - { - using namespace test::jtx; - Env env(*this); - TestHostFunctions hfs(env); - - testcase("Wasm invalid params"); - - // (module - // (memory (export "memory") 1) - // (func $test1 (export "test1") (param i32) (result i32) - // i32.const 1000) - // (func $test2 (export "test2") (param i32 i32) (result i32) - // i32.const 1001)) - auto const wasmHex = - "0061736d01000000010c0260017f017f60027f7f017f03030200010503010001071a03066d656d6f727902" - "00057465737431000005746573743200010a0d02050041e8070b050041e9070b"; - auto const wasm = hexToBytes(wasmHex); - - // good params, module is working properly - { - auto const re = runEscrowWasm(wasm, hfs, 100'000, "test2", wasmParams(2, 10)); - BEAST_EXPECT(re && re->result == 1001 && re->cost == 37); - } - - // no params - { - auto const re = runEscrowWasm(wasm, hfs, 100'000, "test1", {}); - BEAST_EXPECT(!re); - } - - // more params - { - auto const re = runEscrowWasm(wasm, hfs, 100'000, "test1", wasmParams(0, 1)); - BEAST_EXPECT(!re); - } - - // less params - { - auto const re = runEscrowWasm(wasm, hfs, 100'000, "test2", wasmParams(1)); - BEAST_EXPECT(!re); - } - - // invalid type - { - auto const re = - runEscrowWasm(wasm, hfs, 100'000, "test1", wasmParams(std::int64_t(15))); - BEAST_EXPECT(!re); - } - } - void testSwapBytes() { @@ -987,562 +442,6 @@ struct Wasm_test : public beast::unit_test::Suite BEAST_EXPECT(b6 == swapDataI16); } - void - testManyParams() - { - testcase("Wasm Many params"); - - auto const params1k = hexToBytes(kThousandParamsHex); - auto const params1k1 = hexToBytes(kThousand1ParamsHex); - - using namespace test::jtx; - - Env env{*this}; - TestHostFunctions hfs(env); - auto imports = createWasmImport(hfs); - - // add 1k parameter (max that wasmi support) - std::vector params; - params.reserve(1000); - for (int i = 0; i < 1000; ++i) - params.push_back({.type = WasmTypes::WtI32, .of = {.i32 = 2 * i}}); - - auto& engine = WasmEngine::instance(); - { - auto re = engine.run(params1k, hfs, 1'000'000, "test", params, imports, env.journal); - BEAST_EXPECT(re && re->result == 999000); - } - - // add 1 more parameter, module can't be created now - params.push_back({.type = WasmTypes::WtI32, .of = {.i32 = 2 * 1000}}); - { - auto re = engine.run(params1k1, hfs, 1'000'000, "test", params, imports, env.journal); - BEAST_EXPECT(!re); - } - - // function that create 10k local variables - auto const locals10k = hexToBytes(kLocals10kHex); - { - auto re = engine.run( - locals10k, hfs, 1'000'000, "test", wasmParams(0, 1), imports, env.journal); - BEAST_EXPECT(re && re->result == 890'489'442); - } - - // module has 5k functions - auto const functions5k = hexToBytes(kFunctions5kHex); - { - auto re = engine.run( - functions5k, hfs, 1'000'000, "test0001", wasmParams(2, 3), imports, env.journal); - BEAST_EXPECT(re && re->result == 5); - } - - env.close(); - } - - void - testOpcodes() - { - using namespace test::jtx; - - unsigned const reserved = 64; - std::uint8_t const nop = 0x01; - std::array const codeMarker = { - nop, nop, nop, nop, nop, nop, nop, nop, nop, nop, nop, nop, nop, nop, nop, nop}; - auto const opcReserved = hexToBytes(kOpcReservedHex); - - Env env{*this}; - auto& engine = WasmEngine::instance(); - - TestHostFunctions hfs(env); - auto imports = createWasmImport(hfs); - env.close(); - - { - auto run = [&](std::vector const& code, - bool good = false, - int64_t cost = -1, - std::source_location const location = std::source_location::current()) { - auto const lineStr = " (" + std::to_string(location.line()) + ")"; - auto re = - engine.run(code, hfs, 1'000'000, "all_instructions", {}, imports, env.journal); - if (BEAST_EXPECTS(re.has_value() == good, transToken(re.error()) + lineStr) && good) - BEAST_EXPECTS(re->cost == cost, std::to_string(re->cost) + lineStr); - }; - - // 1 byte instruction - auto test = [&](std::uint8_t start, - std::uint8_t finish, - bool good = false, - int64_t cost = -1, - std::source_location const location = std::source_location::current()) { - auto const lineStr = " (" + std::to_string(location.line()) + ")"; - auto code = opcReserved; - auto codeRange = std::ranges::search(code, codeMarker); - if (!BEAST_EXPECTS(!codeRange.empty(), lineStr)) - return; - - auto it = codeRange.begin(); - for (std::uint16_t i = start; i <= finish; ++i) - { - *it = i; - run(code, good, cost, location); - } - }; - - // 2 bytes instruction - auto test2 = [&](std::uint8_t major, - std::uint16_t start, - std::uint16_t finish, - bool good = false, - int64_t cost = -1, - std::source_location const location = - std::source_location::current()) { - auto const lineStr = " (" + std::to_string(location.line()) + ")"; - auto code = opcReserved; - auto codeRange = std::ranges::search(code, codeMarker); - if (!BEAST_EXPECTS(!codeRange.empty(), lineStr)) - return; - - auto it = codeRange.begin(); - *it++ = major; - for (std::uint16_t i = start; i <= finish; ++i) - { - auto it2 = it; - uleb128(it2, i); - run(code, good, cost, location); - } - }; - - // multibytes instructions - auto testMB = [&](std::vector const& codeSnap, - bool good = false, - int64_t cost = -1, - std::source_location const location = - std::source_location::current()) { - auto const lineStr = " (" + std::to_string(location.line()) + ")"; - auto code = opcReserved; - auto codeRange = std::ranges::search(code, codeMarker); - if (!BEAST_EXPECTS(!codeRange.empty(), lineStr)) - return; - - if (!BEAST_EXPECTS(codeSnap.size() < reserved, lineStr)) - return; - auto it = codeRange.begin(); - for (auto x : codeSnap) - *it++ = x; - run(code, good, cost, location); - }; - - // normal run - testcase("Wasm reserved opcodes main"); - test(nop, nop, true, 534); - - // reserved main - test(0x06, 0x0A); - test(0x12, 0x19); - test(0x25, 0x27); - test(0xC0, 0xFA); - test(0xFF, 0xFF); - - // reserved gc, string - testcase("Wasm reserved opcodes gc"); - test2(0xFB, 0x00, 0xBF); // not supported by compiler - - // reserved FC - testcase("Wasm reserved opcodes FC"); - test2(0xFC, 0x00, 0x07); // floats, disabled - test2(0xFC, 0x12, 0x1F); - - // reserved SIMD - testcase("Wasm reserved opcodes SIMD"); - test2(0xFD, 0x9A, 0x9A); - test2(0xFD, 0xA2, 0xA2); - test2(0xFD, 0xA5, 0xA6); - test2(0xFD, 0xAF, 0xB0); - test2(0xFD, 0xB2, 0xB4); - test2(0xFD, 0xB8, 0xB8); - test2(0xFD, 0xC2, 0xC2); - test2(0xFD, 0xC5, 0xC6); - test2(0xFD, 0xCF, 0xD0); - test2(0xFD, 0xD2, 0xD4); - test2(0xFD, 0xE2, 0xE2); - test2(0xFD, 0xEE, 0xEE); - test2(0xFD, 0x115, 0x12F); - - testcase("Wasm opcodes THREADS"); - test2(0xFE, 0x00, 0x4F); // not supported by compiler - - // FC mem instructions - testMB({0x41, 0x00, 0x41, 0x00, 0x41, 0x04, 0xFC, 0x08, 0x00, 0x00}); // memory.init - testMB({0xFC, 0x09, 0x00}); // data.drop - testMB({0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0xFC, 0x0A, 0x00, 0x00}); // memory.copy - testMB({0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0xFC, 0x0B, 0x00}); // memory.fill - testMB({0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0xFC, 0x0C, 0x00, 0x00}); // table.init - testMB({0xFC, 0x0D, 0x00}); // elem.drop - testMB({0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0xFC, 0x0E, 0x00, 0x00}); // table.copy - testMB({0xD2, 0x00, 0x41, 0x00, 0xFC, 0x0F, 0x00, 0x1A}); // table.grow - testMB({0x1A, 0xFC, 0x10, 0x00, 0x1A}); // table.size - testMB({0x41, 0x00, 0xD2, 0x00, 0x41, 0x00, 0xFC, 0x11, 0x00}); // table.fill - - testcase("Wasm opcodes SIMD"); - // clang-format off - - // generated by auggie - // SIMD instructions - testMB({0x41, 0x00, 0xFD, 0x00, 0x04, 0x00, 0x1A}); // v128.load - testMB({0x41, 0x00, 0xFD, 0x01, 0x03, 0x00, 0x1A}); // v128.load8x8_s - testMB({0x41, 0x00, 0xFD, 0x02, 0x03, 0x00, 0x1A}); // v128.load8x8_u - testMB({0x41, 0x00, 0xFD, 0x03, 0x03, 0x00, 0x1A}); // v128.load16x4_s - testMB({0x41, 0x00, 0xFD, 0x04, 0x03, 0x00, 0x1A}); // v128.load16x4_u - testMB({0x41, 0x00, 0xFD, 0x05, 0x03, 0x00, 0x1A}); // v128.load32x2_s - testMB({0x41, 0x00, 0xFD, 0x06, 0x03, 0x00, 0x1A}); // v128.load32x2_u - testMB({0x41, 0x00, 0xFD, 0x07, 0x00, 0x00, 0x1A}); // v128.load8_splat - testMB({0x41, 0x00, 0xFD, 0x08, 0x01, 0x00, 0x1A}); // v128.load16_splat - testMB({0x41, 0x00, 0xFD, 0x09, 0x02, 0x00, 0x1A}); // v128.load32_splat - testMB({0x41, 0x00, 0xFD, 0x0A, 0x03, 0x00, 0x1A}); // v128.load64_splat - testMB({0x41, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0B, 0x04, 0x00}); // v128.store - testMB({0xFD, 0x0C, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1A}); // v128.const - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0D, 0x00, 0x01, 0x02, 0x03, - 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x1A}); // i8x16.shuffle - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0E, 0x1A}); // i8x16.swizzle - testMB({0x41, 0x2A, 0xFD, 0x0F, 0x1A}); // i8x16.splat - testMB({0x41, 0x2A, 0xFD, 0x10, 0x1A}); // i16x8.splat - testMB({0x41, 0x2A, 0xFD, 0x11, 0x1A}); // i32x4.splat - testMB({0x42, 0x2A, 0xFD, 0x12, 0x1A}); // i64x2.splat - - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x15, 0x00, 0x1A}); // i8x16.extract_lane_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x16, 0x00, 0x1A}); // i8x16.extract_lane_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x2A, 0xFD, 0x17, 0x00, 0x1A}); // i8x16.replace_lane - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x18, 0x00, 0x1A}); // i16x8.extract_lane_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x19, 0x00, 0x1A}); // i16x8.extract_lane_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x2A, 0xFD, 0x1A, 0x00, 0x1A}); // i16x8.replace_lane - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1B, 0x00, 0x1A}); // i32x4.extract_lane - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x2A, 0xFD, 0x1C, 0x00, 0x1A}); // i32x4.replace_lane - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1D, 0x00, 0x1A}); // i64x2.extract_lane - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x2A, 0xFD, 0x1E, 0x00, 0x1A}); // i64x2.replace_lane - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x1F, 0x00, 0x1A}); // f32x4.extract_lane - testMB( - {0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x80, 0x3F, 0xFD, 0x20, 0x00, 0x1A}); // f32x4.replace_lane - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x21, 0x00, 0x1A}); // f64x2.extract_lane - testMB( - {0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x3F, 0xFD, 0x22, 0x00, 0x1A}); // f64x2.replace_lane - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x23, 0x1A}); // i8x16.eq - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x24, 0x1A}); // i8x16.ne - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x25, 0x1A}); // i8x16.lt_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x26, 0x1A}); // i8x16.lt_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x27, 0x1A}); // i8x16.gt_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x28, 0x1A}); // i8x16.gt_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x29, 0x1A}); // i8x16.le_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x2A, 0x1A}); // i8x16.le_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x2B, 0x1A}); // i8x16.ge_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x2C, 0x1A}); // i8x16.ge_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x2D, 0x1A}); // i16x8.eq - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x2E, 0x1A}); // i16x8.ne - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x2F, 0x1A}); // i16x8.lt_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x30, 0x1A}); // i16x8.lt_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x31, 0x1A}); // i16x8.gt_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x32, 0x1A}); // i16x8.gt_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x33, 0x1A}); // i16x8.le_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x34, 0x1A}); // i16x8.le_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x35, 0x1A}); // i16x8.ge_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x36, 0x1A}); // i16x8.ge_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x37, 0x1A}); // i32x4.eq - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x38, 0x1A}); // i32x4.ne - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x39, 0x1A}); // i32x4.lt_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x3A, 0x1A}); // i32x4.lt_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x3B, 0x1A}); // i32x4.gt_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x3C, 0x1A}); // i32x4.gt_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x3D, 0x1A}); // i32x4.le_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x3E, 0x1A}); // i32x4.le_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x3F, 0x1A}); // i32x4.ge_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x40, 0x1A}); // i32x4.ge_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x4D, 0x1A}); // v128.not - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x4E, 0x1A}); // v128.and - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x4F, 0x1A}); // v128.andnot - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x50, 0x1A}); // v128.or - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x51, 0x1A}); // v128.xor - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x52, 0x1A}); // v128.bitselect - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x53, 0x1A}); // v128.any_true - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x60, 0x1A}); // i8x16.abs - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x61, 0x1A}); // i8x16.neg - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x62, 0x1A}); // i8x16.popcnt - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x63, 0x1A}); // i8x16.all_true - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x64, 0x1A}); // i8x16.bitmask - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0xFD, 0x6B, 0x1A}); // i8x16.shl - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0xFD, 0x6C, 0x1A}); // i8x16.shr_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0xFD, 0x6D, 0x1A}); // i8x16.shr_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x6E, 0x1A}); // i8x16.add - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x6F, 0x1A}); // i8x16.add_sat_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x70, 0x1A}); // i8x16.add_sat_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x71, 0x1A}); // i8x16.sub - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x72, 0x1A}); // i8x16.sub_sat_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x73, 0x1A}); // i8x16.sub_sat_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x76, 0x1A}); // i8x16.min_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x77, 0x1A}); // i8x16.min_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x78, 0x1A}); // i8x16.max_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x79, 0x1A}); // i8x16.max_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x7B, 0x1A}); // i8x16.avgr_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x80, 0x01, 0x1A}); // i16x8.abs - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x81, 0x01, 0x1A}); // i16x8.neg - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x83, 0x01, 0x1A}); // i16x8.all_true - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x84, 0x01, 0x1A}); // i16x8.bitmask - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0xFD, 0x8B, 0x01, 0x1A}); // i16x8.shl - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0xFD, 0x8C, 0x01, 0x1A}); // i16x8.shr_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0xFD, 0x8D, 0x01, 0x1A}); // i16x8.shr_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x8E, 0x01, 0x1A}); // i16x8.add - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x8F, 0x01, 0x1A}); // i16x8.add_sat_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x90, 0x01, 0x1A}); // i16x8.add_sat_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x91, 0x01, 0x1A}); // i16x8.sub - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x92, 0x01, 0x1A}); // i16x8.sub_sat_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x93, 0x01, 0x1A}); // i16x8.sub_sat_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x95, 0x01, 0x1A}); // i16x8.mul - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x96, 0x01, 0x1A}); // i16x8.min_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x97, 0x01, 0x1A}); // i16x8.min_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x98, 0x01, 0x1A}); // i16x8.max_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x99, 0x01, 0x1A}); // i16x8.max_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x9B, 0x01, 0x1A}); // i16x8.avgr_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xA0, 0x01, 0x1A}); // i32x4.abs - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xA1, 0x01, 0x1A}); // i32x4.neg - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xA3, 0x01, 0x1A}); // i32x4.all_true - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xA4, 0x01, 0x1A}); // i32x4.bitmask - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0xFD, 0xAB, 0x01, 0x1A}); // i32x4.shl - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0xFD, 0xAC, 0x01, 0x1A}); // i32x4.shr_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0xFD, 0xAD, 0x01, 0x1A}); // i32x4.shr_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xAE, 0x01, 0x1A}); // i32x4.add - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xB1, 0x01, 0x1A}); // i32x4.sub - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xB5, 0x01, 0x1A}); // i32x4.mul - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xB6, 0x01, 0x1A}); // i32x4.min_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xB7, 0x01, 0x1A}); // i32x4.min_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xB8, 0x01, 0x1A}); // i32x4.max_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xB9, 0x01, 0x1A}); // i32x4.max_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xBA, 0x01, 0x1A}); // i32x4.dot_i16x8_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xC0, 0x01, 0x1A}); // i64x2.abs - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xC1, 0x01, 0x1A}); // i64x2.neg - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xC3, 0x01, 0x1A}); // i64x2.all_true - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xC4, 0x01, 0x1A}); // i64x2.bitmask - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0xFD, 0xCB, 0x01, 0x1A}); // i64x2.shl - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0xFD, 0xCC, 0x01, 0x1A}); // i64x2.shr_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0xFD, 0xCD, 0x01, 0x1A}); // i64x2.shr_u - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xCE, 0x01, 0x1A}); // i64x2.add - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xD1, 0x01, 0x1A}); // i64x2.sub - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xD5, 0x01, 0x1A}); // i64x2.mul - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xD6, 0x01, 0x1A}); // i64x2.eq - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xD7, 0x01, 0x1A}); // i64x2.ne - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xD8, 0x01, 0x1A}); // i64x2.lt_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xD9, 0x01, 0x1A}); // i64x2.gt_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xDA, 0x01, 0x1A}); // i64x2.le_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xDB, 0x01, 0x1A}); // i64x2.ge_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xF8, 0x01, 0x1A}); // i32x4.trunc_sat_f32x4_s - testMB({0xFD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xF9, 0x01, 0x1A}); // i32x4.trunc_sat_f32x4_u - - // clang-format on - } - } - void run() override { @@ -1552,32 +451,14 @@ struct Wasm_test : public beast::unit_test::Suite testWasmLib(); testBadWasm(); testWasmLedgerSqn(); - testImpExp(); - - testWasmFib(); testHFCost(); testEscrowWasmDN(); - testFloat(); testCodecovWasm(); - testDisabledFloat(); - testWasmMemory(); - testWasmTable(); - testWasmProposal(); - testWasmTrap(); - testWasmWasi(); - testWasmSectionCorruption(); - - testStartFunctionLoop(); testBadAlign(); - testReturnType(); testSwapBytes(); - testManyParams(); - testParameterType(); - - testOpcodes(); } }; diff --git a/src/test/app/wasm_fixtures/disableFloat.wat b/src/test/app/wasm_fixtures/disableFloat.wat deleted file mode 100644 index 035a849e30..0000000000 --- a/src/test/app/wasm_fixtures/disableFloat.wat +++ /dev/null @@ -1,34 +0,0 @@ -(module - (type (;0;) (func)) - (type (;1;) (func (result i32))) - (func (;0;) (type 0)) - (func (;1;) (type 1) (result i32) - f32.const -2048 - f32.const 2050 - f32.sub - drop - i32.const 1) - (memory (;0;) 2) - (global (;0;) i32 (i32.const 1024)) - (global (;1;) i32 (i32.const 1024)) - (global (;2;) i32 (i32.const 2048)) - (global (;3;) i32 (i32.const 2048)) - (global (;4;) i32 (i32.const 67584)) - (global (;5;) i32 (i32.const 1024)) - (global (;6;) i32 (i32.const 67584)) - (global (;7;) i32 (i32.const 131072)) - (global (;8;) i32 (i32.const 0)) - (global (;9;) i32 (i32.const 1)) - (export "memory" (memory 0)) - (export "__wasm_call_ctors" (func 0)) - (export "finish" (func 1)) - (export "buf" (global 0)) - (export "__dso_handle" (global 1)) - (export "__data_end" (global 2)) - (export "__stack_low" (global 3)) - (export "__stack_high" (global 4)) - (export "__global_base" (global 5)) - (export "__heap_base" (global 6)) - (export "__heap_end" (global 7)) - (export "__memory_base" (global 8)) - (export "__table_base" (global 9))) diff --git a/src/test/app/wasm_fixtures/fib.c b/src/test/app/wasm_fixtures/fib.c deleted file mode 100644 index e45cc4fe6c..0000000000 --- a/src/test/app/wasm_fixtures/fib.c +++ /dev/null @@ -1,11 +0,0 @@ -// typedef long long mint; -typedef int mint; - -mint fib(mint n) -{ - if (!n) - return 0; - if (n <= 2) - return 1; - return fib(n - 1) + fib(n - 2); -} diff --git a/src/test/app/wasm_fixtures/fixture_functions_5k.cpp b/src/test/app/wasm_fixtures/fixture_functions_5k.cpp deleted file mode 100644 index d65f602eec..0000000000 --- a/src/test/app/wasm_fixtures/fixture_functions_5k.cpp +++ /dev/null @@ -1,2240 +0,0 @@ -// TODO: consider moving these to separate files (and figure out the build) - -#include - -#include - -extern std::string const kFunctions5kHex = - "0061736d0100000001070160027f7f017f038a27882700000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000000000000000000000000000007e2d303882708" - "7465737430303030000008746573743030303100010874657374303030320002087465737430303033000308746573" - "7430303034000408746573743030303500050874657374303030360006087465737430303037000708746573743030" - "303800080874657374303030390009087465737430303130000a087465737430303131000b08746573743030313200" - "0c087465737430303133000d087465737430303134000e087465737430303135000f08746573743030313600100874" - "6573743030313700110874657374303031380012087465737430303139001308746573743030323000140874657374" - "3030323100150874657374303032320016087465737430303233001708746573743030323400180874657374303032" - "350019087465737430303236001a087465737430303237001b087465737430303238001c087465737430303239001d" - "087465737430303330001e087465737430303331001f08746573743030333200200874657374303033330021087465" - "7374303033340022087465737430303335002308746573743030333600240874657374303033370025087465737430" - "3033380026087465737430303339002708746573743030343000280874657374303034310029087465737430303432" - "002a087465737430303433002b087465737430303434002c087465737430303435002d087465737430303436002e08" - "7465737430303437002f08746573743030343800300874657374303034390031087465737430303530003208746573" - "7430303531003308746573743030353200340874657374303035330035087465737430303534003608746573743030" - "3535003708746573743030353600380874657374303035370039087465737430303538003a08746573743030353900" - "3b087465737430303630003c087465737430303631003d087465737430303632003e087465737430303633003f0874" - "6573743030363400400874657374303036350041087465737430303636004208746573743030363700430874657374" - "3030363800440874657374303036390045087465737430303730004608746573743030373100470874657374303037" - "3200480874657374303037330049087465737430303734004a087465737430303735004b087465737430303736004c" - "087465737430303737004d087465737430303738004e087465737430303739004f0874657374303038300050087465" - "7374303038310051087465737430303832005208746573743030383300530874657374303038340054087465737430" - "3038350055087465737430303836005608746573743030383700570874657374303038380058087465737430303839" - "0059087465737430303930005a087465737430303931005b087465737430303932005c087465737430303933005d08" - "7465737430303934005e087465737430303935005f0874657374303039360060087465737430303937006108746573" - "7430303938006208746573743030393900630874657374303130300064087465737430313031006508746573743031" - "3032006608746573743031303300670874657374303130340068087465737430313035006908746573743031303600" - "6a087465737430313037006b087465737430313038006c087465737430313039006d087465737430313130006e0874" - "65737430313131006f0874657374303131320070087465737430313133007108746573743031313400720874657374" - "3031313500730874657374303131360074087465737430313137007508746573743031313800760874657374303131" - "39007708746573743031323000780874657374303132310079087465737430313232007a087465737430313233007b" - "087465737430313234007c087465737430313235007d087465737430313236007e087465737430313237007f087465" - "7374303132380080010874657374303132390081010874657374303133300082010874657374303133310083010874" - "6573743031333200840108746573743031333300850108746573743031333400860108746573743031333500870108" - "7465737430313336008801087465737430313337008901087465737430313338008a01087465737430313339008b01" - "087465737430313430008c01087465737430313431008d01087465737430313432008e01087465737430313433008f" - "0108746573743031343400900108746573743031343500910108746573743031343600920108746573743031343700" - "9301087465737430313438009401087465737430313439009501087465737430313530009601087465737430313531" - "009701087465737430313532009801087465737430313533009901087465737430313534009a010874657374303135" - "35009b01087465737430313536009c01087465737430313537009d01087465737430313538009e0108746573743031" - "3539009f0108746573743031363000a00108746573743031363100a10108746573743031363200a201087465737430" - "31363300a30108746573743031363400a40108746573743031363500a50108746573743031363600a6010874657374" - "3031363700a70108746573743031363800a80108746573743031363900a90108746573743031373000aa0108746573" - "743031373100ab0108746573743031373200ac0108746573743031373300ad0108746573743031373400ae01087465" - "73743031373500af0108746573743031373600b00108746573743031373700b10108746573743031373800b2010874" - "6573743031373900b30108746573743031383000b40108746573743031383100b50108746573743031383200b60108" - "746573743031383300b70108746573743031383400b80108746573743031383500b90108746573743031383600ba01" - "08746573743031383700bb0108746573743031383800bc0108746573743031383900bd0108746573743031393000be" - "0108746573743031393100bf0108746573743031393200c00108746573743031393300c10108746573743031393400" - "c20108746573743031393500c30108746573743031393600c40108746573743031393700c501087465737430313938" - "00c60108746573743031393900c70108746573743032303000c80108746573743032303100c9010874657374303230" - "3200ca0108746573743032303300cb0108746573743032303400cc0108746573743032303500cd0108746573743032" - "303600ce0108746573743032303700cf0108746573743032303800d00108746573743032303900d101087465737430" - "32313000d20108746573743032313100d30108746573743032313200d40108746573743032313300d5010874657374" - "3032313400d60108746573743032313500d70108746573743032313600d80108746573743032313700d90108746573" - "743032313800da0108746573743032313900db0108746573743032323000dc0108746573743032323100dd01087465" - "73743032323200de0108746573743032323300df0108746573743032323400e00108746573743032323500e1010874" - "6573743032323600e20108746573743032323700e30108746573743032323800e40108746573743032323900e50108" - "746573743032333000e60108746573743032333100e70108746573743032333200e80108746573743032333300e901" - "08746573743032333400ea0108746573743032333500eb0108746573743032333600ec0108746573743032333700ed" - "0108746573743032333800ee0108746573743032333900ef0108746573743032343000f00108746573743032343100" - "f10108746573743032343200f20108746573743032343300f30108746573743032343400f401087465737430323435" - "00f50108746573743032343600f60108746573743032343700f70108746573743032343800f8010874657374303234" - "3900f90108746573743032353000fa0108746573743032353100fb0108746573743032353200fc0108746573743032" - "353300fd0108746573743032353400fe0108746573743032353500ff01087465737430323536008002087465737430" - "3235370081020874657374303235380082020874657374303235390083020874657374303236300084020874657374" - "3032363100850208746573743032363200860208746573743032363300870208746573743032363400880208746573" - "7430323635008902087465737430323636008a02087465737430323637008b02087465737430323638008c02087465" - "737430323639008d02087465737430323730008e02087465737430323731008f020874657374303237320090020874" - "6573743032373300910208746573743032373400920208746573743032373500930208746573743032373600940208" - "7465737430323737009502087465737430323738009602087465737430323739009702087465737430323830009802" - "087465737430323831009902087465737430323832009a02087465737430323833009b02087465737430323834009c" - "02087465737430323835009d02087465737430323836009e02087465737430323837009f0208746573743032383800" - "a00208746573743032383900a10208746573743032393000a20208746573743032393100a302087465737430323932" - "00a40208746573743032393300a50208746573743032393400a60208746573743032393500a7020874657374303239" - "3600a80208746573743032393700a90208746573743032393800aa0208746573743032393900ab0208746573743033" - "303000ac0208746573743033303100ad0208746573743033303200ae0208746573743033303300af02087465737430" - "33303400b00208746573743033303500b10208746573743033303600b20208746573743033303700b3020874657374" - "3033303800b40208746573743033303900b50208746573743033313000b60208746573743033313100b70208746573" - "743033313200b80208746573743033313300b90208746573743033313400ba0208746573743033313500bb02087465" - "73743033313600bc0208746573743033313700bd0208746573743033313800be0208746573743033313900bf020874" - "6573743033323000c00208746573743033323100c10208746573743033323200c20208746573743033323300c30208" - "746573743033323400c40208746573743033323500c50208746573743033323600c60208746573743033323700c702" - "08746573743033323800c80208746573743033323900c90208746573743033333000ca0208746573743033333100cb" - "0208746573743033333200cc0208746573743033333300cd0208746573743033333400ce0208746573743033333500" - "cf0208746573743033333600d00208746573743033333700d10208746573743033333800d202087465737430333339" - "00d30208746573743033343000d40208746573743033343100d50208746573743033343200d6020874657374303334" - "3300d70208746573743033343400d80208746573743033343500d90208746573743033343600da0208746573743033" - "343700db0208746573743033343800dc0208746573743033343900dd0208746573743033353000de02087465737430" - "33353100df0208746573743033353200e00208746573743033353300e10208746573743033353400e2020874657374" - "3033353500e30208746573743033353600e40208746573743033353700e50208746573743033353800e60208746573" - "743033353900e70208746573743033363000e80208746573743033363100e90208746573743033363200ea02087465" - "73743033363300eb0208746573743033363400ec0208746573743033363500ed0208746573743033363600ee020874" - "6573743033363700ef0208746573743033363800f00208746573743033363900f10208746573743033373000f20208" - "746573743033373100f30208746573743033373200f40208746573743033373300f50208746573743033373400f602" - "08746573743033373500f70208746573743033373600f80208746573743033373700f90208746573743033373800fa" - "0208746573743033373900fb0208746573743033383000fc0208746573743033383100fd0208746573743033383200" - "fe0208746573743033383300ff02087465737430333834008003087465737430333835008103087465737430333836" - "0082030874657374303338370083030874657374303338380084030874657374303338390085030874657374303339" - "3000860308746573743033393100870308746573743033393200880308746573743033393300890308746573743033" - "3934008a03087465737430333935008b03087465737430333936008c03087465737430333937008d03087465737430" - "333938008e03087465737430333939008f030874657374303430300090030874657374303430310091030874657374" - "3034303200920308746573743034303300930308746573743034303400940308746573743034303500950308746573" - "7430343036009603087465737430343037009703087465737430343038009803087465737430343039009903087465" - "737430343130009a03087465737430343131009b03087465737430343132009c03087465737430343133009d030874" - "65737430343134009e03087465737430343135009f0308746573743034313600a00308746573743034313700a10308" - "746573743034313800a20308746573743034313900a30308746573743034323000a40308746573743034323100a503" - "08746573743034323200a60308746573743034323300a70308746573743034323400a80308746573743034323500a9" - "0308746573743034323600aa0308746573743034323700ab0308746573743034323800ac0308746573743034323900" - "ad0308746573743034333000ae0308746573743034333100af0308746573743034333200b003087465737430343333" - "00b10308746573743034333400b20308746573743034333500b30308746573743034333600b4030874657374303433" - "3700b50308746573743034333800b60308746573743034333900b70308746573743034343000b80308746573743034" - "343100b90308746573743034343200ba0308746573743034343300bb0308746573743034343400bc03087465737430" - "34343500bd0308746573743034343600be0308746573743034343700bf0308746573743034343800c0030874657374" - "3034343900c10308746573743034353000c20308746573743034353100c30308746573743034353200c40308746573" - "743034353300c50308746573743034353400c60308746573743034353500c70308746573743034353600c803087465" - "73743034353700c90308746573743034353800ca0308746573743034353900cb0308746573743034363000cc030874" - "6573743034363100cd0308746573743034363200ce0308746573743034363300cf0308746573743034363400d00308" - "746573743034363500d10308746573743034363600d20308746573743034363700d30308746573743034363800d403" - "08746573743034363900d50308746573743034373000d60308746573743034373100d70308746573743034373200d8" - "0308746573743034373300d90308746573743034373400da0308746573743034373500db0308746573743034373600" - "dc0308746573743034373700dd0308746573743034373800de0308746573743034373900df03087465737430343830" - "00e00308746573743034383100e10308746573743034383200e20308746573743034383300e3030874657374303438" - "3400e40308746573743034383500e50308746573743034383600e60308746573743034383700e70308746573743034" - "383800e80308746573743034383900e90308746573743034393000ea0308746573743034393100eb03087465737430" - "34393200ec0308746573743034393300ed0308746573743034393400ee0308746573743034393500ef030874657374" - "3034393600f00308746573743034393700f10308746573743034393800f20308746573743034393900f30308746573" - "743035303000f40308746573743035303100f50308746573743035303200f60308746573743035303300f703087465" - "73743035303400f80308746573743035303500f90308746573743035303600fa0308746573743035303700fb030874" - "6573743035303800fc0308746573743035303900fd0308746573743035313000fe0308746573743035313100ff0308" - "7465737430353132008004087465737430353133008104087465737430353134008204087465737430353135008304" - "0874657374303531360084040874657374303531370085040874657374303531380086040874657374303531390087" - "04087465737430353230008804087465737430353231008904087465737430353232008a0408746573743035323300" - "8b04087465737430353234008c04087465737430353235008d04087465737430353236008e04087465737430353237" - "008f040874657374303532380090040874657374303532390091040874657374303533300092040874657374303533" - "3100930408746573743035333200940408746573743035333300950408746573743035333400960408746573743035" - "3335009704087465737430353336009804087465737430353337009904087465737430353338009a04087465737430" - "353339009b04087465737430353430009c04087465737430353431009d04087465737430353432009e040874657374" - "30353433009f0408746573743035343400a00408746573743035343500a10408746573743035343600a20408746573" - "743035343700a30408746573743035343800a40408746573743035343900a50408746573743035353000a604087465" - "73743035353100a70408746573743035353200a80408746573743035353300a90408746573743035353400aa040874" - "6573743035353500ab0408746573743035353600ac0408746573743035353700ad0408746573743035353800ae0408" - "746573743035353900af0408746573743035363000b00408746573743035363100b10408746573743035363200b204" - "08746573743035363300b30408746573743035363400b40408746573743035363500b50408746573743035363600b6" - "0408746573743035363700b70408746573743035363800b80408746573743035363900b90408746573743035373000" - "ba0408746573743035373100bb0408746573743035373200bc0408746573743035373300bd04087465737430353734" - "00be0408746573743035373500bf0408746573743035373600c00408746573743035373700c1040874657374303537" - "3800c20408746573743035373900c30408746573743035383000c40408746573743035383100c50408746573743035" - "383200c60408746573743035383300c70408746573743035383400c80408746573743035383500c904087465737430" - "35383600ca0408746573743035383700cb0408746573743035383800cc0408746573743035383900cd040874657374" - "3035393000ce0408746573743035393100cf0408746573743035393200d00408746573743035393300d10408746573" - "743035393400d20408746573743035393500d30408746573743035393600d40408746573743035393700d504087465" - "73743035393800d60408746573743035393900d70408746573743036303000d80408746573743036303100d9040874" - "6573743036303200da0408746573743036303300db0408746573743036303400dc0408746573743036303500dd0408" - "746573743036303600de0408746573743036303700df0408746573743036303800e00408746573743036303900e104" - "08746573743036313000e20408746573743036313100e30408746573743036313200e40408746573743036313300e5" - "0408746573743036313400e60408746573743036313500e70408746573743036313600e80408746573743036313700" - "e90408746573743036313800ea0408746573743036313900eb0408746573743036323000ec04087465737430363231" - "00ed0408746573743036323200ee0408746573743036323300ef0408746573743036323400f0040874657374303632" - "3500f10408746573743036323600f20408746573743036323700f30408746573743036323800f40408746573743036" - "323900f50408746573743036333000f60408746573743036333100f70408746573743036333200f804087465737430" - "36333300f90408746573743036333400fa0408746573743036333500fb0408746573743036333600fc040874657374" - "3036333700fd0408746573743036333800fe0408746573743036333900ff0408746573743036343000800508746573" - "7430363431008105087465737430363432008205087465737430363433008305087465737430363434008405087465" - "7374303634350085050874657374303634360086050874657374303634370087050874657374303634380088050874" - "65737430363439008905087465737430363530008a05087465737430363531008b05087465737430363532008c0508" - "7465737430363533008d05087465737430363534008e05087465737430363535008f05087465737430363536009005" - "0874657374303635370091050874657374303635380092050874657374303635390093050874657374303636300094" - "0508746573743036363100950508746573743036363200960508746573743036363300970508746573743036363400" - "9805087465737430363635009905087465737430363636009a05087465737430363637009b05087465737430363638" - "009c05087465737430363639009d05087465737430363730009e05087465737430363731009f050874657374303637" - "3200a00508746573743036373300a10508746573743036373400a20508746573743036373500a30508746573743036" - "373600a40508746573743036373700a50508746573743036373800a60508746573743036373900a705087465737430" - "36383000a80508746573743036383100a90508746573743036383200aa0508746573743036383300ab050874657374" - "3036383400ac0508746573743036383500ad0508746573743036383600ae0508746573743036383700af0508746573" - "743036383800b00508746573743036383900b10508746573743036393000b20508746573743036393100b305087465" - "73743036393200b40508746573743036393300b50508746573743036393400b60508746573743036393500b7050874" - "6573743036393600b80508746573743036393700b90508746573743036393800ba0508746573743036393900bb0508" - "746573743037303000bc0508746573743037303100bd0508746573743037303200be0508746573743037303300bf05" - "08746573743037303400c00508746573743037303500c10508746573743037303600c20508746573743037303700c3" - "0508746573743037303800c40508746573743037303900c50508746573743037313000c60508746573743037313100" - "c70508746573743037313200c80508746573743037313300c90508746573743037313400ca05087465737430373135" - "00cb0508746573743037313600cc0508746573743037313700cd0508746573743037313800ce050874657374303731" - "3900cf0508746573743037323000d00508746573743037323100d10508746573743037323200d20508746573743037" - "323300d30508746573743037323400d40508746573743037323500d50508746573743037323600d605087465737430" - "37323700d70508746573743037323800d80508746573743037323900d90508746573743037333000da050874657374" - "3037333100db0508746573743037333200dc0508746573743037333300dd0508746573743037333400de0508746573" - "743037333500df0508746573743037333600e00508746573743037333700e10508746573743037333800e205087465" - "73743037333900e30508746573743037343000e40508746573743037343100e50508746573743037343200e6050874" - "6573743037343300e70508746573743037343400e80508746573743037343500e90508746573743037343600ea0508" - "746573743037343700eb0508746573743037343800ec0508746573743037343900ed0508746573743037353000ee05" - "08746573743037353100ef0508746573743037353200f00508746573743037353300f10508746573743037353400f2" - "0508746573743037353500f30508746573743037353600f40508746573743037353700f50508746573743037353800" - "f60508746573743037353900f70508746573743037363000f80508746573743037363100f905087465737430373632" - "00fa0508746573743037363300fb0508746573743037363400fc0508746573743037363500fd050874657374303736" - "3600fe0508746573743037363700ff0508746573743037363800800608746573743037363900810608746573743037" - "3730008206087465737430373731008306087465737430373732008406087465737430373733008506087465737430" - "3737340086060874657374303737350087060874657374303737360088060874657374303737370089060874657374" - "30373738008a06087465737430373739008b06087465737430373830008c06087465737430373831008d0608746573" - "7430373832008e06087465737430373833008f06087465737430373834009006087465737430373835009106087465" - "7374303738360092060874657374303738370093060874657374303738380094060874657374303738390095060874" - "6573743037393000960608746573743037393100970608746573743037393200980608746573743037393300990608" - "7465737430373934009a06087465737430373935009b06087465737430373936009c06087465737430373937009d06" - "087465737430373938009e06087465737430373939009f0608746573743038303000a00608746573743038303100a1" - "0608746573743038303200a20608746573743038303300a30608746573743038303400a40608746573743038303500" - "a50608746573743038303600a60608746573743038303700a70608746573743038303800a806087465737430383039" - "00a90608746573743038313000aa0608746573743038313100ab0608746573743038313200ac060874657374303831" - "3300ad0608746573743038313400ae0608746573743038313500af0608746573743038313600b00608746573743038" - "313700b10608746573743038313800b20608746573743038313900b30608746573743038323000b406087465737430" - "38323100b50608746573743038323200b60608746573743038323300b70608746573743038323400b8060874657374" - "3038323500b90608746573743038323600ba0608746573743038323700bb0608746573743038323800bc0608746573" - "743038323900bd0608746573743038333000be0608746573743038333100bf0608746573743038333200c006087465" - "73743038333300c10608746573743038333400c20608746573743038333500c30608746573743038333600c4060874" - "6573743038333700c50608746573743038333800c60608746573743038333900c70608746573743038343000c80608" - "746573743038343100c90608746573743038343200ca0608746573743038343300cb0608746573743038343400cc06" - "08746573743038343500cd0608746573743038343600ce0608746573743038343700cf0608746573743038343800d0" - "0608746573743038343900d10608746573743038353000d20608746573743038353100d30608746573743038353200" - "d40608746573743038353300d50608746573743038353400d60608746573743038353500d706087465737430383536" - "00d80608746573743038353700d90608746573743038353800da0608746573743038353900db060874657374303836" - "3000dc0608746573743038363100dd0608746573743038363200de0608746573743038363300df0608746573743038" - "363400e00608746573743038363500e10608746573743038363600e20608746573743038363700e306087465737430" - "38363800e40608746573743038363900e50608746573743038373000e60608746573743038373100e7060874657374" - "3038373200e80608746573743038373300e90608746573743038373400ea0608746573743038373500eb0608746573" - "743038373600ec0608746573743038373700ed0608746573743038373800ee0608746573743038373900ef06087465" - "73743038383000f00608746573743038383100f10608746573743038383200f20608746573743038383300f3060874" - "6573743038383400f40608746573743038383500f50608746573743038383600f60608746573743038383700f70608" - "746573743038383800f80608746573743038383900f90608746573743038393000fa0608746573743038393100fb06" - "08746573743038393200fc0608746573743038393300fd0608746573743038393400fe0608746573743038393500ff" - "0608746573743038393600800708746573743038393700810708746573743038393800820708746573743038393900" - "8307087465737430393030008407087465737430393031008507087465737430393032008607087465737430393033" - "008707087465737430393034008807087465737430393035008907087465737430393036008a070874657374303930" - "37008b07087465737430393038008c07087465737430393039008d07087465737430393130008e0708746573743039" - "3131008f07087465737430393132009007087465737430393133009107087465737430393134009207087465737430" - "3931350093070874657374303931360094070874657374303931370095070874657374303931380096070874657374" - "30393139009707087465737430393230009807087465737430393231009907087465737430393232009a0708746573" - "7430393233009b07087465737430393234009c07087465737430393235009d07087465737430393236009e07087465" - "737430393237009f0708746573743039323800a00708746573743039323900a10708746573743039333000a2070874" - "6573743039333100a30708746573743039333200a40708746573743039333300a50708746573743039333400a60708" - "746573743039333500a70708746573743039333600a80708746573743039333700a90708746573743039333800aa07" - "08746573743039333900ab0708746573743039343000ac0708746573743039343100ad0708746573743039343200ae" - "0708746573743039343300af0708746573743039343400b00708746573743039343500b10708746573743039343600" - "b20708746573743039343700b30708746573743039343800b40708746573743039343900b507087465737430393530" - "00b60708746573743039353100b70708746573743039353200b80708746573743039353300b9070874657374303935" - "3400ba0708746573743039353500bb0708746573743039353600bc0708746573743039353700bd0708746573743039" - "353800be0708746573743039353900bf0708746573743039363000c00708746573743039363100c107087465737430" - "39363200c20708746573743039363300c30708746573743039363400c40708746573743039363500c5070874657374" - "3039363600c60708746573743039363700c70708746573743039363800c80708746573743039363900c90708746573" - "743039373000ca0708746573743039373100cb0708746573743039373200cc0708746573743039373300cd07087465" - "73743039373400ce0708746573743039373500cf0708746573743039373600d00708746573743039373700d1070874" - "6573743039373800d20708746573743039373900d30708746573743039383000d40708746573743039383100d50708" - "746573743039383200d60708746573743039383300d70708746573743039383400d80708746573743039383500d907" - "08746573743039383600da0708746573743039383700db0708746573743039383800dc0708746573743039383900dd" - "0708746573743039393000de0708746573743039393100df0708746573743039393200e00708746573743039393300" - "e10708746573743039393400e20708746573743039393500e30708746573743039393600e407087465737430393937" - "00e50708746573743039393800e60708746573743039393900e70708746573743130303000e8070874657374313030" - "3100e90708746573743130303200ea0708746573743130303300eb0708746573743130303400ec0708746573743130" - "303500ed0708746573743130303600ee0708746573743130303700ef0708746573743130303800f007087465737431" - "30303900f10708746573743130313000f20708746573743130313100f30708746573743130313200f4070874657374" - "3130313300f50708746573743130313400f60708746573743130313500f70708746573743130313600f80708746573" - "743130313700f90708746573743130313800fa0708746573743130313900fb0708746573743130323000fc07087465" - "73743130323100fd0708746573743130323200fe0708746573743130323300ff070874657374313032340080080874" - "6573743130323500810808746573743130323600820808746573743130323700830808746573743130323800840808" - "7465737431303239008508087465737431303330008608087465737431303331008708087465737431303332008808" - "087465737431303333008908087465737431303334008a08087465737431303335008b08087465737431303336008c" - "08087465737431303337008d08087465737431303338008e08087465737431303339008f0808746573743130343000" - "9008087465737431303431009108087465737431303432009208087465737431303433009308087465737431303434" - "0094080874657374313034350095080874657374313034360096080874657374313034370097080874657374313034" - "38009808087465737431303439009908087465737431303530009a08087465737431303531009b0808746573743130" - "3532009c08087465737431303533009d08087465737431303534009e08087465737431303535009f08087465737431" - "30353600a00808746573743130353700a10808746573743130353800a20808746573743130353900a3080874657374" - "3130363000a40808746573743130363100a50808746573743130363200a60808746573743130363300a70808746573" - "743130363400a80808746573743130363500a90808746573743130363600aa0808746573743130363700ab08087465" - "73743130363800ac0808746573743130363900ad0808746573743130373000ae0808746573743130373100af080874" - "6573743130373200b00808746573743130373300b10808746573743130373400b20808746573743130373500b30808" - "746573743130373600b40808746573743130373700b50808746573743130373800b60808746573743130373900b708" - "08746573743130383000b80808746573743130383100b90808746573743130383200ba0808746573743130383300bb" - "0808746573743130383400bc0808746573743130383500bd0808746573743130383600be0808746573743130383700" - "bf0808746573743130383800c00808746573743130383900c10808746573743130393000c208087465737431303931" - "00c30808746573743130393200c40808746573743130393300c50808746573743130393400c6080874657374313039" - "3500c70808746573743130393600c80808746573743130393700c90808746573743130393800ca0808746573743130" - "393900cb0808746573743131303000cc0808746573743131303100cd0808746573743131303200ce08087465737431" - "31303300cf0808746573743131303400d00808746573743131303500d10808746573743131303600d2080874657374" - "3131303700d30808746573743131303800d40808746573743131303900d50808746573743131313000d60808746573" - "743131313100d70808746573743131313200d80808746573743131313300d90808746573743131313400da08087465" - "73743131313500db0808746573743131313600dc0808746573743131313700dd0808746573743131313800de080874" - "6573743131313900df0808746573743131323000e00808746573743131323100e10808746573743131323200e20808" - "746573743131323300e30808746573743131323400e40808746573743131323500e50808746573743131323600e608" - "08746573743131323700e70808746573743131323800e80808746573743131323900e90808746573743131333000ea" - "0808746573743131333100eb0808746573743131333200ec0808746573743131333300ed0808746573743131333400" - "ee0808746573743131333500ef0808746573743131333600f00808746573743131333700f108087465737431313338" - "00f20808746573743131333900f30808746573743131343000f40808746573743131343100f5080874657374313134" - "3200f60808746573743131343300f70808746573743131343400f80808746573743131343500f90808746573743131" - "343600fa0808746573743131343700fb0808746573743131343800fc0808746573743131343900fd08087465737431" - "31353000fe0808746573743131353100ff080874657374313135320080090874657374313135330081090874657374" - "3131353400820908746573743131353500830908746573743131353600840908746573743131353700850908746573" - "7431313538008609087465737431313539008709087465737431313630008809087465737431313631008909087465" - "737431313632008a09087465737431313633008b09087465737431313634008c09087465737431313635008d090874" - "65737431313636008e09087465737431313637008f0908746573743131363800900908746573743131363900910908" - "7465737431313730009209087465737431313731009309087465737431313732009409087465737431313733009509" - "0874657374313137340096090874657374313137350097090874657374313137360098090874657374313137370099" - "09087465737431313738009a09087465737431313739009b09087465737431313830009c0908746573743131383100" - "9d09087465737431313832009e09087465737431313833009f0908746573743131383400a009087465737431313835" - "00a10908746573743131383600a20908746573743131383700a30908746573743131383800a4090874657374313138" - "3900a50908746573743131393000a60908746573743131393100a70908746573743131393200a80908746573743131" - "393300a90908746573743131393400aa0908746573743131393500ab0908746573743131393600ac09087465737431" - "31393700ad0908746573743131393800ae0908746573743131393900af0908746573743132303000b0090874657374" - "3132303100b10908746573743132303200b20908746573743132303300b30908746573743132303400b40908746573" - "743132303500b50908746573743132303600b60908746573743132303700b70908746573743132303800b809087465" - "73743132303900b90908746573743132313000ba0908746573743132313100bb0908746573743132313200bc090874" - "6573743132313300bd0908746573743132313400be0908746573743132313500bf0908746573743132313600c00908" - "746573743132313700c10908746573743132313800c20908746573743132313900c30908746573743132323000c409" - "08746573743132323100c50908746573743132323200c60908746573743132323300c70908746573743132323400c8" - "0908746573743132323500c90908746573743132323600ca0908746573743132323700cb0908746573743132323800" - "cc0908746573743132323900cd0908746573743132333000ce0908746573743132333100cf09087465737431323332" - "00d00908746573743132333300d10908746573743132333400d20908746573743132333500d3090874657374313233" - "3600d40908746573743132333700d50908746573743132333800d60908746573743132333900d70908746573743132" - "343000d80908746573743132343100d90908746573743132343200da0908746573743132343300db09087465737431" - "32343400dc0908746573743132343500dd0908746573743132343600de0908746573743132343700df090874657374" - "3132343800e00908746573743132343900e10908746573743132353000e20908746573743132353100e30908746573" - "743132353200e40908746573743132353300e50908746573743132353400e60908746573743132353500e709087465" - "73743132353600e80908746573743132353700e90908746573743132353800ea0908746573743132353900eb090874" - "6573743132363000ec0908746573743132363100ed0908746573743132363200ee0908746573743132363300ef0908" - "746573743132363400f00908746573743132363500f10908746573743132363600f20908746573743132363700f309" - "08746573743132363800f40908746573743132363900f50908746573743132373000f60908746573743132373100f7" - "0908746573743132373200f80908746573743132373300f90908746573743132373400fa0908746573743132373500" - "fb0908746573743132373600fc0908746573743132373700fd0908746573743132373800fe09087465737431323739" - "00ff0908746573743132383000800a08746573743132383100810a08746573743132383200820a0874657374313238" - "3300830a08746573743132383400840a08746573743132383500850a08746573743132383600860a08746573743132" - "383700870a08746573743132383800880a08746573743132383900890a087465737431323930008a0a087465737431" - "323931008b0a087465737431323932008c0a087465737431323933008d0a087465737431323934008e0a0874657374" - "31323935008f0a08746573743132393600900a08746573743132393700910a08746573743132393800920a08746573" - "743132393900930a08746573743133303000940a08746573743133303100950a08746573743133303200960a087465" - "73743133303300970a08746573743133303400980a08746573743133303500990a087465737431333036009a0a0874" - "65737431333037009b0a087465737431333038009c0a087465737431333039009d0a087465737431333130009e0a08" - "7465737431333131009f0a08746573743133313200a00a08746573743133313300a10a08746573743133313400a20a" - "08746573743133313500a30a08746573743133313600a40a08746573743133313700a50a08746573743133313800a6" - "0a08746573743133313900a70a08746573743133323000a80a08746573743133323100a90a08746573743133323200" - "aa0a08746573743133323300ab0a08746573743133323400ac0a08746573743133323500ad0a087465737431333236" - "00ae0a08746573743133323700af0a08746573743133323800b00a08746573743133323900b10a0874657374313333" - "3000b20a08746573743133333100b30a08746573743133333200b40a08746573743133333300b50a08746573743133" - "333400b60a08746573743133333500b70a08746573743133333600b80a08746573743133333700b90a087465737431" - "33333800ba0a08746573743133333900bb0a08746573743133343000bc0a08746573743133343100bd0a0874657374" - "3133343200be0a08746573743133343300bf0a08746573743133343400c00a08746573743133343500c10a08746573" - "743133343600c20a08746573743133343700c30a08746573743133343800c40a08746573743133343900c50a087465" - "73743133353000c60a08746573743133353100c70a08746573743133353200c80a08746573743133353300c90a0874" - "6573743133353400ca0a08746573743133353500cb0a08746573743133353600cc0a08746573743133353700cd0a08" - "746573743133353800ce0a08746573743133353900cf0a08746573743133363000d00a08746573743133363100d10a" - "08746573743133363200d20a08746573743133363300d30a08746573743133363400d40a08746573743133363500d5" - "0a08746573743133363600d60a08746573743133363700d70a08746573743133363800d80a08746573743133363900" - "d90a08746573743133373000da0a08746573743133373100db0a08746573743133373200dc0a087465737431333733" - "00dd0a08746573743133373400de0a08746573743133373500df0a08746573743133373600e00a0874657374313337" - "3700e10a08746573743133373800e20a08746573743133373900e30a08746573743133383000e40a08746573743133" - "383100e50a08746573743133383200e60a08746573743133383300e70a08746573743133383400e80a087465737431" - "33383500e90a08746573743133383600ea0a08746573743133383700eb0a08746573743133383800ec0a0874657374" - "3133383900ed0a08746573743133393000ee0a08746573743133393100ef0a08746573743133393200f00a08746573" - "743133393300f10a08746573743133393400f20a08746573743133393500f30a08746573743133393600f40a087465" - "73743133393700f50a08746573743133393800f60a08746573743133393900f70a08746573743134303000f80a0874" - "6573743134303100f90a08746573743134303200fa0a08746573743134303300fb0a08746573743134303400fc0a08" - "746573743134303500fd0a08746573743134303600fe0a08746573743134303700ff0a08746573743134303800800b" - "08746573743134303900810b08746573743134313000820b08746573743134313100830b0874657374313431320084" - "0b08746573743134313300850b08746573743134313400860b08746573743134313500870b08746573743134313600" - "880b08746573743134313700890b087465737431343138008a0b087465737431343139008b0b087465737431343230" - "008c0b087465737431343231008d0b087465737431343232008e0b087465737431343233008f0b0874657374313432" - "3400900b08746573743134323500910b08746573743134323600920b08746573743134323700930b08746573743134" - "323800940b08746573743134323900950b08746573743134333000960b08746573743134333100970b087465737431" - "34333200980b08746573743134333300990b087465737431343334009a0b087465737431343335009b0b0874657374" - "31343336009c0b087465737431343337009d0b087465737431343338009e0b087465737431343339009f0b08746573" - "743134343000a00b08746573743134343100a10b08746573743134343200a20b08746573743134343300a30b087465" - "73743134343400a40b08746573743134343500a50b08746573743134343600a60b08746573743134343700a70b0874" - "6573743134343800a80b08746573743134343900a90b08746573743134353000aa0b08746573743134353100ab0b08" - "746573743134353200ac0b08746573743134353300ad0b08746573743134353400ae0b08746573743134353500af0b" - "08746573743134353600b00b08746573743134353700b10b08746573743134353800b20b08746573743134353900b3" - "0b08746573743134363000b40b08746573743134363100b50b08746573743134363200b60b08746573743134363300" - "b70b08746573743134363400b80b08746573743134363500b90b08746573743134363600ba0b087465737431343637" - "00bb0b08746573743134363800bc0b08746573743134363900bd0b08746573743134373000be0b0874657374313437" - "3100bf0b08746573743134373200c00b08746573743134373300c10b08746573743134373400c20b08746573743134" - "373500c30b08746573743134373600c40b08746573743134373700c50b08746573743134373800c60b087465737431" - "34373900c70b08746573743134383000c80b08746573743134383100c90b08746573743134383200ca0b0874657374" - "3134383300cb0b08746573743134383400cc0b08746573743134383500cd0b08746573743134383600ce0b08746573" - "743134383700cf0b08746573743134383800d00b08746573743134383900d10b08746573743134393000d20b087465" - "73743134393100d30b08746573743134393200d40b08746573743134393300d50b08746573743134393400d60b0874" - "6573743134393500d70b08746573743134393600d80b08746573743134393700d90b08746573743134393800da0b08" - "746573743134393900db0b08746573743135303000dc0b08746573743135303100dd0b08746573743135303200de0b" - "08746573743135303300df0b08746573743135303400e00b08746573743135303500e10b08746573743135303600e2" - "0b08746573743135303700e30b08746573743135303800e40b08746573743135303900e50b08746573743135313000" - "e60b08746573743135313100e70b08746573743135313200e80b08746573743135313300e90b087465737431353134" - "00ea0b08746573743135313500eb0b08746573743135313600ec0b08746573743135313700ed0b0874657374313531" - "3800ee0b08746573743135313900ef0b08746573743135323000f00b08746573743135323100f10b08746573743135" - "323200f20b08746573743135323300f30b08746573743135323400f40b08746573743135323500f50b087465737431" - "35323600f60b08746573743135323700f70b08746573743135323800f80b08746573743135323900f90b0874657374" - "3135333000fa0b08746573743135333100fb0b08746573743135333200fc0b08746573743135333300fd0b08746573" - "743135333400fe0b08746573743135333500ff0b08746573743135333600800c08746573743135333700810c087465" - "73743135333800820c08746573743135333900830c08746573743135343000840c08746573743135343100850c0874" - "6573743135343200860c08746573743135343300870c08746573743135343400880c08746573743135343500890c08" - "7465737431353436008a0c087465737431353437008b0c087465737431353438008c0c087465737431353439008d0c" - "087465737431353530008e0c087465737431353531008f0c08746573743135353200900c0874657374313535330091" - "0c08746573743135353400920c08746573743135353500930c08746573743135353600940c08746573743135353700" - "950c08746573743135353800960c08746573743135353900970c08746573743135363000980c087465737431353631" - "00990c087465737431353632009a0c087465737431353633009b0c087465737431353634009c0c0874657374313536" - "35009d0c087465737431353636009e0c087465737431353637009f0c08746573743135363800a00c08746573743135" - "363900a10c08746573743135373000a20c08746573743135373100a30c08746573743135373200a40c087465737431" - "35373300a50c08746573743135373400a60c08746573743135373500a70c08746573743135373600a80c0874657374" - "3135373700a90c08746573743135373800aa0c08746573743135373900ab0c08746573743135383000ac0c08746573" - "743135383100ad0c08746573743135383200ae0c08746573743135383300af0c08746573743135383400b00c087465" - "73743135383500b10c08746573743135383600b20c08746573743135383700b30c08746573743135383800b40c0874" - "6573743135383900b50c08746573743135393000b60c08746573743135393100b70c08746573743135393200b80c08" - "746573743135393300b90c08746573743135393400ba0c08746573743135393500bb0c08746573743135393600bc0c" - "08746573743135393700bd0c08746573743135393800be0c08746573743135393900bf0c08746573743136303000c0" - "0c08746573743136303100c10c08746573743136303200c20c08746573743136303300c30c08746573743136303400" - "c40c08746573743136303500c50c08746573743136303600c60c08746573743136303700c70c087465737431363038" - "00c80c08746573743136303900c90c08746573743136313000ca0c08746573743136313100cb0c0874657374313631" - "3200cc0c08746573743136313300cd0c08746573743136313400ce0c08746573743136313500cf0c08746573743136" - "313600d00c08746573743136313700d10c08746573743136313800d20c08746573743136313900d30c087465737431" - "36323000d40c08746573743136323100d50c08746573743136323200d60c08746573743136323300d70c0874657374" - "3136323400d80c08746573743136323500d90c08746573743136323600da0c08746573743136323700db0c08746573" - "743136323800dc0c08746573743136323900dd0c08746573743136333000de0c08746573743136333100df0c087465" - "73743136333200e00c08746573743136333300e10c08746573743136333400e20c08746573743136333500e30c0874" - "6573743136333600e40c08746573743136333700e50c08746573743136333800e60c08746573743136333900e70c08" - "746573743136343000e80c08746573743136343100e90c08746573743136343200ea0c08746573743136343300eb0c" - "08746573743136343400ec0c08746573743136343500ed0c08746573743136343600ee0c08746573743136343700ef" - "0c08746573743136343800f00c08746573743136343900f10c08746573743136353000f20c08746573743136353100" - "f30c08746573743136353200f40c08746573743136353300f50c08746573743136353400f60c087465737431363535" - "00f70c08746573743136353600f80c08746573743136353700f90c08746573743136353800fa0c0874657374313635" - "3900fb0c08746573743136363000fc0c08746573743136363100fd0c08746573743136363200fe0c08746573743136" - "363300ff0c08746573743136363400800d08746573743136363500810d08746573743136363600820d087465737431" - "36363700830d08746573743136363800840d08746573743136363900850d08746573743136373000860d0874657374" - "3136373100870d08746573743136373200880d08746573743136373300890d087465737431363734008a0d08746573" - "7431363735008b0d087465737431363736008c0d087465737431363737008d0d087465737431363738008e0d087465" - "737431363739008f0d08746573743136383000900d08746573743136383100910d08746573743136383200920d0874" - "6573743136383300930d08746573743136383400940d08746573743136383500950d08746573743136383600960d08" - "746573743136383700970d08746573743136383800980d08746573743136383900990d087465737431363930009a0d" - "087465737431363931009b0d087465737431363932009c0d087465737431363933009d0d087465737431363934009e" - "0d087465737431363935009f0d08746573743136393600a00d08746573743136393700a10d08746573743136393800" - "a20d08746573743136393900a30d08746573743137303000a40d08746573743137303100a50d087465737431373032" - "00a60d08746573743137303300a70d08746573743137303400a80d08746573743137303500a90d0874657374313730" - "3600aa0d08746573743137303700ab0d08746573743137303800ac0d08746573743137303900ad0d08746573743137" - "313000ae0d08746573743137313100af0d08746573743137313200b00d08746573743137313300b10d087465737431" - "37313400b20d08746573743137313500b30d08746573743137313600b40d08746573743137313700b50d0874657374" - "3137313800b60d08746573743137313900b70d08746573743137323000b80d08746573743137323100b90d08746573" - "743137323200ba0d08746573743137323300bb0d08746573743137323400bc0d08746573743137323500bd0d087465" - "73743137323600be0d08746573743137323700bf0d08746573743137323800c00d08746573743137323900c10d0874" - "6573743137333000c20d08746573743137333100c30d08746573743137333200c40d08746573743137333300c50d08" - "746573743137333400c60d08746573743137333500c70d08746573743137333600c80d08746573743137333700c90d" - "08746573743137333800ca0d08746573743137333900cb0d08746573743137343000cc0d08746573743137343100cd" - "0d08746573743137343200ce0d08746573743137343300cf0d08746573743137343400d00d08746573743137343500" - "d10d08746573743137343600d20d08746573743137343700d30d08746573743137343800d40d087465737431373439" - "00d50d08746573743137353000d60d08746573743137353100d70d08746573743137353200d80d0874657374313735" - "3300d90d08746573743137353400da0d08746573743137353500db0d08746573743137353600dc0d08746573743137" - "353700dd0d08746573743137353800de0d08746573743137353900df0d08746573743137363000e00d087465737431" - "37363100e10d08746573743137363200e20d08746573743137363300e30d08746573743137363400e40d0874657374" - "3137363500e50d08746573743137363600e60d08746573743137363700e70d08746573743137363800e80d08746573" - "743137363900e90d08746573743137373000ea0d08746573743137373100eb0d08746573743137373200ec0d087465" - "73743137373300ed0d08746573743137373400ee0d08746573743137373500ef0d08746573743137373600f00d0874" - "6573743137373700f10d08746573743137373800f20d08746573743137373900f30d08746573743137383000f40d08" - "746573743137383100f50d08746573743137383200f60d08746573743137383300f70d08746573743137383400f80d" - "08746573743137383500f90d08746573743137383600fa0d08746573743137383700fb0d08746573743137383800fc" - "0d08746573743137383900fd0d08746573743137393000fe0d08746573743137393100ff0d08746573743137393200" - "800e08746573743137393300810e08746573743137393400820e08746573743137393500830e087465737431373936" - "00840e08746573743137393700850e08746573743137393800860e08746573743137393900870e0874657374313830" - "3000880e08746573743138303100890e087465737431383032008a0e087465737431383033008b0e08746573743138" - "3034008c0e087465737431383035008d0e087465737431383036008e0e087465737431383037008f0e087465737431" - "38303800900e08746573743138303900910e08746573743138313000920e08746573743138313100930e0874657374" - "3138313200940e08746573743138313300950e08746573743138313400960e08746573743138313500970e08746573" - "743138313600980e08746573743138313700990e087465737431383138009a0e087465737431383139009b0e087465" - "737431383230009c0e087465737431383231009d0e087465737431383232009e0e087465737431383233009f0e0874" - "6573743138323400a00e08746573743138323500a10e08746573743138323600a20e08746573743138323700a30e08" - "746573743138323800a40e08746573743138323900a50e08746573743138333000a60e08746573743138333100a70e" - "08746573743138333200a80e08746573743138333300a90e08746573743138333400aa0e08746573743138333500ab" - "0e08746573743138333600ac0e08746573743138333700ad0e08746573743138333800ae0e08746573743138333900" - "af0e08746573743138343000b00e08746573743138343100b10e08746573743138343200b20e087465737431383433" - "00b30e08746573743138343400b40e08746573743138343500b50e08746573743138343600b60e0874657374313834" - "3700b70e08746573743138343800b80e08746573743138343900b90e08746573743138353000ba0e08746573743138" - "353100bb0e08746573743138353200bc0e08746573743138353300bd0e08746573743138353400be0e087465737431" - "38353500bf0e08746573743138353600c00e08746573743138353700c10e08746573743138353800c20e0874657374" - "3138353900c30e08746573743138363000c40e08746573743138363100c50e08746573743138363200c60e08746573" - "743138363300c70e08746573743138363400c80e08746573743138363500c90e08746573743138363600ca0e087465" - "73743138363700cb0e08746573743138363800cc0e08746573743138363900cd0e08746573743138373000ce0e0874" - "6573743138373100cf0e08746573743138373200d00e08746573743138373300d10e08746573743138373400d20e08" - "746573743138373500d30e08746573743138373600d40e08746573743138373700d50e08746573743138373800d60e" - "08746573743138373900d70e08746573743138383000d80e08746573743138383100d90e08746573743138383200da" - "0e08746573743138383300db0e08746573743138383400dc0e08746573743138383500dd0e08746573743138383600" - "de0e08746573743138383700df0e08746573743138383800e00e08746573743138383900e10e087465737431383930" - "00e20e08746573743138393100e30e08746573743138393200e40e08746573743138393300e50e0874657374313839" - "3400e60e08746573743138393500e70e08746573743138393600e80e08746573743138393700e90e08746573743138" - "393800ea0e08746573743138393900eb0e08746573743139303000ec0e08746573743139303100ed0e087465737431" - "39303200ee0e08746573743139303300ef0e08746573743139303400f00e08746573743139303500f10e0874657374" - "3139303600f20e08746573743139303700f30e08746573743139303800f40e08746573743139303900f50e08746573" - "743139313000f60e08746573743139313100f70e08746573743139313200f80e08746573743139313300f90e087465" - "73743139313400fa0e08746573743139313500fb0e08746573743139313600fc0e08746573743139313700fd0e0874" - "6573743139313800fe0e08746573743139313900ff0e08746573743139323000800f08746573743139323100810f08" - "746573743139323200820f08746573743139323300830f08746573743139323400840f08746573743139323500850f" - "08746573743139323600860f08746573743139323700870f08746573743139323800880f0874657374313932390089" - "0f087465737431393330008a0f087465737431393331008b0f087465737431393332008c0f08746573743139333300" - "8d0f087465737431393334008e0f087465737431393335008f0f08746573743139333600900f087465737431393337" - "00910f08746573743139333800920f08746573743139333900930f08746573743139343000940f0874657374313934" - "3100950f08746573743139343200960f08746573743139343300970f08746573743139343400980f08746573743139" - "343500990f087465737431393436009a0f087465737431393437009b0f087465737431393438009c0f087465737431" - "393439009d0f087465737431393530009e0f087465737431393531009f0f08746573743139353200a00f0874657374" - "3139353300a10f08746573743139353400a20f08746573743139353500a30f08746573743139353600a40f08746573" - "743139353700a50f08746573743139353800a60f08746573743139353900a70f08746573743139363000a80f087465" - "73743139363100a90f08746573743139363200aa0f08746573743139363300ab0f08746573743139363400ac0f0874" - "6573743139363500ad0f08746573743139363600ae0f08746573743139363700af0f08746573743139363800b00f08" - "746573743139363900b10f08746573743139373000b20f08746573743139373100b30f08746573743139373200b40f" - "08746573743139373300b50f08746573743139373400b60f08746573743139373500b70f08746573743139373600b8" - "0f08746573743139373700b90f08746573743139373800ba0f08746573743139373900bb0f08746573743139383000" - "bc0f08746573743139383100bd0f08746573743139383200be0f08746573743139383300bf0f087465737431393834" - "00c00f08746573743139383500c10f08746573743139383600c20f08746573743139383700c30f0874657374313938" - "3800c40f08746573743139383900c50f08746573743139393000c60f08746573743139393100c70f08746573743139" - "393200c80f08746573743139393300c90f08746573743139393400ca0f08746573743139393500cb0f087465737431" - "39393600cc0f08746573743139393700cd0f08746573743139393800ce0f08746573743139393900cf0f0874657374" - "3230303000d00f08746573743230303100d10f08746573743230303200d20f08746573743230303300d30f08746573" - "743230303400d40f08746573743230303500d50f08746573743230303600d60f08746573743230303700d70f087465" - "73743230303800d80f08746573743230303900d90f08746573743230313000da0f08746573743230313100db0f0874" - "6573743230313200dc0f08746573743230313300dd0f08746573743230313400de0f08746573743230313500df0f08" - "746573743230313600e00f08746573743230313700e10f08746573743230313800e20f08746573743230313900e30f" - "08746573743230323000e40f08746573743230323100e50f08746573743230323200e60f08746573743230323300e7" - "0f08746573743230323400e80f08746573743230323500e90f08746573743230323600ea0f08746573743230323700" - "eb0f08746573743230323800ec0f08746573743230323900ed0f08746573743230333000ee0f087465737432303331" - "00ef0f08746573743230333200f00f08746573743230333300f10f08746573743230333400f20f0874657374323033" - "3500f30f08746573743230333600f40f08746573743230333700f50f08746573743230333800f60f08746573743230" - "333900f70f08746573743230343000f80f08746573743230343100f90f08746573743230343200fa0f087465737432" - "30343300fb0f08746573743230343400fc0f08746573743230343500fd0f08746573743230343600fe0f0874657374" - "3230343700ff0f08746573743230343800801008746573743230343900811008746573743230353000821008746573" - "7432303531008310087465737432303532008410087465737432303533008510087465737432303534008610087465" - "737432303535008710087465737432303536008810087465737432303537008910087465737432303538008a100874" - "65737432303539008b10087465737432303630008c10087465737432303631008d10087465737432303632008e1008" - "7465737432303633008f10087465737432303634009010087465737432303635009110087465737432303636009210" - "0874657374323036370093100874657374323036380094100874657374323036390095100874657374323037300096" - "1008746573743230373100971008746573743230373200981008746573743230373300991008746573743230373400" - "9a10087465737432303735009b10087465737432303736009c10087465737432303737009d10087465737432303738" - "009e10087465737432303739009f1008746573743230383000a01008746573743230383100a1100874657374323038" - "3200a21008746573743230383300a31008746573743230383400a41008746573743230383500a51008746573743230" - "383600a61008746573743230383700a71008746573743230383800a81008746573743230383900a910087465737432" - "30393000aa1008746573743230393100ab1008746573743230393200ac1008746573743230393300ad100874657374" - "3230393400ae1008746573743230393500af1008746573743230393600b01008746573743230393700b11008746573" - "743230393800b21008746573743230393900b31008746573743231303000b41008746573743231303100b510087465" - "73743231303200b61008746573743231303300b71008746573743231303400b81008746573743231303500b9100874" - "6573743231303600ba1008746573743231303700bb1008746573743231303800bc1008746573743231303900bd1008" - "746573743231313000be1008746573743231313100bf1008746573743231313200c01008746573743231313300c110" - "08746573743231313400c21008746573743231313500c31008746573743231313600c41008746573743231313700c5" - "1008746573743231313800c61008746573743231313900c71008746573743231323000c81008746573743231323100" - "c91008746573743231323200ca1008746573743231323300cb1008746573743231323400cc10087465737432313235" - "00cd1008746573743231323600ce1008746573743231323700cf1008746573743231323800d0100874657374323132" - "3900d11008746573743231333000d21008746573743231333100d31008746573743231333200d41008746573743231" - "333300d51008746573743231333400d61008746573743231333500d71008746573743231333600d810087465737432" - "31333700d91008746573743231333800da1008746573743231333900db1008746573743231343000dc100874657374" - "3231343100dd1008746573743231343200de1008746573743231343300df1008746573743231343400e01008746573" - "743231343500e11008746573743231343600e21008746573743231343700e31008746573743231343800e410087465" - "73743231343900e51008746573743231353000e61008746573743231353100e71008746573743231353200e8100874" - "6573743231353300e91008746573743231353400ea1008746573743231353500eb1008746573743231353600ec1008" - "746573743231353700ed1008746573743231353800ee1008746573743231353900ef1008746573743231363000f010" - "08746573743231363100f11008746573743231363200f21008746573743231363300f31008746573743231363400f4" - "1008746573743231363500f51008746573743231363600f61008746573743231363700f71008746573743231363800" - "f81008746573743231363900f91008746573743231373000fa1008746573743231373100fb10087465737432313732" - "00fc1008746573743231373300fd1008746573743231373400fe1008746573743231373500ff100874657374323137" - "3600801108746573743231373700811108746573743231373800821108746573743231373900831108746573743231" - "3830008411087465737432313831008511087465737432313832008611087465737432313833008711087465737432" - "313834008811087465737432313835008911087465737432313836008a11087465737432313837008b110874657374" - "32313838008c11087465737432313839008d11087465737432313930008e11087465737432313931008f1108746573" - "7432313932009011087465737432313933009111087465737432313934009211087465737432313935009311087465" - "7374323139360094110874657374323139370095110874657374323139380096110874657374323139390097110874" - "65737432323030009811087465737432323031009911087465737432323032009a11087465737432323033009b1108" - "7465737432323034009c11087465737432323035009d11087465737432323036009e11087465737432323037009f11" - "08746573743232303800a01108746573743232303900a11108746573743232313000a21108746573743232313100a3" - "1108746573743232313200a41108746573743232313300a51108746573743232313400a61108746573743232313500" - "a71108746573743232313600a81108746573743232313700a91108746573743232313800aa11087465737432323139" - "00ab1108746573743232323000ac1108746573743232323100ad1108746573743232323200ae110874657374323232" - "3300af1108746573743232323400b01108746573743232323500b11108746573743232323600b21108746573743232" - "323700b31108746573743232323800b41108746573743232323900b51108746573743232333000b611087465737432" - "32333100b71108746573743232333200b81108746573743232333300b91108746573743232333400ba110874657374" - "3232333500bb1108746573743232333600bc1108746573743232333700bd1108746573743232333800be1108746573" - "743232333900bf1108746573743232343000c01108746573743232343100c11108746573743232343200c211087465" - "73743232343300c31108746573743232343400c41108746573743232343500c51108746573743232343600c6110874" - "6573743232343700c71108746573743232343800c81108746573743232343900c91108746573743232353000ca1108" - "746573743232353100cb1108746573743232353200cc1108746573743232353300cd1108746573743232353400ce11" - "08746573743232353500cf1108746573743232353600d01108746573743232353700d11108746573743232353800d2" - "1108746573743232353900d31108746573743232363000d41108746573743232363100d51108746573743232363200" - "d61108746573743232363300d71108746573743232363400d81108746573743232363500d911087465737432323636" - "00da1108746573743232363700db1108746573743232363800dc1108746573743232363900dd110874657374323237" - "3000de1108746573743232373100df1108746573743232373200e01108746573743232373300e11108746573743232" - "373400e21108746573743232373500e31108746573743232373600e41108746573743232373700e511087465737432" - "32373800e61108746573743232373900e71108746573743232383000e81108746573743232383100e9110874657374" - "3232383200ea1108746573743232383300eb1108746573743232383400ec1108746573743232383500ed1108746573" - "743232383600ee1108746573743232383700ef1108746573743232383800f01108746573743232383900f111087465" - "73743232393000f21108746573743232393100f31108746573743232393200f41108746573743232393300f5110874" - "6573743232393400f61108746573743232393500f71108746573743232393600f81108746573743232393700f91108" - "746573743232393800fa1108746573743232393900fb1108746573743233303000fc1108746573743233303100fd11" - "08746573743233303200fe1108746573743233303300ff110874657374323330340080120874657374323330350081" - "1208746573743233303600821208746573743233303700831208746573743233303800841208746573743233303900" - "8512087465737432333130008612087465737432333131008712087465737432333132008812087465737432333133" - "008912087465737432333134008a12087465737432333135008b12087465737432333136008c120874657374323331" - "37008d12087465737432333138008e12087465737432333139008f1208746573743233323000901208746573743233" - "3231009112087465737432333232009212087465737432333233009312087465737432333234009412087465737432" - "3332350095120874657374323332360096120874657374323332370097120874657374323332380098120874657374" - "32333239009912087465737432333330009a12087465737432333331009b12087465737432333332009c1208746573" - "7432333333009d12087465737432333334009e12087465737432333335009f1208746573743233333600a012087465" - "73743233333700a11208746573743233333800a21208746573743233333900a31208746573743233343000a4120874" - "6573743233343100a51208746573743233343200a61208746573743233343300a71208746573743233343400a81208" - "746573743233343500a91208746573743233343600aa1208746573743233343700ab1208746573743233343800ac12" - "08746573743233343900ad1208746573743233353000ae1208746573743233353100af1208746573743233353200b0" - "1208746573743233353300b11208746573743233353400b21208746573743233353500b31208746573743233353600" - "b41208746573743233353700b51208746573743233353800b61208746573743233353900b712087465737432333630" - "00b81208746573743233363100b91208746573743233363200ba1208746573743233363300bb120874657374323336" - "3400bc1208746573743233363500bd1208746573743233363600be1208746573743233363700bf1208746573743233" - "363800c01208746573743233363900c11208746573743233373000c21208746573743233373100c312087465737432" - "33373200c41208746573743233373300c51208746573743233373400c61208746573743233373500c7120874657374" - "3233373600c81208746573743233373700c91208746573743233373800ca1208746573743233373900cb1208746573" - "743233383000cc1208746573743233383100cd1208746573743233383200ce1208746573743233383300cf12087465" - "73743233383400d01208746573743233383500d11208746573743233383600d21208746573743233383700d3120874" - "6573743233383800d41208746573743233383900d51208746573743233393000d61208746573743233393100d71208" - "746573743233393200d81208746573743233393300d91208746573743233393400da1208746573743233393500db12" - "08746573743233393600dc1208746573743233393700dd1208746573743233393800de1208746573743233393900df" - "1208746573743234303000e01208746573743234303100e11208746573743234303200e21208746573743234303300" - "e31208746573743234303400e41208746573743234303500e51208746573743234303600e612087465737432343037" - "00e71208746573743234303800e81208746573743234303900e91208746573743234313000ea120874657374323431" - "3100eb1208746573743234313200ec1208746573743234313300ed1208746573743234313400ee1208746573743234" - "313500ef1208746573743234313600f01208746573743234313700f11208746573743234313800f212087465737432" - "34313900f31208746573743234323000f41208746573743234323100f51208746573743234323200f6120874657374" - "3234323300f71208746573743234323400f81208746573743234323500f91208746573743234323600fa1208746573" - "743234323700fb1208746573743234323800fc1208746573743234323900fd1208746573743234333000fe12087465" - "73743234333100ff120874657374323433320080130874657374323433330081130874657374323433340082130874" - "6573743234333500831308746573743234333600841308746573743234333700851308746573743234333800861308" - "7465737432343339008713087465737432343430008813087465737432343431008913087465737432343432008a13" - "087465737432343433008b13087465737432343434008c13087465737432343435008d13087465737432343436008e" - "13087465737432343437008f1308746573743234343800901308746573743234343900911308746573743234353000" - "9213087465737432343531009313087465737432343532009413087465737432343533009513087465737432343534" - "0096130874657374323435350097130874657374323435360098130874657374323435370099130874657374323435" - "38009a13087465737432343539009b13087465737432343630009c13087465737432343631009d1308746573743234" - "3632009e13087465737432343633009f1308746573743234363400a01308746573743234363500a113087465737432" - "34363600a21308746573743234363700a31308746573743234363800a41308746573743234363900a5130874657374" - "3234373000a61308746573743234373100a71308746573743234373200a81308746573743234373300a91308746573" - "743234373400aa1308746573743234373500ab1308746573743234373600ac1308746573743234373700ad13087465" - "73743234373800ae1308746573743234373900af1308746573743234383000b01308746573743234383100b1130874" - "6573743234383200b21308746573743234383300b31308746573743234383400b41308746573743234383500b51308" - "746573743234383600b61308746573743234383700b71308746573743234383800b81308746573743234383900b913" - "08746573743234393000ba1308746573743234393100bb1308746573743234393200bc1308746573743234393300bd" - "1308746573743234393400be1308746573743234393500bf1308746573743234393600c01308746573743234393700" - "c11308746573743234393800c21308746573743234393900c31308746573743235303000c413087465737432353031" - "00c51308746573743235303200c61308746573743235303300c71308746573743235303400c8130874657374323530" - "3500c91308746573743235303600ca1308746573743235303700cb1308746573743235303800cc1308746573743235" - "303900cd1308746573743235313000ce1308746573743235313100cf1308746573743235313200d013087465737432" - "35313300d11308746573743235313400d21308746573743235313500d31308746573743235313600d4130874657374" - "3235313700d51308746573743235313800d61308746573743235313900d71308746573743235323000d81308746573" - "743235323100d91308746573743235323200da1308746573743235323300db1308746573743235323400dc13087465" - "73743235323500dd1308746573743235323600de1308746573743235323700df1308746573743235323800e0130874" - "6573743235323900e11308746573743235333000e21308746573743235333100e31308746573743235333200e41308" - "746573743235333300e51308746573743235333400e61308746573743235333500e71308746573743235333600e813" - "08746573743235333700e91308746573743235333800ea1308746573743235333900eb1308746573743235343000ec" - "1308746573743235343100ed1308746573743235343200ee1308746573743235343300ef1308746573743235343400" - "f01308746573743235343500f11308746573743235343600f21308746573743235343700f313087465737432353438" - "00f41308746573743235343900f51308746573743235353000f61308746573743235353100f7130874657374323535" - "3200f81308746573743235353300f91308746573743235353400fa1308746573743235353500fb1308746573743235" - "353600fc1308746573743235353700fd1308746573743235353800fe1308746573743235353900ff13087465737432" - "3536300080140874657374323536310081140874657374323536320082140874657374323536330083140874657374" - "3235363400841408746573743235363500851408746573743235363600861408746573743235363700871408746573" - "7432353638008814087465737432353639008914087465737432353730008a14087465737432353731008b14087465" - "737432353732008c14087465737432353733008d14087465737432353734008e14087465737432353735008f140874" - "6573743235373600901408746573743235373700911408746573743235373800921408746573743235373900931408" - "7465737432353830009414087465737432353831009514087465737432353832009614087465737432353833009714" - "087465737432353834009814087465737432353835009914087465737432353836009a14087465737432353837009b" - "14087465737432353838009c14087465737432353839009d14087465737432353930009e1408746573743235393100" - "9f1408746573743235393200a01408746573743235393300a11408746573743235393400a214087465737432353935" - "00a31408746573743235393600a41408746573743235393700a51408746573743235393800a6140874657374323539" - "3900a71408746573743236303000a81408746573743236303100a91408746573743236303200aa1408746573743236" - "303300ab1408746573743236303400ac1408746573743236303500ad1408746573743236303600ae14087465737432" - "36303700af1408746573743236303800b01408746573743236303900b11408746573743236313000b2140874657374" - "3236313100b31408746573743236313200b41408746573743236313300b51408746573743236313400b61408746573" - "743236313500b71408746573743236313600b81408746573743236313700b91408746573743236313800ba14087465" - "73743236313900bb1408746573743236323000bc1408746573743236323100bd1408746573743236323200be140874" - "6573743236323300bf1408746573743236323400c01408746573743236323500c11408746573743236323600c21408" - "746573743236323700c31408746573743236323800c41408746573743236323900c51408746573743236333000c614" - "08746573743236333100c71408746573743236333200c81408746573743236333300c91408746573743236333400ca" - "1408746573743236333500cb1408746573743236333600cc1408746573743236333700cd1408746573743236333800" - "ce1408746573743236333900cf1408746573743236343000d01408746573743236343100d114087465737432363432" - "00d21408746573743236343300d31408746573743236343400d41408746573743236343500d5140874657374323634" - "3600d61408746573743236343700d71408746573743236343800d81408746573743236343900d91408746573743236" - "353000da1408746573743236353100db1408746573743236353200dc1408746573743236353300dd14087465737432" - "36353400de1408746573743236353500df1408746573743236353600e01408746573743236353700e1140874657374" - "3236353800e21408746573743236353900e31408746573743236363000e41408746573743236363100e51408746573" - "743236363200e61408746573743236363300e71408746573743236363400e81408746573743236363500e914087465" - "73743236363600ea1408746573743236363700eb1408746573743236363800ec1408746573743236363900ed140874" - "6573743236373000ee1408746573743236373100ef1408746573743236373200f01408746573743236373300f11408" - "746573743236373400f21408746573743236373500f31408746573743236373600f41408746573743236373700f514" - "08746573743236373800f61408746573743236373900f71408746573743236383000f81408746573743236383100f9" - "1408746573743236383200fa1408746573743236383300fb1408746573743236383400fc1408746573743236383500" - "fd1408746573743236383600fe1408746573743236383700ff14087465737432363838008015087465737432363839" - "0081150874657374323639300082150874657374323639310083150874657374323639320084150874657374323639" - "3300851508746573743236393400861508746573743236393500871508746573743236393600881508746573743236" - "3937008915087465737432363938008a15087465737432363939008b15087465737432373030008c15087465737432" - "373031008d15087465737432373032008e15087465737432373033008f150874657374323730340090150874657374" - "3237303500911508746573743237303600921508746573743237303700931508746573743237303800941508746573" - "7432373039009515087465737432373130009615087465737432373131009715087465737432373132009815087465" - "737432373133009915087465737432373134009a15087465737432373135009b15087465737432373136009c150874" - "65737432373137009d15087465737432373138009e15087465737432373139009f1508746573743237323000a01508" - "746573743237323100a11508746573743237323200a21508746573743237323300a31508746573743237323400a415" - "08746573743237323500a51508746573743237323600a61508746573743237323700a71508746573743237323800a8" - "1508746573743237323900a91508746573743237333000aa1508746573743237333100ab1508746573743237333200" - "ac1508746573743237333300ad1508746573743237333400ae1508746573743237333500af15087465737432373336" - "00b01508746573743237333700b11508746573743237333800b21508746573743237333900b3150874657374323734" - "3000b41508746573743237343100b51508746573743237343200b61508746573743237343300b71508746573743237" - "343400b81508746573743237343500b91508746573743237343600ba1508746573743237343700bb15087465737432" - "37343800bc1508746573743237343900bd1508746573743237353000be1508746573743237353100bf150874657374" - "3237353200c01508746573743237353300c11508746573743237353400c21508746573743237353500c31508746573" - "743237353600c41508746573743237353700c51508746573743237353800c61508746573743237353900c715087465" - "73743237363000c81508746573743237363100c91508746573743237363200ca1508746573743237363300cb150874" - "6573743237363400cc1508746573743237363500cd1508746573743237363600ce1508746573743237363700cf1508" - "746573743237363800d01508746573743237363900d11508746573743237373000d21508746573743237373100d315" - "08746573743237373200d41508746573743237373300d51508746573743237373400d61508746573743237373500d7" - "1508746573743237373600d81508746573743237373700d91508746573743237373800da1508746573743237373900" - "db1508746573743237383000dc1508746573743237383100dd1508746573743237383200de15087465737432373833" - "00df1508746573743237383400e01508746573743237383500e11508746573743237383600e2150874657374323738" - "3700e31508746573743237383800e41508746573743237383900e51508746573743237393000e61508746573743237" - "393100e71508746573743237393200e81508746573743237393300e91508746573743237393400ea15087465737432" - "37393500eb1508746573743237393600ec1508746573743237393700ed1508746573743237393800ee150874657374" - "3237393900ef1508746573743238303000f01508746573743238303100f11508746573743238303200f21508746573" - "743238303300f31508746573743238303400f41508746573743238303500f51508746573743238303600f615087465" - "73743238303700f71508746573743238303800f81508746573743238303900f91508746573743238313000fa150874" - "6573743238313100fb1508746573743238313200fc1508746573743238313300fd1508746573743238313400fe1508" - "746573743238313500ff15087465737432383136008016087465737432383137008116087465737432383138008216" - "0874657374323831390083160874657374323832300084160874657374323832310085160874657374323832320086" - "1608746573743238323300871608746573743238323400881608746573743238323500891608746573743238323600" - "8a16087465737432383237008b16087465737432383238008c16087465737432383239008d16087465737432383330" - "008e16087465737432383331008f160874657374323833320090160874657374323833330091160874657374323833" - "3400921608746573743238333500931608746573743238333600941608746573743238333700951608746573743238" - "3338009616087465737432383339009716087465737432383430009816087465737432383431009916087465737432" - "383432009a16087465737432383433009b16087465737432383434009c16087465737432383435009d160874657374" - "32383436009e16087465737432383437009f1608746573743238343800a01608746573743238343900a11608746573" - "743238353000a21608746573743238353100a31608746573743238353200a41608746573743238353300a516087465" - "73743238353400a61608746573743238353500a71608746573743238353600a81608746573743238353700a9160874" - "6573743238353800aa1608746573743238353900ab1608746573743238363000ac1608746573743238363100ad1608" - "746573743238363200ae1608746573743238363300af1608746573743238363400b01608746573743238363500b116" - "08746573743238363600b21608746573743238363700b31608746573743238363800b41608746573743238363900b5" - "1608746573743238373000b61608746573743238373100b71608746573743238373200b81608746573743238373300" - "b91608746573743238373400ba1608746573743238373500bb1608746573743238373600bc16087465737432383737" - "00bd1608746573743238373800be1608746573743238373900bf1608746573743238383000c0160874657374323838" - "3100c11608746573743238383200c21608746573743238383300c31608746573743238383400c41608746573743238" - "383500c51608746573743238383600c61608746573743238383700c71608746573743238383800c816087465737432" - "38383900c91608746573743238393000ca1608746573743238393100cb1608746573743238393200cc160874657374" - "3238393300cd1608746573743238393400ce1608746573743238393500cf1608746573743238393600d01608746573" - "743238393700d11608746573743238393800d21608746573743238393900d31608746573743239303000d416087465" - "73743239303100d51608746573743239303200d61608746573743239303300d71608746573743239303400d8160874" - "6573743239303500d91608746573743239303600da1608746573743239303700db1608746573743239303800dc1608" - "746573743239303900dd1608746573743239313000de1608746573743239313100df1608746573743239313200e016" - "08746573743239313300e11608746573743239313400e21608746573743239313500e31608746573743239313600e4" - "1608746573743239313700e51608746573743239313800e61608746573743239313900e71608746573743239323000" - "e81608746573743239323100e91608746573743239323200ea1608746573743239323300eb16087465737432393234" - "00ec1608746573743239323500ed1608746573743239323600ee1608746573743239323700ef160874657374323932" - "3800f01608746573743239323900f11608746573743239333000f21608746573743239333100f31608746573743239" - "333200f41608746573743239333300f51608746573743239333400f61608746573743239333500f716087465737432" - "39333600f81608746573743239333700f91608746573743239333800fa1608746573743239333900fb160874657374" - "3239343000fc1608746573743239343100fd1608746573743239343200fe1608746573743239343300ff1608746573" - "7432393434008017087465737432393435008117087465737432393436008217087465737432393437008317087465" - "7374323934380084170874657374323934390085170874657374323935300086170874657374323935310087170874" - "65737432393532008817087465737432393533008917087465737432393534008a17087465737432393535008b1708" - "7465737432393536008c17087465737432393537008d17087465737432393538008e17087465737432393539008f17" - "0874657374323936300090170874657374323936310091170874657374323936320092170874657374323936330093" - "1708746573743239363400941708746573743239363500951708746573743239363600961708746573743239363700" - "9717087465737432393638009817087465737432393639009917087465737432393730009a17087465737432393731" - "009b17087465737432393732009c17087465737432393733009d17087465737432393734009e170874657374323937" - "35009f1708746573743239373600a01708746573743239373700a11708746573743239373800a21708746573743239" - "373900a31708746573743239383000a41708746573743239383100a51708746573743239383200a617087465737432" - "39383300a71708746573743239383400a81708746573743239383500a91708746573743239383600aa170874657374" - "3239383700ab1708746573743239383800ac1708746573743239383900ad1708746573743239393000ae1708746573" - "743239393100af1708746573743239393200b01708746573743239393300b11708746573743239393400b217087465" - "73743239393500b31708746573743239393600b41708746573743239393700b51708746573743239393800b6170874" - "6573743239393900b71708746573743330303000b81708746573743330303100b91708746573743330303200ba1708" - "746573743330303300bb1708746573743330303400bc1708746573743330303500bd1708746573743330303600be17" - "08746573743330303700bf1708746573743330303800c01708746573743330303900c11708746573743330313000c2" - "1708746573743330313100c31708746573743330313200c41708746573743330313300c51708746573743330313400" - "c61708746573743330313500c71708746573743330313600c81708746573743330313700c917087465737433303138" - "00ca1708746573743330313900cb1708746573743330323000cc1708746573743330323100cd170874657374333032" - "3200ce1708746573743330323300cf1708746573743330323400d01708746573743330323500d11708746573743330" - "323600d21708746573743330323700d31708746573743330323800d41708746573743330323900d517087465737433" - "30333000d61708746573743330333100d71708746573743330333200d81708746573743330333300d9170874657374" - "3330333400da1708746573743330333500db1708746573743330333600dc1708746573743330333700dd1708746573" - "743330333800de1708746573743330333900df1708746573743330343000e01708746573743330343100e117087465" - "73743330343200e21708746573743330343300e31708746573743330343400e41708746573743330343500e5170874" - "6573743330343600e61708746573743330343700e71708746573743330343800e81708746573743330343900e91708" - "746573743330353000ea1708746573743330353100eb1708746573743330353200ec1708746573743330353300ed17" - "08746573743330353400ee1708746573743330353500ef1708746573743330353600f01708746573743330353700f1" - "1708746573743330353800f21708746573743330353900f31708746573743330363000f41708746573743330363100" - "f51708746573743330363200f61708746573743330363300f71708746573743330363400f817087465737433303635" - "00f91708746573743330363600fa1708746573743330363700fb1708746573743330363800fc170874657374333036" - "3900fd1708746573743330373000fe1708746573743330373100ff1708746573743330373200801808746573743330" - "3733008118087465737433303734008218087465737433303735008318087465737433303736008418087465737433" - "3037370085180874657374333037380086180874657374333037390087180874657374333038300088180874657374" - "33303831008918087465737433303832008a18087465737433303833008b18087465737433303834008c1808746573" - "7433303835008d18087465737433303836008e18087465737433303837008f18087465737433303838009018087465" - "7374333038390091180874657374333039300092180874657374333039310093180874657374333039320094180874" - "6573743330393300951808746573743330393400961808746573743330393500971808746573743330393600981808" - "7465737433303937009918087465737433303938009a18087465737433303939009b18087465737433313030009c18" - "087465737433313031009d18087465737433313032009e18087465737433313033009f1808746573743331303400a0" - "1808746573743331303500a11808746573743331303600a21808746573743331303700a31808746573743331303800" - "a41808746573743331303900a51808746573743331313000a61808746573743331313100a718087465737433313132" - "00a81808746573743331313300a91808746573743331313400aa1808746573743331313500ab180874657374333131" - "3600ac1808746573743331313700ad1808746573743331313800ae1808746573743331313900af1808746573743331" - "323000b01808746573743331323100b11808746573743331323200b21808746573743331323300b318087465737433" - "31323400b41808746573743331323500b51808746573743331323600b61808746573743331323700b7180874657374" - "3331323800b81808746573743331323900b91808746573743331333000ba1808746573743331333100bb1808746573" - "743331333200bc1808746573743331333300bd1808746573743331333400be1808746573743331333500bf18087465" - "73743331333600c01808746573743331333700c11808746573743331333800c21808746573743331333900c3180874" - "6573743331343000c41808746573743331343100c51808746573743331343200c61808746573743331343300c71808" - "746573743331343400c81808746573743331343500c91808746573743331343600ca1808746573743331343700cb18" - "08746573743331343800cc1808746573743331343900cd1808746573743331353000ce1808746573743331353100cf" - "1808746573743331353200d01808746573743331353300d11808746573743331353400d21808746573743331353500" - "d31808746573743331353600d41808746573743331353700d51808746573743331353800d618087465737433313539" - "00d71808746573743331363000d81808746573743331363100d91808746573743331363200da180874657374333136" - "3300db1808746573743331363400dc1808746573743331363500dd1808746573743331363600de1808746573743331" - "363700df1808746573743331363800e01808746573743331363900e11808746573743331373000e218087465737433" - "31373100e31808746573743331373200e41808746573743331373300e51808746573743331373400e6180874657374" - "3331373500e71808746573743331373600e81808746573743331373700e91808746573743331373800ea1808746573" - "743331373900eb1808746573743331383000ec1808746573743331383100ed1808746573743331383200ee18087465" - "73743331383300ef1808746573743331383400f01808746573743331383500f11808746573743331383600f2180874" - "6573743331383700f31808746573743331383800f41808746573743331383900f51808746573743331393000f61808" - "746573743331393100f71808746573743331393200f81808746573743331393300f91808746573743331393400fa18" - "08746573743331393500fb1808746573743331393600fc1808746573743331393700fd1808746573743331393800fe" - "1808746573743331393900ff1808746573743332303000801908746573743332303100811908746573743332303200" - "8219087465737433323033008319087465737433323034008419087465737433323035008519087465737433323036" - "0086190874657374333230370087190874657374333230380088190874657374333230390089190874657374333231" - "30008a19087465737433323131008b19087465737433323132008c19087465737433323133008d1908746573743332" - "3134008e19087465737433323135008f19087465737433323136009019087465737433323137009119087465737433" - "3231380092190874657374333231390093190874657374333232300094190874657374333232310095190874657374" - "3332323200961908746573743332323300971908746573743332323400981908746573743332323500991908746573" - "7433323236009a19087465737433323237009b19087465737433323238009c19087465737433323239009d19087465" - "737433323330009e19087465737433323331009f1908746573743332333200a01908746573743332333300a1190874" - "6573743332333400a21908746573743332333500a31908746573743332333600a41908746573743332333700a51908" - "746573743332333800a61908746573743332333900a71908746573743332343000a81908746573743332343100a919" - "08746573743332343200aa1908746573743332343300ab1908746573743332343400ac1908746573743332343500ad" - "1908746573743332343600ae1908746573743332343700af1908746573743332343800b01908746573743332343900" - "b11908746573743332353000b21908746573743332353100b31908746573743332353200b419087465737433323533" - "00b51908746573743332353400b61908746573743332353500b71908746573743332353600b8190874657374333235" - "3700b91908746573743332353800ba1908746573743332353900bb1908746573743332363000bc1908746573743332" - "363100bd1908746573743332363200be1908746573743332363300bf1908746573743332363400c019087465737433" - "32363500c11908746573743332363600c21908746573743332363700c31908746573743332363800c4190874657374" - "3332363900c51908746573743332373000c61908746573743332373100c71908746573743332373200c81908746573" - "743332373300c91908746573743332373400ca1908746573743332373500cb1908746573743332373600cc19087465" - "73743332373700cd1908746573743332373800ce1908746573743332373900cf1908746573743332383000d0190874" - "6573743332383100d11908746573743332383200d21908746573743332383300d31908746573743332383400d41908" - "746573743332383500d51908746573743332383600d61908746573743332383700d71908746573743332383800d819" - "08746573743332383900d91908746573743332393000da1908746573743332393100db1908746573743332393200dc" - "1908746573743332393300dd1908746573743332393400de1908746573743332393500df1908746573743332393600" - "e01908746573743332393700e11908746573743332393800e21908746573743332393900e319087465737433333030" - "00e41908746573743333303100e51908746573743333303200e61908746573743333303300e7190874657374333330" - "3400e81908746573743333303500e91908746573743333303600ea1908746573743333303700eb1908746573743333" - "303800ec1908746573743333303900ed1908746573743333313000ee1908746573743333313100ef19087465737433" - "33313200f01908746573743333313300f11908746573743333313400f21908746573743333313500f3190874657374" - "3333313600f41908746573743333313700f51908746573743333313800f61908746573743333313900f71908746573" - "743333323000f81908746573743333323100f91908746573743333323200fa1908746573743333323300fb19087465" - "73743333323400fc1908746573743333323500fd1908746573743333323600fe1908746573743333323700ff190874" - "6573743333323800801a08746573743333323900811a08746573743333333000821a08746573743333333100831a08" - "746573743333333200841a08746573743333333300851a08746573743333333400861a08746573743333333500871a" - "08746573743333333600881a08746573743333333700891a087465737433333338008a1a087465737433333339008b" - "1a087465737433333430008c1a087465737433333431008d1a087465737433333432008e1a08746573743333343300" - "8f1a08746573743333343400901a08746573743333343500911a08746573743333343600921a087465737433333437" - "00931a08746573743333343800941a08746573743333343900951a08746573743333353000961a0874657374333335" - "3100971a08746573743333353200981a08746573743333353300991a087465737433333534009a1a08746573743333" - "3535009b1a087465737433333536009c1a087465737433333537009d1a087465737433333538009e1a087465737433" - "333539009f1a08746573743333363000a01a08746573743333363100a11a08746573743333363200a21a0874657374" - "3333363300a31a08746573743333363400a41a08746573743333363500a51a08746573743333363600a61a08746573" - "743333363700a71a08746573743333363800a81a08746573743333363900a91a08746573743333373000aa1a087465" - "73743333373100ab1a08746573743333373200ac1a08746573743333373300ad1a08746573743333373400ae1a0874" - "6573743333373500af1a08746573743333373600b01a08746573743333373700b11a08746573743333373800b21a08" - "746573743333373900b31a08746573743333383000b41a08746573743333383100b51a08746573743333383200b61a" - "08746573743333383300b71a08746573743333383400b81a08746573743333383500b91a08746573743333383600ba" - "1a08746573743333383700bb1a08746573743333383800bc1a08746573743333383900bd1a08746573743333393000" - "be1a08746573743333393100bf1a08746573743333393200c01a08746573743333393300c11a087465737433333934" - "00c21a08746573743333393500c31a08746573743333393600c41a08746573743333393700c51a0874657374333339" - "3800c61a08746573743333393900c71a08746573743334303000c81a08746573743334303100c91a08746573743334" - "303200ca1a08746573743334303300cb1a08746573743334303400cc1a08746573743334303500cd1a087465737433" - "34303600ce1a08746573743334303700cf1a08746573743334303800d01a08746573743334303900d11a0874657374" - "3334313000d21a08746573743334313100d31a08746573743334313200d41a08746573743334313300d51a08746573" - "743334313400d61a08746573743334313500d71a08746573743334313600d81a08746573743334313700d91a087465" - "73743334313800da1a08746573743334313900db1a08746573743334323000dc1a08746573743334323100dd1a0874" - "6573743334323200de1a08746573743334323300df1a08746573743334323400e01a08746573743334323500e11a08" - "746573743334323600e21a08746573743334323700e31a08746573743334323800e41a08746573743334323900e51a" - "08746573743334333000e61a08746573743334333100e71a08746573743334333200e81a08746573743334333300e9" - "1a08746573743334333400ea1a08746573743334333500eb1a08746573743334333600ec1a08746573743334333700" - "ed1a08746573743334333800ee1a08746573743334333900ef1a08746573743334343000f01a087465737433343431" - "00f11a08746573743334343200f21a08746573743334343300f31a08746573743334343400f41a0874657374333434" - "3500f51a08746573743334343600f61a08746573743334343700f71a08746573743334343800f81a08746573743334" - "343900f91a08746573743334353000fa1a08746573743334353100fb1a08746573743334353200fc1a087465737433" - "34353300fd1a08746573743334353400fe1a08746573743334353500ff1a08746573743334353600801b0874657374" - "3334353700811b08746573743334353800821b08746573743334353900831b08746573743334363000841b08746573" - "743334363100851b08746573743334363200861b08746573743334363300871b08746573743334363400881b087465" - "73743334363500891b087465737433343636008a1b087465737433343637008b1b087465737433343638008c1b0874" - "65737433343639008d1b087465737433343730008e1b087465737433343731008f1b08746573743334373200901b08" - "746573743334373300911b08746573743334373400921b08746573743334373500931b08746573743334373600941b" - "08746573743334373700951b08746573743334373800961b08746573743334373900971b0874657374333438300098" - "1b08746573743334383100991b087465737433343832009a1b087465737433343833009b1b08746573743334383400" - "9c1b087465737433343835009d1b087465737433343836009e1b087465737433343837009f1b087465737433343838" - "00a01b08746573743334383900a11b08746573743334393000a21b08746573743334393100a31b0874657374333439" - "3200a41b08746573743334393300a51b08746573743334393400a61b08746573743334393500a71b08746573743334" - "393600a81b08746573743334393700a91b08746573743334393800aa1b08746573743334393900ab1b087465737433" - "35303000ac1b08746573743335303100ad1b08746573743335303200ae1b08746573743335303300af1b0874657374" - "3335303400b01b08746573743335303500b11b08746573743335303600b21b08746573743335303700b31b08746573" - "743335303800b41b08746573743335303900b51b08746573743335313000b61b08746573743335313100b71b087465" - "73743335313200b81b08746573743335313300b91b08746573743335313400ba1b08746573743335313500bb1b0874" - "6573743335313600bc1b08746573743335313700bd1b08746573743335313800be1b08746573743335313900bf1b08" - "746573743335323000c01b08746573743335323100c11b08746573743335323200c21b08746573743335323300c31b" - "08746573743335323400c41b08746573743335323500c51b08746573743335323600c61b08746573743335323700c7" - "1b08746573743335323800c81b08746573743335323900c91b08746573743335333000ca1b08746573743335333100" - "cb1b08746573743335333200cc1b08746573743335333300cd1b08746573743335333400ce1b087465737433353335" - "00cf1b08746573743335333600d01b08746573743335333700d11b08746573743335333800d21b0874657374333533" - "3900d31b08746573743335343000d41b08746573743335343100d51b08746573743335343200d61b08746573743335" - "343300d71b08746573743335343400d81b08746573743335343500d91b08746573743335343600da1b087465737433" - "35343700db1b08746573743335343800dc1b08746573743335343900dd1b08746573743335353000de1b0874657374" - "3335353100df1b08746573743335353200e01b08746573743335353300e11b08746573743335353400e21b08746573" - "743335353500e31b08746573743335353600e41b08746573743335353700e51b08746573743335353800e61b087465" - "73743335353900e71b08746573743335363000e81b08746573743335363100e91b08746573743335363200ea1b0874" - "6573743335363300eb1b08746573743335363400ec1b08746573743335363500ed1b08746573743335363600ee1b08" - "746573743335363700ef1b08746573743335363800f01b08746573743335363900f11b08746573743335373000f21b" - "08746573743335373100f31b08746573743335373200f41b08746573743335373300f51b08746573743335373400f6" - "1b08746573743335373500f71b08746573743335373600f81b08746573743335373700f91b08746573743335373800" - "fa1b08746573743335373900fb1b08746573743335383000fc1b08746573743335383100fd1b087465737433353832" - "00fe1b08746573743335383300ff1b08746573743335383400801c08746573743335383500811c0874657374333538" - "3600821c08746573743335383700831c08746573743335383800841c08746573743335383900851c08746573743335" - "393000861c08746573743335393100871c08746573743335393200881c08746573743335393300891c087465737433" - "353934008a1c087465737433353935008b1c087465737433353936008c1c087465737433353937008d1c0874657374" - "33353938008e1c087465737433353939008f1c08746573743336303000901c08746573743336303100911c08746573" - "743336303200921c08746573743336303300931c08746573743336303400941c08746573743336303500951c087465" - "73743336303600961c08746573743336303700971c08746573743336303800981c08746573743336303900991c0874" - "65737433363130009a1c087465737433363131009b1c087465737433363132009c1c087465737433363133009d1c08" - "7465737433363134009e1c087465737433363135009f1c08746573743336313600a01c08746573743336313700a11c" - "08746573743336313800a21c08746573743336313900a31c08746573743336323000a41c08746573743336323100a5" - "1c08746573743336323200a61c08746573743336323300a71c08746573743336323400a81c08746573743336323500" - "a91c08746573743336323600aa1c08746573743336323700ab1c08746573743336323800ac1c087465737433363239" - "00ad1c08746573743336333000ae1c08746573743336333100af1c08746573743336333200b01c0874657374333633" - "3300b11c08746573743336333400b21c08746573743336333500b31c08746573743336333600b41c08746573743336" - "333700b51c08746573743336333800b61c08746573743336333900b71c08746573743336343000b81c087465737433" - "36343100b91c08746573743336343200ba1c08746573743336343300bb1c08746573743336343400bc1c0874657374" - "3336343500bd1c08746573743336343600be1c08746573743336343700bf1c08746573743336343800c01c08746573" - "743336343900c11c08746573743336353000c21c08746573743336353100c31c08746573743336353200c41c087465" - "73743336353300c51c08746573743336353400c61c08746573743336353500c71c08746573743336353600c81c0874" - "6573743336353700c91c08746573743336353800ca1c08746573743336353900cb1c08746573743336363000cc1c08" - "746573743336363100cd1c08746573743336363200ce1c08746573743336363300cf1c08746573743336363400d01c" - "08746573743336363500d11c08746573743336363600d21c08746573743336363700d31c08746573743336363800d4" - "1c08746573743336363900d51c08746573743336373000d61c08746573743336373100d71c08746573743336373200" - "d81c08746573743336373300d91c08746573743336373400da1c08746573743336373500db1c087465737433363736" - "00dc1c08746573743336373700dd1c08746573743336373800de1c08746573743336373900df1c0874657374333638" - "3000e01c08746573743336383100e11c08746573743336383200e21c08746573743336383300e31c08746573743336" - "383400e41c08746573743336383500e51c08746573743336383600e61c08746573743336383700e71c087465737433" - "36383800e81c08746573743336383900e91c08746573743336393000ea1c08746573743336393100eb1c0874657374" - "3336393200ec1c08746573743336393300ed1c08746573743336393400ee1c08746573743336393500ef1c08746573" - "743336393600f01c08746573743336393700f11c08746573743336393800f21c08746573743336393900f31c087465" - "73743337303000f41c08746573743337303100f51c08746573743337303200f61c08746573743337303300f71c0874" - "6573743337303400f81c08746573743337303500f91c08746573743337303600fa1c08746573743337303700fb1c08" - "746573743337303800fc1c08746573743337303900fd1c08746573743337313000fe1c08746573743337313100ff1c" - "08746573743337313200801d08746573743337313300811d08746573743337313400821d0874657374333731350083" - "1d08746573743337313600841d08746573743337313700851d08746573743337313800861d08746573743337313900" - "871d08746573743337323000881d08746573743337323100891d087465737433373232008a1d087465737433373233" - "008b1d087465737433373234008c1d087465737433373235008d1d087465737433373236008e1d0874657374333732" - "37008f1d08746573743337323800901d08746573743337323900911d08746573743337333000921d08746573743337" - "333100931d08746573743337333200941d08746573743337333300951d08746573743337333400961d087465737433" - "37333500971d08746573743337333600981d08746573743337333700991d087465737433373338009a1d0874657374" - "33373339009b1d087465737433373430009c1d087465737433373431009d1d087465737433373432009e1d08746573" - "7433373433009f1d08746573743337343400a01d08746573743337343500a11d08746573743337343600a21d087465" - "73743337343700a31d08746573743337343800a41d08746573743337343900a51d08746573743337353000a61d0874" - "6573743337353100a71d08746573743337353200a81d08746573743337353300a91d08746573743337353400aa1d08" - "746573743337353500ab1d08746573743337353600ac1d08746573743337353700ad1d08746573743337353800ae1d" - "08746573743337353900af1d08746573743337363000b01d08746573743337363100b11d08746573743337363200b2" - "1d08746573743337363300b31d08746573743337363400b41d08746573743337363500b51d08746573743337363600" - "b61d08746573743337363700b71d08746573743337363800b81d08746573743337363900b91d087465737433373730" - "00ba1d08746573743337373100bb1d08746573743337373200bc1d08746573743337373300bd1d0874657374333737" - "3400be1d08746573743337373500bf1d08746573743337373600c01d08746573743337373700c11d08746573743337" - "373800c21d08746573743337373900c31d08746573743337383000c41d08746573743337383100c51d087465737433" - "37383200c61d08746573743337383300c71d08746573743337383400c81d08746573743337383500c91d0874657374" - "3337383600ca1d08746573743337383700cb1d08746573743337383800cc1d08746573743337383900cd1d08746573" - "743337393000ce1d08746573743337393100cf1d08746573743337393200d01d08746573743337393300d11d087465" - "73743337393400d21d08746573743337393500d31d08746573743337393600d41d08746573743337393700d51d0874" - "6573743337393800d61d08746573743337393900d71d08746573743338303000d81d08746573743338303100d91d08" - "746573743338303200da1d08746573743338303300db1d08746573743338303400dc1d08746573743338303500dd1d" - "08746573743338303600de1d08746573743338303700df1d08746573743338303800e01d08746573743338303900e1" - "1d08746573743338313000e21d08746573743338313100e31d08746573743338313200e41d08746573743338313300" - "e51d08746573743338313400e61d08746573743338313500e71d08746573743338313600e81d087465737433383137" - "00e91d08746573743338313800ea1d08746573743338313900eb1d08746573743338323000ec1d0874657374333832" - "3100ed1d08746573743338323200ee1d08746573743338323300ef1d08746573743338323400f01d08746573743338" - "323500f11d08746573743338323600f21d08746573743338323700f31d08746573743338323800f41d087465737433" - "38323900f51d08746573743338333000f61d08746573743338333100f71d08746573743338333200f81d0874657374" - "3338333300f91d08746573743338333400fa1d08746573743338333500fb1d08746573743338333600fc1d08746573" - "743338333700fd1d08746573743338333800fe1d08746573743338333900ff1d08746573743338343000801e087465" - "73743338343100811e08746573743338343200821e08746573743338343300831e08746573743338343400841e0874" - "6573743338343500851e08746573743338343600861e08746573743338343700871e08746573743338343800881e08" - "746573743338343900891e087465737433383530008a1e087465737433383531008b1e087465737433383532008c1e" - "087465737433383533008d1e087465737433383534008e1e087465737433383535008f1e0874657374333835360090" - "1e08746573743338353700911e08746573743338353800921e08746573743338353900931e08746573743338363000" - "941e08746573743338363100951e08746573743338363200961e08746573743338363300971e087465737433383634" - "00981e08746573743338363500991e087465737433383636009a1e087465737433383637009b1e0874657374333836" - "38009c1e087465737433383639009d1e087465737433383730009e1e087465737433383731009f1e08746573743338" - "373200a01e08746573743338373300a11e08746573743338373400a21e08746573743338373500a31e087465737433" - "38373600a41e08746573743338373700a51e08746573743338373800a61e08746573743338373900a71e0874657374" - "3338383000a81e08746573743338383100a91e08746573743338383200aa1e08746573743338383300ab1e08746573" - "743338383400ac1e08746573743338383500ad1e08746573743338383600ae1e08746573743338383700af1e087465" - "73743338383800b01e08746573743338383900b11e08746573743338393000b21e08746573743338393100b31e0874" - "6573743338393200b41e08746573743338393300b51e08746573743338393400b61e08746573743338393500b71e08" - "746573743338393600b81e08746573743338393700b91e08746573743338393800ba1e08746573743338393900bb1e" - "08746573743339303000bc1e08746573743339303100bd1e08746573743339303200be1e08746573743339303300bf" - "1e08746573743339303400c01e08746573743339303500c11e08746573743339303600c21e08746573743339303700" - "c31e08746573743339303800c41e08746573743339303900c51e08746573743339313000c61e087465737433393131" - "00c71e08746573743339313200c81e08746573743339313300c91e08746573743339313400ca1e0874657374333931" - "3500cb1e08746573743339313600cc1e08746573743339313700cd1e08746573743339313800ce1e08746573743339" - "313900cf1e08746573743339323000d01e08746573743339323100d11e08746573743339323200d21e087465737433" - "39323300d31e08746573743339323400d41e08746573743339323500d51e08746573743339323600d61e0874657374" - "3339323700d71e08746573743339323800d81e08746573743339323900d91e08746573743339333000da1e08746573" - "743339333100db1e08746573743339333200dc1e08746573743339333300dd1e08746573743339333400de1e087465" - "73743339333500df1e08746573743339333600e01e08746573743339333700e11e08746573743339333800e21e0874" - "6573743339333900e31e08746573743339343000e41e08746573743339343100e51e08746573743339343200e61e08" - "746573743339343300e71e08746573743339343400e81e08746573743339343500e91e08746573743339343600ea1e" - "08746573743339343700eb1e08746573743339343800ec1e08746573743339343900ed1e08746573743339353000ee" - "1e08746573743339353100ef1e08746573743339353200f01e08746573743339353300f11e08746573743339353400" - "f21e08746573743339353500f31e08746573743339353600f41e08746573743339353700f51e087465737433393538" - "00f61e08746573743339353900f71e08746573743339363000f81e08746573743339363100f91e0874657374333936" - "3200fa1e08746573743339363300fb1e08746573743339363400fc1e08746573743339363500fd1e08746573743339" - "363600fe1e08746573743339363700ff1e08746573743339363800801f08746573743339363900811f087465737433" - "39373000821f08746573743339373100831f08746573743339373200841f08746573743339373300851f0874657374" - "3339373400861f08746573743339373500871f08746573743339373600881f08746573743339373700891f08746573" - "7433393738008a1f087465737433393739008b1f087465737433393830008c1f087465737433393831008d1f087465" - "737433393832008e1f087465737433393833008f1f08746573743339383400901f08746573743339383500911f0874" - "6573743339383600921f08746573743339383700931f08746573743339383800941f08746573743339383900951f08" - "746573743339393000961f08746573743339393100971f08746573743339393200981f08746573743339393300991f" - "087465737433393934009a1f087465737433393935009b1f087465737433393936009c1f087465737433393937009d" - "1f087465737433393938009e1f087465737433393939009f1f08746573743430303000a01f08746573743430303100" - "a11f08746573743430303200a21f08746573743430303300a31f08746573743430303400a41f087465737434303035" - "00a51f08746573743430303600a61f08746573743430303700a71f08746573743430303800a81f0874657374343030" - "3900a91f08746573743430313000aa1f08746573743430313100ab1f08746573743430313200ac1f08746573743430" - "313300ad1f08746573743430313400ae1f08746573743430313500af1f08746573743430313600b01f087465737434" - "30313700b11f08746573743430313800b21f08746573743430313900b31f08746573743430323000b41f0874657374" - "3430323100b51f08746573743430323200b61f08746573743430323300b71f08746573743430323400b81f08746573" - "743430323500b91f08746573743430323600ba1f08746573743430323700bb1f08746573743430323800bc1f087465" - "73743430323900bd1f08746573743430333000be1f08746573743430333100bf1f08746573743430333200c01f0874" - "6573743430333300c11f08746573743430333400c21f08746573743430333500c31f08746573743430333600c41f08" - "746573743430333700c51f08746573743430333800c61f08746573743430333900c71f08746573743430343000c81f" - "08746573743430343100c91f08746573743430343200ca1f08746573743430343300cb1f08746573743430343400cc" - "1f08746573743430343500cd1f08746573743430343600ce1f08746573743430343700cf1f08746573743430343800" - "d01f08746573743430343900d11f08746573743430353000d21f08746573743430353100d31f087465737434303532" - "00d41f08746573743430353300d51f08746573743430353400d61f08746573743430353500d71f0874657374343035" - "3600d81f08746573743430353700d91f08746573743430353800da1f08746573743430353900db1f08746573743430" - "363000dc1f08746573743430363100dd1f08746573743430363200de1f08746573743430363300df1f087465737434" - "30363400e01f08746573743430363500e11f08746573743430363600e21f08746573743430363700e31f0874657374" - "3430363800e41f08746573743430363900e51f08746573743430373000e61f08746573743430373100e71f08746573" - "743430373200e81f08746573743430373300e91f08746573743430373400ea1f08746573743430373500eb1f087465" - "73743430373600ec1f08746573743430373700ed1f08746573743430373800ee1f08746573743430373900ef1f0874" - "6573743430383000f01f08746573743430383100f11f08746573743430383200f21f08746573743430383300f31f08" - "746573743430383400f41f08746573743430383500f51f08746573743430383600f61f08746573743430383700f71f" - "08746573743430383800f81f08746573743430383900f91f08746573743430393000fa1f08746573743430393100fb" - "1f08746573743430393200fc1f08746573743430393300fd1f08746573743430393400fe1f08746573743430393500" - "ff1f087465737434303936008020087465737434303937008120087465737434303938008220087465737434303939" - "0083200874657374343130300084200874657374343130310085200874657374343130320086200874657374343130" - "33008720087465737434313034008820087465737434313035008920087465737434313036008a2008746573743431" - "3037008b20087465737434313038008c20087465737434313039008d20087465737434313130008e20087465737434" - "313131008f200874657374343131320090200874657374343131330091200874657374343131340092200874657374" - "3431313500932008746573743431313600942008746573743431313700952008746573743431313800962008746573" - "7434313139009720087465737434313230009820087465737434313231009920087465737434313232009a20087465" - "737434313233009b20087465737434313234009c20087465737434313235009d20087465737434313236009e200874" - "65737434313237009f2008746573743431323800a02008746573743431323900a12008746573743431333000a22008" - "746573743431333100a32008746573743431333200a42008746573743431333300a52008746573743431333400a620" - "08746573743431333500a72008746573743431333600a82008746573743431333700a92008746573743431333800aa" - "2008746573743431333900ab2008746573743431343000ac2008746573743431343100ad2008746573743431343200" - "ae2008746573743431343300af2008746573743431343400b02008746573743431343500b120087465737434313436" - "00b22008746573743431343700b32008746573743431343800b42008746573743431343900b5200874657374343135" - "3000b62008746573743431353100b72008746573743431353200b82008746573743431353300b92008746573743431" - "353400ba2008746573743431353500bb2008746573743431353600bc2008746573743431353700bd20087465737434" - "31353800be2008746573743431353900bf2008746573743431363000c02008746573743431363100c1200874657374" - "3431363200c22008746573743431363300c32008746573743431363400c42008746573743431363500c52008746573" - "743431363600c62008746573743431363700c72008746573743431363800c82008746573743431363900c920087465" - "73743431373000ca2008746573743431373100cb2008746573743431373200cc2008746573743431373300cd200874" - "6573743431373400ce2008746573743431373500cf2008746573743431373600d02008746573743431373700d12008" - "746573743431373800d22008746573743431373900d32008746573743431383000d42008746573743431383100d520" - "08746573743431383200d62008746573743431383300d72008746573743431383400d82008746573743431383500d9" - "2008746573743431383600da2008746573743431383700db2008746573743431383800dc2008746573743431383900" - "dd2008746573743431393000de2008746573743431393100df2008746573743431393200e020087465737434313933" - "00e12008746573743431393400e22008746573743431393500e32008746573743431393600e4200874657374343139" - "3700e52008746573743431393800e62008746573743431393900e72008746573743432303000e82008746573743432" - "303100e92008746573743432303200ea2008746573743432303300eb2008746573743432303400ec20087465737434" - "32303500ed2008746573743432303600ee2008746573743432303700ef2008746573743432303800f0200874657374" - "3432303900f12008746573743432313000f22008746573743432313100f32008746573743432313200f42008746573" - "743432313300f52008746573743432313400f62008746573743432313500f72008746573743432313600f820087465" - "73743432313700f92008746573743432313800fa2008746573743432313900fb2008746573743432323000fc200874" - "6573743432323100fd2008746573743432323200fe2008746573743432323300ff2008746573743432323400802108" - "7465737434323235008121087465737434323236008221087465737434323237008321087465737434323238008421" - "0874657374343232390085210874657374343233300086210874657374343233310087210874657374343233320088" - "21087465737434323333008921087465737434323334008a21087465737434323335008b2108746573743432333600" - "8c21087465737434323337008d21087465737434323338008e21087465737434323339008f21087465737434323430" - "0090210874657374343234310091210874657374343234320092210874657374343234330093210874657374343234" - "3400942108746573743432343500952108746573743432343600962108746573743432343700972108746573743432" - "3438009821087465737434323439009921087465737434323530009a21087465737434323531009b21087465737434" - "323532009c21087465737434323533009d21087465737434323534009e21087465737434323535009f210874657374" - "3432353600a02108746573743432353700a12108746573743432353800a22108746573743432353900a32108746573" - "743432363000a42108746573743432363100a52108746573743432363200a62108746573743432363300a721087465" - "73743432363400a82108746573743432363500a92108746573743432363600aa2108746573743432363700ab210874" - "6573743432363800ac2108746573743432363900ad2108746573743432373000ae2108746573743432373100af2108" - "746573743432373200b02108746573743432373300b12108746573743432373400b22108746573743432373500b321" - "08746573743432373600b42108746573743432373700b52108746573743432373800b62108746573743432373900b7" - "2108746573743432383000b82108746573743432383100b92108746573743432383200ba2108746573743432383300" - "bb2108746573743432383400bc2108746573743432383500bd2108746573743432383600be21087465737434323837" - "00bf2108746573743432383800c02108746573743432383900c12108746573743432393000c2210874657374343239" - "3100c32108746573743432393200c42108746573743432393300c52108746573743432393400c62108746573743432" - "393500c72108746573743432393600c82108746573743432393700c92108746573743432393800ca21087465737434" - "32393900cb2108746573743433303000cc2108746573743433303100cd2108746573743433303200ce210874657374" - "3433303300cf2108746573743433303400d02108746573743433303500d12108746573743433303600d22108746573" - "743433303700d32108746573743433303800d42108746573743433303900d52108746573743433313000d621087465" - "73743433313100d72108746573743433313200d82108746573743433313300d92108746573743433313400da210874" - "6573743433313500db2108746573743433313600dc2108746573743433313700dd2108746573743433313800de2108" - "746573743433313900df2108746573743433323000e02108746573743433323100e12108746573743433323200e221" - "08746573743433323300e32108746573743433323400e42108746573743433323500e52108746573743433323600e6" - "2108746573743433323700e72108746573743433323800e82108746573743433323900e92108746573743433333000" - "ea2108746573743433333100eb2108746573743433333200ec2108746573743433333300ed21087465737434333334" - "00ee2108746573743433333500ef2108746573743433333600f02108746573743433333700f1210874657374343333" - "3800f22108746573743433333900f32108746573743433343000f42108746573743433343100f52108746573743433" - "343200f62108746573743433343300f72108746573743433343400f82108746573743433343500f921087465737434" - "33343600fa2108746573743433343700fb2108746573743433343800fc2108746573743433343900fd210874657374" - "3433353000fe2108746573743433353100ff2108746573743433353200802208746573743433353300812208746573" - "7434333534008222087465737434333535008322087465737434333536008422087465737434333537008522087465" - "7374343335380086220874657374343335390087220874657374343336300088220874657374343336310089220874" - "65737434333632008a22087465737434333633008b22087465737434333634008c22087465737434333635008d2208" - "7465737434333636008e22087465737434333637008f22087465737434333638009022087465737434333639009122" - "0874657374343337300092220874657374343337310093220874657374343337320094220874657374343337330095" - "2208746573743433373400962208746573743433373500972208746573743433373600982208746573743433373700" - "9922087465737434333738009a22087465737434333739009b22087465737434333830009c22087465737434333831" - "009d22087465737434333832009e22087465737434333833009f2208746573743433383400a0220874657374343338" - "3500a12208746573743433383600a22208746573743433383700a32208746573743433383800a42208746573743433" - "383900a52208746573743433393000a62208746573743433393100a72208746573743433393200a822087465737434" - "33393300a92208746573743433393400aa2208746573743433393500ab2208746573743433393600ac220874657374" - "3433393700ad2208746573743433393800ae2208746573743433393900af2208746573743434303000b02208746573" - "743434303100b12208746573743434303200b22208746573743434303300b32208746573743434303400b422087465" - "73743434303500b52208746573743434303600b62208746573743434303700b72208746573743434303800b8220874" - "6573743434303900b92208746573743434313000ba2208746573743434313100bb2208746573743434313200bc2208" - "746573743434313300bd2208746573743434313400be2208746573743434313500bf2208746573743434313600c022" - "08746573743434313700c12208746573743434313800c22208746573743434313900c32208746573743434323000c4" - "2208746573743434323100c52208746573743434323200c62208746573743434323300c72208746573743434323400" - "c82208746573743434323500c92208746573743434323600ca2208746573743434323700cb22087465737434343238" - "00cc2208746573743434323900cd2208746573743434333000ce2208746573743434333100cf220874657374343433" - "3200d02208746573743434333300d12208746573743434333400d22208746573743434333500d32208746573743434" - "333600d42208746573743434333700d52208746573743434333800d62208746573743434333900d722087465737434" - "34343000d82208746573743434343100d92208746573743434343200da2208746573743434343300db220874657374" - "3434343400dc2208746573743434343500dd2208746573743434343600de2208746573743434343700df2208746573" - "743434343800e02208746573743434343900e12208746573743434353000e22208746573743434353100e322087465" - "73743434353200e42208746573743434353300e52208746573743434353400e62208746573743434353500e7220874" - "6573743434353600e82208746573743434353700e92208746573743434353800ea2208746573743434353900eb2208" - "746573743434363000ec2208746573743434363100ed2208746573743434363200ee2208746573743434363300ef22" - "08746573743434363400f02208746573743434363500f12208746573743434363600f22208746573743434363700f3" - "2208746573743434363800f42208746573743434363900f52208746573743434373000f62208746573743434373100" - "f72208746573743434373200f82208746573743434373300f92208746573743434373400fa22087465737434343735" - "00fb2208746573743434373600fc2208746573743434373700fd2208746573743434373800fe220874657374343437" - "3900ff2208746573743434383000802308746573743434383100812308746573743434383200822308746573743434" - "3833008323087465737434343834008423087465737434343835008523087465737434343836008623087465737434" - "343837008723087465737434343838008823087465737434343839008923087465737434343930008a230874657374" - "34343931008b23087465737434343932008c23087465737434343933008d23087465737434343934008e2308746573" - "7434343935008f23087465737434343936009023087465737434343937009123087465737434343938009223087465" - "7374343439390093230874657374343530300094230874657374343530310095230874657374343530320096230874" - "65737434353033009723087465737434353034009823087465737434353035009923087465737434353036009a2308" - "7465737434353037009b23087465737434353038009c23087465737434353039009d23087465737434353130009e23" - "087465737434353131009f2308746573743435313200a02308746573743435313300a12308746573743435313400a2" - "2308746573743435313500a32308746573743435313600a42308746573743435313700a52308746573743435313800" - "a62308746573743435313900a72308746573743435323000a82308746573743435323100a923087465737434353232" - "00aa2308746573743435323300ab2308746573743435323400ac2308746573743435323500ad230874657374343532" - "3600ae2308746573743435323700af2308746573743435323800b02308746573743435323900b12308746573743435" - "333000b22308746573743435333100b32308746573743435333200b42308746573743435333300b523087465737434" - "35333400b62308746573743435333500b72308746573743435333600b82308746573743435333700b9230874657374" - "3435333800ba2308746573743435333900bb2308746573743435343000bc2308746573743435343100bd2308746573" - "743435343200be2308746573743435343300bf2308746573743435343400c02308746573743435343500c123087465" - "73743435343600c22308746573743435343700c32308746573743435343800c42308746573743435343900c5230874" - "6573743435353000c62308746573743435353100c72308746573743435353200c82308746573743435353300c92308" - "746573743435353400ca2308746573743435353500cb2308746573743435353600cc2308746573743435353700cd23" - "08746573743435353800ce2308746573743435353900cf2308746573743435363000d02308746573743435363100d1" - "2308746573743435363200d22308746573743435363300d32308746573743435363400d42308746573743435363500" - "d52308746573743435363600d62308746573743435363700d72308746573743435363800d823087465737434353639" - "00d92308746573743435373000da2308746573743435373100db2308746573743435373200dc230874657374343537" - "3300dd2308746573743435373400de2308746573743435373500df2308746573743435373600e02308746573743435" - "373700e12308746573743435373800e22308746573743435373900e32308746573743435383000e423087465737434" - "35383100e52308746573743435383200e62308746573743435383300e72308746573743435383400e8230874657374" - "3435383500e92308746573743435383600ea2308746573743435383700eb2308746573743435383800ec2308746573" - "743435383900ed2308746573743435393000ee2308746573743435393100ef2308746573743435393200f023087465" - "73743435393300f12308746573743435393400f22308746573743435393500f32308746573743435393600f4230874" - "6573743435393700f52308746573743435393800f62308746573743435393900f72308746573743436303000f82308" - "746573743436303100f92308746573743436303200fa2308746573743436303300fb2308746573743436303400fc23" - "08746573743436303500fd2308746573743436303600fe2308746573743436303700ff230874657374343630380080" - "2408746573743436303900812408746573743436313000822408746573743436313100832408746573743436313200" - "8424087465737434363133008524087465737434363134008624087465737434363135008724087465737434363136" - "008824087465737434363137008924087465737434363138008a24087465737434363139008b240874657374343632" - "30008c24087465737434363231008d24087465737434363232008e24087465737434363233008f2408746573743436" - "3234009024087465737434363235009124087465737434363236009224087465737434363237009324087465737434" - "3632380094240874657374343632390095240874657374343633300096240874657374343633310097240874657374" - "34363332009824087465737434363333009924087465737434363334009a24087465737434363335009b2408746573" - "7434363336009c24087465737434363337009d24087465737434363338009e24087465737434363339009f24087465" - "73743436343000a02408746573743436343100a12408746573743436343200a22408746573743436343300a3240874" - "6573743436343400a42408746573743436343500a52408746573743436343600a62408746573743436343700a72408" - "746573743436343800a82408746573743436343900a92408746573743436353000aa2408746573743436353100ab24" - "08746573743436353200ac2408746573743436353300ad2408746573743436353400ae2408746573743436353500af" - "2408746573743436353600b02408746573743436353700b12408746573743436353800b22408746573743436353900" - "b32408746573743436363000b42408746573743436363100b52408746573743436363200b624087465737434363633" - "00b72408746573743436363400b82408746573743436363500b92408746573743436363600ba240874657374343636" - "3700bb2408746573743436363800bc2408746573743436363900bd2408746573743436373000be2408746573743436" - "373100bf2408746573743436373200c02408746573743436373300c12408746573743436373400c224087465737434" - "36373500c32408746573743436373600c42408746573743436373700c52408746573743436373800c6240874657374" - "3436373900c72408746573743436383000c82408746573743436383100c92408746573743436383200ca2408746573" - "743436383300cb2408746573743436383400cc2408746573743436383500cd2408746573743436383600ce24087465" - "73743436383700cf2408746573743436383800d02408746573743436383900d12408746573743436393000d2240874" - "6573743436393100d32408746573743436393200d42408746573743436393300d52408746573743436393400d62408" - "746573743436393500d72408746573743436393600d82408746573743436393700d92408746573743436393800da24" - "08746573743436393900db2408746573743437303000dc2408746573743437303100dd2408746573743437303200de" - "2408746573743437303300df2408746573743437303400e02408746573743437303500e12408746573743437303600" - "e22408746573743437303700e32408746573743437303800e42408746573743437303900e524087465737434373130" - "00e62408746573743437313100e72408746573743437313200e82408746573743437313300e9240874657374343731" - "3400ea2408746573743437313500eb2408746573743437313600ec2408746573743437313700ed2408746573743437" - "313800ee2408746573743437313900ef2408746573743437323000f02408746573743437323100f124087465737434" - "37323200f22408746573743437323300f32408746573743437323400f42408746573743437323500f5240874657374" - "3437323600f62408746573743437323700f72408746573743437323800f82408746573743437323900f92408746573" - "743437333000fa2408746573743437333100fb2408746573743437333200fc2408746573743437333300fd24087465" - "73743437333400fe2408746573743437333500ff240874657374343733360080250874657374343733370081250874" - "6573743437333800822508746573743437333900832508746573743437343000842508746573743437343100852508" - "7465737434373432008625087465737434373433008725087465737434373434008825087465737434373435008925" - "087465737434373436008a25087465737434373437008b25087465737434373438008c25087465737434373439008d" - "25087465737434373530008e25087465737434373531008f2508746573743437353200902508746573743437353300" - "9125087465737434373534009225087465737434373535009325087465737434373536009425087465737434373537" - "0095250874657374343735380096250874657374343735390097250874657374343736300098250874657374343736" - "31009925087465737434373632009a25087465737434373633009b25087465737434373634009c2508746573743437" - "3635009d25087465737434373636009e25087465737434373637009f2508746573743437363800a025087465737434" - "37363900a12508746573743437373000a22508746573743437373100a32508746573743437373200a4250874657374" - "3437373300a52508746573743437373400a62508746573743437373500a72508746573743437373600a82508746573" - "743437373700a92508746573743437373800aa2508746573743437373900ab2508746573743437383000ac25087465" - "73743437383100ad2508746573743437383200ae2508746573743437383300af2508746573743437383400b0250874" - "6573743437383500b12508746573743437383600b22508746573743437383700b32508746573743437383800b42508" - "746573743437383900b52508746573743437393000b62508746573743437393100b72508746573743437393200b825" - "08746573743437393300b92508746573743437393400ba2508746573743437393500bb2508746573743437393600bc" - "2508746573743437393700bd2508746573743437393800be2508746573743437393900bf2508746573743438303000" - "c02508746573743438303100c12508746573743438303200c22508746573743438303300c325087465737434383034" - "00c42508746573743438303500c52508746573743438303600c62508746573743438303700c7250874657374343830" - "3800c82508746573743438303900c92508746573743438313000ca2508746573743438313100cb2508746573743438" - "313200cc2508746573743438313300cd2508746573743438313400ce2508746573743438313500cf25087465737434" - "38313600d02508746573743438313700d12508746573743438313800d22508746573743438313900d3250874657374" - "3438323000d42508746573743438323100d52508746573743438323200d62508746573743438323300d72508746573" - "743438323400d82508746573743438323500d92508746573743438323600da2508746573743438323700db25087465" - "73743438323800dc2508746573743438323900dd2508746573743438333000de2508746573743438333100df250874" - "6573743438333200e02508746573743438333300e12508746573743438333400e22508746573743438333500e32508" - "746573743438333600e42508746573743438333700e52508746573743438333800e62508746573743438333900e725" - "08746573743438343000e82508746573743438343100e92508746573743438343200ea2508746573743438343300eb" - "2508746573743438343400ec2508746573743438343500ed2508746573743438343600ee2508746573743438343700" - "ef2508746573743438343800f02508746573743438343900f12508746573743438353000f225087465737434383531" - "00f32508746573743438353200f42508746573743438353300f52508746573743438353400f6250874657374343835" - "3500f72508746573743438353600f82508746573743438353700f92508746573743438353800fa2508746573743438" - "353900fb2508746573743438363000fc2508746573743438363100fd2508746573743438363200fe25087465737434" - "38363300ff250874657374343836340080260874657374343836350081260874657374343836360082260874657374" - "3438363700832608746573743438363800842608746573743438363900852608746573743438373000862608746573" - "7434383731008726087465737434383732008826087465737434383733008926087465737434383734008a26087465" - "737434383735008b26087465737434383736008c26087465737434383737008d26087465737434383738008e260874" - "65737434383739008f2608746573743438383000902608746573743438383100912608746573743438383200922608" - "7465737434383833009326087465737434383834009426087465737434383835009526087465737434383836009626" - "087465737434383837009726087465737434383838009826087465737434383839009926087465737434383930009a" - "26087465737434383931009b26087465737434383932009c26087465737434383933009d2608746573743438393400" - "9e26087465737434383935009f2608746573743438393600a02608746573743438393700a126087465737434383938" - "00a22608746573743438393900a32608746573743439303000a42608746573743439303100a5260874657374343930" - "3200a62608746573743439303300a72608746573743439303400a82608746573743439303500a92608746573743439" - "303600aa2608746573743439303700ab2608746573743439303800ac2608746573743439303900ad26087465737434" - "39313000ae2608746573743439313100af2608746573743439313200b02608746573743439313300b1260874657374" - "3439313400b22608746573743439313500b32608746573743439313600b42608746573743439313700b52608746573" - "743439313800b62608746573743439313900b72608746573743439323000b82608746573743439323100b926087465" - "73743439323200ba2608746573743439323300bb2608746573743439323400bc2608746573743439323500bd260874" - "6573743439323600be2608746573743439323700bf2608746573743439323800c02608746573743439323900c12608" - "746573743439333000c22608746573743439333100c32608746573743439333200c42608746573743439333300c526" - "08746573743439333400c62608746573743439333500c72608746573743439333600c82608746573743439333700c9" - "2608746573743439333800ca2608746573743439333900cb2608746573743439343000cc2608746573743439343100" - "cd2608746573743439343200ce2608746573743439343300cf2608746573743439343400d026087465737434393435" - "00d12608746573743439343600d22608746573743439343700d32608746573743439343800d4260874657374343934" - "3900d52608746573743439353000d62608746573743439353100d72608746573743439353200d82608746573743439" - "353300d92608746573743439353400da2608746573743439353500db2608746573743439353600dc26087465737434" - "39353700dd2608746573743439353800de2608746573743439353900df2608746573743439363000e0260874657374" - "3439363100e12608746573743439363200e22608746573743439363300e32608746573743439363400e42608746573" - "743439363500e52608746573743439363600e62608746573743439363700e72608746573743439363800e826087465" - "73743439363900e92608746573743439373000ea2608746573743439373100eb2608746573743439373200ec260874" - "6573743439373300ed2608746573743439373400ee2608746573743439373500ef2608746573743439373600f02608" - "746573743439373700f12608746573743439373800f22608746573743439373900f32608746573743439383000f426" - "08746573743439383100f52608746573743439383200f62608746573743439383300f72608746573743439383400f8" - "2608746573743439383500f92608746573743439383600fa2608746573743439383700fb2608746573743439383800" - "fc2608746573743439383900fd2608746573743439393000fe2608746573743439393100ff26087465737434393932" - "0080270874657374343939330081270874657374343939340082270874657374343939350083270874657374343939" - "360084270874657374343939370085270874657374343939380086270874657374343939390087270ac2b802882707" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020" - "016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07002000" - "20016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020" - "0020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700" - "200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b07" - "00200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b" - "0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a" - "0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b0700200020016a0b070020002001" - "6a0b"; diff --git a/src/test/app/wasm_fixtures/fixture_locals_10k.cpp b/src/test/app/wasm_fixtures/fixture_locals_10k.cpp deleted file mode 100644 index 75a799243d..0000000000 --- a/src/test/app/wasm_fixtures/fixture_locals_10k.cpp +++ /dev/null @@ -1,2128 +0,0 @@ -// TODO: consider moving these to separate files (and figure out the build) - -#include - -#include - -extern std::string const kLocals10kHex = - "0061736d0100000001070160027f7f017f03020100070801047465737400000a9b8a0601978a06018e4e7f20002001" - "6a2102200120026a2103200220036a2104200320046a2105200420056a2106200520066a2107200620076a21082007" - "20086a2109200820096a210a2009200a6a210b200a200b6a210c200b200c6a210d200c200d6a210e200d200e6a210f" - "200e200f6a2110200f20106a2111201020116a2112201120126a2113201220136a2114201320146a2115201420156a" - "2116201520166a2117201620176a2118201720186a2119201820196a211a2019201a6a211b201a201b6a211c201b20" - "1c6a211d201c201d6a211e201d201e6a211f201e201f6a2120201f20206a2121202020216a2122202120226a212320" - "2220236a2124202320246a2125202420256a2126202520266a2127202620276a2128202720286a2129202820296a21" - "2a2029202a6a212b202a202b6a212c202b202c6a212d202c202d6a212e202d202e6a212f202e202f6a2130202f2030" - "6a2131203020316a2132203120326a2133203220336a2134203320346a2135203420356a2136203520366a21372036" - "20376a2138203720386a2139203820396a213a2039203a6a213b203a203b6a213c203b203c6a213d203c203d6a213e" - "203d203e6a213f203e203f6a2140203f20406a2141204020416a2142204120426a2143204220436a2144204320446a" - "2145204420456a2146204520466a2147204620476a2148204720486a2149204820496a214a2049204a6a214b204a20" - "4b6a214c204b204c6a214d204c204d6a214e204d204e6a214f204e204f6a2150204f20506a2151205020516a215220" - "5120526a2153205220536a2154205320546a2155205420556a2156205520566a2157205620576a2158205720586a21" - "59205820596a215a2059205a6a215b205a205b6a215c205b205c6a215d205c205d6a215e205d205e6a215f205e205f" - "6a2160205f20606a2161206020616a2162206120626a2163206220636a2164206320646a2165206420656a21662065" - "20666a2167206620676a2168206720686a2169206820696a216a2069206a6a216b206a206b6a216c206b206c6a216d" - "206c206d6a216e206d206e6a216f206e206f6a2170206f20706a2171207020716a2172207120726a2173207220736a" - "2174207320746a2175207420756a2176207520766a2177207620776a2178207720786a2179207820796a217a207920" - "7a6a217b207a207b6a217c207b207c6a217d207c207d6a217e207d207e6a217f207e207f6a218001207f2080016a21" - "81012080012081016a2182012081012082016a2183012082012083016a2184012083012084016a2185012084012085" - "016a2186012085012086016a2187012086012087016a2188012087012088016a2189012088012089016a218a012089" - "01208a016a218b01208a01208b016a218c01208b01208c016a218d01208c01208d016a218e01208d01208e016a218f" - "01208e01208f016a219001208f012090016a2191012090012091016a2192012091012092016a219301209201209301" - "6a2194012093012094016a2195012094012095016a2196012095012096016a2197012096012097016a219801209701" - "2098016a2199012098012099016a219a01209901209a016a219b01209a01209b016a219c01209b01209c016a219d01" - "209c01209d016a219e01209d01209e016a219f01209e01209f016a21a001209f0120a0016a21a10120a00120a1016a" - "21a20120a10120a2016a21a30120a20120a3016a21a40120a30120a4016a21a50120a40120a5016a21a60120a50120" - "a6016a21a70120a60120a7016a21a80120a70120a8016a21a90120a80120a9016a21aa0120a90120aa016a21ab0120" - "aa0120ab016a21ac0120ab0120ac016a21ad0120ac0120ad016a21ae0120ad0120ae016a21af0120ae0120af016a21" - "b00120af0120b0016a21b10120b00120b1016a21b20120b10120b2016a21b30120b20120b3016a21b40120b30120b4" - "016a21b50120b40120b5016a21b60120b50120b6016a21b70120b60120b7016a21b80120b70120b8016a21b90120b8" - "0120b9016a21ba0120b90120ba016a21bb0120ba0120bb016a21bc0120bb0120bc016a21bd0120bc0120bd016a21be" - "0120bd0120be016a21bf0120be0120bf016a21c00120bf0120c0016a21c10120c00120c1016a21c20120c10120c201" - "6a21c30120c20120c3016a21c40120c30120c4016a21c50120c40120c5016a21c60120c50120c6016a21c70120c601" - "20c7016a21c80120c70120c8016a21c90120c80120c9016a21ca0120c90120ca016a21cb0120ca0120cb016a21cc01" - "20cb0120cc016a21cd0120cc0120cd016a21ce0120cd0120ce016a21cf0120ce0120cf016a21d00120cf0120d0016a" - "21d10120d00120d1016a21d20120d10120d2016a21d30120d20120d3016a21d40120d30120d4016a21d50120d40120" - "d5016a21d60120d50120d6016a21d70120d60120d7016a21d80120d70120d8016a21d90120d80120d9016a21da0120" - "d90120da016a21db0120da0120db016a21dc0120db0120dc016a21dd0120dc0120dd016a21de0120dd0120de016a21" - "df0120de0120df016a21e00120df0120e0016a21e10120e00120e1016a21e20120e10120e2016a21e30120e20120e3" - "016a21e40120e30120e4016a21e50120e40120e5016a21e60120e50120e6016a21e70120e60120e7016a21e80120e7" - "0120e8016a21e90120e80120e9016a21ea0120e90120ea016a21eb0120ea0120eb016a21ec0120eb0120ec016a21ed" - "0120ec0120ed016a21ee0120ed0120ee016a21ef0120ee0120ef016a21f00120ef0120f0016a21f10120f00120f101" - "6a21f20120f10120f2016a21f30120f20120f3016a21f40120f30120f4016a21f50120f40120f5016a21f60120f501" - "20f6016a21f70120f60120f7016a21f80120f70120f8016a21f90120f80120f9016a21fa0120f90120fa016a21fb01" - "20fa0120fb016a21fc0120fb0120fc016a21fd0120fc0120fd016a21fe0120fd0120fe016a21ff0120fe0120ff016a" - "21800220ff012080026a2181022080022081026a2182022081022082026a2183022082022083026a21840220830220" - "84026a2185022084022085026a2186022085022086026a2187022086022087026a2188022087022088026a21890220" - "88022089026a218a02208902208a026a218b02208a02208b026a218c02208b02208c026a218d02208c02208d026a21" - "8e02208d02208e026a218f02208e02208f026a219002208f022090026a2191022090022091026a2192022091022092" - "026a2193022092022093026a2194022093022094026a2195022094022095026a2196022095022096026a2197022096" - "022097026a2198022097022098026a2199022098022099026a219a02209902209a026a219b02209a02209b026a219c" - "02209b02209c026a219d02209c02209d026a219e02209d02209e026a219f02209e02209f026a21a002209f0220a002" - "6a21a10220a00220a1026a21a20220a10220a2026a21a30220a20220a3026a21a40220a30220a4026a21a50220a402" - "20a5026a21a60220a50220a6026a21a70220a60220a7026a21a80220a70220a8026a21a90220a80220a9026a21aa02" - "20a90220aa026a21ab0220aa0220ab026a21ac0220ab0220ac026a21ad0220ac0220ad026a21ae0220ad0220ae026a" - "21af0220ae0220af026a21b00220af0220b0026a21b10220b00220b1026a21b20220b10220b2026a21b30220b20220" - "b3026a21b40220b30220b4026a21b50220b40220b5026a21b60220b50220b6026a21b70220b60220b7026a21b80220" - "b70220b8026a21b90220b80220b9026a21ba0220b90220ba026a21bb0220ba0220bb026a21bc0220bb0220bc026a21" - "bd0220bc0220bd026a21be0220bd0220be026a21bf0220be0220bf026a21c00220bf0220c0026a21c10220c00220c1" - "026a21c20220c10220c2026a21c30220c20220c3026a21c40220c30220c4026a21c50220c40220c5026a21c60220c5" - "0220c6026a21c70220c60220c7026a21c80220c70220c8026a21c90220c80220c9026a21ca0220c90220ca026a21cb" - "0220ca0220cb026a21cc0220cb0220cc026a21cd0220cc0220cd026a21ce0220cd0220ce026a21cf0220ce0220cf02" - "6a21d00220cf0220d0026a21d10220d00220d1026a21d20220d10220d2026a21d30220d20220d3026a21d40220d302" - "20d4026a21d50220d40220d5026a21d60220d50220d6026a21d70220d60220d7026a21d80220d70220d8026a21d902" - "20d80220d9026a21da0220d90220da026a21db0220da0220db026a21dc0220db0220dc026a21dd0220dc0220dd026a" - "21de0220dd0220de026a21df0220de0220df026a21e00220df0220e0026a21e10220e00220e1026a21e20220e10220" - "e2026a21e30220e20220e3026a21e40220e30220e4026a21e50220e40220e5026a21e60220e50220e6026a21e70220" - "e60220e7026a21e80220e70220e8026a21e90220e80220e9026a21ea0220e90220ea026a21eb0220ea0220eb026a21" - "ec0220eb0220ec026a21ed0220ec0220ed026a21ee0220ed0220ee026a21ef0220ee0220ef026a21f00220ef0220f0" - "026a21f10220f00220f1026a21f20220f10220f2026a21f30220f20220f3026a21f40220f30220f4026a21f50220f4" - "0220f5026a21f60220f50220f6026a21f70220f60220f7026a21f80220f70220f8026a21f90220f80220f9026a21fa" - "0220f90220fa026a21fb0220fa0220fb026a21fc0220fb0220fc026a21fd0220fc0220fd026a21fe0220fd0220fe02" - "6a21ff0220fe0220ff026a21800320ff022080036a2181032080032081036a2182032081032082036a218303208203" - "2083036a2184032083032084036a2185032084032085036a2186032085032086036a2187032086032087036a218803" - "2087032088036a2189032088032089036a218a03208903208a036a218b03208a03208b036a218c03208b03208c036a" - "218d03208c03208d036a218e03208d03208e036a218f03208e03208f036a219003208f032090036a21910320900320" - "91036a2192032091032092036a2193032092032093036a2194032093032094036a2195032094032095036a21960320" - "95032096036a2197032096032097036a2198032097032098036a2199032098032099036a219a03209903209a036a21" - "9b03209a03209b036a219c03209b03209c036a219d03209c03209d036a219e03209d03209e036a219f03209e03209f" - "036a21a003209f0320a0036a21a10320a00320a1036a21a20320a10320a2036a21a30320a20320a3036a21a40320a3" - "0320a4036a21a50320a40320a5036a21a60320a50320a6036a21a70320a60320a7036a21a80320a70320a8036a21a9" - "0320a80320a9036a21aa0320a90320aa036a21ab0320aa0320ab036a21ac0320ab0320ac036a21ad0320ac0320ad03" - "6a21ae0320ad0320ae036a21af0320ae0320af036a21b00320af0320b0036a21b10320b00320b1036a21b20320b103" - "20b2036a21b30320b20320b3036a21b40320b30320b4036a21b50320b40320b5036a21b60320b50320b6036a21b703" - "20b60320b7036a21b80320b70320b8036a21b90320b80320b9036a21ba0320b90320ba036a21bb0320ba0320bb036a" - "21bc0320bb0320bc036a21bd0320bc0320bd036a21be0320bd0320be036a21bf0320be0320bf036a21c00320bf0320" - "c0036a21c10320c00320c1036a21c20320c10320c2036a21c30320c20320c3036a21c40320c30320c4036a21c50320" - "c40320c5036a21c60320c50320c6036a21c70320c60320c7036a21c80320c70320c8036a21c90320c80320c9036a21" - "ca0320c90320ca036a21cb0320ca0320cb036a21cc0320cb0320cc036a21cd0320cc0320cd036a21ce0320cd0320ce" - "036a21cf0320ce0320cf036a21d00320cf0320d0036a21d10320d00320d1036a21d20320d10320d2036a21d30320d2" - "0320d3036a21d40320d30320d4036a21d50320d40320d5036a21d60320d50320d6036a21d70320d60320d7036a21d8" - "0320d70320d8036a21d90320d80320d9036a21da0320d90320da036a21db0320da0320db036a21dc0320db0320dc03" - "6a21dd0320dc0320dd036a21de0320dd0320de036a21df0320de0320df036a21e00320df0320e0036a21e10320e003" - "20e1036a21e20320e10320e2036a21e30320e20320e3036a21e40320e30320e4036a21e50320e40320e5036a21e603" - "20e50320e6036a21e70320e60320e7036a21e80320e70320e8036a21e90320e80320e9036a21ea0320e90320ea036a" - "21eb0320ea0320eb036a21ec0320eb0320ec036a21ed0320ec0320ed036a21ee0320ed0320ee036a21ef0320ee0320" - "ef036a21f00320ef0320f0036a21f10320f00320f1036a21f20320f10320f2036a21f30320f20320f3036a21f40320" - "f30320f4036a21f50320f40320f5036a21f60320f50320f6036a21f70320f60320f7036a21f80320f70320f8036a21" - "f90320f80320f9036a21fa0320f90320fa036a21fb0320fa0320fb036a21fc0320fb0320fc036a21fd0320fc0320fd" - "036a21fe0320fd0320fe036a21ff0320fe0320ff036a21800420ff032080046a2181042080042081046a2182042081" - "042082046a2183042082042083046a2184042083042084046a2185042084042085046a2186042085042086046a2187" - "042086042087046a2188042087042088046a2189042088042089046a218a04208904208a046a218b04208a04208b04" - "6a218c04208b04208c046a218d04208c04208d046a218e04208d04208e046a218f04208e04208f046a219004208f04" - "2090046a2191042090042091046a2192042091042092046a2193042092042093046a2194042093042094046a219504" - "2094042095046a2196042095042096046a2197042096042097046a2198042097042098046a2199042098042099046a" - "219a04209904209a046a219b04209a04209b046a219c04209b04209c046a219d04209c04209d046a219e04209d0420" - "9e046a219f04209e04209f046a21a004209f0420a0046a21a10420a00420a1046a21a20420a10420a2046a21a30420" - "a20420a3046a21a40420a30420a4046a21a50420a40420a5046a21a60420a50420a6046a21a70420a60420a7046a21" - "a80420a70420a8046a21a90420a80420a9046a21aa0420a90420aa046a21ab0420aa0420ab046a21ac0420ab0420ac" - "046a21ad0420ac0420ad046a21ae0420ad0420ae046a21af0420ae0420af046a21b00420af0420b0046a21b10420b0" - "0420b1046a21b20420b10420b2046a21b30420b20420b3046a21b40420b30420b4046a21b50420b40420b5046a21b6" - "0420b50420b6046a21b70420b60420b7046a21b80420b70420b8046a21b90420b80420b9046a21ba0420b90420ba04" - "6a21bb0420ba0420bb046a21bc0420bb0420bc046a21bd0420bc0420bd046a21be0420bd0420be046a21bf0420be04" - "20bf046a21c00420bf0420c0046a21c10420c00420c1046a21c20420c10420c2046a21c30420c20420c3046a21c404" - "20c30420c4046a21c50420c40420c5046a21c60420c50420c6046a21c70420c60420c7046a21c80420c70420c8046a" - "21c90420c80420c9046a21ca0420c90420ca046a21cb0420ca0420cb046a21cc0420cb0420cc046a21cd0420cc0420" - "cd046a21ce0420cd0420ce046a21cf0420ce0420cf046a21d00420cf0420d0046a21d10420d00420d1046a21d20420" - "d10420d2046a21d30420d20420d3046a21d40420d30420d4046a21d50420d40420d5046a21d60420d50420d6046a21" - "d70420d60420d7046a21d80420d70420d8046a21d90420d80420d9046a21da0420d90420da046a21db0420da0420db" - "046a21dc0420db0420dc046a21dd0420dc0420dd046a21de0420dd0420de046a21df0420de0420df046a21e00420df" - "0420e0046a21e10420e00420e1046a21e20420e10420e2046a21e30420e20420e3046a21e40420e30420e4046a21e5" - "0420e40420e5046a21e60420e50420e6046a21e70420e60420e7046a21e80420e70420e8046a21e90420e80420e904" - "6a21ea0420e90420ea046a21eb0420ea0420eb046a21ec0420eb0420ec046a21ed0420ec0420ed046a21ee0420ed04" - "20ee046a21ef0420ee0420ef046a21f00420ef0420f0046a21f10420f00420f1046a21f20420f10420f2046a21f304" - "20f20420f3046a21f40420f30420f4046a21f50420f40420f5046a21f60420f50420f6046a21f70420f60420f7046a" - "21f80420f70420f8046a21f90420f80420f9046a21fa0420f90420fa046a21fb0420fa0420fb046a21fc0420fb0420" - "fc046a21fd0420fc0420fd046a21fe0420fd0420fe046a21ff0420fe0420ff046a21800520ff042080056a21810520" - "80052081056a2182052081052082056a2183052082052083056a2184052083052084056a2185052084052085056a21" - "86052085052086056a2187052086052087056a2188052087052088056a2189052088052089056a218a05208905208a" - "056a218b05208a05208b056a218c05208b05208c056a218d05208c05208d056a218e05208d05208e056a218f05208e" - "05208f056a219005208f052090056a2191052090052091056a2192052091052092056a2193052092052093056a2194" - "052093052094056a2195052094052095056a2196052095052096056a2197052096052097056a219805209705209805" - "6a2199052098052099056a219a05209905209a056a219b05209a05209b056a219c05209b05209c056a219d05209c05" - "209d056a219e05209d05209e056a219f05209e05209f056a21a005209f0520a0056a21a10520a00520a1056a21a205" - "20a10520a2056a21a30520a20520a3056a21a40520a30520a4056a21a50520a40520a5056a21a60520a50520a6056a" - "21a70520a60520a7056a21a80520a70520a8056a21a90520a80520a9056a21aa0520a90520aa056a21ab0520aa0520" - "ab056a21ac0520ab0520ac056a21ad0520ac0520ad056a21ae0520ad0520ae056a21af0520ae0520af056a21b00520" - "af0520b0056a21b10520b00520b1056a21b20520b10520b2056a21b30520b20520b3056a21b40520b30520b4056a21" - "b50520b40520b5056a21b60520b50520b6056a21b70520b60520b7056a21b80520b70520b8056a21b90520b80520b9" - "056a21ba0520b90520ba056a21bb0520ba0520bb056a21bc0520bb0520bc056a21bd0520bc0520bd056a21be0520bd" - "0520be056a21bf0520be0520bf056a21c00520bf0520c0056a21c10520c00520c1056a21c20520c10520c2056a21c3" - "0520c20520c3056a21c40520c30520c4056a21c50520c40520c5056a21c60520c50520c6056a21c70520c60520c705" - "6a21c80520c70520c8056a21c90520c80520c9056a21ca0520c90520ca056a21cb0520ca0520cb056a21cc0520cb05" - "20cc056a21cd0520cc0520cd056a21ce0520cd0520ce056a21cf0520ce0520cf056a21d00520cf0520d0056a21d105" - "20d00520d1056a21d20520d10520d2056a21d30520d20520d3056a21d40520d30520d4056a21d50520d40520d5056a" - "21d60520d50520d6056a21d70520d60520d7056a21d80520d70520d8056a21d90520d80520d9056a21da0520d90520" - "da056a21db0520da0520db056a21dc0520db0520dc056a21dd0520dc0520dd056a21de0520dd0520de056a21df0520" - "de0520df056a21e00520df0520e0056a21e10520e00520e1056a21e20520e10520e2056a21e30520e20520e3056a21" - "e40520e30520e4056a21e50520e40520e5056a21e60520e50520e6056a21e70520e60520e7056a21e80520e70520e8" - "056a21e90520e80520e9056a21ea0520e90520ea056a21eb0520ea0520eb056a21ec0520eb0520ec056a21ed0520ec" - "0520ed056a21ee0520ed0520ee056a21ef0520ee0520ef056a21f00520ef0520f0056a21f10520f00520f1056a21f2" - "0520f10520f2056a21f30520f20520f3056a21f40520f30520f4056a21f50520f40520f5056a21f60520f50520f605" - "6a21f70520f60520f7056a21f80520f70520f8056a21f90520f80520f9056a21fa0520f90520fa056a21fb0520fa05" - "20fb056a21fc0520fb0520fc056a21fd0520fc0520fd056a21fe0520fd0520fe056a21ff0520fe0520ff056a218006" - "20ff052080066a2181062080062081066a2182062081062082066a2183062082062083066a2184062083062084066a" - "2185062084062085066a2186062085062086066a2187062086062087066a2188062087062088066a21890620880620" - "89066a218a06208906208a066a218b06208a06208b066a218c06208b06208c066a218d06208c06208d066a218e0620" - "8d06208e066a218f06208e06208f066a219006208f062090066a2191062090062091066a2192062091062092066a21" - "93062092062093066a2194062093062094066a2195062094062095066a2196062095062096066a2197062096062097" - "066a2198062097062098066a2199062098062099066a219a06209906209a066a219b06209a06209b066a219c06209b" - "06209c066a219d06209c06209d066a219e06209d06209e066a219f06209e06209f066a21a006209f0620a0066a21a1" - "0620a00620a1066a21a20620a10620a2066a21a30620a20620a3066a21a40620a30620a4066a21a50620a40620a506" - "6a21a60620a50620a6066a21a70620a60620a7066a21a80620a70620a8066a21a90620a80620a9066a21aa0620a906" - "20aa066a21ab0620aa0620ab066a21ac0620ab0620ac066a21ad0620ac0620ad066a21ae0620ad0620ae066a21af06" - "20ae0620af066a21b00620af0620b0066a21b10620b00620b1066a21b20620b10620b2066a21b30620b20620b3066a" - "21b40620b30620b4066a21b50620b40620b5066a21b60620b50620b6066a21b70620b60620b7066a21b80620b70620" - "b8066a21b90620b80620b9066a21ba0620b90620ba066a21bb0620ba0620bb066a21bc0620bb0620bc066a21bd0620" - "bc0620bd066a21be0620bd0620be066a21bf0620be0620bf066a21c00620bf0620c0066a21c10620c00620c1066a21" - "c20620c10620c2066a21c30620c20620c3066a21c40620c30620c4066a21c50620c40620c5066a21c60620c50620c6" - "066a21c70620c60620c7066a21c80620c70620c8066a21c90620c80620c9066a21ca0620c90620ca066a21cb0620ca" - "0620cb066a21cc0620cb0620cc066a21cd0620cc0620cd066a21ce0620cd0620ce066a21cf0620ce0620cf066a21d0" - "0620cf0620d0066a21d10620d00620d1066a21d20620d10620d2066a21d30620d20620d3066a21d40620d30620d406" - "6a21d50620d40620d5066a21d60620d50620d6066a21d70620d60620d7066a21d80620d70620d8066a21d90620d806" - "20d9066a21da0620d90620da066a21db0620da0620db066a21dc0620db0620dc066a21dd0620dc0620dd066a21de06" - "20dd0620de066a21df0620de0620df066a21e00620df0620e0066a21e10620e00620e1066a21e20620e10620e2066a" - "21e30620e20620e3066a21e40620e30620e4066a21e50620e40620e5066a21e60620e50620e6066a21e70620e60620" - "e7066a21e80620e70620e8066a21e90620e80620e9066a21ea0620e90620ea066a21eb0620ea0620eb066a21ec0620" - "eb0620ec066a21ed0620ec0620ed066a21ee0620ed0620ee066a21ef0620ee0620ef066a21f00620ef0620f0066a21" - "f10620f00620f1066a21f20620f10620f2066a21f30620f20620f3066a21f40620f30620f4066a21f50620f40620f5" - "066a21f60620f50620f6066a21f70620f60620f7066a21f80620f70620f8066a21f90620f80620f9066a21fa0620f9" - "0620fa066a21fb0620fa0620fb066a21fc0620fb0620fc066a21fd0620fc0620fd066a21fe0620fd0620fe066a21ff" - "0620fe0620ff066a21800720ff062080076a2181072080072081076a2182072081072082076a218307208207208307" - "6a2184072083072084076a2185072084072085076a2186072085072086076a2187072086072087076a218807208707" - "2088076a2189072088072089076a218a07208907208a076a218b07208a07208b076a218c07208b07208c076a218d07" - "208c07208d076a218e07208d07208e076a218f07208e07208f076a219007208f072090076a2191072090072091076a" - "2192072091072092076a2193072092072093076a2194072093072094076a2195072094072095076a21960720950720" - "96076a2197072096072097076a2198072097072098076a2199072098072099076a219a07209907209a076a219b0720" - "9a07209b076a219c07209b07209c076a219d07209c07209d076a219e07209d07209e076a219f07209e07209f076a21" - "a007209f0720a0076a21a10720a00720a1076a21a20720a10720a2076a21a30720a20720a3076a21a40720a30720a4" - "076a21a50720a40720a5076a21a60720a50720a6076a21a70720a60720a7076a21a80720a70720a8076a21a90720a8" - "0720a9076a21aa0720a90720aa076a21ab0720aa0720ab076a21ac0720ab0720ac076a21ad0720ac0720ad076a21ae" - "0720ad0720ae076a21af0720ae0720af076a21b00720af0720b0076a21b10720b00720b1076a21b20720b10720b207" - "6a21b30720b20720b3076a21b40720b30720b4076a21b50720b40720b5076a21b60720b50720b6076a21b70720b607" - "20b7076a21b80720b70720b8076a21b90720b80720b9076a21ba0720b90720ba076a21bb0720ba0720bb076a21bc07" - "20bb0720bc076a21bd0720bc0720bd076a21be0720bd0720be076a21bf0720be0720bf076a21c00720bf0720c0076a" - "21c10720c00720c1076a21c20720c10720c2076a21c30720c20720c3076a21c40720c30720c4076a21c50720c40720" - "c5076a21c60720c50720c6076a21c70720c60720c7076a21c80720c70720c8076a21c90720c80720c9076a21ca0720" - "c90720ca076a21cb0720ca0720cb076a21cc0720cb0720cc076a21cd0720cc0720cd076a21ce0720cd0720ce076a21" - "cf0720ce0720cf076a21d00720cf0720d0076a21d10720d00720d1076a21d20720d10720d2076a21d30720d20720d3" - "076a21d40720d30720d4076a21d50720d40720d5076a21d60720d50720d6076a21d70720d60720d7076a21d80720d7" - "0720d8076a21d90720d80720d9076a21da0720d90720da076a21db0720da0720db076a21dc0720db0720dc076a21dd" - "0720dc0720dd076a21de0720dd0720de076a21df0720de0720df076a21e00720df0720e0076a21e10720e00720e107" - "6a21e20720e10720e2076a21e30720e20720e3076a21e40720e30720e4076a21e50720e40720e5076a21e60720e507" - "20e6076a21e70720e60720e7076a21e80720e70720e8076a21e90720e80720e9076a21ea0720e90720ea076a21eb07" - "20ea0720eb076a21ec0720eb0720ec076a21ed0720ec0720ed076a21ee0720ed0720ee076a21ef0720ee0720ef076a" - "21f00720ef0720f0076a21f10720f00720f1076a21f20720f10720f2076a21f30720f20720f3076a21f40720f30720" - "f4076a21f50720f40720f5076a21f60720f50720f6076a21f70720f60720f7076a21f80720f70720f8076a21f90720" - "f80720f9076a21fa0720f90720fa076a21fb0720fa0720fb076a21fc0720fb0720fc076a21fd0720fc0720fd076a21" - "fe0720fd0720fe076a21ff0720fe0720ff076a21800820ff072080086a2181082080082081086a2182082081082082" - "086a2183082082082083086a2184082083082084086a2185082084082085086a2186082085082086086a2187082086" - "082087086a2188082087082088086a2189082088082089086a218a08208908208a086a218b08208a08208b086a218c" - "08208b08208c086a218d08208c08208d086a218e08208d08208e086a218f08208e08208f086a219008208f08209008" - "6a2191082090082091086a2192082091082092086a2193082092082093086a2194082093082094086a219508209408" - "2095086a2196082095082096086a2197082096082097086a2198082097082098086a2199082098082099086a219a08" - "209908209a086a219b08209a08209b086a219c08209b08209c086a219d08209c08209d086a219e08209d08209e086a" - "219f08209e08209f086a21a008209f0820a0086a21a10820a00820a1086a21a20820a10820a2086a21a30820a20820" - "a3086a21a40820a30820a4086a21a50820a40820a5086a21a60820a50820a6086a21a70820a60820a7086a21a80820" - "a70820a8086a21a90820a80820a9086a21aa0820a90820aa086a21ab0820aa0820ab086a21ac0820ab0820ac086a21" - "ad0820ac0820ad086a21ae0820ad0820ae086a21af0820ae0820af086a21b00820af0820b0086a21b10820b00820b1" - "086a21b20820b10820b2086a21b30820b20820b3086a21b40820b30820b4086a21b50820b40820b5086a21b60820b5" - "0820b6086a21b70820b60820b7086a21b80820b70820b8086a21b90820b80820b9086a21ba0820b90820ba086a21bb" - "0820ba0820bb086a21bc0820bb0820bc086a21bd0820bc0820bd086a21be0820bd0820be086a21bf0820be0820bf08" - "6a21c00820bf0820c0086a21c10820c00820c1086a21c20820c10820c2086a21c30820c20820c3086a21c40820c308" - "20c4086a21c50820c40820c5086a21c60820c50820c6086a21c70820c60820c7086a21c80820c70820c8086a21c908" - "20c80820c9086a21ca0820c90820ca086a21cb0820ca0820cb086a21cc0820cb0820cc086a21cd0820cc0820cd086a" - "21ce0820cd0820ce086a21cf0820ce0820cf086a21d00820cf0820d0086a21d10820d00820d1086a21d20820d10820" - "d2086a21d30820d20820d3086a21d40820d30820d4086a21d50820d40820d5086a21d60820d50820d6086a21d70820" - "d60820d7086a21d80820d70820d8086a21d90820d80820d9086a21da0820d90820da086a21db0820da0820db086a21" - "dc0820db0820dc086a21dd0820dc0820dd086a21de0820dd0820de086a21df0820de0820df086a21e00820df0820e0" - "086a21e10820e00820e1086a21e20820e10820e2086a21e30820e20820e3086a21e40820e30820e4086a21e50820e4" - "0820e5086a21e60820e50820e6086a21e70820e60820e7086a21e80820e70820e8086a21e90820e80820e9086a21ea" - "0820e90820ea086a21eb0820ea0820eb086a21ec0820eb0820ec086a21ed0820ec0820ed086a21ee0820ed0820ee08" - "6a21ef0820ee0820ef086a21f00820ef0820f0086a21f10820f00820f1086a21f20820f10820f2086a21f30820f208" - "20f3086a21f40820f30820f4086a21f50820f40820f5086a21f60820f50820f6086a21f70820f60820f7086a21f808" - "20f70820f8086a21f90820f80820f9086a21fa0820f90820fa086a21fb0820fa0820fb086a21fc0820fb0820fc086a" - "21fd0820fc0820fd086a21fe0820fd0820fe086a21ff0820fe0820ff086a21800920ff082080096a21810920800920" - "81096a2182092081092082096a2183092082092083096a2184092083092084096a2185092084092085096a21860920" - "85092086096a2187092086092087096a2188092087092088096a2189092088092089096a218a09208909208a096a21" - "8b09208a09208b096a218c09208b09208c096a218d09208c09208d096a218e09208d09208e096a218f09208e09208f" - "096a219009208f092090096a2191092090092091096a2192092091092092096a2193092092092093096a2194092093" - "092094096a2195092094092095096a2196092095092096096a2197092096092097096a2198092097092098096a2199" - "092098092099096a219a09209909209a096a219b09209a09209b096a219c09209b09209c096a219d09209c09209d09" - "6a219e09209d09209e096a219f09209e09209f096a21a009209f0920a0096a21a10920a00920a1096a21a20920a109" - "20a2096a21a30920a20920a3096a21a40920a30920a4096a21a50920a40920a5096a21a60920a50920a6096a21a709" - "20a60920a7096a21a80920a70920a8096a21a90920a80920a9096a21aa0920a90920aa096a21ab0920aa0920ab096a" - "21ac0920ab0920ac096a21ad0920ac0920ad096a21ae0920ad0920ae096a21af0920ae0920af096a21b00920af0920" - "b0096a21b10920b00920b1096a21b20920b10920b2096a21b30920b20920b3096a21b40920b30920b4096a21b50920" - "b40920b5096a21b60920b50920b6096a21b70920b60920b7096a21b80920b70920b8096a21b90920b80920b9096a21" - "ba0920b90920ba096a21bb0920ba0920bb096a21bc0920bb0920bc096a21bd0920bc0920bd096a21be0920bd0920be" - "096a21bf0920be0920bf096a21c00920bf0920c0096a21c10920c00920c1096a21c20920c10920c2096a21c30920c2" - "0920c3096a21c40920c30920c4096a21c50920c40920c5096a21c60920c50920c6096a21c70920c60920c7096a21c8" - "0920c70920c8096a21c90920c80920c9096a21ca0920c90920ca096a21cb0920ca0920cb096a21cc0920cb0920cc09" - "6a21cd0920cc0920cd096a21ce0920cd0920ce096a21cf0920ce0920cf096a21d00920cf0920d0096a21d10920d009" - "20d1096a21d20920d10920d2096a21d30920d20920d3096a21d40920d30920d4096a21d50920d40920d5096a21d609" - "20d50920d6096a21d70920d60920d7096a21d80920d70920d8096a21d90920d80920d9096a21da0920d90920da096a" - "21db0920da0920db096a21dc0920db0920dc096a21dd0920dc0920dd096a21de0920dd0920de096a21df0920de0920" - "df096a21e00920df0920e0096a21e10920e00920e1096a21e20920e10920e2096a21e30920e20920e3096a21e40920" - "e30920e4096a21e50920e40920e5096a21e60920e50920e6096a21e70920e60920e7096a21e80920e70920e8096a21" - "e90920e80920e9096a21ea0920e90920ea096a21eb0920ea0920eb096a21ec0920eb0920ec096a21ed0920ec0920ed" - "096a21ee0920ed0920ee096a21ef0920ee0920ef096a21f00920ef0920f0096a21f10920f00920f1096a21f20920f1" - "0920f2096a21f30920f20920f3096a21f40920f30920f4096a21f50920f40920f5096a21f60920f50920f6096a21f7" - "0920f60920f7096a21f80920f70920f8096a21f90920f80920f9096a21fa0920f90920fa096a21fb0920fa0920fb09" - "6a21fc0920fb0920fc096a21fd0920fc0920fd096a21fe0920fd0920fe096a21ff0920fe0920ff096a21800a20ff09" - "20800a6a21810a20800a20810a6a21820a20810a20820a6a21830a20820a20830a6a21840a20830a20840a6a21850a" - "20840a20850a6a21860a20850a20860a6a21870a20860a20870a6a21880a20870a20880a6a21890a20880a20890a6a" - "218a0a20890a208a0a6a218b0a208a0a208b0a6a218c0a208b0a208c0a6a218d0a208c0a208d0a6a218e0a208d0a20" - "8e0a6a218f0a208e0a208f0a6a21900a208f0a20900a6a21910a20900a20910a6a21920a20910a20920a6a21930a20" - "920a20930a6a21940a20930a20940a6a21950a20940a20950a6a21960a20950a20960a6a21970a20960a20970a6a21" - "980a20970a20980a6a21990a20980a20990a6a219a0a20990a209a0a6a219b0a209a0a209b0a6a219c0a209b0a209c" - "0a6a219d0a209c0a209d0a6a219e0a209d0a209e0a6a219f0a209e0a209f0a6a21a00a209f0a20a00a6a21a10a20a0" - "0a20a10a6a21a20a20a10a20a20a6a21a30a20a20a20a30a6a21a40a20a30a20a40a6a21a50a20a40a20a50a6a21a6" - "0a20a50a20a60a6a21a70a20a60a20a70a6a21a80a20a70a20a80a6a21a90a20a80a20a90a6a21aa0a20a90a20aa0a" - "6a21ab0a20aa0a20ab0a6a21ac0a20ab0a20ac0a6a21ad0a20ac0a20ad0a6a21ae0a20ad0a20ae0a6a21af0a20ae0a" - "20af0a6a21b00a20af0a20b00a6a21b10a20b00a20b10a6a21b20a20b10a20b20a6a21b30a20b20a20b30a6a21b40a" - "20b30a20b40a6a21b50a20b40a20b50a6a21b60a20b50a20b60a6a21b70a20b60a20b70a6a21b80a20b70a20b80a6a" - "21b90a20b80a20b90a6a21ba0a20b90a20ba0a6a21bb0a20ba0a20bb0a6a21bc0a20bb0a20bc0a6a21bd0a20bc0a20" - "bd0a6a21be0a20bd0a20be0a6a21bf0a20be0a20bf0a6a21c00a20bf0a20c00a6a21c10a20c00a20c10a6a21c20a20" - "c10a20c20a6a21c30a20c20a20c30a6a21c40a20c30a20c40a6a21c50a20c40a20c50a6a21c60a20c50a20c60a6a21" - "c70a20c60a20c70a6a21c80a20c70a20c80a6a21c90a20c80a20c90a6a21ca0a20c90a20ca0a6a21cb0a20ca0a20cb" - "0a6a21cc0a20cb0a20cc0a6a21cd0a20cc0a20cd0a6a21ce0a20cd0a20ce0a6a21cf0a20ce0a20cf0a6a21d00a20cf" - "0a20d00a6a21d10a20d00a20d10a6a21d20a20d10a20d20a6a21d30a20d20a20d30a6a21d40a20d30a20d40a6a21d5" - "0a20d40a20d50a6a21d60a20d50a20d60a6a21d70a20d60a20d70a6a21d80a20d70a20d80a6a21d90a20d80a20d90a" - "6a21da0a20d90a20da0a6a21db0a20da0a20db0a6a21dc0a20db0a20dc0a6a21dd0a20dc0a20dd0a6a21de0a20dd0a" - "20de0a6a21df0a20de0a20df0a6a21e00a20df0a20e00a6a21e10a20e00a20e10a6a21e20a20e10a20e20a6a21e30a" - "20e20a20e30a6a21e40a20e30a20e40a6a21e50a20e40a20e50a6a21e60a20e50a20e60a6a21e70a20e60a20e70a6a" - "21e80a20e70a20e80a6a21e90a20e80a20e90a6a21ea0a20e90a20ea0a6a21eb0a20ea0a20eb0a6a21ec0a20eb0a20" - "ec0a6a21ed0a20ec0a20ed0a6a21ee0a20ed0a20ee0a6a21ef0a20ee0a20ef0a6a21f00a20ef0a20f00a6a21f10a20" - "f00a20f10a6a21f20a20f10a20f20a6a21f30a20f20a20f30a6a21f40a20f30a20f40a6a21f50a20f40a20f50a6a21" - "f60a20f50a20f60a6a21f70a20f60a20f70a6a21f80a20f70a20f80a6a21f90a20f80a20f90a6a21fa0a20f90a20fa" - "0a6a21fb0a20fa0a20fb0a6a21fc0a20fb0a20fc0a6a21fd0a20fc0a20fd0a6a21fe0a20fd0a20fe0a6a21ff0a20fe" - "0a20ff0a6a21800b20ff0a20800b6a21810b20800b20810b6a21820b20810b20820b6a21830b20820b20830b6a2184" - "0b20830b20840b6a21850b20840b20850b6a21860b20850b20860b6a21870b20860b20870b6a21880b20870b20880b" - "6a21890b20880b20890b6a218a0b20890b208a0b6a218b0b208a0b208b0b6a218c0b208b0b208c0b6a218d0b208c0b" - "208d0b6a218e0b208d0b208e0b6a218f0b208e0b208f0b6a21900b208f0b20900b6a21910b20900b20910b6a21920b" - "20910b20920b6a21930b20920b20930b6a21940b20930b20940b6a21950b20940b20950b6a21960b20950b20960b6a" - "21970b20960b20970b6a21980b20970b20980b6a21990b20980b20990b6a219a0b20990b209a0b6a219b0b209a0b20" - "9b0b6a219c0b209b0b209c0b6a219d0b209c0b209d0b6a219e0b209d0b209e0b6a219f0b209e0b209f0b6a21a00b20" - "9f0b20a00b6a21a10b20a00b20a10b6a21a20b20a10b20a20b6a21a30b20a20b20a30b6a21a40b20a30b20a40b6a21" - "a50b20a40b20a50b6a21a60b20a50b20a60b6a21a70b20a60b20a70b6a21a80b20a70b20a80b6a21a90b20a80b20a9" - "0b6a21aa0b20a90b20aa0b6a21ab0b20aa0b20ab0b6a21ac0b20ab0b20ac0b6a21ad0b20ac0b20ad0b6a21ae0b20ad" - "0b20ae0b6a21af0b20ae0b20af0b6a21b00b20af0b20b00b6a21b10b20b00b20b10b6a21b20b20b10b20b20b6a21b3" - "0b20b20b20b30b6a21b40b20b30b20b40b6a21b50b20b40b20b50b6a21b60b20b50b20b60b6a21b70b20b60b20b70b" - "6a21b80b20b70b20b80b6a21b90b20b80b20b90b6a21ba0b20b90b20ba0b6a21bb0b20ba0b20bb0b6a21bc0b20bb0b" - "20bc0b6a21bd0b20bc0b20bd0b6a21be0b20bd0b20be0b6a21bf0b20be0b20bf0b6a21c00b20bf0b20c00b6a21c10b" - "20c00b20c10b6a21c20b20c10b20c20b6a21c30b20c20b20c30b6a21c40b20c30b20c40b6a21c50b20c40b20c50b6a" - "21c60b20c50b20c60b6a21c70b20c60b20c70b6a21c80b20c70b20c80b6a21c90b20c80b20c90b6a21ca0b20c90b20" - "ca0b6a21cb0b20ca0b20cb0b6a21cc0b20cb0b20cc0b6a21cd0b20cc0b20cd0b6a21ce0b20cd0b20ce0b6a21cf0b20" - "ce0b20cf0b6a21d00b20cf0b20d00b6a21d10b20d00b20d10b6a21d20b20d10b20d20b6a21d30b20d20b20d30b6a21" - "d40b20d30b20d40b6a21d50b20d40b20d50b6a21d60b20d50b20d60b6a21d70b20d60b20d70b6a21d80b20d70b20d8" - "0b6a21d90b20d80b20d90b6a21da0b20d90b20da0b6a21db0b20da0b20db0b6a21dc0b20db0b20dc0b6a21dd0b20dc" - "0b20dd0b6a21de0b20dd0b20de0b6a21df0b20de0b20df0b6a21e00b20df0b20e00b6a21e10b20e00b20e10b6a21e2" - "0b20e10b20e20b6a21e30b20e20b20e30b6a21e40b20e30b20e40b6a21e50b20e40b20e50b6a21e60b20e50b20e60b" - "6a21e70b20e60b20e70b6a21e80b20e70b20e80b6a21e90b20e80b20e90b6a21ea0b20e90b20ea0b6a21eb0b20ea0b" - "20eb0b6a21ec0b20eb0b20ec0b6a21ed0b20ec0b20ed0b6a21ee0b20ed0b20ee0b6a21ef0b20ee0b20ef0b6a21f00b" - "20ef0b20f00b6a21f10b20f00b20f10b6a21f20b20f10b20f20b6a21f30b20f20b20f30b6a21f40b20f30b20f40b6a" - "21f50b20f40b20f50b6a21f60b20f50b20f60b6a21f70b20f60b20f70b6a21f80b20f70b20f80b6a21f90b20f80b20" - "f90b6a21fa0b20f90b20fa0b6a21fb0b20fa0b20fb0b6a21fc0b20fb0b20fc0b6a21fd0b20fc0b20fd0b6a21fe0b20" - "fd0b20fe0b6a21ff0b20fe0b20ff0b6a21800c20ff0b20800c6a21810c20800c20810c6a21820c20810c20820c6a21" - "830c20820c20830c6a21840c20830c20840c6a21850c20840c20850c6a21860c20850c20860c6a21870c20860c2087" - "0c6a21880c20870c20880c6a21890c20880c20890c6a218a0c20890c208a0c6a218b0c208a0c208b0c6a218c0c208b" - "0c208c0c6a218d0c208c0c208d0c6a218e0c208d0c208e0c6a218f0c208e0c208f0c6a21900c208f0c20900c6a2191" - "0c20900c20910c6a21920c20910c20920c6a21930c20920c20930c6a21940c20930c20940c6a21950c20940c20950c" - "6a21960c20950c20960c6a21970c20960c20970c6a21980c20970c20980c6a21990c20980c20990c6a219a0c20990c" - "209a0c6a219b0c209a0c209b0c6a219c0c209b0c209c0c6a219d0c209c0c209d0c6a219e0c209d0c209e0c6a219f0c" - "209e0c209f0c6a21a00c209f0c20a00c6a21a10c20a00c20a10c6a21a20c20a10c20a20c6a21a30c20a20c20a30c6a" - "21a40c20a30c20a40c6a21a50c20a40c20a50c6a21a60c20a50c20a60c6a21a70c20a60c20a70c6a21a80c20a70c20" - "a80c6a21a90c20a80c20a90c6a21aa0c20a90c20aa0c6a21ab0c20aa0c20ab0c6a21ac0c20ab0c20ac0c6a21ad0c20" - "ac0c20ad0c6a21ae0c20ad0c20ae0c6a21af0c20ae0c20af0c6a21b00c20af0c20b00c6a21b10c20b00c20b10c6a21" - "b20c20b10c20b20c6a21b30c20b20c20b30c6a21b40c20b30c20b40c6a21b50c20b40c20b50c6a21b60c20b50c20b6" - "0c6a21b70c20b60c20b70c6a21b80c20b70c20b80c6a21b90c20b80c20b90c6a21ba0c20b90c20ba0c6a21bb0c20ba" - "0c20bb0c6a21bc0c20bb0c20bc0c6a21bd0c20bc0c20bd0c6a21be0c20bd0c20be0c6a21bf0c20be0c20bf0c6a21c0" - "0c20bf0c20c00c6a21c10c20c00c20c10c6a21c20c20c10c20c20c6a21c30c20c20c20c30c6a21c40c20c30c20c40c" - "6a21c50c20c40c20c50c6a21c60c20c50c20c60c6a21c70c20c60c20c70c6a21c80c20c70c20c80c6a21c90c20c80c" - "20c90c6a21ca0c20c90c20ca0c6a21cb0c20ca0c20cb0c6a21cc0c20cb0c20cc0c6a21cd0c20cc0c20cd0c6a21ce0c" - "20cd0c20ce0c6a21cf0c20ce0c20cf0c6a21d00c20cf0c20d00c6a21d10c20d00c20d10c6a21d20c20d10c20d20c6a" - "21d30c20d20c20d30c6a21d40c20d30c20d40c6a21d50c20d40c20d50c6a21d60c20d50c20d60c6a21d70c20d60c20" - "d70c6a21d80c20d70c20d80c6a21d90c20d80c20d90c6a21da0c20d90c20da0c6a21db0c20da0c20db0c6a21dc0c20" - "db0c20dc0c6a21dd0c20dc0c20dd0c6a21de0c20dd0c20de0c6a21df0c20de0c20df0c6a21e00c20df0c20e00c6a21" - "e10c20e00c20e10c6a21e20c20e10c20e20c6a21e30c20e20c20e30c6a21e40c20e30c20e40c6a21e50c20e40c20e5" - "0c6a21e60c20e50c20e60c6a21e70c20e60c20e70c6a21e80c20e70c20e80c6a21e90c20e80c20e90c6a21ea0c20e9" - "0c20ea0c6a21eb0c20ea0c20eb0c6a21ec0c20eb0c20ec0c6a21ed0c20ec0c20ed0c6a21ee0c20ed0c20ee0c6a21ef" - "0c20ee0c20ef0c6a21f00c20ef0c20f00c6a21f10c20f00c20f10c6a21f20c20f10c20f20c6a21f30c20f20c20f30c" - "6a21f40c20f30c20f40c6a21f50c20f40c20f50c6a21f60c20f50c20f60c6a21f70c20f60c20f70c6a21f80c20f70c" - "20f80c6a21f90c20f80c20f90c6a21fa0c20f90c20fa0c6a21fb0c20fa0c20fb0c6a21fc0c20fb0c20fc0c6a21fd0c" - "20fc0c20fd0c6a21fe0c20fd0c20fe0c6a21ff0c20fe0c20ff0c6a21800d20ff0c20800d6a21810d20800d20810d6a" - "21820d20810d20820d6a21830d20820d20830d6a21840d20830d20840d6a21850d20840d20850d6a21860d20850d20" - "860d6a21870d20860d20870d6a21880d20870d20880d6a21890d20880d20890d6a218a0d20890d208a0d6a218b0d20" - "8a0d208b0d6a218c0d208b0d208c0d6a218d0d208c0d208d0d6a218e0d208d0d208e0d6a218f0d208e0d208f0d6a21" - "900d208f0d20900d6a21910d20900d20910d6a21920d20910d20920d6a21930d20920d20930d6a21940d20930d2094" - "0d6a21950d20940d20950d6a21960d20950d20960d6a21970d20960d20970d6a21980d20970d20980d6a21990d2098" - "0d20990d6a219a0d20990d209a0d6a219b0d209a0d209b0d6a219c0d209b0d209c0d6a219d0d209c0d209d0d6a219e" - "0d209d0d209e0d6a219f0d209e0d209f0d6a21a00d209f0d20a00d6a21a10d20a00d20a10d6a21a20d20a10d20a20d" - "6a21a30d20a20d20a30d6a21a40d20a30d20a40d6a21a50d20a40d20a50d6a21a60d20a50d20a60d6a21a70d20a60d" - "20a70d6a21a80d20a70d20a80d6a21a90d20a80d20a90d6a21aa0d20a90d20aa0d6a21ab0d20aa0d20ab0d6a21ac0d" - "20ab0d20ac0d6a21ad0d20ac0d20ad0d6a21ae0d20ad0d20ae0d6a21af0d20ae0d20af0d6a21b00d20af0d20b00d6a" - "21b10d20b00d20b10d6a21b20d20b10d20b20d6a21b30d20b20d20b30d6a21b40d20b30d20b40d6a21b50d20b40d20" - "b50d6a21b60d20b50d20b60d6a21b70d20b60d20b70d6a21b80d20b70d20b80d6a21b90d20b80d20b90d6a21ba0d20" - "b90d20ba0d6a21bb0d20ba0d20bb0d6a21bc0d20bb0d20bc0d6a21bd0d20bc0d20bd0d6a21be0d20bd0d20be0d6a21" - "bf0d20be0d20bf0d6a21c00d20bf0d20c00d6a21c10d20c00d20c10d6a21c20d20c10d20c20d6a21c30d20c20d20c3" - "0d6a21c40d20c30d20c40d6a21c50d20c40d20c50d6a21c60d20c50d20c60d6a21c70d20c60d20c70d6a21c80d20c7" - "0d20c80d6a21c90d20c80d20c90d6a21ca0d20c90d20ca0d6a21cb0d20ca0d20cb0d6a21cc0d20cb0d20cc0d6a21cd" - "0d20cc0d20cd0d6a21ce0d20cd0d20ce0d6a21cf0d20ce0d20cf0d6a21d00d20cf0d20d00d6a21d10d20d00d20d10d" - "6a21d20d20d10d20d20d6a21d30d20d20d20d30d6a21d40d20d30d20d40d6a21d50d20d40d20d50d6a21d60d20d50d" - "20d60d6a21d70d20d60d20d70d6a21d80d20d70d20d80d6a21d90d20d80d20d90d6a21da0d20d90d20da0d6a21db0d" - "20da0d20db0d6a21dc0d20db0d20dc0d6a21dd0d20dc0d20dd0d6a21de0d20dd0d20de0d6a21df0d20de0d20df0d6a" - "21e00d20df0d20e00d6a21e10d20e00d20e10d6a21e20d20e10d20e20d6a21e30d20e20d20e30d6a21e40d20e30d20" - "e40d6a21e50d20e40d20e50d6a21e60d20e50d20e60d6a21e70d20e60d20e70d6a21e80d20e70d20e80d6a21e90d20" - "e80d20e90d6a21ea0d20e90d20ea0d6a21eb0d20ea0d20eb0d6a21ec0d20eb0d20ec0d6a21ed0d20ec0d20ed0d6a21" - "ee0d20ed0d20ee0d6a21ef0d20ee0d20ef0d6a21f00d20ef0d20f00d6a21f10d20f00d20f10d6a21f20d20f10d20f2" - "0d6a21f30d20f20d20f30d6a21f40d20f30d20f40d6a21f50d20f40d20f50d6a21f60d20f50d20f60d6a21f70d20f6" - "0d20f70d6a21f80d20f70d20f80d6a21f90d20f80d20f90d6a21fa0d20f90d20fa0d6a21fb0d20fa0d20fb0d6a21fc" - "0d20fb0d20fc0d6a21fd0d20fc0d20fd0d6a21fe0d20fd0d20fe0d6a21ff0d20fe0d20ff0d6a21800e20ff0d20800e" - "6a21810e20800e20810e6a21820e20810e20820e6a21830e20820e20830e6a21840e20830e20840e6a21850e20840e" - "20850e6a21860e20850e20860e6a21870e20860e20870e6a21880e20870e20880e6a21890e20880e20890e6a218a0e" - "20890e208a0e6a218b0e208a0e208b0e6a218c0e208b0e208c0e6a218d0e208c0e208d0e6a218e0e208d0e208e0e6a" - "218f0e208e0e208f0e6a21900e208f0e20900e6a21910e20900e20910e6a21920e20910e20920e6a21930e20920e20" - "930e6a21940e20930e20940e6a21950e20940e20950e6a21960e20950e20960e6a21970e20960e20970e6a21980e20" - "970e20980e6a21990e20980e20990e6a219a0e20990e209a0e6a219b0e209a0e209b0e6a219c0e209b0e209c0e6a21" - "9d0e209c0e209d0e6a219e0e209d0e209e0e6a219f0e209e0e209f0e6a21a00e209f0e20a00e6a21a10e20a00e20a1" - "0e6a21a20e20a10e20a20e6a21a30e20a20e20a30e6a21a40e20a30e20a40e6a21a50e20a40e20a50e6a21a60e20a5" - "0e20a60e6a21a70e20a60e20a70e6a21a80e20a70e20a80e6a21a90e20a80e20a90e6a21aa0e20a90e20aa0e6a21ab" - "0e20aa0e20ab0e6a21ac0e20ab0e20ac0e6a21ad0e20ac0e20ad0e6a21ae0e20ad0e20ae0e6a21af0e20ae0e20af0e" - "6a21b00e20af0e20b00e6a21b10e20b00e20b10e6a21b20e20b10e20b20e6a21b30e20b20e20b30e6a21b40e20b30e" - "20b40e6a21b50e20b40e20b50e6a21b60e20b50e20b60e6a21b70e20b60e20b70e6a21b80e20b70e20b80e6a21b90e" - "20b80e20b90e6a21ba0e20b90e20ba0e6a21bb0e20ba0e20bb0e6a21bc0e20bb0e20bc0e6a21bd0e20bc0e20bd0e6a" - "21be0e20bd0e20be0e6a21bf0e20be0e20bf0e6a21c00e20bf0e20c00e6a21c10e20c00e20c10e6a21c20e20c10e20" - "c20e6a21c30e20c20e20c30e6a21c40e20c30e20c40e6a21c50e20c40e20c50e6a21c60e20c50e20c60e6a21c70e20" - "c60e20c70e6a21c80e20c70e20c80e6a21c90e20c80e20c90e6a21ca0e20c90e20ca0e6a21cb0e20ca0e20cb0e6a21" - "cc0e20cb0e20cc0e6a21cd0e20cc0e20cd0e6a21ce0e20cd0e20ce0e6a21cf0e20ce0e20cf0e6a21d00e20cf0e20d0" - "0e6a21d10e20d00e20d10e6a21d20e20d10e20d20e6a21d30e20d20e20d30e6a21d40e20d30e20d40e6a21d50e20d4" - "0e20d50e6a21d60e20d50e20d60e6a21d70e20d60e20d70e6a21d80e20d70e20d80e6a21d90e20d80e20d90e6a21da" - "0e20d90e20da0e6a21db0e20da0e20db0e6a21dc0e20db0e20dc0e6a21dd0e20dc0e20dd0e6a21de0e20dd0e20de0e" - "6a21df0e20de0e20df0e6a21e00e20df0e20e00e6a21e10e20e00e20e10e6a21e20e20e10e20e20e6a21e30e20e20e" - "20e30e6a21e40e20e30e20e40e6a21e50e20e40e20e50e6a21e60e20e50e20e60e6a21e70e20e60e20e70e6a21e80e" - "20e70e20e80e6a21e90e20e80e20e90e6a21ea0e20e90e20ea0e6a21eb0e20ea0e20eb0e6a21ec0e20eb0e20ec0e6a" - "21ed0e20ec0e20ed0e6a21ee0e20ed0e20ee0e6a21ef0e20ee0e20ef0e6a21f00e20ef0e20f00e6a21f10e20f00e20" - "f10e6a21f20e20f10e20f20e6a21f30e20f20e20f30e6a21f40e20f30e20f40e6a21f50e20f40e20f50e6a21f60e20" - "f50e20f60e6a21f70e20f60e20f70e6a21f80e20f70e20f80e6a21f90e20f80e20f90e6a21fa0e20f90e20fa0e6a21" - "fb0e20fa0e20fb0e6a21fc0e20fb0e20fc0e6a21fd0e20fc0e20fd0e6a21fe0e20fd0e20fe0e6a21ff0e20fe0e20ff" - "0e6a21800f20ff0e20800f6a21810f20800f20810f6a21820f20810f20820f6a21830f20820f20830f6a21840f2083" - "0f20840f6a21850f20840f20850f6a21860f20850f20860f6a21870f20860f20870f6a21880f20870f20880f6a2189" - "0f20880f20890f6a218a0f20890f208a0f6a218b0f208a0f208b0f6a218c0f208b0f208c0f6a218d0f208c0f208d0f" - "6a218e0f208d0f208e0f6a218f0f208e0f208f0f6a21900f208f0f20900f6a21910f20900f20910f6a21920f20910f" - "20920f6a21930f20920f20930f6a21940f20930f20940f6a21950f20940f20950f6a21960f20950f20960f6a21970f" - "20960f20970f6a21980f20970f20980f6a21990f20980f20990f6a219a0f20990f209a0f6a219b0f209a0f209b0f6a" - "219c0f209b0f209c0f6a219d0f209c0f209d0f6a219e0f209d0f209e0f6a219f0f209e0f209f0f6a21a00f209f0f20" - "a00f6a21a10f20a00f20a10f6a21a20f20a10f20a20f6a21a30f20a20f20a30f6a21a40f20a30f20a40f6a21a50f20" - "a40f20a50f6a21a60f20a50f20a60f6a21a70f20a60f20a70f6a21a80f20a70f20a80f6a21a90f20a80f20a90f6a21" - "aa0f20a90f20aa0f6a21ab0f20aa0f20ab0f6a21ac0f20ab0f20ac0f6a21ad0f20ac0f20ad0f6a21ae0f20ad0f20ae" - "0f6a21af0f20ae0f20af0f6a21b00f20af0f20b00f6a21b10f20b00f20b10f6a21b20f20b10f20b20f6a21b30f20b2" - "0f20b30f6a21b40f20b30f20b40f6a21b50f20b40f20b50f6a21b60f20b50f20b60f6a21b70f20b60f20b70f6a21b8" - "0f20b70f20b80f6a21b90f20b80f20b90f6a21ba0f20b90f20ba0f6a21bb0f20ba0f20bb0f6a21bc0f20bb0f20bc0f" - "6a21bd0f20bc0f20bd0f6a21be0f20bd0f20be0f6a21bf0f20be0f20bf0f6a21c00f20bf0f20c00f6a21c10f20c00f" - "20c10f6a21c20f20c10f20c20f6a21c30f20c20f20c30f6a21c40f20c30f20c40f6a21c50f20c40f20c50f6a21c60f" - "20c50f20c60f6a21c70f20c60f20c70f6a21c80f20c70f20c80f6a21c90f20c80f20c90f6a21ca0f20c90f20ca0f6a" - "21cb0f20ca0f20cb0f6a21cc0f20cb0f20cc0f6a21cd0f20cc0f20cd0f6a21ce0f20cd0f20ce0f6a21cf0f20ce0f20" - "cf0f6a21d00f20cf0f20d00f6a21d10f20d00f20d10f6a21d20f20d10f20d20f6a21d30f20d20f20d30f6a21d40f20" - "d30f20d40f6a21d50f20d40f20d50f6a21d60f20d50f20d60f6a21d70f20d60f20d70f6a21d80f20d70f20d80f6a21" - "d90f20d80f20d90f6a21da0f20d90f20da0f6a21db0f20da0f20db0f6a21dc0f20db0f20dc0f6a21dd0f20dc0f20dd" - "0f6a21de0f20dd0f20de0f6a21df0f20de0f20df0f6a21e00f20df0f20e00f6a21e10f20e00f20e10f6a21e20f20e1" - "0f20e20f6a21e30f20e20f20e30f6a21e40f20e30f20e40f6a21e50f20e40f20e50f6a21e60f20e50f20e60f6a21e7" - "0f20e60f20e70f6a21e80f20e70f20e80f6a21e90f20e80f20e90f6a21ea0f20e90f20ea0f6a21eb0f20ea0f20eb0f" - "6a21ec0f20eb0f20ec0f6a21ed0f20ec0f20ed0f6a21ee0f20ed0f20ee0f6a21ef0f20ee0f20ef0f6a21f00f20ef0f" - "20f00f6a21f10f20f00f20f10f6a21f20f20f10f20f20f6a21f30f20f20f20f30f6a21f40f20f30f20f40f6a21f50f" - "20f40f20f50f6a21f60f20f50f20f60f6a21f70f20f60f20f70f6a21f80f20f70f20f80f6a21f90f20f80f20f90f6a" - "21fa0f20f90f20fa0f6a21fb0f20fa0f20fb0f6a21fc0f20fb0f20fc0f6a21fd0f20fc0f20fd0f6a21fe0f20fd0f20" - "fe0f6a21ff0f20fe0f20ff0f6a21801020ff0f2080106a2181102080102081106a2182102081102082106a21831020" - "82102083106a2184102083102084106a2185102084102085106a2186102085102086106a2187102086102087106a21" - "88102087102088106a2189102088102089106a218a10208910208a106a218b10208a10208b106a218c10208b10208c" - "106a218d10208c10208d106a218e10208d10208e106a218f10208e10208f106a219010208f102090106a2191102090" - "102091106a2192102091102092106a2193102092102093106a2194102093102094106a2195102094102095106a2196" - "102095102096106a2197102096102097106a2198102097102098106a2199102098102099106a219a10209910209a10" - "6a219b10209a10209b106a219c10209b10209c106a219d10209c10209d106a219e10209d10209e106a219f10209e10" - "209f106a21a010209f1020a0106a21a11020a01020a1106a21a21020a11020a2106a21a31020a21020a3106a21a410" - "20a31020a4106a21a51020a41020a5106a21a61020a51020a6106a21a71020a61020a7106a21a81020a71020a8106a" - "21a91020a81020a9106a21aa1020a91020aa106a21ab1020aa1020ab106a21ac1020ab1020ac106a21ad1020ac1020" - "ad106a21ae1020ad1020ae106a21af1020ae1020af106a21b01020af1020b0106a21b11020b01020b1106a21b21020" - "b11020b2106a21b31020b21020b3106a21b41020b31020b4106a21b51020b41020b5106a21b61020b51020b6106a21" - "b71020b61020b7106a21b81020b71020b8106a21b91020b81020b9106a21ba1020b91020ba106a21bb1020ba1020bb" - "106a21bc1020bb1020bc106a21bd1020bc1020bd106a21be1020bd1020be106a21bf1020be1020bf106a21c01020bf" - "1020c0106a21c11020c01020c1106a21c21020c11020c2106a21c31020c21020c3106a21c41020c31020c4106a21c5" - "1020c41020c5106a21c61020c51020c6106a21c71020c61020c7106a21c81020c71020c8106a21c91020c81020c910" - "6a21ca1020c91020ca106a21cb1020ca1020cb106a21cc1020cb1020cc106a21cd1020cc1020cd106a21ce1020cd10" - "20ce106a21cf1020ce1020cf106a21d01020cf1020d0106a21d11020d01020d1106a21d21020d11020d2106a21d310" - "20d21020d3106a21d41020d31020d4106a21d51020d41020d5106a21d61020d51020d6106a21d71020d61020d7106a" - "21d81020d71020d8106a21d91020d81020d9106a21da1020d91020da106a21db1020da1020db106a21dc1020db1020" - "dc106a21dd1020dc1020dd106a21de1020dd1020de106a21df1020de1020df106a21e01020df1020e0106a21e11020" - "e01020e1106a21e21020e11020e2106a21e31020e21020e3106a21e41020e31020e4106a21e51020e41020e5106a21" - "e61020e51020e6106a21e71020e61020e7106a21e81020e71020e8106a21e91020e81020e9106a21ea1020e91020ea" - "106a21eb1020ea1020eb106a21ec1020eb1020ec106a21ed1020ec1020ed106a21ee1020ed1020ee106a21ef1020ee" - "1020ef106a21f01020ef1020f0106a21f11020f01020f1106a21f21020f11020f2106a21f31020f21020f3106a21f4" - "1020f31020f4106a21f51020f41020f5106a21f61020f51020f6106a21f71020f61020f7106a21f81020f71020f810" - "6a21f91020f81020f9106a21fa1020f91020fa106a21fb1020fa1020fb106a21fc1020fb1020fc106a21fd1020fc10" - "20fd106a21fe1020fd1020fe106a21ff1020fe1020ff106a21801120ff102080116a2181112080112081116a218211" - "2081112082116a2183112082112083116a2184112083112084116a2185112084112085116a2186112085112086116a" - "2187112086112087116a2188112087112088116a2189112088112089116a218a11208911208a116a218b11208a1120" - "8b116a218c11208b11208c116a218d11208c11208d116a218e11208d11208e116a218f11208e11208f116a21901120" - "8f112090116a2191112090112091116a2192112091112092116a2193112092112093116a2194112093112094116a21" - "95112094112095116a2196112095112096116a2197112096112097116a2198112097112098116a2199112098112099" - "116a219a11209911209a116a219b11209a11209b116a219c11209b11209c116a219d11209c11209d116a219e11209d" - "11209e116a219f11209e11209f116a21a011209f1120a0116a21a11120a01120a1116a21a21120a11120a2116a21a3" - "1120a21120a3116a21a41120a31120a4116a21a51120a41120a5116a21a61120a51120a6116a21a71120a61120a711" - "6a21a81120a71120a8116a21a91120a81120a9116a21aa1120a91120aa116a21ab1120aa1120ab116a21ac1120ab11" - "20ac116a21ad1120ac1120ad116a21ae1120ad1120ae116a21af1120ae1120af116a21b01120af1120b0116a21b111" - "20b01120b1116a21b21120b11120b2116a21b31120b21120b3116a21b41120b31120b4116a21b51120b41120b5116a" - "21b61120b51120b6116a21b71120b61120b7116a21b81120b71120b8116a21b91120b81120b9116a21ba1120b91120" - "ba116a21bb1120ba1120bb116a21bc1120bb1120bc116a21bd1120bc1120bd116a21be1120bd1120be116a21bf1120" - "be1120bf116a21c01120bf1120c0116a21c11120c01120c1116a21c21120c11120c2116a21c31120c21120c3116a21" - "c41120c31120c4116a21c51120c41120c5116a21c61120c51120c6116a21c71120c61120c7116a21c81120c71120c8" - "116a21c91120c81120c9116a21ca1120c91120ca116a21cb1120ca1120cb116a21cc1120cb1120cc116a21cd1120cc" - "1120cd116a21ce1120cd1120ce116a21cf1120ce1120cf116a21d01120cf1120d0116a21d11120d01120d1116a21d2" - "1120d11120d2116a21d31120d21120d3116a21d41120d31120d4116a21d51120d41120d5116a21d61120d51120d611" - "6a21d71120d61120d7116a21d81120d71120d8116a21d91120d81120d9116a21da1120d91120da116a21db1120da11" - "20db116a21dc1120db1120dc116a21dd1120dc1120dd116a21de1120dd1120de116a21df1120de1120df116a21e011" - "20df1120e0116a21e11120e01120e1116a21e21120e11120e2116a21e31120e21120e3116a21e41120e31120e4116a" - "21e51120e41120e5116a21e61120e51120e6116a21e71120e61120e7116a21e81120e71120e8116a21e91120e81120" - "e9116a21ea1120e91120ea116a21eb1120ea1120eb116a21ec1120eb1120ec116a21ed1120ec1120ed116a21ee1120" - "ed1120ee116a21ef1120ee1120ef116a21f01120ef1120f0116a21f11120f01120f1116a21f21120f11120f2116a21" - "f31120f21120f3116a21f41120f31120f4116a21f51120f41120f5116a21f61120f51120f6116a21f71120f61120f7" - "116a21f81120f71120f8116a21f91120f81120f9116a21fa1120f91120fa116a21fb1120fa1120fb116a21fc1120fb" - "1120fc116a21fd1120fc1120fd116a21fe1120fd1120fe116a21ff1120fe1120ff116a21801220ff112080126a2181" - "122080122081126a2182122081122082126a2183122082122083126a2184122083122084126a218512208412208512" - "6a2186122085122086126a2187122086122087126a2188122087122088126a2189122088122089126a218a12208912" - "208a126a218b12208a12208b126a218c12208b12208c126a218d12208c12208d126a218e12208d12208e126a218f12" - "208e12208f126a219012208f122090126a2191122090122091126a2192122091122092126a2193122092122093126a" - "2194122093122094126a2195122094122095126a2196122095122096126a2197122096122097126a21981220971220" - "98126a2199122098122099126a219a12209912209a126a219b12209a12209b126a219c12209b12209c126a219d1220" - "9c12209d126a219e12209d12209e126a219f12209e12209f126a21a012209f1220a0126a21a11220a01220a1126a21" - "a21220a11220a2126a21a31220a21220a3126a21a41220a31220a4126a21a51220a41220a5126a21a61220a51220a6" - "126a21a71220a61220a7126a21a81220a71220a8126a21a91220a81220a9126a21aa1220a91220aa126a21ab1220aa" - "1220ab126a21ac1220ab1220ac126a21ad1220ac1220ad126a21ae1220ad1220ae126a21af1220ae1220af126a21b0" - "1220af1220b0126a21b11220b01220b1126a21b21220b11220b2126a21b31220b21220b3126a21b41220b31220b412" - "6a21b51220b41220b5126a21b61220b51220b6126a21b71220b61220b7126a21b81220b71220b8126a21b91220b812" - "20b9126a21ba1220b91220ba126a21bb1220ba1220bb126a21bc1220bb1220bc126a21bd1220bc1220bd126a21be12" - "20bd1220be126a21bf1220be1220bf126a21c01220bf1220c0126a21c11220c01220c1126a21c21220c11220c2126a" - "21c31220c21220c3126a21c41220c31220c4126a21c51220c41220c5126a21c61220c51220c6126a21c71220c61220" - "c7126a21c81220c71220c8126a21c91220c81220c9126a21ca1220c91220ca126a21cb1220ca1220cb126a21cc1220" - "cb1220cc126a21cd1220cc1220cd126a21ce1220cd1220ce126a21cf1220ce1220cf126a21d01220cf1220d0126a21" - "d11220d01220d1126a21d21220d11220d2126a21d31220d21220d3126a21d41220d31220d4126a21d51220d41220d5" - "126a21d61220d51220d6126a21d71220d61220d7126a21d81220d71220d8126a21d91220d81220d9126a21da1220d9" - "1220da126a21db1220da1220db126a21dc1220db1220dc126a21dd1220dc1220dd126a21de1220dd1220de126a21df" - "1220de1220df126a21e01220df1220e0126a21e11220e01220e1126a21e21220e11220e2126a21e31220e21220e312" - "6a21e41220e31220e4126a21e51220e41220e5126a21e61220e51220e6126a21e71220e61220e7126a21e81220e712" - "20e8126a21e91220e81220e9126a21ea1220e91220ea126a21eb1220ea1220eb126a21ec1220eb1220ec126a21ed12" - "20ec1220ed126a21ee1220ed1220ee126a21ef1220ee1220ef126a21f01220ef1220f0126a21f11220f01220f1126a" - "21f21220f11220f2126a21f31220f21220f3126a21f41220f31220f4126a21f51220f41220f5126a21f61220f51220" - "f6126a21f71220f61220f7126a21f81220f71220f8126a21f91220f81220f9126a21fa1220f91220fa126a21fb1220" - "fa1220fb126a21fc1220fb1220fc126a21fd1220fc1220fd126a21fe1220fd1220fe126a21ff1220fe1220ff126a21" - "801320ff122080136a2181132080132081136a2182132081132082136a2183132082132083136a2184132083132084" - "136a2185132084132085136a2186132085132086136a2187132086132087136a2188132087132088136a2189132088" - "132089136a218a13208913208a136a218b13208a13208b136a218c13208b13208c136a218d13208c13208d136a218e" - "13208d13208e136a218f13208e13208f136a219013208f132090136a2191132090132091136a219213209113209213" - "6a2193132092132093136a2194132093132094136a2195132094132095136a2196132095132096136a219713209613" - "2097136a2198132097132098136a2199132098132099136a219a13209913209a136a219b13209a13209b136a219c13" - "209b13209c136a219d13209c13209d136a219e13209d13209e136a219f13209e13209f136a21a013209f1320a0136a" - "21a11320a01320a1136a21a21320a11320a2136a21a31320a21320a3136a21a41320a31320a4136a21a51320a41320" - "a5136a21a61320a51320a6136a21a71320a61320a7136a21a81320a71320a8136a21a91320a81320a9136a21aa1320" - "a91320aa136a21ab1320aa1320ab136a21ac1320ab1320ac136a21ad1320ac1320ad136a21ae1320ad1320ae136a21" - "af1320ae1320af136a21b01320af1320b0136a21b11320b01320b1136a21b21320b11320b2136a21b31320b21320b3" - "136a21b41320b31320b4136a21b51320b41320b5136a21b61320b51320b6136a21b71320b61320b7136a21b81320b7" - "1320b8136a21b91320b81320b9136a21ba1320b91320ba136a21bb1320ba1320bb136a21bc1320bb1320bc136a21bd" - "1320bc1320bd136a21be1320bd1320be136a21bf1320be1320bf136a21c01320bf1320c0136a21c11320c01320c113" - "6a21c21320c11320c2136a21c31320c21320c3136a21c41320c31320c4136a21c51320c41320c5136a21c61320c513" - "20c6136a21c71320c61320c7136a21c81320c71320c8136a21c91320c81320c9136a21ca1320c91320ca136a21cb13" - "20ca1320cb136a21cc1320cb1320cc136a21cd1320cc1320cd136a21ce1320cd1320ce136a21cf1320ce1320cf136a" - "21d01320cf1320d0136a21d11320d01320d1136a21d21320d11320d2136a21d31320d21320d3136a21d41320d31320" - "d4136a21d51320d41320d5136a21d61320d51320d6136a21d71320d61320d7136a21d81320d71320d8136a21d91320" - "d81320d9136a21da1320d91320da136a21db1320da1320db136a21dc1320db1320dc136a21dd1320dc1320dd136a21" - "de1320dd1320de136a21df1320de1320df136a21e01320df1320e0136a21e11320e01320e1136a21e21320e11320e2" - "136a21e31320e21320e3136a21e41320e31320e4136a21e51320e41320e5136a21e61320e51320e6136a21e71320e6" - "1320e7136a21e81320e71320e8136a21e91320e81320e9136a21ea1320e91320ea136a21eb1320ea1320eb136a21ec" - "1320eb1320ec136a21ed1320ec1320ed136a21ee1320ed1320ee136a21ef1320ee1320ef136a21f01320ef1320f013" - "6a21f11320f01320f1136a21f21320f11320f2136a21f31320f21320f3136a21f41320f31320f4136a21f51320f413" - "20f5136a21f61320f51320f6136a21f71320f61320f7136a21f81320f71320f8136a21f91320f81320f9136a21fa13" - "20f91320fa136a21fb1320fa1320fb136a21fc1320fb1320fc136a21fd1320fc1320fd136a21fe1320fd1320fe136a" - "21ff1320fe1320ff136a21801420ff132080146a2181142080142081146a2182142081142082146a21831420821420" - "83146a2184142083142084146a2185142084142085146a2186142085142086146a2187142086142087146a21881420" - "87142088146a2189142088142089146a218a14208914208a146a218b14208a14208b146a218c14208b14208c146a21" - "8d14208c14208d146a218e14208d14208e146a218f14208e14208f146a219014208f142090146a2191142090142091" - "146a2192142091142092146a2193142092142093146a2194142093142094146a2195142094142095146a2196142095" - "142096146a2197142096142097146a2198142097142098146a2199142098142099146a219a14209914209a146a219b" - "14209a14209b146a219c14209b14209c146a219d14209c14209d146a219e14209d14209e146a219f14209e14209f14" - "6a21a014209f1420a0146a21a11420a01420a1146a21a21420a11420a2146a21a31420a21420a3146a21a41420a314" - "20a4146a21a51420a41420a5146a21a61420a51420a6146a21a71420a61420a7146a21a81420a71420a8146a21a914" - "20a81420a9146a21aa1420a91420aa146a21ab1420aa1420ab146a21ac1420ab1420ac146a21ad1420ac1420ad146a" - "21ae1420ad1420ae146a21af1420ae1420af146a21b01420af1420b0146a21b11420b01420b1146a21b21420b11420" - "b2146a21b31420b21420b3146a21b41420b31420b4146a21b51420b41420b5146a21b61420b51420b6146a21b71420" - "b61420b7146a21b81420b71420b8146a21b91420b81420b9146a21ba1420b91420ba146a21bb1420ba1420bb146a21" - "bc1420bb1420bc146a21bd1420bc1420bd146a21be1420bd1420be146a21bf1420be1420bf146a21c01420bf1420c0" - "146a21c11420c01420c1146a21c21420c11420c2146a21c31420c21420c3146a21c41420c31420c4146a21c51420c4" - "1420c5146a21c61420c51420c6146a21c71420c61420c7146a21c81420c71420c8146a21c91420c81420c9146a21ca" - "1420c91420ca146a21cb1420ca1420cb146a21cc1420cb1420cc146a21cd1420cc1420cd146a21ce1420cd1420ce14" - "6a21cf1420ce1420cf146a21d01420cf1420d0146a21d11420d01420d1146a21d21420d11420d2146a21d31420d214" - "20d3146a21d41420d31420d4146a21d51420d41420d5146a21d61420d51420d6146a21d71420d61420d7146a21d814" - "20d71420d8146a21d91420d81420d9146a21da1420d91420da146a21db1420da1420db146a21dc1420db1420dc146a" - "21dd1420dc1420dd146a21de1420dd1420de146a21df1420de1420df146a21e01420df1420e0146a21e11420e01420" - "e1146a21e21420e11420e2146a21e31420e21420e3146a21e41420e31420e4146a21e51420e41420e5146a21e61420" - "e51420e6146a21e71420e61420e7146a21e81420e71420e8146a21e91420e81420e9146a21ea1420e91420ea146a21" - "eb1420ea1420eb146a21ec1420eb1420ec146a21ed1420ec1420ed146a21ee1420ed1420ee146a21ef1420ee1420ef" - "146a21f01420ef1420f0146a21f11420f01420f1146a21f21420f11420f2146a21f31420f21420f3146a21f41420f3" - "1420f4146a21f51420f41420f5146a21f61420f51420f6146a21f71420f61420f7146a21f81420f71420f8146a21f9" - "1420f81420f9146a21fa1420f91420fa146a21fb1420fa1420fb146a21fc1420fb1420fc146a21fd1420fc1420fd14" - "6a21fe1420fd1420fe146a21ff1420fe1420ff146a21801520ff142080156a2181152080152081156a218215208115" - "2082156a2183152082152083156a2184152083152084156a2185152084152085156a2186152085152086156a218715" - "2086152087156a2188152087152088156a2189152088152089156a218a15208915208a156a218b15208a15208b156a" - "218c15208b15208c156a218d15208c15208d156a218e15208d15208e156a218f15208e15208f156a219015208f1520" - "90156a2191152090152091156a2192152091152092156a2193152092152093156a2194152093152094156a21951520" - "94152095156a2196152095152096156a2197152096152097156a2198152097152098156a2199152098152099156a21" - "9a15209915209a156a219b15209a15209b156a219c15209b15209c156a219d15209c15209d156a219e15209d15209e" - "156a219f15209e15209f156a21a015209f1520a0156a21a11520a01520a1156a21a21520a11520a2156a21a31520a2" - "1520a3156a21a41520a31520a4156a21a51520a41520a5156a21a61520a51520a6156a21a71520a61520a7156a21a8" - "1520a71520a8156a21a91520a81520a9156a21aa1520a91520aa156a21ab1520aa1520ab156a21ac1520ab1520ac15" - "6a21ad1520ac1520ad156a21ae1520ad1520ae156a21af1520ae1520af156a21b01520af1520b0156a21b11520b015" - "20b1156a21b21520b11520b2156a21b31520b21520b3156a21b41520b31520b4156a21b51520b41520b5156a21b615" - "20b51520b6156a21b71520b61520b7156a21b81520b71520b8156a21b91520b81520b9156a21ba1520b91520ba156a" - "21bb1520ba1520bb156a21bc1520bb1520bc156a21bd1520bc1520bd156a21be1520bd1520be156a21bf1520be1520" - "bf156a21c01520bf1520c0156a21c11520c01520c1156a21c21520c11520c2156a21c31520c21520c3156a21c41520" - "c31520c4156a21c51520c41520c5156a21c61520c51520c6156a21c71520c61520c7156a21c81520c71520c8156a21" - "c91520c81520c9156a21ca1520c91520ca156a21cb1520ca1520cb156a21cc1520cb1520cc156a21cd1520cc1520cd" - "156a21ce1520cd1520ce156a21cf1520ce1520cf156a21d01520cf1520d0156a21d11520d01520d1156a21d21520d1" - "1520d2156a21d31520d21520d3156a21d41520d31520d4156a21d51520d41520d5156a21d61520d51520d6156a21d7" - "1520d61520d7156a21d81520d71520d8156a21d91520d81520d9156a21da1520d91520da156a21db1520da1520db15" - "6a21dc1520db1520dc156a21dd1520dc1520dd156a21de1520dd1520de156a21df1520de1520df156a21e01520df15" - "20e0156a21e11520e01520e1156a21e21520e11520e2156a21e31520e21520e3156a21e41520e31520e4156a21e515" - "20e41520e5156a21e61520e51520e6156a21e71520e61520e7156a21e81520e71520e8156a21e91520e81520e9156a" - "21ea1520e91520ea156a21eb1520ea1520eb156a21ec1520eb1520ec156a21ed1520ec1520ed156a21ee1520ed1520" - "ee156a21ef1520ee1520ef156a21f01520ef1520f0156a21f11520f01520f1156a21f21520f11520f2156a21f31520" - "f21520f3156a21f41520f31520f4156a21f51520f41520f5156a21f61520f51520f6156a21f71520f61520f7156a21" - "f81520f71520f8156a21f91520f81520f9156a21fa1520f91520fa156a21fb1520fa1520fb156a21fc1520fb1520fc" - "156a21fd1520fc1520fd156a21fe1520fd1520fe156a21ff1520fe1520ff156a21801620ff152080166a2181162080" - "162081166a2182162081162082166a2183162082162083166a2184162083162084166a2185162084162085166a2186" - "162085162086166a2187162086162087166a2188162087162088166a2189162088162089166a218a16208916208a16" - "6a218b16208a16208b166a218c16208b16208c166a218d16208c16208d166a218e16208d16208e166a218f16208e16" - "208f166a219016208f162090166a2191162090162091166a2192162091162092166a2193162092162093166a219416" - "2093162094166a2195162094162095166a2196162095162096166a2197162096162097166a2198162097162098166a" - "2199162098162099166a219a16209916209a166a219b16209a16209b166a219c16209b16209c166a219d16209c1620" - "9d166a219e16209d16209e166a219f16209e16209f166a21a016209f1620a0166a21a11620a01620a1166a21a21620" - "a11620a2166a21a31620a21620a3166a21a41620a31620a4166a21a51620a41620a5166a21a61620a51620a6166a21" - "a71620a61620a7166a21a81620a71620a8166a21a91620a81620a9166a21aa1620a91620aa166a21ab1620aa1620ab" - "166a21ac1620ab1620ac166a21ad1620ac1620ad166a21ae1620ad1620ae166a21af1620ae1620af166a21b01620af" - "1620b0166a21b11620b01620b1166a21b21620b11620b2166a21b31620b21620b3166a21b41620b31620b4166a21b5" - "1620b41620b5166a21b61620b51620b6166a21b71620b61620b7166a21b81620b71620b8166a21b91620b81620b916" - "6a21ba1620b91620ba166a21bb1620ba1620bb166a21bc1620bb1620bc166a21bd1620bc1620bd166a21be1620bd16" - "20be166a21bf1620be1620bf166a21c01620bf1620c0166a21c11620c01620c1166a21c21620c11620c2166a21c316" - "20c21620c3166a21c41620c31620c4166a21c51620c41620c5166a21c61620c51620c6166a21c71620c61620c7166a" - "21c81620c71620c8166a21c91620c81620c9166a21ca1620c91620ca166a21cb1620ca1620cb166a21cc1620cb1620" - "cc166a21cd1620cc1620cd166a21ce1620cd1620ce166a21cf1620ce1620cf166a21d01620cf1620d0166a21d11620" - "d01620d1166a21d21620d11620d2166a21d31620d21620d3166a21d41620d31620d4166a21d51620d41620d5166a21" - "d61620d51620d6166a21d71620d61620d7166a21d81620d71620d8166a21d91620d81620d9166a21da1620d91620da" - "166a21db1620da1620db166a21dc1620db1620dc166a21dd1620dc1620dd166a21de1620dd1620de166a21df1620de" - "1620df166a21e01620df1620e0166a21e11620e01620e1166a21e21620e11620e2166a21e31620e21620e3166a21e4" - "1620e31620e4166a21e51620e41620e5166a21e61620e51620e6166a21e71620e61620e7166a21e81620e71620e816" - "6a21e91620e81620e9166a21ea1620e91620ea166a21eb1620ea1620eb166a21ec1620eb1620ec166a21ed1620ec16" - "20ed166a21ee1620ed1620ee166a21ef1620ee1620ef166a21f01620ef1620f0166a21f11620f01620f1166a21f216" - "20f11620f2166a21f31620f21620f3166a21f41620f31620f4166a21f51620f41620f5166a21f61620f51620f6166a" - "21f71620f61620f7166a21f81620f71620f8166a21f91620f81620f9166a21fa1620f91620fa166a21fb1620fa1620" - "fb166a21fc1620fb1620fc166a21fd1620fc1620fd166a21fe1620fd1620fe166a21ff1620fe1620ff166a21801720" - "ff162080176a2181172080172081176a2182172081172082176a2183172082172083176a2184172083172084176a21" - "85172084172085176a2186172085172086176a2187172086172087176a2188172087172088176a2189172088172089" - "176a218a17208917208a176a218b17208a17208b176a218c17208b17208c176a218d17208c17208d176a218e17208d" - "17208e176a218f17208e17208f176a219017208f172090176a2191172090172091176a2192172091172092176a2193" - "172092172093176a2194172093172094176a2195172094172095176a2196172095172096176a219717209617209717" - "6a2198172097172098176a2199172098172099176a219a17209917209a176a219b17209a17209b176a219c17209b17" - "209c176a219d17209c17209d176a219e17209d17209e176a219f17209e17209f176a21a017209f1720a0176a21a117" - "20a01720a1176a21a21720a11720a2176a21a31720a21720a3176a21a41720a31720a4176a21a51720a41720a5176a" - "21a61720a51720a6176a21a71720a61720a7176a21a81720a71720a8176a21a91720a81720a9176a21aa1720a91720" - "aa176a21ab1720aa1720ab176a21ac1720ab1720ac176a21ad1720ac1720ad176a21ae1720ad1720ae176a21af1720" - "ae1720af176a21b01720af1720b0176a21b11720b01720b1176a21b21720b11720b2176a21b31720b21720b3176a21" - "b41720b31720b4176a21b51720b41720b5176a21b61720b51720b6176a21b71720b61720b7176a21b81720b71720b8" - "176a21b91720b81720b9176a21ba1720b91720ba176a21bb1720ba1720bb176a21bc1720bb1720bc176a21bd1720bc" - "1720bd176a21be1720bd1720be176a21bf1720be1720bf176a21c01720bf1720c0176a21c11720c01720c1176a21c2" - "1720c11720c2176a21c31720c21720c3176a21c41720c31720c4176a21c51720c41720c5176a21c61720c51720c617" - "6a21c71720c61720c7176a21c81720c71720c8176a21c91720c81720c9176a21ca1720c91720ca176a21cb1720ca17" - "20cb176a21cc1720cb1720cc176a21cd1720cc1720cd176a21ce1720cd1720ce176a21cf1720ce1720cf176a21d017" - "20cf1720d0176a21d11720d01720d1176a21d21720d11720d2176a21d31720d21720d3176a21d41720d31720d4176a" - "21d51720d41720d5176a21d61720d51720d6176a21d71720d61720d7176a21d81720d71720d8176a21d91720d81720" - "d9176a21da1720d91720da176a21db1720da1720db176a21dc1720db1720dc176a21dd1720dc1720dd176a21de1720" - "dd1720de176a21df1720de1720df176a21e01720df1720e0176a21e11720e01720e1176a21e21720e11720e2176a21" - "e31720e21720e3176a21e41720e31720e4176a21e51720e41720e5176a21e61720e51720e6176a21e71720e61720e7" - "176a21e81720e71720e8176a21e91720e81720e9176a21ea1720e91720ea176a21eb1720ea1720eb176a21ec1720eb" - "1720ec176a21ed1720ec1720ed176a21ee1720ed1720ee176a21ef1720ee1720ef176a21f01720ef1720f0176a21f1" - "1720f01720f1176a21f21720f11720f2176a21f31720f21720f3176a21f41720f31720f4176a21f51720f41720f517" - "6a21f61720f51720f6176a21f71720f61720f7176a21f81720f71720f8176a21f91720f81720f9176a21fa1720f917" - "20fa176a21fb1720fa1720fb176a21fc1720fb1720fc176a21fd1720fc1720fd176a21fe1720fd1720fe176a21ff17" - "20fe1720ff176a21801820ff172080186a2181182080182081186a2182182081182082186a2183182082182083186a" - "2184182083182084186a2185182084182085186a2186182085182086186a2187182086182087186a21881820871820" - "88186a2189182088182089186a218a18208918208a186a218b18208a18208b186a218c18208b18208c186a218d1820" - "8c18208d186a218e18208d18208e186a218f18208e18208f186a219018208f182090186a2191182090182091186a21" - "92182091182092186a2193182092182093186a2194182093182094186a2195182094182095186a2196182095182096" - "186a2197182096182097186a2198182097182098186a2199182098182099186a219a18209918209a186a219b18209a" - "18209b186a219c18209b18209c186a219d18209c18209d186a219e18209d18209e186a219f18209e18209f186a21a0" - "18209f1820a0186a21a11820a01820a1186a21a21820a11820a2186a21a31820a21820a3186a21a41820a31820a418" - "6a21a51820a41820a5186a21a61820a51820a6186a21a71820a61820a7186a21a81820a71820a8186a21a91820a818" - "20a9186a21aa1820a91820aa186a21ab1820aa1820ab186a21ac1820ab1820ac186a21ad1820ac1820ad186a21ae18" - "20ad1820ae186a21af1820ae1820af186a21b01820af1820b0186a21b11820b01820b1186a21b21820b11820b2186a" - "21b31820b21820b3186a21b41820b31820b4186a21b51820b41820b5186a21b61820b51820b6186a21b71820b61820" - "b7186a21b81820b71820b8186a21b91820b81820b9186a21ba1820b91820ba186a21bb1820ba1820bb186a21bc1820" - "bb1820bc186a21bd1820bc1820bd186a21be1820bd1820be186a21bf1820be1820bf186a21c01820bf1820c0186a21" - "c11820c01820c1186a21c21820c11820c2186a21c31820c21820c3186a21c41820c31820c4186a21c51820c41820c5" - "186a21c61820c51820c6186a21c71820c61820c7186a21c81820c71820c8186a21c91820c81820c9186a21ca1820c9" - "1820ca186a21cb1820ca1820cb186a21cc1820cb1820cc186a21cd1820cc1820cd186a21ce1820cd1820ce186a21cf" - "1820ce1820cf186a21d01820cf1820d0186a21d11820d01820d1186a21d21820d11820d2186a21d31820d21820d318" - "6a21d41820d31820d4186a21d51820d41820d5186a21d61820d51820d6186a21d71820d61820d7186a21d81820d718" - "20d8186a21d91820d81820d9186a21da1820d91820da186a21db1820da1820db186a21dc1820db1820dc186a21dd18" - "20dc1820dd186a21de1820dd1820de186a21df1820de1820df186a21e01820df1820e0186a21e11820e01820e1186a" - "21e21820e11820e2186a21e31820e21820e3186a21e41820e31820e4186a21e51820e41820e5186a21e61820e51820" - "e6186a21e71820e61820e7186a21e81820e71820e8186a21e91820e81820e9186a21ea1820e91820ea186a21eb1820" - "ea1820eb186a21ec1820eb1820ec186a21ed1820ec1820ed186a21ee1820ed1820ee186a21ef1820ee1820ef186a21" - "f01820ef1820f0186a21f11820f01820f1186a21f21820f11820f2186a21f31820f21820f3186a21f41820f31820f4" - "186a21f51820f41820f5186a21f61820f51820f6186a21f71820f61820f7186a21f81820f71820f8186a21f91820f8" - "1820f9186a21fa1820f91820fa186a21fb1820fa1820fb186a21fc1820fb1820fc186a21fd1820fc1820fd186a21fe" - "1820fd1820fe186a21ff1820fe1820ff186a21801920ff182080196a2181192080192081196a218219208119208219" - "6a2183192082192083196a2184192083192084196a2185192084192085196a2186192085192086196a218719208619" - "2087196a2188192087192088196a2189192088192089196a218a19208919208a196a218b19208a19208b196a218c19" - "208b19208c196a218d19208c19208d196a218e19208d19208e196a218f19208e19208f196a219019208f192090196a" - "2191192090192091196a2192192091192092196a2193192092192093196a2194192093192094196a21951920941920" - "95196a2196192095192096196a2197192096192097196a2198192097192098196a2199192098192099196a219a1920" - "9919209a196a219b19209a19209b196a219c19209b19209c196a219d19209c19209d196a219e19209d19209e196a21" - "9f19209e19209f196a21a019209f1920a0196a21a11920a01920a1196a21a21920a11920a2196a21a31920a21920a3" - "196a21a41920a31920a4196a21a51920a41920a5196a21a61920a51920a6196a21a71920a61920a7196a21a81920a7" - "1920a8196a21a91920a81920a9196a21aa1920a91920aa196a21ab1920aa1920ab196a21ac1920ab1920ac196a21ad" - "1920ac1920ad196a21ae1920ad1920ae196a21af1920ae1920af196a21b01920af1920b0196a21b11920b01920b119" - "6a21b21920b11920b2196a21b31920b21920b3196a21b41920b31920b4196a21b51920b41920b5196a21b61920b519" - "20b6196a21b71920b61920b7196a21b81920b71920b8196a21b91920b81920b9196a21ba1920b91920ba196a21bb19" - "20ba1920bb196a21bc1920bb1920bc196a21bd1920bc1920bd196a21be1920bd1920be196a21bf1920be1920bf196a" - "21c01920bf1920c0196a21c11920c01920c1196a21c21920c11920c2196a21c31920c21920c3196a21c41920c31920" - "c4196a21c51920c41920c5196a21c61920c51920c6196a21c71920c61920c7196a21c81920c71920c8196a21c91920" - "c81920c9196a21ca1920c91920ca196a21cb1920ca1920cb196a21cc1920cb1920cc196a21cd1920cc1920cd196a21" - "ce1920cd1920ce196a21cf1920ce1920cf196a21d01920cf1920d0196a21d11920d01920d1196a21d21920d11920d2" - "196a21d31920d21920d3196a21d41920d31920d4196a21d51920d41920d5196a21d61920d51920d6196a21d71920d6" - "1920d7196a21d81920d71920d8196a21d91920d81920d9196a21da1920d91920da196a21db1920da1920db196a21dc" - "1920db1920dc196a21dd1920dc1920dd196a21de1920dd1920de196a21df1920de1920df196a21e01920df1920e019" - "6a21e11920e01920e1196a21e21920e11920e2196a21e31920e21920e3196a21e41920e31920e4196a21e51920e419" - "20e5196a21e61920e51920e6196a21e71920e61920e7196a21e81920e71920e8196a21e91920e81920e9196a21ea19" - "20e91920ea196a21eb1920ea1920eb196a21ec1920eb1920ec196a21ed1920ec1920ed196a21ee1920ed1920ee196a" - "21ef1920ee1920ef196a21f01920ef1920f0196a21f11920f01920f1196a21f21920f11920f2196a21f31920f21920" - "f3196a21f41920f31920f4196a21f51920f41920f5196a21f61920f51920f6196a21f71920f61920f7196a21f81920" - "f71920f8196a21f91920f81920f9196a21fa1920f91920fa196a21fb1920fa1920fb196a21fc1920fb1920fc196a21" - "fd1920fc1920fd196a21fe1920fd1920fe196a21ff1920fe1920ff196a21801a20ff1920801a6a21811a20801a2081" - "1a6a21821a20811a20821a6a21831a20821a20831a6a21841a20831a20841a6a21851a20841a20851a6a21861a2085" - "1a20861a6a21871a20861a20871a6a21881a20871a20881a6a21891a20881a20891a6a218a1a20891a208a1a6a218b" - "1a208a1a208b1a6a218c1a208b1a208c1a6a218d1a208c1a208d1a6a218e1a208d1a208e1a6a218f1a208e1a208f1a" - "6a21901a208f1a20901a6a21911a20901a20911a6a21921a20911a20921a6a21931a20921a20931a6a21941a20931a" - "20941a6a21951a20941a20951a6a21961a20951a20961a6a21971a20961a20971a6a21981a20971a20981a6a21991a" - "20981a20991a6a219a1a20991a209a1a6a219b1a209a1a209b1a6a219c1a209b1a209c1a6a219d1a209c1a209d1a6a" - "219e1a209d1a209e1a6a219f1a209e1a209f1a6a21a01a209f1a20a01a6a21a11a20a01a20a11a6a21a21a20a11a20" - "a21a6a21a31a20a21a20a31a6a21a41a20a31a20a41a6a21a51a20a41a20a51a6a21a61a20a51a20a61a6a21a71a20" - "a61a20a71a6a21a81a20a71a20a81a6a21a91a20a81a20a91a6a21aa1a20a91a20aa1a6a21ab1a20aa1a20ab1a6a21" - "ac1a20ab1a20ac1a6a21ad1a20ac1a20ad1a6a21ae1a20ad1a20ae1a6a21af1a20ae1a20af1a6a21b01a20af1a20b0" - "1a6a21b11a20b01a20b11a6a21b21a20b11a20b21a6a21b31a20b21a20b31a6a21b41a20b31a20b41a6a21b51a20b4" - "1a20b51a6a21b61a20b51a20b61a6a21b71a20b61a20b71a6a21b81a20b71a20b81a6a21b91a20b81a20b91a6a21ba" - "1a20b91a20ba1a6a21bb1a20ba1a20bb1a6a21bc1a20bb1a20bc1a6a21bd1a20bc1a20bd1a6a21be1a20bd1a20be1a" - "6a21bf1a20be1a20bf1a6a21c01a20bf1a20c01a6a21c11a20c01a20c11a6a21c21a20c11a20c21a6a21c31a20c21a" - "20c31a6a21c41a20c31a20c41a6a21c51a20c41a20c51a6a21c61a20c51a20c61a6a21c71a20c61a20c71a6a21c81a" - "20c71a20c81a6a21c91a20c81a20c91a6a21ca1a20c91a20ca1a6a21cb1a20ca1a20cb1a6a21cc1a20cb1a20cc1a6a" - "21cd1a20cc1a20cd1a6a21ce1a20cd1a20ce1a6a21cf1a20ce1a20cf1a6a21d01a20cf1a20d01a6a21d11a20d01a20" - "d11a6a21d21a20d11a20d21a6a21d31a20d21a20d31a6a21d41a20d31a20d41a6a21d51a20d41a20d51a6a21d61a20" - "d51a20d61a6a21d71a20d61a20d71a6a21d81a20d71a20d81a6a21d91a20d81a20d91a6a21da1a20d91a20da1a6a21" - "db1a20da1a20db1a6a21dc1a20db1a20dc1a6a21dd1a20dc1a20dd1a6a21de1a20dd1a20de1a6a21df1a20de1a20df" - "1a6a21e01a20df1a20e01a6a21e11a20e01a20e11a6a21e21a20e11a20e21a6a21e31a20e21a20e31a6a21e41a20e3" - "1a20e41a6a21e51a20e41a20e51a6a21e61a20e51a20e61a6a21e71a20e61a20e71a6a21e81a20e71a20e81a6a21e9" - "1a20e81a20e91a6a21ea1a20e91a20ea1a6a21eb1a20ea1a20eb1a6a21ec1a20eb1a20ec1a6a21ed1a20ec1a20ed1a" - "6a21ee1a20ed1a20ee1a6a21ef1a20ee1a20ef1a6a21f01a20ef1a20f01a6a21f11a20f01a20f11a6a21f21a20f11a" - "20f21a6a21f31a20f21a20f31a6a21f41a20f31a20f41a6a21f51a20f41a20f51a6a21f61a20f51a20f61a6a21f71a" - "20f61a20f71a6a21f81a20f71a20f81a6a21f91a20f81a20f91a6a21fa1a20f91a20fa1a6a21fb1a20fa1a20fb1a6a" - "21fc1a20fb1a20fc1a6a21fd1a20fc1a20fd1a6a21fe1a20fd1a20fe1a6a21ff1a20fe1a20ff1a6a21801b20ff1a20" - "801b6a21811b20801b20811b6a21821b20811b20821b6a21831b20821b20831b6a21841b20831b20841b6a21851b20" - "841b20851b6a21861b20851b20861b6a21871b20861b20871b6a21881b20871b20881b6a21891b20881b20891b6a21" - "8a1b20891b208a1b6a218b1b208a1b208b1b6a218c1b208b1b208c1b6a218d1b208c1b208d1b6a218e1b208d1b208e" - "1b6a218f1b208e1b208f1b6a21901b208f1b20901b6a21911b20901b20911b6a21921b20911b20921b6a21931b2092" - "1b20931b6a21941b20931b20941b6a21951b20941b20951b6a21961b20951b20961b6a21971b20961b20971b6a2198" - "1b20971b20981b6a21991b20981b20991b6a219a1b20991b209a1b6a219b1b209a1b209b1b6a219c1b209b1b209c1b" - "6a219d1b209c1b209d1b6a219e1b209d1b209e1b6a219f1b209e1b209f1b6a21a01b209f1b20a01b6a21a11b20a01b" - "20a11b6a21a21b20a11b20a21b6a21a31b20a21b20a31b6a21a41b20a31b20a41b6a21a51b20a41b20a51b6a21a61b" - "20a51b20a61b6a21a71b20a61b20a71b6a21a81b20a71b20a81b6a21a91b20a81b20a91b6a21aa1b20a91b20aa1b6a" - "21ab1b20aa1b20ab1b6a21ac1b20ab1b20ac1b6a21ad1b20ac1b20ad1b6a21ae1b20ad1b20ae1b6a21af1b20ae1b20" - "af1b6a21b01b20af1b20b01b6a21b11b20b01b20b11b6a21b21b20b11b20b21b6a21b31b20b21b20b31b6a21b41b20" - "b31b20b41b6a21b51b20b41b20b51b6a21b61b20b51b20b61b6a21b71b20b61b20b71b6a21b81b20b71b20b81b6a21" - "b91b20b81b20b91b6a21ba1b20b91b20ba1b6a21bb1b20ba1b20bb1b6a21bc1b20bb1b20bc1b6a21bd1b20bc1b20bd" - "1b6a21be1b20bd1b20be1b6a21bf1b20be1b20bf1b6a21c01b20bf1b20c01b6a21c11b20c01b20c11b6a21c21b20c1" - "1b20c21b6a21c31b20c21b20c31b6a21c41b20c31b20c41b6a21c51b20c41b20c51b6a21c61b20c51b20c61b6a21c7" - "1b20c61b20c71b6a21c81b20c71b20c81b6a21c91b20c81b20c91b6a21ca1b20c91b20ca1b6a21cb1b20ca1b20cb1b" - "6a21cc1b20cb1b20cc1b6a21cd1b20cc1b20cd1b6a21ce1b20cd1b20ce1b6a21cf1b20ce1b20cf1b6a21d01b20cf1b" - "20d01b6a21d11b20d01b20d11b6a21d21b20d11b20d21b6a21d31b20d21b20d31b6a21d41b20d31b20d41b6a21d51b" - "20d41b20d51b6a21d61b20d51b20d61b6a21d71b20d61b20d71b6a21d81b20d71b20d81b6a21d91b20d81b20d91b6a" - "21da1b20d91b20da1b6a21db1b20da1b20db1b6a21dc1b20db1b20dc1b6a21dd1b20dc1b20dd1b6a21de1b20dd1b20" - "de1b6a21df1b20de1b20df1b6a21e01b20df1b20e01b6a21e11b20e01b20e11b6a21e21b20e11b20e21b6a21e31b20" - "e21b20e31b6a21e41b20e31b20e41b6a21e51b20e41b20e51b6a21e61b20e51b20e61b6a21e71b20e61b20e71b6a21" - "e81b20e71b20e81b6a21e91b20e81b20e91b6a21ea1b20e91b20ea1b6a21eb1b20ea1b20eb1b6a21ec1b20eb1b20ec" - "1b6a21ed1b20ec1b20ed1b6a21ee1b20ed1b20ee1b6a21ef1b20ee1b20ef1b6a21f01b20ef1b20f01b6a21f11b20f0" - "1b20f11b6a21f21b20f11b20f21b6a21f31b20f21b20f31b6a21f41b20f31b20f41b6a21f51b20f41b20f51b6a21f6" - "1b20f51b20f61b6a21f71b20f61b20f71b6a21f81b20f71b20f81b6a21f91b20f81b20f91b6a21fa1b20f91b20fa1b" - "6a21fb1b20fa1b20fb1b6a21fc1b20fb1b20fc1b6a21fd1b20fc1b20fd1b6a21fe1b20fd1b20fe1b6a21ff1b20fe1b" - "20ff1b6a21801c20ff1b20801c6a21811c20801c20811c6a21821c20811c20821c6a21831c20821c20831c6a21841c" - "20831c20841c6a21851c20841c20851c6a21861c20851c20861c6a21871c20861c20871c6a21881c20871c20881c6a" - "21891c20881c20891c6a218a1c20891c208a1c6a218b1c208a1c208b1c6a218c1c208b1c208c1c6a218d1c208c1c20" - "8d1c6a218e1c208d1c208e1c6a218f1c208e1c208f1c6a21901c208f1c20901c6a21911c20901c20911c6a21921c20" - "911c20921c6a21931c20921c20931c6a21941c20931c20941c6a21951c20941c20951c6a21961c20951c20961c6a21" - "971c20961c20971c6a21981c20971c20981c6a21991c20981c20991c6a219a1c20991c209a1c6a219b1c209a1c209b" - "1c6a219c1c209b1c209c1c6a219d1c209c1c209d1c6a219e1c209d1c209e1c6a219f1c209e1c209f1c6a21a01c209f" - "1c20a01c6a21a11c20a01c20a11c6a21a21c20a11c20a21c6a21a31c20a21c20a31c6a21a41c20a31c20a41c6a21a5" - "1c20a41c20a51c6a21a61c20a51c20a61c6a21a71c20a61c20a71c6a21a81c20a71c20a81c6a21a91c20a81c20a91c" - "6a21aa1c20a91c20aa1c6a21ab1c20aa1c20ab1c6a21ac1c20ab1c20ac1c6a21ad1c20ac1c20ad1c6a21ae1c20ad1c" - "20ae1c6a21af1c20ae1c20af1c6a21b01c20af1c20b01c6a21b11c20b01c20b11c6a21b21c20b11c20b21c6a21b31c" - "20b21c20b31c6a21b41c20b31c20b41c6a21b51c20b41c20b51c6a21b61c20b51c20b61c6a21b71c20b61c20b71c6a" - "21b81c20b71c20b81c6a21b91c20b81c20b91c6a21ba1c20b91c20ba1c6a21bb1c20ba1c20bb1c6a21bc1c20bb1c20" - "bc1c6a21bd1c20bc1c20bd1c6a21be1c20bd1c20be1c6a21bf1c20be1c20bf1c6a21c01c20bf1c20c01c6a21c11c20" - "c01c20c11c6a21c21c20c11c20c21c6a21c31c20c21c20c31c6a21c41c20c31c20c41c6a21c51c20c41c20c51c6a21" - "c61c20c51c20c61c6a21c71c20c61c20c71c6a21c81c20c71c20c81c6a21c91c20c81c20c91c6a21ca1c20c91c20ca" - "1c6a21cb1c20ca1c20cb1c6a21cc1c20cb1c20cc1c6a21cd1c20cc1c20cd1c6a21ce1c20cd1c20ce1c6a21cf1c20ce" - "1c20cf1c6a21d01c20cf1c20d01c6a21d11c20d01c20d11c6a21d21c20d11c20d21c6a21d31c20d21c20d31c6a21d4" - "1c20d31c20d41c6a21d51c20d41c20d51c6a21d61c20d51c20d61c6a21d71c20d61c20d71c6a21d81c20d71c20d81c" - "6a21d91c20d81c20d91c6a21da1c20d91c20da1c6a21db1c20da1c20db1c6a21dc1c20db1c20dc1c6a21dd1c20dc1c" - "20dd1c6a21de1c20dd1c20de1c6a21df1c20de1c20df1c6a21e01c20df1c20e01c6a21e11c20e01c20e11c6a21e21c" - "20e11c20e21c6a21e31c20e21c20e31c6a21e41c20e31c20e41c6a21e51c20e41c20e51c6a21e61c20e51c20e61c6a" - "21e71c20e61c20e71c6a21e81c20e71c20e81c6a21e91c20e81c20e91c6a21ea1c20e91c20ea1c6a21eb1c20ea1c20" - "eb1c6a21ec1c20eb1c20ec1c6a21ed1c20ec1c20ed1c6a21ee1c20ed1c20ee1c6a21ef1c20ee1c20ef1c6a21f01c20" - "ef1c20f01c6a21f11c20f01c20f11c6a21f21c20f11c20f21c6a21f31c20f21c20f31c6a21f41c20f31c20f41c6a21" - "f51c20f41c20f51c6a21f61c20f51c20f61c6a21f71c20f61c20f71c6a21f81c20f71c20f81c6a21f91c20f81c20f9" - "1c6a21fa1c20f91c20fa1c6a21fb1c20fa1c20fb1c6a21fc1c20fb1c20fc1c6a21fd1c20fc1c20fd1c6a21fe1c20fd" - "1c20fe1c6a21ff1c20fe1c20ff1c6a21801d20ff1c20801d6a21811d20801d20811d6a21821d20811d20821d6a2183" - "1d20821d20831d6a21841d20831d20841d6a21851d20841d20851d6a21861d20851d20861d6a21871d20861d20871d" - "6a21881d20871d20881d6a21891d20881d20891d6a218a1d20891d208a1d6a218b1d208a1d208b1d6a218c1d208b1d" - "208c1d6a218d1d208c1d208d1d6a218e1d208d1d208e1d6a218f1d208e1d208f1d6a21901d208f1d20901d6a21911d" - "20901d20911d6a21921d20911d20921d6a21931d20921d20931d6a21941d20931d20941d6a21951d20941d20951d6a" - "21961d20951d20961d6a21971d20961d20971d6a21981d20971d20981d6a21991d20981d20991d6a219a1d20991d20" - "9a1d6a219b1d209a1d209b1d6a219c1d209b1d209c1d6a219d1d209c1d209d1d6a219e1d209d1d209e1d6a219f1d20" - "9e1d209f1d6a21a01d209f1d20a01d6a21a11d20a01d20a11d6a21a21d20a11d20a21d6a21a31d20a21d20a31d6a21" - "a41d20a31d20a41d6a21a51d20a41d20a51d6a21a61d20a51d20a61d6a21a71d20a61d20a71d6a21a81d20a71d20a8" - "1d6a21a91d20a81d20a91d6a21aa1d20a91d20aa1d6a21ab1d20aa1d20ab1d6a21ac1d20ab1d20ac1d6a21ad1d20ac" - "1d20ad1d6a21ae1d20ad1d20ae1d6a21af1d20ae1d20af1d6a21b01d20af1d20b01d6a21b11d20b01d20b11d6a21b2" - "1d20b11d20b21d6a21b31d20b21d20b31d6a21b41d20b31d20b41d6a21b51d20b41d20b51d6a21b61d20b51d20b61d" - "6a21b71d20b61d20b71d6a21b81d20b71d20b81d6a21b91d20b81d20b91d6a21ba1d20b91d20ba1d6a21bb1d20ba1d" - "20bb1d6a21bc1d20bb1d20bc1d6a21bd1d20bc1d20bd1d6a21be1d20bd1d20be1d6a21bf1d20be1d20bf1d6a21c01d" - "20bf1d20c01d6a21c11d20c01d20c11d6a21c21d20c11d20c21d6a21c31d20c21d20c31d6a21c41d20c31d20c41d6a" - "21c51d20c41d20c51d6a21c61d20c51d20c61d6a21c71d20c61d20c71d6a21c81d20c71d20c81d6a21c91d20c81d20" - "c91d6a21ca1d20c91d20ca1d6a21cb1d20ca1d20cb1d6a21cc1d20cb1d20cc1d6a21cd1d20cc1d20cd1d6a21ce1d20" - "cd1d20ce1d6a21cf1d20ce1d20cf1d6a21d01d20cf1d20d01d6a21d11d20d01d20d11d6a21d21d20d11d20d21d6a21" - "d31d20d21d20d31d6a21d41d20d31d20d41d6a21d51d20d41d20d51d6a21d61d20d51d20d61d6a21d71d20d61d20d7" - "1d6a21d81d20d71d20d81d6a21d91d20d81d20d91d6a21da1d20d91d20da1d6a21db1d20da1d20db1d6a21dc1d20db" - "1d20dc1d6a21dd1d20dc1d20dd1d6a21de1d20dd1d20de1d6a21df1d20de1d20df1d6a21e01d20df1d20e01d6a21e1" - "1d20e01d20e11d6a21e21d20e11d20e21d6a21e31d20e21d20e31d6a21e41d20e31d20e41d6a21e51d20e41d20e51d" - "6a21e61d20e51d20e61d6a21e71d20e61d20e71d6a21e81d20e71d20e81d6a21e91d20e81d20e91d6a21ea1d20e91d" - "20ea1d6a21eb1d20ea1d20eb1d6a21ec1d20eb1d20ec1d6a21ed1d20ec1d20ed1d6a21ee1d20ed1d20ee1d6a21ef1d" - "20ee1d20ef1d6a21f01d20ef1d20f01d6a21f11d20f01d20f11d6a21f21d20f11d20f21d6a21f31d20f21d20f31d6a" - "21f41d20f31d20f41d6a21f51d20f41d20f51d6a21f61d20f51d20f61d6a21f71d20f61d20f71d6a21f81d20f71d20" - "f81d6a21f91d20f81d20f91d6a21fa1d20f91d20fa1d6a21fb1d20fa1d20fb1d6a21fc1d20fb1d20fc1d6a21fd1d20" - "fc1d20fd1d6a21fe1d20fd1d20fe1d6a21ff1d20fe1d20ff1d6a21801e20ff1d20801e6a21811e20801e20811e6a21" - "821e20811e20821e6a21831e20821e20831e6a21841e20831e20841e6a21851e20841e20851e6a21861e20851e2086" - "1e6a21871e20861e20871e6a21881e20871e20881e6a21891e20881e20891e6a218a1e20891e208a1e6a218b1e208a" - "1e208b1e6a218c1e208b1e208c1e6a218d1e208c1e208d1e6a218e1e208d1e208e1e6a218f1e208e1e208f1e6a2190" - "1e208f1e20901e6a21911e20901e20911e6a21921e20911e20921e6a21931e20921e20931e6a21941e20931e20941e" - "6a21951e20941e20951e6a21961e20951e20961e6a21971e20961e20971e6a21981e20971e20981e6a21991e20981e" - "20991e6a219a1e20991e209a1e6a219b1e209a1e209b1e6a219c1e209b1e209c1e6a219d1e209c1e209d1e6a219e1e" - "209d1e209e1e6a219f1e209e1e209f1e6a21a01e209f1e20a01e6a21a11e20a01e20a11e6a21a21e20a11e20a21e6a" - "21a31e20a21e20a31e6a21a41e20a31e20a41e6a21a51e20a41e20a51e6a21a61e20a51e20a61e6a21a71e20a61e20" - "a71e6a21a81e20a71e20a81e6a21a91e20a81e20a91e6a21aa1e20a91e20aa1e6a21ab1e20aa1e20ab1e6a21ac1e20" - "ab1e20ac1e6a21ad1e20ac1e20ad1e6a21ae1e20ad1e20ae1e6a21af1e20ae1e20af1e6a21b01e20af1e20b01e6a21" - "b11e20b01e20b11e6a21b21e20b11e20b21e6a21b31e20b21e20b31e6a21b41e20b31e20b41e6a21b51e20b41e20b5" - "1e6a21b61e20b51e20b61e6a21b71e20b61e20b71e6a21b81e20b71e20b81e6a21b91e20b81e20b91e6a21ba1e20b9" - "1e20ba1e6a21bb1e20ba1e20bb1e6a21bc1e20bb1e20bc1e6a21bd1e20bc1e20bd1e6a21be1e20bd1e20be1e6a21bf" - "1e20be1e20bf1e6a21c01e20bf1e20c01e6a21c11e20c01e20c11e6a21c21e20c11e20c21e6a21c31e20c21e20c31e" - "6a21c41e20c31e20c41e6a21c51e20c41e20c51e6a21c61e20c51e20c61e6a21c71e20c61e20c71e6a21c81e20c71e" - "20c81e6a21c91e20c81e20c91e6a21ca1e20c91e20ca1e6a21cb1e20ca1e20cb1e6a21cc1e20cb1e20cc1e6a21cd1e" - "20cc1e20cd1e6a21ce1e20cd1e20ce1e6a21cf1e20ce1e20cf1e6a21d01e20cf1e20d01e6a21d11e20d01e20d11e6a" - "21d21e20d11e20d21e6a21d31e20d21e20d31e6a21d41e20d31e20d41e6a21d51e20d41e20d51e6a21d61e20d51e20" - "d61e6a21d71e20d61e20d71e6a21d81e20d71e20d81e6a21d91e20d81e20d91e6a21da1e20d91e20da1e6a21db1e20" - "da1e20db1e6a21dc1e20db1e20dc1e6a21dd1e20dc1e20dd1e6a21de1e20dd1e20de1e6a21df1e20de1e20df1e6a21" - "e01e20df1e20e01e6a21e11e20e01e20e11e6a21e21e20e11e20e21e6a21e31e20e21e20e31e6a21e41e20e31e20e4" - "1e6a21e51e20e41e20e51e6a21e61e20e51e20e61e6a21e71e20e61e20e71e6a21e81e20e71e20e81e6a21e91e20e8" - "1e20e91e6a21ea1e20e91e20ea1e6a21eb1e20ea1e20eb1e6a21ec1e20eb1e20ec1e6a21ed1e20ec1e20ed1e6a21ee" - "1e20ed1e20ee1e6a21ef1e20ee1e20ef1e6a21f01e20ef1e20f01e6a21f11e20f01e20f11e6a21f21e20f11e20f21e" - "6a21f31e20f21e20f31e6a21f41e20f31e20f41e6a21f51e20f41e20f51e6a21f61e20f51e20f61e6a21f71e20f61e" - "20f71e6a21f81e20f71e20f81e6a21f91e20f81e20f91e6a21fa1e20f91e20fa1e6a21fb1e20fa1e20fb1e6a21fc1e" - "20fb1e20fc1e6a21fd1e20fc1e20fd1e6a21fe1e20fd1e20fe1e6a21ff1e20fe1e20ff1e6a21801f20ff1e20801f6a" - "21811f20801f20811f6a21821f20811f20821f6a21831f20821f20831f6a21841f20831f20841f6a21851f20841f20" - "851f6a21861f20851f20861f6a21871f20861f20871f6a21881f20871f20881f6a21891f20881f20891f6a218a1f20" - "891f208a1f6a218b1f208a1f208b1f6a218c1f208b1f208c1f6a218d1f208c1f208d1f6a218e1f208d1f208e1f6a21" - "8f1f208e1f208f1f6a21901f208f1f20901f6a21911f20901f20911f6a21921f20911f20921f6a21931f20921f2093" - "1f6a21941f20931f20941f6a21951f20941f20951f6a21961f20951f20961f6a21971f20961f20971f6a21981f2097" - "1f20981f6a21991f20981f20991f6a219a1f20991f209a1f6a219b1f209a1f209b1f6a219c1f209b1f209c1f6a219d" - "1f209c1f209d1f6a219e1f209d1f209e1f6a219f1f209e1f209f1f6a21a01f209f1f20a01f6a21a11f20a01f20a11f" - "6a21a21f20a11f20a21f6a21a31f20a21f20a31f6a21a41f20a31f20a41f6a21a51f20a41f20a51f6a21a61f20a51f" - "20a61f6a21a71f20a61f20a71f6a21a81f20a71f20a81f6a21a91f20a81f20a91f6a21aa1f20a91f20aa1f6a21ab1f" - "20aa1f20ab1f6a21ac1f20ab1f20ac1f6a21ad1f20ac1f20ad1f6a21ae1f20ad1f20ae1f6a21af1f20ae1f20af1f6a" - "21b01f20af1f20b01f6a21b11f20b01f20b11f6a21b21f20b11f20b21f6a21b31f20b21f20b31f6a21b41f20b31f20" - "b41f6a21b51f20b41f20b51f6a21b61f20b51f20b61f6a21b71f20b61f20b71f6a21b81f20b71f20b81f6a21b91f20" - "b81f20b91f6a21ba1f20b91f20ba1f6a21bb1f20ba1f20bb1f6a21bc1f20bb1f20bc1f6a21bd1f20bc1f20bd1f6a21" - "be1f20bd1f20be1f6a21bf1f20be1f20bf1f6a21c01f20bf1f20c01f6a21c11f20c01f20c11f6a21c21f20c11f20c2" - "1f6a21c31f20c21f20c31f6a21c41f20c31f20c41f6a21c51f20c41f20c51f6a21c61f20c51f20c61f6a21c71f20c6" - "1f20c71f6a21c81f20c71f20c81f6a21c91f20c81f20c91f6a21ca1f20c91f20ca1f6a21cb1f20ca1f20cb1f6a21cc" - "1f20cb1f20cc1f6a21cd1f20cc1f20cd1f6a21ce1f20cd1f20ce1f6a21cf1f20ce1f20cf1f6a21d01f20cf1f20d01f" - "6a21d11f20d01f20d11f6a21d21f20d11f20d21f6a21d31f20d21f20d31f6a21d41f20d31f20d41f6a21d51f20d41f" - "20d51f6a21d61f20d51f20d61f6a21d71f20d61f20d71f6a21d81f20d71f20d81f6a21d91f20d81f20d91f6a21da1f" - "20d91f20da1f6a21db1f20da1f20db1f6a21dc1f20db1f20dc1f6a21dd1f20dc1f20dd1f6a21de1f20dd1f20de1f6a" - "21df1f20de1f20df1f6a21e01f20df1f20e01f6a21e11f20e01f20e11f6a21e21f20e11f20e21f6a21e31f20e21f20" - "e31f6a21e41f20e31f20e41f6a21e51f20e41f20e51f6a21e61f20e51f20e61f6a21e71f20e61f20e71f6a21e81f20" - "e71f20e81f6a21e91f20e81f20e91f6a21ea1f20e91f20ea1f6a21eb1f20ea1f20eb1f6a21ec1f20eb1f20ec1f6a21" - "ed1f20ec1f20ed1f6a21ee1f20ed1f20ee1f6a21ef1f20ee1f20ef1f6a21f01f20ef1f20f01f6a21f11f20f01f20f1" - "1f6a21f21f20f11f20f21f6a21f31f20f21f20f31f6a21f41f20f31f20f41f6a21f51f20f41f20f51f6a21f61f20f5" - "1f20f61f6a21f71f20f61f20f71f6a21f81f20f71f20f81f6a21f91f20f81f20f91f6a21fa1f20f91f20fa1f6a21fb" - "1f20fa1f20fb1f6a21fc1f20fb1f20fc1f6a21fd1f20fc1f20fd1f6a21fe1f20fd1f20fe1f6a21ff1f20fe1f20ff1f" - "6a21802020ff1f2080206a2181202080202081206a2182202081202082206a2183202082202083206a218420208320" - "2084206a2185202084202085206a2186202085202086206a2187202086202087206a2188202087202088206a218920" - "2088202089206a218a20208920208a206a218b20208a20208b206a218c20208b20208c206a218d20208c20208d206a" - "218e20208d20208e206a218f20208e20208f206a219020208f202090206a2191202090202091206a21922020912020" - "92206a2193202092202093206a2194202093202094206a2195202094202095206a2196202095202096206a21972020" - "96202097206a2198202097202098206a2199202098202099206a219a20209920209a206a219b20209a20209b206a21" - "9c20209b20209c206a219d20209c20209d206a219e20209d20209e206a219f20209e20209f206a21a020209f2020a0" - "206a21a12020a02020a1206a21a22020a12020a2206a21a32020a22020a3206a21a42020a32020a4206a21a52020a4" - "2020a5206a21a62020a52020a6206a21a72020a62020a7206a21a82020a72020a8206a21a92020a82020a9206a21aa" - "2020a92020aa206a21ab2020aa2020ab206a21ac2020ab2020ac206a21ad2020ac2020ad206a21ae2020ad2020ae20" - "6a21af2020ae2020af206a21b02020af2020b0206a21b12020b02020b1206a21b22020b12020b2206a21b32020b220" - "20b3206a21b42020b32020b4206a21b52020b42020b5206a21b62020b52020b6206a21b72020b62020b7206a21b820" - "20b72020b8206a21b92020b82020b9206a21ba2020b92020ba206a21bb2020ba2020bb206a21bc2020bb2020bc206a" - "21bd2020bc2020bd206a21be2020bd2020be206a21bf2020be2020bf206a21c02020bf2020c0206a21c12020c02020" - "c1206a21c22020c12020c2206a21c32020c22020c3206a21c42020c32020c4206a21c52020c42020c5206a21c62020" - "c52020c6206a21c72020c62020c7206a21c82020c72020c8206a21c92020c82020c9206a21ca2020c92020ca206a21" - "cb2020ca2020cb206a21cc2020cb2020cc206a21cd2020cc2020cd206a21ce2020cd2020ce206a21cf2020ce2020cf" - "206a21d02020cf2020d0206a21d12020d02020d1206a21d22020d12020d2206a21d32020d22020d3206a21d42020d3" - "2020d4206a21d52020d42020d5206a21d62020d52020d6206a21d72020d62020d7206a21d82020d72020d8206a21d9" - "2020d82020d9206a21da2020d92020da206a21db2020da2020db206a21dc2020db2020dc206a21dd2020dc2020dd20" - "6a21de2020dd2020de206a21df2020de2020df206a21e02020df2020e0206a21e12020e02020e1206a21e22020e120" - "20e2206a21e32020e22020e3206a21e42020e32020e4206a21e52020e42020e5206a21e62020e52020e6206a21e720" - "20e62020e7206a21e82020e72020e8206a21e92020e82020e9206a21ea2020e92020ea206a21eb2020ea2020eb206a" - "21ec2020eb2020ec206a21ed2020ec2020ed206a21ee2020ed2020ee206a21ef2020ee2020ef206a21f02020ef2020" - "f0206a21f12020f02020f1206a21f22020f12020f2206a21f32020f22020f3206a21f42020f32020f4206a21f52020" - "f42020f5206a21f62020f52020f6206a21f72020f62020f7206a21f82020f72020f8206a21f92020f82020f9206a21" - "fa2020f92020fa206a21fb2020fa2020fb206a21fc2020fb2020fc206a21fd2020fc2020fd206a21fe2020fd2020fe" - "206a21ff2020fe2020ff206a21802120ff202080216a2181212080212081216a2182212081212082216a2183212082" - "212083216a2184212083212084216a2185212084212085216a2186212085212086216a2187212086212087216a2188" - "212087212088216a2189212088212089216a218a21208921208a216a218b21208a21208b216a218c21208b21208c21" - "6a218d21208c21208d216a218e21208d21208e216a218f21208e21208f216a219021208f212090216a219121209021" - "2091216a2192212091212092216a2193212092212093216a2194212093212094216a2195212094212095216a219621" - "2095212096216a2197212096212097216a2198212097212098216a2199212098212099216a219a21209921209a216a" - "219b21209a21209b216a219c21209b21209c216a219d21209c21209d216a219e21209d21209e216a219f21209e2120" - "9f216a21a021209f2120a0216a21a12120a02120a1216a21a22120a12120a2216a21a32120a22120a3216a21a42120" - "a32120a4216a21a52120a42120a5216a21a62120a52120a6216a21a72120a62120a7216a21a82120a72120a8216a21" - "a92120a82120a9216a21aa2120a92120aa216a21ab2120aa2120ab216a21ac2120ab2120ac216a21ad2120ac2120ad" - "216a21ae2120ad2120ae216a21af2120ae2120af216a21b02120af2120b0216a21b12120b02120b1216a21b22120b1" - "2120b2216a21b32120b22120b3216a21b42120b32120b4216a21b52120b42120b5216a21b62120b52120b6216a21b7" - "2120b62120b7216a21b82120b72120b8216a21b92120b82120b9216a21ba2120b92120ba216a21bb2120ba2120bb21" - "6a21bc2120bb2120bc216a21bd2120bc2120bd216a21be2120bd2120be216a21bf2120be2120bf216a21c02120bf21" - "20c0216a21c12120c02120c1216a21c22120c12120c2216a21c32120c22120c3216a21c42120c32120c4216a21c521" - "20c42120c5216a21c62120c52120c6216a21c72120c62120c7216a21c82120c72120c8216a21c92120c82120c9216a" - "21ca2120c92120ca216a21cb2120ca2120cb216a21cc2120cb2120cc216a21cd2120cc2120cd216a21ce2120cd2120" - "ce216a21cf2120ce2120cf216a21d02120cf2120d0216a21d12120d02120d1216a21d22120d12120d2216a21d32120" - "d22120d3216a21d42120d32120d4216a21d52120d42120d5216a21d62120d52120d6216a21d72120d62120d7216a21" - "d82120d72120d8216a21d92120d82120d9216a21da2120d92120da216a21db2120da2120db216a21dc2120db2120dc" - "216a21dd2120dc2120dd216a21de2120dd2120de216a21df2120de2120df216a21e02120df2120e0216a21e12120e0" - "2120e1216a21e22120e12120e2216a21e32120e22120e3216a21e42120e32120e4216a21e52120e42120e5216a21e6" - "2120e52120e6216a21e72120e62120e7216a21e82120e72120e8216a21e92120e82120e9216a21ea2120e92120ea21" - "6a21eb2120ea2120eb216a21ec2120eb2120ec216a21ed2120ec2120ed216a21ee2120ed2120ee216a21ef2120ee21" - "20ef216a21f02120ef2120f0216a21f12120f02120f1216a21f22120f12120f2216a21f32120f22120f3216a21f421" - "20f32120f4216a21f52120f42120f5216a21f62120f52120f6216a21f72120f62120f7216a21f82120f72120f8216a" - "21f92120f82120f9216a21fa2120f92120fa216a21fb2120fa2120fb216a21fc2120fb2120fc216a21fd2120fc2120" - "fd216a21fe2120fd2120fe216a21ff2120fe2120ff216a21802220ff212080226a2181222080222081226a21822220" - "81222082226a2183222082222083226a2184222083222084226a2185222084222085226a2186222085222086226a21" - "87222086222087226a2188222087222088226a2189222088222089226a218a22208922208a226a218b22208a22208b" - "226a218c22208b22208c226a218d22208c22208d226a218e22208d22208e226a218f22208e22208f226a219022208f" - "222090226a2191222090222091226a2192222091222092226a2193222092222093226a2194222093222094226a2195" - "222094222095226a2196222095222096226a2197222096222097226a2198222097222098226a219922209822209922" - "6a219a22209922209a226a219b22209a22209b226a219c22209b22209c226a219d22209c22209d226a219e22209d22" - "209e226a219f22209e22209f226a21a022209f2220a0226a21a12220a02220a1226a21a22220a12220a2226a21a322" - "20a22220a3226a21a42220a32220a4226a21a52220a42220a5226a21a62220a52220a6226a21a72220a62220a7226a" - "21a82220a72220a8226a21a92220a82220a9226a21aa2220a92220aa226a21ab2220aa2220ab226a21ac2220ab2220" - "ac226a21ad2220ac2220ad226a21ae2220ad2220ae226a21af2220ae2220af226a21b02220af2220b0226a21b12220" - "b02220b1226a21b22220b12220b2226a21b32220b22220b3226a21b42220b32220b4226a21b52220b42220b5226a21" - "b62220b52220b6226a21b72220b62220b7226a21b82220b72220b8226a21b92220b82220b9226a21ba2220b92220ba" - "226a21bb2220ba2220bb226a21bc2220bb2220bc226a21bd2220bc2220bd226a21be2220bd2220be226a21bf2220be" - "2220bf226a21c02220bf2220c0226a21c12220c02220c1226a21c22220c12220c2226a21c32220c22220c3226a21c4" - "2220c32220c4226a21c52220c42220c5226a21c62220c52220c6226a21c72220c62220c7226a21c82220c72220c822" - "6a21c92220c82220c9226a21ca2220c92220ca226a21cb2220ca2220cb226a21cc2220cb2220cc226a21cd2220cc22" - "20cd226a21ce2220cd2220ce226a21cf2220ce2220cf226a21d02220cf2220d0226a21d12220d02220d1226a21d222" - "20d12220d2226a21d32220d22220d3226a21d42220d32220d4226a21d52220d42220d5226a21d62220d52220d6226a" - "21d72220d62220d7226a21d82220d72220d8226a21d92220d82220d9226a21da2220d92220da226a21db2220da2220" - "db226a21dc2220db2220dc226a21dd2220dc2220dd226a21de2220dd2220de226a21df2220de2220df226a21e02220" - "df2220e0226a21e12220e02220e1226a21e22220e12220e2226a21e32220e22220e3226a21e42220e32220e4226a21" - "e52220e42220e5226a21e62220e52220e6226a21e72220e62220e7226a21e82220e72220e8226a21e92220e82220e9" - "226a21ea2220e92220ea226a21eb2220ea2220eb226a21ec2220eb2220ec226a21ed2220ec2220ed226a21ee2220ed" - "2220ee226a21ef2220ee2220ef226a21f02220ef2220f0226a21f12220f02220f1226a21f22220f12220f2226a21f3" - "2220f22220f3226a21f42220f32220f4226a21f52220f42220f5226a21f62220f52220f6226a21f72220f62220f722" - "6a21f82220f72220f8226a21f92220f82220f9226a21fa2220f92220fa226a21fb2220fa2220fb226a21fc2220fb22" - "20fc226a21fd2220fc2220fd226a21fe2220fd2220fe226a21ff2220fe2220ff226a21802320ff222080236a218123" - "2080232081236a2182232081232082236a2183232082232083236a2184232083232084236a2185232084232085236a" - "2186232085232086236a2187232086232087236a2188232087232088236a2189232088232089236a218a2320892320" - "8a236a218b23208a23208b236a218c23208b23208c236a218d23208c23208d236a218e23208d23208e236a218f2320" - "8e23208f236a219023208f232090236a2191232090232091236a2192232091232092236a2193232092232093236a21" - "94232093232094236a2195232094232095236a2196232095232096236a2197232096232097236a2198232097232098" - "236a2199232098232099236a219a23209923209a236a219b23209a23209b236a219c23209b23209c236a219d23209c" - "23209d236a219e23209d23209e236a219f23209e23209f236a21a023209f2320a0236a21a12320a02320a1236a21a2" - "2320a12320a2236a21a32320a22320a3236a21a42320a32320a4236a21a52320a42320a5236a21a62320a52320a623" - "6a21a72320a62320a7236a21a82320a72320a8236a21a92320a82320a9236a21aa2320a92320aa236a21ab2320aa23" - "20ab236a21ac2320ab2320ac236a21ad2320ac2320ad236a21ae2320ad2320ae236a21af2320ae2320af236a21b023" - "20af2320b0236a21b12320b02320b1236a21b22320b12320b2236a21b32320b22320b3236a21b42320b32320b4236a" - "21b52320b42320b5236a21b62320b52320b6236a21b72320b62320b7236a21b82320b72320b8236a21b92320b82320" - "b9236a21ba2320b92320ba236a21bb2320ba2320bb236a21bc2320bb2320bc236a21bd2320bc2320bd236a21be2320" - "bd2320be236a21bf2320be2320bf236a21c02320bf2320c0236a21c12320c02320c1236a21c22320c12320c2236a21" - "c32320c22320c3236a21c42320c32320c4236a21c52320c42320c5236a21c62320c52320c6236a21c72320c62320c7" - "236a21c82320c72320c8236a21c92320c82320c9236a21ca2320c92320ca236a21cb2320ca2320cb236a21cc2320cb" - "2320cc236a21cd2320cc2320cd236a21ce2320cd2320ce236a21cf2320ce2320cf236a21d02320cf2320d0236a21d1" - "2320d02320d1236a21d22320d12320d2236a21d32320d22320d3236a21d42320d32320d4236a21d52320d42320d523" - "6a21d62320d52320d6236a21d72320d62320d7236a21d82320d72320d8236a21d92320d82320d9236a21da2320d923" - "20da236a21db2320da2320db236a21dc2320db2320dc236a21dd2320dc2320dd236a21de2320dd2320de236a21df23" - "20de2320df236a21e02320df2320e0236a21e12320e02320e1236a21e22320e12320e2236a21e32320e22320e3236a" - "21e42320e32320e4236a21e52320e42320e5236a21e62320e52320e6236a21e72320e62320e7236a21e82320e72320" - "e8236a21e92320e82320e9236a21ea2320e92320ea236a21eb2320ea2320eb236a21ec2320eb2320ec236a21ed2320" - "ec2320ed236a21ee2320ed2320ee236a21ef2320ee2320ef236a21f02320ef2320f0236a21f12320f02320f1236a21" - "f22320f12320f2236a21f32320f22320f3236a21f42320f32320f4236a21f52320f42320f5236a21f62320f52320f6" - "236a21f72320f62320f7236a21f82320f72320f8236a21f92320f82320f9236a21fa2320f92320fa236a21fb2320fa" - "2320fb236a21fc2320fb2320fc236a21fd2320fc2320fd236a21fe2320fd2320fe236a21ff2320fe2320ff236a2180" - "2420ff232080246a2181242080242081246a2182242081242082246a2183242082242083246a218424208324208424" - "6a2185242084242085246a2186242085242086246a2187242086242087246a2188242087242088246a218924208824" - "2089246a218a24208924208a246a218b24208a24208b246a218c24208b24208c246a218d24208c24208d246a218e24" - "208d24208e246a218f24208e24208f246a219024208f242090246a2191242090242091246a2192242091242092246a" - "2193242092242093246a2194242093242094246a2195242094242095246a2196242095242096246a21972420962420" - "97246a2198242097242098246a2199242098242099246a219a24209924209a246a219b24209a24209b246a219c2420" - "9b24209c246a219d24209c24209d246a219e24209d24209e246a219f24209e24209f246a21a024209f2420a0246a21" - "a12420a02420a1246a21a22420a12420a2246a21a32420a22420a3246a21a42420a32420a4246a21a52420a42420a5" - "246a21a62420a52420a6246a21a72420a62420a7246a21a82420a72420a8246a21a92420a82420a9246a21aa2420a9" - "2420aa246a21ab2420aa2420ab246a21ac2420ab2420ac246a21ad2420ac2420ad246a21ae2420ad2420ae246a21af" - "2420ae2420af246a21b02420af2420b0246a21b12420b02420b1246a21b22420b12420b2246a21b32420b22420b324" - "6a21b42420b32420b4246a21b52420b42420b5246a21b62420b52420b6246a21b72420b62420b7246a21b82420b724" - "20b8246a21b92420b82420b9246a21ba2420b92420ba246a21bb2420ba2420bb246a21bc2420bb2420bc246a21bd24" - "20bc2420bd246a21be2420bd2420be246a21bf2420be2420bf246a21c02420bf2420c0246a21c12420c02420c1246a" - "21c22420c12420c2246a21c32420c22420c3246a21c42420c32420c4246a21c52420c42420c5246a21c62420c52420" - "c6246a21c72420c62420c7246a21c82420c72420c8246a21c92420c82420c9246a21ca2420c92420ca246a21cb2420" - "ca2420cb246a21cc2420cb2420cc246a21cd2420cc2420cd246a21ce2420cd2420ce246a21cf2420ce2420cf246a21" - "d02420cf2420d0246a21d12420d02420d1246a21d22420d12420d2246a21d32420d22420d3246a21d42420d32420d4" - "246a21d52420d42420d5246a21d62420d52420d6246a21d72420d62420d7246a21d82420d72420d8246a21d92420d8" - "2420d9246a21da2420d92420da246a21db2420da2420db246a21dc2420db2420dc246a21dd2420dc2420dd246a21de" - "2420dd2420de246a21df2420de2420df246a21e02420df2420e0246a21e12420e02420e1246a21e22420e12420e224" - "6a21e32420e22420e3246a21e42420e32420e4246a21e52420e42420e5246a21e62420e52420e6246a21e72420e624" - "20e7246a21e82420e72420e8246a21e92420e82420e9246a21ea2420e92420ea246a21eb2420ea2420eb246a21ec24" - "20eb2420ec246a21ed2420ec2420ed246a21ee2420ed2420ee246a21ef2420ee2420ef246a21f02420ef2420f0246a" - "21f12420f02420f1246a21f22420f12420f2246a21f32420f22420f3246a21f42420f32420f4246a21f52420f42420" - "f5246a21f62420f52420f6246a21f72420f62420f7246a21f82420f72420f8246a21f92420f82420f9246a21fa2420" - "f92420fa246a21fb2420fa2420fb246a21fc2420fb2420fc246a21fd2420fc2420fd246a21fe2420fd2420fe246a21" - "ff2420fe2420ff246a21802520ff242080256a2181252080252081256a2182252081252082256a2183252082252083" - "256a2184252083252084256a2185252084252085256a2186252085252086256a2187252086252087256a2188252087" - "252088256a2189252088252089256a218a25208925208a256a218b25208a25208b256a218c25208b25208c256a218d" - "25208c25208d256a218e25208d25208e256a218f25208e25208f256a219025208f252090256a219125209025209125" - "6a2192252091252092256a2193252092252093256a2194252093252094256a2195252094252095256a219625209525" - "2096256a2197252096252097256a2198252097252098256a2199252098252099256a219a25209925209a256a219b25" - "209a25209b256a219c25209b25209c256a219d25209c25209d256a219e25209d25209e256a219f25209e25209f256a" - "21a025209f2520a0256a21a12520a02520a1256a21a22520a12520a2256a21a32520a22520a3256a21a42520a32520" - "a4256a21a52520a42520a5256a21a62520a52520a6256a21a72520a62520a7256a21a82520a72520a8256a21a92520" - "a82520a9256a21aa2520a92520aa256a21ab2520aa2520ab256a21ac2520ab2520ac256a21ad2520ac2520ad256a21" - "ae2520ad2520ae256a21af2520ae2520af256a21b02520af2520b0256a21b12520b02520b1256a21b22520b12520b2" - "256a21b32520b22520b3256a21b42520b32520b4256a21b52520b42520b5256a21b62520b52520b6256a21b72520b6" - "2520b7256a21b82520b72520b8256a21b92520b82520b9256a21ba2520b92520ba256a21bb2520ba2520bb256a21bc" - "2520bb2520bc256a21bd2520bc2520bd256a21be2520bd2520be256a21bf2520be2520bf256a21c02520bf2520c025" - "6a21c12520c02520c1256a21c22520c12520c2256a21c32520c22520c3256a21c42520c32520c4256a21c52520c425" - "20c5256a21c62520c52520c6256a21c72520c62520c7256a21c82520c72520c8256a21c92520c82520c9256a21ca25" - "20c92520ca256a21cb2520ca2520cb256a21cc2520cb2520cc256a21cd2520cc2520cd256a21ce2520cd2520ce256a" - "21cf2520ce2520cf256a21d02520cf2520d0256a21d12520d02520d1256a21d22520d12520d2256a21d32520d22520" - "d3256a21d42520d32520d4256a21d52520d42520d5256a21d62520d52520d6256a21d72520d62520d7256a21d82520" - "d72520d8256a21d92520d82520d9256a21da2520d92520da256a21db2520da2520db256a21dc2520db2520dc256a21" - "dd2520dc2520dd256a21de2520dd2520de256a21df2520de2520df256a21e02520df2520e0256a21e12520e02520e1" - "256a21e22520e12520e2256a21e32520e22520e3256a21e42520e32520e4256a21e52520e42520e5256a21e62520e5" - "2520e6256a21e72520e62520e7256a21e82520e72520e8256a21e92520e82520e9256a21ea2520e92520ea256a21eb" - "2520ea2520eb256a21ec2520eb2520ec256a21ed2520ec2520ed256a21ee2520ed2520ee256a21ef2520ee2520ef25" - "6a21f02520ef2520f0256a21f12520f02520f1256a21f22520f12520f2256a21f32520f22520f3256a21f42520f325" - "20f4256a21f52520f42520f5256a21f62520f52520f6256a21f72520f62520f7256a21f82520f72520f8256a21f925" - "20f82520f9256a21fa2520f92520fa256a21fb2520fa2520fb256a21fc2520fb2520fc256a21fd2520fc2520fd256a" - "21fe2520fd2520fe256a21ff2520fe2520ff256a21802620ff252080266a2181262080262081266a21822620812620" - "82266a2183262082262083266a2184262083262084266a2185262084262085266a2186262085262086266a21872620" - "86262087266a2188262087262088266a2189262088262089266a218a26208926208a266a218b26208a26208b266a21" - "8c26208b26208c266a218d26208c26208d266a218e26208d26208e266a218f26208e26208f266a219026208f262090" - "266a2191262090262091266a2192262091262092266a2193262092262093266a2194262093262094266a2195262094" - "262095266a2196262095262096266a2197262096262097266a2198262097262098266a2199262098262099266a219a" - "26209926209a266a219b26209a26209b266a219c26209b26209c266a219d26209c26209d266a219e26209d26209e26" - "6a219f26209e26209f266a21a026209f2620a0266a21a12620a02620a1266a21a22620a12620a2266a21a32620a226" - "20a3266a21a42620a32620a4266a21a52620a42620a5266a21a62620a52620a6266a21a72620a62620a7266a21a826" - "20a72620a8266a21a92620a82620a9266a21aa2620a92620aa266a21ab2620aa2620ab266a21ac2620ab2620ac266a" - "21ad2620ac2620ad266a21ae2620ad2620ae266a21af2620ae2620af266a21b02620af2620b0266a21b12620b02620" - "b1266a21b22620b12620b2266a21b32620b22620b3266a21b42620b32620b4266a21b52620b42620b5266a21b62620" - "b52620b6266a21b72620b62620b7266a21b82620b72620b8266a21b92620b82620b9266a21ba2620b92620ba266a21" - "bb2620ba2620bb266a21bc2620bb2620bc266a21bd2620bc2620bd266a21be2620bd2620be266a21bf2620be2620bf" - "266a21c02620bf2620c0266a21c12620c02620c1266a21c22620c12620c2266a21c32620c22620c3266a21c42620c3" - "2620c4266a21c52620c42620c5266a21c62620c52620c6266a21c72620c62620c7266a21c82620c72620c8266a21c9" - "2620c82620c9266a21ca2620c92620ca266a21cb2620ca2620cb266a21cc2620cb2620cc266a21cd2620cc2620cd26" - "6a21ce2620cd2620ce266a21cf2620ce2620cf266a21d02620cf2620d0266a21d12620d02620d1266a21d22620d126" - "20d2266a21d32620d22620d3266a21d42620d32620d4266a21d52620d42620d5266a21d62620d52620d6266a21d726" - "20d62620d7266a21d82620d72620d8266a21d92620d82620d9266a21da2620d92620da266a21db2620da2620db266a" - "21dc2620db2620dc266a21dd2620dc2620dd266a21de2620dd2620de266a21df2620de2620df266a21e02620df2620" - "e0266a21e12620e02620e1266a21e22620e12620e2266a21e32620e22620e3266a21e42620e32620e4266a21e52620" - "e42620e5266a21e62620e52620e6266a21e72620e62620e7266a21e82620e72620e8266a21e92620e82620e9266a21" - "ea2620e92620ea266a21eb2620ea2620eb266a21ec2620eb2620ec266a21ed2620ec2620ed266a21ee2620ed2620ee" - "266a21ef2620ee2620ef266a21f02620ef2620f0266a21f12620f02620f1266a21f22620f12620f2266a21f32620f2" - "2620f3266a21f42620f32620f4266a21f52620f42620f5266a21f62620f52620f6266a21f72620f62620f7266a21f8" - "2620f72620f8266a21f92620f82620f9266a21fa2620f92620fa266a21fb2620fa2620fb266a21fc2620fb2620fc26" - "6a21fd2620fc2620fd266a21fe2620fd2620fe266a21ff2620fe2620ff266a21802720ff262080276a218127208027" - "2081276a2182272081272082276a2183272082272083276a2184272083272084276a2185272084272085276a218627" - "2085272086276a2187272086272087276a2188272087272088276a2189272088272089276a218a27208927208a276a" - "218b27208a27208b276a218c27208b27208c276a218d27208c27208d276a218e27208d27208e276a218f27208e2720" - "8f276a219027208f272090276a2191272090272091276a2192272091272092276a2193272092272093276a21942720" - "93272094276a2195272094272095276a2196272095272096276a2197272096272097276a2198272097272098276a21" - "99272098272099276a219a27209927209a276a219b27209a27209b276a219c27209b27209c276a219d27209c27209d" - "276a219e27209d27209e276a219f27209e27209f276a21a027209f2720a0276a21a12720a02720a1276a21a22720a1" - "2720a2276a21a32720a22720a3276a21a42720a32720a4276a21a52720a42720a5276a21a62720a52720a6276a21a7" - "2720a62720a7276a21a82720a72720a8276a21a92720a82720a9276a21aa2720a92720aa276a21ab2720aa2720ab27" - "6a21ac2720ab2720ac276a21ad2720ac2720ad276a21ae2720ad2720ae276a21af2720ae2720af276a21b02720af27" - "20b0276a21b12720b02720b1276a21b22720b12720b2276a21b32720b22720b3276a21b42720b32720b4276a21b527" - "20b42720b5276a21b62720b52720b6276a21b72720b62720b7276a21b82720b72720b8276a21b92720b82720b9276a" - "21ba2720b92720ba276a21bb2720ba2720bb276a21bc2720bb2720bc276a21bd2720bc2720bd276a21be2720bd2720" - "be276a21bf2720be2720bf276a21c02720bf2720c0276a21c12720c02720c1276a21c22720c12720c2276a21c32720" - "c22720c3276a21c42720c32720c4276a21c52720c42720c5276a21c62720c52720c6276a21c72720c62720c7276a21" - "c82720c72720c8276a21c92720c82720c9276a21ca2720c92720ca276a21cb2720ca2720cb276a21cc2720cb2720cc" - "276a21cd2720cc2720cd276a21ce2720cd2720ce276a21cf2720ce2720cf276a21d02720cf2720d0276a21d12720d0" - "2720d1276a21d22720d12720d2276a21d32720d22720d3276a21d42720d32720d4276a21d52720d42720d5276a21d6" - "2720d52720d6276a21d72720d62720d7276a21d82720d72720d8276a21d92720d82720d9276a21da2720d92720da27" - "6a21db2720da2720db276a21dc2720db2720dc276a21dd2720dc2720dd276a21de2720dd2720de276a21df2720de27" - "20df276a21e02720df2720e0276a21e12720e02720e1276a21e22720e12720e2276a21e32720e22720e3276a21e427" - "20e32720e4276a21e52720e42720e5276a21e62720e52720e6276a21e72720e62720e7276a21e82720e72720e8276a" - "21e92720e82720e9276a21ea2720e92720ea276a21eb2720ea2720eb276a21ec2720eb2720ec276a21ed2720ec2720" - "ed276a21ee2720ed2720ee276a21ef2720ee2720ef276a21f02720ef2720f0276a21f12720f02720f1276a21f22720" - "f12720f2276a21f32720f22720f3276a21f42720f32720f4276a21f52720f42720f5276a21f62720f52720f6276a21" - "f72720f62720f7276a21f82720f72720f8276a21f92720f82720f9276a21fa2720f92720fa276a21fb2720fa2720fb" - "276a21fc2720fb2720fc276a21fd2720fc2720fd276a21fe2720fd2720fe276a21ff2720fe2720ff276a21802820ff" - "272080286a2181282080282081286a2182282081282082286a2183282082282083286a2184282083282084286a2185" - "282084282085286a2186282085282086286a2187282086282087286a2188282087282088286a218928208828208928" - "6a218a28208928208a286a218b28208a28208b286a218c28208b28208c286a218d28208c28208d286a218e28208d28" - "208e286a218f28208e28208f286a219028208f282090286a2191282090282091286a2192282091282092286a219328" - "2092282093286a2194282093282094286a2195282094282095286a2196282095282096286a2197282096282097286a" - "2198282097282098286a2199282098282099286a219a28209928209a286a219b28209a28209b286a219c28209b2820" - "9c286a219d28209c28209d286a219e28209d28209e286a219f28209e28209f286a21a028209f2820a0286a21a12820" - "a02820a1286a21a22820a12820a2286a21a32820a22820a3286a21a42820a32820a4286a21a52820a42820a5286a21" - "a62820a52820a6286a21a72820a62820a7286a21a82820a72820a8286a21a92820a82820a9286a21aa2820a92820aa" - "286a21ab2820aa2820ab286a21ac2820ab2820ac286a21ad2820ac2820ad286a21ae2820ad2820ae286a21af2820ae" - "2820af286a21b02820af2820b0286a21b12820b02820b1286a21b22820b12820b2286a21b32820b22820b3286a21b4" - "2820b32820b4286a21b52820b42820b5286a21b62820b52820b6286a21b72820b62820b7286a21b82820b72820b828" - "6a21b92820b82820b9286a21ba2820b92820ba286a21bb2820ba2820bb286a21bc2820bb2820bc286a21bd2820bc28" - "20bd286a21be2820bd2820be286a21bf2820be2820bf286a21c02820bf2820c0286a21c12820c02820c1286a21c228" - "20c12820c2286a21c32820c22820c3286a21c42820c32820c4286a21c52820c42820c5286a21c62820c52820c6286a" - "21c72820c62820c7286a21c82820c72820c8286a21c92820c82820c9286a21ca2820c92820ca286a21cb2820ca2820" - "cb286a21cc2820cb2820cc286a21cd2820cc2820cd286a21ce2820cd2820ce286a21cf2820ce2820cf286a21d02820" - "cf2820d0286a21d12820d02820d1286a21d22820d12820d2286a21d32820d22820d3286a21d42820d32820d4286a21" - "d52820d42820d5286a21d62820d52820d6286a21d72820d62820d7286a21d82820d72820d8286a21d92820d82820d9" - "286a21da2820d92820da286a21db2820da2820db286a21dc2820db2820dc286a21dd2820dc2820dd286a21de2820dd" - "2820de286a21df2820de2820df286a21e02820df2820e0286a21e12820e02820e1286a21e22820e12820e2286a21e3" - "2820e22820e3286a21e42820e32820e4286a21e52820e42820e5286a21e62820e52820e6286a21e72820e62820e728" - "6a21e82820e72820e8286a21e92820e82820e9286a21ea2820e92820ea286a21eb2820ea2820eb286a21ec2820eb28" - "20ec286a21ed2820ec2820ed286a21ee2820ed2820ee286a21ef2820ee2820ef286a21f02820ef2820f0286a21f128" - "20f02820f1286a21f22820f12820f2286a21f32820f22820f3286a21f42820f32820f4286a21f52820f42820f5286a" - "21f62820f52820f6286a21f72820f62820f7286a21f82820f72820f8286a21f92820f82820f9286a21fa2820f92820" - "fa286a21fb2820fa2820fb286a21fc2820fb2820fc286a21fd2820fc2820fd286a21fe2820fd2820fe286a21ff2820" - "fe2820ff286a21802920ff282080296a2181292080292081296a2182292081292082296a2183292082292083296a21" - "84292083292084296a2185292084292085296a2186292085292086296a2187292086292087296a2188292087292088" - "296a2189292088292089296a218a29208929208a296a218b29208a29208b296a218c29208b29208c296a218d29208c" - "29208d296a218e29208d29208e296a218f29208e29208f296a219029208f292090296a2191292090292091296a2192" - "292091292092296a2193292092292093296a2194292093292094296a2195292094292095296a219629209529209629" - "6a2197292096292097296a2198292097292098296a2199292098292099296a219a29209929209a296a219b29209a29" - "209b296a219c29209b29209c296a219d29209c29209d296a219e29209d29209e296a219f29209e29209f296a21a029" - "209f2920a0296a21a12920a02920a1296a21a22920a12920a2296a21a32920a22920a3296a21a42920a32920a4296a" - "21a52920a42920a5296a21a62920a52920a6296a21a72920a62920a7296a21a82920a72920a8296a21a92920a82920" - "a9296a21aa2920a92920aa296a21ab2920aa2920ab296a21ac2920ab2920ac296a21ad2920ac2920ad296a21ae2920" - "ad2920ae296a21af2920ae2920af296a21b02920af2920b0296a21b12920b02920b1296a21b22920b12920b2296a21" - "b32920b22920b3296a21b42920b32920b4296a21b52920b42920b5296a21b62920b52920b6296a21b72920b62920b7" - "296a21b82920b72920b8296a21b92920b82920b9296a21ba2920b92920ba296a21bb2920ba2920bb296a21bc2920bb" - "2920bc296a21bd2920bc2920bd296a21be2920bd2920be296a21bf2920be2920bf296a21c02920bf2920c0296a21c1" - "2920c02920c1296a21c22920c12920c2296a21c32920c22920c3296a21c42920c32920c4296a21c52920c42920c529" - "6a21c62920c52920c6296a21c72920c62920c7296a21c82920c72920c8296a21c92920c82920c9296a21ca2920c929" - "20ca296a21cb2920ca2920cb296a21cc2920cb2920cc296a21cd2920cc2920cd296a21ce2920cd2920ce296a21cf29" - "20ce2920cf296a21d02920cf2920d0296a21d12920d02920d1296a21d22920d12920d2296a21d32920d22920d3296a" - "21d42920d32920d4296a21d52920d42920d5296a21d62920d52920d6296a21d72920d62920d7296a21d82920d72920" - "d8296a21d92920d82920d9296a21da2920d92920da296a21db2920da2920db296a21dc2920db2920dc296a21dd2920" - "dc2920dd296a21de2920dd2920de296a21df2920de2920df296a21e02920df2920e0296a21e12920e02920e1296a21" - "e22920e12920e2296a21e32920e22920e3296a21e42920e32920e4296a21e52920e42920e5296a21e62920e52920e6" - "296a21e72920e62920e7296a21e82920e72920e8296a21e92920e82920e9296a21ea2920e92920ea296a21eb2920ea" - "2920eb296a21ec2920eb2920ec296a21ed2920ec2920ed296a21ee2920ed2920ee296a21ef2920ee2920ef296a21f0" - "2920ef2920f0296a21f12920f02920f1296a21f22920f12920f2296a21f32920f22920f3296a21f42920f32920f429" - "6a21f52920f42920f5296a21f62920f52920f6296a21f72920f62920f7296a21f82920f72920f8296a21f92920f829" - "20f9296a21fa2920f92920fa296a21fb2920fa2920fb296a21fc2920fb2920fc296a21fd2920fc2920fd296a21fe29" - "20fd2920fe296a21ff2920fe2920ff296a21802a20ff2920802a6a21812a20802a20812a6a21822a20812a20822a6a" - "21832a20822a20832a6a21842a20832a20842a6a21852a20842a20852a6a21862a20852a20862a6a21872a20862a20" - "872a6a21882a20872a20882a6a21892a20882a20892a6a218a2a20892a208a2a6a218b2a208a2a208b2a6a218c2a20" - "8b2a208c2a6a218d2a208c2a208d2a6a218e2a208d2a208e2a6a218f2a208e2a208f2a6a21902a208f2a20902a6a21" - "912a20902a20912a6a21922a20912a20922a6a21932a20922a20932a6a21942a20932a20942a6a21952a20942a2095" - "2a6a21962a20952a20962a6a21972a20962a20972a6a21982a20972a20982a6a21992a20982a20992a6a219a2a2099" - "2a209a2a6a219b2a209a2a209b2a6a219c2a209b2a209c2a6a219d2a209c2a209d2a6a219e2a209d2a209e2a6a219f" - "2a209e2a209f2a6a21a02a209f2a20a02a6a21a12a20a02a20a12a6a21a22a20a12a20a22a6a21a32a20a22a20a32a" - "6a21a42a20a32a20a42a6a21a52a20a42a20a52a6a21a62a20a52a20a62a6a21a72a20a62a20a72a6a21a82a20a72a" - "20a82a6a21a92a20a82a20a92a6a21aa2a20a92a20aa2a6a21ab2a20aa2a20ab2a6a21ac2a20ab2a20ac2a6a21ad2a" - "20ac2a20ad2a6a21ae2a20ad2a20ae2a6a21af2a20ae2a20af2a6a21b02a20af2a20b02a6a21b12a20b02a20b12a6a" - "21b22a20b12a20b22a6a21b32a20b22a20b32a6a21b42a20b32a20b42a6a21b52a20b42a20b52a6a21b62a20b52a20" - "b62a6a21b72a20b62a20b72a6a21b82a20b72a20b82a6a21b92a20b82a20b92a6a21ba2a20b92a20ba2a6a21bb2a20" - "ba2a20bb2a6a21bc2a20bb2a20bc2a6a21bd2a20bc2a20bd2a6a21be2a20bd2a20be2a6a21bf2a20be2a20bf2a6a21" - "c02a20bf2a20c02a6a21c12a20c02a20c12a6a21c22a20c12a20c22a6a21c32a20c22a20c32a6a21c42a20c32a20c4" - "2a6a21c52a20c42a20c52a6a21c62a20c52a20c62a6a21c72a20c62a20c72a6a21c82a20c72a20c82a6a21c92a20c8" - "2a20c92a6a21ca2a20c92a20ca2a6a21cb2a20ca2a20cb2a6a21cc2a20cb2a20cc2a6a21cd2a20cc2a20cd2a6a21ce" - "2a20cd2a20ce2a6a21cf2a20ce2a20cf2a6a21d02a20cf2a20d02a6a21d12a20d02a20d12a6a21d22a20d12a20d22a" - "6a21d32a20d22a20d32a6a21d42a20d32a20d42a6a21d52a20d42a20d52a6a21d62a20d52a20d62a6a21d72a20d62a" - "20d72a6a21d82a20d72a20d82a6a21d92a20d82a20d92a6a21da2a20d92a20da2a6a21db2a20da2a20db2a6a21dc2a" - "20db2a20dc2a6a21dd2a20dc2a20dd2a6a21de2a20dd2a20de2a6a21df2a20de2a20df2a6a21e02a20df2a20e02a6a" - "21e12a20e02a20e12a6a21e22a20e12a20e22a6a21e32a20e22a20e32a6a21e42a20e32a20e42a6a21e52a20e42a20" - "e52a6a21e62a20e52a20e62a6a21e72a20e62a20e72a6a21e82a20e72a20e82a6a21e92a20e82a20e92a6a21ea2a20" - "e92a20ea2a6a21eb2a20ea2a20eb2a6a21ec2a20eb2a20ec2a6a21ed2a20ec2a20ed2a6a21ee2a20ed2a20ee2a6a21" - "ef2a20ee2a20ef2a6a21f02a20ef2a20f02a6a21f12a20f02a20f12a6a21f22a20f12a20f22a6a21f32a20f22a20f3" - "2a6a21f42a20f32a20f42a6a21f52a20f42a20f52a6a21f62a20f52a20f62a6a21f72a20f62a20f72a6a21f82a20f7" - "2a20f82a6a21f92a20f82a20f92a6a21fa2a20f92a20fa2a6a21fb2a20fa2a20fb2a6a21fc2a20fb2a20fc2a6a21fd" - "2a20fc2a20fd2a6a21fe2a20fd2a20fe2a6a21ff2a20fe2a20ff2a6a21802b20ff2a20802b6a21812b20802b20812b" - "6a21822b20812b20822b6a21832b20822b20832b6a21842b20832b20842b6a21852b20842b20852b6a21862b20852b" - "20862b6a21872b20862b20872b6a21882b20872b20882b6a21892b20882b20892b6a218a2b20892b208a2b6a218b2b" - "208a2b208b2b6a218c2b208b2b208c2b6a218d2b208c2b208d2b6a218e2b208d2b208e2b6a218f2b208e2b208f2b6a" - "21902b208f2b20902b6a21912b20902b20912b6a21922b20912b20922b6a21932b20922b20932b6a21942b20932b20" - "942b6a21952b20942b20952b6a21962b20952b20962b6a21972b20962b20972b6a21982b20972b20982b6a21992b20" - "982b20992b6a219a2b20992b209a2b6a219b2b209a2b209b2b6a219c2b209b2b209c2b6a219d2b209c2b209d2b6a21" - "9e2b209d2b209e2b6a219f2b209e2b209f2b6a21a02b209f2b20a02b6a21a12b20a02b20a12b6a21a22b20a12b20a2" - "2b6a21a32b20a22b20a32b6a21a42b20a32b20a42b6a21a52b20a42b20a52b6a21a62b20a52b20a62b6a21a72b20a6" - "2b20a72b6a21a82b20a72b20a82b6a21a92b20a82b20a92b6a21aa2b20a92b20aa2b6a21ab2b20aa2b20ab2b6a21ac" - "2b20ab2b20ac2b6a21ad2b20ac2b20ad2b6a21ae2b20ad2b20ae2b6a21af2b20ae2b20af2b6a21b02b20af2b20b02b" - "6a21b12b20b02b20b12b6a21b22b20b12b20b22b6a21b32b20b22b20b32b6a21b42b20b32b20b42b6a21b52b20b42b" - "20b52b6a21b62b20b52b20b62b6a21b72b20b62b20b72b6a21b82b20b72b20b82b6a21b92b20b82b20b92b6a21ba2b" - "20b92b20ba2b6a21bb2b20ba2b20bb2b6a21bc2b20bb2b20bc2b6a21bd2b20bc2b20bd2b6a21be2b20bd2b20be2b6a" - "21bf2b20be2b20bf2b6a21c02b20bf2b20c02b6a21c12b20c02b20c12b6a21c22b20c12b20c22b6a21c32b20c22b20" - "c32b6a21c42b20c32b20c42b6a21c52b20c42b20c52b6a21c62b20c52b20c62b6a21c72b20c62b20c72b6a21c82b20" - "c72b20c82b6a21c92b20c82b20c92b6a21ca2b20c92b20ca2b6a21cb2b20ca2b20cb2b6a21cc2b20cb2b20cc2b6a21" - "cd2b20cc2b20cd2b6a21ce2b20cd2b20ce2b6a21cf2b20ce2b20cf2b6a21d02b20cf2b20d02b6a21d12b20d02b20d1" - "2b6a21d22b20d12b20d22b6a21d32b20d22b20d32b6a21d42b20d32b20d42b6a21d52b20d42b20d52b6a21d62b20d5" - "2b20d62b6a21d72b20d62b20d72b6a21d82b20d72b20d82b6a21d92b20d82b20d92b6a21da2b20d92b20da2b6a21db" - "2b20da2b20db2b6a21dc2b20db2b20dc2b6a21dd2b20dc2b20dd2b6a21de2b20dd2b20de2b6a21df2b20de2b20df2b" - "6a21e02b20df2b20e02b6a21e12b20e02b20e12b6a21e22b20e12b20e22b6a21e32b20e22b20e32b6a21e42b20e32b" - "20e42b6a21e52b20e42b20e52b6a21e62b20e52b20e62b6a21e72b20e62b20e72b6a21e82b20e72b20e82b6a21e92b" - "20e82b20e92b6a21ea2b20e92b20ea2b6a21eb2b20ea2b20eb2b6a21ec2b20eb2b20ec2b6a21ed2b20ec2b20ed2b6a" - "21ee2b20ed2b20ee2b6a21ef2b20ee2b20ef2b6a21f02b20ef2b20f02b6a21f12b20f02b20f12b6a21f22b20f12b20" - "f22b6a21f32b20f22b20f32b6a21f42b20f32b20f42b6a21f52b20f42b20f52b6a21f62b20f52b20f62b6a21f72b20" - "f62b20f72b6a21f82b20f72b20f82b6a21f92b20f82b20f92b6a21fa2b20f92b20fa2b6a21fb2b20fa2b20fb2b6a21" - "fc2b20fb2b20fc2b6a21fd2b20fc2b20fd2b6a21fe2b20fd2b20fe2b6a21ff2b20fe2b20ff2b6a21802c20ff2b2080" - "2c6a21812c20802c20812c6a21822c20812c20822c6a21832c20822c20832c6a21842c20832c20842c6a21852c2084" - "2c20852c6a21862c20852c20862c6a21872c20862c20872c6a21882c20872c20882c6a21892c20882c20892c6a218a" - "2c20892c208a2c6a218b2c208a2c208b2c6a218c2c208b2c208c2c6a218d2c208c2c208d2c6a218e2c208d2c208e2c" - "6a218f2c208e2c208f2c6a21902c208f2c20902c6a21912c20902c20912c6a21922c20912c20922c6a21932c20922c" - "20932c6a21942c20932c20942c6a21952c20942c20952c6a21962c20952c20962c6a21972c20962c20972c6a21982c" - "20972c20982c6a21992c20982c20992c6a219a2c20992c209a2c6a219b2c209a2c209b2c6a219c2c209b2c209c2c6a" - "219d2c209c2c209d2c6a219e2c209d2c209e2c6a219f2c209e2c209f2c6a21a02c209f2c20a02c6a21a12c20a02c20" - "a12c6a21a22c20a12c20a22c6a21a32c20a22c20a32c6a21a42c20a32c20a42c6a21a52c20a42c20a52c6a21a62c20" - "a52c20a62c6a21a72c20a62c20a72c6a21a82c20a72c20a82c6a21a92c20a82c20a92c6a21aa2c20a92c20aa2c6a21" - "ab2c20aa2c20ab2c6a21ac2c20ab2c20ac2c6a21ad2c20ac2c20ad2c6a21ae2c20ad2c20ae2c6a21af2c20ae2c20af" - "2c6a21b02c20af2c20b02c6a21b12c20b02c20b12c6a21b22c20b12c20b22c6a21b32c20b22c20b32c6a21b42c20b3" - "2c20b42c6a21b52c20b42c20b52c6a21b62c20b52c20b62c6a21b72c20b62c20b72c6a21b82c20b72c20b82c6a21b9" - "2c20b82c20b92c6a21ba2c20b92c20ba2c6a21bb2c20ba2c20bb2c6a21bc2c20bb2c20bc2c6a21bd2c20bc2c20bd2c" - "6a21be2c20bd2c20be2c6a21bf2c20be2c20bf2c6a21c02c20bf2c20c02c6a21c12c20c02c20c12c6a21c22c20c12c" - "20c22c6a21c32c20c22c20c32c6a21c42c20c32c20c42c6a21c52c20c42c20c52c6a21c62c20c52c20c62c6a21c72c" - "20c62c20c72c6a21c82c20c72c20c82c6a21c92c20c82c20c92c6a21ca2c20c92c20ca2c6a21cb2c20ca2c20cb2c6a" - "21cc2c20cb2c20cc2c6a21cd2c20cc2c20cd2c6a21ce2c20cd2c20ce2c6a21cf2c20ce2c20cf2c6a21d02c20cf2c20" - "d02c6a21d12c20d02c20d12c6a21d22c20d12c20d22c6a21d32c20d22c20d32c6a21d42c20d32c20d42c6a21d52c20" - "d42c20d52c6a21d62c20d52c20d62c6a21d72c20d62c20d72c6a21d82c20d72c20d82c6a21d92c20d82c20d92c6a21" - "da2c20d92c20da2c6a21db2c20da2c20db2c6a21dc2c20db2c20dc2c6a21dd2c20dc2c20dd2c6a21de2c20dd2c20de" - "2c6a21df2c20de2c20df2c6a21e02c20df2c20e02c6a21e12c20e02c20e12c6a21e22c20e12c20e22c6a21e32c20e2" - "2c20e32c6a21e42c20e32c20e42c6a21e52c20e42c20e52c6a21e62c20e52c20e62c6a21e72c20e62c20e72c6a21e8" - "2c20e72c20e82c6a21e92c20e82c20e92c6a21ea2c20e92c20ea2c6a21eb2c20ea2c20eb2c6a21ec2c20eb2c20ec2c" - "6a21ed2c20ec2c20ed2c6a21ee2c20ed2c20ee2c6a21ef2c20ee2c20ef2c6a21f02c20ef2c20f02c6a21f12c20f02c" - "20f12c6a21f22c20f12c20f22c6a21f32c20f22c20f32c6a21f42c20f32c20f42c6a21f52c20f42c20f52c6a21f62c" - "20f52c20f62c6a21f72c20f62c20f72c6a21f82c20f72c20f82c6a21f92c20f82c20f92c6a21fa2c20f92c20fa2c6a" - "21fb2c20fa2c20fb2c6a21fc2c20fb2c20fc2c6a21fd2c20fc2c20fd2c6a21fe2c20fd2c20fe2c6a21ff2c20fe2c20" - "ff2c6a21802d20ff2c20802d6a21812d20802d20812d6a21822d20812d20822d6a21832d20822d20832d6a21842d20" - "832d20842d6a21852d20842d20852d6a21862d20852d20862d6a21872d20862d20872d6a21882d20872d20882d6a21" - "892d20882d20892d6a218a2d20892d208a2d6a218b2d208a2d208b2d6a218c2d208b2d208c2d6a218d2d208c2d208d" - "2d6a218e2d208d2d208e2d6a218f2d208e2d208f2d6a21902d208f2d20902d6a21912d20902d20912d6a21922d2091" - "2d20922d6a21932d20922d20932d6a21942d20932d20942d6a21952d20942d20952d6a21962d20952d20962d6a2197" - "2d20962d20972d6a21982d20972d20982d6a21992d20982d20992d6a219a2d20992d209a2d6a219b2d209a2d209b2d" - "6a219c2d209b2d209c2d6a219d2d209c2d209d2d6a219e2d209d2d209e2d6a219f2d209e2d209f2d6a21a02d209f2d" - "20a02d6a21a12d20a02d20a12d6a21a22d20a12d20a22d6a21a32d20a22d20a32d6a21a42d20a32d20a42d6a21a52d" - "20a42d20a52d6a21a62d20a52d20a62d6a21a72d20a62d20a72d6a21a82d20a72d20a82d6a21a92d20a82d20a92d6a" - "21aa2d20a92d20aa2d6a21ab2d20aa2d20ab2d6a21ac2d20ab2d20ac2d6a21ad2d20ac2d20ad2d6a21ae2d20ad2d20" - "ae2d6a21af2d20ae2d20af2d6a21b02d20af2d20b02d6a21b12d20b02d20b12d6a21b22d20b12d20b22d6a21b32d20" - "b22d20b32d6a21b42d20b32d20b42d6a21b52d20b42d20b52d6a21b62d20b52d20b62d6a21b72d20b62d20b72d6a21" - "b82d20b72d20b82d6a21b92d20b82d20b92d6a21ba2d20b92d20ba2d6a21bb2d20ba2d20bb2d6a21bc2d20bb2d20bc" - "2d6a21bd2d20bc2d20bd2d6a21be2d20bd2d20be2d6a21bf2d20be2d20bf2d6a21c02d20bf2d20c02d6a21c12d20c0" - "2d20c12d6a21c22d20c12d20c22d6a21c32d20c22d20c32d6a21c42d20c32d20c42d6a21c52d20c42d20c52d6a21c6" - "2d20c52d20c62d6a21c72d20c62d20c72d6a21c82d20c72d20c82d6a21c92d20c82d20c92d6a21ca2d20c92d20ca2d" - "6a21cb2d20ca2d20cb2d6a21cc2d20cb2d20cc2d6a21cd2d20cc2d20cd2d6a21ce2d20cd2d20ce2d6a21cf2d20ce2d" - "20cf2d6a21d02d20cf2d20d02d6a21d12d20d02d20d12d6a21d22d20d12d20d22d6a21d32d20d22d20d32d6a21d42d" - "20d32d20d42d6a21d52d20d42d20d52d6a21d62d20d52d20d62d6a21d72d20d62d20d72d6a21d82d20d72d20d82d6a" - "21d92d20d82d20d92d6a21da2d20d92d20da2d6a21db2d20da2d20db2d6a21dc2d20db2d20dc2d6a21dd2d20dc2d20" - "dd2d6a21de2d20dd2d20de2d6a21df2d20de2d20df2d6a21e02d20df2d20e02d6a21e12d20e02d20e12d6a21e22d20" - "e12d20e22d6a21e32d20e22d20e32d6a21e42d20e32d20e42d6a21e52d20e42d20e52d6a21e62d20e52d20e62d6a21" - "e72d20e62d20e72d6a21e82d20e72d20e82d6a21e92d20e82d20e92d6a21ea2d20e92d20ea2d6a21eb2d20ea2d20eb" - "2d6a21ec2d20eb2d20ec2d6a21ed2d20ec2d20ed2d6a21ee2d20ed2d20ee2d6a21ef2d20ee2d20ef2d6a21f02d20ef" - "2d20f02d6a21f12d20f02d20f12d6a21f22d20f12d20f22d6a21f32d20f22d20f32d6a21f42d20f32d20f42d6a21f5" - "2d20f42d20f52d6a21f62d20f52d20f62d6a21f72d20f62d20f72d6a21f82d20f72d20f82d6a21f92d20f82d20f92d" - "6a21fa2d20f92d20fa2d6a21fb2d20fa2d20fb2d6a21fc2d20fb2d20fc2d6a21fd2d20fc2d20fd2d6a21fe2d20fd2d" - "20fe2d6a21ff2d20fe2d20ff2d6a21802e20ff2d20802e6a21812e20802e20812e6a21822e20812e20822e6a21832e" - "20822e20832e6a21842e20832e20842e6a21852e20842e20852e6a21862e20852e20862e6a21872e20862e20872e6a" - "21882e20872e20882e6a21892e20882e20892e6a218a2e20892e208a2e6a218b2e208a2e208b2e6a218c2e208b2e20" - "8c2e6a218d2e208c2e208d2e6a218e2e208d2e208e2e6a218f2e208e2e208f2e6a21902e208f2e20902e6a21912e20" - "902e20912e6a21922e20912e20922e6a21932e20922e20932e6a21942e20932e20942e6a21952e20942e20952e6a21" - "962e20952e20962e6a21972e20962e20972e6a21982e20972e20982e6a21992e20982e20992e6a219a2e20992e209a" - "2e6a219b2e209a2e209b2e6a219c2e209b2e209c2e6a219d2e209c2e209d2e6a219e2e209d2e209e2e6a219f2e209e" - "2e209f2e6a21a02e209f2e20a02e6a21a12e20a02e20a12e6a21a22e20a12e20a22e6a21a32e20a22e20a32e6a21a4" - "2e20a32e20a42e6a21a52e20a42e20a52e6a21a62e20a52e20a62e6a21a72e20a62e20a72e6a21a82e20a72e20a82e" - "6a21a92e20a82e20a92e6a21aa2e20a92e20aa2e6a21ab2e20aa2e20ab2e6a21ac2e20ab2e20ac2e6a21ad2e20ac2e" - "20ad2e6a21ae2e20ad2e20ae2e6a21af2e20ae2e20af2e6a21b02e20af2e20b02e6a21b12e20b02e20b12e6a21b22e" - "20b12e20b22e6a21b32e20b22e20b32e6a21b42e20b32e20b42e6a21b52e20b42e20b52e6a21b62e20b52e20b62e6a" - "21b72e20b62e20b72e6a21b82e20b72e20b82e6a21b92e20b82e20b92e6a21ba2e20b92e20ba2e6a21bb2e20ba2e20" - "bb2e6a21bc2e20bb2e20bc2e6a21bd2e20bc2e20bd2e6a21be2e20bd2e20be2e6a21bf2e20be2e20bf2e6a21c02e20" - "bf2e20c02e6a21c12e20c02e20c12e6a21c22e20c12e20c22e6a21c32e20c22e20c32e6a21c42e20c32e20c42e6a21" - "c52e20c42e20c52e6a21c62e20c52e20c62e6a21c72e20c62e20c72e6a21c82e20c72e20c82e6a21c92e20c82e20c9" - "2e6a21ca2e20c92e20ca2e6a21cb2e20ca2e20cb2e6a21cc2e20cb2e20cc2e6a21cd2e20cc2e20cd2e6a21ce2e20cd" - "2e20ce2e6a21cf2e20ce2e20cf2e6a21d02e20cf2e20d02e6a21d12e20d02e20d12e6a21d22e20d12e20d22e6a21d3" - "2e20d22e20d32e6a21d42e20d32e20d42e6a21d52e20d42e20d52e6a21d62e20d52e20d62e6a21d72e20d62e20d72e" - "6a21d82e20d72e20d82e6a21d92e20d82e20d92e6a21da2e20d92e20da2e6a21db2e20da2e20db2e6a21dc2e20db2e" - "20dc2e6a21dd2e20dc2e20dd2e6a21de2e20dd2e20de2e6a21df2e20de2e20df2e6a21e02e20df2e20e02e6a21e12e" - "20e02e20e12e6a21e22e20e12e20e22e6a21e32e20e22e20e32e6a21e42e20e32e20e42e6a21e52e20e42e20e52e6a" - "21e62e20e52e20e62e6a21e72e20e62e20e72e6a21e82e20e72e20e82e6a21e92e20e82e20e92e6a21ea2e20e92e20" - "ea2e6a21eb2e20ea2e20eb2e6a21ec2e20eb2e20ec2e6a21ed2e20ec2e20ed2e6a21ee2e20ed2e20ee2e6a21ef2e20" - "ee2e20ef2e6a21f02e20ef2e20f02e6a21f12e20f02e20f12e6a21f22e20f12e20f22e6a21f32e20f22e20f32e6a21" - "f42e20f32e20f42e6a21f52e20f42e20f52e6a21f62e20f52e20f62e6a21f72e20f62e20f72e6a21f82e20f72e20f8" - "2e6a21f92e20f82e20f92e6a21fa2e20f92e20fa2e6a21fb2e20fa2e20fb2e6a21fc2e20fb2e20fc2e6a21fd2e20fc" - "2e20fd2e6a21fe2e20fd2e20fe2e6a21ff2e20fe2e20ff2e6a21802f20ff2e20802f6a21812f20802f20812f6a2182" - "2f20812f20822f6a21832f20822f20832f6a21842f20832f20842f6a21852f20842f20852f6a21862f20852f20862f" - "6a21872f20862f20872f6a21882f20872f20882f6a21892f20882f20892f6a218a2f20892f208a2f6a218b2f208a2f" - "208b2f6a218c2f208b2f208c2f6a218d2f208c2f208d2f6a218e2f208d2f208e2f6a218f2f208e2f208f2f6a21902f" - "208f2f20902f6a21912f20902f20912f6a21922f20912f20922f6a21932f20922f20932f6a21942f20932f20942f6a" - "21952f20942f20952f6a21962f20952f20962f6a21972f20962f20972f6a21982f20972f20982f6a21992f20982f20" - "992f6a219a2f20992f209a2f6a219b2f209a2f209b2f6a219c2f209b2f209c2f6a219d2f209c2f209d2f6a219e2f20" - "9d2f209e2f6a219f2f209e2f209f2f6a21a02f209f2f20a02f6a21a12f20a02f20a12f6a21a22f20a12f20a22f6a21" - "a32f20a22f20a32f6a21a42f20a32f20a42f6a21a52f20a42f20a52f6a21a62f20a52f20a62f6a21a72f20a62f20a7" - "2f6a21a82f20a72f20a82f6a21a92f20a82f20a92f6a21aa2f20a92f20aa2f6a21ab2f20aa2f20ab2f6a21ac2f20ab" - "2f20ac2f6a21ad2f20ac2f20ad2f6a21ae2f20ad2f20ae2f6a21af2f20ae2f20af2f6a21b02f20af2f20b02f6a21b1" - "2f20b02f20b12f6a21b22f20b12f20b22f6a21b32f20b22f20b32f6a21b42f20b32f20b42f6a21b52f20b42f20b52f" - "6a21b62f20b52f20b62f6a21b72f20b62f20b72f6a21b82f20b72f20b82f6a21b92f20b82f20b92f6a21ba2f20b92f" - "20ba2f6a21bb2f20ba2f20bb2f6a21bc2f20bb2f20bc2f6a21bd2f20bc2f20bd2f6a21be2f20bd2f20be2f6a21bf2f" - "20be2f20bf2f6a21c02f20bf2f20c02f6a21c12f20c02f20c12f6a21c22f20c12f20c22f6a21c32f20c22f20c32f6a" - "21c42f20c32f20c42f6a21c52f20c42f20c52f6a21c62f20c52f20c62f6a21c72f20c62f20c72f6a21c82f20c72f20" - "c82f6a21c92f20c82f20c92f6a21ca2f20c92f20ca2f6a21cb2f20ca2f20cb2f6a21cc2f20cb2f20cc2f6a21cd2f20" - "cc2f20cd2f6a21ce2f20cd2f20ce2f6a21cf2f20ce2f20cf2f6a21d02f20cf2f20d02f6a21d12f20d02f20d12f6a21" - "d22f20d12f20d22f6a21d32f20d22f20d32f6a21d42f20d32f20d42f6a21d52f20d42f20d52f6a21d62f20d52f20d6" - "2f6a21d72f20d62f20d72f6a21d82f20d72f20d82f6a21d92f20d82f20d92f6a21da2f20d92f20da2f6a21db2f20da" - "2f20db2f6a21dc2f20db2f20dc2f6a21dd2f20dc2f20dd2f6a21de2f20dd2f20de2f6a21df2f20de2f20df2f6a21e0" - "2f20df2f20e02f6a21e12f20e02f20e12f6a21e22f20e12f20e22f6a21e32f20e22f20e32f6a21e42f20e32f20e42f" - "6a21e52f20e42f20e52f6a21e62f20e52f20e62f6a21e72f20e62f20e72f6a21e82f20e72f20e82f6a21e92f20e82f" - "20e92f6a21ea2f20e92f20ea2f6a21eb2f20ea2f20eb2f6a21ec2f20eb2f20ec2f6a21ed2f20ec2f20ed2f6a21ee2f" - "20ed2f20ee2f6a21ef2f20ee2f20ef2f6a21f02f20ef2f20f02f6a21f12f20f02f20f12f6a21f22f20f12f20f22f6a" - "21f32f20f22f20f32f6a21f42f20f32f20f42f6a21f52f20f42f20f52f6a21f62f20f52f20f62f6a21f72f20f62f20" - "f72f6a21f82f20f72f20f82f6a21f92f20f82f20f92f6a21fa2f20f92f20fa2f6a21fb2f20fa2f20fb2f6a21fc2f20" - "fb2f20fc2f6a21fd2f20fc2f20fd2f6a21fe2f20fd2f20fe2f6a21ff2f20fe2f20ff2f6a21803020ff2f2080306a21" - "81302080302081306a2182302081302082306a2183302082302083306a2184302083302084306a2185302084302085" - "306a2186302085302086306a2187302086302087306a2188302087302088306a2189302088302089306a218a302089" - "30208a306a218b30208a30208b306a218c30208b30208c306a218d30208c30208d306a218e30208d30208e306a218f" - "30208e30208f306a219030208f302090306a2191302090302091306a2192302091302092306a219330209230209330" - "6a2194302093302094306a2195302094302095306a2196302095302096306a2197302096302097306a219830209730" - "2098306a2199302098302099306a219a30209930209a306a219b30209a30209b306a219c30209b30209c306a219d30" - "209c30209d306a219e30209d30209e306a219f30209e30209f306a21a030209f3020a0306a21a13020a03020a1306a" - "21a23020a13020a2306a21a33020a23020a3306a21a43020a33020a4306a21a53020a43020a5306a21a63020a53020" - "a6306a21a73020a63020a7306a21a83020a73020a8306a21a93020a83020a9306a21aa3020a93020aa306a21ab3020" - "aa3020ab306a21ac3020ab3020ac306a21ad3020ac3020ad306a21ae3020ad3020ae306a21af3020ae3020af306a21" - "b03020af3020b0306a21b13020b03020b1306a21b23020b13020b2306a21b33020b23020b3306a21b43020b33020b4" - "306a21b53020b43020b5306a21b63020b53020b6306a21b73020b63020b7306a21b83020b73020b8306a21b93020b8" - "3020b9306a21ba3020b93020ba306a21bb3020ba3020bb306a21bc3020bb3020bc306a21bd3020bc3020bd306a21be" - "3020bd3020be306a21bf3020be3020bf306a21c03020bf3020c0306a21c13020c03020c1306a21c23020c13020c230" - "6a21c33020c23020c3306a21c43020c33020c4306a21c53020c43020c5306a21c63020c53020c6306a21c73020c630" - "20c7306a21c83020c73020c8306a21c93020c83020c9306a21ca3020c93020ca306a21cb3020ca3020cb306a21cc30" - "20cb3020cc306a21cd3020cc3020cd306a21ce3020cd3020ce306a21cf3020ce3020cf306a21d03020cf3020d0306a" - "21d13020d03020d1306a21d23020d13020d2306a21d33020d23020d3306a21d43020d33020d4306a21d53020d43020" - "d5306a21d63020d53020d6306a21d73020d63020d7306a21d83020d73020d8306a21d93020d83020d9306a21da3020" - "d93020da306a21db3020da3020db306a21dc3020db3020dc306a21dd3020dc3020dd306a21de3020dd3020de306a21" - "df3020de3020df306a21e03020df3020e0306a21e13020e03020e1306a21e23020e13020e2306a21e33020e23020e3" - "306a21e43020e33020e4306a21e53020e43020e5306a21e63020e53020e6306a21e73020e63020e7306a21e83020e7" - "3020e8306a21e93020e83020e9306a21ea3020e93020ea306a21eb3020ea3020eb306a21ec3020eb3020ec306a21ed" - "3020ec3020ed306a21ee3020ed3020ee306a21ef3020ee3020ef306a21f03020ef3020f0306a21f13020f03020f130" - "6a21f23020f13020f2306a21f33020f23020f3306a21f43020f33020f4306a21f53020f43020f5306a21f63020f530" - "20f6306a21f73020f63020f7306a21f83020f73020f8306a21f93020f83020f9306a21fa3020f93020fa306a21fb30" - "20fa3020fb306a21fc3020fb3020fc306a21fd3020fc3020fd306a21fe3020fd3020fe306a21ff3020fe3020ff306a" - "21803120ff302080316a2181312080312081316a2182312081312082316a2183312082312083316a21843120833120" - "84316a2185312084312085316a2186312085312086316a2187312086312087316a2188312087312088316a21893120" - "88312089316a218a31208931208a316a218b31208a31208b316a218c31208b31208c316a218d31208c31208d316a21" - "8e31208d31208e316a218f31208e31208f316a219031208f312090316a2191312090312091316a2192312091312092" - "316a2193312092312093316a2194312093312094316a2195312094312095316a2196312095312096316a2197312096" - "312097316a2198312097312098316a2199312098312099316a219a31209931209a316a219b31209a31209b316a219c" - "31209b31209c316a219d31209c31209d316a219e31209d31209e316a219f31209e31209f316a21a031209f3120a031" - "6a21a13120a03120a1316a21a23120a13120a2316a21a33120a23120a3316a21a43120a33120a4316a21a53120a431" - "20a5316a21a63120a53120a6316a21a73120a63120a7316a21a83120a73120a8316a21a93120a83120a9316a21aa31" - "20a93120aa316a21ab3120aa3120ab316a21ac3120ab3120ac316a21ad3120ac3120ad316a21ae3120ad3120ae316a" - "21af3120ae3120af316a21b03120af3120b0316a21b13120b03120b1316a21b23120b13120b2316a21b33120b23120" - "b3316a21b43120b33120b4316a21b53120b43120b5316a21b63120b53120b6316a21b73120b63120b7316a21b83120" - "b73120b8316a21b93120b83120b9316a21ba3120b93120ba316a21bb3120ba3120bb316a21bc3120bb3120bc316a21" - "bd3120bc3120bd316a21be3120bd3120be316a21bf3120be3120bf316a21c03120bf3120c0316a21c13120c03120c1" - "316a21c23120c13120c2316a21c33120c23120c3316a21c43120c33120c4316a21c53120c43120c5316a21c63120c5" - "3120c6316a21c73120c63120c7316a21c83120c73120c8316a21c93120c83120c9316a21ca3120c93120ca316a21cb" - "3120ca3120cb316a21cc3120cb3120cc316a21cd3120cc3120cd316a21ce3120cd3120ce316a21cf3120ce3120cf31" - "6a21d03120cf3120d0316a21d13120d03120d1316a21d23120d13120d2316a21d33120d23120d3316a21d43120d331" - "20d4316a21d53120d43120d5316a21d63120d53120d6316a21d73120d63120d7316a21d83120d73120d8316a21d931" - "20d83120d9316a21da3120d93120da316a21db3120da3120db316a21dc3120db3120dc316a21dd3120dc3120dd316a" - "21de3120dd3120de316a21df3120de3120df316a21e03120df3120e0316a21e13120e03120e1316a21e23120e13120" - "e2316a21e33120e23120e3316a21e43120e33120e4316a21e53120e43120e5316a21e63120e53120e6316a21e73120" - "e63120e7316a21e83120e73120e8316a21e93120e83120e9316a21ea3120e93120ea316a21eb3120ea3120eb316a21" - "ec3120eb3120ec316a21ed3120ec3120ed316a21ee3120ed3120ee316a21ef3120ee3120ef316a21f03120ef3120f0" - "316a21f13120f03120f1316a21f23120f13120f2316a21f33120f23120f3316a21f43120f33120f4316a21f53120f4" - "3120f5316a21f63120f53120f6316a21f73120f63120f7316a21f83120f73120f8316a21f93120f83120f9316a21fa" - "3120f93120fa316a21fb3120fa3120fb316a21fc3120fb3120fc316a21fd3120fc3120fd316a21fe3120fd3120fe31" - "6a21ff3120fe3120ff316a21803220ff312080326a2181322080322081326a2182322081322082326a218332208232" - "2083326a2184322083322084326a2185322084322085326a2186322085322086326a2187322086322087326a218832" - "2087322088326a2189322088322089326a218a32208932208a326a218b32208a32208b326a218c32208b32208c326a" - "218d32208c32208d326a218e32208d32208e326a218f32208e32208f326a219032208f322090326a21913220903220" - "91326a2192322091322092326a2193322092322093326a2194322093322094326a2195322094322095326a21963220" - "95322096326a2197322096322097326a2198322097322098326a2199322098322099326a219a32209932209a326a21" - "9b32209a32209b326a219c32209b32209c326a219d32209c32209d326a219e32209d32209e326a219f32209e32209f" - "326a21a032209f3220a0326a21a13220a03220a1326a21a23220a13220a2326a21a33220a23220a3326a21a43220a3" - "3220a4326a21a53220a43220a5326a21a63220a53220a6326a21a73220a63220a7326a21a83220a73220a8326a21a9" - "3220a83220a9326a21aa3220a93220aa326a21ab3220aa3220ab326a21ac3220ab3220ac326a21ad3220ac3220ad32" - "6a21ae3220ad3220ae326a21af3220ae3220af326a21b03220af3220b0326a21b13220b03220b1326a21b23220b132" - "20b2326a21b33220b23220b3326a21b43220b33220b4326a21b53220b43220b5326a21b63220b53220b6326a21b732" - "20b63220b7326a21b83220b73220b8326a21b93220b83220b9326a21ba3220b93220ba326a21bb3220ba3220bb326a" - "21bc3220bb3220bc326a21bd3220bc3220bd326a21be3220bd3220be326a21bf3220be3220bf326a21c03220bf3220" - "c0326a21c13220c03220c1326a21c23220c13220c2326a21c33220c23220c3326a21c43220c33220c4326a21c53220" - "c43220c5326a21c63220c53220c6326a21c73220c63220c7326a21c83220c73220c8326a21c93220c83220c9326a21" - "ca3220c93220ca326a21cb3220ca3220cb326a21cc3220cb3220cc326a21cd3220cc3220cd326a21ce3220cd3220ce" - "326a21cf3220ce3220cf326a21d03220cf3220d0326a21d13220d03220d1326a21d23220d13220d2326a21d33220d2" - "3220d3326a21d43220d33220d4326a21d53220d43220d5326a21d63220d53220d6326a21d73220d63220d7326a21d8" - "3220d73220d8326a21d93220d83220d9326a21da3220d93220da326a21db3220da3220db326a21dc3220db3220dc32" - "6a21dd3220dc3220dd326a21de3220dd3220de326a21df3220de3220df326a21e03220df3220e0326a21e13220e032" - "20e1326a21e23220e13220e2326a21e33220e23220e3326a21e43220e33220e4326a21e53220e43220e5326a21e632" - "20e53220e6326a21e73220e63220e7326a21e83220e73220e8326a21e93220e83220e9326a21ea3220e93220ea326a" - "21eb3220ea3220eb326a21ec3220eb3220ec326a21ed3220ec3220ed326a21ee3220ed3220ee326a21ef3220ee3220" - "ef326a21f03220ef3220f0326a21f13220f03220f1326a21f23220f13220f2326a21f33220f23220f3326a21f43220" - "f33220f4326a21f53220f43220f5326a21f63220f53220f6326a21f73220f63220f7326a21f83220f73220f8326a21" - "f93220f83220f9326a21fa3220f93220fa326a21fb3220fa3220fb326a21fc3220fb3220fc326a21fd3220fc3220fd" - "326a21fe3220fd3220fe326a21ff3220fe3220ff326a21803320ff322080336a2181332080332081336a2182332081" - "332082336a2183332082332083336a2184332083332084336a2185332084332085336a2186332085332086336a2187" - "332086332087336a2188332087332088336a2189332088332089336a218a33208933208a336a218b33208a33208b33" - "6a218c33208b33208c336a218d33208c33208d336a218e33208d33208e336a218f33208e33208f336a219033208f33" - "2090336a2191332090332091336a2192332091332092336a2193332092332093336a2194332093332094336a219533" - "2094332095336a2196332095332096336a2197332096332097336a2198332097332098336a2199332098332099336a" - "219a33209933209a336a219b33209a33209b336a219c33209b33209c336a219d33209c33209d336a219e33209d3320" - "9e336a219f33209e33209f336a21a033209f3320a0336a21a13320a03320a1336a21a23320a13320a2336a21a33320" - "a23320a3336a21a43320a33320a4336a21a53320a43320a5336a21a63320a53320a6336a21a73320a63320a7336a21" - "a83320a73320a8336a21a93320a83320a9336a21aa3320a93320aa336a21ab3320aa3320ab336a21ac3320ab3320ac" - "336a21ad3320ac3320ad336a21ae3320ad3320ae336a21af3320ae3320af336a21b03320af3320b0336a21b13320b0" - "3320b1336a21b23320b13320b2336a21b33320b23320b3336a21b43320b33320b4336a21b53320b43320b5336a21b6" - "3320b53320b6336a21b73320b63320b7336a21b83320b73320b8336a21b93320b83320b9336a21ba3320b93320ba33" - "6a21bb3320ba3320bb336a21bc3320bb3320bc336a21bd3320bc3320bd336a21be3320bd3320be336a21bf3320be33" - "20bf336a21c03320bf3320c0336a21c13320c03320c1336a21c23320c13320c2336a21c33320c23320c3336a21c433" - "20c33320c4336a21c53320c43320c5336a21c63320c53320c6336a21c73320c63320c7336a21c83320c73320c8336a" - "21c93320c83320c9336a21ca3320c93320ca336a21cb3320ca3320cb336a21cc3320cb3320cc336a21cd3320cc3320" - "cd336a21ce3320cd3320ce336a21cf3320ce3320cf336a21d03320cf3320d0336a21d13320d03320d1336a21d23320" - "d13320d2336a21d33320d23320d3336a21d43320d33320d4336a21d53320d43320d5336a21d63320d53320d6336a21" - "d73320d63320d7336a21d83320d73320d8336a21d93320d83320d9336a21da3320d93320da336a21db3320da3320db" - "336a21dc3320db3320dc336a21dd3320dc3320dd336a21de3320dd3320de336a21df3320de3320df336a21e03320df" - "3320e0336a21e13320e03320e1336a21e23320e13320e2336a21e33320e23320e3336a21e43320e33320e4336a21e5" - "3320e43320e5336a21e63320e53320e6336a21e73320e63320e7336a21e83320e73320e8336a21e93320e83320e933" - "6a21ea3320e93320ea336a21eb3320ea3320eb336a21ec3320eb3320ec336a21ed3320ec3320ed336a21ee3320ed33" - "20ee336a21ef3320ee3320ef336a21f03320ef3320f0336a21f13320f03320f1336a21f23320f13320f2336a21f333" - "20f23320f3336a21f43320f33320f4336a21f53320f43320f5336a21f63320f53320f6336a21f73320f63320f7336a" - "21f83320f73320f8336a21f93320f83320f9336a21fa3320f93320fa336a21fb3320fa3320fb336a21fc3320fb3320" - "fc336a21fd3320fc3320fd336a21fe3320fd3320fe336a21ff3320fe3320ff336a21803420ff332080346a21813420" - "80342081346a2182342081342082346a2183342082342083346a2184342083342084346a2185342084342085346a21" - "86342085342086346a2187342086342087346a2188342087342088346a2189342088342089346a218a34208934208a" - "346a218b34208a34208b346a218c34208b34208c346a218d34208c34208d346a218e34208d34208e346a218f34208e" - "34208f346a219034208f342090346a2191342090342091346a2192342091342092346a2193342092342093346a2194" - "342093342094346a2195342094342095346a2196342095342096346a2197342096342097346a219834209734209834" - "6a2199342098342099346a219a34209934209a346a219b34209a34209b346a219c34209b34209c346a219d34209c34" - "209d346a219e34209d34209e346a219f34209e34209f346a21a034209f3420a0346a21a13420a03420a1346a21a234" - "20a13420a2346a21a33420a23420a3346a21a43420a33420a4346a21a53420a43420a5346a21a63420a53420a6346a" - "21a73420a63420a7346a21a83420a73420a8346a21a93420a83420a9346a21aa3420a93420aa346a21ab3420aa3420" - "ab346a21ac3420ab3420ac346a21ad3420ac3420ad346a21ae3420ad3420ae346a21af3420ae3420af346a21b03420" - "af3420b0346a21b13420b03420b1346a21b23420b13420b2346a21b33420b23420b3346a21b43420b33420b4346a21" - "b53420b43420b5346a21b63420b53420b6346a21b73420b63420b7346a21b83420b73420b8346a21b93420b83420b9" - "346a21ba3420b93420ba346a21bb3420ba3420bb346a21bc3420bb3420bc346a21bd3420bc3420bd346a21be3420bd" - "3420be346a21bf3420be3420bf346a21c03420bf3420c0346a21c13420c03420c1346a21c23420c13420c2346a21c3" - "3420c23420c3346a21c43420c33420c4346a21c53420c43420c5346a21c63420c53420c6346a21c73420c63420c734" - "6a21c83420c73420c8346a21c93420c83420c9346a21ca3420c93420ca346a21cb3420ca3420cb346a21cc3420cb34" - "20cc346a21cd3420cc3420cd346a21ce3420cd3420ce346a21cf3420ce3420cf346a21d03420cf3420d0346a21d134" - "20d03420d1346a21d23420d13420d2346a21d33420d23420d3346a21d43420d33420d4346a21d53420d43420d5346a" - "21d63420d53420d6346a21d73420d63420d7346a21d83420d73420d8346a21d93420d83420d9346a21da3420d93420" - "da346a21db3420da3420db346a21dc3420db3420dc346a21dd3420dc3420dd346a21de3420dd3420de346a21df3420" - "de3420df346a21e03420df3420e0346a21e13420e03420e1346a21e23420e13420e2346a21e33420e23420e3346a21" - "e43420e33420e4346a21e53420e43420e5346a21e63420e53420e6346a21e73420e63420e7346a21e83420e73420e8" - "346a21e93420e83420e9346a21ea3420e93420ea346a21eb3420ea3420eb346a21ec3420eb3420ec346a21ed3420ec" - "3420ed346a21ee3420ed3420ee346a21ef3420ee3420ef346a21f03420ef3420f0346a21f13420f03420f1346a21f2" - "3420f13420f2346a21f33420f23420f3346a21f43420f33420f4346a21f53420f43420f5346a21f63420f53420f634" - "6a21f73420f63420f7346a21f83420f73420f8346a21f93420f83420f9346a21fa3420f93420fa346a21fb3420fa34" - "20fb346a21fc3420fb3420fc346a21fd3420fc3420fd346a21fe3420fd3420fe346a21ff3420fe3420ff346a218035" - "20ff342080356a2181352080352081356a2182352081352082356a2183352082352083356a2184352083352084356a" - "2185352084352085356a2186352085352086356a2187352086352087356a2188352087352088356a21893520883520" - "89356a218a35208935208a356a218b35208a35208b356a218c35208b35208c356a218d35208c35208d356a218e3520" - "8d35208e356a218f35208e35208f356a219035208f352090356a2191352090352091356a2192352091352092356a21" - "93352092352093356a2194352093352094356a2195352094352095356a2196352095352096356a2197352096352097" - "356a2198352097352098356a2199352098352099356a219a35209935209a356a219b35209a35209b356a219c35209b" - "35209c356a219d35209c35209d356a219e35209d35209e356a219f35209e35209f356a21a035209f3520a0356a21a1" - "3520a03520a1356a21a23520a13520a2356a21a33520a23520a3356a21a43520a33520a4356a21a53520a43520a535" - "6a21a63520a53520a6356a21a73520a63520a7356a21a83520a73520a8356a21a93520a83520a9356a21aa3520a935" - "20aa356a21ab3520aa3520ab356a21ac3520ab3520ac356a21ad3520ac3520ad356a21ae3520ad3520ae356a21af35" - "20ae3520af356a21b03520af3520b0356a21b13520b03520b1356a21b23520b13520b2356a21b33520b23520b3356a" - "21b43520b33520b4356a21b53520b43520b5356a21b63520b53520b6356a21b73520b63520b7356a21b83520b73520" - "b8356a21b93520b83520b9356a21ba3520b93520ba356a21bb3520ba3520bb356a21bc3520bb3520bc356a21bd3520" - "bc3520bd356a21be3520bd3520be356a21bf3520be3520bf356a21c03520bf3520c0356a21c13520c03520c1356a21" - "c23520c13520c2356a21c33520c23520c3356a21c43520c33520c4356a21c53520c43520c5356a21c63520c53520c6" - "356a21c73520c63520c7356a21c83520c73520c8356a21c93520c83520c9356a21ca3520c93520ca356a21cb3520ca" - "3520cb356a21cc3520cb3520cc356a21cd3520cc3520cd356a21ce3520cd3520ce356a21cf3520ce3520cf356a21d0" - "3520cf3520d0356a21d13520d03520d1356a21d23520d13520d2356a21d33520d23520d3356a21d43520d33520d435" - "6a21d53520d43520d5356a21d63520d53520d6356a21d73520d63520d7356a21d83520d73520d8356a21d93520d835" - "20d9356a21da3520d93520da356a21db3520da3520db356a21dc3520db3520dc356a21dd3520dc3520dd356a21de35" - "20dd3520de356a21df3520de3520df356a21e03520df3520e0356a21e13520e03520e1356a21e23520e13520e2356a" - "21e33520e23520e3356a21e43520e33520e4356a21e53520e43520e5356a21e63520e53520e6356a21e73520e63520" - "e7356a21e83520e73520e8356a21e93520e83520e9356a21ea3520e93520ea356a21eb3520ea3520eb356a21ec3520" - "eb3520ec356a21ed3520ec3520ed356a21ee3520ed3520ee356a21ef3520ee3520ef356a21f03520ef3520f0356a21" - "f13520f03520f1356a21f23520f13520f2356a21f33520f23520f3356a21f43520f33520f4356a21f53520f43520f5" - "356a21f63520f53520f6356a21f73520f63520f7356a21f83520f73520f8356a21f93520f83520f9356a21fa3520f9" - "3520fa356a21fb3520fa3520fb356a21fc3520fb3520fc356a21fd3520fc3520fd356a21fe3520fd3520fe356a21ff" - "3520fe3520ff356a21803620ff352080366a2181362080362081366a2182362081362082366a218336208236208336" - "6a2184362083362084366a2185362084362085366a2186362085362086366a2187362086362087366a218836208736" - "2088366a2189362088362089366a218a36208936208a366a218b36208a36208b366a218c36208b36208c366a218d36" - "208c36208d366a218e36208d36208e366a218f36208e36208f366a219036208f362090366a2191362090362091366a" - "2192362091362092366a2193362092362093366a2194362093362094366a2195362094362095366a21963620953620" - "96366a2197362096362097366a2198362097362098366a2199362098362099366a219a36209936209a366a219b3620" - "9a36209b366a219c36209b36209c366a219d36209c36209d366a219e36209d36209e366a219f36209e36209f366a21" - "a036209f3620a0366a21a13620a03620a1366a21a23620a13620a2366a21a33620a23620a3366a21a43620a33620a4" - "366a21a53620a43620a5366a21a63620a53620a6366a21a73620a63620a7366a21a83620a73620a8366a21a93620a8" - "3620a9366a21aa3620a93620aa366a21ab3620aa3620ab366a21ac3620ab3620ac366a21ad3620ac3620ad366a21ae" - "3620ad3620ae366a21af3620ae3620af366a21b03620af3620b0366a21b13620b03620b1366a21b23620b13620b236" - "6a21b33620b23620b3366a21b43620b33620b4366a21b53620b43620b5366a21b63620b53620b6366a21b73620b636" - "20b7366a21b83620b73620b8366a21b93620b83620b9366a21ba3620b93620ba366a21bb3620ba3620bb366a21bc36" - "20bb3620bc366a21bd3620bc3620bd366a21be3620bd3620be366a21bf3620be3620bf366a21c03620bf3620c0366a" - "21c13620c03620c1366a21c23620c13620c2366a21c33620c23620c3366a21c43620c33620c4366a21c53620c43620" - "c5366a21c63620c53620c6366a21c73620c63620c7366a21c83620c73620c8366a21c93620c83620c9366a21ca3620" - "c93620ca366a21cb3620ca3620cb366a21cc3620cb3620cc366a21cd3620cc3620cd366a21ce3620cd3620ce366a21" - "cf3620ce3620cf366a21d03620cf3620d0366a21d13620d03620d1366a21d23620d13620d2366a21d33620d23620d3" - "366a21d43620d33620d4366a21d53620d43620d5366a21d63620d53620d6366a21d73620d63620d7366a21d83620d7" - "3620d8366a21d93620d83620d9366a21da3620d93620da366a21db3620da3620db366a21dc3620db3620dc366a21dd" - "3620dc3620dd366a21de3620dd3620de366a21df3620de3620df366a21e03620df3620e0366a21e13620e03620e136" - "6a21e23620e13620e2366a21e33620e23620e3366a21e43620e33620e4366a21e53620e43620e5366a21e63620e536" - "20e6366a21e73620e63620e7366a21e83620e73620e8366a21e93620e83620e9366a21ea3620e93620ea366a21eb36" - "20ea3620eb366a21ec3620eb3620ec366a21ed3620ec3620ed366a21ee3620ed3620ee366a21ef3620ee3620ef366a" - "21f03620ef3620f0366a21f13620f03620f1366a21f23620f13620f2366a21f33620f23620f3366a21f43620f33620" - "f4366a21f53620f43620f5366a21f63620f53620f6366a21f73620f63620f7366a21f83620f73620f8366a21f93620" - "f83620f9366a21fa3620f93620fa366a21fb3620fa3620fb366a21fc3620fb3620fc366a21fd3620fc3620fd366a21" - "fe3620fd3620fe366a21ff3620fe3620ff366a21803720ff362080376a2181372080372081376a2182372081372082" - "376a2183372082372083376a2184372083372084376a2185372084372085376a2186372085372086376a2187372086" - "372087376a2188372087372088376a2189372088372089376a218a37208937208a376a218b37208a37208b376a218c" - "37208b37208c376a218d37208c37208d376a218e37208d37208e376a218f37208e37208f376a219037208f37209037" - "6a2191372090372091376a2192372091372092376a2193372092372093376a2194372093372094376a219537209437" - "2095376a2196372095372096376a2197372096372097376a2198372097372098376a2199372098372099376a219a37" - "209937209a376a219b37209a37209b376a219c37209b37209c376a219d37209c37209d376a219e37209d37209e376a" - "219f37209e37209f376a21a037209f3720a0376a21a13720a03720a1376a21a23720a13720a2376a21a33720a23720" - "a3376a21a43720a33720a4376a21a53720a43720a5376a21a63720a53720a6376a21a73720a63720a7376a21a83720" - "a73720a8376a21a93720a83720a9376a21aa3720a93720aa376a21ab3720aa3720ab376a21ac3720ab3720ac376a21" - "ad3720ac3720ad376a21ae3720ad3720ae376a21af3720ae3720af376a21b03720af3720b0376a21b13720b03720b1" - "376a21b23720b13720b2376a21b33720b23720b3376a21b43720b33720b4376a21b53720b43720b5376a21b63720b5" - "3720b6376a21b73720b63720b7376a21b83720b73720b8376a21b93720b83720b9376a21ba3720b93720ba376a21bb" - "3720ba3720bb376a21bc3720bb3720bc376a21bd3720bc3720bd376a21be3720bd3720be376a21bf3720be3720bf37" - "6a21c03720bf3720c0376a21c13720c03720c1376a21c23720c13720c2376a21c33720c23720c3376a21c43720c337" - "20c4376a21c53720c43720c5376a21c63720c53720c6376a21c73720c63720c7376a21c83720c73720c8376a21c937" - "20c83720c9376a21ca3720c93720ca376a21cb3720ca3720cb376a21cc3720cb3720cc376a21cd3720cc3720cd376a" - "21ce3720cd3720ce376a21cf3720ce3720cf376a21d03720cf3720d0376a21d13720d03720d1376a21d23720d13720" - "d2376a21d33720d23720d3376a21d43720d33720d4376a21d53720d43720d5376a21d63720d53720d6376a21d73720" - "d63720d7376a21d83720d73720d8376a21d93720d83720d9376a21da3720d93720da376a21db3720da3720db376a21" - "dc3720db3720dc376a21dd3720dc3720dd376a21de3720dd3720de376a21df3720de3720df376a21e03720df3720e0" - "376a21e13720e03720e1376a21e23720e13720e2376a21e33720e23720e3376a21e43720e33720e4376a21e53720e4" - "3720e5376a21e63720e53720e6376a21e73720e63720e7376a21e83720e73720e8376a21e93720e83720e9376a21ea" - "3720e93720ea376a21eb3720ea3720eb376a21ec3720eb3720ec376a21ed3720ec3720ed376a21ee3720ed3720ee37" - "6a21ef3720ee3720ef376a21f03720ef3720f0376a21f13720f03720f1376a21f23720f13720f2376a21f33720f237" - "20f3376a21f43720f33720f4376a21f53720f43720f5376a21f63720f53720f6376a21f73720f63720f7376a21f837" - "20f73720f8376a21f93720f83720f9376a21fa3720f93720fa376a21fb3720fa3720fb376a21fc3720fb3720fc376a" - "21fd3720fc3720fd376a21fe3720fd3720fe376a21ff3720fe3720ff376a21803820ff372080386a21813820803820" - "81386a2182382081382082386a2183382082382083386a2184382083382084386a2185382084382085386a21863820" - "85382086386a2187382086382087386a2188382087382088386a2189382088382089386a218a38208938208a386a21" - "8b38208a38208b386a218c38208b38208c386a218d38208c38208d386a218e38208d38208e386a218f38208e38208f" - "386a219038208f382090386a2191382090382091386a2192382091382092386a2193382092382093386a2194382093" - "382094386a2195382094382095386a2196382095382096386a2197382096382097386a2198382097382098386a2199" - "382098382099386a219a38209938209a386a219b38209a38209b386a219c38209b38209c386a219d38209c38209d38" - "6a219e38209d38209e386a219f38209e38209f386a21a038209f3820a0386a21a13820a03820a1386a21a23820a138" - "20a2386a21a33820a23820a3386a21a43820a33820a4386a21a53820a43820a5386a21a63820a53820a6386a21a738" - "20a63820a7386a21a83820a73820a8386a21a93820a83820a9386a21aa3820a93820aa386a21ab3820aa3820ab386a" - "21ac3820ab3820ac386a21ad3820ac3820ad386a21ae3820ad3820ae386a21af3820ae3820af386a21b03820af3820" - "b0386a21b13820b03820b1386a21b23820b13820b2386a21b33820b23820b3386a21b43820b33820b4386a21b53820" - "b43820b5386a21b63820b53820b6386a21b73820b63820b7386a21b83820b73820b8386a21b93820b83820b9386a21" - "ba3820b93820ba386a21bb3820ba3820bb386a21bc3820bb3820bc386a21bd3820bc3820bd386a21be3820bd3820be" - "386a21bf3820be3820bf386a21c03820bf3820c0386a21c13820c03820c1386a21c23820c13820c2386a21c33820c2" - "3820c3386a21c43820c33820c4386a21c53820c43820c5386a21c63820c53820c6386a21c73820c63820c7386a21c8" - "3820c73820c8386a21c93820c83820c9386a21ca3820c93820ca386a21cb3820ca3820cb386a21cc3820cb3820cc38" - "6a21cd3820cc3820cd386a21ce3820cd3820ce386a21cf3820ce3820cf386a21d03820cf3820d0386a21d13820d038" - "20d1386a21d23820d13820d2386a21d33820d23820d3386a21d43820d33820d4386a21d53820d43820d5386a21d638" - "20d53820d6386a21d73820d63820d7386a21d83820d73820d8386a21d93820d83820d9386a21da3820d93820da386a" - "21db3820da3820db386a21dc3820db3820dc386a21dd3820dc3820dd386a21de3820dd3820de386a21df3820de3820" - "df386a21e03820df3820e0386a21e13820e03820e1386a21e23820e13820e2386a21e33820e23820e3386a21e43820" - "e33820e4386a21e53820e43820e5386a21e63820e53820e6386a21e73820e63820e7386a21e83820e73820e8386a21" - "e93820e83820e9386a21ea3820e93820ea386a21eb3820ea3820eb386a21ec3820eb3820ec386a21ed3820ec3820ed" - "386a21ee3820ed3820ee386a21ef3820ee3820ef386a21f03820ef3820f0386a21f13820f03820f1386a21f23820f1" - "3820f2386a21f33820f23820f3386a21f43820f33820f4386a21f53820f43820f5386a21f63820f53820f6386a21f7" - "3820f63820f7386a21f83820f73820f8386a21f93820f83820f9386a21fa3820f93820fa386a21fb3820fa3820fb38" - "6a21fc3820fb3820fc386a21fd3820fc3820fd386a21fe3820fd3820fe386a21ff3820fe3820ff386a21803920ff38" - "2080396a2181392080392081396a2182392081392082396a2183392082392083396a2184392083392084396a218539" - "2084392085396a2186392085392086396a2187392086392087396a2188392087392088396a2189392088392089396a" - "218a39208939208a396a218b39208a39208b396a218c39208b39208c396a218d39208c39208d396a218e39208d3920" - "8e396a218f39208e39208f396a219039208f392090396a2191392090392091396a2192392091392092396a21933920" - "92392093396a2194392093392094396a2195392094392095396a2196392095392096396a2197392096392097396a21" - "98392097392098396a2199392098392099396a219a39209939209a396a219b39209a39209b396a219c39209b39209c" - "396a219d39209c39209d396a219e39209d39209e396a219f39209e39209f396a21a039209f3920a0396a21a13920a0" - "3920a1396a21a23920a13920a2396a21a33920a23920a3396a21a43920a33920a4396a21a53920a43920a5396a21a6" - "3920a53920a6396a21a73920a63920a7396a21a83920a73920a8396a21a93920a83920a9396a21aa3920a93920aa39" - "6a21ab3920aa3920ab396a21ac3920ab3920ac396a21ad3920ac3920ad396a21ae3920ad3920ae396a21af3920ae39" - "20af396a21b03920af3920b0396a21b13920b03920b1396a21b23920b13920b2396a21b33920b23920b3396a21b439" - "20b33920b4396a21b53920b43920b5396a21b63920b53920b6396a21b73920b63920b7396a21b83920b73920b8396a" - "21b93920b83920b9396a21ba3920b93920ba396a21bb3920ba3920bb396a21bc3920bb3920bc396a21bd3920bc3920" - "bd396a21be3920bd3920be396a21bf3920be3920bf396a21c03920bf3920c0396a21c13920c03920c1396a21c23920" - "c13920c2396a21c33920c23920c3396a21c43920c33920c4396a21c53920c43920c5396a21c63920c53920c6396a21" - "c73920c63920c7396a21c83920c73920c8396a21c93920c83920c9396a21ca3920c93920ca396a21cb3920ca3920cb" - "396a21cc3920cb3920cc396a21cd3920cc3920cd396a21ce3920cd3920ce396a21cf3920ce3920cf396a21d03920cf" - "3920d0396a21d13920d03920d1396a21d23920d13920d2396a21d33920d23920d3396a21d43920d33920d4396a21d5" - "3920d43920d5396a21d63920d53920d6396a21d73920d63920d7396a21d83920d73920d8396a21d93920d83920d939" - "6a21da3920d93920da396a21db3920da3920db396a21dc3920db3920dc396a21dd3920dc3920dd396a21de3920dd39" - "20de396a21df3920de3920df396a21e03920df3920e0396a21e13920e03920e1396a21e23920e13920e2396a21e339" - "20e23920e3396a21e43920e33920e4396a21e53920e43920e5396a21e63920e53920e6396a21e73920e63920e7396a" - "21e83920e73920e8396a21e93920e83920e9396a21ea3920e93920ea396a21eb3920ea3920eb396a21ec3920eb3920" - "ec396a21ed3920ec3920ed396a21ee3920ed3920ee396a21ef3920ee3920ef396a21f03920ef3920f0396a21f13920" - "f03920f1396a21f23920f13920f2396a21f33920f23920f3396a21f43920f33920f4396a21f53920f43920f5396a21" - "f63920f53920f6396a21f73920f63920f7396a21f83920f73920f8396a21f93920f83920f9396a21fa3920f93920fa" - "396a21fb3920fa3920fb396a21fc3920fb3920fc396a21fd3920fc3920fd396a21fe3920fd3920fe396a21ff3920fe" - "3920ff396a21803a20ff3920803a6a21813a20803a20813a6a21823a20813a20823a6a21833a20823a20833a6a2184" - "3a20833a20843a6a21853a20843a20853a6a21863a20853a20863a6a21873a20863a20873a6a21883a20873a20883a" - "6a21893a20883a20893a6a218a3a20893a208a3a6a218b3a208a3a208b3a6a218c3a208b3a208c3a6a218d3a208c3a" - "208d3a6a218e3a208d3a208e3a6a218f3a208e3a208f3a6a21903a208f3a20903a6a21913a20903a20913a6a21923a" - "20913a20923a6a21933a20923a20933a6a21943a20933a20943a6a21953a20943a20953a6a21963a20953a20963a6a" - "21973a20963a20973a6a21983a20973a20983a6a21993a20983a20993a6a219a3a20993a209a3a6a219b3a209a3a20" - "9b3a6a219c3a209b3a209c3a6a219d3a209c3a209d3a6a219e3a209d3a209e3a6a219f3a209e3a209f3a6a21a03a20" - "9f3a20a03a6a21a13a20a03a20a13a6a21a23a20a13a20a23a6a21a33a20a23a20a33a6a21a43a20a33a20a43a6a21" - "a53a20a43a20a53a6a21a63a20a53a20a63a6a21a73a20a63a20a73a6a21a83a20a73a20a83a6a21a93a20a83a20a9" - "3a6a21aa3a20a93a20aa3a6a21ab3a20aa3a20ab3a6a21ac3a20ab3a20ac3a6a21ad3a20ac3a20ad3a6a21ae3a20ad" - "3a20ae3a6a21af3a20ae3a20af3a6a21b03a20af3a20b03a6a21b13a20b03a20b13a6a21b23a20b13a20b23a6a21b3" - "3a20b23a20b33a6a21b43a20b33a20b43a6a21b53a20b43a20b53a6a21b63a20b53a20b63a6a21b73a20b63a20b73a" - "6a21b83a20b73a20b83a6a21b93a20b83a20b93a6a21ba3a20b93a20ba3a6a21bb3a20ba3a20bb3a6a21bc3a20bb3a" - "20bc3a6a21bd3a20bc3a20bd3a6a21be3a20bd3a20be3a6a21bf3a20be3a20bf3a6a21c03a20bf3a20c03a6a21c13a" - "20c03a20c13a6a21c23a20c13a20c23a6a21c33a20c23a20c33a6a21c43a20c33a20c43a6a21c53a20c43a20c53a6a" - "21c63a20c53a20c63a6a21c73a20c63a20c73a6a21c83a20c73a20c83a6a21c93a20c83a20c93a6a21ca3a20c93a20" - "ca3a6a21cb3a20ca3a20cb3a6a21cc3a20cb3a20cc3a6a21cd3a20cc3a20cd3a6a21ce3a20cd3a20ce3a6a21cf3a20" - "ce3a20cf3a6a21d03a20cf3a20d03a6a21d13a20d03a20d13a6a21d23a20d13a20d23a6a21d33a20d23a20d33a6a21" - "d43a20d33a20d43a6a21d53a20d43a20d53a6a21d63a20d53a20d63a6a21d73a20d63a20d73a6a21d83a20d73a20d8" - "3a6a21d93a20d83a20d93a6a21da3a20d93a20da3a6a21db3a20da3a20db3a6a21dc3a20db3a20dc3a6a21dd3a20dc" - "3a20dd3a6a21de3a20dd3a20de3a6a21df3a20de3a20df3a6a21e03a20df3a20e03a6a21e13a20e03a20e13a6a21e2" - "3a20e13a20e23a6a21e33a20e23a20e33a6a21e43a20e33a20e43a6a21e53a20e43a20e53a6a21e63a20e53a20e63a" - "6a21e73a20e63a20e73a6a21e83a20e73a20e83a6a21e93a20e83a20e93a6a21ea3a20e93a20ea3a6a21eb3a20ea3a" - "20eb3a6a21ec3a20eb3a20ec3a6a21ed3a20ec3a20ed3a6a21ee3a20ed3a20ee3a6a21ef3a20ee3a20ef3a6a21f03a" - "20ef3a20f03a6a21f13a20f03a20f13a6a21f23a20f13a20f23a6a21f33a20f23a20f33a6a21f43a20f33a20f43a6a" - "21f53a20f43a20f53a6a21f63a20f53a20f63a6a21f73a20f63a20f73a6a21f83a20f73a20f83a6a21f93a20f83a20" - "f93a6a21fa3a20f93a20fa3a6a21fb3a20fa3a20fb3a6a21fc3a20fb3a20fc3a6a21fd3a20fc3a20fd3a6a21fe3a20" - "fd3a20fe3a6a21ff3a20fe3a20ff3a6a21803b20ff3a20803b6a21813b20803b20813b6a21823b20813b20823b6a21" - "833b20823b20833b6a21843b20833b20843b6a21853b20843b20853b6a21863b20853b20863b6a21873b20863b2087" - "3b6a21883b20873b20883b6a21893b20883b20893b6a218a3b20893b208a3b6a218b3b208a3b208b3b6a218c3b208b" - "3b208c3b6a218d3b208c3b208d3b6a218e3b208d3b208e3b6a218f3b208e3b208f3b6a21903b208f3b20903b6a2191" - "3b20903b20913b6a21923b20913b20923b6a21933b20923b20933b6a21943b20933b20943b6a21953b20943b20953b" - "6a21963b20953b20963b6a21973b20963b20973b6a21983b20973b20983b6a21993b20983b20993b6a219a3b20993b" - "209a3b6a219b3b209a3b209b3b6a219c3b209b3b209c3b6a219d3b209c3b209d3b6a219e3b209d3b209e3b6a219f3b" - "209e3b209f3b6a21a03b209f3b20a03b6a21a13b20a03b20a13b6a21a23b20a13b20a23b6a21a33b20a23b20a33b6a" - "21a43b20a33b20a43b6a21a53b20a43b20a53b6a21a63b20a53b20a63b6a21a73b20a63b20a73b6a21a83b20a73b20" - "a83b6a21a93b20a83b20a93b6a21aa3b20a93b20aa3b6a21ab3b20aa3b20ab3b6a21ac3b20ab3b20ac3b6a21ad3b20" - "ac3b20ad3b6a21ae3b20ad3b20ae3b6a21af3b20ae3b20af3b6a21b03b20af3b20b03b6a21b13b20b03b20b13b6a21" - "b23b20b13b20b23b6a21b33b20b23b20b33b6a21b43b20b33b20b43b6a21b53b20b43b20b53b6a21b63b20b53b20b6" - "3b6a21b73b20b63b20b73b6a21b83b20b73b20b83b6a21b93b20b83b20b93b6a21ba3b20b93b20ba3b6a21bb3b20ba" - "3b20bb3b6a21bc3b20bb3b20bc3b6a21bd3b20bc3b20bd3b6a21be3b20bd3b20be3b6a21bf3b20be3b20bf3b6a21c0" - "3b20bf3b20c03b6a21c13b20c03b20c13b6a21c23b20c13b20c23b6a21c33b20c23b20c33b6a21c43b20c33b20c43b" - "6a21c53b20c43b20c53b6a21c63b20c53b20c63b6a21c73b20c63b20c73b6a21c83b20c73b20c83b6a21c93b20c83b" - "20c93b6a21ca3b20c93b20ca3b6a21cb3b20ca3b20cb3b6a21cc3b20cb3b20cc3b6a21cd3b20cc3b20cd3b6a21ce3b" - "20cd3b20ce3b6a21cf3b20ce3b20cf3b6a21d03b20cf3b20d03b6a21d13b20d03b20d13b6a21d23b20d13b20d23b6a" - "21d33b20d23b20d33b6a21d43b20d33b20d43b6a21d53b20d43b20d53b6a21d63b20d53b20d63b6a21d73b20d63b20" - "d73b6a21d83b20d73b20d83b6a21d93b20d83b20d93b6a21da3b20d93b20da3b6a21db3b20da3b20db3b6a21dc3b20" - "db3b20dc3b6a21dd3b20dc3b20dd3b6a21de3b20dd3b20de3b6a21df3b20de3b20df3b6a21e03b20df3b20e03b6a21" - "e13b20e03b20e13b6a21e23b20e13b20e23b6a21e33b20e23b20e33b6a21e43b20e33b20e43b6a21e53b20e43b20e5" - "3b6a21e63b20e53b20e63b6a21e73b20e63b20e73b6a21e83b20e73b20e83b6a21e93b20e83b20e93b6a21ea3b20e9" - "3b20ea3b6a21eb3b20ea3b20eb3b6a21ec3b20eb3b20ec3b6a21ed3b20ec3b20ed3b6a21ee3b20ed3b20ee3b6a21ef" - "3b20ee3b20ef3b6a21f03b20ef3b20f03b6a21f13b20f03b20f13b6a21f23b20f13b20f23b6a21f33b20f23b20f33b" - "6a21f43b20f33b20f43b6a21f53b20f43b20f53b6a21f63b20f53b20f63b6a21f73b20f63b20f73b6a21f83b20f73b" - "20f83b6a21f93b20f83b20f93b6a21fa3b20f93b20fa3b6a21fb3b20fa3b20fb3b6a21fc3b20fb3b20fc3b6a21fd3b" - "20fc3b20fd3b6a21fe3b20fd3b20fe3b6a21ff3b20fe3b20ff3b6a21803c20ff3b20803c6a21813c20803c20813c6a" - "21823c20813c20823c6a21833c20823c20833c6a21843c20833c20843c6a21853c20843c20853c6a21863c20853c20" - "863c6a21873c20863c20873c6a21883c20873c20883c6a21893c20883c20893c6a218a3c20893c208a3c6a218b3c20" - "8a3c208b3c6a218c3c208b3c208c3c6a218d3c208c3c208d3c6a218e3c208d3c208e3c6a218f3c208e3c208f3c6a21" - "903c208f3c20903c6a21913c20903c20913c6a21923c20913c20923c6a21933c20923c20933c6a21943c20933c2094" - "3c6a21953c20943c20953c6a21963c20953c20963c6a21973c20963c20973c6a21983c20973c20983c6a21993c2098" - "3c20993c6a219a3c20993c209a3c6a219b3c209a3c209b3c6a219c3c209b3c209c3c6a219d3c209c3c209d3c6a219e" - "3c209d3c209e3c6a219f3c209e3c209f3c6a21a03c209f3c20a03c6a21a13c20a03c20a13c6a21a23c20a13c20a23c" - "6a21a33c20a23c20a33c6a21a43c20a33c20a43c6a21a53c20a43c20a53c6a21a63c20a53c20a63c6a21a73c20a63c" - "20a73c6a21a83c20a73c20a83c6a21a93c20a83c20a93c6a21aa3c20a93c20aa3c6a21ab3c20aa3c20ab3c6a21ac3c" - "20ab3c20ac3c6a21ad3c20ac3c20ad3c6a21ae3c20ad3c20ae3c6a21af3c20ae3c20af3c6a21b03c20af3c20b03c6a" - "21b13c20b03c20b13c6a21b23c20b13c20b23c6a21b33c20b23c20b33c6a21b43c20b33c20b43c6a21b53c20b43c20" - "b53c6a21b63c20b53c20b63c6a21b73c20b63c20b73c6a21b83c20b73c20b83c6a21b93c20b83c20b93c6a21ba3c20" - "b93c20ba3c6a21bb3c20ba3c20bb3c6a21bc3c20bb3c20bc3c6a21bd3c20bc3c20bd3c6a21be3c20bd3c20be3c6a21" - "bf3c20be3c20bf3c6a21c03c20bf3c20c03c6a21c13c20c03c20c13c6a21c23c20c13c20c23c6a21c33c20c23c20c3" - "3c6a21c43c20c33c20c43c6a21c53c20c43c20c53c6a21c63c20c53c20c63c6a21c73c20c63c20c73c6a21c83c20c7" - "3c20c83c6a21c93c20c83c20c93c6a21ca3c20c93c20ca3c6a21cb3c20ca3c20cb3c6a21cc3c20cb3c20cc3c6a21cd" - "3c20cc3c20cd3c6a21ce3c20cd3c20ce3c6a21cf3c20ce3c20cf3c6a21d03c20cf3c20d03c6a21d13c20d03c20d13c" - "6a21d23c20d13c20d23c6a21d33c20d23c20d33c6a21d43c20d33c20d43c6a21d53c20d43c20d53c6a21d63c20d53c" - "20d63c6a21d73c20d63c20d73c6a21d83c20d73c20d83c6a21d93c20d83c20d93c6a21da3c20d93c20da3c6a21db3c" - "20da3c20db3c6a21dc3c20db3c20dc3c6a21dd3c20dc3c20dd3c6a21de3c20dd3c20de3c6a21df3c20de3c20df3c6a" - "21e03c20df3c20e03c6a21e13c20e03c20e13c6a21e23c20e13c20e23c6a21e33c20e23c20e33c6a21e43c20e33c20" - "e43c6a21e53c20e43c20e53c6a21e63c20e53c20e63c6a21e73c20e63c20e73c6a21e83c20e73c20e83c6a21e93c20" - "e83c20e93c6a21ea3c20e93c20ea3c6a21eb3c20ea3c20eb3c6a21ec3c20eb3c20ec3c6a21ed3c20ec3c20ed3c6a21" - "ee3c20ed3c20ee3c6a21ef3c20ee3c20ef3c6a21f03c20ef3c20f03c6a21f13c20f03c20f13c6a21f23c20f13c20f2" - "3c6a21f33c20f23c20f33c6a21f43c20f33c20f43c6a21f53c20f43c20f53c6a21f63c20f53c20f63c6a21f73c20f6" - "3c20f73c6a21f83c20f73c20f83c6a21f93c20f83c20f93c6a21fa3c20f93c20fa3c6a21fb3c20fa3c20fb3c6a21fc" - "3c20fb3c20fc3c6a21fd3c20fc3c20fd3c6a21fe3c20fd3c20fe3c6a21ff3c20fe3c20ff3c6a21803d20ff3c20803d" - "6a21813d20803d20813d6a21823d20813d20823d6a21833d20823d20833d6a21843d20833d20843d6a21853d20843d" - "20853d6a21863d20853d20863d6a21873d20863d20873d6a21883d20873d20883d6a21893d20883d20893d6a218a3d" - "20893d208a3d6a218b3d208a3d208b3d6a218c3d208b3d208c3d6a218d3d208c3d208d3d6a218e3d208d3d208e3d6a" - "218f3d208e3d208f3d6a21903d208f3d20903d6a21913d20903d20913d6a21923d20913d20923d6a21933d20923d20" - "933d6a21943d20933d20943d6a21953d20943d20953d6a21963d20953d20963d6a21973d20963d20973d6a21983d20" - "973d20983d6a21993d20983d20993d6a219a3d20993d209a3d6a219b3d209a3d209b3d6a219c3d209b3d209c3d6a21" - "9d3d209c3d209d3d6a219e3d209d3d209e3d6a219f3d209e3d209f3d6a21a03d209f3d20a03d6a21a13d20a03d20a1" - "3d6a21a23d20a13d20a23d6a21a33d20a23d20a33d6a21a43d20a33d20a43d6a21a53d20a43d20a53d6a21a63d20a5" - "3d20a63d6a21a73d20a63d20a73d6a21a83d20a73d20a83d6a21a93d20a83d20a93d6a21aa3d20a93d20aa3d6a21ab" - "3d20aa3d20ab3d6a21ac3d20ab3d20ac3d6a21ad3d20ac3d20ad3d6a21ae3d20ad3d20ae3d6a21af3d20ae3d20af3d" - "6a21b03d20af3d20b03d6a21b13d20b03d20b13d6a21b23d20b13d20b23d6a21b33d20b23d20b33d6a21b43d20b33d" - "20b43d6a21b53d20b43d20b53d6a21b63d20b53d20b63d6a21b73d20b63d20b73d6a21b83d20b73d20b83d6a21b93d" - "20b83d20b93d6a21ba3d20b93d20ba3d6a21bb3d20ba3d20bb3d6a21bc3d20bb3d20bc3d6a21bd3d20bc3d20bd3d6a" - "21be3d20bd3d20be3d6a21bf3d20be3d20bf3d6a21c03d20bf3d20c03d6a21c13d20c03d20c13d6a21c23d20c13d20" - "c23d6a21c33d20c23d20c33d6a21c43d20c33d20c43d6a21c53d20c43d20c53d6a21c63d20c53d20c63d6a21c73d20" - "c63d20c73d6a21c83d20c73d20c83d6a21c93d20c83d20c93d6a21ca3d20c93d20ca3d6a21cb3d20ca3d20cb3d6a21" - "cc3d20cb3d20cc3d6a21cd3d20cc3d20cd3d6a21ce3d20cd3d20ce3d6a21cf3d20ce3d20cf3d6a21d03d20cf3d20d0" - "3d6a21d13d20d03d20d13d6a21d23d20d13d20d23d6a21d33d20d23d20d33d6a21d43d20d33d20d43d6a21d53d20d4" - "3d20d53d6a21d63d20d53d20d63d6a21d73d20d63d20d73d6a21d83d20d73d20d83d6a21d93d20d83d20d93d6a21da" - "3d20d93d20da3d6a21db3d20da3d20db3d6a21dc3d20db3d20dc3d6a21dd3d20dc3d20dd3d6a21de3d20dd3d20de3d" - "6a21df3d20de3d20df3d6a21e03d20df3d20e03d6a21e13d20e03d20e13d6a21e23d20e13d20e23d6a21e33d20e23d" - "20e33d6a21e43d20e33d20e43d6a21e53d20e43d20e53d6a21e63d20e53d20e63d6a21e73d20e63d20e73d6a21e83d" - "20e73d20e83d6a21e93d20e83d20e93d6a21ea3d20e93d20ea3d6a21eb3d20ea3d20eb3d6a21ec3d20eb3d20ec3d6a" - "21ed3d20ec3d20ed3d6a21ee3d20ed3d20ee3d6a21ef3d20ee3d20ef3d6a21f03d20ef3d20f03d6a21f13d20f03d20" - "f13d6a21f23d20f13d20f23d6a21f33d20f23d20f33d6a21f43d20f33d20f43d6a21f53d20f43d20f53d6a21f63d20" - "f53d20f63d6a21f73d20f63d20f73d6a21f83d20f73d20f83d6a21f93d20f83d20f93d6a21fa3d20f93d20fa3d6a21" - "fb3d20fa3d20fb3d6a21fc3d20fb3d20fc3d6a21fd3d20fc3d20fd3d6a21fe3d20fd3d20fe3d6a21ff3d20fe3d20ff" - "3d6a21803e20ff3d20803e6a21813e20803e20813e6a21823e20813e20823e6a21833e20823e20833e6a21843e2083" - "3e20843e6a21853e20843e20853e6a21863e20853e20863e6a21873e20863e20873e6a21883e20873e20883e6a2189" - "3e20883e20893e6a218a3e20893e208a3e6a218b3e208a3e208b3e6a218c3e208b3e208c3e6a218d3e208c3e208d3e" - "6a218e3e208d3e208e3e6a218f3e208e3e208f3e6a21903e208f3e20903e6a21913e20903e20913e6a21923e20913e" - "20923e6a21933e20923e20933e6a21943e20933e20943e6a21953e20943e20953e6a21963e20953e20963e6a21973e" - "20963e20973e6a21983e20973e20983e6a21993e20983e20993e6a219a3e20993e209a3e6a219b3e209a3e209b3e6a" - "219c3e209b3e209c3e6a219d3e209c3e209d3e6a219e3e209d3e209e3e6a219f3e209e3e209f3e6a21a03e209f3e20" - "a03e6a21a13e20a03e20a13e6a21a23e20a13e20a23e6a21a33e20a23e20a33e6a21a43e20a33e20a43e6a21a53e20" - "a43e20a53e6a21a63e20a53e20a63e6a21a73e20a63e20a73e6a21a83e20a73e20a83e6a21a93e20a83e20a93e6a21" - "aa3e20a93e20aa3e6a21ab3e20aa3e20ab3e6a21ac3e20ab3e20ac3e6a21ad3e20ac3e20ad3e6a21ae3e20ad3e20ae" - "3e6a21af3e20ae3e20af3e6a21b03e20af3e20b03e6a21b13e20b03e20b13e6a21b23e20b13e20b23e6a21b33e20b2" - "3e20b33e6a21b43e20b33e20b43e6a21b53e20b43e20b53e6a21b63e20b53e20b63e6a21b73e20b63e20b73e6a21b8" - "3e20b73e20b83e6a21b93e20b83e20b93e6a21ba3e20b93e20ba3e6a21bb3e20ba3e20bb3e6a21bc3e20bb3e20bc3e" - "6a21bd3e20bc3e20bd3e6a21be3e20bd3e20be3e6a21bf3e20be3e20bf3e6a21c03e20bf3e20c03e6a21c13e20c03e" - "20c13e6a21c23e20c13e20c23e6a21c33e20c23e20c33e6a21c43e20c33e20c43e6a21c53e20c43e20c53e6a21c63e" - "20c53e20c63e6a21c73e20c63e20c73e6a21c83e20c73e20c83e6a21c93e20c83e20c93e6a21ca3e20c93e20ca3e6a" - "21cb3e20ca3e20cb3e6a21cc3e20cb3e20cc3e6a21cd3e20cc3e20cd3e6a21ce3e20cd3e20ce3e6a21cf3e20ce3e20" - "cf3e6a21d03e20cf3e20d03e6a21d13e20d03e20d13e6a21d23e20d13e20d23e6a21d33e20d23e20d33e6a21d43e20" - "d33e20d43e6a21d53e20d43e20d53e6a21d63e20d53e20d63e6a21d73e20d63e20d73e6a21d83e20d73e20d83e6a21" - "d93e20d83e20d93e6a21da3e20d93e20da3e6a21db3e20da3e20db3e6a21dc3e20db3e20dc3e6a21dd3e20dc3e20dd" - "3e6a21de3e20dd3e20de3e6a21df3e20de3e20df3e6a21e03e20df3e20e03e6a21e13e20e03e20e13e6a21e23e20e1" - "3e20e23e6a21e33e20e23e20e33e6a21e43e20e33e20e43e6a21e53e20e43e20e53e6a21e63e20e53e20e63e6a21e7" - "3e20e63e20e73e6a21e83e20e73e20e83e6a21e93e20e83e20e93e6a21ea3e20e93e20ea3e6a21eb3e20ea3e20eb3e" - "6a21ec3e20eb3e20ec3e6a21ed3e20ec3e20ed3e6a21ee3e20ed3e20ee3e6a21ef3e20ee3e20ef3e6a21f03e20ef3e" - "20f03e6a21f13e20f03e20f13e6a21f23e20f13e20f23e6a21f33e20f23e20f33e6a21f43e20f33e20f43e6a21f53e" - "20f43e20f53e6a21f63e20f53e20f63e6a21f73e20f63e20f73e6a21f83e20f73e20f83e6a21f93e20f83e20f93e6a" - "21fa3e20f93e20fa3e6a21fb3e20fa3e20fb3e6a21fc3e20fb3e20fc3e6a21fd3e20fc3e20fd3e6a21fe3e20fd3e20" - "fe3e6a21ff3e20fe3e20ff3e6a21803f20ff3e20803f6a21813f20803f20813f6a21823f20813f20823f6a21833f20" - "823f20833f6a21843f20833f20843f6a21853f20843f20853f6a21863f20853f20863f6a21873f20863f20873f6a21" - "883f20873f20883f6a21893f20883f20893f6a218a3f20893f208a3f6a218b3f208a3f208b3f6a218c3f208b3f208c" - "3f6a218d3f208c3f208d3f6a218e3f208d3f208e3f6a218f3f208e3f208f3f6a21903f208f3f20903f6a21913f2090" - "3f20913f6a21923f20913f20923f6a21933f20923f20933f6a21943f20933f20943f6a21953f20943f20953f6a2196" - "3f20953f20963f6a21973f20963f20973f6a21983f20973f20983f6a21993f20983f20993f6a219a3f20993f209a3f" - "6a219b3f209a3f209b3f6a219c3f209b3f209c3f6a219d3f209c3f209d3f6a219e3f209d3f209e3f6a219f3f209e3f" - "209f3f6a21a03f209f3f20a03f6a21a13f20a03f20a13f6a21a23f20a13f20a23f6a21a33f20a23f20a33f6a21a43f" - "20a33f20a43f6a21a53f20a43f20a53f6a21a63f20a53f20a63f6a21a73f20a63f20a73f6a21a83f20a73f20a83f6a" - "21a93f20a83f20a93f6a21aa3f20a93f20aa3f6a21ab3f20aa3f20ab3f6a21ac3f20ab3f20ac3f6a21ad3f20ac3f20" - "ad3f6a21ae3f20ad3f20ae3f6a21af3f20ae3f20af3f6a21b03f20af3f20b03f6a21b13f20b03f20b13f6a21b23f20" - "b13f20b23f6a21b33f20b23f20b33f6a21b43f20b33f20b43f6a21b53f20b43f20b53f6a21b63f20b53f20b63f6a21" - "b73f20b63f20b73f6a21b83f20b73f20b83f6a21b93f20b83f20b93f6a21ba3f20b93f20ba3f6a21bb3f20ba3f20bb" - "3f6a21bc3f20bb3f20bc3f6a21bd3f20bc3f20bd3f6a21be3f20bd3f20be3f6a21bf3f20be3f20bf3f6a21c03f20bf" - "3f20c03f6a21c13f20c03f20c13f6a21c23f20c13f20c23f6a21c33f20c23f20c33f6a21c43f20c33f20c43f6a21c5" - "3f20c43f20c53f6a21c63f20c53f20c63f6a21c73f20c63f20c73f6a21c83f20c73f20c83f6a21c93f20c83f20c93f" - "6a21ca3f20c93f20ca3f6a21cb3f20ca3f20cb3f6a21cc3f20cb3f20cc3f6a21cd3f20cc3f20cd3f6a21ce3f20cd3f" - "20ce3f6a21cf3f20ce3f20cf3f6a21d03f20cf3f20d03f6a21d13f20d03f20d13f6a21d23f20d13f20d23f6a21d33f" - "20d23f20d33f6a21d43f20d33f20d43f6a21d53f20d43f20d53f6a21d63f20d53f20d63f6a21d73f20d63f20d73f6a" - "21d83f20d73f20d83f6a21d93f20d83f20d93f6a21da3f20d93f20da3f6a21db3f20da3f20db3f6a21dc3f20db3f20" - "dc3f6a21dd3f20dc3f20dd3f6a21de3f20dd3f20de3f6a21df3f20de3f20df3f6a21e03f20df3f20e03f6a21e13f20" - "e03f20e13f6a21e23f20e13f20e23f6a21e33f20e23f20e33f6a21e43f20e33f20e43f6a21e53f20e43f20e53f6a21" - "e63f20e53f20e63f6a21e73f20e63f20e73f6a21e83f20e73f20e83f6a21e93f20e83f20e93f6a21ea3f20e93f20ea" - "3f6a21eb3f20ea3f20eb3f6a21ec3f20eb3f20ec3f6a21ed3f20ec3f20ed3f6a21ee3f20ed3f20ee3f6a21ef3f20ee" - "3f20ef3f6a21f03f20ef3f20f03f6a21f13f20f03f20f13f6a21f23f20f13f20f23f6a21f33f20f23f20f33f6a21f4" - "3f20f33f20f43f6a21f53f20f43f20f53f6a21f63f20f53f20f63f6a21f73f20f63f20f73f6a21f83f20f73f20f83f" - "6a21f93f20f83f20f93f6a21fa3f20f93f20fa3f6a21fb3f20fa3f20fb3f6a21fc3f20fb3f20fc3f6a21fd3f20fc3f" - "20fd3f6a21fe3f20fd3f20fe3f6a21ff3f20fe3f20ff3f6a21804020ff3f2080406a2181402080402081406a218240" - "2081402082406a2183402082402083406a2184402083402084406a2185402084402085406a2186402085402086406a" - "2187402086402087406a2188402087402088406a2189402088402089406a218a40208940208a406a218b40208a4020" - "8b406a218c40208b40208c406a218d40208c40208d406a218e40208d40208e406a218f40208e40208f406a21904020" - "8f402090406a2191402090402091406a2192402091402092406a2193402092402093406a2194402093402094406a21" - "95402094402095406a2196402095402096406a2197402096402097406a2198402097402098406a2199402098402099" - "406a219a40209940209a406a219b40209a40209b406a219c40209b40209c406a219d40209c40209d406a219e40209d" - "40209e406a219f40209e40209f406a21a040209f4020a0406a21a14020a04020a1406a21a24020a14020a2406a21a3" - "4020a24020a3406a21a44020a34020a4406a21a54020a44020a5406a21a64020a54020a6406a21a74020a64020a740" - "6a21a84020a74020a8406a21a94020a84020a9406a21aa4020a94020aa406a21ab4020aa4020ab406a21ac4020ab40" - "20ac406a21ad4020ac4020ad406a21ae4020ad4020ae406a21af4020ae4020af406a21b04020af4020b0406a21b140" - "20b04020b1406a21b24020b14020b2406a21b34020b24020b3406a21b44020b34020b4406a21b54020b44020b5406a" - "21b64020b54020b6406a21b74020b64020b7406a21b84020b74020b8406a21b94020b84020b9406a21ba4020b94020" - "ba406a21bb4020ba4020bb406a21bc4020bb4020bc406a21bd4020bc4020bd406a21be4020bd4020be406a21bf4020" - "be4020bf406a21c04020bf4020c0406a21c14020c04020c1406a21c24020c14020c2406a21c34020c24020c3406a21" - "c44020c34020c4406a21c54020c44020c5406a21c64020c54020c6406a21c74020c64020c7406a21c84020c74020c8" - "406a21c94020c84020c9406a21ca4020c94020ca406a21cb4020ca4020cb406a21cc4020cb4020cc406a21cd4020cc" - "4020cd406a21ce4020cd4020ce406a21cf4020ce4020cf406a21d04020cf4020d0406a21d14020d04020d1406a21d2" - "4020d14020d2406a21d34020d24020d3406a21d44020d34020d4406a21d54020d44020d5406a21d64020d54020d640" - "6a21d74020d64020d7406a21d84020d74020d8406a21d94020d84020d9406a21da4020d94020da406a21db4020da40" - "20db406a21dc4020db4020dc406a21dd4020dc4020dd406a21de4020dd4020de406a21df4020de4020df406a21e040" - "20df4020e0406a21e14020e04020e1406a21e24020e14020e2406a21e34020e24020e3406a21e44020e34020e4406a" - "21e54020e44020e5406a21e64020e54020e6406a21e74020e64020e7406a21e84020e74020e8406a21e94020e84020" - "e9406a21ea4020e94020ea406a21eb4020ea4020eb406a21ec4020eb4020ec406a21ed4020ec4020ed406a21ee4020" - "ed4020ee406a21ef4020ee4020ef406a21f04020ef4020f0406a21f14020f04020f1406a21f24020f14020f2406a21" - "f34020f24020f3406a21f44020f34020f4406a21f54020f44020f5406a21f64020f54020f6406a21f74020f64020f7" - "406a21f84020f74020f8406a21f94020f84020f9406a21fa4020f94020fa406a21fb4020fa4020fb406a21fc4020fb" - "4020fc406a21fd4020fc4020fd406a21fe4020fd4020fe406a21ff4020fe4020ff406a21804120ff402080416a2181" - "412080412081416a2182412081412082416a2183412082412083416a2184412083412084416a218541208441208541" - "6a2186412085412086416a2187412086412087416a2188412087412088416a2189412088412089416a218a41208941" - "208a416a218b41208a41208b416a218c41208b41208c416a218d41208c41208d416a218e41208d41208e416a218f41" - "208e41208f416a219041208f412090416a2191412090412091416a2192412091412092416a2193412092412093416a" - "2194412093412094416a2195412094412095416a2196412095412096416a2197412096412097416a21984120974120" - "98416a2199412098412099416a219a41209941209a416a219b41209a41209b416a219c41209b41209c416a219d4120" - "9c41209d416a219e41209d41209e416a219f41209e41209f416a21a041209f4120a0416a21a14120a04120a1416a21" - "a24120a14120a2416a21a34120a24120a3416a21a44120a34120a4416a21a54120a44120a5416a21a64120a54120a6" - "416a21a74120a64120a7416a21a84120a74120a8416a21a94120a84120a9416a21aa4120a94120aa416a21ab4120aa" - "4120ab416a21ac4120ab4120ac416a21ad4120ac4120ad416a21ae4120ad4120ae416a21af4120ae4120af416a21b0" - "4120af4120b0416a21b14120b04120b1416a21b24120b14120b2416a21b34120b24120b3416a21b44120b34120b441" - "6a21b54120b44120b5416a21b64120b54120b6416a21b74120b64120b7416a21b84120b74120b8416a21b94120b841" - "20b9416a21ba4120b94120ba416a21bb4120ba4120bb416a21bc4120bb4120bc416a21bd4120bc4120bd416a21be41" - "20bd4120be416a21bf4120be4120bf416a21c04120bf4120c0416a21c14120c04120c1416a21c24120c14120c2416a" - "21c34120c24120c3416a21c44120c34120c4416a21c54120c44120c5416a21c64120c54120c6416a21c74120c64120" - "c7416a21c84120c74120c8416a21c94120c84120c9416a21ca4120c94120ca416a21cb4120ca4120cb416a21cc4120" - "cb4120cc416a21cd4120cc4120cd416a21ce4120cd4120ce416a21cf4120ce4120cf416a21d04120cf4120d0416a21" - "d14120d04120d1416a21d24120d14120d2416a21d34120d24120d3416a21d44120d34120d4416a21d54120d44120d5" - "416a21d64120d54120d6416a21d74120d64120d7416a21d84120d74120d8416a21d94120d84120d9416a21da4120d9" - "4120da416a21db4120da4120db416a21dc4120db4120dc416a21dd4120dc4120dd416a21de4120dd4120de416a21df" - "4120de4120df416a21e04120df4120e0416a21e14120e04120e1416a21e24120e14120e2416a21e34120e24120e341" - "6a21e44120e34120e4416a21e54120e44120e5416a21e64120e54120e6416a21e74120e64120e7416a21e84120e741" - "20e8416a21e94120e84120e9416a21ea4120e94120ea416a21eb4120ea4120eb416a21ec4120eb4120ec416a21ed41" - "20ec4120ed416a21ee4120ed4120ee416a21ef4120ee4120ef416a21f04120ef4120f0416a21f14120f04120f1416a" - "21f24120f14120f2416a21f34120f24120f3416a21f44120f34120f4416a21f54120f44120f5416a21f64120f54120" - "f6416a21f74120f64120f7416a21f84120f74120f8416a21f94120f84120f9416a21fa4120f94120fa416a21fb4120" - "fa4120fb416a21fc4120fb4120fc416a21fd4120fc4120fd416a21fe4120fd4120fe416a21ff4120fe4120ff416a21" - "804220ff412080426a2181422080422081426a2182422081422082426a2183422082422083426a2184422083422084" - "426a2185422084422085426a2186422085422086426a2187422086422087426a2188422087422088426a2189422088" - "422089426a218a42208942208a426a218b42208a42208b426a218c42208b42208c426a218d42208c42208d426a218e" - "42208d42208e426a218f42208e42208f426a219042208f422090426a2191422090422091426a219242209142209242" - "6a2193422092422093426a2194422093422094426a2195422094422095426a2196422095422096426a219742209642" - "2097426a2198422097422098426a2199422098422099426a219a42209942209a426a219b42209a42209b426a219c42" - "209b42209c426a219d42209c42209d426a219e42209d42209e426a219f42209e42209f426a21a042209f4220a0426a" - "21a14220a04220a1426a21a24220a14220a2426a21a34220a24220a3426a21a44220a34220a4426a21a54220a44220" - "a5426a21a64220a54220a6426a21a74220a64220a7426a21a84220a74220a8426a21a94220a84220a9426a21aa4220" - "a94220aa426a21ab4220aa4220ab426a21ac4220ab4220ac426a21ad4220ac4220ad426a21ae4220ad4220ae426a21" - "af4220ae4220af426a21b04220af4220b0426a21b14220b04220b1426a21b24220b14220b2426a21b34220b24220b3" - "426a21b44220b34220b4426a21b54220b44220b5426a21b64220b54220b6426a21b74220b64220b7426a21b84220b7" - "4220b8426a21b94220b84220b9426a21ba4220b94220ba426a21bb4220ba4220bb426a21bc4220bb4220bc426a21bd" - "4220bc4220bd426a21be4220bd4220be426a21bf4220be4220bf426a21c04220bf4220c0426a21c14220c04220c142" - "6a21c24220c14220c2426a21c34220c24220c3426a21c44220c34220c4426a21c54220c44220c5426a21c64220c542" - "20c6426a21c74220c64220c7426a21c84220c74220c8426a21c94220c84220c9426a21ca4220c94220ca426a21cb42" - "20ca4220cb426a21cc4220cb4220cc426a21cd4220cc4220cd426a21ce4220cd4220ce426a21cf4220ce4220cf426a" - "21d04220cf4220d0426a21d14220d04220d1426a21d24220d14220d2426a21d34220d24220d3426a21d44220d34220" - "d4426a21d54220d44220d5426a21d64220d54220d6426a21d74220d64220d7426a21d84220d74220d8426a21d94220" - "d84220d9426a21da4220d94220da426a21db4220da4220db426a21dc4220db4220dc426a21dd4220dc4220dd426a21" - "de4220dd4220de426a21df4220de4220df426a21e04220df4220e0426a21e14220e04220e1426a21e24220e14220e2" - "426a21e34220e24220e3426a21e44220e34220e4426a21e54220e44220e5426a21e64220e54220e6426a21e74220e6" - "4220e7426a21e84220e74220e8426a21e94220e84220e9426a21ea4220e94220ea426a21eb4220ea4220eb426a21ec" - "4220eb4220ec426a21ed4220ec4220ed426a21ee4220ed4220ee426a21ef4220ee4220ef426a21f04220ef4220f042" - "6a21f14220f04220f1426a21f24220f14220f2426a21f34220f24220f3426a21f44220f34220f4426a21f54220f442" - "20f5426a21f64220f54220f6426a21f74220f64220f7426a21f84220f74220f8426a21f94220f84220f9426a21fa42" - "20f94220fa426a21fb4220fa4220fb426a21fc4220fb4220fc426a21fd4220fc4220fd426a21fe4220fd4220fe426a" - "21ff4220fe4220ff426a21804320ff422080436a2181432080432081436a2182432081432082436a21834320824320" - "83436a2184432083432084436a2185432084432085436a2186432085432086436a2187432086432087436a21884320" - "87432088436a2189432088432089436a218a43208943208a436a218b43208a43208b436a218c43208b43208c436a21" - "8d43208c43208d436a218e43208d43208e436a218f43208e43208f436a219043208f432090436a2191432090432091" - "436a2192432091432092436a2193432092432093436a2194432093432094436a2195432094432095436a2196432095" - "432096436a2197432096432097436a2198432097432098436a2199432098432099436a219a43209943209a436a219b" - "43209a43209b436a219c43209b43209c436a219d43209c43209d436a219e43209d43209e436a219f43209e43209f43" - "6a21a043209f4320a0436a21a14320a04320a1436a21a24320a14320a2436a21a34320a24320a3436a21a44320a343" - "20a4436a21a54320a44320a5436a21a64320a54320a6436a21a74320a64320a7436a21a84320a74320a8436a21a943" - "20a84320a9436a21aa4320a94320aa436a21ab4320aa4320ab436a21ac4320ab4320ac436a21ad4320ac4320ad436a" - "21ae4320ad4320ae436a21af4320ae4320af436a21b04320af4320b0436a21b14320b04320b1436a21b24320b14320" - "b2436a21b34320b24320b3436a21b44320b34320b4436a21b54320b44320b5436a21b64320b54320b6436a21b74320" - "b64320b7436a21b84320b74320b8436a21b94320b84320b9436a21ba4320b94320ba436a21bb4320ba4320bb436a21" - "bc4320bb4320bc436a21bd4320bc4320bd436a21be4320bd4320be436a21bf4320be4320bf436a21c04320bf4320c0" - "436a21c14320c04320c1436a21c24320c14320c2436a21c34320c24320c3436a21c44320c34320c4436a21c54320c4" - "4320c5436a21c64320c54320c6436a21c74320c64320c7436a21c84320c74320c8436a21c94320c84320c9436a21ca" - "4320c94320ca436a21cb4320ca4320cb436a21cc4320cb4320cc436a21cd4320cc4320cd436a21ce4320cd4320ce43" - "6a21cf4320ce4320cf436a21d04320cf4320d0436a21d14320d04320d1436a21d24320d14320d2436a21d34320d243" - "20d3436a21d44320d34320d4436a21d54320d44320d5436a21d64320d54320d6436a21d74320d64320d7436a21d843" - "20d74320d8436a21d94320d84320d9436a21da4320d94320da436a21db4320da4320db436a21dc4320db4320dc436a" - "21dd4320dc4320dd436a21de4320dd4320de436a21df4320de4320df436a21e04320df4320e0436a21e14320e04320" - "e1436a21e24320e14320e2436a21e34320e24320e3436a21e44320e34320e4436a21e54320e44320e5436a21e64320" - "e54320e6436a21e74320e64320e7436a21e84320e74320e8436a21e94320e84320e9436a21ea4320e94320ea436a21" - "eb4320ea4320eb436a21ec4320eb4320ec436a21ed4320ec4320ed436a21ee4320ed4320ee436a21ef4320ee4320ef" - "436a21f04320ef4320f0436a21f14320f04320f1436a21f24320f14320f2436a21f34320f24320f3436a21f44320f3" - "4320f4436a21f54320f44320f5436a21f64320f54320f6436a21f74320f64320f7436a21f84320f74320f8436a21f9" - "4320f84320f9436a21fa4320f94320fa436a21fb4320fa4320fb436a21fc4320fb4320fc436a21fd4320fc4320fd43" - "6a21fe4320fd4320fe436a21ff4320fe4320ff436a21804420ff432080446a2181442080442081446a218244208144" - "2082446a2183442082442083446a2184442083442084446a2185442084442085446a2186442085442086446a218744" - "2086442087446a2188442087442088446a2189442088442089446a218a44208944208a446a218b44208a44208b446a" - "218c44208b44208c446a218d44208c44208d446a218e44208d44208e446a218f44208e44208f446a219044208f4420" - "90446a2191442090442091446a2192442091442092446a2193442092442093446a2194442093442094446a21954420" - "94442095446a2196442095442096446a2197442096442097446a2198442097442098446a2199442098442099446a21" - "9a44209944209a446a219b44209a44209b446a219c44209b44209c446a219d44209c44209d446a219e44209d44209e" - "446a219f44209e44209f446a21a044209f4420a0446a21a14420a04420a1446a21a24420a14420a2446a21a34420a2" - "4420a3446a21a44420a34420a4446a21a54420a44420a5446a21a64420a54420a6446a21a74420a64420a7446a21a8" - "4420a74420a8446a21a94420a84420a9446a21aa4420a94420aa446a21ab4420aa4420ab446a21ac4420ab4420ac44" - "6a21ad4420ac4420ad446a21ae4420ad4420ae446a21af4420ae4420af446a21b04420af4420b0446a21b14420b044" - "20b1446a21b24420b14420b2446a21b34420b24420b3446a21b44420b34420b4446a21b54420b44420b5446a21b644" - "20b54420b6446a21b74420b64420b7446a21b84420b74420b8446a21b94420b84420b9446a21ba4420b94420ba446a" - "21bb4420ba4420bb446a21bc4420bb4420bc446a21bd4420bc4420bd446a21be4420bd4420be446a21bf4420be4420" - "bf446a21c04420bf4420c0446a21c14420c04420c1446a21c24420c14420c2446a21c34420c24420c3446a21c44420" - "c34420c4446a21c54420c44420c5446a21c64420c54420c6446a21c74420c64420c7446a21c84420c74420c8446a21" - "c94420c84420c9446a21ca4420c94420ca446a21cb4420ca4420cb446a21cc4420cb4420cc446a21cd4420cc4420cd" - "446a21ce4420cd4420ce446a21cf4420ce4420cf446a21d04420cf4420d0446a21d14420d04420d1446a21d24420d1" - "4420d2446a21d34420d24420d3446a21d44420d34420d4446a21d54420d44420d5446a21d64420d54420d6446a21d7" - "4420d64420d7446a21d84420d74420d8446a21d94420d84420d9446a21da4420d94420da446a21db4420da4420db44" - "6a21dc4420db4420dc446a21dd4420dc4420dd446a21de4420dd4420de446a21df4420de4420df446a21e04420df44" - "20e0446a21e14420e04420e1446a21e24420e14420e2446a21e34420e24420e3446a21e44420e34420e4446a21e544" - "20e44420e5446a21e64420e54420e6446a21e74420e64420e7446a21e84420e74420e8446a21e94420e84420e9446a" - "21ea4420e94420ea446a21eb4420ea4420eb446a21ec4420eb4420ec446a21ed4420ec4420ed446a21ee4420ed4420" - "ee446a21ef4420ee4420ef446a21f04420ef4420f0446a21f14420f04420f1446a21f24420f14420f2446a21f34420" - "f24420f3446a21f44420f34420f4446a21f54420f44420f5446a21f64420f54420f6446a21f74420f64420f7446a21" - "f84420f74420f8446a21f94420f84420f9446a21fa4420f94420fa446a21fb4420fa4420fb446a21fc4420fb4420fc" - "446a21fd4420fc4420fd446a21fe4420fd4420fe446a21ff4420fe4420ff446a21804520ff442080456a2181452080" - "452081456a2182452081452082456a2183452082452083456a2184452083452084456a2185452084452085456a2186" - "452085452086456a2187452086452087456a2188452087452088456a2189452088452089456a218a45208945208a45" - "6a218b45208a45208b456a218c45208b45208c456a218d45208c45208d456a218e45208d45208e456a218f45208e45" - "208f456a219045208f452090456a2191452090452091456a2192452091452092456a2193452092452093456a219445" - "2093452094456a2195452094452095456a2196452095452096456a2197452096452097456a2198452097452098456a" - "2199452098452099456a219a45209945209a456a219b45209a45209b456a219c45209b45209c456a219d45209c4520" - "9d456a219e45209d45209e456a219f45209e45209f456a21a045209f4520a0456a21a14520a04520a1456a21a24520" - "a14520a2456a21a34520a24520a3456a21a44520a34520a4456a21a54520a44520a5456a21a64520a54520a6456a21" - "a74520a64520a7456a21a84520a74520a8456a21a94520a84520a9456a21aa4520a94520aa456a21ab4520aa4520ab" - "456a21ac4520ab4520ac456a21ad4520ac4520ad456a21ae4520ad4520ae456a21af4520ae4520af456a21b04520af" - "4520b0456a21b14520b04520b1456a21b24520b14520b2456a21b34520b24520b3456a21b44520b34520b4456a21b5" - "4520b44520b5456a21b64520b54520b6456a21b74520b64520b7456a21b84520b74520b8456a21b94520b84520b945" - "6a21ba4520b94520ba456a21bb4520ba4520bb456a21bc4520bb4520bc456a21bd4520bc4520bd456a21be4520bd45" - "20be456a21bf4520be4520bf456a21c04520bf4520c0456a21c14520c04520c1456a21c24520c14520c2456a21c345" - "20c24520c3456a21c44520c34520c4456a21c54520c44520c5456a21c64520c54520c6456a21c74520c64520c7456a" - "21c84520c74520c8456a21c94520c84520c9456a21ca4520c94520ca456a21cb4520ca4520cb456a21cc4520cb4520" - "cc456a21cd4520cc4520cd456a21ce4520cd4520ce456a21cf4520ce4520cf456a21d04520cf4520d0456a21d14520" - "d04520d1456a21d24520d14520d2456a21d34520d24520d3456a21d44520d34520d4456a21d54520d44520d5456a21" - "d64520d54520d6456a21d74520d64520d7456a21d84520d74520d8456a21d94520d84520d9456a21da4520d94520da" - "456a21db4520da4520db456a21dc4520db4520dc456a21dd4520dc4520dd456a21de4520dd4520de456a21df4520de" - "4520df456a21e04520df4520e0456a21e14520e04520e1456a21e24520e14520e2456a21e34520e24520e3456a21e4" - "4520e34520e4456a21e54520e44520e5456a21e64520e54520e6456a21e74520e64520e7456a21e84520e74520e845" - "6a21e94520e84520e9456a21ea4520e94520ea456a21eb4520ea4520eb456a21ec4520eb4520ec456a21ed4520ec45" - "20ed456a21ee4520ed4520ee456a21ef4520ee4520ef456a21f04520ef4520f0456a21f14520f04520f1456a21f245" - "20f14520f2456a21f34520f24520f3456a21f44520f34520f4456a21f54520f44520f5456a21f64520f54520f6456a" - "21f74520f64520f7456a21f84520f74520f8456a21f94520f84520f9456a21fa4520f94520fa456a21fb4520fa4520" - "fb456a21fc4520fb4520fc456a21fd4520fc4520fd456a21fe4520fd4520fe456a21ff4520fe4520ff456a21804620" - "ff452080466a2181462080462081466a2182462081462082466a2183462082462083466a2184462083462084466a21" - "85462084462085466a2186462085462086466a2187462086462087466a2188462087462088466a2189462088462089" - "466a218a46208946208a466a218b46208a46208b466a218c46208b46208c466a218d46208c46208d466a218e46208d" - "46208e466a218f46208e46208f466a219046208f462090466a2191462090462091466a2192462091462092466a2193" - "462092462093466a2194462093462094466a2195462094462095466a2196462095462096466a219746209646209746" - "6a2198462097462098466a2199462098462099466a219a46209946209a466a219b46209a46209b466a219c46209b46" - "209c466a219d46209c46209d466a219e46209d46209e466a219f46209e46209f466a21a046209f4620a0466a21a146" - "20a04620a1466a21a24620a14620a2466a21a34620a24620a3466a21a44620a34620a4466a21a54620a44620a5466a" - "21a64620a54620a6466a21a74620a64620a7466a21a84620a74620a8466a21a94620a84620a9466a21aa4620a94620" - "aa466a21ab4620aa4620ab466a21ac4620ab4620ac466a21ad4620ac4620ad466a21ae4620ad4620ae466a21af4620" - "ae4620af466a21b04620af4620b0466a21b14620b04620b1466a21b24620b14620b2466a21b34620b24620b3466a21" - "b44620b34620b4466a21b54620b44620b5466a21b64620b54620b6466a21b74620b64620b7466a21b84620b74620b8" - "466a21b94620b84620b9466a21ba4620b94620ba466a21bb4620ba4620bb466a21bc4620bb4620bc466a21bd4620bc" - "4620bd466a21be4620bd4620be466a21bf4620be4620bf466a21c04620bf4620c0466a21c14620c04620c1466a21c2" - "4620c14620c2466a21c34620c24620c3466a21c44620c34620c4466a21c54620c44620c5466a21c64620c54620c646" - "6a21c74620c64620c7466a21c84620c74620c8466a21c94620c84620c9466a21ca4620c94620ca466a21cb4620ca46" - "20cb466a21cc4620cb4620cc466a21cd4620cc4620cd466a21ce4620cd4620ce466a21cf4620ce4620cf466a21d046" - "20cf4620d0466a21d14620d04620d1466a21d24620d14620d2466a21d34620d24620d3466a21d44620d34620d4466a" - "21d54620d44620d5466a21d64620d54620d6466a21d74620d64620d7466a21d84620d74620d8466a21d94620d84620" - "d9466a21da4620d94620da466a21db4620da4620db466a21dc4620db4620dc466a21dd4620dc4620dd466a21de4620" - "dd4620de466a21df4620de4620df466a21e04620df4620e0466a21e14620e04620e1466a21e24620e14620e2466a21" - "e34620e24620e3466a21e44620e34620e4466a21e54620e44620e5466a21e64620e54620e6466a21e74620e64620e7" - "466a21e84620e74620e8466a21e94620e84620e9466a21ea4620e94620ea466a21eb4620ea4620eb466a21ec4620eb" - "4620ec466a21ed4620ec4620ed466a21ee4620ed4620ee466a21ef4620ee4620ef466a21f04620ef4620f0466a21f1" - "4620f04620f1466a21f24620f14620f2466a21f34620f24620f3466a21f44620f34620f4466a21f54620f44620f546" - "6a21f64620f54620f6466a21f74620f64620f7466a21f84620f74620f8466a21f94620f84620f9466a21fa4620f946" - "20fa466a21fb4620fa4620fb466a21fc4620fb4620fc466a21fd4620fc4620fd466a21fe4620fd4620fe466a21ff46" - "20fe4620ff466a21804720ff462080476a2181472080472081476a2182472081472082476a2183472082472083476a" - "2184472083472084476a2185472084472085476a2186472085472086476a2187472086472087476a21884720874720" - "88476a2189472088472089476a218a47208947208a476a218b47208a47208b476a218c47208b47208c476a218d4720" - "8c47208d476a218e47208d47208e476a218f47208e47208f476a219047208f472090476a2191472090472091476a21" - "92472091472092476a2193472092472093476a2194472093472094476a2195472094472095476a2196472095472096" - "476a2197472096472097476a2198472097472098476a2199472098472099476a219a47209947209a476a219b47209a" - "47209b476a219c47209b47209c476a219d47209c47209d476a219e47209d47209e476a219f47209e47209f476a21a0" - "47209f4720a0476a21a14720a04720a1476a21a24720a14720a2476a21a34720a24720a3476a21a44720a34720a447" - "6a21a54720a44720a5476a21a64720a54720a6476a21a74720a64720a7476a21a84720a74720a8476a21a94720a847" - "20a9476a21aa4720a94720aa476a21ab4720aa4720ab476a21ac4720ab4720ac476a21ad4720ac4720ad476a21ae47" - "20ad4720ae476a21af4720ae4720af476a21b04720af4720b0476a21b14720b04720b1476a21b24720b14720b2476a" - "21b34720b24720b3476a21b44720b34720b4476a21b54720b44720b5476a21b64720b54720b6476a21b74720b64720" - "b7476a21b84720b74720b8476a21b94720b84720b9476a21ba4720b94720ba476a21bb4720ba4720bb476a21bc4720" - "bb4720bc476a21bd4720bc4720bd476a21be4720bd4720be476a21bf4720be4720bf476a21c04720bf4720c0476a21" - "c14720c04720c1476a21c24720c14720c2476a21c34720c24720c3476a21c44720c34720c4476a21c54720c44720c5" - "476a21c64720c54720c6476a21c74720c64720c7476a21c84720c74720c8476a21c94720c84720c9476a21ca4720c9" - "4720ca476a21cb4720ca4720cb476a21cc4720cb4720cc476a21cd4720cc4720cd476a21ce4720cd4720ce476a21cf" - "4720ce4720cf476a21d04720cf4720d0476a21d14720d04720d1476a21d24720d14720d2476a21d34720d24720d347" - "6a21d44720d34720d4476a21d54720d44720d5476a21d64720d54720d6476a21d74720d64720d7476a21d84720d747" - "20d8476a21d94720d84720d9476a21da4720d94720da476a21db4720da4720db476a21dc4720db4720dc476a21dd47" - "20dc4720dd476a21de4720dd4720de476a21df4720de4720df476a21e04720df4720e0476a21e14720e04720e1476a" - "21e24720e14720e2476a21e34720e24720e3476a21e44720e34720e4476a21e54720e44720e5476a21e64720e54720" - "e6476a21e74720e64720e7476a21e84720e74720e8476a21e94720e84720e9476a21ea4720e94720ea476a21eb4720" - "ea4720eb476a21ec4720eb4720ec476a21ed4720ec4720ed476a21ee4720ed4720ee476a21ef4720ee4720ef476a21" - "f04720ef4720f0476a21f14720f04720f1476a21f24720f14720f2476a21f34720f24720f3476a21f44720f34720f4" - "476a21f54720f44720f5476a21f64720f54720f6476a21f74720f64720f7476a21f84720f74720f8476a21f94720f8" - "4720f9476a21fa4720f94720fa476a21fb4720fa4720fb476a21fc4720fb4720fc476a21fd4720fc4720fd476a21fe" - "4720fd4720fe476a21ff4720fe4720ff476a21804820ff472080486a2181482080482081486a218248208148208248" - "6a2183482082482083486a2184482083482084486a2185482084482085486a2186482085482086486a218748208648" - "2087486a2188482087482088486a2189482088482089486a218a48208948208a486a218b48208a48208b486a218c48" - "208b48208c486a218d48208c48208d486a218e48208d48208e486a218f48208e48208f486a219048208f482090486a" - "2191482090482091486a2192482091482092486a2193482092482093486a2194482093482094486a21954820944820" - "95486a2196482095482096486a2197482096482097486a2198482097482098486a2199482098482099486a219a4820" - "9948209a486a219b48209a48209b486a219c48209b48209c486a219d48209c48209d486a219e48209d48209e486a21" - "9f48209e48209f486a21a048209f4820a0486a21a14820a04820a1486a21a24820a14820a2486a21a34820a24820a3" - "486a21a44820a34820a4486a21a54820a44820a5486a21a64820a54820a6486a21a74820a64820a7486a21a84820a7" - "4820a8486a21a94820a84820a9486a21aa4820a94820aa486a21ab4820aa4820ab486a21ac4820ab4820ac486a21ad" - "4820ac4820ad486a21ae4820ad4820ae486a21af4820ae4820af486a21b04820af4820b0486a21b14820b04820b148" - "6a21b24820b14820b2486a21b34820b24820b3486a21b44820b34820b4486a21b54820b44820b5486a21b64820b548" - "20b6486a21b74820b64820b7486a21b84820b74820b8486a21b94820b84820b9486a21ba4820b94820ba486a21bb48" - "20ba4820bb486a21bc4820bb4820bc486a21bd4820bc4820bd486a21be4820bd4820be486a21bf4820be4820bf486a" - "21c04820bf4820c0486a21c14820c04820c1486a21c24820c14820c2486a21c34820c24820c3486a21c44820c34820" - "c4486a21c54820c44820c5486a21c64820c54820c6486a21c74820c64820c7486a21c84820c74820c8486a21c94820" - "c84820c9486a21ca4820c94820ca486a21cb4820ca4820cb486a21cc4820cb4820cc486a21cd4820cc4820cd486a21" - "ce4820cd4820ce486a21cf4820ce4820cf486a21d04820cf4820d0486a21d14820d04820d1486a21d24820d14820d2" - "486a21d34820d24820d3486a21d44820d34820d4486a21d54820d44820d5486a21d64820d54820d6486a21d74820d6" - "4820d7486a21d84820d74820d8486a21d94820d84820d9486a21da4820d94820da486a21db4820da4820db486a21dc" - "4820db4820dc486a21dd4820dc4820dd486a21de4820dd4820de486a21df4820de4820df486a21e04820df4820e048" - "6a21e14820e04820e1486a21e24820e14820e2486a21e34820e24820e3486a21e44820e34820e4486a21e54820e448" - "20e5486a21e64820e54820e6486a21e74820e64820e7486a21e84820e74820e8486a21e94820e84820e9486a21ea48" - "20e94820ea486a21eb4820ea4820eb486a21ec4820eb4820ec486a21ed4820ec4820ed486a21ee4820ed4820ee486a" - "21ef4820ee4820ef486a21f04820ef4820f0486a21f14820f04820f1486a21f24820f14820f2486a21f34820f24820" - "f3486a21f44820f34820f4486a21f54820f44820f5486a21f64820f54820f6486a21f74820f64820f7486a21f84820" - "f74820f8486a21f94820f84820f9486a21fa4820f94820fa486a21fb4820fa4820fb486a21fc4820fb4820fc486a21" - "fd4820fc4820fd486a21fe4820fd4820fe486a21ff4820fe4820ff486a21804920ff482080496a2181492080492081" - "496a2182492081492082496a2183492082492083496a2184492083492084496a2185492084492085496a2186492085" - "492086496a2187492086492087496a2188492087492088496a2189492088492089496a218a49208949208a496a218b" - "49208a49208b496a218c49208b49208c496a218d49208c49208d496a218e49208d49208e496a218f49208e49208f49" - "6a219049208f492090496a2191492090492091496a2192492091492092496a2193492092492093496a219449209349" - "2094496a2195492094492095496a2196492095492096496a2197492096492097496a2198492097492098496a219949" - "2098492099496a219a49209949209a496a219b49209a49209b496a219c49209b49209c496a219d49209c49209d496a" - "219e49209d49209e496a219f49209e49209f496a21a049209f4920a0496a21a14920a04920a1496a21a24920a14920" - "a2496a21a34920a24920a3496a21a44920a34920a4496a21a54920a44920a5496a21a64920a54920a6496a21a74920" - "a64920a7496a21a84920a74920a8496a21a94920a84920a9496a21aa4920a94920aa496a21ab4920aa4920ab496a21" - "ac4920ab4920ac496a21ad4920ac4920ad496a21ae4920ad4920ae496a21af4920ae4920af496a21b04920af4920b0" - "496a21b14920b04920b1496a21b24920b14920b2496a21b34920b24920b3496a21b44920b34920b4496a21b54920b4" - "4920b5496a21b64920b54920b6496a21b74920b64920b7496a21b84920b74920b8496a21b94920b84920b9496a21ba" - "4920b94920ba496a21bb4920ba4920bb496a21bc4920bb4920bc496a21bd4920bc4920bd496a21be4920bd4920be49" - "6a21bf4920be4920bf496a21c04920bf4920c0496a21c14920c04920c1496a21c24920c14920c2496a21c34920c249" - "20c3496a21c44920c34920c4496a21c54920c44920c5496a21c64920c54920c6496a21c74920c64920c7496a21c849" - "20c74920c8496a21c94920c84920c9496a21ca4920c94920ca496a21cb4920ca4920cb496a21cc4920cb4920cc496a" - "21cd4920cc4920cd496a21ce4920cd4920ce496a21cf4920ce4920cf496a21d04920cf4920d0496a21d14920d04920" - "d1496a21d24920d14920d2496a21d34920d24920d3496a21d44920d34920d4496a21d54920d44920d5496a21d64920" - "d54920d6496a21d74920d64920d7496a21d84920d74920d8496a21d94920d84920d9496a21da4920d94920da496a21" - "db4920da4920db496a21dc4920db4920dc496a21dd4920dc4920dd496a21de4920dd4920de496a21df4920de4920df" - "496a21e04920df4920e0496a21e14920e04920e1496a21e24920e14920e2496a21e34920e24920e3496a21e44920e3" - "4920e4496a21e54920e44920e5496a21e64920e54920e6496a21e74920e64920e7496a21e84920e74920e8496a21e9" - "4920e84920e9496a21ea4920e94920ea496a21eb4920ea4920eb496a21ec4920eb4920ec496a21ed4920ec4920ed49" - "6a21ee4920ed4920ee496a21ef4920ee4920ef496a21f04920ef4920f0496a21f14920f04920f1496a21f24920f149" - "20f2496a21f34920f24920f3496a21f44920f34920f4496a21f54920f44920f5496a21f64920f54920f6496a21f749" - "20f64920f7496a21f84920f74920f8496a21f94920f84920f9496a21fa4920f94920fa496a21fb4920fa4920fb496a" - "21fc4920fb4920fc496a21fd4920fc4920fd496a21fe4920fd4920fe496a21ff4920fe4920ff496a21804a20ff4920" - "804a6a21814a20804a20814a6a21824a20814a20824a6a21834a20824a20834a6a21844a20834a20844a6a21854a20" - "844a20854a6a21864a20854a20864a6a21874a20864a20874a6a21884a20874a20884a6a21894a20884a20894a6a21" - "8a4a20894a208a4a6a218b4a208a4a208b4a6a218c4a208b4a208c4a6a218d4a208c4a208d4a6a218e4a208d4a208e" - "4a6a218f4a208e4a208f4a6a21904a208f4a20904a6a21914a20904a20914a6a21924a20914a20924a6a21934a2092" - "4a20934a6a21944a20934a20944a6a21954a20944a20954a6a21964a20954a20964a6a21974a20964a20974a6a2198" - "4a20974a20984a6a21994a20984a20994a6a219a4a20994a209a4a6a219b4a209a4a209b4a6a219c4a209b4a209c4a" - "6a219d4a209c4a209d4a6a219e4a209d4a209e4a6a219f4a209e4a209f4a6a21a04a209f4a20a04a6a21a14a20a04a" - "20a14a6a21a24a20a14a20a24a6a21a34a20a24a20a34a6a21a44a20a34a20a44a6a21a54a20a44a20a54a6a21a64a" - "20a54a20a64a6a21a74a20a64a20a74a6a21a84a20a74a20a84a6a21a94a20a84a20a94a6a21aa4a20a94a20aa4a6a" - "21ab4a20aa4a20ab4a6a21ac4a20ab4a20ac4a6a21ad4a20ac4a20ad4a6a21ae4a20ad4a20ae4a6a21af4a20ae4a20" - "af4a6a21b04a20af4a20b04a6a21b14a20b04a20b14a6a21b24a20b14a20b24a6a21b34a20b24a20b34a6a21b44a20" - "b34a20b44a6a21b54a20b44a20b54a6a21b64a20b54a20b64a6a21b74a20b64a20b74a6a21b84a20b74a20b84a6a21" - "b94a20b84a20b94a6a21ba4a20b94a20ba4a6a21bb4a20ba4a20bb4a6a21bc4a20bb4a20bc4a6a21bd4a20bc4a20bd" - "4a6a21be4a20bd4a20be4a6a21bf4a20be4a20bf4a6a21c04a20bf4a20c04a6a21c14a20c04a20c14a6a21c24a20c1" - "4a20c24a6a21c34a20c24a20c34a6a21c44a20c34a20c44a6a21c54a20c44a20c54a6a21c64a20c54a20c64a6a21c7" - "4a20c64a20c74a6a21c84a20c74a20c84a6a21c94a20c84a20c94a6a21ca4a20c94a20ca4a6a21cb4a20ca4a20cb4a" - "6a21cc4a20cb4a20cc4a6a21cd4a20cc4a20cd4a6a21ce4a20cd4a20ce4a6a21cf4a20ce4a20cf4a6a21d04a20cf4a" - "20d04a6a21d14a20d04a20d14a6a21d24a20d14a20d24a6a21d34a20d24a20d34a6a21d44a20d34a20d44a6a21d54a" - "20d44a20d54a6a21d64a20d54a20d64a6a21d74a20d64a20d74a6a21d84a20d74a20d84a6a21d94a20d84a20d94a6a" - "21da4a20d94a20da4a6a21db4a20da4a20db4a6a21dc4a20db4a20dc4a6a21dd4a20dc4a20dd4a6a21de4a20dd4a20" - "de4a6a21df4a20de4a20df4a6a21e04a20df4a20e04a6a21e14a20e04a20e14a6a21e24a20e14a20e24a6a21e34a20" - "e24a20e34a6a21e44a20e34a20e44a6a21e54a20e44a20e54a6a21e64a20e54a20e64a6a21e74a20e64a20e74a6a21" - "e84a20e74a20e84a6a21e94a20e84a20e94a6a21ea4a20e94a20ea4a6a21eb4a20ea4a20eb4a6a21ec4a20eb4a20ec" - "4a6a21ed4a20ec4a20ed4a6a21ee4a20ed4a20ee4a6a21ef4a20ee4a20ef4a6a21f04a20ef4a20f04a6a21f14a20f0" - "4a20f14a6a21f24a20f14a20f24a6a21f34a20f24a20f34a6a21f44a20f34a20f44a6a21f54a20f44a20f54a6a21f6" - "4a20f54a20f64a6a21f74a20f64a20f74a6a21f84a20f74a20f84a6a21f94a20f84a20f94a6a21fa4a20f94a20fa4a" - "6a21fb4a20fa4a20fb4a6a21fc4a20fb4a20fc4a6a21fd4a20fc4a20fd4a6a21fe4a20fd4a20fe4a6a21ff4a20fe4a" - "20ff4a6a21804b20ff4a20804b6a21814b20804b20814b6a21824b20814b20824b6a21834b20824b20834b6a21844b" - "20834b20844b6a21854b20844b20854b6a21864b20854b20864b6a21874b20864b20874b6a21884b20874b20884b6a" - "21894b20884b20894b6a218a4b20894b208a4b6a218b4b208a4b208b4b6a218c4b208b4b208c4b6a218d4b208c4b20" - "8d4b6a218e4b208d4b208e4b6a218f4b208e4b208f4b6a21904b208f4b20904b6a21914b20904b20914b6a21924b20" - "914b20924b6a21934b20924b20934b6a21944b20934b20944b6a21954b20944b20954b6a21964b20954b20964b6a21" - "974b20964b20974b6a21984b20974b20984b6a21994b20984b20994b6a219a4b20994b209a4b6a219b4b209a4b209b" - "4b6a219c4b209b4b209c4b6a219d4b209c4b209d4b6a219e4b209d4b209e4b6a219f4b209e4b209f4b6a21a04b209f" - "4b20a04b6a21a14b20a04b20a14b6a21a24b20a14b20a24b6a21a34b20a24b20a34b6a21a44b20a34b20a44b6a21a5" - "4b20a44b20a54b6a21a64b20a54b20a64b6a21a74b20a64b20a74b6a21a84b20a74b20a84b6a21a94b20a84b20a94b" - "6a21aa4b20a94b20aa4b6a21ab4b20aa4b20ab4b6a21ac4b20ab4b20ac4b6a21ad4b20ac4b20ad4b6a21ae4b20ad4b" - "20ae4b6a21af4b20ae4b20af4b6a21b04b20af4b20b04b6a21b14b20b04b20b14b6a21b24b20b14b20b24b6a21b34b" - "20b24b20b34b6a21b44b20b34b20b44b6a21b54b20b44b20b54b6a21b64b20b54b20b64b6a21b74b20b64b20b74b6a" - "21b84b20b74b20b84b6a21b94b20b84b20b94b6a21ba4b20b94b20ba4b6a21bb4b20ba4b20bb4b6a21bc4b20bb4b20" - "bc4b6a21bd4b20bc4b20bd4b6a21be4b20bd4b20be4b6a21bf4b20be4b20bf4b6a21c04b20bf4b20c04b6a21c14b20" - "c04b20c14b6a21c24b20c14b20c24b6a21c34b20c24b20c34b6a21c44b20c34b20c44b6a21c54b20c44b20c54b6a21" - "c64b20c54b20c64b6a21c74b20c64b20c74b6a21c84b20c74b20c84b6a21c94b20c84b20c94b6a21ca4b20c94b20ca" - "4b6a21cb4b20ca4b20cb4b6a21cc4b20cb4b20cc4b6a21cd4b20cc4b20cd4b6a21ce4b20cd4b20ce4b6a21cf4b20ce" - "4b20cf4b6a21d04b20cf4b20d04b6a21d14b20d04b20d14b6a21d24b20d14b20d24b6a21d34b20d24b20d34b6a21d4" - "4b20d34b20d44b6a21d54b20d44b20d54b6a21d64b20d54b20d64b6a21d74b20d64b20d74b6a21d84b20d74b20d84b" - "6a21d94b20d84b20d94b6a21da4b20d94b20da4b6a21db4b20da4b20db4b6a21dc4b20db4b20dc4b6a21dd4b20dc4b" - "20dd4b6a21de4b20dd4b20de4b6a21df4b20de4b20df4b6a21e04b20df4b20e04b6a21e14b20e04b20e14b6a21e24b" - "20e14b20e24b6a21e34b20e24b20e34b6a21e44b20e34b20e44b6a21e54b20e44b20e54b6a21e64b20e54b20e64b6a" - "21e74b20e64b20e74b6a21e84b20e74b20e84b6a21e94b20e84b20e94b6a21ea4b20e94b20ea4b6a21eb4b20ea4b20" - "eb4b6a21ec4b20eb4b20ec4b6a21ed4b20ec4b20ed4b6a21ee4b20ed4b20ee4b6a21ef4b20ee4b20ef4b6a21f04b20" - "ef4b20f04b6a21f14b20f04b20f14b6a21f24b20f14b20f24b6a21f34b20f24b20f34b6a21f44b20f34b20f44b6a21" - "f54b20f44b20f54b6a21f64b20f54b20f64b6a21f74b20f64b20f74b6a21f84b20f74b20f84b6a21f94b20f84b20f9" - "4b6a21fa4b20f94b20fa4b6a21fb4b20fa4b20fb4b6a21fc4b20fb4b20fc4b6a21fd4b20fc4b20fd4b6a21fe4b20fd" - "4b20fe4b6a21ff4b20fe4b20ff4b6a21804c20ff4b20804c6a21814c20804c20814c6a21824c20814c20824c6a2183" - "4c20824c20834c6a21844c20834c20844c6a21854c20844c20854c6a21864c20854c20864c6a21874c20864c20874c" - "6a21884c20874c20884c6a21894c20884c20894c6a218a4c20894c208a4c6a218b4c208a4c208b4c6a218c4c208b4c" - "208c4c6a218d4c208c4c208d4c6a218e4c208d4c208e4c6a218f4c208e4c208f4c6a21904c208f4c20904c6a21914c" - "20904c20914c6a21924c20914c20924c6a21934c20924c20934c6a21944c20934c20944c6a21954c20944c20954c6a" - "21964c20954c20964c6a21974c20964c20974c6a21984c20974c20984c6a21994c20984c20994c6a219a4c20994c20" - "9a4c6a219b4c209a4c209b4c6a219c4c209b4c209c4c6a219d4c209c4c209d4c6a219e4c209d4c209e4c6a219f4c20" - "9e4c209f4c6a21a04c209f4c20a04c6a21a14c20a04c20a14c6a21a24c20a14c20a24c6a21a34c20a24c20a34c6a21" - "a44c20a34c20a44c6a21a54c20a44c20a54c6a21a64c20a54c20a64c6a21a74c20a64c20a74c6a21a84c20a74c20a8" - "4c6a21a94c20a84c20a94c6a21aa4c20a94c20aa4c6a21ab4c20aa4c20ab4c6a21ac4c20ab4c20ac4c6a21ad4c20ac" - "4c20ad4c6a21ae4c20ad4c20ae4c6a21af4c20ae4c20af4c6a21b04c20af4c20b04c6a21b14c20b04c20b14c6a21b2" - "4c20b14c20b24c6a21b34c20b24c20b34c6a21b44c20b34c20b44c6a21b54c20b44c20b54c6a21b64c20b54c20b64c" - "6a21b74c20b64c20b74c6a21b84c20b74c20b84c6a21b94c20b84c20b94c6a21ba4c20b94c20ba4c6a21bb4c20ba4c" - "20bb4c6a21bc4c20bb4c20bc4c6a21bd4c20bc4c20bd4c6a21be4c20bd4c20be4c6a21bf4c20be4c20bf4c6a21c04c" - "20bf4c20c04c6a21c14c20c04c20c14c6a21c24c20c14c20c24c6a21c34c20c24c20c34c6a21c44c20c34c20c44c6a" - "21c54c20c44c20c54c6a21c64c20c54c20c64c6a21c74c20c64c20c74c6a21c84c20c74c20c84c6a21c94c20c84c20" - "c94c6a21ca4c20c94c20ca4c6a21cb4c20ca4c20cb4c6a21cc4c20cb4c20cc4c6a21cd4c20cc4c20cd4c6a21ce4c20" - "cd4c20ce4c6a21cf4c20ce4c20cf4c6a21d04c20cf4c20d04c6a21d14c20d04c20d14c6a21d24c20d14c20d24c6a21" - "d34c20d24c20d34c6a21d44c20d34c20d44c6a21d54c20d44c20d54c6a21d64c20d54c20d64c6a21d74c20d64c20d7" - "4c6a21d84c20d74c20d84c6a21d94c20d84c20d94c6a21da4c20d94c20da4c6a21db4c20da4c20db4c6a21dc4c20db" - "4c20dc4c6a21dd4c20dc4c20dd4c6a21de4c20dd4c20de4c6a21df4c20de4c20df4c6a21e04c20df4c20e04c6a21e1" - "4c20e04c20e14c6a21e24c20e14c20e24c6a21e34c20e24c20e34c6a21e44c20e34c20e44c6a21e54c20e44c20e54c" - "6a21e64c20e54c20e64c6a21e74c20e64c20e74c6a21e84c20e74c20e84c6a21e94c20e84c20e94c6a21ea4c20e94c" - "20ea4c6a21eb4c20ea4c20eb4c6a21ec4c20eb4c20ec4c6a21ed4c20ec4c20ed4c6a21ee4c20ed4c20ee4c6a21ef4c" - "20ee4c20ef4c6a21f04c20ef4c20f04c6a21f14c20f04c20f14c6a21f24c20f14c20f24c6a21f34c20f24c20f34c6a" - "21f44c20f34c20f44c6a21f54c20f44c20f54c6a21f64c20f54c20f64c6a21f74c20f64c20f74c6a21f84c20f74c20" - "f84c6a21f94c20f84c20f94c6a21fa4c20f94c20fa4c6a21fb4c20fa4c20fb4c6a21fc4c20fb4c20fc4c6a21fd4c20" - "fc4c20fd4c6a21fe4c20fd4c20fe4c6a21ff4c20fe4c20ff4c6a21804d20ff4c20804d6a21814d20804d20814d6a21" - "824d20814d20824d6a21834d20824d20834d6a21844d20834d20844d6a21854d20844d20854d6a21864d20854d2086" - "4d6a21874d20864d20874d6a21884d20874d20884d6a21894d20884d20894d6a218a4d20894d208a4d6a218b4d208a" - "4d208b4d6a218c4d208b4d208c4d6a218d4d208c4d208d4d6a218e4d208d4d208e4d6a218f4d208e4d208f4d6a2190" - "4d208f4d20904d6a21914d20904d20914d6a21924d20914d20924d6a21934d20924d20934d6a21944d20934d20944d" - "6a21954d20944d20954d6a21964d20954d20964d6a21974d20964d20974d6a21984d20974d20984d6a21994d20984d" - "20994d6a219a4d20994d209a4d6a219b4d209a4d209b4d6a219c4d209b4d209c4d6a219d4d209c4d209d4d6a219e4d" - "209d4d209e4d6a219f4d209e4d209f4d6a21a04d209f4d20a04d6a21a14d20a04d20a14d6a21a24d20a14d20a24d6a" - "21a34d20a24d20a34d6a21a44d20a34d20a44d6a21a54d20a44d20a54d6a21a64d20a54d20a64d6a21a74d20a64d20" - "a74d6a21a84d20a74d20a84d6a21a94d20a84d20a94d6a21aa4d20a94d20aa4d6a21ab4d20aa4d20ab4d6a21ac4d20" - "ab4d20ac4d6a21ad4d20ac4d20ad4d6a21ae4d20ad4d20ae4d6a21af4d20ae4d20af4d6a21b04d20af4d20b04d6a21" - "b14d20b04d20b14d6a21b24d20b14d20b24d6a21b34d20b24d20b34d6a21b44d20b34d20b44d6a21b54d20b44d20b5" - "4d6a21b64d20b54d20b64d6a21b74d20b64d20b74d6a21b84d20b74d20b84d6a21b94d20b84d20b94d6a21ba4d20b9" - "4d20ba4d6a21bb4d20ba4d20bb4d6a21bc4d20bb4d20bc4d6a21bd4d20bc4d20bd4d6a21be4d20bd4d20be4d6a21bf" - "4d20be4d20bf4d6a21c04d20bf4d20c04d6a21c14d20c04d20c14d6a21c24d20c14d20c24d6a21c34d20c24d20c34d" - "6a21c44d20c34d20c44d6a21c54d20c44d20c54d6a21c64d20c54d20c64d6a21c74d20c64d20c74d6a21c84d20c74d" - "20c84d6a21c94d20c84d20c94d6a21ca4d20c94d20ca4d6a21cb4d20ca4d20cb4d6a21cc4d20cb4d20cc4d6a21cd4d" - "20cc4d20cd4d6a21ce4d20cd4d20ce4d6a21cf4d20ce4d20cf4d6a21d04d20cf4d20d04d6a21d14d20d04d20d14d6a" - "21d24d20d14d20d24d6a21d34d20d24d20d34d6a21d44d20d34d20d44d6a21d54d20d44d20d54d6a21d64d20d54d20" - "d64d6a21d74d20d64d20d74d6a21d84d20d74d20d84d6a21d94d20d84d20d94d6a21da4d20d94d20da4d6a21db4d20" - "da4d20db4d6a21dc4d20db4d20dc4d6a21dd4d20dc4d20dd4d6a21de4d20dd4d20de4d6a21df4d20de4d20df4d6a21" - "e04d20df4d20e04d6a21e14d20e04d20e14d6a21e24d20e14d20e24d6a21e34d20e24d20e34d6a21e44d20e34d20e4" - "4d6a21e54d20e44d20e54d6a21e64d20e54d20e64d6a21e74d20e64d20e74d6a21e84d20e74d20e84d6a21e94d20e8" - "4d20e94d6a21ea4d20e94d20ea4d6a21eb4d20ea4d20eb4d6a21ec4d20eb4d20ec4d6a21ed4d20ec4d20ed4d6a21ee" - "4d20ed4d20ee4d6a21ef4d20ee4d20ef4d6a21f04d20ef4d20f04d6a21f14d20f04d20f14d6a21f24d20f14d20f24d" - "6a21f34d20f24d20f34d6a21f44d20f34d20f44d6a21f54d20f44d20f54d6a21f64d20f54d20f64d6a21f74d20f64d" - "20f74d6a21f84d20f74d20f84d6a21f94d20f84d20f94d6a21fa4d20f94d20fa4d6a21fb4d20fa4d20fb4d6a21fc4d" - "20fb4d20fc4d6a21fd4d20fc4d20fd4d6a21fe4d20fd4d20fe4d6a21ff4d20fe4d20ff4d6a21804e20ff4d20804e6a" - "21814e20804e20814e6a21824e20814e20824e6a21834e20824e20834e6a21844e20834e20844e6a21854e20844e20" - "854e6a21864e20854e20864e6a21874e20864e20874e6a21884e20874e20884e6a21894e20884e20894e6a218a4e20" - "894e208a4e6a218b4e208a4e208b4e6a218c4e208b4e208c4e6a218d4e208c4e208d4e6a218e4e208d4e208e4e6a21" - "8f4e208f4e0b"; diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index cfe531639d..a6e84dd06b 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -4,11 +4,6 @@ #include -extern std::string const kFibWasmHex = - "0061736d0100000001090260000060017f017f0303020001071b02115f5f7761736d5f63616c6c5f63746f72730000" - "0366696200010a440202000b3f01017f200045044041000f0b2000410348044041010f0b200041026a210003402000" - "41036b100120016a2101200041026b220041044a0d000b200141016a0b"; - extern std::string const kLedgerSqnWasmHex = "0061736d01000000010e0360027f7f017f6000006000017f02160103656e760e6765745f6c65646765725f73716e00" "0003030201020503010002063f0a7f01418088040b7f004180080b7f004180080b7f004180080b7f00418088040b7f" @@ -201,10 +196,6 @@ extern std::string const kAllHostFunctionsWasmHex = "392e30202832393438333838336520323032352d30382d303429002c0f7461726765745f6665617475726573022b0f" "6d757461626c652d676c6f62616c732b087369676e2d657874"; -extern std::string const kDeepRecursionHex = - "0061736d010000000105016000017f030201000608017f0141c0843d0b070a010666696e69736800000a1601140023" - "0045044041010f0b230041016b240010000b"; - extern std::string const kAllKeyletsWasmHex = "0061736d0100000001480960067f7f7f7f7f7f017f60047f7f7f7f017f60087f7f7f7f7f7f7f7f017f60037f7f7f01" "7f60037f7f7e017f60057f7f7f7f7f017f60057f7f7f7f7f006000017f60037f7f7f000284051808686f73745f6c69" @@ -826,485 +817,6 @@ extern std::string const kCodecovTestsWasmHex = "6976616c75652b0f6d757461626c652d676c6f62616c732b136e6f6e7472617070696e672d6670746f696e742b0f72" "65666572656e63652d74797065732b087369676e2d657874"; -extern std::string const kFloatTestsWasmHex = - "0061736d0100000001490960057f7f7f7f7f017f60077f7f7f7f7f7f7f017f60067f7f7f7f7f7f017f60047e7f7f7f" - "017f60057e7f7f7f7f017f60047f7f7f7f017f60037f7f7e017f60037f7f7f006000017f02fa021008686f73745f6c" - "6962057472616365000008686f73745f6c69620e666c6f61745f66726f6d5f696e74000308686f73745f6c69620f66" - "6c6f61745f66726f6d5f75696e74000003656e7613666c6f61745f66726f6d5f6d616e745f657870000408686f7374" - "5f6c69620d666c6f61745f636f6d70617265000508686f73745f6c696209666c6f61745f616464000108686f73745f" - "6c69620e666c6f61745f7375627472616374000108686f73745f6c69620e666c6f61745f6d756c7469706c79000108" - "686f73745f6c69620c666c6f61745f646976696465000108686f73745f6c696209666c6f61745f706f77000208686f" - "73745f6c69620974726163655f6e756d000608686f73745f6c69620a666c6f61745f726f6f74000203656e760c666c" - "6f61745f746f5f696e74000003656e7611666c6f61745f746f5f6d616e745f657870000203656e7613666c6f61745f" - "66726f6d5f7374616d6f756e74000003656e7613666c6f61745f66726f6d5f73746e756d6265720000030302070805" - "030100110619037f01418080c0000b7f0041b49ac0000b7f0041c09ac0000b072e04066d656d6f727902000666696e" - "69736800110a5f5f646174615f656e6403010b5f5f686561705f6261736503020ab621021f00200020014101410041" - "0010001a418080c00041022002410c410110001a0b9321020c7f017e230041f0006b22002400418280c000411d4101" - "4100410010001a200041e8006a4100360200200042003703600240428ce000200041e0006a2203410c410010012201" - "410c460440419f80c00041172003101041b680c000411e2003410c410110001a0c010b41d480c000411e4101410041" - "0010001a0b2000428ce0003703500240200041d0006a4108200041e0006a2203410c41001002410c4604402001410c" - "46210741f280c0004117200310100c010b418981c000411e41014100410010001a0b024042fb004102200041e0006a" - "2201410c41001003410c46044041a781c0004121200110100c010b41c881c000412641014100410010001a41002107" - "0b41ee81c0004115418382c0001010418f82c000411641a582c000101041b182c000411b41014100410010001a2000" - "41e8006a41003602002000420037036002404201200041e0006a2203410c410010012201410c46044041cc82c00041" - "0f200310100c010b41db82c000411641014100410010001a0b027f200041e0006a410c418382c000410c1004450440" - "41f182c000411b41014100410010001a2001410c460c010b418c83c000412341014100410010001a41000b21080240" - "200041e0006a410c41a582c000410c1004410146044041af83c000412341014100410010001a0c010b4100210841d2" - "83c000412c41014100410010001a0b024041a582c000410c200041e0006a410c1004410246044041fe83c000412341" - "014100410010001a0c010b4100210841a184c000412c41014100410010001a0b41cd84c00041204101410041001000" - "1a200041d8006a418b82c0002800003602002000418382c000290000370350410921040340200041d0006a2201410c" - "418382c000410c2001410c410010051a200441016b22040d000b200041e8006a410036020020004200370360420a20" - "0041e0006a410c41001001410c46220945044041ed84c000411741014100410010001a0b0240200041e0006a410c20" - "0041d0006a410c1004450440418485c000411441014100410010001a0c010b41002109419885c00041164101410041" - "0010001a0b410b21040340200041d0006a2201410c418382c000410c2001410c410010061a200441016b22040d000b" - "02402001410c41a582c000410c100445044041ae85c000411941014100410010001a0c010b4100210941c785c00041" - "1b41014100410010001a0b41e285c000412341014100410010001a200041106a410036020020004200370308420a20" - "0041086a410c410010011a200041206a418b82c0002800003602002000418382c00029000037031841062104034020" - "0041186a2201410c200041086a410c2001410c410010071a200441016b22040d000b200041d8006a41003602002000" - "420037035042c0843d200041d0006a2203410c410010011a02402003410c2001410c10042201450440418586c00041" - "1941014100410010001a0c010b419e86c000411b41014100410010001a0b200145210a410721040340200041186a22" - "01410c200041086a410c2001410c410010081a200441016b22040d000b200041e8006a410036020020004200370360" - "4201417f200041e0006a2203410c410010031a02402001410c2003410c100445044041b986c0004117410141004100" - "10001a0c010b41d086c000411941014100410010001a4100210a0b41e986c000411741014100410010001a20004120" - "6a2204410036020020004200370318418382c000410c4103200041186a2205410c410010091a418087c00041122005" - "101041a582c000410c41062005410c410010091a419287c000411820051010200041d8006a22014100360200200042" - "003703504209200041d0006a2202410c410010011a2002410c41022005410c410010091a41aa87c000411420051010" - "2002410c41002005410c410010091a41be87c000411720051010200041e8006a220341003602002000420037036042" - "00200041e0006a2206410c410010011a2006410c41022005410c410010091a41d587c00041142005101041e987c000" - "41382006410c41002005410c41001009ac100a1a41a188c000411841014100410010001a2004410036020020004200" - "37031842092005410c410010011a20014100360200200042003703502005410c41022002410c4100100b1a41b988c0" - "004112200210102005410c41032002410c4100100b1a41cb88c0004112200210102003410036020020004200370360" - "42c0843d2006410c410010011a2006410c41032002410c4100100b1a41dd88c0004118200210102006410c41062002" - "410c4100100b1a41f588c000411c20021010419189c000411a41014100410010001a20014100360200200042003703" - "502003410036020020004200370360420a2006410c410010011a418382c000410c2006410c2002410c410010081a41" - "ab89c000411920021010418382c000410c2002410c2002410c410010081a41c489c000410f2002101002402006410c" - "2002410c1004220b45044041d389c000411441014100410010001a0c010b41e789c000411641014100410010001a0b" - "4100210141fd89c000411a41014100410010001a200042003703080240418382c000410c200041086a41084100100c" - "220341084604402000290308220c42015104404101210141978ac000411741014100410010001a0c020b41ae8ac000" - "411941014100410010001a41c78ac0004108200c100a1a0c010b41cf8ac000412441014100410010001a41f38ac000" - "410f2003ac100a1a0b41002104024041a582c000410c200041086a41084100100c220341084604402000290308220c" - "427f51044041828bc000411841014100410010001a200121040c020b419a8bc000411a41014100410010001a41c78a" - "c0004108200c100a1a0c010b41b48bc000412541014100410010001a41f38ac000410f2003ac100a1a0b4100210120" - "0041206a41003602002000420037031842ffffffffffffffffff00200041186a2203410c410010011a02402003410c" - "200041086a41084100100c220341084604402000290308220c42ffffffffffffffffff0051044041d98bc000411e41" - "014100410010001a200421010c020b41f78bc000412041014100410010001a41978cc000410d42ffffffffffffffff" - "ff00100a1a41c78ac0004108200c100a1a0c010b41a48cc000412b41014100410010001a41f38ac000410f2003ac10" - "0a1a0b41002103200041d8006a4100360200200042003703504200200041d0006a2204410c410010011a0240200441" - "0c200041086a41084100100c220441084604402000290308220c50044041cf8cc000411741014100410010001a2001" - "21030c020b41e68cc000411941014100410010001a41c78ac0004108200c100a1a0c010b41ff8cc000412441014100" - "410010001a41f38ac000410f2004ac100a1a0b41002104200041e8006a4100360200200042003703604201417f2000" - "41e0006a2201410c410010031a02402001410c200041086a41084100100c220141084604402000290308220c500440" - "41a38dc000412541014100410010001a200321040c020b41c88dc000412741014100410010001a41c78ac000410820" - "0c100a1a0c010b41ef8dc000413241014100410010001a41f38ac000410f2001ac100a1a0b0240200041e0006a410c" - "200041086a41084101100c220141084604402000290308220c50044041a18ec000412741014100410010001a0c020b" - "4100210441c88ec000412941014100410010001a41c78ac0004108200c100a1a0c010b4100210441f18ec000413441" - "014100410010001a41f38ac000410f2001ac100a1a0b4100210141a58fc000412c41014100410010001a2000420037" - "0328200041003602340240418382c000410c200041286a4108200041346a4104100d2203410c460440200028023422" - "03416e462000290328220c42808090bbbad6adf00d517145044041fa8fc000412b41014100410010001a41a590c000" - "412f200c100a1a41d490c000411f2003ac100a1a0c020b4101210141d18fc000412941014100410010001a0c010b41" - "f390c000413641014100410010001a41f38ac000410f2003ac100a1a0b200042003703384100210320004100360244" - "024041a582c000410c200041386a4108200041c4006a4104100d2202410c46044020002802442202416e4620002903" - "38220c428080f0c4c5a9d28f72517145044041d391c000412c41014100410010001a41ff91c0004130200c100a1a41" - "d490c000411f2002ac100a1a0c020b41a991c000412a41014100410010001a200121030c010b41af92c00041374101" - "4100410010001a41f38ac000410f2002ac100a1a0b41002101200041d8006a410036020020004200370350420a2000" - "41d0006a2202410c410010011a200042003703082000410036024802402002410c200041086a4108200041c8006a41" - "04100d2202410c46044020002802482202416f462000290308220c42808090bbbad6adf00d5171450440419093c000" - "412c41014100410010001a41a590c000412f200c100a1a41bc93c000411f2002ac100a1a0c020b41e692c000412a41" - "014100410010001a200321010c010b41db93c000413741014100410010001a41f38ac000410f2002ac100a1a0b4100" - "2103200041e8006a4100360200200042003703604200200041e0006a2202410c410010011a20004200370318200041" - "0036024c02402002410c200041186a4108200041cc006a4104100d2202410c4604402000290318220c50200028024c" - "2202418080808078467145044041bb94c000412b41014100410010001a41e694c000411d200c100a1a418395c00041" - "272002ac100a1a0c020b419294c000412941014100410010001a200121030c010b41aa95c000413641014100410010" - "001a41f38ac000410f2002ac100a1a0b4100210141e095c000412141014100410010001a200042c0808080d0a0fdf0" - "00370018200041e8006a41003602002000420037036002400240200041186a4108200041e0006a2205410c4100100e" - "2202410c460440418196c000412220051010200042003703502005410c200041d0006a41084100100c22024108470d" - "012000290350220c4280c2d72f5104404101210141a396c000411d41014100410010001a0c030b41c096c000411f41" - "014100410010001a41df96c000411c200c100a1a0c020b41af97c000411f41014100410010001a41ce97c000411020" - "02ac100a1a0c010b41fb96c000413441014100410010001a41f38ac000410f2002ac100a1a0b4100210241de97c000" - "412141014100410010001a200041ffffff8f7f36005820004281eceedce494ccf9c000370050200041e8006a410036" - "02002000420037036002400240200041d0006a410c200041e0006a2206410c4100100f2205410c46044041ff97c000" - "411c20061010200042003703182006410c200041186a41084100100c22054108470d012000290318220c42fb005104" - "4041012102419b98c000411b41014100410010001a0c030b41b698c000411d41014100410010001a41d398c0004116" - "200c100a1a0c020b419b99c000411d41014100410010001a41ce97c00041102005ac100a1a0c010b41e998c0004132" - "41014100410010001a41f38ac000410f2005ac100a1a0b410021050240418382c000410c200041e0006a2206410c41" - "00100f410c46044041b899c000411a200610102006410c418382c000410c100445044041d299c00041204101410041" - "0010001a200221050c020b41f299c000412241014100410010001a0c010b41949ac000412041014100410010001a0b" - "200041f0006a2400200b452007200871200971200a71200471200371200171200571710b0bbe1a0100418080c0000b" - "b41a20200a24242420746573745f666c6f61745f66726f6d5f7761736d202424242020666c6f61742066726f6d2069" - "36342031323330303a2020666c6f61742066726f6d20693634203132333030206173204845583a2020666c6f617420" - "66726f6d206936342031323330303a206661696c65642020666c6f61742066726f6d207536342031323330303a2020" - "666c6f61742066726f6d207536342031323330303a206661696c65642020666c6f61742066726f6d2065787020322c" - "206d616e7469737361203132333a2020666c6f61742066726f6d2065787020322c206d616e746973736120333a2066" - "61696c65642020666c6f61742066726f6d20636f6e737420313a0de0b6b3a7640000ffffffee2020666c6f61742066" - "726f6d20636f6e7374202d313af21f494c589c0000ffffffee0a24242420746573745f666c6f61745f636f6d706172" - "65202424242020666c6f61742066726f6d20313a2020666c6f61742066726f6d20313a206661696c65642020666c6f" - "61742066726f6d2031203d3d20464c4f41545f4f4e452020666c6f61742066726f6d203120213d20464c4f41545f4f" - "4e452c206661696c65642020666c6f61742066726f6d2031203e20464c4f41545f4e454741544956455f4f4e452020" - "666c6f61742066726f6d203120213e20464c4f41545f4e454741544956455f4f4e452c206661696c65642020464c4f" - "41545f4e454741544956455f4f4e45203c20666c6f61742066726f6d20312020464c4f41545f4e454741544956455f" - "4f4e4520213c20666c6f61742066726f6d20312c206661696c65640a24242420746573745f666c6f61745f6164645f" - "7375627472616374202424242020666c6f61742066726f6d2031303a206661696c6564202072657065617465642061" - "64643a20676f6f6420207265706561746564206164643a206661696c65642020726570656174656420737562747261" - "63743a20676f6f64202072657065617465642073756274726163743a206661696c65640a24242420746573745f666c" - "6f61745f6d756c7469706c795f6469766964652024242420207265706561746564206d756c7469706c793a20676f6f" - "6420207265706561746564206d756c7469706c793a206661696c656420207265706561746564206469766964653a20" - "676f6f6420207265706561746564206469766964653a206661696c65640a24242420746573745f666c6f61745f706f" - "77202424242020666c6f61742063756265206f6620313a2020666c6f61742036746820706f776572206f66202d313a" - "2020666c6f617420737175617265206f6620393a2020666c6f61742030746820706f776572206f6620393a2020666c" - "6f617420737175617265206f6620303a2020666c6f61742030746820706f776572206f662030202865787065637469" - "6e6720494e56414c49445f504152414d53206572726f72293a0a24242420746573745f666c6f61745f726f6f742024" - "24242020666c6f61742073717274206f6620393a2020666c6f61742063627274206f6620393a2020666c6f61742063" - "627274206f6620313030303030303a2020666c6f61742036746820726f6f74206f6620313030303030303a0a242424" - "20746573745f666c6f61745f696e76657274202424242020696e76657274206120666c6f61742066726f6d2031303a" - "2020696e7665727420616761696e3a2020696e766572742074776963653a20676f6f642020696e7665727420747769" - "63653a206661696c65640a24242420746573745f666c6f61745f746f5f696e74202424242020666c6f61745f746f5f" - "696e742831293a20676f6f642020666c6f61745f746f5f696e742831293a206661696c656420202020676f743a2020" - "666c6f61745f746f5f696e742831293a206661696c65642077697468206572726f72202020206572726f7220636f64" - "653a2020666c6f61745f746f5f696e74282d31293a20676f6f642020666c6f61745f746f5f696e74282d31293a2066" - "61696c65642020666c6f61745f746f5f696e74282d31293a206661696c65642077697468206572726f722020666c6f" - "61745f746f5f696e74286936343a3a4d4158293a20676f6f642020666c6f61745f746f5f696e74286936343a3a4d41" - "58293a206661696c65642020202065787065637465643a2020666c6f61745f746f5f696e74286936343a3a4d415829" - "3a206661696c65642077697468206572726f722020666c6f61745f746f5f696e742830293a20676f6f642020666c6f" - "61745f746f5f696e742830293a206661696c65642020666c6f61745f746f5f696e742830293a206661696c65642077" - "697468206572726f722020666c6f61745f746f5f696e7428302e312c20746f5f6e656172657374293a20676f6f6420" - "20666c6f61745f746f5f696e7428302e312c20746f5f6e656172657374293a206661696c65642020666c6f61745f74" - "6f5f696e7428302e312c20746f5f6e656172657374293a206661696c65642077697468206572726f722020666c6f61" - "745f746f5f696e7428302e312c20746f77617264735f7a65726f293a20676f6f642020666c6f61745f746f5f696e74" - "28302e312c20746f77617264735f7a65726f293a206661696c65642020666c6f61745f746f5f696e7428302e312c20" - "746f77617264735f7a65726f293a206661696c65642077697468206572726f720a24242420746573745f666c6f6174" - "5f746f5f6d616e74697373615f616e645f6578706f6e656e74202424242020666c6f61745f746f5f6d616e74697373" - "615f616e645f6578706f6e656e742831293a20676f6f642020666c6f61745f746f5f6d616e74697373615f616e645f" - "6578706f6e656e742831293a206661696c6564202020206578706563746564206d616e746973736120313030303030" - "303030303030303030303030302c20676f743a202020206578706563746564206578706f6e656e74202d31382c2067" - "6f743a2020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e742831293a206661696c656420" - "77697468206572726f722020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e74282d31293a" - "20676f6f642020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e74282d31293a206661696c" - "6564202020206578706563746564206d616e7469737361202d313030303030303030303030303030303030302c2067" - "6f743a2020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e74282d31293a206661696c6564" - "2077697468206572726f722020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e7428313029" - "3a20676f6f642020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e74283130293a20666169" - "6c6564202020206578706563746564206578706f6e656e74202d31372c20676f743a2020666c6f61745f746f5f6d61" - "6e74697373615f616e645f6578706f6e656e74283130293a206661696c65642077697468206572726f722020666c6f" - "61745f746f5f6d616e74697373615f616e645f6578706f6e656e742830293a20676f6f642020666c6f61745f746f5f" - "6d616e74697373615f616e645f6578706f6e656e742830293a206661696c6564202020206578706563746564206d61" - "6e746973736120302c20676f743a202020206578706563746564206578706f6e656e74202d32313437343833363438" - "2c20676f743a2020666c6f61745f746f5f6d616e74697373615f616e645f6578706f6e656e742830293a206661696c" - "65642077697468206572726f720a24242420746573745f666c6f61745f66726f6d5f7374616d6f756e742024242420" - "20666c6f61742066726f6d2058525020616d6f756e74202831303020585250293a202058525020616d6f756e742063" - "6f6e76657273696f6e3a20676f6f64202058525020616d6f756e7420636f6e76657273696f6e3a206661696c656420" - "2020206578706563746564203130303030303030302c20676f743a202058525020616d6f756e7420636f6e76657273" - "696f6e3a206661696c6564202d20666c6f61745f746f5f696e74206572726f722020666c6f61742066726f6d205852" - "5020616d6f756e743a206661696c656420202020726573756c745f73697a653a0a24242420746573745f666c6f6174" - "5f66726f6d5f73746e756d626572202424242020666c6f61742066726f6d2053544e756d6265722028313233293a20" - "2053544e756d62657220636f6e76657273696f6e3a20676f6f64202053544e756d62657220636f6e76657273696f6e" - "3a206661696c6564202020206578706563746564203132332c20676f743a202053544e756d62657220636f6e766572" - "73696f6e3a206661696c6564202d20666c6f61745f746f5f696e74206572726f722020666c6f61742066726f6d2053" - "544e756d6265723a206661696c65642020666c6f61742066726f6d2053544e756d626572202831293a202053544e75" - "6d626572283129203d3d20464c4f41545f4f4e453a20676f6f64202053544e756d626572283129203d3d20464c4f41" - "545f4f4e453a206661696c65642020666c6f61742066726f6d2053544e756d6265722831293a206661696c6564004d" - "0970726f64756365727302086c616e6775616765010452757374000c70726f6365737365642d627901057275737463" - "1d312e38392e30202832393438333838336520323032352d30382d303429002c0f7461726765745f66656174757265" - "73022b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; - -extern std::string const kFloat0Hex = - "0061736d0100000001290560057f7f7f7f7f017f60047e7f7f7f017f60077f7f7f7f7f7f7f017f60047f7f7f7f017f" - "6000017f025f0408686f73745f6c6962057472616365000008686f73745f6c69620e666c6f61745f66726f6d5f696e" - "74000108686f73745f6c69620e666c6f61745f7375627472616374000208686f73745f6c69620d666c6f61745f636f" - "6d7061726500030302010405030100110619037f01418080c0000b7f0041e980c0000b7f0041f080c0000b072e0406" - "6d656d6f727902000666696e69736800040a5f5f646174615f656e6403010b5f5f686561705f6261736503020ad201" - "01cf0101027f230041206b22002400418080c000411541014100410010001a200041086a4100360200200042003703" - "00200041186a41003602002000420037031002400240420a2000410c41001001410c4604402000410c2000410c2000" - "41106a2201410c41001002410c470d012001410c419580c000410c100345044041a180c000411a4101410041001000" - "1a0c030b41bb80c000411941014100410010001a0c020b41d480c000411541014100410010001a0c010b41d480c000" - "411541014100410010001a0b200041206a240041010b0b720100418080c0000b690a24242420746573745f666c6f61" - "745f30202424240000000000000000800000002020464c4f41545f5a45524f20636f6d706172653a20676f6f642020" - "464c4f41545f5a45524f20636f6d706172653a206261642020666c6f61742031302d31303a206661696c6564004d09" - "70726f64756365727302086c616e6775616765010452757374000c70726f6365737365642d6279010572757374631d" - "312e38392e30202832393438333838336520323032352d30382d303429002c0f7461726765745f6665617475726573" - "022b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; - -extern std::string const kDisabledFloatHex = - "0061736d010000000108026000006000017f03030200010503010002063e0a7f004180080b7f004180080b7f004180" - "100b7f004180100b7f00418090040b7f004180080b7f00418090040b7f00418080080b7f0041000b7f0041010b07b0" - "010d066d656d6f72790200115f5f7761736d5f63616c6c5f63746f727300000666696e69736800010362756603000c" - "5f5f64736f5f68616e646c6503010a5f5f646174615f656e6403020b5f5f737461636b5f6c6f7703030c5f5f737461" - "636b5f6869676803040d5f5f676c6f62616c5f6261736503050b5f5f686561705f6261736503060a5f5f686561705f" - "656e6403070d5f5f6d656d6f72795f6261736503080c5f5f7461626c655f6261736503090a150202000b1000430000" - "00c54300200045921a41010b"; - -extern std::string const kMemoryPointerAtLimitHex = - "0061736d010000000105016000017f030201000503010001070a010666696e69736800000a0e010c0041ffff032d00" - "001a41010b"; - -extern std::string const kMemoryPointerOverLimitHex = - "0061736d010000000105016000017f030201000503010001070a010666696e69736800000a0e010c00418080042d00" - "001a41010b"; - -extern std::string const kMemoryOffsetOverLimitHex = - "0061736d010000000105016000017f030201000503010001071302066d656d6f727902000666696e69736800000a0e" - "010c00410028028080041a41010b"; - -extern std::string const kMemoryEndOfWordOverLimitHex = - "0061736d010000000105016000017f030201000503010001071302066d656d6f727902000666696e69736800000a0e" - "010c0041feff032802001a41010b"; - -extern std::string const kMemoryGrow0To1PageHex = - "0061736d010000000105016000017f030201000503010000071302066d656d6f727902000666696e69736800000a0b" - "010900410140001a41010b"; - -extern std::string const kMemoryGrow1To0PageHex = - "0061736d010000000105016000017f030201000503010001071302066d656d6f727902000666696e69736800000a13" - "011100417f4000417f460440417f0f0b41010b"; - -extern std::string const kMemoryLastByteOf8MbHex = - "0061736d010000000105016000017f030201000506010180018001071302066d656d6f727902000666696e69736800" - "000a0f010d0041ffffff032d00001a41010b"; - -extern std::string const kMemoryGrow1MoreThan8MbHex = - "0061736d010000000105016000017f03020100050401008001071302066d656d6f727902000666696e69736800000a" - "1301110041014000417f460440417f0f0b41010b"; - -extern std::string const kMemoryGrow0MoreThan8MbHex = - "0061736d010000000105016000017f03020100050401008001071302066d656d6f727902000666696e69736800000a" - "1301110041004000417f460440417f0f0b41010b"; - -extern std::string const kMemoryInit1MoreThan8MbHex = - "0061736d010000000105016000017f030201000506010181018101071302066d656d6f727902000666696e69736800" - "000a0f010d0041ffffff032d00001a41010b"; - -extern std::string const kMemoryNegativeAddressHex = - "0061736d010000000105016000017f030201000506010180018001071302066d656d6f727902000666696e69736800" - "000a0c010a00417f2d00001a41010b"; - -extern std::string const kTable64ElementsHex = - "0061736d010000000108026000006000017f0303020001040401700040070a010666696e6973680001094601004100" - "0b40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "000000000000000000000000000000000000000a090202000b040041010b"; - -extern std::string const kTable65ElementsHex = - "0061736d010000000108026000006000017f0303020001040401700041070a010666696e6973680001094701004100" - "0b41000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - "00000000000000000000000000000000000000000a090202000b040041010b"; - -extern std::string const kTable2TablesHex = - "0061736d010000000108026000006000017f03030200010409027001010170010101070a010666696e697368000109" - "0f020041000b0100020141000b0001000a090202000b040041010b"; - -extern std::string const kTable0ElementsHex = - "0061736d010000000105016000017f03020100040401700000070a010666696e69736800000a0601040041010b"; - -extern std::string const kTableUintMaxHex = - "0061736d010000000105016000017f030201000408017000ffffffff0f070a010666696e69736800000a0601040041" - "010b"; - -extern std::string const kProposalMutableGlobalHex = - "0061736d010000000105016000017f030201000606017f0141000b07140207636f756e74657203000666696e697368" - "00000a0d010b00230041016a240041010b"; - -extern std::string const kProposalGcStructNewHex = - "0061736d01000000010b026000017f5f027f017f0103020100070a010666696e69736800000a0a010800fb01011a41" - "010b"; - -extern std::string const kProposalMultiValueHex = - "0061736d010000000110036000027f7f6000017f60027f7f017f0303020001070a010666696e69736800010a140206" - "00410a41140b0b00100002026a411e460b0b"; - -extern std::string const kProposalSignExtHex = - "0061736d010000000105016000017f03020100070a010666696e69736800000a0b01090041ff01c0417f460b"; - -extern std::string const kProposalFloatToIntHex = - "0061736d010000000105016000017f03020100070a010666696e69736800000a1201100043f9021550fc0041ffffff" - "ff07460b"; - -extern std::string const kProposalBulkMemoryHex = - "0061736d010000000105016000017f030201000503010001071302066d656d6f727902000666696e69736800000a1f" - "011d004100412a3a000041e40041004101fc0a000041e4002d0000412a460b"; - -extern std::string const kProposalRefTypesHex = - "0061736d010000000105016000017f020f0103656e76057461626c65016f000103020100070a010666696e69736800" - "000a0c010a004100d06f260041010b"; - -extern std::string const kProposalTailCallHex = - "0061736d010000000105016000017f0303020000070a010666696e69736800010a0b02040041010b040012000b"; - -extern std::string const kProposalExtendedConstHex = - "0061736d010000000105016000017f030201000609017f00410a41206a0b070a010666696e69736800000a09010700" - "2300412a460b"; - -extern std::string const kProposalMultiMemoryHex = - "0061736d010000000105016000017f0302010005050200000001070a010666696e69736800000a060104003f010b"; - -extern std::string const kProposalCustomPageSizesHex = - "0061736d010000000105016000017f0302010005040108010a070a010666696e69736800000a0601040041010b0010" - "046e616d65010901000666696e697368"; - -extern std::string const kProposalMemory64Hex = - "0061736d010000000105016000017f030201000503010401070a010666696e69736800000a10010e004200412a3a00" - "003f004201510b0010046e616d65010901000666696e697368"; - -extern std::string const kProposalWideArithmeticHex = - "0061736d010000000105016000017f03020100070a010666696e69736800000a0e010c0042014202fc161a1a41010b" - "0010046e616d65010901000666696e697368"; - -extern std::string const kTrapDivideBy0Hex = - "0061736d010000000105016000017f03020100070a010666696e69736800000a0c010a00412a41006d1a41010b"; - -extern std::string const kTrapIntOverflowHex = - "0061736d010000000105016000017f03020100070a010666696e69736800000a0d010b00418080808078417f6d0b"; - -extern std::string const kTrapUnreachableHex = - "0061736d010000000105016000017f03020100070a010666696e69736800000a070105000041010b"; - -extern std::string const kTrapNullCallHex = - "0061736d010000000105016000017f03020100040401700001070a010666696e69736800000a090107004100110000" - "0b"; - -extern std::string const kTrapFuncSigMismatchHex = - "0061736d010000000108026000006000017f0303020001040401700001070a010666696e6973680001090701004100" - "0b01000a0d020300010b070041001101000b"; - -extern std::string const kWasiGetTimeHex = - "0061736d01000000010c0260037f7e7f017f6000017f02290116776173695f736e617073686f745f70726576696577" - "310e636c6f636b5f74696d655f6765740000030201010503010001071302066d656d6f727902000666696e69736800" - "010a16011400410042e8074100100045047f410105417f0b0b"; - -extern std::string const kWasiPrintHex = - "0061736d01000000010d0260047f7f7f7f017f6000017f02230116776173695f736e617073686f745f707265766965" - "77310866645f77726974650000030201010503010001071302066d656d6f727902000666696e69736800010a1d011b" - "01017f411821004101410041012000100045047f410105417f0b0b0b1e030041100b0648656c6c6f0a0041000b0410" - "0000000041040b0406000000"; - -// The following several wasm hex strings are for testing wasm section -// corruption cases. They are illegal hence do not have corresponding -// rust or wat sources. -// Wasm code magic number is "0061736d", and the only valid version is 1. - -extern std::string const kBadMagicNumberHex = "1061736d01000000"; -extern std::string const kBadVersionNumberHex = "0061736d02000000"; - -// Corruption Test: lyingHeader -// Scenario: A section declares it is 2GB long, but the file ends immediately. -// Attack: Buffer pre-allocation DoS (OOM). -// # Magic (00 61 73 6d) + Version (01 00 00 00) -// data = b'\x00\x61\x73\x6d\x01\x00\x00\x00' -// # Type Section (ID 1) -// # Size: LEB128 encoded 2GB (0x80 0x80 0x80 0x80 0x08) -// data += b'\x01\x80\x80\x80\x80\x08' -extern std::string const kLyingHeaderHex = "0061736d01000000018080808008"; - -// Corruption Test: neverEndingNumber -// Scenario: An LEB128 integer that never has a stop bit (byte < 0x80). -// Attack: Infinite loop in parser or read out of bounds. -// data = b'\x00\x61\x73\x6d\x01\x00\x00\x00' -// # Type Section (ID 1), Size 5 -// data += b'\x01\x05' -// # Vector count: Infinite stream of 0x80 (100 bytes) -// data += b'\x80' * 100 -extern std::string const kNeverEndingNumberHex = - "0061736d01000000010580808080808080808080808080808080808080808080808080808080808080808080808080" - "8080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080" - "80808080808080808080808080808080"; - -// Corruption Test: vectorLie -// Scenario: A vector declares it has 4 billion items, but provides none. -// Attack: Vector pre-allocation DoS (OOM). -// data = b'\x00\x61\x73\x6d\x01\x00\x00\x00' -// # Type Section (ID 1) -// # Size 5 (just enough for the count bytes) -// data += b'\x01\x05' -// # Vector Count: 0xFF 0xFF 0xFF 0xFF 0x0F (4,294,967,295 items) -// data += b'\xff\xff\xff\xff\x0f' -// # No actual items follow... -extern std::string const kVectorLieHex = "0061736d010000000105ffffffff0f"; - -// Corruption Test: sectionOrdering -// Scenario: Sections appear out of order -// (Code section before Function section). -// Attack: Parser state confusion / potential null pointer deref. -// data = b'\x00\x61\x73\x6d\x01\x00\x00\x00' -// # Code Section (ID 10) - usually last -// # Size 2, Count 0 -// data += b'\x0a\x02\x00\x0b' -// # Function Section (ID 3) - usually 3rd -// data += b'\x03\x02\x00\x00' -extern std::string const kSectionOrderingHex = "0061736d010000000a02000b03020000"; - -// Corruption Test: ghostPayload -// Scenario: Valid headers, but file is truncated in the middle of a payload. -// Attack: Read out of bounds panic. -// data = b'\x00\x61\x73\x6d\x01\x00\x00\x00' -// # Type Section (ID 1), Size 10 -// data += b'\x01\x0a' -// # Content: Count 1 -// data += b'\x01' -// # Start of a type definition (0x60 = func) -// data += b'\x60' -// # File ends abruptly here (missing params/results) -extern std::string const kGhostPayloadHex = "0061736d01000000010a0160"; - -// Corruption Test: junkAfterSection -// Scenario: Section declares size X, but logical content finishes at X-5. -// Attack: Validation bypass if parser stops early, -// or panic if strict check missing. -// data = b'\x00\x61\x73\x6d\x01\x00\x00\x00' -// # Type Section (ID 1), Size 10 bytes -// data += b'\x01\x0a' -// # Real content: Count 1, (func -> void) = 4 bytes -// # \x01 (count) \x60 (func) \x00 (0 params) \x00 (0 results) -// data += b'\x01\x60\x00\x00' -// # Remaining 6 bytes are junk padding within the section size -// data += b'\x00' * 6 -extern std::string const kJunkAfterSectionHex = "0061736d01000000010a01600000000000000000"; - -// Corruption Test: invalidSectionId -// Scenario: A section ID that doesn't exist (0xFF). -// Attack: Default case handling / unhandled enum variant. -// data = b'\x00\x61\x73\x6d\x01\x00\x00\x00' -// # Section ID 0xFF, Size 1 -// data += b'\xff\x01\x00' -extern std::string const kInvalidSectionIdHex = "0061736d01000000ff0100"; - -// Corruption Test: localVariableBomb -// Scenario: A function declares 4 billion local variables. -// Attack: Stack Overflow / OOM during function init (memset). -// data = b'\x00\x61\x73\x6d\x01\x00\x00\x00' -// # 1. Type Section: (func) -> () -// data += b'\x01\x04\x01\x60\x00\x00' -// # 3. Function Section: 1 function of type 0 -// data += b'\x03\x02\x01\x00' -// # 10. Code Section -// # ID 10, Size 15 (estimated), Count 1 -// data += b'\x0a\x0f\x01' -// # Function Body Size: 13 bytes -// data += b'\x0d' -// # Local Declarations Count: 1 entry -// data += b'\x01' -// # The Bomb: 4,294,967,295 locals of type i32 -// # Count: 0xFF 0xFF 0xFF 0xFF 0x0F -// # Type: 0x7F (i32) -// data += b'\xff\xff\xff\xff\x0f\x7f' -// # Instruction: end (0x0b) -// data += b'\x0b' -extern std::string const kLocalVariableBombHex = - "0061736d01000000010401600000030201000a0f010d01ffffffff0f7f0b"; - -extern std::string const kInfiniteLoopWasmHex = - "0061736d010000000108026000006000017f030302000105030100020638097f004180080b7f004180080b7f004180" - "080b7f00418088040b7f004180080b7f00418088040b7f00418080080b7f0041000b7f0041010b07a8010c066d656d" - "6f72790200115f5f7761736d5f63616c6c5f63746f72730000046c6f6f7000010c5f5f64736f5f68616e646c650300" - "0a5f5f646174615f656e6403010b5f5f737461636b5f6c6f7703020c5f5f737461636b5f6869676803030d5f5f676c" - "6f62616c5f6261736503040b5f5f686561705f6261736503050a5f5f686561705f656e6403060d5f5f6d656d6f7279" - "5f6261736503070c5f5f7461626c655f6261736503080a270202000b220041fc87044100360200034041fc870441fc" - "870428020041016a3602000c000b000b007f0970726f647563657273010c70726f6365737365642d62790105636c61" - "6e675f31392e312e352d776173692d73646b202868747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c76" - "6d2d70726f6a6563742061623462356132646235383239353861663165653330386137393063666462343262643234" - "3732302900490f7461726765745f6665617475726573042b0f6d757461626c652d676c6f62616c732b087369676e2d" - "6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; - -extern std::string const kStartLoopHex = - "0061736d010000000108026000006000017f030302000107120205737461727400000666696e69736800010801000a" - "0e02070003400c000b0b040041010b"; - extern std::string const kBadAlignWasmHex = "0061736d01000000011b046000017f60057f7f7f7f7f017f60067f7f7f7f7f7f017f600000022a0203656e760f666c" "6f61745f66726f6d5f75696e74000103656e760c636865636b5f6b65796c6574000203050403000000050301000306" @@ -1325,247 +837,3 @@ extern std::string const kBadAlignWasmHex = "6462353832393538616631656533303861373930636664623432626432343732302900490f7461726765745f666561" "7475726573042b0f6d757461626c652d676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d7479" "7065732b0a6d756c746976616c7565"; - -extern std::string const kThousandParamsHex = - "0061736d0100000001f1070260000060e8077f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f017f030302000105030100020638097f" - "004180080b7f004180080b7f004180080b7f00418088040b7f004180080b7f00418088040b7f00418080080b7f0041" - "000b7f0041010b07a8010c066d656d6f72790200115f5f7761736d5f63616c6c5f63746f7273000004746573740001" - "0c5f5f64736f5f68616e646c6503000a5f5f646174615f656e6403010b5f5f737461636b5f6c6f7703020c5f5f7374" - "61636b5f6869676803030d5f5f676c6f62616c5f6261736503040b5f5f686561705f6261736503050a5f5f68656170" - "5f656e6403060d5f5f6d656d6f72795f6261736503070c5f5f7461626c655f6261736503080aa71e0202000ba11e00" - "200020016a20026a20036a20046a20056a20066a20076a20086a20096a200a6a200b6a200c6a200d6a200e6a200f6a" - "20106a20116a20126a20136a20146a20156a20166a20176a20186a20196a201a6a201b6a201c6a201d6a201e6a201f" - "6a20206a20216a20226a20236a20246a20256a20266a20276a20286a20296a202a6a202b6a202c6a202d6a202e6a20" - "2f6a20306a20316a20326a20336a20346a20356a20366a20376a20386a20396a203a6a203b6a203c6a203d6a203e6a" - "203f6a20406a20416a20426a20436a20446a20456a20466a20476a20486a20496a204a6a204b6a204c6a204d6a204e" - "6a204f6a20506a20516a20526a20536a20546a20556a20566a20576a20586a20596a205a6a205b6a205c6a205d6a20" - "5e6a205f6a20606a20616a20626a20636a20646a20656a20666a20676a20686a20696a206a6a206b6a206c6a206d6a" - "206e6a206f6a20706a20716a20726a20736a20746a20756a20766a20776a20786a20796a207a6a207b6a207c6a207d" - "6a207e6a207f6a2080016a2081016a2082016a2083016a2084016a2085016a2086016a2087016a2088016a2089016a" - "208a016a208b016a208c016a208d016a208e016a208f016a2090016a2091016a2092016a2093016a2094016a209501" - "6a2096016a2097016a2098016a2099016a209a016a209b016a209c016a209d016a209e016a209f016a20a0016a20a1" - "016a20a2016a20a3016a20a4016a20a5016a20a6016a20a7016a20a8016a20a9016a20aa016a20ab016a20ac016a20" - "ad016a20ae016a20af016a20b0016a20b1016a20b2016a20b3016a20b4016a20b5016a20b6016a20b7016a20b8016a" - "20b9016a20ba016a20bb016a20bc016a20bd016a20be016a20bf016a20c0016a20c1016a20c2016a20c3016a20c401" - "6a20c5016a20c6016a20c7016a20c8016a20c9016a20ca016a20cb016a20cc016a20cd016a20ce016a20cf016a20d0" - "016a20d1016a20d2016a20d3016a20d4016a20d5016a20d6016a20d7016a20d8016a20d9016a20da016a20db016a20" - "dc016a20dd016a20de016a20df016a20e0016a20e1016a20e2016a20e3016a20e4016a20e5016a20e6016a20e7016a" - "20e8016a20e9016a20ea016a20eb016a20ec016a20ed016a20ee016a20ef016a20f0016a20f1016a20f2016a20f301" - "6a20f4016a20f5016a20f6016a20f7016a20f8016a20f9016a20fa016a20fb016a20fc016a20fd016a20fe016a20ff" - "016a2080026a2081026a2082026a2083026a2084026a2085026a2086026a2087026a2088026a2089026a208a026a20" - "8b026a208c026a208d026a208e026a208f026a2090026a2091026a2092026a2093026a2094026a2095026a2096026a" - "2097026a2098026a2099026a209a026a209b026a209c026a209d026a209e026a209f026a20a0026a20a1026a20a202" - "6a20a3026a20a4026a20a5026a20a6026a20a7026a20a8026a20a9026a20aa026a20ab026a20ac026a20ad026a20ae" - "026a20af026a20b0026a20b1026a20b2026a20b3026a20b4026a20b5026a20b6026a20b7026a20b8026a20b9026a20" - "ba026a20bb026a20bc026a20bd026a20be026a20bf026a20c0026a20c1026a20c2026a20c3026a20c4026a20c5026a" - "20c6026a20c7026a20c8026a20c9026a20ca026a20cb026a20cc026a20cd026a20ce026a20cf026a20d0026a20d102" - "6a20d2026a20d3026a20d4026a20d5026a20d6026a20d7026a20d8026a20d9026a20da026a20db026a20dc026a20dd" - "026a20de026a20df026a20e0026a20e1026a20e2026a20e3026a20e4026a20e5026a20e6026a20e7026a20e8026a20" - "e9026a20ea026a20eb026a20ec026a20ed026a20ee026a20ef026a20f0026a20f1026a20f2026a20f3026a20f4026a" - "20f5026a20f6026a20f7026a20f8026a20f9026a20fa026a20fb026a20fc026a20fd026a20fe026a20ff026a208003" - "6a2081036a2082036a2083036a2084036a2085036a2086036a2087036a2088036a2089036a208a036a208b036a208c" - "036a208d036a208e036a208f036a2090036a2091036a2092036a2093036a2094036a2095036a2096036a2097036a20" - "98036a2099036a209a036a209b036a209c036a209d036a209e036a209f036a20a0036a20a1036a20a2036a20a3036a" - "20a4036a20a5036a20a6036a20a7036a20a8036a20a9036a20aa036a20ab036a20ac036a20ad036a20ae036a20af03" - "6a20b0036a20b1036a20b2036a20b3036a20b4036a20b5036a20b6036a20b7036a20b8036a20b9036a20ba036a20bb" - "036a20bc036a20bd036a20be036a20bf036a20c0036a20c1036a20c2036a20c3036a20c4036a20c5036a20c6036a20" - "c7036a20c8036a20c9036a20ca036a20cb036a20cc036a20cd036a20ce036a20cf036a20d0036a20d1036a20d2036a" - "20d3036a20d4036a20d5036a20d6036a20d7036a20d8036a20d9036a20da036a20db036a20dc036a20dd036a20de03" - "6a20df036a20e0036a20e1036a20e2036a20e3036a20e4036a20e5036a20e6036a20e7036a20e8036a20e9036a20ea" - "036a20eb036a20ec036a20ed036a20ee036a20ef036a20f0036a20f1036a20f2036a20f3036a20f4036a20f5036a20" - "f6036a20f7036a20f8036a20f9036a20fa036a20fb036a20fc036a20fd036a20fe036a20ff036a2080046a2081046a" - "2082046a2083046a2084046a2085046a2086046a2087046a2088046a2089046a208a046a208b046a208c046a208d04" - "6a208e046a208f046a2090046a2091046a2092046a2093046a2094046a2095046a2096046a2097046a2098046a2099" - "046a209a046a209b046a209c046a209d046a209e046a209f046a20a0046a20a1046a20a2046a20a3046a20a4046a20" - "a5046a20a6046a20a7046a20a8046a20a9046a20aa046a20ab046a20ac046a20ad046a20ae046a20af046a20b0046a" - "20b1046a20b2046a20b3046a20b4046a20b5046a20b6046a20b7046a20b8046a20b9046a20ba046a20bb046a20bc04" - "6a20bd046a20be046a20bf046a20c0046a20c1046a20c2046a20c3046a20c4046a20c5046a20c6046a20c7046a20c8" - "046a20c9046a20ca046a20cb046a20cc046a20cd046a20ce046a20cf046a20d0046a20d1046a20d2046a20d3046a20" - "d4046a20d5046a20d6046a20d7046a20d8046a20d9046a20da046a20db046a20dc046a20dd046a20de046a20df046a" - "20e0046a20e1046a20e2046a20e3046a20e4046a20e5046a20e6046a20e7046a20e8046a20e9046a20ea046a20eb04" - "6a20ec046a20ed046a20ee046a20ef046a20f0046a20f1046a20f2046a20f3046a20f4046a20f5046a20f6046a20f7" - "046a20f8046a20f9046a20fa046a20fb046a20fc046a20fd046a20fe046a20ff046a2080056a2081056a2082056a20" - "83056a2084056a2085056a2086056a2087056a2088056a2089056a208a056a208b056a208c056a208d056a208e056a" - "208f056a2090056a2091056a2092056a2093056a2094056a2095056a2096056a2097056a2098056a2099056a209a05" - "6a209b056a209c056a209d056a209e056a209f056a20a0056a20a1056a20a2056a20a3056a20a4056a20a5056a20a6" - "056a20a7056a20a8056a20a9056a20aa056a20ab056a20ac056a20ad056a20ae056a20af056a20b0056a20b1056a20" - "b2056a20b3056a20b4056a20b5056a20b6056a20b7056a20b8056a20b9056a20ba056a20bb056a20bc056a20bd056a" - "20be056a20bf056a20c0056a20c1056a20c2056a20c3056a20c4056a20c5056a20c6056a20c7056a20c8056a20c905" - "6a20ca056a20cb056a20cc056a20cd056a20ce056a20cf056a20d0056a20d1056a20d2056a20d3056a20d4056a20d5" - "056a20d6056a20d7056a20d8056a20d9056a20da056a20db056a20dc056a20dd056a20de056a20df056a20e0056a20" - "e1056a20e2056a20e3056a20e4056a20e5056a20e6056a20e7056a20e8056a20e9056a20ea056a20eb056a20ec056a" - "20ed056a20ee056a20ef056a20f0056a20f1056a20f2056a20f3056a20f4056a20f5056a20f6056a20f7056a20f805" - "6a20f9056a20fa056a20fb056a20fc056a20fd056a20fe056a20ff056a2080066a2081066a2082066a2083066a2084" - "066a2085066a2086066a2087066a2088066a2089066a208a066a208b066a208c066a208d066a208e066a208f066a20" - "90066a2091066a2092066a2093066a2094066a2095066a2096066a2097066a2098066a2099066a209a066a209b066a" - "209c066a209d066a209e066a209f066a20a0066a20a1066a20a2066a20a3066a20a4066a20a5066a20a6066a20a706" - "6a20a8066a20a9066a20aa066a20ab066a20ac066a20ad066a20ae066a20af066a20b0066a20b1066a20b2066a20b3" - "066a20b4066a20b5066a20b6066a20b7066a20b8066a20b9066a20ba066a20bb066a20bc066a20bd066a20be066a20" - "bf066a20c0066a20c1066a20c2066a20c3066a20c4066a20c5066a20c6066a20c7066a20c8066a20c9066a20ca066a" - "20cb066a20cc066a20cd066a20ce066a20cf066a20d0066a20d1066a20d2066a20d3066a20d4066a20d5066a20d606" - "6a20d7066a20d8066a20d9066a20da066a20db066a20dc066a20dd066a20de066a20df066a20e0066a20e1066a20e2" - "066a20e3066a20e4066a20e5066a20e6066a20e7066a20e8066a20e9066a20ea066a20eb066a20ec066a20ed066a20" - "ee066a20ef066a20f0066a20f1066a20f2066a20f3066a20f4066a20f5066a20f6066a20f7066a20f8066a20f9066a" - "20fa066a20fb066a20fc066a20fd066a20fe066a20ff066a2080076a2081076a2082076a2083076a2084076a208507" - "6a2086076a2087076a2088076a2089076a208a076a208b076a208c076a208d076a208e076a208f076a2090076a2091" - "076a2092076a2093076a2094076a2095076a2096076a2097076a2098076a2099076a209a076a209b076a209c076a20" - "9d076a209e076a209f076a20a0076a20a1076a20a2076a20a3076a20a4076a20a5076a20a6076a20a7076a20a8076a" - "20a9076a20aa076a20ab076a20ac076a20ad076a20ae076a20af076a20b0076a20b1076a20b2076a20b3076a20b407" - "6a20b5076a20b6076a20b7076a20b8076a20b9076a20ba076a20bb076a20bc076a20bd076a20be076a20bf076a20c0" - "076a20c1076a20c2076a20c3076a20c4076a20c5076a20c6076a20c7076a20c8076a20c9076a20ca076a20cb076a20" - "cc076a20cd076a20ce076a20cf076a20d0076a20d1076a20d2076a20d3076a20d4076a20d5076a20d6076a20d7076a" - "20d8076a20d9076a20da076a20db076a20dc076a20dd076a20de076a20df076a20e0076a20e1076a20e2076a20e307" - "6a20e4076a20e5076a20e6076a20e7076a0b007f0970726f647563657273010c70726f6365737365642d6279010563" - "6c616e675f31392e312e352d776173692d73646b202868747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c" - "6c766d2d70726f6a656374206162346235613264623538323935386166316565333038613739306366646234326264" - "32343732302900490f7461726765745f6665617475726573042b0f6d757461626c652d676c6f62616c732b08736967" - "6e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; - -extern std::string const kThousand1ParamsHex = - "0061736d0100000001f2070260000060e9077f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f" - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f017f03030200010503010002063809" - "7f004180080b7f004180080b7f004180080b7f00418088040b7f004180080b7f00418088040b7f00418080080b7f00" - "41000b7f0041010b07a8010c066d656d6f72790200115f5f7761736d5f63616c6c5f63746f72730000047465737400" - "010c5f5f64736f5f68616e646c6503000a5f5f646174615f656e6403010b5f5f737461636b5f6c6f7703020c5f5f73" - "7461636b5f6869676803030d5f5f676c6f62616c5f6261736503040b5f5f686561705f6261736503050a5f5f686561" - "705f656e6403060d5f5f6d656d6f72795f6261736503070c5f5f7461626c655f6261736503080aab1e0202000ba51e" - "00200020016a20026a20036a20046a20056a20066a20076a20086a20096a200a6a200b6a200c6a200d6a200e6a200f" - "6a20106a20116a20126a20136a20146a20156a20166a20176a20186a20196a201a6a201b6a201c6a201d6a201e6a20" - "1f6a20206a20216a20226a20236a20246a20256a20266a20276a20286a20296a202a6a202b6a202c6a202d6a202e6a" - "202f6a20306a20316a20326a20336a20346a20356a20366a20376a20386a20396a203a6a203b6a203c6a203d6a203e" - "6a203f6a20406a20416a20426a20436a20446a20456a20466a20476a20486a20496a204a6a204b6a204c6a204d6a20" - "4e6a204f6a20506a20516a20526a20536a20546a20556a20566a20576a20586a20596a205a6a205b6a205c6a205d6a" - "205e6a205f6a20606a20616a20626a20636a20646a20656a20666a20676a20686a20696a206a6a206b6a206c6a206d" - "6a206e6a206f6a20706a20716a20726a20736a20746a20756a20766a20776a20786a20796a207a6a207b6a207c6a20" - "7d6a207e6a207f6a2080016a2081016a2082016a2083016a2084016a2085016a2086016a2087016a2088016a208901" - "6a208a016a208b016a208c016a208d016a208e016a208f016a2090016a2091016a2092016a2093016a2094016a2095" - "016a2096016a2097016a2098016a2099016a209a016a209b016a209c016a209d016a209e016a209f016a20a0016a20" - "a1016a20a2016a20a3016a20a4016a20a5016a20a6016a20a7016a20a8016a20a9016a20aa016a20ab016a20ac016a" - "20ad016a20ae016a20af016a20b0016a20b1016a20b2016a20b3016a20b4016a20b5016a20b6016a20b7016a20b801" - "6a20b9016a20ba016a20bb016a20bc016a20bd016a20be016a20bf016a20c0016a20c1016a20c2016a20c3016a20c4" - "016a20c5016a20c6016a20c7016a20c8016a20c9016a20ca016a20cb016a20cc016a20cd016a20ce016a20cf016a20" - "d0016a20d1016a20d2016a20d3016a20d4016a20d5016a20d6016a20d7016a20d8016a20d9016a20da016a20db016a" - "20dc016a20dd016a20de016a20df016a20e0016a20e1016a20e2016a20e3016a20e4016a20e5016a20e6016a20e701" - "6a20e8016a20e9016a20ea016a20eb016a20ec016a20ed016a20ee016a20ef016a20f0016a20f1016a20f2016a20f3" - "016a20f4016a20f5016a20f6016a20f7016a20f8016a20f9016a20fa016a20fb016a20fc016a20fd016a20fe016a20" - "ff016a2080026a2081026a2082026a2083026a2084026a2085026a2086026a2087026a2088026a2089026a208a026a" - "208b026a208c026a208d026a208e026a208f026a2090026a2091026a2092026a2093026a2094026a2095026a209602" - "6a2097026a2098026a2099026a209a026a209b026a209c026a209d026a209e026a209f026a20a0026a20a1026a20a2" - "026a20a3026a20a4026a20a5026a20a6026a20a7026a20a8026a20a9026a20aa026a20ab026a20ac026a20ad026a20" - "ae026a20af026a20b0026a20b1026a20b2026a20b3026a20b4026a20b5026a20b6026a20b7026a20b8026a20b9026a" - "20ba026a20bb026a20bc026a20bd026a20be026a20bf026a20c0026a20c1026a20c2026a20c3026a20c4026a20c502" - "6a20c6026a20c7026a20c8026a20c9026a20ca026a20cb026a20cc026a20cd026a20ce026a20cf026a20d0026a20d1" - "026a20d2026a20d3026a20d4026a20d5026a20d6026a20d7026a20d8026a20d9026a20da026a20db026a20dc026a20" - "dd026a20de026a20df026a20e0026a20e1026a20e2026a20e3026a20e4026a20e5026a20e6026a20e7026a20e8026a" - "20e9026a20ea026a20eb026a20ec026a20ed026a20ee026a20ef026a20f0026a20f1026a20f2026a20f3026a20f402" - "6a20f5026a20f6026a20f7026a20f8026a20f9026a20fa026a20fb026a20fc026a20fd026a20fe026a20ff026a2080" - "036a2081036a2082036a2083036a2084036a2085036a2086036a2087036a2088036a2089036a208a036a208b036a20" - "8c036a208d036a208e036a208f036a2090036a2091036a2092036a2093036a2094036a2095036a2096036a2097036a" - "2098036a2099036a209a036a209b036a209c036a209d036a209e036a209f036a20a0036a20a1036a20a2036a20a303" - "6a20a4036a20a5036a20a6036a20a7036a20a8036a20a9036a20aa036a20ab036a20ac036a20ad036a20ae036a20af" - "036a20b0036a20b1036a20b2036a20b3036a20b4036a20b5036a20b6036a20b7036a20b8036a20b9036a20ba036a20" - "bb036a20bc036a20bd036a20be036a20bf036a20c0036a20c1036a20c2036a20c3036a20c4036a20c5036a20c6036a" - "20c7036a20c8036a20c9036a20ca036a20cb036a20cc036a20cd036a20ce036a20cf036a20d0036a20d1036a20d203" - "6a20d3036a20d4036a20d5036a20d6036a20d7036a20d8036a20d9036a20da036a20db036a20dc036a20dd036a20de" - "036a20df036a20e0036a20e1036a20e2036a20e3036a20e4036a20e5036a20e6036a20e7036a20e8036a20e9036a20" - "ea036a20eb036a20ec036a20ed036a20ee036a20ef036a20f0036a20f1036a20f2036a20f3036a20f4036a20f5036a" - "20f6036a20f7036a20f8036a20f9036a20fa036a20fb036a20fc036a20fd036a20fe036a20ff036a2080046a208104" - "6a2082046a2083046a2084046a2085046a2086046a2087046a2088046a2089046a208a046a208b046a208c046a208d" - "046a208e046a208f046a2090046a2091046a2092046a2093046a2094046a2095046a2096046a2097046a2098046a20" - "99046a209a046a209b046a209c046a209d046a209e046a209f046a20a0046a20a1046a20a2046a20a3046a20a4046a" - "20a5046a20a6046a20a7046a20a8046a20a9046a20aa046a20ab046a20ac046a20ad046a20ae046a20af046a20b004" - "6a20b1046a20b2046a20b3046a20b4046a20b5046a20b6046a20b7046a20b8046a20b9046a20ba046a20bb046a20bc" - "046a20bd046a20be046a20bf046a20c0046a20c1046a20c2046a20c3046a20c4046a20c5046a20c6046a20c7046a20" - "c8046a20c9046a20ca046a20cb046a20cc046a20cd046a20ce046a20cf046a20d0046a20d1046a20d2046a20d3046a" - "20d4046a20d5046a20d6046a20d7046a20d8046a20d9046a20da046a20db046a20dc046a20dd046a20de046a20df04" - "6a20e0046a20e1046a20e2046a20e3046a20e4046a20e5046a20e6046a20e7046a20e8046a20e9046a20ea046a20eb" - "046a20ec046a20ed046a20ee046a20ef046a20f0046a20f1046a20f2046a20f3046a20f4046a20f5046a20f6046a20" - "f7046a20f8046a20f9046a20fa046a20fb046a20fc046a20fd046a20fe046a20ff046a2080056a2081056a2082056a" - "2083056a2084056a2085056a2086056a2087056a2088056a2089056a208a056a208b056a208c056a208d056a208e05" - "6a208f056a2090056a2091056a2092056a2093056a2094056a2095056a2096056a2097056a2098056a2099056a209a" - "056a209b056a209c056a209d056a209e056a209f056a20a0056a20a1056a20a2056a20a3056a20a4056a20a5056a20" - "a6056a20a7056a20a8056a20a9056a20aa056a20ab056a20ac056a20ad056a20ae056a20af056a20b0056a20b1056a" - "20b2056a20b3056a20b4056a20b5056a20b6056a20b7056a20b8056a20b9056a20ba056a20bb056a20bc056a20bd05" - "6a20be056a20bf056a20c0056a20c1056a20c2056a20c3056a20c4056a20c5056a20c6056a20c7056a20c8056a20c9" - "056a20ca056a20cb056a20cc056a20cd056a20ce056a20cf056a20d0056a20d1056a20d2056a20d3056a20d4056a20" - "d5056a20d6056a20d7056a20d8056a20d9056a20da056a20db056a20dc056a20dd056a20de056a20df056a20e0056a" - "20e1056a20e2056a20e3056a20e4056a20e5056a20e6056a20e7056a20e8056a20e9056a20ea056a20eb056a20ec05" - "6a20ed056a20ee056a20ef056a20f0056a20f1056a20f2056a20f3056a20f4056a20f5056a20f6056a20f7056a20f8" - "056a20f9056a20fa056a20fb056a20fc056a20fd056a20fe056a20ff056a2080066a2081066a2082066a2083066a20" - "84066a2085066a2086066a2087066a2088066a2089066a208a066a208b066a208c066a208d066a208e066a208f066a" - "2090066a2091066a2092066a2093066a2094066a2095066a2096066a2097066a2098066a2099066a209a066a209b06" - "6a209c066a209d066a209e066a209f066a20a0066a20a1066a20a2066a20a3066a20a4066a20a5066a20a6066a20a7" - "066a20a8066a20a9066a20aa066a20ab066a20ac066a20ad066a20ae066a20af066a20b0066a20b1066a20b2066a20" - "b3066a20b4066a20b5066a20b6066a20b7066a20b8066a20b9066a20ba066a20bb066a20bc066a20bd066a20be066a" - "20bf066a20c0066a20c1066a20c2066a20c3066a20c4066a20c5066a20c6066a20c7066a20c8066a20c9066a20ca06" - "6a20cb066a20cc066a20cd066a20ce066a20cf066a20d0066a20d1066a20d2066a20d3066a20d4066a20d5066a20d6" - "066a20d7066a20d8066a20d9066a20da066a20db066a20dc066a20dd066a20de066a20df066a20e0066a20e1066a20" - "e2066a20e3066a20e4066a20e5066a20e6066a20e7066a20e8066a20e9066a20ea066a20eb066a20ec066a20ed066a" - "20ee066a20ef066a20f0066a20f1066a20f2066a20f3066a20f4066a20f5066a20f6066a20f7066a20f8066a20f906" - "6a20fa066a20fb066a20fc066a20fd066a20fe066a20ff066a2080076a2081076a2082076a2083076a2084076a2085" - "076a2086076a2087076a2088076a2089076a208a076a208b076a208c076a208d076a208e076a208f076a2090076a20" - "91076a2092076a2093076a2094076a2095076a2096076a2097076a2098076a2099076a209a076a209b076a209c076a" - "209d076a209e076a209f076a20a0076a20a1076a20a2076a20a3076a20a4076a20a5076a20a6076a20a7076a20a807" - "6a20a9076a20aa076a20ab076a20ac076a20ad076a20ae076a20af076a20b0076a20b1076a20b2076a20b3076a20b4" - "076a20b5076a20b6076a20b7076a20b8076a20b9076a20ba076a20bb076a20bc076a20bd076a20be076a20bf076a20" - "c0076a20c1076a20c2076a20c3076a20c4076a20c5076a20c6076a20c7076a20c8076a20c9076a20ca076a20cb076a" - "20cc076a20cd076a20ce076a20cf076a20d0076a20d1076a20d2076a20d3076a20d4076a20d5076a20d6076a20d707" - "6a20d8076a20d9076a20da076a20db076a20dc076a20dd076a20de076a20df076a20e0076a20e1076a20e2076a20e3" - "076a20e4076a20e5076a20e6076a20e7076a20e8076a0b007f0970726f647563657273010c70726f6365737365642d" - "62790105636c616e675f31392e312e352d776173692d73646b202868747470733a2f2f6769746875622e636f6d2f6c" - "6c766d2f6c6c766d2d70726f6a65637420616234623561326462353832393538616631656533303861373930636664" - "623432626432343732302900490f7461726765745f6665617475726573042b0f6d757461626c652d676c6f62616c73" - "2b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; - -extern std::string const kOpcReservedHex = - "0061736d010000000105016000017f03030200000404017000010503010001060b027f0141000b7e0142000b071401" - "10616c6c5f696e737472756374696f6e7300010907010041000b01000a53020400412a0b4c02017f017e0101010101" - "0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" - "01010101010101010101010101010101410b0b0b0a010041000b0474657374"; - -extern std::string const kImpExpHex = - "0061736d0100000001100360027f7f017f6000017f60017f017f02330203656e760e6765745f6c65646765725f7371" - "6e000003656e76166765745f706172656e745f6c65646765725f686173680000030403010201050301000107310406" - "6d656d6f72790200096578705f66756e63310002096578705f66756e633200030c746573745f696d706f7274730004" - "0a2b03040041010b0700200041026c0b1c01027f4120410410001a41202802002100410041201001210120000b"; diff --git a/src/test/app/wasm_fixtures/fixtures.h b/src/test/app/wasm_fixtures/fixtures.h index 2f0a1072f6..4a3461a1fe 100644 --- a/src/test/app/wasm_fixtures/fixtures.h +++ b/src/test/app/wasm_fixtures/fixtures.h @@ -9,75 +9,4 @@ extern std::string const kAllHostFunctionsWasmHex; extern std::string const kAllKeyletsWasmHex; extern std::string const kCodecovTestsWasmHex; -extern std::string const kFibWasmHex; - -extern std::string const kFloatTestsWasmHex; -extern std::string const kFloat0Hex; -extern std::string const kDisabledFloatHex; - -extern std::string const kMemoryPointerAtLimitHex; -extern std::string const kMemoryPointerOverLimitHex; -extern std::string const kMemoryOffsetOverLimitHex; -extern std::string const kMemoryEndOfWordOverLimitHex; -extern std::string const kMemoryGrow0To1PageHex; -extern std::string const kMemoryGrow1To0PageHex; -extern std::string const kMemoryLastByteOf8MbHex; -extern std::string const kMemoryGrow1MoreThan8MbHex; -extern std::string const kMemoryGrow0MoreThan8MbHex; -extern std::string const kMemoryInit1MoreThan8MbHex; -extern std::string const kMemoryNegativeAddressHex; - -extern std::string const kTable64ElementsHex; -extern std::string const kTable65ElementsHex; -extern std::string const kTable2TablesHex; -extern std::string const kTable0ElementsHex; -extern std::string const kTableUintMaxHex; - -extern std::string const kProposalMutableGlobalHex; -extern std::string const kProposalGcStructNewHex; -extern std::string const kProposalMultiValueHex; -extern std::string const kProposalSignExtHex; -extern std::string const kProposalFloatToIntHex; -extern std::string const kProposalBulkMemoryHex; -extern std::string const kProposalRefTypesHex; -extern std::string const kProposalTailCallHex; -extern std::string const kProposalExtendedConstHex; -extern std::string const kProposalMultiMemoryHex; -extern std::string const kProposalCustomPageSizesHex; -extern std::string const kProposalMemory64Hex; -extern std::string const kProposalWideArithmeticHex; - -extern std::string const kTrapDivideBy0Hex; -extern std::string const kTrapIntOverflowHex; -extern std::string const kTrapUnreachableHex; -extern std::string const kTrapNullCallHex; -extern std::string const kTrapFuncSigMismatchHex; - -extern std::string const kWasiGetTimeHex; -extern std::string const kWasiPrintHex; - -extern std::string const kBadMagicNumberHex; -extern std::string const kBadVersionNumberHex; -extern std::string const kLyingHeaderHex; -extern std::string const kNeverEndingNumberHex; -extern std::string const kVectorLieHex; -extern std::string const kSectionOrderingHex; -extern std::string const kGhostPayloadHex; -extern std::string const kJunkAfterSectionHex; -extern std::string const kInvalidSectionIdHex; -extern std::string const kLocalVariableBombHex; - -extern std::string const kDeepRecursionHex; -extern std::string const kInfiniteLoopWasmHex; -extern std::string const kStartLoopHex; - extern std::string const kBadAlignWasmHex; - -extern std::string const kThousandParamsHex; -extern std::string const kThousand1ParamsHex; -extern std::string const kLocals10kHex; -extern std::string const kFunctions5kHex; - -extern std::string const kOpcReservedHex; - -extern std::string const kImpExpHex; diff --git a/src/test/app/wasm_fixtures/float_0/Cargo.lock b/src/test/app/wasm_fixtures/float_0/Cargo.lock deleted file mode 100644 index 4c62a73f26..0000000000 --- a/src/test/app/wasm_fixtures/float_0/Cargo.lock +++ /dev/null @@ -1,171 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "bs58" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "cfg-if" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" - -[[package]] -name = "cpufeatures" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -dependencies = [ - "libc", -] - -[[package]] -name = "crypto-common" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "crypto-common", -] - -[[package]] -name = "float_0" -version = "0.0.1" -dependencies = [ - "xrpl-wasm-stdlib", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "libc" -version = "0.2.183" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" - -[[package]] -name = "proc-macro2" -version = "1.0.106" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "sha2" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "syn" -version = "2.0.117" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "tinyvec" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "typenum" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" - -[[package]] -name = "unicode-ident" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "xrpl-address-macro" -version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?rev=1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" -dependencies = [ - "bs58", - "quote", - "sha2", - "syn", -] - -[[package]] -name = "xrpl-wasm-stdlib" -version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?rev=1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" -dependencies = [ - "xrpl-address-macro", -] diff --git a/src/test/app/wasm_fixtures/float_0/Cargo.toml b/src/test/app/wasm_fixtures/float_0/Cargo.toml deleted file mode 100644 index 10b20c5428..0000000000 --- a/src/test/app/wasm_fixtures/float_0/Cargo.toml +++ /dev/null @@ -1,21 +0,0 @@ -[package] -name = "float_0" -version = "0.0.1" -edition = "2024" - -# This empty workspace definition keeps this project independent of the parent workspace -[workspace] - -[lib] -crate-type = ["cdylib"] - -[profile.release] -lto = true -opt-level = 's' -panic = "abort" - -[dependencies] -xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib", rev = "1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" } - -[profile.dev] -panic = "abort" diff --git a/src/test/app/wasm_fixtures/float_0/src/lib.rs b/src/test/app/wasm_fixtures/float_0/src/lib.rs deleted file mode 100644 index babcc1bf54..0000000000 --- a/src/test/app/wasm_fixtures/float_0/src/lib.rs +++ /dev/null @@ -1,50 +0,0 @@ -#![cfg_attr(target_arch = "wasm32", no_std)] - -use xrpl_std::host::trace::trace; -use xrpl_std::host::{float_compare, float_from_int, float_subtract, FLOAT_ROUNDING_MODES_TO_NEAREST}; - -// Float size constant (8 bytes mantissa + 4 bytes exponent) -const FLOAT_SIZE: usize = 12; - -// FLOAT_ZERO constant -const FLOAT_ZERO: [u8; FLOAT_SIZE] = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00]; - -#[unsafe(no_mangle)] -pub extern "C" fn finish() -> i32 { - let _ = trace("\n$$$ test_float_0 $$$"); - - // Test: 10 - 10 should equal 0 - let mut f10: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - let mut f_result: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - - // Create float from 10 - if FLOAT_SIZE as i32 != unsafe { float_from_int(10, f10.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) } { - let _ = trace(" float 10-10: failed"); - return 1; - } - - // Subtract: 10 - 10 = 0 - if FLOAT_SIZE as i32 != unsafe { - float_subtract( - f10.as_ptr(), - FLOAT_SIZE, - f10.as_ptr(), - FLOAT_SIZE, - f_result.as_mut_ptr(), - FLOAT_SIZE, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - } { - let _ = trace(" float 10-10: failed"); - return 1; - } - - // Compare result with FLOAT_ZERO constant - if 0 == unsafe { float_compare(f_result.as_ptr(), FLOAT_SIZE, FLOAT_ZERO.as_ptr(), FLOAT_SIZE) } { - let _ = trace(" FLOAT_ZERO compare: good"); - } else { - let _ = trace(" FLOAT_ZERO compare: bad"); - } - - 1 -} diff --git a/src/test/app/wasm_fixtures/float_tests/Cargo.lock b/src/test/app/wasm_fixtures/float_tests/Cargo.lock deleted file mode 100644 index efad3253e7..0000000000 --- a/src/test/app/wasm_fixtures/float_tests/Cargo.lock +++ /dev/null @@ -1,171 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "bs58" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "cfg-if" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" - -[[package]] -name = "cpufeatures" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -dependencies = [ - "libc", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "crypto-common", -] - -[[package]] -name = "float_tests" -version = "0.0.1" -dependencies = [ - "xrpl-wasm-stdlib", -] - -[[package]] -name = "generic-array" -version = "0.14.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "libc" -version = "0.2.177" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" - -[[package]] -name = "proc-macro2" -version = "1.0.103" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "sha2" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "syn" -version = "2.0.108" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "tinyvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "typenum" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" - -[[package]] -name = "unicode-ident" -version = "1.0.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "xrpl-address-macro" -version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=u32-buffer#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" -dependencies = [ - "bs58", - "quote", - "sha2", - "syn", -] - -[[package]] -name = "xrpl-wasm-stdlib" -version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=u32-buffer#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" -dependencies = [ - "xrpl-address-macro", -] diff --git a/src/test/app/wasm_fixtures/float_tests/Cargo.toml b/src/test/app/wasm_fixtures/float_tests/Cargo.toml deleted file mode 100644 index a115dc006f..0000000000 --- a/src/test/app/wasm_fixtures/float_tests/Cargo.toml +++ /dev/null @@ -1,21 +0,0 @@ -[package] -name = "float_tests" -version = "0.0.1" -edition = "2024" - -# This empty workspace definition keeps this project independent of the parent workspace -[workspace] - -[lib] -crate-type = ["cdylib"] - -[profile.release] -lto = true -opt-level = 's' -panic = "abort" - -[dependencies] -xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib", branch = "u32-buffer" } - -[profile.dev] -panic = "abort" diff --git a/src/test/app/wasm_fixtures/float_tests/src/lib.rs b/src/test/app/wasm_fixtures/float_tests/src/lib.rs deleted file mode 100644 index 559ecc22a5..0000000000 --- a/src/test/app/wasm_fixtures/float_tests/src/lib.rs +++ /dev/null @@ -1,954 +0,0 @@ -#![allow(unused_imports)] -#![allow(unused_variables)] -#![cfg_attr(target_arch = "wasm32", no_std)] - -#[cfg(not(target_arch = "wasm32"))] -extern crate std; - -use xrpl_std::core::locator::Locator; -use xrpl_std::decode_hex_32; -use xrpl_std::host::trace::DataRepr::AsHex; -use xrpl_std::host::trace::{trace, trace_data, trace_num, DataRepr}; -use xrpl_std::host::{ - cache_ledger_obj, float_add, float_compare, float_divide, float_from_int, float_from_uint, - float_multiply, float_pow, float_root, float_subtract, - get_ledger_obj_array_len, get_ledger_obj_field, get_ledger_obj_nested_field, - FLOAT_ROUNDING_MODES_TO_NEAREST, -}; -use xrpl_std::sfield; -use xrpl_std::sfield::{ - Account, AccountTxnID, Balance, Domain, EmailHash, Flags, LedgerEntryType, MessageKey, - OwnerCount, PreviousTxnID, PreviousTxnLgrSeq, RegularKey, Sequence, TicketCount, TransferRate, -}; - -// External host functions not yet in xrpl_std -unsafe extern "C" { - #[link_name = "float_from_stamount"] - fn float_from_stamount( - amount_ptr: *const u8, - amount_len: i32, - out_ptr: *mut u8, - out_len: i32, - rounding: i32, - ) -> i32; - - #[link_name = "float_from_stnumber"] - fn float_from_stnumber( - number_ptr: *const u8, - number_len: i32, - out_ptr: *mut u8, - out_len: i32, - rounding: i32, - ) -> i32; - - #[link_name = "float_to_int"] - fn float_to_int( - float_ptr: *const u8, - float_len: i32, - out_ptr: *mut u8, - out_len: i32, - rounding: i32, - ) -> i32; - - #[link_name = "float_to_mant_exp"] - fn float_to_mant_exp( - float_ptr: *const u8, - float_len: i32, - mantissa_ptr: *mut u8, - mantissa_len: i32, - exponent_ptr: *mut u8, - exponent_len: i32, - ) -> i32; - - #[link_name = "float_from_mant_exp"] - fn float_from_mant_exp( - mantissa: i64, - exponent: i32, - out_ptr: *mut u8, - out_len: i32, - rounding: i32, - ) -> i32; -} - -// Float size constant (8 bytes mantissa + 4 bytes exponent) -const FLOAT_SIZE: usize = 12; - -// Float constants (8 bytes mantissa + 4 bytes exponent, big-endian) -// FLOAT_ONE: mantissa=0x0DE0B6B3A7640000 (10^18), exponent=0xFFFFFFEE (-18) -const FLOAT_ONE: [u8; FLOAT_SIZE] = [0x0D, 0xE0, 0xB6, 0xB3, 0xA7, 0x64, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xEE]; -// FLOAT_NEGATIVE_ONE: mantissa=0xF21F494C589C0000 (-10^18), exponent=0xFFFFFFEE (-18) -const FLOAT_NEGATIVE_ONE: [u8; FLOAT_SIZE] = [0xF2, 0x1F, 0x49, 0x4C, 0x58, 0x9C, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xEE]; - -// Helper function to trace floats -fn trace_float(msg: &str, f: &[u8; FLOAT_SIZE]) { - let _ = trace(msg); - let _ = trace_data(" ", f, AsHex); -} - -fn test_float_from_wasm() -> bool { - let _ = trace("\n$$$ test_float_from_wasm $$$"); - let mut all_pass = true; - - let mut f: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - if FLOAT_SIZE as i32 == unsafe { float_from_int(12300, f.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) } { - let _ = trace_float(" float from i64 12300:", &f); - let _ = trace_data(" float from i64 12300 as HEX:", &f, AsHex); - } else { - let _ = trace(" float from i64 12300: failed"); - all_pass = false; - } - - let u64_value: u64 = 12300; - if FLOAT_SIZE as i32 == unsafe { - float_from_uint( - &u64_value as *const u64 as *const u8, - 8, - f.as_mut_ptr(), - FLOAT_SIZE, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - } { - let _ = trace_float(" float from u64 12300:", &f); - } else { - let _ = trace(" float from u64 12300: failed"); - all_pass = false; - } - - if FLOAT_SIZE as i32 == unsafe { float_from_mant_exp(123, 2, f.as_mut_ptr(), FLOAT_SIZE as i32, FLOAT_ROUNDING_MODES_TO_NEAREST) } { - let _ = trace_float(" float from exp 2, mantissa 123:", &f); - } else { - let _ = trace(" float from exp 2, mantissa 123: failed"); - all_pass = false; - } - - let _ = trace_float(" float from const 1:", &FLOAT_ONE); - let _ = trace_float(" float from const -1:", &FLOAT_NEGATIVE_ONE); - - all_pass -} - -fn test_float_compare() -> bool { - let _ = trace("\n$$$ test_float_compare $$$"); - let mut all_pass = true; - - let mut f1: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - if FLOAT_SIZE as i32 != unsafe { float_from_int(1, f1.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) } { - let _ = trace(" float from 1: failed"); - all_pass = false; - } else { - let _ = trace_float(" float from 1:", &f1); - } - - if 0 == unsafe { float_compare(f1.as_ptr(), FLOAT_SIZE, FLOAT_ONE.as_ptr(), FLOAT_SIZE) } { - let _ = trace(" float from 1 == FLOAT_ONE"); - } else { - let _ = trace(" float from 1 != FLOAT_ONE, failed"); - all_pass = false; - } - - if 1 == unsafe { float_compare(f1.as_ptr(), FLOAT_SIZE, FLOAT_NEGATIVE_ONE.as_ptr(), FLOAT_SIZE) } { - let _ = trace(" float from 1 > FLOAT_NEGATIVE_ONE"); - } else { - let _ = trace(" float from 1 !> FLOAT_NEGATIVE_ONE, failed"); - all_pass = false; - } - - if 2 == unsafe { float_compare(FLOAT_NEGATIVE_ONE.as_ptr(), FLOAT_SIZE, f1.as_ptr(), FLOAT_SIZE) } { - let _ = trace(" FLOAT_NEGATIVE_ONE < float from 1"); - } else { - let _ = trace(" FLOAT_NEGATIVE_ONE !< float from 1, failed"); - all_pass = false; - } - - all_pass -} - -fn test_float_add_subtract() -> bool { - let _ = trace("\n$$$ test_float_add_subtract $$$"); - let mut all_pass = true; - - let mut f_compute: [u8; FLOAT_SIZE] = FLOAT_ONE; - for i in 0..9 { - unsafe { - float_add( - f_compute.as_ptr(), - FLOAT_SIZE, - FLOAT_ONE.as_ptr(), - FLOAT_SIZE, - f_compute.as_mut_ptr(), - FLOAT_SIZE, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }; - // let _ = trace_float(" float:", &f_compute); - } - let mut f10: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - if FLOAT_SIZE as i32 != unsafe { float_from_int(10, f10.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) } { - let _ = trace(" float from 10: failed"); - all_pass = false; - } - - if 0 == unsafe { float_compare(f10.as_ptr(), FLOAT_SIZE, f_compute.as_ptr(), FLOAT_SIZE) } { - let _ = trace(" repeated add: good"); - } else { - let _ = trace(" repeated add: failed"); - all_pass = false; - } - - for i in 0..11 { - unsafe { - float_subtract( - f_compute.as_ptr(), - FLOAT_SIZE, - FLOAT_ONE.as_ptr(), - FLOAT_SIZE, - f_compute.as_mut_ptr(), - FLOAT_SIZE, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }; - } - if 0 == unsafe { float_compare(f_compute.as_ptr(), FLOAT_SIZE, FLOAT_NEGATIVE_ONE.as_ptr(), FLOAT_SIZE) } { - let _ = trace(" repeated subtract: good"); - } else { - let _ = trace(" repeated subtract: failed"); - all_pass = false; - } - - all_pass -} - -fn test_float_multiply_divide() -> bool { - let _ = trace("\n$$$ test_float_multiply_divide $$$"); - let mut all_pass = true; - - let mut f10: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - unsafe { float_from_int(10, f10.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; - let mut f_compute: [u8; FLOAT_SIZE] = FLOAT_ONE; - for i in 0..6 { - unsafe { - float_multiply( - f_compute.as_ptr(), - FLOAT_SIZE, - f10.as_ptr(), - FLOAT_SIZE, - f_compute.as_mut_ptr(), - FLOAT_SIZE, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }; - // let _ = trace_float(" float:", &f_compute); - } - let mut f1000000: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - unsafe { - float_from_int( - 1000000, - f1000000.as_mut_ptr(), - FLOAT_SIZE, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }; - - if 0 == unsafe { float_compare(f1000000.as_ptr(), FLOAT_SIZE, f_compute.as_ptr(), FLOAT_SIZE) } { - let _ = trace(" repeated multiply: good"); - } else { - let _ = trace(" repeated multiply: failed"); - all_pass = false; - } - - for i in 0..7 { - unsafe { - float_divide( - f_compute.as_ptr(), - FLOAT_SIZE, - f10.as_ptr(), - FLOAT_SIZE, - f_compute.as_mut_ptr(), - FLOAT_SIZE, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }; - } - let mut f01: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - unsafe { float_from_mant_exp(1, -1, f01.as_mut_ptr(), FLOAT_SIZE as i32, FLOAT_ROUNDING_MODES_TO_NEAREST) }; - - if 0 == unsafe { float_compare(f_compute.as_ptr(), FLOAT_SIZE, f01.as_ptr(), FLOAT_SIZE) } { - let _ = trace(" repeated divide: good"); - } else { - let _ = trace(" repeated divide: failed"); - all_pass = false; - } - - all_pass -} - -fn test_float_pow() -> bool { - let _ = trace("\n$$$ test_float_pow $$$"); - let mut all_pass = true; - - let mut f_compute: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - unsafe { - float_pow( - FLOAT_ONE.as_ptr(), - FLOAT_SIZE, - 3, - f_compute.as_mut_ptr(), - FLOAT_SIZE, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }; - let _ = trace_float(" float cube of 1:", &f_compute); - - unsafe { - float_pow( - FLOAT_NEGATIVE_ONE.as_ptr(), - FLOAT_SIZE, - 6, - f_compute.as_mut_ptr(), - FLOAT_SIZE, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }; - let _ = trace_float(" float 6th power of -1:", &f_compute); - - let mut f9: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - unsafe { float_from_int(9, f9.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; - unsafe { - float_pow( - f9.as_ptr(), - FLOAT_SIZE, - 2, - f_compute.as_mut_ptr(), - FLOAT_SIZE, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }; - let _ = trace_float(" float square of 9:", &f_compute); - - unsafe { - float_pow( - f9.as_ptr(), - FLOAT_SIZE, - 0, - f_compute.as_mut_ptr(), - FLOAT_SIZE, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }; - let _ = trace_float(" float 0th power of 9:", &f_compute); - - let mut f0: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - unsafe { float_from_int(0, f0.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; - unsafe { - float_pow( - f0.as_ptr(), - FLOAT_SIZE, - 2, - f_compute.as_mut_ptr(), - FLOAT_SIZE, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }; - let _ = trace_float(" float square of 0:", &f_compute); - - let r = unsafe { - float_pow( - f0.as_ptr(), - FLOAT_SIZE, - 0, - f_compute.as_mut_ptr(), - FLOAT_SIZE, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }; - let _ = trace_num( - " float 0th power of 0 (expecting INVALID_PARAMS error):", - r as i64, - ); - - all_pass -} - -fn test_float_root() -> bool { - let _ = trace("\n$$$ test_float_root $$$"); - let mut all_pass = true; - - let mut f9: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - unsafe { float_from_int(9, f9.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; - let mut f_compute: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - unsafe { - float_root( - f9.as_ptr(), - FLOAT_SIZE, - 2, - f_compute.as_mut_ptr(), - FLOAT_SIZE, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }; - let _ = trace_float(" float sqrt of 9:", &f_compute); - unsafe { - float_root( - f9.as_ptr(), - FLOAT_SIZE, - 3, - f_compute.as_mut_ptr(), - FLOAT_SIZE, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }; - let _ = trace_float(" float cbrt of 9:", &f_compute); - - let mut f1000000: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - unsafe { - float_from_int( - 1000000, - f1000000.as_mut_ptr(), - FLOAT_SIZE, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }; - unsafe { - float_root( - f1000000.as_ptr(), - FLOAT_SIZE, - 3, - f_compute.as_mut_ptr(), - FLOAT_SIZE, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }; - let _ = trace_float(" float cbrt of 1000000:", &f_compute); - unsafe { - float_root( - f1000000.as_ptr(), - FLOAT_SIZE, - 6, - f_compute.as_mut_ptr(), - FLOAT_SIZE, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }; - let _ = trace_float(" float 6th root of 1000000:", &f_compute); - - all_pass -} - -fn test_float_invert() -> bool { - let _ = trace("\n$$$ test_float_invert $$$"); - let mut all_pass = true; - - let mut f_compute: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - let mut f10: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - unsafe { float_from_int(10, f10.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; - unsafe { - float_divide( - FLOAT_ONE.as_ptr(), - FLOAT_SIZE, - f10.as_ptr(), - FLOAT_SIZE, - f_compute.as_mut_ptr(), - FLOAT_SIZE, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }; - let _ = trace_float(" invert a float from 10:", &f_compute); - unsafe { - float_divide( - FLOAT_ONE.as_ptr(), - FLOAT_SIZE, - f_compute.as_ptr(), - FLOAT_SIZE, - f_compute.as_mut_ptr(), - FLOAT_SIZE, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }; - let _ = trace_float(" invert again:", &f_compute); - - // if f10's value is 7, then invert twice won't match the original value - if 0 == unsafe { float_compare(f10.as_ptr(), FLOAT_SIZE, f_compute.as_ptr(), FLOAT_SIZE) } { - let _ = trace(" invert twice: good"); - } else { - let _ = trace(" invert twice: failed"); - all_pass = false; - } - - all_pass -} - -fn test_float_to_int() -> bool { - let _ = trace("\n$$$ test_float_to_int $$$"); - let mut all_pass = true; - let mut result: [u8; 8] = [0u8; 8]; - - // Test converting FLOAT_ONE (value 1) to int - let ret = unsafe { - float_to_int( - FLOAT_ONE.as_ptr(), - FLOAT_SIZE as i32, - result.as_mut_ptr(), - 8, - FLOAT_ROUNDING_MODES_TO_NEAREST - ) - }; - if ret == 8 { - let number = i64::from_le_bytes(result); - if number == 1 { - let _ = trace(" float_to_int(1): good"); - } else { - let _ = trace(" float_to_int(1): failed"); - let _ = trace_num(" got:", number); - all_pass = false; - } - } else { - let _ = trace(" float_to_int(1): failed with error"); - let _ = trace_num(" error code:", ret as i64); - all_pass = false; - } - - // Test converting FLOAT_NEGATIVE_ONE (value -1) to int - let ret = unsafe { - float_to_int( - FLOAT_NEGATIVE_ONE.as_ptr(), - FLOAT_SIZE as i32, - result.as_mut_ptr(), - 8, - FLOAT_ROUNDING_MODES_TO_NEAREST - ) - }; - if ret == 8 { - let number = i64::from_le_bytes(result); - if number == -1 { - let _ = trace(" float_to_int(-1): good"); - } else { - let _ = trace(" float_to_int(-1): failed"); - let _ = trace_num(" got:", number); - all_pass = false; - } - } else { - let _ = trace(" float_to_int(-1): failed with error"); - let _ = trace_num(" error code:", ret as i64); - all_pass = false; - } - - // Test converting a larger number (i64::MAX) - let test_val: i64 = i64::MAX; - let mut f_max: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - unsafe { float_from_int(test_val, f_max.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; - let ret = unsafe { - float_to_int( - f_max.as_ptr(), - FLOAT_SIZE as i32, - result.as_mut_ptr(), - 8, - FLOAT_ROUNDING_MODES_TO_NEAREST - ) - }; - if ret == 8 { - let number = i64::from_le_bytes(result); - if number == test_val { - let _ = trace(" float_to_int(i64::MAX): good"); - } else { - let _ = trace(" float_to_int(i64::MAX): failed"); - let _ = trace_num(" expected:", test_val); - let _ = trace_num(" got:", number); - all_pass = false; - } - } else { - let _ = trace(" float_to_int(i64::MAX): failed with error"); - let _ = trace_num(" error code:", ret as i64); - all_pass = false; - } - - // Test converting zero - let mut f0: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - unsafe { float_from_int(0, f0.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; - let ret = unsafe { - float_to_int( - f0.as_ptr(), - FLOAT_SIZE as i32, - result.as_mut_ptr(), - 8, - FLOAT_ROUNDING_MODES_TO_NEAREST - ) - }; - if ret == 8 { - let number = i64::from_le_bytes(result); - if number == 0 { - let _ = trace(" float_to_int(0): good"); - } else { - let _ = trace(" float_to_int(0): failed"); - let _ = trace_num(" got:", number); - all_pass = false; - } - } else { - let _ = trace(" float_to_int(0): failed with error"); - let _ = trace_num(" error code:", ret as i64); - all_pass = false; - } - - // Test rounding with fractional value (0.1) - let mut f01: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - unsafe { float_from_mant_exp(1, -1, f01.as_mut_ptr(), FLOAT_SIZE as i32, FLOAT_ROUNDING_MODES_TO_NEAREST) }; - let ret = unsafe { - float_to_int( - f01.as_ptr(), - FLOAT_SIZE as i32, - result.as_mut_ptr(), - 8 as i32, - FLOAT_ROUNDING_MODES_TO_NEAREST - ) - }; - if ret == 8 as i32 { - let number = i64::from_le_bytes(result); - if number == 0 { - let _ = trace(" float_to_int(0.1, to_nearest): good"); - } else { - let _ = trace(" float_to_int(0.1, to_nearest): failed"); - let _ = trace_num(" got:", number); - all_pass = false; - } - } else { - let _ = trace(" float_to_int(0.1, to_nearest): failed with error"); - let _ = trace_num(" error code:", ret as i64); - all_pass = false; - } - - // Test rounding mode 1 (towards_zero) - let ret = unsafe { - float_to_int( - f01.as_ptr(), - FLOAT_SIZE as i32, - result.as_mut_ptr(), - 8 as i32, - 1 - ) - }; - if ret == 8 as i32 { - let number = i64::from_le_bytes(result); - if number == 0 { - let _ = trace(" float_to_int(0.1, towards_zero): good"); - } else { - let _ = trace(" float_to_int(0.1, towards_zero): failed"); - let _ = trace_num(" got:", number); - all_pass = false; - } - } else { - let _ = trace(" float_to_int(0.1, towards_zero): failed with error"); - let _ = trace_num(" error code:", ret as i64); - all_pass = false; - } - - all_pass -} - -fn test_float_to_mant_exp() -> bool { - let _ = trace("\n$$$ test_float_to_mant_exp $$$"); - let mut all_pass = true; - - // Test with FLOAT_ONE (value 1) - let mut mantissa_bytes: [u8; 8] = [0u8; 8]; - let mut exponent_bytes: [u8; 4] = [0u8; 4]; - let result = unsafe { - float_to_mant_exp( - FLOAT_ONE.as_ptr(), - FLOAT_SIZE as i32, - mantissa_bytes.as_mut_ptr(), - 8, - exponent_bytes.as_mut_ptr(), - 4, - ) - }; - - if result == FLOAT_SIZE as i32 { - let mantissa = i64::from_le_bytes(mantissa_bytes); - let exponent = i32::from_le_bytes(exponent_bytes); - if mantissa == 1000000000000000000 && exponent == -18 { - let _ = trace(" float_to_mant_exp(1): good"); - } else { - let _ = trace(" float_to_mant_exp(1): failed"); - let _ = trace_num(" expected mantissa 1000000000000000000, got:", mantissa); - let _ = trace_num(" expected exponent -18, got:", exponent as i64); - all_pass = false; - } - } else { - let _ = trace(" float_to_mant_exp(1): failed with error"); - let _ = trace_num(" error code:", result as i64); - all_pass = false; - } - - // Test with FLOAT_NEGATIVE_ONE (value -1) - let mut mantissa_bytes: [u8; 8] = [0u8; 8]; - let mut exponent_bytes: [u8; 4] = [0u8; 4]; - let result = unsafe { - float_to_mant_exp( - FLOAT_NEGATIVE_ONE.as_ptr(), - FLOAT_SIZE as i32, - mantissa_bytes.as_mut_ptr(), - 8, - exponent_bytes.as_mut_ptr(), - 4, - ) - }; - - if result == FLOAT_SIZE as i32 { - let mantissa = i64::from_le_bytes(mantissa_bytes); - let exponent = i32::from_le_bytes(exponent_bytes); - if mantissa == -1000000000000000000 && exponent == -18 { - let _ = trace(" float_to_mant_exp(-1): good"); - } else { - let _ = trace(" float_to_mant_exp(-1): failed"); - let _ = trace_num(" expected mantissa -1000000000000000000, got:", mantissa); - let _ = trace_num(" expected exponent -18, got:", exponent as i64); - all_pass = false; - } - } else { - let _ = trace(" float_to_mant_exp(-1): failed with error"); - let _ = trace_num(" error code:", result as i64); - all_pass = false; - } - - // Test with a float created from int (10) - let mut f10: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - unsafe { float_from_int(10, f10.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; - - let mut mantissa_bytes: [u8; 8] = [0u8; 8]; - let mut exponent_bytes: [u8; 4] = [0u8; 4]; - let result = unsafe { - float_to_mant_exp( - f10.as_ptr(), - FLOAT_SIZE as i32, - mantissa_bytes.as_mut_ptr(), - 8, - exponent_bytes.as_mut_ptr(), - 4, - ) - }; - - if result == FLOAT_SIZE as i32 { - let mantissa = i64::from_le_bytes(mantissa_bytes); - let exponent = i32::from_le_bytes(exponent_bytes); - if mantissa == 1000000000000000000 && exponent == -17 { - let _ = trace(" float_to_mant_exp(10): good"); - } else { - let _ = trace(" float_to_mant_exp(10): failed"); - let _ = trace_num(" expected mantissa 1000000000000000000, got:", mantissa); - let _ = trace_num(" expected exponent -17, got:", exponent as i64); - all_pass = false; - } - } else { - let _ = trace(" float_to_mant_exp(10): failed with error"); - let _ = trace_num(" error code:", result as i64); - all_pass = false; - } - - // Test with zero - let mut f0: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - unsafe { float_from_int(0, f0.as_mut_ptr(), FLOAT_SIZE, FLOAT_ROUNDING_MODES_TO_NEAREST) }; - - let mut mantissa_bytes: [u8; 8] = [0u8; 8]; - let mut exponent_bytes: [u8; 4] = [0u8; 4]; - let result = unsafe { - float_to_mant_exp( - f0.as_ptr(), - FLOAT_SIZE as i32, - mantissa_bytes.as_mut_ptr(), - 8, - exponent_bytes.as_mut_ptr(), - 4, - ) - }; - - if result == FLOAT_SIZE as i32 { - let mantissa = i64::from_le_bytes(mantissa_bytes); - let exponent = i32::from_le_bytes(exponent_bytes); - if mantissa == 0 && exponent == -2147483648 { - let _ = trace(" float_to_mant_exp(0): good"); - } else { - let _ = trace(" float_to_mant_exp(0): failed"); - let _ = trace_num(" expected mantissa 0, got:", mantissa); - let _ = trace_num(" expected exponent -2147483648, got:", exponent as i64); - all_pass = false; - } - } else { - let _ = trace(" float_to_mant_exp(0): failed with error"); - let _ = trace_num(" error code:", result as i64); - all_pass = false; - } - - all_pass -} - -fn test_float_from_stamount() -> bool { - let _ = trace("\n$$$ test_float_from_stamount $$$"); - let mut all_pass = true; - - // STAmount is serialized as: - // - 1 byte: type/flags - // - 8 bytes: amount (for XRP) or mantissa (for IOU) - // - For IOU: additional currency and issuer fields - - // Create an XRP amount: 100 XRP = 100,000,000 drops - // XRP format: bit 62 clear (not IOU), bit 63 clear (not negative) - // Amount in drops: 100,000,000 = 0x05F5E100 - let xrp_amount: [u8; 8] = [ - 0x40, 0x00, 0x00, 0x00, 0x05, 0xF5, 0xE1, 0x00 - ]; - - let mut f_result: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - let result_size = unsafe { - float_from_stamount( - xrp_amount.as_ptr(), - 8, - f_result.as_mut_ptr(), - FLOAT_SIZE as i32, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }; - - if result_size == FLOAT_SIZE as i32 { - let _ = trace_float(" float from XRP amount (100 XRP):", &f_result); - - // Convert back to int to verify - let mut int_bytes: [u8; 8] = [0u8; 8]; - let ret = unsafe { - float_to_int( - f_result.as_ptr(), - FLOAT_SIZE as i32, - int_bytes.as_mut_ptr(), - 8, - FLOAT_ROUNDING_MODES_TO_NEAREST - ) - }; - if ret == 8 { - let int_val = i64::from_le_bytes(int_bytes); - if int_val == 100000000 { - let _ = trace(" XRP amount conversion: good"); - } else { - let _ = trace(" XRP amount conversion: failed"); - let _ = trace_num(" expected 100000000, got:", int_val); - all_pass = false; - } - } else { - let _ = trace(" XRP amount conversion: failed - float_to_int error"); - let _ = trace_num(" error code:", ret as i64); - all_pass = false; - } - } else { - let _ = trace(" float from XRP amount: failed"); - let _ = trace_num(" result_size:", result_size as i64); - all_pass = false; - } - - all_pass -} - -fn test_float_from_stnumber() -> bool { - let _ = trace("\n$$$ test_float_from_stnumber $$$"); - let mut all_pass = true; - - // STNumber is serialized as: - // - 8 bytes: mantissa (big-endian signed int64) - // - 4 bytes: exponent (big-endian signed int32) - - // Create STNumber for value 123 (mantissa=123*10^18, exponent=-18) - // mantissa = 123000000000000000000 = 0x6ADF37F675EF6B28000 - // But we need to fit in int64, so use mantissa=123*10^15, exponent=-15 - // 123*10^15 = 123000000000000000 = 0x01B69B4BA630F34000 - let stnumber_123: [u8; 12] = [ - 0x01, 0xB6, 0x9B, 0x4B, 0xA6, 0x30, 0xF3, 0x40, // mantissa - 0xFF, 0xFF, 0xFF, 0xF1, // exponent = -15 - ]; - - let mut f_result: [u8; FLOAT_SIZE] = [0u8; FLOAT_SIZE]; - let result_size = unsafe { - float_from_stnumber( - stnumber_123.as_ptr(), - 12, - f_result.as_mut_ptr(), - FLOAT_SIZE as i32, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }; - - if result_size == FLOAT_SIZE as i32 { - let _ = trace_float(" float from STNumber (123):", &f_result); - - // Convert back to int to verify - let mut int_bytes: [u8; 8] = [0u8; 8]; - let ret = unsafe { - float_to_int( - f_result.as_ptr(), - FLOAT_SIZE as i32, - int_bytes.as_mut_ptr(), - 8, - FLOAT_ROUNDING_MODES_TO_NEAREST - ) - }; - if ret == 8 { - let int_val = i64::from_le_bytes(int_bytes); - if int_val == 123 { - let _ = trace(" STNumber conversion: good"); - } else { - let _ = trace(" STNumber conversion: failed"); - let _ = trace_num(" expected 123, got:", int_val); - all_pass = false; - } - } else { - let _ = trace(" STNumber conversion: failed - float_to_int error"); - let _ = trace_num(" error code:", ret as i64); - all_pass = false; - } - } else { - let _ = trace(" float from STNumber: failed"); - let _ = trace_num(" result_size:", result_size as i64); - all_pass = false; - } - - // Test with FLOAT_ONE constant (which is already in STNumber format) - let result_size = unsafe { - float_from_stnumber( - FLOAT_ONE.as_ptr(), - FLOAT_SIZE as i32, - f_result.as_mut_ptr(), - FLOAT_SIZE as i32, - FLOAT_ROUNDING_MODES_TO_NEAREST, - ) - }; - - if result_size == FLOAT_SIZE as i32 { - let _ = trace_float(" float from STNumber (1):", &f_result); - - // Should match FLOAT_ONE - if 0 == unsafe { float_compare(f_result.as_ptr(), FLOAT_SIZE, FLOAT_ONE.as_ptr(), FLOAT_SIZE) } { - let _ = trace(" STNumber(1) == FLOAT_ONE: good"); - } else { - let _ = trace(" STNumber(1) == FLOAT_ONE: failed"); - all_pass = false; - } - } else { - let _ = trace(" float from STNumber(1): failed"); - all_pass = false; - } - - all_pass -} - -#[unsafe(no_mangle)] -pub extern "C" fn finish() -> i32 { - let mut all_pass = true; - all_pass &= test_float_from_wasm(); - all_pass &= test_float_compare(); - all_pass &= test_float_add_subtract(); - all_pass &= test_float_multiply_divide(); - all_pass &= test_float_pow(); - all_pass &= test_float_root(); - all_pass &= test_float_invert(); - all_pass &= test_float_to_int(); - all_pass &= test_float_to_mant_exp(); - all_pass &= test_float_from_stamount(); - all_pass &= test_float_from_stnumber(); - - if all_pass { 1 } else { 0 } -} diff --git a/src/test/app/wasm_fixtures/infiniteLoop.c b/src/test/app/wasm_fixtures/infiniteLoop.c deleted file mode 100644 index ba84a92ac1..0000000000 --- a/src/test/app/wasm_fixtures/infiniteLoop.c +++ /dev/null @@ -1,7 +0,0 @@ -int loop() -{ - int volatile x = 0; - while (1) - x++; - return x; -} diff --git a/src/test/app/wasm_fixtures/thousand1_params.c b/src/test/app/wasm_fixtures/thousand1_params.c deleted file mode 100644 index 1a281461c4..0000000000 --- a/src/test/app/wasm_fixtures/thousand1_params.c +++ /dev/null @@ -1,264 +0,0 @@ -// clang-format off - -#include - -int32_t test( - int32_t p0, int32_t p1, int32_t p2, int32_t p3, int32_t p4, int32_t p5, int32_t p6, int32_t p7 -, int32_t p8, int32_t p9, int32_t p10, int32_t p11, int32_t p12, int32_t p13, int32_t p14, int32_t p15 -, int32_t p16, int32_t p17, int32_t p18, int32_t p19, int32_t p20, int32_t p21, int32_t p22, int32_t p23 -, int32_t p24, int32_t p25, int32_t p26, int32_t p27, int32_t p28, int32_t p29, int32_t p30, int32_t p31 -, int32_t p32, int32_t p33, int32_t p34, int32_t p35, int32_t p36, int32_t p37, int32_t p38, int32_t p39 -, int32_t p40, int32_t p41, int32_t p42, int32_t p43, int32_t p44, int32_t p45, int32_t p46, int32_t p47 -, int32_t p48, int32_t p49, int32_t p50, int32_t p51, int32_t p52, int32_t p53, int32_t p54, int32_t p55 -, int32_t p56, int32_t p57, int32_t p58, int32_t p59, int32_t p60, int32_t p61, int32_t p62, int32_t p63 -, int32_t p64, int32_t p65, int32_t p66, int32_t p67, int32_t p68, int32_t p69, int32_t p70, int32_t p71 -, int32_t p72, int32_t p73, int32_t p74, int32_t p75, int32_t p76, int32_t p77, int32_t p78, int32_t p79 -, int32_t p80, int32_t p81, int32_t p82, int32_t p83, int32_t p84, int32_t p85, int32_t p86, int32_t p87 -, int32_t p88, int32_t p89, int32_t p90, int32_t p91, int32_t p92, int32_t p93, int32_t p94, int32_t p95 -, int32_t p96, int32_t p97, int32_t p98, int32_t p99, int32_t p100, int32_t p101, int32_t p102, int32_t p103 -, int32_t p104, int32_t p105, int32_t p106, int32_t p107, int32_t p108, int32_t p109, int32_t p110, int32_t p111 -, int32_t p112, int32_t p113, int32_t p114, int32_t p115, int32_t p116, int32_t p117, int32_t p118, int32_t p119 -, int32_t p120, int32_t p121, int32_t p122, int32_t p123, int32_t p124, int32_t p125, int32_t p126, int32_t p127 -, int32_t p128, int32_t p129, int32_t p130, int32_t p131, int32_t p132, int32_t p133, int32_t p134, int32_t p135 -, int32_t p136, int32_t p137, int32_t p138, int32_t p139, int32_t p140, int32_t p141, int32_t p142, int32_t p143 -, int32_t p144, int32_t p145, int32_t p146, int32_t p147, int32_t p148, int32_t p149, int32_t p150, int32_t p151 -, int32_t p152, int32_t p153, int32_t p154, int32_t p155, int32_t p156, int32_t p157, int32_t p158, int32_t p159 -, int32_t p160, int32_t p161, int32_t p162, int32_t p163, int32_t p164, int32_t p165, int32_t p166, int32_t p167 -, int32_t p168, int32_t p169, int32_t p170, int32_t p171, int32_t p172, int32_t p173, int32_t p174, int32_t p175 -, int32_t p176, int32_t p177, int32_t p178, int32_t p179, int32_t p180, int32_t p181, int32_t p182, int32_t p183 -, int32_t p184, int32_t p185, int32_t p186, int32_t p187, int32_t p188, int32_t p189, int32_t p190, int32_t p191 -, int32_t p192, int32_t p193, int32_t p194, int32_t p195, int32_t p196, int32_t p197, int32_t p198, int32_t p199 -, int32_t p200, int32_t p201, int32_t p202, int32_t p203, int32_t p204, int32_t p205, int32_t p206, int32_t p207 -, int32_t p208, int32_t p209, int32_t p210, int32_t p211, int32_t p212, int32_t p213, int32_t p214, int32_t p215 -, int32_t p216, int32_t p217, int32_t p218, int32_t p219, int32_t p220, int32_t p221, int32_t p222, int32_t p223 -, int32_t p224, int32_t p225, int32_t p226, int32_t p227, int32_t p228, int32_t p229, int32_t p230, int32_t p231 -, int32_t p232, int32_t p233, int32_t p234, int32_t p235, int32_t p236, int32_t p237, int32_t p238, int32_t p239 -, int32_t p240, int32_t p241, int32_t p242, int32_t p243, int32_t p244, int32_t p245, int32_t p246, int32_t p247 -, int32_t p248, int32_t p249, int32_t p250, int32_t p251, int32_t p252, int32_t p253, int32_t p254, int32_t p255 -, int32_t p256, int32_t p257, int32_t p258, int32_t p259, int32_t p260, int32_t p261, int32_t p262, int32_t p263 -, int32_t p264, int32_t p265, int32_t p266, int32_t p267, int32_t p268, int32_t p269, int32_t p270, int32_t p271 -, int32_t p272, int32_t p273, int32_t p274, int32_t p275, int32_t p276, int32_t p277, int32_t p278, int32_t p279 -, int32_t p280, int32_t p281, int32_t p282, int32_t p283, int32_t p284, int32_t p285, int32_t p286, int32_t p287 -, int32_t p288, int32_t p289, int32_t p290, int32_t p291, int32_t p292, int32_t p293, int32_t p294, int32_t p295 -, int32_t p296, int32_t p297, int32_t p298, int32_t p299, int32_t p300, int32_t p301, int32_t p302, int32_t p303 -, int32_t p304, int32_t p305, int32_t p306, int32_t p307, int32_t p308, int32_t p309, int32_t p310, int32_t p311 -, int32_t p312, int32_t p313, int32_t p314, int32_t p315, int32_t p316, int32_t p317, int32_t p318, int32_t p319 -, int32_t p320, int32_t p321, int32_t p322, int32_t p323, int32_t p324, int32_t p325, int32_t p326, int32_t p327 -, int32_t p328, int32_t p329, int32_t p330, int32_t p331, int32_t p332, int32_t p333, int32_t p334, int32_t p335 -, int32_t p336, int32_t p337, int32_t p338, int32_t p339, int32_t p340, int32_t p341, int32_t p342, int32_t p343 -, int32_t p344, int32_t p345, int32_t p346, int32_t p347, int32_t p348, int32_t p349, int32_t p350, int32_t p351 -, int32_t p352, int32_t p353, int32_t p354, int32_t p355, int32_t p356, int32_t p357, int32_t p358, int32_t p359 -, int32_t p360, int32_t p361, int32_t p362, int32_t p363, int32_t p364, int32_t p365, int32_t p366, int32_t p367 -, int32_t p368, int32_t p369, int32_t p370, int32_t p371, int32_t p372, int32_t p373, int32_t p374, int32_t p375 -, int32_t p376, int32_t p377, int32_t p378, int32_t p379, int32_t p380, int32_t p381, int32_t p382, int32_t p383 -, int32_t p384, int32_t p385, int32_t p386, int32_t p387, int32_t p388, int32_t p389, int32_t p390, int32_t p391 -, int32_t p392, int32_t p393, int32_t p394, int32_t p395, int32_t p396, int32_t p397, int32_t p398, int32_t p399 -, int32_t p400, int32_t p401, int32_t p402, int32_t p403, int32_t p404, int32_t p405, int32_t p406, int32_t p407 -, int32_t p408, int32_t p409, int32_t p410, int32_t p411, int32_t p412, int32_t p413, int32_t p414, int32_t p415 -, int32_t p416, int32_t p417, int32_t p418, int32_t p419, int32_t p420, int32_t p421, int32_t p422, int32_t p423 -, int32_t p424, int32_t p425, int32_t p426, int32_t p427, int32_t p428, int32_t p429, int32_t p430, int32_t p431 -, int32_t p432, int32_t p433, int32_t p434, int32_t p435, int32_t p436, int32_t p437, int32_t p438, int32_t p439 -, int32_t p440, int32_t p441, int32_t p442, int32_t p443, int32_t p444, int32_t p445, int32_t p446, int32_t p447 -, int32_t p448, int32_t p449, int32_t p450, int32_t p451, int32_t p452, int32_t p453, int32_t p454, int32_t p455 -, int32_t p456, int32_t p457, int32_t p458, int32_t p459, int32_t p460, int32_t p461, int32_t p462, int32_t p463 -, int32_t p464, int32_t p465, int32_t p466, int32_t p467, int32_t p468, int32_t p469, int32_t p470, int32_t p471 -, int32_t p472, int32_t p473, int32_t p474, int32_t p475, int32_t p476, int32_t p477, int32_t p478, int32_t p479 -, int32_t p480, int32_t p481, int32_t p482, int32_t p483, int32_t p484, int32_t p485, int32_t p486, int32_t p487 -, int32_t p488, int32_t p489, int32_t p490, int32_t p491, int32_t p492, int32_t p493, int32_t p494, int32_t p495 -, int32_t p496, int32_t p497, int32_t p498, int32_t p499, int32_t p500, int32_t p501, int32_t p502, int32_t p503 -, int32_t p504, int32_t p505, int32_t p506, int32_t p507, int32_t p508, int32_t p509, int32_t p510, int32_t p511 -, int32_t p512, int32_t p513, int32_t p514, int32_t p515, int32_t p516, int32_t p517, int32_t p518, int32_t p519 -, int32_t p520, int32_t p521, int32_t p522, int32_t p523, int32_t p524, int32_t p525, int32_t p526, int32_t p527 -, int32_t p528, int32_t p529, int32_t p530, int32_t p531, int32_t p532, int32_t p533, int32_t p534, int32_t p535 -, int32_t p536, int32_t p537, int32_t p538, int32_t p539, int32_t p540, int32_t p541, int32_t p542, int32_t p543 -, int32_t p544, int32_t p545, int32_t p546, int32_t p547, int32_t p548, int32_t p549, int32_t p550, int32_t p551 -, int32_t p552, int32_t p553, int32_t p554, int32_t p555, int32_t p556, int32_t p557, int32_t p558, int32_t p559 -, int32_t p560, int32_t p561, int32_t p562, int32_t p563, int32_t p564, int32_t p565, int32_t p566, int32_t p567 -, int32_t p568, int32_t p569, int32_t p570, int32_t p571, int32_t p572, int32_t p573, int32_t p574, int32_t p575 -, int32_t p576, int32_t p577, int32_t p578, int32_t p579, int32_t p580, int32_t p581, int32_t p582, int32_t p583 -, int32_t p584, int32_t p585, int32_t p586, int32_t p587, int32_t p588, int32_t p589, int32_t p590, int32_t p591 -, int32_t p592, int32_t p593, int32_t p594, int32_t p595, int32_t p596, int32_t p597, int32_t p598, int32_t p599 -, int32_t p600, int32_t p601, int32_t p602, int32_t p603, int32_t p604, int32_t p605, int32_t p606, int32_t p607 -, int32_t p608, int32_t p609, int32_t p610, int32_t p611, int32_t p612, int32_t p613, int32_t p614, int32_t p615 -, int32_t p616, int32_t p617, int32_t p618, int32_t p619, int32_t p620, int32_t p621, int32_t p622, int32_t p623 -, int32_t p624, int32_t p625, int32_t p626, int32_t p627, int32_t p628, int32_t p629, int32_t p630, int32_t p631 -, int32_t p632, int32_t p633, int32_t p634, int32_t p635, int32_t p636, int32_t p637, int32_t p638, int32_t p639 -, int32_t p640, int32_t p641, int32_t p642, int32_t p643, int32_t p644, int32_t p645, int32_t p646, int32_t p647 -, int32_t p648, int32_t p649, int32_t p650, int32_t p651, int32_t p652, int32_t p653, int32_t p654, int32_t p655 -, int32_t p656, int32_t p657, int32_t p658, int32_t p659, int32_t p660, int32_t p661, int32_t p662, int32_t p663 -, int32_t p664, int32_t p665, int32_t p666, int32_t p667, int32_t p668, int32_t p669, int32_t p670, int32_t p671 -, int32_t p672, int32_t p673, int32_t p674, int32_t p675, int32_t p676, int32_t p677, int32_t p678, int32_t p679 -, int32_t p680, int32_t p681, int32_t p682, int32_t p683, int32_t p684, int32_t p685, int32_t p686, int32_t p687 -, int32_t p688, int32_t p689, int32_t p690, int32_t p691, int32_t p692, int32_t p693, int32_t p694, int32_t p695 -, int32_t p696, int32_t p697, int32_t p698, int32_t p699, int32_t p700, int32_t p701, int32_t p702, int32_t p703 -, int32_t p704, int32_t p705, int32_t p706, int32_t p707, int32_t p708, int32_t p709, int32_t p710, int32_t p711 -, int32_t p712, int32_t p713, int32_t p714, int32_t p715, int32_t p716, int32_t p717, int32_t p718, int32_t p719 -, int32_t p720, int32_t p721, int32_t p722, int32_t p723, int32_t p724, int32_t p725, int32_t p726, int32_t p727 -, int32_t p728, int32_t p729, int32_t p730, int32_t p731, int32_t p732, int32_t p733, int32_t p734, int32_t p735 -, int32_t p736, int32_t p737, int32_t p738, int32_t p739, int32_t p740, int32_t p741, int32_t p742, int32_t p743 -, int32_t p744, int32_t p745, int32_t p746, int32_t p747, int32_t p748, int32_t p749, int32_t p750, int32_t p751 -, int32_t p752, int32_t p753, int32_t p754, int32_t p755, int32_t p756, int32_t p757, int32_t p758, int32_t p759 -, int32_t p760, int32_t p761, int32_t p762, int32_t p763, int32_t p764, int32_t p765, int32_t p766, int32_t p767 -, int32_t p768, int32_t p769, int32_t p770, int32_t p771, int32_t p772, int32_t p773, int32_t p774, int32_t p775 -, int32_t p776, int32_t p777, int32_t p778, int32_t p779, int32_t p780, int32_t p781, int32_t p782, int32_t p783 -, int32_t p784, int32_t p785, int32_t p786, int32_t p787, int32_t p788, int32_t p789, int32_t p790, int32_t p791 -, int32_t p792, int32_t p793, int32_t p794, int32_t p795, int32_t p796, int32_t p797, int32_t p798, int32_t p799 -, int32_t p800, int32_t p801, int32_t p802, int32_t p803, int32_t p804, int32_t p805, int32_t p806, int32_t p807 -, int32_t p808, int32_t p809, int32_t p810, int32_t p811, int32_t p812, int32_t p813, int32_t p814, int32_t p815 -, int32_t p816, int32_t p817, int32_t p818, int32_t p819, int32_t p820, int32_t p821, int32_t p822, int32_t p823 -, int32_t p824, int32_t p825, int32_t p826, int32_t p827, int32_t p828, int32_t p829, int32_t p830, int32_t p831 -, int32_t p832, int32_t p833, int32_t p834, int32_t p835, int32_t p836, int32_t p837, int32_t p838, int32_t p839 -, int32_t p840, int32_t p841, int32_t p842, int32_t p843, int32_t p844, int32_t p845, int32_t p846, int32_t p847 -, int32_t p848, int32_t p849, int32_t p850, int32_t p851, int32_t p852, int32_t p853, int32_t p854, int32_t p855 -, int32_t p856, int32_t p857, int32_t p858, int32_t p859, int32_t p860, int32_t p861, int32_t p862, int32_t p863 -, int32_t p864, int32_t p865, int32_t p866, int32_t p867, int32_t p868, int32_t p869, int32_t p870, int32_t p871 -, int32_t p872, int32_t p873, int32_t p874, int32_t p875, int32_t p876, int32_t p877, int32_t p878, int32_t p879 -, int32_t p880, int32_t p881, int32_t p882, int32_t p883, int32_t p884, int32_t p885, int32_t p886, int32_t p887 -, int32_t p888, int32_t p889, int32_t p890, int32_t p891, int32_t p892, int32_t p893, int32_t p894, int32_t p895 -, int32_t p896, int32_t p897, int32_t p898, int32_t p899, int32_t p900, int32_t p901, int32_t p902, int32_t p903 -, int32_t p904, int32_t p905, int32_t p906, int32_t p907, int32_t p908, int32_t p909, int32_t p910, int32_t p911 -, int32_t p912, int32_t p913, int32_t p914, int32_t p915, int32_t p916, int32_t p917, int32_t p918, int32_t p919 -, int32_t p920, int32_t p921, int32_t p922, int32_t p923, int32_t p924, int32_t p925, int32_t p926, int32_t p927 -, int32_t p928, int32_t p929, int32_t p930, int32_t p931, int32_t p932, int32_t p933, int32_t p934, int32_t p935 -, int32_t p936, int32_t p937, int32_t p938, int32_t p939, int32_t p940, int32_t p941, int32_t p942, int32_t p943 -, int32_t p944, int32_t p945, int32_t p946, int32_t p947, int32_t p948, int32_t p949, int32_t p950, int32_t p951 -, int32_t p952, int32_t p953, int32_t p954, int32_t p955, int32_t p956, int32_t p957, int32_t p958, int32_t p959 -, int32_t p960, int32_t p961, int32_t p962, int32_t p963, int32_t p964, int32_t p965, int32_t p966, int32_t p967 -, int32_t p968, int32_t p969, int32_t p970, int32_t p971, int32_t p972, int32_t p973, int32_t p974, int32_t p975 -, int32_t p976, int32_t p977, int32_t p978, int32_t p979, int32_t p980, int32_t p981, int32_t p982, int32_t p983 -, int32_t p984, int32_t p985, int32_t p986, int32_t p987, int32_t p988, int32_t p989, int32_t p990, int32_t p991 -, int32_t p992, int32_t p993, int32_t p994, int32_t p995, int32_t p996, int32_t p997, int32_t p998, int32_t p999 -, int32_t p1000 -) -{ - int32_t x; - x = p0 + p1 + p2 + p3 + p4 + p5 + p6 + p7 - + p8 + p9 + p10 + p11 + p12 + p13 + p14 + p15 - + p16 + p17 + p18 + p19 + p20 + p21 + p22 + p23 - + p24 + p25 + p26 + p27 + p28 + p29 + p30 + p31 - + p32 + p33 + p34 + p35 + p36 + p37 + p38 + p39 - + p40 + p41 + p42 + p43 + p44 + p45 + p46 + p47 - + p48 + p49 + p50 + p51 + p52 + p53 + p54 + p55 - + p56 + p57 + p58 + p59 + p60 + p61 + p62 + p63 - + p64 + p65 + p66 + p67 + p68 + p69 + p70 + p71 - + p72 + p73 + p74 + p75 + p76 + p77 + p78 + p79 - + p80 + p81 + p82 + p83 + p84 + p85 + p86 + p87 - + p88 + p89 + p90 + p91 + p92 + p93 + p94 + p95 - + p96 + p97 + p98 + p99 + p100 + p101 + p102 + p103 - + p104 + p105 + p106 + p107 + p108 + p109 + p110 + p111 - + p112 + p113 + p114 + p115 + p116 + p117 + p118 + p119 - + p120 + p121 + p122 + p123 + p124 + p125 + p126 + p127 - + p128 + p129 + p130 + p131 + p132 + p133 + p134 + p135 - + p136 + p137 + p138 + p139 + p140 + p141 + p142 + p143 - + p144 + p145 + p146 + p147 + p148 + p149 + p150 + p151 - + p152 + p153 + p154 + p155 + p156 + p157 + p158 + p159 - + p160 + p161 + p162 + p163 + p164 + p165 + p166 + p167 - + p168 + p169 + p170 + p171 + p172 + p173 + p174 + p175 - + p176 + p177 + p178 + p179 + p180 + p181 + p182 + p183 - + p184 + p185 + p186 + p187 + p188 + p189 + p190 + p191 - + p192 + p193 + p194 + p195 + p196 + p197 + p198 + p199 - + p200 + p201 + p202 + p203 + p204 + p205 + p206 + p207 - + p208 + p209 + p210 + p211 + p212 + p213 + p214 + p215 - + p216 + p217 + p218 + p219 + p220 + p221 + p222 + p223 - + p224 + p225 + p226 + p227 + p228 + p229 + p230 + p231 - + p232 + p233 + p234 + p235 + p236 + p237 + p238 + p239 - + p240 + p241 + p242 + p243 + p244 + p245 + p246 + p247 - + p248 + p249 + p250 + p251 + p252 + p253 + p254 + p255 - + p256 + p257 + p258 + p259 + p260 + p261 + p262 + p263 - + p264 + p265 + p266 + p267 + p268 + p269 + p270 + p271 - + p272 + p273 + p274 + p275 + p276 + p277 + p278 + p279 - + p280 + p281 + p282 + p283 + p284 + p285 + p286 + p287 - + p288 + p289 + p290 + p291 + p292 + p293 + p294 + p295 - + p296 + p297 + p298 + p299 + p300 + p301 + p302 + p303 - + p304 + p305 + p306 + p307 + p308 + p309 + p310 + p311 - + p312 + p313 + p314 + p315 + p316 + p317 + p318 + p319 - + p320 + p321 + p322 + p323 + p324 + p325 + p326 + p327 - + p328 + p329 + p330 + p331 + p332 + p333 + p334 + p335 - + p336 + p337 + p338 + p339 + p340 + p341 + p342 + p343 - + p344 + p345 + p346 + p347 + p348 + p349 + p350 + p351 - + p352 + p353 + p354 + p355 + p356 + p357 + p358 + p359 - + p360 + p361 + p362 + p363 + p364 + p365 + p366 + p367 - + p368 + p369 + p370 + p371 + p372 + p373 + p374 + p375 - + p376 + p377 + p378 + p379 + p380 + p381 + p382 + p383 - + p384 + p385 + p386 + p387 + p388 + p389 + p390 + p391 - + p392 + p393 + p394 + p395 + p396 + p397 + p398 + p399 - + p400 + p401 + p402 + p403 + p404 + p405 + p406 + p407 - + p408 + p409 + p410 + p411 + p412 + p413 + p414 + p415 - + p416 + p417 + p418 + p419 + p420 + p421 + p422 + p423 - + p424 + p425 + p426 + p427 + p428 + p429 + p430 + p431 - + p432 + p433 + p434 + p435 + p436 + p437 + p438 + p439 - + p440 + p441 + p442 + p443 + p444 + p445 + p446 + p447 - + p448 + p449 + p450 + p451 + p452 + p453 + p454 + p455 - + p456 + p457 + p458 + p459 + p460 + p461 + p462 + p463 - + p464 + p465 + p466 + p467 + p468 + p469 + p470 + p471 - + p472 + p473 + p474 + p475 + p476 + p477 + p478 + p479 - + p480 + p481 + p482 + p483 + p484 + p485 + p486 + p487 - + p488 + p489 + p490 + p491 + p492 + p493 + p494 + p495 - + p496 + p497 + p498 + p499 + p500 + p501 + p502 + p503 - + p504 + p505 + p506 + p507 + p508 + p509 + p510 + p511 - + p512 + p513 + p514 + p515 + p516 + p517 + p518 + p519 - + p520 + p521 + p522 + p523 + p524 + p525 + p526 + p527 - + p528 + p529 + p530 + p531 + p532 + p533 + p534 + p535 - + p536 + p537 + p538 + p539 + p540 + p541 + p542 + p543 - + p544 + p545 + p546 + p547 + p548 + p549 + p550 + p551 - + p552 + p553 + p554 + p555 + p556 + p557 + p558 + p559 - + p560 + p561 + p562 + p563 + p564 + p565 + p566 + p567 - + p568 + p569 + p570 + p571 + p572 + p573 + p574 + p575 - + p576 + p577 + p578 + p579 + p580 + p581 + p582 + p583 - + p584 + p585 + p586 + p587 + p588 + p589 + p590 + p591 - + p592 + p593 + p594 + p595 + p596 + p597 + p598 + p599 - + p600 + p601 + p602 + p603 + p604 + p605 + p606 + p607 - + p608 + p609 + p610 + p611 + p612 + p613 + p614 + p615 - + p616 + p617 + p618 + p619 + p620 + p621 + p622 + p623 - + p624 + p625 + p626 + p627 + p628 + p629 + p630 + p631 - + p632 + p633 + p634 + p635 + p636 + p637 + p638 + p639 - + p640 + p641 + p642 + p643 + p644 + p645 + p646 + p647 - + p648 + p649 + p650 + p651 + p652 + p653 + p654 + p655 - + p656 + p657 + p658 + p659 + p660 + p661 + p662 + p663 - + p664 + p665 + p666 + p667 + p668 + p669 + p670 + p671 - + p672 + p673 + p674 + p675 + p676 + p677 + p678 + p679 - + p680 + p681 + p682 + p683 + p684 + p685 + p686 + p687 - + p688 + p689 + p690 + p691 + p692 + p693 + p694 + p695 - + p696 + p697 + p698 + p699 + p700 + p701 + p702 + p703 - + p704 + p705 + p706 + p707 + p708 + p709 + p710 + p711 - + p712 + p713 + p714 + p715 + p716 + p717 + p718 + p719 - + p720 + p721 + p722 + p723 + p724 + p725 + p726 + p727 - + p728 + p729 + p730 + p731 + p732 + p733 + p734 + p735 - + p736 + p737 + p738 + p739 + p740 + p741 + p742 + p743 - + p744 + p745 + p746 + p747 + p748 + p749 + p750 + p751 - + p752 + p753 + p754 + p755 + p756 + p757 + p758 + p759 - + p760 + p761 + p762 + p763 + p764 + p765 + p766 + p767 - + p768 + p769 + p770 + p771 + p772 + p773 + p774 + p775 - + p776 + p777 + p778 + p779 + p780 + p781 + p782 + p783 - + p784 + p785 + p786 + p787 + p788 + p789 + p790 + p791 - + p792 + p793 + p794 + p795 + p796 + p797 + p798 + p799 - + p800 + p801 + p802 + p803 + p804 + p805 + p806 + p807 - + p808 + p809 + p810 + p811 + p812 + p813 + p814 + p815 - + p816 + p817 + p818 + p819 + p820 + p821 + p822 + p823 - + p824 + p825 + p826 + p827 + p828 + p829 + p830 + p831 - + p832 + p833 + p834 + p835 + p836 + p837 + p838 + p839 - + p840 + p841 + p842 + p843 + p844 + p845 + p846 + p847 - + p848 + p849 + p850 + p851 + p852 + p853 + p854 + p855 - + p856 + p857 + p858 + p859 + p860 + p861 + p862 + p863 - + p864 + p865 + p866 + p867 + p868 + p869 + p870 + p871 - + p872 + p873 + p874 + p875 + p876 + p877 + p878 + p879 - + p880 + p881 + p882 + p883 + p884 + p885 + p886 + p887 - + p888 + p889 + p890 + p891 + p892 + p893 + p894 + p895 - + p896 + p897 + p898 + p899 + p900 + p901 + p902 + p903 - + p904 + p905 + p906 + p907 + p908 + p909 + p910 + p911 - + p912 + p913 + p914 + p915 + p916 + p917 + p918 + p919 - + p920 + p921 + p922 + p923 + p924 + p925 + p926 + p927 - + p928 + p929 + p930 + p931 + p932 + p933 + p934 + p935 - + p936 + p937 + p938 + p939 + p940 + p941 + p942 + p943 - + p944 + p945 + p946 + p947 + p948 + p949 + p950 + p951 - + p952 + p953 + p954 + p955 + p956 + p957 + p958 + p959 - + p960 + p961 + p962 + p963 + p964 + p965 + p966 + p967 - + p968 + p969 + p970 + p971 + p972 + p973 + p974 + p975 - + p976 + p977 + p978 + p979 + p980 + p981 + p982 + p983 - + p984 + p985 + p986 + p987 + p988 + p989 + p990 + p991 - + p992 + p993 + p994 + p995 + p996 + p997 + p998 + p999 - + p1000; - return x; -} - -// clang-format on diff --git a/src/test/app/wasm_fixtures/thousand_params.c b/src/test/app/wasm_fixtures/thousand_params.c deleted file mode 100644 index d934ca38c8..0000000000 --- a/src/test/app/wasm_fixtures/thousand_params.c +++ /dev/null @@ -1,262 +0,0 @@ -// clang-format off - -#include - -int32_t test( - int32_t p0, int32_t p1, int32_t p2, int32_t p3, int32_t p4, int32_t p5, int32_t p6, int32_t p7 -, int32_t p8, int32_t p9, int32_t p10, int32_t p11, int32_t p12, int32_t p13, int32_t p14, int32_t p15 -, int32_t p16, int32_t p17, int32_t p18, int32_t p19, int32_t p20, int32_t p21, int32_t p22, int32_t p23 -, int32_t p24, int32_t p25, int32_t p26, int32_t p27, int32_t p28, int32_t p29, int32_t p30, int32_t p31 -, int32_t p32, int32_t p33, int32_t p34, int32_t p35, int32_t p36, int32_t p37, int32_t p38, int32_t p39 -, int32_t p40, int32_t p41, int32_t p42, int32_t p43, int32_t p44, int32_t p45, int32_t p46, int32_t p47 -, int32_t p48, int32_t p49, int32_t p50, int32_t p51, int32_t p52, int32_t p53, int32_t p54, int32_t p55 -, int32_t p56, int32_t p57, int32_t p58, int32_t p59, int32_t p60, int32_t p61, int32_t p62, int32_t p63 -, int32_t p64, int32_t p65, int32_t p66, int32_t p67, int32_t p68, int32_t p69, int32_t p70, int32_t p71 -, int32_t p72, int32_t p73, int32_t p74, int32_t p75, int32_t p76, int32_t p77, int32_t p78, int32_t p79 -, int32_t p80, int32_t p81, int32_t p82, int32_t p83, int32_t p84, int32_t p85, int32_t p86, int32_t p87 -, int32_t p88, int32_t p89, int32_t p90, int32_t p91, int32_t p92, int32_t p93, int32_t p94, int32_t p95 -, int32_t p96, int32_t p97, int32_t p98, int32_t p99, int32_t p100, int32_t p101, int32_t p102, int32_t p103 -, int32_t p104, int32_t p105, int32_t p106, int32_t p107, int32_t p108, int32_t p109, int32_t p110, int32_t p111 -, int32_t p112, int32_t p113, int32_t p114, int32_t p115, int32_t p116, int32_t p117, int32_t p118, int32_t p119 -, int32_t p120, int32_t p121, int32_t p122, int32_t p123, int32_t p124, int32_t p125, int32_t p126, int32_t p127 -, int32_t p128, int32_t p129, int32_t p130, int32_t p131, int32_t p132, int32_t p133, int32_t p134, int32_t p135 -, int32_t p136, int32_t p137, int32_t p138, int32_t p139, int32_t p140, int32_t p141, int32_t p142, int32_t p143 -, int32_t p144, int32_t p145, int32_t p146, int32_t p147, int32_t p148, int32_t p149, int32_t p150, int32_t p151 -, int32_t p152, int32_t p153, int32_t p154, int32_t p155, int32_t p156, int32_t p157, int32_t p158, int32_t p159 -, int32_t p160, int32_t p161, int32_t p162, int32_t p163, int32_t p164, int32_t p165, int32_t p166, int32_t p167 -, int32_t p168, int32_t p169, int32_t p170, int32_t p171, int32_t p172, int32_t p173, int32_t p174, int32_t p175 -, int32_t p176, int32_t p177, int32_t p178, int32_t p179, int32_t p180, int32_t p181, int32_t p182, int32_t p183 -, int32_t p184, int32_t p185, int32_t p186, int32_t p187, int32_t p188, int32_t p189, int32_t p190, int32_t p191 -, int32_t p192, int32_t p193, int32_t p194, int32_t p195, int32_t p196, int32_t p197, int32_t p198, int32_t p199 -, int32_t p200, int32_t p201, int32_t p202, int32_t p203, int32_t p204, int32_t p205, int32_t p206, int32_t p207 -, int32_t p208, int32_t p209, int32_t p210, int32_t p211, int32_t p212, int32_t p213, int32_t p214, int32_t p215 -, int32_t p216, int32_t p217, int32_t p218, int32_t p219, int32_t p220, int32_t p221, int32_t p222, int32_t p223 -, int32_t p224, int32_t p225, int32_t p226, int32_t p227, int32_t p228, int32_t p229, int32_t p230, int32_t p231 -, int32_t p232, int32_t p233, int32_t p234, int32_t p235, int32_t p236, int32_t p237, int32_t p238, int32_t p239 -, int32_t p240, int32_t p241, int32_t p242, int32_t p243, int32_t p244, int32_t p245, int32_t p246, int32_t p247 -, int32_t p248, int32_t p249, int32_t p250, int32_t p251, int32_t p252, int32_t p253, int32_t p254, int32_t p255 -, int32_t p256, int32_t p257, int32_t p258, int32_t p259, int32_t p260, int32_t p261, int32_t p262, int32_t p263 -, int32_t p264, int32_t p265, int32_t p266, int32_t p267, int32_t p268, int32_t p269, int32_t p270, int32_t p271 -, int32_t p272, int32_t p273, int32_t p274, int32_t p275, int32_t p276, int32_t p277, int32_t p278, int32_t p279 -, int32_t p280, int32_t p281, int32_t p282, int32_t p283, int32_t p284, int32_t p285, int32_t p286, int32_t p287 -, int32_t p288, int32_t p289, int32_t p290, int32_t p291, int32_t p292, int32_t p293, int32_t p294, int32_t p295 -, int32_t p296, int32_t p297, int32_t p298, int32_t p299, int32_t p300, int32_t p301, int32_t p302, int32_t p303 -, int32_t p304, int32_t p305, int32_t p306, int32_t p307, int32_t p308, int32_t p309, int32_t p310, int32_t p311 -, int32_t p312, int32_t p313, int32_t p314, int32_t p315, int32_t p316, int32_t p317, int32_t p318, int32_t p319 -, int32_t p320, int32_t p321, int32_t p322, int32_t p323, int32_t p324, int32_t p325, int32_t p326, int32_t p327 -, int32_t p328, int32_t p329, int32_t p330, int32_t p331, int32_t p332, int32_t p333, int32_t p334, int32_t p335 -, int32_t p336, int32_t p337, int32_t p338, int32_t p339, int32_t p340, int32_t p341, int32_t p342, int32_t p343 -, int32_t p344, int32_t p345, int32_t p346, int32_t p347, int32_t p348, int32_t p349, int32_t p350, int32_t p351 -, int32_t p352, int32_t p353, int32_t p354, int32_t p355, int32_t p356, int32_t p357, int32_t p358, int32_t p359 -, int32_t p360, int32_t p361, int32_t p362, int32_t p363, int32_t p364, int32_t p365, int32_t p366, int32_t p367 -, int32_t p368, int32_t p369, int32_t p370, int32_t p371, int32_t p372, int32_t p373, int32_t p374, int32_t p375 -, int32_t p376, int32_t p377, int32_t p378, int32_t p379, int32_t p380, int32_t p381, int32_t p382, int32_t p383 -, int32_t p384, int32_t p385, int32_t p386, int32_t p387, int32_t p388, int32_t p389, int32_t p390, int32_t p391 -, int32_t p392, int32_t p393, int32_t p394, int32_t p395, int32_t p396, int32_t p397, int32_t p398, int32_t p399 -, int32_t p400, int32_t p401, int32_t p402, int32_t p403, int32_t p404, int32_t p405, int32_t p406, int32_t p407 -, int32_t p408, int32_t p409, int32_t p410, int32_t p411, int32_t p412, int32_t p413, int32_t p414, int32_t p415 -, int32_t p416, int32_t p417, int32_t p418, int32_t p419, int32_t p420, int32_t p421, int32_t p422, int32_t p423 -, int32_t p424, int32_t p425, int32_t p426, int32_t p427, int32_t p428, int32_t p429, int32_t p430, int32_t p431 -, int32_t p432, int32_t p433, int32_t p434, int32_t p435, int32_t p436, int32_t p437, int32_t p438, int32_t p439 -, int32_t p440, int32_t p441, int32_t p442, int32_t p443, int32_t p444, int32_t p445, int32_t p446, int32_t p447 -, int32_t p448, int32_t p449, int32_t p450, int32_t p451, int32_t p452, int32_t p453, int32_t p454, int32_t p455 -, int32_t p456, int32_t p457, int32_t p458, int32_t p459, int32_t p460, int32_t p461, int32_t p462, int32_t p463 -, int32_t p464, int32_t p465, int32_t p466, int32_t p467, int32_t p468, int32_t p469, int32_t p470, int32_t p471 -, int32_t p472, int32_t p473, int32_t p474, int32_t p475, int32_t p476, int32_t p477, int32_t p478, int32_t p479 -, int32_t p480, int32_t p481, int32_t p482, int32_t p483, int32_t p484, int32_t p485, int32_t p486, int32_t p487 -, int32_t p488, int32_t p489, int32_t p490, int32_t p491, int32_t p492, int32_t p493, int32_t p494, int32_t p495 -, int32_t p496, int32_t p497, int32_t p498, int32_t p499, int32_t p500, int32_t p501, int32_t p502, int32_t p503 -, int32_t p504, int32_t p505, int32_t p506, int32_t p507, int32_t p508, int32_t p509, int32_t p510, int32_t p511 -, int32_t p512, int32_t p513, int32_t p514, int32_t p515, int32_t p516, int32_t p517, int32_t p518, int32_t p519 -, int32_t p520, int32_t p521, int32_t p522, int32_t p523, int32_t p524, int32_t p525, int32_t p526, int32_t p527 -, int32_t p528, int32_t p529, int32_t p530, int32_t p531, int32_t p532, int32_t p533, int32_t p534, int32_t p535 -, int32_t p536, int32_t p537, int32_t p538, int32_t p539, int32_t p540, int32_t p541, int32_t p542, int32_t p543 -, int32_t p544, int32_t p545, int32_t p546, int32_t p547, int32_t p548, int32_t p549, int32_t p550, int32_t p551 -, int32_t p552, int32_t p553, int32_t p554, int32_t p555, int32_t p556, int32_t p557, int32_t p558, int32_t p559 -, int32_t p560, int32_t p561, int32_t p562, int32_t p563, int32_t p564, int32_t p565, int32_t p566, int32_t p567 -, int32_t p568, int32_t p569, int32_t p570, int32_t p571, int32_t p572, int32_t p573, int32_t p574, int32_t p575 -, int32_t p576, int32_t p577, int32_t p578, int32_t p579, int32_t p580, int32_t p581, int32_t p582, int32_t p583 -, int32_t p584, int32_t p585, int32_t p586, int32_t p587, int32_t p588, int32_t p589, int32_t p590, int32_t p591 -, int32_t p592, int32_t p593, int32_t p594, int32_t p595, int32_t p596, int32_t p597, int32_t p598, int32_t p599 -, int32_t p600, int32_t p601, int32_t p602, int32_t p603, int32_t p604, int32_t p605, int32_t p606, int32_t p607 -, int32_t p608, int32_t p609, int32_t p610, int32_t p611, int32_t p612, int32_t p613, int32_t p614, int32_t p615 -, int32_t p616, int32_t p617, int32_t p618, int32_t p619, int32_t p620, int32_t p621, int32_t p622, int32_t p623 -, int32_t p624, int32_t p625, int32_t p626, int32_t p627, int32_t p628, int32_t p629, int32_t p630, int32_t p631 -, int32_t p632, int32_t p633, int32_t p634, int32_t p635, int32_t p636, int32_t p637, int32_t p638, int32_t p639 -, int32_t p640, int32_t p641, int32_t p642, int32_t p643, int32_t p644, int32_t p645, int32_t p646, int32_t p647 -, int32_t p648, int32_t p649, int32_t p650, int32_t p651, int32_t p652, int32_t p653, int32_t p654, int32_t p655 -, int32_t p656, int32_t p657, int32_t p658, int32_t p659, int32_t p660, int32_t p661, int32_t p662, int32_t p663 -, int32_t p664, int32_t p665, int32_t p666, int32_t p667, int32_t p668, int32_t p669, int32_t p670, int32_t p671 -, int32_t p672, int32_t p673, int32_t p674, int32_t p675, int32_t p676, int32_t p677, int32_t p678, int32_t p679 -, int32_t p680, int32_t p681, int32_t p682, int32_t p683, int32_t p684, int32_t p685, int32_t p686, int32_t p687 -, int32_t p688, int32_t p689, int32_t p690, int32_t p691, int32_t p692, int32_t p693, int32_t p694, int32_t p695 -, int32_t p696, int32_t p697, int32_t p698, int32_t p699, int32_t p700, int32_t p701, int32_t p702, int32_t p703 -, int32_t p704, int32_t p705, int32_t p706, int32_t p707, int32_t p708, int32_t p709, int32_t p710, int32_t p711 -, int32_t p712, int32_t p713, int32_t p714, int32_t p715, int32_t p716, int32_t p717, int32_t p718, int32_t p719 -, int32_t p720, int32_t p721, int32_t p722, int32_t p723, int32_t p724, int32_t p725, int32_t p726, int32_t p727 -, int32_t p728, int32_t p729, int32_t p730, int32_t p731, int32_t p732, int32_t p733, int32_t p734, int32_t p735 -, int32_t p736, int32_t p737, int32_t p738, int32_t p739, int32_t p740, int32_t p741, int32_t p742, int32_t p743 -, int32_t p744, int32_t p745, int32_t p746, int32_t p747, int32_t p748, int32_t p749, int32_t p750, int32_t p751 -, int32_t p752, int32_t p753, int32_t p754, int32_t p755, int32_t p756, int32_t p757, int32_t p758, int32_t p759 -, int32_t p760, int32_t p761, int32_t p762, int32_t p763, int32_t p764, int32_t p765, int32_t p766, int32_t p767 -, int32_t p768, int32_t p769, int32_t p770, int32_t p771, int32_t p772, int32_t p773, int32_t p774, int32_t p775 -, int32_t p776, int32_t p777, int32_t p778, int32_t p779, int32_t p780, int32_t p781, int32_t p782, int32_t p783 -, int32_t p784, int32_t p785, int32_t p786, int32_t p787, int32_t p788, int32_t p789, int32_t p790, int32_t p791 -, int32_t p792, int32_t p793, int32_t p794, int32_t p795, int32_t p796, int32_t p797, int32_t p798, int32_t p799 -, int32_t p800, int32_t p801, int32_t p802, int32_t p803, int32_t p804, int32_t p805, int32_t p806, int32_t p807 -, int32_t p808, int32_t p809, int32_t p810, int32_t p811, int32_t p812, int32_t p813, int32_t p814, int32_t p815 -, int32_t p816, int32_t p817, int32_t p818, int32_t p819, int32_t p820, int32_t p821, int32_t p822, int32_t p823 -, int32_t p824, int32_t p825, int32_t p826, int32_t p827, int32_t p828, int32_t p829, int32_t p830, int32_t p831 -, int32_t p832, int32_t p833, int32_t p834, int32_t p835, int32_t p836, int32_t p837, int32_t p838, int32_t p839 -, int32_t p840, int32_t p841, int32_t p842, int32_t p843, int32_t p844, int32_t p845, int32_t p846, int32_t p847 -, int32_t p848, int32_t p849, int32_t p850, int32_t p851, int32_t p852, int32_t p853, int32_t p854, int32_t p855 -, int32_t p856, int32_t p857, int32_t p858, int32_t p859, int32_t p860, int32_t p861, int32_t p862, int32_t p863 -, int32_t p864, int32_t p865, int32_t p866, int32_t p867, int32_t p868, int32_t p869, int32_t p870, int32_t p871 -, int32_t p872, int32_t p873, int32_t p874, int32_t p875, int32_t p876, int32_t p877, int32_t p878, int32_t p879 -, int32_t p880, int32_t p881, int32_t p882, int32_t p883, int32_t p884, int32_t p885, int32_t p886, int32_t p887 -, int32_t p888, int32_t p889, int32_t p890, int32_t p891, int32_t p892, int32_t p893, int32_t p894, int32_t p895 -, int32_t p896, int32_t p897, int32_t p898, int32_t p899, int32_t p900, int32_t p901, int32_t p902, int32_t p903 -, int32_t p904, int32_t p905, int32_t p906, int32_t p907, int32_t p908, int32_t p909, int32_t p910, int32_t p911 -, int32_t p912, int32_t p913, int32_t p914, int32_t p915, int32_t p916, int32_t p917, int32_t p918, int32_t p919 -, int32_t p920, int32_t p921, int32_t p922, int32_t p923, int32_t p924, int32_t p925, int32_t p926, int32_t p927 -, int32_t p928, int32_t p929, int32_t p930, int32_t p931, int32_t p932, int32_t p933, int32_t p934, int32_t p935 -, int32_t p936, int32_t p937, int32_t p938, int32_t p939, int32_t p940, int32_t p941, int32_t p942, int32_t p943 -, int32_t p944, int32_t p945, int32_t p946, int32_t p947, int32_t p948, int32_t p949, int32_t p950, int32_t p951 -, int32_t p952, int32_t p953, int32_t p954, int32_t p955, int32_t p956, int32_t p957, int32_t p958, int32_t p959 -, int32_t p960, int32_t p961, int32_t p962, int32_t p963, int32_t p964, int32_t p965, int32_t p966, int32_t p967 -, int32_t p968, int32_t p969, int32_t p970, int32_t p971, int32_t p972, int32_t p973, int32_t p974, int32_t p975 -, int32_t p976, int32_t p977, int32_t p978, int32_t p979, int32_t p980, int32_t p981, int32_t p982, int32_t p983 -, int32_t p984, int32_t p985, int32_t p986, int32_t p987, int32_t p988, int32_t p989, int32_t p990, int32_t p991 -, int32_t p992, int32_t p993, int32_t p994, int32_t p995, int32_t p996, int32_t p997, int32_t p998, int32_t p999 -) -{ - int32_t x; - x = p0 + p1 + p2 + p3 + p4 + p5 + p6 + p7 - + p8 + p9 + p10 + p11 + p12 + p13 + p14 + p15 - + p16 + p17 + p18 + p19 + p20 + p21 + p22 + p23 - + p24 + p25 + p26 + p27 + p28 + p29 + p30 + p31 - + p32 + p33 + p34 + p35 + p36 + p37 + p38 + p39 - + p40 + p41 + p42 + p43 + p44 + p45 + p46 + p47 - + p48 + p49 + p50 + p51 + p52 + p53 + p54 + p55 - + p56 + p57 + p58 + p59 + p60 + p61 + p62 + p63 - + p64 + p65 + p66 + p67 + p68 + p69 + p70 + p71 - + p72 + p73 + p74 + p75 + p76 + p77 + p78 + p79 - + p80 + p81 + p82 + p83 + p84 + p85 + p86 + p87 - + p88 + p89 + p90 + p91 + p92 + p93 + p94 + p95 - + p96 + p97 + p98 + p99 + p100 + p101 + p102 + p103 - + p104 + p105 + p106 + p107 + p108 + p109 + p110 + p111 - + p112 + p113 + p114 + p115 + p116 + p117 + p118 + p119 - + p120 + p121 + p122 + p123 + p124 + p125 + p126 + p127 - + p128 + p129 + p130 + p131 + p132 + p133 + p134 + p135 - + p136 + p137 + p138 + p139 + p140 + p141 + p142 + p143 - + p144 + p145 + p146 + p147 + p148 + p149 + p150 + p151 - + p152 + p153 + p154 + p155 + p156 + p157 + p158 + p159 - + p160 + p161 + p162 + p163 + p164 + p165 + p166 + p167 - + p168 + p169 + p170 + p171 + p172 + p173 + p174 + p175 - + p176 + p177 + p178 + p179 + p180 + p181 + p182 + p183 - + p184 + p185 + p186 + p187 + p188 + p189 + p190 + p191 - + p192 + p193 + p194 + p195 + p196 + p197 + p198 + p199 - + p200 + p201 + p202 + p203 + p204 + p205 + p206 + p207 - + p208 + p209 + p210 + p211 + p212 + p213 + p214 + p215 - + p216 + p217 + p218 + p219 + p220 + p221 + p222 + p223 - + p224 + p225 + p226 + p227 + p228 + p229 + p230 + p231 - + p232 + p233 + p234 + p235 + p236 + p237 + p238 + p239 - + p240 + p241 + p242 + p243 + p244 + p245 + p246 + p247 - + p248 + p249 + p250 + p251 + p252 + p253 + p254 + p255 - + p256 + p257 + p258 + p259 + p260 + p261 + p262 + p263 - + p264 + p265 + p266 + p267 + p268 + p269 + p270 + p271 - + p272 + p273 + p274 + p275 + p276 + p277 + p278 + p279 - + p280 + p281 + p282 + p283 + p284 + p285 + p286 + p287 - + p288 + p289 + p290 + p291 + p292 + p293 + p294 + p295 - + p296 + p297 + p298 + p299 + p300 + p301 + p302 + p303 - + p304 + p305 + p306 + p307 + p308 + p309 + p310 + p311 - + p312 + p313 + p314 + p315 + p316 + p317 + p318 + p319 - + p320 + p321 + p322 + p323 + p324 + p325 + p326 + p327 - + p328 + p329 + p330 + p331 + p332 + p333 + p334 + p335 - + p336 + p337 + p338 + p339 + p340 + p341 + p342 + p343 - + p344 + p345 + p346 + p347 + p348 + p349 + p350 + p351 - + p352 + p353 + p354 + p355 + p356 + p357 + p358 + p359 - + p360 + p361 + p362 + p363 + p364 + p365 + p366 + p367 - + p368 + p369 + p370 + p371 + p372 + p373 + p374 + p375 - + p376 + p377 + p378 + p379 + p380 + p381 + p382 + p383 - + p384 + p385 + p386 + p387 + p388 + p389 + p390 + p391 - + p392 + p393 + p394 + p395 + p396 + p397 + p398 + p399 - + p400 + p401 + p402 + p403 + p404 + p405 + p406 + p407 - + p408 + p409 + p410 + p411 + p412 + p413 + p414 + p415 - + p416 + p417 + p418 + p419 + p420 + p421 + p422 + p423 - + p424 + p425 + p426 + p427 + p428 + p429 + p430 + p431 - + p432 + p433 + p434 + p435 + p436 + p437 + p438 + p439 - + p440 + p441 + p442 + p443 + p444 + p445 + p446 + p447 - + p448 + p449 + p450 + p451 + p452 + p453 + p454 + p455 - + p456 + p457 + p458 + p459 + p460 + p461 + p462 + p463 - + p464 + p465 + p466 + p467 + p468 + p469 + p470 + p471 - + p472 + p473 + p474 + p475 + p476 + p477 + p478 + p479 - + p480 + p481 + p482 + p483 + p484 + p485 + p486 + p487 - + p488 + p489 + p490 + p491 + p492 + p493 + p494 + p495 - + p496 + p497 + p498 + p499 + p500 + p501 + p502 + p503 - + p504 + p505 + p506 + p507 + p508 + p509 + p510 + p511 - + p512 + p513 + p514 + p515 + p516 + p517 + p518 + p519 - + p520 + p521 + p522 + p523 + p524 + p525 + p526 + p527 - + p528 + p529 + p530 + p531 + p532 + p533 + p534 + p535 - + p536 + p537 + p538 + p539 + p540 + p541 + p542 + p543 - + p544 + p545 + p546 + p547 + p548 + p549 + p550 + p551 - + p552 + p553 + p554 + p555 + p556 + p557 + p558 + p559 - + p560 + p561 + p562 + p563 + p564 + p565 + p566 + p567 - + p568 + p569 + p570 + p571 + p572 + p573 + p574 + p575 - + p576 + p577 + p578 + p579 + p580 + p581 + p582 + p583 - + p584 + p585 + p586 + p587 + p588 + p589 + p590 + p591 - + p592 + p593 + p594 + p595 + p596 + p597 + p598 + p599 - + p600 + p601 + p602 + p603 + p604 + p605 + p606 + p607 - + p608 + p609 + p610 + p611 + p612 + p613 + p614 + p615 - + p616 + p617 + p618 + p619 + p620 + p621 + p622 + p623 - + p624 + p625 + p626 + p627 + p628 + p629 + p630 + p631 - + p632 + p633 + p634 + p635 + p636 + p637 + p638 + p639 - + p640 + p641 + p642 + p643 + p644 + p645 + p646 + p647 - + p648 + p649 + p650 + p651 + p652 + p653 + p654 + p655 - + p656 + p657 + p658 + p659 + p660 + p661 + p662 + p663 - + p664 + p665 + p666 + p667 + p668 + p669 + p670 + p671 - + p672 + p673 + p674 + p675 + p676 + p677 + p678 + p679 - + p680 + p681 + p682 + p683 + p684 + p685 + p686 + p687 - + p688 + p689 + p690 + p691 + p692 + p693 + p694 + p695 - + p696 + p697 + p698 + p699 + p700 + p701 + p702 + p703 - + p704 + p705 + p706 + p707 + p708 + p709 + p710 + p711 - + p712 + p713 + p714 + p715 + p716 + p717 + p718 + p719 - + p720 + p721 + p722 + p723 + p724 + p725 + p726 + p727 - + p728 + p729 + p730 + p731 + p732 + p733 + p734 + p735 - + p736 + p737 + p738 + p739 + p740 + p741 + p742 + p743 - + p744 + p745 + p746 + p747 + p748 + p749 + p750 + p751 - + p752 + p753 + p754 + p755 + p756 + p757 + p758 + p759 - + p760 + p761 + p762 + p763 + p764 + p765 + p766 + p767 - + p768 + p769 + p770 + p771 + p772 + p773 + p774 + p775 - + p776 + p777 + p778 + p779 + p780 + p781 + p782 + p783 - + p784 + p785 + p786 + p787 + p788 + p789 + p790 + p791 - + p792 + p793 + p794 + p795 + p796 + p797 + p798 + p799 - + p800 + p801 + p802 + p803 + p804 + p805 + p806 + p807 - + p808 + p809 + p810 + p811 + p812 + p813 + p814 + p815 - + p816 + p817 + p818 + p819 + p820 + p821 + p822 + p823 - + p824 + p825 + p826 + p827 + p828 + p829 + p830 + p831 - + p832 + p833 + p834 + p835 + p836 + p837 + p838 + p839 - + p840 + p841 + p842 + p843 + p844 + p845 + p846 + p847 - + p848 + p849 + p850 + p851 + p852 + p853 + p854 + p855 - + p856 + p857 + p858 + p859 + p860 + p861 + p862 + p863 - + p864 + p865 + p866 + p867 + p868 + p869 + p870 + p871 - + p872 + p873 + p874 + p875 + p876 + p877 + p878 + p879 - + p880 + p881 + p882 + p883 + p884 + p885 + p886 + p887 - + p888 + p889 + p890 + p891 + p892 + p893 + p894 + p895 - + p896 + p897 + p898 + p899 + p900 + p901 + p902 + p903 - + p904 + p905 + p906 + p907 + p908 + p909 + p910 + p911 - + p912 + p913 + p914 + p915 + p916 + p917 + p918 + p919 - + p920 + p921 + p922 + p923 + p924 + p925 + p926 + p927 - + p928 + p929 + p930 + p931 + p932 + p933 + p934 + p935 - + p936 + p937 + p938 + p939 + p940 + p941 + p942 + p943 - + p944 + p945 + p946 + p947 + p948 + p949 + p950 + p951 - + p952 + p953 + p954 + p955 + p956 + p957 + p958 + p959 - + p960 + p961 + p962 + p963 + p964 + p965 + p966 + p967 - + p968 + p969 + p970 + p971 + p972 + p973 + p974 + p975 - + p976 + p977 + p978 + p979 + p980 + p981 + p982 + p983 - + p984 + p985 + p986 + p987 + p988 + p989 + p990 + p991 - + p992 + p993 + p994 + p995 + p996 + p997 + p998 + p999; - return x; -} - -// clang-format on diff --git a/src/test/app/wasm_fixtures/wat/custom_page_sizes.wat b/src/test/app/wasm_fixtures/wat/custom_page_sizes.wat deleted file mode 100644 index a9d404fadc..0000000000 --- a/src/test/app/wasm_fixtures/wat/custom_page_sizes.wat +++ /dev/null @@ -1,13 +0,0 @@ -(module - ;; Define a memory with 1 initial page. - ;; CRITICAL: We explicitly set the page size to 1 kilobyte. - ;; Standard Wasm implies (pagesize 65536). - (memory 1 (pagesize 1024)) - - (func $finish (result i32) - ;; If this module instantiates, the runtime accepted the custom page size. - i32.const 1 - ) - - (export "finish" (func $finish)) -) diff --git a/src/test/app/wasm_fixtures/wat/deep_recursion.wat b/src/test/app/wasm_fixtures/wat/deep_recursion.wat deleted file mode 100644 index 8e1f02c001..0000000000 --- a/src/test/app/wasm_fixtures/wat/deep_recursion.wat +++ /dev/null @@ -1,29 +0,0 @@ -(module - ;; Define a Mutable Global Variable to act as our counter. - ;; We initialize it to 1,000,000. - (global $counter (mut i32) (i32.const 1000000)) - - (func $finish (result i32) - ;; 1. Check if counter == 0 (Base Case) - global.get $counter - i32.eqz - if - ;; If counter is 0, we are done. Return 1. - i32.const 1 - return - end - - ;; 2. Decrement the Global Counter - global.get $counter - i32.const 1 - i32.sub - global.set $counter - - ;; 3. Recursive Step: Call SELF - ;; This puts an i32 (1) on the stack when it returns. - call $finish - ) - - ;; Export the only function we have - (export "finish" (func $finish)) -) diff --git a/src/test/app/wasm_fixtures/wat/functions_5k.zip b/src/test/app/wasm_fixtures/wat/functions_5k.zip deleted file mode 100644 index e261760545516dd244df3d31cc5a3acd4fb5685c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29665 zcmeI5eQXnT7{@z?8!z&bi7dPav(pd)mmn`9LW2abUWj8V1h#P?bA}Oiy1@vH-Z^nG zfRp4RUNFL<6xj=7IvvH1^@IW11mwlxa0R-_0@AJR+O4nGyYttZiNVO~uKjP%wmeOq z`{maA_Q~bx=Xrk5r4xxm$7wXfhH2Kn{chG*3#Kn13pJYk+eT@|YBZYM9r>HLZ=v!F z$$496@7%Qg^6gbs^Rjp5J}_mv*_@^OrZ4QFuGIg$;Y{)~$LA)^zznao-Cs0y(&oYy z$(Lqt%N=?yds2O;OA3-wyHnTD6kEgnzY3d=n#3j7Z4=W8^Q`!plEt zWiKw@t96Z(J4tz>>~CU1oGkg#8D&2cww8~%=aJ9$=pXWus0}yyWqu>Ik*e@N>-%~) zwTY_q&-b0)?b_(7@K5bpY;Qc!SbewnTYr^*Ntgb9V~M%cL=DL7Gaolm12U!NLndlK zrp#P#q6TF4n#)YofK0M}k=;C{*HIx9T{9kYT9?{BF;P*Rr~kB82?H`k*NxRq>vG#E z6P2oOu$!}c9aTa!=NNsl-MqNhQ7QPY8BaK^%WOwYRKL!{!gwt&jL+lK+PDu}@!Vk?`(z5ZL6fKf5f0ulz9C@4`Lvs~?mVumC)sWy!@;G6S#X0UQ3Im+s>^(+ z6`v8nj{Araw60QQKOi&mctacaDY!wCr~$#y{u*@aX~MVElQ+7F^$u=sm|Y`aqj&?j zL6fKf(bLmF9rF=Mv;}27CFGnuKBtZQxD}rez`zZfL=A|AD1$C)rY$980a#EVjtWR& zr?pCCOUXKPPip5*w&LpoShbHBPg}qZnnVo&b$4E(hD_z{4&T9+4BRw_C`a7Tt zhkb;U)m(f%`r7|Edy1A9S@g~~{O^DG$Vo0-rTC7k%NtV%_^$sxiMt0by}u9l5v~6T zhh`dm>ds8S-6_EORkD81gPk_O-N5?Q);}^3K3D^|8(6>E`iF!HaDcmk^{cIaTt<|j z3~)EFewD1h17*aa2G+l{vuO!1~qJKYoZ*=5ErKQnCOnC=f>l1e9~1 z@DWqPELcz=UJAV9BRmftthGfTbfUt%F@<^0RG4?mt(i`%F~5&|pHuL7ANiiGEGoW* z8ir$H$idhcvJ?|OXJf0 zb2ZTP4J81TC4i2|27)&QES0u^1qI@$fD7f^M_ch--2_-rAZ`l$j#rkKlX?O5aF0@$ zH>WV~QwsCW-mG+c_mS^p1&_~C$ajOX$hoQ3M8(vC-5eW3_QrLQG#`+Tro z`YH!^0VP?bF!}^a0BTDBX#T(~7<~eBU(^o0@gjTxV?Lse`G9dSj~S8k5EbCI!srty z0jMkiSR(zqF!}`MzNj5~^9#zLr=ZQ{ZQNwApg{Z-s6&;x(=hr3=Dw&MdK1||u-3t4 z1u(FnKpYh~i*oMbJig-`z6&fU5HAICc>_b!UI&^3vY?N7_f0rCuXKBtDRWMe6!JYq z!Q;k0^4+)Sqei<~jAeq!jo27+Z*2Hnj18a5G2!z;d+GIL3QDpD=>TwxeDm^=r(R)) zCX8)9XvxcV=XO6=6nY_H<)+W|cD|#D^i<017{+o!B9?@)@(>>E=JvpWxJZ&lGy0KU zG9^H~EOJ97HeJR___St5*M<)VH)s+yAS5aDnVnB_bA}ME3uBcMk;3SzWcC8df*Ul6 z8W17TTZ3*l?f48YnGqmf6}fQ|n;~PRyaC*xNz{N4h0e@snY~2bu=55t_k9T862@vI zVj`mhH)s+yAnyBHjH_jAFQ3!QSlaLjUUE)=SRryxN-VfRlc)jF<*KEsC1N~dK}pX= zvd+%uxVe)dd|em=H)s+yAa?P*d9j!DbaO9(1qI@#KmiJ@BO!cY7(?7-G-E*wrHL#+ z*rc2L0^FcU{{d0Qci0#?F`Y;lGA{A)kK;s7DDMBB2|%x%1cCfs8m59BztFOgP|BC`R?_*T<;oxCt)&Y zXXebAbI$(v%;ZClUcF!J(W7tQ9$vnIANPx!)zEWt&mI-!{2u%sJ$kGNScI<#_Ic~g z<)c5tKmGJ_&a*3uKi`oTd7ymZg%86T^tnfbWh0;8YPTqRYc_HIZG86K_^trOun2(@?1tDvZF%8ohy@a_Z zVOo8dzXD{<@e;$mlthVPZY6UcGi0aBbTu00WQn2PXJ~8PZKgF|qp#ni8NTDC9bZF4(@ILQtpMX zX4%#O$_KB_1K1ajnQ?Asp7C{YXWOe%6YO;my*~A7_iEiUf8#Xp+A&~)LzvgSgE##0 z&hOkag$S^Ne_q^~G9W^ExyJe!#qApGel8jBJY4-*M2DEpMdn z*D4%~Y)cM`j`>S2H`<8~<@79DA2|8YFk!y~eV6ujeRWX(%-FuayhjaR|5m@`=!MgI zhrc@L#mt?3U!OwRubqv+plbYV7*de#x5`uIe3bH%ORS-uHDk%6WZWzvL|oLwl?3 z1`W;ptM4yv)P(i*{gR1=k-c?xgI>ve%I5W{)I00@^-tcqP~O}1wL!0D_P6emW~XN`6bbx-q%^^UELT^#?~ql#K| za!Fuo)9;xp4can7XgFP#D>R%fvmMeUr)AfF?6o#{&#aC8B>qM9&jrIzjJ6MTPxY|A zsM2R)>kFG?QO)&s|Hx=wI*8#{h(2lc*d*J4|2MDvZ+EFP#&nPE-hbA{E{Pwb{<&~? z&S<|-_y4(~#D4X|`X%YJ5mVOA{$uHswe!Awd`&*O`~OfcE*MUaemOLY z@{oJ~vo;owfBZ#jH(We9FJjBZKAsV=4JT*JS#=kmlenZIXwGBrMVd#PcUo<%Z#<@6 zTsS;?v}b76|5{PQ1cA@N`VRy?%6e~skE%JSSYEugL_2U*!T(gpgz9Sr!%vQO4$VsS z*y6pqHg-{bw<|g;UKjCF!Ds6tUM|R37cr#Z{yN#meXo!6u~}kuUl+xX56${NPv#HT zzMs5}d?R)4C)6LGL}$f{me^#ZdJI)xGf$4y#yYC6Wsh!7^Z5VsF=g!7VE@Jo|Jdg_ z`|YG9vvT%s|41oHF0!4QLlxP2*7e!nNYBx&`&EDLV&olv$y%l8`1Y@qM6{CFtR!NT z#5N`IosvjU5!ENt{p;SxO>DN#rSsi%OzUNnBA9 zWlEw_N!(NtbxNXMNi-;lW+kCl5G}J zMMS8Gbt>X36%nl>Hmisj6|qf4e5WE3RK!mzVz-J&QW5)AM5>BVs))lX;;4$qR1qgs zM3#!kQ4x76;-ZQuR1sHHM45`HR1r5-L~&K0QMz}x=`&9o0)1u2(hUv%NlRoS(rG05{<62B^wq0(nbBE$Ily%`^jz`l&mQdO{}y1u~G4%E^4nHzhIc;FB_?p zkVT?tb+&sO6|;3w`}Ful!*PGvGNt5Dk!V4kE!C))r;AF~6PSRo@)kvV;puxo>WYQ2(+u{qLrkY7oLIN8HZh!XBAVQ3#0*b^-A(6Po04` zjl)XhH;btVfi{3{SxIVmx(vLB7%P?AT&C6uq=EFatH?~A>mj_a7%P+8U#7kiXaniN zt4Nv`eh7bFjFrpXFH_M1X%IbX6?uZEK77IY z`zgJB6?vW)egywej8)6suTV(>X$ZY<6?u`TK7!8^V>NQWE7X30HiSO1ioC?r9l;lh zv08cb6)IIA4W&=7A`5x0YJ8a(tCJ^Pp_Bq`C|$IQEaru)@jx+lOP+OwIxLWWMpv&Q zukh4re2o~pEx&n%Ix5h9Mz^dYOL#gp{)HI3Be%IqWeTKg=w}1SGM?*i_}5~rUT%Mt zIw8=mp$7+$6}<4@@U3F(FS+|wDoY^!oE{ZGR`S%p;iMS5EBCuftjJ3$!OQ@RyX#~A5fNbEYkKqMkOegm%q3Q(M2>M6>d7q~{ zhL?)5R(W&@RWFc6(x(H+W}d4Czahr-@}v@~L7j7$P6i=vKN4o@)efYZL z_$y9WZ$)$|)lVp0Prn~X+VEX7@sUp0(~6{0>LsCeJ?#}pKF1Hw#NTwno>63#QZEao zQM7*`$>XataVICNkK$%2HAJY5qQe47TfQz6pX7w~RoIkK!-Uc==?#HoKfdel_*5s% zMqyt@4Hs&^q_+o>FYv>E$3Jw!o>jP)QT9UVSM@+H3dcYK}`_MF16jB*fazoL%> zk^}j=-|>Y`*gq7}Wz<_jshmC?NWRQ>rSWA>7*CN@MvWC}<#bUXDd30Gc%T!;S7en@ z&O)hzt_~!J@YOWF#tE}k+$^Ie2(=2jC6E;Hbu|8k6ZX8qrkr|5DE*p#Hi#U?cl`tZ z+6n8YurH^k2(@3+gM&yre)u2wRwt~#!o8ew7fPe)Q9Iy*j%I538h=PpdhlxUU4Hl}{CQ{WRfYRCDq1Lwp+~JIr|{LM@IlU)ox<-L zwOOc*pHHAVC_Dn=-crQcsoy7OJL@R82ga7EHJYMW3SOM9&*J^0~S z_?yny>x!&v)OSMZH?;q1@&mp)3wLtHMksDxqY{MLZ|Jbq$&Kn)KwmX5-78F$YCbC8ZQ<CIPX<7=ETN5#!b>Zni~Pq(ZlefYX;{0nF7O@+;M zDpM#W>1TsUobP%D|JoUQOJRSVIw91O^x$A}5kLG4zSSA~r^5X@l_ivZM~@07efjD$ zIO&YNt?;`}@CE#m(!~6`}TfIxLtB;Olbm$azD~8+PsueJ>rZ zb&2<`N~`%eG$H#yaAC-3^;xcv69}ga+(O_i17{UEkHC3D&Kq*xurqJC^3vftmkjSJ zRn6tlgyI9i#UZQIXSqU7Ae=IA3xTr?oK@sJ0_P1mZ^(JW&b;BGOP|-e5Z+a(HRD4Q zP9C^h5HeJKmMi20!YKo{5ID=gSw+qxaNdyfhMYI-%o{Gh^m(02ig%T==C{y2 zg)C5? z`_D;$lK>|HP6C_+I0&q;uj04D)X0-OXm32+kNB*004lR$Tt03%bM zWoYJ(BU8aNCNecLgDsOSGsq0*HLb-t8bh|M>5{DZ5_4Ckk7xdp=(8DvtaT4lBVpp1 zyFN^%#!$jkmfT|M$~8m6mUH?ZVxl%S!jexua$uLM9AaRCd3M8qU06F@v+L23qrp{mNHbyu3%0FG# zN=qTBfaE$PHzBEoHK zNKS03T^8i?^^(PITXd7fZ-d5NAer#CI#TnGvoS*^?)vGwArtL(0kZ37_~{q;X-~|M z-M5}|-(353h|gYs*n{P;2audvzT{HMzkYX4qnExnE}dTbDI`Bba$#KBu8N3Zhhm1< z-+nG92Q*#?NhKupkmz%2TO1ZTxrH`udUh!w&qFf6Ep+xV$7@b$cK0HFIt6=h8ulO? ze#(KL&caXUzVp@;@T*So6Ju_k;U~_hKDFhUrmyC?g)Tnsc+Uki{+cTwvmyBsl7o<3 zgXG2W={24_=MkY34h*ZhcU(F?b)9@f<7f9W1ICO`uQ<$uG!N06i1y^el9v&E3sHAS z>7`@Fr|q(h+*KAcB;t;MmkY-8NaAUG6iD~(VKG$`?J}|Dnb3)|`@sG;FH9&XOW(21 z&UJ16qCha~Vg11bdfL*UcFpHbK&%t|frOIx)cvt#V$){1TPWMr8s`~Ea&joN&WW)) z+f^vOvhTc!i8P!p<0#NjI*`sr7Pei4bfk>E61v<2!U}?@y%ANiYzBw4cVF?MXRo2a#Y z2RihJ{Zk#6dhLgTv0H{$jUisr&0DtS6Uk27iRbQ|*|H4-Vp}xwIdIK_)04qKuBXA` z6R3C$D$aq$V32TVy?C%$+ee7{VabDbPJyYO)J{rfI|&qK@#}?U>2uybabUtU-qH=; z-~4d-?2GC-&SgSi4dR_o@Ds=GbO*XKANa)%nYjFeZ-8>Wn*j8zsQSf+JGgw= zfX*ivi5AZCI;4et2JZmPv=L>(KcG54Jb$o^9SuKY zc2$Oda%s7~6e^cb-3Xvp8F!$Onz9yJt$`xIwcsu^RbqWKP?A1K^(B9s)=S@yLb_>o zz>gl>(X}s`)l8_5=9)62P;Dbbs`Z#9@w|XE4p9HVt^LJ4<1^O zawE!d%=lEFygoi)naCQOzmhKnT4Tu{(CNd4JrF4f~c4vt4Z09P>PQ z+tuvrICMjw@3lS5?Tmg^Z!zOHGoaHI?t8epM8+%#h#;_Ela$TztZR9UtT zR_QYuRC)Cf;M)lcZ>)!fJXq-B)RZ@rZBJz6`)3)v^jEOT09a)K4bmHvkT-zTu}Mhq-;hlQh@oASo9?M*Q9 z{ROLx{1#T339C$ld^0OS;ofbqa2_mN;@mXjJ+{3mM!s@bU+152eXfUoX3ZFlS2e5(OQL*Kzk(|i z9sn2cRhuu|(|mEJ=7LL3N?Z$Ur?YAuFX$Jkyx^#ucK6rak+74GY@!|Sb{{yz^R4U% zE$AN0%MGnNyIybz$A_Lm0C0G#9k!+xYD8Awe^Sp6~o1r$4+i1}zD zU{$LoVh++V*p5{?b`j|q?4&h128IZAtV=a+*BNeTZR^o>{+?!B7qx#@tDEwI!fQk` z;h$uyJez4-EJFGrx!}@AvO=~Osn3Ts!d6QE6H=mg_Xpph8x_VW2CFY(FVYzJtu?c! z@Pg(AHfD{6agDW;7c{hwUyR5HF%29?uK-) z>RHHQ>_Pf59hsO!*2G*yCT1TpF|(10Nn)oMS_V)D8W;GjHM5rloS^aoY|I)B;~Hxx zFX$v6zZh2}TvyaNs;1TZT%76SpKwjHZ}&0Q=dh9OOr#KOeCvTUh>da`kp=+{v^-&7 zccUq{Hn0U(fcj-^gvvE$T90sCS?gQDc%kZ`+-SOdsWXz3c<#+0Z1WAkV(<7 zCWVb{=O7I-MwPIypbngJYXippNWZKNYPrTbn3TsaMr2YHAfyF>%HEJz*}mOFk#4Y| zi5t=xHdvW~R0D-Ck;v#s+SwB}p0ze?;JDgQ1!$AIsWgy=!~+eP@6fOhXvnX-7a$Eu zLBYvfq#?heaP}jlAt*M9L`Fr^PDA#gJ05F86OOCBhICVD01c6;^g7Xsgi=OV+2?|f zAd9)5ZM#=94j{C}0HG}c2<=LM&@Qhi2NeNAyBQ#~jR3;!q{0{DVtrJ*KoooMLP@W} zsqEV_0QKb`22h_Dg!-02sBc%uXmf=e-~Um$AXDSBBB5ON5yW0!V}519*G_R-Ghcwa zT^P4;7_8CuqR{h6gqK;IKOJB!AjX{!FqYf?Ng#lPIKO$E*31`e7z>BNwu21N@_EAG zW%h<>A-Ex$;n46CxFOo*Rc%6L6?GQCxJJVwVsD774RwD)H$-g^uq7}VoCdD34mU)P zUyR5HNq`SxW_tjD@-=3USM?)tT1A}%S)F#su2EGu47Q^WdeY!!pii(z`8>2S*Vvq9=ob*GB{jg9kB8Lh#1*Nha16N^jzhI zc<|^DBqf+oS&<5atMJj`qhMTPtOC$i7QnS`%HvT~>|?EdagF_bnwnAjV2`nO?ip6Q_dzcSesbDHP&uDvWPicrjJpKtVzK^NITnO0(ck% z9x-l1;AtnAvUBa~@ zmCplo*Qg4S>aamackO;{lWFH$_aCY9N+&xDAW9G8TQ=MF8jIk<6gV~!fem)qFqdKT z6gqyPSuxj`ZfgW^`@j-mYnnHB#*`fj%#vd%ePFw}pNh_T|w{ zn0Srpw!pdpjM}2^Azn6U|9vufI1x-kIcv9Q^;u`GfMb0pcs1U4msVZ&ZF;C<)| zpcQZ;KzIu$0#>y^PaaGJ8?M53%&C*vLa1Zx^LW^oPF1l3uQA;g>KGh|H9E!(4avFC zB?lzf0zgi(Z}-FtE?KhKFntzgXq!*5eHhGbGc4~Sjj^?I_CT9(>S1HnXc*U+NnUUf zJbp2US@cz;lCb%39aC%{26N#Q zL(4E5MJ*8OwPyA}n{ZWF>w&n&Oe+%l|Hm)Jr8Q#!G7I;U?Tc%HNeN(E*`rcy&49Va zSj7=d`7vva3cCr-+6a|vtlfHq%k=S!5t$S*FexAtApn?^5|lm*5)wK|v3(fKZ8Irs zK7zFYBWM$tlw;PK6t1zqo0P{dMr2apGiHR@e#7S8f`~Q}g(kqS1D!DewTilqxUSKj zu)A)o4I4PFHdF!nkN=)D?lQyAEZFZo|M@|Ee;LzgC~O`vPD)(<)9=8=smW5!)zLLV zeV95q_+Cw2+S$C6jBFP-bA?wNJ@ltsSZcPy-wO{;yI)b~}~b}}V@5f?N8iy2L&C`ndws70pHi<|Cm{*}33EQ_+dpj1$p zl0gGa!WzWq1ckO9dfq+h{hB)J>_u2US96tL^RYh6H95G!T;V->rmWY|7(I2NWKzJV zT~sz*fotx6QJ6rBfZf;`vX2?%5s~FmDBHIC*kWi=WLe0f#3G9_99Wb!IuB%m;*kk* zL?+0`X!C$!1I#QnnUb!I4#(BrZ**g6Aa@i1+|li{3mL#2edbv`AL&8{(uDw|3nj=M zX^=aT0UHX`Dh?@+gUKCbAa?}09_=noIs^?c$JG{QbYp2CLlSw;<)Y;DOk2+pIycYi zVaRG&N&Jqi9t_)=uxnI?M!I)sASYVQgcKXYxQ(4WlD#j8!bsU=Uwf zqru#;T=$;`LFflHvzgHzM|~4&OMH{q_`^~PW)@C$0GevZWX)91M^kN#Wh`Qat2z!% zb^ANYu2`W4BV%>dN)6_Q#oo(+5JYx*rU--}(><&0PzYivHHIK=XsRKTHLE%XPIZfw zAxH!=Ruiq9Y7x?4!b%P1hJ`{9*|LOcpdga8X^j%!BoVrIksuc%LpQz*m_l&x5`*qt zSj}-mH#1|(6Rf&M*EJ5?7O1{~ z!c`*}+m+dW5C?KxZ5TTApWRd%z>qMyx=YNmgd0pot6jrwK_L^+>{eYOK42&bV0eaz zifTsRSW;?vL6fu*!hm@!=-P;&)V$8IRug=RP+1`hx-OO=7J9cfO_^a1Y3$2Z9Ys}dQSu5nmnL<^XKJA!ve*4*-NTISk$?~+G3|mI2tj5cC=}pmESlCOZ3{s-6x9@hJW=2<3PD65hXg1H0dhzH zIB$YgE9xx3VT~q)KxqQjg5Mlh`y7&PDh>7l&Tf#5=HQ_}?NZ3Z?T$2`-r5-sYYbEY zGYH`UwdxTo$MxWWC@Z~gDMMgLm`I&o;x(d$abTwEb<##=z9FW?`gGT}4B1}CVi3^E z<*%B_?|nkEbCEl81nwv$?Ls_oM{_-^&8N3^io+V+Q9N=-@IL9m;_1TZzD(J#OqjrNGh2D#DkyN{VqZ|w|+HM%3f3`{AYU1&x-9b)TqTIfZ(MA+>%mQrIN@+85HPbiA|?+pt!1c3AA(_1^kVcSfI9m*lGHZz*zYM(>WO{IanjLZ+@ zMrY5|fMhg{Z;}Pa47A5#je#m)1|hu0XlpIG<7Mk}Tqf(&O=SoTiKfKRO5{fyWZ9CL z3;<4V792Cs9)~r$Bft#YQHhoA zh~omN0)nGi>2*sPvT^M@09qRf_wv_@*lqb0br3nUgc?=kNrD^O%^Ei>7FzogoJj%G zHAm={dRD`2`D=8RQX{m+?dWfpwe}>Pzks}q4}jLdQ(zAOt$h?1hK@aow2-z1BHWIC zqkjbt>OlT5IBMewIe!5`YhnPcf!#N8;OSocZn!O<$bj*LCDaJ5JyCFDyQ%(ve^3D% zg1iet5PJ`hu30PbO@f(;6?K+UV+isj!Hw-g5N=p(4#`g-hr}M909pvZ`N*!18EB8g z8cm2b$A_9$D8~gB*n=FB?kWxBWw_&B*&EJ|o0ws`9CwWERbWWKaj!CiTg`jMV_r`g zG1#C6kPjPh=eA%jsK7kK9J93GxH!!xKmpD8qA(u%YLNv&dcqzL3-?cMHE(B3+SE?(*yCXVJOO~>&P`NDR&+cp#J+92v~DI= z_IOzKEZhIT!`c&aL=+$a4{#D;!s|Ee$pi4$3BE-Kt94C*2Z2*SkPu*+Mwg zX#W>Tx3y}jcc4c_)2*E9JxGIRS>^*#hq+U)fK^SlzFblfYqElbta~lf|dSww-gTQ|E#%p_V$&$tU3GPExi)m(ia&|&W9>E z9jYKG*yXbv-lqJ$R)<1pL`|X5gKKrD)$w|N4~-t#Ks(mIM|@rPjb#Osv%?hebu}z# zZIboihjP%l^wS#A6JzI=)J7N%SVDmapiE3Lgf%iT#SqrW#1unVA(I8B(5Ne!7`22O z7F-d)+A#W}6v=s)Jf`BW?=M^$o5q~16ep!D|5$(flEJy@i1s2AS(g}Pc|qym!W1R@ zdtAXkj)efN^SQxSV9{JnKKv;zFIVtWT+7k#bD1fG`JBRKn`;%jBl!oV_dBh3vBMR? zIS7(IUJ%$#?6p6yi$+Y$FsU|oUH&NmCs$2c{;4HBM9lDn0d9DvDFx}V^K_d*+`AuZ zcpaq2&WQ{A23Xr<{p%oiX`b!_WN*F)fZU=wF)+v{ivnOWg0ciYR$Q)uKP!GnYGvZnxWSXppKgl&u2a(#;MwlzRsLmECj|eG`1Q`+;II^wHkPJhH1aetp zNI0&x6$K4RH=S`lM;Q?9;U~K9zCCWvDb?|di3qv!^=1D<9>0o8hTFd y*`uPI--F-7^zY|&@bij*Mfi$fpSRvzKKe8K(+@qKeg>BI1h4Vn-2w3R=<#2Od%rLM diff --git a/src/test/app/wasm_fixtures/wat/memory64.wat b/src/test/app/wasm_fixtures/wat/memory64.wat deleted file mode 100644 index 02c8f4f590..0000000000 --- a/src/test/app/wasm_fixtures/wat/memory64.wat +++ /dev/null @@ -1,21 +0,0 @@ -(module - ;; Define a 64-bit memory (index type i64) - ;; Start with 1 page. - (memory i64 1) - - (func $finish (result i32) - ;; 1. Perform a store using a 64-bit address. - ;; Even if the value is small (0), the type MUST be i64. - i64.const 0 ;; Address (64-bit) - i32.const 42 ;; Value (32-bit) - i32.store8 ;; Opcode doesn't change, but validation rules do. - - ;; 2. check memory size - ;; memory.size now returns an i64. - memory.size - i64.const 1 - i64.eq ;; Returns i32 (1 if true) - ) - - (export "finish" (func $finish)) -) diff --git a/src/test/app/wasm_fixtures/wat/memory_end_of_word_over_limit.wat b/src/test/app/wasm_fixtures/wat/memory_end_of_word_over_limit.wat deleted file mode 100644 index dc5427563f..0000000000 --- a/src/test/app/wasm_fixtures/wat/memory_end_of_word_over_limit.wat +++ /dev/null @@ -1,28 +0,0 @@ -(module - ;; 1. Define Memory: 1 Page = 64KB = 65,536 bytes - (memory 1) - - ;; Export memory so the host can inspect it if needed - (export "memory" (memory 0)) - - (func $test_straddle (result i32) - ;; Push the address onto the stack. - ;; 65534 is valid, but it is only 2 bytes away from the end. - i32.const 65534 - - ;; Attempt to load an i32 (4 bytes) from that address. - ;; This requires bytes 65534, 65535, 65536, and 65537. - ;; Since 65536 is the first invalid byte, this MUST trap. - i32.load - - ;; Clean up the stack. - ;; The load pushed a value, but we don't care what it is. - drop - - ;; Return 1 to signal "I survived the memory access" - i32.const 1 - ) - - ;; Export the function so you can call it from your host (JS, Python, etc.) - (export "finish" (func $test_straddle)) -) diff --git a/src/test/app/wasm_fixtures/wat/memory_grow_0_page_more_than_8MB.wat b/src/test/app/wasm_fixtures/wat/memory_grow_0_page_more_than_8MB.wat deleted file mode 100644 index d9c149530f..0000000000 --- a/src/test/app/wasm_fixtures/wat/memory_grow_0_page_more_than_8MB.wat +++ /dev/null @@ -1,29 +0,0 @@ -(module - ;; Start at your limit: 128 pages (8MB) - (memory 128) - (export "memory" (memory 0)) - - (func $try_grow_beyond_limit (result i32) - ;; Attempt to grow by 0 page - i32.const 0 - memory.grow - - ;; memory.grow returns: - ;; -1 if the growth failed (Correct behavior for your limit) - ;; 128 (old size) if growth succeeded (Means limit was bypassed) - - ;; Check if result == -1 - i32.const -1 - i32.eq - if - ;; Growth FAILED (Host blocked it). Return -1. - i32.const -1 - return - end - - ;; Growth SUCCEEDED (Host allowed it). Return 1. - i32.const 1 - ) - - (export "finish" (func $try_grow_beyond_limit)) -) diff --git a/src/test/app/wasm_fixtures/wat/memory_grow_0_to_1.wat b/src/test/app/wasm_fixtures/wat/memory_grow_0_to_1.wat deleted file mode 100644 index ff822ffbdc..0000000000 --- a/src/test/app/wasm_fixtures/wat/memory_grow_0_to_1.wat +++ /dev/null @@ -1,26 +0,0 @@ -(module - ;; 1. Define Memory: Start with 0 pages - (memory 0) - - ;; Export memory to host - (export "memory" (memory 0)) - - (func $grow_from_zero (result i32) - ;; We have 0 pages. We want to add 1 page. - ;; Push delta (1) onto stack. - i32.const 1 - - ;; Grow the memory. - ;; If successful: memory becomes 64KB, returns old size (0). - ;; If failed: memory stays 0, returns -1. - memory.grow - - ;; Drop the return value of memory.grow - drop - - ;; Return 1 (as requested) - i32.const 1 - ) - - (export "finish" (func $grow_from_zero)) -) diff --git a/src/test/app/wasm_fixtures/wat/memory_grow_1_page_more_than_8MB.wat b/src/test/app/wasm_fixtures/wat/memory_grow_1_page_more_than_8MB.wat deleted file mode 100644 index 4a245a521c..0000000000 --- a/src/test/app/wasm_fixtures/wat/memory_grow_1_page_more_than_8MB.wat +++ /dev/null @@ -1,29 +0,0 @@ -(module - ;; Start at your limit: 128 pages (8MB) - (memory 128) - (export "memory" (memory 0)) - - (func $try_grow_beyond_limit (result i32) - ;; Attempt to grow by 1 page - i32.const 1 - memory.grow - - ;; memory.grow returns: - ;; -1 if the growth failed (Correct behavior for your limit) - ;; 128 (old size) if growth succeeded (Means limit was bypassed) - - ;; Check if result == -1 - i32.const -1 - i32.eq - if - ;; Growth FAILED (Host blocked it). Return -1. - i32.const -1 - return - end - - ;; Growth SUCCEEDED (Host allowed it). Return 1. - i32.const 1 - ) - - (export "finish" (func $try_grow_beyond_limit)) -) diff --git a/src/test/app/wasm_fixtures/wat/memory_grow_1_to_0.wat b/src/test/app/wasm_fixtures/wat/memory_grow_1_to_0.wat deleted file mode 100644 index fa25154f09..0000000000 --- a/src/test/app/wasm_fixtures/wat/memory_grow_1_to_0.wat +++ /dev/null @@ -1,33 +0,0 @@ -(module - ;; 1. Define Memory: Start with 1 page (64KB) - (memory 1) - - ;; Export memory to host - (export "memory" (memory 0)) - - (func $grow_negative (result i32) - ;; The user pushed -1. In Wasm, this is interpreted as unsigned MAX_UINT32. - ;; This is requesting to add 4,294,967,295 pages (approx 256 TB). - ;; A secure runtime MUST fail this request (return -1) without crashing. - i32.const -1 - - ;; Grow the memory. - ;; Returns: old_size if success, -1 if failure. - memory.grow - - ;; Check if result == -1 (Failure) - i32.const -1 - i32.eq - if - ;; If memory.grow returned -1, we return -1 to signal "Correctly failed". - i32.const -1 - return - end - - ;; If we are here, memory.grow somehow SUCCEEDED (Vulnerability). - ;; We return 1 to signal "Unexpected Success". - i32.const 1 - ) - - (export "finish" (func $grow_negative)) -) diff --git a/src/test/app/wasm_fixtures/wat/memory_init_1_page_more_than_8MB.wat b/src/test/app/wasm_fixtures/wat/memory_init_1_page_more_than_8MB.wat deleted file mode 100644 index 5fd1d09ed1..0000000000 --- a/src/test/app/wasm_fixtures/wat/memory_init_1_page_more_than_8MB.wat +++ /dev/null @@ -1,27 +0,0 @@ -(module - ;; Define memory: 129 pages (> 8MB limit) min, 129 pages max - (memory 129 129) - - ;; Export memory so host can verify size - (export "memory" (memory 0)) - - ;; access last byte of 8MB limit - (func $access_last_byte (result i32) - ;; Math: 128 pages * 64,536 bytes/page = 8,388,608 bytes - ;; Valid indices: 0 to 8,388,607 - - ;; Push the address of the LAST valid byte - i32.const 8388607 - - ;; Load byte from that address - i32.load8_u - - ;; Drop the value (we don't care what it is, just that we could read it) - drop - - ;; Return 1 to indicate success - i32.const 1 - ) - - (export "finish" (func $access_last_byte)) -) diff --git a/src/test/app/wasm_fixtures/wat/memory_last_byte_of_8MB.wat b/src/test/app/wasm_fixtures/wat/memory_last_byte_of_8MB.wat deleted file mode 100644 index a59ec06294..0000000000 --- a/src/test/app/wasm_fixtures/wat/memory_last_byte_of_8MB.wat +++ /dev/null @@ -1,26 +0,0 @@ -(module - ;; Define memory: 128 pages (8MB) min, 128 pages max - (memory 128 128) - - ;; Export memory so host can verify size - (export "memory" (memory 0)) - - (func $access_last_byte (result i32) - ;; Math: 128 pages * 64,536 bytes/page = 8,388,608 bytes - ;; Valid indices: 0 to 8,388,607 - - ;; Push the address of the LAST valid byte - i32.const 8388607 - - ;; Load byte from that address - i32.load8_u - - ;; Drop the value (we don't care what it is, just that we could read it) - drop - - ;; Return 1 to indicate success - i32.const 1 - ) - - (export "finish" (func $access_last_byte)) -) diff --git a/src/test/app/wasm_fixtures/wat/memory_negative_address.wat b/src/test/app/wasm_fixtures/wat/memory_negative_address.wat deleted file mode 100644 index 02c9cb5a3b..0000000000 --- a/src/test/app/wasm_fixtures/wat/memory_negative_address.wat +++ /dev/null @@ -1,23 +0,0 @@ -(module - ;; Define memory: 128 pages (8MB) min, 128 pages max - (memory 128 128) - - ;; Export memory so host can verify size - (export "memory" (memory 0)) - - (func $access_last_byte (result i32) - ;; Push a negative address - i32.const -1 - - ;; Load byte from that address - i32.load8_u - - ;; Drop the value - drop - - ;; Return 1 to indicate success - i32.const 1 - ) - - (export "finish" (func $access_last_byte)) -) diff --git a/src/test/app/wasm_fixtures/wat/memory_offset_over_limit.wat b/src/test/app/wasm_fixtures/wat/memory_offset_over_limit.wat deleted file mode 100644 index d502ddf291..0000000000 --- a/src/test/app/wasm_fixtures/wat/memory_offset_over_limit.wat +++ /dev/null @@ -1,27 +0,0 @@ -(module - ;; 1. Define Memory: 1 Page = 64KB - (memory 1) - - (export "memory" (memory 0)) - - (func $test_offset_overflow (result i32) - ;; 1. Push the base address onto the stack. - ;; We use '0', which is the safest, most valid address possible. - i32.const 0 - - ;; 2. Attempt to load using a static offset. - ;; syntax: i32.load offset=N align=N - ;; We set the offset to 65536 (the size of the memory). - ;; The effective address becomes 0 + 65536 = 65536. - i32.load offset=65536 - - ;; Clean up the stack. - ;; The load pushed a value, but we don't care what it is. - drop - - ;; Return 1 to signal "I survived the memory access" - i32.const 1 - ) - - (export "finish" (func $test_offset_overflow)) -) diff --git a/src/test/app/wasm_fixtures/wat/memory_pointer_at_limit.wat b/src/test/app/wasm_fixtures/wat/memory_pointer_at_limit.wat deleted file mode 100644 index c72cd43739..0000000000 --- a/src/test/app/wasm_fixtures/wat/memory_pointer_at_limit.wat +++ /dev/null @@ -1,22 +0,0 @@ -(module - ;; Define 1 page of memory (64KB = 65,536 bytes) - (memory 1) - - (func $read_edge (result i32) - ;; Push the index of the LAST valid byte - i32.const 65535 - - ;; Load 1 byte (unsigned) - i32.load8_u - - ;; Clean up the stack. - ;; The load pushed a value, but we don't care what it is. - drop - - ;; Return 1 to signal "I survived the memory access" - i32.const 1 - ) - - ;; Export as "finish" as requested - (export "finish" (func $read_edge)) -) diff --git a/src/test/app/wasm_fixtures/wat/memory_pointer_over_limit.wat b/src/test/app/wasm_fixtures/wat/memory_pointer_over_limit.wat deleted file mode 100644 index 12f6ea01a2..0000000000 --- a/src/test/app/wasm_fixtures/wat/memory_pointer_over_limit.wat +++ /dev/null @@ -1,23 +0,0 @@ -(module - ;; Define 1 page of memory (64KB = 65,536 bytes) - (memory 1) - - (func $read_overflow (result i32) - ;; Push the index of the FIRST invalid byte - ;; Memory is 0..65535, so 65536 is out of bounds. - i32.const 65536 - - ;; Load 1 byte (unsigned) - i32.load8_u - - ;; Clean up the stack. - ;; The load pushed a value, but we don't care what it is. - drop - - ;; Return 1 to signal "I survived the memory access" - i32.const 1 - ) - - ;; Export as "finish" as requested - (export "finish" (func $read_overflow)) - ) diff --git a/src/test/app/wasm_fixtures/wat/multi_memory.wat b/src/test/app/wasm_fixtures/wat/multi_memory.wat deleted file mode 100644 index c2f36e253f..0000000000 --- a/src/test/app/wasm_fixtures/wat/multi_memory.wat +++ /dev/null @@ -1,16 +0,0 @@ -(module - ;; Memory 0: Index 0 (Empty) - (memory 0) - - ;; Memory 1: Index 1 (Size 1 page) - ;; If multi-memory is disabled, this line causes a validation error (max 1 memory). - (memory 1) - - (func $finish (result i32) - ;; Query size of Memory Index 1. - ;; Should return 1 (success). - memory.size 1 - ) - - (export "finish" (func $finish)) -) diff --git a/src/test/app/wasm_fixtures/wat/opc_reserved.wat b/src/test/app/wasm_fixtures/wat/opc_reserved.wat deleted file mode 100644 index 0bc61b52c3..0000000000 --- a/src/test/app/wasm_fixtures/wat/opc_reserved.wat +++ /dev/null @@ -1,98 +0,0 @@ -(module - - ;; Type for call_indirect - (type (func (result i32))) - - ;; Memory and table declarations - (memory 1) - (table 1 funcref) - (data (i32.const 0) "test") - (elem (i32.const 0) $test_func) - - ;; Global declarations - (global $g0 (mut i32) (i32.const 0)) - (global $g1 (mut i64) (i64.const 0)) - - ;; Test function for call/call_indirect - (func $test_func (result i32) - i32.const 42 - ) - - - ;; Main function with all instructions in hex order - (func $all_instructions (export "all_instructions") (result i32) - (local $l0 i32) - (local $l1 i64) - - ;; 0x01: nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - i32.const 11 - ) -) diff --git a/src/test/app/wasm_fixtures/wat/proposal_bulk_memory.wat b/src/test/app/wasm_fixtures/wat/proposal_bulk_memory.wat deleted file mode 100644 index 1010c60a61..0000000000 --- a/src/test/app/wasm_fixtures/wat/proposal_bulk_memory.wat +++ /dev/null @@ -1,25 +0,0 @@ -(module - ;; Define 1 page of memory - (memory 1) - (export "memory" (memory 0)) - - (func $test_bulk_ops (result i32) - ;; Setup: Write value 42 at index 0 so we have something to copy - (i32.store8 (i32.const 0) (i32.const 42)) - - ;; Test memory.copy (Opcode 0xFC 0x0A) - ;; Copy 1 byte from offset 0 to offset 100 - (memory.copy - (i32.const 100) ;; Destination Offset - (i32.const 0) ;; Source Offset - (i32.const 1) ;; Size (bytes) - ) - - ;; Verify: Read byte at offset 100. Should be 42. - (i32.load8_u (i32.const 100)) - (i32.const 42) - i32.eq - ) - - (export "finish" (func $test_bulk_ops)) -) diff --git a/src/test/app/wasm_fixtures/wat/proposal_extended_const.wat b/src/test/app/wasm_fixtures/wat/proposal_extended_const.wat deleted file mode 100644 index 1b24f8ff45..0000000000 --- a/src/test/app/wasm_fixtures/wat/proposal_extended_const.wat +++ /dev/null @@ -1,15 +0,0 @@ -(module - ;; 1. Define a global using an EXTENDED constant expression. - ;; MVP only allows (i32.const X). - ;; This proposal allows (i32.add (i32.const X) (i32.const Y)). - (global $g i32 (i32.add (i32.const 10) (i32.const 32))) - - (func $finish (result i32) - ;; 2. verify the global equals 42 - global.get $g - i32.const 42 - i32.eq - ) - - (export "finish" (func $finish)) -) diff --git a/src/test/app/wasm_fixtures/wat/proposal_float_to_int.wat b/src/test/app/wasm_fixtures/wat/proposal_float_to_int.wat deleted file mode 100644 index 3d52bfa399..0000000000 --- a/src/test/app/wasm_fixtures/wat/proposal_float_to_int.wat +++ /dev/null @@ -1,18 +0,0 @@ -(module - (func $test_saturation (result i32) - ;; 1. Push a float that is too big for a 32-bit integer - ;; 1e10 (10 billion) > 2.14 billion (Max i32) - f32.const 1.0e10 - - ;; 2. Attempt saturating conversion (Opcode 0xFC 0x00) - ;; If supported: Clamps to MAX_I32. - ;; If disabled: Validation error (unknown instruction). - i32.trunc_sat_f32_s - - ;; 3. Check if result is MAX_I32 (2147483647) - i32.const 2147483647 - i32.eq - ) - - (export "finish" (func $test_saturation)) -) diff --git a/src/test/app/wasm_fixtures/wat/proposal_gc_struct_new.wat b/src/test/app/wasm_fixtures/wat/proposal_gc_struct_new.wat deleted file mode 100644 index b9a1e5c519..0000000000 --- a/src/test/app/wasm_fixtures/wat/proposal_gc_struct_new.wat +++ /dev/null @@ -1,12 +0,0 @@ -;; generated by wasm-tools print gc_test.wasm that has the following hex -;; 0061736d01000000010b026000017f5f027f017f0103020100070a010666696e69736800000a0a010800fb01011a41010b -(module - (type (;0;) (func (result i32))) - (type (;1;) (struct (field (mut i32)) (field (mut i32)))) - (export "finish" (func 0)) - (func (;0;) (type 0) (result i32) - struct.new_default 1 - drop - i32.const 1 - ) -) diff --git a/src/test/app/wasm_fixtures/wat/proposal_multi_value.wat b/src/test/app/wasm_fixtures/wat/proposal_multi_value.wat deleted file mode 100644 index 30dda4ce12..0000000000 --- a/src/test/app/wasm_fixtures/wat/proposal_multi_value.wat +++ /dev/null @@ -1,22 +0,0 @@ -(module - ;; 1. Function returning TWO values (Multi-Value feature) - (func $get_numbers (result i32 i32) - i32.const 10 - i32.const 20 - ) - - (func $finish (result i32) - ;; Call pushes [10, 20] onto the stack - call $get_numbers - - ;; 2. Block taking TWO parameters (Multi-Value feature) - ;; It consumes the [10, 20] from the stack. - block (param i32 i32) (result i32) - i32.add ;; 10 + 20 = 30 - i32.const 30 ;; Expected result - i32.eq ;; Compare: returns 1 if equal - end - ) - - (export "finish" (func $finish)) -) diff --git a/src/test/app/wasm_fixtures/wat/proposal_mutable_global.wat b/src/test/app/wasm_fixtures/wat/proposal_mutable_global.wat deleted file mode 100644 index 2b1b5ff648..0000000000 --- a/src/test/app/wasm_fixtures/wat/proposal_mutable_global.wat +++ /dev/null @@ -1,25 +0,0 @@ -(module - ;; Define a mutable global initialized to 0 - (global $counter (mut i32) (i32.const 0)) - - ;; EXPORTING a mutable global is the key feature of this proposal. - ;; In strict MVP, exported globals had to be immutable (const). - (export "counter" (global $counter)) - - (func $finish (result i32) - ;; 1. Get current value - global.get $counter - - ;; 2. Add 1 - i32.const 1 - i32.add - - ;; 3. Set new value (Mutation) - global.set $counter - - ;; 4. Return 1 for success - i32.const 1 - ) - - (export "finish" (func $finish)) -) diff --git a/src/test/app/wasm_fixtures/wat/proposal_ref_types.wat b/src/test/app/wasm_fixtures/wat/proposal_ref_types.wat deleted file mode 100644 index c339b9176f..0000000000 --- a/src/test/app/wasm_fixtures/wat/proposal_ref_types.wat +++ /dev/null @@ -1,18 +0,0 @@ -(module - ;; Import a table from the host that holds externrefs - (import "env" "table" (table 1 externref)) - - (func $test_ref_types (result i32) - ;; Store a null externref into the table at index 0 - ;; If reference_types is disabled, 'externref' and 'ref.null' will fail parsing. - (table.set - (i32.const 0) ;; Index - (ref.null extern) ;; Value (Null External Reference) - ) - - ;; Return 1 (Success) - i32.const 1 - ) - - (export "finish" (func $test_ref_types)) -) diff --git a/src/test/app/wasm_fixtures/wat/proposal_sign_ext.wat b/src/test/app/wasm_fixtures/wat/proposal_sign_ext.wat deleted file mode 100644 index ab9061fbb1..0000000000 --- a/src/test/app/wasm_fixtures/wat/proposal_sign_ext.wat +++ /dev/null @@ -1,18 +0,0 @@ -(module - (func $test_sign_ext (result i32) - ;; Push 255 (0x000000FF) onto the stack - i32.const 255 - - ;; Sign-extend from 8-bit to 32-bit - ;; If 255 is treated as an i8, it is -1. - ;; Result should be -1 (0xFFFFFFFF). - ;; Without this proposal, this opcode (0xC0) causes a validation error. - i32.extend8_s - - ;; Check if result is -1 - i32.const -1 - i32.eq - ) - - (export "finish" (func $test_sign_ext)) -) diff --git a/src/test/app/wasm_fixtures/wat/proposal_stringref.wat b/src/test/app/wasm_fixtures/wat/proposal_stringref.wat deleted file mode 100644 index c9f8030faf..0000000000 --- a/src/test/app/wasm_fixtures/wat/proposal_stringref.wat +++ /dev/null @@ -1 +0,0 @@ -;;hard to generate diff --git a/src/test/app/wasm_fixtures/wat/proposal_tail_call.wat b/src/test/app/wasm_fixtures/wat/proposal_tail_call.wat deleted file mode 100644 index f2c883931a..0000000000 --- a/src/test/app/wasm_fixtures/wat/proposal_tail_call.wat +++ /dev/null @@ -1,15 +0,0 @@ -(module - ;; Define a simple function we can tail-call - (func $target (result i32) - i32.const 1 - ) - - (func $finish (result i32) - ;; Try to use the 'return_call' instruction (Opcode 0x12) - ;; If Tail Call proposal is disabled, this fails to Compile/Validate. - ;; If enabled, it jumps to $target, which returns 1. - return_call $target - ) - - (export "finish" (func $finish)) -) diff --git a/src/test/app/wasm_fixtures/wat/start_loop.wat b/src/test/app/wasm_fixtures/wat/start_loop.wat deleted file mode 100644 index c00d173ea4..0000000000 --- a/src/test/app/wasm_fixtures/wat/start_loop.wat +++ /dev/null @@ -1,22 +0,0 @@ -(module - ;; Function 1: The Infinite Loop - (func $run_forever - (loop $infinite - br $infinite - ) - ) - - ;; Function 2: Finish - (func $finish (result i32) - i32.const 1 - ) - - ;; 1. EXPORT the functions (optional, if you want to call them later) - (export "start" (func $run_forever)) - (export "finish" (func $finish)) - - ;; 2. The special start section - ;; This tells the VM: "Run function $run_forever immediately - ;; when this module is instantiated." - (start $run_forever) -) diff --git a/src/test/app/wasm_fixtures/wat/table_0_elements.wat b/src/test/app/wasm_fixtures/wat/table_0_elements.wat deleted file mode 100644 index 7f2d1abc64..0000000000 --- a/src/test/app/wasm_fixtures/wat/table_0_elements.wat +++ /dev/null @@ -1,10 +0,0 @@ -(module - ;; Define a table with exactly 0 entries - (table 0 funcref) - - ;; Standard finish function - (func $finish (result i32) - i32.const 1 - ) - (export "finish" (func $finish)) -) diff --git a/src/test/app/wasm_fixtures/wat/table_2_tables.wat b/src/test/app/wasm_fixtures/wat/table_2_tables.wat deleted file mode 100644 index fd007f410a..0000000000 --- a/src/test/app/wasm_fixtures/wat/table_2_tables.wat +++ /dev/null @@ -1,24 +0,0 @@ -(module - ;; Define a dummy function to put in the tables - (func $dummy) - - ;; TABLE 0: The default table (allowed in MVP) - ;; Size: 1 initial, 1 max - (table $t0 1 1 funcref) - - ;; Initialize Table 0 at index 0 - (elem (table $t0) (i32.const 0) $dummy) - - ;; TABLE 1: The second table (Requires Reference Types proposal) - ;; If strict MVP is enforced, the parser should error here. - (table $t1 1 1 funcref) - - ;; Initialize Table 1 at index 0 - (elem (table $t1) (i32.const 0) $dummy) - - (func $finish (result i32) - ;; If we successfully loaded a module with 2 tables, return 1. - i32.const 1 - ) - (export "finish" (func $finish)) -) diff --git a/src/test/app/wasm_fixtures/wat/table_64_elements.wat b/src/test/app/wasm_fixtures/wat/table_64_elements.wat deleted file mode 100644 index 3ff990b228..0000000000 --- a/src/test/app/wasm_fixtures/wat/table_64_elements.wat +++ /dev/null @@ -1,25 +0,0 @@ -(module - ;; Define a table with exactly 64 entries - (table 64 funcref) - - ;; A dummy function to reference - (func $dummy) - - ;; Initialize the table at offset 0 with 64 references to $dummy - (elem (i32.const 0) - $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 8 - $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 16 - $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 24 - $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 32 - $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 40 - $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 48 - $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 56 - $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 64 - ) - - ;; Standard finish function - (func $finish (result i32) - i32.const 1 - ) - (export "finish" (func $finish)) -) diff --git a/src/test/app/wasm_fixtures/wat/table_65_elements.wat b/src/test/app/wasm_fixtures/wat/table_65_elements.wat deleted file mode 100644 index db3efa0a18..0000000000 --- a/src/test/app/wasm_fixtures/wat/table_65_elements.wat +++ /dev/null @@ -1,25 +0,0 @@ -(module - ;; Define a table with exactly 65 entries - (table 65 funcref) - - ;; A dummy function to reference - (func $dummy) - - ;; Initialize the table at offset 0 with 65 references to $dummy - (elem (i32.const 0) - $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 8 - $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 16 - $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 24 - $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 32 - $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 40 - $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 48 - $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 56 - $dummy $dummy $dummy $dummy $dummy $dummy $dummy $dummy ;; 64 - $dummy ;; 65 (The one that breaks the camel's back) - ) - - (func $finish (result i32) - i32.const 1 - ) - (export "finish" (func $finish)) -) diff --git a/src/test/app/wasm_fixtures/wat/table_uint_max.wat b/src/test/app/wasm_fixtures/wat/table_uint_max.wat deleted file mode 100644 index 31c15b8be2..0000000000 --- a/src/test/app/wasm_fixtures/wat/table_uint_max.wat +++ /dev/null @@ -1,15 +0,0 @@ -(module - ;; Definition: (table ) - ;; We use 0xFFFFFFFF (4,294,967,295), which is the unsigned equivalent of -1. - ;; This tests if the runtime handles the maximum possible u32 value - ;; without integer overflows or attempting a massive allocation. - ;; - ;; Note that using -1 as the table size cannot be parsed by wasm-tools or wat2wasm - (table 0xFFFFFFFF funcref) - - (func $finish (result i32) - ;; If the module loads despite the massive table, return 1. - i32.const 1 - ) - (export "finish" (func $finish)) -) diff --git a/src/test/app/wasm_fixtures/wat/trap_divide_by_0.wat b/src/test/app/wasm_fixtures/wat/trap_divide_by_0.wat deleted file mode 100644 index 8fda7bdae0..0000000000 --- a/src/test/app/wasm_fixtures/wat/trap_divide_by_0.wat +++ /dev/null @@ -1,15 +0,0 @@ -(module - (func $finish (export "finish") (result i32) - ;; Setup for Requirement 2: Divide an i32 by 0 - i32.const 42 ;; Push numerator - i32.const 0 ;; Push denominator (0) - i32.div_s ;; Perform signed division (42 / 0) - - ;; --- NOTE: Execution usually traps (crashes) at the line above --- - - ;; Logic to satisfy Requirement 1: Return i32 = 1 - ;; If execution continued, we would drop the division result and return 1 - drop ;; Clear the stack - i32.const 1 ;; Push the return value - ) -) diff --git a/src/test/app/wasm_fixtures/wat/trap_func_signature_mismatch.wat b/src/test/app/wasm_fixtures/wat/trap_func_signature_mismatch.wat deleted file mode 100644 index a712d1ac8d..0000000000 --- a/src/test/app/wasm_fixtures/wat/trap_func_signature_mismatch.wat +++ /dev/null @@ -1,33 +0,0 @@ -(module - ;; Define a table with 1 slot - (table 1 funcref) - - ;; Define Type A: Takes nothing, returns nothing - (type $type_void (func)) - - ;; Define Type B: Takes nothing, returns i32 - (type $type_i32 (func (result i32))) - - ;; Define a function of Type A - (func $void_func (type $type_void) - nop - ) - - ;; Put Type A function into Table[0] - (elem (i32.const 0) $void_func) - - (func $finish (result i32) - ;; Attempt to call Index 0, but CLAIM we expect Type B (result i32). - ;; The function at Index 0 matches Type A. - ;; TRAP: "indirect call type mismatch" - - ;; 1. Push the table index (0) onto the stack - i32.const 0 - - ;; 2. Call indirect using Type B signature. - ;; This pops the index (0) from the stack. - call_indirect (type $type_i32) - ) - - (export "finish" (func $finish)) -) diff --git a/src/test/app/wasm_fixtures/wat/trap_int_overflow.wat b/src/test/app/wasm_fixtures/wat/trap_int_overflow.wat deleted file mode 100644 index 810236df79..0000000000 --- a/src/test/app/wasm_fixtures/wat/trap_int_overflow.wat +++ /dev/null @@ -1,18 +0,0 @@ -(module - (func $test_int_overflow (result i32) - ;; 1. Push INT_MIN (-2147483648) - ;; In Hex: 0x80000000 - i32.const -2147483648 - - ;; 2. Push -1 - i32.const -1 - - ;; 3. Signed Division - ;; This specific case is the ONLY integer arithmetic operation - ;; (besides divide by zero) that traps in the spec. - ;; Result would be +2147483648, which is too big for signed i32. - i32.div_s - ) - - (export "finish" (func $test_int_overflow)) -) diff --git a/src/test/app/wasm_fixtures/wat/trap_null_call.wat b/src/test/app/wasm_fixtures/wat/trap_null_call.wat deleted file mode 100644 index f806d922f7..0000000000 --- a/src/test/app/wasm_fixtures/wat/trap_null_call.wat +++ /dev/null @@ -1,22 +0,0 @@ -(module - ;; Table size is 1, so Index 0 is VALID bounds. - ;; However, we do NOT initialize it, so it contains 'ref.null'. - (table 1 funcref) - - (type $t (func (result i32))) - - (func $finish (result i32) - ;; Call Index 0. - ;; Bounds check passes (0 < 1). - ;; Null check fails. - ;; TRAP: "uninitialized element" or "undefined element" - - ;; 1. Push the index (0) onto the stack first - i32.const 0 - - ;; 2. Perform the call. This pops the index. - call_indirect (type $t) - ) - - (export "finish" (func $finish)) -) diff --git a/src/test/app/wasm_fixtures/wat/trap_unreachable.wat b/src/test/app/wasm_fixtures/wat/trap_unreachable.wat deleted file mode 100644 index 4bc15569fc..0000000000 --- a/src/test/app/wasm_fixtures/wat/trap_unreachable.wat +++ /dev/null @@ -1,12 +0,0 @@ -(module - (func $finish (result i32) - ;; This instruction explicitly causes a trap. - ;; It consumes no fuel (beyond the instruction itself) and stops execution. - unreachable - - ;; This code is dead and never reached - i32.const 1 - ) - - (export "finish" (func $finish)) -) diff --git a/src/test/app/wasm_fixtures/wat/wasi_get_time.wat b/src/test/app/wasm_fixtures/wat/wasi_get_time.wat deleted file mode 100644 index 049ecf0be1..0000000000 --- a/src/test/app/wasm_fixtures/wat/wasi_get_time.wat +++ /dev/null @@ -1,38 +0,0 @@ -(module - ;; Import clock_time_get from WASI - ;; Signature: (param clock_id precision return_ptr) (result errno) - (import "wasi_snapshot_preview1" "clock_time_get" - (func $clock_time_get (param i32 i64 i32) (result i32)) - ) - - (memory 1) - (export "memory" (memory 0)) - - (func $finish (result i32) - ;; We will store the timestamp (a 64-bit integer) at address 0. - ;; No setup required in memory beforehand! - - ;; Call the function - (call $clock_time_get - (i32.const 0) ;; clock_id: 0 = Realtime (Wallclock) - (i64.const 1000) ;; precision: 1000ns (hint to OS) - (i32.const 0) ;; result_ptr: Write the time to address 0 - ) - - ;; The function returns an 'errno' (error code). - ;; 0 = Success. Anything else = Error. - - ;; Check if errno (top of stack) is 0 - i32.eqz - if (result i32) - ;; Success! The time is now stored in heap[0..8]. - ;; We return 1 as requested. - i32.const 1 - else - ;; Failed (maybe WASI is disabled or clock is missing) - i32.const -1 - end - ) - - (export "finish" (func $finish)) -) diff --git a/src/test/app/wasm_fixtures/wat/wasi_print.wat b/src/test/app/wasm_fixtures/wat/wasi_print.wat deleted file mode 100644 index 18e8a088f4..0000000000 --- a/src/test/app/wasm_fixtures/wat/wasi_print.wat +++ /dev/null @@ -1,59 +0,0 @@ -(module - ;; Import WASI fd_write - ;; Signature: (fd, iovs_ptr, iovs_len, nwritten_ptr) -> errno - (import "wasi_snapshot_preview1" "fd_write" - (func $fd_write (param i32 i32 i32 i32) (result i32)) - ) - - (memory 1) - (export "memory" (memory 0)) - - ;; --- DATA SEGMENTS --- - - ;; 1. The String Data "Hello\n" placed at offset 16 - ;; We assume offset 0-16 is reserved for the IOVec struct - (data (i32.const 16) "Hello\n") - - ;; 2. The IO Vector (struct iovec) placed at offset 0 - ;; Structure: { buf_ptr: u32, buf_len: u32 } - - ;; Field 1: buf_ptr = 16 (Location of "Hello\n") - ;; Encoded in little-endian: 10 00 00 00 - (data (i32.const 0) "\10\00\00\00") - - ;; Field 2: buf_len = 6 (Length of "Hello\n") - ;; Encoded in little-endian: 06 00 00 00 - (data (i32.const 4) "\06\00\00\00") - - (func $finish (result i32) - (local $nwritten_ptr i32) - - ;; We will ask WASI to write the "number of bytes written" to address 24 - ;; (safely after our string data) - i32.const 24 - local.set $nwritten_ptr - - ;; Call fd_write - (call $fd_write - (i32.const 1) ;; fd: 1 = STDOUT - (i32.const 0) ;; iovs_ptr: Address 0 (where we defined the struct) - (i32.const 1) ;; iovs_len: We are passing 1 vector - (local.get $nwritten_ptr) ;; nwritten_ptr: Address 24 - ) - - ;; The function returns an 'errno' (i32). - ;; 0 means Success. - - ;; Check if errno == 0 - i32.eqz - if (result i32) - ;; Success: Return 1 - i32.const 1 - else - ;; Failure: Return -1 - i32.const -1 - end - ) - - (export "finish" (func $finish)) -) diff --git a/src/test/app/wasm_fixtures/wat/wide_arithmetic.wat b/src/test/app/wasm_fixtures/wat/wide_arithmetic.wat deleted file mode 100644 index cd796162ae..0000000000 --- a/src/test/app/wasm_fixtures/wat/wide_arithmetic.wat +++ /dev/null @@ -1,22 +0,0 @@ -(module - (func $finish (result i32) - ;; 1. Push operands - i64.const 1 - i64.const 2 - - ;; 2. Execute Wide Multiplication - ;; If the feature is DISABLED, the parser/validator will trap here - ;; with "unknown instruction" or "invalid opcode". - ;; Input: [i64, i64] -> Output: [i64, i64] - i64.mul_wide_u - - ;; 3. Clean up the stack (drop the two i64 results) - drop - drop - - ;; 4. Return 1 to signal that validation passed - i32.const 1 - ) - - (export "finish" (func $finish)) -) From ca2d9996184773e7bebd99d70ccb4cd3e6fd0343 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Fri, 12 Jun 2026 15:53:12 -0400 Subject: [PATCH 128/137] refactor: rename host functions (#7338) Co-authored-by: xrplf-ai-reviewer[bot] <266832837+xrplf-ai-reviewer[bot]@users.noreply.github.com> --- cspell.config.yaml | 1 + src/libxrpl/tx/wasm/WasmVM.cpp | 130 +- src/test/app/HostFuncImpl_test.cpp | 568 +++---- src/test/app/Wasm_test.cpp | 16 +- .../all_host_functions/Cargo.lock | 48 +- .../all_host_functions/Cargo.toml | 2 +- .../all_host_functions/src/lib.rs | 110 +- .../app/wasm_fixtures/all_keylets/Cargo.lock | 48 +- .../app/wasm_fixtures/all_keylets/Cargo.toml | 2 +- .../app/wasm_fixtures/all_keylets/src/lib.rs | 103 +- src/test/app/wasm_fixtures/bad_align.c | 9 +- .../wasm_fixtures/codecov_tests/Cargo.lock | 48 +- .../wasm_fixtures/codecov_tests/Cargo.toml | 2 +- .../codecov_tests/src/host_bindings_loose.rs | 10 +- .../wasm_fixtures/codecov_tests/src/lib.rs | 520 +++--- src/test/app/wasm_fixtures/copyFixtures.py | 270 +++- src/test/app/wasm_fixtures/fixtures.cpp | 1433 +++++++---------- src/test/app/wasm_fixtures/ledgerSqn.c | 4 +- 18 files changed, 1555 insertions(+), 1769 deletions(-) diff --git a/cspell.config.yaml b/cspell.config.yaml index 6dcf17cb5e..5cb2dd35a8 100644 --- a/cspell.config.yaml +++ b/cspell.config.yaml @@ -329,6 +329,7 @@ words: - wthread - xbridge - xchain + - xfloat - ximinez - XMACRO - xrpkuwait diff --git a/src/libxrpl/tx/wasm/WasmVM.cpp b/src/libxrpl/tx/wasm/WasmVM.cpp index 0f7f947a0a..97b44dba43 100644 --- a/src/libxrpl/tx/wasm/WasmVM.cpp +++ b/src/libxrpl/tx/wasm/WasmVM.cpp @@ -31,76 +31,76 @@ static void setCommonHostFunctions(HostFunctions& hfs, ImportVec& i) { // clang-format off - WASM_IMPORT_FUNC2(i, getLedgerSqn, "get_ledger_sqn", hfs, 60); - WASM_IMPORT_FUNC2(i, getParentLedgerTime, "get_parent_ledger_time", hfs, 60); - WASM_IMPORT_FUNC2(i, getParentLedgerHash, "get_parent_ledger_hash", hfs, 60); - WASM_IMPORT_FUNC2(i, getBaseFee, "get_base_fee", hfs, 60); - WASM_IMPORT_FUNC2(i, isAmendmentEnabled, "amendment_enabled", hfs, 100); + WASM_IMPORT_FUNC2(i, getLedgerSqn, "ldgr_index", hfs, 60); + WASM_IMPORT_FUNC2(i, getParentLedgerTime, "parent_ldgr_time", hfs, 60); + WASM_IMPORT_FUNC2(i, getParentLedgerHash, "parent_ldgr_hash", hfs, 60); + WASM_IMPORT_FUNC2(i, getBaseFee, "base_fee", hfs, 60); + WASM_IMPORT_FUNC2(i, isAmendmentEnabled, "amendment_enabled", hfs, 100); - WASM_IMPORT_FUNC2(i, cacheLedgerObj, "cache_ledger_obj", hfs, 5'000); - WASM_IMPORT_FUNC2(i, getTxField, "get_tx_field", hfs, 70); - WASM_IMPORT_FUNC2(i, getCurrentLedgerObjField, "get_current_ledger_obj_field", hfs, 70); - WASM_IMPORT_FUNC2(i, getLedgerObjField, "get_ledger_obj_field", hfs, 70); - WASM_IMPORT_FUNC2(i, getTxNestedField, "get_tx_nested_field", hfs, 110); - WASM_IMPORT_FUNC2(i, getCurrentLedgerObjNestedField, "get_current_ledger_obj_nested_field", hfs, 110); - WASM_IMPORT_FUNC2(i, getLedgerObjNestedField, "get_ledger_obj_nested_field", hfs, 110); - WASM_IMPORT_FUNC2(i, getTxArrayLen, "get_tx_array_len", hfs, 40); - WASM_IMPORT_FUNC2(i, getCurrentLedgerObjArrayLen, "get_current_ledger_obj_array_len", hfs, 40); - WASM_IMPORT_FUNC2(i, getLedgerObjArrayLen, "get_ledger_obj_array_len", hfs, 40); - WASM_IMPORT_FUNC2(i, getTxNestedArrayLen, "get_tx_nested_array_len", hfs, 70); - WASM_IMPORT_FUNC2(i, getCurrentLedgerObjNestedArrayLen, "get_current_ledger_obj_nested_array_len", hfs, 70); - WASM_IMPORT_FUNC2(i, getLedgerObjNestedArrayLen, "get_ledger_obj_nested_array_len", hfs, 70); + WASM_IMPORT_FUNC2(i, cacheLedgerObj, "cache_le", hfs, 5'000); + WASM_IMPORT_FUNC2(i, getTxField, "tx_field", hfs, 70); + WASM_IMPORT_FUNC2(i, getCurrentLedgerObjField, "home_le_field", hfs, 70); + WASM_IMPORT_FUNC2(i, getLedgerObjField, "le_field", hfs, 70); + WASM_IMPORT_FUNC2(i, getTxNestedField, "tx_inner", hfs, 110); + WASM_IMPORT_FUNC2(i, getCurrentLedgerObjNestedField, "home_le_inner", hfs, 110); + WASM_IMPORT_FUNC2(i, getLedgerObjNestedField, "le_inner", hfs, 110); + WASM_IMPORT_FUNC2(i, getTxArrayLen, "tx_arr_len", hfs, 40); + WASM_IMPORT_FUNC2(i, getCurrentLedgerObjArrayLen, "home_le_arr_len", hfs, 40); + WASM_IMPORT_FUNC2(i, getLedgerObjArrayLen, "le_arr_len", hfs, 40); + WASM_IMPORT_FUNC2(i, getTxNestedArrayLen, "tx_inner_arr_len", hfs, 70); + WASM_IMPORT_FUNC2(i, getCurrentLedgerObjNestedArrayLen, "home_le_inner_arr_len", hfs, 70); + WASM_IMPORT_FUNC2(i, getLedgerObjNestedArrayLen, "le_inner_arr_len", hfs, 70); - WASM_IMPORT_FUNC2(i, checkSignature, "check_sig", hfs, 300); - WASM_IMPORT_FUNC2(i, computeSha512HalfHash, "compute_sha512_half", hfs, 2000); + WASM_IMPORT_FUNC2(i, checkSignature, "check_sig", hfs, 300); + WASM_IMPORT_FUNC2(i, computeSha512HalfHash, "sha512_half", hfs, 2000); - WASM_IMPORT_FUNC2(i, accountKeylet, "account_keylet", hfs, 350); - WASM_IMPORT_FUNC2(i, ammKeylet, "amm_keylet", hfs, 450); - WASM_IMPORT_FUNC2(i, checkKeylet, "check_keylet", hfs, 350); - WASM_IMPORT_FUNC2(i, credentialKeylet, "credential_keylet", hfs, 350); - WASM_IMPORT_FUNC2(i, delegateKeylet, "delegate_keylet", hfs, 350); - WASM_IMPORT_FUNC2(i, depositPreauthKeylet, "deposit_preauth_keylet", hfs, 350); - WASM_IMPORT_FUNC2(i, didKeylet, "did_keylet", hfs, 350); - WASM_IMPORT_FUNC2(i, escrowKeylet, "escrow_keylet", hfs, 350); - WASM_IMPORT_FUNC2(i, lineKeylet, "line_keylet", hfs, 400); - WASM_IMPORT_FUNC2(i, mptIssuanceKeylet, "mpt_issuance_keylet", hfs, 350); - WASM_IMPORT_FUNC2(i, mptokenKeylet, "mptoken_keylet", hfs, 500); - WASM_IMPORT_FUNC2(i, nftOfferKeylet, "nft_offer_keylet", hfs, 350); - WASM_IMPORT_FUNC2(i, offerKeylet, "offer_keylet", hfs, 350); - WASM_IMPORT_FUNC2(i, oracleKeylet, "oracle_keylet", hfs, 350); - WASM_IMPORT_FUNC2(i, paychanKeylet, "paychan_keylet", hfs, 350); - WASM_IMPORT_FUNC2(i, permissionedDomainKeylet, "permissioned_domain_keylet", hfs, 350); - WASM_IMPORT_FUNC2(i, signersKeylet, "signers_keylet", hfs, 350); - WASM_IMPORT_FUNC2(i, ticketKeylet, "ticket_keylet", hfs, 350); - WASM_IMPORT_FUNC2(i, vaultKeylet, "vault_keylet", hfs, 350); + WASM_IMPORT_FUNC2(i, accountKeylet, "accountroot_id", hfs, 350); + WASM_IMPORT_FUNC2(i, ammKeylet, "amm_id", hfs, 450); + WASM_IMPORT_FUNC2(i, checkKeylet, "check_id", hfs, 350); + WASM_IMPORT_FUNC2(i, credentialKeylet, "credential_id", hfs, 350); + WASM_IMPORT_FUNC2(i, delegateKeylet, "delegate_id", hfs, 350); + WASM_IMPORT_FUNC2(i, depositPreauthKeylet, "deposit_preauth_id", hfs, 350); + WASM_IMPORT_FUNC2(i, didKeylet, "did_id", hfs, 350); + WASM_IMPORT_FUNC2(i, escrowKeylet, "escrow_id", hfs, 350); + WASM_IMPORT_FUNC2(i, lineKeylet, "trustline_id", hfs, 400); + WASM_IMPORT_FUNC2(i, mptIssuanceKeylet, "mpt_issuance_id", hfs, 350); + WASM_IMPORT_FUNC2(i, mptokenKeylet, "mptoken_id", hfs, 500); + WASM_IMPORT_FUNC2(i, nftOfferKeylet, "nft_offer_id", hfs, 350); + WASM_IMPORT_FUNC2(i, offerKeylet, "offer_id", hfs, 350); + WASM_IMPORT_FUNC2(i, oracleKeylet, "oracle_id", hfs, 350); + WASM_IMPORT_FUNC2(i, paychanKeylet, "paychan_id", hfs, 350); + WASM_IMPORT_FUNC2(i, permissionedDomainKeylet, "permissioned_domain_id", hfs, 350); + WASM_IMPORT_FUNC2(i, signersKeylet, "signers_id", hfs, 350); + WASM_IMPORT_FUNC2(i, ticketKeylet, "ticket_id", hfs, 350); + WASM_IMPORT_FUNC2(i, vaultKeylet, "vault_id", hfs, 350); - WASM_IMPORT_FUNC2(i, getNFT, "get_nft", hfs, 5'000); - WASM_IMPORT_FUNC2(i, getNFTIssuer, "get_nft_issuer", hfs, 70); - WASM_IMPORT_FUNC2(i, getNFTTaxon, "get_nft_taxon", hfs, 60); - WASM_IMPORT_FUNC2(i, getNFTFlags, "get_nft_flags", hfs, 60); - WASM_IMPORT_FUNC2(i, getNFTTransferFee, "get_nft_transfer_fee", hfs, 60); - WASM_IMPORT_FUNC2(i, getNFTSerial, "get_nft_serial", hfs, 60); + WASM_IMPORT_FUNC2(i, getNFT, "nft_uri", hfs, 5'000); + WASM_IMPORT_FUNC2(i, getNFTIssuer, "nft_issuer", hfs, 70); + WASM_IMPORT_FUNC2(i, getNFTTaxon, "nft_taxon", hfs, 60); + WASM_IMPORT_FUNC2(i, getNFTFlags, "nft_flags", hfs, 60); + WASM_IMPORT_FUNC2(i, getNFTTransferFee, "nft_xfer_fee", hfs, 60); + WASM_IMPORT_FUNC2(i, getNFTSerial, "nft_serial", hfs, 60); - WASM_IMPORT_FUNC (i, trace, hfs, 500); - WASM_IMPORT_FUNC2(i, traceNum, "trace_num", hfs, 500); - WASM_IMPORT_FUNC2(i, traceAccount, "trace_account", hfs, 500); - WASM_IMPORT_FUNC2(i, traceFloat, "trace_opaque_float", hfs, 500); - WASM_IMPORT_FUNC2(i, traceAmount, "trace_amount", hfs, 500); + WASM_IMPORT_FUNC (i, trace, hfs, 500); + WASM_IMPORT_FUNC2(i, traceNum, "trace_num", hfs, 500); + WASM_IMPORT_FUNC2(i, traceAccount, "trace_acct", hfs, 500); + WASM_IMPORT_FUNC2(i, traceFloat, "trace_xfloat", hfs, 500); + WASM_IMPORT_FUNC2(i, traceAmount, "trace_amt", hfs, 500); - WASM_IMPORT_FUNC2(i, floatFromInt, "float_from_int", hfs, 100); - WASM_IMPORT_FUNC2(i, floatFromUint, "float_from_uint", hfs, 130); - WASM_IMPORT_FUNC2(i, floatFromSTAmount, "float_from_stamount", hfs, 150); - WASM_IMPORT_FUNC2(i, floatFromSTNumber, "float_from_stnumber", hfs, 150); - WASM_IMPORT_FUNC2(i, floatToInt, "float_to_int", hfs, 130); - WASM_IMPORT_FUNC2(i, floatToMantExp, "float_to_mant_exp", hfs, 130); - WASM_IMPORT_FUNC2(i, floatFromMantExp, "float_from_mant_exp", hfs, 100); - WASM_IMPORT_FUNC2(i, floatCompare, "float_compare", hfs, 80); - WASM_IMPORT_FUNC2(i, floatAdd, "float_add", hfs, 160); - WASM_IMPORT_FUNC2(i, floatSubtract, "float_subtract", hfs, 160); - WASM_IMPORT_FUNC2(i, floatMultiply, "float_multiply", hfs, 300); - WASM_IMPORT_FUNC2(i, floatDivide, "float_divide", hfs, 300); - WASM_IMPORT_FUNC2(i, floatRoot, "float_root", hfs, 5'500); - WASM_IMPORT_FUNC2(i, floatPower, "float_pow", hfs, 5'500); + WASM_IMPORT_FUNC2(i, floatFromInt, "float_from_int", hfs, 100); + WASM_IMPORT_FUNC2(i, floatFromUint, "float_from_uint", hfs, 130); + WASM_IMPORT_FUNC2(i, floatFromSTAmount, "float_from_stamount", hfs, 150); + WASM_IMPORT_FUNC2(i, floatFromSTNumber, "float_from_stnumber", hfs, 150); + WASM_IMPORT_FUNC2(i, floatToInt, "float_to_int", hfs, 130); + WASM_IMPORT_FUNC2(i, floatToMantExp, "float_to_mant_exp", hfs, 130); + WASM_IMPORT_FUNC2(i, floatFromMantExp, "float_from_mant_exp", hfs, 100); + WASM_IMPORT_FUNC2(i, floatCompare, "float_cmp", hfs, 80); + WASM_IMPORT_FUNC2(i, floatAdd, "float_add", hfs, 160); + WASM_IMPORT_FUNC2(i, floatSubtract, "float_sub", hfs, 160); + WASM_IMPORT_FUNC2(i, floatMultiply, "float_mult", hfs, 300); + WASM_IMPORT_FUNC2(i, floatDivide, "float_div", hfs, 300); + WASM_IMPORT_FUNC2(i, floatRoot, "float_root", hfs, 5'500); + WASM_IMPORT_FUNC2(i, floatPower, "float_pow", hfs, 5'500); // clang-format on } @@ -110,7 +110,7 @@ createWasmImport(HostFunctions& hfs) ImportVec i; setCommonHostFunctions(hfs, i); - WASM_IMPORT_FUNC2(i, updateData, "update_data", hfs, 1000); + WASM_IMPORT_FUNC2(i, updateData, "set_data", hfs, 1000); return i; } diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index f77cbe8a87..700c706198 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -351,7 +351,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.getLedgerSqn(); WasmValVec params(2), result(1); - auto* trap = ww(&import.at("get_ledger_sqn"), params, result, 0, sizeof(std::uint32_t)); + auto* trap = ww(&import.at("ldgr_index"), params, result, 0, sizeof(std::uint32_t)); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == sizeof(std::uint32_t)) && @@ -379,7 +379,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getParentLedgerTime(); WasmValVec params(2), result(1); auto* trap = - ww(&import.at("get_parent_ledger_time"), params, result, 0, sizeof(std::uint32_t)); + ww(&import.at("parent_ldgr_time"), params, result, 0, sizeof(std::uint32_t)); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == sizeof(std::uint32_t)) && @@ -408,8 +408,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.getParentLedgerHash(); WasmValVec params(2), result(1); - auto* trap = - ww(&import.at("get_parent_ledger_hash"), params, result, 0, uint256::size()); + auto* trap = ww(&import.at("parent_ldgr_hash"), params, result, 0, uint256::size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == uint256::size()); @@ -440,7 +439,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getBaseFee(); { WasmValVec params(2), result(1); - auto* trap = ww(&import.at("get_base_fee"), params, result, 0, sizeof(std::uint32_t)); + auto* trap = ww(&import.at("base_fee"), params, result, 0, sizeof(std::uint32_t)); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == sizeof(std::uint32_t)) && @@ -534,8 +533,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); vrt.setBytes(0, accountKeylet.key.data(), uint256::size()); - auto* trap = - ww(&import.at("cache_ledger_obj"), params, result, 0, uint256::size(), -1); + auto* trap = ww(&import.at("cache_le"), params, result, 0, uint256::size(), -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -546,8 +544,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); vrt.setBytes(0, accountKeylet.key.data(), uint256::size()); - auto* trap = - ww(&import.at("cache_ledger_obj"), params, result, 0, uint256::size(), 257); + auto* trap = ww(&import.at("cache_le"), params, result, 0, uint256::size(), 257); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -558,8 +555,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); vrt.setBytes(0, dummyEscrow.key.data(), uint256::size()); - auto* trap = - ww(&import.at("cache_ledger_obj"), params, result, 0, uint256::size(), 0); + auto* trap = ww(&import.at("cache_le"), params, result, 0, uint256::size(), 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -571,8 +567,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); vrt.setBytes(0, accountKeylet.key.data(), uint256::size()); - auto* trap = - ww(&import.at("cache_ledger_obj"), params, result, 0, uint256::size(), 0); + auto* trap = ww(&import.at("cache_le"), params, result, 0, uint256::size(), 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); @@ -584,8 +579,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.cacheLedgerObj(accountKeylet.key, i); WasmValVec params(3), result(1); vrt.setBytes(0, accountKeylet.key.data(), uint256::size()); - auto* trap = - ww(&import.at("cache_ledger_obj"), params, result, 0, uint256::size(), i); + auto* trap = ww(&import.at("cache_le"), params, result, 0, uint256::size(), i); if (!(BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECTS( @@ -599,8 +593,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); vrt.setBytes(0, accountKeylet.key.data(), uint256::size()); - auto* trap = - ww(&import.at("cache_ledger_obj"), params, result, 0, uint256::size(), 0); + auto* trap = ww(&import.at("cache_le"), params, result, 0, uint256::size(), 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -621,8 +614,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.cacheLedgerObj(accountKeylet.key, 0); WasmValVec params(3), result(1); vrt.setBytes(0, accountKeylet.key.data(), uint256::size()); - auto* trap = - ww(&import.at("cache_ledger_obj"), params, result, 0, uint256::size(), 0); + auto* trap = ww(&import.at("cache_le"), params, result, 0, uint256::size(), 0); if (!(BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECTS( @@ -636,8 +628,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); vrt.setBytes(0, accountKeylet.key.data(), uint256::size()); - auto* trap = - ww(&import.at("cache_ledger_obj"), params, result, 0, uint256::size(), 0); + auto* trap = ww(&import.at("cache_le"), params, result, 0, uint256::size(), 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -682,7 +673,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(&import.at("get_tx_field"), + ww(&import.at("tx_field"), params, result, sfAccount.getCode(), @@ -699,7 +690,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(&import.at("get_tx_field"), + ww(&import.at("tx_field"), params, result, sfOwner.getCode(), @@ -716,12 +707,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(&import.at("get_tx_field"), - params, - result, - sfTransactionType.getCode(), - 0, - 256); + ww(&import.at("tx_field"), params, result, sfTransactionType.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 > 0); @@ -733,8 +719,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getTxField(sfOfferSequence); { WasmValVec params(3), result(1); - auto* trap = ww( - &import.at("get_tx_field"), params, result, sfOfferSequence.getCode(), 0, 256); + auto* trap = + ww(&import.at("tx_field"), params, result, sfOfferSequence.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 > 0); @@ -747,7 +733,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(&import.at("get_tx_field"), params, result, sfDestination.getCode(), 0, 256); + ww(&import.at("tx_field"), params, result, sfDestination.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -757,8 +743,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getTxField(sfMemos); { WasmValVec params(3), result(1); - auto* trap = - ww(&import.at("get_tx_field"), params, result, sfMemos.getCode(), 0, 256); + auto* trap = ww(&import.at("tx_field"), params, result, sfMemos.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -768,8 +753,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getTxField(sfCredentialIDs); { WasmValVec params(3), result(1); - auto* trap = ww( - &import.at("get_tx_field"), params, result, sfCredentialIDs.getCode(), 0, 256); + auto* trap = + ww(&import.at("tx_field"), params, result, sfCredentialIDs.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECTS( @@ -781,7 +766,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(&import.at("get_tx_field"), params, result, kSfInvalid.getCode(), 0, 256); + ww(&import.at("tx_field"), params, result, kSfInvalid.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -792,7 +777,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(&import.at("get_tx_field"), params, result, kSfGeneric.getCode(), 0, 256); + ww(&import.at("tx_field"), params, result, kSfGeneric.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -817,8 +802,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getTxField(sfAsset); { WasmValVec params(3), result(1); - auto* trap = - ww(&import.at("get_tx_field"), params, result, sfAsset.getCode(), 0, 256); + auto* trap = ww(&import.at("tx_field"), params, result, sfAsset.getCode(), 0, 256); std::vector const expectedAsset(20, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && @@ -831,8 +815,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getTxField(sfAsset2); { WasmValVec params(3), result(1); - auto* trap = - ww(&import.at("get_tx_field"), params, result, sfAsset2.getCode(), 0, 256); + auto* trap = ww(&import.at("tx_field"), params, result, sfAsset2.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 > 0); @@ -860,8 +843,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getTxField(sfAsset); { WasmValVec params(3), result(1); - auto* trap = - ww(&import.at("get_tx_field"), params, result, sfAsset.getCode(), 0, 256); + auto* trap = ww(&import.at("tx_field"), params, result, sfAsset.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECT(result[0].of.i32 > 0)) @@ -875,8 +857,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getTxField(sfAsset2); { WasmValVec params(3), result(1); - auto* trap = - ww(&import.at("get_tx_field"), params, result, sfAsset2.getCode(), 0, 256); + auto* trap = ww(&import.at("tx_field"), params, result, sfAsset2.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECT(result[0].of.i32 > 0)) @@ -905,7 +886,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(&import.at("get_tx_field"), params, result, sfAssetScale.getCode(), 0, 256); + ww(&import.at("tx_field"), params, result, sfAssetScale.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECT(result[0].of.i32 > 0)) @@ -948,12 +929,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(&import.at("get_current_ledger_obj_field"), - params, - result, - sfAccount.getCode(), - 0, - 256); + ww(&import.at("home_le_field"), params, result, sfAccount.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECTS(result[0].of.i32 > 0, std::to_string(result[0].of.i32))) @@ -968,12 +944,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(&import.at("get_current_ledger_obj_field"), - params, - result, - sfAmount.getCode(), - 0, - 256); + ww(&import.at("home_le_field"), params, result, sfAmount.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECT(result[0].of.i32 > 0)) @@ -988,12 +959,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(&import.at("get_current_ledger_obj_field"), - params, - result, - sfPreviousTxnID.getCode(), - 0, - 256); + ww(&import.at("home_le_field"), params, result, sfPreviousTxnID.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECT(result[0].of.i32 > 0)) @@ -1007,13 +973,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getCurrentLedgerObjField(sfOwner); { WasmValVec params(3), result(1); - auto* trap = - ww(&import.at("get_current_ledger_obj_field"), - params, - result, - sfOwner.getCode(), - 0, - 256); + auto* trap = ww(&import.at("home_le_field"), params, result, sfOwner.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -1032,12 +992,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); auto* trap = - ww(&import2.at("get_current_ledger_obj_field"), - params, - result, - sfAccount.getCode(), - 0, - 256); + ww(&import2.at("home_le_field"), params, result, sfAccount.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -1074,7 +1029,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); vrt.setBytes(0, accountKeylet.key.data(), uint256::size()); - auto* trap = ww(&import.at("cache_ledger_obj"), params, result, 0, uint256::size(), 1); + auto* trap = ww(&import.at("cache_le"), params, result, 0, uint256::size(), 1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); @@ -1083,8 +1038,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getLedgerObjField(1, sfAccount); { WasmValVec params(4), result(1); - auto* trap = ww( - &import.at("get_ledger_obj_field"), params, result, 1, sfAccount.getCode(), 0, 256); + auto* trap = ww(&import.at("le_field"), params, result, 1, sfAccount.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECTS(result[0].of.i32 > 0, std::to_string(result[0].of.i32))) @@ -1098,8 +1052,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getLedgerObjField(1, sfBalance); { WasmValVec params(4), result(1); - auto* trap = ww( - &import.at("get_ledger_obj_field"), params, result, 1, sfBalance.getCode(), 0, 256); + auto* trap = ww(&import.at("le_field"), params, result, 1, sfBalance.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECT(result[0].of.i32 > 0)) @@ -1113,8 +1066,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getLedgerObjField(0, sfAccount); { WasmValVec params(4), result(1); - auto* trap = ww( - &import.at("get_ledger_obj_field"), params, result, 0, sfAccount.getCode(), 0, 256); + auto* trap = ww(&import.at("le_field"), params, result, 0, sfAccount.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -1125,13 +1077,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(4), result(1); auto* trap = - ww(&import.at("get_ledger_obj_field"), - params, - result, - 257, - sfAccount.getCode(), - 0, - 256); + ww(&import.at("le_field"), params, result, 257, sfAccount.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -1141,8 +1087,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getLedgerObjField(2, sfAccount); { WasmValVec params(4), result(1); - auto* trap = ww( - &import.at("get_ledger_obj_field"), params, result, 2, sfAccount.getCode(), 0, 256); + auto* trap = ww(&import.at("le_field"), params, result, 2, sfAccount.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -1152,8 +1097,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getLedgerObjField(1, sfOwner); { WasmValVec params(4), result(1); - auto* trap = ww( - &import.at("get_ledger_obj_field"), params, result, 1, sfOwner.getCode(), 0, 256); + auto* trap = ww(&import.at("le_field"), params, result, 1, sfOwner.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -1206,7 +1150,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(4), result(1); auto* trap = - ww(&import.at("get_tx_nested_field"), + ww(&import.at("tx_inner"), params, result, 0, @@ -1235,7 +1179,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(4), result(1); auto* trap = - ww(&import.at("get_tx_nested_field"), + ww(&import.at("tx_inner"), params, result, 0, @@ -1261,7 +1205,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(4), result(1); auto* trap = - ww(&import.at("get_tx_nested_field"), + ww(&import.at("tx_inner"), params, result, 0, @@ -1287,8 +1231,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, locatorVec.data(), sizeof(int32_t) + 1); WasmValVec params(4), result(1); - auto* trap = - ww(&import.at("get_tx_nested_field"), params, result, 1, sizeof(int32_t), 256, 256); + auto* trap = ww(&import.at("tx_inner"), params, result, 1, sizeof(int32_t), 256, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECTS(result[0].of.i32 > 0, std::to_string(result[0].of.i32))) @@ -1306,7 +1249,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(4), result(1); // hfs.getTxNestedField(locator); auto* trap = - ww(&import.at("get_tx_nested_field"), + ww(&import.at("tx_inner"), params, result, 0, @@ -1433,7 +1376,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, locatorVec.data(), 3); WasmValVec params(4), result(1); - auto* trap = ww(&import.at("get_tx_nested_field"), params, result, 0, 3, 256, 256); + auto* trap = ww(&import.at("tx_inner"), params, result, 0, 3, 256, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -1474,7 +1417,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(4), result(1); auto* trap = - ww(&import.at("get_current_ledger_obj_nested_field"), + ww(&import.at("home_le_inner"), params, result, 0, @@ -1498,7 +1441,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(4), result(1); // hfs.getCurrentLedgerObjNestedField(locator); auto* trap = - ww(&import.at("get_current_ledger_obj_nested_field"), + ww(&import.at("home_le_inner"), params, result, 0, @@ -1530,8 +1473,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // Locator for empty locator { WasmValVec params(4), result(1); - auto* trap = ww( - &import.at("get_current_ledger_obj_nested_field"), params, result, 0, 0, 256, 256); + auto* trap = ww(&import.at("home_le_inner"), params, result, 0, 0, 256, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -1545,8 +1487,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, malformedLocatorVec.data(), 3); WasmValVec params(4), result(1); - auto* trap = ww( - &import.at("get_current_ledger_obj_nested_field"), params, result, 0, 3, 256, 256); + auto* trap = ww(&import.at("home_le_inner"), params, result, 0, 3, 256, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -1567,7 +1508,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(4), result(1); auto* trap = - ww(&import2.at("get_current_ledger_obj_nested_field"), + ww(&import2.at("home_le_inner"), params, result, 0, @@ -1611,7 +1552,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); vrt.setBytes(0, signerListKeylet.key.data(), uint256::size()); - auto* trap = ww(&import.at("cache_ledger_obj"), params, result, 0, uint256::size(), 1); + auto* trap = ww(&import.at("cache_le"), params, result, 0, uint256::size(), 1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); } @@ -1624,7 +1565,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(5), result(1); auto* trap = - ww(&import.at("get_ledger_obj_nested_field"), + ww(&import.at("le_inner"), params, result, 1, @@ -1650,7 +1591,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(5), result(1); auto* trap = - ww(&import.at("get_ledger_obj_nested_field"), + ww(&import.at("le_inner"), params, result, 1, @@ -1676,7 +1617,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(5), result(1); auto* trap = - ww(&import.at("get_ledger_obj_nested_field"), + ww(&import.at("le_inner"), params, result, 1, @@ -1703,7 +1644,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(5), result(1); auto* trap = - ww(&import.at("get_ledger_obj_nested_field"), + ww(&import.at("le_inner"), params, result, 1, @@ -1730,7 +1671,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(5), result(1); auto* trap = - ww(&import.at("get_ledger_obj_nested_field"), + ww(&import.at("le_inner"), params, result, slot, @@ -1799,8 +1740,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getLedgerObjNestedField(1, locator); vrt.setBytes(0, locatorVec.data(), 3); WasmValVec params(5), result(1); - auto* trap = - ww(&import.at("get_ledger_obj_nested_field"), params, result, 1, 0, 3, 256, 256); + auto* trap = ww(&import.at("le_inner"), params, result, 1, 0, 3, 256, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -1854,7 +1794,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getTxArrayLen(sfMemos); { WasmValVec params(1), result(1); - auto* trap = ww(&import.at("get_tx_array_len"), params, result, sfMemos.getCode()); + auto* trap = ww(&import.at("tx_arr_len"), params, result, sfMemos.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECT(result[0].of.i32 > 0)) @@ -1865,7 +1805,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getTxArrayLen(sfAccount); { WasmValVec params(1), result(1); - auto* trap = ww(&import.at("get_tx_array_len"), params, result, sfAccount.getCode()); + auto* trap = ww(&import.at("tx_arr_len"), params, result, sfAccount.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::NoArray)); @@ -1875,7 +1815,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getTxArrayLen(sfSigners); { WasmValVec params(1), result(1); - auto* trap = ww(&import.at("get_tx_array_len"), params, result, sfSigners.getCode()); + auto* trap = ww(&import.at("tx_arr_len"), params, result, sfSigners.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT( @@ -1886,8 +1826,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getTxArrayLen(sfCredentialIDs); { WasmValVec params(1), result(1); - auto* trap = - ww(&import.at("get_tx_array_len"), params, result, sfCredentialIDs.getCode()); + auto* trap = ww(&import.at("tx_arr_len"), params, result, sfCredentialIDs.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECT(result[0].of.i32 > 0)) @@ -1922,10 +1861,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(1), result(1); auto* trap = - ww(&import.at("get_current_ledger_obj_array_len"), - params, - result, - sfSignerEntries.getCode()); + ww(&import.at("home_le_arr_len"), params, result, sfSignerEntries.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECT(result[0].of.i32 > 0)) @@ -1935,8 +1871,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getCurrentLedgerObjArrayLen(sfMemos); { WasmValVec params(1), result(1); - auto* trap = ww( - &import.at("get_current_ledger_obj_array_len"), params, result, sfMemos.getCode()); + auto* trap = ww(&import.at("home_le_arr_len"), params, result, sfMemos.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT( @@ -1947,11 +1882,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getCurrentLedgerObjArrayLen(sfAccount); { WasmValVec params(1), result(1); - auto* trap = - ww(&import.at("get_current_ledger_obj_array_len"), - params, - result, - sfAccount.getCode()); + auto* trap = ww(&import.at("home_le_arr_len"), params, result, sfAccount.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::NoArray)); @@ -1967,8 +1898,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // auto const len = dummyHfs.getCurrentLedgerObjArrayLen(sfMemos); WasmValVec params(1), result(1); - auto* trap = ww( - &import2.at("get_current_ledger_obj_array_len"), params, result, sfMemos.getCode()); + auto* trap = ww(&import2.at("home_le_arr_len"), params, result, sfMemos.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT( @@ -2004,7 +1934,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); vrt.setBytes(0, signerListKeylet.key.data(), uint256::size()); - auto* trap = ww(&import.at("cache_ledger_obj"), params, result, 0, uint256::size(), 1); + auto* trap = ww(&import.at("cache_le"), params, result, 0, uint256::size(), 1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); } @@ -2012,12 +1942,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.getLedgerObjArrayLen(1, sfSignerEntries); WasmValVec params(2), result(1); - auto* trap = - ww(&import.at("get_ledger_obj_array_len"), - params, - result, - 1, - sfSignerEntries.getCode()); + auto* trap = ww(&import.at("le_arr_len"), params, result, 1, sfSignerEntries.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); if (BEAST_EXPECT(result[0].of.i32 > 0)) @@ -2029,12 +1954,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.getLedgerObjArrayLen(0, sfSignerEntries); WasmValVec params(2), result(1); - auto* trap = - ww(&import.at("get_ledger_obj_array_len"), - params, - result, - 0, - sfSignerEntries.getCode()); + auto* trap = ww(&import.at("le_arr_len"), params, result, 0, sfSignerEntries.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::SlotOutRange)); @@ -2044,8 +1964,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // Should return error for non-array field // hfs.getLedgerObjArrayLen(1, sfAccount); WasmValVec params(2), result(1); - auto* trap = - ww(&import.at("get_ledger_obj_array_len"), params, result, 1, sfAccount.getCode()); + auto* trap = ww(&import.at("le_arr_len"), params, result, 1, sfAccount.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::NoArray)); @@ -2055,12 +1974,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // Should return error for empty slot // hfs.getLedgerObjArrayLen(2, sfSignerEntries); WasmValVec params(2), result(1); - auto* trap = - ww(&import.at("get_ledger_obj_array_len"), - params, - result, - 2, - sfSignerEntries.getCode()); + auto* trap = ww(&import.at("le_arr_len"), params, result, 2, sfSignerEntries.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT(result[0].of.i32 == static_cast(HostFunctionError::EmptySlot)); @@ -2070,8 +1984,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // Should return error for missing array field // hfs.getLedgerObjArrayLen(1, sfMemos); WasmValVec params(2), result(1); - auto* trap = - ww(&import.at("get_ledger_obj_array_len"), params, result, 1, sfMemos.getCode()); + auto* trap = ww(&import.at("le_arr_len"), params, result, 1, sfMemos.getCode()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32); BEAST_EXPECT( @@ -2111,7 +2024,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(2), result(1); auto* trap = - ww(&import.at("get_tx_nested_array_len"), + ww(&import.at("tx_inner_arr_len"), params, result, 0, @@ -2129,7 +2042,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(2), result(1); auto* trap = - ww(&import.at("get_tx_nested_array_len"), + ww(&import.at("tx_inner_arr_len"), params, result, 0, @@ -2176,7 +2089,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(2), result(1); auto* trap = - ww(&import.at("get_current_ledger_obj_nested_array_len"), + ww(&import.at("home_le_inner_arr_len"), params, result, 0, @@ -2194,7 +2107,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(2), result(1); auto* trap = - ww(&import.at("get_current_ledger_obj_nested_array_len"), + ww(&import.at("home_le_inner_arr_len"), params, result, 0, @@ -2223,7 +2136,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt2.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(2), result(1); auto* trap = - ww(&import2.at("get_current_ledger_obj_nested_array_len"), + ww(&import2.at("home_le_inner_arr_len"), params, result, 0, @@ -2263,7 +2176,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { WasmValVec params(3), result(1); vrt.setBytes(0, signerListKeylet.key.data(), uint256::size()); - auto* trap = ww(&import.at("cache_ledger_obj"), params, result, 0, uint256::size(), 1); + auto* trap = ww(&import.at("cache_le"), params, result, 0, uint256::size(), 1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); } @@ -2275,7 +2188,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(3), result(1); auto* trap = - ww(&import.at("get_ledger_obj_nested_array_len"), + ww(&import.at("le_inner_arr_len"), params, result, 1, @@ -2295,7 +2208,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, locatorVec.data(), locatorVec.size() * sizeof(int32_t)); WasmValVec params(3), result(1); auto* trap = - ww(&import.at("get_ledger_obj_nested_array_len"), + ww(&import.at("le_inner_arr_len"), params, result, slot, @@ -2328,7 +2241,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getLedgerObjNestedArrayLen(1, malformedLocator); vrt.setBytes(0, locatorVec.data(), 3); WasmValVec params(3), result(1); - auto* trap = ww(&import.at("get_ledger_obj_nested_array_len"), params, result, 1, 0, 3); + auto* trap = ww(&import.at("le_inner_arr_len"), params, result, 1, 0, 3); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -2368,7 +2281,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { vrt.setBytes(0, data.data(), data.size()); WasmValVec params(2), result(1); - auto* trap = ww(&import.at("update_data"), params, result, 0, data.size()); + auto* trap = ww(&import.at("set_data"), params, result, 0, data.size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == data.size()); @@ -2381,7 +2294,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { vrt.setBytes(0, bigData.data(), bigData.size()); WasmValVec params(2), result(1); - auto* trap = ww(&import.at("update_data"), params, result, 0, bigData.size()); + auto* trap = ww(&import.at("set_data"), params, result, 0, bigData.size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -2568,13 +2481,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, data.data(), data.size()); WasmValVec params(4), result(1); auto* trap = - ww(&import.at("compute_sha512_half"), - params, - result, - 0, - data.size(), - 256, - uint256::size()); + ww(&import.at("sha512_half"), params, result, 0, data.size(), 256, uint256::size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == uint256::size()); @@ -2615,14 +2522,14 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { auto const expected = keylet::account(masterID); WasmValVec params(4), result(1); - auto* trap = ww(&imp.at("account_keylet"), params, result, masterID, 1024, 32); + auto* trap = ww(&imp.at("accountroot_id"), params, result, masterID, 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 2); BEAST_EXPECT(compareKeylet(actual, expected)); } - auto* trap2 = ww(&imp.at("account_keylet"), params, result, xrpAccount(), 1024, 32); + auto* trap2 = ww(&imp.at("accountroot_id"), params, result, xrpAccount(), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); @@ -2632,20 +2539,19 @@ struct HostFuncImpl_test : public beast::unit_test::Suite auto const expected = keylet::amm(xrpIssue(), usdIssue); WasmValVec params(6), result(1); - auto* trap = ww(&imp.at("amm_keylet"), params, result, xrpIssue(), usdIssue, 1024, 32); + auto* trap = ww(&imp.at("amm_id"), params, result, xrpIssue(), usdIssue, 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); BEAST_EXPECT(compareKeylet(actual, expected)); } - auto* trap2 = - ww(&imp.at("amm_keylet"), params, result, xrpIssue(), xrpIssue(), 1024, 32); + auto* trap2 = ww(&imp.at("amm_id"), params, result, xrpIssue(), xrpIssue(), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidParams)); - auto* trap3 = ww(&imp.at("amm_keylet"), params, result, baseMpt, xrpIssue(), 1024, 32); + auto* trap3 = ww(&imp.at("amm_id"), params, result, baseMpt, xrpIssue(), 1024, 32); BEAST_EXPECT( !trap3 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidParams)); @@ -2654,8 +2560,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { auto const expected = keylet::check(masterID, 1u); WasmValVec params(6), result(1); - auto* trap = - ww(&imp.at("check_keylet"), params, result, masterID, toBytes(1u), 1024, 32); + auto* trap = ww(&imp.at("check_id"), params, result, masterID, toBytes(1u), 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); @@ -2663,7 +2568,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } auto* trap2 = - ww(&imp.at("check_keylet"), params, result, xrpAccount(), toBytes(1u), 1024, 32); + ww(&imp.at("check_id"), params, result, xrpAccount(), toBytes(1u), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); @@ -2675,15 +2580,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { auto const expected = keylet::credential(masterID, masterID, credType); WasmValVec params(8), result(1); - auto* trap = - ww(&imp.at("credential_keylet"), - params, - result, - masterID, - masterID, - credType, - 1024, - 32); + auto* trap = ww( + &imp.at("credential_id"), params, result, masterID, masterID, credType, 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 6); @@ -2696,7 +2594,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite Slice const longCredType(longCredTypeStr.data(), longCredTypeStr.size()); static_assert(longCredTypeStr.size() > kMaxCredentialTypeLength); auto* trap2 = - ww(&imp.at("credential_keylet"), + ww(&imp.at("credential_id"), params, result, masterID, @@ -2709,7 +2607,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite result[0].of.i32 == static_cast(HostFunctionError::InvalidParams)); auto* trap3 = - ww(&imp.at("credential_keylet"), + ww(&imp.at("credential_id"), params, result, xrpAccount(), @@ -2722,7 +2620,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); auto* trap4 = - ww(&imp.at("credential_keylet"), + ww(&imp.at("credential_id"), params, result, masterID, @@ -2738,14 +2636,14 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { auto const expected = keylet::did(masterID); WasmValVec params(4), result(1); - auto* trap = ww(&imp.at("did_keylet"), params, result, masterID, 1024, 32); + auto* trap = ww(&imp.at("did_id"), params, result, masterID, 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 2); BEAST_EXPECT(compareKeylet(actual, expected)); } - auto* trap2 = ww(&imp.at("did_keylet"), params, result, xrpAccount(), 1024, 32); + auto* trap2 = ww(&imp.at("did_id"), params, result, xrpAccount(), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); @@ -2754,28 +2652,26 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { auto const expected = keylet::delegate(masterID, alice.id()); WasmValVec params(6), result(1); - auto* trap = - ww(&imp.at("delegate_keylet"), params, result, masterID, alice.id(), 1024, 32); + auto* trap = ww(&imp.at("delegate_id"), params, result, masterID, alice.id(), 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); BEAST_EXPECT(compareKeylet(actual, expected)); } - auto* trap2 = - ww(&imp.at("delegate_keylet"), params, result, masterID, masterID, 1024, 32); + auto* trap2 = ww(&imp.at("delegate_id"), params, result, masterID, masterID, 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidParams)); auto* trap3 = - ww(&imp.at("delegate_keylet"), params, result, masterID, xrpAccount(), 1024, 32); + ww(&imp.at("delegate_id"), params, result, masterID, xrpAccount(), 1024, 32); BEAST_EXPECT( !trap3 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); auto* trap4 = - ww(&imp.at("delegate_keylet"), params, result, xrpAccount(), masterID, 1024, 32); + ww(&imp.at("delegate_id"), params, result, xrpAccount(), masterID, 1024, 32); BEAST_EXPECT( !trap4 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); @@ -2784,8 +2680,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { auto const expected = keylet::depositPreauth(masterID, alice.id()); WasmValVec params(6), result(1); - auto* trap = ww( - &imp.at("deposit_preauth_keylet"), params, result, masterID, alice.id(), 1024, 32); + auto* trap = + ww(&imp.at("deposit_preauth_id"), params, result, masterID, alice.id(), 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); @@ -2793,31 +2689,19 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } auto* trap2 = - ww(&imp.at("deposit_preauth_keylet"), params, result, masterID, masterID, 1024, 32); + ww(&imp.at("deposit_preauth_id"), params, result, masterID, masterID, 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidParams)); auto* trap3 = - ww(&imp.at("deposit_preauth_keylet"), - params, - result, - masterID, - xrpAccount(), - 1024, - 32); + ww(&imp.at("deposit_preauth_id"), params, result, masterID, xrpAccount(), 1024, 32); BEAST_EXPECT( !trap3 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); auto* trap4 = - ww(&imp.at("deposit_preauth_keylet"), - params, - result, - xrpAccount(), - masterID, - 1024, - 32); + ww(&imp.at("deposit_preauth_id"), params, result, xrpAccount(), masterID, 1024, 32); BEAST_EXPECT( !trap4 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); @@ -2826,8 +2710,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { auto const expected = keylet::escrow(masterID, 1u); WasmValVec params(6), result(1); - auto* trap = - ww(&imp.at("escrow_keylet"), params, result, masterID, toBytes(1u), 1024, 32); + auto* trap = ww(&imp.at("escrow_id"), params, result, masterID, toBytes(1u), 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); @@ -2835,7 +2718,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } auto* trap2 = - ww(&imp.at("escrow_keylet"), params, result, xrpAccount(), toBytes(1u), 1024, 32); + ww(&imp.at("escrow_id"), params, result, xrpAccount(), toBytes(1u), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); @@ -2846,7 +2729,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite auto const expected = keylet::line(masterID, alice.id(), usd); WasmValVec params(8), result(1); auto* trap = - ww(&imp.at("line_keylet"), params, result, masterID, alice.id(), usd, 1024, 32); + ww(&imp.at("trustline_id"), params, result, masterID, alice.id(), usd, 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 6); @@ -2854,25 +2737,25 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } auto* trap2 = - ww(&imp.at("line_keylet"), params, result, masterID, masterID, usd, 1024, 32); + ww(&imp.at("trustline_id"), params, result, masterID, masterID, usd, 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidParams)); auto* trap3 = - ww(&imp.at("line_keylet"), params, result, masterID, xrpAccount(), usd, 1024, 32); + ww(&imp.at("trustline_id"), params, result, masterID, xrpAccount(), usd, 1024, 32); BEAST_EXPECT( !trap3 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); auto* trap4 = - ww(&imp.at("line_keylet"), params, result, xrpAccount(), masterID, usd, 1024, 32); + ww(&imp.at("trustline_id"), params, result, xrpAccount(), masterID, usd, 1024, 32); BEAST_EXPECT( !trap4 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); auto* trap5 = - ww(&imp.at("line_keylet"), + ww(&imp.at("trustline_id"), params, result, masterID, @@ -2889,7 +2772,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite auto const expected = keylet::mptIssuance(1u, masterID); WasmValVec params(6), result(1); auto* trap = - ww(&imp.at("mpt_issuance_keylet"), params, result, masterID, toBytes(1u), 1024, 32); + ww(&imp.at("mpt_issuance_id"), params, result, masterID, toBytes(1u), 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); @@ -2897,13 +2780,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } auto* trap2 = - ww(&imp.at("mpt_issuance_keylet"), - params, - result, - xrpAccount(), - toBytes(1u), - 1024, - 32); + ww(&imp.at("mpt_issuance_id"), params, result, xrpAccount(), toBytes(1u), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); @@ -2912,22 +2789,20 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { auto const expected = keylet::mptoken(baseMpt, alice.id()); WasmValVec params(6), result(1); - auto* trap = - ww(&imp.at("mptoken_keylet"), params, result, baseMpt, alice.id(), 1024, 32); + auto* trap = ww(&imp.at("mptoken_id"), params, result, baseMpt, alice.id(), 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); BEAST_EXPECT(compareKeylet(actual, expected)); } - auto* trap2 = - ww(&imp.at("mptoken_keylet"), params, result, MPTID{}, alice.id(), 1024, 32); + auto* trap2 = ww(&imp.at("mptoken_id"), params, result, MPTID{}, alice.id(), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidParams)); auto* trap3 = - ww(&imp.at("mptoken_keylet"), params, result, baseMpt, xrpAccount(), 1024, 32); + ww(&imp.at("mptoken_id"), params, result, baseMpt, xrpAccount(), 1024, 32); BEAST_EXPECT( !trap3 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); @@ -2937,15 +2812,15 @@ struct HostFuncImpl_test : public beast::unit_test::Suite auto const expected = keylet::nftoffer(masterID, 1u); WasmValVec params(6), result(1); auto* trap = - ww(&imp.at("nft_offer_keylet"), params, result, masterID, toBytes(1u), 1024, 32); + ww(&imp.at("nft_offer_id"), params, result, masterID, toBytes(1u), 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); BEAST_EXPECT(compareKeylet(actual, expected)); } - auto* trap2 = ww( - &imp.at("nft_offer_keylet"), params, result, xrpAccount(), toBytes(1u), 1024, 32); + auto* trap2 = + ww(&imp.at("nft_offer_id"), params, result, xrpAccount(), toBytes(1u), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); @@ -2954,8 +2829,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { auto const expected = keylet::offer(masterID, 1u); WasmValVec params(6), result(1); - auto* trap = - ww(&imp.at("offer_keylet"), params, result, masterID, toBytes(1u), 1024, 32); + auto* trap = ww(&imp.at("offer_id"), params, result, masterID, toBytes(1u), 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); @@ -2963,7 +2837,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } auto* trap2 = - ww(&imp.at("offer_keylet"), params, result, xrpAccount(), toBytes(1u), 1024, 32); + ww(&imp.at("offer_id"), params, result, xrpAccount(), toBytes(1u), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); @@ -2972,8 +2846,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { auto const expected = keylet::oracle(masterID, 1u); WasmValVec params(6), result(1); - auto* trap = - ww(&imp.at("oracle_keylet"), params, result, masterID, toBytes(1u), 1024, 32); + auto* trap = ww(&imp.at("oracle_id"), params, result, masterID, toBytes(1u), 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); @@ -2981,7 +2854,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } auto* trap2 = - ww(&imp.at("oracle_keylet"), params, result, xrpAccount(), toBytes(1u), 1024, 32); + ww(&imp.at("oracle_id"), params, result, xrpAccount(), toBytes(1u), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); @@ -2990,36 +2863,22 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { auto const expected = keylet::payChan(masterID, alice.id(), 1u); WasmValVec params(8), result(1); - auto* trap = - ww(&imp.at("paychan_keylet"), - params, - result, - masterID, - alice.id(), - toBytes(1u), - 1024, - 32); + auto* trap = ww( + &imp.at("paychan_id"), params, result, masterID, alice.id(), toBytes(1u), 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 6); BEAST_EXPECT(compareKeylet(actual, expected)); } - auto* trap2 = - ww(&imp.at("paychan_keylet"), - params, - result, - masterID, - masterID, - toBytes(1u), - 1024, - 32); + auto* trap2 = ww( + &imp.at("paychan_id"), params, result, masterID, masterID, toBytes(1u), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidParams)); auto* trap3 = - ww(&imp.at("paychan_keylet"), + ww(&imp.at("paychan_id"), params, result, masterID, @@ -3032,7 +2891,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); auto* trap4 = - ww(&imp.at("paychan_keylet"), + ww(&imp.at("paychan_id"), params, result, xrpAccount(), @@ -3048,14 +2907,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { auto const expected = keylet::permissionedDomain(masterID, 1u); WasmValVec params(6), result(1); - auto* trap = - ww(&imp.at("permissioned_domain_keylet"), - params, - result, - masterID, - toBytes(1u), - 1024, - 32); + auto* trap = ww( + &imp.at("permissioned_domain_id"), params, result, masterID, toBytes(1u), 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); @@ -3063,7 +2916,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } auto* trap2 = - ww(&imp.at("permissioned_domain_keylet"), + ww(&imp.at("permissioned_domain_id"), params, result, xrpAccount(), @@ -3078,14 +2931,14 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { auto const expected = keylet::signers(masterID); WasmValVec params(4), result(1); - auto* trap = ww(&imp.at("signers_keylet"), params, result, masterID, 1024, 32); + auto* trap = ww(&imp.at("signers_id"), params, result, masterID, 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 2); BEAST_EXPECT(compareKeylet(actual, expected)); } - auto* trap2 = ww(&imp.at("signers_keylet"), params, result, xrpAccount(), 1024, 32); + auto* trap2 = ww(&imp.at("signers_id"), params, result, xrpAccount(), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); @@ -3094,8 +2947,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { auto const expected = keylet::kTicket(masterID, 1u); WasmValVec params(6), result(1); - auto* trap = - ww(&imp.at("ticket_keylet"), params, result, masterID, toBytes(1u), 1024, 32); + auto* trap = ww(&imp.at("ticket_id"), params, result, masterID, toBytes(1u), 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); @@ -3103,7 +2955,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } auto* trap2 = - ww(&imp.at("ticket_keylet"), params, result, xrpAccount(), toBytes(1u), 1024, 32); + ww(&imp.at("ticket_id"), params, result, xrpAccount(), toBytes(1u), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); @@ -3112,8 +2964,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { auto const expected = keylet::vault(masterID, 1u); WasmValVec params(6), result(1); - auto* trap = - ww(&imp.at("vault_keylet"), params, result, masterID, toBytes(1u), 1024, 32); + auto* trap = ww(&imp.at("vault_id"), params, result, masterID, toBytes(1u), 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) { auto const actual = vrt.getBytes(params, 4); @@ -3121,7 +2972,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } auto* trap2 = - ww(&imp.at("vault_keylet"), params, result, xrpAccount(), toBytes(1u), 1024, 32); + ww(&imp.at("vault_id"), params, result, xrpAccount(), toBytes(1u), 1024, 32); BEAST_EXPECT( !trap2 && result[0].kind == WASM_I32 && result[0].of.i32 == static_cast(HostFunctionError::InvalidAccount)); @@ -3165,7 +3016,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(256, nftId.data(), uint256::size()); WasmValVec params(6), result(1); auto* trap = - ww(&import.at("get_nft"), + ww(&import.at("nft_uri"), params, result, 0, @@ -3191,7 +3042,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(256, nftId.data(), uint256::size()); WasmValVec params(6), result(1); auto* trap = - ww(&import.at("get_nft"), + ww(&import.at("nft_uri"), params, result, 0, @@ -3213,7 +3064,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(256, zeroId.data(), uint256::size()); WasmValVec params(6), result(1); auto* trap = - ww(&import.at("get_nft"), + ww(&import.at("nft_uri"), params, result, 0, @@ -3235,7 +3086,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(256, badId.data(), uint256::size()); WasmValVec params(6), result(1); auto* trap = - ww(&import.at("get_nft"), + ww(&import.at("nft_uri"), params, result, 0, @@ -3256,7 +3107,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(256, nftId2.data(), uint256::size()); WasmValVec params(6), result(1); auto* trap = - ww(&import.at("get_nft"), + ww(&import.at("nft_uri"), params, result, 0, @@ -3300,7 +3151,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, nftId.data(), uint256::size()); WasmValVec params(4), result(1); auto* trap = - ww(&import.at("get_nft_issuer"), + ww(&import.at("nft_issuer"), params, result, 0, @@ -3323,7 +3174,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, zeroId.data(), uint256::size()); WasmValVec params(4), result(1); auto* trap = - ww(&import.at("get_nft_issuer"), + ww(&import.at("nft_issuer"), params, result, 0, @@ -3362,8 +3213,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getNFTTaxon(nftId); vrt.setBytes(0, nftId.data(), uint256::size()); WasmValVec params(4), result(1); - auto* trap = ww( - &import.at("get_nft_taxon"), params, result, 0, uint256::size(), 256, sizeof(uint32_t)); + auto* trap = + ww(&import.at("nft_taxon"), params, result, 0, uint256::size(), 256, sizeof(uint32_t)); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == sizeof(uint32_t))) @@ -3399,7 +3250,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getNFTFlags(nftId); vrt.setBytes(0, nftId.data(), uint256::size()); WasmValVec params(2), result(1); - auto* trap = ww(&import.at("get_nft_flags"), params, result, 0, uint256::size()); + auto* trap = ww(&import.at("nft_flags"), params, result, 0, uint256::size()); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) BEAST_EXPECT(result[0].of.i32 == tfTransferable); @@ -3411,7 +3262,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite uint256 zeroId; vrt.setBytes(0, zeroId.data(), uint256::size()); WasmValVec params(2), result(1); - auto* trap = ww(&import.at("get_nft_flags"), params, result, 0, uint256::size()); + auto* trap = ww(&import.at("nft_flags"), params, result, 0, uint256::size()); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) BEAST_EXPECT(result[0].of.i32 == 0); @@ -3445,7 +3296,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getNFTTransferFee(nftId); vrt.setBytes(0, nftId.data(), uint256::size()); WasmValVec params(2), result(1); - auto* trap = ww(&import.at("get_nft_transfer_fee"), params, result, 0, uint256::size()); + auto* trap = ww(&import.at("nft_xfer_fee"), params, result, 0, uint256::size()); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) BEAST_EXPECT(result[0].of.i32 == transferFee); @@ -3457,7 +3308,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite uint256 zeroId; vrt.setBytes(0, zeroId.data(), uint256::size()); WasmValVec params(2), result(1); - auto* trap = ww(&import.at("get_nft_transfer_fee"), params, result, 0, uint256::size()); + auto* trap = ww(&import.at("nft_xfer_fee"), params, result, 0, uint256::size()); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32)) BEAST_EXPECT(result[0].of.i32 == 0); @@ -3493,7 +3344,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, nftId.data(), uint256::size()); WasmValVec params(4), result(1); auto* trap = - ww(&import.at("get_nft_serial"), + ww(&import.at("nft_serial"), params, result, 0, @@ -3515,7 +3366,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, zeroId.data(), uint256::size()); WasmValVec params(4), result(1); auto* trap = - ww(&import.at("get_nft_serial"), + ww(&import.at("nft_serial"), params, result, 0, @@ -3719,8 +3570,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); vrt.setBytes(256, accountId.data(), accountId.size()); WasmValVec params(4), result(1); - auto* trap = ww( - &import.at("trace_account"), params, result, 0, msg.size(), 256, accountId.size()); + auto* trap = + ww(&import.at("trace_acct"), params, result, 0, msg.size(), 256, accountId.size()); if (BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0)) @@ -3753,8 +3604,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); vrt.setBytes(256, accountId.data(), accountId.size()); WasmValVec params(4), result(1); - auto* trap = ww( - &import.at("trace_account"), params, result, 0, msg.size(), 256, accountId.size()); + auto* trap = + ww(&import.at("trace_acct"), params, result, 0, msg.size(), 256, accountId.size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0); @@ -3792,7 +3643,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(256, amountBytes.data(), amountBytes.size()); WasmValVec params(4), result(1); auto* trap = - ww(&import.at("trace_amount"), + ww(&import.at("trace_amt"), params, result, 0, @@ -3821,7 +3672,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(256, amountBytes.data(), amountBytes.size()); WasmValVec params(4), result(1); auto* trap = - ww(&import.at("trace_amount"), + ww(&import.at("trace_amt"), params, result, 0, @@ -3845,7 +3696,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(256, amountBytes.data(), amountBytes.size()); WasmValVec params(4), result(1); auto* trap = - ww(&import.at("trace_amount"), + ww(&import.at("trace_amt"), params, result, 0, @@ -3881,8 +3732,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); vrt.setBytes(256, amountBytes.data(), amountBytes.size()); WasmValVec params(4), result(1); - auto* trap = ww( - &import.at("trace_amount"), params, result, 0, msg.size(), 256, amountBytes.size()); + auto* trap = + ww(&import.at("trace_amt"), params, result, 0, msg.size(), 256, amountBytes.size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0); @@ -4002,14 +3853,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, reinterpret_cast(msg.data()), msg.size()); vrt.setBytes(256, reinterpret_cast(invalid.data()), invalid.size()); WasmValVec params(4), result(1); - auto* trap = - ww(&import.at("trace_opaque_float"), - params, - result, - 0, - msg.size(), - 256, - invalid.size()); + auto* trap = ww( + &import.at("trace_xfloat"), params, result, 0, msg.size(), 256, invalid.size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0); @@ -4021,7 +3866,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(256, floatMaxExp.data(), floatMaxExp.size()); WasmValVec params(4), result(1); auto* trap = - ww(&import.at("trace_opaque_float"), + ww(&import.at("trace_xfloat"), params, result, 0, @@ -4056,13 +3901,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(256, reinterpret_cast(invalid.data()), invalid.size()); WasmValVec params(4), result(1); auto* trap = - ww(&import.at("trace_opaque_float"), - params, - result, - 0, - msg.size(), - 256, - invalid.size()); + ww(&import.at("trace_xfloat"), params, result, 0, msg.size(), 256, invalid.size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0); @@ -4437,7 +4276,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.floatCompare(Slice(), Slice()); WasmValVec params(4), result(1); - auto* trap = ww(&import.at("float_compare"), params, result, 0, 0, 0, 0); + auto* trap = ww(&import.at("float_cmp"), params, result, 0, 0, 0, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -4449,7 +4288,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.floatCompare(makeSlice(floatInvalidZero), Slice()); WasmValVec params(4), result(1); vrt.setBytes(0, floatInvalidZero.data(), floatInvalidZero.size()); - auto* trap = ww(&import.at("float_compare"), params, result, 0, floatSize, 0, 0); + auto* trap = ww(&import.at("float_cmp"), params, result, 0, floatSize, 0, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -4462,14 +4301,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite WasmValVec params(4), result(1); vrt.setBytes(0, float1.data(), float1.size()); vrt.setBytes(floatSize, invalid.data(), invalid.size()); - auto* trap = - ww(&import.at("float_compare"), - params, - result, - 0, - floatSize, - floatSize, - invalid.size()); + auto* trap = ww( + &import.at("float_cmp"), params, result, 0, floatSize, floatSize, invalid.size()); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -4483,7 +4316,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatIntMin.data(), floatIntMin.size()); vrt.setBytes(floatSize, floatIntZero.data(), floatIntZero.size()); auto* trap = - ww(&import.at("float_compare"), params, result, 0, floatSize, floatSize, floatSize); + ww(&import.at("float_cmp"), params, result, 0, floatSize, floatSize, floatSize); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 2); @@ -4495,7 +4328,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatIntMax.data(), floatIntMax.size()); vrt.setBytes(floatSize, floatIntZero.data(), floatIntZero.size()); auto* trap = - ww(&import.at("float_compare"), params, result, 0, floatSize, floatSize, floatSize); + ww(&import.at("float_cmp"), params, result, 0, floatSize, floatSize, floatSize); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 1); @@ -4507,7 +4340,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, float1.data(), float1.size()); vrt.setBytes(floatSize, float1.data(), float1.size()); auto* trap = - ww(&import.at("float_compare"), params, result, 0, floatSize, floatSize, floatSize); + ww(&import.at("float_cmp"), params, result, 0, floatSize, floatSize, floatSize); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == 0); @@ -4666,8 +4499,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.floatSubtract(Slice(), Slice(), -1); WasmValVec params(7), result(1); - auto* trap = - ww(&import.at("float_subtract"), params, result, 0, 0, 0, 0, 0, floatSize, -1); + auto* trap = ww(&import.at("float_sub"), params, result, 0, 0, 0, 0, 0, floatSize, -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -4678,8 +4510,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.floatSubtract(Slice(), Slice(), 0); WasmValVec params(7), result(1); - auto* trap = - ww(&import.at("float_subtract"), params, result, 0, 0, 0, 0, 0, floatSize, 0); + auto* trap = ww(&import.at("float_sub"), params, result, 0, 0, 0, 0, 0, floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -4693,7 +4524,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, float1.data(), float1.size()); vrt.setBytes(floatSize, invalid.data(), invalid.size()); auto* trap = - ww(&import.at("float_subtract"), + ww(&import.at("float_sub"), params, result, 0, @@ -4716,7 +4547,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatMinusMaxExp.data(), floatMinusMaxExp.size()); vrt.setBytes(floatSize, floatMaxIOU.data(), floatMaxIOU.size()); auto* trap = - ww(&import.at("float_subtract"), + ww(&import.at("float_sub"), params, result, 0, @@ -4739,7 +4570,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatIntMin.data(), floatIntMin.size()); vrt.setBytes(floatSize, floatIntZero.data(), floatIntZero.size()); auto* trap = - ww(&import.at("float_subtract"), + ww(&import.at("float_sub"), params, result, 0, @@ -4762,7 +4593,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatIntZero.data(), floatIntZero.size()); vrt.setBytes(floatSize, float1.data(), float1.size()); auto* trap = - ww(&import.at("float_subtract"), + ww(&import.at("float_sub"), params, result, 0, @@ -4799,8 +4630,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.floatMultiply(Slice(), Slice(), -1); WasmValVec params(7), result(1); - auto* trap = - ww(&import.at("float_multiply"), params, result, 0, 0, 0, 0, 0, floatSize, -1); + auto* trap = ww(&import.at("float_mult"), params, result, 0, 0, 0, 0, 0, floatSize, -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -4811,8 +4641,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.floatMultiply(Slice(), Slice(), 0); WasmValVec params(7), result(1); - auto* trap = - ww(&import.at("float_multiply"), params, result, 0, 0, 0, 0, 0, floatSize, 0); + auto* trap = ww(&import.at("float_mult"), params, result, 0, 0, 0, 0, 0, floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -4826,7 +4655,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, float1.data(), float1.size()); vrt.setBytes(floatSize, invalid.data(), invalid.size()); auto* trap = - ww(&import.at("float_multiply"), + ww(&import.at("float_mult"), params, result, 0, @@ -4849,7 +4678,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatMax.data(), floatMax.size()); vrt.setBytes(floatSize, float1More.data(), float1More.size()); auto* trap = - ww(&import.at("float_multiply"), + ww(&import.at("float_mult"), params, result, 0, @@ -4872,7 +4701,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, float1.data(), float1.size()); vrt.setBytes(floatSize, float1.data(), float1.size()); auto* trap = - ww(&import.at("float_multiply"), + ww(&import.at("float_mult"), params, result, 0, @@ -4895,7 +4724,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatIntZero.data(), floatIntZero.size()); vrt.setBytes(floatSize, floatMaxIOU.data(), floatMaxIOU.size()); auto* trap = - ww(&import.at("float_multiply"), + ww(&import.at("float_mult"), params, result, 0, @@ -4918,7 +4747,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, float10.data(), float10.size()); vrt.setBytes(floatSize, floatPreMaxExp.data(), floatPreMaxExp.size()); auto* trap = - ww(&import.at("float_multiply"), + ww(&import.at("float_mult"), params, result, 0, @@ -4955,8 +4784,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.floatDivide(Slice(), Slice(), -1); WasmValVec params(7), result(1); - auto* trap = - ww(&import.at("float_divide"), params, result, 0, 0, 0, 0, 0, floatSize, -1); + auto* trap = ww(&import.at("float_div"), params, result, 0, 0, 0, 0, 0, floatSize, -1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -4967,8 +4795,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.floatDivide(Slice(), Slice(), 0); WasmValVec params(7), result(1); - auto* trap = - ww(&import.at("float_divide"), params, result, 0, 0, 0, 0, 0, floatSize, 0); + auto* trap = ww(&import.at("float_div"), params, result, 0, 0, 0, 0, 0, floatSize, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -4981,7 +4808,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, float1.data(), float1.size()); vrt.setBytes(floatSize, invalid.data(), invalid.size()); auto* trap = - ww(&import.at("float_divide"), + ww(&import.at("float_div"), params, result, 0, @@ -5003,7 +4830,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, float1.data(), float1.size()); vrt.setBytes(floatSize, floatIntZero.data(), floatIntZero.size()); auto* trap = - ww(&import.at("float_divide"), + ww(&import.at("float_div"), params, result, 0, @@ -5029,7 +4856,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatMax.data(), floatMax.size()); vrt.setBytes(floatSize, y->data(), y->size()); auto* trap = - ww(&import.at("float_divide"), + ww(&import.at("float_div"), params, result, 0, @@ -5052,7 +4879,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatIntZero.data(), floatIntZero.size()); vrt.setBytes(floatSize, float1.data(), float1.size()); auto* trap = - ww(&import.at("float_divide"), + ww(&import.at("float_div"), params, result, 0, @@ -5074,7 +4901,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite vrt.setBytes(0, floatMaxExp.data(), floatMaxExp.size()); vrt.setBytes(floatSize, float10.data(), float10.size()); auto* trap = - ww(&import.at("float_divide"), + ww(&import.at("float_div"), params, result, 0, @@ -6206,8 +6033,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // hfs.getLedgerSqn(); WasmValVec params(2), result(1); // 3 parameters instead of 2 - auto* trap = - ww(&import.at("get_ledger_sqn"), params, result, 0, sizeof(std::uint32_t), 1); + auto* trap = ww(&import.at("ldgr_index"), params, result, 0, sizeof(std::uint32_t), 1); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == sizeof(std::uint32_t)) && diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 737e5f0c9e..bae464f7be 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -179,7 +179,7 @@ struct Wasm_test : public beast::unit_test::Suite Env env{*this}; TestLedgerDataProvider hfs(env); ImportVec imports; - WASM_IMPORT_FUNC2(imports, getLedgerSqn, "get_ledger_sqn", hfs, 33); + WASM_IMPORT_FUNC2(imports, getLedgerSqn, "ldgr_index", hfs, 33); auto& engine = WasmEngine::instance(); auto re = @@ -217,7 +217,7 @@ struct Wasm_test : public beast::unit_test::Suite auto re = engine.run( allHostFuncWasm, hfs, 1'000'000, escrowFunctionName, {}, imp, env.journal); - checkResult(re, 1, 27'617); + checkResult(re, 1, 27'032); env.close(); } @@ -239,7 +239,7 @@ struct Wasm_test : public beast::unit_test::Suite auto re = engine.run( allHostFuncWasm, hfs, 1'000'000, escrowFunctionName, {}, imp, env.journal); - checkResult(re, 1, 70'877); + checkResult(re, 1, 68'792); env.close(); } @@ -278,7 +278,7 @@ struct Wasm_test : public beast::unit_test::Suite { TestHostFunctions hfs(env); auto re = runEscrowWasm(allHFWasm, hfs, 100'000, escrowFunctionName, {}); - checkResult(re, 1, 70'877); + checkResult(re, 1, 68'792); } { @@ -302,7 +302,7 @@ struct Wasm_test : public beast::unit_test::Suite TestHostFunctions hfs(env); auto re = runEscrowWasm( allHFWasm, hfs, std::numeric_limits::max(), escrowFunctionName, {}); - checkResult(re, 1, 70'877); + checkResult(re, 1, 68'792); } { // fail because trying to access nonexistent field @@ -320,7 +320,7 @@ struct Wasm_test : public beast::unit_test::Suite FieldNotFoundHostFunctions hfs(env); auto re = runEscrowWasm(allHFWasm, hfs, 100'000, escrowFunctionName, {}); - checkResult(re, -201, 29'502); + checkResult(re, -201, 28'965); } { // fail because trying to allocate more than MAX_PAGES memory @@ -338,7 +338,7 @@ struct Wasm_test : public beast::unit_test::Suite OversizedFieldHostFunctions hfs(env); auto re = runEscrowWasm(allHFWasm, hfs, 100'000, escrowFunctionName, {}); - checkResult(re, -201, 29'502); + checkResult(re, -201, 28'965); } } @@ -354,7 +354,7 @@ struct Wasm_test : public beast::unit_test::Suite auto const codecovWasm = hexToBytes(kCodecovTestsWasmHex); TestHostFunctions hfs(env); - auto const allowance = 220'169; + auto const allowance = 204'624; auto re = runEscrowWasm(codecovWasm, hfs, allowance, escrowFunctionName, {}); checkResult(re, 1, allowance); diff --git a/src/test/app/wasm_fixtures/all_host_functions/Cargo.lock b/src/test/app/wasm_fixtures/all_host_functions/Cargo.lock index dc4aa73edb..48771d1506 100644 --- a/src/test/app/wasm_fixtures/all_host_functions/Cargo.lock +++ b/src/test/app/wasm_fixtures/all_host_functions/Cargo.lock @@ -44,9 +44,9 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", "typenum", @@ -64,9 +64,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.9" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -74,24 +74,24 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.177" +version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "proc-macro2" -version = "1.0.103" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.41" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" dependencies = [ "proc-macro2", ] @@ -109,9 +109,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.108" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -120,9 +120,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" dependencies = [ "tinyvec_macros", ] @@ -135,15 +135,15 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "typenum" -version = "1.19.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" [[package]] name = "unicode-ident" -version = "1.0.22" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "version_check" @@ -152,9 +152,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] -name = "xrpl-address-macro" -version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=u32-buffer#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" +name = "xrpl-macros" +version = "0.1.0" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=renames#9822d645870908a79d87a57b0244caa6359cb9cf" dependencies = [ "bs58", "quote", @@ -164,8 +164,8 @@ dependencies = [ [[package]] name = "xrpl-wasm-stdlib" -version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=u32-buffer#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" +version = "0.8.0" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=renames#9822d645870908a79d87a57b0244caa6359cb9cf" dependencies = [ - "xrpl-address-macro", + "xrpl-macros", ] diff --git a/src/test/app/wasm_fixtures/all_host_functions/Cargo.toml b/src/test/app/wasm_fixtures/all_host_functions/Cargo.toml index 102eb32cc0..fb0c44562a 100644 --- a/src/test/app/wasm_fixtures/all_host_functions/Cargo.toml +++ b/src/test/app/wasm_fixtures/all_host_functions/Cargo.toml @@ -10,7 +10,7 @@ edition = "2024" crate-type = ["cdylib"] [dependencies] -xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib", branch = "u32-buffer" } +xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib", branch = "renames" } [profile.dev] panic = "abort" diff --git a/src/test/app/wasm_fixtures/all_host_functions/src/lib.rs b/src/test/app/wasm_fixtures/all_host_functions/src/lib.rs index a0bf4c0dcf..cdbe05d3f0 100644 --- a/src/test/app/wasm_fixtures/all_host_functions/src/lib.rs +++ b/src/test/app/wasm_fixtures/all_host_functions/src/lib.rs @@ -98,7 +98,7 @@ fn test_ledger_header_functions() -> i32 { // Test 1.1: get_ledger_sqn() - should return current ledger sequence number let mut sqn_buffer = [0u8; 4]; - let sqn_result = unsafe { host::get_ledger_sqn(sqn_buffer.as_mut_ptr(), sqn_buffer.len()) }; + let sqn_result = unsafe { host::ldgr_index(sqn_buffer.as_mut_ptr(), sqn_buffer.len()) }; if sqn_result <= 0 { let _ = trace_num("ERROR: get_ledger_sqn failed:", sqn_result as i64); @@ -110,7 +110,7 @@ fn test_ledger_header_functions() -> i32 { // Test 1.2: get_parent_ledger_time() - should return parent ledger timestamp let mut time_buffer = [0u8; 4]; let time_result = - unsafe { host::get_parent_ledger_time(time_buffer.as_mut_ptr(), time_buffer.len()) }; + unsafe { host::parent_ldgr_time(time_buffer.as_mut_ptr(), time_buffer.len()) }; if time_result <= 0 { let _ = trace_num("ERROR: get_parent_ledger_time failed:", time_result as i64); @@ -122,7 +122,7 @@ fn test_ledger_header_functions() -> i32 { // Test 1.3: get_parent_ledger_hash() - should return parent ledger hash (32 bytes) let mut hash_buffer = [0u8; 32]; let hash_result = - unsafe { host::get_parent_ledger_hash(hash_buffer.as_mut_ptr(), hash_buffer.len()) }; + unsafe { host::parent_ldgr_hash(hash_buffer.as_mut_ptr(), hash_buffer.len()) }; if hash_result != 32 { let _ = trace_num( @@ -146,8 +146,8 @@ fn test_transaction_data_functions() -> i32 { // Test with Account field (required, 20 bytes) let mut account_buffer = [0u8; 20]; let account_len = unsafe { - host::get_tx_field( - sfield::Account, + host::tx_field( + sfield::Account.into(), account_buffer.as_mut_ptr(), account_buffer.len(), ) @@ -165,8 +165,13 @@ fn test_transaction_data_functions() -> i32 { // Test with Fee field (XRP amount - 8 bytes in new serialized format) // New format: XRP amounts are always 8 bytes (positive: value | cPositive flag, negative: just value) let mut fee_buffer = [0u8; 8]; - let fee_len = - unsafe { host::get_tx_field(sfield::Fee, fee_buffer.as_mut_ptr(), fee_buffer.len()) }; + let fee_len = unsafe { + host::tx_field( + sfield::Fee.into(), + fee_buffer.as_mut_ptr(), + fee_buffer.len(), + ) + }; if fee_len != 8 { let _ = trace_num( @@ -184,8 +189,13 @@ fn test_transaction_data_functions() -> i32 { // Test with Sequence field (required, 4 bytes uint32) let mut seq_buffer = [0u8; 4]; - let seq_len = - unsafe { host::get_tx_field(sfield::Sequence, seq_buffer.as_mut_ptr(), seq_buffer.len()) }; + let seq_len = unsafe { + host::tx_field( + sfield::Sequence.into(), + seq_buffer.as_mut_ptr(), + seq_buffer.len(), + ) + }; if seq_len != 4 { let _ = trace_num( @@ -203,7 +213,7 @@ fn test_transaction_data_functions() -> i32 { let locator = [0x01_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8]; // Two int32s in little-endian: [1, 0] let mut nested_buffer = [0u8; 32]; let nested_result = unsafe { - host::get_tx_nested_field( + host::tx_inner( locator.as_ptr(), locator.len(), nested_buffer.as_mut_ptr(), @@ -227,15 +237,14 @@ fn test_transaction_data_functions() -> i32 { } // Test 2.3: get_tx_array_len() - Get array length - let signers_len = unsafe { host::get_tx_array_len(sfield::Signers) }; + let signers_len = unsafe { host::tx_arr_len(sfield::Signers.into()) }; let _ = trace_num("Signers array length:", signers_len as i64); - let memos_len = unsafe { host::get_tx_array_len(sfield::Memos) }; + let memos_len = unsafe { host::tx_arr_len(sfield::Memos.into()) }; let _ = trace_num("Memos array length:", memos_len as i64); // Test 2.4: get_tx_nested_array_len() - Get nested array length with locator - let nested_array_len = - unsafe { host::get_tx_nested_array_len(locator.as_ptr(), locator.len()) }; + let nested_array_len = unsafe { host::tx_inner_arr_len(locator.as_ptr(), locator.len()) }; if nested_array_len < 0 { let _ = trace_num( @@ -259,8 +268,8 @@ fn test_current_ledger_object_functions() -> i32 { // Test with Balance field (XRP amount - 8 bytes in new serialized format) let mut balance_buffer = [0u8; 8]; let balance_result = unsafe { - host::get_current_ledger_obj_field( - sfield::Balance, + host::home_le_field( + sfield::Balance.into(), balance_buffer.as_mut_ptr(), balance_buffer.len(), ) @@ -297,8 +306,8 @@ fn test_current_ledger_object_functions() -> i32 { // Test with Account field let mut current_account_buffer = [0u8; 20]; let current_account_result = unsafe { - host::get_current_ledger_obj_field( - sfield::Account, + host::home_le_field( + sfield::Account.into(), current_account_buffer.as_mut_ptr(), current_account_buffer.len(), ) @@ -317,7 +326,7 @@ fn test_current_ledger_object_functions() -> i32 { let locator = [0x01_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8]; // Two int32s in little-endian: [1, 0] let mut current_nested_buffer = [0u8; 32]; let current_nested_result = unsafe { - host::get_current_ledger_obj_nested_field( + host::home_le_inner( locator.as_ptr(), locator.len(), current_nested_buffer.as_mut_ptr(), @@ -340,7 +349,7 @@ fn test_current_ledger_object_functions() -> i32 { } // Test 3.3: get_current_ledger_obj_array_len() - Array length in current object - let current_array_len = unsafe { host::get_current_ledger_obj_array_len(sfield::Signers) }; + let current_array_len = unsafe { host::home_le_arr_len(sfield::Signers.into()) }; let _ = trace_num( "Current object Signers array length:", current_array_len as i64, @@ -348,7 +357,7 @@ fn test_current_ledger_object_functions() -> i32 { // Test 3.4: get_current_ledger_obj_nested_array_len() - Nested array length let current_nested_array_len = - unsafe { host::get_current_ledger_obj_nested_array_len(locator.as_ptr(), locator.len()) }; + unsafe { host::home_le_inner_arr_len(locator.as_ptr(), locator.len()) }; if current_nested_array_len < 0 { let _ = trace_num( @@ -379,7 +388,7 @@ fn test_any_ledger_object_functions() -> i32 { // Test 4.1: cache_ledger_obj() - Cache a ledger object let mut keylet_buffer = [0u8; 32]; let keylet_result = unsafe { - host::account_keylet( + host::accountroot_id( account_id.0.as_ptr(), account_id.0.len(), keylet_buffer.as_mut_ptr(), @@ -389,14 +398,13 @@ fn test_any_ledger_object_functions() -> i32 { if keylet_result != 32 { let _ = trace_num( - "ERROR: account_keylet failed for caching test:", + "ERROR: accountroot_id failed for caching test:", keylet_result as i64, ); return -401; // Keylet generation failed for caching test } - let cache_result = - unsafe { host::cache_ledger_obj(keylet_buffer.as_ptr(), keylet_result as usize, 0) }; + let cache_result = unsafe { host::cache_le(keylet_buffer.as_ptr(), keylet_result as usize, 0) }; if cache_result <= 0 { let _ = trace_num( @@ -411,9 +419,9 @@ fn test_any_ledger_object_functions() -> i32 { // Test get_ledger_obj_field with invalid slot let field_result = unsafe { - host::get_ledger_obj_field( + host::le_field( 1, - sfield::Balance, + sfield::Balance.into(), test_buffer.as_mut_ptr(), test_buffer.len(), ) @@ -428,7 +436,7 @@ fn test_any_ledger_object_functions() -> i32 { // Test get_ledger_obj_nested_field with invalid slot let locator = [0x01_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8]; // Two int32s in little-endian: [1, 0] let nested_result = unsafe { - host::get_ledger_obj_nested_field( + host::le_inner( 1, locator.as_ptr(), locator.len(), @@ -444,7 +452,7 @@ fn test_any_ledger_object_functions() -> i32 { } // Test get_ledger_obj_array_len with invalid slot - let array_result = unsafe { host::get_ledger_obj_array_len(1, sfield::Signers) }; + let array_result = unsafe { host::le_arr_len(1, sfield::Signers.into()) }; if array_result < 0 { let _ = trace_num( "INFO: get_ledger_obj_array_len failed as expected:", @@ -454,7 +462,7 @@ fn test_any_ledger_object_functions() -> i32 { // Test get_ledger_obj_nested_array_len with invalid slot let nested_array_result = - unsafe { host::get_ledger_obj_nested_array_len(1, locator.as_ptr(), locator.len()) }; + unsafe { host::le_inner_arr_len(1, locator.as_ptr(), locator.len()) }; if nested_array_result < 0 { let _ = trace_num( "INFO: get_ledger_obj_nested_array_len failed as expected:", @@ -473,9 +481,9 @@ fn test_any_ledger_object_functions() -> i32 { // Test 4.2: get_ledger_obj_field() - Access field from cached object let mut cached_balance_buffer = [0u8; 8]; let cached_balance_result = unsafe { - host::get_ledger_obj_field( + host::le_field( slot, - sfield::Balance, + sfield::Balance.into(), cached_balance_buffer.as_mut_ptr(), cached_balance_buffer.len(), ) @@ -512,7 +520,7 @@ fn test_any_ledger_object_functions() -> i32 { let locator = [0x01_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8]; // Two int32s in little-endian: [1, 0] let mut cached_nested_buffer = [0u8; 32]; let cached_nested_result = unsafe { - host::get_ledger_obj_nested_field( + host::le_inner( slot, locator.as_ptr(), locator.len(), @@ -536,7 +544,7 @@ fn test_any_ledger_object_functions() -> i32 { } // Test 4.4: get_ledger_obj_array_len() - Array length from cached object - let cached_array_len = unsafe { host::get_ledger_obj_array_len(slot, sfield::Signers) }; + let cached_array_len = unsafe { host::le_arr_len(slot, sfield::Signers.into()) }; let _ = trace_num( "Cached object Signers array length:", cached_array_len as i64, @@ -544,7 +552,7 @@ fn test_any_ledger_object_functions() -> i32 { // Test 4.5: get_ledger_obj_nested_array_len() - Nested array length from cached object let cached_nested_array_len = - unsafe { host::get_ledger_obj_nested_array_len(slot, locator.as_ptr(), locator.len()) }; + unsafe { host::le_inner_arr_len(slot, locator.as_ptr(), locator.len()) }; if cached_nested_array_len < 0 { let _ = trace_num( @@ -570,30 +578,30 @@ fn test_keylet_generation_functions() -> i32 { let escrow_finish = EscrowFinish; let account_id = escrow_finish.get_account().unwrap(); - // Test 5.1: account_keylet() - Generate keylet for account - let mut account_keylet_buffer = [0u8; 32]; - let account_keylet_result = unsafe { - host::account_keylet( + // Test 5.1: accountroot_id() - Generate keylet for account + let mut accountroot_id_buffer = [0u8; 32]; + let accountroot_id_result = unsafe { + host::accountroot_id( account_id.0.as_ptr(), account_id.0.len(), - account_keylet_buffer.as_mut_ptr(), - account_keylet_buffer.len(), + accountroot_id_buffer.as_mut_ptr(), + accountroot_id_buffer.len(), ) }; - if account_keylet_result != 32 { + if accountroot_id_result != 32 { let _ = trace_num( - "ERROR: account_keylet failed:", - account_keylet_result as i64, + "ERROR: accountroot_id failed:", + accountroot_id_result as i64, ); return -501; // Account keylet generation failed } - let _ = trace_data("Account keylet:", &account_keylet_buffer, DataRepr::AsHex); + let _ = trace_data("Account keylet:", &accountroot_id_buffer, DataRepr::AsHex); // Test 5.2: credential_keylet() - Generate keylet for credential let mut credential_keylet_buffer = [0u8; 32]; let credential_keylet_result = unsafe { - host::credential_keylet( + host::credential_id( account_id.0.as_ptr(), // Subject account_id.0.len(), account_id.0.as_ptr(), // Issuer - same account for test @@ -624,7 +632,7 @@ fn test_keylet_generation_functions() -> i32 { let sequence_number: i32 = 1000; let sequence_number_bytes = sequence_number.to_be_bytes(); let escrow_keylet_result = unsafe { - host::escrow_keylet( + host::escrow_id( account_id.0.as_ptr(), account_id.0.len(), sequence_number_bytes.as_ptr(), @@ -645,7 +653,7 @@ fn test_keylet_generation_functions() -> i32 { let document_id: i32 = 42; let document_id_bytes = document_id.to_be_bytes(); let oracle_keylet_result = unsafe { - host::oracle_keylet( + host::oracle_id( account_id.0.as_ptr(), account_id.0.len(), document_id_bytes.as_ptr(), @@ -674,7 +682,7 @@ fn test_utility_functions() -> i32 { let test_data = b"Hello, XRPL WASM world!"; let mut hash_output = [0u8; 32]; let hash_result = unsafe { - host::compute_sha512_half( + host::sha512_half( test_data.as_ptr(), test_data.len(), hash_output.as_mut_ptr(), @@ -695,7 +703,7 @@ fn test_utility_functions() -> i32 { let nft_id = [0u8; 32]; // Dummy NFT ID for testing let mut nft_buffer = [0u8; 256]; let nft_result = unsafe { - host::get_nft( + host::nft_uri( account_id.0.as_ptr(), account_id.0.len(), nft_id.as_ptr(), @@ -766,7 +774,7 @@ fn test_data_update_functions() -> i32 { // Test 7.1: update_data() - Update current ledger entry data let update_payload = b"Updated ledger entry data from WASM test"; - let update_result = unsafe { host::update_data(update_payload.as_ptr(), update_payload.len()) }; + let update_result = unsafe { host::set_data(update_payload.as_ptr(), update_payload.len()) }; if update_result != update_payload.len() as i32 { let _ = trace_num("ERROR: update_data failed:", update_result as i64); diff --git a/src/test/app/wasm_fixtures/all_keylets/Cargo.lock b/src/test/app/wasm_fixtures/all_keylets/Cargo.lock index d45ec0df78..5da5b26f66 100644 --- a/src/test/app/wasm_fixtures/all_keylets/Cargo.lock +++ b/src/test/app/wasm_fixtures/all_keylets/Cargo.lock @@ -44,9 +44,9 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", "typenum", @@ -64,9 +64,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.9" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -74,24 +74,24 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.177" +version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "proc-macro2" -version = "1.0.103" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.41" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" dependencies = [ "proc-macro2", ] @@ -109,9 +109,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.108" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -120,9 +120,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" dependencies = [ "tinyvec_macros", ] @@ -135,15 +135,15 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "typenum" -version = "1.19.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" [[package]] name = "unicode-ident" -version = "1.0.22" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "version_check" @@ -152,9 +152,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] -name = "xrpl-address-macro" -version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=u32-buffer#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" +name = "xrpl-macros" +version = "0.1.0" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=renames#21c522f34a24b460297ebb6be1822680459bf37e" dependencies = [ "bs58", "quote", @@ -164,8 +164,8 @@ dependencies = [ [[package]] name = "xrpl-wasm-stdlib" -version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=u32-buffer#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" +version = "0.8.0" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=renames#21c522f34a24b460297ebb6be1822680459bf37e" dependencies = [ - "xrpl-address-macro", + "xrpl-macros", ] diff --git a/src/test/app/wasm_fixtures/all_keylets/Cargo.toml b/src/test/app/wasm_fixtures/all_keylets/Cargo.toml index abd232e636..ad53fd62b1 100644 --- a/src/test/app/wasm_fixtures/all_keylets/Cargo.toml +++ b/src/test/app/wasm_fixtures/all_keylets/Cargo.toml @@ -15,7 +15,7 @@ opt-level = 's' panic = "abort" [dependencies] -xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib", branch = "u32-buffer" } +xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib", branch = "renames" } [profile.dev] panic = "abort" diff --git a/src/test/app/wasm_fixtures/all_keylets/src/lib.rs b/src/test/app/wasm_fixtures/all_keylets/src/lib.rs index e3d9ab1b19..3a1e2cb498 100644 --- a/src/test/app/wasm_fixtures/all_keylets/src/lib.rs +++ b/src/test/app/wasm_fixtures/all_keylets/src/lib.rs @@ -4,39 +4,38 @@ extern crate std; use crate::host::{Error, Result, Result::Err, Result::Ok}; +use xrpl_std::core::keylets; use xrpl_std::core::ledger_objects::current_escrow::get_current_escrow; use xrpl_std::core::ledger_objects::current_escrow::CurrentEscrow; use xrpl_std::core::ledger_objects::ledger_object; use xrpl_std::core::ledger_objects::traits::CurrentEscrowFields; -use xrpl_std::core::types::account_id::AccountID; +use xrpl_std::core::ledger_objects::LedgerObjectFieldGetter; use xrpl_std::core::types::currency::Currency; use xrpl_std::core::types::issue::{IouIssue, Issue, XrpIssue}; -use xrpl_std::core::types::keylets; use xrpl_std::core::types::mpt_id::MptId; -use xrpl_std::core::types::uint::Hash256; use xrpl_std::host; -use xrpl_std::host::trace::{trace, trace_account, trace_data, trace_num, DataRepr}; +use xrpl_std::host::trace::{trace, trace_acct, trace_data, trace_num, DataRepr}; use xrpl_std::sfield; -#[unsafe(no_mangle)] -pub fn object_exists( +pub fn object_exists( keylet_result: Result, keylet_type: &str, - field: i32, + sfield: sfield::SField, ) -> Result { + let field = CODE; match keylet_result { Ok(keylet) => { let _ = trace_data(keylet_type, &keylet, DataRepr::AsHex); - let slot = unsafe { host::cache_ledger_obj(keylet.as_ptr(), keylet.len(), 0) }; + let slot = unsafe { host::cache_le(keylet.as_ptr(), keylet.len(), 0) }; if slot <= 0 { let _ = trace_num("Error: ", slot.into()); return Err(Error::from_code(slot)); } if field == 0 { let new_field = sfield::PreviousTxnID; - let _ = trace_num("Getting field: ", new_field.into()); - match ledger_object::get_field::(slot, new_field) { + let _ = trace_num("Getting field: ", new_field.clone().into()); + match ledger_object::get_field(slot, new_field) { Ok(data) => { let _ = trace_data("Field data: ", &data.0, DataRepr::AsHex); } @@ -47,9 +46,9 @@ pub fn object_exists( } } else { let _ = trace_num("Getting field: ", field.into()); - match ledger_object::get_field::(slot, field) { - Ok(data) => { - let _ = trace_data("Field data: ", &data.0, DataRepr::AsHex); + match ledger_object::get_field(slot, sfield) { + Ok(_data) => { + let _ = trace("Field data: retrieved"); } Err(result_code) => { let _ = trace_num("Error getting field: ", result_code.into()); @@ -74,10 +73,10 @@ pub extern "C" fn finish() -> i32 { let escrow: CurrentEscrow = get_current_escrow(); let account = escrow.get_account().unwrap_or_panic(); - let _ = trace_account("Account:", &account); + let _ = trace_acct("Account:", &account); let destination = escrow.get_destination().unwrap_or_panic(); - let _ = trace_account("Destination:", &destination); + let _ = trace_acct("Destination:", &destination); let mut seq = 5; @@ -99,82 +98,78 @@ pub extern "C" fn finish() -> i32 { }; } - let account_keylet = keylets::account_keylet(&account); - check_object_exists!(account_keylet, "Account", sfield::Account); + let accountroot_id = keylets::accountroot_id(&account); + check_object_exists!(accountroot_id, "Account", sfield::Account); let currency_code: &[u8; 3] = b"USD"; let currency: Currency = Currency::from(*currency_code); - let line_keylet = keylets::line_keylet(&account, &destination, ¤cy); - check_object_exists!(line_keylet, "Trustline", sfield::Generic); + let trustline_id = keylets::trustline_id(&account, &destination, ¤cy); + check_object_exists!(trustline_id, "Trustline", sfield::Generic); seq += 1; let asset1 = Issue::XRP(XrpIssue {}); let asset2 = Issue::IOU(IouIssue::new(destination, currency)); - check_object_exists!( - keylets::amm_keylet(&asset1, &asset2), - "AMM", - sfield::Account - ); + check_object_exists!(keylets::amm_id(&asset1, &asset2), "AMM", sfield::Account); - let check_keylet = keylets::check_keylet(&account, seq); - check_object_exists!(check_keylet, "Check", sfield::Account); + let check_id = keylets::check_id(&account, seq); + check_object_exists!(check_id, "Check", sfield::Account); seq += 1; let cred_type: &[u8] = b"termsandconditions"; - let credential_keylet = keylets::credential_keylet(&account, &account, cred_type); - check_object_exists!(credential_keylet, "Credential", sfield::Subject); + let credential_id = keylets::credential_id(&account, &account, cred_type); + check_object_exists!(credential_id, "Credential", sfield::Subject); seq += 1; - let delegate_keylet = keylets::delegate_keylet(&account, &destination); - check_object_exists!(delegate_keylet, "Delegate", sfield::Account); + let delegate_id = keylets::delegate_id(&account, &destination); + check_object_exists!(delegate_id, "Delegate", sfield::Account); seq += 1; - let deposit_preauth_keylet = keylets::deposit_preauth_keylet(&account, &destination); - check_object_exists!(deposit_preauth_keylet, "DepositPreauth", sfield::Account); + let deposit_preauth_id = keylets::deposit_preauth_id(&account, &destination); + check_object_exists!(deposit_preauth_id, "DepositPreauth", sfield::Account); seq += 1; - let did_keylet = keylets::did_keylet(&account); - check_object_exists!(did_keylet, "DID", sfield::Account); + let did_id = keylets::did_id(&account); + check_object_exists!(did_id, "DID", sfield::Account); seq += 1; - let escrow_keylet = keylets::escrow_keylet(&account, seq); - check_object_exists!(escrow_keylet, "Escrow", sfield::Account); + let escrow_id = keylets::escrow_id(&account, seq); + check_object_exists!(escrow_id, "Escrow", sfield::Account); seq += 1; - let mpt_issuance_keylet = keylets::mpt_issuance_keylet(&account, seq); + let mpt_issuance_id = keylets::mpt_issuance_id(&account, seq); let mpt_id = MptId::new(seq.try_into().unwrap(), account); - check_object_exists!(mpt_issuance_keylet, "MPTIssuance", sfield::Issuer); + check_object_exists!(mpt_issuance_id, "MPTIssuance", sfield::Issuer); seq += 1; - let mptoken_keylet = keylets::mptoken_keylet(&mpt_id, &destination); - check_object_exists!(mptoken_keylet, "MPToken", sfield::Account); + let mptoken_id = keylets::mptoken_id(&mpt_id, &destination); + check_object_exists!(mptoken_id, "MPToken", sfield::Account); - let nft_offer_keylet = keylets::nft_offer_keylet(&destination, 6); - check_object_exists!(nft_offer_keylet, "NFTokenOffer", sfield::Owner); + let nft_offer_id = keylets::nft_offer_id(&destination, 6); + check_object_exists!(nft_offer_id, "NFTokenOffer", sfield::Owner); - let offer_keylet = keylets::offer_keylet(&account, seq); - check_object_exists!(offer_keylet, "Offer", sfield::Account); + let offer_id = keylets::offer_id(&account, seq); + check_object_exists!(offer_id, "Offer", sfield::Account); seq += 1; - let paychan_keylet = keylets::paychan_keylet(&account, &destination, seq); - check_object_exists!(paychan_keylet, "PayChannel", sfield::Account); + let paychan_id = keylets::paychan_id(&account, &destination, seq); + check_object_exists!(paychan_id, "PayChannel", sfield::Account); seq += 1; - let pd_keylet = keylets::permissioned_domain_keylet(&account, seq); - check_object_exists!(pd_keylet, "PermissionedDomain", sfield::Owner); + let pd_id = keylets::permissioned_domain_id(&account, seq); + check_object_exists!(pd_id, "PermissionedDomain", sfield::Owner); seq += 1; - let signers_keylet = keylets::signers_keylet(&account); - check_object_exists!(signers_keylet, "SignerList", sfield::Generic); + let signers_id = keylets::signers_id(&account); + check_object_exists!(signers_id, "SignerList", sfield::Generic); seq += 1; seq += 1; // ticket sequence number is one greater - let ticket_keylet = keylets::ticket_keylet(&account, seq); - check_object_exists!(ticket_keylet, "Ticket", sfield::Account); + let ticket_id = keylets::ticket_id(&account, seq); + check_object_exists!(ticket_id, "Ticket", sfield::Account); seq += 1; - let vault_keylet = keylets::vault_keylet(&account, seq); - check_object_exists!(vault_keylet, "Vault", sfield::Account); + let vault_id = keylets::vault_id(&account, seq); + check_object_exists!(vault_id, "Vault", sfield::Account); // seq += 1; 1 // All keylets exist, finish the escrow. diff --git a/src/test/app/wasm_fixtures/bad_align.c b/src/test/app/wasm_fixtures/bad_align.c index cc291c70f1..560245e762 100644 --- a/src/test/app/wasm_fixtures/bad_align.c +++ b/src/test/app/wasm_fixtures/bad_align.c @@ -1,8 +1,8 @@ #include int32_t float_from_uint(uint8_t const *, int32_t, uint8_t *, int32_t, int32_t); -int32_t check_keylet(uint8_t const *, int32_t, uint8_t const *, int32_t, - uint8_t *, int32_t); +int32_t check_id(uint8_t const *, int32_t, uint8_t const *, int32_t, uint8_t *, + int32_t); uint8_t e_data1[32 * 1024]; uint8_t e_data2[32 * 1024]; @@ -31,10 +31,9 @@ int32_t test2() // Set up valid non-zero AccountID (20 bytes) at offset 10 for (int i = 0; i < 20; i++) e_data2[10 + i] = i + 1; - // Call check_keylet with misaligned uint32 at &e_data2[1] to hit line 72 in + // Call check_id with misaligned uint32 at &e_data2[1] to hit line 72 in // HostFuncWrapper.cpp - int32_t result = - check_keylet(&e_data2[10], 20, &e_data2[1], 4, &e_data2[35], 32); + int32_t result = check_id(&e_data2[10], 20, &e_data2[1], 4, &e_data2[35], 32); // Return the misaligned value directly to validate it was read correctly (-1 // if all 0xFF) return result >= 0 ? *((int32_t *)(&e_data2[36])) : result; diff --git a/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock b/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock index 4a4b71bdcc..d7d91db071 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock +++ b/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock @@ -44,9 +44,9 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", "typenum", @@ -64,9 +64,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.9" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -74,24 +74,24 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.177" +version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "proc-macro2" -version = "1.0.103" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.41" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" dependencies = [ "proc-macro2", ] @@ -109,9 +109,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.108" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -120,9 +120,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" dependencies = [ "tinyvec_macros", ] @@ -135,15 +135,15 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "typenum" -version = "1.19.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" [[package]] name = "unicode-ident" -version = "1.0.22" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "version_check" @@ -152,9 +152,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] -name = "xrpl-address-macro" -version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=u32-buffer#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" +name = "xrpl-macros" +version = "0.1.0" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=renames#9822d645870908a79d87a57b0244caa6359cb9cf" dependencies = [ "bs58", "quote", @@ -164,8 +164,8 @@ dependencies = [ [[package]] name = "xrpl-wasm-stdlib" -version = "0.7.1" -source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=u32-buffer#1e5d096f46742ef7fcf1cb6f28a2526a72ed59d8" +version = "0.8.0" +source = "git+https://github.com/ripple/xrpl-wasm-stdlib.git?branch=renames#9822d645870908a79d87a57b0244caa6359cb9cf" dependencies = [ - "xrpl-address-macro", + "xrpl-macros", ] diff --git a/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml b/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml index 81a682bb37..1cc49ac490 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml +++ b/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml @@ -15,4 +15,4 @@ opt-level = 's' panic = "abort" [dependencies] -xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib", branch = "u32-buffer" } +xrpl-std = { git = "https://github.com/ripple/xrpl-wasm-stdlib.git", package = "xrpl-wasm-stdlib", branch = "renames" } diff --git a/src/test/app/wasm_fixtures/codecov_tests/src/host_bindings_loose.rs b/src/test/app/wasm_fixtures/codecov_tests/src/host_bindings_loose.rs index c99a0047d5..6204dff0a2 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/src/host_bindings_loose.rs +++ b/src/test/app/wasm_fixtures/codecov_tests/src/host_bindings_loose.rs @@ -19,20 +19,20 @@ pub const FLOAT_ROUNDING_MODES_UPWARD: i32 = 3; #[allow(unused)] #[link(wasm_import_module = "host_lib")] unsafe extern "C" { - pub fn get_parent_ledger_hash(out_buff_ptr: i32, out_buff_len: i32) -> i32; + pub fn parent_ldgr_hash(out_buff_ptr: i32, out_buff_len: i32) -> i32; - pub fn cache_ledger_obj(keylet_ptr: i32, keylet_len: i32, cache_num: i32) -> i32; + pub fn cache_le(keylet_ptr: i32, keylet_len: i32, cache_num: i32) -> i32; - pub fn get_tx_nested_array_len(locator_ptr: i32, locator_len: i32) -> i32; + pub fn tx_inner_arr_len(locator_ptr: i32, locator_len: i32) -> i32; - pub fn account_keylet( + pub fn accountroot_id( account_ptr: i32, account_len: i32, out_buff_ptr: *mut u8, out_buff_len: usize, ) -> i32; - pub fn line_keylet( + pub fn trustline_id( account1_ptr: *const u8, account1_len: usize, account2_ptr: *const u8, diff --git a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs index 239728575a..ea32e93a88 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs +++ b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs @@ -6,11 +6,11 @@ extern crate std; use core::panic; use xrpl_std::core::current_tx::escrow_finish::{get_current_escrow_finish, EscrowFinish}; use xrpl_std::core::current_tx::traits::TransactionCommonFields; +use xrpl_std::core::keylets; use xrpl_std::core::locator::Locator; use xrpl_std::core::types::blob::DEFAULT_BLOB_SIZE; use xrpl_std::core::types::issue::Issue; use xrpl_std::core::types::issue::XrpIssue; -use xrpl_std::core::types::keylets; use xrpl_std::core::types::mpt_id::MptId; use xrpl_std::host; use xrpl_std::host::error_codes; @@ -58,28 +58,24 @@ pub extern "C" fn finish() -> i32 { // The float tests are also in a separate file (float_tests). // ######################################## with_buffer::<4, _, _>(|ptr, len| { - check_result( - unsafe { host::get_ledger_sqn(ptr, len) }, - 4, - "get_ledger_sqn", - ); + check_result(unsafe { host::ldgr_index(ptr, len) }, 4, "ldgr_index"); }); with_buffer::<4, _, _>(|ptr, len| { check_result( - unsafe { host::get_parent_ledger_time(ptr, len) }, + unsafe { host::parent_ldgr_time(ptr, len) }, 4, - "get_parent_ledger_time", + "parent_ldgr_time", ); }); with_buffer::<32, _, _>(|ptr, len| { check_result( - unsafe { host::get_parent_ledger_hash(ptr, len) }, + unsafe { host::parent_ldgr_hash(ptr, len) }, 32, - "get_parent_ledger_hash", + "parent_ldgr_hash", ); }); with_buffer::<4, _, _>(|ptr, len| { - check_result(unsafe { host::get_base_fee(ptr, len) }, 4, "get_base_fee"); + check_result(unsafe { host::base_fee(ptr, len) }, 4, "base_fee"); }); let amendment_name: &[u8] = b"test_amendment"; let amendment_id: [u8; 32] = [1; 32]; @@ -95,93 +91,89 @@ pub extern "C" fn finish() -> i32 { ); let tx: EscrowFinish = get_current_escrow_finish(); let account = tx.get_account().unwrap_or_panic(); // get_tx_field under the hood - let keylet = keylets::account_keylet(&account).unwrap_or_panic(); // account_keylet under the hood + let keylet = keylets::accountroot_id(&account).unwrap_or_panic(); // accountroot_id under the hood check_result( - unsafe { host::cache_ledger_obj(keylet.as_ptr(), keylet.len(), 0) }, + unsafe { host::cache_le(keylet.as_ptr(), keylet.len(), 0) }, 1, - "cache_ledger_obj", + "cache_le", ); with_buffer::<20, _, _>(|ptr, len| { check_result( - unsafe { host::get_current_ledger_obj_field(sfield::Account, ptr, len) }, + unsafe { host::home_le_field(sfield::Account.into(), ptr, len) }, 20, - "get_current_ledger_obj_field", + "home_le_field", ); }); with_buffer::<20, _, _>(|ptr, len| { check_result( - unsafe { host::get_ledger_obj_field(1, sfield::Account, ptr, len) }, + unsafe { host::le_field(1, sfield::Account.into(), ptr, len) }, 20, - "get_ledger_obj_field", + "le_field", ); }); let mut locator = Locator::new(); locator.pack(sfield::Account); with_buffer::<20, _, _>(|ptr, len| { check_result( - unsafe { host::get_tx_nested_field(locator.as_ptr(), locator.len(), ptr, len) }, + unsafe { host::tx_inner(locator.as_ptr(), locator.len(), ptr, len) }, 20, - "get_tx_nested_field", + "tx_inner", ); }); with_buffer::<20, _, _>(|ptr, len| { check_result( - unsafe { - host::get_current_ledger_obj_nested_field(locator.as_ptr(), locator.len(), ptr, len) - }, + unsafe { host::home_le_inner(locator.as_ptr(), locator.len(), ptr, len) }, 20, - "get_current_ledger_obj_nested_field", + "home_le_inner", ); }); with_buffer::<20, _, _>(|ptr, len| { check_result( - unsafe { - host::get_ledger_obj_nested_field(1, locator.as_ptr(), locator.len(), ptr, len) - }, + unsafe { host::le_inner(1, locator.as_ptr(), locator.len(), ptr, len) }, 20, - "get_ledger_obj_nested_field", + "le_inner", ); }); check_result( - unsafe { host::get_tx_array_len(sfield::Memos) }, + unsafe { host::tx_arr_len(sfield::Memos.into()) }, 32, - "get_tx_array_len", + "tx_arr_len", ); check_result( - unsafe { host::get_current_ledger_obj_array_len(sfield::Memos) }, + unsafe { host::home_le_arr_len(sfield::Memos.into()) }, 32, - "get_current_ledger_obj_array_len", + "home_le_arr_len", ); check_result( - unsafe { host::get_ledger_obj_array_len(1, sfield::Memos) }, + unsafe { host::le_arr_len(1, sfield::Memos.into()) }, 32, - "get_ledger_obj_array_len", + "le_arr_len", ); check_result( - unsafe { host::get_tx_nested_array_len(locator.as_ptr(), locator.len()) }, + unsafe { host::tx_inner_arr_len(locator.as_ptr(), locator.len()) }, 32, - "get_tx_nested_array_len", + "tx_inner_arr_len", ); check_result( - unsafe { host::get_current_ledger_obj_nested_array_len(locator.as_ptr(), locator.len()) }, + unsafe { host::home_le_inner_arr_len(locator.as_ptr(), locator.len()) }, 32, - "get_current_ledger_obj_nested_array_len", + "home_le_inner_arr_len", ); check_result( - unsafe { host::get_ledger_obj_nested_array_len(1, locator.as_ptr(), locator.len()) }, + unsafe { host::le_inner_arr_len(1, locator.as_ptr(), locator.len()) }, 32, - "get_ledger_obj_nested_array_len", + "le_inner_arr_len", ); check_result( - unsafe { host::update_data(account.0.as_ptr(), account.0.len()) }, + unsafe { host::set_data(account.0.as_ptr(), account.0.len()) }, 20, - "update_data", + "set_data", ); with_buffer::<32, _, _>(|ptr, len| { check_result( - unsafe { host::compute_sha512_half(locator.as_ptr(), locator.len(), ptr, len) }, + unsafe { host::sha512_half(locator.as_ptr(), locator.len(), ptr, len) }, 32, - "compute_sha512_half", + "sha512_half", ); }); let message: &[u8] = b"test message"; @@ -206,7 +198,7 @@ pub extern "C" fn finish() -> i32 { with_buffer::<18, _, _>(|ptr, len| { check_result( unsafe { - host::get_nft( + host::nft_uri( account.0.as_ptr(), account.0.len(), nft_id.as_ptr(), @@ -216,44 +208,44 @@ pub extern "C" fn finish() -> i32 { ) }, 18, - "get_nft", + "nft_uri", ) }); with_buffer::<20, _, _>(|ptr, len| { check_result( - unsafe { host::get_nft_issuer(nft_id.as_ptr(), nft_id.len(), ptr, len) }, + unsafe { host::nft_issuer(nft_id.as_ptr(), nft_id.len(), ptr, len) }, 20, - "get_nft_issuer", + "nft_issuer", ) }); with_buffer::<4, _, _>(|ptr, len| { check_result( - unsafe { host::get_nft_taxon(nft_id.as_ptr(), nft_id.len(), ptr, len) }, + unsafe { host::nft_taxon(nft_id.as_ptr(), nft_id.len(), ptr, len) }, 4, - "get_nft_taxon", + "nft_taxon", ) }); check_result( - unsafe { host::get_nft_flags(nft_id.as_ptr(), nft_id.len()) }, + unsafe { host::nft_flags(nft_id.as_ptr(), nft_id.len()) }, 8, - "get_nft_flags", + "nft_flags", ); check_result( - unsafe { host::get_nft_transfer_fee(nft_id.as_ptr(), nft_id.len()) }, + unsafe { host::nft_xfer_fee(nft_id.as_ptr(), nft_id.len()) }, 10, - "get_nft_transfer_fee", + "nft_xfer_fee", ); with_buffer::<4, _, _>(|ptr, len| { check_result( - unsafe { host::get_nft_serial(nft_id.as_ptr(), nft_id.len(), ptr, len) }, + unsafe { host::nft_serial(nft_id.as_ptr(), nft_id.len(), ptr, len) }, 4, - "get_nft_serial", + "nft_serial", ) }); let message = "testing trace"; check_result( unsafe { - host::trace_account( + host::trace_acct( message.as_ptr(), message.len(), account.0.as_ptr(), @@ -261,12 +253,12 @@ pub extern "C" fn finish() -> i32 { ) }, 0, - "trace_account", + "trace_acct", ); let amount = &[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F]; // 95 drops of XRP check_result( unsafe { - host::trace_amount( + host::trace_amt( message.as_ptr(), message.len(), amount.as_ptr(), @@ -274,12 +266,12 @@ pub extern "C" fn finish() -> i32 { ) }, 0, - "trace_amount", + "trace_amt", ); let amount = &[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]; // 0 drops of XRP check_result( unsafe { - host::trace_amount( + host::trace_amt( message.as_ptr(), message.len(), amount.as_ptr(), @@ -287,36 +279,36 @@ pub extern "C" fn finish() -> i32 { ) }, 0, - "trace_amount_zero", + "trace_amt_zero", ); // ######################################## // Step #2: Test set_data edge cases // ######################################## check_result( - unsafe { host_bindings_loose::get_parent_ledger_hash(-1, 4) }, + unsafe { host_bindings_loose::parent_ldgr_hash(-1, 4) }, error_codes::INVALID_PARAMS, - "get_parent_ledger_hash_neg_ptr", + "parent_ldgr_hash_neg_ptr", ); with_buffer::<4, _, _>(|ptr, _len| { check_result( - unsafe { host_bindings_loose::get_parent_ledger_hash(ptr as i32, -1) }, + unsafe { host_bindings_loose::parent_ldgr_hash(ptr as i32, -1) }, error_codes::INVALID_PARAMS, - "get_parent_ledger_hash_neg_len", + "parent_ldgr_hash_neg_len", ) }); with_buffer::<3, _, _>(|ptr, len| { check_result( - unsafe { host_bindings_loose::get_parent_ledger_hash(ptr as i32, len as i32) }, + unsafe { host_bindings_loose::parent_ldgr_hash(ptr as i32, len as i32) }, error_codes::BUFFER_TOO_SMALL, - "get_parent_ledger_hash_buf_too_small", + "parent_ldgr_hash_buf_too_small", ) }); with_buffer::<4, _, _>(|ptr, _len| { check_result( - unsafe { host_bindings_loose::get_parent_ledger_hash(ptr as i32, 1_000_000_000) }, + unsafe { host_bindings_loose::parent_ldgr_hash(ptr as i32, 1_000_000_000) }, error_codes::POINTER_OUT_OF_BOUNDS, - "get_parent_ledger_hash_len_too_long", + "parent_ldgr_hash_len_too_long", ) }); @@ -326,46 +318,44 @@ pub extern "C" fn finish() -> i32 { // SField check_result( - unsafe { host::get_tx_array_len(2) }, // not a valid SField value + unsafe { host::tx_arr_len(2) }, // not a valid SField value error_codes::INVALID_FIELD, - "get_tx_array_len_invalid_sfield", + "tx_arr_len_invalid_sfield", ); // Slice check_result( - unsafe { host_bindings_loose::get_tx_nested_array_len(-1, locator.len() as i32) }, + unsafe { host_bindings_loose::tx_inner_arr_len(-1, locator.len() as i32) }, error_codes::INVALID_PARAMS, - "get_tx_nested_array_len_neg_ptr", + "tx_inner_arr_len_neg_ptr", ); check_result( - unsafe { host_bindings_loose::get_tx_nested_array_len(locator.as_ptr() as i32, -1) }, + unsafe { host_bindings_loose::tx_inner_arr_len(locator.as_ptr() as i32, -1) }, error_codes::INVALID_PARAMS, - "get_tx_nested_array_len_neg_len", + "tx_inner_arr_len_neg_len", ); let long_len = DEFAULT_BLOB_SIZE + 1; check_result( - unsafe { - host_bindings_loose::get_tx_nested_array_len(locator.as_ptr() as i32, long_len as i32) - }, + unsafe { host_bindings_loose::tx_inner_arr_len(locator.as_ptr() as i32, long_len as i32) }, error_codes::DATA_FIELD_TOO_LARGE, - "get_tx_nested_array_len_too_long", + "tx_inner_arr_len_too_long", ); check_result( unsafe { - host_bindings_loose::get_tx_nested_array_len( + host_bindings_loose::tx_inner_arr_len( locator.as_ptr() as i32 + 1_000_000_000, locator.len() as i32, ) }, error_codes::POINTER_OUT_OF_BOUNDS, - "get_tx_nested_array_len_ptr_oob", + "tx_inner_arr_len_ptr_oob", ); // uint32 with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { - host::check_keylet( + host::check_id( account.0.as_ptr(), account.0.len(), locator.as_ptr().wrapping_add(1_000_000_000), @@ -375,13 +365,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::POINTER_OUT_OF_BOUNDS, - "check_keylet_oob_len_u32", + "check_id_oob_len_u32", ) }); with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { - host::check_keylet( + host::check_id( account.0.as_ptr(), account.0.len(), account.0.as_ptr(), @@ -391,7 +381,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "check_keylet_wrong_len_u32", + "check_id_wrong_len_u32", ) }); @@ -430,28 +420,26 @@ pub extern "C" fn finish() -> i32 { // uint256 check_result( unsafe { - host_bindings_loose::cache_ledger_obj( + host_bindings_loose::cache_le( locator.as_ptr() as i32 + 1_000_000_000, locator.len() as i32, 1, ) }, error_codes::POINTER_OUT_OF_BOUNDS, - "cache_ledger_obj_ptr_oob", + "cache_le_ptr_oob", ); check_result( - unsafe { - host_bindings_loose::cache_ledger_obj(locator.as_ptr() as i32, locator.len() as i32, 1) - }, + unsafe { host_bindings_loose::cache_le(locator.as_ptr() as i32, locator.len() as i32, 1) }, error_codes::INVALID_PARAMS, - "cache_ledger_obj_wrong_len", + "cache_le_wrong_len", ); // AccountID with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { - host_bindings_loose::account_keylet( + host_bindings_loose::accountroot_id( locator.as_ptr() as i32 + 1_000_000_000, locator.len() as i32, ptr, @@ -459,13 +447,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::POINTER_OUT_OF_BOUNDS, - "account_keylet_len_oob", + "accountroot_id_len_oob", ) }); with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { - host_bindings_loose::account_keylet( + host_bindings_loose::accountroot_id( locator.as_ptr() as i32, locator.len() as i32, ptr, @@ -473,7 +461,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "account_keylet_wrong_len", + "accountroot_id_wrong_len", ) }); @@ -481,7 +469,7 @@ pub extern "C" fn finish() -> i32 { with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { - host_bindings_loose::line_keylet( + host_bindings_loose::trustline_id( account.0.as_ptr(), account.0.len(), account.0.as_ptr(), @@ -493,13 +481,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::POINTER_OUT_OF_BOUNDS, - "line_keylet_len_oob_currency", + "trustline_id_len_oob_currency", ) }); with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { - host_bindings_loose::line_keylet( + host_bindings_loose::trustline_id( account.0.as_ptr(), account.0.len(), account.0.as_ptr(), @@ -511,7 +499,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "line_keylet_wrong_len_currency", + "trustline_id_wrong_len_currency", ) }); @@ -520,7 +508,7 @@ pub extern "C" fn finish() -> i32 { with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { - host::amm_keylet( + host::amm_id( asset1_bytes.as_ptr(), asset1_bytes.len(), locator.as_ptr().wrapping_add(1_000_000_000), @@ -530,13 +518,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::POINTER_OUT_OF_BOUNDS, - "amm_keylet_len_oob_asset2", + "amm_id_len_oob_asset2", ) }); with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { - host::amm_keylet( + host::amm_id( asset1_bytes.as_ptr(), asset1_bytes.len(), locator.as_ptr(), @@ -546,14 +534,14 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "amm_keylet_len_wrong_len_asset2", + "amm_id_len_wrong_len_asset2", ) }); let currency: &[u8] = b"USD00000000000000000"; // 20 bytes with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { - host::amm_keylet( + host::amm_id( asset1_bytes.as_ptr(), asset1_bytes.len(), currency.as_ptr(), @@ -563,14 +551,14 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "amm_keylet_len_wrong_non_xrp_currency_len", + "amm_id_len_wrong_non_xrp_currency_len", ) }); let xrp_issue: &[u8] = &[0; 40]; // 40 bytes with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { - host::amm_keylet( + host::amm_id( xrp_issue.as_ptr(), xrp_issue.len(), asset1_bytes.as_ptr(), @@ -580,14 +568,14 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "amm_keylet_len_wrong_xrp_currency_len", + "amm_id_len_wrong_xrp_currency_len", ) }); let mptid = MptId::new(1, account); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::amm_keylet( + host::amm_id( mptid.as_ptr(), mptid.len(), asset1_bytes.as_ptr(), @@ -597,7 +585,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "amm_keylet_mpt", + "amm_id_mpt", ) }); @@ -622,39 +610,39 @@ pub extern "C" fn finish() -> i32 { with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::get_tx_field(2, ptr, len) }, + unsafe { host::tx_field(2, ptr, len) }, error_codes::INVALID_FIELD, - "get_tx_field_invalid_sfield", + "tx_field_invalid_sfield", ); }); with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::get_current_ledger_obj_field(2, ptr, len) }, + unsafe { host::home_le_field(2, ptr, len) }, error_codes::INVALID_FIELD, - "get_current_ledger_obj_field_invalid_sfield", + "home_le_field_invalid_sfield", ); }); with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::get_ledger_obj_field(1, 2, ptr, len) }, + unsafe { host::le_field(1, 2, ptr, len) }, error_codes::INVALID_FIELD, - "get_ledger_obj_field_invalid_sfield", + "le_field_invalid_sfield", ); }); check_result( - unsafe { host::get_tx_array_len(2) }, + unsafe { host::tx_arr_len(2) }, error_codes::INVALID_FIELD, - "get_tx_array_len_invalid_sfield", + "tx_arr_len_invalid_sfield", ); check_result( - unsafe { host::get_current_ledger_obj_array_len(2) }, + unsafe { host::home_le_arr_len(2) }, error_codes::INVALID_FIELD, - "get_current_ledger_obj_array_len_invalid_sfield", + "home_le_arr_len_invalid_sfield", ); check_result( - unsafe { host::get_ledger_obj_array_len(1, 2) }, + unsafe { host::le_arr_len(1, 2) }, error_codes::INVALID_FIELD, - "get_ledger_obj_array_len_invalid_sfield", + "le_arr_len_invalid_sfield", ); // invalid Slice @@ -671,47 +659,45 @@ pub extern "C" fn finish() -> i32 { ); with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::get_tx_nested_field(locator.as_ptr(), long_len, ptr, len) }, + unsafe { host::tx_inner(locator.as_ptr(), long_len, ptr, len) }, error_codes::DATA_FIELD_TOO_LARGE, - "get_tx_nested_field_too_big_slice", + "tx_inner_too_big_slice", ); }); with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { - host::get_current_ledger_obj_nested_field(locator.as_ptr(), long_len, ptr, len) - }, + unsafe { host::home_le_inner(locator.as_ptr(), long_len, ptr, len) }, error_codes::DATA_FIELD_TOO_LARGE, - "get_current_ledger_obj_nested_field_too_big_slice", + "home_le_inner_too_big_slice", ); }); with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::get_ledger_obj_nested_field(1, locator.as_ptr(), long_len, ptr, len) }, + unsafe { host::le_inner(1, locator.as_ptr(), long_len, ptr, len) }, error_codes::DATA_FIELD_TOO_LARGE, - "get_ledger_obj_nested_field_too_big_slice", + "le_inner_too_big_slice", ); }); check_result( - unsafe { host::get_tx_nested_array_len(locator.as_ptr(), long_len) }, + unsafe { host::tx_inner_arr_len(locator.as_ptr(), long_len) }, error_codes::DATA_FIELD_TOO_LARGE, - "get_tx_nested_array_len_too_big_slice", + "tx_inner_arr_len_too_big_slice", ); check_result( - unsafe { host::get_current_ledger_obj_nested_array_len(locator.as_ptr(), long_len) }, + unsafe { host::home_le_inner_arr_len(locator.as_ptr(), long_len) }, error_codes::DATA_FIELD_TOO_LARGE, - "get_current_ledger_obj_nested_array_len_too_big_slice", + "home_le_inner_arr_len_too_big_slice", ); check_result( - unsafe { host::get_ledger_obj_nested_array_len(1, locator.as_ptr(), long_len) }, + unsafe { host::le_inner_arr_len(1, locator.as_ptr(), long_len) }, error_codes::DATA_FIELD_TOO_LARGE, - "get_ledger_obj_nested_array_len_too_big_slice", + "le_inner_arr_len_too_big_slice", ); let too_big_data_len = XRPL_CONTRACT_DATA_SIZE + 1; check_result( - unsafe { host::update_data(locator.as_ptr(), too_big_data_len) }, + unsafe { host::set_data(locator.as_ptr(), too_big_data_len) }, error_codes::DATA_FIELD_TOO_LARGE, - "update_data_too_big_slice", + "set_data_too_big_slice", ); check_result( unsafe { @@ -757,15 +743,15 @@ pub extern "C" fn finish() -> i32 { ); with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::compute_sha512_half(locator.as_ptr(), long_len, ptr, len) }, + unsafe { host::sha512_half(locator.as_ptr(), long_len, ptr, len) }, error_codes::DATA_FIELD_TOO_LARGE, - "compute_sha512_half_too_big_slice", + "sha512_half_too_big_slice", ); }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::amm_keylet( + host::amm_id( asset1_bytes.as_ptr(), long_len, asset1_bytes.as_ptr(), @@ -775,13 +761,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::DATA_FIELD_TOO_LARGE, - "amm_keylet_too_big_slice", + "amm_id_too_big_slice", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::credential_keylet( + host::credential_id( account.0.as_ptr(), account.0.len(), account.0.as_ptr(), @@ -793,13 +779,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::DATA_FIELD_TOO_LARGE, - "credential_keylet_too_big_slice", + "credential_id_too_big_slice", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::mptoken_keylet( + host::mptoken_id( mptid.as_ptr(), long_len, account.0.as_ptr(), @@ -809,7 +795,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::DATA_FIELD_TOO_LARGE, - "mptoken_keylet_too_big_slice_mptid", + "mptoken_id_too_big_slice_mptid", ) }); check_result( @@ -828,7 +814,7 @@ pub extern "C" fn finish() -> i32 { let float: [u8; 8] = [0xD4, 0x83, 0x8D, 0x7E, 0xA4, 0xC6, 0x80, 0x00]; check_result( unsafe { - host::trace_opaque_float( + host::trace_xfloat( message.as_ptr(), message.len(), float.as_ptr().wrapping_add(1_000_000_000), @@ -836,11 +822,11 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::POINTER_OUT_OF_BOUNDS, - "trace_opaque_float_oob_slice", + "trace_xfloat_oob_slice", ); check_result( unsafe { - host::trace_amount( + host::trace_amt( message.as_ptr(), message.len(), locator.as_ptr().wrapping_add(1_000_000_000), @@ -848,11 +834,11 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::POINTER_OUT_OF_BOUNDS, - "trace_amount_oob_slice", + "trace_amt_oob_slice", ); check_result( unsafe { - host::float_compare( + host::float_cmp( float.as_ptr().wrapping_add(1_000_000_000), float.len(), float.as_ptr(), @@ -860,11 +846,11 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::POINTER_OUT_OF_BOUNDS, - "float_compare_oob_slice1", + "float_cmp_oob_slice1", ); check_result( unsafe { - host::float_compare( + host::float_cmp( float.as_ptr(), float.len(), float.as_ptr().wrapping_add(1_000_000_000), @@ -872,7 +858,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::POINTER_OUT_OF_BOUNDS, - "float_compare_oob_slice2", + "float_cmp_oob_slice2", ); with_buffer::<2, _, _>(|ptr, len| { check_result( @@ -911,7 +897,7 @@ pub extern "C" fn finish() -> i32 { with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::float_subtract( + host::float_sub( float.as_ptr().wrapping_add(1_000_000_000), float.len(), float.as_ptr(), @@ -922,13 +908,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::POINTER_OUT_OF_BOUNDS, - "float_subtract_oob_slice1", + "float_sub_oob_slice1", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::float_subtract( + host::float_sub( float.as_ptr(), float.len(), float.as_ptr().wrapping_add(1_000_000_000), @@ -939,13 +925,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::POINTER_OUT_OF_BOUNDS, - "float_subtract_oob_slice2", + "float_sub_oob_slice2", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::float_multiply( + host::float_mult( float.as_ptr().wrapping_add(1_000_000_000), float.len(), float.as_ptr(), @@ -956,13 +942,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::POINTER_OUT_OF_BOUNDS, - "float_multiply_oob_slice1", + "float_mult_oob_slice1", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::float_multiply( + host::float_mult( float.as_ptr(), float.len(), float.as_ptr().wrapping_add(1_000_000_000), @@ -973,13 +959,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::POINTER_OUT_OF_BOUNDS, - "float_multiply_oob_slice2", + "float_mult_oob_slice2", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::float_divide( + host::float_div( float.as_ptr().wrapping_add(1_000_000_000), float.len(), float.as_ptr(), @@ -990,13 +976,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::POINTER_OUT_OF_BOUNDS, - "float_divide_oob_slice1", + "float_div_oob_slice1", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::float_divide( + host::float_div( float.as_ptr(), float.len(), float.as_ptr().wrapping_add(1_000_000_000), @@ -1007,7 +993,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::POINTER_OUT_OF_BOUNDS, - "float_divide_oob_slice2", + "float_div_oob_slice2", ) }); with_buffer::<2, _, _>(|ptr, len| { @@ -1048,7 +1034,7 @@ pub extern "C" fn finish() -> i32 { with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { - host::escrow_keylet( + host::escrow_id( account.0.as_ptr(), account.0.len(), account.0.as_ptr(), @@ -1058,13 +1044,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "escrow_keylet_wrong_size_uint32", + "escrow_id_wrong_size_uint32", ) }); with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { - host::mpt_issuance_keylet( + host::mpt_issuance_id( account.0.as_ptr(), account.0.len(), account.0.as_ptr(), @@ -1074,13 +1060,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "mpt_issuance_keylet_wrong_size_uint32", + "mpt_issuance_id_wrong_size_uint32", ) }); with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { - host::nft_offer_keylet( + host::nft_offer_id( account.0.as_ptr(), account.0.len(), account.0.as_ptr(), @@ -1090,13 +1076,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "nft_offer_keylet_wrong_size_uint32", + "nft_offer_id_wrong_size_uint32", ) }); with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { - host::offer_keylet( + host::offer_id( account.0.as_ptr(), account.0.len(), account.0.as_ptr(), @@ -1106,13 +1092,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "offer_keylet_wrong_size_uint32", + "offer_id_wrong_size_uint32", ) }); with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { - host::oracle_keylet( + host::oracle_id( account.0.as_ptr(), account.0.len(), account.0.as_ptr(), @@ -1122,13 +1108,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "oracle_keylet_wrong_size_uint32", + "oracle_id_wrong_size_uint32", ) }); with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { - host::paychan_keylet( + host::paychan_id( account.0.as_ptr(), account.0.len(), account.0.as_ptr(), @@ -1140,13 +1126,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "paychan_keylet_wrong_size_uint32", + "paychan_id_wrong_size_uint32", ) }); with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { - host::permissioned_domain_keylet( + host::permissioned_domain_id( account.0.as_ptr(), account.0.len(), account.0.as_ptr(), @@ -1156,13 +1142,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "permissioned_domain_keylet_wrong_size_uint32", + "permissioned_domain_id_wrong_size_uint32", ) }); with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { - host::ticket_keylet( + host::ticket_id( account.0.as_ptr(), account.0.len(), account.0.as_ptr(), @@ -1172,13 +1158,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "ticket_keylet_wrong_size_uint32", + "ticket_id_wrong_size_uint32", ) }); with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { - host::vault_keylet( + host::vault_id( account.0.as_ptr(), account.0.len(), account.0.as_ptr(), @@ -1188,21 +1174,21 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "vault_keylet_wrong_size_uint32", + "vault_id_wrong_size_uint32", ) }); // invalid UInt256 check_result( - unsafe { host::cache_ledger_obj(locator.as_ptr(), locator.len(), 0) }, + unsafe { host::cache_le(locator.as_ptr(), locator.len(), 0) }, error_codes::INVALID_PARAMS, - "cache_ledger_obj_wrong_size_uint256", + "cache_le_wrong_size_uint256", ); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::get_nft( + host::nft_uri( account.0.as_ptr(), account.0.len(), locator.as_ptr(), @@ -1212,38 +1198,38 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "get_nft_wrong_size_uint256", + "nft_uri_wrong_size_uint256", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::get_nft_issuer(locator.as_ptr(), locator.len(), ptr, len) }, + unsafe { host::nft_issuer(locator.as_ptr(), locator.len(), ptr, len) }, error_codes::INVALID_PARAMS, - "get_nft_issuer_wrong_size_uint256", + "nft_issuer_wrong_size_uint256", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::get_nft_taxon(locator.as_ptr(), locator.len(), ptr, len) }, + unsafe { host::nft_taxon(locator.as_ptr(), locator.len(), ptr, len) }, error_codes::INVALID_PARAMS, - "get_nft_taxon_wrong_size_uint256", + "nft_taxon_wrong_size_uint256", ) }); check_result( - unsafe { host::get_nft_flags(locator.as_ptr(), locator.len()) }, + unsafe { host::nft_flags(locator.as_ptr(), locator.len()) }, error_codes::INVALID_PARAMS, - "get_nft_flags_wrong_size_uint256", + "nft_flags_wrong_size_uint256", ); check_result( - unsafe { host::get_nft_transfer_fee(locator.as_ptr(), locator.len()) }, + unsafe { host::nft_xfer_fee(locator.as_ptr(), locator.len()) }, error_codes::INVALID_PARAMS, - "get_nft_transfer_fee_wrong_size_uint256", + "nft_xfer_fee_wrong_size_uint256", ); with_buffer::<4, _, _>(|ptr, len| { check_result( - unsafe { host::get_nft_serial(locator.as_ptr(), locator.len(), ptr, len) }, + unsafe { host::nft_serial(locator.as_ptr(), locator.len(), ptr, len) }, error_codes::INVALID_PARAMS, - "get_nft_serial_wrong_size_uint256", + "nft_serial_wrong_size_uint256", ) }); @@ -1251,9 +1237,9 @@ pub extern "C" fn finish() -> i32 { with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::account_keylet(locator.as_ptr(), locator.len(), ptr, len) }, + unsafe { host::accountroot_id(locator.as_ptr(), locator.len(), ptr, len) }, error_codes::INVALID_PARAMS, - "account_keylet_wrong_size_account_id", + "accountroot_id_wrong_size_account_id", ) }); let seq: i32 = 1; @@ -1261,7 +1247,7 @@ pub extern "C" fn finish() -> i32 { with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::check_keylet( + host::check_id( locator.as_ptr(), locator.len(), seq_bytes.as_ptr(), @@ -1271,13 +1257,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "check_keylet_wrong_size_account_id", + "check_id_wrong_size_account_id", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::credential_keylet( + host::credential_id( locator.as_ptr(), // invalid AccountID size locator.len(), account.0.as_ptr(), @@ -1289,13 +1275,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "credential_keylet_wrong_size_account_id1", + "credential_id_wrong_size_account_id1", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::credential_keylet( + host::credential_id( account.0.as_ptr(), account.0.len(), locator.as_ptr(), // invalid AccountID size @@ -1307,13 +1293,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "credential_keylet_wrong_size_account_id2", + "credential_id_wrong_size_account_id2", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::delegate_keylet( + host::delegate_id( locator.as_ptr(), // invalid AccountID size locator.len(), account.0.as_ptr(), @@ -1323,13 +1309,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "delegate_keylet_wrong_size_account_id1", + "delegate_id_wrong_size_account_id1", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::delegate_keylet( + host::delegate_id( account.0.as_ptr(), account.0.len(), locator.as_ptr(), // invalid AccountID size @@ -1339,13 +1325,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "delegate_keylet_wrong_size_account_id2", + "delegate_id_wrong_size_account_id2", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::deposit_preauth_keylet( + host::deposit_preauth_id( locator.as_ptr(), // invalid AccountID size locator.len(), account.0.as_ptr(), @@ -1355,13 +1341,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "deposit_preauth_keylet_wrong_size_account_id1", + "deposit_preauth_id_wrong_size_account_id1", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::deposit_preauth_keylet( + host::deposit_preauth_id( account.0.as_ptr(), account.0.len(), locator.as_ptr(), // invalid AccountID size @@ -1371,20 +1357,20 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "deposit_preauth_keylet_wrong_size_account_id2", + "deposit_preauth_id_wrong_size_account_id2", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::did_keylet(locator.as_ptr(), locator.len(), ptr, len) }, + unsafe { host::did_id(locator.as_ptr(), locator.len(), ptr, len) }, error_codes::INVALID_PARAMS, - "did_keylet_wrong_size_account_id", + "did_id_wrong_size_account_id", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::escrow_keylet( + host::escrow_id( locator.as_ptr(), locator.len(), seq_bytes.as_ptr(), @@ -1394,13 +1380,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "escrow_keylet_wrong_size_account_id", + "escrow_id_wrong_size_account_id", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::line_keylet( + host::trustline_id( locator.as_ptr(), // invalid AccountID size locator.len(), account.0.as_ptr(), @@ -1412,13 +1398,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "line_keylet_wrong_size_account_id1", + "trustline_id_wrong_size_account_id1", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::line_keylet( + host::trustline_id( account.0.as_ptr(), account.0.len(), locator.as_ptr(), // invalid AccountID size @@ -1430,13 +1416,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "line_keylet_wrong_size_account_id2", + "trustline_id_wrong_size_account_id2", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::mpt_issuance_keylet( + host::mpt_issuance_id( locator.as_ptr(), locator.len(), seq_bytes.as_ptr(), @@ -1446,13 +1432,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "mpt_issuance_keylet_wrong_size_account_id", + "mpt_issuance_id_wrong_size_account_id", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::mptoken_keylet( + host::mptoken_id( mptid.as_ptr(), mptid.len(), locator.as_ptr(), @@ -1462,13 +1448,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "mptoken_keylet_wrong_size_account_id", + "mptoken_id_wrong_size_account_id", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::nft_offer_keylet( + host::nft_offer_id( locator.as_ptr(), locator.len(), seq_bytes.as_ptr(), @@ -1478,13 +1464,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "nft_offer_keylet_wrong_size_account_id", + "nft_offer_id_wrong_size_account_id", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::offer_keylet( + host::offer_id( locator.as_ptr(), locator.len(), seq_bytes.as_ptr(), @@ -1494,13 +1480,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "offer_keylet_wrong_size_account_id", + "offer_id_wrong_size_account_id", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::oracle_keylet( + host::oracle_id( locator.as_ptr(), locator.len(), seq_bytes.as_ptr(), @@ -1510,13 +1496,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "oracle_keylet_wrong_size_account_id", + "oracle_id_wrong_size_account_id", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::paychan_keylet( + host::paychan_id( locator.as_ptr(), // invalid AccountID size locator.len(), account.0.as_ptr(), @@ -1528,13 +1514,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "paychan_keylet_wrong_size_account_id1", + "paychan_id_wrong_size_account_id1", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::paychan_keylet( + host::paychan_id( account.0.as_ptr(), account.0.len(), locator.as_ptr(), // invalid AccountID size @@ -1546,13 +1532,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "paychan_keylet_wrong_size_account_id2", + "paychan_id_wrong_size_account_id2", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::permissioned_domain_keylet( + host::permissioned_domain_id( locator.as_ptr(), locator.len(), seq_bytes.as_ptr(), @@ -1562,20 +1548,20 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "permissioned_domain_keylet_wrong_size_account_id", + "permissioned_domain_id_wrong_size_account_id", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( - unsafe { host::signers_keylet(locator.as_ptr(), locator.len(), ptr, len) }, + unsafe { host::signers_id(locator.as_ptr(), locator.len(), ptr, len) }, error_codes::INVALID_PARAMS, - "signers_keylet_wrong_size_account_id", + "signers_id_wrong_size_account_id", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::ticket_keylet( + host::ticket_id( locator.as_ptr(), locator.len(), seq_bytes.as_ptr(), @@ -1585,13 +1571,13 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "ticket_keylet_wrong_size_account_id", + "ticket_id_wrong_size_account_id", ) }); with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::vault_keylet( + host::vault_id( locator.as_ptr(), locator.len(), seq_bytes.as_ptr(), @@ -1601,14 +1587,14 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "vault_keylet_wrong_size_account_id", + "vault_id_wrong_size_account_id", ) }); let uint256: &[u8] = b"00000000000000000000000000000001"; with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::get_nft( + host::nft_uri( locator.as_ptr(), locator.len(), uint256.as_ptr(), @@ -1618,12 +1604,12 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "get_nft_wrong_size_account_id", + "nft_uri_wrong_size_account_id", ) }); check_result( unsafe { - host::trace_account( + host::trace_acct( message.as_ptr(), message.len(), locator.as_ptr(), @@ -1631,7 +1617,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "trace_account_wrong_size_account_id", + "trace_acct_wrong_size_account_id", ); // invalid Currency was already tested above @@ -1652,7 +1638,7 @@ pub extern "C" fn finish() -> i32 { ); check_result( unsafe { - host::trace_opaque_float( + host::trace_xfloat( message.as_ptr().wrapping_add(1_000_000_000), message.len(), float.as_ptr(), @@ -1660,11 +1646,11 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::POINTER_OUT_OF_BOUNDS, - "trace_opaque_float_oob_string", + "trace_xfloat_oob_string", ); check_result( unsafe { - host::trace_account( + host::trace_acct( message.as_ptr().wrapping_add(1_000_000_000), message.len(), account.0.as_ptr(), @@ -1672,11 +1658,11 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::POINTER_OUT_OF_BOUNDS, - "trace_account_oob_string", + "trace_acct_oob_string", ); check_result( unsafe { - host::trace_amount( + host::trace_amt( message.as_ptr().wrapping_add(1_000_000_000), message.len(), amount.as_ptr(), @@ -1684,7 +1670,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::POINTER_OUT_OF_BOUNDS, - "trace_amount_oob_string", + "trace_amt_oob_string", ); // trace too large @@ -1708,15 +1694,13 @@ pub extern "C" fn finish() -> i32 { "trace_num_too_long", ); check_result( - unsafe { - host::trace_opaque_float(message.as_ptr(), long_len, float.as_ptr(), float.len()) - }, + unsafe { host::trace_xfloat(message.as_ptr(), long_len, float.as_ptr(), float.len()) }, error_codes::DATA_FIELD_TOO_LARGE, - "trace_opaque_float_too_long", + "trace_xfloat_too_long", ); check_result( unsafe { - host::trace_account( + host::trace_acct( message.as_ptr(), long_len, account.0.as_ptr(), @@ -1724,19 +1708,19 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::DATA_FIELD_TOO_LARGE, - "trace_account_too_long", + "trace_acct_too_long", ); check_result( - unsafe { host::trace_amount(message.as_ptr(), long_len, amount.as_ptr(), amount.len()) }, + unsafe { host::trace_amt(message.as_ptr(), long_len, amount.as_ptr(), amount.len()) }, error_codes::DATA_FIELD_TOO_LARGE, - "trace_amount_too_long", + "trace_amt_too_long", ); // trace amount errors check_result( unsafe { - host::trace_amount( + host::trace_amt( message.as_ptr(), message.len(), locator.as_ptr(), @@ -1744,7 +1728,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "trace_amount_wrong_length", + "trace_amt_wrong_length", ); // other misc errors @@ -1752,7 +1736,7 @@ pub extern "C" fn finish() -> i32 { with_buffer::<2, _, _>(|ptr, len| { check_result( unsafe { - host::mptoken_keylet( + host::mptoken_id( locator.as_ptr(), locator.len(), account.0.as_ptr(), @@ -1762,7 +1746,7 @@ pub extern "C" fn finish() -> i32 { ) }, error_codes::INVALID_PARAMS, - "mptoken_keylet_mptid_wrong_length", + "mptoken_id_mptid_wrong_length", ) }); check_result( @@ -1783,7 +1767,7 @@ pub extern "C" fn finish() -> i32 { let empty: &[u8] = b""; check_result( unsafe { - host::trace_account( + host::trace_acct( empty.as_ptr(), empty.len(), account.0.as_ptr(), @@ -1791,7 +1775,7 @@ pub extern "C" fn finish() -> i32 { ) }, 0, - "trace_account_check_desync", + "trace_acct_check_desync", ); 1 // <-- If we get here, finish the escrow. diff --git a/src/test/app/wasm_fixtures/copyFixtures.py b/src/test/app/wasm_fixtures/copyFixtures.py index 3d9faddbed..8e457b71e2 100644 --- a/src/test/app/wasm_fixtures/copyFixtures.py +++ b/src/test/app/wasm_fixtures/copyFixtures.py @@ -1,20 +1,87 @@ # cspell: disable import os -import sys -import subprocess import re +import shlex +import subprocess +import sys +import tempfile +import zipfile +from difflib import get_close_matches OPT = "-Oz" +BASE_PATH = os.path.abspath(os.path.dirname(__file__)) -def update_fixture(project_name, wasm): - fixture_name = ( - re.sub(r"_([a-z])", lambda m: m.group(1).upper(), project_name) + "WasmHex" - ) +def pascal_case(name): + return "".join(word[:1].upper() + word[1:] for word in re.split(r"[_\W]+", name)) + + +def normalize_name(name): + name = re.sub(r"([a-z0-9])([A-Z])", r"\1_\2", name) + return re.sub(r"[^a-z0-9]", "", name.lower()) + + +def fixture_key(name): + name = normalize_name(name).removeprefix("k") + return name.removesuffix("wasmhex").removesuffix("hex") + + +def declared_fixtures(): + h_path = os.path.join(BASE_PATH, "fixtures.h") + with open(h_path, "r", encoding="utf8") as f: + return re.findall( + r"extern std::string const ([A-Za-z_][A-Za-z0-9_]*);", f.read() + ) + + +def find_fixture_name(project_name, suffix): + default = re.sub(r"_([a-z])", lambda m: m.group(1).upper(), project_name) + suffix + k_default = f"k{pascal_case(project_name)}{suffix}" + declarations = declared_fixtures() + normalized = {normalize_name(name): name for name in declarations} + fixture_keys = {fixture_key(name): name for name in declarations} + + for name in (default, k_default): + if normalize_name(name) in normalized: + return normalized[normalize_name(name)] + + project_key = normalize_name(project_name) + matches = [ + name + for key, name in fixture_keys.items() + if key.endswith(project_key) + or key.startswith(project_key) + or project_key.endswith(key) + or project_key.startswith(key) + ] + if len(matches) == 1: + return matches[0] + + close = get_close_matches(project_key, fixture_keys.keys(), n=1, cutoff=0.82) + if close: + return fixture_keys[close[0]] + + return k_default + + +def fixture_cpp_path(fixture_name): + pattern = rf"extern std::string const {fixture_name} =" + for file_name in os.listdir(BASE_PATH): + if not file_name.endswith(".cpp"): + continue + cpp_path = os.path.join(BASE_PATH, file_name) + with open(cpp_path, "r", encoding="utf8") as f: + if re.search(pattern, f.read()): + return cpp_path + return os.path.join(BASE_PATH, "fixtures.cpp") + + +def update_fixture(project_name, wasm, suffix="WasmHex"): + fixture_name = find_fixture_name(project_name, suffix) print(f"Updating fixture: {fixture_name}") - cpp_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "fixtures.cpp")) - h_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "fixtures.h")) + cpp_path = fixture_cpp_path(fixture_name) + h_path = os.path.join(BASE_PATH, "fixtures.h") with open(cpp_path, "r", encoding="utf8") as f: cpp_content = f.read() @@ -30,7 +97,7 @@ def update_fixture(project_name, wasm): with open(h_path, "r", encoding="utf8") as f: h_content = f.read() updated_h_content = ( - h_content.rstrip() + f"\n\n extern std::string const {fixture_name};\n" + h_content.rstrip() + f"\n\nextern std::string const {fixture_name};\n" ) with open(h_path, "w", encoding="utf8") as f: f.write(updated_h_content) @@ -43,83 +110,178 @@ def update_fixture(project_name, wasm): f.write(updated_cpp_content) +def read_wasm_hex(path): + with open(path, "rb") as f: + return f.read().hex() + + def process_rust(project_name): - project_path = os.path.abspath( - os.path.join(os.path.dirname(__file__), project_name) - ) - wasm_location = f"target/wasm32v1-none/release/{project_name}.wasm" - build_cmd = ( - f"(cd {project_path} " - f"&& cargo build --target wasm32v1-none --release " - f"&& wasm-opt {wasm_location} {OPT} -o {wasm_location}" - ")" + project_path = os.path.join(BASE_PATH, project_name) + wasm_location = os.path.join( + project_path, "target", "wasm32v1-none", "release", f"{project_name}.wasm" ) try: - subprocess.run(build_cmd, shell=True, check=True) + subprocess.run( + ["cargo", "build", "--target", "wasm32v1-none", "--release"], + cwd=project_path, + check=True, + ) + subprocess.run( + ["wasm-opt", wasm_location, OPT, "-o", wasm_location], check=True + ) print(f"WASM file for {project_name} has been built and optimized.") + except FileNotFoundError as e: + print(f"exec error: {e.filename} is required to build Rust fixtures") + sys.exit(1) except subprocess.CalledProcessError as e: print(f"exec error: {e}") sys.exit(1) - src_path = os.path.abspath( - os.path.join( - os.path.dirname(__file__), - f"{project_name}/target/wasm32v1-none/release/{project_name}.wasm", - ) - ) - with open(src_path, "rb") as f: - data = f.read() - wasm = data.hex() - update_fixture(project_name, wasm) + update_fixture(project_name, read_wasm_hex(wasm_location)) def process_c(project_name): - project_path = os.path.abspath( - os.path.join(os.path.dirname(__file__), f"{project_name}.c") - ) - wasm_path = os.path.abspath( - os.path.join(os.path.dirname(__file__), f"{project_name}.wasm") - ) - build_cmd = ( - f"$CC --sysroot=$SYSROOT " - f"-O3 -ffast-math --target=wasm32 -fno-exceptions -fno-threadsafe-statics -fvisibility=default -Wl,--export-all -Wl,--no-entry -Wl,--allow-undefined -DNDEBUG --no-standard-libraries -fno-builtin-memset " - f"-o {wasm_path} {project_path}" - f"&& wasm-opt {wasm_path} {OPT} -o {wasm_path}" - ) + project_path = os.path.join(BASE_PATH, f"{project_name}.c") + wasm_path = os.path.join(BASE_PATH, f"{project_name}.wasm") + cc = os.environ.get("CC") + sysroot = os.environ.get("SYSROOT") + if not cc or not sysroot: + print("exec error: CC and SYSROOT are required to build C fixtures") + sys.exit(1) + + build_cmd = [ + *shlex.split(cc), + f"--sysroot={sysroot}", + "-O3", + "-ffast-math", + "--target=wasm32", + "-fno-exceptions", + "-fno-threadsafe-statics", + "-fvisibility=default", + "-Wl,--export-all", + "-Wl,--no-entry", + "-Wl,--allow-undefined", + "-DNDEBUG", + "--no-standard-libraries", + "-fno-builtin-memset", + "-o", + wasm_path, + project_path, + ] try: - subprocess.run(build_cmd, shell=True, check=True) + subprocess.run(build_cmd, check=True) + subprocess.run(["wasm-opt", wasm_path, OPT, "-o", wasm_path], check=True) print( f"WASM file for {project_name} has been built with WASI support using clang." ) + except FileNotFoundError as e: + print(f"exec error: {e.filename} is required to build C fixtures") + sys.exit(1) except subprocess.CalledProcessError as e: print(f"exec error: {e}") sys.exit(1) - with open(wasm_path, "rb") as f: - data = f.read() - wasm = data.hex() - update_fixture(project_name, wasm) + update_fixture(project_name, read_wasm_hex(wasm_path)) + + +def wat_to_wasm(wat_path, wasm_path): + build_cmd = ["wat2wasm", wat_path, "-o", wasm_path] + try: + subprocess.run(build_cmd, check=True) + print(f"WASM file for {os.path.basename(wat_path)} has been built.") + except FileNotFoundError: + print("exec error: wat2wasm is required to build WAT fixtures") + sys.exit(1) + except subprocess.CalledProcessError as e: + print(f"exec error: {e}") + sys.exit(1) + + +def process_wat_file(wat_path): + project_name = os.path.splitext(os.path.basename(wat_path))[0] + with open(wat_path, "r", encoding="utf8") as f: + if "(module" not in f.read(): + print(f"Skipping WAT fixture without a module: {project_name}") + return + + with tempfile.TemporaryDirectory() as tmpdir: + wasm_path = os.path.join(tmpdir, f"{project_name}.wasm") + wat_to_wasm(wat_path, wasm_path) + update_fixture(project_name, read_wasm_hex(wasm_path), "Hex") + + +def process_wat_zip(zip_path): + project_name = os.path.splitext(os.path.basename(zip_path))[0] + with tempfile.TemporaryDirectory() as tmpdir: + with zipfile.ZipFile(zip_path) as archive: + wat_names = [name for name in archive.namelist() if name.endswith(".wat")] + if len(wat_names) != 1: + print(f"exec error: expected one .wat file in {zip_path}") + sys.exit(1) + archive.extract(wat_names[0], tmpdir) + + wasm_path = os.path.join(tmpdir, f"{project_name}.wasm") + wat_to_wasm(os.path.join(tmpdir, wat_names[0]), wasm_path) + update_fixture(project_name, read_wasm_hex(wasm_path), "Hex") + + +def process_wat(project_name): + candidates = [ + os.path.join(BASE_PATH, f"{project_name}.wat"), + os.path.join(BASE_PATH, "wat", f"{project_name}.wat"), + os.path.join(BASE_PATH, "wat", f"{project_name}.zip"), + ] + for path in candidates: + if os.path.isfile(path): + if path.endswith(".zip"): + process_wat_zip(path) + else: + process_wat_file(path) + return + + print(f"exec error: fixture {project_name} not found") + sys.exit(1) if __name__ == "__main__": if len(sys.argv) > 2: print("Usage: python copyFixtures.py []") sys.exit(1) + if len(sys.argv) == 2: - if os.path.isdir(os.path.join(os.path.dirname(__file__), sys.argv[1])): - process_rust(sys.argv[1]) + project_name = os.path.splitext(os.path.basename(sys.argv[1]))[0] + if os.path.isfile(os.path.join(BASE_PATH, project_name, "Cargo.toml")): + process_rust(project_name) + elif os.path.isfile(os.path.join(BASE_PATH, f"{project_name}.c")): + process_c(project_name) else: - process_c(sys.argv[1]) + process_wat(project_name) print("Fixture has been processed.") else: dirs = [ d - for d in os.listdir(os.path.dirname(__file__)) - if os.path.isdir(os.path.join(os.path.dirname(__file__), d)) + for d in os.listdir(BASE_PATH) + if os.path.isfile(os.path.join(BASE_PATH, d, "Cargo.toml")) ] - c_files = [f for f in os.listdir(os.path.dirname(__file__)) if f.endswith(".c")] - for d in dirs: + c_files = [f for f in os.listdir(BASE_PATH) if f.endswith(".c")] + wat_files = [f for f in os.listdir(BASE_PATH) if f.endswith(".wat")] + wat_path = os.path.join(BASE_PATH, "wat") + wat_fixture_files = [ + f + for f in (os.listdir(wat_path) if os.path.isdir(wat_path) else []) + if f.endswith((".wat", ".zip")) + ] + + for d in sorted(dirs): process_rust(d) - for c in c_files: + for c in sorted(c_files): process_c(c[:-2]) + for wat in sorted(wat_files): + process_wat_file(os.path.join(BASE_PATH, wat)) + for wat_fixture in sorted(wat_fixture_files): + path = os.path.join(wat_path, wat_fixture) + if wat_fixture.endswith(".zip"): + process_wat_zip(path) + else: + process_wat_file(path) print("All fixtures have been processed.") diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index a6e84dd06b..8e67c4245c 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -5,827 +5,638 @@ #include extern std::string const kLedgerSqnWasmHex = - "0061736d01000000010e0360027f7f017f6000006000017f02160103656e760e6765745f6c65646765725f73716e00" - "0003030201020503010002063f0a7f01418088040b7f004180080b7f004180080b7f004180080b7f00418088040b7f" - "004180080b7f00418088040b7f00418080080b7f0041000b7f0041010b07aa010c066d656d6f72790200115f5f7761" - "736d5f63616c6c5f63746f727300010666696e69736800020c5f5f64736f5f68616e646c6503010a5f5f646174615f" - "656e6403020b5f5f737461636b5f6c6f7703030c5f5f737461636b5f6869676803040d5f5f676c6f62616c5f626173" - "6503050b5f5f686561705f6261736503060a5f5f686561705f656e6403070d5f5f6d656d6f72795f6261736503080c" - "5f5f7461626c655f6261736503090a3d0202000b3801037f230041106b220024002000410c6a410410002101200028" - "020c2102200041106a2400200141054100200241054f1b20014100481b0b007f0970726f647563657273010c70726f" - "6365737365642d62790105636c616e675f31392e312e352d776173692d73646b202868747470733a2f2f6769746875" - "622e636f6d2f6c6c766d2f6c6c766d2d70726f6a656374206162346235613264623538323935386166316565333038" - "61373930636664623432626432343732302900490f7461726765745f6665617475726573042b0f6d757461626c652d" - "676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; + "0061736d01000000010e0360027f7f017f6000006000017f02120103656e760a6c6467725f696e6465780000030302" + "01020503010002062b077f01418088040b7f004180080b7f004180080b7f004180080b7f00418088040b7f0041000b" + "7f0041010b07800109066d656d6f72790200115f5f7761736d5f63616c6c5f63746f727300010666696e6973680002" + "0c5f5f64736f5f68616e646c6503010a5f5f646174615f656e6403020d5f5f676c6f62616c5f6261736503030b5f5f" + "686561705f6261736503040d5f5f6d656d6f72795f6261736503050c5f5f7461626c655f6261736503060a3d020200" + "0b3801037f230041106b220024002000410c6a410410002101200028020c2102200041106a24002001410541002002" + "41054f1b20014100481b0b002f0970726f647563657273010c70726f6365737365642d6279010e486f6d6562726577" + "20636c616e670631342e302e36"; extern std::string const kAllHostFunctionsWasmHex = "0061736d0100000001540c60027f7f017f60037f7f7f017f60047f7f7f7f017f60017f017f60067f7f7f7f7f7f017f" "60037f7f7f0060057f7f7f7f7f017f60037f7f7e017f60087f7f7f7f7f7f7f7f017f60017f0060027f7f006000017f" - "02ae061a08686f73745f6c69620c6765745f74785f6669656c64000108686f73745f6c69620974726163655f6e756d" - "000708686f73745f6c6962057472616365000608686f73745f6c69620e6765745f6c65646765725f73716e00000868" - "6f73745f6c6962166765745f706172656e745f6c65646765725f74696d65000008686f73745f6c6962166765745f70" - "6172656e745f6c65646765725f68617368000008686f73745f6c6962136765745f74785f6e65737465645f6669656c" - "64000208686f73745f6c6962106765745f74785f61727261795f6c656e000308686f73745f6c6962176765745f7478" - "5f6e65737465645f61727261795f6c656e000008686f73745f6c69621c6765745f63757272656e745f6c6564676572" - "5f6f626a5f6669656c64000108686f73745f6c6962236765745f63757272656e745f6c65646765725f6f626a5f6e65" - "737465645f6669656c64000208686f73745f6c6962206765745f63757272656e745f6c65646765725f6f626a5f6172" - "7261795f6c656e000308686f73745f6c6962276765745f63757272656e745f6c65646765725f6f626a5f6e65737465" - "645f61727261795f6c656e000008686f73745f6c69621063616368655f6c65646765725f6f626a000108686f73745f" - "6c69621163726564656e7469616c5f6b65796c6574000808686f73745f6c69620d657363726f775f6b65796c657400" - "0408686f73745f6c69620d6f7261636c655f6b65796c6574000408686f73745f6c696213636f6d707574655f736861" - "3531325f68616c66000208686f73745f6c6962076765745f6e6674000408686f73745f6c69620b7570646174655f64" - "617461000008686f73745f6c6962146765745f6c65646765725f6f626a5f6669656c64000208686f73745f6c69621b" - "6765745f6c65646765725f6f626a5f6e65737465645f6669656c64000608686f73745f6c6962186765745f6c656467" - "65725f6f626a5f61727261795f6c656e000008686f73745f6c69621f6765745f6c65646765725f6f626a5f6e657374" - "65645f61727261795f6c656e000108686f73745f6c69620e6163636f756e745f6b65796c6574000208686f73745f6c" - "69620d74726163655f6163636f756e740002030c0b090a05050b05000101030005030100110619037f01418080c000" - "0b7f0041af99c0000b7f0041b099c0000b072e04066d656d6f727902000666696e697368001e0a5f5f646174615f65" - "6e6403010b5f5f686561705f6261736503020a911e0b990101027f230041306b220124002000027f41818020200141" - "1c6a4114100022024114470440417f20022002417f4e1b210241010c010b200020012f001c3b0001200041036a2001" - "411e6a2d00003a0000200120012900233703082001200141286a29000037000d200128001f21022000410d6a200129" - "000d3700002000200129030837020841000b3a000020002002360204200141306a24000b460020012d000041014604" - "40418080c000410b20013402041001000b20002001290001370000200041106a200141116a28000036000020004108" - "6a200141096a2900003700000b1900200241094f0440000b20002002360204200020013602000b1900200241214f04" - "40000b20002002360204200020013602000ba91b01097f230041b0036b22002400418b80c000411b41014100410010" - "021a41a680c000411941014100410010021a41e780c000412b41014100410010021a20004100360270024002400240" - "02400240024002400240200041f0006a220741041003220141004a0440419281c00041172000280270220141187420" - "014180fe03714108747220014108764180fe037120014118767272ad10011a200041003602900120004190016a2203" - "41041004220141004c0d0141a981c0004113200028029001220141187420014180fe03714108747220014108764180" - "fe037120014118767272ad10011a200041c8016a22024200370300200041c0016a22054200370300200041b8016a22" - "044200370300200042003703b001200041b0016a22064120100522014120470d0241bc81c000411320064120410110" - "021a41cf81c000412041014100410010021a41dc82c000412e41014100410010021a200041a0016a41003602002000" - "4198016a420037030020004200370390014181802020034114100022014114470d03418a83c00041142003101f2000" - "420037034841888018200041c8006a22034108100022014108470d04419e83c0004117420810011a41b583c0004128" - "20034108410110021a2000410036023041848008200041306a22034104100022014104470d0541dd83c00041152003" - "4104410110021a200041f4006a410036000020004100360071200041013a0070200242003703002005420037030020" - "044200370300200042003703b001024020074108200641201006220141004e044041f283c00041142001ad10011a20" - "0041286a20062001101d418684c000410d2000280228200028022c410110021a0c010b419384c00041292001ac1001" - "1a0b41bc84c00041154183803c1007ac10011a41d184c00041134189803c1007ac10011a0240200041f0006a410810" - "08220141004e044041e484c00041142001ad10011a0c010b41f884c000412d2001ac10011a0b41a585c00041234101" - "4100410010021a41de86c000413341014100410010021a2000420037034841828018200041c8006a22014108100922" - "0341004c0d0620034108460440419187c000412b420810011a41bc87c000412f20014108410110021a0c080b41eb87" - "c000412f2003ad10011a200041206a200041c8006a2003101c419a88c000411720002802202000280224410110021a" - "0c070b41bf82c000411d2001ac10011a419b7f21020c070b419a82c00041252001ac10011a419a7f21020c060b41ef" - "81c000412b2001ac10011a41997f21020c050b41b486c000412a2001ac10011a41b77e21020c040b41f385c00041c1" - "002001ac10011a41b67e21020c030b41c885c000412b2001ac10011a41b57e21020c020b41b188c00041c5002003ac" - "10011a0b200041a0016a410036020020004198016a4200370300200042003703900102404181802020004190016a22" - "0341141009220141004a044041f688c000411e2003101f0c010b419489c00041332001ac10011a0b200041f4006a41" - "0036000020004100360071200041013a0070200041c8016a4200370300200041c0016a4200370300200041b8016a42" - "00370300200042003703b0010240200041f0006a4108200041b0016a22014120100a220341004e044041c789c00041" - "1c2003ad10011a200041186a20012003101d41e389c00041152000280218200028021c410110021a0c010b41f889c0" - "0041392003ac10011a0b41b18ac00041244183803c100bac10011a0240200041f0006a4108100c220141004e044041" - "d58ac000411c2001ad10011a0c010b41f18ac000413d2001ac10011a0b41ae8bc000412841014100410010021a41d6" - "8bc000412f41014100410010021a200041b0016a2203101a200041f0006a22012003101b200041a8016a4200370300" - "200041a0016a420037030020004198016a420037030020004200370390010240024002400240024020012000419001" - "6a2203102022014120460440200341204100100d220441004a044041858cc00041232004ad10011a20004200370330" - "2004200041306a220141081021220341004c0d022003410846044041a88cc000412a420810011a41d28cc000412e20" - "014108410110021a0c060b41808dc000412e2003ad10011a200041106a200041306a2003101c41ae8dc00041162000" - "2802102000280214410110021a0c050b41e68fc000413c2004ac10011a200041c8016a4200370300200041c0016a42" - "00370300200041b8016a4200370300200042003703b0014101200041b0016a4120102122014100480d020c030b41ba" - "92c000412e2001ac10011a41ef7c21020c050b41c48dc000412b2003ac10011a0c020b41a290c00041c1002001ac10" - "011a0b200041cc006a410036000020004100360049200041013a00484101200041c8006a200041b0016a1022220141" - "0048044041e390c00041352001ac10011a0b4101102322014100480440419891c00041322001ac10011a0b41012000" - "41c8006a10242201410048044041ca91c00041392001ac10011a0b418392c000413741014100410010021a0c010b20" - "0041cc006a410036000020004100360049200041013a0048200041c8016a4200370300200041c0016a420037030020" - "0041b8016a4200370300200042003703b00102402004200041c8006a200041b0016a22011022220341004e044041ef" - "8dc000411b2003ad10011a200041086a20012003101d418a8ec00041142000280208200028020c410110021a0c010b" - "419e8ec00041312003ac10011a0b41cf8ec000412320041023ac10011a02402004200041c8006a1024220141004e04" - "4041f28ec000411b2001ad10011a0c010b418d8fc00041352001ac10011a0b41c28fc000412441014100410010021a" - "0b41e892c000412f41014100410010021a200041b0016a2201101a200041306a22042001101b200041e0006a420037" - "0300200041d8006a4200370300200041d0006a420037030020004200370348024002400240024002402004200041c8" - "006a2203102022014120460440419793c000410f20034120410110021a20004188016a420037030020004180016a42" - "00370300200041f8006a4200370300200042003703700240200441142004411441a693c0004109200041f0006a2201" - "4120100e220341004a0440200020012003101d41ae93c000411220002802002000280204410110021a0c010b41c093" - "c000413c2003ac10011a0b200041a8016a22064200370300200041a0016a2202420037030020004198016a22054200" - "370300200042003703900120004180808cc07e360268200041306a22034114200041e8006a410420004190016a2208" - "4120100f22014120470d0141fc93c000410e20084120410110021a200041c8016a4200370300200041c0016a420037" - "0300200041b8016a4200370300200042003703b001200041808080d00236026c20034114200041ec006a4104200041" - "b0016a22044120101022014120470d02418a94c000410e20044120410110021a419894c00041244101410041001002" - "1a419195c000412541014100410010021a20004188016a420037030020004180016a4200370300200041f8006a4200" - "3703002000420037037041b695c0004117200041f0006a22034120101122014120470d0341cd95c000410b41b695c0" - "004117410110021a41d895c000411120034120410110021a2004101a200041c8006a22072004101b20064200370300" - "2002420037030020054200370300200042003703900102404100200422026b410371220320026a220520024d0d0020" - "030440200321010340200241003a0000200241016a2102200141016b22010d000b0b200341016b4107490d00034020" - "0241003a0000200241076a41003a0000200241066a41003a0000200241056a41003a0000200241046a41003a000020" - "0241036a41003a0000200241026a41003a0000200241016a41003a0000200241086a22022005470d000b0b20054180" - "0220036b2201417c716a220220054b0440034020054100360200200541046a22052002490d000b0b02402002200141" - "0371220120026a22034f0d002001220504400340200241003a0000200241016a2102200541016b22050d000b0b2001" - "41016b4107490d000340200241003a0000200241076a41003a0000200241066a41003a0000200241056a41003a0000" - "200241046a41003a0000200241036a41003a0000200241026a41003a0000200241016a41003a0000200241086a2202" - "2003470d000b0b0240200741142008412020044180021012220141004a044041e995c00041102001ad10011a200141" - "81024f0d0641f995c000410920042001410110021a0c010b418296c000412e2001ac10011a0b41b096c000411241c2" - "96c00041074101100222014100480d0541c996c000411d2001ad10011a41e696c0004111422a1001410048044041ad" - "97c000411a42a47b10011a41a47b21020c070b41f796c000411c420010011a41012102419397c000411a4101410041" - "0010021a41ff97c000412941014100410010021a41a898c000412810132201412846044041d098c000412741a898c0" - "004128410110021a41f798c000411e41014100410010021a41bf80c000412841014100410010021a0c070b419599c0" - "00411a2001ac10011a41c37a21020c060b41f494c000411d2001ac10011a418b7c21020c050b41d894c000411c2001" - "ac10011a41897c21020c040b41bc94c000411c2001ac10011a41887c21020c030b41dd97c00041222001ac10011a41" - "a77b21020c020b000b41c797c00041162001ac10011a41a57b21020b200041b0036a240020020b0d00200020012002" - "411410191a0b0c00200041142001412010180b0e002000418280182001200210140b0e002000200141082002412010" - "150b0a0020004183803c10160b0a0020002001410810170b0bb9190100418080c0000baf196572726f725f636f6465" - "3d3d3d3d20484f53542046554e4354494f4e532054455354203d3d3d54657374696e6720323620686f73742066756e" - "6374696f6e73535543434553533a20416c6c20686f73742066756e6374696f6e20746573747320706173736564212d" - "2d2d2043617465676f727920313a204c6564676572204865616465722046756e6374696f6e73202d2d2d4c65646765" - "722073657175656e6365206e756d6265723a506172656e74206c65646765722074696d653a506172656e74206c6564" - "67657220686173683a535543434553533a204c6564676572206865616465722066756e6374696f6e734552524f523a" - "206765745f706172656e745f6c65646765725f686173682077726f6e67206c656e6774683a4552524f523a20676574" - "5f706172656e745f6c65646765725f74696d65206661696c65643a4552524f523a206765745f6c65646765725f7371" - "6e206661696c65643a2d2d2d2043617465676f727920323a205472616e73616374696f6e20446174612046756e6374" - "696f6e73202d2d2d5472616e73616374696f6e204163636f756e743a5472616e73616374696f6e20466565206c656e" - "6774683a5472616e73616374696f6e20466565202873657269616c697a65642058525020616d6f756e74293a547261" - "6e73616374696f6e2053657175656e63653a4e6573746564206669656c64206c656e6774683a4e6573746564206669" - "656c643a494e464f3a206765745f74785f6e65737465645f6669656c64206e6f74206170706c696361626c653a5369" - "676e657273206172726179206c656e6774683a4d656d6f73206172726179206c656e6774683a4e6573746564206172" - "726179206c656e6774683a494e464f3a206765745f74785f6e65737465645f61727261795f6c656e206e6f74206170" - "706c696361626c653a535543434553533a205472616e73616374696f6e20646174612066756e6374696f6e73455252" - "4f523a206765745f74785f6669656c642853657175656e6365292077726f6e67206c656e6774683a4552524f523a20" - "6765745f74785f6669656c6428466565292077726f6e67206c656e6774682028657870656374656420382062797465" - "7320666f7220585250293a4552524f523a206765745f74785f6669656c64284163636f756e74292077726f6e67206c" - "656e6774683a2d2d2d2043617465676f727920333a2043757272656e74204c6564676572204f626a6563742046756e" - "6374696f6e73202d2d2d43757272656e74206f626a6563742062616c616e6365206c656e677468202858525020616d" - "6f756e74293a43757272656e74206f626a6563742062616c616e6365202873657269616c697a65642058525020616d" - "6f756e74293a43757272656e74206f626a6563742062616c616e6365206c656e67746820286e6f6e2d58525020616d" - "6f756e74293a43757272656e74206f626a6563742062616c616e63653a494e464f3a206765745f63757272656e745f" - "6c65646765725f6f626a5f6669656c642842616c616e636529206661696c656420286d617920626520657870656374" - "6564293a43757272656e74206c6564676572206f626a656374206163636f756e743a494e464f3a206765745f637572" - "72656e745f6c65646765725f6f626a5f6669656c64284163636f756e7429206661696c65643a43757272656e74206e" - "6573746564206669656c64206c656e6774683a43757272656e74206e6573746564206669656c643a494e464f3a2067" - "65745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c64206e6f74206170706c69636162" - "6c653a43757272656e74206f626a656374205369676e657273206172726179206c656e6774683a43757272656e7420" - "6e6573746564206172726179206c656e6774683a494e464f3a206765745f63757272656e745f6c65646765725f6f62" - "6a5f6e65737465645f61727261795f6c656e206e6f74206170706c696361626c653a535543434553533a2043757272" - "656e74206c6564676572206f626a6563742066756e6374696f6e732d2d2d2043617465676f727920343a20416e7920" - "4c6564676572204f626a6563742046756e6374696f6e73202d2d2d5375636365737366756c6c792063616368656420" - "6f626a65637420696e20736c6f743a436163686564206f626a6563742062616c616e6365206c656e67746820285852" - "5020616d6f756e74293a436163686564206f626a6563742062616c616e6365202873657269616c697a656420585250" - "20616d6f756e74293a436163686564206f626a6563742062616c616e6365206c656e67746820286e6f6e2d58525020" - "616d6f756e74293a436163686564206f626a6563742062616c616e63653a494e464f3a206765745f6c65646765725f" - "6f626a5f6669656c642842616c616e636529206661696c65643a436163686564206e6573746564206669656c64206c" - "656e6774683a436163686564206e6573746564206669656c643a494e464f3a206765745f6c65646765725f6f626a5f" - "6e65737465645f6669656c64206e6f74206170706c696361626c653a436163686564206f626a656374205369676e65" - "7273206172726179206c656e6774683a436163686564206e6573746564206172726179206c656e6774683a494e464f" - "3a206765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e206e6f74206170706c696361626c" - "653a535543434553533a20416e79206c6564676572206f626a6563742066756e6374696f6e73494e464f3a20636163" - "68655f6c65646765725f6f626a206661696c6564202865787065637465642077697468207465737420666978747572" - "6573293a494e464f3a206765745f6c65646765725f6f626a5f6669656c64206661696c656420617320657870656374" - "656420286e6f20636163686564206f626a656374293a494e464f3a206765745f6c65646765725f6f626a5f6e657374" - "65645f6669656c64206661696c65642061732065787065637465643a494e464f3a206765745f6c65646765725f6f62" - "6a5f61727261795f6c656e206661696c65642061732065787065637465643a494e464f3a206765745f6c6564676572" - "5f6f626a5f6e65737465645f61727261795f6c656e206661696c65642061732065787065637465643a535543434553" - "533a20416e79206c6564676572206f626a6563742066756e6374696f6e732028696e74657266616365207465737465" - "64294552524f523a206163636f756e745f6b65796c6574206661696c656420666f722063616368696e672074657374" - "3a2d2d2d2043617465676f727920353a204b65796c65742047656e65726174696f6e2046756e6374696f6e73202d2d" - "2d4163636f756e74206b65796c65743a546573745479706543726564656e7469616c206b65796c65743a494e464f3a" - "2063726564656e7469616c5f6b65796c6574206661696c656420286578706563746564202d20696e74657266616365" - "206973737565293a457363726f77206b65796c65743a4f7261636c65206b65796c65743a535543434553533a204b65" - "796c65742067656e65726174696f6e2066756e6374696f6e734552524f523a206f7261636c655f6b65796c65742066" - "61696c65643a4552524f523a20657363726f775f6b65796c6574206661696c65643a4552524f523a206163636f756e" - "745f6b65796c6574206661696c65643a2d2d2d2043617465676f727920363a205574696c6974792046756e6374696f" - "6e73202d2d2d48656c6c6f2c205852504c205741534d20776f726c6421496e70757420646174613a53484135313220" - "68616c6620686173683a4e46542064617461206c656e6774683a4e465420646174613a494e464f3a206765745f6e66" - "74206661696c656420286578706563746564202d206e6f2073756368204e4654293a54657374207472616365206d65" - "73736167657061796c6f616454726163652066756e6374696f6e206279746573207772697474656e3a54657374206e" - "756d62657220747261636554726163655f6e756d2066756e6374696f6e20737563636565646564535543434553533a" - "205574696c6974792066756e6374696f6e734552524f523a2074726163655f6e756d2829206661696c65643a455252" - "4f523a2074726163652829206661696c65643a4552524f523a20636f6d707574655f7368613531325f68616c662066" - "61696c65643a2d2d2d2043617465676f727920373a2044617461205570646174652046756e6374696f6e73202d2d2d" - "55706461746564206c656467657220656e74727920646174612066726f6d205741534d207465737453756363657373" - "66756c6c792075706461746564206c656467657220656e74727920776974683a535543434553533a20446174612075" - "70646174652066756e6374696f6e734552524f523a207570646174655f64617461206661696c65643a004d0970726f" - "64756365727302086c616e6775616765010452757374000c70726f6365737365642d6279010572757374631d312e38" - "392e30202832393438333838336520323032352d30382d303429002c0f7461726765745f6665617475726573022b0f" - "6d757461626c652d676c6f62616c732b087369676e2d657874"; + "02dc041a08686f73745f6c69620874785f6669656c64000108686f73745f6c69620974726163655f6e756d00070868" + "6f73745f6c6962057472616365000608686f73745f6c69620a6c6467725f696e646578000008686f73745f6c696210" + "706172656e745f6c6467725f74696d65000008686f73745f6c696210706172656e745f6c6467725f68617368000008" + "686f73745f6c69620874785f696e6e6572000208686f73745f6c69620a74785f6172725f6c656e000308686f73745f" + "6c69621074785f696e6e65725f6172725f6c656e000008686f73745f6c69620d686f6d655f6c655f6669656c640001" + "08686f73745f6c69620d686f6d655f6c655f696e6e6572000208686f73745f6c69620f686f6d655f6c655f6172725f" + "6c656e000308686f73745f6c696215686f6d655f6c655f696e6e65725f6172725f6c656e000008686f73745f6c6962" + "0863616368655f6c65000108686f73745f6c69620d63726564656e7469616c5f6964000808686f73745f6c69620965" + "7363726f775f6964000408686f73745f6c6962096f7261636c655f6964000408686f73745f6c69620b736861353132" + "5f68616c66000208686f73745f6c6962076e66745f757269000408686f73745f6c6962087365745f64617461000008" + "686f73745f6c6962086c655f6669656c64000208686f73745f6c6962086c655f696e6e6572000608686f73745f6c69" + "620a6c655f6172725f6c656e000008686f73745f6c6962106c655f696e6e65725f6172725f6c656e000108686f7374" + "5f6c69620e6163636f756e74726f6f745f6964000208686f73745f6c69620a74726163655f616363740002030c0b09" + "0a05050b05000101030005030100110619037f01418080c0000b7f0041af99c0000b7f0041b099c0000b072e04066d" + "656d6f727902000666696e697368001e0a5f5f646174615f656e6403010b5f5f686561705f6261736503020ac61d0b" + "990101027f230041306b220124002000027f418180202001411c6a4114100022024114470440417f20022002417f4e" + "1b210241010c010b200020012f001c3b0001200041036a2001411e6a2d00003a000020012001290023370308200120" + "0141286a29000037000d200128001f21022000410d6a200129000d3700002000200129030837020841000b3a000020" + "002002360204200141306a24000b460020012d00004101460440418080c000410b20013402041001000b2000200129" + "0001370000200041106a200141116a280000360000200041086a200141096a2900003700000b1900200241094f0440" + "000b20002002360204200020013602000b1900200241214f0440000b20002002360204200020013602000bde1a0109" + "7f230041b0036b22002400418b80c000411b41014100410010021a41a680c000411941014100410010021a41e780c0" + "00412b41014100410010021a2000410036027002400240024002400240024002400240200041f0006a220741041003" + "220141004a0440419281c00041172000280270220141187420014180fe03714108747220014108764180fe03712001" + "4118767272ad10011a200041003602900120004190016a220341041004220141004c0d0141a981c000411320002802" + "9001220141187420014180fe03714108747220014108764180fe037120014118767272ad10011a200041c8016a2202" + "4200370300200041c0016a22054200370300200041b8016a22044200370300200042003703b001200041b0016a2206" + "4120100522014120470d0241bc81c000411320064120410110021a41cf81c000412041014100410010021a41dc82c0" + "00412e41014100410010021a200041a0016a410036020020004198016a420037030020004200370390014181802020" + "034114100022014114470d03418a83c00041142003101f200042003703704188801820074108100022014108470d04" + "419e83c0004117420810011a41b583c000412820074108410110021a2000410036024841848008200041c8006a2203" + "4104100022014104470d0541dd83c000411520034104410110021a200041013b003420024200370300200542003703" + "0020044200370300200042003703b0010240200041346a4102200641201006220141004e044041f283c00041142001" + "ad10011a200041286a20062001101d418684c000410d2000280228200028022c410110021a0c010b419384c0004129" + "2001ac10011a0b41bc84c00041154183803c1007ac10011a41d184c00041134189803c1007ac10011a024020004134" + "6a41021008220141004e044041e484c00041142001ad10011a0c010b41f884c000412d2001ac10011a0b41a585c000" + "412341014100410010021a41de86c000413341014100410010021a2000420037037041828018200041f0006a220141" + "081009220341004c0d0620034108460440419187c000412b420810011a41bc87c000412f20014108410110021a0c08" + "0b41eb87c000412f2003ad10011a200041206a200041f0006a2003101c419a88c00041172000280220200028022441" + "0110021a0c070b41bf82c000411d2001ac10011a419b7f21020c070b419a82c00041252001ac10011a419a7f21020c" + "060b41ef81c000412b2001ac10011a41997f21020c050b41b486c000412a2001ac10011a41b77e21020c040b41f385" + "c00041c1002001ac10011a41b67e21020c030b41c885c000412b2001ac10011a41b57e21020c020b41b188c00041c5" + "002003ac10011a0b200041a0016a410036020020004198016a42003703002000420037039001024041818020200041" + "90016a220341141009220141004a044041f688c000411e2003101f0c010b419489c00041332001ac10011a0b200041" + "013b0048200041c8016a4200370300200041c0016a4200370300200041b8016a4200370300200042003703b0010240" + "200041c8006a4102200041b0016a22014120100a220341004e044041c789c000411c2003ad10011a200041186a2001" + "2003101d41e389c00041152000280218200028021c410110021a0c010b41f889c00041392003ac10011a0b41b18ac0" + "0041244183803c100bac10011a0240200041c8006a4102100c220141004e044041d58ac000411c2001ad10011a0c01" + "0b41f18ac000413d2001ac10011a0b41ae8bc000412841014100410010021a41d68bc000412f41014100410010021a" + "200041b0016a2203101a200041f0006a22012003101b200041a8016a4200370300200041a0016a4200370300200041" + "98016a4200370300200042003703900102400240024002400240200120004190016a22031020220141204604402003" + "41204100100d220441004a044041858cc00041232004ad10011a200042003703482004200041c8006a220141081021" + "220341004c0d022003410846044041a88cc000412a420810011a41d28cc000412e20014108410110021a0c060b4180" + "8dc000412e2003ad10011a200041106a200041c8006a2003101c41ae8dc00041162000280210200028021441011002" + "1a0c050b41e68fc000413c2004ac10011a200041c8016a4200370300200041c0016a4200370300200041b8016a4200" + "370300200042003703b0014101200041b0016a4120102122014100480d020c030b41ba92c000412e2001ac10011a41" + "ef7c21020c050b41c48dc000412b2003ac10011a0c020b41a290c00041c1002001ac10011a0b200041013b00484101" + "200041c8006a200041b0016a10222201410048044041e390c00041352001ac10011a0b410110232201410048044041" + "9891c00041322001ac10011a0b4101200041c8006a10242201410048044041ca91c00041392001ac10011a0b418392" + "c000413741014100410010021a0c010b200041013b0034200041c8016a4200370300200041c0016a42003703002000" + "41b8016a4200370300200042003703b00102402004200041346a200041b0016a22011022220341004e044041ef8dc0" + "00411b2003ad10011a200041086a20012003101d418a8ec00041142000280208200028020c410110021a0c010b419e" + "8ec00041312003ac10011a0b41cf8ec000412320041023ac10011a02402004200041346a1024220141004e044041f2" + "8ec000411b2001ad10011a0c010b418d8fc00041352001ac10011a0b41c28fc000412441014100410010021a0b41e8" + "92c000412f41014100410010021a200041b0016a2201101a200041346a22042001101b200041e0006a420037030020" + "0041d8006a4200370300200041d0006a420037030020004200370348024002400240024002402004200041c8006a22" + "03102022014120460440419793c000410f20034120410110021a20004188016a420037030020004180016a42003703" + "00200041f8006a4200370300200042003703700240200441142004411441a693c0004109200041f0006a2201412010" + "0e220341004a0440200020012003101d41ae93c000411220002802002000280204410110021a0c010b41c093c00041" + "3c2003ac10011a0b200041a8016a22064200370300200041a0016a2202420037030020004198016a22054200370300" + "200042003703900120004180808cc07e360268200041346a22034114200041e8006a410420004190016a2208412010" + "0f22014120470d0141fc93c000410e20084120410110021a200041c8016a4200370300200041c0016a420037030020" + "0041b8016a4200370300200042003703b001200041808080d00236026c20034114200041ec006a4104200041b0016a" + "22044120101022014120470d02418a94c000410e20044120410110021a419894c000412441014100410010021a4191" + "95c000412541014100410010021a20004188016a420037030020004180016a4200370300200041f8006a4200370300" + "2000420037037041b695c0004117200041f0006a22034120101122014120470d0341cd95c000410b41b695c0004117" + "410110021a41d895c000411120034120410110021a2004101a200041c8006a22072004101b20064200370300200242" + "0037030020054200370300200042003703900102404100200422026b410371220320026a220520024d0d0020030440" + "200321010340200241003a0000200241016a2102200141016b22010d000b0b200341016b4107490d00034020024100" + "3a0000200241076a41003a0000200241066a41003a0000200241056a41003a0000200241046a41003a000020024103" + "6a41003a0000200241026a41003a0000200241016a41003a0000200241086a22022005470d000b0b20054180022003" + "6b2201417c716a220220054b0440034020054100360200200541046a22052002490d000b0b02402002200141037122" + "0120026a22034f0d002001220504400340200241003a0000200241016a2102200541016b22050d000b0b200141016b" + "4107490d000340200241003a0000200241076a41003a0000200241066a41003a0000200241056a41003a0000200241" + "046a41003a0000200241036a41003a0000200241026a41003a0000200241016a41003a0000200241086a2202200347" + "0d000b0b0240200741142008412020044180021012220141004a044041e995c00041102001ad10011a20014181024f" + "0d0641f995c000410920042001410110021a0c010b418296c000412e2001ac10011a0b41b096c000411241c296c000" + "41074101100222014100480d0541c996c000411d2001ad10011a41e696c0004111422a1001410048044041ad97c000" + "411a42a47b10011a41a47b21020c070b41f796c000411c420010011a41012102419397c000411a4101410041001002" + "1a41ff97c000412941014100410010021a41a898c000412810132201412846044041d098c000412741a898c0004128" + "410110021a41f798c000411e41014100410010021a41bf80c000412841014100410010021a0c070b419599c000411a" + "2001ac10011a41c37a21020c060b41f494c000411d2001ac10011a418b7c21020c050b41d894c000411c2001ac1001" + "1a41897c21020c040b41bc94c000411c2001ac10011a41887c21020c030b41dd97c00041222001ac10011a41a77b21" + "020c020b000b41c797c00041162001ac10011a41a57b21020b200041b0036a240020020b0d00200020012002411410" + "191a0b0c00200041142001412010180b0e002000418280182001200210140b0e002000200141022002412010150b0a" + "0020004183803c10160b0a0020002001410210170b0bb9190100418080c0000baf196572726f725f636f64653d3d3d" + "3d20484f53542046554e4354494f4e532054455354203d3d3d54657374696e6720323620686f73742066756e637469" + "6f6e73535543434553533a20416c6c20686f73742066756e6374696f6e20746573747320706173736564212d2d2d20" + "43617465676f727920313a204c6564676572204865616465722046756e6374696f6e73202d2d2d4c65646765722073" + "657175656e6365206e756d6265723a506172656e74206c65646765722074696d653a506172656e74206c6564676572" + "20686173683a535543434553533a204c6564676572206865616465722066756e6374696f6e734552524f523a206765" + "745f706172656e745f6c65646765725f686173682077726f6e67206c656e6774683a4552524f523a206765745f7061" + "72656e745f6c65646765725f74696d65206661696c65643a4552524f523a206765745f6c65646765725f73716e2066" + "61696c65643a2d2d2d2043617465676f727920323a205472616e73616374696f6e20446174612046756e6374696f6e" + "73202d2d2d5472616e73616374696f6e204163636f756e743a5472616e73616374696f6e20466565206c656e677468" + "3a5472616e73616374696f6e20466565202873657269616c697a65642058525020616d6f756e74293a5472616e7361" + "6374696f6e2053657175656e63653a4e6573746564206669656c64206c656e6774683a4e6573746564206669656c64" + "3a494e464f3a206765745f74785f6e65737465645f6669656c64206e6f74206170706c696361626c653a5369676e65" + "7273206172726179206c656e6774683a4d656d6f73206172726179206c656e6774683a4e6573746564206172726179" + "206c656e6774683a494e464f3a206765745f74785f6e65737465645f61727261795f6c656e206e6f74206170706c69" + "6361626c653a535543434553533a205472616e73616374696f6e20646174612066756e6374696f6e734552524f523a" + "206765745f74785f6669656c642853657175656e6365292077726f6e67206c656e6774683a4552524f523a20676574" + "5f74785f6669656c6428466565292077726f6e67206c656e6774682028657870656374656420382062797465732066" + "6f7220585250293a4552524f523a206765745f74785f6669656c64284163636f756e74292077726f6e67206c656e67" + "74683a2d2d2d2043617465676f727920333a2043757272656e74204c6564676572204f626a6563742046756e637469" + "6f6e73202d2d2d43757272656e74206f626a6563742062616c616e6365206c656e677468202858525020616d6f756e" + "74293a43757272656e74206f626a6563742062616c616e6365202873657269616c697a65642058525020616d6f756e" + "74293a43757272656e74206f626a6563742062616c616e6365206c656e67746820286e6f6e2d58525020616d6f756e" + "74293a43757272656e74206f626a6563742062616c616e63653a494e464f3a206765745f63757272656e745f6c6564" + "6765725f6f626a5f6669656c642842616c616e636529206661696c656420286d617920626520657870656374656429" + "3a43757272656e74206c6564676572206f626a656374206163636f756e743a494e464f3a206765745f63757272656e" + "745f6c65646765725f6f626a5f6669656c64284163636f756e7429206661696c65643a43757272656e74206e657374" + "6564206669656c64206c656e6774683a43757272656e74206e6573746564206669656c643a494e464f3a206765745f" + "63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c64206e6f74206170706c696361626c653a" + "43757272656e74206f626a656374205369676e657273206172726179206c656e6774683a43757272656e74206e6573" + "746564206172726179206c656e6774683a494e464f3a206765745f63757272656e745f6c65646765725f6f626a5f6e" + "65737465645f61727261795f6c656e206e6f74206170706c696361626c653a535543434553533a2043757272656e74" + "206c6564676572206f626a6563742066756e6374696f6e732d2d2d2043617465676f727920343a20416e79204c6564" + "676572204f626a6563742046756e6374696f6e73202d2d2d5375636365737366756c6c7920636163686564206f626a" + "65637420696e20736c6f743a436163686564206f626a6563742062616c616e6365206c656e67746820285852502061" + "6d6f756e74293a436163686564206f626a6563742062616c616e6365202873657269616c697a65642058525020616d" + "6f756e74293a436163686564206f626a6563742062616c616e6365206c656e67746820286e6f6e2d58525020616d6f" + "756e74293a436163686564206f626a6563742062616c616e63653a494e464f3a206765745f6c65646765725f6f626a" + "5f6669656c642842616c616e636529206661696c65643a436163686564206e6573746564206669656c64206c656e67" + "74683a436163686564206e6573746564206669656c643a494e464f3a206765745f6c65646765725f6f626a5f6e6573" + "7465645f6669656c64206e6f74206170706c696361626c653a436163686564206f626a656374205369676e65727320" + "6172726179206c656e6774683a436163686564206e6573746564206172726179206c656e6774683a494e464f3a2067" + "65745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e206e6f74206170706c696361626c653a53" + "5543434553533a20416e79206c6564676572206f626a6563742066756e6374696f6e73494e464f3a2063616368655f" + "6c65646765725f6f626a206661696c6564202865787065637465642077697468207465737420666978747572657329" + "3a494e464f3a206765745f6c65646765725f6f626a5f6669656c64206661696c656420617320657870656374656420" + "286e6f20636163686564206f626a656374293a494e464f3a206765745f6c65646765725f6f626a5f6e65737465645f" + "6669656c64206661696c65642061732065787065637465643a494e464f3a206765745f6c65646765725f6f626a5f61" + "727261795f6c656e206661696c65642061732065787065637465643a494e464f3a206765745f6c65646765725f6f62" + "6a5f6e65737465645f61727261795f6c656e206661696c65642061732065787065637465643a535543434553533a20" + "416e79206c6564676572206f626a6563742066756e6374696f6e732028696e74657266616365207465737465642945" + "52524f523a206163636f756e74726f6f745f6964206661696c656420666f722063616368696e6720746573743a2d2d" + "2d2043617465676f727920353a204b65796c65742047656e65726174696f6e2046756e6374696f6e73202d2d2d4163" + "636f756e74206b65796c65743a546573745479706543726564656e7469616c206b65796c65743a494e464f3a206372" + "6564656e7469616c5f6b65796c6574206661696c656420286578706563746564202d20696e74657266616365206973" + "737565293a457363726f77206b65796c65743a4f7261636c65206b65796c65743a535543434553533a204b65796c65" + "742067656e65726174696f6e2066756e6374696f6e734552524f523a206f7261636c655f6b65796c6574206661696c" + "65643a4552524f523a20657363726f775f6b65796c6574206661696c65643a4552524f523a206163636f756e74726f" + "6f745f6964206661696c65643a2d2d2d2043617465676f727920363a205574696c6974792046756e6374696f6e7320" + "2d2d2d48656c6c6f2c205852504c205741534d20776f726c6421496e70757420646174613a5348413531322068616c" + "6620686173683a4e46542064617461206c656e6774683a4e465420646174613a494e464f3a206765745f6e66742066" + "61696c656420286578706563746564202d206e6f2073756368204e4654293a54657374207472616365206d65737361" + "67657061796c6f616454726163652066756e6374696f6e206279746573207772697474656e3a54657374206e756d62" + "657220747261636554726163655f6e756d2066756e6374696f6e20737563636565646564535543434553533a205574" + "696c6974792066756e6374696f6e734552524f523a2074726163655f6e756d2829206661696c65643a4552524f523a" + "2074726163652829206661696c65643a4552524f523a20636f6d707574655f7368613531325f68616c66206661696c" + "65643a2d2d2d2043617465676f727920373a2044617461205570646174652046756e6374696f6e73202d2d2d557064" + "61746564206c656467657220656e74727920646174612066726f6d205741534d20746573745375636365737366756c" + "6c792075706461746564206c656467657220656e74727920776974683a535543434553533a20446174612075706461" + "74652066756e6374696f6e734552524f523a207570646174655f64617461206661696c65643a004d0970726f647563" + "65727302086c616e6775616765010452757374000c70726f6365737365642d6279010572757374631d312e38372e30" + "202831373036376539616320323032352d30352d303929002c0f7461726765745f6665617475726573022b0f6d7574" + "61626c652d676c6f62616c732b087369676e2d657874"; extern std::string const kAllKeyletsWasmHex = - "0061736d0100000001480960067f7f7f7f7f7f017f60047f7f7f7f017f60087f7f7f7f7f7f7f7f017f60037f7f7f01" - "7f60037f7f7e017f60057f7f7f7f7f017f60057f7f7f7f7f006000017f60037f7f7f000284051808686f73745f6c69" - "620974726163655f6e756d000408686f73745f6c6962057472616365000508686f73745f6c69621063616368655f6c" - "65646765725f6f626a000308686f73745f6c6962146765745f6c65646765725f6f626a5f6669656c64000108686f73" - "745f6c69621c6765745f63757272656e745f6c65646765725f6f626a5f6669656c64000308686f73745f6c69620d74" - "726163655f6163636f756e74000108686f73745f6c69620e6163636f756e745f6b65796c6574000108686f73745f6c" - "69620b6c696e655f6b65796c6574000208686f73745f6c69620a616d6d5f6b65796c6574000008686f73745f6c6962" - "0c636865636b5f6b65796c6574000008686f73745f6c69621163726564656e7469616c5f6b65796c6574000208686f" - "73745f6c69620f64656c65676174655f6b65796c6574000008686f73745f6c6962166465706f7369745f7072656175" - "74685f6b65796c6574000008686f73745f6c69620a6469645f6b65796c6574000108686f73745f6c69620d65736372" - "6f775f6b65796c6574000008686f73745f6c6962136d70745f69737375616e63655f6b65796c6574000008686f7374" - "5f6c69620e6d70746f6b656e5f6b65796c6574000008686f73745f6c6962106e66745f6f666665725f6b65796c6574" - "000008686f73745f6c69620c6f666665725f6b65796c6574000008686f73745f6c69620e7061796368616e5f6b6579" - "6c6574000208686f73745f6c69621a7065726d697373696f6e65645f646f6d61696e5f6b65796c6574000008686f73" - "745f6c69620e7369676e6572735f6b65796c6574000108686f73745f6c69620d7469636b65745f6b65796c65740000" - "08686f73745f6c69620c7661756c745f6b65796c6574000003040306070805030100110619037f01418080c0000b7f" - "0041ad8ac0000b7f0041b08ac0000b073e05066d656d6f727902000d6f626a6563745f65786973747300180666696e" - "69736800190a5f5f646174615f656e6403010b5f5f686561705f6261736503020ab73403a80502017f017e230041a0" - "016b22052400024020012d0000410146044041c280c000411620012802042201ac10001a200041013a000020002001" - "3602040c010b200541186a200141196a290000370300200541106a200141116a290000370300200541086a20014109" - "6a290000370300200520012900013703002002200320054120410110011a02402005412041001002220141004a0440" - "2004450440418b80c000410f4285801410001a20014185801420054180016a412010032201412047044041a680c000" - "4115417f20012001417f4e1b2201ac10001a200041013a0000200020013602040c040b200541c2006a20054182016a" - "2d00003a0000200541f0006a20054197016a2900002206370300200541286a22012005418f016a2900003703002005" - "41306a22022006370300200541386a22032005419f016a2d00003a0000200520052f0080013b014020052005290087" - "013703202005200528008301360043200541df006a20032d00003a0000200541d7006a2002290300370000200541cf" - "006a200129030037000020052005290320370047419a80c000410c200541406b4120410110011a0c020b418b80c000" - "410f2004ac10001a2001200420054180016a411410032201411447044041a680c0004115417f20012001417f4e1b22" - "01ac10001a200041013a0000200020013602040c030b200541c2006a20054182016a2d00003a000020052005290087" - "0137036020052005418c016a290000370065200520052f0080013b0140200520052903603703202005200529006537" - "00252005200528008301360043200541cc006a200529002537000020052005290320370047419a80c000410c200541" - "406b4114410110011a0c010b41bb80c00041072001ac10001a200041013a0000200020013602040c010b2000418002" - "3b01000b200541a0016a24000b8b2a02087f027e23004180076b2200240041d880c000412341014100410010011a02" - "402000027f02404181802020004188016a22024114100422014114460440200041066a2000418a016a22032d00003a" - "00002000200029008f013703e001200020004194016a22042900003700e501200020002f0088013b01042000200029" - "03e0013703d806200020002900e5013700dd062000200028008b01360007200041106a20002900dd06370000200020" - "002903d80637000b41fb80c0004108200041046a2205411410051a4183802020024114100422014114470d03200041" - "1a6a20032d00003a00002000200029008f013703e001200020042900003700e501200020002f0088013b0118200020" - "002903e0013703d806200020002900e5013700dd062000200028008b0136001b200041246a20002900dd0637000020" - "0020002903d80637001f418381c000410c200041186a411410051a200041a0016a2203420037030020004198016a22" - "04420037030020004190016a420037030020004200370388012005411420024120100622014120460d010240200141" - "00480440200020013602300c010b2000417f3602300b41010c020b0c020b200041c5006a2003290300370000200041" - "3d6a2004290300370000200041356a20004190016a290300370000200020002903880137002d41000b3a002c200041" - "88016a2000412c6a418f81c0004107418180201018024020002d0088014101460440200028028c01210141878ac000" - "4112420510001a0c010b41002101419681c000413541014100410010011a200041de006a41c4003a0000200041d800" - "6a4100360200200041e3006a41003a0000200041d5a6013b015c200042003703502000410036005f200041a0016a22" - "03420037030020004198016a2204420037030020004190016a2205420037030020004200370388010240200041046a" - "4114200041186a4114200041d0006a411420004188016a412010072202412047044002402002410048044020002002" - "3602680c010b2000417f3602680b410121010c010b200041fd006a2003290300370000200041f5006a200429030037" - "0000200041ed006a200529030037000020002000290388013700650b200020013a006420004188016a200041e4006a" - "41cb81c00041094100101820002d0088014101460440200028028c01210141878ac0004112420510001a0c010b41d4" - "81c000413741014100410010011a200041f0016a200041286a2203280100360200200041e8016a200041206a220429" - "0100370300200041fc016a200041d8006a290300220837020020004184026a200041e0006a28020022023602002000" - "20002901183703e0012000200029035022093702f401200041e8066a22012002360200200041e0066a220220083703" - "00200020093703d806200041f4066a2004290100370200200041fc066a2003280100360200200020002901183702ec" - "0620004188026a200041d8066a22034128101a2000418c016a200041e0016a41d000101a2000410136028801200041" - "f0066a220442003703002001420037030020024200370300200042003703d8062000027f41998ac0004114200041b4" - "016a412820034120100822034120470440024020034100480440200020033602e4010c010b2000417f3602e4010b41" - "010c010b200041f9016a2004290300370000200041f1016a2001290300370000200041e9016a200229030037000020" - "0020002903d8063700e10141000b3a00e001200041b4026a200041e0016a418b82c000410341818020101820002d00" - "b402410146044020002802b802210141878ac0004112420610001a0c010b41002101418e82c0004131410141004100" - "10011a200041808080303602d806200041f8016a22034200370300200041f0016a22044200370300200041e8016a22" - "054200370300200042003703e0010240200041046a4114200041d8066a4104200041e0016a41201009220241204704" - "40024020024100480440200020023602c0020c010b2000417f3602c0020b410121010c010b200041d5026a20032903" - "00370000200041cd026a2004290300370000200041c5026a2005290300370000200020002903e0013700bd020b2000" - "20013a00bc02200041e0016a200041bc026a41bf82c000410541818020101820002d00e001410146044020002802e4" - "01210141878ac0004112420610001a0c010b4100210141c482c000413341014100410010011a200041f8016a220342" - "00370300200041f0016a22044200370300200041e8016a22054200370300200042003703e0010240200041046a2202" - "41142002411441f782c0004112200041e0016a4120100a22024120470440024020024100480440200020023602e402" - "0c010b2000417f3602e4020b410121010c010b200041f9026a2003290300370000200041f1026a2004290300370000" - "200041e9026a2005290300370000200020002903e0013700e1020b200020013a00e002200041e0016a200041e0026a" - "418983c000410a41988020101820002d00e001410146044020002802e401210141878ac0004112420710001a0c010b" - "41002101419383c000413841014100410010011a200041f8016a22034200370300200041f0016a2204420037030020" - "0041e8016a22054200370300200042003703e0010240200041046a4114200041186a4114200041e0016a4120100b22" - "02412047044002402002410048044020002002360288030c010b2000417f360288030b410121010c010b2000419d03" - "6a200329030037000020004195036a20042903003700002000418d036a2005290300370000200020002903e0013700" - "85030b200020013a008403200041e0016a20004184036a41cb83c000410841818020101820002d00e0014101460440" - "20002802e401210141878ac0004112420810001a0c010b41d383c000413641014100410010011a230041206b220124" - "00200141186a22044200370300200141106a22054200370300200141086a2206420037030020014200370300200041" - "a8036a2202027f200041046a4114200041186a411420014120100c2203412047044002402003410048044020022003" - "3602040c010b2002417f3602040b41010c010b20022001290300370001200241196a2004290300370000200241116a" - "2005290300370000200241096a200629030037000041000b3a0000200141206a2400200041e0016a2002418984c000" - "410e41818020101820002d00e001410146044020002802e401210141878ac0004112420910001a0c010b419784c000" - "413c41014100410010011a230041206b22012400200141186a22044200370300200141106a22054200370300200141" - "086a2206420037030020014200370300200041cc036a2202027f200041046a411420014120100d2203412047044002" - "4020034100480440200220033602040c010b2002417f3602040b41010c010b20022001290300370001200241196a20" - "04290300370000200241116a2005290300370000200241096a200629030037000041000b3a0000200141206a240020" - "0041e0016a200241d384c000410341818020101820002d00e001410146044020002802e401210141878ac000411242" - "0a10001a0c010b41d684c000413141014100410010011a230041306b22012400200141808080d80036020c20014128" - "6a22044200370300200141206a22054200370300200141186a2206420037030020014200370310200041f0036a2202" - "027f200041046a41142001410c6a4104200141106a4120100e22034120470440024020034100480440200220033602" - "040c010b2002417f3602040b41010c010b20022001290310370001200241196a2004290300370000200241116a2005" - "290300370000200241096a200629030037000041000b3a0000200141306a2400200041e0016a2002418785c0004106" - "41818020101820002d00e001410146044020002802e401210141878ac0004112420b10001a0c010b418d85c0004134" - "41014100410010011a230041306b22012400200141808080e00036020c200141286a22044200370300200141206a22" - "054200370300200141186a220642003703002001420037031020004194046a2202027f200041046a41142001410c6a" - "4104200141106a4120100f22034120470440024020034100480440200220033602040c010b2002417f3602040b4101" - "0c010b20022001290310370001200241196a2004290300370000200241116a2005290300370000200241096a200629" - "030037000041000b3a0000200141306a2400200041f4016a200041146a280100360200200041ec016a2000410c6a29" - "0100370200200020002901043702e401200041808080e0003602e001200041d8066a200241c185c000410b41848020" - "101820002d00d806410146044020002802dc06210141878ac0004112420c10001a0c010b41cc85c000413941014100" - "410010011a230041206b22012400200141186a22044200370300200141106a22054200370300200141086a22064200" - "37030020014200370300200041b8046a2202027f200041e0016a4118200041186a4114200141201010220341204704" - "40024020034100480440200220033602040c010b2002417f3602040b41010c010b2002200129030037000120024119" - "6a2004290300370000200241116a2005290300370000200241096a200629030037000041000b3a0000200141206a24" - "00200041d8066a2002418586c000410741818020101820002d00d806410146044020002802dc06210141878ac00041" - "12420d10001a0c010b418c86c000413541014100410010011a230041306b220124002001418080803036020c200141" - "286a22044200370300200141206a22054200370300200141186a2206420037030020014200370310200041dc046a22" - "02027f200041186a41142001410c6a4104200141106a41201011220341204704400240200341004804402002200336" - "02040c010b2002417f3602040b41010c010b20022001290310370001200241196a2004290300370000200241116a20" - "05290300370000200241096a200629030037000041000b3a0000200141306a2400200041d8066a200241c186c00041" - "0c41828020101820002d00d806410146044020002802dc06210141878ac0004112420d10001a0c010b41cd86c00041" - "3a41014100410010011a230041306b22012400200141808080e80036020c200141286a22044200370300200141206a" - "22054200370300200141186a220642003703002001420037031020004180056a2202027f200041046a41142001410c" - "6a4104200141106a4120101222034120470440024020034100480440200220033602040c010b2002417f3602040b41" - "010c010b20022001290310370001200241196a2004290300370000200241116a2005290300370000200241096a2006" - "29030037000041000b3a0000200141306a2400200041d8066a2002418787c000410541818020101820002d00d80641" - "0146044020002802dc06210141878ac0004112420d10001a0c010b418c87c000413341014100410010011a23004130" - "6b22012400200141808080f00036020c200141286a22044200370300200141206a22054200370300200141186a2206" - "420037030020014200370310200041a4056a2202027f200041046a4114200041186a41142001410c6a410420014110" - "6a4120101322034120470440024020034100480440200220033602040c010b2002417f3602040b41010c010b200220" - "01290310370001200241196a2004290300370000200241116a2005290300370000200241096a200629030037000041" - "000b3a0000200141306a2400200041d8066a200241bf87c000410a41818020101820002d00d8064101460440200028" - "02dc06210141878ac0004112420e10001a0c010b41c987c000413841014100410010011a230041306b220124002001" - "41808080f80036020c200141286a22044200370300200141206a22054200370300200141186a220642003703002001" - "4200370310200041c8056a2202027f200041046a41142001410c6a4104200141106a41201014220341204704400240" - "20034100480440200220033602040c010b2002417f3602040b41010c010b20022001290310370001200241196a2004" - "290300370000200241116a2005290300370000200241096a200629030037000041000b3a0000200141306a24002000" - "41d8066a2002418188c000411241828020101820002d00d806410146044020002802dc06210141878ac0004112420f" - "10001a0c010b419388c00041c00041014100410010011a230041206b22012400200141186a22044200370300200141" - "106a22054200370300200141086a2206420037030020014200370300200041ec056a2202027f200041046a41142001" - "4120101522034120470440024020034100480440200220033602040c010b2002417f3602040b41010c010b20022001" - "290300370001200241196a2004290300370000200241116a2005290300370000200241096a20062903003700004100" - "0b3a0000200141206a2400200041d8066a200241d388c000410a4100101820002d00d806410146044020002802dc06" - "210141878ac0004112421010001a0c010b41dd88c000413841014100410010011a230041306b220124002001418080" - "80900136020c200141286a22044200370300200141206a22054200370300200141186a220642003703002001420037" - "031020004190066a2202027f200041046a41142001410c6a4104200141106a41201016220341204704400240200341" - "00480440200220033602040c010b2002417f3602040b41010c010b20022001290310370001200241196a2004290300" - "370000200241116a2005290300370000200241096a200629030037000041000b3a0000200141306a2400200041d806" - "6a2002419589c000410641818020101820002d00d806410146044020002802dc06210141878ac0004112421210001a" - "0c010b41012101419b89c000413441014100410010011a230041306b22022400200241808080980136020c20024128" - "6a22054200370300200241206a22064200370300200241186a2207420037030020024200370310200041b4066a2203" - "027f200041046a41142002410c6a4104200241106a4120101722044120470440024020044100480440200320043602" - "040c010b2003417f3602040b41010c010b20032002290310370001200341196a2005290300370000200341116a2006" - "290300370000200341096a200729030037000041000b3a0000200241306a2400200041d8066a200341cf89c0004105" - "41818020101820002d00d806410146044020002802dc06210141878ac0004112421310001a0c010b41d489c0004133" - "41014100410010011a0b20004180076a240020010f0b418080c000410b417f20012001417f4e1bac1000000bfd0401" - "067f200241104f0440024020002000410020006b41037122056a22044f0d0020012103200504402005210603402000" - "20032d00003a0000200341016a2103200041016a2100200641016b22060d000b0b200541016b4107490d0003402000" - "20032d00003a0000200041016a200341016a2d00003a0000200041026a200341026a2d00003a0000200041036a2003" - "41036a2d00003a0000200041046a200341046a2d00003a0000200041056a200341056a2d00003a0000200041066a20" - "0341066a2d00003a0000200041076a200341076a2d00003a0000200341086a2103200041086a22002004470d000b0b" - "2004200220056b2207417c7122086a21000240200120056a2206410371450440200020044d0d012006210103402004" - "2001280200360200200141046a2101200441046a22042000490d000b0c010b200020044d0d00200641037422054118" - "7121032006417c71220241046a2101410020056b411871210520022802002102034020042002200376200128020022" - "0220057472360200200141046a2101200441046a22042000490d000b0b20074103712102200620086a21010b024020" - "00200020026a22064f0d002002410771220304400340200020012d00003a0000200141016a2101200041016a210020" - "0341016b22030d000b0b200241016b4107490d000340200020012d00003a0000200041016a200141016a2d00003a00" - "00200041026a200141026a2d00003a0000200041036a200141036a2d00003a0000200041046a200141046a2d00003a" - "0000200041056a200141056a2d00003a0000200041066a200141066a2d00003a0000200041076a200141076a2d0000" - "3a0000200141086a2101200041086a22002006470d000b0b0b0ba30a0100418080c0000b990a6572726f725f636f64" - "653d47657474696e67206669656c643a204669656c6420646174613a204572726f722067657474696e67206669656c" - "643a204572726f723a204572726f722067657474696e67206b65796c65743a202424242424205354415254494e4720" - "5741534d20455845435554494f4e2024242424244163636f756e743a44657374696e6174696f6e3a4163636f756e74" - "4163636f756e74206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f772066" - "696e6973682e54727573746c696e6554727573746c696e65206f626a656374206578697374732c2070726f63656564" - "696e67207769746820657363726f772066696e6973682e414d4d414d4d206f626a656374206578697374732c207072" - "6f63656564696e67207769746820657363726f772066696e6973682e436865636b436865636b206f626a6563742065" - "78697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e7465726d73616e64636f" - "6e646974696f6e7343726564656e7469616c43726564656e7469616c206f626a656374206578697374732c2070726f" - "63656564696e67207769746820657363726f772066696e6973682e44656c656761746544656c6567617465206f626a" - "656374206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e4465706f73" - "6974507265617574684465706f73697450726561757468206f626a656374206578697374732c2070726f6365656469" - "6e67207769746820657363726f772066696e6973682e444944444944206f626a656374206578697374732c2070726f" - "63656564696e67207769746820657363726f772066696e6973682e457363726f77457363726f77206f626a65637420" - "6578697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e4d505449737375616e" - "63654d505449737375616e6365206f626a656374206578697374732c2070726f63656564696e672077697468206573" - "63726f772066696e6973682e4d50546f6b656e4d50546f6b656e206f626a656374206578697374732c2070726f6365" - "6564696e67207769746820657363726f772066696e6973682e4e46546f6b656e4f666665724e46546f6b656e4f6666" - "6572206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f772066696e697368" - "2e4f666665724f66666572206f626a656374206578697374732c2070726f63656564696e6720776974682065736372" - "6f772066696e6973682e5061794368616e6e656c5061794368616e6e656c206f626a656374206578697374732c2070" - "726f63656564696e67207769746820657363726f772066696e6973682e5065726d697373696f6e6564446f6d61696e" - "5065726d697373696f6e6564446f6d61696e206f626a656374206578697374732c2070726f63656564696e67207769" - "746820657363726f772066696e6973682e5369676e65724c6973745369676e65724c697374206f626a656374206578" - "697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e5469636b65745469636b65" - "74206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e" - "5661756c745661756c74206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f" - "772066696e6973682e43757272656e74207365712076616c75653a004d0970726f64756365727302086c616e677561" - "6765010452757374000c70726f6365737365642d6279010572757374631d312e38372e302028313730363765396163" - "20323032352d30352d303929002c0f7461726765745f6665617475726573022b0f6d757461626c652d676c6f62616c" - "732b087369676e2d657874"; + "0061736d0100000001500a60067f7f7f7f7f7f017f60047f7f7f7f017f60087f7f7f7f7f7f7f7f017f60047f7f7f7f" + "0060037f7f7f017f60037f7f7e017f60057f7f7f7f7f017f6000017f60037f7f7f0060067f7f7f7f7f7e00029f0418" + "08686f73745f6c69620974726163655f6e756d000508686f73745f6c6962057472616365000608686f73745f6c6962" + "0863616368655f6c65000408686f73745f6c6962086c655f6669656c64000108686f73745f6c69620d686f6d655f6c" + "655f6669656c64000408686f73745f6c69620a74726163655f61636374000108686f73745f6c69620e6163636f756e" + "74726f6f745f6964000108686f73745f6c69620c74727573746c696e655f6964000208686f73745f6c696206616d6d" + "5f6964000008686f73745f6c696208636865636b5f6964000008686f73745f6c69620d63726564656e7469616c5f69" + "64000208686f73745f6c69620b64656c65676174655f6964000008686f73745f6c6962126465706f7369745f707265" + "617574685f6964000008686f73745f6c6962066469645f6964000108686f73745f6c696209657363726f775f696400" + "0008686f73745f6c69620f6d70745f69737375616e63655f6964000008686f73745f6c69620a6d70746f6b656e5f69" + "64000008686f73745f6c69620c6e66745f6f666665725f6964000008686f73745f6c6962086f666665725f69640000" + "08686f73745f6c69620a7061796368616e5f6964000208686f73745f6c6962167065726d697373696f6e65645f646f" + "6d61696e5f6964000008686f73745f6c69620a7369676e6572735f6964000108686f73745f6c6962097469636b6574" + "5f6964000008686f73745f6c6962087661756c745f6964000003070603030307080905030100110619037f01418080" + "c0000b7f0041c28ac0000b7f0041d08ac0000b072e04066d656d6f727902000666696e697368001b0a5f5f64617461" + "5f656e6403010b5f5f686561705f6261736503020ae83706140020002001200220034182802042828020101d0b1400" + "20002001200220034181802042818020101d0bd10302017f017e230041a0016b22042400024020012d000041014604" + "4041d780c000411620012802042201ac10001a200041013a0000200020013602040c010b200441186a200141196a29" + "0000370300200441106a200141116a290000370300200441086a200141096a29000037030020042001290001370300" + "2002200320044120410110011a2004412041001002220141004c044041d080c00041072001ac10001a200041013a00" + "00200020013602040c010b418b80c000410f4285801410001a20014185801420044180016a41201003220141204704" + "4041af80c0004115417f20012001417f4e1b2201ac10001a200041013a0000200020013602040c010b200441c2006a" + "20044182016a2d00003a0000200441f0006a20044197016a2900002205370300200441286a22012004418f016a2900" + "00370300200441306a22022005370300200441386a22032004419f016a2d00003a0000200420042f0080013b014020" + "042004290087013703202004200428008301360043200441df006a20032d00003a0000200441d7006a200229030037" + "0000200441cf006a20012903003700002004200429032037004741c480c000410c200441406b4120410110011a2000" + "4180023b01000b200441a0016a24000bd32c02097f027e23004180076b2200240041ed80c000412341014100410010" + "011a02402000027f02404181802020004190016a220741141004220641144604402000410e6a20004192016a22032d" + "00003a000020002000290097013703e80120002000419c016a22012900003700ed01200020002f0090013b010c2000" + "20002903e8013703d806200020002900ed013700dd06200020002800930136000f200041186a20002900dd06370000" + "200020002903d806370013419081c00041082000410c6a2204411410051a4183802020074114100422064114470d03" + "200041226a20032d00003a000020002000290097013703e801200020012900003700ed01200020002f0090013b0120" + "200020002903e8013703d806200020002900ed013700dd0620002000280093013600232000412c6a20002900dd0637" + "0000200020002903d806370027419881c000410c200041206a411410051a200041a8016a22034200370300200041a0" + "016a2201420037030020004198016a420037030020004200370390012004411420074120100622044120460d010240" + "20044100480440200020043602380c010b2000417f3602380b41010c020b0c020b200041cd006a2003290300370000" + "200041c5006a20012903003700002000413d6a20004198016a290300370000200020002903900137003541000b3a00" + "3420004190016a200041346a41a481c00041071019024020002d00900141014604402000280294012106419c8ac000" + "4112420510001a0c010b4100210641ab81c000413541014100410010011a200041e6006a41c4003a0000200041e000" + "6a4100360200200041eb006a41003a0000200041d5a6013b01642000420037035820004100360067200041a8016a22" + "044200370300200041a0016a2203420037030020004198016a22014200370300200042003703900102402000410c6a" + "4114200041206a4114200041d8006a411420004190016a412010072207412047044002402007410048044020002007" + "3602700c010b2000417f3602700b410121060c010b20004185016a2004290300370000200041fd006a200329030037" + "0000200041f5006a2001290300370000200020002903900137006d0b200020063a006c20004190016a200041ec006a" + "41e081c0004109101a20002d00900141014604402000280294012106419c8ac0004112420510001a0c010b41002106" + "41e981c000413741014100410010011a200041f8016a200041306a2204280100360200200041f0016a200041286a22" + "0329010037030020004184026a200041e0006a290300220a3702002000418c026a200041e8006a2802002201360200" + "200020002901203703e8012000200029035822093702fc01200041e8066a22052001360200200041e0066a2207200a" + "370300200020093703d806200041f4066a2003290100370200200041fc066a20042801003602002000200029012037" + "02ec0620004190026a200041d8066a22034128101c20004194016a200041e8016a41d000101c200041013602900120" + "0041f0066a220142003703002005420037030020074200370300200042003703d806024041ae8ac0004114200041bc" + "016a412820034120100822034120470440024020034100480440200020033602ec010c010b2000417f3602ec010b41" + "0121060c010b20004181026a2001290300370000200041f9016a2005290300370000200041f1016a20072903003700" + "00200020002903d8063700e9010b200020063a00e801200041bc026a200041e8016a41a082c0004103101920002d00" + "bc02410146044020002802c0022106419c8ac0004112420610001a0c010b4100210641a382c0004131410141004100" + "10011a200041063602d80620004180026a22044200370300200041f8016a22034200370300200041f0016a22014200" + "370300200042003703e80102402000410c6a4114200041d8066a4104200041e8016a41201009220741204704400240" + "20074100480440200020073602c8020c010b2000417f3602c8020b410121060c010b200041dd026a20042903003700" + "00200041d5026a2003290300370000200041cd026a2001290300370000200020002903e8013700c5020b200020063a" + "00c402200041e8016a200041c4026a41d482c0004105101920002d00e801410146044020002802ec012106419c8ac0" + "004112420610001a0c010b41d982c000413341014100410010011a20004180026a4200370300200041f8016a420037" + "0300200041f0016a4200370300200042003703e801024002402000410c6a2201411420014114418c83c00041122000" + "41e8016a4120100a2201412047044041d780c0004116417f20012001417f4e1b2206ac10001a0c010b200041da066a" + "20002d00ea013a0000200041f0026a200041f7016a290000220a370300200041f8026a200041ff016a290000220937" + "030020004180036a20004187026a2d000022013a0000200041e7066a200a370000200041ef066a2009370000200041" + "f7066a20013a0000200020002f01e8013b01d806200020002900ef0122093703e802200020002800eb013600db0620" + "0020093700df06419e83c000410a200041d8066a22014120410110011a2001412041001002220641004c044041d080" + "c00041072006ac10001a0c010b418b80c000410f4298802010001a200641988020200041e8016a4114100322014114" + "460d0141af80c0004115417f20012001417f4e1b2206ac10001a0b419c8ac0004112420710001a0c010b419a80c000" + "411541014100410010011a41a883c000413841014100410010011a230041206b22082400200841186a220742003703" + "00200841106a22044200370300200841086a220342003703002008420037030020004184036a2201027f2000410c6a" + "22064114200041206a2202411420084120100b22054120470440024020054100480440200120053602040c010b2001" + "417f3602040b41010c010b20012008290300370001200141196a2007290300370000200141116a2004290300370000" + "200141096a200329030037000041000b3a0000200841206a2400200041e8016a2205200141e083c000410810192000" + "2d00e80145044041e883c000413641014100410010011a230041206b22082400200841186a22074200370300200841" + "106a22044200370300200841086a2203420037030020084200370300200041a8036a2201027f200641142002411420" + "084120100c22024120470440024020024100480440200120023602040c010b2001417f3602040b41010c010b200120" + "08290300370001200141196a2007290300370000200141116a2004290300370000200141096a200329030037000041" + "000b3a0000200841206a240020052001419e84c000410e101920002d00e801410146044020002802ec012106419c8a" + "c0004112420910001a0c020b41ac84c000413c41014100410010011a230041206b22022400200241186a2207420037" + "0300200241106a22044200370300200241086a2203420037030020024200370300200041cc036a2201027f2000410c" + "6a411420024120100d22054120470440024020054100480440200120053602040c010b2001417f3602040b41010c01" + "0b20012002290300370001200141196a2007290300370000200141116a2004290300370000200141096a2003290300" + "37000041000b3a0000200241206a2400200041e8016a200141e884c0004103101920002d00e8014101460440200028" + "02ec012106419c8ac0004112420a10001a0c020b41eb84c000413141014100410010011a230041306b220224002002" + "410b36020c200241286a22074200370300200241206a22044200370300200241186a22034200370300200242003703" + "10200041f0036a2201027f2000410c6a41142002410c6a4104200241106a4120100e22054120470440024020054100" + "480440200120053602040c010b2001417f3602040b41010c010b20012002290310370001200141196a200729030037" + "0000200141116a2004290300370000200141096a200329030037000041000b3a0000200241306a2400200041e8016a" + "2001419c85c0004106101920002d00e801410146044020002802ec012106419c8ac0004112420b10001a0c020b41a2" + "85c000413441014100410010011a230041306b220224002002410c36020c200241286a22074200370300200241206a" + "22044200370300200241186a220342003703002002420037031020004194046a2201027f2000410c6a41142002410c" + "6a4104200241106a4120100f22054120470440024020054100480440200120053602040c010b2001417f3602040b41" + "010c010b20012002290310370001200141196a2007290300370000200141116a2004290300370000200141096a2003" + "29030037000041000b3a0000200241306a2400200041fc016a2000411c6a280100360200200041f4016a200041146a" + "2901003702002000200029010c3702ec01200041808080e0003602e801200041d8066a2103230041406a2204240002" + "4020012d0000410146044041d780c000411620012802042201ac10001a200341013a0000200320013602040c010b20" + "0441206a200141196a290000370300200441186a200141116a290000370300200441106a200141096a290000370300" + "2004200129000137030841d685c000410b200441086a22014120410110011a02400240200141204100100222014100" + "4c044041d080c00041072001ac10001a0c010b418b80c000410f4284802010001a2001418480202004412c6a411410" + "0322014114460d0141af80c0004115417f20012001417f4e1b2201ac10001a0b200341013a0000200320013602040c" + "010b419a80c000411541014100410010011a20034180023b01000b200441406b240020002d00d80641014604402000" + "2802dc062106419c8ac0004112420c10001a0c020b41e185c000413941014100410010011a230041206b2202240020" + "0241186a22074200370300200241106a22044200370300200241086a2203420037030020024200370300200041b804" + "6a2201027f200041e8016a4118200041206a4114200241201010220541204704400240200541004804402001200536" + "02040c010b2001417f3602040b41010c010b20012002290300370001200141196a2007290300370000200141116a20" + "04290300370000200141096a200329030037000041000b3a0000200241206a2400200041d8066a2001419a86c00041" + "07101920002d00d806410146044020002802dc062106419c8ac0004112420d10001a0c020b41a186c0004135410141" + "00410010011a230041306b220224002002410636020c200241286a22074200370300200241206a2204420037030020" + "0241186a2203420037030020024200370310200041dc046a2201027f200041206a41142002410c6a4104200241106a" + "4120101122054120470440024020054100480440200120053602040c010b2001417f3602040b41010c010b20012002" + "290310370001200141196a2007290300370000200141116a2004290300370000200141096a20032903003700004100" + "0b3a0000200241306a2400200041d8066a200141d686c000410c101820002d00d806410146044020002802dc062106" + "419c8ac0004112420d10001a0c020b41e286c000413a41014100410010011a230041306b220224002002410d36020c" + "200241286a22074200370300200241206a22044200370300200241186a220342003703002002420037031020004180" + "056a2201027f2000410c6a41142002410c6a4104200241106a41201012220541204704400240200541004804402001" + "20053602040c010b2001417f3602040b41010c010b20012002290310370001200141196a2007290300370000200141" + "116a2004290300370000200141096a200329030037000041000b3a0000200241306a2400200041d8066a2001419c87" + "c0004105101920002d00d806410146044020002802dc062106419c8ac0004112420d10001a0c020b41a187c0004133" + "41014100410010011a230041306b220224002002410e36020c200241286a22074200370300200241206a2204420037" + "0300200241186a2203420037030020024200370310200041a4056a2201027f2000410c6a4114200041206a41142002" + "410c6a4104200241106a4120101322054120470440024020054100480440200120053602040c010b2001417f360204" + "0b41010c010b20012002290310370001200141196a2007290300370000200141116a2004290300370000200141096a" + "200329030037000041000b3a0000200241306a2400200041d8066a200141d487c000410a101920002d00d806410146" + "044020002802dc062106419c8ac0004112420e10001a0c020b41de87c000413841014100410010011a230041306b22" + "0224002002410f36020c200241286a22074200370300200241206a22044200370300200241186a2203420037030020" + "024200370310200041c8056a2201027f2000410c6a41142002410c6a4104200241106a412010142205412047044002" + "4020054100480440200120053602040c010b2001417f3602040b41010c010b20012002290310370001200141196a20" + "07290300370000200141116a2004290300370000200141096a200329030037000041000b3a0000200241306a240020" + "0041d8066a2001419688c0004112101820002d00d806410146044020002802dc062106419c8ac0004112420f10001a" + "0c020b41a888c00041c00041014100410010011a230041206b22022400200241186a22074200370300200241106a22" + "044200370300200241086a2203420037030020024200370300200041ec056a2201027f2000410c6a41142002412010" + "1522054120470440024020054100480440200120053602040c010b2001417f3602040b41010c010b20012002290300" + "370001200141196a2007290300370000200141116a2004290300370000200141096a200329030037000041000b3a00" + "00200241206a2400200041d8066a200141e888c000410a101a20002d00d806410146044020002802dc062106419c8a" + "c0004112421010001a0c020b41f288c000413841014100410010011a230041306b220224002002411236020c200241" + "286a22074200370300200241206a22044200370300200241186a220342003703002002420037031020004190066a22" + "01027f2000410c6a41142002410c6a4104200241106a41201016220541204704400240200541004804402001200536" + "02040c010b2001417f3602040b41010c010b20012002290310370001200141196a2007290300370000200141116a20" + "04290300370000200141096a200329030037000041000b3a0000200241306a2400200041d8066a200141aa89c00041" + "06101920002d00d806410146044020002802dc062106419c8ac0004112421210001a0c020b4101210641b089c00041" + "3441014100410010011a230041306b220224002002411336020c200241286a22074200370300200241206a22044200" + "370300200241186a2203420037030020024200370310200041b4066a2201027f2000410c6a41142002410c6a410420" + "0241106a4120101722054120470440024020054100480440200120053602040c010b2001417f3602040b41010c010b" + "20012002290310370001200141196a2007290300370000200141116a2004290300370000200141096a200329030037" + "000041000b3a0000200241306a2400200041d8066a200141e489c0004105101920002d00d806410146044020002802" + "dc062106419c8ac0004112421310001a0c020b41e989c000413341014100410010011a0c010b20002802ec01210641" + "9c8ac0004112420810001a0b20004180076a240020060f0b418080c000410b417f20062006417f4e1bac1000000bfd" + "0401067f200241104f0440024020002000410020006b41037122056a22044f0d002001210320050440200521060340" + "200020032d00003a0000200341016a2103200041016a2100200641016b22060d000b0b200541016b4107490d000340" + "200020032d00003a0000200041016a200341016a2d00003a0000200041026a200341026a2d00003a0000200041036a" + "200341036a2d00003a0000200041046a200341046a2d00003a0000200041056a200341056a2d00003a000020004106" + "6a200341066a2d00003a0000200041076a200341076a2d00003a0000200341086a2103200041086a22002004470d00" + "0b0b2004200220056b2207417c7122086a21000240200120056a2206410371450440200020044d0d01200621010340" + "20042001280200360200200141046a2101200441046a22042000490d000b0c010b200020044d0d0020064103742205" + "41187121032006417c71220241046a2101410020056b41187121052002280200210203402004200220037620012802" + "00220220057472360200200141046a2101200441046a22042000490d000b0b20074103712102200620086a21010b02" + "402000200020026a22064f0d002002410771220304400340200020012d00003a0000200141016a2101200041016a21" + "00200341016b22030d000b0b200241016b4107490d000340200020012d00003a0000200041016a200141016a2d0000" + "3a0000200041026a200141026a2d00003a0000200041036a200141036a2d00003a0000200041046a200141046a2d00" + "003a0000200041056a200141056a2d00003a0000200041066a200141066a2d00003a0000200041076a200141076a2d" + "00003a0000200141086a2101200041086a22002006470d000b0b0b940201017f230041406a22062400024020012d00" + "00410146044041d780c000411620012802042201ac10001a200041013a0000200020013602040c010b200641206a20" + "0141196a290000370300200641186a200141116a290000370300200641106a200141096a2900003703002006200129" + "000137030820022003200641086a22014120410110011a024002402001412041001002220141004c044041d080c000" + "41072001ac10001a0c010b418b80c000410f200510001a200120042006412c6a4114100322014114460d0141af80c0" + "004115417f20012001417f4e1b2201ac10001a0b200041013a0000200020013602040c010b419a80c0004115410141" + "00410010011a20004180023b01000b200641406b24000b0bb80a0100418080c0000bae0a6572726f725f636f64653d" + "47657474696e67206669656c643a204669656c6420646174613a207265747269657665644572726f72206765747469" + "6e67206669656c643a204669656c6420646174613a204572726f723a204572726f722067657474696e67206b65796c" + "65743a202424242424205354415254494e47205741534d20455845435554494f4e2024242424244163636f756e743a" + "44657374696e6174696f6e3a4163636f756e744163636f756e74206f626a656374206578697374732c2070726f6365" + "6564696e67207769746820657363726f772066696e6973682e54727573746c696e6554727573746c696e65206f626a" + "656374206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e414d4d414d" + "4d206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e" + "436865636b436865636b206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f" + "772066696e6973682e7465726d73616e64636f6e646974696f6e7343726564656e7469616c43726564656e7469616c" + "206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e44" + "656c656761746544656c6567617465206f626a656374206578697374732c2070726f63656564696e67207769746820" + "657363726f772066696e6973682e4465706f736974507265617574684465706f73697450726561757468206f626a65" + "6374206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e444944444944" + "206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e45" + "7363726f77457363726f77206f626a656374206578697374732c2070726f63656564696e6720776974682065736372" + "6f772066696e6973682e4d505449737375616e63654d505449737375616e6365206f626a656374206578697374732c" + "2070726f63656564696e67207769746820657363726f772066696e6973682e4d50546f6b656e4d50546f6b656e206f" + "626a656374206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e4e4654" + "6f6b656e4f666665724e46546f6b656e4f66666572206f626a656374206578697374732c2070726f63656564696e67" + "207769746820657363726f772066696e6973682e4f666665724f66666572206f626a656374206578697374732c2070" + "726f63656564696e67207769746820657363726f772066696e6973682e5061794368616e6e656c5061794368616e6e" + "656c206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f772066696e697368" + "2e5065726d697373696f6e6564446f6d61696e5065726d697373696f6e6564446f6d61696e206f626a656374206578" + "697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e5369676e65724c69737453" + "69676e65724c697374206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f77" + "2066696e6973682e5469636b65745469636b6574206f626a656374206578697374732c2070726f63656564696e6720" + "7769746820657363726f772066696e6973682e5661756c745661756c74206f626a656374206578697374732c207072" + "6f63656564696e67207769746820657363726f772066696e6973682e43757272656e74207365712076616c75653a00" + "4d0970726f64756365727302086c616e6775616765010452757374000c70726f6365737365642d6279010572757374" + "631d312e38372e30202831373036376539616320323032352d30352d303929002c0f7461726765745f666561747572" + "6573022b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; extern std::string const kCodecovTestsWasmHex = - "0061736d01000000015a0c60057f7f7f7f7f017f60037f7f7e017f60027f7f017f60037f7f7f017f60047f7f7f7f01" - "7f60017f017f60067f7f7f7f7f7f017f60087f7f7f7f7f7f7f7f017f60077f7f7f7f7f7f7f017f60047f7f7f7f0060" - "00006000017f02840d3b08686f73745f6c6962057472616365000008686f73745f6c69620974726163655f6e756d00" - "0108686f73745f6c69620e6765745f6c65646765725f73716e000208686f73745f6c6962166765745f706172656e74" - "5f6c65646765725f74696d65000208686f73745f6c6962166765745f706172656e745f6c65646765725f6861736800" - "0208686f73745f6c69620c6765745f626173655f666565000208686f73745f6c696211616d656e646d656e745f656e" - "61626c6564000208686f73745f6c69620c6765745f74785f6669656c64000308686f73745f6c69620e6163636f756e" - "745f6b65796c6574000408686f73745f6c69621063616368655f6c65646765725f6f626a000308686f73745f6c6962" - "1c6765745f63757272656e745f6c65646765725f6f626a5f6669656c64000308686f73745f6c6962146765745f6c65" - "646765725f6f626a5f6669656c64000408686f73745f6c6962136765745f74785f6e65737465645f6669656c640004" - "08686f73745f6c6962236765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c640004" - "08686f73745f6c69621b6765745f6c65646765725f6f626a5f6e65737465645f6669656c64000008686f73745f6c69" - "62106765745f74785f61727261795f6c656e000508686f73745f6c6962206765745f63757272656e745f6c65646765" - "725f6f626a5f61727261795f6c656e000508686f73745f6c6962186765745f6c65646765725f6f626a5f6172726179" - "5f6c656e000208686f73745f6c6962176765745f74785f6e65737465645f61727261795f6c656e000208686f73745f" - "6c6962276765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e00020868" - "6f73745f6c69621f6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e000308686f73745f" - "6c69620b7570646174655f64617461000208686f73745f6c696213636f6d707574655f7368613531325f68616c6600" - "0408686f73745f6c696209636865636b5f736967000608686f73745f6c6962076765745f6e6674000608686f73745f" - "6c69620e6765745f6e66745f697373756572000408686f73745f6c69620d6765745f6e66745f7461786f6e00040868" - "6f73745f6c69620d6765745f6e66745f666c616773000208686f73745f6c6962146765745f6e66745f7472616e7366" - "65725f666565000208686f73745f6c69620e6765745f6e66745f73657269616c000408686f73745f6c69620d747261" - "63655f6163636f756e74000408686f73745f6c69620c74726163655f616d6f756e74000408686f73745f6c69620c63" - "6865636b5f6b65796c6574000608686f73745f6c69620f666c6f61745f66726f6d5f75696e74000008686f73745f6c" - "69620b6c696e655f6b65796c6574000708686f73745f6c69620a616d6d5f6b65796c6574000608686f73745f6c6962" - "1163726564656e7469616c5f6b65796c6574000708686f73745f6c69620e6d70746f6b656e5f6b65796c6574000608" - "686f73745f6c69621274726163655f6f70617175655f666c6f6174000408686f73745f6c69620d666c6f61745f636f" - "6d70617265000408686f73745f6c696209666c6f61745f616464000808686f73745f6c69620e666c6f61745f737562" - "7472616374000808686f73745f6c69620e666c6f61745f6d756c7469706c79000808686f73745f6c69620c666c6f61" - "745f646976696465000808686f73745f6c69620a666c6f61745f726f6f74000608686f73745f6c696209666c6f6174" - "5f706f77000608686f73745f6c69620d657363726f775f6b65796c6574000608686f73745f6c6962136d70745f6973" - "7375616e63655f6b65796c6574000608686f73745f6c6962106e66745f6f666665725f6b65796c6574000608686f73" - "745f6c69620c6f666665725f6b65796c6574000608686f73745f6c69620d6f7261636c655f6b65796c657400060868" - "6f73745f6c69620e7061796368616e5f6b65796c6574000708686f73745f6c69621a7065726d697373696f6e65645f" - "646f6d61696e5f6b65796c6574000608686f73745f6c69620d7469636b65745f6b65796c6574000608686f73745f6c" - "69620c7661756c745f6b65796c6574000608686f73745f6c69620f64656c65676174655f6b65796c6574000608686f" - "73745f6c6962166465706f7369745f707265617574685f6b65796c6574000608686f73745f6c69620a6469645f6b65" - "796c6574000408686f73745f6c69620e7369676e6572735f6b65796c65740004030403090a0b05030100110619037f" - "01418080c0000b7f0041a8a1c0000b7f0041b0a1c0000b072e04066d656d6f727902000666696e697368003d0a5f5f" - "646174615f656e6403010b5f5f686561705f6261736503020aa43f0368000240024020002001460d00200220034101" - "410041001080808080001a2000417f4c0d01418b80c08000410b2000ad1081808080001a10bc80808000000b200220" - "032000ac1081808080001a0f0b418b80c08000410b2000ac1081808080001a10bc80808000000b0300000bb43e0305" - "7f017e017f2380808080004190026b2200248080808000419680c0800041234101410041001080808080001a200041" - "00360260200041e0006a4104108280808000410441bd8cc08000410e10bb8080800020004100360260200041e0006a" - "4104108380808000410441cb8cc08000411610bb80808000200041e0006a41186a22014200370300200041e0006a41" - "106a22024200370300200041e0006a41086a2203420037030020004200370360200041e0006a412010848080800041" - "2041e18cc08000411610bb8080800020004100360260200041e0006a4104108580808000410441f78cc08000410c10" - "bb80808000200041086a41186a428182848890a0c08001370300200041086a41106a428182848890a0c08001370300" - "200041086a41086a428182848890a0c080013703002000428182848890a0c0800137030841b980c08000410e108680" - "808000410141c780c08000411110bb80808000200041086a4120108680808000410141c780c08000411110bb808080" - "000240024041818020200041e0006a411410878080800022044114470d002000412c6a41026a200041e0006a41026a" - "2d00003a0000200020002900673703e8012000200041e0006a410c6a2900003700ed01200020002f00603b012c2000" - "20002903e8013703a801200020002900ed013700ad012000200028006336002f2000412c6a410c6a20002900ad0137" - "0000200020002903a801370033200142003703002002420037030020034200370300200042003703602000412c6a41" - "14200041e0006a412010888080800022014120470d01200041c0006a41026a20002d00623a0000200041e8016a4108" - "6a2201200041e0006a410f6a2900002205370300200041c0006a410f6a2005370000200041c0006a41176a200041e0" - "006a41176a290000370000200041c0006a411f6a200041e0006a411f6a2d00003a0000200020002f01603b01402000" - "200028006336004320002000290067370047200041c0006a41204100108980808000410141d880c08000411010bb80" - "808000200041e0006a41106a22024100360200200041e0006a41086a22034200370300200042003703604181802020" - "0041e0006a4114108a80808000411441838dc08000411c10bb80808000200241003602002003420037030020004200" - "370360410141818020200041e0006a4114108b808080004114419f8dc08000411410bb80808000200041043602a001" - "200041818020360260200041e8016a41106a2202410036020020014200370300200042003703e801200041e0006a41" - "04200041e8016a4114108c80808000411441b38dc08000411310bb8080800020024100360200200142003703002000" - "42003703e801200041e0006a20002802a001200041e8016a4114108d80808000411441c68dc08000412310bb808080" - "002002410036020020014200370300200042003703e8014101200041e0006a20002802a001200041e8016a4114108e" - "80808000411441e98dc08000411b10bb808080004189803c108f80808000412041e880c08000411010bb8080800041" - "89803c109080808000412041f880c08000412010bb8080800041014189803c1091808080004120419881c080004118" - "10bb80808000200041e0006a20002802a001109280808000412041b081c08000411710bb80808000200041e0006a20" - "002802a001109380808000412041c781c08000412710bb808080004101200041e0006a20002802a001109480808000" - "412041ee81c08000411f10bb808080002000412c6a41141095808080004114418d82c08000410b10bb808080002000" - "41e8016a41186a220342003703002002420037030020014200370300200042003703e801200041e0006a20002802a0" - "01200041e8016a4120109680808000412041848ec08000411310bb80808000419882c08000410c41a482c08000410b" - "41af82c08000410e109780808000410141bd82c08000410910bb80808000200041a8016a41186a200041086a41186a" - "290300370300200041a8016a41106a200041086a41106a290300370300200041a8016a41086a200041086a41086a29" - "0300370300200020002903083703a801200241003b010020014200370300200042003703e8012000412c6a41142000" - "41a8016a4120200041e8016a4112109880808000411241978ec08000410710bb808080002002410036020020014200" - "370300200042003703e801200041a8016a4120200041e8016a41141099808080004114419e8ec08000410e10bb8080" - "8000200041003602e801200041a8016a4120200041e8016a4104109a80808000410441ac8ec08000410d10bb808080" - "00200041a8016a4120109b80808000410841c682c08000410d10bb80808000200041a8016a4120109c80808000410a" - "41d382c08000411410bb80808000200041003602e801200041a8016a4120200041e8016a4104109d80808000410441" - "b98ec08000410e10bb8080800041e782c08000410d2000412c6a4114109e80808000410041f482c08000410d10bb80" - "80800041e782c08000410d418183c080004108109f808080004100418983c08000410c10bb8080800041e782c08000" - "410d419583c080004108109f808080004100419d83c08000411110bb80808000417f4104108480808000417141ae83" - "c08000411e10bb80808000200041003602e801200041e8016a417f108480808000417141c78ec08000411e10bb8080" - "8000200041e8016a41026a41003a0000200041003b01e801200041e8016a4103108480808000417d41e58ec0800041" - "2410bb80808000200041003602e801200041e8016a418094ebdc03108480808000417341898fc08000412310bb8080" - "80004102108f80808000416f41cc83c08000411f10bb80808000417f20002802a001109280808000417141eb83c080" - "00411f10bb80808000200041e0006a417f1092808080004171418a84c08000411f10bb80808000200041e0006a4181" - "08109280808000417441a984c08000412010bb80808000200041e0006a418094ebdc036a220620002802a001109280" - "808000417341c984c08000411f10bb80808000200342003703002002420037030020014200370300200042003703e8" - "012000412c6a411420064108200041e8016a412010a080808000417341ac8fc08000411810bb808080002003420037" - "03002002420037030020014200370300200042003703e8012000412c6a41142000412c6a4114200041e8016a412010" - "a080808000417141c48fc08000411a10bb808080002003420037030020024200370300200142003703002000420037" - "03e80120064108200041e8016a4120410010a180808000417341de8fc08000411710bb808080002003420037030020" - "02420037030020014200370300200042003703e801200041e0006a20002802a001200041e8016a4120410010a18080" - "8000417141f58fc08000412010bb80808000200620002802a0014101108980808000417341e884c08000411810bb80" - "808000200041e0006a20002802a00141011089808080004171418085c08000411a10bb808080002003420037030020" - "02420037030020014200370300200042003703e801200620002802a001200041e8016a412010888080800041734195" - "90c08000411610bb80808000200342003703002002420037030020014200370300200042003703e801200041e0006a" - "20002802a001200041e8016a4120108880808000417141ab90c08000411810bb808080002003420037030020024200" - "37030020014200370300200042003703e8012000412c6a41142000412c6a4114200620002802a001200041e8016a41" - "2010a280808000417341c390c08000411c10bb80808000200342003703002002420037030020014200370300200042" - "003703e8012000412c6a41142000412c6a4114200041e0006a20002802a001200041e8016a412010a2808080004171" - "41df90c08000411e10bb80808000200342003703002002420037030020014200370300200042003703e8014194a1c0" - "80004114200620002802a001200041e8016a412010a380808000417341fd90c08000411910bb808080002003420037" - "03002002420037030020014200370300200042003703e8014194a1c080004114200041e0006a20002802a001200041" - "e8016a412010a3808080004171419691c08000411f10bb808080002003420037030020024200370300200142003703" - "00200042003703e8014194a1c080004114419a85c080004114200041e8016a412010a380808000417141b591c08000" - "412910bb80808000200342003703002002420037030020014200370300200042003703e80141ae85c0800041284194" - "a1c080004114200041e8016a412010a380808000417141de91c08000412510bb80808000200041c8016a41146a2000" - "412c6a41106a280100360200200041c8016a410c6a2000412c6a41086a2901003702002000200029012c3702cc0120" - "0041808080083602c801200041003b01e801200041c8016a41184194a1c080004114200041e8016a410210a3808080" - "004171418392c08000410e10bb80808000200620002802a001422a108180808000417341d685c08000411110bb8080" - "8000200041003b01e8014102200041e8016a4102108780808000416f419192c08000411b10bb80808000200041003b" - "01e8014102200041e8016a4102108a80808000416f41ac92c08000412b10bb80808000200041003b01e80141014102" - "200041e8016a4102108b80808000416f41d792c08000412310bb808080004102108f80808000416f41cc83c0800041" - "1f10bb808080004102109080808000416f41e785c08000412f10bb8080800041014102109180808000416f419686c0" - "8000412710bb8080800041b980c08000418108108680808000417441bd86c08000411f10bb8080800041b980c08000" - "41c100108680808000417441dc86c08000411a10bb80808000200041003b01e801200041e0006a418108200041e801" - "6a4102108c80808000417441fa92c08000412110bb80808000200041003b01e801200041e0006a418108200041e801" - "6a4102108d808080004174419b93c08000413110bb80808000200041003b01e8014101200041e0006a418108200041" - "e8016a4102108e80808000417441cc93c08000412910bb80808000200041e0006a418108109280808000417441f686" - "c08000412510bb80808000200041e0006a4181081093808080004174419b87c08000413510bb808080004101200041" - "e0006a418108109480808000417441d087c08000412d10bb80808000200041e0006a418120109580808000417441fd" - "87c08000411910bb8080800041e782c0800041810841a482c08000410b41af82c08000410e109780808000417441bd" - "82c08000410910bb8080800041e782c08000410d41a482c0800041810841af82c08000410e109780808000417441bd" - "82c08000410910bb8080800041e782c08000410d41a482c08000410b41af82c08000418108109780808000417441bd" - "82c08000410910bb80808000200041003b01e801200041e0006a418108200041e8016a4102109680808000417441f5" - "93c08000412110bb80808000200041003b01e8014194a1c080004181084194a1c080004114200041e8016a410210a3" - "808080004174419694c08000411810bb80808000200041003b01e8012000412c6a41142000412c6a4114200041e000" - "6a418108200041e8016a410210a480808000417441ae94c08000411f10bb80808000200041003b01e801200041c801" - "6a4181082000412c6a4114200041e8016a410210a580808000417441cd94c08000412210bb8080800041e782c08000" - "410d200620002802a00141001080808080004173419688c08000410f10bb80808000200042d487b6f4c7d4b1c00037" - "00e00141e782c08000410d200041e0016a418094ebdc036a2204410810a680808000417341a588c08000411c10bb80" - "80800041e782c08000410d200620002802a001109f80808000417341c188c08000411610bb80808000200441082000" - "41e0016a410810a780808000417341d788c08000411810bb80808000200041e0016a41082004410810a78080800041" - "7341ef88c08000411810bb80808000200041003b01e80120044108200041e0016a4108200041e8016a4102410010a8" - "80808000417341ef94c08000411410bb80808000200041003b01e801200041e0016a410820044108200041e8016a41" - "02410010a8808080004173418395c08000411410bb80808000200041003b01e80120044108200041e0016a41082000" - "41e8016a4102410010a9808080004173419795c08000411910bb80808000200041003b01e801200041e0016a410820" - "044108200041e8016a4102410010a980808000417341b095c08000411910bb80808000200041003b01e80120044108" - "200041e0016a4108200041e8016a4102410010aa80808000417341c995c08000411910bb80808000200041003b01e8" - "01200041e0016a410820044108200041e8016a4102410010aa80808000417341e295c08000411910bb808080002000" - "41003b01e80120044108200041e0016a4108200041e8016a4102410010ab80808000417341fb95c08000411710bb80" - "808000200041003b01e801200041e0016a410820044108200041e8016a4102410010ab808080004173419296c08000" - "411710bb80808000200041003b01e801200441084103200041e8016a4102410010ac80808000417341a996c0800041" - "1410bb80808000200041003b01e801200441084103200041e8016a4102410010ad80808000417341bd96c080004113" - "10bb80808000200342003703002002420037030020014200370300200042003703e8012000412c6a41142000412c6a" - "4114200041e8016a412010ae80808000417141d096c08000411f10bb80808000200342003703002002420037030020" - "014200370300200042003703e8012000412c6a41142000412c6a4114200041e8016a412010af80808000417141ef96" - "c08000412510bb80808000200342003703002002420037030020014200370300200042003703e8012000412c6a4114" - "2000412c6a4114200041e8016a412010b0808080004171419497c08000412210bb8080800020034200370300200242" - "0037030020014200370300200042003703e8012000412c6a41142000412c6a4114200041e8016a412010b180808000" - "417141b697c08000411e10bb80808000200342003703002002420037030020014200370300200042003703e8012000" - "412c6a41142000412c6a4114200041e8016a412010b280808000417141d497c08000411f10bb808080002003420037" - "03002002420037030020014200370300200042003703e8012000412c6a41142000412c6a41142000412c6a41142000" - "41e8016a412010b380808000417141f397c08000412010bb8080800020034200370300200242003703002001420037" - "0300200042003703e8012000412c6a41142000412c6a4114200041e8016a412010b4808080004171419398c0800041" - "2c10bb80808000200342003703002002420037030020014200370300200042003703e8012000412c6a41142000412c" - "6a4114200041e8016a412010b580808000417141bf98c08000411f10bb808080002003420037030020024200370300" - "20014200370300200042003703e8012000412c6a41142000412c6a4114200041e8016a412010b680808000417141de" - "98c08000411e10bb80808000200041e0006a20002802a00141001089808080004171418789c08000412310bb808080" - "00200041003b01e8012000412c6a4114200041e0006a20002802a001200041e8016a4102109880808000417141fc98" - "c08000411a10bb80808000200041003b01e801200041e0006a20002802a001200041e8016a41021099808080004171" - "419699c08000412110bb80808000200041003b01e801200041e0006a20002802a001200041e8016a4102109a808080" - "00417141b799c08000412010bb80808000200041e0006a20002802a001109b80808000417141aa89c08000412010bb" - "80808000200041e0006a20002802a001109c80808000417141ca89c08000412710bb80808000200041003602e80120" - "0041e0006a20002802a001200041e8016a4104109d80808000417141d799c08000412110bb80808000200041003b01" - "e801200041e0006a20002802a001200041e8016a4102108880808000417141f899c08000412410bb80808000200041" - "808080083602e801200041003b018e02200041e0006a20002802a001200041e8016a41042000418e026a410210a080" - "8080004171419c9ac08000412210bb80808000200041003b018e02200041e0006a20002802a00122012000412c6a41" - "14200041e0006a20012000418e026a410210a480808000417141be9ac08000412810bb80808000200041003b018e02" - "2000412c6a4114200041e0006a20002802a0012201200041e0006a20012000418e026a410210a480808000417141e6" - "9ac08000412810bb80808000200041003b018e02200041e0006a20002802a0012000412c6a41142000418e026a4102" - "10b7808080004171418e9bc08000412610bb80808000200041003b018e022000412c6a4114200041e0006a20002802" - "a0012000418e026a410210b780808000417141b49bc08000412610bb80808000200041003b018e02200041e0006a20" - "002802a0012000412c6a41142000418e026a410210b880808000417141da9bc08000412d10bb80808000200041003b" - "018e022000412c6a4114200041e0006a20002802a0012000418e026a410210b880808000417141879cc08000412d10" - "bb80808000200041003b018e02200041e0006a20002802a0012000418e026a410210b980808000417141b49cc08000" - "412010bb80808000200041003b018e02200041e0006a20002802a001200041e8016a41042000418e026a410210ae80" - "808000417141d49cc08000412310bb80808000200041003b018e02200041e0006a20002802a0012000412c6a411441" - "9a85c0800041142000418e026a410210a280808000417141f79cc08000412210bb80808000200041003b018e022000" - "412c6a4114200041e0006a20002802a001419a85c0800041142000418e026a410210a280808000417141999dc08000" - "412210bb80808000200041003b018e02200041e0006a20002802a001200041e8016a41042000418e026a410210af80" - "808000417141bb9dc08000412910bb80808000200041003b018e02200041c8016a4118200041e0006a20002802a001" - "2000418e026a410210a580808000417141e49dc08000412410bb80808000200041003b018e02200041e0006a200028" - "02a001200041e8016a41042000418e026a410210b080808000417141889ec08000412610bb80808000200041003b01" - "8e02200041e0006a20002802a001200041e8016a41042000418e026a410210b180808000417141ae9ec08000412210" - "bb80808000200041003b018e02200041e0006a20002802a001200041e8016a41042000418e026a410210b280808000" - "417141d09ec08000412310bb80808000200041003b018e02200041e0006a20002802a0012000412c6a4114200041e8" - "016a41042000418e026a410210b380808000417141f39ec08000412510bb80808000200041003b018e022000412c6a" - "4114200041e0006a20002802a001200041e8016a41042000418e026a410210b380808000417141989fc08000412510" - "bb80808000200041003b018e02200041e0006a20002802a001200041e8016a41042000418e026a410210b480808000" - "417141bd9fc08000413010bb80808000200041003b018e02200041e0006a20002802a0012000418e026a410210ba80" - "808000417141ed9fc08000412410bb80808000200041003b018e02200041e0006a20002802a001200041e8016a4104" - "2000418e026a410210b58080800041714191a0c08000412310bb80808000200041003b018e02200041e0006a200028" - "02a001200041e8016a41042000418e026a410210b680808000417141b4a0c08000412210bb80808000200041003b01" - "8e02200041e0006a20002802a00141f189c0800041202000418e026a4102109880808000417141d6a0c08000411d10" - "bb8080800041e782c08000410d200041e0006a20002802a001109e80808000417141918ac08000412310bb80808000" - "41e796abdd03410d41f189c0800041204100108080808000417341b48ac08000411010bb8080800041e796abdd0341" - "0d200041e0016a410810a680808000417341c48ac08000411d10bb8080800041e796abdd03410d2000412c6a411410" - "9e80808000417341e18ac08000411810bb8080800041e796abdd03410d419583c080004108109f80808000417341f9" - "8ac08000411710bb80808000200041e0006a20002802a001200041e0006a4181084100108080808000417441908bc0" - "8000410e10bb80808000200041e0006a41810842011081808080004174419e8bc08000411210bb8080800041e782c0" - "8000418108200041e0016a410810a680808000417441b08bc08000411b10bb8080800041e782c08000418108200041" - "2c6a4114109e80808000417441cb8bc08000411610bb8080800041e782c08000418108419583c080004108109f8080" - "8000417441e18bc08000411510bb8080800041e782c08000410d200041e0006a20002802a001109f80808000417141" - "f68bc08000411910bb80808000200041003b018e02200041e0006a20002802a0012000412c6a41142000418e026a41" - "0210a580808000417141f3a0c08000412110bb8080800041e782c08000410d200041e0006a20002802a00141021080" - "808080004171418f8cc08000411410bb80808000410141002000412c6a4114109e80808000410041a38cc08000411a" - "10bb8080800020004190026a24808080800041010f0b418080c08000410b2004417f2004417f481bac108180808000" - "1a10bc80808000000b418080c08000410b2001417f2001417f481bac1081808080001a10bc80808000000b0bb22101" - "00418080c0000ba8216572726f725f636f64653d54455354204641494c45442424242424205354415254494e472057" - "41534d20455845435554494f4e202424242424746573745f616d656e646d656e74616d656e646d656e745f656e6162" - "6c656463616368655f6c65646765725f6f626a6765745f74785f61727261795f6c656e6765745f63757272656e745f" - "6c65646765725f6f626a5f61727261795f6c656e6765745f6c65646765725f6f626a5f61727261795f6c656e676574" - "5f74785f6e65737465645f61727261795f6c656e6765745f63757272656e745f6c65646765725f6f626a5f6e657374" - "65645f61727261795f6c656e6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e75706461" - "74655f6461746174657374206d65737361676574657374207075626b657974657374207369676e6174757265636865" - "636b5f7369676765745f6e66745f666c6167736765745f6e66745f7472616e736665725f66656574657374696e6720" - "747261636574726163655f6163636f756e74400000000000005f74726163655f616d6f756e74400000000000000074" - "726163655f616d6f756e745f7a65726f6765745f706172656e745f6c65646765725f686173685f6e65675f70747267" - "65745f74785f61727261795f6c656e5f696e76616c69645f736669656c646765745f74785f6e65737465645f617272" - "61795f6c656e5f6e65675f7074726765745f74785f6e65737465645f61727261795f6c656e5f6e65675f6c656e6765" - "745f74785f6e65737465645f61727261795f6c656e5f746f6f5f6c6f6e676765745f74785f6e65737465645f617272" - "61795f6c656e5f7074725f6f6f6263616368655f6c65646765725f6f626a5f7074725f6f6f6263616368655f6c6564" - "6765725f6f626a5f77726f6e675f6c656e555344303030303030303030303030303030303000000000000000000000" - "00000000000000000000000000000000000000000000000000000000000074726163655f6e756d5f6f6f625f737472" - "6765745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e5f696e76616c69645f736669656c64" - "6765745f6c65646765725f6f626a5f61727261795f6c656e5f696e76616c69645f736669656c64616d656e646d656e" - "745f656e61626c65645f746f6f5f6269675f736c696365616d656e646d656e745f656e61626c65645f746f6f5f6c6f" - "6e676765745f74785f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f63757272" - "656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963656765" - "745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c69636575706461" - "74655f646174615f746f6f5f6269675f736c69636574726163655f6f6f625f736c69636574726163655f6f70617175" - "655f666c6f61745f6f6f625f736c69636574726163655f616d6f756e745f6f6f625f736c696365666c6f61745f636f" - "6d706172655f6f6f625f736c69636531666c6f61745f636f6d706172655f6f6f625f736c6963653263616368655f6c" - "65646765725f6f626a5f77726f6e675f73697a655f75696e743235366765745f6e66745f666c6167735f77726f6e67" - "5f73697a655f75696e743235366765745f6e66745f7472616e736665725f6665655f77726f6e675f73697a655f7569" - "6e74323536303030303030303030303030303030303030303030303030303030303030303174726163655f6163636f" - "756e745f77726f6e675f73697a655f6163636f756e745f696474726163655f6f6f625f737472696e6774726163655f" - "6f70617175655f666c6f61745f6f6f625f737472696e6774726163655f6163636f756e745f6f6f625f737472696e67" - "74726163655f616d6f756e745f6f6f625f737472696e6774726163655f746f6f5f6c6f6e6774726163655f6e756d5f" - "746f6f5f6c6f6e6774726163655f6f70617175655f666c6f61745f746f6f5f6c6f6e6774726163655f6163636f756e" - "745f746f6f5f6c6f6e6774726163655f616d6f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f77726f" - "6e675f6c656e67746874726163655f696e76616c69645f61735f68657874726163655f6163636f756e745f63686563" - "6b5f646573796e636765745f6c65646765725f73716e6765745f706172656e745f6c65646765725f74696d65676574" - "5f706172656e745f6c65646765725f686173686765745f626173655f6665656765745f63757272656e745f6c656467" - "65725f6f626a5f6669656c646765745f6c65646765725f6f626a5f6669656c646765745f74785f6e65737465645f66" - "69656c646765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c646765745f6c656467" - "65725f6f626a5f6e65737465645f6669656c64636f6d707574655f7368613531325f68616c666765745f6e66746765" - "745f6e66745f6973737565726765745f6e66745f7461786f6e6765745f6e66745f73657269616c6765745f70617265" - "6e745f6c65646765725f686173685f6e65675f6c656e6765745f706172656e745f6c65646765725f686173685f6275" - "665f746f6f5f736d616c6c6765745f706172656e745f6c65646765725f686173685f6c656e5f746f6f5f6c6f6e6763" - "6865636b5f6b65796c65745f6f6f625f6c656e5f753332636865636b5f6b65796c65745f77726f6e675f6c656e5f75" - "3332666c6f61745f66726f6d5f75696e745f6c656e5f6f6f62666c6f61745f66726f6d5f75696e745f77726f6e675f" - "6c656e5f75696e7436346163636f756e745f6b65796c65745f6c656e5f6f6f626163636f756e745f6b65796c65745f" - "77726f6e675f6c656e6c696e655f6b65796c65745f6c656e5f6f6f625f63757272656e63796c696e655f6b65796c65" - "745f77726f6e675f6c656e5f63757272656e6379616d6d5f6b65796c65745f6c656e5f6f6f625f617373657432616d" - "6d5f6b65796c65745f6c656e5f77726f6e675f6c656e5f617373657432616d6d5f6b65796c65745f6c656e5f77726f" - "6e675f6e6f6e5f7872705f63757272656e63795f6c656e616d6d5f6b65796c65745f6c656e5f77726f6e675f787270" - "5f63757272656e63795f6c656e616d6d5f6b65796c65745f6d70746765745f74785f6669656c645f696e76616c6964" - "5f736669656c646765745f63757272656e745f6c65646765725f6f626a5f6669656c645f696e76616c69645f736669" - "656c646765745f6c65646765725f6f626a5f6669656c645f696e76616c69645f736669656c646765745f74785f6e65" - "737465645f6669656c645f746f6f5f6269675f736c6963656765745f63757272656e745f6c65646765725f6f626a5f" - "6e65737465645f6669656c645f746f6f5f6269675f736c6963656765745f6c65646765725f6f626a5f6e6573746564" - "5f6669656c645f746f6f5f6269675f736c696365636f6d707574655f7368613531325f68616c665f746f6f5f626967" - "5f736c696365616d6d5f6b65796c65745f746f6f5f6269675f736c69636563726564656e7469616c5f6b65796c6574" - "5f746f6f5f6269675f736c6963656d70746f6b656e5f6b65796c65745f746f6f5f6269675f736c6963655f6d707469" - "64666c6f61745f6164645f6f6f625f736c69636531666c6f61745f6164645f6f6f625f736c69636532666c6f61745f" - "73756274726163745f6f6f625f736c69636531666c6f61745f73756274726163745f6f6f625f736c69636532666c6f" - "61745f6d756c7469706c795f6f6f625f736c69636531666c6f61745f6d756c7469706c795f6f6f625f736c69636532" - "666c6f61745f6469766964655f6f6f625f736c69636531666c6f61745f6469766964655f6f6f625f736c6963653266" - "6c6f61745f726f6f745f6f6f625f736c696365666c6f61745f706f775f6f6f625f736c696365657363726f775f6b65" - "796c65745f77726f6e675f73697a655f75696e7433326d70745f69737375616e63655f6b65796c65745f77726f6e67" - "5f73697a655f75696e7433326e66745f6f666665725f6b65796c65745f77726f6e675f73697a655f75696e7433326f" - "666665725f6b65796c65745f77726f6e675f73697a655f75696e7433326f7261636c655f6b65796c65745f77726f6e" - "675f73697a655f75696e7433327061796368616e5f6b65796c65745f77726f6e675f73697a655f75696e7433327065" - "726d697373696f6e65645f646f6d61696e5f6b65796c65745f77726f6e675f73697a655f75696e7433327469636b65" - "745f6b65796c65745f77726f6e675f73697a655f75696e7433327661756c745f6b65796c65745f77726f6e675f7369" - "7a655f75696e7433326765745f6e66745f77726f6e675f73697a655f75696e743235366765745f6e66745f69737375" - "65725f77726f6e675f73697a655f75696e743235366765745f6e66745f7461786f6e5f77726f6e675f73697a655f75" - "696e743235366765745f6e66745f73657269616c5f77726f6e675f73697a655f75696e743235366163636f756e745f" - "6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964636865636b5f6b65796c65745f77726f6e675f" - "73697a655f6163636f756e745f696463726564656e7469616c5f6b65796c65745f77726f6e675f73697a655f616363" - "6f756e745f69643163726564656e7469616c5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964" - "3264656c65676174655f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69643164656c6567617465" - "5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964326465706f7369745f707265617574685f6b" - "65796c65745f77726f6e675f73697a655f6163636f756e745f6964316465706f7369745f707265617574685f6b6579" - "6c65745f77726f6e675f73697a655f6163636f756e745f6964326469645f6b65796c65745f77726f6e675f73697a65" - "5f6163636f756e745f6964657363726f775f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69646c" - "696e655f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964316c696e655f6b65796c65745f7772" - "6f6e675f73697a655f6163636f756e745f6964326d70745f69737375616e63655f6b65796c65745f77726f6e675f73" - "697a655f6163636f756e745f69646d70746f6b656e5f6b65796c65745f77726f6e675f73697a655f6163636f756e74" - "5f69646e66745f6f666665725f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69646f666665725f" - "6b65796c65745f77726f6e675f73697a655f6163636f756e745f69646f7261636c655f6b65796c65745f77726f6e67" - "5f73697a655f6163636f756e745f69647061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f75" - "6e745f6964317061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964327065726d" - "697373696f6e65645f646f6d61696e5f6b65796c65745f77726f6e675f73697a655f6163636f756e745f6964736967" - "6e6572735f6b65796c65745f77726f6e675f73697a655f6163636f756e745f69647469636b65745f6b65796c65745f" - "77726f6e675f73697a655f6163636f756e745f69647661756c745f6b65796c65745f77726f6e675f73697a655f6163" - "636f756e745f69646765745f6e66745f77726f6e675f73697a655f6163636f756e745f69646d70746f6b656e5f6b65" - "796c65745f6d707469645f77726f6e675f6c656e677468000000000000000000000000000000000000000000ea2a04" - "6e616d65001312636f6465636f765f74657374732e7761736d01ad2a3e004c5f5a4e31367872706c5f7761736d5f73" - "74646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e7335747261636531376834623431" - "6663626133633836323862394501505f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f7374" - "5f646566696e65645f66756e6374696f6e733974726163655f6e756d31376836346562613963306665666435626361" - "4502565f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e" - "6374696f6e7331346765745f6c65646765725f73716e3137686633313635393261626131346636336345035e5f5a4e" - "31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e73" - "32326765745f706172656e745f6c65646765725f74696d653137686662373635613064613335336631323445045e5f" - "5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f" - "6e7332326765745f706172656e745f6c65646765725f68617368313768656335313634326538353530626434354505" - "545f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374" - "696f6e7331326765745f626173655f666565313768386466356664653831663063326161614506595f5a4e31367872" - "706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e733137616d" - "656e646d656e745f656e61626c6564313768363461346434383031333165333235354507545f5a4e31367872706c5f" - "7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e7331326765745f74" - "785f6669656c64313768373037373835623434663266363639304508565f5a4e31367872706c5f7761736d5f737464" - "6c696234686f73743232686f73745f646566696e65645f66756e6374696f6e7331346163636f756e745f6b65796c65" - "74313768616538373566373066646637336635354509585f5a4e31367872706c5f7761736d5f7374646c696234686f" - "73743232686f73745f646566696e65645f66756e6374696f6e73313663616368655f6c65646765725f6f626a313768" - "65313634313265303433666362643861450a645f5a4e31367872706c5f7761736d5f7374646c696234686f73743232" - "686f73745f646566696e65645f66756e6374696f6e7332386765745f63757272656e745f6c65646765725f6f626a5f" - "6669656c6431376833636338656464626163373139323234450b5c5f5a4e31367872706c5f7761736d5f7374646c69" - "6234686f73743232686f73745f646566696e65645f66756e6374696f6e7332306765745f6c65646765725f6f626a5f" - "6669656c6431376830626137333839346464356334633338450c5b5f5a4e31367872706c5f7761736d5f7374646c69" - "6234686f73743232686f73745f646566696e65645f66756e6374696f6e7331396765745f74785f6e65737465645f66" - "69656c6431376864353730336462646161303438633238450d6b5f5a4e31367872706c5f7761736d5f7374646c6962" - "34686f73743232686f73745f646566696e65645f66756e6374696f6e7333356765745f63757272656e745f6c656467" - "65725f6f626a5f6e65737465645f6669656c6431376864336565353939316537306235386130450e635f5a4e313678" - "72706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e73323767" - "65745f6c65646765725f6f626a5f6e65737465645f6669656c6431376837363831323438326638333433326235450f" - "585f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374" - "696f6e7331366765745f74785f61727261795f6c656e313768663061333731366132373864633663614510685f5a4e" - "31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e73" - "33326765745f63757272656e745f6c65646765725f6f626a5f61727261795f6c656e31376863396662303730623337" - "6461323866314511605f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e" - "65645f66756e6374696f6e7332346765745f6c65646765725f6f626a5f61727261795f6c656e313768383061616437" - "6664343136616664636545125f5f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f64" - "6566696e65645f66756e6374696f6e7332336765745f74785f6e65737465645f61727261795f6c656e313768353234" - "6130613261303566656465376545136f5f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73" - "745f646566696e65645f66756e6374696f6e7333396765745f63757272656e745f6c65646765725f6f626a5f6e6573" - "7465645f61727261795f6c656e313768353139623331663261303939353035644514675f5a4e31367872706c5f7761" - "736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e7333316765745f6c6564" - "6765725f6f626a5f6e65737465645f61727261795f6c656e313768316633646533393861653331306533394515535f" - "5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f" - "6e7331317570646174655f646174613137683662383232316465393861626630393745165b5f5a4e31367872706c5f" - "7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e733139636f6d7075" - "74655f7368613531325f68616c66313768303565356531613863653833646338364517505f5a4e31367872706c5f77" - "61736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e7339636865636b5f73" - "69673137686532323034393665326136363839373945184e5f5a4e31367872706c5f7761736d5f7374646c69623468" - "6f73743232686f73745f646566696e65645f66756e6374696f6e73376765745f6e6674313768643131643234633637" - "393530306236354519565f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f64656669" - "6e65645f66756e6374696f6e7331346765745f6e66745f697373756572313768316137353534643533316537636564" - "65451a555f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f6675" - "6e6374696f6e7331336765745f6e66745f7461786f6e31376830636664373337653333393261616434451b555f5a4e" - "31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e73" - "31336765745f6e66745f666c61677331376863336437633739326262303834353636451c5c5f5a4e31367872706c5f" - "7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e7332306765745f6e" - "66745f7472616e736665725f66656531376834343230383233633838623738666630451d565f5a4e31367872706c5f" - "7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e7331346765745f6e" - "66745f73657269616c31376834326337303332393835666339343130451e555f5a4e31367872706c5f7761736d5f73" - "74646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e73313374726163655f6163636f75" - "6e7431376831393931636463666337663234366131451f545f5a4e31367872706c5f7761736d5f7374646c69623468" - "6f73743232686f73745f646566696e65645f66756e6374696f6e73313274726163655f616d6f756e74313768313231" - "643430646438643439623064344520545f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73" - "745f646566696e65645f66756e6374696f6e733132636865636b5f6b65796c65743137686135376564303837636165" - "39393136384521575f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65" - "645f66756e6374696f6e733135666c6f61745f66726f6d5f75696e7431376866363961343162303366323839346262" - "4522485f5a4e3133636f6465636f765f74657374733139686f73745f62696e64696e67735f6c6f6f736531316c696e" - "655f6b65796c6574313768336166313834353162626362653062384523525f5a4e31367872706c5f7761736d5f7374" - "646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e733130616d6d5f6b65796c65743137" - "68353565333961626264346262323336324524595f5a4e31367872706c5f7761736d5f7374646c696234686f737432" - "32686f73745f646566696e65645f66756e6374696f6e73313763726564656e7469616c5f6b65796c65743137686365" - "61323561633261373035393863664525565f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f" - "73745f646566696e65645f66756e6374696f6e7331346d70746f6b656e5f6b65796c65743137686231363964636462" - "623234623033663445265a5f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566" - "696e65645f66756e6374696f6e73313874726163655f6f70617175655f666c6f617431376839313533356463633336" - "3764323938334527555f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e" - "65645f66756e6374696f6e733133666c6f61745f636f6d706172653137683134653662643136643762313235373745" - "28505f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e63" - "74696f6e7339666c6f61745f616464313768316162653839663139373139373431644529565f5a4e31367872706c5f" - "7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e733134666c6f6174" - "5f737562747261637431376830316661353561663438653963663837452a565f5a4e31367872706c5f7761736d5f73" - "74646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e733134666c6f61745f6d756c7469" - "706c7931376836633665366239643935636234643561452b545f5a4e31367872706c5f7761736d5f7374646c696234" - "686f73743232686f73745f646566696e65645f66756e6374696f6e733132666c6f61745f6469766964653137686132" - "3932613963396261323535623238452c525f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f" - "73745f646566696e65645f66756e6374696f6e733130666c6f61745f726f6f74313768393330313037316165376337" - "33393261452d505f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e6564" - "5f66756e6374696f6e7339666c6f61745f706f7731376830326133343235636131653666656531452e555f5a4e3136" - "7872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e733133" - "657363726f775f6b65796c657431376830326161316365326263346330373539452f5b5f5a4e31367872706c5f7761" - "736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e7331396d70745f697373" - "75616e63655f6b65796c6574313768666539386161613762313632343765314530585f5a4e31367872706c5f776173" - "6d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e7331366e66745f6f666665" - "725f6b65796c6574313768353930313839656564373166613435364531545f5a4e31367872706c5f7761736d5f7374" - "646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e7331326f666665725f6b65796c6574" - "313768353830376537393161346361613163634532555f5a4e31367872706c5f7761736d5f7374646c696234686f73" - "743232686f73745f646566696e65645f66756e6374696f6e7331336f7261636c655f6b65796c657431376866343831" - "3166343862643266326530344533565f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f7374" - "5f646566696e65645f66756e6374696f6e7331347061796368616e5f6b65796c657431376837386265393931643265" - "3436613339634534625f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e" - "65645f66756e6374696f6e7332367065726d697373696f6e65645f646f6d61696e5f6b65796c657431376837663334" - "3362646335656663326630624535555f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f7374" - "5f646566696e65645f66756e6374696f6e7331337469636b65745f6b65796c65743137686435666532636466326537" - "33393962374536545f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65" - "645f66756e6374696f6e7331327661756c745f6b65796c657431376830386639346132656161383335373835453757" - "5f5a4e31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e637469" - "6f6e73313564656c65676174655f6b65796c65743137686162396339646561393364663265636245385e5f5a4e3136" - "7872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e733232" - "6465706f7369745f707265617574685f6b65796c6574313768313962303532623237653238313139384539525f5a4e" - "31367872706c5f7761736d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e73" - "31306469645f6b65796c657431376838323331376636646338353661383533453a565f5a4e31367872706c5f776173" - "6d5f7374646c696234686f73743232686f73745f646566696e65645f66756e6374696f6e7331347369676e6572735f" - "6b65796c657431376833626636666236363561643432333563453b345f5a4e3133636f6465636f765f746573747331" - "32636865636b5f726573756c7431376830613536316462313034376266626561453c305f5a4e34636f72653970616e" - "69636b696e673970616e69635f666d7431376864333035326133363632643530633935453d0666696e697368071201" - "000f5f5f737461636b5f706f696e746572090a0100072e726f64617461004d0970726f64756365727302086c616e67" - "75616765010452757374000c70726f6365737365642d6279010572757374631d312e38392e30202832393438333838" - "336520323032352d30382d3034290094010f7461726765745f6665617475726573082b0b62756c6b2d6d656d6f7279" - "2b0f62756c6b2d6d656d6f72792d6f70742b1663616c6c2d696e6469726563742d6f7665726c6f6e672b0a6d756c74" - "6976616c75652b0f6d757461626c652d676c6f62616c732b136e6f6e7472617070696e672d6670746f696e742b0f72" - "65666572656e63652d74797065732b087369676e2d657874"; + "0061736d0100000001570b60067f7f7f7f7f7f017f60047f7f7f7f017f60027f7f017f60037f7f7f017f60077f7f7f" + "7f7f7f7f017f60057f7f7f7f7f017f60087f7f7f7f7f7f7f7f017f60017f017f60037f7f7e017f60047f7f7f7f0060" + "00017f02c60a3b08686f73745f6c6962057472616365000508686f73745f6c69620974726163655f6e756d00080868" + "6f73745f6c69620a6c6467725f696e646578000208686f73745f6c696210706172656e745f6c6467725f74696d6500" + "0208686f73745f6c696210706172656e745f6c6467725f68617368000208686f73745f6c696208626173655f666565" + "000208686f73745f6c696211616d656e646d656e745f656e61626c6564000208686f73745f6c69620874785f666965" + "6c64000308686f73745f6c69620e6163636f756e74726f6f745f6964000108686f73745f6c69620863616368655f6c" + "65000308686f73745f6c69620d686f6d655f6c655f6669656c64000308686f73745f6c6962086c655f6669656c6400" + "0108686f73745f6c69620874785f696e6e6572000108686f73745f6c69620d686f6d655f6c655f696e6e6572000108" + "686f73745f6c6962086c655f696e6e6572000508686f73745f6c69620a74785f6172725f6c656e000708686f73745f" + "6c69620f686f6d655f6c655f6172725f6c656e000708686f73745f6c69620a6c655f6172725f6c656e000208686f73" + "745f6c69621074785f696e6e65725f6172725f6c656e000208686f73745f6c696215686f6d655f6c655f696e6e6572" + "5f6172725f6c656e000208686f73745f6c6962106c655f696e6e65725f6172725f6c656e000308686f73745f6c6962" + "087365745f64617461000208686f73745f6c69620b7368613531325f68616c66000108686f73745f6c696209636865" + "636b5f736967000008686f73745f6c6962076e66745f757269000008686f73745f6c69620a6e66745f697373756572" + "000108686f73745f6c6962096e66745f7461786f6e000108686f73745f6c6962096e66745f666c616773000208686f" + "73745f6c69620c6e66745f786665725f666565000208686f73745f6c69620a6e66745f73657269616c000108686f73" + "745f6c69620a74726163655f61636374000108686f73745f6c69620974726163655f616d74000108686f73745f6c69" + "6208636865636b5f6964000008686f73745f6c69620f666c6f61745f66726f6d5f75696e74000508686f73745f6c69" + "620c74727573746c696e655f6964000608686f73745f6c696206616d6d5f6964000008686f73745f6c69620d637265" + "64656e7469616c5f6964000608686f73745f6c69620a6d70746f6b656e5f6964000008686f73745f6c69620c747261" + "63655f78666c6f6174000108686f73745f6c696209666c6f61745f636d70000108686f73745f6c696209666c6f6174" + "5f616464000408686f73745f6c696209666c6f61745f737562000408686f73745f6c69620a666c6f61745f6d756c74" + "000408686f73745f6c696209666c6f61745f646976000408686f73745f6c69620a666c6f61745f726f6f7400000868" + "6f73745f6c696209666c6f61745f706f77000008686f73745f6c696209657363726f775f6964000008686f73745f6c" + "69620f6d70745f69737375616e63655f6964000008686f73745f6c69620c6e66745f6f666665725f6964000008686f" + "73745f6c6962086f666665725f6964000008686f73745f6c6962096f7261636c655f6964000008686f73745f6c6962" + "0a7061796368616e5f6964000608686f73745f6c6962167065726d697373696f6e65645f646f6d61696e5f69640000" + "08686f73745f6c6962097469636b65745f6964000008686f73745f6c6962087661756c745f6964000008686f73745f" + "6c69620b64656c65676174655f6964000008686f73745f6c6962126465706f7369745f707265617574685f69640000" + "08686f73745f6c6962066469645f6964000108686f73745f6c69620a7369676e6572735f69640001030302090a0503" + "0100110619037f01418080c0000b7f0041cf9bc0000b7f0041d09bc0000b072e04066d656d6f727902000666696e69" + "7368003c0a5f5f646174615f656e6403010b5f5f686561705f6261736503020a8c2f02460002402000200147044020" + "02200341014100410010001a20004100480d01418b80c000410b2000ad1001000b200220032000ac10011a0f0b418b" + "80c000410b2000ac1001000bc22e020b7f017e23004190026b22002400419680c000412341014100410010001a2000" + "4100360260200041e0006a220241041002410441888ac000410a103b20004100360260200241041003410441928ac0" + "004110103b200041f8006a22054200370300200041f0006a22014200370300200041e8006a22064200370300200042" + "00370360200241201004412041a28ac0004110103b20004100360260200241041005410441b28ac0004108103b2000" + "41106a2208428182848890a0c08001370300200041186a2209428182848890a0c08001370300200041206a220a4281" + "82848890a0c080013703002000428182848890a0c0800137030841b980c000410e1006410141c780c0004111103b20" + "0041086a41201006410141c780c0004111103b418180202002411410072203411446044002402000412e6a200041e2" + "006a2d00003a0000200020002900673703e8012000200041ec006a2900003700ed01200020002f00603b012c200020" + "002903e8013703a801200020002900ed013700ad012000200028006336002f200041386a20002900ad013700002000" + "20002903a801370033200542003703002001420037030020064200370300200042003703602000412c6a2205411420" + "024120100822034120470d00200041c2006a20002d00623a0000200041f0016a2207200041ef006a290000220b3703" + "00200041cf006a200b370000200041d7006a200041f7006a290000370000200041df006a200041ff006a2d00003a00" + "00200020002f01603b01402000200028006336004320002000290067370047200041406b412041001009410141d880" + "c0004108103b2001410036020020064200370300200042003703604181802020024114100a411441ba8ac000410d10" + "3b20014100360200200642003703002000420037036041014181802020024114100b411441c78ac0004108103b0240" + "4100200041e4006a22046b410371220320046a220120044d0d0020030440200321060340200441003a000020044101" + "6a2104200641016b22060d000b0b200341016b4107490d000340200441003a0000200441076a41003a000020044106" + "6a41003a0000200441056a41003a0000200441046a41003a0000200441036a41003a0000200441026a41003a000020" + "0441016a41003a0000200441086a22042001470d000b0b2001413c20036b2203417c716a220420014b044003402001" + "4100360200200141046a22012004490d000b0b024020042003410371220320046a22064f0d00200322010440034020" + "0441003a0000200441016a2104200141016b22010d000b0b200341016b4107490d000340200441003a000020044107" + "6a41003a0000200441066a41003a0000200441056a41003a0000200441046a41003a0000200441036a41003a000020" + "0441026a41003a0000200441016a41003a0000200441086a22042006470d000b0b200041043602a001200041818020" + "360260200041f8016a2203410036020020074200370300200042003703e80120024104200041e8016a22014114100c" + "411441cf8ac0004108103b2003410036020020074200370300200042003703e801200220002802a00120014114100d" + "411441d78ac000410d103b2003410036020020074200370300200042003703e8014101200220002802a00120014114" + "100e411441e48ac0004108103b4189803c100f412041e080c000410a103b4189803c1010412041ea80c000410f103b" + "41014189803c1011412041f980c000410a103b200220002802a00110124120418381c0004110103b200220002802a0" + "0110134120419381c0004115103b4101200220002802a0011014412041a881c0004110103b200541141015411441b8" + "81c0004108103b20004180026a220642003703002003420037030020074200370300200042003703e8012002200028" + "02a001200141201016412041ec8ac000410b103b41c081c000410c41cc81c000410b41d781c000410e1017410141e5" + "81c0004109103b200041c0016a200a290300370300200041b8016a2009290300370300200041b0016a200829030037" + "0300200020002903083703a801200341003b010020074200370300200042003703e80120054114200041a8016a2204" + "4120200141121018411241f78ac0004107103b2003410036020020074200370300200042003703e801200441202001" + "41141019411441fe8ac000410a103b200041003602e8012004412020014104101a410441888bc0004109103b200441" + "20101b410841ee81c0004109103b20044120101c410a41f781c000410c103b200041003602e8012004412020014104" + "101d410441918bc000410a103b418382c000410d20054114101e4100419082c000410a103b418382c000410d419a82" + "c0004108101f410041a282c0004109103b418382c000410d41ab82c0004108101f410041b382c000410e103b417f41" + "041004417141c182c0004118103b200041003602e8012001417f10044171419b8bc0004118103b200041ea016a4100" + "3a0000200041003b01e801200141031004417d41b38bc000411e103b200041003602e8012001418094ebdc03100441" + "7341d18bc000411d103b4102100f416f41d982c0004119103b417f20002802a0011012417141f282c0004118103b20" + "02417f10124171418a83c0004118103b20024181081012417441a283c0004119103b200041e094ebdc036a22082000" + "2802a0011012417341bb83c0004118103b200642003703002003420037030020074200370300200042003703e80120" + "05411420084108200141201020417341ee8bc0004114103b2006420037030020034200370300200742003703002000" + "42003703e8012005411420054114200141201020417141828cc0004116103b20064200370300200342003703002007" + "4200370300200042003703e801200841082001412041001021417341988cc0004117103b2006420037030020034200" + "37030020074200370300200042003703e801200220002802a0012001412041001021417141af8cc0004120103b2008" + "20002802a00141011009417341d383c0004110103b200220002802a00141011009417141e383c0004112103b200642" + "003703002003420037030020074200370300200042003703e801200820002802a001200141201008417341cf8cc000" + "4116103b200642003703002003420037030020074200370300200042003703e801200220002802a001200141201008" + "417141e58cc0004118103b200642003703002003420037030020074200370300200042003703e80120054114200541" + "14200820002802a001200141201022417341fd8cc000411d103b200642003703002003420037030020074200370300" + "200042003703e8012005411420054114200220002802a0012001412010224171419a8dc000411f103b200642003703" + "002003420037030020074200370300200042003703e80141bb9bc0004114200820002802a001200141201023417341" + "b98dc0004115103b200642003703002003420037030020074200370300200042003703e80141bb9bc0004114200220" + "002802a001200141201023417141ce8dc000411b103b20064200370300200342003703002007420037030020004200" + "3703e80141bb9bc000411441f583c0004114200141201023417141e98dc0004125103b200642003703002003420037" + "030020074200370300200042003703e801418984c000412841bb9bc00041142001412010234171418e8ec000412110" + "3b200041dc016a2000413c6a280100360200200041d4016a200041346a2901003702002000200029012c3702cc0120" + "0041808080083602c801200041003b01e801200041c8016a2209411841bb9bc0004114200141021023417141af8ec0" + "00410a103b200820002802a001422a1001417341b184c0004111103b200041003b01e8014102200141021007416f41" + "b98ec0004117103b200041003b01e801410220014102100a416f41d08ec000411c103b200041003b01e80141014102" + "20014102100b416f41ec8ec0004117103b4102100f416f41d982c0004119103b41021010416f41c284c000411e103b" + "410141021011416f41e084c0004119103b41b980c0004181081006417441f984c000411f103b41b980c00041c10010" + "064174419885c000411a103b200041003b01e801200241810820014102100c417441838fc0004116103b200041003b" + "01e801200241810820014102100d417441998fc000411b103b200041003b01e8014101200241810820014102100e41" + "7441b48fc0004116103b20024181081012417441b285c000411e103b20024181081013417441d085c0004123103b41" + "0120024181081014417441f385c000411e103b200241812010154174419186c0004116103b418382c00041810841cc" + "81c000410b41d781c000410e1017417441e581c0004109103b418382c000410d41cc81c00041810841d781c000410e" + "1017417441e581c0004109103b418382c000410d41cc81c000410b41d781c0004181081017417441e581c000410910" + "3b200041003b01e8012002418108200141021016417441ca8fc0004119103b200041003b01e80141bb9bc000418108" + "41bb9bc0004114200141021023417441e38fc0004114103b200041003b01e801200541142005411420024181082001" + "41021024417441f78fc000411b103b200041003b01e8012009418108200541142001410210254174419290c000411e" + "103b418382c000410d200820002802a00141001000417341a786c000410f103b200042d487b6f4c7d4b1c0003700e0" + "01418382c000410d200041e095ebdc036a220441081026417341b686c0004116103b418382c000410d200820002802" + "a001101f417341cc86c0004113103b20044108200041e0016a220841081027417341df86c0004114103b2008410820" + "0441081027417341f386c0004114103b200041003b01e80120044108200841082001410241001028417341b090c000" + "4114103b200041003b01e80120084108200441082001410241001028417341c490c0004114103b200041003b01e801" + "20044108200841082001410241001029417341d890c0004114103b200041003b01e801200841082004410820014102" + "41001029417341ec90c0004114103b200041003b01e8012004410820084108200141024100102a4173418091c00041" + "15103b200041003b01e8012008410820044108200141024100102a4173419591c0004115103b200041003b01e80120" + "04410820084108200141024100102b417341aa91c0004114103b200041003b01e80120084108200441082001410241" + "00102b417341be91c0004114103b200041003b01e801200441084103200141024100102c417341d291c0004114103b" + "200041003b01e801200441084103200141024100102d417341e691c0004113103b2006420037030020034200370300" + "20074200370300200042003703e801200541142005411420014120102e417141f991c000411b103b20064200370300" + "2003420037030020074200370300200042003703e801200541142005411420014120102f4171419492c0004121103b" + "200642003703002003420037030020074200370300200042003703e8012005411420054114200141201030417141b5" + "92c000411e103b200642003703002003420037030020074200370300200042003703e8012005411420054114200141" + "201031417141d392c000411a103b200642003703002003420037030020074200370300200042003703e80120054114" + "20054114200141201032417141ed92c000411b103b2006420037030020034200370300200742003703002000420037" + "03e8012005411420054114200541142001412010334171418893c000411c103b200642003703002003420037030020" + "074200370300200042003703e8012005411420054114200141201034417141a493c0004128103b2006420037030020" + "03420037030020074200370300200042003703e8012005411420054114200141201035417141cc93c000411b103b20" + "0642003703002003420037030020074200370300200042003703e8012005411420054114200141201036417141e793" + "c000411a103b200220002802a001410010094171418787c000411b103b200041003b01e80120054114200220002802" + "a0012001410210184171418194c000411a103b200041003b01e801200220002802a0012001410210194171419b94c0" + "00411d103b200041003b01e801200220002802a00120014102101a417141b894c000411c103b200220002802a00110" + "1b417141a287c000411c103b200220002802a001101c417141be87c000411f103b200041003602e801200220002802" + "a00120014104101d417141d494c000411d103b200041003b01e801200220002802a001200141021008417141f194c0" + "004124103b200041808080083602e801200041003b018e02200220002802a001200141042000418e026a2203410210" + "204171419595c000411e103b200041003b018e02200220002802a00122062005411420022006200341021024417141" + "b395c0004124103b200041003b018e0220054114200220002802a001220620022006200341021024417141d795c000" + "4124103b200041003b018e02200220002802a00120054114200341021037417141fb95c0004122103b200041003b01" + "8e0220054114200220002802a0012003410210374171419d96c0004122103b200041003b018e02200220002802a001" + "20054114200341021038417141bf96c0004129103b200041003b018e0220054114200220002802a001200341021038" + "417141e896c0004129103b200041003b018e02200220002802a0012003410210394171419197c000411c103b200041" + "003b018e02200220002802a0012001410420034102102e417141ad97c000411f103b200041003b018e022002200028" + "02a0012005411441f583c0004114200341021022417141cc97c0004123103b200041003b018e022005411420022000" + "2802a00141f583c0004114200341021022417141ef97c0004123103b200041003b018e02200220002802a001200141" + "0420034102102f4171419298c0004125103b200041003b018e0220094118200220002802a001200341021025417141" + "b798c0004120103b200041003b018e02200220002802a00120014104200341021030417141d798c0004122103b2000" + "41003b018e02200220002802a00120014104200341021031417141f998c000411e103b200041003b018e0220022000" + "2802a001200141042003410210324171419799c000411f103b200041003b018e02200220002802a001200541142001" + "4104200341021033417141b699c0004121103b200041003b018e0220054114200220002802a0012001410420034102" + "1033417141d799c0004121103b200041003b018e02200220002802a00120014104200341021034417141f899c00041" + "2c103b200041003b018e02200220002802a00120034102103a417141a49ac0004120103b200041003b018e02200220" + "002802a00120014104200341021035417141c49ac000411f103b200041003b018e02200220002802a0012001410420" + "0341021036417141e39ac000411e103b200041003b018e02200220002802a00141dd87c00041202003410210184171" + "41819bc000411d103b418382c000410d200220002802a001101e417141fd87c0004120103b418396abdd03410d41dd" + "87c0004120410010004173419d88c0004110103b418396abdd03410d200841081026417341ad88c0004117103b4183" + "96abdd03410d20054114101e417341c488c0004115103b418396abdd03410d41ab82c0004108101f417341d988c000" + "4114103b200220002802a001200241810841001000417441ed88c000410e103b200241810842011001417441fb88c0" + "004112103b418382c0004181082008410810264174418d89c0004115103b418382c00041810820054114101e417441" + "a289c0004113103b418382c00041810841ab82c0004108101f417441b589c0004112103b418382c000410d20022000" + "2802a001101f417141c789c0004116103b200041003b018e02200220002802a001200541142003410210254171419e" + "9bc000411d103b418382c000410d200220002802a00141021000417141dd89c0004114103b4101410020054114101e" + "410041f189c0004117103b20004190026a240041010f0b0b418080c000410b417f20032003417f4e1bac1001000b0b" + "a61b0200418080c0000b89046572726f725f636f64653d54455354204641494c45442424242424205354415254494e" + "47205741534d20455845435554494f4e202424242424746573745f616d656e646d656e74616d656e646d656e745f65" + "6e61626c656463616368655f6c6574785f6172725f6c656e686f6d655f6c655f6172725f6c656e6c655f6172725f6c" + "656e74785f696e6e65725f6172725f6c656e686f6d655f6c655f696e6e65725f6172725f6c656e6c655f696e6e6572" + "5f6172725f6c656e7365745f6461746174657374206d65737361676574657374207075626b65797465737420736967" + "6e6174757265636865636b5f7369676e66745f666c6167736e66745f786665725f66656574657374696e6720747261" + "636574726163655f61636374400000000000005f74726163655f616d74400000000000000074726163655f616d745f" + "7a65726f706172656e745f6c6467725f686173685f6e65675f70747274785f6172725f6c656e5f696e76616c69645f" + "736669656c6474785f696e6e65725f6172725f6c656e5f6e65675f70747274785f696e6e65725f6172725f6c656e5f" + "6e65675f6c656e74785f696e6e65725f6172725f6c656e5f746f6f5f6c6f6e6774785f696e6e65725f6172725f6c65" + "6e5f7074725f6f6f6263616368655f6c655f7074725f6f6f6263616368655f6c655f77726f6e675f6c656e55534430" + "303030303030303030303030303030300041b184c0000b8a1774726163655f6e756d5f6f6f625f737472686f6d655f" + "6c655f6172725f6c656e5f696e76616c69645f736669656c646c655f6172725f6c656e5f696e76616c69645f736669" + "656c64616d656e646d656e745f656e61626c65645f746f6f5f6269675f736c696365616d656e646d656e745f656e61" + "626c65645f746f6f5f6c6f6e6774785f696e6e65725f6172725f6c656e5f746f6f5f6269675f736c696365686f6d65" + "5f6c655f696e6e65725f6172725f6c656e5f746f6f5f6269675f736c6963656c655f696e6e65725f6172725f6c656e" + "5f746f6f5f6269675f736c6963657365745f646174615f746f6f5f6269675f736c69636574726163655f6f6f625f73" + "6c69636574726163655f78666c6f61745f6f6f625f736c69636574726163655f616d745f6f6f625f736c696365666c" + "6f61745f636d705f6f6f625f736c69636531666c6f61745f636d705f6f6f625f736c6963653263616368655f6c655f" + "77726f6e675f73697a655f75696e743235366e66745f666c6167735f77726f6e675f73697a655f75696e743235366e" + "66745f786665725f6665655f77726f6e675f73697a655f75696e743235363030303030303030303030303030303030" + "30303030303030303030303030303174726163655f616363745f77726f6e675f73697a655f6163636f756e745f6964" + "74726163655f6f6f625f737472696e6774726163655f78666c6f61745f6f6f625f737472696e6774726163655f6163" + "63745f6f6f625f737472696e6774726163655f616d745f6f6f625f737472696e6774726163655f746f6f5f6c6f6e67" + "74726163655f6e756d5f746f6f5f6c6f6e6774726163655f78666c6f61745f746f6f5f6c6f6e6774726163655f6163" + "63745f746f6f5f6c6f6e6774726163655f616d745f746f6f5f6c6f6e6774726163655f616d745f77726f6e675f6c65" + "6e67746874726163655f696e76616c69645f61735f68657874726163655f616363745f636865636b5f646573796e63" + "6c6467725f696e646578706172656e745f6c6467725f74696d65706172656e745f6c6467725f68617368626173655f" + "666565686f6d655f6c655f6669656c646c655f6669656c6474785f696e6e6572686f6d655f6c655f696e6e65726c65" + "5f696e6e65727368613531325f68616c666e66745f7572696e66745f6973737565726e66745f7461786f6e6e66745f" + "73657269616c706172656e745f6c6467725f686173685f6e65675f6c656e706172656e745f6c6467725f686173685f" + "6275665f746f6f5f736d616c6c706172656e745f6c6467725f686173685f6c656e5f746f6f5f6c6f6e67636865636b" + "5f69645f6f6f625f6c656e5f753332636865636b5f69645f77726f6e675f6c656e5f753332666c6f61745f66726f6d" + "5f75696e745f6c656e5f6f6f62666c6f61745f66726f6d5f75696e745f77726f6e675f6c656e5f75696e7436346163" + "636f756e74726f6f745f69645f6c656e5f6f6f626163636f756e74726f6f745f69645f77726f6e675f6c656e747275" + "73746c696e655f69645f6c656e5f6f6f625f63757272656e637974727573746c696e655f69645f77726f6e675f6c65" + "6e5f63757272656e6379616d6d5f69645f6c656e5f6f6f625f617373657432616d6d5f69645f6c656e5f77726f6e67" + "5f6c656e5f617373657432616d6d5f69645f6c656e5f77726f6e675f6e6f6e5f7872705f63757272656e63795f6c65" + "6e616d6d5f69645f6c656e5f77726f6e675f7872705f63757272656e63795f6c656e616d6d5f69645f6d707474785f" + "6669656c645f696e76616c69645f736669656c64686f6d655f6c655f6669656c645f696e76616c69645f736669656c" + "646c655f6669656c645f696e76616c69645f736669656c6474785f696e6e65725f746f6f5f6269675f736c69636568" + "6f6d655f6c655f696e6e65725f746f6f5f6269675f736c6963656c655f696e6e65725f746f6f5f6269675f736c6963" + "657368613531325f68616c665f746f6f5f6269675f736c696365616d6d5f69645f746f6f5f6269675f736c69636563" + "726564656e7469616c5f69645f746f6f5f6269675f736c6963656d70746f6b656e5f69645f746f6f5f6269675f736c" + "6963655f6d70746964666c6f61745f6164645f6f6f625f736c69636531666c6f61745f6164645f6f6f625f736c6963" + "6532666c6f61745f7375625f6f6f625f736c69636531666c6f61745f7375625f6f6f625f736c69636532666c6f6174" + "5f6d756c745f6f6f625f736c69636531666c6f61745f6d756c745f6f6f625f736c69636532666c6f61745f6469765f" + "6f6f625f736c69636531666c6f61745f6469765f6f6f625f736c69636532666c6f61745f726f6f745f6f6f625f736c" + "696365666c6f61745f706f775f6f6f625f736c696365657363726f775f69645f77726f6e675f73697a655f75696e74" + "33326d70745f69737375616e63655f69645f77726f6e675f73697a655f75696e7433326e66745f6f666665725f6964" + "5f77726f6e675f73697a655f75696e7433326f666665725f69645f77726f6e675f73697a655f75696e7433326f7261" + "636c655f69645f77726f6e675f73697a655f75696e7433327061796368616e5f69645f77726f6e675f73697a655f75" + "696e7433327065726d697373696f6e65645f646f6d61696e5f69645f77726f6e675f73697a655f75696e7433327469" + "636b65745f69645f77726f6e675f73697a655f75696e7433327661756c745f69645f77726f6e675f73697a655f7569" + "6e7433326e66745f7572695f77726f6e675f73697a655f75696e743235366e66745f6973737565725f77726f6e675f" + "73697a655f75696e743235366e66745f7461786f6e5f77726f6e675f73697a655f75696e743235366e66745f736572" + "69616c5f77726f6e675f73697a655f75696e743235366163636f756e74726f6f745f69645f77726f6e675f73697a65" + "5f6163636f756e745f6964636865636b5f69645f77726f6e675f73697a655f6163636f756e745f696463726564656e" + "7469616c5f69645f77726f6e675f73697a655f6163636f756e745f69643163726564656e7469616c5f69645f77726f" + "6e675f73697a655f6163636f756e745f69643264656c65676174655f69645f77726f6e675f73697a655f6163636f75" + "6e745f69643164656c65676174655f69645f77726f6e675f73697a655f6163636f756e745f6964326465706f736974" + "5f707265617574685f69645f77726f6e675f73697a655f6163636f756e745f6964316465706f7369745f7072656175" + "74685f69645f77726f6e675f73697a655f6163636f756e745f6964326469645f69645f77726f6e675f73697a655f61" + "63636f756e745f6964657363726f775f69645f77726f6e675f73697a655f6163636f756e745f696474727573746c69" + "6e655f69645f77726f6e675f73697a655f6163636f756e745f69643174727573746c696e655f69645f77726f6e675f" + "73697a655f6163636f756e745f6964326d70745f69737375616e63655f69645f77726f6e675f73697a655f6163636f" + "756e745f69646d70746f6b656e5f69645f77726f6e675f73697a655f6163636f756e745f69646e66745f6f66666572" + "5f69645f77726f6e675f73697a655f6163636f756e745f69646f666665725f69645f77726f6e675f73697a655f6163" + "636f756e745f69646f7261636c655f69645f77726f6e675f73697a655f6163636f756e745f69647061796368616e5f" + "69645f77726f6e675f73697a655f6163636f756e745f6964317061796368616e5f69645f77726f6e675f73697a655f" + "6163636f756e745f6964327065726d697373696f6e65645f646f6d61696e5f69645f77726f6e675f73697a655f6163" + "636f756e745f69647369676e6572735f69645f77726f6e675f73697a655f6163636f756e745f69647469636b65745f" + "69645f77726f6e675f73697a655f6163636f756e745f69647661756c745f69645f77726f6e675f73697a655f616363" + "6f756e745f69646e66745f7572695f77726f6e675f73697a655f6163636f756e745f69646d70746f6b656e5f69645f" + "6d707469645f77726f6e675f6c656e677468004d0970726f64756365727302086c616e677561676501045275737400" + "0c70726f6365737365642d6279010572757374631d312e38372e30202831373036376539616320323032352d30352d" + "303929002c0f7461726765745f6665617475726573022b0f6d757461626c652d676c6f62616c732b087369676e2d65" + "7874"; extern std::string const kBadAlignWasmHex = - "0061736d01000000011b046000017f60057f7f7f7f7f017f60067f7f7f7f7f7f017f600000022a0203656e760f666c" - "6f61745f66726f6d5f75696e74000103656e760c636865636b5f6b65796c6574000203050403000000050301000306" - "470b7f004180080b7f00418088020b7f004180080b7f00418088040b7f00418088040b7f00418088080b7f00418008" - "0b7f00418088080b7f004180800c0b7f0041000b7f0041010b07cc0110066d656d6f72790200115f5f7761736d5f63" - "616c6c5f63746f72730002057465737431000307655f64617461310300057465737432000407655f64617461320301" - "047465737400050c5f5f64736f5f68616e646c6503020a5f5f646174615f656e6403030b5f5f737461636b5f6c6f77" - "03040c5f5f737461636b5f6869676803050d5f5f676c6f62616c5f6261736503060b5f5f686561705f626173650307" - "0a5f5f686561705f656e6403080d5f5f6d656d6f72795f6261736503090c5f5f7461626c655f62617365030a0a9902" + "0061736d01000000011b046000017f60057f7f7f7f7f017f60067f7f7f7f7f7f017f60000002260203656e760f666c" + "6f61745f66726f6d5f75696e74000103656e7608636865636b5f6964000203050403000000050301000306470b7f00" + "4180080b7f00418088020b7f004180080b7f00418088040b7f00418088040b7f00418088080b7f004180080b7f0041" + "8088080b7f004180800c0b7f0041000b7f0041010b07cc0110066d656d6f72790200115f5f7761736d5f63616c6c" + "5f63746f72730002057465737431000307655f64617461310300057465737432000407655f64617461320301047465" + "737400050c5f5f64736f5f68616e646c6503020a5f5f646174615f656e6403030b5f5f737461636b5f6c6f770304" + "0c5f5f737461636b5f6869676803050d5f5f676c6f62616c5f6261736503060b5f5f686561705f6261736503070a" + "5f5f686561705f656e6403080d5f5f6d656d6f72795f6261736503090c5f5f7461626c655f62617365030a0a9902" "0402000b2801017f418108427f370000418108410841a308410c41001000220041a40828020020004100481b0b5f01" "017f419a88024191a4cca00136010041928802428994ace0d0c1c38710370100418a88024281848ca0d0c0c1830837" "010041818802417f360000418a8802411441818802410441a3880241201001220041a4880228020020004100481b0b" diff --git a/src/test/app/wasm_fixtures/ledgerSqn.c b/src/test/app/wasm_fixtures/ledgerSqn.c index e4d57b8593..1366dee618 100644 --- a/src/test/app/wasm_fixtures/ledgerSqn.c +++ b/src/test/app/wasm_fixtures/ledgerSqn.c @@ -1,11 +1,11 @@ #include -int32_t get_ledger_sqn(uint8_t *, int32_t); +int32_t ldgr_index(uint8_t *, int32_t); int finish() { uint32_t sqn; - int32_t result = get_ledger_sqn((uint8_t *)&sqn, sizeof(sqn)); + int32_t result = ldgr_index((uint8_t *)&sqn, sizeof(sqn)); if (result < 0) return result; From 9767d86de449e9b9517cb7b089360f0c9732b3f1 Mon Sep 17 00:00:00 2001 From: Olek <115580134+oleks-rip@users.noreply.github.com> Date: Wed, 17 Jun 2026 12:45:01 -0400 Subject: [PATCH 129/137] Memory transfer limit (#7000) Count bytes copied across the boundaries (Wasm VM <-> Hostfunctions) and return error if limit reached (1 mb default) --- include/xrpl/protocol/Protocol.h | 3 + include/xrpl/tx/wasm/WasmCommon.h | 6 + include/xrpl/tx/wasm/WasmiVM.h | 7 ++ src/libxrpl/tx/wasm/HostFuncWrapper.cpp | 63 ++++++++++- src/libxrpl/tx/wasm/WasmiVM.cpp | 38 +++++++ src/test/app/HostFuncImpl_test.cpp | 140 ++++++++++++++++++++++++ 6 files changed, 255 insertions(+), 2 deletions(-) diff --git a/include/xrpl/protocol/Protocol.h b/include/xrpl/protocol/Protocol.h index 2e12c7fa55..e431f4459a 100644 --- a/include/xrpl/protocol/Protocol.h +++ b/include/xrpl/protocol/Protocol.h @@ -254,6 +254,9 @@ constexpr std::uint8_t kMaxAssetCheckDepth = 5; /** Maximum length of a Data field in Escrow object that can be updated by WASM code. */ constexpr std::size_t kMaxWasmDataLength = 1 * 1024; // 1KB +/** Maximum amount of data transfer across hostfunction<->wasm border. */ +constexpr std::size_t kWasmTransferLimit = 1 << 20; // 1MB + /** A ledger index. */ using LedgerIndex = std::uint32_t; diff --git a/include/xrpl/tx/wasm/WasmCommon.h b/include/xrpl/tx/wasm/WasmCommon.h index ed03a4aaf4..9dc130f667 100644 --- a/include/xrpl/tx/wasm/WasmCommon.h +++ b/include/xrpl/tx/wasm/WasmCommon.h @@ -124,6 +124,12 @@ public: virtual std::int64_t setGas(std::int64_t gas) = 0; + + virtual std::int64_t + getTransferLimit() = 0; + + virtual std::int64_t + setTransferLimit(std::int64_t transferLimit) = 0; }; using RTOptRef = std::optional>; diff --git a/include/xrpl/tx/wasm/WasmiVM.h b/include/xrpl/tx/wasm/WasmiVM.h index d31c096b15..9616011af1 100644 --- a/include/xrpl/tx/wasm/WasmiVM.h +++ b/include/xrpl/tx/wasm/WasmiVM.h @@ -147,6 +147,7 @@ class InstanceWrapper mutable int memIdx_ = -1; InstancePtr instance_; beast::Journal j_ = beast::Journal(beast::Journal::getNullSink()); + std::int64_t transferLimit_ = kWasmTransferLimit; private: static InstancePtr @@ -194,6 +195,12 @@ public: std::int64_t setGas(std::int64_t) const; + + std::int64_t + getTransferLimit() const; + + std::int64_t + setTransferLimit(std::int64_t); }; class ModuleWrapper diff --git a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp index 9939407034..17e84391ab 100644 --- a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp +++ b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp @@ -41,6 +41,8 @@ namespace xrpl { using SFieldCRef = std::reference_wrapper; +constexpr int64_t unalignedGas = 50; + static inline Expected checkGas(WasmRuntimeWrapper& rt, int64_t delta) { @@ -81,6 +83,21 @@ checkGas(WasmRuntimeWrapper& rt, WasmImportFunc const& impFunc) return *g; } +static inline Expected +checkTransfer(WasmRuntimeWrapper& rt, int64_t delta) +{ + auto const transLimit = rt.getTransferLimit(); + int64_t const x = transLimit >= delta ? transLimit - delta : 0; + + if (rt.setTransferLimit(x) < 0) + return Unexpected(HostFunctionError::Internal); // LCOV_EXCL_LINE + + if (transLimit < delta) + return Unexpected(HostFunctionError::OutOfTransferLimit); + + return x; +} + static Expected, wasm_trap_t*> mainCheck(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { @@ -146,6 +163,9 @@ setData( if (srcSize > dstSize) return hfErrorToInt(HostFunctionError::BufferTooSmall); + if (auto t = checkTransfer(runtime, srcSize); !t) + return hfErrorToInt(t.error()); + memcpy(memory.p + dst, src, srcSize); return srcSize; @@ -255,6 +275,9 @@ getDataUInt256(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_ if (slice->size() != uint256::size()) return Unexpected(HostFunctionError::InvalidParams); + if (auto t = checkTransfer(runtime, uint256::size()); !t) + return Unexpected(t.error()); + return uint256::fromVoid(slice->data()); } @@ -268,6 +291,9 @@ getDataAccountID(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int3 if (slice->size() != AccountID::size()) return Unexpected(HostFunctionError::InvalidParams); + if (auto t = checkTransfer(runtime, AccountID::size()); !t) + return Unexpected(t.error()); + return AccountID::fromVoid(slice->data()); } @@ -281,6 +307,9 @@ getDataCurrency(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32 if (slice->size() != Currency::size()) return Unexpected(HostFunctionError::InvalidParams); + if (auto t = checkTransfer(runtime, Currency::size()); !t) + return Unexpected(t.error()); + return Currency::fromVoid(slice->data()); } @@ -293,12 +322,18 @@ getDataAsset(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& if (slice->size() == MPTID::size()) { + if (auto t = checkTransfer(runtime, slice->size()); !t) + return Unexpected(t.error()); + auto const mptid = MPTID::fromVoid(slice->data()); return Asset{mptid}; } if (slice->size() == Currency::size()) { + if (auto t = checkTransfer(runtime, slice->size()); !t) + return Unexpected(t.error()); + auto const currency = Currency::fromVoid(slice->data()); auto const issue = Issue{currency, xrpAccount()}; if (!issue.native()) @@ -309,6 +344,9 @@ getDataAsset(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& if (slice->size() == (Currency::size() + AccountID::size())) { + if (auto t = checkTransfer(runtime, slice->size()); !t) + return Unexpected(t.error()); + auto const issue = Issue( Currency::fromVoid(slice->data()), AccountID::fromVoid(slice->data() + Currency::size())); @@ -349,6 +387,12 @@ getDataLocator(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_ if ((p & (alignof(int32_t) - 1)) != 0u) { // unaligned + // Use gas and transfer limit for copying + if (auto g = checkGas(runtime, unalignedGas); !g) + return Unexpected(g.error()); + if (auto t = checkTransfer(runtime, slice->size()); !t) + return Unexpected(t.error()); + std::vector locBuf(locSize); memcpy(&locBuf[0], slice->data(), slice->size()); FieldLocator locator(std::move(locBuf)); @@ -481,6 +525,7 @@ returnResult( } //---------------------------------------------------------------------------------------------------------------------- + wasm_trap_t* HostFuncMain_wrap(WASM_CB_PARAMS_LIST) { @@ -490,9 +535,9 @@ HostFuncMain_wrap(WASM_CB_PARAMS_LIST) { auto const mc = mainCheck(env, params, results); if (!mc) - return mc.error(); // LCOV_EXCL_LINE - auto& [hf, impFunc] = *mc; + return mc.error(); + auto& [hf, impFunc] = *mc; hfName = impFunc.name; auto* fWrap = reinterpret_cast(impFunc.wrap); return fWrap(hf, params, results); @@ -1677,6 +1722,7 @@ class MockWasmRuntimeWrapper : public WasmRuntimeWrapper Wmem mem_; std::int64_t gas_ = 1'000'000; + std::int64_t transferLimit_ = kWasmTransferLimit; public: MockWasmRuntimeWrapper(Wmem memory) : mem_(memory) @@ -1702,6 +1748,19 @@ public: gas_ = gas; return gas_; } + + std::int64_t + getTransferLimit() override + { + return transferLimit_; + } + + std::int64_t + setTransferLimit(std::int64_t x) override + { + transferLimit_ = x; + return transferLimit_; + } }; bool diff --git a/src/libxrpl/tx/wasm/WasmiVM.cpp b/src/libxrpl/tx/wasm/WasmiVM.cpp index 018b97e22b..91f4770459 100644 --- a/src/libxrpl/tx/wasm/WasmiVM.cpp +++ b/src/libxrpl/tx/wasm/WasmiVM.cpp @@ -106,6 +106,18 @@ public: { return iw_.setGas(gas); } + + std::int64_t + getTransferLimit() override + { + return iw_.getTransferLimit(); + } + + std::int64_t + setTransferLimit(std::int64_t x) override + { + return iw_.setTransferLimit(x); + } }; InstancePtr @@ -247,6 +259,32 @@ InstanceWrapper::setGas(std::int64_t gas) const return gas; } +std::int64_t +InstanceWrapper::getTransferLimit() const +{ + if (store_ == nullptr) + return -1; // LCOV_EXCL_LINE + + return transferLimit_; +} + +std::int64_t +InstanceWrapper::setTransferLimit(std::int64_t x) +{ + if (store_ == nullptr) + return -1; // LCOV_EXCL_LINE + if (x < 0) + { + transferLimit_ = std::numeric_limits::max(); + } + else + { + transferLimit_ = x; + } + + return transferLimit_; +} + ////////////////////////////////////////////////////////////////////////////////////////////////////////////// ModulePtr diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 700c706198..377a7c652a 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -166,8 +166,11 @@ class VirtualRuntime : public WasmRuntimeWrapper { Bytes buffer_; std::int64_t gas_ = 1'000'000; + std::int64_t transferLimit_ = kWasmTransferLimit; public: + static constexpr std::int64_t transferDiff = 1024; + VirtualRuntime() : buffer_(1024 * 1024) { } @@ -203,6 +206,37 @@ public: return gas_; } + std::int64_t + getTransferLimit() override + { + transferLimit_ -= transferDiff; + return transferLimit_; + } + + [[nodiscard]] std::int64_t + getTestTransferLimit() const + { + return transferLimit_; + } + + std::int64_t + setTransferLimit(std::int64_t x) override + { + if (x == -2) + return -1; + + if (x < 0) + { + transferLimit_ = std::numeric_limits::max(); + } + else + { + transferLimit_ = x; + } + + return transferLimit_; + } + void checkIdx(WasmValVec const& params, size_t i) const { @@ -6061,6 +6095,110 @@ struct HostFuncImpl_test : public beast::unit_test::Suite BEAST_EXPECT(ex); } + void + testTransferLimit() + { + testcase("transferLimit"); + using namespace test::jtx; + + Env env{*this}; + OpenView ov{*env.current()}; + ApplyContext ac = createApplyContext(env, ov); + auto const dummyEscrow = keylet::escrow(env.master, env.seq(env.master)); + VirtualRuntime vrt; + WasmHostFunctionsImpl hfs(ac, dummyEscrow); + + auto import = xrpl::createWasmImport(hfs); + hfs.setRT(vrt); + + // Test 1: Test setData() - copying FROM host TO wasm + // Multiple calls to getLedgerSqn() which uses setData() to write result to WASM memory + vrt.setTransferLimit(kWasmTransferLimit + 1024); + + // hfs.getLedgerSqn(); + for (int i = 0; i < (kWasmTransferLimit / vrt.transferDiff) - 3; ++i) + { + WasmValVec params(2), result(1); + + auto* trap = ww(&import.at("ldgr_index"), params, result, 0, sizeof(std::uint32_t)); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == sizeof(std::uint32_t)) && + BEAST_EXPECT(vrt.getUint32(params, 0) == env.current()->header().seq); + } + + BEAST_EXPECT((vrt.getTestTransferLimit() >= 0) && (vrt.getTestTransferLimit() < 1024)); + + // Next call should hit OutOfTransferLimit + { + WasmValVec params(2), result(1); + auto* trap = ww(&import.at("ldgr_index"), params, result, 0, sizeof(std::uint32_t)); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == hfErrorToInt(HostFunctionError::OutOfTransferLimit)); + } + + // After limit exhausted, all next call return OutOfTransferLimit + { + WasmValVec params(2), result(1); + auto* trap = ww(&import.at("ldgr_index"), params, result, 0, sizeof(std::uint32_t)); + + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == hfErrorToInt(HostFunctionError::OutOfTransferLimit)); + } + + // Reset transfer limit to a small value that can accommodate overhead but not AccountID + // copy + vrt.setTransferLimit(vrt.transferDiff + 10); + + Account const alice("alice"); + auto const aliceID = env.master.id(); + vrt.setBytes(0, aliceID.data(), AccountID::size()); + + // This should fail because getDataAccountID() needs to copy AccountID (20 bytes) + // After getTransferLimit() overhead (1024), we only have 10 bytes left, not enough for 20 + { + WasmValVec params(4), result(1); + auto* trap = + ww(&import.at("accountroot_id"), params, result, 0, AccountID::size(), 100, 32); + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == hfErrorToInt(HostFunctionError::OutOfTransferLimit)); + } + + // Verify that reading slices (without copying) does NOT consume transfer limit + vrt.setTransferLimit(vrt.transferDiff + 10); + + // trace() uses getDataString() -> getDataSlice() which does NOT check transfer limit + std::string testMsg = "This message is longer than 10 bytes to prove slices don't count"; + vrt.setBytes(0, testMsg.data(), testMsg.size()); + vrt.setBytes(100, (uint8_t const*)"dummy", 5); // Empty data slice for trace + { + WasmValVec params(5), result(1); + // trace(msg_ptr, msg_len, data_ptr, data_len, asHex) + auto* trap = ww(&import.at("trace"), params, result, 0, testMsg.size(), 100, 5, 0); + + // Should succeed even though message is >10 bytes, because trace only uses slices + // (no transfer limit check in getDataSlice) + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT(result[0].of.i32 == 0); + } + + // setData should return when transfer limit is exhausted + // After trace consumed overhead (1024 bytes), we have 10 - 1024 = negative limit left + { + WasmValVec params(2), result(1); + auto* trap = ww(&import.at("parent_ldgr_hash"), params, result, 500, 32); + + // the transfer limit went negative + BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && + BEAST_EXPECT( + result[0].of.i32 == hfErrorToInt(HostFunctionError::OutOfTransferLimit)); + } + } + void run() override { @@ -6099,6 +6237,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite testFloats(); testVectorIndexes(); + + testTransferLimit(); } }; From 8022fc33cf12800fcccac0a5b88b9b0dd2e43f24 Mon Sep 17 00:00:00 2001 From: pwang200 <354723+pwang200@users.noreply.github.com> Date: Thu, 2 Jul 2026 13:35:46 -0400 Subject: [PATCH 130/137] host function error path refactor (#7639) --- include/xrpl/protocol/TER.h | 1 + include/xrpl/tx/wasm/HostFunc.h | 132 ++++++++++----------- include/xrpl/tx/wasm/WasmCommon.h | 30 ++++- include/xrpl/tx/wasm/WasmVM.h | 4 +- include/xrpl/tx/wasm/WasmiVM.h | 11 +- src/libxrpl/protocol/TER.cpp | 1 + src/libxrpl/tx/wasm/HostFuncImplGetter.cpp | 7 +- src/libxrpl/tx/wasm/HostFuncWrapper.cpp | 98 ++++++--------- src/libxrpl/tx/wasm/WasmVM.cpp | 11 +- src/libxrpl/tx/wasm/WasmiVM.cpp | 72 +++++++++-- src/test/app/TestHostFunctions.h | 2 +- src/test/app/Wasm_test.cpp | 14 ++- 12 files changed, 225 insertions(+), 158 deletions(-) diff --git a/include/xrpl/protocol/TER.h b/include/xrpl/protocol/TER.h index c9e2b6eabd..60c6b3111d 100644 --- a/include/xrpl/protocol/TER.h +++ b/include/xrpl/protocol/TER.h @@ -360,6 +360,7 @@ enum TECcodes : TERUnderlyingType { tecLIMIT_EXCEEDED = 195, tecPSEUDO_ACCOUNT = 196, tecPRECISION_LOSS = 197, + tecOUT_OF_GAS = 200, }; //------------------------------------------------------------------------------ diff --git a/include/xrpl/tx/wasm/HostFunc.h b/include/xrpl/tx/wasm/HostFunc.h index 914e9b6ed1..d8424239e8 100644 --- a/include/xrpl/tx/wasm/HostFunc.h +++ b/include/xrpl/tx/wasm/HostFunc.h @@ -113,398 +113,398 @@ public: virtual Expected getLedgerSqn() const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected getParentLedgerTime() const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected getParentLedgerHash() const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected getBaseFee() const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected isAmendmentEnabled(uint256 const& amendmentId) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected isAmendmentEnabled(std::string_view const& amendmentName) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected cacheLedgerObj(uint256 const& objId, int32_t cacheIdx) { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected getTxField(SField const& fname) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected getCurrentLedgerObjField(SField const& fname) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected getLedgerObjField(int32_t cacheIdx, SField const& fname) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected getTxNestedField(FieldLocator const& locator) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected getCurrentLedgerObjNestedField(FieldLocator const& locator) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected getLedgerObjNestedField(int32_t cacheIdx, FieldLocator const& locator) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected getTxArrayLen(SField const& fname) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected getCurrentLedgerObjArrayLen(SField const& fname) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected getLedgerObjArrayLen(int32_t cacheIdx, SField const& fname) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected getTxNestedArrayLen(FieldLocator const& locator) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected getCurrentLedgerObjNestedArrayLen(FieldLocator const& locator) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected getLedgerObjNestedArrayLen(int32_t cacheIdx, FieldLocator const& locator) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected updateData(Slice const& data) { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected checkSignature(Slice const& message, Slice const& signature, Slice const& pubkey) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected computeSha512HalfHash(Slice const& data) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected accountKeylet(AccountID const& account) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected ammKeylet(Asset const& issue1, Asset const& issue2) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected checkKeylet(AccountID const& account, std::uint32_t seq) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected didKeylet(AccountID const& account) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected delegateKeylet(AccountID const& account, AccountID const& authorize) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected depositPreauthKeylet(AccountID const& account, AccountID const& authorize) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected escrowKeylet(AccountID const& account, std::uint32_t seq) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected lineKeylet(AccountID const& account1, AccountID const& account2, Currency const& currency) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected mptIssuanceKeylet(AccountID const& issuer, std::uint32_t seq) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected mptokenKeylet(MPTID const& mptid, AccountID const& holder) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected nftOfferKeylet(AccountID const& account, std::uint32_t seq) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected offerKeylet(AccountID const& account, std::uint32_t seq) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected oracleKeylet(AccountID const& account, std::uint32_t docId) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected paychanKeylet(AccountID const& account, AccountID const& destination, std::uint32_t seq) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected permissionedDomainKeylet(AccountID const& account, std::uint32_t seq) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected signersKeylet(AccountID const& account) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected ticketKeylet(AccountID const& account, std::uint32_t seq) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected vaultKeylet(AccountID const& account, std::uint32_t seq) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected getNFT(AccountID const& account, uint256 const& nftId) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected getNFTIssuer(uint256 const& nftId) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected getNFTTaxon(uint256 const& nftId) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected getNFTFlags(uint256 const& nftId) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected getNFTTransferFee(uint256 const& nftId) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected getNFTSerial(uint256 const& nftId) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected trace(std::string_view const& msg, Slice const& data, bool asHex) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected traceNum(std::string_view const& msg, int64_t data) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected traceAccount(std::string_view const& msg, AccountID const& account) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected traceFloat(std::string_view const& msg, Slice const& data) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected traceAmount(std::string_view const& msg, STAmount const& amount) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected floatFromInt(int64_t x, int32_t mode) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected floatFromUint(uint64_t x, int32_t mode) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected floatFromSTAmount(STAmount const& x, int32_t mode) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected floatFromSTNumber(STNumber const& x, int32_t mode) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected floatToInt(Slice const& x, int32_t mode) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected floatToMantExp(Slice const& x) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected floatFromMantExp(int64_t mantissa, int32_t exponent, int32_t mode) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected floatCompare(Slice const& x, Slice const& y) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected floatAdd(Slice const& x, Slice const& y, int32_t mode) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected floatSubtract(Slice const& x, Slice const& y, int32_t mode) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected floatMultiply(Slice const& x, Slice const& y, int32_t mode) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected floatDivide(Slice const& x, Slice const& y, int32_t mode) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected floatRoot(Slice const& x, int32_t n, int32_t mode) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual Expected floatPower(Slice const& x, int32_t n, int32_t mode) const { - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } virtual ~HostFunctions() = default; diff --git a/include/xrpl/tx/wasm/WasmCommon.h b/include/xrpl/tx/wasm/WasmCommon.h index 9dc130f667..8d3cff09c7 100644 --- a/include/xrpl/tx/wasm/WasmCommon.h +++ b/include/xrpl/tx/wasm/WasmCommon.h @@ -2,10 +2,12 @@ #include #include +#include #include #include #include +#include #include namespace xrpl { @@ -14,8 +16,20 @@ using Bytes = std::vector; using Hash = xrpl::uint256; using FloatPair = std::pair; +// Error signals that cross the wasm boundary as trap messages (the C API has no +// trap code). WasmiEngine::call maps them to TER: hfErrInternal -> tecINTERNAL, +// hfErrOutOfGas / wasmi's OutOfFuel -> tecOUT_OF_GAS, anything else -> +// tecFAILED_PROCESSING. +// +// Matched as substrings, not by equality: the C API returns the Rust Debug form +// of the error, e.g. `Error { kind: Message("HfInternal") }` or +// `Error { kind: TrapCode(OutOfFuel) }`. +std::string_view inline constexpr hfErrInternal = "HfInternal"; +std::string_view inline constexpr hfErrOutOfGas = "HfOutOfGas"; +std::string_view inline constexpr wasmiTrapOutOfFuel = "OutOfFuel"; + enum class HostFunctionError : int32_t { - Internal = -1, + Unimplemented = -1, FieldNotFound = -2, BufferTooSmall = -3, NoArray = -4, @@ -25,7 +39,7 @@ enum class HostFunctionError : int32_t { SlotsFull = -8, EmptySlot = -9, LedgerObjNotFound = -10, - Decoding = -11, + OutOfTransferLimit = -11, DataFieldTooLarge = -12, PointerOutOfBounds = -13, NoMemExported = -14, @@ -35,9 +49,6 @@ enum class HostFunctionError : int32_t { IndexOutOfBounds = -18, FloatInputMalformed = -19, FloatComputationError = -20, - NoRuntime = -21, - OutOfGas = -22, - OutOfTransferLimit = -23, }; enum class WasmTypes { WtI32, WtI64 }; @@ -61,6 +72,15 @@ struct WasmResult }; using EscrowResult = WasmResult; +// Engine error when wasm does not run to completion. `cost` is the gas consumed +// when meaningful (tecOUT_OF_GAS / tecFAILED_PROCESSING; caller writes it to tx +// metadata); std::nullopt for tecINTERNAL and malformed input (no gas reported). +struct WasmTER +{ + TER ter; + std::optional cost; +}; + class FieldLocator { int32_t const* ptr_ = nullptr; diff --git a/include/xrpl/tx/wasm/WasmVM.h b/include/xrpl/tx/wasm/WasmVM.h index ac3d987d1d..48b0438654 100644 --- a/include/xrpl/tx/wasm/WasmVM.h +++ b/include/xrpl/tx/wasm/WasmVM.h @@ -40,7 +40,7 @@ public: static WasmEngine& instance(); - Expected, TER> + Expected, WasmTER> run(Bytes const& wasmCode, HostFunctions& hfs, int64_t gasLimit, @@ -71,7 +71,7 @@ public: ImportVec createWasmImport(HostFunctions& hfs); -Expected +Expected runEscrowWasm( Bytes const& wasmCode, HostFunctions& hfs, diff --git a/include/xrpl/tx/wasm/WasmiVM.h b/include/xrpl/tx/wasm/WasmiVM.h index 9616011af1..45ef703e91 100644 --- a/include/xrpl/tx/wasm/WasmiVM.h +++ b/include/xrpl/tx/wasm/WasmiVM.h @@ -6,6 +6,8 @@ #include #include +#include + namespace xrpl { template @@ -120,7 +122,10 @@ using WasmImporttypeVec = WasmVec< struct WasmiResult { WasmValVec r; - bool f{false}; // failure flag + // Set iff the call trapped. Holds the TER the trap was classified into + // (tecINTERNAL / tecOUT_OF_GAS / tecFAILED_PROCESSING); see + // WasmiEngine::call. std::nullopt means the call returned normally. + std::optional ter; WasmiResult(unsigned n = 0) : r(n) { @@ -304,7 +309,7 @@ public: static EnginePtr init(); - Expected, TER> + Expected, WasmTER> run(Bytes const& wasmCode, HostFunctions& hfs, int64_t gas, @@ -355,7 +360,7 @@ private: return moduleWrap_ ? moduleWrap_->getMem() : Wmem(); } - Expected, TER> + Expected, WasmTER> runHlp( Bytes const& wasmCode, HostFunctions& hfs, diff --git a/src/libxrpl/protocol/TER.cpp b/src/libxrpl/protocol/TER.cpp index 443befe246..38e1ecdfe6 100644 --- a/src/libxrpl/protocol/TER.cpp +++ b/src/libxrpl/protocol/TER.cpp @@ -106,6 +106,7 @@ transResults() MAKE_ERROR(tecLIMIT_EXCEEDED, "Limit exceeded."), MAKE_ERROR(tecPSEUDO_ACCOUNT, "This operation is not allowed against a pseudo-account."), MAKE_ERROR(tecPRECISION_LOSS, "The amounts used by the transaction cannot interact."), + MAKE_ERROR(tecOUT_OF_GAS, "The WASM code ran out of gas during execution."), MAKE_ERROR(tefALREADY, "The exact transaction was already in this ledger."), MAKE_ERROR(tefBAD_ADD_AUTH, "Not authorized to add account."), diff --git a/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp index f86bc5741e..344c1f038a 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -13,6 +14,8 @@ #include #include +#include +#include #include #include @@ -121,7 +124,9 @@ getAnyFieldData(FieldValue const& variantObj) if (uint256 const* const* u = std::get_if(&variantObj)) return Bytes((*u)->begin(), (*u)->end()); - return Unexpected(HostFunctionError::Internal); // LCOV_EXCL_LINE + // Unreachable: the variant only holds the two alternatives above. If not, + // it's an xrpld bug -> tecINTERNAL (thrown, caught by HostFuncMain_wrap). + Throw(std::string(hfErrInternal)); // LCOV_EXCL_LINE } static inline bool diff --git a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp index 17e84391ab..af8bb637d4 100644 --- a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp +++ b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -31,6 +32,8 @@ #include #include #include +#include +#include #include #include #include @@ -43,7 +46,10 @@ using SFieldCRef = std::reference_wrapper; constexpr int64_t unalignedGas = 50; -static inline Expected +// Charge `delta` gas; returns the remaining gas. Out-of-gas throws hfErrOutOfGas +// (-> tecOUT_OF_GAS); a failed setGas is an xrpld bug, throws hfErrInternal +// (-> tecINTERNAL). HostFuncMain_wrap turns both into traps. +static inline std::int64_t checkGas(WasmRuntimeWrapper& rt, int64_t delta) { int64_t const gas = rt.getGas(); @@ -53,36 +59,16 @@ checkGas(WasmRuntimeWrapper& rt, int64_t delta) int64_t const x = gas >= delta ? gas - delta : 0; if (rt.setGas(x) < 0) - return Unexpected(HostFunctionError::Internal); // LCOV_EXCL_LINE + Throw(std::string(hfErrInternal)); // LCOV_EXCL_LINE if (gas < delta) - return Unexpected(HostFunctionError::OutOfGas); + Throw(std::string(hfErrOutOfGas)); return x; } -static inline Expected -checkGas(WasmRuntimeWrapper& rt, WasmImportFunc const& impFunc) -{ - auto g = checkGas(rt, impFunc.gas); - - if (!g) - { - if (g.error() == HostFunctionError::OutOfGas) - { - wasm_trap_t* const trap = // NOLINT - reinterpret_cast(WasmEngine::instance().newTrap("hf out of gas")); - return Unexpected(trap); - } - - wasm_trap_t* trap = reinterpret_cast( // NOLINT - WasmEngine::instance().newTrap("can't set gas")); // LCOV_EXCL_LINE - return Unexpected(trap); // LCOV_EXCL_LINE - } - - return *g; -} - +// Transfer limit is a separate soft budget: exceeding it is a normal guest-facing +// return code, not a trap. Only a failed setTransferLimit (an xrpld bug) throws. static inline Expected checkTransfer(WasmRuntimeWrapper& rt, int64_t delta) { @@ -90,7 +76,7 @@ checkTransfer(WasmRuntimeWrapper& rt, int64_t delta) int64_t const x = transLimit >= delta ? transLimit - delta : 0; if (rt.setTransferLimit(x) < 0) - return Unexpected(HostFunctionError::Internal); // LCOV_EXCL_LINE + Throw(std::string(hfErrInternal)); // LCOV_EXCL_LINE if (transLimit < delta) return Unexpected(HostFunctionError::OutOfTransferLimit); @@ -98,37 +84,27 @@ checkTransfer(WasmRuntimeWrapper& rt, int64_t delta) return x; } -static Expected, wasm_trap_t*> +// On any failure here a C++ exception is thrown; HostFuncMain_wrap's catch-all +// turns it into tecINTERNAL. These conditions are all xrpld-side invariants. +static std::tuple mainCheck(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) { if (env == nullptr) - { - wasm_trap_t* trap = reinterpret_cast( // NOLINT - WasmEngine::instance().newTrap("no environment")); // LCOV_EXCL_LINE - return Unexpected(trap); // LCOV_EXCL_LINE - } + Throw(std::string(hfErrInternal)); // LCOV_EXCL_LINE if (params == nullptr) - { - wasm_trap_t* trap = reinterpret_cast( // NOLINT - WasmEngine::instance().newTrap("no params")); // LCOV_EXCL_LINE - return Unexpected(trap); // LCOV_EXCL_LINE - } + Throw(std::string(hfErrInternal)); // LCOV_EXCL_LINE if (results == nullptr) - { - wasm_trap_t* trap = reinterpret_cast( // NOLINT - WasmEngine::instance().newTrap("no results")); // LCOV_EXCL_LINE - return Unexpected(trap); // LCOV_EXCL_LINE - } + Throw(std::string(hfErrInternal)); // LCOV_EXCL_LINE WasmUserData const* udata = reinterpret_cast(env); HostFunctions& hf = udata->first; WasmRuntimeWrapper& rt = hf.getRT(); WasmImportFunc const& impFunc = udata->second; - if (auto g = checkGas(rt, impFunc); !g) - return Unexpected(g.error()); // LCOV_EXCL_LINE + // Charge the per-call gas. Throws (and terminates) if out of gas. + checkGas(rt, impFunc.gas); return std::tie(hf, impFunc); } @@ -387,9 +363,10 @@ getDataLocator(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_ if ((p & (alignof(int32_t) - 1)) != 0u) { // unaligned - // Use gas and transfer limit for copying - if (auto g = checkGas(runtime, unalignedGas); !g) - return Unexpected(g.error()); + // Use gas and transfer limit for copying. checkGas throws (and + // terminates execution) if out of gas; checkTransfer keeps returning a + // guest-facing code when the transfer limit is exceeded. + checkGas(runtime, unalignedGas); if (auto t = checkTransfer(runtime, slice->size()); !t) return Unexpected(t.error()); @@ -435,7 +412,7 @@ returnResult( if constexpr (std::is_same_v) { if (index < 0 || index + 1 >= params->size) - return hfResult(results, HostFunctionError::Internal); // LCOV_EXCL_LINE + Throw(std::string(hfErrInternal)); // LCOV_EXCL_LINE auto const dataResult = setData( runtime, @@ -448,7 +425,7 @@ returnResult( else if constexpr (std::is_same_v) { if (index < 0 || index + 1 >= params->size) - return hfResult(results, HostFunctionError::Internal); // LCOV_EXCL_LINE + Throw(std::string(hfErrInternal)); // LCOV_EXCL_LINE auto const dataResult = setData( runtime, @@ -465,7 +442,7 @@ returnResult( else if constexpr (std::is_same_v) { if (index < 0 || index + 1 >= params->size) - return hfResult(results, HostFunctionError::Internal); // LCOV_EXCL_LINE + Throw(std::string(hfErrInternal)); // LCOV_EXCL_LINE auto const resultValue = adjustWasmEndianess(res.value()); auto const dataResult = setData( @@ -479,7 +456,7 @@ returnResult( else if constexpr (std::is_same_v) { if (index < 0 || index + 1 >= params->size) - return hfResult(results, HostFunctionError::Internal); // LCOV_EXCL_LINE + Throw(std::string(hfErrInternal)); // LCOV_EXCL_LINE auto const resultValue = adjustWasmEndianess(res.value()); auto const dataResult = setData( @@ -493,7 +470,7 @@ returnResult( else if constexpr (std::is_same_v) { if (index < 0 || index + 3 >= params->size) - return hfResult(results, HostFunctionError::Internal); // LCOV_EXCL_LINE + Throw(std::string(hfErrInternal)); // LCOV_EXCL_LINE auto const mantissa = adjustWasmEndianess(res->first); auto const r1 = setData( @@ -533,11 +510,7 @@ HostFuncMain_wrap(WASM_CB_PARAMS_LIST) try { - auto const mc = mainCheck(env, params, results); - if (!mc) - return mc.error(); - - auto& [hf, impFunc] = *mc; + auto [hf, impFunc] = mainCheck(env, params, results); hfName = impFunc.name; auto* fWrap = reinterpret_cast(impFunc.wrap); return fWrap(hf, params, results); @@ -547,8 +520,11 @@ HostFuncMain_wrap(WASM_CB_PARAMS_LIST) #ifdef DEBUG_OUTPUT std::cerr << "Hostfunction " << hfName << " exception: " << e.what() << std::endl; #endif + // Normalize to the two boundary signals: explicit out-of-gas, else any + // exception (including stray ones from helpers) is an internal fault. + bool const oog = std::string_view(e.what()) == hfErrOutOfGas; wasm_trap_t* trap = reinterpret_cast( // NOLINT - WasmEngine::instance().newTrap(e.what())); // LCOV_EXCL_LINE + WasmEngine::instance().newTrap(std::string(oog ? hfErrOutOfGas : hfErrInternal))); return trap; } catch (...) @@ -556,12 +532,12 @@ HostFuncMain_wrap(WASM_CB_PARAMS_LIST) #ifdef DEBUG_OUTPUT std::cerr << "Hostfunction " << hfName << " unknown exception." << std::endl; #endif - wasm_trap_t* trap = reinterpret_cast( // NOLINT - WasmEngine::instance().newTrap("Unknown exception")); // LCOV_EXCL_LINE + wasm_trap_t* trap = reinterpret_cast( // NOLINT + WasmEngine::instance().newTrap(std::string(hfErrInternal))); // LCOV_EXCL_LINE return trap; } - return nullptr; + return nullptr; // LCOV_EXCL_LINE } //---------------------------------------------------------------------------------------------------------------------- diff --git a/src/libxrpl/tx/wasm/WasmVM.cpp b/src/libxrpl/tx/wasm/WasmVM.cpp index 97b44dba43..0a2dcbde65 100644 --- a/src/libxrpl/tx/wasm/WasmVM.cpp +++ b/src/libxrpl/tx/wasm/WasmVM.cpp @@ -115,7 +115,7 @@ createWasmImport(HostFunctions& hfs) return i; } -Expected +Expected runEscrowWasm( Bytes const& wasmCode, HostFunctions& hfs, @@ -133,9 +133,12 @@ runEscrowWasm( if (!ret) { #ifdef DEBUG_OUTPUT - std::cout << ", error: " << ret.error() << std::endl; + std::cout << ", error: " << ret.error().ter << std::endl; #endif - return Unexpected(ret.error()); + // Carries the TER (tecOUT_OF_GAS / tecFAILED_PROCESSING / tecINTERNAL / + // temBAD_AMOUNT) and, when meaningful, the gas consumed. The caller is + // responsible for writing that gas to tx metadata. + return Unexpected(ret.error()); } #ifdef DEBUG_OUTPUT @@ -174,7 +177,7 @@ WasmEngine::instance() return e; } -Expected, TER> +Expected, WasmTER> WasmEngine::run( Bytes const& wasmCode, HostFunctions& hfs, diff --git a/src/libxrpl/tx/wasm/WasmiVM.cpp b/src/libxrpl/tx/wasm/WasmiVM.cpp index 91f4770459..57968d311e 100644 --- a/src/libxrpl/tx/wasm/WasmiVM.cpp +++ b/src/libxrpl/tx/wasm/WasmiVM.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -78,6 +79,26 @@ printWasmError(std::string_view msg, wasm_trap_t* trap, beast::Journal jlog) } // LCOV_EXCL_STOP +// Extract a trap's message into a std::string (the only signal the C API gives +// for classification; see the trap-signal constants in WasmCommon.h). Does not +// take ownership of `trap`. +std::string +trapMessage(wasm_trap_t* trap) +{ + if (trap == nullptr) + return {}; // LCOV_EXCL_LINE + wasm_byte_vec_t msg WASM_EMPTY_VEC; + wasm_trap_message(trap, &msg); + std::string out; + if (msg.size != 0u) + { + // wasm_trap_message NUL-terminates, so drop the trailing NUL. + out.assign(msg.data, msg.size - 1); + wasm_byte_vec_delete(&msg); + } + return out; +} + } // namespace class WasmiRuntimeWrapper : public WasmRuntimeWrapper @@ -679,7 +700,24 @@ WasmiEngine::call(FuncInfo const& f, std::vector& in) if (trap) { - ret.f = true; + // Classify the trap into a TER by matching tokens as substrings of the + // message (see the trap-signal constants in WasmCommon.h for why). + std::string const msg = trapMessage(trap); + auto const has = [&msg](std::string_view token) { + return msg.find(token) != std::string::npos; + }; + if (has(hfErrInternal)) + { + ret.ter = tecINTERNAL; + } + else if (has(hfErrOutOfGas) || has(wasmiTrapOutOfFuel)) + { + ret.ter = tecOUT_OF_GAS; + } + else + { + ret.ter = tecFAILED_PROCESSING; + } printWasmError("failure to call func", trap, j_); } @@ -719,7 +757,7 @@ checkImports(ImportVec const& imports, HostFunctions* hfs) } } -Expected, TER> +Expected, WasmTER> WasmiEngine::run( Bytes const& wasmCode, HostFunctions& hfs, @@ -730,7 +768,7 @@ WasmiEngine::run( beast::Journal j) { if (gas <= 0) - return Unexpected(temBAD_AMOUNT); + return Unexpected(WasmTER{.ter = temBAD_AMOUNT, .cost = std::nullopt}); try { @@ -747,10 +785,12 @@ WasmiEngine::run( printWasmError(std::string("exception: unknown"), nullptr, j); } // LCOV_EXCL_STOP - return Unexpected(tecFAILED_PROCESSING); + // An exception escaping the engine is an xrpld-side fault -> tecINTERNAL, + // no gas. Genuine wasm faults don't throw; they surface as traps in runHlp. + return Unexpected(WasmTER{.ter = tecINTERNAL, .cost = std::nullopt}); } -Expected, TER> +Expected, WasmTER> WasmiEngine::runHlp( Bytes const& wasmCode, HostFunctions& hfs, @@ -793,8 +833,24 @@ WasmiEngine::runHlp( auto const res = call<1>(f, p); - if (res.f) - Throw("<" + std::string(funcName) + "> failure"); + if (gas == -1) + gas = std::numeric_limits::max(); + + if (res.ter.has_value()) + { + // call() already classified the trap (see WasmiEngine::call). + // tecINTERNAL is an xrpld-side bug: report no gas. + if (*res.ter == tecINTERNAL) + return Unexpected(WasmTER{.ter = tecINTERNAL, .cost = std::nullopt}); + + // Out-of-gas / wasm faults report gas (caller writes it to metadata). + // Force fuel to 0 on out-of-gas so cost is the full limit (wasmi leaves + // nonzero leftover fuel on its own out-of-fuel trap). + if (*res.ter == tecOUT_OF_GAS) + iw.setGas(0); + + return Unexpected(WasmTER{.ter = *res.ter, .cost = gas - moduleWrap_->getGas()}); + } if (res.r.empty()) { @@ -809,8 +865,6 @@ WasmiEngine::runHlp( "> return type mismatch, ret: " + std::to_string(static_cast(res.r[0].kind))); } - if (gas == -1) - gas = std::numeric_limits::max(); WasmResult const ret{.result = res.r[0].of.i32, .cost = gas - moduleWrap_->getGas()}; // #ifdef DEBUG_OUTPUT diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index 13bc18e09c..9d8bc94231 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -135,7 +135,7 @@ public: return Bytes{s.begin(), s.end()}; } - return Unexpected(HostFunctionError::Internal); + return Unexpected(HostFunctionError::Unimplemented); } Expected diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index bae464f7be..230494f498 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -53,13 +53,13 @@ struct Wasm_test : public beast::unit_test::Suite { void checkResult( - Expected, TER> re, + Expected, WasmTER> re, int32_t expectedResult, int64_t expectedCost, std::source_location const location = std::source_location::current()) { auto const lineStr = " (" + std::to_string(location.line()) + ")"; - if (BEAST_EXPECTS(re.has_value(), transToken(re.error()) + lineStr)) + if (BEAST_EXPECTS(re.has_value(), transToken(re.error().ter) + lineStr)) { BEAST_EXPECTS(re->result == expectedResult, std::to_string(re->result) + lineStr); BEAST_EXPECTS(re->cost == expectedCost, std::to_string(re->cost) + lineStr); @@ -258,8 +258,10 @@ struct Wasm_test : public beast::unit_test::Suite if (BEAST_EXPECT(!re)) { + // Running out of gas now terminates with tecOUT_OF_GAS (was + // previously collapsed into tecFAILED_PROCESSING). BEAST_EXPECTS( - re.error() == tecFAILED_PROCESSING, std::to_string(TERtoInt(re.error()))); + re.error().ter == tecOUT_OF_GAS, std::to_string(TERtoInt(re.error().ter))); } env.close(); @@ -286,7 +288,7 @@ struct Wasm_test : public beast::unit_test::Suite TestHostFunctions hfs(env); auto re = runEscrowWasm(allHFWasm, hfs, -1, escrowFunctionName, {}); BEAST_EXPECT(!re.has_value()); - BEAST_EXPECT(re.error() == temBAD_AMOUNT); + BEAST_EXPECT(re.error().ter == temBAD_AMOUNT); } { @@ -294,7 +296,7 @@ struct Wasm_test : public beast::unit_test::Suite TestHostFunctions hfs(env); auto re = runEscrowWasm(allHFWasm, hfs, 0, escrowFunctionName, {}); BEAST_EXPECT(!re.has_value()); - BEAST_EXPECT(re.error() == temBAD_AMOUNT); + BEAST_EXPECT(re.error().ter == temBAD_AMOUNT); } { @@ -379,7 +381,7 @@ struct Wasm_test : public beast::unit_test::Suite auto& engine = WasmEngine::instance(); auto re = engine.run(badAlignWasm, hfs, 1'000'000, "test", {}, imports, env.journal); - if (BEAST_EXPECTS(re, transToken(re.error()))) + if (BEAST_EXPECTS(re, transToken(re.error().ter))) { BEAST_EXPECTS(re->result == 0x47308594, std::to_string(re->result)); } From c634c75aeecb67ee023267e44dd92552f0c7280c Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 20 Jul 2026 18:07:42 -0400 Subject: [PATCH 131/137] fix build issues --- include/xrpl/basics/Number.h | 2 +- include/xrpl/tx/wasm/HostFunc.h | 307 +++++++++--------- include/xrpl/tx/wasm/HostFuncImpl.h | 154 ++++----- include/xrpl/tx/wasm/HostFuncWrapper.h | 24 +- include/xrpl/tx/wasm/README.md | 10 +- include/xrpl/tx/wasm/WasmVM.h | 4 +- include/xrpl/tx/wasm/WasmiVM.h | 4 +- src/libxrpl/tx/wasm/HostFuncImpl.cpp | 11 +- src/libxrpl/tx/wasm/HostFuncImplFloat.cpp | 159 +++++---- src/libxrpl/tx/wasm/HostFuncImplGetter.cpp | 103 +++--- src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp | 115 ++++--- .../tx/wasm/HostFuncImplLedgerHeader.cpp | 13 +- src/libxrpl/tx/wasm/HostFuncImplNFT.cpp | 27 +- src/libxrpl/tx/wasm/HostFuncImplTrace.cpp | 11 +- src/libxrpl/tx/wasm/HostFuncWrapper.cpp | 121 +++---- src/libxrpl/tx/wasm/WasmVM.cpp | 19 +- src/libxrpl/tx/wasm/WasmiVM.cpp | 13 +- src/test/app/HostFuncImpl_test.cpp | 48 +-- src/test/app/TestHostFunctions.h | 130 ++++---- src/test/app/Wasm_test.cpp | 9 +- 20 files changed, 639 insertions(+), 645 deletions(-) diff --git a/include/xrpl/basics/Number.h b/include/xrpl/basics/Number.h index f90800c715..c64ad027f4 100644 --- a/include/xrpl/basics/Number.h +++ b/include/xrpl/basics/Number.h @@ -347,7 +347,7 @@ concept Integral64 = std::is_same_v || std::is_same_v #include #include #include @@ -20,46 +19,46 @@ namespace wasm_float { std::string floatToString(Slice const& data); -Expected +std::expected floatFromIntImpl(int64_t x, int32_t mode); -Expected +std::expected floatFromUintImpl(uint64_t x, int32_t mode); -Expected +std::expected floatFromSTAmountImpl(STAmount const& x, int32_t mode); -Expected +std::expected floatFromSTNumberImpl(STNumber const& x, int32_t mode); -Expected +std::expected floatToIntImpl(Slice const& x, int32_t mode); -Expected +std::expected floatToMantExpImpl(Slice const& x); -Expected +std::expected floatFromMantExpImpl(int64_t mantissa, int32_t exponent, int32_t mode); -Expected +std::expected floatCompareImpl(Slice const& x, Slice const& y); -Expected +std::expected floatAddImpl(Slice const& x, Slice const& y, int32_t mode); -Expected +std::expected floatSubtractImpl(Slice const& x, Slice const& y, int32_t mode); -Expected +std::expected floatMultiplyImpl(Slice const& x, Slice const& y, int32_t mode); -Expected +std::expected floatDivideImpl(Slice const& x, Slice const& y, int32_t mode); -Expected +std::expected floatRootImpl(Slice const& x, int32_t n, int32_t mode); -Expected +std::expected floatPowerImpl(Slice const& x, int32_t n, int32_t mode); } // namespace wasm_float @@ -110,401 +109,403 @@ public: return true; } - virtual Expected + virtual std::expected getLedgerSqn() const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected getParentLedgerTime() const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected getParentLedgerHash() const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected getBaseFee() const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected isAmendmentEnabled(uint256 const& amendmentId) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected isAmendmentEnabled(std::string_view const& amendmentName) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected cacheLedgerObj(uint256 const& objId, int32_t cacheIdx) { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected getTxField(SField const& fname) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected getCurrentLedgerObjField(SField const& fname) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected getLedgerObjField(int32_t cacheIdx, SField const& fname) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected getTxNestedField(FieldLocator const& locator) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected getCurrentLedgerObjNestedField(FieldLocator const& locator) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected getLedgerObjNestedField(int32_t cacheIdx, FieldLocator const& locator) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected getTxArrayLen(SField const& fname) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected getCurrentLedgerObjArrayLen(SField const& fname) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected getLedgerObjArrayLen(int32_t cacheIdx, SField const& fname) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected getTxNestedArrayLen(FieldLocator const& locator) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected getCurrentLedgerObjNestedArrayLen(FieldLocator const& locator) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected getLedgerObjNestedArrayLen(int32_t cacheIdx, FieldLocator const& locator) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected updateData(Slice const& data) { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected checkSignature(Slice const& message, Slice const& signature, Slice const& pubkey) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected computeSha512HalfHash(Slice const& data) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected accountKeylet(AccountID const& account) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected ammKeylet(Asset const& issue1, Asset const& issue2) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected checkKeylet(AccountID const& account, std::uint32_t seq) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected didKeylet(AccountID const& account) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected delegateKeylet(AccountID const& account, AccountID const& authorize) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected depositPreauthKeylet(AccountID const& account, AccountID const& authorize) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected escrowKeylet(AccountID const& account, std::uint32_t seq) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected - lineKeylet(AccountID const& account1, AccountID const& account2, Currency const& currency) const + virtual std::expected + trustLineKeylet(AccountID const& account1, AccountID const& account2, Currency const& currency) + const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected - mptIssuanceKeylet(AccountID const& issuer, std::uint32_t seq) const + virtual std::expected + mptokenIssuanceKeylet(AccountID const& issuer, std::uint32_t seq) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected mptokenKeylet(MPTID const& mptid, AccountID const& holder) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected - nftOfferKeylet(AccountID const& account, std::uint32_t seq) const + virtual std::expected + nftokenOfferKeylet(AccountID const& account, std::uint32_t seq) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected offerKeylet(AccountID const& account, std::uint32_t seq) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected oracleKeylet(AccountID const& account, std::uint32_t docId) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected - paychanKeylet(AccountID const& account, AccountID const& destination, std::uint32_t seq) const + virtual std::expected + paychannelKeylet(AccountID const& account, AccountID const& destination, std::uint32_t seq) + const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected permissionedDomainKeylet(AccountID const& account, std::uint32_t seq) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected - signersKeylet(AccountID const& account) const + virtual std::expected + signerListKeylet(AccountID const& account) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected ticketKeylet(AccountID const& account, std::uint32_t seq) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected vaultKeylet(AccountID const& account, std::uint32_t seq) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected getNFT(AccountID const& account, uint256 const& nftId) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected getNFTIssuer(uint256 const& nftId) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected getNFTTaxon(uint256 const& nftId) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected getNFTFlags(uint256 const& nftId) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected getNFTTransferFee(uint256 const& nftId) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected - getNFTSerial(uint256 const& nftId) const + virtual std::expected + getNFTSequence(uint256 const& nftId) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected trace(std::string_view const& msg, Slice const& data, bool asHex) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected traceNum(std::string_view const& msg, int64_t data) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected traceAccount(std::string_view const& msg, AccountID const& account) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected traceFloat(std::string_view const& msg, Slice const& data) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected traceAmount(std::string_view const& msg, STAmount const& amount) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected floatFromInt(int64_t x, int32_t mode) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected floatFromUint(uint64_t x, int32_t mode) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected floatFromSTAmount(STAmount const& x, int32_t mode) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected floatFromSTNumber(STNumber const& x, int32_t mode) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected floatToInt(Slice const& x, int32_t mode) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected floatToMantExp(Slice const& x) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected floatFromMantExp(int64_t mantissa, int32_t exponent, int32_t mode) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected floatCompare(Slice const& x, Slice const& y) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected floatAdd(Slice const& x, Slice const& y, int32_t mode) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected floatSubtract(Slice const& x, Slice const& y, int32_t mode) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected floatMultiply(Slice const& x, Slice const& y, int32_t mode) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected floatDivide(Slice const& x, Slice const& y, int32_t mode) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected floatRoot(Slice const& x, int32_t n, int32_t mode) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - virtual Expected + virtual std::expected floatPower(Slice const& x, int32_t n, int32_t mode) const { - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } virtual ~HostFunctions() = default; diff --git a/include/xrpl/tx/wasm/HostFuncImpl.h b/include/xrpl/tx/wasm/HostFuncImpl.h index 950856e828..b32023039b 100644 --- a/include/xrpl/tx/wasm/HostFuncImpl.h +++ b/include/xrpl/tx/wasm/HostFuncImpl.h @@ -19,24 +19,24 @@ class WasmHostFunctionsImpl : public HostFunctions std::optional data_; public: - Expected, HostFunctionError> + std::expected, HostFunctionError> getCurrentLedgerObj() const { if (!currentLedgerObj_) currentLedgerObj_ = ctx_.view().read(leKey_); if (*currentLedgerObj_) return *currentLedgerObj_; - return Unexpected(HostFunctionError::LedgerObjNotFound); + return std::unexpected(HostFunctionError::LedgerObjNotFound); } - Expected + std::expected normalizeCacheIndex(int32_t cacheIdx) const { --cacheIdx; if (cacheIdx < 0 || cacheIdx >= maxCache) - return Unexpected(HostFunctionError::SlotOutRange); + return std::unexpected(HostFunctionError::SlotOutRange); if (!cache_[cacheIdx]) - return Unexpected(HostFunctionError::EmptySlot); + return std::unexpected(HostFunctionError::EmptySlot); return cacheIdx; } @@ -77,206 +77,206 @@ public: return data_; } - Expected + std::expected getLedgerSqn() const override; - Expected + std::expected getParentLedgerTime() const override; - Expected + std::expected getParentLedgerHash() const override; - Expected + std::expected getBaseFee() const override; - Expected + std::expected isAmendmentEnabled(uint256 const& amendmentId) const override; - Expected + std::expected isAmendmentEnabled(std::string_view const& amendmentName) const override; - Expected + std::expected cacheLedgerObj(uint256 const& objId, int32_t cacheIdx) override; - Expected + std::expected getTxField(SField const& fname) const override; - Expected + std::expected getCurrentLedgerObjField(SField const& fname) const override; - Expected + std::expected getLedgerObjField(int32_t cacheIdx, SField const& fname) const override; - Expected + std::expected getTxNestedField(FieldLocator const& locator) const override; - Expected + std::expected getCurrentLedgerObjNestedField(FieldLocator const& locator) const override; - Expected + std::expected getLedgerObjNestedField(int32_t cacheIdx, FieldLocator const& locator) const override; - Expected + std::expected getTxArrayLen(SField const& fname) const override; - Expected + std::expected getCurrentLedgerObjArrayLen(SField const& fname) const override; - Expected + std::expected getLedgerObjArrayLen(int32_t cacheIdx, SField const& fname) const override; - Expected + std::expected getTxNestedArrayLen(FieldLocator const& locator) const override; - Expected + std::expected getCurrentLedgerObjNestedArrayLen(FieldLocator const& locator) const override; - Expected + std::expected getLedgerObjNestedArrayLen(int32_t cacheIdx, FieldLocator const& locator) const override; - Expected + std::expected updateData(Slice const& data) override; - Expected + std::expected checkSignature(Slice const& message, Slice const& signature, Slice const& pubkey) const override; - Expected + std::expected computeSha512HalfHash(Slice const& data) const override; - Expected + std::expected accountKeylet(AccountID const& account) const override; - Expected + std::expected ammKeylet(Asset const& issue1, Asset const& issue2) const override; - Expected + std::expected checkKeylet(AccountID const& account, std::uint32_t seq) const override; - Expected + std::expected credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) const override; - Expected + std::expected didKeylet(AccountID const& account) const override; - Expected + std::expected delegateKeylet(AccountID const& account, AccountID const& authorize) const override; - Expected + std::expected depositPreauthKeylet(AccountID const& account, AccountID const& authorize) const override; - Expected + std::expected escrowKeylet(AccountID const& account, std::uint32_t seq) const override; - Expected - lineKeylet(AccountID const& account1, AccountID const& account2, Currency const& currency) + std::expected + trustLineKeylet(AccountID const& account1, AccountID const& account2, Currency const& currency) const override; - Expected - mptIssuanceKeylet(AccountID const& issuer, std::uint32_t seq) const override; + std::expected + mptokenIssuanceKeylet(AccountID const& issuer, std::uint32_t seq) const override; - Expected + std::expected mptokenKeylet(MPTID const& mptid, AccountID const& holder) const override; - Expected - nftOfferKeylet(AccountID const& account, std::uint32_t seq) const override; + std::expected + nftokenOfferKeylet(AccountID const& account, std::uint32_t seq) const override; - Expected + std::expected offerKeylet(AccountID const& account, std::uint32_t seq) const override; - Expected + std::expected oracleKeylet(AccountID const& account, std::uint32_t docId) const override; - Expected - paychanKeylet(AccountID const& account, AccountID const& destination, std::uint32_t seq) + std::expected + paychannelKeylet(AccountID const& account, AccountID const& destination, std::uint32_t seq) const override; - Expected + std::expected permissionedDomainKeylet(AccountID const& account, std::uint32_t seq) const override; - Expected - signersKeylet(AccountID const& account) const override; + std::expected + signerListKeylet(AccountID const& account) const override; - Expected + std::expected ticketKeylet(AccountID const& account, std::uint32_t seq) const override; - Expected + std::expected vaultKeylet(AccountID const& account, std::uint32_t seq) const override; - Expected + std::expected getNFT(AccountID const& account, uint256 const& nftId) const override; - Expected + std::expected getNFTIssuer(uint256 const& nftId) const override; - Expected + std::expected getNFTTaxon(uint256 const& nftId) const override; - Expected + std::expected getNFTFlags(uint256 const& nftId) const override; - Expected + std::expected getNFTTransferFee(uint256 const& nftId) const override; - Expected - getNFTSerial(uint256 const& nftId) const override; + std::expected + getNFTSequence(uint256 const& nftId) const override; - Expected + std::expected trace(std::string_view const& msg, Slice const& data, bool asHex) const override; - Expected + std::expected traceNum(std::string_view const& msg, int64_t data) const override; - Expected + std::expected traceAccount(std::string_view const& msg, AccountID const& account) const override; - Expected + std::expected traceFloat(std::string_view const& msg, Slice const& data) const override; - Expected + std::expected traceAmount(std::string_view const& msg, STAmount const& amount) const override; - Expected + std::expected floatFromInt(int64_t x, int32_t mode) const override; - Expected + std::expected floatFromUint(uint64_t x, int32_t mode) const override; - Expected + std::expected floatFromSTAmount(STAmount const& x, int32_t mode) const override; - Expected + std::expected floatFromSTNumber(STNumber const& x, int32_t mode) const override; - Expected + std::expected floatToInt(Slice const& x, int32_t mode) const override; - Expected + std::expected floatToMantExp(Slice const& x) const override; - Expected + std::expected floatFromMantExp(int64_t mantissa, int32_t exponent, int32_t mode) const override; - Expected + std::expected floatCompare(Slice const& x, Slice const& y) const override; - Expected + std::expected floatAdd(Slice const& x, Slice const& y, int32_t mode) const override; - Expected + std::expected floatSubtract(Slice const& x, Slice const& y, int32_t mode) const override; - Expected + std::expected floatMultiply(Slice const& x, Slice const& y, int32_t mode) const override; - Expected + std::expected floatDivide(Slice const& x, Slice const& y, int32_t mode) const override; - Expected + std::expected floatRoot(Slice const& x, int32_t n, int32_t mode) const override; - Expected + std::expected floatPower(Slice const& x, int32_t n, int32_t mode) const override; }; diff --git a/include/xrpl/tx/wasm/HostFuncWrapper.h b/include/xrpl/tx/wasm/HostFuncWrapper.h index 825f5344ad..2954c8f423 100644 --- a/include/xrpl/tx/wasm/HostFuncWrapper.h +++ b/include/xrpl/tx/wasm/HostFuncWrapper.h @@ -115,7 +115,7 @@ using escrowKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* escrowKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); -using lineKeylet_proto = int32_t( +using trustLineKeylet_proto = int32_t( uint8_t const*, int32_t, uint8_t const*, @@ -124,19 +124,19 @@ using lineKeylet_proto = int32_t( int32_t, uint8_t*, int32_t); -wasm_trap_t* lineKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); +wasm_trap_t* trustLineKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); -using mptIssuanceKeylet_proto = +using mptokenIssuanceKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* mptIssuanceKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); +wasm_trap_t* mptokenIssuanceKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using mptokenKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* mptokenKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); -using nftOfferKeylet_proto = +using nftokenOfferKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* nftOfferKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); +wasm_trap_t* nftokenOfferKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using offerKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); @@ -146,7 +146,7 @@ using oracleKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* oracleKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); -using paychanKeylet_proto = int32_t( +using paychannelKeylet_proto = int32_t( uint8_t const*, int32_t, uint8_t const*, @@ -155,14 +155,14 @@ using paychanKeylet_proto = int32_t( int32_t, uint8_t*, int32_t); -wasm_trap_t* paychanKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); +wasm_trap_t* paychannelKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using permissionedDomainKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); wasm_trap_t* permissionedDomainKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); -using signersKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* signersKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); +using signerListKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); +wasm_trap_t* signerListKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using ticketKeylet_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, uint8_t*, int32_t); @@ -187,8 +187,8 @@ wasm_trap_t* getNFTFlags_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using getNFTTransferFee_proto = int32_t(uint8_t const*, int32_t); wasm_trap_t* getNFTTransferFee_wrap(WASM_SECONDARY_CB_PARAMS_LIST); -using getNFTSerial_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); -wasm_trap_t* getNFTSerial_wrap(WASM_SECONDARY_CB_PARAMS_LIST); +using getNFTSequence_proto = int32_t(uint8_t const*, int32_t, uint8_t*, int32_t); +wasm_trap_t* getNFTSequence_wrap(WASM_SECONDARY_CB_PARAMS_LIST); using trace_proto = int32_t(uint8_t const*, int32_t, uint8_t const*, int32_t, int32_t); wasm_trap_t* trace_wrap(WASM_SECONDARY_CB_PARAMS_LIST); diff --git a/include/xrpl/tx/wasm/README.md b/include/xrpl/tx/wasm/README.md index 3275011b49..5b276d3aed 100644 --- a/include/xrpl/tx/wasm/README.md +++ b/include/xrpl/tx/wasm/README.md @@ -45,7 +45,7 @@ The module follows a layered architecture: - **`HostFunc.h`** - Abstract `HostFunctions` base class defining the interface for all callable host functions. Each method returns - `Expected`. + `std::expected`. - **`HostFuncImpl.h` / `detail/HostFuncImpl*.cpp`** - Concrete `WasmHostFunctionsImpl` class that implements host functions with access to @@ -120,10 +120,10 @@ Add a virtual method declaration with a default implementation that returns an error: ```cpp -virtual Expected +virtual std::expected myNewFunction(ParamType1 param1, ParamType2 param2) { - return Unexpected(HostFunctionError::INTERNAL); + return std::unexpected(HostFunctionError::INTERNAL); } ``` @@ -132,7 +132,7 @@ myNewFunction(ParamType1 param1, ParamType2 param2) Add the method override declaration in `WasmHostFunctionsImpl`: ```cpp -Expected +std::expected myNewFunction(ParamType1 param1, ParamType2 param2) override; ``` @@ -141,7 +141,7 @@ myNewFunction(ParamType1 param1, ParamType2 param2) override; Add the implementation in the appropriate file: ```cpp -Expected +std::expected WasmHostFunctionsImpl::myNewFunction(ParamType1 param1, ParamType2 param2) { // Implementation using ctx (ApplyContext) for ledger access diff --git a/include/xrpl/tx/wasm/WasmVM.h b/include/xrpl/tx/wasm/WasmVM.h index 48b0438654..3e200eca17 100644 --- a/include/xrpl/tx/wasm/WasmVM.h +++ b/include/xrpl/tx/wasm/WasmVM.h @@ -40,7 +40,7 @@ public: static WasmEngine& instance(); - Expected, WasmTER> + std::expected, WasmTER> run(Bytes const& wasmCode, HostFunctions& hfs, int64_t gasLimit, @@ -71,7 +71,7 @@ public: ImportVec createWasmImport(HostFunctions& hfs); -Expected +std::expected runEscrowWasm( Bytes const& wasmCode, HostFunctions& hfs, diff --git a/include/xrpl/tx/wasm/WasmiVM.h b/include/xrpl/tx/wasm/WasmiVM.h index 45ef703e91..9c41b05d7c 100644 --- a/include/xrpl/tx/wasm/WasmiVM.h +++ b/include/xrpl/tx/wasm/WasmiVM.h @@ -309,7 +309,7 @@ public: static EnginePtr init(); - Expected, WasmTER> + std::expected, WasmTER> run(Bytes const& wasmCode, HostFunctions& hfs, int64_t gas, @@ -360,7 +360,7 @@ private: return moduleWrap_ ? moduleWrap_->getMem() : Wmem(); } - Expected, WasmTER> + std::expected, WasmTER> runHlp( Bytes const& wasmCode, HostFunctions& hfs, diff --git a/src/libxrpl/tx/wasm/HostFuncImpl.cpp b/src/libxrpl/tx/wasm/HostFuncImpl.cpp index 15ffeba68b..fa2b0153d8 100644 --- a/src/libxrpl/tx/wasm/HostFuncImpl.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImpl.cpp @@ -1,6 +1,5 @@ #include -#include #include #include #include @@ -15,11 +14,11 @@ namespace xrpl { // SECTION: WRITE FUNCTION // ========================================================= -Expected +std::expected WasmHostFunctionsImpl::updateData(Slice const& data) { if (data.size() > kMaxWasmDataLength) - return Unexpected(HostFunctionError::DataFieldTooLarge); + return std::unexpected(HostFunctionError::DataFieldTooLarge); data_ = Bytes(data.begin(), data.end()); return data_->size(); @@ -29,20 +28,20 @@ WasmHostFunctionsImpl::updateData(Slice const& data) // SECTION: UTILS // ========================================================= -Expected +std::expected WasmHostFunctionsImpl::checkSignature( Slice const& message, Slice const& signature, Slice const& pubkey) const { if (!publicKeyType(pubkey)) - return Unexpected(HostFunctionError::InvalidParams); + return std::unexpected(HostFunctionError::InvalidParams); PublicKey const pk(pubkey); return verify(pk, message, signature); } -Expected +std::expected WasmHostFunctionsImpl::computeSha512HalfHash(Slice const& data) const { auto const hash = sha512Half(data); diff --git a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp index dda1a09296..57e24dd4b7 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp @@ -1,4 +1,3 @@ -#include #include #include #include @@ -92,7 +91,7 @@ public: return Number::operator int64_t(); } - Expected + std::expected toBytes() const { Serializer msg; @@ -107,7 +106,7 @@ public: std::cout << std::setw(2) << (unsigned)c << " "; std::cout << std::dec << std::setfill(' ') << std::endl; #endif - return Expected(std::move(data)); + return std::expected(std::move(data)); } }; @@ -155,164 +154,164 @@ floatToString(Slice const& data) return s; } -Expected +std::expected floatFromIntImpl(int64_t x, int32_t mode) { try { detail::FloatState const rm(mode); if (!rm) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const num(x); if (!num) - return Unexpected(HostFunctionError::FloatInputMalformed); // LCOV_EXCL_LINE + return std::unexpected(HostFunctionError::FloatInputMalformed); // LCOV_EXCL_LINE auto const r = num.toBytes(); return r; } // LCOV_EXCL_START catch (...) { - return Unexpected(HostFunctionError::FloatComputationError); + return std::unexpected(HostFunctionError::FloatComputationError); } // LCOV_EXCL_STOP } -Expected +std::expected floatFromUintImpl(uint64_t x, int32_t mode) { try { detail::FloatState const rm(mode); if (!rm) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const num(x); if (!num) - return Unexpected(HostFunctionError::FloatInputMalformed); // LCOV_EXCL_LINE + return std::unexpected(HostFunctionError::FloatInputMalformed); // LCOV_EXCL_LINE auto const r = num.toBytes(); return r; } // LCOV_EXCL_START catch (...) { - return Unexpected(HostFunctionError::FloatComputationError); + return std::unexpected(HostFunctionError::FloatComputationError); } // LCOV_EXCL_STOP } -Expected +std::expected floatFromSTAmountImpl(STAmount const& x, int32_t mode) { try { detail::FloatState const rm(mode); if (!rm) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const num(static_cast(x)); if (!num) - return Unexpected(HostFunctionError::FloatInputMalformed); // LCOV_EXCL_LINE + return std::unexpected(HostFunctionError::FloatInputMalformed); // LCOV_EXCL_LINE auto const r = num.toBytes(); return r; } // LCOV_EXCL_START catch (...) { - return Unexpected(HostFunctionError::FloatComputationError); + return std::unexpected(HostFunctionError::FloatComputationError); } // LCOV_EXCL_STOP } -Expected +std::expected floatFromSTNumberImpl(STNumber const& x, int32_t mode) { try { detail::FloatState const rm(mode); if (!rm) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const num(x.value()); if (!num) - return Unexpected(HostFunctionError::FloatInputMalformed); // LCOV_EXCL_LINE + return std::unexpected(HostFunctionError::FloatInputMalformed); // LCOV_EXCL_LINE auto const r = num.toBytes(); return r; } // LCOV_EXCL_START catch (...) { - return Unexpected(HostFunctionError::FloatComputationError); + return std::unexpected(HostFunctionError::FloatComputationError); } // LCOV_EXCL_STOP } -Expected +std::expected floatToIntImpl(Slice const& x, int32_t mode) { try { detail::FloatState const rm(mode); if (!rm) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const num(x); if (!num) - return Unexpected(HostFunctionError::FloatInputMalformed); // LCOV_EXCL_LINE + return std::unexpected(HostFunctionError::FloatInputMalformed); // LCOV_EXCL_LINE int64_t const r(num); return r; } // LCOV_EXCL_START catch (...) { - return Unexpected(HostFunctionError::FloatComputationError); + return std::unexpected(HostFunctionError::FloatComputationError); } // LCOV_EXCL_STOP } -Expected +std::expected floatToMantExpImpl(Slice const& x) { try { detail::FloatState const rm(static_cast(Number::RoundingMode::ToNearest)); if (!rm) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const num(x); if (!num) - return Unexpected(HostFunctionError::FloatInputMalformed); // LCOV_EXCL_LINE + return std::unexpected(HostFunctionError::FloatInputMalformed); // LCOV_EXCL_LINE return FloatPair(num.mantissa(), num.exponent()); } // LCOV_EXCL_START catch (...) { - return Unexpected(HostFunctionError::FloatComputationError); + return std::unexpected(HostFunctionError::FloatComputationError); } // LCOV_EXCL_STOP } -Expected +std::expected floatFromMantExpImpl(int64_t mantissa, int32_t exponent, int32_t mode) { try { detail::FloatState const rm(mode); if (!rm) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const num(mantissa, exponent); if (!num) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); return num.toBytes(); } catch (...) { - return Unexpected(HostFunctionError::FloatComputationError); + return std::unexpected(HostFunctionError::FloatComputationError); } } -Expected +std::expected floatCompareImpl(Slice const& x, Slice const& y) { try @@ -322,10 +321,10 @@ floatCompareImpl(Slice const& x, Slice const& y) detail::WasmNumber const xx(x); if (!xx) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const yy(y); if (!yy) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); if (xx < yy) return 2; if (xx == yy) @@ -335,26 +334,26 @@ floatCompareImpl(Slice const& x, Slice const& y) // LCOV_EXCL_START catch (...) { - return Unexpected(HostFunctionError::FloatComputationError); + return std::unexpected(HostFunctionError::FloatComputationError); } // LCOV_EXCL_STOP } -Expected +std::expected floatAddImpl(Slice const& x, Slice const& y, int32_t mode) { try { detail::FloatState const rm(mode); if (!rm) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const xx(x); if (!xx) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const yy(y); if (!yy) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const res = xx + yy; return res.toBytes(); @@ -362,25 +361,25 @@ floatAddImpl(Slice const& x, Slice const& y, int32_t mode) // LCOV_EXCL_START catch (...) { - return Unexpected(HostFunctionError::FloatComputationError); + return std::unexpected(HostFunctionError::FloatComputationError); } // LCOV_EXCL_STOP } -Expected +std::expected floatSubtractImpl(Slice const& x, Slice const& y, int32_t mode) { try { detail::FloatState const rm(mode); if (!rm) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const xx(x); if (!xx) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const yy(y); if (!yy) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const res = xx - yy; return res.toBytes(); @@ -388,25 +387,25 @@ floatSubtractImpl(Slice const& x, Slice const& y, int32_t mode) // LCOV_EXCL_START catch (...) { - return Unexpected(HostFunctionError::FloatComputationError); + return std::unexpected(HostFunctionError::FloatComputationError); } // LCOV_EXCL_STOP } -Expected +std::expected floatMultiplyImpl(Slice const& x, Slice const& y, int32_t mode) { try { detail::FloatState const rm(mode); if (!rm) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const xx(x); if (!xx) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const yy(y); if (!yy) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const res = xx * yy; return res.toBytes(); @@ -414,50 +413,50 @@ floatMultiplyImpl(Slice const& x, Slice const& y, int32_t mode) // LCOV_EXCL_START catch (...) { - return Unexpected(HostFunctionError::FloatComputationError); + return std::unexpected(HostFunctionError::FloatComputationError); } // LCOV_EXCL_STOP } -Expected +std::expected floatDivideImpl(Slice const& x, Slice const& y, int32_t mode) { try { detail::FloatState const rm(mode); if (!rm) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const xx(x); if (!xx) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const yy(y); if (!yy) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const res = xx / yy; return res.toBytes(); } catch (...) { - return Unexpected(HostFunctionError::FloatComputationError); + return std::unexpected(HostFunctionError::FloatComputationError); } } -Expected +std::expected floatRootImpl(Slice const& x, int32_t n, int32_t mode) { try { if (n < 1) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); detail::FloatState const rm(mode); if (!rm) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const xx(x); if (!xx) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const res(root(xx, n)); @@ -466,28 +465,28 @@ floatRootImpl(Slice const& x, int32_t n, int32_t mode) // LCOV_EXCL_START catch (...) { - return Unexpected(HostFunctionError::FloatComputationError); + return std::unexpected(HostFunctionError::FloatComputationError); } // LCOV_EXCL_STOP } -Expected +std::expected floatPowerImpl(Slice const& x, int32_t n, int32_t mode) { try { if ((n < 0) || (n > Number::kMaxExponent)) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); detail::FloatState const rm(mode); if (!rm) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); detail::WasmNumber const xx(x); if (!xx) - return Unexpected(HostFunctionError::FloatInputMalformed); + return std::unexpected(HostFunctionError::FloatInputMalformed); if (xx == Number() && (n == 0)) - return Unexpected(HostFunctionError::InvalidParams); + return std::unexpected(HostFunctionError::InvalidParams); detail::WasmNumber const res(power(xx, n, 1)); @@ -496,7 +495,7 @@ floatPowerImpl(Slice const& x, int32_t n, int32_t mode) // LCOV_EXCL_START catch (...) { - return Unexpected(HostFunctionError::FloatComputationError); + return std::unexpected(HostFunctionError::FloatComputationError); } // LCOV_EXCL_STOP } @@ -507,85 +506,85 @@ floatPowerImpl(Slice const& x, int32_t n, int32_t mode) // ACTUAL HOST FUNCTIONS // ========================================================= -Expected +std::expected WasmHostFunctionsImpl::floatFromInt(int64_t x, int32_t mode) const { return wasm_float::floatFromIntImpl(x, mode); } -Expected +std::expected WasmHostFunctionsImpl::floatFromUint(uint64_t x, int32_t mode) const { return wasm_float::floatFromUintImpl(x, mode); } -Expected +std::expected WasmHostFunctionsImpl::floatFromSTAmount(STAmount const& x, int32_t mode) const { return wasm_float::floatFromSTAmountImpl(x, mode); } -Expected +std::expected WasmHostFunctionsImpl::floatFromSTNumber(STNumber const& x, int32_t mode) const { return wasm_float::floatFromSTNumberImpl(x, mode); } -Expected +std::expected WasmHostFunctionsImpl::floatToInt(Slice const& x, int32_t mode) const { return wasm_float::floatToIntImpl(x, mode); } -Expected +std::expected WasmHostFunctionsImpl::floatToMantExp(Slice const& x) const { return wasm_float::floatToMantExpImpl(x); } -Expected +std::expected WasmHostFunctionsImpl::floatFromMantExp(int64_t mantissa, int32_t exponent, int32_t mode) const { return wasm_float::floatFromMantExpImpl(mantissa, exponent, mode); } -Expected +std::expected WasmHostFunctionsImpl::floatCompare(Slice const& x, Slice const& y) const { return wasm_float::floatCompareImpl(x, y); } -Expected +std::expected WasmHostFunctionsImpl::floatAdd(Slice const& x, Slice const& y, int32_t mode) const { return wasm_float::floatAddImpl(x, y, mode); } -Expected +std::expected WasmHostFunctionsImpl::floatSubtract(Slice const& x, Slice const& y, int32_t mode) const { return wasm_float::floatSubtractImpl(x, y, mode); } -Expected +std::expected WasmHostFunctionsImpl::floatMultiply(Slice const& x, Slice const& y, int32_t mode) const { return wasm_float::floatMultiplyImpl(x, y, mode); } -Expected +std::expected WasmHostFunctionsImpl::floatDivide(Slice const& x, Slice const& y, int32_t mode) const { return wasm_float::floatDivideImpl(x, y, mode); } -Expected +std::expected WasmHostFunctionsImpl::floatRoot(Slice const& x, int32_t n, int32_t mode) const { return wasm_float::floatRootImpl(x, n, mode); } -Expected +std::expected WasmHostFunctionsImpl::floatPower(Slice const& x, int32_t n, int32_t mode) const { return wasm_float::floatPowerImpl(x, n, mode); diff --git a/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp index 344c1f038a..a4cb37a30e 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp @@ -1,4 +1,3 @@ -#include #include #include #include @@ -36,11 +35,11 @@ getIntBytes(STBase const* obj) return Bytes{b, b + sizeof(T)}; } -static Expected +static std::expected getAnyFieldData(STBase const* obj) { if (obj == nullptr) - return Unexpected(HostFunctionError::FieldNotFound); + return std::unexpected(HostFunctionError::FieldNotFound); auto const stype = obj->getSType(); switch (stype) @@ -48,13 +47,13 @@ getAnyFieldData(STBase const* obj) // LCOV_EXCL_START case STI_UNKNOWN: case STI_NOTPRESENT: - return Unexpected(HostFunctionError::FieldNotFound); + return std::unexpected(HostFunctionError::FieldNotFound); // LCOV_EXCL_STOP case STI_OBJECT: case STI_ARRAY: case STI_VECTOR256: - return Unexpected(HostFunctionError::NotLeafField); + return std::unexpected(HostFunctionError::NotLeafField); case STI_ACCOUNT: { auto const* account(static_cast(obj)); // NOLINT @@ -115,7 +114,7 @@ getAnyFieldData(STBase const* obj) return msg.getData(); } -static Expected +static std::expected getAnyFieldData(FieldValue const& variantObj) { if (STBase const* const* obj = std::get_if(&variantObj)) @@ -136,7 +135,7 @@ noField(STBase const* field) (STI_UNKNOWN == field->getSType()); } -static Expected +static std::expected locateField(STObject const& obj, FieldLocator const& locator) { STBase const* field = nullptr; @@ -146,12 +145,12 @@ locateField(STObject const& obj, FieldLocator const& locator) int32_t const sfieldCode = adjustWasmEndianess(locator[0]); auto const it = knownSFields.find(sfieldCode); if (it == knownSFields.end()) - return Unexpected(HostFunctionError::InvalidField); + return std::unexpected(HostFunctionError::InvalidField); auto const& fname(*it->second); field = obj.peekAtPField(fname); if (noField(field)) - return Unexpected(HostFunctionError::FieldNotFound); + return std::unexpected(HostFunctionError::FieldNotFound); } for (unsigned i = 1; i < locator.size(); ++i) @@ -162,7 +161,7 @@ locateField(STObject const& obj, FieldLocator const& locator) { auto const* arr = static_cast(field); // NOLINT if (sfieldCode < 0 || std::cmp_greater_equal(sfieldCode, arr->size())) - return Unexpected(HostFunctionError::IndexOutOfBounds); + return std::unexpected(HostFunctionError::IndexOutOfBounds); field = &(arr->operator[](sfieldCode)); } else if (STI_OBJECT == field->getSType()) @@ -171,7 +170,7 @@ locateField(STObject const& obj, FieldLocator const& locator) auto const it = knownSFields.find(sfieldCode); if (it == knownSFields.end()) - return Unexpected(HostFunctionError::InvalidField); + return std::unexpected(HostFunctionError::InvalidField); auto const& fname(*it->second); field = o->peekAtPField(fname); @@ -180,22 +179,22 @@ locateField(STObject const& obj, FieldLocator const& locator) { auto const* v = static_cast(field); // NOLINT if (sfieldCode < 0 || std::cmp_greater_equal(sfieldCode, v->size())) - return Unexpected(HostFunctionError::IndexOutOfBounds); + return std::unexpected(HostFunctionError::IndexOutOfBounds); return FieldValue(&(v->operator[](sfieldCode))); } else // simple field must be the last one { - return Unexpected(HostFunctionError::LocatorMalformed); + return std::unexpected(HostFunctionError::LocatorMalformed); } if (noField(field)) - return Unexpected(HostFunctionError::FieldNotFound); + return std::unexpected(HostFunctionError::FieldNotFound); } return FieldValue(field); } -static inline Expected +static inline std::expected getArrayLen(FieldValue const& variantField) { if (STBase const* const* field = std::get_if(&variantField)) @@ -207,15 +206,15 @@ getArrayLen(FieldValue const& variantField) } // uint256 is not an array so that variant should still return NO_ARRAY - return Unexpected(HostFunctionError::NoArray); // LCOV_EXCL_LINE + return std::unexpected(HostFunctionError::NoArray); // LCOV_EXCL_LINE } -Expected +std::expected WasmHostFunctionsImpl::cacheLedgerObj(uint256 const& objId, int32_t cacheIdx) { auto const& keylet = keylet::unchecked(objId); if (cacheIdx < 0 || cacheIdx > maxCache) - return Unexpected(HostFunctionError::SlotOutRange); + return std::unexpected(HostFunctionError::SlotOutRange); if (cacheIdx == 0) { @@ -231,167 +230,167 @@ WasmHostFunctionsImpl::cacheLedgerObj(uint256 const& objId, int32_t cacheIdx) } if (cacheIdx >= maxCache) - return Unexpected(HostFunctionError::SlotsFull); + return std::unexpected(HostFunctionError::SlotsFull); cache_[cacheIdx] = ctx_.view().read(keylet); if (!cache_[cacheIdx]) - return Unexpected(HostFunctionError::LedgerObjNotFound); + return std::unexpected(HostFunctionError::LedgerObjNotFound); return cacheIdx + 1; // return 1-based index } // Subsection: top level getters -Expected +std::expected WasmHostFunctionsImpl::getTxField(SField const& fname) const { return getAnyFieldData(ctx_.tx.peekAtPField(fname)); } -Expected +std::expected WasmHostFunctionsImpl::getCurrentLedgerObjField(SField const& fname) const { auto const sle = getCurrentLedgerObj(); if (!sle.has_value()) - return Unexpected(sle.error()); + return std::unexpected(sle.error()); return getAnyFieldData(sle.value()->peekAtPField(fname)); } -Expected +std::expected WasmHostFunctionsImpl::getLedgerObjField(int32_t cacheIdx, SField const& fname) const { auto const normalizedIdx = normalizeCacheIndex(cacheIdx); if (!normalizedIdx.has_value()) - return Unexpected(normalizedIdx.error()); + return std::unexpected(normalizedIdx.error()); return getAnyFieldData(cache_[normalizedIdx.value()]->peekAtPField(fname)); } // Subsection: nested getters -Expected +std::expected WasmHostFunctionsImpl::getTxNestedField(FieldLocator const& locator) const { auto const r = locateField(ctx_.tx, locator); if (!r) - return Unexpected(r.error()); + return std::unexpected(r.error()); return getAnyFieldData(r.value()); } -Expected +std::expected WasmHostFunctionsImpl::getCurrentLedgerObjNestedField(FieldLocator const& locator) const { auto const sle = getCurrentLedgerObj(); if (!sle.has_value()) - return Unexpected(sle.error()); + return std::unexpected(sle.error()); auto const r = locateField(*sle.value(), locator); if (!r) - return Unexpected(r.error()); + return std::unexpected(r.error()); return getAnyFieldData(r.value()); } -Expected +std::expected WasmHostFunctionsImpl::getLedgerObjNestedField(int32_t cacheIdx, FieldLocator const& locator) const { auto const normalizedIdx = normalizeCacheIndex(cacheIdx); if (!normalizedIdx.has_value()) - return Unexpected(normalizedIdx.error()); + return std::unexpected(normalizedIdx.error()); auto const r = locateField(*cache_[normalizedIdx.value()], locator); if (!r) - return Unexpected(r.error()); + return std::unexpected(r.error()); return getAnyFieldData(r.value()); } // Subsection: array length getters -Expected +std::expected WasmHostFunctionsImpl::getTxArrayLen(SField const& fname) const { if (fname.fieldType != STI_ARRAY && fname.fieldType != STI_VECTOR256) - return Unexpected(HostFunctionError::NoArray); + return std::unexpected(HostFunctionError::NoArray); auto const* field = ctx_.tx.peekAtPField(fname); if (noField(field)) - return Unexpected(HostFunctionError::FieldNotFound); + return std::unexpected(HostFunctionError::FieldNotFound); return getArrayLen(field); } -Expected +std::expected WasmHostFunctionsImpl::getCurrentLedgerObjArrayLen(SField const& fname) const { if (fname.fieldType != STI_ARRAY && fname.fieldType != STI_VECTOR256) - return Unexpected(HostFunctionError::NoArray); + return std::unexpected(HostFunctionError::NoArray); auto const sle = getCurrentLedgerObj(); if (!sle.has_value()) - return Unexpected(sle.error()); + return std::unexpected(sle.error()); auto const* field = sle.value()->peekAtPField(fname); if (noField(field)) - return Unexpected(HostFunctionError::FieldNotFound); + return std::unexpected(HostFunctionError::FieldNotFound); return getArrayLen(field); } -Expected +std::expected WasmHostFunctionsImpl::getLedgerObjArrayLen(int32_t cacheIdx, SField const& fname) const { if (fname.fieldType != STI_ARRAY && fname.fieldType != STI_VECTOR256) - return Unexpected(HostFunctionError::NoArray); + return std::unexpected(HostFunctionError::NoArray); auto const normalizedIdx = normalizeCacheIndex(cacheIdx); if (!normalizedIdx.has_value()) - return Unexpected(normalizedIdx.error()); + return std::unexpected(normalizedIdx.error()); auto const* field = cache_[normalizedIdx.value()]->peekAtPField(fname); if (noField(field)) - return Unexpected(HostFunctionError::FieldNotFound); + return std::unexpected(HostFunctionError::FieldNotFound); return getArrayLen(field); } // Subsection: nested array length getters -Expected +std::expected WasmHostFunctionsImpl::getTxNestedArrayLen(FieldLocator const& locator) const { auto const r = locateField(ctx_.tx, locator); if (!r) - return Unexpected(r.error()); + return std::unexpected(r.error()); auto const& field = r.value(); return getArrayLen(field); } -Expected +std::expected WasmHostFunctionsImpl::getCurrentLedgerObjNestedArrayLen(FieldLocator const& locator) const { auto const sle = getCurrentLedgerObj(); if (!sle.has_value()) - return Unexpected(sle.error()); + return std::unexpected(sle.error()); auto const r = locateField(*sle.value(), locator); if (!r) - return Unexpected(r.error()); + return std::unexpected(r.error()); auto const& field = r.value(); return getArrayLen(field); } -Expected +std::expected WasmHostFunctionsImpl::getLedgerObjNestedArrayLen(int32_t cacheIdx, FieldLocator const& locator) const { auto const normalizedIdx = normalizeCacheIndex(cacheIdx); if (!normalizedIdx.has_value()) - return Unexpected(normalizedIdx.error()); + return std::unexpected(normalizedIdx.error()); auto const r = locateField(*cache_[normalizedIdx.value()], locator); if (!r) - return Unexpected(r.error()); + return std::unexpected(r.error()); auto const& field = r.value(); return getArrayLen(field); diff --git a/src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp b/src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp index 5d1d14bfac..66d96381c8 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp @@ -1,4 +1,3 @@ -#include #include #include #include @@ -13,208 +12,208 @@ namespace xrpl { -Expected +std::expected WasmHostFunctionsImpl::accountKeylet(AccountID const& account) const { if (!account) - return Unexpected(HostFunctionError::InvalidAccount); + return std::unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::account(account); return Bytes{keylet.key.begin(), keylet.key.end()}; } -Expected +std::expected WasmHostFunctionsImpl::ammKeylet(Asset const& issue1, Asset const& issue2) const { if (issue1 == issue2) - return Unexpected(HostFunctionError::InvalidParams); + return std::unexpected(HostFunctionError::InvalidParams); // note: this should be removed with the MPT DEX amendment if (issue1.holds() || issue2.holds()) - return Unexpected(HostFunctionError::InvalidParams); + return std::unexpected(HostFunctionError::InvalidParams); auto const keylet = keylet::amm(issue1, issue2); return Bytes{keylet.key.begin(), keylet.key.end()}; } -Expected +std::expected WasmHostFunctionsImpl::checkKeylet(AccountID const& account, std::uint32_t seq) const { if (!account) - return Unexpected(HostFunctionError::InvalidAccount); + return std::unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::check(account, seq); return Bytes{keylet.key.begin(), keylet.key.end()}; } -Expected +std::expected WasmHostFunctionsImpl::credentialKeylet( AccountID const& subject, AccountID const& issuer, Slice const& credentialType) const { if (!subject || !issuer) - return Unexpected(HostFunctionError::InvalidAccount); + return std::unexpected(HostFunctionError::InvalidAccount); if (credentialType.empty() || credentialType.size() > kMaxCredentialTypeLength) - return Unexpected(HostFunctionError::InvalidParams); + return std::unexpected(HostFunctionError::InvalidParams); auto const keylet = keylet::credential(subject, issuer, credentialType); return Bytes{keylet.key.begin(), keylet.key.end()}; } -Expected +std::expected WasmHostFunctionsImpl::didKeylet(AccountID const& account) const { if (!account) - return Unexpected(HostFunctionError::InvalidAccount); + return std::unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::did(account); return Bytes{keylet.key.begin(), keylet.key.end()}; } -Expected +std::expected WasmHostFunctionsImpl::delegateKeylet(AccountID const& account, AccountID const& authorize) const { if (!account || !authorize) - return Unexpected(HostFunctionError::InvalidAccount); + return std::unexpected(HostFunctionError::InvalidAccount); if (account == authorize) - return Unexpected(HostFunctionError::InvalidParams); + return std::unexpected(HostFunctionError::InvalidParams); auto const keylet = keylet::delegate(account, authorize); return Bytes{keylet.key.begin(), keylet.key.end()}; } -Expected +std::expected WasmHostFunctionsImpl::depositPreauthKeylet(AccountID const& account, AccountID const& authorize) const { if (!account || !authorize) - return Unexpected(HostFunctionError::InvalidAccount); + return std::unexpected(HostFunctionError::InvalidAccount); if (account == authorize) - return Unexpected(HostFunctionError::InvalidParams); + return std::unexpected(HostFunctionError::InvalidParams); auto const keylet = keylet::depositPreauth(account, authorize); return Bytes{keylet.key.begin(), keylet.key.end()}; } -Expected +std::expected WasmHostFunctionsImpl::escrowKeylet(AccountID const& account, std::uint32_t seq) const { if (!account) - return Unexpected(HostFunctionError::InvalidAccount); + return std::unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::escrow(account, seq); return Bytes{keylet.key.begin(), keylet.key.end()}; } -Expected -WasmHostFunctionsImpl::lineKeylet( +std::expected +WasmHostFunctionsImpl::trustLineKeylet( AccountID const& account1, AccountID const& account2, Currency const& currency) const { if (!account1 || !account2) - return Unexpected(HostFunctionError::InvalidAccount); + return std::unexpected(HostFunctionError::InvalidAccount); if (account1 == account2) - return Unexpected(HostFunctionError::InvalidParams); + return std::unexpected(HostFunctionError::InvalidParams); if (currency.isZero()) - return Unexpected(HostFunctionError::InvalidParams); + return std::unexpected(HostFunctionError::InvalidParams); - auto const keylet = keylet::line(account1, account2, currency); + auto const keylet = keylet::trustLine(account1, account2, currency); return Bytes{keylet.key.begin(), keylet.key.end()}; } -Expected -WasmHostFunctionsImpl::mptIssuanceKeylet(AccountID const& issuer, std::uint32_t seq) const +std::expected +WasmHostFunctionsImpl::mptokenIssuanceKeylet(AccountID const& issuer, std::uint32_t seq) const { if (!issuer) - return Unexpected(HostFunctionError::InvalidAccount); + return std::unexpected(HostFunctionError::InvalidAccount); - auto const keylet = keylet::mptIssuance(seq, issuer); + auto const keylet = keylet::mptokenIssuance(seq, issuer); return Bytes{keylet.key.begin(), keylet.key.end()}; } -Expected +std::expected WasmHostFunctionsImpl::mptokenKeylet(MPTID const& mptid, AccountID const& holder) const { if (!mptid) - return Unexpected(HostFunctionError::InvalidParams); + return std::unexpected(HostFunctionError::InvalidParams); if (!holder) - return Unexpected(HostFunctionError::InvalidAccount); + return std::unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::mptoken(mptid, holder); return Bytes{keylet.key.begin(), keylet.key.end()}; } -Expected -WasmHostFunctionsImpl::nftOfferKeylet(AccountID const& account, std::uint32_t seq) const +std::expected +WasmHostFunctionsImpl::nftokenOfferKeylet(AccountID const& account, std::uint32_t seq) const { if (!account) - return Unexpected(HostFunctionError::InvalidAccount); - auto const keylet = keylet::nftoffer(account, seq); + return std::unexpected(HostFunctionError::InvalidAccount); + auto const keylet = keylet::nftokenOffer(account, seq); return Bytes{keylet.key.begin(), keylet.key.end()}; } -Expected +std::expected WasmHostFunctionsImpl::offerKeylet(AccountID const& account, std::uint32_t seq) const { if (!account) - return Unexpected(HostFunctionError::InvalidAccount); + return std::unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::offer(account, seq); return Bytes{keylet.key.begin(), keylet.key.end()}; } -Expected +std::expected WasmHostFunctionsImpl::oracleKeylet(AccountID const& account, std::uint32_t documentId) const { if (!account) - return Unexpected(HostFunctionError::InvalidAccount); + return std::unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::oracle(account, documentId); return Bytes{keylet.key.begin(), keylet.key.end()}; } -Expected -WasmHostFunctionsImpl::paychanKeylet( +std::expected +WasmHostFunctionsImpl::paychannelKeylet( AccountID const& account, AccountID const& destination, std::uint32_t seq) const { if (!account || !destination) - return Unexpected(HostFunctionError::InvalidAccount); + return std::unexpected(HostFunctionError::InvalidAccount); if (account == destination) - return Unexpected(HostFunctionError::InvalidParams); - auto const keylet = keylet::payChan(account, destination, seq); + return std::unexpected(HostFunctionError::InvalidParams); + auto const keylet = keylet::payChannel(account, destination, seq); return Bytes{keylet.key.begin(), keylet.key.end()}; } -Expected +std::expected WasmHostFunctionsImpl::permissionedDomainKeylet(AccountID const& account, std::uint32_t seq) const { if (!account) - return Unexpected(HostFunctionError::InvalidAccount); + return std::unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::permissionedDomain(account, seq); return Bytes{keylet.key.begin(), keylet.key.end()}; } -Expected -WasmHostFunctionsImpl::signersKeylet(AccountID const& account) const +std::expected +WasmHostFunctionsImpl::signerListKeylet(AccountID const& account) const { if (!account) - return Unexpected(HostFunctionError::InvalidAccount); - auto const keylet = keylet::signers(account); + return std::unexpected(HostFunctionError::InvalidAccount); + auto const keylet = keylet::signerList(account); return Bytes{keylet.key.begin(), keylet.key.end()}; } -Expected +std::expected WasmHostFunctionsImpl::ticketKeylet(AccountID const& account, std::uint32_t seq) const { if (!account) - return Unexpected(HostFunctionError::InvalidAccount); - auto const keylet = keylet::kTicket(account, seq); + return std::unexpected(HostFunctionError::InvalidAccount); + auto const keylet = keylet::ticket(account, seq); return Bytes{keylet.key.begin(), keylet.key.end()}; } -Expected +std::expected WasmHostFunctionsImpl::vaultKeylet(AccountID const& account, std::uint32_t seq) const { if (!account) - return Unexpected(HostFunctionError::InvalidAccount); + return std::unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::vault(account, seq); return Bytes{keylet.key.begin(), keylet.key.end()}; } diff --git a/src/libxrpl/tx/wasm/HostFuncImplLedgerHeader.cpp b/src/libxrpl/tx/wasm/HostFuncImplLedgerHeader.cpp index 837112389a..49a4c3cdf0 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplLedgerHeader.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplLedgerHeader.cpp @@ -1,4 +1,3 @@ -#include #include #include #include @@ -14,37 +13,37 @@ namespace xrpl { // SECTION: LEDGER HEADER FUNCTIONS // ========================================================= -Expected +std::expected WasmHostFunctionsImpl::getLedgerSqn() const { return ctx_.view().seq(); } -Expected +std::expected WasmHostFunctionsImpl::getParentLedgerTime() const { return ctx_.view().parentCloseTime().time_since_epoch().count(); } -Expected +std::expected WasmHostFunctionsImpl::getParentLedgerHash() const { return ctx_.view().header().parentHash; } -Expected +std::expected WasmHostFunctionsImpl::getBaseFee() const { return ctx_.view().fees().base.drops(); } -Expected +std::expected WasmHostFunctionsImpl::isAmendmentEnabled(uint256 const& amendmentId) const { return ctx_.view().rules().enabled(amendmentId); } -Expected +std::expected WasmHostFunctionsImpl::isAmendmentEnabled(std::string_view const& amendmentName) const { auto const& table = ctx_.registry.get().getAmendmentTable(); diff --git a/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp b/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp index 30d6dd5eff..118172c247 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp @@ -1,4 +1,3 @@ -#include #include #include #include @@ -16,59 +15,59 @@ namespace xrpl { // SECTION: NFT UTILS // ========================================================= -Expected +std::expected WasmHostFunctionsImpl::getNFT(AccountID const& account, uint256 const& nftId) const { if (!account) - return Unexpected(HostFunctionError::InvalidAccount); + return std::unexpected(HostFunctionError::InvalidAccount); if (!nftId) - return Unexpected(HostFunctionError::InvalidParams); + return std::unexpected(HostFunctionError::InvalidParams); auto obj = nft::findToken(ctx_.view(), account, nftId); if (!obj) - return Unexpected(HostFunctionError::LedgerObjNotFound); + return std::unexpected(HostFunctionError::LedgerObjNotFound); auto objUri = obj->at(~sfURI); if (!objUri) - return Unexpected(HostFunctionError::FieldNotFound); + return std::unexpected(HostFunctionError::FieldNotFound); Slice const s = objUri->value(); return Bytes(s.begin(), s.end()); } -Expected +std::expected WasmHostFunctionsImpl::getNFTIssuer(uint256 const& nftId) const { auto const issuer = nft::getIssuer(nftId); if (!issuer) - return Unexpected(HostFunctionError::InvalidParams); + return std::unexpected(HostFunctionError::InvalidParams); return Bytes{issuer.begin(), issuer.end()}; } -Expected +std::expected WasmHostFunctionsImpl::getNFTTaxon(uint256 const& nftId) const { return nft::toUInt32(nft::getTaxon(nftId)); } -Expected +std::expected WasmHostFunctionsImpl::getNFTFlags(uint256 const& nftId) const { return nft::getFlags(nftId); } -Expected +std::expected WasmHostFunctionsImpl::getNFTTransferFee(uint256 const& nftId) const { return nft::getTransferFee(nftId); } -Expected -WasmHostFunctionsImpl::getNFTSerial(uint256 const& nftId) const +std::expected +WasmHostFunctionsImpl::getNFTSequence(uint256 const& nftId) const { - return nft::getSerial(nftId); + return nft::getSequence(nftId); } } // namespace xrpl diff --git a/src/libxrpl/tx/wasm/HostFuncImplTrace.cpp b/src/libxrpl/tx/wasm/HostFuncImplTrace.cpp index 0f9ee2e64c..fea608aa77 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplTrace.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplTrace.cpp @@ -1,4 +1,3 @@ -#include #include #include #include @@ -18,7 +17,7 @@ namespace xrpl { -Expected +std::expected WasmHostFunctionsImpl::trace(std::string_view const& msg, Slice const& data, bool asHex) const { if (!asHex) @@ -40,28 +39,28 @@ WasmHostFunctionsImpl::trace(std::string_view const& msg, Slice const& data, boo return 0; } -Expected +std::expected WasmHostFunctionsImpl::traceNum(std::string_view const& msg, int64_t data) const { log(msg, [data] { return data; }); return 0; } -Expected +std::expected WasmHostFunctionsImpl::traceAccount(std::string_view const& msg, AccountID const& account) const { log(msg, [&account] { return toBase58(account); }); return 0; } -Expected +std::expected WasmHostFunctionsImpl::traceFloat(std::string_view const& msg, Slice const& data) const { log(msg, [&data] { return wasm_float::floatToString(data); }); return 0; } -Expected +std::expected WasmHostFunctionsImpl::traceAmount(std::string_view const& msg, STAmount const& amount) const { log(msg, [&amount] { return amount.getFullText(); }); diff --git a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp index af8bb637d4..9788bce345 100644 --- a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp +++ b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp @@ -1,6 +1,5 @@ #include -#include #include #include #include @@ -69,7 +68,7 @@ checkGas(WasmRuntimeWrapper& rt, int64_t delta) // Transfer limit is a separate soft budget: exceeding it is a normal guest-facing // return code, not a trap. Only a failed setTransferLimit (an xrpld bug) throws. -static inline Expected +static inline std::expected checkTransfer(WasmRuntimeWrapper& rt, int64_t delta) { auto const transLimit = rt.getTransferLimit(); @@ -79,7 +78,7 @@ checkTransfer(WasmRuntimeWrapper& rt, int64_t delta) Throw(std::string(hfErrInternal)); // LCOV_EXCL_LINE if (transLimit < delta) - return Unexpected(HostFunctionError::OutOfTransferLimit); + return std::unexpected(HostFunctionError::OutOfTransferLimit); return x; } @@ -147,35 +146,35 @@ setData( return srcSize; } -static Expected +static std::expected getDataSlice(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& i) { int64_t const ptr = params->data[i].of.i32; int64_t const size = params->data[i + 1].of.i32; i += 2; if (ptr < 0 || size < 0) - return Unexpected(HostFunctionError::InvalidParams); + return std::unexpected(HostFunctionError::InvalidParams); if (size == 0) return Slice(); if (size > kMaxWasmDataLength) - return Unexpected(HostFunctionError::DataFieldTooLarge); + return std::unexpected(HostFunctionError::DataFieldTooLarge); auto const memory = runtime.getMem(); // LCOV_EXCL_START if (memory.s == 0u) - return Unexpected(HostFunctionError::NoMemExported); + return std::unexpected(HostFunctionError::NoMemExported); // LCOV_EXCL_STOP if (std::cmp_greater(ptr + size, memory.s)) - return Unexpected(HostFunctionError::PointerOutOfBounds); + return std::unexpected(HostFunctionError::PointerOutOfBounds); Slice data(memory.p + ptr, size); return data; } -static Expected +static std::expected getDataInt32(WasmRuntimeWrapper const&, wasm_val_vec_t const* params, int32_t& i) { auto const result = params->data[i].of.i32; @@ -183,7 +182,7 @@ getDataInt32(WasmRuntimeWrapper const&, wasm_val_vec_t const* params, int32_t& i return result; } -static Expected +static std::expected getDataInt64(WasmRuntimeWrapper const&, wasm_val_vec_t const* params, int32_t& i) { auto const result = params->data[i].of.i64; @@ -192,15 +191,15 @@ getDataInt64(WasmRuntimeWrapper const&, wasm_val_vec_t const* params, int32_t& i } template -static Expected +static std::expected getDataUnsigned(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& i) { static_assert(std::is_unsigned_v); auto const r = getDataSlice(runtime, params, i); if (!r) - return Unexpected(r.error()); + return std::unexpected(r.error()); if (r->size() != sizeof(T)) - return Unexpected(HostFunctionError::InvalidParams); + return std::unexpected(HostFunctionError::InvalidParams); T x; uintptr_t const p = reinterpret_cast(r->data()); @@ -217,89 +216,89 @@ getDataUnsigned(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32 return x; } -static Expected +static std::expected getDataUInt32(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& i) { return getDataUnsigned(runtime, params, i); } -static Expected +static std::expected getDataUInt64(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& i) { return getDataUnsigned(runtime, params, i); } -static Expected +static std::expected getDataSField(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& i) { auto const& m = SField::getKnownCodeToField(); auto const it = m.find(params->data[i].of.i32); i++; if (it == m.end()) - return Unexpected(HostFunctionError::InvalidField); + return std::unexpected(HostFunctionError::InvalidField); return *it->second; } -static Expected +static std::expected getDataUInt256(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& i) { auto const slice = getDataSlice(runtime, params, i); if (!slice) - return Unexpected(slice.error()); + return std::unexpected(slice.error()); if (slice->size() != uint256::size()) - return Unexpected(HostFunctionError::InvalidParams); + return std::unexpected(HostFunctionError::InvalidParams); if (auto t = checkTransfer(runtime, uint256::size()); !t) - return Unexpected(t.error()); + return std::unexpected(t.error()); return uint256::fromVoid(slice->data()); } -static Expected +static std::expected getDataAccountID(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& i) { auto const slice = getDataSlice(runtime, params, i); if (!slice) - return Unexpected(slice.error()); + return std::unexpected(slice.error()); if (slice->size() != AccountID::size()) - return Unexpected(HostFunctionError::InvalidParams); + return std::unexpected(HostFunctionError::InvalidParams); if (auto t = checkTransfer(runtime, AccountID::size()); !t) - return Unexpected(t.error()); + return std::unexpected(t.error()); return AccountID::fromVoid(slice->data()); } -static Expected +static std::expected getDataCurrency(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& i) { auto const slice = getDataSlice(runtime, params, i); if (!slice) - return Unexpected(slice.error()); + return std::unexpected(slice.error()); if (slice->size() != Currency::size()) - return Unexpected(HostFunctionError::InvalidParams); + return std::unexpected(HostFunctionError::InvalidParams); if (auto t = checkTransfer(runtime, Currency::size()); !t) - return Unexpected(t.error()); + return std::unexpected(t.error()); return Currency::fromVoid(slice->data()); } -static Expected +static std::expected getDataAsset(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& i) { auto const slice = getDataSlice(runtime, params, i); if (!slice) - return Unexpected(slice.error()); + return std::unexpected(slice.error()); if (slice->size() == MPTID::size()) { if (auto t = checkTransfer(runtime, slice->size()); !t) - return Unexpected(t.error()); + return std::unexpected(t.error()); auto const mptid = MPTID::fromVoid(slice->data()); return Asset{mptid}; @@ -308,12 +307,12 @@ getDataAsset(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& if (slice->size() == Currency::size()) { if (auto t = checkTransfer(runtime, slice->size()); !t) - return Unexpected(t.error()); + return std::unexpected(t.error()); auto const currency = Currency::fromVoid(slice->data()); auto const issue = Issue{currency, xrpAccount()}; if (!issue.native()) - return Unexpected(HostFunctionError::InvalidParams); + return std::unexpected(HostFunctionError::InvalidParams); return Asset{issue}; } @@ -321,41 +320,41 @@ getDataAsset(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& if (slice->size() == (Currency::size() + AccountID::size())) { if (auto t = checkTransfer(runtime, slice->size()); !t) - return Unexpected(t.error()); + return std::unexpected(t.error()); auto const issue = Issue( Currency::fromVoid(slice->data()), AccountID::fromVoid(slice->data() + Currency::size())); if (issue.native()) - return Unexpected(HostFunctionError::InvalidParams); + return std::unexpected(HostFunctionError::InvalidParams); return Asset{issue}; } - return Unexpected(HostFunctionError::InvalidParams); + return std::unexpected(HostFunctionError::InvalidParams); } -static Expected +static std::expected getDataString(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& i) { auto const slice = getDataSlice(runtime, params, i); if (!slice) - return Unexpected(slice.error()); + return std::unexpected(slice.error()); return std::string_view(reinterpret_cast(slice->data()), slice->size()); } -static Expected +static std::expected getDataLocator(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& i) { static_assert(kMaxWasmDataLength % sizeof(int32_t) == 0); auto const slice = getDataSlice(runtime, params, i); if (!slice) - return Unexpected(slice.error()); + return std::unexpected(slice.error()); if (slice->empty() || ((slice->size() & 3) != 0u)) // must be multiple of 4 - return Unexpected(HostFunctionError::LocatorMalformed); + return std::unexpected(HostFunctionError::LocatorMalformed); uint32_t const locSize = slice->size() / sizeof(int32_t); uintptr_t const p = reinterpret_cast(slice->data()); @@ -368,7 +367,7 @@ getDataLocator(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_ // guest-facing code when the transfer limit is exceeded. checkGas(runtime, unalignedGas); if (auto t = checkTransfer(runtime, slice->size()); !t) - return Unexpected(t.error()); + return std::unexpected(t.error()); std::vector locBuf(locSize); memcpy(&locBuf[0], slice->data(), slice->size()); @@ -403,7 +402,7 @@ returnResult( WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, wasm_val_vec_t* results, - Expected const& res, + std::expected const& res, int32_t index) { if (!res) @@ -979,7 +978,7 @@ escrowKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) } wasm_trap_t* -lineKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) +trustLineKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { int index = 0; WasmRuntimeWrapper& runtime = hf.getRT(); @@ -1000,12 +999,12 @@ lineKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) runtime, params, results, - hf.lineKeylet(acc1.value(), acc2.value(), currency.value()), + hf.trustLineKeylet(acc1.value(), acc2.value(), currency.value()), index); } wasm_trap_t* -mptIssuanceKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) +mptokenIssuanceKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { int index = 0; WasmRuntimeWrapper& runtime = hf.getRT(); @@ -1019,7 +1018,7 @@ mptIssuanceKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) return hfResult(results, seq.error()); return returnResult( - runtime, params, results, hf.mptIssuanceKeylet(acc.value(), seq.value()), index); + runtime, params, results, hf.mptokenIssuanceKeylet(acc.value(), seq.value()), index); } wasm_trap_t* @@ -1044,7 +1043,7 @@ mptokenKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) } wasm_trap_t* -nftOfferKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) +nftokenOfferKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { int index = 0; WasmRuntimeWrapper& runtime = hf.getRT(); @@ -1058,7 +1057,7 @@ nftOfferKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) return hfResult(results, seq.error()); return returnResult( - runtime, params, results, hf.nftOfferKeylet(acc.value(), seq.value()), index); + runtime, params, results, hf.nftokenOfferKeylet(acc.value(), seq.value()), index); } wasm_trap_t* @@ -1096,7 +1095,7 @@ oracleKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) } wasm_trap_t* -paychanKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) +paychannelKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { int index = 0; WasmRuntimeWrapper& runtime = hf.getRT(); @@ -1114,7 +1113,11 @@ paychanKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) return hfResult(results, seq.error()); return returnResult( - runtime, params, results, hf.paychanKeylet(acc.value(), dest.value(), seq.value()), index); + runtime, + params, + results, + hf.paychannelKeylet(acc.value(), dest.value(), seq.value()), + index); } wasm_trap_t* @@ -1136,7 +1139,7 @@ permissionedDomainKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) } wasm_trap_t* -signersKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) +signerListKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { int index = 0; WasmRuntimeWrapper& runtime = hf.getRT(); @@ -1145,7 +1148,7 @@ signersKeylet_wrap(WASM_SECONDARY_CB_PARAMS_LIST) if (!acc) return hfResult(results, acc.error()); - return returnResult(runtime, params, results, hf.signersKeylet(acc.value()), index); + return returnResult(runtime, params, results, hf.signerListKeylet(acc.value()), index); } wasm_trap_t* @@ -1252,7 +1255,7 @@ getNFTTransferFee_wrap(WASM_SECONDARY_CB_PARAMS_LIST) } wasm_trap_t* -getNFTSerial_wrap(WASM_SECONDARY_CB_PARAMS_LIST) +getNFTSequence_wrap(WASM_SECONDARY_CB_PARAMS_LIST) { int index = 0; WasmRuntimeWrapper& runtime = hf.getRT(); @@ -1261,7 +1264,7 @@ getNFTSerial_wrap(WASM_SECONDARY_CB_PARAMS_LIST) if (!nftId) return hfResult(results, nftId.error()); - return returnResult(runtime, params, results, hf.getNFTSerial(*nftId), index); + return returnResult(runtime, params, results, hf.getNFTSequence(*nftId), index); } wasm_trap_t* @@ -1362,7 +1365,7 @@ traceAmount_wrap(WASM_SECONDARY_CB_PARAMS_LIST) std::optional amount; try { - amount = STAmount(serialIter, kSfGeneric); + amount = STAmount(serialIter, sfGeneric); } catch (std::exception const&) { @@ -1429,7 +1432,7 @@ floatFromSTAmount_wrap(WASM_SECONDARY_CB_PARAMS_LIST) std::optional amount; try { - amount = STAmount(serialIter, kSfGeneric); + amount = STAmount(serialIter, sfGeneric); } catch (std::exception const&) { @@ -1461,7 +1464,7 @@ floatFromSTNumber_wrap(WASM_SECONDARY_CB_PARAMS_LIST) std::optional num; try { - num = STNumber(serialIter, kSfGeneric); + num = STNumber(serialIter, sfGeneric); } catch (std::exception const&) { diff --git a/src/libxrpl/tx/wasm/WasmVM.cpp b/src/libxrpl/tx/wasm/WasmVM.cpp index 0a2dcbde65..141da2dc81 100644 --- a/src/libxrpl/tx/wasm/WasmVM.cpp +++ b/src/libxrpl/tx/wasm/WasmVM.cpp @@ -1,6 +1,5 @@ #include -#include #include #include #include // IWYU pragma: keep @@ -62,15 +61,15 @@ setCommonHostFunctions(HostFunctions& hfs, ImportVec& i) WASM_IMPORT_FUNC2(i, depositPreauthKeylet, "deposit_preauth_id", hfs, 350); WASM_IMPORT_FUNC2(i, didKeylet, "did_id", hfs, 350); WASM_IMPORT_FUNC2(i, escrowKeylet, "escrow_id", hfs, 350); - WASM_IMPORT_FUNC2(i, lineKeylet, "trustline_id", hfs, 400); - WASM_IMPORT_FUNC2(i, mptIssuanceKeylet, "mpt_issuance_id", hfs, 350); + WASM_IMPORT_FUNC2(i, trustLineKeylet, "trustline_id", hfs, 400); + WASM_IMPORT_FUNC2(i, mptokenIssuanceKeylet, "mptoken_issuance_id", hfs, 350); WASM_IMPORT_FUNC2(i, mptokenKeylet, "mptoken_id", hfs, 500); - WASM_IMPORT_FUNC2(i, nftOfferKeylet, "nft_offer_id", hfs, 350); + WASM_IMPORT_FUNC2(i, nftokenOfferKeylet, "nft_offer_id", hfs, 350); WASM_IMPORT_FUNC2(i, offerKeylet, "offer_id", hfs, 350); WASM_IMPORT_FUNC2(i, oracleKeylet, "oracle_id", hfs, 350); - WASM_IMPORT_FUNC2(i, paychanKeylet, "paychan_id", hfs, 350); + WASM_IMPORT_FUNC2(i, paychannelKeylet, "paychannel_id", hfs, 350); WASM_IMPORT_FUNC2(i, permissionedDomainKeylet, "permissioned_domain_id", hfs, 350); - WASM_IMPORT_FUNC2(i, signersKeylet, "signers_id", hfs, 350); + WASM_IMPORT_FUNC2(i, signerListKeylet, "signer_list_id", hfs, 350); WASM_IMPORT_FUNC2(i, ticketKeylet, "ticket_id", hfs, 350); WASM_IMPORT_FUNC2(i, vaultKeylet, "vault_id", hfs, 350); @@ -79,7 +78,7 @@ setCommonHostFunctions(HostFunctions& hfs, ImportVec& i) WASM_IMPORT_FUNC2(i, getNFTTaxon, "nft_taxon", hfs, 60); WASM_IMPORT_FUNC2(i, getNFTFlags, "nft_flags", hfs, 60); WASM_IMPORT_FUNC2(i, getNFTTransferFee, "nft_xfer_fee", hfs, 60); - WASM_IMPORT_FUNC2(i, getNFTSerial, "nft_serial", hfs, 60); + WASM_IMPORT_FUNC2(i, getNFTSequence, "nft_seq", hfs, 60); WASM_IMPORT_FUNC (i, trace, hfs, 500); WASM_IMPORT_FUNC2(i, traceNum, "trace_num", hfs, 500); @@ -115,7 +114,7 @@ createWasmImport(HostFunctions& hfs) return i; } -Expected +std::expected runEscrowWasm( Bytes const& wasmCode, HostFunctions& hfs, @@ -138,7 +137,7 @@ runEscrowWasm( // Carries the TER (tecOUT_OF_GAS / tecFAILED_PROCESSING / tecINTERNAL / // temBAD_AMOUNT) and, when meaningful, the gas consumed. The caller is // responsible for writing that gas to tx metadata. - return Unexpected(ret.error()); + return std::unexpected(ret.error()); } #ifdef DEBUG_OUTPUT @@ -177,7 +176,7 @@ WasmEngine::instance() return e; } -Expected, WasmTER> +std::expected, WasmTER> WasmEngine::run( Bytes const& wasmCode, HostFunctions& hfs, diff --git a/src/libxrpl/tx/wasm/WasmiVM.cpp b/src/libxrpl/tx/wasm/WasmiVM.cpp index 57968d311e..a1e3a0aee8 100644 --- a/src/libxrpl/tx/wasm/WasmiVM.cpp +++ b/src/libxrpl/tx/wasm/WasmiVM.cpp @@ -1,6 +1,5 @@ #include -#include #include #include #include @@ -757,7 +756,7 @@ checkImports(ImportVec const& imports, HostFunctions* hfs) } } -Expected, WasmTER> +std::expected, WasmTER> WasmiEngine::run( Bytes const& wasmCode, HostFunctions& hfs, @@ -768,7 +767,7 @@ WasmiEngine::run( beast::Journal j) { if (gas <= 0) - return Unexpected(WasmTER{.ter = temBAD_AMOUNT, .cost = std::nullopt}); + return std::unexpected(WasmTER{.ter = temBAD_AMOUNT, .cost = std::nullopt}); try { @@ -787,10 +786,10 @@ WasmiEngine::run( // LCOV_EXCL_STOP // An exception escaping the engine is an xrpld-side fault -> tecINTERNAL, // no gas. Genuine wasm faults don't throw; they surface as traps in runHlp. - return Unexpected(WasmTER{.ter = tecINTERNAL, .cost = std::nullopt}); + return std::unexpected(WasmTER{.ter = tecINTERNAL, .cost = std::nullopt}); } -Expected, WasmTER> +std::expected, WasmTER> WasmiEngine::runHlp( Bytes const& wasmCode, HostFunctions& hfs, @@ -841,7 +840,7 @@ WasmiEngine::runHlp( // call() already classified the trap (see WasmiEngine::call). // tecINTERNAL is an xrpld-side bug: report no gas. if (*res.ter == tecINTERNAL) - return Unexpected(WasmTER{.ter = tecINTERNAL, .cost = std::nullopt}); + return std::unexpected(WasmTER{.ter = tecINTERNAL, .cost = std::nullopt}); // Out-of-gas / wasm faults report gas (caller writes it to metadata). // Force fuel to 0 on out-of-gas so cost is the full limit (wasmi leaves @@ -849,7 +848,7 @@ WasmiEngine::runHlp( if (*res.ter == tecOUT_OF_GAS) iw.setGas(0); - return Unexpected(WasmTER{.ter = *res.ter, .cost = gas - moduleWrap_->getGas()}); + return std::unexpected(WasmTER{.ter = *res.ter, .cost = gas - moduleWrap_->getGas()}); } if (res.r.empty()) diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 377a7c652a..40718943ad 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -796,22 +796,22 @@ struct HostFuncImpl_test : public beast::unit_test::Suite std::to_string(result[0].of.i32)); } - // hfs.getTxField(kSfInvalid); + // hfs.getTxField(sfInvalid); { WasmValVec params(3), result(1); auto* trap = - ww(&import.at("tx_field"), params, result, kSfInvalid.getCode(), 0, 256); + ww(&import.at("tx_field"), params, result, sfInvalid.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( result[0].of.i32 == static_cast(HostFunctionError::FieldNotFound)); } - // hfs.getTxField(kSfGeneric); + // hfs.getTxField(sfGeneric); { WasmValVec params(3), result(1); auto* trap = - ww(&import.at("tx_field"), params, result, kSfGeneric.getCode(), 0, 256); + ww(&import.at("tx_field"), params, result, sfGeneric.getCode(), 0, 256); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT( @@ -1355,17 +1355,17 @@ struct HostFuncImpl_test : public beast::unit_test::Suite HostFunctionError::InvalidField); // hfs.getTxNestedField(locator); - // Locator for negative base sfield code (-1 = kSfInvalid, exists in map but not in tx) + // Locator for negative base sfield code (-1 = sfInvalid, exists in map but not in tx) expectError( - {-1, // kSfInvalid's field code + {-1, // sfInvalid's field code 0, sfAccount.getCode()}, HostFunctionError::FieldNotFound); // hfs.getTxNestedField(locator); - // Locator for zero base sfield code (0 = kSfGeneric, exists in map but not in tx) + // Locator for zero base sfield code (0 = sfGeneric, exists in map but not in tx) expectError( - {0, // kSfGeneric's field code + {0, // sfGeneric's field code 0, sfAccount.getCode()}, HostFunctionError::FieldNotFound); @@ -1380,7 +1380,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // Locator for negative nested sfield code in STObject context // (sfMemos[0] is an STObject, then -1 is looked up as SField) expectError( - {sfMemos.getCode(), 0, -1}, // -1 = kSfInvalid, exists in map but not in memo object + {sfMemos.getCode(), 0, -1}, // -1 = sfInvalid, exists in map but not in memo object HostFunctionError::FieldNotFound); // hfs.getTxNestedField(locator); @@ -1434,7 +1434,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite ApplyContext ac = createApplyContext(env, ov); // Find the signer ledger object - auto const signerKeylet = keylet::signers(env.master.id()); + auto const signerKeylet = keylet::signerList(env.master.id()); BEAST_EXPECT(env.le(signerKeylet)); VirtualRuntime vrt; @@ -1581,7 +1581,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite hfs.setRT(vrt); // Cache the SignerList ledger object in slot 1 - auto const signerListKeylet = keylet::signers(env.master.id()); + auto const signerListKeylet = keylet::signerList(env.master.id()); // hfs.cacheLedgerObj(signerListKeylet.key, 1); { WasmValVec params(3), result(1); @@ -1884,7 +1884,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const signerKeylet = keylet::signers(env.master.id()); + auto const signerKeylet = keylet::signerList(env.master.id()); VirtualRuntime vrt; WasmHostFunctionsImpl hfs(ac, signerKeylet); @@ -1963,7 +1963,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite auto import = xrpl::createWasmImport(hfs); hfs.setRT(vrt); - auto const signerListKeylet = keylet::signers(env.master.id()); + auto const signerListKeylet = keylet::signerList(env.master.id()); // hfs.cacheLedgerObj(signerListKeylet.key, 1); { WasmValVec params(3), result(1); @@ -2109,7 +2109,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite OpenView ov{*env.current()}; ApplyContext ac = createApplyContext(env, ov); - auto const signerKeylet = keylet::signers(env.master.id()); + auto const signerKeylet = keylet::signerList(env.master.id()); VirtualRuntime vrt; WasmHostFunctionsImpl hfs(ac, signerKeylet); @@ -2205,7 +2205,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite auto import = xrpl::createWasmImport(hfs); hfs.setRT(vrt); - auto const signerListKeylet = keylet::signers(env.master.id()); + auto const signerListKeylet = keylet::signerList(env.master.id()); // hfs.cacheLedgerObj(signerListKeylet.key, 1); { WasmValVec params(3), result(1); @@ -2760,7 +2760,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite Currency const usd = toCurrency("USD"); { - auto const expected = keylet::line(masterID, alice.id(), usd); + auto const expected = keylet::trustLine(masterID, alice.id(), usd); WasmValVec params(8), result(1); auto* trap = ww(&imp.at("trustline_id"), params, result, masterID, alice.id(), usd, 1024, 32); @@ -2803,7 +2803,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } { - auto const expected = keylet::mptIssuance(1u, masterID); + auto const expected = keylet::mptokenIssuance(1u, masterID); WasmValVec params(6), result(1); auto* trap = ww(&imp.at("mpt_issuance_id"), params, result, masterID, toBytes(1u), 1024, 32); @@ -2843,7 +2843,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } { - auto const expected = keylet::nftoffer(masterID, 1u); + auto const expected = keylet::nftokenOffer(masterID, 1u); WasmValVec params(6), result(1); auto* trap = ww(&imp.at("nft_offer_id"), params, result, masterID, toBytes(1u), 1024, 32); @@ -2895,7 +2895,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } { - auto const expected = keylet::payChan(masterID, alice.id(), 1u); + auto const expected = keylet::payChannel(masterID, alice.id(), 1u); WasmValVec params(8), result(1); auto* trap = ww( &imp.at("paychan_id"), params, result, masterID, alice.id(), toBytes(1u), 1024, 32); @@ -2963,7 +2963,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } { - auto const expected = keylet::signers(masterID); + auto const expected = keylet::signerList(masterID); WasmValVec params(4), result(1); auto* trap = ww(&imp.at("signers_id"), params, result, masterID, 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) @@ -2979,7 +2979,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } { - auto const expected = keylet::kTicket(masterID, 1u); + auto const expected = keylet::ticket(masterID, 1u); WasmValVec params(6), result(1); auto* trap = ww(&imp.at("ticket_id"), params, result, masterID, toBytes(1u), 1024, 32); if (BEAST_EXPECT(!trap && result[0].kind == WASM_I32 && result[0].of.i32 == 32)) @@ -3352,7 +3352,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite void testGetNFTSerial() { - testcase("getNFTSerial"); + testcase("getNFTSequence"); using namespace test::jtx; Env env{*this}; @@ -3374,7 +3374,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite hfs.setRT(vrt); { - // hfs.getNFTSerial(nftId); + // hfs.getNFTSequence(nftId); vrt.setBytes(0, nftId.data(), uint256::size()); WasmValVec params(4), result(1); auto* trap = @@ -3395,7 +3395,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // Should return 0 for zero NFT id { - // hfs.getNFTSerial(uint256()); + // hfs.getNFTSequence(uint256()); uint256 zeroId; vrt.setBytes(0, zeroId.data(), uint256::size()); WasmValVec params(4), result(1); diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index 9d8bc94231..bc24c26932 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -29,7 +29,7 @@ public: { } - Expected + std::expected getLedgerSqn() const override { return env_.current()->seq(); @@ -51,49 +51,49 @@ public: data_ = Bytes{t.begin(), t.end()}; } - Expected + std::expected getLedgerSqn() const override { return 12345; } - Expected + std::expected getParentLedgerTime() const override { return 67890; } - Expected + std::expected getParentLedgerHash() const override { return env_.current()->header().parentHash; } - Expected + std::expected getBaseFee() const override { return 10; } - Expected + std::expected isAmendmentEnabled(uint256 const& amendmentId) const override { return 1; } - Expected + std::expected isAmendmentEnabled(std::string_view const& amendmentName) const override { return 1; } - Expected + std::expected cacheLedgerObj(uint256 const& objId, int32_t cacheIdx) override { return 1; } - Expected + std::expected getTxField(SField const& fname) const override { if (fname == sfAccount) @@ -110,7 +110,7 @@ public: { auto const x = getLedgerSqn(); if (!x) - return Unexpected(x.error()); + return std::unexpected(x.error()); std::uint32_t const data = x.value(); auto const* b = reinterpret_cast(&data); auto const* e = reinterpret_cast(&data + 1); @@ -120,7 +120,7 @@ public: return Bytes(); } - Expected + std::expected getCurrentLedgerObjField(SField const& fname) const override { auto const& sn = fname.getName(); @@ -135,10 +135,10 @@ public: return Bytes{s.begin(), s.end()}; } - return Unexpected(HostFunctionError::Unimplemented); + return std::unexpected(HostFunctionError::Unimplemented); } - Expected + std::expected getLedgerObjField(int32_t, SField const& fname) const override { if (fname == sfBalance) @@ -154,7 +154,7 @@ public: return data_; } - Expected + std::expected getTxNestedField(FieldLocator const& locator) const override { if (locator.size() == 1) @@ -171,7 +171,7 @@ public: return Bytes(&a[0], &a[sizeof(a)]); } - Expected + std::expected getCurrentLedgerObjNestedField(FieldLocator const& locator) const override { if (locator.size() == 1) @@ -188,7 +188,7 @@ public: return Bytes(&a[0], &a[sizeof(a)]); } - Expected + std::expected getLedgerObjNestedField(int32_t cacheIdx, FieldLocator const& locator) const override { if (locator.size() == 1) @@ -205,154 +205,154 @@ public: return Bytes(&a[0], &a[sizeof(a)]); } - Expected + std::expected getTxArrayLen(SField const& fname) const override { return 32; } - Expected + std::expected getCurrentLedgerObjArrayLen(SField const& fname) const override { return 32; } - Expected + std::expected getLedgerObjArrayLen(int32_t cacheIdx, SField const& fname) const override { return 32; } - Expected + std::expected getTxNestedArrayLen(FieldLocator const& locator) const override { return 32; } - Expected + std::expected getCurrentLedgerObjNestedArrayLen(FieldLocator const& locator) const override { return 32; } - Expected + std::expected getLedgerObjNestedArrayLen(int32_t cacheIdx, FieldLocator const& locator) const override { return 32; } - Expected + std::expected updateData(Slice const& data) override { return data.size(); } - Expected + std::expected checkSignature(Slice const& message, Slice const& signature, Slice const& pubkey) const override { return 1; } - Expected + std::expected computeSha512HalfHash(Slice const& data) const override { return env_.current()->header().parentHash; } - Expected + std::expected accountKeylet(AccountID const& account) const override { if (!account) - return Unexpected(HostFunctionError::InvalidAccount); + return std::unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::account(account); return Bytes{keylet.key.begin(), keylet.key.end()}; } - Expected + std::expected ammKeylet(Asset const& issue1, Asset const& issue2) const override { if (issue1 == issue2) - return Unexpected(HostFunctionError::InvalidParams); + return std::unexpected(HostFunctionError::InvalidParams); if (issue1.holds() || issue2.holds()) - return Unexpected(HostFunctionError::InvalidParams); + return std::unexpected(HostFunctionError::InvalidParams); auto const keylet = keylet::amm(issue1, issue2); return Bytes{keylet.key.begin(), keylet.key.end()}; } - Expected + std::expected checkKeylet(AccountID const& account, std::uint32_t seq) const override { if (!account) - return Unexpected(HostFunctionError::InvalidAccount); + return std::unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::check(account, seq); return Bytes{keylet.key.begin(), keylet.key.end()}; } - Expected + std::expected credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) const override { if (!subject || !issuer || credentialType.empty() || credentialType.size() > kMaxCredentialTypeLength) - return Unexpected(HostFunctionError::InvalidAccount); + return std::unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::credential(subject, issuer, credentialType); return Bytes{keylet.key.begin(), keylet.key.end()}; } - Expected + std::expected escrowKeylet(AccountID const& account, std::uint32_t seq) const override { if (!account) - return Unexpected(HostFunctionError::InvalidAccount); + return std::unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::escrow(account, seq); return Bytes{keylet.key.begin(), keylet.key.end()}; } - Expected + std::expected oracleKeylet(AccountID const& account, std::uint32_t documentId) const override { if (!account) - return Unexpected(HostFunctionError::InvalidAccount); + return std::unexpected(HostFunctionError::InvalidAccount); auto const keylet = keylet::oracle(account, documentId); return Bytes{keylet.key.begin(), keylet.key.end()}; } - Expected + std::expected getNFT(AccountID const& account, uint256 const& nftId) const override { if (!account || !nftId) - return Unexpected(HostFunctionError::InvalidParams); + return std::unexpected(HostFunctionError::InvalidParams); std::string s = "https://ripple.com"; return Bytes(s.begin(), s.end()); } - Expected + std::expected getNFTIssuer(uint256 const& nftId) const override { return Bytes(accountID_.begin(), accountID_.end()); } - Expected + std::expected getNFTTaxon(uint256 const& nftId) const override { return 4; } - Expected + std::expected getNFTFlags(uint256 const& nftId) const override { return 8; } - Expected + std::expected getNFTTransferFee(uint256 const& nftId) const override { return 10; } - Expected - getNFTSerial(uint256 const& nftId) const override + std::expected + getNFTSequence(uint256 const& nftId) const override { return 4; } @@ -375,7 +375,7 @@ public: #endif } - Expected + std::expected trace(std::string_view const& msg, Slice const& data, bool asHex) const override { if (!asHex) @@ -397,113 +397,113 @@ public: return 0; } - Expected + std::expected traceNum(std::string_view const& msg, int64_t data) const override { log(msg, [data] { return data; }); return 0; } - Expected + std::expected traceAccount(std::string_view const& msg, AccountID const& account) const override { log(msg, [&account] { return toBase58(account); }); return 0; } - Expected + std::expected traceFloat(std::string_view const& msg, Slice const& data) const override { log(msg, [&data] { return wasm_float::floatToString(data); }); return 0; } - Expected + std::expected traceAmount(std::string_view const& msg, STAmount const& amount) const override { log(msg, [&amount] { return amount.getFullText(); }); return 0; } - Expected + std::expected floatFromInt(int64_t x, int32_t mode) const override { return wasm_float::floatFromIntImpl(x, mode); } - Expected + std::expected floatFromUint(uint64_t x, int32_t mode) const override { return wasm_float::floatFromUintImpl(x, mode); } - Expected + std::expected floatFromSTAmount(STAmount const& x, int32_t mode) const override { return wasm_float::floatFromSTAmountImpl(x, mode); } - Expected + std::expected floatFromSTNumber(STNumber const& x, int32_t mode) const override { return wasm_float::floatFromSTNumberImpl(x, mode); } - Expected + std::expected floatToInt(Slice const& x, int32_t mode) const override { return wasm_float::floatToIntImpl(x, mode); } - Expected + std::expected floatToMantExp(Slice const& x) const override { return wasm_float::floatToMantExpImpl(x); } - Expected + std::expected floatFromMantExp(int64_t mantissa, int32_t exponent, int32_t mode) const override { return wasm_float::floatFromMantExpImpl(mantissa, exponent, mode); } - Expected + std::expected floatCompare(Slice const& x, Slice const& y) const override { return wasm_float::floatCompareImpl(x, y); } - Expected + std::expected floatAdd(Slice const& x, Slice const& y, int32_t mode) const override { return wasm_float::floatAddImpl(x, y, mode); } - Expected + std::expected floatSubtract(Slice const& x, Slice const& y, int32_t mode) const override { return wasm_float::floatSubtractImpl(x, y, mode); } - Expected + std::expected floatMultiply(Slice const& x, Slice const& y, int32_t mode) const override { return wasm_float::floatMultiplyImpl(x, y, mode); } - Expected + std::expected floatDivide(Slice const& x, Slice const& y, int32_t mode) const override { return wasm_float::floatDivideImpl(x, y, mode); } - Expected + std::expected floatRoot(Slice const& x, int32_t n, int32_t mode) const override { return wasm_float::floatRootImpl(x, n, mode); } - Expected + std::expected floatPower(Slice const& x, int32_t n, int32_t mode) const override { return wasm_float::floatPowerImpl(x, n, mode); diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 230494f498..48da0597f4 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -6,7 +6,6 @@ #include #include -#include #include #include #include @@ -53,7 +52,7 @@ struct Wasm_test : public beast::unit_test::Suite { void checkResult( - Expected, WasmTER> re, + std::expected, WasmTER> re, int32_t expectedResult, int64_t expectedCost, std::source_location const location = std::source_location::current()) @@ -313,10 +312,10 @@ struct Wasm_test : public beast::unit_test::Suite explicit FieldNotFoundHostFunctions(Env& env) : TestHostFunctions(env) { } - Expected + std::expected getTxField(SField const& fname) const override { - return Unexpected(HostFunctionError::FieldNotFound); + return std::unexpected(HostFunctionError::FieldNotFound); } }; @@ -331,7 +330,7 @@ struct Wasm_test : public beast::unit_test::Suite explicit OversizedFieldHostFunctions(Env& env) : TestHostFunctions(env) { } - Expected + std::expected getTxField(SField const& fname) const override { return Bytes((128 + 1) * 64 * 1024, 1); From 5cbebf3c58ae0ad010bdaedd1c04a9201c773302 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 20 Jul 2026 18:11:14 -0400 Subject: [PATCH 132/137] fix clang-tidy issues --- include/xrpl/tx/wasm/HostFunc.h | 138 +++++++++--------- include/xrpl/tx/wasm/HostFuncImpl.h | 19 +++ include/xrpl/tx/wasm/HostFuncWrapper.h | 2 +- include/xrpl/tx/wasm/WasmCommon.h | 6 +- include/xrpl/tx/wasm/WasmImportsHelper.h | 16 +- include/xrpl/tx/wasm/WasmVM.h | 8 + include/xrpl/tx/wasm/WasmiVM.h | 18 ++- src/libxrpl/tx/wasm/HostFuncImpl.cpp | 1 + src/libxrpl/tx/wasm/HostFuncImplFloat.cpp | 3 +- src/libxrpl/tx/wasm/HostFuncImplGetter.cpp | 3 +- src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp | 1 + .../tx/wasm/HostFuncImplLedgerHeader.cpp | 1 + src/libxrpl/tx/wasm/HostFuncImplNFT.cpp | 1 + src/libxrpl/tx/wasm/HostFuncImplTrace.cpp | 2 + src/libxrpl/tx/wasm/HostFuncWrapper.cpp | 9 +- src/libxrpl/tx/wasm/WasmVM.cpp | 1 + src/libxrpl/tx/wasm/WasmiVM.cpp | 7 +- src/test/app/HostFuncImpl_test.cpp | 1 - src/test/app/TestHostFunctions.h | 125 ++++++++-------- src/test/app/Wasm_test.cpp | 5 +- 20 files changed, 221 insertions(+), 146 deletions(-) diff --git a/include/xrpl/tx/wasm/HostFunc.h b/include/xrpl/tx/wasm/HostFunc.h index 6a849e9935..f318610488 100644 --- a/include/xrpl/tx/wasm/HostFunc.h +++ b/include/xrpl/tx/wasm/HostFunc.h @@ -1,16 +1,22 @@ #pragma once #include +#include +#include #include #include #include -#include -#include +#include #include #include +#include +#include +#include +#include #include #include +#include namespace xrpl { @@ -109,37 +115,37 @@ public: return true; } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected getLedgerSqn() const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected getParentLedgerTime() const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected getParentLedgerHash() const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected getBaseFee() const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected isAmendmentEnabled(uint256 const& amendmentId) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected isAmendmentEnabled(std::string_view const& amendmentName) const { return std::unexpected(HostFunctionError::Unimplemented); @@ -151,73 +157,73 @@ public: return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected getTxField(SField const& fname) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected getCurrentLedgerObjField(SField const& fname) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected getLedgerObjField(int32_t cacheIdx, SField const& fname) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected getTxNestedField(FieldLocator const& locator) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected getCurrentLedgerObjNestedField(FieldLocator const& locator) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected getLedgerObjNestedField(int32_t cacheIdx, FieldLocator const& locator) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected getTxArrayLen(SField const& fname) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected getCurrentLedgerObjArrayLen(SField const& fname) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected getLedgerObjArrayLen(int32_t cacheIdx, SField const& fname) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected getTxNestedArrayLen(FieldLocator const& locator) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected getCurrentLedgerObjNestedArrayLen(FieldLocator const& locator) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected getLedgerObjNestedArrayLen(int32_t cacheIdx, FieldLocator const& locator) const { return std::unexpected(HostFunctionError::Unimplemented); @@ -229,280 +235,280 @@ public: return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected checkSignature(Slice const& message, Slice const& signature, Slice const& pubkey) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected computeSha512HalfHash(Slice const& data) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected accountKeylet(AccountID const& account) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected ammKeylet(Asset const& issue1, Asset const& issue2) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected checkKeylet(AccountID const& account, std::uint32_t seq) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected didKeylet(AccountID const& account) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected delegateKeylet(AccountID const& account, AccountID const& authorize) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected depositPreauthKeylet(AccountID const& account, AccountID const& authorize) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected escrowKeylet(AccountID const& account, std::uint32_t seq) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected trustLineKeylet(AccountID const& account1, AccountID const& account2, Currency const& currency) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected mptokenIssuanceKeylet(AccountID const& issuer, std::uint32_t seq) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected mptokenKeylet(MPTID const& mptid, AccountID const& holder) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected nftokenOfferKeylet(AccountID const& account, std::uint32_t seq) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected offerKeylet(AccountID const& account, std::uint32_t seq) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected oracleKeylet(AccountID const& account, std::uint32_t docId) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected paychannelKeylet(AccountID const& account, AccountID const& destination, std::uint32_t seq) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected permissionedDomainKeylet(AccountID const& account, std::uint32_t seq) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected signerListKeylet(AccountID const& account) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected ticketKeylet(AccountID const& account, std::uint32_t seq) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected vaultKeylet(AccountID const& account, std::uint32_t seq) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected getNFT(AccountID const& account, uint256 const& nftId) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected getNFTIssuer(uint256 const& nftId) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected getNFTTaxon(uint256 const& nftId) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected getNFTFlags(uint256 const& nftId) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected getNFTTransferFee(uint256 const& nftId) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected getNFTSequence(uint256 const& nftId) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected trace(std::string_view const& msg, Slice const& data, bool asHex) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected traceNum(std::string_view const& msg, int64_t data) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected traceAccount(std::string_view const& msg, AccountID const& account) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected traceFloat(std::string_view const& msg, Slice const& data) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected traceAmount(std::string_view const& msg, STAmount const& amount) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected floatFromInt(int64_t x, int32_t mode) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected floatFromUint(uint64_t x, int32_t mode) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected floatFromSTAmount(STAmount const& x, int32_t mode) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected floatFromSTNumber(STNumber const& x, int32_t mode) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected floatToInt(Slice const& x, int32_t mode) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected floatToMantExp(Slice const& x) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected floatFromMantExp(int64_t mantissa, int32_t exponent, int32_t mode) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected floatCompare(Slice const& x, Slice const& y) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected floatAdd(Slice const& x, Slice const& y, int32_t mode) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected floatSubtract(Slice const& x, Slice const& y, int32_t mode) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected floatMultiply(Slice const& x, Slice const& y, int32_t mode) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected floatDivide(Slice const& x, Slice const& y, int32_t mode) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected floatRoot(Slice const& x, int32_t n, int32_t mode) const { return std::unexpected(HostFunctionError::Unimplemented); } - virtual std::expected + [[nodiscard]] [[nodiscard]] virtual std::expected floatPower(Slice const& x, int32_t n, int32_t mode) const { return std::unexpected(HostFunctionError::Unimplemented); diff --git a/include/xrpl/tx/wasm/HostFuncImpl.h b/include/xrpl/tx/wasm/HostFuncImpl.h index b32023039b..37ee4af5a8 100644 --- a/include/xrpl/tx/wasm/HostFuncImpl.h +++ b/include/xrpl/tx/wasm/HostFuncImpl.h @@ -1,7 +1,26 @@ #pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include + +#include +#include +#include +#include +#include +#include +#include namespace xrpl { diff --git a/include/xrpl/tx/wasm/HostFuncWrapper.h b/include/xrpl/tx/wasm/HostFuncWrapper.h index 2954c8f423..1d04d7202a 100644 --- a/include/xrpl/tx/wasm/HostFuncWrapper.h +++ b/include/xrpl/tx/wasm/HostFuncWrapper.h @@ -1,6 +1,6 @@ #pragma once -#include +#include #include diff --git a/include/xrpl/tx/wasm/WasmCommon.h b/include/xrpl/tx/wasm/WasmCommon.h index 8d3cff09c7..3e55777b7c 100644 --- a/include/xrpl/tx/wasm/WasmCommon.h +++ b/include/xrpl/tx/wasm/WasmCommon.h @@ -4,10 +4,15 @@ #include #include +#include +#include +#include #include #include #include #include +#include +#include #include namespace xrpl { @@ -184,7 +189,6 @@ wasmParamsHlp(std::vector& v, std::int64_t p, Types&&... args) inline void wasmParamsHlp(std::vector& v) { - return; } template diff --git a/include/xrpl/tx/wasm/WasmImportsHelper.h b/include/xrpl/tx/wasm/WasmImportsHelper.h index a0bf74a089..b5b98f672b 100644 --- a/include/xrpl/tx/wasm/WasmImportsHelper.h +++ b/include/xrpl/tx/wasm/WasmImportsHelper.h @@ -1,7 +1,7 @@ #pragma once -#include #include +#include #include #include @@ -10,6 +10,13 @@ #include +#include +#include +#include +#include +#include +#include + namespace bft = boost::function_types; namespace xrpl { @@ -37,7 +44,7 @@ WasmImpArgs(WasmImportFunc& e) { if constexpr (N < C) { - using at = typename boost::mpl::at_c::type; + using at = boost::mpl::at_c::type; if constexpr (std::is_pointer_v) { e.params.push_back(WasmTypes::WtI32); @@ -57,7 +64,6 @@ WasmImpArgs(WasmImportFunc& e) return WasmImpArgs(e); } - return; } template @@ -93,8 +99,8 @@ template void WasmImpFuncHelper(WasmImportFunc& e) { - using rt = typename bft::result_type::type; - using pt = typename bft::parameter_types::type; + using rt = bft::result_type::type; + using pt = bft::parameter_types::type; // typename boost::mpl::at_c::type WasmImpRet(e); diff --git a/include/xrpl/tx/wasm/WasmVM.h b/include/xrpl/tx/wasm/WasmVM.h index 3e200eca17..7d5bb1563e 100644 --- a/include/xrpl/tx/wasm/WasmVM.h +++ b/include/xrpl/tx/wasm/WasmVM.h @@ -1,9 +1,17 @@ #pragma once +#include +#include #include +#include #include +#include +#include +#include +#include #include +#include namespace xrpl { diff --git a/include/xrpl/tx/wasm/WasmiVM.h b/include/xrpl/tx/wasm/WasmiVM.h index 9c41b05d7c..d4a026ff54 100644 --- a/include/xrpl/tx/wasm/WasmiVM.h +++ b/include/xrpl/tx/wasm/WasmiVM.h @@ -1,12 +1,28 @@ #pragma once +#include +#include #include +#include +#include +#include +#include #include #include -#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include namespace xrpl { diff --git a/src/libxrpl/tx/wasm/HostFuncImpl.cpp b/src/libxrpl/tx/wasm/HostFuncImpl.cpp index fa2b0153d8..2067062deb 100644 --- a/src/libxrpl/tx/wasm/HostFuncImpl.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImpl.cpp @@ -7,6 +7,7 @@ #include #include +#include namespace xrpl { diff --git a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp index 57e24dd4b7..0aea18548a 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp @@ -10,6 +10,7 @@ #include #include +#include #include #include #include @@ -91,7 +92,7 @@ public: return Number::operator int64_t(); } - std::expected + [[nodiscard]] std::expected toBytes() const { Serializer msg; diff --git a/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp index a4cb37a30e..4ae0c72426 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplGetter.cpp @@ -13,6 +13,7 @@ #include #include +#include #include #include #include @@ -31,7 +32,7 @@ getIntBytes(STBase const* obj) auto const* num(static_cast const*>(obj)); // NOLINT T const data = adjustWasmEndianess(num->value()); - uint8_t const* b = reinterpret_cast(&data); + auto const* b = reinterpret_cast(&data); return Bytes{b, b + sizeof(T)}; } diff --git a/src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp b/src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp index 66d96381c8..a16fc071a1 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplKeylet.cpp @@ -9,6 +9,7 @@ #include #include +#include namespace xrpl { diff --git a/src/libxrpl/tx/wasm/HostFuncImplLedgerHeader.cpp b/src/libxrpl/tx/wasm/HostFuncImplLedgerHeader.cpp index 49a4c3cdf0..9def11dc95 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplLedgerHeader.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplLedgerHeader.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include diff --git a/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp b/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp index 118172c247..fdbf7d2e2d 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplNFT.cpp @@ -8,6 +8,7 @@ #include #include +#include namespace xrpl { diff --git a/src/libxrpl/tx/wasm/HostFuncImplTrace.cpp b/src/libxrpl/tx/wasm/HostFuncImplTrace.cpp index fea608aa77..4e4058ea39 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplTrace.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplTrace.cpp @@ -3,10 +3,12 @@ #include #include #include +#include #include #include +#include #include #include #include diff --git a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp index 9788bce345..ea5caec6cc 100644 --- a/src/libxrpl/tx/wasm/HostFuncWrapper.cpp +++ b/src/libxrpl/tx/wasm/HostFuncWrapper.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -170,7 +171,7 @@ getDataSlice(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_t& if (std::cmp_greater(ptr + size, memory.s)) return std::unexpected(HostFunctionError::PointerOutOfBounds); - Slice data(memory.p + ptr, size); + Slice const data(memory.p + ptr, size); return data; } @@ -202,7 +203,7 @@ getDataUnsigned(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32 return std::unexpected(HostFunctionError::InvalidParams); T x; - uintptr_t const p = reinterpret_cast(r->data()); + auto const p = reinterpret_cast(r->data()); if (p & (alignof(T) - 1)) // unaligned { memcpy(&x, r->data(), sizeof(T)); @@ -357,7 +358,7 @@ getDataLocator(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_ return std::unexpected(HostFunctionError::LocatorMalformed); uint32_t const locSize = slice->size() / sizeof(int32_t); - uintptr_t const p = reinterpret_cast(slice->data()); + auto const p = reinterpret_cast(slice->data()); if ((p & (alignof(int32_t) - 1)) != 0u) { // unaligned @@ -376,7 +377,7 @@ getDataLocator(WasmRuntimeWrapper& runtime, wasm_val_vec_t const* params, int32_ return locator; } - int32_t const* locPtr = reinterpret_cast(slice->data()); + auto const* locPtr = reinterpret_cast(slice->data()); return FieldLocator(locPtr, locSize); } diff --git a/src/libxrpl/tx/wasm/WasmVM.cpp b/src/libxrpl/tx/wasm/WasmVM.cpp index 141da2dc81..d585892c69 100644 --- a/src/libxrpl/tx/wasm/WasmVM.cpp +++ b/src/libxrpl/tx/wasm/WasmVM.cpp @@ -7,6 +7,7 @@ #include #include +#include #include #include #ifdef _DEBUG diff --git a/src/libxrpl/tx/wasm/WasmiVM.cpp b/src/libxrpl/tx/wasm/WasmiVM.cpp index a1e3a0aee8..a174124208 100644 --- a/src/libxrpl/tx/wasm/WasmiVM.cpp +++ b/src/libxrpl/tx/wasm/WasmiVM.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -427,7 +428,7 @@ ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) const auto fieldName = std::string_view(fn->data, fn->size); wasm_externkind_t const itype = wasm_externtype_kind(wasm_importtype_type(importType)); - if ((itype) != WASM_EXTERN_FUNC) + if (itype != WASM_EXTERN_FUNC) { Throw( "Invalid import type " + std::to_string(itype)); // LCOV_EXCL_LINE @@ -702,9 +703,7 @@ WasmiEngine::call(FuncInfo const& f, std::vector& in) // Classify the trap into a TER by matching tokens as substrings of the // message (see the trap-signal constants in WasmCommon.h for why). std::string const msg = trapMessage(trap); - auto const has = [&msg](std::string_view token) { - return msg.find(token) != std::string::npos; - }; + auto const has = [&msg](std::string_view token) { return msg.contains(token); }; if (has(hfErrInternal)) { ret.ter = tecINTERNAL; diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 40718943ad..f9943e121c 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -3859,7 +3859,6 @@ struct HostFuncImpl_test : public beast::unit_test::Suite printFloats("ten", 10, 0); printFloats("pi", 3141592653589793, -15); printFloats("-three", -3, 0); - return; } void diff --git a/src/test/app/TestHostFunctions.h b/src/test/app/TestHostFunctions.h index bc24c26932..a3ded89f33 100644 --- a/src/test/app/TestHostFunctions.h +++ b/src/test/app/TestHostFunctions.h @@ -1,19 +1,26 @@ #pragma once -#include #include #include -#include +#include +#include +#include #include -#include -#include +#include +#include +#include +#include +#include +#include +#include #include -#include +#include #include #include +#include #include #include #include @@ -29,7 +36,7 @@ public: { } - std::expected + [[nodiscard]] std::expected getLedgerSqn() const override { return env_.current()->seq(); @@ -51,37 +58,37 @@ public: data_ = Bytes{t.begin(), t.end()}; } - std::expected + [[nodiscard]] std::expected getLedgerSqn() const override { return 12345; } - std::expected + [[nodiscard]] std::expected getParentLedgerTime() const override { return 67890; } - std::expected + [[nodiscard]] std::expected getParentLedgerHash() const override { return env_.current()->header().parentHash; } - std::expected + [[nodiscard]] std::expected getBaseFee() const override { return 10; } - std::expected + [[nodiscard]] std::expected isAmendmentEnabled(uint256 const& amendmentId) const override { return 1; } - std::expected + [[nodiscard]] std::expected isAmendmentEnabled(std::string_view const& amendmentName) const override { return 1; @@ -93,7 +100,7 @@ public: return 1; } - std::expected + [[nodiscard]] std::expected getTxField(SField const& fname) const override { if (fname == sfAccount) @@ -102,7 +109,7 @@ public: if (fname == sfFee) { int64_t x = 235; - uint8_t const* p = reinterpret_cast(&x); + auto const* p = reinterpret_cast(&x); return Bytes{p, p + sizeof(x)}; } @@ -120,7 +127,7 @@ public: return Bytes(); } - std::expected + [[nodiscard]] std::expected getCurrentLedgerObjField(SField const& fname) const override { auto const& sn = fname.getName(); @@ -138,13 +145,13 @@ public: return std::unexpected(HostFunctionError::Unimplemented); } - std::expected + [[nodiscard]] std::expected getLedgerObjField(int32_t, SField const& fname) const override { if (fname == sfBalance) { int64_t x = 10'000; - uint8_t const* p = reinterpret_cast(&x); + auto const* p = reinterpret_cast(&x); return Bytes{p, p + sizeof(x)}; } @@ -154,7 +161,7 @@ public: return data_; } - std::expected + [[nodiscard]] std::expected getTxNestedField(FieldLocator const& locator) const override { if (locator.size() == 1) @@ -171,7 +178,7 @@ public: return Bytes(&a[0], &a[sizeof(a)]); } - std::expected + [[nodiscard]] std::expected getCurrentLedgerObjNestedField(FieldLocator const& locator) const override { if (locator.size() == 1) @@ -188,7 +195,7 @@ public: return Bytes(&a[0], &a[sizeof(a)]); } - std::expected + [[nodiscard]] std::expected getLedgerObjNestedField(int32_t cacheIdx, FieldLocator const& locator) const override { if (locator.size() == 1) @@ -205,37 +212,37 @@ public: return Bytes(&a[0], &a[sizeof(a)]); } - std::expected + [[nodiscard]] std::expected getTxArrayLen(SField const& fname) const override { return 32; } - std::expected + [[nodiscard]] std::expected getCurrentLedgerObjArrayLen(SField const& fname) const override { return 32; } - std::expected + [[nodiscard]] std::expected getLedgerObjArrayLen(int32_t cacheIdx, SField const& fname) const override { return 32; } - std::expected + [[nodiscard]] std::expected getTxNestedArrayLen(FieldLocator const& locator) const override { return 32; } - std::expected + [[nodiscard]] std::expected getCurrentLedgerObjNestedArrayLen(FieldLocator const& locator) const override { return 32; } - std::expected + [[nodiscard]] std::expected getLedgerObjNestedArrayLen(int32_t cacheIdx, FieldLocator const& locator) const override { return 32; @@ -247,19 +254,19 @@ public: return data.size(); } - std::expected + [[nodiscard]] std::expected checkSignature(Slice const& message, Slice const& signature, Slice const& pubkey) const override { return 1; } - std::expected + [[nodiscard]] std::expected computeSha512HalfHash(Slice const& data) const override { return env_.current()->header().parentHash; } - std::expected + [[nodiscard]] std::expected accountKeylet(AccountID const& account) const override { if (!account) @@ -268,7 +275,7 @@ public: return Bytes{keylet.key.begin(), keylet.key.end()}; } - std::expected + [[nodiscard]] std::expected ammKeylet(Asset const& issue1, Asset const& issue2) const override { if (issue1 == issue2) @@ -279,7 +286,7 @@ public: return Bytes{keylet.key.begin(), keylet.key.end()}; } - std::expected + [[nodiscard]] std::expected checkKeylet(AccountID const& account, std::uint32_t seq) const override { if (!account) @@ -288,7 +295,7 @@ public: return Bytes{keylet.key.begin(), keylet.key.end()}; } - std::expected + [[nodiscard]] std::expected credentialKeylet(AccountID const& subject, AccountID const& issuer, Slice const& credentialType) const override { @@ -299,7 +306,7 @@ public: return Bytes{keylet.key.begin(), keylet.key.end()}; } - std::expected + [[nodiscard]] std::expected escrowKeylet(AccountID const& account, std::uint32_t seq) const override { if (!account) @@ -308,7 +315,7 @@ public: return Bytes{keylet.key.begin(), keylet.key.end()}; } - std::expected + [[nodiscard]] std::expected oracleKeylet(AccountID const& account, std::uint32_t documentId) const override { if (!account) @@ -317,7 +324,7 @@ public: return Bytes{keylet.key.begin(), keylet.key.end()}; } - std::expected + [[nodiscard]] std::expected getNFT(AccountID const& account, uint256 const& nftId) const override { if (!account || !nftId) @@ -327,31 +334,31 @@ public: return Bytes(s.begin(), s.end()); } - std::expected + [[nodiscard]] std::expected getNFTIssuer(uint256 const& nftId) const override { return Bytes(accountID_.begin(), accountID_.end()); } - std::expected + [[nodiscard]] std::expected getNFTTaxon(uint256 const& nftId) const override { return 4; } - std::expected + [[nodiscard]] std::expected getNFTFlags(uint256 const& nftId) const override { return 8; } - std::expected + [[nodiscard]] std::expected getNFTTransferFee(uint256 const& nftId) const override { return 10; } - std::expected + [[nodiscard]] std::expected getNFTSequence(uint256 const& nftId) const override { return 4; @@ -375,7 +382,7 @@ public: #endif } - std::expected + [[nodiscard]] std::expected trace(std::string_view const& msg, Slice const& data, bool asHex) const override { if (!asHex) @@ -397,113 +404,113 @@ public: return 0; } - std::expected + [[nodiscard]] std::expected traceNum(std::string_view const& msg, int64_t data) const override { log(msg, [data] { return data; }); return 0; } - std::expected + [[nodiscard]] std::expected traceAccount(std::string_view const& msg, AccountID const& account) const override { log(msg, [&account] { return toBase58(account); }); return 0; } - std::expected + [[nodiscard]] std::expected traceFloat(std::string_view const& msg, Slice const& data) const override { log(msg, [&data] { return wasm_float::floatToString(data); }); return 0; } - std::expected + [[nodiscard]] std::expected traceAmount(std::string_view const& msg, STAmount const& amount) const override { log(msg, [&amount] { return amount.getFullText(); }); return 0; } - std::expected + [[nodiscard]] std::expected floatFromInt(int64_t x, int32_t mode) const override { return wasm_float::floatFromIntImpl(x, mode); } - std::expected + [[nodiscard]] std::expected floatFromUint(uint64_t x, int32_t mode) const override { return wasm_float::floatFromUintImpl(x, mode); } - std::expected + [[nodiscard]] std::expected floatFromSTAmount(STAmount const& x, int32_t mode) const override { return wasm_float::floatFromSTAmountImpl(x, mode); } - std::expected + [[nodiscard]] std::expected floatFromSTNumber(STNumber const& x, int32_t mode) const override { return wasm_float::floatFromSTNumberImpl(x, mode); } - std::expected + [[nodiscard]] std::expected floatToInt(Slice const& x, int32_t mode) const override { return wasm_float::floatToIntImpl(x, mode); } - std::expected + [[nodiscard]] std::expected floatToMantExp(Slice const& x) const override { return wasm_float::floatToMantExpImpl(x); } - std::expected + [[nodiscard]] std::expected floatFromMantExp(int64_t mantissa, int32_t exponent, int32_t mode) const override { return wasm_float::floatFromMantExpImpl(mantissa, exponent, mode); } - std::expected + [[nodiscard]] std::expected floatCompare(Slice const& x, Slice const& y) const override { return wasm_float::floatCompareImpl(x, y); } - std::expected + [[nodiscard]] std::expected floatAdd(Slice const& x, Slice const& y, int32_t mode) const override { return wasm_float::floatAddImpl(x, y, mode); } - std::expected + [[nodiscard]] std::expected floatSubtract(Slice const& x, Slice const& y, int32_t mode) const override { return wasm_float::floatSubtractImpl(x, y, mode); } - std::expected + [[nodiscard]] std::expected floatMultiply(Slice const& x, Slice const& y, int32_t mode) const override { return wasm_float::floatMultiplyImpl(x, y, mode); } - std::expected + [[nodiscard]] std::expected floatDivide(Slice const& x, Slice const& y, int32_t mode) const override { return wasm_float::floatDivideImpl(x, y, mode); } - std::expected + [[nodiscard]] std::expected floatRoot(Slice const& x, int32_t n, int32_t mode) const override { return wasm_float::floatRootImpl(x, n, mode); } - std::expected + [[nodiscard]] std::expected floatPower(Slice const& x, int32_t n, int32_t mode) const override { return wasm_float::floatPowerImpl(x, n, mode); diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 48da0597f4..401f69058e 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -1,3 +1,4 @@ +#include #ifdef _DEBUG // #define DEBUG_OUTPUT 1 #endif @@ -312,7 +313,7 @@ struct Wasm_test : public beast::unit_test::Suite explicit FieldNotFoundHostFunctions(Env& env) : TestHostFunctions(env) { } - std::expected + [[nodiscard]] std::expected getTxField(SField const& fname) const override { return std::unexpected(HostFunctionError::FieldNotFound); @@ -330,7 +331,7 @@ struct Wasm_test : public beast::unit_test::Suite explicit OversizedFieldHostFunctions(Env& env) : TestHostFunctions(env) { } - std::expected + [[nodiscard]] std::expected getTxField(SField const& fname) const override { return Bytes((128 + 1) * 64 * 1024, 1); From bc892f0bd37d562e51e2a91dc09783de6e1f6711 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 21 Jul 2026 15:12:36 -0400 Subject: [PATCH 133/137] feat: Change function name from `finish` to `escrow_finish` (#7840) --- include/xrpl/tx/wasm/README.md | 2 +- include/xrpl/tx/wasm/WasmVM.h | 2 +- src/test/app/Wasm_test.cpp | 12 +- .../all_host_functions/src/lib.rs | 18 +- .../app/wasm_fixtures/all_keylets/src/lib.rs | 2 +- .../wasm_fixtures/codecov_tests/src/lib.rs | 2 +- src/test/app/wasm_fixtures/fixtures.cpp | 1149 +++++++++-------- src/test/app/wasm_fixtures/ledgerSqn.c | 2 +- 8 files changed, 602 insertions(+), 587 deletions(-) diff --git a/include/xrpl/tx/wasm/README.md b/include/xrpl/tx/wasm/README.md index 3275011b49..dbd04b3b2f 100644 --- a/include/xrpl/tx/wasm/README.md +++ b/include/xrpl/tx/wasm/README.md @@ -103,7 +103,7 @@ WASM execution is metered, and if the gas limit is exceeded, execution fails. ## Entry Point The WASM module must export a function with the name defined by -`ESCROW_FUNCTION_NAME` (currently `"finish"`). This function: +`escrowFunctionName` (currently `"escrow_finish"`). This function: - Takes no parameters (or parameters passed via host function calls) - Returns an `int32_t`: diff --git a/include/xrpl/tx/wasm/WasmVM.h b/include/xrpl/tx/wasm/WasmVM.h index 48b0438654..94f8bbbf1c 100644 --- a/include/xrpl/tx/wasm/WasmVM.h +++ b/include/xrpl/tx/wasm/WasmVM.h @@ -17,7 +17,7 @@ std::string_view inline constexpr wAlloc = "allocate"; std::string_view inline constexpr wDealloc = "deallocate"; std::string_view inline constexpr wProcExit = "proc_exit"; -std::string_view inline constexpr escrowFunctionName = "finish"; +std::string_view inline constexpr escrowFunctionName = "escrow_finish"; uint32_t inline constexpr maxPages = 128; // 8MB = 64KB*128 diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 230494f498..afd3c3d4a3 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -217,7 +217,7 @@ struct Wasm_test : public beast::unit_test::Suite auto re = engine.run( allHostFuncWasm, hfs, 1'000'000, escrowFunctionName, {}, imp, env.journal); - checkResult(re, 1, 27'032); + checkResult(re, 1, 27'617); env.close(); } @@ -239,7 +239,7 @@ struct Wasm_test : public beast::unit_test::Suite auto re = engine.run( allHostFuncWasm, hfs, 1'000'000, escrowFunctionName, {}, imp, env.journal); - checkResult(re, 1, 68'792); + checkResult(re, 1, 70'877); env.close(); } @@ -280,7 +280,7 @@ struct Wasm_test : public beast::unit_test::Suite { TestHostFunctions hfs(env); auto re = runEscrowWasm(allHFWasm, hfs, 100'000, escrowFunctionName, {}); - checkResult(re, 1, 68'792); + checkResult(re, 1, 70'877); } { @@ -304,7 +304,7 @@ struct Wasm_test : public beast::unit_test::Suite TestHostFunctions hfs(env); auto re = runEscrowWasm( allHFWasm, hfs, std::numeric_limits::max(), escrowFunctionName, {}); - checkResult(re, 1, 68'792); + checkResult(re, 1, 70'877); } { // fail because trying to access nonexistent field @@ -322,7 +322,7 @@ struct Wasm_test : public beast::unit_test::Suite FieldNotFoundHostFunctions hfs(env); auto re = runEscrowWasm(allHFWasm, hfs, 100'000, escrowFunctionName, {}); - checkResult(re, -201, 28'965); + checkResult(re, -201, 29'502); } { // fail because trying to allocate more than MAX_PAGES memory @@ -340,7 +340,7 @@ struct Wasm_test : public beast::unit_test::Suite OversizedFieldHostFunctions hfs(env); auto re = runEscrowWasm(allHFWasm, hfs, 100'000, escrowFunctionName, {}); - checkResult(re, -201, 28'965); + checkResult(re, -201, 29'502); } } diff --git a/src/test/app/wasm_fixtures/all_host_functions/src/lib.rs b/src/test/app/wasm_fixtures/all_host_functions/src/lib.rs index cdbe05d3f0..a40aa91d6a 100644 --- a/src/test/app/wasm_fixtures/all_host_functions/src/lib.rs +++ b/src/test/app/wasm_fixtures/all_host_functions/src/lib.rs @@ -32,7 +32,7 @@ use xrpl_std::host::trace::{trace, trace_account_buf, trace_data, trace_num, Dat use xrpl_std::sfield; #[unsafe(no_mangle)] -pub extern "C" fn finish() -> i32 { +pub extern "C" fn escrow_finish() -> i32 { let _ = trace("=== HOST FUNCTIONS TEST ==="); let _ = trace("Testing 26 host functions"); @@ -210,7 +210,9 @@ fn test_transaction_data_functions() -> i32 { // Use get_tx_field() with appropriate parameters for all transaction field access. // Test 2.2: get_tx_nested_field() - Nested field access with locator - let locator = [0x01_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8]; // Two int32s in little-endian: [1, 0] + let locator = [ + 0x01_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, + ]; // Two int32s in little-endian: [1, 0] let mut nested_buffer = [0u8; 32]; let nested_result = unsafe { host::tx_inner( @@ -323,7 +325,9 @@ fn test_current_ledger_object_functions() -> i32 { } // Test 3.2: get_current_ledger_obj_nested_field() - Nested field access - let locator = [0x01_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8]; // Two int32s in little-endian: [1, 0] + let locator = [ + 0x01_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, + ]; // Two int32s in little-endian: [1, 0] let mut current_nested_buffer = [0u8; 32]; let current_nested_result = unsafe { host::home_le_inner( @@ -434,7 +438,9 @@ fn test_any_ledger_object_functions() -> i32 { } // Test get_ledger_obj_nested_field with invalid slot - let locator = [0x01_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8]; // Two int32s in little-endian: [1, 0] + let locator = [ + 0x01_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, + ]; // Two int32s in little-endian: [1, 0] let nested_result = unsafe { host::le_inner( 1, @@ -517,7 +523,9 @@ fn test_any_ledger_object_functions() -> i32 { } // Test 4.3: get_ledger_obj_nested_field() - Nested field from cached object - let locator = [0x01_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8]; // Two int32s in little-endian: [1, 0] + let locator = [ + 0x01_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, 0x00_u8, + ]; // Two int32s in little-endian: [1, 0] let mut cached_nested_buffer = [0u8; 32]; let cached_nested_result = unsafe { host::le_inner( diff --git a/src/test/app/wasm_fixtures/all_keylets/src/lib.rs b/src/test/app/wasm_fixtures/all_keylets/src/lib.rs index 3a1e2cb498..f0a4e5abb5 100644 --- a/src/test/app/wasm_fixtures/all_keylets/src/lib.rs +++ b/src/test/app/wasm_fixtures/all_keylets/src/lib.rs @@ -67,7 +67,7 @@ pub fn object_exists( } #[unsafe(no_mangle)] -pub extern "C" fn finish() -> i32 { +pub extern "C" fn escrow_finish() -> i32 { let _ = trace("$$$$$ STARTING WASM EXECUTION $$$$$"); let escrow: CurrentEscrow = get_current_escrow(); diff --git a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs index ea32e93a88..59f16155d2 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs +++ b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs @@ -48,7 +48,7 @@ where } #[unsafe(no_mangle)] -pub extern "C" fn finish() -> i32 { +pub extern "C" fn escrow_finish() -> i32 { let _ = trace("$$$$$ STARTING WASM EXECUTION $$$$$"); // ######################################## diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index 8e67c4245c..6ff902717e 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -6,13 +6,18 @@ extern std::string const kLedgerSqnWasmHex = "0061736d01000000010e0360027f7f017f6000006000017f02120103656e760a6c6467725f696e6465780000030302" - "01020503010002062b077f01418088040b7f004180080b7f004180080b7f004180080b7f00418088040b7f0041000b" - "7f0041010b07800109066d656d6f72790200115f5f7761736d5f63616c6c5f63746f727300010666696e6973680002" - "0c5f5f64736f5f68616e646c6503010a5f5f646174615f656e6403020d5f5f676c6f62616c5f6261736503030b5f5f" - "686561705f6261736503040d5f5f6d656d6f72795f6261736503050c5f5f7461626c655f6261736503060a3d020200" - "0b3801037f230041106b220024002000410c6a410410002101200028020c2102200041106a24002001410541002002" - "41054f1b20014100481b0b002f0970726f647563657273010c70726f6365737365642d6279010e486f6d6562726577" - "20636c616e670631342e302e36"; + "01020503010002063f0a7f01418088040b7f004180080b7f004180080b7f004180080b7f00418088040b7f00418008" + "0b7f00418088040b7f00418080080b7f0041000b7f0041010b07b1010c066d656d6f72790200115f5f7761736d5f63" + "616c6c5f63746f727300010d657363726f775f66696e69736800020c5f5f64736f5f68616e646c6503010a5f5f6461" + "74615f656e6403020b5f5f737461636b5f6c6f7703030c5f5f737461636b5f6869676803040d5f5f676c6f62616c5f" + "6261736503050b5f5f686561705f6261736503060a5f5f686561705f656e6403070d5f5f6d656d6f72795f62617365" + "03080c5f5f7461626c655f6261736503090a3d0202000b3801037f230041106b220024002000410c6a410410002101" + "200028020c2102200041106a2400200141054100200241054f1b20014100481b0b007f0970726f647563657273010c" + "70726f6365737365642d62790105636c616e675f31392e312e352d776173692d73646b202868747470733a2f2f6769" + "746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a656374206162346235613264623538323935386166316565" + "33303861373930636664623432626432343732302900490f7461726765745f6665617475726573042b0f6d75746162" + "6c652d676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c" + "7565"; extern std::string const kAllHostFunctionsWasmHex = "0061736d0100000001540c60027f7f017f60037f7f7f017f60047f7f7f7f017f60017f017f60067f7f7f7f7f7f017f" @@ -30,161 +35,163 @@ extern std::string const kAllHostFunctionsWasmHex = "686f73745f6c6962086c655f6669656c64000208686f73745f6c6962086c655f696e6e6572000608686f73745f6c69" "620a6c655f6172725f6c656e000008686f73745f6c6962106c655f696e6e65725f6172725f6c656e000108686f7374" "5f6c69620e6163636f756e74726f6f745f6964000208686f73745f6c69620a74726163655f616363740002030c0b09" - "0a05050b05000101030005030100110619037f01418080c0000b7f0041af99c0000b7f0041b099c0000b072e04066d" - "656d6f727902000666696e697368001e0a5f5f646174615f656e6403010b5f5f686561705f6261736503020ac61d0b" - "990101027f230041306b220124002000027f418180202001411c6a4114100022024114470440417f20022002417f4e" - "1b210241010c010b200020012f001c3b0001200041036a2001411e6a2d00003a000020012001290023370308200120" - "0141286a29000037000d200128001f21022000410d6a200129000d3700002000200129030837020841000b3a000020" - "002002360204200141306a24000b460020012d00004101460440418080c000410b20013402041001000b2000200129" - "0001370000200041106a200141116a280000360000200041086a200141096a2900003700000b1900200241094f0440" - "000b20002002360204200020013602000b1900200241214f0440000b20002002360204200020013602000bde1a0109" - "7f230041b0036b22002400418b80c000411b41014100410010021a41a680c000411941014100410010021a41e780c0" - "00412b41014100410010021a2000410036027002400240024002400240024002400240200041f0006a220741041003" - "220141004a0440419281c00041172000280270220141187420014180fe03714108747220014108764180fe03712001" - "4118767272ad10011a200041003602900120004190016a220341041004220141004c0d0141a981c000411320002802" - "9001220141187420014180fe03714108747220014108764180fe037120014118767272ad10011a200041c8016a2202" - "4200370300200041c0016a22054200370300200041b8016a22044200370300200042003703b001200041b0016a2206" - "4120100522014120470d0241bc81c000411320064120410110021a41cf81c000412041014100410010021a41dc82c0" - "00412e41014100410010021a200041a0016a410036020020004198016a420037030020004200370390014181802020" - "034114100022014114470d03418a83c00041142003101f200042003703704188801820074108100022014108470d04" - "419e83c0004117420810011a41b583c000412820074108410110021a2000410036024841848008200041c8006a2203" - "4104100022014104470d0541dd83c000411520034104410110021a200041013b003420024200370300200542003703" - "0020044200370300200042003703b0010240200041346a4102200641201006220141004e044041f283c00041142001" - "ad10011a200041286a20062001101d418684c000410d2000280228200028022c410110021a0c010b419384c0004129" - "2001ac10011a0b41bc84c00041154183803c1007ac10011a41d184c00041134189803c1007ac10011a024020004134" - "6a41021008220141004e044041e484c00041142001ad10011a0c010b41f884c000412d2001ac10011a0b41a585c000" - "412341014100410010021a41de86c000413341014100410010021a2000420037037041828018200041f0006a220141" - "081009220341004c0d0620034108460440419187c000412b420810011a41bc87c000412f20014108410110021a0c08" - "0b41eb87c000412f2003ad10011a200041206a200041f0006a2003101c419a88c00041172000280220200028022441" - "0110021a0c070b41bf82c000411d2001ac10011a419b7f21020c070b419a82c00041252001ac10011a419a7f21020c" - "060b41ef81c000412b2001ac10011a41997f21020c050b41b486c000412a2001ac10011a41b77e21020c040b41f385" - "c00041c1002001ac10011a41b67e21020c030b41c885c000412b2001ac10011a41b57e21020c020b41b188c00041c5" - "002003ac10011a0b200041a0016a410036020020004198016a42003703002000420037039001024041818020200041" - "90016a220341141009220141004a044041f688c000411e2003101f0c010b419489c00041332001ac10011a0b200041" - "013b0048200041c8016a4200370300200041c0016a4200370300200041b8016a4200370300200042003703b0010240" - "200041c8006a4102200041b0016a22014120100a220341004e044041c789c000411c2003ad10011a200041186a2001" - "2003101d41e389c00041152000280218200028021c410110021a0c010b41f889c00041392003ac10011a0b41b18ac0" - "0041244183803c100bac10011a0240200041c8006a4102100c220141004e044041d58ac000411c2001ad10011a0c01" - "0b41f18ac000413d2001ac10011a0b41ae8bc000412841014100410010021a41d68bc000412f41014100410010021a" - "200041b0016a2203101a200041f0006a22012003101b200041a8016a4200370300200041a0016a4200370300200041" - "98016a4200370300200042003703900102400240024002400240200120004190016a22031020220141204604402003" - "41204100100d220441004a044041858cc00041232004ad10011a200042003703482004200041c8006a220141081021" - "220341004c0d022003410846044041a88cc000412a420810011a41d28cc000412e20014108410110021a0c060b4180" - "8dc000412e2003ad10011a200041106a200041c8006a2003101c41ae8dc00041162000280210200028021441011002" - "1a0c050b41e68fc000413c2004ac10011a200041c8016a4200370300200041c0016a4200370300200041b8016a4200" - "370300200042003703b0014101200041b0016a4120102122014100480d020c030b41ba92c000412e2001ac10011a41" - "ef7c21020c050b41c48dc000412b2003ac10011a0c020b41a290c00041c1002001ac10011a0b200041013b00484101" - "200041c8006a200041b0016a10222201410048044041e390c00041352001ac10011a0b410110232201410048044041" - "9891c00041322001ac10011a0b4101200041c8006a10242201410048044041ca91c00041392001ac10011a0b418392" - "c000413741014100410010021a0c010b200041013b0034200041c8016a4200370300200041c0016a42003703002000" - "41b8016a4200370300200042003703b00102402004200041346a200041b0016a22011022220341004e044041ef8dc0" - "00411b2003ad10011a200041086a20012003101d418a8ec00041142000280208200028020c410110021a0c010b419e" - "8ec00041312003ac10011a0b41cf8ec000412320041023ac10011a02402004200041346a1024220141004e044041f2" - "8ec000411b2001ad10011a0c010b418d8fc00041352001ac10011a0b41c28fc000412441014100410010021a0b41e8" - "92c000412f41014100410010021a200041b0016a2201101a200041346a22042001101b200041e0006a420037030020" - "0041d8006a4200370300200041d0006a420037030020004200370348024002400240024002402004200041c8006a22" - "03102022014120460440419793c000410f20034120410110021a20004188016a420037030020004180016a42003703" - "00200041f8006a4200370300200042003703700240200441142004411441a693c0004109200041f0006a2201412010" - "0e220341004a0440200020012003101d41ae93c000411220002802002000280204410110021a0c010b41c093c00041" - "3c2003ac10011a0b200041a8016a22064200370300200041a0016a2202420037030020004198016a22054200370300" - "200042003703900120004180808cc07e360268200041346a22034114200041e8006a410420004190016a2208412010" - "0f22014120470d0141fc93c000410e20084120410110021a200041c8016a4200370300200041c0016a420037030020" - "0041b8016a4200370300200042003703b001200041808080d00236026c20034114200041ec006a4104200041b0016a" - "22044120101022014120470d02418a94c000410e20044120410110021a419894c000412441014100410010021a4191" - "95c000412541014100410010021a20004188016a420037030020004180016a4200370300200041f8006a4200370300" - "2000420037037041b695c0004117200041f0006a22034120101122014120470d0341cd95c000410b41b695c0004117" - "410110021a41d895c000411120034120410110021a2004101a200041c8006a22072004101b20064200370300200242" - "0037030020054200370300200042003703900102404100200422026b410371220320026a220520024d0d0020030440" - "200321010340200241003a0000200241016a2102200141016b22010d000b0b200341016b4107490d00034020024100" - "3a0000200241076a41003a0000200241066a41003a0000200241056a41003a0000200241046a41003a000020024103" - "6a41003a0000200241026a41003a0000200241016a41003a0000200241086a22022005470d000b0b20054180022003" - "6b2201417c716a220220054b0440034020054100360200200541046a22052002490d000b0b02402002200141037122" - "0120026a22034f0d002001220504400340200241003a0000200241016a2102200541016b22050d000b0b200141016b" - "4107490d000340200241003a0000200241076a41003a0000200241066a41003a0000200241056a41003a0000200241" - "046a41003a0000200241036a41003a0000200241026a41003a0000200241016a41003a0000200241086a2202200347" - "0d000b0b0240200741142008412020044180021012220141004a044041e995c00041102001ad10011a20014181024f" - "0d0641f995c000410920042001410110021a0c010b418296c000412e2001ac10011a0b41b096c000411241c296c000" - "41074101100222014100480d0541c996c000411d2001ad10011a41e696c0004111422a1001410048044041ad97c000" - "411a42a47b10011a41a47b21020c070b41f796c000411c420010011a41012102419397c000411a4101410041001002" - "1a41ff97c000412941014100410010021a41a898c000412810132201412846044041d098c000412741a898c0004128" - "410110021a41f798c000411e41014100410010021a41bf80c000412841014100410010021a0c070b419599c000411a" - "2001ac10011a41c37a21020c060b41f494c000411d2001ac10011a418b7c21020c050b41d894c000411c2001ac1001" - "1a41897c21020c040b41bc94c000411c2001ac10011a41887c21020c030b41dd97c00041222001ac10011a41a77b21" - "020c020b000b41c797c00041162001ac10011a41a57b21020b200041b0036a240020020b0d00200020012002411410" - "191a0b0c00200041142001412010180b0e002000418280182001200210140b0e002000200141022002412010150b0a" - "0020004183803c10160b0a0020002001410210170b0bb9190100418080c0000baf196572726f725f636f64653d3d3d" - "3d20484f53542046554e4354494f4e532054455354203d3d3d54657374696e6720323620686f73742066756e637469" - "6f6e73535543434553533a20416c6c20686f73742066756e6374696f6e20746573747320706173736564212d2d2d20" - "43617465676f727920313a204c6564676572204865616465722046756e6374696f6e73202d2d2d4c65646765722073" - "657175656e6365206e756d6265723a506172656e74206c65646765722074696d653a506172656e74206c6564676572" - "20686173683a535543434553533a204c6564676572206865616465722066756e6374696f6e734552524f523a206765" - "745f706172656e745f6c65646765725f686173682077726f6e67206c656e6774683a4552524f523a206765745f7061" - "72656e745f6c65646765725f74696d65206661696c65643a4552524f523a206765745f6c65646765725f73716e2066" - "61696c65643a2d2d2d2043617465676f727920323a205472616e73616374696f6e20446174612046756e6374696f6e" - "73202d2d2d5472616e73616374696f6e204163636f756e743a5472616e73616374696f6e20466565206c656e677468" - "3a5472616e73616374696f6e20466565202873657269616c697a65642058525020616d6f756e74293a5472616e7361" - "6374696f6e2053657175656e63653a4e6573746564206669656c64206c656e6774683a4e6573746564206669656c64" - "3a494e464f3a206765745f74785f6e65737465645f6669656c64206e6f74206170706c696361626c653a5369676e65" - "7273206172726179206c656e6774683a4d656d6f73206172726179206c656e6774683a4e6573746564206172726179" - "206c656e6774683a494e464f3a206765745f74785f6e65737465645f61727261795f6c656e206e6f74206170706c69" - "6361626c653a535543434553533a205472616e73616374696f6e20646174612066756e6374696f6e734552524f523a" - "206765745f74785f6669656c642853657175656e6365292077726f6e67206c656e6774683a4552524f523a20676574" - "5f74785f6669656c6428466565292077726f6e67206c656e6774682028657870656374656420382062797465732066" - "6f7220585250293a4552524f523a206765745f74785f6669656c64284163636f756e74292077726f6e67206c656e67" - "74683a2d2d2d2043617465676f727920333a2043757272656e74204c6564676572204f626a6563742046756e637469" - "6f6e73202d2d2d43757272656e74206f626a6563742062616c616e6365206c656e677468202858525020616d6f756e" - "74293a43757272656e74206f626a6563742062616c616e6365202873657269616c697a65642058525020616d6f756e" - "74293a43757272656e74206f626a6563742062616c616e6365206c656e67746820286e6f6e2d58525020616d6f756e" - "74293a43757272656e74206f626a6563742062616c616e63653a494e464f3a206765745f63757272656e745f6c6564" - "6765725f6f626a5f6669656c642842616c616e636529206661696c656420286d617920626520657870656374656429" - "3a43757272656e74206c6564676572206f626a656374206163636f756e743a494e464f3a206765745f63757272656e" - "745f6c65646765725f6f626a5f6669656c64284163636f756e7429206661696c65643a43757272656e74206e657374" - "6564206669656c64206c656e6774683a43757272656e74206e6573746564206669656c643a494e464f3a206765745f" - "63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c64206e6f74206170706c696361626c653a" - "43757272656e74206f626a656374205369676e657273206172726179206c656e6774683a43757272656e74206e6573" - "746564206172726179206c656e6774683a494e464f3a206765745f63757272656e745f6c65646765725f6f626a5f6e" - "65737465645f61727261795f6c656e206e6f74206170706c696361626c653a535543434553533a2043757272656e74" - "206c6564676572206f626a6563742066756e6374696f6e732d2d2d2043617465676f727920343a20416e79204c6564" - "676572204f626a6563742046756e6374696f6e73202d2d2d5375636365737366756c6c7920636163686564206f626a" - "65637420696e20736c6f743a436163686564206f626a6563742062616c616e6365206c656e67746820285852502061" - "6d6f756e74293a436163686564206f626a6563742062616c616e6365202873657269616c697a65642058525020616d" - "6f756e74293a436163686564206f626a6563742062616c616e6365206c656e67746820286e6f6e2d58525020616d6f" - "756e74293a436163686564206f626a6563742062616c616e63653a494e464f3a206765745f6c65646765725f6f626a" - "5f6669656c642842616c616e636529206661696c65643a436163686564206e6573746564206669656c64206c656e67" - "74683a436163686564206e6573746564206669656c643a494e464f3a206765745f6c65646765725f6f626a5f6e6573" - "7465645f6669656c64206e6f74206170706c696361626c653a436163686564206f626a656374205369676e65727320" - "6172726179206c656e6774683a436163686564206e6573746564206172726179206c656e6774683a494e464f3a2067" - "65745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e206e6f74206170706c696361626c653a53" - "5543434553533a20416e79206c6564676572206f626a6563742066756e6374696f6e73494e464f3a2063616368655f" - "6c65646765725f6f626a206661696c6564202865787065637465642077697468207465737420666978747572657329" - "3a494e464f3a206765745f6c65646765725f6f626a5f6669656c64206661696c656420617320657870656374656420" - "286e6f20636163686564206f626a656374293a494e464f3a206765745f6c65646765725f6f626a5f6e65737465645f" - "6669656c64206661696c65642061732065787065637465643a494e464f3a206765745f6c65646765725f6f626a5f61" - "727261795f6c656e206661696c65642061732065787065637465643a494e464f3a206765745f6c65646765725f6f62" - "6a5f6e65737465645f61727261795f6c656e206661696c65642061732065787065637465643a535543434553533a20" - "416e79206c6564676572206f626a6563742066756e6374696f6e732028696e74657266616365207465737465642945" - "52524f523a206163636f756e74726f6f745f6964206661696c656420666f722063616368696e6720746573743a2d2d" - "2d2043617465676f727920353a204b65796c65742047656e65726174696f6e2046756e6374696f6e73202d2d2d4163" - "636f756e74206b65796c65743a546573745479706543726564656e7469616c206b65796c65743a494e464f3a206372" - "6564656e7469616c5f6b65796c6574206661696c656420286578706563746564202d20696e74657266616365206973" - "737565293a457363726f77206b65796c65743a4f7261636c65206b65796c65743a535543434553533a204b65796c65" - "742067656e65726174696f6e2066756e6374696f6e734552524f523a206f7261636c655f6b65796c6574206661696c" - "65643a4552524f523a20657363726f775f6b65796c6574206661696c65643a4552524f523a206163636f756e74726f" - "6f745f6964206661696c65643a2d2d2d2043617465676f727920363a205574696c6974792046756e6374696f6e7320" - "2d2d2d48656c6c6f2c205852504c205741534d20776f726c6421496e70757420646174613a5348413531322068616c" - "6620686173683a4e46542064617461206c656e6774683a4e465420646174613a494e464f3a206765745f6e66742066" - "61696c656420286578706563746564202d206e6f2073756368204e4654293a54657374207472616365206d65737361" - "67657061796c6f616454726163652066756e6374696f6e206279746573207772697474656e3a54657374206e756d62" - "657220747261636554726163655f6e756d2066756e6374696f6e20737563636565646564535543434553533a205574" - "696c6974792066756e6374696f6e734552524f523a2074726163655f6e756d2829206661696c65643a4552524f523a" - "2074726163652829206661696c65643a4552524f523a20636f6d707574655f7368613531325f68616c66206661696c" - "65643a2d2d2d2043617465676f727920373a2044617461205570646174652046756e6374696f6e73202d2d2d557064" - "61746564206c656467657220656e74727920646174612066726f6d205741534d20746573745375636365737366756c" - "6c792075706461746564206c656467657220656e74727920776974683a535543434553533a20446174612075706461" - "74652066756e6374696f6e734552524f523a207570646174655f64617461206661696c65643a004d0970726f647563" - "65727302086c616e6775616765010452757374000c70726f6365737365642d6279010572757374631d312e38372e30" - "202831373036376539616320323032352d30352d303929002c0f7461726765745f6665617475726573022b0f6d7574" - "61626c652d676c6f62616c732b087369676e2d657874"; + "0a05050b05000101030005030100110619037f01418080c0000b7f0041af99c0000b7f0041b099c0000b073504066d" + "656d6f727902000d657363726f775f66696e697368001e0a5f5f646174615f656e6403010b5f5f686561705f626173" + "6503020a911e0b990101027f230041306b220124002000027f418180202001411c6a4114100022024114470440417f" + "20022002417f4e1b210241010c010b200020012f001c3b0001200041036a2001411e6a2d00003a0000200120012900" + "233703082001200141286a29000037000d200128001f21022000410d6a200129000d37000020002001290308370208" + "41000b3a000020002002360204200141306a24000b460020012d00004101460440418080c000410b20013402041001" + "000b20002001290001370000200041106a200141116a280000360000200041086a200141096a2900003700000b1900" + "200241094f0440000b20002002360204200020013602000b1900200241214f0440000b200020023602042000200136" + "02000ba91b01097f230041b0036b22002400418b80c000411b41014100410010021a41a680c0004119410141004100" + "10021a41e780c000412b41014100410010021a2000410036027002400240024002400240024002400240200041f000" + "6a220741041003220141004a0440419281c00041172000280270220141187420014180fe0371410874722001410876" + "4180fe037120014118767272ad10011a200041003602900120004190016a220341041004220141004c0d0141a981c0" + "004113200028029001220141187420014180fe03714108747220014108764180fe037120014118767272ad10011a20" + "0041c8016a22024200370300200041c0016a22054200370300200041b8016a22044200370300200042003703b00120" + "0041b0016a22064120100522014120470d0241bc81c000411320064120410110021a41cf81c0004120410141004100" + "10021a41dc82c000412e41014100410010021a200041a0016a410036020020004198016a4200370300200042003703" + "90014181802020034114100022014114470d03418a83c00041142003101f2000420037034841888018200041c8006a" + "22034108100022014108470d04419e83c0004117420810011a41b583c000412820034108410110021a200041003602" + "3041848008200041306a22034104100022014104470d0541dd83c000411520034104410110021a200041f4006a4100" + "36000020004100360071200041013a0070200242003703002005420037030020044200370300200042003703b00102" + "4020074108200641201006220141004e044041f283c00041142001ad10011a200041286a20062001101d418684c000" + "410d2000280228200028022c410110021a0c010b419384c00041292001ac10011a0b41bc84c00041154183803c1007" + "ac10011a41d184c00041134189803c1007ac10011a0240200041f0006a41081008220141004e044041e484c0004114" + "2001ad10011a0c010b41f884c000412d2001ac10011a0b41a585c000412341014100410010021a41de86c000413341" + "014100410010021a2000420037034841828018200041c8006a220141081009220341004c0d06200341084604404191" + "87c000412b420810011a41bc87c000412f20014108410110021a0c080b41eb87c000412f2003ad10011a200041206a" + "200041c8006a2003101c419a88c000411720002802202000280224410110021a0c070b41bf82c000411d2001ac1001" + "1a419b7f21020c070b419a82c00041252001ac10011a419a7f21020c060b41ef81c000412b2001ac10011a41997f21" + "020c050b41b486c000412a2001ac10011a41b77e21020c040b41f385c00041c1002001ac10011a41b67e21020c030b" + "41c885c000412b2001ac10011a41b57e21020c020b41b188c00041c5002003ac10011a0b200041a0016a4100360200" + "20004198016a4200370300200042003703900102404181802020004190016a220341141009220141004a044041f688" + "c000411e2003101f0c010b419489c00041332001ac10011a0b200041f4006a41003600002000410036007120004101" + "3a0070200041c8016a4200370300200041c0016a4200370300200041b8016a4200370300200042003703b001024020" + "0041f0006a4108200041b0016a22014120100a220341004e044041c789c000411c2003ad10011a200041186a200120" + "03101d41e389c00041152000280218200028021c410110021a0c010b41f889c00041392003ac10011a0b41b18ac000" + "41244183803c100bac10011a0240200041f0006a4108100c220141004e044041d58ac000411c2001ad10011a0c010b" + "41f18ac000413d2001ac10011a0b41ae8bc000412841014100410010021a41d68bc000412f41014100410010021a20" + "0041b0016a2203101a200041f0006a22012003101b200041a8016a4200370300200041a0016a420037030020004198" + "016a4200370300200042003703900102400240024002400240200120004190016a2203102022014120460440200341" + "204100100d220441004a044041858cc00041232004ad10011a200042003703302004200041306a2201410810212203" + "41004c0d022003410846044041a88cc000412a420810011a41d28cc000412e20014108410110021a0c060b41808dc0" + "00412e2003ad10011a200041106a200041306a2003101c41ae8dc000411620002802102000280214410110021a0c05" + "0b41e68fc000413c2004ac10011a200041c8016a4200370300200041c0016a4200370300200041b8016a4200370300" + "200042003703b0014101200041b0016a4120102122014100480d020c030b41ba92c000412e2001ac10011a41ef7c21" + "020c050b41c48dc000412b2003ac10011a0c020b41a290c00041c1002001ac10011a0b200041cc006a410036000020" + "004100360049200041013a00484101200041c8006a200041b0016a10222201410048044041e390c00041352001ac10" + "011a0b4101102322014100480440419891c00041322001ac10011a0b4101200041c8006a10242201410048044041ca" + "91c00041392001ac10011a0b418392c000413741014100410010021a0c010b200041cc006a41003600002000410036" + "0049200041013a0048200041c8016a4200370300200041c0016a4200370300200041b8016a42003703002000420037" + "03b00102402004200041c8006a200041b0016a22011022220341004e044041ef8dc000411b2003ad10011a20004108" + "6a20012003101d418a8ec00041142000280208200028020c410110021a0c010b419e8ec00041312003ac10011a0b41" + "cf8ec000412320041023ac10011a02402004200041c8006a1024220141004e044041f28ec000411b2001ad10011a0c" + "010b418d8fc00041352001ac10011a0b41c28fc000412441014100410010021a0b41e892c000412f41014100410010" + "021a200041b0016a2201101a200041306a22042001101b200041e0006a4200370300200041d8006a42003703002000" + "41d0006a420037030020004200370348024002400240024002402004200041c8006a22031020220141204604404197" + "93c000410f20034120410110021a20004188016a420037030020004180016a4200370300200041f8006a4200370300" + "200042003703700240200441142004411441a693c0004109200041f0006a22014120100e220341004a044020002001" + "2003101d41ae93c000411220002802002000280204410110021a0c010b41c093c000413c2003ac10011a0b200041a8" + "016a22064200370300200041a0016a2202420037030020004198016a22054200370300200042003703900120004180" + "808cc07e360268200041306a22034114200041e8006a410420004190016a22084120100f22014120470d0141fc93c0" + "00410e20084120410110021a200041c8016a4200370300200041c0016a4200370300200041b8016a42003703002000" + "42003703b001200041808080d00236026c20034114200041ec006a4104200041b0016a22044120101022014120470d" + "02418a94c000410e20044120410110021a419894c000412441014100410010021a419195c000412541014100410010" + "021a20004188016a420037030020004180016a4200370300200041f8006a42003703002000420037037041b695c000" + "4117200041f0006a22034120101122014120470d0341cd95c000410b41b695c0004117410110021a41d895c0004111" + "20034120410110021a2004101a200041c8006a22072004101b20064200370300200242003703002005420037030020" + "0042003703900102404100200422026b410371220320026a220520024d0d0020030440200321010340200241003a00" + "00200241016a2102200141016b22010d000b0b200341016b4107490d000340200241003a0000200241076a41003a00" + "00200241066a41003a0000200241056a41003a0000200241046a41003a0000200241036a41003a0000200241026a41" + "003a0000200241016a41003a0000200241086a22022005470d000b0b200541800220036b2201417c716a220220054b" + "0440034020054100360200200541046a22052002490d000b0b024020022001410371220120026a22034f0d00200122" + "0504400340200241003a0000200241016a2102200541016b22050d000b0b200141016b4107490d000340200241003a" + "0000200241076a41003a0000200241066a41003a0000200241056a41003a0000200241046a41003a0000200241036a" + "41003a0000200241026a41003a0000200241016a41003a0000200241086a22022003470d000b0b0240200741142008" + "412020044180021012220141004a044041e995c00041102001ad10011a20014181024f0d0641f995c0004109200420" + "01410110021a0c010b418296c000412e2001ac10011a0b41b096c000411241c296c00041074101100222014100480d" + "0541c996c000411d2001ad10011a41e696c0004111422a1001410048044041ad97c000411a42a47b10011a41a47b21" + "020c070b41f796c000411c420010011a41012102419397c000411a41014100410010021a41ff97c000412941014100" + "410010021a41a898c000412810132201412846044041d098c000412741a898c0004128410110021a41f798c000411e" + "41014100410010021a41bf80c000412841014100410010021a0c070b419599c000411a2001ac10011a41c37a21020c" + "060b41f494c000411d2001ac10011a418b7c21020c050b41d894c000411c2001ac10011a41897c21020c040b41bc94" + "c000411c2001ac10011a41887c21020c030b41dd97c00041222001ac10011a41a77b21020c020b000b41c797c00041" + "162001ac10011a41a57b21020b200041b0036a240020020b0d00200020012002411410191a0b0c0020004114200141" + "2010180b0e002000418280182001200210140b0e002000200141082002412010150b0a0020004183803c10160b0a00" + "20002001410810170b0bb9190100418080c0000baf196572726f725f636f64653d3d3d3d20484f53542046554e4354" + "494f4e532054455354203d3d3d54657374696e6720323620686f73742066756e6374696f6e73535543434553533a20" + "416c6c20686f73742066756e6374696f6e20746573747320706173736564212d2d2d2043617465676f727920313a20" + "4c6564676572204865616465722046756e6374696f6e73202d2d2d4c65646765722073657175656e6365206e756d62" + "65723a506172656e74206c65646765722074696d653a506172656e74206c656467657220686173683a535543434553" + "533a204c6564676572206865616465722066756e6374696f6e734552524f523a206765745f706172656e745f6c6564" + "6765725f686173682077726f6e67206c656e6774683a4552524f523a206765745f706172656e745f6c65646765725f" + "74696d65206661696c65643a4552524f523a206765745f6c65646765725f73716e206661696c65643a2d2d2d204361" + "7465676f727920323a205472616e73616374696f6e20446174612046756e6374696f6e73202d2d2d5472616e736163" + "74696f6e204163636f756e743a5472616e73616374696f6e20466565206c656e6774683a5472616e73616374696f6e" + "20466565202873657269616c697a65642058525020616d6f756e74293a5472616e73616374696f6e2053657175656e" + "63653a4e6573746564206669656c64206c656e6774683a4e6573746564206669656c643a494e464f3a206765745f74" + "785f6e65737465645f6669656c64206e6f74206170706c696361626c653a5369676e657273206172726179206c656e" + "6774683a4d656d6f73206172726179206c656e6774683a4e6573746564206172726179206c656e6774683a494e464f" + "3a206765745f74785f6e65737465645f61727261795f6c656e206e6f74206170706c696361626c653a535543434553" + "533a205472616e73616374696f6e20646174612066756e6374696f6e734552524f523a206765745f74785f6669656c" + "642853657175656e6365292077726f6e67206c656e6774683a4552524f523a206765745f74785f6669656c64284665" + "65292077726f6e67206c656e67746820286578706563746564203820627974657320666f7220585250293a4552524f" + "523a206765745f74785f6669656c64284163636f756e74292077726f6e67206c656e6774683a2d2d2d204361746567" + "6f727920333a2043757272656e74204c6564676572204f626a6563742046756e6374696f6e73202d2d2d4375727265" + "6e74206f626a6563742062616c616e6365206c656e677468202858525020616d6f756e74293a43757272656e74206f" + "626a6563742062616c616e6365202873657269616c697a65642058525020616d6f756e74293a43757272656e74206f" + "626a6563742062616c616e6365206c656e67746820286e6f6e2d58525020616d6f756e74293a43757272656e74206f" + "626a6563742062616c616e63653a494e464f3a206765745f63757272656e745f6c65646765725f6f626a5f6669656c" + "642842616c616e636529206661696c656420286d6179206265206578706563746564293a43757272656e74206c6564" + "676572206f626a656374206163636f756e743a494e464f3a206765745f63757272656e745f6c65646765725f6f626a" + "5f6669656c64284163636f756e7429206661696c65643a43757272656e74206e6573746564206669656c64206c656e" + "6774683a43757272656e74206e6573746564206669656c643a494e464f3a206765745f63757272656e745f6c656467" + "65725f6f626a5f6e65737465645f6669656c64206e6f74206170706c696361626c653a43757272656e74206f626a65" + "6374205369676e657273206172726179206c656e6774683a43757272656e74206e6573746564206172726179206c65" + "6e6774683a494e464f3a206765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f" + "6c656e206e6f74206170706c696361626c653a535543434553533a2043757272656e74206c6564676572206f626a65" + "63742066756e6374696f6e732d2d2d2043617465676f727920343a20416e79204c6564676572204f626a6563742046" + "756e6374696f6e73202d2d2d5375636365737366756c6c7920636163686564206f626a65637420696e20736c6f743a" + "436163686564206f626a6563742062616c616e6365206c656e677468202858525020616d6f756e74293a4361636865" + "64206f626a6563742062616c616e6365202873657269616c697a65642058525020616d6f756e74293a436163686564" + "206f626a6563742062616c616e6365206c656e67746820286e6f6e2d58525020616d6f756e74293a43616368656420" + "6f626a6563742062616c616e63653a494e464f3a206765745f6c65646765725f6f626a5f6669656c642842616c616e" + "636529206661696c65643a436163686564206e6573746564206669656c64206c656e6774683a436163686564206e65" + "73746564206669656c643a494e464f3a206765745f6c65646765725f6f626a5f6e65737465645f6669656c64206e6f" + "74206170706c696361626c653a436163686564206f626a656374205369676e657273206172726179206c656e677468" + "3a436163686564206e6573746564206172726179206c656e6774683a494e464f3a206765745f6c65646765725f6f62" + "6a5f6e65737465645f61727261795f6c656e206e6f74206170706c696361626c653a535543434553533a20416e7920" + "6c6564676572206f626a6563742066756e6374696f6e73494e464f3a2063616368655f6c65646765725f6f626a2066" + "61696c65642028657870656374656420776974682074657374206669787475726573293a494e464f3a206765745f6c" + "65646765725f6f626a5f6669656c64206661696c656420617320657870656374656420286e6f20636163686564206f" + "626a656374293a494e464f3a206765745f6c65646765725f6f626a5f6e65737465645f6669656c64206661696c6564" + "2061732065787065637465643a494e464f3a206765745f6c65646765725f6f626a5f61727261795f6c656e20666169" + "6c65642061732065787065637465643a494e464f3a206765745f6c65646765725f6f626a5f6e65737465645f617272" + "61795f6c656e206661696c65642061732065787065637465643a535543434553533a20416e79206c6564676572206f" + "626a6563742066756e6374696f6e732028696e7465726661636520746573746564294552524f523a206163636f756e" + "74726f6f745f6964206661696c656420666f722063616368696e6720746573743a2d2d2d2043617465676f72792035" + "3a204b65796c65742047656e65726174696f6e2046756e6374696f6e73202d2d2d4163636f756e74206b65796c6574" + "3a546573745479706543726564656e7469616c206b65796c65743a494e464f3a2063726564656e7469616c5f6b6579" + "6c6574206661696c656420286578706563746564202d20696e74657266616365206973737565293a457363726f7720" + "6b65796c65743a4f7261636c65206b65796c65743a535543434553533a204b65796c65742067656e65726174696f6e" + "2066756e6374696f6e734552524f523a206f7261636c655f6b65796c6574206661696c65643a4552524f523a206573" + "63726f775f6b65796c6574206661696c65643a4552524f523a206163636f756e74726f6f745f6964206661696c6564" + "3a2d2d2d2043617465676f727920363a205574696c6974792046756e6374696f6e73202d2d2d48656c6c6f2c205852" + "504c205741534d20776f726c6421496e70757420646174613a5348413531322068616c6620686173683a4e46542064" + "617461206c656e6774683a4e465420646174613a494e464f3a206765745f6e6674206661696c656420286578706563" + "746564202d206e6f2073756368204e4654293a54657374207472616365206d6573736167657061796c6f6164547261" + "63652066756e6374696f6e206279746573207772697474656e3a54657374206e756d62657220747261636554726163" + "655f6e756d2066756e6374696f6e20737563636565646564535543434553533a205574696c6974792066756e637469" + "6f6e734552524f523a2074726163655f6e756d2829206661696c65643a4552524f523a207472616365282920666169" + "6c65643a4552524f523a20636f6d707574655f7368613531325f68616c66206661696c65643a2d2d2d204361746567" + "6f727920373a2044617461205570646174652046756e6374696f6e73202d2d2d55706461746564206c656467657220" + "656e74727920646174612066726f6d205741534d20746573745375636365737366756c6c792075706461746564206c" + "656467657220656e74727920776974683a535543434553533a2044617461207570646174652066756e6374696f6e73" + "4552524f523a207570646174655f64617461206661696c65643a004d0970726f64756365727302086c616e67756167" + "65010452757374000c70726f6365737365642d6279010572757374631d312e38372e30202831373036376539616320" + "323032352d30352d303929002c0f7461726765745f6665617475726573022b0f6d757461626c652d676c6f62616c73" + "2b087369676e2d657874"; extern std::string const kAllKeyletsWasmHex = "0061736d0100000001500a60067f7f7f7f7f7f017f60047f7f7f7f017f60087f7f7f7f7f7f7f7f017f60047f7f7f7f" @@ -201,191 +208,191 @@ extern std::string const kAllKeyletsWasmHex = "08686f73745f6c69620a7061796368616e5f6964000208686f73745f6c6962167065726d697373696f6e65645f646f" "6d61696e5f6964000008686f73745f6c69620a7369676e6572735f6964000108686f73745f6c6962097469636b6574" "5f6964000008686f73745f6c6962087661756c745f6964000003070603030307080905030100110619037f01418080" - "c0000b7f0041c28ac0000b7f0041d08ac0000b072e04066d656d6f727902000666696e697368001b0a5f5f64617461" - "5f656e6403010b5f5f686561705f6261736503020ae83706140020002001200220034182802042828020101d0b1400" - "20002001200220034181802042818020101d0bd10302017f017e230041a0016b22042400024020012d000041014604" - "4041d780c000411620012802042201ac10001a200041013a0000200020013602040c010b200441186a200141196a29" - "0000370300200441106a200141116a290000370300200441086a200141096a29000037030020042001290001370300" - "2002200320044120410110011a2004412041001002220141004c044041d080c00041072001ac10001a200041013a00" - "00200020013602040c010b418b80c000410f4285801410001a20014185801420044180016a41201003220141204704" - "4041af80c0004115417f20012001417f4e1b2201ac10001a200041013a0000200020013602040c010b200441c2006a" - "20044182016a2d00003a0000200441f0006a20044197016a2900002205370300200441286a22012004418f016a2900" - "00370300200441306a22022005370300200441386a22032004419f016a2d00003a0000200420042f0080013b014020" - "042004290087013703202004200428008301360043200441df006a20032d00003a0000200441d7006a200229030037" - "0000200441cf006a20012903003700002004200429032037004741c480c000410c200441406b4120410110011a2000" - "4180023b01000b200441a0016a24000bd32c02097f027e23004180076b2200240041ed80c000412341014100410010" - "011a02402000027f02404181802020004190016a220741141004220641144604402000410e6a20004192016a22032d" - "00003a000020002000290097013703e80120002000419c016a22012900003700ed01200020002f0090013b010c2000" - "20002903e8013703d806200020002900ed013700dd06200020002800930136000f200041186a20002900dd06370000" - "200020002903d806370013419081c00041082000410c6a2204411410051a4183802020074114100422064114470d03" - "200041226a20032d00003a000020002000290097013703e801200020012900003700ed01200020002f0090013b0120" - "200020002903e8013703d806200020002900ed013700dd0620002000280093013600232000412c6a20002900dd0637" - "0000200020002903d806370027419881c000410c200041206a411410051a200041a8016a22034200370300200041a0" - "016a2201420037030020004198016a420037030020004200370390012004411420074120100622044120460d010240" - "20044100480440200020043602380c010b2000417f3602380b41010c020b0c020b200041cd006a2003290300370000" - "200041c5006a20012903003700002000413d6a20004198016a290300370000200020002903900137003541000b3a00" - "3420004190016a200041346a41a481c00041071019024020002d00900141014604402000280294012106419c8ac000" - "4112420510001a0c010b4100210641ab81c000413541014100410010011a200041e6006a41c4003a0000200041e000" - "6a4100360200200041eb006a41003a0000200041d5a6013b01642000420037035820004100360067200041a8016a22" - "044200370300200041a0016a2203420037030020004198016a22014200370300200042003703900102402000410c6a" - "4114200041206a4114200041d8006a411420004190016a412010072207412047044002402007410048044020002007" - "3602700c010b2000417f3602700b410121060c010b20004185016a2004290300370000200041fd006a200329030037" - "0000200041f5006a2001290300370000200020002903900137006d0b200020063a006c20004190016a200041ec006a" - "41e081c0004109101a20002d00900141014604402000280294012106419c8ac0004112420510001a0c010b41002106" - "41e981c000413741014100410010011a200041f8016a200041306a2204280100360200200041f0016a200041286a22" - "0329010037030020004184026a200041e0006a290300220a3702002000418c026a200041e8006a2802002201360200" - "200020002901203703e8012000200029035822093702fc01200041e8066a22052001360200200041e0066a2207200a" - "370300200020093703d806200041f4066a2003290100370200200041fc066a20042801003602002000200029012037" - "02ec0620004190026a200041d8066a22034128101c20004194016a200041e8016a41d000101c200041013602900120" - "0041f0066a220142003703002005420037030020074200370300200042003703d806024041ae8ac0004114200041bc" - "016a412820034120100822034120470440024020034100480440200020033602ec010c010b2000417f3602ec010b41" - "0121060c010b20004181026a2001290300370000200041f9016a2005290300370000200041f1016a20072903003700" - "00200020002903d8063700e9010b200020063a00e801200041bc026a200041e8016a41a082c0004103101920002d00" - "bc02410146044020002802c0022106419c8ac0004112420610001a0c010b4100210641a382c0004131410141004100" - "10011a200041063602d80620004180026a22044200370300200041f8016a22034200370300200041f0016a22014200" - "370300200042003703e80102402000410c6a4114200041d8066a4104200041e8016a41201009220741204704400240" - "20074100480440200020073602c8020c010b2000417f3602c8020b410121060c010b200041dd026a20042903003700" - "00200041d5026a2003290300370000200041cd026a2001290300370000200020002903e8013700c5020b200020063a" - "00c402200041e8016a200041c4026a41d482c0004105101920002d00e801410146044020002802ec012106419c8ac0" - "004112420610001a0c010b41d982c000413341014100410010011a20004180026a4200370300200041f8016a420037" - "0300200041f0016a4200370300200042003703e801024002402000410c6a2201411420014114418c83c00041122000" - "41e8016a4120100a2201412047044041d780c0004116417f20012001417f4e1b2206ac10001a0c010b200041da066a" - "20002d00ea013a0000200041f0026a200041f7016a290000220a370300200041f8026a200041ff016a290000220937" - "030020004180036a20004187026a2d000022013a0000200041e7066a200a370000200041ef066a2009370000200041" - "f7066a20013a0000200020002f01e8013b01d806200020002900ef0122093703e802200020002800eb013600db0620" - "0020093700df06419e83c000410a200041d8066a22014120410110011a2001412041001002220641004c044041d080" - "c00041072006ac10001a0c010b418b80c000410f4298802010001a200641988020200041e8016a4114100322014114" - "460d0141af80c0004115417f20012001417f4e1b2206ac10001a0b419c8ac0004112420710001a0c010b419a80c000" - "411541014100410010011a41a883c000413841014100410010011a230041206b22082400200841186a220742003703" - "00200841106a22044200370300200841086a220342003703002008420037030020004184036a2201027f2000410c6a" - "22064114200041206a2202411420084120100b22054120470440024020054100480440200120053602040c010b2001" - "417f3602040b41010c010b20012008290300370001200141196a2007290300370000200141116a2004290300370000" - "200141096a200329030037000041000b3a0000200841206a2400200041e8016a2205200141e083c000410810192000" - "2d00e80145044041e883c000413641014100410010011a230041206b22082400200841186a22074200370300200841" - "106a22044200370300200841086a2203420037030020084200370300200041a8036a2201027f200641142002411420" - "084120100c22024120470440024020024100480440200120023602040c010b2001417f3602040b41010c010b200120" - "08290300370001200141196a2007290300370000200141116a2004290300370000200141096a200329030037000041" - "000b3a0000200841206a240020052001419e84c000410e101920002d00e801410146044020002802ec012106419c8a" - "c0004112420910001a0c020b41ac84c000413c41014100410010011a230041206b22022400200241186a2207420037" - "0300200241106a22044200370300200241086a2203420037030020024200370300200041cc036a2201027f2000410c" - "6a411420024120100d22054120470440024020054100480440200120053602040c010b2001417f3602040b41010c01" - "0b20012002290300370001200141196a2007290300370000200141116a2004290300370000200141096a2003290300" - "37000041000b3a0000200241206a2400200041e8016a200141e884c0004103101920002d00e8014101460440200028" - "02ec012106419c8ac0004112420a10001a0c020b41eb84c000413141014100410010011a230041306b220224002002" - "410b36020c200241286a22074200370300200241206a22044200370300200241186a22034200370300200242003703" - "10200041f0036a2201027f2000410c6a41142002410c6a4104200241106a4120100e22054120470440024020054100" - "480440200120053602040c010b2001417f3602040b41010c010b20012002290310370001200141196a200729030037" - "0000200141116a2004290300370000200141096a200329030037000041000b3a0000200241306a2400200041e8016a" - "2001419c85c0004106101920002d00e801410146044020002802ec012106419c8ac0004112420b10001a0c020b41a2" - "85c000413441014100410010011a230041306b220224002002410c36020c200241286a22074200370300200241206a" - "22044200370300200241186a220342003703002002420037031020004194046a2201027f2000410c6a41142002410c" - "6a4104200241106a4120100f22054120470440024020054100480440200120053602040c010b2001417f3602040b41" - "010c010b20012002290310370001200141196a2007290300370000200141116a2004290300370000200141096a2003" - "29030037000041000b3a0000200241306a2400200041fc016a2000411c6a280100360200200041f4016a200041146a" - "2901003702002000200029010c3702ec01200041808080e0003602e801200041d8066a2103230041406a2204240002" - "4020012d0000410146044041d780c000411620012802042201ac10001a200341013a0000200320013602040c010b20" - "0441206a200141196a290000370300200441186a200141116a290000370300200441106a200141096a290000370300" - "2004200129000137030841d685c000410b200441086a22014120410110011a02400240200141204100100222014100" - "4c044041d080c00041072001ac10001a0c010b418b80c000410f4284802010001a2001418480202004412c6a411410" - "0322014114460d0141af80c0004115417f20012001417f4e1b2201ac10001a0b200341013a0000200320013602040c" - "010b419a80c000411541014100410010011a20034180023b01000b200441406b240020002d00d80641014604402000" - "2802dc062106419c8ac0004112420c10001a0c020b41e185c000413941014100410010011a230041206b2202240020" - "0241186a22074200370300200241106a22044200370300200241086a2203420037030020024200370300200041b804" - "6a2201027f200041e8016a4118200041206a4114200241201010220541204704400240200541004804402001200536" - "02040c010b2001417f3602040b41010c010b20012002290300370001200141196a2007290300370000200141116a20" - "04290300370000200141096a200329030037000041000b3a0000200241206a2400200041d8066a2001419a86c00041" - "07101920002d00d806410146044020002802dc062106419c8ac0004112420d10001a0c020b41a186c0004135410141" - "00410010011a230041306b220224002002410636020c200241286a22074200370300200241206a2204420037030020" - "0241186a2203420037030020024200370310200041dc046a2201027f200041206a41142002410c6a4104200241106a" - "4120101122054120470440024020054100480440200120053602040c010b2001417f3602040b41010c010b20012002" - "290310370001200141196a2007290300370000200141116a2004290300370000200141096a20032903003700004100" - "0b3a0000200241306a2400200041d8066a200141d686c000410c101820002d00d806410146044020002802dc062106" - "419c8ac0004112420d10001a0c020b41e286c000413a41014100410010011a230041306b220224002002410d36020c" - "200241286a22074200370300200241206a22044200370300200241186a220342003703002002420037031020004180" - "056a2201027f2000410c6a41142002410c6a4104200241106a41201012220541204704400240200541004804402001" - "20053602040c010b2001417f3602040b41010c010b20012002290310370001200141196a2007290300370000200141" - "116a2004290300370000200141096a200329030037000041000b3a0000200241306a2400200041d8066a2001419c87" - "c0004105101920002d00d806410146044020002802dc062106419c8ac0004112420d10001a0c020b41a187c0004133" - "41014100410010011a230041306b220224002002410e36020c200241286a22074200370300200241206a2204420037" - "0300200241186a2203420037030020024200370310200041a4056a2201027f2000410c6a4114200041206a41142002" - "410c6a4104200241106a4120101322054120470440024020054100480440200120053602040c010b2001417f360204" - "0b41010c010b20012002290310370001200141196a2007290300370000200141116a2004290300370000200141096a" - "200329030037000041000b3a0000200241306a2400200041d8066a200141d487c000410a101920002d00d806410146" - "044020002802dc062106419c8ac0004112420e10001a0c020b41de87c000413841014100410010011a230041306b22" - "0224002002410f36020c200241286a22074200370300200241206a22044200370300200241186a2203420037030020" - "024200370310200041c8056a2201027f2000410c6a41142002410c6a4104200241106a412010142205412047044002" - "4020054100480440200120053602040c010b2001417f3602040b41010c010b20012002290310370001200141196a20" - "07290300370000200141116a2004290300370000200141096a200329030037000041000b3a0000200241306a240020" - "0041d8066a2001419688c0004112101820002d00d806410146044020002802dc062106419c8ac0004112420f10001a" - "0c020b41a888c00041c00041014100410010011a230041206b22022400200241186a22074200370300200241106a22" - "044200370300200241086a2203420037030020024200370300200041ec056a2201027f2000410c6a41142002412010" - "1522054120470440024020054100480440200120053602040c010b2001417f3602040b41010c010b20012002290300" - "370001200141196a2007290300370000200141116a2004290300370000200141096a200329030037000041000b3a00" - "00200241206a2400200041d8066a200141e888c000410a101a20002d00d806410146044020002802dc062106419c8a" - "c0004112421010001a0c020b41f288c000413841014100410010011a230041306b220224002002411236020c200241" - "286a22074200370300200241206a22044200370300200241186a220342003703002002420037031020004190066a22" - "01027f2000410c6a41142002410c6a4104200241106a41201016220541204704400240200541004804402001200536" - "02040c010b2001417f3602040b41010c010b20012002290310370001200141196a2007290300370000200141116a20" - "04290300370000200141096a200329030037000041000b3a0000200241306a2400200041d8066a200141aa89c00041" - "06101920002d00d806410146044020002802dc062106419c8ac0004112421210001a0c020b4101210641b089c00041" - "3441014100410010011a230041306b220224002002411336020c200241286a22074200370300200241206a22044200" - "370300200241186a2203420037030020024200370310200041b4066a2201027f2000410c6a41142002410c6a410420" - "0241106a4120101722054120470440024020054100480440200120053602040c010b2001417f3602040b41010c010b" - "20012002290310370001200141196a2007290300370000200141116a2004290300370000200141096a200329030037" - "000041000b3a0000200241306a2400200041d8066a200141e489c0004105101920002d00d806410146044020002802" - "dc062106419c8ac0004112421310001a0c020b41e989c000413341014100410010011a0c010b20002802ec01210641" - "9c8ac0004112420810001a0b20004180076a240020060f0b418080c000410b417f20062006417f4e1bac1000000bfd" - "0401067f200241104f0440024020002000410020006b41037122056a22044f0d002001210320050440200521060340" - "200020032d00003a0000200341016a2103200041016a2100200641016b22060d000b0b200541016b4107490d000340" - "200020032d00003a0000200041016a200341016a2d00003a0000200041026a200341026a2d00003a0000200041036a" - "200341036a2d00003a0000200041046a200341046a2d00003a0000200041056a200341056a2d00003a000020004106" - "6a200341066a2d00003a0000200041076a200341076a2d00003a0000200341086a2103200041086a22002004470d00" - "0b0b2004200220056b2207417c7122086a21000240200120056a2206410371450440200020044d0d01200621010340" - "20042001280200360200200141046a2101200441046a22042000490d000b0c010b200020044d0d0020064103742205" - "41187121032006417c71220241046a2101410020056b41187121052002280200210203402004200220037620012802" - "00220220057472360200200141046a2101200441046a22042000490d000b0b20074103712102200620086a21010b02" - "402000200020026a22064f0d002002410771220304400340200020012d00003a0000200141016a2101200041016a21" - "00200341016b22030d000b0b200241016b4107490d000340200020012d00003a0000200041016a200141016a2d0000" - "3a0000200041026a200141026a2d00003a0000200041036a200141036a2d00003a0000200041046a200141046a2d00" - "003a0000200041056a200141056a2d00003a0000200041066a200141066a2d00003a0000200041076a200141076a2d" - "00003a0000200141086a2101200041086a22002006470d000b0b0b940201017f230041406a22062400024020012d00" - "00410146044041d780c000411620012802042201ac10001a200041013a0000200020013602040c010b200641206a20" - "0141196a290000370300200641186a200141116a290000370300200641106a200141096a2900003703002006200129" - "000137030820022003200641086a22014120410110011a024002402001412041001002220141004c044041d080c000" - "41072001ac10001a0c010b418b80c000410f200510001a200120042006412c6a4114100322014114460d0141af80c0" - "004115417f20012001417f4e1b2201ac10001a0b200041013a0000200020013602040c010b419a80c0004115410141" - "00410010011a20004180023b01000b200641406b24000b0bb80a0100418080c0000bae0a6572726f725f636f64653d" - "47657474696e67206669656c643a204669656c6420646174613a207265747269657665644572726f72206765747469" - "6e67206669656c643a204669656c6420646174613a204572726f723a204572726f722067657474696e67206b65796c" - "65743a202424242424205354415254494e47205741534d20455845435554494f4e2024242424244163636f756e743a" - "44657374696e6174696f6e3a4163636f756e744163636f756e74206f626a656374206578697374732c2070726f6365" - "6564696e67207769746820657363726f772066696e6973682e54727573746c696e6554727573746c696e65206f626a" - "656374206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e414d4d414d" - "4d206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e" - "436865636b436865636b206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f" - "772066696e6973682e7465726d73616e64636f6e646974696f6e7343726564656e7469616c43726564656e7469616c" - "206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e44" - "656c656761746544656c6567617465206f626a656374206578697374732c2070726f63656564696e67207769746820" - "657363726f772066696e6973682e4465706f736974507265617574684465706f73697450726561757468206f626a65" - "6374206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e444944444944" - "206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e45" - "7363726f77457363726f77206f626a656374206578697374732c2070726f63656564696e6720776974682065736372" - "6f772066696e6973682e4d505449737375616e63654d505449737375616e6365206f626a656374206578697374732c" - "2070726f63656564696e67207769746820657363726f772066696e6973682e4d50546f6b656e4d50546f6b656e206f" - "626a656374206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e4e4654" - "6f6b656e4f666665724e46546f6b656e4f66666572206f626a656374206578697374732c2070726f63656564696e67" - "207769746820657363726f772066696e6973682e4f666665724f66666572206f626a656374206578697374732c2070" - "726f63656564696e67207769746820657363726f772066696e6973682e5061794368616e6e656c5061794368616e6e" - "656c206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f772066696e697368" - "2e5065726d697373696f6e6564446f6d61696e5065726d697373696f6e6564446f6d61696e206f626a656374206578" - "697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e5369676e65724c69737453" - "69676e65724c697374206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f77" - "2066696e6973682e5469636b65745469636b6574206f626a656374206578697374732c2070726f63656564696e6720" - "7769746820657363726f772066696e6973682e5661756c745661756c74206f626a656374206578697374732c207072" - "6f63656564696e67207769746820657363726f772066696e6973682e43757272656e74207365712076616c75653a00" - "4d0970726f64756365727302086c616e6775616765010452757374000c70726f6365737365642d6279010572757374" - "631d312e38372e30202831373036376539616320323032352d30352d303929002c0f7461726765745f666561747572" - "6573022b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; + "c0000b7f0041c28ac0000b7f0041d08ac0000b073504066d656d6f727902000d657363726f775f66696e697368001b" + "0a5f5f646174615f656e6403010b5f5f686561705f6261736503020ae8370614002000200120022003418280204282" + "8020101d0b140020002001200220034181802042818020101d0bd10302017f017e230041a0016b2204240002402001" + "2d0000410146044041d780c000411620012802042201ac10001a200041013a0000200020013602040c010b20044118" + "6a200141196a290000370300200441106a200141116a290000370300200441086a200141096a290000370300200420" + "012900013703002002200320044120410110011a2004412041001002220141004c044041d080c00041072001ac1000" + "1a200041013a0000200020013602040c010b418b80c000410f4285801410001a20014185801420044180016a412010" + "032201412047044041af80c0004115417f20012001417f4e1b2201ac10001a200041013a0000200020013602040c01" + "0b200441c2006a20044182016a2d00003a0000200441f0006a20044197016a2900002205370300200441286a220120" + "04418f016a290000370300200441306a22022005370300200441386a22032004419f016a2d00003a0000200420042f" + "0080013b014020042004290087013703202004200428008301360043200441df006a20032d00003a0000200441d700" + "6a2002290300370000200441cf006a20012903003700002004200429032037004741c480c000410c200441406b4120" + "410110011a20004180023b01000b200441a0016a24000bd32c02097f027e23004180076b2200240041ed80c0004123" + "41014100410010011a02402000027f02404181802020004190016a220741141004220641144604402000410e6a2000" + "4192016a22032d00003a000020002000290097013703e80120002000419c016a22012900003700ed01200020002f00" + "90013b010c200020002903e8013703d806200020002900ed013700dd06200020002800930136000f200041186a2000" + "2900dd06370000200020002903d806370013419081c00041082000410c6a2204411410051a41838020200741141004" + "22064114470d03200041226a20032d00003a000020002000290097013703e801200020012900003700ed0120002000" + "2f0090013b0120200020002903e8013703d806200020002900ed013700dd0620002000280093013600232000412c6a" + "20002900dd06370000200020002903d806370027419881c000410c200041206a411410051a200041a8016a22034200" + "370300200041a0016a2201420037030020004198016a42003703002000420037039001200441142007412010062204" + "4120460d01024020044100480440200020043602380c010b2000417f3602380b41010c020b0c020b200041cd006a20" + "03290300370000200041c5006a20012903003700002000413d6a20004198016a290300370000200020002903900137" + "003541000b3a003420004190016a200041346a41a481c00041071019024020002d0090014101460440200028029401" + "2106419c8ac0004112420510001a0c010b4100210641ab81c000413541014100410010011a200041e6006a41c4003a" + "0000200041e0006a4100360200200041eb006a41003a0000200041d5a6013b01642000420037035820004100360067" + "200041a8016a22044200370300200041a0016a2203420037030020004198016a220142003703002000420037039001" + "02402000410c6a4114200041206a4114200041d8006a411420004190016a4120100722074120470440024020074100" + "480440200020073602700c010b2000417f3602700b410121060c010b20004185016a2004290300370000200041fd00" + "6a2003290300370000200041f5006a2001290300370000200020002903900137006d0b200020063a006c2000419001" + "6a200041ec006a41e081c0004109101a20002d00900141014604402000280294012106419c8ac0004112420510001a" + "0c010b4100210641e981c000413741014100410010011a200041f8016a200041306a2204280100360200200041f001" + "6a200041286a220329010037030020004184026a200041e0006a290300220a3702002000418c026a200041e8006a28" + "02002201360200200020002901203703e8012000200029035822093702fc01200041e8066a22052001360200200041" + "e0066a2207200a370300200020093703d806200041f4066a2003290100370200200041fc066a200428010036020020" + "0020002901203702ec0620004190026a200041d8066a22034128101c20004194016a200041e8016a41d000101c2000" + "410136029001200041f0066a220142003703002005420037030020074200370300200042003703d806024041ae8ac0" + "004114200041bc016a412820034120100822034120470440024020034100480440200020033602ec010c010b200041" + "7f3602ec010b410121060c010b20004181026a2001290300370000200041f9016a2005290300370000200041f1016a" + "2007290300370000200020002903d8063700e9010b200020063a00e801200041bc026a200041e8016a41a082c00041" + "03101920002d00bc02410146044020002802c0022106419c8ac0004112420610001a0c010b4100210641a382c00041" + "3141014100410010011a200041063602d80620004180026a22044200370300200041f8016a22034200370300200041" + "f0016a22014200370300200042003703e80102402000410c6a4114200041d8066a4104200041e8016a412010092207" + "4120470440024020074100480440200020073602c8020c010b2000417f3602c8020b410121060c010b200041dd026a" + "2004290300370000200041d5026a2003290300370000200041cd026a2001290300370000200020002903e8013700c5" + "020b200020063a00c402200041e8016a200041c4026a41d482c0004105101920002d00e801410146044020002802ec" + "012106419c8ac0004112420610001a0c010b41d982c000413341014100410010011a20004180026a42003703002000" + "41f8016a4200370300200041f0016a4200370300200042003703e801024002402000410c6a2201411420014114418c" + "83c0004112200041e8016a4120100a2201412047044041d780c0004116417f20012001417f4e1b2206ac10001a0c01" + "0b200041da066a20002d00ea013a0000200041f0026a200041f7016a290000220a370300200041f8026a200041ff01" + "6a290000220937030020004180036a20004187026a2d000022013a0000200041e7066a200a370000200041ef066a20" + "09370000200041f7066a20013a0000200020002f01e8013b01d806200020002900ef0122093703e802200020002800" + "eb013600db06200020093700df06419e83c000410a200041d8066a22014120410110011a2001412041001002220641" + "004c044041d080c00041072006ac10001a0c010b418b80c000410f4298802010001a200641988020200041e8016a41" + "14100322014114460d0141af80c0004115417f20012001417f4e1b2206ac10001a0b419c8ac0004112420710001a0c" + "010b419a80c000411541014100410010011a41a883c000413841014100410010011a230041206b2208240020084118" + "6a22074200370300200841106a22044200370300200841086a220342003703002008420037030020004184036a2201" + "027f2000410c6a22064114200041206a2202411420084120100b220541204704400240200541004804402001200536" + "02040c010b2001417f3602040b41010c010b20012008290300370001200141196a2007290300370000200141116a20" + "04290300370000200141096a200329030037000041000b3a0000200841206a2400200041e8016a2205200141e083c0" + "004108101920002d00e80145044041e883c000413641014100410010011a230041206b22082400200841186a220742" + "00370300200841106a22044200370300200841086a2203420037030020084200370300200041a8036a2201027f2006" + "41142002411420084120100c22024120470440024020024100480440200120023602040c010b2001417f3602040b41" + "010c010b20012008290300370001200141196a2007290300370000200141116a2004290300370000200141096a2003" + "29030037000041000b3a0000200841206a240020052001419e84c000410e101920002d00e801410146044020002802" + "ec012106419c8ac0004112420910001a0c020b41ac84c000413c41014100410010011a230041206b22022400200241" + "186a22074200370300200241106a22044200370300200241086a2203420037030020024200370300200041cc036a22" + "01027f2000410c6a411420024120100d22054120470440024020054100480440200120053602040c010b2001417f36" + "02040b41010c010b20012002290300370001200141196a2007290300370000200141116a2004290300370000200141" + "096a200329030037000041000b3a0000200241206a2400200041e8016a200141e884c0004103101920002d00e80141" + "0146044020002802ec012106419c8ac0004112420a10001a0c020b41eb84c000413141014100410010011a23004130" + "6b220224002002410b36020c200241286a22074200370300200241206a22044200370300200241186a220342003703" + "0020024200370310200041f0036a2201027f2000410c6a41142002410c6a4104200241106a4120100e220541204704" + "40024020054100480440200120053602040c010b2001417f3602040b41010c010b2001200229031037000120014119" + "6a2007290300370000200141116a2004290300370000200141096a200329030037000041000b3a0000200241306a24" + "00200041e8016a2001419c85c0004106101920002d00e801410146044020002802ec012106419c8ac0004112420b10" + "001a0c020b41a285c000413441014100410010011a230041306b220224002002410c36020c200241286a2207420037" + "0300200241206a22044200370300200241186a220342003703002002420037031020004194046a2201027f2000410c" + "6a41142002410c6a4104200241106a4120100f22054120470440024020054100480440200120053602040c010b2001" + "417f3602040b41010c010b20012002290310370001200141196a2007290300370000200141116a2004290300370000" + "200141096a200329030037000041000b3a0000200241306a2400200041fc016a2000411c6a280100360200200041f4" + "016a200041146a2901003702002000200029010c3702ec01200041808080e0003602e801200041d8066a2103230041" + "406a22042400024020012d0000410146044041d780c000411620012802042201ac10001a200341013a000020032001" + "3602040c010b200441206a200141196a290000370300200441186a200141116a290000370300200441106a20014109" + "6a2900003703002004200129000137030841d685c000410b200441086a22014120410110011a024002402001412041" + "001002220141004c044041d080c00041072001ac10001a0c010b418b80c000410f4284802010001a20014184802020" + "04412c6a4114100322014114460d0141af80c0004115417f20012001417f4e1b2201ac10001a0b200341013a000020" + "0320013602040c010b419a80c000411541014100410010011a20034180023b01000b200441406b240020002d00d806" + "410146044020002802dc062106419c8ac0004112420c10001a0c020b41e185c000413941014100410010011a230041" + "206b22022400200241186a22074200370300200241106a22044200370300200241086a220342003703002002420037" + "0300200041b8046a2201027f200041e8016a4118200041206a41142002412010102205412047044002402005410048" + "0440200120053602040c010b2001417f3602040b41010c010b20012002290300370001200141196a20072903003700" + "00200141116a2004290300370000200141096a200329030037000041000b3a0000200241206a2400200041d8066a20" + "01419a86c0004107101920002d00d806410146044020002802dc062106419c8ac0004112420d10001a0c020b41a186" + "c000413541014100410010011a230041306b220224002002410636020c200241286a22074200370300200241206a22" + "044200370300200241186a2203420037030020024200370310200041dc046a2201027f200041206a41142002410c6a" + "4104200241106a4120101122054120470440024020054100480440200120053602040c010b2001417f3602040b4101" + "0c010b20012002290310370001200141196a2007290300370000200141116a2004290300370000200141096a200329" + "030037000041000b3a0000200241306a2400200041d8066a200141d686c000410c101820002d00d806410146044020" + "002802dc062106419c8ac0004112420d10001a0c020b41e286c000413a41014100410010011a230041306b22022400" + "2002410d36020c200241286a22074200370300200241206a22044200370300200241186a2203420037030020024200" + "37031020004180056a2201027f2000410c6a41142002410c6a4104200241106a412010122205412047044002402005" + "4100480440200120053602040c010b2001417f3602040b41010c010b20012002290310370001200141196a20072903" + "00370000200141116a2004290300370000200141096a200329030037000041000b3a0000200241306a2400200041d8" + "066a2001419c87c0004105101920002d00d806410146044020002802dc062106419c8ac0004112420d10001a0c020b" + "41a187c000413341014100410010011a230041306b220224002002410e36020c200241286a22074200370300200241" + "206a22044200370300200241186a2203420037030020024200370310200041a4056a2201027f2000410c6a41142000" + "41206a41142002410c6a4104200241106a4120101322054120470440024020054100480440200120053602040c010b" + "2001417f3602040b41010c010b20012002290310370001200141196a2007290300370000200141116a200429030037" + "0000200141096a200329030037000041000b3a0000200241306a2400200041d8066a200141d487c000410a10192000" + "2d00d806410146044020002802dc062106419c8ac0004112420e10001a0c020b41de87c00041384101410041001001" + "1a230041306b220224002002410f36020c200241286a22074200370300200241206a22044200370300200241186a22" + "03420037030020024200370310200041c8056a2201027f2000410c6a41142002410c6a4104200241106a4120101422" + "054120470440024020054100480440200120053602040c010b2001417f3602040b41010c010b200120022903103700" + "01200141196a2007290300370000200141116a2004290300370000200141096a200329030037000041000b3a000020" + "0241306a2400200041d8066a2001419688c0004112101820002d00d806410146044020002802dc062106419c8ac000" + "4112420f10001a0c020b41a888c00041c00041014100410010011a230041206b22022400200241186a220742003703" + "00200241106a22044200370300200241086a2203420037030020024200370300200041ec056a2201027f2000410c6a" + "411420024120101522054120470440024020054100480440200120053602040c010b2001417f3602040b41010c010b" + "20012002290300370001200141196a2007290300370000200141116a2004290300370000200141096a200329030037" + "000041000b3a0000200241206a2400200041d8066a200141e888c000410a101a20002d00d806410146044020002802" + "dc062106419c8ac0004112421010001a0c020b41f288c000413841014100410010011a230041306b22022400200241" + "1236020c200241286a22074200370300200241206a22044200370300200241186a2203420037030020024200370310" + "20004190066a2201027f2000410c6a41142002410c6a4104200241106a412010162205412047044002402005410048" + "0440200120053602040c010b2001417f3602040b41010c010b20012002290310370001200141196a20072903003700" + "00200141116a2004290300370000200141096a200329030037000041000b3a0000200241306a2400200041d8066a20" + "0141aa89c0004106101920002d00d806410146044020002802dc062106419c8ac0004112421210001a0c020b410121" + "0641b089c000413441014100410010011a230041306b220224002002411336020c200241286a220742003703002002" + "41206a22044200370300200241186a2203420037030020024200370310200041b4066a2201027f2000410c6a411420" + "02410c6a4104200241106a4120101722054120470440024020054100480440200120053602040c010b2001417f3602" + "040b41010c010b20012002290310370001200141196a2007290300370000200141116a200429030037000020014109" + "6a200329030037000041000b3a0000200241306a2400200041d8066a200141e489c0004105101920002d00d8064101" + "46044020002802dc062106419c8ac0004112421310001a0c020b41e989c000413341014100410010011a0c010b2000" + "2802ec012106419c8ac0004112420810001a0b20004180076a240020060f0b418080c000410b417f20062006417f4e" + "1bac1000000bfd0401067f200241104f0440024020002000410020006b41037122056a22044f0d0020012103200504" + "40200521060340200020032d00003a0000200341016a2103200041016a2100200641016b22060d000b0b200541016b" + "4107490d000340200020032d00003a0000200041016a200341016a2d00003a0000200041026a200341026a2d00003a" + "0000200041036a200341036a2d00003a0000200041046a200341046a2d00003a0000200041056a200341056a2d0000" + "3a0000200041066a200341066a2d00003a0000200041076a200341076a2d00003a0000200341086a2103200041086a" + "22002004470d000b0b2004200220056b2207417c7122086a21000240200120056a2206410371450440200020044d0d" + "0120062101034020042001280200360200200141046a2101200441046a22042000490d000b0c010b200020044d0d00" + "2006410374220541187121032006417c71220241046a2101410020056b411871210520022802002102034020042002" + "2003762001280200220220057472360200200141046a2101200441046a22042000490d000b0b200741037121022006" + "20086a21010b02402000200020026a22064f0d002002410771220304400340200020012d00003a0000200141016a21" + "01200041016a2100200341016b22030d000b0b200241016b4107490d000340200020012d00003a0000200041016a20" + "0141016a2d00003a0000200041026a200141026a2d00003a0000200041036a200141036a2d00003a0000200041046a" + "200141046a2d00003a0000200041056a200141056a2d00003a0000200041066a200141066a2d00003a000020004107" + "6a200141076a2d00003a0000200141086a2101200041086a22002006470d000b0b0b940201017f230041406a220624" + "00024020012d0000410146044041d780c000411620012802042201ac10001a200041013a0000200020013602040c01" + "0b200641206a200141196a290000370300200641186a200141116a290000370300200641106a200141096a29000037" + "03002006200129000137030820022003200641086a22014120410110011a024002402001412041001002220141004c" + "044041d080c00041072001ac10001a0c010b418b80c000410f200510001a200120042006412c6a4114100322014114" + "460d0141af80c0004115417f20012001417f4e1b2201ac10001a0b200041013a0000200020013602040c010b419a80" + "c000411541014100410010011a20004180023b01000b200641406b24000b0bb80a0100418080c0000bae0a6572726f" + "725f636f64653d47657474696e67206669656c643a204669656c6420646174613a207265747269657665644572726f" + "722067657474696e67206669656c643a204669656c6420646174613a204572726f723a204572726f72206765747469" + "6e67206b65796c65743a202424242424205354415254494e47205741534d20455845435554494f4e20242424242441" + "63636f756e743a44657374696e6174696f6e3a4163636f756e744163636f756e74206f626a65637420657869737473" + "2c2070726f63656564696e67207769746820657363726f772066696e6973682e54727573746c696e6554727573746c" + "696e65206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973" + "682e414d4d414d4d206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f7720" + "66696e6973682e436865636b436865636b206f626a656374206578697374732c2070726f63656564696e6720776974" + "6820657363726f772066696e6973682e7465726d73616e64636f6e646974696f6e7343726564656e7469616c437265" + "64656e7469616c206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f772066" + "696e6973682e44656c656761746544656c6567617465206f626a656374206578697374732c2070726f63656564696e" + "67207769746820657363726f772066696e6973682e4465706f736974507265617574684465706f7369745072656175" + "7468206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f772066696e697368" + "2e444944444944206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f772066" + "696e6973682e457363726f77457363726f77206f626a656374206578697374732c2070726f63656564696e67207769" + "746820657363726f772066696e6973682e4d505449737375616e63654d505449737375616e6365206f626a65637420" + "6578697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e4d50546f6b656e4d50" + "546f6b656e206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f772066696e" + "6973682e4e46546f6b656e4f666665724e46546f6b656e4f66666572206f626a656374206578697374732c2070726f" + "63656564696e67207769746820657363726f772066696e6973682e4f666665724f66666572206f626a656374206578" + "697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e5061794368616e6e656c50" + "61794368616e6e656c206f626a656374206578697374732c2070726f63656564696e67207769746820657363726f77" + "2066696e6973682e5065726d697373696f6e6564446f6d61696e5065726d697373696f6e6564446f6d61696e206f62" + "6a656374206578697374732c2070726f63656564696e67207769746820657363726f772066696e6973682e5369676e" + "65724c6973745369676e65724c697374206f626a656374206578697374732c2070726f63656564696e672077697468" + "20657363726f772066696e6973682e5469636b65745469636b6574206f626a656374206578697374732c2070726f63" + "656564696e67207769746820657363726f772066696e6973682e5661756c745661756c74206f626a65637420657869" + "7374732c2070726f63656564696e67207769746820657363726f772066696e6973682e43757272656e742073657120" + "76616c75653a004d0970726f64756365727302086c616e6775616765010452757374000c70726f6365737365642d62" + "79010572757374631d312e38372e30202831373036376539616320323032352d30352d303929002c0f746172676574" + "5f6665617475726573022b0f6d757461626c652d676c6f62616c732b087369676e2d657874"; extern std::string const kCodecovTestsWasmHex = "0061736d0100000001570b60067f7f7f7f7f7f017f60047f7f7f7f017f60027f7f017f60037f7f7f017f60077f7f7f" @@ -419,232 +426,232 @@ extern std::string const kCodecovTestsWasmHex = "08686f73745f6c6962097469636b65745f6964000008686f73745f6c6962087661756c745f6964000008686f73745f" "6c69620b64656c65676174655f6964000008686f73745f6c6962126465706f7369745f707265617574685f69640000" "08686f73745f6c6962066469645f6964000108686f73745f6c69620a7369676e6572735f69640001030302090a0503" - "0100110619037f01418080c0000b7f0041cf9bc0000b7f0041d09bc0000b072e04066d656d6f727902000666696e69" - "7368003c0a5f5f646174615f656e6403010b5f5f686561705f6261736503020a8c2f02460002402000200147044020" - "02200341014100410010001a20004100480d01418b80c000410b2000ad1001000b200220032000ac10011a0f0b418b" - "80c000410b2000ac1001000bc22e020b7f017e23004190026b22002400419680c000412341014100410010001a2000" - "4100360260200041e0006a220241041002410441888ac000410a103b20004100360260200241041003410441928ac0" - "004110103b200041f8006a22054200370300200041f0006a22014200370300200041e8006a22064200370300200042" - "00370360200241201004412041a28ac0004110103b20004100360260200241041005410441b28ac0004108103b2000" - "41106a2208428182848890a0c08001370300200041186a2209428182848890a0c08001370300200041206a220a4281" - "82848890a0c080013703002000428182848890a0c0800137030841b980c000410e1006410141c780c0004111103b20" - "0041086a41201006410141c780c0004111103b418180202002411410072203411446044002402000412e6a200041e2" - "006a2d00003a0000200020002900673703e8012000200041ec006a2900003700ed01200020002f00603b012c200020" - "002903e8013703a801200020002900ed013700ad012000200028006336002f200041386a20002900ad013700002000" - "20002903a801370033200542003703002001420037030020064200370300200042003703602000412c6a2205411420" - "024120100822034120470d00200041c2006a20002d00623a0000200041f0016a2207200041ef006a290000220b3703" - "00200041cf006a200b370000200041d7006a200041f7006a290000370000200041df006a200041ff006a2d00003a00" - "00200020002f01603b01402000200028006336004320002000290067370047200041406b412041001009410141d880" - "c0004108103b2001410036020020064200370300200042003703604181802020024114100a411441ba8ac000410d10" - "3b20014100360200200642003703002000420037036041014181802020024114100b411441c78ac0004108103b0240" - "4100200041e4006a22046b410371220320046a220120044d0d0020030440200321060340200441003a000020044101" - "6a2104200641016b22060d000b0b200341016b4107490d000340200441003a0000200441076a41003a000020044106" - "6a41003a0000200441056a41003a0000200441046a41003a0000200441036a41003a0000200441026a41003a000020" - "0441016a41003a0000200441086a22042001470d000b0b2001413c20036b2203417c716a220420014b044003402001" - "4100360200200141046a22012004490d000b0b024020042003410371220320046a22064f0d00200322010440034020" - "0441003a0000200441016a2104200141016b22010d000b0b200341016b4107490d000340200441003a000020044107" - "6a41003a0000200441066a41003a0000200441056a41003a0000200441046a41003a0000200441036a41003a000020" - "0441026a41003a0000200441016a41003a0000200441086a22042006470d000b0b200041043602a001200041818020" - "360260200041f8016a2203410036020020074200370300200042003703e80120024104200041e8016a22014114100c" - "411441cf8ac0004108103b2003410036020020074200370300200042003703e801200220002802a00120014114100d" - "411441d78ac000410d103b2003410036020020074200370300200042003703e8014101200220002802a00120014114" - "100e411441e48ac0004108103b4189803c100f412041e080c000410a103b4189803c1010412041ea80c000410f103b" - "41014189803c1011412041f980c000410a103b200220002802a00110124120418381c0004110103b200220002802a0" - "0110134120419381c0004115103b4101200220002802a0011014412041a881c0004110103b200541141015411441b8" - "81c0004108103b20004180026a220642003703002003420037030020074200370300200042003703e8012002200028" - "02a001200141201016412041ec8ac000410b103b41c081c000410c41cc81c000410b41d781c000410e1017410141e5" - "81c0004109103b200041c0016a200a290300370300200041b8016a2009290300370300200041b0016a200829030037" - "0300200020002903083703a801200341003b010020074200370300200042003703e80120054114200041a8016a2204" - "4120200141121018411241f78ac0004107103b2003410036020020074200370300200042003703e801200441202001" - "41141019411441fe8ac000410a103b200041003602e8012004412020014104101a410441888bc0004109103b200441" - "20101b410841ee81c0004109103b20044120101c410a41f781c000410c103b200041003602e8012004412020014104" - "101d410441918bc000410a103b418382c000410d20054114101e4100419082c000410a103b418382c000410d419a82" - "c0004108101f410041a282c0004109103b418382c000410d41ab82c0004108101f410041b382c000410e103b417f41" - "041004417141c182c0004118103b200041003602e8012001417f10044171419b8bc0004118103b200041ea016a4100" - "3a0000200041003b01e801200141031004417d41b38bc000411e103b200041003602e8012001418094ebdc03100441" - "7341d18bc000411d103b4102100f416f41d982c0004119103b417f20002802a0011012417141f282c0004118103b20" - "02417f10124171418a83c0004118103b20024181081012417441a283c0004119103b200041e094ebdc036a22082000" - "2802a0011012417341bb83c0004118103b200642003703002003420037030020074200370300200042003703e80120" - "05411420084108200141201020417341ee8bc0004114103b2006420037030020034200370300200742003703002000" - "42003703e8012005411420054114200141201020417141828cc0004116103b20064200370300200342003703002007" - "4200370300200042003703e801200841082001412041001021417341988cc0004117103b2006420037030020034200" - "37030020074200370300200042003703e801200220002802a0012001412041001021417141af8cc0004120103b2008" - "20002802a00141011009417341d383c0004110103b200220002802a00141011009417141e383c0004112103b200642" - "003703002003420037030020074200370300200042003703e801200820002802a001200141201008417341cf8cc000" - "4116103b200642003703002003420037030020074200370300200042003703e801200220002802a001200141201008" - "417141e58cc0004118103b200642003703002003420037030020074200370300200042003703e80120054114200541" - "14200820002802a001200141201022417341fd8cc000411d103b200642003703002003420037030020074200370300" - "200042003703e8012005411420054114200220002802a0012001412010224171419a8dc000411f103b200642003703" - "002003420037030020074200370300200042003703e80141bb9bc0004114200820002802a001200141201023417341" - "b98dc0004115103b200642003703002003420037030020074200370300200042003703e80141bb9bc0004114200220" - "002802a001200141201023417141ce8dc000411b103b20064200370300200342003703002007420037030020004200" - "3703e80141bb9bc000411441f583c0004114200141201023417141e98dc0004125103b200642003703002003420037" - "030020074200370300200042003703e801418984c000412841bb9bc00041142001412010234171418e8ec000412110" - "3b200041dc016a2000413c6a280100360200200041d4016a200041346a2901003702002000200029012c3702cc0120" - "0041808080083602c801200041003b01e801200041c8016a2209411841bb9bc0004114200141021023417141af8ec0" - "00410a103b200820002802a001422a1001417341b184c0004111103b200041003b01e8014102200141021007416f41" - "b98ec0004117103b200041003b01e801410220014102100a416f41d08ec000411c103b200041003b01e80141014102" - "20014102100b416f41ec8ec0004117103b4102100f416f41d982c0004119103b41021010416f41c284c000411e103b" - "410141021011416f41e084c0004119103b41b980c0004181081006417441f984c000411f103b41b980c00041c10010" - "064174419885c000411a103b200041003b01e801200241810820014102100c417441838fc0004116103b200041003b" - "01e801200241810820014102100d417441998fc000411b103b200041003b01e8014101200241810820014102100e41" - "7441b48fc0004116103b20024181081012417441b285c000411e103b20024181081013417441d085c0004123103b41" - "0120024181081014417441f385c000411e103b200241812010154174419186c0004116103b418382c00041810841cc" - "81c000410b41d781c000410e1017417441e581c0004109103b418382c000410d41cc81c00041810841d781c000410e" - "1017417441e581c0004109103b418382c000410d41cc81c000410b41d781c0004181081017417441e581c000410910" - "3b200041003b01e8012002418108200141021016417441ca8fc0004119103b200041003b01e80141bb9bc000418108" - "41bb9bc0004114200141021023417441e38fc0004114103b200041003b01e801200541142005411420024181082001" - "41021024417441f78fc000411b103b200041003b01e8012009418108200541142001410210254174419290c000411e" - "103b418382c000410d200820002802a00141001000417341a786c000410f103b200042d487b6f4c7d4b1c0003700e0" - "01418382c000410d200041e095ebdc036a220441081026417341b686c0004116103b418382c000410d200820002802" - "a001101f417341cc86c0004113103b20044108200041e0016a220841081027417341df86c0004114103b2008410820" - "0441081027417341f386c0004114103b200041003b01e80120044108200841082001410241001028417341b090c000" - "4114103b200041003b01e80120084108200441082001410241001028417341c490c0004114103b200041003b01e801" - "20044108200841082001410241001029417341d890c0004114103b200041003b01e801200841082004410820014102" - "41001029417341ec90c0004114103b200041003b01e8012004410820084108200141024100102a4173418091c00041" - "15103b200041003b01e8012008410820044108200141024100102a4173419591c0004115103b200041003b01e80120" - "04410820084108200141024100102b417341aa91c0004114103b200041003b01e80120084108200441082001410241" - "00102b417341be91c0004114103b200041003b01e801200441084103200141024100102c417341d291c0004114103b" - "200041003b01e801200441084103200141024100102d417341e691c0004113103b2006420037030020034200370300" - "20074200370300200042003703e801200541142005411420014120102e417141f991c000411b103b20064200370300" - "2003420037030020074200370300200042003703e801200541142005411420014120102f4171419492c0004121103b" - "200642003703002003420037030020074200370300200042003703e8012005411420054114200141201030417141b5" - "92c000411e103b200642003703002003420037030020074200370300200042003703e8012005411420054114200141" - "201031417141d392c000411a103b200642003703002003420037030020074200370300200042003703e80120054114" - "20054114200141201032417141ed92c000411b103b2006420037030020034200370300200742003703002000420037" - "03e8012005411420054114200541142001412010334171418893c000411c103b200642003703002003420037030020" - "074200370300200042003703e8012005411420054114200141201034417141a493c0004128103b2006420037030020" - "03420037030020074200370300200042003703e8012005411420054114200141201035417141cc93c000411b103b20" - "0642003703002003420037030020074200370300200042003703e8012005411420054114200141201036417141e793" - "c000411a103b200220002802a001410010094171418787c000411b103b200041003b01e80120054114200220002802" - "a0012001410210184171418194c000411a103b200041003b01e801200220002802a0012001410210194171419b94c0" - "00411d103b200041003b01e801200220002802a00120014102101a417141b894c000411c103b200220002802a00110" - "1b417141a287c000411c103b200220002802a001101c417141be87c000411f103b200041003602e801200220002802" - "a00120014104101d417141d494c000411d103b200041003b01e801200220002802a001200141021008417141f194c0" - "004124103b200041808080083602e801200041003b018e02200220002802a001200141042000418e026a2203410210" - "204171419595c000411e103b200041003b018e02200220002802a00122062005411420022006200341021024417141" - "b395c0004124103b200041003b018e0220054114200220002802a001220620022006200341021024417141d795c000" - "4124103b200041003b018e02200220002802a00120054114200341021037417141fb95c0004122103b200041003b01" - "8e0220054114200220002802a0012003410210374171419d96c0004122103b200041003b018e02200220002802a001" - "20054114200341021038417141bf96c0004129103b200041003b018e0220054114200220002802a001200341021038" - "417141e896c0004129103b200041003b018e02200220002802a0012003410210394171419197c000411c103b200041" - "003b018e02200220002802a0012001410420034102102e417141ad97c000411f103b200041003b018e022002200028" - "02a0012005411441f583c0004114200341021022417141cc97c0004123103b200041003b018e022005411420022000" - "2802a00141f583c0004114200341021022417141ef97c0004123103b200041003b018e02200220002802a001200141" - "0420034102102f4171419298c0004125103b200041003b018e0220094118200220002802a001200341021025417141" - "b798c0004120103b200041003b018e02200220002802a00120014104200341021030417141d798c0004122103b2000" - "41003b018e02200220002802a00120014104200341021031417141f998c000411e103b200041003b018e0220022000" - "2802a001200141042003410210324171419799c000411f103b200041003b018e02200220002802a001200541142001" - "4104200341021033417141b699c0004121103b200041003b018e0220054114200220002802a0012001410420034102" - "1033417141d799c0004121103b200041003b018e02200220002802a00120014104200341021034417141f899c00041" - "2c103b200041003b018e02200220002802a00120034102103a417141a49ac0004120103b200041003b018e02200220" - "002802a00120014104200341021035417141c49ac000411f103b200041003b018e02200220002802a0012001410420" - "0341021036417141e39ac000411e103b200041003b018e02200220002802a00141dd87c00041202003410210184171" - "41819bc000411d103b418382c000410d200220002802a001101e417141fd87c0004120103b418396abdd03410d41dd" - "87c0004120410010004173419d88c0004110103b418396abdd03410d200841081026417341ad88c0004117103b4183" - "96abdd03410d20054114101e417341c488c0004115103b418396abdd03410d41ab82c0004108101f417341d988c000" - "4114103b200220002802a001200241810841001000417441ed88c000410e103b200241810842011001417441fb88c0" - "004112103b418382c0004181082008410810264174418d89c0004115103b418382c00041810820054114101e417441" - "a289c0004113103b418382c00041810841ab82c0004108101f417441b589c0004112103b418382c000410d20022000" - "2802a001101f417141c789c0004116103b200041003b018e02200220002802a001200541142003410210254171419e" - "9bc000411d103b418382c000410d200220002802a00141021000417141dd89c0004114103b4101410020054114101e" - "410041f189c0004117103b20004190026a240041010f0b0b418080c000410b417f20032003417f4e1bac1001000b0b" - "a61b0200418080c0000b89046572726f725f636f64653d54455354204641494c45442424242424205354415254494e" - "47205741534d20455845435554494f4e202424242424746573745f616d656e646d656e74616d656e646d656e745f65" - "6e61626c656463616368655f6c6574785f6172725f6c656e686f6d655f6c655f6172725f6c656e6c655f6172725f6c" - "656e74785f696e6e65725f6172725f6c656e686f6d655f6c655f696e6e65725f6172725f6c656e6c655f696e6e6572" - "5f6172725f6c656e7365745f6461746174657374206d65737361676574657374207075626b65797465737420736967" - "6e6174757265636865636b5f7369676e66745f666c6167736e66745f786665725f66656574657374696e6720747261" - "636574726163655f61636374400000000000005f74726163655f616d74400000000000000074726163655f616d745f" - "7a65726f706172656e745f6c6467725f686173685f6e65675f70747274785f6172725f6c656e5f696e76616c69645f" - "736669656c6474785f696e6e65725f6172725f6c656e5f6e65675f70747274785f696e6e65725f6172725f6c656e5f" - "6e65675f6c656e74785f696e6e65725f6172725f6c656e5f746f6f5f6c6f6e6774785f696e6e65725f6172725f6c65" - "6e5f7074725f6f6f6263616368655f6c655f7074725f6f6f6263616368655f6c655f77726f6e675f6c656e55534430" - "303030303030303030303030303030300041b184c0000b8a1774726163655f6e756d5f6f6f625f737472686f6d655f" - "6c655f6172725f6c656e5f696e76616c69645f736669656c646c655f6172725f6c656e5f696e76616c69645f736669" - "656c64616d656e646d656e745f656e61626c65645f746f6f5f6269675f736c696365616d656e646d656e745f656e61" - "626c65645f746f6f5f6c6f6e6774785f696e6e65725f6172725f6c656e5f746f6f5f6269675f736c696365686f6d65" - "5f6c655f696e6e65725f6172725f6c656e5f746f6f5f6269675f736c6963656c655f696e6e65725f6172725f6c656e" - "5f746f6f5f6269675f736c6963657365745f646174615f746f6f5f6269675f736c69636574726163655f6f6f625f73" - "6c69636574726163655f78666c6f61745f6f6f625f736c69636574726163655f616d745f6f6f625f736c696365666c" - "6f61745f636d705f6f6f625f736c69636531666c6f61745f636d705f6f6f625f736c6963653263616368655f6c655f" - "77726f6e675f73697a655f75696e743235366e66745f666c6167735f77726f6e675f73697a655f75696e743235366e" - "66745f786665725f6665655f77726f6e675f73697a655f75696e743235363030303030303030303030303030303030" - "30303030303030303030303030303174726163655f616363745f77726f6e675f73697a655f6163636f756e745f6964" - "74726163655f6f6f625f737472696e6774726163655f78666c6f61745f6f6f625f737472696e6774726163655f6163" - "63745f6f6f625f737472696e6774726163655f616d745f6f6f625f737472696e6774726163655f746f6f5f6c6f6e67" - "74726163655f6e756d5f746f6f5f6c6f6e6774726163655f78666c6f61745f746f6f5f6c6f6e6774726163655f6163" - "63745f746f6f5f6c6f6e6774726163655f616d745f746f6f5f6c6f6e6774726163655f616d745f77726f6e675f6c65" - "6e67746874726163655f696e76616c69645f61735f68657874726163655f616363745f636865636b5f646573796e63" - "6c6467725f696e646578706172656e745f6c6467725f74696d65706172656e745f6c6467725f68617368626173655f" - "666565686f6d655f6c655f6669656c646c655f6669656c6474785f696e6e6572686f6d655f6c655f696e6e65726c65" - "5f696e6e65727368613531325f68616c666e66745f7572696e66745f6973737565726e66745f7461786f6e6e66745f" - "73657269616c706172656e745f6c6467725f686173685f6e65675f6c656e706172656e745f6c6467725f686173685f" - "6275665f746f6f5f736d616c6c706172656e745f6c6467725f686173685f6c656e5f746f6f5f6c6f6e67636865636b" - "5f69645f6f6f625f6c656e5f753332636865636b5f69645f77726f6e675f6c656e5f753332666c6f61745f66726f6d" - "5f75696e745f6c656e5f6f6f62666c6f61745f66726f6d5f75696e745f77726f6e675f6c656e5f75696e7436346163" - "636f756e74726f6f745f69645f6c656e5f6f6f626163636f756e74726f6f745f69645f77726f6e675f6c656e747275" - "73746c696e655f69645f6c656e5f6f6f625f63757272656e637974727573746c696e655f69645f77726f6e675f6c65" - "6e5f63757272656e6379616d6d5f69645f6c656e5f6f6f625f617373657432616d6d5f69645f6c656e5f77726f6e67" - "5f6c656e5f617373657432616d6d5f69645f6c656e5f77726f6e675f6e6f6e5f7872705f63757272656e63795f6c65" - "6e616d6d5f69645f6c656e5f77726f6e675f7872705f63757272656e63795f6c656e616d6d5f69645f6d707474785f" - "6669656c645f696e76616c69645f736669656c64686f6d655f6c655f6669656c645f696e76616c69645f736669656c" - "646c655f6669656c645f696e76616c69645f736669656c6474785f696e6e65725f746f6f5f6269675f736c69636568" - "6f6d655f6c655f696e6e65725f746f6f5f6269675f736c6963656c655f696e6e65725f746f6f5f6269675f736c6963" - "657368613531325f68616c665f746f6f5f6269675f736c696365616d6d5f69645f746f6f5f6269675f736c69636563" - "726564656e7469616c5f69645f746f6f5f6269675f736c6963656d70746f6b656e5f69645f746f6f5f6269675f736c" - "6963655f6d70746964666c6f61745f6164645f6f6f625f736c69636531666c6f61745f6164645f6f6f625f736c6963" - "6532666c6f61745f7375625f6f6f625f736c69636531666c6f61745f7375625f6f6f625f736c69636532666c6f6174" - "5f6d756c745f6f6f625f736c69636531666c6f61745f6d756c745f6f6f625f736c69636532666c6f61745f6469765f" - "6f6f625f736c69636531666c6f61745f6469765f6f6f625f736c69636532666c6f61745f726f6f745f6f6f625f736c" - "696365666c6f61745f706f775f6f6f625f736c696365657363726f775f69645f77726f6e675f73697a655f75696e74" - "33326d70745f69737375616e63655f69645f77726f6e675f73697a655f75696e7433326e66745f6f666665725f6964" - "5f77726f6e675f73697a655f75696e7433326f666665725f69645f77726f6e675f73697a655f75696e7433326f7261" - "636c655f69645f77726f6e675f73697a655f75696e7433327061796368616e5f69645f77726f6e675f73697a655f75" - "696e7433327065726d697373696f6e65645f646f6d61696e5f69645f77726f6e675f73697a655f75696e7433327469" - "636b65745f69645f77726f6e675f73697a655f75696e7433327661756c745f69645f77726f6e675f73697a655f7569" - "6e7433326e66745f7572695f77726f6e675f73697a655f75696e743235366e66745f6973737565725f77726f6e675f" - "73697a655f75696e743235366e66745f7461786f6e5f77726f6e675f73697a655f75696e743235366e66745f736572" - "69616c5f77726f6e675f73697a655f75696e743235366163636f756e74726f6f745f69645f77726f6e675f73697a65" - "5f6163636f756e745f6964636865636b5f69645f77726f6e675f73697a655f6163636f756e745f696463726564656e" - "7469616c5f69645f77726f6e675f73697a655f6163636f756e745f69643163726564656e7469616c5f69645f77726f" - "6e675f73697a655f6163636f756e745f69643264656c65676174655f69645f77726f6e675f73697a655f6163636f75" - "6e745f69643164656c65676174655f69645f77726f6e675f73697a655f6163636f756e745f6964326465706f736974" - "5f707265617574685f69645f77726f6e675f73697a655f6163636f756e745f6964316465706f7369745f7072656175" - "74685f69645f77726f6e675f73697a655f6163636f756e745f6964326469645f69645f77726f6e675f73697a655f61" - "63636f756e745f6964657363726f775f69645f77726f6e675f73697a655f6163636f756e745f696474727573746c69" - "6e655f69645f77726f6e675f73697a655f6163636f756e745f69643174727573746c696e655f69645f77726f6e675f" - "73697a655f6163636f756e745f6964326d70745f69737375616e63655f69645f77726f6e675f73697a655f6163636f" - "756e745f69646d70746f6b656e5f69645f77726f6e675f73697a655f6163636f756e745f69646e66745f6f66666572" - "5f69645f77726f6e675f73697a655f6163636f756e745f69646f666665725f69645f77726f6e675f73697a655f6163" - "636f756e745f69646f7261636c655f69645f77726f6e675f73697a655f6163636f756e745f69647061796368616e5f" - "69645f77726f6e675f73697a655f6163636f756e745f6964317061796368616e5f69645f77726f6e675f73697a655f" - "6163636f756e745f6964327065726d697373696f6e65645f646f6d61696e5f69645f77726f6e675f73697a655f6163" - "636f756e745f69647369676e6572735f69645f77726f6e675f73697a655f6163636f756e745f69647469636b65745f" - "69645f77726f6e675f73697a655f6163636f756e745f69647661756c745f69645f77726f6e675f73697a655f616363" - "6f756e745f69646e66745f7572695f77726f6e675f73697a655f6163636f756e745f69646d70746f6b656e5f69645f" - "6d707469645f77726f6e675f6c656e677468004d0970726f64756365727302086c616e677561676501045275737400" - "0c70726f6365737365642d6279010572757374631d312e38372e30202831373036376539616320323032352d30352d" - "303929002c0f7461726765745f6665617475726573022b0f6d757461626c652d676c6f62616c732b087369676e2d65" - "7874"; + "0100110619037f01418080c0000b7f0041cf9bc0000b7f0041d09bc0000b073504066d656d6f727902000d65736372" + "6f775f66696e697368003c0a5f5f646174615f656e6403010b5f5f686561705f6261736503020a8c2f024600024020" + "0020014704402002200341014100410010001a20004100480d01418b80c000410b2000ad1001000b200220032000ac" + "10011a0f0b418b80c000410b2000ac1001000bc22e020b7f017e23004190026b22002400419680c000412341014100" + "410010001a20004100360260200041e0006a220241041002410441888ac000410a103b200041003602602002410410" + "03410441928ac0004110103b200041f8006a22054200370300200041f0006a22014200370300200041e8006a220642" + "0037030020004200370360200241201004412041a28ac0004110103b20004100360260200241041005410441b28ac0" + "004108103b200041106a2208428182848890a0c08001370300200041186a2209428182848890a0c080013703002000" + "41206a220a428182848890a0c080013703002000428182848890a0c0800137030841b980c000410e1006410141c780" + "c0004111103b200041086a41201006410141c780c0004111103b418180202002411410072203411446044002402000" + "412e6a200041e2006a2d00003a0000200020002900673703e8012000200041ec006a2900003700ed01200020002f00" + "603b012c200020002903e8013703a801200020002900ed013700ad012000200028006336002f200041386a20002900" + "ad01370000200020002903a80137003320054200370300200142003703002006420037030020004200370360200041" + "2c6a2205411420024120100822034120470d00200041c2006a20002d00623a0000200041f0016a2207200041ef006a" + "290000220b370300200041cf006a200b370000200041d7006a200041f7006a290000370000200041df006a200041ff" + "006a2d00003a0000200020002f01603b01402000200028006336004320002000290067370047200041406b41204100" + "1009410141d880c0004108103b2001410036020020064200370300200042003703604181802020024114100a411441" + "ba8ac000410d103b20014100360200200642003703002000420037036041014181802020024114100b411441c78ac0" + "004108103b02404100200041e4006a22046b410371220320046a220120044d0d002003044020032106034020044100" + "3a0000200441016a2104200641016b22060d000b0b200341016b4107490d000340200441003a0000200441076a4100" + "3a0000200441066a41003a0000200441056a41003a0000200441046a41003a0000200441036a41003a000020044102" + "6a41003a0000200441016a41003a0000200441086a22042001470d000b0b2001413c20036b2203417c716a22042001" + "4b0440034020014100360200200141046a22012004490d000b0b024020042003410371220320046a22064f0d002003" + "220104400340200441003a0000200441016a2104200141016b22010d000b0b200341016b4107490d00034020044100" + "3a0000200441076a41003a0000200441066a41003a0000200441056a41003a0000200441046a41003a000020044103" + "6a41003a0000200441026a41003a0000200441016a41003a0000200441086a22042006470d000b0b200041043602a0" + "01200041818020360260200041f8016a2203410036020020074200370300200042003703e80120024104200041e801" + "6a22014114100c411441cf8ac0004108103b2003410036020020074200370300200042003703e801200220002802a0" + "0120014114100d411441d78ac000410d103b2003410036020020074200370300200042003703e80141012002200028" + "02a00120014114100e411441e48ac0004108103b4189803c100f412041e080c000410a103b4189803c1010412041ea" + "80c000410f103b41014189803c1011412041f980c000410a103b200220002802a00110124120418381c0004110103b" + "200220002802a00110134120419381c0004115103b4101200220002802a0011014412041a881c0004110103b200541" + "141015411441b881c0004108103b20004180026a220642003703002003420037030020074200370300200042003703" + "e801200220002802a001200141201016412041ec8ac000410b103b41c081c000410c41cc81c000410b41d781c00041" + "0e1017410141e581c0004109103b200041c0016a200a290300370300200041b8016a2009290300370300200041b001" + "6a2008290300370300200020002903083703a801200341003b010020074200370300200042003703e8012005411420" + "0041a8016a22044120200141121018411241f78ac0004107103b2003410036020020074200370300200042003703e8" + "0120044120200141141019411441fe8ac000410a103b200041003602e8012004412020014104101a410441888bc000" + "4109103b20044120101b410841ee81c0004109103b20044120101c410a41f781c000410c103b200041003602e80120" + "04412020014104101d410441918bc000410a103b418382c000410d20054114101e4100419082c000410a103b418382" + "c000410d419a82c0004108101f410041a282c0004109103b418382c000410d41ab82c0004108101f410041b382c000" + "410e103b417f41041004417141c182c0004118103b200041003602e8012001417f10044171419b8bc0004118103b20" + "0041ea016a41003a0000200041003b01e801200141031004417d41b38bc000411e103b200041003602e80120014180" + "94ebdc031004417341d18bc000411d103b4102100f416f41d982c0004119103b417f20002802a0011012417141f282" + "c0004118103b2002417f10124171418a83c0004118103b20024181081012417441a283c0004119103b200041e094eb" + "dc036a220820002802a0011012417341bb83c0004118103b2006420037030020034200370300200742003703002000" + "42003703e8012005411420084108200141201020417341ee8bc0004114103b20064200370300200342003703002007" + "4200370300200042003703e8012005411420054114200141201020417141828cc0004116103b200642003703002003" + "420037030020074200370300200042003703e801200841082001412041001021417341988cc0004117103b20064200" + "3703002003420037030020074200370300200042003703e801200220002802a0012001412041001021417141af8cc0" + "004120103b200820002802a00141011009417341d383c0004110103b200220002802a00141011009417141e383c000" + "4112103b200642003703002003420037030020074200370300200042003703e801200820002802a001200141201008" + "417341cf8cc0004116103b200642003703002003420037030020074200370300200042003703e801200220002802a0" + "01200141201008417141e58cc0004118103b200642003703002003420037030020074200370300200042003703e801" + "2005411420054114200820002802a001200141201022417341fd8cc000411d103b2006420037030020034200370300" + "20074200370300200042003703e8012005411420054114200220002802a0012001412010224171419a8dc000411f10" + "3b200642003703002003420037030020074200370300200042003703e80141bb9bc0004114200820002802a0012001" + "41201023417341b98dc0004115103b200642003703002003420037030020074200370300200042003703e80141bb9b" + "c0004114200220002802a001200141201023417141ce8dc000411b103b200642003703002003420037030020074200" + "370300200042003703e80141bb9bc000411441f583c0004114200141201023417141e98dc0004125103b2006420037" + "03002003420037030020074200370300200042003703e801418984c000412841bb9bc0004114200141201023417141" + "8e8ec0004121103b200041dc016a2000413c6a280100360200200041d4016a200041346a2901003702002000200029" + "012c3702cc01200041808080083602c801200041003b01e801200041c8016a2209411841bb9bc00041142001410210" + "23417141af8ec000410a103b200820002802a001422a1001417341b184c0004111103b200041003b01e80141022001" + "41021007416f41b98ec0004117103b200041003b01e801410220014102100a416f41d08ec000411c103b200041003b" + "01e8014101410220014102100b416f41ec8ec0004117103b4102100f416f41d982c0004119103b41021010416f41c2" + "84c000411e103b410141021011416f41e084c0004119103b41b980c0004181081006417441f984c000411f103b41b9" + "80c00041c10010064174419885c000411a103b200041003b01e801200241810820014102100c417441838fc0004116" + "103b200041003b01e801200241810820014102100d417441998fc000411b103b200041003b01e80141012002418108" + "20014102100e417441b48fc0004116103b20024181081012417441b285c000411e103b20024181081013417441d085" + "c0004123103b410120024181081014417441f385c000411e103b200241812010154174419186c0004116103b418382" + "c00041810841cc81c000410b41d781c000410e1017417441e581c0004109103b418382c000410d41cc81c000418108" + "41d781c000410e1017417441e581c0004109103b418382c000410d41cc81c000410b41d781c0004181081017417441" + "e581c0004109103b200041003b01e8012002418108200141021016417441ca8fc0004119103b200041003b01e80141" + "bb9bc00041810841bb9bc0004114200141021023417441e38fc0004114103b200041003b01e8012005411420054114" + "2002418108200141021024417441f78fc000411b103b200041003b01e8012009418108200541142001410210254174" + "419290c000411e103b418382c000410d200820002802a00141001000417341a786c000410f103b200042d487b6f4c7" + "d4b1c0003700e001418382c000410d200041e095ebdc036a220441081026417341b686c0004116103b418382c00041" + "0d200820002802a001101f417341cc86c0004113103b20044108200041e0016a220841081027417341df86c0004114" + "103b20084108200441081027417341f386c0004114103b200041003b01e80120044108200841082001410241001028" + "417341b090c0004114103b200041003b01e80120084108200441082001410241001028417341c490c0004114103b20" + "0041003b01e80120044108200841082001410241001029417341d890c0004114103b200041003b01e8012008410820" + "0441082001410241001029417341ec90c0004114103b200041003b01e8012004410820084108200141024100102a41" + "73418091c0004115103b200041003b01e8012008410820044108200141024100102a4173419591c0004115103b2000" + "41003b01e8012004410820084108200141024100102b417341aa91c0004114103b200041003b01e801200841082004" + "4108200141024100102b417341be91c0004114103b200041003b01e801200441084103200141024100102c417341d2" + "91c0004114103b200041003b01e801200441084103200141024100102d417341e691c0004113103b20064200370300" + "2003420037030020074200370300200042003703e801200541142005411420014120102e417141f991c000411b103b" + "200642003703002003420037030020074200370300200042003703e801200541142005411420014120102f41714194" + "92c0004121103b200642003703002003420037030020074200370300200042003703e8012005411420054114200141" + "201030417141b592c000411e103b200642003703002003420037030020074200370300200042003703e80120054114" + "20054114200141201031417141d392c000411a103b2006420037030020034200370300200742003703002000420037" + "03e8012005411420054114200141201032417141ed92c000411b103b20064200370300200342003703002007420037" + "0300200042003703e8012005411420054114200541142001412010334171418893c000411c103b2006420037030020" + "03420037030020074200370300200042003703e8012005411420054114200141201034417141a493c0004128103b20" + "0642003703002003420037030020074200370300200042003703e8012005411420054114200141201035417141cc93" + "c000411b103b200642003703002003420037030020074200370300200042003703e801200541142005411420014120" + "1036417141e793c000411a103b200220002802a001410010094171418787c000411b103b200041003b01e801200541" + "14200220002802a0012001410210184171418194c000411a103b200041003b01e801200220002802a0012001410210" + "194171419b94c000411d103b200041003b01e801200220002802a00120014102101a417141b894c000411c103b2002" + "20002802a001101b417141a287c000411c103b200220002802a001101c417141be87c000411f103b200041003602e8" + "01200220002802a00120014104101d417141d494c000411d103b200041003b01e801200220002802a0012001410210" + "08417141f194c0004124103b200041808080083602e801200041003b018e02200220002802a001200141042000418e" + "026a2203410210204171419595c000411e103b200041003b018e02200220002802a001220620054114200220062003" + "41021024417141b395c0004124103b200041003b018e0220054114200220002802a001220620022006200341021024" + "417141d795c0004124103b200041003b018e02200220002802a00120054114200341021037417141fb95c000412210" + "3b200041003b018e0220054114200220002802a0012003410210374171419d96c0004122103b200041003b018e0220" + "0220002802a00120054114200341021038417141bf96c0004129103b200041003b018e0220054114200220002802a0" + "01200341021038417141e896c0004129103b200041003b018e02200220002802a0012003410210394171419197c000" + "411c103b200041003b018e02200220002802a0012001410420034102102e417141ad97c000411f103b200041003b01" + "8e02200220002802a0012005411441f583c0004114200341021022417141cc97c0004123103b200041003b018e0220" + "054114200220002802a00141f583c0004114200341021022417141ef97c0004123103b200041003b018e0220022000" + "2802a0012001410420034102102f4171419298c0004125103b200041003b018e0220094118200220002802a0012003" + "41021025417141b798c0004120103b200041003b018e02200220002802a00120014104200341021030417141d798c0" + "004122103b200041003b018e02200220002802a00120014104200341021031417141f998c000411e103b200041003b" + "018e02200220002802a001200141042003410210324171419799c000411f103b200041003b018e02200220002802a0" + "012005411420014104200341021033417141b699c0004121103b200041003b018e0220054114200220002802a00120" + "014104200341021033417141d799c0004121103b200041003b018e02200220002802a0012001410420034102103441" + "7141f899c000412c103b200041003b018e02200220002802a00120034102103a417141a49ac0004120103b20004100" + "3b018e02200220002802a00120014104200341021035417141c49ac000411f103b200041003b018e02200220002802" + "a00120014104200341021036417141e39ac000411e103b200041003b018e02200220002802a00141dd87c000412020" + "0341021018417141819bc000411d103b418382c000410d200220002802a001101e417141fd87c0004120103b418396" + "abdd03410d41dd87c0004120410010004173419d88c0004110103b418396abdd03410d200841081026417341ad88c0" + "004117103b418396abdd03410d20054114101e417341c488c0004115103b418396abdd03410d41ab82c0004108101f" + "417341d988c0004114103b200220002802a001200241810841001000417441ed88c000410e103b2002418108420110" + "01417441fb88c0004112103b418382c0004181082008410810264174418d89c0004115103b418382c0004181082005" + "4114101e417441a289c0004113103b418382c00041810841ab82c0004108101f417441b589c0004112103b418382c0" + "00410d200220002802a001101f417141c789c0004116103b200041003b018e02200220002802a00120054114200341" + "0210254171419e9bc000411d103b418382c000410d200220002802a00141021000417141dd89c0004114103b410141" + "0020054114101e410041f189c0004117103b20004190026a240041010f0b0b418080c000410b417f20032003417f4e" + "1bac1001000b0ba61b0200418080c0000b89046572726f725f636f64653d54455354204641494c4544242424242420" + "5354415254494e47205741534d20455845435554494f4e202424242424746573745f616d656e646d656e74616d656e" + "646d656e745f656e61626c656463616368655f6c6574785f6172725f6c656e686f6d655f6c655f6172725f6c656e6c" + "655f6172725f6c656e74785f696e6e65725f6172725f6c656e686f6d655f6c655f696e6e65725f6172725f6c656e6c" + "655f696e6e65725f6172725f6c656e7365745f6461746174657374206d65737361676574657374207075626b657974" + "657374207369676e6174757265636865636b5f7369676e66745f666c6167736e66745f786665725f66656574657374" + "696e6720747261636574726163655f61636374400000000000005f74726163655f616d744000000000000000747261" + "63655f616d745f7a65726f706172656e745f6c6467725f686173685f6e65675f70747274785f6172725f6c656e5f69" + "6e76616c69645f736669656c6474785f696e6e65725f6172725f6c656e5f6e65675f70747274785f696e6e65725f61" + "72725f6c656e5f6e65675f6c656e74785f696e6e65725f6172725f6c656e5f746f6f5f6c6f6e6774785f696e6e6572" + "5f6172725f6c656e5f7074725f6f6f6263616368655f6c655f7074725f6f6f6263616368655f6c655f77726f6e675f" + "6c656e55534430303030303030303030303030303030300041b184c0000b8a1774726163655f6e756d5f6f6f625f73" + "7472686f6d655f6c655f6172725f6c656e5f696e76616c69645f736669656c646c655f6172725f6c656e5f696e7661" + "6c69645f736669656c64616d656e646d656e745f656e61626c65645f746f6f5f6269675f736c696365616d656e646d" + "656e745f656e61626c65645f746f6f5f6c6f6e6774785f696e6e65725f6172725f6c656e5f746f6f5f6269675f736c" + "696365686f6d655f6c655f696e6e65725f6172725f6c656e5f746f6f5f6269675f736c6963656c655f696e6e65725f" + "6172725f6c656e5f746f6f5f6269675f736c6963657365745f646174615f746f6f5f6269675f736c69636574726163" + "655f6f6f625f736c69636574726163655f78666c6f61745f6f6f625f736c69636574726163655f616d745f6f6f625f" + "736c696365666c6f61745f636d705f6f6f625f736c69636531666c6f61745f636d705f6f6f625f736c696365326361" + "6368655f6c655f77726f6e675f73697a655f75696e743235366e66745f666c6167735f77726f6e675f73697a655f75" + "696e743235366e66745f786665725f6665655f77726f6e675f73697a655f75696e7432353630303030303030303030" + "3030303030303030303030303030303030303030303174726163655f616363745f77726f6e675f73697a655f616363" + "6f756e745f696474726163655f6f6f625f737472696e6774726163655f78666c6f61745f6f6f625f737472696e6774" + "726163655f616363745f6f6f625f737472696e6774726163655f616d745f6f6f625f737472696e6774726163655f74" + "6f6f5f6c6f6e6774726163655f6e756d5f746f6f5f6c6f6e6774726163655f78666c6f61745f746f6f5f6c6f6e6774" + "726163655f616363745f746f6f5f6c6f6e6774726163655f616d745f746f6f5f6c6f6e6774726163655f616d745f77" + "726f6e675f6c656e67746874726163655f696e76616c69645f61735f68657874726163655f616363745f636865636b" + "5f646573796e636c6467725f696e646578706172656e745f6c6467725f74696d65706172656e745f6c6467725f6861" + "7368626173655f666565686f6d655f6c655f6669656c646c655f6669656c6474785f696e6e6572686f6d655f6c655f" + "696e6e65726c655f696e6e65727368613531325f68616c666e66745f7572696e66745f6973737565726e66745f7461" + "786f6e6e66745f73657269616c706172656e745f6c6467725f686173685f6e65675f6c656e706172656e745f6c6467" + "725f686173685f6275665f746f6f5f736d616c6c706172656e745f6c6467725f686173685f6c656e5f746f6f5f6c6f" + "6e67636865636b5f69645f6f6f625f6c656e5f753332636865636b5f69645f77726f6e675f6c656e5f753332666c6f" + "61745f66726f6d5f75696e745f6c656e5f6f6f62666c6f61745f66726f6d5f75696e745f77726f6e675f6c656e5f75" + "696e7436346163636f756e74726f6f745f69645f6c656e5f6f6f626163636f756e74726f6f745f69645f77726f6e67" + "5f6c656e74727573746c696e655f69645f6c656e5f6f6f625f63757272656e637974727573746c696e655f69645f77" + "726f6e675f6c656e5f63757272656e6379616d6d5f69645f6c656e5f6f6f625f617373657432616d6d5f69645f6c65" + "6e5f77726f6e675f6c656e5f617373657432616d6d5f69645f6c656e5f77726f6e675f6e6f6e5f7872705f63757272" + "656e63795f6c656e616d6d5f69645f6c656e5f77726f6e675f7872705f63757272656e63795f6c656e616d6d5f6964" + "5f6d707474785f6669656c645f696e76616c69645f736669656c64686f6d655f6c655f6669656c645f696e76616c69" + "645f736669656c646c655f6669656c645f696e76616c69645f736669656c6474785f696e6e65725f746f6f5f626967" + "5f736c696365686f6d655f6c655f696e6e65725f746f6f5f6269675f736c6963656c655f696e6e65725f746f6f5f62" + "69675f736c6963657368613531325f68616c665f746f6f5f6269675f736c696365616d6d5f69645f746f6f5f626967" + "5f736c69636563726564656e7469616c5f69645f746f6f5f6269675f736c6963656d70746f6b656e5f69645f746f6f" + "5f6269675f736c6963655f6d70746964666c6f61745f6164645f6f6f625f736c69636531666c6f61745f6164645f6f" + "6f625f736c69636532666c6f61745f7375625f6f6f625f736c69636531666c6f61745f7375625f6f6f625f736c6963" + "6532666c6f61745f6d756c745f6f6f625f736c69636531666c6f61745f6d756c745f6f6f625f736c69636532666c6f" + "61745f6469765f6f6f625f736c69636531666c6f61745f6469765f6f6f625f736c69636532666c6f61745f726f6f74" + "5f6f6f625f736c696365666c6f61745f706f775f6f6f625f736c696365657363726f775f69645f77726f6e675f7369" + "7a655f75696e7433326d70745f69737375616e63655f69645f77726f6e675f73697a655f75696e7433326e66745f6f" + "666665725f69645f77726f6e675f73697a655f75696e7433326f666665725f69645f77726f6e675f73697a655f7569" + "6e7433326f7261636c655f69645f77726f6e675f73697a655f75696e7433327061796368616e5f69645f77726f6e67" + "5f73697a655f75696e7433327065726d697373696f6e65645f646f6d61696e5f69645f77726f6e675f73697a655f75" + "696e7433327469636b65745f69645f77726f6e675f73697a655f75696e7433327661756c745f69645f77726f6e675f" + "73697a655f75696e7433326e66745f7572695f77726f6e675f73697a655f75696e743235366e66745f697373756572" + "5f77726f6e675f73697a655f75696e743235366e66745f7461786f6e5f77726f6e675f73697a655f75696e74323536" + "6e66745f73657269616c5f77726f6e675f73697a655f75696e743235366163636f756e74726f6f745f69645f77726f" + "6e675f73697a655f6163636f756e745f6964636865636b5f69645f77726f6e675f73697a655f6163636f756e745f69" + "6463726564656e7469616c5f69645f77726f6e675f73697a655f6163636f756e745f69643163726564656e7469616c" + "5f69645f77726f6e675f73697a655f6163636f756e745f69643264656c65676174655f69645f77726f6e675f73697a" + "655f6163636f756e745f69643164656c65676174655f69645f77726f6e675f73697a655f6163636f756e745f696432" + "6465706f7369745f707265617574685f69645f77726f6e675f73697a655f6163636f756e745f6964316465706f7369" + "745f707265617574685f69645f77726f6e675f73697a655f6163636f756e745f6964326469645f69645f77726f6e67" + "5f73697a655f6163636f756e745f6964657363726f775f69645f77726f6e675f73697a655f6163636f756e745f6964" + "74727573746c696e655f69645f77726f6e675f73697a655f6163636f756e745f69643174727573746c696e655f6964" + "5f77726f6e675f73697a655f6163636f756e745f6964326d70745f69737375616e63655f69645f77726f6e675f7369" + "7a655f6163636f756e745f69646d70746f6b656e5f69645f77726f6e675f73697a655f6163636f756e745f69646e66" + "745f6f666665725f69645f77726f6e675f73697a655f6163636f756e745f69646f666665725f69645f77726f6e675f" + "73697a655f6163636f756e745f69646f7261636c655f69645f77726f6e675f73697a655f6163636f756e745f696470" + "61796368616e5f69645f77726f6e675f73697a655f6163636f756e745f6964317061796368616e5f69645f77726f6e" + "675f73697a655f6163636f756e745f6964327065726d697373696f6e65645f646f6d61696e5f69645f77726f6e675f" + "73697a655f6163636f756e745f69647369676e6572735f69645f77726f6e675f73697a655f6163636f756e745f6964" + "7469636b65745f69645f77726f6e675f73697a655f6163636f756e745f69647661756c745f69645f77726f6e675f73" + "697a655f6163636f756e745f69646e66745f7572695f77726f6e675f73697a655f6163636f756e745f69646d70746f" + "6b656e5f69645f6d707469645f77726f6e675f6c656e677468004d0970726f64756365727302086c616e6775616765" + "010452757374000c70726f6365737365642d6279010572757374631d312e38372e3020283137303637653961632032" + "3032352d30352d303929002c0f7461726765745f6665617475726573022b0f6d757461626c652d676c6f62616c732b" + "087369676e2d657874"; extern std::string const kBadAlignWasmHex = "0061736d01000000011b046000017f60057f7f7f7f7f017f60067f7f7f7f7f7f017f60000002260203656e760f666c" "6f61745f66726f6d5f75696e74000103656e7608636865636b5f6964000203050403000000050301000306470b7f00" "4180080b7f00418088020b7f004180080b7f00418088040b7f00418088040b7f00418088080b7f004180080b7f0041" - "8088080b7f004180800c0b7f0041000b7f0041010b07cc0110066d656d6f72790200115f5f7761736d5f63616c6c" - "5f63746f72730002057465737431000307655f64617461310300057465737432000407655f64617461320301047465" - "737400050c5f5f64736f5f68616e646c6503020a5f5f646174615f656e6403030b5f5f737461636b5f6c6f770304" - "0c5f5f737461636b5f6869676803050d5f5f676c6f62616c5f6261736503060b5f5f686561705f6261736503070a" - "5f5f686561705f656e6403080d5f5f6d656d6f72795f6261736503090c5f5f7461626c655f62617365030a0a9902" - "0402000b2801017f418108427f370000418108410841a308410c41001000220041a40828020020004100481b0b5f01" - "017f419a88024191a4cca00136010041928802428994ace0d0c1c38710370100418a88024281848ca0d0c0c1830837" - "010041818802417f360000418a8802411441818802410441a3880241201001220041a4880228020020004100481b0b" - "8a0101037f418108427f370000418108410841a308410c410010002100419a88024191a4cca0013601004192880242" - "8994ace0d0c1c38710370100418a88024281848ca0d0c0c1830837010041818802417f36000041a408280200210141" - "8a8802411441818802410441a3880241201001220241a4880228020020024100481b2000200120004100481b6a0b00" - "7f0970726f647563657273010c70726f6365737365642d62790105636c616e675f31392e312e352d776173692d7364" - "6b202868747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a6563742061623462356132" - "6462353832393538616631656533303861373930636664623432626432343732302900490f7461726765745f666561" - "7475726573042b0f6d757461626c652d676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d7479" - "7065732b0a6d756c746976616c7565"; + "8088080b7f004180800c0b7f0041000b7f0041010b07cc0110066d656d6f72790200115f5f7761736d5f63616c6c5f" + "63746f72730002057465737431000307655f64617461310300057465737432000407655f6461746132030104746573" + "7400050c5f5f64736f5f68616e646c6503020a5f5f646174615f656e6403030b5f5f737461636b5f6c6f7703040c5f" + "5f737461636b5f6869676803050d5f5f676c6f62616c5f6261736503060b5f5f686561705f6261736503070a5f5f68" + "6561705f656e6403080d5f5f6d656d6f72795f6261736503090c5f5f7461626c655f62617365030a0a99020402000b" + "2801017f418108427f370000418108410841a308410c41001000220041a40828020020004100481b0b5f01017f419a" + "88024191a4cca00136010041928802428994ace0d0c1c38710370100418a88024281848ca0d0c0c183083701004181" + "8802417f360000418a8802411441818802410441a3880241201001220041a4880228020020004100481b0b8a010103" + "7f418108427f370000418108410841a308410c410010002100419a88024191a4cca00136010041928802428994ace0" + "d0c1c38710370100418a88024281848ca0d0c0c1830837010041818802417f36000041a4082802002101418a880241" + "1441818802410441a3880241201001220241a4880228020020024100481b2000200120004100481b6a0b007f097072" + "6f647563657273010c70726f6365737365642d62790105636c616e675f31392e312e352d776173692d73646b202868" + "747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a656374206162346235613264623538" + "32393538616631656533303861373930636664623432626432343732302900490f7461726765745f66656174757265" + "73042b0f6d757461626c652d676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b" + "0a6d756c746976616c7565"; diff --git a/src/test/app/wasm_fixtures/ledgerSqn.c b/src/test/app/wasm_fixtures/ledgerSqn.c index 1366dee618..0f4c27af7d 100644 --- a/src/test/app/wasm_fixtures/ledgerSqn.c +++ b/src/test/app/wasm_fixtures/ledgerSqn.c @@ -2,7 +2,7 @@ int32_t ldgr_index(uint8_t *, int32_t); -int finish() +int escrow_finish() { uint32_t sqn; int32_t result = ldgr_index((uint8_t *)&sqn, sizeof(sqn)); From 1c4abe8c5eb1d94909f60809e6ca2723e7585f53 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 22 Jul 2026 15:56:33 -0400 Subject: [PATCH 134/137] refactor: Remove WasmNumber class (#7833) --- include/xrpl/basics/Number.h | 14 ++ src/libxrpl/tx/wasm/HostFuncImplFloat.cpp | 222 ++++++++-------------- 2 files changed, 93 insertions(+), 143 deletions(-) diff --git a/include/xrpl/basics/Number.h b/include/xrpl/basics/Number.h index e67f1f534d..20900f044f 100644 --- a/include/xrpl/basics/Number.h +++ b/include/xrpl/basics/Number.h @@ -392,6 +392,20 @@ public: static RoundingMode setround(RoundingMode inMode); + /** Convert an integer to a RoundingMode, validating that it is in range. + * + * Returns std::nullopt if the value does not correspond to a valid + * RoundingMode. + */ + static std::optional + checkedRoundingMode(int mode) noexcept + { + if (mode < static_cast(RoundingMode::ToNearest) || + mode > static_cast(RoundingMode::Upward)) + return std::nullopt; + return static_cast(mode); + } + /** Returns which mantissa scale is currently in use for normalization. * * If you think you need to call this outside of unit tests, no you don't. diff --git a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp index dda1a09296..c3a6e534a9 100644 --- a/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp +++ b/src/libxrpl/tx/wasm/HostFuncImplFloat.cpp @@ -12,6 +12,7 @@ #include #include +#include #include #include @@ -25,114 +26,75 @@ namespace wasm_float { namespace detail { -class WasmNumber : public Number +// Decode a serialized STNumber float payload. Returns nullopt if the data is +// not a well-formed encoding. +std::optional +floatDecode(Slice const& data) { -protected: static unsigned constexpr encodedFloatSize = 12; - bool good_ = false; - -public: - WasmNumber(Slice const& data) + if (data.size() != encodedFloatSize) + return std::nullopt; + try { - if (data.size() != encodedFloatSize) - return; - try - { - SerialIter it(data); - Number const x = STNumber(it, sfNumber).value(); - *static_cast(this) = x; - } - catch (...) - { - return; - } - - good_ = true; + SerialIter it(data); + return STNumber(it, sfNumber).value(); } - - WasmNumber(Number const& n) : WasmNumber(n.mantissa(), n.exponent()) // ensure Number canonized + catch (...) { + return std::nullopt; } +} - template - WasmNumber(T mantissa = 0, int32_t exponent = 0) +// Build a Number from a raw mantissa/exponent pair. Returns nullopt if the +// value cannot be represented, e.g. the exponent is out of range. +std::optional +numberFromMantExp(int64_t mantissa, int32_t exponent) +{ + try { - try - { - Number n; - if constexpr (std::is_signed_v) - { - n = Number(static_cast(mantissa), exponent); - } - else - { - n = Number(static_cast(mantissa), exponent, Number::Normalized{}); - } - *static_cast(this) = n; - } - catch (...) - { - return; - } - good_ = true; + return Number(mantissa, exponent); } - - WasmNumber& - operator=(WasmNumber const&) = default; - - explicit - operator bool() const + catch (...) { - return good_; + return std::nullopt; } +} - explicit - operator int64_t() const - { - return Number::operator int64_t(); - } - - Expected - toBytes() const - { - Serializer msg; - STNumber(sfNumber, *this).add(msg); - auto data = msg.getData(); +// Serialize a Number to the STNumber float encoding. +Expected +floatEncode(Number const& n) +{ + Serializer msg; + STNumber(sfNumber, n).add(msg); + auto data = msg.getData(); #ifdef DEBUG_OUTPUT - std::cout << "m: " << std::setw(20) << mantissa() << ", e: " << std::setw(12) << exponent() - << ", hex: "; - std::cout << std::hex << std::uppercase << std::setfill('0'); - for (auto const& c : data) - std::cout << std::setw(2) << (unsigned)c << " "; - std::cout << std::dec << std::setfill(' ') << std::endl; + std::cout << "m: " << std::setw(20) << n.mantissa() << ", e: " << std::setw(12) << n.exponent() + << ", hex: "; + std::cout << std::hex << std::uppercase << std::setfill('0'); + for (auto const& c : data) + std::cout << std::setw(2) << (unsigned)c << " "; + std::cout << std::dec << std::setfill(' ') << std::endl; #endif - return Expected(std::move(data)); - } -}; + return Expected(std::move(data)); +} struct FloatState { - Number::RoundingMode oldMode; - bool good = false; + // Set only when the requested mode is valid; sets the rounding mode on + // construction and restores the previous mode on destruction. + std::optional guard; - FloatState(int32_t mode) : oldMode(Number::getround()) + explicit FloatState(int32_t mode) { - if (mode < static_cast(Number::RoundingMode::ToNearest) || - mode > static_cast(Number::RoundingMode::Upward)) - return; - Number::setround(static_cast(mode)); - good = true; - } - - ~FloatState() - { - Number::setround(oldMode); + if (auto const rm = Number::checkedRoundingMode(mode)) + guard.emplace(*rm); } + explicit operator bool() const { - return good; + return guard.has_value(); } }; @@ -143,7 +105,7 @@ floatToString(Slice const& data) { // set default mode as we don't expect it will be used here detail::FloatState const rm(static_cast(Number::RoundingMode::ToNearest)); - detail::WasmNumber const num(data); + auto const num = detail::floatDecode(data); if (!num) { std::string hex; @@ -151,8 +113,7 @@ floatToString(Slice const& data) boost::algorithm::hex(data.begin(), data.end(), std::back_inserter(hex)); return "Invalid data: " + hex; } - auto const s = to_string(num); - return s; + return to_string(*num); } Expected @@ -164,11 +125,7 @@ floatFromIntImpl(int64_t x, int32_t mode) if (!rm) return Unexpected(HostFunctionError::FloatInputMalformed); - detail::WasmNumber const num(x); - if (!num) - return Unexpected(HostFunctionError::FloatInputMalformed); // LCOV_EXCL_LINE - auto const r = num.toBytes(); - return r; + return detail::floatEncode(Number(x)); } // LCOV_EXCL_START catch (...) @@ -187,11 +144,7 @@ floatFromUintImpl(uint64_t x, int32_t mode) if (!rm) return Unexpected(HostFunctionError::FloatInputMalformed); - detail::WasmNumber const num(x); - if (!num) - return Unexpected(HostFunctionError::FloatInputMalformed); // LCOV_EXCL_LINE - auto const r = num.toBytes(); - return r; + return detail::floatEncode(Number(x, 0, Number::Normalized{})); } // LCOV_EXCL_START catch (...) @@ -210,11 +163,7 @@ floatFromSTAmountImpl(STAmount const& x, int32_t mode) if (!rm) return Unexpected(HostFunctionError::FloatInputMalformed); - detail::WasmNumber const num(static_cast(x)); - if (!num) - return Unexpected(HostFunctionError::FloatInputMalformed); // LCOV_EXCL_LINE - auto const r = num.toBytes(); - return r; + return detail::floatEncode(static_cast(x)); } // LCOV_EXCL_START catch (...) @@ -233,11 +182,7 @@ floatFromSTNumberImpl(STNumber const& x, int32_t mode) if (!rm) return Unexpected(HostFunctionError::FloatInputMalformed); - detail::WasmNumber const num(x.value()); - if (!num) - return Unexpected(HostFunctionError::FloatInputMalformed); // LCOV_EXCL_LINE - auto const r = num.toBytes(); - return r; + return detail::floatEncode(x.value()); } // LCOV_EXCL_START catch (...) @@ -256,11 +201,10 @@ floatToIntImpl(Slice const& x, int32_t mode) if (!rm) return Unexpected(HostFunctionError::FloatInputMalformed); - detail::WasmNumber const num(x); + auto const num = detail::floatDecode(x); if (!num) return Unexpected(HostFunctionError::FloatInputMalformed); // LCOV_EXCL_LINE - int64_t const r(num); - return r; + return static_cast(*num); } // LCOV_EXCL_START catch (...) @@ -279,11 +223,11 @@ floatToMantExpImpl(Slice const& x) if (!rm) return Unexpected(HostFunctionError::FloatInputMalformed); - detail::WasmNumber const num(x); + auto const num = detail::floatDecode(x); if (!num) return Unexpected(HostFunctionError::FloatInputMalformed); // LCOV_EXCL_LINE - return FloatPair(num.mantissa(), num.exponent()); + return FloatPair(num->mantissa(), num->exponent()); } // LCOV_EXCL_START catch (...) @@ -301,10 +245,10 @@ floatFromMantExpImpl(int64_t mantissa, int32_t exponent, int32_t mode) detail::FloatState const rm(mode); if (!rm) return Unexpected(HostFunctionError::FloatInputMalformed); - detail::WasmNumber const num(mantissa, exponent); + auto const num = detail::numberFromMantExp(mantissa, exponent); if (!num) return Unexpected(HostFunctionError::FloatInputMalformed); - return num.toBytes(); + return detail::floatEncode(*num); } catch (...) { @@ -320,15 +264,15 @@ floatCompareImpl(Slice const& x, Slice const& y) // set default mode as we don't expect it will be used here detail::FloatState const rm(static_cast(Number::RoundingMode::ToNearest)); - detail::WasmNumber const xx(x); + auto const xx = detail::floatDecode(x); if (!xx) return Unexpected(HostFunctionError::FloatInputMalformed); - detail::WasmNumber const yy(y); + auto const yy = detail::floatDecode(y); if (!yy) return Unexpected(HostFunctionError::FloatInputMalformed); - if (xx < yy) + if (*xx < *yy) return 2; - if (xx == yy) + if (*xx == *yy) return 0; return 1; } @@ -349,15 +293,14 @@ floatAddImpl(Slice const& x, Slice const& y, int32_t mode) if (!rm) return Unexpected(HostFunctionError::FloatInputMalformed); - detail::WasmNumber const xx(x); + auto const xx = detail::floatDecode(x); if (!xx) return Unexpected(HostFunctionError::FloatInputMalformed); - detail::WasmNumber const yy(y); + auto const yy = detail::floatDecode(y); if (!yy) return Unexpected(HostFunctionError::FloatInputMalformed); - detail::WasmNumber const res = xx + yy; - return res.toBytes(); + return detail::floatEncode(*xx + *yy); } // LCOV_EXCL_START catch (...) @@ -375,15 +318,14 @@ floatSubtractImpl(Slice const& x, Slice const& y, int32_t mode) detail::FloatState const rm(mode); if (!rm) return Unexpected(HostFunctionError::FloatInputMalformed); - detail::WasmNumber const xx(x); + auto const xx = detail::floatDecode(x); if (!xx) return Unexpected(HostFunctionError::FloatInputMalformed); - detail::WasmNumber const yy(y); + auto const yy = detail::floatDecode(y); if (!yy) return Unexpected(HostFunctionError::FloatInputMalformed); - detail::WasmNumber const res = xx - yy; - return res.toBytes(); + return detail::floatEncode(*xx - *yy); } // LCOV_EXCL_START catch (...) @@ -401,15 +343,14 @@ floatMultiplyImpl(Slice const& x, Slice const& y, int32_t mode) detail::FloatState const rm(mode); if (!rm) return Unexpected(HostFunctionError::FloatInputMalformed); - detail::WasmNumber const xx(x); + auto const xx = detail::floatDecode(x); if (!xx) return Unexpected(HostFunctionError::FloatInputMalformed); - detail::WasmNumber const yy(y); + auto const yy = detail::floatDecode(y); if (!yy) return Unexpected(HostFunctionError::FloatInputMalformed); - detail::WasmNumber const res = xx * yy; - return res.toBytes(); + return detail::floatEncode(*xx * *yy); } // LCOV_EXCL_START catch (...) @@ -427,15 +368,14 @@ floatDivideImpl(Slice const& x, Slice const& y, int32_t mode) detail::FloatState const rm(mode); if (!rm) return Unexpected(HostFunctionError::FloatInputMalformed); - detail::WasmNumber const xx(x); + auto const xx = detail::floatDecode(x); if (!xx) return Unexpected(HostFunctionError::FloatInputMalformed); - detail::WasmNumber const yy(y); + auto const yy = detail::floatDecode(y); if (!yy) return Unexpected(HostFunctionError::FloatInputMalformed); - detail::WasmNumber const res = xx / yy; - return res.toBytes(); + return detail::floatEncode(*xx / *yy); } catch (...) { @@ -455,13 +395,11 @@ floatRootImpl(Slice const& x, int32_t n, int32_t mode) if (!rm) return Unexpected(HostFunctionError::FloatInputMalformed); - detail::WasmNumber const xx(x); + auto const xx = detail::floatDecode(x); if (!xx) return Unexpected(HostFunctionError::FloatInputMalformed); - detail::WasmNumber const res(root(xx, n)); - - return res.toBytes(); + return detail::floatEncode(root(*xx, n)); } // LCOV_EXCL_START catch (...) @@ -483,15 +421,13 @@ floatPowerImpl(Slice const& x, int32_t n, int32_t mode) if (!rm) return Unexpected(HostFunctionError::FloatInputMalformed); - detail::WasmNumber const xx(x); + auto const xx = detail::floatDecode(x); if (!xx) return Unexpected(HostFunctionError::FloatInputMalformed); - if (xx == Number() && (n == 0)) + if (*xx == Number() && (n == 0)) return Unexpected(HostFunctionError::InvalidParams); - detail::WasmNumber const res(power(xx, n, 1)); - - return res.toBytes(); + return detail::floatEncode(power(*xx, n, 1)); } // LCOV_EXCL_START catch (...) From 0774ca32a9645758147c72aeee9c9be31e4e205e Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 22 Jul 2026 18:05:56 -0400 Subject: [PATCH 135/137] fix build --- src/libxrpl/tx/wasm/WasmVM.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libxrpl/tx/wasm/WasmVM.cpp b/src/libxrpl/tx/wasm/WasmVM.cpp index d585892c69..7eda08f42b 100644 --- a/src/libxrpl/tx/wasm/WasmVM.cpp +++ b/src/libxrpl/tx/wasm/WasmVM.cpp @@ -63,14 +63,14 @@ setCommonHostFunctions(HostFunctions& hfs, ImportVec& i) WASM_IMPORT_FUNC2(i, didKeylet, "did_id", hfs, 350); WASM_IMPORT_FUNC2(i, escrowKeylet, "escrow_id", hfs, 350); WASM_IMPORT_FUNC2(i, trustLineKeylet, "trustline_id", hfs, 400); - WASM_IMPORT_FUNC2(i, mptokenIssuanceKeylet, "mptoken_issuance_id", hfs, 350); + WASM_IMPORT_FUNC2(i, mptokenIssuanceKeylet, "mpt_issuance_id", hfs, 350); WASM_IMPORT_FUNC2(i, mptokenKeylet, "mptoken_id", hfs, 500); WASM_IMPORT_FUNC2(i, nftokenOfferKeylet, "nft_offer_id", hfs, 350); WASM_IMPORT_FUNC2(i, offerKeylet, "offer_id", hfs, 350); WASM_IMPORT_FUNC2(i, oracleKeylet, "oracle_id", hfs, 350); - WASM_IMPORT_FUNC2(i, paychannelKeylet, "paychannel_id", hfs, 350); + WASM_IMPORT_FUNC2(i, paychannelKeylet, "paychan_id", hfs, 350); WASM_IMPORT_FUNC2(i, permissionedDomainKeylet, "permissioned_domain_id", hfs, 350); - WASM_IMPORT_FUNC2(i, signerListKeylet, "signer_list_id", hfs, 350); + WASM_IMPORT_FUNC2(i, signerListKeylet, "signers_id", hfs, 350); WASM_IMPORT_FUNC2(i, ticketKeylet, "ticket_id", hfs, 350); WASM_IMPORT_FUNC2(i, vaultKeylet, "vault_id", hfs, 350); @@ -79,7 +79,7 @@ setCommonHostFunctions(HostFunctions& hfs, ImportVec& i) WASM_IMPORT_FUNC2(i, getNFTTaxon, "nft_taxon", hfs, 60); WASM_IMPORT_FUNC2(i, getNFTFlags, "nft_flags", hfs, 60); WASM_IMPORT_FUNC2(i, getNFTTransferFee, "nft_xfer_fee", hfs, 60); - WASM_IMPORT_FUNC2(i, getNFTSequence, "nft_seq", hfs, 60); + WASM_IMPORT_FUNC2(i, getNFTSequence, "nft_serial", hfs, 60); WASM_IMPORT_FUNC (i, trace, hfs, 500); WASM_IMPORT_FUNC2(i, traceNum, "trace_num", hfs, 500); From 5a0269aca78742bd592918fd6cdd293d548368da Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 22 Jul 2026 18:37:10 -0400 Subject: [PATCH 136/137] fix test --- src/test/app/HostFuncImpl_test.cpp | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index f9943e121c..378d6a0947 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -3780,7 +3780,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite int const normalExp = 18; - Bytes const floatIntMin = {0xF3, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00, 0x01}; // -2^63 + Bytes const floatIntMin = {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00}; // -2^63 (rounds to nearest: -(2^63-1)) Bytes const floatIntZero = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00}; // 0 Bytes const floatIntMax = {0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00}; // 2^63-1 Bytes const floatUIntMax = {0x19, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9A, 0x00, 0x00, 0x00, 0x01}; // 2^64-1 @@ -4490,7 +4490,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite { // hfs.floatAdd(makeSlice(floatIntMax), makeSlice(floatIntMin), 0);// - // Number can't hold int64.min, it is rounded and we get -3, not -1 + // int64.min is rounded to nearest: -(2^63-1), so max + min == 0 WasmValVec params(7), result(1); vrt.setBytes(0, floatIntMax.data(), floatIntMax.size()); vrt.setBytes(floatSize, floatIntMin.data(), floatIntMin.size()); @@ -4509,7 +4509,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && BEAST_EXPECT(result[0].of.i32 == floatSize); auto const resultBytes = vrt.getBytes(params, 4); - BEAST_EXPECT(resultBytes == floatMinus3); + BEAST_EXPECT(resultBytes == floatIntZero); } } @@ -5762,17 +5762,20 @@ struct HostFuncImpl_test : public beast::unit_test::Suite } { - // Number can't hold int64.min, it is rounded and we get int64_t.min - 3, which doesn't - // fit into int64 + // int64.min is rounded to nearest: -(2^63-1), which fits into int64 // hfs.floatToInt(makeSlice(floatIntMin), 0); vrt.setBytes(0, floatIntMin.data(), floatIntMin.size()); WasmValVec params(5), result(1); auto* trap = ww(&import.at("float_to_int"), params, result, 0, floatSize, 256, 8, 0); BEAST_EXPECT(!trap) && BEAST_EXPECT(result[0].kind == WASM_I32) && - BEAST_EXPECT( - result[0].of.i32 == - static_cast(HostFunctionError::FloatComputationError)); + BEAST_EXPECT(result[0].of.i32 == 8); + auto const resultVal = vrt.getInt64(params, 2); + BEAST_EXPECT(resultVal == -std::numeric_limits::max()); + + // roundtrip + auto const result2 = hfs.floatFromInt(resultVal, 0); + BEAST_EXPECT(result2) && BEAST_EXPECT(*result2 == floatIntMin); } { @@ -5992,8 +5995,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite BEAST_EXPECT(result[0].of.i32 == floatSize); auto const mantissa = vrt.getInt64(params, 2); auto const exponent = vrt.getInt32(params, 4); - BEAST_EXPECT(mantissa == (std::numeric_limits::min() / 10) - 1) && - BEAST_EXPECT(exponent == 1); + BEAST_EXPECT(mantissa == -std::numeric_limits::max()) && + BEAST_EXPECT(exponent == 0); // roundtrip auto const result2 = hfs.floatFromMantExp(mantissa, exponent, 0); From cb6dad0bc4d03e77fdb548b49bf757558c8886ad Mon Sep 17 00:00:00 2001 From: Sergey Kuznetsov Date: Thu, 23 Jul 2026 14:07:08 +0100 Subject: [PATCH 137/137] chore: Fix clang-tidy issues --- include/xrpl/tx/wasm/WasmImportsHelper.h | 12 ++---------- include/xrpl/tx/wasm/WasmiVM.h | 2 +- src/libxrpl/tx/wasm/WasmiVM.cpp | 9 ++++++--- src/test/app/HostFuncImpl_test.cpp | 23 +++++++++++++---------- 4 files changed, 22 insertions(+), 24 deletions(-) diff --git a/include/xrpl/tx/wasm/WasmImportsHelper.h b/include/xrpl/tx/wasm/WasmImportsHelper.h index b5b98f672b..0c31e969c1 100644 --- a/include/xrpl/tx/wasm/WasmImportsHelper.h +++ b/include/xrpl/tx/wasm/WasmImportsHelper.h @@ -45,11 +45,7 @@ WasmImpArgs(WasmImportFunc& e) if constexpr (N < C) { using at = boost::mpl::at_c::type; - if constexpr (std::is_pointer_v) - { - e.params.push_back(WasmTypes::WtI32); - } - else if constexpr (std::is_same_v) + if constexpr (std::is_pointer_v || std::is_same_v) { e.params.push_back(WasmTypes::WtI32); } @@ -73,11 +69,7 @@ template void WasmImpRet(WasmImportFunc& e) { - if constexpr (std::is_pointer_v) - { - e.result = WasmTypes::WtI32; - } - else if constexpr (std::is_same_v) + if constexpr (std::is_pointer_v || std::is_same_v) { e.result = WasmTypes::WtI32; } diff --git a/include/xrpl/tx/wasm/WasmiVM.h b/include/xrpl/tx/wasm/WasmiVM.h index d4a026ff54..5a72cd35f6 100644 --- a/include/xrpl/tx/wasm/WasmiVM.h +++ b/include/xrpl/tx/wasm/WasmiVM.h @@ -264,7 +264,7 @@ public: return instanceWrap_.getFunc(funcName, exportTypes_); } - wasm_functype_t* + wasm_functype_t const* getFuncType(std::string_view funcName) const; Wmem diff --git a/src/libxrpl/tx/wasm/WasmiVM.cpp b/src/libxrpl/tx/wasm/WasmiVM.cpp index a174124208..cfe54fccc2 100644 --- a/src/libxrpl/tx/wasm/WasmiVM.cpp +++ b/src/libxrpl/tx/wasm/WasmiVM.cpp @@ -311,7 +311,10 @@ InstanceWrapper::setTransferLimit(std::int64_t x) ModulePtr ModuleWrapper::init(StorePtr& s, Bytes const& wasmBin, beast::Journal j) { - wasm_byte_vec_t const code{.size = wasmBin.size(), .data = (char*)(wasmBin.data())}; + wasm_byte_vec_t const code{ + .size = wasmBin.size(), + // NOLINTNEXTLINE(cppcoreguidelines-pro-type-const-cast) + .data = const_cast(reinterpret_cast(wasmBin.data()))}; ModulePtr m = ModulePtr(wasm_module_new(s.get(), &code), &wasm_module_delete); if (!m) throw std::runtime_error("can't create module"); @@ -482,7 +485,7 @@ ModuleWrapper::buildImports(StorePtr& s, ImportVec const& imports) const return wimports; } -wasm_functype_t* +wasm_functype_t const* ModuleWrapper::getFuncType(std::string_view funcName) const { for (size_t i = 0; i < exportTypes_.size(); i++) @@ -493,7 +496,7 @@ ModuleWrapper::getFuncType(std::string_view funcName) const if (wasm_externtype_kind(exnType) == WASM_EXTERN_FUNC && funcName == std::string_view(name->data, name->size)) { - return wasm_externtype_as_functype(const_cast(exnType)); + return wasm_externtype_as_functype_const(exnType); } } diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index 378d6a0947..8311aae638 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -3452,7 +3452,7 @@ struct HostFuncImpl_test : public beast::unit_test::Suite BEAST_EXPECT(result[0].of.i32 == 0)) { auto const messages = sink.messages().str(); - BEAST_EXPECT(messages.find(msg) != std::string::npos); + BEAST_EXPECT(messages.contains(msg)); } } @@ -3471,8 +3471,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite std::string hex; hex.reserve(data.size() * 2); boost::algorithm::hex(data.begin(), data.end(), std::back_inserter(hex)); - BEAST_EXPECT(messages.find(msg) != std::string::npos); - BEAST_EXPECT(messages.find(hex) != std::string::npos); + BEAST_EXPECT(messages.contains(msg)); + BEAST_EXPECT(messages.contains(hex)); } } } @@ -3542,8 +3542,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite BEAST_EXPECT(result[0].of.i32 == 0)) { auto const messages = sink.messages().str(); - BEAST_EXPECT(messages.find(msg) != std::string::npos); - BEAST_EXPECT(messages.find(std::to_string(num)) != std::string::npos); + BEAST_EXPECT(messages.contains(msg)); + BEAST_EXPECT(messages.contains(std::to_string(num))); } } @@ -3611,8 +3611,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite BEAST_EXPECT(result[0].of.i32 == 0)) { auto const messages = sink.messages().str(); - BEAST_EXPECT(messages.find(msg) != std::string::npos); - BEAST_EXPECT(messages.find(env.master.human()) != std::string::npos); + BEAST_EXPECT(messages.contains(msg)); + BEAST_EXPECT(messages.contains(env.master.human())); } } @@ -3689,8 +3689,8 @@ struct HostFuncImpl_test : public beast::unit_test::Suite BEAST_EXPECT(result[0].of.i32 == 0)) { auto const messages = sink.messages().str(); - BEAST_EXPECT(messages.find(msg) != std::string::npos); - BEAST_EXPECT(messages.find(amount.getFullText()) != std::string::npos); + BEAST_EXPECT(messages.contains(msg)); + BEAST_EXPECT(messages.contains(amount.getFullText())); } } @@ -6176,7 +6176,10 @@ struct HostFuncImpl_test : public beast::unit_test::Suite // trace() uses getDataString() -> getDataSlice() which does NOT check transfer limit std::string testMsg = "This message is longer than 10 bytes to prove slices don't count"; vrt.setBytes(0, testMsg.data(), testMsg.size()); - vrt.setBytes(100, (uint8_t const*)"dummy", 5); // Empty data slice for trace + vrt.setBytes( + 100, + reinterpret_cast("dummy"), + 5); // Empty data slice for trace { WasmValVec params(5), result(1); // trace(msg_ptr, msg_len, data_ptr, data_len, asHex)